This commit was manufactured by cvs2svn to create tag 'dev1-0-0'.
X-SVN-Rev: 943
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..62b3798
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,63 @@
+* 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/demo/rbbi/english.dict -text
+src/com/ibm/test/rbbi/english.dict -text
+src/com/ibm/text/resources/thai_dict -text
+src/data/holidays_jp.ucs -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..6fd4be8
--- /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/10 23:50:23 $
+REM $Revision: 1.3 $
+
+REM *******************************************************************************
+
+REM convience bat file to build with
+java -classpath "build\javac.jar;build\ant.jar;build\projectx-tr2.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..ee6ba6d
--- /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/10 04:17:55 $
+#* $Revision: 1.2 $
+#*
+#*****************************************************************************************
+#*/
+#!/bin/sh
+
+ADDL_CLASSPATH=build/ant.jar:build/projectx-tr2.jar:build/javac.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..d18db7c
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,90 @@
+<!--
+/*
+*******************************************************************************
+* Copyright (C) 1997-2000, International Business Machines Corporation and *
+* others. All Rights Reserved. *
+*******************************************************************************
+*
+* $Source: /xsrl/Nsvn/icu/icu4j/build.xml,v $
+* $Date: 2000/03/10 04:17:55 $
+* $Revision: 1.2 $
+*
+*****************************************************************************************
+*/
+-->
+
+<project name="ICU4J" default="core" basedir=".">
+
+ <property name="src.dir" value="src"/>
+ <property name="doc.dir" value="doc"/>
+ <property name="build.dir" value="classes"/>
+ <property name="classpath" value="${build.dir}"/>
+ <property name="build.compiler" value="classic"/>
+
+ <target name="all" depends="core,tests,tools,demos,jar,docs"/>
+
+ <target name="core">
+ <mkdir dir="${build.dir}"/>
+ <copyfile src="${src.dir}/com/ibm/text/resources/thai_dict"
+ dest="${build.dir}/com/ibm/text/resources/thai_dict"/>
+ <compile srcfiles="com/ibm/util,com/ibm/text"
+ srcdir="${src.dir}"
+ destdir="${build.dir}"
+ classpath="${classpath}"
+ debug="on" deprecation="off" target="1.2"/>
+ </target>
+
+ <target name="tests" depends="core">
+ <mkdir dir="${build.dir}"/>
+ <compile srcfiles="com/ibm/test"
+ srcdir="${src.dir}"
+ destdir="${build.dir}"
+ classpath="${classpath}"
+ debug="on" deprecation="off" target="1.2"/>
+ </target>
+
+ <target name="demos" depends="core">
+ <mkdir dir="${build.dir}"/>
+ <compile srcfiles="com/ibm/demo"
+ srcdir="${src.dir}"
+ destdir="${build.dir}"
+ classpath="${classpath}"
+ debug="on" deprecation="off" target="1.2"/>
+ </target>
+
+ <target name="tools" depends="core">
+ <mkdir dir="${build.dir}"/>
+ <compile srcfiles="com/ibm/tools"
+ srcdir="${src.dir}"
+ destdir="${build.dir}"
+ classpath="${classpath}"
+ debug="on" deprecation="off" target="1.2"/>
+ </target>
+
+ <target name="docs" depends="core,tests,tools">
+ <mkdir dir="${doc.dir}"/>
+ <docs sourcepath="${src.dir}"
+ destdir="${doc.dir}"
+ nodeprecatedlist="true"
+ windowtitle="ICU4J"
+ doctitle="ICU4J"
+ encoding="iso-8859-1"
+ docencoding="iso-8859-1"
+ bottom=""<font size=-1>Copyright (c); 1998-2000 IBM Corporation.</font>""
+ sourcefiles="src/com/ibm/text/*.java src/com/ibm/util/*.java"
+ />
+
+ </target>
+
+ <target name="jar" depends="core">
+ <jar jarfile="ICU4J.jar" basedir="${build.dir}" items="com"/>
+ </target>
+
+ <target name="clean">
+ <deltree dir="${build.dir}"/>
+ <deltree dir="${doc.dir}"/>
+ <deltree dir="ICU4J.jar"/>
+ </target>
+
+</project>
+
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’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
+("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES
+RECIPIENT’S ACCEPTANCE OF THIS AGREEMENT.</p>
+<b>
+
+<p>1. DEFINITIONS</p>
+</b>
+
+<p>"Contribution" means: </p>
+
+<blockquote>
+ <blockquote>
+ <p>a) in the case of International Business Machines Corporation ("IBM"), 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 ‘originates’ from a Contributor
+ if it was added to the Program by such Contributor itself or anyone acting on such
+ Contributor’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>"Contributor" means IBM and any other entity that distributes the Program.</p>
+
+<p>"Licensed Patents " 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>"Original Program" 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>"Program" means the Original Program and Contributions.</p>
+
+<p>"Recipient" 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’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 ("Commercial Contributor") hereby
+agrees to defend and indemnify every other Contributor ("Indemnified
+Contributor") against any losses, damages and costs (collectively "Losses")
+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’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 "AS
+IS" 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’s patent(s), then such
+Recipient’s rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed. </p>
+
+<p>All Recipient’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’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/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..ed57b16
--- /dev/null
+++ b/src/com/ibm/demo/DemoUtility.java
@@ -0,0 +1,110 @@
+/*
+ *******************************************************************************
+ * 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/03/10 03:47:42 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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);
+ }
+ /**
+ * 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..811eaa3
--- /dev/null
+++ b/src/com/ibm/demo/calendar/CalendarApp.java
@@ -0,0 +1,48 @@
+/*
+ *******************************************************************************
+ * 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/03/10 03:47:42 $
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+
+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 java.text.DateFormat;
+import java.util.SimpleTimeZone;
+
+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..23e51bb
--- /dev/null
+++ b/src/com/ibm/demo/calendar/CalendarCalc.java
@@ -0,0 +1,559 @@
+/*
+ *******************************************************************************
+ * 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/03/10 03:47:42 $
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+
+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 java.text.ParsePosition;
+
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.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();
+
+ 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());
+ }
+ if (locales[i].getLanguage().equals(Locale.getDefault().getLanguage())) {
+ 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, java.util.Calendar cal)
+ {
+ name = nameStr;
+ calendar = cal;
+ rollAdd = new Checkbox();
+
+ text = new JTextField("",FIELD_COLUMNS);
+ text.setFont(DemoUtility.editFont);
+
+ format = IBMCalendar.getDateFormat(cal, DateFormat.FULL,
+ Locale.getDefault());
+ //format.applyPattern(DEFAULT_FORMAT);
+ }
+
+ public void setLocale(Locale loc) {
+ String pattern = toPattern();
+
+ format = IBMCalendar.getDateFormat(calendar, DateFormat.FULL,
+ loc);
+ applyPattern(pattern);
+ }
+
+ public void applyPattern(String pattern) {
+ if (format instanceof SimpleDateFormat) {
+ ((SimpleDateFormat)format).applyPattern(pattern);
+ } else if (format instanceof java.text.SimpleDateFormat) {
+ ((java.text.SimpleDateFormat)format).applyPattern(pattern);
+ }
+ }
+
+ private String toPattern() {
+ if (format instanceof SimpleDateFormat) {
+ return ((SimpleDateFormat)format).toPattern();
+ } else if (format instanceof java.text.SimpleDateFormat) {
+ return ((java.text.SimpleDateFormat)format).toPattern();
+ } else {
+ return "";
+ }
+ }
+
+ java.util.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;
+};
\ No newline at end of file
diff --git a/src/com/ibm/demo/calendar/CalendarFrame.java b/src/com/ibm/demo/calendar/CalendarFrame.java
new file mode 100755
index 0000000..4612cd2
--- /dev/null
+++ b/src/com/ibm/demo/calendar/CalendarFrame.java
@@ -0,0 +1,422 @@
+/*
+ *******************************************************************************
+ * 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/03/10 03:47:42 $
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.demo.calendar;
+
+import com.ibm.demo.*;
+import com.ibm.util.IBMCalendar;
+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 java.applet.Applet;
+import java.awt.*;
+import java.awt.event.*;
+import java.net.*;
+import java.io.*;
+import java.text.DateFormat;
+import java.text.MessageFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import java.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();
+ int selectMe = 1;
+ 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].getLanguage().equals(Locale.getDefault().getLanguage())) {
+ 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 = IBMCalendar.getDateTimeFormat(
+ 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"));
+ } 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, java.util.Calendar cal)
+ {
+ name = nameStr;
+ calendar = cal;
+ }
+
+ java.util.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..f9e3c8a
--- /dev/null
+++ b/src/com/ibm/demo/calendar/CalendarPanel.java
@@ -0,0 +1,364 @@
+/*
+ *******************************************************************************
+ * 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/03/10 03:47:43 $
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+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 java.util.SimpleTimeZone;
+import java.util.*;
+
+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] = IBMCalendar.getDateFormatSymbols(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] = IBMCalendar.getDateFormatSymbols(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/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..cb438ef
--- /dev/null
+++ b/src/com/ibm/demo/holiday/HolidayCalendarDemo.java
@@ -0,0 +1,706 @@
+/*
+ *******************************************************************************
+ * 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/03/10 03:47:43 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+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 java.text.DateFormatSymbols;
+import java.util.SimpleTimeZone;
+import java.util.*;
+
+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();
+ 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());
+ }
+ }
+ displayMenu.setBackground(DemoUtility.choiceColor);
+ displayMenu.select(kFirstLocale.getDisplayName());
+
+ // 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 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/rbbi/BreakIteratorRules_en_US_DEMO.java b/src/com/ibm/demo/rbbi/BreakIteratorRules_en_US_DEMO.java
new file mode 100755
index 0000000..db933bc
--- /dev/null
+++ b/src/com/ibm/demo/rbbi/BreakIteratorRules_en_US_DEMO.java
@@ -0,0 +1,105 @@
+/*
+ *******************************************************************************
+ * 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: 2000/03/10 03:47:43 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+/**
+ * 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 {
+ 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>=[:Mn::Me::Cf:];"
+ + "<dictionary>=[a-zA-z\\'\\-];"
+ + "<kanji>=[\u3005\u4e00-\u9fa5\uf900-\ufa2d];"
+ + "<kata>=[\u30a1-\u30fa];"
+ + "<hira>=[\u3041-\u3094];"
+ + "<cjk-diacrit>=[\u3099-\u309c];"
+ + "<let>=[:L:^[<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><let>*(<mid-word><let><let>*)*|[a-zA-Z][a-z\\'\\-]*);"
+ + "<number>=(<dgt><dgt>*(<mid-num><dgt><dgt>*)*);"
+ + ".;"
+ + "{<word>}(<number><word>)*{<number>{<post-num>}};"
+ + "<pre-num>(<number><word>)*{<number>{<post-num>}};"
+ + "<ws>*{\r}{<ls>};"
+ + "[<kata><cjk-diacrit>]*;"
+ + "[<hira><cjk-diacrit>]*;"
+ + "<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>=[:Mn::Me::Cf:];"
+ + "<dictionary>=[a-zA-z\\'\\-];"
+ + "<break>=[\u0003\t\n\f\u2028\u2029];"
+ + "<nbsp>=[\u00a0\u2007\u2011\ufeff];"
+ + "<space>=[:Zs::Cc:^[<nbsp><break>\r]];"
+ + "<dash>=[:Pd:\u00ad^<nbsp>];"
+ + "<pre-word>=[:Sc::Ps:^\u00a2];"
+ + "<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];"
+ + "<kanji>=[\u4e00-\u9fa5\uf900-\ufa2d\u3041-\u3094\u30a1-\u30fa^[<post-word><ignore>]];"
+ + "<digit>=[:Nd::No:];"
+ + "<mid-num>=[\\.\\,];"
+ + "<char>=[^[<break><space><dash><kanji><nbsp><ignore><dictionary>\r]];"
+ + "<number>=([<pre-word><dash>]*<digit><digit>*(<mid-num><digit><digit>*)*);"
+ + "<word-core>=(<char>*|<kanji>|<number>|[a-zA-Z][a-z\\'\\-]*);"
+ + "<word-suffix>=((<dash><dash>*|<post-word>*)<space>*);"
+ + "<word>=(<pre-word>*<word-core><word-suffix>);"
+ + "<word>(<nbsp><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" }
+ };
+}
diff --git a/src/com/ibm/demo/rbbi/DBBIDemo.java b/src/com/ibm/demo/rbbi/DBBIDemo.java
new file mode 100755
index 0000000..83af71a
--- /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: 2000/03/10 03:47:43 $
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+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,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 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/english.dict b/src/com/ibm/demo/rbbi/english.dict
new file mode 100755
index 0000000..860dcbe
--- /dev/null
+++ b/src/com/ibm/demo/rbbi/english.dict
Binary files differ
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/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..a5e7ba3
--- /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>jcu/src</code>, and make sure the Java files in the directories
+under <code>jcu/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/test/TestFmwk.java b/src/com/ibm/test/TestFmwk.java
new file mode 100755
index 0000000..0c4104e
--- /dev/null
+++ b/src/com/ibm/test/TestFmwk.java
@@ -0,0 +1,262 @@
+/*
+ *******************************************************************************
+ * 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: 2000/03/10 03:47:44 $
+ * $Revision: 1.8 $
+ *
+ *****************************************************************************************
+ */
+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.*;
+
+
+
+/**
+ * BITestFmwk 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 {
+
+ /**
+ * 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] );
+ }
+ }
+ }
+
+ 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")) {
+ 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();
+ System.out.println(getClass().getName() + " {");
+ params.indentLevel++;
+ Enumeration methodsToRun;
+
+ if (testsToRun.size() < 1) {
+ methodsToRun = testMethods.elements();
+ } else {
+ methodsToRun = testsToRun.elements();
+ }
+
+ // 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 acces 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);
+
+ 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 {
+ childTest.setParent(this);
+ childTest.run(new String[0]);
+ }
+
+ private void setParent(TestFmwk parent) {
+ params = parent.params;
+ }
+
+ /**
+ * Adds given string to the log if we are in verbose mode.
+ */
+ protected void log( String message ) {
+ if( params.verbose ) {
+ indent(params.indentLevel + 1);
+ params.log.print( message );
+ params.log.flush();
+ }
+ }
+
+ protected void logln( String message ) {
+ log(message + System.getProperty("line.separator"));
+ }
+
+ /**
+ * Report an error
+ */
+ protected void err( String message ) {
+ params.errorCount++;
+ indent(params.indentLevel + 1);
+ params.log.print( message );
+ params.log.flush();
+
+ if (!params.nothrow) {
+ throw new RuntimeException(message);
+ }
+ }
+
+ protected 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");
+ } 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/bnf/BigNumberFormatTest.java b/src/com/ibm/test/bnf/BigNumberFormatTest.java
new file mode 100755
index 0000000..b361941
--- /dev/null
+++ b/src/com/ibm/test/bnf/BigNumberFormatTest.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/test/bnf/Attic/BigNumberFormatTest.java,v $
+ * $Date: 2000/03/10 03:47:44 $
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.bnf;
+
+import com.ibm.test.*;
+import com.ibm.text.*;
+import java.text.ParseException;
+import java.util.*;
+import java.math.BigInteger;
+
+/**
+ * @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);
+ }
+
+ 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 + '"');
+ }
+ }
+
+//This has been removed pending addition of com.ibm.math package to ICU4J
+ /*
+ * 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",
+ }
+ );
+ }
+
+ 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();
+ //This has been removed pending addition of com.ibm.math package to ICU4J
+ 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 + " = \"" +
+ saw + '"');
+ } else {
+ errln("FAIL " + showNumber(n) + " x " +
+ pat + " = \"" +
+ saw + "\", expected \"" + 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));
+ }
+ }
+
+ 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/calendar/AstroTest.java b/src/com/ibm/test/calendar/AstroTest.java
new file mode 100755
index 0000000..5db2e82
--- /dev/null
+++ b/src/com/ibm/test/calendar/AstroTest.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/test/calendar/Attic/AstroTest.java,v $
+ * $Date: 2000/03/10 03:47:45 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.calendar;
+
+// AstroTest
+
+import com.ibm.test.*;
+import java.util.*;
+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());
+ }
+
+}
\ No newline at end of file
diff --git a/src/com/ibm/test/calendar/CalendarTest.java b/src/com/ibm/test/calendar/CalendarTest.java
new file mode 100755
index 0000000..5b43c05
--- /dev/null
+++ b/src/com/ibm/test/calendar/CalendarTest.java
@@ -0,0 +1,171 @@
+/*
+ *******************************************************************************
+ * 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/03/10 03:47:45 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.test.calendar;
+
+import com.ibm.test.*;
+import java.text.*;
+import java.util.*;
+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");
+
+ final String pattern = "E, MM/dd/yyyy G HH:mm:ss.S z";
+
+ /**
+ * 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
+ // TODO: This is kind of ugly right now .
+ DateFormat format = IBMCalendar.getDateTimeFormat(cal, DateFormat.SHORT, -1, Locale.getDefault());
+
+ ((SimpleDateFormat)format).applyPattern(pattern);
+ DateFormat testFmt = (DateFormat)format.clone();
+
+ // This format is used for pringing Gregorian dates. This one is easier
+ DateFormat gregFormat = new SimpleDateFormat(pattern);
+ gregFormat.setTimeZone(UTC);
+
+ // Now iterate through the test cases and see what happens
+ for (int i = 0; i < cases.length; i++)
+ {
+ TestCase test = cases[i];
+ testFmt.setCalendar(test);
+
+ //
+ // 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)) {
+ errln("ERROR: millis --> fields calculation incorrect for "
+ + gregFormat.format(test.getTime()));
+ logln(" expected " + testFmt.format(test.getTime()));
+ logln(" got " + format.format(cal.getTime()) );
+ }
+ else {
+ //
+ // 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.setTime(new Date(0));
+ test.applyFields(cal);
+
+ if (!test.equals(cal)) {
+ errln("ERROR: fields --> millis calculation incorrect for "
+ + testFmt.format(test.getTime()));
+ logln(" expected " + test.getTime().getTime());
+ logln(" got " + cal.getTime().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, IBMCalendar cal, int[][] tests)
+ {
+ String name = roll ? "rolling" : "adding";
+
+ for (int i = 0; i < tests.length; i++) {
+ int[] test = tests[i];
+
+ cal.clear();
+ cal.set(test[0], test[1], test[2]);
+
+ if (roll) {
+ cal.roll(test[3], test[4]);
+ } else {
+ cal.add(test[3], test[4]);
+ }
+
+ if (cal.get(YEAR) != test[5] || cal.get(MONTH) != test[6]
+ || cal.get(DATE) != test[7])
+ {
+ errln("Error " + name + " "+ ymdToString(test[0], test[1], test[2])
+ + " field " + test[3] + " by " + test[4]
+ + ": expected " + ymdToString(test[5], test[6], test[7])
+ + ", got " + ymdToString(cal.get(YEAR), cal.get(MONTH), cal.get(DATE)));
+ }
+ }
+ }
+
+ /**
+ * 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;
+ }
+};
diff --git a/src/com/ibm/test/calendar/HebrewTest.java b/src/com/ibm/test/calendar/HebrewTest.java
new file mode 100755
index 0000000..4779f64
--- /dev/null
+++ b/src/com/ibm/test/calendar/HebrewTest.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/test/calendar/Attic/HebrewTest.java,v $
+ * $Date: 2000/03/10 03:47:45 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.test.calendar;
+
+import com.ibm.test.*;
+import java.util.*;
+import java.text.*;
+import com.ibm.util.*;
+
+/**
+ * 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 },
+
+ { 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, 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),
+ };
+
+
+};
\ No newline at end of file
diff --git a/src/com/ibm/test/calendar/IslamicTest.java b/src/com/ibm/test/calendar/IslamicTest.java
new file mode 100755
index 0000000..66a29e2
--- /dev/null
+++ b/src/com/ibm/test/calendar/IslamicTest.java
@@ -0,0 +1,128 @@
+/*
+ *******************************************************************************
+ * 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/03/10 03:47:45 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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);
+ }
+
+ private static IslamicCalendar newCivil() {
+ IslamicCalendar civilCalendar = new IslamicCalendar();
+ civilCalendar.setCivil(true);
+ return civilCalendar;
+ }
+
+};
\ No newline at end of file
diff --git a/src/com/ibm/test/calendar/TestCase.java b/src/com/ibm/test/calendar/TestCase.java
new file mode 100755
index 0000000..65911ca
--- /dev/null
+++ b/src/com/ibm/test/calendar/TestCase.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/test/calendar/Attic/TestCase.java,v $
+ * $Date: 2000/03/10 03:47:45 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.calendar;
+
+import com.ibm.test.*;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.Date;
+import java.util.SimpleTimeZone;
+import java.util.Locale;
+
+/**
+ * A dummy <code>Calendar</code> subclass 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 extends Calendar {
+
+ /**
+ * 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 (0-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)
+ {
+ super(UTC, Locale.getDefault());
+
+ setTime(new Date(JULIAN_EPOCH + (long)(DAY_MS * julian)));
+
+ set(ERA, era);
+ set(YEAR, year);
+ set(MONTH, month - 1);
+ set(DATE, day);
+ set(DAY_OF_WEEK, dayOfWeek);
+ set(HOUR, hour);
+ set(MINUTE, min);
+ set(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)
+ {
+ super(UTC, Locale.getDefault());
+
+ GregorianCalendar greg = new GregorianCalendar(UTC, Locale.getDefault());
+ greg.clear();
+ greg.set(gregYear, gregMonth-1, gregDay);
+ setTime(greg.getTime());
+
+ set(ERA, era);
+ set(YEAR, year);
+ set(MONTH, month - 1);
+ set(DATE, day);
+ set(DAY_OF_WEEK, dayOfWeek);
+ set(HOUR, hour);
+ set(MINUTE, min);
+ set(SECOND, sec);
+ }
+
+ /**
+ * 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) {
+ c.set(ERA, fields[ERA]);
+ c.set(YEAR, fields[YEAR]);
+ c.set(MONTH, fields[MONTH]);
+ c.set(DATE, fields[DATE]);
+ c.set(HOUR, fields[HOUR]);
+ c.set(MINUTE, fields[MINUTE]);
+ c.set(SECOND, fields[SECOND]);
+ }
+
+ /**
+ * 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) {
+ for (int i=0; i < Calendar.FIELD_COUNT; i++) {
+ if (isSet(i) && get(i) != c.get(i)) {
+ System.out.println("field " + i + ": expected " + get(i) + ", got " + c.get(i));
+ 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();
+ }
+
+ /**
+ * Determine whether time of this calendar (as returned by getTime)
+ * is before that of the specified calendar
+ */
+ public boolean before(Object obj) {
+ return time < ((Calendar)obj).getTime().getTime();
+ }
+
+ /**
+ * Determine whether time of this calendar (as returned by getTime)
+ * is after that of the specified calendar
+ */
+ public boolean after(Object obj) {
+ return time > ((Calendar)obj).getTime().getTime();
+ }
+
+ // This object is only pretending to be a Calendar; it doesn't do any real
+ // calendar computatations. But we have to pretend it does, because Calendar
+ // declares all of these abstract methods....
+ protected void computeTime() {}
+ protected void computeFields() {}
+ public void roll(int field, boolean up) {}
+ public void add(int field, int amt) {}
+ public int getMinimum(int field) { return 0; }
+ public int getMaximum(int field) { return 0; }
+ public int getGreatestMinimum(int field) { return 0; }
+ public int getLeastMaximum(int field) { return 0; }
+
+ private static final int SECOND_MS = 1000;
+ private static final int MINUTE_MS = 60*SECOND_MS;
+ private static final int HOUR_MS = 60*MINUTE_MS;
+ private static final long DAY_MS = 24*HOUR_MS;
+ private 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/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..0a2c399
--- /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/03/10 03:47:46 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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 Wrld!",
+ "Hell\u0429o \u9292 \u9292Wrld!",
+
+ "\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\u0192rld!",
+ "Hell\u0429o \u9292 \u9292Wrld!",
+ "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/normalizer/BasicTest.java b/src/com/ibm/test/normalizer/BasicTest.java
new file mode 100755
index 0000000..e732968
--- /dev/null
+++ b/src/com/ibm/test/normalizer/BasicTest.java
@@ -0,0 +1,340 @@
+/*
+ *******************************************************************************
+ * 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: 2000/03/10 03:47:46 $
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.normalizer;
+
+import com.ibm.test.*;
+import com.ibm.text.*;
+
+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
+
+// { "ýffin", "A\u0308ffin", "ýffin" },
+ { "ýffin", "y\u0301ffin", "ýffin" }, //updated with 3.0
+// { "ý\uFB03n", "A\u0308\uFB03n", "ý\uFB03n" },
+ { "ý\uFB03n", "y\u0301\uFB03n", "ý\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
+ };
+
+ String[][] compatTests = {
+ // Input Decomposed Composed
+ { "\uFB4f", "\u05D0\u05DC", "\u05D0\u05DC", }, // Alef-Lamed vs. Alef, Lamed
+
+// { "ýffin", "A\u0308ffin", "ýffin" },
+// { "ý\uFB03n", "A\u0308ffin", "ýffin" }, // ffi ligature -> f + f + i
+ { "ýffin", "y\u0301ffin", "ýffin" }, //updated for 3.0
+ { "ý\uFB03n", "y\u0301ffin", "ýffin" }, // 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);
+ }
+ */
+
+
+ //------------------------------------------------------------------------
+ // 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("Forward/reverse mismatch 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("Forward/reverse mismatch 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("ERROR: 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, "ERROR: case " + i + " ");
+ }
+ }
+
+ private void assertEqual(String expected, Normalizer iter, String errPrefix)
+ {
+ int index = 0;
+ for (char ch = iter.first(); ch != iter.DONE; ch = iter.next())
+ {
+ if (index >= expected.length()) {
+ errln(errPrefix + "Unexpected character '" + ch + "' (" + hex(ch) + ")"
+ + " at index " + index);
+ break;
+ }
+ char want = expected.charAt(index);
+ if (ch != want) {
+ errln(errPrefix + "got '" + ch + "' (" + hex(ch) + ")"
+ + " but expected '" + want + "' (" + hex(want) + ")"
+ + " at index " + index);
+ }
+ index++;
+ }
+ if (index < expected.length()) {
+ errln(errPrefix + "Only got " + index + " chars, expected " + expected.length());
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/com/ibm/test/normalizer/ExhaustiveTest.java b/src/com/ibm/test/normalizer/ExhaustiveTest.java
new file mode 100755
index 0000000..dd9e0ff
--- /dev/null
+++ b/src/com/ibm/test/normalizer/ExhaustiveTest.java
@@ -0,0 +1,146 @@
+/*
+ *******************************************************************************
+ * 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: 2000/03/10 03:47:46 $
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.normalizer;
+
+import com.ibm.test.*;
+import com.ibm.text.*;
+
+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]);
+ } else {
+ tempArgs[count++] = args[i];
+ }
+ }
+
+ args = new String[count];
+ System.arraycopy(tempArgs, 0, args, 0, count);
+
+
+ if (tempInfo == null) {
+ tempInfo = new UInfo("../src/data/unicode/UnicodeData.txt");
+ }
+ 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) + "'");
+ }
+ }
+ }
+}
\ 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..cae8e3f
--- /dev/null
+++ b/src/com/ibm/test/rbbi/BreakIteratorRules_en_US_TEST.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/rbbi/Attic/BreakIteratorRules_en_US_TEST.java,v $
+ * $Date: 2000/03/10 03:47:46 $
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+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_TEST extends ListResourceBundle {
+ public Object[][] getContents() {
+ URL url = getClass().getResource("english.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
+ },
+
+ // 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=[[:Mn:][:Me:][:Cf:]];"
+ + "dictionary=[a-zA-z\\'\\-];"
+ + "kanji=[\u3005\u4e00-\u9fa5\uf900-\ufa2d];"
+ + "kata=[\u30a1-\u30fa];"
+ + "hira=[\u3041-\u3094];"
+ + "cjk-diacrit=[\u3099-\u309c];"
+ + "let=[[:L:]^[{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}{let}*({mid-word}{let}{let}*)*|[a-zA-Z][a-z\\'\\-]*);"
+ + "number=({dgt}{dgt}*({mid-num}{dgt}{dgt}*)*);"
+ + ".;"
+ + "{{word}}({number}{word})*{{number}{{post-num}}};"
+ + "{pre-num}({number}{word})*{{number}{{post-num}}};"
+ + "{ws}*{\r}{{ls}};"
+ + "[{kata}{cjk-diacrit}]*;"
+ + "[{hira}{cjk-diacrit}]*;"
+ + "{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>=[:Mn::Me::Cf:];"
+ + "<dictionary>=[a-zA-z\\'\\-];"
+ + "<break>=[\u0003\t\n\f\u2028\u2029];"
+ + "<nbsp>=[\u00a0\u2007\u2011\ufeff];"
+ + "<space>=[:Zs::Cc:^[<nbsp><break>\r]];"
+ + "<dash>=[:Pd:\u00ad^<nbsp>];"
+ + "<pre-word>=[:Sc::Ps:^\u00a2];"
+ + "<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];"
+ + "<kanji>=[\u4e00-\u9fa5\uf900-\ufa2d\u3041-\u3094\u30a1-\u30fa^[<post-word><ignore>]];"
+ + "<digit>=[:Nd::No:];"
+ + "<mid-num>=[\\.\\,];"
+ + "<char>=[^[<break><space><dash><kanji><nbsp><ignore><dictionary>\r]];"
+ + "<number>=([<pre-word><dash>]*<digit><digit>*(<mid-num><digit><digit>*)*);"
+ + "<word-core>=(<char>*|<kanji>|<number>|[a-zA-Z][a-z\\'\\-]*);"
+ + "<word-suffix>=((<dash><dash>*|<post-word>*)<space>*);"
+ + "<word>=(<pre-word>*<word-core><word-suffix>);"
+ + "<word>(<nbsp><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..fc05934
--- /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/03/10 03:47:46 $
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+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();
+System.out.println("Creating sentence iterator...");
+ sentenceBreak = BreakIterator.getSentenceInstance();
+System.out.println("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 "
+ + ""lightweight" (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/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/english.dict b/src/com/ibm/test/rbbi/english.dict
new file mode 100755
index 0000000..860dcbe
--- /dev/null
+++ b/src/com/ibm/test/rbbi/english.dict
Binary files differ
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/search/SearchTest.java b/src/com/ibm/test/search/SearchTest.java
new file mode 100755
index 0000000..22286f1
--- /dev/null
+++ b/src/com/ibm/test/search/SearchTest.java
@@ -0,0 +1,463 @@
+/*
+ *******************************************************************************
+ * 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: 2000/03/10 03:47:47 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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 ; ä & AE ; Ä"
+ + " & oe ; ö & OE ; Ö"
+ + " & ue ; ü & UE ; Ü");
+ }
+ 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());
+ }
+
+ System.out.println("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++;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/com/ibm/test/topleveltest/TestAll.java b/src/com/ibm/test/topleveltest/TestAll.java
new file mode 100755
index 0000000..050aa66
--- /dev/null
+++ b/src/com/ibm/test/topleveltest/TestAll.java
@@ -0,0 +1,76 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/test/topleveltest/Attic/TestAll.java,v $
+ * $Date: 2000/03/10 03:47:47 $
+ * $Revision: 1.8 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.topleveltest;
+import com.ibm.test.TestFmwk;
+import java.text.*;
+import java.util.*;
+
+/**
+ * @test
+ * @summary General test of UnicodeSet
+ */
+
+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 TestCompression1() throws Exception{
+ run(new com.ibm.test.compression.DecompressionTest());
+ }
+
+ public void TestCompression2() throws Exception{
+ run(new com.ibm.test.compression.ExhaustiveTest());
+ }
+
+ public void TestNormalizer1() throws Exception{
+ run(new com.ibm.test.normalizer.BasicTest());
+ }
+
+ public void TestNormalizer2() throws Exception {
+ run(new com.ibm.test.normalizer.ExhaustiveTest());
+ }
+
+ public void TestRuleBasedNumberFormat1() throws Exception {
+ run(new com.ibm.test.rbnf.RbnfTest());
+ }
+
+ public void TestRulebasedNumberFormat2() throws Exception {
+ run(new com.ibm.test.rbnf.RbnfRoundTripTest());
+ }
+
+ public void TestRuleBasedBreakIteartor1() throws Exception {
+ run(new com.ibm.test.rbbi.SimpleBITest());
+ }
+
+ public void TestRuleBasedBreakIteartor2() throws Exception {
+ run(new com.ibm.test.rbbi.BreakIteratorTest());
+ }
+
+ public void TestTranslit1() throws Exception {
+ run(new com.ibm.test.translit.UnicodeSetTest());
+ }
+
+ public void TestTranslit2() throws Exception {
+ run(new com.ibm.test.translit.TransliteratorTest());
+ }
+
+ public void TestSearch() throws Exception {
+ run(new com.ibm.test.search.SearchTest());
+ }
+}
diff --git a/src/com/ibm/test/translit/TransliteratorTest.java b/src/com/ibm/test/translit/TransliteratorTest.java
new file mode 100755
index 0000000..72b76c8
--- /dev/null
+++ b/src/com/ibm/test/translit/TransliteratorTest.java
@@ -0,0 +1,470 @@
+/*
+ *******************************************************************************
+ * 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: 2000/03/10 03:47:47 $
+ * $Revision: 1.13 $
+ *
+ *****************************************************************************************
+ */
+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.start)).
+ append('{').
+ append(str.substring(index.start,
+ index.cursor)).
+ append('|').
+ append(str.substring(index.cursor));
+ 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 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]);
+ }
+ }
+
+ //======================================================================
+ // 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.getStringBuffer().setLength(0);
+ 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.cursor)).
+ append('|').
+ append(s.substring(index.cursor));
+ }
+
+ // 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/UnicodeSetTest.java b/src/com/ibm/test/translit/UnicodeSetTest.java
new file mode 100755
index 0000000..e3de87b
--- /dev/null
+++ b/src/com/ibm/test/translit/UnicodeSetTest.java
@@ -0,0 +1,170 @@
+/*
+ *******************************************************************************
+ * 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/03/10 03:47:47 $
+ * $Revision: 1.6 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.test.translit;
+import com.ibm.text.*;
+import com.ibm.test.*;
+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() {
+ UnicodeSet set = new UnicodeSet("[:Lu:]");
+ expectContainment(set, "ABC", "abc");
+ }
+
+ 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");
+ }
+
+ 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("Fail: set " + set + " does not contain " + bad +
+ ", expected containment of " + charsIn);
+ } else {
+ logln("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("Fail: set " + set + " contains " + bad +
+ ", expected non-containment of " + charsOut);
+ } else {
+ logln("Ok: set " + set + " does not contain " + charsOut);
+ }
+ }
+ }
+
+ void expectPattern(UnicodeSet set,
+ String pattern,
+ String expectedPairs) {
+ set.applyPattern(pattern);
+ if (!set.getPairs().equals(expectedPairs)) {
+ errln("FAIL: applyPattern(\"" + pattern +
+ "\") => pairs \"" +
+ escape(set.getPairs()) + "\", expected \"" +
+ escape(expectedPairs) + "\"");
+ } else {
+ logln("Ok: applyPattern(\"" + pattern +
+ "\") => pairs \"" +
+ escape(set.getPairs()) + "\"");
+ }
+ }
+
+ void expectPairs(UnicodeSet set, String expectedPairs) {
+ if (!set.getPairs().equals(expectedPairs)) {
+ errln("FAIL: Expected pair list \"" +
+ escape(expectedPairs) + "\", got \"" +
+ escape(set.getPairs()) + "\"");
+ }
+ }
+
+ /**
+ * Escape non-ASCII characters as Unicode.
+ */
+ 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) {
+ 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/BreakDictionary.java b/src/com/ibm/text/BreakDictionary.java
new file mode 100755
index 0000000..1656027
--- /dev/null
+++ b/src/com/ibm/text/BreakDictionary.java
@@ -0,0 +1,296 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:07:18 $
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+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));
+
+ String outputFile = "";
+ if(args.length >= 2) {
+ outputFile = args[1];
+ }
+ PrintWriter out = null;
+ if (outputFile.length() != 0) {
+ out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(outputFile), "UnicodeLittle"));
+ }
+ dictionary.printWordList("", 0, out);
+ }
+
+ public 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);
+ }
+ }
+ }
+ }
+
+ /**
+ * 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/CharSet.java b/src/com/ibm/text/CharSet.java
new file mode 100755
index 0000000..047da03
--- /dev/null
+++ b/src/com/ibm/text/CharSet.java
@@ -0,0 +1,975 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/CharSet.java,v $
+ * $Date: 2000/03/10 04:07:18 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+import java.util.Hashtable;
+
+/**
+ * An object representing a set of characters. (This is a "set" in the
+ * mathematical sense: an unduplicated list of characters on which set
+ * operations such as union and intersection can be performed.) The
+ * set information is stored in compressed, optimized form: The object
+ * contains a String with an even number of characters. Each pair of
+ * characters represents a range of characters contained in the set
+ * (a pair of the same character represents a single character). The
+ * characters are sorted in increasing order.
+ */
+public class CharSet implements Cloneable {
+ /**
+ * The structure containing the set information. The characters
+ * in this string are organized into pairs, each pair representing
+ * a range of characters contained in the set
+ */
+ private String chars;
+
+ //==========================================================================
+ // parseString() and associated routines
+ //==========================================================================
+ /**
+ * A cache which is used to speed up parseString() whenever it is
+ * used to parse a description that has been parsed before
+ */
+ private static Hashtable expressionCache = null;
+
+ /**
+ * Builds a CharSet based on a textual description. For the syntax of
+ * the description, see the documentation of RuleBasedBreakIterator.
+ * @see com.ibm.text.RuleBasedBreakIterator
+ */
+ public static CharSet parseString(String s) {
+ CharSet result = null;
+
+ // if "s" is in the expression cache, pull the result out
+ // of the expresison cache
+ if (expressionCache != null) {
+ result = (CharSet)expressionCache.get(s);
+ }
+
+ // otherwise, use doParseString() to actually parse the string,
+ // and then add a corresponding entry to the expression cache
+ if (result == null) {
+ result = doParseString(s);
+ if (expressionCache == null) {
+ expressionCache = new Hashtable();
+ }
+ expressionCache.put(s, result);
+ }
+ result = (CharSet)(result.clone());
+ return result;
+ }
+
+ /**
+ * This function is used by parseString() to actually parse the string
+ */
+ private static CharSet doParseString(String s) {
+ CharSet result = new CharSet();
+ int p = 0;
+
+ boolean haveDash = false;
+ boolean haveTilde = false;
+ boolean wIsReal = false;
+ char w = '\u0000';
+
+ // for each character in the description...
+ while (p < s.length()) {
+ char c = s.charAt(p);
+
+ // if it's an opening bracket...
+ if (c == '[') {
+ // flush the single-character cache
+ if (wIsReal) {
+ result.internalUnion(new CharSet(w));
+ }
+
+ // locate the matching closing bracket
+ int bracketLevel = 1;
+ int q = p + 1;
+ while (bracketLevel != 0) {
+ if (s.charAt(q) == '[') {
+ ++bracketLevel;
+ }
+ else if (s.charAt(q) == ']') {
+ --bracketLevel;
+ }
+ ++q;
+ }
+ --q;
+
+ // call parseString() recursively to parse the text inside
+ // the brackets, then either add or subtract the result from
+ // our running result depending on whether or not the []
+ // expresison was preceded by a ^
+ if (!haveTilde) {
+ result.internalUnion(CharSet.parseString(s.substring(p + 1, q)));
+ }
+ else {
+ result.internalDifference(CharSet.parseString(s.substring(p + 1, q)));
+ }
+ haveTilde = false;
+ haveDash = false;
+ wIsReal = false;
+ p = q + 1;
+ }
+
+ // if the character is a colon...
+ else if (c == ':') {
+ // flush the single-character cache
+ if (wIsReal) {
+ result.internalUnion(new CharSet(w));
+ }
+
+ // locate the matching colon (and throw an error if there
+ // isn't one)
+ int q = s.indexOf(':', p + 1);
+ if (q == -1) {
+ throw new IllegalArgumentException("Parse error at position " + p + " in " + s);
+ }
+
+ // use charSetForCategory() to parse the text in the colons,
+ // and either add or substract the result from our running
+ // result depending on whether the :: expression was
+ // preceded by a ^
+ if (!haveTilde) {
+ result.internalUnion(charSetForCategory(s.substring(p + 1, q)));
+ }
+ else {
+ result.internalDifference(charSetForCategory(s.substring(p + 1, q)));
+ }
+
+ // reset everything and advance to the next character
+ haveTilde = false;
+ haveDash = false;
+ wIsReal = false;
+ p = q + 1;
+ }
+
+ // if the character is a dash, set an appropriate flag
+ else if (c == '-') {
+ if (wIsReal) {
+ haveDash = true;
+ }
+ ++p;
+ }
+
+ // if the character is a caret, flush the single-character
+ // cache and set an appropriate flag. If the set is empty
+ // (i.e., if the expression begins with ^), invert the set
+ // (i.e., set it to include everything). The idea here is
+ // that a set that includes nothing but ^ expressions
+ // means "everything but these things".
+ else if (c == '^') {
+ if (wIsReal) {
+ result.internalUnion(new CharSet(w));
+ wIsReal = false;
+ }
+ haveTilde = true;
+ ++p;
+ if (result.empty()) {
+ result.internalComplement();
+ }
+ }
+
+ // throw an exception on an illegal character
+ else if (c >= ' ' && c < '\u007f' && !Character.isLetter(c)
+ && !Character.isDigit(c) && c != '\\') {
+ throw new IllegalArgumentException("Parse error at position " + p + " in " + s);
+ }
+
+ // otherwise, we end up here...
+ else {
+ // on a backslash, advance to the next character
+ if (c == '\\') {
+ ++p;
+ }
+
+ // if the preceding character was a dash, this character
+ // defines the end of a range. Add or subtract that range
+ // from the running result depending on whether or not it
+ // was preceded by a ^
+ if (haveDash) {
+ if (s.charAt(p) < w) {
+ throw new IllegalArgumentException("U+" + Integer.toHexString(s.charAt(p))
+ + " is less than U+" + Integer.toHexString(w) + ". Dash expressions "
+ + "can't have their endpoints in reverse order.");
+ }
+
+ if (!haveTilde) {
+ result.internalUnion(new CharSet(w, s.charAt(p++)));
+ }
+ else {
+ result.internalDifference(new CharSet(w, s.charAt(p++)));
+ }
+ haveDash = false;
+ haveTilde = false;
+ wIsReal = false;
+ }
+
+ // if the preceding character was a caret, remove this character
+ // from the running result
+ else if (haveTilde) {
+ result.internalDifference(new CharSet(s.charAt(p++)));
+ haveTilde = false;
+ wIsReal = false;
+ }
+
+ // otherwise, flush the single-character cache and then
+ // put this character into the cache
+ else if (wIsReal) {
+ result.internalUnion(new CharSet(w));
+ w = s.charAt(p++);
+ wIsReal = true;
+ }
+ else {
+ w = s.charAt(p++);
+ wIsReal = true;
+ }
+ }
+ }
+
+ // finally, flush the single-character cache one last time
+ if (wIsReal) {
+ result.internalUnion(new CharSet(w));
+ }
+
+ return result;
+ }
+
+ /**
+ * Creates a CharSet containing all the characters in a particular
+ * Unicode category. The text is either a two-character code from
+ * the Unicode database or a single character that begins one or more
+ * two-character codes.
+ */
+ private static CharSet charSetForCategory(String category) {
+ // throw an exception if we have anything other than one or two
+ // characters inside the colons
+ if (category.length() == 0 || category.length() >= 3) {
+ throw new IllegalArgumentException("Invalid character category: " + category);
+ }
+
+ // if we have two characters, search the category map for that code
+ // and either construct and return a CharSet from the data in the
+ // category map or throw an exception
+ if (category.length() == 2) {
+ for (int i = 0; i < categoryMap.length; i++) {
+ if (categoryMap[i][0].equals(category)) {
+ return new CharSet(categoryMap[i][1]);
+ }
+ }
+ throw new IllegalArgumentException("Invalid character category: " + category);
+ }
+
+ // 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)
+ else if (category.length() == 1) {
+ CharSet result = new CharSet();
+ for (int i = 0; i < categoryMap.length; i++) {
+ if (categoryMap[i][0].startsWith(category)) {
+ result = result.union(new CharSet(categoryMap[i][1]));
+ }
+ }
+ if (result.empty()) {
+ throw new IllegalArgumentException("Invalid character category: " + category);
+ }
+ else {
+ return result;
+ }
+ }
+ return new CharSet(); // should never get here, but to make the compiler happy...
+ }
+
+ /**
+ * Returns a copy of CharSet's expression cache and sets CharSet's
+ * expression cache to empty.
+ */
+ public static Hashtable releaseExpressionCache() {
+ Hashtable result = expressionCache;
+ expressionCache = null;
+ return result;
+ }
+
+ //==========================================================================
+ // CharSet manipulation
+ //==========================================================================
+ /**
+ * Creates an empty CharSet.
+ */
+ public CharSet() {
+ chars = "";
+ }
+
+ /**
+ * Creates a CharSet containing a single character.
+ * @param c The character to put into the CharSet
+ */
+ public CharSet(char c) {
+ StringBuffer temp = new StringBuffer();
+ temp.append(c);
+ temp.append(c);
+ chars = temp.toString();
+ }
+
+ /**
+ * Creates a CharSet containing a range of characters.
+ * @param lo The lowest-numbered character to include in the range
+ * @param hi The highest-numbered character to include in the range
+ */
+ public CharSet(char lo, char hi) {
+ StringBuffer temp = new StringBuffer();
+ if (lo <= hi) {
+ temp.append(lo);
+ temp.append(hi);
+ }
+ else {
+ temp.append(hi);
+ temp.append(lo);
+ }
+ chars = temp.toString();
+ }
+
+ /**
+ * Creates a CharSet, initializing it from the internal storage
+ * of another CharSet (this function performs no error checking
+ * on "chars", so if it's malformed, undefined behavior will result)
+ */
+ private CharSet(String chars) {
+ this.chars = chars;
+ }
+
+ /**
+ * Returns a CharSet representing the union of two CharSets.
+ */
+ public CharSet union(CharSet that) {
+ return new CharSet(doUnion(that.chars).toString());
+ }
+
+ /**
+ * Adds the characters in "that" to this CharSet
+ */
+ private void internalUnion(CharSet that) {
+ chars = doUnion(that.chars).toString();
+ }
+
+ /**
+ * The actual implementation of the union functions
+ */
+ private StringBuffer doUnion(String c2) {
+ StringBuffer result = new StringBuffer();
+
+ int i = 0;
+ int j = 0;
+
+ // consider all the characters in both strings
+ while (i < chars.length() && j < c2.length()) {
+ char ub;
+
+ // the first character in the result is the lower of the
+ // starting characters of the two strings, and "ub" gets
+ // set to the upper bound of that range
+ if (chars.charAt(i) < c2.charAt(j)) {
+ result.append(chars.charAt(i));
+ ub = chars.charAt(++i);
+ }
+ else {
+ result.append(c2.charAt(j));
+ ub = c2.charAt(++j);
+ }
+
+ // for as long as one of our two pointers is pointing to a range's
+ // end point, or i is pointing to a character that is less than
+ // "ub" plus one (the "plus one" stitches touching ranges together)...
+ while (i % 2 == 1 ||
+ j % 2 == 1 ||
+ (i < chars.length() && chars.charAt(i) <= ub + 1)) {
+
+ // advance i to the first character that is greater than
+ // "ub" plus one
+ while (i < chars.length() && chars.charAt(i) <= ub + 1) {
+ ++i;
+ }
+
+ // if i points to the endpoint of a range, update "ub"
+ // to that character, or if i points to the start of
+ // a range and the endpoint of the preceding range is
+ // greater than "ub", update "up" to _that_ character
+ if (i % 2 == 1) {
+ ub = chars.charAt(i);
+ }
+ else if (i > 0 && chars.charAt(i - 1) > ub) {
+ ub = chars.charAt(i - 1);
+ }
+
+ // now advance j to the first character that is greater
+ // that "ub" plus one
+ while (j < c2.length() && c2.charAt(j) <= ub + 1) {
+ ++j;
+ }
+
+ // if j points to the endpoint of a range, update "ub"
+ // to that character, or if j points to the start of
+ // a range and the endpoint of the preceding range is
+ // greater than "ub", update "up" to _that_ character
+ if (j % 2 == 1) {
+ ub = c2.charAt(j);
+ }
+ else if (j > 0 && c2.charAt(j - 1) > ub) {
+ ub = c2.charAt(j - 1);
+ }
+ }
+ // when we finally fall out of this loop, we will have stitched
+ // together a series of ranges that overlap or touch, i and j
+ // will both point to starting points of ranges, and "ub" will
+ // be the endpoint of the range we're working on. Write "ub"
+ // to the result
+ result.append(ub);
+
+ // loop back around to create the next range in the result
+ }
+
+ // we fall out to here when we've exhausted all the characters in
+ // one of the operands. We can append all of the remaining characters
+ // in the other operand without doing any extra work.
+ if (i < chars.length()) {
+ result.append(chars.substring(i));
+ }
+ if (j < c2.length()) {
+ result.append(c2.substring(j));
+ }
+
+ return result;
+ }
+
+ /**
+ * Returns the intersection of two CharSets.
+ */
+ public CharSet intersection(CharSet that) {
+ return new CharSet(doIntersection(that.chars).toString());
+ }
+
+ /**
+ * Removes from this CharSet any characters that aren't also in "that"
+ */
+ private void internalIntersection(CharSet that) {
+ chars = doIntersection(that.chars).toString();
+ }
+
+ /**
+ * The internal implementation of the two intersection functions
+ */
+ private StringBuffer doIntersection(String c2) {
+ StringBuffer result = new StringBuffer();
+
+ int i = 0;
+ int j = 0;
+ int oldI;
+ int oldJ;
+
+ // iterate until we've exhausted one of the operands
+ while (i < chars.length() && j < c2.length()) {
+
+ // advance j until it points to a character that is larger than
+ // the one i points to. If this is the beginning of a one-
+ // character range, advance j to point to the end
+ if (i < chars.length() && i % 2 == 0) {
+ while (j < c2.length() && c2.charAt(j) < chars.charAt(i)) {
+ ++j;
+ }
+ if (j < c2.length() && j % 2 == 0 && c2.charAt(j) == chars.charAt(i)) {
+ ++j;
+ }
+ }
+
+ // if j points to the endpoint of a range, save the current
+ // value of i, then advance i until it reaches a character
+ // which is larger than the character pointed at
+ // by j. All of the characters we've advanced over (except
+ // the one currently pointed to by i) are added to the result
+ oldI = i;
+ while (j % 2 == 1 && i < chars.length() && chars.charAt(i) <= c2.charAt(j)) {
+ ++i;
+ }
+ result.append(chars.substring(oldI, i));
+
+ // if i points to the endpoint of a range, save the current
+ // value of j, then advance j until it reaches a character
+ // which is larger than the character pointed at
+ // by i. All of the characters we've advanced over (except
+ // the one currently pointed to by i) are added to the result
+ oldJ = j;
+ while (i % 2 == 1 && j < c2.length() && c2.charAt(j) <= chars.charAt(i)) {
+ ++j;
+ }
+ result.append(c2.substring(oldJ, j));
+
+ // advance i until it points to a character larger than j
+ // If it points at the beginning of a one-character range,
+ // advance it to the end of that range
+ if (j < c2.length() && j % 2 == 0) {
+ while (i < chars.length() && chars.charAt(i) < c2.charAt(j)) {
+ ++i;
+ }
+ if (i < chars.length() && i % 2 == 0 && c2.charAt(j) == chars.charAt(i)) {
+ ++i;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Returns a CharSet containing all the characters in "this" that
+ * aren't also in "that"
+ */
+ public CharSet difference(CharSet that) {
+ return new CharSet(doIntersection(that.doComplement().toString()).toString());
+ }
+
+ /**
+ * Removes from "this" all the characters that are also in "that"
+ */
+ private void internalDifference(CharSet that) {
+ chars = doIntersection(that.doComplement().toString()).toString();
+ }
+
+ /**
+ * Returns a CharSet containing all the characters which are not
+ * in "this"
+ */
+ public CharSet complement() {
+ return new CharSet(doComplement().toString());
+ }
+
+ /**
+ * Complements "this". All the characters it contains are removed,
+ * and all the characters it doesn't contain are added.
+ */
+ private void internalComplement() {
+ chars = doComplement().toString();
+ }
+
+ /**
+ * The internal implementation function for the complement routines
+ */
+ private StringBuffer doComplement() {
+ // the complement of an empty CharSet is one containing everything
+ if (empty()) {
+ return new StringBuffer("\u0000\uffff");
+ }
+
+ StringBuffer result = new StringBuffer();
+
+ int i = 0;
+
+ // the result begins with \u0000 unless the original CharSet does
+ if (chars.charAt(0) != '\u0000') {
+ result.append('\u0000');
+ }
+
+ // walk through the characters in this CharSet. Append a pair of
+ // characters the first of which is one less than the first
+ // character we see and the second of which is one plus the second
+ // character we see (don't write the first character if it's \u0000,
+ // and don't write the second character if it's \uffff.
+ while (i < chars.length()) {
+ if (chars.charAt(i) != '\u0000') {
+ result.append((char)(chars.charAt(i) - 1));
+ }
+ if (chars.charAt(i + 1) != '\uffff') {
+ result.append((char)(chars.charAt(i + 1) + 1));
+ }
+ i += 2;
+ }
+
+ // add \uffff to the end of the result, unless it was in
+ // the original set
+ if (chars.charAt(chars.length() - 1) != '\uffff') {
+ result.append('\uffff');
+ }
+
+ return result;
+ }
+
+ /**
+ * Returns true if this CharSet contains the specified character
+ * @param c The character we're testing for set membership
+ */
+ public boolean contains(char c) {
+ // search for the first range endpoint that is greater than or
+ // equal to c
+ int i = 1;
+ while (i < chars.length() && chars.charAt(i) < c) {
+ i += 2;
+ }
+
+ // if we've walked off the end, we don't contain c
+ if (i == chars.length()) {
+ return false;
+ }
+
+ // otherwise, we contain c if the beginning of the range is less
+ // than or equal to c
+ return chars.charAt(i - 1) <= c;
+ }
+
+ /**
+ * Returns true if "that" is another instance of CharSet containing
+ * the exact same characters as this one
+ */
+ public boolean equals(Object that) {
+ return (that instanceof CharSet) && chars.equals(((CharSet)that).chars);
+ }
+
+ /**
+ * Creates a new CharSet that is equal to this one
+ */
+ public Object clone() {
+ return new CharSet(chars);
+ }
+
+ /**
+ * Returns true if this CharSet contains no characters
+ */
+ public boolean empty() {
+ return chars.length() == 0;
+ }
+
+ /**
+ * Returns a textual representation of this CharSet. If the result
+ * of calling this function is passed to CharSet.parseString(), it
+ * will produce another CharSet that is equal to this one.
+ */
+ public String toString() {
+ StringBuffer result = new StringBuffer();
+
+ // the result begins with an opening bracket
+ result.append('[');
+
+ // iterate through the ranges in the CharSet
+ for (int i = 0; i < chars.length(); i += 2) {
+ // for a range with the same beginning and ending point,
+ // output that character
+ if (chars.charAt(i) == chars.charAt(i + 1)) {
+ result.append(chars.charAt(i));
+ }
+
+ // otherwise, output the start and end points of the range
+ // separated by a dash
+ else {
+ result.append(chars.charAt(i) + "-" + chars.charAt(i + 1));
+ }
+ }
+
+ // the result ends with a closing bracket
+ result.append(']');
+ return result.toString();
+ }
+
+ /**
+ * Returns a String representing the contents of this CharSet
+ * in the same form in which they're stored internally: as pairs
+ * of characters representing the start and end points of ranges
+ */
+ public String getRanges() {
+ return chars;
+ }
+
+ /**
+ * Returns an Enumeration that will return the ranges of characters
+ * contained in this CharSet one at a time
+ */
+ public Enumeration getChars() {
+ return new Enumeration(this);
+ }
+
+ //==========================================================================
+ // CharSet.Enumeration
+ //==========================================================================
+
+ /**
+ * An Enumeration that can be used to extract the character ranges
+ * from a CharSet one at a time
+ */
+ public class Enumeration implements java.util.Enumeration {
+ /**
+ * Initializes a CharSet.Enumeration
+ */
+ Enumeration(CharSet cs) {
+ this.chars = cs.chars;
+ p = 0;
+ }
+
+ /**
+ * Returns true if the enumeration hasn't yet returned
+ * all the ranges in the CharSet
+ */
+ public boolean hasMoreElements() {
+ return p < chars.length();
+ }
+
+ /**
+ * Returns the next range in the CarSet
+ */
+ public Object nextElement() {
+ char[] result = new char[2];
+ result[0] = chars.charAt(p);
+ result[1] = chars.charAt(p + 1);
+ p += 2;
+
+ return result;
+ }
+
+ int p;
+ String chars;
+ }
+
+ //==========================================================================
+ // tables for charSetForCategory()
+ //==========================================================================
+
+ /**
+ * Table used with charSetFromCategory. This is an array of pairs
+ * of Strings. The first column of Strings is Unicode character category
+ * codes as defined in the Unicode database. The second column is the
+ * internal storage for a CharSet containing the characters in that
+ * category.
+ */
+ private static final String[][] categoryMap = {
+ { "Ll", "az\u00AA\u00AA\u00B5\u00B5\u00BA\u00BA\u00DF\u00F6\u00F8\u00FF\u0101\u0101"
+ + "\u0103\u0103\u0105\u0105\u0107\u0107\u0109\u0109\u010B\u010B\u010D\u010D"
+ + "\u010F\u010F\u0111\u0111\u0113\u0113\u0115\u0115\u0117\u0117\u0119\u0119"
+ + "\u011B\u011B\u011D\u011D\u011F\u011F\u0121\u0121\u0123\u0123\u0125\u0125"
+ + "\u0127\u0127\u0129\u0129\u012B\u012B\u012D\u012D\u012F\u012F\u0131\u0131"
+ + "\u0133\u0133\u0135\u0135\u0137\u0138\u013A\u013A\u013C\u013C\u013E\u013E"
+ + "\u0140\u0140\u0142\u0142\u0144\u0144\u0146\u0146\u0148\u0149\u014B\u014B"
+ + "\u014D\u014D\u014F\u014F\u0151\u0151\u0153\u0153\u0155\u0155\u0157\u0157"
+ + "\u0159\u0159\u015B\u015B\u015D\u015D\u015F\u015F\u0161\u0161\u0163\u0163"
+ + "\u0165\u0165\u0167\u0167\u0169\u0169\u016B\u016B\u016D\u016D\u016F\u016F"
+ + "\u0171\u0171\u0173\u0173\u0175\u0175\u0177\u0177\u017A\u017A\u017C\u017C"
+ + "\u017E\u0180\u0183\u0183\u0185\u0185\u0188\u0188\u018C\u018D\u0192\u0192"
+ + "\u0195\u0195\u0199\u019B\u019E\u019E\u01A1\u01A1\u01A3\u01A3\u01A5\u01A5"
+ + "\u01A8\u01A8\u01AB\u01AB\u01AD\u01AD\u01B0\u01B0\u01B4\u01B4\u01B6\u01B6"
+ + "\u01B9\u01BA\u01BD\u01BD\u01C6\u01C6\u01C9\u01C9\u01CC\u01CC\u01CE\u01CE"
+ + "\u01D0\u01D0\u01D2\u01D2\u01D4\u01D4\u01D6\u01D6\u01D8\u01D8\u01DA\u01DA"
+ + "\u01DC\u01DD\u01DF\u01DF\u01E1\u01E1\u01E3\u01E3\u01E5\u01E5\u01E7\u01E7"
+ + "\u01E9\u01E9\u01EB\u01EB\u01ED\u01ED\u01EF\u01F0\u01F3\u01F3\u01F5\u01F5"
+ + "\u01FB\u01FB\u01FD\u01FD\u01FF\u01FF\u0201\u0201\u0203\u0203\u0205\u0205"
+ + "\u0207\u0207\u0209\u0209\u020B\u020B\u020D\u020D\u020F\u020F\u0211\u0211"
+ + "\u0213\u0213\u0215\u0215\u0217\u0217\u0250\u02A8\u0390\u0390\u03AC\u03CE"
+ + "\u03D0\u03D1\u03D5\u03D6\u03E3\u03E3\u03E5\u03E5\u03E7\u03E7\u03E9\u03E9"
+ + "\u03EB\u03EB\u03ED\u03ED\u03EF\u03F2\u0430\u044F\u0451\u045C\u045E\u045F"
+ + "\u0461\u0461\u0463\u0463\u0465\u0465\u0467\u0467\u0469\u0469\u046B\u046B"
+ + "\u046D\u046D\u046F\u046F\u0471\u0471\u0473\u0473\u0475\u0475\u0477\u0477"
+ + "\u0479\u0479\u047B\u047B\u047D\u047D\u047F\u047F\u0481\u0481\u0491\u0491"
+ + "\u0493\u0493\u0495\u0495\u0497\u0497\u0499\u0499\u049B\u049B\u049D\u049D"
+ + "\u049F\u049F\u04A1\u04A1\u04A3\u04A3\u04A5\u04A5\u04A7\u04A7\u04A9\u04A9"
+ + "\u04AB\u04AB\u04AD\u04AD\u04AF\u04AF\u04B1\u04B1\u04B3\u04B3\u04B5\u04B5"
+ + "\u04B7\u04B7\u04B9\u04B9\u04BB\u04BB\u04BD\u04BD\u04BF\u04BF\u04C2\u04C2"
+ + "\u04C4\u04C4\u04C8\u04C8\u04CC\u04CC\u04D1\u04D1\u04D3\u04D3\u04D5\u04D5"
+ + "\u04D7\u04D7\u04D9\u04D9\u04DB\u04DB\u04DD\u04DD\u04DF\u04DF\u04E1\u04E1"
+ + "\u04E3\u04E3\u04E5\u04E5\u04E7\u04E7\u04E9\u04E9\u04EB\u04EB\u04EF\u04EF"
+ + "\u04F1\u04F1\u04F3\u04F3\u04F5\u04F5\u04F9\u04F9\u0561\u0587\u10D0\u10F6"
+ + "\u1E01\u1E01\u1E03\u1E03\u1E05\u1E05\u1E07\u1E07\u1E09\u1E09\u1E0B\u1E0B"
+ + "\u1E0D\u1E0D\u1E0F\u1E0F\u1E11\u1E11\u1E13\u1E13\u1E15\u1E15\u1E17\u1E17"
+ + "\u1E19\u1E19\u1E1B\u1E1B\u1E1D\u1E1D\u1E1F\u1E1F\u1E21\u1E21\u1E23\u1E23"
+ + "\u1E25\u1E25\u1E27\u1E27\u1E29\u1E29\u1E2B\u1E2B\u1E2D\u1E2D\u1E2F\u1E2F"
+ + "\u1E31\u1E31\u1E33\u1E33\u1E35\u1E35\u1E37\u1E37\u1E39\u1E39\u1E3B\u1E3B"
+ + "\u1E3D\u1E3D\u1E3F\u1E3F\u1E41\u1E41\u1E43\u1E43\u1E45\u1E45\u1E47\u1E47"
+ + "\u1E49\u1E49\u1E4B\u1E4B\u1E4D\u1E4D\u1E4F\u1E4F\u1E51\u1E51\u1E53\u1E53"
+ + "\u1E55\u1E55\u1E57\u1E57\u1E59\u1E59\u1E5B\u1E5B\u1E5D\u1E5D\u1E5F\u1E5F"
+ + "\u1E61\u1E61\u1E63\u1E63\u1E65\u1E65\u1E67\u1E67\u1E69\u1E69\u1E6B\u1E6B"
+ + "\u1E6D\u1E6D\u1E6F\u1E6F\u1E71\u1E71\u1E73\u1E73\u1E75\u1E75\u1E77\u1E77"
+ + "\u1E79\u1E79\u1E7B\u1E7B\u1E7D\u1E7D\u1E7F\u1E7F\u1E81\u1E81\u1E83\u1E83"
+ + "\u1E85\u1E85\u1E87\u1E87\u1E89\u1E89\u1E8B\u1E8B\u1E8D\u1E8D\u1E8F\u1E8F"
+ + "\u1E91\u1E91\u1E93\u1E93\u1E95\u1E9B\u1EA1\u1EA1\u1EA3\u1EA3\u1EA5\u1EA5"
+ + "\u1EA7\u1EA7\u1EA9\u1EA9\u1EAB\u1EAB\u1EAD\u1EAD\u1EAF\u1EAF\u1EB1\u1EB1"
+ + "\u1EB3\u1EB3\u1EB5\u1EB5\u1EB7\u1EB7\u1EB9\u1EB9\u1EBB\u1EBB\u1EBD\u1EBD"
+ + "\u1EBF\u1EBF\u1EC1\u1EC1\u1EC3\u1EC3\u1EC5\u1EC5\u1EC7\u1EC7\u1EC9\u1EC9"
+ + "\u1ECB\u1ECB\u1ECD\u1ECD\u1ECF\u1ECF\u1ED1\u1ED1\u1ED3\u1ED3\u1ED5\u1ED5"
+ + "\u1ED7\u1ED7\u1ED9\u1ED9\u1EDB\u1EDB\u1EDD\u1EDD\u1EDF\u1EDF\u1EE1\u1EE1"
+ + "\u1EE3\u1EE3\u1EE5\u1EE5\u1EE7\u1EE7\u1EE9\u1EE9\u1EEB\u1EEB\u1EED\u1EED"
+ + "\u1EEF\u1EEF\u1EF1\u1EF1\u1EF3\u1EF3\u1EF5\u1EF5\u1EF7\u1EF7\u1EF9\u1EF9"
+ + "\u1F00\u1F07\u1F10\u1F15\u1F20\u1F27\u1F30\u1F37\u1F40\u1F45\u1F50\u1F57"
+ + "\u1F60\u1F67\u1F70\u1F7D\u1F80\u1F87\u1F90\u1F97\u1FA0\u1FA7\u1FB0\u1FB4"
+ + "\u1FB6\u1FB7\u1FC2\u1FC4\u1FC6\u1FC7\u1FD0\u1FD3\u1FD6\u1FD7\u1FE0\u1FE7"
+ + "\u1FF2\u1FF4\u1FF6\u1FF7\u207F\u207F\u210A\u210A\u210E\u210F\u2113\u2113"
+ + "\u212E\u212F\u2134\u2134\uFB00\uFB06\uFB13\uFB17\uFF41\uFF5A" },
+ { "Lu", "AZ\u00C0\u00D6\u00D8\u00DE\u0100\u0100\u0102\u0102\u0104\u0104\u0106\u0106"
+ + "\u0108\u0108\u010A\u010A\u010C\u010C\u010E\u010E\u0110\u0110\u0112\u0112"
+ + "\u0114\u0114\u0116\u0116\u0118\u0118\u011A\u011A\u011C\u011C\u011E\u011E"
+ + "\u0120\u0120\u0122\u0122\u0124\u0124\u0126\u0126\u0128\u0128\u012A\u012A"
+ + "\u012C\u012C\u012E\u012E\u0130\u0130\u0132\u0132\u0134\u0134\u0136\u0136"
+ + "\u0139\u0139\u013B\u013B\u013D\u013D\u013F\u013F\u0141\u0141\u0143\u0143"
+ + "\u0145\u0145\u0147\u0147\u014A\u014A\u014C\u014C\u014E\u014E\u0150\u0150"
+ + "\u0152\u0152\u0154\u0154\u0156\u0156\u0158\u0158\u015A\u015A\u015C\u015C"
+ + "\u015E\u015E\u0160\u0160\u0162\u0162\u0164\u0164\u0166\u0166\u0168\u0168"
+ + "\u016A\u016A\u016C\u016C\u016E\u016E\u0170\u0170\u0172\u0172\u0174\u0174"
+ + "\u0176\u0176\u0178\u0179\u017B\u017B\u017D\u017D\u0181\u0182\u0184\u0184"
+ + "\u0186\u0187\u0189\u018B\u018E\u0191\u0193\u0194\u0196\u0198\u019C\u019D"
+ + "\u019F\u01A0\u01A2\u01A2\u01A4\u01A4\u01A6\u01A7\u01A9\u01A9\u01AC\u01AC"
+ + "\u01AE\u01AF\u01B1\u01B3\u01B5\u01B5\u01B7\u01B8\u01BC\u01BC\u01C4\u01C4"
+ + "\u01C7\u01C7\u01CA\u01CA\u01CD\u01CD\u01CF\u01CF\u01D1\u01D1\u01D3\u01D3"
+ + "\u01D5\u01D5\u01D7\u01D7\u01D9\u01D9\u01DB\u01DB\u01DE\u01DE\u01E0\u01E0"
+ + "\u01E2\u01E2\u01E4\u01E4\u01E6\u01E6\u01E8\u01E8\u01EA\u01EA\u01EC\u01EC"
+ + "\u01EE\u01EE\u01F1\u01F1\u01F4\u01F4\u01FA\u01FA\u01FC\u01FC\u01FE\u01FE"
+ + "\u0200\u0200\u0202\u0202\u0204\u0204\u0206\u0206\u0208\u0208\u020A\u020A"
+ + "\u020C\u020C\u020E\u020E\u0210\u0210\u0212\u0212\u0214\u0214\u0216\u0216"
+ + "\u0386\u0386\u0388\u038A\u038C\u038C\u038E\u038F\u0391\u03A1\u03A3\u03AB"
+ + "\u03D2\u03D4\u03DA\u03DA\u03DC\u03DC\u03DE\u03DE\u03E0\u03E0\u03E2\u03E2"
+ + "\u03E4\u03E4\u03E6\u03E6\u03E8\u03E8\u03EA\u03EA\u03EC\u03EC\u03EE\u03EE"
+ + "\u0401\u040C\u040E\u042F\u0460\u0460\u0462\u0462\u0464\u0464\u0466\u0466"
+ + "\u0468\u0468\u046A\u046A\u046C\u046C\u046E\u046E\u0470\u0470\u0472\u0472"
+ + "\u0474\u0474\u0476\u0476\u0478\u0478\u047A\u047A\u047C\u047C\u047E\u047E"
+ + "\u0480\u0480\u0490\u0490\u0492\u0492\u0494\u0494\u0496\u0496\u0498\u0498"
+ + "\u049A\u049A\u049C\u049C\u049E\u049E\u04A0\u04A0\u04A2\u04A2\u04A4\u04A4"
+ + "\u04A6\u04A6\u04A8\u04A8\u04AA\u04AA\u04AC\u04AC\u04AE\u04AE\u04B0\u04B0"
+ + "\u04B2\u04B2\u04B4\u04B4\u04B6\u04B6\u04B8\u04B8\u04BA\u04BA\u04BC\u04BC"
+ + "\u04BE\u04BE\u04C1\u04C1\u04C3\u04C3\u04C7\u04C7\u04CB\u04CB\u04D0\u04D0"
+ + "\u04D2\u04D2\u04D4\u04D4\u04D6\u04D6\u04D8\u04D8\u04DA\u04DA\u04DC\u04DC"
+ + "\u04DE\u04DE\u04E0\u04E0\u04E2\u04E2\u04E4\u04E4\u04E6\u04E6\u04E8\u04E8"
+ + "\u04EA\u04EA\u04EE\u04EE\u04F0\u04F0\u04F2\u04F2\u04F4\u04F4\u04F8\u04F8"
+ + "\u0531\u0556\u10A0\u10C5\u1E00\u1E00\u1E02\u1E02\u1E04\u1E04\u1E06\u1E06"
+ + "\u1E08\u1E08\u1E0A\u1E0A\u1E0C\u1E0C\u1E0E\u1E0E\u1E10\u1E10\u1E12\u1E12"
+ + "\u1E14\u1E14\u1E16\u1E16\u1E18\u1E18\u1E1A\u1E1A\u1E1C\u1E1C\u1E1E\u1E1E"
+ + "\u1E20\u1E20\u1E22\u1E22\u1E24\u1E24\u1E26\u1E26\u1E28\u1E28\u1E2A\u1E2A"
+ + "\u1E2C\u1E2C\u1E2E\u1E2E\u1E30\u1E30\u1E32\u1E32\u1E34\u1E34\u1E36\u1E36"
+ + "\u1E38\u1E38\u1E3A\u1E3A\u1E3C\u1E3C\u1E3E\u1E3E\u1E40\u1E40\u1E42\u1E42"
+ + "\u1E44\u1E44\u1E46\u1E46\u1E48\u1E48\u1E4A\u1E4A\u1E4C\u1E4C\u1E4E\u1E4E"
+ + "\u1E50\u1E50\u1E52\u1E52\u1E54\u1E54\u1E56\u1E56\u1E58\u1E58\u1E5A\u1E5A"
+ + "\u1E5C\u1E5C\u1E5E\u1E5E\u1E60\u1E60\u1E62\u1E62\u1E64\u1E64\u1E66\u1E66"
+ + "\u1E68\u1E68\u1E6A\u1E6A\u1E6C\u1E6C\u1E6E\u1E6E\u1E70\u1E70\u1E72\u1E72"
+ + "\u1E74\u1E74\u1E76\u1E76\u1E78\u1E78\u1E7A\u1E7A\u1E7C\u1E7C\u1E7E\u1E7E"
+ + "\u1E80\u1E80\u1E82\u1E82\u1E84\u1E84\u1E86\u1E86\u1E88\u1E88\u1E8A\u1E8A"
+ + "\u1E8C\u1E8C\u1E8E\u1E8E\u1E90\u1E90\u1E92\u1E92\u1E94\u1E94\u1EA0\u1EA0"
+ + "\u1EA2\u1EA2\u1EA4\u1EA4\u1EA6\u1EA6\u1EA8\u1EA8\u1EAA\u1EAA\u1EAC\u1EAC"
+ + "\u1EAE\u1EAE\u1EB0\u1EB0\u1EB2\u1EB2\u1EB4\u1EB4\u1EB6\u1EB6\u1EB8\u1EB8"
+ + "\u1EBA\u1EBA\u1EBC\u1EBC\u1EBE\u1EBE\u1EC0\u1EC0\u1EC2\u1EC2\u1EC4\u1EC4"
+ + "\u1EC6\u1EC6\u1EC8\u1EC8\u1ECA\u1ECA\u1ECC\u1ECC\u1ECE\u1ECE\u1ED0\u1ED0"
+ + "\u1ED2\u1ED2\u1ED4\u1ED4\u1ED6\u1ED6\u1ED8\u1ED8\u1EDA\u1EDA\u1EDC\u1EDC"
+ + "\u1EDE\u1EDE\u1EE0\u1EE0\u1EE2\u1EE2\u1EE4\u1EE4\u1EE6\u1EE6\u1EE8\u1EE8"
+ + "\u1EEA\u1EEA\u1EEC\u1EEC\u1EEE\u1EEE\u1EF0\u1EF0\u1EF2\u1EF2\u1EF4\u1EF4"
+ + "\u1EF6\u1EF6\u1EF8\u1EF8\u1F08\u1F0F\u1F18\u1F1D\u1F28\u1F2F\u1F38\u1F3F"
+ + "\u1F48\u1F4D\u1F59\u1F59\u1F5B\u1F5B\u1F5D\u1F5D\u1F5F\u1F5F\u1F68\u1F6F"
+ + "\u1F88\u1F8F\u1F98\u1F9F\u1FA8\u1FAF\u1FB8\u1FBC\u1FBE\u1FBE\u1FC8\u1FCC"
+ + "\u1FD8\u1FDB\u1FE8\u1FEC\u1FF8\u1FFC\u2102\u2102\u2107\u2107\u210B\u210D"
+ + "\u2110\u2112\u2115\u2115\u2118\u211D\u2124\u2124\u2126\u2126\u2128\u2128"
+ + "\u212A\u212D\u2130\u2131\u2133\u2133\uFF21\uFF3A" },
+ { "Lt", "\u01C5\u01C5\u01C8\u01C8\u01CB\u01CB\u01F2\u01F2" },
+ { "Lo", "\u01AA\u01AA\u01BB\u01BB\u01BE\u01C3\u03F3\u03F3\u04C0\u04C0\u05D0\u05EA"
+ + "\u05F0\u05F2\u0621\u063A\u0641\u064A\u0671\u06B7\u06BA\u06BE\u06C0\u06CE"
+ + "\u06D0\u06D3\u06D5\u06D5\u0905\u0939\u093D\u093D\u0958\u0961\u0985\u098C"
+ + "\u098F\u0990\u0993\u09A8\u09AA\u09B0\u09B2\u09B2\u09B6\u09B9\u09DC\u09DD"
+ + "\u09DF\u09E1\u09F0\u09F1\u0A05\u0A0A\u0A0F\u0A10\u0A13\u0A28\u0A2A\u0A30"
+ + "\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59\u0A5C\u0A5E\u0A5E\u0A72\u0A74"
+ + "\u0A85\u0A8B\u0A8D\u0A8D\u0A8F\u0A91\u0A93\u0AA8\u0AAA\u0AB0\u0AB2\u0AB3"
+ + "\u0AB5\u0AB9\u0ABD\u0ABD\u0AE0\u0AE0\u0B05\u0B0C\u0B0F\u0B10\u0B13\u0B28"
+ + "\u0B2A\u0B30\u0B32\u0B33\u0B36\u0B39\u0B3D\u0B3D\u0B5C\u0B5D\u0B5F\u0B61"
+ + "\u0B85\u0B8A\u0B8E\u0B90\u0B92\u0B95\u0B99\u0B9A\u0B9C\u0B9C\u0B9E\u0B9F"
+ + "\u0BA3\u0BA4\u0BA8\u0BAA\u0BAE\u0BB5\u0BB7\u0BB9\u0C05\u0C0C\u0C0E\u0C10"
+ + "\u0C12\u0C28\u0C2A\u0C33\u0C35\u0C39\u0C60\u0C61\u0C85\u0C8C\u0C8E\u0C90"
+ + "\u0C92\u0CA8\u0CAA\u0CB3\u0CB5\u0CB9\u0CDE\u0CDE\u0CE0\u0CE1\u0D05\u0D0C"
+ + "\u0D0E\u0D10\u0D12\u0D28\u0D2A\u0D39\u0D60\u0D61\u0E01\u0E2E\u0E30\u0E30"
+ + "\u0E32\u0E33\u0E40\u0E45\u0E81\u0E82\u0E84\u0E84\u0E87\u0E88\u0E8A\u0E8A"
+ + "\u0E8D\u0E8D\u0E94\u0E97\u0E99\u0E9F\u0EA1\u0EA3\u0EA5\u0EA5\u0EA7\u0EA7"
+ + "\u0EAA\u0EAB\u0EAD\u0EAE\u0EB0\u0EB0\u0EB2\u0EB3\u0EBD\u0EBD\u0EC0\u0EC4"
+ + "\u0EDC\u0EDD\u0F40\u0F47\u0F49\u0F69\u1100\u1159\u115F\u11A2\u11A8\u11F9"
+ + "\u2135\u2138\u3041\u3094\u30A1\u30FA\u3105\u312C\u3131\u318E\u4E00\u9FA5"
+ + "\uAC00\uD7A3\uF900\uFA2D\uFB1F\uFB28\uFB2A\uFB36\uFB38\uFB3C\uFB3E\uFB3E"
+ + "\uFB40\uFB41\uFB43\uFB44\uFB46\uFBB1\uFBD3\uFD3D\uFD50\uFD8F\uFD92\uFDC7"
+ + "\uFDF0\uFDFB\uFE70\uFE72\uFE74\uFE74\uFE76\uFEFC\uFF66\uFF6F\uFF71\uFF9D"
+ + "\uFFA0\uFFBE\uFFC2\uFFC7\uFFCA\uFFCF\uFFD2\uFFD7\uFFDA\uFFDC" },
+ { "Lm", "\u02B0\u02B8\u02BB\u02C1\u02D0\u02D1\u02E0\u02E4\u037A\u037A\u0559\u0559"
+ + "\u0640\u0640\u06E5\u06E6\u0E46\u0E46\u0EC6\u0EC6\u3005\u3005\u3031\u3035"
+ + "\u309B\u309E\u30FC\u30FE\uFF70\uFF70\uFF9E\uFF9F" },
+ { "Nd", "09\u0660\u0669\u06F0\u06F9\u0966\u096F\u09E6\u09EF\u0A66\u0A6F\u0AE6\u0AEF"
+ + "\u0B66\u0B6F\u0BE7\u0BEF\u0C66\u0C6F\u0CE6\u0CEF\u0D66\u0D6F\u0E50\u0E59"
+ + "\u0ED0\u0ED9\u0F20\u0F29\uFF10\uFF19" },
+ { "Nl", "\u2160\u2182\u3007\u3007\u3021\u3029" },
+ { "No", "\u00B2\u00B3\u00B9\u00B9\u00BC\u00BE\u09F4\u09F9\u0BF0\u0BF2\u0F2A\u0F33"
+ + "\u2070\u2070\u2074\u2079\u2080\u2089\u2153\u215F\u2460\u249B\u24EA\u24EA"
+ + "\u2776\u2793\u3192\u3195\u3220\u3229\u3280\u3289" },
+ { "Ps", "(([[{{\u00AB\u00AB\u0F3A\u0F3A\u0F3C\u0F3C\u2018\u2018\u201A"
+ + "\u201C\u201E\u201F\u2039\u2039\u2045\u2045\u207D\u207D\u208D\u208D\u2329"
+ + "\u2329\u3008\u3008\u300A\u300A\u300C\u300C\u300E\u300E\u3010\u3010\u3014"
+ + "\u3014\u3016\u3016\u3018\u3018\u301A\u301A\u301D\u301D\u301F\u301F\uFD3E"
+ + "\uFD3E\uFE35\uFE35\uFE37\uFE37\uFE39\uFE39\uFE3B\uFE3B\uFE3D\uFE3D\uFE3F"
+ + "\uFE3F\uFE41\uFE41\uFE43\uFE43\uFE59\uFE59\uFE5B\uFE5B\uFE5D\uFE5D\uFF08"
+ + "\uFF08\uFF3B\uFF3B\uFF5B\uFF5B\uFF62\uFF62" },
+ { "Pe", "))]]}}\u00BB\u00BB\u0F3B\u0F3B\u0F3D\u0F3D\u2019\u2019\u201D\u201D\u203A"
+ + "\u203A\u2046\u2046\u207E\u207E\u208E\u208E\u232A\u232A\u3009\u3009\u300B"
+ + "\u300B\u300D\u300D\u300F\u300F\u3011\u3011\u3015\u3015\u3017\u3017\u3019"
+ + "\u3019\u301B\u301B\u301E\u301E\uFD3F\uFD3F\uFE36\uFE36\uFE38\uFE38\uFE3A"
+ + "\uFE3A\uFE3C\uFE3C\uFE3E\uFE3E\uFE40\uFE40\uFE42\uFE42\uFE44\uFE44\uFE5A"
+ + "\uFE5A\uFE5C\uFE5C\uFE5E\uFE5E\uFF09\uFF09\uFF3D\uFF3D\uFF5D\uFF5D\uFF63"
+ + "\uFF63" },
+ { "Pd", "--\u00AD\u00AD\u2010\u2015\u301C\u301C\u3030\u3030\uFE31\uFE32\uFE58\uFE58"
+ + "\uFE63\uFE63\uFF0D\uFF0D" },
+ { "Pc", "__\u203F\u2040\uFE33\uFE34\uFE4D\uFE4F\uFF3F\uFF3F" },
+ { "Po", "!#%'**,,./:;?@\\\\\u00A1\u00A1\u00B7\u00B7\u00BF\u00BF\u0374\u0375\u037E"
+ + "\u037E\u0387\u0387\u055A\u055F\u0589\u0589\u05BE\u05BE\u05C0\u05C0\u05C3"
+ + "\u05C3\u05F3\u05F4\u060C\u060C\u061B\u061B\u061F\u061F\u066A\u066D\u06D4"
+ + "\u06D4\u0964\u0965\u0970\u0970\u0E2F\u0E2F\u0E5A\u0E5B\u0EAF\u0EAF\u0F04"
+ + "\u0F12\u0F85\u0F85\u10FB\u10FB\u2016\u2017\u2020\u2027\u2030\u2038\u203B"
+ + "\u203E\u2041\u2043\u3001\u3003\u3006\u3006\u30FB\u30FB\uFE30\uFE30\uFE49"
+ + "\uFE4C\uFE50\uFE52\uFE54\uFE57\uFE5F\uFE61\uFE68\uFE68\uFE6A\uFE6B\uFF01"
+ + "\uFF03\uFF05\uFF07\uFF0A\uFF0A\uFF0C\uFF0C\uFF0E\uFF0F\uFF1A\uFF1B\uFF1F"
+ + "\uFF20\uFF3C\uFF3C\uFF61\uFF61\uFF64\uFF65" },
+ { "Sc", "$$\u00A2\u00A5\u09F2\u09F3\u0E3F\u0E3F\u20A0\u20AB\uFE69\uFE69\uFF04\uFF04"
+ + "\uFFE0\uFFE1\uFFE5\uFFE6" },
+ { "Sm", "++<>||~~\u00AC\u00AC\u00B1\u00B1\u00D7\u00D7\u00F7\u00F7\u2044\u2044\u207A"
+ + "\u207C\u208A\u208C\u2190\u2194\u21D2\u21D2\u21D4\u21D4\u2200\u22F1\u2308"
+ + "\u230B\u2320\u2321\uFB29\uFB29\uFE62\uFE62\uFE64\uFE66\uFF0B\uFF0B\uFF1C"
+ + "\uFF1E\uFF5C\uFF5C\uFF5E\uFF5E\uFFE2\uFFE2\uFFE8\uFFEC" },
+ { "So", "\u00A6\u00A7\u00A9\u00A9\u00AE\u00AE\u00B0\u00B0\u00B6\u00B6\u0482\u0482"
+ + "\u06E9\u06E9\u0950\u0950\u09FA\u09FA\u0AD0\u0AD0\u0B70\u0B70\u0E4F\u0E4F"
+ + "\u0F00\u0F03\u0F13\u0F17\u0F1A\u0F1F\u0F34\u0F34\u0F36\u0F36\u0F38\u0F38"
+ + "\u2100\u2101\u2103\u2106\u2108\u2109\u2114\u2114\u2116\u2117\u211E\u2123"
+ + "\u2125\u2125\u2127\u2127\u2129\u2129\u2132\u2132\u2195\u21D1\u21D3\u21D3"
+ + "\u21D5\u21EA\u2300\u2300\u2302\u2307\u230C\u231F\u2322\u2328\u232B\u237A"
+ + "\u2400\u2424\u2440\u244A\u249C\u24E9\u2500\u2595\u25A0\u25EF\u2600\u2613"
+ + "\u261A\u266F\u2701\u2704\u2706\u2709\u270C\u2727\u2729\u274B\u274D\u274D"
+ + "\u274F\u2752\u2756\u2756\u2758\u275E\u2761\u2767\u2794\u2794\u2798\u27AF"
+ + "\u27B1\u27BE\u3004\u3004\u3012\u3013\u3020\u3020\u3036\u3037\u303F\u303F"
+ + "\u3190\u3191\u3196\u319F\u3200\u321C\u322A\u3243\u3260\u327B\u327F\u327F"
+ + "\u328A\u32B0\u32C0\u32CB\u32D0\u32FE\u3300\u3376\u337B\u33DD\u33E0\u33FE"
+ + "\uFFE4\uFFE4\uFFED\uFFEE\uFFFD\uFFFD" },
+ { "Mn", "\u0300\u0345\u0360\u0361\u0483\u0486\u0591\u05A1\u05A3\u05B9\u05BB\u05BD"
+ + "\u05BF\u05BF\u05C1\u05C2\u05C4\u05C4\u064B\u0652\u0670\u0670\u06D6\u06DC"
+ + "\u06DF\u06E4\u06E7\u06E8\u06EA\u06ED\u0901\u0902\u093C\u093C\u0941\u0948"
+ + "\u094D\u094D\u0951\u0954\u0962\u0963\u0981\u0981\u09BC\u09BC\u09C1\u09C4"
+ + "\u09CD\u09CD\u09E2\u09E3\u0A02\u0A02\u0A3C\u0A3C\u0A41\u0A42\u0A47\u0A48"
+ + "\u0A4B\u0A4D\u0A70\u0A71\u0A81\u0A82\u0ABC\u0ABC\u0AC1\u0AC5\u0AC7\u0AC8"
+ + "\u0ACD\u0ACD\u0B01\u0B01\u0B3C\u0B3C\u0B3F\u0B3F\u0B41\u0B43\u0B4D\u0B4D"
+ + "\u0B56\u0B56\u0B82\u0B82\u0BC0\u0BC0\u0BCD\u0BCD\u0C3E\u0C40\u0C46\u0C48"
+ + "\u0C4A\u0C4D\u0C55\u0C56\u0CBF\u0CBF\u0CC6\u0CC6\u0CCC\u0CCD\u0D41\u0D43"
+ + "\u0D4D\u0D4D\u0E31\u0E31\u0E34\u0E3A\u0E47\u0E4E\u0EB1\u0EB1\u0EB4\u0EB9"
+ + "\u0EBB\u0EBC\u0EC8\u0ECD\u0F18\u0F19\u0F35\u0F35\u0F37\u0F37\u0F39\u0F39"
+ + "\u0F71\u0F7E\u0F80\u0F84\u0F86\u0F8B\u0F90\u0F95\u0F97\u0F97\u0F99\u0FAD"
+ + "\u0FB1\u0FB7\u0FB9\u0FB9\u20D0\u20DC\u20E1\u20E1\u302A\u302F\u3099\u309A"
+ + "\uFB1E\uFB1E\uFE20\uFE23" },
+ { "Mc", "\u0903\u0903\u093E\u0940\u0949\u094C\u0982\u0983\u09BE\u09C0\u09C7\u09C8"
+ + "\u09CB\u09CC\u09D7\u09D7\u0A3E\u0A40\u0A83\u0A83\u0ABE\u0AC0\u0AC9\u0AC9"
+ + "\u0ACB\u0ACC\u0B02\u0B03\u0B3E\u0B3E\u0B40\u0B40\u0B47\u0B48\u0B4B\u0B4C"
+ + "\u0B57\u0B57\u0B83\u0B83\u0BBE\u0BBF\u0BC1\u0BC2\u0BC6\u0BC8\u0BCA\u0BCC"
+ + "\u0BD7\u0BD7\u0C01\u0C03\u0C41\u0C44\u0C82\u0C83\u0CBE\u0CBE\u0CC0\u0CC4"
+ + "\u0CC7\u0CC8\u0CCA\u0CCB\u0CD5\u0CD6\u0D02\u0D03\u0D3E\u0D40\u0D46\u0D48"
+ + "\u0D4A\u0D4C\u0D57\u0D57\u0F3E\u0F3F\u0F7F\u0F7F" },
+ { "Me", "\u06DD\u06DE\u20DD\u20E0" },
+ { "Zl", "\u2028\u2028" },
+ { "Zp", "\u2029\u2029" },
+ { "Zs", "\u0020\u0020\u00A0\u00A0\u2000\u200B\u3000\u3000" },
+ { "Cc", "\u0000\u001F\u007F\u009F" },
+ { "Cf", "\u200C\u200F\u202A\u202E\u206A\u206F\uFEFF\uFEFF" }
+ };
+}
diff --git a/src/com/ibm/text/ComposeData.java b/src/com/ibm/text/ComposeData.java
new file mode 100755
index 0000000..baaa6d7
--- /dev/null
+++ b/src/com/ibm/text/ComposeData.java
@@ -0,0 +1,1447 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/ComposeData.java,v $
+ * $Date: 2000/03/10 04:07:18 $
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text;
+import com.ibm.util.*;
+// This class is MACHINE GENERATED. Run NormalizerBuilder to regenerate.
+
+
+class ComposeData {
+ static final short BASE_COUNT = 773;
+ static final short COMBINING_COUNT = 61;
+ static final int MAX_COMPAT = 4341;
+ static final int MAX_CANON = 5124;
+ static final char MAX_COMPOSED = 0xfb1d;
+ static final int MAX_INDEX = 8899;
+ static final int INITIAL_JAMO_INDEX = 8900;
+ static final int MEDIAL_JAMO_INDEX = 8901;
+ 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 EXPLODING_BASE = 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\000\u0560\u0580\uA5A5\016\000\u05A0\u05C0\000\000\u05E0\u0600"+
+ "\000\u0620\u0640\u0660\000\000\u0680\u0660\000\000\u06A0\u06C0\000\u06E0"+
+ "\u0700\u0720\000\000\000\u0740\000\000\u0760\u0780\000\000\u07A0\u07C0"+
+ "\000\000\000\u07E0\000\000\u0800\000\000\000\u0820\u0840\000\u0860\u0880"+
+ "\u08A0\u08C0\u08E0\u0900\u0920\000\000\u0940\uA5A5\006\000\u0960\u0960"+
+ "\u0960\u0980\u09A0\u09C0\u09E0\u0A00\uA5A5.\000\u0A20\uA5A51\000\u0A40"+
+ "\u0A60\u0A80\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\000\u0DE0\000\u0E00\u0E20\u0E40\u0E60\u0E80\u0EA0"+
+ "\000\000\000\u0EC0\uA5A5\011\000\u0EE0\u0F00\u0F20\u0F40\u0F60\uA5A5L"+
+ "\000\u0F80\000\000\u0FA0\u0FC0\u0FE0\u1000\u1020\u1040\u1060\u1080\000"+
+ "\u10A0\u10C0\u10E0\u1100\u1120\u1140\u1160\u1180\000\u11A0\u11C0\u11E0"+
+ "\u1200\000\000\000\u1220\u1240\u1260\u1280\u12A0\u12C0\u12E0\u1300\u1320"+
+ "\u1340\u1360\u1380\u13A0\u13C0\u13E0\u1400\uA5A5\u03C0\000\uA5A5\u015D"+
+ "\u1420\u1440\uA5A5\u010A\000\u1460\u1480\u14A0\u14C0\u14E0\u1500\u1520"+
+ "\u1540\u1560\u1580\uA5A5\006\000\u15A0\u15C0\u15E0\u1600\u1620\u1640\u1660"+
+ "\u1680\u16A0\u16C0\u16E0\u1700\u1720\u1740\u1760\u1780\u17A0\u17C0\u17E0"+
+ "\u1800\u1820\u1840\u1860\u1880\000\u18A0\u18C0\u18E0\u1900\u1920\u1940"+
+ "\u1960\u1980\u19A0\u19C0\u19E0\u1A00\u1A20\u1A40\u1A60"
+ ,
+ "\000\u1A80\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#+\0033;CKS[c\003\003k\003s\003{\u0083"+
+ "\000\uA5A5\004\003\000\u008B\uA5A5\007\003\u0093\u009B\u00A3\u00AB\u00B3"+
+ "\u00BB\uA5A5\004\003\u00C3\u00CB\003\u00D3\u00DB\uA5A5\006\003\u00E3\uA5A5"+
+ "\007\003\u87B8\u87C8\u00EB\u87D8\u87E8\u00F3\uA5A5\011\003\uA5A5%\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\003\uA5A51\000\u0A59"+
+ "\u0A61\uA5A5\016\000\u0A69\u0A71\uA5A5\035\000\u0560\uA5A5\011\000\uA5A5"+
+ "\011\003\000\uA5A5\007\003\000\uA5A5\012\003\000\000\003\uA5A5\004\000"+
+ "\u00FB\uA5A5\017\000\003\uA5A5\024\000\u0A79\uA5A5\010\000\u0A81\u0A89"+
+ "\000\000\000\u0A91\uA5A5 \000\u0A99\000\u0AA1\uA5A5\010\000\u0103\u010B"+
+ "\u0113\uA5A5\037\000\u0578\u0590\u05A8\u05C0\uA5A5\010\000\u0AA9\uA5A5"+
+ "\020\000\u0AB1\000\000\u0AB9\uA5A5\007\003\000\000\uA5A5\006\003\000\000"+
+ "\003\003\000\uA5A5\004\003\uA5A5\042\000\uA5A5\033\003\uA5A5\035\000\u0AC1"+
+ "\uA5A5\007\000\u0AC9\000\000\u0AD1\uA5A5\010\000\u011B\uA5A5\020\000\003"+
+ "\000\000\000\uA5A5\004\003\000\000\000\u8830\u8848\u8860\u8878\u8890\u88A8"+
+ "\u88C0\u88D8\000\u0AD9\u0AE1\uA5A5\014\000\u0AE9\uA5A5\014\000\u0123\000"+
+ "\u012B\uA5A5\010\000\u0AF1\uA5A5\005\000\003\uA5A5\011\000\u0133\uA5A5"+
+ "\036\000\u0AF9\u0B01\uA5A5\004\000\u0B09\uA5A5\016\000\u0B11\uA5A5\006"+
+ "\000\u0B19\uA5A5\005\000\u0B21\000\000\000\u013B\uA5A5\020\000\003\uA5A5"+
+ ".\000\003\uA5A5\004\000\u0B29\u0B31\uA5A5\031\000\u0143\000\u014B\uA5A5"+
+ "\010\000\u0B39\uA5A5\005\000\003\uA5A5\010\000\u0153\u015B\uA5A5\032\000"+
+ "\u0B41\uA5A5+\000\u0163\uA5A5\007\000\u0B49\u0B51\uA5A5\005\000\003\uA5A5"+
+ "\011\000\u016B\uA5A5\016\000\u0B59\uA5A5\006\000\003\uA5A5\010\000\u0173"+
+ "\uA5A5(\000\u0B61\000\000\u017B\000\000\000\u0B69\000\000\000\u0B71\000"+
+ "\000\003\uA5A5\007\000\u0183\u018B\uA5A5'\000\u0193\uA5A5\007\000\u0B79"+
+ "\u0B81\uA5A5\005\000\003\uA5A5\011\000\u019B\uA5A5\022\000\u01A3\uA5A5"+
+ "\004\000\u01AB\uA5A5\011\000\u0B89\u0B91\000\u0B99\000\000\u01B3\uA5A5"+
+ "\023\000\u05D8\uA5A5\006\000\003\uA5A5\030\000\u05F0\uA5A5(\000\u0608"+
+ "\u0620\uA5A5\016\000\u0638\uA5A5\013\000\003\003\uA5A5\033\000\003\000"+
+ "\003\000\003\uA5A5\006\000\u0BA1\000\u0BA9\uA5A5\011\000\u0BB1\uA5A5\004"+
+ "\000\u0BB9\uA5A5\004\000\u0BC1\uA5A5\004\000\u0BC9\uA5A5\026\000\003\u88F0"+
+ "\000\u8908\000\u0648\000\u0668\uA5A5\004\003\000\000\u01BB\u8920\003\003"+
+ "\003\000\003\003\uA5A5\010\000\u0BD1\000\u0BD9\uA5A5\011\000\u0BE1\uA5A5"+
+ "\004\000\u0BE9\uA5A5\004\000\u0BF1\uA5A5\004\000\u0BF9\uA5A5\006\000\u0C01"+
+ "\u0C09\000\u01C3\000\u01CB\uA5A5\016\000\003\uA5A5\036\000\u0C11\uA5A5"+
+ "\010\000\u01D3\uA5A5\010\000\003\000\003\uA5A5\006\000\uA5A5 \004\000"+
+ "\uA5A5E\005\000\uA5A5S\006\uA5A5\030\000\003\uA5A5\015\000\u0C19\u0C21"+
+ "\u0C29\u0C31\uA5A5\006\000\u0C39\u0C41\u0C49\u0C51\u0C59\u0C61\000\000"+
+ "\u0C69\u0C71\u0C79\u0C81\u0C89\u0C91\u0C99\u0CA1\u0CA9\u0CB1\uA5A5\004"+
+ "\000\u0CB9\u0CC1\u0CC9\u0CD1\u0CD9\u0CE1\u0CE9\u0CF1\000\000\u0CF9\u0D01"+
+ "\u0D09\u0D11\u0D19\u0D21\u0D29\u0D31\u0D39\u0D41\u0D49\u0D51\u0D59\u0D61"+
+ "\u0D69\u0D71\u0D79\u0D81\u0D89\u0D91\u0D99\u0DA1\u0DA9\u0DB1\000\000\u0DB9"+
+ "\u0DC1\u0DC9\u0DD1\u0DD9\u0DE1\u0DE9\u0DF1\u0DF9\u0E01\u0E09\u0E11\u0E19"+
+ "\u0E21\u0E29\u0E31\uA5A5\004\000\u0E39\u0E41\u0E49\u0E51\u0E59\u0E61\u0E69"+
+ "\u0E71\u0E79\u0E81\u0E89\u0E91\u0E99\u0EA1\u0EA9\u0EB1\u0EB9\u0EC1\u0EC9"+
+ "\u0ED1\u0ED9\u0EE1\u0EE9\u0EF1\u0EF9\u0F01\u0F09\u0F11\u0F19\u0F21\u0F29"+
+ "\u0F31\u0F39\u0F41\u0F49\u0F51\u0F59\u0F61\000\000\u0F69\u0F71\u0F79\u0F81"+
+ "\u0F89\u0F91\u0F99\u0FA1\uA5A5\006\000\u0FA9\u0FB1\u0FB9\u0FC1\uA5A5\004"+
+ "\000\u0FC9\u0FD1\u0FD9\u0FE1\u0688\u06A0\uA5A5\004\000\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\u11C1\u11C9\u11D1\u11D9"+
+ "\u11E1\u11E9\u11F1\u11F9\u1201\u1209\u1211\u1219\u1221\u1229\u1231\u1239"+
+ "\u1241\u1249\u1251\u1259\u1261\u1269\u1271\u1279\u1281\000\000\u1289\u1291"+
+ "\u1299\u12A1\uA5A5\006\000\u12A9\u12B1\u12B9\u12C1\u12C9\u12D1\u12D9\u12E1"+
+ "\u12E9\u12F1\u12F9\u1301\u1309\u1311\u1319\u1321\u1329\u1331\uA5A5\006"+
+ "\000\u1339\u1341\uA5A5\006\000\u1349\u1351\u1359\u1361\u1369\u1371\u1379"+
+ "\u1381\u1389\u1391\u1399\u13A1\u13A9\u13B1\u13B9\u13C1\u13C9\u13D1\uA5A5"+
+ "\006\000\u13D9\u13E1\uA5A5\006\000\u13E9\u13F1\uA5A5\006\000\u13F9\u1401"+
+ "\uA5A5\006\000\u1409\u1411\uA5A5\007\000\u1419\uA5A5\006\000\u1421\u1429"+
+ "\u1431\u1439\u1441\u1449\u1451\u1459\u1461\u1469\u1471\u1479\u1481\u1489"+
+ "\u1491\u1499\u14A1\u8938\000\u8950\u14A9\u8968\000\u8980\000\u8998\000"+
+ "\u89B0\u14B1\u89C8\000\000\u14B9\u14C1\uA5A5\006\000\u14C9\u14D1\uA5A5"+
+ "\006\000\u14D9\u14E1\uA5A5\006\000\u14E9\u14F1\uA5A5\006\000\u14F9\u1501"+
+ "\uA5A5\006\000\u1509\u1511\uA5A5\011\000\u1519\000\000\u1521\uA5A5\004"+
+ "\000\u89E0\u1529@\u89F8B\u06B8\u06D0\000\u1531\000\000\u1539\000\000\u8A08"+
+ "\000\u8A20\u1541\u06F0\u0710\u0730\000\000\000\u8A38\uA5A5\007\000\u8A58"+
+ "\000\u0750\u0770\u0790\000\000\000\u8A70\uA5A5\007\000\u8A90\000\u07B0"+
+ "\u04A0\u8AA8\000\000\000\u1549\000\000\u1551\000\000\u8AB8\000\u8AD0\u1559"+
+ "\u00C8Z\000\uA5A5\013p\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\uA5A5\015\003\uA5A5\004\000\003\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\u8AE8\000\u02F8\000\u8AF8\u8B08"+
+ "\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\u1561\000\u1569\000\u1571\uA5A5\033\000\u1579\000\u1581"+
+ "\000\u1589\uA5A5\016\000\u1591\uA5A5\004\000\u1599\000\000\u15A1\uA5A5"+
+ "\027\000\u15A9\000\u15B1\uA5A5\006\000\u0FE8\u1000\000\u1020\u1038\uA5A5"+
+ "\013\000\u15B9\uA5A5\006\000\u15C1\000\u15C9\000\000\u15D1\uA5A5\004\000"+
+ "\u15D9\uA5A5\023\000\u15E1\000\000\u15E9\u15F1\uA5A5\014\000\u15F9\u1601"+
+ "\000\000\u1609\u1611\000\000\u1619\u1621\u1629\u1631\uA5A5\004\000\u1639"+
+ "\u1641\000\000\u1649\u1651\uA5A5\011\000\u1659\u1661\uA5A5\017\000\u1669"+
+ "\uA5A5\005\000\u1671\u1679\000\u1681\uA5A5\006\000\u1689\u1691\u1699\u16A1"+
+ "\uA5A5\023\000\u8B20\u8B30\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\uA5A54\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"+
+ "5\000\u2820\000\u1C30\u2830\u2840\uA5A5\013\000\u16A9\uA5A5\004\000\u16B1"+
+ "\000\u16B9\000\u16C1\000\u16C9\000\u16D1\000\u16D9\000\u16E1\000\u16E9"+
+ "\000\u16F1\000\u16F9\000\u1701\000\u1709\000\000\u1711\000\u1719\000\u1721"+
+ "\uA5A5\006\000\u1729\000\000\u1731\000\000\u1739\000\000\u1741\000\000"+
+ "\u1749\uA5A5\035\000\u01DB\u01E3\u2850\u2868\u1751\uA5A5\010\000\u1759"+
+ "\uA5A5\004\000\u1761\000\u1769\000\u1771\000\u1779\000\u1781\000\u1789"+
+ "\000\u1791\000\u1799\000\u17A1\000\u17A9\000\u17B1\000\u17B9\000\000\u17C1"+
+ "\000\u17C9\000\u17D1\uA5A5\006\000\u17D9\000\000\u17E1\000\000\u17E9\000"+
+ "\000\u17F1\000\000\u17F9\uA5A5\023\000\u1801\u1809\u1811\u1819\uA5A5\012"+
+ "\000\u1821\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\u8B40\u8B50\u8B60\u8B70"+
+ "\u8B80\u8B90\u8BA0\u8BB0\u8BC0\u8BD0\u8BE0\u8BF0\u8C00\u8C10\u8C20\u8C30"+
+ "\u8C40\u8C50\u8C60\u8C70\u8C80\u8C90\u8CA0\u8CB0\u8CC0\u8CD0\u8CE0\u8CF0"+
+ "\u8D00\u8D10\u8D20\u8D30\u8D40\u8D50\u8D60\u8D70\u8D80\u8D90\u8DA0\u8DB0"+
+ "\u8DC0\u8DD0\u8DE0\u8DF0\u8E00\u8E10\u8E20\u8E30\u8E40\u8E50\u8E60\u8E70"+
+ "\u8E80\u8E90\u8EA0\u8EB0\u8EC0\u8ED0\u8EE0\u8EF0\u8F00\u8F10\u8F20\u8F30"+
+ "\u8F40\u8F50\u8F60\u8F70\u8F80\u8F90\u8FA0\u8FB0\u8FC0\u8FD0\u8FE0\u8FF0"+
+ "\u9000\u9010\u9020\u9030\u9040\u9050\u9060\u9070\u9080\u9090\u90A0\u90B0"+
+ "\u90C0\u90D0\u90E0\u90F0\u8C80\u9100\u9110\u9120\u9130\u9140\u9150\u9160"+
+ "\u9170\u9180\u9190\u91A0\u91B0\u91C0\u91D0\u91E0\u91F0\u9200\u9210\u9220"+
+ "\u9230\u9240\u9250\u9260\u9270\u9280\u9290\u92A0\u92B0\u92C0\u92D0\u92E0"+
+ "\u92F0\u9300\u9310\u9320\u9330\u9340\u9350\u9360\u9370\u9380\u9390\u93A0"+
+ "\u93B0\u93C0\u93D0\u93E0\u93F0\u9400\u9410\u9420\u9430\u9440\u9450\u9460"+
+ "\u9470\u9480\u9490\u94A0\u94B0\u94C0\u94D0\u94E0\u94F0\u9500\u9510\u9520"+
+ "\u9530\u9220\u9540\u9550\u9560\u9570\u9580\u9590\u95A0\u95B0\u9120\u95C0"+
+ "\u95D0\u95E0\u95F0\u9600\u9610\u9620\u9630\u9640\u9650\u9660\u9670\u9680"+
+ "\u9690\u96A0\u96B0\u96C0\u96D0\u96E0\u96F0\u8C80\u9700\u9710\u9720\u9730"+
+ "\u9740\u9750\u9760\u9770\u9780\u9790\u97A0\u97B0\u97C0\u97D0\u97E0\u97F0"+
+ "\u9800\u9810\u9820\u9830\u9840\u9850\u9860\u9870\u9880\u9890\u98A0\u9140"+
+ "\u98B0\u98C0\u98D0\u98E0\u98F0\u9900\u9910\u9920\u9930\u9940\u9950\u9960"+
+ "\u9970\u9980\u9990\u99A0\u99B0\u99C0\u99D0\u99E0\u99F0\u9A00\u9A10\u9A20"+
+ "\u9A30\u9A40\u9A50\u9A60\u9A70\u9A80\u9A90\u9AA0\u9AB0\u9AC0\u9AD0\u9AE0"+
+ "\u9AF0\u9B00\u9B10\u9B20\u9B30\u9B40\u9B50\u9B60\u9B70\u9B80\u9B90\u9BA0"+
+ "\u9BB0\u9BC0\000\000\u9BD0\000\u9BE0\000\000\u9BF0\u9C00\u9C10\u9C20\u9C30"+
+ "\u9C40\u9C50\u9C60\u9C70\u9C80\000\u9C90\000\u9CA0\000\000\u9CB0\u9CC0"+
+ "\000\000\000\u9CD0\u9CE0\u9CF0\u9D00\uA5A5\022\000\u5D70\u5D88\u5DA0\u5DB8"+
+ "\u5DD8\u5DF8\u5DF8\uA5A5\014\000\u5E10\u5E28\u5E40\u5E58\u5E70\uA5A5\007"+
+ "\000\u9D10\u5E88\u0BD0\u0C00\u5E98\u5EA8\u5EB8\u5EC8\u5ED8\u5EE8\u0970"+
+ "\u9D28\u9D40\u9D58\u9D78\u9D98\u9DB0\u9DC8\u9DE0\u9DF8\u9E10\u9E28\u9E40"+
+ "\u9E58\000\u9E70\u9E88\u9EA0\u9EB8\u9ED0\000\u9EE8\000\u9F00\u9F18\000"+
+ "\u9F30\u9F48\000\u9F60\u9F78\u9F90\u9FA8\u9FC0\u9FD8\u9FF0\uA008\uA020"+
+ "\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\003"+
+ "\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\007\000\u0160\u0180\u01A0\u01C0\uA5A5\012\000\u01E0\u0200\u0220"+
+ "\u0240\u0260\u0280\u02A0\000\u02C0\u02E0\u0300\uA5A5\007\000\u0320\u0340"+
+ "\u0360\u0380\uA5A5\012\000\u03A0\u03C0\uA5A5\015\000\u03E0\u0400\u0420"+
+ "\uA5A5\016\000\u0440\u0460\u0480\u04A0\000\000\u04C0\uA5A5\031\000\u04E0"+
+ "\u0500\u0520\u0540\000\000\000\u0560\u0580\u05A0\u05C0\000\000\u05E0\u0600"+
+ "\uA5A5\006\000\u0620\uA5A5\012\000\u0640\u0660\uA5A5\006\000\u0680\u06A0"+
+ "\u06C0\uA5A5\004\000\u06E0\uA5A5\005\000\u0700\uA5A5\012\000\u0720\u0740"+
+ "\000\000\000\u0760\uA5A5\010\000\u0780\uA5A5\021\000\u07A0\u07C0\u07E0"+
+ "\u0800\000\u0820\000\000\u0840\u0860\u0880\uA5A5\025\000\u08A0\u08C0\u08E0"+
+ "\u0900\000\000\u0920\uA5A5\031\000\u0940\u0960\uA5A5\036\000\u0980\u09A0"+
+ "\uA5A5\007\000\u09C0\u09E0\uA5A5\025\000\u0A00\u0A20\u0A40\u0A60\000\000"+
+ "\u0A80\000\u0AA0\uA5A5\027\000\u0AC0\u0AE0\uA5A5\010\000\u0B00\uA5A5\025"+
+ "\000\u0B20\u0B40\uA5A5&\000\u0B60\u0B80\uA5A5\013\000\u0BA0\uA5A5\022"+
+ "\000\u0BC0\u0BE0\uA5A5\013\000\u0C00\uA5A5\012\000\u0C20\u0C40\u0C60\u0C80"+
+ "\000\u0CA0\u0CC0\u0CE0\u0D00\uA5A5\004\000\u0D20\u0D40\u0D60\000\u0D80"+
+ "\u0DA0\uA5A5\015\000\u0DC0\u0DE0\u0E00\u0E20\u0E40\u0E60\u0E80\u0EA0\u0EC0"+
+ "\000\000\000\u0EE0\u0F00\u0F20\u0F40\u0F60\u0F80\u0FA0\uA5A5\015\000\u0FC0"+
+ "\u0FE0\u1000\u1020\000\u1040\u1060\000\u1080\uA5A5\006\000\u10A0\000\000"+
+ "\u10C0\uA5A5\015\000\u10E0\u1100\u1120\u1140\000\000\u1160\u1180\u11A0"+
+ "\uA5A5\006\000\u11C0\u11E0\uA5A5\017\000\u1200\u1220\000\000\000\u1240"+
+ "\uA5A5\010\000\u1260\u1280\uA5A5\020\000\u12A0\u12C0\u12E0\u1300\u1320"+
+ "\u1340\000\u1360\u1380\000\000\000\u13A0\u13C0\u13E0\u1400\u1420\u1440"+
+ "\uA5A5\016\000\u1460\u1480\u14A0\u14C0\u14E0\u1500\u1520\u1540\u1560\000"+
+ "\000\000\u1580\u15A0\u15C0\u15E0\u1600\u1620\u1640\uA5A5\015\000\u1660"+
+ "\u1680\u16A0\u16C0\u16E0\u1700\u1720\u1740\u1760\000\000\000\u1780\u17A0"+
+ "\u17C0\u17E0\u1800\u1820\u1840\uA5A5\015\000\u1860\u1880\000\000\u18A0"+
+ "\000\000\000\u18C0\000\000\000\u18E0\uA5A5\023\000\u1900\u1920\u1940\u1960"+
+ "\u1980\u19A0\u19C0\u19E0\u1A00\000\000\000\u1A20\u1A40\000\u1A60\u1A80"+
+ "\u1AA0\u1AC0\uA5A5\015\000\u1AE0\u1B00\u1B20\u1B40\u1B60\u1B80\u1BA0\u1BC0"+
+ "\u1BE0\000\000\000\u1C00\u1C20\u1C40\u1C60\uA5A5\020\000\u1C80\uA5A5\024"+
+ "\000\u1CA0\u1CC0\uA5A5\011\000\u1CE0\uA5A5\010\000\u1D00\uA5A5\010\000"+
+ "\u1D20\u1D40\u1D60\u1D80\uA5A5\022\000\u1DA0\u1DC0\uA5A5\010\000\u1DE0"+
+ "\u1E00\u1E20\u1E40\uA5A5\024\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\u1F80\uA5A5\037"+
+ "\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\037\000\u20E0"+
+ "\uA5A5\037\000\u2100\uA5A5\037\000\u2120\uA5A5\037\000\u2140\uA5A5\037"+
+ "\000\u2160\uA5A5 \000\u2180\uA5A5\036\000\u21A0\uA5A5\037\000\u21C0\uA5A5"+
+ " \000\u21E0\uA5A5)\000\u2200\u2220\u2240\uA5A5\036\000\u2260\uA5A5h\000"
+ ,
+ "\000\u2280\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\uA5A53\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\uFB90\u1FC2\000\uFEE1\u1FF2\000\uFF47\uA5A5\025\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\uA5A52\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\uFB8E\u1FC4\000\uFEE0\u1FF4\000\uFF45\uA5A5\033\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\042\000\u1EAC\u1EAD\uA5A5\026\000"+
+ "\u1EC6\u1EC7\uA5A5\022\000\u1ED8\u1ED9\uA5A5\034\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\uFC52\000\uFB8C"+
+ "\uA5A5!\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"+
+ "\uA5A58\000\u1EB6\u1EB7\uA5A5\004\000\uFC4F\000\uFB8A\uA5A5\036\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\023\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\027\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\027\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\uFD36\u1EE0\uFD08\000\u1EEA\u1EE8\uFC9E\uFC7F\uA5A5\022\000\u1EDD"+
+ "\u1EDB\uFF2B\u1EE1\uFEF9\000\u1EEB\u1EE9\uFE9B\uFE83\uA5A5\017\000\uFBEB"+
+ "\uFBD4\uFBC4\uFBAD\uFB97\uFB81\uA5A5\014\000\u1EEE\u1EEF\uFE11\uFDF3\uFDD6"+
+ "\uFDBA\uFDA2\uFD8A\uFD6C\uFD51\uA5A5\024\000\uFE4E\uFE33\uFE18\uFDFA\uFDDE"+
+ "\uFDC1\uFDA7\uFD8E\uFD71\uFD56\uFD38\uFD21\uA5A5\034\000\uFD9E\uFD85\uFD68"+
+ "\uFD4C\uA5A5\004\000\uFCE5\uFCD1\uFCB4\uFC95\uA5A5\012\000\uFF9E\uFF8B"+
+ "\uFF77\uFF64\uFF4F\uFF39\uFF23\uFF0B\uA5A5(\000\uFB79\uFB66\uFB58\uFB44"+
+ "\uFB2E\uFB1E\uFF9C\uFF8A\uA5A5\032\000\uFCC5\uFCA5\uFC85\uFC6D\uFC5E\uFC47"+
+ "\uFC34\uFC1F\uFC06\uFBED\uA5A5\036\000\u1EE2\u1EE3\u1EDE\u1EDF\uFDCE\uFDB2"+
+ "\uFD98\uFD7D\uFD60\uFD45\uFD2B\uFD12\uFD00\uFCF0\uA5A5\012\000\u1EF0\u1EF1"+
+ "\u1EEC\u1EED\uA5A5\042\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\uFF11\uFEFC\u1EAC\uFED2\uFEBD\uFEAC\000\000\uFE6D"+
+ "\uFE5B\u1EC6\uFE2D\uFE0E\uFDF0\uFDD3\uFDB7\uFD86\uFD69\uFD4D\u1ED8\uFD19"+
+ "\uFD05\000\uFCD3\uFCB6\uFC97\uFC7B\uFC67\uFC2A\uFC12\u1EAD\uFBE0\uFBCE"+
+ "\uFBBB\000\000\uFB7A\uFB67\u1EC7\uFB45\uFB2F\uFB20\uFF9F\uFF8C\uFF65\uFF50"+
+ "\uFF3A\u1ED9\uFF0C\uFEF5\000\uFEB6\uFEA7\uFE95\uFE7C\uFE66\uFE3D\uFE22"+
+ "\uFE03\u1EB6\u1EB7\uA5A5\010\000\uFCC7\uFCA7\uFC60\uFC49\uFC36\uFC20\uFC08"+
+ "\uFBF0\uFBB2\uFB9B\uA5A5\006\000\uFF82\uFF71\uFF30\uFF19\uFF03\uFEEE\uFED8"+
+ "\uFEC3\uFE8B\uFDA4\uFD8C\uFD35\uFD1F\uFCBC\uFC9C\uFC56\uFC40\uFBE3\uFBD0"+
+ "\uFBC0\uFBA7\uFB92\uFB7D\uFB47\uFB31\uFF8E\uFF79\uFF6A\uFF54\uFF40\uFF2A"+
+ "\uFEE6\uFECF\uFE9A\uFE82\uFE46\uFE29\uFE0B\uFDEE\uFDD1\uFDB5\uFD9B\uFD80"+
+ "\uFD64\uFD49\uFD03\uFCF2\uFCE2\uFCCE\uFCB0\uFC91\uFC77\uFC64\uFC4D\uFC39"+
+ "\uFC25\u1EE2\u1EE3\u1EF0\u1EF1\000\uFE9E\uFE88\uFE6F\uFE5C\uFE4A\uFE2E"+
+ "\uFE10\uFDF2\uFDD5\uFDB9\uFDA0\uFD88\uFD6B\uFD50\uFD32\uFD1B\uFCF6\uFCE7"+
+ "\uFCD5\uFCB8\000\000\uFC13\uFBFA\uA5A5\004\000\uFF66\uFF51\uFF3D\uFF26"+
+ "\uFEB8\uFEA9\uFE97\uFE7E\uFE69\uFE56\uFE41\uFE26\uFE07\uFDEA\uFDCC\uFDB0"+
+ "\uFD96\uFD7B\uFD5E\uFD42\uFD28\uFD0F\uFCFE\uFCEE\uFCDF\uFCCA\uFCAB\uFC8B"+
+ "\uA5A5\004\000\uFBF1\uFBD7\uFB52\uFB3C\000\000\uFF97\uFF84\uFF72\uFF5C"+
+ "\uFF46\uFF32\uFF1C\uFF05\uFEEF\uFEDA\uA5A5\014\000\uFD4F\uFD31\uFC98\uFC7C"+
+ "\uA5A5\006\000\uFBBC\uFBA2\uFB8D\uFB7B\uA5A5\006\000\uFF3C\uFF25\000\000"+
+ "\uFEDF\uFECA\uA5A5\004\000\uFE3E\uFE23\uFE05\uFDE8\uA5A5\014\000\uFCA9"+
+ "\uFC89\uFC71\uFC61\uFC21\uFC09\uA5A5\006\000\uFB6F\uFB5F\uFB50\uFB3A\uFB27"+
+ "\uFFA7\uFF96\uFF83\uFF1A\uFF04\uA5A5\006\000\u1E68\u1E69\000\000\uFE16"+
+ "\uFDF8\uFDDB\uFDBE\000\000\uFD6F\uFD54\uA5A5\014\000\uFC2E\uFC18\uFBFF"+
+ "\uFBE5\uFBD1\uFBC1\uFB7E\uFB68\uFB59\uFB48\uFB32\uFB21\uFFA0\uFF8F\uFEFA"+
+ "\uFEE7\uFED0\uFEBB\000\uFE48\uFE2B\uFE0C\000\000\uFD16\uFD04\uFCF3\uFCE3"+
+ "\uFCCF\uFCB1\uFC92\uFC78\uFC65\uFC4E\000\000\uFC0E\uFBF6\uFBDC\uFBCB\uFBB8"+
+ "\uFBA0\uFB89\uFB77\uA5A5\004\000\uFB1D\uFF9B\uFF89\uFF76\uFF61\uFF4C\uFF36"+
+ "\uFF20\uFF09\uFEF3\uFEDD\uFEC8\000\000\uFE90\uFE77\uA5A5\004\000\uFDFD"+
+ "\uFDE1\uFDC4\uFDA9\uFD90\uFD73\uFD58\uFD3B\uFD23\uFD0B\000\000\uFCDB\uFCC2"+
+ "\uFCA3\uFC83\uFC6C\uFC5D\uFC46\uFC33\uA5A5\004\000\uFBC5\uFBAE\uFB98\uFB82"+
+ "\uFB6B\uFB5C\uFB4B\uFB35\uFB24\uFFA4\000\000\uFF6E\uFF56\uFF14\uFEFF\uFEEB"+
+ "\uFED5\uA5A5'\000\u1E72\uA5A5\030\000\u1E73\uA5A5\034\000\uFCD2\uFCB5"+
+ "\uFC96\uFC7A\uA5A5\030\000\uFEB5\uFEA6\uFE94\uFE7B\uA5A5!\000\uFE44\uFE27"+
+ "\uFE09\uFDEC\uFDCF\uFDB3\uFD9A\uFD7F\uFD62\uFD47\uA5A5\026\000\uFE0F\uFDF1"+
+ "\uFDD4\uFDB8\uFD9F\uFD87\uFD6A\uFD4E\uFD30\uFD1A\uA5A5\004\000\uFCDE\uFCC8"+
+ "\uFCA8\uFC88\uA5A5\042\000\uFC2D\uFC17\uFBFE\uFBE4\uA5A5\030\000\uFBC3"+
+ "\uFBAB\uA5A5\042\000\u1E00\uA5A5\032\000\u1E01\uA5A5\030\000\uFF10\uFEFB"+
+ "\uFEE8\uFED1\uFEBC\uFEAB\uA5A5\026\000\uFC28\uFC10\uFBF8\uFBDF\uFBCD\uFBBA"+
+ "\uA5A5\027\000\uFE1F\uFE01\uFDE5\uFDC8\uA5A5\025\000\uFE9D\uFE85\uA5A5"+
+ "\016\000\uFCF5\uFCE6\uFCD4\uFCB7\uA5A5\012\000\uFF3B\uFF24\uFEB7\uFEA8"+
+ "\uFE96\uFE7D\uA5A5\032\000\uFB4F\uFB39\uA5A52\000\uFD14\uFD01\uFCF1\uFCE1"+
+ "\uFCCC\uFCAE\uFC8F\uFC75\uFC63\uFC4C\000\000\uFC0B\uFBF3\uFBD9\uFBC9\uFBB5"+
+ "\uFB9E\uFB87\uFB73\uA5A5'\000\u0218\u021A\uA5A5\027\000\u0219\u021B\uA5A5"+
+ "\026\000\uFF68\uFF53\uFF3F\uFF28\uFEE3\uFECC\uFE99\uFE80\uA5A5\034\000"+
+ "\uFE71\uFE5E\000\000\uFE13\uFDF5\uFDD8\uFDBC\000\000\uFD6E\uFD53\uA5A5"+
+ "\037\000\uFE43\uA5A5\017\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\uFE6B\uFE59\uFE47\uFE2A\uA5A5\004\000\uFD82"+
+ "\uA5A5\023\000\uFB76\uFB64\uFB56\uFB42\uA5A5\004\000\uFF60\uA5A5\020\000"+
+ "\u1E08\u1E09\uFD3A\uFD22\uFD0A\uFCFB\uFCEB\uFCDA\uFCC1\uFCA2\uFC5C\uFC45"+
+ "\u1E1C\u1E1D\uFC04\uFBEA\uFBAC\uFB96\uFB80\uFB6C\uFB5D\uFB4C\uFB36\uFB25"+
+ "\uFF7E\uFF6D\uA5A5\007\000\uFDA1\uFD89\uFD33\uFD1C\uFCBA\uFC9A\uFC54\uFC3E"+
+ "\uA5A5\006\000\uFB46\uFB30\uFF8D\uFF78\uFF67\uFF52\uFF3E\uFF27\uFEE2\uFECB"+
+ "\uFE98\uFE7F\uA5A5\016\000\uFC3C\uFC29\uFC11\uFBF9\000\000\uFB1F\uFF9D"+
+ "\uFF63\uFF4E\uA5A5\006\000\uFE64\uFE52\uFE3B\uFE20\uA5A5\010\000\uFD25"+
+ "\uFD0D\uFCFD\uFCED\uA5A5\004\000\uFC6E\uFC5F\uFC48\uFC35\uFBEE\uFBD6\uA5A5"+
+ "\034\000\uFC94\uFC79\uFC66\uFC51\uFC3B\uFC26\uFBDD\uFBCC\uFBB9\uFBA1\uFB8B"+
+ "\uFB78\uFB65\uFB57\uFB43\uFB2D\uFF62\uFF4D\uFF38\uFF22\uFF0A\uFEF4\uFEDE"+
+ "\uFEC9\uFE93\uFE7A\uA5A5\004\000\uFE00\uFDE4\uFDC7\uFDAC\uFD93\uFD76\uFD5B"+
+ "\uFD3E\uFD24\uFD0C\uFCFC\uFCEC\uFCDD\uFCC4\uA5A5\004\000\uFC1E\uFC05\uFBEC"+
+ "\uFBD5\uFBC6\uFBAF\uFB99\uFB83\uA5A5\010\000\uFF16\uFF01\uFEEC\uFED6\uFEC0"+
+ "\uFEAD\uFE9F\uFE89\uFE70\uFE5D\uFE4B\uFE2F\uFE12\uFDF4\uFDD7\uFDBB\uFDA3"+
+ "\uFD8B\uFD6D\uFD52\uFD34\uFD1D\uFD06\uFCF7\uFCE8\uFCD6\uA5A5\030\000\uFE57"+
+ "\uFE42\uA5A5\032\000\uFB3E\uFB29\uFFA9\uFF99\uFF86\uFF74\uFF5F\uFF4A\uFF34"+
+ "\uFF1E\uFF07\uFEF1\uFEDC\uFEC6\uFEB1\uFEA3\uA5A5\042\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\uFF0F\uFEF8\uFEE5\uFECE\uFEBA\uFEAA"+
+ "\000\000\uFE6A\uFE58\uFE45\uFE28\uFE0A\uFDED\uFDD0\uFDB4\000\uFD63\uFD48"+
+ "\uFD2D\uFD15\uFD02\000\uFCCD\uFCAF\uFC90\uFC76\000\uFC24\uFC0D\uFBF5\uFBDB"+
+ "\uFBCA\uFBB6\000\000\uFB74\uFB62\uFB54\uFB40\uFB2B\uFFAA\uFF9A\uFF88\000"+
+ "\uFF4B\uFF35\uFF1F\uFF08\uFEF2\000\uFEB3\uFEA4\uFE8F\uFE76\000\000\uFE1B"+
+ "\uFDFC\uFDE0\uFDC3\uA5A5\012\000\uFC5B\uFC44\uFC32\uFC1D\uFC03\uFBE9\uFBAA"+
+ "\uFB95\uA5A5\010\000\uFF2D\uFF13\uFEFE\uFEEA\uFED4\uFEBF\uFE87\uA5A5\010"+
+ "\000\u01EC\u01ED\uFBBE\uFBA4\uFB8F\uFB7C\uA5A5\014\000\uFE40\uFE25\uFE06"+
+ "\uFDE9\uFDCB\uFDAF\uFD95\uFD7A\uFD5D\uFD41\uA5A5\013\000\uFDDC\uFDBF\uFC69"+
+ "\uFC58\000\uFE9C\uFE84\uFE6C\uFE5A\uFE49\uFE2C\uFE0D\uFDEF\uFDD2\uFDB6"+
+ "\uFD9D\uFD84\uFD66\uFD4A\uFD2F\uFD18\uFCF4\uFCE4\uFCD0\uFCB3\uA5A5\012"+
+ "\000\uFF37\uFF21\uFEB4\uFEA5\uFE92\uFE79\uFE63\uFE51\uFE39\uFE1E\uFDFF"+
+ "\uFDE3\uFDC6\uFDAB\uFD92\uFD75\uFD5A\uFD3D\uA5A5\004\000\uFCDC\uFCC3\uFCA4"+
+ "\uFC84\uA5A5\006\000\uFB4D\uFB37\000\000\uFF93\uFF7F\uFF6F\uFF57\uFF42"+
+ "\uFF2E\uFF15\uFF00\uA5A5\014\000\uFD81\uFD65\uA5A5\012\000\uFBB7\uFB9F"+
+ "\uFB88\uFB75\uFB63\uFB55\uFB41\uFB2C\uA5A5\012\000\uFE62\uFE50\uFE37\uFE1C"+
+ "\uA5A5\032\000\uFB6A\uFB5B\uFB4A\uFB34\uFB23\uFFA3\uFF92\uFF7D\uA5A5\032"+
+ "\000\uFCB9\uFC99\uFC7D\uFC68\uFC53\uFC3D\uFC2B\uFC14\uFBFB\uFBE1\uA5A5"+
+ "\022\000\uFD43\uFD29\uFD10\uFCFF\uFCEF\uFCE0\uFCCB\uFCAC\uFC8D\uFC74\uFC62"+
+ "\uFC4A\uFC37\uFC22\uFC0A\uFBF2\uFBD8\uFBC8\uFBB4\uFB9D\uFB86\uFB72\uFB61"+
+ "\uFB53\uFB3D\uFB28\uFFA8\uFF98\uFF85\uFF73\uFF5D\uFF48\uFF33\uFF1D\uFF06"+
+ "\uFEF0\uFEDB\uFEC5\uFEB0\uFEA2\uFE8D\uFE74\uFE60\uFE4D\uFE32\uFE17\uFDF9"+
+ "\uFDDD\uFDC0\uFDA6\uFD8D\uFD70\uFD55\uFD37\uFD20\uFD09\uFCFA\uFCEA\uFCD8"+
+ "\uFCBF\uFCA0\uFC80\uFC6A\uFC59\uFC42\uFC30\uFC1B\uFC02\uFBE8\uFBD3\uFBC2"+
+ "\uFBA9\uFB94\uFB7F\uFB69\uFB5A\uFB49\uFB33\uFB22\uFFA1\uFF90\uFF7B\uA5A5"+
+ "\035\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\uFE68\uFE55\uFE3F\uFE24\uA5A5\004\000\uFD79"+
+ "\uA5A5\006\000\uFCC9\uFCAA\uFC8A\uFC72\uA5A5\011\000\uFB70\uFB60\uFB51"+
+ "\uFB3B\uA5A5\004\000\uFF5B\uA5A5\006\000\uFEAF\uFEA1\uFE8C\uFE73\uA5A5"+
+ "\016\000\uFCBE\uFC9F\uFC57\uFC41\uFC2F\uFC19\uFC00\uFBE6\uFBA8\uFB93\uA5A5"+
+ "\017\000\uFD9C\uFD83\uFD2E\uFD17\uFCB2\uFC93\uFC50\uFC3A\uA5A5\020\000"+
+ "\uFE91\uFE78\uFE38\uFE1D\uFDFE\uFDE2\uFDC5\uFDAA\uFD91\uFD74\uFD59\uFD3C"+
+ "\uA5A5\026\000\uFE08\uFDEB\uFDCD\uFDB1\uFD97\uFD7C\uFD5F\uFD44\uFD2A\uFD11"+
+ "\uA5A5\014\000\uFF5E\uFF49\uA5A5\006\000\uFE61\uFE4F\uFE34\uFE19\uA5A5"+
+ "\014\000\uFCD9\uFCC0\uFCA1\uFC81\uA5A5\042\000\uFC8C\uFC73\uA5A5\006\000"+
+ "\uFBB3\uFB9C\uFB85\uFB71\uA5A5$\000\uFC1A\uFC01\uA5A5 \000\uFD67\uFD4B"+
+ "\uA5A5\014\000\uFC27\uFC0F\uFBF7\uFBDE\uA5A5\017\000\uFE3A\uA5A5\034\000"+
+ "\uFFA5\uFF94\uFF80\uFF70\uFF59\uFF43\uFF2F\uFF17\uFF02\uFEED\uFED7\uFEC1"+
+ "\uA5A5 \000\uFBBF\uFBA5\uA5A5+\000\u1E2A\uA5A5\030\000\u1E2B\uA5A5&\000"+
+ "\uFF7A\uFF6B\uA5A5\027\000\uFBE7\uFBD2\uA5A5.\000\uFF31\uFF1B\000\000"+
+ "\uFED9\uFEC4\uA5A5\016\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"+
+ "\uFE65\uFE53\uFE3C\uFE21\uFE02\uFDE6\uFDC9\uFDAD\uA5A5\007\000\uFCC6\uFCA6"+
+ "\uFC87\uFC70\uA5A5\011\000\uFB6D\uFB5E\uFB4E\uFB38\uFB26\uFFA6\uFF95\uFF81"+
+ "\uA5A5\007\000\uFEAE\uFEA0\uFE8A\uFE72\uA5A5\020\000\uFC55\uFC3F\uFC2C"+
+ "\uFC16\uFBFD\uFBE2\uFBA6\uFB91\uA5A5\010\000\uFF29\uFF0E\uFEF7\uFEE4\uFECD"+
+ "\uFEB9\uFE81\uA5A5\032\000\uFE36\uFE1A\uFDFB\uFDDF\uFDC2\uFDA8\uFD8F\uFD72"+
+ "\uFD57\uFD39\uA5A5\022\000\uFE67\uFE54\000\000\uFE04\uFDE7\uFDCA\uFDAE"+
+ "\uFD94\uFD78\uFD5C\uFD40\uFD27\uFD0E\uA5A5\024\000\uFE5F\uFE4C\uFE31\uFE15"+
+ "\uFDF7\uFDDA\uFDBD\uFDA5\uA5A5\010\000\uFCD7\uFCBD\uFC9D\uFC7E\uA5A5*"+
+ "\000\uFBB1\uFB9A\uFB84\uFB6E\uA5A5\020\000\uFE30\uFE14\uA5A5\042\000\uFC23"+
+ "\uFC0C\uFBF4\uFBDA\uA5A5,\000\uFFA2\uFF91\uFF7C\uFF6C\uFF55\uFF41\uFF2C"+
+ "\uFF12\uFEFD\uFEE9\uFED3\uFEBE\000\000\uFE86\uFE6E\uA5A5\034\000\uFBBD"+
+ "\uFBA3\uA5A5$\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\uFD77\uA5A5\033\000\uFF58\uA5A5\030\000\uFCBB"+
+ "\uFC9B\uA5A5\017\000\uFF69\uA5A5\007\000\uFD99\uFD7E\uFD2C\uFD13\uFCAD"+
+ "\uFC8E\uFC4B\uFC38\uA5A5\006\000\uFB3F\uFB2A\uFF87\uFF75\uA5A5\006\000"+
+ "\uFE8E\uFE75\uA5A5\017\000\uFC82\uFC6B\uFC5A\uFC43\uFC31\uFC1C\uA5A5\033"+
+ "\000\uFC07\uFBEF\uA5A5\004\000\uFF5A\uFF44\uA5A5\022\000\uFD1E\uFD07\uFCF9"+
+ "\uFCE9\uA5A5\011\000\uFBCF\uA5A5\032\000\uFD3F\uFD26\uFC86\uFC6F\uA5A5"+
+ "\021\000\uFF18\000\000\000\uFEC2\uA5A5\006\000\uFDF6\uFDD9\uA5A5\020\000"+
+ "\uFC15\uFBFC\uA5A5\016\000\uFF0D\uFEF6\uA5A5\020\000\uFD61\uFD46\uA5A5"+
+ "\034\000\uFEC7\uFEB2\000\uFE35\uA5A5\007\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\014\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\uA5A50\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$\000"+
+ "\uFB1D\uA5A5\042\000\u0622\uA5A5\037\000\u0623\u0624\u0626\u06C2\u06D3"+
+ "\u06C0\uA5A5\030\000\uFBC7\uFBB0\u0625\uA5A5%\000\u0929\u0931\u0934\uA5A5"+
+ " \000\u09DC\u09DD\u09DF\uA5A5 \000\u09CB\uA5A5\037\000\u09CC\uA5A5 \000"+
+ "\u0A59\u0A5A\u0A5B\u0A5E\u0A33\u0A36\uA5A5 \000\u0B5C\u0B5D\uA5A5 \000"+
+ "\u0B4B\uA5A5\037\000\u0B48\uA5A5\037\000\u0B4C\uA5A5!\000\u0BCA\u0BCB"+
+ "\uA5A5\035\000\u0B94\u0BCC\uA5A5!\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\uFCF8\uA5A5\015\000\u0F76\u0F78\uA5A52\000\u0F69\uA5A5\005"+
+ "\000\u0FB9\uA5A5\032\000\u0F43\u0F4D\u0F52\u0F57\u0F5C\000\u0F93\u0F9D"+
+ "\u0FA2\u0FA7\u0FAC\000\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"
+ );
+
+ static final char[] actionIndex = Utility.RLEStringToCharArray(
+ "\000\u048E\u1407\u140A\u140E\u1411\u1414\u1417\u141B\u141E\u1421\u1424"+
+ "\u1427\u142B\u142E\u1431\u1434\u1437\u143A\u143D\u1441\u1444\u1447\u144A"+
+ "\u144D\u1451\u1455\u1458\u145B\u145E\u1461\u1464\u1468\u146B\u146E\u1471"+
+ "\u1474\u1477\u147A\u147D\u1480\u1483\u1486\u1489\u148C\u148F\u1492\u1496"+
+ "\u149A\u149D\u14A0\u14A3\u14A6\u14A9\u14AD\u14B0\u14B3\u14B7\u14BA\u14BD"+
+ "\u14C0\u14C3\u14C6\u14C9\u14CD\u14D1\u14D4\u14D7\u14DA\u14DE\u14E1\u14E5"+
+ "\u14E8\u14EB\u14EE\u14F1\u14F4\u14F7\u14FA\u14FE\u1502\u1505\u1508\u150B"+
+ "\u150F\u1513\u1516\u151A\u151E\u1522\u1525\u1529\u152C\u152F\u1533\u1536"+
+ "\u1539\u153D\u1540\u1543\u1546\u154A\u154D\u1550\u1553\u1556\u155A\u155E"+
+ "\u1562\u1566\u156A\u156D\u1570\u1574\u1577\u157B\u157E\u1581\u1584\u1587"+
+ "\u158A\u158D\u1591\u1594\u1597\u159A\u159D\u15A0\u15A4\u15A7\u15AB\u15AF"+
+ "\u15B3\u15B7\u15BA\u15BE\u15C2\u15C5\u15C8\u15CB\u15CE\u15D1\u15D4\u15D7"+
+ "\u15DA\u15DD\u15E0\u15E3\u15E6\u15E9\u15EC\u15F0\u15F3\u15F7\u15FB\u15FF"+
+ "\u1602\u1606\u1609\u160D\u1610\u1613\u1617\u161A\u161D\u1620\u1623\u1626"+
+ "\u1629\u162C\u162F\u1632\u1635\u1638\u163C\u1640\u1643\u1646\u1649\u164C"+
+ "\u164F\u1652\u1655\u1658\u165B\u165E\u1661\u1664\u1667\u166A\u166E\u1672"+
+ "\u1676\u1679\u167C\u167F\u1683\u1686\u1689\u168D\u1690\u1693\u1697\u169B"+
+ "\u169E\u16A1\u16A4\u16A7\u16AA\u16AD\u16B0\u16B4\u16B7\u16BA\u16BD\u16C0"+
+ "\u16C4\u16C8\u16CC\u16CF\u16D2\u16D6\u16D9\u16DC\u16DF\u16E3\u16E6\u16E9"+
+ "\u16ED\u16F1\u16F4\u16F7\u16FB\u16FE\u1701\u1704\u1708\u170B\u170E\u1711"+
+ "\u1715\u1719\u171D\u1720\u1723\u1727\u172A\u172D\u1730\u1733\u1737\u173A"+
+ "\u173D\u1741\u1745\u1748\u174B\u174F\u1752\u1755\u1758\u175B\u175E\u1761"+
+ "\u1765\u1769\u176C\u176F\u1772\u1776\u1779\u177C\u177F\u1783\u1786\u178A"+
+ "\u178E\u1791\u1795\u1798\u179B\u179E\u17A1\u17A4\u17A7\u17AB\u17AE\u17B1"+
+ "\u17B4\u17B7\u17BA\u17BD\u17C0\u17C3\u17C6\u17C9\u17CD\u17D0\u17D3\u17D6"+
+ "\u17D9\u17DC\u17DF\u17E2\u17E6\u17E9\u17ED\u17F0\u17F3\u17F6\u17F9\u17FC"+
+ "\u17FF\u1802\u1805\u1808\u180B\u180E\u1811\u1815\u1818\u181B\u181E\u1821"+
+ "\u1824\u1827\u182A\u182D\u1831\u1835\u1838\u183B\u183E\u1841\u1844\u1847"+
+ "\u184B\u184E\u1851\u1854\u1857\u185A\u185D\u1860\u1863\u1866\u186A\u186E"+
+ "\u1871\u1874\u1877\u187A\u187D\u1880\u1883\u1886\u1889\u188C\u1890\u1893"+
+ "\u1896\u1899\u189C\u189F\u18A2\u18A5\u18A8\u18AB\u18AE\u18B1\u18B4\u18B8"+
+ "\u18BB\u18BF\u18C2\u18C5\u18C8\u18CB\u18CE\u18D1\u18D4\u18D7\u18DA\u18DD"+
+ "\u18E0\u18E3\u18E6\u18E9\u18EC\u18EF\u18F3\u18F6\u18F9\u18FC\u18FF\u1902"+
+ "\u1905\u1908\u190B\u190E\u1911\u1914\u1918\u191B\u191F\u1922\u1925\u1928"+
+ "\u192B\u192F\u1932\u1935\u1938\u193C\u1940\u1943\u1946\u1949\u194C\u194F"+
+ "\u1952\u1956\u1959\u195C\u195F\u1962\u1965\u1968\u196B\u196E\u1971\u1974"+
+ "\u1977\u197B\u197F\u1982\u1985\u1988\u198C\u198F\u1992\u1995\u1999\u199D"+
+ "\u19A0\u19A3\u19A7\u19AA\u19AD\u19B0\u19B3\u19B6\u19B9\u19BC\u19C0\u19C4"+
+ "\u19C7\u19CA\u19CE\u19D1\u19D5\u19D9\u19DC\u19DF\u19E3\u19E6\u19E9\u19EC"+
+ "\u19EF\u19F3\u19F6\u19FA\u19FD\u1A00\u1A04\u1A08\u1A0C\u1A0F\u1A12\u1A15"+
+ "\u1A19\u1A1C\u1A1F\u1A22\u1A25\u1A28\u1A2B\u1A2E\u1A31\u1A34\u1A37\u1A3A"+
+ "\u1A3D\u1A40\u1A43\u1A47\u1A4A\u1A4D\u1A51\u1A54\u1A58\u1A5B\u1A5E\u1A62"+
+ "\u1A66\u1A69\u1A6C\u1A6F\u1A72\u1A75\u1A79\u1A7C\u1A80\u1A84\u1A87\u1A8A"+
+ "\u1A8D\u1A90\u1A94\u1A98\u1A9B\u1A9E\u1AA2\u1AA5\u1AA8\u1AAC\u1AAF\u1AB2"+
+ "\u1AB6\u1ABA\u1ABD\u1AC0\u1AC3\u1AC7\u1ACB\u1ACE\u1AD2\u1AD5\u1AD8\u1ADB"+
+ "\u1ADE\u1AE2\u1AE6\u1AE9\u1AEC\u1AEF\u1AF2\u1AF5\u1AF8\u1AFB\u1AFF\u1B02"+
+ "\u1B05\u1B08\u1B0C\u1B10\u1B13\u1B16\u1B19\u1B1C\u1B20\u1B23\u1B26\u1B29"+
+ "\u1B2D\u1B30\u1B34\u1B37\u1B3A\u1B3D\u1B40\u1B44\u1B48\u1B4B\u1B4E\u1B51"+
+ "\u1B54\u1B57\u1B5B\u1B5E\u1B61\u1B65\u1B69\u1B6C\u1B6F\u1B72\u1B75\u1B78"+
+ "\u1B7C\u1B7F\u1B82\u1B85\u1B89\u1B8D\u1B90\u1B93\u1B96\u1B99\u1B9D\u1BA1"+
+ "\u1BA4\u1BA7\u1BAA\u1BAD\u1BB0\u1BB3\u1BB7\u1BBA\u1BBD\u1BC0\u1BC4\u1BC8"+
+ "\u1BCB\u1BCE\u1BD1\u1BD4\u1BD7\u1BDA\u1BDE\u1BE1\u1BE4\u1BE8\u1BEC\u1BEF"+
+ "\u1BF2\u1BF6\u1BF9\u1BFD\u1C01\u1C04\u1C07\u1C0A\u1C0D\u1C10\u1C14\u1C17"+
+ "\u1C1A\u1C1E\u1C22\u1C25\u1C28\u1C2B\u1C2E\u1C32\u1C35\u1C39\u1C3D\u1C40"+
+ "\u1C43\u1C47\u1C4A\u1C4D\u1C51\u1C55\u1C58\u1C5B\u1C5E\u1C61\u1C64\u1C67"+
+ "\u1C6B\u1C6E\u1C71\u1C75\u1C79\u1C7C\u1C7F\u1C82\u1C86\u1C89\u1C8D\u1C91"+
+ "\u1C94\u1C98\u1C9C\u1C9F\u1CA3\u1CA6\u1CAA\u1CAE\u1CB1\u1CB4\u1CB7\u1CBA"+
+ "\u1CBD\u1CC0\u1CC3\u1CC6\u1CCA\u1CCD\u1CD0\u1CD4\u1CD8\u1CDB\u1CDE\u1CE1"+
+ "\u1CE5\u1CE8\u1CEC\u1CF0\u1CF3\u1CF7\u1CFB\u1CFE\u1D01\u1D05\u1D08\u1D0B"+
+ "\u1D0F\u1D12\u1D15\u1D18\u1D1B\u1D1E\u1D21\u1D24\u1D27\u1D2A\u1D2D\u1D30"+
+ "\u1D33\u1D36\u1D39\u1D3C\u1D3F\u1D42\u1D45\u1D48\u1D4B\u1D4E\u1D52\u1D56"+
+ "\u1D59\u1D5C\u1D60\u1D63\u1D66\u1D69\u1D6C\u1D6F\u1D72\u1D75\u1D78\u1D7B"+
+ "\u1D7E\u1D81\u1D84\u1D87\u1D8A\u1D8D\u1D90\u1D93\u1D96\u1D99\u1D9C\u1D9F"+
+ "\u1DA2\u1DA5\u1DA8\u1DAB\u1DAF\u1DB3\u1DB7\u1DBA\u1DBE\u1DC1\u1DC4\u1DC7"+
+ "\u1DCA\u1DCD\u1DD1\u1DD4\u1DD7\u1DDA\u1DDD\u1DE0\u1DE3\u1DE7\u1DEA\u1DED"+
+ "\u1DF0\u1DF3\u1DF6\u1DF9\u1DFC\u1DFF\u1E02\u1E05\u1E08\u1E0B\u1E0F\u1E12"+
+ "\u1E15\u1E18\u1E1B\u1E1E\u1E21\u1E25\u1E28\u1E2B\u1E2E\u1E31\u1E34\u1E37"+
+ "\u1E3B\u1E3E\u1E41\u1E44\u1E47\u1E4A\u1E4D\u1E50\u1E53\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"+
+ "\u1F37\u1F3A\u1F3D\u1F40\u1F43\u1F46\u1F49\u1F4C\u1F4F\u1F52\u1F55\u1F58"+
+ "\u1F5B\u1F5E\u1F61\u1F64\u1F68\u1F6C\u1F6F\u1F72\u1F75\u1F78\u1F7B\u1F7E"+
+ "\u1F81\u1F84\u1F87\u1F8B\u1F8E\u1F91\u1F95\u1F99\u1F9C\u1F9F\u1FA2\u1FA5"+
+ "\u1FA8\u1FAB\u1FAE\u1FB1\u1FB4\u1FB7\u1FBA\u1FBD\u1FC1\u1FC4\u1FC8\u1FCC"+
+ "\u1FCF\u1FD2\u1FD5\u1FD9\u1FDD\u1FE0\u1FE3\u1FE6\u1FE9\u1FEC\u1FEF\u1FF2"+
+ "\u1FF5\u1FF8\u1FFB\u1FFE\u2001\u2005\u2008\u200B\u200E\u2012\u2015\u2018"+
+ "\u201B\u201F\u2023\u2026\u2029\u202C\u202F\u2032\u2035\u2038\u203B\u203E"+
+ "\u2041\u2044\u2047\u204B\u204E\u2051\u2054\u2058\u205B\u205E\u2062\u2066"+
+ "\u2069\u206C\u206F\u2072\u2075\u2078\u207B\u207E\u2081\u2084\u2087\u208B"+
+ "\u208E\u2091\u2095\u2098\u209C\u209F\u20A2\u20A6\u20AA\u20AE\u20B1\u20B4"+
+ "\u20B7\u20BB\u20BE\u20C1\u20C4\u20C7\u20CA\u20CD\u20D1\u20D4\u20D7\u20DB"+
+ "\u20DE\u20E2\u20E5\u20E8\u20EB\u20EE\u20F2\u20F6\u20FA\u20FD\u2100\u2104"+
+ "\u2107\u210B\u210F\u2112\u2116\u2119\u211C\u211F\u2122\u2125\u2129\u212C"+
+ "\u212F\u2133\u2136\u2139\u213C\u2140\u2144\u2147\u214A\u214E\u2151\u2154"+
+ "\u2157\u215B\u215E\u2162\u2165\u2168\u216B\u216F\u2172\u2176\u2179\u217C"+
+ "\u217F\u2182\u2186\u2189\u218D\u2190\u2193\u2196\u2199\u219C\u219F\u21A2"+
+ "\u21A5\u21A8\u21AB\u21AF\u21B2\u21B6\u21B9\u21BD\u21C0\u21C3\u21C7\u21CB"+
+ "\u21CE\u21D2\u21D5\u21D8\u21DB\u21DE\u21E1\u21E4\u21E7\u21EA\u21ED\u21F0"+
+ "\u21F3\u21F6\u21F9\u21FC\u21FF\u2203\u2206\u2209\u220D\u2210\u2213\u2216"+
+ "\u2219\u221C\u221F\u2222\u2225\u2229\u222C\u222F\u2232\u2236\u2239\u223C"+
+ "\u223F\u2243\u2247\u224A\u224D\u2250\u2253\u2256\u225A\u225E\u2261\u2264"+
+ "\u2267\u226A\u226E\u2271\u2274\u2278\u227B\u227E\u2282\u2286\u2289\u228C"+
+ "\u228F\u2292\u2296\u2299\u229D\u22A0\u22A3\u22A7\u22AA\u22AD\u22B0\u22B3"+
+ "\u22B6\u22BA\u22BD\u22C0"
+ );
+
+ 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\u0F71\u0F72\000\u0F71\u0F74"+
+ "\000\u0F71\u0F80\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\u1EB8\u0309\000\u01A1\u0304\u0300\000\u0122\u0301\000\u1ECB\u0301"+
+ "\000\u1E89\u0308\000\u0172\u031B\u0303\000\u01EC\u0300\000\u1EF0\u0303"+
+ "\000\u0123\u0307\000\u1E2D\u0300\000\u1ECC\u0304\u0300\000\u0119\u0323"+
+ "\000\u0229\u0323\000\u1E5F\u0301\000\u012F\u0300\000\u0119\u0330\000\u0229"+
+ "\u0330\000\u01A0\u0304\u0300\000\u1ECB\u0300\000\u0157\u0301\000\u1E5B"+
+ "\u0301\000\u1E88\u0308\000\u0173\u031B\u0309\000\u01EB\u0303\u0308\000"+
+ "\u1EF1\u0309\000\u0122\u0307\000\u0105\u0307\000\u1E1B\u0308\000\u1E01"+
+ "\u0307\000\u1ECD\u0303\u0308\000\u1E19\u0308\000\u1EA1\u0307\000\u0118"+
+ "\u0323\000\u0228\u0323\000\u1E5E\u0301\000\u0119\u0308\000\u0118\u0330"+
+ "\000\u0229\u0308\000\u0228\u0330\000\u1EE1\u0308\000\u1EB9\u0308\000\u0156"+
+ "\u0301\000\u1E5A\u0301\000\u1E89\u0301\000\u0172\u031B\u0309\000\u01EA"+
+ "\u0303\u0308\000\u1EF0\u0309\000\u0123\u0306\000\u0104\u0307\000\u1E1B"+
+ "\u0302\000\u1E00\u0307\000\u1ECC\u0303\u0308\000\u1E19\u0302\000\u1EA0"+
+ "\u0307\000\u0105\u0323\u0306\000\u0119\u0302\000\u0119\u032D\000\u0229"+
+ "\u0302\000\u0229\u032D\000\u1EE0\u0308\000\u1E88\u0301\000\u0173\u031B"+
+ "\u0300\000\u01EB\u0303\u0301\000\u1EF1\u0300\000\u0122\u0306\000\u1E1B"+
+ "\u0301\000\u1ECD\u0303\u0301\000\u1E19\u0301\000\u0104\u0323\u0306\000"+
+ "\u0119\u0301\000\u0118\u032D\000\u0229\u0301\000\u0228\u032D\000\u1EE1"+
+ "\u0301\000\u1EB9\u0301\000\u1E89\u0300\000\u0172\u031B\u0300\000\u01EA"+
+ "\u0303\u0301\000\u1EF0\u0300\000\u0123\u0302\000\u1E1B\u0300\000\u1E1B"+
+ "\u0304\u0301\000\u1ECC\u0303\u0301\000\u1E19\u0300\000\u1E19\u0304\u0301"+
+ "\000\u0105\u0306\u0303\000\u1E01\u0306\u0303\000\u0119\u0300\000\u0119"+
+ "\u0304\u0301\000\u0229\u0300\000\u1EB7\u0303\000\u0229\u0304\u0301\000"+
+ "\u1EE0\u0301\000\u1EB9\u0300\000\u1EB9\u0304\u0301\000\u01EB\u030B\000"+
+ "\u1ECD\u030B\000\u1E88\u0300\000\u0173\u031B\u0301\000\u0122\u0302\000"+
+ "\u01A1\u030B\000\u1EF1\u0301\000\u0146\u032D\000\u1E1A\u0304\u0301\000"+
+ "\u1E18\u0304\u0301\000\u0104\u0306\u0303\000\u1E00\u0306\u0303\000\u0118"+
+ "\u0304\u0301\000\u1EB6\u0303\000\u1FB8\u0345\000\u0228\u0304\u0301\000"+
+ "\u1FB9\u0345\000\u1EB8\u0304\u0301\000\u0386\u0345\000\u01EA\u030B\000"+
+ "\u1FBA\u0345\000\u1E1B\u030C\000\u1ECC\u030B\000\u1E19\u030C\000\u0172"+
+ "\u031B\u0301\000\u0119\u030C\000\u0229\u030C\000\u01A0\u030B\000\u1EF0"+
+ "\u0301\000\u0145\u032D\000\u1E1B\u0304\u0300\000\u1EB9\u030C\000\u1E19"+
+ "\u0304\u0300\000\u0105\u0306\u0309\000\u1E01\u0306\u0309\000\u0119\u0304"+
+ "\u0300\000\u1EB7\u0309\000\u0229\u0304\u0300\000\u1EB9\u0304\u0300\000"+
+ "\u1E75\u0309\000\u01EB\u0306\000\u1E77\u0309\000\u1E1A\u030C\000\u1ECD"+
+ "\u0306\000\u1E18\u030C\000\u0173\u0309\000\u0118\u030C\000\u1E73\u0309"+
+ "\000\u0228\u030C\000\u01A1\u0306\000\u1EE5\u0309\000\u0146\u0331\000\u0625"+
+ "\u0654\000\u1E1A\u0304\u0300\000\u1EB8\u030C\000\u1E18\u0304\u0300\000"+
+ "\u0104\u0306\u0309\000\u1E00\u0306\u0309\000\u0105\u030A\000\u0118\u0304"+
+ "\u0300\000\u1EB6\u0309\000\u0228\u0304\u0300\000\u1E01\u030A\000\u1EA1"+
+ "\u030A\000\u1EB8\u0304\u0300\000\u1E74\u0309\000\u01EA\u0306\000\u1E76"+
+ "\u0309\000\u1ECC\u0306\000\u1E7F\u0303\000\u0172\u0309\000\u1E72\u0309"+
+ "\000\u01A0\u0306\000\u1EE4\u0309\000\u0145\u0331\000\u0625\u0653\000\u0105"+
+ "\u0306\u0300\000\u1E01\u0306\u0300\000\u0105\u0308\000\u1EB7\u0300\000"+
+ "\u1E11\u032D\000\u1E01\u0308\000\u1EA1\u0308\000\u1E96\u030C\000\u1ECD"+
+ "\u0304\000\u1E7E\u0303\000\u1E2B\u030C\000\u0173\u0323\000\u01A1\u0304"+
+ "\000\u0146\u0323\000\u1E29\u030C\000\u1E25\u030C\000\u0104\u0306\u0300"+
+ "\000\u1E00\u0306\u0300\000\u1E75\u0304\u0308\000\u0105\u0303\000\u1EB6"+
+ "\u0300\000\u1E10\u032D\000\u1E77\u0304\u0308\000\u1E01\u0303\000\u1EA1"+
+ "\u0303\000\u0173\u0304\u0308\000\u1E1B\u0307\000\u1ECC\u0304\000\u1E73"+
+ "\u0304\u0308\000\u1EE5\u0304\u0308\000\u1E19\u0307\000\u1E2A\u030C\000"+
+ "\u0172\u0323\000\u0119\u0307\000\u0229\u0307\000\u01A0\u0304\000\u0145"+
+ "\u0323\000\u01B0\u0304\u0308\000\u1E28\u030C\000\u1E35\u030C\000\u1EB9"+
+ "\u0307\000\u1E24\u030C\000\u0105\u0306\u0301\000\u1E01\u0306\u0301\000"+
+ "\u1E74\u0304\u0308\000\u0105\u0302\000\u1EB7\u0301\000\u1E76\u0304\u0308"+
+ "\000\u1E01\u0302\000\u0137\u030C\000\u1E33\u030C\000\u0172\u0304\u0308"+
+ "\000\u1E49\u0307\000\u1E1A\u0307\000\u1E72\u0304\u0308\000\u1EE4\u0304"+
+ "\u0308\000\u1E18\u0307\000\u1E4B\u0307\000\u01EB\u031B\u0323\000\u0118"+
+ "\u0307\000\u0228\u0307\000\u0146\u0307\000\u01AF\u0304\u0308\000\u1E34"+
+ "\u030C\000\u1EB8\u0307\000\u1E47\u0307\000\u0104\u0306\u0301\000\u1E00"+
+ "\u0306\u0301\000\u1E75\u0303\u0301\000\u0105\u0301\000\u1EB6\u0301\000"+
+ "\u1E77\u0303\u0301\000\u1E01\u0301\000\u0136\u030C\000\u1EA1\u0301\000"+
+ "\u1E32\u030C\000\u0173\u0303\u0301\000\u1E48\u0307\000\u1E1B\u0306\000"+
+ "\u1E73\u0303\u0301\000\u1EE5\u0303\u0301\000\u1E19\u0306\000\u1E4A\u0307"+
+ "\000\u01EA\u031B\u0323\000\u1E95\u030C\000\u0119\u0306\000\u0145\u0307"+
+ "\000\u1EEF\u0301\000\u1EB9\u0306\000\u1E46\u0307\000\u0105\u0323\u0302"+
+ "\000\u1E74\u0303\u0301\000\u0105\u0300\000\u1E93\u030C\000\u1E11\u0331"+
+ "\000\u1E76\u0303\u0301\000\u1E01\u0300\000\u0123\u030C\000\u1EA1\u0300"+
+ "\000\u0172\u0303\u0301\000\u1E1A\u0306\000\u1E72\u0303\u0301\000\u1EE4"+
+ "\u0303\u0301\000\u1E18\u0306\000\u01EB\u031B\u0303\000\u1E94\u030C\000"+
+ "\u0118\u0306\000\u1EE3\u0303\000\u1EEE\u0301\000\u0163\u0326\000\u1EB8"+
+ "\u0306\000\u0104\u0323\u0302\000\u1E49\u030C\000\u1E92\u030C\000\u1E4B"+
+ "\u030C\000\u1E10\u0331\000\u0122\u030C\000\u0173\u032D\000\u0146\u030C"+
+ "\000\u1E1B\u0304\000\u1E47\u030C\000\u1E19\u0304\000\u01EA\u031B\u0303"+
+ "\000\u1E95\u0307\000\u0119\u0304\000\u0229\u0304\000\u1EE2\u0303\000\u01B0"+
+ "\u032D\000\u0162\u0326\000\u1EB9\u0304\000\u0105\u0302\u0303\000\u1E48"+
+ "\u030C\000\u1E01\u0302\u0303\000\u1E93\u0307\000\u1EAD\u0303\000\u1FB0"+
+ "\u0345\000\u1E4A\u030C\000\u1E11\u0323\000\u1FB1\u0345\000\u0172\u032D"+
+ "\000\u0145\u030C\000\u1E1A\u0304\000\u1E46\u030C\000\u1E18\u0304\000\u0173"+
+ "\u031B\000\u01EB\u031B\u0309\000\u1E94\u0307\000\u0118\u0304\000\u0228"+
+ "\u0304\000\u1EE3\u0309\000\u01AF\u032D\000\u015F\u0326\000\u1EB8\u0304"+
+ "\000\u1E43\u0307\000\u0104\u0302\u0303\000\u1E00\u0302\u0303\000\u1E92"+
+ "\u0307\000\u1EAC\u0303\000\u1E10\u0323\000\u1EF4\u0301\000\u0173\u0330"+
+ "\000\u0172\u031B\000\u01EA\u031B\u0309\000\u1E95\u0301\000\u1EE2\u0309"+
+ "\000\u01B0\u0330\000\u015E\u0326\000\u1E0F\u0307\000\u1E74\u0308\000\u1E42"+
+ "\u0307\000\u1E76\u0308\000\u1E13\u0307\000\u0105\u0302\u0309\000\u1E01"+
+ "\u0302\u0309\000\u0172\u0308\000\u1E93\u0301\000\u1EAD\u0309\000\u1E11"+
+ "\u0307\000\u1E72\u0308\000\u1EE4\u0308\000\u1E0D\u0307\000\u0172\u0330"+
+ "\000\u1E75\u0311\000\u01AF\u0308\000\u01EB\u031B\u0300\000\u1E77\u0311"+
+ "\000\u1E94\u0301\000\u1EE3\u0300\000\u0173\u0311\000\u01AF\u0330\000\u1E0E"+
+ "\u0307\000\u1E74\u0302\000\u1E73\u0311\000\u1E43\u0301\000\u1E76\u0302"+
+ "\000\u1EE5\u0311\000\u1E12\u0307\000\u0104\u0302\u0309\000\u1E49\u0301"+
+ "\000\u1E00\u0302\u0309\000\u0172\u0302\000\u1E92\u0301\000\u1EAC\u0309"+
+ "\000\u1E4B\u0301\000\u1E10\u0307\000\u01B0\u0311\000\u1E72\u0302\000\u1EE4"+
+ "\u0302\000\u1E0C\u0307\000\u0173\u0324\000\u0146\u0301\000\u1E0F\u030C"+
+ "\000\u1E47\u0301\000\u1E74\u0311\000\u01AF\u0302\000\u1E13\u030C\000\u01EA"+
+ "\u031B\u0300\000\u1E76\u0311\000\u1E11\u030C\000\u1EE2\u0300\000\u0172"+
+ "\u0311\000\u01B0\u0324\000\u1E74\u0301\000\u1E0D\u030C\000\u1E72\u0311"+
+ "\000\u1E42\u0301\000\u1E76\u0301\000\u1EE4\u0311\000\u0105\u0302\u0300"+
+ "\000\u1E48\u0301\000\u1E01\u0302\u0300\000\u0172\u0301\000\u1EF4\u0308"+
+ "\000\u1EAD\u0300\000\u1E4A\u0301\000\u0105\u0307\u0304\000\u01AF\u0311"+
+ "\000\u1E72\u0301\000\u1EE4\u0301\000\u1E01\u0307\u0304\000\u1EA1\u0307"+
+ "\u0304\000\u0172\u0324\000\u0145\u0301\000\u1E0E\u030C\000\u1E46\u0301"+
+ "\000\u1E75\u030F\000\u1E12\u030C\000\u01EB\u031B\u0301\000\u1E77\u030F"+
+ "\000\u1E10\u030C\000\u1EE3\u0301\000\u0173\u030F\000\u013C\u032D\000\u01AF"+
+ "\u0324\000\u1E74\u0300\000\u1E0C\u030C\000\u1E73\u030F\000\u1E76\u0300"+
+ "\000\u1EE5\u030F\000\u0104\u0302\u0300\000\u1E00\u0302\u0300\000\u0172"+
+ "\u0300\000\u1EF5\u0302\000\u1EAC\u0300\000\u0104\u0307\u0304\000\u01B0"+
+ "\u030F\000\u1E72\u0300\000\u1EE4\u0300\000\u1E00\u0307\u0304\000\u1EA0"+
+ "\u0307\u0304\000\u0163\u032D\000\u1E74\u030F\000\u01EA\u031B\u0301\000"+
+ "\u1E76\u030F\000\u00E7\u030C\000\u1EE2\u0301\000\u0172\u030F\000\u013B"+
+ "\u032D\000\u1E72\u030F\000\u1EE4\u030F\000\u0105\u0302\u0301\000\u1E01"+
+ "\u0302\u0301\000\u1EF4\u0302\000\u1EAD\u0301\000\u0105\u0308\u0304\000"+
+ "\u01AF\u030F\000\u1E01\u0308\u0304\000\u1EA1\u0308\u0304\000\u0162\u032D"+
+ "\000\u1E5F\u0311\000\u01EB\u0323\u0302\000\u00C7\u030C\000\u013C\u0331"+
+ "\000\u0157\u0311\000\u1E5B\u0311\000\u0104\u0302\u0301\000\u1EE3\u0302"+
+ "\000\u1E00\u0302\u0301\000\u1E89\u0302\000\u1EAC\u0301\000\u0104\u0308"+
+ "\u0304\000\u1E00\u0308\u0304\000\u1EA0\u0308\u0304\000\u0163\u0331\000"+
+ "\u0DDE\u0DCA\000\u1E5E\u0311\000\u01EA\u0323\u0302\000\u00E7\u0307\000"+
+ "\u013B\u0331\000\u0156\u0311\000\u1E5A\u0311\000\u0105\u0309\000\u1EE2"+
+ "\u0302\000\u1E01\u0309\000\u01EA\u0308\000\u1E88\u0302\000\u1EA1\u0309"+
+ "\000\u1ECC\u0308\000\u0162\u0331\000\u1E5F\u030F\000\u01A0\u0308\000\u01EB"+
+ "\u0302\u0303\000\u00C7\u0307\000\u1ED9\u0303\000\u013C\u0323\u0304\000"+
+ "\u0157\u030F\000\u1E75\u0308\u0300\000\u1E5B\u030F\000\u0104\u0309\000"+
+ "\u1E77\u0308\u0300\000\u01A1\u0302\u0303\000\u1E3B\u030C\000\u1E00\u0309"+
+ "\000\u01EA\u0303\000\u1EA0\u0309\000\u1E3D\u030C\000\u0173\u0308\u0300"+
+ "\000\u1ECC\u0303\000\u1E73\u0308\u0300\000\u1EE5\u0308\u0300\000\u013C"+
+ "\u030C\000\u0163\u0323\000\u1E5E\u030F\000\u1E37\u030C\000\u01EA\u0302"+
+ "\u0303\000\u01B0\u0308\u0300\000\u00E7\u0302\000\u1ED8\u0303\000\u013B"+
+ "\u0323\u0304\000\u0156\u030F\000\u1E07\u0307\000\u1E74\u0308\u0300\000"+
+ "\u1E5A\u030F\000\u0105\u0323\000\u1E76\u0308\u0300\000\u01A0\u0302\u0303"+
+ "\000\u1E3A\u030C\000\u01EA\u0302\000\u1E3C\u030C\000\u0172\u0308\u0300"+
+ "\000\u1E72\u0308\u0300\000\u1E05\u0307\000\u1EE4\u0308\u0300\000\u013B"+
+ "\u030C\000\u0162\u0323\000\u1E36\u030C\000\u01A0\u0302\000\u01EB\u0302"+
+ "\u0309\000\u01AF\u0308\u0300\000\u1E75\u030B\000\u00C7\u0302\000\u1ED9"+
+ "\u0309\000\u1E77\u030B\000\u01EB\u0311\000\u013C\u0323\000\u1E06\u0307"+
+ "\000\u1E75\u0308\u030C\000\u0173\u030B\000\u1ECD\u0311\000\u0104\u0323"+
+ "\000\u1E77\u0308\u030C\000\u01A1\u0302\u0309\000\u1E6F\u0307\000\u1E73"+
+ "\u030B\000\u01EA\u0301\000\u1EE5\u030B\000\u0173\u0308\u030C\000\u1E71"+
+ "\u0307\000\u01A1\u0311\000\u1ECC\u0301\000\u1E73\u0308\u030C\000\u1E04"+
+ "\u0307\000\u1EE5\u0308\u030C\000\u01B0\u030B\000\u0163\u0307\000\u021B"+
+ "\u0307\000\u1E6D\u0307\000\u01EA\u0302\u0309\000\u01B0\u0308\u030C\000"+
+ "\u1E74\u030B\000\u1ED8\u0309\000\u1E76\u030B\000\u01EA\u0311\000\u013B"+
+ "\u0323\000\u1E74\u0308\u030C\000\u0172\u030B\000\u1ECC\u0311\000\u1E76"+
+ "\u0308\u030C\000\u01A0\u0302\u0309\000\u1E6E\u0307\000\u1E72\u030B\000"+
+ "\u01EA\u0300\000\u1EE4\u030B\000\u0105\u0325\000\u0172\u0308\u030C\000"+
+ "\u1E70\u0307\000\u01A0\u0311\000\u1ECC\u0300\000\u1E72\u0308\u030C\000"+
+ "\u1EE4\u0308\u030C\000\u01AF\u030B\000\u0162\u0307\000\u021A\u0307\000"+
+ "\u1E6C\u0307\000\u01EB\u0302\u0300\000\u01AF\u0308\u030C\000\u1E75\u030A"+
+ "\000\u1ED9\u0300\000\u1E77\u030A\000\u01EB\u030F\000\u0137\u0331\000\u1E48"+
+ "\u0303\000\u1E75\u0308\u0301\000\u1E4A\u0303\000\u0173\u030A\000\u1ECD"+
+ "\u030F\000\u1E77\u0308\u0301\000\u01A1\u0302\u0300\000\u1E3B\u0301\000"+
+ "\u1E73\u030A\000\u1EE5\u030A\000\u0104\u0325\000\u0145\u0303\000\u1E3D"+
+ "\u0301\000\u0173\u0308\u0301\000\u01A1\u030F\000\u1E46\u0303\000\u1E73"+
+ "\u0308\u0301\000\u1EE5\u0308\u0301\000\u013C\u0301\000\u01B0\u030A\000"+
+ "\u015F\u0323\u0307\000\u1E37\u0301\000\u01EA\u0302\u0300\000\u01B0\u0308"+
+ "\u0301\000\u1E74\u030A\000\u1ED8\u0300\000\u1E76\u030A\000\u01EA\u030F"+
+ "\000\u0136\u0331\000\u1E74\u0308\u0301\000\u0172\u030A\000\u1ECC\u030F"+
+ "\000\u1E76\u0308\u0301\000\u01A0\u0302\u0300\000\u1E3A\u0301\000\u1E72"+
+ "\u030A\000\u1EE4\u030A\000\u1E3C\u0301\000\u0172\u0308\u0301\000\u01A0"+
+ "\u030F\000\u1E72\u0308\u0301\000\u1EE4\u0308\u0301\000\u013B\u0301\000"+
+ "\u01AF\u030A\000\u015E\u0323\u0307\000\u1E36\u0301\000\u1E2D\u0311\000"+
+ "\u01EB\u0302\u0301\000\u01AF\u0308\u0301\000\u1E75\u0306\000\u1ED9\u0301"+
+ "\000\u1E77\u0306\000\u012F\u0311\000\u0137\u0323\000\u1E2C\u0308\000\u1E75"+
+ "\u0308\u0304\000\u0173\u0306\000\u1ECB\u0311\000\u1E77\u0308\u0304\000"+
+ "\u01A1\u0302\u0301\000\u1E73\u0306\000\u012E\u0308\000\u1EE5\u0306\000"+
+ "\u0173\u0308\u0304\000\u1ECA\u0308\000\u1E73\u0308\u0304\000\u1EE5\u0308"+
+ "\u0304\000\u01B0\u0306\000\u015F\u030C\u0307\000\u0219\u030C\u0307\000"+
+ "\u1E2C\u0311\000\u1E63\u030C\u0307\000\u01EB\u031B\000\u01EA\u0302\u0301"+
+ "\000\u01B0\u0308\u0304\000\u1E74\u0306\000\u0105\u0306\000\u1ED8\u0301"+
+ "\000\u1E76\u0306\000\u012E\u0311\000\u0136\u0323\000\u1E01\u0306\000\u1E2C"+
+ "\u0302\000\u1E74\u0308\u0304\000\u0172\u0306\000\u1ECA\u0311\000\u1E76"+
+ "\u0308\u0304\000\u01A0\u0302\u0301\000\u1E72\u0306\000\u012E\u0302\000"+
+ "\u1EE4\u0306\000\u0172\u0308\u0304\000\u1ECA\u0302\000\u1E72\u0308\u0304"+
+ "\000\u1EE4\u0308\u0304\000\u01AF\u0306\000\u015E\u030C\u0307\000\u0218"+
+ "\u030C\u0307\000\u1E35\u0301\000\u1E2D\u030F\000\u1E62\u030C\u0307\000"+
+ "\u01EA\u031B\000\u01EB\u0309\000\u01AF\u0308\u0304\000\u1E75\u0304\000"+
+ "\u0104\u0306\000\u1ECD\u0309\000\u1E77\u0304\000\u012F\u030F\000\u0137"+
+ "\u0301\000\u1E00\u0306\000\u1E2C\u0301\000\u1E75\u030C\000\u1E33\u0301"+
+ "\000\u0173\u0304\000\u1ECB\u030F\000\u1E77\u030C\000\u1E73\u0304\000\u012E"+
+ "\u0301\000\u1EE5\u0304\000\u0173\u030C\000\u1ECA\u0301\000\u1E73\u030C"+
+ "\000\u1EE5\u030C\000\u01B0\u0304\000\u015F\u0301\u0307\000\u0219\u0301"+
+ "\u0307\000\u1E34\u0301\000\u1E2C\u030F\000\u1E63\u0301\u0307\000\u01EA"+
+ "\u0309\000\u01B0\u030C\000\u1E74\u0304\000\u0105\u0304\000\u1ECC\u0309"+
+ "\000\u1E76\u0304\000\u012E\u030F\000\u0136\u0301\000\u1E01\u0304\000\u1E2C"+
+ "\u0300\000\u1EA1\u0304\000\u1E74\u030C\000\u1E32\u0301\000\u0172\u0304"+
+ "\000\u1ECA\u030F\000\u1E76\u030C\000\u1E72\u0304\000\u012E\u0300\000\u1EE4"+
+ "\u0304\000\u1EF5\u030A\000\u0172\u030C\000\u1ECA\u0300\000\u1E72\u030C"+
+ "\000\u1EE4\u030C\000\u01AF\u0304\000\u015E\u0301\u0307\000\u0218\u0301"+
+ "\u0307\000\u1E2D\u0308\u0301\000\u1E1B\u0311\000\u1E62\u0301\u0307\000"+
+ "\u01EB\u0323\000\u01AF\u030C\000\u1E19\u0311\000\u1E75\u0303\000\u0104"+
+ "\u0304\000\u012F\u0308\u0301\000\u1E77\u0303\000\u0119\u0311\000\u1E00"+
+ "\u0304\000\u0229\u0311\000\u1E1A\u0308\000\u1EA0\u0304\000\u1ECB\u0308"+
+ "\u0301\000\u1E18\u0308\000\u0173\u0303\000\u1EB9\u0311\000\u1E73\u0303"+
+ "\000\u0118\u0308\000\u1EE5\u0303\000\u0228\u0308\000\u1E89\u030A\000\u01EB"+
+ "\u030C\000\u1EB8\u0308\000\u1ECD\u030C\000\u015F\u0323\000\u1E2C\u0308"+
+ "\u0301\000\u1E1A\u0311\000\u01EA\u0323\000\u01A1\u030C\000\u1E18\u0311"+
+ "\000\u1E6F\u0308\000\u1E74\u0303\000\u012E\u0308\u0301\000\u1E76\u0303"+
+ "\000\u0118\u0311\000\u1E71\u0308\000\u0228\u0311\000\u1E1A\u0302\000\u1EF5"+
+ "\u0308\000\u1ECA\u0308\u0301\000\u1E18\u0302\000\u0172\u0303\000\u1EB8"+
+ "\u0311\000\u0163\u0308\000\u021B\u0308\000\u1E72\u0303\000\u0118\u0302"+
+ "\000\u1EE4\u0303\000\u0228\u0302\000\u1E6D\u0308\000\u01EA\u030C\000\u1ECC"+
+ "\u030C\000\u015E\u0323\000\u1E1B\u030F\000\u012F\u0323\000\u01A0\u030C"+
+ "\000\u1E19\u030F\000\u012F\u0330\000\u0119\u030F\000\u0229\u030F\000\u1E1A"+
+ "\u0301\000\u1E2D\u030C\000\u1E18\u0301\000\u1EB9\u030F\000\u1E29\u0331"+
+ "\000\u0118\u0301\000\u0228\u0301\000\u012F\u030C\000\u1EB8\u0301\000\u1ECB"+
+ "\u030C\000\u015F\u0307\000\u0219\u0307\000\u1E1A\u030F\000\u012E\u0323"+
+ "\000\u1E18\u030F\000\u012E\u0330\000\u0118\u030F\000\u0228\u030F\000\u1E1A"+
+ "\u0300\000\u1EF5\u0301\000\u1E2C\u030C\000\u1E18\u0300\000\u1EB8\u030F"+
+ "\000\u0118\u0300\000\u0228\u0300\000\u012E\u030C\000\u1EB8\u0300\000\u1E2D"+
+ "\u0309\000\u1ECA\u030C\000\u015E\u0307\000\u0218\u0307\000\u1E75\u0308"+
+ "\000\u1E77\u0308\000\u012F\u0309\000\u1E6F\u030C\000\u0173\u0308\000\u1ECB"+
+ "\u0309\000\u1E71\u030C\000\u0105\u0311\000\u1E29\u032E\000\u1E73\u0308"+
+ "\000\u1EE5\u0308\000\u1E01\u0311\000\u1EA1\u0311\000\u0163\u030C\000\u021B"+
+ "\u030C\000\u1E2C\u0307\000\u1E6D\u030C\000\u01B0\u0308\000\u0105\u030C"+
+ "\000\u1E01\u030C\000\u1E2C\u0309\000\u012E\u0307\000\u1EA1\u030C\000\u0157"+
+ "\u0331\000\u1E75\u0302\000\u1ECA\u0307\000\u1E77\u0302\000\u012E\u0309"+
+ "\000\u1E6E\u030C\000\u0173\u0302\000\u1ECA\u0309\000\u1E70\u030C\000\u0104"+
+ "\u0311\000\u1E28\u032E\000\u1E73\u0302\000\u1EE5\u0302\000\u1E00\u0311"+
+ "\000\u1EA0\u0311\000\u0162\u030C\000\u021A\u030C\000\u1E6C\u030C\000\u01B0"+
+ "\u0302\000\u0104\u030C\000\u1E00\u030C\000\u1EA0\u030C\000\u0156\u0331"+
+ "\000\u1E75\u0301\000\u1E77\u0301\000\u0119\u0323\u0302\000\u0229\u0323"+
+ "\u0302\000\u0173\u0301\000\u0105\u030F\000\u1E73\u0301\000\u1EE5\u0301"+
+ "\000\u1E01\u030F\000\u1EA1\u030F\000\u0104\u030A\000\u1E00\u030A\000\u1EA0"+
+ "\u030A\000\u0157\u0323\u0304\000\u1E75\u0300\000\u1E77\u0300\000\u0118"+
+ "\u0323\u0302\000\u0228\u0323\u0302\000\u1E95\u0302\000\u0173\u0300\000"+
+ "\u0104\u030F\000\u1E73\u0300\000\u1EE5\u0300\000\u1E00\u030F\000\u1EA0"+
+ "\u030F\000\u1E2D\u0306\000\u0104\u0308\000\u1E93\u0302\000\u1E00\u0308"+
+ "\000\u1EA0\u0308\000\u1E1B\u0302\u0303\000\u012F\u0306\000\u0156\u0323"+
+ "\u0304\000\u1E19\u0302\u0303\000\u1E96\u0308\000\u1ECB\u0306\000\u1E2B"+
+ "\u0308\000\u0119\u0302\u0303\000\u0229\u0302\u0303\000\u1E94\u0302\000"+
+ "\u1EC7\u0303\000\u1E29\u0308\000\u1E25\u0308\000\u015F\u030C\000\u0219"+
+ "\u030C\000\u1E2C\u0306\000\u0104\u0303\000\u1E63\u030C\000\u1E92\u0302"+
+ "\000\u1E00\u0303\000\u1EA0\u0303\000\u1E1A\u0302\u0303\000\u012E\u0306"+
+ "\000\u1EF5\u0303\000\u0157\u0323\000\u1E18\u0302\u0303\000\u1ECA\u0306"+
+ "\000\u1E2A\u0308\000\u1EF5\u0304\000\u0118\u0302\u0303\000\u0228\u0302"+
+ "\u0303\000\u1EC6\u0303\000\u1E28\u0308\000\u1E24\u0308\000\u0389\u0345"+
+ "\000\u1FCA\u0345\000\u015E\u030C\000\u0218\u030C\000\u1E2D\u0304\000\u0104"+
+ "\u0302\000\u1E62\u030C\000\u1EF5\u0307\000\u1E00\u0302\000\u1E1B\u0302"+
+ "\u0309\000\u012F\u0304\000\u1EF4\u0303\000\u0156\u0323\000\u1E19\u0302"+
+ "\u0309\000\u1ECB\u0304\000\u1EF4\u0304\000\u0119\u0302\u0309\000\u0229"+
+ "\u0302\u0309\000\u01EB\u0308\000\u1EC7\u0309\000\u1E29\u0323\000\u1ECD"+
+ "\u0308\000\u1E5F\u0307\000\u1E2C\u0304\000\u0104\u0301\000\u01A1\u0308"+
+ "\000\u1EF4\u0307\000\u1E00\u0301\000\u1EA0\u0301\000\u1E1A\u0302\u0309"+
+ "\000\u012E\u0304\000\u1EF5\u0309\000\u01EB\u0307\u0304\000\u0157\u0307"+
+ "\000\u1E18\u0302\u0309\000\u1ECA\u0304\000\u1E5B\u0307\000\u1ECD\u0307"+
+ "\u0304\000\u0118\u0302\u0309\000\u0228\u0302\u0309\000\u01EB\u0303\000"+
+ "\u1EC6\u0309\000\u1E28\u0323\000\u01A1\u0307\u0304\000\u1ECD\u0303\000"+
+ "\u1E5E\u0307\000\u1E2D\u0303\000\u0104\u0300\000\u1E00\u0300\000\u1EA0"+
+ "\u0300\000\u1E1B\u0302\u0300\000\u012F\u0303\000\u1EF4\u0309\000\u01EA"+
+ "\u0307\u0304\000\u0156\u0307\000\u1E19\u0302\u0300\000\u1E96\u0307\000"+
+ "\u1ECB\u0303\000\u1E5A\u0307\000\u1E2B\u0307\000\u1ECC\u0307\u0304\000"+
+ "\u0119\u0302\u0300\000\u0229\u0302\u0300\000\u01EB\u0302\000\u1EC7\u0300"+
+ "\000\u0105\u030A\u0301\000\u1E29\u0307\000\u01A0\u0307\u0304\000\u1E01"+
+ "\u030A\u0301\000\u1E25\u0307\000\u1EA1\u030A\u0301\000\u015F\u0302\000"+
+ "\u0219\u0302\000\u1E2C\u0303\000\u1E63\u0302\000\u01A1\u0302\000\u1E1A"+
+ "\u0302\u0300\000\u012E\u0303\000\u01EB\u0307\000\u1E18\u0302\u0300\000"+
+ "\u1ECA\u0303\000\u1E2A\u0307\000\u1ECD\u0307\000\u0118\u0302\u0300\000"+
+ "\u0228\u0302\u0300\000\u01EB\u0301\000\u1EC6\u0300\000\u0104\u030A\u0301"+
+ "\000\u1E28\u0307\000\u01A1\u0307\000\u1ECD\u0301\000\u1E00\u030A\u0301"+
+ "\000\u1E24\u0307\000\u1EA0\u030A\u0301\000\u015E\u0302\000\u0218\u0302"+
+ "\000\u1E62\u0302\000\u1E1B\u0302\u0301\000\u01EA\u0307\000\u1E19\u0302"+
+ "\u0301\000\u1E49\u0300\000\u038F\u0345\000\u1ECC\u0307\000\u1FFA\u0345"+
+ "\000\u0119\u0302\u0301\000\u1E4B\u0300\000\u0229\u0302\u0301\000\u01EB"+
+ "\u0300\000\u1EC7\u0301\000\u0123\u0304\000\u0146\u0300\000\u01A0\u0307"+
+ "\000\u1ECD\u0300\000\u1E47\u0300\000\u015F\u0301\000\u0219\u0301\000\u1E63"+
+ "\u0301\000\u1E1A\u0302\u0301\000\u1EF5\u0300\000\u01EB\u0303\u0304\000"+
+ "\u1E49\u0303\000\u1E18\u0302\u0301\000\u1E48\u0300\000\u1E4B\u0303\000"+
+ "\u1ECD\u0303\u0304\000\u0118\u0302\u0301\000\u1E4A\u0300\000\u0228\u0302"+
+ "\u0301\000\u0146\u0303\000\u1EC6\u0301\000\u0122\u0304\000\u0145\u0300"+
+ "\000\u1EE1\u0304\000\u1E47\u0303\000\u1E46\u0300\000\u015E\u0301\000\u0218"+
+ "\u0301\000\u1E96\u0302\000\u1E62\u0301\000\u1E2B\u0302\000\u1E1B\u0303"+
+ "\000\u1E29\u0302\000\u1EF4\u0300\000\u01EA\u0303\u0304\000\u1E19\u0303"+
+ "\000\u1E25\u0302\000\u1ECC\u0303\u0304\000\u0119\u0303\000\u0229\u0303"+
+ "\000\u1E5F\u030C\000\u1EB9\u0303\000\u1EE0\u0304\000\u0157\u030C\000\u1E5B"+
+ "\u030C\000\u1E2A\u0302\000\u0173\u031B\u0323\000\u1E1A\u0303\000\u01ED"+
+ "\u0301\000\u1E28\u0302\000\u01EB\u0308\u0304\000\u1E18\u0303\000\u1E2D"+
+ "\u0308\000\u1E24\u0302\000\u1ECD\u0304\u0301\000\u1ECD\u0308\u0304\000"+
+ "\u0118\u0303\000\u0228\u0303\000\u1E5E\u030C\000\u012F\u0308\000\u1EB8"+
+ "\u0303\000\u01A1\u0304\u0301\000\u01A1\u0308\u0304\000\u1ECB\u0308\000"+
+ "\u0156\u030C\000\u1E5A\u030C\000\u1E89\u0307\000\u0172\u031B\u0323\000"+
+ "\u1E1B\u0309\000\u01EC\u0301\000\u01EA\u0308\u0304\000\u1E19\u0309\000"+
+ "\u1E2D\u0302\000\u1ECC\u0304\u0301\000\u1ECC\u0308\u0304\000\u0119\u0309"+
+ "\000\u0229\u0309\000\u012F\u0302\000\u1EB9\u0309\000\u01A0\u0304\u0301"+
+ "\000\u0123\u0301\000\u01A0\u0308\u0304\000\u1ECB\u0302\000\u1E88\u0307"+
+ "\000\u0173\u031B\u0303\000\u1E1A\u0309\000\u01ED\u0300\000\u1EF1\u0303"+
+ "\000\u1E18\u0309\000\u1E2D\u0301\000\u1ECD\u0304\u0300\000\u0118\u0309"+
+ "\000\u0228\u0309\000\u012F\u0301\000"
+ ;
+
+ static final int[] typeMask = Utility.RLEStringToIntArray(
+ "\000\u00EA\000\uA5A5\000\021\000\u0800\000\u0200\000\uA5A5\000\004\000"+
+ "\u0400\000\u0100\000\u0100\000\uA5A5\000\004\000\u0400\000\002\000\u0800"+
+ "\000\u1000\000 \000\u0800\000\u0800\000\u0400\000\004\000\004\000\001"+
+ "\000\001\000\004\000\004\000\uA5A5\000\005\000\001\000@\000\uA5A5\000"+
+ "\005\000\001\000\020\000\001\000\001\000\u0080\000\001\000\001\000\001"+
+ "\000\010\000\010\000\uA5A5\000\u00AD\000\000"
+ );
+}
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..c40003c
--- /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/03/10 04:07:19 $
+ * $Revision: 1.8 $
+ *
+ *****************************************************************************************
+ */
+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 © IBM Corporation 1999. All rights reserved.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: CompoundTransliterator.java,v $ $Revision: 1.8 $ $Date: 2000/03/10 04:07:19 $
+ */
+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.cursor;
+ int limit = index.limit;
+ int globalLimit = limit;
+ /* globalLimit is the overall limit. We keep track of this
+ * since we overwrite index.limit with the previous
+ * index.cursor. After each transliteration, we update
+ * globalLimit for insertions or deletions that have happened.
+ */
+
+ for (int i=0; i<trans.length; ++i) {
+ index.cursor = cursor; // Reset cursor
+ index.limit = limit;
+
+ if (DEBUG) {
+ System.out.print(Utility.escape(i + ": \"" +
+ substring(text, index.start, index.cursor) + '|' +
+ substring(text, index.cursor, index.limit) +
+ "\" -> \""));
+ }
+
+ trans[i].handleTransliterate(text, index, incremental);
+
+ if (DEBUG) {
+ System.out.println(Utility.escape(
+ substring(text, index.start, index.cursor) + '|' +
+ substring(text, index.cursor, index.limit) +
+ '"'));
+ }
+
+ // Adjust overall limit for insertions/deletions
+ globalLimit += index.limit - limit;
+ limit = index.cursor; // 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/DateFormatSymbols.java b/src/com/ibm/text/DateFormatSymbols.java
new file mode 100755
index 0000000..902c435
--- /dev/null
+++ b/src/com/ibm/text/DateFormatSymbols.java
@@ -0,0 +1,566 @@
+/*
+ *******************************************************************************
+ * 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: 2000/03/10 04:07:19 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+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 com.ibm.util.Utility;
+
+/**
+ * <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 java.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 java.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)
+ {
+ String[][] zones;
+ SoftReference data = (SoftReference)cachedZoneData.get(desiredLocale);
+ if (data == null || ((zones = (String[][])data.get()) == null)) {
+ 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 java.util.SimpleTimeZone
+ */
+ final 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;
+ }
+
+}
diff --git a/src/com/ibm/text/DecimalFormat.java b/src/com/ibm/text/DecimalFormat.java
new file mode 100755
index 0000000..a6a791b
--- /dev/null
+++ b/src/com/ibm/text/DecimalFormat.java
@@ -0,0 +1,2771 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:07:19 $
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+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 is the one that is
+ * used. So "#,##,###,####" == "######,####" == "##,####,####".
+ *
+ * <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>\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>\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 := '\u0000'..'\uFFFD' - specialCharacters
+ * suffix := '\u0000'..'\uFFFD' - specialCharacters
+ * integer := '#'* '0'* '0'
+ * fraction := '0'* '#'*
+ * exponent := 'E' {'+'} '0'* '0'
+ * padSpec := '*' padChar
+ * padChar := '\u0000'..'\uFFFD' - quote
+ *  
+ * 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>
+ * <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>\u2030<td>Prefix or suffix
+ * <td>Multiply by 1000 and show as per mille</tr>
+ * <tr><td>\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 java.text.NumberFormat
+ * @see java.text.ChoiceFormat
+ * @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 java.text.NumberFormat#getInstance
+ * @see java.text.NumberFormat#getNumberInstance
+ * @see java.text.NumberFormat#getCurrencyInstance
+ * @see java.text.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 java.text.NumberFormat#getInstance
+ * @see java.text.NumberFormat#getNumberInstance
+ * @see java.text.NumberFormat#getCurrencyInstance
+ * @see java.text.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 java.text.NumberFormat#getInstance
+ * @see java.text.NumberFormat#getNumberInstance
+ * @see java.text.NumberFormat#getCurrencyInstance
+ * @see java.text.NumberFormat#getPercentInstance
+ * @see java.text.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);
+ }
+ }
+ */
+
+ /**
+ * 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. Don't output a
+ // grouping separator if i==0 though; that's at the end of
+ // the integer part.
+ if (isGroupingUsed() && i>0 && (groupingSize != 0) && (i % groupingSize == 0))
+ {
+ 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 java.text.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 java.text.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 java.text.NumberFormat#isGroupingUsed
+ * @see java.text.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 java.text.NumberFormat#setGroupingUsed
+ * @see java.text.DecimalFormatSymbols#setGroupingSeparator
+ */
+ public void setGroupingSize (int newValue) {
+ groupingSize = (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
+ && 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 maxIntDig = useExponentialNotation ? getMaximumIntegerDigits() :
+ (Math.max(Math.max(groupingSize, getMinimumIntegerDigits()),
+ roundingDecimalPos) + 1);
+ for (i = maxIntDig; i > 0; --i) {
+ if (isGroupingUsed() && groupingSize != 0
+ && i % groupingSize == 0
+ && i < maxIntDig
+ && !useExponentialNotation) {
+ 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);
+ --add;
+ if (isGroupingUsed() && groupingSize != 0
+ && ++maxIntDig % groupingSize == 0
+ && add > 1) {
+ 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;
+ 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 + '"');
+ }
+ 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 ||
+ 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.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 java.text.NumberFormat#isGroupingUsed
+ */
+ private byte groupingSize = 3; // invariant, > 0 if useThousands
+
+ /**
+ * 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 java.text.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..e75a6b0
--- /dev/null
+++ b/src/com/ibm/text/DecompData.java
@@ -0,0 +1,747 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/DecompData.java,v $
+ * $Date: 2000/03/10 04:07:20 $
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+import com.ibm.util.*;
+// This class is MACHINE GENERATED. Run NormalizerBuilder to regenerate.
+
+
+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..11b7d2a
--- /dev/null
+++ b/src/com/ibm/text/DictionaryBasedBreakIterator.java
@@ -0,0 +1,566 @@
+/*
+ *******************************************************************************
+ * 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: 2000/03/10 04:07:20 $
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+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;
+
+ /**
+ * Constructs a DictionaryBasedBreakIterator.
+ * @param description Same as the description parameter on RuleBasedBreakIterator,
+ * except for the special meaning of "<dictionary>". 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> 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);
+//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) {
+ 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();
+ 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 "<dictionary>" 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",
+ * 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")) {
+ 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);
+ if (dictionaryChars.containsAll(cs)) {
+ 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..f1b0ffc
--- /dev/null
+++ b/src/com/ibm/text/DigitList.java
@@ -0,0 +1,710 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:07:20 $
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+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 java.text.NumberFormat
+ * @see java.text.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);
+ }
+
+ //This has been removed pending addition of com.ibm.math package to ICU4J
+ /*
+ * 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..371145b
--- /dev/null
+++ b/src/com/ibm/text/HangulJamoTransliterator.java
@@ -0,0 +1,86 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:07:20 $
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+import java.util.*;
+
+/**
+ * A transliterator that converts Hangul to Jamo
+ *
+ * <p>Copyright © IBM Corporation 1999. All rights reserved.
+ *
+ * @author Mark Davis
+ * @version $RCSfile: HangulJamoTransliterator.java,v $ $Revision: 1.4 $ $Date: 2000/03/10 04:07:20 $
+ */
+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.cursor;
+ 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.limit = limit;
+ offsets.cursor = 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..05e5ef5
--- /dev/null
+++ b/src/com/ibm/text/HexToUnicodeTransliterator.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/text/Attic/HexToUnicodeTransliterator.java,v $
+ * $Date: 2000/03/10 04:07:20 $
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+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'. It recognizes the
+ * prefixes "U+", "u+", "\U", and "\u". Hex values may be
+ * upper- or lowercase.
+ *
+ * <p>Copyright © IBM Corporation 1999. All rights reserved.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: HexToUnicodeTransliterator.java,v $ $Revision: 1.4 $ $Date: 2000/03/10 04:07:20 $
+ */
+public class HexToUnicodeTransliterator extends Transliterator {
+ private static final String COPYRIGHT =
+ "\u00A9 IBM Corporation 1999. All rights reserved.";
+
+ /**
+ * Package accessible ID for this transliterator.
+ */
+ static String _ID = "Hex-Unicode";
+
+ /**
+ * Constructs a transliterator.
+ */
+ public HexToUnicodeTransliterator() {
+ super(_ID, null);
+ }
+
+ /**
+ * Implements {@link Transliterator#handleTransliterate}.
+ */
+ protected void handleTransliterate(Replaceable text,
+ Position offsets, boolean incremental) {
+ /**
+ * Performs transliteration changing Unicode hexadecimal
+ * escapes to characters. For example, "U+0040" -> '@'. A fixed
+ * set of prefixes is recognized: "\u", "\U", "u+", "U+".
+ */
+ int cursor = offsets.cursor;
+ int limit = offsets.limit;
+
+ int maxCursor = limit - 6;
+ loop:
+ while (cursor <= maxCursor) {
+ char c = filteredCharAt(text, cursor + 5);
+ int digit0 = Character.digit(c, 16);
+ if (digit0 < 0) {
+ if (c == '\\') {
+ cursor += 5;
+ } else if (c == 'U' || c == 'u' || c == '+') {
+ cursor += 4;
+ } else {
+ cursor += 6;
+ }
+ continue;
+ }
+
+ int u = digit0;
+
+ for (int i=4; i>=2; --i) {
+ c = filteredCharAt(text, cursor + i);
+ int digit = Character.digit(c, 16);
+ if (digit < 0) {
+ if (c == 'U' || c == 'u' || c == '+') {
+ cursor += i-1;
+ } else {
+ cursor += 6;
+ }
+ continue loop;
+ }
+ u |= digit << (4 * (5-i));
+ }
+
+ c = filteredCharAt(text, cursor);
+ char d = filteredCharAt(text, cursor + 1);
+ if (((c == 'U' || c == 'u') && d == '+')
+ || (c == '\\' && (d == 'U' || d == 'u'))) {
+
+ // At this point, we have a match; replace cursor..cursor+5
+ // with u.
+ text.replace(cursor, cursor+6, String.valueOf((char) u));
+ limit -= 5;
+ maxCursor -= 5;
+
+ ++cursor;
+ } else {
+ cursor += 6;
+ }
+ }
+
+ offsets.limit = limit;
+ offsets.cursor = cursor;
+ }
+}
diff --git a/src/com/ibm/text/JamoHangulTransliterator.java b/src/com/ibm/text/JamoHangulTransliterator.java
new file mode 100755
index 0000000..d73abd5
--- /dev/null
+++ b/src/com/ibm/text/JamoHangulTransliterator.java
@@ -0,0 +1,134 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:07:20 $
+ * $Revision: 1.5 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+import java.util.*;
+
+/**
+ * A transliterator that converts Jamo to Hangul
+ *
+ * <p>Copyright © 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.cursor;
+ 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;
+ }
+ }
+
+ offsets.limit = limit + 1;
+ offsets.cursor = 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..8698b96
--- /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/03/10 04:07:21 $
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+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.3 $ $Date: 2000/03/10 04:07:21 $
+ */
+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.)
+ */
+ java.text.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 java.text.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 = java.text.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 << 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 <.
+ * @return '<'
+ */
+ char tokenChar() {
+ return '<';
+ }
+}
+
+//===================================================================
+// ModulusSubstitution
+//===================================================================
+
+/**
+ * A substitution that divides the number being formatted by the its rule's
+ * divisor and formats the remainder. Represented by ">>" 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 >>> 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 >>> 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 >>> 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 >>> 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 >.
+ * @return '>'
+ */
+ char tokenChar() {
+ return '>';
+ }
+}
+
+//===================================================================
+// IntegralPartSubstitution
+//===================================================================
+
+/**
+ * A substitution that formats the number's integral part. This is
+ * represented by << 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 <
+ * @return '<'
+ */
+ char tokenChar() {
+ return '<';
+ }
+}
+
+//===================================================================
+// FractionalPartSubstitution
+//===================================================================
+
+/**
+ * A substitution that formats the fractional part of a number. This is
+ * represented by >> 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 = java.text.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 >.
+ * @return '>'
+ */
+ char tokenChar() {
+ return '>';
+ }
+}
+
+//===================================================================
+// AbsoluteValueSubstitution
+//===================================================================
+
+ /**
+ * A substitution that formats the absolute value of the number.
+ * This substition is represented by >> 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 >
+ * @return '>'
+ */
+ 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 << 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 <
+ * @return '<'
+ */
+ 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..a8f212b
--- /dev/null
+++ b/src/com/ibm/text/Normalizer.java
@@ -0,0 +1,1585 @@
+/*
+ *******************************************************************************
+ * 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: 2000/03/10 04:07:21 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+import java.lang.Character;
+import java.text.CharacterIterator;
+import java.text.StringCharacterIterator;
+import com.ibm.util.CompactByteArray;
+
+/**
+ * <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()) {
+ 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 classesSeen = 0; // Combining classes seen since last base
+ 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;
+
+ out("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;
+
+ out("Got char " + hex(ch) + ", type=" + type + ", index=" + index);
+
+ if (type == ComposeData.BASE || type == ComposeData.EXPLODING_BASE && index < minExplode) {
+ classesSeen = 0;
+ baseIndex = index;
+ basePos = result.length();
+ result.append(ch);
+ }
+ else if (type == ComposeData.COMBINING && index > 0)
+ {
+ int cclass = ComposeData.typeMask[index];
+
+ // We can only combine a character with the base if we haven't
+ // already seen a combining character with the same canonical class.
+ if (type == ComposeData.COMBINING && (classesSeen & cclass) == 0
+ && (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;
+ result.setCharAt(basePos, newBase);
+
+ baseIndex = composeLookup(newBase) >>> ComposeData.INDEX_SHIFT;
+ } else {
+ // Normal pairwise combination. Replace the base char
+ char newBase = (char) action;
+ result.setCharAt(basePos, newBase);
+
+ baseIndex = composeLookup(newBase) >>> ComposeData.INDEX_SHIFT;
+ }
+ //
+ // 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);
+ classesSeen = 0;
+ if (explodePos == EMPTY) explodePos = 0;
+ }
+ } else {
+ // No combination with this character
+ bubbleAppend(result, ch, cclass);
+ classesSeen |= cclass;
+ }
+ }
+ else if (index > minExplode) {
+ // Single exploding character
+ explode(explodeBuf, index);
+ explodePos = 0;
+ out("explosion: " + hex(ch) + " --> " + 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);
+ out("decomposed hangul " + hex(ch) + " to jamo " + hex(explodeBuf));
+ explodePos = 0;
+ }
+ else if (type == ComposeData.INITIAL_JAMO) {
+ classesSeen = 0;
+ baseIndex = ComposeData.INITIAL_JAMO_INDEX;
+ basePos = result.length();
+ result.append(ch);
+ out("got initial jamo " + hex(ch));
+ }
+ else if (type == ComposeData.MEDIAL_JAMO && classesSeen == 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);
+
+ out("got medial jamo " + hex(ch) + ", replacing with Hangul " + hex(newCh));
+
+ baseIndex = ComposeData.MEDIAL_JAMO_INDEX;
+ }
+ else if (type == ComposeData.FINAL_JAMO && classesSeen == 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);
+
+ out("got final jamo " + hex(ch) + ", replacing with Hangul " + hex(newCh));
+
+ baseIndex = 0;
+ basePos = -1;
+ classesSeen = 0;
+ } else {
+ baseIndex = 0;
+ basePos = -1;
+ classesSeen = 0;
+ result.append(ch);
+ }
+ }
+ 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 nextCompose()
+ {
+ out("--------------- 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 classesSeen = 0; // Combining classes seen since last base
+ 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.EXPLODING_BASE && 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.
+ out("returning early because we hit a new base");
+ break;
+ }
+ classesSeen = 0;
+ baseIndex = index;
+ basePos = buffer.length();
+ buffer.append(ch);
+ out("got BASE char " + hex(ch) + ", type=" + type + ", index=" + index);
+ lastBase = ch;
+ }
+ else if (type == ComposeData.COMBINING && index > 0)
+ {
+ int cclass = ComposeData.typeMask[index];
+
+ out("got COMBINING char " + hex(ch) + ", type=" + type + ", index=" + index
+ + ", class=" + Integer.toString(cclass,16));
+
+ // We can only combine a character with the base if we haven't
+ // already seen a combining character with the same canonical class.
+ if (type == ComposeData.COMBINING && (classesSeen & cclass) == 0
+ && (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;
+
+ out("Pairwise explosion: " + hex(lastBase) + "," + hex(ch)
+ + " --> " + hex(newBase) + "," + 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;
+
+ out("Pairwise combination: " + hex(lastBase) + "," + hex(ch)
+ + " --> " + 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) {
+ out("Reprocessing combining marks");
+ for (int j = basePos+1; j < len; j++) {
+ explodeBuf.append(buffer.charAt(j));
+ }
+ buffer.setLength(basePos+1);
+ classesSeen = 0;
+ if (explodePos == EMPTY) explodePos = 0;
+ }
+ } else {
+ out("char doesn't combine");
+ // No combination with this character
+ bubbleAppend(buffer, ch, cclass);
+ classesSeen |= cclass;
+ }
+ }
+ else if (index > minExplode) {
+ // Single exploding character
+ explode(explodeBuf, index);
+ explodePos = 0;
+ out("explosion: " + hex(ch) + " --> " + 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);
+ out("decomposed hangul " + hex(ch) + " to jamo " + 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.
+ out("returning early because we hit a new base");
+ break;
+ }
+ classesSeen = 0;
+ baseIndex = ComposeData.INITIAL_JAMO_INDEX;
+ basePos = buffer.length();
+ buffer.append(ch);
+ out("got initial jamo " + hex(ch));
+ }
+ else if (type == ComposeData.MEDIAL_JAMO && classesSeen == 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);
+
+ out("got medial jamo " + hex(ch) + ", replacing with Hangul " + hex(newCh));
+
+ baseIndex = ComposeData.MEDIAL_JAMO_INDEX;
+ }
+ else if (type == ComposeData.FINAL_JAMO && classesSeen == 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);
+
+ out("got final jamo " + hex(ch) + ", replacing with Hangul " + hex(newCh));
+
+ baseIndex = 0;
+ basePos = -1;
+ classesSeen = 0;
+ } else {
+ // TODO: deal with JAMO character types
+ baseIndex = 0;
+ basePos = -1;
+ classesSeen = 0;
+ buffer.append(ch);
+ out("UNKNOWN char " + 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() {
+
+ 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;
+
+ if (type == ComposeData.BASE || type == ComposeData.EXPLODING_BASE || type == ComposeData.HANGUL
+ || type == ComposeData.INITIAL_JAMO || type == ComposeData.IGNORE)
+ {
+ 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);
+ 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;
+ }
+
+ return ch;
+ }
+
+ private static void bubbleAppend(StringBuffer target, char ch, int cclass) {
+ out(" bubbleAppend(" + hex(ch) + ", " + cclass + ")" );
+ int i;
+ for (i = target.length() - 1; i > 0; --i) {
+ int iClass = getComposeClass(target.charAt(i));
+ out(" bubbleAppend: target[" + i + "] is class " + hex((char)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"
+ out(" 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.typeMask[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)
+ {
+ boolean hangul = (options & IGNORE_HANGUL) == 0;
+ int limit = 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 (index > limit) {
+ if ((offset & DecompData.DECOMP_RECURSE) != 0) {
+ if (buffer == null) {
+ buffer = new StringBuffer();
+ } else {
+ buffer.setLength(0);
+ }
+ doAppend(DecompData.contents, index, buffer);
+ bufPtr = 0;
+ } else {
+ doAppend(DecompData.contents, index, result);
+ }
+ } else if (ch >= HANGUL_BASE && ch < HANGUL_LIMIT && hangul) {
+ hangulToJamo(ch, result, limit);
+ } 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()
+ {
+ 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) {
+ out(" " + 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.
+ //
+ // TODO: Some of these might need to be decomposed too.
+ //
+ while ((ch = text.next()) != DONE
+ && DecompData.canonClass.elementAt(ch) != DecompData.BASE)
+ {
+ needToReorder = true;
+ 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);
+ }
+ }
+ //out(" nextDecomp returning " + 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() {
+ boolean hangul = (options & IGNORE_HANGUL) == 0;
+
+ char ch = curBackward();
+
+ int offset = DecompData.offsets.elementAt(ch);
+ int index = offset & DecompData.DECOMP_MASK;
+
+ out("prevDecomp got input char " + ch);
+
+ if (index > minDecomp || DecompData.canonClass.elementAt(ch) != DecompData.BASE)
+ {
+ initBuffer();
+
+ // Slurp up any combining characters till we get to a base char.
+ while (ch != DONE && DecompData.canonClass.elementAt(ch) != DecompData.BASE) {
+ buffer.insert(0, ch);
+ ch = text.previous();
+ }
+
+ // Now decompose this base character
+ offset = DecompData.offsets.elementAt(ch);
+ index = offset & DecompData.DECOMP_MASK;
+
+ if (index > minDecomp) {
+ out(" " + hex(ch) + " has decomposition, index=" + index);
+
+ int len = doInsert(DecompData.contents, index, buffer, 0);
+
+ if ((offset & DecompData.DECOMP_RECURSE) != 0) {
+ // Need to decompose this recursively
+ for (int i = 0; i < len; i++) {
+ ch = buffer.charAt(i);
+ index = DecompData.offsets.elementAt(ch) & DecompData.DECOMP_MASK;
+ if (index > minDecomp) {
+ i += doReplace(DecompData.contents, index, buffer, i);
+ }
+ }
+ }
+ } else {
+ // This is a base character that doesn't decompose
+ // and isn't involved in reordering, so throw it back
+ text.next();
+ }
+
+ 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);
+ }
+ out(" prevDecomp returning '" + ch + "' " + 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();
+ out(" curForward returning " + hex(ch) + ", text index=" + text.getIndex());
+ return ch;
+ }
+
+ private final char curBackward() {
+ char ch = atEnd ? text.current() : text.previous();
+ atEnd = false;
+ out(" curBackward returning " + 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;
+
+ if (length == 0) {
+ dest.setCharAt(pos++, DecompData.contents.charAt(index++));
+
+ char ch;
+ while ((ch = DecompData.contents.charAt(index++)) != 0x0000) {
+ dest.insert(pos++, ch);
+ length++;
+ }
+ } else {
+ dest.setCharAt(pos++, DecompData.contents.charAt(index++));
+ 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 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;
+
+ static final void out(String str) {
+ // System.out.println(str);
+ }
+ static final String hex(char ch) {
+ return UInfo.hex(ch);
+ }
+ static final String hex(StringBuffer s) {
+ return UInfo.hex(s.toString());
+ }
+};
diff --git a/src/com/ibm/text/NullTransliterator.java b/src/com/ibm/text/NullTransliterator.java
new file mode 100755
index 0000000..7ee1898
--- /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/03/10 04:07:21 $
+ * $Revision: 1.5 $
+ *
+ *****************************************************************************************
+ */
+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.cursor = offsets.limit;
+ }
+}
diff --git a/src/com/ibm/text/NumberFormat.java b/src/com/ibm/text/NumberFormat.java
new file mode 100755
index 0000000..64a1560
--- /dev/null
+++ b/src/com/ibm/text/NumberFormat.java
@@ -0,0 +1,852 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:07:22 $
+ * $Revision: 1.5 $
+ *
+ *****************************************************************************************
+ */
+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 java.text.DecimalFormat
+ * see java.text.ChoiceFormat
+ * @version $Revision: 1.5 $
+ * @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);
+// This has been removed pending addition of com.ibm.math package to ICU4J
+/* } 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);
+
+ /* 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.
+ *
+ 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 java.text.NumberFormat#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) {
+ // 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";
+ }
+ // 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];
+ }
+
+ // [NEW] Temporary pending resource integration
+ public static final String RESOURCE_BASE = "java.text.resources.LocaleElements";
+ // public static final String RESOURCE_BASE = "com.ibm.text.resources.LocaleElements";
+
+ // [NEW] Temporary pending resource integration
+ static ResourceBundle baseBundle = null;
+
+ // [NEW] Temporary pending resource integration
+ 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..479b3c4
--- /dev/null
+++ b/src/com/ibm/text/Replaceable.java
@@ -0,0 +1,89 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:07:22 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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 © IBM Corporation 1999. All rights reserved.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: Replaceable.java,v $ $Revision: 1.2 $ $Date: 2000/03/10 04:07:22 $
+ */
+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.
+}
diff --git a/src/com/ibm/text/ReplaceableString.java b/src/com/ibm/text/ReplaceableString.java
new file mode 100755
index 0000000..5228495
--- /dev/null
+++ b/src/com/ibm/text/ReplaceableString.java
@@ -0,0 +1,171 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:07:22 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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 © IBM Corporation 1999. All rights reserved.
+ *
+ * @see Replaceable
+ * @author Alan Liu
+ * @version $RCSfile: ReplaceableString.java,v $ $Revision: 1.2 $ $Date: 2000/03/10 04:07:22 $
+ */
+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 internal storage of this object. <em>Note! Any
+ * changes made to the returned object affect this object's
+ * contents, and vice versa.</em>
+ * @return internal buffer used by this object
+ */
+ public StringBuffer getStringBuffer() {
+ return buf;
+ }
+
+ /**
+ * 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);
+ }
+ }
+}
diff --git a/src/com/ibm/text/RuleBasedBreakIterator.java b/src/com/ibm/text/RuleBasedBreakIterator.java
new file mode 100755
index 0000000..55ff4ff
--- /dev/null
+++ b/src/com/ibm/text/RuleBasedBreakIterator.java
@@ -0,0 +1,3022 @@
+/*
+ *******************************************************************************
+ * 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: 2000/03/10 04:07:22 $
+ * $Revision: 1.5 $
+ *
+ *****************************************************************************************
+ */
+
+
+//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 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. If the description defines a substitution
+ * called "$ignore", the expression must be a [] expression, and the
+ * expression defines a set of characters (the "<em>ignore characters</em>") that
+ * will be transparent to the BreakIterator. A sequence of characters will break the
+ * same way it would if any ignore characters it contains are taken out. 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. Either one
+ * sequence or the other, but not both, matches this expression. 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. *? 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 *. 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 *?. For example, if you have "xxyxyyyxyxyxxyxyxyy" in the text,
+ * "x[xy]*x" will match through to the last x (i.e., "<strong>xxyxyyyxyxyxxyxyx</strong>yy",
+ * but "x[xy]*?x" will only match the first two xes ("<strong>xx</strong>yxyyyxyxyxxyxyxyy").</td>
+ * </tr>
+ * <tr>
+ * <td width="6%">[]</td>
+ * <td width="94%">Specifies a group of alternative characters. A [] expression will
+ * match any single character that is specified in the [] expression. 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. (e.g., "[a-z]*/[:Zs:]*[1-0]" 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). 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. The \ itself is ignored, but causes the next
+ * character to be treated as literal character. This has no effect for many
+ * characters, but for the characters listed above, this deprives them of their special
+ * meaning. (There are no special escape sequences for Unicode characters, or tabs and
+ * newlines; these are all handled by a higher-level protocol. In a Java string,
+ * "\n" will be converted to a literal newline character by the time the
+ * regular-expression parser sees it. Of course, this means that \ sequences that are
+ * visible to the regexp parser must be written as \\ when inside a Java string.) 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. 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. For example
+ * "[a-p]" matches all lowercase Latin letters from a to p (inclusive). The -
+ * sign specifies ranges of continuous Unicode numeric values, not ranges of characters in a
+ * language's alphabetical order: "[a-z]" 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. (For
+ * example, "[aeiou]" 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.
+ * 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,
+ * "[[:Sc:][:Sm:]]" matches all currency symbols and all math symbols).
+ * Specifying a one-letter code is the same as specifying all two-letter codes that begin
+ * with that letter (for example, "[[:L:]]" matches all letters, and is equivalent
+ * to "[[:Lu:][:Ll:][:Lo:][:Lm:][:Lt:]]"). 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>.
+ * For examples, see the resource data (which is annotated).</p>
+ *
+ * @author Richard Gillam
+ * $RCSfile: RuleBasedBreakIterator.java,v $ $Revision: 1.5 $ $Date: 2000/03/10 04:07:22 $
+ */
+public class RuleBasedBreakIterator extends BreakIterator {
+
+ /**
+ * A token used as a character-category value to identify ignore characters
+ */
+ protected static final byte IGNORE = -1;
+
+ /**
+ * 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
+out.write(0);
+// 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]) {
+ result = lookaheadResult;
+ }
+ 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];
+ }
+
+ //=======================================================================
+ // 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('=');
+ replace = substitutionRule.substring(0, 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".
+ // 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) {
+ 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>". 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", 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")) {
+ 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 e = new UnicodeSet((UnicodeSet)iter.nextElement());
+
+ // for each category in the category list, do...
+ for (int j = categories.size() - 1; !e.isEmpty() && j > 0; j--) {
+
+ // if there's overlap between the current working set of chars
+ // and the current category...
+ UnicodeSet that = (UnicodeSet)(categories.elementAt(j));
+ UnicodeSet temp = new UnicodeSet(e);
+ temp.retainAll(that);
+ if (!temp.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 (!temp.equals(that)) {
+ that.removeAll(temp);
+ categories.addElement(temp);
+ }
+
+ // and always remove the overlapping characters from the current
+ // working set of characters
+ e.removeAll(temp);
+ }
+ }
+
+ // if there are still characters left in the working char set,
+ // add a new category containing them
+ if (!e.isEmpty()) {
+ categories.addElement(e);
+ }
+ }
+
+ // 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++) {
+
+ // if the current expression contains characters in that category...
+ if (cs.containsAll((UnicodeSet)(categories.elementAt(j)))) {
+
+ // then add the encoded category number to the String for this
+ // expression
+ cats.append((char)(0x100 + j));
+ if (cs.equals((UnicodeSet)(categories.elementAt(j)))) {
+ 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));
+ String pairs = chars.getPairs();
+
+ // go through the character ranges in the category one by one...
+ for (int j = 0; j < pairs.length(); j += 2) {
+ // and set the corresponding elements in the CompactArray accordingly
+ if (i != 0) {
+ charCategoryTable.setElementAt(pairs.charAt(j), pairs.charAt(j + 1),
+ (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(pairs.charAt(j), pairs.charAt(j + 1),
+ 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, 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 * denotes a repeating character or group (* after () is handled separately
+ // below). In addition to restoring the decision point list, modify the
+ // current state to point to itself on the appropriate character categories.
+ if (c == '+' || c == '*' || c == '?') {
+ // when there's a *, update the current state to loop back on itself
+ // on the character categories that caused us to enter this state
+ if (c == '*' || c == '+') {
+ for (int i = lastState + 1; i < tempStateTable.size(); i++) {
+ Vector temp = new Vector();
+ temp.addElement(new Integer(i));
+ updateStateTable(temp, pendingChars, (short)(lastState + 1));
+ }
+ }
+
+ // 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 *, 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 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, 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 *
+ 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" +
+ context.substring(0, position) + "\n\n" + 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..b073d29
--- /dev/null
+++ b/src/com/ibm/text/RuleBasedNumberFormat.java
@@ -0,0 +1,1252 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:07:22 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text;
+
+import java.text.*;
+import java.util.Vector;
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.text.DecimalFormatSymbols;
+
+/**
+ * <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
+ * "twenty-five thousand three hundred seventy-six" or "vingt-cinq mille trois
+ * cents soixante-seize" or
+ * "funfundzwanzigtausenddreihundertsechsundsiebzig"), 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 "1:02:10").</p>
+ *
+ * <p>The resources contain three predefined formatters for each locale: spellout, which
+ * spells out a value in words (123 is "one hundred twenty-three"); ordinal, which
+ * appends an ordinal suffix to the end of a numeral (123 is "123rd"); and
+ * duration, which shows a duration in seconds as hours, minutes, and seconds (123 is
+ * "2:03"). 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[->>];
+ * 30: thirty{->>];
+ * 40: forty[->>];
+ * 50: fifty[->>];
+ * 60: sixty[->>];
+ * 70: seventy[->>];
+ * 80: eighty[->>];
+ * 90: ninety[->>];</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
+ * ">>" 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 ">>" 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 "twenty-four," not "twenty four").</p>
+ *
+ * <p>For even larger numbers, we can actually look up several parts of the number in the
+ * list:</p>
+ *
+ * <pre>100: << hundred[ >>];</pre>
+ *
+ * <p>The "<<" represents a new kind of substitution. The << isolates
+ * the hundreds digit (and any digits to its left), formats it using this same rule set, and
+ * places the result where the "<<" was. Notice also that the meaning of
+ * >> 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 <<
+ * substitution, and the remainder is used to fill in the >> 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: << thousand[ >>];</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: << million[ >>];
+ * 1,000,000,000: << billion[ >>];
+ * 1,000,000,000,000: << trillion[ >>];
+ * 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
+ * "overflow rule," 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><< thousand >></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->></strong> thousand >></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 >></td>
+ * <td width="340" valign="top">[25 mod 10 is 5. The rule for 5 is "five."</td>
+ * </tr>
+ * <tr>
+ * <td width="21"></td>
+ * <td width="257" valign="top">twenty-five thousand <strong><< hundred >></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 >></td>
+ * <td width="340" valign="top">[340 over 100 is 3. The rule for 3 is "three."]</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 >>;</pre>
+ *
+ * <p>This is called a <em>negative-number rule,</em> and is identified by "-x"
+ * where the base value would be. This rule is used to format all negative numbers. the
+ * >> token here means "find the number's absolute value, format it with these
+ * rules, and put the result here."</p>
+ *
+ * <p>We also add a special rule called a <em>fraction rule </em>for numbers with fractional
+ * parts:</p>
+ *
+ * <pre>x.x: << point >>;</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 << token refers to
+ * the number's integral part, and the >> 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 "one hundred twenty-three point four five six").</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 "rule set" 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>>:</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 > 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>>:</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 > 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. 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. (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">>></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">>>></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"><<</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. 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 >> 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 << 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.2 $ $Date: 2000/03/10 04:07:22 $
+ * @see java.text.NumberFormat
+ * @see java.text.DecimalFormat
+ */
+public final class RuleBasedNumberFormat extends java.text.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;
+ }
+
+ /**
+ * 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..23fb393
--- /dev/null
+++ b/src/com/ibm/text/RuleBasedTransliterator.java
@@ -0,0 +1,1064 @@
+/*
+ *******************************************************************************
+ * 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: 2000/03/10 04:07:23 $
+ * $Revision: 1.17 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+import java.util.Hashtable;
+import java.util.Vector;
+import java.text.ParsePosition;
+import com.ibm.util.Utility;
+
+/**
+ * A transliterator that reads a set of rules in order to determine how to perform
+ * translations. Rules are stored in resource bundles indexed by name. Rules 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. </p>
+ *
+ * <p><b>Rule syntax</b> </p>
+ *
+ * <p>Rule statements take one of the following forms:
+ *
+ * <dl>
+ * <dt><code>alefmadda=\u0622</code></dt>
+ * <dd><strong>Variable definition.</strong> The name on the left is assigned the character or
+ * expression on the right. Names may not contain any special characters (see list below).
+ * Duplicate names (including duplicates of simple variables or category names) cause an
+ * exception to be thrown. If the right hand side consists of one character, then the
+ * variable stands for that character. In this example, after this statement, instances of
+ * the left hand name surrounded by braces, "<code>{alefmadda}</code>", will be
+ * replaced by the Unicode character U+0622. If the right hand side is longer than one
+ * character, then it is interpreted as a character category expression; see below for
+ * details.</dd>
+ * <dt> </dt>
+ * <dt><code>softvowel=[eiyEIY]</code></dt>
+ * <dd><strong>Category definition.</strong> The name on the left is assigned to stand for a
+ * set of characters. The same rules for names of simple variables apply. After this
+ * statement, the left hand variable will be interpreted as indicating a set of characters in
+ * appropriate contexts. The pattern syntax defining sets of characters is defined by {@link
+ * UnicodeSet}. Examples of valid patterns are:<table>
+ * <tr valign="top">
+ * <td nowrap><code>[abc]</code></td>
+ * <td>The set containing the characters 'a', 'b', and 'c'.</td>
+ * </tr>
+ * <tr valign="top">
+ * <td nowrap><code>[^abc]</code></td>
+ * <td>The set of all characters <em>except</em> 'a', 'b', and 'c'.</td>
+ * </tr>
+ * <tr valign="top">
+ * <td nowrap><code>[A-Z]</code></td>
+ * <td>The set of all characters from 'A' to 'Z' in Unicode order.</td>
+ * </tr>
+ * <tr valign="top">
+ * <td nowrap><code>[:Lu:]</code></td>
+ * <td>The set of Unicode uppercase letters. See <a href="http://www.unicode.org">www.unicode.org</a>
+ * for a complete list of categories and their two-letter codes.</td>
+ * </tr>
+ * <tr valign="top">
+ * <td nowrap><code>[^a-z[:Lu:][:Ll:]]</code></td>
+ * <td>The set of all characters <em>except</em> 'a' through 'z' and uppercase or lowercase
+ * letters.</td>
+ * </tr>
+ * </table>
+ * <p>See {@link UnicodeSet} for more documentation and examples. </p>
+ * </dd>
+ * <dt><code>ai>{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> </dt>
+ * <dt><code>ai<{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<>{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>Forward and reverse 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
+ * "<code>(abc)def</code>" indicates the characters "<code>def</code>"
+ * must be preceded by "<code>abc</code>" for a successful match. If there is a
+ * successful match, "<code>def</code>" will be replaced, but not "<code>abc</code>".
+ * The initial '<code>(</code>' is optional, so "<code>abc)def</code>" is
+ * equivalent to "<code>(abc)def</code>". Another example is "<code>123(456)</code>"
+ * (or "<code>123(456</code>") in which the literal pattern "<code>123</code>"
+ * must be followed by "<code>456</code>". </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. </p>
+ *
+ * <p>In addition to being defined in variables, <code>UnicodeSet</code> patterns may be
+ * embedded directly into rule strings. Thus, the following two rules are equivalent:</p>
+ *
+ * <blockquote>
+ * <p><code>vowel=[aeiou]; {vowel}>*; # One way to do this<br>
+ * [aeiou]>*;
+ * #
+ * Another way</code></p>
+ * </blockquote>
+ *
+ * <p><b>Example</b> </p>
+ *
+ * <p>The following example rules illustrate many of the features of the rule language. </p>
+ *
+ * <table cellpadding="4">
+ * <tr valign="top">
+ * <td>Rule 1.</td>
+ * <td nowrap><code>(abc)def>x|y</code></td>
+ * </tr>
+ * <tr valign="top">
+ * <td>Rule 2.</td>
+ * <td nowrap><code>xyz>r</code></td>
+ * </tr>
+ * <tr valign="top">
+ * <td>Rule 3.</td>
+ * <td nowrap><code>yz>q</code></td>
+ * </tr>
+ * </table>
+ *
+ * <p>Applying these rules to the string "<code>adefabcdefz</code>" yields the
+ * following results: </p>
+ *
+ * <table cellpadding="4">
+ * <tr valign="top">
+ * <td nowrap><code>|adefabcdefz</code></td>
+ * <td>Initial state, no rules match. Advance cursor.</td>
+ * </tr>
+ * <tr valign="top">
+ * <td nowrap><code>a|defabcdefz</code></td>
+ * <td>Still no match. Rule 1 does not match because the preceding context is not present.</td>
+ * </tr>
+ * <tr valign="top">
+ * <td nowrap><code>ad|efabcdefz</code></td>
+ * <td>Still no match. Keep advancing until there is a match...</td>
+ * </tr>
+ * <tr valign="top">
+ * <td nowrap><code>ade|fabcdefz</code></td>
+ * <td>...</td>
+ * </tr>
+ * <tr valign="top">
+ * <td nowrap><code>adef|abcdefz</code></td>
+ * <td>...</td>
+ * </tr>
+ * <tr valign="top">
+ * <td nowrap><code>adefa|bcdefz</code></td>
+ * <td>...</td>
+ * </tr>
+ * <tr valign="top">
+ * <td nowrap><code>adefab|cdefz</code></td>
+ * <td>...</td>
+ * </tr>
+ * <tr valign="top">
+ * <td nowrap><code>adefabc|defz</code></td>
+ * <td>Rule 1 matches; replace "<code>def</code>" with "<code>xy</code>"
+ * and back up the cursor to before the '<code>y</code>'.</td>
+ * </tr>
+ * <tr valign="top">
+ * <td nowrap><code>adefabcx|yz</code></td>
+ * <td>Although "<code>xyz</code>" 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 "<code>yz</code>" with "<code>q</code>".</td>
+ * </tr>
+ * <tr valign="top">
+ * <td nowrap><code>adefabcxq|</code></td>
+ * <td>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 the special characters <code>=><{}[]()|</code>.
+ * To specify a single quote itself, inside or outside of quotes, use two single quotes in a
+ * row. For example, the rule "<code>'>'>o''clock</code>" changes the string
+ * "<code>></code>" to the string "<code>o'clock</code>". </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 "a>x" is followed by the rule
+ * "ab>y", 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.17 $ $Date: 2000/03/10 04:07:23 $
+ *
+ * $Log: RuleBasedTransliterator.java,v $
+ * 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
+ */
+public class RuleBasedTransliterator extends Transliterator {
+
+ private Data data;
+
+ static final boolean DEBUG = false;
+
+ 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);
+ }
+
+ /**
+ * 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
+ */
+ int start = index.start;
+ int limit = index.limit;
+ int cursor = index.cursor;
+
+ if (DEBUG) {
+ System.out.print("\"" +
+ Utility.escape(rsubstring(text, start, cursor)) + '|' +
+ Utility.escape(rsubstring(text, cursor, limit)) + "\"");
+ }
+
+ /* 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 = limit - cursor;
+ if (loopLimit >= 0x08000000) {
+ loopLimit = 0x7FFFFFFF;
+ } else {
+ loopLimit <<= 4;
+ }
+
+ boolean partial[] = new boolean[1];
+ partial[0] = false;
+
+ while (cursor < limit && loopCount <= loopLimit) {
+ TransliterationRule r = incremental ?
+ data.ruleSet.findIncrementalMatch(text, start, limit, cursor,
+ data, partial, getFilter()) :
+ data.ruleSet.findMatch(text, start, limit,
+ cursor, 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 {
+ ++cursor;
+ }
+ } else {
+ text.replace(cursor, cursor + r.getKeyLength(), r.getOutput());
+ limit += r.getOutput().length() - r.getKeyLength();
+ cursor += r.getCursorPos();
+ ++loopCount;
+ }
+ }
+
+ if (DEBUG) {
+ System.out.println(" -> \"" +
+ Utility.escape(rsubstring(text, start, cursor)) + '|' +
+ Utility.escape(rsubstring(text, cursor, cursor)) + '|' +
+ Utility.escape(rsubstring(text, cursor, limit)) + "\"");
+ }
+
+ index.limit = limit;
+ index.cursor = cursor;
+ }
+
+
+ /**
+ * FOR DEBUGGING: Return a substring of a Replaceable.
+ */
+ private static String rsubstring(Replaceable r, int start, int limit) {
+ StringBuffer buf = new StringBuffer();
+ while (start < limit) {
+ buf.append(r.charAt(start++));
+ }
+ return buf.toString();
+ }
+
+
+
+
+
+ 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 (Character). A variable
+ * name may correspond to a single literal character, in which
+ * case the character is stored in this hash. It may also
+ * correspond to a UnicodeSet, in which case a character is
+ * again stored in this hash, but the character 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.
+ */
+ public 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).
+ */
+ public UnicodeSet[] setVariables;
+
+ /**
+ * The character represented by setVariables[0].
+ */
+ public char setVariablesBase;
+
+ /**
+ * Return the UnicodeSet associated with the given character, or
+ * null if none.
+ */
+ public UnicodeSet lookup(char c) {
+ int i = c - setVariablesBase;
+ return (i >= 0 && i < setVariables.length)
+ ? setVariables[i] : null;
+ }
+ }
+
+
+
+ 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. Lookup a variable, returning
+ * either a Character, a UnicodeSet, or null.
+ */
+ public Object lookup(String name) {
+ Character ch = (Character) data.variableNames.get(name);
+ if (ch != null) {
+ int i = ch.charValue() - data.setVariablesBase;
+ if (i >= 0 && i < setVariablesVector.size()) {
+ return setVariablesVector.elementAt(i);
+ }
+ }
+ return ch;
+ }
+ }
+
+ /**
+ * 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>.
+ */
+ private char variableLimit;
+
+ // 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 VARIABLE_REF_OPEN = '{';
+ private static final char VARIABLE_REF_CLOSE = '}';
+ private static final char CONTEXT_OPEN = '(';
+ private static final char CONTEXT_CLOSE = ')';
+ private static final char SET_OPEN = '[';
+ private static final char SET_CLOSE = ']';
+ private static final char CURSOR_POS = '|';
+
+ /**
+ * @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(ruleArray);
+ }
+
+ 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(String[] ruleArray) {
+ determineVariableRange(ruleArray);
+ setVariablesVector = new Vector();
+ parseData = new ParseData();
+
+ StringBuffer errors = null;
+
+ try {
+ for (int i=0; i<ruleArray.length; ++i) {
+ String rule = ruleArray[i];
+ 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
+ }
+ // 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) {
+ errors = new StringBuffer(e.getMessage());
+ }
+
+ // 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());
+ }
+ }
+
+ /**
+ * 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.
+ */
+ private int parseRule(String rule, int pos, int limit) {
+ // Locate the left side, operator, and right side
+ int start = pos;
+ char operator = 0;
+
+ StringBuffer buf = new StringBuffer();
+ int cursor = -1; // position of cursor in buf
+ int ante = -1; // position of ante context marker ')' in buf
+ int post = -1; // position of post context marker '(' in buf
+ int postClose = -1; // position of post context close ')' in buf
+
+ // Assigned to buf and its adjuncts after the LHS has been
+ // parsed. Thereafter, buf etc. refer to the RHS.
+ String left = null;
+ int leftCursor = -1, leftAnte = -1, leftPost = -1, leftPostClose = -1;
+
+ 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;
+ }
+ // Handle escapes
+ if (c == ESCAPE) {
+ if (pos == limit) {
+ syntaxError("Trailing backslash", rule, start);
+ }
+ buf.append(rule.charAt(pos++));
+ 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;
+ }
+ if (OPERATORS.indexOf(c) >= 0) {
+ if (operator != 0) {
+ syntaxError("Unquoted " + c, rule, start);
+ }
+ // Found an operator char. Check for forward-reverse operator.
+ if (c == REVERSE_RULE_OP &&
+ (pos < limit && rule.charAt(pos) == FORWARD_RULE_OP)) {
+ ++pos;
+ operator = FWDREV_RULE_OP;
+ } else {
+ operator = c;
+ }
+ left = buf.toString(); // lhs
+ leftCursor = cursor;
+ leftAnte = ante;
+ leftPost = post;
+ leftPostClose = postClose;
+
+ buf.setLength(0);
+ cursor = ante = post = postClose = -1;
+ continue;
+ }
+ switch (c) {
+ case END_OF_RULE:
+ break main;
+ case VARIABLE_REF_OPEN:
+ {
+ int j = rule.indexOf(VARIABLE_REF_CLOSE, pos);
+ if (pos == j || j < 0) { // empty or unterminated
+ syntaxError("Malformed variable reference", rule, start);
+ }
+ String name = rule.substring(pos, j);
+ pos = j+1;
+ buf.append(getVariableDef(name));
+ }
+ break;
+ case CONTEXT_OPEN:
+ if (post >= 0) {
+ syntaxError("Multiple post contexts", rule, start);
+ }
+ // Ignore CONTEXT_OPEN if buffer length is zero -- that means
+ // this is the optional opening delimiter for the ante context.
+ if (buf.length() > 0) {
+ post = buf.length();
+ }
+ break;
+ case CONTEXT_CLOSE:
+ if (postClose >= 0) {
+ syntaxError("Unexpected " + c, rule, start);
+ }
+ if (post >= 0) {
+ // This is probably the optional closing delimiter
+ // for the post context; save the pos and check later.
+ postClose = buf.length();
+ } else if (ante >= 0) {
+ syntaxError("Multiple ante contexts", rule, start);
+ } else {
+ ante = buf.length();
+ }
+ break;
+ case SET_OPEN:
+ ParsePosition pp = new ParsePosition(pos-1); // Backup to opening '['
+ buf.append(registerSet(new UnicodeSet(rule, pp, parseData)));
+ pos = pp.getIndex();
+ break;
+ case VARIABLE_REF_CLOSE:
+ case SET_CLOSE:
+ syntaxError("Unquoted " + c, rule, start);
+ case CURSOR_POS:
+ if (cursor >= 0) {
+ syntaxError("Multiple cursors", rule, start);
+ }
+ cursor = buf.length();
+ break;
+ default:
+ buf.append(c);
+ break;
+ }
+ }
+ if (operator == 0) {
+ syntaxError("No operator", rule, start);
+ }
+
+ // Check context close parameters
+ if ((leftPostClose >= 0 && leftPostClose != left.length()) ||
+ (postClose >= 0 && postClose != buf.length())) {
+ syntaxError("Extra text after ]", rule, start);
+ }
+
+ // Context is only allowed on the input side; that is, the left side
+ // for forward rules. Cursors are only allowed on the output side;
+ // that is, the right side for forward rules. Bidirectional rules
+ // ignore elements that do not apply.
+
+ switch (operator) {
+ case 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.
+ if (buf.length() != 1) {
+ syntaxError("Malformed RHS", rule, start);
+ }
+ if (data.variableNames.get(left) != null) {
+ syntaxError("Duplicate definition of {" +
+ left + "}", rule, start);
+ }
+ data.variableNames.put(left, new Character(buf.charAt(0)));
+ break;
+
+ case FORWARD_RULE_OP:
+ if (direction == FORWARD) {
+ if (ante >= 0 || post >= 0 || leftCursor >= 0) {
+ syntaxError("Malformed rule", rule, start);
+ }
+ data.ruleSet.addRule(new TransliterationRule(
+ left, leftAnte, leftPost,
+ buf.toString(), cursor));
+ } // otherwise ignore the rule; it's not the direction we want
+ break;
+
+ case REVERSE_RULE_OP:
+ if (direction == REVERSE) {
+ if (leftAnte >= 0 || leftPost >= 0 || cursor >= 0) {
+ syntaxError("Malformed rule", rule, start);
+ }
+ data.ruleSet.addRule(new TransliterationRule(
+ buf.toString(), ante, post,
+ left, leftCursor));
+ } // otherwise ignore the rule; it's not the direction we want
+ break;
+
+ case FWDREV_RULE_OP:
+ if (direction == FORWARD) {
+ // The output side is the right; trim off any context
+ String output = buf.toString().substring(ante < 0 ? 0 : ante,
+ post < 0 ? buf.length() : post);
+ data.ruleSet.addRule(new TransliterationRule(
+ left, leftAnte, leftPost,
+ output, cursor));
+ } else {
+ // The output side is the left; trim off any context
+ String output = left.substring(leftAnte < 0 ? 0 : leftAnte,
+ leftPost < 0 ? left.length() : leftPost);
+ data.ruleSet.addRule(new TransliterationRule(
+ buf.toString(), ante, post,
+ output, leftCursor));
+ }
+ break;
+ }
+
+ 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
+ */
+ private static final void syntaxError(String msg, String rule, int start) {
+ int end = quotedIndexOf(rule, start, rule.length(), ";");
+ if (end < 0) {
+ end = rule.length();
+ }
+ throw new IllegalArgumentException(msg + " in " +
+ rule.substring(start, end));
+ }
+
+ /**
+ * Allocate a private-use substitution character for the given set,
+ * register it in the setVariables hash, and return the substitution
+ * character.
+ */
+ private final char registerSet(UnicodeSet set) {
+ if (variableNext >= variableLimit) {
+ throw new RuntimeException("Private use variables exhausted");
+ }
+ setVariablesVector.addElement(set);
+ return variableNext++;
+ }
+
+ /**
+ * Returns the single character value of the given variable name. Defined
+ * names are recognized.
+ * @exception IllegalArgumentException if the name is unknown.
+ */
+ private char getVariableDef(String name) {
+ Character ch = (Character) data.variableNames.get(name);
+ if (ch == null) {
+ throw new IllegalArgumentException("Undefined variable: "
+ + name);
+ }
+ return ch.charValue();
+ }
+
+ /**
+ * 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(String[] 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");
+ }
+
+ data.setVariablesBase = variableNext = r.start;
+ 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(String[] strings) {
+ Vector v = new Vector(1);
+ v.addElement(clone());
+
+ for (int k=0; k<strings.length; ++k) {
+ String str = strings[k];
+ 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;
+ }
+ }
+ }
+}
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..18681e5
--- /dev/null
+++ b/src/com/ibm/text/SimpleDateFormat.java
@@ -0,0 +1,1340 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:07:23 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text;
+
+import java.text.DateFormat;
+import java.text.DecimalFormat;
+import java.text.MessageFormat;
+import java.text.NumberFormat;
+import java.text.FieldPosition;
+import java.text.ParsePosition;
+
+import java.util.TimeZone;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.SimpleTimeZone;
+import java.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
+ * 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,
+ * < 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 java.util.Calendar
+ * @see java.util.GregorianCalendar
+ * @see java.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 java.text.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 java.text.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 java.text.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,
+ };
+
+ // Private member function that does the real date/time formatting.
+ 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 = "";
+
+ 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 java.text.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;
+ }
+
+ /**
+ * Private code-size reduction function used by subParse.
+ * @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.
+ */
+ private 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;
+ }
+
+ /**
+ * Private member function that converts the parsed date strings into
+ * timeFields. Returns -start (for ParsePosition) if failed.
+ * @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.
+ */
+ private 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;
+
+ 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();
+ }
+
+ /**
+ * 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..8ff6f86
--- /dev/null
+++ b/src/com/ibm/text/SymbolTable.java
@@ -0,0 +1,25 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:07:24 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+/**
+ * An interface that maps strings to objects.
+ */
+public interface SymbolTable {
+
+ /**
+ * Lookup the object associated with this string and return it.
+ * Return <tt>null</tt> if no such name exists.
+ */
+ Object lookup(String s);
+}
diff --git a/src/com/ibm/text/TransliterationRule.java b/src/com/ibm/text/TransliterationRule.java
new file mode 100755
index 0000000..5c154c7
--- /dev/null
+++ b/src/com/ibm/text/TransliterationRule.java
@@ -0,0 +1,450 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:07:24 $
+ * $Revision: 1.14 $
+ *
+ *****************************************************************************************
+ */
+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>Copyright © IBM Corporation 1999. All rights reserved.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: TransliterationRule.java,v $ $Revision: 1.14 $ $Date: 2000/03/10 04:07:24 $
+ *
+ * $Log: TransliterationRule.java,v $
+ * 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
+ *
+ */
+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;
+
+ /**
+ * 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;
+
+ 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.
+ */
+ public TransliterationRule(String input,
+ int anteContextPos, int postContextPos,
+ String output,
+ int cursorPos) {
+ // 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) {
+ this.cursorPos = output.length();
+ } else {
+ if (cursorPos > output.length()) {
+ throw new IllegalArgumentException("Invalid cursor position");
+ }
+ this.cursorPos = cursorPos;
+ }
+ pattern = input;
+ this.output = output;
+ }
+
+ /**
+ * Return the length of the key. Equivalent to <code>getKey().length()</code>.
+ * @return the length of the match key.
+ */
+ public int getKeyLength() {
+ return keyLength;
+ }
+
+ /**
+ * Return the output string.
+ * @return the output string.
+ */
+ public String getOutput() {
+ return output;
+ }
+
+ /**
+ * 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.lookup(c) == null ? (c & 0xFF) : -1;
+ }
+
+ /**
+ * 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.lookup(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, int start, int limit,
+ int cursor, RuleBasedTransliterator.Data variables,
+ UnicodeFilter filter) {
+ // Match anteContext, key, and postContext
+ cursor -= anteContextLength;
+ if (cursor < start
+ || (cursor + pattern.length()) > limit) {
+ return false;
+ }
+ for (int i=0; i<pattern.length(); ++i, ++cursor) {
+ if (!charMatches(pattern.charAt(i), text.charAt(cursor),
+ 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, int start, int limit,
+ int cursor, RuleBasedTransliterator.Data variables,
+ UnicodeFilter filter) {
+ int len = getRegionMatchLength(text, start, limit, cursor - anteContextLength,
+ pattern, 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 template the text to match against. All characters must match.
+ * @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 static int getRegionMatchLength(Replaceable text, int start,
+ int limit, int cursor,
+ String template,
+ RuleBasedTransliterator.Data variables,
+ UnicodeFilter filter) {
+ if (cursor < start) {
+ return -1;
+ }
+ int i;
+ for (i=0; i<template.length() && cursor<limit; ++i, ++cursor) {
+ if (!charMatches(template.charAt(i), text.charAt(cursor),
+ 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, char textChar,
+ RuleBasedTransliterator.Data variables,
+ UnicodeFilter filter) {
+ UnicodeSet set = null;
+ return (filter == null || filter.contains(textChar)) &&
+ (((set = variables.lookup(keyChar)) == null) ?
+ keyChar == textChar : set.contains(textChar));
+ }
+}
diff --git a/src/com/ibm/text/TransliterationRuleSet.java b/src/com/ibm/text/TransliterationRuleSet.java
new file mode 100755
index 0000000..ef18c34
--- /dev/null
+++ b/src/com/ibm/text/TransliterationRuleSet.java
@@ -0,0 +1,295 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:07:24 $
+ * $Revision: 1.9 $
+ *
+ *****************************************************************************************
+ */
+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 © IBM Corporation 1999. All rights reserved.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: TransliterationRuleSet.java,v $ $Revision: 1.9 $ $Date: 2000/03/10 04:07:24 $
+ *
+ * $Log: TransliterationRuleSet.java,v $
+ * 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, int start, int limit,
+ int cursor,
+ 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(cursor) & 0xFF;
+ for (int i=index[x]; i<index[x+1]; ++i) {
+ if (rules[i].matches(text, start, limit, cursor, 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, int start,
+ int limit, int cursor,
+ 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(cursor) & 0xFF;
+ for (int i=index[x]; i<index[x+1]; ++i) {
+ int match = rules[i].getMatchDegree(text, start, limit, cursor,
+ 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..500fd57
--- /dev/null
+++ b/src/com/ibm/text/Transliterator.java
@@ -0,0 +1,1007 @@
+/*
+ *******************************************************************************
+ * 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: 2000/03/10 04:07:24 $
+ * $Revision: 1.14 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text;
+
+import java.util.*;
+import java.text.MessageFormat;
+
+/**
+ * <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>{theta}<br>
+ * t>{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>|{tau}<br>
+ * {tau}h>{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>Subclassing</b>
+ *
+ * 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 © IBM Corporation 1999. All rights reserved.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: Transliterator.java,v $ $Revision: 1.14 $ $Date: 2000/03/10 04:07:24 $
+ */
+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;
+
+ /**
+ * start <= tstart <= cursor <= tlimit <= limit
+ */
+ public static class Position {
+ /**
+ * The beginning index, inclusive
+ */
+ public int start;
+
+ /**
+ * The ending index, exclusive
+ */
+ public int limit;
+
+ /**
+ * The next character to be considered for transliteration.
+ */
+ public int cursor;
+
+ /**
+ * The beginning index to be transliterated, inclusive
+ */
+ public int tstart;
+
+ /**
+ * The ending index to be transliterated, exclusive
+ */
+ public int tlimit;
+
+ public Position() {
+ this(0, 0, 0, 0, 0);
+ }
+
+ public Position(int start, int limit, int cursor) {
+ this(start, limit, cursor, start, limit);
+ }
+
+ public Position(int start, int limit, int cursor, int tstart, int tlimit) {
+ this.start = start;
+ this.limit = limit;
+ this.cursor = cursor;
+ this.tstart = tstart;
+ this.tlimit = tlimit;
+ }
+ }
+
+ /**
+ * 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;
+
+ /**
+ * Dictionary of known transliterators. Keys are <code>String</code>
+ * names, values are one of the following:
+ *
+ * <ul><li><code>Transliterator</code> objects
+ *
+ * <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>RULE_BASED_PLACEHOLDER</code>, in which case the ID
+ * will have its first '-' removed and be appended to
+ * RB_RULE_BASED_PREFIX to form a resource bundle name from which
+ * the RB_RULE key is looked up to obtain the rule.
+ *
+ * <li><code>REVERSE_RULE_BASED_PLACEHOLDER</code>. Like
+ * <code>RULE_BASED_PLACEHOLDER</code>, except the entity names in
+ * the ID are reversed, and the argument
+ * RuleBasedTransliterator.REVERSE is pased to the
+ * RuleBasedTransliterator constructor.
+ * </ul>
+ */
+ private static Hashtable cache;
+
+ private static Hashtable displayNameCache;
+
+ /**
+ * Internal object used to stand for instances of
+ * <code>RuleBasedTransliterator</code> that have not been
+ * constructed yet in the <code>cache</code>. When a
+ * <code>getInstance()</code> call retrieves this object, it is
+ * replaced by the actual <code>RuleBasedTransliterator</code>.
+ * This allows <code>Transliterator</code> to delay instantiation
+ * of such transliterators until they are needed.
+ */
+ private static final Object RULE_BASED_PLACEHOLDER = new Object();
+
+ /**
+ * Internal object used to stand for instances of
+ * <code>RuleBasedTransliterator</code> that have not been
+ * constructed yet in the <code>cache</code>. These instances are
+ * constructed with an argument
+ * <code>RuleBasedTransliterator.REVERSE</code>.
+ */
+ private static final Object REVERSE_RULE_BASED_PLACEHOLDER = new Object();
+
+ /**
+ * 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 key for the list of RuleBasedTransliterator IDs.
+ * The resource bundle value should be a String[] with each element
+ * being a valid ID. The ID will be appended to RB_RULE_BASED_PREFIX
+ * to obtain the class name in which the RB_RULE key will be sought.
+ */
+ private static final String RB_RULE_BASED_IDS = "RuleBasedTransliteratorIDs";
+
+ /**
+ * 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";
+
+ /**
+ * Prefix for resource bundle containing RuleBasedTransliterator
+ * RB_RULE string. The ID is munged to remove the first '-' then appended
+ * to this String to obtain the class name.
+ */
+ private static final String RB_RULE_BASED_PREFIX =
+ "com.ibm.text.resources.TransliterationRule_";
+
+ private static final char RB_RULE_BASED_SEPEATOR = '_';
+
+ /**
+ * Resource bundle key for the RuleBasedTransliterator rule.
+ */
+ private static final String RB_RULE = "Rule";
+
+ 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.limit;
+ }
+
+ /**
+ * 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.limit</code>, advancing
+ * <code>index.limit</code> by <code>insertion.length()</code>.
+ * Then the transliterator will try to transliterate characters of
+ * <code>text</code> between <code>index.cursor</code> and
+ * <code>index.limit</code>. Characters before
+ * <code>index.cursor</code> will not be changed.
+ *
+ * <p>Upon return, values in <code>index</code> will be updated.
+ * <code>index.start</code> will be advanced to the first
+ * character that future calls to this method will read.
+ * <code>index.cursor</code> and <code>index.limit</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.start</code> and <code>index.limit</code>
+ * set to indicate the portion of <code>text</code> to be
+ * transliterated, and <code>index.cursor == index.start</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 an array of three integers.
+ *
+ * <ul><li><code>index.start</code>: the beginning index,
+ * inclusive; <code>0 <= index.start <= index.limit</code>.
+ *
+ * <li><code>index.limit</code>: the ending index, exclusive;
+ * <code>index.start <= index.limit <= text.length()</code>.
+ * <code>insertion</code> is inserted at
+ * <code>index.limit</code>.
+ *
+ * <li><code>index.cursor</code>: the next character to be
+ * considered for transliteration; <code>index.start <=
+ * index.cursor <= index.limit</code>. Characters before
+ * <code>index.cursor</code> will not be changed by future calls
+ * to this method.</ul>
+ *
+ * @param insertion text to be inserted and possibly
+ * transliterated into the translation buffer at
+ * <code>index.limit</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.start < 0 ||
+ index.limit > text.length() ||
+ index.cursor < index.start ||
+ index.cursor > index.limit) {
+ throw new IllegalArgumentException("Invalid index");
+ }
+
+ int originalStart = index.start;
+ if (insertion != null) {
+ text.replace(index.limit, index.limit, insertion);
+ index.limit += insertion.length();
+ }
+
+ handleTransliterate(text, index, true);
+
+ index.start = Math.max(index.cursor - 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, Position, String)} for details.
+ * @param text the buffer holding transliterated and
+ * untransliterated text
+ * @param index an array of three integers. See {@link
+ * #transliterate(Replaceable, Position, String)}.
+ * @param insertion text to be inserted and possibly
+ * transliterated into the translation buffer at
+ * <code>index.limit</code>.
+ * @see #transliterate(Replaceable, 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, Position, String)} for
+ * details.
+ * @param text the buffer holding transliterated and
+ * untransliterated text
+ * @param index an array of three integers. See {@link
+ * #transliterate(Replaceable, Position, String)}.
+ * @see #transliterate(Replaceable, 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) {
+ if (index.start < 0 ||
+ index.limit > text.length() ||
+ index.cursor < index.start ||
+ index.cursor > index.limit) {
+ throw new IllegalArgumentException("Invalid index");
+ }
+
+ int originalStart = index.start;
+
+ handleTransliterate(text, index, false);
+
+ index.start = Math.max(index.cursor - getMaximumContextLength(),
+ originalStart);
+ }
+
+ /**
+ * Abstract method that concrete subclasses define to implement
+ * keyboard transliteration. This method should transliterate all
+ * characters between <code>index.cursor</code> and
+ * <code>index.limit</code> that can be unambiguously
+ * transliterated, regardless of future insertions of text at
+ * <code>index.limit</code>. <code>index.cursor</code> should
+ * be advanced past committed characters (those that will not
+ * change in future calls to this method).
+ * <code>index.limit</code> should be updated to reflect text
+ * replacements that shorten or lengthen the text between
+ * <code>index.cursor</code> and <code>index.limit</code>. Upon
+ * return, neither <code>index.cursor</code> nor
+ * <code>index.limit</code> should be less than the initial value
+ * of <code>index.cursor</code>. <code>index.start</code>
+ * should <em>not</em> be changed.
+ *
+ * @param text the buffer holding transliterated and
+ * untransliterated text
+ * @param index an array of three integers. See {@link
+ * #transliterate(Replaceable, Position, String)}.
+ * @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
+ */
+ 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
+ */
+ // changed MED
+ public static Transliterator getInstance(String ID, int direction) {
+ if (ID.indexOf(';') >= 0) {
+ return new CompoundTransliterator(ID, direction, null);
+ }
+ if (direction == REVERSE) {
+ int 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) {
+ return t;
+ }
+ throw new IllegalArgumentException("Unsupported transliterator: "
+ + ID);
+ }
+
+ public static final Transliterator getInstance(String ID) {
+ return getInstance(ID, FORWARD);
+ }
+
+ /*
+ foo(String pattern, ParsePosition pos, int direction) {
+ String id;
+ UnicodeSet filter = null;
+ int start = pos.getIndex();
+ int limit = pattern.length();
+ int i = pattern.indexOf(';', start);
+ if (i >= 0) {
+ limit = i;
+ }
+ i = pattern.indexOf('[', start);
+ if (i >= 0 && i < limit) {
+ limit = i;
+ pos.setIndex(i);
+ filter = new UnicodeSet(pattern, pos, null, null);
+ } else {
+ pos.setIndex(limit);
+ }
+ id = pattern.substring(start, limit);
+ 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 (filter != null) {
+ t.setFilter(filter);
+ }
+ }
+ */
+
+ /**
+ * 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) {
+ Object obj = cache.get(ID);
+ RuleBasedTransliterator.Data data = 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 {
+ synchronized (cache) {
+ boolean isReverse = (obj == REVERSE_RULE_BASED_PLACEHOLDER);
+ String resourceName = RB_RULE_BASED_PREFIX;
+ int i = ID.indexOf('-');
+ if (i < 0) {
+ resourceName += ID;
+ } else {
+ String IDLeft = ID.substring(0, i);
+ String IDRight = ID.substring(i+1);
+ resourceName += isReverse ? (IDRight + RB_RULE_BASED_SEPEATOR + IDLeft)
+ : (IDLeft + RB_RULE_BASED_SEPEATOR + IDRight);
+ }
+ try {
+ ResourceBundle resource = ResourceBundle.getBundle(resourceName);
+
+ // We allow the resource bundle to contain either an array
+ // of rules, or a single rule string.
+ String[] ruleArray;
+ try {
+ ruleArray = resource.getStringArray(RB_RULE);
+ } catch (Exception e) {
+ // This is a ClassCastException under JDK 1.1.8
+ ruleArray = new String[] { resource.getString(RB_RULE) };
+ }
+
+ data = RuleBasedTransliterator.parse(ruleArray,
+ isReverse
+ ? RuleBasedTransliterator.REVERSE
+ : RuleBasedTransliterator.FORWARD);
+
+ cache.put(ID, data);
+ // Fall through to construct transliterator from Data object.
+ } catch (MissingResourceException e) {}
+ }
+ }
+
+ if (data != null) {
+ return new RuleBasedTransliterator(ID, data, null);
+ }
+
+ return null;
+ }
+
+ /**
+ * 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+FFFF 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 : '\uFFFF');
+ }
+
+ static {
+ ResourceBundle bundle = ResourceBundle.getBundle(RB_LOCALE_ELEMENTS);
+
+ try {
+ String[] ruleBasedIDs = bundle.getStringArray(RB_RULE_BASED_IDS);
+
+ cache = new Hashtable();
+ displayNameCache = new Hashtable();
+
+ for (int i=0; i<ruleBasedIDs.length; ++i) {
+ String ID = ruleBasedIDs[i];
+ boolean isReverse = (ID.charAt(0) == '*');
+ if (isReverse) {
+ ID = ID.substring(1);
+ }
+ cache.put(ID, isReverse ? REVERSE_RULE_BASED_PLACEHOLDER
+ : RULE_BASED_PLACEHOLDER);
+ }
+ } catch (MissingResourceException e) {}
+
+ // 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/UInfo.java b/src/com/ibm/text/UInfo.java
new file mode 100755
index 0000000..5dd158b
--- /dev/null
+++ b/src/com/ibm/text/UInfo.java
@@ -0,0 +1,649 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/UInfo.java,v $
+ * $Date: 2000/03/10 04:07:24 $
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.text;
+
+import java.io.*;
+import java.util.*;
+
+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 will eventually be read from
+ // an auxiliary data file, but for now it's hardcoded
+ //
+ static final String composeExclude =
+ "\u0958\u0959\u095a\u095b\u095c\u095d\u095e\u095f" // Devanagari
+ + "\ufb1f\ufb2a\ufb2b\ufb2c\ufb2d\ufb2e\ufb2f" // Hebrew
+ + "\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"
+ ;
+
+ /**
+ * 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();
+ }
+
+ 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) {
+ 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 + "," + hex(ch) + ']');
+ cache[ch] = line;
+ }
+ } 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() {
+ this("../src/data/unicode/UnicodeData.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];
+ split(line,';',parts);
+ CharData info = new CharData();
+ char ch = charFrom(parts[0]);
+ info.name = parts[1];
+ info.category = (byte)lookup(parts[2], CATEGORY_TABLE);
+ info.canonical = shortFrom(parts[3]);
+ info.bidi = (byte)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 = 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];
+
+ //-------------------------------------------------------------------------
+ // Static utility methods....
+ //-------------------------------------------------------------------------
+ public static String hex(char ch) {
+ StringBuffer temp = new StringBuffer();
+ return hex(ch, temp).toString();
+ }
+
+ public static String hex(String s) {
+ StringBuffer temp = new StringBuffer();
+ return hex(s, temp).toString();
+ }
+
+ 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;
+ }
+
+ public static StringBuffer hex(String s, StringBuffer result) {
+ for (int i = 0; i < s.length(); ++i) {
+ if (i != 0) result.append(',');
+ result.append(hex(s.charAt(i)));
+ }
+ return result;
+ }
+
+ /**
+ * Split a string into pieces based on the given divider character
+ */
+ private 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
+ * string was found in the array, or -1 if it was not found.
+ */
+ private static int lookup(String source, String[] target) {
+ for (int i = 0; i < target.length; ++i) {
+ if (source.equals(target[i])) return i;
+ }
+ return -1;
+ }
+}
\ No newline at end of file
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..0e30849
--- /dev/null
+++ b/src/com/ibm/text/UnicodeSet.java
@@ -0,0 +1,1456 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:07:25 $
+ * $Revision: 1.16 $
+ *
+ *****************************************************************************************
+ */
+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>This class supports two APIs. The first is modeled after Java 2's
+ * <code>java.util.Set</code> interface, although this class does not
+ * 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>.
+ *
+ * <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 := </code></td>
+ * <td valign="top"><code>('[' '^'? item* ']') |
+ * ('[:' '^'? category ':]')</code></td>
+ * </tr>
+ * <tr align="top">
+ * <td nowrap valign="top" align="right"><code>item := </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 := </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 := </code></td>
+ * <td valign="top"><code>'&' | '-'<br>
+ * </code></td>
+ * </tr>
+ * <tr align="top">
+ * <td nowrap valign="top" align="right"><code>special := </code></td>
+ * <td valign="top"><code>'[' | ']' | '-'<br>
+ * </code></td>
+ * </tr>
+ * <tr align="top">
+ * <td nowrap valign="top" align="right"><code>char := </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 := </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 := </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"> </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.16 $ $Date: 2000/03/10 04:07:25 $
+ */
+public class UnicodeSet implements UnicodeFilter {
+ /**
+ * The internal representation is a StringBuffer of even length.
+ * Each pair of characters represents a range that is included in
+ * the set. A single character c is represented as cc. Thus, the
+ * ranges in the set are (a,b), a and b inclusive, where a =
+ * pairs.charAt(i) and b = pairs.charAt(i+1) for all even i, 0 <=
+ * i <= pairs.length()-2. Pairs are always stored in ascending
+ * Unicode order. Pairs are always stored in shortest form. For
+ * example, if the pair "hh", representing the single character
+ * 'h', is added to the pairs list "agik", representing the ranges
+ * 'a'-'g' and 'i'-'k', the result is "ak", not "aghhik".
+ *
+ * This representation format was originally used in Richard
+ * Gillam's CharSet class.
+ */
+ private StringBuffer pairs;
+
+ 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 char VARIABLE_REF_OPEN = '{';
+ private static final char VARIABLE_REF_CLOSE = '}';
+
+ private static final int CATEGORY_COUNT = 29;
+
+ /**
+ * A cache mapping character category integers, as returned by
+ * Character.getType(), to pairs strings. Entries are initially
+ * null and are created on demand.
+ */
+ private static final String[] CATEGORY_PAIRS_CACHE =
+ new String[CATEGORY_COUNT];
+
+ //----------------------------------------------------------------
+ // Debugging and testing
+ //----------------------------------------------------------------
+
+ /**
+ * Return the representation of this set as a list of character
+ * ranges. Ranges are listed in ascending Unicode order. For
+ * example, the set [a-zA-M3] is represented as "33AMaz".
+ */
+ public String getPairs() {
+ return pairs.toString();
+ }
+
+ //----------------------------------------------------------------
+ // Public API
+ //----------------------------------------------------------------
+
+ /**
+ * Constructs an empty set.
+ */
+ public UnicodeSet() {
+ pairs = new StringBuffer();
+ }
+
+ /**
+ * Constructs a copy of an existing set.
+ */
+ public UnicodeSet(UnicodeSet other) {
+ pairs = new StringBuffer(other.pairs.toString());
+ }
+
+ /**
+ * 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) {
+ 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 varNameToChar a mapping from variable names (String) to characters
+ * (Character). May be null. If varCharToSet is non-null, then names may
+ * map to either single characters or sets, depending on whether a mapping
+ * exists in varCharToSet. If varCharToSet is null then all names map to
+ * single characters.
+ * @param varCharToSet a mapping from characters (Character objects from
+ * varNameToChar) to UnicodeSet objects. May be null. Is only used if
+ * varNameToChar is also non-null.
+ * @exception java.lang.IllegalArgumentException if the pattern
+ * contains a syntax error.
+ */
+ public UnicodeSet(String pattern, ParsePosition pos, SymbolTable symbols) {
+ applyPattern(pattern, pos, symbols);
+ }
+
+ /**
+ * 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");
+ }
+ pairs = new StringBuffer(getCategoryPairs(category));
+ }
+
+ /**
+ * 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.
+ * 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);
+ pairs = parse(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);
+ }
+ }
+
+ /**
+ * Modifies this set to represent the set specified by the given pattern.
+ * @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 varNameToChar a mapping from variable names (String) to characters
+ * (Character). May be null. If varCharToSet is non-null, then names may
+ * map to either single characters or sets, depending on whether a mapping
+ * exists in varCharToSet. If varCharToSet is null then all names map to
+ * single characters.
+ * @param varCharToSet a mapping from characters (Character objects from
+ * varNameToChar) to UnicodeSet objects. May be null. Is only used if
+ * varNameToChar is also non-null.
+ * @exception java.lang.IllegalArgumentException if the pattern
+ * contains a syntax error.
+ */
+ private void applyPattern(String pattern, ParsePosition pos, SymbolTable symbols) {
+ pairs = parse(pattern, pos, symbols, true);
+ }
+
+ /**
+ * Modifies this set to represent the set specified by the given pattern.
+ * @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 varNameToChar a mapping from variable names (String) to characters
+ * (Character). May be null. If varCharToSet is non-null, then names may
+ * map to either single characters or sets, depending on whether a mapping
+ * exists in varCharToSet. If varCharToSet is null then all names map to
+ * single characters.
+ * @param varCharToSet a mapping from characters (Character objects from
+ * varNameToChar) to UnicodeSet objects. May be null. Is only used if
+ * varNameToChar is also non-null.
+ * @exception java.lang.IllegalArgumentException if the pattern
+ * contains a syntax error.
+ */
+ private void applyPattern(String pattern,
+ ParsePosition pos, SymbolTable symbols,
+ boolean ignoreWhitespace) {
+ pairs = parse(pattern, pos, symbols, ignoreWhitespace);
+ }
+
+ /**
+ * 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('[');
+
+ // iterate through the ranges in the UnicodeSet
+ for (int i=0; i<pairs.length(); i+=2) {
+ // for a range with the same beginning and ending point,
+ // output that character, otherwise, output the start and
+ // end points of the range separated by a dash
+ result.append(pairs.charAt(i));
+ if (pairs.charAt(i) != pairs.charAt(i+1)) {
+ result.append('-').append(pairs.charAt(i+1));
+ }
+ }
+
+ 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;
+ for (int i=0; i<pairs.length(); i+=2) {
+ n += pairs.charAt(i+1) - pairs.charAt(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 pairs.length() == 0;
+ }
+
+ /**
+ * Returns <tt>true</tt> if this set contains the specified range
+ * of chars.
+ *
+ * @return <tt>true</tt> if this set contains the specified range
+ * of chars.
+ */
+ public boolean contains(char first, char last) {
+ // Set i to the end of the smallest range such that its end
+ // point >= last, or pairs.length() if no such range exists.
+ int i = 1;
+ while (i<pairs.length() && last>pairs.charAt(i)) i+=2;
+ return i<pairs.length() && first>=pairs.charAt(i-1);
+ }
+
+ /**
+ * 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) {
+ return contains(c, c);
+ }
+
+ /**
+ * 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 pair of this set. Pairs 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<pairs.length(); i+=2) {
+ char low = pairs.charAt(i);
+ char high = pairs.charAt(i+1);
+ if ((low & 0xFF00) == (high & 0xFF00)) {
+ 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>last > first</code>
+ * then an empty range is added, leaving the set unchanged.
+ *
+ * @param first first character, inclusive, of range to be added
+ * to this set.
+ * @param last last character, inclusive, of range to be added
+ * to this set.
+ */
+ public void add(char first, char last) {
+ if (first <= last) {
+ addPair(pairs, first, last);
+ }
+ }
+
+ /**
+ * 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);
+ }
+
+ /**
+ * 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>last > first</code> then an empty range is
+ * removed, leaving the set unchanged.
+ *
+ * @param first first character, inclusive, of range to be removed
+ * from this set.
+ * @param last last character, inclusive, of range to be removed
+ * from this set.
+ */
+ public void remove(char first, char last) {
+ if (first <= last) {
+ removePair(pairs, first, last);
+ }
+ }
+
+ /**
+ * Removes the specified character from this set if it is present.
+ * The set will not contain the specified range once the call
+ * returns.
+ */
+ public final void remove(char c) {
+ remove(c, c);
+ }
+
+ /**
+ * Returns <tt>true</tt> if the specified set is a <i>subset</i>
+ * 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.
+ int i = 1;
+ for (int j=0; j<c.pairs.length(); j+=2) {
+ char last = c.pairs.charAt(j+1);
+ // Set i to the end of the smallest range such that its
+ // end point >= last, or pairs.length() if no such range
+ // exists.
+ while (i<pairs.length() && last>pairs.charAt(i)) i+=2;
+ if (i>pairs.length() || c.pairs.charAt(j) < pairs.charAt(i-1)) {
+ 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) {
+ doUnion(pairs, c.pairs.toString());
+ }
+
+ /**
+ * 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) {
+ doIntersection(pairs, c.pairs.toString());
+ }
+
+ /**
+ * 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) {
+ doDifference(pairs, c.pairs.toString());
+ }
+
+ /**
+ * Inverts this set. This operation modifies this set so that
+ * its value is its complement. This is equivalent to the pseudo code:
+ * <code>this = new UnicodeSet("[\u0000-\uFFFF]").removeAll(this)</code>.
+ */
+ public void complement() {
+ doComplement(pairs);
+ }
+
+ /**
+ * Removes all of the elements from this set. This set will be
+ * empty after this call returns.
+ */
+ public void clear() {
+ pairs.setLength(0);
+ }
+
+ /**
+ * 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) {
+ return o instanceof UnicodeSet &&
+ pairs.toString().equals(((UnicodeSet)o).pairs.toString());
+ }
+
+ /**
+ * Returns the hash code value for this set.
+ *
+ * @return the hash code value for this set.
+ * @see Object#hashCode()
+ */
+ public int hashCode() {
+ return pairs.hashCode();
+ }
+
+ /**
+ * 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 a StringBuffer
+ * containing a pairs 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 a StringBuffer containing a pairs list for the parsed substring
+ * of <code>pattern</code>
+ * @exception java.lang.IllegalArgumentException if the parse fails.
+ */
+ private static StringBuffer parse(String pattern, ParsePosition pos,
+ SymbolTable symbols, boolean ignoreWhitespace) {
+
+ StringBuffer pairsBuf = new StringBuffer();
+ boolean invert = false;
+
+ 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();
+ for (; i<limit; ++i) {
+ /* If the next element is a single character, c will be set to it,
+ * and nestedPairs 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
+ * nestedPairs will be set to the pairs list for the nested set, and
+ * c's value should be ignored.
+ */
+ char c = pattern.charAt(i);
+ String nestedPairs = null;
+ boolean isLiteral = false;
+
+ // Ignore whitespace. This is not Unicode whitespace, but Java
+ // whitespace, a subset of Unicode whitespace.
+ if (ignoreWhitespace && Character.isWhitespace(c)) {
+ continue;
+ }
+
+ // 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 ":]".
+
+ /* 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, nestedPairs is assigned here.
+ * 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 == VARIABLE_REF_OPEN) {
+ ++i;
+ int j = pattern.indexOf(VARIABLE_REF_CLOSE, i);
+ if (i == j || j < 0) { // empty or unterminated
+ throw new IllegalArgumentException("Illegal variable reference");
+ }
+ String name = pattern.substring(i, j);
+ Object obj = symbols.lookup(name);
+ if (obj == null) {
+ throw new IllegalArgumentException("Undefined variable: "
+ + name);
+ }
+ isLiteral = true;
+ if (obj instanceof Character) {
+ c = ((Character) obj).charValue();
+ } else {
+ nestedPairs = ((UnicodeSet) obj).pairs.toString();
+ }
+ i = j; // Make i point at closing '}'
+ }
+
+ /* 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 nestedPairs 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 \":]\"");
+ }
+ nestedPairs = getCategoryPairs(pattern.substring(i, j));
+ i = j+1; // Make i point to ']' in ":]"
+ if (mode == 3) {
+ // Entire pattern is a category; leave parse loop
+ pairsBuf.append(nestedPairs);
+ break;
+ }
+ } else {
+ // Recurse to get the pairs for this nested set.
+ pos.setIndex(i); // Add 2 to point AFTER op
+ nestedPairs = parse(pattern, pos, symbols, ignoreWhitespace).toString();
+ 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 nestedPairs, 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 (nestedPairs != null) {
+ if (lastChar >= 0) {
+ if (lastOp != 0) {
+ throw new IllegalArgumentException("Illegal rhs for " + lastChar + lastOp);
+ }
+ addPair(pairsBuf, (char)lastChar, (char)lastChar);
+ lastChar = -1;
+ }
+ switch (lastOp) {
+ case '-':
+ doDifference(pairsBuf, nestedPairs);
+ break;
+ case '&':
+ doIntersection(pairsBuf, nestedPairs);
+ break;
+ case 0:
+ doUnion(pairsBuf, nestedPairs);
+ 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.
+ break;
+ } else if (lastOp == 0 && !isLiteral && (c == '-' || c == '&')) {
+ lastOp = c;
+ } else if (lastOp == '-') {
+ addPair(pairsBuf, (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>
+ addPair(pairsBuf, (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
+ addPair(pairsBuf, lastOp, lastOp);
+ } else if (lastOp == '&') {
+ throw new IllegalArgumentException("Unquoted trailing " + lastOp);
+ }
+ if (lastChar >= 0) {
+ addPair(pairsBuf, (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) {
+ doComplement(pairsBuf);
+ }
+
+ /**
+ * 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);
+
+ return pairsBuf;
+ }
+
+ //----------------------------------------------------------------
+ // Implementation: Efficient in-place union & difference
+ //----------------------------------------------------------------
+
+ /**
+ * Performs a union operation: adds the range 'c'-'d' to the given
+ * pairs list. The pairs list is modified in place. The result
+ * is normalized (in order and as short as possible). For
+ * example, addPair("am", 'l', 'q') => "aq". addPair("ampz", 'n',
+ * 'o') => "az".
+ */
+ private static void addPair(StringBuffer pairs, char c, char d) {
+ char a = 0;
+ char b = 0;
+ for (int i=0; i<pairs.length(); i+=2) {
+ char e = pairs.charAt(i);
+ char f = pairs.charAt(i+1);
+ if (e <= (d+1) && c <= (f+1)) {
+ // Merge with this range
+ f = (char) Math.max(d, f);
+
+ // Check to see if we need to merge with the
+ // subsequent range also. This happens if we have
+ // "abdf" and are merging in "cc". We only need to
+ // check on the right side -- never on the left.
+ if ((i+2) < pairs.length() &&
+ pairs.charAt(i+2) == (f+1)) {
+ f = pairs.charAt(i+3);
+ stringBufferDelete(pairs, i+2, i+4);
+ }
+ pairs.setCharAt(i, (char) Math.min(c, e));
+ pairs.setCharAt(i+1, f);
+ return;
+ } else if ((b+1) < c && (d+1) < e) {
+ // Insert before this range
+ pairs.insert(i, new char[] { c, d });
+ return;
+ }
+ a = e;
+ b = f;
+ }
+ // If nothing else, fall through and append this new range to
+ // the end.
+ pairs.append(c).append(d);
+ }
+
+ /**
+ * Performs an asymmetric difference: removes the range 'c'-'d'
+ * from the pairs list. The pairs list is modified in place. The
+ * result is normalized (in order and as short as possible). For
+ * example, removePair("am", 'l', 'q') => "ak".
+ * removePair("ampz", 'l', 'q') => "akrz".
+ */
+ private static void removePair(StringBuffer pairs, char c, char d) {
+ // Iterate over pairs until we find a pair that overlaps
+ // with the given range.
+ for (int i=0; i<pairs.length(); i+=2) {
+ char b = pairs.charAt(i+1);
+ if (b < c) {
+ // Range at i is entirely before the given range,
+ // since we have a-b < c-d. No overlap yet...keep
+ // iterating.
+ continue;
+ }
+ char a = pairs.charAt(i);
+ if (d < a) {
+ // Range at i is entirely after the given range; c-d <
+ // a-b. Since ranges are in order, nothing else will
+ // overlap.
+ break;
+ }
+ // Once we get here, we know c <= b and d >= a.
+ // rangeEdited is set to true if we have modified the
+ // range a-b (the range at i) in place.
+ boolean rangeEdited = false;
+ if (c > a) {
+ // If c is after a and before b, then we have overlap
+ // of this sort: a--c==b--d or a--c==d--b, where a-b
+ // and c-d are the ranges of interest. We need to
+ // add the range a,c-1.
+ pairs.setCharAt(i+1, (char)(c-1));
+ // i is already a
+ rangeEdited = true;
+ }
+ if (d < b) {
+ // If d is after a and before b, we overlap like this:
+ // c--a==d--b or a--c==d--b, where a-b is the range at
+ // i and c-d is the range being removed. We need to
+ // add the range d+1,b.
+ if (rangeEdited) {
+ pairs.insert(i+2, new char[] { (char)(d+1), b });
+ i += 2;
+ } else {
+ pairs.setCharAt(i, (char)(d+1));
+ // i+1 is already b
+ rangeEdited = true;
+ }
+ }
+ if (!rangeEdited) {
+ // If we didn't add any ranges, that means the entire
+ // range a-b must be deleted, since we have
+ // c--a==b--d.
+ stringBufferDelete(pairs, i, i+2);
+ i -= 2;
+ }
+ }
+ }
+
+ //----------------------------------------------------------------
+ // Implementation: Fundamental operators
+ //----------------------------------------------------------------
+
+ /**
+ * Changes the pairs list to represent the complement of the set it
+ * currently represents. The pairs list will be normalized (in
+ * order and in shortest possible form) if the original pairs list
+ * was normalized.
+ */
+ private static void doComplement(StringBuffer pairs) {
+ if (pairs.length() == 0) {
+ pairs.append('\u0000').append('\uffff');
+ return;
+ }
+
+ // Change each end to a start and each start to an end of the
+ // gaps between the ranges. That is, 3-7 9-12 becomes x-2 8-8
+ // 13-x, where 'x' represents a range that must now be fixed
+ // up.
+ for (int i=0; i<pairs.length(); i+=2) {
+ pairs.setCharAt(i, (char) (pairs.charAt(i) - 1));
+ pairs.setCharAt(i+1, (char) (pairs.charAt(i+1) + 1));
+ }
+
+ // Fix up the initial range, either by adding a start point of
+ // U+0000, or by deleting the range altogether, if the
+ // original range was U+0000 - x.
+ if (pairs.charAt(0) == '\uFFFF') {
+ stringBufferDelete(pairs, 0, 1);
+ } else {
+ pairs.insert(0, '\u0000');
+ }
+
+ // Fix up the final range, either by adding an end point of
+ // U+FFFF, or by deleting the range altogether, if the
+ // original range was x - U+FFFF.
+ if (pairs.charAt(pairs.length() - 1) == '\u0000') {
+ pairs.setLength(pairs.length() - 1);
+ } else {
+ pairs.append('\uFFFF');
+ }
+ }
+
+ /**
+ * Given two pairs lists, changes the first in place to represent
+ * the union of the two sets.
+ *
+ * This implementation format was stolen from Richard Gillam's
+ * CharSet class.
+ */
+ private static void doUnion(StringBuffer pairs, String c2) {
+ StringBuffer result = new StringBuffer();
+ String c1 = pairs.toString();
+
+ int i = 0;
+ int j = 0;
+
+ // consider all the characters in both strings
+ while (i < c1.length() && j < c2.length()) {
+ char ub;
+
+ // the first character in the result is the lower of the
+ // starting characters of the two strings, and "ub" gets
+ // set to the upper bound of that range
+ if (c1.charAt(i) < c2.charAt(j)) {
+ result.append(c1.charAt(i));
+ ub = c1.charAt(++i);
+ }
+ else {
+ result.append(c2.charAt(j));
+ ub = c2.charAt(++j);
+ }
+
+ // for as long as one of our two pointers is pointing to a range's
+ // end point, or i is pointing to a character that is less than
+ // "ub" plus one (the "plus one" stitches touching ranges together)...
+ while (i % 2 == 1 || j % 2 == 1 || (i < c1.length() && c1.charAt(i)
+ <= ub + 1)) {
+ // advance i to the first character that is greater than
+ // "ub" plus one
+ while (i < c1.length() && c1.charAt(i) <= ub + 1)
+ ++i;
+
+ // if i points to the endpoint of a range, update "ub"
+ // to that character, or if i points to the start of
+ // a range and the endpoint of the preceding range is
+ // greater than "ub", update "up" to _that_ character
+ if (i % 2 == 1)
+ ub = c1.charAt(i);
+ else if (i > 0 && c1.charAt(i - 1) > ub)
+ ub = c1.charAt(i - 1);
+
+ // now advance j to the first character that is greater
+ // that "ub" plus one
+ while (j < c2.length() && c2.charAt(j) <= ub + 1)
+ ++j;
+
+ // if j points to the endpoint of a range, update "ub"
+ // to that character, or if j points to the start of
+ // a range and the endpoint of the preceding range is
+ // greater than "ub", update "up" to _that_ character
+ if (j % 2 == 1)
+ ub = c2.charAt(j);
+ else if (j > 0 && c2.charAt(j - 1) > ub)
+ ub = c2.charAt(j - 1);
+ }
+ // when we finally fall out of this loop, we will have stitched
+ // together a series of ranges that overlap or touch, i and j
+ // will both point to starting points of ranges, and "ub" will
+ // be the endpoint of the range we're working on. Write "ub"
+ // to the result
+ result.append(ub);
+
+ // loop back around to create the next range in the result
+ }
+
+ // we fall out to here when we've exhausted all the characters in
+ // one of the operands. We can append all of the remaining characters
+ // in the other operand without doing any extra work.
+ if (i < c1.length())
+ result.append(c1.substring(i));
+ if (j < c2.length())
+ result.append(c2.substring(j));
+
+ pairs.setLength(0);
+ pairs.append(result.toString());
+ }
+
+ /**
+ * Given two pairs lists, changes the first in place to represent
+ * the asymmetric difference of the two sets.
+ */
+ private static void doDifference(StringBuffer pairs, String pairs2) {
+ StringBuffer p2 = new StringBuffer(pairs2);
+ doComplement(p2);
+ doIntersection(pairs, p2.toString());
+ }
+
+ /**
+ * Given two pairs lists, changes the first in place to represent
+ * the intersection of the two sets.
+ *
+ * This implementation format was stolen from Richard Gillam's
+ * CharSet class.
+ */
+ private static void doIntersection(StringBuffer pairs, String c2) {
+ StringBuffer result = new StringBuffer();
+ String c1 = pairs.toString();
+
+ int i = 0;
+ int j = 0;
+ int oldI;
+ int oldJ;
+
+ // iterate until we've exhausted one of the operands
+ while (i < c1.length() && j < c2.length()) {
+
+ // advance j until it points to a character that is larger than
+ // the one i points to. If this is the beginning of a one-
+ // character range, advance j to point to the end
+ if (i < c1.length() && i % 2 == 0) {
+ while (j < c2.length() && c2.charAt(j) < c1.charAt(i))
+ ++j;
+ if (j < c2.length() && j % 2 == 0 && c2.charAt(j) == c1.charAt(i))
+ ++j;
+ }
+
+ // if j points to the endpoint of a range, save the current
+ // value of i, then advance i until it reaches a character
+ // which is larger than the character pointed at
+ // by j. All of the characters we've advanced over (except
+ // the one currently pointed to by i) are added to the result
+ oldI = i;
+ while (j % 2 == 1 && i < c1.length() && c1.charAt(i) <= c2.charAt(j))
+ ++i;
+ result.append(c1.substring(oldI, i));
+
+ // if i points to the endpoint of a range, save the current
+ // value of j, then advance j until it reaches a character
+ // which is larger than the character pointed at
+ // by i. All of the characters we've advanced over (except
+ // the one currently pointed to by i) are added to the result
+ oldJ = j;
+ while (i % 2 == 1 && j < c2.length() && c2.charAt(j) <= c1.charAt(i))
+ ++j;
+ result.append(c2.substring(oldJ, j));
+
+ // advance i until it points to a character larger than j
+ // If it points at the beginning of a one-character range,
+ // advance it to the end of that range
+ if (j < c2.length() && j % 2 == 0) {
+ while (i < c1.length() && c1.charAt(i) < c2.charAt(j))
+ ++i;
+ if (i < c1.length() && i % 2 == 0 && c2.charAt(j) == c1.charAt(i))
+ ++i;
+ }
+ }
+
+ pairs.setLength(0);
+ pairs.append(result.toString());
+ }
+
+ //----------------------------------------------------------------
+ // Implementation: Generation of pairs for Unicode categories
+ //----------------------------------------------------------------
+
+ /**
+ * Returns a pairs string for 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 static String getCategoryPairs(String catName) {
+ boolean invert = (catName.length() > 1 &&
+ catName.charAt(0) == '^');
+ if (invert) {
+ catName = catName.substring(1);
+ }
+
+ StringBuffer cat = null;
+
+ // 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) {
+ String pairs = getCategoryPairs(i);
+ if (!invert) {
+ return pairs;
+ }
+ cat = new StringBuffer(pairs);
+ }
+ }
+ } 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)
+ for (int i=0; i<CATEGORY_COUNT; ++i) {
+ if (i != UNSUPPORTED_CATEGORY &&
+ CATEGORY_NAMES.charAt(2*i) == catName.charAt(0)) {
+ String pairs = getCategoryPairs(i);
+ if (cat == null) {
+ cat = new StringBuffer(pairs);
+ } else {
+ doUnion(cat, pairs);
+ }
+ }
+ }
+ }
+
+ if (cat == null) {
+ throw new IllegalArgumentException("Bad category");
+ }
+
+ if (invert) {
+ doComplement(cat);
+ }
+ return cat.toString();
+ }
+
+ /**
+ * Returns a pairs string for the given category. This string is
+ * cached and returned again if this method is called again with
+ * the same parameter.
+ */
+ private static String getCategoryPairs(int cat) {
+ if (CATEGORY_PAIRS_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. Since we are
+ // iterating in order, we can simply append the resulting
+ // ranges to the pairs string.
+ StringBuffer pairs = new StringBuffer();
+ int first = -1;
+ int last = -2;
+ for (int i=0; i<=0xFFFF; ++i) {
+ if (Character.getType((char)i) == cat) {
+ if ((last+1) == i) {
+ last = i;
+ } else {
+ if (first >= 0) {
+ pairs.append((char)first).append((char)last);
+ }
+ first = last = i;
+ }
+ }
+ }
+ if (first >= 0) {
+ pairs.append((char)first).append((char)last);
+ }
+ CATEGORY_PAIRS_CACHE[cat] = pairs.toString();
+ }
+ return CATEGORY_PAIRS_CACHE[cat];
+ }
+
+ //----------------------------------------------------------------
+ // Implementation: Utility methods
+ //----------------------------------------------------------------
+
+ /**
+ * Returns the character after the given position, or '\uFFFF' if
+ * there is none.
+ */
+ private static final char charAfter(String str, int i) {
+ return ((++i) < str.length()) ? str.charAt(i) : '\uFFFF';
+ }
+
+ /**
+ * Deletes a range of character from a StringBuffer, from start to
+ * limit-1. This is not part of JDK 1.1 StringBuffer, but is
+ * present in Java 2.
+ * @param start inclusive start of range
+ * @param limit exclusive end of range
+ */
+ private static void stringBufferDelete(StringBuffer buf,
+ int start, int limit) {
+ // In Java 2 just use:
+ // buf.delete(start, limit);
+ char[] chars = null;
+ if (buf.length() > limit) {
+ chars = new char[buf.length() - limit];
+ buf.getChars(limit, buf.length(), chars, 0);
+ }
+ buf.setLength(start);
+ if (chars != null) {
+ buf.append(chars);
+ }
+ }
+}
diff --git a/src/com/ibm/text/UnicodeToHexTransliterator.java b/src/com/ibm/text/UnicodeToHexTransliterator.java
new file mode 100755
index 0000000..ea719ab
--- /dev/null
+++ b/src/com/ibm/text/UnicodeToHexTransliterator.java
@@ -0,0 +1,158 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:07:25 $
+ * $Revision: 1.5 $
+ *
+ *****************************************************************************************
+ */
+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>Copyright © IBM Corporation 1999. All rights reserved.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: UnicodeToHexTransliterator.java,v $ $Revision: 1.5 $ $Date: 2000/03/10 04:07:25 $
+ */
+public class UnicodeToHexTransliterator extends Transliterator {
+
+ /**
+ * Package accessible ID for this transliterator.
+ */
+ static String _ID = "Unicode-Hex";
+
+ private String prefix;
+
+ private boolean uppercase;
+
+ private static final String COPYRIGHT =
+ "\u00A9 IBM Corporation 1999. All rights reserved.";
+
+ /**
+ * Constructs a transliterator.
+ * @param prefix the string that will precede the four hex
+ * digits for UNICODE_HEX transliterators. Ignored
+ * if direction is HEX_UNICODE.
+ * @param uppercase if true, the four hex digits will be
+ * converted to uppercase; otherwise they will be lowercase.
+ * Ignored if direction is HEX_UNICODE.
+ */
+ public UnicodeToHexTransliterator(String prefix, boolean uppercase,
+ UnicodeFilter filter) {
+ super(_ID, filter);
+ this.prefix = prefix;
+ this.uppercase = uppercase;
+ }
+
+ /**
+ * Constructs a transliterator with the default prefix "\u"
+ * that outputs uppercase hex digits.
+ */
+ public UnicodeToHexTransliterator() {
+ this("\\u", true, null);
+ }
+
+ /**
+ * 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.cursor;
+ int limit = offsets.limit;
+
+ UnicodeFilter filter = getFilter();
+
+ loop:
+ while (cursor < limit) {
+ char c = text.charAt(cursor);
+ if (filter != null && !filter.contains(c)) {
+ ++cursor;
+ continue;
+ }
+ String hex = hex(c);
+ text.replace(cursor, cursor+1, hex);
+ int len = hex.length();
+ cursor += len; // Advance cursor by 1 and adjust for new text
+ --len;
+ limit += len;
+ }
+
+ offsets.limit = limit;
+ offsets.cursor = cursor;
+ }
+
+ /**
+ * Form escape sequence.
+ */
+ private final String hex(char c) {
+ StringBuffer buf = new StringBuffer();
+ buf.append(prefix);
+ if (c < 0x1000) {
+ buf.append('0');
+ if (c < 0x100) {
+ buf.append('0');
+ if (c < 0x10) {
+ buf.append('0');
+ }
+ }
+ }
+ String h = Integer.toHexString(c);
+ buf.append(uppercase ? h.toUpperCase() : h);
+ return buf.toString();
+ }
+}
diff --git a/src/com/ibm/text/components/AppletFrame.java b/src/com/ibm/text/components/AppletFrame.java
new file mode 100755
index 0000000..3795c24
--- /dev/null
+++ b/src/com/ibm/text/components/AppletFrame.java
@@ -0,0 +1,138 @@
+/*
+ *******************************************************************************
+ * 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: 2000/03/10 04:07:26 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.components;
+import java.applet.*;
+import java.net.URL;
+import java.util.Enumeration;
+import java.awt.*;
+import java.awt.event.*;
+
+/**
+ * <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 © IBM Corporation 1999. All rights reserved.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: AppletFrame.java,v $ $Revision: 1.2 $ $Date: 2000/03/10 04:07:26 $
+ */
+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);
+ }
+}
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..374c75d
--- /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/03/10 04:07:26 $
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+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 © IBM Corporation 1999. All rights reserved.
+ *
+ * @author Alan Liu
+ * @version $RCSfile: TransliteratingTextComponent.java,v $ $Revision: 1.3 $ $Date: 2000/03/10 04:07:26 $
+ */
+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.getStringBuffer().append(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.start + ", " + index.limit + ", " + index.cursor + "}, ");
+ 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.start;
+
+ // Make the cursor getText()-based. The CURSOR index is zero-based.
+ cursor = start + index.cursor - index.start;
+
+ if (DEBUG) {
+ String out = buf.toString();
+ log.append(out.substring(0, index.start)).
+ append('{').
+ append(out.substring(index.start, index.cursor)).
+ append('|').
+ append(out.substring(index.cursor)).
+ append('"');
+ log.append(", {" + index.start + ", " + index.limit + ", " + index.cursor + "}, ");
+ 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/resources/BreakIteratorRules.java b/src/com/ibm/text/resources/BreakIteratorRules.java
new file mode 100755
index 0000000..3763ea0
--- /dev/null
+++ b/src/com/ibm/text/resources/BreakIteratorRules.java
@@ -0,0 +1,328 @@
+/*
+ *******************************************************************************
+ * 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: 2000/03/10 04:07:26 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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)
+ "$ignore=[[:Mn:][: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}*;"
+
+ // various additions for Hindi support
+ + "nukta=[\u093c];"
+ + "danda=[\u0964\u0965];"
+ + "virama=[\u094d];"
+ + "devVowelSign=[\u093e-\u094c\u0962\u0963];"
+ + "devConsonant=[\u0915-\u0939];"
+ + "devNuktaConsonant=[\u0958-\u095f];"
+ + "devCharEnd=[\u0902\u0903\u0951-\u0954];"
+ + "zwj=[\u200d];"
+
+ + "devCAMN=({devConsonant}{nukta}?);"
+ + "devConsonant1=({devNuktaConsonant}|{devCAMN});"
+ + "devConjunct=(({devConsonant1}{virama}{zwj}?)?{devConsonant1});"
+
+ + "{devConjunct}{devVowelSign}?{devCharEnd}?;"
+ + "{danda}{nukta};"
+ },
+
+ // 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..c766a48
--- /dev/null
+++ b/src/com/ibm/text/resources/BreakIteratorRules_th.java
@@ -0,0 +1,110 @@
+/*
+ *******************************************************************************
+ * 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: 2000/03/10 04:07:26 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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}/([^\u0e25{$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..1dea2b7
--- /dev/null
+++ b/src/com/ibm/text/resources/LocaleElements.java
@@ -0,0 +1,81 @@
+/*
+ *******************************************************************************
+ * 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: 2000/03/10 04:07:27 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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
+ },
+ { "RuleBasedTransliteratorIDs",
+ /* These IDs must have the form "From-To" or "SingleName".
+ * The ID "From-To" will be sought in the resource bundle
+ * TransliteratorRuleFromTo.java in the resources package.
+ * The ID "SingleName" will be sought in
+ * TransliteratorSingleName.java. In addition, a reverse
+ * transliterator may be specified using "*To-From", which
+ * indicates TransliteratorRuleFromTo.java with a
+ * RuleBasedTransliterator.REVERSE constructor parameter.
+ */
+ new String[] {
+
+ // Bidirectional rules
+
+ "Fullwidth-Halfwidth",
+ "*Halfwidth-Fullwidth",
+
+ "Latin-Arabic",
+ "*Arabic-Latin",
+
+ "Latin-Cyrillic",
+ "*Cyrillic-Latin",
+
+ "Latin-Devanagari",
+ "*Devanagari-Latin",
+
+ "Latin-Greek",
+ "*Greek-Latin",
+
+ "Latin-Hebrew",
+ "*Hebrew-Latin",
+
+ "Latin-Jamo",
+ "*Jamo-Latin",
+
+ "Latin-Kana",
+ "*Kana-Latin",
+
+ "StraightQuotes-CurlyQuotes",
+ "*CurlyQuotes-StraightQuotes",
+
+ // One way rules (forward only)
+
+ "Han-Pinyin",
+ "Kanji-English",
+ "Kanji-OnRomaji",
+ "KeyboardEscape-Latin1",
+ "UnicodeName-UnicodeChar"
+ }
+ },
+ };
+ }
+}
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/TransliterationRule_Fullwidth_Halfwidth.java b/src/com/ibm/text/resources/TransliterationRule_Fullwidth_Halfwidth.java
new file mode 100755
index 0000000..9bb2653
--- /dev/null
+++ b/src/com/ibm/text/resources/TransliterationRule_Fullwidth_Halfwidth.java
@@ -0,0 +1,288 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/TransliterationRule_Fullwidth_Halfwidth.java,v $
+ * $Date: 2000/03/10 04:07:29 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+public class TransliterationRule_Fullwidth_Halfwidth extends ListResourceBundle {
+ /**
+ * Overrides ListResourceBundle
+ */
+ public Object[][] getContents() {
+ return new Object[][] {
+ { "Rule", ""
+
+ /* Mechanically generated from Unicode Character Database
+ */
+
+ // multicharacter
+
+ + "\u30AC<>\uFF76\uFF9E;" // to KATAKANA LETTER GA
+ + "\u30AE<>\uFF77\uFF9E;" // to KATAKANA LETTER GI
+ + "\u30B0<>\uFF78\uFF9E;" // to KATAKANA LETTER GU
+ + "\u30B2<>\uFF79\uFF9E;" // to KATAKANA LETTER GE
+ + "\u30B4<>\uFF7A\uFF9E;" // to KATAKANA LETTER GO
+ + "\u30B6<>\uFF7B\uFF9E;" // to KATAKANA LETTER ZA
+ + "\u30B8<>\uFF7C\uFF9E;" // to KATAKANA LETTER ZI
+ + "\u30BA<>\uFF7D\uFF9E;" // to KATAKANA LETTER ZU
+ + "\u30BC<>\uFF7E\uFF9E;" // to KATAKANA LETTER ZE
+ + "\u30BE<>\uFF7F\uFF9E;" // to KATAKANA LETTER ZO
+ + "\u30C0<>\uFF80\uFF9E;" // to KATAKANA LETTER DA
+ + "\u30C2<>\uFF81\uFF9E;" // to KATAKANA LETTER DI
+ + "\u30C5<>\uFF82\uFF9E;" // to KATAKANA LETTER DU
+ + "\u30C7<>\uFF83\uFF9E;" // to KATAKANA LETTER DE
+ + "\u30C9<>\uFF84\uFF9E;" // to KATAKANA LETTER DO
+ + "\u30D0<>\uFF8A\uFF9E;" // to KATAKANA LETTER BA
+ + "\u30D1<>\uFF8A\uFF9F;" // to KATAKANA LETTER PA
+ + "\u30D3<>\uFF8B\uFF9E;" // to KATAKANA LETTER BI
+ + "\u30D4<>\uFF8B\uFF9F;" // to KATAKANA LETTER PI
+ + "\u30D6<>\uFF8C\uFF9E;" // to KATAKANA LETTER BU
+ + "\u30D7<>\uFF8C\uFF9F;" // to KATAKANA LETTER PU
+ + "\u30D9<>\uFF8D\uFF9E;" // to KATAKANA LETTER BE
+ + "\u30DA<>\uFF8D\uFF9F;" // to KATAKANA LETTER PE
+ + "\u30DC<>\uFF8E\uFF9E;" // to KATAKANA LETTER BO
+ + "\u30DD<>\uFF8E\uFF9F;" // to KATAKANA LETTER PO
+ + "\u30F4<>\uFF73\uFF9E;" // to KATAKANA LETTER VU
+ + "\u30F7<>\uFF9C\uFF9E;" // to KATAKANA LETTER VA
+ + "\u30FA<>\uFF66\uFF9E;" // to KATAKANA LETTER VO
+
+ // single character
+
+ + "\uFF01<>'!';" // from FULLWIDTH EXCLAMATION MARK
+ + "\uFF02<>'\"';" // from FULLWIDTH QUOTATION MARK
+ + "\uFF03<>'#';" // from FULLWIDTH NUMBER SIGN
+ + "\uFF04<>'$';" // from FULLWIDTH DOLLAR SIGN
+ + "\uFF05<>'%';" // from FULLWIDTH PERCENT SIGN
+ + "\uFF06<>'&';" // from FULLWIDTH AMPERSAND
+ + "\uFF07<>'';" // from FULLWIDTH APOSTROPHE
+ + "\uFF08<>'(';" // from FULLWIDTH LEFT PARENTHESIS
+ + "\uFF09<>')';" // from FULLWIDTH RIGHT PARENTHESIS
+ + "\uFF0A<>'*';" // from FULLWIDTH ASTERISK
+ + "\uFF0B<>'+';" // from FULLWIDTH PLUS SIGN
+ + "\uFF0C<>',';" // from FULLWIDTH COMMA
+ + "\uFF0D<>'-';" // from FULLWIDTH HYPHEN-MINUS
+ + "\uFF0E<>'.';" // from FULLWIDTH FULL STOP
+ + "\uFF0F<>'/';" // from FULLWIDTH SOLIDUS
+ + "\uFF10<>'0';" // from FULLWIDTH DIGIT ZERO
+ + "\uFF11<>'1';" // from FULLWIDTH DIGIT ONE
+ + "\uFF12<>'2';" // from FULLWIDTH DIGIT TWO
+ + "\uFF13<>'3';" // from FULLWIDTH DIGIT THREE
+ + "\uFF14<>'4';" // from FULLWIDTH DIGIT FOUR
+ + "\uFF15<>'5';" // from FULLWIDTH DIGIT FIVE
+ + "\uFF16<>'6';" // from FULLWIDTH DIGIT SIX
+ + "\uFF17<>'7';" // from FULLWIDTH DIGIT SEVEN
+ + "\uFF18<>'8';" // from FULLWIDTH DIGIT EIGHT
+ + "\uFF19<>'9';" // from FULLWIDTH DIGIT NINE
+ + "\uFF1A<>':';" // from FULLWIDTH COLON
+ + "\uFF1B<>';';" // from FULLWIDTH SEMICOLON
+ + "\uFF1C<>'<';" // from FULLWIDTH LESS-THAN SIGN
+ + "\uFF1D<>'=';" // from FULLWIDTH EQUALS SIGN
+ + "\uFF1E<>'>';" // from FULLWIDTH GREATER-THAN SIGN
+ + "\uFF1F<>'?';" // from FULLWIDTH QUESTION MARK
+ + "\uFF20<>'@';" // from FULLWIDTH COMMERCIAL AT
+ + "\uFF21<>A;" // from FULLWIDTH LATIN CAPITAL LETTER A
+ + "\uFF22<>B;" // from FULLWIDTH LATIN CAPITAL LETTER B
+ + "\uFF23<>C;" // from FULLWIDTH LATIN CAPITAL LETTER C
+ + "\uFF24<>D;" // from FULLWIDTH LATIN CAPITAL LETTER D
+ + "\uFF25<>E;" // from FULLWIDTH LATIN CAPITAL LETTER E
+ + "\uFF26<>F;" // from FULLWIDTH LATIN CAPITAL LETTER F
+ + "\uFF27<>G;" // from FULLWIDTH LATIN CAPITAL LETTER G
+ + "\uFF28<>H;" // from FULLWIDTH LATIN CAPITAL LETTER H
+ + "\uFF29<>I;" // from FULLWIDTH LATIN CAPITAL LETTER I
+ + "\uFF2A<>J;" // from FULLWIDTH LATIN CAPITAL LETTER J
+ + "\uFF2B<>K;" // from FULLWIDTH LATIN CAPITAL LETTER K
+ + "\uFF2C<>L;" // from FULLWIDTH LATIN CAPITAL LETTER L
+ + "\uFF2D<>M;" // from FULLWIDTH LATIN CAPITAL LETTER M
+ + "\uFF2E<>N;" // from FULLWIDTH LATIN CAPITAL LETTER N
+ + "\uFF2F<>O;" // from FULLWIDTH LATIN CAPITAL LETTER O
+ + "\uFF30<>P;" // from FULLWIDTH LATIN CAPITAL LETTER P
+ + "\uFF31<>Q;" // from FULLWIDTH LATIN CAPITAL LETTER Q
+ + "\uFF32<>R;" // from FULLWIDTH LATIN CAPITAL LETTER R
+ + "\uFF33<>S;" // from FULLWIDTH LATIN CAPITAL LETTER S
+ + "\uFF34<>T;" // from FULLWIDTH LATIN CAPITAL LETTER T
+ + "\uFF35<>U;" // from FULLWIDTH LATIN CAPITAL LETTER U
+ + "\uFF36<>V;" // from FULLWIDTH LATIN CAPITAL LETTER V
+ + "\uFF37<>W;" // from FULLWIDTH LATIN CAPITAL LETTER W
+ + "\uFF38<>X;" // from FULLWIDTH LATIN CAPITAL LETTER X
+ + "\uFF39<>Y;" // from FULLWIDTH LATIN CAPITAL LETTER Y
+ + "\uFF3A<>Z;" // from FULLWIDTH LATIN CAPITAL LETTER Z
+ + "\uFF3B<>'[';" // from FULLWIDTH LEFT SQUARE BRACKET
+ + "\uFF3C<>'\\';" // from FULLWIDTH REVERSE SOLIDUS {double escape - aliu}
+ + "\uFF3D<>']';" // from FULLWIDTH RIGHT SQUARE BRACKET
+ + "\uFF3E<>'^';" // from FULLWIDTH CIRCUMFLEX ACCENT
+ + "\uFF3F<>'_';" // from FULLWIDTH LOW LINE
+ + "\uFF40<>'`';" // from FULLWIDTH GRAVE ACCENT
+ + "\uFF41<>a;" // from FULLWIDTH LATIN SMALL LETTER A
+ + "\uFF42<>b;" // from FULLWIDTH LATIN SMALL LETTER B
+ + "\uFF43<>c;" // from FULLWIDTH LATIN SMALL LETTER C
+ + "\uFF44<>d;" // from FULLWIDTH LATIN SMALL LETTER D
+ + "\uFF45<>e;" // from FULLWIDTH LATIN SMALL LETTER E
+ + "\uFF46<>f;" // from FULLWIDTH LATIN SMALL LETTER F
+ + "\uFF47<>g;" // from FULLWIDTH LATIN SMALL LETTER G
+ + "\uFF48<>h;" // from FULLWIDTH LATIN SMALL LETTER H
+ + "\uFF49<>i;" // from FULLWIDTH LATIN SMALL LETTER I
+ + "\uFF4A<>j;" // from FULLWIDTH LATIN SMALL LETTER J
+ + "\uFF4B<>k;" // from FULLWIDTH LATIN SMALL LETTER K
+ + "\uFF4C<>l;" // from FULLWIDTH LATIN SMALL LETTER L
+ + "\uFF4D<>m;" // from FULLWIDTH LATIN SMALL LETTER M
+ + "\uFF4E<>n;" // from FULLWIDTH LATIN SMALL LETTER N
+ + "\uFF4F<>o;" // from FULLWIDTH LATIN SMALL LETTER O
+ + "\uFF50<>p;" // from FULLWIDTH LATIN SMALL LETTER P
+ + "\uFF51<>q;" // from FULLWIDTH LATIN SMALL LETTER Q
+ + "\uFF52<>r;" // from FULLWIDTH LATIN SMALL LETTER R
+ + "\uFF53<>s;" // from FULLWIDTH LATIN SMALL LETTER S
+ + "\uFF54<>t;" // from FULLWIDTH LATIN SMALL LETTER T
+ + "\uFF55<>u;" // from FULLWIDTH LATIN SMALL LETTER U
+ + "\uFF56<>v;" // from FULLWIDTH LATIN SMALL LETTER V
+ + "\uFF57<>w;" // from FULLWIDTH LATIN SMALL LETTER W
+ + "\uFF58<>x;" // from FULLWIDTH LATIN SMALL LETTER X
+ + "\uFF59<>y;" // from FULLWIDTH LATIN SMALL LETTER Y
+ + "\uFF5A<>z;" // from FULLWIDTH LATIN SMALL LETTER Z
+ + "\uFF5B<>'{';" // from FULLWIDTH LEFT CURLY BRACKET
+ + "\uFF5C<>'|';" // from FULLWIDTH VERTICAL LINE
+ + "\uFF5D<>'}';" // from FULLWIDTH RIGHT CURLY BRACKET
+ + "\uFF5E<>'~';" // from FULLWIDTH TILDE
+ + "\u3002<>\uFF61;" // to HALFWIDTH IDEOGRAPHIC FULL STOP
+ + "\u300C<>\uFF62;" // to HALFWIDTH LEFT CORNER BRACKET
+ + "\u300D<>\uFF63;" // to HALFWIDTH RIGHT CORNER BRACKET
+ + "\u3001<>\uFF64;" // to HALFWIDTH IDEOGRAPHIC COMMA
+ + "\u30FB<>\uFF65;" // to HALFWIDTH KATAKANA MIDDLE DOT
+ + "\u30F2<>\uFF66;" // to HALFWIDTH KATAKANA LETTER WO
+ + "\u30A1<>\uFF67;" // to HALFWIDTH KATAKANA LETTER SMALL A
+ + "\u30A3<>\uFF68;" // to HALFWIDTH KATAKANA LETTER SMALL I
+ + "\u30A5<>\uFF69;" // to HALFWIDTH KATAKANA LETTER SMALL U
+ + "\u30A7<>\uFF6A;" // to HALFWIDTH KATAKANA LETTER SMALL E
+ + "\u30A9<>\uFF6B;" // to HALFWIDTH KATAKANA LETTER SMALL O
+ + "\u30E3<>\uFF6C;" // to HALFWIDTH KATAKANA LETTER SMALL YA
+ + "\u30E5<>\uFF6D;" // to HALFWIDTH KATAKANA LETTER SMALL YU
+ + "\u30E7<>\uFF6E;" // to HALFWIDTH KATAKANA LETTER SMALL YO
+ + "\u30C3<>\uFF6F;" // to HALFWIDTH KATAKANA LETTER SMALL TU
+ + "\u30FC<>\uFF70;" // to HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+ + "\u30A2<>\uFF71;" // to HALFWIDTH KATAKANA LETTER A
+ + "\u30A4<>\uFF72;" // to HALFWIDTH KATAKANA LETTER I
+ + "\u30A6<>\uFF73;" // to HALFWIDTH KATAKANA LETTER U
+ + "\u30A8<>\uFF74;" // to HALFWIDTH KATAKANA LETTER E
+ + "\u30AA<>\uFF75;" // to HALFWIDTH KATAKANA LETTER O
+ + "\u30AB<>\uFF76;" // to HALFWIDTH KATAKANA LETTER KA
+ + "\u30AD<>\uFF77;" // to HALFWIDTH KATAKANA LETTER KI
+ + "\u30AF<>\uFF78;" // to HALFWIDTH KATAKANA LETTER KU
+ + "\u30B1<>\uFF79;" // to HALFWIDTH KATAKANA LETTER KE
+ + "\u30B3<>\uFF7A;" // to HALFWIDTH KATAKANA LETTER KO
+ + "\u30B5<>\uFF7B;" // to HALFWIDTH KATAKANA LETTER SA
+ + "\u30B7<>\uFF7C;" // to HALFWIDTH KATAKANA LETTER SI
+ + "\u30B9<>\uFF7D;" // to HALFWIDTH KATAKANA LETTER SU
+ + "\u30BB<>\uFF7E;" // to HALFWIDTH KATAKANA LETTER SE
+ + "\u30BD<>\uFF7F;" // to HALFWIDTH KATAKANA LETTER SO
+ + "\u30BF<>\uFF80;" // to HALFWIDTH KATAKANA LETTER TA
+ + "\u30C1<>\uFF81;" // to HALFWIDTH KATAKANA LETTER TI
+ + "\u30C4<>\uFF82;" // to HALFWIDTH KATAKANA LETTER TU
+ + "\u30C6<>\uFF83;" // to HALFWIDTH KATAKANA LETTER TE
+ + "\u30C8<>\uFF84;" // to HALFWIDTH KATAKANA LETTER TO
+ + "\u30CA<>\uFF85;" // to HALFWIDTH KATAKANA LETTER NA
+ + "\u30CB<>\uFF86;" // to HALFWIDTH KATAKANA LETTER NI
+ + "\u30CC<>\uFF87;" // to HALFWIDTH KATAKANA LETTER NU
+ + "\u30CD<>\uFF88;" // to HALFWIDTH KATAKANA LETTER NE
+ + "\u30CE<>\uFF89;" // to HALFWIDTH KATAKANA LETTER NO
+ + "\u30CF<>\uFF8A;" // to HALFWIDTH KATAKANA LETTER HA
+ + "\u30D2<>\uFF8B;" // to HALFWIDTH KATAKANA LETTER HI
+ + "\u30D5<>\uFF8C;" // to HALFWIDTH KATAKANA LETTER HU
+ + "\u30D8<>\uFF8D;" // to HALFWIDTH KATAKANA LETTER HE
+ + "\u30DB<>\uFF8E;" // to HALFWIDTH KATAKANA LETTER HO
+ + "\u30DE<>\uFF8F;" // to HALFWIDTH KATAKANA LETTER MA
+ + "\u30DF<>\uFF90;" // to HALFWIDTH KATAKANA LETTER MI
+ + "\u30E0<>\uFF91;" // to HALFWIDTH KATAKANA LETTER MU
+ + "\u30E1<>\uFF92;" // to HALFWIDTH KATAKANA LETTER ME
+ + "\u30E2<>\uFF93;" // to HALFWIDTH KATAKANA LETTER MO
+ + "\u30E4<>\uFF94;" // to HALFWIDTH KATAKANA LETTER YA
+ + "\u30E6<>\uFF95;" // to HALFWIDTH KATAKANA LETTER YU
+ + "\u30E8<>\uFF96;" // to HALFWIDTH KATAKANA LETTER YO
+ + "\u30E9<>\uFF97;" // to HALFWIDTH KATAKANA LETTER RA
+ + "\u30EA<>\uFF98;" // to HALFWIDTH KATAKANA LETTER RI
+ + "\u30EB<>\uFF99;" // to HALFWIDTH KATAKANA LETTER RU
+ + "\u30EC<>\uFF9A;" // to HALFWIDTH KATAKANA LETTER RE
+ + "\u30ED<>\uFF9B;" // to HALFWIDTH KATAKANA LETTER RO
+ + "\u30EF<>\uFF9C;" // to HALFWIDTH KATAKANA LETTER WA
+ + "\u30F3<>\uFF9D;" // to HALFWIDTH KATAKANA LETTER N
+ + "\u3099<>\uFF9E;" // to HALFWIDTH KATAKANA VOICED SOUND MARK
+ + "\u309A<>\uFF9F;" // to HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+ + "\u1160<>\uFFA0;" // to HALFWIDTH HANGUL FILLER
+ + "\u1100<>\uFFA1;" // to HALFWIDTH HANGUL LETTER KIYEOK
+ + "\u1101<>\uFFA2;" // to HALFWIDTH HANGUL LETTER SSANGKIYEOK
+ + "\u11AA<>\uFFA3;" // to HALFWIDTH HANGUL LETTER KIYEOK-SIOS
+ + "\u1102<>\uFFA4;" // to HALFWIDTH HANGUL LETTER NIEUN
+ + "\u11AC<>\uFFA5;" // to HALFWIDTH HANGUL LETTER NIEUN-CIEUC
+ + "\u11AD<>\uFFA6;" // to HALFWIDTH HANGUL LETTER NIEUN-HIEUH
+ + "\u1103<>\uFFA7;" // to HALFWIDTH HANGUL LETTER TIKEUT
+ + "\u1104<>\uFFA8;" // to HALFWIDTH HANGUL LETTER SSANGTIKEUT
+ + "\u1105<>\uFFA9;" // to HALFWIDTH HANGUL LETTER RIEUL
+ + "\u11B0<>\uFFAA;" // to HALFWIDTH HANGUL LETTER RIEUL-KIYEOK
+ + "\u11B1<>\uFFAB;" // to HALFWIDTH HANGUL LETTER RIEUL-MIEUM
+ + "\u11B2<>\uFFAC;" // to HALFWIDTH HANGUL LETTER RIEUL-PIEUP
+ + "\u11B3<>\uFFAD;" // to HALFWIDTH HANGUL LETTER RIEUL-SIOS
+ + "\u11B4<>\uFFAE;" // to HALFWIDTH HANGUL LETTER RIEUL-THIEUTH
+ + "\u11B5<>\uFFAF;" // to HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH
+ + "\u111A<>\uFFB0;" // to HALFWIDTH HANGUL LETTER RIEUL-HIEUH
+ + "\u1106<>\uFFB1;" // to HALFWIDTH HANGUL LETTER MIEUM
+ + "\u1107<>\uFFB2;" // to HALFWIDTH HANGUL LETTER PIEUP
+ + "\u1108<>\uFFB3;" // to HALFWIDTH HANGUL LETTER SSANGPIEUP
+ + "\u1121<>\uFFB4;" // to HALFWIDTH HANGUL LETTER PIEUP-SIOS
+ + "\u1109<>\uFFB5;" // to HALFWIDTH HANGUL LETTER SIOS
+ + "\u110A<>\uFFB6;" // to HALFWIDTH HANGUL LETTER SSANGSIOS
+ + "\u110B<>\uFFB7;" // to HALFWIDTH HANGUL LETTER IEUNG
+ + "\u110C<>\uFFB8;" // to HALFWIDTH HANGUL LETTER CIEUC
+ + "\u110D<>\uFFB9;" // to HALFWIDTH HANGUL LETTER SSANGCIEUC
+ + "\u110E<>\uFFBA;" // to HALFWIDTH HANGUL LETTER CHIEUCH
+ + "\u110F<>\uFFBB;" // to HALFWIDTH HANGUL LETTER KHIEUKH
+ + "\u1110<>\uFFBC;" // to HALFWIDTH HANGUL LETTER THIEUTH
+ + "\u1111<>\uFFBD;" // to HALFWIDTH HANGUL LETTER PHIEUPH
+ + "\u1112<>\uFFBE;" // to HALFWIDTH HANGUL LETTER HIEUH
+ + "\u1161<>\uFFC2;" // to HALFWIDTH HANGUL LETTER A
+ + "\u1162<>\uFFC3;" // to HALFWIDTH HANGUL LETTER AE
+ + "\u1163<>\uFFC4;" // to HALFWIDTH HANGUL LETTER YA
+ + "\u1164<>\uFFC5;" // to HALFWIDTH HANGUL LETTER YAE
+ + "\u1165<>\uFFC6;" // to HALFWIDTH HANGUL LETTER EO
+ + "\u1166<>\uFFC7;" // to HALFWIDTH HANGUL LETTER E
+ + "\u1167<>\uFFCA;" // to HALFWIDTH HANGUL LETTER YEO
+ + "\u1168<>\uFFCB;" // to HALFWIDTH HANGUL LETTER YE
+ + "\u1169<>\uFFCC;" // to HALFWIDTH HANGUL LETTER O
+ + "\u116A<>\uFFCD;" // to HALFWIDTH HANGUL LETTER WA
+ + "\u116B<>\uFFCE;" // to HALFWIDTH HANGUL LETTER WAE
+ + "\u116C<>\uFFCF;" // to HALFWIDTH HANGUL LETTER OE
+ + "\u116D<>\uFFD2;" // to HALFWIDTH HANGUL LETTER YO
+ + "\u116E<>\uFFD3;" // to HALFWIDTH HANGUL LETTER U
+ + "\u116F<>\uFFD4;" // to HALFWIDTH HANGUL LETTER WEO
+ + "\u1170<>\uFFD5;" // to HALFWIDTH HANGUL LETTER WE
+ + "\u1171<>\uFFD6;" // to HALFWIDTH HANGUL LETTER WI
+ + "\u1172<>\uFFD7;" // to HALFWIDTH HANGUL LETTER YU
+ + "\u1173<>\uFFDA;" // to HALFWIDTH HANGUL LETTER EU
+ + "\u1174<>\uFFDB;" // to HALFWIDTH HANGUL LETTER YI
+ + "\u1175<>\uFFDC;" // to HALFWIDTH HANGUL LETTER I
+ + "\uFFE0<>'\u00a2';" // from FULLWIDTH CENT SIGN
+ + "\uFFE1<>'\u00a3';" // from FULLWIDTH POUND SIGN
+ + "\uFFE2<>'\u00ac';" // from FULLWIDTH NOT SIGN
+ + "\uFFE3<>' '\u0304;" // from FULLWIDTH MACRON
+ + "\uFFE4<>'\u00a6';" // from FULLWIDTH BROKEN BAR
+ + "\uFFE5<>'\u00a5';" // from FULLWIDTH YEN SIGN
+ + "\uFFE6<>\u20A9;" // from FULLWIDTH WON SIGN
+ + "\u2502<>\uFFE8;" // to HALFWIDTH FORMS LIGHT VERTICAL
+ + "\u2190<>\uFFE9;" // to HALFWIDTH LEFTWARDS ARROW
+ + "\u2191<>\uFFEA;" // to HALFWIDTH UPWARDS ARROW
+ + "\u2192<>\uFFEB;" // to HALFWIDTH RIGHTWARDS ARROW
+ + "\u2193<>\uFFEC;" // to HALFWIDTH DOWNWARDS ARROW
+ + "\u25A0<>\uFFED;" // to HALFWIDTH BLACK SQUARE
+ + "\u25CB<>\uFFEE;" // to HALFWIDTH WHITE CIRCLE
+
+ }
+ };
+ }
+}
diff --git a/src/com/ibm/text/resources/TransliterationRule_Han_Pinyin.java b/src/com/ibm/text/resources/TransliterationRule_Han_Pinyin.java
new file mode 100755
index 0000000..d41bb9b
--- /dev/null
+++ b/src/com/ibm/text/resources/TransliterationRule_Han_Pinyin.java
@@ -0,0 +1,20427 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/TransliterationRule_Han_Pinyin.java,v $
+ * $Date: 2000/03/10 04:07:29 $
+ * $Revision: 1.4 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+import java.util.ListResourceBundle;
+public class TransliterationRule_Han_Pinyin extends ListResourceBundle {
+ public Object[][] getContents() {
+ return new Object[][] {
+ {"Rule", getRules()}
+ };
+ }
+
+ private String[] getRules() {
+ String[] s1 = getString1();
+ String[] s2 = getString2();
+ String[] s3 = getString3();
+
+ String[] result = new String[s1.length + s2.length + s3.length];
+ System.arraycopy(s1, 0, result, 0, s1.length);
+ System.arraycopy(s2, 0, result, s1.length, s2.length);
+ System.arraycopy(s3, 0, result, s1.length + s2.length, s3.length);
+ return result;
+ }
+
+ private String[] getString1() {
+ return new String[] {
+
+ "A4=\u00C0;",
+ "A2=\u00C1;",
+ "E4=\u00C8;",
+ "E2=\u00C9;",
+ "a4=\u00E0;",
+ "a2=\u00E1;",
+ "e4=\u00E8;",
+ "e2=\u00E9;",
+ "i4=\u00EC;",
+ "i2=\u00ED;",
+ "o4=\u00F2;",
+ "o2=\u00F3;",
+ "u4=\u00F9;",
+ "u2=\u00FA;",
+ "uu=\u00FC;",
+ "a1=\u0101;",
+ "a3=\u0103;",
+ "e1=\u0113;",
+ "e3=\u0115;",
+ "i1=\u012B;",
+ "i3=\u012D;",
+ "o1=\u014D;",
+ "o3=\u014F;",
+ "u1=\u016B;",
+ "u3=\u016D;",
+ "uu2=\u01D8;",
+ "uu3=\u01DA;",
+ "uu4=\u01DC;",
+ "4=\u0300;",
+ "2=\u0301;",
+
+ "\u4E00>Y{i1};",
+ "\u4E01>Ding;",
+ "\u4E02>Ka{o3};",
+ "\u4E03>Qi;",
+ "\u4E04>Sh{a4}ng;",
+ "\u4E05>Xi{a4};",
+ "\u4E07>M{o4};",
+ "\u4E08>Zh{a4}ng;",
+ "\u4E09>San;",
+ "\u4E0A>Sh{a4}ng;",
+ "\u4E0B>Xi{a4};",
+ "\u4E0C>Ji;",
+ "\u4E0D>B{u4};",
+ "\u4E0E>Y{u3};",
+ "\u4E0F>Mi{a3}n;",
+ "\u4E10>Ga{i4};",
+ "\u4E11>Cho{u3};",
+ "\u4E12>Cho{u3};",
+ "\u4E13>Zhuan;",
+ "\u4E14>Qi{e3};",
+ "\u4E15>Pi;",
+ "\u4E16>Sh{i4};",
+ "\u4E17>Sh{i4};",
+ "\u4E18>Qiu;",
+ "\u4E19>B{i3}ng;",
+ "\u4E1A>Y{e4};",
+ "\u4E1B>C{o2}ng;",
+ "\u4E1C>Dong;",
+ "\u4E1D>Si;",
+ "\u4E1E>Ch{e2}ng;",
+ "\u4E1F>Diu;",
+ "\u4E20>Qiu;",
+ "\u4E21>Li{a3}ng;",
+ "\u4E22>Diu;",
+ "\u4E23>Yo{u3};",
+ "\u4E24>Li{a3}ng;",
+ "\u4E25>Y{a2}n;",
+ "\u4E26>B{i4}ng;",
+ "\u4E27>Sang;",
+ "\u4E28>G{u3}n;",
+ "\u4E29>Jiu;",
+ "\u4E2A>G{e4};",
+ "\u4E2B>Ya;",
+ "\u4E2C>Qi{a2}ng;",
+ "\u4E2D>Zhong;",
+ "\u4E2E>J{i3};",
+ "\u4E2F>Ji{e4};",
+ "\u4E30>Feng;",
+ "\u4E31>Gu{a4}n;",
+ "\u4E32>Chu{a4}n;",
+ "\u4E33>Ch{a3}n;",
+ "\u4E34>L{i2}n;",
+ "\u4E35>Zhu{o3};",
+ "\u4E36>Zh{u3};",
+ "\u4E38>W{a2}n;",
+ "\u4E39>Dan;",
+ "\u4E3A>We{i4};",
+ "\u4E3B>Zh{u3};",
+ "\u4E3C>J{i3}ng;",
+ "\u4E3D>L{i4};",
+ "\u4E3E>J{u3};",
+ "\u4E3F>Pi{e3};",
+ "\u4E40>F{u2};",
+ "\u4E41>Y{i2};",
+ "\u4E42>Y{i4};",
+ "\u4E43>Na{i3};",
+ "\u4E45>Ji{u3};",
+ "\u4E46>Ji{u3};",
+ "\u4E47>Zh{e2};",
+ "\u4E48>Yao;",
+ "\u4E49>Y{i4};",
+ "\u4E4B>Zhi;",
+ "\u4E4C>Wu;",
+ "\u4E4D>Zh{a4};",
+ "\u4E4E>Hu;",
+ "\u4E4F>F{a2};",
+ "\u4E50>L{e4};",
+ "\u4E51>Zh{o4}ng;",
+ "\u4E52>Ping;",
+ "\u4E53>P{a1}ng;",
+ "\u4E54>Qia{o2};",
+ "\u4E55>H{u3};",
+ "\u4E56>Guai;",
+ "\u4E57>Ch{e2}ng;",
+ "\u4E58>Ch{e2}ng;",
+ "\u4E59>Y{i3};",
+ "\u4E5A>Y{i3}n;",
+ "\u4E5C>Mie;",
+ "\u4E5D>Ji{u3};",
+ "\u4E5E>Q{i3};",
+ "\u4E5F>Y{e3};",
+ "\u4E60>X{i2};",
+ "\u4E61>Xiang;",
+ "\u4E62>Ga{i4};",
+ "\u4E63>Diu;",
+ "\u4E66>Shu;",
+ "\u4E68>Sh{i3};",
+ "\u4E69>Ji;",
+ "\u4E6A>Nang;",
+ "\u4E6B>Jia;",
+ "\u4E6D>Sh{i2};",
+ "\u4E70>Ma{i3};",
+ "\u4E71>Lu{a4}n;",
+ "\u4E73>R{u3};",
+ "\u4E74>Xu{e2};",
+ "\u4E75>Y{a3}n;",
+ "\u4E76>F{u3};",
+ "\u4E77>Sha;",
+ "\u4E78>N{a3};",
+ "\u4E79>Gan;",
+ "\u4E7E>Gan;",
+ "\u4E7F>Ch{i4};",
+ "\u4E80>Gui;",
+ "\u4E81>Gan;",
+ "\u4E82>Lu{a4}n;",
+ "\u4E83>L{i2}n;",
+ "\u4E84>Y{i4};",
+ "\u4E85>Ju{e2};",
+ "\u4E86>Lia{o3};",
+ "\u4E88>Y{u2};",
+ "\u4E89>Zheng;",
+ "\u4E8A>Sh{i4};",
+ "\u4E8B>Sh{i4};",
+ "\u4E8C>{E4}r;",
+ "\u4E8D>Ch{u4};",
+ "\u4E8E>Y{u2};",
+ "\u4E8F>Y{u2};",
+ "\u4E90>Y{u2};",
+ "\u4E91>Y{u2}n;",
+ "\u4E92>H{u4};",
+ "\u4E93>Q{i2};",
+ "\u4E94>W{u3};",
+ "\u4E95>J{i3}ng;",
+ "\u4E96>S{i4};",
+ "\u4E97>Su{i4};",
+ "\u4E98>G{e4}n;",
+ "\u4E99>G{e4}n;",
+ "\u4E9A>Y{a4};",
+ "\u4E9B>Xie;",
+ "\u4E9C>Y{a4};",
+ "\u4E9D>Q{i2};",
+ "\u4E9E>Y{a4};",
+ "\u4E9F>J{i2};",
+ "\u4EA0>To{u2};",
+ "\u4EA1>W{a2}ng;",
+ "\u4EA2>K{a4}ng;",
+ "\u4EA3>T{a4};",
+ "\u4EA4>Jiao;",
+ "\u4EA5>Ha{i4};",
+ "\u4EA6>Y{i4};",
+ "\u4EA7>Ch{a3}n;",
+ "\u4EA8>Heng;",
+ "\u4EA9>M{u3};",
+ "\u4EAB>Xi{a3}ng;",
+ "\u4EAC>Jing;",
+ "\u4EAD>T{i2}ng;",
+ "\u4EAE>Li{a4}ng;",
+ "\u4EAF>Xi{a3}ng;",
+ "\u4EB0>Jing;",
+ "\u4EB1>Y{e4};",
+ "\u4EB2>Qin;",
+ "\u4EB3>B{o2};",
+ "\u4EB4>Yo{u4};",
+ "\u4EB5>Xi{e4};",
+ "\u4EB6>D{a3}n;",
+ "\u4EB7>Li{a2}n;",
+ "\u4EB8>Du{o3};",
+ "\u4EB9>We{i3};",
+ "\u4EBA>R{e2}n;",
+ "\u4EBB>R{e2}n;",
+ "\u4EBC>J{i2};",
+ "\u4EBE>W{a2}ng;",
+ "\u4EBF>Y{i4};",
+ "\u4EC0>Sh{i2};",
+ "\u4EC1>R{e2}n;",
+ "\u4EC2>L{e4};",
+ "\u4EC3>Ding;",
+ "\u4EC4>Z{e4};",
+ "\u4EC5>J{i3}n;",
+ "\u4EC6>Pu;",
+ "\u4EC7>Cho{u2};",
+ "\u4EC8>Ba;",
+ "\u4EC9>Zh{a3}ng;",
+ "\u4ECA>Jin;",
+ "\u4ECB>Ji{e4};",
+ "\u4ECC>Bing;",
+ "\u4ECD>R{e2}ng;",
+ "\u4ECE>C{o2}ng;",
+ "\u4ECF>F{o2};",
+ "\u4ED0>S{a3}n;",
+ "\u4ED1>L{u2}n;",
+ "\u4ED3>Cang;",
+ "\u4ED4>Z{i3};",
+ "\u4ED5>Sh{i4};",
+ "\u4ED6>Ta;",
+ "\u4ED7>Zh{a4}ng;",
+ "\u4ED8>F{u4};",
+ "\u4ED9>Xian;",
+ "\u4EDA>Xian;",
+ "\u4EDB>Tuo;",
+ "\u4EDC>H{o2}ng;",
+ "\u4EDD>T{o2}ng;",
+ "\u4EDE>R{e4}n;",
+ "\u4EDF>Qian;",
+ "\u4EE0>G{a2}n;",
+ "\u4EE1>Y{i4};",
+ "\u4EE2>D{i2};",
+ "\u4EE3>Da{i4};",
+ "\u4EE4>L{i4}ng;",
+ "\u4EE5>Y{i3};",
+ "\u4EE6>Cha{o4};",
+ "\u4EE7>Ch{a2}ng;",
+ "\u4EE8>Sa;",
+ "\u4EEA>Y{i2};",
+ "\u4EEB>M{u4};",
+ "\u4EEC>M{e1}n;",
+ "\u4EED>R{e4}n;",
+ "\u4EEE>Ji{a3};",
+ "\u4EEF>Cha{o4};",
+ "\u4EF0>Y{a3}ng;",
+ "\u4EF1>Qi{a2}n;",
+ "\u4EF2>Zh{o4}ng;",
+ "\u4EF3>P{i3};",
+ "\u4EF4>W{a4}n;",
+ "\u4EF5>W{u3};",
+ "\u4EF6>Ji{a4}n;",
+ "\u4EF7>Ji{e4};",
+ "\u4EF8>Ya{o3};",
+ "\u4EF9>Feng;",
+ "\u4EFA>Cang;",
+ "\u4EFB>R{e4}n;",
+ "\u4EFC>W{a2}ng;",
+ "\u4EFD>F{e4}n;",
+ "\u4EFE>Di;",
+ "\u4EFF>F{a3}ng;",
+ "\u4F00>Zhong;",
+ "\u4F01>Q{i3};",
+ "\u4F02>Pe{i4};",
+ "\u4F03>Y{u2};",
+ "\u4F04>Dia{o4};",
+ "\u4F05>D{u4}n;",
+ "\u4F06>W{e4}n;",
+ "\u4F07>Y{i4};",
+ "\u4F08>X{i3}n;",
+ "\u4F09>K{a4}ng;",
+ "\u4F0A>Yi;",
+ "\u4F0B>J{i2};",
+ "\u4F0C>A{i4};",
+ "\u4F0D>W{u3};",
+ "\u4F0E>J{i4};",
+ "\u4F0F>F{u2};",
+ "\u4F10>F{a2};",
+ "\u4F11>Xiu;",
+ "\u4F12>J{i4}n;",
+ "\u4F13>Bei;",
+ "\u4F14>D{a3}n;",
+ "\u4F15>Fu;",
+ "\u4F16>T{a3}ng;",
+ "\u4F17>Zh{o4}ng;",
+ "\u4F18>You;",
+ "\u4F19>Hu{o3};",
+ "\u4F1A>Hu{i4};",
+ "\u4F1B>Y{u3};",
+ "\u4F1C>Cu{i4};",
+ "\u4F1D>Chu{a2}n;",
+ "\u4F1E>S{a3}n;",
+ "\u4F1F>We{i3};",
+ "\u4F20>Chu{a2}n;",
+ "\u4F21>Che;",
+ "\u4F22>Y{a2};",
+ "\u4F23>Xi{a4}n;",
+ "\u4F24>Shang;",
+ "\u4F25>Chang;",
+ "\u4F26>L{u2}n;",
+ "\u4F27>Cang;",
+ "\u4F28>X{u4}n;",
+ "\u4F29>X{i4}n;",
+ "\u4F2A>We{i3};",
+ "\u4F2B>Zh{u4};",
+ "\u4F2D>Xu{a2}n;",
+ "\u4F2E>N{u2};",
+ "\u4F2F>B{o2};",
+ "\u4F30>Gu;",
+ "\u4F31>N{i3};",
+ "\u4F32>N{i3};",
+ "\u4F33>Xi{e4};",
+ "\u4F34>B{a4}n;",
+ "\u4F35>X{u4};",
+ "\u4F36>L{i2}ng;",
+ "\u4F37>Zho{u4};",
+ "\u4F38>Shen;",
+ "\u4F39>Qu;",
+ "\u4F3A>S{i4};",
+ "\u4F3B>Beng;",
+ "\u4F3C>S{i4};",
+ "\u4F3D>Jia;",
+ "\u4F3E>Pi;",
+ "\u4F3F>Y{i4};",
+ "\u4F40>S{i4};",
+ "\u4F41>A{i3};",
+ "\u4F42>Zheng;",
+ "\u4F43>Di{a4}n;",
+ "\u4F44>H{a2}n;",
+ "\u4F45>Ma{i4};",
+ "\u4F46>D{a4}n;",
+ "\u4F47>Zh{u4};",
+ "\u4F48>B{u4};",
+ "\u4F49>Qu;",
+ "\u4F4A>B{i3};",
+ "\u4F4B>Sha{o4};",
+ "\u4F4C>C{i3};",
+ "\u4F4D>We{i4};",
+ "\u4F4E>Di;",
+ "\u4F4F>Zh{u4};",
+ "\u4F50>Zu{o3};",
+ "\u4F51>Yo{u4};",
+ "\u4F52>Yang;",
+ "\u4F53>T{i3};",
+ "\u4F54>Zh{a4}n;",
+ "\u4F55>H{e2};",
+ "\u4F56>B{i4};",
+ "\u4F57>Tuo;",
+ "\u4F58>Sh{e2};",
+ "\u4F59>Y{u2};",
+ "\u4F5A>Y{i4};",
+ "\u4F5B>F{o2};",
+ "\u4F5C>Zu{o4};",
+ "\u4F5D>Ko{u4};",
+ "\u4F5E>N{i4}ng;",
+ "\u4F5F>T{o2}ng;",
+ "\u4F60>N{i3};",
+ "\u4F61>Xuan;",
+ "\u4F62>Q{u2};",
+ "\u4F63>Y{o4}ng;",
+ "\u4F64>W{a3};",
+ "\u4F65>Qian;",
+ "\u4F67>K{a3};",
+ "\u4F69>Pe{i4};",
+ "\u4F6A>Hua{i2};",
+ "\u4F6B>H{e4};",
+ "\u4F6C>La{o3};",
+ "\u4F6D>Xi{a2}ng;",
+ "\u4F6E>G{e2};",
+ "\u4F6F>Y{a2}ng;",
+ "\u4F70>Ba{i3};",
+ "\u4F71>F{a3};",
+ "\u4F72>M{i2}ng;",
+ "\u4F73>Ji{a1};",
+ "\u4F74>{E4}r;",
+ "\u4F75>B{i4}ng;",
+ "\u4F76>J{i2};",
+ "\u4F77>H{e3}n;",
+ "\u4F78>Hu{o2};",
+ "\u4F79>Gu{i3};",
+ "\u4F7A>Qu{a2}n;",
+ "\u4F7B>Tiao;",
+ "\u4F7C>Jia{o3};",
+ "\u4F7D>C{i4};",
+ "\u4F7E>Y{i4};",
+ "\u4F7F>Sh{i3};",
+ "\u4F80>X{i2}ng;",
+ "\u4F81>Shen;",
+ "\u4F82>Tuo;",
+ "\u4F83>K{a3}n;",
+ "\u4F84>Zh{i2};",
+ "\u4F85>Gai;",
+ "\u4F86>La{i2};",
+ "\u4F87>Y{i2};",
+ "\u4F88>Ch{i3};",
+ "\u4F89>Kua;",
+ "\u4F8A>Guang;",
+ "\u4F8B>L{i4};",
+ "\u4F8C>Yin;",
+ "\u4F8D>Sh{i4};",
+ "\u4F8E>M{i3};",
+ "\u4F8F>Zhu;",
+ "\u4F90>X{u4};",
+ "\u4F91>Yo{u4};",
+ "\u4F92>An;",
+ "\u4F93>L{u4};",
+ "\u4F94>Mo{u2};",
+ "\u4F95>{E2}r;",
+ "\u4F96>L{u2}n;",
+ "\u4F97>T{o2}ng;",
+ "\u4F98>Ch{a4};",
+ "\u4F99>Ch{i4};",
+ "\u4F9A>X{u4}n;",
+ "\u4F9B>Gong;",
+ "\u4F9C>Zhou;",
+ "\u4F9D>Yi;",
+ "\u4F9E>R{u3};",
+ "\u4F9F>Ji{a4}n;",
+ "\u4FA0>Xi{a2};",
+ "\u4FA1>Ji{a4};",
+ "\u4FA2>Za{i4};",
+ "\u4FA3>L{uu3};",
+ "\u4FA5>Jia{o3};",
+ "\u4FA6>Zhen;",
+ "\u4FA7>C{e4};",
+ "\u4FA8>Qia{o2};",
+ "\u4FA9>Kua{i4};",
+ "\u4FAA>Cha{i2};",
+ "\u4FAB>N{i4}ng;",
+ "\u4FAC>N{o2}ng;",
+ "\u4FAD>J{i3}n;",
+ "\u4FAE>W{u3};",
+ "\u4FAF>Ho{u2};",
+ "\u4FB0>Ji{o3}ng;",
+ "\u4FB1>Ch{e3}ng;",
+ "\u4FB2>Zh{e4}n;",
+ "\u4FB3>Zu{o4};",
+ "\u4FB4>Cho{u3};",
+ "\u4FB5>Qin;",
+ "\u4FB6>L{uu3};",
+ "\u4FB7>J{u2};",
+ "\u4FB8>Sh{u4};",
+ "\u4FB9>T{i3}ng;",
+ "\u4FBA>Sh{e4}n;",
+ "\u4FBB>Tuo;",
+ "\u4FBC>B{o2};",
+ "\u4FBD>N{a2}n;",
+ "\u4FBE>Hao;",
+ "\u4FBF>Bi{a4}n;",
+ "\u4FC0>Tu{i3};",
+ "\u4FC1>Y{u3};",
+ "\u4FC2>X{i4};",
+ "\u4FC3>C{u4};",
+ "\u4FC4>{E2};",
+ "\u4FC5>Qi{u2};",
+ "\u4FC6>X{u2};",
+ "\u4FC7>Ku{a3}ng;",
+ "\u4FC8>K{u4};",
+ "\u4FC9>W{u4};",
+ "\u4FCA>J{u4}n;",
+ "\u4FCB>Y{i4};",
+ "\u4FCC>F{u3};",
+ "\u4FCD>L{a2}ng;",
+ "\u4FCE>Z{u3};",
+ "\u4FCF>Qia{o4};",
+ "\u4FD0>L{i4};",
+ "\u4FD1>Y{o3}ng;",
+ "\u4FD2>H{u4}n;",
+ "\u4FD3>J{i4}ng;",
+ "\u4FD4>Xi{a4}n;",
+ "\u4FD5>S{a4}n;",
+ "\u4FD6>Pa{i3};",
+ "\u4FD7>S{u2};",
+ "\u4FD8>F{u2};",
+ "\u4FD9>Xi;",
+ "\u4FDA>L{i3};",
+ "\u4FDB>F{u3};",
+ "\u4FDC>Ping;",
+ "\u4FDD>Ba{o3};",
+ "\u4FDE>Y{u2};",
+ "\u4FDF>S{i4};",
+ "\u4FE0>Xi{a2};",
+ "\u4FE1>X{i4}n;",
+ "\u4FE2>Xiu;",
+ "\u4FE3>Y{u3};",
+ "\u4FE4>T{i4};",
+ "\u4FE5>Che;",
+ "\u4FE6>Cho{u2};",
+ "\u4FE8>Y{a3}n;",
+ "\u4FE9>Li{a3};",
+ "\u4FEA>L{i4};",
+ "\u4FEB>La{i2};",
+ "\u4FED>Ji{a3}n;",
+ "\u4FEE>Xiu;",
+ "\u4FEF>F{u3};",
+ "\u4FF0>H{e4};",
+ "\u4FF1>J{u4};",
+ "\u4FF2>Xia{o4};",
+ "\u4FF3>Pa{i2};",
+ "\u4FF4>Ji{a4}n;",
+ "\u4FF5>Bia{o4};",
+ "\u4FF6>Ch{u4};",
+ "\u4FF7>Fe{i4};",
+ "\u4FF8>F{e4}ng;",
+ "\u4FF9>Y{a4};",
+ "\u4FFA>{a3}n;",
+ "\u4FFB>Be{i4};",
+ "\u4FFC>Y{u4};",
+ "\u4FFD>Xin;",
+ "\u4FFE>B{i3};",
+ "\u4FFF>Ji{a4}n;",
+ "\u5000>Chang;",
+ "\u5001>Ch{i2};",
+ "\u5002>B{i4}ng;",
+ "\u5003>Z{a2}n;",
+ "\u5004>Ya{o2};",
+ "\u5005>Cu{i4};",
+ "\u5006>Li{a3};",
+ "\u5007>W{a3}n;",
+ "\u5008>La{i2};",
+ "\u5009>Cang;",
+ "\u500A>Z{o4}ng;",
+ "\u500B>G{e4};",
+ "\u500C>Guan;",
+ "\u500D>Be{i4};",
+ "\u500E>Tian;",
+ "\u500F>Shu;",
+ "\u5010>Shu;",
+ "\u5011>M{e1}n;",
+ "\u5012>Da{o3};",
+ "\u5013>T{a2}n;",
+ "\u5014>Ju{e2};",
+ "\u5015>Chu{i2};",
+ "\u5016>X{i4}ng;",
+ "\u5017>P{e2}ng;",
+ "\u5018>T{a3}ng;",
+ "\u5019>Ho{u4};",
+ "\u501A>Y{i3};",
+ "\u501B>Qi;",
+ "\u501C>T{i4};",
+ "\u501D>G{a4}n;",
+ "\u501E>J{i4}ng;",
+ "\u501F>Ji{e4};",
+ "\u5020>Sui;",
+ "\u5021>Ch{a4}ng;",
+ "\u5022>Ji{e2};",
+ "\u5023>F{a3}ng;",
+ "\u5024>Zh{i2};",
+ "\u5025>Kong;",
+ "\u5026>Ju{a4}n;",
+ "\u5027>Zong;",
+ "\u5028>J{u4};",
+ "\u5029>Qi{a4}n;",
+ "\u502A>N{i2};",
+ "\u502B>L{u2}n;",
+ "\u502C>Zhuo;",
+ "\u502D>Wei;",
+ "\u502E>Lu{o3};",
+ "\u502F>Song;",
+ "\u5030>L{e2}ng;",
+ "\u5031>H{u4}n;",
+ "\u5032>Dong;",
+ "\u5033>Z{i4};",
+ "\u5034>B{e4}n;",
+ "\u5035>W{u3};",
+ "\u5036>J{u4};",
+ "\u5037>Na{i4};",
+ "\u5038>Ca{i3};",
+ "\u5039>Ji{a3}n;",
+ "\u503A>Zha{i4};",
+ "\u503B>Ye;",
+ "\u503C>Zh{i2};",
+ "\u503D>Sh{a4};",
+ "\u503E>Qing;",
+ "\u5040>Ying;",
+ "\u5041>Cheng;",
+ "\u5042>Jian;",
+ "\u5043>Y{a3}n;",
+ "\u5044>Nu{a4}n;",
+ "\u5045>Zh{o4}ng;",
+ "\u5046>Ch{u3}n;",
+ "\u5047>Ji{a3};",
+ "\u5048>Ji{e2};",
+ "\u5049>We{i3};",
+ "\u504A>Y{u3};",
+ "\u504B>B{i3}ng;",
+ "\u504C>Ru{o4};",
+ "\u504D>T{i2};",
+ "\u504E>Wei;",
+ "\u504F>Pian;",
+ "\u5050>Y{a4}n;",
+ "\u5051>Feng;",
+ "\u5052>T{a3}ng;",
+ "\u5053>W{o4};",
+ "\u5054>{E4};",
+ "\u5055>Xi{e2};",
+ "\u5056>Ch{e3};",
+ "\u5057>Sh{e3}ng;",
+ "\u5058>K{a3}n;",
+ "\u5059>D{i4};",
+ "\u505A>Zu{o4};",
+ "\u505B>Cha;",
+ "\u505C>T{i2}ng;",
+ "\u505D>Be{i4};",
+ "\u505E>Y{e4};",
+ "\u505F>Hu{a2}ng;",
+ "\u5060>Ya{o3};",
+ "\u5061>Zh{a4}n;",
+ "\u5062>Cho{u3};",
+ "\u5063>Yan;",
+ "\u5064>Yo{u3};",
+ "\u5065>Ji{a4}n;",
+ "\u5066>Xu;",
+ "\u5067>Zha;",
+ "\u5068>Ci;",
+ "\u5069>F{u4};",
+ "\u506A>Bi;",
+ "\u506B>Zh{i4};",
+ "\u506C>Z{o3}ng;",
+ "\u506D>Mi{a3}n;",
+ "\u506E>J{i2};",
+ "\u506F>Y{i3};",
+ "\u5070>Xi{e4};",
+ "\u5071>X{u2}n;",
+ "\u5072>Si;",
+ "\u5073>Duan;",
+ "\u5074>C{e4};",
+ "\u5075>Zhen;",
+ "\u5076>O{u3};",
+ "\u5077>Tou;",
+ "\u5078>Tou;",
+ "\u5079>Be{i4};",
+ "\u507A>Z{a2};",
+ "\u507B>L{uu3};",
+ "\u507C>Ji{e2};",
+ "\u507D>We{i3};",
+ "\u507E>F{e4}n;",
+ "\u507F>Ch{a2}ng;",
+ "\u5080>Gui;",
+ "\u5081>So{u3};",
+ "\u5082>Zh{i4};",
+ "\u5083>S{u4};",
+ "\u5084>Xia;",
+ "\u5085>F{u4};",
+ "\u5086>Yu{a4}n;",
+ "\u5087>R{o3}ng;",
+ "\u5088>L{i4};",
+ "\u5089>R{u4};",
+ "\u508A>Y{u3}n;",
+ "\u508B>Go{u4};",
+ "\u508C>M{a4};",
+ "\u508D>B{a4}ng;",
+ "\u508E>Dian;",
+ "\u508F>T{a2}ng;",
+ "\u5090>Ha{o4};",
+ "\u5091>Ji{e2};",
+ "\u5092>Xi;",
+ "\u5093>Sh{a4}n;",
+ "\u5094>Qi{a4}n;",
+ "\u5095>Ju{e2};",
+ "\u5096>Cang;",
+ "\u5097>Ch{u4};",
+ "\u5098>S{a3}n;",
+ "\u5099>Be{i4};",
+ "\u509A>Xia{o4};",
+ "\u509B>Y{o3}ng;",
+ "\u509C>Ya{o2};",
+ "\u509D>T{a4}n;",
+ "\u509E>Suo;",
+ "\u509F>Y{a3}ng;",
+ "\u50A0>Fa;",
+ "\u50A1>B{i4}ng;",
+ "\u50A2>Jia;",
+ "\u50A3>Da{i3};",
+ "\u50A4>Za{i4};",
+ "\u50A5>T{a3}ng;",
+ "\u50A7>B{i4}n;",
+ "\u50A8>Ch{u3};",
+ "\u50A9>Nu{o2};",
+ "\u50AA>Can;",
+ "\u50AB>Le{i3};",
+ "\u50AC>Cui;",
+ "\u50AD>Yong;",
+ "\u50AE>Zao;",
+ "\u50AF>Z{o3}ng;",
+ "\u50B0>P{e2}ng;",
+ "\u50B1>S{o3}ng;",
+ "\u50B2>A{o4};",
+ "\u50B3>Chu{a2}n;",
+ "\u50B4>Y{u3};",
+ "\u50B5>Zha{i4};",
+ "\u50B6>Co{u4};",
+ "\u50B7>Shang;",
+ "\u50B8>Qi{a3}ng;",
+ "\u50B9>J{i4}ng;",
+ "\u50BA>Ch{i4};",
+ "\u50BB>Sh{a3};",
+ "\u50BC>H{a4}n;",
+ "\u50BD>Zhang;",
+ "\u50BE>Qing;",
+ "\u50BF>Y{a4}n;",
+ "\u50C0>D{i4};",
+ "\u50C1>Xi;",
+ "\u50C2>L{uu3};",
+ "\u50C3>Be{i4};",
+ "\u50C4>Pia{o4};",
+ "\u50C5>J{i3}n;",
+ "\u50C6>Li{a2}n;",
+ "\u50C7>L{u4};",
+ "\u50C8>M{a4}n;",
+ "\u50C9>Qian;",
+ "\u50CA>Xian;",
+ "\u50CB>T{a4}n;",
+ "\u50CC>Y{i2}ng;",
+ "\u50CD>D{o4}ng;",
+ "\u50CE>Zhu{a4}n;",
+ "\u50CF>Xi{a4}ng;",
+ "\u50D0>Sh{a4}n;",
+ "\u50D1>Qia{o2};",
+ "\u50D2>Ji{o3}ng;",
+ "\u50D3>Tu{i3};",
+ "\u50D4>Z{u3}n;",
+ "\u50D5>P{u2};",
+ "\u50D6>Xi;",
+ "\u50D7>La{o2};",
+ "\u50D8>Ch{a3}ng;",
+ "\u50D9>Guang;",
+ "\u50DA>Lia{o2};",
+ "\u50DB>Qi;",
+ "\u50DC>D{e4}ng;",
+ "\u50DD>Ch{a2}n;",
+ "\u50DE>We{i3};",
+ "\u50DF>Ji;",
+ "\u50E0>Fan;",
+ "\u50E1>Hu{i4};",
+ "\u50E2>Chu{a3}n;",
+ "\u50E3>Ji{a4}n;",
+ "\u50E4>D{a4}n;",
+ "\u50E5>Jia{o3};",
+ "\u50E6>Ji{u4};",
+ "\u50E7>Seng;",
+ "\u50E8>F{e4}n;",
+ "\u50E9>Xi{a4}n;",
+ "\u50EA>Ju{e2};",
+ "\u50EB>{E4};",
+ "\u50EC>Jiao;",
+ "\u50ED>Ji{a4}n;",
+ "\u50EE>T{o2}ng;",
+ "\u50EF>L{i3}n;",
+ "\u50F0>B{o2};",
+ "\u50F1>G{u4};",
+ "\u50F3>S{u4};",
+ "\u50F4>Xi{a4}n;",
+ "\u50F5>Jiang;",
+ "\u50F6>M{i3}n;",
+ "\u50F7>Y{e4};",
+ "\u50F8>J{i4}n;",
+ "\u50F9>Ji{a4};",
+ "\u50FA>Qia{o4};",
+ "\u50FB>P{i4};",
+ "\u50FC>Feng;",
+ "\u50FD>Zho{u4};",
+ "\u50FE>A{i4};",
+ "\u50FF>Sa{i4};",
+ "\u5100>Y{i2};",
+ "\u5101>J{u4}n;",
+ "\u5102>N{o2}ng;",
+ "\u5103>Ch{a2}n;",
+ "\u5104>Y{i4};",
+ "\u5105>Dang;",
+ "\u5106>J{i3}ng;",
+ "\u5107>Xuan;",
+ "\u5108>Kua{i4};",
+ "\u5109>Ji{a3}n;",
+ "\u510A>Ch{u4};",
+ "\u510B>Dan;",
+ "\u510C>Jia{o3};",
+ "\u510D>Sh{a3};",
+ "\u510E>Za{i4};",
+ "\u5110>B{i4}n;",
+ "\u5111>{A4}n;",
+ "\u5112>R{u2};",
+ "\u5113>Ta{i2};",
+ "\u5114>Cho{u2};",
+ "\u5115>Cha{i2};",
+ "\u5116>L{a2}n;",
+ "\u5117>N{i3};",
+ "\u5118>J{i3}n;",
+ "\u5119>Qi{a4}n;",
+ "\u511A>M{e2}ng;",
+ "\u511B>W{u3};",
+ "\u511C>N{i2}ng;",
+ "\u511D>Qi{o2}ng;",
+ "\u511E>N{i3};",
+ "\u511F>Ch{a2}ng;",
+ "\u5120>Li{e4};",
+ "\u5121>Le{i3};",
+ "\u5122>L{uu3};",
+ "\u5123>Ku{a4}ng;",
+ "\u5124>Ba{o4};",
+ "\u5125>D{u2};",
+ "\u5126>Biao;",
+ "\u5127>Z{a3}n;",
+ "\u5128>Zh{i2};",
+ "\u5129>S{i4};",
+ "\u512A>You;",
+ "\u512B>Ha{o2};",
+ "\u512C>Ch{e4}n;",
+ "\u512D>Ch{e4}n;",
+ "\u512E>L{i4};",
+ "\u512F>T{e2}ng;",
+ "\u5130>We{i3};",
+ "\u5131>L{o3}ng;",
+ "\u5132>Ch{u3};",
+ "\u5133>Ch{a4}n;",
+ "\u5134>R{a2}ng;",
+ "\u5135>Shu;",
+ "\u5136>Hu{i4};",
+ "\u5137>L{i4};",
+ "\u5138>Lu{o2};",
+ "\u5139>Z{a3}n;",
+ "\u513A>Nu{o2};",
+ "\u513B>T{a3}ng;",
+ "\u513C>Y{a3}n;",
+ "\u513D>Le{i3};",
+ "\u513E>N{a4}ng;",
+ "\u513F>{E2}r;",
+ "\u5140>W{u4};",
+ "\u5141>Y{u3}n;",
+ "\u5142>Zan;",
+ "\u5143>Yu{a2}n;",
+ "\u5144>Xiong;",
+ "\u5145>Chong;",
+ "\u5146>Zha{o4};",
+ "\u5147>Xiong;",
+ "\u5148>Xian;",
+ "\u5149>Guang;",
+ "\u514A>Du{i4};",
+ "\u514B>K{e4};",
+ "\u514C>Du{i4};",
+ "\u514D>Mi{a3}n;",
+ "\u514E>T{u4};",
+ "\u514F>Ch{a2}ng;",
+ "\u5150>{E2}r;",
+ "\u5151>Du{i4};",
+ "\u5152>{E2}r;",
+ "\u5153>Xin;",
+ "\u5154>T{u4};",
+ "\u5155>S{i4};",
+ "\u5156>Y{a3}n;",
+ "\u5157>Y{a3}n;",
+ "\u5158>Sh{i3};",
+ "\u5159>Shi2k{e4};",
+ "\u515A>D{a3}ng;",
+ "\u515B>Qian;",
+ "\u515C>Dou;",
+ "\u515D>Fen;",
+ "\u515E>Ma{o2};",
+ "\u515F>Shen;",
+ "\u5160>Dou;",
+ "\u5161>Bai3k{e4};",
+ "\u5162>Jing;",
+ "\u5163>L{i3};",
+ "\u5164>Hu{a2}ng;",
+ "\u5165>R{u4};",
+ "\u5166>W{a2}ng;",
+ "\u5167>Ne{i4};",
+ "\u5168>Qu{a2}n;",
+ "\u5169>Li{a3}ng;",
+ "\u516A>Y{u2};",
+ "\u516B>Ba;",
+ "\u516C>Gong;",
+ "\u516D>Li{u4};",
+ "\u516E>Xi;",
+ "\u5170>L{a2}n;",
+ "\u5171>G{o4}ng;",
+ "\u5172>Tian;",
+ "\u5173>Guan;",
+ "\u5174>Xing;",
+ "\u5175>Bing;",
+ "\u5176>Q{i2};",
+ "\u5177>J{u4};",
+ "\u5178>Di{a3}n;",
+ "\u5179>Zi;",
+ "\u517B>Y{a3}ng;",
+ "\u517C>Jian;",
+ "\u517D>Sho{u4};",
+ "\u517E>J{i4};",
+ "\u517F>Y{i4};",
+ "\u5180>J{i4};",
+ "\u5181>Ch{a3}n;",
+ "\u5182>Jiong;",
+ "\u5183>Mao;",
+ "\u5184>R{a3}n;",
+ "\u5185>Ne{i4};",
+ "\u5186>Yuan;",
+ "\u5187>Ma{o3};",
+ "\u5188>Gang;",
+ "\u5189>R{a3}n;",
+ "\u518A>C{e4};",
+ "\u518B>Jiong;",
+ "\u518C>C{e4};",
+ "\u518D>Za{i4};",
+ "\u518E>Gu{a3};",
+ "\u518F>Ji{o3}ng;",
+ "\u5190>Ma{o4};",
+ "\u5191>Zho{u4};",
+ "\u5192>Mo{u4};",
+ "\u5193>Go{u4};",
+ "\u5194>X{u3};",
+ "\u5195>Mi{a3}n;",
+ "\u5196>M{i4};",
+ "\u5197>R{o3}ng;",
+ "\u5198>Y{i2}n;",
+ "\u5199>Xi{e3};",
+ "\u519A>K{a3}n;",
+ "\u519B>Jun;",
+ "\u519C>N{o2}ng;",
+ "\u519D>Y{i2};",
+ "\u519E>M{i2};",
+ "\u519F>Sh{i4};",
+ "\u51A0>Guan;",
+ "\u51A1>M{e2}ng;",
+ "\u51A2>Zh{o3}ng;",
+ "\u51A3>J{u4};",
+ "\u51A4>Yuan;",
+ "\u51A5>M{i2}ng;",
+ "\u51A6>Ko{u4};",
+ "\u51A8>F{u4};",
+ "\u51A9>Xi{e3};",
+ "\u51AA>M{i4};",
+ "\u51AB>Bing;",
+ "\u51AC>Dong;",
+ "\u51AD>Ta{i2};",
+ "\u51AE>Gang;",
+ "\u51AF>F{e2}ng;",
+ "\u51B0>Bing;",
+ "\u51B1>H{u4};",
+ "\u51B2>Chong;",
+ "\u51B3>Ju{e2};",
+ "\u51B4>H{u4};",
+ "\u51B5>Ku{a4}ng;",
+ "\u51B6>Y{e3};",
+ "\u51B7>L{e3}ng;",
+ "\u51B8>P{a4}n;",
+ "\u51B9>F{u2};",
+ "\u51BA>M{i3}n;",
+ "\u51BB>D{o4}ng;",
+ "\u51BC>Xi{a3}n;",
+ "\u51BD>Li{e4};",
+ "\u51BE>Xi{a2};",
+ "\u51BF>Jian;",
+ "\u51C0>J{i4}ng;",
+ "\u51C1>Sh{u4};",
+ "\u51C2>Me{i3};",
+ "\u51C3>T{u2};",
+ "\u51C4>Qi;",
+ "\u51C5>G{u4};",
+ "\u51C6>Zh{u3}n;",
+ "\u51C7>S{o4}ng;",
+ "\u51C8>J{i4}ng;",
+ "\u51C9>Li{a2}ng;",
+ "\u51CA>Q{i4}ng;",
+ "\u51CB>Diao;",
+ "\u51CC>L{i2}ng;",
+ "\u51CD>D{o4}ng;",
+ "\u51CE>G{a4}n;",
+ "\u51CF>Ji{a3}n;",
+ "\u51D0>Yin;",
+ "\u51D1>Co{u4};",
+ "\u51D2>Y{i2};",
+ "\u51D3>L{i4};",
+ "\u51D4>Cang;",
+ "\u51D5>M{i3}ng;",
+ "\u51D6>Zhu{e3}n;",
+ "\u51D7>Cu{i2};",
+ "\u51D8>Si;",
+ "\u51D9>Du{o2};",
+ "\u51DA>J{i4}n;",
+ "\u51DB>L{i3}n;",
+ "\u51DC>L{i3}n;",
+ "\u51DD>N{i2}ng;",
+ "\u51DE>Xi;",
+ "\u51DF>D{u2};",
+ "\u51E0>Ji;",
+ "\u51E1>F{a2}n;",
+ "\u51E2>F{a2}n;",
+ "\u51E3>F{a2}n;",
+ "\u51E4>F{e4}ng;",
+ "\u51E5>Ju;",
+ "\u51E6>Ch{u3};",
+ "\u51E8>Feng;",
+ "\u51EB>F{u2};",
+ "\u51EC>Feng;",
+ "\u51ED>P{i2}ng;",
+ "\u51EE>Feng;",
+ "\u51EF>Ka{i3};",
+ "\u51F0>Hu{a2}ng;",
+ "\u51F1>Ka{i3};",
+ "\u51F2>Gan;",
+ "\u51F3>D{e4}ng;",
+ "\u51F4>P{i2}ng;",
+ "\u51F5>Qu;",
+ "\u51F6>Xiong;",
+ "\u51F7>Kua{i4};",
+ "\u51F8>Tu;",
+ "\u51F9>Ao;",
+ "\u51FA>Chu;",
+ "\u51FB>J{i2};",
+ "\u51FC>D{a4}ng;",
+ "\u51FD>H{a2}n;",
+ "\u51FE>H{a2}n;",
+ "\u51FF>Za{o2};",
+ "\u5200>Dao;",
+ "\u5201>Diao;",
+ "\u5202>Dao;",
+ "\u5203>R{e4}n;",
+ "\u5204>R{e4}n;",
+ "\u5205>Chuang;",
+ "\u5206>Fen;",
+ "\u5207>Qie;",
+ "\u5208>Y{i4};",
+ "\u5209>Ji;",
+ "\u520A>Kan;",
+ "\u520B>Qi{a4}n;",
+ "\u520C>C{u3}n;",
+ "\u520D>Ch{u2};",
+ "\u520E>W{e3}n;",
+ "\u520F>Ji;",
+ "\u5210>D{a3}n;",
+ "\u5211>X{i2}ng;",
+ "\u5212>Hu{a2};",
+ "\u5213>W{a2}n;",
+ "\u5214>Ju{e2};",
+ "\u5215>L{i2};",
+ "\u5216>Yu{e4};",
+ "\u5217>Li{e4};",
+ "\u5218>Li{u2};",
+ "\u5219>Z{e2};",
+ "\u521A>Gang;",
+ "\u521B>Chu{a4}ng;",
+ "\u521C>F{u2};",
+ "\u521D>Chu;",
+ "\u521E>Q{u4};",
+ "\u521F>Ju;",
+ "\u5220>Shan;",
+ "\u5221>M{i3}n;",
+ "\u5222>L{i2}ng;",
+ "\u5223>Zhong;",
+ "\u5224>P{a4}n;",
+ "\u5225>Bi{e2};",
+ "\u5226>Ji{e2};",
+ "\u5227>Ji{e2};",
+ "\u5228>Ba{o4};",
+ "\u5229>L{i4};",
+ "\u522A>Shan;",
+ "\u522B>Bi{e2};",
+ "\u522C>Ch{a3}n;",
+ "\u522D>J{i3}ng;",
+ "\u522E>Gua;",
+ "\u522F>Gen;",
+ "\u5230>Da{o4};",
+ "\u5231>Chu{a4}ng;",
+ "\u5232>Kui;",
+ "\u5233>Ku;",
+ "\u5234>Du{o4};",
+ "\u5235>{E4}r;",
+ "\u5236>Zh{i4};",
+ "\u5237>Shua;",
+ "\u5238>Qu{a4}n;",
+ "\u5239>Ch{a4};",
+ "\u523A>C{i4};",
+ "\u523B>K{e4};",
+ "\u523C>Ji{e2};",
+ "\u523D>Gu{i4};",
+ "\u523E>C{i4};",
+ "\u523F>Gu{i4};",
+ "\u5240>Ka{i3};",
+ "\u5241>Du{o4};",
+ "\u5242>J{i4};",
+ "\u5243>T{i4};",
+ "\u5244>J{i3}ng;",
+ "\u5245>Lo{u2};",
+ "\u5246>Gen;",
+ "\u5247>Z{e2};",
+ "\u5248>Yuan;",
+ "\u5249>Cu{o4};",
+ "\u524A>Xue;",
+ "\u524B>K{e4};",
+ "\u524C>L{a4};",
+ "\u524D>Qi{a2}n;",
+ "\u524E>Ch{a4};",
+ "\u524F>Chu{a4}ng;",
+ "\u5250>Gu{a3};",
+ "\u5251>Ji{a4}n;",
+ "\u5252>Cu{o4};",
+ "\u5253>L{i2};",
+ "\u5254>Ti;",
+ "\u5255>Fe{i4};",
+ "\u5256>Pou;",
+ "\u5257>Ch{a3}n;",
+ "\u5258>Q{i2};",
+ "\u5259>Chu{a4}ng;",
+ "\u525A>Z{i4};",
+ "\u525B>Gang;",
+ "\u525C>Wan;",
+ "\u525D>Bo;",
+ "\u525E>Ji;",
+ "\u525F>Duo;",
+ "\u5260>Q{i2}ng;",
+ "\u5261>Y{a3}n;",
+ "\u5262>Zhu{o2};",
+ "\u5263>Ji{a4}n;",
+ "\u5264>J{i4};",
+ "\u5265>Bo;",
+ "\u5266>Yan;",
+ "\u5267>J{u4};",
+ "\u5268>Hu{o4};",
+ "\u5269>Sh{e4}ng;",
+ "\u526A>Ji{a3}n;",
+ "\u526B>Du{o2};",
+ "\u526C>Duan;",
+ "\u526D>Wu;",
+ "\u526E>Gu{a3};",
+ "\u526F>F{u4};",
+ "\u5270>Sh{e4}ng;",
+ "\u5271>Ji{a4}n;",
+ "\u5272>Ge;",
+ "\u5273>Zha;",
+ "\u5274>Ka{i3};",
+ "\u5275>Chu{a4}ng;",
+ "\u5276>Juan;",
+ "\u5277>Ch{a3}n;",
+ "\u5278>Tu{a2}n;",
+ "\u5279>L{u4};",
+ "\u527A>L{i2};",
+ "\u527B>Fo{u2};",
+ "\u527C>Shan;",
+ "\u527D>Pia{o4};",
+ "\u527E>Kou;",
+ "\u527F>Jia{o3};",
+ "\u5280>Gua;",
+ "\u5281>Qiao;",
+ "\u5282>Ju{e2};",
+ "\u5283>Hu{a4};",
+ "\u5284>Zh{a2};",
+ "\u5285>Zhu{o4};",
+ "\u5286>Li{a2}n;",
+ "\u5287>J{u4};",
+ "\u5288>Pi;",
+ "\u5289>Li{u2};",
+ "\u528A>Gu{i4};",
+ "\u528B>Jia{o3};",
+ "\u528C>Gu{i4};",
+ "\u528D>Ji{a4}n;",
+ "\u528E>Ji{a4}n;",
+ "\u528F>Tang;",
+ "\u5290>Huo;",
+ "\u5291>J{i4};",
+ "\u5292>Ji{a4}n;",
+ "\u5293>Y{i4};",
+ "\u5294>Ji{a4}n;",
+ "\u5295>Zh{i2};",
+ "\u5296>Ch{a2}n;",
+ "\u5297>Cu{a2}n;",
+ "\u5298>M{o2};",
+ "\u5299>L{i2};",
+ "\u529A>Zh{u2};",
+ "\u529B>L{i4};",
+ "\u529C>Ya;",
+ "\u529D>Qu{a4}n;",
+ "\u529E>B{a4}n;",
+ "\u529F>Gong;",
+ "\u52A0>Jia;",
+ "\u52A1>W{u4};",
+ "\u52A2>Ma{i4};",
+ "\u52A3>Li{e4};",
+ "\u52A4>J{i4}n;",
+ "\u52A5>Keng;",
+ "\u52A6>Xi{e2};",
+ "\u52A7>Zh{i3};",
+ "\u52A8>D{o4}ng;",
+ "\u52A9>Zh{u4};",
+ "\u52AA>N{u3};",
+ "\u52AB>Ji{e2};",
+ "\u52AC>Q{u2};",
+ "\u52AD>Sha{o4};",
+ "\u52AE>Y{i4};",
+ "\u52AF>Zhu;",
+ "\u52B0>Mia{o3};",
+ "\u52B1>L{i4};",
+ "\u52B2>J{i4}ng;",
+ "\u52B3>La{o2};",
+ "\u52B4>La{o2};",
+ "\u52B5>Ju{a4}n;",
+ "\u52B6>Ko{u3};",
+ "\u52B7>Y{a2}ng;",
+ "\u52B8>Wa;",
+ "\u52B9>Xia{o4};",
+ "\u52BA>Mo{u2};",
+ "\u52BB>Kuang;",
+ "\u52BC>Ji{e2};",
+ "\u52BD>Li{e4};",
+ "\u52BE>H{e2};",
+ "\u52BF>Sh{i4};",
+ "\u52C0>K{e4};",
+ "\u52C1>J{i4}ng;",
+ "\u52C2>Ha{o2};",
+ "\u52C3>B{o2};",
+ "\u52C4>M{i3}n;",
+ "\u52C5>Ch{i4};",
+ "\u52C6>L{a2}ng;",
+ "\u52C7>Y{o3}ng;",
+ "\u52C8>Y{o3}ng;",
+ "\u52C9>Mi{a3}n;",
+ "\u52CA>K{e4};",
+ "\u52CB>Xun;",
+ "\u52CC>Ju{a4}n;",
+ "\u52CD>Q{i2}ng;",
+ "\u52CE>L{u4};",
+ "\u52CF>Po{u3};",
+ "\u52D0>M{e3}ng;",
+ "\u52D1>La{i4};",
+ "\u52D2>L{e4};",
+ "\u52D3>Ka{i4};",
+ "\u52D4>Mi{a3}n;",
+ "\u52D5>D{o4}ng;",
+ "\u52D6>X{u4};",
+ "\u52D7>X{u4};",
+ "\u52D8>Kan;",
+ "\u52D9>W{u4};",
+ "\u52DA>Y{i4};",
+ "\u52DB>Xun;",
+ "\u52DC>W{e3}ng;",
+ "\u52DD>Sh{e4}ng;",
+ "\u52DE>La{o2};",
+ "\u52DF>M{u4};",
+ "\u52E0>L{u4};",
+ "\u52E1>Pia{o4};",
+ "\u52E2>Sh{i4};",
+ "\u52E3>Ji;",
+ "\u52E4>Q{i2}n;",
+ "\u52E5>Qi{a3}ng;",
+ "\u52E6>Jia{o3};",
+ "\u52E7>Qu{a4}n;",
+ "\u52E8>Y{a3}ng;",
+ "\u52E9>Y{i4};",
+ "\u52EA>Ju{e2};",
+ "\u52EB>F{a2}n;",
+ "\u52EC>Ju{a4}n;",
+ "\u52ED>T{o2}ng;",
+ "\u52EE>J{u4};",
+ "\u52EF>Dan;",
+ "\u52F0>Xi{e2};",
+ "\u52F1>Ma{i4};",
+ "\u52F2>Xun;",
+ "\u52F3>Xun;",
+ "\u52F4>L{uu4};",
+ "\u52F5>L{i4};",
+ "\u52F6>Ch{e4};",
+ "\u52F7>R{a2}ng;",
+ "\u52F8>Qu{a4}n;",
+ "\u52F9>Bao;",
+ "\u52FA>Sha{o2};",
+ "\u52FB>Y{u2}n;",
+ "\u52FC>Jiu;",
+ "\u52FD>Ba{o4};",
+ "\u52FE>Gou;",
+ "\u52FF>W{u4};",
+ "\u5300>Y{u2}n;",
+ "\u5303>Ga{i4};",
+ "\u5304>Ga{i4};",
+ "\u5305>Bao;",
+ "\u5306>Cong;",
+ "\u5308>Xiong;",
+ "\u5309>Peng;",
+ "\u530A>J{u2};",
+ "\u530B>Ta{o2};",
+ "\u530C>G{e2};",
+ "\u530D>P{u2};",
+ "\u530E>{A4}n;",
+ "\u530F>Pa{o2};",
+ "\u5310>F{u2};",
+ "\u5311>Gong;",
+ "\u5312>D{a2};",
+ "\u5313>Ji{u4};",
+ "\u5314>Qiong;",
+ "\u5315>B{i3};",
+ "\u5316>Hu{a4};",
+ "\u5317>Be{i3};",
+ "\u5318>Na{o3};",
+ "\u5319>Ch{i2};",
+ "\u531A>Fang;",
+ "\u531B>Ji{u4};",
+ "\u531C>Y{i2};",
+ "\u531D>Za;",
+ "\u531E>Ji{a4}ng;",
+ "\u531F>K{a4}ng;",
+ "\u5320>Ji{a4}ng;",
+ "\u5321>Kuang;",
+ "\u5322>Hu;",
+ "\u5323>Xi{a2};",
+ "\u5324>Qu;",
+ "\u5325>Bi{a4}n;",
+ "\u5326>Gu{i3};",
+ "\u5327>Qi{e4};",
+ "\u5328>Zang;",
+ "\u5329>Kuang;",
+ "\u532A>Fe{i3};",
+ "\u532B>Hu;",
+ "\u532C>To{u2};",
+ "\u532D>Gu{i3};",
+ "\u532E>Gu{i4};",
+ "\u532F>Hu{i4};",
+ "\u5330>Dan;",
+ "\u5331>Gu{i4};",
+ "\u5332>Li{a2}n;",
+ "\u5333>Li{a2}n;",
+ "\u5334>Su{a3}n;",
+ "\u5335>D{u2};",
+ "\u5336>Ji{u4};",
+ "\u5337>Q{u2};",
+ "\u5338>X{i3};",
+ "\u5339>P{i3};",
+ "\u533A>Qu;",
+ "\u533B>Y{i4};",
+ "\u533C>Qi{a4};",
+ "\u533D>Y{a3}n;",
+ "\u533E>Bi{a3}n;",
+ "\u533F>N{i4};",
+ "\u5340>Qu;",
+ "\u5341>Sh{i2};",
+ "\u5342>X{i4}n;",
+ "\u5343>Qian;",
+ "\u5344>Ni{a4}n;",
+ "\u5345>S{a4};",
+ "\u5346>Z{u2};",
+ "\u5347>Sheng;",
+ "\u5348>W{u3};",
+ "\u5349>Hu{i4};",
+ "\u534A>B{a4}n;",
+ "\u534B>Sh{i4};",
+ "\u534C>X{i4};",
+ "\u534D>W{a4}n;",
+ "\u534E>Hu{a2};",
+ "\u534F>Xi{e2};",
+ "\u5350>W{a4}n;",
+ "\u5351>Bei;",
+ "\u5352>Z{u2};",
+ "\u5353>Zhuo;",
+ "\u5354>Xi{e2};",
+ "\u5355>Dan;",
+ "\u5356>Ma{i4};",
+ "\u5357>N{a2}n;",
+ "\u5358>Dan;",
+ "\u5359>J{i2};",
+ "\u535A>B{o2};",
+ "\u535B>Shua{i4};",
+ "\u535C>B{u3};",
+ "\u535D>Ku{a4}ng;",
+ "\u535E>Bi{a4}n;",
+ "\u535F>B{u3};",
+ "\u5360>Zhan;",
+ "\u5361>Qi{a3};",
+ "\u5362>L{u2};",
+ "\u5363>Yo{u3};",
+ "\u5364>L{u3};",
+ "\u5365>Xi;",
+ "\u5366>Gu{a4};",
+ "\u5367>W{o4};",
+ "\u5368>Xi{e4};",
+ "\u5369>Ji{e2};",
+ "\u536A>Ji{e2};",
+ "\u536B>We{i4};",
+ "\u536C>{A2}ng;",
+ "\u536D>Qi{o2}ng;",
+ "\u536E>Zhi;",
+ "\u536F>Ma{o3};",
+ "\u5370>Y{i4}n;",
+ "\u5371>Wei;",
+ "\u5372>Sha{o4};",
+ "\u5373>J{i2};",
+ "\u5374>Qu{e4};",
+ "\u5375>Lu{a3}n;",
+ "\u5376>Sh{i4};",
+ "\u5377>Ju{a4}n;",
+ "\u5378>Xi{e4};",
+ "\u5379>X{u4};",
+ "\u537A>J{i3}n;",
+ "\u537B>Qu{e4};",
+ "\u537C>W{u4};",
+ "\u537D>J{i2};",
+ "\u537E>{E4};",
+ "\u537F>Qing;",
+ "\u5380>Xi;",
+ "\u5382>H{a4}n;",
+ "\u5383>Zhan;",
+ "\u5384>{E4};",
+ "\u5385>Ting;",
+ "\u5386>L{i4};",
+ "\u5387>Zh{e2};",
+ "\u5388>H{a3}n;",
+ "\u5389>L{i4};",
+ "\u538A>Y{a3};",
+ "\u538B>Ya;",
+ "\u538C>Y{a4}n;",
+ "\u538D>Sh{e4};",
+ "\u538E>Zh{i3};",
+ "\u538F>Zh{a3};",
+ "\u5390>P{a2}ng;",
+ "\u5392>H{e2};",
+ "\u5393>Y{a2};",
+ "\u5394>Zh{i4};",
+ "\u5395>C{e4};",
+ "\u5396>P{a2}ng;",
+ "\u5397>T{i2};",
+ "\u5398>L{i2};",
+ "\u5399>Sh{e4};",
+ "\u539A>Ho{u4};",
+ "\u539B>Ting;",
+ "\u539C>Zui;",
+ "\u539D>Cu{o4};",
+ "\u539E>Fe{i4};",
+ "\u539F>Yu{a2}n;",
+ "\u53A0>C{e4};",
+ "\u53A1>Yu{a2}n;",
+ "\u53A2>Xiang;",
+ "\u53A3>Y{a3}n;",
+ "\u53A4>L{i4};",
+ "\u53A5>Ju{e2};",
+ "\u53A6>Sh{a4};",
+ "\u53A7>Dian;",
+ "\u53A8>Ch{u2};",
+ "\u53A9>Ji{u4};",
+ "\u53AA>Q{i2}n;",
+ "\u53AB>A{o2};",
+ "\u53AC>Gu{i3};",
+ "\u53AD>Y{a4}n;",
+ "\u53AE>Si;",
+ "\u53AF>L{i4};",
+ "\u53B0>Ch{a3}ng;",
+ "\u53B1>L{a2}n;",
+ "\u53B2>L{i4};",
+ "\u53B3>Y{a2}n;",
+ "\u53B4>Y{a3}n;",
+ "\u53B5>Yu{a2}n;",
+ "\u53B6>Si;",
+ "\u53B7>Gong;",
+ "\u53B8>L{i2}n;",
+ "\u53B9>Qi{u2};",
+ "\u53BA>Q{u4};",
+ "\u53BB>Q{u4};",
+ "\u53BD>Le{i3};",
+ "\u53BE>Du;",
+ "\u53BF>Xi{a4}n;",
+ "\u53C0>Zhuan;",
+ "\u53C1>San;",
+ "\u53C2>Can;",
+ "\u53C3>Can;",
+ "\u53C4>Can;",
+ "\u53C5>Can;",
+ "\u53C6>A{i4};",
+ "\u53C7>Da{i4};",
+ "\u53C8>Yo{u4};",
+ "\u53C9>Ch{a1};",
+ "\u53CA>J{i2};",
+ "\u53CB>Yo{u3};",
+ "\u53CC>Shuang;",
+ "\u53CD>F{a3}n;",
+ "\u53CE>Shou;",
+ "\u53CF>Gua{i4};",
+ "\u53D0>B{a2};",
+ "\u53D1>Fa;",
+ "\u53D2>Ru{o4};",
+ "\u53D3>Sh{i4};",
+ "\u53D4>Shu;",
+ "\u53D5>Zhu{o2};",
+ "\u53D6>Qu;",
+ "\u53D7>Sho{u4};",
+ "\u53D8>Bi{a4}n;",
+ "\u53D9>X{u4};",
+ "\u53DA>Ji{a3};",
+ "\u53DB>P{a4}n;",
+ "\u53DC>So{u3};",
+ "\u53DD>Ga{o4};",
+ "\u53DE>We{i4};",
+ "\u53DF>So{u3};",
+ "\u53E0>Di{e2};",
+ "\u53E1>Ru{i4};",
+ "\u53E2>C{o2}ng;",
+ "\u53E3>Ko{u3};",
+ "\u53E4>G{u3};",
+ "\u53E5>J{u4};",
+ "\u53E6>L{i4}ng;",
+ "\u53E7>Gu{a3};",
+ "\u53E8>Tao;",
+ "\u53E9>Ko{u4};",
+ "\u53EA>Zh{i3};",
+ "\u53EB>Jia{o4};",
+ "\u53EC>Zha{o4};",
+ "\u53ED>Ba;",
+ "\u53EE>Ding;",
+ "\u53EF>K{e3};",
+ "\u53F0>Ta{i2};",
+ "\u53F1>Ch{i4};",
+ "\u53F2>Sh{i3};",
+ "\u53F3>Yo{u4};",
+ "\u53F4>Qi{u2};",
+ "\u53F5>P{o3};",
+ "\u53F6>Xi{e2};",
+ "\u53F7>Ha{o4};",
+ "\u53F8>Si;",
+ "\u53F9>T{a4}n;",
+ "\u53FA>Ch{i3};",
+ "\u53FB>L{e4};",
+ "\u53FC>Diao;",
+ "\u53FD>Ji;",
+ "\u53FF>Hong;",
+ "\u5400>Mie;",
+ "\u5401>Xu;",
+ "\u5402>M{a2}ng;",
+ "\u5403>Chi;",
+ "\u5404>G{e4};",
+ "\u5405>Xuan;",
+ "\u5406>Yao;",
+ "\u5407>Z{i3};",
+ "\u5408>H{e2};",
+ "\u5409>J{i2};",
+ "\u540A>Dia{o4};",
+ "\u540B>C{u4}n;",
+ "\u540C>T{o2}ng;",
+ "\u540D>M{i2}ng;",
+ "\u540E>Ho{u4};",
+ "\u540F>L{i4};",
+ "\u5410>T{u3};",
+ "\u5411>Xi{a4}ng;",
+ "\u5412>Zh{a4};",
+ "\u5413>Xi{a4};",
+ "\u5414>Y{e3};",
+ "\u5415>L{uu3};",
+ "\u5416>A;",
+ "\u5417>M{a1};",
+ "\u5418>O{u3};",
+ "\u5419>Xue;",
+ "\u541A>Yi;",
+ "\u541B>Jun;",
+ "\u541C>Cho{u3};",
+ "\u541D>L{i4}n;",
+ "\u541E>Tun;",
+ "\u541F>Y{i2}n;",
+ "\u5420>Fe{i4};",
+ "\u5421>B{i3};",
+ "\u5422>Q{i4}n;",
+ "\u5423>Q{i4}n;",
+ "\u5424>Ji{e4};",
+ "\u5425>B{u4};",
+ "\u5426>Fo{u3};",
+ "\u5427>B{a1};",
+ "\u5428>Dun;",
+ "\u5429>Fen;",
+ "\u542A>{E2};",
+ "\u542B>H{a2}n;",
+ "\u542C>Ting;",
+ "\u542D>H{a2}ng;",
+ "\u542E>Sh{u3}n;",
+ "\u542F>Q{i3};",
+ "\u5430>H{o2}ng;",
+ "\u5431>Zhi;",
+ "\u5432>Sh{e3}n;",
+ "\u5433>W{u2};",
+ "\u5434>W{u2};",
+ "\u5435>Cha{o3};",
+ "\u5436>N{e4};",
+ "\u5437>Xu{e4};",
+ "\u5438>Xi;",
+ "\u5439>Chui;",
+ "\u543A>Dou;",
+ "\u543B>W{e3}n;",
+ "\u543C>Ho{u3};",
+ "\u543D>O{u2};",
+ "\u543E>W{u2};",
+ "\u543F>Ga{o4};",
+ "\u5440>Ya;",
+ "\u5441>J{u4}n;",
+ "\u5442>L{uu3};",
+ "\u5443>{E4};",
+ "\u5444>G{e2};",
+ "\u5445>Me{i2};",
+ "\u5446>A{i2};",
+ "\u5447>Q{i3};",
+ "\u5448>Ch{e2}ng;",
+ "\u5449>W{u2};",
+ "\u544A>Ga{o4};",
+ "\u544B>Fu;",
+ "\u544C>Jia{o4};",
+ "\u544D>Hong;",
+ "\u544E>Ch{i3};",
+ "\u544F>Sheng;",
+ "\u5450>N{e4};",
+ "\u5451>Tun;",
+ "\u5452>F{u3};",
+ "\u5453>Y{i4};",
+ "\u5454>Dai;",
+ "\u5455>Ou;",
+ "\u5456>L{i4};",
+ "\u5457>Ba{i4};",
+ "\u5458>Yu{a2}n;",
+ "\u5459>Kuai;",
+ "\u545B>Qiang;",
+ "\u545C>Wu;",
+ "\u545D>{E4};",
+ "\u545E>Shi;",
+ "\u545F>Qu{a3}n;",
+ "\u5460>Pen;",
+ "\u5461>W{e3}n;",
+ "\u5462>N{i2};",
+ "\u5463>M{2};",
+ "\u5464>L{i3}ng;",
+ "\u5465>R{a3}n;",
+ "\u5466>You;",
+ "\u5467>D{i3};",
+ "\u5468>Zhou;",
+ "\u5469>Sh{i4};",
+ "\u546A>Zho{u4};",
+ "\u546B>Tie;",
+ "\u546C>X{i4};",
+ "\u546D>Y{i4};",
+ "\u546E>Q{i4};",
+ "\u546F>P{i2}ng;",
+ "\u5470>Z{i3};",
+ "\u5471>Gu;",
+ "\u5472>Zi;",
+ "\u5473>We{i4};",
+ "\u5474>Xu;",
+ "\u5475>He;",
+ "\u5476>Na{o2};",
+ "\u5477>Xia;",
+ "\u5478>Pei;",
+ "\u5479>Y{i4};",
+ "\u547A>Xiao;",
+ "\u547B>Shen;",
+ "\u547C>Hu;",
+ "\u547D>M{i4}ng;",
+ "\u547E>D{a2};",
+ "\u547F>Qu;",
+ "\u5480>J{u3};",
+ "\u5481>G{e4}m;",
+ "\u5482>Za;",
+ "\u5483>Tuo;",
+ "\u5484>Duo;",
+ "\u5485>Po{u4};",
+ "\u5486>Pa{o2};",
+ "\u5487>B{i4};",
+ "\u5488>F{u2};",
+ "\u5489>Yang;",
+ "\u548A>H{e2};",
+ "\u548B>Zh{a4};",
+ "\u548C>H{e2};",
+ "\u548D>Hai;",
+ "\u548E>Ji{u4};",
+ "\u548F>Y{o3}ng;",
+ "\u5490>F{u4};",
+ "\u5491>Qu{e4};",
+ "\u5492>Zho{u4};",
+ "\u5493>W{a3};",
+ "\u5494>K{a3};",
+ "\u5495>Gu;",
+ "\u5496>Ka;",
+ "\u5497>Zu{o3};",
+ "\u5498>B{u4};",
+ "\u5499>L{o2}ng;",
+ "\u549A>Dong;",
+ "\u549B>N{i2}ng;",
+ "\u549D>Si;",
+ "\u549E>Xi{a4}n;",
+ "\u549F>Hu{o4};",
+ "\u54A0>Q{i4};",
+ "\u54A1>{E4}r;",
+ "\u54A2>{E4};",
+ "\u54A3>Guang;",
+ "\u54A4>Zh{a4};",
+ "\u54A5>X{i4};",
+ "\u54A6>Y{i2};",
+ "\u54A7>Li{e3};",
+ "\u54A8>Zi;",
+ "\u54A9>Mie;",
+ "\u54AA>Mi;",
+ "\u54AB>Zh{i3};",
+ "\u54AC>Ya{o3};",
+ "\u54AD>Ji;",
+ "\u54AE>Zho{u4};",
+ "\u54AF>Ge;",
+ "\u54B0>Shua{i4};",
+ "\u54B1>Z{a2}n;",
+ "\u54B2>Xia{o4};",
+ "\u54B3>K{e2};",
+ "\u54B4>Hui;",
+ "\u54B5>Kua;",
+ "\u54B6>Hua{i4};",
+ "\u54B7>Ta{o2};",
+ "\u54B8>Xi{a2}n;",
+ "\u54B9>{E4};",
+ "\u54BA>Xuan;",
+ "\u54BB>Xiu;",
+ "\u54BC>Wai;",
+ "\u54BD>Yan;",
+ "\u54BE>La{o3};",
+ "\u54BF>Yi;",
+ "\u54C0>Ai;",
+ "\u54C1>P{i3}n;",
+ "\u54C2>Sh{e3}n;",
+ "\u54C3>T{o2}ng;",
+ "\u54C4>Hong;",
+ "\u54C5>Xiong;",
+ "\u54C6>Ch{i3};",
+ "\u54C7>Wa;",
+ "\u54C8>Ha;",
+ "\u54C9>Zai;",
+ "\u54CA>Y{u4};",
+ "\u54CB>D{i4};",
+ "\u54CC>Pa{i4};",
+ "\u54CD>Xi{a3}ng;",
+ "\u54CE>Ai;",
+ "\u54CF>H{e3}n;",
+ "\u54D0>Kuang;",
+ "\u54D1>Y{a3};",
+ "\u54D2>Da;",
+ "\u54D3>Xiao;",
+ "\u54D4>B{i4};",
+ "\u54D5>Yu{e3};",
+ "\u54D7>Hua;",
+ "\u54D9>Kua{i4};",
+ "\u54DA>Du{o3};",
+ "\u54DC>J{i4};",
+ "\u54DD>N{o2}ng;",
+ "\u54DE>Mou;",
+ "\u54DF>Y{o1};",
+ "\u54E0>Ha{o4};",
+ "\u54E1>Yu{a2}n;",
+ "\u54E2>L{o4}ng;",
+ "\u54E3>Po{u3};",
+ "\u54E4>M{a2}ng;",
+ "\u54E5>Ge;",
+ "\u54E6>{E2};",
+ "\u54E7>Chi;",
+ "\u54E8>Sha{o4};",
+ "\u54E9>Li;",
+ "\u54EA>N{a3};",
+ "\u54EB>Z{u2};",
+ "\u54EC>H{e2};",
+ "\u54ED>Ku;",
+ "\u54EE>Xiao;",
+ "\u54EF>Xi{a4}n;",
+ "\u54F0>La{o2};",
+ "\u54F1>Bo;",
+ "\u54F2>Zh{e2};",
+ "\u54F3>Zha;",
+ "\u54F4>Li{a4}ng;",
+ "\u54F5>Ba;",
+ "\u54F6>Mie;",
+ "\u54F7>L{e4};",
+ "\u54F8>Sui;",
+ "\u54F9>Fo{u2};",
+ "\u54FA>B{u3};",
+ "\u54FB>H{a4}n;",
+ "\u54FC>Heng;",
+ "\u54FD>G{e3}ng;",
+ "\u54FE>Shuo;",
+ "\u54FF>G{e3};",
+ "\u5500>Yo{u3};",
+ "\u5501>Y{a4}n;",
+ "\u5502>G{u3};",
+ "\u5503>G{u3};",
+ "\u5504>Ba{i4};",
+ "\u5505>Han;",
+ "\u5506>Suo;",
+ "\u5507>Ch{u2}n;",
+ "\u5508>Y{i4};",
+ "\u5509>Ai;",
+ "\u550A>Ji{a2};",
+ "\u550B>T{u3};",
+ "\u550C>Xi{a2}n;",
+ "\u550D>Hu{a3}n;",
+ "\u550E>Li;",
+ "\u550F>Xi;",
+ "\u5510>T{a2}ng;",
+ "\u5511>Zu{o4};",
+ "\u5512>Qi{u2};",
+ "\u5513>Che;",
+ "\u5514>W{u2};",
+ "\u5515>Za{o4};",
+ "\u5516>Y{a3};",
+ "\u5517>Dou;",
+ "\u5518>Q{i3};",
+ "\u5519>D{i2};",
+ "\u551A>Q{i4}n;",
+ "\u551B>M{a4};",
+ "\u551D>H{o3}ng;",
+ "\u551E>Do{u3};",
+ "\u5520>La{o2};",
+ "\u5521>Li{a3}ng;",
+ "\u5522>Su{o3};",
+ "\u5523>Za{o4};",
+ "\u5524>Hu{a4}n;",
+ "\u5526>Sha;",
+ "\u5527>Ji;",
+ "\u5528>Zu{o3};",
+ "\u5529>Wo;",
+ "\u552A>F{e3}ng;",
+ "\u552B>Y{i2}n;",
+ "\u552C>H{u3};",
+ "\u552D>Qi;",
+ "\u552E>Sho{u4};",
+ "\u552F>We{i2};",
+ "\u5530>Shua;",
+ "\u5531>Ch{a4}ng;",
+ "\u5532>{E2}r;",
+ "\u5533>L{i4};",
+ "\u5534>Qi{a4}ng;",
+ "\u5535>{a3}n;",
+ "\u5536>Ji{e4};",
+ "\u5537>Yo;",
+ "\u5538>Ni{a4}n;",
+ "\u5539>Yu;",
+ "\u553A>Ti{a3}n;",
+ "\u553B>La{i3};",
+ "\u553C>Sh{a4};",
+ "\u553D>Xi;",
+ "\u553E>Tu{o4};",
+ "\u553F>Hu;",
+ "\u5540>A{i2};",
+ "\u5541>Zhou;",
+ "\u5542>No{u4};",
+ "\u5543>K{e3}n;",
+ "\u5544>Zhu{o2};",
+ "\u5545>Zhu{o2};",
+ "\u5546>Shang;",
+ "\u5547>D{i2};",
+ "\u5548>H{e4}ng;",
+ "\u5549>L{a2}n;",
+ "\u554A>{a1};",
+ "\u554B>Xiao;",
+ "\u554C>Xiang;",
+ "\u554D>Tun;",
+ "\u554E>W{u3};",
+ "\u554F>W{e4}n;",
+ "\u5550>Cu{i4};",
+ "\u5551>Sh{a4};",
+ "\u5552>Hu;",
+ "\u5553>Q{i3};",
+ "\u5554>Q{i3};",
+ "\u5555>Ta{o2};",
+ "\u5556>D{a4}n;",
+ "\u5557>D{a4}n;",
+ "\u5558>Y{e4};",
+ "\u5559>Z{i3};",
+ "\u555A>B{i3};",
+ "\u555B>Cu{i4};",
+ "\u555C>Chu{o4};",
+ "\u555D>H{e2};",
+ "\u555E>Y{a3};",
+ "\u555F>Q{i3};",
+ "\u5560>Zh{e2};",
+ "\u5561>Pei;",
+ "\u5562>Li{a3}ng;",
+ "\u5563>Xi{a2}n;",
+ "\u5564>P{i2};",
+ "\u5565>Sh{a4};",
+ "\u5566>L{a1};",
+ "\u5567>Z{e2};",
+ "\u5568>Qing;",
+ "\u5569>Gu{a4};",
+ "\u556A>Pa;",
+ "\u556B>Zh{e3};",
+ "\u556C>S{e4};",
+ "\u556D>Zhu{a4}n;",
+ "\u556E>Ni{e4};",
+ "\u556F>Gu{o1};",
+ "\u5570>Luo;",
+ "\u5571>Yan;",
+ "\u5572>D{i4};",
+ "\u5573>Qu{a2}n;",
+ "\u5574>Tan;",
+ "\u5575>B{o1};",
+ "\u5576>D{i4}ng;",
+ "\u5577>Lang;",
+ "\u5578>Xia{o4};",
+ "\u557A>T{a2}ng;",
+ "\u557B>Ch{i4};",
+ "\u557C>T{i2};",
+ "\u557D>{A2}n;",
+ "\u557E>Jiu;",
+ "\u557F>D{a4}n;",
+ "\u5580>K{e4};",
+ "\u5581>Y{o2}ng;",
+ "\u5582>We{i4};",
+ "\u5583>N{a2}n;",
+ "\u5584>Sh{a4}n;",
+ "\u5585>Y{u4};",
+ "\u5586>Zh{e2};",
+ "\u5587>L{a3};",
+ "\u5588>Jie;",
+ "\u5589>Ho{u2};",
+ "\u558A>H{a3}n;",
+ "\u558B>Di{e2};",
+ "\u558C>Zhou;",
+ "\u558D>Cha{i2};",
+ "\u558E>Wai;",
+ "\u558F>R{e3};",
+ "\u5590>Y{u4};",
+ "\u5591>Yin;",
+ "\u5592>Z{a2}n;",
+ "\u5593>Yao;",
+ "\u5594>Wo;",
+ "\u5595>Mi{a3}n;",
+ "\u5596>H{u2};",
+ "\u5597>Y{u3}n;",
+ "\u5598>Chu{a3}n;",
+ "\u5599>Hu{i4};",
+ "\u559A>Hu{a4}n;",
+ "\u559B>Hu{a4}n;",
+ "\u559C>X{i3};",
+ "\u559D>He;",
+ "\u559E>Ji;",
+ "\u559F>Ku{i4};",
+ "\u55A0>Zh{o3}ng;",
+ "\u55A1>We{i3};",
+ "\u55A2>Sh{a4};",
+ "\u55A3>X{u3};",
+ "\u55A4>Hu{a2}ng;",
+ "\u55A5>D{u4};",
+ "\u55A6>Ni{e4};",
+ "\u55A7>Xuan;",
+ "\u55A8>Li{a4}ng;",
+ "\u55A9>Y{u4};",
+ "\u55AA>Sang;",
+ "\u55AB>Chi;",
+ "\u55AC>Qia{o2};",
+ "\u55AD>Y{a4}n;",
+ "\u55AE>Dan;",
+ "\u55AF>Pen;",
+ "\u55B0>Can;",
+ "\u55B1>L{i2};",
+ "\u55B2>Y{o1};",
+ "\u55B3>Zha;",
+ "\u55B4>Wei;",
+ "\u55B5>Miao;",
+ "\u55B6>Y{i2}ng;",
+ "\u55B7>Pen;",
+ "\u55B9>Ku{i2};",
+ "\u55BA>X{i4};",
+ "\u55BB>Y{u4};",
+ "\u55BC>Ji{e2};",
+ "\u55BD>Lo{u1};",
+ "\u55BE>K{u4};",
+ "\u55BF>Sa{o4};",
+ "\u55C0>Hu{o4};",
+ "\u55C1>T{i2};",
+ "\u55C2>Ya{o2};",
+ "\u55C3>H{e4};",
+ "\u55C4>{A2};",
+ "\u55C5>Xi{u4};",
+ "\u55C6>Qiang;",
+ "\u55C7>S{e4};",
+ "\u55C8>Yong;",
+ "\u55C9>S{u4};",
+ "\u55CA>H{o3}ng;",
+ "\u55CB>Xi{e2};",
+ "\u55CC>Y{i4};",
+ "\u55CD>Suo;",
+ "\u55CE>M{a1};",
+ "\u55CF>Cha;",
+ "\u55D0>Ha{i4};",
+ "\u55D1>K{e4};",
+ "\u55D2>T{a4};",
+ "\u55D3>S{a3}ng;",
+ "\u55D4>Ti{a2}n;",
+ "\u55D5>R{u4};",
+ "\u55D6>Sou;",
+ "\u55D7>Wa;",
+ "\u55D8>Ji;",
+ "\u55D9>P{a3}ng;",
+ "\u55DA>Wu;",
+ "\u55DB>Xi{a2}n;",
+ "\u55DC>Sh{i4};",
+ "\u55DD>G{e2};",
+ "\u55DE>Zi;",
+ "\u55DF>Jie;",
+ "\u55E0>Lu{o4};",
+ "\u55E1>Weng;",
+ "\u55E2>W{a4};",
+ "\u55E3>S{i4};",
+ "\u55E4>Chi;",
+ "\u55E5>Ha{o2};",
+ "\u55E6>Suo;",
+ "\u55E7>Jia1l{u2}n;",
+ "\u55E8>Ha{i3};",
+ "\u55E9>Su{o3};",
+ "\u55EA>Q{i2}n;",
+ "\u55EB>Ni{e4};",
+ "\u55EC>He;",
+ "\u55EE>Sa{i4};",
+ "\u55EF>Ng{4};",
+ "\u55F0>G{e4};",
+ "\u55F1>N{a2};",
+ "\u55F2>Di{a3};",
+ "\u55F3>A{i4};",
+ "\u55F5>Tong;",
+ "\u55F6>B{i4};",
+ "\u55F7>A{o2};",
+ "\u55F8>A{o2};",
+ "\u55F9>Li{a2}n;",
+ "\u55FA>Cui;",
+ "\u55FB>Zhe;",
+ "\u55FC>M{o4};",
+ "\u55FD>So{u4};",
+ "\u55FE>So{u3};",
+ "\u55FF>T{a3}n;",
+ "\u5600>D{i2};",
+ "\u5601>Qi;",
+ "\u5602>Jia{o4};",
+ "\u5603>Chong;",
+ "\u5604>Jiao;",
+ "\u5605>Ka{i3};",
+ "\u5606>T{a4}n;",
+ "\u5607>San;",
+ "\u5608>Ca{o2};",
+ "\u5609>Jia;",
+ "\u560A>A{i2};",
+ "\u560B>Xiao;",
+ "\u560C>Piao;",
+ "\u560D>Lo{u1};",
+ "\u560E>Ga;",
+ "\u560F>G{u3};",
+ "\u5610>Xiao;",
+ "\u5611>Hu;",
+ "\u5612>Hu{i4};",
+ "\u5613>Gu{o1};",
+ "\u5614>Ou;",
+ "\u5615>Xian;",
+ "\u5616>Z{e2};",
+ "\u5617>Ch{a2}ng;",
+ "\u5618>Xu;",
+ "\u5619>P{o2};",
+ "\u561A>D{e2};",
+ "\u561B>M{a1};",
+ "\u561C>M{a4};",
+ "\u561D>H{u2};",
+ "\u561E>Le{i1};",
+ "\u561F>Du;",
+ "\u5620>Ga;",
+ "\u5621>Tang;",
+ "\u5622>Y{e3};",
+ "\u5623>Beng;",
+ "\u5624>Ying;",
+ "\u5626>Jia{o4};",
+ "\u5627>Mi;",
+ "\u5628>Xia{o4};",
+ "\u5629>Hua;",
+ "\u562A>Ma{i3};",
+ "\u562B>R{a2}n;",
+ "\u562C>Zuo;",
+ "\u562D>Peng;",
+ "\u562E>La{o2};",
+ "\u562F>Xia{o4};",
+ "\u5630>Ji;",
+ "\u5631>Zh{u3};",
+ "\u5632>Cha{o2};",
+ "\u5633>Ku{i4};",
+ "\u5634>Zu{i3};",
+ "\u5635>Xiao;",
+ "\u5636>Si;",
+ "\u5637>Ha{o2};",
+ "\u5638>F{u3};",
+ "\u5639>Lia{o2};",
+ "\u563A>Qia{o2};",
+ "\u563B>Xi;",
+ "\u563C>Xi{u4};",
+ "\u563D>Tan;",
+ "\u563E>T{a2}n;",
+ "\u563F>M{o4};",
+ "\u5640>X{u4}n;",
+ "\u5641>{e3};",
+ "\u5642>Z{u3}n;",
+ "\u5643>Fan;",
+ "\u5644>Chi;",
+ "\u5645>Hui;",
+ "\u5646>Z{a3}n;",
+ "\u5647>Chu{a2}ng;",
+ "\u5648>C{u4};",
+ "\u5649>D{a4}n;",
+ "\u564A>Y{u4};",
+ "\u564B>Tun;",
+ "\u564C>Cheng;",
+ "\u564D>Jia{o4};",
+ "\u564E>Ye;",
+ "\u564F>Xi;",
+ "\u5650>Q{i4};",
+ "\u5651>Ha{o2};",
+ "\u5652>Li{a2}n;",
+ "\u5653>Xu;",
+ "\u5654>Deng;",
+ "\u5655>Hui;",
+ "\u5656>Y{i2}n;",
+ "\u5657>Pu;",
+ "\u5658>Jue;",
+ "\u5659>Q{i2}n;",
+ "\u565A>X{u2}n;",
+ "\u565B>Ni{e4};",
+ "\u565C>Lu;",
+ "\u565D>Si;",
+ "\u565E>Y{a3}n;",
+ "\u565F>Y{i4}ng;",
+ "\u5660>Da;",
+ "\u5661>Dan;",
+ "\u5662>Y{u3};",
+ "\u5663>Zho{u4};",
+ "\u5664>J{i4}n;",
+ "\u5665>N{o2}ng;",
+ "\u5666>Yu{e3};",
+ "\u5667>Hu{i4};",
+ "\u5668>Q{i4};",
+ "\u5669>{E4};",
+ "\u566A>Za{o4};",
+ "\u566B>Yi;",
+ "\u566C>Sh{i4};",
+ "\u566D>Jia{o4};",
+ "\u566E>Yuan;",
+ "\u566F>A{i4};",
+ "\u5670>Yong;",
+ "\u5671>Ju{e2};",
+ "\u5672>Kua{i4};",
+ "\u5673>Y{u3};",
+ "\u5674>Pen;",
+ "\u5675>Da{o4};",
+ "\u5676>G{e2};",
+ "\u5677>Xin;",
+ "\u5678>Dun;",
+ "\u5679>Dang;",
+ "\u567B>Sa{i1};",
+ "\u567C>Pi;",
+ "\u567D>P{i3};",
+ "\u567E>Yin;",
+ "\u567F>Zu{i3};",
+ "\u5680>N{i2}ng;",
+ "\u5681>D{i2};",
+ "\u5682>L{a4}n;",
+ "\u5683>Ta;",
+ "\u5684>Hu{o4};",
+ "\u5685>R{u2};",
+ "\u5686>Hao;",
+ "\u5687>Xi{a4};",
+ "\u5688>Y{a4};",
+ "\u5689>Duo;",
+ "\u568A>X{i4};",
+ "\u568B>Cho{u2};",
+ "\u568C>J{i4};",
+ "\u568D>J{i4}n;",
+ "\u568E>Ha{o2};",
+ "\u568F>T{i4};",
+ "\u5690>Ch{a2}ng;",
+ "\u5693>Ca;",
+ "\u5694>T{i4};",
+ "\u5695>Lu;",
+ "\u5696>Hu{i4};",
+ "\u5697>B{o2};",
+ "\u5698>You;",
+ "\u5699>Ni{e4};",
+ "\u569A>Y{i2}n;",
+ "\u569B>H{u4};",
+ "\u569C>M{o4};",
+ "\u569D>Huang;",
+ "\u569E>Zh{e2};",
+ "\u569F>L{i2};",
+ "\u56A0>Li{u2};",
+ "\u56A2>N{a2}ng;",
+ "\u56A3>Xiao;",
+ "\u56A4>M{o2};",
+ "\u56A5>Y{a4}n;",
+ "\u56A6>L{i4};",
+ "\u56A7>L{u2};",
+ "\u56A8>L{o2}ng;",
+ "\u56A9>F{u2};",
+ "\u56AA>D{a4}n;",
+ "\u56AB>Ch{e4}n;",
+ "\u56AC>P{i2}n;",
+ "\u56AD>P{i3};",
+ "\u56AE>Xi{a4}ng;",
+ "\u56AF>Hu{o4};",
+ "\u56B0>M{o2};",
+ "\u56B1>X{i4};",
+ "\u56B2>Du{o3};",
+ "\u56B3>K{u4};",
+ "\u56B4>Y{a2}n;",
+ "\u56B5>Ch{a2}n;",
+ "\u56B6>Ying;",
+ "\u56B7>R{a3}ng;",
+ "\u56B8>Di{a3}n;",
+ "\u56B9>La;",
+ "\u56BA>T{a4};",
+ "\u56BB>Xiao;",
+ "\u56BC>Jia{o2};",
+ "\u56BD>Chu{o4};",
+ "\u56BE>Huan;",
+ "\u56BF>Hu{o4};",
+ "\u56C0>Zhu{a4}n;",
+ "\u56C1>Ni{e4};",
+ "\u56C2>Xiao;",
+ "\u56C3>C{a4};",
+ "\u56C4>L{i2};",
+ "\u56C5>Ch{a3}n;",
+ "\u56C6>Cha{i4};",
+ "\u56C7>L{i4};",
+ "\u56C8>Y{i4};",
+ "\u56C9>Luo;",
+ "\u56CA>N{a2}ng;",
+ "\u56CB>Z{a4}n;",
+ "\u56CC>Su;",
+ "\u56CD>X{i3};",
+ "\u56CF>Jian;",
+ "\u56D0>Z{a2};",
+ "\u56D1>Zh{u3};",
+ "\u56D2>L{a2}n;",
+ "\u56D3>Ni{e4};",
+ "\u56D4>Nang;",
+ "\u56D7>We{i2};",
+ "\u56D8>Hu{i2};",
+ "\u56D9>Yin;",
+ "\u56DA>Qi{u2};",
+ "\u56DB>S{i4};",
+ "\u56DC>N{i2}n;",
+ "\u56DD>Ji{a3}n;",
+ "\u56DE>Hu{i2};",
+ "\u56DF>X{i4}n;",
+ "\u56E0>Yin;",
+ "\u56E1>Nan;",
+ "\u56E2>Tu{a2}n;",
+ "\u56E3>Tu{a2}n;",
+ "\u56E4>D{u4}n;",
+ "\u56E5>K{a4}ng;",
+ "\u56E6>Yuan;",
+ "\u56E7>Ji{o3}ng;",
+ "\u56E8>Pian;",
+ "\u56E9>Y{u4}n;",
+ "\u56EA>Cong;",
+ "\u56EB>H{u2};",
+ "\u56EC>Hu{i2};",
+ "\u56ED>Yu{a2}n;",
+ "\u56EE>Yo{u2};",
+ "\u56EF>Gu{o2};",
+ "\u56F0>K{u4}n;",
+ "\u56F1>Cong;",
+ "\u56F2>We{i2};",
+ "\u56F3>T{u2};",
+ "\u56F4>We{i2};",
+ "\u56F5>L{u2}n;",
+ "\u56F6>Gu{o2};",
+ "\u56F7>Qun;",
+ "\u56F8>R{i4};",
+ "\u56F9>L{i2}ng;",
+ "\u56FA>G{u4};",
+ "\u56FB>Gu{o2};",
+ "\u56FC>Tai;",
+ "\u56FD>Gu{o2};",
+ "\u56FE>T{u2};",
+ "\u56FF>Yo{u4};",
+ "\u5700>Gu{o2};",
+ "\u5701>Y{i2}n;",
+ "\u5702>H{u4}n;",
+ "\u5703>P{u3};",
+ "\u5704>Y{u3};",
+ "\u5705>H{a2}n;",
+ "\u5706>Yu{a2}n;",
+ "\u5707>L{u2}n;",
+ "\u5708>Quan;",
+ "\u5709>Y{u3};",
+ "\u570A>Qing;",
+ "\u570B>Gu{o2};",
+ "\u570C>Chu{a2}n;",
+ "\u570D>We{i2};",
+ "\u570E>Yu{a2}n;",
+ "\u570F>Quan;",
+ "\u5710>Ku;",
+ "\u5711>F{u4};",
+ "\u5712>Yu{a2}n;",
+ "\u5713>Yu{a2}n;",
+ "\u5714>{E4};",
+ "\u5715>Tu2shu1gu{a3}n;",
+ "\u5716>T{u2};",
+ "\u5717>T{u2};",
+ "\u5718>Tu{a2}n;",
+ "\u5719>L{uu}{e4};",
+ "\u571A>Hu{i4};",
+ "\u571B>Y{i4};",
+ "\u571C>Yu{a2}n;",
+ "\u571D>Lu{a2}n;",
+ "\u571E>Lu{a2}n;",
+ "\u571F>T{u3};",
+ "\u5720>Y{a4};",
+ "\u5721>T{u3};",
+ "\u5722>Ting;",
+ "\u5723>Sh{e4}ng;",
+ "\u5724>P{u3};",
+ "\u5725>L{u4};",
+ "\u5727>Ya;",
+ "\u5728>Za{i4};",
+ "\u5729>We{i2};",
+ "\u572A>Ge;",
+ "\u572B>Y{u4};",
+ "\u572C>Wu;",
+ "\u572D>Gui;",
+ "\u572E>P{i3};",
+ "\u572F>Y{i2};",
+ "\u5730>D{i4};",
+ "\u5731>Qian;",
+ "\u5732>Qian;",
+ "\u5733>Zh{e4}n;",
+ "\u5734>Zhu{o2};",
+ "\u5735>D{a4}ng;",
+ "\u5736>Qi{a4};",
+ "\u5739>Ku{a4}ng;",
+ "\u573A>Ch{a2}ng;",
+ "\u573B>Q{i2};",
+ "\u573C>Ni{e4};",
+ "\u573D>M{o4};",
+ "\u573E>J{i2};",
+ "\u573F>Ji{a2};",
+ "\u5740>Zh{i3};",
+ "\u5741>Zh{i3};",
+ "\u5742>B{a3}n;",
+ "\u5743>Xun;",
+ "\u5744>To{u2};",
+ "\u5745>Q{i3}n;",
+ "\u5746>F{e2}n;",
+ "\u5747>Jun;",
+ "\u5748>Keng;",
+ "\u5749>T{u2}n;",
+ "\u574A>Fang;",
+ "\u574B>F{e4}n;",
+ "\u574C>B{e4}n;",
+ "\u574D>Tan;",
+ "\u574E>K{a3}n;",
+ "\u574F>Pi;",
+ "\u5750>Zu{o4};",
+ "\u5751>Keng;",
+ "\u5752>B{i4};",
+ "\u5753>X{i2}ng;",
+ "\u5754>D{i4};",
+ "\u5755>Jing;",
+ "\u5756>J{i4};",
+ "\u5757>Kua{i4};",
+ "\u5758>D{i3};",
+ "\u5759>Jing;",
+ "\u575A>Jian;",
+ "\u575B>T{a2}n;",
+ "\u575C>L{i4};",
+ "\u575D>B{a4};",
+ "\u575E>W{u4};",
+ "\u575F>F{e2}n;",
+ "\u5760>Zhu{i4};",
+ "\u5761>Po;",
+ "\u5762>P{a3}n;",
+ "\u5763>Tang;",
+ "\u5764>Kun;",
+ "\u5765>Qu;",
+ "\u5766>T{a3}n;",
+ "\u5767>Zhi;",
+ "\u5768>Tu{o2};",
+ "\u5769>Gan;",
+ "\u576A>P{i2}ng;",
+ "\u576B>Di{a4}n;",
+ "\u576C>Gu{a4};",
+ "\u576D>N{i2};",
+ "\u576E>Ta{i2};",
+ "\u576F>Pi;",
+ "\u5770>Jiong;",
+ "\u5771>Y{a3}ng;",
+ "\u5772>F{o2};",
+ "\u5773>A{o4};",
+ "\u5774>Li{u4};",
+ "\u5775>Qiu;",
+ "\u5776>M{u4};",
+ "\u5777>K{e3};",
+ "\u5778>Go{u4};",
+ "\u5779>Xu{e4};",
+ "\u577A>B{a2};",
+ "\u577B>Ch{i2};",
+ "\u577C>Ch{e4};",
+ "\u577D>L{i2}ng;",
+ "\u577E>Zh{u4};",
+ "\u577F>F{u4};",
+ "\u5780>Hu;",
+ "\u5781>Zh{i4};",
+ "\u5782>Chu{i2};",
+ "\u5783>La;",
+ "\u5784>L{o3}ng;",
+ "\u5785>L{o3}ng;",
+ "\u5786>L{u2};",
+ "\u5787>A{o4};",
+ "\u5789>Pa{o2};",
+ "\u578B>X{i2}ng;",
+ "\u578C>D{o4}ng;",
+ "\u578D>J{i4};",
+ "\u578E>K{e4};",
+ "\u578F>L{u4};",
+ "\u5790>C{i2};",
+ "\u5791>Ch{i3};",
+ "\u5792>Le{i3};",
+ "\u5793>Gai;",
+ "\u5794>Yin;",
+ "\u5795>Ho{u4};",
+ "\u5796>Dui;",
+ "\u5797>Zha{o4};",
+ "\u5798>F{u2};",
+ "\u5799>Guang;",
+ "\u579A>Ya{o2};",
+ "\u579B>Du{o3};",
+ "\u579C>Du{o3};",
+ "\u579D>Gu{i3};",
+ "\u579E>Ch{a2};",
+ "\u579F>Y{a2}ng;",
+ "\u57A0>Y{i2}n;",
+ "\u57A1>F{a2};",
+ "\u57A2>Go{u4};",
+ "\u57A3>Yu{a2}n;",
+ "\u57A4>Di{e2};",
+ "\u57A5>Xi{e2};",
+ "\u57A6>K{e3}n;",
+ "\u57A7>Jiong;",
+ "\u57A8>Sho{u3};",
+ "\u57A9>{E4};",
+ "\u57AB>Di{a4}n;",
+ "\u57AC>H{o2}ng;",
+ "\u57AD>W{u4};",
+ "\u57AE>Ku{a3};",
+ "\u57B1>D{a4}ng;",
+ "\u57B2>Ka{i3};",
+ "\u57B4>Na{o3};",
+ "\u57B5>{a3}n;",
+ "\u57B6>Xing;",
+ "\u57B7>Xi{a4}n;",
+ "\u57B8>Hu{a4}n;",
+ "\u57B9>Bang;",
+ "\u57BA>Pei;",
+ "\u57BB>B{a4};",
+ "\u57BC>Y{i4};",
+ "\u57BD>Y{i4}n;",
+ "\u57BE>H{a4}n;",
+ "\u57BF>X{u4};",
+ "\u57C0>Chu{i2};",
+ "\u57C1>C{e2}n;",
+ "\u57C2>G{e3}ng;",
+ "\u57C3>Ai;",
+ "\u57C4>P{e2}ng;",
+ "\u57C5>F{a2}ng;",
+ "\u57C6>Qu{e4};",
+ "\u57C7>Y{o3}ng;",
+ "\u57C8>X{u4}n;",
+ "\u57C9>Ji{a2};",
+ "\u57CA>D{i4};",
+ "\u57CB>Ma{i2};",
+ "\u57CC>L{a4}ng;",
+ "\u57CD>Xu{a4}n;",
+ "\u57CE>Ch{e2}ng;",
+ "\u57CF>Y{a2}n;",
+ "\u57D0>Jin;",
+ "\u57D1>Zh{e2};",
+ "\u57D2>Le{i4};",
+ "\u57D3>Li{e4};",
+ "\u57D4>B{u4};",
+ "\u57D5>Ch{e2}ng;",
+ "\u57D7>B{u4};",
+ "\u57D8>Sh{i2};",
+ "\u57D9>Xun;",
+ "\u57DA>Guo;",
+ "\u57DB>Jiong;",
+ "\u57DC>Y{e3};",
+ "\u57DD>Ni{a4}n;",
+ "\u57DE>D{i3};",
+ "\u57DF>Y{u4};",
+ "\u57E0>B{u4};",
+ "\u57E1>Y{a4};",
+ "\u57E2>Ju{a3}n;",
+ "\u57E3>Su{i4};",
+ "\u57E4>P{i2};",
+ "\u57E5>Cheng;",
+ "\u57E6>W{a3}n;",
+ "\u57E7>J{u4};",
+ "\u57E8>L{u3}n;",
+ "\u57E9>Zheng;",
+ "\u57EA>Kong;",
+ "\u57EB>Ch{o3}ng;",
+ "\u57EC>Dong;",
+ "\u57ED>Da{i4};",
+ "\u57EE>T{a4}n;",
+ "\u57EF>{a3}n;",
+ "\u57F0>Ca{i4};",
+ "\u57F1>Sh{u2};",
+ "\u57F2>B{e3}ng;",
+ "\u57F3>K{a3}n;",
+ "\u57F4>Zh{i2};",
+ "\u57F5>Du{o3};",
+ "\u57F6>Y{i4};",
+ "\u57F7>Zh{i2};",
+ "\u57F8>Y{i4};",
+ "\u57F9>Pe{i2};",
+ "\u57FA>Ji;",
+ "\u57FB>Zh{u3}n;",
+ "\u57FC>Q{i2};",
+ "\u57FD>Sa{o4};",
+ "\u57FE>J{u4};",
+ "\u57FF>N{i2};",
+ "\u5800>Ku;",
+ "\u5801>K{e4};",
+ "\u5802>T{a2}ng;",
+ "\u5803>Kun;",
+ "\u5804>N{i4};",
+ "\u5805>Jian;",
+ "\u5806>Dui;",
+ "\u5807>J{i3}n;",
+ "\u5808>Gang;",
+ "\u5809>Y{u4};",
+ "\u580A>{E4};",
+ "\u580B>P{e2}ng;",
+ "\u580C>G{u4};",
+ "\u580D>T{u4};",
+ "\u580E>L{e4}ng;",
+ "\u5810>Y{a2};",
+ "\u5811>Qi{a4}n;",
+ "\u5813>{A4}n;",
+ "\u5815>Du{o4};",
+ "\u5816>Na{o3};",
+ "\u5817>Tu;",
+ "\u5818>Ch{e2}ng;",
+ "\u5819>Yin;",
+ "\u581A>H{u2}n;",
+ "\u581B>B{i4};",
+ "\u581C>Li{a4}n;",
+ "\u581D>Guo;",
+ "\u581E>Di{e2};",
+ "\u581F>Zhu{a4}n;",
+ "\u5820>Ho{u4};",
+ "\u5821>Ba{o3};",
+ "\u5822>Ba{o3};",
+ "\u5823>Y{u2};",
+ "\u5824>Di;",
+ "\u5825>Ma{o2};",
+ "\u5826>Jie;",
+ "\u5827>Ru{a2}n;",
+ "\u5828>{E4};",
+ "\u5829>G{e4}ng;",
+ "\u582A>Kan;",
+ "\u582B>Zong;",
+ "\u582C>Y{u2};",
+ "\u582D>Hu{a2}ng;",
+ "\u582E>{E4};",
+ "\u582F>Ya{o2};",
+ "\u5830>Y{a4}n;",
+ "\u5831>Ba{o4};",
+ "\u5832>J{i2};",
+ "\u5833>Me{i2};",
+ "\u5834>Ch{a2}ng;",
+ "\u5835>D{u3};",
+ "\u5836>Tu{o2};",
+ "\u5837>Y{i4}n;",
+ "\u5838>F{e2}ng;",
+ "\u5839>Zh{o4}ng;",
+ "\u583A>Ji{e4};",
+ "\u583B>Zhen;",
+ "\u583C>Feng;",
+ "\u583D>Gang;",
+ "\u583E>Chu{a3}n;",
+ "\u583F>Ji{a3}n;",
+ "\u5842>Xi{a4}ng;",
+ "\u5843>Huang;",
+ "\u5844>L{e2}ng;",
+ "\u5845>Du{a4}n;",
+ "\u5847>Xuan;",
+ "\u5848>J{i4};",
+ "\u5849>J{i2};",
+ "\u584A>Kua{i4};",
+ "\u584B>Y{i2}ng;",
+ "\u584C>Ta;",
+ "\u584D>Ch{e2}ng;",
+ "\u584E>Y{o3}ng;",
+ "\u584F>Ka{i3};",
+ "\u5850>S{u4};",
+ "\u5851>S{u4};",
+ "\u5852>Sh{i2};",
+ "\u5853>M{i4};",
+ "\u5854>T{a3};",
+ "\u5855>W{e3}ng;",
+ "\u5856>Ch{e2}ng;",
+ "\u5857>T{u2};",
+ "\u5858>T{a2}ng;",
+ "\u5859>Qu{e4};",
+ "\u585A>Zh{o3}ng;",
+ "\u585B>L{i4};",
+ "\u585C>P{e2}ng;",
+ "\u585D>B{a4}ng;",
+ "\u585E>Sai;",
+ "\u585F>Z{a4}ng;",
+ "\u5860>Dui;",
+ "\u5861>Ti{a2}n;",
+ "\u5862>W{u4};",
+ "\u5863>Ch{e3}ng;",
+ "\u5864>Xun;",
+ "\u5865>G{e2};",
+ "\u5866>Zh{e4}n;",
+ "\u5867>A{i4};",
+ "\u5868>Gong;",
+ "\u5869>Y{a2}n;",
+ "\u586A>K{a3}n;",
+ "\u586B>Ti{a2}n;",
+ "\u586C>Yu{a2}n;",
+ "\u586D>Wen;",
+ "\u586E>Xi{e4};",
+ "\u586F>Li{u4};",
+ "\u5871>L{a3}ng;",
+ "\u5872>Ch{a2}ng;",
+ "\u5873>P{e2}ng;",
+ "\u5874>B{e4}ng;",
+ "\u5875>Ch{e2}n;",
+ "\u5876>C{u4};",
+ "\u5877>L{u3};",
+ "\u5878>O{u3};",
+ "\u5879>Qi{a4}n;",
+ "\u587A>Me{i2};",
+ "\u587B>M{o4};",
+ "\u587C>Zhuan;",
+ "\u587D>Shu{a3}ng;",
+ "\u587E>Sh{u2};",
+ "\u587F>Lo{u3};",
+ "\u5880>Ch{i2};",
+ "\u5881>M{a4}n;",
+ "\u5882>Biao;",
+ "\u5883>J{i4}ng;",
+ "\u5884>Qi;",
+ "\u5885>Sh{u4};",
+ "\u5886>D{i4};",
+ "\u5887>Zhang;",
+ "\u5888>K{a4}n;",
+ "\u5889>Yong;",
+ "\u588A>Di{a4}n;",
+ "\u588B>Ch{e3}n;",
+ "\u588C>Zhi;",
+ "\u588D>X{i4};",
+ "\u588E>Guo;",
+ "\u588F>Qi{a3}ng;",
+ "\u5890>J{i4}n;",
+ "\u5891>Di;",
+ "\u5892>Shang;",
+ "\u5893>M{u4};",
+ "\u5894>Cui;",
+ "\u5895>Y{a4}n;",
+ "\u5896>T{a3};",
+ "\u5897>Zeng;",
+ "\u5898>Q{i2};",
+ "\u5899>Qi{a2}ng;",
+ "\u589A>Li{a2}ng;",
+ "\u589C>Zhu{i4};",
+ "\u589D>Qiao;",
+ "\u589E>Zeng;",
+ "\u589F>Xu;",
+ "\u58A0>Sh{a4}n;",
+ "\u58A1>Sh{a4}n;",
+ "\u58A2>B{a2};",
+ "\u58A3>Pu;",
+ "\u58A4>Kua{i4};",
+ "\u58A5>D{o3}ng;",
+ "\u58A6>F{a2}n;",
+ "\u58A7>Qu{e4};",
+ "\u58A8>M{o4};",
+ "\u58A9>Dun;",
+ "\u58AA>Dun;",
+ "\u58AB>Dun;",
+ "\u58AC>D{i4};",
+ "\u58AD>Sh{e4}ng;",
+ "\u58AE>Du{o4};",
+ "\u58AF>Du{o4};",
+ "\u58B0>T{a2}n;",
+ "\u58B1>D{e4}ng;",
+ "\u58B2>W{u3};",
+ "\u58B3>F{e2}n;",
+ "\u58B4>Hu{a2}ng;",
+ "\u58B5>T{a2}n;",
+ "\u58B6>Da;",
+ "\u58B7>Y{e4};",
+ "\u58BA>Y{u4};",
+ "\u58BB>Qi{a2}ng;",
+ "\u58BC>Ji;",
+ "\u58BD>Qiao;",
+ "\u58BE>K{e3}n;",
+ "\u58BF>Y{i4};",
+ "\u58C0>P{i2};",
+ "\u58C1>B{i4};",
+ "\u58C2>Di{a4}n;",
+ "\u58C3>Jiang;",
+ "\u58C4>Y{e3};",
+ "\u58C5>Yong;",
+ "\u58C6>B{o2};",
+ "\u58C7>T{a2}n;",
+ "\u58C8>L{a3}n;",
+ "\u58C9>J{u4};",
+ "\u58CA>Hua{i4};",
+ "\u58CB>D{a4}ng;",
+ "\u58CC>R{a3}ng;",
+ "\u58CD>Qi{a4}n;",
+ "\u58CE>Xun;",
+ "\u58CF>L{a4}n;",
+ "\u58D0>X{i3};",
+ "\u58D1>H{e4};",
+ "\u58D2>A{i4};",
+ "\u58D3>Ya;",
+ "\u58D4>Da{o3};",
+ "\u58D5>Ha{o2};",
+ "\u58D6>Ru{a2}n;",
+ "\u58D8>Le{i3};",
+ "\u58D9>Ku{a4}ng;",
+ "\u58DA>L{u2};",
+ "\u58DB>Y{a2}n;",
+ "\u58DC>T{a2}n;",
+ "\u58DD>We{i2};",
+ "\u58DE>Hua{i4};",
+ "\u58DF>L{o3}ng;",
+ "\u58E0>L{o3}ng;",
+ "\u58E1>Ru{i4};",
+ "\u58E2>L{i4};",
+ "\u58E3>L{i2}n;",
+ "\u58E4>R{a3}ng;",
+ "\u58E6>Xun;",
+ "\u58E7>Y{a2}n;",
+ "\u58E8>Le{i2};",
+ "\u58E9>B{a4};",
+ "\u58EB>Sh{i4};",
+ "\u58EC>R{e2}n;",
+ "\u58EE>Zhu{a4}ng;",
+ "\u58EF>Zhu{a4}ng;",
+ "\u58F0>Sheng;",
+ "\u58F1>Yi;",
+ "\u58F2>Ma{i4};",
+ "\u58F3>K{e2};",
+ "\u58F4>Zh{u3};",
+ "\u58F5>Zhu{a4}ng;",
+ "\u58F6>H{u2};",
+ "\u58F7>H{u2};",
+ "\u58F8>K{u3}n;",
+ "\u58F9>Yi;",
+ "\u58FA>H{u2};",
+ "\u58FB>X{u4};",
+ "\u58FC>K{u3}n;",
+ "\u58FD>Sho{u4};",
+ "\u58FE>M{a3}ng;",
+ "\u58FF>Z{u3}n;",
+ "\u5900>Sho{u4};",
+ "\u5901>Yi;",
+ "\u5902>Zh{i3};",
+ "\u5903>Gu;",
+ "\u5904>Ch{u4};",
+ "\u5905>Ji{a4}ng;",
+ "\u5906>Feng;",
+ "\u5907>Be{i4};",
+ "\u5909>Bi{a4}n;",
+ "\u590A>Sui;",
+ "\u590B>Qun;",
+ "\u590C>L{i2}ng;",
+ "\u590D>F{u4};",
+ "\u590E>Zu{o4};",
+ "\u590F>Xi{a4};",
+ "\u5910>Xi{o4}ng;",
+ "\u5912>Na{o2};",
+ "\u5913>Xi{a4};",
+ "\u5914>Ku{i2};",
+ "\u5915>Xi;",
+ "\u5916>Wa{i4};",
+ "\u5917>Yu{a4}n;",
+ "\u5918>Ma{o3};",
+ "\u5919>S{u4};",
+ "\u591A>Duo;",
+ "\u591B>Duo;",
+ "\u591C>Y{e4};",
+ "\u591D>Q{i2}ng;",
+ "\u591F>Go{u4};",
+ "\u5920>Go{u4};",
+ "\u5921>Q{i4};",
+ "\u5922>M{e4}ng;",
+ "\u5923>M{e4}ng;",
+ "\u5924>Y{i2}n;",
+ "\u5925>Hu{o3};",
+ "\u5926>Ch{e4}n;",
+ "\u5927>D{a4};",
+ "\u5928>Z{e4};",
+ "\u5929>Tian;",
+ "\u592A>Ta{i4};",
+ "\u592B>Fu;",
+ "\u592C>Gua{i4};",
+ "\u592D>Ya{o3};",
+ "\u592E>Yang;",
+ "\u592F>Hang;",
+ "\u5930>Ga{o3};",
+ "\u5931>Shi;",
+ "\u5932>B{e3}n;",
+ "\u5933>Ta{i4};",
+ "\u5934>To{u2};",
+ "\u5935>Y{a3}n;",
+ "\u5936>B{i3};",
+ "\u5937>Y{i2};",
+ "\u5938>Kua;",
+ "\u5939>Jia;",
+ "\u593A>Du{o2};",
+ "\u593C>Ku{a3}ng;",
+ "\u593D>Y{u4}n;",
+ "\u593E>Jia;",
+ "\u593F>Pa;",
+ "\u5940>En;",
+ "\u5941>Li{a2}n;",
+ "\u5942>Hu{a4}n;",
+ "\u5943>D{i4};",
+ "\u5944>Y{a3}n;",
+ "\u5945>Pa{o4};",
+ "\u5946>Qu{a3}n;",
+ "\u5947>Q{i2};",
+ "\u5948>Na{i4};",
+ "\u5949>F{e4}ng;",
+ "\u594A>Xi{e2};",
+ "\u594B>F{e4}n;",
+ "\u594C>Di{a3}n;",
+ "\u594E>Ku{i2};",
+ "\u594F>Zo{u4};",
+ "\u5950>Hu{a4}n;",
+ "\u5951>Q{i4};",
+ "\u5952>Kai;",
+ "\u5953>Zh{a4};",
+ "\u5954>Ben;",
+ "\u5955>Y{i4};",
+ "\u5956>Ji{a3}ng;",
+ "\u5957>Ta{o4};",
+ "\u5958>Z{a4}ng;",
+ "\u5959>B{e3}n;",
+ "\u595A>Xi;",
+ "\u595B>Xi{a3}ng;",
+ "\u595C>Fe{i3};",
+ "\u595D>Diao;",
+ "\u595E>X{u4}n;",
+ "\u595F>Keng;",
+ "\u5960>Di{a4}n;",
+ "\u5961>A{o4};",
+ "\u5962>She;",
+ "\u5963>W{e3}ng;",
+ "\u5964>P{a3}n;",
+ "\u5965>A{o4};",
+ "\u5966>W{u4};",
+ "\u5967>A{o4};",
+ "\u5968>Ji{a3}ng;",
+ "\u5969>Li{a2}n;",
+ "\u596A>Du{o2};",
+ "\u596B>Yun;",
+ "\u596C>Ji{a3}ng;",
+ "\u596D>Sh{i4};",
+ "\u596E>F{e4}n;",
+ "\u596F>Hu{o4};",
+ "\u5970>B{i4};",
+ "\u5971>Li{a2}n;",
+ "\u5972>Du{o3};",
+ "\u5973>N{uu3};",
+ "\u5974>N{u2};",
+ "\u5975>Ding;",
+ "\u5976>Na{i3};",
+ "\u5977>Qian;",
+ "\u5978>Jian;",
+ "\u5979>Ta;",
+ "\u597A>Ji{u3};",
+ "\u597B>N{a2}n;",
+ "\u597C>Ch{a4};",
+ "\u597D>Ha{o3};",
+ "\u597E>Xian;",
+ "\u597F>F{a4}n;",
+ "\u5980>J{i3};",
+ "\u5981>Shu{o4};",
+ "\u5982>R{u2};",
+ "\u5983>Fei;",
+ "\u5984>W{a4}ng;",
+ "\u5985>H{o2}ng;",
+ "\u5986>Zhuang;",
+ "\u5987>F{u4};",
+ "\u5988>Ma;",
+ "\u5989>Dan;",
+ "\u598A>R{e4}n;",
+ "\u598B>Fu;",
+ "\u598C>J{i4}ng;",
+ "\u598D>Y{a2}n;",
+ "\u598E>Xi{e4};",
+ "\u598F>W{e4}n;",
+ "\u5990>Zhong;",
+ "\u5991>Pa;",
+ "\u5992>D{u4};",
+ "\u5993>J{i4};",
+ "\u5994>Keng;",
+ "\u5995>Zh{o4}ng;",
+ "\u5996>Yao;",
+ "\u5997>J{i4}n;",
+ "\u5998>Y{u2}n;",
+ "\u5999>Mia{o4};",
+ "\u599A>Pei;",
+ "\u599C>Yu{e4};",
+ "\u599D>Zhuang;",
+ "\u599E>Niu;",
+ "\u599F>Y{a4}n;",
+ "\u59A0>N{a4};",
+ "\u59A1>Xin;",
+ "\u59A2>F{e2}n;",
+ "\u59A3>B{i3};",
+ "\u59A4>Y{u2};",
+ "\u59A5>Tu{o3};",
+ "\u59A6>Feng;",
+ "\u59A7>Yu{a2}n;",
+ "\u59A8>F{a2}ng;",
+ "\u59A9>W{u3};",
+ "\u59AA>Y{u4};",
+ "\u59AB>Gui;",
+ "\u59AC>D{u4};",
+ "\u59AD>B{a2};",
+ "\u59AE>Ni;",
+ "\u59AF>Zho{u2};",
+ "\u59B0>Zhu{o2};",
+ "\u59B1>Zhao;",
+ "\u59B2>D{a2};",
+ "\u59B3>Na{i3};",
+ "\u59B4>Yu{a3}n;",
+ "\u59B5>To{u3};",
+ "\u59B6>Xu{a2}n;",
+ "\u59B7>Zh{i2};",
+ "\u59B8>E;",
+ "\u59B9>Me{i4};",
+ "\u59BA>M{o4};",
+ "\u59BB>Qi;",
+ "\u59BC>B{i4};",
+ "\u59BD>Shen;",
+ "\u59BE>Qi{e4};",
+ "\u59BF>E;",
+ "\u59C0>H{e2};",
+ "\u59C1>X{u3};",
+ "\u59C2>F{a2};",
+ "\u59C3>Zheng;",
+ "\u59C4>M{i2}n;",
+ "\u59C5>B{a4}n;",
+ "\u59C6>M{u3};",
+ "\u59C7>Fu;",
+ "\u59C8>L{i2}ng;",
+ "\u59C9>Z{i3};",
+ "\u59CA>Z{i3};",
+ "\u59CB>Sh{i3};",
+ "\u59CC>R{a3}n;",
+ "\u59CD>Shan;",
+ "\u59CE>Yang;",
+ "\u59CF>M{a2}n;",
+ "\u59D0>Ji{e3};",
+ "\u59D1>Gu;",
+ "\u59D2>S{i4};",
+ "\u59D3>X{i4}ng;",
+ "\u59D4>We{i3};",
+ "\u59D5>Zi;",
+ "\u59D6>J{u4};",
+ "\u59D7>Shan;",
+ "\u59D8>Pin;",
+ "\u59D9>R{e4}n;",
+ "\u59DA>Ya{o2};",
+ "\u59DB>T{o3}ng;",
+ "\u59DC>Jiang;",
+ "\u59DD>Shu;",
+ "\u59DE>J{i2};",
+ "\u59DF>Gai;",
+ "\u59E0>Sh{a4}ng;",
+ "\u59E1>Ku{o4};",
+ "\u59E2>Juan;",
+ "\u59E3>Jiao;",
+ "\u59E4>Go{u4};",
+ "\u59E5>M{u3};",
+ "\u59E6>Jian;",
+ "\u59E7>Jian;",
+ "\u59E8>Y{i2};",
+ "\u59E9>Ni{a4}n;",
+ "\u59EA>Zh{i2};",
+ "\u59EB>Ji;",
+ "\u59EC>Ji;",
+ "\u59ED>Xi{a4}n;",
+ "\u59EE>H{e2}ng;",
+ "\u59EF>Guang;",
+ "\u59F0>Jun;",
+ "\u59F1>Kua;",
+ "\u59F2>Y{a4}n;",
+ "\u59F3>M{i3}ng;",
+ "\u59F4>Li{e4};",
+ "\u59F5>Pe{i4};",
+ "\u59F6>Y{a3}n;",
+ "\u59F7>Yo{u4};",
+ "\u59F8>Y{a2}n;",
+ "\u59F9>Ch{a4};",
+ "\u59FA>Shen;",
+ "\u59FB>Yin;",
+ "\u59FC>Ch{i3};",
+ "\u59FD>Gu{i3};",
+ "\u59FE>Quan;",
+ "\u59FF>Zi;",
+ "\u5A00>Song;",
+ "\u5A01>Wei;",
+ "\u5A02>H{o2}ng;",
+ "\u5A03>W{a2};",
+ "\u5A04>Lo{u2};",
+ "\u5A05>Y{a4};",
+ "\u5A06>Ra{o3};",
+ "\u5A07>Jiao;",
+ "\u5A08>Lu{a2}n;",
+ "\u5A09>Ping;",
+ "\u5A0A>Xi{a4}n;",
+ "\u5A0B>Sha{o4};",
+ "\u5A0C>L{i3};",
+ "\u5A0D>Ch{e2}ng;",
+ "\u5A0E>Xia{o4};",
+ "\u5A0F>M{a2}ng;",
+ "\u5A10>Fu;",
+ "\u5A11>Suo;",
+ "\u5A12>W{u3};",
+ "\u5A13>We{i3};",
+ "\u5A14>K{e4};",
+ "\u5A15>La{i4};",
+ "\u5A16>Chu{o4};",
+ "\u5A17>D{i4}ng;",
+ "\u5A18>Ni{a2}ng;",
+ "\u5A19>X{i2}ng;",
+ "\u5A1A>N{a2}n;",
+ "\u5A1B>Y{u2};",
+ "\u5A1C>Nu{o2};",
+ "\u5A1D>Pei;",
+ "\u5A1E>Ne{i3};",
+ "\u5A1F>Juan;",
+ "\u5A20>Shen;",
+ "\u5A21>Zh{i4};",
+ "\u5A22>H{a2}n;",
+ "\u5A23>D{i4};",
+ "\u5A24>Zhuang;",
+ "\u5A25>{E2};",
+ "\u5A26>P{i2}n;",
+ "\u5A27>Tu{i4};",
+ "\u5A28>H{a4}n;",
+ "\u5A29>Mi{a3}n;",
+ "\u5A2A>W{u2};",
+ "\u5A2B>Y{a2}n;",
+ "\u5A2C>W{u3};",
+ "\u5A2D>Xi;",
+ "\u5A2E>Y{a2}n;",
+ "\u5A2F>Y{u2};",
+ "\u5A30>S{i4};",
+ "\u5A31>Y{u2};",
+ "\u5A32>Wa;",
+ "\u5A34>Xi{a2}n;",
+ "\u5A35>Ju;",
+ "\u5A36>Q{u3};",
+ "\u5A37>Shu{i4};",
+ "\u5A38>Qi;",
+ "\u5A39>Xi{a2}n;",
+ "\u5A3A>Zhui;",
+ "\u5A3B>Dong;",
+ "\u5A3C>Chang;",
+ "\u5A3D>L{u4};",
+ "\u5A3E>A{i3};",
+ "\u5A3F>E;",
+ "\u5A40>E;",
+ "\u5A41>Lo{u2};",
+ "\u5A42>Mi{a2}n;",
+ "\u5A43>C{o2}ng;",
+ "\u5A44>Po{u3};",
+ "\u5A45>J{u2};",
+ "\u5A46>P{o2};",
+ "\u5A47>Ca{i3};",
+ "\u5A48>D{i2}ng;",
+ "\u5A49>W{a3}n;",
+ "\u5A4A>Bia{o3};",
+ "\u5A4B>Xiao;",
+ "\u5A4C>Sh{u3};",
+ "\u5A4D>Q{i3};",
+ "\u5A4E>Hui;",
+ "\u5A4F>F{u4};",
+ "\u5A50>E;",
+ "\u5A51>W{o3};",
+ "\u5A52>T{a2}n;",
+ "\u5A53>Fei;",
+ "\u5A54>Wei;",
+ "\u5A55>Ji{e2};",
+ "\u5A56>Tian;",
+ "\u5A57>N{i2};",
+ "\u5A58>Qu{a2}n;",
+ "\u5A59>J{i4}ng;",
+ "\u5A5A>Hun;",
+ "\u5A5B>Jing;",
+ "\u5A5C>Qian;",
+ "\u5A5D>Di{a4}n;",
+ "\u5A5E>X{i4}ng;",
+ "\u5A5F>H{u4};",
+ "\u5A60>W{a4};",
+ "\u5A61>La{i2};",
+ "\u5A62>B{i4};",
+ "\u5A63>Yin;",
+ "\u5A64>Chou;",
+ "\u5A65>Chu{o4};",
+ "\u5A66>F{u4};",
+ "\u5A67>J{i4}ng;",
+ "\u5A68>L{u2}n;",
+ "\u5A69>Y{a4}n;",
+ "\u5A6A>L{a2}n;",
+ "\u5A6B>Kun;",
+ "\u5A6C>Y{i2}n;",
+ "\u5A6D>Y{a4};",
+ "\u5A6E>Ju;",
+ "\u5A6F>L{i4};",
+ "\u5A70>Di{a3}n;",
+ "\u5A71>Xi{a2}n;",
+ "\u5A73>Hu{a4};",
+ "\u5A74>Ying;",
+ "\u5A75>Ch{a2}n;",
+ "\u5A76>Sh{e3}n;",
+ "\u5A77>T{i2}ng;",
+ "\u5A78>D{a4}ng;",
+ "\u5A79>Ya{o3};",
+ "\u5A7A>W{u4};",
+ "\u5A7B>N{a4}n;",
+ "\u5A7C>Ru{o4};",
+ "\u5A7D>Ji{a3};",
+ "\u5A7E>Tou;",
+ "\u5A7F>X{u4};",
+ "\u5A80>Y{u2};",
+ "\u5A81>Wei;",
+ "\u5A82>T{i2};",
+ "\u5A83>Ro{u2};",
+ "\u5A84>Me{i3};",
+ "\u5A85>Dan;",
+ "\u5A86>Ru{a3}n;",
+ "\u5A87>Qin;",
+ "\u5A88>Hui;",
+ "\u5A89>Wu;",
+ "\u5A8A>Qi{a2}n;",
+ "\u5A8B>Chun;",
+ "\u5A8C>Ma{o2};",
+ "\u5A8D>F{u4};",
+ "\u5A8E>Ji{e3};",
+ "\u5A8F>Duan;",
+ "\u5A90>Xi;",
+ "\u5A91>Zh{o4}ng;",
+ "\u5A92>Me{i2};",
+ "\u5A93>Hu{a2}ng;",
+ "\u5A94>Mi{a2}n;",
+ "\u5A95>An;",
+ "\u5A96>Ying;",
+ "\u5A97>Xuan;",
+ "\u5A98>Jie;",
+ "\u5A99>Wei;",
+ "\u5A9A>Me{i4};",
+ "\u5A9B>Yu{a4}n;",
+ "\u5A9C>Zhen;",
+ "\u5A9D>Qiu;",
+ "\u5A9E>T{i2};",
+ "\u5A9F>Xi{e4};",
+ "\u5AA0>Tu{o3};",
+ "\u5AA1>Li{a4}n;",
+ "\u5AA2>Ma{o4};",
+ "\u5AA3>R{a3}n;",
+ "\u5AA4>Si;",
+ "\u5AA5>Pian;",
+ "\u5AA6>We{i4};",
+ "\u5AA7>Wa;",
+ "\u5AA8>Ji{u4};",
+ "\u5AA9>H{u2};",
+ "\u5AAA>A{o3};",
+ "\u5AAD>Xu;",
+ "\u5AAE>Tou;",
+ "\u5AAF>Gui;",
+ "\u5AB0>Zou;",
+ "\u5AB1>Ya{o2};",
+ "\u5AB2>P{i4};",
+ "\u5AB3>X{i2};",
+ "\u5AB4>Yu{a2}n;",
+ "\u5AB5>Y{i4}ng;",
+ "\u5AB6>R{o2}ng;",
+ "\u5AB7>R{u4};",
+ "\u5AB8>Chi;",
+ "\u5AB9>Li{u2};",
+ "\u5ABA>Me{i3};",
+ "\u5ABB>P{a2}n;",
+ "\u5ABC>A{o3};",
+ "\u5ABD>Ma;",
+ "\u5ABE>Go{u4};",
+ "\u5ABF>Ku{i4};",
+ "\u5AC0>Q{i2}n;",
+ "\u5AC1>Ji{a4};",
+ "\u5AC2>Sa{o3};",
+ "\u5AC3>Zhen;",
+ "\u5AC4>Yu{a2}n;",
+ "\u5AC5>Cha;",
+ "\u5AC6>Y{o2}ng;",
+ "\u5AC7>M{i2}ng;",
+ "\u5AC8>Ying;",
+ "\u5AC9>J{i2};",
+ "\u5ACA>S{u4};",
+ "\u5ACB>Nia{o3};",
+ "\u5ACC>Xi{a2}n;",
+ "\u5ACD>Tao;",
+ "\u5ACE>P{a2}ng;",
+ "\u5ACF>L{a2}ng;",
+ "\u5AD0>Na{o3};",
+ "\u5AD1>Ba{o2};",
+ "\u5AD2>A{i4};",
+ "\u5AD3>P{i4};",
+ "\u5AD4>P{i2}n;",
+ "\u5AD5>Y{i4};",
+ "\u5AD6>Pia{o4};",
+ "\u5AD7>Y{u4};",
+ "\u5AD8>Le{i2};",
+ "\u5AD9>Xu{a2}n;",
+ "\u5ADA>M{a4}n;",
+ "\u5ADB>Yi;",
+ "\u5ADC>Zhang;",
+ "\u5ADD>Kang;",
+ "\u5ADE>Y{o2}ng;",
+ "\u5ADF>N{i4};",
+ "\u5AE0>L{i2};",
+ "\u5AE1>D{i2};",
+ "\u5AE2>Gui;",
+ "\u5AE3>Yan;",
+ "\u5AE4>J{i4}n;",
+ "\u5AE5>Zhuan;",
+ "\u5AE6>Ch{a2}ng;",
+ "\u5AE7>C{e4};",
+ "\u5AE8>Han;",
+ "\u5AE9>N{e4}n;",
+ "\u5AEA>La{o4};",
+ "\u5AEB>M{o2};",
+ "\u5AEC>Zhe;",
+ "\u5AED>H{u4};",
+ "\u5AEE>H{u4};",
+ "\u5AEF>A{o4};",
+ "\u5AF0>N{e4}n;",
+ "\u5AF1>Qi{a2}ng;",
+ "\u5AF3>Pi{e4};",
+ "\u5AF4>Gu;",
+ "\u5AF5>W{u3};",
+ "\u5AF6>Jia{o2};",
+ "\u5AF7>Tu{o3};",
+ "\u5AF8>Zh{a3}n;",
+ "\u5AF9>Ma{o2};",
+ "\u5AFA>Xi{a2}n;",
+ "\u5AFB>Xi{a2}n;",
+ "\u5AFC>M{o4};",
+ "\u5AFD>Lia{o2};",
+ "\u5AFE>Li{a2}n;",
+ "\u5AFF>Hu{a4};",
+ "\u5B00>Gui;",
+ "\u5B01>Deng;",
+ "\u5B02>Zhi;",
+ "\u5B03>Xu;",
+ "\u5B04>Yi;",
+ "\u5B05>Hu{a2};",
+ "\u5B06>Xi;",
+ "\u5B07>Hu{i4};",
+ "\u5B08>Ra{o3};",
+ "\u5B09>Xi;",
+ "\u5B0A>Y{a4}n;",
+ "\u5B0B>Ch{a2}n;",
+ "\u5B0C>Jiao;",
+ "\u5B0D>Me{i3};",
+ "\u5B0E>F{a4}n;",
+ "\u5B0F>Fan;",
+ "\u5B10>Xian;",
+ "\u5B11>Y{i4};",
+ "\u5B12>We{i4};",
+ "\u5B13>Jia{o4};",
+ "\u5B14>F{u4};",
+ "\u5B15>Sh{i4};",
+ "\u5B16>B{i4};",
+ "\u5B17>Sh{a4}n;",
+ "\u5B18>Su{i4};",
+ "\u5B19>Qi{a2}ng;",
+ "\u5B1A>Li{a3}n;",
+ "\u5B1B>Hu{a2}n;",
+ "\u5B1C>Xin;",
+ "\u5B1D>Nia{o3};",
+ "\u5B1E>D{o3}ng;",
+ "\u5B1F>Y{i4};",
+ "\u5B20>C{a2}n;",
+ "\u5B21>A{i4};",
+ "\u5B22>Ni{a2}ng;",
+ "\u5B23>N{e2}ng;",
+ "\u5B24>Ma;",
+ "\u5B25>Tia{o3};",
+ "\u5B26>Cho{u2};",
+ "\u5B27>J{i4}n;",
+ "\u5B28>C{i2};",
+ "\u5B29>Y{u2};",
+ "\u5B2A>P{i2}n;",
+ "\u5B2B>Yong;",
+ "\u5B2C>Xu;",
+ "\u5B2D>Na{i3};",
+ "\u5B2E>Yan;",
+ "\u5B2F>Ta{i2};",
+ "\u5B30>Ying;",
+ "\u5B31>C{a2}n;",
+ "\u5B32>Nia{o3};",
+ "\u5B33>Wo;",
+ "\u5B34>Y{i2}ng;",
+ "\u5B35>Mi{a2}n;",
+ "\u5B37>Ma;",
+ "\u5B38>Sh{e3}n;",
+ "\u5B39>X{i4}ng;",
+ "\u5B3A>N{i4};",
+ "\u5B3B>D{u2};",
+ "\u5B3C>Li{u3};",
+ "\u5B3D>Yuan;",
+ "\u5B3E>L{a3}n;",
+ "\u5B3F>Y{a4}n;",
+ "\u5B40>Shuang;",
+ "\u5B41>L{i2}ng;",
+ "\u5B42>Jia{o3};",
+ "\u5B43>Ni{a2}ng;",
+ "\u5B44>L{a3}n;",
+ "\u5B45>Xian;",
+ "\u5B46>Ying;",
+ "\u5B47>Shuang;",
+ "\u5B48>Shuai;",
+ "\u5B49>Qu{a2}n;",
+ "\u5B4A>M{i3};",
+ "\u5B4B>L{i2};",
+ "\u5B4C>Lu{a2}n;",
+ "\u5B4D>Y{a2}n;",
+ "\u5B4E>Zh{u3};",
+ "\u5B4F>L{a3}n;",
+ "\u5B50>Z{i3};",
+ "\u5B51>Ji{e2};",
+ "\u5B52>Ju{e2};",
+ "\u5B53>Ju{e2};",
+ "\u5B54>K{o3}ng;",
+ "\u5B55>Y{u4}n;",
+ "\u5B56>Zi;",
+ "\u5B57>Z{i4};",
+ "\u5B58>C{u2}n;",
+ "\u5B59>Sun;",
+ "\u5B5A>F{u2};",
+ "\u5B5B>Be{i4};",
+ "\u5B5C>Zi;",
+ "\u5B5D>Xia{o4};",
+ "\u5B5E>X{i4}n;",
+ "\u5B5F>M{e4}ng;",
+ "\u5B60>S{i4};",
+ "\u5B61>Tai;",
+ "\u5B62>Bao;",
+ "\u5B63>J{i4};",
+ "\u5B64>Gu;",
+ "\u5B65>N{u2};",
+ "\u5B66>Xu{e2};",
+ "\u5B68>Zhu{a3}n;",
+ "\u5B69>Ha{i2};",
+ "\u5B6A>Lu{a2}n;",
+ "\u5B6B>Sun;",
+ "\u5B6C>Hua{i4};",
+ "\u5B6D>Mie;",
+ "\u5B6E>C{o2}ng;",
+ "\u5B6F>Qian;",
+ "\u5B70>Sh{u2};",
+ "\u5B71>Ch{a2}n;",
+ "\u5B72>Ya;",
+ "\u5B73>Zi;",
+ "\u5B74>N{i3};",
+ "\u5B75>Fu;",
+ "\u5B76>Zi;",
+ "\u5B77>L{i2};",
+ "\u5B78>Xu{e2};",
+ "\u5B79>B{o4};",
+ "\u5B7A>R{u2};",
+ "\u5B7B>La{i2};",
+ "\u5B7C>Ni{e4};",
+ "\u5B7D>Ni{e4};",
+ "\u5B7E>Ying;",
+ "\u5B7F>Lu{a2}n;",
+ "\u5B80>Mi{a2}n;",
+ "\u5B81>Zh{u4};",
+ "\u5B82>R{o3}ng;",
+ "\u5B83>Ta;",
+ "\u5B84>Gu{i3};",
+ "\u5B85>Zha{i2};",
+ "\u5B86>Qi{o2}ng;",
+ "\u5B87>Y{u3};",
+ "\u5B88>Sho{u3};",
+ "\u5B89>An;",
+ "\u5B8A>T{u2};",
+ "\u5B8B>S{o4}ng;",
+ "\u5B8C>W{a2}n;",
+ "\u5B8D>Ro{u4};",
+ "\u5B8E>Ya{o3};",
+ "\u5B8F>H{o2}ng;",
+ "\u5B90>Y{i2};",
+ "\u5B91>J{i3}ng;",
+ "\u5B92>Zhun;",
+ "\u5B93>M{i4};",
+ "\u5B94>Zh{u3};",
+ "\u5B95>D{a4}ng;",
+ "\u5B96>H{o2}ng;",
+ "\u5B97>Zong;",
+ "\u5B98>Guan;",
+ "\u5B99>Zho{u4};",
+ "\u5B9A>D{i4}ng;",
+ "\u5B9B>W{a3}n;",
+ "\u5B9C>Y{i2};",
+ "\u5B9D>Ba{o3};",
+ "\u5B9E>Sh{i2};",
+ "\u5B9F>Sh{i2};",
+ "\u5BA0>Ch{o3}ng;",
+ "\u5BA1>Sh{e3}n;",
+ "\u5BA2>K{e4};",
+ "\u5BA3>Xuan;",
+ "\u5BA4>Sh{i4};",
+ "\u5BA5>Yo{u4};",
+ "\u5BA6>Hu{a4}n;",
+ "\u5BA7>Y{i2};",
+ "\u5BA8>Tia{o3};",
+ "\u5BA9>Sh{i3};",
+ "\u5BAA>Xi{a4}n;",
+ "\u5BAB>Gong;",
+ "\u5BAC>Ch{e2}ng;",
+ "\u5BAD>Q{u2}n;",
+ "\u5BAE>Gong;",
+ "\u5BAF>Xiao;",
+ "\u5BB0>Za{i3};",
+ "\u5BB1>Zh{a4};",
+ "\u5BB2>Ba{o3};",
+ "\u5BB3>Ha{i4};",
+ "\u5BB4>Y{a4}n;",
+ "\u5BB5>Xiao;",
+ "\u5BB6>Jia;",
+ "\u5BB7>Sh{e3}n;",
+ "\u5BB8>Ch{e2}n;",
+ "\u5BB9>R{o2}ng;",
+ "\u5BBA>Hu{a3}ng;",
+ "\u5BBB>M{i4};",
+ "\u5BBC>Ko{u4};",
+ "\u5BBD>Kuan;",
+ "\u5BBE>Bin;",
+ "\u5BBF>S{u4};",
+ "\u5BC0>Ca{i4};",
+ "\u5BC1>Z{a3}n;",
+ "\u5BC2>J{i4};",
+ "\u5BC3>Yuan;",
+ "\u5BC4>J{i4};",
+ "\u5BC5>Y{i2}n;",
+ "\u5BC6>M{i4};",
+ "\u5BC7>Ko{u4};",
+ "\u5BC8>Qing;",
+ "\u5BC9>Qu{e4};",
+ "\u5BCA>Zhen;",
+ "\u5BCB>Ji{a3}n;",
+ "\u5BCC>F{u4};",
+ "\u5BCD>N{i2}ng;",
+ "\u5BCE>B{i4}ng;",
+ "\u5BCF>Hu{a2}n;",
+ "\u5BD0>Me{i4};",
+ "\u5BD1>Q{i3}n;",
+ "\u5BD2>H{a2}n;",
+ "\u5BD3>Y{u4};",
+ "\u5BD4>Sh{i2};",
+ "\u5BD5>N{i2}ng;",
+ "\u5BD6>Q{i4}n;",
+ "\u5BD7>N{i2}ng;",
+ "\u5BD8>Zh{i4};",
+ "\u5BD9>Y{u3};",
+ "\u5BDA>Ba{o3};",
+ "\u5BDB>Kuan;",
+ "\u5BDC>N{i2}ng;",
+ "\u5BDD>Q{i3}n;",
+ "\u5BDE>M{o4};",
+ "\u5BDF>Ch{a2};",
+ "\u5BE0>J{u4};",
+ "\u5BE1>Gu{a3};",
+ "\u5BE2>Q{i3}n;",
+ "\u5BE3>Hu;",
+ "\u5BE4>W{u4};",
+ "\u5BE5>Lia{o2};",
+ "\u5BE6>Sh{i2};",
+ "\u5BE7>Zh{u4};",
+ "\u5BE8>Zha{i4};",
+ "\u5BE9>Sh{e3}n;",
+ "\u5BEA>We{i3};",
+ "\u5BEB>Xi{e3};",
+ "\u5BEC>Kuan;",
+ "\u5BED>Hu{i4};",
+ "\u5BEE>Lia{o2};",
+ "\u5BEF>J{u4}n;",
+ "\u5BF0>Hu{a2}n;",
+ "\u5BF1>Y{i4};",
+ "\u5BF2>Y{i2};",
+ "\u5BF3>Ba{o3};",
+ "\u5BF4>Q{i4}n;",
+ "\u5BF5>Ch{o3}ng;",
+ "\u5BF6>Ba{o3};",
+ "\u5BF7>Feng;",
+ "\u5BF8>C{u4}n;",
+ "\u5BF9>Du{i4};",
+ "\u5BFA>S{i4};",
+ "\u5BFB>X{u2}n;",
+ "\u5BFC>Da{o3};",
+ "\u5BFD>L{uu4};",
+ "\u5BFE>Du{i4};",
+ "\u5BFF>Sho{u4};",
+ "\u5C00>P{o3};",
+ "\u5C01>Feng;",
+ "\u5C02>Zhuan;",
+ "\u5C03>Fu;",
+ "\u5C04>Sh{e4};",
+ "\u5C05>K{e4};",
+ "\u5C06>Jiang;",
+ "\u5C07>Jiang;",
+ "\u5C08>Zhuan;",
+ "\u5C09>We{i4};",
+ "\u5C0A>Zun;",
+ "\u5C0B>X{u2}n;",
+ "\u5C0C>Sh{u4};",
+ "\u5C0D>Du{i4};",
+ "\u5C0E>Da{o3};",
+ "\u5C0F>Xia{o3};",
+ "\u5C10>Ji;",
+ "\u5C11>Sha{o3};",
+ "\u5C12>{e3}r;",
+ "\u5C13>{e3}r;",
+ "\u5C14>{e3}r;",
+ "\u5C15>G{a3};",
+ "\u5C16>Jian;",
+ "\u5C17>Sh{u2};",
+ "\u5C18>Ch{e2}n;",
+ "\u5C19>Sh{a4}ng;",
+ "\u5C1A>Sh{a4}ng;",
+ "\u5C1B>Mo;",
+ "\u5C1C>G{a2};",
+ "\u5C1D>Ch{a2}ng;",
+ "\u5C1E>Lia{o4};",
+ "\u5C1F>Xi{a3}n;",
+ "\u5C20>Xi{a3}n;",
+ "\u5C22>Wang;",
+ "\u5C23>Wang;",
+ "\u5C24>Yo{u2};",
+ "\u5C25>Lia{o4};",
+ "\u5C26>Lia{o4};",
+ "\u5C27>Ya{o2};",
+ "\u5C28>M{a2}ng;",
+ "\u5C29>Wang;",
+ "\u5C2A>Wang;",
+ "\u5C2B>Wang;",
+ "\u5C2C>G{a4};",
+ "\u5C2D>Ya{o2};",
+ "\u5C2E>Du{o4};",
+ "\u5C2F>Ku{i4};",
+ "\u5C30>Zh{o3}ng;",
+ "\u5C31>Ji{u4};",
+ "\u5C32>Gan;",
+ "\u5C33>G{u3};",
+ "\u5C34>Gan;",
+ "\u5C35>Tu{i2};",
+ "\u5C36>Gan;",
+ "\u5C37>Gan;",
+ "\u5C38>Shi;",
+ "\u5C39>Y{i3}n;",
+ "\u5C3A>Ch{i3};",
+ "\u5C3B>Kao;",
+ "\u5C3C>N{i2};",
+ "\u5C3D>J{i3}n;",
+ "\u5C3E>We{i3};",
+ "\u5C3F>Nia{o4};",
+ "\u5C40>J{u2};",
+ "\u5C41>P{i4};",
+ "\u5C42>C{e2}ng;",
+ "\u5C43>X{i4};",
+ "\u5C44>Bi;",
+ "\u5C45>Ju;",
+ "\u5C46>Ji{e4};",
+ "\u5C47>Ti{a2}n;",
+ "\u5C48>Qu;",
+ "\u5C49>T{i4};",
+ "\u5C4A>Ji{e4};",
+ "\u5C4B>Wu;",
+ "\u5C4C>Dia{o3};",
+ "\u5C4D>Shi;",
+ "\u5C4E>Sh{i3};",
+ "\u5C4F>P{i2}ng;",
+ "\u5C50>Ji;",
+ "\u5C51>Xi{e4};",
+ "\u5C52>Ch{e2}n;",
+ "\u5C53>X{i4};",
+ "\u5C54>N{i2};",
+ "\u5C55>Zh{a3}n;",
+ "\u5C56>Xi;",
+ "\u5C58>M{a3}n;",
+ "\u5C59>E;",
+ "\u5C5A>Lo{u4};",
+ "\u5C5B>P{i2}ng;",
+ "\u5C5C>T{i4};",
+ "\u5C5D>Fe{i4};",
+ "\u5C5E>Sh{u3};",
+ "\u5C5F>Xi{e4};",
+ "\u5C60>T{u2};",
+ "\u5C61>L{uu3};",
+ "\u5C62>L{uu3};",
+ "\u5C63>X{i3};",
+ "\u5C64>C{e2}ng;",
+ "\u5C65>L{uu3};",
+ "\u5C66>J{u4};",
+ "\u5C67>Xi{e4};",
+ "\u5C68>J{u4};",
+ "\u5C69>Jue;",
+ "\u5C6A>Lia{o2};",
+ "\u5C6B>Ju{e2};",
+ "\u5C6C>Sh{u3};",
+ "\u5C6D>X{i4};",
+ "\u5C6E>Ch{e4};",
+ "\u5C6F>T{u2}n;",
+ "\u5C70>N{i4};",
+ "\u5C71>Shan;",
+ "\u5C73>Xian;",
+ "\u5C74>L{i4};",
+ "\u5C75>Xue;",
+ "\u5C78>L{o2}ng;",
+ "\u5C79>Y{i4};",
+ "\u5C7A>Q{i3};",
+ "\u5C7B>R{e4}n;",
+ "\u5C7C>W{u4};",
+ "\u5C7D>H{a4}n;",
+ "\u5C7E>Shen;",
+ "\u5C7F>Y{u3};",
+ "\u5C80>Chu;",
+ "\u5C81>Su{i4};",
+ "\u5C82>Q{i3};",
+ "\u5C84>Yu{e4};",
+ "\u5C85>B{a3}n;",
+ "\u5C86>Ya{o3};",
+ "\u5C87>{A2}ng;",
+ "\u5C88>Y{a2};",
+ "\u5C89>W{u4};",
+ "\u5C8A>Ji{e2};",
+ "\u5C8B>{E4};",
+ "\u5C8C>J{i2};",
+ "\u5C8D>Qian;",
+ "\u5C8E>Fen;",
+ "\u5C8F>Yu{a2}n;",
+ "\u5C90>Q{i2};",
+ "\u5C91>C{e2}n;",
+ "\u5C92>Qi{a2}n;",
+ "\u5C93>Q{i2};",
+ "\u5C94>Ch{a4};",
+ "\u5C95>Ji{e4};",
+ "\u5C96>Qu;",
+ "\u5C97>G{a3}ng;",
+ "\u5C98>Xi{a4}n;",
+ "\u5C99>A{o4};",
+ "\u5C9A>L{a2}n;",
+ "\u5C9B>Da{o3};",
+ "\u5C9C>Ba;",
+ "\u5C9D>Zu{o4};",
+ "\u5C9E>Zu{o4};",
+ "\u5C9F>Y{a3}ng;",
+ "\u5CA0>J{u4};",
+ "\u5CA1>Gang;",
+ "\u5CA2>K{e3};",
+ "\u5CA3>Go{u3};",
+ "\u5CA4>Xu{e4};",
+ "\u5CA5>Bei;",
+ "\u5CA6>L{i4};",
+ "\u5CA7>Tia{o2};",
+ "\u5CA8>Ju;",
+ "\u5CA9>Y{a2}n;",
+ "\u5CAA>F{u2};",
+ "\u5CAB>Xi{u4};",
+ "\u5CAC>Ji{a3};",
+ "\u5CAD>L{i2}ng;",
+ "\u5CAE>Tu{o2};",
+ "\u5CAF>Pei;",
+ "\u5CB0>Yo{u3};",
+ "\u5CB1>Da{i4};",
+ "\u5CB2>Ku{a4}ng;",
+ "\u5CB3>Yu{e4};",
+ "\u5CB4>Qu;",
+ "\u5CB5>H{u4};",
+ "\u5CB6>P{o4};",
+ "\u5CB7>M{i2}n;",
+ "\u5CB8>{A4}n;",
+ "\u5CB9>Tia{o2};",
+ "\u5CBA>L{i2}ng;",
+ "\u5CBB>Ch{i2};",
+ "\u5CBD>Dong;",
+ "\u5CBF>Kui;",
+ "\u5CC0>Xi{u4};",
+ "\u5CC1>Ma{o3};",
+ "\u5CC2>T{o2}ng;",
+ "\u5CC3>Xu{e2};",
+ "\u5CC4>Y{i4};",
+ "\u5CC6>He;",
+ "\u5CC7>Ke;",
+ "\u5CC8>Lu{o4};",
+ "\u5CC9>E;",
+ "\u5CCA>F{u4};",
+ "\u5CCB>X{u2}n;",
+ "\u5CCC>Di{e2};",
+ "\u5CCD>L{u4};",
+ "\u5CCE>An;",
+ "\u5CCF>{e3}r;",
+ "\u5CD0>Gai;",
+ "\u5CD1>Qu{a2}n;",
+ "\u5CD2>T{o2}ng;",
+ "\u5CD3>Y{i2};",
+ "\u5CD4>M{u3};",
+ "\u5CD5>Sh{i2};",
+ "\u5CD6>An;",
+ "\u5CD7>We{i2};",
+ "\u5CD8>Hu;",
+ "\u5CD9>Zh{i4};",
+ "\u5CDA>M{i4};",
+ "\u5CDB>L{i3};",
+ "\u5CDC>Ji;",
+ "\u5CDD>T{o2}ng;",
+ "\u5CDE>We{i2};",
+ "\u5CDF>Yo{u4};",
+ "\u5CE1>Xi{a2};",
+ "\u5CE2>L{i3};",
+ "\u5CE3>Ya{o2};",
+ "\u5CE4>Jia{o4};",
+ "\u5CE5>Zheng;",
+ "\u5CE6>Lu{a2}n;",
+ "\u5CE7>Jiao;",
+ "\u5CE8>{E2};",
+ "\u5CE9>{E2};",
+ "\u5CEA>Y{u4};",
+ "\u5CEB>Y{e2};",
+ "\u5CEC>Bu;",
+ "\u5CED>Qia{o4};",
+ "\u5CEE>Qun;",
+ "\u5CEF>Feng;",
+ "\u5CF0>Feng;",
+ "\u5CF1>Na{o2};",
+ "\u5CF2>L{i3};",
+ "\u5CF3>Yo{u2};",
+ "\u5CF4>Xi{a4}n;",
+ "\u5CF5>H{o2}ng;",
+ "\u5CF6>Da{o3};",
+ "\u5CF7>Shen;",
+ "\u5CF8>Ch{e2}ng;",
+ "\u5CF9>T{u2};",
+ "\u5CFA>G{e3}ng;",
+ "\u5CFB>J{u4}n;",
+ "\u5CFC>Ha{o4};",
+ "\u5CFD>Xi{a2};",
+ "\u5CFE>Yin;",
+ "\u5CFF>Y{u3};",
+ "\u5D00>L{a4}ng;",
+ "\u5D01>K{a3}n;",
+ "\u5D02>La{o2};",
+ "\u5D03>La{i2};",
+ "\u5D04>Xi{a3}n;",
+ "\u5D05>Qu{e4};",
+ "\u5D06>Kong;",
+ "\u5D07>Ch{o2}ng;",
+ "\u5D08>Ch{o2}ng;",
+ "\u5D09>T{a4};",
+ "\u5D0A>Lin;",
+ "\u5D0B>Hu{a2};",
+ "\u5D0C>Ju;",
+ "\u5D0D>La{i2};",
+ "\u5D0E>Q{i2};",
+ "\u5D0F>M{i2}n;",
+ "\u5D10>Kun;",
+ "\u5D11>Kun;",
+ "\u5D12>Z{u2};",
+ "\u5D13>G{u4};",
+ "\u5D14>Cui;",
+ "\u5D15>Y{a2};",
+ "\u5D16>Y{a2};",
+ "\u5D17>G{a3}ng;",
+ "\u5D18>L{u2}n;",
+ "\u5D19>L{u2}n;",
+ "\u5D1A>L{e2}ng;",
+ "\u5D1B>Ju{e2};",
+ "\u5D1C>Duo;",
+ "\u5D1D>Zheng;",
+ "\u5D1E>Guo;",
+ "\u5D1F>Y{i2}n;",
+ "\u5D20>Dong;",
+ "\u5D21>H{a2}n;",
+ "\u5D22>Zheng;",
+ "\u5D23>We{i3};",
+ "\u5D24>Ya{o2};",
+ "\u5D25>P{i3};",
+ "\u5D26>Yan;",
+ "\u5D27>Song;",
+ "\u5D28>Ji{e2};",
+ "\u5D29>Beng;",
+ "\u5D2A>Z{u2};",
+ "\u5D2B>Ju{e2};",
+ "\u5D2C>Dong;",
+ "\u5D2D>Zh{a3}n;",
+ "\u5D2E>G{u4};",
+ "\u5D2F>Y{i2}n;",
+ "\u5D31>Z{e2};",
+ "\u5D32>Hu{a2}ng;",
+ "\u5D33>Y{u2};",
+ "\u5D34>Wei;",
+ "\u5D35>Y{a2}ng;",
+ "\u5D36>Feng;",
+ "\u5D37>Qi{u2};",
+ "\u5D38>D{u4}n;",
+ "\u5D39>T{i2};",
+ "\u5D3A>Y{i3};",
+ "\u5D3B>Zh{i4};",
+ "\u5D3C>Sh{i4};",
+ "\u5D3D>Za{i3};",
+ "\u5D3E>Ya{o3};",
+ "\u5D3F>{E4};",
+ "\u5D40>Zh{u4};",
+ "\u5D41>Kan;",
+ "\u5D42>L{uu4};",
+ "\u5D43>Y{a3}n;",
+ "\u5D44>Me{i3};",
+ "\u5D45>Gan;",
+ "\u5D46>Ji;",
+ "\u5D47>Ji;",
+ "\u5D48>Hu{a3}n;",
+ "\u5D49>T{i2}ng;",
+ "\u5D4A>Sh{e4}ng;",
+ "\u5D4B>Me{i2};",
+ "\u5D4C>Qi{a4}n;",
+ "\u5D4D>W{u4};",
+ "\u5D4E>Y{u2};",
+ "\u5D4F>Zong;",
+ "\u5D50>L{a2}n;",
+ "\u5D51>Ju{e2};",
+ "\u5D52>Y{a2}n;",
+ "\u5D53>Y{a2}n;",
+ "\u5D54>We{i3};",
+ "\u5D55>Zong;",
+ "\u5D56>Ch{a2};",
+ "\u5D57>Su{i4};",
+ "\u5D58>R{o2}ng;",
+ "\u5D5A>Qin;",
+ "\u5D5B>Y{u2};",
+ "\u5D5D>Lo{u3};",
+ "\u5D5E>T{u2};",
+ "\u5D5F>Dui;",
+ "\u5D60>Xi;",
+ "\u5D61>Weng;",
+ "\u5D62>Cang;",
+ "\u5D63>Dang;",
+ "\u5D64>H{o2}ng;",
+ "\u5D65>Ji{e2};",
+ "\u5D66>A{i2};",
+ "\u5D67>Li{u2};",
+ "\u5D68>W{u3};",
+ "\u5D69>Song;",
+ "\u5D6A>Qiao;",
+ "\u5D6B>Zi;",
+ "\u5D6C>We{i2};",
+ "\u5D6D>Beng;",
+ "\u5D6E>Dian;",
+ "\u5D6F>Cu{o2};",
+ "\u5D70>Qi{a3}n;",
+ "\u5D71>Y{o3}ng;",
+ "\u5D72>Ni{e4};",
+ "\u5D73>Cu{o2};",
+ "\u5D74>J{i2};",
+ "\u5D77>S{o3}ng;",
+ "\u5D78>Zong;",
+ "\u5D79>Ji{a4}ng;",
+ "\u5D7A>Lia{o2};",
+ "\u5D7B>Kang;",
+ "\u5D7C>Ch{a3}n;",
+ "\u5D7D>Di{e2};",
+ "\u5D7E>Cen;",
+ "\u5D7F>D{i3}ng;",
+ "\u5D80>Tu;",
+ "\u5D81>Lo{u3};",
+ "\u5D82>Zh{a4}ng;",
+ "\u5D83>Zh{a3}n;",
+ "\u5D84>Zh{a3}n;",
+ "\u5D85>A{o2};",
+ "\u5D86>Ca{o2};",
+ "\u5D87>Qu;",
+ "\u5D88>Qiang;",
+ "\u5D89>Zui;",
+ "\u5D8A>Zu{i3};",
+ "\u5D8B>Da{o3};",
+ "\u5D8C>Da{o3};",
+ "\u5D8D>X{i2};",
+ "\u5D8E>Y{u4};",
+ "\u5D8F>B{o2};",
+ "\u5D90>L{o2}ng;",
+ "\u5D91>Xi{a3}ng;",
+ "\u5D92>C{e2}ng;",
+ "\u5D93>Bo;",
+ "\u5D94>Qin;",
+ "\u5D95>Jiao;",
+ "\u5D96>Y{a3}n;",
+ "\u5D97>La{o2};",
+ "\u5D98>Zh{a4}n;",
+ "\u5D99>L{i2}n;",
+ "\u5D9A>Lia{o2};",
+ "\u5D9B>Lia{o2};",
+ "\u5D9C>Jin;",
+ "\u5D9D>D{e4}ng;",
+ "\u5D9E>Du{o4};",
+ "\u5D9F>Zun;",
+ "\u5DA0>Jia{o4};",
+ "\u5DA1>Gu{i4};",
+ "\u5DA2>Ya{o2};",
+ "\u5DA3>Qia{o2};",
+ "\u5DA4>Ya{o2};",
+ "\u5DA5>Ju{e2};",
+ "\u5DA6>Zhan;",
+ "\u5DA7>Y{i4};",
+ "\u5DA8>Xu{e2};",
+ "\u5DA9>Na{o2};",
+ "\u5DAA>Y{e4};",
+ "\u5DAB>Y{e4};",
+ "\u5DAC>Y{i2};",
+ "\u5DAD>{E4};",
+ "\u5DAE>Xi{a3}n;",
+ "\u5DAF>J{i2};",
+ "\u5DB0>Xi{e4};",
+ "\u5DB1>K{e3};",
+ "\u5DB2>Xi;",
+ "\u5DB3>D{i4};",
+ "\u5DB4>A{o4};",
+ "\u5DB5>Zu{i3};",
+ "\u5DB7>N{i4};",
+ "\u5DB8>R{o2}ng;",
+ "\u5DB9>Da{o3};",
+ "\u5DBA>L{i3}ng;",
+ "\u5DBB>Z{a2};",
+ "\u5DBC>Y{u3};",
+ "\u5DBD>Yu{e4};",
+ "\u5DBE>Y{i3}n;",
+ "\u5DC0>Jie;",
+ "\u5DC1>L{i4};",
+ "\u5DC2>Su{i3};",
+ "\u5DC3>L{o2}ng;",
+ "\u5DC4>L{o2}ng;",
+ "\u5DC5>Dian;",
+ "\u5DC6>Y{i2}ng;",
+ "\u5DC7>Xi;",
+ "\u5DC8>J{u2};",
+ "\u5DC9>Ch{a2}n;",
+ "\u5DCA>Y{i3}ng;",
+ "\u5DCB>Kui;",
+ "\u5DCC>Y{a2}n;",
+ "\u5DCD>Wei;",
+ "\u5DCE>Na{o2};",
+ "\u5DCF>Qu{a2}n;",
+ "\u5DD0>Cha{o3};",
+ "\u5DD1>Cu{a2}n;",
+ "\u5DD2>Lu{a2}n;",
+ "\u5DD3>Dian;",
+ "\u5DD4>Dian;",
+ "\u5DD6>Y{a2}n;",
+ "\u5DD7>Y{a2}n;",
+ "\u5DD8>Y{a3}n;",
+ "\u5DD9>Na{o2};",
+ "\u5DDA>Y{a3}n;",
+ "\u5DDB>Chuan;",
+ "\u5DDC>Gu{i4};",
+ "\u5DDD>Chuan;",
+ "\u5DDE>Zhou;",
+ "\u5DDF>Huang;",
+ "\u5DE0>Jing;",
+ "\u5DE1>X{u2}n;",
+ "\u5DE2>Cha{o2};",
+ "\u5DE3>Cha{o2};",
+ "\u5DE4>Lie;",
+ "\u5DE5>Gong;",
+ "\u5DE6>Zu{o3};",
+ "\u5DE7>Qia{o3};",
+ "\u5DE8>J{u4};",
+ "\u5DE9>G{o3}ng;",
+ "\u5DEB>Wu;",
+ "\u5DEE>Chai;",
+ "\u5DEF>Qi{u2};",
+ "\u5DF0>Qi{u2};",
+ "\u5DF1>J{i3};",
+ "\u5DF2>Y{i3};",
+ "\u5DF3>S{i4};",
+ "\u5DF4>Ba;",
+ "\u5DF5>Zhi;",
+ "\u5DF6>Zhao;",
+ "\u5DF7>Xi{a4}ng;",
+ "\u5DF8>Y{i2};",
+ "\u5DF9>J{i3}n;",
+ "\u5DFA>X{u4}n;",
+ "\u5DFB>Ju{a4}n;",
+ "\u5DFD>X{u4}n;",
+ "\u5DFE>Jin;",
+ "\u5DFF>F{u2};",
+ "\u5E00>Za;",
+ "\u5E01>B{i4};",
+ "\u5E02>Sh{i4};",
+ "\u5E03>B{u4};",
+ "\u5E04>Ding;",
+ "\u5E05>Shua{i4};",
+ "\u5E06>Fan;",
+ "\u5E07>Ni{e4};",
+ "\u5E08>Shi;",
+ "\u5E09>Fen;",
+ "\u5E0A>P{a4};",
+ "\u5E0B>Zh{i3};",
+ "\u5E0C>Xi;",
+ "\u5E0D>H{u4};",
+ "\u5E0E>D{a4}n;",
+ "\u5E0F>We{i2};",
+ "\u5E10>Zh{a4}ng;",
+ "\u5E11>T{a3}ng;",
+ "\u5E12>Da{i4};",
+ "\u5E13>M{a4};",
+ "\u5E14>Pe{i4};",
+ "\u5E15>P{a4};",
+ "\u5E16>Tie;",
+ "\u5E17>F{u2};",
+ "\u5E18>Li{a2}n;",
+ "\u5E19>Zh{i4};",
+ "\u5E1A>Zho{u3};",
+ "\u5E1B>B{o2};",
+ "\u5E1C>Zh{i4};",
+ "\u5E1D>D{i4};",
+ "\u5E1E>M{o4};",
+ "\u5E1F>Y{i4};",
+ "\u5E20>Y{i4};",
+ "\u5E21>P{i2}ng;",
+ "\u5E22>Qi{a4};",
+ "\u5E23>Ju{a4}n;",
+ "\u5E24>R{u2};",
+ "\u5E25>Shua{i4};",
+ "\u5E26>Da{i4};",
+ "\u5E27>Zh{e4}ng;",
+ "\u5E28>Shu{i4};",
+ "\u5E29>Qia{o4};",
+ "\u5E2A>Zhen;",
+ "\u5E2B>Shi;",
+ "\u5E2C>Q{u2}n;",
+ "\u5E2D>X{i2};",
+ "\u5E2E>Bang;",
+ "\u5E2F>Da{i4};",
+ "\u5E30>Gui;",
+ "\u5E31>Cho{u2};",
+ "\u5E32>P{i2}ng;",
+ "\u5E33>Zh{a4}ng;",
+ "\u5E34>Sha;",
+ "\u5E35>Wan;",
+ "\u5E36>Da{i4};",
+ "\u5E37>We{i2};",
+ "\u5E38>Ch{a2}ng;",
+ "\u5E39>Sh{a4};",
+ "\u5E3A>Q{i2};",
+ "\u5E3B>Z{e2};",
+ "\u5E3C>Gu{o2};",
+ "\u5E3D>Ma{o4};",
+ "\u5E3E>D{u3};",
+ "\u5E3F>Ho{u2};",
+ "\u5E40>Zh{e4}ng;",
+ "\u5E41>Xu;",
+ "\u5E42>M{i4};",
+ "\u5E43>We{i2};",
+ "\u5E44>W{o4};",
+ "\u5E45>F{u2};",
+ "\u5E46>Y{i4};",
+ "\u5E47>Bang;",
+ "\u5E48>P{i2}ng;",
+ "\u5E4A>Gong;",
+ "\u5E4B>P{a2}n;",
+ "\u5E4C>Hu{a3}ng;",
+ "\u5E4D>Dao;",
+ "\u5E4E>M{i4};",
+ "\u5E4F>Jia;",
+ "\u5E50>T{e2}ng;",
+ "\u5E51>Hui;",
+ "\u5E52>Zhong;",
+ "\u5E53>Shan;",
+ "\u5E54>M{a4}n;",
+ "\u5E55>M{u4};",
+ "\u5E56>Biao;",
+ "\u5E57>Gu{o2};",
+ "\u5E58>Z{e2};",
+ "\u5E59>M{u4};",
+ "\u5E5A>Bang;",
+ "\u5E5B>Zh{a4}ng;",
+ "\u5E5C>Ji{o3}ng;",
+ "\u5E5D>Ch{a3}n;",
+ "\u5E5E>F{u2};",
+ "\u5E5F>Zh{i4};",
+ "\u5E60>Hu;",
+ "\u5E61>Fan;",
+ "\u5E62>Chu{a2}ng;",
+ "\u5E63>B{i4};",
+ "\u5E66>M{i4};",
+ "\u5E67>Qiao;",
+ "\u5E68>Chan;",
+ "\u5E69>F{e2}n;",
+ "\u5E6A>M{e2}ng;",
+ "\u5E6B>Bang;",
+ "\u5E6C>Cho{u2};",
+ "\u5E6D>Mi{e4};",
+ "\u5E6E>Ch{u2};",
+ "\u5E6F>Ji{e2};",
+ "\u5E70>Xi{a3}n;",
+ "\u5E71>L{a2}n;",
+ "\u5E72>Gan;",
+ "\u5E73>P{i2}ng;",
+ "\u5E74>Ni{a2}n;",
+ "\u5E75>Qian;",
+ "\u5E76>B{i4}ng;",
+ "\u5E77>B{i4}ng;",
+ "\u5E78>X{i4}ng;",
+ "\u5E79>G{a4}n;",
+ "\u5E7A>Yao;",
+ "\u5E7B>Hu{a4}n;",
+ "\u5E7C>Yo{u4};",
+ "\u5E7D>You;",
+ "\u5E7E>J{i3};",
+ "\u5E7F>Y{a3}n;",
+ "\u5E80>P{i3};",
+ "\u5E81>Ting;",
+ "\u5E82>Z{e4};",
+ "\u5E83>Gu{a3}ng;",
+ "\u5E84>Zhuang;",
+ "\u5E85>M{o1};",
+ "\u5E86>Q{i4}ng;",
+ "\u5E87>B{i4};",
+ "\u5E88>Q{i2}n;",
+ "\u5E89>D{u4}n;",
+ "\u5E8A>Chu{a2}ng;",
+ "\u5E8B>Gu{i3};",
+ "\u5E8C>Y{a3};",
+ "\u5E8D>Ba{i4};",
+ "\u5E8E>Ji{e4};",
+ "\u5E8F>X{u4};",
+ "\u5E90>L{u2};",
+ "\u5E91>W{u3};",
+ "\u5E93>K{u4};",
+ "\u5E94>Y{i4}ng;",
+ "\u5E95>D{i3};",
+ "\u5E96>Pa{o2};",
+ "\u5E97>Di{a4}n;",
+ "\u5E98>Ya;",
+ "\u5E99>Mia{o4};",
+ "\u5E9A>Geng;",
+ "\u5E9B>Ci;",
+ "\u5E9C>F{u3};",
+ "\u5E9D>T{o2}ng;",
+ "\u5E9E>P{a2}ng;",
+ "\u5E9F>Fe{i4};",
+ "\u5EA0>Xi{a2}ng;",
+ "\u5EA1>Y{i3};",
+ "\u5EA2>Zh{i4};",
+ "\u5EA3>Tiao;",
+ "\u5EA4>Zh{i4};",
+ "\u5EA5>Xiu;",
+ "\u5EA6>D{u4};",
+ "\u5EA7>Zu{o4};",
+ "\u5EA8>Xiao;",
+ "\u5EA9>T{u2};",
+ "\u5EAA>Gu{i3};",
+ "\u5EAB>K{u4};",
+ "\u5EAC>P{a2}ng;",
+ "\u5EAD>T{i2}ng;",
+ "\u5EAE>Yo{u3};",
+ "\u5EAF>Bu;",
+ "\u5EB0>Ding;",
+ "\u5EB1>Ch{e3}ng;",
+ "\u5EB2>La{i2};",
+ "\u5EB3>Bei;",
+ "\u5EB4>J{i2};",
+ "\u5EB5>An;",
+ "\u5EB6>Sh{u4};",
+ "\u5EB7>Kang;",
+ "\u5EB8>Yong;",
+ "\u5EB9>Tu{o3};",
+ "\u5EBA>Song;",
+ "\u5EBB>Sh{u4};",
+ "\u5EBC>Q{i3}ng;",
+ "\u5EBD>Y{u4};",
+ "\u5EBE>Y{u3};",
+ "\u5EBF>Mia{o4};",
+ "\u5EC0>Sou;",
+ "\u5EC1>C{e4};",
+ "\u5EC2>Xiang;",
+ "\u5EC3>Fe{i4};",
+ "\u5EC4>Ji{u4};",
+ "\u5EC5>H{e2};",
+ "\u5EC6>Hu{i4};",
+ "\u5EC7>Li{u4};",
+ "\u5EC8>Sh{a4};",
+ "\u5EC9>Li{a2}n;",
+ "\u5ECA>L{a2}ng;",
+ "\u5ECB>Sou;",
+ "\u5ECC>Ji{a4}n;",
+ "\u5ECD>Po{u3};",
+ "\u5ECE>Q{i3}ng;",
+ "\u5ECF>Ji{u4};",
+ "\u5ED0>Ji{u4};",
+ "\u5ED1>Q{i2}n;",
+ "\u5ED2>A{o2};",
+ "\u5ED3>Ku{o4};",
+ "\u5ED4>Lo{u2};",
+ "\u5ED5>Yin;",
+ "\u5ED6>Lia{o4};",
+ "\u5ED7>Da{i4};",
+ "\u5ED8>L{u4};",
+ "\u5ED9>Y{i4};",
+ "\u5EDA>Ch{u2};",
+ "\u5EDB>Ch{a2}n;",
+ "\u5EDC>Tu;",
+ "\u5EDD>Si;",
+ "\u5EDE>Xin;",
+ "\u5EDF>Mia{o4};",
+ "\u5EE0>Ch{a3}ng;",
+ "\u5EE1>W{u3};",
+ "\u5EE2>Fe{i4};",
+ "\u5EE3>Gu{a3}ng;",
+ "\u5EE5>Kua{i4};",
+ "\u5EE6>B{i4};",
+ "\u5EE7>Qi{a2}ng;",
+ "\u5EE8>Xi{e4};",
+ "\u5EE9>L{i3}n;",
+ "\u5EEA>L{i3}n;",
+ "\u5EEB>Lia{o2};",
+ "\u5EEC>L{u2};",
+ "\u5EEE>Y{i2}ng;",
+ "\u5EEF>Xian;",
+ "\u5EF0>Ting;",
+ "\u5EF1>Yong;",
+ "\u5EF2>L{i2};",
+ "\u5EF3>Ting;",
+ "\u5EF4>Y{i3}n;",
+ "\u5EF5>X{u2}n;",
+ "\u5EF6>Y{a2}n;",
+ "\u5EF7>T{i2}ng;",
+ "\u5EF8>D{i2};",
+ "\u5EF9>P{o4};",
+ "\u5EFA>Ji{a4}n;",
+ "\u5EFB>Hu{i2};",
+ "\u5EFC>Na{i3};",
+ "\u5EFD>Hu{i2};",
+ "\u5EFE>G{o4}ng;",
+ "\u5EFF>Ni{a4}n;",
+ "\u5F00>Kai;",
+ "\u5F01>Bi{a4}n;",
+ "\u5F02>Y{i4};",
+ "\u5F03>Q{i4};",
+ "\u5F04>N{o4}ng;",
+ "\u5F05>F{e2}n;",
+ "\u5F06>J{u3};",
+ "\u5F07>Y{a3}n;",
+ "\u5F08>Y{i4};",
+ "\u5F09>Z{a4}ng;",
+ "\u5F0A>B{i4};",
+ "\u5F0B>Y{i4};",
+ "\u5F0C>Yi;",
+ "\u5F0D>{E4}r;",
+ "\u5F0E>San;",
+ "\u5F0F>Sh{i4};",
+ "\u5F10>{E4}r;",
+ "\u5F11>Sh{i4};",
+ "\u5F12>Sh{i4};",
+ "\u5F13>Gong;",
+ "\u5F14>Dia{o4};",
+ "\u5F15>Y{i3}n;",
+ "\u5F16>H{u4};",
+ "\u5F17>F{u2};",
+ "\u5F18>H{o2}ng;",
+ "\u5F19>Wu;",
+ "\u5F1A>Tu{i2};",
+ "\u5F1B>Ch{i2};",
+ "\u5F1C>Ji{a4}ng;",
+ "\u5F1D>B{a4};",
+ "\u5F1E>Sh{e3}n;",
+ "\u5F1F>D{i4};",
+ "\u5F20>Zhang;",
+ "\u5F21>Ju{e2};",
+ "\u5F22>Tao;",
+ "\u5F23>F{u3};",
+ "\u5F24>D{i3};",
+ "\u5F25>M{i2};",
+ "\u5F26>Xi{a2}n;",
+ "\u5F27>H{u2};",
+ "\u5F28>Chao;",
+ "\u5F29>N{u3};",
+ "\u5F2A>J{i4}ng;",
+ "\u5F2B>Zh{e3}n;",
+ "\u5F2C>Y{i2};",
+ "\u5F2D>M{i3};",
+ "\u5F2E>Quan;",
+ "\u5F2F>Wan;",
+ "\u5F30>Shao;",
+ "\u5F31>Ru{o4};",
+ "\u5F32>Xuan;",
+ "\u5F33>J{i4}ng;",
+ "\u5F34>Dun;",
+ "\u5F35>Zhang;",
+ "\u5F36>Ji{a4}ng;",
+ "\u5F37>Qi{a2}ng;",
+ "\u5F38>P{e2}ng;",
+ "\u5F39>D{a4}n;",
+ "\u5F3A>Qi{a2}ng;",
+ "\u5F3B>B{i4};",
+ "\u5F3C>B{i4};",
+ "\u5F3D>Sh{e4};",
+ "\u5F3E>D{a4}n;",
+ "\u5F3F>Ji{a3}n;",
+ "\u5F40>Go{u4};",
+ "\u5F42>Fa;",
+ "\u5F43>B{i4};",
+ "\u5F44>Kou;",
+ "\u5F46>Bi{e4};",
+ "\u5F47>Xiao;",
+ "\u5F48>D{a4}n;",
+ "\u5F49>Ku{o4};",
+ "\u5F4A>Qi{a2}ng;",
+ "\u5F4B>H{o2}ng;",
+ "\u5F4C>M{i2};",
+ "\u5F4D>Ku{o4};",
+ "\u5F4E>Wan;",
+ "\u5F4F>Ju{e2};",
+ "\u5F50>J{i4};",
+ "\u5F51>J{i4};",
+ "\u5F52>Gui;",
+ "\u5F53>Dang;",
+ "\u5F54>L{u4};",
+ "\u5F55>L{u4};",
+ "\u5F56>Tu{a4}n;",
+ "\u5F57>Hu{i4};",
+ "\u5F58>Zh{i4};",
+ "\u5F59>Hu{i4};",
+ "\u5F5A>Hu{i4};",
+ "\u5F5B>Y{i2};",
+ "\u5F5C>Y{i2};",
+ "\u5F5D>Y{i2};",
+ "\u5F5E>Y{i2};",
+ "\u5F5F>Hu{o4};",
+ "\u5F60>Hu{o4};",
+ "\u5F61>Shan;",
+ "\u5F62>X{i2}ng;",
+ "\u5F63>W{e2}n;",
+ "\u5F64>T{o2}ng;",
+ "\u5F65>Y{a4}n;",
+ "\u5F66>Y{a4}n;",
+ "\u5F67>Y{u4};",
+ "\u5F68>Chi;",
+ "\u5F69>Ca{i3};",
+ "\u5F6A>Biao;",
+ "\u5F6B>Diao;",
+ "\u5F6C>Bin;",
+ "\u5F6D>P{e2}ng;",
+ "\u5F6E>Y{o3}ng;",
+ "\u5F6F>Piao;",
+ "\u5F70>Zhang;",
+ "\u5F71>Y{i3}ng;",
+ "\u5F72>Chi;",
+ "\u5F73>Ch{i4};",
+ "\u5F74>Zhu{o2};",
+ "\u5F75>Tu{o3};",
+ "\u5F76>J{i2};",
+ "\u5F77>P{a2}ng;",
+ "\u5F78>Zhong;",
+ "\u5F79>Y{i4};",
+ "\u5F7A>W{a2}ng;",
+ "\u5F7B>Ch{e4};",
+ "\u5F7C>B{i3};",
+ "\u5F7D>Ch{i2};",
+ "\u5F7E>L{i3}ng;",
+ "\u5F7F>F{u2};",
+ "\u5F80>W{a3}ng;",
+ "\u5F81>Zheng;",
+ "\u5F82>C{u2};",
+ "\u5F83>W{a3}ng;",
+ "\u5F84>J{i4}ng;",
+ "\u5F85>Da{i4};",
+ "\u5F86>Xi;",
+ "\u5F87>X{u4}n;",
+ "\u5F88>H{e3}n;",
+ "\u5F89>Y{a2}ng;",
+ "\u5F8A>Hua{i2};",
+ "\u5F8B>L{uu4};",
+ "\u5F8C>Ho{u4};",
+ "\u5F8D>Wa;",
+ "\u5F8E>Ch{e3}ng;",
+ "\u5F8F>Zh{i4};",
+ "\u5F90>X{u2};",
+ "\u5F91>J{i4}ng;",
+ "\u5F92>T{u2};",
+ "\u5F93>C{o2}ng;",
+ "\u5F95>La{i2};",
+ "\u5F96>C{o2}ng;",
+ "\u5F97>D{e2};",
+ "\u5F98>Pa{i2};",
+ "\u5F99>X{i3};",
+ "\u5F9B>Q{i4};",
+ "\u5F9C>Ch{a2}ng;",
+ "\u5F9D>Zh{i4};",
+ "\u5F9E>C{o2}ng;",
+ "\u5F9F>Zhou;",
+ "\u5FA0>La{i2};",
+ "\u5FA1>Y{u4};",
+ "\u5FA2>Xi{e4};",
+ "\u5FA3>Ji{e4};",
+ "\u5FA4>Ji{a4}n;",
+ "\u5FA5>Ch{i2};",
+ "\u5FA6>Ji{a3};",
+ "\u5FA7>Bi{a4}n;",
+ "\u5FA8>Hu{a2}ng;",
+ "\u5FA9>F{u4};",
+ "\u5FAA>X{u2}n;",
+ "\u5FAB>We{i3};",
+ "\u5FAC>P{a2}ng;",
+ "\u5FAD>Ya{o2};",
+ "\u5FAE>Wei;",
+ "\u5FAF>Xi;",
+ "\u5FB0>Zheng;",
+ "\u5FB1>Pia{o4};",
+ "\u5FB2>Ch{i2};",
+ "\u5FB3>D{e2};",
+ "\u5FB4>Zheng;",
+ "\u5FB5>Zheng;",
+ "\u5FB6>Bi{e4};",
+ "\u5FB7>D{e2};",
+ "\u5FB8>Chong;",
+ "\u5FB9>Ch{e4};",
+ "\u5FBA>Jia{o3};",
+ "\u5FBB>We{i4};",
+ "\u5FBC>Jia{o4};",
+ "\u5FBD>Hui;",
+ "\u5FBE>Me{i2};",
+ "\u5FBF>L{o4}ng;",
+ "\u5FC0>Xiang;",
+ "\u5FC1>Ba{o4};",
+ "\u5FC2>Q{u2};",
+ "\u5FC3>Xin;",
+ "\u5FC4>Shu4xin1p{a2}ng;",
+ "\u5FC5>B{i4};",
+ "\u5FC6>Y{i4};",
+ "\u5FC7>L{e4};",
+ "\u5FC8>R{e2}n;",
+ "\u5FC9>Dao;",
+ "\u5FCA>D{i4}ng;",
+ "\u5FCB>Ga{i3};",
+ "\u5FCC>J{i4};",
+ "\u5FCD>R{e3}n;",
+ "\u5FCE>R{e2}n;",
+ "\u5FCF>Ch{a4}n;",
+ "\u5FD0>T{a3}n;",
+ "\u5FD1>T{e4};",
+ "\u5FD2>T{e4};",
+ "\u5FD3>Gan;",
+ "\u5FD4>Q{i4};",
+ "\u5FD5>Sh{i4};",
+ "\u5FD6>C{u3}n;",
+ "\u5FD7>Zh{i4};",
+ "\u5FD8>W{a4}ng;",
+ "\u5FD9>M{a2}ng;",
+ "\u5FDA>Xi;",
+ "\u5FDB>F{a2}n;",
+ "\u5FDC>Ying;",
+ "\u5FDD>Ti{a3}n;",
+ "\u5FDE>M{i2}n;",
+ "\u5FDF>M{i2}n;",
+ "\u5FE0>Zhong;",
+ "\u5FE1>Chong;",
+ "\u5FE2>W{u4};",
+ "\u5FE3>J{i2};",
+ "\u5FE4>W{u3};",
+ "\u5FE5>X{i4};",
+ "\u5FE6>Y{e4};",
+ "\u5FE7>You;",
+ "\u5FE8>W{a4}n;",
+ "\u5FE9>Cong;",
+ "\u5FEA>Zhong;",
+ "\u5FEB>Kua{i4};",
+ "\u5FEC>Y{u4};",
+ "\u5FED>Bi{a4}n;",
+ "\u5FEE>Zh{i4};",
+ "\u5FEF>Q{i2};",
+ "\u5FF0>Cu{i4};",
+ "\u5FF1>Ch{e2}n;",
+ "\u5FF2>Ta{i4};",
+ "\u5FF3>T{u2}n;",
+ "\u5FF4>Qi{a2}n;",
+ "\u5FF5>Ni{a4}n;",
+ "\u5FF6>H{u2}n;",
+ "\u5FF7>Xiong;",
+ "\u5FF8>Ni{u3};",
+ "\u5FF9>W{a3}ng;",
+ "\u5FFA>Xian;",
+ "\u5FFB>Xin;",
+ "\u5FFC>Kang;",
+ "\u5FFD>Hu;",
+ "\u5FFE>Ka{i4};",
+ "\u5FFF>F{e4}n;",
+ "\u6000>Hua{i2};",
+ "\u6001>Ta{i4};",
+ "\u6002>S{o3}ng;",
+ "\u6003>W{u3};",
+ "\u6004>O{u4};",
+ "\u6005>Ch{a4}ng;",
+ "\u6006>Chu{a4}ng;",
+ "\u6007>J{u4};",
+ "\u6008>Y{i4};",
+ "\u6009>Ba{o3};",
+ "\u600A>Chao;",
+ "\u600B>M{i2}n;",
+ "\u600C>Pei;",
+ "\u600D>Zu{o4};",
+ "\u600E>Z{e3}n;",
+ "\u600F>Y{a4}ng;",
+ "\u6010>Ko{u4};",
+ "\u6011>B{a4}n;",
+ "\u6012>N{u4};",
+ "\u6013>Na{o2};",
+ "\u6014>Zheng;",
+ "\u6015>P{a4};",
+ "\u6016>B{u4};",
+ "\u6017>Tie;",
+ "\u6018>G{u4};",
+ "\u6019>H{u4};",
+ "\u601A>J{u4};",
+ "\u601B>D{a2};",
+ "\u601C>Li{a2}n;",
+ "\u601D>Si;",
+ "\u601E>Chou;",
+ "\u601F>D{i4};",
+ "\u6020>Da{i4};",
+ "\u6021>Y{i2};",
+ "\u6022>T{u2};",
+ "\u6023>Yo{u2};",
+ "\u6024>Fu;",
+ "\u6025>J{i2};",
+ "\u6026>Peng;",
+ "\u6027>X{i4}ng;",
+ "\u6028>Yu{a4}n;",
+ "\u6029>N{i2};",
+ "\u602A>Gua{i4};",
+ "\u602B>F{u2};",
+ "\u602C>X{i4};",
+ "\u602D>B{i4};",
+ "\u602E>You;",
+ "\u602F>Qi{e4};",
+ "\u6030>Xu{a4}n;",
+ "\u6031>Cong;",
+ "\u6032>B{i3}ng;",
+ "\u6033>Hu{a3}ng;",
+ "\u6034>X{u4};",
+ "\u6035>Ch{u4};",
+ "\u6036>Pi;",
+ "\u6037>Xi;",
+ "\u6038>Xi;",
+ "\u6039>Tan;",
+ "\u603B>Z{o3}ng;",
+ "\u603C>Du{i4};",
+ "\u603F>Y{i4};",
+ "\u6040>Ch{i3};",
+ "\u6041>R{e4}n;",
+ "\u6042>X{u2}n;",
+ "\u6043>Sh{i4};",
+ "\u6044>X{i4};",
+ "\u6045>La{o3};",
+ "\u6046>H{e2}ng;",
+ "\u6047>Kuang;",
+ "\u6048>M{u2};",
+ "\u6049>Zh{i3};",
+ "\u604A>Xi{e2};",
+ "\u604B>Li{a4}n;",
+ "\u604C>Tiao;",
+ "\u604D>Hu{a3}ng;",
+ "\u604E>Di{e2};",
+ "\u604F>Ha{o3};",
+ "\u6050>K{o3}ng;",
+ "\u6051>Gu{i3};",
+ "\u6052>H{e2}ng;",
+ "\u6053>Xi;",
+ "\u6054>Xia{o4};",
+ "\u6055>Sh{u4};",
+ "\u6056>S1;",
+ "\u6057>Ku{a3};",
+ "\u6058>Qiu;",
+ "\u6059>Y{a4}ng;",
+ "\u605A>Hu{i4};",
+ "\u605B>Hu{i2};",
+ "\u605C>Ch{i4};",
+ "\u605D>Ji{a2};",
+ "\u605E>Y{i2};",
+ "\u605F>Xiong;",
+ "\u6060>Gua{i4};",
+ "\u6061>L{i4}n;",
+ "\u6062>Hui;",
+ "\u6063>Z{i4};",
+ "\u6064>X{u4};",
+ "\u6065>Ch{i3};",
+ "\u6066>Xi{a4}ng;",
+ "\u6067>N{uu4};",
+ "\u6068>H{e4}n;",
+ "\u6069>En;",
+ "\u606A>K{e4};",
+ "\u606B>Tong;",
+ "\u606C>Ti{a2}n;",
+ "\u606D>Gong;",
+ "\u606E>Qu{a2}n;",
+ "\u606F>Xi;",
+ "\u6070>Qi{a4};",
+ "\u6071>Yu{e4};",
+ "\u6072>Peng;",
+ "\u6073>K{e3}n;",
+ "\u6074>D{e2};",
+ "\u6075>Hu{i4};",
+ "\u6076>{E4};",
+ "\u6078>T{o4}ng;",
+ "\u6079>Y{a4}n;",
+ "\u607A>Ka{i3};",
+ "\u607B>C{e4};",
+ "\u607C>Na{o3};",
+ "\u607D>Y{u4}n;",
+ "\u607E>M{a2}ng;",
+ "\u607F>Y{o3}ng;",
+ "\u6080>Y{o3}ng;",
+ "\u6081>Yuan;",
+ "\u6082>Pi;",
+ "\u6083>K{u3}n;",
+ "\u6084>Qia{o3};",
+ "\u6085>Yu{e4};",
+ "\u6086>Y{u4};",
+ "\u6087>Y{u4};",
+ "\u6088>Ji{e4};",
+ "\u6089>Xi;",
+ "\u608A>Zh{e2};",
+ "\u608B>L{i4}n;",
+ "\u608C>T{i4};",
+ "\u608D>H{a4}n;",
+ "\u608E>Ha{o4};",
+ "\u608F>Qi{e4};",
+ "\u6090>T{i4};",
+ "\u6091>B{u4};",
+ "\u6092>Y{i4};",
+ "\u6093>Qi{a4}n;",
+ "\u6094>Hu{i3};",
+ "\u6095>Xi;",
+ "\u6096>Be{i4};",
+ "\u6097>M{a2}n;",
+ "\u6098>Yi;",
+ "\u6099>Heng;",
+ "\u609A>S{o3}ng;",
+ "\u609B>Quan;",
+ "\u609C>Ch{e3}ng;",
+ "\u609D>Hui;",
+ "\u609E>W{u4};",
+ "\u609F>W{u4};",
+ "\u60A0>You;",
+ "\u60A1>L{i2};",
+ "\u60A2>Li{a4}ng;",
+ "\u60A3>Hu{a4}n;",
+ "\u60A4>Cong;",
+ "\u60A5>Y{i4};",
+ "\u60A6>Yu{e4};",
+ "\u60A7>L{i4};",
+ "\u60A8>N{i2}n;",
+ "\u60A9>Na{o3};",
+ "\u60AA>{E4};",
+ "\u60AB>Qu{e4};",
+ "\u60AC>Xu{a2}n;",
+ "\u60AD>Qian;",
+ "\u60AE>W{u4};",
+ "\u60AF>M{i3}n;",
+ "\u60B0>C{o2}ng;",
+ "\u60B1>Fe{i3};",
+ "\u60B2>Bei;",
+ "\u60B3>Du{o2};",
+ "\u60B4>Cu{i4};",
+ "\u60B5>Ch{a4}ng;",
+ "\u60B6>M{e4}n;",
+ "\u60B7>L{i4};",
+ "\u60B8>J{i4};",
+ "\u60B9>Gu{a4}n;",
+ "\u60BA>Gu{a4}n;",
+ "\u60BB>X{i4}ng;",
+ "\u60BC>Da{o4};",
+ "\u60BD>Qi;",
+ "\u60BE>Kong;",
+ "\u60BF>Ti{a3}n;",
+ "\u60C0>L{u2}n;",
+ "\u60C1>Xi;",
+ "\u60C2>K{a3}n;",
+ "\u60C3>Kun;",
+ "\u60C4>N{i4};",
+ "\u60C5>Q{i2}ng;",
+ "\u60C6>Cho{u2};",
+ "\u60C7>Dun;",
+ "\u60C8>Gu{o3};",
+ "\u60C9>Chan;",
+ "\u60CA>Li{a2}ng;",
+ "\u60CB>W{a3}n;",
+ "\u60CC>Yuan;",
+ "\u60CD>Jin;",
+ "\u60CE>J{i4};",
+ "\u60CF>L{i2}n;",
+ "\u60D0>Y{u4};",
+ "\u60D1>Hu{o4};",
+ "\u60D2>H{e2};",
+ "\u60D3>Qu{a2}n;",
+ "\u60D4>T{a2}n;",
+ "\u60D5>T{i4};",
+ "\u60D6>T{i4};",
+ "\u60D7>Nie;",
+ "\u60D8>W{a3}ng;",
+ "\u60D9>Chu{o4};",
+ "\u60DA>Bu;",
+ "\u60DB>Hun;",
+ "\u60DC>Xi;",
+ "\u60DD>T{a3}ng;",
+ "\u60DE>Xin;",
+ "\u60DF>We{i2};",
+ "\u60E0>Hu{i4};",
+ "\u60E1>{E4};",
+ "\u60E2>Ru{i3};",
+ "\u60E3>Z{o3}ng;",
+ "\u60E4>Jian;",
+ "\u60E5>Y{o3}ng;",
+ "\u60E6>Di{a4}n;",
+ "\u60E7>J{u4};",
+ "\u60E8>C{a3}n;",
+ "\u60E9>Ch{e2}ng;",
+ "\u60EA>D{e2};",
+ "\u60EB>Be{i4};",
+ "\u60EC>Qi{e4};",
+ "\u60ED>C{a2}n;",
+ "\u60EE>D{a4}n;",
+ "\u60EF>Gu{a4}n;",
+ "\u60F0>Du{o4};",
+ "\u60F1>Na{o3};",
+ "\u60F2>Y{u4}n;",
+ "\u60F3>Xi{a3}ng;",
+ "\u60F4>Zhu{i4};",
+ "\u60F5>Di{e4};",
+ "\u60F6>Hu{a2}ng;",
+ "\u60F7>Ch{u3}n;",
+ "\u60F8>Qi{o2}ng;",
+ "\u60F9>R{e3};",
+ "\u60FA>Xing;",
+ "\u60FB>C{e4};",
+ "\u60FC>Bi{a3}n;",
+ "\u60FD>Hun;",
+ "\u60FE>Zong;",
+ "\u60FF>T{i2};",
+ "\u6100>Qia{o3};",
+ "\u6101>Cho{u2};",
+ "\u6102>Be{i4};",
+ "\u6103>Xuan;",
+ "\u6104>Wei;",
+ "\u6105>G{e2};",
+ "\u6106>Qian;",
+ "\u6107>We{i3};",
+ "\u6108>Y{u4};",
+ "\u6109>Y{u2};",
+ "\u610A>B{i4};",
+ "\u610B>Xuan;",
+ "\u610C>Hu{a4}n;",
+ "\u610D>M{i3}n;",
+ "\u610E>B{i4};",
+ "\u610F>Y{i4};",
+ "\u6110>Mi{a3}n;",
+ "\u6111>Y{o3}ng;",
+ "\u6112>Ka{i4};",
+ "\u6113>D{a4}ng;",
+ "\u6114>Yin;",
+ "\u6115>{E4};",
+ "\u6116>Ch{e2}n;",
+ "\u6117>Mo{u4};",
+ "\u6118>K{e4};",
+ "\u6119>K{e4};",
+ "\u611A>Y{u2};",
+ "\u611B>A{i4};",
+ "\u611C>Qi{e4};",
+ "\u611D>Y{a3}n;",
+ "\u611E>Nu{o4};",
+ "\u611F>G{a3}n;",
+ "\u6120>Y{u4}n;",
+ "\u6121>Z{o3}ng;",
+ "\u6122>Sai;",
+ "\u6123>L{e2}ng;",
+ "\u6124>F{e4}n;",
+ "\u6126>Ku{i4};",
+ "\u6127>Ku{i4};",
+ "\u6128>Qu{e4};",
+ "\u6129>Gong;",
+ "\u612A>Y{u2}n;",
+ "\u612B>S{u4};",
+ "\u612C>S{u4};",
+ "\u612D>Q{i2};",
+ "\u612E>Ya{o2};",
+ "\u612F>S{o3}ng;",
+ "\u6130>Hu{a3}ng;",
+ "\u6131>J{i2};",
+ "\u6132>G{u3};",
+ "\u6133>J{u4};",
+ "\u6134>Chu{a4}ng;",
+ "\u6135>N{i4};",
+ "\u6136>Xi{e2};",
+ "\u6137>Ka{i3};",
+ "\u6138>Zh{e3}ng;",
+ "\u6139>Y{o3}ng;",
+ "\u613A>Ca{o3};",
+ "\u613B>S{u4}n;",
+ "\u613C>Sh{e4}n;",
+ "\u613D>B{o2};",
+ "\u613E>Ka{i4};",
+ "\u613F>Yu{a4}n;",
+ "\u6140>Xi{e2};",
+ "\u6141>H{u4}n;",
+ "\u6142>Y{o3}ng;",
+ "\u6143>Y{a3}ng;",
+ "\u6144>L{i4};",
+ "\u6145>Sao;",
+ "\u6146>Tao;",
+ "\u6147>Yin;",
+ "\u6148>C{i2};",
+ "\u6149>X{u4};",
+ "\u614A>Qi{a4}n;",
+ "\u614B>Ta{i4};",
+ "\u614C>Huang;",
+ "\u614D>Y{u4}n;",
+ "\u614E>Sh{e4}n;",
+ "\u614F>M{i3}ng;",
+ "\u6151>Sh{e4};",
+ "\u6152>C{o2}ng;",
+ "\u6153>Pia{o4};",
+ "\u6154>M{o4};",
+ "\u6155>M{u4};",
+ "\u6156>Gu{o2};",
+ "\u6157>Ch{i4};",
+ "\u6158>C{a3}n;",
+ "\u6159>C{a2}n;",
+ "\u615A>C{a2}n;",
+ "\u615B>Cu{i2};",
+ "\u615C>M{i3}n;",
+ "\u615D>T{e4};",
+ "\u615E>Zhang;",
+ "\u615F>T{o4}ng;",
+ "\u6160>A{o4};",
+ "\u6161>Shu{a3}ng;",
+ "\u6162>M{a4}n;",
+ "\u6163>Gu{a4}n;",
+ "\u6164>Qu{e4};",
+ "\u6165>Za{o4};",
+ "\u6166>Ji{u4};",
+ "\u6167>Hu{i4};",
+ "\u6168>Ka{i3};",
+ "\u6169>Li{a2}n;",
+ "\u616A>O{u4};",
+ "\u616B>S{o3}ng;",
+ "\u616C>J{i3}n;",
+ "\u616D>Y{i4}n;",
+ "\u616E>L{uu4};",
+ "\u616F>Shang;",
+ "\u6170>We{i4};",
+ "\u6171>Tu{a2}n;",
+ "\u6172>M{a2}n;",
+ "\u6173>Qian;",
+ "\u6174>Sh{e4};",
+ "\u6175>Yong;",
+ "\u6176>Q{i4}ng;",
+ "\u6177>Kang;",
+ "\u6178>D{i4};",
+ "\u6179>Zh{i2};",
+ "\u617A>Lo{u2};",
+ "\u617B>Ju{a4}n;",
+ "\u617C>Qi;",
+ "\u617D>Qi;",
+ "\u617E>Y{u4};",
+ "\u617F>P{i2}ng;",
+ "\u6180>Lia{o2};",
+ "\u6181>Cong;",
+ "\u6182>You;",
+ "\u6183>Chong;",
+ "\u6184>Zh{i4};",
+ "\u6185>T{o4}ng;",
+ "\u6186>Cheng;",
+ "\u6187>Q{i4};",
+ "\u6188>Qu;",
+ "\u6189>P{e2}ng;",
+ "\u618A>Be{i4};",
+ "\u618B>Bie;",
+ "\u618C>Ch{u2}n;",
+ "\u618D>Jiao;",
+ "\u618E>Zeng;",
+ "\u618F>Ch{i4};",
+ "\u6190>Li{a2}n;",
+ "\u6191>P{i2}ng;",
+ "\u6192>Ku{i4};",
+ "\u6193>Hu{i4};",
+ "\u6194>Qia{o2};",
+ "\u6195>Ch{e2}ng;",
+ "\u6196>Y{i4}n;",
+ "\u6197>Y{i4}n;",
+ "\u6198>X{i3};",
+ "\u6199>X{i3};",
+ "\u619A>D{a4}n;",
+ "\u619B>T{a2}n;",
+ "\u619C>Du{o3};",
+ "\u619D>Du{i4};",
+ "\u619E>Du{i4};",
+ "\u619F>S{u4};",
+ "\u61A0>Ju{e2};",
+ "\u61A1>C{e4};",
+ "\u61A2>Xiao;",
+ "\u61A3>F{a2}n;",
+ "\u61A4>F{e4}n;",
+ "\u61A5>La{o2};",
+ "\u61A6>La{o4};",
+ "\u61A7>Chong;",
+ "\u61A8>Han;",
+ "\u61A9>Q{i4};",
+ "\u61AA>Xi{a2}n;",
+ "\u61AB>M{i3}n;",
+ "\u61AC>J{i3}ng;",
+ "\u61AD>Lia{o3};",
+ "\u61AE>W{u3};",
+ "\u61AF>C{a3}n;",
+ "\u61B0>Ju{e2};",
+ "\u61B1>C{u4};",
+ "\u61B2>Xi{a4}n;",
+ "\u61B3>T{a3}n;",
+ "\u61B4>Sh{e2}ng;",
+ "\u61B5>Pi;",
+ "\u61B6>Y{i4};",
+ "\u61B7>Ch{u3};",
+ "\u61B8>Xian;",
+ "\u61B9>Na{o2};",
+ "\u61BA>D{a4}n;",
+ "\u61BB>T{a3}n;",
+ "\u61BC>J{i3}ng;",
+ "\u61BD>Song;",
+ "\u61BE>H{a4}n;",
+ "\u61BF>Jiao;",
+ "\u61C0>Wa{i4};",
+ "\u61C1>Hu{a2}n;",
+ "\u61C2>D{o3}ng;",
+ "\u61C3>Q{i2}n;",
+ "\u61C4>Q{i2}n;",
+ "\u61C5>Q{u2};",
+ "\u61C6>Ca{o3};",
+ "\u61C7>K{e3}n;",
+ "\u61C8>Xi{e4};",
+ "\u61C9>Y{i4}ng;",
+ "\u61CA>A{o4};",
+ "\u61CB>Ma{o4};",
+ "\u61CC>Y{i4};",
+ "\u61CD>L{i3}n;",
+ "\u61CE>S{e4};",
+ "\u61CF>J{u4}n;",
+ "\u61D0>Hua{i2};",
+ "\u61D1>M{e4}n;",
+ "\u61D2>L{a3}n;",
+ "\u61D3>A{i4};",
+ "\u61D4>L{i3}n;",
+ "\u61D5>Yan;",
+ "\u61D6>Gua;",
+ "\u61D7>Xi{a4};",
+ "\u61D8>Ch{i4};",
+ "\u61D9>Y{u3};",
+ "\u61DA>Y{i4}n;",
+ "\u61DB>Dai;",
+ "\u61DC>M{e4}ng;",
+ "\u61DD>A{i4};",
+ "\u61DE>M{e2}ng;",
+ "\u61DF>Du{i4};",
+ "\u61E0>Q{i2};",
+ "\u61E1>M{o3};",
+ "\u61E2>L{a2}n;",
+ "\u61E3>M{e4}n;",
+ "\u61E4>Cho{u2};",
+ "\u61E5>Zh{i4};",
+ "\u61E6>Nu{o4};",
+ "\u61E7>Nu{o4};",
+ "\u61E8>Yan;",
+ "\u61E9>Y{a3}ng;",
+ "\u61EA>B{o2};",
+ "\u61EB>Zh{i2};",
+ "\u61EC>Ku{a4}ng;",
+ "\u61ED>Ku{a4}ng;",
+ "\u61EE>Yo{u3};",
+ "\u61EF>Fu;",
+ "\u61F0>Li{u2};",
+ "\u61F1>Mi{e4};",
+ "\u61F2>Ch{e2}ng;",
+ "\u61F4>Ch{a4}n;",
+ "\u61F5>M{e2}ng;",
+ "\u61F6>L{a3}n;",
+ "\u61F7>Hua{i2};",
+ "\u61F8>Xu{a2}n;",
+ "\u61F9>R{a4}ng;",
+ "\u61FA>Ch{a4}n;",
+ "\u61FB>J{i4};",
+ "\u61FC>J{u4};",
+ "\u61FD>Huan;",
+ "\u61FE>Sh{e4};",
+ "\u61FF>Y{i4};",
+ "\u6200>Li{a4}n;",
+ "\u6201>N{a3}n;",
+ "\u6202>M{i2};",
+ "\u6203>T{a3}ng;",
+ "\u6204>Ju{e2};",
+ "\u6205>G{a4}ng;",
+ "\u6206>G{a4}ng;",
+ "\u6207>G{a4}ng;",
+ "\u6208>Ge;",
+ "\u6209>Yu{e4};",
+ "\u620A>W{u4};",
+ "\u620B>Jian;",
+ "\u620C>Xu;",
+ "\u620D>Sh{u4};",
+ "\u620E>R{o2}ng;",
+ "\u620F>X{i4};",
+ "\u6210>Ch{e2}ng;",
+ "\u6211>W{o3};",
+ "\u6212>Ji{e4};",
+ "\u6213>Ge;",
+ "\u6214>Jian;",
+ "\u6215>Qiang;",
+ "\u6216>Hu{o4};",
+ "\u6217>Qiang;",
+ "\u6218>Zh{a4}n;",
+ "\u6219>D{o4}ng;",
+ "\u621A>Qi;",
+ "\u621B>Ji{a2};",
+ "\u621C>Di{e2};",
+ "\u621D>Ze{i2};",
+ "\u621E>Ji{a2};",
+ "\u621F>J{i3};",
+ "\u6220>Sh{i4};",
+ "\u6221>Kan;",
+ "\u6222>J{i2};",
+ "\u6223>Ku{i2};",
+ "\u6224>Ga{i4};",
+ "\u6225>D{e3}ng;",
+ "\u6226>Zh{a4}n;",
+ "\u6227>Chuang;",
+ "\u6228>Ge;",
+ "\u6229>Ji{a3}n;",
+ "\u622A>Ji{e2};",
+ "\u622B>Y{u4};",
+ "\u622C>Ji{a3}n;",
+ "\u622D>Y{a3}n;",
+ "\u622E>L{u4};",
+ "\u622F>X{i4};",
+ "\u6230>Zh{a4}n;",
+ "\u6231>X{i4};",
+ "\u6232>X{i4};",
+ "\u6233>Chuo;",
+ "\u6234>Da{i4};",
+ "\u6235>Q{u2};",
+ "\u6236>H{u4};",
+ "\u6237>H{u4};",
+ "\u6238>H{u4};",
+ "\u6239>{E4};",
+ "\u623A>Sh{i4};",
+ "\u623B>L{i4};",
+ "\u623C>Ma{o3};",
+ "\u623D>H{u4};",
+ "\u623E>L{i4};",
+ "\u623F>F{a2}ng;",
+ "\u6240>Su{o3};",
+ "\u6241>Bi{a3}n;",
+ "\u6242>Di{a4}n;",
+ "\u6243>Jiong;",
+ "\u6244>Sh{a3}ng;",
+ "\u6245>Y{i2};",
+ "\u6246>Y{i3};",
+ "\u6247>Sh{a4}n;",
+ "\u6248>H{u4};",
+ "\u6249>Fei;",
+ "\u624A>Y{a3}n;",
+ "\u624B>Sho{u3};",
+ "\u624C>T1shou3p{a2}ng;",
+ "\u624D>Ca{i2};",
+ "\u624E>Zha;",
+ "\u624F>Qi{u2};",
+ "\u6250>L{e4};",
+ "\u6251>Bu;",
+ "\u6252>Ba;",
+ "\u6253>D{a3};",
+ "\u6254>Reng;",
+ "\u6255>F{u2};",
+ "\u6257>Za{i4};",
+ "\u6258>Tuo;",
+ "\u6259>Zh{a4}ng;",
+ "\u625A>Diao;",
+ "\u625B>K{a2}ng;",
+ "\u625C>Yu;",
+ "\u625D>Ku;",
+ "\u625E>H{a4}n;",
+ "\u625F>Shen;",
+ "\u6260>Cha;",
+ "\u6261>Y{i3};",
+ "\u6262>G{u3};",
+ "\u6263>Ko{u4};",
+ "\u6264>W{u4};",
+ "\u6265>Tuo;",
+ "\u6266>Qian;",
+ "\u6267>Zh{i2};",
+ "\u6268>R{e4}n;",
+ "\u6269>Ku{o4};",
+ "\u626A>M{e2}n;",
+ "\u626B>Sa{o3};",
+ "\u626C>Y{a2}ng;",
+ "\u626D>Ni{u3};",
+ "\u626E>B{a4}n;",
+ "\u626F>Ch{e3};",
+ "\u6270>Ra{o3};",
+ "\u6271>Xi;",
+ "\u6272>Qi{a2}n;",
+ "\u6273>Ban;",
+ "\u6274>Ji{a2};",
+ "\u6275>Y{u2};",
+ "\u6276>F{u2};",
+ "\u6277>A{o4};",
+ "\u6278>Xi;",
+ "\u6279>Pi;",
+ "\u627A>Zh{i3};",
+ "\u627B>Z{i4};",
+ "\u627C>{E4};",
+ "\u627D>D{u4}n;",
+ "\u627E>Zha{o3};",
+ "\u627F>Ch{e2}ng;",
+ "\u6280>J{i4};",
+ "\u6281>Y{a3}n;",
+ "\u6282>Ku{a2}ng;",
+ "\u6283>Bi{a4}n;",
+ "\u6284>Chao;",
+ "\u6285>Ju;",
+ "\u6286>W{e4}n;",
+ "\u6287>H{u2};",
+ "\u6288>Yu{e4};",
+ "\u6289>Ju{e2};",
+ "\u628A>B{a3};",
+ "\u628B>Q{i4}n;",
+ "\u628C>Zh{e3}n;",
+ "\u628D>Zh{e3}ng;",
+ "\u628E>Y{u3}n;",
+ "\u628F>W{a2}n;",
+ "\u6290>N{u4};",
+ "\u6291>Y{i4};",
+ "\u6292>Shu;",
+ "\u6293>Zhua;",
+ "\u6294>Po{u2};",
+ "\u6295>To{u2};",
+ "\u6296>Do{u3};",
+ "\u6297>K{a4}ng;",
+ "\u6298>Zh{e2};",
+ "\u6299>Po{u2};",
+ "\u629A>F{u3};",
+ "\u629B>Pao;",
+ "\u629C>B{a2};",
+ "\u629D>A{o3};",
+ "\u629E>Z{e2};",
+ "\u629F>Tu{a2}n;",
+ "\u62A0>Kou;",
+ "\u62A1>L{u2}n;",
+ "\u62A2>Qi{a3}ng;",
+ "\u62A4>H{u4};",
+ "\u62A5>Ba{o4};",
+ "\u62A6>B{i3}ng;",
+ "\u62A7>Zh{i3};",
+ "\u62A8>Peng;",
+ "\u62A9>Tan;",
+ "\u62AA>Pu;",
+ "\u62AB>Pi;",
+ "\u62AC>Ta{i2};",
+ "\u62AD>Ya{o3};",
+ "\u62AE>Zh{e3}n;",
+ "\u62AF>Zha;",
+ "\u62B0>Y{a3}ng;",
+ "\u62B1>Ba{o4};",
+ "\u62B2>He;",
+ "\u62B3>N{i3};",
+ "\u62B4>Y{i4};",
+ "\u62B5>D{i3};",
+ "\u62B6>Ch{i4};",
+ "\u62B7>Pi;",
+ "\u62B8>Za;",
+ "\u62B9>M{o3};",
+ "\u62BA>M{o3};",
+ "\u62BB>Sh{e4}n;",
+ "\u62BC>Ya;",
+ "\u62BD>Chou;",
+ "\u62BE>Qu;",
+ "\u62BF>M{i3}n;",
+ "\u62C0>Ch{u4};",
+ "\u62C1>Jia;",
+ "\u62C2>F{u2};",
+ "\u62C3>Zh{a3}n;",
+ "\u62C4>Zh{u3};",
+ "\u62C5>D{a4}n;",
+ "\u62C6>Chai;",
+ "\u62C7>M{u3};",
+ "\u62C8>Ni{a2}n;",
+ "\u62C9>La;",
+ "\u62CA>F{u3};",
+ "\u62CB>Pao;",
+ "\u62CC>B{a4}n;",
+ "\u62CD>Pai;",
+ "\u62CE>Ling;",
+ "\u62CF>N{a2};",
+ "\u62D0>Gua{i3};",
+ "\u62D1>Qi{a2}n;",
+ "\u62D2>J{u4};",
+ "\u62D3>Tu{o4};",
+ "\u62D4>B{a2};",
+ "\u62D5>Tuo;",
+ "\u62D6>Tuo;",
+ "\u62D7>A{o3};",
+ "\u62D8>Ju;",
+ "\u62D9>Zhu{o2};",
+ "\u62DA>P{a4}n;",
+ "\u62DB>Zhao;",
+ "\u62DC>Ba{i4};",
+ "\u62DD>Ba{i4};",
+ "\u62DE>D{i3};",
+ "\u62DF>N{i3};",
+ "\u62E0>J{u4};",
+ "\u62E1>Ku{o4};",
+ "\u62E2>L{o3}ng;",
+ "\u62E3>Ji{a3}n;",
+ "\u62E5>Y{o3}ng;",
+ "\u62E6>L{a2}n;",
+ "\u62E7>N{i2}ng;",
+ "\u62E8>Bo;",
+ "\u62E9>Z{e2};",
+ "\u62EA>Qian;",
+ "\u62EB>H{e2}n;",
+ "\u62EC>Gua;",
+ "\u62ED>Sh{i4};",
+ "\u62EE>Ji{e2};",
+ "\u62EF>Zh{e3}ng;",
+ "\u62F0>N{i3}n;",
+ "\u62F1>G{o3}ng;",
+ "\u62F2>G{o3}ng;",
+ "\u62F3>Qu{a2}n;",
+ "\u62F4>Shuan;",
+ "\u62F5>C{u2}n;",
+ "\u62F6>Z{a3}n;",
+ "\u62F7>Ka{o3};",
+ "\u62F8>Ch{i3};",
+ "\u62F9>Xi{e2};",
+ "\u62FA>C{e4};",
+ "\u62FB>Hui;",
+ "\u62FC>Pin;",
+ "\u62FD>Zhuai;",
+ "\u62FE>Sh{i2};",
+ "\u62FF>N{a2};",
+ "\u6300>B{o4};",
+ "\u6301>Ch{i2};",
+ "\u6302>Gu{a4};",
+ "\u6303>Zh{i4};",
+ "\u6304>Ku{o4};",
+ "\u6305>Du{o3};",
+ "\u6306>Du{o3};",
+ "\u6307>Zh{i3};",
+ "\u6308>Qi{e4};",
+ "\u6309>{A4}n;",
+ "\u630A>N{o4}ng;",
+ "\u630B>Zh{e4}n;",
+ "\u630C>G{e2};",
+ "\u630D>Jia{o4};",
+ "\u630E>Ku;",
+ "\u630F>D{o4}ng;",
+ "\u6310>R{u2};",
+ "\u6311>Tiao;",
+ "\u6312>Li{e4};",
+ "\u6313>Zha;",
+ "\u6314>L{uu3};",
+ "\u6315>Di{e2};",
+ "\u6316>Wa;",
+ "\u6317>Ju{e2};",
+ "\u6319>J{u3};",
+ "\u631A>Zh{i4};",
+ "\u631B>Lu{a2}n;",
+ "\u631C>Y{a4};",
+ "\u631D>Zhua;",
+ "\u631E>T{a4};",
+ "\u631F>Xi{e2};",
+ "\u6320>Na{o2};",
+ "\u6321>D{a3}ng;",
+ "\u6322>Jia{o3};",
+ "\u6323>Zheng;",
+ "\u6324>J{i3};",
+ "\u6325>Hui;",
+ "\u6326>X{u2}n;",
+ "\u6328>Ai;",
+ "\u6329>Tuo;",
+ "\u632A>Nu{o2};",
+ "\u632B>Cu{o4};",
+ "\u632C>B{o2};",
+ "\u632D>G{e3}ng;",
+ "\u632E>T{i3};",
+ "\u632F>Zh{e4}n;",
+ "\u6330>Ch{e2}ng;",
+ "\u6331>Suo;",
+ "\u6332>Suo;",
+ "\u6333>Keng;",
+ "\u6334>Me{i3};",
+ "\u6335>L{o4}ng;",
+ "\u6336>J{u2};",
+ "\u6337>P{e2}ng;",
+ "\u6338>Ji{a3}n;",
+ "\u6339>Y{i4};",
+ "\u633A>T{i3}ng;",
+ "\u633B>Shan;",
+ "\u633C>Nu{o4};",
+ "\u633D>W{a3}n;",
+ "\u633E>Xi{e2};",
+ "\u633F>Cha;",
+ "\u6340>Feng;",
+ "\u6341>Jia{o3};",
+ "\u6342>W{u3};",
+ "\u6343>J{u4}n;",
+ "\u6344>Ji{u4};",
+ "\u6345>T{o3}ng;",
+ "\u6346>K{u3}n;",
+ "\u6347>Hu{o4};",
+ "\u6348>T{u2};",
+ "\u6349>Zhuo;",
+ "\u634A>Po{u2};",
+ "\u634B>L{e4};",
+ "\u634C>Ba;",
+ "\u634D>H{a4}n;",
+ "\u634E>Shao;",
+ "\u634F>Nie;",
+ "\u6350>Juan;",
+ "\u6351>Z{e2};",
+ "\u6352>S{o3}ng;",
+ "\u6353>Y{e2};",
+ "\u6354>Ju{e2};",
+ "\u6355>B{u3};",
+ "\u6356>Hu{a2}n;",
+ "\u6357>B{u4};",
+ "\u6358>Z{u4}n;",
+ "\u6359>Y{i4};",
+ "\u635A>Zhai;",
+ "\u635B>L{uu3};",
+ "\u635C>Sou;",
+ "\u635D>Tuo;",
+ "\u635E>Lao;",
+ "\u635F>S{u3}n;",
+ "\u6360>Bang;",
+ "\u6361>Ji{a3}n;",
+ "\u6362>Hu{a4}n;",
+ "\u6363>Da{o3};",
+ "\u6365>W{a4}n;",
+ "\u6366>Q{i2}n;",
+ "\u6367>P{e3}ng;",
+ "\u6368>Sh{e3};",
+ "\u6369>Li{e4};",
+ "\u636A>M{i2}n;",
+ "\u636B>M{e2}n;",
+ "\u636C>F{u3};",
+ "\u636D>Ba{i3};",
+ "\u636E>J{u4};",
+ "\u636F>Da{o3};",
+ "\u6370>W{o3};",
+ "\u6371>A{i2};",
+ "\u6372>Ju{a3}n;",
+ "\u6373>Yu{e4};",
+ "\u6374>Z{o3}ng;",
+ "\u6375>Ch{e3}n;",
+ "\u6376>Chu{i2};",
+ "\u6377>Ji{e2};",
+ "\u6378>Tu;",
+ "\u6379>B{e4}n;",
+ "\u637A>N{a4};",
+ "\u637B>Ni{a3}n;",
+ "\u637C>Nu{o2};",
+ "\u637D>Z{u2};",
+ "\u637E>W{o4};",
+ "\u637F>Xi;",
+ "\u6380>Xian;",
+ "\u6381>Ch{e2}ng;",
+ "\u6382>Dian;",
+ "\u6383>Sa{o3};",
+ "\u6384>L{u2}n;",
+ "\u6385>Q{i4}ng;",
+ "\u6386>Gang;",
+ "\u6387>Du{o2};",
+ "\u6388>Sho{u4};",
+ "\u6389>Dia{o4};",
+ "\u638A>Po{u2};",
+ "\u638B>D{i3};",
+ "\u638C>Zh{a3}ng;",
+ "\u638D>G{u3}n;",
+ "\u638E>J{i3};",
+ "\u638F>Tao;",
+ "\u6390>Qia;",
+ "\u6391>Q{i2};",
+ "\u6392>Pa{i2};",
+ "\u6393>Sh{u2};",
+ "\u6394>Qian;",
+ "\u6395>L{i4}ng;",
+ "\u6396>Y{i4};",
+ "\u6397>Y{a4};",
+ "\u6398>Ju{e2};",
+ "\u6399>Zheng;",
+ "\u639A>Li{a3}ng;",
+ "\u639B>Gu{a4};",
+ "\u639C>Y{i3};",
+ "\u639D>Hu{o4};",
+ "\u639E>Sh{a4}n;",
+ "\u639F>Zh{e3}ng;",
+ "\u63A0>L{uu}{e4};",
+ "\u63A1>Ca{i3};",
+ "\u63A2>T{a4}n;",
+ "\u63A3>Ch{e4};",
+ "\u63A4>Bing;",
+ "\u63A5>Jie;",
+ "\u63A6>T{i4};",
+ "\u63A7>K{o4}ng;",
+ "\u63A8>Tui;",
+ "\u63A9>Y{a3}n;",
+ "\u63AA>Cu{o4};",
+ "\u63AB>Zou;",
+ "\u63AC>J{u2};",
+ "\u63AD>Ti{a4}n;",
+ "\u63AE>Qi{a2}n;",
+ "\u63AF>K{e4}n;",
+ "\u63B0>Bai;",
+ "\u63B1>Sho{u3};",
+ "\u63B2>Jie;",
+ "\u63B3>L{u3};",
+ "\u63B4>Gu{o2};",
+ "\u63B7>Zh{i2};",
+ "\u63B8>D{a3}n;",
+ "\u63BA>Xian;",
+ "\u63BB>Sao;",
+ "\u63BC>Gu{a4}n;",
+ "\u63BD>P{e4}ng;",
+ "\u63BE>Yu{a4}n;",
+ "\u63BF>Nu{o4};",
+ "\u63C0>Ji{a3}n;",
+ "\u63C1>Zhen;",
+ "\u63C2>Jiu;",
+ "\u63C3>Jian;",
+ "\u63C4>Y{u2};",
+ "\u63C5>Y{a2}n;",
+ "\u63C6>Ku{i2};",
+ "\u63C7>N{a3}n;",
+ "\u63C8>Hong;",
+ "\u63C9>Ro{u2};",
+ "\u63CA>P{i4};",
+ "\u63CB>Wei;",
+ "\u63CC>Sai;",
+ "\u63CD>Zo{u4};",
+ "\u63CE>Xuan;",
+ "\u63CF>Mia{o2};",
+ "\u63D0>T{i2};",
+ "\u63D1>Nie;",
+ "\u63D2>Cha;",
+ "\u63D3>Sh{i4};",
+ "\u63D4>Z{o3}ng;",
+ "\u63D5>Zh{e4}n;",
+ "\u63D6>Yi;",
+ "\u63D7>Sh{u3}n;",
+ "\u63D8>H{e2}ng;",
+ "\u63D9>Bi{a4}n;",
+ "\u63DA>Y{a2}ng;",
+ "\u63DB>Hu{a4}n;",
+ "\u63DC>Y{a3}n;",
+ "\u63DD>Zu{a4}n;",
+ "\u63DE>{a3}n;",
+ "\u63DF>Xu;",
+ "\u63E0>Y{a4};",
+ "\u63E1>W{o4};",
+ "\u63E2>K{e4};",
+ "\u63E3>Chua{i3};",
+ "\u63E4>J{i2};",
+ "\u63E5>T{i4};",
+ "\u63E6>L{a2};",
+ "\u63E7>L{a4};",
+ "\u63E8>Ch{e2}ng;",
+ "\u63E9>Kai;",
+ "\u63EA>Jiu;",
+ "\u63EB>Jiu;",
+ "\u63EC>T{u2};",
+ "\u63ED>Jie;",
+ "\u63EE>Hui;",
+ "\u63EF>Geng;",
+ "\u63F0>Ch{o4}ng;",
+ "\u63F1>Shu{o4};",
+ "\u63F2>Sh{e2};",
+ "\u63F3>Xi{e4};",
+ "\u63F4>Yu{a2}n;",
+ "\u63F5>Qi{a2}n;",
+ "\u63F6>Y{e2};",
+ "\u63F7>Cha;",
+ "\u63F8>Zha;",
+ "\u63F9>Bei;",
+ "\u63FA>Ya{o2};",
+ "\u63FD>L{a3}n;",
+ "\u63FE>W{e4}n;",
+ "\u63FF>Q{i4}n;",
+ "\u6400>Chan;",
+ "\u6401>Ge;",
+ "\u6402>Lo{u3};",
+ "\u6403>Z{o3}ng;",
+ "\u6404>Geng;",
+ "\u6405>Jia{o3};",
+ "\u6406>Go{u4};",
+ "\u6407>Q{i4}n;",
+ "\u6408>Y{o3}ng;",
+ "\u6409>Qu{e4};",
+ "\u640A>Chou;",
+ "\u640B>Ch{i3};",
+ "\u640C>Zh{a3}n;",
+ "\u640D>S{u3}n;",
+ "\u640E>Sun;",
+ "\u640F>B{o2};",
+ "\u6410>Ch{u4};",
+ "\u6411>R{o3}ng;",
+ "\u6412>B{e4}ng;",
+ "\u6413>Cuo;",
+ "\u6414>Sao;",
+ "\u6415>K{e4};",
+ "\u6416>Ya{o2};",
+ "\u6417>Da{o3};",
+ "\u6418>Zhi;",
+ "\u6419>N{u4};",
+ "\u641A>Xi{e2};",
+ "\u641B>Jian;",
+ "\u641C>Sou;",
+ "\u641D>Qi{u3};",
+ "\u641E>Ga{o3};",
+ "\u641F>Xi{a3}n;",
+ "\u6420>Shu{o4};",
+ "\u6421>S{a3}ng;",
+ "\u6422>J{i4}n;",
+ "\u6423>Mi{e4};",
+ "\u6424>{E4};",
+ "\u6425>Chu{i2};",
+ "\u6426>Nu{o4};",
+ "\u6427>Shan;",
+ "\u6428>T{a4};",
+ "\u6429>Ji{e2};",
+ "\u642A>T{a2}ng;",
+ "\u642B>P{a2}n;",
+ "\u642C>Ban;",
+ "\u642D>Da;",
+ "\u642E>L{i4};",
+ "\u642F>Tao;",
+ "\u6430>H{u2};",
+ "\u6431>Zh{i4};",
+ "\u6432>Wa;",
+ "\u6433>Xi{a2};",
+ "\u6434>Qian;",
+ "\u6435>W{e4}n;",
+ "\u6436>Qi{a3}ng;",
+ "\u6437>Ti{a2}n;",
+ "\u6438>Zhen;",
+ "\u6439>{E4};",
+ "\u643A>Xi;",
+ "\u643B>Nu{o4};",
+ "\u643C>Qu{a2}n;",
+ "\u643D>Ch{a2};",
+ "\u643E>Zh{a4};",
+ "\u643F>G{e2};",
+ "\u6440>W{u3};",
+ "\u6441>{E4}n;",
+ "\u6442>Sh{e4};",
+ "\u6443>K{a2}ng;",
+ "\u6444>Sh{e4};",
+ "\u6445>Shu;",
+ "\u6446>Ba{i3};",
+ "\u6447>Ya{o2};",
+ "\u6448>B{i4}n;",
+ "\u6449>Sou;",
+ "\u644A>Tan;",
+ "\u644B>S{a4};",
+ "\u644C>Ch{a3}n;",
+ "\u644D>Suo;",
+ "\u644E>Lia{o2};",
+ "\u644F>Chong;",
+ "\u6450>Chuang;",
+ "\u6451>Gu{o2};",
+ "\u6452>B{i4}ng;",
+ "\u6453>F{e2}ng;",
+ "\u6454>Shuai;",
+ "\u6455>D{i4};",
+ "\u6456>Q{i4};",
+ "\u6457>Sou;",
+ "\u6458>Zhai;",
+ "\u6459>Li{a3}n;",
+ "\u645A>T{a2}ng;",
+ "\u645B>Chi;",
+ "\u645C>Gu{a4}n;",
+ "\u645D>L{u4};",
+ "\u645E>Lu{o2};",
+ "\u645F>Lo{u3};",
+ "\u6460>Z{o3}ng;",
+ "\u6461>Ga{i4};",
+ "\u6462>H{u4};",
+ "\u6463>Zha;",
+ "\u6464>Chu{a3}ng;",
+ "\u6465>T{a4}ng;",
+ "\u6466>Hu{a4};",
+ "\u6467>Cui;",
+ "\u6468>Na{i2};",
+ "\u6469>M{o2};",
+ "\u646A>Jiang;",
+ "\u646B>Gui;",
+ "\u646C>Y{i4}ng;",
+ "\u646D>Zh{i2};",
+ "\u646E>A{o2};",
+ "\u646F>Zh{i4};",
+ "\u6470>Ni{e4};",
+ "\u6471>M{a2}n;",
+ "\u6472>Sh{a4}n;",
+ "\u6473>Kou;",
+ "\u6474>Shu;",
+ "\u6475>Su{o3};",
+ "\u6476>Tu{a2}n;",
+ "\u6477>Jia{o3};",
+ "\u6478>Mo;",
+ "\u6479>M{o2};",
+ "\u647A>Zh{e2};",
+ "\u647B>Xian;",
+ "\u647C>Keng;",
+ "\u647D>Pia{o3};",
+ "\u647E>Ji{a4}ng;",
+ "\u647F>Yin;",
+ "\u6480>Go{u4};",
+ "\u6481>Qian;",
+ "\u6482>L{uu}{e4};",
+ "\u6483>J{i2};",
+ "\u6484>Ying;",
+ "\u6485>Jue;",
+ "\u6486>Pie;",
+ "\u6487>Pi{e3};",
+ "\u6488>Lao;",
+ "\u6489>Dun;",
+ "\u648A>Xi{a4}n;",
+ "\u648B>Ru{a2}n;",
+ "\u648C>Ku{i4};",
+ "\u648D>Z{a3}n;",
+ "\u648E>Y{i4};",
+ "\u648F>X{u2}n;",
+ "\u6490>Cheng;",
+ "\u6491>Cheng;",
+ "\u6492>S{a3};",
+ "\u6493>Na{o2};",
+ "\u6494>H{e4}ng;",
+ "\u6495>Si;",
+ "\u6496>Qi{a3}n;",
+ "\u6497>Hu{a2}ng;",
+ "\u6498>Da;",
+ "\u6499>Z{u3}n;",
+ "\u649A>Ni{a3}n;",
+ "\u649B>L{i3}n;",
+ "\u649C>Zh{e3}ng;",
+ "\u649D>Hui;",
+ "\u649E>Zhu{a4}ng;",
+ "\u649F>Jia{o3};",
+ "\u64A0>J{i3};",
+ "\u64A1>Cao;",
+ "\u64A2>D{a3}n;",
+ "\u64A3>D{a3}n;",
+ "\u64A4>Ch{e4};",
+ "\u64A5>Bo;",
+ "\u64A6>Ch{e3};",
+ "\u64A7>Ju{e2};",
+ "\u64A8>Xiao;",
+ "\u64A9>Lia{o2};",
+ "\u64AA>B{e4}n;",
+ "\u64AB>F{u3};",
+ "\u64AC>Qia{o4};",
+ "\u64AD>B{o4};",
+ "\u64AE>Cuo;",
+ "\u64AF>Zhu{o2};",
+ "\u64B0>Zhu{a4}n;",
+ "\u64B1>Tu{o3};",
+ "\u64B2>Pu;",
+ "\u64B3>Q{i4}n;",
+ "\u64B4>Dun;",
+ "\u64B5>Ni{a3}n;",
+ "\u64B7>Xi{e2};",
+ "\u64B8>L{u3};",
+ "\u64B9>Jia{o3};",
+ "\u64BA>Cuan;",
+ "\u64BB>T{a4};",
+ "\u64BC>H{a4}n;",
+ "\u64BD>Qia{o4};",
+ "\u64BE>Zhua;",
+ "\u64BF>Ji{a3}n;",
+ "\u64C0>G{a3}n;",
+ "\u64C1>Y{o3}ng;",
+ "\u64C2>Le{i2};",
+ "\u64C3>Ku{o3};",
+ "\u64C4>L{u3};",
+ "\u64C5>Sh{a4}n;",
+ "\u64C6>Zhu{o2};",
+ "\u64C7>Z{e2};",
+ "\u64C8>Pu;",
+ "\u64C9>Chu{o4};",
+ "\u64CA>J{i2};",
+ "\u64CB>D{a3}ng;",
+ "\u64CC>Su{o3};",
+ "\u64CD>Cao;",
+ "\u64CE>Q{i2}ng;",
+ "\u64CF>J{i4}ng;",
+ "\u64D0>Hu{a4}n;",
+ "\u64D1>Jie;",
+ "\u64D2>Q{i2}n;",
+ "\u64D3>Kua{i3};",
+ "\u64D4>Dan;",
+ "\u64D5>Xi;",
+ "\u64D6>G{e3};",
+ "\u64D7>P{i4};",
+ "\u64D8>B{o4};",
+ "\u64D9>A{o4};",
+ "\u64DA>J{u4};",
+ "\u64DB>Y{e4};",
+ "\u64DE>So{u3};",
+ "\u64DF>M{i2};",
+ "\u64E0>J{i3};",
+ "\u64E1>Ta{i2};",
+ "\u64E2>Zhu{o2};",
+ "\u64E3>Da{o3};",
+ "\u64E4>X{i3}ng;",
+ "\u64E5>L{a3}n;",
+ "\u64E6>Ca;",
+ "\u64E7>J{u3};",
+ "\u64E8>Y{e2};",
+ "\u64E9>R{u3};",
+ "\u64EA>Y{e4};",
+ "\u64EB>Y{e4};",
+ "\u64EC>N{i3};",
+ "\u64ED>H{u4};",
+ "\u64EE>J{i2};",
+ "\u64EF>B{i4}n;",
+ "\u64F0>N{i2}ng;",
+ "\u64F1>Ge;",
+ "\u64F2>Zh{i2};",
+ "\u64F3>Ji{e2};",
+ "\u64F4>Ku{o4};",
+ "\u64F5>M{o2};",
+ "\u64F6>Ji{a4}n;",
+ "\u64F7>Xi{e2};",
+ "\u64F8>Li{e4};",
+ "\u64F9>Tan;",
+ "\u64FA>Ba{i3};",
+ "\u64FB>So{u3};",
+ "\u64FC>L{u3};",
+ "\u64FD>L{uu}{e4};",
+ "\u64FE>Ra{o3};",
+ "\u64FF>Zh{i2};",
+ "\u6500>Pan;",
+ "\u6501>Y{a3}ng;",
+ "\u6502>Le{i4};",
+ "\u6503>S{a4};",
+ "\u6504>Shu;",
+ "\u6505>Z{a3}n;",
+ "\u6506>Ni{a3}n;",
+ "\u6507>Xi{a3}n;",
+ "\u6508>J{u4}n;",
+ "\u6509>Hu{o4};",
+ "\u650A>L{i4};",
+ "\u650B>L{a4};",
+ "\u650C>H{a4}n;",
+ "\u650D>Y{i2}ng;",
+ "\u650E>L{u2};",
+ "\u650F>L{o3}ng;",
+ "\u6510>Qian;",
+ "\u6511>Qian;",
+ "\u6512>Z{a3}n;",
+ "\u6513>Qian;",
+ "\u6514>L{a2}n;",
+ "\u6515>San;",
+ "\u6516>Ying;",
+ "\u6517>Me{i2};",
+ "\u6518>R{a2}ng;",
+ "\u6519>Chan;",
+ "\u651B>Cuan;",
+ "\u651C>Xi;",
+ "\u651D>Sh{e4};",
+ "\u651E>Lu{o3};",
+ "\u651F>J{u4}n;",
+ "\u6520>M{i2};",
+ "\u6521>L{i2};",
+ "\u6522>Z{a3}n;",
+ "\u6523>L{uu}{a2}n;",
+ "\u6524>Tan;",
+ "\u6525>Zu{a4}n;",
+ "\u6526>L{i4};",
+ "\u6527>Dian;",
+ "\u6528>Wa;",
+ "\u6529>D{a3}ng;",
+ "\u652A>Jia{o3};",
+ "\u652B>Ju{e2};",
+ "\u652C>L{a3}n;",
+ "\u652D>L{i4};",
+ "\u652E>N{a3}ng;",
+ "\u652F>Zhi;",
+ "\u6530>Gu{i4};",
+ "\u6531>Gu{i3};",
+ "\u6532>Qi;",
+ "\u6533>X{i2}n;",
+ "\u6534>Pu;",
+ "\u6535>Sui;",
+ "\u6536>Shou;",
+ "\u6537>Ka{o2};",
+ "\u6538>You;",
+ "\u6539>Ga{i3};",
+ "\u653A>Y{i3};",
+ "\u653B>Gong;",
+ "\u653C>Gan;",
+ "\u653D>Ban;",
+ "\u653E>F{a4}ng;",
+ "\u653F>Zh{e4}ng;",
+ "\u6540>B{o2};",
+ "\u6541>Dian;",
+ "\u6542>Ko{u4};",
+ "\u6543>M{i3}n;",
+ "\u6544>W{u4};",
+ "\u6545>G{u4};",
+ "\u6546>H{e2};",
+ "\u6547>C{e4};",
+ "\u6548>Xia{o4};",
+ "\u6549>M{i3};",
+ "\u654A>Ch{u4};",
+ "\u654B>G{e2};",
+ "\u654C>D{i2};",
+ "\u654D>X{u4};",
+ "\u654E>Jia{o4};",
+ "\u654F>M{i3}n;",
+ "\u6550>Ch{e2}n;",
+ "\u6551>Ji{u4};",
+ "\u6552>Zh{e4}n;",
+ "\u6553>Du{o2};",
+ "\u6554>Y{u3};",
+ "\u6555>Ch{i4};",
+ "\u6556>A{o2};",
+ "\u6557>Ba{i4};",
+ "\u6558>X{u4};",
+ "\u6559>Jia{o4};",
+ "\u655A>Du{o2};",
+ "\u655B>Li{a4}n;",
+ "\u655C>Ni{e4};",
+ "\u655D>B{i4};",
+ "\u655E>Ch{a3}ng;",
+ "\u655F>Di{a3}n;",
+ "\u6560>Du{o2};",
+ "\u6561>Y{i4};",
+ "\u6562>G{a3}n;",
+ "\u6563>S{a4}n;",
+ "\u6564>K{e3};",
+ "\u6565>Y{a4}n;",
+ "\u6566>Dun;",
+ "\u6567>Q{i3};",
+ "\u6568>Do{u3};",
+ "\u6569>Xia{o4};",
+ "\u656A>Du{o2};",
+ "\u656B>Jia{o4};",
+ "\u656C>J{i4}ng;",
+ "\u656D>Y{a2}ng;",
+ "\u656E>Xi{a2};",
+ "\u656F>M{i2}n;",
+ "\u6570>Sh{u4};",
+ "\u6571>A{i2};",
+ "\u6572>Qiao;",
+ "\u6573>A{i2};",
+ "\u6574>Zh{e3}ng;",
+ "\u6575>D{i2};",
+ "\u6576>Zh{e4}n;",
+ "\u6577>Fu;",
+ "\u6578>Sh{u4};",
+ "\u6579>Lia{o2};",
+ "\u657A>Qu;",
+ "\u657B>Xi{o4}ng;",
+ "\u657C>X{i3};",
+ "\u657D>Jia{o3};",
+ "\u657F>Jia{o3};",
+ "\u6580>Zhu{o2};",
+ "\u6581>Y{i4};",
+ "\u6582>Li{a4}n;",
+ "\u6583>B{i4};",
+ "\u6584>L{i4};",
+ "\u6585>Xia{o4};",
+ "\u6586>Xia{o4};",
+ "\u6587>W{e2}n;",
+ "\u6588>Xu{e2};",
+ "\u6589>Q{i2};",
+ "\u658A>Q{i2};",
+ "\u658B>Zhai;",
+ "\u658C>Bin;",
+ "\u658D>Ju{e2};",
+ "\u658E>Zhai;",
+ "\u6590>Fe{i3};",
+ "\u6591>Ban;",
+ "\u6592>Ban;",
+ "\u6593>L{a2}n;",
+ "\u6594>Y{u3};",
+ "\u6595>L{a2}n;",
+ "\u6596>We{i3};",
+ "\u6597>Do{u3};",
+ "\u6598>Sheng;",
+ "\u6599>Lia{o4};",
+ "\u659A>Ji{a3};",
+ "\u659B>H{u2};",
+ "\u659C>Xi{e2};",
+ "\u659D>Ji{a3};",
+ "\u659E>Y{u3};",
+ "\u659F>Zhen;",
+ "\u65A0>Jia{o4};",
+ "\u65A1>W{o4};",
+ "\u65A2>To{u3};",
+ "\u65A3>Ch{u4};",
+ "\u65A4>Jin;",
+ "\u65A5>Ch{i4};",
+ "\u65A6>Y{i2}n;",
+ "\u65A7>F{u3};",
+ "\u65A8>Qiang;",
+ "\u65A9>Zh{a3}n;",
+ "\u65AA>Q{u2};",
+ "\u65AB>Zhu{o2};",
+ "\u65AC>Zh{a3}n;",
+ "\u65AD>Du{a4}n;",
+ "\u65AE>Zhu{o2};",
+ "\u65AF>Si;",
+ "\u65B0>Xin;",
+ "\u65B1>Zhu{o2};",
+ "\u65B2>Zhu{o2};",
+ "\u65B3>Q{i2}n;",
+ "\u65B4>L{i2}n;",
+ "\u65B5>Zhu{o2};",
+ "\u65B6>Ch{u4};",
+ "\u65B7>Du{a4}n;",
+ "\u65B8>Zh{u3};",
+ "\u65B9>Fang;",
+ "\u65BA>Xi{e4};",
+ "\u65BB>H{a2}ng;",
+ "\u65BC>Y{u2};",
+ "\u65BD>Shi;",
+ "\u65BE>Pe{i4};",
+ "\u65BF>Yo{u2};",
+ "\u65C1>P{a2}ng;",
+ "\u65C2>Q{i2};",
+ "\u65C3>Zhan;",
+ "\u65C4>Ma{o2};",
+ "\u65C5>L{uu3};",
+ "\u65C6>Pe{i4};",
+ "\u65C7>Pi;",
+ "\u65C8>Li{u2};",
+ "\u65C9>Fu;",
+ "\u65CA>F{a3}ng;",
+ "\u65CB>Xu{a2}n;",
+ "\u65CC>Jing;",
+ "\u65CD>Jing;",
+ "\u65CE>N{i3};",
+ "\u65CF>Z{u2};",
+ "\u65D0>Zha{o4};",
+ "\u65D1>Y{i3};",
+ "\u65D2>Li{u2};",
+ "\u65D3>Shao;",
+ "\u65D4>Ji{a4}n;",
+ "\u65D6>Y{i3};",
+ "\u65D7>Q{i2};",
+ "\u65D8>Zh{i4};",
+ "\u65D9>Fan;",
+ "\u65DA>Piao;",
+ "\u65DB>Fan;",
+ "\u65DC>Zhan;",
+ "\u65DD>Gua{i4};",
+ "\u65DE>Su{i4};",
+ "\u65DF>Y{u2};",
+ "\u65E0>W{u2};",
+ "\u65E1>J{i4};",
+ "\u65E2>J{i4};",
+ "\u65E3>J{i4};",
+ "\u65E4>Hu{o4};",
+ "\u65E5>R{i4};",
+ "\u65E6>D{a4}n;",
+ "\u65E7>Ji{u4};",
+ "\u65E8>Zh{i3};",
+ "\u65E9>Za{o3};",
+ "\u65EA>Xi{e2};",
+ "\u65EB>Tiao;",
+ "\u65EC>X{u2}n;",
+ "\u65ED>X{u4};",
+ "\u65EE>X{u4};",
+ "\u65EF>X{u4};",
+ "\u65F0>G{a4}n;",
+ "\u65F1>H{a4}n;",
+ "\u65F2>Ta{i2};",
+ "\u65F3>D{i4};",
+ "\u65F4>Xu;",
+ "\u65F5>Ch{a3}n;",
+ "\u65F6>Sh{i2};",
+ "\u65F7>Ku{a4}ng;",
+ "\u65F8>Y{a2}ng;",
+ "\u65F9>Sh{i2};",
+ "\u65FA>W{a4}ng;",
+ "\u65FB>M{i2}n;",
+ "\u65FC>M{i2}n;",
+ "\u65FD>Tun;",
+ "\u65FE>Chun;",
+ "\u65FF>W{u3};",
+ "\u6600>Y{u2}n;",
+ "\u6601>Be{i4};",
+ "\u6602>{A2}ng;",
+ "\u6603>Z{e4};",
+ "\u6604>B{a3}n;",
+ "\u6605>Ji{e2};",
+ "\u6606>Kun;",
+ "\u6607>Sheng;",
+ "\u6608>H{u4};",
+ "\u6609>F{a3}ng;",
+ "\u660A>Ha{o4};",
+ "\u660B>Gu{i4};",
+ "\u660C>Chang;",
+ "\u660D>Xuan;",
+ "\u660E>M{i2}ng;",
+ "\u660F>Hun;",
+ "\u6610>Fen;",
+ "\u6611>Q{i3}n;",
+ "\u6612>Hu;",
+ "\u6613>Y{i4};",
+ "\u6614>X{i2};",
+ "\u6615>Xin;",
+ "\u6616>Y{a2}n;",
+ "\u6617>Z{e4};",
+ "\u6618>F{a3}ng;",
+ "\u6619>T{a2}n;",
+ "\u661A>Sh{e4}n;",
+ "\u661B>J{u4};",
+ "\u661C>Y{a2}ng;",
+ "\u661D>Z{a3}n;",
+ "\u661E>B{i3}ng;",
+ "\u661F>Xing;",
+ "\u6620>Y{i4}ng;",
+ "\u6621>Xu{a4}n;",
+ "\u6622>Pe{i3};",
+ "\u6623>Zh{e3}n;",
+ "\u6624>Ling;",
+ "\u6625>Chun;",
+ "\u6626>Ha{o4};",
+ "\u6627>Me{i4};",
+ "\u6628>Zu{o2};",
+ "\u6629>M{o4};",
+ "\u662A>Bi{a4}n;",
+ "\u662B>X{u3};",
+ "\u662C>Hun;",
+ "\u662D>Zhao;",
+ "\u662E>Z{o4}ng;",
+ "\u662F>Sh{i4};",
+ "\u6630>Sh{i4};",
+ "\u6631>Y{u4};",
+ "\u6632>Fe{i4};",
+ "\u6633>Di{e2};",
+ "\u6634>Ma{o3};",
+ "\u6635>N{i4};",
+ "\u6636>Ch{a3}ng;",
+ "\u6637>Wen;",
+ "\u6638>Dong;",
+ "\u6639>A{i3};",
+ "\u663A>B{i3}ng;",
+ "\u663B>{A2}ng;",
+ "\u663C>Zho{u4};",
+ "\u663D>L{o2}ng;",
+ "\u663E>Xi{a3}n;",
+ "\u663F>Ku{a4}ng;",
+ "\u6640>Tia{o3};",
+ "\u6641>Cha{o2};",
+ "\u6642>Sh{i2};",
+ "\u6643>Hu{a3}ng;",
+ "\u6644>Hu{a3}ng;",
+ "\u6645>Xuan;",
+ "\u6646>Ku{i2};",
+ "\u6647>Xu;",
+ "\u6648>Jia{o3};",
+ "\u6649>J{i4}n;",
+ "\u664A>Zh{i3};",
+ "\u664B>J{i4}n;",
+ "\u664C>Sh{a3}ng;",
+ "\u664D>T{o2}ng;",
+ "\u664E>H{o3}ng;",
+ "\u664F>Y{a4}n;",
+ "\u6650>Gai;",
+ "\u6651>Xi{a3}ng;",
+ "\u6652>Sha{i4};",
+ "\u6653>Xia{o3};",
+ "\u6654>Ye;",
+ "\u6655>Yun;",
+ "\u6656>Hui;",
+ "\u6657>H{a2}n;",
+ "\u6658>H{a4}n;",
+ "\u6659>J{u4}n;",
+ "\u665A>W{a3}n;",
+ "\u665B>Xi{a4}n;",
+ "\u665C>Kun;",
+ "\u665D>Zho{u4};",
+ "\u665E>Xi;",
+ "\u665F>Ch{e2}ng;",
+ "\u6660>Sh{e2}ng;",
+ "\u6661>Bu;",
+ "\u6662>Zhe;",
+ "\u6663>Zhe;",
+ "\u6664>W{u4};",
+ "\u6665>H{a4}n;",
+ "\u6666>Hu{i4};",
+ "\u6667>Ha{o4};",
+ "\u6668>Ch{e2}n;",
+ "\u6669>W{a3}n;",
+ "\u666A>Ti{a3}n;",
+ "\u666B>Zhu{o2};",
+ "\u666C>Zu{i4};",
+ "\u666D>Zho{u3};",
+ "\u666E>P{u3};",
+ "\u666F>J{i3}ng;",
+ "\u6670>Xi;",
+ "\u6671>Sh{a3}n;",
+ "\u6672>Y{i3};",
+ "\u6673>X{i4};",
+ "\u6674>Q{i2}ng;",
+ "\u6675>Q{i3};",
+ "\u6676>Jing;",
+ "\u6677>Gu{i3};",
+ "\u6678>Zh{e3}n;",
+ "\u6679>Y{i4};",
+ "\u667A>Zh{i4};",
+ "\u667B>{a3}n;",
+ "\u667C>W{a3}n;",
+ "\u667D>L{i2}n;",
+ "\u667E>Li{a4}ng;",
+ "\u667F>Chang;",
+ "\u6680>W{a3}ng;",
+ "\u6681>Xia{o3};",
+ "\u6682>Z{a4}n;",
+ "\u6684>Xuan;",
+ "\u6685>Xu{a3}n;",
+ "\u6686>Y{i2};",
+ "\u6687>Xi{a2};",
+ "\u6688>Yun;",
+ "\u6689>Hui;",
+ "\u668A>F{u3};",
+ "\u668B>M{i3}n;",
+ "\u668C>Ku{i2};",
+ "\u668D>H{e4};",
+ "\u668E>Y{i4}ng;",
+ "\u668F>D{u3};",
+ "\u6690>We{i3};",
+ "\u6691>Sh{u3};",
+ "\u6692>Q{i2}ng;",
+ "\u6693>Ma{o4};",
+ "\u6694>N{a2}n;",
+ "\u6695>Ji{a3}n;",
+ "\u6696>Nu{a3}n;",
+ "\u6697>{A4}n;",
+ "\u6698>Y{a2}ng;",
+ "\u6699>Chun;",
+ "\u669A>Ya{o2};",
+ "\u669B>Su{o3};",
+ "\u669C>J{i4}n;",
+ "\u669D>M{i2}ng;",
+ "\u669E>Jia{o3};",
+ "\u669F>Ka{i3};",
+ "\u66A0>Ga{o3};",
+ "\u66A1>W{e3}ng;",
+ "\u66A2>Ch{a4}ng;",
+ "\u66A3>Q{i4};",
+ "\u66A4>Ha{o4};",
+ "\u66A5>Y{a4}n;",
+ "\u66A6>L{i4};",
+ "\u66A7>A{i4};",
+ "\u66A8>J{i4};",
+ "\u66A9>Gu{i4};",
+ "\u66AA>M{e3}n;",
+ "\u66AB>Z{a4}n;",
+ "\u66AC>Xi{e4};",
+ "\u66AD>Ha{o4};",
+ "\u66AE>M{u4};",
+ "\u66AF>M{o4};",
+ "\u66B0>Cong;",
+ "\u66B1>N{i4};",
+ "\u66B2>Zhang;",
+ "\u66B3>Hu{i4};",
+ "\u66B4>Ba{o4};",
+ "\u66B5>H{a4}n;",
+ "\u66B6>Xu{a2}n;",
+ "\u66B7>Chu{a2}n;",
+ "\u66B8>Lia{o2};",
+ "\u66B9>Xian;",
+ "\u66BA>D{a4}n;",
+ "\u66BB>J{i3}ng;",
+ "\u66BC>Pie;",
+ "\u66BD>L{i2}n;",
+ "\u66BE>Tun;",
+ "\u66BF>X{i3};",
+ "\u66C0>Y{i4};",
+ "\u66C1>J{i4};",
+ "\u66C2>Hu{a4}ng;",
+ "\u66C3>Ta{i4};",
+ "\u66C4>Y{e4};",
+ "\u66C5>Y{e4};",
+ "\u66C6>L{i4};",
+ "\u66C7>T{a2}n;",
+ "\u66C8>T{o2}ng;",
+ "\u66C9>Xia{o3};",
+ "\u66CA>Fe{i4};",
+ "\u66CB>Q{i3}n;",
+ "\u66CC>Zha{o4};",
+ "\u66CD>Ha{o4};",
+ "\u66CE>Y{i4};",
+ "\u66CF>Xi{a4}ng;",
+ "\u66D0>Xing;",
+ "\u66D1>Sen;",
+ "\u66D2>Jia{o3};",
+ "\u66D3>Ba{o4};",
+ "\u66D4>J{i4}ng;",
+ "\u66D5>Yi{a4}n;",
+ "\u66D6>A{i4};",
+ "\u66D7>Y{e4};",
+ "\u66D8>R{u2};",
+ "\u66D9>Sh{u4};",
+ "\u66DA>M{e2}ng;",
+ "\u66DB>Xun;",
+ "\u66DC>Ya{o4};",
+ "\u66DD>P{u4};",
+ "\u66DE>L{i4};",
+ "\u66DF>Ch{e2}n;",
+ "\u66E0>Ku{a4}ng;",
+ "\u66E1>Di{e2};",
+ "\u66E3>Y{a4}n;",
+ "\u66E4>Hu{o4};",
+ "\u66E5>L{u2};",
+ "\u66E6>Xi;",
+ "\u66E7>R{o2}ng;",
+ "\u66E8>L{o2}ng;",
+ "\u66E9>N{a3}ng;",
+ "\u66EA>Lu{o3};",
+ "\u66EB>Lu{a2}n;",
+ "\u66EC>Sha{i4};",
+ "\u66ED>T{a3}ng;",
+ "\u66EE>Y{a3}n;",
+ "\u66EF>Ch{u2};",
+ "\u66F0>Yue;",
+ "\u66F1>Yue;",
+ "\u66F2>Q{u3};",
+ "\u66F3>Y{i4};",
+ "\u66F4>G{e4}ng;",
+ "\u66F5>Y{e4};",
+ "\u66F6>Hu;",
+ "\u66F7>H{e2};",
+ "\u66F8>Shu;",
+ "\u66F9>Ca{o2};",
+ "\u66FA>Ca{o2};",
+ "\u66FC>M{a4}n;",
+ "\u66FD>Ceng;",
+ "\u66FE>C{e2}ng;",
+ "\u66FF>T{i4};",
+ "\u6700>Zu{i4};",
+ "\u6701>C{a3}n;",
+ "\u6702>X{u4};",
+ "\u6703>Hu{i4};",
+ "\u6704>Y{i4}n;",
+ "\u6705>Qi{e4};",
+ "\u6706>Fen;",
+ "\u6707>P{i2};",
+ "\u6708>Yu{e4};",
+ "\u6709>Yo{u3};",
+ "\u670A>Ru{a3}n;",
+ "\u670B>P{e2}ng;",
+ "\u670C>Ban;",
+ "\u670D>F{u2};",
+ "\u670E>L{i2}ng;",
+ "\u670F>Fe{i3};",
+ "\u6710>Q{u2};",
+ "\u6712>N{uu4};",
+ "\u6713>Tia{o4};",
+ "\u6714>Shu{o4};",
+ "\u6715>Zh{e4}n;",
+ "\u6716>L{a3}ng;",
+ "\u6717>L{a3}ng;",
+ "\u6718>Juan;",
+ "\u6719>M{i2}ng;",
+ "\u671A>Huang;",
+ "\u671B>W{a4}ng;",
+ "\u671C>Tun;",
+ "\u671D>Zhao;",
+ "\u671E>Ji;",
+ "\u671F>Q{i2};",
+ "\u6720>Ying;",
+ "\u6721>Zong;",
+ "\u6722>W{a4}ng;",
+ "\u6723>T{o2}ng;",
+ "\u6724>L{a3}ng;",
+ "\u6726>M{e2}ng;",
+ "\u6727>L{o2}ng;",
+ "\u6728>M{u4};",
+ "\u6729>D{e3}ng;",
+ "\u672A>We{i4};",
+ "\u672B>M{o4};",
+ "\u672C>B{e3}n;",
+ "\u672D>Zh{a2};",
+ "\u672E>Zh{u2};",
+ "\u672F>Zh{u2};",
+ "\u6731>Zhu;",
+ "\u6732>R{e2}n;",
+ "\u6733>Ba;",
+ "\u6734>P{o4};",
+ "\u6735>Du{o3};",
+ "\u6736>Du{o3};",
+ "\u6737>Dao;",
+ "\u6738>L{i4};",
+ "\u6739>Qi{u2};",
+ "\u673A>Ji;",
+ "\u673B>Jiu;",
+ "\u673C>B{i3};",
+ "\u673D>Xi{u3};",
+ "\u673E>T{i2}ng;",
+ "\u673F>C{i4};",
+ "\u6740>Sha;",
+ "\u6742>Z{a2};",
+ "\u6743>Qu{a2}n;",
+ "\u6744>Qian;",
+ "\u6745>Y{u2};",
+ "\u6746>Gan;",
+ "\u6747>Wu;",
+ "\u6748>Cha;",
+ "\u6749>Shan;",
+ "\u674A>X{u2}n;",
+ "\u674B>Fan;",
+ "\u674C>W{u4};",
+ "\u674D>Z{i3};",
+ "\u674E>L{i3};",
+ "\u674F>X{i4}ng;",
+ "\u6750>Ca{i2};",
+ "\u6751>Cun;",
+ "\u6752>R{e4}n;",
+ "\u6753>Sha{o2};",
+ "\u6754>Tuo;",
+ "\u6755>D{i4};",
+ "\u6756>Zh{a4}ng;",
+ "\u6757>M{a2}ng;",
+ "\u6758>Ch{i4};",
+ "\u6759>Y{i4};",
+ "\u675A>G{u3};",
+ "\u675B>Gong;",
+ "\u675C>D{u4};",
+ "\u675D>Y{i2};",
+ "\u675E>Q{i3};",
+ "\u675F>Sh{u4};",
+ "\u6760>Gang;",
+ "\u6761>Tia{o2};",
+ "\u6765>La{i2};",
+ "\u6767>M{a2}ng;",
+ "\u6768>Y{a2}ng;",
+ "\u6769>M{a4};",
+ "\u676A>Mia{o3};",
+ "\u676B>S{i4};",
+ "\u676C>Yu{a2}n;",
+ "\u676D>H{a2}ng;",
+ "\u676E>Fe{i4};",
+ "\u676F>Bei;",
+ "\u6770>Ji{e2};",
+ "\u6771>Dong;",
+ "\u6772>Ga{o3};",
+ "\u6773>Ya{o3};",
+ "\u6774>Xian;",
+ "\u6775>Ch{u3};",
+ "\u6776>Qun;",
+ "\u6777>P{a2};",
+ "\u6778>Shu;",
+ "\u6779>Hu{a4};",
+ "\u677A>Xin;",
+ "\u677B>Cho{u3};",
+ "\u677C>Zh{u4};",
+ "\u677D>Cho{u3};",
+ "\u677E>Song;",
+ "\u677F>B{a3}n;",
+ "\u6780>Song;",
+ "\u6781>J{i2};",
+ "\u6782>Yu{e4};",
+ "\u6783>J{i4}n;",
+ "\u6784>Gou;",
+ "\u6785>Ji;",
+ "\u6786>Ma{o2};",
+ "\u6787>P{i2};",
+ "\u6788>B{i4};",
+ "\u6789>W{a3}ng;",
+ "\u678A>{A4}ng;",
+ "\u678B>Fang;",
+ "\u678C>F{e2}n;",
+ "\u678D>Y{i4};",
+ "\u678E>F{u2};",
+ "\u678F>N{a2}n;",
+ "\u6790>Xi;",
+ "\u6791>H{u4};",
+ "\u6792>Y{a2};",
+ "\u6793>Do{u3};",
+ "\u6794>X{u2}n;",
+ "\u6795>Zh{e3}n;",
+ "\u6796>Yao;",
+ "\u6797>L{i2}n;",
+ "\u6798>Ru{i4};",
+ "\u6799>{E2};",
+ "\u679A>Me{i2};",
+ "\u679B>Zha{o4};",
+ "\u679C>Gu{o3};",
+ "\u679D>Zhi;",
+ "\u679E>Cong;",
+ "\u679F>Y{u4}n;",
+ "\u67A1>Do{u3};",
+ "\u67A2>Shu;",
+ "\u67A3>Za{o3};",
+ "\u67A5>L{i4};",
+ "\u67A7>Ji{a4}n;",
+ "\u67A8>Ch{e2}ng;",
+ "\u67AA>Qiang;",
+ "\u67AB>Feng;",
+ "\u67AC>N{a2}n;",
+ "\u67AD>Xiao;",
+ "\u67AE>Xian;",
+ "\u67AF>Ku;",
+ "\u67B0>P{i2}ng;",
+ "\u67B1>Y{i2};",
+ "\u67B2>X{i3};",
+ "\u67B3>Zhi;",
+ "\u67B4>Gua{i3};",
+ "\u67B5>Xiao;",
+ "\u67B6>Ji{a4};",
+ "\u67B7>Jia;",
+ "\u67B8>Go{u3};",
+ "\u67B9>Fu;",
+ "\u67BA>M{o4};",
+ "\u67BB>Y{i4};",
+ "\u67BC>Y{e4};",
+ "\u67BD>Y{e4};",
+ "\u67BE>Sh{i4};",
+ "\u67BF>Ni{e4};",
+ "\u67C0>B{i3};",
+ "\u67C1>Du{o4};",
+ "\u67C2>Y{i2};",
+ "\u67C3>L{i2}ng;",
+ "\u67C4>B{i3}ng;",
+ "\u67C5>N{i3};",
+ "\u67C6>La;",
+ "\u67C7>H{e2};",
+ "\u67C8>P{a2}n;",
+ "\u67C9>F{a2}n;",
+ "\u67CA>Zhong;",
+ "\u67CB>Da{i4};",
+ "\u67CC>C{i2};",
+ "\u67CD>Yang;",
+ "\u67CE>Fu;",
+ "\u67CF>B{o2};",
+ "\u67D0>Mo{u3};",
+ "\u67D1>Gan;",
+ "\u67D2>Qi;",
+ "\u67D3>R{a3}n;",
+ "\u67D4>Ro{u2};",
+ "\u67D5>Ma{o4};",
+ "\u67D6>Zhao;",
+ "\u67D7>Song;",
+ "\u67D8>Zh{e4};",
+ "\u67D9>Xi{a2};",
+ "\u67DA>Yo{u4};",
+ "\u67DB>Shen;",
+ "\u67DC>J{u3};",
+ "\u67DD>Tu{o4};",
+ "\u67DE>Zu{o4};",
+ "\u67DF>N{a2}n;",
+ "\u67E0>N{i2}ng;",
+ "\u67E1>Y{o3}ng;",
+ "\u67E2>D{i3};",
+ "\u67E3>Zh{i2};",
+ "\u67E4>Zha;",
+ "\u67E5>Ch{a2};",
+ "\u67E6>D{a4}n;",
+ "\u67E7>Gu;",
+ "\u67E8>Pu;",
+ "\u67E9>Ji{u4};",
+ "\u67EA>Ao;",
+ "\u67EB>F{u2};",
+ "\u67EC>Ji{a3}n;",
+ "\u67ED>Bo;",
+ "\u67EE>Du{o4};",
+ "\u67EF>Ke;",
+ "\u67F0>Na{i4};",
+ "\u67F1>Zh{u4};",
+ "\u67F2>B{i4};",
+ "\u67F3>Li{u3};",
+ "\u67F4>Cha{i2};",
+ "\u67F5>Zh{a4};",
+ "\u67F6>S{i4};",
+ "\u67F7>Zh{u4};",
+ "\u67F8>Pei;",
+ "\u67F9>Sh{i4};",
+ "\u67FA>Gua{i3};",
+ "\u67FB>Ch{a2};",
+ "\u67FC>Ya{o3};",
+ "\u67FD>Ju{e2};",
+ "\u67FE>Ji{u4};",
+ "\u67FF>Sh{i4};",
+ "\u6800>Zhi;",
+ "\u6801>Li{u3};",
+ "\u6802>Me{i2};",
+ "\u6804>R{o2}ng;",
+ "\u6805>Zh{a4};",
+ "\u6807>Biao;",
+ "\u6808>Zh{a4}n;",
+ "\u6809>Ji{e2};",
+ "\u680A>L{o2}ng;",
+ "\u680B>D{o4}ng;",
+ "\u680C>L{u2};",
+ "\u680E>L{i4};",
+ "\u680F>L{a2}n;",
+ "\u6810>Y{o3}ng;",
+ "\u6811>Sh{u4};",
+ "\u6812>X{u2}n;",
+ "\u6813>Shuan;",
+ "\u6814>Q{i4};",
+ "\u6815>Zhen;",
+ "\u6816>Qi;",
+ "\u6817>L{i4};",
+ "\u6818>Y{i3};",
+ "\u6819>Xi{a2}ng;",
+ "\u681A>Zh{e4}n;",
+ "\u681B>L{i4};",
+ "\u681C>S{u4};",
+ "\u681D>Gua;",
+ "\u681E>Kan;",
+ "\u681F>Bing;",
+ "\u6820>R{e3}n;",
+ "\u6821>Xia{o4};",
+ "\u6822>B{o2};",
+ "\u6823>R{e3}n;",
+ "\u6824>B{i4}ng;",
+ "\u6825>Zi;",
+ "\u6826>Cho{u2};",
+ "\u6827>Y{i4};",
+ "\u6828>Ji{e2};",
+ "\u6829>X{u3};",
+ "\u682A>Zhu;",
+ "\u682B>Ji{a4}n;",
+ "\u682C>Zu{i4};",
+ "\u682D>{E2}r;",
+ "\u682E>{e3}r;",
+ "\u682F>Yo{u3};",
+ "\u6830>F{a2};",
+ "\u6831>G{o3}ng;",
+ "\u6832>Ka{o3};",
+ "\u6833>La{o3};",
+ "\u6834>Zhan;",
+ "\u6835>L{i4};",
+ "\u6836>Yin;",
+ "\u6837>Y{a2}ng;",
+ "\u6838>H{e2};",
+ "\u6839>Gen;",
+ "\u683A>Zh{i3};",
+ "\u683B>Ch{i4};",
+ "\u683C>G{e2};",
+ "\u683D>Zai;",
+ "\u683E>Lu{a2}n;",
+ "\u683F>F{u2};",
+ "\u6840>Ji{e2};",
+ "\u6841>H{a2}ng;",
+ "\u6842>Gu{i4};",
+ "\u6843>Ta{o2};",
+ "\u6844>Gu{a4}ng;",
+ "\u6845>We{i2};",
+ "\u6846>Ku{a4}ng;",
+ "\u6847>R{u2};",
+ "\u6848>{A4}n;",
+ "\u6849>{A4}n;",
+ "\u684A>Ju{a4}n;",
+ "\u684B>Y{i2};",
+ "\u684C>Zhuo;",
+ "\u684D>Ku;",
+ "\u684E>Zh{i2};",
+ "\u684F>Qi{o2}ng;",
+ "\u6850>T{o2}ng;",
+ "\u6851>Sang;",
+ "\u6852>Sang;",
+ "\u6853>Hu{a2}n;",
+ "\u6854>Ji{e2};",
+ "\u6855>Ji{u4};",
+ "\u6856>Xu{e4};",
+ "\u6857>Du{o4};",
+ "\u6858>Zhu{i4};",
+ "\u6859>Y{u2};",
+ "\u685A>Z{a3}n;",
+ "\u685C>Ying;",
+ "\u685F>Zh{a4}n;",
+ "\u6860>Y{a2};",
+ "\u6861>Na{o2};",
+ "\u6862>Zhen;",
+ "\u6863>D{a3}ng;",
+ "\u6864>Qi;",
+ "\u6865>Qia{o2};",
+ "\u6866>Hu{a4};",
+ "\u6867>Kua{i4};",
+ "\u6868>Ji{a3}ng;",
+ "\u6869>Zhuang;",
+ "\u686A>X{u2}n;",
+ "\u686B>Suo;",
+ "\u686C>Sha;",
+ "\u686D>Zhen;",
+ "\u686E>Bei;",
+ "\u686F>Ting;",
+ "\u6870>Gua;",
+ "\u6871>J{i4}ng;",
+ "\u6872>B{o2};",
+ "\u6873>B{e4}n;",
+ "\u6874>F{u2};",
+ "\u6875>Ru{i3};",
+ "\u6876>T{o3}ng;",
+ "\u6877>Ju{e2};",
+ "\u6878>Xi;",
+ "\u6879>L{a2}ng;",
+ "\u687A>Li{u3};",
+ "\u687B>Feng;",
+ "\u687C>Qi;",
+ "\u687D>W{e3}n;",
+ "\u687E>Jun;",
+ "\u687F>G{a3}n;",
+ "\u6880>C{u4};",
+ "\u6881>Li{a2}ng;",
+ "\u6882>Qi{u2};",
+ "\u6883>T{i3}ng;",
+ "\u6884>Yo{u3};",
+ "\u6885>Me{i2};",
+ "\u6886>Bang;",
+ "\u6887>L{o4}ng;",
+ "\u6888>Peng;",
+ "\u6889>Zhuang;",
+ "\u688A>D{i4};",
+ "\u688B>Xuan;",
+ "\u688C>T{u2};",
+ "\u688D>Za{o4};",
+ "\u688E>Ao;",
+ "\u688F>G{u4};",
+ "\u6890>B{i4};",
+ "\u6891>D{i2};",
+ "\u6892>H{a2}n;",
+ "\u6893>Z{i3};",
+ "\u6894>Zhi;",
+ "\u6895>R{e4}n;",
+ "\u6896>Be{i4};",
+ "\u6897>G{e3}ng;",
+ "\u6898>Ji{a4}n;",
+ "\u6899>Hu{a4}n;",
+ "\u689A>W{a3}n;",
+ "\u689B>Nu{o2};",
+ "\u689C>Ji{a2};",
+ "\u689D>Tia{o2};",
+ "\u689E>J{i4};",
+ "\u689F>Xiao;",
+ "\u68A0>L{uu3};",
+ "\u68A1>Hu{a2}n;",
+ "\u68A2>Shao;",
+ "\u68A3>C{e2}n;",
+ "\u68A4>F{e2}n;",
+ "\u68A5>Song;",
+ "\u68A6>M{e4}ng;",
+ "\u68A7>W{u2};",
+ "\u68A8>L{i2};",
+ "\u68A9>L{i2};",
+ "\u68AA>Do{u4};",
+ "\u68AB>Cen;",
+ "\u68AC>Y{i3}ng;",
+ "\u68AD>Suo;",
+ "\u68AE>J{u2};",
+ "\u68AF>Ti;",
+ "\u68B0>Ji{e4};",
+ "\u68B1>K{u3}n;",
+ "\u68B2>Zhu{o2};",
+ "\u68B3>Shu;",
+ "\u68B4>Chan;",
+ "\u68B5>F{a4}n;",
+ "\u68B6>We{i3};",
+ "\u68B7>J{i4}ng;",
+ "\u68B8>L{i2};",
+ "\u68B9>Bing;",
+ "\u68BC>Ta{o2};",
+ "\u68BD>Zh{i4};",
+ "\u68BE>La{i2};",
+ "\u68BF>Li{a2}n;",
+ "\u68C0>Ji{a3}n;",
+ "\u68C1>Zhu{o2};",
+ "\u68C2>L{i2}ng;",
+ "\u68C3>L{i2};",
+ "\u68C4>Q{i4};",
+ "\u68C5>B{i4}ng;",
+ "\u68C6>Zhun;",
+ "\u68C7>Cong;",
+ "\u68C8>Qi{a4}n;",
+ "\u68C9>Mi{a2}n;",
+ "\u68CA>Q{i2};",
+ "\u68CB>Q{i2};",
+ "\u68CC>Ca{i3};",
+ "\u68CD>G{u4}n;",
+ "\u68CE>Ch{a2}n;",
+ "\u68CF>T{e4};",
+ "\u68D0>Fe{i3};",
+ "\u68D1>Pa{i2};",
+ "\u68D2>B{a4}ng;",
+ "\u68D3>Po{u3};",
+ "\u68D4>Hun;",
+ "\u68D5>Zong;",
+ "\u68D6>Ch{e2}ng;",
+ "\u68D7>Za{o3};",
+ "\u68D8>J{i2};",
+ "\u68D9>L{i4};",
+ "\u68DA>P{e2}ng;",
+ "\u68DB>Y{u4};",
+ "\u68DC>Y{u4};",
+ "\u68DD>G{u4};",
+ "\u68DE>H{u2}n;",
+ "\u68DF>D{o4}ng;",
+ "\u68E0>T{a2}ng;",
+ "\u68E1>Gang;",
+ "\u68E2>W{a3}ng;",
+ "\u68E3>D{i4};",
+ "\u68E4>X{i2};",
+ "\u68E5>F{a2}n;",
+ "\u68E6>Cheng;",
+ "\u68E7>Zh{a4}n;",
+ "\u68E8>Q{i3};",
+ "\u68E9>Yuan;",
+ "\u68EA>Y{a3}n;",
+ "\u68EB>Y{u4};",
+ "\u68EC>Quan;",
+ "\u68ED>Y{i4};",
+ "\u68EE>Sen;",
+ "\u68EF>R{e3}n;",
+ "\u68F0>Chu{i2};",
+ "\u68F1>L{e2}ng;",
+ "\u68F2>Qi;",
+ "\u68F3>Zhu{o2};",
+ "\u68F4>F{u2};",
+ "\u68F5>Ke;",
+ "\u68F6>La{i2};",
+ "\u68F7>Zou;",
+ "\u68F8>Zou;",
+ "\u68F9>Zhuo;",
+ "\u68FA>Guan;",
+ "\u68FB>F{e2}n;",
+ "\u68FC>F{e2}n;",
+ "\u68FD>Chen;",
+ "\u68FE>Qi{o2}ng;",
+ "\u68FF>Ni{e4};",
+ "\u6900>W{a3}n;",
+ "\u6901>Gu{o3};",
+ "\u6902>L{u4};",
+ "\u6903>Ha{o2};",
+ "\u6904>Jie;",
+ "\u6905>Y{i3};",
+ "\u6906>Cho{u2};",
+ "\u6907>J{u3};",
+ "\u6908>J{u2};",
+ "\u6909>Ch{e2}ng;",
+ "\u690A>Zu{o2};",
+ "\u690B>Li{a2}ng;",
+ "\u690C>Qiang;",
+ "\u690D>Zh{i2};",
+ "\u690E>Zhui;",
+ "\u690F>Ya;",
+ "\u6910>Ju;",
+ "\u6911>Bei;",
+ "\u6912>Jiao;",
+ "\u6913>Zhu{o2};",
+ "\u6914>Zi;",
+ "\u6915>Bin;",
+ "\u6916>P{e2}ng;",
+ "\u6917>D{i4}ng;",
+ "\u6918>Ch{u3};",
+ "\u691C>Ji{a3}n;",
+ "\u691D>Gui;",
+ "\u691E>X{i4};",
+ "\u691F>D{u2};",
+ "\u6920>Qi{a4}n;",
+ "\u6924>Lu{o2};",
+ };
+ }
+
+ private String[] getString2() {
+ return new String[] {
+
+ "\u6925>Zhi;",
+ "\u692A>P{e4}ng;",
+ "\u692B>Zh{a3}n;",
+ "\u692D>Tu{o3};",
+ "\u692E>Sen;",
+ "\u692F>Du{o2};",
+ "\u6930>Y{e2};",
+ "\u6931>Fo{u4};",
+ "\u6932>We{i3};",
+ "\u6933>Wei;",
+ "\u6934>Du{a4}n;",
+ "\u6935>Ji{a3};",
+ "\u6936>Zong;",
+ "\u6937>Jian;",
+ "\u6938>Y{i2};",
+ "\u6939>Sh{e4}n;",
+ "\u693A>X{i2};",
+ "\u693B>Y{a4}n;",
+ "\u693C>Y{a3}n;",
+ "\u693D>Chu{a2}n;",
+ "\u693E>Zh{a4}n;",
+ "\u693F>Chun;",
+ "\u6940>Y{u3};",
+ "\u6941>H{e2};",
+ "\u6942>Zha;",
+ "\u6943>W{o4};",
+ "\u6944>Pi{a2}n;",
+ "\u6945>B{i4};",
+ "\u6946>Yao;",
+ "\u6947>Hu{o4};",
+ "\u6948>Xu;",
+ "\u6949>Ru{o4};",
+ "\u694A>Y{a2}ng;",
+ "\u694B>L{a4};",
+ "\u694C>Y{a2}n;",
+ "\u694D>B{e3}n;",
+ "\u694E>H{u2}n;",
+ "\u694F>Ku{i2};",
+ "\u6950>Ji{e4};",
+ "\u6951>Ku{i2};",
+ "\u6952>Si;",
+ "\u6953>Feng;",
+ "\u6954>Xi{e4};",
+ "\u6955>Tu{o3};",
+ "\u6956>Zh{i4};",
+ "\u6957>Ji{a4}n;",
+ "\u6958>M{u4};",
+ "\u6959>Ma{o4};",
+ "\u695A>Ch{u3};",
+ "\u695B>H{u4};",
+ "\u695C>H{u2};",
+ "\u695D>Li{a4}n;",
+ "\u695E>L{e2}ng;",
+ "\u695F>T{i2}ng;",
+ "\u6960>N{a2}n;",
+ "\u6961>Y{u2};",
+ "\u6962>Yo{u2};",
+ "\u6963>Me{i2};",
+ "\u6964>S{o3}ng;",
+ "\u6965>Xu{a4}n;",
+ "\u6966>Xu{a4}n;",
+ "\u6967>Ying;",
+ "\u6968>Zhen;",
+ "\u6969>Pi{a2}n;",
+ "\u696A>Y{e4};",
+ "\u696B>J{i2};",
+ "\u696C>Ji{e2};",
+ "\u696D>Y{e4};",
+ "\u696E>Ch{u3};",
+ "\u696F>Sh{u3}n;",
+ "\u6970>Y{u2};",
+ "\u6971>Co{u4};",
+ "\u6972>Wei;",
+ "\u6973>Me{i2};",
+ "\u6974>D{i4};",
+ "\u6975>J{i2};",
+ "\u6976>Ji{e2};",
+ "\u6977>Ka{i3};",
+ "\u6978>Qiu;",
+ "\u6979>Y{i2}ng;",
+ "\u697A>Ro{u2};",
+ "\u697B>H{e2}ng;",
+ "\u697C>Lo{u2};",
+ "\u697D>L{e4};",
+ "\u6980>P{i3}n;",
+ "\u6982>Ga{i4};",
+ "\u6983>T{a2}n;",
+ "\u6984>L{a3}n;",
+ "\u6985>Y{u2}n;",
+ "\u6986>Y{u2};",
+ "\u6987>Ch{e4}n;",
+ "\u6988>L{uu2};",
+ "\u6989>J{u3};",
+ "\u698D>Xi{e4};",
+ "\u698E>Ji{a3};",
+ "\u698F>Y{i4};",
+ "\u6990>Zh{a3}n;",
+ "\u6991>F{u4};",
+ "\u6992>Na{i4};",
+ "\u6993>M{i4};",
+ "\u6994>L{a2}ng;",
+ "\u6995>R{o2}ng;",
+ "\u6996>G{u3};",
+ "\u6997>Ji{a4}n;",
+ "\u6998>J{u3};",
+ "\u6999>T{a3};",
+ "\u699A>Ya{o3};",
+ "\u699B>Zhen;",
+ "\u699C>B{a3}ng;",
+ "\u699D>Sha;",
+ "\u699E>Yu{a2}n;",
+ "\u699F>Z{i3};",
+ "\u69A0>Ming;",
+ "\u69A1>S{u4};",
+ "\u69A2>Ji{a4};",
+ "\u69A3>Ya{o2};",
+ "\u69A4>Ji{e2};",
+ "\u69A5>Hu{a3}ng;",
+ "\u69A6>G{a4}n;",
+ "\u69A7>Fe{i3};",
+ "\u69A8>Zh{a4};",
+ "\u69A9>Qi{a2}n;",
+ "\u69AA>M{a4};",
+ "\u69AB>S{u3}n;",
+ "\u69AC>Yu{a2}n;",
+ "\u69AD>Xi{e4};",
+ "\u69AE>R{o2}ng;",
+ "\u69AF>Sh{i2};",
+ "\u69B0>Zhi;",
+ "\u69B1>Cui;",
+ "\u69B2>Y{u2}n;",
+ "\u69B3>T{i2}ng;",
+ "\u69B4>Li{u2};",
+ "\u69B5>R{o2}ng;",
+ "\u69B6>T{a2}ng;",
+ "\u69B7>Qu{e4};",
+ "\u69B8>Zhai;",
+ "\u69B9>Si;",
+ "\u69BA>Sh{e4}ng;",
+ "\u69BB>T{a4};",
+ "\u69BC>K{e4};",
+ "\u69BD>Xi;",
+ "\u69BE>G{u4};",
+ "\u69BF>Qi;",
+ "\u69C0>Ka{o3};",
+ "\u69C1>Ga{o3};",
+ "\u69C2>Sun;",
+ "\u69C3>P{a2}n;",
+ "\u69C4>Tao;",
+ "\u69C5>G{e2};",
+ "\u69C6>X{u2}n;",
+ "\u69C7>Dian;",
+ "\u69C8>No{u4};",
+ "\u69C9>J{i2};",
+ "\u69CA>Shu{o4};",
+ "\u69CB>Go{u4};",
+ "\u69CC>Chu{i2};",
+ "\u69CD>Qiang;",
+ "\u69CE>Cha;",
+ "\u69CF>Qi{a3}n;",
+ "\u69D0>Hua{i2};",
+ "\u69D1>Me{i2};",
+ "\u69D2>X{u4};",
+ "\u69D3>G{a4}ng;",
+ "\u69D4>Gao;",
+ "\u69D5>Zhu{o2};",
+ "\u69D6>Tu{o4};",
+ "\u69D8>Y{a4}ng;",
+ "\u69D9>Dian;",
+ "\u69DA>Ji{a3};",
+ "\u69DB>Ji{a4}n;",
+ "\u69DC>Zu{i4};",
+ "\u69DF>Bin;",
+ "\u69E0>Zhu;",
+ "\u69E2>X{i2};",
+ "\u69E3>Q{i3};",
+ "\u69E4>Li{a2}n;",
+ "\u69E5>Hu{i4};",
+ "\u69E6>Y{o2}ng;",
+ "\u69E7>Qi{a4}n;",
+ "\u69E8>Gu{o3};",
+ "\u69E9>Ga{i4};",
+ "\u69EA>Ga{i4};",
+ "\u69EB>Tu{a2}n;",
+ "\u69EC>Hu{a4};",
+ "\u69ED>C{u4};",
+ "\u69EE>Sen;",
+ "\u69EF>Cui;",
+ "\u69F0>B{e4}ng;",
+ "\u69F1>Yo{u3};",
+ "\u69F2>H{u2};",
+ "\u69F3>Ji{a3}ng;",
+ "\u69F4>H{u4};",
+ "\u69F5>Hu{a4}n;",
+ "\u69F6>Ku{i4};",
+ "\u69F7>Y{i4};",
+ "\u69F8>Ni{e4};",
+ "\u69F9>Gao;",
+ "\u69FA>Kang;",
+ "\u69FB>Gui;",
+ "\u69FC>Gui;",
+ "\u69FD>Ca{o2};",
+ "\u69FE>M{a2}n;",
+ "\u69FF>J{i3}n;",
+ "\u6A00>D{i4};",
+ "\u6A01>Zhuang;",
+ "\u6A02>L{e4};",
+ "\u6A03>L{a2}ng;",
+ "\u6A04>Ch{e2}n;",
+ "\u6A05>Cong;",
+ "\u6A06>L{i2};",
+ "\u6A07>Xiu;",
+ "\u6A08>Q{i2}ng;",
+ "\u6A09>Shu{a3}ng;",
+ "\u6A0A>F{a2}n;",
+ "\u6A0B>Tong;",
+ "\u6A0C>Gu{a4}n;",
+ "\u6A0D>Ji;",
+ "\u6A0E>Suo;",
+ "\u6A0F>Le{i3};",
+ "\u6A10>L{u3};",
+ "\u6A11>Li{a2}ng;",
+ "\u6A12>M{i4};",
+ "\u6A13>Lo{u2};",
+ "\u6A14>Cha{o2};",
+ "\u6A15>S{u4};",
+ "\u6A16>Ke;",
+ "\u6A17>Shu;",
+ "\u6A18>T{a2}ng;",
+ "\u6A19>Biao;",
+ "\u6A1A>L{u4};",
+ "\u6A1B>Jiu;",
+ "\u6A1C>Sh{u4};",
+ "\u6A1D>Zha;",
+ "\u6A1E>Shu;",
+ "\u6A1F>Zhang;",
+ "\u6A20>M{e2}n;",
+ "\u6A21>M{o2};",
+ "\u6A22>Nia{o3};",
+ "\u6A23>Y{a4}ng;",
+ "\u6A24>Tia{o2};",
+ "\u6A25>P{e2}ng;",
+ "\u6A26>Zh{u4};",
+ "\u6A27>Sha;",
+ "\u6A28>Xi;",
+ "\u6A29>Qu{a2}n;",
+ "\u6A2A>H{e2}ng;",
+ "\u6A2B>Jian;",
+ "\u6A2C>Cong;",
+ "\u6A2F>Qi{a2}ng;",
+ "\u6A31>Ying;",
+ "\u6A32>{E4}r;",
+ "\u6A33>X{i2}n;",
+ "\u6A34>Zh{i2};",
+ "\u6A35>Qia{o2};",
+ "\u6A36>Zui;",
+ "\u6A37>Cong;",
+ "\u6A38>P{u2};",
+ "\u6A39>Sh{u4};",
+ "\u6A3A>Hu{a4};",
+ "\u6A3B>Ku{i4};",
+ "\u6A3C>Zhen;",
+ "\u6A3D>Zun;",
+ "\u6A3E>Yu{e4};",
+ "\u6A3F>Zh{a3}n;",
+ "\u6A40>Xi;",
+ "\u6A41>X{u2}n;",
+ "\u6A42>Di{a4}n;",
+ "\u6A43>Fa;",
+ "\u6A44>G{a3}n;",
+ "\u6A45>M{o2};",
+ "\u6A46>W{u3};",
+ "\u6A47>Qiao;",
+ "\u6A48>Na{o2};",
+ "\u6A49>L{i4}n;",
+ "\u6A4A>Li{u2};",
+ "\u6A4B>Qia{o2};",
+ "\u6A4C>Xi{a4}n;",
+ "\u6A4D>R{u4}n;",
+ "\u6A4E>F{a2}n;",
+ "\u6A4F>Zh{a3}n;",
+ "\u6A50>Tu{o4};",
+ "\u6A51>La{o3};",
+ "\u6A52>Y{u2}n;",
+ "\u6A53>Sh{u4}n;",
+ "\u6A54>Tu{i2};",
+ "\u6A55>Cheng;",
+ "\u6A56>T{a2}ng;",
+ "\u6A57>M{e2}ng;",
+ "\u6A58>J{u2};",
+ "\u6A59>Ch{e2}ng;",
+ "\u6A5A>S{u4};",
+ "\u6A5B>Ju{e2};",
+ "\u6A5C>Ju{e2};",
+ "\u6A5D>Tan;",
+ "\u6A5E>Hu{i4};",
+ "\u6A5F>Ji;",
+ "\u6A60>Nu{o3};",
+ "\u6A61>Xi{a4}ng;",
+ "\u6A62>Tu{o3};",
+ "\u6A63>N{i3}ng;",
+ "\u6A64>Ru{i3};",
+ "\u6A65>Zhu;",
+ "\u6A66>Chu{a2}ng;",
+ "\u6A67>Zeng;",
+ "\u6A68>F{e2}n;",
+ "\u6A69>Qi{o2}ng;",
+ "\u6A6A>R{a3}n;",
+ "\u6A6B>H{e2}ng;",
+ "\u6A6C>C{e2}n;",
+ "\u6A6D>Gu;",
+ "\u6A6E>Li{u3};",
+ "\u6A6F>La{o4};",
+ "\u6A70>Gao;",
+ "\u6A71>Ch{u2};",
+ "\u6A76>J{i2};",
+ "\u6A77>Dou;",
+ "\u6A79>L{u3};",
+ "\u6A7C>Yu{a2}n;",
+ "\u6A7D>T{a4};",
+ "\u6A7E>Shu;",
+ "\u6A7F>Jiang;",
+ "\u6A80>T{a2}n;",
+ "\u6A81>L{i3}n;",
+ "\u6A82>N{o2}ng;",
+ "\u6A83>Y{i3}n;",
+ "\u6A84>X{i2};",
+ "\u6A85>Su{i4};",
+ "\u6A86>Shan;",
+ "\u6A87>Zu{i4};",
+ "\u6A88>Xu{a2}n;",
+ "\u6A89>Cheng;",
+ "\u6A8A>G{a4}n;",
+ "\u6A8B>Ju;",
+ "\u6A8C>Zu{i4};",
+ "\u6A8D>Y{i4};",
+ "\u6A8E>Q{i2}n;",
+ "\u6A8F>P{u3};",
+ "\u6A90>Y{a2}n;",
+ "\u6A91>Le{i2};",
+ "\u6A92>Feng;",
+ "\u6A93>Hu{i3};",
+ "\u6A94>D{a3}ng;",
+ "\u6A95>J{i4};",
+ "\u6A96>Su{i4};",
+ "\u6A97>B{o4};",
+ "\u6A98>B{i4};",
+ "\u6A99>D{i3}ng;",
+ "\u6A9A>Ch{u3};",
+ "\u6A9B>Zhua;",
+ "\u6A9C>Kua{i4};",
+ "\u6A9D>J{i2};",
+ "\u6A9E>Ji{e3};",
+ "\u6A9F>Ji{a3};",
+ "\u6AA0>Q{i2}ng;",
+ "\u6AA1>Zh{e4};",
+ "\u6AA2>Ji{a3}n;",
+ "\u6AA3>Qi{a2}ng;",
+ "\u6AA4>Da{o4};",
+ "\u6AA5>Y{i3};",
+ "\u6AA6>Bia{o3};",
+ "\u6AA7>Song;",
+ "\u6AA8>She;",
+ "\u6AA9>L{i3}n;",
+ "\u6AAB>Ch{a2};",
+ "\u6AAC>M{e2}ng;",
+ "\u6AAD>Y{i2}n;",
+ "\u6AAE>Ta{o2};",
+ "\u6AAF>Ta{i2};",
+ "\u6AB0>Mi{a2}n;",
+ "\u6AB1>Q{i2};",
+ "\u6AB2>To{a2}n;",
+ "\u6AB3>Bin;",
+ "\u6AB4>Hu{o4};",
+ "\u6AB5>J{i4};",
+ "\u6AB6>Qian;",
+ "\u6AB7>M{i2};",
+ "\u6AB8>N{i2}ng;",
+ "\u6AB9>Yi;",
+ "\u6ABA>Ga{o3};",
+ "\u6ABB>Ji{a4}n;",
+ "\u6ABC>Y{i4}n;",
+ "\u6ABD>{E2}r;",
+ "\u6ABE>Q{i3}ng;",
+ "\u6ABF>Y{a3}n;",
+ "\u6AC0>Q{i2};",
+ "\u6AC1>M{i4};",
+ "\u6AC2>Zha{o4};",
+ "\u6AC3>Gu{i4};",
+ "\u6AC4>Chun;",
+ "\u6AC5>Ji;",
+ "\u6AC6>Ku{i2};",
+ "\u6AC7>P{o2};",
+ "\u6AC8>D{e4}ng;",
+ "\u6AC9>Ch{u2};",
+ "\u6ACB>Mi{a2}n;",
+ "\u6ACC>You;",
+ "\u6ACD>Zh{i4};",
+ "\u6ACE>Gu{a4}ng;",
+ "\u6ACF>Qian;",
+ "\u6AD0>Le{i3};",
+ "\u6AD1>Le{i3};",
+ "\u6AD2>S{a4};",
+ "\u6AD3>L{u3};",
+ "\u6AD4>L{i4};",
+ "\u6AD5>Cu{a2}n;",
+ "\u6AD6>L{uu2};",
+ "\u6AD7>Mi{e4};",
+ "\u6AD8>Hu{i4};",
+ "\u6AD9>Ou;",
+ "\u6ADA>L{uu2};",
+ "\u6ADB>Ji{e2};",
+ "\u6ADC>Gao;",
+ "\u6ADD>D{u2};",
+ "\u6ADE>Yu{a2}n;",
+ "\u6ADF>L{i4};",
+ "\u6AE0>Fe{i4};",
+ "\u6AE1>Zhu{o2};",
+ "\u6AE2>So{u3};",
+ "\u6AE3>Li{a2}n;",
+ "\u6AE5>Ch{u2};",
+ "\u6AE7>Zhu;",
+ "\u6AE8>L{u2};",
+ "\u6AE9>Y{a2}n;",
+ "\u6AEA>L{i4};",
+ "\u6AEB>Zhu;",
+ "\u6AEC>Ch{e4}n;",
+ "\u6AED>Ji{e2};",
+ "\u6AEE>{E4};",
+ "\u6AEF>Su;",
+ "\u6AF0>Hua{i2};",
+ "\u6AF1>Ni{e4};",
+ "\u6AF2>Y{u4};",
+ "\u6AF3>L{o2}ng;",
+ "\u6AF4>La{i4};",
+ "\u6AF6>Xi{a3}n;",
+ "\u6AF8>J{u3};",
+ "\u6AF9>Xiao;",
+ "\u6AFA>L{i2}ng;",
+ "\u6AFB>Ying;",
+ "\u6AFC>Jian;",
+ "\u6AFD>Y{i3}n;",
+ "\u6AFE>Yo{u2};",
+ "\u6AFF>Y{i2}ng;",
+ "\u6B00>Xiang;",
+ "\u6B01>N{o2}ng;",
+ "\u6B02>B{o2};",
+ "\u6B03>Ch{a2}n;",
+ "\u6B04>L{a2}n;",
+ "\u6B05>J{u3};",
+ "\u6B06>Shuang;",
+ "\u6B07>Sh{e4};",
+ "\u6B08>We{i2};",
+ "\u6B09>C{o4}ng;",
+ "\u6B0A>Qu{a2}n;",
+ "\u6B0B>Q{u2};",
+ "\u6B0E>Y{u4};",
+ "\u6B0F>Lu{o2};",
+ "\u6B10>L{i3};",
+ "\u6B11>Z{a4}n;",
+ "\u6B12>Lu{a2}n;",
+ "\u6B13>D{a3}ng;",
+ "\u6B14>Ju{e2};",
+ "\u6B16>L{a3}n;",
+ "\u6B17>L{a2}n;",
+ "\u6B18>Zh{u3};",
+ "\u6B19>Le{i2};",
+ "\u6B1A>L{i3};",
+ "\u6B1B>B{a4};",
+ "\u6B1C>N{a2}ng;",
+ "\u6B1D>Y{u4};",
+ "\u6B1E>L{i2}ng;",
+ "\u6B20>Qi{a4}n;",
+ "\u6B21>C{i4};",
+ "\u6B22>Huan;",
+ "\u6B23>Xin;",
+ "\u6B24>Y{u2};",
+ "\u6B25>Y{u4};",
+ "\u6B26>Qian;",
+ "\u6B27>Ou;",
+ "\u6B28>Xu;",
+ "\u6B29>Chao;",
+ "\u6B2A>Ch{u4};",
+ "\u6B2B>Chi;",
+ "\u6B2C>Ka{i4};",
+ "\u6B2D>Y{i4};",
+ "\u6B2E>Ju{e2};",
+ "\u6B2F>X{i2};",
+ "\u6B30>Xu;",
+ "\u6B31>Xi{a4};",
+ "\u6B32>Y{u4};",
+ "\u6B33>Kua{i4};",
+ "\u6B34>L{a2}ng;",
+ "\u6B35>Ku{a3}n;",
+ "\u6B36>Shu{o4};",
+ "\u6B37>Xi;",
+ "\u6B38>A{i3};",
+ "\u6B39>Yi;",
+ "\u6B3A>Qi;",
+ "\u6B3B>Hu;",
+ "\u6B3C>Ch{i3};",
+ "\u6B3D>Qin;",
+ "\u6B3E>Ku{a3}n;",
+ "\u6B3F>K{a3}n;",
+ "\u6B40>Ku{a3}n;",
+ "\u6B41>K{a3}n;",
+ "\u6B42>Chu{a2}n;",
+ "\u6B43>Sh{a4};",
+ "\u6B44>Gua;",
+ "\u6B45>Yin;",
+ "\u6B46>Xin;",
+ "\u6B47>Xie;",
+ "\u6B48>Y{u2};",
+ "\u6B49>Qi{a4}n;",
+ "\u6B4A>Xiao;",
+ "\u6B4B>Y{i2};",
+ "\u6B4C>Ge;",
+ "\u6B4D>Wu;",
+ "\u6B4E>T{a4}n;",
+ "\u6B4F>J{i4}n;",
+ "\u6B50>Ou;",
+ "\u6B51>Hu;",
+ "\u6B52>T{i4};",
+ "\u6B53>Huan;",
+ "\u6B54>Xu;",
+ "\u6B55>P{e4}n;",
+ "\u6B56>Xi;",
+ "\u6B57>Xia{o4};",
+ "\u6B58>Xu;",
+ "\u6B59>X{i4};",
+ "\u6B5B>Li{a4}n;",
+ "\u6B5C>Ch{u4};",
+ "\u6B5D>Y{i4};",
+ "\u6B5E>K{a3}n;",
+ "\u6B5F>Y{u2};",
+ "\u6B60>Chu{o4};",
+ "\u6B61>Huan;",
+ "\u6B62>Zh{i3};",
+ "\u6B63>Zh{e4}ng;",
+ "\u6B64>C{i3};",
+ "\u6B65>B{u4};",
+ "\u6B66>W{u3};",
+ "\u6B67>Q{i2};",
+ "\u6B68>B{u4};",
+ "\u6B69>B{u4};",
+ "\u6B6A>Wai;",
+ "\u6B6B>J{u4};",
+ "\u6B6C>Qi{a2}n;",
+ "\u6B6D>Ch{i2};",
+ "\u6B6E>S{e4};",
+ "\u6B6F>Ch{i3};",
+ "\u6B70>S{e4};",
+ "\u6B71>Zh{o3}ng;",
+ "\u6B72>Su{i4};",
+ "\u6B73>Su{i4};",
+ "\u6B74>L{i4};",
+ "\u6B75>Cu{o4};",
+ "\u6B76>Y{u2};",
+ "\u6B77>L{i4};",
+ "\u6B78>Gui;",
+ "\u6B79>Da{i3};",
+ "\u6B7A>Da{i3};",
+ "\u6B7B>S{i3};",
+ "\u6B7C>Jian;",
+ "\u6B7D>Zh{e2};",
+ "\u6B7E>M{o4};",
+ "\u6B7F>M{o4};",
+ "\u6B80>Ya{o3};",
+ "\u6B81>M{o4};",
+ "\u6B82>C{u2};",
+ "\u6B83>Yang;",
+ "\u6B84>Ti{a3}n;",
+ "\u6B85>Sheng;",
+ "\u6B86>Da{i4};",
+ "\u6B87>Shang;",
+ "\u6B88>X{u4};",
+ "\u6B89>X{u4}n;",
+ "\u6B8A>Shu;",
+ "\u6B8B>C{a2}n;",
+ "\u6B8C>Ju{e2};",
+ "\u6B8D>Pia{o3};",
+ "\u6B8E>Qi{a4};",
+ "\u6B8F>Qi{u4};",
+ "\u6B90>S{u4};",
+ "\u6B91>Q{i2}ng;",
+ "\u6B92>Y{u3}n;",
+ "\u6B93>Li{a4}n;",
+ "\u6B94>Y{i4};",
+ "\u6B95>Fo{u3};",
+ "\u6B96>Zh{i2};",
+ "\u6B97>Y{e4};",
+ "\u6B98>C{a2}n;",
+ "\u6B99>Hun;",
+ "\u6B9A>Dan;",
+ "\u6B9B>J{i2};",
+ "\u6B9C>Y{e4};",
+ "\u6B9D>Zhen;",
+ "\u6B9E>Y{u3}n;",
+ "\u6B9F>Wen;",
+ "\u6BA0>Cho{u4};",
+ "\u6BA1>B{i4}n;",
+ "\u6BA2>T{i4};",
+ "\u6BA3>J{i3}n;",
+ "\u6BA4>Shang;",
+ "\u6BA5>Y{i2}n;",
+ "\u6BA6>Diao;",
+ "\u6BA7>C{u4};",
+ "\u6BA8>Hu{i4};",
+ "\u6BA9>Cu{a4}n;",
+ "\u6BAA>Y{i4};",
+ "\u6BAB>Dan;",
+ "\u6BAC>D{u4};",
+ "\u6BAD>Jiang;",
+ "\u6BAE>Li{a4}n;",
+ "\u6BAF>B{i4}n;",
+ "\u6BB0>D{u2};",
+ "\u6BB2>Jian;",
+ "\u6BB3>Shu;",
+ "\u6BB4>Ou;",
+ "\u6BB5>Du{a4}n;",
+ "\u6BB6>Zh{u4};",
+ "\u6BB7>Yin;",
+ "\u6BB8>Q{i4}ng;",
+ "\u6BB9>Y{i4};",
+ "\u6BBA>Sha;",
+ "\u6BBB>Qu{e4};",
+ "\u6BBC>K{e2};",
+ "\u6BBD>Ya{o2};",
+ "\u6BBE>J{u4}n;",
+ "\u6BBF>Di{a4}n;",
+ "\u6BC0>Hu{i3};",
+ "\u6BC1>Hu{i3};",
+ "\u6BC2>G{u3};",
+ "\u6BC3>Qu{e4};",
+ "\u6BC4>Ji;",
+ "\u6BC5>Y{i4};",
+ "\u6BC6>Ou;",
+ "\u6BC7>Hu{i3};",
+ "\u6BC8>Du{a4}n;",
+ "\u6BC9>Yi;",
+ "\u6BCA>Xiao;",
+ "\u6BCB>W{u2};",
+ "\u6BCC>Gu{a4}n;",
+ "\u6BCD>M{u3};",
+ "\u6BCE>Me{i3};",
+ "\u6BCF>Me{i3};",
+ "\u6BD0>A{i3};",
+ "\u6BD1>Zu{o3};",
+ "\u6BD2>D{u2};",
+ "\u6BD3>Y{u4};",
+ "\u6BD4>B{i3};",
+ "\u6BD5>B{i4};",
+ "\u6BD6>B{i4};",
+ "\u6BD7>P{i2};",
+ "\u6BD8>P{i2};",
+ "\u6BD9>B{i4};",
+ "\u6BDA>Ch{a2}n;",
+ "\u6BDB>Ma{o2};",
+ "\u6BDE>P{u2};",
+ "\u6BE0>Jia;",
+ "\u6BE1>Zhan;",
+ "\u6BE2>Sai;",
+ "\u6BE3>M{u4};",
+ "\u6BE4>Tu{o4};",
+ "\u6BE5>X{u2}n;",
+ "\u6BE6>{E4}r;",
+ "\u6BE7>R{o2}ng;",
+ "\u6BE8>Xi{a3}n;",
+ "\u6BE9>J{u2};",
+ "\u6BEA>M{u2};",
+ "\u6BEB>Ha{o2};",
+ "\u6BEC>Qi{u2};",
+ "\u6BED>Do{u4};",
+ "\u6BEF>T{a3}n;",
+ "\u6BF0>Pe{i2};",
+ "\u6BF1>J{u2};",
+ "\u6BF2>Du{o2};",
+ "\u6BF3>Cu{i4};",
+ "\u6BF4>Bi;",
+ "\u6BF5>San;",
+ "\u6BF7>Ma{o4};",
+ "\u6BF8>Sui;",
+ "\u6BF9>Yu;",
+ "\u6BFA>Yu;",
+ "\u6BFB>Tu{o4};",
+ "\u6BFC>H{e2};",
+ "\u6BFD>Ji{a4}n;",
+ "\u6BFE>T{a4};",
+ "\u6BFF>San;",
+ "\u6C00>L{uu2};",
+ "\u6C01>M{u2};",
+ "\u6C02>L{i2};",
+ "\u6C03>T{o2}ng;",
+ "\u6C04>R{o3}ng;",
+ "\u6C05>Ch{a3}ng;",
+ "\u6C06>P{u3};",
+ "\u6C07>Lu{o2};",
+ "\u6C08>Zhan;",
+ "\u6C09>Sa{o4};",
+ "\u6C0A>Zhan;",
+ "\u6C0B>M{e2}ng;",
+ "\u6C0C>Lu{o2};",
+ "\u6C0D>Q{u2};",
+ "\u6C0E>Di{e2};",
+ "\u6C0F>Sh{i4};",
+ "\u6C10>D{i3};",
+ "\u6C11>M{i2}n;",
+ "\u6C12>Ju{e2};",
+ "\u6C13>M{a2}ng;",
+ "\u6C14>Q{i4};",
+ "\u6C15>Pie;",
+ "\u6C16>Na{i3};",
+ "\u6C17>Q{i4};",
+ "\u6C18>Dao;",
+ "\u6C19>Xian;",
+ "\u6C1A>Chuan;",
+ "\u6C1B>Fen;",
+ "\u6C1C>R{i4};",
+ "\u6C1D>Ne{i4};",
+ "\u6C1F>F{u2};",
+ "\u6C20>Shen;",
+ "\u6C21>Dong;",
+ "\u6C22>Qing;",
+ "\u6C23>Q{i4};",
+ "\u6C24>Yin;",
+ "\u6C25>Xi;",
+ "\u6C26>Ha{i4};",
+ "\u6C27>Y{a3}ng;",
+ "\u6C28>An;",
+ "\u6C29>Y{a4};",
+ "\u6C2A>K{e4};",
+ "\u6C2B>Qing;",
+ "\u6C2C>Y{a4};",
+ "\u6C2D>Dong;",
+ "\u6C2E>D{a4}n;",
+ "\u6C2F>L{uu4};",
+ "\u6C30>Qing;",
+ "\u6C31>Y{a3}ng;",
+ "\u6C32>Yun;",
+ "\u6C33>Yun;",
+ "\u6C34>Shu{i3};",
+ "\u6C35>San1dian3shu{i3};",
+ "\u6C36>Zh{e3}ng;",
+ "\u6C37>Bing;",
+ "\u6C38>Y{o3}ng;",
+ "\u6C39>D{a4}ng;",
+ "\u6C3B>L{e4};",
+ "\u6C3C>N{i4};",
+ "\u6C3D>T{u3}n;",
+ "\u6C3E>F{a4}n;",
+ "\u6C3F>Gu{i3};",
+ "\u6C40>Ting;",
+ "\u6C41>Zhi;",
+ "\u6C42>Qi{u2};",
+ "\u6C43>Bin;",
+ "\u6C44>Z{e4};",
+ "\u6C45>Mi{a3}n;",
+ "\u6C46>Cuan;",
+ "\u6C47>Hu{i4};",
+ "\u6C48>Diao;",
+ "\u6C49>Y{i4};",
+ "\u6C4A>Ch{a4};",
+ "\u6C4B>Zhu{o2};",
+ "\u6C4C>Chu{a4}n;",
+ "\u6C4D>W{a2}n;",
+ "\u6C4E>F{a4}n;",
+ "\u6C4F>Da{i4};",
+ "\u6C50>X{i4};",
+ "\u6C51>Tuo;",
+ "\u6C52>M{a2}ng;",
+ "\u6C53>Qi{u2};",
+ "\u6C54>Q{i4};",
+ "\u6C55>Sh{a4}n;",
+ "\u6C56>Pa{i4};",
+ "\u6C57>H{a4}n;",
+ "\u6C58>Qian;",
+ "\u6C59>Wu;",
+ "\u6C5A>Wu;",
+ "\u6C5B>X{u4}n;",
+ "\u6C5C>S{i4};",
+ "\u6C5D>R{u3};",
+ "\u6C5E>G{o3}ng;",
+ "\u6C5F>Jiang;",
+ "\u6C60>Ch{i2};",
+ "\u6C61>Wu;",
+ "\u6C64>Tang;",
+ "\u6C65>Zhi;",
+ "\u6C66>Ch{i2};",
+ "\u6C67>Qian;",
+ "\u6C68>M{i4};",
+ "\u6C69>Y{u4};",
+ "\u6C6A>Wang;",
+ "\u6C6B>Q{i4}ng;",
+ "\u6C6C>J{i3}ng;",
+ "\u6C6D>Ru{i4};",
+ "\u6C6E>Jun;",
+ "\u6C6F>H{o2}ng;",
+ "\u6C70>Ta{i4};",
+ "\u6C71>Qu{a3}n;",
+ "\u6C72>J{i2};",
+ "\u6C73>Bi{a4}n;",
+ "\u6C74>Bi{a4}n;",
+ "\u6C75>G{a4}n;",
+ "\u6C76>W{e4}n;",
+ "\u6C77>Zhong;",
+ "\u6C78>Fang;",
+ "\u6C79>Xiong;",
+ "\u6C7A>Ju{e2};",
+ "\u6C7B>H{a3}ng;",
+ "\u6C7C>Niou;",
+ "\u6C7D>Q{i4};",
+ "\u6C7E>F{e2}n;",
+ "\u6C7F>X{u4};",
+ "\u6C80>X{u4};",
+ "\u6C81>Q{i4}n;",
+ "\u6C82>Y{i2};",
+ "\u6C83>W{o4};",
+ "\u6C84>Y{u2}n;",
+ "\u6C85>Yu{a2}n;",
+ "\u6C86>H{a2}ng;",
+ "\u6C87>Y{a3}n;",
+ "\u6C88>Ch{e2}n;",
+ "\u6C89>Ch{e2}n;",
+ "\u6C8A>D{a4}n;",
+ "\u6C8B>Yo{u2};",
+ "\u6C8C>D{u4}n;",
+ "\u6C8D>H{u4};",
+ "\u6C8E>Hu{o4};",
+ "\u6C8F>Qie;",
+ "\u6C90>M{u4};",
+ "\u6C91>Ro{u2};",
+ "\u6C92>Me{i2};",
+ "\u6C93>T{a4};",
+ "\u6C94>Mi{a3}n;",
+ "\u6C95>W{u4};",
+ "\u6C96>Chong;",
+ "\u6C97>Tian;",
+ "\u6C98>B{i3};",
+ "\u6C99>Sha;",
+ "\u6C9A>Zh{i3};",
+ "\u6C9B>Pe{i4};",
+ "\u6C9C>P{a4}n;",
+ "\u6C9D>Zhu{i3};",
+ "\u6C9E>Za;",
+ "\u6C9F>Gou;",
+ "\u6CA0>Li{u2};",
+ "\u6CA1>Me{i2};",
+ "\u6CA2>Z{e2};",
+ "\u6CA3>Feng;",
+ "\u6CA4>O{u4};",
+ "\u6CA5>L{i4};",
+ "\u6CA6>L{u2}n;",
+ "\u6CA7>Cang;",
+ "\u6CA8>F{e2}ng;",
+ "\u6CA9>We{i2};",
+ "\u6CAA>H{u4};",
+ "\u6CAB>M{o4};",
+ "\u6CAC>Me{i4};",
+ "\u6CAD>Sh{u4};",
+ "\u6CAE>Ju;",
+ "\u6CAF>Z{a3}n;",
+ "\u6CB0>Tuo;",
+ "\u6CB1>Tu{o2};",
+ "\u6CB2>Tu{o2};",
+ "\u6CB3>H{e2};",
+ "\u6CB4>L{i4};",
+ "\u6CB5>M{i3};",
+ "\u6CB6>Y{i2};",
+ "\u6CB7>Fa;",
+ "\u6CB8>Fe{i4};",
+ "\u6CB9>Yo{u2};",
+ "\u6CBA>Ti{a2}n;",
+ "\u6CBB>Zh{i4};",
+ "\u6CBC>Zha{o3};",
+ "\u6CBD>Gu;",
+ "\u6CBE>Zhan;",
+ "\u6CBF>Y{a2}n;",
+ "\u6CC0>Si;",
+ "\u6CC1>Ku{a4}ng;",
+ "\u6CC2>Ji{o3}ng;",
+ "\u6CC3>J{u4};",
+ "\u6CC4>Xi{e4};",
+ "\u6CC5>Qi{u2};",
+ "\u6CC6>Yi;",
+ "\u6CC7>Jia;",
+ "\u6CC8>Zhong;",
+ "\u6CC9>Qu{a2}n;",
+ "\u6CCA>B{o2};",
+ "\u6CCB>Hu{i4};",
+ "\u6CCC>M{i4};",
+ "\u6CCD>Ben;",
+ "\u6CCE>Zhu{o2};",
+ "\u6CCF>Ch{u4};",
+ "\u6CD0>L{e4};",
+ "\u6CD1>Yo{u3};",
+ "\u6CD2>Gu;",
+ "\u6CD3>H{o2}ng;",
+ "\u6CD4>Gan;",
+ "\u6CD5>F{a3};",
+ "\u6CD6>Ma{o3};",
+ "\u6CD7>S{i4};",
+ "\u6CD8>Hu;",
+ "\u6CD9>P{i2}ng;",
+ "\u6CDA>C{i3};",
+ "\u6CDB>F{a4}n;",
+ "\u6CDC>Ch{i2};",
+ "\u6CDD>S{u4};",
+ "\u6CDE>N{i4}ng;",
+ "\u6CDF>Cheng;",
+ "\u6CE0>L{i2}ng;",
+ "\u6CE1>Pa{o4};",
+ "\u6CE2>Bo;",
+ "\u6CE3>Q{i4};",
+ "\u6CE4>S{i4};",
+ "\u6CE5>N{i2};",
+ "\u6CE6>J{u2};",
+ "\u6CE7>Yu{e4};",
+ "\u6CE8>Zh{u4};",
+ "\u6CE9>Sheng;",
+ "\u6CEA>Le{i4};",
+ "\u6CEB>Xu{a4}n;",
+ "\u6CEC>Xu{e4};",
+ "\u6CED>Fu;",
+ "\u6CEE>P{a4}n;",
+ "\u6CEF>M{i3}n;",
+ "\u6CF0>Ta{i4};",
+ "\u6CF1>Yang;",
+ "\u6CF2>J{i3};",
+ "\u6CF3>Y{o3}ng;",
+ "\u6CF4>Gu{a4}n;",
+ "\u6CF5>B{e4}ng;",
+ "\u6CF6>Xu{e2};",
+ "\u6CF7>L{o2}ng;",
+ "\u6CF8>L{u2};",
+ "\u6CFA>B{o2};",
+ "\u6CFB>Xi{e4};",
+ "\u6CFC>Po;",
+ "\u6CFD>Z{e2};",
+ "\u6CFE>Jing;",
+ "\u6CFF>Y{i2}n;",
+ "\u6D00>Zhou;",
+ "\u6D01>J{i2};",
+ "\u6D02>Y{i4};",
+ "\u6D03>Hui;",
+ "\u6D04>Hu{i2};",
+ "\u6D05>Zu{i3};",
+ "\u6D06>Ch{e2}ng;",
+ "\u6D07>Yin;",
+ "\u6D08>We{i2};",
+ "\u6D09>Ho{u4};",
+ "\u6D0A>Ji{a4}n;",
+ "\u6D0B>Y{a2}ng;",
+ "\u6D0C>Li{e4};",
+ "\u6D0D>S{i4};",
+ "\u6D0E>J{i4};",
+ "\u6D0F>{E2}r;",
+ "\u6D10>X{i2}ng;",
+ "\u6D11>F{u2};",
+ "\u6D12>S{a3};",
+ "\u6D13>Su{o3};",
+ "\u6D14>Zh{i3};",
+ "\u6D15>Yin;",
+ "\u6D16>W{u2};",
+ "\u6D17>X{i3};",
+ "\u6D18>Ka{o3};",
+ "\u6D19>Zhu;",
+ "\u6D1A>Ji{a4}ng;",
+ "\u6D1B>Lu{o4};",
+ "\u6D1D>{A4}n;",
+ "\u6D1E>D{o4}ng;",
+ "\u6D1F>Y{i2};",
+ "\u6D20>Mo{u2};",
+ "\u6D21>Le{i3};",
+ "\u6D22>Yi;",
+ "\u6D23>M{i3};",
+ "\u6D24>Qu{a2}n;",
+ "\u6D25>Jin;",
+ "\u6D26>M{o4};",
+ "\u6D27>We{i3};",
+ "\u6D28>Xia{o2};",
+ "\u6D29>Xi{e4};",
+ "\u6D2A>H{o2}ng;",
+ "\u6D2B>X{u4};",
+ "\u6D2C>Shu{o4};",
+ "\u6D2D>Kuang;",
+ "\u6D2E>Tao;",
+ "\u6D2F>Qi{e4};",
+ "\u6D30>J{u4};",
+ "\u6D31>{e3}r;",
+ "\u6D32>Zhou;",
+ "\u6D33>R{u4};",
+ "\u6D34>P{i2}ng;",
+ "\u6D35>X{u2}n;",
+ "\u6D36>Xiong;",
+ "\u6D37>Zh{i4};",
+ "\u6D38>Guang;",
+ "\u6D39>Hu{a2}n;",
+ "\u6D3A>M{i2}ng;",
+ "\u6D3B>Hu{o2};",
+ "\u6D3C>Wa;",
+ "\u6D3D>Qi{a4};",
+ "\u6D3E>Pa{i4};",
+ "\u6D3F>Wu;",
+ "\u6D40>Q{u3};",
+ "\u6D41>Li{u2};",
+ "\u6D42>Y{i4};",
+ "\u6D43>Ji{a2};",
+ "\u6D44>J{i4}ng;",
+ "\u6D45>Qi{a3}n;",
+ "\u6D46>Jiang;",
+ "\u6D47>Jiao;",
+ "\u6D48>Ch{e2}ng;",
+ "\u6D49>Shi;",
+ "\u6D4A>Zhu{o2};",
+ "\u6D4B>C{e4};",
+ "\u6D4D>Kua{i4};",
+ "\u6D4E>J{i4};",
+ "\u6D4F>Li{u2};",
+ "\u6D50>Ch{a3}n;",
+ "\u6D51>H{u2}n;",
+ "\u6D52>H{u3};",
+ "\u6D53>N{o2}ng;",
+ "\u6D54>X{u2}n;",
+ "\u6D55>J{i4}n;",
+ "\u6D56>Li{e4};",
+ "\u6D57>Qi{u2};",
+ "\u6D58>We{i3};",
+ "\u6D59>Zh{e4};",
+ "\u6D5A>J{u4}n;",
+ "\u6D5B>H{a4}n;",
+ "\u6D5C>Bang;",
+ "\u6D5D>M{a2}ng;",
+ "\u6D5E>Zhu{o2};",
+ "\u6D5F>Yo{u2};",
+ "\u6D60>Xi;",
+ "\u6D61>B{o2};",
+ "\u6D62>Do{u4};",
+ "\u6D63>W{a3}n;",
+ "\u6D64>H{o2}ng;",
+ "\u6D65>Y{i4};",
+ "\u6D66>P{u3};",
+ "\u6D67>Y{i3}ng;",
+ "\u6D68>L{a3}n;",
+ "\u6D69>Ha{o4};",
+ "\u6D6A>L{a4}ng;",
+ "\u6D6B>H{a3}n;",
+ "\u6D6C>L{i3};",
+ "\u6D6D>Geng;",
+ "\u6D6E>F{u2};",
+ "\u6D6F>W{u2};",
+ "\u6D70>Li{a4}n;",
+ "\u6D71>Ch{u2}n;",
+ "\u6D72>F{e2}ng;",
+ "\u6D73>Y{i4};",
+ "\u6D74>Y{u4};",
+ "\u6D75>T{o2}ng;",
+ "\u6D76>La{o2};",
+ "\u6D77>Ha{i3};",
+ "\u6D78>J{i4}n;",
+ "\u6D79>Ji{a2};",
+ "\u6D7A>Chong;",
+ "\u6D7B>W{e3}ng;",
+ "\u6D7C>Me{i3};",
+ "\u6D7D>Sui;",
+ "\u6D7E>Cheng;",
+ "\u6D7F>Pe{i4};",
+ "\u6D80>Xi{a4}n;",
+ "\u6D81>Sh{e4}n;",
+ "\u6D82>T{u2};",
+ "\u6D83>K{u4}n;",
+ "\u6D84>Pin;",
+ "\u6D85>Ni{e4};",
+ "\u6D86>H{a4}n;",
+ "\u6D87>Jing;",
+ "\u6D88>Xiao;",
+ "\u6D89>Sh{e4};",
+ "\u6D8A>Ni{a4}n;",
+ "\u6D8B>Tu;",
+ "\u6D8C>Y{o3}ng;",
+ "\u6D8D>Xia{o4};",
+ "\u6D8E>Xi{a2}n;",
+ "\u6D8F>T{i3}ng;",
+ "\u6D90>{E2};",
+ "\u6D91>S{u4};",
+ "\u6D92>Tun;",
+ "\u6D93>Juan;",
+ "\u6D94>C{e2}n;",
+ "\u6D95>T{i4};",
+ "\u6D96>L{i4};",
+ "\u6D97>Shu{i4};",
+ "\u6D98>S{i4};",
+ "\u6D99>Le{i4};",
+ "\u6D9A>Shu{i4};",
+ "\u6D9B>Tao;",
+ "\u6D9C>D{u2};",
+ "\u6D9D>La{o4};",
+ "\u6D9E>La{i2};",
+ "\u6D9F>Li{a2}n;",
+ "\u6DA0>We{i2};",
+ "\u6DA1>Wo;",
+ "\u6DA2>Y{u2}n;",
+ "\u6DA3>Hu{a4}n;",
+ "\u6DA4>D{i2};",
+ "\u6DA6>R{u4}n;",
+ "\u6DA7>Ji{a4}n;",
+ "\u6DA8>Zh{a3}ng;",
+ "\u6DA9>S{e4};",
+ "\u6DAA>F{u2};",
+ "\u6DAB>Gu{a4}n;",
+ "\u6DAC>X{i4}ng;",
+ "\u6DAD>Sho{u4};",
+ "\u6DAE>Shu{a4}n;",
+ "\u6DAF>Y{a2};",
+ "\u6DB0>Chu{o4};",
+ "\u6DB1>Zh{a4}ng;",
+ "\u6DB2>Y{e4};",
+ "\u6DB3>Kong;",
+ "\u6DB4>W{o4};",
+ "\u6DB5>H{a2}n;",
+ "\u6DB6>Tuo;",
+ "\u6DB7>Dong;",
+ "\u6DB8>H{e2};",
+ "\u6DB9>Wo;",
+ "\u6DBA>Ju;",
+ "\u6DBB>G{a4}n;",
+ "\u6DBC>Li{a2}ng;",
+ "\u6DBD>Hun;",
+ "\u6DBE>T{a4};",
+ "\u6DBF>Zhu{o2};",
+ "\u6DC0>Di{a4}n;",
+ "\u6DC1>Qi{e4};",
+ "\u6DC2>D{e2};",
+ "\u6DC3>Ju{a4}n;",
+ "\u6DC4>Zi;",
+ "\u6DC5>Xi;",
+ "\u6DC6>Ya{o2};",
+ "\u6DC7>Q{i2};",
+ "\u6DC8>G{u3};",
+ "\u6DC9>Gu{o3};",
+ "\u6DCA>H{a4}n;",
+ "\u6DCB>L{i2}n;",
+ "\u6DCC>T{a3}ng;",
+ "\u6DCD>Zhou;",
+ "\u6DCE>P{e3}ng;",
+ "\u6DCF>Ha{o4};",
+ "\u6DD0>Chang;",
+ "\u6DD1>Sh{u2};",
+ "\u6DD2>Qi;",
+ "\u6DD3>Fang;",
+ "\u6DD4>Ch{i4};",
+ "\u6DD5>L{u4};",
+ "\u6DD6>Na{o4};",
+ "\u6DD7>J{u2};",
+ "\u6DD8>Ta{o2};",
+ "\u6DD9>C{o2}ng;",
+ "\u6DDA>Le{i4};",
+ "\u6DDB>Zh{i4};",
+ "\u6DDC>P{e2}ng;",
+ "\u6DDD>Fe{i2};",
+ "\u6DDE>Song;",
+ "\u6DDF>Ti{a3}n;",
+ "\u6DE0>P{i4};",
+ "\u6DE1>D{a4}n;",
+ "\u6DE2>Y{u4};",
+ "\u6DE3>N{i2};",
+ "\u6DE4>Yu;",
+ "\u6DE5>L{u4};",
+ "\u6DE6>G{a4}n;",
+ "\u6DE7>M{i4};",
+ "\u6DE8>J{i4}ng;",
+ "\u6DE9>L{i2}ng;",
+ "\u6DEA>L{u2}n;",
+ "\u6DEB>Y{i2}n;",
+ "\u6DEC>Cu{i4};",
+ "\u6DED>Q{u2};",
+ "\u6DEE>Hua{i2};",
+ "\u6DEF>Y{u4};",
+ "\u6DF0>Ni{a4}n;",
+ "\u6DF1>Shen;",
+ "\u6DF2>Pia{o2};",
+ "\u6DF3>Ch{u2}n;",
+ "\u6DF4>W{a4};",
+ "\u6DF5>Yuan;",
+ "\u6DF6>La{i2};",
+ "\u6DF7>H{u3}n;",
+ "\u6DF8>Qing;",
+ "\u6DF9>Yan;",
+ "\u6DFA>Qi{a3}n;",
+ "\u6DFB>Tian;",
+ "\u6DFC>Mia{o3};",
+ "\u6DFD>Zh{i3};",
+ "\u6DFE>Y{i3}n;",
+ "\u6DFF>M{i4};",
+ "\u6E00>Ben;",
+ "\u6E01>Yuan;",
+ "\u6E02>W{e4}n;",
+ "\u6E03>R{e4};",
+ "\u6E04>Fei;",
+ "\u6E05>Qing;",
+ "\u6E06>Yuan;",
+ "\u6E07>K{e3};",
+ "\u6E08>J{i4};",
+ "\u6E09>Sh{e4};",
+ "\u6E0A>Yuan;",
+ "\u6E0C>L{u4};",
+ "\u6E0D>Z{i4};",
+ "\u6E0E>D{u2};",
+ "\u6E10>Ji{a4}n;",
+ "\u6E11>M{i3}n;",
+ "\u6E12>P{i4};",
+ "\u6E14>Y{u2};",
+ "\u6E15>Yuan;",
+ "\u6E16>Sh{e3}n;",
+ "\u6E17>Sh{e4}n;",
+ "\u6E18>Ro{u2};",
+ "\u6E19>Hu{a4}n;",
+ "\u6E1A>Zh{u3};",
+ "\u6E1B>Ji{a3}n;",
+ "\u6E1C>Nu{a3}n;",
+ "\u6E1D>Y{u2};",
+ "\u6E1E>Qi{u2};",
+ "\u6E1F>T{i2}ng;",
+ "\u6E20>Q{u2};",
+ "\u6E21>D{u4};",
+ "\u6E22>F{e2}ng;",
+ "\u6E23>Zha;",
+ "\u6E24>B{o2};",
+ "\u6E25>W{o4};",
+ "\u6E26>Wo;",
+ "\u6E27>D{i4};",
+ "\u6E28>Wei;",
+ "\u6E29>Wen;",
+ "\u6E2A>R{u2};",
+ "\u6E2B>Xi{e4};",
+ "\u6E2C>C{e4};",
+ "\u6E2D>We{i4};",
+ "\u6E2E>Ge;",
+ "\u6E2F>G{a3}ng;",
+ "\u6E30>Y{a3}n;",
+ "\u6E31>H{o2}ng;",
+ "\u6E32>Xu{a4}n;",
+ "\u6E33>M{i3};",
+ "\u6E34>K{e3};",
+ "\u6E35>Ma{o2};",
+ "\u6E36>Ying;",
+ "\u6E37>Y{a3}n;",
+ "\u6E38>Yo{u2};",
+ "\u6E39>Hong;",
+ "\u6E3A>Mia{o3};",
+ "\u6E3B>X{i3}ng;",
+ "\u6E3C>Me{i3};",
+ "\u6E3D>Zai;",
+ "\u6E3E>H{u2}n;",
+ "\u6E3F>Na{i4};",
+ "\u6E40>Ku{i2};",
+ "\u6E41>Sh{i2};",
+ "\u6E42>{E4};",
+ "\u6E43>Pa{i4};",
+ "\u6E44>Me{i2};",
+ "\u6E45>Li{a4}n;",
+ "\u6E46>Q{i4};",
+ "\u6E47>Q{i4};",
+ "\u6E48>Me{i2};",
+ "\u6E49>Ti{a2}n;",
+ "\u6E4A>Co{u4};",
+ "\u6E4B>We{i2};",
+ "\u6E4C>Can;",
+ "\u6E4D>Tuan;",
+ "\u6E4E>Mi{a3}n;",
+ "\u6E4F>Hu{i4};",
+ "\u6E50>M{o4};",
+ "\u6E51>X{u3};",
+ "\u6E52>J{i2};",
+ "\u6E53>P{e2}n;",
+ "\u6E54>Jian;",
+ "\u6E55>Ji{a3}n;",
+ "\u6E56>H{u2};",
+ "\u6E57>F{e4}ng;",
+ "\u6E58>Xiang;",
+ "\u6E59>Y{i4};",
+ "\u6E5A>Y{i4}n;",
+ "\u6E5B>Zh{a4}n;",
+ "\u6E5C>Sh{i2};",
+ "\u6E5D>Jie;",
+ "\u6E5E>Ch{e2}ng;",
+ "\u6E5F>Hu{a2}ng;",
+ "\u6E60>T{a4}n;",
+ "\u6E61>Y{u2};",
+ "\u6E62>B{i4};",
+ "\u6E63>M{i3}n;",
+ "\u6E64>Shi;",
+ "\u6E65>T{u2};",
+ "\u6E66>Sheng;",
+ "\u6E67>Y{o3}ng;",
+ "\u6E68>Q{u4};",
+ "\u6E69>Zh{o4}ng;",
+ "\u6E6A>Sue{i4};",
+ "\u6E6B>Jiu;",
+ "\u6E6C>Jia{o3};",
+ "\u6E6D>Qio{u2};",
+ "\u6E6E>Yin;",
+ "\u6E6F>Tang;",
+ "\u6E70>L{o2}ng;",
+ "\u6E71>Hu{o4};",
+ "\u6E72>Yu{a2}n;",
+ "\u6E73>N{a3}n;",
+ "\u6E74>B{a4}n;",
+ "\u6E75>Yo{u3};",
+ "\u6E76>Qu{a2}n;",
+ "\u6E77>Chu{i2};",
+ "\u6E78>Li{a4}ng;",
+ "\u6E79>Ch{a2}n;",
+ "\u6E7A>Y{a2}n;",
+ "\u6E7B>Ch{u2}n;",
+ "\u6E7C>Ni{e4};",
+ "\u6E7D>Zi;",
+ "\u6E7E>Wan;",
+ "\u6E7F>Shi;",
+ "\u6E80>M{a3}n;",
+ "\u6E81>Y{i2}ng;",
+ "\u6E83>Ku{i4};",
+ "\u6E85>Ji{a4}n;",
+ "\u6E86>X{u4};",
+ "\u6E87>L{uu3};",
+ "\u6E88>Gui;",
+ "\u6E89>Ga{i4};",
+ "\u6E8C>Po;",
+ "\u6E8D>J{i4}n;",
+ "\u6E8E>Gu{i4};",
+ "\u6E8F>T{a2}ng;",
+ "\u6E90>Yu{a2}n;",
+ "\u6E91>Su{o3};",
+ "\u6E92>Yu{a2}n;",
+ "\u6E93>Li{a2}n;",
+ "\u6E94>Ya{o3};",
+ "\u6E95>M{e4}ng;",
+ "\u6E96>Zh{u3}n;",
+ "\u6E97>Sh{e2}ng;",
+ "\u6E98>K{e4};",
+ "\u6E99>Ta{i4};",
+ "\u6E9A>D{a2};",
+ "\u6E9B>Wa;",
+ "\u6E9C>Liu;",
+ "\u6E9D>Gou;",
+ "\u6E9E>Sao;",
+ "\u6E9F>M{i2}ng;",
+ "\u6EA0>Zh{a4};",
+ "\u6EA1>Sh{i2};",
+ "\u6EA2>Y{i4};",
+ "\u6EA3>L{u2}n;",
+ "\u6EA4>M{a3};",
+ "\u6EA5>P{u3};",
+ "\u6EA6>We{i2};",
+ "\u6EA7>L{i4};",
+ "\u6EA8>Ca{i2};",
+ "\u6EA9>W{u4};",
+ "\u6EAA>Xi;",
+ "\u6EAB>Wen;",
+ "\u6EAC>Qiang;",
+ "\u6EAD>Z{e2};",
+ "\u6EAE>Shi;",
+ "\u6EAF>S{u4};",
+ "\u6EB0>Yi;",
+ "\u6EB1>Zhen;",
+ "\u6EB2>Sou;",
+ "\u6EB3>Y{u2}n;",
+ "\u6EB4>Xi{u4};",
+ "\u6EB5>Yin;",
+ "\u6EB6>R{o2}ng;",
+ "\u6EB7>H{u4}n;",
+ "\u6EB8>S{u4};",
+ "\u6EB9>S{u4};",
+ "\u6EBA>N{i4};",
+ "\u6EBB>T{a4};",
+ "\u6EBC>Shi;",
+ "\u6EBD>R{u4};",
+ "\u6EBE>Wei;",
+ "\u6EBF>P{a4}n;",
+ "\u6EC0>Ch{u4};",
+ "\u6EC1>Ch{u2};",
+ "\u6EC2>Pang;",
+ "\u6EC3>W{e3}ng;",
+ "\u6EC4>Cang;",
+ "\u6EC5>Mi{e4};",
+ "\u6EC6>H{e2};",
+ "\u6EC7>Dian;",
+ "\u6EC8>Ha{o4};",
+ "\u6EC9>Hu{a3}ng;",
+ "\u6ECA>X{i4};",
+ "\u6ECB>Zi;",
+ "\u6ECC>D{i2};",
+ "\u6ECD>Zh{i3};",
+ "\u6ECE>Y{i2}ng;",
+ "\u6ECF>F{u3};",
+ "\u6ED0>Ji{e2};",
+ "\u6ED1>Hu{a2};",
+ "\u6ED2>Ge;",
+ "\u6ED3>Z{i3};",
+ "\u6ED4>Tao;",
+ "\u6ED5>T{e2}ng;",
+ "\u6ED6>Sui;",
+ "\u6ED7>B{i3};",
+ "\u6ED8>Jia{o4};",
+ "\u6ED9>Hu{i4};",
+ "\u6EDA>G{u3}n;",
+ "\u6EDB>Y{i2}n;",
+ "\u6EDC>Gao;",
+ "\u6EDD>L{o2}ng;",
+ "\u6EDE>Zh{i4};",
+ "\u6EDF>Y{a4}n;",
+ "\u6EE0>Sh{e4};",
+ "\u6EE1>M{a3}n;",
+ "\u6EE2>Y{i4}ng;",
+ "\u6EE3>Ch{u2}n;",
+ "\u6EE4>L{uu4};",
+ "\u6EE5>L{a4}n;",
+ "\u6EE6>Lu{a2}n;",
+ "\u6EE8>Bin;",
+ "\u6EE9>Tan;",
+ "\u6EEA>Y{u4};",
+ "\u6EEB>So{u3};",
+ "\u6EEC>H{u4};",
+ "\u6EED>B{i4};",
+ "\u6EEE>Biao;",
+ "\u6EEF>Zh{i4};",
+ "\u6EF0>Ji{a3}ng;",
+ "\u6EF1>Ko{u4};",
+ "\u6EF2>Sh{e4}n;",
+ "\u6EF3>Shang;",
+ "\u6EF4>Di;",
+ "\u6EF5>M{i4};",
+ "\u6EF6>A{o2};",
+ "\u6EF7>L{u3};",
+ "\u6EF8>H{u3};",
+ "\u6EF9>Hu;",
+ "\u6EFA>Yo{u2};",
+ "\u6EFB>Ch{a3}n;",
+ "\u6EFC>F{a4}n;",
+ "\u6EFD>Y{o2}ng;",
+ "\u6EFE>G{u3}n;",
+ "\u6EFF>M{a3}n;",
+ "\u6F00>Q{i4}ng;",
+ "\u6F01>Y{u2};",
+ "\u6F02>Piao;",
+ "\u6F03>J{i2};",
+ "\u6F04>Y{a2};",
+ "\u6F05>Jia{o3};",
+ "\u6F06>Qi;",
+ "\u6F07>X{i3};",
+ "\u6F08>J{i4};",
+ "\u6F09>L{u4};",
+ "\u6F0A>L{uu3};",
+ "\u6F0B>L{o2}ng;",
+ "\u6F0C>J{i3}n;",
+ "\u6F0D>Gu{o2};",
+ "\u6F0E>C{o2}ng;",
+ "\u6F0F>Lo{u4};",
+ "\u6F10>Zh{i2};",
+ "\u6F11>Ga{i4};",
+ "\u6F12>Qi{a2}ng;",
+ "\u6F13>L{i2};",
+ "\u6F14>Y{a3}n;",
+ "\u6F15>Ca{o2};",
+ "\u6F16>Jia{o4};",
+ "\u6F17>Cong;",
+ "\u6F18>Q{u2}n;",
+ "\u6F19>Tu{a2}n;",
+ "\u6F1A>O{u4};",
+ "\u6F1B>T{e2}ng;",
+ "\u6F1C>Y{e3};",
+ "\u6F1D>X{i2};",
+ "\u6F1E>M{i4};",
+ "\u6F1F>T{a2}ng;",
+ "\u6F20>M{o4};",
+ "\u6F21>Shang;",
+ "\u6F22>H{a4}n;",
+ "\u6F23>Li{a2}n;",
+ "\u6F24>L{a3}n;",
+ "\u6F25>Wa;",
+ "\u6F26>L{i2};",
+ "\u6F27>Qi{a2}n;",
+ "\u6F28>F{e2}ng;",
+ "\u6F29>Xu{a2}n;",
+ "\u6F2A>Yi;",
+ "\u6F2B>M{a4}n;",
+ "\u6F2C>Z{i4};",
+ "\u6F2D>M{a3}ng;",
+ "\u6F2E>Kang;",
+ "\u6F2F>Le{i3};",
+ "\u6F30>Peng;",
+ "\u6F31>Sh{u4};",
+ "\u6F32>Zh{a3}ng;",
+ "\u6F33>Zhang;",
+ "\u6F34>Ch{o2}ng;",
+ "\u6F35>X{u4};",
+ "\u6F36>Hu{a4}n;",
+ "\u6F37>Ku{o4};",
+ "\u6F38>Ji{a4}n;",
+ "\u6F39>Yan;",
+ "\u6F3A>Chu{a3}ng;",
+ "\u6F3B>Lia{o2};",
+ "\u6F3C>Cu{i3};",
+ "\u6F3D>T{i2};",
+ "\u6F3E>Y{a4}ng;",
+ "\u6F3F>Jiang;",
+ "\u6F40>C{o2}ng;",
+ "\u6F41>Y{i3}ng;",
+ "\u6F42>H{o2}ng;",
+ "\u6F43>X{u2}n;",
+ "\u6F44>Sh{u4};",
+ "\u6F45>Gu{a4}n;",
+ "\u6F46>Y{i2}ng;",
+ "\u6F47>Xiao;",
+ "\u6F4A>X{u4};",
+ "\u6F4B>Li{a4}n;",
+ "\u6F4C>Zh{i4};",
+ "\u6F4D>We{i2};",
+ "\u6F4E>P{i4};",
+ "\u6F4F>Ju{e2};",
+ "\u6F50>Jia{o4};",
+ "\u6F51>Po;",
+ "\u6F52>D{a4}ng;",
+ "\u6F53>Hu{i4};",
+ "\u6F54>Ji{e2};",
+ "\u6F55>W{u3};",
+ "\u6F56>P{a2};",
+ "\u6F57>J{i2};",
+ "\u6F58>Pan;",
+ "\u6F59>Gu{i2};",
+ "\u6F5A>Xiao;",
+ "\u6F5B>Qi{a2}n;",
+ "\u6F5C>Qi{a2}n;",
+ "\u6F5D>Xi;",
+ "\u6F5E>L{u4};",
+ "\u6F5F>X{i4};",
+ "\u6F60>Xu{a4}n;",
+ "\u6F61>D{u4}n;",
+ "\u6F62>Hu{a2}ng;",
+ "\u6F63>M{i3}n;",
+ "\u6F64>R{u4}n;",
+ "\u6F65>S{u4};",
+ "\u6F66>Lia{o2};",
+ "\u6F67>Zhen;",
+ "\u6F68>Zhong;",
+ "\u6F69>Y{i4};",
+ "\u6F6A>D{i2};",
+ "\u6F6B>Wan;",
+ "\u6F6C>D{a4}n;",
+ "\u6F6D>T{a2}n;",
+ "\u6F6E>Cha{o2};",
+ "\u6F6F>X{u2}n;",
+ "\u6F70>Ku{i4};",
+ "\u6F71>Yie;",
+ "\u6F72>Sha{o4};",
+ "\u6F73>T{u2};",
+ "\u6F74>Zhu;",
+ "\u6F75>S{a4}n;",
+ "\u6F76>Hei;",
+ "\u6F77>B{i3};",
+ "\u6F78>Shan;",
+ "\u6F79>Ch{a2}n;",
+ "\u6F7A>Ch{a2}n;",
+ "\u6F7B>Sh{u3};",
+ "\u6F7C>T{o2}ng;",
+ "\u6F7D>P{u3};",
+ "\u6F7E>L{i2}n;",
+ "\u6F7F>We{i2};",
+ "\u6F80>S{e4};",
+ "\u6F81>S{e4};",
+ "\u6F82>Ch{e2}ng;",
+ "\u6F83>Ji{o4}ng;",
+ "\u6F84>Ch{e2}ng;",
+ "\u6F85>Hu{a4};",
+ "\u6F86>Jiao;",
+ "\u6F87>La{o4};",
+ "\u6F88>Ch{e4};",
+ "\u6F89>G{a3}n;",
+ "\u6F8A>Cun;",
+ "\u6F8B>H{e4}ng;",
+ "\u6F8C>Si;",
+ "\u6F8D>Sh{u4};",
+ "\u6F8E>P{e2}ng;",
+ "\u6F8F>H{a4}n;",
+ "\u6F90>Y{u2}n;",
+ "\u6F91>Li{u4};",
+ "\u6F92>H{o4}ng;",
+ "\u6F93>F{u2};",
+ "\u6F94>Ha{o4};",
+ "\u6F95>H{e2};",
+ "\u6F96>Xian;",
+ "\u6F97>Ji{a4}n;",
+ "\u6F98>Shan;",
+ "\u6F99>X{i4};",
+ "\u6F9C>L{a2}n;",
+ "\u6F9E>Y{u2};",
+ "\u6F9F>L{i3}n;",
+ "\u6FA0>M{i3}n;",
+ "\u6FA1>Za{o3};",
+ "\u6FA2>Dang;",
+ "\u6FA3>W{a3}n;",
+ "\u6FA4>Z{e2};",
+ "\u6FA5>Xi{e4};",
+ "\u6FA6>Y{u4};",
+ "\u6FA7>L{i3};",
+ "\u6FA8>Sh{i4};",
+ "\u6FA9>Xu{e2};",
+ "\u6FAA>L{i2}ng;",
+ "\u6FAB>M{a4}n;",
+ "\u6FAC>Zi;",
+ "\u6FAD>Yong;",
+ "\u6FAE>Kua{i4};",
+ "\u6FAF>C{a4}n;",
+ "\u6FB0>Li{a4}n;",
+ "\u6FB1>Di{a4}n;",
+ "\u6FB2>Y{e4};",
+ "\u6FB3>A{o4};",
+ "\u6FB4>Hu{a2}n;",
+ "\u6FB5>Zhen;",
+ "\u6FB6>Ch{a2}n;",
+ "\u6FB7>M{a4}n;",
+ "\u6FB8>D{a3}n;",
+ "\u6FB9>D{a4}n;",
+ "\u6FBA>Y{i4};",
+ "\u6FBB>Su{i4};",
+ "\u6FBC>P{i4};",
+ "\u6FBD>J{u4};",
+ "\u6FBE>T{a4};",
+ "\u6FBF>Q{i2}n;",
+ "\u6FC0>Ji;",
+ "\u6FC1>Zhu{o2};",
+ "\u6FC2>Li{a2}n;",
+ "\u6FC3>N{o2}ng;",
+ "\u6FC4>Guo;",
+ "\u6FC5>J{i4}n;",
+ "\u6FC6>F{e2}n;",
+ "\u6FC7>S{e4};",
+ "\u6FC8>J{i2};",
+ "\u6FC9>Sui;",
+ "\u6FCA>Hu{i4};",
+ "\u6FCB>Ch{u3};",
+ "\u6FCC>T{a4};",
+ "\u6FCD>Song;",
+ "\u6FCE>D{i3}ng;",
+ "\u6FD0>Zh{u3};",
+ "\u6FD1>La{i4};",
+ "\u6FD2>Bin;",
+ "\u6FD3>Li{a2}n;",
+ "\u6FD4>M{i3};",
+ "\u6FD5>Shi;",
+ "\u6FD6>Sh{u4};",
+ "\u6FD7>M{i4};",
+ "\u6FD8>N{i4}ng;",
+ "\u6FD9>Y{i2}ng;",
+ "\u6FDA>Y{i2}ng;",
+ "\u6FDB>M{e2}ng;",
+ "\u6FDC>J{i4}n;",
+ "\u6FDD>Q{i2};",
+ "\u6FDE>P{i4};",
+ "\u6FDF>J{i4};",
+ "\u6FE0>Ha{o2};",
+ "\u6FE1>R{u2};",
+ "\u6FE2>Zu{i3};",
+ "\u6FE3>W{o4};",
+ "\u6FE4>Tao;",
+ "\u6FE5>Y{i4}n;",
+ "\u6FE6>Y{i3}n;",
+ "\u6FE7>Du{i4};",
+ "\u6FE8>C{i2};",
+ "\u6FE9>Hu{o4};",
+ "\u6FEA>J{i4}ng;",
+ "\u6FEB>L{a4}n;",
+ "\u6FEC>J{u4}n;",
+ "\u6FED>A{i4};",
+ "\u6FEE>Pu;",
+ "\u6FEF>Zhu{o2};",
+ "\u6FF0>We{i2};",
+ "\u6FF1>Bin;",
+ "\u6FF2>G{u3};",
+ "\u6FF3>Qi{a2}n;",
+ "\u6FF4>X{i2}ng;",
+ "\u6FF6>Ku{o4};",
+ "\u6FF7>Fe{i4};",
+ "\u6FFA>Ji{a4}n;",
+ "\u6FFB>We{i3};",
+ "\u6FFC>Lu{o4};",
+ "\u6FFD>Z{a4}n;",
+ "\u6FFE>L{uu4};",
+ "\u6FFF>L{i4};",
+ "\u7000>You;",
+ "\u7001>Y{a4}ng;",
+ "\u7002>L{u3};",
+ "\u7003>S{i4};",
+ "\u7004>Ji{e2};",
+ "\u7005>Y{i4}ng;",
+ "\u7006>D{u2};",
+ "\u7007>W{a3}ng;",
+ "\u7008>Hui;",
+ "\u7009>Xi{e4};",
+ "\u700A>P{a2}n;",
+ "\u700B>Sh{e3}n;",
+ "\u700C>Biao;",
+ "\u700D>Ch{a2}n;",
+ "\u700E>M{o4};",
+ "\u700F>Li{u2};",
+ "\u7010>Jian;",
+ "\u7011>P{u4};",
+ "\u7012>S{e4};",
+ "\u7013>Ch{e2}ng;",
+ "\u7014>G{u3};",
+ "\u7015>Bin;",
+ "\u7016>Hu{o4};",
+ "\u7017>Xi{a4}n;",
+ "\u7018>L{u2};",
+ "\u7019>Qin;",
+ "\u701A>H{a4}n;",
+ "\u701B>Y{i2}ng;",
+ "\u701C>Yong;",
+ "\u701D>L{i4};",
+ "\u701E>J{i4}ng;",
+ "\u701F>Xiao;",
+ "\u7020>Y{i2}ng;",
+ "\u7021>Su{i3};",
+ "\u7022>We{i2};",
+ "\u7023>Xi{e4};",
+ "\u7024>Hua{i2};",
+ "\u7025>Ha{o4};",
+ "\u7026>Zhu;",
+ "\u7027>L{o2}ng;",
+ "\u7028>La{i4};",
+ "\u7029>Du{i4};",
+ "\u702A>F{a2}n;",
+ "\u702B>H{u2};",
+ "\u702C>La{i4};",
+ "\u702F>Y{i2}ng;",
+ "\u7030>M{i2};",
+ "\u7031>J{i4};",
+ "\u7032>Li{a4}n;",
+ "\u7033>Ji{a4}n;",
+ "\u7034>Y{i3}ng;",
+ "\u7035>F{e4}n;",
+ "\u7036>L{i2}n;",
+ "\u7037>Y{i4};",
+ "\u7038>Jian;",
+ "\u7039>Yu{e4};",
+ "\u703A>Ch{a2}n;",
+ "\u703B>Da{i4};",
+ "\u703C>R{a2}ng;",
+ "\u703D>Ji{a3}n;",
+ "\u703E>L{a2}n;",
+ "\u703F>F{a2}n;",
+ "\u7040>Shu{a4}ng;",
+ "\u7041>Yuan;",
+ "\u7042>Zhu{o2};",
+ "\u7043>Feng;",
+ "\u7044>Sh{e4};",
+ "\u7045>Le{i3};",
+ "\u7046>L{a2}n;",
+ "\u7047>C{o2}ng;",
+ "\u7048>Q{u2};",
+ "\u7049>Yong;",
+ "\u704A>Qi{a2}n;",
+ "\u704B>F{a3};",
+ "\u704C>Gu{a4}n;",
+ "\u704D>Qu{e4};",
+ "\u704E>Y{a4}n;",
+ "\u704F>Ha{o4};",
+ "\u7051>S{a3};",
+ "\u7052>Z{a4}n;",
+ "\u7053>Lu{a2}n;",
+ "\u7054>Y{a4}n;",
+ "\u7055>L{i2};",
+ "\u7056>M{i3};",
+ "\u7057>Sh{a4}n;",
+ "\u7058>Tan;",
+ "\u7059>D{a3}ng;",
+ "\u705A>Jia{o3};",
+ "\u705B>Ch{a3}n;",
+ "\u705D>Ha{o4};",
+ "\u705E>B{a4};",
+ "\u705F>Zh{u2};",
+ "\u7060>L{a3}n;",
+ "\u7061>L{a2}n;",
+ "\u7062>N{a3}ng;",
+ "\u7063>Wan;",
+ "\u7064>Lu{a2}n;",
+ "\u7065>X{u2}n;",
+ "\u7066>Xi{a3}n;",
+ "\u7067>Y{a4}n;",
+ "\u7068>G{a3}n;",
+ "\u7069>Y{a4}n;",
+ "\u706A>Y{u4};",
+ "\u706B>Hu{o3};",
+ "\u706C>Si4dian3hu{o3};",
+ "\u706D>Mi{e4};",
+ "\u706E>Guang;",
+ "\u706F>Deng;",
+ "\u7070>Hui;",
+ "\u7071>Xiao;",
+ "\u7072>Xiao;",
+ "\u7073>Hu1;",
+ "\u7074>H{o2}ng;",
+ "\u7075>L{i2}ng;",
+ "\u7076>Za{o4};",
+ "\u7077>Zhu{a4}n;",
+ "\u7078>Ji{u3};",
+ "\u7079>Zh{a4};",
+ "\u707A>Xi{e4};",
+ "\u707B>Ch{i4};",
+ "\u707C>Zhu{o2};",
+ "\u707D>Zai;",
+ "\u707E>Zai;",
+ "\u707F>C{a4}n;",
+ "\u7080>Y{a2}ng;",
+ "\u7081>Q{i4};",
+ "\u7082>Zhong;",
+ "\u7083>F{e2}n;",
+ "\u7084>Ni{u3};",
+ "\u7085>Ji{o3}ng;",
+ "\u7086>W{e2}n;",
+ "\u7087>P{o4};",
+ "\u7088>Y{i4};",
+ "\u7089>L{u2};",
+ "\u708A>Chui;",
+ "\u708B>Pi;",
+ "\u708C>Ka{i4};",
+ "\u708D>P{a4}n;",
+ "\u708E>Y{a2}n;",
+ "\u708F>Ka{i4};",
+ "\u7090>P{a4}ng;",
+ "\u7091>M{u4};",
+ "\u7092>Cha{o3};",
+ "\u7093>Lia{o4};",
+ "\u7094>Gu{i4};",
+ "\u7095>K{a4}ng;",
+ "\u7096>Tun;",
+ "\u7097>Guang;",
+ "\u7098>Xin;",
+ "\u7099>Zh{i4};",
+ "\u709A>Guang;",
+ "\u709B>Guang;",
+ "\u709C>We{i3};",
+ "\u709D>Qi{a4}ng;",
+ "\u709F>D{a2};",
+ "\u70A0>Xi{a2};",
+ "\u70A1>Zheng;",
+ "\u70A2>Zh{u2};",
+ "\u70A3>K{e3};",
+ "\u70A4>Zha{o4};",
+ "\u70A5>F{u2};",
+ "\u70A6>B{a2};",
+ "\u70A7>Du{o4};",
+ "\u70A8>Du{o4};",
+ "\u70A9>L{i4}ng;",
+ "\u70AA>Zhu{o2};",
+ "\u70AB>Xu{a4}n;",
+ "\u70AC>J{u4};",
+ "\u70AD>T{a4}n;",
+ "\u70AE>Pa{o4};",
+ "\u70AF>Ji{o3}ng;",
+ "\u70B0>Pa{o2};",
+ "\u70B1>Ta{i2};",
+ "\u70B2>Ta{i2};",
+ "\u70B3>B{i3}ng;",
+ "\u70B4>Y{a3}ng;",
+ "\u70B5>Tong;",
+ "\u70B6>Han;",
+ "\u70B7>Zh{u4};",
+ "\u70B8>Zh{a4};",
+ "\u70B9>Di{a3}n;",
+ "\u70BA>We{i4};",
+ "\u70BB>Sh{i2};",
+ "\u70BC>Li{a4}n;",
+ "\u70BD>Ch{i4};",
+ "\u70BE>Hu{a3}ng;",
+ "\u70C0>Hu;",
+ "\u70C1>Shu{o4};",
+ "\u70C2>L{a4}n;",
+ "\u70C3>J{i3}ng;",
+ "\u70C4>Jia{o3};",
+ "\u70C5>X{u4};",
+ "\u70C6>X{i2}ng;",
+ "\u70C7>Qu{a4}n;",
+ "\u70C8>Li{e4};",
+ "\u70C9>Hu{a4}n;",
+ "\u70CA>Y{a2}ng;",
+ "\u70CB>Xiao;",
+ "\u70CC>Xiu;",
+ "\u70CD>Xi{a3}n;",
+ "\u70CE>Y{i2}n;",
+ "\u70CF>Wu;",
+ "\u70D0>Zhou;",
+ "\u70D1>Ya{o2};",
+ "\u70D2>Sh{i4};",
+ "\u70D3>Wei;",
+ "\u70D4>T{o2}ng;",
+ "\u70D5>Xu{e4};",
+ "\u70D6>Zai;",
+ "\u70D7>Ka{i4};",
+ "\u70D8>Hong;",
+ "\u70D9>Lu{o4};",
+ "\u70DA>Xi{a2};",
+ "\u70DB>Zh{u2};",
+ "\u70DC>Xu{a3}n;",
+ "\u70DD>Zheng;",
+ "\u70DE>P{o4};",
+ "\u70DF>Yan;",
+ "\u70E0>Hu{i3};",
+ "\u70E1>Guang;",
+ "\u70E2>Zh{e4};",
+ "\u70E3>Hui;",
+ "\u70E4>Ka{o3};",
+ "\u70E6>F{a2}n;",
+ "\u70E7>Shao;",
+ "\u70E8>Y{e4};",
+ "\u70E9>Hu{i4};",
+ "\u70EB>T{a4}ng;",
+ "\u70EC>J{i4}n;",
+ "\u70ED>R{e4};",
+ "\u70EF>Xi;",
+ "\u70F0>F{u2};",
+ "\u70F1>Ji{o3}ng;",
+ "\u70F2>Ch{e4};",
+ "\u70F3>P{u3};",
+ "\u70F4>J{i3}ng;",
+ "\u70F5>Zhu{o2};",
+ "\u70F6>T{i3}ng;",
+ "\u70F7>W{a2}n;",
+ "\u70F8>Ha{i3};",
+ "\u70F9>Peng;",
+ "\u70FA>L{a3}ng;",
+ "\u70FB>Shan;",
+ "\u70FC>Hu;",
+ "\u70FD>Feng;",
+ "\u70FE>Ch{i4};",
+ "\u70FF>R{o2}ng;",
+ "\u7100>H{u2};",
+ "\u7101>Xi;",
+ "\u7102>Sh{u2};",
+ "\u7103>H{e4};",
+ "\u7104>Xun;",
+ "\u7105>K{u4};",
+ "\u7106>Ju{e2};",
+ "\u7107>Xiao;",
+ "\u7108>Xi;",
+ "\u7109>Yan;",
+ "\u710A>H{a4}n;",
+ "\u710B>Zhu{a4}ng;",
+ "\u710C>J{u4}n;",
+ "\u710D>D{i4};",
+ "\u710E>Xi{e4};",
+ "\u710F>J{i2};",
+ "\u7110>W{u4};",
+ "\u7113>H{a2}n;",
+ "\u7114>Y{a4}n;",
+ "\u7115>Hu{a4}n;",
+ "\u7116>M{e4}n;",
+ "\u7117>J{u2};",
+ "\u7118>Cho{u2};",
+ "\u7119>Be{i4};",
+ "\u711A>F{e2}n;",
+ "\u711B>L{i4}n;",
+ "\u711C>Kun;",
+ "\u711D>H{u4}n;",
+ "\u711E>Tun;",
+ "\u711F>X{i2};",
+ "\u7120>Cu{i4};",
+ "\u7121>W{u2};",
+ "\u7122>Hong;",
+ "\u7123>J{u4};",
+ "\u7124>F{u3};",
+ "\u7125>W{o4};",
+ "\u7126>Jiao;",
+ "\u7127>Cong;",
+ "\u7128>F{e4}ng;",
+ "\u7129>Ping;",
+ "\u712A>Qiong;",
+ "\u712B>Ru{o4};",
+ "\u712C>X{i2};",
+ "\u712D>Qi{o2}ng;",
+ "\u712E>X{i4}n;",
+ "\u712F>Zhu{o2};",
+ "\u7130>Y{a4}n;",
+ "\u7131>Y{a4}n;",
+ "\u7132>Y{i4};",
+ "\u7133>Ju{e2};",
+ "\u7134>Y{u4};",
+ "\u7135>G{a4}ng;",
+ "\u7136>R{a2}n;",
+ "\u7137>P{i2};",
+ "\u7138>G{u3};",
+ "\u713A>Sheng;",
+ "\u713B>Ch{a4}ng;",
+ "\u713C>Shao;",
+ "\u7141>Ch{e2}n;",
+ "\u7142>H{e4};",
+ "\u7143>Ku{i3};",
+ "\u7144>Zhong;",
+ "\u7145>Du{a4}n;",
+ "\u7146>Xia;",
+ "\u7147>Hui;",
+ "\u7148>F{e4}ng;",
+ "\u7149>Li{a4}n;",
+ "\u714A>Xuan;",
+ "\u714B>Xing;",
+ "\u714C>Hu{a2}ng;",
+ "\u714D>Jia{o3};",
+ "\u714E>Jian;",
+ "\u714F>B{i4};",
+ "\u7150>Ying;",
+ "\u7151>Zh{u3};",
+ "\u7152>We{i3};",
+ "\u7153>Tuan;",
+ "\u7154>Ti{a4}n;",
+ "\u7155>Xi;",
+ "\u7156>Nu{a3}n;",
+ "\u7157>Nu{a3}n;",
+ "\u7158>Ch{a2}n;",
+ "\u7159>Yan;",
+ "\u715A>Ji{o3}ng;",
+ "\u715B>Ji{o3}ng;",
+ "\u715C>Y{u4};",
+ "\u715D>Me{i4};",
+ "\u715E>Sh{a4};",
+ "\u715F>We{i4};",
+ "\u7160>Y{e4};",
+ "\u7161>X{i4}n;",
+ "\u7162>Qi{o2}ng;",
+ "\u7163>Ro{u3};",
+ "\u7164>Me{i2};",
+ "\u7165>Hu{a4}n;",
+ "\u7166>X{u3};",
+ "\u7167>Zha{o4};",
+ "\u7168>Wei;",
+ "\u7169>F{a2}n;",
+ "\u716A>Qi{u2};",
+ "\u716B>Su{i4};",
+ "\u716C>Y{a2}ng;",
+ "\u716D>Li{e4};",
+ "\u716E>Zh{u3};",
+ "\u716F>Jie;",
+ "\u7170>Ga{o4};",
+ "\u7171>Gua;",
+ "\u7172>Ba{o4};",
+ "\u7173>H{u2};",
+ "\u7174>Yun;",
+ "\u7175>Xia;",
+ "\u7178>Bian;",
+ "\u7179>Go{u4};",
+ "\u717A>Tu{i4};",
+ "\u717B>T{a2}ng;",
+ "\u717C>Cha{o3};",
+ "\u717D>Shan;",
+ "\u717E>N;",
+ "\u717F>B{o2};",
+ "\u7180>Hu{a3}ng;",
+ "\u7181>Xi{e2};",
+ "\u7182>X{i4};",
+ "\u7183>W{u4};",
+ "\u7184>X{i2};",
+ "\u7185>Y{u2}n;",
+ "\u7186>H{e2};",
+ "\u7187>H{e4};",
+ "\u7188>Xi;",
+ "\u7189>Y{u2}n;",
+ "\u718A>Xi{o2}ng;",
+ "\u718B>Na{i2};",
+ "\u718C>Sh{a4}n;",
+ "\u718D>Qiong;",
+ "\u718E>Ya{o4};",
+ "\u718F>Xun;",
+ "\u7190>M{i4};",
+ "\u7191>Li{a2}n;",
+ "\u7192>Y{i2}ng;",
+ "\u7193>W{e4}n;",
+ "\u7194>R{o2}ng;",
+ "\u7197>Qi{a4}ng;",
+ "\u7198>Liu;",
+ "\u7199>Xi;",
+ "\u719A>B{i4};",
+ "\u719B>Biao;",
+ "\u719C>Z{o3}ng;",
+ "\u719D>L{u4};",
+ "\u719E>Jian;",
+ "\u719F>Sho{u2};",
+ "\u71A0>Y{i4};",
+ "\u71A1>Lo{u2};",
+ "\u71A2>Feng;",
+ "\u71A3>Sui;",
+ "\u71A4>Y{i4};",
+ "\u71A5>Tong;",
+ "\u71A6>Ju{e2};",
+ "\u71A7>Zong;",
+ "\u71A8>Y{u4}n;",
+ "\u71A9>H{u4};",
+ "\u71AA>Y{i2};",
+ "\u71AB>Zh{i4};",
+ "\u71AC>A{o2};",
+ "\u71AD>We{i4};",
+ "\u71AE>Lia{o2};",
+ "\u71AF>H{a4}n;",
+ "\u71B0>Ou;",
+ "\u71B1>R{e4};",
+ "\u71B2>Ji{o3}ng;",
+ "\u71B3>M{a4}n;",
+ "\u71B5>Shang;",
+ "\u71B6>Cu{a4}n;",
+ "\u71B7>Zeng;",
+ "\u71B8>Jian;",
+ "\u71B9>Xi;",
+ "\u71BA>Xi;",
+ "\u71BB>Xi;",
+ "\u71BC>Y{i4};",
+ "\u71BD>Xia{o4};",
+ "\u71BE>Ch{i4};",
+ "\u71BF>Hu{a2}ng;",
+ "\u71C0>Ch{a3}n;",
+ "\u71C1>Y{e4};",
+ "\u71C2>Qi{a2}n;",
+ "\u71C3>R{a2}n;",
+ "\u71C4>Y{a4}n;",
+ "\u71C5>Xi{a2}n;",
+ "\u71C6>Qia{o2};",
+ "\u71C7>Z{u4}n;",
+ "\u71C8>Deng;",
+ "\u71C9>D{u4}n;",
+ "\u71CA>Shen;",
+ "\u71CB>Jiao;",
+ "\u71CC>F{e2}n;",
+ "\u71CD>Si;",
+ "\u71CE>Lia{o4};",
+ "\u71CF>Y{u4};",
+ "\u71D0>L{i2}n;",
+ "\u71D1>T{o2}ng;",
+ "\u71D2>Shao;",
+ "\u71D3>Fen;",
+ "\u71D4>F{a2}n;",
+ "\u71D5>Y{a4}n;",
+ "\u71D6>X{u2}n;",
+ "\u71D7>L{a4}n;",
+ "\u71D8>Me{i3};",
+ "\u71D9>T{a4}ng;",
+ "\u71DA>Yi;",
+ "\u71DB>J{i3}ng;",
+ "\u71DC>M{e4}n;",
+ "\u71DF>Y{i2}ng;",
+ "\u71E0>Y{u4};",
+ "\u71E1>Y{i4};",
+ "\u71E2>Xu{e2};",
+ "\u71E3>L{a2}n;",
+ "\u71E4>Ta{i4};",
+ "\u71E5>Za{o4};",
+ "\u71E6>C{a4}n;",
+ "\u71E7>Su{i4};",
+ "\u71E8>Xi;",
+ "\u71E9>Qu{e4};",
+ "\u71EA>Cong;",
+ "\u71EB>Li{a2}n;",
+ "\u71EC>Hu{i3};",
+ "\u71ED>Zh{u2};",
+ "\u71EE>Xi{e4};",
+ "\u71EF>L{i2}ng;",
+ "\u71F0>Wei;",
+ "\u71F1>Y{i4};",
+ "\u71F2>Xi{e2};",
+ "\u71F3>Zha{o4};",
+ "\u71F4>Hu{i4};",
+ "\u71F7>L{a2}n;",
+ "\u71F8>R{u2};",
+ "\u71F9>Xi{a3}n;",
+ "\u71FA>Ka{o3};",
+ "\u71FB>Xun;",
+ "\u71FC>J{i4}n;",
+ "\u71FD>Cho{u2};",
+ "\u71FE>Cho{u2};",
+ "\u71FF>Ya{o4};",
+ "\u7200>H{e4};",
+ "\u7201>L{a4}n;",
+ "\u7202>Biao;",
+ "\u7203>R{o2}ng;",
+ "\u7204>L{i4};",
+ "\u7205>M{o4};",
+ "\u7206>Ba{o4};",
+ "\u7207>Ru{o4};",
+ "\u7208>L{uu2};",
+ "\u7209>L{a4};",
+ "\u720A>A{o2};",
+ "\u720B>X{u4}n;",
+ "\u720C>Ku{a4}ng;",
+ "\u720D>Shu{o4};",
+ "\u720F>L{i4};",
+ "\u7210>L{u2};",
+ "\u7211>Ju{e2};",
+ "\u7212>Lia{o4};",
+ "\u7213>Y{a4}n;",
+ "\u7214>Xi;",
+ "\u7215>Xi{e4};",
+ "\u7216>L{o2}ng;",
+ "\u7217>Y{e4};",
+ "\u7219>R{a3}ng;",
+ "\u721A>Yu{e4};",
+ "\u721B>L{a4}n;",
+ "\u721C>C{o2}ng;",
+ "\u721D>Ju{e2};",
+ "\u721E>T{o2}ng;",
+ "\u721F>Gu{a4}n;",
+ "\u7221>Ch{e4};",
+ "\u7222>M{i2};",
+ "\u7223>T{a3}ng;",
+ "\u7224>L{a4}n;",
+ "\u7225>Zh{u2};",
+ "\u7227>L{i2}ng;",
+ "\u7228>Cu{a4}n;",
+ "\u7229>Y{u4};",
+ "\u722A>Zhu{a3};",
+ "\u722C>P{a2};",
+ "\u722D>Zheng;",
+ "\u722E>Pa{o2};",
+ "\u722F>Cheng;",
+ "\u7230>Yu{a2}n;",
+ "\u7231>A{i4};",
+ "\u7232>We{i4};",
+ "\u7234>Ju{e2};",
+ "\u7235>Ju{e2};",
+ "\u7236>F{u4};",
+ "\u7237>Y{e2};",
+ "\u7238>B{a4};",
+ "\u7239>Die;",
+ "\u723A>Y{e2};",
+ "\u723B>Ya{o2};",
+ "\u723C>Z{u3};",
+ "\u723D>Shu{a3}ng;",
+ "\u723E>{e3}r;",
+ "\u723F>Qi{a2}ng;",
+ "\u7240>Chu{a2}ng;",
+ "\u7241>Ge;",
+ "\u7242>Zang;",
+ "\u7243>Di{e2};",
+ "\u7244>Qiang;",
+ "\u7245>Y{o2}ng;",
+ "\u7246>Qi{a2}ng;",
+ "\u7247>Pi{a4}n;",
+ "\u7248>B{a3}n;",
+ "\u7249>P{a4}n;",
+ "\u724A>Sha{o2};",
+ "\u724B>Jian;",
+ "\u724C>Pa{i2};",
+ "\u724D>D{u2};",
+ "\u724E>Chuang;",
+ "\u724F>To{u2};",
+ "\u7250>Zh{a2};",
+ "\u7251>Bian;",
+ "\u7252>Di{e2};",
+ "\u7253>B{a3}ng;",
+ "\u7254>B{o2};",
+ "\u7255>Chuang;",
+ "\u7256>Yo{u3};",
+ "\u7258>D{u2};",
+ "\u7259>Y{a2};",
+ "\u725A>Ch{e4}ng;",
+ "\u725B>Ni{u2};",
+ "\u725D>P{i4}n;",
+ "\u725E>Jiu;",
+ "\u725F>Mo{u2};",
+ "\u7260>Tuo;",
+ "\u7261>M{u3};",
+ "\u7262>La{o2};",
+ "\u7263>R{e4}n;",
+ "\u7264>M{a2}ng;",
+ "\u7265>Fang;",
+ "\u7266>Ma{o2};",
+ "\u7267>M{u4};",
+ "\u7268>Gang;",
+ "\u7269>W{u4};",
+ "\u726A>Y{a4}n;",
+ "\u726B>Ge;",
+ "\u726C>Be{i4};",
+ "\u726D>S{i4};",
+ "\u726E>Ji{a4}n;",
+ "\u726F>G{u3};",
+ "\u7270>Yo{u4};",
+ "\u7271>Ge;",
+ "\u7272>Sheng;",
+ "\u7273>M{u3};",
+ "\u7274>D{i3};",
+ "\u7275>Qian;",
+ "\u7276>Qu{a4}n;",
+ "\u7277>Qu{a2}n;",
+ "\u7278>Z{i4};",
+ "\u7279>T{e4};",
+ "\u727A>Xi;",
+ "\u727B>M{a2}ng;",
+ "\u727C>Keng;",
+ "\u727D>Qian;",
+ "\u727E>W{u2};",
+ "\u727F>G{u4};",
+ "\u7280>Xi;",
+ "\u7281>L{i2};",
+ "\u7282>L{i2};",
+ "\u7283>Po{u3};",
+ "\u7284>Ji;",
+ "\u7285>Gang;",
+ "\u7286>Zh{i2};",
+ "\u7287>Ben;",
+ "\u7288>Qu{a2}n;",
+ "\u7289>R{u2}n;",
+ "\u728A>D{u2};",
+ "\u728B>J{u4};",
+ "\u728C>Jia;",
+ "\u728D>Jian;",
+ "\u728E>Feng;",
+ "\u728F>Pian;",
+ "\u7290>Ke;",
+ "\u7291>J{u2};",
+ "\u7292>Ka{o4};",
+ "\u7293>Ch{u2};",
+ "\u7294>X{i4};",
+ "\u7295>Be{i4};",
+ "\u7296>Lu{o4};",
+ "\u7297>Ji{e4};",
+ "\u7298>M{a2};",
+ "\u7299>San;",
+ "\u729A>We{i4};",
+ "\u729B>L{i2};",
+ "\u729C>Dun;",
+ "\u729D>T{o2}ng;",
+ "\u729F>Ji{a4}ng;",
+ "\u72A1>L{i4};",
+ "\u72A2>D{u2};",
+ "\u72A3>Li{e4};",
+ "\u72A4>P{i2};",
+ "\u72A5>Pia{o3};",
+ "\u72A6>Ba{o4};",
+ "\u72A7>Xi;",
+ "\u72A8>Chou;",
+ "\u72A9>We{i4};",
+ "\u72AA>Ku{i2};",
+ "\u72AB>Chou;",
+ "\u72AC>Qu{a3}n;",
+ "\u72AD>Fan3quan3p{a2}ng;",
+ "\u72AE>B{a2};",
+ "\u72AF>F{a4}n;",
+ "\u72B0>Qi{u2};",
+ "\u72B1>J{i3};",
+ "\u72B2>Ca{i2};",
+ "\u72B3>Chu{o2};",
+ "\u72B4>{A4}n;",
+ "\u72B5>Ji{e2};",
+ "\u72B6>Zhu{a4}ng;",
+ "\u72B7>Gu{a3}ng;",
+ "\u72B8>M{a4};",
+ "\u72B9>Yo{u2};",
+ "\u72BA>K{a4}ng;",
+ "\u72BB>B{o2};",
+ "\u72BC>Ho{u3};",
+ "\u72BD>Y{a2};",
+ "\u72BE>Y{i2}n;",
+ "\u72BF>Huan;",
+ "\u72C0>Zhu{a4}ng;",
+ "\u72C1>Y{u3}n;",
+ "\u72C2>Ku{a2}ng;",
+ "\u72C3>Ni{u3};",
+ "\u72C4>D{i2};",
+ "\u72C5>Qing;",
+ "\u72C6>Zh{o4}ng;",
+ "\u72C7>M{u4};",
+ "\u72C8>Be{i4};",
+ "\u72C9>Pi;",
+ "\u72CA>J{u2};",
+ "\u72CB>N{i2};",
+ "\u72CC>Sheng;",
+ "\u72CD>Pa{o2};",
+ "\u72CE>Xi{a2};",
+ "\u72CF>Tu{o2};",
+ "\u72D0>H{u2};",
+ "\u72D1>L{i2}ng;",
+ "\u72D2>Fe{i4};",
+ "\u72D3>Pi;",
+ "\u72D4>N{i3};",
+ "\u72D5>A{o3};",
+ "\u72D6>Yo{u4};",
+ "\u72D7>Go{u3};",
+ "\u72D8>Yu{e4};",
+ "\u72D9>Ju;",
+ "\u72DA>D{a4}n;",
+ "\u72DB>P{o4};",
+ "\u72DC>G{u3};",
+ "\u72DD>Xi{a3}n;",
+ "\u72DE>N{i2}ng;",
+ "\u72DF>Hu{a2}n;",
+ "\u72E0>H{e3}n;",
+ "\u72E1>Jia{o3};",
+ "\u72E2>H{e2};",
+ "\u72E3>Zha{o4};",
+ "\u72E4>J{i2};",
+ "\u72E5>X{u4}n;",
+ "\u72E6>Shan;",
+ "\u72E7>T{a4};",
+ "\u72E8>R{o2}ng;",
+ "\u72E9>Sho{u4};",
+ "\u72EA>Tong;",
+ "\u72EB>La{o3};",
+ "\u72EC>D{u2};",
+ "\u72ED>Xi{a2};",
+ "\u72EE>Shi;",
+ "\u72EF>Hu{a2};",
+ "\u72F0>Zheng;",
+ "\u72F1>Y{u4};",
+ "\u72F2>Sun;",
+ "\u72F3>Y{u2};",
+ "\u72F4>B{i4};",
+ "\u72F5>M{a2}ng;",
+ "\u72F6>X{i3};",
+ "\u72F7>Ju{a4}n;",
+ "\u72F8>L{i2};",
+ "\u72F9>Xi{a2};",
+ "\u72FA>Y{i2}n;",
+ "\u72FB>Suan;",
+ "\u72FC>L{a2}ng;",
+ "\u72FD>Be{i4};",
+ "\u72FE>Zh{i4};",
+ "\u72FF>Y{a2}n;",
+ "\u7300>Sha;",
+ "\u7301>L{i4};",
+ "\u7302>H{a4}n;",
+ "\u7303>Xi{a3}n;",
+ "\u7304>Jing;",
+ "\u7305>Pa{i2};",
+ "\u7306>Fei;",
+ "\u7307>Ya{o2};",
+ "\u7308>B{a4};",
+ "\u7309>Q{i2};",
+ "\u730A>N{i2};",
+ "\u730B>Biao;",
+ "\u730C>Y{i4}n;",
+ "\u730D>La{i2};",
+ "\u730E>X{i2};",
+ "\u730F>Jian;",
+ "\u7310>Qiang;",
+ "\u7311>Kun;",
+ "\u7312>Yan;",
+ "\u7313>Gu{o3};",
+ "\u7314>Z{o4}ng;",
+ "\u7315>M{i2};",
+ "\u7316>Chang;",
+ "\u7317>Yi;",
+ "\u7318>Zh{i4};",
+ "\u7319>Zheng;",
+ "\u731A>Y{a2};",
+ "\u731B>M{e3}ng;",
+ "\u731C>Cai;",
+ "\u731D>C{u4};",
+ "\u731E>Sh{e4};",
+ "\u7321>Lu{o2};",
+ "\u7322>H{u2};",
+ "\u7323>Zong;",
+ "\u7324>J{i4};",
+ "\u7325>We{i3};",
+ "\u7326>Feng;",
+ "\u7327>Wo;",
+ "\u7328>Yu{a2}n;",
+ "\u7329>Xing;",
+ "\u732A>Zhu;",
+ "\u732B>Mao;",
+ "\u732C>We{i4};",
+ "\u732D>Yu{a2}n;",
+ "\u732E>Xi{a4}n;",
+ "\u732F>Tuan;",
+ "\u7330>Y{a4};",
+ "\u7331>Na{o2};",
+ "\u7332>Xie;",
+ "\u7333>Jia;",
+ "\u7334>Ho{u2};",
+ "\u7335>Bian;",
+ "\u7336>Yo{u2};",
+ "\u7337>Yo{u2};",
+ "\u7338>Me{i2};",
+ "\u7339>Zha;",
+ "\u733A>Ya{o2};",
+ "\u733B>Sun;",
+ "\u733C>B{o2};",
+ "\u733D>M{i2}ng;",
+ "\u733E>Hu{a2};",
+ "\u733F>Yu{a2}n;",
+ "\u7340>Sou;",
+ "\u7341>M{a4};",
+ "\u7342>Yu{a2}n;",
+ "\u7343>Dai;",
+ "\u7344>Y{u4};",
+ "\u7345>Shi;",
+ "\u7346>Ha{o2};",
+ "\u7348>Y{i4};",
+ "\u7349>Zhen;",
+ "\u734A>Chu{a4}ng;",
+ "\u734B>Ha{o2};",
+ "\u734C>M{a4}n;",
+ "\u734D>J{i4}ng;",
+ "\u734E>Ji{a3}ng;",
+ "\u734F>M{u2};",
+ "\u7350>Zhang;",
+ "\u7351>Ch{a2}n;",
+ "\u7352>A{o2};",
+ "\u7353>A{o2};",
+ "\u7354>Ha{o2};",
+ "\u7355>Cui;",
+ "\u7356>F{e2}n;",
+ "\u7357>Ju{e2};",
+ "\u7358>B{i4};",
+ "\u7359>B{i4};",
+ "\u735A>Hu{a2}ng;",
+ "\u735B>P{u2};",
+ "\u735C>L{i2}n;",
+ "\u735D>Y{u4};",
+ "\u735E>T{o2}ng;",
+ "\u735F>Ya{o4};",
+ "\u7360>Lia{o2};",
+ "\u7361>Shu{o4};",
+ "\u7362>Xiao;",
+ "\u7365>X{i2};",
+ "\u7366>G{e2};",
+ "\u7367>Ju{a4}n;",
+ "\u7368>D{u2};",
+ "\u7369>Hu{i4};",
+ "\u736A>Kua{i4};",
+ "\u736B>Xi{a3}n;",
+ "\u736C>Xi{e4};",
+ "\u736D>T{a4};",
+ "\u736E>Xi{a3}n;",
+ "\u736F>Xun;",
+ "\u7370>N{i2}ng;",
+ "\u7371>P{i2}n;",
+ "\u7372>Hu{o4};",
+ "\u7373>No{u4};",
+ "\u7374>M{e2}ng;",
+ "\u7375>Li{e4};",
+ "\u7376>Na{o2};",
+ "\u7377>Gu{a3}ng;",
+ "\u7378>Sho{u4};",
+ "\u7379>L{u2};",
+ "\u737A>T{a4};",
+ "\u737B>Xi{a4}n;",
+ "\u737C>M{i2};",
+ "\u737D>R{a2}ng;",
+ "\u737E>Huan;",
+ "\u737F>Na{o2};",
+ "\u7380>Lu{o2};",
+ "\u7381>Xi{a3}n;",
+ "\u7382>Q{i2};",
+ "\u7383>Ju{e2};",
+ "\u7384>Xu{a2}n;",
+ "\u7385>Mia{o4};",
+ "\u7386>Zi;",
+ "\u7387>L{uu4};",
+ "\u7388>L{u2};",
+ "\u7389>Y{u4};",
+ "\u738A>S{u4};",
+ "\u738B>W{a2}ng;",
+ "\u738C>Qi{u2};",
+ "\u738D>G{a3};",
+ "\u738E>Ding;",
+ "\u738F>L{e4};",
+ "\u7390>Ba;",
+ "\u7391>Ji;",
+ "\u7392>H{o2}ng;",
+ "\u7393>D{i4};",
+ "\u7394>Qu{a4}n;",
+ "\u7395>Gan;",
+ "\u7396>Ji{u3};",
+ "\u7397>Y{u2};",
+ "\u7398>J{i3};",
+ "\u7399>Y{u2};",
+ "\u739A>Y{a2}ng;",
+ "\u739B>M{a3};",
+ "\u739C>Gong;",
+ "\u739D>W{u3};",
+ "\u739E>Fu;",
+ "\u739F>W{e2}n;",
+ "\u73A0>Ji{e4};",
+ "\u73A1>Y{a4};",
+ "\u73A2>F{e2}n;",
+ "\u73A3>Bi{a4}n;",
+ "\u73A4>B{e3}ng;",
+ "\u73A5>Yu{e4};",
+ "\u73A6>Ju{e2};",
+ "\u73A7>Y{u3}n;",
+ "\u73A8>Ju{e2};",
+ "\u73A9>W{a2}n;",
+ "\u73AA>Jian;",
+ "\u73AB>Me{i2};",
+ "\u73AC>D{a3}n;",
+ "\u73AD>P{i2};",
+ "\u73AE>We{i3};",
+ "\u73AF>Hu{a2}n;",
+ "\u73B0>Xi{a4}n;",
+ "\u73B1>Qiang;",
+ "\u73B2>L{i2}ng;",
+ "\u73B3>Da{i4};",
+ "\u73B4>Y{i4};",
+ "\u73B5>{A2}n;",
+ "\u73B6>P{i2}ng;",
+ "\u73B7>Di{a4}n;",
+ "\u73B8>F{u2};",
+ "\u73B9>Xu{a2}n;",
+ "\u73BA>X{i3};",
+ "\u73BB>Bo;",
+ "\u73BC>C{i3};",
+ "\u73BD>Go{u3};",
+ "\u73BE>Ji{a3};",
+ "\u73BF>Sha{o2};",
+ "\u73C0>P{o4};",
+ "\u73C1>C{i2};",
+ "\u73C2>Ke;",
+ "\u73C3>R{a3}n;",
+ "\u73C4>Sheng;",
+ "\u73C5>Shen;",
+ "\u73C6>Y{i2};",
+ "\u73C7>Z{u3};",
+ "\u73C8>Jia;",
+ "\u73C9>M{i2}n;",
+ "\u73CA>Shan;",
+ "\u73CB>Li{u3};",
+ "\u73CC>B{i4};",
+ "\u73CD>Zhen;",
+ "\u73CE>Zhen;",
+ "\u73CF>Ju{e2};",
+ "\u73D0>F{a4};",
+ "\u73D1>L{o2}ng;",
+ "\u73D2>Jin;",
+ "\u73D3>Jia{o4};",
+ "\u73D4>Ji{a4}n;",
+ "\u73D5>L{i4};",
+ "\u73D6>Guang;",
+ "\u73D7>Xian;",
+ "\u73D8>Zhou;",
+ "\u73D9>G{o3}ng;",
+ "\u73DA>Yan;",
+ "\u73DB>Xi{u4};",
+ "\u73DC>Y{a2}ng;",
+ "\u73DD>X{u3};",
+ "\u73DE>Lu{o4};",
+ "\u73DF>S{u4};",
+ "\u73E0>Zhu;",
+ "\u73E1>Q{i2}n;",
+ "\u73E2>K{e4}n;",
+ "\u73E3>X{u2}n;",
+ "\u73E4>Ba{o3};",
+ "\u73E5>{e3}r;",
+ "\u73E6>Xi{a4}ng;",
+ "\u73E7>Ya{o2};",
+ "\u73E8>Xi{a2};",
+ "\u73E9>H{e2}ng;",
+ "\u73EA>Gui;",
+ "\u73EB>Chong;",
+ "\u73EC>X{u4};",
+ "\u73ED>Ban;",
+ "\u73EE>Pe{i4};",
+ "\u73F0>Dang;",
+ "\u73F2>H{u2}n;",
+ "\u73F3>W{e2}n;",
+ "\u73F4>{E2};",
+ "\u73F5>Ch{e2}ng;",
+ "\u73F6>T{i2};",
+ "\u73F7>W{u3};",
+ "\u73F8>W{u2};",
+ "\u73F9>Ch{e2}ng;",
+ "\u73FA>J{u4}n;",
+ "\u73FB>Me{i2};",
+ "\u73FC>Be{i4};",
+ "\u73FD>T{i3}ng;",
+ "\u73FE>Xi{a4}n;",
+ "\u73FF>Chu{o4};",
+ "\u7400>H{a2}n;",
+ "\u7401>Xuan;",
+ "\u7402>Y{a2}n;",
+ "\u7403>Qi{u2};",
+ "\u7404>Qu{a3}n;",
+ "\u7405>L{a2}ng;",
+ "\u7406>L{i3};",
+ "\u7407>Xi{u4};",
+ "\u7408>F{u2};",
+ "\u7409>Li{u2};",
+ "\u740A>Y{e2};",
+ "\u740B>Xi;",
+ "\u740C>L{i2}ng;",
+ "\u740D>L{i4};",
+ "\u740E>J{i4}n;",
+ "\u740F>Li{a2}n;",
+ "\u7410>Su{o3};",
+ "\u7413>W{a2}n;",
+ "\u7414>Di{a4}n;",
+ "\u7415>P{i2}n;",
+ "\u7416>Zh{a3}n;",
+ "\u7417>Cu{i4};",
+ "\u7418>M{i2}n;",
+ "\u7419>Y{u4};",
+ "\u741A>Ju;",
+ "\u741B>Chen;",
+ "\u741C>La{i2};",
+ "\u741D>W{e2}n;",
+ "\u741E>Sh{e4}ng;",
+ "\u741F>We{i2};",
+ "\u7420>Di{a3}n;",
+ "\u7421>Ch{u4};",
+ "\u7422>Zhu{o2};",
+ "\u7423>Pe{i3};",
+ "\u7424>Cheng;",
+ "\u7425>H{u3};",
+ "\u7426>Q{i2};",
+ "\u7427>{E4};",
+ "\u7428>Kun;",
+ "\u7429>Chang;",
+ "\u742A>Q{i2};",
+ "\u742B>B{e3}ng;",
+ "\u742C>W{a3}n;",
+ "\u742D>L{u4};",
+ "\u742E>C{o2}ng;",
+ "\u742F>Gu{a3}n;",
+ "\u7430>Y{a3}n;",
+ "\u7431>Diao;",
+ "\u7432>Be{i4};",
+ "\u7433>L{i2}n;",
+ "\u7434>Q{i2}n;",
+ "\u7435>P{i2};",
+ "\u7436>P{a2};",
+ "\u7437>Qu{e4};",
+ "\u7438>Zhu{o2};",
+ "\u7439>Q{i2}n;",
+ "\u743A>F{a4};",
+ "\u743C>Qi{o2}ng;",
+ "\u743D>D{u3};",
+ "\u743E>Ji{e4};",
+ "\u743F>H{u2}n;",
+ "\u7440>Y{u3};",
+ "\u7441>Ma{o4};",
+ "\u7442>Me{i2};",
+ "\u7443>Chun;",
+ "\u7444>Xuan;",
+ "\u7445>T{i2};",
+ "\u7446>Xing;",
+ "\u7447>Da{i4};",
+ "\u7448>Ro{u2};",
+ "\u7449>M{i2}n;",
+ "\u744A>Zhen;",
+ "\u744B>We{i3};",
+ "\u744C>Ru{a3}n;",
+ "\u744D>Hu{a4}n;",
+ "\u744E>Jie;",
+ "\u744F>Chuan;",
+ "\u7450>Ji{a3}n;",
+ "\u7451>Zhu{a4}n;",
+ "\u7452>Y{a2}ng;",
+ "\u7453>Li{a4}n;",
+ "\u7454>Qu{a2}n;",
+ "\u7455>Xi{a2};",
+ "\u7456>Du{a4}n;",
+ "\u7457>Yu{a4}n;",
+ "\u7458>Y{e2};",
+ "\u7459>Na{o3};",
+ "\u745A>H{u2};",
+ "\u745B>Ying;",
+ "\u745C>Y{u2};",
+ "\u745D>Hu{a2}ng;",
+ "\u745E>Ru{i4};",
+ "\u745F>S{e4};",
+ "\u7460>Li{u2};",
+ "\u7461>Shi;",
+ "\u7462>R{o2}ng;",
+ "\u7463>Su{o3};",
+ "\u7464>Ya{o2};",
+ "\u7465>Wen;",
+ "\u7466>Wu;",
+ "\u7467>Jin;",
+ "\u7468>J{i4}n;",
+ "\u7469>Y{i2}ng;",
+ "\u746A>M{a3};",
+ "\u746B>Tao;",
+ "\u746C>Li{u2};",
+ "\u746D>T{a2}ng;",
+ "\u746E>L{i4};",
+ "\u746F>L{a2}ng;",
+ "\u7470>Gui;",
+ "\u7471>Zh{e4}n;",
+ "\u7472>Qiang;",
+ "\u7473>Cu{o3};",
+ "\u7474>Ju{e2};",
+ "\u7475>Zha{o3};",
+ "\u7476>Ya{o2};",
+ "\u7477>A{i4};",
+ "\u7478>Bin;",
+ "\u7479>T{u2};",
+ "\u747A>Ch{a2}ng;",
+ "\u747B>Kun;",
+ "\u747C>Zhuan;",
+ "\u747D>Cong;",
+ "\u747E>J{i3}n;",
+ "\u747F>Yi;",
+ "\u7480>Cu{i3};",
+ "\u7481>Cong;",
+ "\u7482>Q{i2};",
+ "\u7483>L{i2};",
+ "\u7484>Y{i3}ng;",
+ "\u7485>Su{o3};",
+ "\u7486>Qi{u2};",
+ "\u7487>Xu{a2}n;",
+ "\u7488>A{o2};",
+ "\u7489>Li{a2}n;",
+ "\u748A>M{a2}n;",
+ "\u748B>Zhang;",
+ "\u748C>Y{i2}n;",
+ "\u748E>Ying;",
+ "\u748F>Zh{i4};",
+ "\u7490>L{u4};",
+ "\u7491>W{u2};",
+ "\u7492>Deng;",
+ "\u7493>Xio{u4};",
+ "\u7494>Zeng;",
+ "\u7495>X{u2}n;",
+ "\u7496>Q{u2};",
+ "\u7497>D{a4}ng;",
+ "\u7498>L{i2}n;",
+ "\u7499>Lia{o2};",
+ "\u749A>Qi{o2}ng;",
+ "\u749B>S{u4};",
+ "\u749C>Hu{a2}ng;",
+ "\u749D>Gui;",
+ "\u749E>P{u2};",
+ "\u749F>J{i3}ng;",
+ "\u74A0>F{a2}n;",
+ "\u74A1>J{i4}n;",
+ "\u74A2>Li{u2};",
+ "\u74A3>Ji;",
+ "\u74A5>J{i3}ng;",
+ "\u74A6>A{i4};",
+ "\u74A7>B{i4};",
+ "\u74A8>C{a4}n;",
+ "\u74A9>Q{u2};",
+ "\u74AA>Za{o3};",
+ "\u74AB>Dang;",
+ "\u74AC>Jia{o3};",
+ "\u74AD>G{u4}n;",
+ "\u74AE>T{a3}n;",
+ "\u74AF>Hu{i4};",
+ "\u74B0>Hu{a2}n;",
+ "\u74B1>S{e4};",
+ "\u74B2>Su{i4};",
+ "\u74B3>Ti{a2}n;",
+ "\u74B5>Y{u2};",
+ "\u74B6>J{i4}n;",
+ "\u74B7>L{u2};",
+ "\u74B8>Bin;",
+ "\u74B9>Sho{u4};",
+ "\u74BA>W{e4}n;",
+ "\u74BB>Zu{i3};",
+ "\u74BC>L{a2}n;",
+ "\u74BD>X{i3};",
+ "\u74BE>J{i4};",
+ "\u74BF>Xu{a2}n;",
+ "\u74C0>Ru{a3}n;",
+ "\u74C1>Hu{o4};",
+ "\u74C2>Ga{i4};",
+ "\u74C3>Le{i2};",
+ "\u74C4>D{u2};",
+ "\u74C5>L{i4};",
+ "\u74C6>Zh{i2};",
+ "\u74C7>Ro{u2};",
+ "\u74C8>L{i2};",
+ "\u74C9>Z{a4}n;",
+ "\u74CA>Qi{o2}ng;",
+ "\u74CB>Zh{e2};",
+ "\u74CC>Gui;",
+ "\u74CD>Su{i4};",
+ "\u74CE>L{a4};",
+ "\u74CF>L{o2}ng;",
+ "\u74D0>L{u2};",
+ "\u74D1>L{i4};",
+ "\u74D2>Z{a4}n;",
+ "\u74D3>L{a4}n;",
+ "\u74D4>Ying;",
+ "\u74D5>M{i2};",
+ "\u74D6>Xiang;",
+ "\u74D7>Xi;",
+ "\u74D8>Gu{a4}n;",
+ "\u74D9>Da{o4};",
+ "\u74DA>Z{a4}n;",
+ "\u74DB>Hu{a2}n;",
+ "\u74DC>Gua;",
+ "\u74DD>B{o2};",
+ "\u74DE>Di{e2};",
+ "\u74DF>Ba{o2};",
+ "\u74E0>H{u4};",
+ "\u74E1>Zh{i2};",
+ "\u74E2>Pia{o2};",
+ "\u74E3>B{a4}n;",
+ "\u74E4>R{a2}ng;",
+ "\u74E5>L{i4};",
+ "\u74E6>W{a3};",
+ "\u74E8>Jiang;",
+ "\u74E9>Qian2w{a3};",
+ "\u74EA>F{a3}n;",
+ "\u74EB>P{e2}n;",
+ "\u74EC>F{a3}ng;",
+ "\u74ED>D{a3}n;",
+ "\u74EE>W{e4}ng;",
+ "\u74EF>Ou;",
+ "\u74F3>H{u2};",
+ "\u74F4>L{i2}ng;",
+ "\u74F5>Y{i2};",
+ "\u74F6>P{i2}ng;",
+ "\u74F7>C{i2};",
+ "\u74F9>Ju{a4}n;",
+ "\u74FA>Ch{a2}ng;",
+ "\u74FB>Chi;",
+ "\u74FD>D{a4}ng;",
+ "\u74FE>M{e3}ng;",
+ "\u74FF>Po{u3};",
+ "\u7500>Zhu{i4};",
+ "\u7501>P{i2}ng;",
+ "\u7502>Bian;",
+ "\u7503>Zho{u4};",
+ "\u7504>Zhen;",
+ "\u7506>C{i2};",
+ "\u7507>Ying;",
+ "\u7508>Q{i4};",
+ "\u7509>Xi{a2}n;",
+ "\u750A>Lo{u3};",
+ "\u750B>D{i4};",
+ "\u750C>Ou;",
+ "\u750D>M{e2}ng;",
+ "\u750E>Zhuan;",
+ "\u750F>P{e4}ng;",
+ "\u7510>L{i2}n;",
+ "\u7511>Z{e4}ng;",
+ "\u7512>W{u3};",
+ "\u7513>P{i4};",
+ "\u7514>Dan;",
+ "\u7515>W{e4}ng;",
+ "\u7516>Ying;",
+ "\u7517>Y{a3}n;",
+ "\u7518>Gan;",
+ "\u7519>Da{i4};",
+ "\u751A>Sh{e2}n;",
+ "\u751B>Ti{a2}n;",
+ "\u751C>Ti{a2}n;",
+ "\u751D>Han;",
+ "\u751E>Ch{a2}ng;",
+ "\u751F>Sheng;",
+ "\u7520>Q{i2}ng;",
+ "\u7521>Sheng;",
+ "\u7522>Ch{a3}n;",
+ "\u7523>Ch{a3}n;",
+ "\u7524>Ru{i2};",
+ "\u7525>Sheng;",
+ "\u7526>Su;",
+ "\u7527>Sen;",
+ "\u7528>Y{o4}ng;",
+ "\u7529>Shua{i3};",
+ "\u752A>L{u4};",
+ "\u752B>F{u3};",
+ "\u752C>Y{o3}ng;",
+ "\u752D>B{e2}ng;",
+ "\u752E>F{e4}ng;",
+ "\u752F>N{i2}ng;",
+ "\u7530>Ti{a2}n;",
+ "\u7531>Yo{u2};",
+ "\u7532>Ji{a3};",
+ "\u7533>Shen;",
+ "\u7534>Zh{a2};",
+ "\u7535>Di{a4}n;",
+ "\u7536>F{u2};",
+ "\u7537>N{a2}n;",
+ "\u7538>Di{a4}n;",
+ "\u7539>P{i2}ng;",
+ "\u753A>T{i3}ng;",
+ "\u753B>Hu{a4};",
+ "\u753C>T{i3}ng;",
+ "\u753D>Qu{a3}n;",
+ "\u753E>Zi;",
+ "\u753F>M{e2}ng;",
+ "\u7540>B{i4};",
+ "\u7541>Q{i2};",
+ "\u7542>Li{u4};",
+ "\u7543>X{u2}n;",
+ "\u7544>Li{u2};",
+ "\u7545>Ch{a4}ng;",
+ "\u7546>M{u3};",
+ "\u7547>Y{u2}n;",
+ "\u7548>F{a4}n;",
+ "\u7549>F{u2};",
+ "\u754A>Geng;",
+ "\u754B>Ti{a2}n;",
+ "\u754C>Ji{e4};",
+ "\u754D>Ji{e4};",
+ "\u754E>Qu{a3}n;",
+ "\u754F>We{i4};",
+ "\u7550>F{u2};",
+ "\u7551>Ti{a2}n;",
+ "\u7552>M{u3};",
+ "\u7554>P{a4}n;",
+ "\u7555>Jiang;",
+ "\u7556>Wa;",
+ "\u7557>D{a2};",
+ "\u7558>N{a2}n;",
+ "\u7559>Li{u2};",
+ "\u755A>B{e3}n;",
+ "\u755B>Zh{e3}n;",
+ "\u755C>Ch{u4};",
+ "\u755D>M{u3};",
+ "\u755E>M{u3};",
+ "\u755F>C{e4};",
+ "\u7561>Gai;",
+ "\u7562>B{i4};",
+ "\u7563>D{a2};",
+ "\u7564>Zh{i4};",
+ "\u7565>L{uu}{e4};",
+ "\u7566>Q{i2};",
+ "\u7567>L{uu}{e4};",
+ "\u7568>Pan;",
+ "\u756A>Fan;",
+ "\u756B>Hu{a4};",
+ "\u756C>Y{u2};",
+ "\u756D>Y{u2};",
+ "\u756E>M{u3};",
+ "\u756F>J{u4}n;",
+ "\u7570>Y{i4};",
+ "\u7571>Li{u2};",
+ "\u7572>Y{u2};",
+ "\u7573>Di{e2};",
+ "\u7574>Cho{u2};",
+ "\u7575>Hu{a4};",
+ "\u7576>Dang;",
+ "\u7577>Chu{o4};",
+ "\u7578>Ji;",
+ "\u7579>W{a3}n;",
+ "\u757A>Jiang;",
+ "\u757B>Sh{e2}ng;",
+ "\u757C>Ch{a4}ng;",
+ "\u757D>Tu{a3}n;",
+ "\u757E>Le{i2};",
+ "\u757F>Ji;",
+ "\u7580>Cha;",
+ "\u7581>Li{u2};",
+ "\u7583>Tu{a3}n;",
+ "\u7584>L{i2}n;",
+ "\u7585>Jiang;",
+ "\u7586>Jiang;",
+ "\u7587>Cho{u2};",
+ "\u7588>B{o4};",
+ "\u7589>Di{e2};",
+ "\u758A>Di{e2};",
+ "\u758B>P{i3};",
+ "\u758C>Ni{e4};",
+ "\u758D>D{a4}n;",
+ "\u758E>Shu;",
+ "\u758F>Shu;",
+ "\u7590>Zh{i4};",
+ "\u7591>Y{i2};",
+ "\u7592>Chu{a2}ng;",
+ "\u7593>Na{i3};",
+ "\u7594>Ding;",
+ "\u7595>B{i3};",
+ "\u7596>Ji{e2};",
+ "\u7597>Lia{o2};",
+ "\u7598>Gong;",
+ "\u7599>Ge;",
+ "\u759A>Ji{u4};",
+ "\u759B>Zho{u3};",
+ "\u759C>Xi{a4};",
+ "\u759D>Sh{a4}n;",
+ "\u759E>Xu;",
+ "\u759F>N{uu}{e4};",
+ "\u75A0>L{i4};",
+ "\u75A1>Y{a2}ng;",
+ "\u75A2>Ch{e4}n;",
+ "\u75A3>Yo{u2};",
+ "\u75A4>Ba;",
+ "\u75A5>Ji{e4};",
+ "\u75A6>Ju{e2};",
+ "\u75A7>Zhi;",
+ "\u75A8>Xia;",
+ "\u75A9>Cu{i4};",
+ "\u75AA>B{i4};",
+ "\u75AB>Y{i4};",
+ "\u75AC>L{i4};",
+ "\u75AD>Z{o4}ng;",
+ "\u75AE>Chuang;",
+ "\u75AF>Feng;",
+ "\u75B0>Zh{u4};",
+ "\u75B1>Pa{o4};",
+ "\u75B2>P{i2};",
+ "\u75B3>Gan;",
+ "\u75B4>Ke;",
+ "\u75B5>Ci;",
+ "\u75B6>Xi{e4};",
+ "\u75B7>Q{i2};",
+ "\u75B8>D{a3}n;",
+ "\u75B9>Zh{e3}n;",
+ "\u75BA>F{a2};",
+ "\u75BB>Zh{i3};",
+ "\u75BC>T{e2}ng;",
+ "\u75BD>Ju;",
+ "\u75BE>J{i2};",
+ "\u75BF>Fe{i4};",
+ "\u75C0>Q{u2};",
+ "\u75C1>Di{a4}n;",
+ "\u75C2>Jia;",
+ "\u75C3>Xi{a2}n;",
+ "\u75C4>Ch{a2};",
+ "\u75C5>B{i4}ng;",
+ "\u75C6>N{i4};",
+ "\u75C7>Zh{e4}ng;",
+ "\u75C8>Yong;",
+ "\u75C9>J{i4}ng;",
+ "\u75CA>Qu{a2}n;",
+ "\u75CB>Ch{o2}ng;",
+ "\u75CC>Tong;",
+ "\u75CD>Y{i2};",
+ "\u75CE>Kai;",
+ "\u75CF>We{i3};",
+ "\u75D0>Hu{i2};",
+ "\u75D1>Du{o3};",
+ "\u75D2>Y{a3}ng;",
+ "\u75D3>Ch{i4};",
+ "\u75D4>Zh{i4};",
+ "\u75D5>H{e2}n;",
+ "\u75D6>Y{a3};",
+ "\u75D7>Me{i4};",
+ "\u75D8>Do{u4};",
+ "\u75D9>J{i4}ng;",
+ "\u75DA>Xiao;",
+ "\u75DB>T{o4}ng;",
+ "\u75DC>Tu;",
+ "\u75DD>M{a2}ng;",
+ "\u75DE>P{i3};",
+ "\u75DF>Xiao;",
+ "\u75E0>Suan;",
+ "\u75E1>Pu;",
+ "\u75E2>L{i4};",
+ "\u75E3>Zh{i4};",
+ "\u75E4>Cu{o2};",
+ "\u75E5>Du{o2};",
+ "\u75E6>W{u4};",
+ "\u75E7>Sha;",
+ "\u75E8>La{o2};",
+ "\u75E9>Sho{u4};",
+ "\u75EA>Hu{a4}n;",
+ "\u75EB>Xi{a2}n;",
+ "\u75EC>Y{i4};",
+ "\u75ED>P{e2}ng;",
+ "\u75EE>Zh{a4}ng;",
+ "\u75EF>Gu{a3}n;",
+ "\u75F0>T{a2}n;",
+ "\u75F1>Fe{i4};",
+ "\u75F2>M{a2};",
+ "\u75F3>L{i2}n;",
+ "\u75F4>Chi;",
+ "\u75F5>J{i4};",
+ "\u75F6>Di{a3}n;",
+ "\u75F7>An;",
+ "\u75F8>Ch{i4};",
+ "\u75F9>B{i4};",
+ "\u75FA>Bei;",
+ "\u75FB>M{i2}n;",
+ "\u75FC>Gu;",
+ "\u75FD>Dui;",
+ "\u75FE>E;",
+ "\u75FF>We{i3};",
+ "\u7600>Yu;",
+ "\u7601>Cu{i4};",
+ "\u7602>Y{a3};",
+ "\u7603>Zh{u3};",
+ "\u7604>C{u4};",
+ "\u7605>D{a4}n;",
+ "\u7606>Sh{e4}n;",
+ "\u7607>Zh{u3}ng;",
+ "\u7608>J{i4};",
+ "\u7609>Y{u4};",
+ "\u760A>Ho{u2};",
+ "\u760B>Feng;",
+ "\u760C>L{a4};",
+ "\u760D>Y{a2}ng;",
+ "\u760E>Sh{e4}n;",
+ "\u760F>T{u2};",
+ "\u7610>Y{u3};",
+ "\u7611>Gua;",
+ "\u7612>W{e2}n;",
+ "\u7613>Hu{a4}n;",
+ "\u7614>K{u4};",
+ "\u7615>Ji{a3};",
+ "\u7616>Yin;",
+ "\u7617>Y{i4};",
+ "\u7618>L{uu2};",
+ "\u7619>Sao;",
+ "\u761A>Ju{e2};",
+ "\u761B>Ch{i4};",
+ "\u761C>X{i2};",
+ "\u761D>Guan;",
+ "\u761E>Y{i4};",
+ "\u761F>Wen;",
+ "\u7620>J{i2};",
+ "\u7621>Chuang;",
+ "\u7622>Ban;",
+ "\u7623>Le{i3};",
+ "\u7624>Li{u2};",
+ "\u7625>Cha{i4};",
+ "\u7626>Sho{u4};",
+ "\u7627>N{uu}{e4};",
+ "\u7628>Dian;",
+ "\u7629>Da;",
+ "\u762A>Pie;",
+ "\u762B>Tan;",
+ "\u762C>Zh{a4}ng;",
+ "\u762D>Biao;",
+ "\u762E>Shen;",
+ "\u762F>C{u4};",
+ "\u7630>Lu{o3};",
+ "\u7631>Y{i4};",
+ "\u7632>Z{o4}ng;",
+ "\u7633>Chou;",
+ "\u7634>Zh{a4}ng;",
+ "\u7635>Zha{i4};",
+ "\u7636>So{u4};",
+ "\u7637>Su{o3};",
+ "\u7638>Qu{e2};",
+ "\u7639>Dia{o4};",
+ "\u763A>Lo{u4};",
+ "\u763B>L{uu2};",
+ "\u763C>M{o4};",
+ "\u763D>J{i4}n;",
+ "\u763E>Y{i3}n;",
+ "\u763F>Y{i3}ng;",
+ "\u7640>Hu{a2}ng;",
+ "\u7641>F{u2};",
+ "\u7642>Lia{o2};",
+ "\u7643>L{o2}ng;",
+ "\u7644>Qia{o2};",
+ "\u7645>Li{u2};",
+ "\u7646>La{o2};",
+ "\u7647>Xi{a2}n;",
+ "\u7648>Fe{i4};",
+ "\u7649>D{a4}n;",
+ "\u764A>Y{i4}n;",
+ "\u764B>H{e4};",
+ "\u764C>Y{a2}n;",
+ "\u764D>Ban;",
+ "\u764E>Xi{a2}n;",
+ "\u764F>Guan;",
+ "\u7650>Gua{i4};",
+ "\u7651>N{o2}ng;",
+ "\u7652>Y{u4};",
+ "\u7653>We{i2};",
+ "\u7654>Y{i4};",
+ "\u7655>Yong;",
+ "\u7656>P{i3};",
+ "\u7657>Le{i3};",
+ "\u7658>L{i4};",
+ "\u7659>Sh{u3};",
+ "\u765A>D{a4}n;",
+ "\u765B>L{i3}n;",
+ "\u765C>Di{a4}n;",
+ "\u765D>L{i3}n;",
+ "\u765E>La{i4};",
+ "\u765F>Pie;",
+ "\u7660>J{i4};",
+ "\u7661>Chi;",
+ "\u7662>Y{a3}ng;",
+ "\u7663>Xi{a3}n;",
+ "\u7664>Ji{e2};",
+ "\u7665>Zheng;",
+ "\u7667>L{i4};",
+ "\u7668>Hu{o4};",
+ "\u7669>La{i4};",
+ "\u766B>Dian;",
+ "\u766C>Xi{a3}n;",
+ "\u766D>Y{i3}ng;",
+ "\u766E>Y{i3}n;",
+ "\u766F>Q{u2};",
+ "\u7670>Yong;",
+ "\u7671>Tan;",
+ "\u7672>Dian;",
+ "\u7673>Lu{o3};",
+ "\u7674>L{uu}{a2}n;",
+ "\u7675>Lu{a2}n;",
+ "\u7676>Bo;",
+ "\u7678>Gu{i3};",
+ "\u7679>Po;",
+ "\u767A>Fa;",
+ "\u767B>Deng;",
+ "\u767C>Fa;",
+ "\u767D>Ba{i2};",
+ "\u767E>Ba{i3};",
+ "\u767F>Qi{e2};",
+ "\u7680>Bi;",
+ "\u7681>Za{o4};",
+ "\u7682>Za{o4};",
+ "\u7683>Ma{o4};",
+ "\u7684>D{e1};",
+ "\u7685>Pa;",
+ "\u7686>Jie;",
+ "\u7687>Hu{a2}ng;",
+ "\u7688>Gui;",
+ "\u7689>C{i3};",
+ "\u768A>L{i2}ng;",
+ "\u768B>Gao;",
+ "\u768C>M{o4};",
+ "\u768D>J{i2};",
+ "\u768E>Jia{o3};",
+ "\u768F>P{e3}ng;",
+ "\u7690>Gao;",
+ "\u7691>A{i2};",
+ "\u7692>{E2};",
+ "\u7693>Ha{o4};",
+ "\u7694>H{a4}n;",
+ "\u7695>Bi;",
+ "\u7696>W{a3}n;",
+ "\u7697>Cho{u2};",
+ "\u7698>Qi{a4}n;",
+ "\u7699>Xi;",
+ "\u769A>A{i2};",
+ "\u769B>Ji{o3}ng;",
+ "\u769C>Ha{o4};",
+ "\u769D>Hu{a3}ng;",
+ "\u769E>Ha{o4};",
+ "\u769F>Z{e2};",
+ "\u76A0>Cu{i3};",
+ "\u76A1>Ha{o4};",
+ "\u76A2>Xia{o3};",
+ "\u76A3>Y{e4};",
+ "\u76A4>P{o2};",
+ "\u76A5>Ha{o4};",
+ "\u76A6>Jia{o3};",
+ "\u76A7>A{i4};",
+ "\u76A8>Xing;",
+ "\u76A9>Hu{a4}ng;",
+ "\u76AA>L{i4};",
+ "\u76AB>Pia{o3};",
+ "\u76AC>H{e4};",
+ "\u76AD>Jia{o4};",
+ "\u76AE>P{i2};",
+ "\u76AF>G{a3}n;",
+ "\u76B0>Pa{o4};",
+ "\u76B1>Zho{u4};",
+ "\u76B2>Jun;",
+ "\u76B3>Qi{u2};",
+ "\u76B4>Cun;",
+ "\u76B5>Qu{e4};",
+ "\u76B6>Zha;",
+ "\u76B7>G{u3};",
+ "\u76B8>Jun;",
+ "\u76B9>Jun;",
+ "\u76BA>Zho{u4};",
+ "\u76BB>Zha;",
+ "\u76BC>G{u3};",
+ "\u76BD>Zh{a3}n;",
+ "\u76BE>D{u2};",
+ "\u76BF>M{i3}n;",
+ "\u76C0>Q{i3};",
+ "\u76C1>Y{i2}ng;",
+ "\u76C2>Y{u2};",
+ "\u76C3>Bei;",
+ "\u76C4>Zhao;",
+ "\u76C5>Zhong;",
+ "\u76C6>P{e2}n;",
+ "\u76C7>H{e2};",
+ "\u76C8>Y{i2}ng;",
+ "\u76C9>H{e2};",
+ "\u76CA>Y{i4};",
+ "\u76CB>Bo;",
+ "\u76CC>W{a3}n;",
+ "\u76CD>H{e2};",
+ "\u76CE>{A4}ng;",
+ "\u76CF>Zh{a3}n;",
+ "\u76D0>Y{a2}n;",
+ "\u76D1>Jian;",
+ "\u76D2>H{e2};",
+ "\u76D3>Yu;",
+ "\u76D4>Kui;",
+ "\u76D5>F{a4}n;",
+ "\u76D6>Ga{i4};",
+ "\u76D7>Da{o4};",
+ "\u76D8>P{a2}n;",
+ "\u76D9>F{u3};",
+ "\u76DA>Qi{u2};",
+ "\u76DB>Sh{e4}ng;",
+ "\u76DC>Da{o4};",
+ "\u76DD>L{u4};",
+ "\u76DE>Zh{a3}n;",
+ "\u76DF>M{e2}ng;",
+ "\u76E0>L{i3};",
+ "\u76E1>J{i4}n;",
+ "\u76E2>X{u4};",
+ "\u76E3>Jian;",
+ "\u76E4>P{a2}n;",
+ "\u76E5>Gu{a4}n;",
+ "\u76E6>An;",
+ "\u76E7>L{u2};",
+ "\u76E8>Sh{u3};",
+ "\u76E9>Zhou;",
+ "\u76EA>D{a4}ng;",
+ "\u76EB>An;",
+ "\u76EC>G{u3};",
+ "\u76ED>L{i4};",
+ "\u76EE>M{u4};",
+ "\u76EF>Ch{e2}ng;",
+ "\u76F0>G{a3}n;",
+ "\u76F1>Xu;",
+ "\u76F2>M{a2}ng;",
+ "\u76F3>M{a2}ng;",
+ "\u76F4>Zh{i2};",
+ "\u76F5>Q{i4};",
+ "\u76F6>Ru{a3}n;",
+ "\u76F7>Ti{a2}n;",
+ "\u76F8>Xiang;",
+ "\u76F9>D{u4}n;",
+ "\u76FA>Xin;",
+ "\u76FB>X{i4};",
+ "\u76FC>P{a4}n;",
+ "\u76FD>Feng;",
+ "\u76FE>D{u4}n;",
+ "\u76FF>M{i2}n;",
+ "\u7700>M{i2}ng;",
+ "\u7701>Sh{e3}ng;",
+ "\u7702>Sh{i4};",
+ "\u7703>Y{u2}n;",
+ "\u7704>Mi{a3}n;",
+ "\u7705>Pan;",
+ "\u7706>F{a3}ng;",
+ "\u7707>Mia{o3};",
+ "\u7708>Dan;",
+ "\u7709>Me{i2};",
+ "\u770A>Ma{o4};",
+ "\u770B>K{a4}n;",
+ "\u770C>Xi{a4}n;",
+ "\u770D>Ou;",
+ "\u770E>Sh{i4};",
+ "\u770F>Yang;",
+ "\u7710>Zheng;",
+ "\u7711>Ya{o3};",
+ "\u7712>Sh{e4}n;",
+ "\u7713>Hu{o4};",
+ "\u7714>D{a4};",
+ "\u7715>Zh{e3}n;",
+ "\u7716>Ku{a4}ng;",
+ "\u7717>Ju;",
+ "\u7718>Sh{e4}n;",
+ "\u7719>Ch{i4};",
+ "\u771A>Sh{e3}ng;",
+ "\u771B>Me{i4};",
+ "\u771C>M{o4};",
+ "\u771D>Zh{u4};",
+ "\u771E>Zhen;",
+ "\u771F>Zhen;",
+ "\u7720>Mi{a2}n;",
+ "\u7721>Di;",
+ "\u7722>Yuan;",
+ "\u7723>Di{e2};",
+ "\u7724>Y{i2};",
+ "\u7725>Z{i4};",
+ "\u7726>Z{i4};",
+ "\u7727>Cha{o3};",
+ "\u7728>Zh{a3};",
+ "\u7729>Xu{a4}n;",
+ "\u772A>B{i3}ng;",
+ "\u772B>M{i3};",
+ "\u772C>L{o2}ng;",
+ "\u772D>Sui;",
+ "\u772E>D{o4}ng;",
+ "\u772F>M{i3};",
+ "\u7730>Di{e2};",
+ "\u7731>Y{i2};",
+ "\u7732>{E4}r;",
+ "\u7733>M{i3}ng;",
+ "\u7734>Xu{a4}n;",
+ "\u7735>Chi;",
+ "\u7736>Ku{a4}ng;",
+ "\u7737>Ju{a4}n;",
+ "\u7738>Mo{u2};",
+ "\u7739>Zh{e4}n;",
+ "\u773A>Tia{o4};",
+ "\u773B>Y{a2}ng;",
+ "\u773C>Y{a3}n;",
+ "\u773D>M{o4};",
+ "\u773E>Zh{o4}ng;",
+ "\u773F>Ma{i4};",
+ "\u7740>Zha{o2};",
+ "\u7741>Zheng;",
+ "\u7742>Me{i2};",
+ "\u7743>J{u4}n;",
+ "\u7744>Sha{o4};",
+ "\u7745>H{a4}n;",
+ "\u7746>Hu{a3}n;",
+ "\u7747>D{i4};",
+ "\u7748>Ch{e3}ng;",
+ "\u7749>Cuo;",
+ "\u774A>Ju{a4}n;",
+ "\u774B>{E2};",
+ "\u774C>W{a3}n;",
+ "\u774D>Xi{a4}n;",
+ "\u774E>Xi;",
+ "\u774F>K{u4}n;",
+ "\u7750>La{i4};",
+ "\u7751>Ji{a3}n;",
+ "\u7752>Sh{a3}n;",
+ "\u7753>Ti{a3}n;",
+ "\u7754>H{u3}n;",
+ "\u7755>W{a3}n;",
+ "\u7756>L{i2}ng;",
+ "\u7757>Sh{i4};",
+ "\u7758>Qi{o2}ng;",
+ "\u7759>Li{e4};",
+ "\u775A>Ya{i2};",
+ "\u775B>Jing;",
+ "\u775C>Zheng;",
+ "\u775D>L{i2};",
+ "\u775E>La{i4};",
+ "\u775F>Su{i4};",
+ "\u7760>Ju{a4}n;",
+ "\u7761>Shu{i4};",
+ "\u7762>Sui;",
+ "\u7763>Du;",
+ "\u7764>B{i4};",
+ "\u7765>B{i4};",
+ "\u7766>M{u4};",
+ "\u7767>Hun;",
+ "\u7768>N{i4};",
+ "\u7769>L{u4};",
+ "\u776A>Y{i4};",
+ "\u776B>Ji{e2};",
+ "\u776C>Ca{i3};",
+ "\u776D>Zho{u3};",
+ "\u776E>Y{u2};",
+ "\u776F>Hun;",
+ "\u7770>M{a4};",
+ "\u7771>Xi{a4};",
+ "\u7772>X{i3}ng;",
+ "\u7773>Xi;",
+ "\u7774>G{u4}n;",
+ "\u7775>Cai;",
+ "\u7776>Ch{u3}n;",
+ "\u7777>Jian;",
+ "\u7778>Me{i4};",
+ "\u7779>D{u3};",
+ "\u777A>Ho{u2};",
+ "\u777B>Xuan;",
+ "\u777C>T{i4};",
+ "\u777D>Ku{i2};",
+ "\u777E>Gao;",
+ "\u777F>Ru{i4};",
+ "\u7780>Mo{u4};",
+ "\u7781>X{u4};",
+ "\u7782>Fa;",
+ "\u7783>Wen;",
+ "\u7784>Mia{o2};",
+ "\u7785>Cho{u3};",
+ "\u7786>Ku{i4};",
+ "\u7787>Mi;",
+ "\u7788>W{e3}ng;",
+ "\u7789>Ko{u4};",
+ "\u778A>D{a4}ng;",
+ "\u778B>Chen;",
+ "\u778C>Ke;",
+ "\u778D>So{u3};",
+ "\u778E>Xia;",
+ "\u778F>Qi{o2}ng;",
+ "\u7790>Ma{o4};",
+ "\u7791>M{i2}ng;",
+ "\u7792>M{a2}n;",
+ "\u7793>Shu{i4};",
+ "\u7794>Z{e2};",
+ "\u7795>Zh{a4}ng;",
+ "\u7796>Y{i4};",
+ "\u7797>Diao;",
+ "\u7798>Ou;",
+ "\u7799>M{o4};",
+ "\u779A>Sh{u4}n;",
+ "\u779B>Cong;",
+ "\u779C>Lou;",
+ "\u779D>Chi;",
+ "\u779E>M{a2}n;",
+ "\u779F>Pia{o3};",
+ "\u77A0>Cheng;",
+ "\u77A1>J{i4};",
+ "\u77A2>M{e2}ng;",
+ "\u77A4>R{u2}n;",
+ "\u77A5>Pie;",
+ "\u77A6>Xi;",
+ "\u77A7>Qia{o2};",
+ "\u77A8>P{u2};",
+ "\u77A9>Zh{u3};",
+ "\u77AA>D{e4}ng;",
+ "\u77AB>Sh{e3}n;",
+ "\u77AC>Sh{u4}n;",
+ "\u77AD>Lia{o3};",
+ "\u77AE>Ch{e4};",
+ "\u77AF>Xi{a2}n;",
+ "\u77B0>K{a4}n;",
+ "\u77B1>Y{e4};",
+ "\u77B2>X{u4};",
+ "\u77B3>T{o2}ng;",
+ "\u77B4>Mo{u2};",
+ "\u77B5>L{i2}n;",
+ "\u77B6>Ku{i4};",
+ "\u77B7>Xi{a2}n;",
+ "\u77B8>Y{e4};",
+ "\u77B9>A{i4};",
+ "\u77BA>Hu{i4};",
+ "\u77BB>Zhan;",
+ "\u77BC>Ji{a3}n;",
+ "\u77BD>G{u3};",
+ "\u77BE>Zha{o4};",
+ "\u77BF>Qu;",
+ "\u77C0>We{i2};",
+ "\u77C1>Cho{u3};",
+ "\u77C2>Sa{o4};",
+ "\u77C3>N{i3}ng;",
+ "\u77C4>Xun;",
+ "\u77C5>Ya{o4};",
+ "\u77C6>Hu{o4};",
+ "\u77C7>M{e2}ng;",
+ "\u77C8>Mi{a2}n;",
+ "\u77C9>Bin;",
+ "\u77CA>Mi{a2}n;",
+ "\u77CB>L{i4};",
+ "\u77CC>Ku{a4}ng;",
+ "\u77CD>Ju{e2};",
+ "\u77CE>Xuan;",
+ "\u77CF>Mi{a2}n;",
+ "\u77D0>Hu{o4};",
+ "\u77D1>L{u2};",
+ "\u77D2>M{e2}ng;",
+ "\u77D3>L{o2}ng;",
+ "\u77D4>Gu{a4}n;",
+ "\u77D5>M{a3}n;",
+ "\u77D6>X{i3};",
+ "\u77D7>Ch{u4};",
+ "\u77D8>T{a3}ng;",
+ "\u77D9>K{a4}n;",
+ "\u77DA>Zh{u3};",
+ "\u77DB>Ma{o2};",
+ "\u77DC>Jin;",
+ "\u77DD>L{i2}n;",
+ "\u77DE>Y{u4};",
+ "\u77DF>Shu{o4};",
+ "\u77E0>C{e4};",
+ "\u77E1>Ju{e2};",
+ "\u77E2>Sh{i3};",
+ "\u77E3>Y{i3};",
+ "\u77E4>Sh{e3}n;",
+ "\u77E5>Zhi;",
+ "\u77E6>Ho{u2};",
+ "\u77E7>Sh{e3}n;",
+ "\u77E8>Y{i3}ng;",
+ "\u77E9>J{u3};",
+ "\u77EA>Zhou;",
+ "\u77EB>Jia{o3};",
+ "\u77EC>Cu{o2};",
+ "\u77ED>Du{a3}n;",
+ "\u77EE>A{i3};",
+ "\u77EF>Jia{o3};",
+ "\u77F0>Zeng;",
+ "\u77F1>Hu{o4};",
+ "\u77F2>Ba{i3};",
+ "\u77F3>Sh{i2};",
+ "\u77F4>D{i4}ng;",
+ "\u77F5>Q{i4};",
+ "\u77F6>Ji;",
+ "\u77F7>Z{i3};",
+ "\u77F8>Gan;",
+ "\u77F9>W{u4};",
+ "\u77FA>Tuo;",
+ "\u77FB>K{u4};",
+ "\u77FC>Qiang;",
+ "\u77FD>X{i4};",
+ "\u77FE>F{a2}n;",
+ "\u77FF>Ku{a4}ng;",
+ "\u7800>D{a4}ng;",
+ "\u7801>M{a3};",
+ "\u7802>Sha;",
+ "\u7803>Dan;",
+ "\u7804>Ju{e2};",
+ "\u7805>L{i4};",
+ "\u7806>Fu;",
+ "\u7807>M{i2}n;",
+ "\u7808>Nu{o3};",
+ "\u7809>Hu{o4};",
+ "\u780A>K{a4}ng;",
+ "\u780B>Zh{i3};",
+ "\u780C>Q{i4};",
+ "\u780D>K{a3}n;",
+ "\u780E>Ji{e4};",
+ "\u780F>Fen;",
+ "\u7810>{E4};",
+ "\u7811>Y{a4};",
+ "\u7812>Pi;",
+ "\u7813>Zh{e2};",
+ "\u7814>Y{a2}n;",
+ "\u7815>Su{i4};",
+ "\u7816>Zhuan;",
+ "\u7817>Che;",
+ "\u7818>D{u4}n;",
+ "\u7819>Pan;",
+ "\u781A>Y{a4}n;",
+ "\u781C>Feng;",
+ "\u781D>F{a2};",
+ "\u781E>M{o4};",
+ "\u781F>Zh{a4};",
+ "\u7820>Qu;",
+ "\u7821>Y{u4};",
+ "\u7822>Lu{o3};",
+ "\u7823>Tu{o2};",
+ "\u7824>Tu{o2};",
+ "\u7825>D{i3};",
+ "\u7826>Zha{i4};",
+ "\u7827>Zhen;",
+ "\u7828>A{i4};",
+ "\u7829>Fe{i4};",
+ "\u782A>M{u3};",
+ "\u782B>Zh{u3};",
+ "\u782C>L{i4};",
+ "\u782D>Bian;",
+ "\u782E>N{u3};",
+ "\u782F>Ping;",
+ "\u7830>Peng;",
+ "\u7831>L{i2}ng;",
+ "\u7832>Pa{o4};",
+ "\u7833>L{e4};",
+ "\u7834>P{o4};",
+ "\u7835>Bo;",
+ "\u7836>P{o4};",
+ "\u7837>Shen;",
+ "\u7838>Z{a2};",
+ "\u7839>Nu{o3};",
+ "\u783A>L{i4};",
+ "\u783B>L{o2}ng;",
+ "\u783C>T{o2}ng;",
+ "\u783E>L{i4};",
+ "\u7840>Ch{u3};",
+ "\u7841>Keng;",
+ "\u7842>Qu{a2}n;",
+ "\u7843>Zhu;",
+ "\u7844>Kuang;",
+ "\u7845>Hu{o4};",
+ "\u7846>{E4};",
+ "\u7847>Na{o2};",
+ "\u7848>Ji{a2};",
+ "\u7849>L{u4};",
+ "\u784A>We{i3};",
+ "\u784B>A{i4};",
+ "\u784C>Lu{o4};",
+ "\u784D>K{e4}n;",
+ "\u784E>X{i2}ng;",
+ "\u784F>Y{a2}n;",
+ "\u7850>T{o2}ng;",
+ "\u7851>Peng;",
+ "\u7852>Xi;",
+ "\u7854>H{o2}ng;",
+ "\u7855>Shu{o4};",
+ "\u7856>Xi{a2};",
+ "\u7857>Qiao;",
+ "\u7859>We{i4};",
+ "\u785A>Qia{o2};",
+ "\u785C>Keng;",
+ "\u785D>Xiao;",
+ "\u785E>Qu{e4};",
+ "\u785F>Ch{a4}n;",
+ "\u7860>L{a3}ng;",
+ "\u7861>H{o2}ng;",
+ "\u7862>Y{u2};",
+ "\u7863>Xiao;",
+ "\u7864>Xi{a2};",
+ "\u7865>M{a3}ng;",
+ "\u7866>L{o4}ng;",
+ "\u7867>I{o3}ng;",
+ "\u7868>Che;",
+ "\u7869>Ch{e4};",
+ "\u786A>{E2};",
+ "\u786B>Li{u2};",
+ "\u786C>Y{i4}ng;",
+ "\u786D>M{a2}ng;",
+ "\u786E>Qu{e4};",
+ "\u786F>Y{a4}n;",
+ "\u7870>Sha;",
+ "\u7871>K{u3}n;",
+ "\u7872>Y{u4};",
+ "\u7875>L{u3};",
+ "\u7876>Ch{e3}n;",
+ "\u7877>Ji{a3}n;",
+ "\u7878>Nu{e4};",
+ "\u7879>Song;",
+ "\u787A>Zhu{o2};",
+ "\u787B>Keng;",
+ "\u787C>P{e2}ng;",
+ "\u787D>Y{a3}n;",
+ "\u787E>Zhu{i4};",
+ "\u787F>Kong;",
+ "\u7880>C{e2}ng;",
+ "\u7881>Q{i2};",
+ "\u7882>Z{o4}ng;",
+ "\u7883>Q{i4}ng;",
+ "\u7884>L{i2}n;",
+ "\u7885>Jun;",
+ "\u7886>Bo;",
+ "\u7887>D{i4}ng;",
+ "\u7888>M{i2}n;",
+ "\u7889>Diao;",
+ "\u788A>Jian;",
+ "\u788B>H{e4};",
+ "\u788C>L{u4};",
+ "\u788D>A{i4};",
+ "\u788E>Su{i4};",
+ "\u788F>Qu{e4};",
+ "\u7890>L{i2}ng;",
+ "\u7891>Bei;",
+ "\u7892>Y{i2}n;",
+ "\u7893>Du{i4};",
+ "\u7894>W{u3};",
+ "\u7895>Q{i2};",
+ "\u7896>L{u4}n;",
+ "\u7897>W{a3}n;",
+ "\u7898>Di{a3}n;",
+ "\u7899>Gang;",
+ "\u789A>Pe{i2};",
+ "\u789B>Q{i4};",
+ "\u789C>Ch{e3}n;",
+ "\u789D>Ru{a3}n;",
+ "\u789E>Y{a2}n;",
+ "\u789F>Di{e2};",
+ "\u78A0>D{i4}ng;",
+ "\u78A1>D{u2};",
+ "\u78A2>Tu{o2};",
+ "\u78A3>Ji{e2};",
+ "\u78A4>Ying;",
+ "\u78A5>Bi{a3}n;",
+ "\u78A6>K{e4};",
+ "\u78A7>B{i4};",
+ "\u78A8>Wei;",
+ "\u78A9>Shu{o4};",
+ "\u78AA>Zhen;",
+ "\u78AB>Du{a4}n;",
+ "\u78AC>Xi{a2};",
+ "\u78AD>D{a4}ng;",
+ "\u78AE>T{i2};",
+ "\u78AF>Na{o3};",
+ "\u78B0>P{e4}ng;",
+ "\u78B1>Ji{a3}n;",
+ "\u78B2>D{i4};",
+ "\u78B3>T{a4}n;",
+ "\u78B4>Ch{a2};",
+ "\u78B6>Q{i4};",
+ "\u78B8>Feng;",
+ "\u78B9>Xu{a4}n;",
+ "\u78BA>Qu{e4};",
+ "\u78BB>Qu{e4};",
+ "\u78BC>M{a3};",
+ "\u78BD>Gong;",
+ "\u78BE>Ni{a4}n;",
+ "\u78BF>S{u4};",
+ "\u78C0>{E2};",
+ "\u78C1>C{i2};",
+ "\u78C2>Li{u4};",
+ "\u78C3>Si;",
+ "\u78C4>T{a2}ng;",
+ "\u78C5>B{a4}ng;",
+ "\u78C6>Hu{a2};",
+ "\u78C7>Pi;",
+ "\u78C8>We{i3};",
+ "\u78C9>S{a3}ng;",
+ "\u78CA>Le{i3};",
+ "\u78CB>Cuo;",
+ "\u78CC>Zhen;",
+ "\u78CD>Xi{a2};",
+ "\u78CE>Qi;",
+ "\u78CF>Li{a2}n;",
+ "\u78D0>P{a2}n;",
+ "\u78D1>We{i4};",
+ "\u78D2>Y{u3}n;",
+ "\u78D3>Dui;",
+ "\u78D4>Zh{e2};",
+ "\u78D5>Ke;",
+ "\u78D6>La;",
+ "\u78D8>Q{i4}ng;",
+ "\u78D9>G{u3}n;",
+ "\u78DA>Zhuan;",
+ "\u78DB>Ch{a2}n;",
+ "\u78DC>Q{i4};",
+ "\u78DD>A{o2};",
+ "\u78DE>Peng;",
+ "\u78DF>L{u4};",
+ "\u78E0>L{u3};",
+ "\u78E1>K{a4}n;",
+ "\u78E2>Qi{a3}ng;",
+ "\u78E3>Ch{e3}n;",
+ "\u78E4>Y{i3}n;",
+ "\u78E5>Le{i3};",
+ "\u78E6>Biao;",
+ "\u78E7>Q{i4};",
+ "\u78E8>M{o2};",
+ "\u78E9>Qi;",
+ "\u78EA>Cui;",
+ "\u78EB>Zong;",
+ "\u78EC>Q{i4}ng;",
+ "\u78ED>Chu{o4};",
+ "\u78EF>Ji;",
+ "\u78F0>Sh{a4}n;",
+ "\u78F1>La{o2};",
+ "\u78F2>Q{u2};",
+ "\u78F3>Zeng;",
+ "\u78F4>D{e4}ng;",
+ "\u78F5>Ji{a4}n;",
+ "\u78F6>X{i4};",
+ "\u78F7>L{i4}n;",
+ "\u78F8>D{i4}ng;",
+ "\u78F9>Di{a4}n;",
+ "\u78FA>Hu{a2}ng;",
+ "\u78FB>P{a2}n;",
+ "\u78FC>Z{a2};",
+ "\u78FD>Qiao;",
+ "\u78FE>Di;",
+ "\u78FF>L{i4};",
+ "\u7901>Jiao;",
+ "\u7903>Zh{a3}ng;",
+ "\u7904>Qia{o2};",
+ "\u7905>Dun;",
+ "\u7906>Xi{a3}n;",
+ "\u7907>Y{u4};",
+ "\u7908>Zhu{i4};",
+ "\u7909>H{e2};",
+ "\u790A>Hu{o4};",
+ "\u790B>Zha{i2};",
+ "\u790C>Le{i4};",
+ "\u790D>K{e3};",
+ "\u790E>Ch{u3};",
+ "\u790F>J{i2};",
+ "\u7910>Qu{e4};",
+ "\u7911>D{a4}ng;",
+ "\u7912>Y{i3};",
+ "\u7913>Jiang;",
+ "\u7914>P{i4};",
+ "\u7915>Pi;",
+ "\u7916>Y{u4};",
+ "\u7917>Pin;",
+ "\u7918>Q{i4};",
+ "\u7919>A{i4};",
+ "\u791A>Ka{i4};",
+ "\u791B>Jian;",
+ "\u791C>Y{u4};",
+ "\u791D>Ru{a3}n;",
+ "\u791E>M{e2}ng;",
+ "\u791F>Pa{o4};",
+ "\u7920>C{i2};",
+ "\u7923>Mi{e4};",
+ "\u7924>C{a3};",
+ "\u7925>Xi{a2}n;",
+ "\u7926>Ku{a4}ng;",
+ "\u7927>Le{i4};",
+ "\u7928>Le{i3};",
+ "\u7929>Zh{i4};",
+ "\u792A>L{i4};",
+ "\u792B>L{i4};",
+ "\u792C>F{a2}n;",
+ "\u792D>Qu{e4};",
+ "\u792E>Pa{o4};",
+ "\u792F>Ying;",
+ "\u7930>L{i4};",
+ "\u7931>L{o2}ng;",
+ "\u7932>L{o2}ng;",
+ "\u7933>M{o4};",
+ "\u7934>B{o2};",
+ "\u7935>Shuang;",
+ "\u7936>Gu{a4}n;",
+ "\u7937>L{a2}n;",
+ "\u7938>Z{a3}n;",
+ "\u7939>Y{a2}n;",
+ "\u793A>Sh{i4};",
+ "\u793B>Shi4zi4p{a2}ng;",
+ "\u793C>L{i3};",
+ "\u793D>R{e2}ng;",
+ "\u793E>Sh{e4};",
+ "\u793F>Yu{e4};",
+ "\u7940>S{i4};",
+ "\u7941>Q{i2};",
+ "\u7942>Ta;",
+ "\u7943>M{a4};",
+ "\u7944>Xi{e4};",
+ "\u7945>Xian;",
+ "\u7946>Xian;",
+ "\u7947>Zhi;",
+ "\u7948>Q{i2};",
+ "\u7949>Zh{i3};",
+ "\u794A>Beng;",
+ "\u794B>Du{i4};",
+ "\u794C>Zh{o4}ng;",
+ "\u794E>Yi;",
+ "\u794F>Sh{i2};",
+ "\u7950>Yo{u4};",
+ "\u7951>Zh{i4};",
+ "\u7952>Tia{o2};",
+ "\u7953>F{u2};",
+ "\u7954>F{u4};",
+ "\u7955>M{i4};",
+ "\u7956>Z{u3};",
+ "\u7957>Zhi;",
+ "\u7958>Su{a4}n;",
+ "\u7959>Me{i4};",
+ "\u795A>Zu{o4};",
+ "\u795B>Qu;",
+ "\u795C>H{u4};",
+ "\u795D>Zh{u4};",
+ "\u795E>Sh{e2}n;",
+ "\u795F>Su{i4};",
+ "\u7960>C{i2};",
+ "\u7961>Cha{i2};",
+ "\u7962>M{i2};",
+ "\u7963>L{uu3};",
+ "\u7964>Y{u3};",
+ "\u7965>Xi{a2}ng;",
+ "\u7966>W{u2};",
+ "\u7967>Tiao;",
+ "\u7968>Pia{o4};",
+ "\u7969>Zhu;",
+ "\u796A>Gu{i3};",
+ "\u796B>Xi{a2};",
+ "\u796C>Zhi;",
+ "\u796D>J{i4};",
+ "\u796E>Ga{o4};",
+ "\u796F>Zhen;",
+ "\u7970>Ga{o4};",
+ "\u7971>Shu{i4};",
+ "\u7972>Jin;",
+ "\u7973>Ch{e3}n;",
+ "\u7974>Gai;",
+ "\u7975>K{u3}n;",
+ "\u7976>D{i4};",
+ "\u7977>Da{o3};",
+ "\u7978>Hu{o4};",
+ "\u7979>Ta{o2};",
+ "\u797A>Q{i2};",
+ "\u797B>G{u4};",
+ "\u797C>Gu{a4}n;",
+ "\u797D>Zu{i4};",
+ "\u797E>L{i2}ng;",
+ "\u797F>L{u4};",
+ "\u7980>B{i3}ng;",
+ "\u7981>J{i4}n;",
+ "\u7982>Da{o3};",
+ "\u7983>Zh{i2};",
+ "\u7984>L{u4};",
+ "\u7985>Sh{a4}n;",
+ "\u7986>Bei;",
+ "\u7987>Zh{e3};",
+ "\u7988>Hui;",
+ "\u7989>Yo{u3};",
+ "\u798A>X{i4};",
+ "\u798B>Yin;",
+ "\u798C>Zi;",
+ "\u798D>Hu{o4};",
+ "\u798E>Zhen;",
+ "\u798F>F{u2};",
+ "\u7990>Yu{a4}n;",
+ "\u7991>W{u2};",
+ "\u7992>Xi{a3}n;",
+ "\u7993>Y{a2}ng;",
+ "\u7994>T{i2};",
+ "\u7995>Yi;",
+ "\u7996>Me{i2};",
+ "\u7997>Si;",
+ "\u7998>D{i4};",
+ "\u799A>Zhu{o2};",
+ "\u799B>Zhen;",
+ "\u799C>Y{o3}ng;",
+ "\u799D>J{i2};",
+ "\u799E>Ga{o4};",
+ "\u799F>T{a2}ng;",
+ "\u79A0>Si;",
+ "\u79A1>M{a4};",
+ "\u79A2>Ta;",
+ "\u79A4>Xuan;",
+ "\u79A5>Q{i2};",
+ "\u79A6>Y{u4};",
+ "\u79A7>Xi;",
+ "\u79A8>Ji;",
+ "\u79A9>S{i4};",
+ "\u79AA>Ch{a2}n;",
+ "\u79AB>T{a3}n;",
+ "\u79AC>Kua{i4};",
+ "\u79AD>Su{i4};",
+ "\u79AE>L{i3};",
+ "\u79AF>N{o2}ng;",
+ "\u79B0>N{i3};",
+ "\u79B1>Da{o3};",
+ "\u79B2>L{i4};",
+ "\u79B3>R{a2}ng;",
+ "\u79B4>Yu{e4};",
+ "\u79B5>T{i2};",
+ "\u79B6>Z{a3}n;",
+ "\u79B7>Le{i4};",
+ "\u79B8>Ro{u2};",
+ "\u79B9>Y{u3};",
+ "\u79BA>Y{u2};",
+ "\u79BB>Chi;",
+ "\u79BC>Xi{e4};",
+ "\u79BD>Q{i2}n;",
+ "\u79BE>H{e2};",
+ "\u79BF>Tu;",
+ "\u79C0>Xi{u4};",
+ "\u79C1>Si;",
+ "\u79C2>R{e2}n;",
+ "\u79C3>Tu;",
+ "\u79C4>Z{i3};",
+ "\u79C5>Ch{a2};",
+ "\u79C6>G{a3}n;",
+ "\u79C7>Y{i4};",
+ "\u79C8>Xian;",
+ "\u79C9>B{i3}ng;",
+ "\u79CA>Ni{a2}n;",
+ "\u79CB>Qiu;",
+ "\u79CC>Qiu;",
+ "\u79CD>Ch{o2}ng;",
+ "\u79CE>F{e2}n;",
+ "\u79CF>Ha{o4};",
+ "\u79D0>Y{u2}n;",
+ "\u79D1>Ke;",
+ "\u79D2>Mia{o3};",
+ "\u79D3>Zhi;",
+ "\u79D4>Geng;",
+ "\u79D5>B{i3};",
+ "\u79D6>Zhi;",
+ "\u79D7>Y{u4};",
+ "\u79D8>M{i4};",
+ "\u79D9>K{u4};",
+ "\u79DA>B{a4}n;",
+ "\u79DB>Pi;",
+ "\u79DC>N{i2};",
+ "\u79DD>L{i4};",
+ "\u79DE>Yo{u2};",
+ "\u79DF>Zu;",
+ "\u79E0>Pi;",
+ "\u79E1>B{a2};",
+ "\u79E2>L{i2}ng;",
+ "\u79E3>M{o4};",
+ "\u79E4>Ch{e4}ng;",
+ "\u79E5>Ni{a2}n;",
+ "\u79E6>Q{i2}n;",
+ "\u79E7>Yang;",
+ "\u79E8>Zu{o2};",
+ "\u79E9>Zh{i4};",
+ "\u79EA>Zhi;",
+ "\u79EB>Sh{u2};",
+ "\u79EC>J{u4};",
+ "\u79ED>Z{i3};",
+ "\u79EE>Hu{o2};",
+ "\u79EF>Ji;",
+ "\u79F0>Cheng;",
+ "\u79F1>T{o2}ng;",
+ "\u79F2>Zh{i4};",
+ "\u79F3>Hu{o2};",
+ "\u79F4>H{e2};",
+ "\u79F5>Yin;",
+ "\u79F6>Zi;",
+ "\u79F7>Zh{i2};",
+ "\u79F8>Jie;",
+ "\u79F9>R{e3}n;",
+ "\u79FA>D{u4};",
+ "\u79FB>Y{i2};",
+ "\u79FC>Zhu;",
+ "\u79FD>Hu{i4};",
+ "\u79FE>N{o2}ng;",
+ "\u79FF>F{u3};",
+ "\u7A00>Xi;",
+ "\u7A01>Ka{o3};",
+ "\u7A02>L{a2}ng;",
+ "\u7A03>Fu;",
+ "\u7A04>Z{e4};",
+ "\u7A05>Shu{i4};",
+ "\u7A06>L{uu3};",
+ "\u7A07>K{u3}n;",
+ "\u7A08>G{a3}n;",
+ "\u7A09>Geng;",
+ "\u7A0A>T{i2};",
+ "\u7A0B>Ch{e2}ng;",
+ "\u7A0C>T{u2};",
+ "\u7A0D>Shao;",
+ "\u7A0E>Shu{i4};",
+ "\u7A0F>Y{a4};",
+ "\u7A10>L{u3}n;",
+ "\u7A11>L{u4};",
+ "\u7A12>G{u4};",
+ "\u7A13>Zu{o2};",
+ "\u7A14>R{e3}n;",
+ "\u7A15>Zh{u4}n;",
+ "\u7A16>B{a4}ng;",
+ "\u7A17>Ba{i4};",
+ "\u7A18>Ji;",
+ "\u7A19>Zh{i2};",
+ "\u7A1A>Zh{i4};",
+ "\u7A1B>K{u3}n;",
+ "\u7A1C>L{e2}ng;",
+ "\u7A1D>P{e2}ng;",
+ "\u7A1E>Ke;",
+ "\u7A1F>B{i3}ng;",
+ "\u7A20>Cho{u2};",
+ "\u7A21>Z{u2};",
+ "\u7A22>Y{u4};",
+ "\u7A23>Su;",
+ "\u7A24>L{uu}{e4};",
+ "\u7A26>Yi;",
+ "\u7A27>X{i4};",
+ "\u7A28>Bian;",
+ "\u7A29>J{i4};",
+ "\u7A2A>F{u4};",
+ "\u7A2B>Bi;",
+ "\u7A2C>Nu{o4};",
+ "\u7A2D>Jie;",
+ "\u7A2E>Zh{o3}ng;",
+ "\u7A2F>Zong;",
+ "\u7A30>Xu;",
+ "\u7A31>Cheng;",
+ "\u7A32>Da{o4};",
+ "\u7A33>W{e3}n;",
+ "\u7A34>Li{a2}n;",
+ "\u7A35>Zi;",
+ "\u7A36>Y{u4};",
+ "\u7A37>J{i4};",
+ "\u7A38>X{u4};",
+ "\u7A39>Zh{e3}n;",
+ "\u7A3A>Zh{i4};",
+ "\u7A3B>Da{o4};",
+ "\u7A3C>Ji{a4};",
+ "\u7A3D>Ji;",
+ "\u7A3E>Ga{o3};",
+ "\u7A3F>Ga{o3};",
+ "\u7A40>G{u3};",
+ "\u7A41>R{o2}ng;",
+ "\u7A42>Su{i4};",
+ "\u7A44>J{i4};",
+ "\u7A45>Kang;",
+ "\u7A46>M{u4};",
+ "\u7A47>Shan;",
+ "\u7A48>M{e2}n;",
+ "\u7A49>Zh{i4};",
+ "\u7A4A>J{i4};",
+ "\u7A4B>L{u4};",
+ "\u7A4C>Su;",
+ "\u7A4D>Ji;",
+ "\u7A4E>Y{i3}ng;",
+ "\u7A4F>W{e3}n;",
+ "\u7A50>Qiu;",
+ "\u7A51>S{e4};",
+ "\u7A53>Y{i4};",
+ "\u7A54>Hu{a2}ng;",
+ "\u7A55>Qi{e4};",
+ "\u7A56>J{i3};",
+ "\u7A57>Su{i4};",
+ "\u7A58>Xiao;",
+ "\u7A59>P{u2};",
+ "\u7A5A>Jiao;",
+ "\u7A5B>Zhuo;",
+ "\u7A5C>T{o2}ng;",
+ "\u7A5E>L{uu3};",
+ "\u7A5F>Su{i4};",
+ "\u7A60>N{o2}ng;",
+ "\u7A61>S{e4};",
+ "\u7A62>Hu{i4};",
+ "\u7A63>R{a2}ng;",
+ "\u7A64>Nu{o4};",
+ "\u7A65>Y{u4};",
+ "\u7A66>Bin;",
+ "\u7A67>J{i4};",
+ "\u7A68>Tu{i2};",
+ "\u7A69>W{e3}n;",
+ "\u7A6A>Cheng;",
+ "\u7A6B>Hu{o4};",
+ "\u7A6C>G{o3}ng;",
+ "\u7A6D>L{uu3};",
+ "\u7A6E>Biao;",
+ "\u7A70>R{a2}ng;",
+ "\u7A71>Zhuo;",
+ "\u7A72>L{i2};",
+ "\u7A73>Z{a4}n;",
+ "\u7A74>Xu{e4};",
+ "\u7A75>Wa;",
+ "\u7A76>Ji{u4};",
+ "\u7A77>Qi{o2}ng;",
+ "\u7A78>X{i4};",
+ "\u7A79>Qiong;",
+ "\u7A7A>Kong;",
+ "\u7A7B>Yu;",
+ "\u7A7C>Sen;",
+ "\u7A7D>J{i3}ng;",
+ "\u7A7E>Ya{o4};",
+ "\u7A7F>Chuan;",
+ "\u7A80>Zhun;",
+ "\u7A81>T{u2};",
+ "\u7A82>La{o2};",
+ "\u7A83>Qi{e4};",
+ "\u7A84>Zha{i3};",
+ "\u7A85>Ya{o3};",
+ "\u7A86>Bi{a3}n;",
+ "\u7A87>Ba{o2};",
+ "\u7A88>Ya{o3};",
+ "\u7A89>B{i3}ng;",
+ "\u7A8A>Wa;",
+ "\u7A8B>Zh{u2};",
+ "\u7A8C>Jia{o4};",
+ "\u7A8D>Qia{o4};",
+ "\u7A8E>Dia{o4};",
+ "\u7A8F>Wu;",
+ "\u7A90>Gui;",
+ "\u7A91>Ya{o2};",
+ "\u7A92>Zh{i4};",
+ "\u7A93>Chuang;",
+ "\u7A94>Ya{o3};",
+ "\u7A95>Tia{o3};",
+ "\u7A96>Jia{o4};",
+ "\u7A97>Chuang;",
+ "\u7A98>Ji{o3}ng;",
+ "\u7A99>Xiao;",
+ "\u7A9A>Ch{e2}ng;",
+ "\u7A9B>Ko{u4};",
+ "\u7A9C>Cu{a4}n;",
+ "\u7A9D>Wo;",
+ "\u7A9E>D{a4}n;",
+ "\u7A9F>Ku;",
+ "\u7AA0>Ke;",
+ "\u7AA1>Zhu{i4};",
+ "\u7AA2>X{u4};",
+ "\u7AA3>S{u4};",
+ "\u7AA4>Guan;",
+ "\u7AA5>Kui;",
+ "\u7AA6>Do{u4};",
+ "\u7AA8>Y{i4}n;",
+ "\u7AA9>Wo;",
+ "\u7AAA>Wa;",
+ "\u7AAB>Y{a4};",
+ "\u7AAC>Y{u2};",
+ "\u7AAD>J{u4};",
+ "\u7AAE>Qi{o2}ng;",
+ "\u7AAF>Ya{o2};",
+ "\u7AB0>Ya{o2};",
+ "\u7AB1>Tia{o4};",
+ "\u7AB2>Cha{o2};",
+ "\u7AB3>Y{u3};",
+ "\u7AB4>Ti{a2}n;",
+ "\u7AB5>Dia{o4};",
+ "\u7AB6>J{u4};",
+ "\u7AB7>Lia{o2};",
+ "\u7AB8>Xi;",
+ "\u7AB9>W{u4};",
+ "\u7ABA>Kui;",
+ "\u7ABB>Chuang;",
+ "\u7ABC>Zhao;",
+ "\u7ABE>Ku{a3}n;",
+ "\u7ABF>L{o2}ng;",
+ "\u7AC0>Cheng;",
+ "\u7AC1>Cu{i4};",
+ "\u7AC2>Pia{o2};",
+ "\u7AC3>Za{o4};",
+ "\u7AC4>Cu{a4}n;",
+ "\u7AC5>Qia{o4};",
+ "\u7AC6>Qi{o2}ng;",
+ "\u7AC7>Do{u4};",
+ "\u7AC8>Za{o4};",
+ "\u7AC9>L{o3}ng;",
+ "\u7ACA>Qi{e4};",
+ "\u7ACB>L{i4};",
+ "\u7ACC>Ch{u4};",
+ "\u7ACD>Shi2gong1sheng;",
+ "\u7ACE>Fo{u4};",
+ "\u7ACF>Qian1gong1sheng;",
+ "\u7AD0>Ch{u4};",
+ "\u7AD1>H{o2}ng;",
+ "\u7AD2>Q{i2};",
+ "\u7AD3>Qian1fen1zhi1yi1gong1sheng;",
+ "\u7AD4>Gong1sheng;",
+ "\u7AD5>Shi2fen1zhi1yi1gong1sheng;",
+ "\u7AD6>Sh{u4};",
+ "\u7AD7>Mia{o4};",
+ "\u7AD8>J{u3};",
+ "\u7AD9>Zh{a4}n;",
+ "\u7ADA>Zh{u4};",
+ "\u7ADB>L{i2}ng;",
+ "\u7ADC>L{o2}ng;",
+ "\u7ADD>B{i4}ng;",
+ "\u7ADE>J{i4}ng;",
+ "\u7ADF>J{i4}ng;",
+ "\u7AE0>Zhang;",
+ "\u7AE1>Yi1gong1sheng1deyi1bai3be{i4};",
+ "\u7AE2>S{i4};",
+ "\u7AE3>J{u4}n;",
+ "\u7AE4>H{o2}ng;",
+ "\u7AE5>T{o2}ng;",
+ "\u7AE6>S{o3}ng;",
+ "\u7AE7>J{i4}ng;",
+ "\u7AE8>Dia{o4};",
+ "\u7AE9>Y{i4};",
+ "\u7AEA>Sh{u4};",
+ "\u7AEB>J{i4}ng;",
+ "\u7AEC>Q{u3};",
+ "\u7AED>Ji{e2};",
+ "\u7AEE>P{i2}ng;",
+ "\u7AEF>Duan;",
+ "\u7AF0>Sha{o2};",
+ "\u7AF1>Zhu{a3}n;",
+ "\u7AF2>C{e2}ng;",
+ "\u7AF3>Deng;",
+ "\u7AF4>Cui;",
+ "\u7AF5>Huai;",
+ "\u7AF6>J{i4}ng;",
+ "\u7AF7>K{a4}n;",
+ "\u7AF8>J{i4}ng;",
+ "\u7AF9>Zh{u2};",
+ "\u7AFA>Zh{u2};",
+ "\u7AFB>L{e4};",
+ "\u7AFC>P{e2}ng;",
+ "\u7AFD>Y{u2};",
+ "\u7AFE>Ch{i2};",
+ "\u7AFF>Gan;",
+ "\u7B00>M{a2}ng;",
+ "\u7B01>Zh{u2};",
+ "\u7B03>D{u3};",
+ "\u7B04>Ji;",
+ "\u7B05>Xia{o2};",
+ "\u7B06>Ba;",
+ "\u7B07>Su{a4}n;",
+ "\u7B08>J{i2};",
+ "\u7B09>Zh{e3}n;",
+ "\u7B0A>Zha{o4};",
+ "\u7B0B>S{u3}n;",
+ "\u7B0C>Y{a2};",
+ "\u7B0D>Zhu{i4};",
+ "\u7B0E>Yu{a2}n;",
+ "\u7B0F>H{u4};",
+ "\u7B10>Gang;",
+ "\u7B11>Xia{o4};",
+ "\u7B12>C{e2}n;",
+ "\u7B13>P{i2};",
+ "\u7B14>B{i3};",
+ "\u7B15>Ji{a3}n;",
+ "\u7B16>Y{i3};",
+ "\u7B17>Dong;",
+ "\u7B18>Shan;",
+ "\u7B19>Sheng;",
+ "\u7B1A>Xi{a2};",
+ "\u7B1B>D{i2};",
+ "\u7B1C>Zh{u2};",
+ "\u7B1D>N{a4};",
+ "\u7B1E>Chi;",
+ "\u7B1F>Gu;",
+ "\u7B20>L{i4};",
+ "\u7B21>Qi{e4};",
+ "\u7B22>M{i3}n;",
+ "\u7B23>Bao;",
+ "\u7B24>Tia{o2};",
+ "\u7B25>S{i4};",
+ "\u7B26>F{u2};",
+ "\u7B27>C{e4};",
+ "\u7B28>B{e4}n;",
+ "\u7B29>Pe{i4};",
+ "\u7B2A>D{a2};",
+ "\u7B2B>Z{i3};",
+ "\u7B2C>D{i4};",
+ "\u7B2D>L{i2}ng;",
+ "\u7B2E>Z{e2};",
+ "\u7B2F>N{u2};",
+ "\u7B30>F{u2};",
+ "\u7B31>Go{u3};",
+ "\u7B32>Fan;",
+ "\u7B33>Jia;",
+ "\u7B34>G{e3};",
+ "\u7B35>F{a4}n;",
+ "\u7B36>Sh{i3};",
+ "\u7B37>Ma{o3};",
+ "\u7B38>P{o3};",
+ "\u7B3A>Jian;",
+ "\u7B3B>Qi{o2}ng;",
+ "\u7B3C>L{o2}ng;",
+ "\u7B3E>Bian;",
+ "\u7B3F>Lu{o4};",
+ "\u7B40>Gu{i4};",
+ "\u7B41>Q{u3};",
+ "\u7B42>Ch{i2};",
+ "\u7B43>Yin;",
+ "\u7B44>Ya{o4};",
+ "\u7B45>Xi{a3}n;",
+ "\u7B46>B{i3};",
+ "\u7B47>Qi{o2}ng;",
+ "\u7B48>Gua;",
+ "\u7B49>D{e3}ng;",
+ "\u7B4A>Jia{o3};",
+ "\u7B4B>Jin;",
+ "\u7B4C>Qu{a2}n;",
+ "\u7B4D>S{u3}n;",
+ "\u7B4E>R{u2};",
+ "\u7B4F>F{a2};",
+ "\u7B50>Kuang;",
+ "\u7B51>Zh{u2};",
+ "\u7B52>T{o3}ng;",
+ "\u7B53>Ji;",
+ "\u7B54>D{a2};",
+ "\u7B55>X{i2}ng;",
+ "\u7B56>C{e4};",
+ "\u7B57>Zh{o4}ng;",
+ "\u7B58>Ko{u4};",
+ "\u7B59>La{i2};",
+ "\u7B5A>B{i4};",
+ "\u7B5B>Shai;",
+ "\u7B5C>Dang;",
+ "\u7B5D>Zheng;",
+ "\u7B5E>C{e4};",
+ "\u7B5F>Fu;",
+ "\u7B60>Y{u2}n;",
+ "\u7B61>T{u2};",
+ "\u7B62>P{a2};",
+ "\u7B63>L{i4};",
+ "\u7B64>L{a2}ng;",
+ "\u7B65>J{u3};",
+ "\u7B66>Gu{a3}n;",
+ "\u7B67>Ji{a3}n;",
+ "\u7B68>H{a2}n;",
+ "\u7B69>T{o2}ng;",
+ "\u7B6A>Xi{a2};",
+ "\u7B6B>Zh{i4};",
+ "\u7B6C>Ch{e2}ng;",
+ "\u7B6D>Su{a4}n;",
+ "\u7B6E>Sh{i4};",
+ "\u7B6F>Zh{u4};",
+ "\u7B70>Zu{o2};",
+ "\u7B71>Xia{o3};",
+ "\u7B72>Shao;",
+ "\u7B73>T{i2}ng;",
+ "\u7B74>C{e4};",
+ "\u7B75>Y{a2}n;",
+ "\u7B76>Ga{o3};",
+ "\u7B77>Kua{i4};",
+ "\u7B78>Gan;",
+ "\u7B79>Cho{u2};",
+ "\u7B7B>G{a4}ng;",
+ "\u7B7C>Y{u2}n;",
+ "\u7B7E>Qian;",
+ "\u7B7F>Xia{o3};",
+ "\u7B80>Ji{a3}n;",
+ "\u7B81>P{u2};",
+ "\u7B82>La{i2};",
+ "\u7B83>Zou;",
+ "\u7B84>B{i4};",
+ "\u7B85>B{i4};",
+ "\u7B86>B{i4};",
+ "\u7B87>G{e4};",
+ "\u7B88>Ch{i2};",
+ "\u7B89>Gua{i3};",
+ "\u7B8A>Yu;",
+ "\u7B8B>Jian;",
+ "\u7B8C>Zha{o4};",
+ "\u7B8D>Gu;",
+ "\u7B8E>Ch{i2};",
+ "\u7B8F>Zheng;",
+ "\u7B90>Jing;",
+ "\u7B91>Sh{a4};",
+ "\u7B92>Zho{u3};",
+ "\u7B93>L{u4};",
+ "\u7B94>B{o2};",
+ "\u7B95>Ji;",
+ "\u7B96>L{i2}n;",
+ "\u7B97>Su{a4}n;",
+ "\u7B98>J{u4}n;",
+ "\u7B99>F{u2};",
+ "\u7B9A>Zh{a2};",
+ "\u7B9B>Gu;",
+ "\u7B9C>Kong;",
+ "\u7B9D>Qi{a2}n;",
+ "\u7B9E>Quan;",
+ "\u7B9F>J{u4}n;",
+ "\u7BA0>Chu{i2};",
+ "\u7BA1>Gu{a3}n;",
+ "\u7BA2>Yuan;",
+ "\u7BA3>C{e4};",
+ "\u7BA4>J{u2};",
+ "\u7BA5>B{o3};",
+ "\u7BA6>Z{e2};",
+ "\u7BA7>Qi{e4};",
+ "\u7BA8>Tu{o4};",
+ "\u7BA9>Lu{o2};",
+ "\u7BAA>Dan;",
+ "\u7BAB>Xiao;",
+ "\u7BAC>Ru{o4};",
+ "\u7BAD>Ji{a4}n;",
+ "\u7BAE>Xuan;",
+ "\u7BAF>Bian;",
+ "\u7BB0>S{u3}n;",
+ "\u7BB1>Xiang;",
+ "\u7BB2>Xi{a3}n;",
+ "\u7BB3>P{i2}ng;",
+ "\u7BB4>Zhen;",
+ "\u7BB5>Sh{e3}ng;",
+ "\u7BB6>H{u2};",
+ "\u7BB7>Shi;",
+ "\u7BB8>Zh{u4};",
+ "\u7BB9>Yue;",
+ "\u7BBA>Ch{u3}n;",
+ "\u7BBB>L{uu4};",
+ "\u7BBC>Wu;",
+ "\u7BBD>D{o3}ng;",
+ "\u7BBE>Xiao;",
+ "\u7BBF>J{i2};",
+ "\u7BC0>Ji{e2};",
+ "\u7BC1>Hu{a2}ng;",
+ "\u7BC2>Xing;",
+ "\u7BC3>Me{i2};",
+ "\u7BC4>F{a4}n;",
+ "\u7BC5>Chu{i2};",
+ "\u7BC6>Zhu{a4}n;",
+ "\u7BC7>Pian;",
+ "\u7BC8>Feng;",
+ "\u7BC9>Zh{u2};",
+ "\u7BCA>H{o2}ng;",
+ "\u7BCB>Qi{e4};",
+ "\u7BCC>Ho{u2};",
+ "\u7BCD>Qiu;",
+ "\u7BCE>Mia{o3};",
+ "\u7BCF>Qi{a4}n;",
+ "\u7BD1>Ku{i4};",
+ "\u7BD3>Lo{u3};",
+ "\u7BD4>Y{u2}n;",
+ "\u7BD5>H{e2};",
+ "\u7BD6>T{a2}ng;",
+ "\u7BD7>Yu{e4};",
+ "\u7BD8>Chou;",
+ "\u7BD9>Gao;",
+ "\u7BDA>Fe{i3};",
+ "\u7BDB>Ru{o4};",
+ "\u7BDC>Zheng;",
+ "\u7BDD>Gou;",
+ "\u7BDE>Ni{e4};",
+ "\u7BDF>Qi{a4}n;",
+ "\u7BE0>Xia{o3};",
+ "\u7BE1>Cu{a4}n;",
+ "\u7BE2>Gong;",
+ "\u7BE3>P{a2}ng;",
+ "\u7BE4>D{u3};",
+ "\u7BE5>L{i4};",
+ "\u7BE6>B{i4};",
+ "\u7BE7>Zhu{o2};",
+ "\u7BE8>Ch{u2};",
+ "\u7BE9>Shai;",
+ "\u7BEA>Ch{i2};",
+ "\u7BEB>Zh{u2};",
+ "\u7BEC>Qiang;",
+ "\u7BED>L{o2}ng;",
+ "\u7BEE>L{a2}n;",
+ "\u7BEF>Jian;",
+ "\u7BF0>B{u4};",
+ "\u7BF1>L{i2};",
+ "\u7BF2>Hu{i4};",
+ "\u7BF3>B{i4};",
+ "\u7BF4>D{i2};",
+ "\u7BF5>Cong;",
+ "\u7BF6>Yan;",
+ "\u7BF7>P{e2}ng;",
+ "\u7BF8>Sen;",
+ "\u7BF9>Zhu{a4}n;",
+ "\u7BFA>Pa{i2};",
+ "\u7BFB>Pia{o4};",
+ "\u7BFC>Dou;",
+ "\u7BFD>Y{u3};",
+ "\u7BFE>Mi{e4};",
+ "\u7BFF>Zhuan;",
+ "\u7C00>Z{e2};",
+ "\u7C01>X{i3};",
+ "\u7C02>Gu{o2};",
+ "\u7C03>Y{i2};",
+ "\u7C04>H{u4};",
+ "\u7C05>Ch{a3}n;",
+ "\u7C06>Ko{u4};",
+ "\u7C07>C{u4};",
+ "\u7C08>P{i2}ng;",
+ "\u7C09>Cho{u4};",
+ "\u7C0A>Ji;",
+ "\u7C0B>Gu{i3};",
+ "\u7C0C>S{u4};",
+ "\u7C0D>Lo{u3};",
+ "\u7C0E>Zh{a4};",
+ "\u7C0F>L{u4};",
+ "\u7C10>Ni{a3}n;",
+ "\u7C11>Suo;",
+ "\u7C12>Cu{a4}n;",
+ "\u7C14>Suo;",
+ "\u7C15>L{e4};",
+ "\u7C16>Du{a4}n;",
+ "\u7C18>Xiao;",
+ "\u7C19>B{o2};",
+ "\u7C1A>M{i4};",
+ "\u7C1B>Si;",
+ "\u7C1C>D{a4}ng;",
+ "\u7C1D>Lia{o2};",
+ "\u7C1E>Dan;",
+ "\u7C1F>Di{a4}n;",
+ "\u7C20>F{u3};",
+ "\u7C21>Ji{a3}n;",
+ "\u7C22>M{i3}n;",
+ "\u7C23>Ku{i4};",
+ "\u7C24>Da{i4};",
+ "\u7C25>Qia{o2};",
+ "\u7C26>Deng;",
+ "\u7C27>Hu{a2}ng;",
+ "\u7C28>S{u3}n;",
+ "\u7C29>La{o2};",
+ "\u7C2A>Zan;",
+ "\u7C2B>Xiao;",
+ "\u7C2C>D{u4};",
+ "\u7C2D>Sh{i4};",
+ "\u7C2E>Zan;",
+ "\u7C30>Pa{i2};",
+ "\u7C32>Pa{i2};",
+ "\u7C33>G{a4}n;",
+ "\u7C34>J{u4};",
+ "\u7C35>D{u4};",
+ "\u7C36>L{u4};",
+ "\u7C37>Y{a2}n;",
+ "\u7C38>B{o4};",
+ "\u7C39>Dang;",
+ "\u7C3A>Sa{i4};",
+ "\u7C3B>Ke;",
+ "\u7C3C>L{o2}ng;",
+ "\u7C3D>Qian;",
+ "\u7C3E>Li{a2}n;",
+ "\u7C3F>B{o2};",
+ "\u7C40>Zho{u4};",
+ "\u7C41>La{i4};",
+ "\u7C43>L{a2}n;",
+ "\u7C44>Ku{i4};",
+ "\u7C45>Y{u2};",
+ "\u7C46>Yu{e4};",
+ "\u7C47>Ha{o2};",
+ "\u7C48>Zhen;",
+ "\u7C49>Ta{i2};",
+ "\u7C4A>T{i4};",
+ "\u7C4B>M{i2};",
+ "\u7C4C>Cho{u2};",
+ "\u7C4D>J{i2};",
+ "\u7C50>T{e2}ng;",
+ "\u7C51>Zhu{a4}n;",
+ "\u7C52>Zho{u4};",
+ "\u7C53>Fan;",
+ "\u7C54>So{u3};",
+ "\u7C55>Zho{u4};",
+ "\u7C57>Zhu{o2};",
+ "\u7C58>T{e2}ng;",
+ "\u7C59>L{u4};",
+ "\u7C5A>L{u2};",
+ "\u7C5B>Jian;",
+ "\u7C5C>Tu{o4};",
+ "\u7C5D>Y{i2}ng;",
+ "\u7C5E>Y{u4};",
+ "\u7C5F>La{i4};",
+ "\u7C60>L{o2}ng;",
+ "\u7C62>Li{a2}n;",
+ "\u7C63>L{a2}n;",
+ "\u7C64>Qian;",
+ "\u7C65>Yu{e4};",
+ "\u7C66>Zhong;",
+ "\u7C67>Q{u2};",
+ "\u7C68>Li{a2}n;",
+ "\u7C69>Bian;",
+ "\u7C6A>Du{a4}n;",
+ "\u7C6B>Zu{a3}n;",
+ "\u7C6C>L{i2};",
+ "\u7C6D>Si;",
+ "\u7C6E>Lu{o2};",
+ "\u7C6F>Y{i2}ng;",
+ "\u7C70>Yu{e4};",
+ "\u7C71>Zhu{o2};",
+ "\u7C72>Xu;",
+ "\u7C73>M{i3};",
+ "\u7C74>D{i2};",
+ "\u7C75>F{a2}n;",
+ "\u7C76>Shen;",
+ "\u7C77>Zh{e2};",
+ "\u7C78>Shen;",
+ "\u7C79>N{uu3};",
+ "\u7C7A>Xi{e2};",
+ "\u7C7B>Le{i4};",
+ "\u7C7C>Xian;",
+ "\u7C7D>Z{i3};",
+ "\u7C7E>N{i2};",
+ "\u7C7F>C{u4}n;",
+ "\u7C81>Qian;",
+ "\u7C83>B{i3};",
+ "\u7C84>B{a3}n;",
+ "\u7C85>W{u4};",
+ "\u7C86>Sha;",
+ "\u7C87>Kang;",
+ "\u7C88>Ro{u3};",
+ "\u7C89>F{e3}n;",
+ "\u7C8A>B{i4};",
+ "\u7C8B>Cu{i4};",
+ "\u7C8D>L{i2};",
+ "\u7C8E>Ch{i3};",
+ "\u7C91>Ba;",
+ "\u7C92>L{i4};",
+ "\u7C93>Gan;",
+ "\u7C94>J{u4};",
+ "\u7C95>P{o4};",
+ "\u7C96>M{o4};",
+ "\u7C97>Cu;",
+ "\u7C98>Ni{a2}n;",
+ "\u7C99>Zho{u4};",
+ "\u7C9A>L{i2};",
+ "\u7C9B>S{u4};",
+ "\u7C9C>Tia{o4};",
+ "\u7C9D>L{i4};",
+ "\u7C9E>Qi;",
+ "\u7C9F>S{u4};",
+ "\u7CA0>H{o2}ng;",
+ "\u7CA1>T{o2}ng;",
+ "\u7CA2>Zi;",
+ "\u7CA3>C{e4};",
+ "\u7CA4>Yu{e4};",
+ "\u7CA5>Zhou;",
+ "\u7CA6>L{i4}n;",
+ "\u7CA7>Zhuang;",
+ "\u7CA8>Ba{i3};",
+ "\u7CAA>F{e4}n;",
+ "\u7CAE>Li{a2}ng;",
+ "\u7CAF>Xi{a4}n;",
+ "\u7CB0>F{u2};",
+ "\u7CB1>Li{a2}ng;",
+ "\u7CB2>C{a4}n;",
+ "\u7CB3>Geng;",
+ "\u7CB4>L{i3};",
+ "\u7CB5>Yu{e4};",
+ "\u7CB6>L{u4};",
+ "\u7CB7>J{u2};",
+ "\u7CB8>Q{i2};",
+ "\u7CB9>Cu{i4};",
+ "\u7CBA>Ba{i4};",
+ "\u7CBB>Zhang;",
+ "\u7CBC>L{i2}n;",
+ "\u7CBD>Z{o4}ng;",
+ "\u7CBE>Jing;",
+ "\u7CBF>Gu{o3};",
+ "\u7CC1>San;",
+ "\u7CC2>S{a3}n;",
+ "\u7CC3>T{a2}ng;",
+ "\u7CC4>Bian;",
+ "\u7CC5>Ro{u3};",
+ "\u7CC6>Mi{a4}n;",
+ "\u7CC7>Ho{u2};",
+ "\u7CC8>X{u3};",
+ "\u7CC9>Z{o4}ng;",
+ "\u7CCA>H{u2};",
+ "\u7CCB>Ji{a4}n;",
+ "\u7CCC>Z{a2}n;",
+ "\u7CCD>C{i2};",
+ "\u7CCE>L{i2};",
+ "\u7CCF>Xi{e4};",
+ "\u7CD0>Fu;",
+ "\u7CD1>N{i4};",
+ "\u7CD2>Be{i4};",
+ "\u7CD3>G{u3};",
+ "\u7CD4>Xi{u3};",
+ "\u7CD5>Gao;",
+ "\u7CD6>T{a2}ng;",
+ "\u7CD7>Qi{u3};",
+ "\u7CD9>Cao;",
+ "\u7CDA>Zhuang;",
+ "\u7CDB>T{a2}ng;",
+ "\u7CDC>M{i2};",
+ "\u7CDD>San;",
+ "\u7CDE>F{e4}n;",
+ "\u7CDF>Zao;",
+ "\u7CE0>Kang;",
+ "\u7CE1>Ji{a4}ng;",
+ "\u7CE2>M{o2};",
+ "\u7CE3>S{a3}n;",
+ "\u7CE4>S{a3}n;",
+ "\u7CE5>Nu{o4};",
+ "\u7CE6>Xi;",
+ "\u7CE7>Li{a2}ng;",
+ "\u7CE8>Ji{a4}ng;",
+ "\u7CE9>Kua{i4};",
+ "\u7CEA>B{o2};",
+ "\u7CEB>Hu{a2}n;",
+ "\u7CED>Z{o4}ng;",
+ "\u7CEE>Xi{a4}n;",
+ "\u7CEF>Nu{o4};",
+ "\u7CF0>Tu{a2}n;",
+ "\u7CF1>Ni{e4};",
+ "\u7CF2>L{i4};",
+ "\u7CF3>Zu{o4};",
+ "\u7CF4>D{i2};",
+ "\u7CF5>Ni{e4};",
+ "\u7CF6>Tia{o4};",
+ "\u7CF7>L{a2}n;",
+ "\u7CF8>M{i4};",
+ "\u7CF9>Jiao3si1p{a2}ng;",
+ "\u7CFA>Jiu;",
+ "\u7CFB>X{i4};",
+ "\u7CFC>Gong;",
+ "\u7CFD>Zh{e3}ng;",
+ "\u7CFE>Jiu1ji{u3};",
+ "\u7CFF>Yo{u4};",
+ "\u7D00>J{i4};",
+ "\u7D01>Ch{a4};",
+ "\u7D02>Zho{u4};",
+ "\u7D03>X{u2}n;",
+ "\u7D04>Yue;",
+ "\u7D05>H{o2}ng;",
+ "\u7D06>Yu;",
+ "\u7D07>H{e2};",
+ "\u7D08>W{a2}n;",
+ "\u7D09>R{e4}n;",
+ "\u7D0A>W{e4}n;",
+ "\u7D0B>W{e2}n;",
+ "\u7D0C>Qi{u2};",
+ "\u7D0D>N{a4};",
+ "\u7D0E>Zi;",
+ "\u7D0F>To{u3};",
+ "\u7D10>Ni{u3};",
+ "\u7D11>Fo{u2};",
+ "\u7D12>Ji{e4};",
+ "\u7D13>Shu;",
+ "\u7D14>Ch{u2}n;",
+ "\u7D15>P{i2};",
+ "\u7D16>Y{i3}n;",
+ "\u7D17>Sha;",
+ "\u7D18>H{o2}ng;",
+ "\u7D19>Zh{i3};",
+ "\u7D1A>J{i2};",
+ "\u7D1B>Fen;",
+ "\u7D1C>Y{u2}n;",
+ "\u7D1D>R{e2}n;",
+ "\u7D1E>D{a3}n;",
+ "\u7D1F>Jin;",
+ "\u7D20>S{u4};",
+ "\u7D21>F{a3}ng;",
+ "\u7D22>Su{o3};",
+ "\u7D23>Cu{i4};",
+ "\u7D24>Ji{u3};",
+ "\u7D25>Zh{a2};",
+ "\u7D27>J{i3}n;",
+ "\u7D28>F{u4};",
+ "\u7D29>Zh{i4};",
+ "\u7D2A>C{i3};",
+ "\u7D2B>Z{i3};",
+ "\u7D2C>Cho{u2};",
+ "\u7D2D>H{o2}ng;",
+ "\u7D2E>Zh{a2};",
+ "\u7D2F>Le{i4};",
+ "\u7D30>X{i4};",
+ "\u7D31>F{u2};",
+ "\u7D32>Xi{e4};",
+ "\u7D33>Shen;",
+ "\u7D34>Be{i4};",
+ "\u7D35>Zh{u4};",
+ "\u7D36>Q{u3};",
+ "\u7D37>L{i2}ng;",
+ "\u7D38>Zh{u4};",
+ "\u7D39>Sha{o4};",
+ "\u7D3A>G{a4}n;",
+ "\u7D3B>Yang;",
+ "\u7D3C>F{u2};",
+ "\u7D3D>Tu{o2};",
+ "\u7D3E>Zh{e3}n;",
+ "\u7D3F>Da{i4};",
+ "\u7D40>Zhu{o2};",
+ "\u7D41>Shi;",
+ "\u7D42>Zhong;",
+ "\u7D43>Xi{a2}n;",
+ "\u7D44>Z{u3};",
+ "\u7D45>Ji{o3}ng;",
+ "\u7D46>B{a4}n;",
+ "\u7D47>J{u4};",
+ "\u7D48>M{o4};",
+ "\u7D49>Sh{u4};",
+ "\u7D4A>Zu{i4};",
+ "\u7D4C>Jing;",
+ "\u7D4D>R{e2}n;",
+ "\u7D4E>H{e4}ng;",
+ "\u7D4F>Xi{e4};",
+ "\u7D50>Ji{e2};",
+ "\u7D51>Zhu;",
+ "\u7D52>Cho{u2};",
+ "\u7D53>Gu{a4};",
+ "\u7D54>Ba{i3};",
+ "\u7D55>Ju{e2};",
+ "\u7D56>Ku{a4}ng;",
+ "\u7D57>H{u2};",
+ "\u7D58>C{i4};",
+ "\u7D59>Geng;",
+ "\u7D5A>Geng;",
+ "\u7D5B>Tao;",
+ "\u7D5C>Xi{e2};",
+ "\u7D5D>K{u4};",
+ "\u7D5E>Jia{o3};",
+ "\u7D5F>Quan;",
+ "\u7D60>Ga{i3};",
+ "\u7D61>Lu{o4};",
+ "\u7D62>Xu{a4}n;",
+ "\u7D63>Bing;",
+ "\u7D64>Xi{a4}n;",
+ "\u7D65>F{u2};",
+ "\u7D66>Ge{i3};",
+ "\u7D67>T{o2}ng;",
+ "\u7D68>R{o2}ng;",
+ "\u7D69>Tia{o4};",
+ "\u7D6A>Yin;",
+ "\u7D6B>Le{i3};",
+ "\u7D6C>Xi{e4};",
+ "\u7D6D>Qu{a4}n;",
+ "\u7D6E>X{u4};",
+ "\u7D6F>L{uu4}n;",
+ "\u7D70>Di{e2};",
+ "\u7D71>T{o3}ng;",
+ "\u7D72>Si;",
+ "\u7D73>Ji{a4}ng;",
+ "\u7D74>Xi{a2}ng;",
+ "\u7D75>Hu{i4};",
+ "\u7D76>Ju{e2};",
+ "\u7D77>Zh{i2};",
+ "\u7D78>Ji{a3}n;",
+ "\u7D79>Ju{a4}n;",
+ "\u7D7A>Chi;",
+ "\u7D7B>Mi{a3}n;",
+ "\u7D7C>Zh{e3}n;",
+ "\u7D7D>L{uu3};",
+ "\u7D7E>Ch{e2}ng;",
+ "\u7D7F>Qi{u2};",
+ "\u7D80>Shu;",
+ "\u7D81>B{a3}ng;",
+ "\u7D82>T{o3}ng;",
+ "\u7D83>Xiao;",
+ "\u7D84>W{a4}n;",
+ "\u7D85>Qin;",
+ "\u7D86>G{e3}ng;",
+ "\u7D87>Xi{u3};",
+ "\u7D88>T{i2};",
+ "\u7D89>Xi{u4};",
+ "\u7D8A>Xi{e2};",
+ "\u7D8B>H{o2}ng;",
+ "\u7D8C>X{i4};",
+ "\u7D8D>F{u2};",
+ "\u7D8E>Ting;",
+ "\u7D8F>Sui;",
+ "\u7D90>Du{i4};",
+ "\u7D91>K{u3}n;",
+ "\u7D92>Fu;",
+ "\u7D93>Jing;",
+ "\u7D94>H{u4};",
+ "\u7D95>Zhi;",
+ "\u7D96>Y{a2}n;",
+ "\u7D97>Ji{o3}ng;",
+ "\u7D98>F{e2}ng;",
+ "\u7D99>J{i4};",
+ "\u7D9C>Z{o4}ng;",
+ "\u7D9D>L{i2}n;",
+ "\u7D9E>Du{o3};",
+ "\u7D9F>L{i4};",
+ "\u7DA0>L{uu4};",
+ "\u7DA1>Li{a2}ng;",
+ "\u7DA2>Cho{u2};",
+ "\u7DA3>Qu{a3}n;",
+ "\u7DA4>Sha{o4};",
+ "\u7DA5>Q{i4};",
+ "\u7DA6>Q{i2};",
+ "\u7DA7>Zh{u3}n;",
+ "\u7DA8>Q{i2};",
+ "\u7DA9>W{a3}n;",
+ "\u7DAA>Qi{a4}n;",
+ "\u7DAB>Xi{a4}n;",
+ "\u7DAC>Sho{u4};",
+ "\u7DAD>We{i2};",
+ "\u7DAE>Q{i3};",
+ "\u7DAF>Ta{o2};",
+ "\u7DB0>W{a3}n;",
+ "\u7DB1>Gang;",
+ "\u7DB2>W{a3}ng;",
+ "\u7DB3>Beng;",
+ "\u7DB4>Zhu{i4};",
+ "\u7DB5>Ca{i3};",
+ "\u7DB6>Gu{o3};",
+ "\u7DB7>Cu{i4};",
+ "\u7DB8>L{u2}n;",
+ "\u7DB9>Li{u3};",
+ "\u7DBA>Q{i3};",
+ "\u7DBB>Zh{a4}n;",
+ "\u7DBC>Bei;",
+ "\u7DBD>Chu{o4};",
+ "\u7DBE>L{i2}ng;",
+ "\u7DBF>Mi{a2}n;",
+ "\u7DC0>Qi;",
+ "\u7DC1>Qi{e4};",
+ "\u7DC2>Tan;",
+ "\u7DC3>Zong;",
+ "\u7DC4>G{u3}n;",
+ "\u7DC5>Zou;",
+ "\u7DC6>Y{i4};",
+ "\u7DC7>Zi;",
+ "\u7DC8>X{i4}ng;",
+ "\u7DC9>Li{a3}ng;",
+ "\u7DCA>J{i3}n;",
+ "\u7DCB>Fei;",
+ "\u7DCC>Ru{i2};",
+ "\u7DCD>M{i2}n;",
+ "\u7DCE>Y{u4};",
+ "\u7DCF>Z{o3}ng;",
+ "\u7DD0>F{a2}n;",
+ "\u7DD1>L{uu4};",
+ "\u7DD2>X{u4};",
+ "\u7DD3>Yingl;",
+ "\u7DD4>Zh{a4}ng;",
+ "\u7DD6>X{u4};",
+ "\u7DD7>Xiang;",
+ "\u7DD8>Jian;",
+ "\u7DD9>K{e4};",
+ "\u7DDA>Xi{a4}n;",
+ "\u7DDB>Ru{a3}n;",
+ "\u7DDC>Mi{a2}n;",
+ "\u7DDD>Q{i4};",
+ "\u7DDE>Du{a4}n;",
+ "\u7DDF>Zh{o4}ng;",
+ "\u7DE0>D{i4};",
+ "\u7DE1>M{i2}n;",
+ "\u7DE2>Mia{o2};",
+ "\u7DE3>Yu{a2}n;",
+ "\u7DE4>Xi{e4};",
+ "\u7DE5>Ba{o3};",
+ "\u7DE6>Si;",
+ "\u7DE7>Qiu;",
+ "\u7DE8>Bian;",
+ "\u7DE9>Hu{a3}n;",
+ "\u7DEA>Geng;",
+ "\u7DEB>Cong;",
+ "\u7DEC>Mi{a3}n;",
+ "\u7DED>We{i4};",
+ "\u7DEE>F{u4};",
+ "\u7DEF>We{i3};",
+ "\u7DF0>Y{u2};",
+ "\u7DF1>Gou;",
+ "\u7DF2>Mia{o3};",
+ "\u7DF3>Xi{e2};",
+ "\u7DF4>Li{a4}n;",
+ "\u7DF5>Zong;",
+ "\u7DF6>Bi{a4}n;",
+ "\u7DF7>Y{u4}n;",
+ "\u7DF8>Yin;",
+ "\u7DF9>T{i2};",
+ "\u7DFA>Gua;",
+ "\u7DFB>Zh{i4};",
+ "\u7DFC>Yun;",
+ "\u7DFD>Cheng;",
+ "\u7DFE>Ch{a2}n;",
+ "\u7DFF>Da{i4};",
+ "\u7E00>Xi{a2};",
+ "\u7E01>Yu{a2}n;",
+ "\u7E02>Z{o3}ng;",
+ "\u7E03>Xu;",
+ "\u7E06>Geng;",
+ "\u7E08>Y{i2}ng;",
+ "\u7E09>J{i4}n;",
+ "\u7E0A>Y{i4};",
+ "\u7E0B>Zhu{i4};",
+ "\u7E0C>N{i4};",
+ "\u7E0D>Bang;",
+ "\u7E0E>G{u3};",
+ "\u7E0F>P{a2}n;",
+ "\u7E10>Zho{u4};",
+ "\u7E11>Jian;",
+ "\u7E12>Cu{o3};",
+ "\u7E13>Qu{a3}n;",
+ "\u7E14>Shu{a3}ng;",
+ "\u7E15>Yun;",
+ "\u7E16>Xi{a2};",
+ "\u7E17>Shuai;",
+ "\u7E18>Xi;",
+ "\u7E19>R{o2}ng;",
+ "\u7E1A>Tao;",
+ "\u7E1B>F{u2};",
+ "\u7E1C>Y{u2}n;",
+ "\u7E1D>Zhen;",
+ "\u7E1E>Ga{o3};",
+ "\u7E1F>R{u4};",
+ "\u7E20>H{u2};",
+ "\u7E21>Za{i3};",
+ "\u7E22>T{e2}ng;",
+ "\u7E23>Xi{a4}n;",
+ "\u7E24>S{u4};",
+ "\u7E25>Zh{e3}n;",
+ "\u7E26>Z{o4}ng;",
+ "\u7E27>Tao;",
+ "\u7E29>Ca{i4};",
+ "\u7E2A>B{i4};",
+ "\u7E2B>F{e2}ng;",
+ "\u7E2C>C{u4};",
+ "\u7E2D>L{i2};",
+ "\u7E2E>Suo;",
+ "\u7E2F>Y{i3}n;",
+ "\u7E30>X{i3};",
+ "\u7E31>Z{o4}ng;",
+ "\u7E32>Le{i2};",
+ "\u7E33>Zhu{a4}n;",
+ "\u7E34>Qian;",
+ "\u7E35>M{a4}n;",
+ "\u7E36>Zh{i2};",
+ "\u7E37>L{uu3};",
+ "\u7E38>M{o4};",
+ "\u7E39>Pia{o3};",
+ "\u7E3A>Li{a2}n;",
+ "\u7E3B>M{i2};",
+ "\u7E3C>Xu{a4}n;",
+ "\u7E3D>Z{o3}ng;",
+ "\u7E3E>Ji;",
+ "\u7E3F>Shan;",
+ "\u7E40>Su{i4};",
+ "\u7E41>F{a2}n;",
+ "\u7E42>Shua{i4};",
+ "\u7E43>Beng;",
+ "\u7E44>Yi;",
+ "\u7E45>Sao;",
+ "\u7E46>Mo{u2};",
+ "\u7E47>Zho{u4};",
+ "\u7E48>Qi{a3}ng;",
+ "\u7E49>H{u2}n;",
+ "\u7E4B>X{i4};",
+ "\u7E4D>Xi{u4};",
+ "\u7E4E>R{a2}n;",
+ "\u7E4F>Xu{a4}n;",
+ "\u7E50>Hu{i4};",
+ "\u7E51>Qiao;",
+ "\u7E52>Zeng;",
+ "\u7E53>Zu{o3};",
+ "\u7E54>Zhi;",
+ "\u7E55>Sh{a4}n;",
+ "\u7E56>S{a3}n;",
+ "\u7E57>L{i2}n;",
+ "\u7E58>Y{u4};",
+ "\u7E59>Fan;",
+ "\u7E5A>Lia{o2};",
+ "\u7E5B>Chu{o4};",
+ "\u7E5C>Zun;",
+ "\u7E5D>Ji{a4}n;",
+ "\u7E5E>Ra{o4};",
+ "\u7E5F>Ch{a3}n;",
+ "\u7E60>Ru{i3};",
+ "\u7E61>Xi{u4};",
+ "\u7E62>Hu{i4};",
+ "\u7E63>Hu{a4};",
+ "\u7E64>Zu{a3}n;",
+ "\u7E65>Xi;",
+ "\u7E66>Qi{a3}ng;",
+ "\u7E68>D{a2};",
+ "\u7E69>Sh{e2}ng;",
+ "\u7E6A>Hu{i4};",
+ "\u7E6B>X{i4};",
+ "\u7E6C>S{e4};",
+ "\u7E6D>Ji{a3}n;",
+ "\u7E6E>Jiang;",
+ "\u7E6F>Hu{a2}n;",
+ "\u7E70>Za{o3};",
+ "\u7E71>Cong;",
+ "\u7E72>Ji{e4};",
+ "\u7E73>Jia{o3};",
+ "\u7E74>B{o4};",
+ "\u7E75>Ch{a2}n;",
+ "\u7E76>Y{i4};",
+ "\u7E77>Na{o2};",
+ "\u7E78>Su{i4};",
+ "\u7E79>Y{i4};",
+ "\u7E7A>Sha{i3};",
+ "\u7E7B>Xu;",
+ "\u7E7C>J{i4};",
+ "\u7E7D>Bin;",
+ "\u7E7E>Qi{a3}n;",
+ "\u7E7F>L{a2}n;",
+ "\u7E80>P{u2};",
+ "\u7E81>Xun;",
+ "\u7E82>Zu{a3}n;",
+ "\u7E83>Q{i2};",
+ "\u7E84>P{e2}ng;",
+ "\u7E85>L{i4};",
+ "\u7E86>M{o4};",
+ "\u7E87>Le{i4};",
+ "\u7E88>Xi{e2};",
+ "\u7E89>Zu{a3}n;",
+ "\u7E8A>Ku{a4}ng;",
+ "\u7E8B>You;",
+ "\u7E8C>X{u4};",
+ "\u7E8D>Le{i2};",
+ "\u7E8E>Xian;",
+ "\u7E8F>Ch{a2}n;",
+ "\u7E91>L{u2};",
+ "\u7E92>Ch{a2}n;",
+ "\u7E93>Ying;",
+ "\u7E94>Ca{i2};",
+ "\u7E95>Xiang;",
+ "\u7E96>Xian;",
+ "\u7E97>Zui;",
+ "\u7E98>Zu{a3}n;",
+ "\u7E99>Lu{o4};",
+ "\u7E9A>X{i3};",
+ "\u7E9B>Da{o4};",
+ "\u7E9C>L{a4}n;",
+ "\u7E9D>Le{i2};",
+ "\u7E9E>Li{a4}n;",
+ "\u7E9F>Si;",
+ "\u7EA0>Jiu;",
+ "\u7EA1>Yu;",
+ "\u7EA2>H{o2}ng;",
+ "\u7EA3>Zho{u4};",
+ "\u7EA4>Xian;",
+ "\u7EA5>H{e2};",
+ "\u7EA6>Yue;",
+ "\u7EA7>J{i2};",
+ "\u7EA8>W{a2}n;",
+ "\u7EA9>Ku{a4}ng;",
+ "\u7EAA>J{i4};",
+ "\u7EAB>R{e4}n;",
+ "\u7EAC>We{i3};",
+ "\u7EAD>Y{u2}n;",
+ "\u7EAE>H{o2}ng;",
+ "\u7EAF>Ch{u2}n;",
+ "\u7EB0>P{i2};",
+ "\u7EB1>Sha;",
+ "\u7EB2>Gang;",
+ "\u7EB3>N{a4};",
+ "\u7EB4>R{e2}n;",
+ "\u7EB5>Z{o4}ng;",
+ "\u7EB6>L{u2}n;",
+ "\u7EB7>Fen;",
+ "\u7EB8>Zh{i3};",
+ "\u7EB9>W{e2}n;",
+ "\u7EBA>F{a3}ng;",
+ "\u7EBB>Zh{u4};",
+ "\u7EBC>Y{i3}n;",
+ "\u7EBD>Ni{u3};",
+ "\u7EBE>Shu;",
+ "\u7EBF>Xi{a4}n;",
+ "\u7EC0>G{a4}n;",
+ "\u7EC1>Xi{e4};",
+ "\u7EC2>F{u2};",
+ "\u7EC3>Li{a4}n;",
+ "\u7EC4>Z{u3};",
+ "\u7EC5>Shen;",
+ "\u7EC6>X{i4};",
+ "\u7EC7>Zhi;",
+ "\u7EC8>Zhong;",
+ "\u7EC9>Zho{u4};",
+ "\u7ECA>B{a4}n;",
+ "\u7ECB>F{u2};",
+ "\u7ECC>Zhu{o2};",
+ "\u7ECD>Sha{o4};",
+ "\u7ECE>Y{i4};",
+ "\u7ECF>Jing;",
+ "\u7ED0>Da{i4};",
+ "\u7ED1>B{a3}ng;",
+ "\u7ED2>R{o2}ng;",
+ "\u7ED3>Ji{e2};",
+ "\u7ED4>K{u4};",
+ "\u7ED5>Ra{o4};",
+ "\u7ED6>Di{e2};",
+ "\u7ED7>H{e4}ng;",
+ "\u7ED8>Hu{i4};",
+ "\u7ED9>Ge{i3};",
+ "\u7EDA>Xu{a4}n;",
+ "\u7EDB>Ji{a4}ng;",
+ "\u7EDC>Lu{o4};",
+ "\u7EDD>Ju{e2};",
+ "\u7EDE>Jia{o3};",
+ "\u7EDF>T{o3}ng;",
+ "\u7EE0>G{e3}ng;",
+ "\u7EE1>Xiao;",
+ "\u7EE2>Ju{a4}n;",
+ "\u7EE3>Xi{u4};",
+ "\u7EE4>X{i4};",
+ "\u7EE5>Sui;",
+ "\u7EE6>Tao;",
+ "\u7EE7>J{i4};",
+ "\u7EE8>T{i2};",
+ "\u7EE9>Ji;",
+ "\u7EEA>X{u4};",
+ "\u7EEB>L{i2}ng;",
+ "\u7EED>X{u4};",
+ "\u7EEE>Q{i3};",
+ "\u7EEF>Fei;",
+ "\u7EF0>Chu{o4};",
+ "\u7EF1>Zh{a3}ng;",
+ "\u7EF2>G{u3}n;",
+ "\u7EF3>Sh{e2}ng;",
+ "\u7EF4>We{i2};",
+ "\u7EF5>Mi{a2}n;",
+ "\u7EF6>Sho{u4};",
+ "\u7EF7>Beng;",
+ "\u7EF8>Cho{u2};",
+ "\u7EF9>Ta{o2};",
+ "\u7EFA>Li{u3};",
+ "\u7EFB>Qu{a3}n;",
+ "\u7EFC>Z{o4}ng;",
+ "\u7EFD>Zh{a4}n;",
+ "\u7EFE>W{a3}n;",
+ "\u7EFF>L{uu4};",
+ "\u7F00>Zhu{i4};",
+ "\u7F01>Zi;",
+ "\u7F02>K{e4};",
+ "\u7F03>Xiang;",
+ "\u7F04>Jian;",
+ "\u7F05>Mi{a3}n;",
+ "\u7F06>L{a4}n;",
+ "\u7F07>T{i2};",
+ "\u7F08>Mia{o3};",
+ "\u7F09>Q{i4};",
+ "\u7F0A>Yun;",
+ "\u7F0B>Hu{i4};",
+ "\u7F0C>Si;",
+ "\u7F0D>Du{o3};",
+ "\u7F0E>Du{a4}n;",
+ "\u7F0F>Bi{a4}n;",
+ "\u7F10>Xi{a4}n;",
+ "\u7F11>Gou;",
+ "\u7F12>Zhu{i4};",
+ "\u7F13>Hu{a3}n;",
+ "\u7F14>D{i4};",
+ "\u7F15>L{uu3};",
+ "\u7F16>Bian;",
+ "\u7F17>M{i2}n;",
+ "\u7F18>Yu{a2}n;",
+ "\u7F19>J{i4}n;",
+ "\u7F1A>F{u2};",
+ "\u7F1B>R{u4};",
+ "\u7F1C>Zhen;",
+ "\u7F1D>F{e2}ng;",
+ "\u7F1E>Shuai;",
+ "\u7F1F>Ga{o3};",
+ "\u7F20>Ch{a2}n;",
+ "\u7F21>L{i2};",
+ "\u7F22>Y{i4};",
+ "\u7F23>Jian;",
+ "\u7F24>Bin;",
+ "\u7F25>Pia{o3};",
+ "\u7F26>M{a4}n;",
+ "\u7F27>Le{i2};",
+ "\u7F28>Ying;",
+ "\u7F29>Suo;",
+ "\u7F2A>Mo{u2};",
+ "\u7F2B>Sao;",
+ "\u7F2C>Xi{e2};",
+ "\u7F2D>Lia{o2};",
+ "\u7F2E>Sh{a4}n;",
+ "\u7F2F>Zeng;",
+ "\u7F30>Jiang;",
+ "\u7F31>Qi{a3}n;",
+ "\u7F32>Za{o3};",
+ "\u7F33>Hu{a2}n;",
+ "\u7F34>Jia{o3};",
+ "\u7F35>Zu{a3}n;",
+ "\u7F36>Fo{u3};",
+ "\u7F37>Xi{e4};",
+ "\u7F38>Gang;",
+ "\u7F39>Fo{u3};",
+ "\u7F3A>Que;",
+ "\u7F3B>Fo{u3};",
+ "\u7F3D>Bo;",
+ "\u7F3E>P{i2}ng;",
+ "\u7F3F>Ho{u4};",
+ "\u7F41>Gang;",
+ "\u7F42>Ying;",
+ "\u7F43>Ying;",
+ "\u7F44>Q{i4}ng;",
+ "\u7F45>Xi{a4};",
+ "\u7F46>Gu{a4}n;",
+ "\u7F47>Zun;",
+ "\u7F48>T{a2}n;",
+ "\u7F4A>Q{i4};",
+ "\u7F4B>W{e4}ng;",
+ "\u7F4C>Ying;",
+ "\u7F4D>Le{i2};",
+ "\u7F4E>T{a2}n;",
+ "\u7F4F>L{u2};",
+ "\u7F50>Gu{a4}n;",
+ "\u7F51>W{a3}ng;",
+ "\u7F52>W{a3}ng;",
+ "\u7F53>Gang;",
+ "\u7F54>W{a3}ng;",
+ "\u7F55>H{a3}n;",
+ "\u7F57>Luo;",
+ "\u7F58>F{u2};",
+ "\u7F59>M{i2};",
+ "\u7F5A>F{a2};",
+ "\u7F5B>Gu;",
+ "\u7F5C>Zh{u3};",
+ "\u7F5D>Ju;",
+ "\u7F5E>Ma{o2};",
+ "\u7F5F>G{u3};",
+ "\u7F60>M{i2}n;",
+ "\u7F61>Gang;",
+ "\u7F62>B{a4};",
+ "\u7F63>Gu{a4};",
+ "\u7F64>T{i2};",
+ "\u7F65>Ju{a4}n;",
+ "\u7F66>Fu;",
+ "\u7F67>L{i2}n;",
+ "\u7F68>Y{a3}n;",
+ "\u7F69>Zha{o4};",
+ "\u7F6A>Zu{i4};",
+ "\u7F6B>Gu{a4};",
+ "\u7F6C>Zhu{o2};",
+ "\u7F6D>Y{u4};",
+ "\u7F6E>Zh{i4};",
+ "\u7F6F>{a3}n;",
+ "\u7F70>F{a2};",
+ "\u7F71>N{a3}n;",
+ "\u7F72>Sh{u3};",
+ "\u7F73>Si;",
+ "\u7F74>P{i2};",
+ "\u7F75>M{a4};",
+ "\u7F76>Li{u3};",
+ "\u7F77>B{a4};",
+ "\u7F78>F{a2};",
+ "\u7F79>L{i2};",
+ "\u7F7A>Chao;",
+ "\u7F7B>We{i4};",
+ "\u7F7C>B{i4};",
+ "\u7F7D>J{i4};",
+ "\u7F7E>Zeng;",
+ "\u7F7F>T{o2}ng;",
+ "\u7F80>Li{u3};",
+ "\u7F81>Ji;",
+ "\u7F82>Ju{a4}n;",
+ "\u7F83>M{i4};",
+ "\u7F84>Zha{o4};",
+ "\u7F85>Lu{o2};",
+ "\u7F86>P{i2};",
+ "\u7F87>Ji;",
+ "\u7F88>Ji;",
+ "\u7F89>Lu{a2}n;",
+ "\u7F8A>Y{a2}ng;",
+ "\u7F8B>Mie;",
+ "\u7F8C>Qiang;",
+ "\u7F8D>T{a4};",
+ "\u7F8E>Me{i3};",
+ "\u7F8F>Y{a2}ng;",
+ "\u7F90>Yo{u3};",
+ "\u7F91>Yo{u3};",
+ "\u7F92>F{e2}n;",
+ "\u7F93>Ba;",
+ "\u7F94>Gao;",
+ "\u7F95>Y{a4}ng;",
+ "\u7F96>G{u3};",
+ "\u7F97>Qiang;",
+ "\u7F98>Zang;",
+ "\u7F99>Gao;",
+ "\u7F9A>L{i2}ng;",
+ "\u7F9B>Y{i4};",
+ "\u7F9C>Zh{u4};",
+ "\u7F9D>Di;",
+ "\u7F9E>Xiu;",
+ "\u7F9F>Qian;",
+ "\u7FA0>Y{i2};",
+ "\u7FA1>Xi{a4}n;",
+ "\u7FA2>R{o2}ng;",
+ "\u7FA3>Q{u2}n;",
+ "\u7FA4>Q{u2}n;",
+ "\u7FA5>Qian;",
+ "\u7FA6>Hu{a2}n;",
+ "\u7FA7>Zui;",
+ "\u7FA8>Xi{a4}n;",
+ "\u7FA9>Y{i4};",
+ "\u7FAB>Qiang;",
+ "\u7FAC>Xi{a2}n;",
+ "\u7FAD>Y{u2};",
+ "\u7FAE>Geng;",
+ "\u7FAF>Ji{e2};",
+ "\u7FB0>Tang;",
+ "\u7FB1>Yu{a2}n;",
+ "\u7FB2>Xi;",
+ "\u7FB3>F{a2}n;",
+ "\u7FB4>Shan;",
+ "\u7FB5>F{e3}n;",
+ "\u7FB6>Shan;",
+ "\u7FB7>Li{a3}n;",
+ "\u7FB8>Le{i2};",
+ "\u7FB9>Geng;",
+ "\u7FBA>No{u2};",
+ "\u7FBB>Qi{a4}ng;",
+ "\u7FBC>Ch{a4}n;",
+ "\u7FBD>Y{u3};",
+ "\u7FBE>G{o4}ng;",
+ "\u7FBF>Y{i4};",
+ "\u7FC0>Ch{o2}ng;",
+ "\u7FC1>Weng;",
+ "\u7FC2>Fen;",
+ "\u7FC3>H{o2}ng;",
+ "\u7FC4>Ch{i4};",
+ "\u7FC5>Ch{i4};",
+ "\u7FC6>Cu{i4};",
+ "\u7FC7>F{u2};",
+ "\u7FC8>Xi{a2};",
+ "\u7FC9>P{e3}n;",
+ "\u7FCA>Y{i4};",
+ "\u7FCB>La;",
+ "\u7FCC>Y{i4};",
+ "\u7FCD>Pi;",
+ "\u7FCE>L{i2}ng;",
+ "\u7FCF>Li{u4};",
+ "\u7FD0>Zh{i4};",
+ "\u7FD1>Q{u2};",
+ "\u7FD2>X{i2};",
+ "\u7FD3>Xi{e2};",
+ "\u7FD4>Xi{a2}ng;",
+ "\u7FD5>X{i4};",
+ "\u7FD6>X{i4};",
+ "\u7FD7>Q{i2};",
+ "\u7FD8>Qia{o2};",
+ "\u7FD9>Hu{i4};",
+ "\u7FDA>Hui;",
+ "\u7FDB>Xiao;",
+ "\u7FDC>S{e4};",
+ "\u7FDD>H{o2}ng;",
+ "\u7FDE>Jiang;",
+ "\u7FDF>D{i2};",
+ "\u7FE0>Cu{i4};",
+ "\u7FE1>Fe{i3};",
+ "\u7FE2>Tao;",
+ "\u7FE3>Sh{a4};",
+ "\u7FE4>Ch{i4};",
+ "\u7FE5>Zh{u4};",
+ "\u7FE6>Ji{a3}n;",
+ "\u7FE7>Xuan;",
+ "\u7FE8>Sh{i4};",
+ "\u7FE9>Pian;",
+ "\u7FEA>Zong;",
+ "\u7FEB>W{a4}n;",
+ "\u7FEC>Hui;",
+ "\u7FED>Ho{u2};",
+ "\u7FEE>H{e2};",
+ "\u7FEF>H{e4};",
+ "\u7FF0>H{a4}n;",
+ "\u7FF1>A{o2};",
+ "\u7FF2>Piao;",
+ "\u7FF3>Y{i4};",
+ "\u7FF4>Li{a2}n;",
+ "\u7FF5>Q{u2};",
+ "\u7FF7>L{i2}n;",
+ "\u7FF8>P{e3}n;",
+ "\u7FF9>Qia{o2};",
+ "\u7FFA>A{o2};",
+ "\u7FFB>Fan;",
+ "\u7FFC>Y{i4};",
+ "\u7FFD>Hu{i4};",
+ "\u7FFE>Xuan;",
+ "\u7FFF>Da{o4};",
+ "\u8000>Ya{o4};",
+ "\u8001>La{o3};",
+ "\u8003>Ka{o3};",
+ "\u8004>Ma{o4};",
+ "\u8005>Zh{e3};",
+ "\u8006>Q{i2};",
+ "\u8007>Go{u3};",
+ "\u8008>Go{u3};",
+ "\u8009>Go{u3};",
+ "\u800A>Di{e4};",
+ "\u800B>Di{e4};",
+ "\u800C>{E2}r;",
+ "\u800D>Shu{a3};",
+ "\u800E>Ru{a3}n;",
+ "\u800F>{E2}r;",
+ "\u8010>Na{i4};",
+ "\u8011>Zhuan;",
+ "\u8012>Le{i3};",
+ "\u8013>Ting;",
+ "\u8014>Z{i3};",
+ "\u8015>Geng;",
+ "\u8016>Cha{o4};",
+ "\u8017>Ha{o4};",
+ "\u8018>Y{u2}n;",
+ "\u8019>P{a2};",
+ "\u801A>Pi;",
+ "\u801B>Ch{i2};",
+ "\u801C>S{i4};",
+ "\u801D>Ch{u2};",
+ "\u801E>Jia;",
+ "\u801F>J{u4};",
+ "\u8020>H{e2};",
+ "\u8021>Ch{u2};",
+ "\u8022>La{o4};",
+ "\u8023>L{u3}n;",
+ "\u8024>J{i2};",
+ "\u8025>T{a3}ng;",
+ "\u8026>O{u3};",
+ "\u8027>Lo{u2};",
+ "\u8028>No{u4};",
+ "\u8029>Gou;",
+ "\u802A>P{a3}ng;",
+ "\u802B>Z{e2};",
+ "\u802C>Lo{u2};",
+ "\u802D>Ji;",
+ "\u802E>La{o4};",
+ "\u802F>Hu{o4};",
+ "\u8030>You;",
+ "\u8031>M{o4};",
+ "\u8032>Hua{i2};",
+ "\u8033>{e3}r;",
+ "\u8034>Zh{e2};",
+ "\u8035>Ting;",
+ "\u8036>Y{e2};",
+ "\u8037>Da;",
+ "\u8038>S{o3}ng;",
+ "\u8039>Q{i2}n;",
+ "\u803A>Y{u2}n;",
+ "\u803B>Ch{i3};",
+ "\u803C>Dan;",
+ "\u803D>Dan;",
+ "\u803E>H{o2}ng;",
+ "\u803F>G{e3}ng;",
+ "\u8040>Zh{i2};",
+ "\u8042>Ni{e4};",
+ "\u8043>Dan;",
+ "\u8044>Zh{e3}n;",
+ "\u8045>Ch{e4};",
+ "\u8046>L{i2}ng;",
+ "\u8047>Zheng;",
+ "\u8048>Yo{u3};",
+ "\u8049>Wa;",
+ "\u804A>Lia{o2};",
+ "\u804B>L{o2}ng;",
+ "\u804C>Zh{i2};",
+ "\u804D>N{i2}ng;",
+ "\u804E>Tiao;",
+ "\u804F>{E2}r;",
+ "\u8050>Y{a4};",
+ "\u8051>Di{e2};",
+ "\u8052>Gua;",
+ "\u8054>Li{a2}n;",
+ "\u8055>Ha{o4};",
+ "\u8056>Sh{e4}ng;",
+ "\u8057>Li{e4};",
+ "\u8058>P{i4}n;",
+ "\u8059>Jing;",
+ "\u805A>J{u4};",
+ "\u805B>B{i4};",
+ "\u805C>D{i3};",
+ "\u805D>Gu{o2};",
+ "\u805E>W{e2}n;",
+ "\u805F>X{u4};",
+ "\u8060>P{i2}ng;",
+ "\u8061>Cong;",
+ "\u8064>T{i2}ng;",
+ "\u8065>Y{u3};",
+ "\u8066>Cong;",
+ "\u8067>Ku{i2};",
+ "\u8069>Ku{i4};",
+ "\u806A>Cong;",
+ "\u806B>Li{a2}n;",
+ "\u806C>W{e3}ng;",
+ "\u806D>Ku{i4};",
+ "\u806E>Li{a2}n;",
+ "\u806F>Li{a2}n;",
+ "\u8070>Cong;",
+ "\u8071>A{o2};",
+ "\u8072>Sheng;",
+ "\u8073>S{o3}ng;",
+ "\u8074>Ting;",
+ "\u8075>Ku{i4};",
+ "\u8076>Ni{e4};",
+ "\u8077>Zh{i2};",
+ "\u8078>Dan;",
+ "\u8079>N{i2}ng;",
+ "\u807A>Qie;",
+ "\u807B>Ji;",
+ "\u807C>Ting;",
+ "\u807D>Ting;",
+ "\u807E>L{o2}ng;",
+ "\u807F>Y{u4};",
+ "\u8080>Y{u4};",
+ "\u8081>Zha{o4};",
+ "\u8082>S{i4};",
+ "\u8083>S{u4};",
+ "\u8084>Y{i4};",
+ "\u8085>S{u4};",
+ "\u8086>S{i4};",
+ "\u8087>Zha{o4};",
+ "\u8088>Zha{o4};",
+ "\u8089>Ro{u4};",
+ "\u808A>Y{i4};",
+ "\u808B>L{e4};",
+ "\u808C>Ji;",
+ "\u808D>Qi{u2};",
+ "\u808E>K{e3}n;",
+ "\u808F>Ca{o4};",
+ "\u8090>Ge;",
+ "\u8091>D{i4};",
+ "\u8092>Hu{a2}n;",
+ "\u8093>Huang;",
+ "\u8094>Y{i3};",
+ "\u8095>R{e4}n;",
+ "\u8096>Xia{o4};",
+ "\u8097>R{u3};",
+ "\u8098>Zho{u3};",
+ "\u8099>Yuan;",
+ "\u809A>D{u4};",
+ "\u809B>Gang;",
+ "\u809C>R{o2}ng;",
+ "\u809D>Gan;",
+ "\u809E>Cha;",
+ "\u809F>W{o4};",
+ "\u80A0>Ch{a2}ng;",
+ "\u80A1>G{u3};",
+ "\u80A2>Zhi;",
+ "\u80A3>H{a2}n;",
+ "\u80A4>Fu;",
+ "\u80A5>Fe{i2};",
+ "\u80A6>F{e2}n;",
+ "\u80A7>Pei;",
+ "\u80A8>P{a4}ng;",
+ "\u80A9>Jian;",
+ "\u80AA>F{a2}ng;",
+ "\u80AB>Zhun;",
+ "\u80AC>Yo{u2};",
+ "\u80AD>N{a4};",
+ "\u80AE>H{a2}ng;",
+ "\u80AF>K{e3}n;",
+ "\u80B0>R{a2}n;",
+ "\u80B1>Gong;",
+ "\u80B2>Y{u4};",
+ "\u80B3>W{e3}n;",
+ "\u80B4>Ya{o2};",
+ "\u80B5>J{i4}n;",
+ "\u80B6>P{i2};",
+ "\u80B7>Qian;",
+ "\u80B8>X{i4};",
+ "\u80B9>Xi;",
+ "\u80BA>Fe{i4};",
+ "\u80BB>K{e3}n;",
+ "\u80BC>J{i3}ng;",
+ "\u80BD>Ta{i4};",
+ "\u80BE>Sh{e4}n;",
+ "\u80BF>Zh{o3}ng;",
+ "\u80C0>Zh{a4}ng;",
+ "\u80C1>Xi{e2};",
+ "\u80C2>Shen;",
+ "\u80C3>We{i4};",
+ "\u80C4>Zho{u4};",
+ "\u80C5>Di{e2};",
+ "\u80C6>D{a3}n;",
+ "\u80C7>Fe{i4};",
+ "\u80C8>B{a2};",
+ "\u80C9>B{o2};",
+ "\u80CA>Q{u2};",
+ "\u80CB>Ti{a2}n;",
+ "\u80CC>Be{i4};",
+ "\u80CD>Gua;",
+ "\u80CE>Tai;",
+ "\u80CF>Z{i3};",
+ "\u80D0>Ku;",
+ "\u80D1>Zhi;",
+ "\u80D2>N{i4};",
+ "\u80D3>P{i2}ng;",
+ "\u80D4>Z{i4};",
+ "\u80D5>F{u4};",
+ "\u80D6>P{a4}ng;",
+ "\u80D7>Zhen;",
+ "\u80D8>Xi{a2}n;",
+ "\u80D9>Zu{o4};",
+ "\u80DA>Pei;",
+ "\u80DB>Ji{a3};",
+ "\u80DC>Sh{e4}ng;",
+ "\u80DD>Zhi;",
+ "\u80DE>Bao;",
+ "\u80DF>M{u3};",
+ "\u80E0>Qu;",
+ "\u80E1>H{u2};",
+ "\u80E2>Ke;",
+ "\u80E3>Y{i3};",
+ "\u80E4>Y{i4}n;",
+ "\u80E5>Xu;",
+ "\u80E6>Yang;",
+ "\u80E7>L{o2}ng;",
+ "\u80E8>D{o4}ng;",
+ "\u80E9>K{a3};",
+ "\u80EA>L{u2};",
+ "\u80EB>J{i4}ng;",
+ "\u80EC>N{u3};",
+ "\u80ED>Yan;",
+ "\u80EE>P{a2}ng;",
+ "\u80EF>Ku{a4};",
+ "\u80F0>Y{i2};",
+ "\u80F1>Guang;",
+ "\u80F2>Gai;",
+ "\u80F3>Ge;",
+ "\u80F4>D{o4}ng;",
+ "\u80F5>Zh{i4};",
+ "\u80F6>Xia{o2};",
+ "\u80F7>Xiong;",
+ "\u80F8>Xiong;",
+ "\u80F9>{E2}r;",
+ "\u80FA>{E4};",
+ "\u80FB>X{i2}ng;",
+ "\u80FC>Pi{a2}n;",
+ "\u80FD>N{e2}ng;",
+ "\u80FE>Z{i4};",
+ "\u80FF>Gui;",
+ "\u8100>Ch{e2}ng;",
+ "\u8101>Tia{o4};",
+ "\u8102>Zhi;",
+ "\u8103>Cu{i4};",
+ "\u8104>Me{i2};",
+ "\u8105>Xi{e2};",
+ "\u8106>Cu{i4};",
+ "\u8107>Xi{e2};",
+ "\u8108>M{o4};",
+ "\u8109>Ma{i4};",
+ "\u810A>J{i2};",
+ "\u810D>Kua{i4};",
+ "\u810E>S{a4};",
+ "\u810F>Zang;",
+ "\u8110>Q{i2};",
+ "\u8111>Na{o3};",
+ "\u8112>M{i3};",
+ "\u8113>N{o2}ng;",
+ "\u8114>Lu{a2}n;",
+ "\u8115>W{a3}n;",
+ "\u8116>B{o2};",
+ "\u8117>W{e3}n;",
+ "\u8118>Gu{a3}n;",
+ "\u8119>Qi{u2};",
+ "\u811A>Jia{o3};",
+ "\u811B>J{i4}ng;",
+ "\u811C>Ro{u2};",
+ "\u811D>Heng;",
+ "\u811E>Cu{o3};",
+ "\u811F>Li{e4};",
+ "\u8120>Shan;",
+ "\u8121>T{i3}ng;",
+ "\u8122>Me{i2};",
+ "\u8123>Ch{u2}n;",
+ "\u8124>Sh{e4}n;",
+ "\u8125>Xi{e2};",
+ "\u8126>De;",
+ "\u8127>Zui;",
+ "\u8128>C{u4};",
+ "\u8129>Xiu;",
+ "\u812A>X{i4}n;",
+ "\u812B>Tuo;",
+ "\u812C>Pao;",
+ "\u812D>Ch{e2}ng;",
+ "\u812E>Ne{i3};",
+ "\u812F>F{u3};",
+ "\u8130>Do{u4};",
+ "\u8131>Tuo;",
+ "\u8132>Nia{o4};",
+ "\u8134>P{i3};",
+ "\u8135>G{u3};",
+ "\u8136>Gua;",
+ "\u8137>L{i4};",
+ "\u8138>Li{a3}n;",
+ "\u8139>Zh{a4}ng;",
+ "\u813A>Cu{i4};",
+ "\u813B>Ji{e2};",
+ "\u813C>Li{a3}ng;",
+ "\u813D>Zhou;",
+ "\u813E>P{i2};",
+ "\u813F>Biao;",
+ "\u8140>L{u2}n;",
+ "\u8141>Pi{a2}n;",
+ "\u8142>Gu{o4};",
+ "\u8143>Ku{i4};",
+ "\u8144>Chu{i2};",
+ "\u8145>D{a4}n;",
+ "\u8146>Ti{a3}n;",
+ "\u8147>Ne{i3};",
+ "\u8148>Jing;",
+ "\u8149>Jie;",
+ "\u814A>L{a4};",
+ "\u814B>Y{i4};",
+ "\u814C>An;",
+ "\u814D>R{e3}n;",
+ "\u814E>Sh{e4}n;",
+ "\u814F>Chu{o4};",
+ "\u8150>F{u3};",
+ "\u8151>F{u3};",
+ "\u8152>Ju;",
+ "\u8153>Fe{i2};",
+ "\u8154>Qiang;",
+ "\u8155>W{a4}n;",
+ "\u8156>D{o4}ng;",
+ "\u8157>P{i2};",
+ "\u8158>Gu{o2};",
+ "\u8159>Zong;",
+ "\u815A>D{i4}ng;",
+ "\u815B>Wu;",
+ "\u815C>Me{i2};",
+ "\u815D>Ru{a3}n;",
+ "\u815E>Zhu{a4}n;",
+ "\u815F>Zh{i4};",
+ "\u8160>Co{u4};",
+ "\u8161>Gua;",
+ "\u8162>O{u3};",
+ "\u8163>D{i4};",
+ "\u8164>An;",
+ "\u8165>Xing;",
+ "\u8166>Na{o3};",
+ "\u8167>Y{u2};",
+ "\u8168>Chu{a3}n;",
+ "\u8169>N{a3}n;",
+ "\u816A>Y{u4}n;",
+ "\u816B>Zh{o3}ng;",
+ "\u816C>Ro{u2};",
+ "\u816D>{E4};",
+ "\u816E>Sai;",
+ "\u816F>T{u2};",
+ "\u8170>Yao;",
+ "\u8171>Ji{a4}n;",
+ "\u8172>We{i3};",
+ "\u8173>Jia{o3};",
+ "\u8174>Y{u2};",
+ "\u8175>Jia;",
+ "\u8176>Du{a4}n;",
+ "\u8177>B{i4};",
+ "\u8178>Ch{a2}ng;",
+ "\u8179>F{u4};",
+ "\u817A>Xi{a4}n;",
+ "\u817B>N{i4};",
+ "\u817C>Mi{a3}n;",
+ "\u817D>W{a4};",
+ "\u817E>T{e2}ng;",
+ "\u817F>Tu{i3};",
+ "\u8180>B{a3}ng;",
+ "\u8181>Qian;",
+ "\u8182>L{uu3};",
+ "\u8183>W{a4};",
+ "\u8184>So{u4};",
+ "\u8185>T{a2}ng;",
+ "\u8186>S{u4};",
+ "\u8187>Zhu{i4};",
+ "\u8188>G{e2};",
+ "\u8189>Y{i4};",
+ "\u818A>B{o2};",
+ "\u818B>Lia{o2};",
+ "\u818C>J{i2};",
+ "\u818D>P{i2};",
+ "\u818E>Xi{e2};",
+ "\u818F>Gao;",
+ "\u8190>L{uu3};",
+ "\u8191>B{i4}n;",
+ "\u8192>Ou;",
+ "\u8193>Ch{a2}ng;",
+ "\u8194>L{u4};",
+ "\u8195>Gu{o2};",
+ "\u8196>Pang;",
+ "\u8197>Chua{i2};",
+ "\u8198>Pia{o3};",
+ "\u8199>Ji{a3}ng;",
+ "\u819A>Fu;",
+ "\u819B>T{a2}ng;",
+ "\u819C>M{o4};",
+ "\u819D>Xi;",
+ "\u819E>Zhuan;",
+ "\u819F>L{uu4};",
+ "\u81A0>Jiao;",
+ "\u81A1>Y{i4}ng;",
+ "\u81A2>L{uu2};",
+ "\u81A3>Zh{i4};",
+ "\u81A5>Chun;",
+ "\u81A6>Li{a3}n;",
+ "\u81A7>T{o2}ng;",
+ "\u81A8>P{e2}ng;",
+ "\u81A9>N{i4};",
+ "\u81AA>Zh{a4};",
+ "\u81AB>Lia{o2};",
+ "\u81AC>Cu{i4};",
+ "\u81AD>Gui;",
+ "\u81AE>Xiao;",
+ "\u81AF>Teng;",
+ "\u81B0>F{a2}n;",
+ "\u81B1>Zh{i2};",
+ "\u81B2>Jiao;",
+ "\u81B3>Sh{a4}n;",
+ "\u81B4>W{u2};",
+ "\u81B5>Cu{i4};",
+ "\u81B6>R{u4}n;",
+ "\u81B7>Xiang;",
+ "\u81B8>Su{i3};",
+ "\u81B9>F{e4}n;",
+ "\u81BA>Ying;",
+ "\u81BB>T{a3}n;",
+ "\u81BC>Zhua;",
+ "\u81BD>D{a3}n;",
+ "\u81BE>Kua{i4};",
+ "\u81BF>N{o2}ng;",
+ "\u81C0>T{u2}n;",
+ "\u81C1>Li{a2}n;",
+ "\u81C2>B{i4};",
+ "\u81C3>Y{o3}ng;",
+ "\u81C4>Ju{e2};",
+ "\u81C5>Ch{u4};",
+ "\u81C6>Y{i4};",
+ "\u81C7>Ju{a3}n;",
+ "\u81C8>L{a4};",
+ "\u81C9>Li{a3}n;",
+ "\u81CA>Sao;",
+ "\u81CB>T{u2}n;",
+ "\u81CC>G{u3};",
+ "\u81CD>Q{i2};",
+ "\u81CE>Cu{i4};",
+ "\u81CF>B{i4}n;",
+ "\u81D0>Xun;",
+ "\u81D1>R{u2};",
+ "\u81D2>Hu{o4};",
+ "\u81D3>Z{a4}ng;",
+ "\u81D4>Xi{a4}n;",
+ "\u81D5>Biao;",
+ "\u81D6>X{i4}ng;",
+ "\u81D7>Kuan;",
+ "\u81D8>L{a4};",
+ "\u81D9>Yan;",
+ "\u81DA>L{u2};",
+ "\u81DB>Hu{o4};",
+ "\u81DC>Zang;",
+ "\u81DD>Lu{o3};",
+ "\u81DE>Q{u2};",
+ "\u81DF>Z{a4}ng;",
+ "\u81E0>Lu{a2}n;",
+ "\u81E1>N{i2};",
+ "\u81E2>Zang;",
+ "\u81E3>Ch{e2}n;",
+ "\u81E4>Qian;",
+ "\u81E5>W{o4};",
+ "\u81E6>Gu{a4}ng;",
+ "\u81E7>Z{a2}ng;",
+ "\u81E8>L{i2}n;",
+ "\u81E9>Gu{a4}ng;",
+ "\u81EA>Z{i4};",
+ "\u81EB>Jia{o3};",
+ "\u81EC>Ni{e4};",
+ "\u81ED>Cho{u4};",
+ "\u81EE>J{i4};",
+ "\u81EF>Gao;",
+ "\u81F0>Cho{u4};",
+ "\u81F1>Mi{a2}n;",
+ "\u81F2>Ni{e4};",
+ "\u81F3>Zh{i4};",
+ "\u81F4>Zh{i4};",
+ "\u81F5>G{e2};",
+ "\u81F6>Ji{a4}n;",
+ "\u81F7>Di{e2};",
+ "\u81F8>Zh{i4};",
+ "\u81F9>Xiu;",
+ "\u81FA>Ta{i2};",
+ "\u81FB>Zhen;",
+ "\u81FC>Ji{u4};",
+ "\u81FD>Xi{a4}n;",
+ "\u81FE>Y{u2};",
+ "\u81FF>Cha;",
+ "\u8200>Ya{o3};",
+ "\u8201>Y{u2};",
+ "\u8202>Chong;",
+ "\u8203>X{i4};",
+ "\u8204>X{i4};",
+ "\u8205>Ji{u4};",
+ "\u8206>Y{u2};",
+ "\u8207>Y{u3};",
+ "\u8208>Xing;",
+ "\u8209>J{u3};",
+ "\u820A>Ji{u4};",
+ "\u820B>X{i4}n;",
+ "\u820C>Sh{e2};",
+ "\u820D>Sh{e4};",
+ "\u820F>Ji{u3};",
+ "\u8210>Sh{i4};",
+ "\u8211>Tan;",
+ "\u8212>Shu;",
+ "\u8213>Sh{i4};",
+ "\u8214>Ti{a3}n;",
+ "\u8215>D{a4}n;",
+ "\u8216>P{u4};",
+ "\u8217>P{u4};",
+ "\u8218>Gu{a3}n;",
+ "\u8219>Hu{a4};",
+ "\u821A>Tan;",
+ "\u821B>Chu{a3}n;",
+ "\u821C>Sh{u4}n;",
+ "\u821D>Xi{a2};",
+ "\u821E>W{u3};",
+ "\u821F>Zhou;",
+ "\u8220>Dao;",
+ "\u8221>Gang;",
+ "\u8222>Shan;",
+ "\u8223>Y{i3};",
+ "\u8225>Pa;",
+ "\u8226>Ta{i4};",
+ "\u8227>F{a2}n;",
+ "\u8228>B{a3}n;",
+ "\u8229>Chu{a2}n;",
+ "\u822A>H{a2}ng;",
+ "\u822B>F{a3}ng;",
+ "\u822C>Ban;",
+ "\u822D>Qu{e4};",
+ "\u822F>Zhong;",
+ "\u8230>Ji{a4}n;",
+ "\u8231>Cang;",
+ "\u8232>L{i2}ng;",
+ "\u8233>Zh{u2};",
+ "\u8234>Z{e2};",
+ "\u8235>Du{o4};",
+ "\u8236>B{o2};",
+ "\u8237>Xi{a2}n;",
+ "\u8238>G{e3};",
+ "\u8239>Chu{a2}n;",
+ "\u823A>Ji{a2};",
+ "\u823B>L{u3};",
+ "\u823C>H{o2}ng;",
+ "\u823D>P{a2}ng;",
+ "\u823E>Xi;",
+ "\u8240>F{u2};",
+ "\u8241>Za{o4};",
+ "\u8242>F{e2}ng;",
+ "\u8243>L{i2};",
+ "\u8244>Shao;",
+ "\u8245>Y{u2};",
+ "\u8246>L{a2}ng;",
+ "\u8247>T{i3}ng;",
+ "\u8249>We{i3};",
+ "\u824A>B{o2};",
+ "\u824B>M{e3}ng;",
+ "\u824C>Ni{a4}n;",
+ "\u824D>Ju;",
+ "\u824E>Hu{a2}ng;",
+ "\u824F>Sho{u3};",
+ "\u8250>Zong;",
+ "\u8251>Bi{a4}n;",
+ "\u8252>Ma{o4};",
+ "\u8253>Di{e2};",
+ "\u8255>B{a4}ng;",
+ "\u8256>Cha;",
+ "\u8257>Y{i4};",
+ "\u8258>Sao;",
+ "\u8259>Cang;",
+ "\u825A>Ca{o2};",
+ "\u825B>Lo{u2};",
+ "\u825C>Da{i4};",
+ "\u825E>Ya{o4};",
+ "\u825F>T{o2}ng;",
+ "\u8261>Dang;",
+ "\u8262>T{a2}n;",
+ "\u8263>L{u3};",
+ "\u8264>Y{i3};",
+ "\u8265>Ji{e4};",
+ "\u8266>Ji{a4}n;",
+ "\u8267>Hu{o4};",
+ "\u8268>M{e2}ng;",
+ "\u8269>Q{i2};",
+ "\u826A>L{u3};",
+ "\u826B>L{u2};",
+ "\u826C>Ch{a2}n;",
+ "\u826D>Shuang;",
+ "\u826E>G{e4}n;",
+ "\u826F>Li{a2}ng;",
+ "\u8270>Jian;",
+ "\u8271>Jian;",
+ "\u8272>S{e4};",
+ "\u8273>Y{a4}n;",
+ "\u8274>F{u2};",
+ "\u8275>P{i2}ng;",
+ "\u8276>Y{a4}n;",
+ "\u8277>Y{a4}n;",
+ "\u8278>Ca{o3};",
+ "\u8279>Cao3zi4to{u2};",
+ "\u827A>Y{i4};",
+ "\u827B>L{e4};",
+ "\u827C>Ting;",
+ "\u827D>Qi{u2};",
+ "\u827E>A{i4};",
+ "\u827F>Na{i3};",
+ "\u8280>Tia{o2};",
+ "\u8281>Jiao;",
+ "\u8282>Ji{e2};",
+ "\u8283>P{e2}ng;",
+ "\u8284>W{a2}n;",
+ "\u8285>Y{i4};",
+ "\u8286>Chai;",
+ "\u8287>Mi{a2}n;",
+ "\u8288>Mie;",
+ "\u8289>Gan;",
+ "\u828A>Qian;",
+ "\u828B>Y{u4};",
+ "\u828C>Y{u4};",
+ "\u828D>Shu{o4};",
+ "\u828E>Qiong;",
+ "\u828F>T{u3};",
+ "\u8290>Xi{a4};",
+ "\u8291>Q{i3};",
+ "\u8292>M{a2}ng;",
+ "\u8293>Z{i3};",
+ "\u8294>Hu{i3};",
+ "\u8295>Sui;",
+ "\u8296>Zh{i4};",
+ "\u8297>Xiang;",
+ "\u8298>Bi;",
+ "\u8299>F{u2};",
+ "\u829A>T{u2}n;",
+ "\u829B>We{i3};",
+ "\u829C>W{u2};",
+ "\u829D>Zhi;",
+ "\u829E>Q{i3};",
+ "\u829F>Shan;",
+ "\u82A0>W{e2}n;",
+ "\u82A1>Qi{a4}n;",
+ "\u82A2>R{e2}n;",
+ "\u82A3>Fo{u3};",
+ "\u82A4>Kou;",
+ "\u82A5>Ji{e4};",
+ "\u82A6>L{u2};",
+ "\u82A7>X{u4};",
+ "\u82A8>J{i2};",
+ "\u82A9>Q{i2}n;",
+ "\u82AA>Q{i2};",
+ "\u82AB>Yu{a2}n;",
+ "\u82AC>Fen;",
+ "\u82AD>Ba;",
+ "\u82AE>Ru{i4};",
+ "\u82AF>Xin;",
+ "\u82B0>J{i4};",
+ "\u82B1>Hua;",
+ "\u82B2>Hua;",
+ "\u82B3>Fang;",
+ "\u82B4>W{u4};",
+ "\u82B5>Ju{e2};",
+ "\u82B6>Gou;",
+ "\u82B7>Zh{i3};",
+ "\u82B8>Y{u2}n;",
+ "\u82B9>Q{i2}n;",
+ "\u82BA>A{o3};",
+ "\u82BB>Ch{u2};",
+ "\u82BC>Ma{o4};",
+ "\u82BD>Y{a2};",
+ "\u82BE>Fe{i4};",
+ "\u82BF>R{e4}ng;",
+ "\u82C0>H{a2}ng;",
+ "\u82C1>Cong;",
+ "\u82C2>Y{i2}n;",
+ "\u82C3>Yo{u3};",
+ "\u82C4>Bi{a4}n;",
+ "\u82C5>Y{i4};",
+ "\u82C7>We{i3};",
+ "\u82C8>L{i4};",
+ "\u82C9>P{i3};",
+ "\u82CA>{E4};",
+ "\u82CB>Xi{a4}n;",
+ "\u82CC>Ch{a2}ng;",
+ "\u82CD>Cang;",
+ "\u82CE>M{e2}ng;",
+ "\u82CF>Su;",
+ "\u82D0>Y{i2};",
+ "\u82D1>Yu{a4}n;",
+ "\u82D2>R{a3}n;",
+ "\u82D3>L{i2}ng;",
+ "\u82D4>Ta{i2};",
+ "\u82D5>Tia{o2};",
+ "\u82D6>D{i3};",
+ "\u82D7>Mia{o2};",
+ "\u82D8>Qi{o3}ng;",
+ "\u82D9>L{i4};",
+ "\u82DA>Y{o4}ng;",
+ "\u82DB>Ke;",
+ "\u82DC>M{u4};",
+ "\u82DD>Pe{i4};",
+ "\u82DE>Bao;",
+ "\u82DF>Go{u3};",
+ "\u82E0>M{i2}n;",
+ "\u82E1>Y{i3};",
+ "\u82E2>Y{i3};",
+ "\u82E3>J{u4};",
+ "\u82E4>P{i3};",
+ "\u82E5>Ru{o4};",
+ "\u82E6>K{u3};",
+ "\u82E7>Zh{u4};",
+ "\u82E8>N{i3};",
+ "\u82E9>B{o2};",
+ "\u82EA>B{i3}ng;",
+ "\u82EB>Shan;",
+ "\u82EC>Qi{u2};",
+ "\u82ED>Ya{o3};",
+ "\u82EE>Xian;",
+ "\u82EF>B{e3}n;",
+ "\u82F0>H{o2}ng;",
+ "\u82F1>Ying;",
+ "\u82F2>Zh{a3};",
+ "\u82F3>Dong;",
+ "\u82F4>Ju;",
+ "\u82F5>Di{e2};",
+ "\u82F6>Ni{e2};",
+ "\u82F7>Gan;",
+ "\u82F8>Hu;",
+ "\u82F9>P{i2}ng;",
+ "\u82FA>Me{i2};",
+ "\u82FB>F{u2};",
+ "\u82FC>Sheng;",
+ "\u82FD>Gu;",
+ "\u82FE>B{i4};",
+ "\u82FF>We{i4};",
+ "\u8300>F{u2};",
+ "\u8301>Zhu{o2};",
+ "\u8302>Ma{o4};",
+ "\u8303>F{a4}n;",
+ "\u8304>Qi{e2};",
+ "\u8305>Ma{o2};",
+ "\u8306>Ma{o3};",
+ "\u8307>B{a2};",
+ "\u8308>Z{i3};",
+ "\u8309>M{o4};",
+ "\u830A>Zi;",
+ "\u830B>D{i3};",
+ "\u830C>Ch{i2};",
+ "\u830D>J{i4};",
+ "\u830E>Jing;",
+ "\u830F>L{o2}ng;",
+ "\u8311>Nia{o3};",
+ "\u8313>Xu{e2};",
+ "\u8314>Y{i2}ng;",
+ "\u8315>Qi{o2}ng;",
+ "\u8316>G{e2};",
+ "\u8317>M{i3}ng;",
+ "\u8318>L{i4};",
+ "\u8319>R{o2}ng;",
+ "\u831A>Y{i4}n;",
+ "\u831B>G{e4}n;",
+ "\u831C>Qi{a4}n;",
+ "\u831D>Cha{i3};",
+ "\u831E>Ch{e2}n;",
+ "\u831F>Y{u4};",
+ "\u8320>Xiu;",
+ "\u8321>Z{i4};",
+ "\u8322>Li{e4};",
+ "\u8323>W{u2};",
+ "\u8324>J{i4};",
+ "\u8325>Kui;",
+ "\u8326>C{e4};",
+ "\u8327>Ch{o2}ng;",
+ "\u8328>C{i2};",
+ "\u8329>Go{u3};",
+ "\u832A>Guang;",
+ "\u832B>M{a2}ng;",
+ "\u832C>Ch{i2};",
+ "\u832D>Jiao;",
+ "\u832E>Jiao;",
+ "\u832F>F{u2};",
+ "\u8330>Y{u2};",
+ "\u8331>Zhu;",
+ "\u8332>Zi;",
+ "\u8333>Jiang;",
+ "\u8334>Hu{i2};",
+ "\u8335>Yin;",
+ "\u8336>Ch{a2};",
+ "\u8337>F{a2};",
+ "\u8338>R{o2}ng;",
+ "\u8339>R{u2};",
+ "\u833A>Chong;",
+ "\u833B>M{a3}ng;",
+ "\u833C>T{o2}ng;",
+ "\u833D>Zh{o4}ng;",
+ "\u833F>Zh{u2};",
+ "\u8340>X{u2}n;",
+ "\u8341>Hu{a2}n;",
+ "\u8342>Kua;",
+ "\u8343>Qu{a2}n;",
+ "\u8344>Gai;",
+ "\u8345>Da;",
+ "\u8346>Jing;",
+ "\u8347>X{i4}ng;",
+ "\u8348>Qu{a4}n;",
+ "\u8349>Ca{o3};",
+ "\u834A>Jing;",
+ "\u834B>{E2}r;",
+ "\u834C>{A4}n;",
+ "\u834D>Shou;",
+ "\u834E>Ch{i2};",
+ "\u834F>R{e3}n;",
+ "\u8350>Ji{a4}n;",
+ "\u8351>T{i2};",
+ "\u8352>Huang;",
+ "\u8353>P{i2}ng;",
+ "\u8354>L{i4};",
+ "\u8355>Jin;",
+ "\u8356>La{o3};",
+ "\u8357>Sh{u4};",
+ "\u8358>Zhuang;",
+ "\u8359>D{a2};",
+ "\u835A>Ji{a2};",
+ "\u835B>Ra{o2};",
+ "\u835C>B{i4};",
+ "\u835D>Z{e2};",
+ "\u835E>Qia{o2};",
+ "\u835F>Hu{i4};",
+ "\u8360>Q{i2};",
+ "\u8361>D{a4}ng;",
+ "\u8363>R{o2}ng;",
+ "\u8364>Hun;",
+ "\u8365>Y{i2}ng;",
+ "\u8366>Lu{o4};",
+ "\u8367>Y{i2}ng;",
+ "\u8368>X{u2}n;",
+ "\u8369>J{i4}n;",
+ "\u836A>Sun;",
+ "\u836B>Y{i4}n;",
+ "\u836C>Ma{i3};",
+ "\u836D>H{o2}ng;",
+ "\u836E>Zho{u4};",
+ "\u836F>Ya{o4};",
+ "\u8370>D{u4};",
+ "\u8371>We{i3};",
+ "\u8372>Ch{u4};",
+ "\u8373>Do{u4};",
+ "\u8374>Fu;",
+ "\u8375>R{e3}n;",
+ "\u8376>Y{i2}n;",
+ "\u8377>H{e2};",
+ "\u8378>B{i2};",
+ "\u8379>B{u4};",
+ "\u837A>Y{u2}n;",
+ "\u837B>D{i2};",
+ "\u837C>T{u2};",
+ "\u837D>Sui;",
+ "\u837E>Sui;",
+ "\u837F>Ch{e2}ng;",
+ "\u8380>Ch{e2}n;",
+ "\u8381>W{u2};",
+ "\u8382>Bi{e2};",
+ "\u8383>Xi;",
+ "\u8384>G{e3}ng;",
+ "\u8385>L{i4};",
+ "\u8386>F{u3};",
+ "\u8387>Zh{u4};",
+ "\u8388>M{o4};",
+ "\u8389>L{i4};",
+ "\u838A>Zhuang;",
+ "\u838B>J{i2};",
+ "\u838C>Du{o2};",
+ "\u838D>Qi{u2};",
+ "\u838E>Sha;",
+ "\u838F>Suo;",
+ "\u8390>Ch{e2}n;",
+ "\u8391>Feng;",
+ "\u8392>J{u3};",
+ "\u8393>Me{i2};",
+ "\u8394>M{e2}ng;",
+ "\u8395>X{i4}ng;",
+ "\u8396>Jing;",
+ "\u8397>Che;",
+ "\u8398>Xin;",
+ "\u8399>Jun;",
+ "\u839A>Y{a2}n;",
+ "\u839B>T{i2}ng;",
+ "\u839C>Dia{o4};",
+ "\u839D>Cu{o4};",
+ "\u839E>W{a3}n;",
+ "\u839F>H{a4}n;",
+ "\u83A0>Yo{u3};",
+ "\u83A1>Cu{o4};",
+ "\u83A2>Ji{a2};",
+ "\u83A3>W{a2}ng;",
+ "\u83A4>Yo{u2};",
+ "\u83A5>Ni{u3};",
+ "\u83A6>Shao;",
+ "\u83A7>Xi{a4}n;",
+ "\u83A8>L{a2}ng;",
+ "\u83A9>F{u2};",
+ "\u83AA>{E2};",
+ "\u83AB>M{o4};",
+ "\u83AC>W{e4}n;",
+ "\u83AD>Ji{e2};",
+ "\u83AE>N{a2}n;",
+ "\u83AF>M{u4};",
+ "\u83B0>K{a3}n;",
+ "\u83B1>La{i2};",
+ "\u83B2>Li{a2}n;",
+ "\u83B3>Sh{i2};",
+ "\u83B4>Wo;",
+ "\u83B6>Li{a3}n;",
+ "\u83B7>Hu{o4};",
+ "\u83B8>Yo{u2};",
+ "\u83B9>Y{i2}ng;",
+ "\u83BA>Ying;",
+ "\u83BC>Ch{u2}n;",
+ "\u83BD>M{a3}ng;",
+ "\u83BE>M{a3}ng;",
+ "\u83BF>C{i4};",
+ "\u83C0>W{a3}n;",
+ "\u83C1>Jing;",
+ "\u83C2>Di;",
+ "\u83C3>Q{u2};",
+ "\u83C4>Dong;",
+ "\u83C5>Jian;",
+ "\u83C6>Zou;",
+ "\u83C7>Gu;",
+ "\u83C8>La;",
+ "\u83C9>L{u4};",
+ "\u83CA>J{u2};",
+ "\u83CB>We{i4};",
+ "\u83CC>J{u4}n;",
+ "\u83CD>Ni{e4};",
+ "\u83CE>Kun;",
+ "\u83CF>H{e2};",
+ "\u83D0>P{u2};",
+ "\u83D1>Zi;",
+ "\u83D2>Ga{o3};",
+ "\u83D3>Gu{o3};",
+ "\u83D4>F{u2};",
+ "\u83D5>L{u2}n;",
+ "\u83D6>Chang;",
+ "\u83D7>Cho{u2};",
+ "\u83D8>Song;",
+ "\u83D9>Chu{i2};",
+ "\u83DA>Zh{a4}n;",
+ "\u83DB>M{e2}n;",
+ "\u83DC>Ca{i4};",
+ "\u83DD>B{a2};",
+ "\u83DE>L{i2};",
+ "\u83DF>T{u4};",
+ "\u83E0>Bo;",
+ "\u83E1>H{a4}n;",
+ "\u83E2>Ba{o4};",
+ "\u83E3>Q{i4}n;",
+ "\u83E4>Ju{a3}n;",
+ "\u83E5>Xi;",
+ "\u83E6>Q{i2}n;",
+ "\u83E7>D{i3};",
+ "\u83E8>Jie;",
+ "\u83E9>P{u2};",
+ "\u83EA>D{a4}ng;",
+ "\u83EB>J{i3}n;",
+ "\u83EC>Zha{o3};",
+ "\u83ED>Ta{i2};",
+ "\u83EE>Geng;",
+ "\u83EF>Hu{a2};",
+ "\u83F0>Gu;",
+ "\u83F1>L{i2}ng;",
+ "\u83F2>Fei;",
+ "\u83F3>Jin;",
+ "\u83F4>An;",
+ "\u83F5>W{a3}ng;",
+ "\u83F6>B{e3}ng;",
+ "\u83F7>Zho{u3};",
+ "\u83F8>Yan;",
+ "\u83F9>Ju;",
+ "\u83FA>Jian;",
+ "\u83FB>L{i3}n;",
+ "\u83FC>T{a3}n;",
+ "\u83FD>Sh{u2};",
+ "\u83FE>Ti{a2}n;",
+ "\u83FF>Da{o4};",
+ "\u8400>H{u3};",
+ "\u8401>Q{i2};",
+ "\u8402>H{e2};",
+ "\u8403>Cu{i4};",
+ "\u8404>Ta{o2};",
+ "\u8405>Chun;",
+ "\u8406>Bei;",
+ "\u8407>Ch{a2}ng;",
+ "\u8408>Hu{a2}n;",
+ "\u8409>Fe{i2};",
+ "\u840A>La{i2};",
+ "\u840B>Qi;",
+ "\u840C>M{e2}ng;",
+ "\u840D>P{i2}ng;",
+ "\u840E>Wei;",
+ "\u840F>D{a4}n;",
+ "\u8410>Sh{a4};",
+ "\u8411>Hu{a2}n;",
+ "\u8412>Y{a3}n;",
+ "\u8413>Y{i2};",
+ "\u8414>Tia{o2};",
+ "\u8415>Q{i2};",
+ "\u8416>W{a3}n;",
+ "\u8417>C{e4};",
+ "\u8418>Na{i4};",
+ "\u841A>Tu{o4};",
+ "\u841B>Jiu;",
+ "\u841C>Tie;",
+ "\u841D>Lu{o2};",
+ "\u8420>M{e2}ng;",
+ "\u8424>Y{i2}ng;",
+ "\u8425>Y{i2}ng;",
+ "\u8426>Y{i2}ng;",
+ "\u8427>Xiao;",
+ "\u8428>S{a4};",
+ "\u8429>Qiu;",
+ "\u842A>Ke;",
+ "\u842B>Xi{a4}ng;",
+ "\u842C>W{a4}n;",
+ "\u842D>Y{u3};",
+ "\u842E>Y{u4};",
+ "\u842F>F{u4};",
+ "\u8430>Li{a4}n;",
+ "\u8431>Xuan;",
+ "\u8432>Yu{a2}n;",
+ "\u8433>N{a2}n;",
+ "\u8434>Z{e2};",
+ "\u8435>Wo;",
+ "\u8436>Ch{u3}n;",
+ "\u8437>Xiao;",
+ "\u8438>Y{u2};",
+ "\u8439>Pian;",
+ "\u843A>Ma{o4};",
+ "\u843B>An;",
+ "\u843C>{E4};",
+ "\u843D>Lu{o4};",
+ "\u843E>Y{i2}ng;",
+ "\u843F>Hu{o2};",
+ "\u8440>Gua;",
+ "\u8441>Jiang;",
+ "\u8442>Mi{a3}n;",
+ "\u8443>Zu{o2};",
+ "\u8444>Zu{o4};",
+ "\u8445>Ju;",
+ "\u8446>Ba{o3};",
+ "\u8447>Ro{u2};",
+ "\u8448>X{i3};",
+ "\u8449>Xi{e2};",
+ "\u844A>An;",
+ "\u844B>Q{u2};",
+ "\u844C>Jian;",
+ "\u844D>F{u2};",
+ "\u844E>L{uu4};",
+ "\u844F>Jing;",
+ "\u8450>P{e2}n;",
+ "\u8451>Feng;",
+ "\u8452>H{o2}ng;",
+ "\u8453>H{o2}ng;",
+ "\u8454>Ho{u2};",
+ "\u8455>Y{a2}n;",
+ "\u8456>T{u2};",
+ "\u8457>Zh{u4};",
+ "\u8458>Zi;",
+ "\u8459>Xiang;",
+ "\u845A>Sh{e4}n;",
+ "\u845B>G{e3};",
+ "\u845C>Ji{e2};",
+ "\u845D>J{i4}ng;",
+ "\u845E>M{i3};",
+ "\u845F>Hu{a2}ng;",
+ "\u8460>Shen;",
+ "\u8461>P{u2};",
+ "\u8462>Ga{i4};",
+ "\u8463>D{o3}ng;",
+ "\u8464>Zho{u4};",
+ "\u8465>Qi{a2}n;",
+ "\u8466>We{i3};",
+ "\u8467>B{o2};",
+ "\u8468>Wei;",
+ "\u8469>Pa;",
+ "\u846A>J{i4};",
+ "\u846B>H{u2};",
+ "\u846C>Z{a4}ng;",
+ "\u846D>Jia;",
+ "\u846E>Du{a4}n;",
+ "\u846F>Ya{o4};",
+ "\u8470>J{u4}n;",
+ "\u8471>Cong;",
+ "\u8472>Qu{a2}n;",
+ "\u8473>Wei;",
+ "\u8474>Xi{a2}n;",
+ "\u8475>Ku{i2};",
+ "\u8476>T{i2}ng;",
+ "\u8477>Hun;",
+ "\u8478>X{i3};",
+ "\u8479>Shi;",
+ "\u847A>Q{i4};",
+ "\u847B>L{a2}n;",
+ "\u847C>Zong;",
+ "\u847D>Yao;",
+ "\u847E>Yuan;",
+ "\u847F>Me{i2};",
+ "\u8480>Yun;",
+ "\u8481>Sh{u4};",
+ "\u8482>D{i4};",
+ "\u8483>Zhu{a4}n;",
+ "\u8484>Guan;",
+ "\u8486>Xue;",
+ "\u8487>Ch{a3}n;",
+ "\u8488>Ka{i3};",
+ "\u8489>Ku{i4};",
+ "\u848B>Ji{a3}ng;",
+ "\u848C>Lo{u2};",
+ "\u848D>We{i2};",
+ "\u848E>Pa{i4};",
+ "\u8490>Sou;",
+ "\u8491>Yin;",
+ "\u8492>Shi;",
+ "\u8493>Ch{u2}n;",
+ "\u8494>Sh{i2};",
+ "\u8495>Yun;",
+ "\u8496>Zhen;",
+ "\u8497>L{a4}ng;",
+ "\u8498>N{u2};",
+ "\u8499>M{e2}ng;",
+ "\u849A>H{e2};",
+ };
+ }
+
+ private String[] getString3() {
+ return new String[] {
+
+ "\u849B>Que;",
+ "\u849C>Su{a4}n;",
+ "\u849D>Yu{a2}n;",
+ "\u849E>L{i4};",
+ "\u849F>J{u3};",
+ "\u84A0>X{i2};",
+ "\u84A1>P{a2}ng;",
+ "\u84A2>Ch{u2};",
+ "\u84A3>X{u2};",
+ "\u84A4>T{u2};",
+ "\u84A5>Li{u2};",
+ "\u84A6>W{o4};",
+ "\u84A7>Zhen;",
+ "\u84A8>Qi{a4}n;",
+ "\u84A9>Zu;",
+ "\u84AA>P{o4};",
+ "\u84AB>Cuo;",
+ "\u84AC>Yuan;",
+ "\u84AD>Ch{u2};",
+ "\u84AE>Y{u4};",
+ "\u84AF>Kua{i3};",
+ "\u84B0>P{a2}n;",
+ "\u84B1>P{u2};",
+ "\u84B2>P{u2};",
+ "\u84B3>N{a4};",
+ "\u84B4>Shu{o4};",
+ "\u84B5>Xi;",
+ "\u84B6>F{e2}n;",
+ "\u84B7>Y{u2}n;",
+ "\u84B8>Zheng;",
+ "\u84B9>Jian;",
+ "\u84BA>J{i2};",
+ "\u84BB>Ru{o4};",
+ "\u84BC>Cang;",
+ "\u84BD>En;",
+ "\u84BE>M{i2};",
+ "\u84BF>Hao;",
+ "\u84C0>Sun;",
+ "\u84C1>Zhen;",
+ "\u84C2>M{i2}ng;",
+ "\u84C3>Sou;",
+ "\u84C4>X{u4};",
+ "\u84C5>Li{u2};",
+ "\u84C6>X{i2};",
+ "\u84C7>G{u3};",
+ "\u84C8>L{a2}ng;",
+ "\u84C9>R{o2}ng;",
+ "\u84CA>W{e3}ng;",
+ "\u84CB>Ga{i4};",
+ "\u84CC>Cu{o4};",
+ "\u84CD>Shi;",
+ "\u84CE>T{a2}ng;",
+ "\u84CF>Lu{o3};",
+ "\u84D0>R{u4};",
+ "\u84D1>Suo;",
+ "\u84D2>Xian;",
+ "\u84D3>Be{i4};",
+ "\u84D4>Ya{o3};",
+ "\u84D5>Gu{i4};",
+ "\u84D6>Bi;",
+ "\u84D7>Z{o3}ng;",
+ "\u84D8>G{u3}n;",
+ "\u84DA>Xiu;",
+ "\u84DB>C{e4};",
+ "\u84DD>L{a2}n;",
+ "\u84DF>J{i4};",
+ "\u84E0>L{i2};",
+ "\u84E1>Can;",
+ "\u84E2>L{a2}ng;",
+ "\u84E3>Y{u4};",
+ "\u84E5>Y{i4}ng;",
+ "\u84E6>M{o4};",
+ "\u84E7>Dia{o4};",
+ "\u84E8>Tiao;",
+ "\u84E9>Ma{o4};",
+ "\u84EA>Tong;",
+ "\u84EB>Zh{u2};",
+ "\u84EC>P{e2}ng;",
+ "\u84ED>An;",
+ "\u84EE>Li{a2}n;",
+ "\u84EF>Cong;",
+ "\u84F0>X{i3};",
+ "\u84F1>P{i2}ng;",
+ "\u84F2>Qiu;",
+ "\u84F3>J{i4}n;",
+ "\u84F4>Ch{u2}n;",
+ "\u84F5>Ji{e2};",
+ "\u84F6>We{i3};",
+ "\u84F7>Tui;",
+ "\u84F8>Ca{o2};",
+ "\u84F9>Y{u3};",
+ "\u84FA>Y{i4};",
+ "\u84FB>J{i2};",
+ "\u84FC>Lia{o3};",
+ "\u84FD>B{i4};",
+ "\u84FE>L{u3};",
+ "\u84FF>S{u4};",
+ "\u8500>B{u4};",
+ "\u8501>Zhang;",
+ "\u8502>Lu{o2};",
+ "\u8503>Ji{a4}ng;",
+ "\u8504>M{a4}n;",
+ "\u8505>Y{a2}n;",
+ "\u8506>L{i2}ng;",
+ "\u8507>J{i4};",
+ "\u8508>Pia{o3};",
+ "\u8509>G{u3}n;",
+ "\u850A>H{a3}n;",
+ "\u850B>D{i2};",
+ "\u850C>S{u4};",
+ "\u850D>L{u4};",
+ "\u850E>Sh{e4};",
+ "\u850F>Shang;",
+ "\u8510>D{i2};",
+ "\u8511>Mi{e4};",
+ "\u8512>Xun;",
+ "\u8513>M{a4}n;",
+ "\u8514>B{o2};",
+ "\u8515>D{i4};",
+ "\u8516>Cu{o2};",
+ "\u8517>Zh{e4};",
+ "\u8518>Sen;",
+ "\u8519>Xu{a4}n;",
+ "\u851A>We{i4};",
+ "\u851B>H{u2};",
+ "\u851C>A{o2};",
+ "\u851D>M{i3};",
+ "\u851E>Lo{u2};",
+ "\u851F>C{u4};",
+ "\u8520>Zhong;",
+ "\u8521>Ca{i4};",
+ "\u8522>P{o2};",
+ "\u8523>Ji{a3}ng;",
+ "\u8524>M{i4};",
+ "\u8525>Cong;",
+ "\u8526>Nia{o3};",
+ "\u8527>Hu{i4};",
+ "\u8528>J{u4}n;",
+ "\u8529>Y{i2}n;",
+ "\u852A>Ji{a4}n;",
+ "\u852B>Yan;",
+ "\u852C>Shu;",
+ "\u852D>Y{i4}n;",
+ "\u852E>Ku{i4};",
+ "\u852F>Ch{e2}n;",
+ "\u8530>H{u4};",
+ "\u8531>Sha;",
+ "\u8532>Ko{u4};",
+ "\u8533>Qi{a4}n;",
+ "\u8534>M{a2};",
+ "\u8535>Zang;",
+ "\u8537>Qi{a2}ng;",
+ "\u8538>Dou;",
+ "\u8539>Li{a4}n;",
+ "\u853A>L{i4}n;",
+ "\u853B>Ko{u4};",
+ "\u853C>A{i3};",
+ "\u853D>B{i4};",
+ "\u853E>L{i2};",
+ "\u853F>We{i2};",
+ "\u8540>J{i2};",
+ "\u8541>X{u2}n;",
+ "\u8542>Sh{e4}ng;",
+ "\u8543>F{a2}n;",
+ "\u8544>M{e2}ng;",
+ "\u8545>O{u3};",
+ "\u8546>Ch{a3}n;",
+ "\u8547>Di{a3}n;",
+ "\u8548>X{u4}n;",
+ "\u8549>Jiao;",
+ "\u854A>Ru{i3};",
+ "\u854B>Ru{i3};",
+ "\u854C>Le{i3};",
+ "\u854D>Y{u2};",
+ "\u854E>Qia{o2};",
+ "\u854F>Ch{u2};",
+ "\u8550>Hu{a2};",
+ "\u8551>Jian;",
+ "\u8552>Ma{i3};",
+ "\u8553>Y{u2}n;",
+ "\u8554>Bao;",
+ "\u8555>Yo{u2};",
+ "\u8556>Q{u2};",
+ "\u8557>L{u4};",
+ "\u8558>Ra{o2};",
+ "\u8559>Hu{i4};",
+ "\u855A>{E4};",
+ "\u855B>T{e2}ng;",
+ "\u855C>Fe{i3};",
+ "\u855D>Ju{e2};",
+ "\u855E>Zu{i4};",
+ "\u855F>F{a4};",
+ "\u8560>R{u2};",
+ "\u8561>F{e2}n;",
+ "\u8562>Ku{i4};",
+ "\u8563>Sh{u4}n;",
+ "\u8564>Ru{i2};",
+ "\u8565>Y{a3};",
+ "\u8566>Xu;",
+ "\u8567>F{u4};",
+ "\u8568>Ju{e2};",
+ "\u8569>D{a4}ng;",
+ "\u856A>W{u2};",
+ "\u856B>T{o2}ng;",
+ "\u856C>Si;",
+ "\u856D>Xiao;",
+ "\u856E>X{i4};",
+ "\u856F>L{o2}ng;",
+ "\u8570>Y{u4}n;",
+ "\u8572>Q{i2};",
+ "\u8573>Jian;",
+ "\u8574>Y{u4}n;",
+ "\u8575>Sun;",
+ "\u8576>L{i2}ng;",
+ "\u8577>Y{u4};",
+ "\u8578>Xi{a2};",
+ "\u8579>Yong;",
+ "\u857A>J{i2};",
+ "\u857B>H{o4}ng;",
+ "\u857C>S{i4};",
+ "\u857D>N{o2}ng;",
+ "\u857E>Le{i3};",
+ "\u857F>Xuan;",
+ "\u8580>Y{u4}n;",
+ "\u8581>Y{u4};",
+ "\u8582>X{i2};",
+ "\u8583>Ha{o4};",
+ "\u8584>B{o2};",
+ "\u8585>Hao;",
+ "\u8586>A{i4};",
+ "\u8587>We{i2};",
+ "\u8588>Hu{i4};",
+ "\u8589>We{i4};",
+ "\u858A>J{i4};",
+ "\u858B>Ci;",
+ "\u858C>Xiang;",
+ "\u858D>Lu{a4}n;",
+ "\u858E>Mi{e4};",
+ "\u858F>Y{i4};",
+ "\u8590>L{e2}ng;",
+ "\u8591>Jiang;",
+ "\u8592>C{a4}n;",
+ "\u8593>Shen;",
+ "\u8594>Qi{a2}ng;",
+ "\u8595>Li{a2}n;",
+ "\u8596>Ke;",
+ "\u8597>Yu{a2}n;",
+ "\u8598>D{a2};",
+ "\u8599>T{i4};",
+ "\u859A>T{a2}ng;",
+ "\u859B>Xie;",
+ "\u859C>B{i4};",
+ "\u859D>Zh{a2}n;",
+ "\u859E>Sun;",
+ "\u859F>Li{a3}n;",
+ "\u85A0>F{a2}n;",
+ "\u85A1>D{i3}ng;",
+ "\u85A2>Jie;",
+ "\u85A3>G{u3};",
+ "\u85A4>Xi{e4};",
+ "\u85A5>Sh{u3};",
+ "\u85A6>Ji{a4}n;",
+ "\u85A7>Ka{o3};",
+ "\u85A8>Hong;",
+ "\u85A9>S{a4};",
+ "\u85AA>Xin;",
+ "\u85AB>Xun;",
+ "\u85AC>Ya{o4};",
+ "\u85AE>So{u3};",
+ "\u85AF>Sh{u3};",
+ "\u85B0>Xun;",
+ "\u85B1>Du{i4};",
+ "\u85B2>P{i2}n;",
+ "\u85B3>We{i3};",
+ "\u85B4>N{e2}ng;",
+ "\u85B5>Cho{u2};",
+ "\u85B6>Ma{i2};",
+ "\u85B7>R{u2};",
+ "\u85B8>Piao;",
+ "\u85B9>Ta{i2};",
+ "\u85BA>Q{i2};",
+ "\u85BB>Za{o3};",
+ "\u85BC>Ch{e2}n;",
+ "\u85BD>Zhen;",
+ "\u85BE>{e3}r;",
+ "\u85BF>N{i3};",
+ "\u85C0>Y{i2}ng;",
+ "\u85C1>Ga{o3};",
+ "\u85C2>C{o4}ng;",
+ "\u85C3>Xiao;",
+ "\u85C4>Q{i2};",
+ "\u85C5>F{a2};",
+ "\u85C6>Ji{a3}n;",
+ "\u85C7>X{u4};",
+ "\u85C8>Kui;",
+ "\u85C9>Ji{e4};",
+ "\u85CA>Bi{a3}n;",
+ "\u85CB>Dia{o4};",
+ "\u85CC>M{i4};",
+ "\u85CD>L{a2}n;",
+ "\u85CE>J{i4}n;",
+ "\u85CF>C{a2}ng;",
+ "\u85D0>Mia{o3};",
+ "\u85D1>Qi{o2}ng;",
+ "\u85D2>Qi{e4};",
+ "\u85D3>Xi{a3}n;",
+ "\u85D5>O{u3};",
+ "\u85D6>Xi{a2}n;",
+ "\u85D7>S{u4};",
+ "\u85D8>L{uu2};",
+ "\u85D9>Y{i4};",
+ "\u85DA>X{u4};",
+ "\u85DB>Xi{e3};",
+ "\u85DC>L{i2};",
+ "\u85DD>Y{i4};",
+ "\u85DE>L{a3};",
+ "\u85DF>Le{i3};",
+ "\u85E0>Xia{o4};",
+ "\u85E1>D{i2};",
+ "\u85E2>Zh{i3};",
+ "\u85E3>Bei;",
+ "\u85E4>T{e2}ng;",
+ "\u85E5>Ya{o4};",
+ "\u85E6>M{o4};",
+ "\u85E7>Hu{a3}n;",
+ "\u85E8>Pia{o3};",
+ "\u85E9>F{a2}n;",
+ "\u85EA>So{u3};",
+ "\u85EB>T{a2}n;",
+ "\u85EC>Tui;",
+ "\u85ED>Qi{o2}ng;",
+ "\u85EE>Qia{o2};",
+ "\u85EF>We{i4};",
+ "\u85F0>Li{u2};",
+ "\u85F1>Hu{i4};",
+ "\u85F3>Ga{o3};",
+ "\u85F4>Y{u4}n;",
+ "\u85F6>L{i4};",
+ "\u85F7>Sh{u3};",
+ "\u85F8>Ch{u2};",
+ "\u85F9>A{i3};",
+ "\u85FA>L{i4}n;",
+ "\u85FB>Za{o3};",
+ "\u85FC>Xuan;",
+ "\u85FD>Ch{e4}n;",
+ "\u85FE>La{i4};",
+ "\u85FF>Hu{o4};",
+ "\u8600>Tu{o4};",
+ "\u8601>W{u4};",
+ "\u8602>Ru{i3};",
+ "\u8603>Ru{i3};",
+ "\u8604>Q{i2};",
+ "\u8605>H{e2}ng;",
+ "\u8606>L{u2};",
+ "\u8607>Su;",
+ "\u8608>Tu{i2};",
+ "\u8609>M{a2}ng;",
+ "\u860A>Y{u4}n;",
+ "\u860B>P{i2}n;",
+ "\u860C>Y{u3};",
+ "\u860D>Xun;",
+ "\u860E>J{i4};",
+ "\u860F>Jiong;",
+ "\u8610>Xian;",
+ "\u8611>M{o2};",
+ "\u8613>Su;",
+ "\u8614>Jiong;",
+ "\u8616>Ni{e4};",
+ "\u8617>B{o4};",
+ "\u8618>R{a2}ng;",
+ "\u8619>Y{i4};",
+ "\u861A>Xi{a3}n;",
+ "\u861B>Y{u2};",
+ "\u861C>J{u2};",
+ "\u861D>Li{a4}n;",
+ "\u861E>Li{a4}n;",
+ "\u861F>Y{i3}n;",
+ "\u8620>Qi{a2}ng;",
+ "\u8621>Ying;",
+ "\u8622>L{o2}ng;",
+ "\u8623>T{o4}ng;",
+ "\u8624>We{i3};",
+ "\u8625>Yu{e4};",
+ "\u8626>L{i2}ng;",
+ "\u8627>Q{u2};",
+ "\u8628>Ya{o2};",
+ "\u8629>F{a2}n;",
+ "\u862A>M{i2};",
+ "\u862B>L{a2}n;",
+ "\u862C>Kui;",
+ "\u862D>L{a2}n;",
+ "\u862E>J{i4};",
+ "\u862F>D{a4}ng;",
+ "\u8631>Le{i4};",
+ "\u8632>Le{i2};",
+ "\u8633>Hu{a3};",
+ "\u8634>Feng;",
+ "\u8635>Zh{i2};",
+ "\u8636>We{i4};",
+ "\u8637>Ku{i2};",
+ "\u8638>Zh{a4}n;",
+ "\u8639>Hua{i4};",
+ "\u863A>L{i2};",
+ "\u863B>J{i4};",
+ "\u863C>M{i2};",
+ "\u863D>Le{i3};",
+ "\u863E>Hua{i4};",
+ "\u863F>Lu{o2};",
+ "\u8640>Ji;",
+ "\u8641>Ku{i2};",
+ "\u8642>L{u4};",
+ "\u8643>Jian;",
+ "\u8646>Le{i2};",
+ "\u8647>Qu{a3}n;",
+ "\u8648>Xiao;",
+ "\u8649>Y{i4};",
+ "\u864A>Lu{a2}n;",
+ "\u864B>M{e2}n;",
+ "\u864C>Bie;",
+ "\u864D>Hu;",
+ "\u864E>H{u3};",
+ "\u864F>L{u3};",
+ "\u8650>N{uu}{e4};",
+ "\u8651>L{uu4};",
+ "\u8652>Si;",
+ "\u8653>Xiao;",
+ "\u8654>Qi{a2}n;",
+ "\u8655>Ch{u4};",
+ "\u8656>Hu;",
+ "\u8657>Xu;",
+ "\u8658>Cu{o2};",
+ "\u8659>F{u2};",
+ "\u865A>Xu;",
+ "\u865B>Xu;",
+ "\u865C>L{u3};",
+ "\u865D>H{u3};",
+ "\u865E>Y{u2};",
+ "\u865F>Ha{o4};",
+ "\u8660>Jia{o3};",
+ "\u8661>J{u4};",
+ "\u8662>Gu{o2};",
+ "\u8663>Ba{o4};",
+ "\u8664>Y{a2}n;",
+ "\u8665>Zh{a4}n;",
+ "\u8666>Zh{a4}n;",
+ "\u8667>Kui;",
+ "\u8668>Ban;",
+ "\u8669>X{i4};",
+ "\u866A>Sh{u2};",
+ "\u866B>Ch{o2}ng;",
+ "\u866C>Qi{u2};",
+ "\u866D>Diao;",
+ "\u866E>Ji;",
+ "\u866F>Qi{u2};",
+ "\u8670>Ch{e2}ng;",
+ "\u8671>Shi;",
+ "\u8673>D{i4};",
+ "\u8674>Zh{e2};",
+ "\u8675>Sh{e2};",
+ "\u8676>Yu;",
+ "\u8677>Gan;",
+ "\u8678>Z{i3};",
+ "\u8679>H{o2}ng;",
+ "\u867A>Hu{i3};",
+ "\u867B>M{e2}ng;",
+ "\u867C>G{e4};",
+ "\u867D>Sui;",
+ "\u867E>Xia;",
+ "\u867F>Cha{i4};",
+ "\u8680>Sh{i2};",
+ "\u8681>Y{i3};",
+ "\u8682>M{a3};",
+ "\u8683>Xi{a4}ng;",
+ "\u8684>Fang;",
+ "\u8685>{E4};",
+ "\u8686>Pa;",
+ "\u8687>Ch{i3};",
+ "\u8688>Qian;",
+ "\u8689>W{e2}n;",
+ "\u868A>W{e2}n;",
+ "\u868B>Ru{i4};",
+ "\u868C>B{a4}ng;",
+ "\u868D>B{i3};",
+ "\u868E>Yu{e4};",
+ "\u868F>Yu{e4};",
+ "\u8690>Jun;",
+ "\u8691>Q{i2};",
+ "\u8692>R{a2}n;",
+ "\u8693>Y{i3}n;",
+ "\u8694>Q{i2};",
+ "\u8695>Ti{a3}n;",
+ "\u8696>Yu{a2}n;",
+ "\u8697>Ju{e2};",
+ "\u8698>Hu{i2};",
+ "\u8699>Q{i2}n;",
+ "\u869A>Q{i2};",
+ "\u869B>Zh{o4}ng;",
+ "\u869C>Y{a2};",
+ "\u869D>C{i4};",
+ "\u869E>M{u4};",
+ "\u869F>W{a2}ng;",
+ "\u86A0>F{e2}n;",
+ "\u86A1>F{e2}n;",
+ "\u86A2>H{a2}ng;",
+ "\u86A3>Gong;",
+ "\u86A4>Za{o3};",
+ "\u86A5>F{u3};",
+ "\u86A6>R{a2}n;",
+ "\u86A7>Ji{e4};",
+ "\u86A8>F{u2};",
+ "\u86A9>Chi;",
+ "\u86AA>Do{u3};",
+ "\u86AB>Pia{o2};",
+ "\u86AC>Xi{a4}n;",
+ "\u86AD>N{i2};",
+ "\u86AE>T{e4};",
+ "\u86AF>Qiu;",
+ "\u86B0>Yo{u2};",
+ "\u86B1>Zh{a4};",
+ "\u86B2>P{i2}ng;",
+ "\u86B3>Ch{i2};",
+ "\u86B4>Yo{u3};",
+ "\u86B5>H{e2};",
+ "\u86B6>Han;",
+ "\u86B7>J{u4};",
+ "\u86B8>L{i4};",
+ "\u86B9>F{u4};",
+ "\u86BA>R{a2}n;",
+ "\u86BB>Zh{a2};",
+ "\u86BC>Go{u3};",
+ "\u86BD>P{i2};",
+ "\u86BE>B{o3};",
+ "\u86BF>Xi{a2}n;",
+ "\u86C0>Zh{u4};",
+ "\u86C1>Diao;",
+ "\u86C2>Bi{e3};",
+ "\u86C3>B{i3}ng;",
+ "\u86C4>Gu;",
+ "\u86C5>R{a2}n;",
+ "\u86C6>Qu;",
+ "\u86C7>Sh{e2};",
+ "\u86C8>Ti{e4};",
+ "\u86C9>L{i2}ng;",
+ "\u86CA>G{u3};",
+ "\u86CB>D{a4}n;",
+ "\u86CC>G{u3};",
+ "\u86CD>Y{i2}ng;",
+ "\u86CE>L{i4};",
+ "\u86CF>Cheng;",
+ "\u86D0>Qu;",
+ "\u86D1>Mo{u2};",
+ "\u86D2>G{e2};",
+ "\u86D3>C{i4};",
+ "\u86D4>Hu{i2};",
+ "\u86D5>Hu{i2};",
+ "\u86D6>M{a2}ng;",
+ "\u86D7>F{u4};",
+ "\u86D8>Y{a2}ng;",
+ "\u86D9>Wa;",
+ "\u86DA>Li{e4};",
+ "\u86DB>Zhu;",
+ "\u86DC>Yi;",
+ "\u86DD>Xi{a2}n;",
+ "\u86DE>Ku{o4};",
+ "\u86DF>Jiao;",
+ "\u86E0>L{i4};",
+ "\u86E1>Y{i4};",
+ "\u86E2>P{i2}ng;",
+ "\u86E3>Ji;",
+ "\u86E4>H{a2};",
+ "\u86E5>Sh{e2};",
+ "\u86E6>Y{i2};",
+ "\u86E7>W{a3}ng;",
+ "\u86E8>M{o4};",
+ "\u86E9>Qi{o2}ng;",
+ "\u86EA>Qi{e4};",
+ "\u86EB>Gu{i3};",
+ "\u86EC>G{o3}ng;",
+ "\u86ED>Zh{i4};",
+ "\u86EE>M{a2}n;",
+ "\u86F0>Zh{i2};",
+ "\u86F1>Ji{a2};",
+ "\u86F2>Ra{o2};",
+ "\u86F3>Si;",
+ "\u86F4>Q{i2};",
+ "\u86F5>Xing;",
+ "\u86F6>Li{e4};",
+ "\u86F7>Qi{u2};",
+ "\u86F8>Shao;",
+ "\u86F9>Y{o3}ng;",
+ "\u86FA>Ji{a2};",
+ "\u86FB>Shu{i4};",
+ "\u86FC>Che;",
+ "\u86FD>Ba{i4};",
+ "\u86FE>{E2};",
+ "\u86FF>H{a4}n;",
+ "\u8700>Sh{u3};",
+ "\u8701>Xu{a2}n;",
+ "\u8702>Feng;",
+ "\u8703>Sh{e4}n;",
+ "\u8704>Zh{e4}n;",
+ "\u8705>F{u3};",
+ "\u8706>Xi{a4}n;",
+ "\u8707>Zh{e2};",
+ "\u8708>W{u2};",
+ "\u8709>F{u2};",
+ "\u870A>L{i2};",
+ "\u870B>L{a2}ng;",
+ "\u870C>B{i4};",
+ "\u870D>Ch{u2};",
+ "\u870E>Yuan;",
+ "\u870F>Yo{u3};",
+ "\u8710>Ji{e2};",
+ "\u8711>D{a4}n;",
+ "\u8712>Y{a2}n;",
+ "\u8713>T{i2}ng;",
+ "\u8714>Di{a4}n;",
+ "\u8715>Shu{i4};",
+ "\u8716>Hu{i2};",
+ "\u8717>Gua;",
+ "\u8718>Zhi;",
+ "\u8719>Song;",
+ "\u871A>Fei;",
+ "\u871B>Ju;",
+ "\u871C>M{i4};",
+ "\u871D>Q{i2};",
+ "\u871E>Q{i2};",
+ "\u871F>Y{u4};",
+ "\u8720>J{u3}n;",
+ "\u8721>Zh{a4};",
+ "\u8722>M{e3}ng;",
+ "\u8723>Qiang;",
+ "\u8724>Si;",
+ "\u8725>Xi;",
+ "\u8726>L{u2}n;",
+ "\u8727>L{i4};",
+ "\u8728>Di{e2};",
+ "\u8729>Tia{o2};",
+ "\u872A>Tao;",
+ "\u872B>Kun;",
+ "\u872C>Gan;",
+ "\u872D>H{a4}n;",
+ "\u872E>Y{u4};",
+ "\u872F>B{a4}ng;",
+ "\u8730>Fe{i2};",
+ "\u8731>P{i2};",
+ "\u8732>We{i3};",
+ "\u8733>Dun;",
+ "\u8734>Y{i4};",
+ "\u8735>Yuan;",
+ "\u8736>S{u4};",
+ "\u8737>Qu{a2}n;",
+ "\u8738>Qi{a3}n;",
+ "\u8739>Ru{i4};",
+ "\u873A>N{i2};",
+ "\u873B>Qing;",
+ "\u873C>We{i4};",
+ "\u873D>Li{a3}ng;",
+ "\u873E>Gu{o3};",
+ "\u873F>Wan;",
+ "\u8740>Dong;",
+ "\u8741>{E4};",
+ "\u8742>B{a3}n;",
+ "\u8743>D{i4};",
+ "\u8744>W{a3}ng;",
+ "\u8745>C{a2}n;",
+ "\u8746>Y{a3}ng;",
+ "\u8747>Y{i2}ng;",
+ "\u8748>Guo;",
+ "\u8749>Ch{a2}n;",
+ "\u874B>L{a4};",
+ "\u874C>Ke;",
+ "\u874D>J{i2};",
+ "\u874E>H{e2};",
+ "\u874F>T{i2}ng;",
+ "\u8750>Ma{i4};",
+ "\u8751>Xu;",
+ "\u8752>Mi{a2}n;",
+ "\u8753>Y{u2};",
+ "\u8754>Jie;",
+ "\u8755>Sh{i2};",
+ "\u8756>Xuan;",
+ "\u8757>Hu{a2}ng;",
+ "\u8758>Y{a3}n;",
+ "\u8759>Bian;",
+ "\u875A>Ro{u2};",
+ "\u875B>Wei;",
+ "\u875C>F{u4};",
+ "\u875D>Yu{a2}n;",
+ "\u875E>Me{i4};",
+ "\u875F>We{i4};",
+ "\u8760>F{u2};",
+ "\u8761>Ru{a3}n;",
+ "\u8762>Xi{e2};",
+ "\u8763>Yo{u2};",
+ "\u8764>Qi{u2};",
+ "\u8765>Ma{o2};",
+ "\u8766>Xia;",
+ "\u8767>Ying;",
+ "\u8768>Shi;",
+ "\u8769>Ch{o2}ng;",
+ "\u876A>Tang;",
+ "\u876B>Zhu;",
+ "\u876C>Zong;",
+ "\u876D>T{i2};",
+ "\u876E>F{u4};",
+ "\u876F>Yu{a2}n;",
+ "\u8770>Hu{i3};",
+ "\u8771>M{e2}ng;",
+ "\u8772>L{a4};",
+ "\u8773>D{u2};",
+ "\u8774>H{u2};",
+ "\u8775>Qiu;",
+ "\u8776>Di{e2};",
+ "\u8777>L{i4};",
+ "\u8778>Gua;",
+ "\u8779>Yun;",
+ "\u877A>J{u3};",
+ "\u877B>N{a3}n;",
+ "\u877C>Lo{u2};",
+ "\u877D>Q{u3}n;",
+ "\u877E>R{o2}ng;",
+ "\u877F>Y{i2}ng;",
+ "\u8780>Jiang;",
+ "\u8782>L{a2}ng;",
+ "\u8783>P{a2}ng;",
+ "\u8784>Si;",
+ "\u8785>Xi;",
+ "\u8786>C{i4};",
+ "\u8787>Xi;",
+ "\u8788>Yu{a2}n;",
+ "\u8789>Weng;",
+ "\u878A>Li{a2}n;",
+ "\u878B>Sou;",
+ "\u878C>Ban;",
+ "\u878D>R{o2}ng;",
+ "\u878E>R{o2}ng;",
+ "\u878F>J{i2};",
+ "\u8790>Wu;",
+ "\u8791>Qi{u4};",
+ "\u8792>H{a4}n;",
+ "\u8793>Q{i2}n;",
+ "\u8794>Y{i2};",
+ "\u8795>Bi;",
+ "\u8796>Hu{a2};",
+ "\u8797>T{a2}ng;",
+ "\u8798>Y{i3};",
+ "\u8799>D{u4};",
+ "\u879A>Na{i4};",
+ "\u879B>H{e2};",
+ "\u879C>H{u2};",
+ "\u879D>Hu{i4};",
+ "\u879E>M{a3};",
+ "\u879F>M{i2}ng;",
+ "\u87A0>Y{i4};",
+ "\u87A1>W{e2}n;",
+ "\u87A2>Y{i2}ng;",
+ "\u87A3>T{e2}ng;",
+ "\u87A4>Y{u3};",
+ "\u87A5>Cang;",
+ "\u87A8>M{a3}n;",
+ "\u87AA>Shang;",
+ "\u87AB>Zhe;",
+ "\u87AC>Ca{o2};",
+ "\u87AD>Chi;",
+ "\u87AE>D{i4};",
+ "\u87AF>A{o2};",
+ "\u87B0>L{u4};",
+ "\u87B1>We{i4};",
+ "\u87B2>Zh{i4};",
+ "\u87B3>T{a2}ng;",
+ "\u87B4>Ch{e2}n;",
+ "\u87B5>Piao;",
+ "\u87B6>Q{u2};",
+ "\u87B7>P{i2};",
+ "\u87B8>Y{u2};",
+ "\u87B9>Ji{a4}n;",
+ "\u87BA>Lu{o2};",
+ "\u87BB>Lo{u2};",
+ "\u87BC>Q{i3}n;",
+ "\u87BD>Zhong;",
+ "\u87BE>Y{i3}n;",
+ "\u87BF>Jiang;",
+ "\u87C0>Shua{i4};",
+ "\u87C1>W{e2}n;",
+ "\u87C2>Jiao;",
+ "\u87C3>W{a4}n;",
+ "\u87C4>Zh{i2};",
+ "\u87C5>Zh{e4};",
+ "\u87C6>M{a2};",
+ "\u87C7>M{a2};",
+ "\u87C8>Guo;",
+ "\u87C9>Li{u2};",
+ "\u87CA>Ma{o2};",
+ "\u87CB>Xi;",
+ "\u87CC>Cong;",
+ "\u87CD>L{i2};",
+ "\u87CE>M{a3}n;",
+ "\u87CF>Xiao;",
+ "\u87D1>Zhang;",
+ "\u87D2>M{a3}ng;",
+ "\u87D3>Xi{a4}ng;",
+ "\u87D4>M{o4};",
+ "\u87D5>Zui;",
+ "\u87D6>Si;",
+ "\u87D7>Qiu;",
+ "\u87D8>T{e4};",
+ "\u87D9>Zh{i2};",
+ "\u87DA>P{e2}ng;",
+ "\u87DB>P{e2}ng;",
+ "\u87DC>Jia{o3};",
+ "\u87DD>Q{u2};",
+ "\u87DE>Bi{e2};",
+ "\u87DF>Lia{o2};",
+ "\u87E0>P{a2}n;",
+ "\u87E1>Gu{i3};",
+ "\u87E2>X{i3};",
+ "\u87E3>J{i3};",
+ "\u87E4>Zhuan;",
+ "\u87E5>Hu{a2}ng;",
+ "\u87E6>Fe{i4};",
+ "\u87E7>La{o2};",
+ "\u87E8>Ju{e2};",
+ "\u87E9>Ju{e2};",
+ "\u87EA>Hu{i4};",
+ "\u87EB>Y{i2}n;",
+ "\u87EC>Ch{a2}n;",
+ "\u87ED>Jiao;",
+ "\u87EE>Sh{a4}n;",
+ "\u87EF>Ra{o2};",
+ "\u87F0>Xiao;",
+ "\u87F1>Mo{u2};",
+ "\u87F2>Ch{o2}ng;",
+ "\u87F3>X{u2}n;",
+ "\u87F4>Si;",
+ "\u87F6>Cheng;",
+ "\u87F7>Dang;",
+ "\u87F8>L{i3};",
+ "\u87F9>Xi{e4};",
+ "\u87FA>Sh{a4}n;",
+ "\u87FB>Y{i3};",
+ "\u87FC>J{i3}ng;",
+ "\u87FD>D{a2};",
+ "\u87FE>Ch{a2}n;",
+ "\u87FF>Q{i4};",
+ "\u8800>Ci;",
+ "\u8801>Xi{a4}ng;",
+ "\u8802>Sh{e4};",
+ "\u8803>Lu{o3};",
+ "\u8804>Q{i2}n;",
+ "\u8805>Y{i2}ng;",
+ "\u8806>Cha{i4};",
+ "\u8807>L{i4};",
+ "\u8808>Z{e2};",
+ "\u8809>Xuan;",
+ "\u880A>Li{a2}n;",
+ "\u880B>Zh{u2};",
+ "\u880C>Z{e2};",
+ "\u880D>Xie;",
+ "\u880E>M{a3}ng;",
+ "\u880F>Xi{e4};",
+ "\u8810>Q{i2};",
+ "\u8811>R{o2}ng;",
+ "\u8812>Ji{a3}n;",
+ "\u8813>M{e3}ng;",
+ "\u8814>Ha{o2};",
+ "\u8815>Ru{a3}n;",
+ "\u8816>Hu{o4};",
+ "\u8817>Zhu{o2};",
+ "\u8818>Ji{e2};",
+ "\u8819>Bin;",
+ "\u881A>H{e4};",
+ "\u881B>Mi{e4};",
+ "\u881C>F{a2}n;",
+ "\u881D>Le{i2};",
+ "\u881E>Ji{e2};",
+ "\u881F>L{a4};",
+ "\u8820>M{i4};",
+ "\u8821>L{i3};",
+ "\u8822>Ch{u3}n;",
+ "\u8823>L{i4};",
+ "\u8824>Qiu;",
+ "\u8825>Ni{e4};",
+ "\u8826>L{u2};",
+ "\u8827>D{u4};",
+ "\u8828>Xiao;",
+ "\u8829>Zhu;",
+ "\u882A>L{o2}ng;",
+ "\u882B>L{i4};",
+ "\u882C>L{o2}ng;",
+ "\u882D>Feng;",
+ "\u882E>Ye;",
+ "\u882F>B{e4}ng;",
+ "\u8830>Sh{a4}ng;",
+ "\u8831>G{u3};",
+ "\u8832>Juan;",
+ "\u8833>Ying;",
+ "\u8835>Xi;",
+ "\u8836>C{a2}n;",
+ "\u8837>Q{u2};",
+ "\u8838>Qu{a2}n;",
+ "\u8839>D{u4};",
+ "\u883A>C{a2}n;",
+ "\u883B>M{a2}n;",
+ "\u883C>Ju{e2};",
+ "\u883D>Ji{e2};",
+ "\u883E>Zh{u2};",
+ "\u883F>Zh{a2};",
+ "\u8840>Xi{e3};",
+ "\u8841>Huang;",
+ "\u8842>Ni{u4};",
+ "\u8843>Pei;",
+ "\u8844>N{uu4};",
+ "\u8845>X{i4}n;",
+ "\u8846>Zh{o4}ng;",
+ "\u8847>M{o4};",
+ "\u8848>{E4}r;",
+ "\u8849>K{e4};",
+ "\u884A>Mi{e4};",
+ "\u884B>X{i4};",
+ "\u884C>X{i2}ng;",
+ "\u884D>Y{a3}n;",
+ "\u884E>K{a4}n;",
+ "\u884F>Yu{a4}n;",
+ "\u8851>L{i2}ng;",
+ "\u8852>Xu{a4}n;",
+ "\u8853>Sh{u4};",
+ "\u8854>Xi{a2}n;",
+ "\u8855>T{o4}ng;",
+ "\u8856>L{o4}ng;",
+ "\u8857>Jie;",
+ "\u8858>Xi{a2}n;",
+ "\u8859>Y{a2};",
+ "\u885A>H{u2};",
+ "\u885B>We{i4};",
+ "\u885C>Da{o4};",
+ "\u885D>Chong;",
+ "\u885E>We{i4};",
+ "\u885F>Da{o4};",
+ "\u8860>Zhun;",
+ "\u8861>H{e2}ng;",
+ "\u8862>Q{u2};",
+ "\u8863>Yi;",
+ "\u8864>Yi1zi4p{a2}ng;",
+ "\u8865>B{u3};",
+ "\u8866>G{a3}n;",
+ "\u8867>Y{u2};",
+ "\u8868>Bia{o3};",
+ "\u8869>Ch{a4};",
+ "\u886A>Y{i3};",
+ "\u886B>Shan;",
+ "\u886C>Ch{e4}n;",
+ "\u886D>Fu;",
+ "\u886E>G{u3}n;",
+ "\u886F>Fen;",
+ "\u8870>Shuai;",
+ "\u8871>Ji{e2};",
+ "\u8872>N{a4};",
+ "\u8873>Zhong;",
+ "\u8874>D{a3}n;",
+ "\u8875>R{i4};",
+ "\u8876>Zh{o4}ng;",
+ "\u8877>Zhong;",
+ "\u8878>Xi{e4};",
+ "\u8879>Q{i2};",
+ "\u887A>Xi{e2};",
+ "\u887B>R{a2}n;",
+ "\u887C>Zhi;",
+ "\u887D>R{e4}n;",
+ "\u887E>Qin;",
+ "\u887F>Jin;",
+ "\u8880>Jun;",
+ "\u8881>Yu{a2}n;",
+ "\u8882>Me{i4};",
+ "\u8883>Cha{i4};",
+ "\u8884>A{o3};",
+ "\u8885>Nia{o3};",
+ "\u8886>Hui;",
+ "\u8887>R{a2}n;",
+ "\u8888>Jia;",
+ "\u8889>Tu{o2};",
+ "\u888A>L{i3}ng;",
+ "\u888B>Da{i4};",
+ "\u888C>Ba{o4};",
+ "\u888D>Pa{o2};",
+ "\u888E>Ya{o4};",
+ "\u888F>Zu{o4};",
+ "\u8890>B{i4};",
+ "\u8891>Sha{o4};",
+ "\u8892>T{a3}n;",
+ "\u8893>J{u3};",
+ "\u8894>H{e4};",
+ "\u8895>Sh{u4};",
+ "\u8896>Xi{u4};",
+ "\u8897>Zh{e3}n;",
+ "\u8898>Y{i2};",
+ "\u8899>P{a4};",
+ "\u889A>Bo;",
+ "\u889B>Di;",
+ "\u889C>W{a4};",
+ "\u889D>F{u4};",
+ "\u889E>G{u3}n;",
+ "\u889F>Zh{i4};",
+ "\u88A0>Zh{i4};",
+ "\u88A1>R{a2}n;",
+ "\u88A2>P{a4}n;",
+ "\u88A3>Y{i4};",
+ "\u88A4>Ma{o4};",
+ "\u88A5>Tuo;",
+ "\u88A6>N{a4};",
+ "\u88A7>Kou;",
+ "\u88A8>Xi{a4}n;",
+ "\u88A9>Chan;",
+ "\u88AA>Qu;",
+ "\u88AB>Be{i4};",
+ "\u88AC>G{u3}n;",
+ "\u88AD>X{i2};",
+ "\u88AF>B{o2};",
+ "\u88B1>F{u2};",
+ "\u88B2>Y{i2};",
+ "\u88B3>Ch{i3};",
+ "\u88B4>K{u4};",
+ "\u88B5>R{e4}n;",
+ "\u88B6>Ji{a4}ng;",
+ "\u88B7>Ji{a2};",
+ "\u88B8>C{u2}n;",
+ "\u88B9>M{o4};",
+ "\u88BA>Ji{e2};",
+ "\u88BB>{E2}r;",
+ "\u88BC>Lu{o4};",
+ "\u88BD>R{u2};",
+ "\u88BE>Zhu;",
+ "\u88BF>Gui;",
+ "\u88C0>Yin;",
+ "\u88C1>Ca{i2};",
+ "\u88C2>Li{e4};",
+ "\u88C5>Zhuang;",
+ "\u88C6>Dang;",
+ "\u88C8>Kun;",
+ "\u88C9>K{e4}n;",
+ "\u88CA>Nia{o3};",
+ "\u88CB>Sh{u4};",
+ "\u88CC>Ji{a2};",
+ "\u88CD>K{u3}n;",
+ "\u88CE>Ch{e2}ng;",
+ "\u88CF>L{i3};",
+ "\u88D0>Juan;",
+ "\u88D1>Shen;",
+ "\u88D2>Po{u2};",
+ "\u88D3>G{e2};",
+ "\u88D4>Y{i4};",
+ "\u88D5>Y{u4};",
+ "\u88D6>Zh{e3}n;",
+ "\u88D7>Li{u2};",
+ "\u88D8>Qi{u2};",
+ "\u88D9>Q{u2}n;",
+ "\u88DA>J{i4};",
+ "\u88DB>Y{i4};",
+ "\u88DC>B{u3};",
+ "\u88DD>Zhuang;",
+ "\u88DE>Shu{i4};",
+ "\u88DF>Sha;",
+ "\u88E0>Q{u2}n;",
+ "\u88E1>L{i3};",
+ "\u88E2>Li{a2}n;",
+ "\u88E3>Li{a4}n;",
+ "\u88E4>K{u4};",
+ "\u88E5>Ji{a3}n;",
+ "\u88E6>Fo{u2};",
+ "\u88E7>Chan;",
+ "\u88E8>B{i4};",
+ "\u88E9>Gun;",
+ "\u88EA>Ta{o2};",
+ "\u88EB>Yu{a4}n;",
+ "\u88EC>L{i2}ng;",
+ "\u88ED>Ch{i3};",
+ "\u88EE>Chang;",
+ "\u88EF>Cho{u2};",
+ "\u88F0>Du{o2};",
+ "\u88F1>Bia{o3};",
+ "\u88F2>Li{a3}ng;",
+ "\u88F3>Ch{a2}ng;",
+ "\u88F4>Pe{i2};",
+ "\u88F5>Pe{i2};",
+ "\u88F6>Fei;",
+ "\u88F7>Yuan;",
+ "\u88F8>Lu{o3};",
+ "\u88F9>Gu{o3};",
+ "\u88FA>Y{a3}n;",
+ "\u88FB>D{u3};",
+ "\u88FC>X{i2};",
+ "\u88FD>Zh{i4};",
+ "\u88FE>Ju;",
+ "\u88FF>Q{i3};",
+ "\u8900>J{i4};",
+ "\u8901>Zh{i2};",
+ "\u8902>Gu{a4};",
+ "\u8903>K{e4}n;",
+ "\u8905>T{i4};",
+ "\u8906>T{i2};",
+ "\u8907>F{u4};",
+ "\u8908>Ch{o2}ng;",
+ "\u8909>Xie;",
+ "\u890A>Bi{a3}n;",
+ "\u890B>Di{e2};",
+ "\u890C>Kun;",
+ "\u890D>Duan;",
+ "\u890E>Xi{u4};",
+ "\u890F>Xi{u4};",
+ "\u8910>H{e2};",
+ "\u8911>Yu{a4}n;",
+ "\u8912>Bao;",
+ "\u8913>Ba{o3};",
+ "\u8914>F{u4};",
+ "\u8915>Y{u2};",
+ "\u8916>Tu{a4}n;",
+ "\u8917>Y{a3}n;",
+ "\u8918>Hui;",
+ "\u8919>Be{i4};",
+ "\u891A>Ch{u3};",
+ "\u891B>L{uu3};",
+ "\u891E>Y{u3}n;",
+ "\u891F>D{a2};",
+ "\u8920>Gou;",
+ "\u8921>Da;",
+ "\u8922>Hua{i2};",
+ "\u8923>R{o2}ng;",
+ "\u8924>Yu{a4}n;",
+ "\u8925>R{u4};",
+ "\u8926>Na{i4};",
+ "\u8927>Ji{o3}ng;",
+ "\u8928>Su{o3};",
+ "\u8929>Ban;",
+ "\u892A>T{u4}n;",
+ "\u892B>Ch{i3};",
+ "\u892C>S{a3}ng;",
+ "\u892D>Nia{o3};",
+ "\u892E>Ying;",
+ "\u892F>Ji{e4};",
+ "\u8930>Qian;",
+ "\u8931>Hua{i2};",
+ "\u8932>K{u4};",
+ "\u8933>Li{a2}n;",
+ "\u8934>Ba{o3};",
+ "\u8935>L{i2};",
+ "\u8936>Zh{e2};",
+ "\u8937>Shi;",
+ "\u8938>L{uu3};",
+ "\u8939>Y{i4};",
+ "\u893A>Di{e2};",
+ "\u893B>Xi{e4};",
+ "\u893C>Xian;",
+ "\u893D>We{i4};",
+ "\u893E>Bia{o3};",
+ "\u893F>Ca{o2};",
+ "\u8940>Ji;",
+ "\u8941>Ji{a3}ng;",
+ "\u8942>Sen;",
+ "\u8943>Bao;",
+ "\u8944>Xiang;",
+ "\u8946>P{u2};",
+ "\u8947>Ji{a3}n;",
+ "\u8948>Zhu{a4}n;",
+ "\u8949>Ji{a4}n;",
+ "\u894A>Zu{i4};",
+ "\u894B>J{i2};",
+ "\u894C>Dan;",
+ "\u894D>Z{a2};",
+ "\u894E>F{a2}n;",
+ "\u894F>B{o2};",
+ "\u8950>Xi{a4}ng;",
+ "\u8951>X{i2}n;",
+ "\u8952>Bi{e2};",
+ "\u8953>Ra{o2};",
+ "\u8954>M{a3}n;",
+ "\u8955>L{a2}n;",
+ "\u8956>A{o3};",
+ "\u8957>Du{o2};",
+ "\u8958>Gu{i4};",
+ "\u8959>Ca{o4};",
+ "\u895A>Su{i4};",
+ "\u895B>N{o2}ng;",
+ "\u895C>Chan;",
+ "\u895D>Li{a4}n;",
+ "\u895E>B{i4};",
+ "\u895F>Jin;",
+ "\u8960>Dang;",
+ "\u8961>Sh{u2};",
+ "\u8962>T{a3}n;",
+ "\u8963>B{i4};",
+ "\u8964>L{a2}n;",
+ "\u8965>P{u2};",
+ "\u8966>R{u2};",
+ "\u8967>Zh{i3};",
+ "\u8969>Sh{u3};",
+ "\u896A>W{a4};",
+ "\u896B>Sh{i4};",
+ "\u896C>Ba{i3};",
+ "\u896D>Xi{e2};",
+ "\u896E>B{o2};",
+ "\u896F>Ch{e4}n;",
+ "\u8970>La{i4};",
+ "\u8971>L{o2}ng;",
+ "\u8972>X{i2};",
+ "\u8973>Xian;",
+ "\u8974>L{a2}n;",
+ "\u8975>Zh{e2};",
+ "\u8976>Da{i4};",
+ "\u8978>Z{a4}n;",
+ "\u8979>Shi;",
+ "\u897A>Ji{a3}n;",
+ "\u897B>P{a4}n;",
+ "\u897C>Y{i4};",
+ "\u897E>Y{a4};",
+ "\u897F>Xi;",
+ "\u8980>Xi;",
+ "\u8981>Ya{o4};",
+ "\u8982>F{e3}ng;",
+ "\u8983>T{a2}n;",
+ "\u8985>Bia{o4};",
+ "\u8986>F{u4};",
+ "\u8987>B{a4};",
+ "\u8988>H{e2};",
+ "\u8989>Ji;",
+ "\u898A>Ji;",
+ "\u898B>Ji{a4}n;",
+ "\u898C>Guan;",
+ "\u898D>Bi{a4}n;",
+ "\u898E>Y{a4}n;",
+ "\u898F>Gui;",
+ "\u8990>Ju{e2};",
+ "\u8991>Pi{a3}n;",
+ "\u8992>Ma{o2};",
+ "\u8993>M{i4};",
+ "\u8994>M{i4};",
+ "\u8995>Mi{e4};",
+ "\u8996>Sh{i4};",
+ "\u8997>Si;",
+ "\u8998>Zhan;",
+ "\u8999>Lu{o2};",
+ "\u899A>Ju{e2};",
+ "\u899B>M{i4};",
+ "\u899C>Tia{o4};",
+ "\u899D>Li{a2}n;",
+ "\u899E>Ya{o4};",
+ "\u899F>Zh{i4};",
+ "\u89A0>Jun;",
+ "\u89A1>X{i2};",
+ "\u89A2>Sh{a3}n;",
+ "\u89A3>Wei;",
+ "\u89A4>X{i4};",
+ "\u89A5>Ti{a3}n;",
+ "\u89A6>Y{u2};",
+ "\u89A7>L{a3}n;",
+ "\u89A8>{E4};",
+ "\u89A9>D{u3};",
+ "\u89AA>Qin;",
+ "\u89AB>P{a3}ng;",
+ "\u89AC>J{i4};",
+ "\u89AD>M{i2}ng;",
+ "\u89AE>Y{i2}ng;",
+ "\u89AF>Go{u4};",
+ "\u89B0>Q{u4};",
+ "\u89B1>Zh{a4}n;",
+ "\u89B2>J{i3}n;",
+ "\u89B3>Guan;",
+ "\u89B4>Deng;",
+ "\u89B5>Ji{a4}n;",
+ "\u89B6>Lu{o2};",
+ "\u89B7>Q{u4};",
+ "\u89B8>Ji{a4}n;",
+ "\u89B9>We{i2};",
+ "\u89BA>Ju{e2};",
+ "\u89BB>Q{u4};",
+ "\u89BC>Lu{o2};",
+ "\u89BD>L{a3}n;",
+ "\u89BE>Sh{e3}n;",
+ "\u89BF>D{i2};",
+ "\u89C0>Guan;",
+ "\u89C1>Ji{a4}n;",
+ "\u89C2>Guan;",
+ "\u89C3>Y{a4}n;",
+ "\u89C4>Gui;",
+ "\u89C5>M{i4};",
+ "\u89C6>Sh{i4};",
+ "\u89C7>Zhan;",
+ "\u89C8>L{a3}n;",
+ "\u89C9>Ju{e2};",
+ "\u89CA>J{i4};",
+ "\u89CB>X{i2};",
+ "\u89CC>D{i2};",
+ "\u89CD>Ti{a3}n;",
+ "\u89CE>Y{u2};",
+ "\u89CF>Go{u4};",
+ "\u89D0>J{i3}n;",
+ "\u89D1>Q{u4};",
+ "\u89D2>Jia{o3};",
+ "\u89D3>Jiu;",
+ "\u89D4>Jin;",
+ "\u89D5>Cu;",
+ "\u89D6>Ju{e2};",
+ "\u89D7>Zh{i4};",
+ "\u89D8>Cha{o4};",
+ "\u89D9>J{i2};",
+ "\u89DA>Gu;",
+ "\u89DB>D{a4}n;",
+ "\u89DC>Zu{i3};",
+ "\u89DD>D{i3};",
+ "\u89DE>Shang;",
+ "\u89DF>Hu{a4};",
+ "\u89E0>Qu{a2}n;",
+ "\u89E1>G{e2};",
+ "\u89E2>Ch{i4};",
+ "\u89E3>Ji{e3};",
+ "\u89E4>Gu{i3};",
+ "\u89E5>Gong;",
+ "\u89E6>H{o2}ng;",
+ "\u89E7>Ji{e3};",
+ "\u89E8>H{u4}n;",
+ "\u89E9>Qi{u2};",
+ "\u89EA>Xing;",
+ "\u89EB>S{u4};",
+ "\u89EC>N{i2};",
+ "\u89ED>Ji;",
+ "\u89EE>L{u4};",
+ "\u89EF>Zh{i4};",
+ "\u89F0>Zha;",
+ "\u89F1>B{i4};",
+ "\u89F2>Xing;",
+ "\u89F3>H{u2};",
+ "\u89F4>Shang;",
+ "\u89F5>Gong;",
+ "\u89F6>Zh{i4};",
+ "\u89F7>Xu{e2};",
+ "\u89F8>Ch{u4};",
+ "\u89F9>Xi;",
+ "\u89FA>Y{i2};",
+ "\u89FB>L{u4};",
+ "\u89FC>Ju{e2};",
+ "\u89FD>Xi;",
+ "\u89FE>Y{a4}n;",
+ "\u89FF>Xi;",
+ "\u8A00>Y{a2}n;",
+ "\u8A01>Yan2zi4p{a2}ng;",
+ "\u8A02>D{i4}ng;",
+ "\u8A03>F{u4};",
+ "\u8A04>Qi{u2};",
+ "\u8A05>Qi{u2};",
+ "\u8A06>Jia{o4};",
+ "\u8A07>Hong;",
+ "\u8A08>J{i4};",
+ "\u8A09>F{a4}n;",
+ "\u8A0A>X{u4}n;",
+ "\u8A0B>Dia{o4};",
+ "\u8A0C>H{o2}ng;",
+ "\u8A0D>Ch{a4};",
+ "\u8A0E>Ta{o3};",
+ "\u8A0F>Xu;",
+ "\u8A10>Ji{e2};",
+ "\u8A11>Y{i2};",
+ "\u8A12>R{e4}n;",
+ "\u8A13>X{u4}n;",
+ "\u8A14>Y{i2}n;",
+ "\u8A15>Sh{a4}n;",
+ "\u8A16>Q{i4};",
+ "\u8A17>Tuo;",
+ "\u8A18>J{i4};",
+ "\u8A19>X{u4}n;",
+ "\u8A1A>Y{i2}n;",
+ "\u8A1B>{E2};",
+ "\u8A1C>Fen;",
+ "\u8A1D>Y{a4};",
+ "\u8A1E>Yao;",
+ "\u8A1F>S{o4}ng;",
+ "\u8A20>Sh{e3}n;",
+ "\u8A21>Y{i2}n;",
+ "\u8A22>Xin;",
+ "\u8A23>Ju{e2};",
+ "\u8A24>Xia{o2};",
+ "\u8A25>N{e4};",
+ "\u8A26>Ch{e2}n;",
+ "\u8A27>Yo{u2};",
+ "\u8A28>Zh{i3};",
+ "\u8A29>Xiong;",
+ "\u8A2A>F{a3}ng;",
+ "\u8A2B>X{i4}n;",
+ "\u8A2C>Chao;",
+ "\u8A2D>Sh{e4};",
+ "\u8A2E>Xian;",
+ "\u8A2F>Sh{a3};",
+ "\u8A30>T{u2}n;",
+ "\u8A31>X{u3};",
+ "\u8A32>Y{i4};",
+ "\u8A33>Y{i4};",
+ "\u8A34>S{u4};",
+ "\u8A35>Chi;",
+ "\u8A36>He;",
+ "\u8A37>Shen;",
+ "\u8A38>H{e2};",
+ "\u8A39>X{u4};",
+ "\u8A3A>Zh{e3}n;",
+ "\u8A3B>Zh{u4};",
+ "\u8A3C>Zh{e4}ng;",
+ "\u8A3D>Go{u4};",
+ "\u8A3E>Z{i3};",
+ "\u8A3F>Z{i3};",
+ "\u8A40>Zhan;",
+ "\u8A41>G{u3};",
+ "\u8A42>F{u4};",
+ "\u8A43>Qu{a3}n;",
+ "\u8A44>Di{e2};",
+ "\u8A45>L{i2}ng;",
+ "\u8A46>D{i3};",
+ "\u8A47>Y{a4}ng;",
+ "\u8A48>L{i4};",
+ "\u8A49>Na{o2};",
+ "\u8A4A>P{a4}n;",
+ "\u8A4B>Zho{u4};",
+ "\u8A4C>G{a4}n;",
+ "\u8A4D>Y{i4};",
+ "\u8A4E>J{u4};",
+ "\u8A4F>A{o4};",
+ "\u8A50>Zh{a4};",
+ "\u8A51>Tu{o2};",
+ "\u8A52>Y{i2};",
+ "\u8A53>Q{u3};",
+ "\u8A54>Zha{o4};",
+ "\u8A55>P{i2}ng;",
+ "\u8A56>B{i4};",
+ "\u8A57>Xi{o4}ng;",
+ "\u8A58>Q{u4};",
+ "\u8A59>B{a2};",
+ "\u8A5A>D{a2};",
+ "\u8A5B>Z{u3};",
+ "\u8A5C>Tao;",
+ "\u8A5D>Zh{u3};",
+ "\u8A5E>C{i2};",
+ "\u8A5F>Zh{e2};",
+ "\u8A60>Y{o3}ng;",
+ "\u8A61>X{u3};",
+ "\u8A62>X{u2}n;",
+ "\u8A63>Y{i4};",
+ "\u8A64>Hu{a3}ng;",
+ "\u8A65>H{e2};",
+ "\u8A66>Sh{i4};",
+ "\u8A67>Ch{a2};",
+ "\u8A68>Jiao;",
+ "\u8A69>Shi;",
+ "\u8A6A>H{e3}n;",
+ "\u8A6B>Ch{a4};",
+ "\u8A6C>Go{u4};",
+ "\u8A6D>Gu{i3};",
+ "\u8A6E>Qu{a2}n;",
+ "\u8A6F>Hu{i4};",
+ "\u8A70>Ji{e2};",
+ "\u8A71>Hu{a4};",
+ "\u8A72>Gai;",
+ "\u8A73>Xi{a2}ng;",
+ "\u8A74>Wei;",
+ "\u8A75>Shen;",
+ "\u8A76>Cho{u2};",
+ "\u8A77>T{o2}ng;",
+ "\u8A78>M{i2};",
+ "\u8A79>Zhan;",
+ "\u8A7A>M{i4}ng;",
+ "\u8A7B>{E4};",
+ "\u8A7C>Hui;",
+ "\u8A7D>Y{a2}n;",
+ "\u8A7E>Xiong;",
+ "\u8A7F>Gu{a4};",
+ "\u8A80>{E4}r;",
+ "\u8A81>B{e3}ng;",
+ "\u8A82>Tia{o3};",
+ "\u8A83>Ch{i3};",
+ "\u8A84>Le{i3};",
+ "\u8A85>Zhu;",
+ "\u8A86>Kuang;",
+ "\u8A87>Kua;",
+ "\u8A88>W{u2};",
+ "\u8A89>Y{u4};",
+ "\u8A8A>T{e2}ng;",
+ "\u8A8B>J{i4};",
+ "\u8A8C>Zh{i4};",
+ "\u8A8D>R{e4}n;",
+ "\u8A8E>S{u4};",
+ "\u8A8F>L{a3}ng;",
+ "\u8A90>{E2};",
+ "\u8A91>Ku{a2}ng;",
+ "\u8A92>{E4};",
+ "\u8A93>Sh{i4};",
+ "\u8A94>T{i3}ng;",
+ "\u8A95>D{a4}n;",
+ "\u8A96>B{o2};",
+ "\u8A97>Ch{a2}n;",
+ "\u8A98>Yo{u4};",
+ "\u8A99>H{e2}ng;",
+ "\u8A9A>Qia{o4};",
+ "\u8A9B>Qin;",
+ "\u8A9C>Shu{a4};",
+ "\u8A9D>An;",
+ "\u8A9E>Y{u3};",
+ "\u8A9F>Xia{o4};",
+ "\u8AA0>Ch{e2}ng;",
+ "\u8AA1>Ji{e4};",
+ "\u8AA2>Xi{a4}n;",
+ "\u8AA3>W{u2};",
+ "\u8AA4>W{u4};",
+ "\u8AA5>Ga{o4};",
+ "\u8AA6>S{o4}ng;",
+ "\u8AA7>P{u3};",
+ "\u8AA8>Hu{i4};",
+ "\u8AA9>J{i4}ng;",
+ "\u8AAA>Shuo;",
+ "\u8AAB>Zh{e4}n;",
+ "\u8AAC>Shuo;",
+ "\u8AAD>D{u2};",
+ "\u8AAF>Ch{a4}ng;",
+ "\u8AB0>Shu{i2};",
+ "\u8AB1>Ji{e2};",
+ "\u8AB2>K{e4};",
+ "\u8AB3>Qu;",
+ "\u8AB4>C{o2}ng;",
+ "\u8AB5>Xia{o2};",
+ "\u8AB6>Su{i4};",
+ "\u8AB7>W{a3}ng;",
+ "\u8AB8>Xu{a2}n;",
+ "\u8AB9>Fe{i3};",
+ "\u8ABA>Chi;",
+ "\u8ABB>T{a4};",
+ "\u8ABC>Y{i2};",
+ "\u8ABD>N{a2};",
+ "\u8ABE>Y{i2}n;",
+ "\u8ABF>Dia{o4};",
+ "\u8AC0>P{i3};",
+ "\u8AC1>Chu{o4};",
+ "\u8AC2>Ch{a3}n;",
+ "\u8AC3>Chen;",
+ "\u8AC4>Zhun;",
+ "\u8AC5>Ji;",
+ "\u8AC6>Qi;",
+ "\u8AC7>T{a2}n;",
+ "\u8AC8>Zhu{i4};",
+ "\u8AC9>We{i3};",
+ "\u8ACA>J{u2};",
+ "\u8ACB>Q{i3}ng;",
+ "\u8ACC>Ji{a4}n;",
+ "\u8ACD>Zheng;",
+ "\u8ACE>Z{e2};",
+ "\u8ACF>Zou;",
+ "\u8AD0>Qian;",
+ "\u8AD1>Zhu{o2};",
+ "\u8AD2>Li{a4}ng;",
+ "\u8AD3>Ji{a4}n;",
+ "\u8AD4>Zh{u4};",
+ "\u8AD5>Ha{o2};",
+ "\u8AD6>L{u4}n;",
+ "\u8AD7>Sh{e3}n;",
+ "\u8AD8>Bia{o3};",
+ "\u8AD9>Hua{i4};",
+ "\u8ADA>Pi{a2}n;",
+ "\u8ADB>Y{u2};",
+ "\u8ADC>Di{e2};",
+ "\u8ADD>X{u3};",
+ "\u8ADE>Pi{a2}n;",
+ "\u8ADF>Sh{i4};",
+ "\u8AE0>Xuan;",
+ "\u8AE1>Sh{i4};",
+ "\u8AE2>H{u4}n;",
+ "\u8AE3>Hu{a4};",
+ "\u8AE4>{E4};",
+ "\u8AE5>Zh{o4}ng;",
+ "\u8AE6>D{i4};",
+ "\u8AE7>Xi{e2};",
+ "\u8AE8>F{u2};",
+ "\u8AE9>P{u3};",
+ "\u8AEA>T{i2}ng;",
+ "\u8AEB>Ji{a4}n;",
+ "\u8AEC>Q{i3};",
+ "\u8AED>Y{u4};",
+ "\u8AEE>Zi;",
+ "\u8AEF>Chu{a2}n;",
+ "\u8AF0>X{i3};",
+ "\u8AF1>Hu{i4};",
+ "\u8AF2>Yin;",
+ "\u8AF3>An;",
+ "\u8AF4>Xi{a2}n;",
+ "\u8AF5>N{a2}n;",
+ "\u8AF6>Ch{e2}n;",
+ "\u8AF7>Feng;",
+ "\u8AF8>Zhu;",
+ "\u8AF9>Y{a2}ng;",
+ "\u8AFA>Y{a4}n;",
+ "\u8AFB>Heng;",
+ "\u8AFC>Xuan;",
+ "\u8AFD>G{e2};",
+ "\u8AFE>Nu{o4};",
+ "\u8AFF>Q{i4};",
+ "\u8B00>Mo{u2};",
+ "\u8B01>Y{e4};",
+ "\u8B02>We{i4};",
+ "\u8B04>T{e2}ng;",
+ "\u8B05>Zou;",
+ "\u8B06>Sh{a4}n;",
+ "\u8B07>Ji{a3}n;",
+ "\u8B08>B{o2};",
+ "\u8B09>K{u4}1;",
+ "\u8B0A>Hu{a3}ng;",
+ "\u8B0B>Hu{o4};",
+ "\u8B0C>Ge;",
+ "\u8B0D>Y{i2}ng;",
+ "\u8B0E>M{i2};",
+ "\u8B0F>Xia{o3};",
+ "\u8B10>M{i4};",
+ "\u8B11>X{i4};",
+ "\u8B12>Qiang;",
+ "\u8B13>Chen;",
+ "\u8B14>N{uu}{e4};",
+ "\u8B15>T{i2};",
+ "\u8B16>S{u4};",
+ "\u8B17>B{a4}ng;",
+ "\u8B18>Ch{i2};",
+ "\u8B19>Qian;",
+ "\u8B1A>Sh{i4};",
+ "\u8B1B>Ji{a3}ng;",
+ "\u8B1C>Yu{a4}n;",
+ "\u8B1D>Xi{e4};",
+ "\u8B1E>Xu{e4};",
+ "\u8B1F>Tao;",
+ "\u8B20>Ya{o2};",
+ "\u8B21>Ya{o2};",
+ "\u8B23>Y{u2};",
+ "\u8B24>Biao;",
+ "\u8B25>C{o4}ng;",
+ "\u8B26>Q{i4}ng;",
+ "\u8B27>L{i2};",
+ "\u8B28>M{o2};",
+ "\u8B29>M{o4};",
+ "\u8B2A>Shang;",
+ "\u8B2B>Zh{e2};",
+ "\u8B2C>Mi{u4};",
+ "\u8B2D>Ji{a3}n;",
+ "\u8B2E>Z{e2};",
+ "\u8B2F>Jie;",
+ "\u8B30>Li{a2}n;",
+ "\u8B31>Lo{u2};",
+ "\u8B32>Can;",
+ "\u8B33>Ou;",
+ "\u8B34>Gu{a4}n;",
+ "\u8B35>X{i2};",
+ "\u8B36>Zhu{o2};",
+ "\u8B37>A{o2};",
+ "\u8B38>A{o2};",
+ "\u8B39>J{i3}n;",
+ "\u8B3A>Zh{e2};",
+ "\u8B3B>Y{i2};",
+ "\u8B3C>H{u4};",
+ "\u8B3D>Ji{a4}ng;",
+ "\u8B3E>M{a2}n;",
+ "\u8B3F>Cha{o2};",
+ "\u8B40>H{a4}n;",
+ "\u8B41>Hu{a2};",
+ "\u8B42>Ch{a3}n;",
+ "\u8B43>Xu;",
+ "\u8B44>Zeng;",
+ "\u8B45>S{e4};",
+ "\u8B46>Xi;",
+ "\u8B47>She;",
+ "\u8B48>Du{i4};",
+ "\u8B49>Zh{e4}ng;",
+ "\u8B4A>Na{o2};",
+ "\u8B4B>L{a2}n;",
+ "\u8B4C>{E2};",
+ "\u8B4D>Y{i4}ng;",
+ "\u8B4E>Ju{e2};",
+ "\u8B4F>Ji;",
+ "\u8B50>Z{u3}n;",
+ "\u8B51>Jia{o3};",
+ "\u8B52>B{o4};",
+ "\u8B53>Hu{i4};",
+ "\u8B54>Zhu{a4}n;",
+ "\u8B55>M{u2};",
+ "\u8B56>Z{e4}n;",
+ "\u8B57>Zh{a2};",
+ "\u8B58>Sh{i4};",
+ "\u8B59>Qia{o2};",
+ "\u8B5A>T{a2}n;",
+ "\u8B5B>Z{e4}n;",
+ "\u8B5C>P{u3};",
+ "\u8B5D>Sh{e2}ng;",
+ "\u8B5E>Xuan;",
+ "\u8B5F>Za{o4};",
+ "\u8B60>Tan;",
+ "\u8B61>D{a3}ng;",
+ "\u8B62>Su{i4};",
+ "\u8B63>Qian;",
+ "\u8B64>Ji;",
+ "\u8B65>Jia{o4};",
+ "\u8B66>J{i3}ng;",
+ "\u8B67>Li{a2}n;",
+ "\u8B68>No{u2};",
+ "\u8B69>Yi;",
+ "\u8B6A>A{i4};",
+ "\u8B6B>Zhan;",
+ "\u8B6C>P{i4};",
+ "\u8B6D>Hu{i3};",
+ "\u8B6E>Hu{a4};",
+ "\u8B6F>Y{i4};",
+ "\u8B70>Y{i4};",
+ "\u8B71>Sh{a4}n;",
+ "\u8B72>R{a4}ng;",
+ "\u8B73>No{u4};",
+ "\u8B74>Qi{a3}n;",
+ "\u8B75>Zhu{i4};",
+ "\u8B76>T{a4};",
+ "\u8B77>H{u4};",
+ "\u8B78>Zhou;",
+ "\u8B79>Ha{o2};",
+ "\u8B7A>Y{e4};",
+ "\u8B7B>Ying;",
+ "\u8B7C>Ji{a4}n;",
+ "\u8B7D>Y{u4};",
+ "\u8B7E>Ji{a3}n;",
+ "\u8B7F>Hu{i4};",
+ "\u8B80>D{u2};",
+ "\u8B81>Zh{e2};",
+ "\u8B82>Xu{a4}n;",
+ "\u8B83>Z{a4}n;",
+ "\u8B84>Le{i3};",
+ "\u8B85>Sh{e3}n;",
+ "\u8B86>We{i4};",
+ "\u8B87>Ch{a3}n;",
+ "\u8B88>L{i4};",
+ "\u8B89>Y{i2};",
+ "\u8B8A>Bi{a4}n;",
+ "\u8B8B>Zh{e2};",
+ "\u8B8C>Y{a4}n;",
+ "\u8B8D>{E4};",
+ "\u8B8E>Cho{u2};",
+ "\u8B8F>We{i4};",
+ "\u8B90>Cho{u2};",
+ "\u8B91>Ya{o4};",
+ "\u8B92>Ch{a2}n;",
+ "\u8B93>R{a4}ng;",
+ "\u8B94>Y{i3}n;",
+ "\u8B95>L{a2}n;",
+ "\u8B96>Ch{e4}n;",
+ "\u8B97>Hu{o4};",
+ "\u8B98>Zh{e2};",
+ "\u8B99>Huan;",
+ "\u8B9A>Z{a4}n;",
+ "\u8B9B>Y{i4};",
+ "\u8B9C>D{a3}ng;",
+ "\u8B9D>Zhan;",
+ "\u8B9E>Y{a4}n;",
+ "\u8B9F>D{u2};",
+ "\u8BA0>Y{a2}n;",
+ "\u8BA1>J{i4};",
+ "\u8BA2>D{i4}ng;",
+ "\u8BA3>F{u4};",
+ "\u8BA4>R{e4}n;",
+ "\u8BA5>Ji;",
+ "\u8BA6>Ji{e2};",
+ "\u8BA7>H{o2}ng;",
+ "\u8BA8>Ta{o3};",
+ "\u8BA9>R{a4}ng;",
+ "\u8BAA>Sh{a4}n;",
+ "\u8BAB>Q{i4};",
+ "\u8BAC>Tuo;",
+ "\u8BAD>X{u4}n;",
+ "\u8BAE>Y{i4};",
+ "\u8BAF>X{u4}n;",
+ "\u8BB0>J{i4};",
+ "\u8BB1>R{e4}n;",
+ "\u8BB2>Ji{a3}ng;",
+ "\u8BB3>Hu{i4};",
+ "\u8BB4>Ou;",
+ "\u8BB5>J{u4};",
+ "\u8BB6>Y{a4};",
+ "\u8BB7>N{e4};",
+ "\u8BB8>X{u3};",
+ "\u8BB9>{E2};",
+ "\u8BBA>L{u4}n;",
+ "\u8BBB>Xiong;",
+ "\u8BBC>S{o4}ng;",
+ "\u8BBD>Feng;",
+ "\u8BBE>Sh{e4};",
+ "\u8BBF>F{a3}ng;",
+ "\u8BC0>Ju{e2};",
+ "\u8BC1>Zh{e4}ng;",
+ "\u8BC2>G{u3};",
+ "\u8BC3>He;",
+ "\u8BC4>P{i2}ng;",
+ "\u8BC5>Z{u3};",
+ "\u8BC6>Sh{i4};",
+ "\u8BC7>Xi{o4}ng;",
+ "\u8BC8>Zh{a4};",
+ "\u8BC9>S{u4};",
+ "\u8BCA>Zh{e3}n;",
+ "\u8BCB>D{i3};",
+ "\u8BCC>Zou;",
+ "\u8BCD>C{i2};",
+ "\u8BCE>Q{u4};",
+ "\u8BCF>Zha{o4};",
+ "\u8BD0>B{i4};",
+ "\u8BD1>Y{i4};",
+ "\u8BD2>Y{i2};",
+ "\u8BD3>Kuang;",
+ "\u8BD4>Le{i3};",
+ "\u8BD5>Sh{i4};",
+ "\u8BD6>Gu{a4};",
+ "\u8BD7>Shi;",
+ "\u8BD8>Ji{e2};",
+ "\u8BD9>Hui;",
+ "\u8BDA>Ch{e2}ng;",
+ "\u8BDB>Zhu;",
+ "\u8BDC>Shen;",
+ "\u8BDD>Hu{a4};",
+ "\u8BDE>D{a4}n;",
+ "\u8BDF>Go{u4};",
+ "\u8BE0>Qu{a2}n;",
+ "\u8BE1>Gu{i3};",
+ "\u8BE2>X{u2}n;",
+ "\u8BE3>Y{i4};",
+ "\u8BE4>Zheng;",
+ "\u8BE5>Gai;",
+ "\u8BE6>Xi{a2}ng;",
+ "\u8BE7>Ch{a4};",
+ "\u8BE8>H{u4}n;",
+ "\u8BE9>X{u3};",
+ "\u8BEA>Zhou;",
+ "\u8BEB>Ji{e4};",
+ "\u8BEC>W{u2};",
+ "\u8BED>Y{u3};",
+ "\u8BEE>Qia{o4};",
+ "\u8BEF>W{u4};",
+ "\u8BF0>Ga{o4};",
+ "\u8BF1>Yo{u4};",
+ "\u8BF2>Hu{i4};",
+ "\u8BF3>Ku{a2}ng;",
+ "\u8BF4>Shuo;",
+ "\u8BF5>S{o4}ng;",
+ "\u8BF6>Ai;",
+ "\u8BF7>Q{i3}ng;",
+ "\u8BF8>Zhu;",
+ "\u8BF9>Zou;",
+ "\u8BFA>Nu{o4};",
+ "\u8BFB>D{u2};",
+ "\u8BFC>Zhu{o2};",
+ "\u8BFD>Fe{i3};",
+ "\u8BFE>K{e4};",
+ "\u8BFF>We{i3};",
+ "\u8C00>Y{u2};",
+ "\u8C01>Shu{i2};",
+ "\u8C02>Sh{e3}n;",
+ "\u8C03>Dia{o4};",
+ "\u8C04>Ch{a3}n;",
+ "\u8C05>Li{a4}ng;",
+ "\u8C06>Zhun;",
+ "\u8C07>Su{i4};",
+ "\u8C08>T{a2}n;",
+ "\u8C09>Sh{e3}n;",
+ "\u8C0A>Y{i2};",
+ "\u8C0B>Mo{u2};",
+ "\u8C0C>Ch{e2}n;",
+ "\u8C0D>Di{e2};",
+ "\u8C0E>Hu{a3}ng;",
+ "\u8C0F>Ji{a4}n;",
+ "\u8C10>Xi{e2};",
+ "\u8C11>N{uu}{e4};",
+ "\u8C12>Y{e4};",
+ "\u8C13>We{i4};",
+ "\u8C14>{E4};",
+ "\u8C15>Y{u4};",
+ "\u8C16>Xuan;",
+ "\u8C17>Ch{a2}n;",
+ "\u8C18>Zi;",
+ "\u8C19>An;",
+ "\u8C1A>Y{a4}n;",
+ "\u8C1B>D{i4};",
+ "\u8C1C>M{i2};",
+ "\u8C1D>Pi{a2}n;",
+ "\u8C1E>X{u3};",
+ "\u8C1F>M{o2};",
+ "\u8C20>D{a3}ng;",
+ "\u8C21>S{u4};",
+ "\u8C22>Xi{e4};",
+ "\u8C23>Ya{o2};",
+ "\u8C24>B{a4}ng;",
+ "\u8C25>Sh{i4};",
+ "\u8C26>Qian;",
+ "\u8C27>M{i4};",
+ "\u8C28>J{i3}n;",
+ "\u8C29>M{a2}n;",
+ "\u8C2A>Zh{e2};",
+ "\u8C2B>Ji{a3}n;",
+ "\u8C2C>Mi{u4};",
+ "\u8C2D>T{a2}n;",
+ "\u8C2E>Z{e4}n;",
+ "\u8C2F>Qia{o2};",
+ "\u8C30>L{a2}n;",
+ "\u8C31>P{u3};",
+ "\u8C32>Ju{e2};",
+ "\u8C33>Y{a4}n;",
+ "\u8C34>Qi{a3}n;",
+ "\u8C35>Zhan;",
+ "\u8C36>Ch{e4}n;",
+ "\u8C37>G{u3};",
+ "\u8C38>Qian;",
+ "\u8C39>H{o2}ng;",
+ "\u8C3A>Xia;",
+ "\u8C3B>Ju{e2};",
+ "\u8C3C>H{o2}ng;",
+ "\u8C3D>Han;",
+ "\u8C3E>Hong;",
+ "\u8C3F>Xi;",
+ "\u8C40>Xi;",
+ "\u8C41>Hu{o4};",
+ "\u8C42>Lia{o2};",
+ "\u8C43>H{a3}n;",
+ "\u8C44>D{u2};",
+ "\u8C45>L{o2}ng;",
+ "\u8C46>Do{u4};",
+ "\u8C47>Jiang;",
+ "\u8C48>Q{i3};",
+ "\u8C49>Sh{i4};",
+ "\u8C4A>L{i3};",
+ "\u8C4B>Deng;",
+ "\u8C4C>Wan;",
+ "\u8C4D>Bi;",
+ "\u8C4E>Sh{u4};",
+ "\u8C4F>Xi{a4}n;",
+ "\u8C50>Feng;",
+ "\u8C51>Zh{i4};",
+ "\u8C52>Zh{i4};",
+ "\u8C53>Y{a4}n;",
+ "\u8C54>Y{a4}n;",
+ "\u8C55>Sh{i3};",
+ "\u8C56>Ch{u4};",
+ "\u8C57>Hui;",
+ "\u8C58>T{u2}n;",
+ "\u8C59>Y{i4};",
+ "\u8C5A>T{u2}n;",
+ "\u8C5B>Y{i4};",
+ "\u8C5C>Jian;",
+ "\u8C5D>Ba;",
+ "\u8C5E>Ho{u4};",
+ "\u8C5F>{E4};",
+ "\u8C60>C{u2};",
+ "\u8C61>Xi{a4}ng;",
+ "\u8C62>Hu{a4}n;",
+ "\u8C63>Jian;",
+ "\u8C64>K{e3}n;",
+ "\u8C65>Gai;",
+ "\u8C66>Q{u2};",
+ "\u8C67>Fu;",
+ "\u8C68>Xi;",
+ "\u8C69>Bin;",
+ "\u8C6A>Ha{o2};",
+ "\u8C6B>Y{u4};",
+ "\u8C6C>Zhu;",
+ "\u8C6D>Jia;",
+ "\u8C6F>Xi;",
+ "\u8C70>B{o2};",
+ "\u8C71>Wen;",
+ "\u8C72>Hu{a2}n;",
+ "\u8C73>Bin;",
+ "\u8C74>D{i2};",
+ "\u8C75>Zong;",
+ "\u8C76>F{e2}n;",
+ "\u8C77>Y{i4};",
+ "\u8C78>Zh{i4};",
+ "\u8C79>Ba{o4};",
+ "\u8C7A>Cha{i2};",
+ "\u8C7B>H{a4}n;",
+ "\u8C7C>P{i2};",
+ "\u8C7D>N{a4};",
+ "\u8C7E>Pi;",
+ "\u8C7F>Go{u3};",
+ "\u8C80>N{a4};",
+ "\u8C81>Yo{u4};",
+ "\u8C82>Diao;",
+ "\u8C83>M{o4};",
+ "\u8C84>S{i4};",
+ "\u8C85>Xiu;",
+ "\u8C86>Hu{a2}n;",
+ "\u8C87>Kun;",
+ "\u8C88>H{e2};",
+ "\u8C89>H{e2};",
+ "\u8C8A>M{o4};",
+ "\u8C8B>H{a4}n;",
+ "\u8C8C>Ma{o4};",
+ "\u8C8D>L{i2};",
+ "\u8C8E>N{i2};",
+ "\u8C8F>B{i3};",
+ "\u8C90>Y{u3};",
+ "\u8C91>Jia;",
+ "\u8C92>Tuan;",
+ "\u8C93>Mao;",
+ "\u8C94>P{i2};",
+ "\u8C95>Xi;",
+ "\u8C96>{E4};",
+ "\u8C97>J{u4};",
+ "\u8C98>M{o4};",
+ "\u8C99>Chu;",
+ "\u8C9A>T{a2}n;",
+ "\u8C9B>Huan;",
+ "\u8C9C>Ju{e2};",
+ "\u8C9D>Be{i4};",
+ "\u8C9E>Zhen;",
+ "\u8C9F>Yu{a2}n;",
+ "\u8CA0>F{u4};",
+ "\u8CA1>Ca{i2};",
+ "\u8CA2>G{o4}ng;",
+ "\u8CA3>T{e4};",
+ "\u8CA4>Y{i2};",
+ "\u8CA5>H{a2}ng;",
+ "\u8CA6>W{a4}n;",
+ "\u8CA7>P{i2}n;",
+ "\u8CA8>Hu{o4};",
+ "\u8CA9>F{a4}n;",
+ "\u8CAA>Tan;",
+ "\u8CAB>Gu{a4}n;",
+ "\u8CAC>Z{e2};",
+ "\u8CAD>Zh{i2};",
+ "\u8CAE>{E4}r;",
+ "\u8CAF>Zh{u3};",
+ "\u8CB0>Sh{i4};",
+ "\u8CB1>B{i4};",
+ "\u8CB2>Zi;",
+ "\u8CB3>{E4}r;",
+ "\u8CB4>Gu{i4};",
+ "\u8CB5>Pi{a3}n;",
+ "\u8CB6>Bi{a3}n;",
+ "\u8CB7>Ma{i3};",
+ "\u8CB8>Da{i4};",
+ "\u8CB9>Sh{e4}ng;",
+ "\u8CBA>Ku{a4}ng;",
+ "\u8CBB>Fe{i4};",
+ "\u8CBC>Tie;",
+ "\u8CBD>Y{i2};",
+ "\u8CBE>Ch{i2};",
+ "\u8CBF>Ma{o4};",
+ "\u8CC0>H{e4};",
+ "\u8CC1>B{i4};",
+ "\u8CC2>L{u4};",
+ "\u8CC3>R{e4}n;",
+ "\u8CC4>Hu{i4};",
+ "\u8CC5>Gai;",
+ "\u8CC6>Pi{a2}n;",
+ "\u8CC7>Zi;",
+ "\u8CC8>Ji{a3};",
+ "\u8CC9>X{u4};",
+ "\u8CCA>Ze{i2};",
+ "\u8CCB>Jia{o3};",
+ "\u8CCC>Ga{i4};",
+ "\u8CCD>Zang;",
+ "\u8CCE>Ji{a4}n;",
+ "\u8CCF>Y{i4}ng;",
+ "\u8CD0>X{u4}n;",
+ "\u8CD1>Zh{e4}n;",
+ "\u8CD2>She;",
+ "\u8CD3>Bin;",
+ "\u8CD4>Bin;",
+ "\u8CD5>Qi{u2};",
+ "\u8CD6>She;",
+ "\u8CD7>Chu{a4}n;",
+ "\u8CD8>Zang;",
+ "\u8CD9>Zhou;",
+ "\u8CDA>La{i4};",
+ "\u8CDB>Z{a4}n;",
+ "\u8CDC>S{i4};",
+ "\u8CDD>Chen;",
+ "\u8CDE>Sh{a3}ng;",
+ "\u8CDF>Ti{a3}n;",
+ "\u8CE0>Pe{i2};",
+ "\u8CE1>Geng;",
+ "\u8CE2>Xi{a2}n;",
+ "\u8CE3>Ma{i4};",
+ "\u8CE4>Ji{a4}n;",
+ "\u8CE5>Su{i4};",
+ "\u8CE6>F{u4};",
+ "\u8CE7>T{a4}n;",
+ "\u8CE8>C{o2}ng;",
+ "\u8CE9>C{o2}ng;",
+ "\u8CEA>Zh{i2};",
+ "\u8CEB>Ji;",
+ "\u8CEC>Zh{a4}ng;",
+ "\u8CED>D{u3};",
+ "\u8CEE>J{i4}n;",
+ "\u8CEF>Xiong;",
+ "\u8CF0>Sh{u3}n;",
+ "\u8CF1>Y{u3}n;",
+ "\u8CF2>Ba{o3};",
+ "\u8CF3>Zai;",
+ "\u8CF4>La{i4};",
+ "\u8CF5>F{e4}ng;",
+ "\u8CF6>C{a4}ng;",
+ "\u8CF7>Ji;",
+ "\u8CF8>Sh{e4}ng;",
+ "\u8CF9>A{i4};",
+ "\u8CFA>Zhu{a4}n;",
+ "\u8CFB>F{u4};",
+ "\u8CFC>Go{u4};",
+ "\u8CFD>Sa{i4};",
+ "\u8CFE>Z{e2};",
+ "\u8CFF>Lia{o2};",
+ "\u8D00>We{i4};",
+ "\u8D01>Ba{i4};",
+ "\u8D02>Ch{e3}n;",
+ "\u8D03>Zhu{a4}n;",
+ "\u8D04>Zh{i4};",
+ "\u8D05>Zhu{i4};",
+ "\u8D06>Biao;",
+ "\u8D07>Yun;",
+ "\u8D08>Z{e4}ng;",
+ "\u8D09>T{a3}n;",
+ "\u8D0A>Z{a4}n;",
+ "\u8D0B>Y{a4}n;",
+ "\u8D0D>Sh{a4}n;",
+ "\u8D0E>W{a4}n;",
+ "\u8D0F>Y{i2}ng;",
+ "\u8D10>J{i4}n;",
+ "\u8D11>G{a3}n;",
+ "\u8D12>Xi{a2}n;",
+ "\u8D13>Zang;",
+ "\u8D14>B{i4};",
+ "\u8D15>D{u2};",
+ "\u8D16>Sh{u2};",
+ "\u8D17>Y{a4}n;",
+ "\u8D19>Xu{a4}n;",
+ "\u8D1A>L{o4}ng;",
+ "\u8D1B>G{a4}n;",
+ "\u8D1C>Zang;",
+ "\u8D1D>Be{i4};",
+ "\u8D1E>Zhen;",
+ "\u8D1F>F{u4};",
+ "\u8D20>Yu{a2}n;",
+ "\u8D21>G{o4}ng;",
+ "\u8D22>Ca{i2};",
+ "\u8D23>Z{e2};",
+ "\u8D24>Xi{a2}n;",
+ "\u8D25>Ba{i4};",
+ "\u8D26>Zh{a4}ng;",
+ "\u8D27>Hu{o4};",
+ "\u8D28>Zh{i2};",
+ "\u8D29>F{a4}n;",
+ "\u8D2A>Tan;",
+ "\u8D2B>P{i2}n;",
+ "\u8D2C>Bi{a3}n;",
+ "\u8D2D>Go{u4};",
+ "\u8D2E>Zh{u3};",
+ "\u8D2F>Gu{a4}n;",
+ "\u8D30>{E4}r;",
+ "\u8D31>Ji{a4}n;",
+ "\u8D32>B{i4};",
+ "\u8D33>Sh{i4};",
+ "\u8D34>Tie;",
+ "\u8D35>Gu{i4};",
+ "\u8D36>Ku{a4}ng;",
+ "\u8D37>Da{i4};",
+ "\u8D38>Ma{o4};",
+ "\u8D39>Fe{i4};",
+ "\u8D3A>H{e4};",
+ "\u8D3B>Y{i2};",
+ "\u8D3C>Ze{i2};",
+ "\u8D3D>Zh{i4};",
+ "\u8D3E>Ji{a3};",
+ "\u8D3F>Hu{i4};",
+ "\u8D40>Zi;",
+ "\u8D41>R{e4}n;",
+ "\u8D42>L{u4};",
+ "\u8D43>Zang;",
+ "\u8D44>Zi;",
+ "\u8D45>Gai;",
+ "\u8D46>J{i4}n;",
+ "\u8D47>Qi{u2};",
+ "\u8D48>Zh{e4}n;",
+ "\u8D49>La{i4};",
+ "\u8D4A>She;",
+ "\u8D4B>F{u4};",
+ "\u8D4C>D{u3};",
+ "\u8D4D>Ji;",
+ "\u8D4E>Sh{u2};",
+ "\u8D4F>Sh{a3}ng;",
+ "\u8D50>S{i4};",
+ "\u8D51>B{i4};",
+ "\u8D52>Zhou;",
+ "\u8D53>Geng;",
+ "\u8D54>Pe{i2};",
+ "\u8D55>T{a4}n;",
+ "\u8D56>La{i4};",
+ "\u8D57>F{e4}ng;",
+ "\u8D58>Zhu{i4};",
+ "\u8D59>F{u4};",
+ "\u8D5A>Zhu{a4}n;",
+ "\u8D5B>Sa{i4};",
+ "\u8D5C>Z{e2};",
+ "\u8D5D>Y{a4}n;",
+ "\u8D5E>Z{a4}n;",
+ "\u8D5F>Yun;",
+ "\u8D60>Z{e4}ng;",
+ "\u8D61>Sh{a4}n;",
+ "\u8D62>Y{i2}ng;",
+ "\u8D63>G{a4}n;",
+ "\u8D64>Ch{i4};",
+ "\u8D65>X{i4};",
+ "\u8D66>Sh{e4};",
+ "\u8D67>N{a3}n;",
+ "\u8D68>Xi{o2}ng;",
+ "\u8D69>X{i4};",
+ "\u8D6A>Cheng;",
+ "\u8D6B>H{e4};",
+ "\u8D6C>Cheng;",
+ "\u8D6D>Zh{e3};",
+ "\u8D6E>Xi{a2};",
+ "\u8D6F>T{a2}ng;",
+ "\u8D70>Zo{u3};",
+ "\u8D71>Zo{u3};",
+ "\u8D72>L{i4};",
+ "\u8D73>Ji{u3};",
+ "\u8D74>F{u4};",
+ "\u8D75>Zha{o4};",
+ "\u8D76>G{a3}n;",
+ "\u8D77>Q{i3};",
+ "\u8D78>Sh{a4}n;",
+ "\u8D79>Qi{o2}ng;",
+ "\u8D7A>Q{i2}n;",
+ "\u8D7B>Xi{a3}n;",
+ "\u8D7C>Ci;",
+ "\u8D7D>Ju{e2};",
+ "\u8D7E>Q{i3}n;",
+ "\u8D7F>Ch{i2};",
+ "\u8D80>Ci;",
+ "\u8D81>Ch{e4}n;",
+ "\u8D82>Ch{e4}n;",
+ "\u8D83>Di{e2};",
+ "\u8D84>Ju;",
+ "\u8D85>Chao;",
+ "\u8D86>Di;",
+ "\u8D87>S{e4};",
+ "\u8D88>Zhan;",
+ "\u8D89>Zh{u2};",
+ "\u8D8A>Yu{e4};",
+ "\u8D8B>Qu;",
+ "\u8D8C>Ji{e2};",
+ "\u8D8D>Ch{i2};",
+ "\u8D8E>Ch{u2};",
+ "\u8D8F>Gua;",
+ "\u8D90>Xu{e4};",
+ "\u8D91>Ci;",
+ "\u8D92>Tia{o2};",
+ "\u8D93>Du{o3};",
+ "\u8D94>Li{e4};",
+ "\u8D95>G{a3}n;",
+ "\u8D96>Suo;",
+ "\u8D97>C{u4};",
+ "\u8D98>X{i2};",
+ "\u8D99>Zha{o4};",
+ "\u8D9A>S{u4};",
+ "\u8D9B>Y{i3}n;",
+ "\u8D9C>J{u2};",
+ "\u8D9D>Ji{a4}n;",
+ "\u8D9E>Qu{e4};",
+ "\u8D9F>T{a4}ng;",
+ "\u8DA0>Chu{o4};",
+ "\u8DA1>Cu{i3};",
+ "\u8DA2>L{u4};",
+ "\u8DA3>Q{u4};",
+ "\u8DA4>D{a4}ng;",
+ "\u8DA5>Qiu;",
+ "\u8DA6>Zi;",
+ "\u8DA7>T{i2};",
+ "\u8DA8>Qu;",
+ "\u8DA9>Ch{i4};",
+ "\u8DAA>Hu{a2}ng;",
+ "\u8DAB>Qia{o2};",
+ "\u8DAC>Qia{o2};",
+ "\u8DAD>Ya{o4};",
+ "\u8DAE>Za{o4};",
+ "\u8DAF>T{i4};",
+ "\u8DB1>Z{a3}n;",
+ "\u8DB2>Z{a3}n;",
+ "\u8DB3>Z{u2};",
+ "\u8DB4>Pa;",
+ "\u8DB5>Ba{o4};",
+ "\u8DB6>K{u4};",
+ "\u8DB7>Ke;",
+ "\u8DB8>D{u3}n;",
+ "\u8DB9>Ju{e2};",
+ "\u8DBA>Fu;",
+ "\u8DBB>Ch{e3}n;",
+ "\u8DBC>Ji{a3}n;",
+ "\u8DBD>F{a4}ng;",
+ "\u8DBE>Zh{i3};",
+ "\u8DBF>S{a4};",
+ "\u8DC0>Yu{e4};",
+ "\u8DC1>P{a2};",
+ "\u8DC2>Q{i2};",
+ "\u8DC3>Yu{e4};",
+ "\u8DC4>Qiang;",
+ "\u8DC5>Tu{o4};",
+ "\u8DC6>Ta{i2};",
+ "\u8DC7>Y{i4};",
+ "\u8DC8>Ni{a3}n;",
+ "\u8DC9>L{i2}ng;",
+ "\u8DCA>Me{i4};",
+ "\u8DCB>B{a2};",
+ "\u8DCC>Die;",
+ "\u8DCD>Ku;",
+ "\u8DCE>Tu{o2};",
+ "\u8DCF>Jia;",
+ "\u8DD0>C{i3};",
+ "\u8DD1>Pa{o3};",
+ "\u8DD2>Qi{a3};",
+ "\u8DD3>Zh{u4};",
+ "\u8DD4>Ju;",
+ "\u8DD5>Di{e2};",
+ "\u8DD6>Zhi;",
+ "\u8DD7>Fu;",
+ "\u8DD8>P{a2}n;",
+ "\u8DD9>J{u3};",
+ "\u8DDA>Shan;",
+ "\u8DDB>B{o3};",
+ "\u8DDC>N{i2};",
+ "\u8DDD>J{u4};",
+ "\u8DDE>L{i4};",
+ "\u8DDF>Gen;",
+ "\u8DE0>Y{i2};",
+ "\u8DE1>Ji;",
+ "\u8DE2>Da{i4};",
+ "\u8DE3>Xi{a3}n;",
+ "\u8DE4>Jiao;",
+ "\u8DE5>Du{o4};",
+ "\u8DE6>Zhu;",
+ "\u8DE7>Zhuan;",
+ "\u8DE8>Ku{a4};",
+ "\u8DE9>Zhua{i3};",
+ "\u8DEA>Gu{i4};",
+ "\u8DEB>Qi{o2}ng;",
+ "\u8DEC>Ku{i3};",
+ "\u8DED>Xi{a2}ng;",
+ "\u8DEE>Ch{i4};",
+ "\u8DEF>L{u4};",
+ "\u8DF0>B{e4}ng;",
+ "\u8DF1>Zh{i4};",
+ "\u8DF2>Ji{a2};",
+ "\u8DF3>Tia{o4};",
+ "\u8DF4>Ca{i3};",
+ "\u8DF5>Ji{a4}n;",
+ "\u8DF6>T{a4};",
+ "\u8DF7>Qiao;",
+ "\u8DF8>B{i4};",
+ "\u8DF9>Xian;",
+ "\u8DFA>Du{o4};",
+ "\u8DFB>Ji;",
+ "\u8DFC>J{u2};",
+ "\u8DFD>J{i4};",
+ "\u8DFE>Sh{u2};",
+ "\u8DFF>T{u2};",
+ "\u8E00>Ch{u4};",
+ "\u8E01>J{i4}ng;",
+ "\u8E02>Ni{e4};",
+ "\u8E03>Xiao;",
+ "\u8E04>B{o2};",
+ "\u8E05>Ch{i4};",
+ "\u8E06>Qun;",
+ "\u8E07>Mo{u3};",
+ "\u8E08>Shu;",
+ "\u8E09>L{a2}ng;",
+ "\u8E0A>Y{o3}ng;",
+ "\u8E0B>Jia{o3};",
+ "\u8E0C>Cho{u2};",
+ "\u8E0D>Qiao;",
+ "\u8E0F>T{a4};",
+ "\u8E10>Ji{a4}n;",
+ "\u8E11>Q{i2};",
+ "\u8E12>Wo;",
+ "\u8E13>We{i3};",
+ "\u8E14>Zhu{o2};",
+ "\u8E15>Ji{e2};",
+ "\u8E16>J{i2};",
+ "\u8E17>Nie;",
+ "\u8E18>J{u2};",
+ "\u8E19>Ju;",
+ "\u8E1A>L{u2}n;",
+ "\u8E1B>L{u4};",
+ "\u8E1C>L{e4}ng;",
+ "\u8E1D>Hua{i2};",
+ "\u8E1E>J{u4};",
+ "\u8E1F>Ch{i2};",
+ "\u8E20>W{a3}n;",
+ "\u8E21>Qu{a2}n;",
+ "\u8E22>Ti;",
+ "\u8E23>B{o2};",
+ "\u8E24>Z{u2};",
+ "\u8E25>Qi{e4};",
+ "\u8E26>J{i3};",
+ "\u8E27>C{u4};",
+ "\u8E28>Zong;",
+ "\u8E29>Ca{i3};",
+ "\u8E2A>Zong;",
+ "\u8E2B>P{e4}ng;",
+ "\u8E2C>Zh{i4};",
+ "\u8E2D>Zheng;",
+ "\u8E2E>Di{a3}n;",
+ "\u8E2F>Zh{i2};",
+ "\u8E30>Y{u2};",
+ "\u8E31>Du{o4};",
+ "\u8E32>D{u4}n;",
+ "\u8E33>Ch{u3}n;",
+ "\u8E34>Y{o3}ng;",
+ "\u8E35>Zh{o3}ng;",
+ "\u8E36>D{i4};",
+ "\u8E37>Zh{e3};",
+ "\u8E38>Ch{e3}n;",
+ "\u8E39>Chua{i4};",
+ "\u8E3A>Ji{a4}n;",
+ "\u8E3B>Gua;",
+ "\u8E3C>T{a2}ng;",
+ "\u8E3D>J{u3};",
+ "\u8E3E>F{u2};",
+ "\u8E3F>Z{u2};",
+ "\u8E40>Di{e2};",
+ "\u8E41>Pi{a2}n;",
+ "\u8E42>Ro{u2};",
+ "\u8E43>Nu{o4};",
+ "\u8E44>T{i2};",
+ "\u8E45>Ch{a3};",
+ "\u8E46>Tu{i3};",
+ "\u8E47>Ji{a3}n;",
+ "\u8E48>Da{o4};",
+ "\u8E49>Cuo;",
+ "\u8E4A>Xi;",
+ "\u8E4B>T{a4};",
+ "\u8E4C>Qiang;",
+ "\u8E4D>Zh{a3}n;",
+ "\u8E4E>Dian;",
+ "\u8E4F>T{i2};",
+ "\u8E50>J{i2};",
+ "\u8E51>Ni{e4};",
+ "\u8E52>M{a2}n;",
+ "\u8E53>Liu;",
+ "\u8E54>Zh{a4}n;",
+ "\u8E55>B{i4};",
+ "\u8E56>Chong;",
+ "\u8E57>L{u4};",
+ "\u8E58>Lia{o2};",
+ "\u8E59>C{u4};",
+ "\u8E5A>Tang;",
+ "\u8E5B>Da{i4};",
+ "\u8E5C>Suo;",
+ "\u8E5D>X{i3};",
+ "\u8E5E>Ku{i3};",
+ "\u8E5F>Ji;",
+ "\u8E60>Zh{i2};",
+ "\u8E61>Qiang;",
+ "\u8E62>D{i2};",
+ "\u8E63>M{a2}n;",
+ "\u8E64>Zong;",
+ "\u8E65>Li{a2}n;",
+ "\u8E66>B{e4}ng;",
+ "\u8E67>Zao;",
+ "\u8E68>Ni{a3}n;",
+ "\u8E69>Bi{e2};",
+ "\u8E6A>Tu{i2};",
+ "\u8E6B>J{u2};",
+ "\u8E6C>D{e4}ng;",
+ "\u8E6D>C{e4}ng;",
+ "\u8E6E>Xian;",
+ "\u8E6F>F{a2}n;",
+ "\u8E70>Ch{u2};",
+ "\u8E71>Zhong;",
+ "\u8E72>Dun;",
+ "\u8E73>Bo;",
+ "\u8E74>C{u4};",
+ "\u8E75>Z{u2};",
+ "\u8E76>Ju{e2};",
+ "\u8E77>Ju{e2};",
+ "\u8E78>L{i4}n;",
+ "\u8E79>T{a4};",
+ "\u8E7A>Qiao;",
+ "\u8E7B>Qiao;",
+ "\u8E7C>P{u2};",
+ "\u8E7D>Liao;",
+ "\u8E7E>Dun;",
+ "\u8E7F>Cuan;",
+ "\u8E80>Ku{a4}ng;",
+ "\u8E81>Za{o4};",
+ "\u8E82>T{a4};",
+ "\u8E83>B{i4};",
+ "\u8E84>B{i4};",
+ "\u8E85>Zh{u2};",
+ "\u8E86>J{u4};",
+ "\u8E87>Ch{u2};",
+ "\u8E88>Qia{o4};",
+ "\u8E89>D{u3}n;",
+ "\u8E8A>Cho{u2};",
+ "\u8E8B>Ji;",
+ "\u8E8C>W{u3};",
+ "\u8E8D>Yu{e4};",
+ "\u8E8E>Ni{a3}n;",
+ "\u8E8F>L{i4}n;",
+ "\u8E90>Li{e4};",
+ "\u8E91>Zh{i2};",
+ "\u8E92>L{i4};",
+ "\u8E93>Zh{i4};",
+ "\u8E94>Ch{a2}n;",
+ "\u8E95>Ch{u2};",
+ "\u8E96>Du{a4}n;",
+ "\u8E97>We{i4};",
+ "\u8E98>L{o2}ng;",
+ "\u8E99>L{i4}n;",
+ "\u8E9A>Xian;",
+ "\u8E9B>We{i4};",
+ "\u8E9C>Zuan;",
+ "\u8E9D>L{a2}n;",
+ "\u8E9E>Xi{e4};",
+ "\u8E9F>R{a2}ng;",
+ "\u8EA0>Xi{e3};",
+ "\u8EA1>Ni{e4};",
+ "\u8EA2>T{a4};",
+ "\u8EA3>Q{u2};",
+ "\u8EA4>Ji{e4};",
+ "\u8EA5>Cuan;",
+ "\u8EA6>Zuan;",
+ "\u8EA7>X{i3};",
+ "\u8EA8>Ku{i2};",
+ "\u8EA9>Ju{e2};",
+ "\u8EAA>L{i4}n;",
+ "\u8EAB>Shen;",
+ "\u8EAC>Gong;",
+ "\u8EAD>Dan;",
+ "\u8EAF>Qu;",
+ "\u8EB0>T{i3};",
+ "\u8EB1>Du{o3};",
+ "\u8EB2>Du{o3};",
+ "\u8EB3>Gong;",
+ "\u8EB4>L{a2}ng;",
+ "\u8EB6>Lu{o3};",
+ "\u8EB7>A{i3};",
+ "\u8EB8>Ji;",
+ "\u8EB9>J{u2};",
+ "\u8EBA>T{a3}ng;",
+ "\u8EBD>Y{a3}n;",
+ "\u8EBF>Kang;",
+ "\u8EC0>Qu;",
+ "\u8EC1>Lo{u2};",
+ "\u8EC2>La{o4};",
+ "\u8EC3>Tu{o3};",
+ "\u8EC4>Zh{i2};",
+ "\u8EC6>T{i3};",
+ "\u8EC7>Da{o4};",
+ "\u8EC9>Y{u4};",
+ "\u8ECA>Che;",
+ "\u8ECB>Y{a4};",
+ "\u8ECC>Gu{i3};",
+ "\u8ECD>Jun;",
+ "\u8ECE>We{i4};",
+ "\u8ECF>Yu{e4};",
+ "\u8ED0>X{i4}n;",
+ "\u8ED1>D{i4};",
+ "\u8ED2>Xuan;",
+ "\u8ED3>F{a4}n;",
+ "\u8ED4>R{e4}n;",
+ "\u8ED5>Shan;",
+ "\u8ED6>Qi{a2}ng;",
+ "\u8ED7>Shu;",
+ "\u8ED8>T{u2}n;",
+ "\u8ED9>Ch{e2}n;",
+ "\u8EDA>Da{i4};",
+ "\u8EDB>{E4};",
+ "\u8EDC>N{a4};",
+ "\u8EDD>Q{i2};",
+ "\u8EDE>Ma{o2};",
+ "\u8EDF>Ru{a3}n;",
+ "\u8EE0>R{e4}n;",
+ "\u8EE1>F{a3}n;",
+ "\u8EE2>Zhu{a3}n;",
+ "\u8EE3>Hong;",
+ "\u8EE4>Hu;",
+ "\u8EE5>Q{u2};",
+ "\u8EE6>Hu{a4}ng;",
+ "\u8EE7>D{i3};",
+ "\u8EE8>L{i2}ng;",
+ "\u8EE9>Da{i4};",
+ "\u8EEA>Ao;",
+ "\u8EEB>Zh{e3}n;",
+ "\u8EEC>F{a4}n;",
+ "\u8EED>Kuang;",
+ "\u8EEE>{a3}ng;",
+ "\u8EEF>Peng;",
+ "\u8EF0>Be{i4};",
+ "\u8EF1>Gu;",
+ "\u8EF2>Ku;",
+ "\u8EF3>Pa{o2};",
+ "\u8EF4>Zh{u4};",
+ "\u8EF5>R{o3}ng;",
+ "\u8EF6>{E4};",
+ "\u8EF7>B{a2};",
+ "\u8EF8>Zho{u2};",
+ "\u8EF9>Zh{i3};",
+ "\u8EFA>Ya{o2};",
+ "\u8EFB>Ke;",
+ "\u8EFC>Y{i4};",
+ "\u8EFD>Qing;",
+ "\u8EFE>Sh{i4};",
+ "\u8EFF>P{i2}ng;",
+ "\u8F00>{E2}r;",
+ "\u8F01>Qi{o2}ng;",
+ "\u8F02>J{u2};",
+ "\u8F03>Jia{o4};",
+ "\u8F04>Guang;",
+ "\u8F05>L{u4};",
+ "\u8F06>Ka{i3};",
+ "\u8F07>Qu{a2}n;",
+ "\u8F08>Zhou;",
+ "\u8F09>Za{i4};",
+ "\u8F0A>Zh{i4};",
+ "\u8F0B>She;",
+ "\u8F0C>Li{a4}ng;",
+ "\u8F0D>Y{u4};",
+ "\u8F0E>Shao;",
+ "\u8F0F>Yo{u2};",
+ "\u8F10>Hu{a3}n;",
+ "\u8F11>Y{u3}n;",
+ "\u8F12>Zh{e2};",
+ "\u8F13>W{a3}n;",
+ "\u8F14>F{u3};",
+ "\u8F15>Qing;",
+ "\u8F16>Zhou;",
+ "\u8F17>N{i2};",
+ "\u8F18>L{i2}ng;",
+ "\u8F19>Zh{e2};",
+ "\u8F1A>Zh{a4}n;",
+ "\u8F1B>Li{a4}ng;",
+ "\u8F1C>Zi;",
+ "\u8F1D>Hui;",
+ "\u8F1E>W{a3}ng;",
+ "\u8F1F>Chu{o4};",
+ "\u8F20>Gu{o3};",
+ "\u8F21>K{a3}n;",
+ "\u8F22>Y{i3};",
+ "\u8F23>P{e2}ng;",
+ "\u8F24>Qi{a4}n;",
+ "\u8F25>G{u3}n;",
+ "\u8F26>Ni{a3}n;",
+ "\u8F27>Pi{a2}n;",
+ "\u8F28>Gu{a3}n;",
+ "\u8F29>Be{i4};",
+ "\u8F2A>L{u2}n;",
+ "\u8F2B>Pa{i2};",
+ "\u8F2C>Li{a2}ng;",
+ "\u8F2D>Ru{a3}n;",
+ "\u8F2E>Ro{u2};",
+ "\u8F2F>J{i2};",
+ "\u8F30>Y{a2}ng;",
+ "\u8F31>Xi{a2}n;",
+ "\u8F32>Chu{a2}n;",
+ "\u8F33>Co{u4};",
+ "\u8F34>Qun;",
+ "\u8F35>G{e2};",
+ "\u8F36>Yo{u2};",
+ "\u8F37>Hong;",
+ "\u8F38>Shu;",
+ "\u8F39>F{u4};",
+ "\u8F3A>Zi;",
+ "\u8F3B>F{u2};",
+ "\u8F3C>Wen;",
+ "\u8F3D>B{e4}n;",
+ "\u8F3E>Zh{a3}n;",
+ "\u8F3F>Y{u2};",
+ "\u8F40>Wen;",
+ "\u8F41>Tao;",
+ "\u8F42>G{u3};",
+ "\u8F43>Zhen;",
+ "\u8F44>Xi{a2};",
+ "\u8F45>Yu{a2}n;",
+ "\u8F46>L{u4};",
+ "\u8F47>Jiu;",
+ "\u8F48>Cha{o2};",
+ "\u8F49>Zhu{a3}n;",
+ "\u8F4A>We{i4};",
+ "\u8F4B>H{u2}n;",
+ "\u8F4D>Ch{e4};",
+ "\u8F4E>Jia{o4};",
+ "\u8F4F>Zh{a4}n;",
+ "\u8F50>P{u2};",
+ "\u8F51>La{o3};",
+ "\u8F52>F{e2}n;",
+ "\u8F53>Fan;",
+ "\u8F54>L{i2}n;",
+ "\u8F55>G{e2};",
+ "\u8F56>S{e4};",
+ "\u8F57>K{a3}n;",
+ "\u8F58>Hu{a4}n;",
+ "\u8F59>Y{i3};",
+ "\u8F5A>J{i2};",
+ "\u8F5B>Du{i4};",
+ "\u8F5C>{E2}r;",
+ "\u8F5D>Y{u2};",
+ "\u8F5E>Xi{a4}n;",
+ "\u8F5F>Hong;",
+ "\u8F60>Le{i3};",
+ "\u8F61>Pe{i4};",
+ "\u8F62>L{i4};",
+ "\u8F63>L{i4};",
+ "\u8F64>L{u2};",
+ "\u8F65>L{i4}n;",
+ "\u8F66>Che;",
+ "\u8F67>Y{a4};",
+ "\u8F68>Gu{i3};",
+ "\u8F69>Xuan;",
+ "\u8F6A>D{i4};",
+ "\u8F6B>R{e4}n;",
+ "\u8F6C>Zhu{a3}n;",
+ "\u8F6D>{E4};",
+ "\u8F6E>L{u2}n;",
+ "\u8F6F>Ru{a3}n;",
+ "\u8F70>Hong;",
+ "\u8F71>Ku;",
+ "\u8F72>Ke;",
+ "\u8F73>L{u2};",
+ "\u8F74>Zho{u2};",
+ "\u8F75>Zh{i3};",
+ "\u8F76>Y{i4};",
+ "\u8F77>Hu;",
+ "\u8F78>Zh{e3}n;",
+ "\u8F79>L{i4};",
+ "\u8F7A>Ya{o2};",
+ "\u8F7B>Qing;",
+ "\u8F7C>Sh{i4};",
+ "\u8F7D>Za{i4};",
+ "\u8F7E>Zh{i4};",
+ "\u8F7F>Jia{o4};",
+ "\u8F80>Zhou;",
+ "\u8F81>Qu{a2}n;",
+ "\u8F82>L{u4};",
+ "\u8F83>Jia{o4};",
+ "\u8F84>Zh{e2};",
+ "\u8F85>F{u3};",
+ "\u8F86>Li{a4}ng;",
+ "\u8F87>Ni{a3}n;",
+ "\u8F88>Be{i4};",
+ "\u8F89>Hui;",
+ "\u8F8A>G{u3}n;",
+ "\u8F8B>W{a3}ng;",
+ "\u8F8C>Li{a2}ng;",
+ "\u8F8D>Chu{o4};",
+ "\u8F8E>Zi;",
+ "\u8F8F>Co{u4};",
+ "\u8F90>F{u2};",
+ "\u8F91>J{i2};",
+ "\u8F92>Wen;",
+ "\u8F93>Shu;",
+ "\u8F94>Pe{i4};",
+ "\u8F95>Yu{a2}n;",
+ "\u8F96>Xi{a2};",
+ "\u8F97>Zh{a3}n;",
+ "\u8F98>L{u4};",
+ "\u8F99>Ch{e4};",
+ "\u8F9A>L{i2}n;",
+ "\u8F9B>Xin;",
+ "\u8F9C>Gu;",
+ "\u8F9D>C{i2};",
+ "\u8F9E>C{i2};",
+ "\u8F9F>P{i4};",
+ "\u8FA0>Zu{i4};",
+ "\u8FA1>Bi{a4}n;",
+ "\u8FA2>L{a4};",
+ "\u8FA3>L{a4};",
+ "\u8FA4>C{i2};",
+ "\u8FA5>Xue;",
+ "\u8FA6>B{a4}n;",
+ "\u8FA7>Bi{a4}n;",
+ "\u8FA8>Bi{a4}n;",
+ "\u8FA9>Bi{a4}n;",
+ "\u8FAB>Bi{a4}n;",
+ "\u8FAC>Ban;",
+ "\u8FAD>C{i2};",
+ "\u8FAE>Bi{a4}n;",
+ "\u8FAF>Bi{a4}n;",
+ "\u8FB0>Ch{e2}n;",
+ "\u8FB1>R{u4};",
+ "\u8FB2>N{o2}ng;",
+ "\u8FB3>N{o2}ng;",
+ "\u8FB4>Zh{e3}n;",
+ "\u8FB5>Chu{o4};",
+ "\u8FB6>Chu{o4};",
+ "\u8FB8>R{e2}ng;",
+ "\u8FB9>Bian;",
+ "\u8FBA>Bian;",
+ "\u8FBD>Lia{o2};",
+ "\u8FBE>D{a2};",
+ "\u8FBF>Chan;",
+ "\u8FC0>Gan;",
+ "\u8FC1>Qian;",
+ "\u8FC2>Yu;",
+ "\u8FC3>Yu;",
+ "\u8FC4>Q{i4};",
+ "\u8FC5>X{u4}n;",
+ "\u8FC6>Y{i3};",
+ "\u8FC7>Gu{o4};",
+ "\u8FC8>Ma{i4};",
+ "\u8FC9>Q{i2};",
+ "\u8FCA>Za;",
+ "\u8FCB>W{a4}ng;",
+ "\u8FCC>Jia;",
+ "\u8FCD>Zhun;",
+ "\u8FCE>Y{i2}ng;",
+ "\u8FCF>T{i4};",
+ "\u8FD0>Y{u4}n;",
+ "\u8FD1>J{i4}n;",
+ "\u8FD2>H{a2}ng;",
+ "\u8FD3>Y{a4};",
+ "\u8FD4>F{a3}n;",
+ "\u8FD5>W{u4};",
+ "\u8FD6>D{a2};",
+ "\u8FD7>{E2};",
+ "\u8FD8>Hu{a2}n;",
+ "\u8FD9>Zh{e4};",
+ "\u8FDB>J{i4}n;",
+ "\u8FDC>Yu{a3}n;",
+ "\u8FDD>We{i2};",
+ "\u8FDE>Li{a2}n;",
+ "\u8FDF>Ch{i2};",
+ "\u8FE0>Ch{e4};",
+ "\u8FE1>N{i4};",
+ "\u8FE2>Tia{o2};",
+ "\u8FE3>Zh{i4};",
+ "\u8FE4>Y{i3};",
+ "\u8FE5>Ji{o3}ng;",
+ "\u8FE6>Jia;",
+ "\u8FE7>Ch{e2}n;",
+ "\u8FE8>Da{i4};",
+ "\u8FE9>{e3}r;",
+ "\u8FEA>D{i2};",
+ "\u8FEB>P{o4};",
+ "\u8FEC>W{a3}ng;",
+ "\u8FED>Di{e2};",
+ "\u8FEE>Z{e2};",
+ "\u8FEF>Ta{o2};",
+ "\u8FF0>Sh{u4};",
+ "\u8FF1>Tu{o2};",
+ "\u8FF3>J{i4}ng;",
+ "\u8FF4>Hu{i2};",
+ "\u8FF5>T{o2}ng;",
+ "\u8FF6>Yo{u4};",
+ "\u8FF7>M{i2};",
+ "\u8FF8>B{e4}ng;",
+ "\u8FF9>Ji;",
+ "\u8FFA>Na{i3};",
+ "\u8FFB>Y{i2};",
+ "\u8FFC>Ji{e2};",
+ "\u8FFD>Zhui;",
+ "\u8FFE>Li{e4};",
+ "\u8FFF>X{u4}n;",
+ "\u9000>Tu{i4};",
+ "\u9001>S{o4}ng;",
+ "\u9002>Gua;",
+ "\u9003>Ta{o2};",
+ "\u9004>P{a2}ng;",
+ "\u9005>Ho{u4};",
+ "\u9006>N{i4};",
+ "\u9007>D{u4}n;",
+ "\u9008>Ji{o3}ng;",
+ "\u9009>Xu{a3}n;",
+ "\u900A>X{u4}n;",
+ "\u900B>Bu;",
+ "\u900C>Yo{u2};",
+ "\u900D>Xiao;",
+ "\u900E>Qi{u2};",
+ "\u900F>To{u4};",
+ "\u9010>Zh{u2};",
+ "\u9011>Qi{u2};",
+ "\u9012>D{i4};",
+ "\u9013>D{i4};",
+ "\u9014>T{u2};",
+ "\u9015>J{i4}ng;",
+ "\u9016>T{i4};",
+ "\u9017>Do{u4};",
+ "\u9018>Y{i3};",
+ "\u9019>Zh{e4};",
+ "\u901A>Tong;",
+ "\u901B>Gu{a4}ng;",
+ "\u901C>W{u4};",
+ "\u901D>Sh{i4};",
+ "\u901E>Ch{e3}ng;",
+ "\u901F>S{u4};",
+ "\u9020>Za{o4};",
+ "\u9021>Qun;",
+ "\u9022>F{e2}ng;",
+ "\u9023>Li{a2}n;",
+ "\u9024>Su{o4};",
+ "\u9025>Hu{i2};",
+ "\u9026>L{i3};",
+ "\u9028>La{i2};",
+ "\u9029>B{e4}n;",
+ "\u902A>Cu{o4};",
+ "\u902B>Ju{e2};",
+ "\u902C>B{e4}ng;",
+ "\u902D>Hu{a4}n;",
+ "\u902E>Da{i4};",
+ "\u902F>L{u4};",
+ "\u9030>Yo{u2};",
+ "\u9031>Zhou;",
+ "\u9032>J{i4}n;",
+ "\u9033>Y{u4};",
+ "\u9034>Chu{o4};",
+ "\u9035>Ku{i2};",
+ "\u9036>Wei;",
+ "\u9037>T{i4};",
+ "\u9038>Y{i4};",
+ "\u9039>D{a2};",
+ "\u903A>Yu{a3}n;",
+ "\u903B>Lu{o2};",
+ "\u903C>Bi;",
+ "\u903D>Nu{o4};",
+ "\u903E>Y{u2};",
+ "\u903F>D{a4}ng;",
+ "\u9040>Su{i2};",
+ "\u9041>D{u4}n;",
+ "\u9042>Su{i4};",
+ "\u9043>Y{a3}n;",
+ "\u9044>Chu{a2}n;",
+ "\u9045>Ch{i2};",
+ "\u9046>T{i2};",
+ "\u9047>Y{u4};",
+ "\u9048>Sh{i2};",
+ "\u9049>Zhen;",
+ "\u904A>Yo{u2};",
+ "\u904B>Y{u4}n;",
+ "\u904C>{E4};",
+ "\u904D>Bi{a4}n;",
+ "\u904E>Gu{o4};",
+ "\u904F>{E4};",
+ "\u9050>Xi{a2};",
+ "\u9051>Hu{a2}ng;",
+ "\u9052>Qi{u2};",
+ "\u9053>Da{o4};",
+ "\u9054>D{a2};",
+ "\u9055>We{i2};",
+ "\u9057>Y{i2};",
+ "\u9058>Go{u4};",
+ "\u9059>Ya{o2};",
+ "\u905A>Ch{u4};",
+ "\u905B>Li{u2};",
+ "\u905C>X{u4}n;",
+ "\u905D>T{a4};",
+ "\u905E>D{i4};",
+ "\u905F>Ch{i2};",
+ "\u9060>Yu{a3}n;",
+ "\u9061>S{u4};",
+ "\u9062>T{a4};",
+ "\u9063>Qi{a3}n;",
+ "\u9065>Ya{o2};",
+ "\u9066>Gu{a4}n;",
+ "\u9067>Zhang;",
+ "\u9068>A{o2};",
+ "\u9069>Sh{i4};",
+ "\u906A>C{e4};",
+ "\u906B>Ch{i4};",
+ "\u906C>S{u4};",
+ "\u906D>Zao;",
+ "\u906E>Zhe;",
+ "\u906F>D{u4}n;",
+ "\u9070>D{i4};",
+ "\u9071>Lo{u2};",
+ "\u9072>Ch{i2};",
+ "\u9073>Cuo;",
+ "\u9074>L{i2}n;",
+ "\u9075>Zun;",
+ "\u9076>Ra{o4};",
+ "\u9077>Qian;",
+ "\u9078>Xu{a3}n;",
+ "\u9079>Y{u4};",
+ "\u907A>Y{i2};",
+ "\u907B>W{u4};",
+ "\u907C>Lia{o2};",
+ "\u907D>J{u4};",
+ "\u907E>Sh{i4};",
+ "\u907F>B{i4};",
+ "\u9080>Yao;",
+ "\u9081>Ma{i4};",
+ "\u9082>Xi{e4};",
+ "\u9083>Su{i4};",
+ "\u9084>Hu{a2}n;",
+ "\u9085>Zhan;",
+ "\u9086>T{e2}ng;",
+ "\u9087>{e3}r;",
+ "\u9088>Mia{o3};",
+ "\u9089>Bian;",
+ "\u908A>Bian;",
+ "\u908B>L{a2};",
+ "\u908C>L{i2};",
+ "\u908D>Yu{a2}n;",
+ "\u908E>Ya{o2};",
+ "\u908F>Lu{o2};",
+ "\u9090>L{i3};",
+ "\u9091>Y{i4};",
+ "\u9092>T{i2}ng;",
+ "\u9093>D{e4}ng;",
+ "\u9094>Q{i3};",
+ "\u9095>Yong;",
+ "\u9096>Shan;",
+ "\u9097>H{a2}n;",
+ "\u9098>Y{u2};",
+ "\u9099>M{a2}ng;",
+ "\u909A>R{u2};",
+ "\u909B>Qi{o2}ng;",
+ "\u909D>Ku{a4}ng;",
+ "\u909E>Fu;",
+ "\u909F>K{a4}ng;",
+ "\u90A0>Bin;",
+ "\u90A1>Fang;",
+ "\u90A2>X{i2}ng;",
+ "\u90A3>N{a4};",
+ "\u90A4>Xin;",
+ "\u90A5>Sh{e3}n;",
+ "\u90A6>Bang;",
+ "\u90A7>Yu{a2}n;",
+ "\u90A8>Cun;",
+ "\u90A9>Hu{o3};",
+ "\u90AA>Xi{e2};",
+ "\u90AB>Bang;",
+ "\u90AC>Wu;",
+ "\u90AD>J{u4};",
+ "\u90AE>Yo{u2};",
+ "\u90AF>H{a2}n;",
+ "\u90B0>Ta{i2};",
+ "\u90B1>Qiu;",
+ "\u90B2>B{i4};",
+ "\u90B3>Pe{i2};",
+ "\u90B4>B{i3}ng;",
+ "\u90B5>Sha{o4};",
+ "\u90B6>Be{i4};",
+ "\u90B7>W{a3};",
+ "\u90B8>D{i3};",
+ "\u90B9>Zou;",
+ "\u90BA>Y{e4};",
+ "\u90BB>L{i2}n;",
+ "\u90BC>Kuang;",
+ "\u90BD>Gui;",
+ "\u90BE>Zhu;",
+ "\u90BF>Shi;",
+ "\u90C0>Ku;",
+ "\u90C1>Y{u4};",
+ "\u90C2>Gai;",
+ "\u90C3>G{e2};",
+ "\u90C4>X{i4};",
+ "\u90C5>Zh{i4};",
+ "\u90C6>J{i2};",
+ "\u90C7>X{u2}n;",
+ "\u90C8>Ho{u4};",
+ "\u90C9>X{i2}ng;",
+ "\u90CA>Jiao;",
+ "\u90CB>X{i2};",
+ "\u90CC>Gui;",
+ "\u90CD>Nu{o2};",
+ "\u90CE>L{a2}ng;",
+ "\u90CF>Ji{a2};",
+ "\u90D0>Kua{i4};",
+ "\u90D1>Zh{e4}ng;",
+ "\u90D3>Y{u4}n;",
+ "\u90D4>Y{a2}n;",
+ "\u90D5>Ch{e2}ng;",
+ "\u90D6>Dou;",
+ "\u90D7>Chi;",
+ "\u90D8>L{uu3};",
+ "\u90D9>F{u3};",
+ "\u90DA>W{u2};",
+ "\u90DB>F{u2};",
+ "\u90DC>Ga{o4};",
+ "\u90DD>Ha{o3};",
+ "\u90DE>L{a2}ng;",
+ "\u90DF>Ji{a2};",
+ "\u90E0>G{e3}ng;",
+ "\u90E1>J{u4}n;",
+ "\u90E2>Y{i3}ng;",
+ "\u90E3>B{o2};",
+ "\u90E4>X{i4};",
+ "\u90E5>Be{i4};",
+ "\u90E6>L{i4};",
+ "\u90E7>Y{u2}n;",
+ "\u90E8>B{u4};",
+ "\u90E9>Xia{o2};",
+ "\u90EA>Qi;",
+ "\u90EB>P{i2};",
+ "\u90EC>Qing;",
+ "\u90ED>Guo;",
+ "\u90EE>Zhou;",
+ "\u90EF>T{a2}n;",
+ "\u90F0>Zou;",
+ "\u90F1>P{i2}ng;",
+ "\u90F2>La{i2};",
+ "\u90F3>N{i2};",
+ "\u90F4>Chen;",
+ "\u90F5>Yo{u2};",
+ "\u90F6>B{u4};",
+ "\u90F7>Xiang;",
+ "\u90F8>Dan;",
+ "\u90F9>J{u2};",
+ "\u90FA>Yong;",
+ "\u90FB>Qiao;",
+ "\u90FC>Yi;",
+ "\u90FD>Du;",
+ "\u90FE>Y{a3}n;",
+ "\u90FF>Me{i2};",
+ "\u9100>Ru{o4};",
+ "\u9101>Be{i4};",
+ "\u9102>{E4};",
+ "\u9103>Y{u2};",
+ "\u9104>Ju{a4}n;",
+ "\u9105>Y{u3};",
+ "\u9106>Y{u4}n;",
+ "\u9107>Ho{u4};",
+ "\u9108>Ku{i2};",
+ "\u9109>Xiang;",
+ "\u910A>Xiang;",
+ "\u910B>Sou;",
+ "\u910C>T{a2}ng;",
+ "\u910D>M{i2}ng;",
+ "\u910E>X{i4};",
+ "\u910F>R{u4};",
+ "\u9110>Ch{u4};",
+ "\u9111>Zi;",
+ "\u9112>Zou;",
+ "\u9113>J{u2};",
+ "\u9114>Wu;",
+ "\u9115>Xiang;",
+ "\u9116>Y{u2}n;",
+ "\u9117>Ha{o4};",
+ "\u9118>Yong;",
+ "\u9119>B{i3};",
+ "\u911A>M{o4};",
+ "\u911B>Cha{o2};",
+ "\u911C>Fu;",
+ "\u911D>Lia{o3};",
+ "\u911E>Y{i2}n;",
+ "\u911F>Zhuan;",
+ "\u9120>H{u4};",
+ "\u9121>Qiao;",
+ "\u9122>Yan;",
+ "\u9123>Zhang;",
+ "\u9124>F{a4}n;",
+ "\u9125>Qiao;",
+ "\u9126>X{u3};",
+ "\u9127>D{e4}ng;",
+ "\u9128>B{i4};",
+ "\u9129>X{i2}n;",
+ "\u912A>B{i4};",
+ "\u912B>C{e2}ng;",
+ "\u912C>We{i2};",
+ "\u912D>Zh{e4}ng;",
+ "\u912E>Ma{o4};",
+ "\u912F>Sh{a4}n;",
+ "\u9130>L{i2}n;",
+ "\u9131>P{o2};",
+ "\u9132>Dan;",
+ "\u9133>M{e2}ng;",
+ "\u9134>Y{e4};",
+ "\u9135>Cao;",
+ "\u9136>Kua{i4};",
+ "\u9137>Feng;",
+ "\u9138>M{e2}ng;",
+ "\u9139>Zou;",
+ "\u913A>Ku{a4}ng;",
+ "\u913B>Li{a2}n;",
+ "\u913C>Z{a4}n;",
+ "\u913D>Ch{a2}n;",
+ "\u913E>You;",
+ "\u913F>Q{i2};",
+ "\u9140>Yan;",
+ "\u9141>Ch{a2}n;",
+ "\u9142>Z{a4}n;",
+ "\u9143>L{i2}ng;",
+ "\u9144>Huan;",
+ "\u9145>Xi;",
+ "\u9146>Feng;",
+ "\u9147>Z{a4}n;",
+ "\u9148>L{i4};",
+ "\u9149>Yo{u3};",
+ "\u914A>D{i3}ng;",
+ "\u914B>Qi{u2};",
+ "\u914C>Zhu{o2};",
+ "\u914D>Pe{i4};",
+ "\u914E>Zho{u4};",
+ "\u914F>Y{i2};",
+ "\u9150>H{a3}ng;",
+ "\u9151>Y{u3};",
+ "\u9152>Ji{u3};",
+ "\u9153>Y{a3}n;",
+ "\u9154>Zu{i4};",
+ "\u9155>Ma{o2};",
+ "\u9156>Dan;",
+ "\u9157>X{u4};",
+ "\u9158>To{u2};",
+ "\u9159>Zhen;",
+ "\u915A>Fen;",
+ "\u915D>Y{u4}n;",
+ "\u915E>Ta{i4};",
+ "\u915F>Tian;",
+ "\u9160>Qi{a3};",
+ "\u9161>Tu{o2};",
+ "\u9162>Zu{o4};",
+ "\u9163>Han;",
+ "\u9164>Gu;",
+ "\u9165>Su;",
+ "\u9166>P{o4};",
+ "\u9167>Cho{u2};",
+ "\u9168>Za{i4};",
+ "\u9169>M{i2}ng;",
+ "\u916A>Lu{o4};",
+ "\u916B>Chu{o4};",
+ "\u916C>Cho{u2};",
+ "\u916D>Yo{u4};",
+ "\u916E>T{o2}ng;",
+ "\u916F>Zh{i3};",
+ "\u9170>Xian;",
+ "\u9171>Ji{a4}ng;",
+ "\u9172>Ch{e2}ng;",
+ "\u9173>Y{i4}n;",
+ "\u9174>T{u2};",
+ "\u9175>Xia{o4};",
+ "\u9176>Me{i2};",
+ "\u9177>K{u4};",
+ "\u9178>Suan;",
+ "\u9179>Le{i4};",
+ "\u917A>P{u2};",
+ "\u917B>Zu{i4};",
+ "\u917C>Ha{i3};",
+ "\u917D>Y{a4}n;",
+ "\u917E>X{i3};",
+ "\u917F>Ni{a4}ng;",
+ "\u9180>We{i2};",
+ "\u9181>L{u4};",
+ "\u9182>L{a3}n;",
+ "\u9183>Yan;",
+ "\u9184>Ta{o2};",
+ "\u9185>Pei;",
+ "\u9186>Zh{a3}n;",
+ "\u9187>Ch{u2}n;",
+ "\u9188>T{a2}n;",
+ "\u9189>Zu{i4};",
+ "\u918A>Chu{o4};",
+ "\u918B>C{u4};",
+ "\u918C>Kun;",
+ "\u918D>T{i2};",
+ "\u918E>Mi{a2}n;",
+ "\u918F>Du;",
+ "\u9190>H{u2};",
+ "\u9191>X{u3};",
+ "\u9192>X{i3}ng;",
+ "\u9193>T{a3}n;",
+ "\u9194>Jiu;",
+ "\u9195>Ch{u2}n;",
+ "\u9196>Y{u4}n;",
+ "\u9197>P{o4};",
+ "\u9198>K{e4};",
+ "\u9199>Sou;",
+ "\u919A>M{i2};",
+ "\u919B>Qu{a2}n;",
+ "\u919C>Cho{u3};",
+ "\u919D>Cu{o2};",
+ "\u919E>Y{u4}n;",
+ "\u919F>Y{o4}ng;",
+ "\u91A0>{A4}ng;",
+ "\u91A1>Zh{a4};",
+ "\u91A2>Ha{i3};",
+ "\u91A3>T{a2}ng;",
+ "\u91A4>Ji{a4}ng;",
+ "\u91A5>Pia{o3};",
+ "\u91A6>Sh{a3}n;",
+ "\u91A7>Y{u4};",
+ "\u91A8>L{i2};",
+ "\u91A9>Za{o2};",
+ "\u91AA>La{o2};",
+ "\u91AB>Yi;",
+ "\u91AC>Ji{a4}ng;",
+ "\u91AD>Pu;",
+ "\u91AE>Jia{o4};",
+ "\u91AF>Xi;",
+ "\u91B0>T{a2}n;",
+ "\u91B1>P{o4};",
+ "\u91B2>N{o2}ng;",
+ "\u91B3>Y{i4};",
+ "\u91B4>L{i3};",
+ "\u91B5>J{u4};",
+ "\u91B6>Jia{o4};",
+ "\u91B7>Y{i4};",
+ "\u91B8>Ni{a4}ng;",
+ "\u91B9>R{u2};",
+ "\u91BA>Xun;",
+ "\u91BB>Cho{u2};",
+ "\u91BC>Y{a4}n;",
+ "\u91BD>L{i2}ng;",
+ "\u91BE>M{i2};",
+ "\u91BF>M{i2};",
+ "\u91C0>Ni{a4}ng;",
+ "\u91C1>X{i4}n;",
+ "\u91C2>Jia{o4};",
+ "\u91C3>X{i3};",
+ "\u91C4>M{i2};",
+ "\u91C5>Y{a4}n;",
+ "\u91C6>Bi{a4}n;",
+ "\u91C7>Ca{i3};",
+ "\u91C8>Sh{i4};",
+ "\u91C9>Yo{u4};",
+ "\u91CA>Sh{i4};",
+ "\u91CB>Sh{i4};",
+ "\u91CC>L{i3};",
+ "\u91CD>Zh{o4}ng;",
+ "\u91CE>Y{e3};",
+ "\u91CF>Li{a4}ng;",
+ "\u91D0>L{i2};",
+ "\u91D1>Jin;",
+ "\u91D2>Jin1zi4p{a2}ng;",
+ "\u91D3>Qi{u2};",
+ "\u91D4>Y{i3};",
+ "\u91D5>Dia{o3};",
+ "\u91D6>Dao;",
+ "\u91D7>Zhao;",
+ "\u91D8>Ding;",
+ "\u91D9>P{o4};",
+ "\u91DA>Qi{u2};",
+ "\u91DB>H{e2};",
+ "\u91DC>F{u3};",
+ "\u91DD>Zhen;",
+ "\u91DE>Zh{i2};",
+ "\u91DF>Ba;",
+ "\u91E0>Lu{a4}n;",
+ "\u91E1>F{u3};",
+ "\u91E2>Na{i2};",
+ "\u91E3>Dia{o4};",
+ "\u91E4>Sh{a4}n;",
+ "\u91E5>Qia{o3};",
+ "\u91E6>Ko{u4};",
+ "\u91E7>Chu{a4}n;",
+ "\u91E8>Z{i3};",
+ "\u91E9>F{a2}n;",
+ "\u91EA>Y{u2};",
+ "\u91EB>Hu{a2};",
+ "\u91EC>H{a4}n;",
+ "\u91ED>Gong;",
+ "\u91EE>Q{i2};",
+ "\u91EF>M{a2}ng;",
+ "\u91F0>R{i4};",
+ "\u91F1>D{i4};",
+ "\u91F2>S{i4};",
+ "\u91F3>X{i4};",
+ "\u91F4>Y{i4};",
+ "\u91F5>Chai;",
+ "\u91F6>Shi;",
+ "\u91F7>T{u3};",
+ "\u91F8>X{i4};",
+ "\u91F9>N{uu3};",
+ "\u91FA>Qian;",
+ "\u91FC>Ji{a4}n;",
+ "\u91FD>Pi;",
+ "\u91FE>Y{e2};",
+ "\u91FF>Y{i2}n;",
+ "\u9200>B{a3};",
+ "\u9201>Fang;",
+ "\u9202>Ch{e2}n;",
+ "\u9203>X{i2}ng;",
+ "\u9204>To{u3};",
+ "\u9205>Yu{e4};",
+ "\u9206>Y{a2}n;",
+ "\u9207>Fu;",
+ "\u9208>Pi;",
+ "\u9209>N{a4};",
+ "\u920A>Xin;",
+ "\u920B>{E2};",
+ "\u920C>Ju{e2};",
+ "\u920D>D{u4}n;",
+ "\u920E>Gou;",
+ "\u920F>Y{i3}n;",
+ "\u9210>Qi{a2}n;",
+ "\u9211>B{a3}n;",
+ "\u9212>J{i2};",
+ "\u9213>R{e2}n;",
+ "\u9214>Chao;",
+ "\u9215>Ni{u3};",
+ "\u9216>Fen;",
+ "\u9217>Y{u3}n;",
+ "\u9218>J{i3};",
+ "\u9219>Q{i2}n;",
+ "\u921A>P{i2};",
+ "\u921B>Guo;",
+ "\u921C>H{o2}ng;",
+ "\u921D>Y{i2}n;",
+ "\u921E>Jun;",
+ "\u921F>Shi;",
+ "\u9220>Y{i4};",
+ "\u9221>Zhong;",
+ "\u9222>Nie;",
+ "\u9223>Ga{i4};",
+ "\u9224>R{i4};",
+ "\u9225>Hu{o2};",
+ "\u9226>Ta{i4};",
+ "\u9227>K{a4}ng;",
+ "\u922C>Du{o2};",
+ "\u922D>Zi;",
+ "\u922E>N{i3};",
+ "\u922F>T{u2};",
+ "\u9230>Sh{i4};",
+ "\u9231>M{i2}n;",
+ "\u9232>Gu;",
+ "\u9233>E;",
+ "\u9234>L{i2}ng;",
+ "\u9235>B{i4}ng;",
+ "\u9236>Y{i2};",
+ "\u9237>Gu;",
+ "\u9238>B{a2};",
+ "\u9239>Pi;",
+ "\u923A>Y{u4};",
+ "\u923B>S{i4};",
+ "\u923C>Zu{o2};",
+ "\u923D>B{u4};",
+ "\u923E>Yo{u2};",
+ "\u923F>Di{a4}n;",
+ "\u9240>Ji{a3};",
+ "\u9241>Zhen;",
+ "\u9242>Sh{i3};",
+ "\u9243>Sh{i4};",
+ "\u9244>Ti{e3};",
+ "\u9245>J{u4};",
+ "\u9246>Zhan;",
+ "\u9247>Shi;",
+ "\u9248>Sh{e2};",
+ "\u9249>Xu{a4}n;",
+ "\u924A>Zhao;",
+ "\u924B>Ba{o4};",
+ "\u924C>H{e2};",
+ "\u924D>B{i4};",
+ "\u924E>Sheng;",
+ "\u924F>Ch{u2};",
+ "\u9250>Sh{i2};",
+ "\u9251>B{o2};",
+ "\u9252>Zh{u4};",
+ "\u9253>Ch{i4};",
+ "\u9254>Za;",
+ "\u9255>Po;",
+ "\u9256>T{o2}ng;",
+ "\u9257>Qi{a2}n;",
+ "\u9258>F{u2};",
+ "\u9259>Zha{i3};",
+ "\u925A>Li{u3};",
+ "\u925B>Qian;",
+ "\u925C>F{u2};",
+ "\u925D>L{i4};",
+ "\u925E>Yu{e4};",
+ "\u925F>Pi;",
+ "\u9260>Yang;",
+ "\u9261>B{a4}n;",
+ "\u9262>Bo;",
+ "\u9263>Ji{e2};",
+ "\u9264>Gou;",
+ "\u9265>Sh{u4};",
+ "\u9266>Zheng;",
+ "\u9267>M{u3};",
+ "\u9268>N{i3};",
+ "\u9269>Nie;",
+ "\u926A>D{i4};",
+ "\u926B>Jia;",
+ "\u926C>M{u4};",
+ "\u926D>D{a4}n;",
+ "\u926E>Shen;",
+ "\u926F>Y{i3};",
+ "\u9270>Si;",
+ "\u9271>Ku{a4}ng;",
+ "\u9272>K{a3};",
+ "\u9273>Be{i3};",
+ "\u9274>Ji{a4}n;",
+ "\u9275>T{o2}ng;",
+ "\u9276>X{i2}ng;",
+ "\u9277>H{o2}ng;",
+ "\u9278>Jia{o3};",
+ "\u9279>Ch{i3};",
+ "\u927A>{E4}r;",
+ "\u927B>G{e4};",
+ "\u927C>B{i3}ng;",
+ "\u927D>Sh{i4};",
+ "\u927E>Mo{u2};",
+ "\u927F>Ji{a2};",
+ "\u9280>Y{i2}n;",
+ "\u9281>Jun;",
+ "\u9282>Zhou;",
+ "\u9283>Ch{o4}ng;",
+ "\u9284>Sh{a4}ng;",
+ "\u9285>T{o2}ng;",
+ "\u9286>M{o4};",
+ "\u9287>Le{i4};",
+ "\u9288>Ji;",
+ "\u9289>Y{u4};",
+ "\u928A>X{u4};",
+ "\u928B>R{e2}n;",
+ "\u928C>Z{u4}n;",
+ "\u928D>Zh{i4};",
+ "\u928E>Qiong;",
+ "\u928F>Sh{a4}n;",
+ "\u9290>Ch{i4};",
+ "\u9291>Xi{a3}n;",
+ "\u9292>X{i2}ng;",
+ "\u9293>Qu{a2}n;",
+ "\u9294>Pi;",
+ "\u9295>Ti{e3};",
+ "\u9296>Zhu;",
+ "\u9297>Ho{u2};",
+ "\u9298>M{i2}ng;",
+ "\u9299>Ku{a3};",
+ "\u929A>Ya{o2};",
+ "\u929B>Xian;",
+ "\u929C>Xi{a2}n;",
+ "\u929D>Xiu;",
+ "\u929E>Jun;",
+ "\u929F>Cha;",
+ "\u92A0>La{o3};",
+ "\u92A1>J{i2};",
+ "\u92A2>P{i3};",
+ "\u92A3>R{u3};",
+ "\u92A4>M{i3};",
+ "\u92A5>Y{i3};",
+ "\u92A6>Yin;",
+ "\u92A7>Guang;",
+ "\u92A8>An;",
+ "\u92A9>Diou;",
+ "\u92AA>Yo{u3};",
+ "\u92AB>S{e4};",
+ "\u92AC>Ka{o4};",
+ "\u92AD>Qi{a2}n;",
+ "\u92AE>Lu{a2}n;",
+ "\u92B0>Ai;",
+ "\u92B1>Dia{o4};",
+ "\u92B2>H{a4}n;",
+ "\u92B3>Ru{i4};",
+ "\u92B4>Sh{i4};",
+ "\u92B5>Keng;",
+ "\u92B6>Qi{u2};",
+ "\u92B7>Xiao;",
+ "\u92B8>Zh{e2};",
+ "\u92B9>Xi{u4};",
+ "\u92BA>Z{a4}ng;",
+ "\u92BB>T{i4};",
+ "\u92BC>Cu{o4};",
+ "\u92BD>Gua;",
+ "\u92BE>G{o3}ng;",
+ "\u92BF>Zhong;",
+ "\u92C0>Do{u4};",
+ "\u92C1>L{uu3};",
+ "\u92C2>Me{i2};",
+ "\u92C3>L{a2}ng;",
+ "\u92C4>W{a3}n;",
+ "\u92C5>Xin;",
+ "\u92C6>Y{u2}n;",
+ "\u92C7>Be{i4};",
+ "\u92C8>W{u4};",
+ "\u92C9>S{u4};",
+ "\u92CA>Y{u4};",
+ "\u92CB>Ch{a2}n;",
+ "\u92CC>T{i3}ng;",
+ "\u92CD>B{o2};",
+ "\u92CE>H{a4}n;",
+ "\u92CF>Ji{a2};",
+ "\u92D0>H{o2}ng;",
+ "\u92D1>Cuan;",
+ "\u92D2>Feng;",
+ "\u92D3>Chan;",
+ "\u92D4>W{a3}n;",
+ "\u92D5>Zh{i4};",
+ "\u92D6>Si;",
+ "\u92D7>Xuan;",
+ "\u92D8>W{u2};",
+ "\u92D9>W{u2};",
+ "\u92DA>Tia{o2};",
+ "\u92DB>G{o3}ng;",
+ "\u92DC>Zhu{o2};",
+ "\u92DD>L{uu}{e4};",
+ "\u92DE>X{i2}ng;",
+ "\u92DF>Qian;",
+ "\u92E0>Sh{e4}n;",
+ "\u92E1>H{a2}n;",
+ "\u92E2>L{uu}{e4};",
+ "\u92E3>Xi{e2};",
+ "\u92E4>Ch{u2};",
+ "\u92E5>Zh{e4}ng;",
+ "\u92E6>J{u2};",
+ "\u92E7>Xi{a4}n;",
+ "\u92E8>Ti{e3};",
+ "\u92E9>M{a2}ng;",
+ "\u92EA>Pu;",
+ "\u92EB>L{i2};",
+ "\u92EC>P{a4}n;",
+ "\u92ED>Ru{i4};",
+ "\u92EE>Ch{e2}ng;",
+ "\u92EF>Ga{o4};",
+ "\u92F0>L{i3};",
+ "\u92F1>T{e4};",
+ "\u92F3>Zh{u4};",
+ "\u92F5>Tu;",
+ "\u92F6>Li{u3};",
+ "\u92F7>Zu{i4};",
+ "\u92F8>J{u4};",
+ "\u92F9>Ch{a3}ng;",
+ "\u92FA>Yuan;",
+ "\u92FB>Ji{a4}n;",
+ "\u92FC>Gang;",
+ "\u92FD>Dia{o4};",
+ "\u92FE>Ta{o2};",
+ "\u92FF>Ch{a2}ng;",
+ "\u9300>L{u2}n;",
+ "\u9301>Ku{a3};",
+ "\u9302>L{i2}ng;",
+ "\u9303>Bei;",
+ "\u9304>L{u4};",
+ "\u9305>L{i2};",
+ "\u9306>Qiang;",
+ "\u9307>Po{u2};",
+ "\u9308>Ju{a4}n;",
+ "\u9309>M{i2}n;",
+ "\u930A>Zu{i4};",
+ "\u930B>P{e2}ng;",
+ "\u930C>{A4}n;",
+ "\u930D>P{i2};",
+ "\u930E>Xi{a4}n;",
+ "\u930F>Y{a4};",
+ "\u9310>Zhui;",
+ "\u9311>Le{i4};",
+ "\u9312>A;",
+ "\u9313>Kong;",
+ "\u9314>T{a4};",
+ "\u9315>Kun;",
+ "\u9316>D{u3};",
+ "\u9317>We{i4};",
+ "\u9318>Chu{i2};",
+ "\u9319>Zi;",
+ "\u931A>Zheng;",
+ "\u931B>Ben;",
+ "\u931C>Nie;",
+ "\u931D>C{o2}ng;",
+ "\u931E>Q{u2}n;",
+ "\u931F>T{a2}n;",
+ "\u9320>D{i4}ng;",
+ "\u9321>Q{i2};",
+ "\u9322>Qi{a2}n;",
+ "\u9323>Zhu{o2};",
+ "\u9324>Q{i2};",
+ "\u9325>Y{u4};",
+ "\u9326>J{i3}n;",
+ "\u9327>Gu{a3}n;",
+ "\u9328>Ma{o2};",
+ "\u9329>Chang;",
+ "\u932A>Ti{a3}n;",
+ "\u932B>X{i2};",
+ "\u932C>Li{a4}n;",
+ "\u932D>Ta{o2};",
+ "\u932E>G{u4};",
+ "\u932F>Cu{o4};",
+ "\u9330>Sh{u4};",
+ "\u9331>Zhen;",
+ "\u9332>L{u4};",
+ "\u9333>M{e3}ng;",
+ "\u9334>L{u4};",
+ "\u9335>Hua;",
+ "\u9336>Bia{o3};",
+ "\u9337>G{a2};",
+ "\u9338>La{i2};",
+ "\u9339>K{e3}n;",
+ "\u933C>Na{i4};",
+ "\u933D>W{a3}n;",
+ "\u933E>Z{a4}n;",
+ "\u9340>D{e2};",
+ "\u9341>Xian;",
+ "\u9343>Huo;",
+ "\u9344>Li{a4}ng;",
+ "\u9346>M{e2}n;",
+ "\u9347>Ka{i3};",
+ "\u9348>Ying;",
+ "\u9349>Di;",
+ "\u934A>Li{a4}n;",
+ "\u934B>Guo;",
+ "\u934C>Xi{a3}n;",
+ "\u934D>D{u4};",
+ "\u934E>T{u2};",
+ "\u934F>We{i2};",
+ "\u9350>Cong;",
+ "\u9351>F{u4};",
+ "\u9352>Ro{u2};",
+ "\u9353>J{i2};",
+ "\u9354>{E4};",
+ "\u9355>Ro{u2};",
+ "\u9356>Ch{e3}n;",
+ "\u9357>T{i2};",
+ "\u9358>Zh{a2};",
+ "\u9359>H{o4}ng;",
+ "\u935A>Y{a2}ng;",
+ "\u935B>Du{a4}n;",
+ "\u935C>Xia;",
+ "\u935D>Y{u2};",
+ "\u935E>Keng;",
+ "\u935F>Xing;",
+ "\u9360>Hu{a2}ng;",
+ "\u9361>We{i3};",
+ "\u9362>F{u4};",
+ "\u9363>Zhao;",
+ "\u9364>Ch{a2};",
+ "\u9365>Qi{e4};",
+ "\u9366>Sh{e2};",
+ "\u9367>Hong;",
+ "\u9368>Ku{i2};",
+ "\u9369>Ti{a3}n;",
+ "\u936A>Mo{u2};",
+ "\u936B>Qiao;",
+ "\u936C>Qiao;",
+ "\u936D>Ho{u2};",
+ "\u936E>Tou;",
+ "\u936F>Cong;",
+ "\u9370>Hu{a2}n;",
+ "\u9371>Y{e4};",
+ "\u9372>M{i2}n;",
+ "\u9373>Ji{a4}n;",
+ "\u9374>Duan;",
+ "\u9375>Ji{a4}n;",
+ "\u9376>Song;",
+ "\u9377>Kui;",
+ "\u9378>H{u2};",
+ "\u9379>Xuan;",
+ "\u937A>Du{o3};",
+ "\u937B>Ji{e2};",
+ "\u937C>Zhen;",
+ "\u937D>Bian;",
+ "\u937E>Zhong;",
+ "\u937F>Zi;",
+ "\u9380>Xiu;",
+ "\u9381>Y{e2};",
+ "\u9382>Me{i3};",
+ "\u9383>Pa{i4};",
+ "\u9384>Ai;",
+ "\u9385>Ji{e4};",
+ "\u9387>Me{i2};",
+ "\u9388>Chuo;",
+ "\u9389>T{a4};",
+ "\u938A>B{a4}ng;",
+ "\u938B>Xi{a2};",
+ "\u938C>Li{a2}n;",
+ "\u938D>Su{o3};",
+ "\u938E>X{i4};",
+ "\u938F>Li{u2};",
+ "\u9390>Z{u2};",
+ "\u9391>Y{e4};",
+ "\u9392>No{u4};",
+ "\u9393>Weng;",
+ "\u9394>R{o2}ng;",
+ "\u9395>T{a2}ng;",
+ "\u9396>Su{o3};",
+ "\u9397>Qiang;",
+ "\u9398>G{e2};",
+ "\u9399>Shu{o4};",
+ "\u939A>Chu{i2};",
+ "\u939B>B{o2};",
+ "\u939C>P{a2}n;",
+ "\u939D>S{a4};",
+ "\u939E>B{i4};",
+ "\u939F>S{a3}ng;",
+ "\u93A0>Gang;",
+ "\u93A1>Zi;",
+ "\u93A2>W{u4};",
+ "\u93A3>Y{i4}ng;",
+ "\u93A4>Hu{a3}ng;",
+ "\u93A5>Tia{o2};",
+ "\u93A6>Li{u2};",
+ "\u93A7>Ka{i3};",
+ "\u93A8>S{u3}n;",
+ "\u93A9>Sha;",
+ "\u93AA>Sou;",
+ "\u93AB>W{a4}n;",
+ "\u93AC>Ha{o4};",
+ "\u93AD>Zh{e4}n;",
+ "\u93AE>Zh{e4}n;",
+ "\u93AF>Lu{o3};",
+ "\u93B0>Y{i4};",
+ "\u93B1>Yu{a2}n;",
+ "\u93B2>T{a3}ng;",
+ "\u93B3>Ni{e4};",
+ "\u93B4>X{i2};",
+ "\u93B5>Jia;",
+ "\u93B6>Ge;",
+ "\u93B7>M{a3};",
+ "\u93B8>Juan;",
+ "\u93BB>Su{o3};",
+ "\u93BF>N{a2};",
+ "\u93C0>L{u3};",
+ "\u93C1>Su{o3};",
+ "\u93C2>Ou;",
+ "\u93C3>Z{u2};",
+ "\u93C4>Tu{a2}n;",
+ "\u93C5>Xiu;",
+ "\u93C6>Gu{a4}n;",
+ "\u93C7>Xu{a4}n;",
+ "\u93C8>Li{a4}n;",
+ "\u93C9>Sho{u4};",
+ "\u93CA>A{o2};",
+ "\u93CB>M{a3}n;",
+ "\u93CC>M{o4};",
+ "\u93CD>Lu{o2};",
+ "\u93CE>B{i4};",
+ "\u93CF>We{i4};",
+ "\u93D0>Li{u2};",
+ "\u93D1>D{i2};",
+ "\u93D2>Qiao;",
+ "\u93D3>Cong;",
+ "\u93D4>Y{i2};",
+ "\u93D5>L{u4};",
+ "\u93D6>A{o2};",
+ "\u93D7>Keng;",
+ "\u93D8>Qiang;",
+ "\u93D9>Cui;",
+ "\u93DA>Q{i4};",
+ "\u93DB>Ch{a2}ng;",
+ "\u93DC>Tang;",
+ "\u93DD>M{a4}n;",
+ "\u93DE>Yong;",
+ "\u93DF>Ch{a3}n;",
+ "\u93E0>Feng;",
+ "\u93E1>J{i4}ng;",
+ "\u93E2>Biao;",
+ "\u93E3>Sh{u4};",
+ "\u93E4>Lo{u4};",
+ "\u93E5>Xi{u4};",
+ "\u93E6>Cong;",
+ "\u93E7>L{o2}ng;",
+ "\u93E8>Z{a4}n;",
+ "\u93E9>Ji{a4}n;",
+ "\u93EA>Ca{o2};",
+ "\u93EB>L{i2};",
+ "\u93EC>Xi{a4};",
+ "\u93ED>Xi;",
+ "\u93EE>Kang;",
+ "\u93F0>B{e4}ng;",
+ "\u93F3>Zheng;",
+ "\u93F4>L{u4};",
+ "\u93F5>Hu{a2};",
+ "\u93F6>J{i2};",
+ "\u93F7>P{u2};",
+ "\u93F8>Hu{i4};",
+ "\u93F9>Qiang;",
+ "\u93FA>Po;",
+ "\u93FB>L{i2}n;",
+ "\u93FC>Su{o3};",
+ "\u93FD>Xi{u4};",
+ "\u93FE>S{a3}n;",
+ "\u93FF>Cheng;",
+ "\u9400>Ku{i4};",
+ "\u9401>Si;",
+ "\u9402>Li{u4};",
+ "\u9403>Na{o2};",
+ "\u9404>H{e2}ng;",
+ "\u9405>Pi{e3};",
+ "\u9406>Su{i4};",
+ "\u9407>F{a2}n;",
+ "\u9408>Qia{o2};",
+ "\u9409>Quan;",
+ "\u940A>Y{a2}ng;",
+ "\u940B>T{a4}ng;",
+ "\u940C>Xi{a4}ng;",
+ "\u940D>Ju{e2};",
+ "\u940E>Jiao;",
+ "\u940F>Zun;",
+ "\u9410>Lia{o2};",
+ "\u9411>Ji{e2};",
+ "\u9412>La{o2};",
+ "\u9413>Du{i4};",
+ "\u9414>T{a2}n;",
+ "\u9415>Zan;",
+ "\u9416>Ji;",
+ "\u9417>Ji{a3}n;",
+ "\u9418>Zhong;",
+ "\u9419>Deng;",
+ "\u941A>Y{a4};",
+ "\u941B>Y{i4}ng;",
+ "\u941C>Du{i4};",
+ "\u941D>Ju{e2};",
+ "\u941E>No{u4};",
+ "\u941F>T{i4};",
+ "\u9420>P{u3};",
+ "\u9421>Ti{e3};",
+ "\u9424>D{i3}ng;",
+ "\u9425>Sh{a4}n;",
+ "\u9426>Kai;",
+ "\u9427>Ji{a3}n;",
+ "\u9428>Fe{i4};",
+ "\u9429>Su{i4};",
+ "\u942A>L{u3};",
+ "\u942B>Juan;",
+ "\u942C>Hu{i4};",
+ "\u942D>Y{u4};",
+ "\u942E>Li{a2}n;",
+ "\u942F>Zhu{o2};",
+ "\u9430>Qiao;",
+ "\u9431>Qian;",
+ "\u9432>Zhu{o2};",
+ "\u9433>Le{i2};",
+ "\u9434>B{i4};",
+ "\u9435>Ti{e3};",
+ "\u9436>Hu{a2}n;",
+ "\u9437>Y{e4};",
+ "\u9438>Du{o2};",
+ "\u9439>Gu{o3};",
+ "\u943A>Dang;",
+ "\u943B>J{u4};",
+ "\u943C>F{e2}n;",
+ "\u943D>D{a2};",
+ "\u943E>Be{i4};",
+ "\u943F>Y{i4};",
+ "\u9440>A{i4};",
+ "\u9441>Zong;",
+ "\u9442>X{u4}n;",
+ "\u9443>Dia{o4};",
+ "\u9444>Zh{u4};",
+ "\u9445>H{e2}ng;",
+ "\u9446>Zhu{i4};",
+ "\u9447>Ji;",
+ "\u9448>Nie;",
+ "\u9449>T{a4};",
+ "\u944A>Hu{o4};",
+ "\u944B>Q{i4}ng;",
+ "\u944C>Bin;",
+ "\u944D>Ying;",
+ "\u944E>Ku{i4};",
+ "\u944F>N{i2}ng;",
+ "\u9450>Xu;",
+ "\u9451>Ji{a4}n;",
+ "\u9452>Ji{a4}n;",
+ "\u9454>Ch{a3};",
+ "\u9455>Zh{i4};",
+ "\u9456>Mi{e4};",
+ "\u9457>L{i2};",
+ "\u9458>Le{i2};",
+ "\u9459>Ji;",
+ "\u945A>Zu{a4}n;",
+ "\u945B>Ku{a4}ng;",
+ "\u945C>Sh{a4}ng;",
+ "\u945D>P{e2}ng;",
+ "\u945E>L{a4};",
+ "\u945F>D{u2};",
+ "\u9460>Shu{o4};",
+ "\u9461>Chu{o4};",
+ "\u9462>L{uu4};",
+ "\u9463>Biao;",
+ "\u9464>Ba{o4};",
+ "\u9465>L{u3};",
+ "\u9468>L{o2}ng;",
+ "\u9469>{E4};",
+ "\u946A>L{u2};",
+ "\u946B>Xin;",
+ "\u946C>Ji{a4}n;",
+ "\u946D>L{a4}n;",
+ "\u946E>B{o2};",
+ "\u946F>Jian;",
+ "\u9470>Ya{o4};",
+ "\u9471>Ch{a2}n;",
+ "\u9472>Xiang;",
+ "\u9473>Ji{a4}n;",
+ "\u9474>Xi;",
+ "\u9475>Gu{a4}n;",
+ "\u9476>C{a2}ng;",
+ "\u9477>Ni{e4};",
+ "\u9478>Le{i3};",
+ "\u9479>Cu{a4}n;",
+ "\u947A>Q{u2};",
+ "\u947B>P{a4}n;",
+ "\u947C>Lu{o2};",
+ "\u947D>Zu{a4}n;",
+ "\u947E>Lu{a2}n;",
+ "\u947F>Za{o2};",
+ "\u9480>Ni{e4};",
+ "\u9481>Ju{e2};",
+ "\u9482>T{a3}ng;",
+ "\u9483>Sh{u3};",
+ "\u9484>L{a2}n;",
+ "\u9485>Jin;",
+ "\u9486>Qi{u2};",
+ "\u9487>Y{i3};",
+ "\u9488>Zhen;",
+ "\u9489>Ding;",
+ "\u948A>Zhao;",
+ "\u948B>P{o4};",
+ "\u948C>Dia{o3};",
+ "\u948D>T{u3};",
+ "\u948E>Qian;",
+ "\u948F>Chu{a4}n;",
+ "\u9490>Sh{a4}n;",
+ "\u9491>J{i2};",
+ "\u9492>F{a2}n;",
+ "\u9493>Dia{o4};",
+ "\u9494>M{e2}n;",
+ "\u9495>N{uu3};",
+ "\u9496>X{i2};",
+ "\u9497>Chai;",
+ "\u9498>X{i2}ng;",
+ "\u9499>Ga{i4};",
+ "\u949A>B{u4};",
+ "\u949B>Ta{i4};",
+ "\u949C>J{u4};",
+ "\u949D>D{u4}n;",
+ "\u949E>Chao;",
+ "\u949F>Zhong;",
+ "\u94A0>N{a4};",
+ "\u94A1>Be{i4};",
+ "\u94A2>Gang;",
+ "\u94A3>B{a3}n;",
+ "\u94A4>Qi{a2}n;",
+ "\u94A5>Ya{o4};",
+ "\u94A6>Qin;",
+ "\u94A7>Jun;",
+ "\u94A8>W{u4};",
+ "\u94A9>Gou;",
+ "\u94AA>K{a4}ng;",
+ "\u94AB>Fang;",
+ "\u94AC>Hu{o2};",
+ "\u94AD>To{u3};",
+ "\u94AE>Ni{u3};",
+ "\u94AF>B{a3};",
+ "\u94B0>Y{u4};",
+ "\u94B1>Qi{a2}n;",
+ "\u94B2>Zheng;",
+ "\u94B3>Qi{a2}n;",
+ "\u94B4>Gu;",
+ "\u94B5>Bo;",
+ "\u94B6>E;",
+ "\u94B7>Po;",
+ "\u94B8>B{u4};",
+ "\u94B9>B{a2};",
+ "\u94BA>Yu{e4};",
+ "\u94BB>Zu{a4}n;",
+ "\u94BC>M{u4};",
+ "\u94BD>D{a4}n;",
+ "\u94BE>Ji{a3};",
+ "\u94BF>Di{a4}n;",
+ "\u94C0>Yo{u2};",
+ "\u94C1>Ti{e3};",
+ "\u94C2>B{o2};",
+ "\u94C3>L{i2}ng;",
+ "\u94C4>Shu{o4};",
+ "\u94C5>Qian;",
+ "\u94C6>Li{u3};",
+ "\u94C7>Ba{o4};",
+ "\u94C8>Sh{i4};",
+ "\u94C9>Xu{a4}n;",
+ "\u94CA>Sh{e2};",
+ "\u94CB>B{i4};",
+ "\u94CC>N{i3};",
+ "\u94CD>Pi;",
+ "\u94CE>Du{o2};",
+ "\u94CF>X{i2}ng;",
+ "\u94D0>Ka{o4};",
+ "\u94D1>La{o3};",
+ "\u94D2>{E4}r;",
+ "\u94D3>M{a2}ng;",
+ "\u94D4>Y{a4};",
+ "\u94D5>Yo{u3};",
+ "\u94D6>Ch{e2}ng;",
+ "\u94D7>Ji{a2};",
+ "\u94D8>Y{e2};",
+ "\u94D9>Na{o2};",
+ "\u94DA>Zh{i4};",
+ "\u94DB>Dang;",
+ "\u94DC>T{o2}ng;",
+ "\u94DD>L{uu3};",
+ "\u94DE>Dia{o4};",
+ "\u94DF>Yin;",
+ "\u94E0>Ka{i3};",
+ "\u94E1>Zh{a2};",
+ "\u94E2>Zhu;",
+ "\u94E3>Xi{a3}n;",
+ "\u94E4>T{i3}ng;",
+ "\u94E5>Diu;",
+ "\u94E6>Xian;",
+ "\u94E7>Hu{a2};",
+ "\u94E8>Qu{a2}n;",
+ "\u94E9>Sha;",
+ "\u94EA>Ji{a2};",
+ "\u94EB>Ya{o2};",
+ "\u94EC>G{e4};",
+ "\u94ED>M{i2}ng;",
+ "\u94EE>Zheng;",
+ "\u94EF>S{e4};",
+ "\u94F0>Jia{o3};",
+ "\u94F1>Y{i3};",
+ "\u94F2>Ch{a3}n;",
+ "\u94F3>Ch{o4}ng;",
+ "\u94F4>T{a4}ng;",
+ "\u94F5>An;",
+ "\u94F6>Y{i2}n;",
+ "\u94F7>R{u3};",
+ "\u94F8>Zh{u4};",
+ "\u94F9>La{o2};",
+ "\u94FA>Pu;",
+ "\u94FB>W{u2};",
+ "\u94FC>La{i2};",
+ "\u94FD>T{e4};",
+ "\u94FE>Li{a4}n;",
+ "\u94FF>Keng;",
+ "\u9500>Xiao;",
+ "\u9501>Su{o3};",
+ "\u9502>L{i3};",
+ "\u9503>Zh{e4}ng;",
+ "\u9504>Ch{u2};",
+ "\u9505>Guo;",
+ "\u9506>Ga{o4};",
+ "\u9507>Ti{e3};",
+ "\u9508>Xi{u4};",
+ "\u9509>Cu{o4};",
+ "\u950A>L{uu}{e4};",
+ "\u950B>Feng;",
+ "\u950C>Xin;",
+ "\u950D>Li{u3};",
+ "\u950E>Kai;",
+ "\u950F>Ji{a3}n;",
+ "\u9510>Ru{i4};",
+ "\u9511>T{i4};",
+ "\u9512>L{a2}ng;",
+ "\u9513>Qian;",
+ "\u9514>J{u2};",
+ "\u9515>A;",
+ "\u9516>Qiang;",
+ "\u9517>Du{o3};",
+ "\u9518>Ti{a3}n;",
+ "\u9519>Cu{o4};",
+ "\u951A>Ma{o2};",
+ "\u951B>Ben;",
+ "\u951C>Q{i2};",
+ "\u951D>D{e2};",
+ "\u951E>Ku{a3};",
+ "\u951F>Kun;",
+ "\u9520>Chang;",
+ "\u9521>X{i2};",
+ "\u9522>G{u4};",
+ "\u9523>Lu{o2};",
+ "\u9524>Chu{i2};",
+ "\u9525>Zhui;",
+ "\u9526>J{i3}n;",
+ "\u9527>Zh{i4};",
+ "\u9528>Xian;",
+ "\u9529>Ju{a4}n;",
+ "\u952A>Huo;",
+ "\u952B>Po{u2};",
+ "\u952C>T{a2}n;",
+ "\u952D>D{i4}ng;",
+ "\u952E>Ji{a4}n;",
+ "\u952F>J{u4};",
+ "\u9530>M{e3}ng;",
+ "\u9531>Zi;",
+ "\u9532>Qi{e4};",
+ "\u9533>Ying;",
+ "\u9534>Ka{i3};",
+ "\u9535>Qiang;",
+ "\u9536>Song;",
+ "\u9537>{E4};",
+ "\u9538>Ch{a2};",
+ "\u9539>Qiao;",
+ "\u953A>Zhong;",
+ "\u953B>Du{a4}n;",
+ "\u953C>Sou;",
+ "\u953D>Hu{a2}ng;",
+ "\u953E>Hu{a2}n;",
+ "\u953F>Ai;",
+ "\u9540>D{u4};",
+ "\u9541>Me{i3};",
+ "\u9542>Lo{u4};",
+ "\u9543>Zi;",
+ "\u9544>Fe{i4};",
+ "\u9545>Me{i2};",
+ "\u9546>M{o4};",
+ "\u9547>Zh{e4}n;",
+ "\u9548>B{o2};",
+ "\u9549>G{e2};",
+ "\u954A>Ni{e4};",
+ "\u954B>T{a3}ng;",
+ "\u954C>Juan;",
+ "\u954D>Ni{e4};",
+ "\u954E>N{a2};",
+ "\u954F>Li{u2};",
+ "\u9550>Ha{o4};",
+ "\u9551>B{a4}ng;",
+ "\u9552>Y{i4};",
+ "\u9553>Jia;",
+ "\u9554>Bin;",
+ "\u9555>R{o2}ng;",
+ "\u9556>Biao;",
+ "\u9557>Tang;",
+ "\u9558>M{a4}n;",
+ "\u9559>Lu{o2};",
+ "\u955A>B{e4}ng;",
+ "\u955B>Yong;",
+ "\u955C>J{i4}ng;",
+ "\u955D>D{i2};",
+ "\u955E>Z{u2};",
+ "\u955F>Xu{a4}n;",
+ "\u9560>Li{u2};",
+ "\u9561>T{a2}n;",
+ "\u9562>Ju{e2};",
+ "\u9563>Lia{o2};",
+ "\u9564>P{u2};",
+ "\u9565>L{u3};",
+ "\u9566>Du{i4};",
+ "\u9567>L{a4}n;",
+ "\u9568>P{u3};",
+ "\u9569>Cu{a4}n;",
+ "\u956A>Qiang;",
+ "\u956B>Deng;",
+ "\u956C>Hu{o4};",
+ "\u956D>Le{i2};",
+ "\u956E>Hu{a2}n;",
+ "\u956F>Zhu{o2};",
+ "\u9570>Li{a2}n;",
+ "\u9571>Y{i4};",
+ "\u9572>Ch{a3};",
+ "\u9573>Biao;",
+ "\u9574>L{a4};",
+ "\u9575>Ch{a2}n;",
+ "\u9576>Xiang;",
+ "\u9577>Ch{a2}ng;",
+ "\u9578>Ch{a2}ng;",
+ "\u9579>Ji{u3};",
+ "\u957A>A{o3};",
+ "\u957B>Di{e2};",
+ "\u957C>Qu;",
+ "\u957D>Lia{o3};",
+ "\u957E>M{i2};",
+ "\u957F>Ch{a2}ng;",
+ "\u9580>M{e2}n;",
+ "\u9581>M{a4};",
+ "\u9582>Shuan;",
+ "\u9583>Sh{a3}n;",
+ "\u9584>Hu{o4};",
+ "\u9585>M{e2}n;",
+ "\u9586>Y{a4}n;",
+ "\u9587>B{i4};",
+ "\u9588>H{a4}n;",
+ "\u9589>B{i4};",
+ "\u958B>Kai;",
+ "\u958C>K{a4}ng;",
+ "\u958D>Beng;",
+ "\u958E>H{o2}ng;",
+ "\u958F>R{u4}n;",
+ "\u9590>S{a4}n;",
+ "\u9591>Xi{a2}n;",
+ "\u9592>Xi{a2}n;",
+ "\u9593>Jian;",
+ "\u9594>M{i3}n;",
+ "\u9595>Xia;",
+ "\u9597>Do{u4};",
+ "\u9598>Zh{a2};",
+ "\u9599>Na{o4};",
+ "\u959A>Jian;",
+ "\u959B>Peng;",
+ "\u959C>Xi{a3};",
+ "\u959D>L{i2}ng;",
+ "\u959E>Bi{a4}n;",
+ "\u959F>B{i4};",
+ "\u95A0>R{u4}n;",
+ "\u95A1>H{e2};",
+ "\u95A2>Guan;",
+ "\u95A3>G{e2};",
+ "\u95A4>G{e2};",
+ "\u95A5>F{a2};",
+ "\u95A6>Ch{u4};",
+ "\u95A7>H{o4}ng;",
+ "\u95A8>Gui;",
+ "\u95A9>M{i3}n;",
+ "\u95AB>K{u3}n;",
+ "\u95AC>L{a3}ng;",
+ "\u95AD>L{uu2};",
+ "\u95AE>T{i2}ng;",
+ "\u95AF>Sh{a4};",
+ "\u95B0>J{u2};",
+ "\u95B1>Yu{e4};",
+ "\u95B2>Yu{e4};",
+ "\u95B3>Ch{a3}n;",
+ "\u95B4>Q{u4};",
+ "\u95B5>L{i4}n;",
+ "\u95B6>Chang;",
+ "\u95B7>Sha{i4};",
+ "\u95B8>K{u3}n;",
+ "\u95B9>Yan;",
+ "\u95BA>M{i2}n;",
+ "\u95BB>Y{a2}n;",
+ "\u95BC>{E4};",
+ "\u95BD>Hun;",
+ "\u95BE>Y{u4};",
+ "\u95BF>W{e2}n;",
+ "\u95C0>Xi{a4}ng;",
+ "\u95C1>Bao;",
+ "\u95C2>Xi{a4}ng;",
+ "\u95C3>Q{u4};",
+ "\u95C4>Ya{o3};",
+ "\u95C5>W{e2}n;",
+ "\u95C6>B{a3}n;",
+ "\u95C7>{A4}n;",
+ "\u95C8>We{i2};",
+ "\u95C9>Yin;",
+ "\u95CA>Ku{o4};",
+ "\u95CB>Qu{e4};",
+ "\u95CC>L{a2}n;",
+ "\u95CD>Du;",
+ "\u95D0>Ti{a2}n;",
+ "\u95D1>Ni{e4};",
+ "\u95D2>T{a4};",
+ "\u95D3>Ka{i3};",
+ "\u95D4>H{e2};",
+ "\u95D5>Qu{e4};",
+ "\u95D6>Chu{a3}ng;",
+ "\u95D7>Guan;",
+ "\u95D8>Do{u4};",
+ "\u95D9>Q{i3};",
+ "\u95DA>Kui;",
+ "\u95DB>T{a2}ng;",
+ "\u95DC>Guan;",
+ "\u95DD>Pia{o2};",
+ "\u95DE>K{a4}n;",
+ "\u95DF>X{i4};",
+ "\u95E0>Hu{i4};",
+ "\u95E1>Ch{a3}n;",
+ "\u95E2>P{i4};",
+ "\u95E3>D{a4}ng;",
+ "\u95E4>Hu{a2}n;",
+ "\u95E5>T{a4};",
+ "\u95E6>W{e2}n;",
+ "\u95E8>M{e2}n;",
+ "\u95E9>Shuan;",
+ "\u95EA>Sh{a3}n;",
+ "\u95EB>Y{a4}n;",
+ "\u95EC>H{a4}n;",
+ "\u95ED>B{i4};",
+ "\u95EE>W{e4}n;",
+ "\u95EF>Chu{a3}ng;",
+ "\u95F0>R{u4}n;",
+ "\u95F1>We{i2};",
+ "\u95F2>Xi{a2}n;",
+ "\u95F3>H{o2}ng;",
+ "\u95F4>Jian;",
+ "\u95F5>M{i3}n;",
+ "\u95F6>K{a4}ng;",
+ "\u95F7>M{e4}n;",
+ "\u95F8>Zh{a2};",
+ "\u95F9>Na{o4};",
+ "\u95FA>Gui;",
+ "\u95FB>W{e2}n;",
+ "\u95FC>T{a4};",
+ "\u95FD>M{i3}n;",
+ "\u95FE>L{uu2};",
+ "\u95FF>Ka{i3};",
+ "\u9600>F{a2};",
+ "\u9601>G{e2};",
+ "\u9602>H{e2};",
+ "\u9603>K{u3}n;",
+ "\u9604>Jiu;",
+ "\u9605>Yu{e4};",
+ "\u9606>L{a3}ng;",
+ "\u9607>Du;",
+ "\u9608>Y{u4};",
+ "\u9609>Yan;",
+ "\u960A>Chang;",
+ "\u960B>X{i4};",
+ "\u960C>W{e2}n;",
+ "\u960D>Hun;",
+ "\u960E>Y{a2}n;",
+ "\u960F>{E4};",
+ "\u9610>Ch{a3}n;",
+ "\u9611>L{a2}n;",
+ "\u9612>Q{u4};",
+ "\u9613>Hu{i4};",
+ "\u9614>Ku{o4};",
+ "\u9615>Qu{e4};",
+ "\u9616>G{e2};",
+ "\u9617>Ti{a2}n;",
+ "\u9618>T{a4};",
+ "\u9619>Qu{e4};",
+ "\u961A>K{a4}n;",
+ "\u961B>Hu{a2}n;",
+ "\u961C>F{u4};",
+ "\u961D>F{u4};",
+ "\u961E>L{e4};",
+ "\u961F>Du{i4};",
+ "\u9620>X{i4}n;",
+ "\u9621>Qian;",
+ "\u9622>W{u4};",
+ "\u9623>Y{i4};",
+ "\u9624>Tu{o2};",
+ "\u9625>Yin;",
+ "\u9626>Y{a2}ng;",
+ "\u9627>Do{u3};",
+ "\u9628>{E4};",
+ "\u9629>Sheng;",
+ "\u962A>B{a3}n;",
+ "\u962B>Pe{i2};",
+ "\u962C>Keng;",
+ "\u962D>Y{u3}n;",
+ "\u962E>Ru{a3}n;",
+ "\u962F>Zh{i3};",
+ "\u9630>P{i2};",
+ "\u9631>J{i3}ng;",
+ "\u9632>F{a2}ng;",
+ "\u9633>Y{a2}ng;",
+ "\u9634>Yin;",
+ "\u9635>Zh{e4}n;",
+ "\u9636>Jie;",
+ "\u9637>Cheng;",
+ "\u9638>{E4};",
+ "\u9639>Qu;",
+ "\u963A>D{i3};",
+ "\u963B>Z{u3};",
+ "\u963C>Zu{o4};",
+ "\u963D>Di{a4}n;",
+ "\u963E>L{i3}ng;",
+ "\u963F>A;",
+ "\u9640>Tu{o2};",
+ "\u9641>Tu{o2};",
+ "\u9642>Po;",
+ "\u9643>B{i3}ng;",
+ "\u9644>F{u4};",
+ "\u9645>J{i4};",
+ "\u9646>L{u4};",
+ "\u9647>L{o3}ng;",
+ "\u9648>Ch{e2}n;",
+ "\u9649>X{i2}ng;",
+ "\u964A>Du{o4};",
+ "\u964B>Lo{u4};",
+ "\u964C>M{o4};",
+ "\u964D>Ji{a4}ng;",
+ "\u964E>Shu;",
+ "\u964F>Du{o4};",
+ "\u9650>Xi{a4}n;",
+ "\u9651>{E2}r;",
+ "\u9652>Gu{i3};",
+ "\u9653>Yu;",
+ "\u9654>Gai;",
+ "\u9655>Sh{a3}n;",
+ "\u9656>X{u4}n;",
+ "\u9657>Qia{o4};",
+ "\u9658>X{i2}ng;",
+ "\u9659>Ch{u2}n;",
+ "\u965A>F{u4};",
+ "\u965B>B{i4};",
+ "\u965C>Xi{a2};",
+ "\u965D>Sh{a3}n;",
+ "\u965E>Sheng;",
+ "\u965F>Zh{i4};",
+ "\u9660>Pu;",
+ "\u9661>Do{u3};",
+ "\u9662>Yu{a4}n;",
+ "\u9663>Zh{e4}n;",
+ "\u9664>Ch{u2};",
+ "\u9665>Xi{a4}n;",
+ "\u9667>Ni{e4};",
+ "\u9668>Y{u3}n;",
+ "\u9669>Xi{a3}n;",
+ "\u966A>Pe{i2};",
+ "\u966B>Pe{i2};",
+ "\u966C>Zou;",
+ "\u966D>Yi;",
+ "\u966E>Du{i3};",
+ "\u966F>L{u2}n;",
+ "\u9670>Yin;",
+ "\u9671>Ju;",
+ "\u9672>Chu{i2};",
+ "\u9673>Ch{e2}n;",
+ "\u9674>P{i2};",
+ "\u9675>L{i2}ng;",
+ "\u9676>Ta{o2};",
+ "\u9677>Xi{a4}n;",
+ "\u9678>L{u4};",
+ "\u9679>Sheng;",
+ "\u967A>Xi{a3}n;",
+ "\u967B>Yin;",
+ "\u967C>Zh{u3};",
+ "\u967D>Y{a2}ng;",
+ "\u967E>R{e2}ng;",
+ "\u967F>Sh{a3}n;",
+ "\u9680>Ch{o2}ng;",
+ "\u9681>Y{a4}n;",
+ "\u9682>Yin;",
+ "\u9683>Y{u2};",
+ "\u9684>T{i2};",
+ "\u9685>Y{u2};",
+ "\u9686>L{o2}ng;",
+ "\u9687>Wei;",
+ "\u9688>Wei;",
+ "\u9689>Ni{e4};",
+ "\u968A>Du{i4};",
+ "\u968B>Su{i2};",
+ "\u968C>{a3}n;",
+ "\u968D>Hu{a2}ng;",
+ "\u968E>Jie;",
+ "\u968F>Su{i2};",
+ "\u9690>Y{i3}n;",
+ "\u9691>Gai;",
+ "\u9692>Y{a3}n;",
+ "\u9693>Hui;",
+ "\u9694>G{e2};",
+ "\u9695>Y{u3}n;",
+ "\u9696>W{u4};",
+ "\u9697>We{i3};",
+ "\u9698>A{i4};",
+ "\u9699>X{i4};",
+ "\u969A>T{a2}ng;",
+ "\u969B>J{i4};",
+ "\u969C>Zh{a4}ng;",
+ "\u969D>Da{o3};",
+ "\u969E>A{o2};",
+ "\u969F>X{i4};",
+ "\u96A0>Y{i3}n;",
+ "\u96A2>Ra{o4};",
+ "\u96A3>L{i2}n;",
+ "\u96A4>Tu{i2};",
+ "\u96A5>D{e4}ng;",
+ "\u96A6>P{i3};",
+ "\u96A7>Su{i4};",
+ "\u96A8>Su{i2};",
+ "\u96A9>Y{u4};",
+ "\u96AA>Xi{a3}n;",
+ "\u96AB>Fen;",
+ "\u96AC>N{i3};",
+ "\u96AD>{E2}r;",
+ "\u96AE>Ji;",
+ "\u96AF>Da{o3};",
+ "\u96B0>X{i2};",
+ "\u96B1>Y{i3}n;",
+ "\u96B2>{E2};",
+ "\u96B3>Hui;",
+ "\u96B4>L{o3}ng;",
+ "\u96B5>Xi;",
+ "\u96B6>L{i4};",
+ "\u96B7>L{i4};",
+ "\u96B8>L{i4};",
+ "\u96B9>Zhui;",
+ "\u96BA>H{e4};",
+ "\u96BB>Zhi;",
+ "\u96BC>Zh{u3}n;",
+ "\u96BD>J{u4}n;",
+ "\u96BE>N{a2}n;",
+ "\u96BF>Y{i4};",
+ "\u96C0>Qu{e4};",
+ "\u96C1>Y{a4}n;",
+ "\u96C2>Qi{a2}n;",
+ "\u96C3>Y{a3};",
+ "\u96C4>Xi{o2}ng;",
+ "\u96C5>Y{a3};",
+ "\u96C6>J{i2};",
+ "\u96C7>G{u4};",
+ "\u96C8>Hu{a2}n;",
+ "\u96C9>Zh{i4};",
+ "\u96CA>Go{u4};",
+ "\u96CB>J{u4}n;",
+ "\u96CC>C{i2};",
+ "\u96CD>Yong;",
+ "\u96CE>Ju;",
+ "\u96CF>Ch{u2};",
+ "\u96D0>Hu;",
+ "\u96D1>Z{a2};",
+ "\u96D2>Lu{o4};",
+ "\u96D3>Y{u2};",
+ "\u96D4>Cho{u2};",
+ "\u96D5>Diao;",
+ "\u96D6>Sui;",
+ "\u96D7>H{a4}n;",
+ "\u96D8>Hu{o4};",
+ "\u96D9>Shuang;",
+ "\u96DA>Gu{a4}n;",
+ "\u96DB>Ch{u2};",
+ "\u96DC>Z{a2};",
+ "\u96DD>Yong;",
+ "\u96DE>Ji;",
+ "\u96DF>Xi;",
+ "\u96E0>Cho{u2};",
+ "\u96E1>Li{u4};",
+ "\u96E2>L{i2};",
+ "\u96E3>N{a2}n;",
+ "\u96E4>Xu{e2};",
+ "\u96E5>Z{a2};",
+ "\u96E6>J{i2};",
+ "\u96E7>J{i2};",
+ "\u96E8>Y{u3};",
+ "\u96E9>Y{u2};",
+ "\u96EA>Xu{e3};",
+ "\u96EB>N{a3};",
+ "\u96EC>Fo{u3};",
+ "\u96ED>S{e4};",
+ "\u96EE>M{u4};",
+ "\u96EF>W{e2}n;",
+ "\u96F0>Fen;",
+ "\u96F1>P{a2}ng;",
+ "\u96F2>Y{u2}n;",
+ "\u96F3>L{i4};",
+ "\u96F4>L{i4};",
+ "\u96F5>{a3}ng;",
+ "\u96F6>L{i2}ng;",
+ "\u96F7>Le{i2};",
+ "\u96F8>{A2}n;",
+ "\u96F9>Ba{o2};",
+ "\u96FA>M{e2}ng;",
+ "\u96FB>Di{a4}n;",
+ "\u96FC>D{a4}ng;",
+ "\u96FD>X{i2}ng;",
+ "\u96FE>W{u4};",
+ "\u96FF>Zha{o4};",
+ "\u9700>Xu;",
+ "\u9701>J{i4};",
+ "\u9702>M{u4};",
+ "\u9703>Ch{e2}n;",
+ "\u9704>Xiao;",
+ "\u9705>Zh{a2};",
+ "\u9706>T{i2}ng;",
+ "\u9707>Zh{e4}n;",
+ "\u9708>Pe{i4};",
+ "\u9709>Me{i2};",
+ "\u970A>L{i2}ng;",
+ "\u970B>Qi;",
+ "\u970C>Chou;",
+ "\u970D>Hu{o4};",
+ "\u970E>Sh{a4};",
+ "\u970F>Fei;",
+ "\u9710>Weng;",
+ "\u9711>Zhan;",
+ "\u9712>Yin;",
+ "\u9713>N{i2};",
+ "\u9714>Cho{u4};",
+ "\u9715>T{u2}n;",
+ "\u9716>L{i2}n;",
+ "\u9718>D{o4}ng;",
+ "\u9719>Ying;",
+ "\u971A>W{u4};",
+ "\u971B>L{i2}ng;",
+ "\u971C>Shuang;",
+ "\u971D>L{i2}ng;",
+ "\u971E>Xi{a2};",
+ "\u971F>H{o2}ng;",
+ "\u9720>Yin;",
+ "\u9721>M{o4};",
+ "\u9722>Ma{i4};",
+ "\u9723>Y{u3}n;",
+ "\u9724>Li{u4};",
+ "\u9725>M{e4}ng;",
+ "\u9726>Bin;",
+ "\u9727>W{u4};",
+ "\u9728>We{i4};",
+ "\u9729>Hu{o4};",
+ "\u972A>Y{i2}n;",
+ "\u972B>X{i2};",
+ "\u972C>Y{i4};",
+ "\u972D>A{i3};",
+ "\u972E>D{a4}n;",
+ "\u972F>D{e4}ng;",
+ "\u9730>Xi{a4}n;",
+ "\u9731>Y{u4};",
+ "\u9732>L{u4};",
+ "\u9733>L{o2}ng;",
+ "\u9734>Da{i4};",
+ "\u9735>J{i2};",
+ "\u9736>P{a2}ng;",
+ "\u9737>Y{a2}ng;",
+ "\u9738>B{a4};",
+ "\u9739>Pi;",
+ "\u973A>We{i2};",
+ "\u973C>X{i3};",
+ "\u973D>J{i4};",
+ "\u973E>Ma{i2};",
+ "\u973F>M{e4}ng;",
+ "\u9740>M{e2}ng;",
+ "\u9741>Le{i2};",
+ "\u9742>L{i4};",
+ "\u9743>Hu{o4};",
+ "\u9744>A{i3};",
+ "\u9745>Fe{i4};",
+ "\u9746>Da{i4};",
+ "\u9747>L{o2}ng;",
+ "\u9748>L{i2}ng;",
+ "\u9749>A{i4};",
+ "\u974A>Feng;",
+ "\u974B>L{i4};",
+ "\u974C>Ba{o3};",
+ "\u974E>H{e4};",
+ "\u974F>H{e4};",
+ "\u9750>B{i4}ng;",
+ "\u9751>Qing;",
+ "\u9752>Qing;",
+ "\u9753>J{i4}ng;",
+ "\u9754>Tian;",
+ "\u9755>Zhen;",
+ "\u9756>J{i4}ng;",
+ "\u9757>Ch{e4}ng;",
+ "\u9758>Q{i4}ng;",
+ "\u9759>J{i4}ng;",
+ "\u975A>J{i4}ng;",
+ "\u975B>Di{a4}n;",
+ "\u975C>J{i4}ng;",
+ "\u975D>Tian;",
+ "\u975E>Fei;",
+ "\u975F>Fei;",
+ "\u9760>Ka{o4};",
+ "\u9761>M{i3};",
+ "\u9762>Mi{a4}n;",
+ "\u9763>Mi{a4}n;",
+ "\u9764>Pa{o4};",
+ "\u9765>Y{e4};",
+ "\u9766>Ti{a3}n;",
+ "\u9767>Hu{i4};",
+ "\u9768>Y{e4};",
+ "\u9769>G{e2};",
+ "\u976A>Ding;",
+ "\u976B>Cha;",
+ "\u976C>Jian;",
+ "\u976D>R{e4}n;",
+ "\u976E>D{i2};",
+ "\u976F>D{u4};",
+ "\u9770>W{u4};",
+ "\u9771>R{e4}n;",
+ "\u9772>Q{i2}n;",
+ "\u9773>J{i4}n;",
+ "\u9774>Xue;",
+ "\u9775>Ni{u3};",
+ "\u9776>B{a3};",
+ "\u9777>Y{i3}n;",
+ "\u9778>S{a3};",
+ "\u9779>N{a4};",
+ "\u977A>M{o4};",
+ "\u977B>Z{u3};",
+ "\u977C>D{a2};",
+ "\u977D>B{a4}n;",
+ "\u977E>Y{i4};",
+ "\u977F>Ya{o4};",
+ "\u9780>Ta{o2};",
+ "\u9781>Tu{o2};",
+ "\u9782>Ji{a2};",
+ "\u9783>H{o2}ng;",
+ "\u9784>Pa{o2};",
+ "\u9785>Y{a3}ng;",
+ "\u9787>Yin;",
+ "\u9788>Ji{a2};",
+ "\u9789>Ta{o2};",
+ "\u978A>J{i2};",
+ "\u978B>Xi{e2};",
+ "\u978C>An;",
+ "\u978D>An;",
+ "\u978E>H{e2}n;",
+ "\u978F>G{o3}ng;",
+ "\u9791>D{a2};",
+ "\u9792>Qiao;",
+ "\u9793>Ting;",
+ "\u9794>W{a3}n;",
+ "\u9795>Y{i4}ng;",
+ "\u9796>Sui;",
+ "\u9797>Tia{o2};",
+ "\u9798>Qia{o4};",
+ "\u9799>Xu{a4}n;",
+ "\u979A>K{o4}ng;",
+ "\u979B>B{e3}ng;",
+ "\u979C>T{a4};",
+ "\u979D>Zh{a3}ng;",
+ "\u979E>B{i3}ng;",
+ "\u979F>Ku{o4};",
+ "\u97A0>J{u2};",
+ "\u97A1>L{a1};",
+ "\u97A2>Xi{e4};",
+ "\u97A3>Ro{u2};",
+ "\u97A4>Bang;",
+ "\u97A5>Y{i4};",
+ "\u97A6>Qiu;",
+ "\u97A7>Qiu;",
+ "\u97A8>H{e2};",
+ "\u97A9>Xia{o4};",
+ "\u97AA>M{u4};",
+ "\u97AB>J{u2};",
+ "\u97AC>Jian;",
+ "\u97AD>Bian;",
+ "\u97AE>Di;",
+ "\u97AF>Jian;",
+ "\u97B1>Tao;",
+ "\u97B2>Gou;",
+ "\u97B3>T{a4};",
+ "\u97B4>Be{i4};",
+ "\u97B5>Xi{e2};",
+ "\u97B6>P{a2}n;",
+ "\u97B7>G{e2};",
+ "\u97B8>B{i4};",
+ "\u97B9>Ku{o4};",
+ "\u97BA>Tang;",
+ "\u97BB>Lo{u2};",
+ "\u97BC>Gu{i4};",
+ "\u97BD>Qia{o2};",
+ "\u97BE>Xue;",
+ "\u97BF>Ji;",
+ "\u97C0>Jian;",
+ "\u97C1>Jiang;",
+ "\u97C2>Ch{a4}n;",
+ "\u97C3>D{a2};",
+ "\u97C4>Hu{o4};",
+ "\u97C5>Xi{a3}n;",
+ "\u97C6>Qian;",
+ "\u97C7>D{u2};",
+ "\u97C8>W{a4};",
+ "\u97C9>Jian;",
+ "\u97CA>L{a2}n;",
+ "\u97CB>We{i2};",
+ "\u97CC>R{e4}n;",
+ "\u97CD>F{u2};",
+ "\u97CE>Me{i4};",
+ "\u97CF>Ju{a4}n;",
+ "\u97D0>G{e2};",
+ "\u97D1>We{i3};",
+ "\u97D2>Qia{o4};",
+ "\u97D3>H{a2}n;",
+ "\u97D4>Ch{a4}ng;",
+ "\u97D6>Ro{u2};",
+ "\u97D7>X{u4}n;",
+ "\u97D8>Sh{e4};",
+ "\u97D9>We{i3};",
+ "\u97DA>G{e2};",
+ "\u97DB>Be{i4};",
+ "\u97DC>Tao;",
+ "\u97DD>Gou;",
+ "\u97DE>Y{u4}n;",
+ "\u97E0>B{i4};",
+ "\u97E1>We{i3};",
+ "\u97E2>Hu{i4};",
+ "\u97E3>D{u2};",
+ "\u97E4>W{a4};",
+ "\u97E5>D{u2};",
+ "\u97E6>We{i2};",
+ "\u97E7>R{e4}n;",
+ "\u97E8>F{u2};",
+ "\u97E9>H{a2}n;",
+ "\u97EA>We{i3};",
+ "\u97EB>Y{u4}n;",
+ "\u97EC>Tao;",
+ "\u97ED>Ji{u3};",
+ "\u97EE>Ji{u3};",
+ "\u97EF>Xian;",
+ "\u97F0>Xi{e4};",
+ "\u97F1>Xian;",
+ "\u97F2>Ji;",
+ "\u97F3>Yin;",
+ "\u97F4>Z{a2};",
+ "\u97F5>Y{u4}n;",
+ "\u97F6>Sha{o2};",
+ "\u97F7>L{e4};",
+ "\u97F8>P{e2}ng;",
+ "\u97F9>H{e2}ng;",
+ "\u97FA>Ying;",
+ "\u97FB>Y{u4}n;",
+ "\u97FC>P{e2}ng;",
+ "\u97FD>Yin;",
+ "\u97FE>Yin;",
+ "\u97FF>Xi{a3}ng;",
+ "\u9800>H{u4};",
+ "\u9801>Y{e4};",
+ "\u9802>D{i3}ng;",
+ "\u9803>Q{i3}ng;",
+ "\u9804>P{a4}n;",
+ "\u9805>Xi{a4}ng;",
+ "\u9806>Sh{u4}n;",
+ "\u9807>Han;",
+ "\u9808>Xu;",
+ "\u9809>Y{i2};",
+ "\u980A>X{u4};",
+ "\u980B>G{u4};",
+ "\u980C>S{o4}ng;",
+ "\u980D>Ku{i3};",
+ "\u980E>Q{i2};",
+ "\u980F>H{a2}ng;",
+ "\u9810>Y{u4};",
+ "\u9811>W{a2}n;",
+ "\u9812>Ban;",
+ "\u9813>D{u4}n;",
+ "\u9814>D{i2};",
+ "\u9815>Dan;",
+ "\u9816>P{a4}n;",
+ "\u9817>P{o3};",
+ "\u9818>L{i3}ng;",
+ "\u9819>C{e4};",
+ "\u981A>J{i3}ng;",
+ "\u981B>Le{i3};",
+ "\u981C>H{e2};",
+ "\u981D>Qiao;",
+ "\u981E>{E4};",
+ "\u981F>{E2};",
+ "\u9820>We{i3};",
+ "\u9821>Ji{e2};",
+ "\u9822>Gua;",
+ "\u9823>Sh{e3}n;",
+ "\u9824>Y{i2};",
+ "\u9825>Sh{e3}n;",
+ "\u9826>Ha{i2};",
+ "\u9827>Dui;",
+ "\u9828>Pian;",
+ "\u9829>Ping;",
+ "\u982A>Le{i4};",
+ "\u982B>F{u3};",
+ "\u982C>Ji{a2};",
+ "\u982D>To{u2};",
+ "\u982E>Hu{i4};",
+ "\u982F>Ku{i2};",
+ "\u9830>Ji{a2};",
+ "\u9831>L{e4};",
+ "\u9832>Ti{a1}n;",
+ "\u9833>Cheng;",
+ "\u9834>Y{i3}ng;",
+ "\u9835>Jun;",
+ "\u9836>H{u2};",
+ "\u9837>H{a4}n;",
+ "\u9838>J{i3}ng;",
+ "\u9839>Tu{i2};",
+ "\u983A>Tu{i2};",
+ "\u983B>P{i2}n;",
+ "\u983C>La{i4};",
+ "\u983D>Tu{i2};",
+ "\u983E>Zi;",
+ "\u983F>Zi;",
+ "\u9840>Chu{i2};",
+ "\u9841>D{i4}ng;",
+ "\u9842>La{i4};",
+ "\u9843>Y{a2}n;",
+ "\u9844>H{a4}n;",
+ "\u9845>Jian;",
+ "\u9846>Ke;",
+ "\u9847>Cu{i4};",
+ "\u9848>Ji{o3}ng;",
+ "\u9849>Qin;",
+ "\u984A>Y{i2};",
+ "\u984B>Sai;",
+ "\u984C>T{i2};",
+ "\u984D>{E2};",
+ "\u984E>{E4};",
+ "\u984F>Y{a2}n;",
+ "\u9850>H{u2}n;",
+ "\u9851>K{a3}n;",
+ "\u9852>Y{o2}ng;",
+ "\u9853>Zhuan;",
+ "\u9854>Y{a2}n;",
+ "\u9855>Xi{a3}n;",
+ "\u9856>X{i4}n;",
+ "\u9857>Y{i3};",
+ "\u9858>Yu{a4}n;",
+ "\u9859>S{a3}ng;",
+ "\u985A>Dian;",
+ "\u985B>Dian;",
+ "\u985C>Ji{a3}ng;",
+ "\u985D>Ku;",
+ "\u985E>Le{i4};",
+ "\u985F>Lia{o2};",
+ "\u9860>Pia{o4};",
+ "\u9861>Y{i4};",
+ "\u9862>M{a2}n;",
+ "\u9863>Qi;",
+ "\u9864>Ra{o4};",
+ "\u9865>Ha{o4};",
+ "\u9866>Qia{o2};",
+ "\u9867>G{u4};",
+ "\u9868>X{u4}n;",
+ "\u9869>Qian;",
+ "\u986A>Hui;",
+ "\u986B>Zh{a4}n;",
+ "\u986C>R{u2};",
+ "\u986D>Hong;",
+ "\u986E>Bin;",
+ "\u986F>Xi{a3}n;",
+ "\u9870>P{i2}n;",
+ "\u9871>L{u2};",
+ "\u9872>L{a3}n;",
+ "\u9873>Ni{e4};",
+ "\u9874>Qu{a2}n;",
+ "\u9875>Y{e4};",
+ "\u9876>D{i3}ng;",
+ "\u9877>Q{i3}ng;",
+ "\u9878>Han;",
+ "\u9879>Xi{a4}ng;",
+ "\u987A>Sh{u4}n;",
+ "\u987B>Xu;",
+ "\u987C>X{u4};",
+ "\u987D>W{a2}n;",
+ "\u987E>G{u4};",
+ "\u987F>D{u4}n;",
+ "\u9880>Q{i2};",
+ "\u9881>Ban;",
+ "\u9882>S{o4}ng;",
+ "\u9883>H{a2}ng;",
+ "\u9884>Y{u4};",
+ "\u9885>L{u2};",
+ "\u9886>L{i3}ng;",
+ "\u9887>P{o3};",
+ "\u9888>J{i3}ng;",
+ "\u9889>Ji{e2};",
+ "\u988A>Ji{a2};",
+ "\u988B>Ti{a1}n;",
+ "\u988C>H{a4}n;",
+ "\u988D>Y{i3}ng;",
+ "\u988E>Ji{o3}ng;",
+ "\u988F>Ha{i2};",
+ "\u9890>Y{i2};",
+ "\u9891>P{i2}n;",
+ "\u9892>Hu{i4};",
+ "\u9893>Tu{i2};",
+ "\u9894>H{a4}n;",
+ "\u9895>Y{i3}ng;",
+ "\u9896>Y{i3}ng;",
+ "\u9897>Ke;",
+ "\u9898>T{i2};",
+ "\u9899>Y{o2}ng;",
+ "\u989A>{E4};",
+ "\u989B>Zhuan;",
+ "\u989C>Y{a2}n;",
+ "\u989D>{E2};",
+ "\u989E>Ni{e4};",
+ "\u989F>M{a2}n;",
+ "\u98A0>Dian;",
+ "\u98A1>S{a3}ng;",
+ "\u98A2>Ha{o4};",
+ "\u98A3>Le{i4};",
+ "\u98A4>Zh{a4}n;",
+ "\u98A5>R{u2};",
+ "\u98A6>P{i2}n;",
+ "\u98A7>Qu{a2}n;",
+ "\u98A8>Feng;",
+ "\u98A9>Biao;",
+ "\u98AB>F{u2};",
+ "\u98AC>Xia;",
+ "\u98AD>Zh{a3}n;",
+ "\u98AE>Biao;",
+ "\u98AF>S{a4};",
+ "\u98B0>B{a2};",
+ "\u98B1>Ta{i2};",
+ "\u98B2>Li{e4};",
+ "\u98B3>Gua;",
+ "\u98B4>Xu{a4}n;",
+ "\u98B5>Sha{o4};",
+ "\u98B6>J{u4};",
+ "\u98B7>Bi;",
+ "\u98B8>Si;",
+ "\u98B9>We{i3};",
+ "\u98BA>Y{a2}ng;",
+ "\u98BB>Ya{o2};",
+ "\u98BC>Sou;",
+ "\u98BD>Ka{i3};",
+ "\u98BE>Sao;",
+ "\u98BF>F{a2}n;",
+ "\u98C0>Li{u2};",
+ "\u98C1>X{i2};",
+ "\u98C2>Lia{o2};",
+ "\u98C3>Piao;",
+ "\u98C4>Piao;",
+ "\u98C5>Li{u2};",
+ "\u98C6>Biao;",
+ "\u98C7>Biao;",
+ "\u98C8>Bia{o3};",
+ "\u98C9>Lia{o2};",
+ "\u98CB>S{e4};",
+ "\u98CC>Feng;",
+ "\u98CD>Biao;",
+ "\u98CE>Feng;",
+ "\u98CF>Y{a2}ng;",
+ "\u98D0>Zh{a3}n;",
+ "\u98D1>Biao;",
+ "\u98D2>S{a4};",
+ "\u98D3>J{u4};",
+ "\u98D4>Si;",
+ "\u98D5>Sou;",
+ "\u98D6>Ya{o2};",
+ "\u98D7>Li{u2};",
+ "\u98D8>Piao;",
+ "\u98D9>Biao;",
+ "\u98DA>Biao;",
+ "\u98DB>Fei;",
+ "\u98DC>Fan;",
+ "\u98DD>Fei;",
+ "\u98DE>Fei;",
+ "\u98DF>Sh{i2};",
+ "\u98E0>Sh{i2};",
+ "\u98E1>Can;",
+ "\u98E2>Ji;",
+ "\u98E3>D{i4}ng;",
+ "\u98E4>S{i4};",
+ "\u98E5>Tuo;",
+ "\u98E6>Zhan;",
+ "\u98E7>Sun;",
+ "\u98E8>Xi{a3}ng;",
+ "\u98E9>T{u2}n;",
+ "\u98EA>R{e4}n;",
+ "\u98EB>Y{u4};",
+ "\u98EC>Ju{a4}n;",
+ "\u98ED>Ch{i4};",
+ "\u98EE>Y{i3}n;",
+ "\u98EF>F{a4}n;",
+ "\u98F0>F{a4}n;",
+ "\u98F1>Sun;",
+ "\u98F2>Y{i3}n;",
+ "\u98F3>Zh{u4};",
+ "\u98F4>Y{i2};",
+ "\u98F5>Zha{i3};",
+ "\u98F6>B{i4};",
+ "\u98F7>Ji{e3};",
+ "\u98F8>Tao;",
+ "\u98F9>Li{u3};",
+ "\u98FA>C{i2};",
+ "\u98FB>Ti{e4};",
+ "\u98FC>S{i4};",
+ "\u98FD>Ba{o3};",
+ "\u98FE>Sh{i4};",
+ "\u98FF>Du{o4};",
+ "\u9900>Ha{i4};",
+ "\u9901>R{e4}n;",
+ "\u9902>Ti{a3}n;",
+ "\u9903>Jia{o3};",
+ "\u9904>Ji{a2};",
+ "\u9905>B{i3}ng;",
+ "\u9906>Ya{o2};",
+ "\u9907>T{o2}ng;",
+ "\u9908>C{i2};",
+ "\u9909>Xi{a3}ng;",
+ "\u990A>Y{a3}ng;",
+ "\u990B>Y{a3}ng;",
+ "\u990C>{e3}r;",
+ "\u990D>Y{a4}n;",
+ "\u990E>L{e1};",
+ "\u990F>Yi;",
+ "\u9910>Can;",
+ "\u9911>B{o2};",
+ "\u9912>Ne{i3};",
+ "\u9913>{E4};",
+ "\u9914>Bu;",
+ "\u9915>J{u4}n;",
+ "\u9916>Do{u4};",
+ "\u9917>S{u4};",
+ "\u9918>Y{u2};",
+ "\u9919>Sh{i4};",
+ "\u991A>Ya{o2};",
+ "\u991B>H{u2}n;",
+ "\u991C>Gu{o3};",
+ "\u991D>Sh{i4};",
+ "\u991E>Ji{a4}n;",
+ "\u991F>Zhu{i4};",
+ "\u9920>B{i3}ng;",
+ "\u9921>Xi{a4}n;",
+ "\u9922>B{u4};",
+ "\u9923>Y{e4};",
+ "\u9924>T{a2}n;",
+ "\u9925>Fe{i3};",
+ "\u9926>Zhang;",
+ "\u9927>We{i4};",
+ "\u9928>Gu{a3}n;",
+ "\u9929>{E4};",
+ "\u992A>Nu{a3}n;",
+ "\u992B>H{u2}n;",
+ "\u992C>H{u2};",
+ "\u992D>Hu{a2}ng;",
+ "\u992E>Ti{e4};",
+ "\u992F>Hu{i4};",
+ "\u9930>Jian;",
+ "\u9931>Ho{u2};",
+ "\u9932>H{e2};",
+ "\u9933>X{i2}ng;",
+ "\u9934>Fen;",
+ "\u9935>We{i4};",
+ "\u9936>G{u3};",
+ "\u9937>Cha;",
+ "\u9938>S{o4}ng;",
+ "\u9939>T{a2}ng;",
+ "\u993A>B{o2};",
+ "\u993B>Gao;",
+ "\u993C>X{i4};",
+ "\u993D>Ku{i4};",
+ "\u993E>Li{u4};",
+ "\u993F>Sou;",
+ "\u9940>Ta{o2};",
+ "\u9941>Y{e4};",
+ "\u9942>Y{u2}n;",
+ "\u9943>M{o2};",
+ "\u9944>T{a2}ng;",
+ "\u9945>M{a2}n;",
+ "\u9946>B{i4};",
+ "\u9947>Y{u4};",
+ "\u9948>Xiu;",
+ "\u9949>J{i3}n;",
+ "\u994A>S{a3}n;",
+ "\u994B>Ku{i4};",
+ "\u994C>Zhu{a4}n;",
+ "\u994D>Sh{a4}n;",
+ "\u994E>Ch{i4};",
+ "\u994F>D{a4}n;",
+ "\u9950>Y{i4};",
+ "\u9951>Ji;",
+ "\u9952>Ra{o2};",
+ "\u9953>Cheng;",
+ "\u9954>Yong;",
+ "\u9955>Tao;",
+ "\u9956>Hu{i4};",
+ "\u9957>Xi{a3}ng;",
+ "\u9958>Zhan;",
+ "\u9959>Fen;",
+ "\u995A>Ha{i4};",
+ "\u995B>M{e2}ng;",
+ "\u995C>Y{a4}n;",
+ "\u995D>M{o2};",
+ "\u995E>Ch{a2}n;",
+ "\u995F>Xi{a3}ng;",
+ "\u9960>Lu{o2};",
+ "\u9961>Zu{a4}n;",
+ "\u9962>N{a3}ng;",
+ "\u9963>Sh{i2};",
+ "\u9964>D{i4}ng;",
+ "\u9965>Ji;",
+ "\u9966>Tuo;",
+ "\u9967>X{i2}ng;",
+ "\u9968>T{u2}n;",
+ "\u9969>X{i4};",
+ "\u996A>R{e4}n;",
+ "\u996B>Y{u4};",
+ "\u996C>Ch{i4};",
+ "\u996D>F{a4}n;",
+ "\u996E>Y{i3}n;",
+ "\u996F>Ji{a4}n;",
+ "\u9970>Sh{i4};",
+ "\u9971>Ba{o3};",
+ "\u9972>S{i4};",
+ "\u9973>Du{o4};",
+ "\u9974>Y{i2};",
+ "\u9975>{e3}r;",
+ "\u9976>Ra{o2};",
+ "\u9977>Xi{a3}ng;",
+ "\u9978>Ji{a2};",
+ "\u9979>L{e1};",
+ "\u997A>Jia{o3};",
+ "\u997B>Yi;",
+ "\u997C>B{i3}ng;",
+ "\u997D>B{o2};",
+ "\u997E>Do{u4};",
+ "\u997F>{E4};",
+ "\u9980>Y{u2};",
+ "\u9981>Ne{i3};",
+ "\u9982>J{u4}n;",
+ "\u9983>Gu{o3};",
+ "\u9984>H{u2}n;",
+ "\u9985>Xi{a4}n;",
+ "\u9986>Gu{a3}n;",
+ "\u9987>Cha;",
+ "\u9988>Ku{i4};",
+ "\u9989>G{u3};",
+ "\u998A>Sou;",
+ "\u998B>Ch{a2}n;",
+ "\u998C>Y{e4};",
+ "\u998D>M{o2};",
+ "\u998E>B{o2};",
+ "\u998F>Li{u4};",
+ "\u9990>Xiu;",
+ "\u9991>J{i3}n;",
+ "\u9992>M{a2}n;",
+ "\u9993>S{a3}n;",
+ "\u9994>Zhu{a4}n;",
+ "\u9995>N{a3}ng;",
+ "\u9996>Sho{u3};",
+ "\u9997>Ku{i2};",
+ "\u9998>Gu{o2};",
+ "\u9999>Xiang;",
+ "\u999A>F{e2}n;",
+ "\u999B>B{a2};",
+ "\u999C>N{i3};",
+ "\u999D>B{i4};",
+ "\u999E>B{o2};",
+ "\u999F>T{u2};",
+ "\u99A0>Han;",
+ "\u99A1>Fei;",
+ "\u99A2>Jian;",
+ "\u99A3>An;",
+ "\u99A4>A{i3};",
+ "\u99A5>F{u4};",
+ "\u99A6>Xian;",
+ "\u99A7>Wen;",
+ "\u99A8>Xin;",
+ "\u99A9>F{e2}n;",
+ "\u99AA>Bin;",
+ "\u99AB>Xing;",
+ "\u99AC>M{a3};",
+ "\u99AD>Y{u4};",
+ "\u99AE>F{e2}ng;",
+ "\u99AF>H{a4}n;",
+ "\u99B0>D{i4};",
+ "\u99B1>Tu{o2};",
+ "\u99B2>Tuo;",
+ "\u99B3>Ch{i2};",
+ "\u99B4>X{u2}n;",
+ "\u99B5>Zh{u4};",
+ "\u99B6>Zhi;",
+ "\u99B7>Pe{i4};",
+ "\u99B8>X{i4}n;",
+ "\u99B9>R{i4};",
+ "\u99BA>S{a4};",
+ "\u99BB>Y{i3}n;",
+ "\u99BC>W{e2}n;",
+ "\u99BD>Zh{i2};",
+ "\u99BE>D{a4}n;",
+ "\u99BF>L{uu2};",
+ "\u99C0>Yo{u2};",
+ "\u99C1>B{o2};",
+ "\u99C2>Ba{o3};",
+ "\u99C3>Kua{i4};",
+ "\u99C4>Tu{o2};",
+ "\u99C5>Y{i4};",
+ "\u99C6>Qu;",
+ "\u99C8>Qu;",
+ "\u99C9>Jiong;",
+ "\u99CA>B{o3};",
+ "\u99CB>Zhao;",
+ "\u99CC>Yuan;",
+ "\u99CD>Peng;",
+ "\u99CE>Zho{u4};",
+ "\u99CF>J{u4};",
+ "\u99D0>Zh{u4};",
+ "\u99D1>N{u2};",
+ "\u99D2>Ju;",
+ "\u99D3>P{i2};",
+ "\u99D4>Z{a3}ng;",
+ "\u99D5>Ji{a4};",
+ "\u99D6>L{i2}ng;",
+ "\u99D7>Zhen;",
+ "\u99D8>Ta{i2};",
+ "\u99D9>F{u4};",
+ "\u99DA>Y{a3}ng;",
+ "\u99DB>Sh{i3};",
+ "\u99DC>B{i4};",
+ "\u99DD>Tu{o2};",
+ "\u99DE>Tu{o2};",
+ "\u99DF>S{i4};",
+ "\u99E0>Li{u2};",
+ "\u99E1>M{a4};",
+ "\u99E2>Pi{a2}n;",
+ "\u99E3>Ta{o2};",
+ "\u99E4>Zh{i4};",
+ "\u99E5>R{o2}ng;",
+ "\u99E6>T{e2}ng;",
+ "\u99E7>D{o4}ng;",
+ "\u99E8>X{u2}n;",
+ "\u99E9>Qu{a2}n;",
+ "\u99EA>Shen;",
+ "\u99EB>Jiong;",
+ "\u99EC>{e3}r;",
+ "\u99ED>Ha{i4};",
+ "\u99EE>B{o2};",
+ "\u99EF>Zhu;",
+ "\u99F0>Yin;",
+ "\u99F1>Lu{o4};",
+ "\u99F3>D{a4}n;",
+ "\u99F4>Xi{e4};",
+ "\u99F5>Li{u2};",
+ "\u99F6>J{u2};",
+ "\u99F7>S{o3}ng;",
+ "\u99F8>Qin;",
+ "\u99F9>M{a2}ng;",
+ "\u99FA>Li{a2}ng;",
+ "\u99FB>H{a4}n;",
+ "\u99FC>T{u2};",
+ "\u99FD>Xu{a4}n;",
+ "\u99FE>Tu{i4};",
+ "\u99FF>J{u4}n;",
+ "\u9A00>{E2};",
+ "\u9A01>Ch{e3}ng;",
+ "\u9A02>Xin;",
+ "\u9A03>A{i2};",
+ "\u9A04>L{u4};",
+ "\u9A05>Zhui;",
+ "\u9A06>Zhou;",
+ "\u9A07>Sh{e3};",
+ "\u9A08>Pi{a2}n;",
+ "\u9A09>Kun;",
+ "\u9A0A>Ta{o2};",
+ "\u9A0B>La{i2};",
+ "\u9A0C>Zong;",
+ "\u9A0D>K{e4};",
+ "\u9A0E>Q{i2};",
+ "\u9A0F>Q{i2};",
+ "\u9A10>Y{a4}n;",
+ "\u9A11>Fei;",
+ "\u9A12>Sao;",
+ "\u9A13>Y{a3}n;",
+ "\u9A14>Ji{e2};",
+ "\u9A15>Ya{o3};",
+ "\u9A16>W{u4};",
+ "\u9A17>Pi{a4}n;",
+ "\u9A18>Cong;",
+ "\u9A19>Pi{a4}n;",
+ "\u9A1A>Qi{a2}n;",
+ "\u9A1B>Fei;",
+ "\u9A1C>Hu{a2}ng;",
+ "\u9A1D>Jian;",
+ "\u9A1E>Hu{o4};",
+ "\u9A1F>Y{u4};",
+ "\u9A20>T{i2};",
+ "\u9A21>Qu{a2}n;",
+ "\u9A22>Xi{a2};",
+ "\u9A23>Zong;",
+ "\u9A24>Ku{i2};",
+ "\u9A25>Ro{u2};",
+ "\u9A26>Si;",
+ "\u9A27>Gua;",
+ "\u9A28>Tu{o2};",
+ "\u9A29>Ku{i4};",
+ "\u9A2A>Sou;",
+ "\u9A2B>Qian;",
+ "\u9A2C>Ch{e2}ng;",
+ "\u9A2D>Zh{i4};",
+ "\u9A2E>Li{u2};",
+ "\u9A2F>P{a2}ng;",
+ "\u9A30>T{e2}ng;",
+ "\u9A31>Xi;",
+ "\u9A32>Ca{o3};",
+ "\u9A33>D{u2};",
+ "\u9A34>Y{a4}n;",
+ "\u9A35>Yu{a2}n;",
+ "\u9A36>Zou;",
+ "\u9A37>Sao;",
+ "\u9A38>Sh{a4}n;",
+ "\u9A39>L{i2};",
+ "\u9A3A>Zh{i4};",
+ "\u9A3B>Shu{a3}ng;",
+ "\u9A3C>L{u4};",
+ "\u9A3D>X{i2};",
+ "\u9A3E>Lu{o2};",
+ "\u9A3F>Zhang;",
+ "\u9A40>M{o4};",
+ "\u9A41>A{o2};",
+ "\u9A42>Can;",
+ "\u9A43>Pia{o4};",
+ "\u9A44>Cong;",
+ "\u9A45>Qu;",
+ "\u9A46>B{i4};",
+ "\u9A47>Zh{i4};",
+ "\u9A48>Y{u4};",
+ "\u9A49>Xu;",
+ "\u9A4A>Hu{a2};",
+ "\u9A4B>Bo;",
+ "\u9A4C>S{u4};",
+ "\u9A4D>Xiao;",
+ "\u9A4E>L{i2}n;",
+ "\u9A4F>Ch{a3}n;",
+ "\u9A50>Dun;",
+ "\u9A51>Li{u2};",
+ "\u9A52>Tu{o2};",
+ "\u9A53>Zeng;",
+ "\u9A54>T{a2}n;",
+ "\u9A55>Jiao;",
+ "\u9A56>Ti{e3};",
+ "\u9A57>Y{a4}n;",
+ "\u9A58>Lu{o2};",
+ "\u9A59>Zhan;",
+ "\u9A5A>Jing;",
+ "\u9A5B>Y{i4};",
+ "\u9A5C>Y{e4};",
+ "\u9A5D>Tuo;",
+ "\u9A5E>Bin;",
+ "\u9A5F>Zo{u4};",
+ "\u9A60>Y{a4}n;",
+ "\u9A61>P{e2}ng;",
+ "\u9A62>L{uu2};",
+ "\u9A63>T{e2}ng;",
+ "\u9A64>Xiang;",
+ "\u9A65>J{i4};",
+ "\u9A66>Shuang;",
+ "\u9A67>J{u2};",
+ "\u9A68>Xi;",
+ "\u9A69>Huan;",
+ "\u9A6A>L{i2};",
+ "\u9A6B>Biao;",
+ "\u9A6C>M{a3};",
+ "\u9A6D>Y{u4};",
+ "\u9A6E>Tu{o2};",
+ "\u9A6F>X{u2}n;",
+ "\u9A70>Ch{i2};",
+ "\u9A71>Qu;",
+ "\u9A72>R{i4};",
+ "\u9A73>B{o2};",
+ "\u9A74>L{uu2};",
+ "\u9A75>Z{a3}ng;",
+ "\u9A76>Sh{i3};",
+ "\u9A77>S{i4};",
+ "\u9A78>F{u4};",
+ "\u9A79>Ju;",
+ "\u9A7A>Zou;",
+ "\u9A7B>Zh{u4};",
+ "\u9A7C>Tu{o2};",
+ "\u9A7D>N{u2};",
+ "\u9A7E>Ji{a4};",
+ "\u9A7F>Y{i4};",
+ "\u9A80>Ta{i2};",
+ "\u9A81>Xiao;",
+ "\u9A82>M{a4};",
+ "\u9A83>Yin;",
+ "\u9A84>Jiao;",
+ "\u9A85>Hu{a2};",
+ "\u9A86>Lu{o4};",
+ "\u9A87>Ha{i4};",
+ "\u9A88>Pi{a2}n;",
+ "\u9A89>Biao;",
+ "\u9A8A>L{i2};",
+ "\u9A8B>Ch{e3}ng;",
+ "\u9A8C>Y{a4}n;",
+ "\u9A8D>Xin;",
+ "\u9A8E>Qin;",
+ "\u9A8F>J{u4}n;",
+ "\u9A90>Q{i2};",
+ "\u9A91>Q{i2};",
+ "\u9A92>K{e4};",
+ "\u9A93>Zhui;",
+ "\u9A94>Zong;",
+ "\u9A95>S{u4};",
+ "\u9A96>Can;",
+ "\u9A97>Pi{a4}n;",
+ "\u9A98>Zh{i4};",
+ "\u9A99>Ku{i2};",
+ "\u9A9A>Sao;",
+ "\u9A9B>W{u4};",
+ "\u9A9C>A{o2};",
+ "\u9A9D>Li{u2};",
+ "\u9A9E>Qian;",
+ "\u9A9F>Sh{a4}n;",
+ "\u9AA0>Pia{o4};",
+ "\u9AA1>Lu{o2};",
+ "\u9AA2>Cong;",
+ "\u9AA3>Ch{a3}n;",
+ "\u9AA4>Zo{u4};",
+ "\u9AA5>J{i4};",
+ "\u9AA6>Shuang;",
+ "\u9AA7>Xiang;",
+ "\u9AA8>G{u3};",
+ "\u9AA9>We{i3};",
+ "\u9AAA>We{i3};",
+ "\u9AAB>We{i3};",
+ "\u9AAC>Y{u2};",
+ "\u9AAD>G{a4}n;",
+ "\u9AAE>Y{i4};",
+ "\u9AAF>Ang;",
+ "\u9AB0>To{u2};",
+ "\u9AB1>Xi{e4};",
+ "\u9AB2>Bao;",
+ "\u9AB3>B{i4};",
+ "\u9AB4>Chi;",
+ "\u9AB5>T{i3};",
+ "\u9AB6>D{i3};",
+ "\u9AB7>Ku;",
+ "\u9AB8>Ha{i2};",
+ "\u9AB9>Qiao;",
+ "\u9ABA>Go{u4};",
+ "\u9ABB>Ku{a4};",
+ "\u9ABC>G{e2};",
+ "\u9ABD>Tu{i3};",
+ "\u9ABE>G{e3}ng;",
+ "\u9ABF>Pi{a2}n;",
+ "\u9AC0>B{i4};",
+ "\u9AC1>Ke;",
+ "\u9AC2>K{a4};",
+ "\u9AC3>Y{u2};",
+ "\u9AC4>Su{i3};",
+ "\u9AC5>Lo{u2};",
+ "\u9AC6>B{o2};",
+ "\u9AC7>Xiao;",
+ "\u9AC8>P{a2}ng;",
+ "\u9AC9>Bo;",
+ "\u9ACA>Ci;",
+ "\u9ACB>Kuan;",
+ "\u9ACC>B{i4}n;",
+ "\u9ACD>M{o2};",
+ "\u9ACE>Lia{o2};",
+ "\u9ACF>Lo{u2};",
+ "\u9AD0>Na{o2};",
+ "\u9AD1>D{u2};",
+ "\u9AD2>Zang;",
+ "\u9AD3>Su{i3};",
+ "\u9AD4>T{i3};",
+ "\u9AD5>B{i4}n;",
+ "\u9AD6>Kuan;",
+ "\u9AD7>L{u2};",
+ "\u9AD8>Gao;",
+ "\u9AD9>Gao;",
+ "\u9ADA>Qia{o4};",
+ "\u9ADB>Kao;",
+ "\u9ADC>Qiao;",
+ "\u9ADD>La{o4};",
+ "\u9ADE>Za{o4};",
+ "\u9ADF>Biao;",
+ "\u9AE0>Kun;",
+ "\u9AE1>Kun;",
+ "\u9AE2>T{i4};",
+ "\u9AE3>F{a3}ng;",
+ "\u9AE4>Xiu;",
+ "\u9AE5>R{a2}n;",
+ "\u9AE6>Ma{o2};",
+ "\u9AE7>D{a4}n;",
+ "\u9AE8>Kun;",
+ "\u9AE9>B{i4}n;",
+ "\u9AEA>F{a4};",
+ "\u9AEB>Tia{o2};",
+ "\u9AEC>Peng;",
+ "\u9AED>Zi;",
+ "\u9AEE>F{a3};",
+ "\u9AEF>R{a2}n;",
+ "\u9AF0>T{i4};",
+ "\u9AF1>Pa{o4};",
+ "\u9AF2>Pi;",
+ "\u9AF3>Ma{o2};",
+ "\u9AF4>F{u2};",
+ "\u9AF5>{E2}r;",
+ "\u9AF6>R{o2}ng;",
+ "\u9AF7>Qu;",
+ "\u9AF8>Gong;",
+ "\u9AF9>Xiu;",
+ "\u9AFA>Gu{a4};",
+ "\u9AFB>J{i4};",
+ "\u9AFC>P{e2}ng;",
+ "\u9AFD>Zhua;",
+ "\u9AFE>Shao;",
+ "\u9AFF>Sha;",
+ "\u9B00>T{i4};",
+ "\u9B01>L{i4};",
+ "\u9B02>B{i4}n;",
+ "\u9B03>Zong;",
+ "\u9B04>T{i4};",
+ "\u9B05>P{e2}ng;",
+ "\u9B06>Song;",
+ "\u9B07>Zheng;",
+ "\u9B08>Qu{a2}n;",
+ "\u9B09>Zong;",
+ "\u9B0A>Sh{u4}n;",
+ "\u9B0B>Jian;",
+ "\u9B0C>Du{o3};",
+ "\u9B0D>H{u2};",
+ "\u9B0E>L{a4};",
+ "\u9B0F>Jiu;",
+ "\u9B10>Q{i2};",
+ "\u9B11>Li{a2}n;",
+ "\u9B12>Zh{e3}n;",
+ "\u9B13>B{i4}n;",
+ "\u9B14>P{e2}ng;",
+ "\u9B15>M{o4};",
+ "\u9B16>San;",
+ "\u9B17>M{a4}n;",
+ "\u9B18>M{a2}n;",
+ "\u9B19>Seng;",
+ "\u9B1A>Xu;",
+ "\u9B1B>Li{e4};",
+ "\u9B1C>Qian;",
+ "\u9B1D>Qian;",
+ "\u9B1E>N{o2}ng;",
+ "\u9B1F>Hu{a2}n;",
+ "\u9B20>Kua{i4};",
+ "\u9B21>N{i2}ng;",
+ "\u9B22>B{i4}n;",
+ "\u9B23>Li{e4};",
+ "\u9B24>R{a2}ng;",
+ "\u9B25>Do{u4};",
+ "\u9B26>Do{u4};",
+ "\u9B27>Na{o4};",
+ "\u9B28>Hong;",
+ "\u9B29>X{i4};",
+ "\u9B2A>Do{u4};",
+ "\u9B2B>H{a3}n;",
+ "\u9B2C>Do{u4};",
+ "\u9B2D>Do{u4};",
+ "\u9B2E>Jiu;",
+ "\u9B2F>Ch{a4}ng;",
+ "\u9B30>Y{u4};",
+ "\u9B31>Y{u4};",
+ "\u9B32>L{i4};",
+ "\u9B33>Ju{a4}n;",
+ "\u9B34>F{u3};",
+ "\u9B35>Qi{a2}n;",
+ "\u9B36>Gui;",
+ "\u9B37>Zong;",
+ "\u9B38>Li{u4};",
+ "\u9B39>Gui;",
+ "\u9B3A>Shang;",
+ "\u9B3B>Y{u4};",
+ "\u9B3C>Gu{i3};",
+ "\u9B3D>Me{i4};",
+ "\u9B3E>J{i4};",
+ "\u9B3F>Q{i2};",
+ "\u9B40>Ji{e4};",
+ "\u9B41>Ku{i2};",
+ "\u9B42>H{u2}n;",
+ "\u9B43>B{a2};",
+ "\u9B44>P{o4};",
+ "\u9B45>Me{i4};",
+ "\u9B46>X{u4};",
+ "\u9B47>Y{a3}n;",
+ "\u9B48>Xiao;",
+ "\u9B49>Li{a3}ng;",
+ "\u9B4A>Y{u4};",
+ "\u9B4B>Tu{i2};",
+ "\u9B4C>Qi;",
+ "\u9B4D>W{a3}ng;",
+ "\u9B4E>Li{a3}ng;",
+ "\u9B4F>We{i4};",
+ "\u9B50>Jian;",
+ "\u9B51>Chi;",
+ "\u9B52>Piao;",
+ "\u9B53>B{i4};",
+ "\u9B54>M{o2};",
+ "\u9B55>J{i3};",
+ "\u9B56>Xu;",
+ "\u9B57>Cho{u3};",
+ "\u9B58>Y{a3}n;",
+ "\u9B59>Zh{a3}n;",
+ "\u9B5A>Y{u2};",
+ "\u9B5B>Dao;",
+ "\u9B5C>R{e2}n;",
+ "\u9B5D>J{i4};",
+ "\u9B5F>Gong;",
+ "\u9B60>Tu{o2};",
+ "\u9B61>Dia{o4};",
+ "\u9B62>J{i3};",
+ "\u9B63>X{u4};",
+ "\u9B64>{E2};",
+ "\u9B65>{E4};",
+ "\u9B66>Sha;",
+ "\u9B67>H{a2}ng;",
+ "\u9B68>T{u2}n;",
+ "\u9B69>M{o4};",
+ "\u9B6A>Ji{e4};",
+ "\u9B6B>Sh{e3}n;",
+ "\u9B6C>F{a3}n;",
+ "\u9B6D>Yu{a2}n;",
+ "\u9B6E>B{i2};",
+ "\u9B6F>L{u3};",
+ "\u9B70>W{e2}n;",
+ "\u9B71>H{u2};",
+ "\u9B72>L{u2};",
+ "\u9B73>Z{a2};",
+ "\u9B74>F{a2}ng;",
+ "\u9B75>F{e2}n;",
+ "\u9B76>N{a4};",
+ "\u9B77>Yo{u2};",
+ "\u9B7A>H{e2};",
+ "\u9B7B>Xi{a2};",
+ "\u9B7C>Qu;",
+ "\u9B7D>Han;",
+ "\u9B7E>P{i2};",
+ "\u9B7F>L{i2}ng;",
+ "\u9B80>Tu{o2};",
+ "\u9B81>Bo;",
+ "\u9B82>Qi{u2};",
+ "\u9B83>P{i2}ng;",
+ "\u9B84>F{u2};",
+ "\u9B85>B{i4};",
+ "\u9B86>J{i4};",
+ "\u9B87>We{i4};",
+ "\u9B88>Ju;",
+ "\u9B89>Diao;",
+ "\u9B8A>B{o2};",
+ "\u9B8B>Yo{u2};",
+ "\u9B8C>G{u3}n;",
+ "\u9B8D>Pi;",
+ "\u9B8E>Ni{a2}n;",
+ "\u9B8F>Xing;",
+ "\u9B90>Ta{i2};",
+ "\u9B91>Ba{o4};",
+ "\u9B92>F{u4};",
+ "\u9B93>Zh{a3};",
+ "\u9B94>J{u4};",
+ "\u9B95>Gu;",
+ "\u9B99>T{a4};",
+ "\u9B9A>Ji{e2};",
+ "\u9B9B>Sh{u4};",
+ "\u9B9C>Ho{u4};",
+ "\u9B9D>Xi{a3}ng;",
+ "\u9B9E>{E2}r;",
+ "\u9B9F>{A4}n;",
+ "\u9BA0>We{i2};",
+ "\u9BA1>Tiao;",
+ "\u9BA2>Zhu;",
+ "\u9BA3>Y{i4}n;",
+ "\u9BA4>Li{e4};",
+ "\u9BA5>Lu{o4};",
+ "\u9BA6>T{o2}ng;",
+ "\u9BA7>Y{i2};",
+ "\u9BA8>Q{i2};",
+ "\u9BA9>B{i4}ng;",
+ "\u9BAA>We{i3};",
+ "\u9BAB>Jia{o3};",
+ "\u9BAC>B{u4};",
+ "\u9BAD>Gui;",
+ "\u9BAE>Xian;",
+ "\u9BAF>G{e2};",
+ "\u9BB0>Hu{i2};",
+ "\u9BB3>Ka{o3};",
+ "\u9BB5>Du{o2};",
+ "\u9BB6>Jun;",
+ "\u9BB7>T{i2};",
+ "\u9BB8>M{a3}n;",
+ "\u9BB9>Xiao;",
+ "\u9BBA>Z{a3};",
+ "\u9BBB>Sha;",
+ "\u9BBC>Qin;",
+ "\u9BBD>Y{u2};",
+ "\u9BBE>Ne{i3};",
+ "\u9BBF>Zh{e2};",
+ "\u9BC0>G{u3}n;",
+ "\u9BC1>G{e3}ng;",
+ "\u9BC2>Su;",
+ "\u9BC3>W{u2};",
+ "\u9BC4>Qi{u2};",
+ "\u9BC5>T{i2}ng;",
+ "\u9BC6>F{u3};",
+ "\u9BC7>W{a3}n;",
+ "\u9BC8>Yo{u2};",
+ "\u9BC9>L{i3};",
+ "\u9BCA>Sha;",
+ "\u9BCB>Sha;",
+ "\u9BCC>Ga{o4};",
+ "\u9BCD>M{e2}ng;",
+ "\u9BD2>Y{o3}ng;",
+ "\u9BD3>N{i2};",
+ "\u9BD4>Zi;",
+ "\u9BD5>Q{i2};",
+ "\u9BD6>Qing;",
+ "\u9BD7>Xi{a3}ng;",
+ "\u9BD8>Ne{i3};",
+ "\u9BD9>Ch{u2}n;",
+ "\u9BDA>J{i4};",
+ "\u9BDB>Diao;",
+ "\u9BDC>Qi{e4};",
+ "\u9BDD>G{u4};",
+ "\u9BDE>Zho{u3};",
+ "\u9BDF>Dong;",
+ "\u9BE0>La{i2};",
+ "\u9BE1>Fei;",
+ "\u9BE2>N{i2};",
+ "\u9BE3>Y{i4};",
+ "\u9BE4>Kun;",
+ "\u9BE5>L{u4};",
+ "\u9BE6>Ji{u4};",
+ "\u9BE7>Chang;",
+ "\u9BE8>Jing;",
+ "\u9BE9>L{u2}n;",
+ "\u9BEA>L{i2}ng;",
+ "\u9BEB>Zou;",
+ "\u9BEC>L{i2};",
+ "\u9BED>M{e3}ng;",
+ "\u9BEE>Zong;",
+ "\u9BEF>Zh{i4};",
+ "\u9BF0>Ni{a2}n;",
+ "\u9BF4>Shi;",
+ "\u9BF5>Shen;",
+ "\u9BF6>H{u3}n;",
+ "\u9BF7>Sh{i4};",
+ "\u9BF8>Ho{u2};",
+ "\u9BF9>Xing;",
+ "\u9BFA>Zhu;",
+ "\u9BFB>L{a4};",
+ "\u9BFC>Zong;",
+ "\u9BFD>J{i4};",
+ "\u9BFE>Bian;",
+ "\u9BFF>Bian;",
+ "\u9C00>Hu{a4}n;",
+ "\u9C01>Qu{a2}n;",
+ "\u9C02>Z{e2};",
+ "\u9C03>Wei;",
+ "\u9C04>Wei;",
+ "\u9C05>Y{u2};",
+ "\u9C06>Qun;",
+ "\u9C07>Ro{u2};",
+ "\u9C08>Di{e2};",
+ "\u9C09>Hu{a2}ng;",
+ "\u9C0A>Li{a4}n;",
+ "\u9C0B>Y{a3}n;",
+ "\u9C0C>Qi{u2};",
+ "\u9C0D>Qiu;",
+ "\u9C0E>Ji{a4}n;",
+ "\u9C0F>B{i4};",
+ "\u9C10>{E4};",
+ "\u9C11>Y{a2}ng;",
+ "\u9C12>F{u4};",
+ "\u9C13>Sai;",
+ "\u9C14>Ji{a3}n;",
+ "\u9C15>Xi{a2};",
+ "\u9C16>Tu{o3};",
+ "\u9C17>H{u2};",
+ "\u9C19>Ru{o4};",
+ "\u9C1B>Wen;",
+ "\u9C1C>Jian;",
+ "\u9C1D>Ha{o4};",
+ "\u9C1E>Wu;",
+ "\u9C1F>F{a2}ng;",
+ "\u9C20>Sao;",
+ "\u9C21>Li{u2};",
+ "\u9C22>M{a3};",
+ "\u9C23>Sh{i2};",
+ "\u9C24>Shi;",
+ "\u9C25>Y{i2}n;",
+ "\u9C26>Z;",
+ "\u9C27>T{e2}ng;",
+ "\u9C28>T{a4};",
+ "\u9C29>Ya{o2};",
+ "\u9C2A>G{e2};",
+ "\u9C2B>R{o2}ng;",
+ "\u9C2C>Qi{a2}n;",
+ "\u9C2D>Q{i2};",
+ "\u9C2E>Wen;",
+ "\u9C2F>Ru{o4};",
+ "\u9C31>Li{a2}n;",
+ "\u9C32>A{o2};",
+ "\u9C33>L{e4};",
+ "\u9C34>Hui;",
+ "\u9C35>M{i3}n;",
+ "\u9C36>J{i4};",
+ "\u9C37>Tia{o2};",
+ "\u9C38>Qu;",
+ "\u9C39>Jian;",
+ "\u9C3A>Sao;",
+ "\u9C3B>M{a2}n;",
+ "\u9C3C>X{i2};",
+ "\u9C3D>Qi{u2};",
+ "\u9C3E>Bia{o4};",
+ "\u9C3F>Ji;",
+ "\u9C40>J{i4};",
+ "\u9C41>Zh{u2};",
+ "\u9C42>Jiang;",
+ "\u9C43>Qiu;",
+ "\u9C44>Zhuan;",
+ "\u9C45>Y{o2}ng;",
+ "\u9C46>Zhang;",
+ "\u9C47>Kang;",
+ "\u9C48>Xu{e3};",
+ "\u9C49>Bie;",
+ "\u9C4A>Ju{e2};",
+ "\u9C4B>Qu;",
+ "\u9C4C>Xi{a4}ng;",
+ "\u9C4D>Bo;",
+ "\u9C4E>Jiao;",
+ "\u9C4F>X{u2}n;",
+ "\u9C50>S{u4};",
+ "\u9C51>Hu{a2}ng;",
+ "\u9C52>Z{u4}n;",
+ "\u9C53>Sh{a4}n;",
+ "\u9C54>Sh{a4}n;",
+ "\u9C55>Fan;",
+ "\u9C56>Ju{e2};",
+ "\u9C57>L{i2}n;",
+ "\u9C58>X{u2}n;",
+ "\u9C59>Mia{o2};",
+ "\u9C5A>X{i3};",
+ "\u9C5D>F{e4}n;",
+ "\u9C5E>Guan;",
+ "\u9C5F>Ho{u4};",
+ "\u9C60>Kua{i4};",
+ "\u9C61>Ze{i2};",
+ "\u9C62>Sao;",
+ "\u9C63>Zhan;",
+ "\u9C64>G{a3}n;",
+ "\u9C65>Gu{i4};",
+ "\u9C66>Sh{e2}ng;",
+ "\u9C67>L{i3};",
+ "\u9C68>Ch{a2}ng;",
+ "\u9C6C>R{u2};",
+ "\u9C6D>J{i4};",
+ "\u9C6E>X{u4};",
+ "\u9C6F>Hu{o4};",
+ "\u9C71>L{i4};",
+ "\u9C72>Li{e4};",
+ "\u9C73>L{i4};",
+ "\u9C74>Mi{e4};",
+ "\u9C75>Zhen;",
+ "\u9C76>Xi{a3}ng;",
+ "\u9C77>{E4};",
+ "\u9C78>L{u2};",
+ "\u9C79>Gu{a4}n;",
+ "\u9C7A>L{i2};",
+ "\u9C7B>Xian;",
+ "\u9C7C>Y{u2};",
+ "\u9C7D>Dao;",
+ "\u9C7E>J{i3};",
+ "\u9C7F>Yo{u2};",
+ "\u9C80>T{u2}n;",
+ "\u9C81>L{u3};",
+ "\u9C82>F{a2}ng;",
+ "\u9C83>Ba;",
+ "\u9C84>H{e2};",
+ "\u9C85>Bo;",
+ "\u9C86>P{i2}ng;",
+ "\u9C87>Ni{a2}n;",
+ "\u9C88>L{u2};",
+ "\u9C89>Yo{u2};",
+ "\u9C8A>Zh{a3};",
+ "\u9C8B>F{u4};",
+ "\u9C8C>B{o2};",
+ "\u9C8D>Ba{o4};",
+ "\u9C8E>Ho{u4};",
+ "\u9C8F>Pi;",
+ "\u9C90>Ta{i2};",
+ "\u9C91>Gui;",
+ "\u9C92>Ji{e2};",
+ "\u9C93>Ka{o3};",
+ "\u9C94>We{i3};",
+ "\u9C95>{E2}r;",
+ "\u9C96>T{o2}ng;",
+ "\u9C97>Z{e2};",
+ "\u9C98>Ho{u4};",
+ "\u9C99>Kua{i4};",
+ "\u9C9A>J{i4};",
+ "\u9C9B>Jia{o3};",
+ "\u9C9C>Xian;",
+ "\u9C9D>Z{a3};",
+ "\u9C9E>Xi{a3}ng;",
+ "\u9C9F>X{u2}n;",
+ "\u9CA0>G{e3}ng;",
+ "\u9CA1>L{i2};",
+ "\u9CA2>Li{a2}n;",
+ "\u9CA3>Jian;",
+ "\u9CA4>L{i3};",
+ "\u9CA5>Sh{i2};",
+ "\u9CA6>Tia{o2};",
+ "\u9CA7>G{u3}n;",
+ "\u9CA8>Sha;",
+ "\u9CA9>W{a3}n;",
+ "\u9CAA>Jun;",
+ "\u9CAB>J{i4};",
+ "\u9CAC>Y{o3}ng;",
+ "\u9CAD>Qing;",
+ "\u9CAE>L{i2}ng;",
+ "\u9CAF>Q{i2};",
+ "\u9CB0>Zou;",
+ "\u9CB1>Fei;",
+ "\u9CB2>Kun;",
+ "\u9CB3>Chang;",
+ "\u9CB4>G{u4};",
+ "\u9CB5>N{i2};",
+ "\u9CB6>Ni{a2}n;",
+ "\u9CB7>Diao;",
+ "\u9CB8>Jing;",
+ "\u9CB9>Shen;",
+ "\u9CBA>Shi;",
+ "\u9CBB>Zi;",
+ "\u9CBC>F{e4}n;",
+ "\u9CBD>Di{e2};",
+ "\u9CBE>B{i4};",
+ "\u9CBF>Ch{a2}ng;",
+ "\u9CC0>Sh{i4};",
+ "\u9CC1>Wen;",
+ "\u9CC2>Wei;",
+ "\u9CC3>Sai;",
+ "\u9CC4>{E4};",
+ "\u9CC5>Qiu;",
+ "\u9CC6>F{u4};",
+ "\u9CC7>Hu{a2}ng;",
+ "\u9CC8>Qu{a2}n;",
+ "\u9CC9>Jiang;",
+ "\u9CCA>Bian;",
+ "\u9CCB>Sao;",
+ "\u9CCC>A{o2};",
+ "\u9CCD>Q{i2};",
+ "\u9CCE>T{a4};",
+ "\u9CCF>Y{i2}n;",
+ "\u9CD0>Ya{o2};",
+ "\u9CD1>F{a2}ng;",
+ "\u9CD2>Jian;",
+ "\u9CD3>L{e4};",
+ "\u9CD4>Bia{o4};",
+ "\u9CD5>Xu{e3};",
+ "\u9CD6>Bie;",
+ "\u9CD7>M{a2}n;",
+ "\u9CD8>M{i3}n;",
+ "\u9CD9>Y{o2}ng;",
+ "\u9CDA>We{i4};",
+ "\u9CDB>X{i2};",
+ "\u9CDC>Ju{e2};",
+ "\u9CDD>Sh{a4}n;",
+ "\u9CDE>L{i2}n;",
+ "\u9CDF>Z{u4}n;",
+ "\u9CE0>Hu{o4};",
+ "\u9CE1>G{a3}n;",
+ "\u9CE2>L{i3};",
+ "\u9CE3>Zhan;",
+ "\u9CE4>Gu{a3}n;",
+ "\u9CE5>Nia{o3};",
+ "\u9CE6>Y{i3};",
+ "\u9CE7>F{u2};",
+ "\u9CE8>L{i4};",
+ "\u9CE9>Jiu;",
+ "\u9CEA>B{u3};",
+ "\u9CEB>Y{a4}n;",
+ "\u9CEC>F{u2};",
+ "\u9CED>Diao;",
+ "\u9CEE>Ji;",
+ "\u9CEF>F{e4}ng;",
+ "\u9CF1>Gan;",
+ "\u9CF2>Shi;",
+ "\u9CF3>F{e4}ng;",
+ "\u9CF4>M{i2}ng;",
+ "\u9CF5>Ba{o3};",
+ "\u9CF6>Yuan;",
+ "\u9CF7>Zhi;",
+ "\u9CF8>H{u4};",
+ "\u9CF9>Q{i2}n;",
+ "\u9CFA>Fu;",
+ "\u9CFB>Fen;",
+ "\u9CFC>W{e2}n;",
+ "\u9CFD>Jian;",
+ "\u9CFE>Shi;",
+ "\u9CFF>Y{u4};",
+ "\u9D00>Fo{u3};",
+ "\u9D01>Yiao;",
+ "\u9D02>Ju{e4};",
+ "\u9D03>Ju{e2};",
+ "\u9D04>Pi;",
+ "\u9D05>Huan;",
+ "\u9D06>Zh{e4}n;",
+ "\u9D07>Ba{o3};",
+ "\u9D08>Y{a4}n;",
+ "\u9D09>Ya;",
+ "\u9D0A>Zh{e4}ng;",
+ "\u9D0B>Fang;",
+ "\u9D0C>F{e4}ng;",
+ "\u9D0D>W{e2}n;",
+ "\u9D0E>Ou;",
+ "\u9D0F>T{e4};",
+ "\u9D10>Jia;",
+ "\u9D11>N{u2};",
+ "\u9D12>L{i2}ng;",
+ "\u9D13>Mi{e4};",
+ "\u9D14>F{u2};",
+ "\u9D15>Tu{o2};",
+ "\u9D16>W{e2}n;",
+ "\u9D17>L{i4};",
+ "\u9D18>Bi{a4}n;",
+ "\u9D19>Zh{i4};",
+ "\u9D1A>Ge;",
+ "\u9D1B>Yuan;",
+ "\u9D1C>Zi;",
+ "\u9D1D>Q{u2};",
+ "\u9D1E>Xiao;",
+ "\u9D1F>Zhi;",
+ "\u9D20>D{a4}n;",
+ "\u9D21>Ju;",
+ "\u9D22>Yo{u4};",
+ "\u9D23>Gu;",
+ "\u9D24>Zhong;",
+ "\u9D25>Y{u4};",
+ "\u9D26>Yang;",
+ "\u9D27>R{o4}ng;",
+ "\u9D28>Ya;",
+ "\u9D29>Ti{e3};",
+ "\u9D2A>Y{u4};",
+ "\u9D2C>Ying;",
+ "\u9D2D>Zhui;",
+ "\u9D2E>Wu;",
+ "\u9D2F>{E2}r;",
+ "\u9D30>Gua;",
+ "\u9D31>A{i4};",
+ "\u9D32>Zhi;",
+ "\u9D33>Y{a4}n;",
+ "\u9D34>H{e2}ng;",
+ "\u9D35>Jiao;",
+ "\u9D36>J{i2};",
+ "\u9D37>Li{e4};",
+ "\u9D38>Zhu;",
+ "\u9D39>R{e2}n;",
+ "\u9D3A>Y{i2};",
+ "\u9D3B>H{o2}ng;",
+ "\u9D3C>Lu{o4};",
+ "\u9D3D>R{u2};",
+ "\u9D3E>Mo{u2};",
+ "\u9D3F>Ge;",
+ "\u9D40>R{e4}n;",
+ "\u9D41>Jiao;",
+ "\u9D42>Xiu;",
+ "\u9D43>Zhou;",
+ "\u9D44>Zhi;",
+ "\u9D45>Lu{o4};",
+ "\u9D49>Lu{a2}n;",
+ "\u9D4A>Ji{a2};",
+ "\u9D4B>J{i4};",
+ "\u9D4C>Y{u2};",
+ "\u9D4D>Huan;",
+ "\u9D4E>Tu{o3};",
+ "\u9D4F>Bu;",
+ "\u9D50>W{u2};",
+ "\u9D51>Juan;",
+ "\u9D52>Y{u4};",
+ "\u9D53>B{o2};",
+ "\u9D54>X{u4}n;",
+ "\u9D55>X{u4}n;",
+ "\u9D56>B{i4};",
+ "\u9D57>Xi;",
+ "\u9D58>J{u4}n;",
+ "\u9D59>J{u2};",
+ "\u9D5A>T{u2};",
+ "\u9D5B>Jing;",
+ "\u9D5C>T{i2};",
+ "\u9D5D>{E2};",
+ "\u9D5E>{E2};",
+ "\u9D5F>Ku{a2}ng;",
+ "\u9D60>H{u2};",
+ "\u9D61>W{u3};",
+ "\u9D62>Shen;",
+ "\u9D63>La{i4};",
+ "\u9D66>L{u4};",
+ "\u9D67>P{i2}ng;",
+ "\u9D68>Shu;",
+ "\u9D69>F{u2};",
+ "\u9D6A>An;",
+ "\u9D6B>Zha{o4};",
+ "\u9D6C>P{e2}ng;",
+ "\u9D6D>Q{i2}n;",
+ "\u9D6E>Qian;",
+ "\u9D6F>Bei;",
+ "\u9D70>Diao;",
+ "\u9D71>L{u4};",
+ "\u9D72>Qu{e4};",
+ "\u9D73>Jian;",
+ "\u9D74>J{u2};",
+ "\u9D75>T{u4};",
+ "\u9D76>Ya;",
+ "\u9D77>Yuan;",
+ "\u9D78>Q{i2};",
+ "\u9D79>L{i2};",
+ "\u9D7A>Y{e4};",
+ "\u9D7B>Zhui;",
+ "\u9D7C>Kong;",
+ "\u9D7D>Zhu{i4};",
+ "\u9D7E>Kun;",
+ "\u9D7F>Sheng;",
+ "\u9D80>Q{i2};",
+ "\u9D81>Jing;",
+ "\u9D82>Y{i4};",
+ "\u9D83>Y{i4};",
+ "\u9D84>Jing;",
+ "\u9D85>Zi;",
+ "\u9D86>La{i2};",
+ "\u9D87>Dong;",
+ "\u9D88>Qi;",
+ "\u9D89>Ch{u2}n;",
+ "\u9D8A>Geng;",
+ "\u9D8B>Ju;",
+ "\u9D8C>Qu;",
+ "\u9D8F>Ji;",
+ "\u9D90>Sh{u4};",
+ "\u9D92>Ch{i4};",
+ "\u9D93>Mia{o2};",
+ "\u9D94>Ro{u2};",
+ "\u9D95>An;",
+ "\u9D96>Qiu;",
+ "\u9D97>T{i2};",
+ "\u9D98>H{u2};",
+ "\u9D99>T{i2};",
+ "\u9D9A>{E4};",
+ "\u9D9B>Jie;",
+ "\u9D9C>Ma{o2};",
+ "\u9D9D>F{u2};",
+ "\u9D9E>Chun;",
+ "\u9D9F>T{u2};",
+ "\u9DA0>Y{a3}n;",
+ "\u9DA1>H{e2};",
+ "\u9DA2>Yu{a2}n;",
+ "\u9DA3>Pian;",
+ "\u9DA4>Y{u4}n;",
+ "\u9DA5>Me{i2};",
+ "\u9DA6>H{u2};",
+ "\u9DA7>Ying;",
+ "\u9DA8>D{u4}n;",
+ "\u9DA9>M{u4};",
+ "\u9DAA>J{u2};",
+ "\u9DAC>Cang;",
+ "\u9DAD>F{a3}ng;",
+ "\u9DAE>G{u4};",
+ "\u9DAF>Ying;",
+ "\u9DB0>Yu{a2}n;",
+ "\u9DB1>Xuan;",
+ "\u9DB2>Weng;",
+ "\u9DB3>Shi;",
+ "\u9DB4>H{e4};",
+ "\u9DB5>Ch{u2};",
+ "\u9DB6>T{a2}ng;",
+ "\u9DB7>Xi{a4};",
+ "\u9DB8>Ru{o4};",
+ "\u9DB9>Li{u2};",
+ "\u9DBA>J{i2};",
+ "\u9DBB>G{u2};",
+ "\u9DBC>Jian;",
+ "\u9DBD>Zh{u3}n;",
+ "\u9DBE>H{a4}n;",
+ "\u9DBF>Zi;",
+ "\u9DC0>Zi;",
+ "\u9DC1>N{i4};",
+ "\u9DC2>Ya{o4};",
+ "\u9DC3>Y{a4}n;",
+ "\u9DC4>Ji;",
+ "\u9DC5>L{i4};",
+ "\u9DC6>Ti{a2}n;",
+ "\u9DC7>Ko{u4};",
+ "\u9DC8>Ti;",
+ "\u9DC9>Ti;",
+ "\u9DCA>N{i4};",
+ "\u9DCB>T{u2};",
+ "\u9DCC>M{a3};",
+ "\u9DCD>Jiao;",
+ "\u9DCE>Gao;",
+ "\u9DCF>Ti{a2}n;",
+ "\u9DD0>Ch{e2}n;",
+ "\u9DD1>L{i4};",
+ "\u9DD2>Zhuan;",
+ "\u9DD3>Zh{e4};",
+ "\u9DD4>A{o2};",
+ "\u9DD5>Ya{o3};",
+ "\u9DD6>Yi;",
+ "\u9DD7>Ou;",
+ "\u9DD8>Ch{i4};",
+ "\u9DD9>Zh{i4};",
+ "\u9DDA>Lia{o2};",
+ "\u9DDB>R{o2}ng;",
+ "\u9DDC>Lo{u2};",
+ "\u9DDD>B{i4};",
+ "\u9DDE>Shuang;",
+ "\u9DDF>Zhu{o2};",
+ "\u9DE0>Y{u2};",
+ "\u9DE1>W{u2};",
+ "\u9DE2>Ju{e2};",
+ "\u9DE3>Y{i2}n;",
+ "\u9DE4>Qu{a2}n;",
+ "\u9DE5>Si;",
+ "\u9DE6>Jiao;",
+ "\u9DE7>Y{i4};",
+ "\u9DE8>Hua;",
+ "\u9DE9>B{i4};",
+ "\u9DEA>Ying;",
+ "\u9DEB>S{u4};",
+ "\u9DEC>Hu{a2}ng;",
+ "\u9DED>F{a2}n;",
+ "\u9DEE>Jiao;",
+ "\u9DEF>Lia{o2};",
+ "\u9DF0>Y{a4}n;",
+ "\u9DF1>Kao;",
+ "\u9DF2>Ji{u4};",
+ "\u9DF3>Xi{a2}n;",
+ "\u9DF4>Xi{a2}n;",
+ "\u9DF5>T{u2};",
+ "\u9DF6>Ma{i3};",
+ "\u9DF7>Zun;",
+ "\u9DF8>Y{u4};",
+ "\u9DF9>Ying;",
+ "\u9DFA>L{u4};",
+ "\u9DFB>Tu{a2}n;",
+ "\u9DFC>Xi{a2}n;",
+ "\u9DFD>Xu{e2};",
+ "\u9DFE>Y{i4};",
+ "\u9DFF>P{i4};",
+ "\u9E00>Sh{u2};",
+ "\u9E01>Lu{o2};",
+ "\u9E02>Qi;",
+ "\u9E03>Y{i2};",
+ "\u9E04>J{i2};",
+ "\u9E05>Zh{e2};",
+ "\u9E06>Y{u2};",
+ "\u9E07>Zhan;",
+ "\u9E08>Y{e4};",
+ "\u9E09>Y{a2}ng;",
+ "\u9E0A>P{i4};",
+ "\u9E0B>N{i2}ng;",
+ "\u9E0C>Hu{o4};",
+ "\u9E0D>M{i2};",
+ "\u9E0E>Ying;",
+ "\u9E0F>M{e2}ng;",
+ "\u9E10>D{i2};",
+ "\u9E11>Yu{e4};",
+ "\u9E12>Y{u2};",
+ "\u9E13>Le{i3};",
+ "\u9E14>Ba{o4};",
+ "\u9E15>L{u2};",
+ "\u9E16>H{e4};",
+ "\u9E17>L{o2}ng;",
+ "\u9E18>Shuang;",
+ "\u9E19>Yu{e4};",
+ "\u9E1A>Ying;",
+ "\u9E1B>Gu{a4}n;",
+ "\u9E1C>Q{u2};",
+ "\u9E1D>L{i2};",
+ "\u9E1E>Lu{a2}n;",
+ "\u9E1F>Nia{o3};",
+ "\u9E20>Jiu;",
+ "\u9E21>Ji;",
+ "\u9E22>Yuan;",
+ "\u9E23>M{i2}ng;",
+ "\u9E24>Shi;",
+ "\u9E25>Ou;",
+ "\u9E26>Ya;",
+ "\u9E27>Cang;",
+ "\u9E28>Ba{o3};",
+ "\u9E29>Zh{e4}n;",
+ "\u9E2A>Gu;",
+ "\u9E2B>Dong;",
+ "\u9E2C>L{u2};",
+ "\u9E2D>Ya;",
+ "\u9E2E>Xiao;",
+ "\u9E2F>Yang;",
+ "\u9E30>L{i2}ng;",
+ "\u9E31>Zhi;",
+ "\u9E32>Q{u2};",
+ "\u9E33>Yuan;",
+ "\u9E34>Xu{e2};",
+ "\u9E35>Tu{o2};",
+ "\u9E36>Si;",
+ "\u9E37>Zh{i4};",
+ "\u9E38>{E2}r;",
+ "\u9E39>Gua;",
+ "\u9E3A>Xiu;",
+ "\u9E3B>H{e2}ng;",
+ "\u9E3C>Zhou;",
+ "\u9E3D>Ge;",
+ "\u9E3E>Lu{a2}n;",
+ "\u9E3F>H{o2}ng;",
+ "\u9E40>W{u2};",
+ "\u9E41>B{o2};",
+ "\u9E42>L{i2};",
+ "\u9E43>Juan;",
+ "\u9E44>H{u2};",
+ "\u9E45>{E2};",
+ "\u9E46>Y{u4};",
+ "\u9E47>Xi{a2}n;",
+ "\u9E48>T{i2};",
+ "\u9E49>W{u3};",
+ "\u9E4A>Qu{e4};",
+ "\u9E4B>Mia{o2};",
+ "\u9E4C>An;",
+ "\u9E4D>Kun;",
+ "\u9E4E>Bei;",
+ "\u9E4F>P{e2}ng;",
+ "\u9E50>Qian;",
+ "\u9E51>Ch{u2}n;",
+ "\u9E52>Geng;",
+ "\u9E53>Yuan;",
+ "\u9E54>S{u4};",
+ "\u9E55>H{u2};",
+ "\u9E56>H{e2};",
+ "\u9E57>{E4};",
+ "\u9E58>G{u2};",
+ "\u9E59>Qiu;",
+ "\u9E5A>Zi;",
+ "\u9E5B>Me{i2};",
+ "\u9E5C>M{u4};",
+ "\u9E5D>N{i4};",
+ "\u9E5E>Ya{o4};",
+ "\u9E5F>Weng;",
+ "\u9E60>Li{u2};",
+ "\u9E61>J{i2};",
+ "\u9E62>N{i4};",
+ "\u9E63>Jian;",
+ "\u9E64>H{e4};",
+ "\u9E65>Yi;",
+ "\u9E66>Ying;",
+ "\u9E67>Zh{e4};",
+ "\u9E68>Lia{o2};",
+ "\u9E69>Lia{o2};",
+ "\u9E6A>Jiao;",
+ "\u9E6B>Ji{u4};",
+ "\u9E6C>Y{u4};",
+ "\u9E6D>L{u4};",
+ "\u9E6E>Xu{a2}n;",
+ "\u9E6F>Zhan;",
+ "\u9E70>Ying;",
+ "\u9E71>Hu{o4};",
+ "\u9E72>M{e2}ng;",
+ "\u9E73>Gu{a4}n;",
+ "\u9E74>Shuang;",
+ "\u9E75>L{u3};",
+ "\u9E76>Jin;",
+ "\u9E77>L{i2}ng;",
+ "\u9E78>Ji{a3}n;",
+ "\u9E79>Xi{a2}n;",
+ "\u9E7A>Cu{o2};",
+ "\u9E7B>Ji{a3}n;",
+ "\u9E7C>Ji{a3}n;",
+ "\u9E7D>Y{a2}n;",
+ "\u9E7E>Cu{o2};",
+ "\u9E7F>L{u4};",
+ "\u9E80>You;",
+ "\u9E81>Cu;",
+ "\u9E82>J{i3};",
+ "\u9E83>Biao;",
+ "\u9E84>Cu;",
+ "\u9E85>Biao;",
+ "\u9E86>Zh{u4};",
+ "\u9E87>Jun;",
+ "\u9E88>Zh{u3};",
+ "\u9E89>Jian;",
+ "\u9E8A>M{i2};",
+ "\u9E8B>M{i2};",
+ "\u9E8C>W{u2};",
+ "\u9E8D>Li{u2};",
+ "\u9E8E>Ch{e2}n;",
+ "\u9E8F>Jun;",
+ "\u9E90>L{i2}n;",
+ "\u9E91>N{i2};",
+ "\u9E92>Q{i2};",
+ "\u9E93>L{u4};",
+ "\u9E94>Ji{u4};",
+ "\u9E95>Jun;",
+ "\u9E96>Jing;",
+ "\u9E97>L{i4};",
+ "\u9E98>Xiang;",
+ "\u9E99>Y{a2}n;",
+ "\u9E9A>Jia;",
+ "\u9E9B>M{i2};",
+ "\u9E9C>L{i4};",
+ "\u9E9D>Sh{e4};",
+ "\u9E9E>Zhang;",
+ "\u9E9F>L{i2}n;",
+ "\u9EA0>Jing;",
+ "\u9EA1>Ji;",
+ "\u9EA2>L{i2}ng;",
+ "\u9EA3>Y{a2}n;",
+ "\u9EA4>Cu;",
+ "\u9EA5>Ma{i4};",
+ "\u9EA6>Ma{i4};",
+ "\u9EA7>Ge;",
+ "\u9EA8>Cha{o3};",
+ "\u9EA9>Fu;",
+ "\u9EAA>Mi{a3}n;",
+ "\u9EAB>Mi{a3}n;",
+ "\u9EAC>Fu;",
+ "\u9EAD>Pa{o4};",
+ "\u9EAE>Q{u4};",
+ "\u9EAF>Q{u2};",
+ "\u9EB0>Mo{u2};",
+ "\u9EB1>Fu;",
+ "\u9EB2>Xi{a4}n;",
+ "\u9EB3>La{i2};",
+ "\u9EB4>Q{u2};",
+ "\u9EB5>Mi{a4}n;",
+ "\u9EB7>Feng;",
+ "\u9EB8>Fu;",
+ "\u9EB9>Q{u2};",
+ "\u9EBA>Mi{a4}n;",
+ "\u9EBB>M{a2};",
+ "\u9EBC>M{o1};",
+ "\u9EBD>M{o1};",
+ "\u9EBE>Hui;",
+ "\u9EC0>Zou;",
+ "\u9EC1>Nen;",
+ "\u9EC2>F{e2}n;",
+ "\u9EC3>Hu{a2}ng;",
+ "\u9EC4>Hu{a2}ng;",
+ "\u9EC5>Jin;",
+ "\u9EC6>Guang;",
+ "\u9EC7>Tian;",
+ "\u9EC8>To{u3};",
+ "\u9EC9>H{e2}ng;",
+ "\u9ECA>Xi;",
+ "\u9ECB>Ku{a3}ng;",
+ "\u9ECC>H{e2}ng;",
+ "\u9ECD>Sh{u3};",
+ "\u9ECE>L{i2};",
+ "\u9ECF>Ni{a2}n;",
+ "\u9ED0>Chi;",
+ "\u9ED1>Hei;",
+ "\u9ED2>Hei;",
+ "\u9ED3>Y{i4};",
+ "\u9ED4>Qi{a2}n;",
+ "\u9ED5>Dan;",
+ "\u9ED6>X{i4};",
+ "\u9ED7>Tu{a3}n;",
+ "\u9ED8>M{o4};",
+ "\u9ED9>M{o4};",
+ "\u9EDA>Qi{a2}n;",
+ "\u9EDB>Da{i4};",
+ "\u9EDC>Ch{u4};",
+ "\u9EDD>Yo{u3};",
+ "\u9EDE>Di{a3}n;",
+ "\u9EDF>Yi;",
+ "\u9EE0>Xi{a2};",
+ "\u9EE1>Y{a3}n;",
+ "\u9EE2>Qu;",
+ "\u9EE3>Me{i3};",
+ "\u9EE4>Y{a3}n;",
+ "\u9EE5>Jing;",
+ "\u9EE6>Y{u4};",
+ "\u9EE7>L{i2};",
+ "\u9EE8>D{a3}ng;",
+ "\u9EE9>D{u2};",
+ "\u9EEA>C{a3}n;",
+ "\u9EEB>Yin;",
+ "\u9EEC>{A4}n;",
+ "\u9EED>Yan;",
+ "\u9EEE>T{a3}n;",
+ "\u9EEF>{A4}n;",
+ "\u9EF0>Zh{e3}n;",
+ "\u9EF1>Da{i4};",
+ "\u9EF2>C{a3}n;",
+ "\u9EF3>Yi;",
+ "\u9EF4>Me{i2};",
+ "\u9EF5>D{a3}n;",
+ "\u9EF6>Y{a3}n;",
+ "\u9EF7>D{u2};",
+ "\u9EF8>L{u2};",
+ "\u9EF9>Zh{i3};",
+ "\u9EFA>F{e3}n;",
+ "\u9EFB>F{u4};",
+ "\u9EFC>F{u3};",
+ "\u9EFD>M{i3}n;",
+ "\u9EFE>M{i3}n;",
+ "\u9EFF>Yu{a2}n;",
+ "\u9F00>C{u4};",
+ "\u9F01>Q{u4};",
+ "\u9F02>Cha{o2};",
+ "\u9F03>Wa;",
+ "\u9F04>Zhu;",
+ "\u9F05>Zhi;",
+ "\u9F06>M{a2}ng;",
+ "\u9F07>A{o2};",
+ "\u9F08>Bie;",
+ "\u9F09>Tu{o2};",
+ "\u9F0A>B{i4};",
+ "\u9F0B>Yu{a2}n;",
+ "\u9F0C>Cha{o2};",
+ "\u9F0D>Tu{o2};",
+ "\u9F0E>D{i3}ng;",
+ "\u9F0F>M{i4};",
+ "\u9F10>Na{i4};",
+ "\u9F11>D{i3}ng;",
+ "\u9F12>Zi;",
+ "\u9F13>G{u3};",
+ "\u9F14>G{u3};",
+ "\u9F15>Dong;",
+ "\u9F16>F{e2}n;",
+ "\u9F17>Ta{o2};",
+ "\u9F18>Yuan;",
+ "\u9F19>P{i2};",
+ "\u9F1A>Chang;",
+ "\u9F1B>Gao;",
+ "\u9F1C>Q{i4};",
+ "\u9F1D>Yuan;",
+ "\u9F1E>Tang;",
+ "\u9F1F>Teng;",
+ "\u9F20>Sh{u3};",
+ "\u9F21>Sh{u3};",
+ "\u9F22>F{e2}n;",
+ "\u9F23>Fe{i4};",
+ "\u9F24>W{e2}n;",
+ "\u9F25>B{a2};",
+ "\u9F26>Diao;",
+ "\u9F27>Tu{o2};",
+ "\u9F28>T{o2}ng;",
+ "\u9F29>Q{u2};",
+ "\u9F2A>Sheng;",
+ "\u9F2B>Sh{i2};",
+ "\u9F2C>Yo{u4};",
+ "\u9F2D>Sh{i2};",
+ "\u9F2E>T{i2}ng;",
+ "\u9F2F>W{u2};",
+ "\u9F30>Ni{a4}n;",
+ "\u9F31>Jing;",
+ "\u9F32>H{u2}n;",
+ "\u9F33>J{u2};",
+ "\u9F34>Y{a3}n;",
+ "\u9F35>T{u2};",
+ "\u9F36>T{i2};",
+ "\u9F37>Xi;",
+ "\u9F38>Xi{a3}n;",
+ "\u9F39>Y{a3}n;",
+ "\u9F3A>Le{i2};",
+ "\u9F3B>B{i2};",
+ "\u9F3C>Ya{o3};",
+ "\u9F3D>Qi{u2};",
+ "\u9F3E>Han;",
+ "\u9F3F>Wu;",
+ "\u9F40>W{u4};",
+ "\u9F41>Ho{u2};",
+ "\u9F42>X{i4};",
+ "\u9F43>G{e2};",
+ "\u9F44>Zha;",
+ "\u9F45>Xi{u4};",
+ "\u9F46>W{e4}ng;",
+ "\u9F47>Zha;",
+ "\u9F48>N{o2}ng;",
+ "\u9F49>N{a4}ng;",
+ "\u9F4A>Q{i2};",
+ "\u9F4B>Zhai;",
+ "\u9F4C>J{i4};",
+ "\u9F4D>Zi;",
+ "\u9F4E>Ji;",
+ "\u9F4F>Ji;",
+ "\u9F50>Q{i2};",
+ "\u9F51>Ji;",
+ "\u9F52>Ch{i3};",
+ "\u9F53>Ch{e4}n;",
+ "\u9F54>Ch{e4}n;",
+ "\u9F55>H{e2};",
+ "\u9F56>Y{a2};",
+ "\u9F57>K{e3}n;",
+ "\u9F58>Xi{e4};",
+ "\u9F59>Pa{o2};",
+ "\u9F5A>Cu{o4};",
+ "\u9F5B>Sh{i4};",
+ "\u9F5C>Zi;",
+ "\u9F5D>Chi;",
+ "\u9F5E>Ni{a4}n;",
+ "\u9F5F>J{u3};",
+ "\u9F60>Tia{o2};",
+ "\u9F61>L{i2}ng;",
+ "\u9F62>L{i2}ng;",
+ "\u9F63>Chu;",
+ "\u9F64>Qu{a2}n;",
+ "\u9F65>Xi{e4};",
+ "\u9F66>K{e3}n;",
+ "\u9F67>Ni{e4};",
+ "\u9F68>Ji{u4};",
+ "\u9F69>Ya{o3};",
+ "\u9F6A>Chu{o4};",
+ "\u9F6B>K{u3}n;",
+ "\u9F6C>Y{u3};",
+ "\u9F6D>Ch{u3};",
+ "\u9F6E>Y{i3};",
+ "\u9F6F>N{i2};",
+ "\u9F70>Cu{o4};",
+ "\u9F71>Zou;",
+ "\u9F72>Q{u3};",
+ "\u9F73>N{e3}n;",
+ "\u9F74>Xi{a3}n;",
+ "\u9F75>O{u2};",
+ "\u9F76>{E4};",
+ "\u9F77>W{o4};",
+ "\u9F78>Y{i4};",
+ "\u9F79>Chuo;",
+ "\u9F7A>Zou;",
+ "\u9F7B>Dian;",
+ "\u9F7C>Ch{u3};",
+ "\u9F7D>J{i4}n;",
+ "\u9F7E>Y{a4};",
+ "\u9F7F>Ch{i3};",
+ "\u9F80>Ch{e4}n;",
+ "\u9F81>H{e2};",
+ "\u9F82>K{e3}n;",
+ "\u9F83>J{u3};",
+ "\u9F84>L{i2}ng;",
+ "\u9F85>Pa{o2};",
+ "\u9F86>Tia{o2};",
+ "\u9F87>Zi;",
+ "\u9F88>K{e3}n;",
+ "\u9F89>Y{u3};",
+ "\u9F8A>Chu{o4};",
+ "\u9F8B>Q{u3};",
+ "\u9F8C>W{o4};",
+ "\u9F8D>L{o2}ng;",
+ "\u9F8E>P{a2}ng;",
+ "\u9F8F>Gong;",
+ "\u9F90>P{a2}ng;",
+ "\u9F91>Y{a3}n;",
+ "\u9F92>L{o2}ng;",
+ "\u9F93>L{o2}ng;",
+ "\u9F94>Gong;",
+ "\u9F95>Kan;",
+ "\u9F96>T{a4};",
+ "\u9F97>L{i2}ng;",
+ "\u9F98>T{a4};",
+ "\u9F99>L{o2}ng;",
+ "\u9F9A>Gong;",
+ "\u9F9B>Kan;",
+ "\u9F9C>Gui;",
+ "\u9F9D>Qiu;",
+ "\u9F9E>Bie;",
+ "\u9F9F>Gui;",
+ "\u9FA0>Yu{e4};",
+ "\u9FA1>Chu{i4};",
+ "\u9FA2>H{e2};",
+ "\u9FA3>Ju{e2};",
+ "\u9FA4>Xi{e2};",
+ "\u9FA5>Y{u4};",
+ "\uF90E>L{a4};",
+ "\uFA0C>W{u4};",
+ "\uFA0D>Hu{o4};",
+ "\uFA10>Zh{o3}ng;",
+ "\uFA12>Q{i2}ng;",
+ "\uFA15>Xi;",
+ "\uFA16>Zhu;",
+ "\uFA17>Y{i4};",
+ "\uFA18>L{i3};",
+ "\uFA19>Sh{e2}n;",
+ "\uFA1A>Xi{a2}ng;",
+ "\uFA1B>F{u2};",
+ "\uFA1C>J{i4}ng;",
+ "\uFA1D>Jing;",
+ "\uFA1E>Y{u3};",
+ "\uFA22>Zhu;",
+ "\uFA25>Y{i4};",
+ "\uFA26>Du;",
+ "\uFA2A>F{a4}n;",
+ "\uFA2B>S{i4};",
+ "\uFA2C>Gu{a3}n;",
+ "\uFA2D>H{e4};",
+ };
+ }
+}
diff --git a/src/com/ibm/text/resources/TransliterationRule_Kanji_English.java b/src/com/ibm/text/resources/TransliterationRule_Kanji_English.java
new file mode 100755
index 0000000..3759dc2
--- /dev/null
+++ b/src/com/ibm/text/resources/TransliterationRule_Kanji_English.java
@@ -0,0 +1,6374 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/TransliterationRule_Kanji_English.java,v $
+ * $Date: 2000/03/10 04:07:30 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+import java.util.ListResourceBundle;
+public class TransliterationRule_Kanji_English extends ListResourceBundle {
+ public Object[][] getContents() {
+ return new Object[][] {
+ {"Rule", new String[] {
+ "\u4E01>'[male adult]'",
+ "\u4E03>'[seven]'",
+ "\u4E07>'[ten thousand]'",
+ "\u4E08>'[unit of length equal 3.3 meters]'",
+ "\u4E09>'[three]'",
+ "\u4E0A>'[top]'",
+ "\u4E0B>'[under]'",
+ "\u4E0D>'[no]'",
+ "\u4E0E>'[and]'",
+ "\u4E10>'[beggar]'",
+ "\u4E11>'[clown]'",
+ "\u4E14>'[moreover]'",
+ "\u4E15>'[great]'",
+ "\u4E16>'[generation]'",
+ "\u4E17>'[thirty]'",
+ "\u4E18>'[hill]'",
+ "\u4E19>'[third of heavenly stems]'",
+ "\u4E1E>'[assist]'",
+ "\u4E21>'[two]'",
+ "\u4E26>'[equal to]'",
+ "\u4E2A>'[numerary adjunct]'",
+ "\u4E2D>'[central]'",
+ "\u4E31>'[child''s hairstyle bound in two tufts]'",
+ "\u4E32>'[string]'",
+ "\u4E36>'[dot]'",
+ "\u4E38>'[small round object]'",
+ "\u4E39>'[cinnabar (native HgS)]'",
+ "\u4E3B>'[master]'",
+ "\u4E3C>'[bowl of food]'",
+ "\u4E3F>'[line]'",
+ "\u4E42>'[govern]'",
+ "\u4E43>'[then]'",
+ "\u4E45>'[long time (ago)]'",
+ "\u4E4B>'[''s (marks preceding phrase as modifier of following phrase)]'",
+ "\u4E4D>'[suddenly]'",
+ "\u4E4E>'[interrogative or exclamatory final particle]'",
+ "\u4E4F>'[lack]'",
+ "\u4E55>'[tiger]'",
+ "\u4E56>'[rebel]'",
+ "\u4E57>'[ride]'",
+ "\u4E58>'[ride]'",
+ "\u4E59>'[second heaven''s stem]'",
+ "\u4E5D>'[nine]'",
+ "\u4E5E>'[beg]'",
+ "\u4E5F>'[also]'",
+ "\u4E62>'[lid]'",
+ "\u4E71>'[confusion]'",
+ "\u4E73>'[breast]'",
+ "\u4E7E>'[dry]'",
+ "\u4E80>'[turtle or tortoise]'",
+ "\u4E82>'[confusion]'",
+ "\u4E85>'[hook]'",
+ "\u4E86>'[to finish]'",
+ "\u4E88>'[I]'",
+ "\u4E89>'[dispute]'",
+ "\u4E8A>'[affair]'",
+ "\u4E8B>'[affair]'",
+ "\u4E8C>'[two]'",
+ "\u4E8E>'[in]'",
+ "\u4E91>'[say]'",
+ "\u4E92>'[mutually]'",
+ "\u4E94>'[five]'",
+ "\u4E95>'[well]'",
+ "\u4E98>'[extend across]'",
+ "\u4E99>'[extend across]'",
+ "\u4E9B>'[little]'",
+ "\u4E9C>'[asia]'",
+ "\u4E9E>'[asia]'",
+ "\u4E9F>'[urgently]'",
+ "\u4EA0>'[head]'",
+ "\u4EA1>'[death]'",
+ "\u4EA2>'[high]'",
+ "\u4EA4>'[mix]'",
+ "\u4EA5>'[last of 12 earth branches]'",
+ "\u4EA6>'[also]'",
+ "\u4EA8>'[smoothly]'",
+ "\u4EAB>'[enjoy]'",
+ "\u4EAC>'[capital city]'",
+ "\u4EAD>'[pavilion]'",
+ "\u4EAE>'[bright]'",
+ "\u4EB0>'[capital city]'",
+ "\u4EB3>'[name of district in Anhui]'",
+ "\u4EB6>'[sincere]'",
+ "\u4EBA>'[man]'",
+ "\u4EC0>'[file of ten soldiers]'",
+ "\u4EC1>'[humaneness]'",
+ "\u4EC2>'[surplus or excess]'",
+ "\u4EC4>'[slanting]'",
+ "\u4EC6>'[fall forward]'",
+ "\u4EC7>'[enemy]'",
+ "\u4ECA>'[now]'",
+ "\u4ECB>'[forerunner]'",
+ "\u4ECD>'[yet]'",
+ "\u4ECE>'[from]'",
+ "\u4ECF>'[buddha]'",
+ "\u4ED4>'[small thing]'",
+ "\u4ED5>'[official]'",
+ "\u4ED6>'[other]'",
+ "\u4ED7>'[rely upon]'",
+ "\u4ED8>'[give]'",
+ "\u4ED9>'[Taoist super-being]'",
+ "\u4EDD>'[together]'",
+ "\u4EDE>'[ancient unit of measure (8 feet)]'",
+ "\u4EDF>'[one thousand]'",
+ "\u4EE3>'[replace]'",
+ "\u4EE4>'[command]'",
+ "\u4EE5>'[by means of]'",
+ "\u4EED>'[ancient unit of measure (8 feet)]'",
+ "\u4EEE>'[falsehood]'",
+ "\u4EF0>'[raise the head to look]'",
+ "\u4EF2>'[middle brother]'",
+ "\u4EF6>'[numerary adjunct for article]'",
+ "\u4EF7>'[price]'",
+ "\u4EFB>'[trust to]'",
+ "\u4F01>'[plan a project]'",
+ "\u4F09>'[compare]'",
+ "\u4F0A>'[third person pronoun]'",
+ "\u4F0D>'[five]'",
+ "\u4F0E>'[talent]'",
+ "\u4F0F>'[crouch]'",
+ "\u4F10>'[cut down]'",
+ "\u4F11>'[rest]'",
+ "\u4F1A>'[assemble]'",
+ "\u4F1C>'[deputy]'",
+ "\u4F1D>'[summon]'",
+ "\u4F2F>'[older brother]'",
+ "\u4F30>'[merchant]'",
+ "\u4F34>'[companion]'",
+ "\u4F36>'[lonely]'",
+ "\u4F38>'[extend]'",
+ "\u4F3A>'[serve]'",
+ "\u4F3C>'[resemble]'",
+ "\u4F3D>'[transcription of sanskrit gha in buddhist texts ('\u00ebm\u00e2\u00e6 \"samgha\"')]'",
+ "\u4F43>'[tenant farmer]'",
+ "\u4F46>'[only]'",
+ "\u4F47>'[wait]'",
+ "\u4F4D>'[throne]'",
+ "\u4F4E>'[low]'",
+ "\u4F4F>'[reside]'",
+ "\u4F50>'[assist]'",
+ "\u4F51>'[help]'",
+ "\u4F53>'[body]'",
+ "\u4F55>'[what]'",
+ "\u4F57>'[other]'",
+ "\u4F59>'[I]'",
+ "\u4F5A>'[indulge in pleasures]'",
+ "\u4F5B>'[buddha (contraction of MC 'bhi\u00eatdha')]'",
+ "\u4F5C>'[make]'",
+ "\u4F5D>'[rickets]'",
+ "\u4F5E>'[flattery]'",
+ "\u4F69>'[belt ornament]'",
+ "\u4F6F>'[pretend]'",
+ "\u4F70>'[hundred]'",
+ "\u4F73>'[good]'",
+ "\u4F75>'[combine]'",
+ "\u4F76>'[strong]'",
+ "\u4F7B>'[frivolous]'",
+ "\u4F7C>'[beautiful]'",
+ "\u4F7F>'[cause]'",
+ "\u4F83>'[upright and strong]'",
+ "\u4F86>'[come]'",
+ "\u4F88>'[luxurious]'",
+ "\u4F8B>'[precedent]'",
+ "\u4F8D>'[serve]'",
+ "\u4F8F>'[small]'",
+ "\u4F91>'[help]'",
+ "\u4F96>'[logical reasons]'",
+ "\u4F98>'[disappointed]'",
+ "\u4F9B>'[supply]'",
+ "\u4F9D>'[rely on]'",
+ "\u4FA0>'[chivalrous person]'",
+ "\u4FA1>'[price]'",
+ "\u4FAB>'[flattery]'",
+ "\u4FAD>'[complete]'",
+ "\u4FAE>'[insult]'",
+ "\u4FAF>'[marquis]'",
+ "\u4FB5>'[invade]'",
+ "\u4FB6>'[companion]'",
+ "\u4FBF>'[convenience]'",
+ "\u4FC2>'[bind]'",
+ "\u4FC3>'[urge]'",
+ "\u4FC4>'[sudden(ly)]'",
+ "\u4FCA>'[talented]'",
+ "\u4FCE>'[chopping board or block]'",
+ "\u4FD0>'[smooth]'",
+ "\u4FD1>'[wooden figure buried with dead]'",
+ "\u4FD4>'[like]'",
+ "\u4FD7>'[social customs]'",
+ "\u4FD8>'[prisoner of war]'",
+ "\u4FDA>'[rustic]'",
+ "\u4FDB>'[make effort]'",
+ "\u4FDD>'[protect]'",
+ "\u4FDF>'[wait for]'",
+ "\u4FE1>'[trust]'",
+ "\u4FE3>'[big]'",
+ //"\u4FE3>'[big]'",
+ "\u4FE5>'[rickshaw]'",
+ "\u4FEE>'[study]'",
+ "\u4FEF>'[bow down]'",
+ "\u4FF3>'[actor]'",
+ "\u4FF5>'[divide]'",
+ "\u4FF6>'[start]'",
+ "\u4FF8>'[wages]'",
+ "\u4FFA>'[personal pronoun]'",
+ "\u4FFE>'[so that]'",
+ "\u5005>'[deputy]'",
+ "\u5006>'[clever]'",
+ "\u5009>'[granary]'",
+ "\u500B>'[numerary adjunct]'",
+ "\u500D>'[times]'",
+ "\u500F>'[hastily]'",
+ "\u5011>'[adjunct pronoun indicate plural]'",
+ "\u5012>'[fall over]'",
+ "\u5014>'[stubborn]'",
+ "\u5016>'[lucky]'",
+ "\u5019>'[wait]'",
+ "\u501A>'[rely on]'",
+ "\u501F>'[borrow]'",
+ "\u5021>'[guide]'",
+ "\u5023>'[imitate]'",
+ "\u5024>'[price]'",
+ "\u5025>'[boorish]'",
+ "\u5026>'[be tired of]'",
+ "\u5028>'[arrogant]'",
+ "\u5029>'[beautiful]'",
+ "\u502A>'[feeble]'",
+ "\u502B>'[normal human relationships]'",
+ "\u502C>'[noticeable]'",
+ "\u502D>'[dwarf]'",
+ "\u5036>'[all]'",
+ "\u5039>'[temperate]'",
+ "\u5043>'[cease]'",
+ "\u5047>'[falsehood]'",
+ "\u5048>'[brave]'",
+ "\u5049>'[great]'",
+ "\u504F>'[inclined one side]'",
+ "\u5050>'[false]'",
+ "\u5055>'[together]'",
+ "\u5056>'[rip up]'",
+ "\u505A>'[work]'",
+ "\u505C>'[stop]'",
+ "\u5065>'[strong]'",
+ "\u506C>'[urgent]'",
+ "\u5072>'[talented]'",
+ "\u5074>'[side]'",
+ "\u5075>'[spy]'",
+ "\u5076>'[accidentally]'",
+ "\u5078>'[to steal]'",
+ "\u507D>'[false]'",
+ "\u5080>'[great]'",
+ "\u5085>'[tutor]'",
+ "\u508D>'[by side of]'",
+ "\u5091>'[hero]'",
+ "\u5098>'[umbrella]'",
+ "\u5099>'[prepare]'",
+ "\u509A>'[imitate]'",
+ "\u50AC>'[press]'",
+ "\u50AD>'[hire]'",
+ "\u50B2>'[proud]'",
+ "\u50B3>'[summon]'",
+ "\u50B4>'[humpback]'",
+ "\u50B5>'[debt]'",
+ "\u50B7>'[wound]'",
+ "\u50BE>'[upset]'",
+ "\u50C2>'[humpback]'",
+ "\u50C5>'[only]'",
+ "\u50C9>'[all]'",
+ "\u50CA>'[Taoist super-being]'",
+ "\u50CD>'[labor]'",
+ "\u50CF>'[picture]'",
+ "\u50D1>'[sojourn]'",
+ "\u50D5>'[slave]'",
+ "\u50D6>'[joy]'",
+ "\u50DA>'[companion]'",
+ "\u50DE>'[false]'",
+ "\u50E3>'[assume]'",
+ "\u50E5>'[be lucky]'",
+ "\u50E7>'[buddhist priest]'",
+ "\u50ED>'[assume]'",
+ "\u50EE>'[page]'",
+ "\u50F5>'[stiff and motionless]'",
+ "\u50F9>'[price]'",
+ "\u50FB>'[out-of-the-way]'",
+ "\u5100>'[ceremony]'",
+ "\u5101>'[outstanding]'",
+ "\u5102>'[I]'",
+ "\u5104>'[hundred million]'",
+ "\u5109>'[temperate]'",
+ "\u5112>'[confucian scholar]'",
+ "\u5114>'[companion]'",
+ "\u5115>'[a company]'",
+ //"\u5115>'[a company]'",
+ "\u5118>'[utmost]'",
+ //"\u5118>'[utmost]'",
+ "\u511F>'[repay]'",
+ "\u5121>'[puppet]'",
+ "\u512A>'[superior]'",
+ "\u5132>'[save money]'",
+ "\u5137>'[spouse]'",
+ "\u513A>'[rich]'",
+ "\u513B>'[if]'",
+ "\u513C>'[grave]'",
+ "\u513F>'[son]'",
+ "\u5140>'[to cut off the feet]'",
+ "\u5141>'[to grant]'",
+ "\u5143>'[first]'",
+ "\u5144>'[elder brother]'",
+ "\u5145>'[fill]'",
+ "\u5146>'[omen]'",
+ "\u5147>'[atrocious]'",
+ "\u5148>'[first]'",
+ "\u5149>'[light]'",
+ "\u514B>'[gram]'",
+ "\u514C>'[cash]'",
+ "\u514D>'[spare]'",
+ "\u514E>'[rabbit]'",
+ "\u5150>'[son]'",
+ "\u5152>'[son]'",
+ "\u5154>'[rabbit]'",
+ "\u515A>'[political party]'",
+ "\u515C>'[pouch]'",
+ "\u5162>'[fearful]'",
+ "\u5165>'[enter]'",
+ "\u5168>'[maintain]'",
+ "\u5169>'[two]'",
+ "\u516A>'[surname]'",
+ "\u516B>'[eight]'",
+ "\u516C>'[fair]'",
+ "\u516D>'[number six]'",
+ "\u516E>'[exclamatory particle]'",
+ "\u5171>'[together with]'",
+ "\u5175>'[soldier]'",
+ "\u5176>'[his]'",
+ "\u5177>'[tool]'",
+ "\u5178>'[law]'",
+ "\u517C>'[unite]'",
+ "\u5180>'[hope for]'",
+ "\u5182>'[wide]'",
+ "\u5185>'[inside]'",
+ "\u5186>'[yen]'",
+ "\u5189>'[tender]'",
+ "\u518A>'[book]'",
+ "\u518C>'[book]'",
+ "\u518D>'[again]'",
+ "\u518F>'[[not found in dictionary]]'",
+ "\u5190>'[risk]'",
+ "\u5191>'[helmet]'",
+ "\u5192>'[risk]'",
+ "\u5193>'[a secluded place]'",
+ "\u5195>'[crown]'",
+ "\u5196>'[cover]'",
+ "\u5197>'[excessive]'",
+ "\u5199>'[write]'",
+ "\u51A0>'[cap]'",
+ "\u51A2>'[burial mound]'",
+ "\u51A4>'[grievance]'",
+ "\u51A5>'[dark]'",
+ "\u51A6>'[bandits]'",
+ "\u51A8>'[abundant]'",
+ "\u51A9>'[write]'",
+ "\u51AA>'[cover-cloth]'",
+ "\u51AB>'[ice]'",
+ "\u51AC>'[winter]'",
+ "\u51B0>'[ice]'",
+ "\u51B1>'[freezing]'",
+ "\u51B2>'[soar]'",
+ "\u51B3>'[decide]'",
+ "\u51B4>'[freezing]'",
+ "\u51B5>'[condition]'",
+ "\u51B6>'[smelt]'",
+ "\u51B7>'[cold]'",
+ "\u51BD>'[cold and raw]'",
+ "\u51C4>'[bitter cold]'",
+ "\u51C5>'[dried up]'",
+ "\u51C6>'[approve]'",
+ "\u51C9>'[cool]'",
+ "\u51CB>'[be withered]'",
+ "\u51CC>'[pure]'",
+ "\u51CD>'[freeze]'",
+ "\u51D6>'[rule]'",
+ "\u51DB>'[to shiver with cold or fear]'",
+ "\u51DC>'[shiver with cold or fear]'",
+ "\u51DD>'[coagulate]'",
+ "\u51E0>'[small table]'",
+ "\u51E1>'[all]'",
+ "\u51E6>'[place]'",
+ "\u51E7>'[kite]'",
+ "\u51E9>'[wintry wind]'",
+ "\u51EA>'[calm]'",
+ "\u51ED>'[lean on]'",
+ "\u51F0>'[female phoenix]'",
+ "\u51F1>'[triumphant]'",
+ "\u51F5>'[receptacle]'",
+ "\u51F6>'[culprit]'",
+ "\u51F8>'[protrude]'",
+ "\u51F9>'[concave]'",
+ "\u51FA>'[go out]'",
+ "\u51FD>'[correspondence]'",
+ "\u51FE>'[correspondence]'",
+ "\u5200>'[knife]'",
+ "\u5203>'[edged tool]'",
+ "\u5204>'[edged tool]'",
+ "\u5206>'[divide]'",
+ "\u5207>'[cut]'",
+ "\u5208>'[cut off]'",
+ "\u520A>'[publication]'",
+ "\u520B>'[publication]'",
+ "\u520E>'[behead]'",
+ "\u5211>'[punishment]'",
+ "\u5214>'[scoop out]'",
+ "\u5217>'[line]'",
+ "\u521D>'[beginning]'",
+ "\u5224>'[judge]'",
+ "\u5225>'[separate]'",
+ "\u5227>'[disaster]'",
+ "\u5229>'[gains]'",
+ "\u522A>'[to cut]'",
+ "\u522E>'[shave]'",
+ "\u5230>'[go to]'",
+ "\u5233>'[cut out]'",
+ "\u5236>'[system]'",
+ "\u5237>'[brush]'",
+ "\u5238>'[certificate]'",
+ "\u5239>'[temple]'",
+ "\u523A>'[stab]'",
+ "\u523B>'[carve]'",
+ "\u5243>'[shave]'",
+ "\u5244>'[cut throat]'",
+ "\u5247>'[rule]'",
+ "\u524A>'[scrape off]'",
+ "\u524B>'[subdue]'",
+ "\u524C>'[slash]'",
+ "\u524D>'[in front]'",
+ "\u524F>'[establish]'",
+ "\u5254>'[pick out]'",
+ "\u5256>'[split in two]'",
+ "\u525B>'[hard]'",
+ "\u525E>'[carving or engraving knife]'",
+ "\u5263>'[sword]'",
+ "\u5264>'[medicinal preparation]'",
+ "\u5265>'[peel]'",
+ "\u5269>'[leftovers]'",
+ "\u526A>'[scissors]'",
+ "\u526F>'[assist]'",
+ "\u5270>'[leftovers]'",
+ "\u5271>'[sword]'",
+ "\u5272>'[cut]'",
+ "\u5273>'[brief note]'",
+ "\u5274>'[sharpen]'",
+ "\u5275>'[establish]'",
+ "\u527D>'[rob]'",
+ "\u527F>'[destroy]'",
+ "\u5283>'[divide]'",
+ "\u5287>'[theatrical plays]'",
+ "\u5288>'[cut apart]'",
+ "\u5289>'[surname]'",
+ "\u528D>'[sword]'",
+ "\u5291>'[medicinal preparation]'",
+ "\u5292>'[sword]'",
+ "\u5294>'[sword]'",
+ "\u529B>'[power]'",
+ "\u529F>'[achievement]'",
+ "\u52A0>'[add to]'",
+ "\u52A3>'[bad]'",
+ "\u52A9>'[help]'",
+ "\u52AA>'[exert]'",
+ "\u52AB>'[take by force]'",
+ "\u52AC>'[be diligent]'",
+ "\u52AD>'[encourage]'",
+ "\u52B1>'[strive]'",
+ "\u52B4>'[labor]'",
+ "\u52B5>'[certificate]'",
+ "\u52B9>'[efficacious]'",
+ "\u52BC>'[be discreet]'",
+ "\u52BE>'[examine into]'",
+ "\u52C1>'[strong]'",
+ "\u52C3>'[suddenly]'",
+ "\u52C5>'[imperial degree]'",
+ "\u52C7>'[brave]'",
+ "\u52C9>'[endeavor]'",
+ "\u52CD>'[strong]'",
+ "\u52D2>'[strangle]'",
+ "\u52D5>'[move]'",
+ "\u52D7>'[enjoin]'",
+ "\u52D8>'[investigate]'",
+ "\u52D9>'[affairs]'",
+ "\u52DD>'[victory]'",
+ "\u52DE>'[labor]'",
+ "\u52DF>'[levy]'",
+ "\u52E0>'[join forces]'",
+ "\u52E2>'[power]'",
+ "\u52E3>'[achievements]'",
+ "\u52E4>'[industrious]'",
+ "\u52E6>'[destroy]'",
+ "\u52E7>'[recommend]'",
+ "\u52F2>'[meritorious deed]'",
+ "\u52F3>'[meritorious deed]'",
+ "\u52F5>'[strive]'",
+ "\u52F8>'[recommend]'",
+ "\u52F9>'[wrap]'",
+ "\u52FA>'[spoon]'",
+ "\u52FE>'[hook]'",
+ "\u52FF>'[must not]'",
+ "\u5301>'[Japanese unit of weight (1/1000 of a kan)]'",
+ "\u5302>'[fragrance]'",
+ "\u5305>'[wrap]'",
+ "\u5306>'[hastily]'",
+ "\u5308>'[breast]'",
+ "\u530D>'[crawl]'",
+ "\u530F>'[gourd]'",
+ "\u5310>'[fall prostrate]'",
+ "\u5315>'[spoon]'",
+ "\u5316>'[change]'",
+ "\u5317>'[north]'",
+ "\u5319>'[spoon]'",
+ "\u531A>'[box]'",
+ "\u531D>'[full circle]'",
+ "\u5320>'[craftsman]'",
+ "\u5321>'[correct]'",
+ "\u5323>'[small box]'",
+ "\u532A>'[bandits]'",
+ "\u532F>'[concourse]'",
+ "\u5331>'[to lack]'",
+ "\u5333>'[ladies toilet case with mirror]'",
+ "\u5338>'[box]'",
+ "\u5339>'[bolt of cloth]'",
+ "\u533A>'[area]'",
+ "\u533B>'[cure]'",
+ "\u533F>'[hide]'",
+ "\u5340>'[area]'",
+ "\u5341>'[ten]'",
+ "\u5343>'[thousand]'",
+ "\u5345>'[thirty]'",
+ "\u5346>'[soldier]'",
+ "\u5347>'[arise]'",
+ "\u5348>'[noon]'",
+ "\u5349>'[general term for plants]'",
+ "\u534A>'[half]'",
+ "\u534D>'[swastika - fourth of auspicious]'",
+ "\u5351>'[humble]'",
+ "\u5352>'[soldier]'",
+ "\u5353>'[profound]'",
+ "\u5354>'[be united]'",
+ "\u5357>'[south]'",
+ //"\u5357>'[south]'",
+ "\u535A>'[gamble]'",
+ "\u535C>'[fortune telling]'",
+ "\u535E>'[be impatient]'",
+ "\u5360>'[divine]'",
+ "\u5366>'[fortune telling]'",
+ "\u5369>'[seal]'",
+ "\u536E>'[measuring cup]'",
+ "\u536F>'[4th of Earth Branches]'",
+ "\u5370>'[print]'",
+ "\u5371>'[dangerous]'",
+ "\u5373>'[promptly]'",
+ "\u5374>'[still]'",
+ "\u5375>'[egg]'",
+ "\u5377>'[scroll]'",
+ "\u5378>'[lay down]'",
+ "\u537B>'[still]'",
+ "\u537F>'[noble]'",
+ "\u5382>'[factory]'",
+ "\u5384>'[adversity]'",
+ "\u5396>'[bulky]'",
+ "\u5398>'[thousandth part of tael]'",
+ "\u539A>'[thick]'",
+ "\u539F>'[source]'",
+ "\u53A0>'[mingle with]'",
+ "\u53A5>'[personal pronoun - he]'",
+ "\u53A6>'[big building]'",
+ "\u53A8>'[kitchen]'",
+ "\u53A9>'[stable]'",
+ "\u53AD>'[dislike]'",
+ "\u53AE>'[servant]'",
+ "\u53B0>'[factory]'",
+ "\u53B3>'[strict]'",
+ "\u53B6>'[private]'",
+ "\u53BB>'[go away]'",
+ "\u53C2>'[take part in]'",
+ "\u53C3>'[take part in]'",
+ "\u53C8>'[and]'",
+ "\u53C9>'[crotch]'",
+ "\u53CA>'[extend]'",
+ "\u53CB>'[friend]'",
+ "\u53CC>'[set of two]'",
+ "\u53CD>'[reverse]'",
+ "\u53CE>'[gather together]'",
+ "\u53D4>'[father''s younger brother]'",
+ "\u53D6>'[take]'",
+ "\u53D7>'[receive]'",
+ "\u53D9>'[express]'",
+ "\u53DB>'[rebel]'",
+ "\u53DF>'[old man]'",
+ "\u53E1>'[astute]'",
+ "\u53E2>'[bush]'",
+ "\u53E3>'[mouth]'",
+ "\u53E4>'[old]'",
+ "\u53E5>'[sentence]'",
+ "\u53E8>'[talkative]'",
+ "\u53E9>'[knock]'",
+ "\u53EA>'[only]'",
+ "\u53EB>'[cry]'",
+ "\u53EC>'[imperial decree]'",
+ "\u53ED>'[trumpet]'",
+ "\u53EE>'[exhort or enjoin repeatedly]'",
+ "\u53EF>'[may]'",
+ "\u53F0>'[platform]'",
+ "\u53F1>'[scold]'",
+ "\u53F2>'[history]'",
+ "\u53F3>'[right]'",
+ "\u53F6>'[to harmonize]'",
+ "\u53F7>'[mark]'",
+ "\u53F8>'[take charge of]'",
+ //"\u53F9>'[sigh]'",
+ "\u5401>'['interjection \"Alas!\"']'",
+ "\u5403>'[eat]'",
+ "\u5404>'[each]'",
+ "\u5408>'[combine]'",
+ "\u5409>'[lucky]'",
+ "\u540A>'[condole]'",
+ "\u540B>'[inch]'",
+ "\u540C>'[same]'",
+ "\u540D>'[name]'",
+ "\u540E>'[queen]'",
+ "\u540F>'[government official]'",
+ "\u5410>'[vomit]'",
+ "\u5411>'[toward]'",
+ "\u541B>'[sovereign]'",
+ "\u541D>'[stingy]'",
+ "\u541F>'[sing]'",
+ "\u5420>'[bark]'",
+ "\u5426>'[not]'",
+ "\u5429>'[order]'",
+ "\u542B>'[hold in mouth]'",
+ "\u542C>'[hear]'",
+ "\u542D>'[throat]'",
+ "\u542E>'[suck with mouth]'",
+ "\u5436>'[raise voice]'",
+ "\u5438>'[inhale]'",
+ "\u5439>'[blow]'",
+ "\u543B>'[kiss]'",
+ "\u543C>'[roar]'",
+ "\u543D>'['\"OM\"']'",
+ "\u543E>'[i]'",
+ "\u5440>'[particle used express surprise]'",
+ "\u5442>'[surname]'",
+ "\u5446>'[dull]'",
+ "\u5448>'[submit]'",
+ "\u5449>'[one of warring states]'",
+ "\u544A>'[tell]'",
+ "\u544E>'[foot]'",
+ "\u5451>'[swallow]'",
+ //"\u545C>'[sound of crying]'",
+ "\u5468>'[zhou dynasty]'",
+ "\u546A>'[curse]'",
+ //"\u5470>'[................................]'",
+ "\u5471>'[wail]'",
+ "\u5473>'[taste]'",
+ "\u5475>'[scold]'",
+ "\u5476>'[talkative]'",
+ "\u5477>'[suck]'",
+ "\u547B>'[groan]'",
+ "\u547C>'[breathe sigh]'",
+ "\u547D>'[life]'",
+ "\u5480>'[suck]'",
+ "\u5484>'[noise of rage]'",
+ "\u5486>'[roar]'",
+ "\u548B>'[why? how? what?]'",
+ "\u548C>'[harmony]'",
+ "\u548E>'[fault]'",
+ "\u548F>'[sing song or poem]'",
+ "\u5490>'[instruct]'",
+ "\u5492>'[curse]'",
+ "\u54A2>'[sound]'",
+ "\u54A4>'[scold]'",
+ "\u54A5>'[sound of cat]'",
+ "\u54A8>'[inquire]'",
+ "\u54AB>'[foot measure of Zhou dynasty]'",
+ "\u54AC>'[bite]'",
+ "\u54AF>'[final particle]'",
+ "\u54B2>'[smile]'",
+ "\u54B3>'[cough]'",
+ "\u54B8>'[together]'",
+ "\u54BC>'[chat]'",
+ "\u54BD>'[throat]'",
+ "\u54BE>'[a noise]'",
+ "\u54C0>'[sad]'",
+ "\u54C1>'[article]'",
+ "\u54C2>'[smile]'",
+ "\u54C4>'[coax]'",
+ "\u54C7>'[vomit]'",
+ "\u54C8>'[sound of laughter]'",
+ "\u54C9>'[final exclamatory particle]'",
+ //"\u54D7>'[rushing sound]'",
+ "\u54E1>'[member]'",
+ "\u54E2>'[syllable]'",
+ "\u54E5>'[elder brother]'",
+ "\u54E6>'[oh? really? is that so?]'",
+ "\u54E8>'[whistle]'",
+ "\u54E9>'[mile]'",
+ "\u54ED>'[weep]'",
+ "\u54EE>'[cough]'",
+ "\u54F2>'[wise]'",
+ "\u54FA>'[chew food]'",
+ "\u54FD>'[choke]'",
+ "\u5504>'[final particle of assertion pathaka]'",
+ "\u5506>'[make mischief]'",
+ "\u5507>'[lips]'",
+ "\u550F>'[weep or sob]'",
+ "\u5510>'[tang dynasty]'",
+ "\u5514>'[hold in mouth]'",
+ "\u5516>'[dumb]'",
+ "\u552E>'[sell]'",
+ "\u552F>'[only]'",
+ "\u5531>'[sing]'",
+ "\u5533>'[cry of bird]'",
+ "\u5538>'[recite]'",
+ "\u5539>'[to smile at]'",
+ "\u553E>'[spit]'",
+ "\u5540>'[gnaw]'",
+ "\u5544>'[to peck]'",
+ //"\u5544>'[to peck]'",
+ "\u5546>'[commerce]'",
+ "\u554C>'[animal disease]'",
+ "\u554F>'[ask (about)]'",
+ "\u5553>'[open]'",
+ "\u5556>'[eat]'",
+ "\u5557>'[eat]'",
+ "\u555C>'[sip]'",
+ //"\u555C>'[sip]'",
+ "\u5563>'[hold in mouth]'",
+ "\u557B>'[only]'",
+ "\u557C>'[weep]'",
+ "\u557E>'[wailing of child]'",
+ "\u5580>'[vomit]'",
+ "\u5583>'[keep talking]'",
+ "\u5584>'[good]'",
+ "\u5587>'[horn]'",
+ "\u5589>'[throat]'",
+ "\u558A>'[shout]'",
+ "\u558B>'[nag]'",
+ "\u5598>'[pant]'",
+ "\u5599>'[beak]'",
+ "\u559A>'[call]'",
+ "\u559C>'[like]'",
+ "\u559D>'[drink]'",
+ "\u559E>'[chirping of insects]'",
+ "\u559F>'[heave sigh]'",
+ "\u55A7>'[lively]'",
+ "\u55A8>'[wail]'",
+ "\u55A9>'[metaphor]'",
+ "\u55AA>'[mourning]'",
+ "\u55AB>'[eat]'",
+ "\u55AC>'[tall]'",
+ "\u55AE>'[single]'",
+ "\u55B0>'[to eat]'",
+ "\u55B6>'[encampment]'",
+ "\u55C4>'[hoarse of voice]'",
+ "\u55C5>'[smell]'",
+ "\u55C7>'[miserly]'",
+ "\u55D4>'[be angry at]'",
+ "\u55DA>'[sound of crying]'",
+ "\u55DC>'[be fond of]'",
+ "\u55DF>'[sigh]'",
+ "\u55E3>'[to connect]'",
+ "\u55E4>'[laugh at]'",
+ "\u55F7>'[loud clamor]'",
+ "\u55F9>'[chatter]'",
+ "\u55FD>'[cough]'",
+ "\u55FE>'[to set a dog on]'",
+ "\u5606>'[sigh]'",
+ "\u5609>'[excellent]'",
+ "\u5614>'[vomit]'",
+ "\u5616>'[interjection of approval or admi]'",
+ "\u5617>'[taste]'",
+ "\u5618>'[exhale]'",
+ "\u561B>'[final exclamatory particle]'",
+ "\u5629>'[rushing sound]'",
+ "\u562F>'[roar]'",
+ "\u5631>'[order]'",
+ "\u5632>'[ridicule]'",
+ "\u5634>'[mouth]'",
+ "\u5636>'[neighing of a horse]'",
+ "\u5638>'[unclear]'",
+ "\u5642>'[meet]'",
+ "\u564C>'[scold]'",
+ "\u564E>'[choke]'",
+ "\u5650>'[receptacle]'",
+ "\u565B>'[bite]'",
+ "\u5664>'[close]'",
+ "\u5668>'[receptacle]'",
+ "\u566A>'[be noisy]'",
+ "\u566B>'[belch]'",
+ "\u566C>'[bite]'",
+ "\u5674>'[spurt]'",
+ "\u5678>'[metric ton]'",
+ "\u567A>'[story]'",
+ "\u5680>'[enjoin]'",
+ "\u5686>'[give forth sound]'",
+ "\u5687>'[scare]'",
+ "\u568A>'[to pant]'",
+ "\u568F>'[sneeze]'",
+ "\u5694>'[sneeze]'",
+ //"\u569C>'[be silent]'",
+ "\u56A2>'[bag]'",
+ "\u56A5>'[swallow]'",
+ "\u56AE>'[guide]'",
+ "\u56B4>'[strict]'",
+ "\u56B6>'[seek friends]'",
+ "\u56BC>'[prattle]'",
+ "\u56C0>'[sing]'",
+ "\u56C1>'[move lip when speaking]'",
+ "\u56C2>'[be noisy]'",
+ //"\u56C2>'[be noisy]'",
+ "\u56C8>'[talk in one''s sleep]'",
+ //"\u56CD>'[double happiness]'",
+ "\u56D1>'[order]'",
+ "\u56D3>'[gnaw]'",
+ "\u56D7>'[erect]'",
+ "\u56D8>'[return]'",
+ "\u56DA>'[prisoner]'",
+ "\u56DB>'[four]'",
+ "\u56DE>'[return]'",
+ "\u56E0>'[cause]'",
+ "\u56E3>'[sphere]'",
+ "\u56EE>'[inveigle]'",
+ "\u56F0>'[surround]'",
+ "\u56F2>'[surround]'",
+ "\u56F3>'[diagram]'",
+ "\u56F9>'[prison]'",
+ "\u56FA>'[become solid]'",
+ "\u56FD>'[nation]'",
+ "\u56FF>'[pen up]'",
+ "\u5700>'[nation]'",
+ "\u5703>'[garden]'",
+ "\u5704>'[prison]'",
+ "\u5708>'[to circle]'",
+ "\u5709>'[stable]'",
+ "\u570B>'[nation]'",
+ "\u570D>'[surround]'",
+ "\u570F>'[to circle]'",
+ "\u5712>'[garden]'",
+ "\u5713>'[circle]'",
+ "\u5716>'[diagram]'",
+ "\u5718>'[sphere]'",
+ "\u571C>'[circle]'",
+ "\u571F>'[soil]'",
+ "\u5726>'[(kokuji) water gate]'",
+ //"\u5726>'[(kokuji) water gate]'",
+ "\u5728>'[be at]'",
+ "\u572D>'[jade pointed at top]'",
+ "\u5730>'[earth]'",
+ //"\u5733>'[furrow in field]'",
+ //"\u5733>'[furrow in field]'",
+ "\u573B>'[border]'",
+ "\u5740>'[site]'",
+ "\u5742>'[hillside]'",
+ "\u5747>'[equal]'",
+ "\u574A>'[neighborhood]'",
+ "\u574E>'[pit]'",
+ "\u574F>'[rotten]'",
+ "\u5750>'[sit]'",
+ "\u5751>'[pit]'",
+ "\u5761>'[slope]'",
+ "\u5764>'[earth]'",
+ "\u5766>'[flat]'",
+ "\u5769>'[earthenware]'",
+ "\u576A>'[level ground]'",
+ "\u577F>'[mound]'",
+ "\u5782>'[let down]'",
+ //"\u5786>'[black clods of earth]'",
+ //"\u5789>'[................................]'",
+ "\u578B>'[pattern]'",
+ "\u5793>'[border]'",
+ "\u57A0>'[boundary]'",
+ "\u57A2>'[dirt]'",
+ "\u57A3>'[low wall]'",
+ "\u57A4>'[ant-hill]'",
+ //"\u57A9>'[holy]'",
+ //"\u57AE>'[be defeated]'",
+ //"\u57B2>'[high and dry place]'",
+ "\u57C0>'[let down]'",
+ "\u57C3>'[fine dust]'",
+ "\u57C6>'[stony]'",
+ "\u57CB>'[bury]'",
+ "\u57CE>'[castle]'",
+ "\u57D2>'[enclosure]'",
+ "\u57D3>'[enclosure]'",
+ "\u57D4>'[plain]'",
+ //"\u57D4>'[plain]'",
+ "\u57DC>'[open country]'",
+ "\u57DF>'[district]'",
+ "\u57E0>'[port city]'",
+ //"\u57E3>'[................................]'",
+ "\u57F4>'[soil with large clay content]'",
+ "\u57F7>'[hold in hand]'",
+ "\u57F9>'[bank up with dirt]'",
+ "\u57FA>'[foundation]'",
+ "\u57FC>'[headland]'",
+ "\u5800>'[cave]'",
+ "\u5802>'[hall]'",
+ "\u5805>'[hard]'",
+ "\u5806>'[heap]'",
+ "\u580A>'[white earth]'",
+ "\u580B>'[bury]'",
+ "\u5815>'[fall]'",
+ "\u5819>'[bury]'",
+ "\u581D>'[crucible]'",
+ "\u5821>'[fort]'",
+ "\u5824>'[dike]'",
+ "\u582A>'[adequately capable of]'",
+ "\u582F>'[a legendary ancient emperor-sage]'",
+ "\u5830>'[dam]'",
+ "\u5831>'[report]'",
+ "\u5834>'[open space]'",
+ "\u5835>'[wall]'",
+ "\u583A>'[person''s name]'",
+ "\u583D>'[mound]'",
+ "\u5840>'[wall]'",
+ "\u5841>'[rampart]'",
+ "\u584A>'[piece]'",
+ "\u584B>'[grave]'",
+ "\u5851>'[model in clay]'",
+ "\u5852>'[roost]'",
+ "\u5854>'[tower]'",
+ "\u5857>'[smear]'",
+ "\u5858>'[pond]'",
+ "\u5859>'[truly]'",
+ "\u585A>'[cemetery]'",
+ "\u585E>'[stop up]'",
+ "\u5862>'[entrenchment]'",
+ "\u5869>'[salt]'",
+ "\u586B>'[fill in]'",
+ //"\u586D>'[[not found in any dictionary]]'",
+ "\u5872>'[open space]'",
+ "\u5875>'[dust]'",
+ "\u5879>'[moat]'",
+ "\u587E>'[village school]'",
+ "\u5883>'[boundery]'",
+ "\u5885>'[villa]'",
+ "\u5893>'[grave]'",
+ "\u5897>'[increase]'",
+ "\u589C>'[fall down]'",
+ "\u589F>'[high mound]'",
+ "\u58A8>'[ink]'",
+ "\u58AB>'[cup]'",
+ "\u58AE>'[fall]'",
+ "\u58B3>'[grave]'",
+ //"\u58B3>'[grave]'",
+ //"\u58B3>'[grave]'",
+ "\u58BA>'[4 walls]'",
+ "\u58BB>'[wall]'",
+ "\u58BE>'[cultivate]'",
+ "\u58C1>'[partition wall]'",
+ "\u58C5>'[to obstruct]'",
+ "\u58C7>'[altar]'",
+ "\u58CA>'[bad]'",
+ "\u58CC>'[soil]'",
+ "\u58D1>'[bed of torrent]'",
+ "\u58D3>'[press]'",
+ "\u58D5>'[trench]'",
+ //"\u58D6>'[open space along water]'",
+ "\u58D8>'[rampart]'",
+ "\u58D9>'[tomb]'",
+ "\u58DC>'[earthen jar or jug]'",
+ "\u58DE>'[bad]'",
+ "\u58DF>'[grave]'",
+ "\u58E4>'[soil]'",
+ //"\u58E5>'[................................]'",
+ "\u58EB>'[scholar]'",
+ "\u58EC>'[ninth of ten celestial stems]'",
+ "\u58EE>'[big]'",
+ "\u58EF>'[big]'",
+ "\u58F0>'[sound]'",
+ "\u58F1>'[number one]'",
+ "\u58F2>'[sell]'",
+ "\u58F7>'[jar]'",
+ "\u58F9>'[number one]'",
+ "\u58FA>'[jar]'",
+ "\u58FB>'[son-in-law]'",
+ "\u58FC>'[palace corridor or passageway]'",
+ "\u58FD>'[old age]'",
+ "\u5902>'[go]'",
+ "\u5909>'[change]'",
+ "\u590A>'[Radical No. 35]'",
+ "\u590F>'[summer]'",
+ "\u5910>'[long]'",
+ "\u5915>'[evening]'",
+ "\u5916>'[out]'",
+ "\u5918>'[4th of Earth Branches]'",
+ "\u5919>'[early in morning]'",
+ "\u591A>'[much]'",
+ "\u591B>'[much]'",
+ "\u591C>'[night]'",
+ "\u5922>'[dream]'",
+ "\u5925>'[companion]'",
+ "\u5927>'[big]'",
+ "\u5929>'[sky]'",
+ "\u592A>'[very]'",
+ "\u592B>'[man]'",
+ "\u592C>'[parted]'",
+ "\u592D>'[young]'",
+ "\u592E>'[center]'",
+ "\u5931>'[lose]'",
+ "\u5932>'[advance quickly]'",
+ "\u5937>'[ancient barbarian tribes]'",
+ "\u5938>'[extravagant]'",
+ "\u593E>'[be wedged or inserted between]'",
+ "\u5944>'[ere long]'",
+ "\u5947>'[strange]'",
+ "\u5948>'[but]'",
+ "\u5949>'[offer]'",
+ "\u594E>'[stride of man]'",
+ "\u594F>'[memorialize emperor]'",
+ "\u5950>'[be numerous]'",
+ "\u5951>'[deed]'",
+ "\u5954>'[run fast]'",
+ "\u5955>'[in sequence]'",
+ "\u5957>'[case]'",
+ "\u5958>'[large]'",
+ "\u595A>'[where? what? how? why?]'",
+ "\u5960>'[pay respect]'",
+ "\u5962>'[extravagant]'",
+ "\u5965>'[mysterious]'",
+ "\u5967>'[mysterious]'",
+ "\u5968>'[prize]'",
+ "\u5969>'[lady''s vanity case]'",
+ "\u596A>'[take by force]'",
+ "\u596C>'[prize]'",
+ "\u596E>'[strive]'",
+ "\u5973>'[woman]'",
+ "\u5974>'[slave]'",
+ "\u5978>'[crafty]'",
+ "\u597D>'[good]'",
+ "\u5981>'[act as go-between]'",
+ "\u5982>'[if]'",
+ "\u5983>'[wife]'",
+ "\u5984>'[absurd]'",
+ "\u598A>'[conceive]'",
+ "\u598D>'[beautiful]'",
+ "\u5993>'[prostitute]'",
+ "\u5996>'[strange]'",
+ "\u5999>'[mysterious]'",
+ //"\u5999>'[mysterious]'",
+ "\u599D>'[adorn oneself]'",
+ "\u59A3>'[one''s deceased mother]'",
+ "\u59A5>'[satisfactory]'",
+ "\u59A8>'[interfere with]'",
+ "\u59AC>'[jealous]'",
+ "\u59B2>'[concubine of last ruler of shang]'",
+ "\u59B9>'[younger sister]'",
+ "\u59BB>'[wife]'",
+ "\u59BE>'[concubine]'",
+ "\u59C6>'[child''s governess]'",
+ "\u59C9>'[elder sister]'",
+ "\u59CB>'[begin]'",
+ "\u59D0>'[elder sister]'",
+ "\u59D1>'[father''s sister]'",
+ "\u59D3>'[one''s family name]'",
+ "\u59D4>'[appoint]'",
+ "\u59D9>'[conceive]'",
+ "\u59DA>'[handsome]'",
+ "\u59DC>'[surname]'",
+ "\u59E5>'[maternal grandmother]'",
+ "\u59E6>'[adultery]'",
+ "\u59E8>'[mother/wife''s sister]'",
+ "\u59EA>'[niece]'",
+ "\u59EB>'[beauty]'",
+ //"\u59F1>'[beautiful]'",
+ "\u59FB>'[relatives by marriage]'",
+ "\u59FF>'[one''s manner]'",
+ "\u5A01>'[pomp]'",
+ "\u5A03>'[baby]'",
+ "\u5A09>'[beautiful]'",
+ "\u5A11>'[dance]'",
+ "\u5A18>'[mother]'",
+ //"\u5A1A>'[................................]'",
+ "\u5A1C>'[elegant]'",
+ "\u5A1F>'[beautiful]'",
+ "\u5A20>'[pregnant]'",
+ "\u5A25>'[be beautiful]'",
+ "\u5A29>'[give birth child]'",
+ "\u5A2F>'[pleasure]'",
+ "\u5A35>'[star]'",
+ "\u5A36>'[marry]'",
+ "\u5A3C>'[prostitute]'",
+ "\u5A40>'[be beautiful]'",
+ "\u5A41>'[surname]'",
+ "\u5A46>'[old woman]'",
+ "\u5A49>'[amiable]'",
+ "\u5A5A>'[get married]'",
+ "\u5A62>'[servant girl]'",
+ "\u5A66>'[married women]'",
+ "\u5A6A>'[covet]'",
+ "\u5A6C>'[obscene]'",
+ "\u5A7F>'[son-in-law]'",
+ "\u5A92>'[go-between]'",
+ "\u5A9A>'[charming]'",
+ "\u5A9B>'[beauty]'",
+ "\u5ABC>'[old woman]'",
+ "\u5ABD>'[mother]'",
+ "\u5ABE>'[marry]'",
+ "\u5AC1>'[marry]'",
+ "\u5AC2>'[sister-in-law]'",
+ "\u5AC9>'[jealousy]'",
+ "\u5ACB>'[slender and delicate]'",
+ "\u5ACC>'[hate]'",
+ "\u5AD0>'[frolic]'",
+ "\u5AD6>'[patronize prostitutes]'",
+ "\u5AD7>'[old woman]'",
+ "\u5AE1>'[legal wife]'",
+ "\u5AE3>'[charming]'",
+ "\u5AE6>'[name of a moon goddess]'",
+ "\u5AE9>'[soft]'",
+ "\u5AFA>'[refined]'",
+ "\u5AFB>'[elegant]'",
+ "\u5B09>'[enjoy]'",
+ "\u5B0B>'[beautiful]'",
+ "\u5B0C>'[seductive and loveable]'",
+ "\u5B16>'[favorite]'",
+ "\u5B22>'[troubled]'",
+ "\u5B2A>'[court lady]'",
+ "\u5B2C>'[mistress]'",
+ "\u5B30>'[baby]'",
+ "\u5B32>'[frolic]'",
+ //"\u5B34>'[to win]'",
+ "\u5B3E>'[lazy]'",
+ "\u5B40>'[widow]'",
+ "\u5B43>'[troubled]'",
+ "\u5B45>'[slender]'",
+ "\u5B50>'[offspring]'",
+ "\u5B51>'[remaining]'",
+ "\u5B54>'[opening]'",
+ "\u5B55>'[be pregnant]'",
+ "\u5B57>'[letter]'",
+ "\u5B58>'[exist]'",
+ "\u5B5A>'[brood over eggs]'",
+ "\u5B5B>'[comet]'",
+ "\u5B5C>'[be as diligent as possible]'",
+ "\u5B5D>'[filial piety]'",
+ "\u5B5F>'[first in series]'",
+ "\u5B63>'[quarter of year]'",
+ "\u5B64>'[orphan]'",
+ "\u5B65>'[one''s children]'",
+ "\u5B66>'[learning]'",
+ "\u5B69>'[baby]'",
+ "\u5B6B>'[grandchild]'",
+ "\u5B70>'[who? which? what? which one?]'",
+ "\u5B71>'[weak]'",
+ "\u5B73>'[breed in large numbers]'",
+ "\u5B75>'[sit on eggs]'",
+ "\u5B78>'[learning]'",
+ "\u5B7A>'[child]'",
+ "\u5B80>'[roof]'",
+ "\u5B83>'[it]'",
+ "\u5B85>'[residence]'",
+ "\u5B87>'[house]'",
+ "\u5B88>'[defend]'",
+ "\u5B89>'[peaceful]'",
+ "\u5B8B>'[Song dynasty]'",
+ "\u5B8C>'[complete]'",
+ "\u5B8D>'[flesh]'",
+ "\u5B8F>'[wide]'",
+ "\u5B95>'[stone quarry]'",
+ "\u5B97>'[lineage]'",
+ "\u5B98>'[official]'",
+ "\u5B99>'[time as concept]'",
+ "\u5B9A>'[decide]'",
+ "\u5B9B>'[seem]'",
+ "\u5B9C>'[suitable]'",
+ "\u5B9D>'[treasure]'",
+ "\u5B9F>'[real]'",
+ "\u5BA2>'[guest]'",
+ "\u5BA3>'[declare]'",
+ "\u5BA4>'[room]'",
+ "\u5BA5>'[forgive]'",
+ "\u5BA6>'[officialdom]'",
+ "\u5BAE>'[palace]'",
+ "\u5BB0>'[to slaughter]'",
+ "\u5BB3>'[injure]'",
+ "\u5BB4>'[entertain]'",
+ "\u5BB5>'[night]'",
+ "\u5BB6>'[house]'",
+ "\u5BB8>'[imperial]'",
+ "\u5BB9>'[looks]'",
+ "\u5BBF>'[stop]'",
+ "\u5BC2>'[still]'",
+ "\u5BC3>'[grievance]'",
+ "\u5BC4>'[send]'",
+ "\u5BC5>'[respect]'",
+ "\u5BC6>'[dense]'",
+ "\u5BC7>'[bandits]'",
+ //"\u5BC9>'[................................]'",
+ "\u5BCC>'[abundant]'",
+ "\u5BD0>'[sleep]'",
+ "\u5BD2>'[cold]'",
+ "\u5BD3>'[residence]'",
+ "\u5BD4>'[real]'",
+ "\u5BDB>'[broad]'",
+ "\u5BDD>'[sleep]'",
+ "\u5BDE>'[silent]'",
+ "\u5BDF>'[examine]'",
+ "\u5BE1>'[widowed]'",
+ "\u5BE2>'[sleep]'",
+ "\u5BE4>'[few]'",
+ "\u5BE5>'[few]'",
+ "\u5BE6>'[real]'",
+ "\u5BE7>'[repose]'",
+ "\u5BE8>'[stockade]'",
+ "\u5BE9>'[examine]'",
+ "\u5BEB>'[write]'",
+ "\u5BEE>'[shanty]'",
+ "\u5BF0>'[great domain]'",
+ "\u5BF3>'[treasure]'",
+ "\u5BF5>'[favorite]'",
+ "\u5BF6>'[treasure]'",
+ "\u5BF8>'[inch]'",
+ "\u5BFA>'[court]'",
+ "\u5BFE>'[correct]'",
+ "\u5BFF>'[old age]'",
+ "\u5C01>'[letter]'",
+ "\u5C02>'[monopolize]'",
+ "\u5C04>'[shoot]'",
+ "\u5C05>'[subdue]'",
+ "\u5C06>'[will]'",
+ "\u5C07>'[will]'",
+ "\u5C08>'[monopolize]'",
+ "\u5C09>'[officer]'",
+ "\u5C0A>'[respect]'",
+ "\u5C0B>'[seek]'",
+ "\u5C0D>'[correct]'",
+ "\u5C0E>'[direct]'",
+ "\u5C0F>'[small]'",
+ "\u5C11>'[few]'",
+ "\u5C13>'[you]'",
+ "\u5C16>'[sharp]'",
+ "\u5C1A>'[still]'",
+ "\u5C20>'[very few]'",
+ "\u5C22>'[weak]'",
+ "\u5C24>'[especially]'",
+ "\u5C28>'[shaggy haired dog]'",
+ "\u5C2D>'[a legendary ancient emperor-sage]'",
+ "\u5C31>'[just]'",
+ "\u5C38>'[corpse]'",
+ "\u5C39>'[govern]'",
+ "\u5C3A>'['chinese measure approx. \"foot\"']'",
+ "\u5C3B>'[end of spine]'",
+ "\u5C3C>'[buddhist nun]'",
+ "\u5C3D>'[exhaust]'",
+ "\u5C3E>'[tail]'",
+ "\u5C3F>'[urine]'",
+ "\u5C40>'[bureau]'",
+ "\u5C41>'[break wind]'",
+ "\u5C45>'[live]'",
+ "\u5C46>'[numerary adjunct for time]'",
+ "\u5C48>'[bend]'",
+ "\u5C4A>'[numerary adjunct for time]'",
+ "\u5C4B>'[house]'",
+ "\u5C4D>'[corpse]'",
+ "\u5C4E>'[excrement]'",
+ "\u5C4F>'[folding screen]'",
+ "\u5C50>'[wooden shoes]'",
+ "\u5C51>'[bits]'",
+ "\u5C53>'[gigantic strength]'",
+ "\u5C55>'[open]'",
+ "\u5C5E>'[class]'",
+ "\u5C60>'[butcher]'",
+ "\u5C61>'[frequently]'",
+ "\u5C64>'[storey]'",
+ "\u5C65>'[footwear]'",
+ "\u5C6C>'[class]'",
+ "\u5C6E>'[sprout]'",
+ "\u5C6F>'[village]'",
+ "\u5C71>'[mountain]'",
+ "\u5C76>'[lofty]'",
+ "\u5C79>'[to rise high]'",
+ "\u5C8C>'[perilous]'",
+ "\u5C90>'[high]'",
+ "\u5C91>'[steep]'",
+ "\u5C94>'[diverge]'",
+ "\u5CA1>'[ridge or crest of hill]'",
+ "\u5CA8>'[uneven]'",
+ "\u5CA9>'[cliff]'",
+ "\u5CAB>'[mountain peak]'",
+ "\u5CAC>'[cape]'",
+ "\u5CB1>'[daishan one of five sacred mount]'",
+ "\u5CB3>'[mountain peak]'",
+ //"\u5CB6>'[................................]'",
+ "\u5CB7>'[min mountain]'",
+ "\u5CB8>'[bank]'",
+ //"\u5CBA>'[mountain ridge]'",
+ //"\u5CBA>'[mountain ridge]'",
+ "\u5CBE>'[mountain pass (korean)]'",
+ //"\u5CC4>'[range of peaks]'",
+ "\u5CC7>'[cave]'",
+ "\u5CD9>'[stand erect]'",
+ "\u5CE0>'[mountain pass]'",
+ "\u5CE1>'[gorge]'",
+ "\u5CE8>'[lofty]'",
+ "\u5CE9>'[lofty]'",
+ "\u5CEA>'[valley]'",
+ "\u5CED>'[steep]'",
+ "\u5CEF>'[peak]'",
+ "\u5CF0>'[peak]'",
+ "\u5CF6>'[island]'",
+ //"\u5CFA>'[................................]'",
+ "\u5CFB>'[high]'",
+ "\u5CFD>'[gorge]'",
+ "\u5D07>'[esteem]'",
+ "\u5D0B>'[flowery]'",
+ "\u5D0E>'[rough]'",
+ "\u5D11>'[Kunlun mountains in Jiang Su province.]'",
+ "\u5D14>'[high]'",
+ "\u5D15>'[cliff]'",
+ "\u5D16>'[cliff]'",
+ "\u5D17>'[post]'",
+ "\u5D18>'[kunlun mountains in jiangsu]'",
+ "\u5D19>'[kunlun mountains in jiangsu]'",
+ "\u5D1A>'[hilly]'",
+ "\u5D1B>'[towering]'",
+ "\u5D1F>'[cliffs]'",
+ "\u5D22>'[high]'",
+ "\u5D29>'[rupture]'",
+ "\u5D4B>'[omei mountain in sichuan]'",
+ "\u5D4C>'[inlay]'",
+ "\u5D4E>'[mountain recess]'",
+ "\u5D50>'[mountain mist]'",
+ "\u5D52>'[cliff]'",
+ "\u5D5C>'[rough]'",
+ "\u5D69>'[high]'",
+ "\u5D6C>'[high]'",
+ "\u5D6F>'[high]'",
+ "\u5D73>'[high]'",
+ "\u5D76>'[low part of a mountain]'",
+ "\u5D82>'[cliff]'",
+ "\u5D84>'[high]'",
+ "\u5D87>'[steep]'",
+ "\u5D8B>'[island]'",
+ "\u5D8C>'[island]'",
+ //"\u5D90>'[................................]'",
+ "\u5D9D>'[path leading up a mountain]'",
+ "\u5DA2>'[high or tall]'",
+ //"\u5DAC>'[................................]'",
+ "\u5DAE>'[high]'",
+ "\u5DB7>'[range of mountains in hunan prov]'",
+ "\u5DBA>'[mountain ridge]'",
+ "\u5DBC>'[island]'",
+ "\u5DBD>'[mountain peak]'",
+ "\u5DC9>'[steep]'",
+ "\u5DCC>'[cliff]'",
+ "\u5DCD>'[high]'",
+ "\u5DD2>'[mountain range]'",
+ "\u5DD3>'[summit of mountain]'",
+ "\u5DD6>'[cliff]'",
+ "\u5DDB>'[river]'",
+ "\u5DDD>'[stream]'",
+ "\u5DDE>'[administrative division]'",
+ "\u5DE1>'[patrol]'",
+ "\u5DE3>'[nest]'",
+ "\u5DE5>'[labor]'",
+ "\u5DE6>'[left]'",
+ "\u5DE7>'[skillful]'",
+ "\u5DE8>'[large]'",
+ "\u5DEB>'[wizard]'",
+ "\u5DEE>'[differ]'",
+ "\u5DF1>'[self]'",
+ "\u5DF2>'[already]'",
+ "\u5DF3>'[sixth of twelve branches]'",
+ "\u5DF4>'[greatly desire]'",
+ "\u5DF5>'[measuring cup]'",
+ "\u5DF7>'[alley]'",
+ "\u5DFB>'[scroll]'",
+ "\u5DFD>'[5th of the 8 trigrams]'",
+ "\u5DFE>'[kerchief]'",
+ "\u5E02>'[market]'",
+ "\u5E03>'[cotton cloth]'",
+ "\u5E06>'[sail]'",
+ "\u5E0B>'[paper]'",
+ "\u5E0C>'[rare]'",
+ "\u5E11>'[a treasury]'",
+ "\u5E16>'[invitation card]'",
+ "\u5E19>'[book cover]'",
+ "\u5E1A>'[broom]'",
+ "\u5E1B>'[silks]'",
+ "\u5E1D>'[supreme ruler]'",
+ "\u5E25>'[commander]'",
+ "\u5E2B>'[teacher]'",
+ "\u5E2D>'[seat]'",
+ "\u5E2F>'[belt]'",
+ "\u5E30>'[return]'",
+ "\u5E33>'[tent]'",
+ "\u5E36>'[belt]'",
+ "\u5E37>'[tent]'",
+ "\u5E38>'[common]'",
+ "\u5E3D>'[hat]'",
+ "\u5E40>'[picture]'",
+ "\u5E43>'[curtain that forms wall]'",
+ "\u5E44>'[tent]'",
+ "\u5E45>'[piece]'",
+ "\u5E47>'[help]'",
+ "\u5E4C>'[curtain]'",
+ "\u5E4E>'[cover-cloth]'",
+ "\u5E54>'[curtain]'",
+ "\u5E55>'[curtain]'",
+ "\u5E57>'[women''s headgear]'",
+ "\u5E5F>'[flag]'",
+ "\u5E61>'[pennant]'",
+ "\u5E62>'[carriage curtain]'",
+ "\u5E63>'[currency]'",
+ "\u5E64>'[evil]'",
+ "\u5E72>'[oppose]'",
+ "\u5E73>'[flat]'",
+ "\u5E74>'[year]'",
+ "\u5E75>'[even level. to raise in both hands]'",
+ "\u5E76>'[combine]'",
+ "\u5E78>'[luck(ily)]'",
+ "\u5E79>'[trunk of tree or of human body]'",
+ "\u5E7A>'[one]'",
+ "\u5E7B>'[illusion]'",
+ "\u5E7C>'[infant]'",
+ "\u5E7D>'[quiet]'",
+ "\u5E7E>'[how many? how much? (a)few]'",
+ "\u5E7F>'[wide]'",
+ "\u5E81>'[hall]'",
+ "\u5E83>'[broad]'",
+ "\u5E84>'[village]'",
+ "\u5E87>'[cover]'",
+ "\u5E8A>'[bed]'",
+ "\u5E8F>'[series]'",
+ "\u5E95>'[bottom]'",
+ "\u5E96>'[kitchen]'",
+ "\u5E97>'[shop]'",
+ "\u5E9A>'[seventh of ten cyclical stems]'",
+ "\u5E9C>'[prefecture]'",
+ "\u5EA0>'[village school]'",
+ "\u5EA6>'[degree]'",
+ "\u5EA7>'[seat]'",
+ "\u5EAB>'[armory]'",
+ "\u5EAD>'[courtyard]'",
+ "\u5EB5>'[buddhist monastery or nunnery]'",
+ "\u5EB6>'[numerous]'",
+ "\u5EB7>'[peaceful]'",
+ "\u5EB8>'[usual]'",
+ "\u5EC1>'[toilet]'",
+ "\u5EC2>'[side-room]'",
+ "\u5EC3>'[abrogate]'",
+ "\u5EC8>'[big building]'",
+ "\u5EC9>'[upright]'",
+ "\u5ECA>'[corridor]'",
+ "\u5ECF>'[stable]'",
+ "\u5ED0>'[stable]'",
+ "\u5ED3>'[broad]'",
+ "\u5ED6>'[surname]'",
+ "\u5EDA>'[kitchen]'",
+ "\u5EDB>'[store]'",
+ "\u5EDD>'[servant]'",
+ "\u5EDF>'[temple]'",
+ "\u5EE0>'[factory]'",
+ "\u5EE1>'[corridor]'",
+ "\u5EE2>'[abrogate]'",
+ "\u5EE3>'[broad]'",
+ "\u5EE8>'[government office]'",
+ "\u5EE9>'[granary]'",
+ "\u5EEC>'[hut]'",
+ "\u5EF0>'[hall]'",
+ "\u5EF1>'[harmonious]'",
+ "\u5EF3>'[hall]'",
+ "\u5EF4>'[go]'",
+ "\u5EF6>'[delay]'",
+ "\u5EF7>'[court]'",
+ "\u5EF8>'[enlighten]'",
+ "\u5EFA>'[build]'",
+ "\u5EFB>'[circle around]'",
+ "\u5EFC>'[then]'",
+ "\u5EFE>'[two hands]'",
+ "\u5EFF>'[twenty]'",
+ "\u5F01>'[conical cap worn under zhou dyna]'",
+ "\u5F03>'[reject]'",
+ "\u5F04>'[do]'",
+ "\u5F09>'[large]'",
+ "\u5F0A>'[evil]'",
+ "\u5F0B>'[catch]'",
+ "\u5F0C>'[number one]'",
+ "\u5F0D>'[number two]'",
+ "\u5F0F>'[style]'",
+ "\u5F10>'[number two]'",
+ "\u5F11>'[to kill one''s superior]'",
+ "\u5F13>'[bow]'",
+ "\u5F14>'[condole]'",
+ "\u5F15>'[pull]'",
+ "\u5F16>'[phonetic for \"te\" (Japanese)]'",
+ "\u5F17>'[not]'",
+ "\u5F18>'[enlarge]'",
+ "\u5F1B>'[loosen]'",
+ "\u5F1F>'[young brother]'",
+ "\u5F25>'[extensive]'",
+ "\u5F26>'[string]'",
+ "\u5F27>'[wooden bow]'",
+ "\u5F29>'[cross-bow]'",
+ "\u5F2D>'[stop]'",
+ "\u5F2F>'[bend]'",
+ "\u5F31>'[weak]'",
+ "\u5F35>'[stretch]'",
+ "\u5F37>'[strong]'",
+ "\u5F38>'[bow stretched full]'",
+ "\u5F3C>'[aid]'",
+ //"\u5F3C>'[aid]'",
+ //"\u5F41>'[................................]'",
+ "\u5F48>'[pellet]'",
+ "\u5F4A>'[stubborn]'",
+ "\u5F4C>'[extensive]'",
+ "\u5F4E>'[bend]'",
+ "\u5F51>'[snout]'",
+ "\u5F53>'[bear]'",
+ "\u5F56>'[a hog]'",
+ "\u5F57>'[broomstick]'",
+ "\u5F59>'[collect]'",
+ "\u5F5C>'[yi]'",
+ "\u5F5D>'[yi]'",
+ "\u5F61>'[hair]'",
+ "\u5F62>'[form]'",
+ "\u5F66>'[elegant]'",
+ "\u5F69>'[hue]'",
+ "\u5F6A>'[tiger]'",
+ "\u5F6B>'[carve]'",
+ "\u5F6C>'[cultivated]'",
+ "\u5F6D>'[name of ancient country]'",
+ "\u5F70>'[clear]'",
+ "\u5F71>'[shadow]'",
+ "\u5F73>'[step with left foot]'",
+ "\u5F77>'[like]'",
+ "\u5F79>'[service]'",
+ "\u5F7C>'[that]'",
+ "\u5F7F>'[resembling]'",
+ "\u5F80>'[go]'",
+ "\u5F81>'[invade]'",
+ "\u5F82>'[go]'",
+ "\u5F83>'[go]'",
+ "\u5F84>'[narrow path]'",
+ "\u5F85>'[treat]'",
+ "\u5F87>'[comply with]'",
+ "\u5F88>'[very]'",
+ "\u5F8A>'[linger]'",
+ "\u5F8B>'[statute]'",
+ "\u5F8C>'[behind]'",
+ "\u5F90>'[slowly]'",
+ "\u5F91>'[narrow path]'",
+ "\u5F92>'[disciple]'",
+ "\u5F93>'[from]'",
+ "\u5F97>'[obtain]'",
+ "\u5F98>'[walk back and forth]'",
+ "\u5F99>'[move one''s abode]'",
+ "\u5F9E>'[from]'",
+ "\u5FA0>'[induce]'",
+ "\u5FA1>'[drive]'",
+ "\u5FA8>'[doubtful]'",
+ "\u5FA9>'[return]'",
+ "\u5FAA>'[obey]'",
+ "\u5FAD>'[conscript labor]'",
+ "\u5FAE>'[small]'",
+ "\u5FB3>'[virtue]'",
+ "\u5FB4>'[summon]'",
+ "\u5FB9>'[penetrate]'",
+ "\u5FBC>'[frontier]'",
+ "\u5FBD>'[a badge]'",
+ "\u5FC3>'[heart]'",
+ "\u5FC5>'[surely]'",
+ "\u5FCC>'[jealous]'",
+ "\u5FCD>'[endure]'",
+ "\u5FD6>'[guess]'",
+ "\u5FD7>'[purpose]'",
+ "\u5FD8>'[forget]'",
+ "\u5FD9>'[busy]'",
+ "\u5FDC>'[should]'",
+ "\u5FDD>'[disgrace]'",
+ "\u5FE0>'[loyalty]'",
+ "\u5FE4>'[insubordinate]'",
+ "\u5FEB>'[rapid]'",
+ "\u5FF0>'[suffer]'",
+ "\u5FF1>'[truth]'",
+ "\u5FF5>'[think of]'",
+ "\u5FF8>'[blush]'",
+ "\u5FFB>'[delightful]'",
+ "\u5FFD>'[suddenly]'",
+ "\u5FFF>'[get angry]'",
+ "\u600E>'[what? why? how?]'",
+ "\u600F>'[discontented]'",
+ //"\u6010>'[................................]'",
+ "\u6012>'[anger]'",
+ "\u6015>'[fear]'",
+ "\u6016>'[terror]'",
+ "\u6019>'[rely on]'",
+ "\u601B>'[grieved]'",
+ "\u601C>'[pity]'",
+ "\u601D>'[think]'",
+ "\u6020>'[idle]'",
+ "\u6021>'[harmony]'",
+ "\u6025>'[quick]'",
+ "\u6026>'[eager]'",
+ "\u6027>'[nature]'",
+ "\u6028>'[hatred]'",
+ "\u6029>'[shy]'",
+ "\u602A>'[strange]'",
+ "\u602B>'[sorry]'",
+ "\u602F>'[lacking in courage]'",
+ "\u6031>'[hastily]'",
+ "\u603A>'[to endure]'",
+ "\u6041>'[that]'",
+ "\u6042>'[careful]'",
+ "\u6043>'[rely on]'",
+ "\u6046>'[constant]'",
+ "\u604A>'[be united]'",
+ "\u604B>'[love]'",
+ "\u604D>'[seemingly]'",
+ "\u6050>'[fear]'",
+ "\u6052>'[constant]'",
+ "\u6055>'[forgive]'",
+ "\u6059>'[illness]'",
+ "\u605A>'[anger]'",
+ "\u605F>'[scared]'",
+ "\u6060>'[strange]'",
+ "\u6062>'[restore]'",
+ "\u6063>'[indulge oneself]'",
+ "\u6064>'[show pity]'",
+ "\u6065>'[shame]'",
+ "\u6068>'[hatred]'",
+ "\u6069>'[kindness]'",
+ "\u606A>'[respectful]'",
+ "\u606B>'[in pain]'",
+ "\u606C>'[quiet]'",
+ "\u606D>'[respectful]'",
+ "\u606F>'[rest]'",
+ "\u6070>'[just]'",
+ "\u6075>'[favor]'",
+ //"\u6076>'[evil]'",
+ "\u6081>'[irritable]'",
+ "\u6083>'[sincere]'",
+ "\u6084>'[silent]'",
+ "\u6089>'[know]'",
+ "\u608B>'[stingy]'",
+ "\u608C>'[brotherly]'",
+ "\u608D>'[courageous]'",
+ "\u6092>'[sorrowful]'",
+ "\u6094>'[repent]'",
+ "\u6096>'[be contradictory to]'",
+ //"\u6096>'[be contradictory to]'",
+ "\u609A>'[be afraid]'",
+ "\u609B>'[repent]'",
+ "\u609F>'[apprehend]'",
+ "\u60A0>'[long]'",
+ "\u60A3>'[suffer]'",
+ "\u60A6>'[pleased]'",
+ "\u60A7>'[smooth]'",
+ "\u60A9>'[angered]'",
+ "\u60AA>'[evil]'",
+ "\u60B2>'[sorrow]'",
+ "\u60B3>'[ethics]'",
+ "\u60B4>'[suffer]'",
+ "\u60B5>'[disappointed]'",
+ "\u60B6>'[gloomy]'",
+ "\u60B8>'[fearful]'",
+ "\u60BC>'[grieve]'",
+ "\u60BD>'[sorrowful]'",
+ "\u60C5>'[feeling]'",
+ "\u60C6>'[distressed]'",
+ "\u60C7>'[be kind]'",
+ "\u60D1>'[confuse]'",
+ "\u60D3>'[careful]'",
+ "\u60D8>'[disconcerted]'",
+ "\u60DA>'[absent-minded]'",
+ "\u60DC>'[pity]'",
+ "\u60DF>'[but]'",
+ "\u60E0>'[favor]'",
+ "\u60E1>'[evil]'",
+ "\u60E3>'[overall [questionable variant]]'",
+ "\u60E7>'[fear]'",
+ "\u60E8>'[sad]'",
+ "\u60F0>'[indolent]'",
+ "\u60F1>'[angered]'",
+ "\u60F3>'[think]'",
+ "\u60F4>'[afraid]'",
+ "\u60F6>'[fearful]'",
+ "\u60F7>'[wriggle]'",
+ "\u60F9>'[irritate]'",
+ "\u60FA>'[intelligent]'",
+ "\u60FB>'[feel anguish]'",
+ "\u6100>'[change one''s countenance]'",
+ "\u6101>'[anxiety]'",
+ "\u6103>'[relax]'",
+ "\u6106>'[fault]'",
+ "\u6108>'[more and more]'",
+ "\u6109>'[pleasant]'",
+ "\u610D>'[pity]'",
+ "\u610E>'[obstinate]'",
+ "\u610F>'[thought]'",
+ "\u6115>'[startled]'",
+ "\u611A>'[stupid]'",
+ "\u611B>'[love]'",
+ "\u611F>'[feel]'",
+ "\u6121>'[absent-minded]'",
+ "\u6127>'[ashamed]'",
+ "\u6128>'[sincerity]'",
+ "\u612C>'[accuse]'",
+ "\u6134>'[sad]'",
+ "\u613C>'[act with care]'",
+ "\u613D>'[gamble]'",
+ "\u613E>'[anger]'",
+ "\u613F>'[sincere]'",
+ "\u6142>'[urge]'",
+ "\u6144>'[shiver]'",
+ "\u6147>'[careful]'",
+ "\u6148>'[kind]'",
+ "\u614A>'[to resent]'",
+ "\u614B>'[manner]'",
+ "\u614C>'[nervous]'",
+ "\u614D>'[angry]'",
+ "\u614E>'[act with care]'",
+ //"\u6153>'[................................]'",
+ "\u6155>'[long for]'",
+ "\u6158>'[sad]'",
+ "\u6159>'[ashamed]'",
+ "\u615A>'[ashamed]'",
+ "\u615D>'[do evil in secret]'",
+ "\u615F>'[sadness]'",
+ "\u6162>'[slow(ly)]'",
+ "\u6163>'[habit]'",
+ "\u6165>'[sincere]'",
+ "\u6167>'[bright]'",
+ "\u6168>'[sigh]'",
+ "\u616B>'[to alarm]'",
+ "\u616E>'[be concerned]'",
+ //"\u616F>'[................................]'",
+ "\u6170>'[comfort]'",
+ "\u6171>'[sad]'",
+ "\u6173>'[miserly]'",
+ "\u6174>'[fear]'",
+ "\u6175>'[indolent]'",
+ "\u6176>'[congratulate]'",
+ "\u6177>'[ardent]'",
+ "\u617E>'[lust]'",
+ "\u6182>'[sad]'",
+ "\u6187>'[rest]'",
+ "\u618A>'[tired]'",
+ "\u618E>'[hate]'",
+ "\u6190>'[pity]'",
+ "\u6191>'[lean on]'",
+ "\u6194>'[be worn-out]'",
+ "\u6196>'[cautious]'",
+ "\u6199>'[like]'",
+ "\u619A>'[dread]'",
+ "\u61A4>'[resent]'",
+ "\u61A7>'[irresolute]'",
+ "\u61A9>'[rest]'",
+ "\u61AB>'[pity]'",
+ "\u61AC>'[rouse]'",
+ "\u61AE>'[regretful]'",
+ "\u61B2>'[constitution]'",
+ "\u61B6>'[remember]'",
+ "\u61BA>'[peace]'",
+ "\u61BE>'[regret]'",
+ "\u61C3>'[courteous]'",
+ "\u61C6>'[anxious]'",
+ "\u61C7>'[sincere]'",
+ "\u61C8>'[idle]'",
+ "\u61C9>'[should]'",
+ "\u61CA>'[vexed]'",
+ "\u61CB>'[splendid]'",
+ "\u61CC>'[enjoy]'",
+ "\u61CD>'[be afraid of]'",
+ "\u61D0>'[bosom]'",
+ "\u61E3>'[be sick at heart]'",
+ "\u61E6>'[weak]'",
+ "\u61F2>'[punish]'",
+ "\u61F4>'[regret]'",
+ "\u61F6>'[lazy]'",
+ "\u61F7>'[bosom]'",
+ "\u61F8>'[hang]'",
+ "\u61FA>'[regret]'",
+ "\u61FC>'[fear]'",
+ "\u61FD>'[happy]'",
+ "\u61FE>'[afraid]'",
+ "\u61FF>'[virtuous]'",
+ "\u6200>'[love]'",
+ "\u6208>'[halberd]'",
+ "\u6209>'[a battle-axe]'",
+ "\u620A>'[fifth of ten celestial stems]'",
+ "\u620C>'[eleventh of terrestrial branches]'",
+ "\u620D>'[defend borders]'",
+ "\u620E>'[arms]'",
+ "\u6210>'[completed]'",
+ "\u6211>'[our]'",
+ "\u6212>'[warn]'",
+ "\u6214>'[small]'",
+ "\u6216>'[or]'",
+ "\u621A>'[relative]'",
+ "\u621B>'[lance]'",
+ "\u621D>'[pirate]'",
+ "\u621E>'[lance]'",
+ "\u621F>'[halberd with crescent blade]'",
+ "\u6221>'[subjugate]'",
+ "\u6226>'[war]'",
+ "\u622A>'[cut off]'",
+ "\u622E>'[kill]'",
+ "\u622F>'[theatrical play]'",
+ "\u6230>'[war]'",
+ "\u6232>'[theatrical play]'",
+ "\u6233>'[prick]'",
+ "\u6234>'[wear on top]'",
+ "\u6238>'[door]'",
+ "\u623B>'[perverse]'",
+ "\u623F>'[house]'",
+ "\u6240>'[place]'",
+ "\u6241>'[flat]'",
+ "\u6247>'[fan]'",
+ "\u6248>'[escort]'",
+ "\u6249>'[door panel]'",
+ "\u624B>'[hand]'",
+ "\u624D>'[talent]'",
+ "\u624E>'[pull up]'",
+ "\u6253>'[strike]'",
+ "\u6255>'[shake off]'",
+ "\u6258>'[hold up with palm]'",
+ "\u625B>'[carry on shoulders]'",
+ "\u625E>'[ward off]'",
+ "\u6260>'[pick up with fork or pincers]'",
+ "\u6263>'[knock]'",
+ "\u6268>'[pick up with fork or pincers]'",
+ "\u626E>'[dress up]'",
+ "\u6271>'[collect]'",
+ "\u6276>'[support]'",
+ "\u6279>'[comment]'",
+ "\u627C>'[grasp]'",
+ "\u627E>'[search]'",
+ "\u627F>'[inherit]'",
+ "\u6280>'[skill]'",
+ //"\u6282>'[................................]'",
+ "\u6283>'[to clap hands]'",
+ "\u6284>'[copy]'",
+ "\u6289>'[choose]'",
+ "\u628A>'[hold]'",
+ "\u6291>'[press down]'",
+ "\u6292>'[express]'",
+ "\u6293>'[scratch]'",
+ "\u6294>'[take or hold up in both hands]'",
+ "\u6295>'[throw]'",
+ "\u6296>'[tremble]'",
+ "\u6297>'[resist]'",
+ "\u6298>'[break off]'",
+ "\u629B>'[throw (away)]'",
+ "\u629C>'[uproot]'",
+ "\u629E>'[select]'",
+ "\u62AB>'[wear]'",
+ "\u62AC>'[lift]'",
+ "\u62B1>'[embrace]'",
+ "\u62B5>'[resist]'",
+ "\u62B9>'[smear]'",
+ "\u62BB>'[pull]'",
+ "\u62BC>'[mortgage]'",
+ "\u62BD>'[draw out]'",
+ "\u62C2>'[shake off]'",
+ "\u62C5>'[carry]'",
+ "\u62C6>'[break up]'",
+ "\u62C7>'[thumb]'",
+ "\u62C8>'[pick up with fingers]'",
+ "\u62C9>'[pull]'",
+ "\u62CA>'[slap]'",
+ "\u62CC>'[mix]'",
+ "\u62CD>'[clap]'",
+ "\u62CF>'[take]'",
+ "\u62D0>'[kidnap]'",
+ "\u62D1>'[to clamp]'",
+ "\u62D2>'[ward off with hand]'",
+ "\u62D3>'[expand]'",
+ "\u62D4>'[uproot]'",
+ "\u62D7>'[obstinate]'",
+ "\u62D8>'[restrain]'",
+ "\u62D9>'[stupid]'",
+ "\u62DB>'[beckon]'",
+ "\u62DC>'[do obeisance]'",
+ "\u62DD>'[do obeisance]'",
+ "\u62E0>'[occupy]'",
+ "\u62E1>'[expand]'",
+ "\u62EC>'[include]'",
+ "\u62ED>'[wipe away stains with cloth]'",
+ "\u62EE>'[laboring hard]'",
+ "\u62EF>'[help]'",
+ "\u62F1>'[fold hands on breast]'",
+ "\u62F3>'[fist]'",
+ //"\u62F4>'[bind with rope]'",
+ "\u62F6>'[press]'",
+ "\u62F7>'[torture and interrogate]'",
+ "\u62FE>'[pick up]'",
+ "\u62FF>'[take]'",
+ "\u6301>'[sustain]'",
+ "\u6302>'[hang]'",
+ "\u6307>'[finger]'",
+ "\u6308>'[assist]'",
+ "\u6309>'[put hand on]'",
+ "\u630C>'[fight]'",
+ "\u6311>'[load carried on shoulders]'",
+ "\u6319>'[raise]'",
+ "\u631F>'[clasp under arm]'",
+ //"\u6325>'[direct]'",
+ "\u6328>'[near]'",
+ "\u632B>'[push down]'",
+ "\u632F>'[raise]'",
+ "\u633A>'[stand upright]'",
+ "\u633D>'[pull]'",
+ "\u633E>'[clasp under arm]'",
+ "\u633F>'[insert]'",
+ "\u6349>'[grasp]'",
+ "\u634C>'[break open]'",
+ "\u634D>'[ward off]'",
+ "\u634F>'[pick with fingers]'",
+ "\u6350>'[contribute]'",
+ "\u6355>'[arrest]'",
+ "\u6357>'[make progress]'",
+ "\u635C>'[search]'",
+ "\u6367>'[hold up in two hands]'",
+ "\u6368>'[discard]'",
+ "\u6369>'[twist with hands]'",
+ "\u636B>'[stoke]'",
+ "\u636E>'[occupy]'",
+ "\u6372>'[curl]'",
+ "\u6376>'[strike with stick]'",
+ "\u6377>'[win]'",
+ "\u637A>'[press down heavily with fringers]'",
+ "\u637B>'[twist with fingers]'",
+ "\u6380>'[lift]'",
+ "\u6383>'[sweep]'",
+ "\u6388>'[give to]'",
+ "\u6389>'[turn]'",
+ "\u638C>'[palm of hand]'",
+ "\u638E>'[drag aside]'",
+ "\u638F>'[take out]'",
+ "\u6392>'[row]'",
+ "\u6396>'[stick in]'",
+ "\u6398>'[dig]'",
+ "\u639B>'[hang]'",
+ //"\u639F>'[................................]'",
+ "\u63A0>'[rob]'",
+ "\u63A1>'[gather]'",
+ "\u63A2>'[find]'",
+ "\u63A3>'[drag]'",
+ "\u63A5>'[receive]'",
+ "\u63A7>'[accuse]'",
+ "\u63A8>'[push]'",
+ "\u63A9>'[cover]'",
+ "\u63AA>'[place]'",
+ "\u63AB>'[be on night watch]'",
+ "\u63AC>'[grasp with both hands]'",
+ //"\u63B1>'[pickpocket]'",
+ "\u63B4>'[box one''s ears]'",
+ //"\u63B4>'[box one''s ears]'",
+ "\u63BB>'[scratch lightly]'",
+ "\u63BE>'[a general designation of officials]'",
+ "\u63C0>'[choose]'",
+ "\u63C3>'[shear]'",
+ "\u63C4>'[lift]'",
+ "\u63C6>'[prime minister]'",
+ "\u63C9>'[rub]'",
+ "\u63CF>'[copy]'",
+ "\u63D0>'[hold in hand]'",
+ "\u63D2>'[insert]'",
+ "\u63D6>'[salute]'",
+ "\u63DA>'[scatter]'",
+ "\u63DB>'[change]'",
+ "\u63E1>'[grasp]'",
+ "\u63E3>'[put things under clothes]'",
+ "\u63E9>'[rub and wipe]'",
+ "\u63EE>'[direct]'",
+ "\u63F4>'[aid]'",
+ "\u63F6>'[make fun of]'",
+ "\u63FA>'[wag]'",
+ "\u6406>'[pull]'",
+ "\u640D>'[diminish]'",
+ "\u640F>'[seize]'",
+ "\u6413>'[trample]'",
+ "\u6416>'[wag]'",
+ "\u6417>'[hull]'",
+ "\u641C>'[search]'",
+ "\u6426>'[grasp]'",
+ "\u6428>'[rub]'",
+ "\u642C>'[transfer]'",
+ "\u642D>'[join together]'",
+ "\u6434>'[extract]'",
+ "\u6436>'[plunder]'",
+ "\u643A>'[lead by hand]'",
+ "\u643E>'[press]'",
+ "\u6442>'[take in]'",
+ "\u644E>'[to strangle]'",
+ "\u6458>'[pluck]'",
+ "\u6467>'[destroy]'",
+ "\u6469>'[rub]'",
+ "\u646F>'[sincere]'",
+ "\u6476>'[roll around with hand]'",
+ "\u6478>'[gently touch with hand]'",
+ "\u647A>'[fold]'",
+ "\u6483>'[strike]'",
+ "\u6488>'[scoop out of water]'",
+ "\u6492>'[release]'",
+ "\u6493>'[scratch]'",
+ "\u6495>'[rip]'",
+ "\u649A>'[twirl in fingers]'",
+ "\u649E>'[knock against]'",
+ "\u64A4>'[omit]'",
+ "\u64A5>'[move]'",
+ "\u64A9>'[lift up]'",
+ "\u64AB>'[pat]'",
+ "\u64AD>'[sow]'",
+ "\u64AE>'[little bit]'",
+ "\u64B0>'[compose]'",
+ "\u64B2>'[pound]'",
+ "\u64B9>'[disturb]'",
+ "\u64BB>'[flog]'",
+ "\u64BC>'[move]'",
+ "\u64C1>'[embrace]'",
+ "\u64C2>'[rub]'",
+ "\u64C5>'[monopolize]'",
+ "\u64C7>'[select]'",
+ "\u64CD>'[conduct]'",
+ "\u64D2>'[catch]'",
+ "\u64D4>'[carry]'",
+ "\u64D8>'[thumb]'",
+ "\u64DA>'[occupy]'",
+ "\u64E0>'[crowd]'",
+ "\u64E1>'[carry]'",
+ "\u64E2>'[pull up]'",
+ "\u64E3>'[hull]'",
+ "\u64E6>'[wipe]'",
+ "\u64E7>'[raise]'",
+ "\u64EC>'[draft]'",
+ "\u64EF>'[exclude]'",
+ "\u64F1>'[place]'",
+ "\u64F2>'[throw]'",
+ "\u64F4>'[expand]'",
+ //"\u64F6>'[................................]'",
+ "\u64FA>'[put]'",
+ "\u64FD>'[tickle]'",
+ "\u64FE>'[disturb]'",
+ "\u6500>'[climb]'",
+ "\u6505>'[save]'",
+ "\u6518>'[seize]'",
+ "\u651C>'[lead by hand]'",
+ "\u651D>'[take in]'",
+ "\u6523>'[tangled]'",
+ "\u6524>'[spread out]'",
+ "\u652A>'[disturb]'",
+ "\u652B>'[snatch away]'",
+ "\u652C>'[grasp]'",
+ "\u652F>'[disperse]'",
+ "\u6534>'[rap]'",
+ "\u6535>'[rap]'",
+ "\u6536>'[gather together]'",
+ "\u6537>'[examine]'",
+ "\u6538>'[distant]'",
+ "\u6539>'[change]'",
+ "\u653B>'[attack]'",
+ "\u653E>'[put]'",
+ "\u653F>'[government]'",
+ "\u6545>'[ancient]'",
+ "\u6548>'[result]'",
+ "\u654D>'[express]'",
+ "\u654F>'[fast]'",
+ "\u6551>'[save]'",
+ "\u6555>'[an imperial order or decree]'",
+ "\u6556>'[ramble]'",
+ "\u6557>'[be defeated]'",
+ "\u6558>'[express]'",
+ "\u6559>'[teach]'",
+ "\u655D>'[break]'",
+ "\u655E>'[roomy]'",
+ "\u6562>'[dare]'",
+ "\u6563>'[scatter]'",
+ "\u6566>'[esteem]'",
+ "\u656C>'[respect]'",
+ "\u6570>'[number]'",
+ "\u6572>'[strike]'",
+ "\u6574>'[orderly]'",
+ "\u6575>'[enemy]'",
+ "\u6577>'[spread]'",
+ "\u6578>'[number]'",
+ "\u6582>'[draw back]'",
+ "\u6583>'[kill]'",
+ "\u6587>'[literature]'",
+ "\u6588>'[learning]'",
+ "\u6589>'[even]'",
+ "\u658C>'[refined]'",
+ "\u658E>'[vegetarian diet]'",
+ "\u6590>'[graceful]'",
+ "\u6591>'[mottled]'",
+ "\u6597>'[chinese peck]'",
+ "\u6599>'[consider]'",
+ "\u659B>'[dry measure 10 or 5 times of dou]'",
+ "\u659C>'[slanting]'",
+ "\u659F>'[pour wine or tea into cup]'",
+ "\u65A1>'[revolve]'",
+ "\u65A4>'[catty]'",
+ "\u65A5>'[scold]'",
+ "\u65A7>'[axe]'",
+ "\u65AB>'[cut]'",
+ "\u65AC>'[cut]'",
+ "\u65AD>'[sever]'",
+ "\u65AF>'[this]'",
+ "\u65B0>'[new]'",
+ "\u65B7>'[sever]'",
+ "\u65B9>'[square]'",
+ "\u65BC>'[in]'",
+ "\u65BD>'[grant]'",
+ "\u65C1>'[side]'",
+ "\u65C3>'[silk banner with bent pole]'",
+ "\u65C4>'[a kind of ancient flag]'",
+ "\u65C5>'[trip]'",
+ "\u65C6>'[flag ornament]'",
+ "\u65CB>'[revolve]'",
+ "\u65CC>'[banner or flag adorned with feat]'",
+ "\u65CF>'[family clan]'",
+ "\u65D2>'[fringes of pearls on crowns]'",
+ "\u65D7>'[banner]'",
+ "\u65D9>'[a pennant]'",
+ "\u65DB>'[a pennant]'",
+ "\u65E0>'[negative]'",
+ "\u65E1>'[choke on something eaten]'",
+ "\u65E2>'[already]'",
+ "\u65E5>'[sun]'",
+ "\u65E6>'[dawn]'",
+ "\u65E7>'[old]'",
+ "\u65E8>'[purpose]'",
+ "\u65E9>'[early]'",
+ "\u65EC>'[ten-day period]'",
+ "\u65ED>'[rising sun]'",
+ "\u65F1>'[drought]'",
+ "\u65FA>'[prosper]'",
+ "\u65FB>'[heaven]'",
+ "\u6602>'[rise]'",
+ "\u6603>'[afternoon]'",
+ "\u6606>'[elder brother]'",
+ "\u6607>'[rise]'",
+ "\u660A>'[summer time]'",
+ "\u660C>'[light of sun]'",
+ "\u660E>'[bright]'",
+ "\u660F>'[dusk]'",
+ "\u6613>'[change]'",
+ "\u6614>'[formerly]'",
+ "\u661C>'[to open out]'",
+ "\u661F>'[star]'",
+ "\u6620>'[project]'",
+ "\u6625>'[spring]'",
+ "\u6627>'[obscure]'",
+ "\u6628>'[yesterday]'",
+ "\u662D>'[bright]'",
+ "\u662F>'[indeed]'",
+ "\u6634>'[one of the 28 constellations]'",
+ "\u6635>'[intimate]'",
+ "\u6636>'[a long day. bright. extended. clear]'",
+ "\u663C>'[daytime]'",
+ "\u663F>'[extensive]'",
+ "\u6641>'[morning]'",
+ "\u6642>'[time]'",
+ "\u6643>'[bright]'",
+ "\u6644>'[bright]'",
+ "\u6649>'[advance]'",
+ "\u664B>'[advance]'",
+ "\u664F>'[peaceful]'",
+ "\u6652>'[dry in sun]'",
+ "\u665D>'[daytime]'",
+ "\u665E>'[dry]'",
+ "\u665F>'[clear]'",
+ "\u6662>'[light of stars]'",
+ "\u6664>'[have interview with]'",
+ "\u6666>'[dark]'",
+ "\u6667>'[daybreak]'",
+ "\u6668>'[early morning]'",
+ "\u6669>'[night]'",
+ "\u666E>'[universal]'",
+ "\u666F>'[scenery]'",
+ "\u6670>'[clear]'",
+ "\u6674>'[clear weather]'",
+ "\u6676>'[crystal]'",
+ "\u667A>'[wisdom]'",
+ "\u6681>'[dawn]'",
+ //"\u6682>'[temporary]'",
+ "\u6684>'[warm]'",
+ "\u6687>'[leisure]'",
+ "\u6688>'[halo in sky]'",
+ "\u6689>'[sunshine]'",
+ "\u668E>'[sun beginning decline]'",
+ "\u6691>'[hot]'",
+ "\u6696>'[warm]'",
+ "\u6697>'[dark]'",
+ "\u6698>'[rising sun]'",
+ "\u669D>'[dark]'",
+ "\u66A2>'[smoothly]'",
+ "\u66A6>'[calendar]'",
+ "\u66AB>'[temporary]'",
+ "\u66AE>'[evening]'",
+ "\u66B4>'[violent]'",
+ "\u66B8>'[bright]'",
+ "\u66B9>'[rise]'",
+ "\u66BC>'[take fleeting glance at]'",
+ "\u66BE>'[morning sun]'",
+ "\u66C1>'[and]'",
+ "\u66C4>'[bright]'",
+ "\u66C7>'[become cloudy]'",
+ "\u66C9>'[dawn]'",
+ "\u66D6>'[obscure]'",
+ "\u66D9>'[bright]'",
+ "\u66DA>'[twilight just before sun rises]'",
+ "\u66DC>'[glorious]'",
+ "\u66DD>'[sun]'",
+ "\u66E0>'[extensive]'",
+ "\u66E6>'[sunlight]'",
+ "\u66E9>'[in ancient times]'",
+ "\u66F0>'[say]'",
+ "\u66F2>'[crooked]'",
+ "\u66F3>'[trail]'",
+ "\u66F4>'[more]'",
+ "\u66F5>'[trail]'",
+ "\u66F7>'[why? what? where?]'",
+ "\u66F8>'[book]'",
+ "\u66F9>'[ministry officials]'",
+ "\u66FC>'[long]'",
+ "\u66FD>'[already]'",
+ "\u66FE>'[already]'",
+ "\u66FF>'[change]'",
+ "\u6700>'[most]'",
+ "\u6703>'[assemble]'",
+ "\u6708>'[moon]'",
+ "\u6709>'[have]'",
+ "\u670B>'[friend]'",
+ "\u670D>'[clothes]'",
+ "\u670F>'[light of crescent moon]'",
+ "\u6714>'[first day of lunar month]'",
+ "\u6715>'['pronoun \"i\"']'",
+ "\u6716>'[clear]'",
+ "\u6717>'[clear]'",
+ "\u671B>'[look at or forward]'",
+ "\u671D>'[dynasty]'",
+ "\u671E>'[full year]'",
+ "\u671F>'[period of time]'",
+ "\u6726>'[condition or appearance of moon]'",
+ "\u6727>'[condition or appearance of moon]'",
+ "\u6728>'[tree]'",
+ "\u672A>'[not yet]'",
+ "\u672B>'[final]'",
+ "\u672C>'[root]'",
+ "\u672D>'[letter]'",
+ "\u672E>'[skill]'",
+ "\u6731>'[cinnabar]'",
+ "\u6734>'[simple]'",
+ "\u6736>'[cluster of flowers]'",
+ //"\u6736>'[cluster of flowers]'",
+ //"\u6736>'[cluster of flowers]'",
+ "\u673A>'[desk]'",
+ "\u673D>'[decayed]'",
+ "\u673F>'[stab]'",
+ //"\u6740>'[kill]'",
+ "\u6746>'[pole]'",
+ "\u6749>'[various species of pine and fir]'",
+ "\u674E>'[plum]'",
+ "\u674F>'[apricot]'",
+ "\u6750>'[material]'",
+ "\u6751>'[village]'",
+ "\u6753>'[handle of cup]'",
+ "\u6756>'[cane]'",
+ "\u6759>'[a tiny wooden post]'",
+ "\u675C>'[stop]'",
+ "\u675E>'[willow]'",
+ "\u675F>'[bind]'",
+ "\u6760>'[lever]'",
+ "\u6761>'[clause]'",
+ "\u6762>'[woodworker]'",
+ //"\u6762>'[woodworker]'",
+ "\u6764>'[type of oak]'",
+ "\u6765>'[come]'",
+ "\u676A>'[tip of twig]'",
+ "\u676D>'[cross stream]'",
+ "\u676F>'[cup]'",
+ "\u6770>'[hero]'",
+ "\u6771>'[east]'",
+ "\u6772>'[bright sun]'",
+ "\u6773>'[obscure]'",
+ "\u6775>'[pestle]'",
+ "\u6777>'[loquat]'",
+ "\u677C>'[shuttle of loom]'",
+ "\u677E>'[pine tree]'",
+ "\u677F>'[plank]'",
+ //"\u6785>'[................................]'",
+ "\u6787>'[loquat]'",
+ "\u6789>'[useless]'",
+ "\u678B>'[sandalwood]'",
+ "\u678C>'[variety of elm with small seeds]'",
+ "\u6790>'[split wood]'",
+ "\u6795>'[pillow]'",
+ "\u6797>'[forest]'",
+ "\u679A>'[stalk of shrub]'",
+ "\u679C>'[fruit]'",
+ "\u679D>'[branches]'",
+ //"\u679F>'[wood streaks]'",
+ //"\u679F>'[wood streaks]'",
+ "\u67A2>'[door hinge]'",
+ //"\u67A6>'[................................]'",
+ "\u67A9>'[pine tree]'",
+ "\u67AF>'[dried out]'",
+ "\u67B3>'[trifoliate orange]'",
+ "\u67B4>'[cane]'",
+ "\u67B6>'[rack]'",
+ "\u67B7>'[cangue scaffold]'",
+ "\u67B8>'[kind of aspen found in sichuan]'",
+ "\u67B9>'[drumstick]'",
+ "\u67C1>'[large tie-beams]'",
+ "\u67C4>'[handle]'",
+ //"\u67C6>'[................................]'",
+ //"\u67C8>'[container]'",
+ "\u67CE>'[calyx of flower]'",
+ "\u67CF>'[cypress]'",
+ "\u67D0>'[certain thing or person]'",
+ "\u67D1>'[tangerine]'",
+ "\u67D3>'[dye]'",
+ "\u67D4>'[soft]'",
+ "\u67D8>'[a thorny tree]'",
+ "\u67DA>'[pumelo]'",
+ "\u67DD>'[watchman''s rattle]'",
+ "\u67DE>'[oak]'",
+ "\u67E2>'[root]'",
+ "\u67E4>'[hawthorn]'",
+ //"\u67E7>'[................................]'",
+ "\u67E9>'[coffin which contains corpse]'",
+ "\u67EC>'[letter]'",
+ "\u67EE>'[flat pieces of wood]'",
+ "\u67EF>'[axe-handle]'",
+ "\u67F1>'[pillar]'",
+ "\u67F3>'[willow tree]'",
+ "\u67F4>'[firewood]'",
+ "\u67F5>'[fence]'",
+ "\u67FB>'[investigate]'",
+ "\u67FE>'[straight grain]'",
+ "\u67FF>'[persimmon]'",
+ "\u6802>'[a kind of evergreen tree]'",
+ "\u6803>'[type of oak]'",
+ "\u6804>'[glory]'",
+ "\u6813>'[wooden peg]'",
+ "\u6816>'[perch]'",
+ "\u6817>'[chestnut tree]'",
+ "\u681E>'[publication]'",
+ "\u6821>'[school]'",
+ "\u6822>'[cypress]'",
+ "\u6829>'[species of oak]'",
+ "\u682A>'[numerary adjunct for trees]'",
+ "\u682B>'[fence]'",
+ "\u6832>'[mangrove]'",
+ "\u6834>'[sandalwood]'",
+ "\u6838>'[seed]'",
+ "\u6839>'[root]'",
+ "\u683C>'[pattern]'",
+ "\u683D>'[cultivate]'",
+ "\u6840>'[chicken roost]'",
+ "\u6841>'[cross-beams of roof]'",
+ "\u6842>'[cassia or cinnamon]'",
+ "\u6843>'[peach]'",
+ "\u6846>'[frame]'",
+ "\u6848>'[table]'",
+ //"\u684D>'[................................]'",
+ "\u684E>'[fetters]'",
+ "\u6850>'[name applied various trees]'",
+ "\u6851>'[mulberry tree]'",
+ "\u6853>'[variety of tree]'",
+ "\u6854>'[chinese bellflower]'",
+ //"\u6859>'[................................]'",
+ "\u685C>'[cherry]'",
+ "\u685D>'[................]'",
+ //"\u685D>'[................]'",
+ "\u6863>'[shelf]'",
+ "\u6867>'[chinese cypress]'",
+ "\u6874>'[raft]'",
+ "\u6876>'[pail]'",
+ "\u6877>'[rafter]'",
+ //"\u687E>'[................................]'",
+ "\u687F>'[pole]'",
+ "\u6881>'[bridge]'",
+ "\u6883>'[a club]'",
+ "\u6885>'[plums]'",
+ "\u688D>'[tree name]'",
+ "\u688F>'[handcuffs]'",
+ "\u6893>'[catalpa ovata]'",
+ "\u6894>'[gardenia]'",
+ "\u6897>'[stem of flower]'",
+ //"\u6898>'[bamboo tube]'",
+ "\u689D>'[clause]'",
+ "\u689F>'[owl thus]'",
+ "\u68A0>'[small beam supporting rafters at]'",
+ "\u68A2>'[pointed tip of something long like a branch]'",
+ "\u68A6>'[dream]'",
+ "\u68A7>'[sterculia platanifolia]'",
+ "\u68A8>'[pear]'",
+ "\u68AD>'[weaver''s shuttle]'",
+ "\u68AF>'[ladder]'",
+ "\u68B0>'[weapons]'",
+ "\u68B1>'[doorsill]'",
+ "\u68B3>'[comb]'",
+ "\u68B5>'[buddhist]'",
+ "\u68B6>'[oar]'",
+ "\u68B9>'[the areca-nut]'",
+ //"\u68B9>'[the areca-nut]'",
+ "\u68BC>'[block of wood]'",
+ "\u68C4>'[reject]'",
+ //"\u68C6>'[................................]'",
+ "\u68C9>'[cotton]'",
+ "\u68CA>'[chess]'",
+ "\u68CB>'[chess]'",
+ "\u68CD>'[stick]'",
+ "\u68D2>'[stick]'",
+ //"\u68D4>'[................................]'",
+ "\u68D5>'[hemp palm]'",
+ "\u68D7>'[date tree]'",
+ "\u68D8>'[jujube tree]'",
+ "\u68DA>'[tent]'",
+ "\u68DF>'[main beams supporting house]'",
+ "\u68E0>'[crab apple tree]'",
+ //"\u68E1>'[................................]'",
+ "\u68E3>'[kerria japonica plant]'",
+ "\u68E7>'[warehouse]'",
+ "\u68EE>'[forest]'",
+ "\u68EF>'[jujube tree]'",
+ "\u68F2>'[perch]'",
+ "\u68F9>'[oar]'",
+ "\u68FA>'[coffin]'",
+ "\u6900>'[bowl]'",
+ "\u6901>'[outer-coffin]'",
+ "\u6904>'[to graft]'",
+ "\u6905>'[chair]'",
+ "\u6908>'[cedar]'",
+ "\u690B>'[fruit]'",
+ "\u690C>'[instrument]'",
+ "\u690D>'[plant]'",
+ "\u690E>'[hammer]'",
+ "\u690F>'[the forking branch of a tree]'",
+ "\u6912>'[pepper]'",
+ //"\u6913>'[strike]'",
+ //"\u691A>'[................................]'",
+ "\u691B>'[type of birch]'",
+ "\u691C>'[check]'",
+ //"\u6921>'[................................]'",
+ //"\u6922>'[................................]'",
+ //"\u6923>'[................................]'",
+ //"\u6925>'[................................]'",
+ //"\u6926>'[................................]'",
+ //"\u6928>'[................................]'",
+ "\u692A>'[machilus nanmu]'",
+ "\u6930>'[palm tree]'",
+ "\u6934>'[poplar]'",
+ "\u6936>'[palm tree]'",
+ "\u6939>'[a chopping board]'",
+ "\u693D>'[beams]'",
+ "\u693F>'[father]'",
+ "\u694A>'[willow]'",
+ "\u6953>'[maple tree]'",
+ "\u6954>'[wedge]'",
+ "\u6955>'[oval-shaped]'",
+ "\u6959>'[name of plant]'",
+ "\u695A>'[name of feudal state]'",
+ //"\u695C>'[................................]'",
+ "\u695D>'[melia japonica]'",
+ "\u695E>'[used for ceylon in buddhist text]'",
+ "\u6960>'[name of tree]'",
+ "\u6961>'[elm tree]'",
+ "\u6962>'[tinder]'",
+ "\u696A>'[small dish]'",
+ "\u696B>'[oar]'",
+ "\u696D>'[profession]'",
+ "\u696E>'[mulberry]'",
+ "\u696F>'[shield]'",
+ "\u6973>'[plums]'",
+ //"\u6974>'[................................]'",
+ "\u6975>'[extreme]'",
+ "\u6977>'[model style of chinese writing]'",
+ "\u6978>'[mallotus japonicus]'",
+ "\u6979>'[column]'",
+ "\u697C>'[building of two or more stories]'",
+ "\u697D>'[happy]'",
+ //"\u697D>'[happy]'",
+ //"\u6980>'[[not found in dictionary]]'",
+ "\u6982>'[generally]'",
+ //"\u6989>'[type of elm]'",
+ "\u698E>'[small evergreen shrub]'",
+ //"\u6991>'[................................]'",
+ "\u6994>'[betel-nut tree]'",
+ "\u6995>'[banyan tree]'",
+ "\u699B>'[hazelnut]'",
+ "\u699C>'[placard]'",
+ //"\u69A0>'[................................]'",
+ "\u69A7>'[type of yew]'",
+ "\u69AE>'[glory]'",
+ "\u69B1>'[rafter]'",
+ "\u69B2>'[pillar]'",
+ "\u69B4>'[pomegranate]'",
+ "\u69BB>'[cot]'",
+ "\u69BE>'[pieces of wood]'",
+ "\u69BF>'[alder]'",
+ "\u69C1>'[wither]'",
+ "\u69C3>'[tray]'",
+ "\u69C7>'[tip of a tree]'",
+ "\u69CA>'[spear]'",
+ "\u69CB>'[frame]'",
+ "\u69CC>'[hammer]'",
+ "\u69CD>'[spear]'",
+ "\u69CE>'[raft]'",
+ "\u69D0>'[locust tree]'",
+ "\u69D3>'[lever]'",
+ "\u69D8>'[shape]'",
+ //"\u69D8>'[shape]'",
+ //"\u69DB>'[threshold]'",
+ //"\u69DB>'[threshold]'",
+ "\u69E7>'[wooden tablet]'",
+ "\u69E8>'[outer-coffin]'",
+ //"\u69EB>'[................................]'",
+ "\u69ED>'[maple]'",
+ "\u69F2>'[type of oak]'",
+ "\u69F9>'[spar]'",
+ "\u69FB>'[zelkova tree]'",
+ "\u69FD>'[trough]'",
+ "\u69FF>'[hibiscus]'",
+ "\u6A02>'[happy]'",
+ "\u6A05>'[fir tree]'",
+ "\u6A0A>'[a railing]'",
+ "\u6A0B>'[tree name]'",
+ //"\u6A0C>'[................................]'",
+ //"\u6A12>'[................................]'",
+ "\u6A13>'[building of two or more stories]'",
+ //"\u6A13>'[building of two or more stories]'",
+ "\u6A17>'[kind of tree with useless timber]'",
+ "\u6A19>'[mark]'",
+ "\u6A1B>'[bending branches]'",
+ "\u6A1E>'[door hinge]'",
+ "\u6A1F>'[camphor tree]'",
+ "\u6A21>'[model]'",
+ //"\u6A22>'[................................]'",
+ "\u6A23>'[shape]'",
+ "\u6A29>'[power]'",
+ "\u6A2A>'[across]'",
+ //"\u6A2A>'[across]'",
+ //"\u6A2A>'[across]'",
+ "\u6A35>'[woodcutter]'",
+ "\u6A36>'[c]'",
+ "\u6A38>'[simple]'",
+ "\u6A39>'[tree]'",
+ "\u6A3A>'[type of birch]'",
+ "\u6A3D>'[goblet]'",
+ "\u6A44>'[olive]'",
+ "\u6A47>'[a sledge for transportation]'",
+ "\u6A48>'[bent or twisted piece of wood]'",
+ "\u6A4B>'[bridge]'",
+ "\u6A58>'[orange]'",
+ "\u6A59>'[orange]'",
+ "\u6A5F>'[machine]'",
+ "\u6A61>'[chestnut oak]'",
+ "\u6A62>'[oval-shaped]'",
+ "\u6A66>'[tree]'",
+ //"\u6A71>'[cabinet]'",
+ //"\u6A75>'[wood placed under roof tiles]'",
+ //"\u6A7F>'[................................]'",
+ "\u6A80>'[sandalwood]'",
+ "\u6A84>'[call arms]'",
+ "\u6A8D>'[ilex]'",
+ "\u6A8E>'[small red apple]'",
+ "\u6A90>'[eaves of house]'",
+ "\u6A97>'[tree]'",
+ "\u6A9C>'[chinese cypress]'",
+ "\u6AA0>'[stand for lamp]'",
+ "\u6AA2>'[check]'",
+ "\u6AA3>'[mast]'",
+ "\u6AAA>'[chestnut-leaved oak]'",
+ "\u6AAC>'[type of locust oracacia]'",
+ "\u6AAE>'[block of wood]'",
+ "\u6AB3>'[betelnut]'",
+ "\u6AB8>'[lemon]'",
+ "\u6ABB>'[threshold]'",
+ //"\u6AC1>'[................................]'",
+ "\u6AC2>'[oar]'",
+ "\u6AC3>'[cupboard]'",
+ //"\u6AD1>'[................................]'",
+ "\u6AD3>'[oar]'",
+ "\u6ADA>'[palm]'",
+ "\u6ADB>'[comb out]'",
+ "\u6ADE>'[citrus]'",
+ "\u6ADF>'[chestnut-leaved oak]'",
+ "\u6AE8>'[supporting block]'",
+ "\u6AEA>'[type of oak]'",
+ "\u6AFA>'[carved or patterned window sills]'",
+ "\u6AFB>'[cherry]'",
+ "\u6B04>'[railing]'",
+ "\u6B05>'[zelkova]'",
+ "\u6B0A>'[power]'",
+ "\u6B12>'[name of tree]'",
+ "\u6B16>'[olive]'",
+ "\u6B1D>'[luxuriant]'",
+ //"\u6B1E>'[the lattice of a window a sill]'",
+ "\u6B20>'[owe]'",
+ "\u6B21>'[order]'",
+ "\u6B23>'[happy]'",
+ "\u6B27>'[translit.: europe]'",
+ "\u6B32>'[desire]'",
+ "\u6B37>'[sob]'",
+ "\u6B38>'[sighs]'",
+ "\u6B39>'[fierce dog]'",
+ "\u6B3A>'[cheat]'",
+ "\u6B3D>'[respect]'",
+ "\u6B3E>'[item]'",
+ "\u6B43>'[smear one''s mouth with blood of a victim when taking an oath]'",
+ "\u6B47>'[rest]'",
+ "\u6B49>'[deficient]'",
+ "\u6B4C>'[song]'",
+ "\u6B4E>'[sigh]'",
+ "\u6B50>'[translit.: europe]'",
+ "\u6B53>'[happy]'",
+ "\u6B54>'[blow through nose]'",
+ "\u6B59>'[to suck]'",
+ "\u6B5B>'[draw back]'",
+ "\u6B5F>'[final particle used express ques]'",
+ "\u6B61>'[happy]'",
+ "\u6B62>'[stop]'",
+ "\u6B63>'[right]'",
+ "\u6B64>'[this]'",
+ "\u6B66>'[military]'",
+ "\u6B69>'[step]'",
+ "\u6B6A>'[slant]'",
+ "\u6B6F>'[teeth]'",
+ "\u6B73>'[year]'",
+ "\u6B74>'[take place]'",
+ "\u6B78>'[return]'",
+ "\u6B79>'[bad]'",
+ "\u6B7B>'[die]'",
+ "\u6B7F>'[die]'",
+ "\u6B80>'[die young]'",
+ "\u6B83>'[misfortune]'",
+ "\u6B84>'[to end]'",
+ "\u6B86>'[dangerous]'",
+ "\u6B89>'[die for cause]'",
+ "\u6B8A>'[different]'",
+ "\u6B8B>'[injure]'",
+ "\u6B8D>'[to starve to death]'",
+ "\u6B95>'[[not found in dictionary]]'",
+ "\u6B96>'[breed]'",
+ "\u6B98>'[injure]'",
+ "\u6B9E>'[die]'",
+ "\u6BA4>'[die young]'",
+ "\u6BAA>'[die]'",
+ "\u6BAB>'[utmost]'",
+ "\u6BAF>'[encoffin]'",
+ "\u6BB1>'[annihilate]'",
+ "\u6BB2>'[annihilate]'",
+ "\u6BB3>'[name of old weapon]'",
+ "\u6BB4>'[beat]'",
+ "\u6BB5>'[section]'",
+ "\u6BB7>'[many]'",
+ "\u6BBA>'[kill]'",
+ "\u6BBB>'[casing]'",
+ "\u6BBC>'[casing]'",
+ "\u6BBF>'[hall]'",
+ "\u6BC0>'[destroy]'",
+ "\u6BC5>'[resolute]'",
+ "\u6BC6>'[beat]'",
+ "\u6BCB>'[do not]'",
+ "\u6BCD>'[mother]'",
+ "\u6BCE>'[every]'",
+ "\u6BD2>'[poison]'",
+ "\u6BD3>'[give birth to]'",
+ "\u6BD4>'[compare]'",
+ "\u6BD8>'[help]'",
+ "\u6BDB>'[hair]'",
+ //"\u6BDF>'[................................]'",
+ "\u6BEB>'[fine hair]'",
+ "\u6BEC>'[ball]'",
+ "\u6BEF>'[rug]'",
+ "\u6BF3>'[fine hair or fur on animals]'",
+ "\u6C08>'[felt]'",
+ "\u6C0F>'[clan]'",
+ "\u6C11>'[people]'",
+ "\u6C13>'[people]'",
+ "\u6C14>'[steam]'",
+ "\u6C17>'[air]'",
+ "\u6C1B>'[gas]'",
+ "\u6C23>'[air]'",
+ "\u6C24>'[hanging fog]'",
+ "\u6C34>'[water]'",
+ "\u6C37>'[ice]'",
+ "\u6C38>'[long]'",
+ "\u6C3E>'[overflow]'",
+ "\u6C40>'[sandbar]'",
+ "\u6C41>'[juice]'",
+ "\u6C42>'[seek]'",
+ "\u6C4E>'[float]'",
+ "\u6C50>'[night tides]'",
+ "\u6C55>'[basket for catching fish]'",
+ "\u6C57>'[perspiration]'",
+ "\u6C5A>'[filthy]'",
+ "\u6C5D>'[you]'",
+ "\u6C5E>'[element mercury]'",
+ "\u6C5F>'[large river]'",
+ "\u6C60>'[pool]'",
+ //"\u6C62>'[................................]'",
+ "\u6C68>'[Mi(luo) river in hunan province where Qu Yuan drowned himself]'",
+ "\u6C6A>'[vast]'",
+ "\u6C70>'[excessive]'",
+ "\u6C72>'[draw water from well]'",
+ //"\u6C72>'[draw water from well]'",
+ "\u6C7A>'[decide]'",
+ "\u6C7D>'[steam]'",
+ "\u6C7E>'[river in shanxi province]'",
+ "\u6C81>'[soak into]'",
+ "\u6C82>'[river in southeast shandong flow]'",
+ "\u6C83>'[water]'",
+ "\u6C88>'[sink]'",
+ "\u6C8C>'[chaotic]'",
+ "\u6C8D>'[freezing]'",
+ "\u6C90>'[bathe]'",
+ "\u6C92>'[not]'",
+ "\u6C93>'[connected]'",
+ "\u6C96>'[pour]'",
+ "\u6C99>'[sand]'",
+ "\u6C9A>'[islet in stream]'",
+ "\u6C9B>'[abundant]'",
+ "\u6CA1>'[not]'",
+ "\u6CA2>'[marsh]'",
+ "\u6CAB>'[froth]'",
+ "\u6CAE>'[stop]'",
+ "\u6CB1>'[rivers]'",
+ "\u6CB3>'[river]'",
+ "\u6CB8>'[boil]'",
+ "\u6CB9>'[oil]'",
+ "\u6CBA>'[turbulent]'",
+ "\u6CBB>'[govern]'",
+ "\u6CBC>'[lake]'",
+ "\u6CBD>'[buy and sell]'",
+ "\u6CBE>'[moisten]'",
+ "\u6CBF>'[follow course]'",
+ "\u6CC1>'[condition]'",
+ "\u6CC4>'[leak]'",
+ "\u6CC5>'[swim]'",
+ "\u6CC9>'[spring]'",
+ "\u6CCA>'[anchor vessel]'",
+ "\u6CCC>'[to seep out]'",
+ "\u6CD3>'[clear]'",
+ "\u6CD5>'[law]'",
+ "\u6CD7>'[mucous]'",
+ "\u6CD9>'[roar]'",
+ "\u6CDB>'[drift]'",
+ "\u6CDD>'[go upstream]'",
+ "\u6CE1>'[bubbles]'",
+ "\u6CE2>'[waves]'",
+ "\u6CE3>'[cry]'",
+ "\u6CE5>'[mud]'",
+ "\u6CE8>'[concentrate]'",
+ "\u6CEA>'[tears]'",
+ "\u6CEF>'[destroy]'",
+ "\u6CF0>'[great]'",
+ "\u6CF1>'[great]'",
+ "\u6CF3>'[dive]'",
+ "\u6D0B>'[ocean]'",
+ "\u6D0C>'[clear]'",
+ "\u6D12>'[sprinkle]'",
+ "\u6D17>'[wash]'",
+ "\u6D19>'[name of a river in shandong]'",
+ "\u6D1B>'[river in shaanxi province]'",
+ "\u6D1E>'[cave]'",
+ "\u6D1F>'[snivel]'",
+ "\u6D25>'[ferry]'",
+ "\u6D29>'[leak]'",
+ "\u6D2A>'[vast]'",
+ "\u6D2B>'[to ditch]'",
+ "\u6D32>'[continent]'",
+ "\u6D33>'[damp]'",
+ "\u6D35>'[true]'",
+ "\u6D36>'[the rush of water]'",
+ "\u6D38>'[sparkle]'",
+ "\u6D3B>'[live]'",
+ "\u6D3D>'[spread]'",
+ "\u6D3E>'[school of thought]'",
+ "\u6D41>'[flow]'",
+ "\u6D44>'[pure]'",
+ "\u6D45>'[shallow]'",
+ "\u6D59>'[zhejiang province]'",
+ "\u6D5A>'[dredge]'",
+ "\u6D5C>'[creek]'",
+ "\u6D63>'[to wash]'",
+ "\u6D64>'[beating of ocean]'",
+ "\u6D66>'[bank of river]'",
+ "\u6D69>'[great]'",
+ "\u6D6A>'[wave]'",
+ "\u6D6C>'[nautical mile]'",
+ "\u6D6E>'[float]'",
+ "\u6D74>'[bathe]'",
+ "\u6D77>'[sea]'",
+ "\u6D78>'[soak]'",
+ "\u6D79>'[saturate]'",
+ "\u6D85>'[blacken]'",
+ "\u6D88>'[vanish]'",
+ "\u6D8C>'[surge up]'",
+ "\u6D8E>'[saliva]'",
+ "\u6D93>'[brook]'",
+ "\u6D95>'[tear]'",
+ "\u6D99>'[tears]'",
+ "\u6D9B>'[large waves]'",
+ "\u6D9C>'[ditch]'",
+ "\u6DAF>'[shore]'",
+ "\u6DB2>'[sap]'",
+ "\u6DB5>'[soak]'",
+ "\u6DB8>'[dried up]'",
+ "\u6DBC>'[cool]'",
+ "\u6DC0>'[shallow water]'",
+ "\u6DC5>'[water used wash rice]'",
+ "\u6DC6>'[confused]'",
+ "\u6DC7>'[river in henan province]'",
+ "\u6DCB>'[drip]'",
+ "\u6DCC>'[trickle]'",
+ "\u6DD1>'[good]'",
+ "\u6DD2>'[bitter cold]'",
+ //"\u6DD5>'[................................]'",
+ "\u6DD8>'[wash in sieve]'",
+ "\u6DD9>'[gurgling sound of water]'",
+ "\u6DDE>'[name of a river in Jiangsu]'",
+ "\u6DE1>'[weak]'",
+ "\u6DE4>'[mud]'",
+ "\u6DE6>'[river in jiangxi province: water]'",
+ "\u6DE8>'[pure]'",
+ "\u6DEA>'[be lost]'",
+ "\u6DEB>'[obscene]'",
+ "\u6DEC>'[temper]'",
+ "\u6DEE>'[river in anhui province]'",
+ "\u6DF1>'[deep]'",
+ "\u6DF3>'[cyanogen]'",
+ "\u6DF5>'[gulf]'",
+ "\u6DF7>'[mix]'",
+ "\u6DF9>'[drown]'",
+ "\u6DFA>'[shallow]'",
+ "\u6DFB>'[append]'",
+ "\u6E05>'[clear]'",
+ "\u6E07>'[thirsty]'",
+ "\u6E08>'[help]'",
+ "\u6E09>'[ford stream]'",
+ "\u6E0A>'[surge up]'",
+ "\u6E0B>'[astringent]'",
+ "\u6E13>'[mountain stream]'",
+ "\u6E15>'[surge up]'",
+ "\u6E19>'[scatter]'",
+ "\u6E1A>'[small sand bank]'",
+ "\u6E1B>'[decrease]'",
+ "\u6E1D>'[change]'",
+ "\u6E1F>'[(of water) not flowing]'",
+ "\u6E20>'[ditch]'",
+ "\u6E21>'[cross]'",
+ "\u6E23>'[refuse]'",
+ "\u6E24>'[swelling]'",
+ "\u6E25>'[moisten]'",
+ "\u6E26>'[swirl]'",
+ "\u6E29>'[lukewarm]'",
+ "\u6E2B>'[beating of ocean]'",
+ "\u6E2C>'[measure]'",
+ "\u6E2D>'[name of a river in shaanxi]'",
+ "\u6E2E>'[river in shandong province]'",
+ "\u6E2F>'[port]'",
+ "\u6E38>'[swim]'",
+ "\u6E3A>'[endlessly long]'",
+ "\u6E3E>'[muddy]'",
+ "\u6E43>'[sound of waves]'",
+ "\u6E4A>'[piece together]'",
+ "\u6E4D>'[rapid water current]'",
+ "\u6E4E>'[flushed with drink]'",
+ "\u6E56>'[lake]'",
+ "\u6E58>'[hunan province]'",
+ "\u6E5B>'[deep]'",
+ "\u6E5F>'[river in qinghai province]'",
+ "\u6E67>'[well up]'",
+ "\u6E6B>'[a small pond]'",
+ "\u6E6E>'[bury]'",
+ "\u6E6F>'[hot water]'",
+ "\u6E72>'[flow]'",
+ //"\u6E73>'[[not found in dictionary]]'",
+ "\u6E7E>'[bay]'",
+ "\u6E7F>'[wet]'",
+ //"\u6E7F>'[wet]'",
+ //"\u6E7F>'[wet]'",
+ "\u6E8C>'[pour]'",
+ "\u6E8F>'[pool]'",
+ "\u6E90>'[spring]'",
+ "\u6E96>'[rule]'",
+ "\u6E98>'[abruptly]'",
+ "\u6E9C>'[slide]'",
+ "\u6E9D>'[ditch]'",
+ "\u6E9F>'[drizzling rain]'",
+ "\u6EA2>'[overflow]'",
+ "\u6EA5>'[big]'",
+ "\u6EAA>'[mountain stream]'",
+ "\u6EAF>'[go upstream]'",
+ "\u6EB2>'[urinate]'",
+ "\u6EB6>'[melt]'",
+ "\u6EB7>'[privy]'",
+ "\u6EBA>'[drown]'",
+ "\u6EBD>'[moist]'",
+ "\u6EC2>'[torrential]'",
+ "\u6EC4>'[blue]'",
+ "\u6EC5>'[extinguish]'",
+ "\u6EC9>'[deep]'",
+ "\u6ECB>'[grow]'",
+ "\u6ECC>'[wash]'",
+ "\u6ED1>'[slip]'",
+ "\u6ED3>'[sediment]'",
+ "\u6ED4>'[overflow]'",
+ "\u6ED5>'[<arch> county in shandong province]'",
+ "\u6EDD>'[raining]'",
+ "\u6EDE>'[block up]'",
+ "\u6EEC>'[shanghai]'",
+ "\u6EEF>'[block up]'",
+ "\u6EF2>'[soak through]'",
+ "\u6EF4>'[drip]'",
+ "\u6EF7>'[thick gravy]'",
+ "\u6EF8>'[riverbank]'",
+ "\u6EFE>'[turn]'",
+ "\u6EFF>'[fill]'",
+ "\u6F01>'[to fish]'",
+ "\u6F02>'[float]'",
+ "\u6F06>'[varnish]'",
+ "\u6F09>'[filter]'",
+ "\u6F0F>'[leak]'",
+ "\u6F11>'[water]'",
+ "\u6F13>'[river in guangxi province]'",
+ "\u6F14>'[perform]'",
+ "\u6F15>'[transport by water]'",
+ "\u6F20>'[desert]'",
+ "\u6F22>'[chinese people]'",
+ "\u6F23>'[flowing water]'",
+ "\u6F2B>'[overflow of water]'",
+ "\u6F2C>'[soak]'",
+ "\u6F31>'[gargle]'",
+ "\u6F32>'[rise in price]'",
+ "\u6F38>'[gradually]'",
+ "\u6F3E>'[overflow]'",
+ "\u6F3F>'[any thick fluid]'",
+ "\u6F41>'[river in anhui]'",
+ "\u6F45>'[pour]'",
+ "\u6F54>'[clean]'",
+ "\u6F58>'[surname]'",
+ "\u6F5B>'[hide]'",
+ "\u6F5C>'[hide]'",
+ "\u6F5F>'[land inundated with salt from ti]'",
+ "\u6F64>'[soft]'",
+ "\u6F66>'[to flood]'",
+ "\u6F6D>'[deep pool]'",
+ "\u6F6E>'[tide]'",
+ "\u6F6F>'[steep bank by stream]'",
+ "\u6F70>'[flooding river]'",
+ "\u6F74>'[pond]'",
+ "\u6F78>'[weep]'",
+ "\u6F7A>'[sound of flowing water]'",
+ "\u6F7C>'[high]'",
+ "\u6F80>'[astringent]'",
+ "\u6F81>'[astringent]'",
+ "\u6F82>'[clear and still water]'",
+ "\u6F84>'[purify water by allowing sedimen]'",
+ "\u6F86>'[spray]'",
+ "\u6F8E>'[splatter]'",
+ "\u6F91>'[slide]'",
+ "\u6F97>'[brook]'",
+ "\u6FA1>'[wash]'",
+ "\u6FA3>'[cleanse]'",
+ "\u6FA4>'[marsh]'",
+ //"\u6FAA>'[................................]'",
+ "\u6FB1>'[sediment]'",
+ "\u6FB3>'[inlet]'",
+ "\u6FB9>'[calm]'",
+ "\u6FC0>'[arouse]'",
+ "\u6FC1>'[muddy]'",
+ "\u6FC2>'[waterfall]'",
+ "\u6FC3>'[thick]'",
+ "\u6FC6>'[river bank]'",
+ "\u6FD4>'[many]'",
+ "\u6FD5>'[wet]'",
+ "\u6FD8>'[mud]'",
+ "\u6FDB>'[drizzling]'",
+ "\u6FDF>'[help]'",
+ "\u6FE0>'[moat]'",
+ "\u6FE1>'[immerse]'",
+ "\u6FE4>'[large waves]'",
+ "\u6FEB>'[flood]'",
+ "\u6FEC>'[dredge]'",
+ "\u6FEE>'[county in Henan province]'",
+ "\u6FEF>'[wash out]'",
+ "\u6FF1>'[beach]'",
+ "\u6FF3>'[hide]'",
+ "\u6FF6>'[broad]'",
+ "\u6FFA>'[sprinkle]'",
+ "\u6FFE>'[strain out]'",
+ "\u7001>'[waves]'",
+ "\u7009>'[drain off]'",
+ "\u700B>'[juice]'",
+ "\u700F>'[clear]'",
+ "\u7011>'[waterfall]'",
+ "\u7015>'[approach]'",
+ "\u7018>'[river in jiangxi province]'",
+ "\u701A>'[vast]'",
+ "\u701B>'[sea]'",
+ "\u701D>'[trickle]'",
+ "\u701E>'[pool in a river]'",
+ "\u701F>'[sound of beating wind and rain]'",
+ "\u7026>'[pond]'",
+ "\u7027>'[raining]'",
+ "\u702C>'[swift current]'",
+ "\u7030>'[overflow]'",
+ "\u7032>'[waves]'",
+ "\u703E>'[overflowing]'",
+ "\u704C>'[pour]'",
+ "\u7051>'[sprinkle]'",
+ "\u7058>'[bank]'",
+ "\u7063>'[bay]'",
+ "\u706B>'[fire]'",
+ "\u706F>'[lantern]'",
+ "\u7070>'[ashes]'",
+ "\u7078>'[cauterize with moxa]'",
+ "\u707C>'[burn]'",
+ "\u707D>'[calamity]'",
+ "\u7089>'[fireplace]'",
+ "\u708A>'[cook]'",
+ "\u708E>'[flame]'",
+ "\u7092>'[fry]'",
+ "\u7099>'[roast]'",
+ "\u70AC>'[torch]'",
+ "\u70AD>'[charcoal]'",
+ "\u70AE>'[large gun]'",
+ "\u70AF>'[bright]'",
+ "\u70B3>'[bright]'",
+ "\u70B8>'[fry in oil]'",
+ "\u70B9>'[dot]'",
+ "\u70BA>'[do]'",
+ "\u70C8>'[fiery]'",
+ "\u70CB>'[boast]'",
+ "\u70CF>'[crow]'",
+ "\u70D9>'[brand]'",
+ "\u70DD>'[rise]'",
+ "\u70DF>'[smoke]'",
+ "\u70F1>'[bright]'",
+ "\u70F9>'[boil]'",
+ "\u70FD>'[signal fire]'",
+ "\u7109>'[thereupon]'",
+ "\u7114>'[flame]'",
+ "\u7119>'[dry over slow fire]'",
+ "\u711A>'[burn]'",
+ "\u711C>'[fire]'",
+ "\u7121>'[negative]'",
+ "\u7126>'[burned]'",
+ "\u7136>'[yes]'",
+ "\u713C>'[burn]'",
+ "\u7149>'[smelt]'",
+ "\u714C>'[bright]'",
+ "\u714E>'[fry in fat or oil]'",
+ "\u7155>'[bright]'",
+ "\u7156>'[warm]'",
+ "\u7159>'[smoke]'",
+ "\u7162>'[alone]'",
+ "\u7164>'[coal]'",
+ "\u7165>'[shining]'",
+ "\u7166>'[kind]'",
+ "\u7167>'[shine]'",
+ "\u7169>'[bother]'",
+ "\u716C>'[roast]'",
+ "\u716E>'[cook]'",
+ "\u717D>'[stir up]'",
+ "\u7184>'[put out]'",
+ "\u7188>'[bright]'",
+ "\u718A>'[bear]'",
+ "\u718F>'[smoke]'",
+ "\u7194>'[melt]'",
+ //"\u7195>'[................................]'",
+ "\u7199>'[bright]'",
+ "\u719F>'[well cooked]'",
+ "\u71A8>'[iron]'",
+ "\u71AC>'[cook down]'",
+ "\u71B1>'[hot]'",
+ "\u71B9>'[dim light]'",
+ "\u71BE>'[burning hot]'",
+ "\u71C3>'[burn]'",
+ "\u71C8>'[lantern]'",
+ "\u71C9>'[heat with fire]'",
+ "\u71CE>'[burn]'",
+ "\u71D0>'[phosphorus]'",
+ "\u71D2>'[burn]'",
+ "\u71D4>'[to roast]'",
+ "\u71D5>'[swallow (bird)]'",
+ //"\u71D7>'[................................]'",
+ "\u71DF>'[encampment]'",
+ "\u71E0>'[warm]'",
+ "\u71E5>'[dry]'",
+ "\u71E6>'[vivid]'",
+ "\u71E7>'[flintstone]'",
+ "\u71EC>'[burn down]'",
+ "\u71ED>'[candle]'",
+ "\u71EE>'[harmonize]'",
+ //"\u71F5>'[................................]'",
+ "\u71F9>'[fire]'",
+ "\u71FB>'[smoke]'",
+ "\u71FC>'[cinders]'",
+ "\u71FF>'[shine]'",
+ "\u7206>'[crackle]'",
+ "\u720D>'[shine]'",
+ "\u7210>'[fireplace]'",
+ "\u721B>'[rotten]'",
+ "\u7228>'[oven]'",
+ "\u722A>'[claw]'",
+ "\u722C>'[crawl]'",
+ "\u722D>'[dispute]'",
+ "\u7230>'[lead on to]'",
+ "\u7232>'[do]'",
+ "\u7235>'[feudal title or rank]'",
+ "\u7236>'[father]'",
+ "\u723A>'[father]'",
+ "\u723B>'[diagrams for divination]'",
+ "\u723C>'[chopping board or block]'",
+ "\u723D>'[happy]'",
+ "\u723E>'[you]'",
+ "\u723F>'[half of tree trunk]'",
+ "\u7240>'[bed]'",
+ "\u7246>'[wall]'",
+ "\u7247>'[slice]'",
+ "\u7248>'[printing blocks]'",
+ "\u724B>'[memorandum]'",
+ "\u724C>'[signboard]'",
+ "\u7252>'[documents]'",
+ "\u7258>'[writing tablet]'",
+ "\u7259>'[tooth]'",
+ "\u725B>'[cow]'",
+ "\u725D>'[female of species]'",
+ "\u725F>'[make]'",
+ "\u7261>'[male of animals]'",
+ "\u7262>'[prison]'",
+ "\u7267>'[tend cattle]'",
+ "\u7269>'[thing]'",
+ "\u7272>'[sacrificial animal]'",
+ "\u7274>'[gore]'",
+ "\u7279>'[special]'",
+ "\u727D>'[drag]'",
+ "\u727E>'[to oppose]'",
+ "\u7280>'[rhinoceros]'",
+ "\u7281>'[plow]'",
+ "\u7282>'[plow]'",
+ "\u7287>'[run fast]'",
+ "\u7292>'[entertain victorious soldiers]'",
+ "\u7296>'[brindled ox]'",
+ "\u72A0>'[sacrifice]'",
+ "\u72A2>'[calf]'",
+ "\u72A7>'[sacrifice]'",
+ "\u72AC>'[dog]'",
+ "\u72AF>'[commit crime]'",
+ "\u72B2>'[wolf]'",
+ "\u72B6>'[form]'",
+ "\u72B9>'[like]'",
+ "\u72C2>'[insane]'",
+ "\u72C3>'[to covet]'",
+ "\u72C4>'[tribe from northern china]'",
+ "\u72C6>'[pekinese dog]'",
+ "\u72CE>'[be familiar with]'",
+ "\u72D0>'[species of fox]'",
+ "\u72D2>'[baboon]'",
+ "\u72D7>'[dog]'",
+ "\u72D9>'[ape]'",
+ //"\u72DB>'[................................]'",
+ "\u72E0>'[vicious]'",
+ "\u72E1>'[cunning]'",
+ "\u72E2>'[animal name]'",
+ "\u72E9>'[winter hunting]'",
+ "\u72EC>'[alone]'",
+ "\u72ED>'[narrow]'",
+ "\u72F7>'[rash]'",
+ "\u72F8>'[fox]'",
+ "\u72F9>'[narrow]'",
+ "\u72FC>'[wolf]'",
+ "\u72FD>'[legendary animal with short fore]'",
+ "\u730A>'[lion]'",
+ "\u7316>'[mad]'",
+ "\u7317>'[exclamation of admiration]'",
+ "\u731B>'[violent]'",
+ "\u731C>'[guess]'",
+ "\u731D>'[abruptly]'",
+ "\u731F>'[hunt]'",
+ "\u7325>'[vulgar]'",
+ "\u7329>'[species of orangutan]'",
+ "\u732A>'[pig]'",
+ "\u732B>'[cat]'",
+ "\u732E>'[offer]'",
+ //"\u732F>'[................................]'",
+ "\u7334>'[monkey]'",
+ "\u7336>'[like]'",
+ "\u7337>'[plan]'",
+ "\u733E>'[crafty]'",
+ "\u733F>'[ape]'",
+ "\u7344>'[prison]'",
+ "\u7345>'[lion]'",
+ "\u734E>'[prize]'",
+ "\u734F>'[the panther]'",
+ "\u7357>'[unruly]'",
+ "\u7363>'[beast]'",
+ "\u7368>'[alone]'",
+ "\u736A>'[sly]'",
+ "\u7370>'[ferocious appearance]'",
+ "\u7372>'[obtain]'",
+ "\u7375>'[hunt]'",
+ "\u7378>'[beast]'",
+ "\u737A>'[otter]'",
+ "\u737B>'[offer]'",
+ "\u7384>'[deep]'",
+ "\u7387>'[to lead]'",
+ "\u7389>'[jade]'",
+ "\u738B>'[king]'",
+ "\u7396>'[black-colored jade]'",
+ "\u73A9>'[play with]'",
+ "\u73B2>'[tinkling of jade]'",
+ "\u73B3>'[tortoise shell]'",
+ "\u73BB>'[glass]'",
+ "\u73C0>'[amber]'",
+ "\u73C2>'[inferior kind of jade]'",
+ "\u73C8>'[ornament attached woman''s hairpi]'",
+ "\u73CA>'[coral]'",
+ "\u73CD>'[precious]'",
+ "\u73CE>'[precious]'",
+ "\u73DE>'[kind of necklace]'",
+ "\u73E0>'[precious stone]'",
+ "\u73E5>'[ear ornament]'",
+ "\u73EA>'[jade table conferred upon feudal]'",
+ "\u73ED>'[class]'",
+ "\u73EE>'[jade ornament]'",
+ "\u73F1>'[necklace made of precious stones]'",
+ //"\u73F8>'[................................]'",
+ "\u73FE>'[appear]'",
+ "\u7403>'[ball]'",
+ "\u7405>'[variety of white carnelian]'",
+ "\u7406>'[reason]'",
+ "\u7409>'[sparkling stone]'",
+ "\u7422>'[polish jade]'",
+ "\u7425>'[jewel in shape of tiger]'",
+ "\u7432>'[necklace]'",
+ "\u7433>'[beautiful jade]'",
+ "\u7434>'[chinese lute or guitar]'",
+ "\u7435>'[guitar-like instrument]'",
+ "\u7436>'[guitar-like instrument]'",
+ "\u743A>'[enamel]'",
+ "\u743F>'[bright]'",
+ "\u7441>'[fine piece of jade]'",
+ "\u7455>'[flaw in gem]'",
+ "\u7459>'[agate]'",
+ "\u745A>'[coral]'",
+ "\u745B>'[luster of gem]'",
+ "\u745C>'[flawless gem or jewel]'",
+ "\u745E>'[felicitous omen]'",
+ "\u745F>'[large stringed musical instrument]'",
+ "\u7460>'[precious stone]'",
+ "\u7463>'[fragments]'",
+ "\u7464>'[precious jade]'",
+ "\u7469>'[lustre of gems]'",
+ "\u746A>'[agate]'",
+ "\u746F>'[kind of white cornelian]'",
+ "\u7470>'[extraordinary]'",
+ "\u7473>'[luster of gem]'",
+ "\u7476>'[precious jade]'",
+ "\u747E>'[brilliance of gems]'",
+ "\u7483>'[glass]'",
+ "\u748B>'[jade plaything]'",
+ "\u749E>'[unpolished gem]'",
+ "\u74A2>'[precious stone]'",
+ "\u74A7>'[piece of jade with hole in it]'",
+ "\u74B0>'[jade ring or bracelet]'",
+ "\u74BD>'[imperial signet]'",
+ "\u74CA>'[jade]'",
+ "\u74CF>'[gem cut like dragon]'",
+ "\u74D4>'[necklace made of precious stones]'",
+ "\u74DC>'[melon]'",
+ "\u74E0>'[bottle gourd]'",
+ "\u74E2>'[ladle made from dried gourd]'",
+ "\u74E3>'[petal]'",
+ "\u74E6>'[tile]'",
+ "\u74E7>'[decagram]'",
+ "\u74E9>'[kilowatt]'",
+ "\u74EE>'[earthen jar]'",
+ "\u74F0>'[[not found in dictionary]]'",
+ "\u74F1>'[milligram]'",
+ //"\u74F2>'[................................]'",
+ "\u74F6>'[jug]'",
+ "\u74F7>'[crockery]'",
+ "\u74F8>'[hectogram]'",
+ "\u7503>'[brick wall of a well]'",
+ "\u7504>'[examine]'",
+ "\u7505>'[centigram]'",
+ "\u750C>'[bowl]'",
+ "\u750D>'[rafters supporting roof tiles]'",
+ "\u750E>'[brick]'",
+ "\u7511>'[boiler for steaming rice]'",
+ "\u7513>'[glazed tiles]'",
+ "\u7515>'[earthen jar]'",
+ "\u7518>'[sweetness]'",
+ "\u751A>'[great extent]'",
+ "\u751C>'[sweet]'",
+ "\u751E>'[taste]'",
+ "\u751F>'[life]'",
+ "\u7523>'[give birth]'",
+ "\u7525>'[sister''s child]'",
+ "\u7526>'[be reborn]'",
+ "\u7528>'[use]'",
+ "\u752B>'[begin]'",
+ "\u752C>'[path]'",
+ "\u7530>'[field]'",
+ "\u7531>'[cause]'",
+ "\u7532>'[armor]'",
+ "\u7533>'[to state to a superior]'",
+ "\u7537>'[male]'",
+ "\u7538>'[suburbs of capital]'",
+ "\u753A>'[raised path between fields]'",
+ "\u753B>'[painting]'",
+ "\u753C>'[raised path between fields]'",
+ "\u7544>'[stop]'",
+ "\u7546>'[chinese land measure]'",
+ //"\u7549>'[................................]'",
+ "\u754A>'[plow]'",
+ "\u754B>'[till land]'",
+ "\u754C>'[boundary]'",
+ //"\u754D>'[................................]'",
+ "\u754F>'[fear]'",
+ "\u7551>'[dry (as opposed to rice) field]'",
+ "\u7554>'[boundary path dividing fields]'",
+ "\u7559>'[stop]'",
+ "\u755A>'[straw basket]'",
+ "\u755B>'[border]'",
+ "\u755C>'[livestock]'",
+ "\u755D>'[chinese land measure]'",
+ "\u7560>'[garden]'",
+ "\u7562>'[end]'",
+ "\u7564>'[place for worshipping the haven]'",
+ "\u7565>'[approximately]'",
+ "\u7566>'[sections in vegetable farm]'",
+ "\u7567>'[approximately]'",
+ //"\u7569>'[................................]'",
+ "\u756A>'[take turns]'",
+ "\u756B>'[delineate]'",
+ //"\u756D>'[................................]'",
+ "\u7570>'[different]'",
+ "\u7573>'[repeat]'",
+ "\u7574>'[farmland]'",
+ "\u7576>'[bear]'",
+ "\u7577>'[raised path between fields]'",
+ "\u7578>'[odd]'",
+ "\u757F>'[imperial domain]'",
+ "\u7582>'[repeat]'",
+ "\u7586>'[boundary]'",
+ "\u7587>'[farmland]'",
+ "\u7589>'[repeat]'",
+ "\u758A>'[repeat]'",
+ "\u758B>'[roll]'",
+ "\u758E>'[neglect]'",
+ "\u758F>'[neglect]'",
+ "\u7591>'[doubt]'",
+ "\u7594>'[carbuncle]'",
+ "\u759A>'[chronic disease]'",
+ "\u759D>'[hernia]'",
+ "\u75A3>'[wart]'",
+ "\u75A5>'[scabies]'",
+ "\u75AB>'[epidemic]'",
+ "\u75B1>'[acne]'",
+ "\u75B2>'[feel tired]'",
+ "\u75B3>'[childhood diseases]'",
+ "\u75B5>'[flaw]'",
+ "\u75B8>'[jaundice]'",
+ "\u75B9>'[measles]'",
+ "\u75BC>'[aches]'",
+ "\u75BD>'[ulcer]'",
+ "\u75BE>'[illness]'",
+ "\u75C2>'[scab]'",
+ "\u75C3>'[indigestion]'",
+ "\u75C5>'[illness]'",
+ "\u75C7>'[disease]'",
+ "\u75CA>'[be healed]'",
+ "\u75CD>'[wound]'",
+ "\u75D2>'[itch]'",
+ "\u75D4>'[hemorrhoids]'",
+ "\u75D5>'[scar]'",
+ "\u75D8>'[smallpox]'",
+ "\u75D9>'[convulsions]'",
+ "\u75DB>'[pain]'",
+ "\u75DE>'[dyspepsia]'",
+ "\u75E2>'[dysentry]'",
+ "\u75E3>'[spots]'",
+ "\u75E9>'[thin]'",
+ "\u75F0>'[phlegm]'",
+ "\u75F2>'[pock-marked]'",
+ "\u75F3>'[pock-marked]'",
+ "\u75F4>'[foolish]'",
+ "\u75FA>'[paralysis]'",
+ "\u75FC>'[chronic disease]'",
+ "\u75FE>'[chronic illness]'",
+ "\u75FF>'[paralysis]'",
+ "\u7601>'[feel tired]'",
+ "\u7609>'[get well]'",
+ "\u760B>'[crazy]'",
+ "\u760D>'[ulcers]'",
+ "\u761F>'[epidemic]'",
+ "\u7620>'[thin]'",
+ "\u7621>'[tumor]'",
+ "\u7622>'[scar]'",
+ "\u7624>'[tumor]'",
+ "\u7627>'[intermittent fever]'",
+ "\u7630>'[scrofula]'",
+ "\u7634>'[malaria pestilential vapors]'",
+ "\u763B>'[fistula]'",
+ "\u7642>'[be healed]'",
+ "\u7646>'[consumption]'",
+ "\u7647>'[epilepsy]'",
+ "\u7648>'[abrogate]'",
+ "\u764C>'[cancer]'",
+ "\u7652>'[get well]'",
+ "\u7656>'[craving]'",
+ "\u7658>'[sore]'",
+ "\u765C>'[erythema]'",
+ "\u7661>'[silly]'",
+ "\u7662>'[itch]'",
+ "\u7667>'[scrofulous lumps or swellings]'",
+ "\u7668>'[quickly]'",
+ "\u7669>'[leprosy]'",
+ "\u766A>'[spasms]'",
+ "\u766C>'[ringworms]'",
+ "\u7670>'[carbuncle]'",
+ "\u7672>'[crazy]'",
+ "\u7676>'[legs]'",
+ "\u7678>'[last of ten celestial stems]'",
+ "\u767A>'[issue]'",
+ "\u767B>'[rise]'",
+ "\u767C>'[issue]'",
+ "\u767D>'[white]'",
+ "\u767E>'[one hundred]'",
+ "\u7680>'[kernel]'",
+ "\u7683>'[countenance]'",
+ "\u7684>'[possessive]'",
+ "\u7686>'[all]'",
+ "\u7687>'[royal]'",
+ "\u7688>'[follow]'",
+ "\u768B>'[the high land along a river]'",
+ "\u768E>'[white]'",
+ "\u7690>'[the high land along a river]'",
+ "\u7693>'[bright]'",
+ "\u7696>'[anhui province]'",
+ "\u7699>'[white]'",
+ "\u769A>'[brilliant white]'",
+ "\u76AE>'[skin]'",
+ "\u76B0>'[pimples]'",
+ "\u76B4>'[chapped]'",
+ "\u76B7>'[drum]'",
+ "\u76B8>'[crack]'",
+ "\u76B9>'[crack]'",
+ "\u76BA>'[wrinkles]'",
+ "\u76BF>'[shallow container]'",
+ "\u76C2>'[basin]'",
+ "\u76C3>'[glass]'",
+ "\u76C6>'[basin]'",
+ "\u76C8>'[fill]'",
+ "\u76CA>'[profit]'",
+ "\u76CD>'[what? why not? correspond]'",
+ "\u76D2>'[small box or case]'",
+ "\u76D6>'[cover]'",
+ "\u76D7>'[rob]'",
+ "\u76DB>'[abundant]'",
+ "\u76DC>'[rob]'",
+ "\u76DE>'[small cup or container]'",
+ "\u76DF>'[swear]'",
+ "\u76E1>'[exhaust]'",
+ "\u76E3>'[supervise]'",
+ "\u76E4>'[tray]'",
+ "\u76E5>'[wash]'",
+ "\u76E7>'[cottage]'",
+ "\u76EA>'[to toss about]'",
+ "\u76EE>'[eye]'",
+ "\u76F2>'[blind]'",
+ "\u76F4>'[straight]'",
+ "\u76F8>'[mutual]'",
+ "\u76FB>'[glare]'",
+ "\u76FE>'[shield]'",
+ "\u7701>'[province]'",
+ "\u7704>'[to look askance]'",
+ "\u7707>'[blind in one eye]'",
+ "\u7708>'[gloat]'",
+ "\u7709>'[eyebrows]'",
+ "\u770B>'[look]'",
+ "\u770C>'[county]'",
+ "\u771B>'[dim]'",
+ //"\u771E>'[real]'",
+ "\u771F>'[real]'",
+ "\u7720>'[close eyes]'",
+ //"\u7724>'[................................]'",
+ "\u7725>'[eye sockets]'",
+ "\u7726>'[corner of the eyes]'",
+ "\u7729>'[confuse]'",
+ "\u7737>'[take interest in]'",
+ "\u7738>'[pupil of eye]'",
+ "\u773A>'[look at]'",
+ "\u773C>'[eye]'",
+ "\u7740>'[make move]'",
+ "\u7747>'[look at]'",
+ "\u775A>'[corner of eye]'",
+ "\u775B>'[eyeball]'",
+ "\u7761>'[sleep]'",
+ "\u7763>'[supervise]'",
+ "\u7765>'[look askance at]'",
+ "\u7766>'[friendly]'",
+ "\u7768>'[look askance at]'",
+ "\u776B>'[eyelashes]'",
+ "\u7779>'[look at]'",
+ "\u777E>'[testicle]'",
+ "\u777F>'[shrewd]'",
+ "\u778B>'[glare with anger]'",
+ "\u778E>'[blind]'",
+ "\u7791>'[close eyes]'",
+ "\u779E>'[deceive]'",
+ "\u77A0>'[look at]'",
+ "\u77A5>'[take fleeting glance at]'",
+ "\u77AC>'[wink]'",
+ "\u77AD>'[bright]'",
+ "\u77B0>'[watch]'",
+ "\u77B3>'[pupil of eye]'",
+ "\u77B6>'[dim]'",
+ //"\u77B6>'[dim]'",
+ "\u77BB>'[look]'",
+ "\u77BC>'[eyelid]'",
+ "\u77BD>'[blind]'",
+ "\u77BF>'[surname]'",
+ "\u77C7>'[stupid]'",
+ "\u77CD>'[look about in firght or alarm]'",
+ "\u77D7>'[straight]'",
+ "\u77DA>'[watch carefully]'",
+ "\u77DB>'[spear]'",
+ "\u77DC>'[pity]'",
+ "\u77E2>'[arrow]'",
+ "\u77E3>'[particle of completed action]'",
+ "\u77E5>'[know]'",
+ "\u77E7>'[much more]'",
+ "\u77E9>'[carpenter''s square]'",
+ "\u77ED>'[short]'",
+ "\u77EE>'[short]'",
+ "\u77EF>'[correct]'",
+ "\u77F3>'[stone]'",
+ "\u77FC>'[stone bridge]'",
+ "\u7802>'[sand]'",
+ "\u780C>'[stone steps]'",
+ "\u7812>'[arsenic]'",
+ "\u7814>'[grind]'",
+ "\u7815>'[break]'",
+ "\u7820>'[rocky]'",
+ "\u7825>'[whetstone]'",
+ "\u7826>'[stockade]'",
+ "\u7827>'[anvil]'",
+ "\u7832>'[gun]'",
+ "\u7834>'[break]'",
+ "\u783A>'[whetstone]'",
+ "\u783F>'[mine]'",
+ "\u7845>'[silicon]'",
+ "\u785D>'[saltpeter]'",
+ "\u786B>'[sulfur]'",
+ "\u786C>'[hard]'",
+ "\u786F>'[inkstone]'",
+ //"\u7872>'[................................]'",
+ //"\u7874>'[................................]'",
+ "\u787C>'[borax]'",
+ "\u7881>'[chess]'",
+ "\u7886>'[arrow-tip]'",
+ "\u7887>'[anchor]'",
+ "\u788C>'[rough]'",
+ "\u788D>'[obstruct]'",
+ "\u788E>'[break]'",
+ "\u7891>'[stone tablet]'",
+ "\u7893>'[pestle]'",
+ //"\u7895>'[................................]'",
+ "\u7897>'[bowl]'",
+ "\u789A>'[suburb]'",
+ "\u78A3>'[stone tablet]'",
+ "\u78A7>'[jade]'",
+ "\u78A9>'[great]'",
+ "\u78AA>'[stone slab used for washing clot]'",
+ "\u78AF>'[agate]'",
+ //"\u78B5>'[................................]'",
+ "\u78BA>'[sure]'",
+ "\u78BC>'[number]'",
+ "\u78BE>'[roller]'",
+ "\u78C1>'[magnetic]'",
+ "\u78C5>'[pound]'",
+ //"\u78C6>'[................................]'",
+ "\u78CA>'[pile of rocks or stones]'",
+ "\u78CB>'[polish]'",
+ "\u78D0>'[large rock]'",
+ "\u78D1>'[stone mill]'",
+ "\u78D4>'[downward stroke slanting righ]'",
+ "\u78DA>'[tile]'",
+ "\u78E7>'[sand and gravel]'",
+ "\u78E8>'[grind]'",
+ "\u78EC>'[musical instrument]'",
+ "\u78EF>'[jetty]'",
+ "\u78F4>'[steps on ledge]'",
+ "\u78FD>'[barren land]'",
+ "\u7901>'[reef]'",
+ //"\u7907>'[................................]'",
+ "\u790E>'[foundation stone]'",
+ //"\u790E>'[foundation stone]'",
+ //"\u7912>'[................................]'",
+ "\u7919>'[obstruct]'",
+ "\u7926>'[mine]'",
+ "\u792A>'[whetstone]'",
+ "\u792B>'[gravel]'",
+ "\u792C>'[alum]'",
+ "\u793A>'[show]'",
+ "\u793C>'[social custom]'",
+ "\u793E>'[god of the soil and altars to him]'",
+ "\u7940>'[to sacrifice]'",
+ "\u7941>'[pray]'",
+ "\u7947>'[only]'",
+ "\u7948>'[pray]'",
+ "\u7949>'[happiness]'",
+ "\u7950>'[divine intervention]'",
+ "\u7953>'[exorcise]'",
+ "\u7955>'[mysterious]'",
+ "\u7956>'[ancestor]'",
+ "\u7957>'[respect]'",
+ "\u795A>'[throne]'",
+ "\u795D>'[pray for happiness or blessings]'",
+ "\u795E>'[spirit]'",
+ "\u795F>'[evil spirit]'",
+ "\u7960>'[ancestral temple]'",
+ "\u7962>'[one''s deceased father]'",
+ "\u7965>'[good luck]'",
+ "\u7968>'[slip of paper or bamboo]'",
+ "\u796D>'[sacrifice to]'",
+ "\u7977>'[pray]'",
+ "\u797A>'[good luck]'",
+ "\u797F>'[blessing]'",
+ "\u7980>'[report to]'",
+ "\u7981>'[restrict]'",
+ "\u7984>'[blessing]'",
+ "\u7985>'[meditation]'",
+ "\u798A>'[semi-annual ceremony of purifica]'",
+ "\u798D>'[misfortune]'",
+ "\u798E>'[lucky]'",
+ "\u798F>'[happiness]'",
+ "\u799D>'[[not found in dictionary]]'",
+ "\u79A6>'[defend]'",
+ "\u79A7>'[happiness]'",
+ "\u79AA>'[meditation]'",
+ "\u79AE>'[social custom]'",
+ "\u79B0>'[one''s deceased father]'",
+ "\u79B3>'[pray or sacrifice]'",
+ "\u79B9>'[legendary hsia dynasty founder]'",
+ "\u79BA>'[district]'",
+ "\u79BD>'[birds]'",
+ "\u79BE>'[grain still on stalk]'",
+ "\u79BF>'[bald]'",
+ "\u79C0>'[ear of grain]'",
+ "\u79C1>'[private]'",
+ "\u79C9>'[grasp]'",
+ "\u79CB>'[autumn]'",
+ "\u79D1>'[section]'",
+ "\u79D2>'[beard of grain or corn]'",
+ "\u79D5>'[empty grain or rice husk]'",
+ "\u79D8>'[secret]'",
+ "\u79DF>'[rent]'",
+ //"\u79E1>'[................................]'",
+ "\u79E3>'[fodder]'",
+ "\u79E4>'[balance]'",
+ "\u79E6>'[feudal state of qin]'",
+ "\u79E7>'[rice seedlings]'",
+ "\u79E9>'[order]'",
+ "\u79EC>'[black millet]'",
+ "\u79F0>'[call]'",
+ "\u79FB>'[change place]'",
+ "\u7A00>'[rare]'",
+ "\u7A08>'[stalk of grain]'",
+ "\u7A0B>'[journey]'",
+ "\u7A0D>'[little]'",
+ "\u7A0E>'[taxes]'",
+ "\u7A14>'[ripe grain]'",
+ "\u7A17>'[darnels]'",
+ //"\u7A18>'[................................]'",
+ "\u7A19>'[grain ready for grinding]'",
+ "\u7A1A>'[young]'",
+ "\u7A1C>'[corner]'",
+ "\u7A1F>'[report to]'",
+ "\u7A20>'[dense]'",
+ "\u7A2E>'[seed]'",
+ "\u7A31>'[call]'",
+ "\u7A32>'[rice growing in field]'",
+ "\u7A37>'[god of cereals]'",
+ "\u7A3B>'[rice growing in field]'",
+ "\u7A3C>'[sow grain]'",
+ "\u7A3D>'[examine]'",
+ "\u7A3E>'[draft]'",
+ "\u7A3F>'[draft]'",
+ "\u7A40>'[corn]'",
+ "\u7A42>'[ear of grain]'",
+ //"\u7A43>'[................................]'",
+ "\u7A46>'[majestic]'",
+ "\u7A49>'[young grain]'",
+ "\u7A4D>'[accumulate]'",
+ "\u7A4E>'[rice tassel]'",
+ //"\u7A4E>'[rice tassel]'",
+ "\u7A50>'[fall]'",
+ "\u7A57>'[ear of grain]'",
+ "\u7A61>'[farm]'",
+ "\u7A62>'[dirty]'",
+ "\u7A63>'[stalks of grain]'",
+ "\u7A69>'[stable]'",
+ "\u7A6B>'[harvest]'",
+ "\u7A70>'[stalks of grain]'",
+ "\u7A74>'[cave]'",
+ "\u7A76>'[examine]'",
+ "\u7A79>'[high and vast]'",
+ "\u7A7A>'[empty]'",
+ "\u7A7D>'[hole]'",
+ "\u7A7F>'[penetrate]'",
+ "\u7A81>'[suddenly]'",
+ "\u7A83>'[secretly]'",
+ "\u7A84>'[narrow]'",
+ "\u7A88>'[obscure]'",
+ "\u7A92>'[stop up]'",
+ "\u7A93>'[window]'",
+ "\u7A95>'[slender]'",
+ "\u7A96>'[pit]'",
+ "\u7A97>'[window]'",
+ "\u7A98>'[embrassassed]'",
+ "\u7A9F>'[hole]'",
+ "\u7AA9>'[nest]'",
+ "\u7AAA>'[hollow]'",
+ "\u7AAE>'[poor]'",
+ "\u7AAF>'[kiln]'",
+ "\u7AB0>'[kiln]'",
+ "\u7AB6>'[poor]'",
+ "\u7ABA>'[peep]'",
+ "\u7ABF>'[mine shaft]'",
+ "\u7AC3>'[furnace]'",
+ "\u7AC4>'[run away]'",
+ "\u7AC5>'[hole]'",
+ "\u7AC7>'[surname]'",
+ "\u7AC8>'[furnace]'",
+ "\u7ACA>'[secretly]'",
+ "\u7ACB>'[stand]'",
+ "\u7ACD>'[decaliter]'",
+ "\u7ACF>'[kiloliter]'",
+ "\u7AD2>'[strange]'",
+ "\u7AD3>'[milliliter]'",
+ "\u7AD5>'[deciliter]'",
+ "\u7AD9>'[stand up]'",
+ "\u7ADA>'[stand and wait for long time]'",
+ "\u7ADC>'[dragon]'",
+ "\u7ADD>'[combine]'",
+ "\u7ADF>'[finally]'",
+ "\u7AE0>'[composition]'",
+ "\u7AE1>'[hectoliter]'",
+ "\u7AE2>'[wait for]'",
+ "\u7AE3>'[terminate]'",
+ "\u7AE5>'[child]'",
+ "\u7AE6>'[revere]'",
+ "\u7AEA>'[perpendicular]'",
+ "\u7AED>'[put forth great effort]'",
+ "\u7AEF>'[end]'",
+ "\u7AF0>'[centiliter]'",
+ "\u7AF6>'[contend]'",
+ "\u7AF8>'[contend]'",
+ "\u7AF9>'[bamboo]'",
+ "\u7AFA>'[india]'",
+ "\u7AFF>'[bamboo pole]'",
+ //"\u7B02>'[................................]'",
+ "\u7B04>'[hairpin]'",
+ "\u7B06>'[bamboo fence]'",
+ "\u7B08>'[bamboo box used carry books]'",
+ "\u7B0A>'[ladle]'",
+ "\u7B0B>'[bamboo shoots]'",
+ "\u7B0F>'[tablet held by someone having au]'",
+ "\u7B11>'[smile]'",
+ //"\u7B18>'[................................]'",
+ "\u7B19>'[small gourd-shaped musical instrument]'",
+ "\u7B1B>'[bamboo flute]'",
+ "\u7B1E>'[bamboo rod used for beatings]'",
+ "\u7B20>'[bamboo hat]'",
+ "\u7B25>'[a hamper]'",
+ "\u7B26>'[i.d. tag]'",
+ "\u7B28>'[foolish]'",
+ "\u7B2C>'[sequence]'",
+ "\u7B33>'[a reed leaf whistle]'",
+ "\u7B35>'[a bamboo form]'",
+ //"\u7B36>'[................................]'",
+ "\u7B39>'[small bamboo]'",
+ "\u7B45>'[bamboo brush]'",
+ "\u7B46>'[writing brush]'",
+ "\u7B48>'[arrow end]'",
+ "\u7B49>'[rank]'",
+ "\u7B4B>'[muscles]'",
+ "\u7B4C>'[bamboo fish trap]'",
+ "\u7B4D>'[bamboo shoot]'",
+ "\u7B4F>'[raft]'",
+ "\u7B50>'[bamboo basket or chest]'",
+ "\u7B51>'[ancient lute]'",
+ "\u7B52>'[thick piece of bamboo]'",
+ "\u7B54>'[answer]'",
+ "\u7B56>'[scheme]'",
+ "\u7B5D>'[stringed musical instrument]'",
+ "\u7B65>'[round-shaped bamboo basket for]'",
+ "\u7B67>'[bamboo water pipe]'",
+ "\u7B6C>'[reed of a loom]'",
+ "\u7B6E>'[divination with stalks of plants]'",
+ "\u7B70>'[cable]'",
+ "\u7B71>'[dwarf bamboo]'",
+ "\u7B74>'[type of grass used in divination]'",
+ "\u7B75>'[bamboo mat]'",
+ "\u7B7A>'[bamboo basket or chest]'",
+ "\u7B86>'[fine-toothed comb]'",
+ "\u7B87>'[numerary adjunct]'",
+ "\u7B8B>'[note]'",
+ "\u7B8D>'[hoop]'",
+ "\u7B8F>'[stringed musical instrument]'",
+ "\u7B92>'[broom]'",
+ "\u7B94>'[reed screen]'",
+ "\u7B95>'[sieve]'",
+ "\u7B97>'[count]'",
+ "\u7B98>'[fine bamboo]'",
+ "\u7B99>'[quiver]'",
+ "\u7B9A>'[brief note]'",
+ "\u7B9C>'[ancient string music instrument]'",
+ "\u7B9D>'[tweezers]'",
+ //"\u7B9F>'[................................]'",
+ "\u7BA1>'[pipe]'",
+ "\u7BAA>'[small bamboo basket for holding]'",
+ "\u7BAD>'[arrow]'",
+ "\u7BB1>'[case]'",
+ "\u7BB4>'[needle]'",
+ "\u7BB8>'[chopsticks]'",
+ "\u7BC0>'[knot]'",
+ "\u7BC1>'[bamboo grove]'",
+ "\u7BC4>'[pattern]'",
+ "\u7BC6>'[seal script]'",
+ "\u7BC7>'[chapter]'",
+ "\u7BC9>'[build]'",
+ "\u7BCB>'[ratton box]'",
+ "\u7BCC>'[ancient music instrument]'",
+ "\u7BCF>'[inlay]'",
+ "\u7BDD>'[bamboo basket]'",
+ "\u7BE0>'[dwarf bamboo]'",
+ "\u7BE4>'[deep]'",
+ "\u7BE5>'[bulgle]'",
+ "\u7BE6>'[fine-toothed comb]'",
+ "\u7BE9>'[sieve]'",
+ "\u7BED>'[cage]'",
+ "\u7BF3>'[wicker]'",
+ //"\u7BF6>'[................................]'",
+ "\u7BF7>'[awning]'",
+ "\u7C00>'[bed mat]'",
+ "\u7C07>'[swarm]'",
+ "\u7C0D>'[bamboo basket]'",
+ "\u7C11>'[a coir raincoat]'",
+ "\u7C12>'[usurp]'",
+ //"\u7C13>'[................................]'",
+ "\u7C14>'[a coir raincoat]'",
+ //"\u7C17>'[................................]'",
+ "\u7C1F>'[bamboo mat]'",
+ "\u7C21>'[simple]'",
+ "\u7C23>'[bamboo basket for carrying earth]'",
+ "\u7C27>'[reed of woodwind instrument]'",
+ "\u7C2A>'[hairpin]'",
+ "\u7C2B>'[musical instrument like pan-pipes]'",
+ "\u7C37>'[eaves of house]'",
+ "\u7C38>'[winnower]'",
+ "\u7C3D>'[sign]'",
+ "\u7C3E>'[a blind]'",
+ "\u7C3F>'[register]'",
+ "\u7C40>'[recite]'",
+ "\u7C43>'[basket]'",
+ "\u7C4C>'[chip]'",
+ "\u7C4D>'[record]'",
+ "\u7C4F>'[flag]'",
+ "\u7C50>'[climbing plants]'",
+ "\u7C54>'[bamboo basket]'",
+ "\u7C56>'[tally]'",
+ "\u7C58>'[climbing plants]'",
+ "\u7C5F>'[bamboo flute]'",
+ "\u7C60>'[cage]'",
+ "\u7C64>'[tally]'",
+ "\u7C65>'[key]'",
+ "\u7C6C>'[bamboo or wooden fence]'",
+ "\u7C73>'[hulled or husked uncooked rice]'",
+ "\u7C75>'[dm]'",
+ "\u7C7E>'[unhulled rice]'",
+ "\u7C81>'[km]'",
+ "\u7C82>'[surname]'",
+ "\u7C83>'[empty husks of grain]'",
+ "\u7C89>'[powder]'",
+ "\u7C8B>'[pure]'",
+ "\u7C8D>'[mm]'",
+ //"\u7C90>'[................................]'",
+ "\u7C92>'[grain]'",
+ "\u7C95>'[lees]'",
+ "\u7C97>'[rough]'",
+ "\u7C98>'[viscous]'",
+ "\u7C9B>'[pay respects]'",
+ "\u7C9F>'[unhusked millet]'",
+ //"\u7CA1>'[................................]'",
+ "\u7CA2>'[grain offered in ritual sacrific]'",
+ "\u7CA4>'[Guangdong and Guangxi provinces]'",
+ "\u7CA5>'[rice gruel]'",
+ "\u7CA7>'[toilet]'",
+ "\u7CA8>'[hm]'",
+ //"\u7CAB>'[................................]'",
+ //"\u7CAD>'[................................]'",
+ "\u7CAE>'[food]'",
+ "\u7CB1>'[better varieties of millet]'",
+ "\u7CB2>'[polish]'",
+ "\u7CB3>'[non-glutinous rice]'",
+ "\u7CB9>'[pure]'",
+ "\u7CBD>'[dumpling made of glutinous rice]'",
+ "\u7CBE>'[essence]'",
+ //"\u7CC0>'[................................]'",
+ //"\u7CC2>'[................................]'",
+ "\u7CC5>'[blend]'",
+ "\u7CCA>'[paste]'",
+ "\u7CCE>'[mm]'",
+ "\u7CD2>'[food for a journey]'",
+ "\u7CD6>'[sugar]'",
+ //"\u7CD8>'[................................]'",
+ "\u7CDC>'[rice gruel]'",
+ "\u7CDE>'[manure]'",
+ "\u7CDF>'[sediment]'",
+ "\u7CE0>'[chaff]'",
+ "\u7CE2>'[rice snacks]'",
+ "\u7CE7>'[food]'",
+ "\u7CEF>'[glutinous rice]'",
+ "\u7CF2>'[unpolished rice]'",
+ "\u7CF4>'[purchase grains]'",
+ "\u7CF6>'[sell grains]'",
+ "\u7CF8>'[silk]'",
+ "\u7CFA>'[to collaborate]'",
+ "\u7CFB>'[system]'",
+ "\u7CFE>'[investigate]'",
+ "\u7D00>'[record]'",
+ "\u7D02>'[name of an emperor]'",
+ "\u7D04>'[treaty]'",
+ "\u7D05>'[red]'",
+ "\u7D06>'[bend]'",
+ "\u7D0A>'[confused]'",
+ "\u7D0B>'[line]'",
+ "\u7D0D>'[admit]'",
+ "\u7D10>'[knot]'",
+ "\u7D14>'[pure]'",
+ "\u7D15>'[spoiled silk]'",
+ "\u7D17>'[gauze]'",
+ "\u7D18>'[string]'",
+ "\u7D19>'[paper]'",
+ "\u7D1A>'[level]'",
+ "\u7D1B>'[in disorder]'",
+ "\u7D1C>'[confused]'",
+ "\u7D20>'[white (silk)]'",
+ "\u7D21>'[spin]'",
+ "\u7D22>'[large rope]'",
+ "\u7D2B>'[purple]'",
+ "\u7D2C>'[kind of thin silk]'",
+ "\u7D2E>'[tie]'",
+ "\u7D2F>'[tired]'",
+ "\u7D30>'[fine]'",
+ "\u7D32>'[bridle]'",
+ "\u7D33>'[girdle]'",
+ "\u7D35>'[ramie]'",
+ "\u7D39>'[continue]'",
+ "\u7D3A>'[dark blue color]'",
+ "\u7D3F>'[cheat]'",
+ "\u7D42>'[end]'",
+ "\u7D43>'[string on musical instrument]'",
+ "\u7D44>'[class]'",
+ "\u7D45>'[unlined garment]'",
+ "\u7D46>'[loop]'",
+ //"\u7D4B>'[................................]'",
+ "\u7D4C>'[classic works]'",
+ "\u7D4E>'[baste]'",
+ "\u7D4F>'[rope]'",
+ "\u7D50>'[knot]'",
+ "\u7D56>'[fine silks]'",
+ "\u7D5B>'[silk braid]'",
+ "\u7D5E>'[twist]'",
+ "\u7D61>'[enmesh]'",
+ "\u7D62>'[variegated]'",
+ "\u7D63>'[to baste for sewing]'",
+ "\u7D66>'[give]'",
+ "\u7D68>'[silk]'",
+ "\u7D6E>'[waste cotton]'",
+ "\u7D71>'[govern]'",
+ "\u7D72>'[silk]'",
+ "\u7D73>'[deep red]'",
+ "\u7D75>'[draw]'",
+ "\u7D76>'[cut]'",
+ "\u7D79>'[kind of thick stiff silk]'",
+ //"\u7D7D>'[................................]'",
+ "\u7D89>'[embroider]'",
+ "\u7D8F>'[soothe]'",
+ "\u7D93>'[classic works]'",
+ "\u7D99>'[continue]'",
+ "\u7D9A>'[continue]'",
+ //"\u7D9B>'[................................]'",
+ "\u7D9C>'[arrange threads for weaving]'",
+ //"\u7D9F>'[................................]'",
+ "\u7DA2>'[silk cloth]'",
+ "\u7DA3>'[affectionate]'",
+ "\u7DAB>'[line]'",
+ "\u7DAC>'[silk ribbon attached as a seal]'",
+ "\u7DAD>'[maintain]'",
+ "\u7DAE>'[embroidered banner]'",
+ "\u7DAF>'[braid]'",
+ "\u7DB0>'[to string together]'",
+ "\u7DB1>'[heavy rope]'",
+ "\u7DB2>'[net]'",
+ "\u7DB4>'[patch together]'",
+ "\u7DB5>'[varicolored silk]'",
+ "\u7DB8>'[green silk thread or tassel]'",
+ "\u7DBA>'[fine thin silk]'",
+ "\u7DBB>'[ripped seam]'",
+ "\u7DBD>'[graceful]'",
+ "\u7DBE>'[thin silk]'",
+ "\u7DBF>'[cotton wad]'",
+ "\u7DC7>'[black silk]'",
+ "\u7DCA>'[tense]'",
+ "\u7DCB>'[scarlet]'",
+ "\u7DCF>'[collect]'",
+ "\u7DD1>'[green]'",
+ "\u7DD2>'[end of thread]'",
+ //"\u7DD5>'[................................]'",
+ "\u7DD8>'[seal]'",
+ "\u7DDA>'[thread]'",
+ "\u7DDC>'[cotton wad]'",
+ "\u7DDD>'[to sew in close stitches]'",
+ "\u7DDE>'[satin]'",
+ "\u7DE0>'[tie]'",
+ "\u7DE1>'[fishing-line]'",
+ "\u7DE4>'[cord]'",
+ "\u7DE8>'[knit]'",
+ "\u7DE9>'[slow]'",
+ "\u7DEC>'[distant]'",
+ "\u7DEF>'[woof]'",
+ "\u7DF2>'[indistinct]'",
+ "\u7DF4>'[practice]'",
+ "\u7DFB>'[delicate]'",
+ "\u7E01>'[hem]'",
+ "\u7E04>'[rope]'",
+ //"\u7E04>'[rope]'",
+ "\u7E09>'[red silk]'",
+ "\u7E0A>'[hang]'",
+ "\u7E0B>'[climd down rope]'",
+ //"\u7E11>'[fine silk]'",
+ "\u7E1B>'[to tie]'",
+ "\u7E1E>'[white raw silk]'",
+ "\u7E1F>'[decorative]'",
+ "\u7E21>'[matter]'",
+ "\u7E22>'[bind]'",
+ "\u7E23>'[county]'",
+ "\u7E26>'[indulge in]'",
+ "\u7E2B>'[sew]'",
+ "\u7E2E>'[contract]'",
+ "\u7E31>'[indulge in]'",
+ "\u7E32>'[chain or rope used bind criminal]'",
+ "\u7E35>'[plain silk]'",
+ "\u7E37>'[thread]'",
+ "\u7E39>'[light blue silk]'",
+ //"\u7E3A>'[................................]'",
+ "\u7E3B>'[halter for ox]'",
+ "\u7E3D>'[collect]'",
+ "\u7E3E>'[spin]'",
+ "\u7E41>'[complicated]'",
+ "\u7E43>'[bind]'",
+ "\u7E46>'[wind around]'",
+ "\u7E4A>'[fine]'",
+ "\u7E4B>'[attach]'",
+ "\u7E4D>'[embroider]'",
+ "\u7E54>'[weave]'",
+ "\u7E55>'[repair]'",
+ "\u7E56>'[umbrella]'",
+ "\u7E59>'[interpret]'",
+ "\u7E5A>'[wind round]'",
+ //"\u7E5D>'[................................]'",
+ "\u7E5E>'[entwine]'",
+ "\u7E66>'[string of copper coins]'",
+ //"\u7E67>'[................................]'",
+ "\u7E69>'[rope]'",
+ "\u7E6A>'[draw]'",
+ "\u7E6D>'[cocoon]'",
+ "\u7E70>'[to reel silk from cocoons]'",
+ "\u7E79>'[unravel or unreel silk]'",
+ "\u7E7B>'[fine silk guaze]'",
+ "\u7E7C>'[continue]'",
+ "\u7E7D>'[flourishing]'",
+ //"\u7E7F>'[................................]'",
+ "\u7E82>'[edit]'",
+ //"\u7E83>'[................................]'",
+ "\u7E88>'[patterned silk]'",
+ //"\u7E89>'[................................]'",
+ "\u7E8C>'[continue]'",
+ "\u7E8E>'[fine]'",
+ "\u7E8F>'[wrap]'",
+ //"\u7E90>'[................................]'",
+ "\u7E92>'[wrap]'",
+ "\u7E93>'[chin strap]'",
+ "\u7E94>'[talent]'",
+ "\u7E96>'[fine]'",
+ "\u7E9B>'[a banner]'",
+ "\u7E9C>'[hawser]'",
+ "\u7F36>'[earthen crock or jar]'",
+ "\u7F38>'[earthen jug]'",
+ "\u7F3A>'[be short of]'",
+ "\u7F45>'[crack]'",
+ "\u7F4C>'[long necked jar or bottle]'",
+ "\u7F4D>'[large earthenware wine jar]'",
+ "\u7F4E>'[an earthenware jar]'",
+ "\u7F50>'[jar]'",
+ "\u7F51>'[net]'",
+ "\u7F54>'[net]'",
+ "\u7F55>'[rare]'",
+ "\u7F58>'[screen used in ancient times]'",
+ "\u7F5F>'[net]'",
+ "\u7F60>'[animal trap]'",
+ //"\u7F67>'[................................]'",
+ "\u7F68>'[medical compress]'",
+ "\u7F69>'[basket for catching fish]'",
+ "\u7F6A>'[crime]'",
+ "\u7F6B>'[hinder]'",
+ "\u7F6E>'[place]'",
+ "\u7F70>'[penalty]'",
+ "\u7F72>'[public office]'",
+ "\u7F75>'[accuse]'",
+ "\u7F77>'[cease]'",
+ "\u7F78>'[penalty]'",
+ "\u7F79>'[sorrow]'",
+ //"\u7F82>'[................................]'",
+ "\u7F83>'[cover-cloth]'",
+ "\u7F85>'[net for catching birds]'",
+ "\u7F86>'[brown bear]'",
+ "\u7F87>'[inn]'",
+ "\u7F88>'[halter]'",
+ "\u7F8A>'[sheep]'",
+ "\u7F8C>'[qiang nationality]'",
+ "\u7F8E>'[beautiful]'",
+ "\u7F94>'[lamb]'",
+ "\u7F9A>'[species of antelope]'",
+ "\u7F9D>'[ram]'",
+ "\u7F9E>'[disgrace]'",
+ "\u7FA3>'[group]'",
+ "\u7FA4>'[group]'",
+ "\u7FA8>'[envy]'",
+ "\u7FA9>'[right conduct]'",
+ "\u7FAE>'[soup]'",
+ "\u7FAF>'[wether]'",
+ "\u7FB2>'[ancient emperor]'",
+ "\u7FB6>'[rank odor]'",
+ "\u7FB8>'[weak]'",
+ "\u7FB9>'[soup]'",
+ "\u7FBD>'[feather]'",
+ "\u7FC1>'[old man]'",
+ "\u7FC5>'[wings]'",
+ "\u7FC6>'[color green]'",
+ "\u7FCA>'[flying]'",
+ "\u7FCC>'[bright]'",
+ "\u7FD2>'[practice]'",
+ "\u7FD4>'[soar]'",
+ "\u7FD5>'[agree]'",
+ "\u7FE0>'[color green]'",
+ "\u7FE1>'[kingfisher]'",
+ "\u7FE6>'[scissors]'",
+ "\u7FE9>'[fly]'",
+ "\u7FEB>'[careless]'",
+ "\u7FF0>'[writing brush]'",
+ "\u7FF3>'[shade]'",
+ "\u7FF9>'[turn up]'",
+ "\u7FFB>'[flip over]'",
+ "\u7FFC>'[wings]'",
+ "\u8000>'[shine]'",
+ "\u8001>'[old]'",
+ "\u8003>'[examine]'",
+ "\u8004>'[elderly person]'",
+ "\u8005>'[that which]'",
+ "\u8006>'[man of sixty]'",
+ "\u800B>'[aged]'",
+ "\u800C>'[and]'",
+ "\u8010>'[endure]'",
+ "\u8012>'[handle of plow]'",
+ "\u8015>'[plow]'",
+ "\u8017>'[consume]'",
+ "\u8018>'[weed]'",
+ "\u8019>'[rake]'",
+ "\u801C>'[spade-shaped tool]'",
+ "\u8021>'[hoe]'",
+ "\u8028>'[hoe]'",
+ "\u8033>'[ear]'",
+ "\u8036>'[used in transliteration]'",
+ "\u803B>'[shame]'",
+ "\u803D>'[indulge in]'",
+ "\u803F>'[bright]'",
+ "\u8046>'[listen]'",
+ "\u804A>'[somewhat]'",
+ "\u8052>'[clamor]'",
+ "\u8056>'[holy]'",
+ "\u8058>'[engage]'",
+ "\u805A>'[assemble]'",
+ "\u805E>'[hear]'",
+ "\u805F>'[son-in-law]'",
+ "\u8061>'[intelligent]'",
+ //"\u8062>'[................................]'",
+ "\u8068>'[connect]'",
+ "\u806F>'[connect]'",
+ "\u8070>'[intelligent]'",
+ "\u8072>'[sound]'",
+ "\u8073>'[urge on]'",
+ "\u8074>'[hear]'",
+ "\u8076>'[whisper]'",
+ "\u8077>'[duty]'",
+ "\u8079>'[earwax]'",
+ "\u807D>'[hear]'",
+ "\u807E>'[deaf]'",
+ "\u807F>'[writing brush]'",
+ "\u8084>'[learn]'",
+ "\u8085>'[pay respects]'",
+ "\u8086>'[indulge]'",
+ "\u8087>'[begin]'",
+ "\u8089>'[flesh]'",
+ "\u808B>'[ribs]'",
+ "\u808C>'[muscle tissue]'",
+ "\u8093>'[region between heart and diaphragm]'",
+ "\u8096>'[look like]'",
+ "\u8098>'[elbow]'",
+ "\u809A>'[belly]'",
+ "\u809B>'[anus]'",
+ "\u809D>'[liver]'",
+ "\u80A1>'[thighs]'",
+ "\u80A2>'[human limbs]'",
+ "\u80A5>'[fat]'",
+ "\u80A9>'[shoulders]'",
+ "\u80AA>'[animal fat]'",
+ "\u80AC>'[wart]'",
+ "\u80AD>'[fat]'",
+ "\u80AF>'[willing]'",
+ "\u80B1>'[forearm]'",
+ "\u80B2>'[produce]'",
+ "\u80B4>'[cooked or prepared meat]'",
+ "\u80BA>'[lungs]'",
+ "\u80C3>'[stomach]'",
+ "\u80C4>'[helmet]'",
+ "\u80C6>'[gall bladder]'",
+ "\u80CC>'[back]'",
+ "\u80CE>'[unborn child]'",
+ "\u80D6>'[fat]'",
+ "\u80D9>'[food offered in sacrificial serv]'",
+ "\u80DA>'[embryo]'",
+ "\u80DB>'[the shoulder]'",
+ "\u80DD>'[callous]'",
+ "\u80DE>'[womb]'",
+ "\u80E1>'[recklessly]'",
+ "\u80E4>'[heir]'",
+ "\u80E5>'[all]'",
+ "\u80EF>'[pelvis]'",
+ "\u80F1>'[bladder]'",
+ "\u80F4>'[the large intestine]'",
+ "\u80F8>'[breast]'",
+ "\u80FC>'[callus]'",
+ "\u80FD>'[be able]'",
+ "\u8102>'[fat]'",
+ "\u8105>'[ribs]'",
+ "\u8106>'[crisp]'",
+ "\u8107>'[ribs]'",
+ "\u8108>'[blood vessels]'",
+ "\u8109>'[blood vessels]'",
+ "\u810A>'[spine]'",
+ "\u811A>'[leg]'",
+ "\u811B>'[shinbone]'",
+ "\u8123>'[lips]'",
+ "\u8129>'[dried meat (used as teachers payment in ancient times)]'",
+ "\u812F>'[dried meat]'",
+ "\u8131>'[take off]'",
+ "\u8133>'[brain]'",
+ "\u8139>'[swell]'",
+ "\u813E>'[spleen]'",
+ "\u8146>'[prosperous]'",
+ "\u814B>'[armpit]'",
+ "\u814E>'[kidneys]'",
+ "\u8150>'[rot]'",
+ "\u8151>'[bowels]'",
+ "\u8153>'[calf]'",
+ "\u8154>'[chest cavity]'",
+ "\u8155>'[wrist]'",
+ "\u815F>'[vagina]'",
+ "\u8165>'[raw meat]'",
+ "\u8166>'[brain]'",
+ "\u816B>'[swell]'",
+ "\u816E>'[lower part of face]'",
+ "\u8170>'[waist]'",
+ "\u8171>'[tendons]'",
+ "\u8174>'[fat]'",
+ "\u8178>'[intestines]'",
+ "\u8179>'[stomach]'",
+ "\u817A>'[gland]'",
+ "\u817F>'[legs]'",
+ "\u8180>'[upper arm]'",
+ "\u8182>'[backbone]'",
+ "\u8183>'[fat]'",
+ "\u8188>'[diaphragm]'",
+ "\u818A>'[shoulders]'",
+ "\u818F>'[grease]'",
+ "\u8193>'[intestines]'",
+ "\u8195>'[hollow]'",
+ "\u819A>'[skin]'",
+ "\u819C>'[membrane]'",
+ "\u819D>'[knee]'",
+ "\u81A0>'[glue]'",
+ "\u81A3>'[vagina]'",
+ //"\u81A4>'[................................]'",
+ "\u81A8>'[swell]'",
+ "\u81A9>'[greasy]'",
+ "\u81B0>'[cook meat for sacrifice or offer]'",
+ "\u81B3>'[meals]'",
+ "\u81B5>'[pancreas]'",
+ //"\u81B8>'[................................]'",
+ "\u81BA>'[breast]'",
+ "\u81BD>'[gall bladder]'",
+ "\u81BE>'[minced meat or fish]'",
+ "\u81BF>'[pus]'",
+ "\u81C0>'[buttocks]'",
+ "\u81C2>'[arm]'",
+ "\u81C6>'[chest]'",
+ "\u81C8>'[year end sacrifice]'",
+ "\u81C9>'[face]'",
+ "\u81CD>'[abdominal area of crab]'",
+ "\u81D1>'[soft]'",
+ "\u81D3>'[internal organs]'",
+ "\u81D8>'[year end sacrifice]'",
+ "\u81D9>'[rouge]'",
+ "\u81DA>'[arrange in order]'",
+ "\u81DF>'[internal organs]'",
+ "\u81E0>'[small lump of meat]'",
+ "\u81E3>'[minister]'",
+ "\u81E5>'[lie down]'",
+ "\u81E7>'[good]'",
+ "\u81E8>'[draw near]'",
+ "\u81EA>'[self]'",
+ "\u81ED>'[smell]'",
+ "\u81F3>'[reach]'",
+ "\u81F4>'[send]'",
+ "\u81FA>'[tower]'",
+ "\u81FB>'[reach]'",
+ "\u81FC>'[mortar]'",
+ "\u81FE>'[moment]'",
+ "\u8201>'[carry on one''s shoulder]'",
+ "\u8202>'[grind in mortar]'",
+ "\u8205>'[mother''s brother]'",
+ "\u8207>'[and]'",
+ "\u8208>'[thrive]'",
+ "\u8209>'[raise]'",
+ "\u820A>'[old]'",
+ "\u820C>'[tongue]'",
+ "\u820D>'[house]'",
+ "\u820E>'[house]'",
+ "\u8210>'[lick with tongue]'",
+ "\u8212>'[open up]'",
+ "\u8216>'[store]'",
+ "\u8217>'[store]'",
+ "\u8218>'[a mansion]'",
+ "\u821B>'[oppose]'",
+ "\u821C>'[legendary ruler]'",
+ "\u821E>'[dance]'",
+ "\u821F>'[boat]'",
+ "\u8229>'[boat]'",
+ "\u822A>'[sail]'",
+ "\u822B>'[fancy boat]'",
+ "\u822C>'[sort]'",
+ "\u822E>'[bow or prow of boat]'",
+ "\u8233>'[stern of ship]'",
+ "\u8235>'[rudder]'",
+ "\u8236>'[large]'",
+ "\u8237>'[sides of boat]'",
+ "\u8238>'[large boat]'",
+ "\u8239>'[ship]'",
+ "\u8240>'[[not found in dictionary]]'",
+ "\u8247>'[small boat]'",
+ "\u8258>'[counter for ships]'",
+ "\u8259>'[hold of ship]'",
+ "\u825A>'[ship]'",
+ //"\u825D>'[................................]'",
+ "\u825F>'[ancient warship]'",
+ "\u8262>'[a mast]'",
+ "\u8264>'[to moor a boat to the bank]'",
+ "\u8266>'[warship]'",
+ "\u8268>'[long and narrow war-boat]'",
+ "\u826A>'[oar]'",
+ "\u826B>'[bow or prow of boat]'",
+ "\u826E>'[seventh of eight diagrams]'",
+ "\u826F>'[good]'",
+ "\u8271>'[difficult]'",
+ "\u8272>'[color]'",
+ "\u8276>'[beautiful]'",
+ "\u8277>'[beautiful]'",
+ "\u8278>'[grass]'",
+ "\u827E>'[artemisia]'",
+ "\u828B>'[taro]'",
+ "\u828D>'[peony]'",
+ "\u8292>'[miscanthus sinensis]'",
+ "\u8299>'[hibiscus]'",
+ "\u829D>'[purplish mushroom thought promot]'",
+ "\u829F>'[mow]'",
+ "\u82A5>'[mustard plant]'",
+ "\u82A6>'[rushes]'",
+ "\u82AB>'[daphne genkwa]'",
+ "\u82AC>'[fragrance]'",
+ "\u82AD>'[plantain or banana palm]'",
+ "\u82AF>'[pith from rush (juncus effusus)]'",
+ "\u82B1>'[flower]'",
+ "\u82B3>'[fragrant]'",
+ "\u82B8>'[rue]'",
+ "\u82B9>'[celery]'",
+ "\u82BB>'[mow]'",
+ "\u82BD>'[bud]'",
+ "\u82C5>'[cut off]'",
+ "\u82D1>'[pasture]'",
+ "\u82D2>'[lush]'",
+ "\u82D3>'[fungus]'",
+ "\u82D4>'[moss]'",
+ "\u82D7>'[sprouts]'",
+ "\u82D9>'[pigsty]'",
+ "\u82DB>'[small]'",
+ "\u82DC>'[clover]'",
+ "\u82DE>'[variety of rush]'",
+ "\u82DF>'[careless]'",
+ "\u82E1>'[barley]'",
+ "\u82E3>'[kind of lettuce]'",
+ "\u82E5>'[if]'",
+ "\u82E6>'[bitter]'",
+ "\u82E7>'[china grass]'",
+ "\u82EB>'[rush or straw matting]'",
+ "\u82F1>'[petal]'",
+ //"\u82F3>'[................................]'",
+ "\u82F4>'[sackcloth]'",
+ "\u82F9>'[artemisia]'",
+ "\u82FA>'[berries]'",
+ "\u82FB>'[kind of herb]'",
+ "\u8302>'[thick]'",
+ "\u8303>'[surname]'",
+ "\u8304>'[eggplant]'",
+ "\u8305>'[reeds]'",
+ "\u8306>'[species of grass]'",
+ "\u8309>'[white jasmine]'",
+ "\u830E>'[stem]'",
+ "\u8316>'[allium victorialis]'",
+ "\u8317>'[tea]'",
+ //"\u8317>'[tea]'",
+ "\u831C>'[madder]'",
+ //"\u8323>'[................................]'",
+ "\u8328>'[caltrop]'",
+ "\u832B>'[vast]'",
+ "\u832F>'[china root]'",
+ "\u8331>'[dogwood]'",
+ "\u8332>'[now]'",
+ "\u8334>'[fennel]'",
+ "\u8335>'[cushion]'",
+ "\u8336>'[tea]'",
+ "\u8338>'[soft]'",
+ "\u8339>'[roots]'",
+ "\u8340>'[surname]'",
+ "\u8345>'[answer: small bean]'",
+ "\u8349>'[grass]'",
+ "\u834A>'[thorns]'",
+ "\u834F>'[beans]'",
+ "\u8350>'[repeat]'",
+ "\u8352>'[wasteland]'",
+ "\u8358>'[village]'",
+ "\u8373>'[beans]'",
+ //"\u8375>'[................................]'",
+ "\u8377>'[lotus]'",
+ "\u837B>'[reed]'",
+ "\u837C>'[bitter vegetable]'",
+ "\u8385>'[attend]'",
+ //"\u8387>'[................................]'",
+ "\u8389>'[white jasmine]'",
+ "\u838A>'[village]'",
+ "\u838E>'[kind of sedge grass]'",
+ "\u8393>'[moss]'",
+ "\u8396>'[stem]'",
+ "\u839A>'[bamboo mat]'",
+ "\u839E>'[smiling]'",
+ //"\u839F>'[................................]'",
+ "\u83A0>'[weeds]'",
+ "\u83A2>'[pods of leguminous plants]'",
+ "\u83A8>'[herb]'",
+ "\u83AA>'[artemisia]'",
+ "\u83AB>'[do not]'",
+ "\u83B1>'[goosefoot]'",
+ "\u83B5>'[dodder]'",
+ "\u83BD>'[thicket]'",
+ "\u83C1>'[flower of leek family]'",
+ "\u83C5>'[coarse grass]'",
+ "\u83CA>'[chrysanthemum]'",
+ "\u83CC>'[mushroom]'",
+ "\u83CE>'[beautiful jade]'",
+ "\u83D3>'[fruits]'",
+ "\u83D6>'[iris]'",
+ "\u83D8>'[celery]'",
+ "\u83DC>'[vegetables]'",
+ "\u83DF>'[dodder]'",
+ "\u83E0>'[spinach and similar greens]'",
+ "\u83E9>'[herb]'",
+ "\u83EB>'[celery]'",
+ "\u83EF>'[flowery]'",
+ "\u83F0>'[wild rice]'",
+ "\u83F1>'[water-chestnut]'",
+ "\u83F2>'[fragrant]'",
+ "\u83F4>'[small buddhist monastery]'",
+ //"\u83F7>'[................................]'",
+ "\u83FB>'[artemisia]'",
+ "\u83FD>'[beans and peas]'",
+ "\u8403>'[dense]'",
+ "\u8404>'[grapes]'",
+ "\u8407>'[averrhora carambola]'",
+ "\u840B>'[luxuriant foliage]'",
+ "\u840C>'[bud]'",
+ "\u840D>'[duckweed]'",
+ "\u840E>'[wither]'",
+ //"\u8413>'[................................]'",
+ "\u8420>'[bud]'",
+ //"\u8422>'[................................]'",
+ "\u8429>'[scandent hop]'",
+ //"\u842A>'[................................]'",
+ "\u842C>'[ten thousand]'",
+ "\u8431>'[day-lily]'",
+ "\u8435>'[lettuce]'",
+ "\u8438>'[dogwood]'",
+ "\u843C>'[calyx of flower]'",
+ "\u843D>'[fall]'",
+ "\u8446>'[reserve]'",
+ "\u8449>'[leaf]'",
+ //"\u844E>'[................................]'",
+ "\u8457>'[manifest]'",
+ "\u845B>'[edible bean]'",
+ "\u8461>'[grapes]'",
+ "\u8462>'[cover]'",
+ "\u8463>'[direct]'",
+ "\u8466>'[reed]'",
+ "\u8469>'[flowers]'",
+ "\u846B>'[bottle-gourd]'",
+ "\u846C>'[bury]'",
+ "\u846D>'[bulrush]'",
+ //"\u846D>'[bulrush]'",
+ "\u846F>'[leaf of angelica plant]'",
+ "\u8471>'[scallions]'",
+ "\u8475>'[sunflower]'",
+ "\u8477>'[meat diet]'",
+ "\u8479>'[kind of chrysanthemum]'",
+ "\u847A>'[thatch]'",
+ "\u8482>'[peduncle or stem of plants]'",
+ //"\u8484>'[................................]'",
+ "\u848B>'[surname]'",
+ "\u8490>'[collect]'",
+ "\u8494>'[transplant]'",
+ "\u8499>'[cover]'",
+ "\u849C>'[garlic]'",
+ "\u849F>'[betel pepper]'",
+ "\u84A1>'[burdock]'",
+ "\u84AD>'[to cutgrass]'",
+ "\u84B2>'[type of rush]'",
+ "\u84B8>'[steam]'",
+ "\u84B9>'[reed]'",
+ "\u84BB>'[rushes]'",
+ "\u84BC>'[blue]'",
+ "\u84BF>'[mugwort]'",
+ "\u84C1>'[abundant]'",
+ "\u84C4>'[store]'",
+ "\u84C6>'[straw mat]'",
+ "\u84C9>'[hibiscus]'",
+ "\u84CA>'[luxuriant vegetation]'",
+ "\u84CB>'[cover]'",
+ "\u84CD>'[milfoil]'",
+ "\u84D0>'[straw bed mat]'",
+ "\u84D1>'[rain coat made of straw]'",
+ "\u84D6>'[castor-oil plant]'",
+ //"\u84D9>'[................................]'",
+ "\u84DA>'[oxalic (used in compounds)]'",
+ "\u84EC>'[type of raspberry]'",
+ "\u84EE>'[lotus]'",
+ "\u84F4>'[edible water plant]'",
+ "\u84FC>'[smartweed]'",
+ "\u84FF>'[clover]'",
+ "\u8500>'[screen]'",
+ "\u8506>'[water-chestnut]'",
+ "\u8511>'[disdain]'",
+ "\u8513>'[creeping plants]'",
+ "\u8514>'[radish]'",
+ "\u8515>'[peduncle or stem of plants]'",
+ "\u8517>'[sugar cane]'",
+ "\u8518>'[ginsen]'",
+ "\u851A>'[luxuriant]'",
+ "\u851F>'[frame on which silkworms spin]'",
+ "\u8521>'[surname]'",
+ "\u8526>'[parasitic plants]'",
+ "\u852C>'[vegetables]'",
+ "\u852D>'[shade]'",
+ "\u8535>'[hide]'",
+ "\u853D>'[cover]'",
+ //"\u8540>'[................................]'",
+ "\u8541>'[nettle]'",
+ "\u8543>'[foreign things]'",
+ "\u8548>'[mushrooms]'",
+ "\u8549>'[banana]'",
+ "\u854A>'[unopened flowers]'",
+ "\u854B>'[unopened flowers]'",
+ "\u854E>'[buckwheat]'",
+ "\u8555>'[caryopteris divaricata]'",
+ //"\u8557>'[................................]'",
+ "\u8558>'[fuel]'",
+ "\u855A>'[calyx of flower]'",
+ "\u8563>'[hibiscus]'",
+ "\u8568>'[pteris aquilina]'",
+ "\u8569>'[pond]'",
+ "\u856A>'[luxurious growth of weeds]'",
+ "\u856D>'[common artemisia]'",
+ "\u8577>'[yam]'",
+ "\u857E>'[buds]'",
+ "\u8580>'[the hippuris or mare''s tail plant]'",
+ "\u8584>'[thin]'",
+ "\u8587>'[osmunda regalis]'",
+ "\u8588>'[luxuriant]'",
+ "\u858A>'[circium]'",
+ "\u8590>'[spinach]'",
+ "\u8591>'[ginger]'",
+ "\u8594>'[rose]'",
+ "\u8597>'[garden]'",
+ "\u8599>'[weed]'",
+ "\u859B>'[kind of marsh grass]'",
+ "\u859C>'[evergreen shrubs]'",
+ "\u85A4>'[allium bakeri]'",
+ "\u85A6>'[offer]'",
+ "\u85A8>'[death of prince]'",
+ "\u85A9>'['transliteration of\"sat\" of boddhisattva etc.']'",
+ "\u85AA>'[fuel]'",
+ "\u85AB>'[a medicinal herb]'",
+ "\u85AC>'[drugs]'",
+ "\u85AE>'[marsh]'",
+ "\u85AF>'[yam]'",
+ "\u85B9>'[cyperus rotundus]'",
+ "\u85BA>'[water-chestnuts]'",
+ "\u85C1>'[straw]'",
+ "\u85C9>'[mat]'",
+ "\u85CD>'[blue]'",
+ "\u85CF>'[hide]'",
+ "\u85D0>'[disregard]'",
+ "\u85D5>'[lotus root]'",
+ "\u85DC>'[chenopodium album]'",
+ "\u85DD>'[art]'",
+ "\u85E4>'[rattan]'",
+ "\u85E5>'[drugs]'",
+ "\u85E9>'[fence]'",
+ "\u85EA>'[marsh]'",
+ "\u85F7>'[yam]'",
+ "\u85F9>'[lush]'",
+ "\u85FA>'[rush used in making mats]'",
+ "\u85FB>'[splendid]'",
+ "\u85FE>'[shade]'",
+ "\u8602>'[stamen or pistil]'",
+ "\u8606>'[rushes]'",
+ "\u8607>'[thyme]'",
+ "\u860A>'[collect]'",
+ "\u860B>'[apple]'",
+ "\u8613>'[thyme]'",
+ "\u8616>'[stump]'",
+ "\u8617>'[stump]'",
+ "\u861A>'[moss]'",
+ "\u8622>'[tall grass]'",
+ "\u862D>'[orchid]'",
+ "\u862F>'[to toss about]'",
+ //"\u862F>'[to toss about]'",
+ "\u863F>'[type of creeping plant]'",
+ "\u864D>'[tiger]'",
+ "\u864E>'[tiger]'",
+ "\u8650>'[cruel]'",
+ "\u8654>'[act with reverence]'",
+ "\u8655>'[place]'",
+ "\u865A>'[false]'",
+ "\u865C>'[capture]'",
+ "\u865E>'[concerned about]'",
+ "\u865F>'[mark]'",
+ "\u8667>'[lose]'",
+ "\u866B>'[insects]'",
+ "\u8671>'[louse]'",
+ "\u8679>'[rainbow]'",
+ "\u867B>'[horsefly]'",
+ "\u868A>'[mosquito]'",
+ "\u868B>'[gnat]'",
+ "\u868C>'[oysters]'",
+ "\u8693>'[earthworm]'",
+ "\u8695>'[silkworms]'",
+ "\u86A3>'[centipede]'",
+ "\u86A4>'[flea]'",
+ "\u86A9>'[worm]'",
+ "\u86AA>'[tadpole]'",
+ "\u86AB>'[abalone]'",
+ "\u86AF>'[earthworm]'",
+ "\u86B0>'[millipede]'",
+ "\u86B6>'[kind of clam]'",
+ "\u86C4>'[mole cricket]'",
+ "\u86C6>'[maggots]'",
+ "\u86C7>'[snake]'",
+ "\u86C9>'[dragonfly]'",
+ "\u86CB>'[eggs]'",
+ "\u86CD>'[glow-worm]'",
+ "\u86CE>'[oyster]'",
+ "\u86D4>'[tapeworm]'",
+ "\u86D9>'[frog]'",
+ "\u86DB>'[spider]'",
+ "\u86DE>'[snail]'",
+ "\u86DF>'[scaly dragon with four legs]'",
+ "\u86E4>'[clam]'",
+ "\u86E9>'[cricket]'",
+ //"\u86E9>'[cricket]'",
+ "\u86ED>'[leech]'",
+ "\u86EE>'[barbarians]'",
+ "\u86EF>'[shrimp]'",
+ "\u86F8>'[long legged spider]'",
+ "\u86F9>'[chrysalis]'",
+ "\u86FB>'[molt]'",
+ "\u86FE>'[moth]'",
+ "\u8700>'[name of an ancient state]'",
+ "\u8702>'[bee]'",
+ "\u8703>'[marine monster which can change its shape]'",
+ "\u8706>'[a variety of bivalves]'",
+ "\u8708>'[centipede]'",
+ "\u8709>'[mayfly]'",
+ "\u870A>'[clam]'",
+ "\u870D>'[toad]'",
+ "\u8711>'[egg]'",
+ "\u8712>'[millipede]'",
+ "\u8718>'[spider]'",
+ "\u871A>'[cockroach]'",
+ "\u871C>'[honey]'",
+ "\u8725>'[lizard]'",
+ "\u8729>'[cicada]'",
+ "\u8734>'[lizard]'",
+ "\u8737>'[creep like worm]'",
+ "\u873B>'[dragonfly]'",
+ "\u873F>'[creep]'",
+ "\u8749>'[cicada]'",
+ "\u874B>'[wax]'",
+ "\u874C>'[tadpole]'",
+ "\u874E>'[scorpion]'",
+ "\u8753>'[snail]'",
+ "\u8755>'[nibble away]'",
+ "\u8757>'[kind of locust]'",
+ "\u8759>'[bat]'",
+ "\u875F>'[hedgehog]'",
+ "\u8760>'[kind of bat]'",
+ "\u8763>'[mayfly]'",
+ "\u8766>'[shrimp]'",
+ "\u8768>'[louse]'",
+ //"\u8768>'[louse]'",
+ "\u876E>'[venomous snake]'",
+ "\u8774>'[butterfly]'",
+ "\u8776>'[butterfly]'",
+ "\u8778>'[snail]'",
+ "\u877F>'[flies]'",
+ "\u8782>'[mantis]'",
+ "\u878D>'[melt]'",
+ "\u879F>'[kind of caterpillar]'",
+ "\u87A2>'[glow-worm]'",
+ "\u87AB>'[poison]'",
+ "\u87AF>'[nippers]'",
+ "\u87B3>'[mantis]'",
+ "\u87BA>'[spiral shell]'",
+ "\u87BB>'[gryllotalpa africana]'",
+ "\u87BD>'[katydid]'",
+ "\u87C0>'[cricket]'",
+ "\u87C4>'[to hibernate]'",
+ "\u87C6>'[frog]'",
+ "\u87C7>'[frog]'",
+ "\u87CB>'[cricket]'",
+ //"\u87CB>'[cricket]'",
+ "\u87D2>'[python]'",
+ "\u87E0>'[coil]'",
+ "\u87EF>'[worms]'",
+ "\u87F2>'[worms]'",
+ "\u87F6>'[razor clam]'",
+ "\u87F7>'[mantis]'",
+ "\u87F9>'[crab]'",
+ "\u87FB>'[ants]'",
+ "\u87FE>'[toad]'",
+ "\u8805>'[flies]'",
+ "\u880D>'[scorpion]'",
+ "\u880E>'[python]'",
+ "\u880F>'[crab]'",
+ "\u8811>'[lizard]'",
+ "\u8815>'[eumenes polifomis]'",
+ "\u8816>'[measuring worm]'",
+ "\u8821>'[wood-boring insect]'",
+ "\u8822>'[wriggle]'",
+ "\u8823>'[oyster]'",
+ "\u8827>'[moth]'",
+ "\u8831>'[posion]'",
+ "\u8836>'[silkworms]'",
+ "\u8839>'[moth]'",
+ "\u883B>'[barbarians]'",
+ "\u8840>'[blood]'",
+ "\u8842>'[to be defeated]'",
+ "\u8844>'[epistaxis]'",
+ "\u8846>'[multitude]'",
+ "\u884C>'[go]'",
+ "\u884D>'[overflow]'",
+ "\u8852>'[brag]'",
+ "\u8853>'[art]'",
+ "\u8857>'[street]'",
+ "\u8859>'[public office]'",
+ "\u885B>'[guard]'",
+ "\u885D>'[rush against]'",
+ "\u885E>'[guard]'",
+ "\u8861>'[measure]'",
+ "\u8862>'[highway]'",
+ "\u8863>'[clothes]'",
+ "\u8868>'[show]'",
+ "\u886B>'[shirt]'",
+ "\u8870>'[decline]'",
+ "\u8872>'[mend]'",
+ "\u8875>'[chemise]'",
+ "\u8877>'[heart]'",
+ "\u887D>'[lapel]'",
+ "\u887E>'[coverlet]'",
+ "\u887F>'[collar or lapel of garment]'",
+ "\u8881>'[robe]'",
+ "\u8882>'[sleeves]'",
+ "\u8888>'[buddhist cassock]'",
+ "\u888B>'[pocket]'",
+ "\u888D>'[long gown]'",
+ "\u8892>'[strip]'",
+ "\u8896>'[sleeve]'",
+ "\u8897>'[unlined garments]'",
+ //"\u8899>'[................................]'",
+ "\u889E>'[ceremonial dress worn by emperor]'",
+ "\u88A2>'[robe]'",
+ "\u88A4>'[longitude]'",
+ "\u88AB>'['passive indicator \"by\"']'",
+ //"\u88AE>'[................................]'",
+ //"\u88B0>'[................................]'",
+ "\u88B1>'[piece of cloth used wrap bundles]'",
+ "\u88B4>'[pants]'",
+ "\u88B5>'[lapel]'",
+ "\u88B7>'[lined garment]'",
+ "\u88BF>'[gown]'",
+ "\u88C1>'[cut out]'",
+ "\u88C2>'[split]'",
+ //"\u88C2>'[split]'",
+ //"\u88C2>'[split]'",
+ "\u88C5>'[dress]'",
+ "\u88CF>'[inside]'",
+ "\u88D4>'[progeny]'",
+ "\u88D5>'[abundant]'",
+ "\u88D8>'[fur garments]'",
+ "\u88D9>'[skirt]'",
+ "\u88DC>'[mend]'",
+ "\u88DD>'[dress]'",
+ "\u88DF>'[a cassock or robe of a monk]'",
+ "\u88E1>'[inside]'",
+ "\u88E8>'[aid]'",
+ "\u88F2>'[waistcoat]'",
+ "\u88F3>'[clothes]'",
+ "\u88F4>'[surname]'",
+ "\u88F8>'[bare]'",
+ "\u88F9>'[wrap]'",
+ "\u88FC>'[to take off one''s top]'",
+ "\u88FD>'[make]'",
+ "\u88FE>'[lapel]'",
+ "\u8902>'[jacket]'",
+ //"\u8903>'[a seam in a garment]'",
+ "\u8907>'[repeat]'",
+ "\u890A>'[cramped]'",
+ "\u890C>'[trousers]'",
+ "\u8910>'[coarse woolen cloth]'",
+ "\u8912>'[praise]'",
+ "\u8913>'[swaddling cloth]'",
+ "\u891D>'[unlined garment]'",
+ //"\u891E>'[................................]'",
+ "\u8925>'[mattress]'",
+ "\u892A>'[strip]'",
+ "\u892B>'[strip]'",
+ "\u8936>'[pleat]'",
+ "\u8938>'[lapel]'",
+ "\u893B>'[dirty]'",
+ "\u8941>'[swaddling clothes]'",
+ "\u8943>'[commend]'",
+ "\u8944>'[aid]'",
+ "\u894C>'[unlined garment]'",
+ "\u894D>'[mixed]'",
+ "\u8956>'[outer garments]'",
+ "\u895E>'[fold]'",
+ "\u895F>'[lapel]'",
+ "\u8960>'[crotch or seat of pants]'",
+ "\u8964>'[ragged]'",
+ "\u8966>'[short coat]'",
+ "\u896A>'[socks]'",
+ "\u896D>'[tuck up hem of garment and wrap]'",
+ "\u896F>'[underwear]'",
+ "\u8972>'[raid]'",
+ "\u8974>'[a one piece garment]'",
+ //"\u8976>'[ignorant]'",
+ "\u897E>'[cover]'",
+ "\u897F>'[west(ern)]'",
+ "\u8981>'[necessary]'",
+ "\u8983>'[reach to]'",
+ "\u8986>'[cover]'",
+ "\u8987>'[rule by might rather than right]'",
+ "\u8988>'[investigate]'",
+ "\u898A>'[halter]'",
+ "\u898B>'[see]'",
+ "\u898F>'[rules]'",
+ "\u8993>'[seek]'",
+ "\u8996>'[look at]'",
+ "\u8997>'[peek]'",
+ "\u8998>'[peek]'",
+ "\u899A>'[wake up from sleep]'",
+ "\u89A1>'[wizard]'",
+ "\u89A6>'[desire strongly]'",
+ "\u89A7>'[look at]'",
+ "\u89A9>'[see]'",
+ "\u89AA>'[relatives]'",
+ "\u89AC>'[covet]'",
+ "\u89AF>'[meet or see unexpectedly]'",
+ "\u89B2>'[have imperial audience]'",
+ "\u89B3>'[see]'",
+ "\u89BA>'[wake up from sleep]'",
+ "\u89BD>'[look at]'",
+ "\u89BF>'[see]'",
+ "\u89C0>'[see]'",
+ "\u89D2>'[horn]'",
+ "\u89DA>'[jug]'",
+ "\u89DC>'[beak]'",
+ "\u89DD>'[gore]'",
+ "\u89E3>'[loosen]'",
+ "\u89E6>'[butt]'",
+ "\u89E7>'[loosen]'",
+ "\u89F4>'[wine vessel]'",
+ "\u89F8>'[touch]'",
+ "\u8A00>'[words]'",
+ "\u8A02>'[draw up agreement]'",
+ "\u8A03>'[obituary]'",
+ "\u8A08>'[plan]'",
+ "\u8A0A>'[inquire]'",
+ "\u8A0C>'[confusion]'",
+ "\u8A0E>'[ask for]'",
+ "\u8A10>'[expose other''s secrets]'",
+ "\u8A13>'[teach]'",
+ "\u8A16>'[finish]'",
+ "\u8A17>'[entrust]'",
+ "\u8A18>'[record]'",
+ "\u8A1B>'[swindle]'",
+ "\u8A1D>'[express surprise]'",
+ "\u8A1F>'[accuse]'",
+ "\u8A23>'[take leave of]'",
+ "\u8A25>'[slow of speech]'",
+ "\u8A2A>'[visit]'",
+ "\u8A2D>'[build]'",
+ "\u8A31>'[allow]'",
+ "\u8A33>'[translate]'",
+ "\u8A34>'[accuse]'",
+ "\u8A36>'[scold loudly]'",
+ "\u8A3A>'[examine patient]'",
+ "\u8A3B>'[explain]'",
+ "\u8A3C>'[prove]'",
+ "\u8A41>'[exegesis]'",
+ "\u8A46>'[slander]'",
+ "\u8A48>'[scold]'",
+ "\u8A50>'[cheat]'",
+ "\u8A51>'[cheat]'",
+ "\u8A52>'[bequeath]'",
+ "\u8A54>'[decree]'",
+ "\u8A55>'[appraise]'",
+ "\u8A5B>'[curse]'",
+ "\u8A5E>'[words]'",
+ "\u8A60>'[sing]'",
+ "\u8A62>'[inquire into]'",
+ "\u8A63>'[reach]'",
+ "\u8A66>'[test]'",
+ "\u8A69>'[poetry]'",
+ "\u8A6B>'[be surprised]'",
+ "\u8A6C>'[abuse]'",
+ "\u8A6D>'[deceive]'",
+ "\u8A6E>'[explain]'",
+ "\u8A70>'[question]'",
+ "\u8A71>'[speech]'",
+ "\u8A72>'[should]'",
+ "\u8A73>'[detailed]'",
+ "\u8A7C>'[tease]'",
+ "\u8A82>'[tempt]'",
+ "\u8A84>'[eulogize]'",
+ "\u8A85>'[execute]'",
+ "\u8A87>'[exaggerate]'",
+ "\u8A89>'[fame]'",
+ "\u8A8C>'[write down]'",
+ "\u8A8D>'[recognize]'",
+ "\u8A91>'[deceive]'",
+ "\u8A93>'[swear]'",
+ "\u8A95>'[bear children]'",
+ "\u8A98>'[persuade]'",
+ "\u8A9A>'[criticize]'",
+ "\u8A9E>'[language]'",
+ "\u8AA0>'[sincere]'",
+ "\u8AA1>'[warn]'",
+ "\u8AA3>'[make false accusation]'",
+ "\u8AA4>'[err]'",
+ "\u8AA5>'[inform]'",
+ "\u8AA6>'[recite]'",
+ "\u8AA8>'[teach]'",
+ "\u8AAC>'[speak]'",
+ "\u8AAD>'[read]'",
+ "\u8AB0>'[who? whom? whose? anyone?]'",
+ "\u8AB2>'[lesson]'",
+ "\u8AB9>'[slander]'",
+ "\u8ABC>'[friendship]'",
+ "\u8ABF>'[transfer]'",
+ "\u8AC2>'[flatter]'",
+ "\u8AC4>'[patient]'",
+ "\u8AC7>'[talk]'",
+ "\u8ACB>'[ask]'",
+ "\u8ACC>'[remonstrate]'",
+ "\u8ACD>'[to expostulate]'",
+ "\u8ACF>'[consult]'",
+ "\u8AD2>'[excuse]'",
+ "\u8AD6>'[debate]'",
+ "\u8ADA>'[(kokuji) command]'",
+ "\u8ADB>'[flatter]'",
+ "\u8ADC>'[intelligence report]'",
+ "\u8ADE>'[brag]'",
+ "\u8AE0>'[noisy]'",
+ "\u8AE1>'[posthumous name]'",
+ "\u8AE2>'[jokes]'",
+ "\u8AE4>'[honest speech]'",
+ "\u8AE6>'[careful]'",
+ "\u8AE7>'[harmonize]'",
+ "\u8AEB>'[remonstrate]'",
+ "\u8AED>'[proclaim]'",
+ "\u8AEE>'[consult]'",
+ "\u8AF1>'[conceal]'",
+ "\u8AF3>'[versed in]'",
+ "\u8AF7>'[recite]'",
+ "\u8AF8>'[several]'",
+ "\u8AFA>'[proverb]'",
+ "\u8AFE>'[promise]'",
+ "\u8B00>'[plan]'",
+ "\u8B01>'[visit]'",
+ "\u8B02>'[say]'",
+ "\u8B04>'[copy]'",
+ "\u8B07>'[stutter]'",
+ "\u8B0C>'[slander]'",
+ "\u8B0E>'[riddle]'",
+ "\u8B10>'[calm]'",
+ "\u8B14>'[jeer]'",
+ "\u8B16>'[rise up]'",
+ "\u8B17>'[slander]'",
+ "\u8B19>'[humble]'",
+ "\u8B1A>'[to confer posthumous titles]'",
+ "\u8B1B>'[explain]'",
+ "\u8B1D>'[thank]'",
+ "\u8B20>'[sing]'",
+ "\u8B21>'[sing]'",
+ "\u8B26>'[t speak softly]'",
+ "\u8B28>'[scheme]'",
+ "\u8B2B>'[charge]'",
+ "\u8B2C>'[error]'",
+ "\u8B33>'[sing]'",
+ "\u8B39>'[prudent]'",
+ "\u8B3E>'[deceive]'",
+ "\u8B41>'[noise]'",
+ "\u8B49>'[proof]'",
+ "\u8B4C>'[false]'",
+ "\u8B4E>'[cunning]'",
+ "\u8B4F>'[ridicule]'",
+ "\u8B56>'[to slander]'",
+ "\u8B58>'[recognize]'",
+ "\u8B5A>'[surname]'",
+ "\u8B5B>'[to slander]'",
+ "\u8B5C>'[register]'",
+ "\u8B5F>'[clamor]'",
+ "\u8B66>'[guard]'",
+ "\u8B6B>'[talkative]'",
+ "\u8B6C>'[metaphor]'",
+ "\u8B6F>'[translate]'",
+ "\u8B70>'[consult]'",
+ //"\u8B71>'[................................]'",
+ "\u8B72>'[allow]'",
+ "\u8B74>'[reprimand]'",
+ "\u8B77>'[protect]'",
+ "\u8B7D>'[fame]'",
+ "\u8B80>'[read]'",
+ "\u8B83>'[praise]'",
+ "\u8B8A>'[change]'",
+ "\u8B8C>'[feast]'",
+ "\u8B8E>'[enemy]'",
+ "\u8B90>'[enemy]'",
+ "\u8B92>'[slander]'",
+ "\u8B93>'[allow]'",
+ "\u8B96>'[prophecy]'",
+ "\u8B99>'[cheer]'",
+ "\u8B9A>'[praise]'",
+ "\u8C37>'[valley]'",
+ "\u8C3A>'[the mouth of a valley]'",
+ "\u8C3F>'[valley]'",
+ "\u8C41>'[open up]'",
+ "\u8C46>'[beans]'",
+ "\u8C48>'[how? what?]'",
+ "\u8C4A>'[abundant]'",
+ "\u8C4C>'[peas]'",
+ "\u8C4E>'[vertical]'",
+ "\u8C50>'[abundant]'",
+ "\u8C55>'[pigs]'",
+ "\u8C5A>'[small pig]'",
+ "\u8C61>'[elephant]'",
+ "\u8C62>'[domestic animals]'",
+ "\u8C6A>'[brave]'",
+ "\u8C6B>'[relaxed]'",
+ "\u8C6C>'[pig]'",
+ "\u8C78>'[radical 153]'",
+ "\u8C79>'[leopard]'",
+ "\u8C7A>'[wolf]'",
+ "\u8C7C>'[fox]'",
+ "\u8C82>'[marten]'",
+ "\u8C85>'[brave]'",
+ "\u8C89>'[badger]'",
+ "\u8C8A>'[leopard]'",
+ "\u8C8C>'[countenance]'",
+ "\u8C8D>'[a fox-like animal]'",
+ "\u8C8E>'[lion]'",
+ "\u8C94>'[fox]'",
+ "\u8C98>'[the panther]'",
+ "\u8C9D>'[sea shell]'",
+ "\u8C9E>'[virtuous]'",
+ "\u8CA0>'[load]'",
+ "\u8CA1>'[wealth]'",
+ "\u8CA2>'[offer tribute]'",
+ "\u8CA7>'[poor]'",
+ "\u8CA8>'[goods]'",
+ "\u8CA9>'[peddler]'",
+ "\u8CAA>'[greedy]'",
+ "\u8CAB>'[string of 1000 coins]'",
+ "\u8CAC>'[one''s responsibility]'",
+ "\u8CAD>'[matter]'",
+ "\u8CAE>'[number two]'",
+ "\u8CAF>'[store]'",
+ "\u8CB0>'[borrow]'",
+ "\u8CB2>'[property]'",
+ "\u8CB3>'[number two]'",
+ "\u8CB4>'[expensive]'",
+ "\u8CB6>'[decrease]'",
+ "\u8CB7>'[buy]'",
+ "\u8CB8>'[lend]'",
+ "\u8CBB>'[expenses]'",
+ "\u8CBC>'[paste to]'",
+ "\u8CBD>'[give to]'",
+ "\u8CBF>'[trade]'",
+ "\u8CC0>'[congratulate]'",
+ "\u8CC1>'[forge ahead]'",
+ "\u8CC2>'[bribe]'",
+ "\u8CC3>'[rent]'",
+ "\u8CC4>'[bribe]'",
+ "\u8CC7>'[property]'",
+ "\u8CC8>'[surname]'",
+ "\u8CCA>'[thief]'",
+ "\u8CCD>'[booty]'",
+ "\u8CCE>'[mean]'",
+ "\u8CD1>'[relieve]'",
+ "\u8CD3>'[guest]'",
+ "\u8CDA>'[give]'",
+ "\u8CDB>'[help]'",
+ "\u8CDC>'[give]'",
+ "\u8CDE>'[reward]'",
+ "\u8CE0>'[indemnify]'",
+ "\u8CE2>'[virtuous]'",
+ "\u8CE3>'[sell]'",
+ "\u8CE4>'[mean]'",
+ "\u8CE6>'[tax]'",
+ "\u8CEA>'[matter]'",
+ "\u8CED>'[bet]'",
+ "\u8CFA>'[make money]'",
+ "\u8CFB>'[gift of money help pay funeral]'",
+ "\u8CFC>'[buy]'",
+ "\u8CFD>'[compete]'",
+ "\u8D04>'[gift superior]'",
+ "\u8D05>'[unnecessary]'",
+ "\u8D07>'[affable]'",
+ "\u8D08>'[give present]'",
+ "\u8D0A>'[help]'",
+ "\u8D0B>'[false]'",
+ "\u8D0D>'[support]'",
+ "\u8D0F>'[win]'",
+ "\u8D10>'[farewell present]'",
+ "\u8D13>'[booty]'",
+ "\u8D14>'[strong]'",
+ "\u8D16>'[buy]'",
+ "\u8D64>'[red]'",
+ "\u8D66>'[forgive]'",
+ "\u8D67>'[blush]'",
+ "\u8D6B>'[bright]'",
+ "\u8D6D>'[reddish brown]'",
+ "\u8D70>'[walk]'",
+ "\u8D71>'[walk]'",
+ "\u8D73>'[grand]'",
+ "\u8D74>'[go to]'",
+ "\u8D77>'[rise]'",
+ "\u8D81>'[take advantage of]'",
+ "\u8D85>'[jump over]'",
+ "\u8D8A>'[exceed]'",
+ "\u8D99>'[surname]'",
+ "\u8DA3>'[what attracts one''s attention]'",
+ "\u8DA8>'[hasten]'",
+ "\u8DB3>'[foot]'",
+ "\u8DBA>'[sit cross-legged]'",
+ "\u8DBE>'[toe]'",
+ "\u8DC2>'[creeping]'",
+ "\u8DCB>'[go by foot]'",
+ "\u8DCC>'[stumble]'",
+ "\u8DCF>'[sit cross-legged]'",
+ "\u8DD6>'[sole (of the foot)]'",
+ "\u8DDA>'[stagger]'",
+ "\u8DDB>'[lame]'",
+ "\u8DDD>'[distance]'",
+ "\u8DDF>'[heel]'",
+ "\u8DE1>'[search]'",
+ "\u8DE3>'[bare footed]'",
+ "\u8DE8>'[straddle]'",
+ "\u8DEA>'[kneel]'",
+ "\u8DEB>'[sound of footsteps]'",
+ "\u8DEF>'[road]'",
+ "\u8DF3>'[jump]'",
+ "\u8DF5>'[trample]'",
+ "\u8DFC>'[bent]'",
+ //"\u8DFF>'[................................]'",
+ "\u8E08>'[neglect]'",
+ "\u8E09>'[hop]'",
+ "\u8E0A>'[leap]'",
+ "\u8E0F>'[step on]'",
+ "\u8E10>'[trample]'",
+ "\u8E1D>'[ankle]'",
+ "\u8E1E>'[crouch]'",
+ "\u8E1F>'[hesitate]'",
+ "\u8E2A>'[footprints]'",
+ "\u8E30>'[exceed]'",
+ "\u8E34>'[leap]'",
+ "\u8E35>'[heel]'",
+ "\u8E42>'[trample under foot]'",
+ "\u8E44>'[hoof]'",
+ "\u8E47>'[lame]'",
+ "\u8E48>'[stamp feet]'",
+ "\u8E49>'[error]'",
+ "\u8E4A>'[footpath]'",
+ "\u8E4C>'[walk rapidly]'",
+ "\u8E50>'[take short steps]'",
+ "\u8E55>'[clear way]'",
+ "\u8E59>'[urgent]'",
+ "\u8E5F>'[trace]'",
+ "\u8E60>'[step on]'",
+ "\u8E63>'[to jump over]'",
+ "\u8E64>'[footprints]'",
+ "\u8E72>'[squat]'",
+ "\u8E74>'[kick]'",
+ "\u8E76>'[stumble]'",
+ "\u8E7C>'[webbed feet of waterfowl]'",
+ "\u8E81>'[tense]'",
+ "\u8E84>'[cripple]'",
+ "\u8E85>'[walk carefully]'",
+ "\u8E87>'[hesitate]'",
+ "\u8E8A>'[hesitate]'",
+ "\u8E8B>'[ascend]'",
+ "\u8E8D>'[skip]'",
+ "\u8E91>'[waver]'",
+ "\u8E93>'[stumble]'",
+ "\u8E94>'[follow in]'",
+ "\u8E99>'[trample down]'",
+ "\u8EA1>'[tread]'",
+ "\u8EAA>'[trample down]'",
+ "\u8EAB>'[body]'",
+ "\u8EAC>'[body]'",
+ "\u8EAF>'[body]'",
+ "\u8EB0>'[body]'",
+ "\u8EB1>'[hide]'",
+ //"\u8EBA>'[lie down]'",
+ //"\u8EC4>'[to govern]'",
+ "\u8EC6>'[body]'",
+ //"\u8EC6>'[body]'",
+ "\u8ECA>'[cart]'",
+ "\u8ECB>'[crush by weight]'",
+ "\u8ECC>'[track]'",
+ "\u8ECD>'[army]'",
+ "\u8ED2>'[carriage]'",
+ "\u8EDB>'[yoke]'",
+ "\u8EDF>'[soft]'",
+ "\u8EE2>'[shift]'",
+ "\u8EE3>'[rumble]'",
+ "\u8EEB>'[cross board at rear of carriage]'",
+ "\u8EF8>'[axle]'",
+ "\u8EFB>'[axle]'",
+ "\u8EFC>'[rush forth]'",
+ "\u8EFD>'[light]'",
+ "\u8EFE>'[horizontal wooden bar in front of a sedan chair]'",
+ "\u8F03>'[compare]'",
+ "\u8F05>'[chariot]'",
+ "\u8F09>'[load]'",
+ "\u8F0A>'[low rear portion of cart]'",
+ "\u8F0C>'[numerary adjunct for vehicles]'",
+ "\u8F12>'[sides of chariot where weapons]'",
+ "\u8F13>'[mourn]'",
+ "\u8F14>'[cheek bone]'",
+ "\u8F15>'[light]'",
+ "\u8F19>'[sides of chariot were weapons]'",
+ "\u8F1B>'[numerary adjunct for vehicles]'",
+ "\u8F1C>'[supply cart]'",
+ "\u8F1D>'[brightness]'",
+ "\u8F1F>'[stop]'",
+ "\u8F26>'[hand-cart]'",
+ "\u8F29>'[generation]'",
+ "\u8F2A>'[wheel]'",
+ "\u8F2F>'[gather up]'",
+ "\u8F33>'[hubs of wheel]'",
+ "\u8F38>'[transport]'",
+ "\u8F39>'[two pieces of wood underneath ca]'",
+ "\u8F3B>'[spokes of wheel]'",
+ "\u8F3E>'[turn over]'",
+ "\u8F3F>'[cart]'",
+ "\u8F42>'[hub of wheel]'",
+ "\u8F44>'[linchpin of wheel]'",
+ "\u8F45>'[axle]'",
+ "\u8F46>'[windlass]'",
+ "\u8F49>'[shift]'",
+ "\u8F4C>'[sled]'",
+ "\u8F4D>'[wagon ruts]'",
+ "\u8F4E>'[sedan-chair]'",
+ "\u8F57>'[fail]'",
+ "\u8F5C>'[hearse]'",
+ "\u8F5F>'[rumble]'",
+ "\u8F61>'[bridle of horse]'",
+ "\u8F62>'[run over something with vehicle]'",
+ //"\u8F63>'[................................]'",
+ "\u8F64>'[pulley]'",
+ "\u8F9B>'[bitter]'",
+ "\u8F9C>'[crime]'",
+ "\u8F9E>'[words]'",
+ "\u8F9F>'[law]'",
+ "\u8FA3>'[peppery]'",
+ "\u8FA7>'[manage]'",
+ "\u8FA8>'[distinguish]'",
+ "\u8FAD>'[words]'",
+ "\u8FAE>'[braid]'",
+ "\u8FAF>'[dispute]'",
+ "\u8FB0>'[early morning]'",
+ "\u8FB1>'[humiliate]'",
+ "\u8FB2>'[agriculture]'",
+ "\u8FB7>'[smooth]'",
+ "\u8FBA>'[edge]'",
+ "\u8FBB>'[crossroads]'",
+ "\u8FBC>'[crowd into]'",
+ "\u8FBF>'[follow]'",
+ "\u8FC2>'[doctrinaire]'",
+ "\u8FC4>'[extend]'",
+ "\u8FC5>'[quick]'",
+ "\u8FCE>'[receive]'",
+ "\u8FD1>'[near]'",
+ "\u8FD4>'[return]'",
+ "\u8FDA>'[very]'",
+ "\u8FE2>'[far]'",
+ "\u8FE5>'[distant]'",
+ "\u8FE6>'[character for transliteration]'",
+ "\u8FE9>'[be near]'",
+ "\u8FEA>'[enlighten]'",
+ "\u8FEB>'[coerce]'",
+ "\u8FED>'[repeatedly]'",
+ "\u8FEF>'[escape]'",
+ "\u8FF0>'[narrate]'",
+ "\u8FF4>'[revolve]'",
+ "\u8FF7>'[bewitch]'",
+ "\u8FF8>'[gush out]'",
+ "\u8FF9>'[traces]'",
+ "\u8FFA>'[then]'",
+ "\u8FFD>'[pursue]'",
+ "\u9000>'[step back]'",
+ "\u9001>'[see off]'",
+ "\u9003>'[escape]'",
+ "\u9005>'[meet unexpectedly]'",
+ "\u9006>'[disobey]'",
+ "\u900B>'[flee]'",
+ "\u900D>'[ramble]'",
+ "\u900E>'[strong]'",
+ "\u900F>'[penetrate]'",
+ "\u9010>'[chase]'",
+ "\u9011>'[collect]'",
+ "\u9013>'[hand over]'",
+ "\u9014>'[way]'",
+ "\u9015>'[pass by]'",
+ "\u9016>'[far]'",
+ "\u9017>'[tempt]'",
+ "\u9019>'[this]'",
+ "\u901A>'[pass through]'",
+ "\u901D>'[pass away]'",
+ "\u901E>'[indulge oneself]'",
+ "\u901F>'[quick]'",
+ "\u9020>'[construct]'",
+ "\u9021>'[retreat]'",
+ "\u9022>'[come upon]'",
+ "\u9023>'[join]'",
+ //"\u9026>'[meandering]'",
+ "\u902E>'[seize]'",
+ "\u9031>'[week]'",
+ "\u9032>'[advance]'",
+ "\u9035>'[thoroughfare]'",
+ "\u9036>'[winding]'",
+ "\u9038>'[flee]'",
+ "\u9039>'[arrive at]'",
+ "\u903C>'[compel]'",
+ "\u903E>'[go over]'",
+ "\u9041>'[hide]'",
+ "\u9042>'[comply with]'",
+ "\u9045>'[late]'",
+ "\u9047>'[meet]'",
+ "\u9049>'[spy]'",
+ "\u904A>'[wander]'",
+ "\u904B>'[luck]'",
+ "\u904D>'[everywhere]'",
+ "\u904E>'[pass]'",
+ "\u904F>'[stop]'",
+ "\u9050>'[afar]'",
+ "\u9051>'[leisure]'",
+ "\u9052>'[strong]'",
+ "\u9053>'[path]'",
+ "\u9054>'[arrive at]'",
+ "\u9055>'[disobey]'",
+ //"\u9055>'[disobey]'",
+ "\u9058>'[to meet]'",
+ "\u9059>'[far away]'",
+ "\u905C>'[humble]'",
+ "\u905E>'[hand over]'",
+ "\u9060>'[distant]'",
+ "\u9061>'[go upstream]'",
+ "\u9063>'[send]'",
+ "\u9065>'[far away]'",
+ "\u9068>'[ramble]'",
+ "\u9069>'[match]'",
+ "\u906D>'[come across]'",
+ "\u906E>'[cover]'",
+ "\u906F>'[deceive]'",
+ "\u9072>'[late]'",
+ "\u9075>'[obey]'",
+ "\u9076>'[entwine]'",
+ "\u9077>'[move]'",
+ "\u9078>'[choose]'",
+ "\u907A>'[lose]'",
+ "\u907C>'[distant]'",
+ "\u907D>'[suddenly]'",
+ "\u907F>'[avoid]'",
+ "\u9080>'[invite]'",
+ "\u9081>'[take a big stride]'",
+ "\u9082>'[unexpected meeting]'",
+ "\u9083>'[profound]'",
+ "\u9084>'[still]'",
+ "\u9087>'[be near]'",
+ "\u9089>'[edge]'",
+ "\u908A>'[edge]'",
+ "\u908F>'[patrol]'",
+ "\u9091>'[area]'",
+ "\u90A3>'[that]'",
+ "\u90A6>'[nation]'",
+ "\u90A8>'[village]'",
+ "\u90AA>'[wrong]'",
+ "\u90AF>'[city in hebei province]'",
+ "\u90B1>'[surname]'",
+ "\u90B5>'[surname]'",
+ "\u90B8>'[official residence]'",
+ "\u90C1>'[sweet smelling]'",
+ "\u90CA>'[suburbs]'",
+ "\u90CE>'[gentleman]'",
+ "\u90DB>'[outer walls of city]'",
+ "\u90E1>'[administrative division]'",
+ "\u90E2>'[state in today''s hubei province]'",
+ "\u90E4>'[crack]'",
+ "\u90E8>'[part]'",
+ "\u90ED>'[outer part (of a city)]'",
+ "\u90F5>'[postal]'",
+ "\u90F7>'[country]'",
+ "\u90FD>'[metropolis]'",
+ "\u9102>'[hubei province]'",
+ "\u9112>'[name of an ancient state]'",
+ "\u9119>'[mean]'",
+ "\u912D>'[state in today''s henan]'",
+ "\u9130>'[neighbor]'",
+ "\u9132>'[county in hebei proincev]'",
+ "\u9149>'[tenth in series of twelve cyclic]'",
+ "\u914A>'[drunk]'",
+ "\u914B>'[chief of tribe]'",
+ "\u914C>'[serve wine]'",
+ "\u914D>'[match]'",
+ "\u914E>'[double-fermented wine]'",
+ "\u9152>'[wine]'",
+ "\u9154>'[intoxicated]'",
+ "\u9156>'[wine with bird poison added]'",
+ //"\u9158>'[................................]'",
+ "\u9162>'[toast one''s host with wine]'",
+ "\u9163>'[enjoy intoxicants]'",
+ "\u9165>'[butter]'",
+ "\u9169>'[drunk]'",
+ "\u916A>'[cream]'",
+ "\u916C>'[toast]'",
+ "\u9172>'[hangover]'",
+ //"\u9172>'[hangover]'",
+ "\u9175>'[yeast]'",
+ "\u9177>'[strong]'",
+ "\u9178>'[tart]'",
+ //"\u9181>'[a kind of green-colored wine]'",
+ "\u9187>'[rich]'",
+ "\u9189>'[intoxicated]'",
+ "\u918B>'[vinegar]'",
+ "\u918D>'[essential oil of butter]'",
+ "\u9190>'[purest cream]'",
+ "\u9192>'[wake up]'",
+ "\u9197>'[to brew for the second time]'",
+ "\u919C>'[ugly looking]'",
+ "\u91A2>'[minced pickled meat]'",
+ "\u91A4>'[any jam-like or paste-like food]'",
+ "\u91AA>'[unclear wine]'",
+ "\u91AB>'[cure]'",
+ "\u91AF>'[vinegar]'",
+ "\u91B4>'[sweet wine]'",
+ "\u91B5>'[contribute for drinks]'",
+ "\u91B8>'[brew]'",
+ "\u91BA>'[get drunk]'",
+ "\u91C0>'[brew]'",
+ "\u91C1>'[smear with blood in sacrifice]'",
+ "\u91C6>'[distinguish]'",
+ "\u91C7>'[collect]'",
+ "\u91C8>'[interprete]'",
+ "\u91C9>'[glaze]'",
+ "\u91CB>'[interprete]'",
+ "\u91CC>'[unit of distance]'",
+ "\u91CD>'[heavy]'",
+ "\u91CE>'[open country]'",
+ "\u91CF>'[measure]'",
+ "\u91D0>'[manage]'",
+ "\u91D1>'[gold]'",
+ "\u91D6>'[knife]'",
+ "\u91D8>'[nail]'",
+ //"\u91DB>'[................................]'",
+ "\u91DC>'[cauldron]'",
+ "\u91DD>'[needle]'",
+ //"\u91DF>'[................................]'",
+ "\u91E1>'[cauldron]'",
+ "\u91E3>'[fish]'",
+ "\u91E6>'[button]'",
+ "\u91E7>'[bracelet]'",
+ "\u91F5>'[ornamental hairpin]'",
+ //"\u91F6>'[................................]'",
+ "\u91FC>'[sword]'",
+ //"\u91FF>'[................................]'",
+ "\u920D>'[blunt]'",
+ "\u920E>'[hook]'",
+ "\u9211>'[plate]'",
+ "\u9214>'[paper money]'",
+ "\u9215>'[button]'",
+ "\u921E>'[unit of measure equivalent thirt]'",
+ "\u9229>'[fireplace]'",
+ "\u922C>'[bell]'",
+ "\u9234>'[bell]'",
+ "\u9237>'[cobalt]'",
+ "\u923F>'[hairpin]'",
+ "\u9244>'[iron]'",
+ "\u9245>'[steel]'",
+ "\u9248>'[thallium]'",
+ "\u9249>'[device for carrying a tripod]'",
+ "\u924B>'[carpenter''s plane]'",
+ //"\u9250>'[................................]'",
+ "\u9257>'[pincers]'",
+ "\u925A>'[rivet]'",
+ "\u925B>'[lead plumbum]'",
+ "\u925E>'[broad-axe]'",
+ "\u9262>'[earthenware basin]'",
+ "\u9264>'[hook]'",
+ "\u9266>'[kind of gong used in ancient tim]'",
+ "\u9271>'[mine]'",
+ "\u927E>'[spear]'",
+ "\u9280>'[silver]'",
+ "\u9283>'[ancient weapon]'",
+ "\u9285>'[copper]'",
+ "\u9291>'[mill]'",
+ "\u9293>'[weigh]'",
+ "\u9295>'[iron]'",
+ "\u9296>'[unit of weight]'",
+ "\u9298>'[inscribe]'",
+ "\u929A>'[large hoe]'",
+ "\u929B>'[sharp]'",
+ "\u929C>'[bit]'",
+ "\u92AD>'[money]'",
+ "\u92B7>'[melt]'",
+ "\u92B9>'[rust]'",
+ "\u92CF>'[tongs]'",
+ "\u92D2>'[point of spear]'",
+ "\u92E4>'[hoe]'",
+ "\u92E9>'[point of sword]'",
+ "\u92EA>'[spread out]'",
+ "\u92ED>'[sharp]'",
+ "\u92F2>'[rivet]'",
+ "\u92F3>'[melt]'",
+ "\u92F8>'[a saw]'",
+ //"\u92FA>'[................................]'",
+ "\u92FC>'[steel]'",
+ "\u9306>'[the color of a mineral]'",
+ "\u930F>'[soft steel]'",
+ "\u9310>'[gimlet]'",
+ "\u9318>'[balance weight on scale]'",
+ "\u9319>'[8 oz]'",
+ "\u931A>'[clanging sound]'",
+ "\u9320>'[spindle]'",
+ "\u9322>'[money]'",
+ //"\u9323>'[................................]'",
+ "\u9326>'[brocade]'",
+ "\u9328>'[anchor]'",
+ "\u932B>'[tin]'",
+ "\u932C>'[smelt metals]'",
+ "\u932E>'[run metal into cracks]'",
+ "\u932F>'[error]'",
+ "\u9332>'[copy]'",
+ //"\u9335>'[................................]'",
+ //"\u933A>'[................................]'",
+ //"\u933B>'[................................]'",
+ //"\u9344>'[................................]'",
+ "\u934B>'[cooking-pot]'",
+ "\u934D>'[plate]'",
+ "\u9354>'[high]'",
+ //"\u9356>'[................................]'",
+ "\u935B>'[forge metal]'",
+ //"\u935C>'[................................]'",
+ "\u9360>'[weapon]'",
+ "\u936C>'[shovel]'",
+ "\u936E>'[brass]'",
+ "\u9375>'[door bolt]'",
+ "\u937C>'[needle]'",
+ "\u937E>'[cup]'",
+ "\u938C>'[sickle]'",
+ "\u9394>'[fuse]'",
+ "\u9396>'[lock]'",
+ "\u9397>'[rifle]'",
+ "\u939A>'[hammer]'",
+ "\u93A7>'[armor]'",
+ "\u93AC>'[stove]'",
+ "\u93AD>'[town]'",
+ "\u93AE>'[town]'",
+ "\u93B0>'[measure of weight for gold]'",
+ //"\u93B9>'[................................]'",
+ "\u93C3>'[arrowhead]'",
+ "\u93C8>'[chain]'",
+ "\u93D0>'[pure gold]'",
+ "\u93D1>'[dysprosium the barb of an arrow]'",
+ "\u93D6>'[fight end]'",
+ "\u93D7>'[strike]'",
+ "\u93D8>'[tinkle]'",
+ "\u93DD>'[trowel]'",
+ "\u93E1>'[mirror]'",
+ "\u93E4>'[carve]'",
+ "\u93E5>'[rust]'",
+ "\u93E8>'[engraving tool]'",
+ "\u9403>'[cymbals]'",
+ "\u9407>'[vanadium]'",
+ "\u9410>'[fetters]'",
+ "\u9413>'[ferrule]'",
+ "\u9414>'[dagger]'",
+ "\u9418>'[clock]'",
+ "\u9419>'[lamp]'",
+ "\u941A>'[soft steel]'",
+ "\u9421>'[iron]'",
+ "\u942B>'[engraving tool]'",
+ "\u9435>'[iron]'",
+ "\u9436>'[metal ring]'",
+ "\u9438>'[bell]'",
+ "\u943A>'[frying pan]'",
+ //"\u9441>'[................................]'",
+ "\u9444>'[melt]'",
+ "\u9451>'[mirror]'",
+ "\u9452>'[mirror]'",
+ "\u9453>'[spear]'",
+ "\u945A>'[drill]'",
+ "\u945B>'[mine]'",
+ "\u945E>'[solder]'",
+ "\u9460>'[melt]'",
+ "\u9462>'[file]'",
+ "\u946A>'[fireplace]'",
+ "\u9470>'[key]'",
+ "\u9475>'[jar]'",
+ "\u9477>'[tweezers]'",
+ "\u947C>'[gong]'",
+ "\u947D>'[drill]'",
+ "\u947E>'[bells hung on horse]'",
+ "\u947F>'[chisel]'",
+ "\u9481>'[a mattock]'",
+ "\u9577>'[long]'",
+ "\u9580>'[gate]'",
+ "\u9582>'[bolt]'",
+ "\u9583>'[flash]'",
+ "\u9587>'[shut]'",
+ "\u9589>'[shut]'",
+ //"\u9589>'[shut]'",
+ "\u958B>'[open]'",
+ "\u958F>'[intercalary]'",
+ "\u9591>'[fence]'",
+ "\u9593>'[interval]'",
+ "\u9594>'[mourn]'",
+ //"\u9594>'[mourn]'",
+ "\u9598>'[sluice]'",
+ "\u9599>'[quarrel]'",
+ "\u95A0>'[intercalary]'",
+ "\u95A2>'[frontier pass]'",
+ "\u95A3>'[chamber]'",
+ "\u95A4>'[small side door]'",
+ "\u95A5>'[powerful and influential group]'",
+ "\u95A7>'[boisterous]'",
+ "\u95A8>'[small entrance]'",
+ "\u95AD>'[village of twenty-five families]'",
+ "\u95B2>'[examine]'",
+ "\u95B9>'[castrate]'",
+ "\u95BB>'[village gate]'",
+ "\u95BC>'[block]'",
+ "\u95BE>'[threshold]'",
+ "\u95C3>'[alone]'",
+ "\u95C7>'[close]'",
+ "\u95CA>'[broad]'",
+ "\u95CC>'[door screen]'",
+ "\u95CD>'[tower over city gate]'",
+ "\u95D4>'[close]'",
+ "\u95D5>'[watch tower]'",
+ "\u95D6>'[rush in]'",
+ "\u95D8>'[struggle]'",
+ "\u95DC>'[frontier pass]'",
+ "\u95E1>'[explain]'",
+ "\u95E2>'[open]'",
+ "\u95E5>'[door]'",
+ "\u961C>'[mound]'",
+ "\u9621>'[footpaths between fields]'",
+ "\u9628>'[in distress]'",
+ "\u962A>'[hillside farmland]'",
+ "\u962E>'[ancient musical instrument: surname]'",
+ "\u962F>'[foundation]'",
+ "\u9632>'[defend]'",
+ "\u963B>'[impede]'",
+ "\u963F>'[prefix to name]'",
+ "\u9640>'[steep bank]'",
+ "\u9642>'[dam]'",
+ "\u9644>'[adhere to]'",
+ "\u964B>'[narrow]'",
+ "\u964C>'[foot path between rice fields]'",
+ "\u964D>'[descend]'",
+ //"\u964D>'[descend]'",
+ "\u9650>'[boundary]'",
+ "\u965B>'[steps leading throne]'",
+ "\u965C>'[narrow]'",
+ "\u965D>'[mountain pass]'",
+ "\u965E>'[promote]'",
+ "\u965F>'[climb]'",
+ "\u9662>'[courtyard]'",
+ "\u9663>'[column]'",
+ "\u9664>'[eliminate]'",
+ "\u9665>'[submerge]'",
+ //"\u9665>'[submerge]'",
+ "\u966A>'[accompany]'",
+ "\u966C>'[corner]'",
+ "\u9670>'['\"female\" principle']'",
+ "\u9672>'[frontier]'",
+ "\u9673>'[exhibit]'",
+ "\u9675>'[hill]'",
+ "\u9676>'[pottery]'",
+ "\u9677>'[submerge]'",
+ "\u9678>'[land]'",
+ "\u967A>'[narrow pass]'",
+ "\u967D>'['\"male\" principle']'",
+ "\u9685>'[corner]'",
+ "\u9686>'[prosperous]'",
+ "\u9688>'[cove]'",
+ "\u968A>'[team]'",
+ "\u968B>'[Sui dynasty]'",
+ "\u968D>'[dry ditch]'",
+ "\u968E>'[stairs]'",
+ "\u968F>'[follow]'",
+ "\u9694>'[separate]'",
+ "\u9695>'[fall]'",
+ "\u9697>'[high]'",
+ "\u9698>'[narrow]'",
+ "\u9699>'[crack]'",
+ "\u969B>'[border]'",
+ "\u969C>'[separate]'",
+ //"\u969C>'[separate]'",
+ "\u96A3>'[neighbor]'",
+ "\u96A7>'[tunnel]'",
+ "\u96A8>'[follow]'",
+ "\u96AA>'[narrow pass]'",
+ "\u96B0>'[low]'",
+ "\u96B1>'[hide]'",
+ "\u96B2>'[stallion]'",
+ "\u96B4>'[mountain located between shaanxi]'",
+ "\u96B6>'[subservient]'",
+ "\u96B7>'[be subservient to]'",
+ "\u96B8>'[be subservient to]'",
+ "\u96B9>'[bird]'",
+ "\u96BB>'[single]'",
+ "\u96BC>'[aquiline (nose)]'",
+ "\u96C0>'[sparrow]'",
+ "\u96C1>'[wild goose]'",
+ "\u96C4>'[male of species]'",
+ "\u96C5>'[elegant]'",
+ "\u96C6>'[assemble]'",
+ "\u96C7>'[employ]'",
+ "\u96C9>'[pheasant]'",
+ "\u96CB>'[superior]'",
+ "\u96CC>'[female]'",
+ "\u96CD>'[harmony]'",
+ "\u96CE>'[osprey]'",
+ "\u96D1>'[mixed]'",
+ "\u96D5>'[engrave]'",
+ "\u96D6>'[although]'",
+ "\u96D9>'[set of two]'",
+ "\u96DB>'[chick]'",
+ "\u96DC>'[mixed]'",
+ "\u96E2>'[leave]'",
+ "\u96E3>'[difficult]'",
+ "\u96E8>'[rain]'",
+ "\u96EA>'[snow]'",
+ //"\u96EB>'[................................]'",
+ "\u96F0>'[atmosphere]'",
+ "\u96F2>'[clouds]'",
+ "\u96F6>'[zero]'",
+ "\u96F7>'[thunder]'",
+ "\u96F9>'[hail]'",
+ "\u96FB>'[electricity]'",
+ "\u9700>'[need]'",
+ "\u9704>'[sky]'",
+ "\u9706>'[a sudden peal of thunder]'",
+ "\u9707>'[shake]'",
+ "\u9708>'[torrential rains]'",
+ "\u970A>'[spirit]'",
+ "\u970D>'[quickly]'",
+ "\u970E>'[light rain]'",
+ "\u970F>'[falling of snow and rain]'",
+ "\u9711>'[be moistened]'",
+ "\u9713>'[rainbow]'",
+ "\u9716>'[long spell of rain]'",
+ "\u9719>'[sleet]'",
+ "\u971C>'[frost]'",
+ "\u971E>'[rosy clouds]'",
+ "\u9724>'[drip]'",
+ "\u9727>'[fog]'",
+ "\u972A>'[long and heavy rain]'",
+ "\u9730>'[hail]'",
+ "\u9732>'[dew]'",
+ "\u9738>'[rule by might rather than right]'",
+ "\u9739>'[thunder]'",
+ "\u973D>'[clear up after rain cease be ang]'",
+ "\u973E>'[misty]'",
+ "\u9742>'[thunderclap]'",
+ "\u9744>'[cloudy sky]'",
+ "\u9746>'[cloudy sky]'",
+ "\u9748>'[spirit]'",
+ "\u9749>'[cloudy sky]'",
+ "\u9752>'[blue]'",
+ "\u9756>'[pacify]'",
+ "\u9759>'[quiet]'",
+ "\u975C>'[quiet]'",
+ "\u975E>'[not]'",
+ "\u9760>'[lean on]'",
+ "\u9761>'[divide]'",
+ "\u9762>'[face]'",
+ //"\u9764>'[................................]'",
+ "\u9766>'[timid]'",
+ "\u9768>'[dimples]'",
+ "\u9769>'[leather]'",
+ "\u976B>'[strong and pliable]'",
+ "\u976D>'[strong and pliable]'",
+ "\u9771>'[strong and pliable]'",
+ "\u9774>'[boots]'",
+ //"\u9779>'[................................]'",
+ "\u977A>'[stocking]'",
+ "\u977C>'[tartars]'",
+ //"\u9781>'[................................]'",
+ "\u9784>'[to work hides]'",
+ "\u9785>'[leather strap over horse''s neck]'",
+ //"\u9785>'[leather strap over horse''s neck]'",
+ "\u978B>'[shoes]'",
+ "\u978D>'[saddle]'",
+ "\u978F>'[bind]'",
+ //"\u978F>'[bind]'",
+ "\u9798>'[scabbard]'",
+ //"\u979C>'[................................]'",
+ "\u97A0>'[bow]'",
+ "\u97A3>'[tan]'",
+ "\u97A6>'[leather stap]'",
+ "\u97A8>'[tribe]'",
+ "\u97AB>'[interrogate]'",
+ "\u97AD>'[whip]'",
+ //"\u97B3>'[................................]'",
+ "\u97B4>'[saddle up horse]'",
+ "\u97C3>'[tatars]'",
+ "\u97C6>'[swing]'",
+ "\u97C8>'[socks]'",
+ "\u97CB>'[tanned leather]'",
+ "\u97D3>'[fence]'",
+ "\u97DC>'[sheath]'",
+ "\u97ED>'[scallion]'",
+ "\u97EE>'[scallion]'",
+ "\u97F2>'[break or smash into pieces]'",
+ "\u97F3>'[sound]'",
+ "\u97F5>'[rhyme]'",
+ "\u97F6>'[music of emperor Shun]'",
+ "\u97FB>'[rhyme]'",
+ "\u97FF>'[make sound]'",
+ "\u9801>'[page]'",
+ "\u9802>'[top]'",
+ "\u9803>'[moment]'",
+ "\u9805>'[neck]'",
+ "\u9806>'[obey]'",
+ "\u9808>'[must]'",
+ "\u980C>'[laud]'",
+ "\u980F>'[fly down or downward]'",
+ "\u9810>'[prepare]'",
+ "\u9811>'[obstinate]'",
+ "\u9812>'[confer]'",
+ "\u9813>'[pause]'",
+ "\u9817>'[lean one side]'",
+ "\u9818>'[neck]'",
+ "\u981A>'[neck]'",
+ "\u9821>'[fly upward]'",
+ "\u9824>'[cheeks]'",
+ "\u982C>'[cheeks]'",
+ "\u982D>'[head]'",
+ "\u9834>'[rice tassel]'",
+ "\u9837>'[chin]'",
+ "\u9838>'[neck]'",
+ "\u983B>'[frequently]'",
+ "\u983C>'[rely]'",
+ "\u983D>'[ruined]'",
+ "\u9846>'[grain]'",
+ "\u984B>'[lower part of face]'",
+ "\u984C>'[forehead]'",
+ "\u984D>'[forehead]'",
+ "\u984E>'[jaw]'",
+ "\u984F>'[face]'",
+ "\u9854>'[face]'",
+ "\u9855>'[manifest]'",
+ "\u9858>'[desire]'",
+ "\u985B>'[top]'",
+ "\u985E>'[class]'",
+ "\u9867>'[look back]'",
+ "\u986B>'[shiver]'",
+ "\u986F>'[manifest]'",
+ "\u9870>'[frown]'",
+ "\u9871>'[skull]'",
+ "\u9873>'[the temporal bone]'",
+ "\u9874>'[cheek bones]'",
+ "\u98A8>'[wind]'",
+ //"\u98A8>'[wind]'",
+ "\u98AF>'[sound of wind]'",
+ "\u98B1>'[taiphoon]'",
+ "\u98B6>'[cyclone]'",
+ "\u98C3>'[whirlwind]'",
+ "\u98C4>'[whirlwind]'",
+ "\u98C6>'[whirlwind]'",
+ "\u98DB>'[fly]'",
+ "\u98DC>'[flip over]'",
+ "\u98DF>'[eat]'",
+ "\u98E2>'[hunger]'",
+ "\u98E9>'[stuffed dumplings]'",
+ "\u98EB>'[surfeited]'",
+ "\u98ED>'[order]'",
+ "\u98EE>'[drink]'",
+ "\u98EF>'[cooked rice]'",
+ "\u98F2>'[drink]'",
+ "\u98F4>'[sweet-meats]'",
+ "\u98FC>'[raise animals]'",
+ "\u98FD>'[eat heartily]'",
+ "\u98FE>'[decorate]'",
+ "\u9903>'[stuffed dumplings]'",
+ "\u9905>'[rice-cakes]'",
+ "\u9909>'[rations and pay for soldiers]'",
+ "\u990A>'[raise]'",
+ "\u990C>'[bait]'",
+ "\u9910>'[eat]'",
+ "\u9912>'[hungry]'",
+ "\u9913>'[be hungry]'",
+ "\u9914>'[eat]'",
+ "\u9918>'[surplus]'",
+ //"\u991D>'[................................]'",
+ "\u991E>'[farewell party]'",
+ "\u9920>'[rice-cakes]'",
+ "\u9921>'[pastry filling]'",
+ "\u9924>'[incite]'",
+ "\u9928>'[public building]'",
+ "\u992C>'[porridge]'",
+ "\u992E>'[a legendary animal]'",
+ "\u993D>'[make present of food]'",
+ "\u993E>'[distill]'",
+ //"\u9941>'[carry meal to workers in field]'",
+ "\u9945>'[steamed bread]'",
+ "\u9949>'[time of famine or crop failure]'",
+ "\u994B>'[offer food superior]'",
+ "\u994C>'[feed]'",
+ "\u9950>'[spoiled]'",
+ "\u9951>'[starve]'",
+ "\u9952>'[bountiful]'",
+ "\u9955>'[gluttonous]'",
+ "\u9957>'[host banquet]'",
+ "\u9996>'[head]'",
+ "\u9997>'[cheekbone]'",
+ "\u9998>'[cut off left ear]'",
+ "\u9999>'[fragrant]'",
+ "\u99A5>'[fragrance]'",
+ "\u99A8>'[fragrant]'",
+ "\u99AC>'[horse]'",
+ "\u99AD>'[drive]'",
+ "\u99AE>'[surname]'",
+ "\u99B3>'[go quickly or swiftly]'",
+ "\u99B4>'[tame]'",
+ //"\u99BC>'[................................]'",
+ "\u99C1>'[varicolored]'",
+ //"\u99C3>'[gallop]'",
+ "\u99C5>'[relay station]'",
+ "\u99C6>'[spur horse on]'",
+ "\u99C8>'[spur horse on]'",
+ "\u99D0>'[to be stationed at]'",
+ "\u99D1>'[tired]'",
+ "\u99D2>'[colt]'",
+ "\u99D5>'[drive]'",
+ "\u99D8>'[tired]'",
+ "\u99DB>'[sail]'",
+ "\u99DD>'[camel]'",
+ "\u99DF>'[team of four horses]'",
+ "\u99E2>'[team of horses]'",
+ "\u99ED>'[terrify]'",
+ "\u99EE>'[a kind of fierce animal]'",
+ "\u99F1>'[white horse w. black mane]'",
+ //"\u99F1>'[white horse w. black mane]'",
+ "\u99F8>'[galloping]'",
+ //"\u99FB>'[................................]'",
+ "\u99FF>'[excellent horse]'",
+ "\u9A01>'[gallop horse]'",
+ "\u9A05>'[piebald horse]'",
+ "\u9A0E>'[ride horseback]'",
+ "\u9A0F>'[piebald horse]'",
+ "\u9A12>'[harass]'",
+ "\u9A13>'[test]'",
+ "\u9A19>'[swindle]'",
+ "\u9A28>'[dappled]'",
+ "\u9A2B>'[raise]'",
+ "\u9A30>'[fly]'",
+ "\u9A37>'[harass]'",
+ "\u9A3E>'[mule]'",
+ "\u9A40>'[suddenly]'",
+ "\u9A42>'[two outside ones in three horse]'",
+ "\u9A43>'[charger]'",
+ "\u9A45>'[spur horse on]'",
+ "\u9A4D>'[excellent horse]'",
+ "\u9A55>'[spirited horse]'",
+ "\u9A57>'[test]'",
+ "\u9A5A>'[frighten]'",
+ "\u9A5B>'[relay station]'",
+ "\u9A5F>'[procedure]'",
+ "\u9A62>'[donkey]'",
+ "\u9A64>'[gallop about with head uplifted]'",
+ "\u9A65>'[thoroughbred horse]'",
+ "\u9A69>'[happy]'",
+ "\u9A6A>'[pure black horse]'",
+ "\u9A6B>'[horses]'",
+ "\u9AA8>'[bone]'",
+ "\u9AAD>'[shin bone]'",
+ "\u9AB0>'[die]'",
+ "\u9AB8>'[skelton]'",
+ "\u9ABC>'[bone]'",
+ "\u9AC0>'[buttocks]'",
+ "\u9AC4>'[bone marrow]'",
+ "\u9ACF>'[skull]'",
+ "\u9AD1>'[skull]'",
+ "\u9AD3>'[bone marrow]'",
+ "\u9AD4>'[body]'",
+ "\u9AD8>'[high]'",
+ "\u9ADE>'[high]'",
+ "\u9ADF>'[hair]'",
+ "\u9AE2>'[wig]'",
+ "\u9AE3>'[similar to]'",
+ "\u9AE6>'[flowing hair of young child]'",
+ "\u9AEA>'[hair]'",
+ "\u9AEB>'[children''s hair style]'",
+ "\u9AED>'[mustache]'",
+ "\u9AEE>'[hair]'",
+ "\u9AEF>'[beard]'",
+ //"\u9AF1>'[................................]'",
+ "\u9AF4>'[disheveled hair]'",
+ //"\u9AF7>'[................................]'",
+ "\u9AFB>'[hair rolled up in a bun]'",
+ "\u9B06>'[lax]'",
+ "\u9B18>'[beautiful hair]'",
+ "\u9B1A>'[beard]'",
+ "\u9B1F>'[dress hair in coiled knot]'",
+ "\u9B22>'[hair on temples]'",
+ "\u9B23>'[horse''s mane]'",
+ "\u9B25>'[struggle]'",
+ "\u9B27>'[quarrel]'",
+ "\u9B28>'[boisterous]'",
+ "\u9B29>'[feud]'",
+ "\u9B2A>'[struggle]'",
+ "\u9B2E>'[lots (to be drawn)]'",
+ "\u9B2F>'[sacrificial wine]'",
+ "\u9B31>'[luxuriant]'",
+ "\u9B32>'[type of caldron]'",
+ "\u9B3B>'[sell]'",
+ "\u9B3C>'[ghost]'",
+ "\u9B41>'[chief]'",
+ "\u9B42>'[soul]'",
+ "\u9B43>'[drought demon]'",
+ "\u9B44>'[vigor]'",
+ "\u9B45>'[kind of forest demon]'",
+ "\u9B4D>'[demons]'",
+ "\u9B4E>'[a kind of monster]'",
+ "\u9B4F>'[kingdom of wei]'",
+ "\u9B51>'[a montain demon resembling tiger]'",
+ "\u9B54>'[demon]'",
+ "\u9B58>'[nightmare]'",
+ "\u9B5A>'[fish]'",
+ "\u9B6F>'[foolish]'",
+ "\u9B74>'[bream]'",
+ //"\u9B81>'[the bonito]'",
+ "\u9B8E>'[sheatfish]'",
+ "\u9B91>'[abalone]'",
+ "\u9B92>'[carp]'",
+ "\u9B93>'[minced and salted fish]'",
+ //"\u9B93>'[minced and salted fish]'",
+ //"\u9B93>'[minced and salted fish]'",
+ "\u9B9F>'[anglerfish]'",
+ "\u9BA0>'[a kind of shad with a head like a sturgeon]'",
+ //"\u9BA8>'[................................]'",
+ "\u9BAA>'[kind of sturgeon]'",
+ "\u9BAB>'[shark]'",
+ "\u9BAD>'[salmon]'",
+ "\u9BAE>'[fresh]'",
+ //"\u9BB4>'[................................]'",
+ //"\u9BB9>'[................................]'",
+ "\u9BC0>'[giant fish]'",
+ "\u9BC6>'[the skate or ray]'",
+ "\u9BC9>'[carp]'",
+ "\u9BCA>'[shark]'",
+ "\u9BCF>'[a dialect........ name of fish]'",
+ //"\u9BD1>'[................................]'",
+ //"\u9BD2>'[................................]'",
+ "\u9BD4>'[mullet]'",
+ "\u9BD6>'[mackerel]'",
+ "\u9BDB>'[pagrosomus major]'",
+ "\u9BE1>'[herring]'",
+ "\u9BE2>'[cryptobranchus japonicus]'",
+ //"\u9BE3>'[................................]'",
+ "\u9BE4>'[spawn]'",
+ "\u9BE8>'[whale]'",
+ "\u9BF0>'[sheat]'",
+ //"\u9BF1>'[................................]'",
+ //"\u9BF1>'[................................]'",
+ //"\u9BF1>'[................................]'",
+ //"\u9C04>'[................................]'",
+ //"\u9C06>'[................................]'",
+ "\u9C08>'[flatfish]'",
+ "\u9C09>'[sturgeon]'",
+ //"\u9C0A>'[................................]'",
+ "\u9C0C>'[loach]'",
+ "\u9C0D>'[loach]'",
+ "\u9C10>'[alligator]'",
+ "\u9C12>'[abalone]'",
+ "\u9C13>'[fish gills]'",
+ //"\u9C14>'[................................]'",
+ "\u9C15>'[shrimp]'",
+ "\u9C1B>'[sardine]'",
+ //"\u9C21>'[................................]'",
+ //"\u9C24>'[................................]'",
+ "\u9C25>'[huge fish]'",
+ "\u9C2D>'[fin]'",
+ "\u9C2E>'[sardine]'",
+ //"\u9C2F>'[................................]'",
+ //"\u9C2F>'[................................]'",
+ "\u9C32>'[huge sea turtle]'",
+ "\u9C39>'[skipjack]'",
+ //"\u9C3A>'[................................]'",
+ "\u9C3B>'[eel]'",
+ "\u9C3E>'[swimming bladder of fish]'",
+ //"\u9C46>'[................................]'",
+ "\u9C47>'[anglerfish]'",
+ "\u9C48>'[codfish]'",
+ "\u9C52>'[barbel]'",
+ "\u9C57>'[fish scales]'",
+ //"\u9C58>'[sturgeon]'",
+ "\u9C60>'[minced fish]'",
+ "\u9C67>'[snakehead]'",
+ //"\u9C76>'[................................]'",
+ "\u9C78>'[sea perch]'",
+ "\u9CE5>'[bird]'",
+ "\u9CE7>'[wild duck]'",
+ "\u9CE9>'[pigeon]'",
+ "\u9CEB>'[wild goose]'",
+ "\u9CEC>'[wild duck]'",
+ //"\u9CF0>'[................................]'",
+ "\u9CF3>'[male phoenix]'",
+ "\u9CF4>'[cry of bird or animal]'",
+ "\u9CF6>'[kite]'",
+ "\u9D03>'[shrike]'",
+ "\u9D06>'[bird resembling secretary falcon]'",
+ "\u9D07>'[bustard]'",
+ "\u9D08>'[wild goose]'",
+ "\u9D09>'[crow]'",
+ "\u9D0E>'[seagull]'",
+ "\u9D12>'[species of lark]'",
+ "\u9D15>'[ostrich]'",
+ "\u9D1B>'[male mandarin duck]'",
+ "\u9D1F>'[kite]'",
+ "\u9D23>'[species of taiwan pigeon]'",
+ "\u9D26>'[female mandarin duck]'",
+ "\u9D28>'[duck]'",
+ "\u9D2A>'[swoop]'",
+ "\u9D2B>'[a snipe]'",
+ "\u9D2C>'[oriole]'",
+ "\u9D3B>'[species of wild swan]'",
+ //"\u9D3E>'[................................]'",
+ "\u9D3F>'[pigeon]'",
+ //"\u9D41>'[................................]'",
+ "\u9D44>'[kite]'",
+ //"\u9D44>'[kite]'",
+ //"\u9D44>'[kite]'",
+ //"\u9D50>'[................................]'",
+ "\u9D51>'[cuckoo]'",
+ "\u9D59>'[a shrike]'",
+ "\u9D5C>'[pelican]'",
+ "\u9D5D>'[goose]'",
+ "\u9D5E>'[goose]'",
+ "\u9D60>'[target]'",
+ "\u9D61>'[species of parrot]'",
+ //"\u9D61>'[species of parrot]'",
+ "\u9D6C>'[fabulous bird of enormous size]'",
+ "\u9D6F>'[bird]'",
+ "\u9D72>'[magpie]'",
+ //"\u9D7A>'[................................]'",
+ "\u9D87>'[thrush]'",
+ "\u9D89>'[quail]'",
+ "\u9D8F>'[chicken]'",
+ "\u9D9A>'[osprey]'",
+ //"\u9DA4>'[................................]'",
+ "\u9DA9>'[duck]'",
+ "\u9DAB>'[thrush]'",
+ "\u9DAF>'[oriole]'",
+ //"\u9DB1>'[soar]'",
+ "\u9DB4>'[crane]'",
+ "\u9DB8>'[[not found in any dictionary]]'",
+ "\u9DBA>'[wagtail]'",
+ "\u9DBB>'[a kind of pigeon]'",
+ "\u9DC1>'[fishhawk bow or prow]'",
+ "\u9DC2>'[sparrow hawk]'",
+ "\u9DC4>'[chicken]'",
+ "\u9DC6>'[bird name]'",
+ "\u9DCF>'[bird name]'",
+ "\u9DD3>'[partridge]'",
+ "\u9DD9>'[hawk]'",
+ "\u9DE6>'[wren]'",
+ //"\u9DEB>'[turquoise kingfisher]'",
+ "\u9DEF>'[wren]'",
+ "\u9DF2>'[condor]'",
+ "\u9DF8>'[snipe]'",
+ "\u9DF9>'[eagle]'",
+ "\u9DFA>'[heron]'",
+ "\u9DFD>'[oriental bullfinch]'",
+ "\u9E1A>'[species of parrot]'",
+ "\u9E1B>'[crane]'",
+ "\u9E1E>'[fabulous bird]'",
+ "\u9E75>'[saline soil]'",
+ "\u9E78>'[alkaline]'",
+ "\u9E79>'[salty]'",
+ "\u9E7D>'[salt]'",
+ "\u9E7F>'[deer]'",
+ "\u9E81>'[rough]'",
+ "\u9E88>'[species of deer]'",
+ "\u9E8B>'[elk]'",
+ "\u9E8C>'[stag]'",
+ "\u9E91>'[fawn]'",
+ "\u9E92>'[legendary auspicious animal]'",
+ "\u9E93>'[foot of hill]'",
+ "\u9E95>'[muntjac deer]'",
+ "\u9E97>'[beautiful]'",
+ "\u9E9D>'[musk deer]'",
+ "\u9E9F>'[female of chinese unicorn]'",
+ "\u9EA5>'[wheat]'",
+ "\u9EA6>'[wheat]'",
+ "\u9EA9>'[bran]'",
+ "\u9EAA>'[flour]'",
+ //"\u9EAB>'[flour]'",
+ "\u9EB8>'[bran]'",
+ "\u9EB9>'[yeast]'",
+ "\u9EBA>'[flour]'",
+ "\u9EBB>'[hemp]'",
+ "\u9EBC>'[interrogative final particle]'",
+ "\u9EBE>'[pennant]'",
+ "\u9EBF>'[I]'",
+ "\u9EC4>'[yellow]'",
+ "\u9ECC>'[school]'",
+ "\u9ECD>'[glutinous millet]'",
+ "\u9ECE>'[surname]'",
+ "\u9ECF>'[stick to]'",
+ "\u9ED0>'[stick]'",
+ "\u9ED2>'[black]'",
+ "\u9ED4>'[black]'",
+ "\u9ED8>'[silent]'",
+ "\u9ED9>'[silent]'",
+ "\u9EDB>'[blacken eyebrows]'",
+ "\u9EDC>'[dismiss]'",
+ "\u9EDD>'[black]'",
+ "\u9EDE>'[dot]'",
+ "\u9EE0>'[sly]'",
+ "\u9EE5>'[tattooing face]'",
+ "\u9EE8>'[political party]'",
+ "\u9EEF>'[dark]'",
+ "\u9EF4>'[mold]'",
+ "\u9EF6>'[mole]'",
+ "\u9EF7>'[dishonor]'",
+ "\u9EF9>'[embroidery]'",
+ "\u9EFB>'[special pattern of embroidery]'",
+ "\u9EFC>'[embroidered official or sacrific]'",
+ "\u9EFD>'[to strive]'",
+ "\u9F07>'[huge sea turtle]'",
+ "\u9F08>'[fresh water turtle]'",
+ "\u9F0E>'[large]'",
+ "\u9F13>'[drum]'",
+ "\u9F15>'[rattle of drums]'",
+ "\u9F20>'[rat]'",
+ "\u9F21>'[rat]'",
+ "\u9F2C>'[weasel]'",
+ "\u9F3B>'[nose]'",
+ "\u9F3E>'[snore loudly]'",
+ "\u9F4A>'[even]'",
+ "\u9F4B>'[vegetarian diet]'",
+ "\u9F4E>'[take in both hands and offer to]'",
+ "\u9F4F>'[break or smash into pieces]'",
+ "\u9F52>'[teeth]'",
+ "\u9F54>'[lose baby teeth and get adult te]'",
+ "\u9F5F>'[irregular teeth]'",
+ "\u9F60>'[lose baby teeth and get adult teeth]'",
+ "\u9F61>'[age]'",
+ "\u9F62>'[age]'",
+ "\u9F63>'[act]'",
+ "\u9F66>'[gums]'",
+ "\u9F67>'[bite]'",
+ "\u9F6A>'[narrow]'",
+ "\u9F6C>'[uneven teeth]'",
+ "\u9F72>'[tooth decay]'",
+ "\u9F76>'[palate]'",
+ "\u9F77>'[narrow]'",
+ "\u9F8D>'[dragon]'",
+ "\u9F95>'[niche]'",
+ "\u9F9C>'[turtle or tortoise]'",
+ "\u9F9D>'[autumn]'",
+ "\u9FA0>'[flute]'",
+}}};}}
diff --git a/src/com/ibm/text/resources/TransliterationRule_Kanji_OnRomaji.java b/src/com/ibm/text/resources/TransliterationRule_Kanji_OnRomaji.java
new file mode 100755
index 0000000..a596ec0
--- /dev/null
+++ b/src/com/ibm/text/resources/TransliterationRule_Kanji_OnRomaji.java
@@ -0,0 +1,6225 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/TransliterationRule_Kanji_OnRomaji.java,v $
+ * $Date: 2000/03/10 04:07:30 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+import java.util.ListResourceBundle;
+public class TransliterationRule_Kanji_OnRomaji extends ListResourceBundle {
+ public Object[][] getContents() {
+ return new Object[][] {
+ {"Rule", new String[] {
+ "\u4E01>Tei;",
+ "\u4E03>Shichi;",
+ "\u4E07>Man;",
+ "\u4E08>Jou;",
+ "\u4E09>San;",
+ "\u4E0A>Jou;",
+ "\u4E0B>Ka;",
+ "\u4E0D>Fu;",
+ "\u4E0E>Yo;",
+ "\u4E10>Kai;",
+ "\u4E11>Chuu;",
+ "\u4E14>Sha;",
+ "\u4E15>Hi;",
+ "\u4E16>Se;",
+ "\u4E17>Sei;",
+ "\u4E18>Kyuu;",
+ "\u4E19>Hei;",
+ "\u4E1E>Shou;",
+ "\u4E21>Ryou;",
+ "\u4E26>Hei;",
+ "\u4E2A>Ka;",
+ "\u4E2D>Chuu;",
+ "\u4E31>Kan;",
+ "\u4E32>Sen;",
+ "\u4E36>Chu;",
+ "\u4E38>Gan;",
+ "\u4E39>Tan;",
+ "\u4E3B>Shu;",
+ "\u4E3C>Sei;",
+ "\u4E3F>Hetsu;",
+ "\u4E42>Gai;",
+ "\u4E43>Dai;",
+ "\u4E45>Kyuu;",
+ "\u4E4B>Shi;",
+ "\u4E4D>Saku;",
+ "\u4E4E>Ko;",
+ "\u4E4F>Bou;",
+ "\u4E55>Ko;",
+ "\u4E56>Kai;",
+ "\u4E57>Jou;",
+ "\u4E58>Jou;",
+ "\u4E59>Otsu;",
+ "\u4E5D>Kyuu;",
+ "\u4E5E>Kotsu;",
+ "\u4E5F>Ya;",
+ "\u4E62>Gai;",
+ "\u4E71>Ran;",
+ "\u4E73>Nyuu;",
+ "\u4E7E>Kan;",
+ "\u4E80>Ki;",
+ "\u4E82>Ran;",
+ "\u4E85>Ketsu;",
+ "\u4E86>Ryou;",
+ "\u4E88>Yo;",
+ "\u4E89>Sou;",
+ "\u4E8A>Ji;",
+ "\u4E8B>Ji;",
+ "\u4E8C>Ni;",
+ "\u4E8E>U;",
+ "\u4E91>Un;",
+ "\u4E92>Go;",
+ "\u4E94>Go;",
+ "\u4E95>Sei;",
+ "\u4E98>Sen;",
+ "\u4E99>Kou;",
+ "\u4E9B>Sa;",
+ "\u4E9C>A;",
+ "\u4E9E>A;",
+ "\u4E9F>Kyoku;",
+ "\u4EA0>Tou;",
+ "\u4EA1>Bou;",
+ "\u4EA2>Kou;",
+ "\u4EA4>Kou;",
+ "\u4EA5>Gai;",
+ "\u4EA6>Eki;",
+ "\u4EA8>Kyou;",
+ "\u4EAB>Kyou;",
+ "\u4EAC>Kyou;",
+ "\u4EAD>Tei;",
+ "\u4EAE>Ryou;",
+ "\u4EB0>Kei;",
+ "\u4EB3>Haku;",
+ "\u4EB6>Tan;",
+ "\u4EBA>Jin;",
+ "\u4EC0>Shuu;",
+ "\u4EC1>Jin;",
+ "\u4EC2>Roku;",
+ "\u4EC4>Soku;",
+ "\u4EC6>Fu;",
+ "\u4EC7>Kyuu;",
+ "\u4ECA>Kon;",
+ "\u4ECB>Kai;",
+ "\u4ECD>Jou;",
+ "\u4ECE>Juu;",
+ "\u4ECF>Butsu;",
+ "\u4ED4>Shi;",
+ "\u4ED5>Shi;",
+ "\u4ED6>Ta;",
+ "\u4ED7>Jou;",
+ "\u4ED8>Fu;",
+ "\u4ED9>Sen;",
+ "\u4EDD>Dou;",
+ "\u4EDE>Jin;",
+ "\u4EDF>Sen;",
+ "\u4EE3>Dai;",
+ "\u4EE4>Rei;",
+ "\u4EE5>I;",
+ "\u4EED>Jin;",
+ "\u4EEE>Ka;",
+ "\u4EF0>Gyou;",
+ "\u4EF2>Chuu;",
+ "\u4EF6>Ken;",
+ "\u4EF7>Kai;",
+ "\u4EFB>Nin;",
+ "\u4F01>Ki;",
+ "\u4F09>Kou;",
+ "\u4F0A>I;",
+ "\u4F0D>Go;",
+ "\u4F0E>Ki;",
+ "\u4F0F>Fuku;",
+ "\u4F10>Batsu;",
+ "\u4F11>Kyuu;",
+ "\u4F1A>Kai;",
+ "\u4F1C>Sai;",
+ "\u4F1D>Den;",
+ "\u4F2F>Haku;",
+ "\u4F30>Ko;",
+ "\u4F34>Han;",
+ "\u4F36>Rei;",
+ "\u4F38>Shin;",
+ "\u4F3A>Shi;",
+ "\u4F3C>Ji;",
+ "\u4F3D>Kya;",
+ "\u4F43>Ten;",
+ "\u4F46>Tan;",
+ "\u4F47>Cho;",
+ "\u4F4D>I;",
+ "\u4F4E>Tei;",
+ "\u4F4F>Juu;",
+ "\u4F50>Sa;",
+ "\u4F51>Yuu;",
+ "\u4F53>Tei;",
+ "\u4F55>Ka;",
+ "\u4F57>Ta;",
+ "\u4F59>Yo;",
+ "\u4F5A>Itsu;",
+ "\u4F5B>Butsu;",
+ "\u4F5C>Saku;",
+ "\u4F5D>Kou;",
+ "\u4F5E>Nei;",
+ "\u4F69>Hai;",
+ "\u4F6F>You;",
+ "\u4F70>Haku;",
+ "\u4F73>Ka;",
+ "\u4F75>Hei;",
+ "\u4F76>Kitsu;",
+ "\u4F7B>Chou;",
+ "\u4F7C>Kou;",
+ "\u4F7F>Shi;",
+ "\u4F83>Kan;",
+ "\u4F86>Rai;",
+ "\u4F88>Shi;",
+ "\u4F8B>Rei;",
+ "\u4F8D>Ji;",
+ "\u4F8F>Shu;",
+ "\u4F91>Yuu;",
+ "\u4F96>Ron;",
+ "\u4F98>Ta;",
+ "\u4F9B>Kyou;",
+ "\u4F9D>I;",
+ "\u4FA0>Kyou;",
+ "\u4FA1>Ka;",
+ "\u4FAB>Nei;",
+ "\u4FAD>Jin;",
+ "\u4FAE>Bu;",
+ "\u4FAF>Kou;",
+ "\u4FB5>Shin;",
+ "\u4FB6>Ryo;",
+ "\u4FBF>Ben;",
+ "\u4FC2>Kei;",
+ "\u4FC3>Soku;",
+ "\u4FC4>Ga;",
+ "\u4FCA>Shun;",
+ "\u4FCE>Sho;",
+ "\u4FD0>Ri;",
+ "\u4FD1>You;",
+ "\u4FD4>Ken;",
+ "\u4FD7>Zoku;",
+ "\u4FD8>Fu;",
+ "\u4FDA>Ri;",
+ "\u4FDB>Ben;",
+ "\u4FDD>Ho;",
+ "\u4FDF>Shi;",
+ "\u4FE1>Shin;",
+ "\u4FEE>Shuu;",
+ "\u4FEF>Fu;",
+ "\u4FF3>Hai;",
+ "\u4FF5>Hyou;",
+ "\u4FF6>Shuku;",
+ "\u4FF8>Hou;",
+ "\u4FFA>En;",
+ "\u4FFE>Hi;",
+ "\u5005>Sai;",
+ "\u5006>Ryou;",
+ "\u5009>Sou;",
+ "\u500B>Ko;",
+ "\u500D>Bai;",
+ "\u500F>Shuku;",
+ "\u5011>Mon;",
+ "\u5012>Tou;",
+ "\u5014>Kutsu;",
+ "\u5016>Kou;",
+ "\u5019>Kou;",
+ "\u501A>I;",
+ "\u501F>Shaku;",
+ "\u5021>Shou;",
+ "\u5023>Hou;",
+ "\u5024>Chi;",
+ "\u5025>Kou;",
+ "\u5026>Ken;",
+ "\u5028>Kyo;",
+ "\u5029>Sen;",
+ "\u502A>Gei;",
+ "\u502B>Rin;",
+ "\u502C>Taku;",
+ "\u502D>I;",
+ "\u5036>Ku;",
+ "\u5039>Ken;",
+ "\u5043>En;",
+ "\u5047>Ka;",
+ "\u5048>Ketsu;",
+ "\u5049>I;",
+ "\u504F>Hen;",
+ "\u5050>Gan;",
+ "\u5055>Kai;",
+ "\u5056>Sha;",
+ "\u505A>Saku;",
+ "\u505C>Tei;",
+ "\u5065>Ken;",
+ "\u506C>Sou;",
+ "\u5072>Shi;",
+ "\u5074>Soku;",
+ "\u5075>Tei;",
+ "\u5076>Guu;",
+ "\u5078>Chuu;",
+ "\u507D>Gi;",
+ "\u5080>Kai;",
+ "\u5085>Fu;",
+ "\u508D>Bou;",
+ "\u5091>Ketsu;",
+ "\u5098>San;",
+ "\u5099>Bi;",
+ "\u509A>Kou;",
+ "\u50AC>Sai;",
+ "\u50AD>You;",
+ "\u50B2>Gou;",
+ "\u50B3>Den;",
+ "\u50B4>U;",
+ "\u50B5>Sai;",
+ "\u50B7>Shou;",
+ "\u50BE>Kei;",
+ "\u50C2>Rou;",
+ "\u50C5>Kin;",
+ "\u50C9>Sen;",
+ "\u50CA>Sen;",
+ "\u50CD>Dou;",
+ "\u50CF>Zou;",
+ "\u50D1>Kyou;",
+ "\u50D5>Boku;",
+ "\u50D6>Ki;",
+ "\u50DA>Ryou;",
+ "\u50DE>Gi;",
+ "\u50E3>Sen;",
+ "\u50E5>Kyou;",
+ "\u50E7>Sou;",
+ "\u50ED>Sen;",
+ "\u50EE>Dou;",
+ "\u50F5>Kyou;",
+ "\u50F9>Ka;",
+ "\u50FB>Heki;",
+ "\u5100>Gi;",
+ "\u5101>Shun;",
+ "\u5102>Dou;",
+ "\u5104>Oku;",
+ "\u5109>Ken;",
+ "\u5112>Ju;",
+ "\u5114>Chuu;",
+ "\u5115>Sei;",
+ "\u5116>Ran;",
+ "\u5118>Jin;",
+ "\u511A>Bou;",
+ "\u511F>Shou;",
+ "\u5121>Rai;",
+ "\u512A>Yuu;",
+ "\u5132>Cho;",
+ "\u5137>Rei;",
+ "\u513A>Da;",
+ "\u513B>Tou;",
+ "\u513C>Gen;",
+ "\u513F>Jin;",
+ "\u5140>Kotsu;",
+ "\u5141>In;",
+ "\u5143>Gen;",
+ "\u5144>Kei;",
+ "\u5145>Juu;",
+ "\u5146>Chou;",
+ "\u5147>Kyou;",
+ "\u5148>Sen;",
+ "\u5149>Kou;",
+ "\u514B>Koku;",
+ "\u514C>Da;",
+ "\u514D>Men;",
+ "\u514E>To;",
+ "\u5150>Ji;",
+ "\u5152>Ji;",
+ "\u5154>To;",
+ "\u515A>Tou;",
+ "\u515C>Tou;",
+ "\u5162>Kyou;",
+ "\u5165>Nyuu;",
+ "\u5168>Zen;",
+ "\u5169>Ryou;",
+ "\u516A>Yu;",
+ "\u516B>Hachi;",
+ "\u516C>Kou;",
+ "\u516D>Roku;",
+ "\u516E>Kei;",
+ "\u5171>Kyou;",
+ "\u5175>Hei;",
+ "\u5176>Ki;",
+ "\u5177>Gu;",
+ "\u5178>Ten;",
+ "\u517C>Ken;",
+ "\u5180>Ki;",
+ "\u5182>Kei;",
+ "\u5185>Dai;",
+ "\u5186>En;",
+ "\u5189>Nen;",
+ "\u518A>Satsu;",
+ "\u518C>Satsu;",
+ "\u518D>Sai;",
+ "\u518F>Kei;",
+ "\u5190>Bou;",
+ "\u5191>Chuu;",
+ "\u5192>Bou;",
+ "\u5193>Kou;",
+ "\u5195>Ben;",
+ "\u5196>Beki;",
+ "\u5197>Jou;",
+ "\u5199>Sha;",
+ "\u51A0>Kan;",
+ "\u51A2>Chou;",
+ "\u51A4>En;",
+ "\u51A5>Mei;",
+ "\u51A6>Kou;",
+ "\u51A8>Fu;",
+ "\u51A9>Sha;",
+ "\u51AA>Beki;",
+ "\u51AB>Hyou;",
+ "\u51AC>Tou;",
+ "\u51B0>Hyou;",
+ "\u51B1>Go;",
+ "\u51B2>Chuu;",
+ "\u51B3>Ketsu;",
+ "\u51B4>Go;",
+ "\u51B5>Kyou;",
+ "\u51B6>Ya;",
+ "\u51B7>Rei;",
+ "\u51BD>Retsu;",
+ "\u51C4>Sei;",
+ "\u51C5>Ko;",
+ "\u51C6>Jun;",
+ "\u51C9>Ryou;",
+ "\u51CB>Chou;",
+ "\u51CC>Ryou;",
+ "\u51CD>Tou;",
+ "\u51D6>Jun;",
+ "\u51DB>Rin;",
+ "\u51DC>Rin;",
+ "\u51DD>Gyou;",
+ "\u51E0>Ki;",
+ "\u51E1>Bon;",
+ "\u51E6>Sho;",
+ "\u51ED>Hyou;",
+ "\u51F0>Kou;",
+ "\u51F1>Gai;",
+ "\u51F5>Kan;",
+ "\u51F6>Kyou;",
+ "\u51F8>Totsu;",
+ "\u51F9>Ou;",
+ "\u51FA>Shutsu;",
+ "\u51FD>Kan;",
+ "\u51FE>Kan;",
+ "\u5200>Tou;",
+ "\u5203>Jin;",
+ "\u5204>Jin;",
+ "\u5206>Bun;",
+ "\u5207>Setsu;",
+ "\u5208>Gai;",
+ "\u520A>Kan;",
+ "\u520B>Sen;",
+ "\u520E>Fun;",
+ "\u5211>Kei;",
+ "\u5214>Ketsu;",
+ "\u5217>Retsu;",
+ "\u521D>Sho;",
+ "\u5224>Han;",
+ "\u5225>Betsu;",
+ "\u5227>Gou;",
+ "\u5229>Ri;",
+ "\u522A>San;",
+ "\u522E>Katsu;",
+ "\u5230>Tou;",
+ "\u5233>Ko;",
+ "\u5236>Sei;",
+ "\u5237>Satsu;",
+ "\u5238>Ken;",
+ "\u5239>Satsu;",
+ "\u523A>Shi;",
+ "\u523B>Koku;",
+ "\u5243>Tei;",
+ "\u5244>Kei;",
+ "\u5247>Soku;",
+ "\u524A>Saku;",
+ "\u524B>Koku;",
+ "\u524C>Ratsu;",
+ "\u524D>Zen;",
+ "\u524F>Sou;",
+ "\u5254>Teki;",
+ "\u5256>Bou;",
+ "\u525B>Gou;",
+ "\u525E>Ki;",
+ "\u5263>Ken;",
+ "\u5264>Zai;",
+ "\u5265>Haku;",
+ "\u5269>Jou;",
+ "\u526A>Sen;",
+ "\u526F>Fuku;",
+ "\u5270>Jou;",
+ "\u5271>Ken;",
+ "\u5272>Katsu;",
+ "\u5273>Tou;",
+ "\u5274>Gai;",
+ "\u5275>Sou;",
+ "\u527D>Hyou;",
+ "\u527F>Shou;",
+ "\u5283>Kaku;",
+ "\u5287>Geki;",
+ "\u5288>Heki;",
+ "\u5289>Ru;",
+ "\u528D>Ken;",
+ "\u5291>Zai;",
+ "\u5292>Ken;",
+ "\u5294>Ken;",
+ "\u529B>Ryoku;",
+ "\u529F>Kou;",
+ "\u52A0>Ka;",
+ "\u52A3>Retsu;",
+ "\u52A9>Jo;",
+ "\u52AA>Do;",
+ "\u52AB>Gou;",
+ "\u52AC>Ku;",
+ "\u52AD>Shou;",
+ "\u52B1>Rei;",
+ "\u52B4>Rou;",
+ "\u52B5>Ken;",
+ "\u52B9>Kou;",
+ "\u52BC>Katsu;",
+ "\u52BE>Gai;",
+ "\u52C1>Kei;",
+ "\u52C3>Botsu;",
+ "\u52C5>Choku;",
+ "\u52C7>Yuu;",
+ "\u52C9>Ben;",
+ "\u52CD>Kei;",
+ "\u52D2>Roku;",
+ "\u52D5>Dou;",
+ "\u52D7>Bou;",
+ "\u52D8>Kan;",
+ "\u52D9>Mu;",
+ "\u52DD>Shou;",
+ "\u52DE>Rou;",
+ "\u52DF>Bo;",
+ "\u52E0>Riku;",
+ "\u52E2>Sei;",
+ "\u52E3>Seki;",
+ "\u52E4>Kin;",
+ "\u52E6>Sou;",
+ "\u52E7>Kan;",
+ "\u52F2>Kun;",
+ "\u52F3>Kun;",
+ "\u52F5>Rei;",
+ "\u52F8>Kan;",
+ "\u52F9>Hou;",
+ "\u52FA>Shaku;",
+ "\u52FE>Kou;",
+ "\u52FF>Butsu;",
+ "\u5305>Hou;",
+ "\u5306>Sou;",
+ "\u5308>Kyou;",
+ "\u530D>Ho;",
+ "\u530F>Hou;",
+ "\u5310>Hoku;",
+ "\u5315>Hi;",
+ "\u5316>Ka;",
+ "\u5317>Hoku;",
+ "\u5319>Shi;",
+ "\u531A>Hou;",
+ "\u531D>Sou;",
+ "\u5320>Shou;",
+ "\u5321>Kyou;",
+ "\u5323>Kou;",
+ "\u532A>Hi;",
+ "\u532F>Wai;",
+ "\u5331>Ki;",
+ "\u5333>Ren;",
+ "\u5338>Kei;",
+ "\u5339>Hitsu;",
+ "\u533A>Ku;",
+ "\u533B>I;",
+ "\u533F>Toku;",
+ "\u5340>Ku;",
+ "\u5341>Juu;",
+ "\u5343>Sen;",
+ "\u5345>Sou;",
+ "\u5346>Sotsu;",
+ "\u5347>Shou;",
+ "\u5348>Go;",
+ "\u5349>Ki;",
+ "\u534A>Han;",
+ "\u534D>Ban;",
+ "\u5351>Hi;",
+ "\u5352>Sotsu;",
+ "\u5353>Taku;",
+ "\u5354>Kyou;",
+ "\u5357>Nan;",
+ "\u5358>Tan;",
+ "\u535A>Haku;",
+ "\u535C>Boku;",
+ "\u535E>Hen;",
+ "\u5360>Sen;",
+ "\u5366>Ka;",
+ "\u5369>Setsu;",
+ "\u536E>Shi;",
+ "\u536F>Bou;",
+ "\u5370>In;",
+ "\u5371>Ki;",
+ "\u5373>Soku;",
+ "\u5374>Kyaku;",
+ "\u5375>Ran;",
+ "\u5377>Kan;",
+ "\u5378>Sha;",
+ "\u537B>Kyaku;",
+ "\u537F>Kyou;",
+ "\u5382>Kan;",
+ "\u5384>Yaku;",
+ "\u5396>Bou;",
+ "\u5398>Rin;",
+ "\u539A>Kou;",
+ "\u539F>Gen;",
+ "\u53A0>Shi;",
+ "\u53A5>Ketsu;",
+ "\u53A6>Ka;",
+ "\u53A8>Zu;",
+ "\u53A9>Kyuu;",
+ "\u53AD>En;",
+ "\u53AE>Shi;",
+ "\u53B0>Shou;",
+ "\u53B3>Gen;",
+ "\u53B6>Shi;",
+ "\u53BB>Kyo;",
+ "\u53C2>San;",
+ "\u53C3>San;",
+ "\u53C8>Yuu;",
+ "\u53C9>Sha;",
+ "\u53CA>Kyuu;",
+ "\u53CB>Yuu;",
+ "\u53CC>Sou;",
+ "\u53CD>Han;",
+ "\u53CE>Shuu;",
+ "\u53D4>Shuku;",
+ "\u53D6>Shu;",
+ "\u53D7>Ju;",
+ "\u53D9>Jo;",
+ "\u53DB>Han;",
+ "\u53DF>Sou;",
+ "\u53E1>Ei;",
+ "\u53E2>Sou;",
+ "\u53E3>Kou;",
+ "\u53E4>Ko;",
+ "\u53E5>Ku;",
+ "\u53E8>Tou;",
+ "\u53E9>Kou;",
+ "\u53EA>Shi;",
+ "\u53EB>Kyou;",
+ "\u53EC>Shou;",
+ "\u53ED>Hatsu;",
+ "\u53EE>Tei;",
+ "\u53EF>Ka;",
+ "\u53F0>Dai;",
+ "\u53F1>Shitsu;",
+ "\u53F2>Shi;",
+ "\u53F3>U;",
+ "\u53F6>Kyou;",
+ "\u53F7>Gou;",
+ "\u53F8>Shi;",
+ "\u5401>Ku;",
+ "\u5403>Kitsu;",
+ "\u5404>Kaku;",
+ "\u5408>Gou;",
+ "\u5409>Kichi;",
+ "\u540A>Chou;",
+ "\u540B>Sun;",
+ "\u540C>Dou;",
+ "\u540D>Mei;",
+ "\u540E>Kou;",
+ "\u540F>Ri;",
+ "\u5410>To;",
+ "\u5411>Kou;",
+ "\u541B>Kun;",
+ "\u541D>Rin;",
+ "\u541F>Gin;",
+ "\u5420>Hai;",
+ "\u5426>Hi;",
+ "\u5429>Fun;",
+ "\u542B>Gan;",
+ "\u542C>Kin;",
+ "\u542D>Kou;",
+ "\u542E>Sen;",
+ "\u5436>Totsu;",
+ "\u5438>Kyuu;",
+ "\u5439>Sui;",
+ "\u543B>Fun;",
+ "\u543C>Kou;",
+ "\u543D>In;",
+ "\u543E>Go;",
+ "\u5440>Ga;",
+ "\u5442>Ryo;",
+ "\u5446>Bou;",
+ "\u5448>Tei;",
+ "\u5449>Go;",
+ "\u544A>Koku;",
+ "\u544E>Seki;",
+ "\u5451>Don;",
+ "\u545F>Gen;",
+ "\u5468>Shuu;",
+ "\u546A>Ju;",
+ "\u5470>Shi;",
+ "\u5471>Ko;",
+ "\u5473>Mi;",
+ "\u5475>Ka;",
+ "\u5476>Do;",
+ "\u5477>Kou;",
+ "\u547B>Shin;",
+ "\u547C>Ko;",
+ "\u547D>Mei;",
+ "\u5480>So;",
+ "\u5484>Totsu;",
+ "\u5486>Hou;",
+ "\u548B>Saku;",
+ "\u548C>Wa;",
+ "\u548E>Kyuu;",
+ "\u548F>Ei;",
+ "\u5490>Ho;",
+ "\u5492>Shu;",
+ "\u54A2>Gaku;",
+ "\u54A4>Ta;",
+ "\u54A5>Ki;",
+ "\u54A8>Shi;",
+ "\u54AB>Shi;",
+ "\u54AC>Kou;",
+ "\u54AF>Kaku;",
+ "\u54B2>Shou;",
+ "\u54B3>Gai;",
+ "\u54B8>Kan;",
+ "\u54BC>Ka;",
+ "\u54BD>In;",
+ "\u54BE>Rou;",
+ "\u54C0>Ai;",
+ "\u54C1>Hin;",
+ "\u54C2>Shin;",
+ "\u54C4>Kou;",
+ "\u54C7>Ai;",
+ "\u54C8>Gou;",
+ "\u54C9>Sai;",
+ "\u54E1>In;",
+ "\u54E2>Rou;",
+ "\u54E5>Ka;",
+ "\u54E6>Ga;",
+ "\u54E8>Shou;",
+ "\u54E9>Ri;",
+ "\u54ED>Koku;",
+ "\u54EE>Kou;",
+ "\u54F2>Tetsu;",
+ "\u54FA>Ho;",
+ "\u54FD>Kou;",
+ "\u5504>Bai;",
+ "\u5506>Sa;",
+ "\u5507>Shin;",
+ "\u550F>Ki;",
+ "\u5510>Tou;",
+ "\u5514>Go;",
+ "\u5516>A;",
+ "\u552E>Shuu;",
+ "\u552F>Yui;",
+ "\u5531>Shou;",
+ "\u5533>Rei;",
+ "\u5538>Ten;",
+ "\u5539>Yo;",
+ "\u553E>Da;",
+ "\u5540>Gai;",
+ "\u5544>Taku;",
+ "\u5545>Taku;",
+ "\u5546>Shou;",
+ "\u554C>Kou;",
+ "\u554F>Mon;",
+ "\u5553>Kei;",
+ "\u5556>Tan;",
+ "\u5557>Tan;",
+ "\u555C>Setsu;",
+ "\u555D>Ka;",
+ "\u5563>Kan;",
+ "\u557B>Shi;",
+ "\u557C>Tei;",
+ "\u557E>Shuu;",
+ "\u5580>Kaku;",
+ "\u5583>Nan;",
+ "\u5584>Zen;",
+ "\u5587>Ratsu;",
+ "\u5589>Kou;",
+ "\u558A>Kan;",
+ "\u558B>Chou;",
+ "\u5598>Zen;",
+ "\u5599>Kai;",
+ "\u559A>Kan;",
+ "\u559C>Ki;",
+ "\u559D>Katsu;",
+ "\u559E>Soku;",
+ "\u559F>Ki;",
+ "\u55A7>Ken;",
+ "\u55A8>Ryou;",
+ "\u55A9>Yu;",
+ "\u55AA>Sou;",
+ "\u55AB>Kitsu;",
+ "\u55AC>Kyou;",
+ "\u55AE>Tan;",
+ "\u55B6>Ei;",
+ "\u55C4>Sa;",
+ "\u55C5>Kyuu;",
+ "\u55C7>Shoku;",
+ "\u55D4>Shin;",
+ "\u55DA>O;",
+ "\u55DC>Shi;",
+ "\u55DF>Sa;",
+ "\u55E3>Shi;",
+ "\u55E4>Shi;",
+ "\u55F7>Gou;",
+ "\u55F9>Ren;",
+ "\u55FD>Soku;",
+ "\u55FE>Sou;",
+ "\u5606>Tan;",
+ "\u5609>Ka;",
+ "\u5614>Ou;",
+ "\u5616>Saku;",
+ "\u5617>Shou;",
+ "\u5618>Kyo;",
+ "\u561B>Ma;",
+ "\u5629>Ka;",
+ "\u562F>Shou;",
+ "\u5631>Shoku;",
+ "\u5632>Tou;",
+ "\u5634>Shi;",
+ "\u5636>Sei;",
+ "\u5638>Bu;",
+ "\u5642>Son;",
+ "\u564C>Sou;",
+ "\u564E>Itsu;",
+ "\u5650>Ki;",
+ "\u565B>Gou;",
+ "\u5664>Kin;",
+ "\u5668>Ki;",
+ "\u566A>Sou;",
+ "\u566B>I;",
+ "\u566C>Zei;",
+ "\u5674>Fun;",
+ "\u5678>Ton;",
+ "\u5680>Dei;",
+ "\u5686>Kou;",
+ "\u5687>Kaku;",
+ "\u568A>Hi;",
+ "\u568F>Tei;",
+ "\u5694>Tei;",
+ "\u56A0>Ryuu;",
+ "\u56A2>Nou;",
+ "\u56A5>En;",
+ "\u56AE>Kou;",
+ "\u56B4>Gen;",
+ "\u56B6>Ou;",
+ "\u56BC>Shaku;",
+ "\u56C0>Ten;",
+ "\u56C1>Shou;",
+ "\u56C2>Gou;",
+ "\u56C3>Sou;",
+ "\u56C8>Gei;",
+ "\u56CE>So;",
+ "\u56D1>Shoku;",
+ "\u56D3>Ketsu;",
+ "\u56D7>I;",
+ "\u56D8>Kai;",
+ "\u56DA>Shuu;",
+ "\u56DB>Shi;",
+ "\u56DE>Kai;",
+ "\u56E0>In;",
+ "\u56E3>Dan;",
+ "\u56EE>Ka;",
+ "\u56F0>Kon;",
+ "\u56F2>I;",
+ "\u56F3>To;",
+ "\u56F9>Rei;",
+ "\u56FA>Ko;",
+ "\u56FD>Koku;",
+ "\u56FF>Yuu;",
+ "\u5700>Koku;",
+ "\u5703>Ho;",
+ "\u5704>Gyo;",
+ "\u5708>Ken;",
+ "\u5709>Gyo;",
+ "\u570B>Koku;",
+ "\u570D>I;",
+ "\u570F>Ken;",
+ "\u5712>En;",
+ "\u5713>En;",
+ "\u5716>To;",
+ "\u5718>Dan;",
+ "\u571C>Kan;",
+ "\u571F>Do;",
+ "\u5727>Atsu;",
+ "\u5728>Zai;",
+ "\u572D>Kei;",
+ "\u5730>Chi;",
+ "\u573B>Ki;",
+ "\u5740>Shi;",
+ "\u5742>Han;",
+ "\u5747>Kin;",
+ "\u574A>Bou;",
+ "\u574E>Kan;",
+ "\u574F>Hai;",
+ "\u5750>Za;",
+ "\u5751>Kou;",
+ "\u5761>Ha;",
+ "\u5764>Kon;",
+ "\u5766>Tan;",
+ "\u5769>Kan;",
+ "\u576A>Hei;",
+ "\u577F>Fu;",
+ "\u5782>Sui;",
+ "\u5788>Tai;",
+ "\u5789>Hou;",
+ "\u578B>Kei;",
+ "\u5793>Gai;",
+ "\u57A0>Gin;",
+ "\u57A2>Kou;",
+ "\u57A3>En;",
+ "\u57A4>Tetsu;",
+ "\u57C0>Sui;",
+ "\u57C3>Ai;",
+ "\u57C6>Kaku;",
+ "\u57CB>Mai;",
+ "\u57CE>Jou;",
+ "\u57D2>Rachi;",
+ "\u57D3>Rachi;",
+ "\u57D4>Ho;",
+ "\u57DC>Sho;",
+ "\u57DF>Iki;",
+ "\u57E0>Fu;",
+ "\u57E3>Sai;",
+ "\u57F4>Shoku;",
+ "\u57F7>Shitsu;",
+ "\u57F9>Bai;",
+ "\u57FA>Ki;",
+ "\u57FC>Ki;",
+ "\u5800>Kutsu;",
+ "\u5802>Dou;",
+ "\u5805>Ken;",
+ "\u5806>Tai;",
+ "\u580A>A;",
+ "\u580B>Hou;",
+ "\u5815>Da;",
+ "\u5819>In;",
+ "\u581D>Ka;",
+ "\u5821>Hou;",
+ "\u5824>Tei;",
+ "\u582A>Kan;",
+ "\u582F>Gyou;",
+ "\u5830>En;",
+ "\u5831>Hou;",
+ "\u5834>Jou;",
+ "\u5835>To;",
+ "\u583A>Kai;",
+ "\u583D>Kou;",
+ "\u5841>Rui;",
+ "\u584A>Kai;",
+ "\u584B>Ei;",
+ "\u5851>So;",
+ "\u5852>Shi;",
+ "\u5854>Tou;",
+ "\u5857>To;",
+ "\u5858>Tou;",
+ "\u5859>Kaku;",
+ "\u585A>Chou;",
+ "\u585E>Soku;",
+ "\u5862>O;",
+ "\u5869>En;",
+ "\u586B>Ten;",
+ "\u5872>Jou;",
+ "\u5875>Jin;",
+ "\u5879>Zan;",
+ "\u587E>Juku;",
+ "\u5883>Kyou;",
+ "\u5885>Sho;",
+ "\u5893>Bo;",
+ "\u5897>Zou;",
+ "\u589C>Tsui;",
+ "\u589F>Kyo;",
+ "\u58A8>Boku;",
+ "\u58AB>Shun;",
+ "\u58AE>Da;",
+ "\u58B3>Fun;",
+ "\u58B8>Sho;",
+ "\u58BA>Ou;",
+ "\u58BB>Shou;",
+ "\u58BE>Kon;",
+ "\u58C1>Heki;",
+ "\u58C5>You;",
+ "\u58C7>Dan;",
+ "\u58CA>Kai;",
+ "\u58CC>Jou;",
+ "\u58D1>Gaku;",
+ "\u58D3>Atsu;",
+ "\u58D5>Gou;",
+ "\u58D8>Rui;",
+ "\u58D9>Kou;",
+ "\u58DC>Tan;",
+ "\u58DE>Kai;",
+ "\u58DF>Ryou;",
+ "\u58E4>Jou;",
+ "\u58E5>Ten;",
+ "\u58EB>Shi;",
+ "\u58EC>Jin;",
+ "\u58EE>Sou;",
+ "\u58EF>Sou;",
+ "\u58F0>Sei;",
+ "\u58F1>Ichi;",
+ "\u58F2>Bai;",
+ "\u58F7>Ko;",
+ "\u58F9>Ichi;",
+ "\u58FA>Ko;",
+ "\u58FB>Sei;",
+ "\u58FC>Kon;",
+ "\u58FD>Ju;",
+ "\u5902>Chi;",
+ "\u5909>Hen;",
+ "\u590A>Sui;",
+ "\u590F>Ka;",
+ "\u5910>Kei;",
+ "\u5915>Seki;",
+ "\u5916>Gai;",
+ "\u5918>Bou;",
+ "\u5919>Shuku;",
+ "\u591A>Ta;",
+ "\u591B>Ta;",
+ "\u591C>Ya;",
+ "\u5922>Mu;",
+ "\u5925>Ka;",
+ "\u5927>Tai;",
+ "\u5929>Ten;",
+ "\u592A>Ta;",
+ "\u592B>Fu;",
+ "\u592C>Ketsu;",
+ "\u592D>You;",
+ "\u592E>Ou;",
+ "\u5931>Shitsu;",
+ "\u5932>Tou;",
+ "\u5937>I;",
+ "\u5938>Ko;",
+ "\u593E>Kou;",
+ "\u5944>En;",
+ "\u5947>Ki;",
+ "\u5948>Na;",
+ "\u5949>Hou;",
+ "\u594E>Kei;",
+ "\u594F>Sou;",
+ "\u5950>Kan;",
+ "\u5951>Setsu;",
+ "\u5954>Hon;",
+ "\u5955>Eki;",
+ "\u5957>Tou;",
+ "\u5958>Jou;",
+ "\u595A>Kei;",
+ "\u5960>Ten;",
+ "\u5962>Sha;",
+ "\u5965>Ou;",
+ "\u5967>Ou;",
+ "\u5968>Shou;",
+ "\u5969>Ren;",
+ "\u596A>Datsu;",
+ "\u596C>Shou;",
+ "\u596E>Fun;",
+ "\u5973>Jo;",
+ "\u5974>Do;",
+ "\u5978>Kan;",
+ "\u597D>Kou;",
+ "\u5981>Shaku;",
+ "\u5982>Jo;",
+ "\u5983>Hi;",
+ "\u5984>Bou;",
+ "\u598A>Nin;",
+ "\u598D>Ken;",
+ "\u5993>Ki;",
+ "\u5996>You;",
+ "\u5999>Myou;",
+ "\u599B>Shi;",
+ "\u599D>Sou;",
+ "\u59A3>Hi;",
+ "\u59A5>Da;",
+ "\u59A8>Bou;",
+ "\u59AC>To;",
+ "\u59B2>Datsu;",
+ "\u59B9>Mai;",
+ "\u59BB>Sai;",
+ "\u59BE>Shou;",
+ "\u59C6>Bo;",
+ "\u59C9>Shi;",
+ "\u59CB>Shi;",
+ "\u59D0>So;",
+ "\u59D1>Ko;",
+ "\u59D3>Sei;",
+ "\u59D4>I;",
+ "\u59D9>Nin;",
+ "\u59DA>You;",
+ "\u59DC>Kyou;",
+ "\u59E5>Bo;",
+ "\u59E6>Kan;",
+ "\u59E8>I;",
+ "\u59EA>Tetsu;",
+ "\u59EB>Ki;",
+ "\u59F6>Ou;",
+ "\u59FB>In;",
+ "\u59FF>Shi;",
+ "\u5A01>I;",
+ "\u5A03>A;",
+ "\u5A09>Hei;",
+ "\u5A11>Sha;",
+ "\u5A18>Jou;",
+ "\u5A1A>Nan;",
+ "\u5A1C>Da;",
+ "\u5A1F>Ken;",
+ "\u5A20>Shin;",
+ "\u5A25>Ga;",
+ "\u5A29>Ben;",
+ "\u5A2F>Go;",
+ "\u5A35>Shu;",
+ "\u5A36>Shu;",
+ "\u5A3C>Shou;",
+ "\u5A40>A;",
+ "\u5A41>Rou;",
+ "\u5A46>Ba;",
+ "\u5A49>En;",
+ "\u5A5A>Kon;",
+ "\u5A62>Hi;",
+ "\u5A66>Fu;",
+ "\u5A6A>Ran;",
+ "\u5A6C>In;",
+ "\u5A7F>Sei;",
+ "\u5A92>Bai;",
+ "\u5A9A>Bi;",
+ "\u5A9B>En;",
+ "\u5ABC>Ou;",
+ "\u5ABD>Bo;",
+ "\u5ABE>Kou;",
+ "\u5AC1>Ka;",
+ "\u5AC2>Sou;",
+ "\u5AC9>Shitsu;",
+ "\u5ACB>Jou;",
+ "\u5ACC>Ken;",
+ "\u5AD0>Jou;",
+ "\u5AD6>Hyou;",
+ "\u5AD7>Ou;",
+ "\u5AE1>Chaku;",
+ "\u5AE3>En;",
+ "\u5AE6>Kou;",
+ "\u5AE9>Don;",
+ "\u5AFA>Kan;",
+ "\u5AFB>Kan;",
+ "\u5B09>Ki;",
+ "\u5B0B>Sen;",
+ "\u5B0C>Kyou;",
+ "\u5B16>Hei;",
+ "\u5B22>Jou;",
+ "\u5B2A>Hin;",
+ "\u5B2C>Shu;",
+ "\u5B30>Ei;",
+ "\u5B32>Jou;",
+ "\u5B3E>Ran;",
+ "\u5B40>Sou;",
+ "\u5B43>Jou;",
+ "\u5B45>Sen;",
+ "\u5B50>Shi;",
+ "\u5B51>Getsu;",
+ "\u5B54>Kou;",
+ "\u5B55>You;",
+ "\u5B57>Ji;",
+ "\u5B58>Son;",
+ "\u5B5A>Fu;",
+ "\u5B5B>Botsu;",
+ "\u5B5C>Shi;",
+ "\u5B5D>Kou;",
+ "\u5B5F>Mou;",
+ "\u5B63>Ki;",
+ "\u5B64>Ko;",
+ "\u5B65>Do;",
+ "\u5B66>Gaku;",
+ "\u5B69>Kai;",
+ "\u5B6B>Son;",
+ "\u5B70>Juku;",
+ "\u5B71>Sen;",
+ "\u5B73>Shi;",
+ "\u5B75>Fu;",
+ "\u5B78>Gaku;",
+ "\u5B7A>Ju;",
+ "\u5B80>Ben;",
+ "\u5B83>Ta;",
+ "\u5B85>Taku;",
+ "\u5B87>U;",
+ "\u5B88>Shu;",
+ "\u5B89>An;",
+ "\u5B8B>Sou;",
+ "\u5B8C>Kan;",
+ "\u5B8D>Niku;",
+ "\u5B8F>Kou;",
+ "\u5B95>Tou;",
+ "\u5B97>Shuu;",
+ "\u5B98>Kan;",
+ "\u5B99>Chuu;",
+ "\u5B9A>Tei;",
+ "\u5B9B>En;",
+ "\u5B9C>Gi;",
+ "\u5B9D>Hou;",
+ "\u5B9F>Jitsu;",
+ "\u5BA2>Kyaku;",
+ "\u5BA3>Sen;",
+ "\u5BA4>Shitsu;",
+ "\u5BA5>Yuu;",
+ "\u5BA6>Kan;",
+ "\u5BAE>Kyuu;",
+ "\u5BB0>Sai;",
+ "\u5BB3>Gai;",
+ "\u5BB4>En;",
+ "\u5BB5>Shou;",
+ "\u5BB6>Ka;",
+ "\u5BB8>Shin;",
+ "\u5BB9>You;",
+ "\u5BBF>Shuku;",
+ "\u5BC2>Jaku;",
+ "\u5BC3>En;",
+ "\u5BC4>Ki;",
+ "\u5BC5>In;",
+ "\u5BC6>Mitsu;",
+ "\u5BC7>Kou;",
+ "\u5BC9>Kaku;",
+ "\u5BCC>Fu;",
+ "\u5BD0>Bi;",
+ "\u5BD2>Kan;",
+ "\u5BD3>Guu;",
+ "\u5BD4>Shoku;",
+ "\u5BDB>Kan;",
+ "\u5BDD>Shin;",
+ "\u5BDE>Baku;",
+ "\u5BDF>Satsu;",
+ "\u5BE1>Ka;",
+ "\u5BE2>Shin;",
+ "\u5BE4>Go;",
+ "\u5BE5>Ryou;",
+ "\u5BE6>Jitsu;",
+ "\u5BE7>Nei;",
+ "\u5BE8>Sai;",
+ "\u5BE9>Shin;",
+ "\u5BEB>Sha;",
+ "\u5BEE>Ryou;",
+ "\u5BF0>Kan;",
+ "\u5BF3>Hou;",
+ "\u5BF5>Chou;",
+ "\u5BF6>Hou;",
+ "\u5BF8>Sun;",
+ "\u5BFA>Ji;",
+ "\u5BFE>Tai;",
+ "\u5BFF>Ju;",
+ "\u5C01>Fuu;",
+ "\u5C02>Sen;",
+ "\u5C04>Sha;",
+ "\u5C05>Koku;",
+ "\u5C06>Shou;",
+ "\u5C07>Shou;",
+ "\u5C08>Sen;",
+ "\u5C09>I;",
+ "\u5C0A>Son;",
+ "\u5C0B>Jin;",
+ "\u5C0D>Tai;",
+ "\u5C0E>Dou;",
+ "\u5C0F>Shou;",
+ "\u5C11>Shou;",
+ "\u5C13>Ji;",
+ "\u5C16>Sen;",
+ "\u5C1A>Shou;",
+ "\u5C20>Sen;",
+ "\u5C22>Ou;",
+ "\u5C24>Yuu;",
+ "\u5C28>Bou;",
+ "\u5C2D>Gyou;",
+ "\u5C31>Shuu;",
+ "\u5C38>Shi;",
+ "\u5C39>In;",
+ "\u5C3A>Shaku;",
+ "\u5C3B>Kou;",
+ "\u5C3C>Ni;",
+ "\u5C3D>Jin;",
+ "\u5C3E>Bi;",
+ "\u5C3F>Nyou;",
+ "\u5C40>Kyoku;",
+ "\u5C41>Hi;",
+ "\u5C45>Kyo;",
+ "\u5C46>Kai;",
+ "\u5C48>Kutsu;",
+ "\u5C4A>Kai;",
+ "\u5C4B>Oku;",
+ "\u5C4D>Shi;",
+ "\u5C4E>Shi;",
+ "\u5C4F>Hei;",
+ "\u5C50>Geki;",
+ "\u5C51>Setsu;",
+ "\u5C53>Ki;",
+ "\u5C55>Ten;",
+ "\u5C5E>Zoku;",
+ "\u5C60>To;",
+ "\u5C61>Ru;",
+ "\u5C64>Sou;",
+ "\u5C65>Ri;",
+ "\u5C6C>Zoku;",
+ "\u5C6E>Sa;",
+ "\u5C6F>Ton;",
+ "\u5C71>San;",
+ "\u5C79>Kitsu;",
+ "\u5C8C>Kyuu;",
+ "\u5C90>Ki;",
+ "\u5C91>Shin;",
+ "\u5C94>Sa;",
+ "\u5CA1>Kou;",
+ "\u5CA8>So;",
+ "\u5CA9>Gan;",
+ "\u5CAB>Shuu;",
+ "\u5CAC>Kou;",
+ "\u5CB1>Tai;",
+ "\u5CB3>Gaku;",
+ "\u5CB6>Haku;",
+ "\u5CB7>Bin;",
+ "\u5CB8>Gan;",
+ "\u5CBB>Ji;",
+ "\u5CBE>Sen;",
+ "\u5CC7>Kou;",
+ "\u5CD9>Ji;",
+ "\u5CE1>Kyou;",
+ "\u5CE8>Ga;",
+ "\u5CE9>Ga;",
+ "\u5CEA>Yoku;",
+ "\u5CED>Shou;",
+ "\u5CEF>Hou;",
+ "\u5CF0>Hou;",
+ "\u5CF6>Tou;",
+ "\u5CFA>Kou;",
+ "\u5CFB>Shun;",
+ "\u5CFD>Kyou;",
+ "\u5D07>Suu;",
+ "\u5D0B>Ka;",
+ "\u5D0E>Ki;",
+ "\u5D11>Kon;",
+ "\u5D14>Sai;",
+ "\u5D15>Gai;",
+ "\u5D16>Gai;",
+ "\u5D17>Kou;",
+ "\u5D18>Ron;",
+ "\u5D19>Ron;",
+ "\u5D1A>Ryou;",
+ "\u5D1B>Kutsu;",
+ "\u5D1F>Gin;",
+ "\u5D22>Sou;",
+ "\u5D29>Hou;",
+ "\u5D4B>Bi;",
+ "\u5D4C>Kan;",
+ "\u5D4E>Guu;",
+ "\u5D50>Ran;",
+ "\u5D52>Gan;",
+ "\u5D5C>Ki;",
+ "\u5D69>Suu;",
+ "\u5D6C>Kai;",
+ "\u5D6F>Sa;",
+ "\u5D73>Sa;",
+ "\u5D82>Shou;",
+ "\u5D84>San;",
+ "\u5D87>Ku;",
+ "\u5D8B>Tou;",
+ "\u5D8C>Tou;",
+ "\u5D90>Ryuu;",
+ "\u5D9D>Tou;",
+ "\u5DA2>Gyou;",
+ "\u5DAC>Gi;",
+ "\u5DAE>Ken;",
+ "\u5DB7>Gi;",
+ "\u5DBA>Rei;",
+ "\u5DBC>Sho;",
+ "\u5DBD>Gaku;",
+ "\u5DC9>San;",
+ "\u5DCC>Gan;",
+ "\u5DCD>Gi;",
+ "\u5DD2>Ran;",
+ "\u5DD3>Ten;",
+ "\u5DD6>Gan;",
+ "\u5DDB>Sen;",
+ "\u5DDD>Sen;",
+ "\u5DDE>Shuu;",
+ "\u5DE1>Jun;",
+ "\u5DE3>Sou;",
+ "\u5DE5>Kou;",
+ "\u5DE6>Sa;",
+ "\u5DE7>Kou;",
+ "\u5DE8>Kyo;",
+ "\u5DEB>Fu;",
+ "\u5DEE>Shi;",
+ "\u5DF1>Ki;",
+ "\u5DF2>I;",
+ "\u5DF3>Shi;",
+ "\u5DF4>Ha;",
+ "\u5DF5>Shi;",
+ "\u5DF7>Kou;",
+ "\u5DFB>Kan;",
+ "\u5DFD>Son;",
+ "\u5DFE>Kin;",
+ "\u5E02>Shi;",
+ "\u5E03>Fu;",
+ "\u5E06>Han;",
+ "\u5E0B>Shi;",
+ "\u5E0C>Ki;",
+ "\u5E11>Do;",
+ "\u5E16>Jou;",
+ "\u5E19>Chitsu;",
+ "\u5E1A>Sou;",
+ "\u5E1B>Haku;",
+ "\u5E1D>Tei;",
+ "\u5E25>Sotsu;",
+ "\u5E2B>Shi;",
+ "\u5E2D>Seki;",
+ "\u5E2F>Tai;",
+ "\u5E30>Ki;",
+ "\u5E33>Chou;",
+ "\u5E36>Tai;",
+ "\u5E37>I;",
+ "\u5E38>Jou;",
+ "\u5E3D>Bou;",
+ "\u5E40>Tei;",
+ "\u5E43>I;",
+ "\u5E44>Aku;",
+ "\u5E45>Fuku;",
+ "\u5E47>Hou;",
+ "\u5E4C>Kou;",
+ "\u5E4E>Beki;",
+ "\u5E54>Ban;",
+ "\u5E55>Maku;",
+ "\u5E57>Kaku;",
+ "\u5E5F>Shi;",
+ "\u5E61>Han;",
+ "\u5E62>Tou;",
+ "\u5E63>Hei;",
+ "\u5E64>Hei;",
+ "\u5E72>Kan;",
+ "\u5E73>Hei;",
+ "\u5E74>Nen;",
+ "\u5E75>Ken;",
+ "\u5E76>Hei;",
+ "\u5E78>Kou;",
+ "\u5E79>Kan;",
+ "\u5E7A>You;",
+ "\u5E7B>Gen;",
+ "\u5E7C>You;",
+ "\u5E7D>Yuu;",
+ "\u5E7E>Ki;",
+ "\u5E7F>Gen;",
+ "\u5E81>Chou;",
+ "\u5E83>Kou;",
+ "\u5E84>Sou;",
+ "\u5E87>Hi;",
+ "\u5E8A>Shou;",
+ "\u5E8F>Jo;",
+ "\u5E95>Tei;",
+ "\u5E96>Hou;",
+ "\u5E97>Ten;",
+ "\u5E9A>Kou;",
+ "\u5E9C>Fu;",
+ "\u5EA0>Shou;",
+ "\u5EA6>Taku;",
+ "\u5EA7>Za;",
+ "\u5EAB>Ko;",
+ "\u5EAD>Tei;",
+ "\u5EB5>An;",
+ "\u5EB6>Sho;",
+ "\u5EB7>Kou;",
+ "\u5EB8>You;",
+ "\u5EC1>Shi;",
+ "\u5EC2>Shou;",
+ "\u5EC3>Hai;",
+ "\u5EC8>Ka;",
+ "\u5EC9>Ren;",
+ "\u5ECA>Rou;",
+ "\u5ED0>Kyuu;",
+ "\u5ED3>Kaku;",
+ "\u5ED6>Ryou;",
+ "\u5EDA>Zu;",
+ "\u5EDB>Ten;",
+ "\u5EDD>Shi;",
+ "\u5EDF>Byou;",
+ "\u5EE0>Shou;",
+ "\u5EE1>Bu;",
+ "\u5EE2>Hai;",
+ "\u5EE3>Kou;",
+ "\u5EE8>Kai;",
+ "\u5EE9>Rin;",
+ "\u5EEC>Ryo;",
+ "\u5EF0>Chou;",
+ "\u5EF1>You;",
+ "\u5EF3>Chou;",
+ "\u5EF4>In;",
+ "\u5EF6>En;",
+ "\u5EF7>Tei;",
+ "\u5EF8>Teki;",
+ "\u5EFA>Ken;",
+ "\u5EFB>Kai;",
+ "\u5EFC>Dai;",
+ "\u5EFE>Kyou;",
+ "\u5EFF>Juu;",
+ "\u5F01>Ben;",
+ "\u5F03>Ki;",
+ "\u5F04>Rou;",
+ "\u5F09>Jou;",
+ "\u5F0A>Hei;",
+ "\u5F0B>Yoku;",
+ "\u5F0C>Itsu;",
+ "\u5F0D>Ni;",
+ "\u5F0F>Shiki;",
+ "\u5F10>Ni;",
+ "\u5F11>Shi;",
+ "\u5F13>Kyuu;",
+ "\u5F14>Chou;",
+ "\u5F15>In;",
+ "\u5F17>Futsu;",
+ "\u5F18>Kou;",
+ "\u5F1B>Shi;",
+ "\u5F1F>Tei;",
+ "\u5F25>Mi;",
+ "\u5F26>Gen;",
+ "\u5F27>Ko;",
+ "\u5F29>Do;",
+ "\u5F2D>Bi;",
+ "\u5F2F>Wan;",
+ "\u5F31>Jaku;",
+ "\u5F35>Chou;",
+ "\u5F37>Kyou;",
+ "\u5F38>Hou;",
+ "\u5F3C>Hitsu;",
+ "\u5F3E>Dan;",
+ "\u5F41>Sei;",
+ "\u5F48>Dan;",
+ "\u5F4A>Kyou;",
+ "\u5F4C>Bi;",
+ "\u5F4E>Wan;",
+ "\u5F51>Kei;",
+ "\u5F53>Tou;",
+ "\u5F56>Tan;",
+ "\u5F57>Sui;",
+ "\u5F59>I;",
+ "\u5F5C>I;",
+ "\u5F5D>I;",
+ "\u5F61>San;",
+ "\u5F62>Kei;",
+ "\u5F66>Gen;",
+ "\u5F69>Sai;",
+ "\u5F6A>Hyou;",
+ "\u5F6B>Chou;",
+ "\u5F6C>Hin;",
+ "\u5F6D>Hou;",
+ "\u5F70>Shou;",
+ "\u5F71>Ei;",
+ "\u5F73>Teki;",
+ "\u5F77>Hou;",
+ "\u5F79>Yaku;",
+ "\u5F7C>Hi;",
+ "\u5F7F>Futsu;",
+ "\u5F80>Ou;",
+ "\u5F81>Sei;",
+ "\u5F82>So;",
+ "\u5F83>Ou;",
+ "\u5F84>Kei;",
+ "\u5F85>Tai;",
+ "\u5F87>Shun;",
+ "\u5F88>Kon;",
+ "\u5F8A>Kai;",
+ "\u5F8B>Ritsu;",
+ "\u5F8C>Go;",
+ "\u5F90>Jo;",
+ "\u5F91>Kei;",
+ "\u5F92>To;",
+ "\u5F93>Juu;",
+ "\u5F97>Toku;",
+ "\u5F98>Hai;",
+ "\u5F99>Shi;",
+ "\u5F9E>Juu;",
+ "\u5FA0>Rai;",
+ "\u5FA1>Gyo;",
+ "\u5FA8>Kou;",
+ "\u5FA9>Fuku;",
+ "\u5FAA>Jun;",
+ "\u5FAD>You;",
+ "\u5FAE>Bi;",
+ "\u5FB3>Toku;",
+ "\u5FB4>Chou;",
+ "\u5FB9>Tetsu;",
+ "\u5FBC>Kyou;",
+ "\u5FBD>Ki;",
+ "\u5FC3>Shin;",
+ "\u5FC5>Hitsu;",
+ "\u5FCC>Ki;",
+ "\u5FCD>Nin;",
+ "\u5FD6>Son;",
+ "\u5FD7>Shi;",
+ "\u5FD8>Bou;",
+ "\u5FD9>Bou;",
+ "\u5FDC>Ou;",
+ "\u5FDD>Ten;",
+ "\u5FE0>Chuu;",
+ "\u5FE4>Go;",
+ "\u5FEB>Kai;",
+ "\u5FF0>Sui;",
+ "\u5FF1>Shin;",
+ "\u5FF5>Nen;",
+ "\u5FF8>Jiku;",
+ "\u5FFB>Kin;",
+ "\u5FFD>Kotsu;",
+ "\u5FFF>Fun;",
+ "\u600E>Shin;",
+ "\u600F>You;",
+ "\u6010>Kou;",
+ "\u6012>Do;",
+ "\u6015>Ha;",
+ "\u6016>Fu;",
+ "\u6019>Ko;",
+ "\u601B>Datsu;",
+ "\u601C>Rei;",
+ "\u601D>Shi;",
+ "\u6020>Tai;",
+ "\u6021>I;",
+ "\u6025>Kyuu;",
+ "\u6026>Hou;",
+ "\u6027>Sei;",
+ "\u6028>En;",
+ "\u6029>Ji;",
+ "\u602A>Kai;",
+ "\u602B>Futsu;",
+ "\u602F>Kyou;",
+ "\u6031>Sou;",
+ "\u6041>In;",
+ "\u6042>Jun;",
+ "\u6043>Ji;",
+ "\u6046>Kou;",
+ "\u604A>Kyou;",
+ "\u604B>Ren;",
+ "\u604D>Kou;",
+ "\u6050>Kyou;",
+ "\u6052>Kou;",
+ "\u6055>Jo;",
+ "\u6059>You;",
+ "\u605A>I;",
+ "\u605F>Kyou;",
+ "\u6060>Kai;",
+ "\u6062>Kai;",
+ "\u6063>Shi;",
+ "\u6064>Jutsu;",
+ "\u6065>Chi;",
+ "\u6068>Kon;",
+ "\u6069>On;",
+ "\u606A>Kaku;",
+ "\u606B>Dou;",
+ "\u606C>Ten;",
+ "\u606D>Kyou;",
+ "\u606F>Soku;",
+ "\u6070>Kou;",
+ "\u6075>Kei;",
+ "\u6077>Kyuu;",
+ "\u6081>En;",
+ "\u6083>Kon;",
+ "\u6084>Shou;",
+ "\u6089>Shitsu;",
+ "\u608B>Rin;",
+ "\u608C>Tei;",
+ "\u608D>Kan;",
+ "\u6092>Yuu;",
+ "\u6094>Kai;",
+ "\u6096>Hai;",
+ "\u6097>Ban;",
+ "\u609A>Shou;",
+ "\u609B>Sen;",
+ "\u609F>Go;",
+ "\u60A0>Yuu;",
+ "\u60A3>Kan;",
+ "\u60A6>Etsu;",
+ "\u60A7>Ri;",
+ "\u60A9>Nou;",
+ "\u60AA>Aku;",
+ "\u60B2>Hi;",
+ "\u60B3>Toku;",
+ "\u60B4>Sui;",
+ "\u60B5>Chou;",
+ "\u60B6>Mon;",
+ "\u60B8>Ki;",
+ "\u60BC>Tou;",
+ "\u60BD>Sei;",
+ "\u60C5>Jou;",
+ "\u60C6>Chuu;",
+ "\u60C7>Ton;",
+ "\u60D1>Waku;",
+ "\u60D3>Ken;",
+ "\u60D8>Bou;",
+ "\u60DA>Kotsu;",
+ "\u60DC>Seki;",
+ "\u60DF>I;",
+ "\u60E0>Kei;",
+ "\u60E1>O;",
+ "\u60E3>Sou;",
+ "\u60E7>Ku;",
+ "\u60E8>San;",
+ "\u60F0>Da;",
+ "\u60F1>Nou;",
+ "\u60F3>Sou;",
+ "\u60F4>Zui;",
+ "\u60F6>Kou;",
+ "\u60F7>Shun;",
+ "\u60F9>Ja;",
+ "\u60FA>Sei;",
+ "\u60FB>Soku;",
+ "\u6100>Shou;",
+ "\u6101>Shuu;",
+ "\u6103>Ken;",
+ "\u6106>Ken;",
+ "\u6108>Yu;",
+ "\u6109>Yu;",
+ "\u610D>Bin;",
+ "\u610E>Hyoku;",
+ "\u610F>I;",
+ "\u6115>Gaku;",
+ "\u611A>Gu;",
+ "\u611B>Ai;",
+ "\u611F>Kan;",
+ "\u6121>Sou;",
+ "\u6127>Ki;",
+ "\u6128>Kaku;",
+ "\u612C>So;",
+ "\u6134>Sou;",
+ "\u613C>Shin;",
+ "\u613D>Haku;",
+ "\u613E>Ki;",
+ "\u613F>Gen;",
+ "\u6142>You;",
+ "\u6144>Ritsu;",
+ "\u6147>In;",
+ "\u6148>Ji;",
+ "\u614A>Ken;",
+ "\u614B>Tai;",
+ "\u614C>Kou;",
+ "\u614D>Un;",
+ "\u614E>Shin;",
+ "\u6153>Hyou;",
+ "\u6155>Bo;",
+ "\u6158>San;",
+ "\u6159>Zan;",
+ "\u615A>Zan;",
+ "\u615D>Toku;",
+ "\u615F>Dou;",
+ "\u6162>Man;",
+ "\u6163>Kan;",
+ "\u6165>Zou;",
+ "\u6167>Kei;",
+ "\u6168>Gai;",
+ "\u616B>Shou;",
+ "\u616E>Ryo;",
+ "\u616F>Shou;",
+ "\u6170>I;",
+ "\u6171>Tan;",
+ "\u6173>Kan;",
+ "\u6174>Shou;",
+ "\u6175>You;",
+ "\u6176>Kei;",
+ "\u6177>Kou;",
+ "\u617E>Yoku;",
+ "\u6182>Yuu;",
+ "\u6187>Kei;",
+ "\u618A>Hai;",
+ "\u618E>Zou;",
+ "\u6190>Ren;",
+ "\u6191>Hyou;",
+ "\u6194>Shou;",
+ "\u6196>Gin;",
+ "\u6199>Ki;",
+ "\u619A>Tan;",
+ "\u61A4>Fun;",
+ "\u61A7>Dou;",
+ "\u61A9>Kei;",
+ "\u61AB>Bin;",
+ "\u61AC>Kei;",
+ "\u61AE>Bu;",
+ "\u61B2>Ken;",
+ "\u61B6>Oku;",
+ "\u61BA>Tan;",
+ "\u61BE>Kan;",
+ "\u61C3>Kin;",
+ "\u61C6>Sou;",
+ "\u61C7>Kon;",
+ "\u61C8>Kai;",
+ "\u61C9>You;",
+ "\u61CA>Ou;",
+ "\u61CB>Bou;",
+ "\u61CC>Eki;",
+ "\u61CD>Rin;",
+ "\u61D0>Kai;",
+ "\u61E3>Mon;",
+ "\u61E6>Da;",
+ "\u61F2>Chou;",
+ "\u61F4>Zan;",
+ "\u61F6>Ran;",
+ "\u61F7>Kai;",
+ "\u61F8>Ken;",
+ "\u61FA>Zan;",
+ "\u61FC>Ku;",
+ "\u61FD>Kan;",
+ "\u61FE>Shou;",
+ "\u61FF>I;",
+ "\u6200>Ren;",
+ "\u6208>Ka;",
+ "\u6209>Etsu;",
+ "\u620A>Bo;",
+ "\u620C>Jutsu;",
+ "\u620D>Ju;",
+ "\u620E>Juu;",
+ "\u6210>Sei;",
+ "\u6211>Ga;",
+ "\u6212>Kai;",
+ "\u6214>San;",
+ "\u6216>Waku;",
+ "\u621A>Seki;",
+ "\u621B>Katsu;",
+ "\u621D>Zoku;",
+ "\u621E>Katsu;",
+ "\u621F>Geki;",
+ "\u6221>Kan;",
+ "\u6226>Sen;",
+ "\u622A>Setsu;",
+ "\u622E>Riku;",
+ "\u622F>Gi;",
+ "\u6230>Sen;",
+ "\u6232>Gi;",
+ "\u6233>Taku;",
+ "\u6234>Tai;",
+ "\u6238>Ko;",
+ "\u623B>Rei;",
+ "\u623F>Bou;",
+ "\u6240>Sho;",
+ "\u6241>Hen;",
+ "\u6247>Sen;",
+ "\u6248>Ko;",
+ "\u6249>Hi;",
+ "\u624B>Shu;",
+ "\u624D>Sai;",
+ "\u624E>Satsu;",
+ "\u6253>Da;",
+ "\u6255>Futsu;",
+ "\u6258>Taku;",
+ "\u625B>Kou;",
+ "\u625E>Kan;",
+ "\u6260>Sa;",
+ "\u6263>Kou;",
+ "\u626E>Fun;",
+ "\u6271>Sou;",
+ "\u6276>Fu;",
+ "\u6279>Hi;",
+ "\u627C>Aku;",
+ "\u627E>Ka;",
+ "\u627F>Shou;",
+ "\u6280>Gi;",
+ "\u6282>Kyou;",
+ "\u6283>Ben;",
+ "\u6284>Shou;",
+ "\u6289>Ketsu;",
+ "\u628A>Ha;",
+ "\u6291>Yoku;",
+ "\u6292>Jo;",
+ "\u6293>Sou;",
+ "\u6294>Hou;",
+ "\u6295>Tou;",
+ "\u6296>Tou;",
+ "\u6297>Kou;",
+ "\u6298>Setsu;",
+ "\u629B>Hou;",
+ "\u629C>Batsu;",
+ "\u629E>Taku;",
+ "\u62AB>Hi;",
+ "\u62AC>Tai;",
+ "\u62B1>Hou;",
+ "\u62B5>Tei;",
+ "\u62B9>Matsu;",
+ "\u62BB>Shin;",
+ "\u62BC>Ou;",
+ "\u62BD>Chuu;",
+ "\u62C2>Futsu;",
+ "\u62C5>Tan;",
+ "\u62C6>Taku;",
+ "\u62C7>Bo;",
+ "\u62C8>Den;",
+ "\u62C9>Ratsu;",
+ "\u62CA>Fu;",
+ "\u62CC>Han;",
+ "\u62CD>Haku;",
+ "\u62CF>Da;",
+ "\u62D0>Kai;",
+ "\u62D1>Kan;",
+ "\u62D2>Kyo;",
+ "\u62D3>Taku;",
+ "\u62D4>Batsu;",
+ "\u62D7>Ou;",
+ "\u62D8>Kou;",
+ "\u62D9>Setsu;",
+ "\u62DB>Shou;",
+ "\u62DC>Hai;",
+ "\u62DD>Hai;",
+ "\u62E0>Kyo;",
+ "\u62E1>Kaku;",
+ "\u62EC>Katsu;",
+ "\u62ED>Shiki;",
+ "\u62EE>Kitsu;",
+ "\u62EF>Jou;",
+ "\u62F1>Kyou;",
+ "\u62F3>Ken;",
+ "\u62F5>Son;",
+ "\u62F6>Satsu;",
+ "\u62F7>Gou;",
+ "\u62FE>Shuu;",
+ "\u62FF>Da;",
+ "\u6301>Ji;",
+ "\u6302>Kei;",
+ "\u6307>Shi;",
+ "\u6308>Ketsu;",
+ "\u6309>An;",
+ "\u630C>Kaku;",
+ "\u6311>Chou;",
+ "\u6319>Kyo;",
+ "\u631F>Kyou;",
+ "\u6327>Ku;",
+ "\u6328>Ai;",
+ "\u632B>Za;",
+ "\u632F>Shin;",
+ "\u633A>Tei;",
+ "\u633D>Ban;",
+ "\u633E>Kyou;",
+ "\u633F>Sou;",
+ "\u6349>Soku;",
+ "\u634C>Hatsu;",
+ "\u634D>Kan;",
+ "\u634F>Detsu;",
+ "\u6350>En;",
+ "\u6355>Ho;",
+ "\u6357>Ho;",
+ "\u635C>Sou;",
+ "\u6367>Hou;",
+ "\u6368>Sha;",
+ "\u6369>Retsu;",
+ "\u636B>Mon;",
+ "\u636E>Kyo;",
+ "\u6372>Ken;",
+ "\u6376>Sui;",
+ "\u6377>Shou;",
+ "\u637A>Natsu;",
+ "\u637B>Nen;",
+ "\u6380>Kin;",
+ "\u6383>Sou;",
+ "\u6388>Ju;",
+ "\u6389>Tou;",
+ "\u638C>Shou;",
+ "\u638E>Ki;",
+ "\u638F>Tou;",
+ "\u6392>Hai;",
+ "\u6396>Eki;",
+ "\u6398>Kutsu;",
+ "\u639B>Ka;",
+ "\u639F>Tou;",
+ "\u63A0>Ryaku;",
+ "\u63A1>Sai;",
+ "\u63A2>Tan;",
+ "\u63A3>Sei;",
+ "\u63A5>Setsu;",
+ "\u63A7>Kou;",
+ "\u63A8>Sui;",
+ "\u63A9>En;",
+ "\u63AA>So;",
+ "\u63AB>Sou;",
+ "\u63AC>Kiku;",
+ "\u63B2>Kei;",
+ "\u63B4>Kaku;",
+ "\u63BB>Sou;",
+ "\u63BE>En;",
+ "\u63C0>Kan;",
+ "\u63C3>Sen;",
+ "\u63C4>Yu;",
+ "\u63C6>Ki;",
+ "\u63C9>Juu;",
+ "\u63CF>Byou;",
+ "\u63D0>Tei;",
+ "\u63D2>Sou;",
+ "\u63D6>Yuu;",
+ "\u63DA>You;",
+ "\u63DB>Kan;",
+ "\u63E1>Aku;",
+ "\u63E3>Shi;",
+ "\u63E9>Kai;",
+ "\u63EE>Ki;",
+ "\u63F4>En;",
+ "\u63F6>Ya;",
+ "\u63FA>You;",
+ "\u6406>Kou;",
+ "\u640D>Son;",
+ "\u640F>Haku;",
+ "\u6413>Sa;",
+ "\u6416>You;",
+ "\u6417>Tou;",
+ "\u641C>Sou;",
+ "\u6426>Jaku;",
+ "\u6428>Tou;",
+ "\u642C>Han;",
+ "\u642D>Tou;",
+ "\u6434>Ken;",
+ "\u6436>Shou;",
+ "\u643A>Kei;",
+ "\u643E>Saku;",
+ "\u6442>Setsu;",
+ "\u644E>Kyuu;",
+ "\u6458>Teki;",
+ "\u6467>Sai;",
+ "\u6469>Ma;",
+ "\u646F>Shi;",
+ "\u6476>Tan;",
+ "\u6478>Mo;",
+ "\u647A>Shou;",
+ "\u6483>Geki;",
+ "\u6488>Rou;",
+ "\u6492>San;",
+ "\u6493>Dou;",
+ "\u6495>Sei;",
+ "\u649A>Nen;",
+ "\u649E>Shu;",
+ "\u64A4>Tetsu;",
+ "\u64A5>Hatsu;",
+ "\u64A9>Ryou;",
+ "\u64AB>Bu;",
+ "\u64AD>Ha;",
+ "\u64AE>Satsu;",
+ "\u64B0>San;",
+ "\u64B2>Boku;",
+ "\u64B9>Kaku;",
+ "\u64BB>Tachi;",
+ "\u64BC>Kan;",
+ "\u64C1>You;",
+ "\u64C2>Rai;",
+ "\u64C5>Sen;",
+ "\u64C7>Taku;",
+ "\u64CD>Sou;",
+ "\u64D2>Kin;",
+ "\u64D4>Tan;",
+ "\u64D8>Haku;",
+ "\u64DA>Kyo;",
+ "\u64E0>Sei;",
+ "\u64E1>Tai;",
+ "\u64E2>Teki;",
+ "\u64E3>Tou;",
+ "\u64E6>Satsu;",
+ "\u64E7>Kyo;",
+ "\u64EC>Gi;",
+ "\u64EF>Hin;",
+ "\u64F1>Kaku;",
+ "\u64F2>Teki;",
+ "\u64F4>Kaku;",
+ "\u64F6>Sen;",
+ "\u64FA>Hai;",
+ "\u64FD>Ryaku;",
+ "\u64FE>Jou;",
+ "\u6500>Han;",
+ "\u6505>San;",
+ "\u6518>Jou;",
+ "\u651C>Kei;",
+ "\u651D>Setsu;",
+ "\u6523>Ren;",
+ "\u6524>Tan;",
+ "\u652A>Kaku;",
+ "\u652B>Kaku;",
+ "\u652C>Ran;",
+ "\u652F>Shi;",
+ "\u6534>Hoku;",
+ "\u6535>Boku;",
+ "\u6536>Shuu;",
+ "\u6537>Kou;",
+ "\u6538>Yuu;",
+ "\u6539>Kai;",
+ "\u653B>Kou;",
+ "\u653E>Hou;",
+ "\u653F>Sei;",
+ "\u6545>Ko;",
+ "\u6548>Kou;",
+ "\u654D>Jo;",
+ "\u654F>Bin;",
+ "\u6551>Kyuu;",
+ "\u6555>Choku;",
+ "\u6556>Gou;",
+ "\u6557>Hai;",
+ "\u6558>Jo;",
+ "\u6559>Kyou;",
+ "\u655D>Hei;",
+ "\u655E>Shou;",
+ "\u6562>Kan;",
+ "\u6563>San;",
+ "\u6566>Ton;",
+ "\u656C>Kei;",
+ "\u6570>Suu;",
+ "\u6572>Kou;",
+ "\u6574>Sei;",
+ "\u6575>Teki;",
+ "\u6577>Fu;",
+ "\u6578>Suu;",
+ "\u6582>Ren;",
+ "\u6583>Hei;",
+ "\u6587>Bun;",
+ "\u6588>Gaku;",
+ "\u6589>Sei;",
+ "\u658C>Hin;",
+ "\u658E>Sai;",
+ "\u6590>Hi;",
+ "\u6591>Han;",
+ "\u6597>To;",
+ "\u6599>Ryou;",
+ "\u659B>Koku;",
+ "\u659C>Sha;",
+ "\u659F>Shin;",
+ "\u65A1>Atsu;",
+ "\u65A4>Kin;",
+ "\u65A5>Seki;",
+ "\u65A7>Fu;",
+ "\u65AB>Shaku;",
+ "\u65AC>Zan;",
+ "\u65AD>Dan;",
+ "\u65AF>Shi;",
+ "\u65B0>Shin;",
+ "\u65B7>Dan;",
+ "\u65B9>Hou;",
+ "\u65BC>O;",
+ "\u65BD>Shi;",
+ "\u65C1>Hou;",
+ "\u65C3>Sen;",
+ "\u65C4>Bou;",
+ "\u65C5>Ryo;",
+ "\u65C6>Hai;",
+ "\u65CB>Sen;",
+ "\u65CC>Sei;",
+ "\u65CF>Zoku;",
+ "\u65D2>Ryuu;",
+ "\u65D7>Ki;",
+ "\u65D9>Han;",
+ "\u65DB>Han;",
+ "\u65E0>Bu;",
+ "\u65E1>Ki;",
+ "\u65E2>Ki;",
+ "\u65E5>Nichi;",
+ "\u65E6>Tan;",
+ "\u65E7>Kyuu;",
+ "\u65E8>Shi;",
+ "\u65E9>Sou;",
+ "\u65EC>Jun;",
+ "\u65ED>Kyoku;",
+ "\u65F1>Kan;",
+ "\u65FA>Ou;",
+ "\u65FB>Bin;",
+ "\u6602>Kou;",
+ "\u6603>Soku;",
+ "\u6606>Kon;",
+ "\u6607>Shou;",
+ "\u660A>Kou;",
+ "\u660C>Shou;",
+ "\u660E>Mei;",
+ "\u660F>Kon;",
+ "\u6613>Eki;",
+ "\u6614>Seki;",
+ "\u661C>You;",
+ "\u661F>Sei;",
+ "\u6620>Ei;",
+ "\u6625>Shun;",
+ "\u6627>Mai;",
+ "\u6628>Saku;",
+ "\u662D>Shou;",
+ "\u662F>Ze;",
+ "\u6634>Bou;",
+ "\u6635>Jitsu;",
+ "\u6636>Chou;",
+ "\u663C>Chuu;",
+ "\u663F>Kou;",
+ "\u6641>Chou;",
+ "\u6642>Ji;",
+ "\u6643>Kou;",
+ "\u6644>Kou;",
+ "\u6649>Shin;",
+ "\u664B>Shin;",
+ "\u664F>An;",
+ "\u6652>Sai;",
+ "\u665D>Chuu;",
+ "\u665E>Ki;",
+ "\u665F>Sei;",
+ "\u6662>Setsu;",
+ "\u6664>Go;",
+ "\u6666>Kai;",
+ "\u6667>Kou;",
+ "\u6668>Shin;",
+ "\u6669>Ban;",
+ "\u666E>Fu;",
+ "\u666F>Kei;",
+ "\u6670>Seki;",
+ "\u6674>Sei;",
+ "\u6676>Shou;",
+ "\u667A>Chi;",
+ "\u6681>Gyou;",
+ "\u6683>Hi;",
+ "\u6684>Ken;",
+ "\u6687>Ka;",
+ "\u6688>Un;",
+ "\u6689>Ki;",
+ "\u668E>Ei;",
+ "\u6691>Sho;",
+ "\u6696>Dan;",
+ "\u6697>An;",
+ "\u6698>You;",
+ "\u669D>Mei;",
+ "\u66A2>Chou;",
+ "\u66A6>Reki;",
+ "\u66AB>Zan;",
+ "\u66AE>Bo;",
+ "\u66B4>Bou;",
+ "\u66B8>Ryou;",
+ "\u66B9>Sen;",
+ "\u66BC>Hetsu;",
+ "\u66BE>Ton;",
+ "\u66C1>Ki;",
+ "\u66C4>You;",
+ "\u66C7>Don;",
+ "\u66C9>Gyou;",
+ "\u66D6>Ai;",
+ "\u66D9>Sho;",
+ "\u66DA>Bou;",
+ "\u66DC>You;",
+ "\u66DD>Baku;",
+ "\u66E0>Kou;",
+ "\u66E6>Gi;",
+ "\u66E9>Dou;",
+ "\u66F0>Etsu;",
+ "\u66F2>Kyoku;",
+ "\u66F3>Ei;",
+ "\u66F4>Kou;",
+ "\u66F5>Ei;",
+ "\u66F7>Katsu;",
+ "\u66F8>Sho;",
+ "\u66F9>Sou;",
+ "\u66FC>Ban;",
+ "\u66FD>Zo;",
+ "\u66FE>So;",
+ "\u66FF>Tai;",
+ "\u6700>Sai;",
+ "\u6703>Kai;",
+ "\u6708>Getsu;",
+ "\u6709>Yuu;",
+ "\u670B>Hou;",
+ "\u670D>Fuku;",
+ "\u670F>Hi;",
+ "\u6714>Saku;",
+ "\u6715>Chin;",
+ "\u6716>Rou;",
+ "\u6717>Rou;",
+ "\u671B>Bou;",
+ "\u671D>Chou;",
+ "\u671E>Ki;",
+ "\u671F>Ki;",
+ "\u6726>Bou;",
+ "\u6727>Rou;",
+ "\u6728>Boku;",
+ "\u672A>Mi;",
+ "\u672B>Matsu;",
+ "\u672C>Hon;",
+ "\u672D>Satsu;",
+ "\u672E>Jutsu;",
+ "\u6731>Shu;",
+ "\u6734>Boku;",
+ "\u6736>Da;",
+ "\u6737>Tou;",
+ "\u6738>Ryoku;",
+ "\u673A>Ki;",
+ "\u673D>Kyuu;",
+ "\u673F>Shi;",
+ "\u6746>Kan;",
+ "\u6749>San;",
+ "\u674E>Ri;",
+ "\u674F>Kyou;",
+ "\u6750>Zai;",
+ "\u6751>Son;",
+ "\u6753>Hyou;",
+ "\u6756>Jou;",
+ "\u6759>Yoku;",
+ "\u675C>Do;",
+ "\u675E>Ko;",
+ "\u675F>Soku;",
+ "\u6760>Kou;",
+ "\u6761>Jou;",
+ "\u6765>Rai;",
+ "\u676A>Byou;",
+ "\u676D>Kou;",
+ "\u676F>Hai;",
+ "\u6770>Ketsu;",
+ "\u6771>Tou;",
+ "\u6772>Kou;",
+ "\u6773>You;",
+ "\u6775>Sho;",
+ "\u6777>Ha;",
+ "\u677C>Cho;",
+ "\u677E>Shou;",
+ "\u677F>Han;",
+ "\u6785>Kei;",
+ "\u6787>Hi;",
+ "\u6789>Ou;",
+ "\u678B>Hou;",
+ "\u678C>Fun;",
+ "\u6790>Seki;",
+ "\u6795>Chin;",
+ "\u6797>Rin;",
+ "\u679A>Mai;",
+ "\u679C>Ka;",
+ "\u679D>Shi;",
+ "\u67A2>Suu;",
+ "\u67A6>Ro;",
+ "\u67A9>Shou;",
+ "\u67AF>Ko;",
+ "\u67B3>Ki;",
+ "\u67B4>Kai;",
+ "\u67B6>Ka;",
+ "\u67B7>Ka;",
+ "\u67B8>Ku;",
+ "\u67B9>Hou;",
+ "\u67C1>Ta;",
+ "\u67C4>Hei;",
+ "\u67C6>Rou;",
+ "\u67CA>Shuu;",
+ "\u67CE>Fu;",
+ "\u67CF>Haku;",
+ "\u67D0>Bou;",
+ "\u67D1>Kan;",
+ "\u67D3>Sen;",
+ "\u67D4>Nyuu;",
+ "\u67D8>Sha;",
+ "\u67DA>Yuu;",
+ "\u67DD>Taku;",
+ "\u67DE>Saku;",
+ "\u67E2>Tei;",
+ "\u67E4>Sa;",
+ "\u67E7>Ko;",
+ "\u67E9>Kyuu;",
+ "\u67EC>Kan;",
+ "\u67EE>Totsu;",
+ "\u67EF>Ka;",
+ "\u67F1>Chuu;",
+ "\u67F3>Ryuu;",
+ "\u67F4>Sai;",
+ "\u67F5>Saku;",
+ "\u67FB>Sa;",
+ "\u67FE>Kyuu;",
+ "\u67FF>Shi;",
+ "\u6804>Ei;",
+ "\u6813>Sen;",
+ "\u6816>Sei;",
+ "\u6817>Ritsu;",
+ "\u681E>Kan;",
+ "\u6821>Kou;",
+ "\u6822>Haku;",
+ "\u6829>Ku;",
+ "\u682A>Chu;",
+ "\u682B>Son;",
+ "\u6832>Gou;",
+ "\u6834>Sen;",
+ "\u6838>Kaku;",
+ "\u6839>Kon;",
+ "\u683C>Kou;",
+ "\u683D>Sai;",
+ "\u6840>Ketsu;",
+ "\u6841>Kou;",
+ "\u6842>Kei;",
+ "\u6843>Tou;",
+ "\u6846>Kyou;",
+ "\u6848>An;",
+ "\u684D>Ko;",
+ "\u684E>Shitsu;",
+ "\u6850>Dou;",
+ "\u6851>Sou;",
+ "\u6853>Kan;",
+ "\u6854>Kitsu;",
+ "\u6859>U;",
+ "\u685C>Ou;",
+ "\u685F>San;",
+ "\u6863>Tou;",
+ "\u6867>Kai;",
+ "\u6874>Fu;",
+ "\u6876>Tou;",
+ "\u6877>Kaku;",
+ "\u687E>Kun;",
+ "\u687F>Kan;",
+ "\u6881>Ryou;",
+ "\u6883>Tei;",
+ "\u6885>Bai;",
+ "\u688D>Sou;",
+ "\u688F>Koku;",
+ "\u6893>Shi;",
+ "\u6894>Shi;",
+ "\u6897>Kou;",
+ "\u689B>Da;",
+ "\u689D>Jou;",
+ "\u689F>Kyou;",
+ "\u68A0>Ryo;",
+ "\u68A2>Shou;",
+ "\u68A6>Mu;",
+ "\u68A7>Go;",
+ "\u68A8>Ri;",
+ "\u68AD>Sa;",
+ "\u68AF>Tei;",
+ "\u68B0>Kai;",
+ "\u68B1>Kon;",
+ "\u68B3>So;",
+ "\u68B5>Fuu;",
+ "\u68B6>Bi;",
+ "\u68B9>Bin;",
+ "\u68BC>Tou;",
+ "\u68C4>Ki;",
+ "\u68C6>Rin;",
+ "\u68C9>Men;",
+ "\u68CA>Ki;",
+ "\u68CB>Ki;",
+ "\u68CD>Kon;",
+ "\u68D2>Bou;",
+ "\u68D4>Kon;",
+ "\u68D5>Shu;",
+ "\u68D7>Sou;",
+ "\u68D8>Kyoku;",
+ "\u68DA>Hou;",
+ "\u68DF>Tou;",
+ "\u68E0>Tou;",
+ "\u68E1>Kou;",
+ "\u68E3>Tei;",
+ "\u68E7>San;",
+ "\u68EE>Shin;",
+ "\u68EF>Jin;",
+ "\u68F2>Sei;",
+ "\u68F9>Tou;",
+ "\u68FA>Kan;",
+ "\u6900>Wan;",
+ "\u6901>Kaku;",
+ "\u6904>Setsu;",
+ "\u6905>I;",
+ "\u6908>Kiku;",
+ "\u690B>Ryou;",
+ "\u690C>Kou;",
+ "\u690D>Shoku;",
+ "\u690E>Tsui;",
+ "\u690F>A;",
+ "\u6912>Shou;",
+ "\u691C>Ken;",
+ "\u6922>Kai;",
+ "\u6926>Ken;",
+ "\u6930>Ya;",
+ "\u6934>Tan;",
+ "\u6936>Shu;",
+ "\u6939>Chin;",
+ "\u693D>Ten;",
+ "\u693F>Chin;",
+ "\u694A>You;",
+ "\u6953>Fuu;",
+ "\u6954>Setsu;",
+ "\u6955>Da;",
+ "\u6959>Bou;",
+ "\u695A>So;",
+ "\u695C>Ko;",
+ "\u695D>Ren;",
+ "\u695E>Rou;",
+ "\u6960>Nan;",
+ "\u6961>Yu;",
+ "\u6962>Shuu;",
+ "\u696A>You;",
+ "\u696B>Shuu;",
+ "\u696D>Gyou;",
+ "\u696E>Cho;",
+ "\u696F>Jun;",
+ "\u6973>Bai;",
+ "\u6974>Tei;",
+ "\u6975>Goku;",
+ "\u6977>Kai;",
+ "\u6978>Shuu;",
+ "\u6979>Ei;",
+ "\u697C>Rou;",
+ "\u697D>Gaku;",
+ "\u6982>Gai;",
+ "\u698E>Ka;",
+ "\u6991>Fu;",
+ "\u6994>Rou;",
+ "\u6995>You;",
+ "\u699B>Shin;",
+ "\u699C>Bou;",
+ "\u69A0>Bei;",
+ "\u69A7>Hi;",
+ "\u69AE>Ei;",
+ "\u69B1>Sui;",
+ "\u69B2>Otsu;",
+ "\u69B4>Ryuu;",
+ "\u69BB>Tou;",
+ "\u69BE>Kotsu;",
+ "\u69BF>Ki;",
+ "\u69C1>Kou;",
+ "\u69C3>Han;",
+ "\u69C7>Ten;",
+ "\u69CA>Saku;",
+ "\u69CB>Kou;",
+ "\u69CC>Tsui;",
+ "\u69CD>Sou;",
+ "\u69CE>Sa;",
+ "\u69D0>Kai;",
+ "\u69D3>Kou;",
+ "\u69D8>You;",
+ "\u69D9>Ten;",
+ "\u69DD>Tou;",
+ "\u69DE>Rou;",
+ "\u69E7>San;",
+ "\u69E8>Kaku;",
+ "\u69EB>Tan;",
+ "\u69ED>Shuku;",
+ "\u69F2>Koku;",
+ "\u69F9>Kou;",
+ "\u69FB>Ki;",
+ "\u69FD>Sou;",
+ "\u69FF>Kin;",
+ "\u6A02>Gaku;",
+ "\u6A05>Shou;",
+ "\u6A0A>Han;",
+ "\u6A0B>Tou;",
+ "\u6A0C>Kan;",
+ "\u6A12>Mitsu;",
+ "\u6A13>Rou;",
+ "\u6A14>Sou;",
+ "\u6A17>Cho;",
+ "\u6A19>Hyou;",
+ "\u6A1B>Kyuu;",
+ "\u6A1E>Suu;",
+ "\u6A1F>Shou;",
+ "\u6A21>Mo;",
+ "\u6A22>Boku;",
+ "\u6A23>You;",
+ "\u6A29>Ken;",
+ "\u6A2A>Ou;",
+ "\u6A35>Shou;",
+ "\u6A36>Sai;",
+ "\u6A38>Boku;",
+ "\u6A39>Ju;",
+ "\u6A3A>Ka;",
+ "\u6A3D>Son;",
+ "\u6A44>Kan;",
+ "\u6A47>Zei;",
+ "\u6A48>Dou;",
+ "\u6A4B>Kyou;",
+ "\u6A58>Kitsu;",
+ "\u6A59>Tou;",
+ "\u6A5F>Ki;",
+ "\u6A61>Shou;",
+ "\u6A62>Da;",
+ "\u6A66>Tou;",
+ "\u6A78>Shou;",
+ "\u6A7F>Kyou;",
+ "\u6A80>Tan;",
+ "\u6A84>Geki;",
+ "\u6A8D>Yoku;",
+ "\u6A8E>Go;",
+ "\u6A90>En;",
+ "\u6A97>Haku;",
+ "\u6A9C>Kai;",
+ "\u6AA0>Kei;",
+ "\u6AA2>Ken;",
+ "\u6AA3>Shou;",
+ "\u6AAA>Reki;",
+ "\u6AAC>Bou;",
+ "\u6AAE>Tou;",
+ "\u6AB3>Bin;",
+ "\u6AB8>Nei;",
+ "\u6ABB>Kan;",
+ "\u6AC1>Mitsu;",
+ "\u6AC2>Tou;",
+ "\u6AC3>Ki;",
+ "\u6AD1>Rai;",
+ "\u6AD3>Ro;",
+ "\u6ADA>Ryo;",
+ "\u6ADB>Shitsu;",
+ "\u6ADE>En;",
+ "\u6ADF>Reki;",
+ "\u6AE8>Ro;",
+ "\u6AEA>Reki;",
+ "\u6AFA>Rei;",
+ "\u6AFB>Ou;",
+ "\u6B04>Ran;",
+ "\u6B05>Kyo;",
+ "\u6B0A>Ken;",
+ "\u6B12>Ran;",
+ "\u6B16>Ran;",
+ "\u6B1D>Utsu;",
+ "\u6B20>Ketsu;",
+ "\u6B21>Ji;",
+ "\u6B23>Gon;",
+ "\u6B27>Ou;",
+ "\u6B32>Yoku;",
+ "\u6B37>Ki;",
+ "\u6B38>Ai;",
+ "\u6B39>I;",
+ "\u6B3A>Gi;",
+ "\u6B3D>Kin;",
+ "\u6B3E>Kan;",
+ "\u6B43>Sou;",
+ "\u6B47>Ketsu;",
+ "\u6B49>Ken;",
+ "\u6B4C>Ka;",
+ "\u6B4E>Tan;",
+ "\u6B50>Ou;",
+ "\u6B53>Kan;",
+ "\u6B54>Kyo;",
+ "\u6B59>Kyuu;",
+ "\u6B5B>Kan;",
+ "\u6B5F>Yo;",
+ "\u6B61>Kan;",
+ "\u6B62>Shi;",
+ "\u6B63>Sei;",
+ "\u6B64>Shi;",
+ "\u6B66>Bu;",
+ "\u6B69>Ho;",
+ "\u6B6A>Wai;",
+ "\u6B6F>Shi;",
+ "\u6B73>Sei;",
+ "\u6B74>Reki;",
+ "\u6B78>Ki;",
+ "\u6B79>Gatsu;",
+ "\u6B7B>Shi;",
+ "\u6B7F>Botsu;",
+ "\u6B80>You;",
+ "\u6B83>You;",
+ "\u6B84>Ten;",
+ "\u6B86>Tai;",
+ "\u6B89>Jun;",
+ "\u6B8A>Shu;",
+ "\u6B8B>Zan;",
+ "\u6B8D>Hyou;",
+ "\u6B95>Fuu;",
+ "\u6B96>Shoku;",
+ "\u6B98>Zan;",
+ "\u6B9E>In;",
+ "\u6BA4>Shou;",
+ "\u6BAA>Ei;",
+ "\u6BAB>Tan;",
+ "\u6BAF>Hin;",
+ "\u6BB1>Sen;",
+ "\u6BB2>Sen;",
+ "\u6BB3>Shu;",
+ "\u6BB4>Ou;",
+ "\u6BB5>Dan;",
+ "\u6BB7>In;",
+ "\u6BBA>Satsu;",
+ "\u6BBB>Kaku;",
+ "\u6BBC>Kaku;",
+ "\u6BBF>Ten;",
+ "\u6BC0>Ki;",
+ "\u6BC5>Ki;",
+ "\u6BC6>Ou;",
+ "\u6BCB>Bu;",
+ "\u6BCD>Bo;",
+ "\u6BCE>Mai;",
+ "\u6BD2>Doku;",
+ "\u6BD3>Iku;",
+ "\u6BD4>Hi;",
+ "\u6BD8>Hi;",
+ "\u6BDB>Mou;",
+ "\u6BEB>Kou;",
+ "\u6BEC>Kyuu;",
+ "\u6BEF>Tan;",
+ "\u6BF3>Zei;",
+ "\u6C08>Sen;",
+ "\u6C0F>Shi;",
+ "\u6C11>Min;",
+ "\u6C13>Bou;",
+ "\u6C14>Ki;",
+ "\u6C17>Ki;",
+ "\u6C1B>Fun;",
+ "\u6C23>Ki;",
+ "\u6C24>In;",
+ "\u6C34>Sui;",
+ "\u6C37>Hyou;",
+ "\u6C38>Ei;",
+ "\u6C3E>Han;",
+ "\u6C40>Tei;",
+ "\u6C41>Juu;",
+ "\u6C42>Kyuu;",
+ "\u6C4E>Han;",
+ "\u6C50>Seki;",
+ "\u6C55>San;",
+ "\u6C57>Kan;",
+ "\u6C5A>O;",
+ "\u6C5D>Jo;",
+ "\u6C5E>Kou;",
+ "\u6C5F>Kou;",
+ "\u6C60>Chi;",
+ "\u6C68>Beki;",
+ "\u6C6A>Ou;",
+ "\u6C70>Ta;",
+ "\u6C72>Kyuu;",
+ "\u6C73>Hen;",
+ "\u6C7A>Ketsu;",
+ "\u6C7D>Ki;",
+ "\u6C7E>Fun;",
+ "\u6C81>Shin;",
+ "\u6C82>Ki;",
+ "\u6C83>Yoku;",
+ "\u6C88>Chin;",
+ "\u6C8C>Ton;",
+ "\u6C8D>Go;",
+ "\u6C90>Boku;",
+ "\u6C92>Botsu;",
+ "\u6C93>Tou;",
+ "\u6C96>Chuu;",
+ "\u6C99>Sa;",
+ "\u6C9A>Shi;",
+ "\u6C9B>Hai;",
+ "\u6CA1>Botsu;",
+ "\u6CA2>Taku;",
+ "\u6CAB>Matsu;",
+ "\u6CAE>Sho;",
+ "\u6CB1>Ta;",
+ "\u6CB3>Ka;",
+ "\u6CB8>Futsu;",
+ "\u6CB9>Yu;",
+ "\u6CBA>Ten;",
+ "\u6CBB>Ji;",
+ "\u6CBC>Shou;",
+ "\u6CBD>Ko;",
+ "\u6CBE>Ten;",
+ "\u6CBF>En;",
+ "\u6CC1>Kyou;",
+ "\u6CC4>Ei;",
+ "\u6CC5>Shuu;",
+ "\u6CC9>Sen;",
+ "\u6CCA>Haku;",
+ "\u6CCC>Hitsu;",
+ "\u6CD3>Ou;",
+ "\u6CD5>Hou;",
+ "\u6CD7>Shi;",
+ "\u6CD9>Hou;",
+ "\u6CDB>Han;",
+ "\u6CDD>So;",
+ "\u6CE1>Hou;",
+ "\u6CE2>Ha;",
+ "\u6CE3>Kyuu;",
+ "\u6CE5>Dei;",
+ "\u6CE8>Chuu;",
+ "\u6CEA>Rui;",
+ "\u6CEF>Bin;",
+ "\u6CF0>Tai;",
+ "\u6CF1>Ou;",
+ "\u6CF3>Ei;",
+ "\u6D0B>You;",
+ "\u6D0C>Retsu;",
+ "\u6D12>Sei;",
+ "\u6D17>Sen;",
+ "\u6D19>Shu;",
+ "\u6D1B>Raku;",
+ "\u6D1E>Dou;",
+ "\u6D1F>I;",
+ "\u6D25>Shin;",
+ "\u6D29>Ei;",
+ "\u6D2A>Kou;",
+ "\u6D2B>Kyoku;",
+ "\u6D32>Shuu;",
+ "\u6D33>Jo;",
+ "\u6D35>Shun;",
+ "\u6D36>Kyou;",
+ "\u6D38>Kou;",
+ "\u6D3B>Katsu;",
+ "\u6D3D>Kou;",
+ "\u6D3E>Ha;",
+ "\u6D41>Ryuu;",
+ "\u6D44>Jou;",
+ "\u6D45>Sen;",
+ "\u6D59>Setsu;",
+ "\u6D5A>Shun;",
+ "\u6D5C>Hin;",
+ "\u6D63>Kan;",
+ "\u6D64>Kou;",
+ "\u6D66>Ho;",
+ "\u6D69>Kou;",
+ "\u6D6A>Rou;",
+ "\u6D6C>Ri;",
+ "\u6D6E>Fu;",
+ "\u6D74>Yoku;",
+ "\u6D77>Kai;",
+ "\u6D78>Shin;",
+ "\u6D79>Shou;",
+ "\u6D85>Netsu;",
+ "\u6D88>Shou;",
+ "\u6D8C>Yuu;",
+ "\u6D8E>Sen;",
+ "\u6D93>Ken;",
+ "\u6D95>Tei;",
+ "\u6D99>Rui;",
+ "\u6D9B>Tou;",
+ "\u6D9C>Toku;",
+ "\u6DAF>Gai;",
+ "\u6DB2>Eki;",
+ "\u6DB5>Kan;",
+ "\u6DB8>Ko;",
+ "\u6DBC>Ryou;",
+ "\u6DC0>Ten;",
+ "\u6DC5>Seki;",
+ "\u6DC6>Kou;",
+ "\u6DC7>Ki;",
+ "\u6DCB>Rin;",
+ "\u6DCC>Shou;",
+ "\u6DD1>Shuku;",
+ "\u6DD2>Sei;",
+ "\u6DD5>Riku;",
+ "\u6DD8>Tou;",
+ "\u6DD9>Sou;",
+ "\u6DDE>Shou;",
+ "\u6DE1>Tan;",
+ "\u6DE4>Yo;",
+ "\u6DE6>Kan;",
+ "\u6DE8>Jou;",
+ "\u6DEA>Rin;",
+ "\u6DEB>In;",
+ "\u6DEC>Sai;",
+ "\u6DEE>Wai;",
+ "\u6DF1>Shin;",
+ "\u6DF3>Shun;",
+ "\u6DF5>En;",
+ "\u6DF7>Kon;",
+ "\u6DF9>En;",
+ "\u6DFA>Sen;",
+ "\u6DFB>Ten;",
+ "\u6E05>Sei;",
+ "\u6E07>Katsu;",
+ "\u6E08>Sai;",
+ "\u6E09>Shou;",
+ "\u6E0A>En;",
+ "\u6E0B>Juu;",
+ "\u6E13>Kei;",
+ "\u6E15>En;",
+ "\u6E19>Kan;",
+ "\u6E1A>Sho;",
+ "\u6E1B>Gen;",
+ "\u6E1D>Yu;",
+ "\u6E1F>Tei;",
+ "\u6E20>Kyo;",
+ "\u6E21>To;",
+ "\u6E23>Sa;",
+ "\u6E24>Botsu;",
+ "\u6E25>Aku;",
+ "\u6E26>Ka;",
+ "\u6E29>On;",
+ "\u6E2B>Setsu;",
+ "\u6E2C>Soku;",
+ "\u6E2D>I;",
+ "\u6E2E>Ka;",
+ "\u6E2F>Kou;",
+ "\u6E38>Yuu;",
+ "\u6E3A>Byou;",
+ "\u6E3E>Kon;",
+ "\u6E43>Hai;",
+ "\u6E4A>Sou;",
+ "\u6E4D>Tan;",
+ "\u6E4E>Ben;",
+ "\u6E56>Ko;",
+ "\u6E58>Shou;",
+ "\u6E5B>Tan;",
+ "\u6E5F>Kou;",
+ "\u6E67>Yuu;",
+ "\u6E6B>Shou;",
+ "\u6E6E>In;",
+ "\u6E6F>Tou;",
+ "\u6E72>Kan;",
+ "\u6E76>Sen;",
+ "\u6E7E>Wan;",
+ "\u6E7F>Shitsu;",
+ "\u6E80>Man;",
+ "\u6E82>Ratsu;",
+ "\u6E8C>Hatsu;",
+ "\u6E8F>Tou;",
+ "\u6E90>Gen;",
+ "\u6E96>Jun;",
+ "\u6E98>Kou;",
+ "\u6E9C>Ryuu;",
+ "\u6E9D>Kou;",
+ "\u6E9F>Mei;",
+ "\u6EA2>Itsu;",
+ "\u6EA5>Ho;",
+ "\u6EAA>Kei;",
+ "\u6EAF>So;",
+ "\u6EB2>Sou;",
+ "\u6EB6>You;",
+ "\u6EB7>Kon;",
+ "\u6EBA>Deki;",
+ "\u6EBD>Joku;",
+ "\u6EC2>Bou;",
+ "\u6EC4>Sou;",
+ "\u6EC5>Metsu;",
+ "\u6EC9>Kou;",
+ "\u6ECB>Ji;",
+ "\u6ECC>Deki;",
+ "\u6ED1>Katsu;",
+ "\u6ED3>Sai;",
+ "\u6ED4>Tou;",
+ "\u6ED5>Tou;",
+ "\u6EDD>Sou;",
+ "\u6EDE>Tai;",
+ "\u6EEC>Ko;",
+ "\u6EEF>Tai;",
+ "\u6EF2>Shin;",
+ "\u6EF4>Teki;",
+ "\u6EF7>Ro;",
+ "\u6EF8>Ko;",
+ "\u6EFE>Kon;",
+ "\u6EFF>Man;",
+ "\u6F01>Ryou;",
+ "\u6F02>Hyou;",
+ "\u6F06>Shitsu;",
+ "\u6F09>Roku;",
+ "\u6F0F>Rou;",
+ "\u6F11>Gai;",
+ "\u6F13>Ri;",
+ "\u6F14>En;",
+ "\u6F15>Sou;",
+ "\u6F20>Baku;",
+ "\u6F22>Kan;",
+ "\u6F23>Ran;",
+ "\u6F2B>Man;",
+ "\u6F2C>Shi;",
+ "\u6F31>Sou;",
+ "\u6F32>Chou;",
+ "\u6F38>Zen;",
+ "\u6F3E>You;",
+ "\u6F3F>Shou;",
+ "\u6F41>Ei;",
+ "\u6F45>Kan;",
+ "\u6F54>Ketsu;",
+ "\u6F58>Han;",
+ "\u6F5B>Sen;",
+ "\u6F5C>Sen;",
+ "\u6F5F>Seki;",
+ "\u6F64>Jun;",
+ "\u6F66>Rou;",
+ "\u6F6D>Tan;",
+ "\u6F6E>Chou;",
+ "\u6F6F>Jin;",
+ "\u6F70>Kai;",
+ "\u6F74>Cho;",
+ "\u6F78>San;",
+ "\u6F7A>San;",
+ "\u6F7C>Dou;",
+ "\u6F80>Juu;",
+ "\u6F81>Juu;",
+ "\u6F82>Chou;",
+ "\u6F84>Chou;",
+ "\u6F86>Gyou;",
+ "\u6F8E>Hou;",
+ "\u6F91>Ryuu;",
+ "\u6F97>Kan;",
+ "\u6FA1>Sou;",
+ "\u6FA3>Kan;",
+ "\u6FA4>Taku;",
+ "\u6FAA>Rei;",
+ "\u6FB1>Ten;",
+ "\u6FB3>Iku;",
+ "\u6FB9>Tan;",
+ "\u6FC0>Geki;",
+ "\u6FC1>Daku;",
+ "\u6FC2>Ren;",
+ "\u6FC3>Nou;",
+ "\u6FC6>Fun;",
+ "\u6FD4>Dei;",
+ "\u6FD5>Shitsu;",
+ "\u6FD8>Nei;",
+ "\u6FDF>Sai;",
+ "\u6FE0>Gou;",
+ "\u6FE1>Ju;",
+ "\u6FE4>Tou;",
+ "\u6FEB>Ran;",
+ "\u6FEC>Shun;",
+ "\u6FEE>Hoku;",
+ "\u6FEF>Taku;",
+ "\u6FF1>Hin;",
+ "\u6FF3>Sen;",
+ "\u6FF6>Katsu;",
+ "\u6FFA>Sen;",
+ "\u6FFE>Ryo;",
+ "\u7001>You;",
+ "\u7009>Sha;",
+ "\u700B>Shin;",
+ "\u700F>Ryuu;",
+ "\u7011>Baku;",
+ "\u7015>Hin;",
+ "\u7018>Ro;",
+ "\u701A>Kan;",
+ "\u701B>Ei;",
+ "\u701D>Reki;",
+ "\u701E>Jou;",
+ "\u701F>Shou;",
+ "\u7026>Cho;",
+ "\u7027>Sou;",
+ "\u702C>Rai;",
+ "\u7030>Bi;",
+ "\u7032>Ren;",
+ "\u703E>Ran;",
+ "\u704C>Kan;",
+ "\u7051>Sai;",
+ "\u7058>Dan;",
+ "\u7063>Wan;",
+ "\u706B>Ka;",
+ "\u706F>Tou;",
+ "\u7070>Kai;",
+ "\u7078>Kyuu;",
+ "\u707C>Shaku;",
+ "\u707D>Sai;",
+ "\u7089>Ro;",
+ "\u708A>Sui;",
+ "\u708E>En;",
+ "\u7092>Sou;",
+ "\u7099>Sha;",
+ "\u70AC>Ko;",
+ "\u70AD>Tan;",
+ "\u70AE>Hou;",
+ "\u70AF>Kei;",
+ "\u70B3>Hei;",
+ "\u70B8>Saku;",
+ "\u70B9>Ten;",
+ "\u70BA>I;",
+ "\u70C8>Retsu;",
+ "\u70CB>Kou;",
+ "\u70CF>U;",
+ "\u70D9>Raku;",
+ "\u70DD>Jou;",
+ "\u70DF>En;",
+ "\u70F1>Kei;",
+ "\u70F9>Hou;",
+ "\u70FD>Hou;",
+ "\u7109>En;",
+ "\u7114>En;",
+ "\u7119>Hou;",
+ "\u711A>Fun;",
+ "\u711C>Kon;",
+ "\u7121>Mu;",
+ "\u7126>Shou;",
+ "\u7136>Zen;",
+ "\u713C>Shou;",
+ "\u7149>Ren;",
+ "\u714C>Kou;",
+ "\u714E>Sen;",
+ "\u7155>Ki;",
+ "\u7156>Dan;",
+ "\u7159>En;",
+ "\u7162>Kei;",
+ "\u7164>Bai;",
+ "\u7165>Kan;",
+ "\u7166>Ku;",
+ "\u7167>Shou;",
+ "\u7169>Han;",
+ "\u716C>You;",
+ "\u716E>Sha;",
+ "\u717D>Sen;",
+ "\u7184>Soku;",
+ "\u7188>Ki;",
+ "\u718A>Yuu;",
+ "\u718F>Kun;",
+ "\u7194>You;",
+ "\u7195>Kou;",
+ "\u7199>Ki;",
+ "\u719F>Juku;",
+ "\u71A8>I;",
+ "\u71AC>Gou;",
+ "\u71B1>Netsu;",
+ "\u71B9>Ki;",
+ "\u71BE>Shi;",
+ "\u71C3>Nen;",
+ "\u71C8>Tou;",
+ "\u71C9>Ton;",
+ "\u71CE>Ryou;",
+ "\u71D0>Rin;",
+ "\u71D2>Shou;",
+ "\u71D4>Han;",
+ "\u71D5>En;",
+ "\u71D7>Ran;",
+ "\u71DF>Ei;",
+ "\u71E0>Iku;",
+ "\u71E5>Sou;",
+ "\u71E6>San;",
+ "\u71E7>Sui;",
+ "\u71EC>Ki;",
+ "\u71ED>Shoku;",
+ "\u71EE>Shou;",
+ "\u71F5>Tatsu;",
+ "\u71F9>Sen;",
+ "\u71FB>Kun;",
+ "\u71FC>Jin;",
+ "\u71FF>You;",
+ "\u7206>Baku;",
+ "\u720D>Shaku;",
+ "\u7210>Ro;",
+ "\u721B>Ran;",
+ "\u7228>San;",
+ "\u722A>Sou;",
+ "\u722C>Ha;",
+ "\u722D>Sou;",
+ "\u7230>En;",
+ "\u7232>I;",
+ "\u7235>Shaku;",
+ "\u7236>Fu;",
+ "\u723A>Ya;",
+ "\u723B>Kou;",
+ "\u723C>Sho;",
+ "\u723D>Sou;",
+ "\u723E>Ji;",
+ "\u723F>Shou;",
+ "\u7240>Sou;",
+ "\u7246>Shou;",
+ "\u7247>Hen;",
+ "\u7248>Han;",
+ "\u724B>Sen;",
+ "\u724C>Hai;",
+ "\u7252>Chou;",
+ "\u7258>Toku;",
+ "\u7259>Ga;",
+ "\u725B>Gyuu;",
+ "\u725D>Hin;",
+ "\u725F>Bou;",
+ "\u7261>Bo;",
+ "\u7262>Rou;",
+ "\u7267>Boku;",
+ "\u7269>Motsu;",
+ "\u7272>Sei;",
+ "\u7274>Tei;",
+ "\u7279>Toku;",
+ "\u727D>Ken;",
+ "\u727E>Go;",
+ "\u7280>Sei;",
+ "\u7281>Ri;",
+ "\u7282>Ri;",
+ "\u7287>Hon;",
+ "\u7292>Kou;",
+ "\u7296>Raku;",
+ "\u72A0>Gi;",
+ "\u72A2>Toku;",
+ "\u72A7>Gi;",
+ "\u72AC>Ken;",
+ "\u72AF>Han;",
+ "\u72B2>Sai;",
+ "\u72B6>Jou;",
+ "\u72B9>Yuu;",
+ "\u72C2>Kyou;",
+ "\u72C3>Juu;",
+ "\u72C4>Teki;",
+ "\u72C6>Chuu;",
+ "\u72CE>Kou;",
+ "\u72D0>Ko;",
+ "\u72D2>Hi;",
+ "\u72D7>Kou;",
+ "\u72D9>Sho;",
+ "\u72DB>Haku;",
+ "\u72E0>Gan;",
+ "\u72E1>Kou;",
+ "\u72E2>Kaku;",
+ "\u72E9>Shu;",
+ "\u72EC>Doku;",
+ "\u72ED>Kyou;",
+ "\u72F7>Ken;",
+ "\u72F8>Ri;",
+ "\u72F9>Kyou;",
+ "\u72FC>Rou;",
+ "\u72FD>Hai;",
+ "\u730A>Gei;",
+ "\u7316>Shou;",
+ "\u7317>I;",
+ "\u731B>Mou;",
+ "\u731C>Sai;",
+ "\u731D>Sotsu;",
+ "\u731F>Ryou;",
+ "\u7325>Wai;",
+ "\u7329>Sei;",
+ "\u732A>Cho;",
+ "\u732B>Byou;",
+ "\u732E>Ken;",
+ "\u732F>Tan;",
+ "\u7334>Kou;",
+ "\u7336>Yuu;",
+ "\u7337>Yuu;",
+ "\u733E>Katsu;",
+ "\u733F>En;",
+ "\u7344>Goku;",
+ "\u7345>Shi;",
+ "\u734E>Shou;",
+ "\u734F>Baku;",
+ "\u7357>Ketsu;",
+ "\u7363>Juu;",
+ "\u7368>Doku;",
+ "\u736A>Kai;",
+ "\u7370>Dou;",
+ "\u7372>Kaku;",
+ "\u7375>Ryou;",
+ "\u7378>Juu;",
+ "\u737A>Datsu;",
+ "\u737B>Ken;",
+ "\u7384>Gen;",
+ "\u7387>Ritsu;",
+ "\u7389>Gyoku;",
+ "\u738B>Ou;",
+ "\u7396>Kyuu;",
+ "\u73A9>Gan;",
+ "\u73B2>Rei;",
+ "\u73B3>Tai;",
+ "\u73BB>Ha;",
+ "\u73C0>Haku;",
+ "\u73C2>Ka;",
+ "\u73C8>Ka;",
+ "\u73CA>San;",
+ "\u73CD>Chin;",
+ "\u73CE>Chin;",
+ "\u73DE>Raku;",
+ "\u73E0>Shu;",
+ "\u73E5>Ji;",
+ "\u73EA>Kei;",
+ "\u73ED>Han;",
+ "\u73EE>Hai;",
+ "\u73F1>Ei;",
+ "\u73F8>Go;",
+ "\u73FE>Gen;",
+ "\u7403>Kyuu;",
+ "\u7405>Rou;",
+ "\u7406>Ri;",
+ "\u7409>Ryuu;",
+ "\u7422>Taku;",
+ "\u7425>Ko;",
+ "\u7432>Hai;",
+ "\u7433>Rin;",
+ "\u7434>Kin;",
+ "\u7435>Bi;",
+ "\u7436>Ha;",
+ "\u743A>Hou;",
+ "\u743F>Kon;",
+ "\u7441>Bou;",
+ "\u7455>Ka;",
+ "\u7459>Dou;",
+ "\u745A>Ko;",
+ "\u745B>Ei;",
+ "\u745C>Yu;",
+ "\u745E>Zui;",
+ "\u745F>Shitsu;",
+ "\u7460>Ryuu;",
+ "\u7463>Sa;",
+ "\u7464>You;",
+ "\u7469>Ei;",
+ "\u746A>Ba;",
+ "\u746F>Rou;",
+ "\u7470>Kai;",
+ "\u7473>Sa;",
+ "\u7476>You;",
+ "\u747E>Kin;",
+ "\u7483>Ri;",
+ "\u748B>Shou;",
+ "\u749E>Haku;",
+ "\u74A2>Ryuu;",
+ "\u74A7>Heki;",
+ "\u74B0>Kan;",
+ "\u74BD>Ji;",
+ "\u74CA>Kei;",
+ "\u74CF>Rou;",
+ "\u74D4>Ei;",
+ "\u74DC>Ka;",
+ "\u74E0>Ko;",
+ "\u74E2>Hyou;",
+ "\u74E3>Ben;",
+ "\u74E6>Ga;",
+ "\u74EE>Ou;",
+ "\u74F6>Hei;",
+ "\u74F7>Shi;",
+ "\u7503>Shuu;",
+ "\u7504>Ken;",
+ "\u750C>Ou;",
+ "\u750D>Bou;",
+ "\u750E>Sen;",
+ "\u7511>Sou;",
+ "\u7513>Heki;",
+ "\u7515>Ou;",
+ "\u7518>Kan;",
+ "\u751A>Shin;",
+ "\u751C>Ten;",
+ "\u751E>Shou;",
+ "\u751F>Sei;",
+ "\u7523>San;",
+ "\u7525>Sei;",
+ "\u7526>So;",
+ "\u7528>You;",
+ "\u752B>Ho;",
+ "\u752C>You;",
+ "\u7530>Den;",
+ "\u7531>Yuu;",
+ "\u7532>Kou;",
+ "\u7533>Shin;",
+ "\u7537>Dan;",
+ "\u7538>Ten;",
+ "\u753A>Chou;",
+ "\u753B>Ga;",
+ "\u753C>Chou;",
+ "\u7544>Ryuu;",
+ "\u7546>Ho;",
+ "\u7549>Fu;",
+ "\u754A>Kou;",
+ "\u754B>Ten;",
+ "\u754C>Kai;",
+ "\u754D>Kai;",
+ "\u754F>I;",
+ "\u7554>Han;",
+ "\u7559>Ryuu;",
+ "\u755A>Hon;",
+ "\u755B>Shin;",
+ "\u755C>Chiku;",
+ "\u755D>Ho;",
+ "\u7562>Hitsu;",
+ "\u7564>Shi;",
+ "\u7565>Ryaku;",
+ "\u7566>Kei;",
+ "\u7567>Ryaku;",
+ "\u756A>Ban;",
+ "\u756B>Kaku;",
+ "\u756D>Yo;",
+ "\u7570>I;",
+ "\u7573>Jou;",
+ "\u7574>Chuu;",
+ "\u7576>Tou;",
+ "\u7577>Tetsu;",
+ "\u7578>Ki;",
+ "\u757F>Ki;",
+ "\u7582>Jou;",
+ "\u7586>Kyou;",
+ "\u7587>Chuu;",
+ "\u7589>Jou;",
+ "\u758A>Jou;",
+ "\u758B>So;",
+ "\u758E>So;",
+ "\u758F>So;",
+ "\u7591>Gi;",
+ "\u7594>Chou;",
+ "\u759A>Kyuu;",
+ "\u759D>San;",
+ "\u75A3>Yuu;",
+ "\u75A5>Kai;",
+ "\u75AB>Eki;",
+ "\u75B1>Hou;",
+ "\u75B2>Hi;",
+ "\u75B3>Kan;",
+ "\u75B5>Shi;",
+ "\u75B8>Tan;",
+ "\u75B9>Shin;",
+ "\u75BC>Tou;",
+ "\u75BD>Sho;",
+ "\u75BE>Shitsu;",
+ "\u75C2>Ka;",
+ "\u75C3>Ken;",
+ "\u75C5>Byou;",
+ "\u75C7>Shou;",
+ "\u75CA>Sen;",
+ "\u75CD>I;",
+ "\u75D2>You;",
+ "\u75D4>Ji;",
+ "\u75D5>Kon;",
+ "\u75D8>Tou;",
+ "\u75D9>Kei;",
+ "\u75DB>Ts;",
+ "\u75DE>Hi;",
+ "\u75E2>Ri;",
+ "\u75E3>Shi;",
+ "\u75E9>Sou;",
+ "\u75F0>Tan;",
+ "\u75F2>Ma;",
+ "\u75F3>Rin;",
+ "\u75F4>Chi;",
+ "\u75FA>Hi;",
+ "\u75FC>Ko;",
+ "\u75FE>A;",
+ "\u75FF>I;",
+ "\u7601>Sui;",
+ "\u7609>Yu;",
+ "\u760B>Fuu;",
+ "\u760D>You;",
+ "\u761F>On;",
+ "\u7620>Seki;",
+ "\u7621>Sou;",
+ "\u7622>Han;",
+ "\u7624>Ryuu;",
+ "\u7627>Gyaku;",
+ "\u7630>Rui;",
+ "\u7634>Shou;",
+ "\u763B>Rou;",
+ "\u7642>Ryou;",
+ "\u7646>Rou;",
+ "\u7647>Kan;",
+ "\u7648>Hai;",
+ "\u764C>Gan;",
+ "\u7652>Yu;",
+ "\u7656>Heki;",
+ "\u7658>Rei;",
+ "\u765C>Den;",
+ "\u7661>Chi;",
+ "\u7662>You;",
+ "\u7667>Reki;",
+ "\u7668>Kaku;",
+ "\u7669>Rai;",
+ "\u766A>Shaku;",
+ "\u766C>Sen;",
+ "\u7670>You;",
+ "\u7672>Ten;",
+ "\u7676>Hatsu;",
+ "\u7678>Ki;",
+ "\u767A>Hotsu;",
+ "\u767B>Tou;",
+ "\u767C>Hotsu;",
+ "\u767D>Haku;",
+ "\u767E>Hyaku;",
+ "\u7680>Hyuu;",
+ "\u7683>Bou;",
+ "\u7684>Teki;",
+ "\u7686>Kai;",
+ "\u7687>Kou;",
+ "\u7688>Ki;",
+ "\u768B>Kou;",
+ "\u768E>Kou;",
+ "\u7690>Kou;",
+ "\u7693>Kou;",
+ "\u7696>Kan;",
+ "\u7699>Seki;",
+ "\u769A>Gai;",
+ "\u76AE>Hi;",
+ "\u76B0>Hou;",
+ "\u76B4>Shun;",
+ "\u76B7>Ko;",
+ "\u76B8>Kun;",
+ "\u76B9>Kun;",
+ "\u76BA>Suu;",
+ "\u76BF>Bai;",
+ "\u76C2>U;",
+ "\u76C3>Hai;",
+ "\u76C6>Bon;",
+ "\u76C8>Ei;",
+ "\u76CA>Eki;",
+ "\u76CD>Kou;",
+ "\u76D2>Kou;",
+ "\u76D6>Gai;",
+ "\u76D7>Tou;",
+ "\u76DB>Sei;",
+ "\u76DC>Tou;",
+ "\u76DE>San;",
+ "\u76DF>Mei;",
+ "\u76E1>Jin;",
+ "\u76E3>Kan;",
+ "\u76E4>Ban;",
+ "\u76E5>Kan;",
+ "\u76E7>Ro;",
+ "\u76EA>Tou;",
+ "\u76EE>Moku;",
+ "\u76F2>Mou;",
+ "\u76F4>Choku;",
+ "\u76F8>Shou;",
+ "\u76FB>Kei;",
+ "\u76FE>Jun;",
+ "\u7701>Sei;",
+ "\u7704>Ben;",
+ "\u7707>Byou;",
+ "\u7708>Tan;",
+ "\u7709>Bi;",
+ "\u770B>Kan;",
+ "\u770C>Ken;",
+ "\u771B>Mai;",
+ "\u771E>Shin;",
+ "\u771F>Shin;",
+ "\u7720>Min;",
+ "\u7724>Tei;",
+ "\u7725>Sei;",
+ "\u7726>Sei;",
+ "\u7729>Gen;",
+ "\u7737>Ken;",
+ "\u7738>Bou;",
+ "\u773A>Chou;",
+ "\u773C>Gan;",
+ "\u7740>Chaku;",
+ "\u7747>Tei;",
+ "\u775A>Gai;",
+ "\u775B>Sei;",
+ "\u7761>Sui;",
+ "\u7763>Toku;",
+ "\u7765>Hei;",
+ "\u7766>Boku;",
+ "\u7768>Gei;",
+ "\u776B>Shou;",
+ "\u7779>To;",
+ "\u777E>Kou;",
+ "\u777F>Ei;",
+ "\u778B>Shin;",
+ "\u778E>Katsu;",
+ "\u7791>Mei;",
+ "\u779E>Ban;",
+ "\u77A0>Dou;",
+ "\u77A5>Betsu;",
+ "\u77AC>Shun;",
+ "\u77AD>Ryou;",
+ "\u77B0>Kan;",
+ "\u77B3>Dou;",
+ "\u77B6>Ki;",
+ "\u77B9>Ai;",
+ "\u77BB>Sen;",
+ "\u77BC>Ken;",
+ "\u77BD>Ko;",
+ "\u77BF>Ku;",
+ "\u77C7>Mou;",
+ "\u77CD>Kaku;",
+ "\u77D7>Chiku;",
+ "\u77DA>Shoku;",
+ "\u77DB>Mu;",
+ "\u77DC>Kin;",
+ "\u77E2>Shi;",
+ "\u77E3>I;",
+ "\u77E5>Chi;",
+ "\u77E7>Shin;",
+ "\u77E9>Ku;",
+ "\u77ED>Tan;",
+ "\u77EE>Wai;",
+ "\u77EF>Kyou;",
+ "\u77F3>Shaku;",
+ "\u77FC>Kou;",
+ "\u7802>Sa;",
+ "\u780C>Sei;",
+ "\u7812>Hi;",
+ "\u7814>Ken;",
+ "\u7815>Sai;",
+ "\u7820>Sho;",
+ "\u7825>Shi;",
+ "\u7826>Sai;",
+ "\u7827>Chin;",
+ "\u7832>Hou;",
+ "\u7834>Ha;",
+ "\u783A>Rei;",
+ "\u783F>Kou;",
+ "\u7845>Kei;",
+ "\u785D>Shou;",
+ "\u786B>Ryuu;",
+ "\u786C>Kou;",
+ "\u786F>Ken;",
+ "\u787C>Hou;",
+ "\u7881>Go;",
+ "\u7886>Ha;",
+ "\u7887>Tei;",
+ "\u788C>Roku;",
+ "\u788D>Gai;",
+ "\u788E>Sai;",
+ "\u7891>Hi;",
+ "\u7893>Tai;",
+ "\u7895>Ki;",
+ "\u7897>Wan;",
+ "\u789A>Hai;",
+ "\u78A3>Ketsu;",
+ "\u78A7>Heki;",
+ "\u78A9>Seki;",
+ "\u78AA>Chin;",
+ "\u78AF>Dou;",
+ "\u78B5>Seki;",
+ "\u78BA>Kaku;",
+ "\u78BC>Ba;",
+ "\u78BE>Ten;",
+ "\u78C1>Ji;",
+ "\u78C5>Hou;",
+ "\u78C6>Katsu;",
+ "\u78CA>Rai;",
+ "\u78CB>Sa;",
+ "\u78D0>Han;",
+ "\u78D1>Gai;",
+ "\u78D4>Taku;",
+ "\u78DA>Sen;",
+ "\u78E7>Seki;",
+ "\u78E8>Ma;",
+ "\u78EC>Kei;",
+ "\u78EF>Ki;",
+ "\u78F4>Tou;",
+ "\u78FD>Kou;",
+ "\u7901>Shou;",
+ "\u7907>Iku;",
+ "\u790E>So;",
+ "\u7911>Tou;",
+ "\u7912>Gi;",
+ "\u7919>Gai;",
+ "\u7926>Kou;",
+ "\u792A>Rei;",
+ "\u792B>Reki;",
+ "\u792C>Ban;",
+ "\u793A>Shi;",
+ "\u793C>Rei;",
+ "\u793E>Sha;",
+ "\u7940>Shi;",
+ "\u7941>Ki;",
+ "\u7947>Ki;",
+ "\u7948>Ki;",
+ "\u7949>Shi;",
+ "\u7950>Yuu;",
+ "\u7953>Futsu;",
+ "\u7955>Hi;",
+ "\u7956>So;",
+ "\u7957>Shi;",
+ "\u795A>So;",
+ "\u795D>Shuku;",
+ "\u795E>Shin;",
+ "\u795F>Sui;",
+ "\u7960>Shi;",
+ "\u7962>Dei;",
+ "\u7965>Shou;",
+ "\u7968>Hyou;",
+ "\u796D>Sai;",
+ "\u7977>Tou;",
+ "\u797A>Ki;",
+ "\u797F>Roku;",
+ "\u7980>Rin;",
+ "\u7981>Kin;",
+ "\u7984>Roku;",
+ "\u7985>Zen;",
+ "\u798A>Kei;",
+ "\u798D>Ka;",
+ "\u798E>Tei;",
+ "\u798F>Fuku;",
+ "\u799D>Shoku;",
+ "\u79A6>Gyo;",
+ "\u79A7>Ki;",
+ "\u79AA>Zen;",
+ "\u79AE>Rei;",
+ "\u79B0>Dei;",
+ "\u79B3>Jou;",
+ "\u79B9>U;",
+ "\u79BA>Guu;",
+ "\u79BD>Kin;",
+ "\u79BE>Ka;",
+ "\u79BF>Toku;",
+ "\u79C0>Shuu;",
+ "\u79C1>Shi;",
+ "\u79C9>Hei;",
+ "\u79CB>Shuu;",
+ "\u79D1>Ka;",
+ "\u79D2>Byou;",
+ "\u79D5>Hi;",
+ "\u79D8>Hi;",
+ "\u79DF>So;",
+ "\u79E1>Hatsu;",
+ "\u79E3>Matsu;",
+ "\u79E4>Shou;",
+ "\u79E6>Shin;",
+ "\u79E7>Ou;",
+ "\u79E9>Chitsu;",
+ "\u79EC>Kyo;",
+ "\u79F0>Shou;",
+ "\u79FB>I;",
+ "\u7A00>Ki;",
+ "\u7A08>Kan;",
+ "\u7A0B>Tei;",
+ "\u7A0D>Sou;",
+ "\u7A0E>Zei;",
+ "\u7A14>Jin;",
+ "\u7A17>Hai;",
+ "\u7A18>Ki;",
+ "\u7A19>Choku;",
+ "\u7A1A>Chi;",
+ "\u7A1C>Ryou;",
+ "\u7A1F>Rin;",
+ "\u7A20>Chuu;",
+ "\u7A2E>Shu;",
+ "\u7A31>Shou;",
+ "\u7A32>Tou;",
+ "\u7A37>Shoku;",
+ "\u7A3B>Tou;",
+ "\u7A3C>Ka;",
+ "\u7A3D>Kei;",
+ "\u7A3E>Kou;",
+ "\u7A3F>Kou;",
+ "\u7A40>Koku;",
+ "\u7A42>Sui;",
+ "\u7A43>You;",
+ "\u7A46>Boku;",
+ "\u7A49>Chi;",
+ "\u7A4D>Seki;",
+ "\u7A4E>Ei;",
+ "\u7A4F>On;",
+ "\u7A50>Shuu;",
+ "\u7A57>Sui;",
+ "\u7A61>Shoku;",
+ "\u7A62>Ai;",
+ "\u7A63>Jou;",
+ "\u7A69>On;",
+ "\u7A6B>Kaku;",
+ "\u7A70>Jou;",
+ "\u7A74>Ketsu;",
+ "\u7A76>Kyuu;",
+ "\u7A79>Kyuu;",
+ "\u7A7A>Kuu;",
+ "\u7A7D>Sei;",
+ "\u7A7F>Sen;",
+ "\u7A81>Totsu;",
+ "\u7A83>Setsu;",
+ "\u7A84>Saku;",
+ "\u7A88>You;",
+ "\u7A92>Chitsu;",
+ "\u7A93>Sou;",
+ "\u7A95>Chou;",
+ "\u7A96>Kou;",
+ "\u7A97>Sou;",
+ "\u7A98>Kin;",
+ "\u7A9F>Kutsu;",
+ "\u7AA9>Ka;",
+ "\u7AAA>Wa;",
+ "\u7AAE>Kyuu;",
+ "\u7AAF>You;",
+ "\u7AB0>You;",
+ "\u7AB6>Ku;",
+ "\u7ABA>Ki;",
+ "\u7ABF>Ryuu;",
+ "\u7AC3>Sou;",
+ "\u7AC4>Zan;",
+ "\u7AC5>Kyou;",
+ "\u7AC7>Tou;",
+ "\u7AC8>Sou;",
+ "\u7ACA>Setsu;",
+ "\u7ACB>Ritsu;",
+ "\u7AD2>Ki;",
+ "\u7AD9>Tan;",
+ "\u7ADA>Cho;",
+ "\u7ADC>Ryuu;",
+ "\u7ADD>Hei;",
+ "\u7ADF>Kei;",
+ "\u7AE0>Shou;",
+ "\u7AE2>Shi;",
+ "\u7AE3>Shun;",
+ "\u7AE5>Dou;",
+ "\u7AE6>Shou;",
+ "\u7AEA>Ju;",
+ "\u7AED>Ketsu;",
+ "\u7AEF>Tan;",
+ "\u7AF6>Kyou;",
+ "\u7AF8>Kei;",
+ "\u7AF9>Chiku;",
+ "\u7AFA>Toku;",
+ "\u7AFF>Kan;",
+ "\u7B04>Kei;",
+ "\u7B06>Ha;",
+ "\u7B08>Kyuu;",
+ "\u7B0A>Sou;",
+ "\u7B0B>Jun;",
+ "\u7B0F>Kotsu;",
+ "\u7B11>Shou;",
+ "\u7B18>Sen;",
+ "\u7B19>Sou;",
+ "\u7B1B>Teki;",
+ "\u7B1E>Chi;",
+ "\u7B20>Ryuu;",
+ "\u7B25>Shi;",
+ "\u7B26>Fu;",
+ "\u7B28>Hon;",
+ "\u7B2C>Dai;",
+ "\u7B33>Ka;",
+ "\u7B35>Han;",
+ "\u7B36>Shi;",
+ "\u7B45>Sen;",
+ "\u7B46>Hitsu;",
+ "\u7B48>Katsu;",
+ "\u7B49>Tou;",
+ "\u7B4B>Kin;",
+ "\u7B4C>Sen;",
+ "\u7B4D>Jun;",
+ "\u7B4F>Batsu;",
+ "\u7B50>Kyou;",
+ "\u7B51>Chiku;",
+ "\u7B52>Tou;",
+ "\u7B54>Tou;",
+ "\u7B56>Saku;",
+ "\u7B5D>Sou;",
+ "\u7B65>Kyo;",
+ "\u7B67>Ken;",
+ "\u7B6C>Sei;",
+ "\u7B6E>Sei;",
+ "\u7B70>Saku;",
+ "\u7B71>Shou;",
+ "\u7B74>Kyou;",
+ "\u7B75>En;",
+ "\u7B7A>Kyou;",
+ "\u7B86>Hei;",
+ "\u7B87>Ka;",
+ "\u7B8B>Sen;",
+ "\u7B8D>Ko;",
+ "\u7B8F>Sou;",
+ "\u7B92>Sou;",
+ "\u7B94>Haku;",
+ "\u7B95>Ki;",
+ "\u7B97>San;",
+ "\u7B98>Kin;",
+ "\u7B99>Fuku;",
+ "\u7B9A>Satsu;",
+ "\u7B9C>Kou;",
+ "\u7B9D>Kan;",
+ "\u7B9F>Kin;",
+ "\u7BA1>Kan;",
+ "\u7BAA>Tan;",
+ "\u7BAD>Sen;",
+ "\u7BB1>Shou;",
+ "\u7BB4>Shin;",
+ "\u7BB8>Cho;",
+ "\u7BC0>Setsu;",
+ "\u7BC1>Kou;",
+ "\u7BC4>Han;",
+ "\u7BC6>Ten;",
+ "\u7BC7>Hen;",
+ "\u7BC9>Chiku;",
+ "\u7BCB>Kyou;",
+ "\u7BCC>Kou;",
+ "\u7BCF>Kan;",
+ "\u7BDD>Kou;",
+ "\u7BE0>Shou;",
+ "\u7BE4>Toku;",
+ "\u7BE5>Ritsu;",
+ "\u7BE6>Hei;",
+ "\u7BE9>Shi;",
+ "\u7BED>Rou;",
+ "\u7BF3>Hitsu;",
+ "\u7BF6>En;",
+ "\u7BF7>Hou;",
+ "\u7C00>Saku;",
+ "\u7C07>Sou;",
+ "\u7C0D>Rou;",
+ "\u7C11>Sa;",
+ "\u7C12>San;",
+ "\u7C13>Sen;",
+ "\u7C14>Sa;",
+ "\u7C1F>Ten;",
+ "\u7C21>Kan;",
+ "\u7C23>Ki;",
+ "\u7C27>Kou;",
+ "\u7C2A>Shin;",
+ "\u7C2B>Shou;",
+ "\u7C37>En;",
+ "\u7C38>Ha;",
+ "\u7C3D>Sen;",
+ "\u7C3E>Ren;",
+ "\u7C3F>Bo;",
+ "\u7C40>Chuu;",
+ "\u7C43>Ran;",
+ "\u7C4C>Chuu;",
+ "\u7C4D>Seki;",
+ "\u7C50>Tou;",
+ "\u7C54>Su;",
+ "\u7C56>Sen;",
+ "\u7C58>Tou;",
+ "\u7C5F>Rai;",
+ "\u7C60>Rou;",
+ "\u7C64>Sen;",
+ "\u7C65>Yaku;",
+ "\u7C6C>Ri;",
+ "\u7C73>Bei;",
+ "\u7C83>Hi;",
+ "\u7C89>Fun;",
+ "\u7C8B>Sui;",
+ "\u7C90>Ro;",
+ "\u7C92>Ryuu;",
+ "\u7C95>Haku;",
+ "\u7C97>So;",
+ "\u7C98>Nen;",
+ "\u7C9B>Shuku;",
+ "\u7C9F>Zoku;",
+ "\u7CA1>Tou;",
+ "\u7CA2>Shi;",
+ "\u7CA4>Etsu;",
+ "\u7CA5>Shuku;",
+ "\u7CA7>Shou;",
+ "\u7CAB>Ji;",
+ "\u7CAE>Ryou;",
+ "\u7CB1>Ryou;",
+ "\u7CB2>San;",
+ "\u7CB3>Kou;",
+ "\u7CB9>Sui;",
+ "\u7CBD>Sou;",
+ "\u7CBE>Sei;",
+ "\u7CC2>San;",
+ "\u7CC5>Juu;",
+ "\u7CCA>Ko;",
+ "\u7CD2>Hi;",
+ "\u7CD6>Tou;",
+ "\u7CDC>Bi;",
+ "\u7CDE>Fun;",
+ "\u7CDF>Sou;",
+ "\u7CE0>Kou;",
+ "\u7CE2>Bo;",
+ "\u7CE7>Ryou;",
+ "\u7CEF>Da;",
+ "\u7CF2>Rei;",
+ "\u7CF4>Teki;",
+ "\u7CF6>Chou;",
+ "\u7CF8>Shi;",
+ "\u7CFA>Kyuu;",
+ "\u7CFB>Kei;",
+ "\u7CFE>Kyuu;",
+ "\u7D00>Ki;",
+ "\u7D02>Chuu;",
+ "\u7D04>Yaku;",
+ "\u7D05>Ku;",
+ "\u7D06>U;",
+ "\u7D0A>Bin;",
+ "\u7D0B>Mon;",
+ "\u7D0D>Tou;",
+ "\u7D10>Chuu;",
+ "\u7D14>Shun;",
+ "\u7D15>Hi;",
+ "\u7D17>Sa;",
+ "\u7D18>Kou;",
+ "\u7D19>Shi;",
+ "\u7D1A>Kyuu;",
+ "\u7D1B>Fun;",
+ "\u7D1C>Un;",
+ "\u7D20>So;",
+ "\u7D21>Bou;",
+ "\u7D22>Saku;",
+ "\u7D2B>Shi;",
+ "\u7D2C>Chuu;",
+ "\u7D2E>Satsu;",
+ "\u7D2F>Rui;",
+ "\u7D30>Sei;",
+ "\u7D32>Setsu;",
+ "\u7D33>Shin;",
+ "\u7D35>Cho;",
+ "\u7D39>Shou;",
+ "\u7D3A>Kon;",
+ "\u7D3F>Tai;",
+ "\u7D42>Shuu;",
+ "\u7D43>Gen;",
+ "\u7D44>So;",
+ "\u7D45>Kei;",
+ "\u7D46>Ban;",
+ "\u7D4B>Kou;",
+ "\u7D4C>Kei;",
+ "\u7D4E>Kou;",
+ "\u7D4F>Setsu;",
+ "\u7D50>Ketsu;",
+ "\u7D56>Kou;",
+ "\u7D5B>Jou;",
+ "\u7D5E>Kou;",
+ "\u7D61>Raku;",
+ "\u7D62>Ken;",
+ "\u7D63>Hou;",
+ "\u7D66>Kyuu;",
+ "\u7D68>Juu;",
+ "\u7D6E>Jo;",
+ "\u7D71>Tou;",
+ "\u7D72>Shi;",
+ "\u7D73>Kou;",
+ "\u7D75>Kai;",
+ "\u7D76>Zetsu;",
+ "\u7D79>Ken;",
+ "\u7D7D>Ryo;",
+ "\u7D89>Tou;",
+ "\u7D8F>Sui;",
+ "\u7D93>Kei;",
+ "\u7D99>Kei;",
+ "\u7D9A>Zoku;",
+ "\u7D9C>Sou;",
+ "\u7D9F>Rei;",
+ "\u7DA2>Chuu;",
+ "\u7DA3>Ken;",
+ "\u7DAB>Sen;",
+ "\u7DAC>Ju;",
+ "\u7DAD>I;",
+ "\u7DAE>Kei;",
+ "\u7DAF>Tou;",
+ "\u7DB0>Wan;",
+ "\u7DB1>Kou;",
+ "\u7DB2>Mou;",
+ "\u7DB4>Tei;",
+ "\u7DB5>Sai;",
+ "\u7DB8>Rin;",
+ "\u7DBA>Ki;",
+ "\u7DBB>Tan;",
+ "\u7DBD>Shaku;",
+ "\u7DBE>Ryou;",
+ "\u7DBF>Men;",
+ "\u7DC7>Shi;",
+ "\u7DCA>Kin;",
+ "\u7DCB>Hi;",
+ "\u7DCF>Sou;",
+ "\u7DD1>Ryoku;",
+ "\u7DD2>Sho;",
+ "\u7DD8>Kan;",
+ "\u7DDA>Sen;",
+ "\u7DDC>Ben;",
+ "\u7DDD>Shuu;",
+ "\u7DDE>Tan;",
+ "\u7DE0>Tei;",
+ "\u7DE1>Bin;",
+ "\u7DE4>Setsu;",
+ "\u7DE8>Hen;",
+ "\u7DE9>Kan;",
+ "\u7DEC>Men;",
+ "\u7DEF>I;",
+ "\u7DF2>Byou;",
+ "\u7DF4>Ren;",
+ "\u7DFB>Chi;",
+ "\u7E01>En;",
+ "\u7E04>Jou;",
+ "\u7E09>Shin;",
+ "\u7E0A>Ei;",
+ "\u7E0B>Tsui;",
+ "\u7E12>Shi;",
+ "\u7E1B>Baku;",
+ "\u7E1E>Kou;",
+ "\u7E1F>Joku;",
+ "\u7E21>Sai;",
+ "\u7E22>Tou;",
+ "\u7E23>Ken;",
+ "\u7E26>Juu;",
+ "\u7E2B>Hou;",
+ "\u7E2E>Shuku;",
+ "\u7E31>Juu;",
+ "\u7E32>Rui;",
+ "\u7E35>Ban;",
+ "\u7E37>Ru;",
+ "\u7E39>Hyou;",
+ "\u7E3A>Ren;",
+ "\u7E3B>Bi;",
+ "\u7E3D>Sou;",
+ "\u7E3E>Seki;",
+ "\u7E41>Han;",
+ "\u7E43>Hou;",
+ "\u7E46>Kyuu;",
+ "\u7E4A>Sen;",
+ "\u7E4B>Kei;",
+ "\u7E4D>Shuu;",
+ "\u7E54>Shoku;",
+ "\u7E55>Zen;",
+ "\u7E56>San;",
+ "\u7E59>Han;",
+ "\u7E5A>Ryou;",
+ "\u7E5D>Kan;",
+ "\u7E5E>Jou;",
+ "\u7E66>Kyou;",
+ "\u7E67>Un;",
+ "\u7E69>Jou;",
+ "\u7E6A>Kai;",
+ "\u7E6D>Ken;",
+ "\u7E70>Sou;",
+ "\u7E79>Eki;",
+ "\u7E7B>Ju;",
+ "\u7E7C>Kei;",
+ "\u7E7D>Hin;",
+ "\u7E7F>Ran;",
+ "\u7E82>San;",
+ "\u7E88>Ketsu;",
+ "\u7E89>San;",
+ "\u7E8C>Zoku;",
+ "\u7E8E>Sen;",
+ "\u7E8F>Ten;",
+ "\u7E92>Ten;",
+ "\u7E93>Ei;",
+ "\u7E94>San;",
+ "\u7E96>Sen;",
+ "\u7E9B>Tou;",
+ "\u7E9C>Ran;",
+ "\u7F36>Kan;",
+ "\u7F38>Kou;",
+ "\u7F3A>Ketsu;",
+ "\u7F45>Ka;",
+ "\u7F4C>Ou;",
+ "\u7F4D>Rai;",
+ "\u7F4E>Tan;",
+ "\u7F50>Kan;",
+ "\u7F51>Bou;",
+ "\u7F54>Bou;",
+ "\u7F55>Kan;",
+ "\u7F58>Fu;",
+ "\u7F5F>Ko;",
+ "\u7F60>Bin;",
+ "\u7F67>Shin;",
+ "\u7F68>An;",
+ "\u7F69>Tou;",
+ "\u7F6A>Zai;",
+ "\u7F6B>Kei;",
+ "\u7F6E>Chi;",
+ "\u7F70>Batsu;",
+ "\u7F72>Sho;",
+ "\u7F75>Ba;",
+ "\u7F77>Hi;",
+ "\u7F78>Batsu;",
+ "\u7F79>Ri;",
+ "\u7F82>Ken;",
+ "\u7F83>Beki;",
+ "\u7F85>Ra;",
+ "\u7F86>Hi;",
+ "\u7F87>Ki;",
+ "\u7F88>Ki;",
+ "\u7F8A>You;",
+ "\u7F8C>Kyou;",
+ "\u7F8E>Bi;",
+ "\u7F94>Kou;",
+ "\u7F9A>Rei;",
+ "\u7F9D>Tei;",
+ "\u7F9E>Shuu;",
+ "\u7FA3>Gun;",
+ "\u7FA4>Gun;",
+ "\u7FA8>Sen;",
+ "\u7FA9>Gi;",
+ "\u7FAE>Kou;",
+ "\u7FAF>Katsu;",
+ "\u7FB2>Gi;",
+ "\u7FB6>Sen;",
+ "\u7FB8>Rui;",
+ "\u7FB9>Kou;",
+ "\u7FBD>U;",
+ "\u7FC1>Ou;",
+ "\u7FC5>Shi;",
+ "\u7FC6>Sui;",
+ "\u7FCA>Yoku;",
+ "\u7FCC>Yoku;",
+ "\u7FD2>Shuu;",
+ "\u7FD4>Shou;",
+ "\u7FD5>Kyuu;",
+ "\u7FE0>Sui;",
+ "\u7FE1>Hi;",
+ "\u7FE6>Sen;",
+ "\u7FE9>Hen;",
+ "\u7FEB>Gan;",
+ "\u7FF0>Kan;",
+ "\u7FF3>Ei;",
+ "\u7FF9>Gyou;",
+ "\u7FFB>Hon;",
+ "\u7FFC>Yoku;",
+ "\u8000>You;",
+ "\u8001>Rou;",
+ "\u8003>Kou;",
+ "\u8004>Mou;",
+ "\u8005>Sha;",
+ "\u8006>Ki;",
+ "\u800B>Tetsu;",
+ "\u800C>Ji;",
+ "\u8010>Tai;",
+ "\u8012>Rai;",
+ "\u8015>Kou;",
+ "\u8017>Mou;",
+ "\u8018>Un;",
+ "\u8019>Ha;",
+ "\u801C>Shi;",
+ "\u8021>Jo;",
+ "\u8028>Dou;",
+ "\u8033>Ji;",
+ "\u8036>Ya;",
+ "\u803B>Chi;",
+ "\u803D>Tan;",
+ "\u803F>Kou;",
+ "\u8046>Rei;",
+ "\u804A>Ryou;",
+ "\u8052>Katsu;",
+ "\u8056>Sei;",
+ "\u8058>Hei;",
+ "\u805A>Shuu;",
+ "\u805E>Bun;",
+ "\u805F>Sei;",
+ "\u8061>Sou;",
+ "\u8068>Ren;",
+ "\u806F>Ren;",
+ "\u8070>Sou;",
+ "\u8072>Sei;",
+ "\u8073>Shou;",
+ "\u8074>Chou;",
+ "\u8076>Jou;",
+ "\u8077>Shoku;",
+ "\u8079>Dei;",
+ "\u807D>Chou;",
+ "\u807E>Rou;",
+ "\u807F>Itsu;",
+ "\u8084>I;",
+ "\u8085>Shuku;",
+ "\u8086>Shi;",
+ "\u8087>Chou;",
+ "\u8089>Niku;",
+ "\u808B>Roku;",
+ "\u808C>Ki;",
+ "\u8093>Kou;",
+ "\u8096>Shou;",
+ "\u8098>Chuu;",
+ "\u809A>To;",
+ "\u809B>Kou;",
+ "\u809D>Kan;",
+ "\u80A1>Ko;",
+ "\u80A2>Shi;",
+ "\u80A5>Hi;",
+ "\u80A9>Ken;",
+ "\u80AA>Bou;",
+ "\u80AC>Yuu;",
+ "\u80AD>Dotsu;",
+ "\u80AF>Kou;",
+ "\u80B1>Kou;",
+ "\u80B2>Iku;",
+ "\u80B4>Kou;",
+ "\u80BA>Hai;",
+ "\u80C3>I;",
+ "\u80C4>Chuu;",
+ "\u80C6>Tan;",
+ "\u80CC>Hai;",
+ "\u80CE>Tai;",
+ "\u80D6>Han;",
+ "\u80D9>So;",
+ "\u80DA>Hai;",
+ "\u80DB>Kou;",
+ "\u80DD>Chi;",
+ "\u80DE>Hou;",
+ "\u80E1>Ko;",
+ "\u80E4>In;",
+ "\u80E5>Sho;",
+ "\u80EF>Ko;",
+ "\u80F1>Kou;",
+ "\u80F4>Dou;",
+ "\u80F8>Kyou;",
+ "\u80FC>Hen;",
+ "\u80FD>Nou;",
+ "\u8102>Shi;",
+ "\u8105>Kyou;",
+ "\u8106>Zei;",
+ "\u8107>Kyou;",
+ "\u8108>Myaku;",
+ "\u8109>Myaku;",
+ "\u810A>Seki;",
+ "\u811A>Kyaku;",
+ "\u811B>Kei;",
+ "\u8123>Shin;",
+ "\u8129>Shuu;",
+ "\u812F>Ho;",
+ "\u8131>Datsu;",
+ "\u8133>Nou;",
+ "\u8139>Chou;",
+ "\u813E>Hi;",
+ "\u8146>Ten;",
+ "\u814B>Eki;",
+ "\u814E>Jin;",
+ "\u8150>Fu;",
+ "\u8151>Fu;",
+ "\u8153>Hi;",
+ "\u8154>Kou;",
+ "\u8155>Wan;",
+ "\u815F>Chitsu;",
+ "\u8165>Sei;",
+ "\u8166>Nou;",
+ "\u816B>Shou;",
+ "\u816E>Sai;",
+ "\u8170>You;",
+ "\u8171>Ken;",
+ "\u8174>Yu;",
+ "\u8178>Chou;",
+ "\u8179>Fuku;",
+ "\u817A>Sen;",
+ "\u817F>Tai;",
+ "\u8180>Hou;",
+ "\u8182>Ryo;",
+ "\u8183>Otsu;",
+ "\u8188>Kaku;",
+ "\u818A>Haku;",
+ "\u818F>Kou;",
+ "\u8193>Chou;",
+ "\u8195>Kaku;",
+ "\u819A>Fu;",
+ "\u819C>Maku;",
+ "\u819D>Shitsu;",
+ "\u81A0>Kou;",
+ "\u81A3>Chitsu;",
+ "\u81A8>Bou;",
+ "\u81A9>Ji;",
+ "\u81B0>Han;",
+ "\u81B3>Sen;",
+ "\u81B5>Sui;",
+ "\u81B8>Zui;",
+ "\u81BA>You;",
+ "\u81BD>Tan;",
+ "\u81BE>Kai;",
+ "\u81BF>Dou;",
+ "\u81C0>Den;",
+ "\u81C2>Hi;",
+ "\u81C6>Oku;",
+ "\u81C8>Rou;",
+ "\u81C9>Ren;",
+ "\u81CD>Sei;",
+ "\u81D1>Dau;",
+ "\u81D3>Zou;",
+ "\u81D8>Rou;",
+ "\u81D9>En;",
+ "\u81DA>Ryo;",
+ "\u81DF>Zou;",
+ "\u81E0>Ren;",
+ "\u81E3>Shin;",
+ "\u81E5>Ga;",
+ "\u81E7>Zou;",
+ "\u81E8>Rin;",
+ "\u81EA>Shi;",
+ "\u81ED>Shuu;",
+ "\u81F3>Shi;",
+ "\u81F4>Chi;",
+ "\u81FA>Tai;",
+ "\u81FB>Shin;",
+ "\u81FC>Kyuu;",
+ "\u81FE>Yu;",
+ "\u8201>Yo;",
+ "\u8202>Shou;",
+ "\u8205>Kyuu;",
+ "\u8207>Yo;",
+ "\u8208>Kyou;",
+ "\u8209>Kyo;",
+ "\u820A>Kyuu;",
+ "\u820C>Zetsu;",
+ "\u820D>Sha;",
+ "\u820E>Sha;",
+ "\u8210>Shi;",
+ "\u8212>Jo;",
+ "\u8216>Ho;",
+ "\u8217>Ho;",
+ "\u8218>Kan;",
+ "\u821B>Sen;",
+ "\u821C>Shun;",
+ "\u821E>Bu;",
+ "\u821F>Shuu;",
+ "\u8229>Sen;",
+ "\u822A>Kou;",
+ "\u822B>Hou;",
+ "\u822C>Han;",
+ "\u822E>Ro;",
+ "\u8233>Chiku;",
+ "\u8235>Ta;",
+ "\u8236>Haku;",
+ "\u8237>Ken;",
+ "\u8238>Ka;",
+ "\u8239>Sen;",
+ "\u8240>Fu;",
+ "\u8247>Tei;",
+ "\u8258>Sou;",
+ "\u8259>Sou;",
+ "\u825A>Sou;",
+ "\u825F>Dou;",
+ "\u8262>Shou;",
+ "\u8264>Gi;",
+ "\u8266>Kan;",
+ "\u8268>Mou;",
+ "\u826A>Ro;",
+ "\u826B>Ro;",
+ "\u826E>Kon;",
+ "\u826F>Ryou;",
+ "\u8271>Kan;",
+ "\u8272>Shoku;",
+ "\u8276>En;",
+ "\u8277>En;",
+ "\u8278>Sou;",
+ "\u827E>Gai;",
+ "\u828B>U;",
+ "\u828D>Shaku;",
+ "\u8292>Bou;",
+ "\u8299>Fu;",
+ "\u829D>Shi;",
+ "\u829F>San;",
+ "\u82A5>Kai;",
+ "\u82A6>Ro;",
+ "\u82AB>Gen;",
+ "\u82AC>Fun;",
+ "\u82AD>Ba;",
+ "\u82AF>Shin;",
+ "\u82B1>Ka;",
+ "\u82B3>Hou;",
+ "\u82B8>Gei;",
+ "\u82B9>Kin;",
+ "\u82BB>Suu;",
+ "\u82BD>Ga;",
+ "\u82C5>Gai;",
+ "\u82D1>En;",
+ "\u82D2>Zen;",
+ "\u82D3>Rei;",
+ "\u82D4>Tai;",
+ "\u82D7>Byou;",
+ "\u82D9>Ryuu;",
+ "\u82DB>Ka;",
+ "\u82DC>Boku;",
+ "\u82DE>Hou;",
+ "\u82DF>Kou;",
+ "\u82E1>I;",
+ "\u82E3>Kyo;",
+ "\u82E5>Jaku;",
+ "\u82E6>Ku;",
+ "\u82E7>Cho;",
+ "\u82EB>Sen;",
+ "\u82F1>Ei;",
+ "\u82F3>Tou;",
+ "\u82F4>So;",
+ "\u82F9>Hei;",
+ "\u82FA>Mai;",
+ "\u82FB>Fu;",
+ "\u8302>Mo;",
+ "\u8303>Han;",
+ "\u8304>Ka;",
+ "\u8305>Bou;",
+ "\u8306>Bou;",
+ "\u8309>Matsu;",
+ "\u830E>Kei;",
+ "\u8316>Kaku;",
+ "\u8317>Mei;",
+ "\u8318>Ri;",
+ "\u831C>Sen;",
+ "\u8323>Go;",
+ "\u8328>Shi;",
+ "\u832B>Bou;",
+ "\u832F>Fuku;",
+ "\u8331>Shu;",
+ "\u8332>Ji;",
+ "\u8334>Kai;",
+ "\u8335>In;",
+ "\u8336>Cha;",
+ "\u8338>Jou;",
+ "\u8339>Jo;",
+ "\u8340>Jun;",
+ "\u8345>Tou;",
+ "\u8349>Sou;",
+ "\u834A>Kei;",
+ "\u834F>Jin;",
+ "\u8350>Sen;",
+ "\u8352>Kou;",
+ "\u8358>Sou;",
+ "\u8373>Tou;",
+ "\u8375>Jin;",
+ "\u8377>Ka;",
+ "\u837B>Teki;",
+ "\u837C>To;",
+ "\u8385>Ri;",
+ "\u8387>Cho;",
+ "\u8389>Chi;",
+ "\u838A>Sou;",
+ "\u838E>Sa;",
+ "\u8393>Mai;",
+ "\u8396>Kei;",
+ "\u839A>En;",
+ "\u839E>Kan;",
+ "\u839F>Kan;",
+ "\u83A0>Yuu;",
+ "\u83A2>Kyou;",
+ "\u83A8>Rou;",
+ "\u83AA>Ga;",
+ "\u83AB>Bo;",
+ "\u83B1>Rai;",
+ "\u83B5>To;",
+ "\u83BD>Bou;",
+ "\u83C1>Sei;",
+ "\u83C5>Kan;",
+ "\u83CA>Kiku;",
+ "\u83CC>Kin;",
+ "\u83CE>Kon;",
+ "\u83D3>Ka;",
+ "\u83D6>Shou;",
+ "\u83D8>Suu;",
+ "\u83DC>Sai;",
+ "\u83DF>To;",
+ "\u83E0>Ha;",
+ "\u83E9>Hai;",
+ "\u83EB>Kin;",
+ "\u83EF>Ka;",
+ "\u83F0>Ko;",
+ "\u83F1>Ryou;",
+ "\u83F2>Hi;",
+ "\u83F4>An;",
+ "\u83F7>Sou;",
+ "\u83FB>Rin;",
+ "\u83FD>Shuku;",
+ "\u8403>Sui;",
+ "\u8404>Tou;",
+ "\u8407>Chou;",
+ "\u840B>Sei;",
+ "\u840C>Hou;",
+ "\u840D>Hei;",
+ "\u840E>I;",
+ "\u8413>Gi;",
+ "\u8420>Hou;",
+ "\u8429>Shuu;",
+ "\u842A>Kuwa;",
+ "\u842C>Man;",
+ "\u8431>Ken;",
+ "\u8435>Wa;",
+ "\u8438>Yu;",
+ "\u843C>Gaku;",
+ "\u843D>Raku;",
+ "\u8446>Ho;",
+ "\u8449>You;",
+ "\u844E>Ritsu;",
+ "\u8457>Cho;",
+ "\u845B>Katsu;",
+ "\u8461>Ho;",
+ "\u8462>Gai;",
+ "\u8463>Tou;",
+ "\u8466>I;",
+ "\u8469>Ha;",
+ "\u846B>Ko;",
+ "\u846C>Sou;",
+ "\u846D>Ka;",
+ "\u846E>Tan;",
+ "\u846F>Yaku;",
+ "\u8471>Sou;",
+ "\u8475>Ki;",
+ "\u8477>Gun;",
+ "\u8479>Shi;",
+ "\u847A>Shuu;",
+ "\u8482>Tei;",
+ "\u8484>Kan;",
+ "\u848B>Shou;",
+ "\u8490>Shuu;",
+ "\u8494>Shi;",
+ "\u8499>Bou;",
+ "\u849C>San;",
+ "\u849F>Kon;",
+ "\u84A1>Hou;",
+ "\u84AD>Suu;",
+ "\u84B2>Ho;",
+ "\u84B8>Jou;",
+ "\u84B9>Ken;",
+ "\u84BB>Jaku;",
+ "\u84BC>Sou;",
+ "\u84BF>Kou;",
+ "\u84C1>Shin;",
+ "\u84C4>Chiku;",
+ "\u84C6>Seki;",
+ "\u84C9>You;",
+ "\u84CA>Ou;",
+ "\u84CB>Gai;",
+ "\u84CD>Shi;",
+ "\u84D0>Joku;",
+ "\u84D1>Sa;",
+ "\u84D6>Hi;",
+ "\u84DA>Chou;",
+ "\u84EC>Hou;",
+ "\u84EE>Ren;",
+ "\u84F4>Shun;",
+ "\u84FC>Ryou;",
+ "\u84FF>Shuku;",
+ "\u8500>Hou;",
+ "\u8506>Ryou;",
+ "\u8511>Betsu;",
+ "\u8513>Ban;",
+ "\u8514>Fuku;",
+ "\u8515>Tei;",
+ "\u8517>Sho;",
+ "\u8518>Shin;",
+ "\u851A>Utsu;",
+ "\u851F>Zoku;",
+ "\u8521>Sai;",
+ "\u8526>Chou;",
+ "\u852C>So;",
+ "\u852D>In;",
+ "\u8535>Zou;",
+ "\u853D>Hei;",
+ "\u8540>Kyoku;",
+ "\u8541>Jin;",
+ "\u8543>Ban;",
+ "\u8548>Shin;",
+ "\u8549>Shou;",
+ "\u854A>Zui;",
+ "\u854B>Zui;",
+ "\u854E>Kyou;",
+ "\u8555>Yuu;",
+ "\u8557>Ro;",
+ "\u8558>Jou;",
+ "\u855A>Gaku;",
+ "\u8563>Shun;",
+ "\u8568>Ketsu;",
+ "\u8569>Tou;",
+ "\u856A>Bu;",
+ "\u856D>Shou;",
+ "\u8577>Yo;",
+ "\u857E>Rai;",
+ "\u8580>Un;",
+ "\u8584>Haku;",
+ "\u8587>Bi;",
+ "\u8588>Kai;",
+ "\u858A>Kei;",
+ "\u8590>Rou;",
+ "\u8591>Kyou;",
+ "\u8594>Shoku;",
+ "\u8597>En;",
+ "\u8599>Tei;",
+ "\u859B>Setsu;",
+ "\u859C>Heki;",
+ "\u85A4>Kai;",
+ "\u85A6>Sen;",
+ "\u85A8>Kou;",
+ "\u85A9>Satsu;",
+ "\u85AA>Shin;",
+ "\u85AB>Kun;",
+ "\u85AC>Yaku;",
+ "\u85AE>Sou;",
+ "\u85AF>Sho;",
+ "\u85B9>Tai;",
+ "\u85BA>Sei;",
+ "\u85C1>Kou;",
+ "\u85C9>Sha;",
+ "\u85CD>Ran;",
+ "\u85CF>Zou;",
+ "\u85D0>Baku;",
+ "\u85D5>Guu;",
+ "\u85DC>Rei;",
+ "\u85DD>Gei;",
+ "\u85E4>Tou;",
+ "\u85E5>Yaku;",
+ "\u85E9>Han;",
+ "\u85EA>Sou;",
+ "\u85F7>Sho;",
+ "\u85F9>Ai;",
+ "\u85FA>Rin;",
+ "\u85FB>Sou;",
+ "\u85FE>Rai;",
+ "\u8602>Zui;",
+ "\u8606>Ro;",
+ "\u8607>So;",
+ "\u860A>Un;",
+ "\u860B>Hin;",
+ "\u8613>So;",
+ "\u8616>Getsu;",
+ "\u8617>Haku;",
+ "\u861A>Sen;",
+ "\u8622>Rou;",
+ "\u862D>Ran;",
+ "\u862F>Tou;",
+ "\u863F>Ra;",
+ "\u864D>Ko;",
+ "\u864E>Ko;",
+ "\u8650>Gyaku;",
+ "\u8654>Ken;",
+ "\u8655>Sho;",
+ "\u865A>Kyo;",
+ "\u865C>Ryo;",
+ "\u865E>Gu;",
+ "\u865F>Gou;",
+ "\u8667>Ki;",
+ "\u866B>Chuu;",
+ "\u8671>Shitsu;",
+ "\u8679>Kou;",
+ "\u867B>Bou;",
+ "\u868A>Bun;",
+ "\u868B>Zei;",
+ "\u868C>Hou;",
+ "\u8693>In;",
+ "\u8695>San;",
+ "\u86A3>Kou;",
+ "\u86A4>Sou;",
+ "\u86A9>Shi;",
+ "\u86AA>Tou;",
+ "\u86AB>Hou;",
+ "\u86AF>Kyuu;",
+ "\u86B0>Yuu;",
+ "\u86B6>Kan;",
+ "\u86C4>Ko;",
+ "\u86C6>Sho;",
+ "\u86C7>Ja;",
+ "\u86C9>Rei;",
+ "\u86CB>Tan;",
+ "\u86CD>Kei;",
+ "\u86CE>Rei;",
+ "\u86D4>Kai;",
+ "\u86D9>A;",
+ "\u86DB>Shu;",
+ "\u86DE>Katsu;",
+ "\u86DF>Kou;",
+ "\u86E4>Kou;",
+ "\u86E9>Kyou;",
+ "\u86EC>Kyou;",
+ "\u86ED>Shitsu;",
+ "\u86EE>Ban;",
+ "\u86F8>Sou;",
+ "\u86F9>You;",
+ "\u86FB>Zei;",
+ "\u86FE>Ga;",
+ "\u8700>Shoku;",
+ "\u8702>Hou;",
+ "\u8703>Shin;",
+ "\u8706>Ken;",
+ "\u8708>Go;",
+ "\u8709>Fu;",
+ "\u870A>Ri;",
+ "\u870D>Sho;",
+ "\u8711>Tan;",
+ "\u8712>En;",
+ "\u8718>Chi;",
+ "\u871A>Hi;",
+ "\u871C>Mitsu;",
+ "\u8725>Seki;",
+ "\u8729>Chou;",
+ "\u8734>Eki;",
+ "\u8737>Ken;",
+ "\u873B>Sei;",
+ "\u873F>En;",
+ "\u8749>Sen;",
+ "\u874B>Rou;",
+ "\u874C>Ka;",
+ "\u874E>Katsu;",
+ "\u8753>Yu;",
+ "\u8755>Shoku;",
+ "\u8757>Kou;",
+ "\u8759>Hen;",
+ "\u875F>I;",
+ "\u8760>Fuku;",
+ "\u8763>Yuu;",
+ "\u8766>Ka;",
+ "\u8768>Shitsu;",
+ "\u876A>Tou;",
+ "\u876E>Fuku;",
+ "\u8774>Ko;",
+ "\u8776>Chou;",
+ "\u8778>Ka;",
+ "\u877F>You;",
+ "\u8782>Rou;",
+ "\u878D>Yuu;",
+ "\u879F>Mei;",
+ "\u87A2>Kei;",
+ "\u87AB>Seki;",
+ "\u87AF>Gou;",
+ "\u87B3>Tou;",
+ "\u87BA>Ra;",
+ "\u87BB>Rou;",
+ "\u87BD>Shuu;",
+ "\u87C0>Shutsu;",
+ "\u87C4>Chitsu;",
+ "\u87C6>Ba;",
+ "\u87C7>Ba;",
+ "\u87CB>Shitsu;",
+ "\u87D0>Tou;",
+ "\u87D2>Bou;",
+ "\u87E0>Han;",
+ "\u87EF>Gyou;",
+ "\u87F2>Ki;",
+ "\u87F6>Tei;",
+ "\u87F7>Tou;",
+ "\u87F9>Kai;",
+ "\u87FB>Gi;",
+ "\u87FE>Sen;",
+ "\u8805>You;",
+ "\u880D>Katsu;",
+ "\u880E>Bou;",
+ "\u880F>Kai;",
+ "\u8811>Ei;",
+ "\u8815>Da;",
+ "\u8816>Kaku;",
+ "\u8821>Rei;",
+ "\u8822>Shun;",
+ "\u8823>Rei;",
+ "\u8827>To;",
+ "\u8831>Ko;",
+ "\u8836>San;",
+ "\u8839>To;",
+ "\u883B>Ban;",
+ "\u8840>Ketsu;",
+ "\u8842>Jiku;",
+ "\u8844>Jiku;",
+ "\u8846>Shuu;",
+ "\u884C>Kou;",
+ "\u884D>En;",
+ "\u8852>Ken;",
+ "\u8853>Jutsu;",
+ "\u8857>Gai;",
+ "\u8859>Gyo;",
+ "\u885B>Ei;",
+ "\u885D>Shou;",
+ "\u885E>Ei;",
+ "\u8861>Kou;",
+ "\u8862>Ku;",
+ "\u8863>I;",
+ "\u8868>Hyou;",
+ "\u886B>San;",
+ "\u8870>Sa;",
+ "\u8872>Dou;",
+ "\u8875>Jitsu;",
+ "\u8877>Chuu;",
+ "\u887D>Jin;",
+ "\u887E>Kin;",
+ "\u887F>Kin;",
+ "\u8881>En;",
+ "\u8882>Bei;",
+ "\u8888>Ka;",
+ "\u888B>Tai;",
+ "\u888D>Hou;",
+ "\u8892>Tan;",
+ "\u8896>Shuu;",
+ "\u8897>Shin;",
+ "\u8899>Ha;",
+ "\u889E>Kon;",
+ "\u88A2>Han;",
+ "\u88A4>Bou;",
+ "\u88AB>Hi;",
+ "\u88AE>Ne;",
+ "\u88B1>Fuku;",
+ "\u88B4>Ko;",
+ "\u88B5>Jin;",
+ "\u88B7>Kou;",
+ "\u88BF>Kei;",
+ "\u88C1>Sai;",
+ "\u88C2>Retsu;",
+ "\u88C5>Sou;",
+ "\u88CF>Ri;",
+ "\u88D4>Ei;",
+ "\u88D5>Yuu;",
+ "\u88D8>Kyuu;",
+ "\u88D9>Kun;",
+ "\u88DC>Ho;",
+ "\u88DD>Sou;",
+ "\u88DF>Sa;",
+ "\u88E1>Ri;",
+ "\u88E8>Hi;",
+ "\u88F2>Ryou;",
+ "\u88F3>Shou;",
+ "\u88F4>Hai;",
+ "\u88F8>Ra;",
+ "\u88F9>Ka;",
+ "\u88FC>Seki;",
+ "\u88FD>Sei;",
+ "\u88FE>Kyo;",
+ "\u8902>Kai;",
+ "\u8907>Fuku;",
+ "\u890A>Hen;",
+ "\u890C>Kon;",
+ "\u8910>Katsu;",
+ "\u8912>Hou;",
+ "\u8913>Ho;",
+ "\u891D>Tan;",
+ "\u891E>On;",
+ "\u8925>Joku;",
+ "\u892A>Tai;",
+ "\u892B>Chi;",
+ "\u8936>Chou;",
+ "\u8938>Rou;",
+ "\u893B>Setsu;",
+ "\u8941>Kyou;",
+ "\u8943>Hou;",
+ "\u8944>Jou;",
+ "\u894C>Tan;",
+ "\u894D>Zatsu;",
+ "\u8956>Ou;",
+ "\u895E>Heki;",
+ "\u895F>Kin;",
+ "\u8960>Tou;",
+ "\u8964>Ran;",
+ "\u8966>Ju;",
+ "\u896A>Betsu;",
+ "\u896D>Ketsu;",
+ "\u896F>Shin;",
+ "\u8972>Shuu;",
+ "\u8974>Ran;",
+ "\u897E>Aka;",
+ "\u897F>Sei;",
+ "\u8981>You;",
+ "\u8983>Tan;",
+ "\u8986>Fuku;",
+ "\u8987>Ha;",
+ "\u8988>Kaku;",
+ "\u898A>Ki;",
+ "\u898B>Ken;",
+ "\u898F>Ki;",
+ "\u8993>Beki;",
+ "\u8996>Shi;",
+ "\u8997>Shi;",
+ "\u8998>Ten;",
+ "\u899A>Kaku;",
+ "\u89A1>Geki;",
+ "\u89A6>Yu;",
+ "\u89A7>Ran;",
+ "\u89A9>To;",
+ "\u89AA>Shin;",
+ "\u89AC>Ki;",
+ "\u89AF>Kou;",
+ "\u89B2>Kin;",
+ "\u89B3>Kan;",
+ "\u89BA>Kaku;",
+ "\u89BD>Ran;",
+ "\u89BF>Teki;",
+ "\u89C0>Kan;",
+ "\u89D2>Kaku;",
+ "\u89DA>Ko;",
+ "\u89DC>Shi;",
+ "\u89DD>Tei;",
+ "\u89E3>Kai;",
+ "\u89E6>Shoku;",
+ "\u89E7>Kai;",
+ "\u89F4>Shou;",
+ "\u89F8>Shoku;",
+ "\u8A00>Gen;",
+ "\u8A02>Tei;",
+ "\u8A03>Fu;",
+ "\u8A08>Kei;",
+ "\u8A0A>Jin;",
+ "\u8A0C>Kou;",
+ "\u8A0E>Tou;",
+ "\u8A10>Ketsu;",
+ "\u8A13>Kun;",
+ "\u8A16>Kitsu;",
+ "\u8A17>Taku;",
+ "\u8A18>Ki;",
+ "\u8A1B>Ka;",
+ "\u8A1D>Ga;",
+ "\u8A1F>Shou;",
+ "\u8A23>Ketsu;",
+ "\u8A25>Totsu;",
+ "\u8A2A>Hou;",
+ "\u8A2D>Setsu;",
+ "\u8A31>Kyo;",
+ "\u8A33>Yaku;",
+ "\u8A34>So;",
+ "\u8A36>Ka;",
+ "\u8A3A>Shin;",
+ "\u8A3B>Chuu;",
+ "\u8A3C>Shou;",
+ "\u8A41>Ko;",
+ "\u8A46>Tei;",
+ "\u8A48>Ri;",
+ "\u8A50>Sa;",
+ "\u8A51>Ta;",
+ "\u8A52>Tai;",
+ "\u8A54>Shou;",
+ "\u8A55>Hyou;",
+ "\u8A5B>So;",
+ "\u8A5E>Shi;",
+ "\u8A60>Ei;",
+ "\u8A62>Jun;",
+ "\u8A63>Kei;",
+ "\u8A66>Shi;",
+ "\u8A69>Shi;",
+ "\u8A6B>Ta;",
+ "\u8A6C>Kou;",
+ "\u8A6D>Ki;",
+ "\u8A6E>Sen;",
+ "\u8A70>Kitsu;",
+ "\u8A71>Wa;",
+ "\u8A72>Gai;",
+ "\u8A73>Shou;",
+ "\u8A7C>Kai;",
+ "\u8A82>Chou;",
+ "\u8A84>Rui;",
+ "\u8A85>Chuu;",
+ "\u8A87>Ko;",
+ "\u8A89>Yo;",
+ "\u8A8C>Shi;",
+ "\u8A8D>Nin;",
+ "\u8A91>Kyou;",
+ "\u8A93>Sei;",
+ "\u8A95>Tan;",
+ "\u8A98>Yuu;",
+ "\u8A9A>Shou;",
+ "\u8A9E>Go;",
+ "\u8AA0>Sei;",
+ "\u8AA1>Kai;",
+ "\u8AA3>Fu;",
+ "\u8AA4>Go;",
+ "\u8AA5>Kou;",
+ "\u8AA6>Shou;",
+ "\u8AA8>Kai;",
+ "\u8AAC>Setsu;",
+ "\u8AAD>Toku;",
+ "\u8AB0>Sui;",
+ "\u8AB2>Ka;",
+ "\u8AB9>Hi;",
+ "\u8ABC>Gi;",
+ "\u8ABF>Chou;",
+ "\u8AC2>Ten;",
+ "\u8AC4>Jun;",
+ "\u8AC7>Dan;",
+ "\u8ACB>Sei;",
+ "\u8ACC>Kan;",
+ "\u8ACD>Sou;",
+ "\u8ACF>Shu;",
+ "\u8AD2>Ryou;",
+ "\u8AD6>Ron;",
+ "\u8ADA>Jou;",
+ "\u8ADB>Yu;",
+ "\u8ADC>Chou;",
+ "\u8ADE>Hen;",
+ "\u8AE0>Ken;",
+ "\u8AE1>Shi;",
+ "\u8AE2>Kon;",
+ "\u8AE4>Gaku;",
+ "\u8AE6>Tei;",
+ "\u8AE7>Kai;",
+ "\u8AEB>Kan;",
+ "\u8AED>Yu;",
+ "\u8AEE>Shi;",
+ "\u8AF1>Ki;",
+ "\u8AF3>An;",
+ "\u8AF7>Fuu;",
+ "\u8AF8>Sho;",
+ "\u8AFA>Gen;",
+ "\u8AFE>Daku;",
+ "\u8B00>Bou;",
+ "\u8B01>Etsu;",
+ "\u8B02>I;",
+ "\u8B04>Tou;",
+ "\u8B07>Ken;",
+ "\u8B0C>Ka;",
+ "\u8B0E>Mei;",
+ "\u8B10>Hitsu;",
+ "\u8B14>Gyaku;",
+ "\u8B16>Shoku;",
+ "\u8B17>Bou;",
+ "\u8B19>Ken;",
+ "\u8B1A>Shi;",
+ "\u8B1B>Kou;",
+ "\u8B1D>Sha;",
+ "\u8B20>You;",
+ "\u8B21>You;",
+ "\u8B26>Kei;",
+ "\u8B28>Bo;",
+ "\u8B2B>Taku;",
+ "\u8B2C>Byou;",
+ "\u8B33>Ou;",
+ "\u8B39>Kin;",
+ "\u8B3E>Ban;",
+ "\u8B41>Ka;",
+ "\u8B49>Shou;",
+ "\u8B4C>Ka;",
+ "\u8B4E>Kitsu;",
+ "\u8B4F>Ki;",
+ "\u8B56>Shin;",
+ "\u8B58>Shiki;",
+ "\u8B5A>Tan;",
+ "\u8B5B>Shin;",
+ "\u8B5C>Fu;",
+ "\u8B5F>Sou;",
+ "\u8B66>Kei;",
+ "\u8B6B>Sen;",
+ "\u8B6C>Hi;",
+ "\u8B6F>Yaku;",
+ "\u8B70>Gi;",
+ "\u8B71>Zen;",
+ "\u8B72>Jou;",
+ "\u8B74>Ken;",
+ "\u8B77>Go;",
+ "\u8B7D>Yo;",
+ "\u8B80>Toku;",
+ "\u8B83>San;",
+ "\u8B8A>Hen;",
+ "\u8B8C>En;",
+ "\u8B8E>Shuu;",
+ "\u8B90>Shuu;",
+ "\u8B92>San;",
+ "\u8B93>Jou;",
+ "\u8B96>Shin;",
+ "\u8B99>Kan;",
+ "\u8B9A>San;",
+ "\u8C37>Koku;",
+ "\u8C3A>Ka;",
+ "\u8C3F>Kei;",
+ "\u8C41>Katsu;",
+ "\u8C46>Tou;",
+ "\u8C48>Ki;",
+ "\u8C4A>Hou;",
+ "\u8C4C>En;",
+ "\u8C4E>Ju;",
+ "\u8C50>Hou;",
+ "\u8C55>Shi;",
+ "\u8C5A>Ton;",
+ "\u8C61>Shou;",
+ "\u8C62>Ken;",
+ "\u8C6A>Gou;",
+ "\u8C6B>Yo;",
+ "\u8C6C>Cho;",
+ "\u8C78>Chi;",
+ "\u8C79>Hou;",
+ "\u8C7A>Sai;",
+ "\u8C7C>Hi;",
+ "\u8C82>Chou;",
+ "\u8C85>Kyuu;",
+ "\u8C89>Kaku;",
+ "\u8C8A>Haku;",
+ "\u8C8C>Bou;",
+ "\u8C8D>Ri;",
+ "\u8C8E>Gei;",
+ "\u8C94>Hi;",
+ "\u8C98>Baku;",
+ "\u8C9D>Bai;",
+ "\u8C9E>Tei;",
+ "\u8CA0>Fu;",
+ "\u8CA1>Zai;",
+ "\u8CA2>Kou;",
+ "\u8CA7>Hin;",
+ "\u8CA8>Ka;",
+ "\u8CA9>Han;",
+ "\u8CAA>Don;",
+ "\u8CAB>Kan;",
+ "\u8CAC>Seki;",
+ "\u8CAD>Shitsu;",
+ "\u8CAE>Ni;",
+ "\u8CAF>Cho;",
+ "\u8CB0>Sei;",
+ "\u8CB2>Shi;",
+ "\u8CB3>Ni;",
+ "\u8CB4>Ki;",
+ "\u8CB6>Hen;",
+ "\u8CB7>Bai;",
+ "\u8CB8>Tai;",
+ "\u8CBB>Hi;",
+ "\u8CBC>Ten;",
+ "\u8CBD>I;",
+ "\u8CBF>Bou;",
+ "\u8CC0>Ga;",
+ "\u8CC1>Hi;",
+ "\u8CC2>Ro;",
+ "\u8CC3>Chin;",
+ "\u8CC4>Wai;",
+ "\u8CC7>Shi;",
+ "\u8CC8>Ko;",
+ "\u8CCA>Zoku;",
+ "\u8CCD>Sou;",
+ "\u8CCE>Sen;",
+ "\u8CD1>Shin;",
+ "\u8CD3>Hin;",
+ "\u8CDA>Rai;",
+ "\u8CDB>San;",
+ "\u8CDC>Shi;",
+ "\u8CDE>Shou;",
+ "\u8CE0>Bai;",
+ "\u8CE2>Ken;",
+ "\u8CE3>Bai;",
+ "\u8CE4>Sen;",
+ "\u8CE6>Fu;",
+ "\u8CEA>Shitsu;",
+ "\u8CED>To;",
+ "\u8CFA>Tan;",
+ "\u8CFB>Fu;",
+ "\u8CFC>Kou;",
+ "\u8CFD>Sai;",
+ "\u8D04>Shi;",
+ "\u8D05>Zei;",
+ "\u8D07>In;",
+ "\u8D08>Zou;",
+ "\u8D0A>San;",
+ "\u8D0B>Gan;",
+ "\u8D0D>Sen;",
+ "\u8D0F>Ei;",
+ "\u8D10>Shin;",
+ "\u8D13>Zou;",
+ "\u8D14>Hi;",
+ "\u8D16>Shoku;",
+ "\u8D64>Seki;",
+ "\u8D66>Sha;",
+ "\u8D67>Tan;",
+ "\u8D6B>Kaku;",
+ "\u8D6D>Sha;",
+ "\u8D70>Sou;",
+ "\u8D71>Sou;",
+ "\u8D73>Kyuu;",
+ "\u8D74>Fu;",
+ "\u8D77>Ki;",
+ "\u8D81>Chin;",
+ "\u8D85>Chou;",
+ "\u8D8A>Etsu;",
+ "\u8D99>Chou;",
+ "\u8DA3>Shu;",
+ "\u8DA8>Suu;",
+ "\u8DB3>Soku;",
+ "\u8DBA>Fu;",
+ "\u8DBE>Shi;",
+ "\u8DC2>Ki;",
+ "\u8DCB>Batsu;",
+ "\u8DCC>Tetsu;",
+ "\u8DCF>Ka;",
+ "\u8DD6>Seki;",
+ "\u8DDA>San;",
+ "\u8DDB>Ha;",
+ "\u8DDD>Kyo;",
+ "\u8DDF>Kon;",
+ "\u8DE1>Seki;",
+ "\u8DE3>Sen;",
+ "\u8DE8>Ko;",
+ "\u8DEA>Ki;",
+ "\u8DEB>Kyou;",
+ "\u8DEF>Ro;",
+ "\u8DF3>Chou;",
+ "\u8DF5>Sen;",
+ "\u8DFC>Kyoku;",
+ "\u8DFF>To;",
+ "\u8E08>Sho;",
+ "\u8E09>Ryou;",
+ "\u8E0A>You;",
+ "\u8E0F>Tou;",
+ "\u8E10>Sen;",
+ "\u8E1D>Ka;",
+ "\u8E1E>Kyo;",
+ "\u8E1F>Chi;",
+ "\u8E2A>Shou;",
+ "\u8E30>Yu;",
+ "\u8E34>You;",
+ "\u8E35>Shou;",
+ "\u8E42>Juu;",
+ "\u8E44>Tei;",
+ "\u8E47>Ken;",
+ "\u8E48>Tou;",
+ "\u8E49>Sa;",
+ "\u8E4A>Kei;",
+ "\u8E4C>Shou;",
+ "\u8E50>Seki;",
+ "\u8E55>Hitsu;",
+ "\u8E59>Shuku;",
+ "\u8E5F>Seki;",
+ "\u8E60>Seki;",
+ "\u8E63>Man;",
+ "\u8E64>Shou;",
+ "\u8E72>Son;",
+ "\u8E74>Shuu;",
+ "\u8E76>Ketsu;",
+ "\u8E7C>Boku;",
+ "\u8E81>Sou;",
+ "\u8E84>Heki;",
+ "\u8E85>Choku;",
+ "\u8E87>Cho;",
+ "\u8E8A>Chuu;",
+ "\u8E8B>Sei;",
+ "\u8E8D>Yaku;",
+ "\u8E91>Teki;",
+ "\u8E93>Chi;",
+ "\u8E94>Ten;",
+ "\u8E99>Rin;",
+ "\u8EA1>Jou;",
+ "\u8EAA>Rin;",
+ "\u8EAB>Shin;",
+ "\u8EAC>Kyuu;",
+ "\u8EAF>Ku;",
+ "\u8EB0>Tei;",
+ "\u8EB1>Ta;",
+ "\u8EC6>Tei;",
+ "\u8ECA>Sha;",
+ "\u8ECB>Atsu;",
+ "\u8ECC>Ki;",
+ "\u8ECD>Gun;",
+ "\u8ED2>Ken;",
+ "\u8EDB>Aku;",
+ "\u8EDF>Nan;",
+ "\u8EE2>Ten;",
+ "\u8EE3>Gou;",
+ "\u8EEB>Shin;",
+ "\u8EF8>Jiku;",
+ "\u8EFB>Ka;",
+ "\u8EFC>Itsu;",
+ "\u8EFD>Kei;",
+ "\u8EFE>Shoku;",
+ "\u8F03>Kaku;",
+ "\u8F05>Ro;",
+ "\u8F09>Sai;",
+ "\u8F0A>Chi;",
+ "\u8F0C>Ryou;",
+ "\u8F12>Chou;",
+ "\u8F13>Ban;",
+ "\u8F14>Fu;",
+ "\u8F15>Kei;",
+ "\u8F19>Chou;",
+ "\u8F1B>Ryou;",
+ "\u8F1C>Shi;",
+ "\u8F1D>Ki;",
+ "\u8F1F>Tetsu;",
+ "\u8F26>Ren;",
+ "\u8F29>Hai;",
+ "\u8F2A>Rin;",
+ "\u8F2F>Shuu;",
+ "\u8F33>Sou;",
+ "\u8F38>Yu;",
+ "\u8F39>Fuku;",
+ "\u8F3B>Fuku;",
+ "\u8F3E>Ten;",
+ "\u8F3F>Yo;",
+ "\u8F42>Koku;",
+ "\u8F44>Katsu;",
+ "\u8F45>En;",
+ "\u8F46>Roku;",
+ "\u8F49>Ten;",
+ "\u8F4D>Tetsu;",
+ "\u8F4E>Kyou;",
+ "\u8F57>Kan;",
+ "\u8F5C>Ji;",
+ "\u8F5F>Gou;",
+ "\u8F61>Hi;",
+ "\u8F62>Reki;",
+ "\u8F63>Reki;",
+ "\u8F64>Ro;",
+ "\u8F9B>Shin;",
+ "\u8F9C>Ko;",
+ "\u8F9E>Ji;",
+ "\u8F9F>Heki;",
+ "\u8FA3>Ratsu;",
+ "\u8FA7>Ben;",
+ "\u8FA8>Ben;",
+ "\u8FAD>Ji;",
+ "\u8FAE>Hen;",
+ "\u8FAF>Ben;",
+ "\u8FB0>Shin;",
+ "\u8FB1>Joku;",
+ "\u8FB2>Nou;",
+ "\u8FBA>Hen;",
+ "\u8FBF>Ten;",
+ "\u8FC2>U;",
+ "\u8FC4>Kitsu;",
+ "\u8FC5>Jin;",
+ "\u8FCE>Gei;",
+ "\u8FD1>Kin;",
+ "\u8FD4>Hen;",
+ "\u8FE2>Chou;",
+ "\u8FE5>Kei;",
+ "\u8FE6>Ka;",
+ "\u8FE9>Ji;",
+ "\u8FEA>Teki;",
+ "\u8FEB>Haku;",
+ "\u8FED>Tetsu;",
+ "\u8FEF>Tou;",
+ "\u8FF0>Jutsu;",
+ "\u8FF4>Kai;",
+ "\u8FF7>Mei;",
+ "\u8FF8>Hou;",
+ "\u8FF9>Seki;",
+ "\u8FFA>Dai;",
+ "\u8FFD>Tsui;",
+ "\u9000>Tai;",
+ "\u9001>Sou;",
+ "\u9003>Tou;",
+ "\u9005>Kou;",
+ "\u9006>Gyaku;",
+ "\u900B>Ho;",
+ "\u900D>Shou;",
+ "\u900E>Shuu;",
+ "\u900F>Tou;",
+ "\u9010>Chiku;",
+ "\u9011>Kyuu;",
+ "\u9013>Tei;",
+ "\u9014>To;",
+ "\u9015>Kei;",
+ "\u9016>Teki;",
+ "\u9017>Tou;",
+ "\u9019>Gen;",
+ "\u901A>Ts;",
+ "\u901D>Sei;",
+ "\u901E>Tei;",
+ "\u901F>Soku;",
+ "\u9020>Zou;",
+ "\u9021>Shun;",
+ "\u9022>Hou;",
+ "\u9023>Ren;",
+ "\u902E>Tai;",
+ "\u9031>Shuu;",
+ "\u9032>Shin;",
+ "\u9035>Ki;",
+ "\u9036>I;",
+ "\u9038>Itsu;",
+ "\u9039>Tatsu;",
+ "\u903C>Hitsu;",
+ "\u903E>Yu;",
+ "\u9041>Ton;",
+ "\u9042>Sui;",
+ "\u9045>Chi;",
+ "\u9047>Guu;",
+ "\u9049>Tei;",
+ "\u904A>Yuu;",
+ "\u904B>Un;",
+ "\u904D>Hen;",
+ "\u904E>Ka;",
+ "\u904F>Atsu;",
+ "\u9050>Ka;",
+ "\u9051>Kou;",
+ "\u9052>Shuu;",
+ "\u9053>Dou;",
+ "\u9054>Tatsu;",
+ "\u9055>I;",
+ "\u9058>Kou;",
+ "\u9059>You;",
+ "\u905C>Son;",
+ "\u905E>Tei;",
+ "\u9060>En;",
+ "\u9061>So;",
+ "\u9063>Ken;",
+ "\u9065>You;",
+ "\u9068>Gou;",
+ "\u9069>Teki;",
+ "\u906D>Sou;",
+ "\u906E>Sha;",
+ "\u906F>Ton;",
+ "\u9072>Chi;",
+ "\u9075>Jun;",
+ "\u9076>Jou;",
+ "\u9077>Sen;",
+ "\u9078>Sen;",
+ "\u907A>I;",
+ "\u907C>Ryou;",
+ "\u907D>Kyo;",
+ "\u907F>Hi;",
+ "\u9080>You;",
+ "\u9081>Bai;",
+ "\u9082>Kai;",
+ "\u9083>Sui;",
+ "\u9084>Kan;",
+ "\u9087>Ji;",
+ "\u9089>Hen;",
+ "\u908A>Hen;",
+ "\u908F>Ra;",
+ "\u9091>Yuu;",
+ "\u90A3>Da;",
+ "\u90A6>Hou;",
+ "\u90A8>Son;",
+ "\u90AA>Ya;",
+ "\u90AF>Kan;",
+ "\u90B1>Kyuu;",
+ "\u90B5>Shou;",
+ "\u90B8>Tei;",
+ "\u90C1>Iku;",
+ "\u90CA>Kou;",
+ "\u90CE>Rou;",
+ "\u90DB>Fu;",
+ "\u90E1>Gun;",
+ "\u90E2>Ei;",
+ "\u90E4>Geki;",
+ "\u90E8>Bu;",
+ "\u90ED>Kaku;",
+ "\u90F5>Yuu;",
+ "\u90F7>Kyou;",
+ "\u90FD>To;",
+ "\u9102>Gaku;",
+ "\u9112>Suu;",
+ "\u9119>Hi;",
+ "\u912D>Tei;",
+ "\u9130>Rin;",
+ "\u9132>Tan;",
+ "\u9149>Yuu;",
+ "\u914A>Tei;",
+ "\u914B>Shuu;",
+ "\u914C>Shaku;",
+ "\u914D>Hai;",
+ "\u914E>Chuu;",
+ "\u9152>Shu;",
+ "\u9154>Sui;",
+ "\u9156>Tan;",
+ "\u9158>Tou;",
+ "\u9162>Saku;",
+ "\u9163>Kan;",
+ "\u9165>So;",
+ "\u9169>Mei;",
+ "\u916A>Raku;",
+ "\u916C>Shuu;",
+ "\u9172>Tei;",
+ "\u9173>In;",
+ "\u9175>Kou;",
+ "\u9177>Koku;",
+ "\u9178>San;",
+ "\u9182>Rin;",
+ "\u9187>Shun;",
+ "\u9189>Sui;",
+ "\u918B>Saku;",
+ "\u918D>Tei;",
+ "\u9190>Ko;",
+ "\u9192>Sei;",
+ "\u9197>Hatsu;",
+ "\u919C>Shuu;",
+ "\u91A2>Kai;",
+ "\u91A4>Shou;",
+ "\u91AA>Rou;",
+ "\u91AB>I;",
+ "\u91AF>Kei;",
+ "\u91B4>Rei;",
+ "\u91B5>Kyo;",
+ "\u91B8>Jou;",
+ "\u91BA>Kun;",
+ "\u91C0>Jou;",
+ "\u91C1>Kin;",
+ "\u91C6>Han;",
+ "\u91C7>Sai;",
+ "\u91C8>Shaku;",
+ "\u91C9>Yuu;",
+ "\u91CB>Shaku;",
+ "\u91CC>Ri;",
+ "\u91CD>Chou;",
+ "\u91CE>Ya;",
+ "\u91CF>Ryou;",
+ "\u91D0>Ri;",
+ "\u91D1>Kin;",
+ "\u91D6>Tou;",
+ "\u91D8>Tei;",
+ "\u91DB>Koku;",
+ "\u91DC>Fu;",
+ "\u91DD>Shin;",
+ "\u91DF>Hatsu;",
+ "\u91E1>Fu;",
+ "\u91E3>Chou;",
+ "\u91E6>Kou;",
+ "\u91E7>Sen;",
+ "\u91F5>Sa;",
+ "\u91F6>Shi;",
+ "\u91FC>Ken;",
+ "\u91FF>Kin;",
+ "\u920D>Don;",
+ "\u920E>Kou;",
+ "\u9211>Han;",
+ "\u9214>Shou;",
+ "\u9215>Chuu;",
+ "\u921E>Kin;",
+ "\u9229>Ro;",
+ "\u922C>Taku;",
+ "\u9234>Rei;",
+ "\u9237>Ko;",
+ "\u923F>Ten;",
+ "\u9244>Tetsu;",
+ "\u9245>Kyo;",
+ "\u9248>Sha;",
+ "\u9249>Ken;",
+ "\u924B>Hou;",
+ "\u9250>Seki;",
+ "\u9257>Kan;",
+ "\u925A>Ryuu;",
+ "\u925B>En;",
+ "\u925E>Etsu;",
+ "\u9262>Hachi;",
+ "\u9264>Kou;",
+ "\u9266>Sei;",
+ "\u9271>Kou;",
+ "\u927E>Bou;",
+ "\u9280>Gin;",
+ "\u9283>Juu;",
+ "\u9285>Dou;",
+ "\u9291>Sen;",
+ "\u9293>Sen;",
+ "\u9295>Tetsu;",
+ "\u9296>Shu;",
+ "\u9298>Mei;",
+ "\u929A>You;",
+ "\u929B>Sen;",
+ "\u929C>Kan;",
+ "\u92AD>Sen;",
+ "\u92B7>Shou;",
+ "\u92B9>Shuu;",
+ "\u92CF>Kyou;",
+ "\u92D2>Hou;",
+ "\u92E4>Jo;",
+ "\u92E9>Bou;",
+ "\u92EA>Ho;",
+ "\u92ED>Ei;",
+ "\u92F3>Chuu;",
+ "\u92F8>Kyo;",
+ "\u92FA>En;",
+ "\u92FC>Kou;",
+ "\u9306>Sei;",
+ "\u930F>A;",
+ "\u9310>Sui;",
+ "\u9318>Tsui;",
+ "\u9319>Shi;",
+ "\u931A>Sou;",
+ "\u9320>Jou;",
+ "\u9322>Sen;",
+ "\u9323>Tei;",
+ "\u9326>Kin;",
+ "\u9328>Byou;",
+ "\u932B>Seki;",
+ "\u932C>Ren;",
+ "\u932E>Ko;",
+ "\u932F>Saku;",
+ "\u9332>Roku;",
+ "\u933B>Bu;",
+ "\u9344>Kei;",
+ "\u934B>Ka;",
+ "\u934D>To;",
+ "\u9354>Gaku;",
+ "\u9356>Chin;",
+ "\u935B>Tan;",
+ "\u935C>Ka;",
+ "\u9360>Kou;",
+ "\u936C>Shuu;",
+ "\u936E>Chuu;",
+ "\u9375>Ken;",
+ "\u937C>Shin;",
+ "\u937E>Shou;",
+ "\u938C>Ren;",
+ "\u9394>You;",
+ "\u9396>Sa;",
+ "\u9397>Sou;",
+ "\u939A>Tsui;",
+ "\u93A7>Gai;",
+ "\u93AC>Kou;",
+ "\u93AD>Chin;",
+ "\u93AE>Chin;",
+ "\u93B0>Itsu;",
+ "\u93C3>Zoku;",
+ "\u93C8>Ren;",
+ "\u93D0>Ryuu;",
+ "\u93D1>Teki;",
+ "\u93D6>Ou;",
+ "\u93D7>Kou;",
+ "\u93D8>Shou;",
+ "\u93DD>Man;",
+ "\u93E1>Kyou;",
+ "\u93E4>Rou;",
+ "\u93E5>Shuu;",
+ "\u93E8>San;",
+ "\u9403>Dou;",
+ "\u9407>Han;",
+ "\u9410>Ryou;",
+ "\u9413>Tai;",
+ "\u9414>Shin;",
+ "\u9418>Shou;",
+ "\u9419>Tou;",
+ "\u941A>A;",
+ "\u9421>Tetsu;",
+ "\u942B>Sen;",
+ "\u9435>Tetsu;",
+ "\u9436>Kan;",
+ "\u9438>Taku;",
+ "\u943A>Tou;",
+ "\u9441>Ban;",
+ "\u9444>Chuu;",
+ "\u9451>Kan;",
+ "\u9452>Kan;",
+ "\u945A>San;",
+ "\u945B>Kou;",
+ "\u945E>Rou;",
+ "\u9460>Shaku;",
+ "\u9462>Ryo;",
+ "\u946A>Ro;",
+ "\u9470>Yaku;",
+ "\u9475>Kan;",
+ "\u9477>Jou;",
+ "\u947C>Ra;",
+ "\u947D>San;",
+ "\u947E>Ran;",
+ "\u947F>Saku;",
+ "\u9481>Kaku;",
+ "\u9577>Chou;",
+ "\u9580>Mon;",
+ "\u9582>San;",
+ "\u9583>Sen;",
+ "\u9587>Hei;",
+ "\u9589>Hei;",
+ "\u958B>Kai;",
+ "\u958F>Jun;",
+ "\u9591>Kan;",
+ "\u9593>Kan;",
+ "\u9594>Bin;",
+ "\u9598>Kou;",
+ "\u9599>Tou;",
+ "\u95A2>Kan;",
+ "\u95A3>Kaku;",
+ "\u95A4>Kou;",
+ "\u95A5>Batsu;",
+ "\u95A7>Kou;",
+ "\u95A8>Kei;",
+ "\u95AD>Ro;",
+ "\u95B2>Etsu;",
+ "\u95B9>En;",
+ "\u95BB>En;",
+ "\u95BC>A;",
+ "\u95BE>Yoku;",
+ "\u95C3>Geki;",
+ "\u95C7>An;",
+ "\u95CA>Katsu;",
+ "\u95CC>Ran;",
+ "\u95CD>To;",
+ "\u95D4>Kou;",
+ "\u95D5>Ketsu;",
+ "\u95D6>Chin;",
+ "\u95D8>Tou;",
+ "\u95DC>Kan;",
+ "\u95E1>Sen;",
+ "\u95E2>Heki;",
+ "\u95E5>Tatsu;",
+ "\u961C>Fu;",
+ "\u9621>Sen;",
+ "\u9628>Aku;",
+ "\u962A>Han;",
+ "\u962E>Gen;",
+ "\u962F>Shi;",
+ "\u9632>Bou;",
+ "\u963B>So;",
+ "\u963F>A;",
+ "\u9640>Da;",
+ "\u9642>Ha;",
+ "\u9644>Fu;",
+ "\u964B>Rou;",
+ "\u964C>Haku;",
+ "\u964D>Kou;",
+ "\u964F>Ta;",
+ "\u9650>Gen;",
+ "\u965B>Hei;",
+ "\u965C>Kou;",
+ "\u965D>Sen;",
+ "\u965E>Shou;",
+ "\u965F>Choku;",
+ "\u9662>In;",
+ "\u9663>Jin;",
+ "\u9664>Jo;",
+ "\u9665>Kan;",
+ "\u9666>Tou;",
+ "\u966A>Bai;",
+ "\u966C>Suu;",
+ "\u9670>In;",
+ "\u9672>Sui;",
+ "\u9673>Chin;",
+ "\u9675>Ryou;",
+ "\u9676>Tou;",
+ "\u9677>Kan;",
+ "\u9678>Riku;",
+ "\u967A>Ken;",
+ "\u967D>You;",
+ "\u9685>Guu;",
+ "\u9686>Ryuu;",
+ "\u9688>Wai;",
+ "\u968A>Tai;",
+ "\u968B>Ta;",
+ "\u968D>Kou;",
+ "\u968E>Kai;",
+ "\u968F>Zui;",
+ "\u9694>Kaku;",
+ "\u9695>In;",
+ "\u9697>Kai;",
+ "\u9698>Ai;",
+ "\u9699>Geki;",
+ "\u969B>Sai;",
+ "\u969C>Shou;",
+ "\u96A0>In;",
+ "\u96A3>Rin;",
+ "\u96A7>Sui;",
+ "\u96A8>Zui;",
+ "\u96AA>Ken;",
+ "\u96B0>Shitsu;",
+ "\u96B1>In;",
+ "\u96B2>Shitsu;",
+ "\u96B4>Rou;",
+ "\u96B6>Tai;",
+ "\u96B7>Rei;",
+ "\u96B8>Rei;",
+ "\u96B9>Sui;",
+ "\u96BB>Seki;",
+ "\u96BC>Jun;",
+ "\u96C0>Jaku;",
+ "\u96C1>Gan;",
+ "\u96C4>Yuu;",
+ "\u96C5>Ga;",
+ "\u96C6>Shuu;",
+ "\u96C7>Ko;",
+ "\u96C9>Chi;",
+ "\u96CB>Sen;",
+ "\u96CC>Shi;",
+ "\u96CD>You;",
+ "\u96CE>Sho;",
+ "\u96D1>Zatsu;",
+ "\u96D5>Chou;",
+ "\u96D6>Sui;",
+ "\u96D9>Sou;",
+ "\u96DB>Suu;",
+ "\u96DC>Zatsu;",
+ "\u96E2>Ri;",
+ "\u96E3>Nan;",
+ "\u96E8>U;",
+ "\u96EA>Setsu;",
+ "\u96EB>Da;",
+ "\u96F0>Fun;",
+ "\u96F2>Un;",
+ "\u96F6>Rei;",
+ "\u96F7>Rai;",
+ "\u96F9>Haku;",
+ "\u96FB>Den;",
+ "\u9700>Ju;",
+ "\u9704>Shou;",
+ "\u9706>Tei;",
+ "\u9707>Shin;",
+ "\u9708>Hai;",
+ "\u970A>Rei;",
+ "\u970D>Kaku;",
+ "\u970E>Sou;",
+ "\u970F>Hi;",
+ "\u9711>Ten;",
+ "\u9713>Gei;",
+ "\u9716>Rin;",
+ "\u9719>Ei;",
+ "\u971C>Sou;",
+ "\u971E>Ka;",
+ "\u9724>Ryuu;",
+ "\u9727>Mu;",
+ "\u972A>In;",
+ "\u9730>San;",
+ "\u9732>Ro;",
+ "\u9738>Haku;",
+ "\u9739>Heki;",
+ "\u973D>Sei;",
+ "\u973E>Bai;",
+ "\u9742>Reki;",
+ "\u9744>Ai;",
+ "\u9746>Tai;",
+ "\u9748>Rei;",
+ "\u9749>Ai;",
+ "\u9752>Sei;",
+ "\u9756>Sei;",
+ "\u9759>Sei;",
+ "\u975C>Sei;",
+ "\u975E>Hi;",
+ "\u9760>Kou;",
+ "\u9761>Hi;",
+ "\u9762>Men;",
+ "\u9764>Hou;",
+ "\u9766>Ten;",
+ "\u9768>You;",
+ "\u9769>Kaku;",
+ "\u976B>Sai;",
+ "\u976D>Jin;",
+ "\u9771>Jin;",
+ "\u9774>Ka;",
+ "\u9779>Ketsu;",
+ "\u977A>Matsu;",
+ "\u977C>Tan;",
+ "\u9781>Hi;",
+ "\u9784>Hou;",
+ "\u9785>Ou;",
+ "\u978B>Ai;",
+ "\u978D>An;",
+ "\u978F>Kyou;",
+ "\u9798>Sou;",
+ "\u979C>Tou;",
+ "\u97A0>Kiku;",
+ "\u97A3>Juu;",
+ "\u97A6>Shuu;",
+ "\u97A8>Katsu;",
+ "\u97AB>Kiku;",
+ "\u97AD>Hen;",
+ "\u97B3>Tou;",
+ "\u97B4>Fuku;",
+ "\u97C3>Datsu;",
+ "\u97C6>Sen;",
+ "\u97C8>Betsu;",
+ "\u97CB>I;",
+ "\u97D3>Kan;",
+ "\u97DC>Tou;",
+ "\u97ED>Kyuu;",
+ "\u97EE>Kyou;",
+ "\u97F2>Sei;",
+ "\u97F3>On;",
+ "\u97F5>In;",
+ "\u97F6>Shou;",
+ "\u97FB>In;",
+ "\u97FF>Kyou;",
+ "\u9801>Ketsu;",
+ "\u9802>Chou;",
+ "\u9803>Kei;",
+ "\u9805>Kou;",
+ "\u9806>Jun;",
+ "\u9808>Shu;",
+ "\u980C>Shou;",
+ "\u980F>Kou;",
+ "\u9810>Yo;",
+ "\u9811>Gan;",
+ "\u9812>Han;",
+ "\u9813>Ton;",
+ "\u9817>Ha;",
+ "\u9818>Ryou;",
+ "\u981A>Kei;",
+ "\u9821>Kitsu;",
+ "\u9824>I;",
+ "\u982C>Kyou;",
+ "\u982D>Tou;",
+ "\u9834>Ei;",
+ "\u9837>Kan;",
+ "\u9838>Kei;",
+ "\u983B>Hin;",
+ "\u983C>Rai;",
+ "\u983D>Tai;",
+ "\u9846>Ka;",
+ "\u984B>Sai;",
+ "\u984C>Dai;",
+ "\u984D>Gaku;",
+ "\u984E>Gaku;",
+ "\u984F>Gan;",
+ "\u9854>Gan;",
+ "\u9855>Ken;",
+ "\u9858>Gan;",
+ "\u985B>Ten;",
+ "\u985E>Rui;",
+ "\u9867>Ko;",
+ "\u986B>Sen;",
+ "\u986F>Ken;",
+ "\u9870>Hin;",
+ "\u9871>Ro;",
+ "\u9873>Shou;",
+ "\u9874>Kan;",
+ "\u98A8>Fuu;",
+ "\u98AF>Satsu;",
+ "\u98B1>Tai;",
+ "\u98B6>Ku;",
+ "\u98C3>Hyou;",
+ "\u98C4>Hyou;",
+ "\u98C6>Hyou;",
+ "\u98DB>Hi;",
+ "\u98DC>Hon;",
+ "\u98DF>Shoku;",
+ "\u98E2>Ki;",
+ "\u98E9>Ton;",
+ "\u98EB>Yo;",
+ "\u98ED>Choku;",
+ "\u98EE>In;",
+ "\u98EF>Han;",
+ "\u98F2>In;",
+ "\u98F4>I;",
+ "\u98FC>Shi;",
+ "\u98FD>Hou;",
+ "\u98FE>Shoku;",
+ "\u9903>Kou;",
+ "\u9905>Hei;",
+ "\u9909>Shou;",
+ "\u990A>You;",
+ "\u990C>Ji;",
+ "\u9910>San;",
+ "\u9912>Dai;",
+ "\u9913>Ga;",
+ "\u9914>Ho;",
+ "\u9918>Yo;",
+ "\u991D>Shoku;",
+ "\u991E>Sen;",
+ "\u9920>Hei;",
+ "\u9921>Kan;",
+ "\u9924>Tan;",
+ "\u9928>Kan;",
+ "\u992C>Ko;",
+ "\u992E>Tetsu;",
+ "\u993D>Ki;",
+ "\u993E>Ryuu;",
+ "\u9942>Un;",
+ "\u9945>Man;",
+ "\u9949>Kin;",
+ "\u994B>Ki;",
+ "\u994C>Sen;",
+ "\u9950>I;",
+ "\u9951>Ki;",
+ "\u9952>Jou;",
+ "\u9955>Tou;",
+ "\u9957>Kyou;",
+ "\u9996>Shu;",
+ "\u9997>Ki;",
+ "\u9998>Kaku;",
+ "\u9999>Kou;",
+ "\u99A5>Fuku;",
+ "\u99A8>Kei;",
+ "\u99AC>Ba;",
+ "\u99AD>Gyo;",
+ "\u99AE>Hyou;",
+ "\u99B3>Chi;",
+ "\u99B4>Shun;",
+ "\u99BC>Bun;",
+ "\u99C1>Baku;",
+ "\u99C4>Ta;",
+ "\u99C5>Eki;",
+ "\u99C6>Ku;",
+ "\u99C8>Ku;",
+ "\u99D0>Chuu;",
+ "\u99D1>Do;",
+ "\u99D2>Ku;",
+ "\u99D5>Ga;",
+ "\u99D8>Tai;",
+ "\u99DB>Shi;",
+ "\u99DD>Ta;",
+ "\u99DF>Shi;",
+ "\u99E2>Hen;",
+ "\u99ED>Kai;",
+ "\u99EE>Haku;",
+ "\u99F1>Raku;",
+ "\u99F8>Shin;",
+ "\u99FB>Kan;",
+ "\u99FF>Shun;",
+ "\u9A01>Tei;",
+ "\u9A05>Sui;",
+ "\u9A0E>Ki;",
+ "\u9A0F>Ki;",
+ "\u9A12>Sou;",
+ "\u9A13>Ken;",
+ "\u9A19>Hen;",
+ "\u9A28>Tan;",
+ "\u9A2B>Ken;",
+ "\u9A30>Tou;",
+ "\u9A37>Sou;",
+ "\u9A3E>Ra;",
+ "\u9A40>Baku;",
+ "\u9A42>San;",
+ "\u9A43>Hyou;",
+ "\u9A45>Ku;",
+ "\u9A4D>Gyou;",
+ "\u9A55>Kyou;",
+ "\u9A57>Ken;",
+ "\u9A5A>Kyou;",
+ "\u9A5B>Eki;",
+ "\u9A5F>Shuu;",
+ "\u9A62>Ryo;",
+ "\u9A64>Jou;",
+ "\u9A65>Ki;",
+ "\u9A69>Kan;",
+ "\u9A6A>Ri;",
+ "\u9A6B>Hyuu;",
+ "\u9AA8>Kotsu;",
+ "\u9AAD>Kan;",
+ "\u9AB0>Tou;",
+ "\u9AB8>Kai;",
+ "\u9ABC>Kaku;",
+ "\u9AC0>Hi;",
+ "\u9AC4>Zui;",
+ "\u9ACF>Rou;",
+ "\u9AD1>Toku;",
+ "\u9AD3>Zui;",
+ "\u9AD4>Tei;",
+ "\u9AD8>Kou;",
+ "\u9ADE>Sou;",
+ "\u9ADF>Hyou;",
+ "\u9AE2>Tei;",
+ "\u9AE3>Hou;",
+ "\u9AE6>Bou;",
+ "\u9AEA>Hatsu;",
+ "\u9AEB>Chou;",
+ "\u9AED>Shi;",
+ "\u9AEE>Hatsu;",
+ "\u9AEF>Zen;",
+ "\u9AF1>Hou;",
+ "\u9AF4>Futsu;",
+ "\u9AF7>Kyoku;",
+ "\u9AFB>Kei;",
+ "\u9B06>Shou;",
+ "\u9B18>Ban;",
+ "\u9B1A>Shu;",
+ "\u9B1F>Kan;",
+ "\u9B22>Hin;",
+ "\u9B23>Ryou;",
+ "\u9B25>Tou;",
+ "\u9B27>Tou;",
+ "\u9B28>Kou;",
+ "\u9B29>Geki;",
+ "\u9B2A>Tou;",
+ "\u9B2E>Kyuu;",
+ "\u9B2F>Chou;",
+ "\u9B31>Utsu;",
+ "\u9B32>Reki;",
+ "\u9B3B>Shuku;",
+ "\u9B3C>Ki;",
+ "\u9B41>Kai;",
+ "\u9B42>Kon;",
+ "\u9B43>Batsu;",
+ "\u9B44>Haku;",
+ "\u9B45>Mi;",
+ "\u9B4D>Bou;",
+ "\u9B4E>Ryou;",
+ "\u9B4F>Gi;",
+ "\u9B51>Chi;",
+ "\u9B54>Ma;",
+ "\u9B58>En;",
+ "\u9B5A>Gyo;",
+ "\u9B6F>Ro;",
+ "\u9B74>Hou;",
+ "\u9B83>Hyou;",
+ "\u9B8E>Nen;",
+ "\u9B91>Hou;",
+ "\u9B92>Fu;",
+ "\u9B93>Sa;",
+ "\u9B9F>An;",
+ "\u9BA0>Gai;",
+ "\u9BA8>Shi;",
+ "\u9BAA>I;",
+ "\u9BAB>Kou;",
+ "\u9BAD>Kei;",
+ "\u9BAE>Sen;",
+ "\u9BB9>Sou;",
+ "\u9BC0>Kon;",
+ "\u9BC6>Ho;",
+ "\u9BC9>Ri;",
+ "\u9BCA>Sa;",
+ "\u9BD4>Shi;",
+ "\u9BD6>Sei;",
+ "\u9BDB>Chou;",
+ "\u9BE1>Hi;",
+ "\u9BE2>Gei;",
+ "\u9BE3>Eki;",
+ "\u9BE4>Kon;",
+ "\u9BE8>Gei;",
+ "\u9BF0>Nen;",
+ "\u9BF5>Sou;",
+ "\u9C04>I;",
+ "\u9C06>Shun;",
+ "\u9C08>Chou;",
+ "\u9C09>Kou;",
+ "\u9C0A>Ren;",
+ "\u9C0C>Shuu;",
+ "\u9C0D>Shuu;",
+ "\u9C10>Gaku;",
+ "\u9C12>Fuku;",
+ "\u9C13>Sai;",
+ "\u9C14>Kan;",
+ "\u9C15>Ka;",
+ "\u9C1B>On;",
+ "\u9C21>Ryuu;",
+ "\u9C24>Shi;",
+ "\u9C25>Kan;",
+ "\u9C2D>Ki;",
+ "\u9C2E>On;",
+ "\u9C32>Gou;",
+ "\u9C39>Ken;",
+ "\u9C3A>Sou;",
+ "\u9C3B>Ban;",
+ "\u9C3E>Hyou;",
+ "\u9C46>Shou;",
+ "\u9C47>Kou;",
+ "\u9C48>Setsu;",
+ "\u9C52>Son;",
+ "\u9C57>Rin;",
+ "\u9C60>Kai;",
+ "\u9C67>Rei;",
+ "\u9C76>Shou;",
+ "\u9C78>Ro;",
+ "\u9CE5>Chou;",
+ "\u9CE7>Fu;",
+ "\u9CE9>Kyuu;",
+ "\u9CEB>Gan;",
+ "\u9CEC>Fu;",
+ "\u9CF3>Hou;",
+ "\u9CF4>Mei;",
+ "\u9CF6>En;",
+ "\u9D03>Ketsu;",
+ "\u9D06>Chin;",
+ "\u9D07>Hou;",
+ "\u9D08>Gan;",
+ "\u9D09>A;",
+ "\u9D0E>Ou;",
+ "\u9D12>Rei;",
+ "\u9D15>Ta;",
+ "\u9D1B>En;",
+ "\u9D1F>Shi;",
+ "\u9D23>Ko;",
+ "\u9D26>You;",
+ "\u9D28>Ou;",
+ "\u9D2A>Itsu;",
+ "\u9D2C>Ou;",
+ "\u9D3B>Kou;",
+ "\u9D3E>Bou;",
+ "\u9D3F>Kou;",
+ "\u9D41>Kou;",
+ "\u9D44>Shi;",
+ "\u9D50>Bu;",
+ "\u9D51>Ken;",
+ "\u9D59>Geki;",
+ "\u9D5C>Tei;",
+ "\u9D5D>Ga;",
+ "\u9D5E>Ga;",
+ "\u9D60>Koku;",
+ "\u9D61>Bu;",
+ "\u9D6C>Hou;",
+ "\u9D6F>Hi;",
+ "\u9D72>Jaku;",
+ "\u9D7A>Ya;",
+ "\u9D87>Tou;",
+ "\u9D89>Shun;",
+ "\u9D8F>Kei;",
+ "\u9D9A>Gaku;",
+ "\u9DA4>Kon;",
+ "\u9DA9>Boku;",
+ "\u9DAF>Ou;",
+ "\u9DB2>Ou;",
+ "\u9DB4>Kaku;",
+ "\u9DB8>Jaku;",
+ "\u9DBA>Seki;",
+ "\u9DBB>Kotsu;",
+ "\u9DC1>Geki;",
+ "\u9DC2>You;",
+ "\u9DC4>Kei;",
+ "\u9DC6>Ten;",
+ "\u9DCF>Ten;",
+ "\u9DD3>Sha;",
+ "\u9DD9>Shi;",
+ "\u9DE6>Shou;",
+ "\u9DED>Ban;",
+ "\u9DEF>Ryou;",
+ "\u9DF2>Shuu;",
+ "\u9DF8>Itsu;",
+ "\u9DF9>You;",
+ "\u9DFA>Ro;",
+ "\u9DFD>Kaku;",
+ "\u9E1A>Ou;",
+ "\u9E1B>Kan;",
+ "\u9E1E>Ran;",
+ "\u9E75>Ro;",
+ "\u9E78>Ken;",
+ "\u9E79>Kan;",
+ "\u9E7D>En;",
+ "\u9E7F>Roku;",
+ "\u9E81>So;",
+ "\u9E88>Shu;",
+ "\u9E8B>Bi;",
+ "\u9E8C>Gu;",
+ "\u9E91>Gei;",
+ "\u9E92>Ki;",
+ "\u9E93>Roku;",
+ "\u9E95>Kin;",
+ "\u9E97>Rei;",
+ "\u9E9D>Sha;",
+ "\u9E9F>Rin;",
+ "\u9EA5>Baku;",
+ "\u9EA6>Baku;",
+ "\u9EA9>Fu;",
+ "\u9EAA>Men;",
+ "\u9EAD>Hou;",
+ "\u9EB8>Fu;",
+ "\u9EB9>Kiku;",
+ "\u9EBA>Men;",
+ "\u9EBB>Ma;",
+ "\u9EBC>Ma;",
+ "\u9EBE>Ki;",
+ "\u9EBF>Ro;",
+ "\u9EC4>Kou;",
+ "\u9ECC>Kou;",
+ "\u9ECD>Sho;",
+ "\u9ECE>Rei;",
+ "\u9ECF>Nen;",
+ "\u9ED0>Chi;",
+ "\u9ED2>Koku;",
+ "\u9ED4>Ken;",
+ "\u9ED8>Moku;",
+ "\u9ED9>Moku;",
+ "\u9EDB>Tai;",
+ "\u9EDC>Chutsu;",
+ "\u9EDD>Yuu;",
+ "\u9EDE>Ten;",
+ "\u9EE0>Katsu;",
+ "\u9EE5>Gei;",
+ "\u9EE8>Tou;",
+ "\u9EEF>An;",
+ "\u9EF4>Bai;",
+ "\u9EF6>En;",
+ "\u9EF7>Toku;",
+ "\u9EF9>Chi;",
+ "\u9EFB>Futsu;",
+ "\u9EFC>Ho;",
+ "\u9EFD>Bou;",
+ "\u9F07>Gou;",
+ "\u9F08>Betsu;",
+ "\u9F0E>Tei;",
+ "\u9F13>Ko;",
+ "\u9F15>Tou;",
+ "\u9F20>So;",
+ "\u9F21>Sho;",
+ "\u9F2C>Yuu;",
+ "\u9F3B>Bi;",
+ "\u9F3E>Kan;",
+ "\u9F4A>Sei;",
+ "\u9F4B>Sai;",
+ "\u9F4E>Sei;",
+ "\u9F4F>Sei;",
+ "\u9F52>Shi;",
+ "\u9F54>Shin;",
+ "\u9F5F>So;",
+ "\u9F60>Chou;",
+ "\u9F61>Rei;",
+ "\u9F62>Rei;",
+ "\u9F63>Shutsu;",
+ "\u9F66>Gin;",
+ "\u9F67>Ketsu;",
+ "\u9F6A>Soku;",
+ "\u9F6C>Gyo;",
+ "\u9F72>Ku;",
+ "\u9F76>Gaku;",
+ "\u9F77>Aku;",
+ "\u9F8D>Ryuu;",
+ "\u9F95>Gan;",
+ "\u9F9C>Ki;",
+ "\u9F9D>Shuu;",
+ "\u9FA0>Yaku;",
+//*/
+}}};}}
diff --git a/src/com/ibm/text/resources/TransliterationRule_KeyboardEscape_Latin1.java b/src/com/ibm/text/resources/TransliterationRule_KeyboardEscape_Latin1.java
new file mode 100755
index 0000000..25988cf
--- /dev/null
+++ b/src/com/ibm/text/resources/TransliterationRule_KeyboardEscape_Latin1.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/text/resources/Attic/TransliterationRule_KeyboardEscape_Latin1.java,v $
+ * $Date: 2000/03/10 04:07:30 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+public class TransliterationRule_KeyboardEscape_Latin1 extends ListResourceBundle {
+ /**
+ * Overrides ListResourceBundle
+ */
+ public Object[][] getContents() {
+ return new Object[][] {
+ { "Rule",
+ "esc='';"
+ + "grave=`;"
+ + "acute='';"
+ + "hat=^;"
+ + "tilde=~;"
+ + "umlaut=:;"
+ + "ring=.;"
+ + "cedilla=,;"
+ + "slash=/;"
+ + "super=^;"
+
+ // Make keyboard entry of {esc} possible
+ // and of backslash
+ + "'\\'{esc}>{esc};"
+ + "'\\\\'>'\\';"
+
+ // Long keys
+ + "cur{esc}>\u00A4;"
+ + "sec{esc}>\u00A7;"
+ + "not{esc}>\u00AC;"
+ + "mul{esc}>\u00D7;"
+ + "div{esc}>\u00F7;"
+
+ + "\\ {esc}>\u00A0;" // non-breaking space
+ + "!{esc}>\u00A1;" // inverted exclamation
+ + "c/{esc}>\u00A2;" // cent sign
+ + "lb{esc}>\u00A3;" // pound sign
+ + "'|'{esc}>\u00A6;" // broken vertical bar
+ + ":{esc}>\u00A8;" // umlaut
+ + "{super}a{esc}>\u00AA;" // feminine ordinal
+ + "'<<'{esc}>\u00AB;"
+ + "r{esc}>\u00AE;"
+ + "--{esc}>\u00AF;"
+ + "-{esc}>\u00AD;"
+ + "+-{esc}>\u00B1;"
+ + "{super}2{esc}>\u00B2;"
+ + "{super}3{esc}>\u00B3;"
+ + "{acute}{esc}>\u00B4;"
+ + "m{esc}>\u00B5;"
+ + "para{esc}>\u00B6;"
+ + "dot{esc}>\u00B7;"
+ + "{cedilla}{esc}>\u00B8;"
+ + "{super}1{esc}>\u00B9;"
+ + "{super}o{esc}>\u00BA;" // masculine ordinal
+ + "'>>'{esc}>\u00BB;"
+ + "1/4{esc}>\u00BC;"
+ + "1/2{esc}>\u00BD;"
+ + "3/4{esc}>\u00BE;"
+ + "?{esc}>\u00BF;"
+ + "A{grave}{esc}>\u00C0;"
+ + "A{acute}{esc}>\u00C1;"
+ + "A{hat}{esc}>\u00C2;"
+ + "A{tilde}{esc}>\u00C3;"
+ + "A{umlaut}{esc}>\u00C4;"
+ + "A{ring}{esc}>\u00C5;"
+ + "AE{esc}>\u00C6;"
+ + "C{cedilla}{esc}>\u00C7;"
+ + "E{grave}{esc}>\u00C8;"
+ + "E{acute}{esc}>\u00C9;"
+ + "E{hat}{esc}>\u00CA;"
+ + "E{umlaut}{esc}>\u00CB;"
+ + "I{grave}{esc}>\u00CC;"
+ + "I{acute}{esc}>\u00CD;"
+ + "I{hat}{esc}>\u00CE;"
+ + "I{umlaut}{esc}>\u00CF;"
+ + "D-{esc}>\u00D0;"
+ + "N{tilde}{esc}>\u00D1;"
+ + "O{grave}{esc}>\u00D2;"
+ + "O{acute}{esc}>\u00D3;"
+ + "O{hat}{esc}>\u00D4;"
+ + "O{tilde}{esc}>\u00D5;"
+ + "O{umlaut}{esc}>\u00D6;"
+ + "O{slash}{esc}>\u00D8;"
+ + "U{grave}{esc}>\u00D9;"
+ + "U{acute}{esc}>\u00DA;"
+ + "U{hat}{esc}>\u00DB;"
+ + "U{umlaut}{esc}>\u00DC;"
+ + "Y{acute}{esc}>\u00DD;"
+ + "TH{esc}>\u00DE;"
+ + "ss{esc}>\u00DF;"
+ + "a{grave}{esc}>\u00E0;"
+ + "a{acute}{esc}>\u00E1;"
+ + "a{hat}{esc}>\u00E2;"
+ + "a{tilde}{esc}>\u00E3;"
+ + "a{umlaut}{esc}>\u00E4;"
+ + "a{ring}{esc}>\u00E5;"
+ + "ae{esc}>\u00E6;"
+ + "c{cedilla}{esc}>\u00E7;"
+ + "c{esc}>\u00A9;" // copyright - after c{cedilla}
+ + "e{grave}{esc}>\u00E8;"
+ + "e{acute}{esc}>\u00E9;"
+ + "e{hat}{esc}>\u00EA;"
+ + "e{umlaut}{esc}>\u00EB;"
+ + "i{grave}{esc}>\u00EC;"
+ + "i{acute}{esc}>\u00ED;"
+ + "i{hat}{esc}>\u00EE;"
+ + "i{umlaut}{esc}>\u00EF;"
+ + "d-{esc}>\u00F0;"
+ + "n{tilde}{esc}>\u00F1;"
+ + "o{grave}{esc}>\u00F2;"
+ + "o{acute}{esc}>\u00F3;"
+ + "o{hat}{esc}>\u00F4;"
+ + "o{tilde}{esc}>\u00F5;"
+ + "o{umlaut}{esc}>\u00F6;"
+ + "o{slash}{esc}>\u00F8;"
+ + "o{esc}>\u00B0;"
+ + "u{grave}{esc}>\u00F9;"
+ + "u{acute}{esc}>\u00FA;"
+ + "u{hat}{esc}>\u00FB;"
+ + "u{umlaut}{esc}>\u00FC;"
+ + "y{acute}{esc}>\u00FD;"
+ + "y{esc}>\u00A5;" // yen sign
+ + "th{esc}>\u00FE;"
+ //masked: + "ss{esc}>\u00FF;"
+ }
+ };
+ }
+}
diff --git a/src/com/ibm/text/resources/TransliterationRule_Latin_Arabic.java b/src/com/ibm/text/resources/TransliterationRule_Latin_Arabic.java
new file mode 100755
index 0000000..bba3619
--- /dev/null
+++ b/src/com/ibm/text/resources/TransliterationRule_Latin_Arabic.java
@@ -0,0 +1,253 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/TransliterationRule_Latin_Arabic.java,v $
+ * $Date: 2000/03/10 04:07:30 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+public class TransliterationRule_Latin_Arabic extends ListResourceBundle {
+ /**
+ * Overrides ListResourceBundle
+ */
+ public Object[][] getContents() {
+ return new Object[][] {
+ { "Rule",
+ // To Do: finish adding shadda, add sokoon
+
+ "alefmadda=\u0622;"+
+ "alefuhamza=\u0623;"+
+ "wauuhamza=\u0624;"+
+ "alefhamza=\u0625;"+
+ "yehuhamza=\u0626;"+
+ "alef=\u0627;"+
+ "beh=\u0628;"+
+ "tehmarbuta=\u0629;"+
+ "teh=\u062A;"+
+ "theh=\u062B;"+
+ "geem=\u062C;"+
+ "hah=\u062D;"+
+ "kha=\u062E;"+
+ "dal=\u062F;"+
+ "dhal=\u0630;"+
+ "reh=\u0631;"+
+ "zain=\u0632;"+
+ "seen=\u0633;"+
+ "sheen=\u0634;"+
+ "sad=\u0635;"+
+ "dad=\u0636;"+
+ "tah=\u0637;"+
+ "zah=\u0638;"+
+ "ein=\u0639;"+
+ "ghein=\u063A;"+
+ "feh=\u0641;"+
+ "qaaf=\u0642;"+
+ "kaf=\u0643;"+
+ "lam=\u0644;"+
+ "meem=\u0645;"+
+ "noon=\u0646;"+
+ "heh=\u0647;"+
+ "wau=\u0648;"+
+ "yehmaqsura=\u0649;"+
+ "yeh=\u064A;"+
+ "peh=\u06A4;"+
+
+ "hamza=\u0621;"+
+ "fathatein=\u064B;"+
+ "dammatein=\u064C;"+
+ "kasratein=\u064D;"+
+ "fatha=\u064E;"+
+ "damma=\u064F;"+
+ "kasra=\u0650;"+
+ "shadda=\u0651;"+
+ "sokoon=\u0652;"+
+
+ // convert English to Arabic
+ "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;"+
+
+ "ai>{alefmadda};"+
+ "ae>{alefuhamza};"+
+ "ao>{alefhamza};"+
+ "aa>{alef};"+
+ "an>{fathatein};"+
+ "a>{fatha};"+
+ "b>{beh};"+
+ "c>{kaf};"+
+ "{dhal})dh>{shadda};"+
+ "dh>{dhal};"+
+ "{dad})dd>{shadda};"+
+ "dd>{dad};"+
+ "{dal})d>{shadda};"+
+ "d>{dal};"+
+ "e>{ein};"+
+ "f>{feh};"+
+ "gh>{ghein};"+
+ "g>{geem};"+
+ "hh>{hah};"+
+ "h>{heh};"+
+ "ii>{kasratein};"+
+ "i>{kasra};"+
+ "j>{geem};"+
+ "kh>{kha};"+
+ "k>{kaf};"+
+ "l>{lam};"+
+ "m>{meem};"+
+ "n>{noon};"+
+ "o>{hamza};"+
+ "p>{peh};"+
+ "q>{qaaf};"+
+ "r>{reh};"+
+ "sh>{sheen};"+
+ "ss>{sad};"+
+ "s>{seen};"+
+ "th>{theh};"+
+ "tm>{tehmarbuta};"+
+ "tt>{tah};"+
+ "t>{teh};"+
+ "uu>{dammatein};"+
+ "u>{damma};"+
+ "v>{beh};"+
+ "we>{wauuhamza};"+
+ "w>{wau};"+
+ "x>{kaf}{shadda}{seen};"+
+ "ye>{yehuhamza};"+
+ "ym>{yehmaqsura};"+
+ "y>{yeh};"+
+ "zz>{zah};"+
+ "z>{zain};"+
+
+ "0>\u0660;"+ // Arabic digit 0
+ "1>\u0661;"+ // Arabic digit 1
+ "2>\u0662;"+ // Arabic digit 2
+ "3>\u0663;"+ // Arabic digit 3
+ "4>\u0664;"+ // Arabic digit 4
+ "5>\u0665;"+ // Arabic digit 5
+ "6>\u0666;"+ // Arabic digit 6
+ "7>\u0667;"+ // Arabic digit 7
+ "8>\u0668;"+ // Arabic digit 8
+ "9>\u0669;"+ // Arabic digit 9
+ "%>\u066A;"+ // Arabic %
+ ".>\u066B;"+ // Arabic decimal separator
+ ",>\u066C;"+ // Arabic thousands separator
+ "*>\u066D;"+ // Arabic five-pointed star
+
+ "`0>0;"+ // Escaped forms of the above
+ "`1>1;"+
+ "`2>2;"+
+ "`3>3;"+
+ "`4>4;"+
+ "`5>5;"+
+ "`6>6;"+
+ "`7>7;"+
+ "`8>8;"+
+ "`9>9;"+
+ "`%>%;"+
+ "`.>.;"+
+ "`,>,;"+
+ "`*>*;"+
+ "``>`;"+
+
+ "''>;"+
+
+ // now Arabic to English
+
+ "''ai<a){alefmadda};"+
+ "ai<{alefmadda};"+
+ "''ae<a){alefuhamza};"+
+ "ae<{alefuhamza};"+
+ "''ao<a){alefhamza};"+
+ "ao<{alefhamza};"+
+ "''aa<a){alef};"+
+ "aa<{alef};"+
+ "''an<a){fathatein};"+
+ "an<{fathatein};"+
+ "''a<a){fatha};"+
+ "a<{fatha};"+
+ "b<{beh};"+
+ "''dh<d){dhal};"+
+ "dh<{dhal};"+
+ "''dd<d){dad};"+
+ "dd<{dad};"+
+ "''d<d){dal};"+
+ "d<{dal};"+
+ "''e<a){ein};"+
+ "''e<w){ein};"+
+ "''e<y){ein};"+
+ "e<{ein};"+
+ "f<{feh};"+
+ "gh<{ghein};"+
+ "''hh<d){hah};"+
+ "''hh<t){hah};"+
+ "''hh<k){hah};"+
+ "''hh<s){hah};"+
+ "hh<{hah};"+
+ "''h<d){heh};"+
+ "''h<t){heh};"+
+ "''h<k){heh};"+
+ "''h<s){heh};"+
+ "h<{heh};"+
+ "''ii<i){kasratein};"+
+ "ii<{kasratein};"+
+ "''i<i){kasra};"+
+ "i<{kasra};"+
+ "j<{geem};"+
+ "kh<{kha};"+
+ "x<{kaf}{shadda}{seen};"+
+ "k<{kaf};"+
+ "l<{lam};"+
+ "''m<y){meem};"+
+ "''m<t){meem};"+
+ "m<{meem};"+
+ "n<{noon};"+
+ "''o<a){hamza};"+
+ "o<{hamza};"+
+ "p<{peh};"+
+ "q<{qaaf};"+
+ "r<{reh};"+
+ "sh<{sheen};"+
+ "''ss<s){sad};"+
+ "ss<{sad};"+
+ "''s<s){seen};"+
+ "s<{seen};"+
+ "th<{theh};"+
+ "tm<{tehmarbuta};"+
+ "''tt<t){tah};"+
+ "tt<{tah};"+
+ "''t<t){teh};"+
+ "t<{teh};"+
+ "''uu<u){dammatein};"+
+ "uu<{dammatein};"+
+ "''u<u){damma};"+
+ "u<{damma};"+
+ "we<{wauuhamza};"+
+ "w<{wau};"+
+ "ye<{yehuhamza};"+
+ "ym<{yehmaqsura};"+
+ "''y<y){yeh};"+
+ "y<{yeh};"+
+ "''zz<z){zah};"+
+ "zz<{zah};"+
+ "''z<z){zain};"+
+ "z<{zain};"+
+
+ "dh<dh){shadda};"+
+ "dd<dd){shadda};"+
+ "''d<d){shadda};"
+ }
+ };
+ }
+}
diff --git a/src/com/ibm/text/resources/TransliterationRule_Latin_Cyrillic.java b/src/com/ibm/text/resources/TransliterationRule_Latin_Cyrillic.java
new file mode 100755
index 0000000..c5898cf
--- /dev/null
+++ b/src/com/ibm/text/resources/TransliterationRule_Latin_Cyrillic.java
@@ -0,0 +1,322 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/TransliterationRule_Latin_Cyrillic.java,v $
+ * $Date: 2000/03/10 04:07:30 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+public class TransliterationRule_Latin_Cyrillic extends ListResourceBundle {
+ /**
+ * Overrides ListResourceBundle
+ */
+ public Object[][] getContents() {
+ return new Object[][] {
+ { "Rule", ""
+
+ /* This class is designed to be a 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=\u0160;"
+ + "s-hacek=\u0161;"
+
+ + "YO=\u0401;"
+ + "J=\u0408;"
+ + "A=\u0410;"
+ + "B=\u0411;"
+ + "V=\u0412;"
+ + "G=\u0413;"
+ + "D=\u0414;"
+ + "YE=\u0415;"
+ + "ZH=\u0416;"
+ + "Z=\u0417;"
+ + "YI=\u0418;"
+ + "Y=\u0419;"
+ + "K=\u041A;"
+ + "L=\u041B;"
+ + "M=\u041C;"
+ + "N=\u041D;"
+ + "O=\u041E;"
+ + "P=\u041F;"
+ + "R=\u0420;"
+ + "S=\u0421;"
+ + "T=\u0422;"
+ + "U=\u0423;"
+ + "F=\u0424;"
+ + "KH=\u0425;"
+ + "TS=\u0426;"
+ + "CH=\u0427;"
+ + "SH=\u0428;"
+ + "SHCH=\u0429;"
+ + "HARD=\u042A;"
+ + "I=\u042B;"
+ + "SOFT=\u042C;"
+ + "E=\u042D;"
+ + "YU=\u042E;"
+ + "YA=\u042F;"
+
+ // Lowercase
+
+ + "a=\u0430;"
+ + "b=\u0431;"
+ + "v=\u0432;"
+ + "g=\u0433;"
+ + "d=\u0434;"
+ + "ye=\u0435;"
+ + "zh=\u0436;"
+ + "z=\u0437;"
+ + "yi=\u0438;"
+ + "y=\u0439;"
+ + "k=\u043a;"
+ + "l=\u043b;"
+ + "m=\u043c;"
+ + "n=\u043d;"
+ + "o=\u043e;"
+ + "p=\u043f;"
+ + "r=\u0440;"
+ + "s=\u0441;"
+ + "t=\u0442;"
+ + "u=\u0443;"
+ + "f=\u0444;"
+ + "kh=\u0445;"
+ + "ts=\u0446;"
+ + "ch=\u0447;"
+ + "sh=\u0448;"
+ + "shch=\u0449;"
+ + "hard=\u044a;"
+ + "i=\u044b;"
+ + "soft=\u044c;"
+ + "e=\u044d;"
+ + "yu=\u044e;"
+ + "ya=\u044f;"
+
+ + "yo=\u0451;"
+ + "j=\u0458;"
+
+ // variables
+ // some are duplicated so lowercasing works
+
+ + "csoft=[eiyEIY];"
+ + "CSOFT=[eiyEIY];"
+
+ + "BECOMES_H=[{HARD}{hard}];"
+ + "becomes_h=[{HARD}{hard}];"
+
+ + "BECOMES_S=[{S}{s}];"
+ + "becomes_s=[{S}{s}];"
+
+ + "BECOMES_C=[{CH}{ch}];"
+ + "becomes_c=[{CH}{ch}];"
+
+ + "BECOMES_VOWEL=[{A}{E}{I}{O}{U}{a}{e}{i}{o}{u}];"
+ + "becomes_vowel=[{A}{E}{I}{O}{U}{a}{e}{i}{o}{u}];"
+
+ + "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 \u0161 instead of digraphs
+ like sh.
+ */
+
+ // #############################################
+ // Special titlecase forms, not duplicated
+ // #############################################
+
+ + "Ch>{CH};" + "Ch<{CH}({lower};"
+ + "Kh>{KH};" + "Kh<{KH}({lower};"
+ + "Shch>{SHCH};" + "Shch<{SHCH}({lower};"
+ + "Sh>{SH};" + "Sh<{SH}({lower};"
+ + "Ts>{TS};" + "Ts<{TS}({lower};"
+ + "Zh>{ZH};" + "Zh<{ZH}({lower};"
+ + "Yi>{YI};" //+ "Yi<{YI}({lower};"
+ + "Ye>{YE};" //+ "Ye<{YE}({lower};"
+ + "Yo>{YO};" //+ "Yo<{YO}({lower};"
+ + "Yu>{YU};" //+ "Yu<{YU}({lower};"
+ + "Ya>{YA};" //+ "Ya<{YA}({lower};"
+
+ // #############################################
+ // Rules to Duplicate
+ // To get the lowercase versions, copy these and lowercase
+ // #############################################
+
+ // variant spellings in English
+
+ + "SHTCH>{SHCH};"
+ + "TCH>{CH};"
+ + "TH>{Z};"
+ + "Q>{K};"
+ + "WH>{V};"
+ + "W>{V};"
+ + "X>{K}{S};" //+ "X<{K}{S};"
+
+ // Separate letters that would otherwise join
+
+ + "SH''<{SH}({BECOMES_C};"
+ + "T''<{T}({BECOMES_S};"
+
+ + "K''<{K}({BECOMES_H};"
+ + "S''<{S}({BECOMES_H};"
+ + "T''<{T}({BECOMES_H};"
+ + "Z''<{Z}({BECOMES_H};"
+
+ + "Y''<{Y}({BECOMES_VOWEL};"
+
+ // Main letters
+
+ + "A<>{A};"
+ + "B<>{B};"
+ + "CH<>{CH};"
+ + "D<>{D};"
+ + "E<>{E};"
+ + "F<>{F};"
+ + "G<>{G};"
+ + "\u00cc<>{YI};"
+ + "I<>{I};"
+ + "KH<>{KH};"
+ + "K<>{K};"
+ + "L<>{L};"
+ + "M<>{M};"
+ + "N<>{N};"
+ + "O<>{O};"
+ + "P<>{P};"
+ + "R<>{R};"
+ + "SHCH<>{SHCH};"
+ + "SH>{SH};" //+ "SH<{SH};"
+ + "{S-hacek}<>{SH};"
+ + "S<>{S};"
+ + "TS<>{TS};"
+ + "T<>{T};"
+ + "U<>{U};"
+ + "V<>{V};"
+ //\u00cc\u00c0\u00c8\u00d2\u00d9
+ + "YE>{YE};" //+ "YE<{YE};"
+ + "\u00c8<>{YE};"
+ + "YO>{YO};" //+ "YO<{YO};"
+ + "\u00d2<>{YO};"
+ + "YU>{YU};" //+ "YU<{YU};"
+ + "\u00d9<>{YU};"
+ + "YA>{YA};" //+ "YA<{YA};"
+ + "\u00c0<>{YA};"
+ + "Y<>{Y};"
+ + "ZH<>{ZH};"
+ + "Z<>{Z};"
+
+ + "H<>{HARD};"
+ + "\u0178<>{SOFT};"
+
+ // Non-russian
+
+ + "J<>{J};"
+
+ // variant spellings in English
+
+ + "C({csoft}>{S};"
+ + "C>{K};"
+
+ // #############################################
+ // Duplicated Rules
+ // Copy and lowercase the above rules
+ // #############################################
+
+ // variant spellings in english
+
+ + "shtch>{shch};"
+ + "tch>{ch};"
+ + "th>{z};"
+ + "q>{k};"
+ + "wh>{v};"
+ + "w>{v};"
+ + "x>{k}{s};" //+ "x<{k}{s};"
+
+ // separate letters that would otherwise join
+
+ + "sh''<{sh}({becomes_c};"
+ + "t''<{t}({becomes_s};"
+
+ + "k''<{k}({becomes_h};"
+ + "s''<{s}({becomes_h};"
+ + "t''<{t}({becomes_h};"
+ + "z''<{z}({becomes_h};"
+
+ + "y''<{y}({becomes_vowel};"
+
+ // main letters
+
+ + "a<>{a};"
+ + "b<>{b};"
+ + "ch<>{ch};"
+ + "d<>{d};"
+ + "e<>{e};"
+ + "f<>{f};"
+ + "g<>{g};"
+ + "\u00ec<>{yi};"
+ + "i<>{i};"
+ + "kh<>{kh};"
+ + "k<>{k};"
+ + "l<>{l};"
+ + "m<>{m};"
+ + "n<>{n};"
+ + "o<>{o};"
+ + "p<>{p};"
+ + "r<>{r};"
+ + "shch<>{shch};"
+ + "sh>{sh};" //+ "sh<{sh};"
+ + "{s-hacek}<>{sh};"
+ + "s<>{s};"
+ + "ts<>{ts};"
+ + "t<>{t};"
+ + "u<>{u};"
+ + "v<>{v};"
+ //\u00ec\u00e0\u00e8\u00f2\u00f9
+ + "ye>{ye};" //+ "ye<{ye};"
+ + "\u00e8<>{ye};"
+ + "yo>{yo};" //+ "yo<{yo};"
+ + "\u00f2<>{yo};"
+ + "yu>{yu};" //+ "yu<{yu};"
+ + "\u00f9<>{yu};"
+ + "ya>{ya};" //+ "ya<{ya};"
+ + "\u00e0<>{ya};"
+ + "y<>{y};"
+ + "zh<>{zh};"
+ + "z<>{z};"
+
+ + "h<>{hard};"
+ + "\u00ff<>{soft};"
+
+ // non-russian
+
+ + "j<>{j};"
+
+ // variant spellings in english
+
+ + "c({csoft}>{s};"
+ + "c>{k};"
+
+
+
+ // #############################################
+ // End of Duplicated Rules
+ // #############################################
+
+ //generally the last rule
+ + "''>;"
+ //the end
+ }
+ };
+ }
+}
diff --git a/src/com/ibm/text/resources/TransliterationRule_Latin_Devanagari.java b/src/com/ibm/text/resources/TransliterationRule_Latin_Devanagari.java
new file mode 100755
index 0000000..ce2c0d8
--- /dev/null
+++ b/src/com/ibm/text/resources/TransliterationRule_Latin_Devanagari.java
@@ -0,0 +1,421 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/TransliterationRule_Latin_Devanagari.java,v $
+ * $Date: 2000/03/10 04:07:31 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+public class TransliterationRule_Latin_Devanagari extends ListResourceBundle {
+ /**
+ * Overrides ListResourceBundle
+ */
+ public Object[][] getContents() {
+ return new Object[][] {
+ { "Rule",
+ //#####################################################################
+ // Keyboard Transliteration Table
+ //#####################################################################
+ // Conversions should be:
+ // 1. complete
+ // * convert every sequence of Latin letters (a to z plus apostrophe)
+ // to a sequence of Native letters
+ // * convert every sequence of Native letters to Latin letters
+ // 2. reversable
+ // * any string of Native converted to Latin and back should be the same
+ // * this is not true for English converted to Native & back, e.g.:
+ // k -> {kaf} -> k
+ // c -> {kaf} -> k
+ //#####################################################################
+ // Sequences of Latin letters may convert to a single Native letter.
+ // When this is the case, an apostrophe can be used to indicate separate
+ // letters.$
+ // E.g. sh -> {shin}
+ // s'h -> {sin}{heh}
+ // ss -> {sad}
+ // s's -> {sin}{shadda}
+ //#####################################################################
+ // To Do:
+ // finish adding shadda, add sokoon, fix uppercase
+ // make two transliteration tables: one with vowels, one without
+ //#####################################################################
+ // Modifications
+ // Devanagari Transliterator: broken up with consonsants/vowels
+ //#####################################################################
+ // Unicode character name definitions
+ //#####################################################################
+
+ //consonants
+ "candrabindu=\u0901;"
+ + "bindu=\u0902;"
+ + "visarga=\u0903;"
+
+ // w<vowel> represents the stand-alone form
+ + "wa=\u0905;"
+ + "waa=\u0906;"
+ + "wi=\u0907;"
+ + "wii=\u0908;"
+ + "wu=\u0909;"
+ + "wuu=\u090A;"
+ + "wr=\u090B;"
+ + "wl=\u090C;"
+ + "we=\u090F;"
+ + "wai=\u0910;"
+ + "wo=\u0913;"
+ + "wau=\u0914;"
+
+ + "ka=\u0915;"
+ + "kha=\u0916;"
+ + "ga=\u0917;"
+ + "gha=\u0918;"
+ + "nga=\u0919;"
+
+ + "ca=\u091A;"
+ + "cha=\u091B;"
+ + "ja=\u091C;"
+ + "jha=\u091D;"
+ + "nya=\u091E;"
+
+ + "tta=\u091F;"
+ + "ttha=\u0920;"
+ + "dda=\u0921;"
+ + "ddha=\u0922;"
+ + "nna=\u0923;"
+
+ + "ta=\u0924;"
+ + "tha=\u0925;"
+ + "da=\u0926;"
+ + "dha=\u0927;"
+ + "na=\u0928;"
+
+ + "pa=\u092A;"
+ + "pha=\u092B;"
+ + "ba=\u092C;"
+ + "bha=\u092D;"
+ + "ma=\u092E;"
+
+ + "ya=\u092F;"
+ + "ra=\u0930;"
+ + "rra=\u0931;"
+ + "la=\u0933;"
+ + "va=\u0935;"
+
+ + "sha=\u0936;"
+ + "ssa=\u0937;"
+ + "sa=\u0938;"
+ + "ha=\u0939;"
+
+ // <vowel> represents the dependent form
+ + "aa=\u093E;"
+ + "i=\u093F;"
+ + "ii=\u0940;"
+ + "u=\u0941;"
+ + "uu=\u0942;"
+ + "rh=\u0943;"
+ + "lh=\u0944;"
+ + "e=\u0947;"
+ + "ai=\u0948;"
+ + "o=\u094B;"
+ + "au=\u094C;"
+
+ + "virama=\u094D;"
+
+ + "wrr=\u0960;"
+ + "rrh=\u0962;"
+
+ + "danda=\u0964;"
+ + "doubleDanda=\u0965;"
+ + "depVowelAbove=[\u093E-\u0940\u0945-\u094C];"
+ + "depVowelBelow=[\u0941-\u0944];"
+ + "endThing=[{danda}{doubleDanda}\u0000-\u08FF\u0980-\uFFFF];"
+
+ + "&=[{virama}{aa}{ai}{au}{ii}{i}{uu}{u}{rrh}{rh}{lh}{e}{o}];"
+ + "%=[bcdfghjklmnpqrstvwxyz];"
+
+ //#####################################################################
+ // convert from Latin letters to Native letters
+ //#####################################################################
+ //Hindi>\u092d\u093e\u0930\u0924--\u0020\u0926\u0947\u0936\u0020\u092c\u0928\u094d\u0927\u0941\u002e
+
+ // special forms with no good conversion
+
+ + "mm>{bindu};"
+ + "x>{visarga};"
+
+ // convert to independent forms at start of word or syllable:
+ // e.g. keai -> {ka}{e}{wai}; k'ai -> {ka}{wai}; (ai) -> ({wai})
+ // Moved up [LIU]
+
+ + "aa>{waa};"
+ + "ai>{wai};"
+ + "au>{wau};"
+ + "ii>{wii};"
+ + "i>{wi};"
+ + "uu>{wuu};"
+ + "u>{wu};"
+ + "rrh>{wrr};"
+ + "rh>{wr};"
+ + "lh>{wl};"
+ + "e>{we};"
+ + "o>{wo};"
+ + "a>{wa};"
+
+ // normal consonants
+
+ + "kh>{kha}|{virama};"
+ + "k>{ka}|{virama};"
+ + "q>{ka}|{virama};"
+ + "gh>{gha}|{virama};"
+ + "g>{ga}|{virama};"
+ + "ng>{nga}|{virama};"
+ + "ch>{cha}|{virama};"
+ + "c>{ca}|{virama};"
+ + "jh>{jha}|{virama};"
+ + "j>{ja}|{virama};"
+ + "ny>{nya}|{virama};"
+ + "tth>{ttha}|{virama};"
+ + "tt>{tta}|{virama};"
+ + "ddh>{ddha}|{virama};"
+ + "dd>{dda}|{virama};"
+ + "nn>{nna}|{virama};"
+ + "th>{tha}|{virama};"
+ + "t>{ta}|{virama};"
+ + "dh>{dha}|{virama};"
+ + "d>{da}|{virama};"
+ + "n>{na}|{virama};"
+ + "ph>{pha}|{virama};"
+ + "p>{pa}|{virama};"
+ + "bh>{bha}|{virama};"
+ + "b>{ba}|{virama};"
+ + "m>{ma}|{virama};"
+ + "y>{ya}|{virama};"
+ + "r>{ra}|{virama};"
+ + "l>{la}|{virama};"
+ + "v>{va}|{virama};"
+ + "f>{va}|{virama};"
+ + "w>{va}|{virama};"
+ + "sh>{sha}|{virama};"
+ + "ss>{ssa}|{virama};"
+ + "s>{sa}|{virama};"
+ + "z>{sa}|{virama};"
+ + "h>{ha}|{virama};"
+
+ + ".>{danda};"
+ + "{danda}.>{doubleDanda};"
+ + "{depVowelAbove})~>{bindu};"
+ + "{depVowelBelow})~>{candrabindu};"
+
+ // convert to dependent forms after consonant with no vowel:
+ // e.g. kai -> {ka}{virama}ai -> {ka}{ai}
+
+ + "{virama}aa>{aa};"
+ + "{virama}ai>{ai};"
+ + "{virama}au>{au};"
+ + "{virama}ii>{ii};"
+ + "{virama}i>{i};"
+ + "{virama}uu>{uu};"
+ + "{virama}u>{u};"
+ + "{virama}rrh>{rrh};"
+ + "{virama}rh>{rh};"
+ + "{virama}lh>{lh};"
+ + "{virama}e>{e};"
+ + "{virama}o>{o};"
+ + "{virama}a>;"
+
+ // otherwise convert independent forms when separated by ': k'ai -> {ka}{virama}{wai}
+
+ + "{virama}''aa>{waa};"
+ + "{virama}''ai>{wai};"
+ + "{virama}''au>{wau};"
+ + "{virama}''ii>{wii};"
+ + "{virama}''i>{wi};"
+ + "{virama}''uu>{wuu};"
+ + "{virama}''u>{wu};"
+ + "{virama}''rrh>{wrr};"
+ + "{virama}''rh>{wr};"
+ + "{virama}''lh>{wl};"
+ + "{virama}''e>{we};"
+ + "{virama}''o>{wo};"
+ + "{virama}''a>{wa};"
+
+ + "{virama}({endThing}>;"
+
+ // convert any left-over apostrophes used for separation
+
+ + "''>;"
+
+ //#####################################################################
+ // convert from Native letters to Latin letters
+ //#####################################################################
+
+ // special forms with no good conversion
+
+ + "mm<{bindu};"
+ + "x<{visarga};"
+
+ // normal consonants
+
+ + "kh<{kha}(&;"
+ + "kha<{kha};"
+ + "k''<{ka}{virama}({ha};"
+ + "k<{ka}(&;"
+ + "ka<{ka};"
+ + "gh<{gha}(&;"
+ + "gha<{gha};"
+ + "g''<{ga}{virama}({ha};"
+ + "g<{ga}(&;"
+ + "ga<{ga};"
+ + "ng<{nga}(&;"
+ + "nga<{nga};"
+ + "ch<{cha}(&;"
+ + "cha<{cha};"
+ + "c''<{ca}{virama}({ha};"
+ + "c<{ca}(&;"
+ + "ca<{ca};"
+ + "jh<{jha}(&;"
+ + "jha<{jha};"
+ + "j''<{ja}{virama}({ha};"
+ + "j<{ja}(&;"
+ + "ja<{ja};"
+ + "ny<{nya}(&;"
+ + "nya<{nya};"
+ + "tth<{ttha}(&;"
+ + "ttha<{ttha};"
+ + "tt''<{tta}{virama}({ha};"
+ + "tt<{tta}(&;"
+ + "tta<{tta};"
+ + "ddh<{ddha}(&;"
+ + "ddha<{ddha};"
+ + "dd''<{dda}(&{ha};"
+ + "dd<{dda}(&;"
+ + "dda<{dda};"
+ + "dh<{dha}(&;"
+ + "dha<{dha};"
+ + "d''<{da}{virama}({ha};"
+ + "d''<{da}{virama}({ddha};"
+ + "d''<{da}{virama}({dda};"
+ + "d''<{da}{virama}({dha};"
+ + "d''<{da}{virama}({da};"
+ + "d<{da}(&;"
+ + "da<{da};"
+ + "th<{tha}(&;"
+ + "tha<{tha};"
+ + "t''<{ta}{virama}({ha};"
+ + "t''<{ta}{virama}({ttha};"
+ + "t''<{ta}{virama}({tta};"
+ + "t''<{ta}{virama}({tha};"
+ + "t''<{ta}{virama}({ta};"
+ + "t<{ta}(&;"
+ + "ta<{ta};"
+ + "n''<{na}{virama}({ga};"
+ + "n''<{na}{virama}({ya};"
+ + "n<{na}(&;"
+ + "na<{na};"
+ + "ph<{pha}(&;"
+ + "pha<{pha};"
+ + "p''<{pa}{virama}({ha};"
+ + "p<{pa}(&;"
+ + "pa<{pa};"
+ + "bh<{bha}(&;"
+ + "bha<{bha};"
+ + "b''<{ba}{virama}({ha};"
+ + "b<{ba}(&;"
+ + "ba<{ba};"
+ + "m''<{ma}{virama}({ma};"
+ + "m''<{ma}{virama}({bindu};"
+ + "m<{ma}(&;"
+ + "ma<{ma};"
+ + "y<{ya}(&;"
+ + "ya<{ya};"
+ + "r''<{ra}{virama}({ha};"
+ + "r<{ra}(&;"
+ + "ra<{ra};"
+ + "l''<{la}{virama}({ha};"
+ + "l<{la}(&;"
+ + "la<{la};"
+ + "v<{va}(&;"
+ + "va<{va};"
+ + "sh<{sha}(&;"
+ + "sha<{sha};"
+ + "ss<{ssa}(&;"
+ + "ssa<{ssa};"
+ + "s''<{sa}{virama}({ha};"
+ + "s''<{sa}{virama}({sha};"
+ + "s''<{sa}{virama}({ssa};"
+ + "s''<{sa}{virama}({sa};"
+ + "s<{sa}(&;"
+ + "sa<{sa};"
+ + "h<{ha}(&;"
+ + "ha<{ha};"
+
+ // dependent vowels (should never occur except following consonants)
+
+ + "aa<{aa};"
+ + "ai<{ai};"
+ + "au<{au};"
+ + "ii<{ii};"
+ + "i<{i};"
+ + "uu<{uu};"
+ + "u<{u};"
+ + "rrh<{rrh};"
+ + "rh<{rh};"
+ + "lh<{lh};"
+ + "e<{e};"
+ + "o<{o};"
+
+ // independent vowels (when following consonants)
+
+ + "''aa<a){waa};"
+ + "''aa<%){waa};"
+ + "''ai<a){wai};"
+ + "''ai<%){wai};"
+ + "''au<a){wau};"
+ + "''au<%){wau};"
+ + "''ii<a){wii};"
+ + "''ii<%){wii};"
+ + "''i<a){wi};"
+ + "''i<%){wi};"
+ + "''uu<a){wuu};"
+ + "''uu<%){wuu};"
+ + "''u<a){wu};"
+ + "''u<%){wu};"
+ + "''rrh<%){wrr};"
+ + "''rh<%){wr};"
+ + "''lh<%){wl};"
+ + "''e<%){we};"
+ + "''o<%){wo};"
+ + "''a<a){wa};"
+ + "''a<%){wa};"
+
+
+ // independent vowels (otherwise)
+
+ + "aa<{waa};"
+ + "ai<{wai};"
+ + "au<{wau};"
+ + "ii<{wii};"
+ + "i<{wi};"
+ + "uu<{wuu};"
+ + "u<{wu};"
+ + "rrh<{wrr};"
+ + "rh<{wr};"
+ + "lh<{wl};"
+ + "e<{we};"
+ + "o<{wo};"
+ + "a<{wa};"
+
+ // blow away any remaining viramas
+
+ + "<{virama};"
+ }
+ };
+ }
+}
diff --git a/src/com/ibm/text/resources/TransliterationRule_Latin_Greek.java b/src/com/ibm/text/resources/TransliterationRule_Latin_Greek.java
new file mode 100755
index 0000000..1812bc7
--- /dev/null
+++ b/src/com/ibm/text/resources/TransliterationRule_Latin_Greek.java
@@ -0,0 +1,389 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/TransliterationRule_Latin_Greek.java,v $
+ * $Date: 2000/03/10 04:07:31 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+public class TransliterationRule_Latin_Greek extends ListResourceBundle {
+ /**
+ * Overrides ListResourceBundle
+ */
+ public Object[][] getContents() {
+ return new Object[][] {
+ { "Rule", ""
+ // ==============================================
+ // 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.
+ // ==============================================
+
+ // Latin Letters
+
+ + "E-MACRON=\u0112;"
+ + "e-macron=\u0113;"
+ + "O-MACRON=\u014C;"
+ + "o-macron=\u014D;"
+ + "Y-UMLAUT=\u0178;"
+ + "y-umlaut=\u00FF;"
+
+ //! // with real accents.
+ //! + "E-MACRON-ACUTE=\u0112\u0301;"
+ //! + "e-macron-acute=\u0113\u0301;"
+ //! + "O-MACRON-ACUTE=\u014C\u0301;"
+ //! + "o-macron-acute=\u014D\u0301;"
+ //! + "y-umlaut-acute=\u00FF\u0301;"
+ //! + "\u00ef-acute=\u00ef\u0301;"
+ //! + "\u00fc-acute=\u00fc\u0301;"
+ //! //
+
+ // single letter equivalents
+
+ + "E-MACRON-ACUTE=\u00CA;"
+ + "e-macron-acute=\u00EA;"
+ + "O-MACRON-ACUTE=\u00D4;"
+ + "o-macron-acute=\u00F4;"
+ + "y-umlaut-acute=\u0177;"
+ + "\u00ef-acute=\u00EE;"
+ + "\u00fc-acute=\u00FB;"
+
+ // Greek Letters
+
+ + "ALPHA=\u0391;"
+ + "BETA=\u0392;"
+ + "GAMMA=\u0393;"
+ + "DELTA=\u0394;"
+ + "EPSILON=\u0395;"
+ + "ZETA=\u0396;"
+ + "ETA=\u0397;"
+ + "THETA=\u0398;"
+ + "IOTA=\u0399;"
+ + "KAPPA=\u039A;"
+ + "LAMBDA=\u039B;"
+ + "MU=\u039C;"
+ + "NU=\u039D;"
+ + "XI=\u039E;"
+ + "OMICRON=\u039F;"
+ + "PI=\u03A0;"
+ + "RHO=\u03A1;"
+ + "SIGMA=\u03A3;"
+ + "TAU=\u03A4;"
+ + "YPSILON=\u03A5;"
+ + "PHI=\u03A6;"
+ + "CHI=\u03A7;"
+ + "PSI=\u03A8;"
+ + "OMEGA=\u03A9;"
+
+ + "ALPHA+=\u0386;"
+ + "EPSILON+=\u0388;"
+ + "ETA+=\u0389;"
+ + "IOTA+=\u038A;"
+ + "OMICRON+=\u038C;"
+ + "YPSILON+=\u038E;"
+ + "OMEGA+=\u038F;"
+ + "IOTA_DIAERESIS=\u03AA;"
+ + "YPSILON_DIAERESIS=\u03AB;"
+
+ + "alpha=\u03B1;"
+ + "beta=\u03B2;"
+ + "gamma=\u03B3;"
+ + "delta=\u03B4;"
+ + "epsilon=\u03B5;"
+ + "zeta=\u03B6;"
+ + "eta=\u03B7;"
+ + "theta=\u03B8;"
+ + "iota=\u03B9;"
+ + "kappa=\u03BA;"
+ + "lambda=\u03BB;"
+ + "mu=\u03BC;"
+ + "nu=\u03BD;"
+ + "xi=\u03BE;"
+ + "omicron=\u03BF;"
+ + "pi=\u03C0;"
+ + "rho=\u03C1;"
+ + "sigma=\u03C3;"
+ + "tau=\u03C4;"
+ + "ypsilon=\u03C5;"
+ + "phi=\u03C6;"
+ + "chi=\u03C7;"
+ + "psi=\u03C8;"
+ + "omega=\u03C9;"
+
+ //forms
+
+ + "alpha+=\u03AC;"
+ + "epsilon+=\u03AD;"
+ + "eta+=\u03AE;"
+ + "iota+=\u03AF;"
+ + "omicron+=\u03CC;"
+ + "ypsilon+=\u03CD;"
+ + "omega+=\u03CE;"
+ + "iota_diaeresis=\u03CA;"
+ + "ypsilon_diaeresis=\u03CB;"
+ + "iota_diaeresis+=\u0390;"
+ + "ypsilon_diaeresis+=\u03B0;"
+ + "sigma+=\u03C2;"
+
+ // Variables for conditional mappings
+
+ // Use lowercase for all variable names, to allow cut/paste below.
+
+ + "letter=[~[:Lu:][:Ll:]];"
+ + "lower=[[:Ll:]];"
+ + "softener=[eiyEIY];"
+ + "vowel=[aeiouAEIOU"
+ + "{ALPHA}{EPSILON}{ETA}{IOTA}{OMICRON}{YPSILON}{OMEGA}"
+ + "{ALPHA+}{EPSILON+}{ETA+}{IOTA+}{OMICRON+}{YPSILON+}{OMEGA+}"
+ + "{IOTA_DIAERESIS}{YPSILON_DIAERESIS}"
+ + "{alpha}{epsilon}{eta}{iota}{omicron}{ypsilon}{omega}"
+ + "{alpha+}{epsilon+}{eta+}{iota+}{omicron+}{ypsilon+}{omega+}"
+ + "{iota_diaeresis}{ypsilon_diaeresis}"
+ + "{iota_diaeresis+}{ypsilon_diaeresis+}"
+ + "];"
+ + "n-gamma=[GKXCgkxc];"
+ + "gamma-n=[{GAMMA}{KAPPA}{CHI}{XI}{gamma}{kappa}{chi}{xi}];"
+ + "pp=[Pp];"
+
+ // ==============================================
+ // Rules
+ // ==============================================
+ // The following are special titlecases, and should
+ // not be copied when duplicating the lowercase
+ // ==============================================
+
+ + "Th <> {THETA}({lower};"
+ + "Ph <> {PHI}({lower};"
+ + "Ch <> {CHI}({lower};"
+ //masked: + "Ps<{PHI}({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}) {SIGMA} ;" // handle PS
+ + "S <> {SIGMA};"
+
+ // 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}) {sigma} ({letter});"
+ + "s < {sigma} ({letter});"
+ + "~s < {sigma} ;"
+
+ + "~s < {sigma+} ({letter});"
+ + "''s < ({pp}) {sigma+} ;"
+ + "s < {sigma+} ;"
+
+ + "~s ({letter}) > {sigma+};"
+ + "~s > {sigma};"
+ + "''s ({letter}) > {sigma};"
+ + "''s > {sigma+};"
+ + "s ({letter}) > {sigma};"
+ + "s > {sigma+};"
+
+ // because there are no uppercase forms, had to move these up too.
+
+ + "i\"`>{iota_diaeresis+};"
+ + "y\"`>{ypsilon_diaeresis+};"
+
+ + "{\u00ef-acute} <> {iota_diaeresis+};"
+ + "{\u00fc-acute} <> {vowel}){ypsilon_diaeresis+};"
+ + "{y-umlaut-acute} <> {ypsilon_diaeresis+};"
+
+ // ==============================================
+ // Uppercase Forms.
+ // To make lowercase forms, just copy and lowercase below
+ // ==============================================
+
+ // Typing variants, in case the keyboard doesn't have accents
+
+ + "A`>{ALPHA+};"
+ + "E`>{EPSILON+};"
+ + "EE`>{ETA+};"
+ + "EE>{ETA};"
+ + "I`>{IOTA+};"
+ + "O`>{OMICRON+};"
+ + "OO`>{OMEGA+};"
+ + "OO>{OMEGA};"
+ + "I\">{IOTA_DIAERESIS};"
+ + "Y\">{YPSILON_DIAERESIS};"
+
+ // Basic Letters
+
+ + "A<>{ALPHA};"
+ + "\u00c1<>{ALPHA+};"
+ + "B<>{BETA};"
+ + "N ({n-gamma}) <> {GAMMA} ({gamma-n});"
+ + "G<>{GAMMA};"
+ + "D<>{DELTA};"
+ + "''E <> ([Ee]){EPSILON};" // handle EE
+ + "E<>{EPSILON};"
+ + "\u00c9<>{EPSILON+};"
+ + "Z<>{ZETA};"
+ + "{E-MACRON-ACUTE}<>{ETA+};"
+ + "{E-MACRON}<>{ETA};"
+ + "TH<>{THETA};"
+ + "I<>{IOTA};"
+ + "\u00cd<>{IOTA+};"
+ + "\u00cf<>{IOTA_DIAERESIS};"
+ + "K<>{KAPPA};"
+ + "L<>{LAMBDA};"
+ + "M<>{MU};"
+ + "N'' <> {NU} ({gamma-n});"
+ + "N<>{NU};"
+ + "X<>{XI};"
+ + "''O <> ([Oo]) {OMICRON};" // handle OO
+ + "O<>{OMICRON};"
+ + "\u00d3<>{OMICRON+};"
+ + "PH<>{PHI};" // needs ordering before P
+ + "PS<>{PSI};" // needs ordering before P
+ + "P<>{PI};"
+ + "R<>{RHO};"
+ + "T<>{TAU};"
+ + "U <> ({vowel}) {YPSILON};"
+ + "\u00da <> ({vowel}) {YPSILON+};"
+ + "\u00dc <> ({vowel}) {YPSILON_DIAERESIS};"
+ + "Y<>{YPSILON};"
+ + "\u00dd<>{YPSILON+};"
+ + "{Y-UMLAUT}<>{YPSILON_DIAERESIS};"
+ + "CH<>{CHI};"
+ + "{O-MACRON-ACUTE}<>{OMEGA+};"
+ + "{O-MACRON}<>{OMEGA};"
+
+ // 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`>{alpha+};"
+ + "e`>{epsilon+};"
+ + "ee`>{eta+};"
+ + "ee>{eta};"
+ + "i`>{iota+};"
+ + "o`>{omicron+};"
+ + "oo`>{omega+};"
+ + "oo>{omega};"
+ + "i\">{iota_diaeresis};"
+ + "y\">{ypsilon_diaeresis};"
+
+ // basic letters
+
+ + "a<>{alpha};"
+ + "\u00e1<>{alpha+};"
+ + "b<>{beta};"
+ + "n ({n-gamma}) <> {gamma} ({gamma-n});"
+ + "g<>{gamma};"
+ + "d<>{delta};"
+ + "''e <> ([Ee]){epsilon};" // handle EE
+ + "e<>{epsilon};"
+ + "\u00e9<>{epsilon+};"
+ + "z<>{zeta};"
+ + "{e-macron-acute}<>{eta+};"
+ + "{e-macron}<>{eta};"
+ + "th<>{theta};"
+ + "i<>{iota};"
+ + "\u00ed<>{iota+};"
+ + "\u00ef<>{iota_diaeresis};"
+ + "k<>{kappa};"
+ + "l<>{lambda};"
+ + "m<>{mu};"
+ + "n'' <> {nu} ({gamma-n});"
+ + "n<>{nu};"
+ + "x<>{xi};"
+ + "''o <> ([Oo]) {omicron};" // handle OO
+ + "o<>{omicron};"
+ + "\u00f3<>{omicron+};"
+ + "ph<>{phi};" // needs ordering before p
+ + "ps<>{psi};" // needs ordering before p
+ + "p<>{pi};"
+ + "r<>{rho};"
+ + "t<>{tau};"
+ + "u <> ({vowel}){ypsilon};"
+ + "\u00fa <> ({vowel}){ypsilon+};"
+ + "\u00fc <> ({vowel}){ypsilon_diaeresis};"
+ + "y<>{ypsilon};"
+ + "\u00fd<>{ypsilon+};"
+ + "{y-umlaut}<>{ypsilon_diaeresis};"
+ + "ch<>{chi};"
+ + "{o-macron-acute}<>{omega+};"
+ + "{o-macron}<>{omega};"
+
+ // 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 '
+ // ====================================
+
+ //+ "''>;"
+ }
+ };
+ }
+}
diff --git a/src/com/ibm/text/resources/TransliterationRule_Latin_Hebrew.java b/src/com/ibm/text/resources/TransliterationRule_Latin_Hebrew.java
new file mode 100755
index 0000000..e0fa73e
--- /dev/null
+++ b/src/com/ibm/text/resources/TransliterationRule_Latin_Hebrew.java
@@ -0,0 +1,291 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/TransliterationRule_Latin_Hebrew.java,v $
+ * $Date: 2000/03/10 04:07:31 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+public class TransliterationRule_Latin_Hebrew extends ListResourceBundle {
+ /**
+ * Overrides ListResourceBundle
+ */
+ public Object[][] getContents() {
+ return new Object[][] {
+ { "Rule",
+ //variable names, derived from the Unicode names.
+
+ "POINT_SHEVA=\u05B0;"
+ + "POINT_HATAF_SEGOL=\u05B1;"
+ + "POINT_HATAF_PATAH=\u05B2;"
+ + "POINT_HATAF_QAMATS=\u05B3;"
+ + "POINT_HIRIQ=\u05B4;"
+ + "POINT_TSERE=\u05B5;"
+ + "POINT_SEGOL=\u05B6;"
+ + "POINT_PATAH=\u05B7;"
+ + "POINT_QAMATS=\u05B8;"
+ + "POINT_HOLAM=\u05B9;"
+ + "POINT_QUBUTS=\u05BB;"
+ + "POINT_DAGESH_OR_MAPIQ=\u05BC;"
+ + "POINT_METEG=\u05BD;"
+ + "PUNCTUATION_MAQAF=\u05BE;"
+ + "POINT_RAFE=\u05BF;"
+ + "PUNCTUATION_PASEQ=\u05C0;"
+ + "POINT_SHIN_DOT=\u05C1;"
+ + "POINT_SIN_DOT=\u05C2;"
+ + "PUNCTUATION_SOF_PASUQ=\u05C3;"
+ + "ALEF=\u05D0;"
+ + "BET=\u05D1;"
+ + "GIMEL=\u05D2;"
+ + "DALET=\u05D3;"
+ + "HE=\u05D4;"
+ + "VAV=\u05D5;"
+ + "ZAYIN=\u05D6;"
+ + "HET=\u05D7;"
+ + "TET=\u05D8;"
+ + "YOD=\u05D9;"
+ + "FINAL_KAF=\u05DA;"
+ + "KAF=\u05DB;"
+ + "LAMED=\u05DC;"
+ + "FINAL_MEM=\u05DD;"
+ + "MEM=\u05DE;"
+ + "FINAL_NUN=\u05DF;"
+ + "NUN=\u05E0;"
+ + "SAMEKH=\u05E1;"
+ + "AYIN=\u05E2;"
+ + "FINAL_PE=\u05E3;"
+ + "PE=\u05E4;"
+ + "FINAL_TSADI=\u05E5;"
+ + "TSADI=\u05E6;"
+ + "QOF=\u05E7;"
+ + "RESH=\u05E8;"
+ + "SHIN=\u05E9;"
+ + "TAV=\u05EA;"
+ + "YIDDISH_DOUBLE_VAV=\u05F0;"
+ + "YIDDISH_VAV_YOD=\u05F1;"
+ + "YIDDISH_DOUBLE_YOD=\u05F2;"
+ + "PUNCTUATION_GERESH=\u05F3;"
+ + "PUNCTUATION_GERSHAYIM=\u05F4;"
+
+ //wildcards
+ //The values can be anything we don't use in this file: start at E000.
+
+ + "letter=[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ];"
+
+ + "softvowel=[eiyEIY];"
+
+ + "vowellike=[{ALEF}{AYIN}{YOD}{VAV}];"
+
+ //?>{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}
+
+ + "a>{ALEF};"
+ + "A>{ALEF};"
+
+ + "b>{BET};"
+ + "B>{BET};"
+
+ + "c({softvowel}>{SAMEKH};"
+ + "C({softvowel}>{SAMEKH};"
+ + "c({letter}>{KAF};"
+ + "C({letter}>{KAF};"
+ + "c>{FINAL_KAF};"
+ + "C>{FINAL_KAF};"
+
+ + "d>{DALET};"
+ + "D>{DALET};"
+
+ + "e>{AYIN};"
+ + "E>{AYIN};"
+
+ + "f({letter}>{PE};"
+ + "f>{FINAL_PE};"
+ + "F({letter}>{PE};"
+ + "F>{FINAL_PE};"
+
+ + "g>{GIMEL};"
+ + "G>{GIMEL};"
+
+ + "h>{HE};"
+ + "H>{HE};"
+
+ + "i>{YOD};"
+ + "I>{YOD};"
+
+ + "j>{DALET}{SHIN};"
+ + "J>{DALET}{SHIN};"
+
+ + "kH>{HET};"
+ + "kh>{HET};"
+ + "KH>{HET};"
+ + "Kh>{HET};"
+ + "k({letter}>{KAF};"
+ + "K({letter}>{KAF};"
+ + "k>{FINAL_KAF};"
+ + "K>{FINAL_KAF};"
+
+ + "l>{LAMED};"
+ + "L>{LAMED};"
+
+ + "m({letter}>{MEM};"
+ + "m>{FINAL_MEM};"
+ + "M({letter}>{MEM};"
+ + "M>{FINAL_MEM};"
+
+ + "n({letter}>{NUN};"
+ + "n>{FINAL_NUN};"
+ + "N({letter}>{NUN};"
+ + "N>{FINAL_NUN};"
+
+ + "o>{VAV};"
+ + "O>{VAV};"
+
+ + "p({letter}>{PE};"
+ + "p>{FINAL_PE};"
+ + "P({letter}>{PE};"
+ + "P>{FINAL_PE};"
+
+ + "q>{QOF};"
+ + "Q>{QOF};"
+
+ + "r>{RESH};"
+ + "R>{RESH};"
+
+ + "sH>{SHIN};"
+ + "sh>{SHIN};"
+ + "SH>{SHIN};"
+ + "Sh>{SHIN};"
+ + "s>{SAMEKH};"
+ + "S>{SAMEKH};"
+
+ + "th>{TAV};"
+ + "tH>{TAV};"
+ + "TH>{TAV};"
+ + "Th>{TAV};"
+ + "tS({letter}>{TSADI};"
+ + "ts({letter}>{TSADI};"
+ + "Ts({letter}>{TSADI};"
+ + "TS({letter}>{TSADI};"
+ + "tS>{FINAL_TSADI};"
+ + "ts>{FINAL_TSADI};"
+ + "Ts>{FINAL_TSADI};"
+ + "TS>{FINAL_TSADI};"
+ + "t>{TET};"
+ + "T>{TET};"
+
+ + "u>{VAV};"
+ + "U>{VAV};"
+
+ + "v>{VAV};"
+ + "V>{VAV};"
+
+ + "w>{VAV};"
+ + "W>{VAV};"
+
+ + "x>{KAF}{SAMEKH};"
+ + "X>{KAF}{SAMEKH};"
+
+ + "y>{YOD};"
+ + "Y>{YOD};"
+
+ + "z>{ZAYIN};"
+ + "Z>{ZAYIN};"
+
+ //#?>{YIDDISH_DOUBLE_VAV}
+ //?>{YIDDISH_VAV_YOD}
+ //?>{YIDDISH_DOUBLE_YOD}
+ //?>{PUNCTUATION_GERESH}
+ //?>{PUNCTUATION_GERSHAYIM}
+
+ + "''>;"
+
+ //{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}>@
+
+ + "a<{ALEF};"
+ + "e<{AYIN};"
+ + "b<{BET};"
+ + "d<{DALET};"
+ + "k<{FINAL_KAF};"
+ + "m<{FINAL_MEM};"
+ + "n<{FINAL_NUN};"
+ + "p<{FINAL_PE};"
+ + "ts<{FINAL_TSADI};"
+ + "g<{GIMEL};"
+ + "kh<{HET};"
+ + "h<{HE};"
+ + "k''<{KAF}({HE};"
+ + "k<{KAF};"
+ + "l<{LAMED};"
+ + "m<{MEM};"
+ + "n<{NUN};"
+ + "p<{PE};"
+ + "q<{QOF};"
+ + "r<{RESH};"
+ + "s''<{SAMEKH}({HE};"
+ + "s<{SAMEKH};"
+ + "sh<{SHIN};"
+ + "th<{TAV};"
+ + "t''<{TET}({HE};"
+ + "t''<{TET}({SAMEKH};"
+ + "t''<{TET}({SHIN};"
+ + "t<{TET};"
+ + "ts<{TSADI};"
+ + "v<{VAV}({vowellike};"
+ + "u<{VAV};"
+ + "y<{YOD};"
+ + "z<{ZAYIN};"
+
+ //{YIDDISH_DOUBLE_VAV}>@
+ //{YIDDISH_VAV_YOD}>@
+ //{YIDDISH_DOUBLE_YOD}>@
+ //{PUNCTUATION_GERESH}>@
+ //{PUNCTUATION_GERSHAYIM}>@
+
+ + "<'';"
+ }
+ };
+ }
+}
diff --git a/src/com/ibm/text/resources/TransliterationRule_Latin_Jamo.java b/src/com/ibm/text/resources/TransliterationRule_Latin_Jamo.java
new file mode 100755
index 0000000..098a802
--- /dev/null
+++ b/src/com/ibm/text/resources/TransliterationRule_Latin_Jamo.java
@@ -0,0 +1,337 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/TransliterationRule_Latin_Jamo.java,v $
+ * $Date: 2000/03/10 04:07:31 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+import java.util.ListResourceBundle;
+
+public class TransliterationRule_Latin_Jamo extends ListResourceBundle {
+ /**
+ * Overrides ListResourceBundle
+ */
+ public Object[][] getContents() {
+ return new Object[][] {
+ { "Rule", ""
+
+ // VARIABLES
+
+ + "initial=[\u1100-\u115F];"
+ + "medial=[\u1160-\u11A7];"
+ + "final=[\u11A8-\u11F9];" // added - aliu
+ + "vowel=[aeiouwyAEIOUWY\u1160-\u11A7];"
+ + "consonant=[bcdfghjklmnpqrstvxzBCDFGHJKLMNPQRSTVXZ{medial}{final}];"
+ + "ye=[yeYE];"
+ + "ywe=[yweYWE];"
+ + "yw=[ywYW];"
+ + "nl=[nlNL];"
+ + "gnl=[gnlGNL];"
+ + "lsgb=[lsgbLSGB];"
+ + "ywao=[ywaoYWAO];"
+ + "bl=[blBL];"
+
+ // RULES
+
+ // Hangul structure is IMF or IM
+ // So you can have, because of adjacent sequences
+ // IM, but not II or IF
+ // MF or MI, but not MM
+ // FI, but not FF or FM
+
+ // For English, we just have C or V.
+ // To generate valid Hangul:
+ // Vowels:
+ // We insert IEUNG between VV, and otherwise map V to M
+ // We also insert IEUNG if there is no
+ // Consonants:
+ // We don't break doubles
+ // Cases like lmgg, we have to break at lm
+ // So to guess whether a consonant is I or F
+ // we map all C's to F, except when followed by a vowel, e.g.
+ // X[{vowel}>CHOSEONG (initial)
+ // X>JONGSEONG (final)
+
+ // special insertion for funny sequences of vowels, and for empty consonant
+
+ + "'' < ({consonant}) \u110B;" // insert a break between any consonant and the empty consonant.
+ + "({medial}) ({vowel}) <> \u110B;" // HANGUL CHOSEONG IEUNG
+
+ // Below, insert an empty consonant in front of a vowel, if there is no Initial in front.
+
+ // Fix casing.
+ // Because Korean is caseless, we just want to treat everything as
+ // lowercase.
+ // we could do this by always preceeding this transliterator with
+ // an upper-lowercase transformation, but that wouldn't invert nicely.
+ // We use the "revisit" syntax to just convert latin to latin
+ // so that we can avoid
+ // having to restate all the Latin=>Jamo rules, with the I/F handling.
+
+ // We don't have to add titlecase, since that will be picked up
+ // since the first letter is converted, then revisited. E.g.
+ // |Gg => |gg => {sang kiyeok}
+ // We do have to have all caps, since otherwise we could get:
+ // |GG => |gG => {kiyeok}|G => {kiyeok}|g => {kiyeok}{kiyeok}
+
+ + "Z > |z;"
+ + "YU > |yu;"
+ + "YO > |yo;"
+ + "YI > |yi;"
+ + "YEO > |yeo;"
+ + "YE > |ye;"
+ + "YAE > |yae;"
+ + "YA > |ya;"
+ + "Y > |y;"
+ + "WI > |wi;"
+ + "WEO > |weo;"
+ + "WE > |we;"
+ + "WAE > |wae;"
+ + "WA > |wa;"
+ + "W > |w;"
+ + "U > |u;"
+ + "T > |t;"
+ + "SS > |ss;"
+ + "S > |s;"
+ + "P > |p;"
+ + "OE > |oe;"
+ + "O > |o;"
+ + "NJ > |nj;"
+ + "NH > |nh;"
+ + "NG > |ng;"
+ + "N > |n;"
+ + "M > |m;"
+ + "LT > |lt;"
+ + "LS > |ls;"
+ + "LP > |lp;"
+ + "LM > |lm;"
+ + "LH > |lh;"
+ + "LG > |lg;"
+ + "LB > |lb;"
+ + "L > |l;"
+ + "K > |k;"
+ + "JJ > |jj;"
+ + "J > |j;"
+ + "I > |i;"
+ + "H > |h;"
+ + "GS > |gs;"
+ + "GG > |gg;"
+ + "G > |g;"
+ + "EU > |eu;"
+ + "EO > |eo;"
+ + "E > |e;"
+ + "DD > |dd;"
+ + "D > |d;"
+ + "BS > |bs;"
+ + "BB > |bb;"
+ + "B > |b;"
+ + "AE > |ae;"
+ + "A > |a;"
+
+ // APOSTROPHE
+
+ // As always, an apostrophe is used to separate digraphs into
+ // singles. That is, if you really wanted [KAN][GGAN], instead
+ // of [KANG][GAN] you would write "kan'ggan".
+
+ // Rules for inserting ' when mapping separated digraphs back
+ // from Hangul to Latin. Catch every letter that can be the
+ // LAST of a digraph (or multigraph) AND first of an initial
+
+ + "'' < (l) (\u11c0;" // hangul jongseong thieuth
+ + "'' < ({lsgb}) (\u11ba;" // hangul jongseong sios
+ + "'' < (l) (\u11c1;" // hangul jongseong phieuph
+ + "'' < (l) (\u11b7;" // hangul jongseong mieum
+ + "'' < (n) (\u11bd;" // hangul jongseong cieuc
+ + "'' < ({nl}) (\u11c2;" // hangul jongseong hieuh
+ + "'' < ({gnl}) (\u11a9;" // hangul jongseong ssangkiyeok
+ + "'' < ({bl}) (\u11b8;" // hangul jongseong pieup
+ + "'' < (d) (\u11ae;" // hangul jongseong tikeut
+
+ + "'' < ({ye}) (\u116e;" // hangul jungseong u
+ + "'' < ({ywe}) (\u1169;" // hangul jungseong o
+ + "'' < ({yw}) (\u1175;" // hangul jungseong i
+ + "'' < ({ywao}) (\u1166;" // hangul jungseong e
+ + "'' < ({yw}) (\u1161;" // hangul jungseong a
+
+ + "'' < (l) (\u1110;" // hangul choseong thieuth
+ + "'' < ({lsgb}) (\u110a;" // hangul choseong ssangsios
+ + "'' < ({lsgb}) (\u1109;" // hangul choseong sios
+ + "'' < (l) (\u1111;" // hangul choseong phieuph
+ + "'' < (l) (\u1106;" // hangul choseong mieum
+ + "'' < (n) (\u110c;" // hangul choseong cieuc
+ + "'' < (n) (\u110d;"
+ + "'' < ({nl}) (\u1112;" // hangul choseong hieuh
+ + "'' < ({gnl}) (\u1101;" // hangul choseong ssangkiyeok
+ + "'' < ({gnl}) (\u1100;" // hangul choseong kiyeok
+ + "'' < (d) (\u1103;" // hangul choseong tikeut
+ + "'' < (d) (\u1104;"
+ + "'' < ({bl}) (\u1107;" // hangul choseong pieup
+ + "'' < ({bl}) (\u1108;"
+
+ // INITIALS
+
+ + "t ({vowel}) <> \u1110;" // hangul choseong thieuth
+ + "ss ({vowel}) <> \u110a;" // hangul choseong ssangsios
+ + "s ({vowel}) <> \u1109;" // hangul choseong sios
+ + "p ({vowel}) <> \u1111;" // hangul choseong phieuph
+ + "n ({vowel}) <> \u1102;" // hangul choseong nieun
+ + "m ({vowel}) <> \u1106;" // hangul choseong mieum
+ + "l ({vowel}) <> \u1105;" // hangul choseong rieul
+ + "k ({vowel}) <> \u110f;" // hangul choseong khieukh
+ + "j ({vowel}) <> \u110c;" // hangul choseong cieuc
+ + "h ({vowel}) <> \u1112;" // hangul choseong hieuh
+ + "gg ({vowel}) <> \u1101;" // hangul choseong ssangkiyeok
+ + "g ({vowel}) <> \u1100;" // hangul choseong kiyeok
+ + "d ({vowel}) <> \u1103;" // hangul choseong tikeut
+ + "c ({vowel}) <> \u110e;" // hangul choseong chieuch
+ + "b ({vowel}) <> \u1107;" // hangul choseong pieup
+ + "bb ({vowel}) <> \u1108;"
+ + "jj ({vowel}) <> \u110d;"
+ + "dd ({vowel}) <> \u1104;"
+
+ // If we have gotten through to these rules, and we start with
+ // a consonant, then the remaining mappings would be to F,
+ // because must have CC (or C<non-letter>), not CV.
+ // If we have F before us, then
+ // we would end up with FF, which is wrong. The simplest fix is
+ // to still make it an initial, but also insert an "u",
+ // so we end up with F, I, u, and then continue with the C
+
+ // special, only initial
+ + "bb > \u1108\u116e;" // hangul choseong ssangpieup
+ + "jj > \u1108\u110d;" // hangul choseong ssangcieuc
+ + "dd > \u1108\u1104;" // hangul choseong ssangtikeut
+
+ + "({final}) t > \u1110\u116e;" // hangul choseong thieuth
+ + "({final}) ss > \u110a\u116e;" // hangul choseong ssangsios
+ + "({final}) s > \u1109\u116e;" // hangul choseong sios
+ + "({final}) p > \u1111\u116e;" // hangul choseong phieuph
+ + "({final}) n > \u1102\u116e;" // hangul choseong nieun
+ + "({final}) m > \u1106\u116e;" // hangul choseong mieum
+ + "({final}) l > \u1105\u116e;" // hangul choseong rieul
+ + "({final}) k > \u110f\u116e;" // hangul choseong khieukh
+ + "({final}) j > \u110c\u116e;" // hangul choseong cieuc
+ + "({final}) h > \u1112\u116e;" // hangul choseong hieuh
+ + "({final}) gg > \u1101\u116e;" // hangul choseong ssangkiyeok
+ + "({final}) g > \u1100\u116e;" // hangul choseong kiyeok
+ + "({final}) d > \u1103\u116e;" // hangul choseong tikeut
+ + "({final}) c > \u110e\u116e;" // hangul choseong chieuch
+ + "({final}) b > \u1107\u116e;" // hangul choseong pieup
+
+ // MEDIALS after INITIALS
+
+ + "({initial}) yu <> \u1172;" // hangul jungseong yu
+ + "({initial}) yo <> \u116d;" // hangul jungseong yo
+ + "({initial}) yi <> \u1174;" // hangul jungseong yi
+ + "({initial}) yeo <> \u1167;" // hangul jungseong yeo
+ + "({initial}) ye <> \u1168;" // hangul jungseong ye
+ + "({initial}) yae <> \u1164;" // hangul jungseong yae
+ + "({initial}) ya <> \u1163;" // hangul jungseong ya
+ + "({initial}) wi <> \u1171;" // hangul jungseong wi
+ + "({initial}) weo <> \u116f;" // hangul jungseong weo
+ + "({initial}) we <> \u1170;" // hangul jungseong we
+ + "({initial}) wae <> \u116b;" // hangul jungseong wae
+ + "({initial}) wa <> \u116a;" // hangul jungseong wa
+ + "({initial}) u <> \u116e;" // hangul jungseong u
+ + "({initial}) oe <> \u116c;" // hangul jungseong oe
+ + "({initial}) o <> \u1169;" // hangul jungseong o
+ + "({initial}) i <> \u1175;" // hangul jungseong i
+ + "({initial}) eu <> \u1173;" // hangul jungseong eu
+ + "({initial}) eo <> \u1165;" // hangul jungseong eo
+ + "({initial}) e <> \u1166;" // hangul jungseong e
+ + "({initial}) ae <> \u1162;" // hangul jungseong ae
+ + "({initial}) a <> \u1161;" // hangul jungseong a
+
+ // MEDIALS (vowels) not after INITIALs
+
+ + "yu > \u110B\u1172;" // hangul jungseong yu
+ + "yo > \u110B\u116d;" // hangul jungseong yo
+ + "yi > \u110B\u1174;" // hangul jungseong yi
+ + "yeo > \u110B\u1167;" // hangul jungseong yeo
+ + "ye > \u110B\u1168;" // hangul jungseong ye
+ + "yae > \u110B\u1164;" // hangul jungseong yae
+ + "ya > \u110B\u1163;" // hangul jungseong ya
+ + "wi > \u110B\u1171;" // hangul jungseong wi
+ + "weo > \u110B\u116f;" // hangul jungseong weo
+ + "we > \u110B\u1170;" // hangul jungseong we
+ + "wae > \u110B\u116b;" // hangul jungseong wae
+ + "wa > \u110B\u116a;" // hangul jungseong wa
+ + "u > \u110B\u116e;" // hangul jungseong u
+ + "oe > \u110B\u116c;" // hangul jungseong oe
+ + "o > \u110B\u1169;" // hangul jungseong o
+ + "i > \u110B\u1175;" // hangul jungseong i
+ + "eu > \u110B\u1173;" // hangul jungseong eu
+ + "eo > \u110B\u1165;" // hangul jungseong eo
+ + "e > \u110B\u1166;" // hangul jungseong e
+ + "ae > \u110B\u1162;" // hangul jungseong ae
+ + "a > \u110B\u1161;" // hangul jungseong a
+
+
+ // FINALS
+
+ + "t <> \u11c0;" // hangul jongseong thieuth
+ + "ss <> \u11bb;" // hangul jongseong ssangsios
+ + "s <> \u11ba;" // hangul jongseong sios
+ + "p <> \u11c1;" // hangul jongseong phieuph
+ + "nj <> \u11ac;" // hangul jongseong nieun-cieuc
+ + "nh <> \u11ad;" // hangul jongseong nieun-hieuh
+ + "ng <> \u11bc;" // hangul jongseong ieung
+ + "n <> \u11ab;" // hangul jongseong nieun
+ + "m <> \u11b7;" // hangul jongseong mieum
+ + "lt <> \u11b4;" // hangul jongseong rieul-thieuth
+ + "ls <> \u11b3;" // hangul jongseong rieul-sios
+ + "lp <> \u11b5;" // hangul jongseong rieul-phieuph
+ + "lm <> \u11b1;" // hangul jongseong rieul-mieum
+ + "lh <> \u11b6;" // hangul jongseong rieul-hieuh
+ + "lg <> \u11b0;" // hangul jongseong rieul-kiyeok
+ + "lb <> \u11b2;" // hangul jongseong rieul-pieup
+ + "l <> \u11af;" // hangul jongseong rieul
+ + "k <> \u11bf;" // hangul jongseong khieukh
+ + "j <> \u11bd;" // hangul jongseong cieuc
+ + "h <> \u11c2;" // hangul jongseong hieuh
+ + "gs <> \u11aa;" // hangul jongseong kiyeok-sios
+ + "gg <> \u11a9;" // hangul jongseong ssangkiyeok
+ + "g <> \u11a8;" // hangul jongseong kiyeok
+ + "d <> \u11ae;" // hangul jongseong tikeut
+ + "c <> \u11be;" // hangul jongseong chieuch
+ + "bs <> \u11b9;" // hangul jongseong pieup-sios
+ + "b <> \u11b8;" // hangul jongseong pieup
+
+ // extra English letters
+ // {moved to bottom - aliu}
+
+ + "z > |s;"
+ //{ + "Z > |s;" } masked
+ + "x > |ks;"
+ + "X > |ks;"
+ + "v > |b;"
+ + "V > |b;"
+ + "r > |l;"
+ + "R > |l;"
+ + "q > |k;"
+ + "Q > |k;"
+ + "f > |p;"
+ + "F > |p;"
+ //{ + "c > |k;" } masked
+ + "C > |k;"
+
+ + "y > \u1172;" // hangul jungseong yu
+ + "w > \u1171;" // hangul jungseong wi
+
+
+ // ====================================
+ // Normal final rule: remove '
+ // ====================================
+
+ + "''>;"
+ }
+ };
+ }
+}
diff --git a/src/com/ibm/text/resources/TransliterationRule_Latin_Kana.java b/src/com/ibm/text/resources/TransliterationRule_Latin_Kana.java
new file mode 100755
index 0000000..4296559
--- /dev/null
+++ b/src/com/ibm/text/resources/TransliterationRule_Latin_Kana.java
@@ -0,0 +1,1338 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/TransliterationRule_Latin_Kana.java,v $
+ * $Date: 2000/03/10 04:07:31 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+public class TransliterationRule_Latin_Kana extends ListResourceBundle {
+ /**
+ * Overrides ListResourceBundle
+ */
+ public Object[][] getContents() {
+ return new Object[][] {
+ // Lowercase Latin to hiragana
+ // Uppercase Latin to katakana
+
+ { "Rule", ""
+ //# $Revision: 1.2 $
+ // Transliteration rules for Japanese Hiragana and Katakana to
+ // romaji
+ // lower case roman generates hiragana.
+ // upper case roman generates katakana.
+ // 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.
+ */
+ //#######################################
+ // Definitions of variables to be substituted
+ //#######################################
+
+ + "vowel=[aeiou];"
+ + "quote='';"
+
+ // now the kana
+ + "long=\u30FC;"
+
+ + "~a=\u3041;"
+ + "^a=\u3042;"
+ + "~i=\u3043;"
+ + "^i=\u3044;"
+ + "~u=\u3045;"
+ + "^u=\u3046;"
+ + "~e=\u3047;"
+ + "^e=\u3048;"
+ + "~o=\u3049;"
+ + "^o=\u304A;"
+
+ + "ka=\u304B;"
+ + "ga=\u304C;"
+ + "ki=\u304D;"
+ + "gi=\u304E;"
+ + "ku=\u304F;"
+ + "gu=\u3050;"
+ + "ke=\u3051;"
+ + "ge=\u3052;"
+ + "ko=\u3053;"
+ + "go=\u3054;"
+
+ //these are small katakana
+ + "~ka=\u30F5;"
+ + "~ke=\u30F6;"
+
+ + "sa=\u3055;"
+ + "za=\u3056;"
+ + "si=\u3057;"
+ + "zi=\u3058;"
+ + "su=\u3059;"
+ + "zu=\u305A;"
+ + "se=\u305B;"
+ + "ze=\u305C;"
+ + "so=\u305D;"
+ + "zo=\u305E;"
+
+ + "ta=\u305F;"
+ + "da=\u3060;"
+ + "ti=\u3061;"
+ + "di=\u3062;"
+ + "~tu=\u3063;"
+ + "tu=\u3064;"
+ + "du=\u3065;"
+ + "te=\u3066;"
+ + "de=\u3067;"
+ + "to=\u3068;"
+ + "do=\u3069;"
+
+ + "na=\u306A;"
+ + "ni=\u306B;"
+ + "nu=\u306C;"
+ + "ne=\u306D;"
+ + "no=\u306E;"
+
+ + "ha=\u306F;"
+ + "ba=\u3070;"
+ + "pa=\u3071;"
+ + "hi=\u3072;"
+ + "bi=\u3073;"
+ + "pi=\u3074;"
+ + "hu=\u3075;"
+ + "bu=\u3076;"
+ + "pu=\u3077;"
+ + "he=\u3078;"
+ + "be=\u3079;"
+ + "pe=\u307A;"
+ + "ho=\u307B;"
+ + "bo=\u307C;"
+ + "po=\u307D;"
+
+ + "ma=\u307E;"
+ + "mi=\u307F;"
+ + "mu=\u3080;"
+ + "me=\u3081;"
+ + "mo=\u3082;"
+
+ + "~ya=\u3083;"
+ + "ya=\u3084;"
+ + "~yu=\u3085;"
+ + "yu=\u3086;"
+ + "~yo=\u3087;"
+ + "yo=\u3088;"
+
+ + "ra=\u3089;"
+ + "ri=\u308A;"
+ + "ru=\u308B;"
+ + "re=\u308C;"
+ + "ro=\u308D;"
+
+ + "~wa=\u308E;"
+ + "wa=\u308F;"
+ + "wi=\u3090;"
+ + "we=\u3091;"
+ + "wo=\u3092;"
+
+ + "^n=\u3093;"
+ + "vu=\u3094;"
+
+ // alternates, just to make the rules easier
+ + "~yi=\u3043;"
+ + "yi=\u3044;"
+ + "~ye=\u3047;"
+ + "ye=\u3048;"
+ + "wu={^u};"
+ // end alternates
+
+ // Katakana
+
+ + "~A=\u30A1;"
+ + "^A=\u30A2;"
+ + "~I=\u30A3;"
+ + "^I=\u30A4;"
+ + "~U=\u30A5;"
+ + "^U=\u30A6;"
+ + "~E=\u30A7;"
+ + "^E=\u30A8;"
+ + "~O=\u30A9;"
+ + "^O=\u30AA;"
+
+ + "KA=\u30AB;"
+ + "GA=\u30AC;"
+ + "KI=\u30AD;"
+ + "GI=\u30AE;"
+ + "KU=\u30AF;"
+ + "GU=\u30B0;"
+ + "KE=\u30B1;"
+ + "GE=\u30B2;"
+ + "KO=\u30B3;"
+ + "GO=\u30B4;"
+
+ //these generate small katakana
+ + "~KA=\u30F5;"
+ + "~KE=\u30F6;"
+
+ + "SA=\u30B5;"
+ + "ZA=\u30B6;"
+ + "SI=\u30B7;"
+ + "ZI=\u30B8;"
+ + "SU=\u30B9;"
+ + "ZU=\u30BA;"
+ + "SE=\u30BB;"
+ + "ZE=\u30BC;"
+ + "SO=\u30BD;"
+ + "ZO=\u30BE;"
+
+ + "TA=\u30BF;"
+ + "DA=\u30C0;"
+ + "TI=\u30C1;"
+ + "DI=\u30C2;"
+ + "~TU=\u30C3;"
+ + "TU=\u30C4;"
+ + "DU=\u30C5;"
+ + "TE=\u30C6;"
+ + "DE=\u30C7;"
+ + "TO=\u30C8;"
+ + "DO=\u30C9;"
+
+ + "NA=\u30CA;"
+ + "NI=\u30CB;"
+ + "NU=\u30CC;"
+ + "NE=\u30CD;"
+ + "NO=\u30CE;"
+
+ + "HA=\u30CF;"
+ + "BA=\u30D0;"
+ + "PA=\u30D1;"
+ + "HI=\u30D2;"
+ + "BI=\u30D3;"
+ + "PI=\u30D4;"
+ + "HU=\u30D5;"
+ + "BU=\u30D6;"
+ + "PU=\u30D7;"
+ + "HE=\u30D8;"
+ + "BE=\u30D9;"
+ + "PE=\u30DA;"
+ + "HO=\u30DB;"
+ + "BO=\u30DC;"
+ + "PO=\u30DD;"
+
+ + "MA=\u30DE;"
+ + "MI=\u30DF;"
+ + "MU=\u30E0;"
+ + "ME=\u30E1;"
+ + "MO=\u30E2;"
+
+ + "~YA=\u30E3;"
+ + "YA=\u30E4;"
+ + "~YU=\u30E5;"
+ + "YU=\u30E6;"
+ + "~YO=\u30E7;"
+ + "YO=\u30E8;"
+ + "~WA=\u30EE;"
+
+ // alternates, just to make the rules easier
+ + "~YI=\u30A3;"
+ + "YI=\u30A4;"
+ + "~YE=\u30A7;"
+ + "YE=\u30A8;"
+ + "WU={^U};"
+ // end alternates
+
+ + "RA=\u30E9;"
+ + "RI=\u30EA;"
+ + "RU=\u30EB;"
+ + "RE=\u30EC;"
+ + "RO=\u30ED;"
+
+ + "VA=\u30F7;"
+ + "VI=\u30F8;"
+ + "VU=\u30F4;"
+ + "VE=\u30F9;"
+ + "VO=\u30FA;"
+
+ + "WA=\u30EF;"
+ + "WI=\u30F0;"
+ + "WE=\u30F1;"
+ + "WO=\u30F2;"
+
+ + "^N=\u30F3;"
+ + "LONG=\u30FC;"
+ + "QUOTE='';"
+
+ // Variables used for double-letters with tsu
+
+ + "K-START=[{KA}{KI}{KU}{KE}{KO}{ka}{ki}{ku}{ke}{ko}];"
+ + "G-START=[{GA}{GI}{GU}{GE}{GO}{ga}{gi}{gu}{ge}{go}];"
+
+ + "S-START=[{SA}{SI}{SU}{SE}{SO}{sa}{si}{su}{se}{so}];"
+ + "Z-START=[{ZA}{ZU}{ZE}{ZO}{za}{zu}{ze}{zo}];"
+ + "J-START=[{ZI}{zi}];"
+
+ + "T-START=[{TA}{TI}{TU}{TE}{TO}{ta}{ti}{tu}{te}{to}];"
+ + "D-START=[{DA}{DI}{DU}{DE}{DO}{da}{di}{du}{de}{do}];"
+
+ + "N-START=[{NA}{NI}{NU}{NE}{NO}{na}{ni}{nu}{ne}{no}];"
+
+ + "H-START=[{HA}{HI}{HE}{HO}{ha}{hi}{he}{ho}];"
+ + "F-START=[{HU}{hu}];"
+ + "B-START=[{BA}{BI}{BU}{BE}{BO}{ba}{bi}{bu}{be}{bo}];"
+ + "P-START=[{PA}{PI}{PU}{PE}{PO}{pa}{pi}{pu}{pe}{po}];"
+
+ + "M-START=[{MA}{MI}{MU}{ME}{MO}{ma}{mi}{mu}{me}{mo}];"
+
+ + "Y-START=[{YA}{YU}{YO}{ya}{yu}{yo}];"
+
+ + "R-START=[{RA}{RI}{RU}{RE}{RO}{ra}{ri}{ru}{re}{ro}];"
+
+ + "W-START=[{WA}{WI}{WE}{WO}{wa}{wi}{we}{wo}];"
+
+ + "V-START=[{VA}{VI}{VU}{VE}{VO}{vu}];"
+
+ // lowercase copies for convenience in making hiragana
+
+ + "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};"
+
+ // remember that the order is very significant:
+ // always put longer before shorter elements
+
+ //#######################################
+ // KATAKANA
+ //#######################################
+
+ + "VA>{VA};"
+ + "VI>{VI};"
+ + "VE>{VE};"
+ + "VO>{VO};"
+
+ + "VA<{VA};"
+ + "VI<{VI};"
+ + "VE<{VE};"
+ + "VO<{VO};"
+
+ //#######################################
+ // KATAKANA SHARED
+ // These are also used to produce hiragana, by lowercasing
+ //#######################################
+
+ + "A>{^A};"
+
+ + "BA>{BA};"
+ + "BI>{BI};"
+ + "BU>{BU};"
+ + "BE>{BE};"
+ + "BO>{BO};"
+ + "BY>{BI}|~Y;"
+
+ + "CHI>{TI};"
+ + "CH>{TI}|~Y;"
+
+ + "C(I>|S;"
+ + "C(E>|S;"
+
+ + "DA>{DA};"
+ + "DI>{DE}{~I};"
+ + "DU>{DE}{~U};"
+ + "DE>{DE};"
+ + "DO>{DO};"
+ + "DZU>{DU};"
+ + "DJI>{DI};"
+ + "DJ>{DI}|~Y;"
+
+ + "E>{^E};"
+
+ + "FU>{HU};"
+
+ + "GA>{GA};"
+ + "GI>{GI};"
+ + "GU>{GU};"
+ + "GE>{GE};"
+ + "GO>{GO};"
+ + "GY>{GI}|~Y;"
+
+ + "HA>{HA};"
+ + "HI>{HI};"
+ + "HU>{HE}{~U};"
+ + "HE>{HE};"
+ + "HO>{HO};"
+
+ + "I>{^I};"
+
+ + "JI>{ZI};"
+
+ + "KA>{KA};"
+ + "KI>{KI};"
+ + "KU>{KU};"
+ + "KE>{KE};"
+ + "KO>{KO};"
+ + "KY>{KI}|~Y;"
+
+ + "MA>{MA};"
+ + "MI>{MI};"
+ + "MU>{MU};"
+ + "ME>{ME};"
+ + "MO>{MO};"
+ + "MY>{MI}|~Y;"
+
+ + "M(P>{^N};"
+ + "M(B>{^N};"
+ + "M(F>{^N};"
+ + "M(V>{^N};"
+
+ + "NA>{NA};"
+ + "NI>{NI};"
+ + "NU>{NU};"
+ + "NE>{NE};"
+ + "NO>{NO};"
+ + "NY>{NI}|~Y;"
+
+ + "O>{^O};"
+
+ + "PA>{PA};"
+ + "PI>{PI};"
+ + "PU>{PU};"
+ + "PE>{PE};"
+ + "PO>{PO};"
+ + "PY>{PI}|~Y;"
+
+ + "RA>{RA};"
+ + "RI>{RI};"
+ + "RU>{RU};"
+ + "RE>{RE};"
+ + "RO>{RO};"
+ + "RY>{RI}|~Y;"
+
+ + "SA>{SA};"
+ + "SI>{SE}{~I};"
+ + "SU>{SU};"
+ + "SE>{SE};"
+ + "SO>{SO};"
+
+ + "SHI>{SI};"
+ + "SH>{SI}|~Y;"
+
+ + "TA>{TA};"
+ + "TI>{TE}{~I};"
+ + "TU>{TE}{~U};"
+ + "TE>{TE};"
+ + "TO>{TO};"
+
+ + "TSU>{TU};"
+ //+ "TS>{TU}|~;"
+
+ + "U>{^U};"
+
+ + "VU>{VU};"
+
+ + "WA>{WA};"
+ + "WI>{WI};"
+ + "WU>{WU};"
+ + "WE>{WE};"
+ + "WO>{WO};"
+
+ + "YA>{YA};"
+ + "YI>{YI};"
+ + "YU>{YU};"
+ + "YE>{YE};"
+ + "YO>{YO};"
+
+ + "ZA>{ZA};"
+ + "ZI>{ZE}{~I};"
+ + "ZU>{ZU};"
+ + "ZE>{ZE};"
+ + "ZO>{ZO};"
+
+ // SMALL FORMS
+
+ + "~A>{~A};"
+ + "~I>{~I};"
+ + "~U>{~U};"
+ + "~E>{~E};"
+ + "~O>{~O};"
+ + "~KA>{~KA};"
+ + "~KE>{~KE};"
+ + "~TSU>{~TU};"
+ + "~WA>{~WA};"
+ + "~YA>{~YA};"
+ + "~YI>{~YI};"
+ + "~YU>{~YU};"
+ + "~YE>{~YE};"
+ + "~YO>{~YO};"
+
+ // DOUBLE CONSONANTS
+
+ + "B(B>{~TU};"
+ + "C(K>{~TU};"
+ + "C(C>{~TU};"
+ + "C(Q>{~TU};"
+ + "D(D>{~TU};"
+ + "F(F>{~TU};"
+ + "G(G>{~TU};"
+ + "H(H>{~TU};"
+ + "J(J>{~TU};"
+ + "K(K>{~TU};"
+ + "L(L>{~TU};"
+ + "M(M>{~TU};"
+ + "N(N>{~TU};"
+ + "P(P>{~TU};"
+ + "Q(Q>{~TU};"
+ + "R(R>{~TU};"
+ + "S(SH>{~TU};"
+ + "S(S>{~TU};"
+ + "T(CH>{~TU};"
+ + "T(T>{~TU};"
+ + "V(V>{~TU};"
+ + "W(W>{~TU};"
+ + "X(X>{~TU};"
+ + "Y(Y>{~TU};"
+ + "Z(Z>{~TU};"
+
+ // ########################################
+ // CATCH MISSING VOWELS!
+ // THESE ARE TO INSURE COMPLETENESS, THAT
+ // ALL ROMAJI MAPS TO KANA
+ // ########################################
+
+ /*
+ + "SH>{SI};"
+ + "TS>{TU};"
+ + "CH>{TI};"
+ + "DJ>{DI};"
+ + "DZ>{DU};"
+ */
+
+ // THE FOLLOWING ARE NOT REALLY NECESSARY, BUT PRODUCE
+ // SLIGHTLY MORE NATURAL RESULTS.
+
+ //masked: + "BY>{BI};"
+ + "CY>{SE}{~I};"
+ + "DY>{DE}{~I};"
+ //masked: + "GY>{GI};"
+ + "HY>{HI};"
+ //masked: + "KY>{KI};"
+ //masked: + "MY>{MI};"
+ //masked: + "PY>{PI};"
+ //masked: + "RY>{RI};"
+ + "SY>{SE}{~I};"
+ + "TY>{TE}{~I};"
+ + "ZY>{ZE}{~I};"
+
+ // SIMPLE SUBSTITUTIONS USING BACKUP
+
+ + "C>|K;"
+ + "F>{HU}|~;"
+ + "J>{ZI}|~Y;"
+ + "L>|R;"
+ + "Q>|K;" // BACKUP AND REDO
+ + "V>{VU}|~;"
+ + "W>{^U}|~;"
+ + "X>|KS;"
+
+ // WE HAD TO LIST THE LONGER ONES FIRST,
+ // SO HERE ARE THE ISOLATED CONSONANTS
+
+ + "B>{BU};"
+ + "D>{DE};"
+ //masked: + "F>{HU};"
+ + "G>{GU};"
+ + "H>{HE};"
+ //masked: + "J>{ZI};"
+ + "K>{KU};"
+ + "M>{^N};"
+ + "N>{^N};"
+ + "P>{PU};"
+ + "R>{RU};"
+ + "S>{SU};"
+ + "T>{TE};"
+ //masked: + "V>{BU};"
+ //masked: + "W>{^U};"
+ //masked: + "X>{KU}{SU};"
+ + "Y>{^I};"
+ + "Z>{ZU};"
+
+ // NOW KANA TO ROMAN
+
+ + "GYA<{GI}{~YA};"
+ + "GYI<{GI}{~I};"
+ + "GYU<{GI}{~YU};"
+ + "GYE<{GI}{~E};"
+ + "GYO<{GI}{~YO};"
+
+ + "GA<{GA};"
+ + "GI<{GI};"
+ + "GU<{GU};"
+ + "GE<{GE};"
+ + "GO<{GO};"
+
+ + "KYA<{KI}{~YA};"
+ + "KYI<{KI}{~I};"
+ + "KYU<{KI}{~YU};"
+ + "KYE<{KI}{~E};"
+ + "KYO<{KI}{~YO};"
+
+ + "KA<{KA};"
+ + "KI<{KI};"
+ + "KU<{KU};"
+ + "KE<{KE};"
+ + "KO<{KO};"
+
+ + "JA<{ZI}{~YA};"
+ + "JI<{ZI}{~I};"
+ + "JU<{ZI}{~YU};"
+ + "JE<{ZI}{~E};"
+ + "JO<{ZI}{~YO};"
+ + "JI<{ZI};"
+
+ + "ZA<{ZA};"
+ + "ZI<{ZE}{~I};"
+ + "ZU<{ZU};"
+ + "ZE<{ZE};"
+ + "ZO<{ZO};"
+
+ + "SHA<{SI}{~YA};"
+ + "SHI<{SI}{~I};"
+ + "SHU<{SI}{~YU};"
+ + "SHE<{SI}{~E};"
+ + "SHO<{SI}{~YO};"
+ + "SHI<{SI};"
+
+ + "SA<{SA};"
+ + "SI<{SE}{~I};"
+ + "SU<{SU};"
+ + "SE<{SE};"
+ + "SO<{SO};"
+
+ + "DJA<{DI}{~YA};"
+ + "DJI<{DI}{~I};"
+ + "DJU<{DI}{~YU};"
+ + "DJE<{DI}{~E};"
+ + "DJO<{DI}{~YO};"
+ + "DJI<{DI};"
+
+ + "DZU<{DU};"
+
+ + "DA<{DA};"
+ + "DI<{DE}{~I};"
+ + "DU<{DE}{~U};"
+ + "DE<{DE};"
+ + "DO<{DO};"
+
+ + "CHA<{TI}{~YA};"
+ + "CHI<{TI}{~I};"
+ + "CHU<{TI}{~YU};"
+ + "CHE<{TI}{~E};"
+ + "CHO<{TI}{~YO};"
+ + "CHI<{TI};"
+
+ + "TSU<{TU};"
+
+ + "TA<{TA};"
+ + "TI<{TE}{~I};"
+ + "TU<{TE}{~U};"
+ + "TE<{TE};"
+ + "TO<{TO};"
+
+ + "NYA<{NI}{~YA};"
+ + "NYI<{NI}{~I};"
+ + "NYU<{NI}{~YU};"
+ + "NYE<{NI}{~E};"
+ + "NYO<{NI}{~YO};"
+
+ + "NA<{NA};"
+ + "NI<{NI};"
+ + "NU<{NU};"
+ + "NE<{NE};"
+ + "NO<{NO};"
+
+ + "BYA<{BI}{~YA};"
+ + "BYI<{BI}{~I};"
+ + "BYU<{BI}{~YU};"
+ + "BYE<{BI}{~E};"
+ + "BYO<{BI}{~YO};"
+
+ + "BA<{BA};"
+ + "BI<{BI};"
+ + "BU<{BU};"
+ + "BE<{BE};"
+ + "BO<{BO};"
+
+ + "PYA<{PI}{~YA};"
+ + "PYI<{PI}{~I};"
+ + "PYU<{PI}{~YU};"
+ + "PYE<{PI}{~E};"
+ + "PYO<{PI}{~YO};"
+
+ + "PA<{PA};"
+ + "PI<{PI};"
+ + "PU<{PU};"
+ + "PE<{PE};"
+ + "PO<{PO};"
+
+ + "FA<{HU}{~A};"
+ + "FI<{HU}{~I};"
+ + "FE<{HU}{~E};"
+ + "FO<{HU}{~O};"
+ + "FU<{HU};"
+
+ + "HA<{HA};"
+ + "HI<{HI};"
+ + "HU<{HE}{~U};"
+ + "HE<{HE};"
+ + "HO<{HO};"
+
+ + "MYA<{MI}{~YA};"
+ + "MYI<{MI}{~I};"
+ + "MYU<{MI}{~YU};"
+ + "MYE<{MI}{~E};"
+ + "MYO<{MI}{~YO};"
+
+ + "MA<{MA};"
+ + "MI<{MI};"
+ + "MU<{MU};"
+ + "ME<{ME};"
+ + "MO<{MO};"
+
+ + "YA<{YA};"
+ //+ "YE<{YI};"
+ + "YU<{YU};"
+ //+ "YE<{YE};"
+ + "YO<{YO};"
+
+ + "RYA<{RI}{~YA};"
+ + "RYI<{RI}{~I};"
+ + "RYU<{RI}{~YU};"
+ + "RYE<{RI}{~E};"
+ + "RYO<{RI}{~YO};"
+
+ + "RA<{RA};"
+ + "RI<{RI};"
+ + "RU<{RU};"
+ + "RE<{RE};"
+ + "RO<{RO};"
+
+ + "WA<{WA};"
+ + "WI<{WI};"
+ + "WE<{WE};"
+ + "WO<{WO};"
+ //+ "WU<{WU};"
+
+ + "VA<{VU}{~A};"
+ + "VI<{VU}{~I};"
+ + "VE<{VU}{~E};"
+ + "VO<{VU}{~O};"
+ + "VU<{VU};"
+
+ // DOUBLED LETTERS
+
+ + "N''<{^N}({^A};"
+ + "N''<{^N}({^I};"
+ + "N''<{^N}({^U};"
+ + "N''<{^N}({^E};"
+ + "N''<{^N}({^O};"
+ + "N''<{^N}({NA};"
+ + "N''<{^N}({NI};"
+ + "N''<{^N}({NU};"
+ + "N''<{^N}({NE};"
+ + "N''<{^N}({NO};"
+ + "N''<{^N}({YA};"
+ + "N''<{^N}({YU};"
+ + "N''<{^N}({YO};"
+ + "N''<{^N}({^N};"
+ + "N<{^N};"
+
+ + "N<{~TU}({N-START};"
+ + "M<{~TU}({M-START};"
+ + "W<{~TU}({W-START};"
+ + "Y<{~TU}({Y-START};"
+ + "G<{~TU}({G-START};"
+ + "K<{~TU}({K-START};"
+ + "Z<{~TU}({Z-START};"
+ + "J<{~TU}({J-START};"
+ + "S<{~TU}({S-START};"
+ + "D<{~TU}({D-START};"
+ + "T<{~TU}({T-START};"
+ + "B<{~TU}({B-START};"
+ + "P<{~TU}({P-START};"
+ + "H<{~TU}({H-START};"
+ + "F<{~TU}({F-START};"
+ + "R<{~TU}({R-START};"
+ + "V<{~TU}({V-START};"
+
+ + "A<{^A};" // MOVED THIS BLOCK DOWN {aliu}
+ + "I<{^I};"
+ + "U<{^U};"
+ + "E<{^E};"
+ + "O<{^O};"
+
+ // SMALL FORMS
+
+ + "~A<{~A};"
+ + "~I<{~I};"
+ + "~U<{~U};"
+ + "~E<{~E};"
+ + "~O<{~O};"
+ + "~KA<{~KA};"
+ + "~KE<{~KE};"
+ + "~YA<{~YA};"
+ + "~YU<{~YU};"
+ + "~YO<{~YO};"
+ + "~TSU<{~TU};"
+ + "~WA<{~WA};"
+
+ // LENGTH MARK. LATER, COULD USE CIRCUMFLEX
+
+ + "A<A){LONG};" // LIU
+ + "E<E){LONG};" // LIU
+ + "I<I){LONG};" // LIU
+ + "O<O){LONG};" // LIU
+ + "U<U){LONG};" // LIU
+
+ //#######################################
+ // HIRAGANA
+ // These are derived from the above by lowercasing
+ //#######################################
+
+ + "a>{^a};"
+
+ + "ba>{ba};"
+ + "bi>{bi};"
+ + "bu>{bu};"
+ + "be>{be};"
+ + "bo>{bo};"
+ + "by>{bi}|~y;"
+
+ + "chi>{ti};"
+ + "ch>{ti}|~y;"
+
+ + "c(i>|s;"
+ + "c(e>|s;"
+
+ + "da>{da};"
+ + "di>{de}{~i};"
+ + "du>{de}{~u};"
+ + "de>{de};"
+ + "do>{do};"
+ + "dzu>{du};"
+ + "dji>{di};"
+ + "dj>{di}|~y;"
+
+ + "e>{^e};"
+
+ + "fu>{hu};"
+
+ + "ga>{ga};"
+ + "gi>{gi};"
+ + "gu>{gu};"
+ + "ge>{ge};"
+ + "go>{go};"
+ + "gy>{gi}|~y;"
+
+ + "ha>{ha};"
+ + "hi>{hi};"
+ + "hu>{he}{~u};"
+ + "he>{he};"
+ + "ho>{ho};"
+
+ + "i>{^i};"
+
+ + "ji>{zi};"
+
+ + "ka>{ka};"
+ + "ki>{ki};"
+ + "ku>{ku};"
+ + "ke>{ke};"
+ + "ko>{ko};"
+ + "ky>{ki}|~y;"
+
+ + "ma>{ma};"
+ + "mi>{mi};"
+ + "mu>{mu};"
+ + "me>{me};"
+ + "mo>{mo};"
+ + "my>{mi}|~y;"
+
+ + "m(p>{^n};"
+ + "m(b>{^n};"
+ + "m(f>{^n};"
+ + "m(v>{^n};"
+
+ + "na>{na};"
+ + "ni>{ni};"
+ + "nu>{nu};"
+ + "ne>{ne};"
+ + "no>{no};"
+ + "ny>{ni}|~y;"
+
+ + "o>{^o};"
+
+ + "pa>{pa};"
+ + "pi>{pi};"
+ + "pu>{pu};"
+ + "pe>{pe};"
+ + "po>{po};"
+ + "py>{pi}|~y;"
+
+ + "ra>{ra};"
+ + "ri>{ri};"
+ + "ru>{ru};"
+ + "re>{re};"
+ + "ro>{ro};"
+ + "ry>{ri}|~y;"
+
+ + "sa>{sa};"
+ + "si>{se}{~i};"
+ + "su>{su};"
+ + "se>{se};"
+ + "so>{so};"
+
+ + "shi>{si};"
+ + "sh>{si}|~y;"
+
+ + "ta>{ta};"
+ + "ti>{te}{~i};"
+ + "tu>{te}{~u};"
+ + "te>{te};"
+ + "to>{to};"
+
+ + "tsu>{tu};"
+ //+ "ts>{tu}|~;"
+
+ + "u>{^u};"
+
+ + "vu>{vu};"
+
+ + "wa>{wa};"
+ + "wi>{wi};"
+ + "wu>{wu};"
+ + "we>{we};"
+ + "wo>{wo};"
+
+ + "ya>{ya};"
+ + "yi>{yi};"
+ + "yu>{yu};"
+ + "ye>{ye};"
+ + "yo>{yo};"
+
+ + "za>{za};"
+ + "zi>{ze}{~i};"
+ + "zu>{zu};"
+ + "ze>{ze};"
+ + "zo>{zo};"
+
+ // small forms
+
+ + "~a>{~a};"
+ + "~i>{~i};"
+ + "~u>{~u};"
+ + "~e>{~e};"
+ + "~o>{~o};"
+ + "~ka>{~ka};"
+ + "~ke>{~ke};"
+ + "~tsu>{~tu};"
+ + "~wa>{~wa};"
+ + "~ya>{~ya};"
+ + "~yi>{~yi};"
+ + "~yu>{~yu};"
+ + "~ye>{~ye};"
+ + "~yo>{~yo};"
+
+ // Double Consonants
+
+ + "b(b>{~tu};"
+ + "c(k>{~tu};"
+ + "c(c>{~tu};"
+ + "c(q>{~tu};"
+ + "d(d>{~tu};"
+ + "f(f>{~tu};"
+ + "g(g>{~tu};"
+ + "h(h>{~tu};"
+ + "j(j>{~tu};"
+ + "k(k>{~tu};"
+ + "l(l>{~tu};"
+ + "m(m>{~tu};"
+ + "n(n>{~tu};"
+ + "p(p>{~tu};"
+ + "q(q>{~tu};"
+ + "r(r>{~tu};"
+ + "s(sh>{~tu};"
+ + "s(s>{~tu};"
+ + "t(ch>{~tu};"
+ + "t(t>{~tu};"
+ + "v(v>{~tu};"
+ + "w(w>{~tu};"
+ + "x(x>{~tu};"
+ + "y(y>{~tu};"
+ + "z(z>{~tu};"
+
+ // ########################################
+ // catch missing vowels!
+ // These are to insure completeness, that
+ // all romaji maps to kana
+ // ########################################
+
+ /*
+ + "sh>{si};"
+ + "ts>{tu};"
+ + "ch>{ti};"
+ + "dj>{di};"
+ + "dz>{du};"
+ */
+
+ // the following are not really necessary, but produce
+ // slightly more natural results.
+
+ //masked: + "by>{bi};"
+ + "cy>{se}{~i};"
+ + "dy>{de}{~i};"
+ //masked: + "gy>{gi};"
+ + "hy>{hi};"
+ //masked: + "ky>{ki};"
+ //masked: + "my>{mi};"
+ //masked: + "py>{pi};"
+ //masked: + "ry>{ri};"
+ + "sy>{se}{~i};"
+ + "ty>{te}{~i};"
+ + "zy>{ze}{~i};"
+
+ // simple substitutions using backup
+
+ + "c>|k;"
+ + "f>{hu}|~;"
+ + "j>{zi}|~y;"
+ + "l>|r;"
+ + "q>|k;" // backup and redo
+ + "v>{vu}|~;"
+ + "w>{^u}|~;"
+ + "x>|ks;"
+
+ // We had to list the longer ones first,
+ // so here are the isolated consonants
+
+ + "b>{bu};"
+ + "d>{de};"
+ //masked: + "f>{hu};"
+ + "g>{gu};"
+ + "h>{he};"
+ //masked: + "j>{zi};"
+ + "k>{ku};"
+ + "m>{^n};"
+ + "n>{^n};"
+ + "p>{pu};"
+ + "r>{ru};"
+ + "s>{su};"
+ + "t>{te};"
+ //masked: + "v>{bu};"
+ //masked: + "w>{^u};"
+ //masked: + "x>{ku}{su};"
+ + "y>{^i};"
+ + "z>{zu};"
+
+ // NOW KANA TO ROMAN
+
+ + "gya<{gi}{~ya};"
+ + "gyi<{gi}{~i};"
+ + "gyu<{gi}{~yu};"
+ + "gye<{gi}{~e};"
+ + "gyo<{gi}{~yo};"
+
+ + "ga<{ga};"
+ + "gi<{gi};"
+ + "gu<{gu};"
+ + "ge<{ge};"
+ + "go<{go};"
+
+ + "kya<{ki}{~ya};"
+ + "kyi<{ki}{~i};"
+ + "kyu<{ki}{~yu};"
+ + "kye<{ki}{~e};"
+ + "kyo<{ki}{~yo};"
+
+ + "ka<{ka};"
+ + "ki<{ki};"
+ + "ku<{ku};"
+ + "ke<{ke};"
+ + "ko<{ko};"
+
+ + "ja<{zi}{~ya};"
+ + "ji<{zi}{~i};"
+ + "ju<{zi}{~yu};"
+ + "je<{zi}{~e};"
+ + "jo<{zi}{~yo};"
+ + "ji<{zi};"
+
+ + "za<{za};"
+ + "zi<{ze}{~i};"
+ + "zu<{zu};"
+ + "ze<{ze};"
+ + "zo<{zo};"
+
+ + "sha<{si}{~ya};"
+ + "shi<{si}{~i};"
+ + "shu<{si}{~yu};"
+ + "she<{si}{~e};"
+ + "sho<{si}{~yo};"
+ + "shi<{si};"
+
+ + "sa<{sa};"
+ + "si<{se}{~i};"
+ + "su<{su};"
+ + "se<{se};"
+ + "so<{so};"
+
+ + "dja<{di}{~ya};"
+ + "dji<{di}{~i};"
+ + "dju<{di}{~yu};"
+ + "dje<{di}{~e};"
+ + "djo<{di}{~yo};"
+ + "dji<{di};"
+
+ + "dzu<{du};"
+
+ + "da<{da};"
+ + "di<{de}{~i};"
+ + "du<{de}{~u};"
+ + "de<{de};"
+ + "do<{do};"
+
+ + "cha<{ti}{~ya};"
+ + "chi<{ti}{~i};"
+ + "chu<{ti}{~yu};"
+ + "che<{ti}{~e};"
+ + "cho<{ti}{~yo};"
+ + "chi<{ti};"
+
+ + "tsu<{tu};"
+
+ + "ta<{ta};"
+ + "ti<{te}{~i};"
+ + "tu<{te}{~u};"
+ + "te<{te};"
+ + "to<{to};"
+
+ + "nya<{ni}{~ya};"
+ + "nyi<{ni}{~i};"
+ + "nyu<{ni}{~yu};"
+ + "nye<{ni}{~e};"
+ + "nyo<{ni}{~yo};"
+
+ + "na<{na};"
+ + "ni<{ni};"
+ + "nu<{nu};"
+ + "ne<{ne};"
+ + "no<{no};"
+
+ + "bya<{bi}{~ya};"
+ + "byi<{bi}{~i};"
+ + "byu<{bi}{~yu};"
+ + "bye<{bi}{~e};"
+ + "byo<{bi}{~yo};"
+
+ + "ba<{ba};"
+ + "bi<{bi};"
+ + "bu<{bu};"
+ + "be<{be};"
+ + "bo<{bo};"
+
+ + "pya<{pi}{~ya};"
+ + "pyi<{pi}{~i};"
+ + "pyu<{pi}{~yu};"
+ + "pye<{pi}{~e};"
+ + "pyo<{pi}{~yo};"
+
+ + "pa<{pa};"
+ + "pi<{pi};"
+ + "pu<{pu};"
+ + "pe<{pe};"
+ + "po<{po};"
+
+ + "fa<{hu}{~a};"
+ + "fi<{hu}{~i};"
+ + "fe<{hu}{~e};"
+ + "fo<{hu}{~o};"
+ + "fu<{hu};"
+
+ + "ha<{ha};"
+ + "hi<{hi};"
+ + "hu<{he}{~u};"
+ + "he<{he};"
+ + "ho<{ho};"
+
+ + "mya<{mi}{~ya};"
+ + "myi<{mi}{~i};"
+ + "myu<{mi}{~yu};"
+ + "mye<{mi}{~e};"
+ + "myo<{mi}{~yo};"
+
+ + "ma<{ma};"
+ + "mi<{mi};"
+ + "mu<{mu};"
+ + "me<{me};"
+ + "mo<{mo};"
+
+ + "ya<{ya};"
+ //+ "ye<{yi};"
+ + "yu<{yu};"
+ //+ "ye<{ye};"
+ + "yo<{yo};"
+
+ + "rya<{ri}{~ya};"
+ + "ryi<{ri}{~i};"
+ + "ryu<{ri}{~yu};"
+ + "rye<{ri}{~e};"
+ + "ryo<{ri}{~yo};"
+
+ + "ra<{ra};"
+ + "ri<{ri};"
+ + "ru<{ru};"
+ + "re<{re};"
+ + "ro<{ro};"
+
+ + "wa<{wa};"
+ + "wi<{wi};"
+ + "we<{we};"
+ + "wo<{wo};"
+ //+ "wu<{wu};"
+
+ + "va<{vu}{~a};"
+ + "vi<{vu}{~i};"
+ + "ve<{vu}{~e};"
+ + "vo<{vu}{~o};"
+ + "vu<{vu};"
+
+ // Doubled letters
+
+ + "n''<{^n}({^a};"
+ + "n''<{^n}({^i};"
+ + "n''<{^n}({^u};"
+ + "n''<{^n}({^e};"
+ + "n''<{^n}({^o};"
+ + "n''<{^n}({na};"
+ + "n''<{^n}({ni};"
+ + "n''<{^n}({nu};"
+ + "n''<{^n}({ne};"
+ + "n''<{^n}({no};"
+ + "n''<{^n}({ya};"
+ + "n''<{^n}({yu};"
+ + "n''<{^n}({yo};"
+ + "n''<{^n}({^n};"
+ + "n<{^n};"
+
+ + "n<{~tu}({n-start};"
+ + "m<{~tu}({m-start};"
+ + "w<{~tu}({w-start};"
+ + "y<{~tu}({y-start};"
+ + "g<{~tu}({g-start};"
+ + "k<{~tu}({k-start};"
+ + "z<{~tu}({z-start};"
+ + "j<{~tu}({j-start};"
+ + "s<{~tu}({s-start};"
+ + "d<{~tu}({d-start};"
+ + "t<{~tu}({t-start};"
+ + "b<{~tu}({b-start};"
+ + "p<{~tu}({p-start};"
+ + "h<{~tu}({h-start};"
+ + "f<{~tu}({f-start};"
+ + "r<{~tu}({r-start};"
+ + "v<{~tu}({v-start};"
+
+ + "a<{^a};" // Moved this block down {aliu}
+ + "i<{^i};"
+ + "u<{^u};"
+ + "e<{^e};"
+ + "o<{^o};"
+
+ // small forms
+
+ + "~a<{~a};"
+ + "~i<{~i};"
+ + "~u<{~u};"
+ + "~e<{~e};"
+ + "~o<{~o};"
+ //masked: + "~ka<{~ka};" ({~ka} is an alias for {~KA})
+ //masked: + "~ke<{~ke};" ({~ke} is an alias for {~KE})
+ + "~ya<{~ya};"
+ + "~yu<{~yu};"
+ + "~yo<{~yo};"
+ + "~tsu<{~tu};"
+ + "~wa<{~wa};"
+
+ // length mark. Later, could use circumflex
+
+ + "a<a){long};" // Liu
+ + "e<e){long};" // Liu
+ + "i<i){long};" // Liu
+ + "o<o){long};" // Liu
+ + "u<u){long};" // Liu
+
+ //#######################################
+ // Non-shared stuff goes here
+
+ + "~>;" // remove if not used
+ + "{quote}>;" // remove if not used
+ //+ "<{quote};"
+ + "->{long};"
+
+ }
+ };
+ }
+}
diff --git a/src/com/ibm/text/resources/TransliterationRule_StraightQuotes_CurlyQuotes.java b/src/com/ibm/text/resources/TransliterationRule_StraightQuotes_CurlyQuotes.java
new file mode 100755
index 0000000..f76b69f
--- /dev/null
+++ b/src/com/ibm/text/resources/TransliterationRule_StraightQuotes_CurlyQuotes.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/TransliterationRule_StraightQuotes_CurlyQuotes.java,v $
+ * $Date: 2000/03/10 04:07:31 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+public class TransliterationRule_StraightQuotes_CurlyQuotes extends ListResourceBundle {
+ /**
+ * Overrides ListResourceBundle
+ */
+ public Object[][] getContents() {
+ return new Object[][] {
+ { "Rule",
+ // Rewritten using character codes [LIU]
+ "white=[[:Zs:][:Zl:][:Zp:]];"
+ + "black=[^{white}];"
+ + "open=[:Ps:];"
+ + "dquote=\";"
+
+ + "lAng=\u3008;"
+ + "ldAng=\u300A;"
+ + "lBrk='[';"
+ + "lBrc='{';"
+
+ + "lquote=\u2018;"
+ + "rquote=\u2019;"
+ + "ldquote=\u201C;"
+ + "rdquote=\u201D;"
+
+ + "ldguill=\u00AB;"
+ + "rdguill=\u00BB;"
+ + "lguill=\u2039;"
+ + "rguill=\u203A;"
+
+ + "mdash=\u2014;"
+
+ //#######################################
+ // Conversions from input
+ //#######################################
+
+ // join single quotes
+ + "{lquote}''>{ldquote};"
+ + "{lquote}{lquote}>{ldquote};"
+ + "{rquote}''>{rdquote};"
+ + "{rquote}{rquote}>{rdquote};"
+
+ //smart single quotes
+ + "{white})''>{lquote};"
+ + "{open})''>{lquote};"
+ + "{black})''>{rquote};"
+ + "''>{lquote};"
+
+ //smart doubles
+ + "{white}){dquote}>{ldquote};"
+ + "{open}){dquote}>{ldquote};"
+ + "{black}){dquote}>{rdquote};"
+ + "{dquote}>{ldquote};"
+
+ // join single guillemets
+ + "{rguill}{rguill}>{rdguill};"
+ + "'>>'>{rdguill};"
+ + "{lguill}{lguill}>{ldguill};"
+ + "'<<'>{ldguill};"
+
+ // prevent double spaces
+ + "\\ )\\ >;"
+
+ // join hyphens into dash
+ + "-->{mdash};"
+
+ //#######################################
+ // Conversions back to input
+ //#######################################
+
+ //smart quotes
+ + "''<{lquote};"
+ + "''<{rquote};"
+ + "{dquote}<{ldquote};"
+ + "{dquote}<{rdquote};"
+
+ //hyphens
+ + "--<{mdash};"
+ }
+ };
+ }
+}
diff --git a/src/com/ibm/text/resources/TransliterationRule_UnicodeName_UnicodeChar.java b/src/com/ibm/text/resources/TransliterationRule_UnicodeName_UnicodeChar.java
new file mode 100755
index 0000000..b827486
--- /dev/null
+++ b/src/com/ibm/text/resources/TransliterationRule_UnicodeName_UnicodeChar.java
@@ -0,0 +1,1538 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/resources/Attic/TransliterationRule_UnicodeName_UnicodeChar.java,v $
+ * $Date: 2000/03/10 04:07:32 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.text.resources;
+
+import java.util.ListResourceBundle;
+
+public class TransliterationRule_UnicodeName_UnicodeChar extends ListResourceBundle {
+ /**
+ * Overrides ListResourceBundle
+ */
+ public Object[][] getContents() {
+ return new Object[][] {
+ { "Rule", new String[] {
+ "account of%>\u2100",
+ "addressed to the subject%>\u2101",
+ "adi shakti%>\u262c",
+ "airplane%>\u2708",
+ "all equal to%>\u224c",
+ "almost equal or equal to%>\u224a",
+ "almost equal to%>\u2248",
+ "angle%>\u2220",
+ "angstrom unit%>\u212b",
+ "ankh%>\u2625",
+ "anticlockwise contour integral%>\u2233",
+ "anticlockwise open circle arrow%>\u21ba",
+ "anticlockwise top semicircle arrow%>\u21b6",
+ "apl compose operator%>\u2300",
+ "apl out%>\u2301",
+ "apple logo%>\uf8ff",
+ "approaches the limit%>\u2250",
+ "approximately but not actually equal to%>\u2246",
+ "approximately equal to or the image of%>\u2252",
+ "approximately equal to%>\u2245",
+ "aquarius%>\u2652",
+ "arc%>\u2312",
+ "aries%>\u2648",
+ "ascending node%>\u260a",
+ "assertion%>\u22a6",
+ "asterisk operator%>\u2217",
+ "asterism%>\u2042",
+ "asymptotically equal to%>\u2243",
+ "back-tilted shadowed white right arrow%>\u27ab",
+ "balloon-spoked asterisk%>\u2749",
+ "ballot box with check%>\u2611",
+ "ballot box with x%>\u2612",
+ "ballot box%>\u2610",
+ "ballot x%>\u2718",
+ "barred eighth notes%>\u266b",
+ "barred sixteenth notes%>\u266c",
+ "because%>\u2235",
+ "benzene ring%>\u232c",
+ "between%>\u226c",
+ "biohazard%>\u2623",
+ "black center white star%>\u272c",
+ "black chess bishop%>\u265d",
+ "black chess king%>\u265a",
+ "black chess knight%>\u265e",
+ "black chess pawn%>\u265f",
+ "black chess queen%>\u265b",
+ "black chess rook%>\u265c",
+ "black circle%>\u25cf",
+ "black club suit%>\u2663",
+ "black diamond minus white x%>\u2756",
+ "black diamond suit%>\u2666",
+ "black diamond%>\u25c6",
+ "black down pointing small triangle%>\u25be",
+ "black down pointing triangle%>\u25bc",
+ "black florette%>\u273f",
+ "black four pointed star%>\u2726",
+ "black heart suit%>\u2665",
+ "black left pointing index%>\u261a",
+ "black left pointing pointer%>\u25c4",
+ "black left pointing small triangle%>\u25c2",
+ "black left pointing triangle%>\u25c0",
+ "black lower left triangle%>\u25e3",
+ "black lower right triangle%>\u25e2",
+ "black nib%>\u2712",
+ "black parallelogram%>\u25b0",
+ "black rectangle%>\u25ac",
+ "black right arrow%>\u27a1",
+ "black right arrowhead%>\u27a4",
+ "black right pointing index%>\u261b",
+ "black right pointing pointer%>\u25ba",
+ "black right pointing small triangle%>\u25b8",
+ "black right pointing triangle%>\u25b6",
+ "black scissors%>\u2702",
+ "black small square%>\u25aa",
+ "black smiling face%>\u263b",
+ "black spade suit%>\u2660",
+ "black square%>\u25a0",
+ "black star%>\u2605",
+ "black sun with rays%>\u2600",
+ "black telephone%>\u260e",
+ "black up pointing small triangle%>\u25b4",
+ "black up pointing triangle%>\u25b2",
+ "black upper left triangle%>\u25e4",
+ "black upper right triangle%>\u25e5",
+ "black vertical rectangle%>\u25ae",
+ "black-feathered lower right arrow%>\u27b4",
+ "black-feathered right arrow%>\u27b5",
+ "black-feathered upper right arrow%>\u27b6",
+ "black-letter c%>\u212d",
+ "black-letter h%>\u210c",
+ "black-letter i%>\u2111",
+ "black-letter r%>\u211c",
+ "black-letter z%>\u2128",
+ "blank%>\u2422",
+ "bottom half integral%>\u2321",
+ "bottom left corner%>\u231e",
+ "bottom left crop%>\u230d",
+ "bottom right corner%>\u231f",
+ "bottom right crop%>\u230c",
+ "bowtie%>\u22c8",
+ "bra%>\u2329",
+ "broken vertical bar%>\u00a6",
+ "bullet operator%>\u2219",
+ "bullet%>\u2022",
+ "bullseye%>\u25ce",
+ "c l symbol%>\u2104",
+ "cada una%>\u2106",
+ "caduceus%>\u2624",
+ "cancer%>\u264b",
+ "capricorn%>\u2651",
+ "care of%>\u2105",
+ "caret insertion point%>\u2041",
+ "caret%>\u2038",
+ "caution sign%>\u2621",
+ "cent sign%>\u00a2",
+ "character tie%>\u2040",
+ "check mark%>\u2713",
+ "chi rho%>\u2627",
+ "circle with all but upper left quadrant black%>\u25d5",
+ "circle with left half black%>\u25d0",
+ "circle with lower half black%>\u25d2",
+ "circle with right half black%>\u25d1",
+ "circle with upper half black%>\u25d3",
+ "circle with upper right quadrant black%>\u25d4",
+ "circle with vertical fill%>\u25cd",
+ "circled asterisk operator%>\u229b",
+ "circled dash%>\u229d",
+ "circled digit eight%>\u2467",
+ "circled digit five%>\u2464",
+ "circled digit four%>\u2463",
+ "circled digit nine%>\u2468",
+ "circled digit one%>\u2460",
+ "circled digit seven%>\u2466",
+ "circled digit six%>\u2465",
+ "circled digit three%>\u2462",
+ "circled digit two%>\u2461",
+ "circled digit zero%>\u24ea",
+ "circled division slash%>\u2298",
+ "circled dot operator%>\u2299",
+ "circled equals%>\u229c",
+ "circled heavy white right arrow%>\u27b2",
+ "circled latin capital letter a%>\u24b6",
+ "circled latin capital letter b%>\u24b7",
+ "circled latin capital letter c%>\u24b8",
+ "circled latin capital letter d%>\u24b9",
+ "circled latin capital letter e%>\u24ba",
+ "circled latin capital letter f%>\u24bb",
+ "circled latin capital letter g%>\u24bc",
+ "circled latin capital letter h%>\u24bd",
+ "circled latin capital letter i%>\u24be",
+ "circled latin capital letter j%>\u24bf",
+ "circled latin capital letter k%>\u24c0",
+ "circled latin capital letter l%>\u24c1",
+ "circled latin capital letter m%>\u24c2",
+ "circled latin capital letter n%>\u24c3",
+ "circled latin capital letter o%>\u24c4",
+ "circled latin capital letter p%>\u24c5",
+ "circled latin capital letter q%>\u24c6",
+ "circled latin capital letter r%>\u24c7",
+ "circled latin capital letter s%>\u24c8",
+ "circled latin capital letter t%>\u24c9",
+ "circled latin capital letter u%>\u24ca",
+ "circled latin capital letter v%>\u24cb",
+ "circled latin capital letter w%>\u24cc",
+ "circled latin capital letter x%>\u24cd",
+ "circled latin capital letter y%>\u24ce",
+ "circled latin capital letter z%>\u24cf",
+ "circled latin small letter a%>\u24d0",
+ "circled latin small letter b%>\u24d1",
+ "circled latin small letter c%>\u24d2",
+ "circled latin small letter d%>\u24d3",
+ "circled latin small letter e%>\u24d4",
+ "circled latin small letter f%>\u24d5",
+ "circled latin small letter g%>\u24d6",
+ "circled latin small letter h%>\u24d7",
+ "circled latin small letter i%>\u24d8",
+ "circled latin small letter j%>\u24d9",
+ "circled latin small letter k%>\u24da",
+ "circled latin small letter l%>\u24db",
+ "circled latin small letter m%>\u24dc",
+ "circled latin small letter n%>\u24dd",
+ "circled latin small letter o%>\u24de",
+ "circled latin small letter p%>\u24df",
+ "circled latin small letter q%>\u24e0",
+ "circled latin small letter r%>\u24e1",
+ "circled latin small letter s%>\u24e2",
+ "circled latin small letter t%>\u24e3",
+ "circled latin small letter u%>\u24e4",
+ "circled latin small letter v%>\u24e5",
+ "circled latin small letter w%>\u24e6",
+ "circled latin small letter x%>\u24e7",
+ "circled latin small letter y%>\u24e8",
+ "circled latin small letter z%>\u24e9",
+ "circled minus%>\u2296",
+ "circled number eighteen%>\u2471",
+ "circled number eleven%>\u246a",
+ "circled number fifteen%>\u246e",
+ "circled number fourteen%>\u246d",
+ "circled number nineteen%>\u2472",
+ "circled number seventeen%>\u2470",
+ "circled number sixteen%>\u246f",
+ "circled number ten%>\u2469",
+ "circled number thirteen%>\u246c",
+ "circled number twelve%>\u246b",
+ "circled number twenty%>\u2473",
+ "circled open center eight pointed star%>\u2742",
+ "circled plus%>\u2295",
+ "circled postal mark%>\u3036",
+ "circled ring operator%>\u229a",
+ "circled sans serif digit eight%>\u2787",
+ "circled sans serif digit five%>\u2784",
+ "circled sans serif digit four%>\u2783",
+ "circled sans serif digit nine%>\u2788",
+ "circled sans serif digit one%>\u2780",
+ "circled sans serif digit seven%>\u2786",
+ "circled sans serif digit six%>\u2785",
+ "circled sans serif digit three%>\u2782",
+ "circled sans serif digit two%>\u2781",
+ "circled sans serif number ten%>\u2789",
+ "circled times%>\u2297",
+ "circled white star%>\u272a",
+ "clear key%>\u2327",
+ "clockwise contour integral%>\u2232",
+ "clockwise integral%>\u2231",
+ "clockwise open circle arrow%>\u21bb",
+ "clockwise top semicircle arrow%>\u21b7",
+ "closing angle bracket%>\u3009",
+ "closing black lenticular bracket%>\u3011",
+ "closing corner bracket%>\u300d",
+ "closing double angle bracket%>\u300b",
+ "closing tortoise shell bracket%>\u3015",
+ "closing white corner bracket%>\u300f",
+ "closing white lenticular bracket%>\u3017",
+ "closing white square bracket%>\u301b",
+ "closing white tortoise shell bracket%>\u3019",
+ "cloud%>\u2601",
+ "colon equal%>\u2254",
+ "colon sign%>\u20a1",
+ "comet%>\u2604",
+ "command key%>\u2318",
+ "complement%>\u2201",
+ "conjunction%>\u260c",
+ "contains as member%>\u220b",
+ "contains as normal subgroup or equal to%>\u22b5",
+ "contains as normal subgroup%>\u22b3",
+ "contour integral%>\u222e",
+ "copyright sign%>\u00a9",
+ "corresponds to%>\u2258",
+ "cross of jerusalem%>\u2629",
+ "cross of lorraine%>\u2628",
+ "cruzeiro sign%>\u20a2",
+ "cube root%>\u221b",
+ "curly logical and%>\u22cf",
+ "curly logical or%>\u22ce",
+ "currency sign%>\u00a4",
+ "curved stem paragraph sign ornament%>\u2761",
+ "dagger%>\u2020",
+ "dark shade%>\u2593",
+ "dashed triangle-headed right arrow%>\u279f",
+ "degree sign%>\u00b0",
+ "degrees centigrade%>\u2103",
+ "degrees fahrenheit%>\u2109",
+ "degrees kelvin%>\u212a",
+ "delete to the left key%>\u232b",
+ "delete to the right key%>\u2326",
+ "delta equal to%>\u225c",
+ "descending node%>\u260b",
+ "diamond operator%>\u22c4",
+ "difference between%>\u224f",
+ "digit eight period%>\u248f",
+ "digit five period%>\u248c",
+ "digit four period%>\u248b",
+ "digit nine period%>\u2490",
+ "digit one period%>\u2488",
+ "digit seven period%>\u248e",
+ "digit six period%>\u248d",
+ "digit three period%>\u248a",
+ "digit two period%>\u2489",
+ "ditto mark%>\u3003",
+ "divides%>\u2223",
+ "division sign%>\u00f7",
+ "division slash%>\u2215",
+ "division times%>\u22c7",
+ "does not contain as member%>\u220c",
+ "does not contain as normal subgroup or equal%>\u22ed",
+ "does not contain as normal subgroup%>\u22eb",
+ "does not divide%>\u2224",
+ "does not force%>\u22ae",
+ "does not precede or equal%>\u22e0",
+ "does not precede%>\u2280",
+ "does not prove%>\u22ac",
+ "does not succeed or equal%>\u22e1",
+ "does not succeed%>\u2281",
+ "dot minus%>\u2238",
+ "dot operator%>\u22c5",
+ "dot plus%>\u2214",
+ "dotted circle%>\u25cc",
+ "double comma quotation mark%>\u201d",
+ "double dagger%>\u2021",
+ "double exclamation mark%>\u203c",
+ "double hyphen%>\u203f",
+ "double integral%>\u222c",
+ "double intersection%>\u22d2",
+ "double prime quotation mark%>\u301e",
+ "double prime%>\u2033",
+ "double reversed comma quotation mark%>\u201f",
+ "double subset%>\u22d0",
+ "double superset%>\u22d1",
+ "double turned comma quotation mark%>\u201c",
+ "double union%>\u22d3",
+ "double vertical bar double right turnstile%>\u22ab",
+ "double vertical bar%>\u2016",
+ "double-struck c%>\u2102",
+ "double-struck h%>\u210d",
+ "double-struck n%>\u2115",
+ "double-struck p%>\u2119",
+ "double-struck q%>\u211a",
+ "double-struck r%>\u211d",
+ "double-struck z%>\u2124",
+ "down arrow from bar%>\u21a7",
+ "down arrow with corner left%>\u21b5",
+ "down arrow with double stroke%>\u21df",
+ "down arrow with tip left%>\u21b2",
+ "down arrow with tip right%>\u21b3",
+ "down arrow%>\u2193",
+ "down arrowhead%>\u2304",
+ "down dashed arrow%>\u21e3",
+ "down double arrow%>\u21d3",
+ "down harpoon with barb left%>\u21c3",
+ "down harpoon with barb right%>\u21c2",
+ "down paired arrows%>\u21ca",
+ "down right diagonal ellipsis%>\u22f1",
+ "down tack%>\u22a4",
+ "down two headed arrow%>\u21a1",
+ "down zigzag arrow%>\u21af",
+ "drafting point right arrow%>\u279b",
+ "earth%>\u2641",
+ "eight petalled outlined black florette%>\u2741",
+ "eight pointed black star%>\u2734",
+ "eight pointed pinwheel star%>\u2735",
+ "eight pointed rectilinear black star%>\u2737",
+ "eight spoked asterisk%>\u2733",
+ "eight teardrop-spoked propeller asterisk%>\u274a",
+ "eighth note%>\u266a",
+ "element of%>\u2208",
+ "small element of%>\u220a",
+ "element precedes under relation%>\u22b0",
+ "element succeeds under relation%>\u22b1",
+ "em dash%>\u2014",
+ "em quad%>\u2001",
+ "em space%>\u2003",
+ "empty set%>\u2205",
+ "en dash%>\u2013",
+ "en quad%>\u2000",
+ "en space%>\u2002",
+ "enclosing circle slash%>\u20e0",
+ "enclosing circle%>\u20dd",
+ "enclosing diamond%>\u20df",
+ "enclosing square%>\u20de",
+ "end of proof%>\u220e",
+ "enter key%>\u2324",
+ "envelope%>\u2709",
+ "equal and parallel to%>\u22d5",
+ "equal colon%>\u2255",
+ "equal to by definition%>\u225d",
+ "equal to or greater than%>\u22dd",
+ "equal to or less than%>\u22dc",
+ "equal to or precedes%>\u22de",
+ "equal to or succeeds%>\u22df",
+ "equiangular to%>\u225a",
+ "equivalent to%>\u224d",
+ "estimates%>\u2259",
+ "eulers%>\u2107",
+ "euro-currency sign%>\u20a0",
+ "european standard packaging%>\u212e",
+ "excess%>\u2239",
+ "female sign%>\u2640",
+ "feminine ordinal indicator%>\u00aa",
+ "figure dash%>\u2012",
+ "figure space%>\u2007",
+ "first quarter moon%>\u263d",
+ "first transfinite cardinal%>\u2135",
+ "fisheye%>\u25c9",
+ "flat%>\u266d",
+ "floral heart%>\u2766",
+ "for all%>\u2200",
+ "forces%>\u22a9",
+ "forms double down and horizontal%>\u2566",
+ "forms double down and left%>\u2557",
+ "forms double down and right%>\u2554",
+ "forms double horizontal%>\u2550",
+ "forms double up and horizontal%>\u2569",
+ "forms double up and left%>\u255d",
+ "forms double up and right%>\u255a",
+ "forms double vertical and horizontal%>\u256c",
+ "forms double vertical and left%>\u2563",
+ "forms double vertical and right%>\u2560",
+ "forms double vertical%>\u2551",
+ "forms down double and horizontal single%>\u2565",
+ "forms down double and left single%>\u2556",
+ "forms down double and right single%>\u2553",
+ "forms down heavy and horizontal light%>\u2530",
+ "forms down heavy and left light%>\u2512",
+ "forms down heavy and left up light%>\u2527",
+ "forms down heavy and right light%>\u250e",
+ "forms down heavy and right up light%>\u251f",
+ "forms down heavy and up horizontal light%>\u2541",
+ "forms down light and horizontal heavy%>\u252f",
+ "forms down light and left heavy%>\u2511",
+ "forms down light and left up heavy%>\u2529",
+ "forms down light and right heavy%>\u250d",
+ "forms down light and right up heavy%>\u2521",
+ "forms down light and up horizontal heavy%>\u2547",
+ "forms down single and horizontal double%>\u2564",
+ "forms down single and left double%>\u2555",
+ "forms down single and right double%>\u2552",
+ "forms heavy double dash horizontal%>\u254d",
+ "forms heavy double dash vertical%>\u254f",
+ "forms heavy down and horizontal%>\u2533",
+ "forms heavy down and left%>\u2513",
+ "forms heavy down and right%>\u250f",
+ "forms heavy down%>\u257b",
+ "forms heavy horizontal%>\u2501",
+ "forms heavy left and light right%>\u257e",
+ "forms heavy left%>\u2578",
+ "forms heavy quadruple dash horizontal%>\u2509",
+ "forms heavy quadruple dash vertical%>\u250b",
+ "forms heavy right%>\u257a",
+ "forms heavy triple dash horizontal%>\u2505",
+ "forms heavy triple dash vertical%>\u2507",
+ "forms heavy up and horizontal%>\u253b",
+ "forms heavy up and left%>\u251b",
+ "forms heavy up and light down%>\u257f",
+ "forms heavy up and right%>\u2517",
+ "forms heavy up%>\u2579",
+ "forms heavy vertical and horizontal%>\u254b",
+ "forms heavy vertical and left%>\u252b",
+ "forms heavy vertical and right%>\u2523",
+ "forms heavy vertical%>\u2503",
+ "forms left down heavy and right up light%>\u2545",
+ "forms left heavy and right down light%>\u252d",
+ "forms left heavy and right up light%>\u2535",
+ "forms left heavy and right vertical light%>\u253d",
+ "forms left lighand right down heavy%>\u2532",
+ "forms left light and right down heavy%>\u2532",
+ "forms left light and right up heavy%>\u253a",
+ "forms left light and right vertical heavy%>\u254a",
+ "forms left up heavy and right down light%>\u2543",
+ "forms light arc down and left%>\u256e",
+ "forms light arc down and right%>\u256d",
+ "forms light arc up and left%>\u256f",
+ "forms light arc up and right%>\u2570",
+ "forms light diagonal cross%>\u2573",
+ "forms light diagonal upper left to lower right%>\u2572",
+ "forms light diagonal upper right to lower left%>\u2571",
+ "forms light double dash horizontal%>\u254c",
+ "forms light double dash vertical%>\u254e",
+ "forms light down and horizontal%>\u252c",
+ "forms light down and left%>\u2510",
+ "forms light down and right%>\u250c",
+ "forms light down%>\u2577",
+ "forms light horizontal%>\u2500",
+ "forms light left and heavy right%>\u257c",
+ "forms light left%>\u2574",
+ "forms light quadruple dash horizontal%>\u2508",
+ "forms light quadruple dash vertical%>\u250a",
+ "forms light right%>\u2576",
+ "forms light triple dash horizontal%>\u2504",
+ "forms light triple dash vertical%>\u2506",
+ "forms light up and heavy down%>\u257d",
+ "forms light up and horizontal%>\u2534",
+ "forms light up and left%>\u2518",
+ "forms light up and right%>\u2514",
+ "forms light up%>\u2575",
+ "forms light vertical and horizontal%>\u253c",
+ "forms light vertical and left%>\u2524",
+ "forms light vertical and right%>\u251c",
+ "forms light vertical%>\u2502",
+ "forms right down heavy and left up light%>\u2546",
+ "forms right heavy and left down light%>\u252e",
+ "forms right heavy and left up light%>\u2536",
+ "forms right heavy and left vertical light%>\u253e",
+ "forms right light and left down heavy%>\u2531",
+ "forms right light and left up heavy%>\u2539",
+ "forms right light and left vertical heavy%>\u2549",
+ "forms right up heavy and left down light%>\u2544",
+ "forms up double and horizontal single%>\u2568",
+ "forms up double and left single%>\u255c",
+ "forms up double and right single%>\u2559",
+ "forms up heavy and down horizontal light%>\u2540",
+ "forms up heavy and horizontal light%>\u2538",
+ "forms up heavy and left down light%>\u2526",
+ "forms up heavy and left light%>\u251a",
+ "forms up heavy and right down light%>\u251e",
+ "forms up heavy and right light%>\u2516",
+ "forms up light and down horizontal heavy%>\u2548",
+ "forms up light and horizontal heavy%>\u2537",
+ "forms up light and left down heavy%>\u252a",
+ "forms up light and left heavy%>\u2519",
+ "forms up light and right down heavy%>\u2522",
+ "forms up light and right heavy%>\u2515",
+ "forms up single and horizontal double%>\u2567",
+ "forms up single and left double%>\u255b",
+ "forms up single and right double%>\u2558",
+ "forms vertical double and horizontal single%>\u256b",
+ "forms vertical double and left single%>\u2562",
+ "forms vertical double and right single%>\u255f",
+ "forms vertical heavy and horizontal light%>\u2542",
+ "forms vertical heavy and left light%>\u2528",
+ "forms vertical heavy and right light%>\u2520",
+ "forms vertical light and horizontal heavy%>\u253f",
+ "forms vertical light and left heavy%>\u2525",
+ "forms vertical light and right heavy%>\u251d",
+ "forms vertical single and horizontal double%>\u256a",
+ "forms vertical single and left double%>\u2561",
+ "forms vertical single and right double%>\u255e",
+ "four balloon-spoked asterisk%>\u2723",
+ "four club-spoked asterisk%>\u2725",
+ "four teardrop-spoked asterisk%>\u2722",
+ "four-per-em space%>\u2005",
+ "fourth root%>\u221c",
+ "fourth transfinite cardinal%>\u2138",
+ "fraction five eighths%>\u215d",
+ "fraction five sixths%>\u215a",
+ "fraction four fifths%>\u2158",
+ "fraction numerator one%>\u215f",
+ "fraction one eighth%>\u215b",
+ "fraction one fifth%>\u2155",
+ "fraction one half%>\u00bd",
+ "fraction one quarter%>\u00bc",
+ "fraction one sixth%>\u2159",
+ "fraction one third%>\u2153",
+ "fraction seven eighths%>\u215e",
+ "fraction slash%>\u2044",
+ "fraction three eighths%>\u215c",
+ "fraction three fifths%>\u2157",
+ "fraction three quarters%>\u00be",
+ "fraction two fifths%>\u2156",
+ "fraction two thirds%>\u2154",
+ "french franc sign%>\u20a3",
+ "front-tilted shadowed white right arrow%>\u27ac",
+ "frown%>\u2322",
+ "full block%>\u2588",
+ "gemini%>\u264a",
+ "geometric proportion%>\u223a",
+ "geometrically equal to%>\u2251",
+ "geometrically equivalent to%>\u224e",
+ "geta mark%>\u3013",
+ "graphic for acknowledge%>\u2406",
+ "graphic for backspace%>\u2408",
+ "graphic for bell%>\u2407",
+ "graphic for cancel%>\u2418",
+ "graphic for carriage return%>\u240d",
+ "graphic for data link escape%>\u2410",
+ "graphic for delete%>\u2421",
+ "graphic for device control four%>\u2414",
+ "graphic for device control one%>\u2411",
+ "graphic for device control three%>\u2413",
+ "graphic for device control two%>\u2412",
+ "graphic for end of medium%>\u2419",
+ "graphic for end of text%>\u2403",
+ "graphic for end of transmission block%>\u2417",
+ "graphic for end of transmission%>\u2404",
+ "graphic for enquiry%>\u2405",
+ "graphic for escape%>\u241b",
+ "graphic for file separator%>\u241c",
+ "graphic for form feed%>\u240c",
+ "graphic for group separator%>\u241d",
+ "graphic for horizontal tabulation%>\u2409",
+ "graphic for line feed%>\u240a",
+ "graphic for negative acknowledge%>\u2415",
+ "graphic for newline%>\u2424",
+ "graphic for null%>\u2400",
+ "graphic for record separator%>\u241e",
+ "graphic for shift in%>\u240f",
+ "graphic for shift out%>\u240e",
+ "graphic for space%>\u2420",
+ "graphic for start of heading%>\u2401",
+ "graphic for start of text%>\u2402",
+ "graphic for substitute%>\u241a",
+ "graphic for synchronous idle%>\u2416",
+ "graphic for unit separator%>\u241f",
+ "graphic for vertical tabulation%>\u240b",
+ "greater than but not equal to%>\u2269",
+ "greater than but not equivalent to%>\u22e7",
+ "greater than equal to or less than%>\u22db",
+ "greater than or equal to%>\u2265",
+ "greater than or equivalent to%>\u2273",
+ "greater than or less than%>\u2277",
+ "greater than over equal to%>\u2267",
+ "greater than with dot%>\u22d7",
+ "hair space%>\u200a",
+ "hammer and sickle%>\u262d",
+ "hangul double dot tone mark%>\u302f",
+ "hangul single dot tone mark%>\u302e",
+ "hangzhou numeral eight%>\u3028",
+ "hangzhou numeral five%>\u3025",
+ "hangzhou numeral four%>\u3024",
+ "hangzhou numeral nine%>\u3029",
+ "hangzhou numeral one%>\u3021",
+ "hangzhou numeral seven%>\u3027",
+ "hangzhou numeral six%>\u3026",
+ "hangzhou numeral three%>\u3023",
+ "hangzhou numeral two%>\u3022",
+ "heavy asterisk%>\u2731",
+ "heavy black curved down and right arrow%>\u27a5",
+ "heavy black curved up and right arrow%>\u27a6",
+ "heavy black heart%>\u2764",
+ "heavy black-feathered lower right arrow%>\u27b7",
+ "heavy black-feathered right arrow%>\u27b8",
+ "heavy black-feathered upper right arrow%>\u27b9",
+ "heavy check mark%>\u2714",
+ "heavy chevron snowflake%>\u2746",
+ "heavy concave-pointed black right arrow%>\u27a8",
+ "heavy dashed triangle-headed right arrow%>\u27a0",
+ "heavy double comma quotation mark ornament%>\u275e",
+ "heavy double turned comma quotation mark ornament%>\u275d",
+ "heavy eight pointed rectilinear black star%>\u2738",
+ "heavy eight teardrop-spoked propeller asterisk%>\u274b",
+ "heavy exclamation mark ornament%>\u2762",
+ "heavy four balloon-spoked asterisk%>\u2724",
+ "heavy greek cross%>\u271a",
+ "heavy heart exclamation mark ornament%>\u2763",
+ "heavy lower right arrow%>\u2798",
+ "heavy lower right-shadowed white right arrow%>\u27ad",
+ "heavy multiplication x%>\u2716",
+ "heavy open center cross%>\u271c",
+ "heavy outlined black star%>\u272e",
+ "heavy right arrow%>\u2799",
+ "heavy round-tipped right arrow%>\u279c",
+ "heavy single comma quotation mark ornament%>\u275c",
+ "heavy single turned comma quotation mark ornament%>\u275b",
+ "heavy sparkle%>\u2748",
+ "heavy teardrop-shanked right arrow%>\u27bb",
+ "heavy teardrop-spoked asterisk%>\u273d",
+ "heavy teardrop-spoked pinwheel asterisk%>\u2743",
+ "heavy triangle-headed right arrow%>\u279e",
+ "heavy upper right arrow%>\u279a",
+ "heavy upper right-shadowed white right arrow%>\u27ae",
+ "heavy vertical bar%>\u275a",
+ "heavy wedge-tailed right arrow%>\u27bd",
+ "heavy wide-headed right arrow%>\u2794",
+ "hermitian conjugate matrix%>\u22b9",
+ "homothetic%>\u223b",
+ "horizontal ellipsis%>\u2026",
+ "hot springs%>\u2668",
+ "hourglass%>\u231b",
+ "house%>\u2302",
+ "hyphen bullet%>\u2043",
+ "hyphen%>\u2010",
+ "hyphenation point%>\u2027",
+ "identical to%>\u2261",
+ "ideographic closing mark%>\u3006",
+ "ideographic comma%>\u3001",
+ "ideographic departing tone mark%>\u302c",
+ "ideographic ditto mark%>\u3004",
+ "ideographic entering tone mark%>\u302d",
+ "ideographic half fill space%>\u303f",
+ "ideographic iteration mark%>\u3005",
+ "ideographic level tone mark%>\u302a",
+ "ideographic number zero%>\u3007",
+ "ideographic period%>\u3002",
+ "ideographic rising tone mark%>\u302b",
+ "ideographic space%>\u3000",
+ "image of or approximately equal to%>\u2253",
+ "image of%>\u22b7",
+ "increment%>\u2206",
+ "infinity%>\u221e",
+ "integral%>\u222b",
+ "intercalate%>\u22ba",
+ "interrobang%>\u203d",
+ "intersection%>\u2229",
+ "inverse bullet%>\u25d8",
+ "inverse circled digit eight%>\u277d",
+ "inverse circled digit five%>\u277a",
+ "inverse circled digit four%>\u2779",
+ "inverse circled digit nine%>\u277e",
+ "inverse circled digit one%>\u2776",
+ "inverse circled digit seven%>\u277c",
+ "inverse circled digit six%>\u277b",
+ "inverse circled digit three%>\u2778",
+ "inverse circled digit two%>\u2777",
+ "inverse circled number ten%>\u277f",
+ "inverse circled sans serif digit eight%>\u2791",
+ "inverse circled sans serif digit five%>\u278e",
+ "inverse circled sans serif digit four%>\u278d",
+ "inverse circled sans serif digit nine%>\u2792",
+ "inverse circled sans serif digit one%>\u278a",
+ "inverse circled sans serif digit seven%>\u2790",
+ "inverse circled sans serif digit six%>\u278f",
+ "inverse circled sans serif digit three%>\u278c",
+ "inverse circled sans serif digit two%>\u278b",
+ "inverse circled sans serif number ten%>\u2793",
+ "inverse white circle%>\u25d9",
+ "inverted exclamation mark%>\u00a1",
+ "inverted lazy s%>\u223e",
+ "inverted question mark%>\u00bf",
+ "jupiter%>\u2643",
+ "ket%>\u232a",
+ "keyboard%>\u2328",
+ "l b bar symbol%>\u2114",
+ "last quarter moon%>\u263e",
+ "latin cross%>\u271d",
+ "left arrow from bar%>\u21a4",
+ "left arrow over right arrow%>\u21c6",
+ "left arrow to bar over right arrow to bar%>\u21b9",
+ "left arrow to bar%>\u21e4",
+ "left arrow with hook%>\u21a9",
+ "left arrow with loop%>\u21ab",
+ "left arrow with stroke%>\u219a",
+ "left arrow with tail%>\u21a2",
+ "left arrow%>\u2190",
+ "left ceiling%>\u2308",
+ "left dashed arrow%>\u21e0",
+ "left double arrow with stroke%>\u21cd",
+ "left double arrow%>\u21d0",
+ "left five eighths block%>\u258b",
+ "left floor%>\u230a",
+ "left half black circle%>\u25d6",
+ "left half block%>\u258c",
+ "left harpoon over right harpoon%>\u21cb",
+ "left harpoon with barb down%>\u21bd",
+ "left harpoon with barb up%>\u21bc",
+ "left normal factor semidirect product%>\u22c9",
+ "left one eighth block%>\u258f",
+ "left one quarter block%>\u258e",
+ "left paired arrows%>\u21c7",
+ "left pointing guillemet%>\u00ab",
+ "left pointing single guillemet%>\u2039",
+ "left right arrow with stroke%>\u21ae",
+ "left right arrow%>\u2194",
+ "left right double arrow with stroke%>\u21ce",
+ "left right double arrow%>\u21d4",
+ "left right wave arrow%>\u21ad",
+ "left semidirect product%>\u22cb",
+ "left seven eighths block%>\u2589",
+ "left squiggle arrow%>\u21dc",
+ "left tack%>\u22a3",
+ "left three eighths block%>\u258d",
+ "left three quarter block%>\u258a",
+ "left triple arrow%>\u21da",
+ "left two headed arrow%>\u219e",
+ "left wave arrow%>\u219c",
+ "left-shaded white right arrow%>\u27aa",
+ "left-to-right embedding%>\u202a",
+ "left-to-right mark%>\u200e",
+ "left-to-right override%>\u202d",
+ "leo%>\u264c",
+ "less than but not equal to%>\u2268",
+ "less than but not equivalent to%>\u22e6",
+ "less than equal to or greater than%>\u22da",
+ "less than or equal to%>\u2264",
+ "less than or equivalent to%>\u2272",
+ "less than or greater than%>\u2276",
+ "less than over equal to%>\u2266",
+ "less than with dot%>\u22d6",
+ "libra%>\u264e",
+ "light shade%>\u2591",
+ "light vertical bar%>\u2758",
+ "lightning%>\u2607",
+ "line separator%>\u2028",
+ "lira sign%>\u20a4",
+ "logical and%>\u2227",
+ "logical or%>\u2228",
+ "low double comma quotation mark%>\u201e",
+ "low double prime quotation mark%>\u301f",
+ "low single comma quotation mark%>\u201a",
+ "lower blade scissors%>\u2703",
+ "lower five eighths block%>\u2585",
+ "lower half block%>\u2584",
+ "lower half circle%>\u25e1",
+ "lower half inverse white circle%>\u25db",
+ "lower left arrow%>\u2199",
+ "lower left double arrow%>\u21d9",
+ "lower left quadrant circular arc%>\u25df",
+ "lower one eighth block%>\u2581",
+ "lower one quarter block%>\u2582",
+ "lower right arrow%>\u2198",
+ "lower right double arrow%>\u21d8",
+ "lower right drop-shadowed white square%>\u274f",
+ "lower right pencil%>\u270e",
+ "lower right quadrant circular arc%>\u25de",
+ "lower right shadowed white square%>\u2751",
+ "lower seven eighths block%>\u2587",
+ "lower three eighths block%>\u2583",
+ "lower three quarter block%>\u2586",
+ "lozenge%>\u25ca",
+ "male sign%>\u2642",
+ "maltese cross%>\u2720",
+ "masculine ordinal indicator%>\u00ba",
+ "measured angle%>\u2221",
+ "measured by%>\u225e",
+ "medium shade%>\u2592",
+ "medium vertical bar%>\u2759",
+ "mercury%>\u263f",
+ "mho%>\u2127",
+ "micro sign%>\u00b5",
+ "middle dot%>\u00b7",
+ "midline horizontal ellipsis%>\u22ef",
+ "mill sign%>\u20a5",
+ "minus sign%>\u2212",
+ "minus tilde%>\u2242",
+ "minus-or-plus sign%>\u2213",
+ "models%>\u22a7",
+ "modifier letter acute%>\u02ca",
+ "modifier letter apostrophe%>\u02bc",
+ "modifier letter centered left half ring%>\u02d3",
+ "modifier letter centered right half ring%>\u02d2",
+ "modifier letter circumflex%>\u02c6",
+ "modifier letter double prime%>\u02ba",
+ "modifier letter down arrowhead%>\u02c5",
+ "modifier letter down tack%>\u02d5",
+ "modifier letter extra-high tone bar%>\u02e5",
+ "modifier letter extra-low tone bar%>\u02e9",
+ "modifier letter glottal stop%>\u02c0",
+ "modifier letter grave%>\u02cb",
+ "modifier letter hacek%>\u02c7",
+ "modifier letter half triangular colon%>\u02d1",
+ "modifier letter high tone bar%>\u02e6",
+ "modifier letter left arrowhead%>\u02c2",
+ "modifier letter left half ring%>\u02bf",
+ "modifier letter low acute%>\u02cf",
+ "modifier letter low grave%>\u02ce",
+ "modifier letter low macron%>\u02cd",
+ "modifier letter low tone bar%>\u02e8",
+ "modifier letter low vertical line%>\u02cc",
+ "modifier letter macron%>\u02c9",
+ "modifier letter mid tone bar%>\u02e7",
+ "modifier letter minus sign%>\u02d7",
+ "modifier letter plus sign%>\u02d6",
+ "modifier letter prime%>\u02b9",
+ "modifier letter reversed comma%>\u02bd",
+ "modifier letter reversed glottal stop%>\u02c1",
+ "modifier letter rhotic hook%>\u02de",
+ "modifier letter right arrowhead%>\u02c3",
+ "modifier letter right half ring%>\u02be",
+ "modifier letter small capital inverted r%>\u02b6",
+ "modifier letter small gamma%>\u02e0",
+ "modifier letter small h hook%>\u02b1",
+ "modifier letter small h%>\u02b0",
+ "modifier letter small j%>\u02b2",
+ "modifier letter small l%>\u02e1",
+ "modifier letter small r%>\u02b3",
+ "modifier letter small reversed glottal stop%>\u02e4",
+ "modifier letter small s%>\u02e2",
+ "modifier letter small turned r hook%>\u02b5",
+ "modifier letter small turned r%>\u02b4",
+ "modifier letter small w%>\u02b7",
+ "modifier letter small x%>\u02e3",
+ "modifier letter small y%>\u02b8",
+ "modifier letter triangular colon%>\u02d0",
+ "modifier letter turned comma%>\u02bb",
+ "modifier letter up arrowhead%>\u02c4",
+ "modifier letter up tack%>\u02d4",
+ "modifier letter vertical line%>\u02c8",
+ "much greater than%>\u226b",
+ "much less than%>\u226a",
+ "multimap%>\u22b8",
+ "multiplication sign%>\u00d7",
+ "multiplication x%>\u2715",
+ "multiset multiplication%>\u228d",
+ "multiset union%>\u228e",
+ "multiset%>\u228c",
+ "n-ary coproduct%>\u2210",
+ "n-ary intersection%>\u22c2",
+ "n-ary logical and%>\u22c0",
+ "n-ary logical or%>\u22c1",
+ "n-ary product%>\u220f",
+ "n-ary summation%>\u2211",
+ "n-ary union%>\u22c3",
+ "nabla%>\u2207",
+ "naira sign%>\u20a6",
+ "nand%>\u22bc",
+ "natural%>\u266e",
+ "negated double vertical bar double right turnstile%>\u22af",
+ "neither a subset of nor equal to%>\u2288",
+ "neither a superset of nor equal to%>\u2289",
+ "neither approximately nor actually equal to%>\u2247",
+ "neither greater than nor equal to%>\u2271",
+ "neither greater than nor equivalent to%>\u2275",
+ "neither greater than nor less than%>\u2279",
+ "neither less than nor equal to%>\u2270",
+ "neither less than nor equivalent to%>\u2274",
+ "neither less than nor greater than%>\u2278",
+ "neptune%>\u2646",
+ "new sheqel sign%>\u20aa",
+ "non-breaking hyphen%>\u2011",
+ "non-breaking space%>\u00a0",
+ "non-spacing acute below%>\u0317",
+ "non-spacing acute tone mark%>\u0348",
+ "non-spacing acute%>\u0301",
+ "non-spacing anticlockwise arrow above%>\u20d4",
+ "non-spacing anticlockwise ring overlay%>\u20da",
+ "non-spacing breve below%>\u032e",
+ "non-spacing breve%>\u0306",
+ "non-spacing bridge below%>\u032a",
+ "non-spacing candrabindu%>\u0310",
+ "non-spacing cedilla%>\u0327",
+ "non-spacing centerline overscore%>\u0341",
+ "non-spacing centerline underscore%>\u0345",
+ "non-spacing circumflex below%>\u032d",
+ "non-spacing circumflex%>\u0302",
+ "non-spacing clockwise arrow above%>\u20d5",
+ "non-spacing clockwise ring overlay%>\u20d9",
+ "non-spacing comma above right%>\u0315",
+ "non-spacing comma above%>\u0313",
+ "non-spacing comma below%>\u0326",
+ "non-spacing dashed overscore%>\u0340",
+ "non-spacing dashed underscore%>\u0344",
+ "non-spacing diaeresis%>\u0308",
+ "non-spacing dot above%>\u0307",
+ "non-spacing dot below%>\u0323",
+ "non-spacing double acute%>\u030b",
+ "non-spacing double dot below%>\u0324",
+ "non-spacing double grave%>\u030f",
+ "non-spacing double overscore%>\u033f",
+ "non-spacing double underscore%>\u0333",
+ "non-spacing double vertical line above%>\u030e",
+ "non-spacing double wavy overscore%>\u0343",
+ "non-spacing down tack below%>\u031e",
+ "non-spacing four dots above%>\u20dc",
+ "non-spacing grave below%>\u0316",
+ "non-spacing grave tone mark%>\u0347",
+ "non-spacing grave%>\u0300",
+ "non-spacing hacek below%>\u032c",
+ "non-spacing hacek%>\u030c",
+ "non-spacing hook above%>\u0309",
+ "non-spacing horn%>\u031b",
+ "non-spacing inverted breve below%>\u032f",
+ "non-spacing inverted breve%>\u0311",
+ "non-spacing inverted bridge below%>\u033a",
+ "non-spacing inverted double arch below%>\u032b",
+ "non-spacing left angle above%>\u031a",
+ "non-spacing left arrow above%>\u20d6",
+ "non-spacing left half ring below%>\u031c",
+ "non-spacing left harpoon above%>\u20d0",
+ "non-spacing left right arrow above%>\u20e1",
+ "non-spacing left tack below%>\u0318",
+ "non-spacing long bar overlay%>\u0336",
+ "non-spacing long slash overlay%>\u0338",
+ "non-spacing long vertical bar overlay%>\u20d2",
+ "non-spacing macron below%>\u0331",
+ "non-spacing macron%>\u0304",
+ "non-spacing minus sign below%>\u0320",
+ "non-spacing ogonek%>\u0328",
+ "non-spacing overscore%>\u0305",
+ "non-spacing palatalized hook below%>\u0321",
+ "non-spacing plus sign below%>\u031f",
+ "non-spacing retroflex hook below%>\u0322",
+ "non-spacing reversed comma above%>\u0314",
+ "non-spacing right arrow above%>\u20d7",
+ "non-spacing right half ring below%>\u0339",
+ "non-spacing right harpoon above%>\u20d1",
+ "non-spacing right tack below%>\u0319",
+ "non-spacing ring above%>\u030a",
+ "non-spacing ring below%>\u0325",
+ "non-spacing ring overlay%>\u20d8",
+ "non-spacing seagull below%>\u033c",
+ "non-spacing short bar overlay%>\u0335",
+ "non-spacing short slash overlay%>\u0337",
+ "non-spacing short vertical bar overlay%>\u20d3",
+ "non-spacing square below%>\u033b",
+ "non-spacing three dots above%>\u20db",
+ "non-spacing tilde below%>\u0330",
+ "non-spacing tilde overlay%>\u0334",
+ "non-spacing tilde%>\u0303",
+ "non-spacing turned comma above%>\u0312",
+ "non-spacing underscore%>\u0332",
+ "non-spacing up tack below%>\u031d",
+ "non-spacing vertical line above%>\u030d",
+ "non-spacing vertical line below%>\u0329",
+ "non-spacing vertical tilde%>\u033e",
+ "non-spacing wavy overscore%>\u0342",
+ "non-spacing wavy underscore%>\u0346",
+ "non-spacing x above%>\u033d",
+ "nor%>\u22bd",
+ "normal subgroup of or equal to%>\u22b4",
+ "normal subgroup of%>\u22b2",
+ "not a subset of%>\u2284",
+ "not a superset of%>\u2285",
+ "not almost equal to%>\u2249",
+ "not an element of%>\u2209",
+ "not asymptotically equal to%>\u2244",
+ "not equal to%>\u2260",
+ "not equivalent to%>\u226d",
+ "not greater than%>\u226f",
+ "not identical to%>\u2262",
+ "not less than%>\u226e",
+ "not normal subgroup of or equal to%>\u22ec",
+ "not normal subgroup of%>\u22ea",
+ "not parallel to%>\u2226",
+ "not sign%>\u00ac",
+ "not square image of or equal to%>\u22e2",
+ "not square original of or equal to%>\u22e3",
+ "not tilde%>\u2241",
+ "not true%>\u22ad",
+ "notched lower right-shadowed white right arrow%>\u27af",
+ "notched upper right-shadowed white right arrow%>\u27b1",
+ "number eighteen period%>\u2499",
+ "number eleven period%>\u2492",
+ "number fifteen period%>\u2496",
+ "number fourteen period%>\u2495",
+ "number nineteen period%>\u249a",
+ "number seventeen period%>\u2498",
+ "number sixteen period%>\u2497",
+ "number ten period%>\u2491",
+ "number thirteen period%>\u2494",
+ "number twelve period%>\u2493",
+ "number twenty period%>\u249b",
+ "numero%>\u2116",
+ "ocr amount of check%>\u2447",
+ "ocr belt buckle%>\u2444",
+ "ocr bow tie%>\u2445",
+ "ocr branch bank identification%>\u2446",
+ "ocr chair%>\u2441",
+ "ocr customer account number%>\u2449",
+ "ocr dash%>\u2448",
+ "ocr double backslash%>\u244a",
+ "ocr fork%>\u2442",
+ "ocr hook%>\u2440",
+ "ocr inverted fork%>\u2443",
+ "ohm%>\u2126",
+ "one dot leader%>\u2024",
+ "open box%>\u2423",
+ "open center asterisk%>\u2732",
+ "open center black star%>\u272b",
+ "open center cross%>\u271b",
+ "open center teardrop-spoked asterisk%>\u273c",
+ "open-outlined right arrow%>\u27be",
+ "opening angle bracket%>\u3008",
+ "opening black lenticular bracket%>\u3010",
+ "opening corner bracket%>\u300c",
+ "opening double angle bracket%>\u300a",
+ "opening tortoise shell bracket%>\u3014",
+ "opening white corner bracket%>\u300e",
+ "opening white lenticular bracket%>\u3016",
+ "opening white square bracket%>\u301a",
+ "opening white tortoise shell bracket%>\u3018",
+ "opposition%>\u260d",
+ "option key%>\u2325",
+ "original of%>\u22b6",
+ "orthodox cross%>\u2626",
+ "ounce%>\u2125",
+ "outlined black star%>\u272d",
+ "outlined greek cross%>\u2719",
+ "outlined latin cross%>\u271f",
+ "paragraph separator%>\u2029",
+ "paragraph sign%>\u00b6",
+ "parallel to%>\u2225",
+ "parenthesized digit eight%>\u247b",
+ "parenthesized digit five%>\u2478",
+ "parenthesized digit four%>\u2477",
+ "parenthesized digit nine%>\u247c",
+ "parenthesized digit one%>\u2474",
+ "parenthesized digit seven%>\u247a",
+ "parenthesized digit six%>\u2479",
+ "parenthesized digit three%>\u2476",
+ "parenthesized digit two%>\u2475",
+ "parenthesized latin small letter a%>\u249c",
+ "parenthesized latin small letter b%>\u249d",
+ "parenthesized latin small letter c%>\u249e",
+ "parenthesized latin small letter d%>\u249f",
+ "parenthesized latin small letter e%>\u24a0",
+ "parenthesized latin small letter f%>\u24a1",
+ "parenthesized latin small letter g%>\u24a2",
+ "parenthesized latin small letter h%>\u24a3",
+ "parenthesized latin small letter i%>\u24a4",
+ "parenthesized latin small letter j%>\u24a5",
+ "parenthesized latin small letter k%>\u24a6",
+ "parenthesized latin small letter l%>\u24a7",
+ "parenthesized latin small letter m%>\u24a8",
+ "parenthesized latin small letter n%>\u24a9",
+ "parenthesized latin small letter o%>\u24aa",
+ "parenthesized latin small letter p%>\u24ab",
+ "parenthesized latin small letter q%>\u24ac",
+ "parenthesized latin small letter r%>\u24ad",
+ "parenthesized latin small letter s%>\u24ae",
+ "parenthesized latin small letter t%>\u24af",
+ "parenthesized latin small letter u%>\u24b0",
+ "parenthesized latin small letter v%>\u24b1",
+ "parenthesized latin small letter w%>\u24b2",
+ "parenthesized latin small letter x%>\u24b3",
+ "parenthesized latin small letter y%>\u24b4",
+ "parenthesized latin small letter z%>\u24b5",
+ "parenthesized number eighteen%>\u2485",
+ "parenthesized number eleven%>\u247e",
+ "parenthesized number fifteen%>\u2482",
+ "parenthesized number fourteen%>\u2481",
+ "parenthesized number nineteen%>\u2486",
+ "parenthesized number seventeen%>\u2484",
+ "parenthesized number sixteen%>\u2483",
+ "parenthesized number ten%>\u247d",
+ "parenthesized number thirteen%>\u2480",
+ "parenthesized number twelve%>\u247f",
+ "parenthesized number twenty%>\u2487",
+ "partial differential%>\u2202",
+ "peace symbol%>\u262e",
+ "pencil%>\u270f",
+ "per mille sign%>\u2030",
+ "per ten thousand sign%>\u2031",
+ "perspective%>\u2306",
+ "peseta sign%>\u20a7",
+ "pinwheel star%>\u272f",
+ "pisces%>\u2653",
+ "pitchfork%>\u22d4",
+ "planck constant over 2 pi%>\u210f",
+ "planck constant%>\u210e",
+ "plus-or-minus sign%>\u00b1",
+ "pluto%>\u2647",
+ "pop directional embedding%>\u202c",
+ "position indicator%>\u2316",
+ "postal mark face%>\u3020",
+ "postal mark%>\u3012",
+ "pound sign%>\u00a3",
+ "precedes but not equivalent to%>\u22e8",
+ "precedes or equal to%>\u227c",
+ "precedes or equivalent to%>\u227e",
+ "precedes%>\u227a",
+ "prescription take%>\u211e",
+ "prime%>\u2032",
+ "projective%>\u2305",
+ "proportion%>\u2237",
+ "proportional to%>\u221d",
+ "punctuation space%>\u2008",
+ "quarter note%>\u2669",
+ "questioned equal to%>\u225f",
+ "quotation dash%>\u2015",
+ "radioactive%>\u2622",
+ "ratio%>\u2236",
+ "reference mark%>\u203b",
+ "registered trade mark sign%>\u00ae",
+ "response%>\u211f",
+ "reversed double prime quotation mark%>\u301d",
+ "reversed double prime%>\u2036",
+ "reversed not sign%>\u2310",
+ "reversed prime%>\u2035",
+ "reversed tilde equals%>\u22cd",
+ "reversed tilde%>\u223d",
+ "reversed triple prime%>\u2037",
+ "right angle with arc%>\u22be",
+ "right angle%>\u221f",
+ "right arrow from bar%>\u21a6",
+ "right arrow over left arrow%>\u21c4",
+ "right arrow to bar%>\u21e5",
+ "right arrow with corner down%>\u21b4",
+ "right arrow with hook%>\u21aa",
+ "right arrow with loop%>\u21ac",
+ "right arrow with stroke%>\u219b",
+ "right arrow with tail%>\u21a3",
+ "right arrow%>\u2192",
+ "right ceiling%>\u2309",
+ "right dashed arrow%>\u21e2",
+ "right double arrow with stroke%>\u21cf",
+ "right double arrow%>\u21d2",
+ "right floor%>\u230b",
+ "right half black circle%>\u25d7",
+ "right half block%>\u2590",
+ "right harpoon over left harpoon%>\u21cc",
+ "right harpoon with barb down%>\u21c1",
+ "right harpoon with barb up%>\u21c0",
+ "right normal factor semidirect product%>\u22ca",
+ "right one eighth block%>\u2595",
+ "right paired arrows%>\u21c9",
+ "right pointing guillemet%>\u00bb",
+ "right pointing single guillemet%>\u203a",
+ "right semidirect product%>\u22cc",
+ "right squiggle arrow%>\u21dd",
+ "right tack%>\u22a2",
+ "right triangle%>\u22bf",
+ "right triple arrow%>\u21db",
+ "right two headed arrow%>\u21a0",
+ "right wave arrow%>\u219d",
+ "right-shaded white right arrow%>\u27a9",
+ "right-to-left embedding%>\u202b",
+ "right-to-left mark%>\u200f",
+ "right-to-left override%>\u202e",
+ "ring equal to%>\u2257",
+ "ring in equal to%>\u2256",
+ "ring operator%>\u2218",
+ "roman numeral eight%>\u2167",
+ "roman numeral eleven%>\u216a",
+ "roman numeral fifty%>\u216c",
+ "roman numeral five hundred%>\u216e",
+ "roman numeral five thousand%>\u2181",
+ "roman numeral five%>\u2164",
+ "roman numeral four%>\u2163",
+ "roman numeral nine%>\u2168",
+ "roman numeral one hundred%>\u216d",
+ "roman numeral one thousand c d%>\u2180",
+ "roman numeral one thousand%>\u216f",
+ "roman numeral one%>\u2160",
+ "roman numeral seven%>\u2166",
+ "roman numeral six%>\u2165",
+ "roman numeral ten thousand%>\u2182",
+ "roman numeral ten%>\u2169",
+ "roman numeral three%>\u2162",
+ "roman numeral twelve%>\u216b",
+ "roman numeral two%>\u2161",
+ "rotated floral heart bullet%>\u2767",
+ "rotated heavy black heart bullet%>\u2765",
+ "rupee sign%>\u20a8",
+ "sagittarius%>\u2650",
+ "saltire%>\u2613",
+ "saturn%>\u2644",
+ "scorpius%>\u264f",
+ "script b%>\u212c",
+ "script e%>\u2130",
+ "script f%>\u2131",
+ "script h%>\u210b",
+ "script i%>\u2110",
+ "script l%>\u2112",
+ "script m%>\u2133",
+ "script p%>\u2118",
+ "script r%>\u211b",
+ "script small e%>\u212f",
+ "script small g%>\u210a",
+ "script small l%>\u2113",
+ "script small o%>\u2134",
+ "scruple%>\u2108",
+ "second transfinite cardinal%>\u2136",
+ "section sign%>\u00a7",
+ "sector%>\u2314",
+ "segment%>\u2313",
+ "service mark%>\u2120",
+ "set minus%>\u2216",
+ "shadowed white circle%>\u274d",
+ "shadowed white latin cross%>\u271e",
+ "shadowed white star%>\u2730",
+ "sharp%>\u266f",
+ "sine wave%>\u223f",
+ "single comma quotation mark%>\u2019",
+ "single reversed comma quotation mark%>\u201b",
+ "single turned comma quotation mark%>\u2018",
+ "six petalled black and white florette%>\u273e",
+ "six pointed black star%>\u2736",
+ "six-per-em space%>\u2006",
+ "sixteen pointed asterisk%>\u273a",
+ "skull and crossbones%>\u2620",
+ "small contains as member%>\u220d",
+ "small roman numeral eight%>\u2177",
+ "small roman numeral eleven%>\u217a",
+ "small roman numeral fifty%>\u217c",
+ "small roman numeral five hundred%>\u217e",
+ "small roman numeral five%>\u2174",
+ "small roman numeral four%>\u2173",
+ "small roman numeral nine%>\u2178",
+ "small roman numeral one hundred%>\u217d",
+ "small roman numeral one thousand%>\u217f",
+ "small roman numeral one%>\u2170",
+ "small roman numeral seven%>\u2176",
+ "small roman numeral six%>\u2175",
+ "small roman numeral ten%>\u2179",
+ "small roman numeral three%>\u2172",
+ "small roman numeral twelve%>\u217b",
+ "small roman numeral two%>\u2171",
+ "smile%>\u2323",
+ "snowflake%>\u2744",
+ "snowman%>\u2603",
+ "soft hyphen%>\u00ad",
+ "sound recording copyright%>\u2117",
+ "spacing acute%>\u00b4",
+ "spacing breve%>\u02d8",
+ "spacing cedilla%>\u00b8",
+ "spacing diaeresis%>\u00a8",
+ "spacing dot above%>\u02d9",
+ "spacing double acute%>\u02dd",
+ "spacing double underscore%>\u2017",
+ "spacing macron%>\u00af",
+ "spacing ogonek%>\u02db",
+ "spacing overscore%>\u203e",
+ "spacing ring above%>\u02da",
+ "spacing tilde%>\u02dc",
+ "sparkle%>\u2747",
+ "spherical angle%>\u2222",
+ "square cap%>\u2293",
+ "square cup%>\u2294",
+ "square image of or equal to%>\u2291",
+ "square image of or not equal to%>\u22e4",
+ "square image of%>\u228f",
+ "square lozenge%>\u2311",
+ "square original of or equal to%>\u2292",
+ "square original of or not equal to%>\u22e5",
+ "square original of%>\u2290",
+ "square root%>\u221a",
+ "square with diagonal crosshatch fill%>\u25a9",
+ "square with horizontal fill%>\u25a4",
+ "square with left half black%>\u25e7",
+ "square with lower right diagonal half black%>\u25ea",
+ "square with orthogonal crosshatch fill%>\u25a6",
+ "square with right half black%>\u25e8",
+ "square with upper left diagonal half black%>\u25e9",
+ "square with upper left to lower right fill%>\u25a7",
+ "square with upper right to lower left fill%>\u25a8",
+ "square with vertical fill%>\u25a5",
+ "squared dot operator%>\u22a1",
+ "squared minus%>\u229f",
+ "squared plus%>\u229e",
+ "squared times%>\u22a0",
+ "squat black right arrow%>\u27a7",
+ "star and crescent%>\u262a",
+ "star equals%>\u225b",
+ "star of david%>\u2721",
+ "star operator%>\u22c6",
+ "stop directional override%>\u202f",
+ "strictly equivalent to%>\u2263",
+ "subscript closing parenthesis%>\u208e",
+ "subscript digit eight%>\u2088",
+ "subscript digit five%>\u2085",
+ "subscript digit four%>\u2084",
+ "subscript digit nine%>\u2089",
+ "subscript digit one%>\u2081",
+ "subscript digit seven%>\u2087",
+ "subscript digit six%>\u2086",
+ "subscript digit three%>\u2083",
+ "subscript digit two%>\u2082",
+ "subscript digit zero%>\u2080",
+ "subscript equals sign%>\u208c",
+ "subscript hyphen-minus%>\u208b",
+ "subscript opening parenthesis%>\u208d",
+ "subscript plus sign%>\u208a",
+ "subset of or equal to%>\u2286",
+ "subset of or not equal to%>\u228a",
+ "subset of%>\u2282",
+ "succeeds but not equivalent to%>\u22e9",
+ "succeeds or equal to%>\u227d",
+ "succeeds or equivalent to%>\u227f",
+ "succeeds%>\u227b",
+ "superscript closing parenthesis%>\u207e",
+ "superscript digit eight%>\u2078",
+ "superscript digit five%>\u2075",
+ "superscript digit four%>\u2074",
+ "superscript digit nine%>\u2079",
+ "superscript digit one%>\u00b9",
+ "superscript digit seven%>\u2077",
+ "superscript digit six%>\u2076",
+ "superscript digit three%>\u00b3",
+ "superscript digit two%>\u00b2",
+ "superscript digit zero%>\u2070",
+ "superscript equals sign%>\u207c",
+ "superscript hyphen-minus%>\u207b",
+ "superscript latin small letter n%>\u207f",
+ "superscript opening parenthesis%>\u207d",
+ "superscript plus sign%>\u207a",
+ "superset of or equal to%>\u2287",
+ "superset of or not equal to%>\u228b",
+ "superset of%>\u2283",
+ "surface integral%>\u222f",
+ "symbol of iran%>\u262b",
+ "t e l symbol%>\u2121",
+ "tape drive%>\u2707",
+ "taurus%>\u2649",
+ "teardrop-barbed right arrow%>\u27ba",
+ "teardrop-spoked asterisk%>\u273b",
+ "telephone location sign%>\u2706",
+ "telephone recorder%>\u2315",
+ "there does not exist%>\u2204",
+ "there exists%>\u2203",
+ "therefore%>\u2234",
+ "thin space%>\u2009",
+ "third transfinite cardinal%>\u2137",
+ "three-d bottom-lighted right arrowhead%>\u27a3",
+ "three-d top-lighted right arrowhead%>\u27a2",
+ "three-per-em space%>\u2004",
+ "thunderstorm%>\u2608",
+ "tight trifoliate snowflake%>\u2745",
+ "tilde operator%>\u223c",
+ "top half integral%>\u2320",
+ "top left corner%>\u231c",
+ "top left crop%>\u230f",
+ "top right corner%>\u231d",
+ "top right crop%>\u230e",
+ "trademark%>\u2122",
+ "triangle-headed right arrow%>\u279d",
+ "triangular bullet%>\u2023",
+ "trigram for earth%>\u2637",
+ "trigram for fire%>\u2632",
+ "trigram for heaven%>\u2630",
+ "trigram for lake%>\u2631",
+ "trigram for mountain%>\u2636",
+ "trigram for thunder%>\u2633",
+ "trigram for water%>\u2635",
+ "trigram for wind%>\u2634",
+ "triple integral%>\u222d",
+ "triple prime%>\u2034",
+ "triple tilde%>\u224b",
+ "triple vertical bar right turnstile%>\u22aa",
+ "true%>\u22a8",
+ "turned f%>\u2132",
+ "turned greek small letter iota%>\u2129",
+ "turned not sign%>\u2319",
+ "twelve pointed black star%>\u2739",
+ "two dot leader%>\u2025",
+ "umbrella%>\u2602",
+ "union%>\u222a",
+ "up arrow from bar%>\u21a5",
+ "up arrow left of down arrow%>\u21c5",
+ "up arrow with double stroke%>\u21de",
+ "up arrow with tip left%>\u21b0",
+ "up arrow with tip right%>\u21b1",
+ "up arrow%>\u2191",
+ "up arrowhead%>\u2303",
+ "up dashed arrow%>\u21e1",
+ "up double arrow%>\u21d1",
+ "up down arrow with base%>\u21a8",
+ "up down arrow%>\u2195",
+ "up down double arrow%>\u21d5",
+ "up harpoon with barb left%>\u21bf",
+ "up harpoon with barb right%>\u21be",
+ "up paired arrows%>\u21c8",
+ "up pointing triangle with left half black%>\u25ed",
+ "up pointing triangle with right half black%>\u25ee",
+ "up right diagonal ellipsis%>\u22f0",
+ "up tack%>\u22a5",
+ "up two headed arrow%>\u219f",
+ "upper blade scissors%>\u2701",
+ "upper half block%>\u2580",
+ "upper half circle%>\u25e0",
+ "upper half inverse white circle%>\u25da",
+ "upper left arrow to long bar%>\u21b8",
+ "upper left arrow%>\u2196",
+ "upper left double arrow%>\u21d6",
+ "upper left quadrant circular arc%>\u25dc",
+ "upper one eighth block%>\u2594",
+ "upper right arrow%>\u2197",
+ "upper right double arrow%>\u21d7",
+ "upper right drop-shadowed white square%>\u2750",
+ "upper right pencil%>\u2710",
+ "upper right quadrant circular arc%>\u25dd",
+ "upper right shadowed white square%>\u2752",
+ "uranus%>\u2645",
+ "versicle%>\u2123",
+ "vertical ellipsis%>\u22ee",
+ "vertical kana repeat mark lower half%>\u3035",
+ "vertical kana repeat mark upper half%>\u3033",
+ "vertical kana repeat mark%>\u3031",
+ "vertical kana repeat with voiced sound mark upper half%>\u3034",
+ "vertical kana repeat with voiced sound mark%>\u3032",
+ "very much greater than%>\u22d9",
+ "very much less than%>\u22d8",
+ "victory hand%>\u270c",
+ "viewdata square%>\u2317",
+ "virgo%>\u264d",
+ "volume integral%>\u2230",
+ "watch%>\u231a",
+ "wave dash%>\u301c",
+ "wavy dash%>\u3030",
+ "wavy line%>\u2307",
+ "wedge-tailed right arrow%>\u27bc",
+ "wheel of dharma%>\u2638",
+ "white bullet%>\u25e6",
+ "white chess bishop%>\u2657",
+ "white chess king%>\u2654",
+ "white chess knight%>\u2658",
+ "white chess pawn%>\u2659",
+ "white chess queen%>\u2655",
+ "white chess rook%>\u2656",
+ "white circle%>\u25cb",
+ "white club suit%>\u2667",
+ "white diamond containing black small diamond%>\u25c8",
+ "white diamond suit%>\u2662",
+ "white diamond%>\u25c7",
+ "white down arrow%>\u21e9",
+ "white down pointing index%>\u261f",
+ "white down pointing small triangle%>\u25bf",
+ "white down pointing triangle%>\u25bd",
+ "white florette%>\u2740",
+ "white four pointed star%>\u2727",
+ "white frowning face%>\u2639",
+ "white heart suit%>\u2661",
+ "white left arrow%>\u21e6",
+ "white left pointing index%>\u261c",
+ "white left pointing pointer%>\u25c5",
+ "white left pointing small triangle%>\u25c3",
+ "white left pointing triangle%>\u25c1",
+ "white nib%>\u2711",
+ "white parallelogram%>\u25b1",
+ "white rectangle%>\u25ad",
+ "white right arrow%>\u21e8",
+ "white right pointing index%>\u261e",
+ "white right pointing pointer%>\u25bb",
+ "white right pointing small triangle%>\u25b9",
+ "white right pointing triangle%>\u25b7",
+ "white scissors%>\u2704",
+ "white small square%>\u25ab",
+ "white smiling face%>\u263a",
+ "white spade suit%>\u2664",
+ "white square containing black small square%>\u25a3",
+ "white square with rounded corners%>\u25a2",
+ "white square with vertical bisecting line%>\u25eb",
+ "white square%>\u25a1",
+ "white star%>\u2606",
+ "white sun with rays%>\u263c",
+ "white telephone%>\u260f",
+ "white up arrow from bar%>\u21ea",
+ "white up arrow%>\u21e7",
+ "white up pointing index%>\u261d",
+ "white up pointing small triangle%>\u25b5",
+ "white up pointing triangle with dot%>\u25ec",
+ "white up pointing triangle%>\u25b3",
+ "white vertical rectangle%>\u25af",
+ "white-feathered right arrow%>\u27b3",
+ "won sign%>\u20a9",
+ "wreath product%>\u2240",
+ "writing hand%>\u270d",
+ "x mark3%>\u2717",
+ "xor%>\u22bb",
+ "yen sign%>\u00a5",
+ "yin yang%>\u262f",
+ "zero width joiner%>\u200d",
+ "zero width non-joiner%>\u200c",
+ "zero width space%>\u200b",
+ }}
+ };
+ }
+}
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/tools/RuleBasedBreakIterator/BuildDictionaryFile.java b/src/com/ibm/tools/RuleBasedBreakIterator/BuildDictionaryFile.java
new file mode 100755
index 0000000..abb8df0
--- /dev/null
+++ b/src/com/ibm/tools/RuleBasedBreakIterator/BuildDictionaryFile.java
@@ -0,0 +1,875 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/tools/RuleBasedBreakIterator/Attic/BuildDictionaryFile.java,v $
+ * $Date: 2000/03/10 04:17:56 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.tools.RuleBasedBreakIterator;
+
+import com.ibm.util.CompactByteArray;
+import com.ibm.text.CharSet;
+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...");
+ CharSet charsInFile = new CharSet();
+ 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 = charsInFile.union(new CharSet((char)c));
+ c = in.read();
+ }
+// Test.debugPrintln(charsInFile.toString());
+
+ StringBuffer tempReverseMap = new StringBuffer();
+ tempReverseMap.append(' ');
+
+ columnMap = new CompactByteArray();
+ Enumeration e = charsInFile.getChars();
+ byte p = 1;
+ while (e.hasMoreElements()) {
+ char[] range = (char[])e.nextElement();
+ for (char ch = range[0]; ch <= range[1]; 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);
+if (tempTable.size() > 32767) throw new IllegalArgumentException("Too many rows in table!");
+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);
+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/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/normalizer/CPPWriter.java b/src/com/ibm/tools/normalizer/CPPWriter.java
new file mode 100755
index 0000000..b21295a
--- /dev/null
+++ b/src/com/ibm/tools/normalizer/CPPWriter.java
@@ -0,0 +1,201 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:17:56 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.tools.normalizer;
+
+import com.ibm.text.*;
+import com.ibm.util.*;
+import com.ibm.util.CompactByteArray;
+import com.ibm.util.CompactCharArray;
+import java.io.*;
+
+/**
+ * CPPWriter knows how to write data structures out to C++ source and header files
+ */
+class CPPWriter extends SourceWriter {
+ PrintStream source;
+ PrintStream header;
+
+ String className;
+
+ public CPPWriter(String fileName, String cName) throws FileNotFoundException {
+ className = cName;
+
+ // Find the class name
+ header = new PrintStream(new FileOutputStream(fileName + ".h"));
+ header.println(kHeader);
+ header.println("#include \"ptypes.h\"");
+ header.println("#include \"cmpbytea.h\"");
+ header.println("#include \"cmpchara.h\"");
+ header.println("");
+ header.println("struct " + className + " {"); // "struct" makes everything public
+
+ source = new PrintStream(new FileOutputStream(fileName + ".cpp"));
+ source.println(kHeader);
+ source.println("#include \"" + fileName + ".h\" ");
+ source.println("\n");
+ }
+
+ 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" + UInfo.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 const CompactCharArray " + name + ";");
+
+ source.println("");
+ source.println("const CompactCharArray " + className + "::" + name + "("
+ + indexName + "," + valueName
+ + ", " + array.getValueArray().length + ");" );
+ }
+
+ 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 + ";");
+
+ source.println("");
+ // TODO: add "const" here when CompactByteArray::get is made const
+ source.println("CompactByteArray " + className + "::" + name + "("
+ + "(UniChar*)" + indexName + ", (t_int8*)" + valueName
+ + ", " + 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 UniChar " + name + "[];");
+
+ source.println("");
+ source.println("const UniChar " + className + "::" + name + "[] = {");
+
+ source.print(" ");
+ for (int i = 0; i < array.length; i++) {
+ if (i > 0 && i % 8 == 0) {
+ source.print("\n ");
+ }
+ source.print("0x" + UInfo.hex(array[i]) + ", ");
+ }
+ source.println("};");
+ }
+
+ public void write(String name, short[] array) {
+ header.println("");
+ header.println(" static const t_uint16 " + name + "[];");
+
+ source.println("");
+ source.println("const t_uint16 " + className + "::" + name + "[] = {");
+
+ source.print(" ");
+ for (int i = 0; i < array.length; i++) {
+ if (i > 0 && i % 8 == 0) {
+ source.print("\n ");
+ }
+ source.print("0x" + UInfo.hex((char)array[i]) + ", ");
+ }
+ source.println("};");
+ }
+
+ public void write(String name, int[] array) {
+ header.println("");
+ header.println(" static const t_int32 " + name + "[];");
+
+ source.println("");
+ source.println("const t_int32 " + className + "::" + name + "[] = {");
+
+ source.print(" ");
+ for (int i = 0; i < array.length; i++) {
+ if (i > 0 && i % 8 == 0) {
+ source.print("\n ");
+ }
+ source.print("0x" + Integer.toString(array[i],16) + ", ");
+ }
+ source.println("};");
+ }
+
+ public void write(String name, byte[] array) {
+ header.println("");
+ header.println(" static const t_int8 " + name + "[];");
+
+ source.println("");
+ source.println("const t_int8 " + className + "::" + name + "[] = {");
+
+ source.print(" ");
+ for (int i = 0; i < array.length; i++) {
+ if (i > 0 && i % 8 == 0) {
+ source.print("\n ");
+ }
+ int value = array[i];
+ if (value < 0) value += 256;
+ source.print("(t_int8)0x" + Integer.toString(value,16) + ", ");
+ }
+ source.println("};");
+ }
+
+ static final String kHeader =
+ "/*\n"
+ +" * @(#)$RCSFile$ $Revision: 1.2 $ $Date: 2000/03/10 04:17:56 $\n"
+ +" *\n"
+ +" * (C) Copyright IBM Corp. 1997-1998 - All Rights Reserved\n"
+ +" *\n"
+ +" * The program is provided 'as is' without any warranty express or\n"
+ +" * implied, including the warranty of non-infringement and the implied\n"
+ +" * warranties of merchantibility and fitness for a particular purpose.\n"
+ +" * IBM will not be liable for any damages suffered by you as a result\n"
+ +" * of using the Program. In no event will IBM be liable for any\n"
+ +" * special, indirect or consequential damages or lost profits even if\n"
+ +" * IBM has been advised of the possibility of their occurrence. IBM\n"
+ +" * will not be liable for any third party claims against you.\n"
+ +" *\n"
+ +" * This class is MACHINE GENERATED. Run NormalizerBuilder to regenerate.\n"
+ +" */\n"
+ +"\n";
+}
diff --git a/src/com/ibm/tools/normalizer/JavaWriter.java b/src/com/ibm/tools/normalizer/JavaWriter.java
new file mode 100755
index 0000000..4c12a4ba
--- /dev/null
+++ b/src/com/ibm/tools/normalizer/JavaWriter.java
@@ -0,0 +1,120 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:17:56 $
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+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 {
+ PrintStream 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 PrintStream(new FileOutputStream(name + ".java"));
+
+ out.println(kHeader);
+ 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(" );");
+ }
+
+ static final String kHeader =
+ "/*\n"
+ +" * (C) Copyright IBM Corp. 1997-1998 - All Rights Reserved\n"
+ +" *\n"
+ +" * The program is provided 'as is' without any warranty express or\n"
+ +" * implied, including the warranty of non-infringement and the implied\n"
+ +" * warranties of merchantibility and fitness for a particular purpose.\n"
+ +" * IBM will not be liable for any damages suffered by you as a result\n"
+ +" * of using the Program. In no event will IBM be liable for any\n"
+ +" * special, indirect or consequential damages or lost profits even if\n"
+ +" * IBM has been advised of the possibility of their occurrence. IBM\n"
+ +" * will not be liable for any third party claims against you.\n"
+ +" */\n"
+ +"\n"
+ +"package com.ibm.text;\n"
+ +"import com.ibm.util.*;\n"
+ + "// This class is MACHINE GENERATED. Run NormalizerBuilder to regenerate.\n"
+ +"\n";
+}
+
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..894c456
--- /dev/null
+++ b/src/com/ibm/tools/normalizer/NormalizerBuilder.java
@@ -0,0 +1,998 @@
+/*
+ *******************************************************************************
+ * 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: 2000/03/10 04:17:56 $
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+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;
+
+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;
+
+ private DecompMap decomps = new DecompMap();
+
+ private DecompMap explodeCompat = new DecompMap();
+ private DecompMap explodeOnly = new DecompMap();
+
+ private CompMap permutedCompositions = new CompMap();
+ private CompMap binaryCompositions = new CompMap();
+
+ private CharSet bases = new CharSet();
+ 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;
+
+ /**
+ * The highest Unicode character that has a canonical decomposition.
+ * (i.e. largest char that can result from a primary canonical composition.)
+ */
+ 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]);
+ }
+ else if (args[i].equals("-write")) {
+ fWriteData = true;
+ }
+ else if (args[i].equals("-verbose")) {
+ 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;
+ }
+ }
+ if (uinfo == null) {
+ uinfo = new UInfo("../src/data/unicode/UnicodeData.txt");
+ }
+
+ boolean canonicalOnly = true;
+
+ createDecompositions();
+
+ out("\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;
+ }
+ if (uinfo.hasCanonicalDecomposition(ch) && decomp.length() > 1
+ && !uinfo.isExcludedComposition(ch) && uinfo.isCBS(decomp))
+ {
+ if (decomp.length() <= 2) {
+ permutedCompositions.put(decomp, ch);
+ }
+ else {
+ 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
+ }
+ }
+ }
+
+ out("\nLargest composed char: " + uinfo.hex(largestChar));
+
+ // Form the binary compositions
+ out("\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 " + uinfo.hex(decomp) +
+ " > " + uinfo.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 " + uinfo.hex(decomp) +
+ " > " + uinfo.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.
+
+ out("\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();
+ out("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()
+ {
+ out("\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);
+
+ if (uinfo.hasCanonicalDecomposition(ch)) canonCount++;
+ if (uinfo.hasCompatibilityDecomposition(ch)) compatCount++;
+
+ if (canon || uinfo.hasCompatibilityDecomposition(ch)) {
+ String decomp = uinfo.getFullDecomposition(ch, canon);
+ temp.setLength(0);
+ temp.append(decomp);
+ uinfo.fixCanonical(temp);
+
+ decomps.put(ch, temp.toString() );
+ }
+ }
+ }
+
+ 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 {
+
+ out("\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) {
+ out("0F77: decomps.get() = " + uinfo.hex(decomps.get(ch)));
+ out("0F77: fullDecomp = " + uinfo.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) {
+ writeDecompData(new JavaWriter("../src/com/ibm/text/DecompData"),
+ canonIndex, compatIndex, BASE, offsets, replace, canonClasses);
+ }
+
+ if (fCPP) {
+ writeDecompData(new CPPWriter("/intlwork/source/collate/CPP/dcmpdata", "DecompData"),
+ canonIndex, compatIndex, BASE, offsets, replace, canonClasses);
+ }
+
+ out("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();
+
+ out("Total runtime size of decomp data is "
+ + (offsetSize + canonSize + replaceLength));
+
+ out(" offsets: " + offsetSize);
+ out(" canonClasses: " + canonSize);
+ out(" 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 bit mask.
+ int[] classMap = new int[256];
+ int[] typeMask;
+
+ // 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
+ {
+ out("\nGenerating ComposeData.java....");
+
+ BitSet usedIndices = new BitSet();
+ CharSet explodingBases = new CharSet();
+
+ // 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);
+
+ out(uinfo.hex(ch) + " is base and has compat explosion "
+ + uinfo.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 (explodeCompat.contains(ch))
+ {
+ 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);
+
+ 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++;
+ }
+ }
+
+ // Now run through the combining classes again and assign bitmasks
+ // in the same ascending order as the canonical classes
+ int maskShift = 0;
+ for (int i = 0; i < 256; i++) {
+ if (classMap[i] != 0) {
+ classMap[i] = (1 << (maskShift++));
+ }
+ }
+ if (maskShift > 32) {
+ err(Integer.toString(maskShift) + "combining classes; max is 32");
+ }
+ out("# of combining classes is " + maskShift);
+
+ out("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 "type mask" array that maps from combining character index
+ // to a bit mask representing the canonical combining class
+ typeMask = 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);
+ typeMask[ind] = classMap[cclass];
+ }
+ }
+
+ if (fJava) {
+ writeComposeData(new JavaWriter("../src/com/ibm/text/ComposeData"));
+ }
+ if (fCPP) {
+ writeComposeData(new CPPWriter("/intlwork/source/collate/CPP/compdata", "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 typeMaskSize = typeMask.length * 2;
+
+ out("Total runtime size of compose data is "
+ + (lookupSize + actionSize + actIndexSize + replaceSize + typeMaskSize));
+
+ out(" lookup: " + lookupSize);
+ out(" actions: " + actionSize);
+ out(" actionIndex: " + actIndexSize);
+ out(" typeMask: " + typeMaskSize);
+ out(" replace: " + replaceSize);
+ }
+ }
+
+ void writeComposeData(SourceWriter out) {
+ out.write("BASE_COUNT", baseCount);
+ out.write("COMBINING_COUNT", combineCount);
+ out.write("MAX_COMPAT", maxCompat);
+ out.write("MAX_CANON", 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("EXPLODING_BASE", (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("typeMask", typeMask );
+
+ 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) + ": "
+ + uinfo.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 + "): "
+ + uinfo.hex(ch) + " " + uinfo.getName(ch,true));
+ }
+
+ if (oldIndex != 0) {
+ err("Exploding char is already " + typeName(oldValue & TYPE_MASK)
+ + " (index " + oldIndex + "): "
+ + uinfo.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;
+ }
+
+ //--------------------------------------------------------------------------------
+ // Source file headers
+ //
+
+ static final String kCHeader =
+ "/*\n"
+ +" * (C) Copyright IBM Corp. 1997-1998 - All Rights Reserved\n"
+ +" *\n"
+ +" * The program is provided 'as is' without any warranty express or\n"
+ +" * implied, including the warranty of non-infringement and the implied\n"
+ +" * warranties of merchantibility and fitness for a particular purpose.\n"
+ +" * IBM will not be liable for any damages suffered by you as a result\n"
+ +" * of using the Program. In no event will IBM be liable for any\n"
+ +" * special, indirect or consequential damages or lost profits even if\n"
+ +" * IBM has been advised of the possibility of their occurrence. IBM\n"
+ +" * will not be liable for any third party claims against you.\n"
+ +" */\n"
+ + "// This class is MACHINE GENERATED. Run NormalizerBuilder to regenerate.\n"
+ +"\n";
+
+ void out(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(' ');
+}
+
diff --git a/src/com/ibm/tools/normalizer/SourceWriter.java b/src/com/ibm/tools/normalizer/SourceWriter.java
new file mode 100755
index 0000000..5795169
--- /dev/null
+++ b/src/com/ibm/tools/normalizer/SourceWriter.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/tools/normalizer/Attic/SourceWriter.java,v $
+ * $Date: 2000/03/10 04:17:57 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.tools.normalizer;
+
+import com.ibm.text.*;
+import com.ibm.util.CompactCharArray;
+import com.ibm.util.CompactByteArray;
+
+//===========================================================================================
+// 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);
+}
+
diff --git a/src/com/ibm/util/BuddhistCalendar.java b/src/com/ibm/util/BuddhistCalendar.java
new file mode 100755
index 0000000..e85d794
--- /dev/null
+++ b/src/com/ibm/util/BuddhistCalendar.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/util/Attic/BuddhistCalendar.java,v $
+ * $Date: 2000/03/10 04:17:57 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util;
+
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.Locale;
+import java.util.TimeZone;
+
+/**
+ * <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 java.util.GregorianCalendar
+ *
+ * @author Laura Werner
+ */
+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 java.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) {
+ super(TimeZone.getDefault(), Locale.getDefault());
+ 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....
+ //-------------------------------------------------------------------------
+
+ /**
+ * Override of the <code>GregorianCalendar</code> method that computes the
+ * fields such as <code>YEAR</code>, <code>MONTH</code>, and <code>DATE</code>
+ * from the date in milliseconds since 1/1/1970 AD.
+ *
+ * This method calls {@link GregorianCalendar#computeFields} to do most
+ * of the work,
+ * then adjusts the {@link #YEAR YEAR} and {@link #ERA ERA} fields to use the
+ * Buddhist Era rather than the Gregorian {@link #AD AD} or {@link #BC BC}.
+ */
+ protected void computeFields() {
+ // Let GregorianCalendar do its thing.
+ super.computeFields();
+
+ // Now adjust the year and era to the proper Buddhist values
+ fromGregorian();
+
+ //
+ // If we're in strict mode and the year is less than 1, fail.
+ // But do this after setting both the year and era to the right values
+ // anyway, so that this object is in a consistent state.
+ //
+ if (!isLenient() && fields[YEAR] < 1) {
+ throw new IllegalArgumentException("Time before start of Buddhist era");
+ }
+ }
+
+ /**
+ * Override of the <code>GregorianCalendar</code> method that computes the
+ * elapsed time in milliseconds since 1/1/1970 AD from the fields such
+ * as <code>YEAR</code>, <code>MONTH</code>, and <code>DATE</code>.
+ *
+ * This method adjusts the {@link #YEAR YEAR} and {@link #ERA ERA} from their
+ * values in the Buddhist calendar to the corresponding Gregorian values, calls
+ * {@link GregorianCalendar#computeTime} to do the real millisecond
+ * calculation, and then restores the Buddhist <code>YEAR</code> and
+ * <code>ERA</code>.
+ */
+ protected void computeTime() {
+ int year = fields[YEAR];
+ int era = fields[ERA];
+
+ if (!isLenient()) {
+ if (era != BE) {
+ throw new IllegalArgumentException("Illegal value for ERA");
+ }
+ if (year < 1) {
+ throw new IllegalArgumentException("YEAR must be greater than 0");
+ }
+ }
+
+ try {
+ toGregorian();
+ super.computeTime();
+ }
+ finally {
+ // Set the year and era back to the Buddhist values, even if
+ // GregorianCalendar fails because other fields are invalid.
+ fields[YEAR] = year;
+ fields[ERA] = era;
+ }
+ }
+
+ public void add(int field, int amount) {
+ toGregorian();
+ try {
+ super.add(field, amount);
+ }
+ finally {
+ fromGregorian();
+ }
+ }
+
+ public void roll(int field, boolean up) {
+ toGregorian();
+ try {
+ super.roll(field, up);
+ }
+ finally {
+ fromGregorian();
+ }
+ }
+
+ //-------------------------------------------------------------------------
+ // Methods for converting between Gregorian and Buddhist calendars
+ //-------------------------------------------------------------------------
+
+ private static int BUDDHIST_ERA_START = -543; // Starts in -543 AD, ie 544 BC
+
+ /**
+ * Convert the YEAR and ERA fields from Buddhist to Gregorian values
+ * Return the (Buddhist) value of the YEAR field on input;
+ */
+ private void toGregorian() {
+ int year = fields[YEAR];
+
+ if (year > 0) {
+ fields[YEAR] = year + BUDDHIST_ERA_START;
+ fields[ERA] = AD;
+ } else {
+ fields[YEAR] = 1 - year - BUDDHIST_ERA_START;
+ fields[ERA] = BC;
+ }
+ }
+
+ /**
+ * Adjust the year and era from Gregorian to Buddhist values
+ */
+ private void fromGregorian() {
+ // Now adjust the year and era to the proper Buddhist values
+ int year = fields[YEAR];
+
+ if (fields[ERA] == BC) {
+ fields[YEAR] = 1 - year - BUDDHIST_ERA_START;
+ } else {
+ fields[YEAR] = year - BUDDHIST_ERA_START;
+ }
+ fields[ERA] = BE;
+ }
+
+};
diff --git a/src/com/ibm/util/CalendarAstronomer.java b/src/com/ibm/util/CalendarAstronomer.java
new file mode 100755
index 0000000..8971eb8
--- /dev/null
+++ b/src/com/ibm/util/CalendarAstronomer.java
@@ -0,0 +1,1188 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:17:57 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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 a Chinese calendar class that is still in development.
+ *
+ * @author Laura Werner
+ */
+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
+ long lastTime = 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;
+
+ 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;
+
+ lastTime = time;
+ 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 + "\"";
+ }
+}
\ No newline at end of file
diff --git a/src/com/ibm/util/CalendarCache.java b/src/com/ibm/util/CalendarCache.java
new file mode 100755
index 0000000..01abd4e
--- /dev/null
+++ b/src/com/ibm/util/CalendarCache.java
@@ -0,0 +1,114 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:17:57 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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)
+ {
+ return (int)((key * 15821 + 1) % arraySize);
+ }
+
+ 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/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..ee864d2
--- /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/03/10 04:17:57 $
+ * $Revision: 1.5 $
+ *
+ *****************************************************************************************
+ */
+
+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.5 $
+ * @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;
+ }
+ }
+
+ static final int BLOCKSHIFT = 5;
+ 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..b9e1b60
--- /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/03/10 04:17:58 $
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util;
+
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.Calendar;
+import java.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/HebrewCalendar.java b/src/com/ibm/util/HebrewCalendar.java
new file mode 100755
index 0000000..06c6f49
--- /dev/null
+++ b/src/com/ibm/util/HebrewCalendar.java
@@ -0,0 +1,1102 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:17:58 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util;
+
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.Locale;
+import java.util.TimeZone;
+
+/**
+ * <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 java.util.GregorianCalendar
+ *
+ * @author Laura Werner
+ */
+public class HebrewCalendar extends IBMCalendar {
+
+ 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
+
+ // Useful millisecond constants
+ private static final int SECOND_MS = 1000;
+ private static final int MINUTE_MS = 60*SECOND_MS;
+ private static final int HOUR_MS = 60*MINUTE_MS;
+ private static final long DAY_MS = 24*HOUR_MS;
+ private static final long WEEK_MS = 7*DAY_MS;
+
+ /**
+ * The minimum and maximum values for all of the fields, for validation
+ */
+ private static final int MinMax[][] = {
+ // Min Greatest Min Least Max Max
+ { 0, 0, 0, 0 }, // ERA
+ { 1, 1, 5000000, 5000000 }, // YEAR
+ { 0, 0, 12, 12 }, // MONTH
+ { 0, 0, 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
+ { 1, 1, 7, 7 }, // DAY_OF_WEEK
+ { -1, -1, 4, 6 }, // 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*HOUR_MS, -12*HOUR_MS, 12*HOUR_MS, 12*HOUR_MS }, // ZONE_OFFSET
+ { 0, 0, 1*HOUR_MS, 1*HOUR_MS },
+ };
+
+ /**
+ * 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 NUM_DAYS[][] = {
+ // 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_NUM_DAYS[][] = {
+ // 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...
+ //-------------------------------------------------------------------------
+
+ /**
+ * Since TimeZone rules are all defined in terms of GregorianCalendar,
+ * we need a GregorianCalendar object for doing time zone calculations
+ * There's no point in lazy-allocating this since it's needed for
+ * almost anything this class does.
+ */
+ private static GregorianCalendar gregorian = new GregorianCalendar();
+
+ 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);
+ }
+
+ //-------------------------------------------------------------------------
+ // Minimum / Maximum access functions
+ //-------------------------------------------------------------------------
+
+ /**
+ * Returns the minimum value for the given field.
+ * e.g. for DAY_OF_MONTH, 1
+ *
+ * @param field The field whose minimum value is desired.
+ *
+ * @see java.util.Calendar#getMinimum
+ */
+ public int getMinimum(int field)
+ {
+ return MinMax[field][0];
+ }
+
+ /**
+ * Returns the highest minimum value for the given field. For the Hebrew
+ * calendar, this always returns the same result as <code>getMinimum</code>.
+ *
+ * @param field The field whose greatest minimum value is desired.
+ *
+ * @see #getMinimum
+ */
+ public int getGreatestMinimum(int field)
+ {
+ return MinMax[field][1];
+ }
+
+ /**
+ * Returns the maximum value for the given field.
+ * e.g. for {@link #DAY_OF_MONTH DAY_OF_MONTH}, 30
+ *
+ * @param field The field whose maximum value is desired.
+ *
+ * @see #getLeastMaximum
+ * @see #getActualMaximum
+ */
+ public int getMaximum(int field)
+ {
+ return MinMax[field][3];
+ }
+
+ /**
+ * Returns the lowest maximum value for the given field. For most fields,
+ * this returns the same result as {@link #getMaximum getMaximum}. However,
+ * for some fields this can be a lower number. For example,
+ * the maximum {@link #DAY_OF_MONTH DAY_OF_MONTH} in the Hebrew caleandar varies
+ * from month to month, so this method returns 29 while <code>getMaximum</code>
+ * returns 30.
+ *
+ * @param field The field whose least maximum value is desired.
+ *
+ * @see #getMaximum
+ * @see #getActualMaximum
+ */
+ public int getLeastMaximum(int field)
+ {
+ return MinMax[field][2];
+ }
+
+ /**
+ * Return the maximum value that a field could have, given the current date.
+ * For example, with the date "Kislev 3, 5757" and the {@link #DAY_OF_MONTH DAY_OF_MONTH} field,
+ * the actual maximum would be 29; for "Kislev 3, 5758" it would be 30,
+ * since the length of the month Kislev varies from year to year.
+ *
+ * @param field The field whose actual maximum value is desired.
+ *
+ * @see #getMaximum
+ * @see #getLeastMaximum
+ */
+ public int getActualMaximum(int field)
+ {
+ if (!isSet[YEAR] || !isSet[MONTH]) {
+ complete();
+ }
+ switch (field) {
+ case MONTH:
+ return isLeapYear(fields[YEAR]) ? 13 : 12;
+
+ case DAY_OF_MONTH:
+ return monthLength(fields[YEAR], fields[MONTH]);
+
+ case DAY_OF_YEAR:
+ return yearLength(fields[YEAR]);
+
+ default:
+ return super.getActualMaximum(field);
+ }
+ }
+
+ //-------------------------------------------------------------------------
+ // 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:
+ {
+ //
+ // 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++;
+ }
+ this.set(YEAR, year);
+ this.set(MONTH, month);
+
+ 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 = leapYear ? 13 : 12;
+ 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.
+ // TODO: fix cases like Av + 12 -> Tammuz
+ //
+ 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);
+ }
+ }
+
+ //-------------------------------------------------------------------------
+ // Functions for converting from field values to milliseconds and back...
+ //
+ // These are overrides of abstract methods on java.util.Calendar
+ //-------------------------------------------------------------------------
+
+ /**
+ * Converts time field values to UTC as milliseconds.
+ *
+ * @exception IllegalArgumentException if an unknown field is given.
+ */
+ protected void computeTime()
+ {
+ if (isTimeSet) return;
+
+ if (!isLenient() && !validateFields())
+ throw new IllegalArgumentException("Invalid field values for HebrewCalendar");
+
+ if (isSet[ERA] && internalGet(ERA) != 0)
+ throw new IllegalArgumentException("ERA out of range in HebrewCalendar");
+
+ // The year is required. We don't have to check if it's unset,
+ // because if it is, by definition it will be 0.
+
+ int year = internalGet(YEAR);
+ long dayNumber = 0, date = 0;
+
+ if (year <= 0) {
+ throw new IllegalArgumentException("YEAR out of range in HebrewCalendar");
+ }
+
+ // The following code is somewhat convoluted. The various nested
+ // if's handle the different cases of what fields are present.
+ if (isSet[MONTH] &&
+ (isSet[DATE] ||
+ (isSet[DAY_OF_WEEK] &&
+ (isSet[WEEK_OF_MONTH] || isSet[DAY_OF_WEEK_IN_MONTH])
+ )))
+ {
+ // We have the month specified. Make it 1-based for the algorithm.
+ int month = internalGet(MONTH);
+
+ // normalize month
+ // TODO: I think this is wrong, since months/year can vary
+ if (month < 0) {
+ year += month / 13 - 1;
+ month = 13 + month % 13;
+ } else if (month > 12) {
+ year += month / 13;
+ month = month % 13;
+ }
+
+ dayNumber = startOfYear(year);
+ if (isLeapYear(year)) {
+ dayNumber += LEAP_NUM_DAYS[month][yearType(year)];
+ } else {
+ dayNumber += NUM_DAYS[month][yearType(year)];
+ }
+
+ if (isSet[DATE])
+ {
+ date = internalGet(DATE);
+ }
+ else
+ {
+ // Compute from day of week plus week number or from the day of
+ // week plus the day of week in month. The computations are
+ // almost identical.
+
+ // Find the day of the week for the first of this month. This
+ // is zero-based, with 0 being the locale-specific first day of
+ // the week. Add 1 to get the 1st day of month. Subtract
+ // getFirstDayOfWeek() to make 0-based.
+ int fdm = absoluteDayToDayOfWeek(dayNumber + 1) - getFirstDayOfWeek();
+ if (fdm < 0) fdm += 7;
+
+ // Find the start of the first week. This will be a date from
+ // 1..-6. It represents the locale-specific first day of the
+ // week of the first day of the month, ignoring minimal days in
+ // first week.
+ date = 1 - fdm + internalGet(DAY_OF_WEEK) - getFirstDayOfWeek();
+
+ if (isSet[WEEK_OF_MONTH])
+ {
+ // Adjust for minimal days in first week.
+ if ((7 - fdm) < getMinimalDaysInFirstWeek()) date += 7;
+
+ // Now adjust for the week number.
+ date += 7 * (internalGet(WEEK_OF_MONTH) - 1);
+ }
+ else
+ {
+ // Adjust into the month, if needed.
+ if (date < 1) date += 7;
+
+ // We are basing this on the day-of-week-in-month. The only
+ // trickiness occurs if the day-of-week-in-month is
+ // negative.
+ int dim = internalGet(DAY_OF_WEEK_IN_MONTH);
+ 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.
+ date += ((monthLength(year, fields[MONTH]) - date) / 7 + dim + 1) * 7;
+ }
+ }
+ }
+ dayNumber += date;
+ }
+ else if (isSet[DAY_OF_YEAR]) {
+ dayNumber = startOfYear(year) + internalGet(DAY_OF_YEAR);
+ }
+ else if (isSet[DAY_OF_WEEK] && isSet[WEEK_OF_YEAR])
+ {
+ dayNumber = startOfYear(year);
+
+ // Compute from day of week plus week of year
+
+ // Find the day of the week for the first of this year. This
+ // is zero-based, with 0 being the locale-specific first day of
+ // the week. Add 1 to get the 1st day of month. Subtract
+ // getFirstDayOfWeek() to make 0-based.
+ int fdy = absoluteDayToDayOfWeek(dayNumber + 1) - getFirstDayOfWeek();
+ if (fdy < 0) fdy += 7;
+
+ // Find the start of the first week. This may be a valid date
+ // from 1..7, or a date before the first, from 0..-6. It
+ // represents the locale-specific first day of the week
+ // of the first day of the year.
+
+ // First ignore the minimal days in first week.
+ date = 1 - fdy + internalGet(DAY_OF_WEEK) - getFirstDayOfWeek();
+
+ // Adjust for minimal days in first week.
+ if ((7 - fdy) < getMinimalDaysInFirstWeek()) date += 7;
+
+ // Now adjust for the week number.
+ date += 7 * (internalGet(WEEK_OF_YEAR) - 1);
+
+ dayNumber += date;
+ }
+ else { // Not enough information
+ throw new IllegalArgumentException("Not enough fields set to calculate time");
+ }
+
+ long millis = dayNumber * DAY_MS + EPOCH_MILLIS;
+
+ // Now we can do the time portion of the conversion.
+ int millisInDay = 0;
+
+ // Hours
+ if (isSet[HOUR_OF_DAY])
+ // 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 if (isSet[HOUR])
+ {
+ // 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);
+ }
+
+ // Minutes. We use the fact that unset == 0
+ millisInDay *= 60;
+ millisInDay += internalGet(MINUTE);
+
+ // Seconds. unset == 0
+ millisInDay *= 60;
+ millisInDay += internalGet(SECOND);
+
+ // Milliseconds. unset == 0
+ millisInDay *= 1000;
+ millisInDay += internalGet(MILLISECOND);
+
+ // Now add date and millisInDay together, to make millis contain local wall
+ // millis, with no zone or DST adjustments
+ millis += millisInDay;
+
+ //
+ // Compute the time zone offset and DST offset.
+ // Since the TimeZone API expects the Gregorian year, month, etc.,
+ // We have to convert to local Gregorian time in order to
+ // figure out the time zone calculations. This is a bit slow, but
+ // it saves us from doing some *really* nasty calculations here.
+ //
+ TimeZone zone = getTimeZone();
+ int dstOffset = 0;
+
+ if (zone.useDaylightTime()) {
+ synchronized(gregorian) {
+ gregorian.setTimeZone(zone);
+ gregorian.setTime(new Date(millis)); // "millis" is local wall clock time
+ dstOffset = gregorian.get(DST_OFFSET);
+ }
+ }
+ // Store our final computed GMT time, with timezone adjustments.
+ time = millis - dstOffset - zone.getRawOffset();
+ isTimeSet = true;
+ }
+
+ /**
+ * Validates the value of the given time field.
+ */
+ private boolean boundsCheck(int value, int field)
+ {
+ return value >= getMinimum(field) && value <= getMaximum(field);
+ }
+
+
+ /**
+ * Validates the values of the set time fields.
+ */
+ private boolean validateFields()
+ {
+ for (int field = 0; field < FIELD_COUNT; field++)
+ {
+ // Ignore DATE and DAY_OF_YEAR which are handled below
+ if (field != DATE &&
+ field != DAY_OF_YEAR &&
+ isSet[field] &&
+ !boundsCheck(internalGet(field), field))
+
+ return false;
+ }
+
+ // Values differ in Least-Maximum and Maximum should be handled
+ // specially.
+ if (isSet[DATE])
+ {
+ int date = internalGet(DATE);
+ return (date >= getMinimum(DATE) &&
+ date <= monthLength(fields[YEAR], fields[MONTH]));
+ }
+
+ if (isSet[DAY_OF_YEAR])
+ {
+ int days = internalGet(DAY_OF_YEAR);
+
+ if (days < 1 || days > yearLength(internalGet(YEAR)))
+ return false;
+ }
+
+ if (isSet[YEAR])
+ {
+ int year = internalGet(YEAR);
+ if (year < 1)
+ return false;
+ }
+
+ // Handle DAY_OF_WEEK_IN_MONTH, which must not have the value zero.
+ // We've checked against minimum and maximum above already.
+ if (isSet[DAY_OF_WEEK_IN_MONTH] &&
+ 0 == internalGet(DAY_OF_WEEK_IN_MONTH)) return false;
+
+ return true;
+ }
+
+ /**
+ * Convert the time as milliseconds since 1/1/1970 to the Calendar fields
+ * such as YEAR, MONTH and DAY.
+ */
+ protected void computeFields()
+ {
+ if (areFieldsSet) return;
+
+ // The following algorithm only works for dates from the start of the Hebrew
+ // calendar onward.
+ if (time < EPOCH_MILLIS && !isLenient()) {
+ throw new IllegalArgumentException("HebrewCalendar does not handle dates before 1/1/1 AM");
+ }
+
+ //
+ // Compute the time zone offset and DST offset.
+ // Since the TimeZone API expects the Gregorian year, month, etc.,
+ // We have to convert to local Gregorian time in order to
+ // figure out the time zone calculations. This is a bit slow, but
+ // it saves us from doing some *really* nasty calculations here.
+ //
+ TimeZone zone = getTimeZone();
+ int rawOffset = zone.getRawOffset();
+ int dstOffset = 0; // Extra DST offset
+
+ if (zone.useDaylightTime()) {
+ synchronized(gregorian) {
+ gregorian.setTimeZone(zone);
+ gregorian.setTime(new Date(time));
+ dstOffset = gregorian.get(DST_OFFSET);
+ }
+ }
+
+ long localMillis = time + rawOffset + dstOffset;
+
+ // We need to find out which Hebrew year the given time is in.
+ // Once we know that, we find the time when the year started,
+ // and everything else is straightforward
+
+ long epochMillis = localMillis - EPOCH_MILLIS; // Millis since epoch
+ long d = epochMillis / DAY_MS; // Days
+ 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);
+ }
+
+ int dayOfWeek = absoluteDayToDayOfWeek((long)d);
+
+ // Now figure out which month we're in, and the date within that month
+ int yearType = yearType(year);
+ int numDays[][] = isLeapYear(year) ? LEAP_NUM_DAYS : NUM_DAYS;
+
+ int month = 0;
+ while (dayOfYear > numDays[month][yearType]) {
+ month++;
+ }
+ month--;
+ int date = dayOfYear - numDays[month][yearType];
+
+ fields[ERA] = 0;
+ fields[YEAR] = year;
+ fields[MONTH] = month;
+ fields[DATE] = date;
+
+ fields[DAY_OF_YEAR] = dayOfYear;
+ fields[DAY_OF_WEEK] = dayOfWeek;
+
+ fields[WEEK_OF_YEAR] = weekNumber(dayOfYear, dayOfWeek);
+ fields[WEEK_OF_MONTH] = weekNumber(date, dayOfWeek);
+
+ fields[DAY_OF_WEEK_IN_MONTH] = (date-1) / 7 + 1;
+
+ //long days = (long) (localMillis / DAY_MS);
+ //int millisInDay = (int) (localMillis - (days * DAY_MS));
+ //if (millisInDay < 0) millisInDay += DAY_MS;
+
+ int millisInDay = (int)(localMillis % DAY_MS);
+
+ // Fill in all time-related fields based on 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;
+ fields[HOUR] = millisInDay % 12;
+
+ fields[ZONE_OFFSET] = rawOffset;
+ fields[DST_OFFSET] = dstOffset;
+
+ areFieldsSet = true;
+
+ // Careful here: We are manually setting the isSet[] flags to true, so we
+ // must be sure that the above code actually does set all these fields.
+ for (int i=0; i<FIELD_COUNT; ++i) isSet[i] = true;
+ }
+
+ //-------------------------------------------------------------------------
+ // Functions for converting from milliseconds to field values
+ //-------------------------------------------------------------------------
+
+ // 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 number of days in the given Hebrew year
+ */
+ private static int yearLength(int year)
+ {
+ return (int)(startOfYear(year+1) - startOfYear(year));
+ }
+
+ /**
+ * 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 static int yearType(int year)
+ {
+ int yearLength = yearLength(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;
+ }
+
+ /**
+ * Returns the length of the given month in the given year
+ */
+ private static int monthLength(int year, int month)
+ {
+ switch (month) {
+ case HESHVAN:
+ case KISLEV:
+ // These two month lengths can vary
+ return MONTH_LENGTH[month][yearType(year)];
+
+ default:
+ // The rest are a fixed length
+ return MONTH_LENGTH[month][0];
+ }
+ }
+
+ /**
+ * 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 boolean isLeapYear(int year)
+ {
+ return (year * 12 + 17) % 19 >= 12;
+ }
+
+
+ static private void debug(String str) {
+ if (false) {
+ System.out.println(str);
+ }
+ }
+};
\ No newline at end of file
diff --git a/src/com/ibm/util/HebrewHoliday.java b/src/com/ibm/util/HebrewHoliday.java
new file mode 100755
index 0000000..95ecd86
--- /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: 2000/03/10 04:17:58 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util;
+
+public class HebrewHoliday extends Holiday
+{
+ private static final HebrewCalendar gCalendar = new HebrewCalendar();
+
+ /**
+ * Construct a holiday that falls on Easter Sunday every year
+ *
+ * @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");
+
+}
\ No newline at end of file
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/IBMCalendar.java b/src/com/ibm/util/IBMCalendar.java
new file mode 100755
index 0000000..f25f66a
--- /dev/null
+++ b/src/com/ibm/util/IBMCalendar.java
@@ -0,0 +1,1382 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2000, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/util/Attic/IBMCalendar.java,v $
+ * $Date: 2000/03/10 04:17:58 $
+ * $Revision: 1.5 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import java.util.TimeZone;
+import java.text.MessageFormat;
+import java.text.DateFormat;
+import com.ibm.text.DateFormatSymbols;
+import com.ibm.text.SimpleDateFormat;
+
+
+/**
+ * Calendar utility class.
+ *
+ * The API methods on this class fall into several categories:
+ * <ul>
+ * <li>Static methods for retrieving {@link java.text.DateFormat} and
+ * {@link java.text.DateFormatSymbols} objects that match a particular
+ * subclass of <code>Calendar</code>.
+ *
+ * <li>Methods that were added to {@link java.util.Calendar Calendar} in JDK 1.2 or that
+ * we hope to add in a later release.
+ *
+ * <li>Methods that make <code>Calendar</code> easier to subclass. This includes
+ * default implementations for methods declared abstract on Calendar,
+ * so that subclasses are not forced to implement them. In addition,
+ * there are several new utility methods that make it easier for
+ * subclassers to implement methods such as roll, add, computeTime,
+ * and computeFields.
+ * </ul>
+ * <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>
+ * <b>Subclassing</b>
+ * <br>
+ * It is possible to create subclasses of IBMCalendar that interpret
+ * dates according to other calendar systems that are not yet supported
+ * by Sun or IBM. In order to do so, you must do the following:
+ * <ul>
+ * <li>Override {@link #getMinimum getMinimum},
+ * {@link #getGreatestMinimum getGreatestMinimum},
+ * {@link #getMaximum getMaximum}, and
+ * {@link #getLeastMaximum getLeastMaximum} to return
+ * appropriate values for the new calendar system.
+ *
+ * <li>If there are any fields whose minimum or maximum value can vary
+ * depending on the actual date set in the calendar (e.g. the number
+ * of days in a month
+ * varies depending on the month and/or year), you must override
+ * {@link #getActualMaximum getActualMaximum} and/or
+ * {@link #getActualMinimum getActualMinimum}
+ * to take this into account.
+ *
+ * <li>Override {@link #computeTime computeTime} and {@link #computeFields computeFields}
+ * to perform the conversion from field values to milliseconds and
+ * vice-versa. These two methods are the real heart of any subclass
+ * and are typically the ones that require the most work. The protected
+ * utility method {@link #weekNumber weekNumber} is often helpful when implementing
+ * these two methods.
+ *
+ * <li>If there are any fields whose ranges are not always continuous, you
+ * must override {@link #roll roll} and {@link #add add} to take this
+ * into account. 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} 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.
+ * </ul>
+ * See the individual descriptions of the above methods for more information
+ * on their implications for subclassing.
+ *
+ * @author Laura Werner
+ */
+public abstract class IBMCalendar extends java.util.Calendar {
+
+ private static String copyright = "Copyright \u00a9 1997-1998 IBM Corp. All Rights Reserved.";
+
+ protected IBMCalendar(TimeZone zone, Locale aLocale) {
+ super(zone, aLocale);
+ }
+
+ /**
+ * Compare this object to another {@link Calendar} or to a {@link Date}.
+ * <p>
+ * @param when the {@link Calendar} or {@link Date} object to
+ * be compared against.
+ *
+ * @return true if this object's absolute time is before that
+ * represented by <code>when</code>, false otherwise.
+ *
+ * @throws IllegalArgumentException if <code>when</code> is null or is
+ * not a <code>Calendar</code> or <code>Date</code>.
+ */
+ public boolean before(Object when)
+ {
+ if (this == when) {
+ return false;
+ }
+ else if (when instanceof Calendar) {
+ return getTime().before(((Calendar)when).getTime());
+ }
+ else if (when instanceof Date) {
+ return getTime().before((Date)when);
+ } else {
+ throw new IllegalArgumentException("argument must be a non-null Calendar or Date");
+ }
+ }
+
+ /**
+ * Compare this object to another {@link Calendar} or to a {@link Date}.
+ * <p>
+ * @param when the {@link Calendar} or {@link Date} object to be compared against.
+ *
+ * @return true if this object's absolute time is after that
+ * represented by <code>when</code>, false otherwise.
+ *
+ * @throws IllegalArgumentException if <code>when</code> is null or is
+ * not a <code>Calendar</code> or <code>Date</code>.
+ */
+ public boolean after(Object when)
+ {
+ if (this == when) {
+ return false;
+ }
+ else if (when instanceof Calendar) {
+ return getTime().after(((Calendar)when).getTime());
+ }
+ else if (when instanceof Date) {
+ return getTime().after((Date)when);
+ } else {
+ throw new IllegalArgumentException("argument must be a non-null Calendar or Date");
+ }
+ }
+
+ /**
+ * Compares this object to another {@link Calendar} and returns <code>true</code>
+ * if they are the same. Unlike {@link #before before} and {@link #after after},
+ * this method
+ * compares all of the properties of the calendar rather than comparing only
+ * its time in milliseconds.
+ * <p>
+ * @param obj the {@link Calendar} object to compair against.
+ */
+ public boolean equals(Object obj)
+ {
+ if (this == obj) return true;
+ if (obj == null) return false;
+ 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());
+ }
+
+ /**
+ * Return the maximum value that this field could have, given the current date.
+ * For example, with the Gregorian date "Feb 3, 1997" and the
+ * {@link #DAY_OF_MONTH DAY_OF_MONTH} field, the actual
+ * maximum is 28; for "Feb 3, 1996" it is 29.
+ * <p>
+ * <b>Note:</b>This method has been added to {@link java.util.Calendar} in JDK 1.2; it
+ * is provided here so that 1.1 clients can take advantage of it as well.
+ * <p>
+ * <b>Subclassing:</b><br>
+ * For the {@link #WEEK_OF_YEAR WEEK_OF_YEAR}, {@link #WEEK_OF_MONTH WEEK_OF_MONTH},
+ * and {@link #DAY_OF_WEEK_IN_MONTH DAY_OF_WEEK_IN_MONTH} fields, this method
+ * calls <code>getActualMaximum(DAY_OF_YEAR)</code> or
+ * <code>getActualMaximum(DAY_OF_MONTH)</code> and then uses that value in a call to
+ * {@link #weekNumber weekNumber} to determine the result. However, for all other
+ * fields it iterates between the values returned by
+ * {@link #getLeastMaximum getLeastMaximum} and {@link #getMaximum getMaximum}
+ * to determine the actual maximum value for the field.
+ * <p>
+ * There is almost always a more efficient way to accomplish this,
+ * and thus you should almost always override this method in your subclass.
+ * For most fields, you can simply return the same thing as
+ * {@link #getMaximum getMaximum}. If your class has an internal method that
+ * calculates the number of days in a month or year, your getActualMaximum override
+ * can use those functions in its implementation. For fields that you cannot
+ * handle efficiently, you can simply call <code>super.getActualMaximum(field)</code>.
+ * <p>
+ * @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) {
+ //
+ // For the week-related fields, there's a shortcut. Since we know the
+ // current DAY_OF_WEEK and DAY_OF_MONTH or DAY_OF_YEAR, we can compute
+ // the the maximum for this field in terms of the maximum DAY_OF_*,
+ // on the theory that's easier to determine.
+ //
+ case WEEK_OF_YEAR:
+ result = weekNumber(getActualMaximum(DAY_OF_YEAR),
+ get(DAY_OF_YEAR), get(DAY_OF_WEEK));
+ break;
+
+ case WEEK_OF_MONTH:
+ result = weekNumber(getActualMaximum(DAY_OF_MONTH),
+ get(DAY_OF_MONTH), get(DAY_OF_WEEK));
+ break;
+
+ case DAY_OF_WEEK_IN_MONTH:
+ int weekLength = getMaximum(DAY_OF_WEEK) - getMinimum(DAY_OF_WEEK) + 1;
+ result = (getActualMaximum(DAY_OF_MONTH) - 1) / weekLength + 1;
+ break;
+
+ // For all other fields, do it the hard way....
+ default:
+ 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>
+ * <b>Note:</b>This method has been added to java.util.Calendar in JDK 1.2; it
+ * is provided here so that 1.1 clients can take advantage of it as well.
+ * <p>
+ * <b>Subclassing:</b><br>
+ * For the {@link #WEEK_OF_YEAR WEEK_OF_YEAR}, {@link #WEEK_OF_MONTH WEEK_OF_MONTH},
+ * and {@link #DAY_OF_WEEK_IN_MONTH DAY_OF_WEEK_IN_MONTH} fields, this method
+ * calls <code>getActualMinimum(DAY_OF_YEAR)</code> or
+ * <code>getActualMinimum(DAY_OF_MONTH)</code> and then uses that value in a call to
+ * {@link #weekNumber weekNumber} to determine the result. However, for all other
+ * fields it iterates between the values returned by
+ * {@link #getMinimum getMinimum} and {@link #getGreatestMinimum getGreatestMinimum}
+ * to determine the actual maximum value for the field.
+ * <p>
+ * There is almost always a more efficient way to accomplish this,
+ * and thus you should almost always override this method in your subclass.
+ * For most fields, you can simply return the same thing as
+ * {@link #getMinimum getMinimum}. For fields that you cannot
+ * handle efficiently, you can simply call <code>super.getActualMaximum(field)</code>.
+ * <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) {
+ //
+ // For the week-related fields, there's a shortcut. Since we know the
+ // current DAY_OF_WEEK and DAY_OF_MONTH or DAY_OF_YEAR, we can compute
+ // the the maximum for this field in terms of the maximum DAY_OF_*,
+ // on the theory that's easier to determine.
+ //
+ case WEEK_OF_YEAR:
+ result = weekNumber(getActualMinimum(DAY_OF_YEAR),
+ get(DAY_OF_YEAR), get(DAY_OF_WEEK));
+ break;
+
+ case WEEK_OF_MONTH:
+ result = weekNumber(getActualMinimum(DAY_OF_MONTH),
+ get(DAY_OF_MONTH), get(DAY_OF_WEEK));
+ break;
+
+ case DAY_OF_WEEK_IN_MONTH:
+ int weekLength = getMaximum(DAY_OF_WEEK) - getMinimum(DAY_OF_WEEK) + 1;
+ result = (getActualMinimum(DAY_OF_MONTH) - 1) / weekLength + 1;
+ break;
+
+ // For all other fields, do it the hard way....
+ default:
+ result = getActualHelper(field, getGreatestMinimum(field), getMinimum(field));
+ break;
+ }
+ return result;
+ }
+
+ private int getActualHelper(int field, int startValue, int endValue)
+ {
+ int result = startValue;
+
+ if (startValue == endValue) {
+ // if we know that the maximum value is always the same, just return it
+ result = startValue;
+ }
+ else if (startValue != endValue) {
+ // 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)this.clone();
+ work.setLenient(true);
+
+ //
+ // 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 delta = (endValue > startValue) ? 1 : -1;
+
+ startValue += delta;
+ result = startValue;
+
+ while (result != endValue) {
+ work.set(field, startValue);
+ if (work.get(field) != startValue) {
+ break;
+ } else {
+ result = startValue;
+ startValue += delta;
+ }
+ }
+ }
+ 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>IBMCalendar</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:
+ // 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
+ Date start = getTime();
+ int oldHour = internalGet(field);
+ int max = getActualMaximum(field);
+ int newHour = (oldHour + amount) % (max + 1);
+ if (newHour < 0) {
+ newHour += max + 1;
+ }
+ setTime(new Date(start.getTime() + HOUR_MS * (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:
+ // Rolling the year can involve pinning the DAY_OF_MONTH.
+ set(YEAR, internalGet(YEAR) + 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 * DAY_MS; // Scale up from days to millis
+ long min2 = time - (internalGet(DAY_OF_YEAR) - 1) * DAY_MS;
+ int yearLength = getActualMaximum(DAY_OF_YEAR);
+ time = (time + delta - min2) % (yearLength*DAY_MS);
+ if (time < 0) time += yearLength*DAY_MS;
+ setTimeInMillis(time + min2);
+ return;
+ }
+ case DAY_OF_WEEK:
+ {
+ // 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 * DAY_MS; // 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(DAY_OF_WEEK) - getFirstDayOfWeek();
+ if (leadDays < 0) leadDays += 7;
+ long min2 = time - leadDays * DAY_MS;
+ time = (time + delta - min2) % WEEK_MS;
+ if (time < 0) time += WEEK_MS;
+ 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 * WEEK_MS; // 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 * WEEK_MS;
+ long gap2 = WEEK_MS * (preWeeks + postWeeks + 1); // Must add 1!
+ // Roll within this range
+ time = (time + delta - min2) % gap2;
+ if (time < 0) time += gap2;
+ setTimeInMillis(time + min2);
+ return;
+ }
+ default:
+ // Other fields cannot be rolled by this method
+ throw new IllegalArgumentException("IBMCalendar.roll: 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>IBMCalendar</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!
+
+ long delta = amount;
+
+ switch (field) {
+ case YEAR:
+ {
+ int year = get(YEAR) + amount;
+ set(YEAR, year);
+ pinField(DAY_OF_MONTH);
+ return;
+ }
+
+ case MONTH:
+ // About the best we can do for a default implementation is
+ // assume a constant number of months per year. Subclasses
+ // with a variable number of months will have to do this
+ // one themselves
+ {
+ int month = this.get(MONTH) + amount;
+ int year = get(YEAR);
+ int length = getMaximum(MONTH) + 1;
+
+ if (month >= 0) {
+ set(YEAR, year + month/length);
+ set(MONTH, month % length);
+ } else {
+ set(YEAR, year + (month + 1)/length - 1);
+ month %= length;
+ if (month < 0) {
+ month += length;
+ }
+ set(MONTH, month);
+ }
+ pinField(DAY_OF_MONTH);
+ return;
+ }
+
+ case WEEK_OF_YEAR:
+ case WEEK_OF_MONTH:
+ case DAY_OF_WEEK_IN_MONTH:
+ delta *= WEEK_MS;
+ break;
+
+ case AM_PM:
+ delta *= 12 * HOUR_MS;
+ break;
+
+ case DAY_OF_MONTH:
+ case DAY_OF_YEAR:
+ case DAY_OF_WEEK:
+ delta *= DAY_MS;
+ break;
+
+ case HOUR_OF_DAY:
+ case HOUR:
+ delta *= HOUR_MS;
+ break;
+
+ case MINUTE:
+ delta *= MINUTE_MS;
+ break;
+
+ case SECOND:
+ delta *= SECOND_MS;
+ break;
+
+ case MILLISECOND:
+ break;
+
+ default:
+ throw new IllegalArgumentException("IBMCalendar.add: field not supported");
+ }
+ setTimeInMillis(getTimeInMillis() + delta);
+ }
+
+
+ /**
+ * Return the name of this calendar in the language of the given locale.
+ */
+ public String getDisplayName(Locale loc) {
+ return this.getClass().getName();
+ }
+
+ //-------------------------------------------------------------------------
+ // 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>
+ * <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 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.
+ *
+ * @see java.text.DateFormat#getDateInstance
+ */
+ static public DateFormat getDateFormat(Calendar cal, int dateStyle, Locale locale)
+ {
+ return getDateTimeFormat(cal, locale, dateStyle, -1);
+ }
+
+ /**
+ * 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 java.text.DateFormat#getTimeInstance
+ */
+ static public DateFormat getTimeFormat(Calendar cal, int timeStyle, Locale locale)
+ {
+ return getDateTimeFormat(cal, locale, -1, timeStyle);
+ }
+
+ /**
+ * 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 java.text.DateFormat#getDateTimeInstance
+ */
+ static public DateFormat getDateTimeFormat(Calendar cal, int dateStyle,
+ int timeStyle, Locale locale)
+ {
+ return getDateTimeFormat(cal, locale, dateStyle, timeStyle);
+ }
+
+ /**
+ * Get the {@link DateFormatSymbols} object that should be used to format a
+ * calendar system's dates in the given locale.
+ * <p>
+ * <b>Note:</b> When this functionality is moved into the core JDK, this method
+ * will probably be replace by a new constructor on <tt>DateFormatSymbols</tt>.
+ * <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 java.text.DateFormatSymbols#DateFormatSymbols(java.util.Locale)
+ */
+ static public DateFormatSymbols getDateFormatSymbols(Calendar cal,
+ Locale locale)
+ {
+ ResourceBundle bundle = null;
+ try {
+ bundle = getDateFormatBundle(cal, locale);
+ }
+ catch (MissingResourceException e) {
+ if (!(cal instanceof GregorianCalendar)) {
+ // Ok for symbols to be missing for a Gregorian calendar, but
+ // not for any other type.
+ throw e;
+ }
+ }
+ return getDateFormatSymbols(null, bundle, locale);
+ }
+
+ /**
+ * 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 java.text.DateFormatSymbols#DateFormatSymbols
+ */
+ static protected DateFormatSymbols getDateFormatSymbols(DateFormatSymbols result,
+ 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
+ if (result == null) {
+ result = new DateFormatSymbols(locale);
+ }
+
+ //
+ // 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");
+ result.setWeekdays(temp);
+ result.setShortWeekdays(temp);
+
+ temp = bundle.getStringArray("DayAbbreviations");
+ result.setShortWeekdays( temp );
+ }
+ catch (MissingResourceException e) {
+ }
+
+ try {
+ String[] temp = bundle.getStringArray("MonthNames");
+ result.setMonths( temp );
+ result.setShortMonths( temp );
+
+ temp = bundle.getStringArray("MonthAbbreviations");
+ result.setShortMonths( temp );
+ }
+ catch (MissingResourceException e) {
+ }
+
+ try {
+ String[] temp = bundle.getStringArray("Eras");
+ result.setEras( temp );
+ }
+ catch (MissingResourceException e) {
+ }
+ }
+ return result;
+ }
+
+ protected DateFormatSymbols getDateFormatSymbols(Locale locale) {
+ return getDateFormatSymbols(null, getDateFormatBundle(this, locale), locale);
+ }
+
+ /**
+ * Private utility method to retrive a date and/or time format
+ * for the specified calendar and locale. This method has knowledge of
+ * (and is partly copied from) the corresponding code in SimpleDateFormat,
+ * but it knows how to find the right resource bundle based on the calendar class.
+ * <p>
+ * @param cal The calendar system whose date/time format is desired.
+ *
+ * @param timeStyle The type of time format desired. This can be
+ * <code>DateFormat.SHORT</code>, etc, or -1 if the time
+ * of day should not be included in the format.
+ *
+ * @param dateStyle The type of date format desired. This can be
+ * <code>DateFormat.SHORT</code>, etc, or -1 if the date
+ * should not be included in the format.
+ *
+ * @param loc The locale for which the date/time format is desired.
+ *
+ * @see java.text.DateFormat#getDateTimeInstance
+ */
+ static private DateFormat getDateTimeFormat(Calendar cal, Locale loc,
+ int dateStyle, int timeStyle)
+ {
+ if (cal instanceof IBMCalendar) {
+ return ((IBMCalendar)cal).getDateTimeFormat(dateStyle,timeStyle,loc);
+ } else {
+ return formatHelper(cal, loc, dateStyle, timeStyle);
+ }
+ }
+
+ protected DateFormat getDateTimeFormat(int dateStyle, int timeStyle, Locale loc) {
+ return formatHelper(this, loc, dateStyle, timeStyle);
+ }
+
+ 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;
+ DateFormatSymbols symbols = null;
+
+ ResourceBundle bundle = getDateFormatBundle(cal, loc);
+
+ if (bundle != null) {
+ if (cal instanceof IBMCalendar) {
+ symbols = ((IBMCalendar)cal).getDateFormatSymbols(loc);
+ } else {
+ symbols = getDateFormatSymbols(null, bundle, loc);
+ }
+
+ 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 = new SimpleDateFormat(pattern, symbols);
+ } catch (MissingResourceException e) {
+ // No custom patterns
+ if (dateStyle == -1) {
+ result = SimpleDateFormat.getTimeInstance(timeStyle, loc);
+ } else if (timeStyle == -1) {
+ result = SimpleDateFormat.getDateInstance(dateStyle, loc);
+ } else {
+ result = SimpleDateFormat.getDateTimeInstance(dateStyle, timeStyle, loc);
+ }
+ ((java.text.SimpleDateFormat)result).setDateFormatSymbols(oldStyleSymbols(symbols, loc));
+ }
+ } else {
+ if (dateStyle == -1) {
+ result = SimpleDateFormat.getTimeInstance(timeStyle, loc);
+ } else if (timeStyle == -1) {
+ result = SimpleDateFormat.getDateInstance(dateStyle, loc);
+ } else {
+ result = SimpleDateFormat.getDateTimeInstance(dateStyle, timeStyle, loc);
+ }
+ }
+ result.setCalendar(cal);
+ return result;
+ }
+
+ 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 protected ResourceBundle getDateFormatBundle(Calendar cal, Locale locale)
+ throws MissingResourceException
+ {
+ // Find the calendar's class name, which we're going to use to construct the
+ // resource bundle name.
+ String fullName = cal.getClass().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
+ 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)) {
+ // Ok for symbols to be missing for a Gregorian calendar, but
+ // not for any other type.
+ throw e;
+ }
+ }
+ 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(fields[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)
+ {
+ int length = getMaximum(DAY_OF_WEEK) - getMinimum(DAY_OF_WEEK) + 1;
+
+ // 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) % length;
+ if (periodStartDayOfWeek < 0) periodStartDayOfWeek += length;
+
+ // 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)/length;
+
+ // 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 ((length - 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
+ //-------------------------------------------------------------------------
+
+ private static final int SECOND_MS = 1000;
+ private static final int MINUTE_MS = 60*SECOND_MS;
+ private static final int HOUR_MS = 60*MINUTE_MS;
+ private static final long DAY_MS = 24*HOUR_MS;
+ private static final long WEEK_MS = 7*DAY_MS;
+}
diff --git a/src/com/ibm/util/IslamicCalendar.java b/src/com/ibm/util/IslamicCalendar.java
new file mode 100755
index 0000000..4725c82
--- /dev/null
+++ b/src/com/ibm/util/IslamicCalendar.java
@@ -0,0 +1,920 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:17:59 $
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.Locale;
+import java.util.TimeZone;
+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 java.util.GregorianCalendar
+ *
+ * @author Laura Werner
+ * @version 1.0
+ */
+public class IslamicCalendar extends IBMCalendar {
+
+ 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;
+
+
+ // Useful millisecond constants
+ private static final int SECOND_MS = 1000;
+ private static final int MINUTE_MS = 60*SECOND_MS;
+ private static final int HOUR_MS = 60*MINUTE_MS;
+ private static final long DAY_MS = 24*HOUR_MS;
+ private static final long WEEK_MS = 7*DAY_MS;
+
+ 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
+ computeTime();
+ areFieldsSet = false;
+ civil = beCivil;
+ }
+ }
+
+ /**
+ * 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
+ //-------------------------------------------------------------------------
+
+ // The minimum and maximum values for all of the fields, for validation
+ private static final int MinMax[][] = {
+ // Min Greatest Min Least Max Max
+ { 0, 0, 0, 0 }, // ERA
+ { 1, 1, 5000000, 5000000 }, // YEAR
+ { 0, 0, 11, 11 }, // MONTH
+ { 0, 0, 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
+ { 1, 1, 7, 7 }, // DAY_OF_WEEK
+ { -1, -1, 4, 5 }, // 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*HOUR_MS, -12*HOUR_MS, 12*HOUR_MS, 12*HOUR_MS }, // ZONE_OFFSET
+ { 0, 0, 1*HOUR_MS, 1*HOUR_MS }, // DST_OFFSET
+ };
+
+ /**
+ * Returns minimum value for the given field.
+ * For example, for {@link #DAY_OF_MONTH DAY_OF_MONTH} this method returns 1,
+ *
+ * @param field The field whose minimum value is desired.
+ *
+ * @see java.util.Calendar#getMinimum
+ */
+ public int getMinimum(int field)
+ {
+ return MinMax[field][0];
+ }
+
+ /**
+ * Returns highest minimum value for the given field. For the Islamic
+ * calendar, this always returns the same result as {@link #getMinimum}.
+ *
+ * @param field The field whose greatest minimum value is desired.
+ *
+ * @see #getMinimum
+ */
+ public int getGreatestMinimum(int field)
+ {
+ return MinMax[field][1];
+ }
+
+ /**
+ * Returns maximum value for the given field
+ * For the {@link #DAY_OF_MONTH DAY_OF_MONTH} field, this method returns 30.
+ *
+ * @param field The field whose maximum value is desired.
+ *
+ * @see #getLeastMaximum
+ * @see #getActualMaximum
+ */
+ public int getMaximum(int field)
+ {
+ return MinMax[field][3];
+ }
+
+ /**
+ * Returns lowest maximum value for the given field. For most fields,
+ * this returns the same result as {@link #getMaximum getMaximum}. However,
+ * for some fields this can be a lower number. For example,
+ * the maximum {@link #DAY_OF_MONTH DAY_OF_MONTH} in the Islamic caleandar varies
+ * from month to month, so this method returns 29 while <code>getMaximum</code>
+ * returns 30.
+ *
+ * @param field The field whose least maximum value is desired.
+ *
+ * @see #getMaximum
+ * @see #getActualMaximum
+ */
+ public int getLeastMaximum(int field)
+ {
+ return MinMax[field][2];
+ }
+
+ /**
+ * Return the maximum value that a field could have, given the current date.
+ * For example, for the {@link #DAY_OF_MONTH DAY_OF_MONTH} field the actual maximum varies
+ * depending on the length of the month, which in turn varies according
+ * to either the civil calendar cycle or the actual time of the next new moon.
+ *
+ * @param field The field whose maximum value is desired.
+ *
+ * @see #getMaximum
+ * @see #getLeastMaximum
+ */
+ public int getActualMaximum(int field) {
+ if (!isSet[YEAR] || !isSet[MONTH]) {
+ complete();
+ }
+ switch (field) {
+ case DAY_OF_MONTH:
+ return monthLength(fields[YEAR], fields[MONTH]);
+
+ case DAY_OF_YEAR:
+ return yearLength(fields[YEAR]);
+
+ default:
+ return super.getActualMaximum(field);
+ }
+ }
+
+
+ //-------------------------------------------------------------------------
+ // Functions for converting from field values to milliseconds....
+ //-------------------------------------------------------------------------
+
+ /**
+ * Converts time field values to UTC as milliseconds.
+ *
+ * @exception IllegalArgumentException if a field has an invalid value
+ * and {@link #isLenient isLenient} returns <code>false</code>.
+ */
+ protected void computeTime()
+ {
+ if (isTimeSet) return;
+
+ if (!isLenient() && !validateFields())
+ throw new IllegalArgumentException();
+
+ if (isSet[ERA] && internalGet(ERA) != 0)
+ throw new IllegalArgumentException();
+
+ // We need the time zone offset for some of the calculations below.
+ // We use the TimeZone object, unless the user has explicitly set the
+ // ZONE_OFFSET field.
+ TimeZone zone = getTimeZone();
+ int zoneOffset = zone.getRawOffset();
+
+ // The year is required. We don't have to check if it's unset,
+ // because if it is, by definition it will be 0.
+
+ int year = internalGet(YEAR);
+
+ if (year <= 0 && !isLenient())
+ throw new IllegalArgumentException();
+
+ long dayNumber = 0, date = 0;
+
+ // The following code is somewhat convoluted. The various nested
+ // if's handle the different cases of what fields are present.
+ if (isSet[MONTH] &&
+ (isSet[DATE] ||
+ (isSet[DAY_OF_WEEK] &&
+ (isSet[WEEK_OF_MONTH] ||
+ isSet[DAY_OF_WEEK_IN_MONTH])
+ )
+ ))
+ {
+ // We have the month specified. Figure out when that month starts
+ int month = internalGet(MONTH);
+ dayNumber = monthStart(year, month);
+
+ if (isSet[DATE])
+ {
+ date = internalGet(DATE);
+ }
+ else
+ {
+ // Compute from day of week plus week number or from the day of
+ // week plus the day of week in month. The computations are
+ // almost identical.
+
+ // Find the day of the week for the first of this month. This
+ // is zero-based, with 0 being the locale-specific first day of
+ // the week. Add 1 to get the 1st day of month. Subtract
+ // getFirstDayOfWeek() to make 0-based.
+
+ int fdm = absoluteDayToDayOfWeek(dayNumber + 1) - getFirstDayOfWeek();
+ if (fdm < 0) fdm += 7;
+
+ // Find the start of the first week. This will be a date from
+ // 1..-6. It represents the locale-specific first day of the
+ // week of the first day of the month, ignoring minimal days in
+ // first week.
+ date = 1 - fdm + internalGet(DAY_OF_WEEK) - getFirstDayOfWeek();
+
+ if (isSet[WEEK_OF_MONTH])
+ {
+ // Adjust for minimal days in first week.
+ if ((7 - fdm) < getMinimalDaysInFirstWeek()) date += 7;
+
+ // Now adjust for the week number.
+ date += 7 * (internalGet(WEEK_OF_MONTH) - 1);
+ }
+ else
+ {
+ // Adjust into the month, if needed.
+ if (date < 1) date += 7;
+
+ // We are basing this on the day-of-week-in-month. The only
+ // trickiness occurs if the day-of-week-in-month is
+ // negative.
+ int dim = internalGet(DAY_OF_WEEK_IN_MONTH);
+ 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.
+ date += ((monthLength(year, month) - date) / 7 + dim + 1) * 7;
+ }
+ }
+ }
+ }
+ else if (isSet[DAY_OF_YEAR]) {
+ dayNumber = yearStart(year) + internalGet(DAY_OF_YEAR);
+ }
+ else if (isSet[DAY_OF_WEEK] && isSet[WEEK_OF_YEAR])
+ {
+ dayNumber = yearStart(year);
+
+ // Compute from day of week plus week of year
+
+ // Find the day of the week for the first of this year. This
+ // is zero-based, with 0 being the locale-specific first day of
+ // the week. Add 1 to get the 1st day of month. Subtract
+ // getFirstDayOfWeek() to make 0-based.
+ int fdy = absoluteDayToDayOfWeek(dayNumber + 1) - getFirstDayOfWeek();
+ if (fdy < 0) fdy += 7;
+
+ // Find the start of the first week. This may be a valid date
+ // from 1..7, or a date before the first, from 0..-6. It
+ // represents the locale-specific first day of the week
+ // of the first day of the year.
+
+ // First ignore the minimal days in first week.
+ date = 1 - fdy + internalGet(DAY_OF_WEEK) - getFirstDayOfWeek();
+
+ // Adjust for minimal days in first week.
+ if ((7 - fdy) < getMinimalDaysInFirstWeek()) date += 7;
+
+ // Now adjust for the week number.
+ date += 7 * (internalGet(WEEK_OF_YEAR) - 1);
+
+ dayNumber += date;
+ } else { // Not enough information
+ throw new IllegalArgumentException();
+ }
+
+ long millis = dayNumber * DAY_MS + HIJRA_MILLIS;
+
+ // Add in the days we calculated above
+ millis += (date - 1) * DAY_MS;
+
+ // Now we can do the time portion of the conversion.
+
+ int millisInDay = 0;
+
+ // Hours
+ if (isSet[HOUR_OF_DAY]) {
+ // 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 if (isSet[HOUR])
+ {
+ // 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);
+ }
+
+ // Minutes. We use the fact that unset == 0
+ millisInDay *= 60;
+ millisInDay += internalGet(MINUTE);
+
+ // Seconds. unset == 0
+ millisInDay *= 60;
+ millisInDay += internalGet(SECOND);
+
+ // Milliseconds. unset == 0
+ millisInDay *= 1000;
+ millisInDay += internalGet(MILLISECOND);
+
+ // Add millis and millisInDay together, to make millis contain the GMT time
+ // computed so far, with no DST adjustments
+ millis += millisInDay;
+
+ int dstOffset = 0;
+
+ //
+ // Compute the time zone offset and DST offset.
+ // Since the TimeZone API expects the Gregorian year, month, etc.,
+ // We have to convert to local Gregorian time in order to
+ // figure out the time zone calculations. This is a bit slow, but
+ // it saves us from doing some *really* nasty calculations here.
+ //
+ if (getTimeZone().useDaylightTime())
+ {
+ synchronized(gregorian) {
+ gregorian.setTimeZone(zone);
+ gregorian.setTime(new Date(millis));
+ dstOffset = gregorian.get(DST_OFFSET);
+ }
+ }
+
+ // Store our final computed GMT time, with DST adjustments.
+ time = millis - zoneOffset - dstOffset;
+ isTimeSet = true;
+ }
+
+ /**
+ * Validates the values of the set time fields.
+ */
+ private boolean validateFields()
+ {
+ for (int field = 0; field < FIELD_COUNT; field++)
+ {
+ // Ignore DATE and DAY_OF_YEAR which are handled below
+ if (isSet[field] &&
+ !boundsCheck(internalGet(field), field))
+
+ return false;
+ }
+
+ if (isSet[YEAR])
+ {
+ int year = internalGet(YEAR);
+ if (year < 1)
+ return false;
+ }
+
+ // Handle DAY_OF_WEEK_IN_MONTH, which must not have the value zero.
+ // We've checked against minimum and maximum above already.
+ if (isSet[DAY_OF_WEEK_IN_MONTH] &&
+ 0 == internalGet(DAY_OF_WEEK_IN_MONTH)) return false;
+
+ return true;
+ }
+
+ /**
+ * Validates the value of the given time field.
+ */
+ private boolean boundsCheck(int value, int field)
+ {
+ return value >= getMinimum(field) && value <= getMaximum(field);
+ }
+
+
+ //-------------------------------------------------------------------------
+ // Functions for converting from milliseconds to field values
+ //-------------------------------------------------------------------------
+
+ /**
+ * Converts UTC as milliseconds to time field values.
+ * The time is <em>not</em>
+ * recomputed first; to recompute the time, then the fields, call the
+ * {@link #complete} method.
+ */
+ protected void computeFields()
+ {
+ if (areFieldsSet) return;
+
+ // The following algorithm only works for dates after the Hijra (16 July AD 622)
+ if (time < HIJRA_MILLIS && !isLenient()) {
+ throw new IllegalArgumentException("IslamicCalendar does not handle dates before 1 AH");
+ }
+
+ //
+ // Compute the time zone offset and DST offset.
+ // Since the TimeZone API expects the Gregorian year, month, etc.,
+ // We have to convert to local Gregorian time in order to
+ // figure out the time zone calculations. This is a bit slow, but
+ // it saves us from doing some *really* nasty calculations here.
+ //
+ TimeZone zone = getTimeZone();
+ int rawOffset = zone.getRawOffset(); // Not including DST
+ int dstOffset = 0;
+ if (zone.useDaylightTime())
+ {
+ synchronized (gregorian) {
+ gregorian.setTimeZone(zone);
+ gregorian.setTime(new Date(time));
+ dstOffset += gregorian.get(DST_OFFSET);
+ }
+ }
+ long localMillis = time + rawOffset + dstOffset;
+
+ long days = (localMillis - HIJRA_MILLIS) / DAY_MS;
+ int millisInDay = (int)(localMillis % DAY_MS);
+
+ if (civil) {
+ // Use the civil calendar approximation, which is just arithmetic
+ int year = (int)Math.floor( (30 * days + 10646) / 10631.0 );
+ int month = (int)Math.ceil((days - 29 - yearStart(year)) / 29.5 );
+ month = Math.min(month, 11);
+
+ int date = (int)(days - monthStart(year, month)) + 1;
+
+ fields[YEAR] = year;
+ fields[MONTH] = month;
+ fields[DATE] = date;
+ } else {
+ // Guess at the number of elapsed full months since the epoch
+ int months = (int)Math.floor(days / CalendarAstronomer.SYNODIC_MONTH);
+
+ long start = (long)Math.floor(months * CalendarAstronomer.SYNODIC_MONTH - 1);
+
+ if ( days - start >= 28 && MoonAge(time) > 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 ((start = trueMonthStart(months)) > days) {
+ // If it was after the date in question, back up a month and try again
+ months--;
+ }
+
+ fields[YEAR] = months / 12 + 1;
+ fields[MONTH] = months % 12;
+ fields[DATE] = (int)(days - start) + 1;
+
+ }
+ fields[ERA] = 0;
+
+ // Calculate the day of the week.
+ int dayOfWeek = absoluteDayToDayOfWeek(days);
+ fields[DAY_OF_WEEK] = dayOfWeek;
+ fields[WEEK_OF_MONTH] = weekNumber(fields[DATE], dayOfWeek);
+ fields[DAY_OF_WEEK_IN_MONTH] = (fields[DATE]-1) / 7 + 1;
+
+ // Now figure out the day of the year.
+ int dayOfYear = (int)(days - monthStart(fields[YEAR], fields[MONTH]) + 1);
+
+ fields[DAY_OF_YEAR] = dayOfYear;
+ fields[WEEK_OF_YEAR] = weekNumber(dayOfYear, dayOfWeek);
+
+ // Fill in all time-related fields based on 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;
+ fields[HOUR] = millisInDay % 12;
+
+ fields[ZONE_OFFSET] = rawOffset;
+ fields[DST_OFFSET] = dstOffset;
+
+ areFieldsSet = true;
+
+ // Careful here: We are manually setting the isSet[] flags to true, so we
+ // must be sure that the above code actually does set all these fields.
+ for (int i=0; i<FIELD_COUNT; ++i) isSet[i] = true;
+ }
+
+ //-------------------------------------------------------------------------
+ // 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 number of days in the given Islamic year
+ */
+ private final int yearLength(int year)
+ {
+ if (civil) {
+ return 354 + (civilLeapYear(year) ? 1 : 0);
+ } else {
+ int month = 12*(year-1);
+ return (int)(trueMonthStart(month + 12) - trueMonthStart(month));
+ }
+ }
+
+ /**
+ * 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);
+ }
+ }
+
+ /**
+ * Return the length (in days) of the given month.
+ *
+ * @param year The hijri year
+ * @param year The hijri month, 0-based
+ */
+ private final int monthLength(int year, int month)
+ {
+ int length = 0;
+
+ if (civil) {
+ length = 29 + (month+1) % 2;
+ if (month == DHU_AL_HIJJAH && civilLeapYear(year)) {
+ length++;
+ }
+ } else {
+ month = 12*(year-1) + month;
+ length = (int)( trueMonthStart(month+1) - trueMonthStart(month) );
+ }
+ return length;
+ }
+
+ /**
+ * 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) * DAY_MS;
+
+ double age = MoonAge(origin);
+
+ if (MoonAge(origin) >= 0) {
+ // The month has already started
+ do {
+ origin -= DAY_MS;
+ age = MoonAge(origin);
+ } while (age >= 0);
+ }
+ else {
+ // Preceding month has not ended yet.
+ do {
+ origin += DAY_MS;
+ age = MoonAge(origin);
+ } while (age < 0);
+ }
+
+ start = (origin - HIJRA_MILLIS) / DAY_MS + 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....
+ //
+
+ // We need a GregorianCalendar object for doing time zone calculations
+ private static GregorianCalendar gregorian = new GregorianCalendar();
+
+ // 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;
+
+ static private void debug(String str) {
+ if (true) {
+ System.out.println(str);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/com/ibm/util/JapaneseCalendar.java b/src/com/ibm/util/JapaneseCalendar.java
new file mode 100755
index 0000000..8072c86
--- /dev/null
+++ b/src/com/ibm/util/JapaneseCalendar.java
@@ -0,0 +1,573 @@
+/*
+ *******************************************************************************
+ * 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/03/10 04:17:59 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+package com.ibm.util;
+
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.Locale;
+import java.util.SimpleTimeZone;
+import java.util.TimeZone;
+
+/**
+ * <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 java.util.GregorianCalendar
+ *
+ * @author Laura Werner
+ */
+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) {
+ super(TimeZone.getDefault(), Locale.getDefault());
+ 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, eras.length - 1);
+ }
+
+ /**
+ * 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, eras.length - 1);
+ }
+
+ /**
+ * Override of the <code>GregorianCalendar</code> method that computes the
+ * fields such as YEAR, MONTH, and DATE from the date in milliseconds
+ * since 1/1/1970 AD.
+ * <p>
+ * This method calls {@link GregorianCalendar#computeFields} to do most
+ * of the work, then determines the imperial era corresponding to the
+ * Gregorian date and adjusts the {@link #YEAR YEAR} and {@link #ERA ERA}
+ * fields accordingly.
+ */
+ protected void computeFields() {
+ // Let GregorianCalendar do its thing.
+ super.computeFields();
+
+ fromGregorian();
+
+ //
+ // If the date was too early for this calendar, throw an exception,
+ // but only after we've made all the fields consistent
+ //
+ if (fields[YEAR] < 1 && !isLenient()) {
+ throw new IllegalArgumentException("Year out of range");
+ }
+ }
+
+ /**
+ * Override of the <code>GregorianCalendar</code> method that computes the
+ * elapsed time in milliseconds since 1/1/1970 AD from the fields such
+ * as YEAR, MONTH, and DATE.
+ * <p>
+ * This method adjusts the {@link #YEAR YEAR} and {@link #ERA ERA} from their
+ * values in the Japanese calendar to the corresponding Gregorian values, calls
+ * {@link GregorianCalendar#computeTime} to do the real millisecond
+ * calculation, and then restores the Japanese <code>YEAR</code> and
+ * <code>ERA</code>.
+ */
+ protected void computeTime() {
+ int year = fields[YEAR];
+ int era = fields[ERA];
+
+ // If we're in strict mode, make sure that the year actually
+ // falls within the era, i.e. isn't < 1 or > era length
+ if (era < 0 || era >= eras.length) {
+ throw new IllegalArgumentException("Era out of range");
+ }
+ if (!isLenient() && (year < 1
+ || era < eras.length && year > (eras[(era+1)*3] - eras[era*3] + 1))) {
+ throw new IllegalArgumentException("Year out of range");
+ }
+
+ // Adjust the year and era to the corresponding Gregorian values
+ toGregorian();
+ try {
+ // Let GregorianCalendar do its thing.
+ super.computeTime();
+ }
+ finally {
+ // Set the year and era back to the original values
+ fields[YEAR] = year;
+ fields[ERA] = era;
+ }
+ }
+
+ public void add(int field, int amount) {
+ toGregorian();
+ try {
+ super.add(field, amount);
+ }
+ finally {
+ fromGregorian();
+ }
+ }
+
+ public void roll(int field, boolean up) {
+ toGregorian();
+ try {
+ super.roll(field, up);
+ }
+ finally {
+ fromGregorian();
+ }
+ }
+
+ //-------------------------------------------------------------------------
+ // Methods for converting between Gregorian and Buddhist calendars
+ //-------------------------------------------------------------------------
+
+ /**
+ * Convert the YEAR and ERA fields from Japanese to Gregorian values
+ * Return the (Buddhist) value of the YEAR field on input;
+ */
+ private void toGregorian() {
+ int year = fields[YEAR] + eras[fields[ERA] * 3] - 1;
+ int era = AD;
+
+ if (year < 1) {
+ year = 1 - year;
+ era = BC;
+ }
+ fields[ERA] = era;
+ fields[YEAR] = year;
+ }
+
+ /**
+ * Adjust the year and era from Gregorian to Japanese values
+ */
+ private void fromGregorian() {
+ // Figure out which emperor's reign we're in, and adjust the
+ // year and era accordingly.
+ int year = fields[ERA] == AD ? fields[YEAR] : 1 - fields[YEAR];
+
+ // Binary search...
+ int low = 0, high = eras.length / 3;
+
+ while (low < high - 1) {
+ int i = (low + high + 1) / 2;
+
+ int diff = year - eras[i*3 + 0];
+ if (diff == 0) {
+ // Years were the same; compare the months. In the eras
+ // array months are 1-based for easier maintenance.
+ diff = fields[MONTH] - (eras[i*3 + 1] - 1);
+ }
+ if (diff == 0) {
+ diff = fields[DATE] - 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.
+ fields[ERA] = low;
+ fields[YEAR] = year - eras[low*3 + 0] + 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 era starting on Sept. 8, 1868 AD */
+ static public final int MEIJI = eras.length - 4;
+
+ /** Constant for the era starting on July 30, 1912 AD */
+ static public final int TAISHO = eras.length - 3;
+
+ /** Constant for the era starting on Dec. 25, 1926 AD */
+ static public final int SHOWA = eras.length - 2;
+
+ /** Constant for the era starting on Jan. 7, 1989 AD */
+ static public final int HEISEI = eras.length - 1;
+};
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..30e39bb
--- /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/03/10 04:17:59 $
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util;
+
+import java.util.Date;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.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..ccf9086
--- /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/10 04:17:59 $
+ * $Revision: 1.3 $
+ *
+ *****************************************************************************************
+ */
+
+package com.ibm.util;
+
+import java.util.Date;
+import java.util.Calendar;
+import java.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/Utility.java b/src/com/ibm/util/Utility.java
new file mode 100755
index 0000000..fdab765
--- /dev/null
+++ b/src/com/ibm/util/Utility.java
@@ -0,0 +1,636 @@
+/*
+ *******************************************************************************
+ * 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: 2000/03/10 04:18:00 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+
+ /**
+ * Format a String for representation in a source file. This includes
+ * breaking it into lines 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("+\n");
+ 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();
+ }
+}
+
diff --git a/src/com/ibm/util/resources/BuddhistCalendarSymbols.java b/src/com/ibm/util/resources/BuddhistCalendarSymbols.java
new file mode 100755
index 0000000..07f95ce
--- /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/03/10 04:18:00 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+};
\ No newline at end of file
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..d03d817
--- /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/03/10 04:18:00 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+};
\ No newline at end of file
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..2a3a333
--- /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/03/10 04:18:00 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+};
\ No newline at end of file
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..8ce2bf9
--- /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/03/10 04:18:00 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+};
\ No newline at end of file
diff --git a/src/com/ibm/util/resources/HebrewCalendarSymbols.java b/src/com/ibm/util/resources/HebrewCalendarSymbols.java
new file mode 100755
index 0000000..14898b7
--- /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/03/10 04:18:00 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+};
\ No newline at end of file
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..48a88ee
--- /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/03/10 04:18:01 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+};
\ No newline at end of file
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..b3befa0
--- /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/03/10 04:18:01 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+};
\ No newline at end of file
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..16908fc
--- /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/03/10 04:18:01 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+};
\ No newline at end of file
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..ac78f23
--- /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/03/10 04:18:01 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+};
\ No newline at end of file
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..ebceb36
--- /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/03/10 04:18:01 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+};
\ No newline at end of file
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..12f9a51
--- /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/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 extends ListResourceBundle
+{
+ static private final Object[][] fContents =
+ {
+ { "Armistice Day", "v
benhvile" },
+ { "Ascension", "himmelfart" },
+ { "Boxing Day", "anden juledag" },
+ { "Christmas Eve", "juleaften" },
+ { "Easter", "p
ske" },
+ { "Epiphany", "helligtrekongersdag" },
+ { "Good Friday", "langfredag" },
+ { "Halloween", "allehelgensaften" },
+ { "Maundy Thursday", "skrtorsdag" },
+ { "Palm Sunday", "palmes°ndag" },
+ { "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..9bbef32
--- /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/03/10 04:18:02 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+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 Himmelfahrt" },
+ { "Boxing Day", "2. Weihnachtstag" },
+ { "Carnival", "Karneval" },
+ { "Christmas", "Weihnachtstag" },
+ { "Civic Holiday", "Brgerfeiertag" },
+ { "Constitution Day", "Verfassungstag" },
+ { "Corpus Christi", "Fronleichnam" },
+ { "Day of Prayer and Repentance", "Bu- und Bettag" },
+ { "Easter Monday", "Ostermonntag" },
+ { "Easter Sunday", "Ostersonntag" },
+ { "Epiphany", "Heilige 3 K÷nige" },
+ { "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 Empfngnis" },
+ { "Independence Day", "Unabhngigkeitstag" },
+ { "Labor Day", "Tag der Arbeit" },
+ { "Liberation Day", "Befreiungstag" },
+ { "Mardi Gras", "Faschingsdienstag" },
+ { "Maundy Thursday", "Grndonnerstag" },
+ { "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", "Prsidentstag" },
+ { "Remembrance Day", "Volkstrauertag" },
+ { "Revolution Day", "Jahrestag der Revolution" },
+ { "Rose Monday", "Rosenmontag" },
+ { "St. Stephen's Day", "Stephanitag" },
+ { "Shrove Tuesday", "Faschingsdienstag" },
+ { "Spring Holiday", "Tag des Frhlings" },
+ { "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..ed3d872
--- /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/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_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; }
+};
\ No newline at end of file
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..7cd4a30
--- /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/03/10 04:18:03 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+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", "Da del Armisticio" },
+ { "Ascension", "Ascensin" },
+ { "Benito Jußrez Day", "Da de la Benito Jußrez" },
+ { "Boxing Day", "Da en que se dan Aguinaldos Navide±os" },
+ { "Canada Day", "Da del Canadß" },
+ { "Christmas Eve", "Visperas de Navidad" },
+ { "Christmas", "Navidad" },
+ { "Constitution Day", "Da de la Constitucin" },
+ { "Day of the Dead", "Da de los Muertos" },
+ { "Easter Sunday", "Pascua" },
+ { "Easter Monday", "Pascua Lunes" },
+ { "Epiphany", "Epifana" },
+ { "Father's Day", "Da del Padre" },
+ { "Flag Day", "Da de la Bandera" },
+ { "Good Friday", "Viernes Santo" },
+ { "Halloween", "vspera de Todos los Santos" },
+ { "Independence Day", "Da de la Independencia" },
+ { "Labor Day", "Da de Trabajadores" },
+ { "Maundy Thursday", "Jueves Santo" },
+ { "May Day", "Primero de Mayo" },
+ { "Memorial Day", "Da de la Rememoracin" },
+ { "Mother's Day", "Da de la Madre" },
+ { "New Year's Day", "A±o Nuevo" },
+ { "Palm Sunday", "Domingo de Ramos" },
+ { "Pentecost", "Pentecosts" },
+ { "Presidents' Day", "Da de Presidentes" },
+ { "Revolution Day", "Da de la Revolucin" },
+ { "Shrove Tuesday", "Martes de Carnaval" },
+ { "Thanksgiving", "Da de Accin de Gracias" },
+ { "Veterans' Day", "Da de Veteranos" },
+ { "Victoria Day", "Da de Victoria" },
+ { "Whit Sunday", "Pentecosts" },
+ };
+
+ 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..a755834
--- /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/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_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ßrez 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, "Da 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..8a5691d
--- /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/03/10 04:18:04 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+
+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", "Fte de la Bastille" },
+ { "Benito Jußrez Day", "Fte de Benito Jußrez" },
+ { "Boxing Day", "Lendemain de Nol" },
+ { "Christmas Eve", "Veille de Nol" },
+ { "Christmas", "Nol" },
+ { "Easter Monday", "Pques lundi" },
+ { "Easter Sunday", "Pques" },
+ { "Epiphany", "l'Ðpiphanie" },
+ { "Flag Day", "Fte du Drapeau" },
+ { "Good Friday", "Vendredi Saint" },
+ { "Halloween", "Veille de la Toussaint" },
+ { "All Saints' Day", "Toussaint" },
+ { "Independence Day", "Fte Indpendance" },
+ { "Maundy Thursday", "Jeudi Saint" },
+ { "Mother's Day", "Fte des mres" },
+ { "National Day", "Fte Nationale" },
+ { "New Year's Day", "Jour de l'an" },
+ { "Palm Sunday", "les Rameaux" },
+ { "Pentecost", "Pentecte" },
+ { "Shrove Tuesday", "Mardi Gras" },
+ { "St. Stephen's Day", "Saint-Ðtienne" },
+ { "Victoria Day", "Fte de la Victoria" },
+ { "Victory Day", "Fte 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..ddee7fb
--- /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/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 extends ListResourceBundle {
+ static private final Object[][] fContents =
+ {
+ { "All Saints' Day", "Ognissanti" },
+ { "Armistice Day", "armistizio" },
+ { "Ascension", "ascensione" },
+ { "Ash Wednesday", "mercoled delle ceneri" },
+ { "Boxing Day", "Santo Stefano" },
+ { "Christmas", "natale" },
+ { "Easter Sunday", "pasqua" },
+ { "Epiphany", "Epifania" },
+ { "Good Friday", "venerd santo" },
+ { "Halloween", "vigilia di Ognissanti" },
+ { "Maundy Thursday", "gioved 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..0fe5c68
--- /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/03/10 04:18:05 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+};
\ No newline at end of file
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..30ecd6b
--- /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/03/10 04:18:05 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+};
\ No newline at end of file
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..a59e07b
--- /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/03/10 04:18:05 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+};
\ No newline at end of file
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..ea33465
--- /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/03/10 04:18:05 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+};
\ No newline at end of file
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..fa6ce4b
--- /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/03/10 04:18:06 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+};
\ No newline at end of file
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..c39c8ae
--- /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/03/10 04:18:06 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+};
\ No newline at end of file
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..bc5e352
--- /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/03/10 04:18:06 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+};
\ No newline at end of file
diff --git a/src/com/ibm/util/resources/JapaneseCalendarSymbols.java b/src/com/ibm/util/resources/JapaneseCalendarSymbols.java
new file mode 100755
index 0000000..02f0d91
--- /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/03/10 04:18:06 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+};
\ No newline at end of file
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..ebdf158
--- /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/03/10 04:18:06 $
+ * $Revision: 1.2 $
+ *
+ *****************************************************************************************
+ */
+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;
+ }
+};
\ 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/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/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;;;;;
+
+