From 5b58927e9af3abf4f728686b43d36d1cd0210a7a Mon Sep 17 00:00:00 2001
From: Vladimir Glazounov <vg@openoffice.org>
Date: Thu, 24 Apr 2003 11:26:04 +0000
Subject: cws_srx644_i18napi -> HEAD

---
 i18nutil/inc/i18nutil/casefolding.hxx       |  127 ++
 i18nutil/inc/i18nutil/oneToOneMapping.hxx   |   96 ++
 i18nutil/inc/i18nutil/unicode.hxx           |   98 ++
 i18nutil/inc/i18nutil/widthfolding.hxx      |   84 ++
 i18nutil/inc/i18nutil/x_rtl_ustring.h       |  115 ++
 i18nutil/prj/build.lst                      |    3 +
 i18nutil/prj/d.lst                          |   20 +
 i18nutil/source/utility/casefolding.cxx     |  182 +++
 i18nutil/source/utility/casefolding_data.h  |  845 ++++++++++++++
 i18nutil/source/utility/makefile.mk         |   87 ++
 i18nutil/source/utility/oneToOneMapping.cxx |  138 +++
 i18nutil/source/utility/unicode.cxx         |  342 ++++++
 i18nutil/source/utility/unicode_data.h      | 1667 +++++++++++++++++++++++++++
 i18nutil/source/utility/widthfolding.cxx    |  236 ++++
 i18nutil/source/utility/widthfolding_data.h |  955 +++++++++++++++
 15 files changed, 4995 insertions(+)
 create mode 100644 i18nutil/inc/i18nutil/casefolding.hxx
 create mode 100644 i18nutil/inc/i18nutil/oneToOneMapping.hxx
 create mode 100644 i18nutil/inc/i18nutil/unicode.hxx
 create mode 100644 i18nutil/inc/i18nutil/widthfolding.hxx
 create mode 100644 i18nutil/inc/i18nutil/x_rtl_ustring.h
 create mode 100644 i18nutil/prj/build.lst
 create mode 100644 i18nutil/prj/d.lst
 create mode 100644 i18nutil/source/utility/casefolding.cxx
 create mode 100644 i18nutil/source/utility/casefolding_data.h
 create mode 100644 i18nutil/source/utility/makefile.mk
 create mode 100644 i18nutil/source/utility/oneToOneMapping.cxx
 create mode 100644 i18nutil/source/utility/unicode.cxx
 create mode 100644 i18nutil/source/utility/unicode_data.h
 create mode 100644 i18nutil/source/utility/widthfolding.cxx
 create mode 100644 i18nutil/source/utility/widthfolding_data.h

(limited to 'i18nutil')

diff --git a/i18nutil/inc/i18nutil/casefolding.hxx b/i18nutil/inc/i18nutil/casefolding.hxx
new file mode 100644
index 000000000000..08593b43c28a
--- /dev/null
+++ b/i18nutil/inc/i18nutil/casefolding.hxx
@@ -0,0 +1,127 @@
+/*************************************************************************
+ *
+ *  $RCSfile: casefolding.hxx,v $
+ *
+ *  $Revision: 1.2 $
+ *
+ *  last change: $Author: vg $ $Date: 2003-04-24 12:25:58 $
+ *
+ *  The Contents of this file are made available subject to the terms of
+ *  either of the following licenses
+ *
+ *         - GNU Lesser General Public License Version 2.1
+ *         - Sun Industry Standards Source License Version 1.1
+ *
+ *  Sun Microsystems Inc., October, 2000
+ *
+ *  GNU Lesser General Public License Version 2.1
+ *  =============================================
+ *  Copyright 2000 by Sun Microsystems, Inc.
+ *  901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License version 2.1, as published by the Free Software Foundation.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ *  MA  02111-1307  USA
+ *
+ *
+ *  Sun Industry Standards Source License Version 1.1
+ *  =================================================
+ *  The contents of this file are subject to the Sun Industry Standards
+ *  Source License Version 1.1 (the "License"); You may not use this file
+ *  except in compliance with the License. You may obtain a copy of the
+ *  License at http://www.openoffice.org/license.html.
+ *
+ *  Software provided under this License is provided on an "AS IS" basis,
+ *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ *  See the License for the specific provisions governing your rights and
+ *  obligations concerning the Software.
+ *
+ *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ *  Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ *  All Rights Reserved.
+ *
+ *  Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+#ifndef INCLUDED_I18NUTIL_CASEFOLDING_HXX
+#define INCLUDED_I18NUTIL_CASEFOLDING_HXX
+
+#ifndef _SAL_TYPES_H_
+#include <sal/types.h>
+#endif
+
+#ifndef _COM_SUN_STAR_I18N_TRANSLITERATIONMODULES_HPP_
+#include <com/sun/star/i18n/TransliterationModules.hpp>
+#endif
+#ifndef _COM_SUN_STAR_LANG_LOCALE_HPP_
+#include <com/sun/star/lang/Locale.hpp>
+#endif
+#ifndef _COM_SUN_STAR_UNO_RUNTIMEEXCEPTION_HPP_
+#include <com/sun/star/uno/RuntimeException.hpp>
+#endif
+
+namespace com { namespace sun { namespace star { namespace i18n {
+
+#define MappingTypeLowerToUpper     1 << 0  // Upper to Lower mapping
+#define MappingTypeUpperToLower     1 << 1  // Lower to Upper mapping
+#define MappingTypeToUpper          1 << 2  // to Upper mapping
+#define MappingTypeToLower          1 << 3  // to Lower mapping
+#define MappingTypeToTitle          1 << 4  // to Title mapping
+#define MappingTypeSimpleFolding    1 << 5  // Simple Case Folding
+#define MappingTypeFullFolding      1 << 6  // Full Case Folding
+#define MappingTypeMask MappingTypeLowerToUpper|MappingTypeUpperToLower|\
+            MappingTypeToUpper|MappingTypeToLower|MappingTypeToTitle|\
+            MappingTypeSimpleFolding|MappingTypeFullFolding
+
+#define ValueTypeNotValue       1 << 7 // Value field is an address
+
+#define CasedLetter     MappingTypeMask  // for final sigmar
+
+struct Value
+{
+    sal_uInt8   type;
+    sal_uInt16  value;  // value or address, depend on the type
+};
+
+struct Mapping
+{
+    sal_uInt8   type;
+    sal_Int8    nmap;
+#define NMAPPINGMAX 3
+    sal_Unicode map[NMAPPINGMAX];
+};      // for Unconditional mapping
+
+struct MappingElement
+{
+    MappingElement() {element.nmap = current = 0;};
+    Mapping element;
+    sal_Int8 current;
+};
+
+class casefolding
+{
+public:
+    static Mapping& getValue(const sal_Unicode* str, sal_Int32 pos, sal_Int32 len, com::sun::star::lang::Locale& aLocale, sal_uInt8 nMappingType) throw (com::sun::star::uno::RuntimeException);
+    static Mapping& getConditionalValue(const sal_Unicode* str, sal_Int32 pos, sal_Int32 len, com::sun::star::lang::Locale& aLocale, sal_uInt8 nMappingType) throw (com::sun::star::uno::RuntimeException);
+    static sal_Unicode getNextChar(const sal_Unicode *str, sal_Int32& idx, sal_Int32 len, MappingElement& e, com::sun::star::lang::Locale& aLocale,sal_uInt8 nMappingtype, TransliterationModules moduleLoaded) throw (com::sun::star::uno::RuntimeException);
+
+};
+
+} } } }
+
+#endif
diff --git a/i18nutil/inc/i18nutil/oneToOneMapping.hxx b/i18nutil/inc/i18nutil/oneToOneMapping.hxx
new file mode 100644
index 000000000000..e70f39e83c57
--- /dev/null
+++ b/i18nutil/inc/i18nutil/oneToOneMapping.hxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ *  $RCSfile: oneToOneMapping.hxx,v $
+ *
+ *  $Revision: 1.2 $
+ *
+ *  last change: $Author: vg $ $Date: 2003-04-24 12:25:59 $
+ *
+ *  The Contents of this file are made available subject to the terms of
+ *  either of the following licenses
+ *
+ *         - GNU Lesser General Public License Version 2.1
+ *         - Sun Industry Standards Source License Version 1.1
+ *
+ *  Sun Microsystems Inc., October, 2000
+ *
+ *  GNU Lesser General Public License Version 2.1
+ *  =============================================
+ *  Copyright 2000 by Sun Microsystems, Inc.
+ *  901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License version 2.1, as published by the Free Software Foundation.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ *  MA  02111-1307  USA
+ *
+ *
+ *  Sun Industry Standards Source License Version 1.1
+ *  =================================================
+ *  The contents of this file are subject to the Sun Industry Standards
+ *  Source License Version 1.1 (the "License"); You may not use this file
+ *  except in compliance with the License. You may obtain a copy of the
+ *  License at http://www.openoffice.org/license.html.
+ *
+ *  Software provided under this License is provided on an "AS IS" basis,
+ *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ *  See the License for the specific provisions governing your rights and
+ *  obligations concerning the Software.
+ *
+ *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ *  Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ *  All Rights Reserved.
+ *
+ *  Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+#ifndef INCLUDED_I18NUTIL_TRANSLITERATION_ONETOONEMAPPING_HXX
+#define INCLUDED_I18NUTIL_TRANSLITERATION_ONETOONEMAPPING_HXX
+
+#include <utility>
+#include <rtl/ustring.hxx>
+
+namespace com { namespace sun { namespace star { namespace i18n {
+
+typedef std::pair< sal_Unicode, sal_Unicode > OneToOneMappingTable_t;
+
+#define MAKE_PAIR(item1,item2) std::make_pair< sal_Unicode, sal_Unicode >((sal_Unicode)item1,(sal_Unicode)item2)
+
+class oneToOneMapping
+{
+public:
+        oneToOneMapping(OneToOneMappingTable_t *_table, const size_t _bytes);
+        ~oneToOneMapping();
+
+        // make index for fast search
+        void makeIndex();
+        // binary search / idex search
+        sal_Unicode find(const sal_Unicode key) const;
+
+        // translator
+        sal_Unicode operator[] (const sal_Unicode key) const { return find (key); };
+
+protected:
+        OneToOneMappingTable_t *table;
+        size_t max_size;
+        int *index[256];
+        sal_Bool hasIndex;
+};
+
+} } } }
+
+#endif // _I18N_TRANSLITERATION_ONETOONEMAPPING_HXX_
diff --git a/i18nutil/inc/i18nutil/unicode.hxx b/i18nutil/inc/i18nutil/unicode.hxx
new file mode 100644
index 000000000000..a2aed2734e45
--- /dev/null
+++ b/i18nutil/inc/i18nutil/unicode.hxx
@@ -0,0 +1,98 @@
+/*************************************************************************
+ *
+ *  $RCSfile: unicode.hxx,v $
+ *
+ *  $Revision: 1.2 $
+ *
+ *  last change: $Author: vg $ $Date: 2003-04-24 12:25:59 $
+ *
+ *  The Contents of this file are made available subject to the terms of
+ *  either of the following licenses
+ *
+ *         - GNU Lesser General Public License Version 2.1
+ *         - Sun Industry Standards Source License Version 1.1
+ *
+ *  Sun Microsystems Inc., October, 2000
+ *
+ *  GNU Lesser General Public License Version 2.1
+ *  =============================================
+ *  Copyright 2000 by Sun Microsystems, Inc.
+ *  901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License version 2.1, as published by the Free Software Foundation.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ *  MA  02111-1307  USA
+ *
+ *
+ *  Sun Industry Standards Source License Version 1.1
+ *  =================================================
+ *  The contents of this file are subject to the Sun Industry Standards
+ *  Source License Version 1.1 (the "License"); You may not use this file
+ *  except in compliance with the License. You may obtain a copy of the
+ *  License at http://www.openoffice.org/license.html.
+ *
+ *  Software provided under this License is provided on an "AS IS" basis,
+ *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ *  See the License for the specific provisions governing your rights and
+ *  obligations concerning the Software.
+ *
+ *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ *  Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ *  All Rights Reserved.
+ *
+ *  Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+#ifndef INCLUDED_I18NUTIL_UNICODE_HXX
+#define INCLUDED_I18NUTIL_UNICODE_HXX
+
+#include <com/sun/star/i18n/UnicodeScript.hpp>
+#include <sal/types.h>
+
+typedef struct _ScriptTypeList {
+    sal_Int16 from;
+    sal_Int16 to;
+} ScriptTypeList;
+
+class unicode
+{
+public:
+
+    static sal_Int16 SAL_CALL getUnicodeType( const sal_Unicode ch );
+    static sal_Bool SAL_CALL isUnicodeScriptType( const sal_Unicode ch, sal_Int16 type);
+    static sal_Int16 SAL_CALL getUnicodeScriptType( const sal_Unicode ch, ScriptTypeList *typeList = NULL, sal_Int16 unknownType = 0 );
+    static sal_uInt8 SAL_CALL getUnicodeDirection( const sal_Unicode ch );
+    static sal_Int32 SAL_CALL getCharType( const sal_Unicode ch );
+    static sal_Bool SAL_CALL isUpper( const sal_Unicode ch);
+    static sal_Bool SAL_CALL isLower( const sal_Unicode ch);
+    static sal_Bool SAL_CALL isTitle( const sal_Unicode ch);
+    static sal_Bool SAL_CALL isDigit( const sal_Unicode ch);
+    static sal_Bool SAL_CALL isControl( const sal_Unicode ch);
+    static sal_Bool SAL_CALL isPrint( const sal_Unicode ch);
+    static sal_Bool SAL_CALL isBase( const sal_Unicode ch);
+    static sal_Bool SAL_CALL isAlpha( const sal_Unicode ch);
+    static sal_Bool SAL_CALL isSpace( const sal_Unicode ch);
+    static sal_Bool SAL_CALL isWhiteSpace( const sal_Unicode ch);
+    static sal_Bool SAL_CALL isAlphaDigit( const sal_Unicode ch);
+    static sal_Bool SAL_CALL isPunctuation( const sal_Unicode ch);
+};
+
+#endif
+
+
+
diff --git a/i18nutil/inc/i18nutil/widthfolding.hxx b/i18nutil/inc/i18nutil/widthfolding.hxx
new file mode 100644
index 000000000000..1680de550125
--- /dev/null
+++ b/i18nutil/inc/i18nutil/widthfolding.hxx
@@ -0,0 +1,84 @@
+/*************************************************************************
+ *
+ *  $RCSfile: widthfolding.hxx,v $
+ *
+ *  $Revision: 1.2 $
+ *
+ *  last change: $Author: vg $ $Date: 2003-04-24 12:25:59 $
+ *
+ *  The Contents of this file are made available subject to the terms of
+ *  either of the following licenses
+ *
+ *         - GNU Lesser General Public License Version 2.1
+ *         - Sun Industry Standards Source License Version 1.1
+ *
+ *  Sun Microsystems Inc., October, 2000
+ *
+ *  GNU Lesser General Public License Version 2.1
+ *  =============================================
+ *  Copyright 2000 by Sun Microsystems, Inc.
+ *  901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License version 2.1, as published by the Free Software Foundation.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ *  MA  02111-1307  USA
+ *
+ *
+ *  Sun Industry Standards Source License Version 1.1
+ *  =================================================
+ *  The contents of this file are subject to the Sun Industry Standards
+ *  Source License Version 1.1 (the "License"); You may not use this file
+ *  except in compliance with the License. You may obtain a copy of the
+ *  License at http://www.openoffice.org/license.html.
+ *
+ *  Software provided under this License is provided on an "AS IS" basis,
+ *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ *  See the License for the specific provisions governing your rights and
+ *  obligations concerning the Software.
+ *
+ *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ *  Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ *  All Rights Reserved.
+ *
+ *  Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+#ifndef INCLUDED_I18NUTIL_WIDTHFOLDING_HXX
+#define INCLUDED_I18NUTIL_WIDTHFOLDING_HXX
+
+#include <sal/types.h>
+#include <com/sun/star/uno/Sequence.hxx>
+#include <i18nutil/oneToOneMapping.hxx>
+
+namespace com { namespace sun { namespace star { namespace i18n {
+
+class widthfolding
+{
+public:
+    static oneToOneMapping& getfull2halfTable();
+    static oneToOneMapping& gethalf2fullTable();
+    static rtl::OUString decompose_ja_voiced_sound_marks(const rtl::OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, com::sun::star::uno::Sequence< sal_Int32 >& offset, sal_Bool useOffset);
+    static sal_Unicode decompose_ja_voiced_sound_marksChar2Char (sal_Unicode inChar);
+    static rtl::OUString compose_ja_voiced_sound_marks(const rtl::OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, com::sun::star::uno::Sequence< sal_Int32 >& offset, sal_Bool useOffset);
+    static sal_Unicode getCompositionChar(sal_Unicode c1, sal_Unicode c2);
+};
+
+
+} } } }
+
+#endif
diff --git a/i18nutil/inc/i18nutil/x_rtl_ustring.h b/i18nutil/inc/i18nutil/x_rtl_ustring.h
new file mode 100644
index 000000000000..3a9306230ea0
--- /dev/null
+++ b/i18nutil/inc/i18nutil/x_rtl_ustring.h
@@ -0,0 +1,115 @@
+/*************************************************************************
+ *
+ *  $RCSfile: x_rtl_ustring.h,v $
+ *
+ *  $Revision: 1.2 $
+ *
+ *  last change: $Author: vg $ $Date: 2003-04-24 12:26:00 $
+ *
+ *  The Contents of this file are made available subject to the terms of
+ *  either of the following licenses
+ *
+ *         - GNU Lesser General Public License Version 2.1
+ *         - Sun Industry Standards Source License Version 1.1
+ *
+ *  Sun Microsystems Inc., October, 2000
+ *
+ *  GNU Lesser General Public License Version 2.1
+ *  =============================================
+ *  Copyright 2000 by Sun Microsystems, Inc.
+ *  901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License version 2.1, as published by the Free Software Foundation.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ *  MA  02111-1307  USA
+ *
+ *
+ *  Sun Industry Standards Source License Version 1.1
+ *  =================================================
+ *  The contents of this file are subject to the Sun Industry Standards
+ *  Source License Version 1.1 (the "License"); You may not use this file
+ *  except in compliance with the License. You may obtain a copy of the
+ *  License at http://www.openoffice.org/license.html.
+ *
+ *  Software provided under this License is provided on an "AS IS" basis,
+ *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ *  See the License for the specific provisions governing your rights and
+ *  obligations concerning the Software.
+ *
+ *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ *  Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ *  All Rights Reserved.
+ *
+ *  Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+#ifndef INCLUDED_I18NUTIL_X_RTL_USTRING_H
+#define INCLUDED_I18NUTIL_X_RTL_USTRING_H
+
+#ifndef _RTL_STRING_HXX_
+#include <rtl/strbuf.hxx>
+#endif
+
+#ifndef _RTL_MEMORY_H_
+#include <rtl/memory.h>
+#endif
+#include <rtl/alloc.h>
+
+
+/**
+ * Allocates a new <code>rtl_uString</code> which can hold nLen + 1 characters.
+ * The reference count is 0. The characters of room is not cleared.
+ * This method is similar to rtl_uString_new_WithLength in rtl/ustring.h, but
+ * can allocate a new string more efficiently. You need to "acquire" by such as
+ * OUString( rtl_uString * value ) if you intend to use it for a while.
+ * @param   [output] newStr
+ * @param   [input]  nLen
+ */
+inline void SAL_CALL x_rtl_uString_new_WithLength( rtl_uString ** newStr, sal_Int32 nLen, sal_Int32 _refCount = 0 )
+{
+  *newStr = (rtl_uString*) rtl_allocateMemory ( sizeof(rtl_uString) + sizeof(sal_Unicode) * nLen);
+  (*newStr)->refCount = _refCount;
+  (*newStr)->length = nLen;
+
+  // rtl_uString is defined in rtl/ustring.h as below:
+  //typedef struct _rtl_uString
+  //{
+  //    sal_Int32       refCount;
+  //    sal_Int32       length;
+  //    sal_Unicode     buffer[1];
+  //} rtl_uString;
+}
+
+inline rtl_uString * SAL_CALL x_rtl_uString_new_WithLength( sal_Int32 nLen, sal_Int32 _refCount = 0 )
+{
+  rtl_uString *newStr = (rtl_uString*) rtl_allocateMemory ( sizeof(rtl_uString) + sizeof(sal_Unicode) * nLen);
+  newStr->refCount = _refCount;
+  newStr->length = nLen;
+  return newStr;
+}
+
+/**
+ * Release <code>rtl_uString</code> regardless its reference count.
+ */
+inline void SAL_CALL x_rtl_uString_release( rtl_uString * value )
+{
+  rtl_freeMemory(value);
+}
+
+
+#endif // #ifndef _I18N_X_RTL_USTRING_H_
diff --git a/i18nutil/prj/build.lst b/i18nutil/prj/build.lst
new file mode 100644
index 000000000000..58152feacdb2
--- /dev/null
+++ b/i18nutil/prj/build.lst
@@ -0,0 +1,3 @@
+inu  i18nutil    :   sal cppu NULL
+inu  i18nutil                                   usr1    -   all inu_mkout NULL
+inu  i18nutil\source\utility                    nmake   -   all inu_utility NULL
diff --git a/i18nutil/prj/d.lst b/i18nutil/prj/d.lst
new file mode 100644
index 000000000000..a07cab08398a
--- /dev/null
+++ b/i18nutil/prj/d.lst
@@ -0,0 +1,20 @@
+
+mkdir: %_DEST%\inc%_EXT%\i18nutil
+
+..\inc\i18nutil\casefolding.hxx %_DEST%\inc%_EXT%\i18nutil\casefolding.hxx
+..\inc\i18nutil\oneToOneMapping.hxx %_DEST%\inc%_EXT%\i18nutil\oneToOneMapping.hxx
+..\inc\i18nutil\unicode.hxx %_DEST%\inc%_EXT%\i18nutil\unicode.hxx
+..\inc\i18nutil\widthfolding.hxx %_DEST%\inc%_EXT%\i18nutil\widthfolding.hxx
+..\inc\i18nutil\x_rtl_ustring.h %_DEST%\inc%_EXT%\i18nutil\x_rtl_ustring.h
+
+..\%__SRC%\bin\i18nutil*.dll %_DEST%\bin%_EXT%\i18nutil*.dll
+..\%__SRC%\lib\libi18nutil*.so %_DEST%\lib%_EXT%\libi18nutil*.so
+..\%__SRC%\lib\libi18nutil*.dylib %_DEST%\lib%_EXT%\libi18nutil*.dylib
+..\%__SRC%\lib\ii18nutil.lib %_DEST%\lib%_EXT%\ii18nutil.lib
+
+..\%__SRC%\lib\lib*static*.dylib %_DEST%\lib%_EXT%\lib*static*.dylib
+..\%__SRC%\misc\*staticdatamembers.cxx %_DEST%\inc%_EXT%\*staticdatamembers.cxx
+..\%__SRC%\misc\*staticdatamembers.h* %_DEST%\inc%_EXT%\*staticdatamembers.h*
+
+dos: sh -c "if test %OS% = MACOSX; then create-bundle %_DEST%\lib%_EXT%\*.dylib; fi"
+dos: sh -c "if test %OS% = MACOSX; then create-libstatic-link %_DEST%\lib%_EXT%; fi"
diff --git a/i18nutil/source/utility/casefolding.cxx b/i18nutil/source/utility/casefolding.cxx
new file mode 100644
index 000000000000..fe22c1cb3a4f
--- /dev/null
+++ b/i18nutil/source/utility/casefolding.cxx
@@ -0,0 +1,182 @@
+/*************************************************************************
+ *
+ *  $RCSfile: casefolding.cxx,v $
+ *
+ *  $Revision: 1.2 $
+ *
+ *  last change: $Author: vg $ $Date: 2003-04-24 12:26:02 $
+ *
+ *  The Contents of this file are made available subject to the terms of
+ *  either of the following licenses
+ *
+ *         - GNU Lesser General Public License Version 2.1
+ *         - Sun Industry Standards Source License Version 1.1
+ *
+ *  Sun Microsystems Inc., October, 2000
+ *
+ *  GNU Lesser General Public License Version 2.1
+ *  =============================================
+ *  Copyright 2000 by Sun Microsystems, Inc.
+ *  901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License version 2.1, as published by the Free Software Foundation.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ *  MA  02111-1307  USA
+ *
+ *
+ *  Sun Industry Standards Source License Version 1.1
+ *  =================================================
+ *  The contents of this file are subject to the Sun Industry Standards
+ *  Source License Version 1.1 (the "License"); You may not use this file
+ *  except in compliance with the License. You may obtain a copy of the
+ *  License at http://www.openoffice.org/license.html.
+ *
+ *  Software provided under this License is provided on an "AS IS" basis,
+ *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ *  See the License for the specific provisions governing your rights and
+ *  obligations concerning the Software.
+ *
+ *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ *  Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ *  All Rights Reserved.
+ *
+ *  Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+#include "i18nutil/casefolding.hxx"
+#include "casefolding_data.h"
+#include "i18nutil/widthfolding.hxx"
+
+using namespace com::sun::star::lang;
+using namespace com::sun::star::uno;
+
+namespace com { namespace sun { namespace star { namespace i18n {
+
+static Mapping mapping_03a3[] = {{0, 1, 0x03c2, 0, 0 },{0, 1, 0x03c3, 0, 0}};
+static Mapping mapping_0307[] = {{0, 0, 0, 0, 0 },{0, 1, 0x0307, 0, 0}};
+static Mapping mapping_0049[] = {{0, 2, 0x0069, 0x0307, 0},{0, 1, 0x0131, 0, 0},{0, 1, 0x0069, 0, 0}};
+static Mapping mapping_004a[] = {{0, 2, 0x006a, 0x0307, 0},{0, 1, 0x006a, 0, 0}};
+static Mapping mapping_012e[] = {{0, 2, 0x012f, 0x0307, 0},{0, 1, 0x012f, 0, 0}};
+static Mapping mapping_00cc[] = {{0, 3, 0x0069, 0x0307, 0x0300},{0, 1, 0x00ec, 0, 0}};
+static Mapping mapping_00cd[] = {{0, 3, 0x0069, 0x0307, 0x0301},{0, 1, 0x00ed, 0, 0}};
+static Mapping mapping_0128[] = {{0, 3, 0x0069, 0x0307, 0x0303},{0, 1, 0x0129, 0, 0}};
+static Mapping mapping_0069[] = {{0, 1, 0x0130, 0, 0},{0, 1, 0x0049, 0, 0}};
+
+#define langIs(lang) (aLocale.Language.compareToAscii(lang) == 0)
+
+// only check simple case, there is more complicated case need to be checked.
+#define type_i(ch) (ch == 0x0069 || ch == 0x006a)
+
+#define cased_letter(ch) (CaseMappingIndex[ch>>8] >= 0 && (CaseMappingValue[(CaseMappingIndex[ch>>8] << 8) + (ch&0xff)].type & CasedLetter))
+
+Mapping& casefolding::getConditionalValue(const sal_Unicode* str, sal_Int32 pos, sal_Int32 len, Locale& aLocale, sal_uInt8 nMappingType) throw (RuntimeException)
+{
+    switch(str[pos]) {
+    case 0x03a3:
+        // final_sigma (not followed by cased and preceded by cased character)
+        // DOES NOT check ignorable sequence yet (more complicated implementation).
+        return !(pos < len && cased_letter(str[pos+1])) && (pos > 0 && cased_letter(str[pos-1])) ?
+        mapping_03a3[0] : mapping_03a3[1];
+    case 0x0307:
+        return ((nMappingType == MappingTypeLowerToUpper && langIs("lt") ||
+        nMappingType == MappingTypeUpperToLower && (langIs("tr") || langIs("az"))) &&
+        (pos > 0 && type_i(str[pos-1]))) ?  // after_i
+            mapping_0307[0] : mapping_0307[1];
+    case 0x0069:
+        return (langIs("tr") || langIs("az")) ? mapping_0069[0] : mapping_0069[1];
+    case 0x0049: return langIs("lt") ? mapping_0049[0] :
+            (langIs("tr") || langIs("az")) ? mapping_0049[1] : mapping_0049[2];
+    case 0x004a: return langIs("lt") ? mapping_004a[0] : mapping_004a[1];
+    case 0x012e: return langIs("lt") ? mapping_012e[0] : mapping_012e[1];
+    case 0x00cc: return langIs("lt") ? mapping_00cc[0] : mapping_00cc[1];
+    case 0x00cd: return langIs("lt") ? mapping_00cd[0] : mapping_00cd[1];
+    case 0x0128: return langIs("lt") ? mapping_0128[0] : mapping_0128[1];
+    }
+}
+
+Mapping& casefolding::getValue(const sal_Unicode* str, sal_Int32 pos, sal_Int32 len, Locale& aLocale, sal_uInt8 nMappingType) throw (RuntimeException)
+{
+    static Mapping dummy = { 0, 1, 0, 0, 0 };
+    sal_Int16 address = CaseMappingIndex[str[pos] >> 8] << 8;
+
+    dummy.map[0] = str[pos];
+
+    if (address >= 0 && (CaseMappingValue[address += (str[pos] & 0xFF)].type & nMappingType)) {
+        sal_uInt8 type = CaseMappingValue[address].type;
+        if (type & ValueTypeNotValue) {
+        if (CaseMappingValue[address].value == 0)
+            return getConditionalValue(str, pos, len, aLocale, nMappingType);
+        else {
+            for (int map = CaseMappingValue[address].value;
+                map < CaseMappingValue[address].value + MaxCaseMappingExtras; map++) {
+            if (CaseMappingExtra[map].type & nMappingType) {
+                if (CaseMappingExtra[map].type & ValueTypeNotValue)
+                return getConditionalValue(str, pos, len, aLocale, nMappingType);
+                else
+                return CaseMappingExtra[map];
+            }
+            }
+            // Should not come here
+            throw RuntimeException();
+        }
+        } else
+        dummy.map[0] = CaseMappingValue[address].value;
+    }
+    return dummy;
+}
+
+inline sal_Bool SAL_CALL
+is_ja_voice_sound_mark(sal_Unicode& current, sal_Unicode next)
+{
+    sal_Unicode c = 0;
+
+    if ((next == 0x3099 || next == 0x309a) && (c = widthfolding::getCompositionChar(current, next)))
+        current = c;
+    return c != 0;
+}
+
+sal_Unicode casefolding::getNextChar(const sal_Unicode *str, sal_Int32& idx, sal_Int32 len, MappingElement& e, Locale& aLocale, sal_uInt8 nMappingType, TransliterationModules moduleLoaded) throw (RuntimeException)
+{
+    sal_Unicode c;
+    if (moduleLoaded & TransliterationModules_IGNORE_CASE) {
+        if (e.current >= e.element.nmap && idx < len ) {
+        e.element = getValue(str, idx++, len, aLocale, nMappingType);
+        e.current = 0;
+        }
+        c = e.element.map[e.current++];
+    } else {
+        c = *(str + idx++);
+    }
+    if (moduleLoaded & TransliterationModules_IGNORE_KANA) {
+        if (0x3040 <= c && c <= 0x3094 || 0x309d <= c && c <= 0x309f)
+        c += 0x60;
+    }
+
+    // composition: KA + voice-mark --> GA. see halfwidthToFullwidth.cxx for detail
+    if (moduleLoaded & TransliterationModules_IGNORE_WIDTH) {
+        static oneToOneMapping& half2fullTable = widthfolding::gethalf2fullTable();
+        c = half2fullTable[c];
+        if (0x3040 <= c && c <= 0x30ff && idx < len &&
+            is_ja_voice_sound_mark(c, half2fullTable[*(str + idx)]))
+        idx++;
+    }
+    return c;
+}
+
+} } } }
diff --git a/i18nutil/source/utility/casefolding_data.h b/i18nutil/source/utility/casefolding_data.h
new file mode 100644
index 000000000000..bb285e251886
--- /dev/null
+++ b/i18nutil/source/utility/casefolding_data.h
@@ -0,0 +1,845 @@
+/*************************************************************************
+ *
+ *  $RCSfile: casefolding_data.h,v $
+ *
+ *  $Revision: 1.2 $
+ *
+ *  last change: $Author: vg $ $Date: 2003-04-24 12:26:02 $
+ *
+ *  The Contents of this file are made available subject to the terms of
+ *  either of the following licenses
+ *
+ *         - Sun Industry Standards Source License Version 1.1
+ *
+ *  Sun Microsystems Inc., October, 2000
+ *
+ *  Sun Industry Standards Source License Version 1.1
+ *  =================================================
+ *  The contents of this file are subject to the Sun Industry Standards
+ *  Source License Version 1.1 (the "License"); You may not use this file
+ *  except in compliance with the License. You may obtain a copy of the
+ *  License at http://www.openoffice.org/license.html.
+ *
+ *  Software provided under this License is provided on an "AS IS" basis,
+ *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ *  See the License for the specific provisions governing your rights and
+ *  obligations concerning the Software.
+ *
+ *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ *  Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ *  All Rights Reserved.
+ *
+ *  Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+#ifndef CASEFOLDING_DATA_H
+#define CASEFOLDING_DATA_H
+
+#include <sal/types.h>
+
+namespace com { namespace sun { namespace star { namespace i18n {
+
+static sal_Int8 CaseMappingIndex[] = {
+    0x00, 0x01, 0x02, 0x03, 0x04, 0x05,   -1,   -1, // 0000 - 07ff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // 0800 - 0fff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // 1000 - 17ff
+      -1,   -1,   -1,   -1,   -1,   -1, 0x06, 0x07, // 1800 - 1fff
+      -1, 0x08,   -1,   -1, 0x09,   -1,   -1,   -1, // 2000 - 27ff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // 2800 - 2fff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // 3000 - 37ff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // 3800 - 3fff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // 4000 - 47ff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // 4800 - 4fff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // 5000 - 57ff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // 5800 - 5fff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // 6000 - 67ff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // 6800 - 6fff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // 7000 - 77ff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // 7800 - 7fff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // 8000 - 87ff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // 8800 - 8fff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // 9000 - 97ff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // 9800 - 9fff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // a000 - a7ff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // a800 - afff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // b000 - b7ff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // b800 - bfff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // c000 - c7ff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // c800 - cfff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // d000 - d7ff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // d800 - dfff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // e000 - e7ff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // e800 - efff
+      -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1, // f000 - f7ff
+      -1,   -1,   -1, 0x0a,   -1,   -1,   -1, 0x0b, // f800 - ffff
+};
+
+
+static Value CaseMappingValue[] = {
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0000 - 0007
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0008 - 000f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0010 - 0017
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0018 - 001f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0020 - 0027
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0028 - 002f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0030 - 0037
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0038 - 003f
+    {0x00, 0x0000}, {0x6a, 0x0061}, {0x6a, 0x0062}, {0x6a, 0x0063}, {0x6a, 0x0064}, {0x6a, 0x0065}, {0x6a, 0x0066}, {0x6a, 0x0067}, // 0040 - 0047
+    {0x6a, 0x0068}, {0xea, 0x0001}, {0xea, 0x0003}, {0x6a, 0x006B}, {0x6a, 0x006C}, {0x6a, 0x006D}, {0x6a, 0x006E}, {0x6a, 0x006F}, // 0048 - 004f
+    {0x6a, 0x0070}, {0x6a, 0x0071}, {0x6a, 0x0072}, {0x6a, 0x0073}, {0x6a, 0x0074}, {0x6a, 0x0075}, {0x6a, 0x0076}, {0x6a, 0x0077}, // 0050 - 0057
+    {0x6a, 0x0078}, {0x6a, 0x0079}, {0x6a, 0x007A}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0058 - 005f
+    {0x00, 0x0000}, {0x15, 0x0041}, {0x15, 0x0042}, {0x15, 0x0043}, {0x15, 0x0044}, {0x15, 0x0045}, {0x15, 0x0046}, {0x15, 0x0047}, // 0060 - 0067
+    {0x15, 0x0048}, {0x95, 0x0000}, {0x15, 0x004A}, {0x15, 0x004B}, {0x15, 0x004C}, {0x15, 0x004D}, {0x15, 0x004E}, {0x15, 0x004F}, // 0068 - 006f
+    {0x15, 0x0050}, {0x15, 0x0051}, {0x15, 0x0052}, {0x15, 0x0053}, {0x15, 0x0054}, {0x15, 0x0055}, {0x15, 0x0056}, {0x15, 0x0057}, // 0070 - 0077
+    {0x15, 0x0058}, {0x15, 0x0059}, {0x15, 0x005A}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0078 - 007f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0080 - 0087
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0088 - 008f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0090 - 0097
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0098 - 009f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 00a0 - 00a7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 00a8 - 00af
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0xf5, 0x0005}, {0x00, 0x0000}, {0x00, 0x0000}, // 00b0 - 00b7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 00b8 - 00bf
+    {0x6a, 0x00E0}, {0x6a, 0x00E1}, {0x6a, 0x00E2}, {0x6a, 0x00E3}, {0x6a, 0x00E4}, {0x6a, 0x00E5}, {0x6a, 0x00E6}, {0x6a, 0x00E7}, // 00c0 - 00c7
+    {0x6a, 0x00E8}, {0x6a, 0x00E9}, {0x6a, 0x00EA}, {0x6a, 0x00EB}, {0xea, 0x0007}, {0xea, 0x0009}, {0x6a, 0x00EE}, {0x6a, 0x00EF}, // 00c8 - 00cf
+    {0x6a, 0x00F0}, {0x6a, 0x00F1}, {0x6a, 0x00F2}, {0x6a, 0x00F3}, {0x6a, 0x00F4}, {0x6a, 0x00F5}, {0x6a, 0x00F6}, {0x00, 0x0000}, // 00d0 - 00d7
+    {0x6a, 0x00F8}, {0x6a, 0x00F9}, {0x6a, 0x00FA}, {0x6a, 0x00FB}, {0x6a, 0x00FC}, {0x6a, 0x00FD}, {0x6a, 0x00FE}, {0xd5, 0x000B}, // 00d8 - 00df
+    {0x15, 0x00C0}, {0x15, 0x00C1}, {0x15, 0x00C2}, {0x15, 0x00C3}, {0x15, 0x00C4}, {0x15, 0x00C5}, {0x15, 0x00C6}, {0x15, 0x00C7}, // 00e0 - 00e7
+    {0x15, 0x00C8}, {0x15, 0x00C9}, {0x15, 0x00CA}, {0x15, 0x00CB}, {0x15, 0x00CC}, {0x15, 0x00CD}, {0x15, 0x00CE}, {0x15, 0x00CF}, // 00e8 - 00ef
+    {0x15, 0x00D0}, {0x15, 0x00D1}, {0x15, 0x00D2}, {0x15, 0x00D3}, {0x15, 0x00D4}, {0x15, 0x00D5}, {0x15, 0x00D6}, {0x00, 0x0000}, // 00f0 - 00f7
+    {0x15, 0x00D8}, {0x15, 0x00D9}, {0x15, 0x00DA}, {0x15, 0x00DB}, {0x15, 0x00DC}, {0x15, 0x00DD}, {0x15, 0x00DE}, {0x15, 0x0178}, // 00f8 - 00ff
+
+    {0x6a, 0x0101}, {0x15, 0x0100}, {0x6a, 0x0103}, {0x15, 0x0102}, {0x6a, 0x0105}, {0x15, 0x0104}, {0x6a, 0x0107}, {0x15, 0x0106}, // 0100 - 0107
+    {0x6a, 0x0109}, {0x15, 0x0108}, {0x6a, 0x010B}, {0x15, 0x010A}, {0x6a, 0x010D}, {0x15, 0x010C}, {0x6a, 0x010F}, {0x15, 0x010E}, // 0108 - 010f
+    {0x6a, 0x0111}, {0x15, 0x0110}, {0x6a, 0x0113}, {0x15, 0x0112}, {0x6a, 0x0115}, {0x15, 0x0114}, {0x6a, 0x0117}, {0x15, 0x0116}, // 0110 - 0117
+    {0x6a, 0x0119}, {0x15, 0x0118}, {0x6a, 0x011B}, {0x15, 0x011A}, {0x6a, 0x011D}, {0x15, 0x011C}, {0x6a, 0x011F}, {0x15, 0x011E}, // 0118 - 011f
+    {0x6a, 0x0121}, {0x15, 0x0120}, {0x6a, 0x0123}, {0x15, 0x0122}, {0x6a, 0x0125}, {0x15, 0x0124}, {0x6a, 0x0127}, {0x15, 0x0126}, // 0120 - 0127
+    {0xea, 0x000E}, {0x15, 0x0128}, {0x6a, 0x012B}, {0x15, 0x012A}, {0x6a, 0x012D}, {0x15, 0x012C}, {0xea, 0x0010}, {0x15, 0x012E}, // 0128 - 012f
+    {0x6a, 0x0069}, {0xf5, 0x0012}, {0x6a, 0x0133}, {0x15, 0x0132}, {0x6a, 0x0135}, {0x15, 0x0134}, {0x6a, 0x0137}, {0x15, 0x0136}, // 0130 - 0137
+    {0x00, 0x0000}, {0x6a, 0x013A}, {0x15, 0x0139}, {0x6a, 0x013C}, {0x15, 0x013B}, {0x6a, 0x013E}, {0x15, 0x013D}, {0x6a, 0x0140}, // 0138 - 013f
+    {0x15, 0x013F}, {0x6a, 0x0142}, {0x15, 0x0141}, {0x6a, 0x0144}, {0x15, 0x0143}, {0x6a, 0x0146}, {0x15, 0x0145}, {0x6a, 0x0148}, // 0140 - 0147
+    {0x15, 0x0147}, {0xd5, 0x0014}, {0x6a, 0x014B}, {0x15, 0x014A}, {0x6a, 0x014D}, {0x15, 0x014C}, {0x6a, 0x014F}, {0x15, 0x014E}, // 0148 - 014f
+    {0x6a, 0x0151}, {0x15, 0x0150}, {0x6a, 0x0153}, {0x15, 0x0152}, {0x6a, 0x0155}, {0x15, 0x0154}, {0x6a, 0x0157}, {0x15, 0x0156}, // 0150 - 0157
+    {0x6a, 0x0159}, {0x15, 0x0158}, {0x6a, 0x015B}, {0x15, 0x015A}, {0x6a, 0x015D}, {0x15, 0x015C}, {0x6a, 0x015F}, {0x15, 0x015E}, // 0158 - 015f
+    {0x6a, 0x0161}, {0x15, 0x0160}, {0x6a, 0x0163}, {0x15, 0x0162}, {0x6a, 0x0165}, {0x15, 0x0164}, {0x6a, 0x0167}, {0x15, 0x0166}, // 0160 - 0167
+    {0x6a, 0x0169}, {0x15, 0x0168}, {0x6a, 0x016B}, {0x15, 0x016A}, {0x6a, 0x016D}, {0x15, 0x016C}, {0x6a, 0x016F}, {0x15, 0x016E}, // 0168 - 016f
+    {0x6a, 0x0171}, {0x15, 0x0170}, {0x6a, 0x0173}, {0x15, 0x0172}, {0x6a, 0x0175}, {0x15, 0x0174}, {0x6a, 0x0177}, {0x15, 0x0176}, // 0170 - 0177
+    {0x6a, 0x00FF}, {0x6a, 0x017A}, {0x15, 0x0179}, {0x6a, 0x017C}, {0x15, 0x017B}, {0x6a, 0x017E}, {0x15, 0x017D}, {0xf5, 0x0016}, // 0178 - 017f
+    {0x00, 0x0000}, {0x6a, 0x0253}, {0x6a, 0x0183}, {0x15, 0x0182}, {0x6a, 0x0185}, {0x15, 0x0184}, {0x6a, 0x0254}, {0x6a, 0x0188}, // 0180 - 0187
+    {0x15, 0x0187}, {0x6a, 0x0256}, {0x6a, 0x0257}, {0x6a, 0x018C}, {0x15, 0x018B}, {0x00, 0x0000}, {0x6a, 0x01DD}, {0x6a, 0x0259}, // 0188 - 018f
+    {0x6a, 0x025B}, {0x6a, 0x0192}, {0x15, 0x0191}, {0x6a, 0x0260}, {0x6a, 0x0263}, {0x15, 0x01F6}, {0x6a, 0x0269}, {0x6a, 0x0268}, // 0190 - 0197
+    {0x6a, 0x0199}, {0x15, 0x0198}, {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x026F}, {0x6a, 0x0272}, {0x00, 0x0000}, {0x6a, 0x0275}, // 0198 - 019f
+    {0x6a, 0x01A1}, {0x15, 0x01A0}, {0x6a, 0x01A3}, {0x15, 0x01A2}, {0x6a, 0x01A5}, {0x15, 0x01A4}, {0x6a, 0x0280}, {0x6a, 0x01A8}, // 01a0 - 01a7
+    {0x15, 0x01A7}, {0x6a, 0x0283}, {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x01AD}, {0x15, 0x01AC}, {0x6a, 0x0288}, {0x6a, 0x01B0}, // 01a8 - 01af
+    {0x15, 0x01AF}, {0x6a, 0x028A}, {0x6a, 0x028B}, {0x6a, 0x01B4}, {0x15, 0x01B3}, {0x6a, 0x01B6}, {0x15, 0x01B5}, {0x6a, 0x0292}, // 01b0 - 01b7
+    {0x6a, 0x01B9}, {0x15, 0x01B8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x01BD}, {0x15, 0x01BC}, {0x00, 0x0000}, {0x15, 0x01F7}, // 01b8 - 01bf
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0xfa, 0x0018}, {0xec, 0x001A}, {0x95, 0x001C}, {0xfa, 0x001E}, // 01c0 - 01c7
+    {0xec, 0x0020}, {0x95, 0x0022}, {0xfa, 0x0024}, {0xec, 0x0026}, {0x95, 0x0028}, {0x6a, 0x01CE}, {0x15, 0x01CD}, {0x6a, 0x01D0}, // 01c8 - 01cf
+    {0x15, 0x01CF}, {0x6a, 0x01D2}, {0x15, 0x01D1}, {0x6a, 0x01D4}, {0x15, 0x01D3}, {0x6a, 0x01D6}, {0x15, 0x01D5}, {0x6a, 0x01D8}, // 01d0 - 01d7
+    {0x15, 0x01D7}, {0x6a, 0x01DA}, {0x15, 0x01D9}, {0x6a, 0x01DC}, {0x15, 0x01DB}, {0x15, 0x018E}, {0x6a, 0x01DF}, {0x15, 0x01DE}, // 01d8 - 01df
+    {0x6a, 0x01E1}, {0x15, 0x01E0}, {0x6a, 0x01E3}, {0x15, 0x01E2}, {0x6a, 0x01E5}, {0x15, 0x01E4}, {0x6a, 0x01E7}, {0x15, 0x01E6}, // 01e0 - 01e7
+    {0x6a, 0x01E9}, {0x15, 0x01E8}, {0x6a, 0x01EB}, {0x15, 0x01EA}, {0x6a, 0x01ED}, {0x15, 0x01EC}, {0x6a, 0x01EF}, {0x15, 0x01EE}, // 01e8 - 01ef
+    {0xd5, 0x002A}, {0xfa, 0x002C}, {0xec, 0x002E}, {0x95, 0x0030}, {0x6a, 0x01F5}, {0x15, 0x01F4}, {0x6a, 0x0195}, {0x6a, 0x01BF}, // 01f0 - 01f7
+    {0x6a, 0x01F9}, {0x15, 0x01F8}, {0x6a, 0x01FB}, {0x15, 0x01FA}, {0x6a, 0x01FD}, {0x15, 0x01FC}, {0x6a, 0x01FF}, {0x15, 0x01FE}, // 01f8 - 01ff
+
+    {0x6a, 0x0201}, {0x15, 0x0200}, {0x6a, 0x0203}, {0x15, 0x0202}, {0x6a, 0x0205}, {0x15, 0x0204}, {0x6a, 0x0207}, {0x15, 0x0206}, // 0200 - 0207
+    {0x6a, 0x0209}, {0x15, 0x0208}, {0x6a, 0x020B}, {0x15, 0x020A}, {0x6a, 0x020D}, {0x15, 0x020C}, {0x6a, 0x020F}, {0x15, 0x020E}, // 0208 - 020f
+    {0x6a, 0x0211}, {0x15, 0x0210}, {0x6a, 0x0213}, {0x15, 0x0212}, {0x6a, 0x0215}, {0x15, 0x0214}, {0x6a, 0x0217}, {0x15, 0x0216}, // 0210 - 0217
+    {0x6a, 0x0219}, {0x15, 0x0218}, {0x6a, 0x021B}, {0x15, 0x021A}, {0x6a, 0x021D}, {0x15, 0x021C}, {0x6a, 0x021F}, {0x15, 0x021E}, // 0218 - 021f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x0223}, {0x15, 0x0222}, {0x6a, 0x0225}, {0x15, 0x0224}, {0x6a, 0x0227}, {0x15, 0x0226}, // 0220 - 0227
+    {0x6a, 0x0229}, {0x15, 0x0228}, {0x6a, 0x022B}, {0x15, 0x022A}, {0x6a, 0x022D}, {0x15, 0x022C}, {0x6a, 0x022F}, {0x15, 0x022E}, // 0228 - 022f
+    {0x6a, 0x0231}, {0x15, 0x0230}, {0x6a, 0x0233}, {0x15, 0x0232}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0230 - 0237
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0238 - 023f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0240 - 0247
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0248 - 024f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x15, 0x0181}, {0x15, 0x0186}, {0x00, 0x0000}, {0x15, 0x0189}, {0x15, 0x018A}, // 0250 - 0257
+    {0x00, 0x0000}, {0x15, 0x018F}, {0x00, 0x0000}, {0x15, 0x0190}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0258 - 025f
+    {0x15, 0x0193}, {0x00, 0x0000}, {0x00, 0x0000}, {0x15, 0x0194}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0260 - 0267
+    {0x15, 0x0197}, {0x15, 0x0196}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x15, 0x019C}, // 0268 - 026f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x15, 0x019D}, {0x00, 0x0000}, {0x00, 0x0000}, {0x15, 0x019F}, {0x00, 0x0000}, {0x00, 0x0000}, // 0270 - 0277
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0278 - 027f
+    {0x15, 0x01A6}, {0x00, 0x0000}, {0x00, 0x0000}, {0x15, 0x01A9}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0280 - 0287
+    {0x15, 0x01AE}, {0x00, 0x0000}, {0x15, 0x01B1}, {0x15, 0x01B2}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0288 - 028f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x15, 0x01B7}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0290 - 0297
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0298 - 029f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02a0 - 02a7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02a8 - 02af
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02b0 - 02b7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02b8 - 02bf
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02c0 - 02c7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02c8 - 02cf
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02d0 - 02d7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02d8 - 02df
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02e0 - 02e7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02e8 - 02ef
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02f0 - 02f7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 02f8 - 02ff
+
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x9f, 0x0000}, // 0300 - 0307
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0308 - 030f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0310 - 0317
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0318 - 031f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0320 - 0327
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0328 - 032f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0330 - 0337
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0338 - 033f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0xf4, 0x0032}, {0x00, 0x0000}, {0x00, 0x0000}, // 0340 - 0347
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0348 - 034f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0350 - 0357
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0358 - 035f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0360 - 0367
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0368 - 036f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0370 - 0377
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0378 - 037f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x03AC}, {0x00, 0x0000}, // 0380 - 0387
+    {0x6a, 0x03AD}, {0x6a, 0x03AE}, {0x6a, 0x03AF}, {0x00, 0x0000}, {0x6a, 0x03CC}, {0x00, 0x0000}, {0x6a, 0x03CD}, {0x6a, 0x03CE}, // 0388 - 038f
+    {0xd5, 0x0034}, {0x6a, 0x03B1}, {0x6a, 0x03B2}, {0x6a, 0x03B3}, {0x6a, 0x03B4}, {0x6a, 0x03B5}, {0x6a, 0x03B6}, {0x6a, 0x03B7}, // 0390 - 0397
+    {0x6a, 0x03B8}, {0x6a, 0x03B9}, {0x6a, 0x03BA}, {0x6a, 0x03BB}, {0x6a, 0x03BC}, {0x6a, 0x03BD}, {0x6a, 0x03BE}, {0x6a, 0x03BF}, // 0398 - 039f
+    {0x6a, 0x03C0}, {0x6a, 0x03C1}, {0x00, 0x0000}, {0xea, 0x0036}, {0x6a, 0x03C4}, {0x6a, 0x03C5}, {0x6a, 0x03C6}, {0x6a, 0x03C7}, // 03a0 - 03a7
+    {0x6a, 0x03C8}, {0x6a, 0x03C9}, {0x6a, 0x03CA}, {0x6a, 0x03CB}, {0x15, 0x0386}, {0x15, 0x0388}, {0x15, 0x0389}, {0x15, 0x038A}, // 03a8 - 03af
+    {0xd5, 0x0038}, {0x15, 0x0391}, {0x15, 0x0392}, {0x15, 0x0393}, {0x15, 0x0394}, {0x15, 0x0395}, {0x15, 0x0396}, {0x15, 0x0397}, // 03b0 - 03b7
+    {0x15, 0x0398}, {0x15, 0x0399}, {0x15, 0x039A}, {0x15, 0x039B}, {0x15, 0x039C}, {0x15, 0x039D}, {0x15, 0x039E}, {0x15, 0x039F}, // 03b8 - 03bf
+    {0x15, 0x03A0}, {0x15, 0x03A1}, {0xf5, 0x003A}, {0x15, 0x03A3}, {0x15, 0x03A4}, {0x15, 0x03A5}, {0x15, 0x03A6}, {0x15, 0x03A7}, // 03c0 - 03c7
+    {0x15, 0x03A8}, {0x15, 0x03A9}, {0x15, 0x03AA}, {0x15, 0x03AB}, {0x15, 0x038C}, {0x15, 0x038E}, {0x15, 0x038F}, {0x00, 0x0000}, // 03c8 - 03cf
+    {0xf5, 0x003C}, {0xf5, 0x003E}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0xf5, 0x0040}, {0xf5, 0x0042}, {0x00, 0x0000}, // 03d0 - 03d7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x03DB}, {0x15, 0x03DA}, {0x6a, 0x03DD}, {0x15, 0x03DC}, {0x6a, 0x03DF}, {0x15, 0x03DE}, // 03d8 - 03df
+    {0x6a, 0x03E1}, {0x15, 0x03E0}, {0x6a, 0x03E3}, {0x15, 0x03E2}, {0x6a, 0x03E5}, {0x15, 0x03E4}, {0x6a, 0x03E7}, {0x15, 0x03E6}, // 03e0 - 03e7
+    {0x6a, 0x03E9}, {0x15, 0x03E8}, {0x6a, 0x03EB}, {0x15, 0x03EA}, {0x6a, 0x03ED}, {0x15, 0x03EC}, {0x6a, 0x03EF}, {0x15, 0x03EE}, // 03e8 - 03ef
+    {0xf5, 0x0044}, {0xf5, 0x0046}, {0xf5, 0x0048}, {0x00, 0x0000}, {0x6a, 0x03B8}, {0xf5, 0x004A}, {0x00, 0x0000}, {0x00, 0x0000}, // 03f0 - 03f7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 03f8 - 03ff
+
+    {0x6a, 0x0450}, {0x6a, 0x0451}, {0x6a, 0x0452}, {0x6a, 0x0453}, {0x6a, 0x0454}, {0x6a, 0x0455}, {0x6a, 0x0456}, {0x6a, 0x0457}, // 0400 - 0407
+    {0x6a, 0x0458}, {0x6a, 0x0459}, {0x6a, 0x045A}, {0x6a, 0x045B}, {0x6a, 0x045C}, {0x6a, 0x045D}, {0x6a, 0x045E}, {0x6a, 0x045F}, // 0408 - 040f
+    {0x6a, 0x0430}, {0x6a, 0x0431}, {0x6a, 0x0432}, {0x6a, 0x0433}, {0x6a, 0x0434}, {0x6a, 0x0435}, {0x6a, 0x0436}, {0x6a, 0x0437}, // 0410 - 0417
+    {0x6a, 0x0438}, {0x6a, 0x0439}, {0x6a, 0x043A}, {0x6a, 0x043B}, {0x6a, 0x043C}, {0x6a, 0x043D}, {0x6a, 0x043E}, {0x6a, 0x043F}, // 0418 - 041f
+    {0x6a, 0x0440}, {0x6a, 0x0441}, {0x6a, 0x0442}, {0x6a, 0x0443}, {0x6a, 0x0444}, {0x6a, 0x0445}, {0x6a, 0x0446}, {0x6a, 0x0447}, // 0420 - 0427
+    {0x6a, 0x0448}, {0x6a, 0x0449}, {0x6a, 0x044A}, {0x6a, 0x044B}, {0x6a, 0x044C}, {0x6a, 0x044D}, {0x6a, 0x044E}, {0x6a, 0x044F}, // 0428 - 042f
+    {0x15, 0x0410}, {0x15, 0x0411}, {0x15, 0x0412}, {0x15, 0x0413}, {0x15, 0x0414}, {0x15, 0x0415}, {0x15, 0x0416}, {0x15, 0x0417}, // 0430 - 0437
+    {0x15, 0x0418}, {0x15, 0x0419}, {0x15, 0x041A}, {0x15, 0x041B}, {0x15, 0x041C}, {0x15, 0x041D}, {0x15, 0x041E}, {0x15, 0x041F}, // 0438 - 043f
+    {0x15, 0x0420}, {0x15, 0x0421}, {0x15, 0x0422}, {0x15, 0x0423}, {0x15, 0x0424}, {0x15, 0x0425}, {0x15, 0x0426}, {0x15, 0x0427}, // 0440 - 0447
+    {0x15, 0x0428}, {0x15, 0x0429}, {0x15, 0x042A}, {0x15, 0x042B}, {0x15, 0x042C}, {0x15, 0x042D}, {0x15, 0x042E}, {0x15, 0x042F}, // 0448 - 044f
+    {0x15, 0x0400}, {0x15, 0x0401}, {0x15, 0x0402}, {0x15, 0x0403}, {0x15, 0x0404}, {0x15, 0x0405}, {0x15, 0x0406}, {0x15, 0x0407}, // 0450 - 0457
+    {0x15, 0x0408}, {0x15, 0x0409}, {0x15, 0x040A}, {0x15, 0x040B}, {0x15, 0x040C}, {0x15, 0x040D}, {0x15, 0x040E}, {0x15, 0x040F}, // 0458 - 045f
+    {0x6a, 0x0461}, {0x15, 0x0460}, {0x6a, 0x0463}, {0x15, 0x0462}, {0x6a, 0x0465}, {0x15, 0x0464}, {0x6a, 0x0467}, {0x15, 0x0466}, // 0460 - 0467
+    {0x6a, 0x0469}, {0x15, 0x0468}, {0x6a, 0x046B}, {0x15, 0x046A}, {0x6a, 0x046D}, {0x15, 0x046C}, {0x6a, 0x046F}, {0x15, 0x046E}, // 0468 - 046f
+    {0x6a, 0x0471}, {0x15, 0x0470}, {0x6a, 0x0473}, {0x15, 0x0472}, {0x6a, 0x0475}, {0x15, 0x0474}, {0x6a, 0x0477}, {0x15, 0x0476}, // 0470 - 0477
+    {0x6a, 0x0479}, {0x15, 0x0478}, {0x6a, 0x047B}, {0x15, 0x047A}, {0x6a, 0x047D}, {0x15, 0x047C}, {0x6a, 0x047F}, {0x15, 0x047E}, // 0478 - 047f
+    {0x6a, 0x0481}, {0x15, 0x0480}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0480 - 0487
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x048D}, {0x15, 0x048C}, {0x6a, 0x048F}, {0x15, 0x048E}, // 0488 - 048f
+    {0x6a, 0x0491}, {0x15, 0x0490}, {0x6a, 0x0493}, {0x15, 0x0492}, {0x6a, 0x0495}, {0x15, 0x0494}, {0x6a, 0x0497}, {0x15, 0x0496}, // 0490 - 0497
+    {0x6a, 0x0499}, {0x15, 0x0498}, {0x6a, 0x049B}, {0x15, 0x049A}, {0x6a, 0x049D}, {0x15, 0x049C}, {0x6a, 0x049F}, {0x15, 0x049E}, // 0498 - 049f
+    {0x6a, 0x04A1}, {0x15, 0x04A0}, {0x6a, 0x04A3}, {0x15, 0x04A2}, {0x6a, 0x04A5}, {0x15, 0x04A4}, {0x6a, 0x04A7}, {0x15, 0x04A6}, // 04a0 - 04a7
+    {0x6a, 0x04A9}, {0x15, 0x04A8}, {0x6a, 0x04AB}, {0x15, 0x04AA}, {0x6a, 0x04AD}, {0x15, 0x04AC}, {0x6a, 0x04AF}, {0x15, 0x04AE}, // 04a8 - 04af
+    {0x6a, 0x04B1}, {0x15, 0x04B0}, {0x6a, 0x04B3}, {0x15, 0x04B2}, {0x6a, 0x04B5}, {0x15, 0x04B4}, {0x6a, 0x04B7}, {0x15, 0x04B6}, // 04b0 - 04b7
+    {0x6a, 0x04B9}, {0x15, 0x04B8}, {0x6a, 0x04BB}, {0x15, 0x04BA}, {0x6a, 0x04BD}, {0x15, 0x04BC}, {0x6a, 0x04BF}, {0x15, 0x04BE}, // 04b8 - 04bf
+    {0x00, 0x0000}, {0x6a, 0x04C2}, {0x15, 0x04C1}, {0x6a, 0x04C4}, {0x15, 0x04C3}, {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x04C8}, // 04c0 - 04c7
+    {0x15, 0x04C7}, {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x04CC}, {0x15, 0x04CB}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 04c8 - 04cf
+    {0x6a, 0x04D1}, {0x15, 0x04D0}, {0x6a, 0x04D3}, {0x15, 0x04D2}, {0x6a, 0x04D5}, {0x15, 0x04D4}, {0x6a, 0x04D7}, {0x15, 0x04D6}, // 04d0 - 04d7
+    {0x6a, 0x04D9}, {0x15, 0x04D8}, {0x6a, 0x04DB}, {0x15, 0x04DA}, {0x6a, 0x04DD}, {0x15, 0x04DC}, {0x6a, 0x04DF}, {0x15, 0x04DE}, // 04d8 - 04df
+    {0x6a, 0x04E1}, {0x15, 0x04E0}, {0x6a, 0x04E3}, {0x15, 0x04E2}, {0x6a, 0x04E5}, {0x15, 0x04E4}, {0x6a, 0x04E7}, {0x15, 0x04E6}, // 04e0 - 04e7
+    {0x6a, 0x04E9}, {0x15, 0x04E8}, {0x6a, 0x04EB}, {0x15, 0x04EA}, {0x6a, 0x04ED}, {0x15, 0x04EC}, {0x6a, 0x04EF}, {0x15, 0x04EE}, // 04e8 - 04ef
+    {0x6a, 0x04F1}, {0x15, 0x04F0}, {0x6a, 0x04F3}, {0x15, 0x04F2}, {0x6a, 0x04F5}, {0x15, 0x04F4}, {0x00, 0x0000}, {0x00, 0x0000}, // 04f0 - 04f7
+    {0x6a, 0x04F9}, {0x15, 0x04F8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 04f8 - 04ff
+
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0500 - 0507
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0508 - 050f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0510 - 0517
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0518 - 051f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0520 - 0527
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0528 - 052f
+    {0x00, 0x0000}, {0x6a, 0x0561}, {0x6a, 0x0562}, {0x6a, 0x0563}, {0x6a, 0x0564}, {0x6a, 0x0565}, {0x6a, 0x0566}, {0x6a, 0x0567}, // 0530 - 0537
+    {0x6a, 0x0568}, {0x6a, 0x0569}, {0x6a, 0x056A}, {0x6a, 0x056B}, {0x6a, 0x056C}, {0x6a, 0x056D}, {0x6a, 0x056E}, {0x6a, 0x056F}, // 0538 - 053f
+    {0x6a, 0x0570}, {0x6a, 0x0571}, {0x6a, 0x0572}, {0x6a, 0x0573}, {0x6a, 0x0574}, {0x6a, 0x0575}, {0x6a, 0x0576}, {0x6a, 0x0577}, // 0540 - 0547
+    {0x6a, 0x0578}, {0x6a, 0x0579}, {0x6a, 0x057A}, {0x6a, 0x057B}, {0x6a, 0x057C}, {0x6a, 0x057D}, {0x6a, 0x057E}, {0x6a, 0x057F}, // 0548 - 054f
+    {0x6a, 0x0580}, {0x6a, 0x0581}, {0x6a, 0x0582}, {0x6a, 0x0583}, {0x6a, 0x0584}, {0x6a, 0x0585}, {0x6a, 0x0586}, {0x00, 0x0000}, // 0550 - 0557
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0558 - 055f
+    {0x00, 0x0000}, {0x15, 0x0531}, {0x15, 0x0532}, {0x15, 0x0533}, {0x15, 0x0534}, {0x15, 0x0535}, {0x15, 0x0536}, {0x15, 0x0537}, // 0560 - 0567
+    {0x15, 0x0538}, {0x15, 0x0539}, {0x15, 0x053A}, {0x15, 0x053B}, {0x15, 0x053C}, {0x15, 0x053D}, {0x15, 0x053E}, {0x15, 0x053F}, // 0568 - 056f
+    {0x15, 0x0540}, {0x15, 0x0541}, {0x15, 0x0542}, {0x15, 0x0543}, {0x15, 0x0544}, {0x15, 0x0545}, {0x15, 0x0546}, {0x15, 0x0547}, // 0570 - 0577
+    {0x15, 0x0548}, {0x15, 0x0549}, {0x15, 0x054A}, {0x15, 0x054B}, {0x15, 0x054C}, {0x15, 0x054D}, {0x15, 0x054E}, {0x15, 0x054F}, // 0578 - 057f
+    {0x15, 0x0550}, {0x15, 0x0551}, {0x15, 0x0552}, {0x15, 0x0553}, {0x15, 0x0554}, {0x15, 0x0555}, {0x15, 0x0556}, {0xd5, 0x004C}, // 0580 - 0587
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0588 - 058f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0590 - 0597
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 0598 - 059f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05a0 - 05a7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05a8 - 05af
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05b0 - 05b7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05b8 - 05bf
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05c0 - 05c7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05c8 - 05cf
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05d0 - 05d7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05d8 - 05df
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05e0 - 05e7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05e8 - 05ef
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05f0 - 05f7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 05f8 - 05ff
+
+    {0x6a, 0x1E01}, {0x15, 0x1E00}, {0x6a, 0x1E03}, {0x15, 0x1E02}, {0x6a, 0x1E05}, {0x15, 0x1E04}, {0x6a, 0x1E07}, {0x15, 0x1E06}, // 1e00 - 1e07
+    {0x6a, 0x1E09}, {0x15, 0x1E08}, {0x6a, 0x1E0B}, {0x15, 0x1E0A}, {0x6a, 0x1E0D}, {0x15, 0x1E0C}, {0x6a, 0x1E0F}, {0x15, 0x1E0E}, // 1e08 - 1e0f
+    {0x6a, 0x1E11}, {0x15, 0x1E10}, {0x6a, 0x1E13}, {0x15, 0x1E12}, {0x6a, 0x1E15}, {0x15, 0x1E14}, {0x6a, 0x1E17}, {0x15, 0x1E16}, // 1e10 - 1e17
+    {0x6a, 0x1E19}, {0x15, 0x1E18}, {0x6a, 0x1E1B}, {0x15, 0x1E1A}, {0x6a, 0x1E1D}, {0x15, 0x1E1C}, {0x6a, 0x1E1F}, {0x15, 0x1E1E}, // 1e18 - 1e1f
+    {0x6a, 0x1E21}, {0x15, 0x1E20}, {0x6a, 0x1E23}, {0x15, 0x1E22}, {0x6a, 0x1E25}, {0x15, 0x1E24}, {0x6a, 0x1E27}, {0x15, 0x1E26}, // 1e20 - 1e27
+    {0x6a, 0x1E29}, {0x15, 0x1E28}, {0x6a, 0x1E2B}, {0x15, 0x1E2A}, {0x6a, 0x1E2D}, {0x15, 0x1E2C}, {0x6a, 0x1E2F}, {0x15, 0x1E2E}, // 1e28 - 1e2f
+    {0x6a, 0x1E31}, {0x15, 0x1E30}, {0x6a, 0x1E33}, {0x15, 0x1E32}, {0x6a, 0x1E35}, {0x15, 0x1E34}, {0x6a, 0x1E37}, {0x15, 0x1E36}, // 1e30 - 1e37
+    {0x6a, 0x1E39}, {0x15, 0x1E38}, {0x6a, 0x1E3B}, {0x15, 0x1E3A}, {0x6a, 0x1E3D}, {0x15, 0x1E3C}, {0x6a, 0x1E3F}, {0x15, 0x1E3E}, // 1e38 - 1e3f
+    {0x6a, 0x1E41}, {0x15, 0x1E40}, {0x6a, 0x1E43}, {0x15, 0x1E42}, {0x6a, 0x1E45}, {0x15, 0x1E44}, {0x6a, 0x1E47}, {0x15, 0x1E46}, // 1e40 - 1e47
+    {0x6a, 0x1E49}, {0x15, 0x1E48}, {0x6a, 0x1E4B}, {0x15, 0x1E4A}, {0x6a, 0x1E4D}, {0x15, 0x1E4C}, {0x6a, 0x1E4F}, {0x15, 0x1E4E}, // 1e48 - 1e4f
+    {0x6a, 0x1E51}, {0x15, 0x1E50}, {0x6a, 0x1E53}, {0x15, 0x1E52}, {0x6a, 0x1E55}, {0x15, 0x1E54}, {0x6a, 0x1E57}, {0x15, 0x1E56}, // 1e50 - 1e57
+    {0x6a, 0x1E59}, {0x15, 0x1E58}, {0x6a, 0x1E5B}, {0x15, 0x1E5A}, {0x6a, 0x1E5D}, {0x15, 0x1E5C}, {0x6a, 0x1E5F}, {0x15, 0x1E5E}, // 1e58 - 1e5f
+    {0x6a, 0x1E61}, {0x15, 0x1E60}, {0x6a, 0x1E63}, {0x15, 0x1E62}, {0x6a, 0x1E65}, {0x15, 0x1E64}, {0x6a, 0x1E67}, {0x15, 0x1E66}, // 1e60 - 1e67
+    {0x6a, 0x1E69}, {0x15, 0x1E68}, {0x6a, 0x1E6B}, {0x15, 0x1E6A}, {0x6a, 0x1E6D}, {0x15, 0x1E6C}, {0x6a, 0x1E6F}, {0x15, 0x1E6E}, // 1e68 - 1e6f
+    {0x6a, 0x1E71}, {0x15, 0x1E70}, {0x6a, 0x1E73}, {0x15, 0x1E72}, {0x6a, 0x1E75}, {0x15, 0x1E74}, {0x6a, 0x1E77}, {0x15, 0x1E76}, // 1e70 - 1e77
+    {0x6a, 0x1E79}, {0x15, 0x1E78}, {0x6a, 0x1E7B}, {0x15, 0x1E7A}, {0x6a, 0x1E7D}, {0x15, 0x1E7C}, {0x6a, 0x1E7F}, {0x15, 0x1E7E}, // 1e78 - 1e7f
+    {0x6a, 0x1E81}, {0x15, 0x1E80}, {0x6a, 0x1E83}, {0x15, 0x1E82}, {0x6a, 0x1E85}, {0x15, 0x1E84}, {0x6a, 0x1E87}, {0x15, 0x1E86}, // 1e80 - 1e87
+    {0x6a, 0x1E89}, {0x15, 0x1E88}, {0x6a, 0x1E8B}, {0x15, 0x1E8A}, {0x6a, 0x1E8D}, {0x15, 0x1E8C}, {0x6a, 0x1E8F}, {0x15, 0x1E8E}, // 1e88 - 1e8f
+    {0x6a, 0x1E91}, {0x15, 0x1E90}, {0x6a, 0x1E93}, {0x15, 0x1E92}, {0x6a, 0x1E95}, {0x15, 0x1E94}, {0xd5, 0x004F}, {0xd5, 0x0051}, // 1e90 - 1e97
+    {0xd5, 0x0053}, {0xd5, 0x0055}, {0xd5, 0x0057}, {0xf5, 0x0059}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 1e98 - 1e9f
+    {0x6a, 0x1EA1}, {0x15, 0x1EA0}, {0x6a, 0x1EA3}, {0x15, 0x1EA2}, {0x6a, 0x1EA5}, {0x15, 0x1EA4}, {0x6a, 0x1EA7}, {0x15, 0x1EA6}, // 1ea0 - 1ea7
+    {0x6a, 0x1EA9}, {0x15, 0x1EA8}, {0x6a, 0x1EAB}, {0x15, 0x1EAA}, {0x6a, 0x1EAD}, {0x15, 0x1EAC}, {0x6a, 0x1EAF}, {0x15, 0x1EAE}, // 1ea8 - 1eaf
+    {0x6a, 0x1EB1}, {0x15, 0x1EB0}, {0x6a, 0x1EB3}, {0x15, 0x1EB2}, {0x6a, 0x1EB5}, {0x15, 0x1EB4}, {0x6a, 0x1EB7}, {0x15, 0x1EB6}, // 1eb0 - 1eb7
+    {0x6a, 0x1EB9}, {0x15, 0x1EB8}, {0x6a, 0x1EBB}, {0x15, 0x1EBA}, {0x6a, 0x1EBD}, {0x15, 0x1EBC}, {0x6a, 0x1EBF}, {0x15, 0x1EBE}, // 1eb8 - 1ebf
+    {0x6a, 0x1EC1}, {0x15, 0x1EC0}, {0x6a, 0x1EC3}, {0x15, 0x1EC2}, {0x6a, 0x1EC5}, {0x15, 0x1EC4}, {0x6a, 0x1EC7}, {0x15, 0x1EC6}, // 1ec0 - 1ec7
+    {0x6a, 0x1EC9}, {0x15, 0x1EC8}, {0x6a, 0x1ECB}, {0x15, 0x1ECA}, {0x6a, 0x1ECD}, {0x15, 0x1ECC}, {0x6a, 0x1ECF}, {0x15, 0x1ECE}, // 1ec8 - 1ecf
+    {0x6a, 0x1ED1}, {0x15, 0x1ED0}, {0x6a, 0x1ED3}, {0x15, 0x1ED2}, {0x6a, 0x1ED5}, {0x15, 0x1ED4}, {0x6a, 0x1ED7}, {0x15, 0x1ED6}, // 1ed0 - 1ed7
+    {0x6a, 0x1ED9}, {0x15, 0x1ED8}, {0x6a, 0x1EDB}, {0x15, 0x1EDA}, {0x6a, 0x1EDD}, {0x15, 0x1EDC}, {0x6a, 0x1EDF}, {0x15, 0x1EDE}, // 1ed8 - 1edf
+    {0x6a, 0x1EE1}, {0x15, 0x1EE0}, {0x6a, 0x1EE3}, {0x15, 0x1EE2}, {0x6a, 0x1EE5}, {0x15, 0x1EE4}, {0x6a, 0x1EE7}, {0x15, 0x1EE6}, // 1ee0 - 1ee7
+    {0x6a, 0x1EE9}, {0x15, 0x1EE8}, {0x6a, 0x1EEB}, {0x15, 0x1EEA}, {0x6a, 0x1EED}, {0x15, 0x1EEC}, {0x6a, 0x1EEF}, {0x15, 0x1EEE}, // 1ee8 - 1eef
+    {0x6a, 0x1EF1}, {0x15, 0x1EF0}, {0x6a, 0x1EF3}, {0x15, 0x1EF2}, {0x6a, 0x1EF5}, {0x15, 0x1EF4}, {0x6a, 0x1EF7}, {0x15, 0x1EF6}, // 1ef0 - 1ef7
+    {0x6a, 0x1EF9}, {0x15, 0x1EF8}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 1ef8 - 1eff
+
+    {0x15, 0x1F08}, {0x15, 0x1F09}, {0x15, 0x1F0A}, {0x15, 0x1F0B}, {0x15, 0x1F0C}, {0x15, 0x1F0D}, {0x15, 0x1F0E}, {0x15, 0x1F0F}, // 1f00 - 1f07
+    {0x6a, 0x1F00}, {0x6a, 0x1F01}, {0x6a, 0x1F02}, {0x6a, 0x1F03}, {0x6a, 0x1F04}, {0x6a, 0x1F05}, {0x6a, 0x1F06}, {0x6a, 0x1F07}, // 1f08 - 1f0f
+    {0x15, 0x1F18}, {0x15, 0x1F19}, {0x15, 0x1F1A}, {0x15, 0x1F1B}, {0x15, 0x1F1C}, {0x15, 0x1F1D}, {0x00, 0x0000}, {0x00, 0x0000}, // 1f10 - 1f17
+    {0x6a, 0x1F10}, {0x6a, 0x1F11}, {0x6a, 0x1F12}, {0x6a, 0x1F13}, {0x6a, 0x1F14}, {0x6a, 0x1F15}, {0x00, 0x0000}, {0x00, 0x0000}, // 1f18 - 1f1f
+    {0x15, 0x1F28}, {0x15, 0x1F29}, {0x15, 0x1F2A}, {0x15, 0x1F2B}, {0x15, 0x1F2C}, {0x15, 0x1F2D}, {0x15, 0x1F2E}, {0x15, 0x1F2F}, // 1f20 - 1f27
+    {0x6a, 0x1F20}, {0x6a, 0x1F21}, {0x6a, 0x1F22}, {0x6a, 0x1F23}, {0x6a, 0x1F24}, {0x6a, 0x1F25}, {0x6a, 0x1F26}, {0x6a, 0x1F27}, // 1f28 - 1f2f
+    {0x15, 0x1F38}, {0x15, 0x1F39}, {0x15, 0x1F3A}, {0x15, 0x1F3B}, {0x15, 0x1F3C}, {0x15, 0x1F3D}, {0x15, 0x1F3E}, {0x15, 0x1F3F}, // 1f30 - 1f37
+    {0x6a, 0x1F30}, {0x6a, 0x1F31}, {0x6a, 0x1F32}, {0x6a, 0x1F33}, {0x6a, 0x1F34}, {0x6a, 0x1F35}, {0x6a, 0x1F36}, {0x6a, 0x1F37}, // 1f38 - 1f3f
+    {0x15, 0x1F48}, {0x15, 0x1F49}, {0x15, 0x1F4A}, {0x15, 0x1F4B}, {0x15, 0x1F4C}, {0x15, 0x1F4D}, {0x00, 0x0000}, {0x00, 0x0000}, // 1f40 - 1f47
+    {0x6a, 0x1F40}, {0x6a, 0x1F41}, {0x6a, 0x1F42}, {0x6a, 0x1F43}, {0x6a, 0x1F44}, {0x6a, 0x1F45}, {0x00, 0x0000}, {0x00, 0x0000}, // 1f48 - 1f4f
+    {0xd5, 0x005B}, {0x15, 0x1F59}, {0xd5, 0x005D}, {0x15, 0x1F5B}, {0xd5, 0x005F}, {0x15, 0x1F5D}, {0xd5, 0x0061}, {0x15, 0x1F5F}, // 1f50 - 1f57
+    {0x00, 0x0000}, {0x6a, 0x1F51}, {0x00, 0x0000}, {0x6a, 0x1F53}, {0x00, 0x0000}, {0x6a, 0x1F55}, {0x00, 0x0000}, {0x6a, 0x1F57}, // 1f58 - 1f5f
+    {0x15, 0x1F68}, {0x15, 0x1F69}, {0x15, 0x1F6A}, {0x15, 0x1F6B}, {0x15, 0x1F6C}, {0x15, 0x1F6D}, {0x15, 0x1F6E}, {0x15, 0x1F6F}, // 1f60 - 1f67
+    {0x6a, 0x1F60}, {0x6a, 0x1F61}, {0x6a, 0x1F62}, {0x6a, 0x1F63}, {0x6a, 0x1F64}, {0x6a, 0x1F65}, {0x6a, 0x1F66}, {0x6a, 0x1F67}, // 1f68 - 1f6f
+    {0x15, 0x1FBA}, {0x15, 0x1FBB}, {0x15, 0x1FC8}, {0x15, 0x1FC9}, {0x15, 0x1FCA}, {0x15, 0x1FCB}, {0x15, 0x1FDA}, {0x15, 0x1FDB}, // 1f70 - 1f77
+    {0x15, 0x1FF8}, {0x15, 0x1FF9}, {0x15, 0x1FEA}, {0x15, 0x1FEB}, {0x15, 0x1FFA}, {0x15, 0x1FFB}, {0x00, 0x0000}, {0x00, 0x0000}, // 1f78 - 1f7f
+    {0xd5, 0x0063}, {0xd5, 0x0066}, {0xd5, 0x0069}, {0xd5, 0x006C}, {0xd5, 0x006F}, {0xd5, 0x0072}, {0xd5, 0x0075}, {0xd5, 0x0078}, // 1f80 - 1f87
+    {0xec, 0x007B}, {0xec, 0x007E}, {0xec, 0x0081}, {0xec, 0x0084}, {0xec, 0x0087}, {0xec, 0x008A}, {0xec, 0x008D}, {0xec, 0x0090}, // 1f88 - 1f8f
+    {0xd5, 0x0093}, {0xd5, 0x0096}, {0xd5, 0x0099}, {0xd5, 0x009C}, {0xd5, 0x009F}, {0xd5, 0x00A2}, {0xd5, 0x00A5}, {0xd5, 0x00A8}, // 1f90 - 1f97
+    {0xec, 0x00AB}, {0xec, 0x00AE}, {0xec, 0x00B1}, {0xec, 0x00B4}, {0xec, 0x00B7}, {0xec, 0x00BA}, {0xec, 0x00BD}, {0xec, 0x00C0}, // 1f98 - 1f9f
+    {0xd5, 0x00C3}, {0xd5, 0x00C6}, {0xd5, 0x00C9}, {0xd5, 0x00CC}, {0xd5, 0x00CF}, {0xd5, 0x00D2}, {0xd5, 0x00D5}, {0xd5, 0x00D8}, // 1fa0 - 1fa7
+    {0xec, 0x00DB}, {0xec, 0x00DE}, {0xec, 0x00E1}, {0xec, 0x00E4}, {0xec, 0x00E7}, {0xec, 0x00EA}, {0xec, 0x00ED}, {0xec, 0x00F0}, // 1fa8 - 1faf
+    {0x15, 0x1FB8}, {0x15, 0x1FB9}, {0xd5, 0x00F3}, {0xd5, 0x00F6}, {0xd5, 0x00F9}, {0x00, 0x0000}, {0xd5, 0x00FC}, {0xd5, 0x00FE}, // 1fb0 - 1fb7
+    {0x6a, 0x1FB0}, {0x6a, 0x1FB1}, {0x6a, 0x1F70}, {0x6a, 0x1F71}, {0xec, 0x0101}, {0x00, 0x0000}, {0xf5, 0x0104}, {0x00, 0x0000}, // 1fb8 - 1fbf
+    {0x00, 0x0000}, {0x00, 0x0000}, {0xd5, 0x0106}, {0xd5, 0x0109}, {0xd5, 0x010C}, {0x00, 0x0000}, {0xd5, 0x010F}, {0xd5, 0x0111}, // 1fc0 - 1fc7
+    {0x6a, 0x1F72}, {0x6a, 0x1F73}, {0x6a, 0x1F74}, {0x6a, 0x1F75}, {0xec, 0x0114}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 1fc8 - 1fcf
+    {0x15, 0x1FD8}, {0x15, 0x1FD9}, {0xd5, 0x0117}, {0xd5, 0x0119}, {0x00, 0x0000}, {0x00, 0x0000}, {0xd5, 0x011B}, {0xd5, 0x011D}, // 1fd0 - 1fd7
+    {0x6a, 0x1FD0}, {0x6a, 0x1FD1}, {0x6a, 0x1F76}, {0x6a, 0x1F77}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 1fd8 - 1fdf
+    {0x15, 0x1FE8}, {0x15, 0x1FE9}, {0xd5, 0x011F}, {0xd5, 0x0121}, {0xd5, 0x0123}, {0x15, 0x1FEC}, {0xd5, 0x0125}, {0xd5, 0x0127}, // 1fe0 - 1fe7
+    {0x6a, 0x1FE0}, {0x6a, 0x1FE1}, {0x6a, 0x1F7A}, {0x6a, 0x1F7B}, {0x6a, 0x1FE5}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 1fe8 - 1fef
+    {0x00, 0x0000}, {0x00, 0x0000}, {0xd5, 0x0129}, {0xd5, 0x012C}, {0xd5, 0x012F}, {0x00, 0x0000}, {0xd5, 0x0132}, {0xd5, 0x0134}, // 1ff0 - 1ff7
+    {0x6a, 0x1F78}, {0x6a, 0x1F79}, {0x6a, 0x1F7C}, {0x6a, 0x1F7D}, {0xec, 0x0137}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 1ff8 - 1fff
+
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2100 - 2107
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2108 - 210f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2110 - 2117
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2118 - 211f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x03C9}, {0x00, 0x0000}, // 2120 - 2127
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x6a, 0x006B}, {0x6a, 0x00E5}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2128 - 212f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2130 - 2137
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2138 - 213f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2140 - 2147
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2148 - 214f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2150 - 2157
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2158 - 215f
+    {0x68, 0x2170}, {0x68, 0x2171}, {0x68, 0x2172}, {0x68, 0x2173}, {0x68, 0x2174}, {0x68, 0x2175}, {0x68, 0x2176}, {0x68, 0x2177}, // 2160 - 2167
+    {0x68, 0x2178}, {0x68, 0x2179}, {0x68, 0x217A}, {0x68, 0x217B}, {0x68, 0x217C}, {0x68, 0x217D}, {0x68, 0x217E}, {0x68, 0x217F}, // 2168 - 216f
+    {0x14, 0x2160}, {0x14, 0x2161}, {0x14, 0x2162}, {0x14, 0x2163}, {0x14, 0x2164}, {0x14, 0x2165}, {0x14, 0x2166}, {0x14, 0x2167}, // 2170 - 2177
+    {0x14, 0x2168}, {0x14, 0x2169}, {0x14, 0x216A}, {0x14, 0x216B}, {0x14, 0x216C}, {0x14, 0x216D}, {0x14, 0x216E}, {0x14, 0x216F}, // 2178 - 217f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2180 - 2187
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2188 - 218f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2190 - 2197
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2198 - 219f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21a0 - 21a7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21a8 - 21af
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21b0 - 21b7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21b8 - 21bf
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21c0 - 21c7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21c8 - 21cf
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21d0 - 21d7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21d8 - 21df
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21e0 - 21e7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21e8 - 21ef
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21f0 - 21f7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 21f8 - 21ff
+
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2400 - 2407
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2408 - 240f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2410 - 2417
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2418 - 241f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2420 - 2427
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2428 - 242f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2430 - 2437
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2438 - 243f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2440 - 2447
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2448 - 244f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2450 - 2457
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2458 - 245f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2460 - 2467
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2468 - 246f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2470 - 2477
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2478 - 247f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2480 - 2487
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2488 - 248f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2490 - 2497
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 2498 - 249f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 24a0 - 24a7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 24a8 - 24af
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x68, 0x24D0}, {0x68, 0x24D1}, // 24b0 - 24b7
+    {0x68, 0x24D2}, {0x68, 0x24D3}, {0x68, 0x24D4}, {0x68, 0x24D5}, {0x68, 0x24D6}, {0x68, 0x24D7}, {0x68, 0x24D8}, {0x68, 0x24D9}, // 24b8 - 24bf
+    {0x68, 0x24DA}, {0x68, 0x24DB}, {0x68, 0x24DC}, {0x68, 0x24DD}, {0x68, 0x24DE}, {0x68, 0x24DF}, {0x68, 0x24E0}, {0x68, 0x24E1}, // 24c0 - 24c7
+    {0x68, 0x24E2}, {0x68, 0x24E3}, {0x68, 0x24E4}, {0x68, 0x24E5}, {0x68, 0x24E6}, {0x68, 0x24E7}, {0x68, 0x24E8}, {0x68, 0x24E9}, // 24c8 - 24cf
+    {0x14, 0x24B6}, {0x14, 0x24B7}, {0x14, 0x24B8}, {0x14, 0x24B9}, {0x14, 0x24BA}, {0x14, 0x24BB}, {0x14, 0x24BC}, {0x14, 0x24BD}, // 24d0 - 24d7
+    {0x14, 0x24BE}, {0x14, 0x24BF}, {0x14, 0x24C0}, {0x14, 0x24C1}, {0x14, 0x24C2}, {0x14, 0x24C3}, {0x14, 0x24C4}, {0x14, 0x24C5}, // 24d8 - 24df
+    {0x14, 0x24C6}, {0x14, 0x24C7}, {0x14, 0x24C8}, {0x14, 0x24C9}, {0x14, 0x24CA}, {0x14, 0x24CB}, {0x14, 0x24CC}, {0x14, 0x24CD}, // 24e0 - 24e7
+    {0x14, 0x24CE}, {0x14, 0x24CF}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 24e8 - 24ef
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 24f0 - 24f7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // 24f8 - 24ff
+
+    {0xd5, 0x013A}, {0xd5, 0x013D}, {0xd5, 0x0140}, {0xd5, 0x0143}, {0xd5, 0x0146}, {0xd5, 0x0149}, {0xd5, 0x014C}, {0x00, 0x0000}, // fb00 - fb07
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb08 - fb0f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0xd5, 0x014F}, {0xd5, 0x0152}, {0xd5, 0x0155}, {0xd5, 0x0158}, {0xd5, 0x015B}, // fb10 - fb17
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb18 - fb1f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb20 - fb27
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb28 - fb2f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb30 - fb37
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb38 - fb3f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb40 - fb47
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb48 - fb4f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb50 - fb57
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb58 - fb5f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb60 - fb67
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb68 - fb6f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb70 - fb77
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb78 - fb7f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb80 - fb87
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb88 - fb8f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb90 - fb97
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fb98 - fb9f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fba0 - fba7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fba8 - fbaf
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbb0 - fbb7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbb8 - fbbf
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbc0 - fbc7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbc8 - fbcf
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbd0 - fbd7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbd8 - fbdf
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbe0 - fbe7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbe8 - fbef
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbf0 - fbf7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fbf8 - fbff
+
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff00 - ff07
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff08 - ff0f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff10 - ff17
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff18 - ff1f
+    {0x00, 0x0000}, {0x6a, 0xFF41}, {0x6a, 0xFF42}, {0x6a, 0xFF43}, {0x6a, 0xFF44}, {0x6a, 0xFF45}, {0x6a, 0xFF46}, {0x6a, 0xFF47}, // ff20 - ff27
+    {0x6a, 0xFF48}, {0x6a, 0xFF49}, {0x6a, 0xFF4A}, {0x6a, 0xFF4B}, {0x6a, 0xFF4C}, {0x6a, 0xFF4D}, {0x6a, 0xFF4E}, {0x6a, 0xFF4F}, // ff28 - ff2f
+    {0x6a, 0xFF50}, {0x6a, 0xFF51}, {0x6a, 0xFF52}, {0x6a, 0xFF53}, {0x6a, 0xFF54}, {0x6a, 0xFF55}, {0x6a, 0xFF56}, {0x6a, 0xFF57}, // ff30 - ff37
+    {0x6a, 0xFF58}, {0x6a, 0xFF59}, {0x6a, 0xFF5A}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff38 - ff3f
+    {0x00, 0x0000}, {0x15, 0xFF21}, {0x15, 0xFF22}, {0x15, 0xFF23}, {0x15, 0xFF24}, {0x15, 0xFF25}, {0x15, 0xFF26}, {0x15, 0xFF27}, // ff40 - ff47
+    {0x15, 0xFF28}, {0x15, 0xFF29}, {0x15, 0xFF2A}, {0x15, 0xFF2B}, {0x15, 0xFF2C}, {0x15, 0xFF2D}, {0x15, 0xFF2E}, {0x15, 0xFF2F}, // ff48 - ff4f
+    {0x15, 0xFF30}, {0x15, 0xFF31}, {0x15, 0xFF32}, {0x15, 0xFF33}, {0x15, 0xFF34}, {0x15, 0xFF35}, {0x15, 0xFF36}, {0x15, 0xFF37}, // ff50 - ff57
+    {0x15, 0xFF38}, {0x15, 0xFF39}, {0x15, 0xFF3A}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff58 - ff5f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff60 - ff67
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff68 - ff6f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff70 - ff77
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff78 - ff7f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff80 - ff87
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff88 - ff8f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff90 - ff97
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ff98 - ff9f
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffa0 - ffa7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffa8 - ffaf
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffb0 - ffb7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffb8 - ffbf
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffc0 - ffc7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffc8 - ffcf
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffd0 - ffd7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffd8 - ffdf
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffe0 - ffe7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // ffe8 - ffef
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fff0 - fff7
+    {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, {0x00, 0x0000}, // fff8 - ffff
+
+};
+
+
+#define MaxCaseMappingExtras 3
+
+static Mapping CaseMappingExtra[] = {
+    {0x80, 0, 0x0000, 0x0000, 0x0000}, // 0x0000 (0 0x0)
+    {0x60, 1, 0x0069, 0x0000, 0x0000}, // 0x0049 (1 0x1)
+    {0x8a, 0, 0x0000, 0x0000, 0x0000}, // 0x0049 (2 0x2)
+    {0x60, 1, 0x006A, 0x0000, 0x0000}, // 0x004a (3 0x3)
+    {0x8a, 0, 0x0000, 0x0000, 0x0000}, // 0x004a (4 0x4)
+    {0x15, 1, 0x039C, 0x0000, 0x0000}, // 0x00b5 (5 0x5)
+    {0x60, 1, 0x03BC, 0x0000, 0x0000}, // 0x00b5 (6 0x6)
+    {0x60, 1, 0x00EC, 0x0000, 0x0000}, // 0x00cc (7 0x7)
+    {0x8a, 0, 0x0000, 0x0000, 0x0000}, // 0x00cc (8 0x8)
+    {0x60, 1, 0x00ED, 0x0000, 0x0000}, // 0x00cd (9 0x9)
+    {0x8a, 0, 0x0000, 0x0000, 0x0000}, // 0x00cd (10 0xa)
+    {0x05, 2, 0x0053, 0x0053, 0x0000}, // 0x00df (11 0xb)
+    {0x10, 2, 0x0053, 0x0073, 0x0000}, // 0x00df (12 0xc)
+    {0x40, 2, 0x0073, 0x0073, 0x0000}, // 0x00df (13 0xd)
+    {0x60, 1, 0x0129, 0x0000, 0x0000}, // 0x0128 (14 0xe)
+    {0x8a, 0, 0x0000, 0x0000, 0x0000}, // 0x0128 (15 0xf)
+    {0x60, 1, 0x012F, 0x0000, 0x0000}, // 0x012e (16 0x10)
+    {0x8a, 0, 0x0000, 0x0000, 0x0000}, // 0x012e (17 0x11)
+    {0x15, 1, 0x0049, 0x0000, 0x0000}, // 0x0131 (18 0x12)
+    {0x60, 1, 0x0069, 0x0000, 0x0000}, // 0x0131 (19 0x13)
+    {0x15, 2, 0x02BC, 0x004E, 0x0000}, // 0x0149 (20 0x14)
+    {0x40, 2, 0x02BC, 0x006E, 0x0000}, // 0x0149 (21 0x15)
+    {0x15, 1, 0x0053, 0x0000, 0x0000}, // 0x017f (22 0x16)
+    {0x60, 1, 0x0073, 0x0000, 0x0000}, // 0x017f (23 0x17)
+    {0x6a, 1, 0x01C6, 0x0000, 0x0000}, // 0x01c4 (24 0x18)
+    {0x10, 1, 0x01C5, 0x0000, 0x0000}, // 0x01c4 (25 0x19)
+    {0x68, 1, 0x01C6, 0x0000, 0x0000}, // 0x01c5 (26 0x1a)
+    {0x04, 1, 0x01C4, 0x0000, 0x0000}, // 0x01c5 (27 0x1b)
+    {0x05, 1, 0x01C4, 0x0000, 0x0000}, // 0x01c6 (28 0x1c)
+    {0x10, 1, 0x01C5, 0x0000, 0x0000}, // 0x01c6 (29 0x1d)
+    {0x6a, 1, 0x01C9, 0x0000, 0x0000}, // 0x01c7 (30 0x1e)
+    {0x10, 1, 0x01C8, 0x0000, 0x0000}, // 0x01c7 (31 0x1f)
+    {0x68, 1, 0x01C9, 0x0000, 0x0000}, // 0x01c8 (32 0x20)
+    {0x04, 1, 0x01C7, 0x0000, 0x0000}, // 0x01c8 (33 0x21)
+    {0x05, 1, 0x01C7, 0x0000, 0x0000}, // 0x01c9 (34 0x22)
+    {0x10, 1, 0x01C8, 0x0000, 0x0000}, // 0x01c9 (35 0x23)
+    {0x6a, 1, 0x01CC, 0x0000, 0x0000}, // 0x01ca (36 0x24)
+    {0x10, 1, 0x01CB, 0x0000, 0x0000}, // 0x01ca (37 0x25)
+    {0x68, 1, 0x01CC, 0x0000, 0x0000}, // 0x01cb (38 0x26)
+    {0x04, 1, 0x01CA, 0x0000, 0x0000}, // 0x01cb (39 0x27)
+    {0x05, 1, 0x01CA, 0x0000, 0x0000}, // 0x01cc (40 0x28)
+    {0x10, 1, 0x01CB, 0x0000, 0x0000}, // 0x01cc (41 0x29)
+    {0x15, 2, 0x004A, 0x030C, 0x0000}, // 0x01f0 (42 0x2a)
+    {0x40, 2, 0x006A, 0x030C, 0x0000}, // 0x01f0 (43 0x2b)
+    {0x6a, 1, 0x01F3, 0x0000, 0x0000}, // 0x01f1 (44 0x2c)
+    {0x10, 1, 0x01F2, 0x0000, 0x0000}, // 0x01f1 (45 0x2d)
+    {0x68, 1, 0x01F3, 0x0000, 0x0000}, // 0x01f2 (46 0x2e)
+    {0x04, 1, 0x01F1, 0x0000, 0x0000}, // 0x01f2 (47 0x2f)
+    {0x05, 1, 0x01F1, 0x0000, 0x0000}, // 0x01f3 (48 0x30)
+    {0x10, 1, 0x01F2, 0x0000, 0x0000}, // 0x01f3 (49 0x31)
+    {0x14, 1, 0x0399, 0x0000, 0x0000}, // 0x0345 (50 0x32)
+    {0x60, 1, 0x03B9, 0x0000, 0x0000}, // 0x0345 (51 0x33)
+    {0x15, 3, 0x0399, 0x0308, 0x0301}, // 0x0390 (52 0x34)
+    {0x40, 3, 0x03B9, 0x0308, 0x0301}, // 0x0390 (53 0x35)
+    {0x60, 1, 0x03C3, 0x0000, 0x0000}, // 0x03a3 (54 0x36)
+    {0x8a, 0, 0x0000, 0x0000, 0x0000}, // 0x03a3 (55 0x37)
+    {0x15, 3, 0x03A5, 0x0308, 0x0301}, // 0x03b0 (56 0x38)
+    {0x40, 3, 0x03C5, 0x0308, 0x0301}, // 0x03b0 (57 0x39)
+    {0x15, 1, 0x03A3, 0x0000, 0x0000}, // 0x03c2 (58 0x3a)
+    {0x60, 1, 0x03C3, 0x0000, 0x0000}, // 0x03c2 (59 0x3b)
+    {0x15, 1, 0x0392, 0x0000, 0x0000}, // 0x03d0 (60 0x3c)
+    {0x60, 1, 0x03B2, 0x0000, 0x0000}, // 0x03d0 (61 0x3d)
+    {0x15, 1, 0x0398, 0x0000, 0x0000}, // 0x03d1 (62 0x3e)
+    {0x60, 1, 0x03B8, 0x0000, 0x0000}, // 0x03d1 (63 0x3f)
+    {0x15, 1, 0x03A6, 0x0000, 0x0000}, // 0x03d5 (64 0x40)
+    {0x60, 1, 0x03C6, 0x0000, 0x0000}, // 0x03d5 (65 0x41)
+    {0x15, 1, 0x03A0, 0x0000, 0x0000}, // 0x03d6 (66 0x42)
+    {0x60, 1, 0x03C0, 0x0000, 0x0000}, // 0x03d6 (67 0x43)
+    {0x15, 1, 0x039A, 0x0000, 0x0000}, // 0x03f0 (68 0x44)
+    {0x60, 1, 0x03BA, 0x0000, 0x0000}, // 0x03f0 (69 0x45)
+    {0x15, 1, 0x03A1, 0x0000, 0x0000}, // 0x03f1 (70 0x46)
+    {0x60, 1, 0x03C1, 0x0000, 0x0000}, // 0x03f1 (71 0x47)
+    {0x15, 1, 0x03A3, 0x0000, 0x0000}, // 0x03f2 (72 0x48)
+    {0x60, 1, 0x03C3, 0x0000, 0x0000}, // 0x03f2 (73 0x49)
+    {0x15, 1, 0x0395, 0x0000, 0x0000}, // 0x03f5 (74 0x4a)
+    {0x60, 1, 0x03B5, 0x0000, 0x0000}, // 0x03f5 (75 0x4b)
+    {0x05, 2, 0x0535, 0x0552, 0x0000}, // 0x0587 (76 0x4c)
+    {0x10, 2, 0x0535, 0x0582, 0x0000}, // 0x0587 (77 0x4d)
+    {0x40, 2, 0x0565, 0x0582, 0x0000}, // 0x0587 (78 0x4e)
+    {0x15, 2, 0x0048, 0x0331, 0x0000}, // 0x1e96 (79 0x4f)
+    {0x40, 2, 0x0068, 0x0331, 0x0000}, // 0x1e96 (80 0x50)
+    {0x15, 2, 0x0054, 0x0308, 0x0000}, // 0x1e97 (81 0x51)
+    {0x40, 2, 0x0074, 0x0308, 0x0000}, // 0x1e97 (82 0x52)
+    {0x15, 2, 0x0057, 0x030A, 0x0000}, // 0x1e98 (83 0x53)
+    {0x40, 2, 0x0077, 0x030A, 0x0000}, // 0x1e98 (84 0x54)
+    {0x15, 2, 0x0059, 0x030A, 0x0000}, // 0x1e99 (85 0x55)
+    {0x40, 2, 0x0079, 0x030A, 0x0000}, // 0x1e99 (86 0x56)
+    {0x15, 2, 0x0041, 0x02BE, 0x0000}, // 0x1e9a (87 0x57)
+    {0x40, 2, 0x0061, 0x02BE, 0x0000}, // 0x1e9a (88 0x58)
+    {0x15, 1, 0x1E60, 0x0000, 0x0000}, // 0x1e9b (89 0x59)
+    {0x60, 1, 0x1E61, 0x0000, 0x0000}, // 0x1e9b (90 0x5a)
+    {0x15, 2, 0x03A5, 0x0313, 0x0000}, // 0x1f50 (91 0x5b)
+    {0x40, 2, 0x03C5, 0x0313, 0x0000}, // 0x1f50 (92 0x5c)
+    {0x15, 3, 0x03A5, 0x0313, 0x0300}, // 0x1f52 (93 0x5d)
+    {0x40, 3, 0x03C5, 0x0313, 0x0300}, // 0x1f52 (94 0x5e)
+    {0x15, 3, 0x03A5, 0x0313, 0x0301}, // 0x1f54 (95 0x5f)
+    {0x40, 3, 0x03C5, 0x0313, 0x0301}, // 0x1f54 (96 0x60)
+    {0x15, 3, 0x03A5, 0x0313, 0x0342}, // 0x1f56 (97 0x61)
+    {0x40, 3, 0x03C5, 0x0313, 0x0342}, // 0x1f56 (98 0x62)
+    {0x05, 2, 0x1F08, 0x0399, 0x0000}, // 0x1f80 (99 0x63)
+    {0x10, 1, 0x1F88, 0x0000, 0x0000}, // 0x1f80 (100 0x64)
+    {0x40, 2, 0x1F00, 0x03B9, 0x0000}, // 0x1f80 (101 0x65)
+    {0x05, 2, 0x1F09, 0x0399, 0x0000}, // 0x1f81 (102 0x66)
+    {0x10, 1, 0x1F89, 0x0000, 0x0000}, // 0x1f81 (103 0x67)
+    {0x40, 2, 0x1F01, 0x03B9, 0x0000}, // 0x1f81 (104 0x68)
+    {0x05, 2, 0x1F0A, 0x0399, 0x0000}, // 0x1f82 (105 0x69)
+    {0x10, 1, 0x1F8A, 0x0000, 0x0000}, // 0x1f82 (106 0x6a)
+    {0x40, 2, 0x1F02, 0x03B9, 0x0000}, // 0x1f82 (107 0x6b)
+    {0x05, 2, 0x1F0B, 0x0399, 0x0000}, // 0x1f83 (108 0x6c)
+    {0x10, 1, 0x1F8B, 0x0000, 0x0000}, // 0x1f83 (109 0x6d)
+    {0x40, 2, 0x1F03, 0x03B9, 0x0000}, // 0x1f83 (110 0x6e)
+    {0x05, 2, 0x1F0C, 0x0399, 0x0000}, // 0x1f84 (111 0x6f)
+    {0x10, 1, 0x1F8C, 0x0000, 0x0000}, // 0x1f84 (112 0x70)
+    {0x40, 2, 0x1F04, 0x03B9, 0x0000}, // 0x1f84 (113 0x71)
+    {0x05, 2, 0x1F0D, 0x0399, 0x0000}, // 0x1f85 (114 0x72)
+    {0x10, 1, 0x1F8D, 0x0000, 0x0000}, // 0x1f85 (115 0x73)
+    {0x40, 2, 0x1F05, 0x03B9, 0x0000}, // 0x1f85 (116 0x74)
+    {0x05, 2, 0x1F0E, 0x0399, 0x0000}, // 0x1f86 (117 0x75)
+    {0x10, 1, 0x1F8E, 0x0000, 0x0000}, // 0x1f86 (118 0x76)
+    {0x40, 2, 0x1F06, 0x03B9, 0x0000}, // 0x1f86 (119 0x77)
+    {0x05, 2, 0x1F0F, 0x0399, 0x0000}, // 0x1f87 (120 0x78)
+    {0x10, 1, 0x1F8F, 0x0000, 0x0000}, // 0x1f87 (121 0x79)
+    {0x40, 2, 0x1F07, 0x03B9, 0x0000}, // 0x1f87 (122 0x7a)
+    {0x28, 1, 0x1F80, 0x0000, 0x0000}, // 0x1f88 (123 0x7b)
+    {0x04, 2, 0x1F08, 0x0399, 0x0000}, // 0x1f88 (124 0x7c)
+    {0x40, 2, 0x1F00, 0x03B9, 0x0000}, // 0x1f88 (125 0x7d)
+    {0x28, 1, 0x1F81, 0x0000, 0x0000}, // 0x1f89 (126 0x7e)
+    {0x04, 2, 0x1F09, 0x0399, 0x0000}, // 0x1f89 (127 0x7f)
+    {0x40, 2, 0x1F01, 0x03B9, 0x0000}, // 0x1f89 (128 0x80)
+    {0x28, 1, 0x1F82, 0x0000, 0x0000}, // 0x1f8a (129 0x81)
+    {0x04, 2, 0x1F0A, 0x0399, 0x0000}, // 0x1f8a (130 0x82)
+    {0x40, 2, 0x1F02, 0x03B9, 0x0000}, // 0x1f8a (131 0x83)
+    {0x28, 1, 0x1F83, 0x0000, 0x0000}, // 0x1f8b (132 0x84)
+    {0x04, 2, 0x1F0B, 0x0399, 0x0000}, // 0x1f8b (133 0x85)
+    {0x40, 2, 0x1F03, 0x03B9, 0x0000}, // 0x1f8b (134 0x86)
+    {0x28, 1, 0x1F84, 0x0000, 0x0000}, // 0x1f8c (135 0x87)
+    {0x04, 2, 0x1F0C, 0x0399, 0x0000}, // 0x1f8c (136 0x88)
+    {0x40, 2, 0x1F04, 0x03B9, 0x0000}, // 0x1f8c (137 0x89)
+    {0x28, 1, 0x1F85, 0x0000, 0x0000}, // 0x1f8d (138 0x8a)
+    {0x04, 2, 0x1F0D, 0x0399, 0x0000}, // 0x1f8d (139 0x8b)
+    {0x40, 2, 0x1F05, 0x03B9, 0x0000}, // 0x1f8d (140 0x8c)
+    {0x28, 1, 0x1F86, 0x0000, 0x0000}, // 0x1f8e (141 0x8d)
+    {0x04, 2, 0x1F0E, 0x0399, 0x0000}, // 0x1f8e (142 0x8e)
+    {0x40, 2, 0x1F06, 0x03B9, 0x0000}, // 0x1f8e (143 0x8f)
+    {0x28, 1, 0x1F87, 0x0000, 0x0000}, // 0x1f8f (144 0x90)
+    {0x04, 2, 0x1F0F, 0x0399, 0x0000}, // 0x1f8f (145 0x91)
+    {0x40, 2, 0x1F07, 0x03B9, 0x0000}, // 0x1f8f (146 0x92)
+    {0x05, 2, 0x1F28, 0x0399, 0x0000}, // 0x1f90 (147 0x93)
+    {0x10, 1, 0x1F98, 0x0000, 0x0000}, // 0x1f90 (148 0x94)
+    {0x40, 2, 0x1F20, 0x03B9, 0x0000}, // 0x1f90 (149 0x95)
+    {0x05, 2, 0x1F29, 0x0399, 0x0000}, // 0x1f91 (150 0x96)
+    {0x10, 1, 0x1F99, 0x0000, 0x0000}, // 0x1f91 (151 0x97)
+    {0x40, 2, 0x1F21, 0x03B9, 0x0000}, // 0x1f91 (152 0x98)
+    {0x05, 2, 0x1F2A, 0x0399, 0x0000}, // 0x1f92 (153 0x99)
+    {0x10, 1, 0x1F9A, 0x0000, 0x0000}, // 0x1f92 (154 0x9a)
+    {0x40, 2, 0x1F22, 0x03B9, 0x0000}, // 0x1f92 (155 0x9b)
+    {0x05, 2, 0x1F2B, 0x0399, 0x0000}, // 0x1f93 (156 0x9c)
+    {0x10, 1, 0x1F9B, 0x0000, 0x0000}, // 0x1f93 (157 0x9d)
+    {0x40, 2, 0x1F23, 0x03B9, 0x0000}, // 0x1f93 (158 0x9e)
+    {0x05, 2, 0x1F2C, 0x0399, 0x0000}, // 0x1f94 (159 0x9f)
+    {0x10, 1, 0x1F9C, 0x0000, 0x0000}, // 0x1f94 (160 0xa0)
+    {0x40, 2, 0x1F24, 0x03B9, 0x0000}, // 0x1f94 (161 0xa1)
+    {0x05, 2, 0x1F2D, 0x0399, 0x0000}, // 0x1f95 (162 0xa2)
+    {0x10, 1, 0x1F9D, 0x0000, 0x0000}, // 0x1f95 (163 0xa3)
+    {0x40, 2, 0x1F25, 0x03B9, 0x0000}, // 0x1f95 (164 0xa4)
+    {0x05, 2, 0x1F2E, 0x0399, 0x0000}, // 0x1f96 (165 0xa5)
+    {0x10, 1, 0x1F9E, 0x0000, 0x0000}, // 0x1f96 (166 0xa6)
+    {0x40, 2, 0x1F26, 0x03B9, 0x0000}, // 0x1f96 (167 0xa7)
+    {0x05, 2, 0x1F2F, 0x0399, 0x0000}, // 0x1f97 (168 0xa8)
+    {0x10, 1, 0x1F9F, 0x0000, 0x0000}, // 0x1f97 (169 0xa9)
+    {0x40, 2, 0x1F27, 0x03B9, 0x0000}, // 0x1f97 (170 0xaa)
+    {0x28, 1, 0x1F90, 0x0000, 0x0000}, // 0x1f98 (171 0xab)
+    {0x04, 2, 0x1F28, 0x0399, 0x0000}, // 0x1f98 (172 0xac)
+    {0x40, 2, 0x1F20, 0x03B9, 0x0000}, // 0x1f98 (173 0xad)
+    {0x28, 1, 0x1F91, 0x0000, 0x0000}, // 0x1f99 (174 0xae)
+    {0x04, 2, 0x1F29, 0x0399, 0x0000}, // 0x1f99 (175 0xaf)
+    {0x40, 2, 0x1F21, 0x03B9, 0x0000}, // 0x1f99 (176 0xb0)
+    {0x28, 1, 0x1F92, 0x0000, 0x0000}, // 0x1f9a (177 0xb1)
+    {0x04, 2, 0x1F2A, 0x0399, 0x0000}, // 0x1f9a (178 0xb2)
+    {0x40, 2, 0x1F22, 0x03B9, 0x0000}, // 0x1f9a (179 0xb3)
+    {0x28, 1, 0x1F93, 0x0000, 0x0000}, // 0x1f9b (180 0xb4)
+    {0x04, 2, 0x1F2B, 0x0399, 0x0000}, // 0x1f9b (181 0xb5)
+    {0x40, 2, 0x1F23, 0x03B9, 0x0000}, // 0x1f9b (182 0xb6)
+    {0x28, 1, 0x1F94, 0x0000, 0x0000}, // 0x1f9c (183 0xb7)
+    {0x04, 2, 0x1F2C, 0x0399, 0x0000}, // 0x1f9c (184 0xb8)
+    {0x40, 2, 0x1F24, 0x03B9, 0x0000}, // 0x1f9c (185 0xb9)
+    {0x28, 1, 0x1F95, 0x0000, 0x0000}, // 0x1f9d (186 0xba)
+    {0x04, 2, 0x1F2D, 0x0399, 0x0000}, // 0x1f9d (187 0xbb)
+    {0x40, 2, 0x1F25, 0x03B9, 0x0000}, // 0x1f9d (188 0xbc)
+    {0x28, 1, 0x1F96, 0x0000, 0x0000}, // 0x1f9e (189 0xbd)
+    {0x04, 2, 0x1F2E, 0x0399, 0x0000}, // 0x1f9e (190 0xbe)
+    {0x40, 2, 0x1F26, 0x03B9, 0x0000}, // 0x1f9e (191 0xbf)
+    {0x28, 1, 0x1F97, 0x0000, 0x0000}, // 0x1f9f (192 0xc0)
+    {0x04, 2, 0x1F2F, 0x0399, 0x0000}, // 0x1f9f (193 0xc1)
+    {0x40, 2, 0x1F27, 0x03B9, 0x0000}, // 0x1f9f (194 0xc2)
+    {0x05, 2, 0x1F68, 0x0399, 0x0000}, // 0x1fa0 (195 0xc3)
+    {0x10, 1, 0x1FA8, 0x0000, 0x0000}, // 0x1fa0 (196 0xc4)
+    {0x40, 2, 0x1F60, 0x03B9, 0x0000}, // 0x1fa0 (197 0xc5)
+    {0x05, 2, 0x1F69, 0x0399, 0x0000}, // 0x1fa1 (198 0xc6)
+    {0x10, 1, 0x1FA9, 0x0000, 0x0000}, // 0x1fa1 (199 0xc7)
+    {0x40, 2, 0x1F61, 0x03B9, 0x0000}, // 0x1fa1 (200 0xc8)
+    {0x05, 2, 0x1F6A, 0x0399, 0x0000}, // 0x1fa2 (201 0xc9)
+    {0x10, 1, 0x1FAA, 0x0000, 0x0000}, // 0x1fa2 (202 0xca)
+    {0x40, 2, 0x1F62, 0x03B9, 0x0000}, // 0x1fa2 (203 0xcb)
+    {0x05, 2, 0x1F6B, 0x0399, 0x0000}, // 0x1fa3 (204 0xcc)
+    {0x10, 1, 0x1FAB, 0x0000, 0x0000}, // 0x1fa3 (205 0xcd)
+    {0x40, 2, 0x1F63, 0x03B9, 0x0000}, // 0x1fa3 (206 0xce)
+    {0x05, 2, 0x1F6C, 0x0399, 0x0000}, // 0x1fa4 (207 0xcf)
+    {0x10, 1, 0x1FAC, 0x0000, 0x0000}, // 0x1fa4 (208 0xd0)
+    {0x40, 2, 0x1F64, 0x03B9, 0x0000}, // 0x1fa4 (209 0xd1)
+    {0x05, 2, 0x1F6D, 0x0399, 0x0000}, // 0x1fa5 (210 0xd2)
+    {0x10, 1, 0x1FAD, 0x0000, 0x0000}, // 0x1fa5 (211 0xd3)
+    {0x40, 2, 0x1F65, 0x03B9, 0x0000}, // 0x1fa5 (212 0xd4)
+    {0x05, 2, 0x1F6E, 0x0399, 0x0000}, // 0x1fa6 (213 0xd5)
+    {0x10, 1, 0x1FAE, 0x0000, 0x0000}, // 0x1fa6 (214 0xd6)
+    {0x40, 2, 0x1F66, 0x03B9, 0x0000}, // 0x1fa6 (215 0xd7)
+    {0x05, 2, 0x1F6F, 0x0399, 0x0000}, // 0x1fa7 (216 0xd8)
+    {0x10, 1, 0x1FAF, 0x0000, 0x0000}, // 0x1fa7 (217 0xd9)
+    {0x40, 2, 0x1F67, 0x03B9, 0x0000}, // 0x1fa7 (218 0xda)
+    {0x28, 1, 0x1FA0, 0x0000, 0x0000}, // 0x1fa8 (219 0xdb)
+    {0x04, 2, 0x1F68, 0x0399, 0x0000}, // 0x1fa8 (220 0xdc)
+    {0x40, 2, 0x1F60, 0x03B9, 0x0000}, // 0x1fa8 (221 0xdd)
+    {0x28, 1, 0x1FA1, 0x0000, 0x0000}, // 0x1fa9 (222 0xde)
+    {0x04, 2, 0x1F69, 0x0399, 0x0000}, // 0x1fa9 (223 0xdf)
+    {0x40, 2, 0x1F61, 0x03B9, 0x0000}, // 0x1fa9 (224 0xe0)
+    {0x28, 1, 0x1FA2, 0x0000, 0x0000}, // 0x1faa (225 0xe1)
+    {0x04, 2, 0x1F6A, 0x0399, 0x0000}, // 0x1faa (226 0xe2)
+    {0x40, 2, 0x1F62, 0x03B9, 0x0000}, // 0x1faa (227 0xe3)
+    {0x28, 1, 0x1FA3, 0x0000, 0x0000}, // 0x1fab (228 0xe4)
+    {0x04, 2, 0x1F6B, 0x0399, 0x0000}, // 0x1fab (229 0xe5)
+    {0x40, 2, 0x1F63, 0x03B9, 0x0000}, // 0x1fab (230 0xe6)
+    {0x28, 1, 0x1FA4, 0x0000, 0x0000}, // 0x1fac (231 0xe7)
+    {0x04, 2, 0x1F6C, 0x0399, 0x0000}, // 0x1fac (232 0xe8)
+    {0x40, 2, 0x1F64, 0x03B9, 0x0000}, // 0x1fac (233 0xe9)
+    {0x28, 1, 0x1FA5, 0x0000, 0x0000}, // 0x1fad (234 0xea)
+    {0x04, 2, 0x1F6D, 0x0399, 0x0000}, // 0x1fad (235 0xeb)
+    {0x40, 2, 0x1F65, 0x03B9, 0x0000}, // 0x1fad (236 0xec)
+    {0x28, 1, 0x1FA6, 0x0000, 0x0000}, // 0x1fae (237 0xed)
+    {0x04, 2, 0x1F6E, 0x0399, 0x0000}, // 0x1fae (238 0xee)
+    {0x40, 2, 0x1F66, 0x03B9, 0x0000}, // 0x1fae (239 0xef)
+    {0x28, 1, 0x1FA7, 0x0000, 0x0000}, // 0x1faf (240 0xf0)
+    {0x04, 2, 0x1F6F, 0x0399, 0x0000}, // 0x1faf (241 0xf1)
+    {0x40, 2, 0x1F67, 0x03B9, 0x0000}, // 0x1faf (242 0xf2)
+    {0x05, 2, 0x1FBA, 0x0399, 0x0000}, // 0x1fb2 (243 0xf3)
+    {0x10, 2, 0x1FBA, 0x0345, 0x0000}, // 0x1fb2 (244 0xf4)
+    {0x40, 2, 0x1F70, 0x03B9, 0x0000}, // 0x1fb2 (245 0xf5)
+    {0x05, 2, 0x0391, 0x0399, 0x0000}, // 0x1fb3 (246 0xf6)
+    {0x10, 1, 0x1FBC, 0x0000, 0x0000}, // 0x1fb3 (247 0xf7)
+    {0x40, 2, 0x03B1, 0x03B9, 0x0000}, // 0x1fb3 (248 0xf8)
+    {0x05, 2, 0x0386, 0x0399, 0x0000}, // 0x1fb4 (249 0xf9)
+    {0x10, 2, 0x0386, 0x0345, 0x0000}, // 0x1fb4 (250 0xfa)
+    {0x40, 2, 0x03AC, 0x03B9, 0x0000}, // 0x1fb4 (251 0xfb)
+    {0x15, 2, 0x0391, 0x0342, 0x0000}, // 0x1fb6 (252 0xfc)
+    {0x40, 2, 0x03B1, 0x0342, 0x0000}, // 0x1fb6 (253 0xfd)
+    {0x05, 3, 0x0391, 0x0342, 0x0399}, // 0x1fb7 (254 0xfe)
+    {0x10, 3, 0x0391, 0x0342, 0x0345}, // 0x1fb7 (255 0xff)
+    {0x40, 3, 0x03B1, 0x0342, 0x03B9}, // 0x1fb7 (256 0x100)
+    {0x28, 1, 0x1FB3, 0x0000, 0x0000}, // 0x1fbc (257 0x101)
+    {0x04, 2, 0x0391, 0x0399, 0x0000}, // 0x1fbc (258 0x102)
+    {0x40, 2, 0x03B1, 0x03B9, 0x0000}, // 0x1fbc (259 0x103)
+    {0x15, 1, 0x0399, 0x0000, 0x0000}, // 0x1fbe (260 0x104)
+    {0x60, 1, 0x03B9, 0x0000, 0x0000}, // 0x1fbe (261 0x105)
+    {0x05, 2, 0x1FCA, 0x0399, 0x0000}, // 0x1fc2 (262 0x106)
+    {0x10, 2, 0x1FCA, 0x0345, 0x0000}, // 0x1fc2 (263 0x107)
+    {0x40, 2, 0x1F74, 0x03B9, 0x0000}, // 0x1fc2 (264 0x108)
+    {0x05, 2, 0x0397, 0x0399, 0x0000}, // 0x1fc3 (265 0x109)
+    {0x10, 1, 0x1FCC, 0x0000, 0x0000}, // 0x1fc3 (266 0x10a)
+    {0x40, 2, 0x03B7, 0x03B9, 0x0000}, // 0x1fc3 (267 0x10b)
+    {0x05, 2, 0x0389, 0x0399, 0x0000}, // 0x1fc4 (268 0x10c)
+    {0x10, 2, 0x0389, 0x0345, 0x0000}, // 0x1fc4 (269 0x10d)
+    {0x40, 2, 0x03AE, 0x03B9, 0x0000}, // 0x1fc4 (270 0x10e)
+    {0x15, 2, 0x0397, 0x0342, 0x0000}, // 0x1fc6 (271 0x10f)
+    {0x40, 2, 0x03B7, 0x0342, 0x0000}, // 0x1fc6 (272 0x110)
+    {0x05, 3, 0x0397, 0x0342, 0x0399}, // 0x1fc7 (273 0x111)
+    {0x10, 3, 0x0397, 0x0342, 0x0345}, // 0x1fc7 (274 0x112)
+    {0x40, 3, 0x03B7, 0x0342, 0x03B9}, // 0x1fc7 (275 0x113)
+    {0x28, 1, 0x1FC3, 0x0000, 0x0000}, // 0x1fcc (276 0x114)
+    {0x04, 2, 0x0397, 0x0399, 0x0000}, // 0x1fcc (277 0x115)
+    {0x40, 2, 0x03B7, 0x03B9, 0x0000}, // 0x1fcc (278 0x116)
+    {0x15, 3, 0x0399, 0x0308, 0x0300}, // 0x1fd2 (279 0x117)
+    {0x40, 3, 0x03B9, 0x0308, 0x0300}, // 0x1fd2 (280 0x118)
+    {0x15, 3, 0x0399, 0x0308, 0x0301}, // 0x1fd3 (281 0x119)
+    {0x40, 3, 0x03B9, 0x0308, 0x0301}, // 0x1fd3 (282 0x11a)
+    {0x15, 2, 0x0399, 0x0342, 0x0000}, // 0x1fd6 (283 0x11b)
+    {0x40, 2, 0x03B9, 0x0342, 0x0000}, // 0x1fd6 (284 0x11c)
+    {0x15, 3, 0x0399, 0x0308, 0x0342}, // 0x1fd7 (285 0x11d)
+    {0x40, 3, 0x03B9, 0x0308, 0x0342}, // 0x1fd7 (286 0x11e)
+    {0x15, 3, 0x03A5, 0x0308, 0x0300}, // 0x1fe2 (287 0x11f)
+    {0x40, 3, 0x03C5, 0x0308, 0x0300}, // 0x1fe2 (288 0x120)
+    {0x15, 3, 0x03A5, 0x0308, 0x0301}, // 0x1fe3 (289 0x121)
+    {0x40, 3, 0x03C5, 0x0308, 0x0301}, // 0x1fe3 (290 0x122)
+    {0x15, 2, 0x03A1, 0x0313, 0x0000}, // 0x1fe4 (291 0x123)
+    {0x40, 2, 0x03C1, 0x0313, 0x0000}, // 0x1fe4 (292 0x124)
+    {0x15, 2, 0x03A5, 0x0342, 0x0000}, // 0x1fe6 (293 0x125)
+    {0x40, 2, 0x03C5, 0x0342, 0x0000}, // 0x1fe6 (294 0x126)
+    {0x15, 3, 0x03A5, 0x0308, 0x0342}, // 0x1fe7 (295 0x127)
+    {0x40, 3, 0x03C5, 0x0308, 0x0342}, // 0x1fe7 (296 0x128)
+    {0x05, 2, 0x1FFA, 0x0399, 0x0000}, // 0x1ff2 (297 0x129)
+    {0x10, 2, 0x1FFA, 0x0345, 0x0000}, // 0x1ff2 (298 0x12a)
+    {0x40, 2, 0x1F7C, 0x03B9, 0x0000}, // 0x1ff2 (299 0x12b)
+    {0x05, 2, 0x03A9, 0x0399, 0x0000}, // 0x1ff3 (300 0x12c)
+    {0x10, 1, 0x1FFC, 0x0000, 0x0000}, // 0x1ff3 (301 0x12d)
+    {0x40, 2, 0x03C9, 0x03B9, 0x0000}, // 0x1ff3 (302 0x12e)
+    {0x05, 2, 0x038F, 0x0399, 0x0000}, // 0x1ff4 (303 0x12f)
+    {0x10, 2, 0x038F, 0x0345, 0x0000}, // 0x1ff4 (304 0x130)
+    {0x40, 2, 0x03CE, 0x03B9, 0x0000}, // 0x1ff4 (305 0x131)
+    {0x15, 2, 0x03A9, 0x0342, 0x0000}, // 0x1ff6 (306 0x132)
+    {0x40, 2, 0x03C9, 0x0342, 0x0000}, // 0x1ff6 (307 0x133)
+    {0x05, 3, 0x03A9, 0x0342, 0x0399}, // 0x1ff7 (308 0x134)
+    {0x10, 3, 0x03A9, 0x0342, 0x0345}, // 0x1ff7 (309 0x135)
+    {0x40, 3, 0x03C9, 0x0342, 0x03B9}, // 0x1ff7 (310 0x136)
+    {0x28, 1, 0x1FF3, 0x0000, 0x0000}, // 0x1ffc (311 0x137)
+    {0x04, 2, 0x03A9, 0x0399, 0x0000}, // 0x1ffc (312 0x138)
+    {0x40, 2, 0x03C9, 0x03B9, 0x0000}, // 0x1ffc (313 0x139)
+    {0x05, 2, 0x0046, 0x0046, 0x0000}, // 0xfb00 (314 0x13a)
+    {0x10, 2, 0x0046, 0x0066, 0x0000}, // 0xfb00 (315 0x13b)
+    {0x40, 2, 0x0066, 0x0066, 0x0000}, // 0xfb00 (316 0x13c)
+    {0x05, 2, 0x0046, 0x0049, 0x0000}, // 0xfb01 (317 0x13d)
+    {0x10, 2, 0x0046, 0x0069, 0x0000}, // 0xfb01 (318 0x13e)
+    {0x40, 2, 0x0066, 0x0069, 0x0000}, // 0xfb01 (319 0x13f)
+    {0x05, 2, 0x0046, 0x004C, 0x0000}, // 0xfb02 (320 0x140)
+    {0x10, 2, 0x0046, 0x006C, 0x0000}, // 0xfb02 (321 0x141)
+    {0x40, 2, 0x0066, 0x006C, 0x0000}, // 0xfb02 (322 0x142)
+    {0x05, 3, 0x0046, 0x0046, 0x0049}, // 0xfb03 (323 0x143)
+    {0x10, 3, 0x0046, 0x0066, 0x0069}, // 0xfb03 (324 0x144)
+    {0x40, 3, 0x0066, 0x0066, 0x0069}, // 0xfb03 (325 0x145)
+    {0x05, 3, 0x0046, 0x0046, 0x004C}, // 0xfb04 (326 0x146)
+    {0x10, 3, 0x0046, 0x0066, 0x006C}, // 0xfb04 (327 0x147)
+    {0x40, 3, 0x0066, 0x0066, 0x006C}, // 0xfb04 (328 0x148)
+    {0x05, 2, 0x0053, 0x0054, 0x0000}, // 0xfb05 (329 0x149)
+    {0x10, 2, 0x0053, 0x0074, 0x0000}, // 0xfb05 (330 0x14a)
+    {0x40, 2, 0x0073, 0x0074, 0x0000}, // 0xfb05 (331 0x14b)
+    {0x05, 2, 0x0053, 0x0054, 0x0000}, // 0xfb06 (332 0x14c)
+    {0x10, 2, 0x0053, 0x0074, 0x0000}, // 0xfb06 (333 0x14d)
+    {0x40, 2, 0x0073, 0x0074, 0x0000}, // 0xfb06 (334 0x14e)
+    {0x05, 2, 0x0544, 0x0546, 0x0000}, // 0xfb13 (335 0x14f)
+    {0x10, 2, 0x0544, 0x0576, 0x0000}, // 0xfb13 (336 0x150)
+    {0x40, 2, 0x0574, 0x0576, 0x0000}, // 0xfb13 (337 0x151)
+    {0x05, 2, 0x0544, 0x0535, 0x0000}, // 0xfb14 (338 0x152)
+    {0x10, 2, 0x0544, 0x0565, 0x0000}, // 0xfb14 (339 0x153)
+    {0x40, 2, 0x0574, 0x0565, 0x0000}, // 0xfb14 (340 0x154)
+    {0x05, 2, 0x0544, 0x053B, 0x0000}, // 0xfb15 (341 0x155)
+    {0x10, 2, 0x0544, 0x056B, 0x0000}, // 0xfb15 (342 0x156)
+    {0x40, 2, 0x0574, 0x056B, 0x0000}, // 0xfb15 (343 0x157)
+    {0x05, 2, 0x054E, 0x0546, 0x0000}, // 0xfb16 (344 0x158)
+    {0x10, 2, 0x054E, 0x0576, 0x0000}, // 0xfb16 (345 0x159)
+    {0x40, 2, 0x057E, 0x0576, 0x0000}, // 0xfb16 (346 0x15a)
+    {0x05, 2, 0x0544, 0x053D, 0x0000}, // 0xfb17 (347 0x15b)
+    {0x10, 2, 0x0544, 0x056D, 0x0000}, // 0xfb17 (348 0x15c)
+    {0x40, 2, 0x0574, 0x056D, 0x0000}, // 0xfb17 (349 0x15d)
+};
+
+/* Following code need special handling
+    0x0069, 0x00CC, 0x00CD, 0x0128, 0x012E, 0x0049, 0x004A, 0x0307, 0x03A3,
+*/
+
+} } } }
+
+#endif
+
diff --git a/i18nutil/source/utility/makefile.mk b/i18nutil/source/utility/makefile.mk
new file mode 100644
index 000000000000..7b240896cc49
--- /dev/null
+++ b/i18nutil/source/utility/makefile.mk
@@ -0,0 +1,87 @@
+#*************************************************************************
+#*
+#*  $RCSfile: makefile.mk,v $
+#*
+#*  $Revision: 1.2 $
+#*
+#*  last change: $Author: vg $ $Date: 2003-04-24 12:26:02 $
+#*
+#*  The Contents of this file are made available subject to the terms of
+#*  either of the following licenses
+#*
+#*         - Sun Industry Standards Source License Version 1.1
+#*
+#*  Sun Microsystems Inc., October, 2000
+#*
+#*  Sun Industry Standards Source License Version 1.1
+#*  =================================================
+#*  The contents of this file are subject to the Sun Industry Standards
+#*  Source License Version 1.1 (the "License"); You may not use this file
+#*  except in compliance with the License. You may obtain a copy of the
+#*  License at http://www.openoffice.org/license.html.
+#*
+#*  Software provided under this License is provided on an "AS IS" basis,
+#*  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+#*  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+#*  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+#*  See the License for the specific provisions governing your rights and
+#*  obligations concerning the Software.
+#*
+#*  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+#*
+#*  Copyright: 2000 by Sun Microsystems, Inc.
+#*
+#*  All Rights Reserved.
+#*
+#*  Contributor(s): _______________________________________
+#*
+#*
+#************************************************************************
+PRJ=..$/..
+
+PRJNAME=i18nutil
+TARGET=i18nutil
+LIBTARGET=NO
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE :  settings.mk
+
+# --- Files --------------------------------------------------------
+
+EXCEPTIONSFILES= \
+    $(SLO)$/casefolding.obj
+
+SLOFILES= \
+    $(EXCEPTIONSFILES) \
+    $(SLO)$/unicode.obj \
+    $(SLO)$/widthfolding.obj \
+    $(SLO)$/oneToOneMapping.obj
+
+# Unicode utilities 
+SHL1TARGET=		$(TARGET)$(COMID)
+SHL1IMPLIB=		i$(TARGET)
+
+DEF1DEPN=		$(MISC)$/$(SHL1TARGET).flt
+SHL1DEF=		$(MISC)$/$(SHL1TARGET).def
+DEF1NAME=		$(SHL1TARGET)
+DEFLIB1NAME=	$(SHL1TARGET)
+
+SHL1OBJS=		$(SLOFILES)
+
+LIB1TARGET=	$(SLB)$/$(SHL1TARGET).lib
+LIB1OBJFILES=$(SHL1OBJS)
+
+SHL1STDLIBS= \
+        $(CPPULIB) \
+        $(SALLIB)
+
+# --- Targets ------------------------------------------------------
+.INCLUDE :  target.mk
+
+$(MISC)$/$(SHL1TARGET).flt: makefile.mk
+    @echo ------------------------------
+    @echo Making: $@
+    @echo CLEAR_THE_FILE > $@
+    @echo __CT >> $@
+
diff --git a/i18nutil/source/utility/oneToOneMapping.cxx b/i18nutil/source/utility/oneToOneMapping.cxx
new file mode 100644
index 000000000000..d3629faece8e
--- /dev/null
+++ b/i18nutil/source/utility/oneToOneMapping.cxx
@@ -0,0 +1,138 @@
+/*************************************************************************
+ *
+ *  $RCSfile: oneToOneMapping.cxx,v $
+ *
+ *  $Revision: 1.2 $
+ *
+ *  last change: $Author: vg $ $Date: 2003-04-24 12:26:03 $
+ *
+ *  The Contents of this file are made available subject to the terms of
+ *  either of the following licenses
+ *
+ *         - GNU Lesser General Public License Version 2.1
+ *         - Sun Industry Standards Source License Version 1.1
+ *
+ *  Sun Microsystems Inc., October, 2000
+ *
+ *  GNU Lesser General Public License Version 2.1
+ *  =============================================
+ *  Copyright 2000 by Sun Microsystems, Inc.
+ *  901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License version 2.1, as published by the Free Software Foundation.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ *  MA  02111-1307  USA
+ *
+ *
+ *  Sun Industry Standards Source License Version 1.1
+ *  =================================================
+ *  The contents of this file are subject to the Sun Industry Standards
+ *  Source License Version 1.1 (the "License"); You may not use this file
+ *  except in compliance with the License. You may obtain a copy of the
+ *  License at http://www.openoffice.org/license.html.
+ *
+ *  Software provided under this License is provided on an "AS IS" basis,
+ *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ *  See the License for the specific provisions governing your rights and
+ *  obligations concerning the Software.
+ *
+ *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ *  Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ *  All Rights Reserved.
+ *
+ *  Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+#include <i18nutil/oneToOneMapping.hxx>
+
+namespace com { namespace sun { namespace star { namespace i18n {
+
+oneToOneMapping::oneToOneMapping(OneToOneMappingTable_t *_table, const size_t _bytes)
+{
+    table = _table;
+    max_size = _bytes / sizeof(std::pair< sal_Unicode, sal_Unicode >);
+    hasIndex = sal_False;
+}
+
+oneToOneMapping::~oneToOneMapping()
+{
+    if( hasIndex )
+        for (int i = 0; i < 256; i++)
+        if (index[i])
+            delete index[i];
+}
+
+sal_Unicode oneToOneMapping::find(const sal_Unicode key) const
+{
+    if (hasIndex) {
+        // index search
+        int high, low;
+        high = (key >> 8) & 0xFF;
+        low = key & 0xFF;
+        if (index[high] != (int*)0 && index[high][low] != 0) {
+          return table[index[high][low] - 1].second;
+        }
+        else {
+          return sal_Unicode(key);
+        }
+    } else {
+        int bottom = 0;
+        int top = max_size - 1;
+        int current;
+
+        for (;;) {
+        current = (top + bottom) / 2;
+        if (key < table[current].first) {
+            top = current - 1;
+        }
+        else if (key > table[current].first) {
+            bottom = current + 1;
+        } else {
+            return table[current].second;
+        }
+        if (bottom > top) {
+            return sal_Unicode(key);
+        }
+        }
+    }
+}
+
+void oneToOneMapping::makeIndex()
+{
+    if (!hasIndex) {
+        int i, j, high, low, current = -1;
+        hasIndex = sal_True;
+        for (i = 0; i < 256; i++)
+        index[i] = (int*)0;
+
+        for (size_t k = 0; k < max_size; k++) {
+        high = (table[k].first >> 8) & 0xFF;
+        low = (table[k].first) & 0xFF;
+        if (high != current) {
+            current = high;
+            index[high] = new int[256];
+            for (j = 0; j < 256; j++)
+            index[high][j] = 0;
+        }
+        index[high][low] = k + 1;
+        }
+    }
+}
+
+} } } }
diff --git a/i18nutil/source/utility/unicode.cxx b/i18nutil/source/utility/unicode.cxx
new file mode 100644
index 000000000000..9206c626382b
--- /dev/null
+++ b/i18nutil/source/utility/unicode.cxx
@@ -0,0 +1,342 @@
+/*************************************************************************
+ *
+ *  $RCSfile: unicode.cxx,v $
+ *
+ *  $Revision: 1.2 $
+ *
+ *  last change: $Author: vg $ $Date: 2003-04-24 12:26:03 $
+ *
+ *  The Contents of this file are made available subject to the terms of
+ *  either of the following licenses
+ *
+ *         - GNU Lesser General Public License Version 2.1
+ *         - Sun Industry Standards Source License Version 1.1
+ *
+ *  Sun Microsystems Inc., October, 2000
+ *
+ *  GNU Lesser General Public License Version 2.1
+ *  =============================================
+ *  Copyright 2000 by Sun Microsystems, Inc.
+ *  901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License version 2.1, as published by the Free Software Foundation.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ *  MA  02111-1307  USA
+ *
+ *
+ *  Sun Industry Standards Source License Version 1.1
+ *  =================================================
+ *  The contents of this file are subject to the Sun Industry Standards
+ *  Source License Version 1.1 (the "License"); You may not use this file
+ *  except in compliance with the License. You may obtain a copy of the
+ *  License at http://www.openoffice.org/license.html.
+ *
+ *  Software provided under this License is provided on an "AS IS" basis,
+ *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ *  See the License for the specific provisions governing your rights and
+ *  obligations concerning the Software.
+ *
+ *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ *  Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ *  All Rights Reserved.
+ *
+ *  Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+#include <com/sun/star/i18n/UnicodeType.hpp>
+#include <com/sun/star/i18n/KCharacterType.hpp>
+#include <i18nutil/unicode.hxx>
+#include "unicode_data.h"
+
+using namespace ::com::sun::star::i18n;
+
+static ScriptTypeList defaultTypeList[] = {
+    { UnicodeScript_kBasicLatin, UnicodeScript_kBasicLatin }, // 0,
+    { UnicodeScript_kLatin1Supplement, UnicodeScript_kLatin1Supplement }, // 1,
+    { UnicodeScript_kLatinExtendedA, UnicodeScript_kLatinExtendedA }, // 2,
+    { UnicodeScript_kLatinExtendedB, UnicodeScript_kLatinExtendedB }, // 3,
+    { UnicodeScript_kIPAExtension, UnicodeScript_kIPAExtension }, // 4,
+    { UnicodeScript_kSpacingModifier, UnicodeScript_kSpacingModifier }, // 5,
+    { UnicodeScript_kCombiningDiacritical, UnicodeScript_kCombiningDiacritical }, // 6,
+    { UnicodeScript_kGreek, UnicodeScript_kGreek }, // 7,
+    { UnicodeScript_kCyrillic, UnicodeScript_kCyrillic }, // 8,
+    { UnicodeScript_kArmenian, UnicodeScript_kArmenian }, // 9,
+    { UnicodeScript_kHebrew, UnicodeScript_kHebrew }, // 10,
+    { UnicodeScript_kArabic, UnicodeScript_kArabic }, // 11,
+    { UnicodeScript_kSyriac, UnicodeScript_kSyriac }, // 12,
+    { UnicodeScript_kThaana, UnicodeScript_kThaana }, // 13,
+    { UnicodeScript_kDevanagari, UnicodeScript_kDevanagari }, // 14,
+    { UnicodeScript_kBengali, UnicodeScript_kBengali }, // 15,
+    { UnicodeScript_kGurmukhi, UnicodeScript_kGurmukhi }, // 16,
+    { UnicodeScript_kGujarati, UnicodeScript_kGujarati }, // 17,
+    { UnicodeScript_kOriya, UnicodeScript_kOriya }, // 18,
+    { UnicodeScript_kTamil, UnicodeScript_kTamil }, // 19,
+    { UnicodeScript_kTelugu, UnicodeScript_kTelugu }, // 20,
+    { UnicodeScript_kKannada, UnicodeScript_kKannada }, // 21,
+    { UnicodeScript_kMalayalam, UnicodeScript_kMalayalam }, // 22,
+    { UnicodeScript_kSinhala, UnicodeScript_kSinhala }, // 23,
+    { UnicodeScript_kThai, UnicodeScript_kThai }, // 24,
+    { UnicodeScript_kLao, UnicodeScript_kLao }, // 25,
+    { UnicodeScript_kTibetan, UnicodeScript_kTibetan }, // 26,
+    { UnicodeScript_kMyanmar, UnicodeScript_kMyanmar }, // 27,
+    { UnicodeScript_kGeorgian, UnicodeScript_kGeorgian }, // 28,
+    { UnicodeScript_kHangulJamo, UnicodeScript_kHangulJamo }, // 29,
+    { UnicodeScript_kEthiopic, UnicodeScript_kEthiopic }, // 30,
+    { UnicodeScript_kCherokee, UnicodeScript_kCherokee }, // 31,
+    { UnicodeScript_kUnifiedCanadianAboriginalSyllabics, UnicodeScript_kUnifiedCanadianAboriginalSyllabics }, // 32,
+    { UnicodeScript_kOgham, UnicodeScript_kOgham }, // 33,
+    { UnicodeScript_kRunic, UnicodeScript_kRunic }, // 34,
+    { UnicodeScript_kKhmer, UnicodeScript_kKhmer }, // 35,
+    { UnicodeScript_kMongolian, UnicodeScript_kMongolian }, // 36,
+    { UnicodeScript_kLatinExtendedAdditional, UnicodeScript_kLatinExtendedAdditional }, // 37,
+    { UnicodeScript_kGreekExtended, UnicodeScript_kGreekExtended }, // 38,
+    { UnicodeScript_kGeneralPunctuation, UnicodeScript_kGeneralPunctuation }, // 39,
+    { UnicodeScript_kSuperSubScript, UnicodeScript_kSuperSubScript }, // 40,
+    { UnicodeScript_kCurrencySymbolScript, UnicodeScript_kCurrencySymbolScript }, // 41,
+    { UnicodeScript_kSymbolCombiningMark, UnicodeScript_kSymbolCombiningMark }, // 42,
+    { UnicodeScript_kLetterlikeSymbol, UnicodeScript_kLetterlikeSymbol }, // 43,
+    { UnicodeScript_kNumberForm, UnicodeScript_kNumberForm }, // 44,
+    { UnicodeScript_kArrow, UnicodeScript_kArrow }, // 45,
+    { UnicodeScript_kMathOperator, UnicodeScript_kMathOperator }, // 46,
+    { UnicodeScript_kMiscTechnical, UnicodeScript_kMiscTechnical }, // 47,
+    { UnicodeScript_kControlPicture, UnicodeScript_kControlPicture }, // 48,
+    { UnicodeScript_kOpticalCharacter, UnicodeScript_kOpticalCharacter }, // 49,
+    { UnicodeScript_kEnclosedAlphanumeric, UnicodeScript_kEnclosedAlphanumeric }, // 50,
+    { UnicodeScript_kBoxDrawing, UnicodeScript_kBoxDrawing }, // 51,
+    { UnicodeScript_kBlockElement, UnicodeScript_kBlockElement }, // 52,
+    { UnicodeScript_kGeometricShape, UnicodeScript_kGeometricShape }, // 53,
+    { UnicodeScript_kMiscSymbol, UnicodeScript_kMiscSymbol }, // 54,
+    { UnicodeScript_kDingbat, UnicodeScript_kDingbat }, // 55,
+    { UnicodeScript_kBraillePatterns, UnicodeScript_kBraillePatterns }, // 56,
+    { UnicodeScript_kCJKRadicalsSupplement, UnicodeScript_kCJKRadicalsSupplement }, // 57,
+    { UnicodeScript_kKangxiRadicals, UnicodeScript_kKangxiRadicals }, // 58,
+    { UnicodeScript_kIdeographicDescriptionCharacters, UnicodeScript_kIdeographicDescriptionCharacters }, // 59,
+    { UnicodeScript_kCJKSymbolPunctuation, UnicodeScript_kCJKSymbolPunctuation }, // 60,
+    { UnicodeScript_kHiragana, UnicodeScript_kHiragana }, // 61,
+    { UnicodeScript_kKatakana, UnicodeScript_kKatakana }, // 62,
+    { UnicodeScript_kBopomofo, UnicodeScript_kBopomofo }, // 63,
+    { UnicodeScript_kHangulCompatibilityJamo, UnicodeScript_kHangulCompatibilityJamo }, // 64,
+    { UnicodeScript_kKanbun, UnicodeScript_kKanbun }, // 65,
+    { UnicodeScript_kBopomofoExtended, UnicodeScript_kBopomofoExtended }, // 66,
+    { UnicodeScript_kEnclosedCJKLetterMonth, UnicodeScript_kEnclosedCJKLetterMonth }, // 67,
+    { UnicodeScript_kCJKCompatibility, UnicodeScript_kCJKCompatibility }, // 68,
+    { UnicodeScript_k_CJKUnifiedIdeographsExtensionA, UnicodeScript_k_CJKUnifiedIdeographsExtensionA }, // 69,
+    { UnicodeScript_kCJKUnifiedIdeograph, UnicodeScript_kCJKUnifiedIdeograph }, // 70,
+    { UnicodeScript_kYiSyllables, UnicodeScript_kYiSyllables }, // 71,
+    { UnicodeScript_kYiRadicals, UnicodeScript_kYiRadicals }, // 72,
+    { UnicodeScript_kHangulSyllable, UnicodeScript_kHangulSyllable }, // 73,
+    { UnicodeScript_kHighSurrogate, UnicodeScript_kHighSurrogate }, // 74,
+    { UnicodeScript_kHighPrivateUseSurrogate, UnicodeScript_kHighPrivateUseSurrogate }, // 75,
+    { UnicodeScript_kLowSurrogate, UnicodeScript_kLowSurrogate }, // 76,
+    { UnicodeScript_kPrivateUse, UnicodeScript_kPrivateUse }, // 77,
+    { UnicodeScript_kCJKCompatibilityIdeograph, UnicodeScript_kCJKCompatibilityIdeograph }, // 78,
+    { UnicodeScript_kAlphabeticPresentation, UnicodeScript_kAlphabeticPresentation }, // 79,
+    { UnicodeScript_kArabicPresentationA, UnicodeScript_kArabicPresentationA }, // 80,
+    { UnicodeScript_kCombiningHalfMark, UnicodeScript_kCombiningHalfMark }, // 81,
+    { UnicodeScript_kCJKCompatibilityForm, UnicodeScript_kCJKCompatibilityForm }, // 82,
+    { UnicodeScript_kSmallFormVariant, UnicodeScript_kSmallFormVariant }, // 83,
+    { UnicodeScript_kArabicPresentationB, UnicodeScript_kArabicPresentationB }, // 84,
+    { UnicodeScript_kNoScript, UnicodeScript_kNoScript }, // 85,
+    { UnicodeScript_kHalfwidthFullwidthForm, UnicodeScript_kHalfwidthFullwidthForm }, // 86,
+    { UnicodeScript_kScriptCount, UnicodeScript_kNoScript } // 87,
+};
+
+sal_Int16 SAL_CALL
+unicode::getUnicodeScriptType( const sal_Unicode ch, ScriptTypeList* typeList, sal_Int16 unknownType ) {
+
+    if (!typeList) {
+    typeList = defaultTypeList;
+    unknownType = UnicodeScript_kNoScript;
+    }
+
+    sal_Int16 i = 0, type = typeList[0].from;
+    while (type < UnicodeScript_kScriptCount && ch > UnicodeScriptType[type][UnicodeScriptTypeTo]) {
+    type = typeList[++i].from;
+    }
+
+    return (type < UnicodeScript_kScriptCount &&
+            ch >= UnicodeScriptType[type][UnicodeScriptTypeFrom]) ?
+            typeList[i].to : unknownType;
+}
+
+sal_Bool SAL_CALL
+unicode::isUnicodeScriptType( const sal_Unicode ch, sal_Int16 type) {
+    return ch >= UnicodeScriptType[type][UnicodeScriptTypeFrom] &&
+        ch <= UnicodeScriptType[type][UnicodeScriptTypeTo];
+}
+
+sal_Int16 SAL_CALL
+unicode::getUnicodeType( const sal_Unicode ch ) {
+    static sal_Unicode c = 0x00;
+    static sal_Int16 r = 0x00;
+
+    if (ch == c) return r;
+    else c = ch;
+
+    sal_Int16 address = UnicodeTypeIndex[ch >> 8];
+    return r = (sal_Int16)((address < UnicodeTypeNumberBlock) ? UnicodeTypeBlockValue[address] :
+        UnicodeTypeValue[((address - UnicodeTypeNumberBlock) << 8) + (ch & 0xff)]);
+}
+
+sal_uInt8 SAL_CALL
+unicode::getUnicodeDirection( const sal_Unicode ch ) {
+    static sal_Unicode c = 0x00;
+    static sal_uInt8 r = 0x00;
+
+    if (ch == c) return r;
+    else c = ch;
+
+    sal_Int16 address = UnicodeDirectionIndex[ch >> 8];
+    return r = ((address < UnicodeDirectionNumberBlock) ? UnicodeDirectionBlockValue[address] :
+        UnicodeDirectionValue[((address - UnicodeDirectionNumberBlock) << 8) + (ch & 0xff)]);
+
+}
+
+#define bit(name)   (1 << name)
+
+#define UPPERMASK   bit(UnicodeType::UPPERCASE_LETTER)
+
+#define LOWERMASK   bit(UnicodeType::LOWERCASE_LETTER)
+
+#define TITLEMASK   bit(UnicodeType::TITLECASE_LETTER)
+
+#define DIGITMASK   bit(UnicodeType::DECIMAL_DIGIT_NUMBER)|\
+            bit(UnicodeType::LETTER_NUMBER)|\
+            bit(UnicodeType::OTHER_NUMBER)
+
+#define ALPHAMASK   UPPERMASK|LOWERMASK|TITLEMASK|\
+            bit(UnicodeType::MODIFIER_LETTER)|\
+            bit(UnicodeType::OTHER_LETTER)
+
+#define BASEMASK    DIGITMASK|ALPHAMASK|\
+            bit(UnicodeType::NON_SPACING_MARK)|\
+            bit(UnicodeType::ENCLOSING_MARK)|\
+            bit(UnicodeType::COMBINING_SPACING_MARK)
+
+#define SPACEMASK   bit(UnicodeType::SPACE_SEPARATOR)|\
+            bit(UnicodeType::LINE_SEPARATOR)|\
+            bit(UnicodeType::PARAGRAPH_SEPARATOR)
+
+#define PUNCTUATIONMASK bit(UnicodeType::DASH_PUNCTUATION)|\
+            bit(UnicodeType::INITIAL_PUNCTUATION)|\
+            bit(UnicodeType::FINAL_PUNCTUATION)|\
+            bit(UnicodeType::CONNECTOR_PUNCTUATION)|\
+            bit(UnicodeType::OTHER_PUNCTUATION)
+
+#define SYMBOLMASK  bit(UnicodeType::MATH_SYMBOL)|\
+            bit(UnicodeType::CURRENCY_SYMBOL)|\
+            bit(UnicodeType::MODIFIER_SYMBOL)|\
+            bit(UnicodeType::OTHER_SYMBOL)
+
+#define PRINTMASK   BASEMASK|SPACEMASK|PUNCTUATIONMASK|SYMBOLMASK
+
+#define CONTROLMASK bit(UnicodeType::CONTROL)|\
+            bit(UnicodeType::FORMAT)|\
+            bit(UnicodeType::LINE_SEPARATOR)|\
+            bit(UnicodeType::PARAGRAPH_SEPARATOR)
+
+#define IsType(func, mask)  \
+sal_Bool SAL_CALL func( const sal_Unicode ch) {\
+    return (bit(getUnicodeType(ch)) & (mask)) != 0;\
+}
+
+IsType(unicode::isUpper, UPPERMASK)
+IsType(unicode::isLower, LOWERMASK)
+IsType(unicode::isTitle, DIGITMASK)
+IsType(unicode::isControl, CONTROLMASK)
+IsType(unicode::isPrint, PRINTMASK)
+IsType(unicode::isAlpha, ALPHAMASK)
+IsType(unicode::isDigit, DIGITMASK)
+IsType(unicode::isAlphaDigit, ALPHAMASK|DIGITMASK)
+IsType(unicode::isSpace, SPACEMASK)
+IsType(unicode::isBase, BASEMASK)
+IsType(unicode::isPunctuation, PUNCTUATIONMASK)
+
+#define CONTROLSPACE    bit(0x09)|bit(0x0a)|bit(0x0b)|bit(0x0c)|bit(0x0d)|\
+            bit(0x1c)|bit(0x1d)|bit(0x1e)|bit(0x1f)
+
+sal_Bool SAL_CALL unicode::isWhiteSpace( const sal_Unicode ch) {
+    return (ch != 0xa0 && isSpace(ch)) || (ch <= 0x1F && (bit(ch) & (CONTROLSPACE)));
+}
+
+sal_Int32 SAL_CALL unicode::getCharType( const sal_Unicode ch )
+{
+    using namespace ::com::sun::star::i18n::KCharacterType;
+
+    switch ( getUnicodeType( ch ) ) {
+    // Upper
+    case UnicodeType::UPPERCASE_LETTER :
+        return UPPER|LETTER|PRINTABLE|BASE_FORM;
+
+    // Lower
+    case UnicodeType::LOWERCASE_LETTER :
+        return LOWER|LETTER|PRINTABLE|BASE_FORM;
+
+    // Title
+    case UnicodeType::TITLECASE_LETTER :
+        return TITLE_CASE|LETTER|PRINTABLE|BASE_FORM;
+
+    // Letter
+    case UnicodeType::MODIFIER_LETTER :
+    case UnicodeType::OTHER_LETTER :
+        return LETTER|PRINTABLE|BASE_FORM;
+
+    // Digit
+    case UnicodeType::DECIMAL_DIGIT_NUMBER:
+    case UnicodeType::LETTER_NUMBER:
+    case UnicodeType::OTHER_NUMBER:
+        return DIGIT|PRINTABLE|BASE_FORM;
+
+    // Base
+    case UnicodeType::NON_SPACING_MARK:
+    case UnicodeType::ENCLOSING_MARK:
+    case UnicodeType::COMBINING_SPACING_MARK:
+        return BASE_FORM|PRINTABLE;
+
+    // Print
+    case UnicodeType::SPACE_SEPARATOR:
+
+    case UnicodeType::DASH_PUNCTUATION:
+    case UnicodeType::INITIAL_PUNCTUATION:
+    case UnicodeType::FINAL_PUNCTUATION:
+    case UnicodeType::CONNECTOR_PUNCTUATION:
+    case UnicodeType::OTHER_PUNCTUATION:
+
+    case UnicodeType::MATH_SYMBOL:
+    case UnicodeType::CURRENCY_SYMBOL:
+    case UnicodeType::MODIFIER_SYMBOL:
+    case UnicodeType::OTHER_SYMBOL:
+        return PRINTABLE;
+
+    // Control
+    case UnicodeType::CONTROL:
+    case UnicodeType::FORMAT:
+        return CONTROL;
+
+    case UnicodeType::LINE_SEPARATOR:
+    case UnicodeType::PARAGRAPH_SEPARATOR:
+        return CONTROL|PRINTABLE;
+
+    // for all others
+    default:
+        return 0;
+    }
+}
+
+
diff --git a/i18nutil/source/utility/unicode_data.h b/i18nutil/source/utility/unicode_data.h
new file mode 100644
index 000000000000..d1bd9cd50e4c
--- /dev/null
+++ b/i18nutil/source/utility/unicode_data.h
@@ -0,0 +1,1667 @@
+/*************************************************************************
+ *
+ *  $RCSfile: unicode_data.h,v $
+ *
+ *  $Revision: 1.2 $
+ *
+ *  last change: $Author: vg $ $Date: 2003-04-24 12:26:04 $
+ *
+ *  The Contents of this file are made available subject to the terms of
+ *  either of the following licenses
+ *
+ *         - GNU Lesser General Public License Version 2.1
+ *         - Sun Industry Standards Source License Version 1.1
+ *
+ *  Sun Microsystems Inc., October, 2000
+ *
+ *  GNU Lesser General Public License Version 2.1
+ *  =============================================
+ *  Copyright 2000 by Sun Microsystems, Inc.
+ *  901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License version 2.1, as published by the Free Software Foundation.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ *  MA  02111-1307  USA
+ *
+ *
+ *  Sun Industry Standards Source License Version 1.1
+ *  =================================================
+ *  The contents of this file are subject to the Sun Industry Standards
+ *  Source License Version 1.1 (the "License"); You may not use this file
+ *  except in compliance with the License. You may obtain a copy of the
+ *  License at http://www.openoffice.org/license.html.
+ *
+ *  Software provided under this License is provided on an "AS IS" basis,
+ *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ *  See the License for the specific provisions governing your rights and
+ *  obligations concerning the Software.
+ *
+ *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ *  Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ *  All Rights Reserved.
+ *
+ *  Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+#ifndef CCLASS_CHARTYPE_H
+#define CCLASS_CHARTYPE_H
+
+#include <sal/types.h>
+
+
+#define UnicodeTypeNumberBlock  5
+
+static sal_Int8 UnicodeTypeIndex[] = {
+    0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, // 0000 - 07ff
+    0x00, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, // 0800 - 0fff
+    0x14, 0x15, 0x16, 0x17, 0x18, 0x01, 0x19, 0x1a, // 1000 - 17ff
+    0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x1d, // 1800 - 1fff
+    0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, // 2000 - 27ff
+    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x27, // 2800 - 2fff
+    0x28, 0x29, 0x2a, 0x2b, 0x01, 0x01, 0x01, 0x01, // 3000 - 37ff
+    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 3800 - 3fff
+    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 4000 - 47ff
+    0x01, 0x01, 0x01, 0x01, 0x01, 0x2c, 0x01, 0x01, // 4800 - 4fff
+    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 5000 - 57ff
+    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 5800 - 5fff
+    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 6000 - 67ff
+    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 6800 - 6fff
+    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 7000 - 77ff
+    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 7800 - 7fff
+    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 8000 - 87ff
+    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 8800 - 8fff
+    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // 9000 - 97ff
+    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2d, // 9800 - 9fff
+    0x01, 0x01, 0x01, 0x01, 0x2e, 0x00, 0x00, 0x00, // a000 - a7ff
+    0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, // a800 - afff
+    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // b000 - b7ff
+    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // b800 - bfff
+    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // c000 - c7ff
+    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // c800 - cfff
+    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x2f, // d000 - d7ff
+    0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, // d800 - dfff
+    0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, // e000 - e7ff
+    0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, // e800 - efff
+    0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, // f000 - f7ff
+    0x02, 0x01, 0x30, 0x31, 0x01, 0x32, 0x33, 0x34, // f800 - ffff
+};
+
+
+static sal_Int8 UnicodeTypeBlockValue[] = {
+     0,  5, 17, 18, 27,
+};
+
+
+static sal_Int8 UnicodeTypeValue[] = {
+    15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,// 0000 - 000f
+    15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,// 0010 - 001f
+    12,23,23,23,25,23,23,23,20,21,23,24,23,19,23,23,// 0020 - 002f
+     9, 9, 9, 9, 9, 9, 9, 9, 9, 9,23,23,24,24,24,23,// 0030 - 003f
+    23, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 0040 - 004f
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,20,23,21,26,22,// 0050 - 005f
+    26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0060 - 006f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,20,24,21,24,15,// 0070 - 007f
+    15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,// 0080 - 008f
+    15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,// 0090 - 009f
+    12,23,25,25,25,25,27,27,26,27, 2,28,24,19,27,26,// 00a0 - 00af
+    27,24,11,11,26, 2,27,23,26,11, 2,29,11,11,11,23,// 00b0 - 00bf
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 00c0 - 00cf
+     1, 1, 1, 1, 1, 1, 1,24, 1, 1, 1, 1, 1, 1, 1, 2,// 00d0 - 00df
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 00e0 - 00ef
+     2, 2, 2, 2, 2, 2, 2,24, 2, 2, 2, 2, 2, 2, 2, 2,// 00f0 - 00ff
+
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0100 - 010f
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0110 - 011f
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0120 - 012f
+     1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1,// 0130 - 013f
+     2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2,// 0140 - 014f
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0150 - 015f
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0160 - 016f
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2,// 0170 - 017f
+     2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1,// 0180 - 018f
+     1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, 2, 1,// 0190 - 019f
+     1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1,// 01a0 - 01af
+     2, 1, 1, 1, 2, 1, 2, 1, 1, 2, 2, 5, 1, 2, 2, 2,// 01b0 - 01bf
+     5, 5, 5, 5, 1, 3, 2, 1, 3, 2, 1, 3, 2, 1, 2, 1,// 01c0 - 01cf
+     2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2,// 01d0 - 01df
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 01e0 - 01ef
+     2, 1, 3, 2, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2,// 01f0 - 01ff
+
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0200 - 020f
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0210 - 021f
+     0, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0220 - 022f
+     1, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0230 - 023f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0240 - 024f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0250 - 025f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0260 - 026f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0270 - 027f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0280 - 028f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0290 - 029f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0,// 02a0 - 02af
+     4, 4, 4, 4, 4, 4, 4, 4, 4,26,26, 4, 4, 4, 4, 4,// 02b0 - 02bf
+     4, 4,26,26,26,26,26,26,26,26,26,26,26,26,26,26,// 02c0 - 02cf
+     4, 4,26,26,26,26,26,26,26,26,26,26,26,26,26,26,// 02d0 - 02df
+     4, 4, 4, 4, 4,26,26,26,26,26,26,26,26,26, 4, 0,// 02e0 - 02ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 02f0 - 02ff
+
+     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,// 0300 - 030f
+     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,// 0310 - 031f
+     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,// 0320 - 032f
+     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,// 0330 - 033f
+     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0,// 0340 - 034f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0350 - 035f
+     6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0360 - 036f
+     0, 0, 0, 0,26,26, 0, 0, 0, 0, 4, 0, 0, 0,23, 0,// 0370 - 037f
+     0, 0, 0, 0,26,26, 1,23, 1, 1, 1, 0, 1, 0, 1, 1,// 0380 - 038f
+     2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 0390 - 039f
+     1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,// 03a0 - 03af
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 03b0 - 03bf
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0,// 03c0 - 03cf
+     2, 2, 1, 1, 1, 2, 2, 2, 0, 0, 1, 2, 1, 2, 1, 2,// 03d0 - 03df
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 03e0 - 03ef
+     2, 2, 2, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 03f0 - 03ff
+
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 0400 - 040f
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 0410 - 041f
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 0420 - 042f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0430 - 043f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0440 - 044f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0450 - 045f
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0460 - 046f
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0470 - 047f
+     1, 2,27, 6, 6, 6, 6, 0, 7, 7, 0, 0, 1, 2, 1, 2,// 0480 - 048f
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 0490 - 049f
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 04a0 - 04af
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 04b0 - 04bf
+     1, 1, 2, 1, 2, 0, 0, 1, 2, 0, 0, 1, 2, 0, 0, 0,// 04c0 - 04cf
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 04d0 - 04df
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 04e0 - 04ef
+     1, 2, 1, 2, 1, 2, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0,// 04f0 - 04ff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0500 - 050f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0510 - 051f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0520 - 052f
+     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 0530 - 053f
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 0540 - 054f
+     1, 1, 1, 1, 1, 1, 1, 0, 0, 4,23,23,23,23,23,23,// 0550 - 055f
+     0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0560 - 056f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 0570 - 057f
+     2, 2, 2, 2, 2, 2, 2, 2, 0,23,19, 0, 0, 0, 0, 0,// 0580 - 058f
+     0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,// 0590 - 059f
+     6, 6, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,// 05a0 - 05af
+     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, 6, 6,23, 6,// 05b0 - 05bf
+    23, 6, 6,23, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 05c0 - 05cf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 05d0 - 05df
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0,// 05e0 - 05ef
+     5, 5, 5,23,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 05f0 - 05ff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,23, 0, 0, 0,// 0600 - 060f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,23, 0, 0, 0,23,// 0610 - 061f
+     0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0620 - 062f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0,// 0630 - 063f
+     4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6,// 0640 - 064f
+     6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0650 - 065f
+     9, 9, 9, 9, 9, 9, 9, 9, 9, 9,23,23,23,23, 0, 0,// 0660 - 066f
+     6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0670 - 067f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0680 - 068f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0690 - 069f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 06a0 - 06af
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 06b0 - 06bf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 06c0 - 06cf
+     5, 5, 5, 5,23, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 6,// 06d0 - 06df
+     6, 6, 6, 6, 6, 4, 4, 6, 6,27, 6, 6, 6, 6, 0, 0,// 06e0 - 06ef
+     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 5, 5, 5,27,27, 0,// 06f0 - 06ff
+
+    23,23,23,23,23,23,23,23,23,23,23,23,23,23, 0,16,// 0700 - 070f
+     5, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0710 - 071f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0,// 0720 - 072f
+     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,// 0730 - 073f
+     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0, 0,// 0740 - 074f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0750 - 075f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0760 - 076f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0770 - 077f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0780 - 078f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0790 - 079f
+     5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,// 07a0 - 07af
+     6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07b0 - 07bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07c0 - 07cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07d0 - 07df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07e0 - 07ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07f0 - 07ff
+
+     0, 6, 6, 8, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0900 - 090f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0910 - 091f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0920 - 092f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 6, 5, 8, 8,// 0930 - 093f
+     8, 6, 6, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8, 6, 0, 0,// 0940 - 094f
+     5, 6, 6, 6, 6, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,// 0950 - 095f
+     5, 5, 6, 6,23,23, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,// 0960 - 096f
+    23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0970 - 097f
+     0, 6, 8, 8, 0, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5,// 0980 - 098f
+     5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0990 - 099f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,// 09a0 - 09af
+     5, 0, 5, 0, 0, 0, 5, 5, 5, 5, 0, 0, 6, 0, 8, 8,// 09b0 - 09bf
+     8, 6, 6, 6, 6, 0, 0, 8, 8, 0, 0, 8, 8, 6, 0, 0,// 09c0 - 09cf
+     0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 5, 5, 0, 5,// 09d0 - 09df
+     5, 5, 6, 6, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,// 09e0 - 09ef
+     5, 5,25,25,11,11,11,11,11,11,27, 0, 0, 0, 0, 0,// 09f0 - 09ff
+
+     0, 0, 6, 0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 5,// 0a00 - 0a0f
+     5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0a10 - 0a1f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,// 0a20 - 0a2f
+     5, 0, 5, 5, 0, 5, 5, 0, 5, 5, 0, 0, 6, 0, 8, 8,// 0a30 - 0a3f
+     8, 6, 6, 0, 0, 0, 0, 6, 6, 0, 0, 6, 6, 6, 0, 0,// 0a40 - 0a4f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 0, 5, 0,// 0a50 - 0a5f
+     0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,// 0a60 - 0a6f
+     6, 6, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0a70 - 0a7f
+     0, 6, 6, 8, 0, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5,// 0a80 - 0a8f
+     5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0a90 - 0a9f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,// 0aa0 - 0aaf
+     5, 0, 5, 5, 0, 5, 5, 5, 5, 5, 0, 0, 6, 5, 8, 8,// 0ab0 - 0abf
+     8, 6, 6, 6, 6, 6, 0, 6, 6, 8, 0, 8, 8, 6, 0, 0,// 0ac0 - 0acf
+     5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ad0 - 0adf
+     5, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,// 0ae0 - 0aef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0af0 - 0aff
+
+     0, 6, 8, 8, 0, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 5,// 0b00 - 0b0f
+     5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0b10 - 0b1f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,// 0b20 - 0b2f
+     5, 0, 5, 5, 0, 0, 5, 5, 5, 5, 0, 0, 6, 5, 8, 6,// 0b30 - 0b3f
+     8, 6, 6, 6, 0, 0, 0, 8, 8, 0, 0, 8, 8, 6, 0, 0,// 0b40 - 0b4f
+     0, 0, 0, 0, 0, 0, 6, 8, 0, 0, 0, 0, 5, 5, 0, 5,// 0b50 - 0b5f
+     5, 5, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,// 0b60 - 0b6f
+    27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0b70 - 0b7f
+     0, 0, 6, 8, 0, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 5,// 0b80 - 0b8f
+     5, 0, 5, 5, 5, 5, 0, 0, 0, 5, 5, 0, 5, 0, 5, 5,// 0b90 - 0b9f
+     0, 0, 0, 5, 5, 0, 0, 0, 5, 5, 5, 0, 0, 0, 5, 5,// 0ba0 - 0baf
+     5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 0, 0, 0, 0, 8, 8,// 0bb0 - 0bbf
+     6, 8, 8, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 6, 0, 0,// 0bc0 - 0bcf
+     0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0,// 0bd0 - 0bdf
+     0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9,// 0be0 - 0bef
+    11,11,11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0bf0 - 0bff
+
+     0, 8, 8, 8, 0, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5,// 0c00 - 0c0f
+     5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0c10 - 0c1f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,// 0c20 - 0c2f
+     5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 6, 6,// 0c30 - 0c3f
+     6, 8, 8, 8, 8, 0, 6, 6, 6, 0, 6, 6, 6, 6, 0, 0,// 0c40 - 0c4f
+     0, 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c50 - 0c5f
+     5, 5, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,// 0c60 - 0c6f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c70 - 0c7f
+     0, 0, 8, 8, 0, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5,// 0c80 - 0c8f
+     5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0c90 - 0c9f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,// 0ca0 - 0caf
+     5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 0, 0, 0, 0, 8, 6,// 0cb0 - 0cbf
+     8, 8, 8, 8, 8, 0, 6, 8, 8, 0, 8, 8, 6, 6, 0, 0,// 0cc0 - 0ccf
+     0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, 0, 0, 5, 0,// 0cd0 - 0cdf
+     5, 5, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,// 0ce0 - 0cef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0cf0 - 0cff
+
+     0, 0, 8, 8, 0, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5,// 0d00 - 0d0f
+     5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0d10 - 0d1f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5,// 0d20 - 0d2f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 8, 8,// 0d30 - 0d3f
+     8, 6, 6, 6, 0, 0, 8, 8, 8, 0, 8, 8, 8, 6, 0, 0,// 0d40 - 0d4f
+     0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0,// 0d50 - 0d5f
+     5, 5, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,// 0d60 - 0d6f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d70 - 0d7f
+     0, 0, 8, 8, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0d80 - 0d8f
+     5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 5, 5, 5, 5, 5, 5,// 0d90 - 0d9f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0da0 - 0daf
+     5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 0,// 0db0 - 0dbf
+     5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 6, 0, 0, 0, 0, 8,// 0dc0 - 0dcf
+     8, 8, 6, 6, 6, 0, 6, 0, 8, 8, 8, 8, 8, 8, 8, 8,// 0dd0 - 0ddf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0de0 - 0def
+     0, 0, 8, 8,23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0df0 - 0dff
+
+     0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0e00 - 0e0f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0e10 - 0e1f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0e20 - 0e2f
+     5, 6, 5, 5, 6, 6, 6, 6, 6, 6, 6, 0, 0, 0, 0,25,// 0e30 - 0e3f
+     5, 5, 5, 5, 5, 5, 4, 6, 6, 6, 6, 6, 6, 6, 6,23,// 0e40 - 0e4f
+     9, 9, 9, 9, 9, 9, 9, 9, 9, 9,23,23, 0, 0, 0, 0,// 0e50 - 0e5f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e60 - 0e6f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e70 - 0e7f
+     0, 5, 5, 0, 5, 0, 0, 5, 5, 0, 5, 0, 0, 5, 0, 0,// 0e80 - 0e8f
+     0, 0, 0, 0, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5,// 0e90 - 0e9f
+     0, 5, 5, 5, 0, 5, 0, 5, 0, 0, 5, 5, 0, 5, 5, 5,// 0ea0 - 0eaf
+     5, 6, 5, 5, 6, 6, 6, 6, 6, 6, 0, 6, 6, 5, 0, 0,// 0eb0 - 0ebf
+     5, 5, 5, 5, 5, 0, 4, 0, 6, 6, 6, 6, 6, 6, 0, 0,// 0ec0 - 0ecf
+     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 5, 5, 0, 0,// 0ed0 - 0edf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ee0 - 0eef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ef0 - 0eff
+
+     5,27,27,27,23,23,23,23,23,23,23,23,23,23,23,23,// 0f00 - 0f0f
+    23,23,23,27,27,27,27,27, 6, 6,27,27,27,27,27,27,// 0f10 - 0f1f
+     9, 9, 9, 9, 9, 9, 9, 9, 9, 9,11,11,11,11,11,11,// 0f20 - 0f2f
+    11,11,11,11,27, 6,27, 6,27, 6,20,21,20,21, 8, 8,// 0f30 - 0f3f
+     5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5,// 0f40 - 0f4f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 0f50 - 0f5f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0,// 0f60 - 0f6f
+     0, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8,// 0f70 - 0f7f
+     6, 6, 6, 6, 6,23, 6, 6, 5, 5, 5, 5, 0, 0, 0, 0,// 0f80 - 0f8f
+     6, 6, 6, 6, 6, 6, 6, 6, 0, 6, 6, 6, 6, 6, 6, 6,// 0f90 - 0f9f
+     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,// 0fa0 - 0faf
+     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 0,27,27,// 0fb0 - 0fbf
+    27,27,27,27,27,27, 6,27,27,27,27,27,27, 0, 0,27,// 0fc0 - 0fcf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0fd0 - 0fdf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0fe0 - 0fef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ff0 - 0fff
+
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1000 - 100f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1010 - 101f
+     5, 5, 0, 5, 5, 5, 5, 5, 0, 5, 5, 0, 8, 6, 6, 6,// 1020 - 102f
+     6, 8, 6, 0, 0, 0, 6, 6, 8, 6, 0, 0, 0, 0, 0, 0,// 1030 - 103f
+     9, 9, 9, 9, 9, 9, 9, 9, 9, 9,23,23,23,23,23,23,// 1040 - 104f
+     5, 5, 5, 5, 5, 5, 8, 8, 6, 6, 0, 0, 0, 0, 0, 0,// 1050 - 105f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1060 - 106f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1070 - 107f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1080 - 108f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1090 - 109f
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 10a0 - 10af
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 10b0 - 10bf
+     1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 10c0 - 10cf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 10d0 - 10df
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 10e0 - 10ef
+     5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0,23, 0, 0, 0, 0,// 10f0 - 10ff
+
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1100 - 110f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1110 - 111f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1120 - 112f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1130 - 113f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1140 - 114f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 5,// 1150 - 115f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1160 - 116f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1170 - 117f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1180 - 118f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1190 - 119f
+     5, 5, 5, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5,// 11a0 - 11af
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 11b0 - 11bf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 11c0 - 11cf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 11d0 - 11df
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 11e0 - 11ef
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0,// 11f0 - 11ff
+
+     5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5,// 1200 - 120f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1210 - 121f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1220 - 122f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1230 - 123f
+     5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5, 5, 5, 0, 0,// 1240 - 124f
+     5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5, 5, 5, 0, 0,// 1250 - 125f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1260 - 126f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1270 - 127f
+     5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 5, 5, 5, 0, 0,// 1280 - 128f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1290 - 129f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,// 12a0 - 12af
+     5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0,// 12b0 - 12bf
+     5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0,// 12c0 - 12cf
+     5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5,// 12d0 - 12df
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,// 12e0 - 12ef
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 12f0 - 12ff
+
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,// 1300 - 130f
+     5, 0, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5, 5, 0,// 1310 - 131f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1320 - 132f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1330 - 133f
+     5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5,// 1340 - 134f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0,// 1350 - 135f
+     0,23,23,23,23,23,23,23,23, 9, 9, 9, 9, 9, 9, 9,// 1360 - 136f
+     9, 9,11,11,11,11,11,11,11,11,11,11,11, 0, 0, 0,// 1370 - 137f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1380 - 138f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1390 - 139f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 13a0 - 13af
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 13b0 - 13bf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 13c0 - 13cf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 13d0 - 13df
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 13e0 - 13ef
+     5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 13f0 - 13ff
+
+     0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1400 - 140f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1410 - 141f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1420 - 142f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1430 - 143f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1440 - 144f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1450 - 145f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1460 - 146f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1470 - 147f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1480 - 148f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1490 - 149f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 14a0 - 14af
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 14b0 - 14bf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 14c0 - 14cf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 14d0 - 14df
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 14e0 - 14ef
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 14f0 - 14ff
+
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1600 - 160f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1610 - 161f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1620 - 162f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1630 - 163f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1640 - 164f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1650 - 165f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,23,23, 5,// 1660 - 166f
+     5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1670 - 167f
+    12, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1680 - 168f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,20,21, 0, 0, 0,// 1690 - 169f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 16a0 - 16af
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 16b0 - 16bf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 16c0 - 16cf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 16d0 - 16df
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,23,23,23,10,10,// 16e0 - 16ef
+    10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 16f0 - 16ff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1700 - 170f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1710 - 171f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1720 - 172f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1730 - 173f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1740 - 174f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1750 - 175f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1760 - 176f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1770 - 177f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1780 - 178f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1790 - 179f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 17a0 - 17af
+     5, 5, 5, 5, 8, 8, 8, 6, 6, 6, 6, 6, 6, 6, 8, 8,// 17b0 - 17bf
+     8, 8, 8, 8, 8, 8, 6, 8, 8, 6, 6, 6, 6, 6, 6, 6,// 17c0 - 17cf
+     6, 6, 6, 6,23,23,23,23,23,23,23,25,23, 0, 0, 0,// 17d0 - 17df
+     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,// 17e0 - 17ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 17f0 - 17ff
+
+    23,23,23,23,23,23,19,23,23,23,23,16,16,16,16, 0,// 1800 - 180f
+     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0,// 1810 - 181f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1820 - 182f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1830 - 183f
+     5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1840 - 184f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1850 - 185f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1860 - 186f
+     5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,// 1870 - 187f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1880 - 188f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 1890 - 189f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 0, 0, 0, 0, 0, 0,// 18a0 - 18af
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18b0 - 18bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18c0 - 18cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18d0 - 18df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18e0 - 18ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18f0 - 18ff
+
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1e00 - 1e0f
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1e10 - 1e1f
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1e20 - 1e2f
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1e30 - 1e3f
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1e40 - 1e4f
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1e50 - 1e5f
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1e60 - 1e6f
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1e70 - 1e7f
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1e80 - 1e8f
+     1, 2, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,// 1e90 - 1e9f
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1ea0 - 1eaf
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1eb0 - 1ebf
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1ec0 - 1ecf
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1ed0 - 1edf
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,// 1ee0 - 1eef
+     1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 0, 0, 0, 0,// 1ef0 - 1eff
+
+     2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,// 1f00 - 1f0f
+     2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,// 1f10 - 1f1f
+     2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,// 1f20 - 1f2f
+     2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,// 1f30 - 1f3f
+     2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,// 1f40 - 1f4f
+     2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 1, 0, 1, 0, 1,// 1f50 - 1f5f
+     2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,// 1f60 - 1f6f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0,// 1f70 - 1f7f
+     2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,// 1f80 - 1f8f
+     2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,// 1f90 - 1f9f
+     2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,// 1fa0 - 1faf
+     2, 2, 2, 2, 2, 0, 2, 2, 1, 1, 1, 1, 3,26, 2,26,// 1fb0 - 1fbf
+    26,26, 2, 2, 2, 0, 2, 2, 1, 1, 1, 1, 3,26,26,26,// 1fc0 - 1fcf
+     2, 2, 2, 2, 0, 0, 2, 2, 1, 1, 1, 1, 0,26,26,26,// 1fd0 - 1fdf
+     2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,26,26,26,// 1fe0 - 1fef
+     0, 0, 2, 2, 2, 0, 2, 2, 1, 1, 1, 1, 3,26,26, 0,// 1ff0 - 1fff
+
+    12,12,12,12,12,12,12,12,12,12,12,12,16,16,16,16,// 2000 - 200f
+    19,19,19,19,19,19,23,23,28,29,20,28,28,29,20,28,// 2010 - 201f
+    23,23,23,23,23,23,23,23,13,14,16,16,16,16,16,12,// 2020 - 202f
+    23,23,23,23,23,23,23,23,23,28,29,23,23,23,23,22,// 2030 - 203f
+    22,23,23,23,24,20,21, 0,23,23,23,23,23,23, 0, 0,// 2040 - 204f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2050 - 205f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,16,16,16,16,16,16,// 2060 - 206f
+    11, 0, 0, 0,11,11,11,11,11,11,24,24,24,20,21, 2,// 2070 - 207f
+    11,11,11,11,11,11,11,11,11,11,24,24,24,20,21, 0,// 2080 - 208f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2090 - 209f
+    25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,// 20a0 - 20af
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 20b0 - 20bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 20c0 - 20cf
+     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7,// 20d0 - 20df
+     7, 6, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 20e0 - 20ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 20f0 - 20ff
+
+    27,27, 1,27,27,27,27, 1,27,27, 2, 1, 1, 1, 2, 2,// 2100 - 210f
+     1, 1, 1, 2,27, 1,27,27,27, 1, 1, 1, 1, 1,27,27,// 2110 - 211f
+    27,27,27,27, 1,27, 1,27, 1,27, 1, 1, 1, 1,27, 2,// 2120 - 212f
+     1, 1,27, 1, 2, 5, 5, 5, 5, 2,27, 0, 0, 0, 0, 0,// 2130 - 213f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2140 - 214f
+     0, 0, 0,11,11,11,11,11,11,11,11,11,11,11,11,11,// 2150 - 215f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2160 - 216f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2170 - 217f
+    10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2180 - 218f
+    24,24,24,24,24,27,27,27,27,27,24,24,27,27,27,27,// 2190 - 219f
+    24,27,27,24,27,27,24,27,27,27,27,27,27,27,24,27,// 21a0 - 21af
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 21b0 - 21bf
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,24,24,// 21c0 - 21cf
+    27,27,24,27,24,27,27,27,27,27,27,27,27,27,27,27,// 21d0 - 21df
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 21e0 - 21ef
+    27,27,27,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 21f0 - 21ff
+
+    24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2200 - 220f
+    24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2210 - 221f
+    24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2220 - 222f
+    24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2230 - 223f
+    24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2240 - 224f
+    24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2250 - 225f
+    24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2260 - 226f
+    24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2270 - 227f
+    24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2280 - 228f
+    24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 2290 - 229f
+    24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 22a0 - 22af
+    24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 22b0 - 22bf
+    24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 22c0 - 22cf
+    24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 22d0 - 22df
+    24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,// 22e0 - 22ef
+    24,24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 22f0 - 22ff
+
+    27,27,27,27,27,27,27,27,24,24,24,24,27,27,27,27,// 2300 - 230f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2310 - 231f
+    24,24,27,27,27,27,27,27,27,20,21,27,27,27,27,27,// 2320 - 232f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2330 - 233f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2340 - 234f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2350 - 235f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2360 - 236f
+    27,27,27,27,27,27,27,27,27,27,27,27, 0,27,27,27,// 2370 - 237f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2380 - 238f
+    27,27,27,27,27,27,27,27,27,27,27, 0, 0, 0, 0, 0,// 2390 - 239f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23a0 - 23af
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23b0 - 23bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23c0 - 23cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23d0 - 23df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23e0 - 23ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23f0 - 23ff
+
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2400 - 240f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2410 - 241f
+    27,27,27,27,27,27,27, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2420 - 242f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2430 - 243f
+    27,27,27,27,27,27,27,27,27,27,27, 0, 0, 0, 0, 0,// 2440 - 244f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2450 - 245f
+    11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,// 2460 - 246f
+    11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,// 2470 - 247f
+    11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,// 2480 - 248f
+    11,11,11,11,11,11,11,11,11,11,11,11,27,27,27,27,// 2490 - 249f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 24a0 - 24af
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 24b0 - 24bf
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 24c0 - 24cf
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 24d0 - 24df
+    27,27,27,27,27,27,27,27,27,27,11, 0, 0, 0, 0, 0,// 24e0 - 24ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 24f0 - 24ff
+
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2500 - 250f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2510 - 251f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2520 - 252f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2530 - 253f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2540 - 254f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2550 - 255f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2560 - 256f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2570 - 257f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2580 - 258f
+    27,27,27,27,27,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2590 - 259f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 25a0 - 25af
+    27,27,27,27,27,27,27,24,27,27,27,27,27,27,27,27,// 25b0 - 25bf
+    27,24,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 25c0 - 25cf
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 25d0 - 25df
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 25e0 - 25ef
+    27,27,27,27,27,27,27,27, 0, 0, 0, 0, 0, 0, 0, 0,// 25f0 - 25ff
+
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2600 - 260f
+    27,27,27,27, 0, 0, 0, 0, 0,27,27,27,27,27,27,27,// 2610 - 261f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2620 - 262f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2630 - 263f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2640 - 264f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2650 - 265f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,24,// 2660 - 266f
+    27,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2670 - 267f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2680 - 268f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2690 - 269f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26a0 - 26af
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26b0 - 26bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26c0 - 26cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26d0 - 26df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26e0 - 26ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26f0 - 26ff
+
+     0,27,27,27,27, 0,27,27,27,27, 0, 0,27,27,27,27,// 2700 - 270f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2710 - 271f
+    27,27,27,27,27,27,27,27, 0,27,27,27,27,27,27,27,// 2720 - 272f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2730 - 273f
+    27,27,27,27,27,27,27,27,27,27,27,27, 0,27, 0,27,// 2740 - 274f
+    27,27,27, 0, 0, 0,27, 0,27,27,27,27,27,27,27, 0,// 2750 - 275f
+     0,27,27,27,27,27,27,27, 0, 0, 0, 0, 0, 0, 0, 0,// 2760 - 276f
+     0, 0, 0, 0, 0, 0,11,11,11,11,11,11,11,11,11,11,// 2770 - 277f
+    11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,// 2780 - 278f
+    11,11,11,11,27, 0, 0, 0,27,27,27,27,27,27,27,27,// 2790 - 279f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 27a0 - 27af
+     0,27,27,27,27,27,27,27,27,27,27,27,27,27,27, 0,// 27b0 - 27bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 27c0 - 27cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 27d0 - 27df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 27e0 - 27ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 27f0 - 27ff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e00 - 2e0f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e10 - 2e1f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e20 - 2e2f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e30 - 2e3f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e40 - 2e4f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e50 - 2e5f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e60 - 2e6f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e70 - 2e7f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2e80 - 2e8f
+    27,27,27,27,27,27,27,27,27,27, 0,27,27,27,27,27,// 2e90 - 2e9f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2ea0 - 2eaf
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2eb0 - 2ebf
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2ec0 - 2ecf
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2ed0 - 2edf
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2ee0 - 2eef
+    27,27,27,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2ef0 - 2eff
+
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f00 - 2f0f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f10 - 2f1f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f20 - 2f2f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f30 - 2f3f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f40 - 2f4f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f50 - 2f5f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f60 - 2f6f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f70 - 2f7f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f80 - 2f8f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2f90 - 2f9f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2fa0 - 2faf
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2fb0 - 2fbf
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 2fc0 - 2fcf
+    27,27,27,27,27,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2fd0 - 2fdf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2fe0 - 2fef
+    27,27,27,27,27,27,27,27,27,27,27,27, 0, 0, 0, 0,// 2ff0 - 2fff
+
+    12,23,23,23,27, 4, 5,10,20,21,20,21,20,21,20,21,// 3000 - 300f
+    20,21,27,27,20,21,20,21,20,21,20,21,19,20,21,21,// 3010 - 301f
+    27,10,10,10,10,10,10,10,10,10, 6, 6, 6, 6, 6, 6,// 3020 - 302f
+    19, 4, 4, 4, 4, 4,27,27,10,10,10, 0, 0, 0,27,27,// 3030 - 303f
+     0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3040 - 304f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3050 - 305f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3060 - 306f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3070 - 307f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3080 - 308f
+     5, 5, 5, 5, 5, 0, 0, 0, 0, 6, 6,26,26, 4, 4, 0,// 3090 - 309f
+     0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 30a0 - 30af
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 30b0 - 30bf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 30c0 - 30cf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 30d0 - 30df
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 30e0 - 30ef
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,22, 4, 4, 4, 0,// 30f0 - 30ff
+
+     0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3100 - 310f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3110 - 311f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0,// 3120 - 312f
+     0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3130 - 313f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3140 - 314f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3150 - 315f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3160 - 316f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 3170 - 317f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,// 3180 - 318f
+    27,27,11,11,11,11,27,27,27,27,27,27,27,27,27,27,// 3190 - 319f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 31a0 - 31af
+     5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,// 31b0 - 31bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 31c0 - 31cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 31d0 - 31df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 31e0 - 31ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 31f0 - 31ff
+
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3200 - 320f
+    27,27,27,27,27,27,27,27,27,27,27,27,27, 0, 0, 0,// 3210 - 321f
+    11,11,11,11,11,11,11,11,11,11,27,27,27,27,27,27,// 3220 - 322f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3230 - 323f
+    27,27,27,27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 3240 - 324f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 3250 - 325f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3260 - 326f
+    27,27,27,27,27,27,27,27,27,27,27,27, 0, 0, 0,27,// 3270 - 327f
+    11,11,11,11,11,11,11,11,11,11,27,27,27,27,27,27,// 3280 - 328f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3290 - 329f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 32a0 - 32af
+    27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 32b0 - 32bf
+    27,27,27,27,27,27,27,27,27,27,27,27, 0, 0, 0, 0,// 32c0 - 32cf
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 32d0 - 32df
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 32e0 - 32ef
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27, 0,// 32f0 - 32ff
+
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3300 - 330f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3310 - 331f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3320 - 332f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3330 - 333f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3340 - 334f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3350 - 335f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3360 - 336f
+    27,27,27,27,27,27,27, 0, 0, 0, 0,27,27,27,27,27,// 3370 - 337f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3380 - 338f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 3390 - 339f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 33a0 - 33af
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 33b0 - 33bf
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 33c0 - 33cf
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27, 0, 0,// 33d0 - 33df
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// 33e0 - 33ef
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27, 0,// 33f0 - 33ff
+
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d00 - 4d0f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d10 - 4d1f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d20 - 4d2f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d30 - 4d3f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d40 - 4d4f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d50 - 4d5f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d60 - 4d6f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d70 - 4d7f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d80 - 4d8f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4d90 - 4d9f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 4da0 - 4daf
+     5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 4db0 - 4dbf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 4dc0 - 4dcf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 4dd0 - 4ddf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 4de0 - 4def
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 4df0 - 4dff
+
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f00 - 9f0f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f10 - 9f1f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f20 - 9f2f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f30 - 9f3f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f40 - 9f4f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f50 - 9f5f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f60 - 9f6f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f70 - 9f7f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f80 - 9f8f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// 9f90 - 9f9f
+     5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 9fa0 - 9faf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 9fb0 - 9fbf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 9fc0 - 9fcf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 9fd0 - 9fdf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 9fe0 - 9fef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 9ff0 - 9fff
+
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// a400 - a40f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// a410 - a41f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// a420 - a42f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// a430 - a43f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// a440 - a44f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// a450 - a45f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// a460 - a46f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// a470 - a47f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0,// a480 - a48f
+    27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,// a490 - a49f
+    27,27, 0, 0,27,27,27,27,27,27,27,27,27,27,27,27,// a4a0 - a4af
+    27,27,27,27, 0,27,27,27,27,27,27,27,27,27,27,27,// a4b0 - a4bf
+    27, 0,27,27,27, 0,27, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a4c0 - a4cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a4d0 - a4df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a4e0 - a4ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a4f0 - a4ff
+
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d700 - d70f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d710 - d71f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d720 - d72f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d730 - d73f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d740 - d74f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d750 - d75f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d760 - d76f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d770 - d77f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d780 - d78f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// d790 - d79f
+     5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// d7a0 - d7af
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// d7b0 - d7bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// d7c0 - d7cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// d7d0 - d7df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// d7e0 - d7ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// d7f0 - d7ff
+
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fa00 - fa0f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fa10 - fa1f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,// fa20 - fa2f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fa30 - fa3f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fa40 - fa4f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fa50 - fa5f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fa60 - fa6f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fa70 - fa7f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fa80 - fa8f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fa90 - fa9f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// faa0 - faaf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fab0 - fabf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fac0 - facf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fad0 - fadf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fae0 - faef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// faf0 - faff
+
+     2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fb00 - fb0f
+     0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 5, 6, 5,// fb10 - fb1f
+     5, 5, 5, 5, 5, 5, 5, 5, 5,24, 5, 5, 5, 5, 5, 5,// fb20 - fb2f
+     5, 5, 5, 5, 5, 5, 5, 0, 5, 5, 5, 5, 5, 0, 5, 0,// fb30 - fb3f
+     5, 5, 0, 5, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fb40 - fb4f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fb50 - fb5f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fb60 - fb6f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fb70 - fb7f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fb80 - fb8f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fb90 - fb9f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fba0 - fbaf
+     5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fbb0 - fbbf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fbc0 - fbcf
+     0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fbd0 - fbdf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fbe0 - fbef
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fbf0 - fbff
+
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fd00 - fd0f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fd10 - fd1f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fd20 - fd2f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,20,21,// fd30 - fd3f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fd40 - fd4f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fd50 - fd5f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fd60 - fd6f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fd70 - fd7f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fd80 - fd8f
+     0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fd90 - fd9f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fda0 - fdaf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fdb0 - fdbf
+     5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0,// fdc0 - fdcf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fdd0 - fddf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fde0 - fdef
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0,// fdf0 - fdff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fe00 - fe0f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fe10 - fe1f
+     6, 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fe20 - fe2f
+    23,19,19,22,22,20,21,20,21,20,21,20,21,20,21,20,// fe30 - fe3f
+    21,20,21,20,21, 0, 0, 0, 0,23,23,23,23,22,22,22,// fe40 - fe4f
+    23,23,23, 0,23,23,23,23,19,20,21,20,21,20,21,23,// fe50 - fe5f
+    23,23,24,19,24,24,24, 0,23,25,23,23, 0, 0, 0, 0,// fe60 - fe6f
+     5, 5, 5, 0, 5, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fe70 - fe7f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fe80 - fe8f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fe90 - fe9f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fea0 - feaf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// feb0 - febf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fec0 - fecf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fed0 - fedf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// fee0 - feef
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0,16,// fef0 - feff
+
+     0,23,23,23,25,23,23,23,20,21,23,24,23,19,23,23,// ff00 - ff0f
+     9, 9, 9, 9, 9, 9, 9, 9, 9, 9,23,23,24,24,24,23,// ff10 - ff1f
+    23, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// ff20 - ff2f
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,20,23,21,26,22,// ff30 - ff3f
+    26, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// ff40 - ff4f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,20,24,21,24, 0,// ff50 - ff5f
+     0,23,20,21,23,22, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// ff60 - ff6f
+     4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// ff70 - ff7f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// ff80 - ff8f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 4,// ff90 - ff9f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,// ffa0 - ffaf
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0,// ffb0 - ffbf
+     0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 5, 5, 5,// ffc0 - ffcf
+     0, 0, 5, 5, 5, 5, 5, 5, 0, 0, 5, 5, 5, 0, 0, 0,// ffd0 - ffdf
+    25,25,24,26,27,25,25, 0,27,24,24,24,24,27,27, 0,// ffe0 - ffef
+     0, 0, 0, 0, 0, 0, 0, 0, 0,16,16,16,27,27, 0, 0,// fff0 - ffff
+
+};
+
+
+#define UnicodeDirectionNumberBlock  3
+
+static sal_Int8 UnicodeDirectionIndex[] = {
+    0x03, 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, // 0000 - 07ff
+    0x00, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, // 0800 - 0fff
+    0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x13, // 1000 - 17ff
+    0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, // 1800 - 1fff
+    0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, // 2000 - 27ff
+    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x1f, // 2800 - 2fff
+    0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 3000 - 37ff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 3800 - 3fff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 4000 - 47ff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 4800 - 4fff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 5000 - 57ff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 5800 - 5fff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6000 - 67ff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6800 - 6fff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 7000 - 77ff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 7800 - 7fff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 8000 - 87ff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 8800 - 8fff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 9000 - 97ff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 9800 - 9fff
+    0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, // a000 - a7ff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // a800 - afff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // b000 - b7ff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // b800 - bfff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // c000 - c7ff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // c800 - cfff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // d000 - d7ff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // d800 - dfff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // e000 - e7ff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // e800 - efff
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // f000 - f7ff
+    0x00, 0x00, 0x00, 0x22, 0x02, 0x23, 0x24, 0x25, // f800 - ffff
+};
+
+
+static sal_Int8 UnicodeDirectionBlockValue[] = {
+     0, 10, 13,
+};
+
+
+static sal_Int8 UnicodeDirectionValue[] = {
+    18,18,18,18,18,18,18,18,18, 8, 7, 8, 9, 7,18,18,// 0000 - 000f
+    18,18,18,18,18,18,18,18,18,18,18,18, 7, 7, 7, 8,// 0010 - 001f
+     9,10,10, 4, 4, 4,10,10,10,10,10, 4, 6, 4, 6, 3,// 0020 - 002f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6,10,10,10,10,10,// 0030 - 003f
+    10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0040 - 004f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10,10,10,10,// 0050 - 005f
+    10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0060 - 006f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10,10,10,18,// 0070 - 007f
+    18,18,18,18,18, 7,18,18,18,18,18,18,18,18,18,18,// 0080 - 008f
+    18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,// 0090 - 009f
+     6,10, 4, 4, 4, 4,10,10,10,10, 0,10,10,10,10,10,// 00a0 - 00af
+     4, 4, 2, 2,10, 0,10,10,10, 2, 0,10,10,10,10,10,// 00b0 - 00bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 00c0 - 00cf
+     0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0, 0, 0,// 00d0 - 00df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 00e0 - 00ef
+     0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0, 0, 0,// 00f0 - 00ff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0200 - 020f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0210 - 021f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0220 - 022f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0230 - 023f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0240 - 024f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0250 - 025f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0260 - 026f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0270 - 027f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0280 - 028f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0290 - 029f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 02a0 - 02af
+     0, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0, 0,// 02b0 - 02bf
+     0, 0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 02c0 - 02cf
+     0, 0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 02d0 - 02df
+     0, 0, 0, 0, 0,10,10,10,10,10,10,10,10,10, 0, 0,// 02e0 - 02ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 02f0 - 02ff
+
+    17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,// 0300 - 030f
+    17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,// 0310 - 031f
+    17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,// 0320 - 032f
+    17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,// 0330 - 033f
+    17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, 0,// 0340 - 034f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0350 - 035f
+    17,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0360 - 036f
+     0, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0, 0, 0,10, 0,// 0370 - 037f
+     0, 0, 0, 0,10,10, 0,10, 0, 0, 0, 0, 0, 0, 0, 0,// 0380 - 038f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0390 - 039f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 03a0 - 03af
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 03b0 - 03bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 03c0 - 03cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 03d0 - 03df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 03e0 - 03ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 03f0 - 03ff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0400 - 040f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0410 - 041f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0420 - 042f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0430 - 043f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0440 - 044f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0450 - 045f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0460 - 046f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0470 - 047f
+     0, 0, 0,17,17,17,17, 0,17,17, 0, 0, 0, 0, 0, 0,// 0480 - 048f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0490 - 049f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 04a0 - 04af
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 04b0 - 04bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 04c0 - 04cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 04d0 - 04df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 04e0 - 04ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 04f0 - 04ff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0500 - 050f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0510 - 051f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0520 - 052f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0530 - 053f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0540 - 054f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0550 - 055f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0560 - 056f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0570 - 057f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0,// 0580 - 058f
+     0,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,// 0590 - 059f
+    17,17, 0,17,17,17,17,17,17,17,17,17,17,17,17,17,// 05a0 - 05af
+    17,17,17,17,17,17,17,17,17,17, 0,17,17,17, 1,17,// 05b0 - 05bf
+     1,17,17, 1,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 05c0 - 05cf
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// 05d0 - 05df
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,// 05e0 - 05ef
+     1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 05f0 - 05ff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0,// 0600 - 060f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,13, 0, 0, 0,13,// 0610 - 061f
+     0,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 0620 - 062f
+    13,13,13,13,13,13,13,13,13,13,13, 0, 0, 0, 0, 0,// 0630 - 063f
+    13,13,13,13,13,13,13,13,13,13,13,17,17,17,17,17,// 0640 - 064f
+    17,17,17,17,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0650 - 065f
+     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5,13, 0, 0,// 0660 - 066f
+    17,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 0670 - 067f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 0680 - 068f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 0690 - 069f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 06a0 - 06af
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 06b0 - 06bf
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 06c0 - 06cf
+    13,13,13,13,13,13,17,17,17,17,17,17,17,17,17,17,// 06d0 - 06df
+    17,17,17,17,17,13,13,17,17,10,17,17,17,17, 0, 0,// 06e0 - 06ef
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2,13,13,13,13,13, 0,// 06f0 - 06ff
+
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13, 0,18,// 0700 - 070f
+    13,17,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 0710 - 071f
+    13,13,13,13,13,13,13,13,13,13,13,13,13, 0, 0, 0,// 0720 - 072f
+    17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,// 0730 - 073f
+    17,17,17,17,17,17,17,17,17,17,17, 0, 0, 0, 0, 0,// 0740 - 074f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0750 - 075f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0760 - 076f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0770 - 077f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 0780 - 078f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// 0790 - 079f
+    13,13,13,13,13,13,17,17,17,17,17,17,17,17,17,17,// 07a0 - 07af
+    17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07b0 - 07bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07c0 - 07cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07d0 - 07df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07e0 - 07ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 07f0 - 07ff
+
+     0,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0900 - 090f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0910 - 091f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0920 - 092f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0, 0,// 0930 - 093f
+     0,17,17,17,17,17,17,17,17, 0, 0, 0, 0,17, 0, 0,// 0940 - 094f
+     0,17,17,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0950 - 095f
+     0, 0,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0960 - 096f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0970 - 097f
+     0,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0980 - 098f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0990 - 099f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 09a0 - 09af
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0, 0,// 09b0 - 09bf
+     0,17,17,17,17, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0,// 09c0 - 09cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 09d0 - 09df
+     0, 0,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 09e0 - 09ef
+     0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 09f0 - 09ff
+
+     0, 0,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0a00 - 0a0f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0a10 - 0a1f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0a20 - 0a2f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0, 0,// 0a30 - 0a3f
+     0,17,17, 0, 0, 0, 0,17,17, 0, 0,17,17,17, 0, 0,// 0a40 - 0a4f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0a50 - 0a5f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0a60 - 0a6f
+    17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0a70 - 0a7f
+     0,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0a80 - 0a8f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0a90 - 0a9f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0aa0 - 0aaf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0, 0,// 0ab0 - 0abf
+     0,17,17,17,17,17, 0,17,17, 0, 0, 0, 0,17, 0, 0,// 0ac0 - 0acf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ad0 - 0adf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ae0 - 0aef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0af0 - 0aff
+
+     0,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0b00 - 0b0f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0b10 - 0b1f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0b20 - 0b2f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0,17,// 0b30 - 0b3f
+     0,17,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0,// 0b40 - 0b4f
+     0, 0, 0, 0, 0, 0,17, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0b50 - 0b5f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0b60 - 0b6f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0b70 - 0b7f
+     0, 0,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0b80 - 0b8f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0b90 - 0b9f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ba0 - 0baf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0bb0 - 0bbf
+    17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0,// 0bc0 - 0bcf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0bd0 - 0bdf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0be0 - 0bef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0bf0 - 0bff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c00 - 0c0f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c10 - 0c1f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c20 - 0c2f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17,17,// 0c30 - 0c3f
+    17, 0, 0, 0, 0, 0,17,17,17, 0,17,17,17,17, 0, 0,// 0c40 - 0c4f
+     0, 0, 0, 0, 0,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c50 - 0c5f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c60 - 0c6f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c70 - 0c7f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c80 - 0c8f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0c90 - 0c9f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ca0 - 0caf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17,// 0cb0 - 0cbf
+     0, 0, 0, 0, 0, 0,17, 0, 0, 0, 0, 0,17,17, 0, 0,// 0cc0 - 0ccf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0cd0 - 0cdf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ce0 - 0cef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0cf0 - 0cff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d00 - 0d0f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d10 - 0d1f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d20 - 0d2f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d30 - 0d3f
+     0,17,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0,// 0d40 - 0d4f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d50 - 0d5f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d60 - 0d6f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d70 - 0d7f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d80 - 0d8f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0d90 - 0d9f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0da0 - 0daf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0db0 - 0dbf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0, 0, 0, 0,// 0dc0 - 0dcf
+     0, 0,17,17,17, 0,17, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0dd0 - 0ddf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0de0 - 0def
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0df0 - 0dff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e00 - 0e0f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e10 - 0e1f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e20 - 0e2f
+     0,17, 0, 0,17,17,17,17,17,17,17, 0, 0, 0, 0, 4,// 0e30 - 0e3f
+     0, 0, 0, 0, 0, 0, 0,17,17,17,17,17,17,17,17, 0,// 0e40 - 0e4f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e50 - 0e5f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e60 - 0e6f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e70 - 0e7f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e80 - 0e8f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0e90 - 0e9f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ea0 - 0eaf
+     0,17, 0, 0,17,17,17,17,17,17, 0,17,17, 0, 0, 0,// 0eb0 - 0ebf
+     0, 0, 0, 0, 0, 0, 0, 0,17,17,17,17,17,17, 0, 0,// 0ec0 - 0ecf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ed0 - 0edf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ee0 - 0eef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ef0 - 0eff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0f00 - 0f0f
+     0, 0, 0, 0, 0, 0, 0, 0,17,17, 0, 0, 0, 0, 0, 0,// 0f10 - 0f1f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0f20 - 0f2f
+     0, 0, 0, 0, 0,17, 0,17, 0,17,10,10,10,10, 0, 0,// 0f30 - 0f3f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0f40 - 0f4f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0f50 - 0f5f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0f60 - 0f6f
+     0,17,17,17,17,17,17,17,17,17,17,17,17,17,17, 0,// 0f70 - 0f7f
+    17,17,17,17,17, 0,17,17, 0, 0, 0, 0, 0, 0, 0, 0,// 0f80 - 0f8f
+    17,17,17,17,17,17,17,17, 0,17,17,17,17,17,17,17,// 0f90 - 0f9f
+    17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,// 0fa0 - 0faf
+    17,17,17,17,17,17,17,17,17,17,17,17,17, 0, 0, 0,// 0fb0 - 0fbf
+     0, 0, 0, 0, 0, 0,17, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0fc0 - 0fcf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0fd0 - 0fdf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0fe0 - 0fef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 0ff0 - 0fff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1000 - 100f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1010 - 101f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,17,17,17,// 1020 - 102f
+    17, 0,17, 0, 0, 0,17,17, 0,17, 0, 0, 0, 0, 0, 0,// 1030 - 103f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1040 - 104f
+     0, 0, 0, 0, 0, 0, 0, 0,17,17, 0, 0, 0, 0, 0, 0,// 1050 - 105f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1060 - 106f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1070 - 107f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1080 - 108f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1090 - 109f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 10a0 - 10af
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 10b0 - 10bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 10c0 - 10cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 10d0 - 10df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 10e0 - 10ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 10f0 - 10ff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1600 - 160f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1610 - 161f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1620 - 162f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1630 - 163f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1640 - 164f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1650 - 165f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1660 - 166f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1670 - 167f
+     9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1680 - 168f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0, 0, 0,// 1690 - 169f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 16a0 - 16af
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 16b0 - 16bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 16c0 - 16cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 16d0 - 16df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 16e0 - 16ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 16f0 - 16ff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1700 - 170f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1710 - 171f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1720 - 172f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1730 - 173f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1740 - 174f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1750 - 175f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1760 - 176f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1770 - 177f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1780 - 178f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1790 - 179f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 17a0 - 17af
+     0, 0, 0, 0, 0, 0, 0,17,17,17,17,17,17,17, 0, 0,// 17b0 - 17bf
+     0, 0, 0, 0, 0, 0,17, 0, 0,17,17,17,17,17,17,17,// 17c0 - 17cf
+    17,17,17,17, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0,// 17d0 - 17df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 17e0 - 17ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 17f0 - 17ff
+
+    10,10,10,10,10,10,10,10,10,10,10,18,18,18,18, 0,// 1800 - 180f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1810 - 181f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1820 - 182f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1830 - 183f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1840 - 184f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1850 - 185f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1860 - 186f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1870 - 187f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1880 - 188f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1890 - 189f
+     0, 0, 0, 0, 0, 0, 0, 0, 0,17, 0, 0, 0, 0, 0, 0,// 18a0 - 18af
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18b0 - 18bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18c0 - 18cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18d0 - 18df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18e0 - 18ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 18f0 - 18ff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f00 - 1f0f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f10 - 1f1f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f20 - 1f2f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f30 - 1f3f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f40 - 1f4f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f50 - 1f5f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f60 - 1f6f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f70 - 1f7f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f80 - 1f8f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1f90 - 1f9f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 1fa0 - 1faf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0,10,// 1fb0 - 1fbf
+    10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10,10,// 1fc0 - 1fcf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10,10,// 1fd0 - 1fdf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10,10,// 1fe0 - 1fef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10, 0,// 1ff0 - 1fff
+
+     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,18,18,18, 0, 1,// 2000 - 200f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2010 - 201f
+    10,10,10,10,10,10,10,10, 9, 7,11,14,16,12,15, 9,// 2020 - 202f
+     4, 4, 4, 4, 4,10,10,10,10,10,10,10,10,10,10,10,// 2030 - 203f
+    10,10,10,10,10,10,10, 0,10,10,10,10,10,10, 0, 0,// 2040 - 204f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2050 - 205f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0,18,18,18,18,18,18,// 2060 - 206f
+     2, 0, 0, 0, 2, 2, 2, 2, 2, 2, 4, 4,10,10,10, 0,// 2070 - 207f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4,10,10,10, 0,// 2080 - 208f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2090 - 209f
+     4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,// 20a0 - 20af
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 20b0 - 20bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 20c0 - 20cf
+    17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,// 20d0 - 20df
+    17,17,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 20e0 - 20ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 20f0 - 20ff
+
+    10,10, 0,10,10,10,10, 0,10,10, 0, 0, 0, 0, 0, 0,// 2100 - 210f
+     0, 0, 0, 0,10, 0,10,10,10, 0, 0, 0, 0, 0,10,10,// 2110 - 211f
+    10,10,10,10, 0,10, 0,10, 0,10, 0, 0, 0, 0, 4, 0,// 2120 - 212f
+     0, 0,10, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0,// 2130 - 213f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2140 - 214f
+     0, 0, 0,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2150 - 215f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2160 - 216f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2170 - 217f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2180 - 218f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2190 - 219f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 21a0 - 21af
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 21b0 - 21bf
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 21c0 - 21cf
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 21d0 - 21df
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 21e0 - 21ef
+    10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 21f0 - 21ff
+
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2200 - 220f
+    10,10, 4, 4,10,10,10,10,10,10,10,10,10,10,10,10,// 2210 - 221f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2220 - 222f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2230 - 223f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2240 - 224f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2250 - 225f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2260 - 226f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2270 - 227f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2280 - 228f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2290 - 229f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 22a0 - 22af
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 22b0 - 22bf
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 22c0 - 22cf
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 22d0 - 22df
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 22e0 - 22ef
+    10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 22f0 - 22ff
+
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2300 - 230f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2310 - 231f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2320 - 232f
+    10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2330 - 233f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2340 - 234f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2350 - 235f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2360 - 236f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0,10,10,10,// 2370 - 237f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2380 - 238f
+    10,10,10,10,10, 0,10,10,10,10,10, 0, 0, 0, 0, 0,// 2390 - 239f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23a0 - 23af
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23b0 - 23bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23c0 - 23cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23d0 - 23df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23e0 - 23ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 23f0 - 23ff
+
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2400 - 240f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2410 - 241f
+    10,10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2420 - 242f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2430 - 243f
+    10,10,10,10,10,10,10,10,10,10,10, 0, 0, 0, 0, 0,// 2440 - 244f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2450 - 245f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 2460 - 246f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 2470 - 247f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,// 2480 - 248f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0,// 2490 - 249f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 24a0 - 24af
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 24b0 - 24bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 24c0 - 24cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 24d0 - 24df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0,// 24e0 - 24ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 24f0 - 24ff
+
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2500 - 250f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2510 - 251f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2520 - 252f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2530 - 253f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2540 - 254f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2550 - 255f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2560 - 256f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2570 - 257f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2580 - 258f
+    10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2590 - 259f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 25a0 - 25af
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 25b0 - 25bf
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 25c0 - 25cf
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 25d0 - 25df
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 25e0 - 25ef
+    10,10,10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0,// 25f0 - 25ff
+
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2600 - 260f
+    10,10,10,10, 0, 0, 0, 0, 0,10,10,10,10,10,10,10,// 2610 - 261f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2620 - 262f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2630 - 263f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2640 - 264f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2650 - 265f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2660 - 266f
+    10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2670 - 267f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2680 - 268f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2690 - 269f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26a0 - 26af
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26b0 - 26bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26c0 - 26cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26d0 - 26df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26e0 - 26ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 26f0 - 26ff
+
+     0,10,10,10,10, 0,10,10,10,10, 0, 0,10,10,10,10,// 2700 - 270f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2710 - 271f
+    10,10,10,10,10,10,10,10, 0,10,10,10,10,10,10,10,// 2720 - 272f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2730 - 273f
+    10,10,10,10,10,10,10,10,10,10,10,10, 0,10, 0,10,// 2740 - 274f
+    10,10,10, 0, 0, 0,10, 0,10,10,10,10,10,10,10, 0,// 2750 - 275f
+     0,10,10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0,// 2760 - 276f
+     0, 0, 0, 0, 0, 0,10,10,10,10,10,10,10,10,10,10,// 2770 - 277f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2780 - 278f
+    10,10,10,10,10, 0, 0, 0,10,10,10,10,10,10,10,10,// 2790 - 279f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 27a0 - 27af
+     0,10,10,10,10,10,10,10,10,10,10,10,10,10,10, 0,// 27b0 - 27bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 27c0 - 27cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 27d0 - 27df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 27e0 - 27ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 27f0 - 27ff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e00 - 2e0f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e10 - 2e1f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e20 - 2e2f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e30 - 2e3f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e40 - 2e4f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e50 - 2e5f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e60 - 2e6f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2e70 - 2e7f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2e80 - 2e8f
+    10,10,10,10,10,10,10,10,10,10, 0,10,10,10,10,10,// 2e90 - 2e9f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2ea0 - 2eaf
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2eb0 - 2ebf
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2ec0 - 2ecf
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2ed0 - 2edf
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2ee0 - 2eef
+    10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2ef0 - 2eff
+
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f00 - 2f0f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f10 - 2f1f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f20 - 2f2f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f30 - 2f3f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f40 - 2f4f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f50 - 2f5f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f60 - 2f6f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f70 - 2f7f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f80 - 2f8f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2f90 - 2f9f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2fa0 - 2faf
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2fb0 - 2fbf
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 2fc0 - 2fcf
+    10,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2fd0 - 2fdf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 2fe0 - 2fef
+    10,10,10,10,10,10,10,10,10,10,10,10, 0, 0, 0, 0,// 2ff0 - 2fff
+
+     9,10,10,10,10, 0, 0, 0,10,10,10,10,10,10,10,10,// 3000 - 300f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// 3010 - 301f
+    10, 0, 0, 0, 0, 0, 0, 0, 0, 0,17,17,17,17,17,17,// 3020 - 302f
+    10, 0, 0, 0, 0, 0,10,10, 0, 0, 0, 0, 0, 0,10,10,// 3030 - 303f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 3040 - 304f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 3050 - 305f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 3060 - 306f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 3070 - 307f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 3080 - 308f
+     0, 0, 0, 0, 0, 0, 0, 0, 0,17,17,10,10, 0, 0, 0,// 3090 - 309f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 30a0 - 30af
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 30b0 - 30bf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 30c0 - 30cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 30d0 - 30df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// 30e0 - 30ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0,// 30f0 - 30ff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a400 - a40f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a410 - a41f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a420 - a42f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a430 - a43f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a440 - a44f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a450 - a45f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a460 - a46f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a470 - a47f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a480 - a48f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// a490 - a49f
+    10,10, 0, 0,10,10,10,10,10,10,10,10,10,10,10,10,// a4a0 - a4af
+    10,10,10,10, 0,10,10,10,10,10,10,10,10,10,10,10,// a4b0 - a4bf
+    10, 0,10,10,10, 0,10, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a4c0 - a4cf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a4d0 - a4df
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a4e0 - a4ef
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// a4f0 - a4ff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fb00 - fb0f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,17, 1,// fb10 - fb1f
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1,// fb20 - fb2f
+     1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0,// fb30 - fb3f
+     1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,// fb40 - fb4f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fb50 - fb5f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fb60 - fb6f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fb70 - fb7f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fb80 - fb8f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fb90 - fb9f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fba0 - fbaf
+    13,13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fbb0 - fbbf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fbc0 - fbcf
+     0, 0, 0,13,13,13,13,13,13,13,13,13,13,13,13,13,// fbd0 - fbdf
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fbe0 - fbef
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fbf0 - fbff
+
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fd00 - fd0f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fd10 - fd1f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fd20 - fd2f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,10,10,// fd30 - fd3f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fd40 - fd4f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fd50 - fd5f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fd60 - fd6f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fd70 - fd7f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fd80 - fd8f
+     0, 0,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fd90 - fd9f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fda0 - fdaf
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fdb0 - fdbf
+    13,13,13,13,13,13,13,13, 0, 0, 0, 0, 0, 0, 0, 0,// fdc0 - fdcf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fdd0 - fddf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fde0 - fdef
+    13,13,13,13,13,13,13,13,13,13,13,13, 0, 0, 0, 0,// fdf0 - fdff
+
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fe00 - fe0f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fe10 - fe1f
+    17,17,17,17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// fe20 - fe2f
+    10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,// fe30 - fe3f
+    10,10,10,10,10, 0, 0, 0, 0,10,10,10,10,10,10,10,// fe40 - fe4f
+     6,10, 6, 0,10, 6,10,10,10,10,10,10,10,10,10, 4,// fe50 - fe5f
+    10,10, 4, 4,10,10,10, 0,10, 4, 4,10, 0, 0, 0, 0,// fe60 - fe6f
+    13,13,13, 0,13, 0,13,13,13,13,13,13,13,13,13,13,// fe70 - fe7f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fe80 - fe8f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fe90 - fe9f
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fea0 - feaf
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// feb0 - febf
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fec0 - fecf
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fed0 - fedf
+    13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,// fee0 - feef
+    13,13,13,13,13,13,13,13,13,13,13,13,13, 0, 0,18,// fef0 - feff
+
+     0,10,10, 4, 4, 4,10,10,10,10,10, 4, 6, 4, 6, 3,// ff00 - ff0f
+     2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6,10,10,10,10,10,// ff10 - ff1f
+    10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ff20 - ff2f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10,10,10,10,// ff30 - ff3f
+    10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ff40 - ff4f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10,10,10,10, 0,// ff50 - ff5f
+     0,10,10,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ff60 - ff6f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ff70 - ff7f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ff80 - ff8f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ff90 - ff9f
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ffa0 - ffaf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ffb0 - ffbf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ffc0 - ffcf
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,// ffd0 - ffdf
+     4, 4,10,10,10, 4, 4, 0,10,10,10,10,10,10,10, 0,// ffe0 - ffef
+     0, 0, 0, 0, 0, 0, 0, 0, 0,18,18,18,10,10, 0, 0,// fff0 - ffff
+
+};
+
+
+#define UnicodeScriptTypeFrom    0
+#define UnicodeScriptTypeTo      1
+
+static sal_Unicode UnicodeScriptType[][2] = {
+    {0x0000, 0x007f}, //  0. Basic Latin
+    {0x0080, 0x00ff}, //  1. Latin-1 Supplement
+    {0x0100, 0x017f}, //  2. Latin Extended-A
+    {0x0180, 0x024f}, //  3. Latin Extended-B
+    {0x0250, 0x02af}, //  4. IPA Extensions
+    {0x02b0, 0x02ff}, //  5. Spacing Modifier Letters
+    {0x0300, 0x036f}, //  6. Combining Diacritical Marks
+    {0x0370, 0x03ff}, //  7. Greek
+    {0x0400, 0x04ff}, //  8. Cyrillic
+    {0x0530, 0x058f}, //  9. Armenian
+    {0x0590, 0x05ff}, // 10. Hebrew
+    {0x0600, 0x06ff}, // 11. Arabic
+    {0x0700, 0x074f}, // 12. Syriac
+    {0x0780, 0x07bf}, // 13. Thaana
+    {0x0900, 0x097f}, // 14. Devanagari
+    {0x0980, 0x09ff}, // 15. Bengali
+    {0x0a00, 0x0a7f}, // 16. Gurmukhi
+    {0x0a80, 0x0aff}, // 17. Gujarati
+    {0x0b00, 0x0b7f}, // 18. Oriya
+    {0x0b80, 0x0bff}, // 19. Tamil
+    {0x0c00, 0x0c7f}, // 20. Telugu
+    {0x0c80, 0x0cff}, // 21. Kannada
+    {0x0d00, 0x0d7f}, // 22. Malayalam
+    {0x0d80, 0x0dff}, // 23. Sinhala
+    {0x0e00, 0x0e7f}, // 24. Thai
+    {0x0e80, 0x0eff}, // 25. Lao
+    {0x0f00, 0x0fff}, // 26. Tibetan
+    {0x1000, 0x109f}, // 27. Myanmar
+    {0x10a0, 0x10ff}, // 28. Georgian
+    {0x1100, 0x11ff}, // 29. Hangul Jamo
+    {0x1200, 0x137f}, // 30. Ethiopic
+    {0x13a0, 0x13ff}, // 31. Cherokee
+    {0x1400, 0x167f}, // 32. Unified Canadian Aboriginal Syllabics
+    {0x1680, 0x169f}, // 33. Ogham
+    {0x16a0, 0x16ff}, // 34. Runic
+    {0x1780, 0x17ff}, // 35. Khmer
+    {0x1800, 0x18af}, // 36. Mongolian
+    {0x1e00, 0x1eff}, // 37. Latin Extended Additional
+    {0x1f00, 0x1fff}, // 38. Greek Extended
+    {0x2000, 0x206f}, // 39. General Punctuation
+    {0x2070, 0x209f}, // 40. Superscripts and Subscripts
+    {0x20a0, 0x20cf}, // 41. Currency Symbols
+    {0x20d0, 0x20ff}, // 42. Combining Marks for Symbols
+    {0x2100, 0x214f}, // 43. Letterlike Symbols
+    {0x2150, 0x218f}, // 44. Number Forms
+    {0x2190, 0x21ff}, // 45. Arrows
+    {0x2200, 0x22ff}, // 46. Mathematical Operators
+    {0x2300, 0x23ff}, // 47. Miscellaneous Technical
+    {0x2400, 0x243f}, // 48. Control Pictures
+    {0x2440, 0x245f}, // 49. Optical Character Recognition
+    {0x2460, 0x24ff}, // 50. Enclosed Alphanumerics
+    {0x2500, 0x257f}, // 51. Box Drawing
+    {0x2580, 0x259f}, // 52. Block Elements
+    {0x25a0, 0x25ff}, // 53. Geometric Shapes
+    {0x2600, 0x26ff}, // 54. Miscellaneous Symbols
+    {0x2700, 0x27bf}, // 55. Dingbats
+    {0x2800, 0x28ff}, // 56. Braille Patterns
+    {0x2e80, 0x2eff}, // 57. CJK Radicals Supplement
+    {0x2f00, 0x2fdf}, // 58. Kangxi Radicals
+    {0x2ff0, 0x2fff}, // 59. Ideographic Description Characters
+    {0x3000, 0x303f}, // 60. CJK Symbols and Punctuation
+    {0x3040, 0x309f}, // 61. Hiragana
+    {0x30a0, 0x30ff}, // 62. Katakana
+    {0x3100, 0x312f}, // 63. Bopomofo
+    {0x3130, 0x318f}, // 64. Hangul Compatibility Jamo
+    {0x3190, 0x319f}, // 65. Kanbun
+    {0x31a0, 0x31bf}, // 66. Bopomofo Extended
+    {0x3200, 0x32ff}, // 67. Enclosed CJK Letters and Months
+    {0x3300, 0x33ff}, // 68. CJK Compatibility
+    {0x3400, 0x4db5}, // 69. CJK Unified Ideographs Extension A
+    {0x4e00, 0x9fff}, // 70. CJK Unified Ideographs
+    {0xa000, 0xa48f}, // 71. Yi Syllables
+    {0xa490, 0xa4cf}, // 72. Yi Radicals
+    {0xac00, 0xd7a3}, // 73. Hangul Syllables
+    {0xd800, 0xdb7f}, // 74. High Surrogates
+    {0xdb80, 0xdbff}, // 75. High Private Use Surrogates
+    {0xdc00, 0xdfff}, // 76. Low Surrogates
+    {0xe000, 0xf8ff}, // 77. Private Use
+    {0xf900, 0xfaff}, // 78. CJK Compatibility Ideographs
+    {0xfb00, 0xfb4f}, // 79. Alphabetic Presentation Forms
+    {0xfb50, 0xfdff}, // 80. Arabic Presentation Forms-A
+    {0xfe20, 0xfe2f}, // 81. Combining Half Marks
+    {0xfe30, 0xfe4f}, // 82. CJK Compatibility Forms
+    {0xfe50, 0xfe6f}, // 83. Small Form Variants
+    {0xfe70, 0xfefe}, // 84. Arabic Presentation Forms-B
+    {0xfeff, 0xfeff}, // 85. kNoScript
+    {0xff00, 0xffef}, // 85. Halfwidth and Fullwidth Forms
+};
+
+#endif
+
diff --git a/i18nutil/source/utility/widthfolding.cxx b/i18nutil/source/utility/widthfolding.cxx
new file mode 100644
index 000000000000..35119e0ee58d
--- /dev/null
+++ b/i18nutil/source/utility/widthfolding.cxx
@@ -0,0 +1,236 @@
+/*************************************************************************
+ *
+ *  $RCSfile: widthfolding.cxx,v $
+ *
+ *  $Revision: 1.2 $
+ *
+ *  last change: $Author: vg $ $Date: 2003-04-24 12:26:04 $
+ *
+ *  The Contents of this file are made available subject to the terms of
+ *  either of the following licenses
+ *
+ *         - GNU Lesser General Public License Version 2.1
+ *         - Sun Industry Standards Source License Version 1.1
+ *
+ *  Sun Microsystems Inc., October, 2000
+ *
+ *  GNU Lesser General Public License Version 2.1
+ *  =============================================
+ *  Copyright 2000 by Sun Microsystems, Inc.
+ *  901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License version 2.1, as published by the Free Software Foundation.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ *  MA  02111-1307  USA
+ *
+ *
+ *  Sun Industry Standards Source License Version 1.1
+ *  =================================================
+ *  The contents of this file are subject to the Sun Industry Standards
+ *  Source License Version 1.1 (the "License"); You may not use this file
+ *  except in compliance with the License. You may obtain a copy of the
+ *  License at http://www.openoffice.org/license.html.
+ *
+ *  Software provided under this License is provided on an "AS IS" basis,
+ *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ *  See the License for the specific provisions governing your rights and
+ *  obligations concerning the Software.
+ *
+ *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ *  Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ *  All Rights Reserved.
+ *
+ *  Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+
+// prevent internal compiler error with MSVC6SP3
+#include <stl/utility>
+#include <i18nutil/widthfolding.hxx>
+#include <i18nutil/x_rtl_ustring.h>
+#include "widthfolding_data.h"
+
+using namespace com::sun::star::uno;
+using namespace rtl;
+
+namespace com { namespace sun { namespace star { namespace i18n {
+
+sal_Unicode widthfolding::decompose_ja_voiced_sound_marksChar2Char (sal_Unicode inChar)
+{
+    if (0x30a0 <= inChar && inChar <= 0x30ff) {
+      sal_Int16 i = inChar - 0x3040;
+      if (decomposition_table[i].decomposited_character_1)
+          return 0xFFFF;
+    }
+    return inChar;
+}
+
+/**
+ * Decompose Japanese specific voiced and semi-voiced sound marks.
+ */
+OUString widthfolding::decompose_ja_voiced_sound_marks (const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, Sequence< sal_Int32 >& offset, sal_Bool useOffset )
+{
+  // Create a string buffer which can hold nCount * 2 + 1 characters.
+  // Its size may become double of nCount.
+  rtl_uString * newStr;
+  x_rtl_uString_new_WithLength( &newStr, nCount * 2 ); // defined in x_rtl_ustring.h  The reference count is 0 now.
+
+  sal_Int32 *p, position;
+  if (useOffset) {
+      // Allocate double of nCount length to offset argument.
+      offset.realloc( nCount * 2 );
+      p = offset.getArray();
+      position = startPos;
+  }
+
+  // Prepare pointers of unicode character arrays.
+  const sal_Unicode* src = inStr.getStr() + startPos;
+  sal_Unicode* dst = newStr->buffer;
+
+  // Decomposition: GA --> KA + voice-mark
+  while (nCount -- > 0) {
+    sal_Unicode c = *src++;
+    // see http://charts.unicode.org/Web/U3040.html Hiragana (U+3040..U+309F)
+    // see http://charts.unicode.org/Web/U30A0.html Katakana (U+30A0..U+30FF)
+    // Hiragana is not applied to decomposition.
+    // Only Katakana is applied to decomposition
+    if (0x30a0 <= c && c <= 0x30ff) {
+      int i = int(c - 0x3040);
+      sal_Unicode first = decomposition_table[i].decomposited_character_1;
+      if (first != 0x0000) {
+    *dst ++ = first;
+    *dst ++ = decomposition_table[i].decomposited_character_2; // second
+        if (useOffset) {
+            *p ++ = position;
+            *p ++ = position ++;
+        }
+    continue;
+      }
+    }
+    *dst ++ = c;
+    if (useOffset)
+        *p ++ = position ++;
+  }
+  *dst = (sal_Unicode) 0;
+
+  newStr->length = sal_Int32(dst - newStr->buffer);
+  if (useOffset)
+      offset.realloc(newStr->length);
+  return OUString( newStr ); // defined in rtl/usrting. The reference count is increased from 0 to 1.
+}
+
+oneToOneMapping& widthfolding::getfull2halfTable(void)
+{
+    static oneToOneMapping table(full2half, sizeof(full2half));
+    table.makeIndex();
+    return table;
+}
+
+/**
+ * Compose Japanese specific voiced and semi-voiced sound marks.
+ */
+OUString widthfolding::compose_ja_voiced_sound_marks (const OUString& inStr, sal_Int32 startPos, sal_Int32 nCount, Sequence< sal_Int32 >& offset, sal_Bool useOffset )
+{
+  // Create a string buffer which can hold nCount + 1 characters.
+  // Its size may become equal to nCount or smaller.
+  // The reference count is 0 now.
+  rtl_uString * newStr = x_rtl_uString_new_WithLength( nCount ); // defined in x_rtl_ustring.h
+
+  // Prepare pointers of unicode character arrays.
+  const sal_Unicode* src = inStr.getStr() + startPos;
+  sal_Unicode* dst = newStr->buffer;
+
+  // This conversion algorithm requires at least one character.
+ if (nCount > 0) {
+
+  // .. .. KA         VOICE .. ..
+  //       ^          ^
+  //       previousChar   currentChar
+  //       ^
+  //       position
+  //
+  // will be converted to
+  // .. .. GA       .. ..
+
+  sal_Int32 *p, position;
+  if (useOffset) {
+      // Allocate nCount length to offset argument.
+      offset.realloc( nCount );
+      p = offset.getArray();
+      position = startPos;
+  }
+
+  //
+  sal_Unicode previousChar = *src ++;
+  sal_Unicode currentChar;
+
+  // Composition: KA + voice-mark --> GA
+  while (-- nCount > 0) {
+    currentChar = *src ++;
+    // see http://charts.unicode.org/Web/U3040.html Hiragana (U+3040..U+309F)
+    // see http://charts.unicode.org/Web/U30A0.html Katakana (U+30A0..U+30FF)
+    // 0x3099 COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    // 0x309a COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+    int j = currentChar - 0x3099; // 0x3099 or 0x309a ?
+    if (0 <= j && j <= 1) {  // 0 addresses a code point regarding 0x3099, 1 is 0x309a
+      int i = int(previousChar - 0x3040); // i acts as an index of array
+      if (0 <= i && i <= (0x30ff - 0x3040) && composition_table[i][j]) {
+        if (useOffset) {
+            position ++;
+            *p ++ = position ++;
+        }
+    *dst ++ =  composition_table[i][j];
+    previousChar = *src ++;
+    nCount --;
+    continue;
+      }
+    }
+    if (useOffset)
+        *p ++ = position ++;
+    *dst ++ = previousChar;
+    previousChar = currentChar;
+  }
+
+  if (nCount == 0) {
+    if (useOffset)
+        *p = position;
+    *dst ++ = previousChar;
+  }
+
+  *dst = (sal_Unicode) 0;
+
+  newStr->length = sal_Int32(dst - newStr->buffer);
+ }
+  if (useOffset)
+      offset.realloc(newStr->length);
+  return OUString( newStr ); // defined in rtl/usrting. The reference count is increased from 0 to 1.
+}
+
+oneToOneMapping& widthfolding::gethalf2fullTable(void)
+{
+    static oneToOneMapping table(half2full, sizeof(half2full));
+    table.makeIndex();
+    return table;
+}
+
+sal_Unicode widthfolding::getCompositionChar(sal_Unicode c1, sal_Unicode c2)
+{
+    return composition_table[c1 - 0x3040][c2 - 0x3099];
+}
+
+} } } }
diff --git a/i18nutil/source/utility/widthfolding_data.h b/i18nutil/source/utility/widthfolding_data.h
new file mode 100644
index 000000000000..bfc8f498c484
--- /dev/null
+++ b/i18nutil/source/utility/widthfolding_data.h
@@ -0,0 +1,955 @@
+/*************************************************************************
+ *
+ *  $RCSfile: widthfolding_data.h,v $
+ *
+ *  $Revision: 1.2 $
+ *
+ *  last change: $Author: vg $ $Date: 2003-04-24 12:26:04 $
+ *
+ *  The Contents of this file are made available subject to the terms of
+ *  either of the following licenses
+ *
+ *         - GNU Lesser General Public License Version 2.1
+ *         - Sun Industry Standards Source License Version 1.1
+ *
+ *  Sun Microsystems Inc., October, 2000
+ *
+ *  GNU Lesser General Public License Version 2.1
+ *  =============================================
+ *  Copyright 2000 by Sun Microsystems, Inc.
+ *  901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ *  This library is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU Lesser General Public
+ *  License version 2.1, as published by the Free Software Foundation.
+ *
+ *  This library is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *  Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with this library; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ *  MA  02111-1307  USA
+ *
+ *
+ *  Sun Industry Standards Source License Version 1.1
+ *  =================================================
+ *  The contents of this file are subject to the Sun Industry Standards
+ *  Source License Version 1.1 (the "License"); You may not use this file
+ *  except in compliance with the License. You may obtain a copy of the
+ *  License at http://www.openoffice.org/license.html.
+ *
+ *  Software provided under this License is provided on an "AS IS" basis,
+ *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ *  See the License for the specific provisions governing your rights and
+ *  obligations concerning the Software.
+ *
+ *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ *  Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ *  All Rights Reserved.
+ *
+ *  Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+#ifndef INCLUDED_I18NUTIL_CASEFOLDING_DATA_H
+#define INCLUDED_I18NUTIL_CASEFOLDING_DATA_H
+
+#include <i18nutil/oneToOneMapping.hxx>
+
+namespace com { namespace sun { namespace star { namespace i18n {
+
+/*
+  Unicode Normalization Forms
+  http://www.unicode.org/unicode/reports/tr15/index.html
+  http://www.w3.org/International/charlint/
+*/
+
+typedef struct {
+  sal_Unicode decomposited_character_1;
+  sal_Unicode decomposited_character_2;
+} decomposition_table_entry_t;
+
+const decomposition_table_entry_t decomposition_table[] = {
+    { 0x0000, 0x0000 }, // 0x3040
+    { 0x0000, 0x0000 }, // 0x3041 HIRAGANA LETTER SMALL A
+    { 0x0000, 0x0000 }, // 0x3042 HIRAGANA LETTER A
+    { 0x0000, 0x0000 }, // 0x3043 HIRAGANA LETTER SMALL I
+    { 0x0000, 0x0000 }, // 0x3044 HIRAGANA LETTER I
+    { 0x0000, 0x0000 }, // 0x3045 HIRAGANA LETTER SMALL U
+    { 0x0000, 0x0000 }, // 0x3046 HIRAGANA LETTER U
+    { 0x0000, 0x0000 }, // 0x3047 HIRAGANA LETTER SMALL E
+    { 0x0000, 0x0000 }, // 0x3048 HIRAGANA LETTER E
+    { 0x0000, 0x0000 }, // 0x3049 HIRAGANA LETTER SMALL O
+    { 0x0000, 0x0000 }, // 0x304a HIRAGANA LETTER O
+    { 0x0000, 0x0000 }, // 0x304b HIRAGANA LETTER KA
+    { 0x304b, 0x3099 }, // 0x304c HIRAGANA LETTER GA --> HIRAGANA LETTER KA + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x304d HIRAGANA LETTER KI
+    { 0x304d, 0x3099 }, // 0x304e HIRAGANA LETTER GI --> HIRAGANA LETTER KI + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x304f HIRAGANA LETTER KU
+    { 0x304f, 0x3099 }, // 0x3050 HIRAGANA LETTER GU --> HIRAGANA LETTER KU + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x3051 HIRAGANA LETTER KE
+    { 0x3051, 0x3099 }, // 0x3052 HIRAGANA LETTER GE --> HIRAGANA LETTER KE + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x3053 HIRAGANA LETTER KO
+    { 0x3053, 0x3099 }, // 0x3054 HIRAGANA LETTER GO --> HIRAGANA LETTER KO + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x3055 HIRAGANA LETTER SA
+    { 0x3055, 0x3099 }, // 0x3056 HIRAGANA LETTER ZA --> HIRAGANA LETTER SA + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x3057 HIRAGANA LETTER SI
+    { 0x3057, 0x3099 }, // 0x3058 HIRAGANA LETTER ZI --> HIRAGANA LETTER SI + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x3059 HIRAGANA LETTER SU
+    { 0x3059, 0x3099 }, // 0x305a HIRAGANA LETTER ZU --> HIRAGANA LETTER SU + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x305b HIRAGANA LETTER SE
+    { 0x305b, 0x3099 }, // 0x305c HIRAGANA LETTER ZE --> HIRAGANA LETTER SE + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x305d HIRAGANA LETTER SO
+    { 0x305d, 0x3099 }, // 0x305e HIRAGANA LETTER ZO --> HIRAGANA LETTER SO + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x305f HIRAGANA LETTER TA
+    { 0x305f, 0x3099 }, // 0x3060 HIRAGANA LETTER DA --> HIRAGANA LETTER TA + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x3061 HIRAGANA LETTER TI
+    { 0x3061, 0x3099 }, // 0x3062 HIRAGANA LETTER DI --> HIRAGANA LETTER TI + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x3063 HIRAGANA LETTER SMALL TU
+    { 0x0000, 0x0000 }, // 0x3064 HIRAGANA LETTER TU
+    { 0x3064, 0x3099 }, // 0x3065 HIRAGANA LETTER DU --> HIRAGANA LETTER TU + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x3066 HIRAGANA LETTER TE
+    { 0x3066, 0x3099 }, // 0x3067 HIRAGANA LETTER DE --> HIRAGANA LETTER TE + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x3068 HIRAGANA LETTER TO
+    { 0x3068, 0x3099 }, // 0x3069 HIRAGANA LETTER DO --> HIRAGANA LETTER TO + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x306a HIRAGANA LETTER NA
+    { 0x0000, 0x0000 }, // 0x306b HIRAGANA LETTER NI
+    { 0x0000, 0x0000 }, // 0x306c HIRAGANA LETTER NU
+    { 0x0000, 0x0000 }, // 0x306d HIRAGANA LETTER NE
+    { 0x0000, 0x0000 }, // 0x306e HIRAGANA LETTER NO
+    { 0x0000, 0x0000 }, // 0x306f HIRAGANA LETTER HA
+    { 0x306f, 0x3099 }, // 0x3070 HIRAGANA LETTER BA --> HIRAGANA LETTER HA + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x306f, 0x309a }, // 0x3071 HIRAGANA LETTER PA --> HIRAGANA LETTER HA + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x3072 HIRAGANA LETTER HI
+    { 0x3072, 0x3099 }, // 0x3073 HIRAGANA LETTER BI --> HIRAGANA LETTER HI + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x3072, 0x309a }, // 0x3074 HIRAGANA LETTER PI --> HIRAGANA LETTER HI + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x3075 HIRAGANA LETTER HU
+    { 0x3075, 0x3099 }, // 0x3076 HIRAGANA LETTER BU --> HIRAGANA LETTER HU + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x3075, 0x309a }, // 0x3077 HIRAGANA LETTER PU --> HIRAGANA LETTER HU + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x3078 HIRAGANA LETTER HE
+    { 0x3078, 0x3099 }, // 0x3079 HIRAGANA LETTER BE --> HIRAGANA LETTER HE + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x3078, 0x309a }, // 0x307a HIRAGANA LETTER PE --> HIRAGANA LETTER HE + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x307b HIRAGANA LETTER HO
+    { 0x307b, 0x3099 }, // 0x307c HIRAGANA LETTER BO --> HIRAGANA LETTER HO + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x307b, 0x309a }, // 0x307d HIRAGANA LETTER PO --> HIRAGANA LETTER HO + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x307e HIRAGANA LETTER MA
+    { 0x0000, 0x0000 }, // 0x307f HIRAGANA LETTER MI
+    { 0x0000, 0x0000 }, // 0x3080 HIRAGANA LETTER MU
+    { 0x0000, 0x0000 }, // 0x3081 HIRAGANA LETTER ME
+    { 0x0000, 0x0000 }, // 0x3082 HIRAGANA LETTER MO
+    { 0x0000, 0x0000 }, // 0x3083 HIRAGANA LETTER SMALL YA
+    { 0x0000, 0x0000 }, // 0x3084 HIRAGANA LETTER YA
+    { 0x0000, 0x0000 }, // 0x3085 HIRAGANA LETTER SMALL YU
+    { 0x0000, 0x0000 }, // 0x3086 HIRAGANA LETTER YU
+    { 0x0000, 0x0000 }, // 0x3087 HIRAGANA LETTER SMALL YO
+    { 0x0000, 0x0000 }, // 0x3088 HIRAGANA LETTER YO
+    { 0x0000, 0x0000 }, // 0x3089 HIRAGANA LETTER RA
+    { 0x0000, 0x0000 }, // 0x308a HIRAGANA LETTER RI
+    { 0x0000, 0x0000 }, // 0x308b HIRAGANA LETTER RU
+    { 0x0000, 0x0000 }, // 0x308c HIRAGANA LETTER RE
+    { 0x0000, 0x0000 }, // 0x308d HIRAGANA LETTER RO
+    { 0x0000, 0x0000 }, // 0x308e HIRAGANA LETTER SMALL WA
+    { 0x0000, 0x0000 }, // 0x308f HIRAGANA LETTER WA
+    { 0x0000, 0x0000 }, // 0x3090 HIRAGANA LETTER WI
+    { 0x0000, 0x0000 }, // 0x3091 HIRAGANA LETTER WE
+    { 0x0000, 0x0000 }, // 0x3092 HIRAGANA LETTER WO
+    { 0x0000, 0x0000 }, // 0x3093 HIRAGANA LETTER N
+    { 0x3046, 0x3099 }, // 0x3094 HIRAGANA LETTER VU --> HIRAGANA LETTER U + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x3095
+    { 0x0000, 0x0000 }, // 0x3096
+    { 0x0000, 0x0000 }, // 0x3097
+    { 0x0000, 0x0000 }, // 0x3098
+    { 0x0000, 0x0000 }, // 0x3099 COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x309a COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x309b KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x309c KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x309d HIRAGANA ITERATION MARK
+    { 0x0000, 0x0000 }, // 0x309e HIRAGANA VOICED ITERATION MARK
+    { 0x0000, 0x0000 }, // 0x309f
+    { 0x0000, 0x0000 }, // 0x30a0
+    { 0x0000, 0x0000 }, // 0x30a1 KATAKANA LETTER SMALL A
+    { 0x0000, 0x0000 }, // 0x30a2 KATAKANA LETTER A
+    { 0x0000, 0x0000 }, // 0x30a3 KATAKANA LETTER SMALL I
+    { 0x0000, 0x0000 }, // 0x30a4 KATAKANA LETTER I
+    { 0x0000, 0x0000 }, // 0x30a5 KATAKANA LETTER SMALL U
+    { 0x0000, 0x0000 }, // 0x30a6 KATAKANA LETTER U
+    { 0x0000, 0x0000 }, // 0x30a7 KATAKANA LETTER SMALL E
+    { 0x0000, 0x0000 }, // 0x30a8 KATAKANA LETTER E
+    { 0x0000, 0x0000 }, // 0x30a9 KATAKANA LETTER SMALL O
+    { 0x0000, 0x0000 }, // 0x30aa KATAKANA LETTER O
+    { 0x0000, 0x0000 }, // 0x30ab KATAKANA LETTER KA
+    { 0x30ab, 0x3099 }, // 0x30ac KATAKANA LETTER GA --> KATAKANA LETTER KA + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30ad KATAKANA LETTER KI
+    { 0x30ad, 0x3099 }, // 0x30ae KATAKANA LETTER GI --> KATAKANA LETTER KI + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30af KATAKANA LETTER KU
+    { 0x30af, 0x3099 }, // 0x30b0 KATAKANA LETTER GU --> KATAKANA LETTER KU + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30b1 KATAKANA LETTER KE
+    { 0x30b1, 0x3099 }, // 0x30b2 KATAKANA LETTER GE --> KATAKANA LETTER KE + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30b3 KATAKANA LETTER KO
+    { 0x30b3, 0x3099 }, // 0x30b4 KATAKANA LETTER GO --> KATAKANA LETTER KO + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30b5 KATAKANA LETTER SA
+    { 0x30b5, 0x3099 }, // 0x30b6 KATAKANA LETTER ZA --> KATAKANA LETTER SA + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30b7 KATAKANA LETTER SI
+    { 0x30b7, 0x3099 }, // 0x30b8 KATAKANA LETTER ZI --> KATAKANA LETTER SI + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30b9 KATAKANA LETTER SU
+    { 0x30b9, 0x3099 }, // 0x30ba KATAKANA LETTER ZU --> KATAKANA LETTER SU + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30bb KATAKANA LETTER SE
+    { 0x30bb, 0x3099 }, // 0x30bc KATAKANA LETTER ZE --> KATAKANA LETTER SE + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30bd KATAKANA LETTER SO
+    { 0x30bd, 0x3099 }, // 0x30be KATAKANA LETTER ZO --> KATAKANA LETTER SO + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30bf KATAKANA LETTER TA
+    { 0x30bf, 0x3099 }, // 0x30c0 KATAKANA LETTER DA --> KATAKANA LETTER TA + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30c1 KATAKANA LETTER TI
+    { 0x30c1, 0x3099 }, // 0x30c2 KATAKANA LETTER DI --> KATAKANA LETTER TI + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30c3 KATAKANA LETTER SMALL TU
+    { 0x0000, 0x0000 }, // 0x30c4 KATAKANA LETTER TU
+    { 0x30c4, 0x3099 }, // 0x30c5 KATAKANA LETTER DU --> KATAKANA LETTER TU + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30c6 KATAKANA LETTER TE
+    { 0x30c6, 0x3099 }, // 0x30c7 KATAKANA LETTER DE --> KATAKANA LETTER TE + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30c8 KATAKANA LETTER TO
+    { 0x30c8, 0x3099 }, // 0x30c9 KATAKANA LETTER DO --> KATAKANA LETTER TO + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30ca KATAKANA LETTER NA
+    { 0x0000, 0x0000 }, // 0x30cb KATAKANA LETTER NI
+    { 0x0000, 0x0000 }, // 0x30cc KATAKANA LETTER NU
+    { 0x0000, 0x0000 }, // 0x30cd KATAKANA LETTER NE
+    { 0x0000, 0x0000 }, // 0x30ce KATAKANA LETTER NO
+    { 0x0000, 0x0000 }, // 0x30cf KATAKANA LETTER HA
+    { 0x30cf, 0x3099 }, // 0x30d0 KATAKANA LETTER BA --> KATAKANA LETTER HA + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x30cf, 0x309a }, // 0x30d1 KATAKANA LETTER PA --> KATAKANA LETTER HA + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30d2 KATAKANA LETTER HI
+    { 0x30d2, 0x3099 }, // 0x30d3 KATAKANA LETTER BI --> KATAKANA LETTER HI + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x30d2, 0x309a }, // 0x30d4 KATAKANA LETTER PI --> KATAKANA LETTER HI + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30d5 KATAKANA LETTER HU
+    { 0x30d5, 0x3099 }, // 0x30d6 KATAKANA LETTER BU --> KATAKANA LETTER HU + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x30d5, 0x309a }, // 0x30d7 KATAKANA LETTER PU --> KATAKANA LETTER HU + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30d8 KATAKANA LETTER HE
+    { 0x30d8, 0x3099 }, // 0x30d9 KATAKANA LETTER BE --> KATAKANA LETTER HE + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x30d8, 0x309a }, // 0x30da KATAKANA LETTER PE --> KATAKANA LETTER HE + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30db KATAKANA LETTER HO
+    { 0x30db, 0x3099 }, // 0x30dc KATAKANA LETTER BO --> KATAKANA LETTER HO + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x30db, 0x309a }, // 0x30dd KATAKANA LETTER PO --> KATAKANA LETTER HO + COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30de KATAKANA LETTER MA
+    { 0x0000, 0x0000 }, // 0x30df KATAKANA LETTER MI
+    { 0x0000, 0x0000 }, // 0x30e0 KATAKANA LETTER MU
+    { 0x0000, 0x0000 }, // 0x30e1 KATAKANA LETTER ME
+    { 0x0000, 0x0000 }, // 0x30e2 KATAKANA LETTER MO
+    { 0x0000, 0x0000 }, // 0x30e3 KATAKANA LETTER SMALL YA
+    { 0x0000, 0x0000 }, // 0x30e4 KATAKANA LETTER YA
+    { 0x0000, 0x0000 }, // 0x30e5 KATAKANA LETTER SMALL YU
+    { 0x0000, 0x0000 }, // 0x30e6 KATAKANA LETTER YU
+    { 0x0000, 0x0000 }, // 0x30e7 KATAKANA LETTER SMALL YO
+    { 0x0000, 0x0000 }, // 0x30e8 KATAKANA LETTER YO
+    { 0x0000, 0x0000 }, // 0x30e9 KATAKANA LETTER RA
+    { 0x0000, 0x0000 }, // 0x30ea KATAKANA LETTER RI
+    { 0x0000, 0x0000 }, // 0x30eb KATAKANA LETTER RU
+    { 0x0000, 0x0000 }, // 0x30ec KATAKANA LETTER RE
+    { 0x0000, 0x0000 }, // 0x30ed KATAKANA LETTER RO
+    { 0x0000, 0x0000 }, // 0x30ee KATAKANA LETTER SMALL WA
+    { 0x0000, 0x0000 }, // 0x30ef KATAKANA LETTER WA
+    { 0x0000, 0x0000 }, // 0x30f0 KATAKANA LETTER WI
+    { 0x0000, 0x0000 }, // 0x30f1 KATAKANA LETTER WE
+    { 0x0000, 0x0000 }, // 0x30f2 KATAKANA LETTER WO
+    { 0x0000, 0x0000 }, // 0x30f3 KATAKANA LETTER N
+    { 0x30a6, 0x3099 }, // 0x30f4 KATAKANA LETTER VU --> KATAKANA LETTER U + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30f5 KATAKANA LETTER SMALL KA
+    { 0x0000, 0x0000 }, // 0x30f6 KATAKANA LETTER SMALL KE
+    { 0x30ef, 0x3099 }, // 0x30f7 KATAKANA LETTER VA --> KATAKANA LETTER WA + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x30f0, 0x3099 }, // 0x30f8 KATAKANA LETTER VI --> KATAKANA LETTER WI + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x30f1, 0x3099 }, // 0x30f9 KATAKANA LETTER VE --> KATAKANA LETTER WE + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x30f2, 0x3099 }, // 0x30fa KATAKANA LETTER VO --> KATAKANA LETTER WO + COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30fb KATAKANA MIDDLE DOT
+    { 0x0000, 0x0000 }, // 0x30fc KATAKANA-HIRAGANA PROLONGED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30fd KATAKANA ITERATION MARK
+    { 0x0000, 0x0000 }, // 0x30fe KATAKANA VOICED ITERATION MARK
+    { 0x0000, 0x0000 }  // 0x30ff
+};
+
+
+/*
+  Halfwidth and Fullwidth Forms (U+FF00..U+FFEF)
+  ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.txt
+  ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html
+  http://charts.unicode.org/Web/UFF00.html
+*/
+
+OneToOneMappingTable_t full2half[] = {
+  MAKE_PAIR( 0x2190, 0xFFE9 ),  // LEFTWARDS ARROW --> HALFWIDTH LEFTWARDS ARROW
+  MAKE_PAIR( 0x2191, 0xFFEA ),  // UPWARDS ARROW --> HALFWIDTH UPWARDS ARROW
+  MAKE_PAIR( 0x2192, 0xFFEB ),  // RIGHTWARDS ARROW --> HALFWIDTH RIGHTWARDS ARROW
+  MAKE_PAIR( 0x2193, 0xFFEC ),  // DOWNWARDS ARROW --> HALFWIDTH DOWNWARDS ARROW
+
+  MAKE_PAIR( 0x2212, 0x002D ),  // MINUS SIGN --> HYPHEN-MINUS
+
+  MAKE_PAIR( 0x2502, 0xFFE8 ),  // BOX DRAWINGS LIGHT VERTICAL --> HALFWIDTH FORMS LIGHT VERTICAL
+  MAKE_PAIR( 0x25A0, 0xFFED ),  // BLACK SQUARE --> HALFWIDTH BLACK SQUARE
+  MAKE_PAIR( 0x25CB, 0xFFEE ),  // WHITE CIRCLE --> HALFWIDTH WHITE CIRCLE
+  MAKE_PAIR( 0x3000, 0x0020 ),  // IDEOGRAPHIC SPACE --> SPACE
+  MAKE_PAIR( 0x3001, 0xFF64 ),  // IDEOGRAPHIC COMMA --> HALFWIDTH IDEOGRAPHIC COMMA
+  MAKE_PAIR( 0x3002, 0xFF61 ),  // IDEOGRAPHIC FULL STOP --> HALFWIDTH IDEOGRAPHIC FULL STOP
+  MAKE_PAIR( 0x300C, 0xFF62 ),  // LEFT CORNER BRACKET --> HALFWIDTH LEFT CORNER BRACKET
+  MAKE_PAIR( 0x300D, 0xFF63 ),  // RIGHT CORNER BRACKET --> HALFWIDTH RIGHT CORNER BRACKET
+  MAKE_PAIR( 0x3099, 0xFF9E ),  // COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK --> HALFWIDTH KATAKANA VOICED SOUND MARK
+  MAKE_PAIR( 0x309A, 0xFF9F ),  // COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK --> HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+  MAKE_PAIR( 0x30A1, 0xFF67 ),  // KATAKANA LETTER SMALL A --> HALFWIDTH KATAKANA LETTER SMALL A
+  MAKE_PAIR( 0x30A2, 0xFF71 ),  // KATAKANA LETTER A --> HALFWIDTH KATAKANA LETTER A
+  MAKE_PAIR( 0x30A3, 0xFF68 ),  // KATAKANA LETTER SMALL I --> HALFWIDTH KATAKANA LETTER SMALL I
+  MAKE_PAIR( 0x30A4, 0xFF72 ),  // KATAKANA LETTER I --> HALFWIDTH KATAKANA LETTER I
+  MAKE_PAIR( 0x30A5, 0xFF69 ),  // KATAKANA LETTER SMALL U --> HALFWIDTH KATAKANA LETTER SMALL U
+  MAKE_PAIR( 0x30A6, 0xFF73 ),  // KATAKANA LETTER U --> HALFWIDTH KATAKANA LETTER U
+  MAKE_PAIR( 0x30A7, 0xFF6A ),  // KATAKANA LETTER SMALL E --> HALFWIDTH KATAKANA LETTER SMALL E
+  MAKE_PAIR( 0x30A8, 0xFF74 ),  // KATAKANA LETTER E --> HALFWIDTH KATAKANA LETTER E
+  MAKE_PAIR( 0x30A9, 0xFF6B ),  // KATAKANA LETTER SMALL O --> HALFWIDTH KATAKANA LETTER SMALL O
+  MAKE_PAIR( 0x30AA, 0xFF75 ),  // KATAKANA LETTER O --> HALFWIDTH KATAKANA LETTER O
+  MAKE_PAIR( 0x30AB, 0xFF76 ),  // KATAKANA LETTER KA --> HALFWIDTH KATAKANA LETTER KA
+  MAKE_PAIR( 0x30AD, 0xFF77 ),  // KATAKANA LETTER KI --> HALFWIDTH KATAKANA LETTER KI
+  MAKE_PAIR( 0x30AF, 0xFF78 ),  // KATAKANA LETTER KU --> HALFWIDTH KATAKANA LETTER KU
+  MAKE_PAIR( 0x30B1, 0xFF79 ),  // KATAKANA LETTER KE --> HALFWIDTH KATAKANA LETTER KE
+  MAKE_PAIR( 0x30B3, 0xFF7A ),  // KATAKANA LETTER KO --> HALFWIDTH KATAKANA LETTER KO
+  MAKE_PAIR( 0x30B5, 0xFF7B ),  // KATAKANA LETTER SA --> HALFWIDTH KATAKANA LETTER SA
+  MAKE_PAIR( 0x30B7, 0xFF7C ),  // KATAKANA LETTER SI --> HALFWIDTH KATAKANA LETTER SI
+  MAKE_PAIR( 0x30B9, 0xFF7D ),  // KATAKANA LETTER SU --> HALFWIDTH KATAKANA LETTER SU
+  MAKE_PAIR( 0x30BB, 0xFF7E ),  // KATAKANA LETTER SE --> HALFWIDTH KATAKANA LETTER SE
+  MAKE_PAIR( 0x30BD, 0xFF7F ),  // KATAKANA LETTER SO --> HALFWIDTH KATAKANA LETTER SO
+  MAKE_PAIR( 0x30BF, 0xFF80 ),  // KATAKANA LETTER TA --> HALFWIDTH KATAKANA LETTER TA
+  MAKE_PAIR( 0x30C1, 0xFF81 ),  // KATAKANA LETTER TI --> HALFWIDTH KATAKANA LETTER TI
+  MAKE_PAIR( 0x30C3, 0xFF6F ),  // KATAKANA LETTER SMALL TU --> HALFWIDTH KATAKANA LETTER SMALL TU
+  MAKE_PAIR( 0x30C4, 0xFF82 ),  // KATAKANA LETTER TU --> HALFWIDTH KATAKANA LETTER TU
+  MAKE_PAIR( 0x30C6, 0xFF83 ),  // KATAKANA LETTER TE --> HALFWIDTH KATAKANA LETTER TE
+  MAKE_PAIR( 0x30C8, 0xFF84 ),  // KATAKANA LETTER TO --> HALFWIDTH KATAKANA LETTER TO
+  MAKE_PAIR( 0x30CA, 0xFF85 ),  // KATAKANA LETTER NA --> HALFWIDTH KATAKANA LETTER NA
+  MAKE_PAIR( 0x30CB, 0xFF86 ),  // KATAKANA LETTER NI --> HALFWIDTH KATAKANA LETTER NI
+  MAKE_PAIR( 0x30CC, 0xFF87 ),  // KATAKANA LETTER NU --> HALFWIDTH KATAKANA LETTER NU
+  MAKE_PAIR( 0x30CD, 0xFF88 ),  // KATAKANA LETTER NE --> HALFWIDTH KATAKANA LETTER NE
+  MAKE_PAIR( 0x30CE, 0xFF89 ),  // KATAKANA LETTER NO --> HALFWIDTH KATAKANA LETTER NO
+  MAKE_PAIR( 0x30CF, 0xFF8A ),  // KATAKANA LETTER HA --> HALFWIDTH KATAKANA LETTER HA
+  MAKE_PAIR( 0x30D2, 0xFF8B ),  // KATAKANA LETTER HI --> HALFWIDTH KATAKANA LETTER HI
+  MAKE_PAIR( 0x30D5, 0xFF8C ),  // KATAKANA LETTER HU --> HALFWIDTH KATAKANA LETTER HU
+  MAKE_PAIR( 0x30D8, 0xFF8D ),  // KATAKANA LETTER HE --> HALFWIDTH KATAKANA LETTER HE
+  MAKE_PAIR( 0x30DB, 0xFF8E ),  // KATAKANA LETTER HO --> HALFWIDTH KATAKANA LETTER HO
+  MAKE_PAIR( 0x30DE, 0xFF8F ),  // KATAKANA LETTER MA --> HALFWIDTH KATAKANA LETTER MA
+  MAKE_PAIR( 0x30DF, 0xFF90 ),  // KATAKANA LETTER MI --> HALFWIDTH KATAKANA LETTER MI
+  MAKE_PAIR( 0x30E0, 0xFF91 ),  // KATAKANA LETTER MU --> HALFWIDTH KATAKANA LETTER MU
+  MAKE_PAIR( 0x30E1, 0xFF92 ),  // KATAKANA LETTER ME --> HALFWIDTH KATAKANA LETTER ME
+  MAKE_PAIR( 0x30E2, 0xFF93 ),  // KATAKANA LETTER MO --> HALFWIDTH KATAKANA LETTER MO
+  MAKE_PAIR( 0x30E3, 0xFF6C ),  // KATAKANA LETTER SMALL YA --> HALFWIDTH KATAKANA LETTER SMALL YA
+  MAKE_PAIR( 0x30E4, 0xFF94 ),  // KATAKANA LETTER YA --> HALFWIDTH KATAKANA LETTER YA
+  MAKE_PAIR( 0x30E5, 0xFF6D ),  // KATAKANA LETTER SMALL YU --> HALFWIDTH KATAKANA LETTER SMALL YU
+  MAKE_PAIR( 0x30E6, 0xFF95 ),  // KATAKANA LETTER YU --> HALFWIDTH KATAKANA LETTER YU
+  MAKE_PAIR( 0x30E7, 0xFF6E ),  // KATAKANA LETTER SMALL YO --> HALFWIDTH KATAKANA LETTER SMALL YO
+  MAKE_PAIR( 0x30E8, 0xFF96 ),  // KATAKANA LETTER YO --> HALFWIDTH KATAKANA LETTER YO
+  MAKE_PAIR( 0x30E9, 0xFF97 ),  // KATAKANA LETTER RA --> HALFWIDTH KATAKANA LETTER RA
+  MAKE_PAIR( 0x30EA, 0xFF98 ),  // KATAKANA LETTER RI --> HALFWIDTH KATAKANA LETTER RI
+  MAKE_PAIR( 0x30EB, 0xFF99 ),  // KATAKANA LETTER RU --> HALFWIDTH KATAKANA LETTER RU
+  MAKE_PAIR( 0x30EC, 0xFF9A ),  // KATAKANA LETTER RE --> HALFWIDTH KATAKANA LETTER RE
+  MAKE_PAIR( 0x30ED, 0xFF9B ),  // KATAKANA LETTER RO --> HALFWIDTH KATAKANA LETTER RO
+  MAKE_PAIR( 0x30EF, 0xFF9C ),  // KATAKANA LETTER WA --> HALFWIDTH KATAKANA LETTER WA
+  MAKE_PAIR( 0x30F2, 0xFF66 ),  // KATAKANA LETTER WO --> HALFWIDTH KATAKANA LETTER WO
+  MAKE_PAIR( 0x30F3, 0xFF9D ),  // KATAKANA LETTER N --> HALFWIDTH KATAKANA LETTER N
+  MAKE_PAIR( 0x30FB, 0xFF65 ),  // KATAKANA MIDDLE DOT --> HALFWIDTH KATAKANA MIDDLE DOT
+  MAKE_PAIR( 0x30FC, 0xFF70 ),  // KATAKANA-HIRAGANA PROLONGED SOUND MARK --> HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
+  MAKE_PAIR( 0x3131, 0xFFA1 ),  // HANGUL LETTER KIYEOK --> HALFWIDTH HANGUL LETTER KIYEOK
+  MAKE_PAIR( 0x3132, 0xFFA2 ),  // HANGUL LETTER SSANGKIYEOK --> HALFWIDTH HANGUL LETTER SSANGKIYEOK
+  MAKE_PAIR( 0x3133, 0xFFA3 ),  // HANGUL LETTER KIYEOK-SIOS --> HALFWIDTH HANGUL LETTER KIYEOK-SIOS
+  MAKE_PAIR( 0x3134, 0xFFA4 ),  // HANGUL LETTER NIEUN --> HALFWIDTH HANGUL LETTER NIEUN
+  MAKE_PAIR( 0x3135, 0xFFA5 ),  // HANGUL LETTER NIEUN-CIEUC --> HALFWIDTH HANGUL LETTER NIEUN-CIEUC
+  MAKE_PAIR( 0x3136, 0xFFA6 ),  // HANGUL LETTER NIEUN-HIEUH --> HALFWIDTH HANGUL LETTER NIEUN-HIEUH
+  MAKE_PAIR( 0x3137, 0xFFA7 ),  // HANGUL LETTER TIKEUT --> HALFWIDTH HANGUL LETTER TIKEUT
+  MAKE_PAIR( 0x3138, 0xFFA8 ),  // HANGUL LETTER SSANGTIKEUT --> HALFWIDTH HANGUL LETTER SSANGTIKEUT
+  MAKE_PAIR( 0x3139, 0xFFA9 ),  // HANGUL LETTER RIEUL --> HALFWIDTH HANGUL LETTER RIEUL
+  MAKE_PAIR( 0x313A, 0xFFAA ),  // HANGUL LETTER RIEUL-KIYEOK --> HALFWIDTH HANGUL LETTER RIEUL-KIYEOK
+  MAKE_PAIR( 0x313B, 0xFFAB ),  // HANGUL LETTER RIEUL-MIEUM --> HALFWIDTH HANGUL LETTER RIEUL-MIEUM
+  MAKE_PAIR( 0x313C, 0xFFAC ),  // HANGUL LETTER RIEUL-PIEUP --> HALFWIDTH HANGUL LETTER RIEUL-PIEUP
+  MAKE_PAIR( 0x313D, 0xFFAD ),  // HANGUL LETTER RIEUL-SIOS --> HALFWIDTH HANGUL LETTER RIEUL-SIOS
+  MAKE_PAIR( 0x313E, 0xFFAE ),  // HANGUL LETTER RIEUL-THIEUTH --> HALFWIDTH HANGUL LETTER RIEUL-THIEUTH
+  MAKE_PAIR( 0x313F, 0xFFAF ),  // HANGUL LETTER RIEUL-PHIEUPH --> HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH
+  MAKE_PAIR( 0x3140, 0xFFB0 ),  // HANGUL LETTER RIEUL-HIEUH --> HALFWIDTH HANGUL LETTER RIEUL-HIEUH
+  MAKE_PAIR( 0x3141, 0xFFB1 ),  // HANGUL LETTER MIEUM --> HALFWIDTH HANGUL LETTER MIEUM
+  MAKE_PAIR( 0x3142, 0xFFB2 ),  // HANGUL LETTER PIEUP --> HALFWIDTH HANGUL LETTER PIEUP
+  MAKE_PAIR( 0x3143, 0xFFB3 ),  // HANGUL LETTER SSANGPIEUP --> HALFWIDTH HANGUL LETTER SSANGPIEUP
+  MAKE_PAIR( 0x3144, 0xFFB4 ),  // HANGUL LETTER PIEUP-SIOS --> HALFWIDTH HANGUL LETTER PIEUP-SIOS
+  MAKE_PAIR( 0x3145, 0xFFB5 ),  // HANGUL LETTER SIOS --> HALFWIDTH HANGUL LETTER SIOS
+  MAKE_PAIR( 0x3146, 0xFFB6 ),  // HANGUL LETTER SSANGSIOS --> HALFWIDTH HANGUL LETTER SSANGSIOS
+  MAKE_PAIR( 0x3147, 0xFFB7 ),  // HANGUL LETTER IEUNG --> HALFWIDTH HANGUL LETTER IEUNG
+  MAKE_PAIR( 0x3148, 0xFFB8 ),  // HANGUL LETTER CIEUC --> HALFWIDTH HANGUL LETTER CIEUC
+  MAKE_PAIR( 0x3149, 0xFFB9 ),  // HANGUL LETTER SSANGCIEUC --> HALFWIDTH HANGUL LETTER SSANGCIEUC
+  MAKE_PAIR( 0x314A, 0xFFBA ),  // HANGUL LETTER CHIEUCH --> HALFWIDTH HANGUL LETTER CHIEUCH
+  MAKE_PAIR( 0x314B, 0xFFBB ),  // HANGUL LETTER KHIEUKH --> HALFWIDTH HANGUL LETTER KHIEUKH
+  MAKE_PAIR( 0x314C, 0xFFBC ),  // HANGUL LETTER THIEUTH --> HALFWIDTH HANGUL LETTER THIEUTH
+  MAKE_PAIR( 0x314D, 0xFFBD ),  // HANGUL LETTER PHIEUPH --> HALFWIDTH HANGUL LETTER PHIEUPH
+  MAKE_PAIR( 0x314E, 0xFFBE ),  // HANGUL LETTER HIEUH --> HALFWIDTH HANGUL LETTER HIEUH
+  MAKE_PAIR( 0x314F, 0xFFC2 ),  // HANGUL LETTER A --> HALFWIDTH HANGUL LETTER A
+  MAKE_PAIR( 0x3150, 0xFFC3 ),  // HANGUL LETTER AE --> HALFWIDTH HANGUL LETTER AE
+  MAKE_PAIR( 0x3151, 0xFFC4 ),  // HANGUL LETTER YA --> HALFWIDTH HANGUL LETTER YA
+  MAKE_PAIR( 0x3152, 0xFFC5 ),  // HANGUL LETTER YAE --> HALFWIDTH HANGUL LETTER YAE
+  MAKE_PAIR( 0x3153, 0xFFC6 ),  // HANGUL LETTER EO --> HALFWIDTH HANGUL LETTER EO
+  MAKE_PAIR( 0x3154, 0xFFC7 ),  // HANGUL LETTER E --> HALFWIDTH HANGUL LETTER E
+  MAKE_PAIR( 0x3155, 0xFFCA ),  // HANGUL LETTER YEO --> HALFWIDTH HANGUL LETTER YEO
+  MAKE_PAIR( 0x3156, 0xFFCB ),  // HANGUL LETTER YE --> HALFWIDTH HANGUL LETTER YE
+  MAKE_PAIR( 0x3157, 0xFFCC ),  // HANGUL LETTER O --> HALFWIDTH HANGUL LETTER O
+  MAKE_PAIR( 0x3158, 0xFFCD ),  // HANGUL LETTER WA --> HALFWIDTH HANGUL LETTER WA
+  MAKE_PAIR( 0x3159, 0xFFCE ),  // HANGUL LETTER WAE --> HALFWIDTH HANGUL LETTER WAE
+  MAKE_PAIR( 0x315A, 0xFFCF ),  // HANGUL LETTER OE --> HALFWIDTH HANGUL LETTER OE
+  MAKE_PAIR( 0x315B, 0xFFD2 ),  // HANGUL LETTER YO --> HALFWIDTH HANGUL LETTER YO
+  MAKE_PAIR( 0x315C, 0xFFD3 ),  // HANGUL LETTER U --> HALFWIDTH HANGUL LETTER U
+  MAKE_PAIR( 0x315D, 0xFFD4 ),  // HANGUL LETTER WEO --> HALFWIDTH HANGUL LETTER WEO
+  MAKE_PAIR( 0x315E, 0xFFD5 ),  // HANGUL LETTER WE --> HALFWIDTH HANGUL LETTER WE
+  MAKE_PAIR( 0x315F, 0xFFD6 ),  // HANGUL LETTER WI --> HALFWIDTH HANGUL LETTER WI
+  MAKE_PAIR( 0x3160, 0xFFD7 ),  // HANGUL LETTER YU --> HALFWIDTH HANGUL LETTER YU
+  MAKE_PAIR( 0x3161, 0xFFDA ),  // HANGUL LETTER EU --> HALFWIDTH HANGUL LETTER EU
+  MAKE_PAIR( 0x3162, 0xFFDB ),  // HANGUL LETTER YI --> HALFWIDTH HANGUL LETTER YI
+  MAKE_PAIR( 0x3163, 0xFFDC ),  // HANGUL LETTER I --> HALFWIDTH HANGUL LETTER I
+  MAKE_PAIR( 0x3164, 0xFFA0 ),  // HANGUL FILLER --> HALFWIDTH HANGUL FILLER
+  MAKE_PAIR( 0xFF01, 0x0021 ),  // FULLWIDTH EXCLAMATION MARK --> EXCLAMATION MARK
+  MAKE_PAIR( 0xFF02, 0x0022 ),  // FULLWIDTH QUOTATION MARK --> QUOTATION MARK
+  MAKE_PAIR( 0xFF03, 0x0023 ),  // FULLWIDTH NUMBER SIGN --> NUMBER SIGN
+  MAKE_PAIR( 0xFF04, 0x0024 ),  // FULLWIDTH DOLLAR SIGN --> DOLLAR SIGN
+  MAKE_PAIR( 0xFF05, 0x0025 ),  // FULLWIDTH PERCENT SIGN --> PERCENT SIGN
+  MAKE_PAIR( 0xFF06, 0x0026 ),  // FULLWIDTH AMPERSAND --> AMPERSAND
+  MAKE_PAIR( 0xFF07, 0x0027 ),  // FULLWIDTH APOSTROPHE --> APOSTROPHE
+  MAKE_PAIR( 0xFF08, 0x0028 ),  // FULLWIDTH LEFT PARENTHESIS --> LEFT PARENTHESIS
+  MAKE_PAIR( 0xFF09, 0x0029 ),  // FULLWIDTH RIGHT PARENTHESIS --> RIGHT PARENTHESIS
+  MAKE_PAIR( 0xFF0A, 0x002A ),  // FULLWIDTH ASTERISK --> ASTERISK
+  MAKE_PAIR( 0xFF0B, 0x002B ),  // FULLWIDTH PLUS SIGN --> PLUS SIGN
+  MAKE_PAIR( 0xFF0C, 0x002C ),  // FULLWIDTH COMMA --> COMMA
+
+//MAKE_PAIR( 0xFF0D, 0x002D ),  // FULLWIDTH HYPHEN-MINUS --> HYPHEN-MINUS
+
+  MAKE_PAIR( 0xFF0E, 0x002E ),  // FULLWIDTH FULL STOP --> FULL STOP
+  MAKE_PAIR( 0xFF0F, 0x002F ),  // FULLWIDTH SOLIDUS --> SOLIDUS
+  MAKE_PAIR( 0xFF10, 0x0030 ),  // FULLWIDTH DIGIT ZERO --> DIGIT ZERO
+  MAKE_PAIR( 0xFF11, 0x0031 ),  // FULLWIDTH DIGIT ONE --> DIGIT ONE
+  MAKE_PAIR( 0xFF12, 0x0032 ),  // FULLWIDTH DIGIT TWO --> DIGIT TWO
+  MAKE_PAIR( 0xFF13, 0x0033 ),  // FULLWIDTH DIGIT THREE --> DIGIT THREE
+  MAKE_PAIR( 0xFF14, 0x0034 ),  // FULLWIDTH DIGIT FOUR --> DIGIT FOUR
+  MAKE_PAIR( 0xFF15, 0x0035 ),  // FULLWIDTH DIGIT FIVE --> DIGIT FIVE
+  MAKE_PAIR( 0xFF16, 0x0036 ),  // FULLWIDTH DIGIT SIX --> DIGIT SIX
+  MAKE_PAIR( 0xFF17, 0x0037 ),  // FULLWIDTH DIGIT SEVEN --> DIGIT SEVEN
+  MAKE_PAIR( 0xFF18, 0x0038 ),  // FULLWIDTH DIGIT EIGHT --> DIGIT EIGHT
+  MAKE_PAIR( 0xFF19, 0x0039 ),  // FULLWIDTH DIGIT NINE --> DIGIT NINE
+  MAKE_PAIR( 0xFF1A, 0x003A ),  // FULLWIDTH COLON --> COLON
+  MAKE_PAIR( 0xFF1B, 0x003B ),  // FULLWIDTH SEMICOLON --> SEMICOLON
+  MAKE_PAIR( 0xFF1C, 0x003C ),  // FULLWIDTH LESS-THAN SIGN --> LESS-THAN SIGN
+  MAKE_PAIR( 0xFF1D, 0x003D ),  // FULLWIDTH EQUALS SIGN --> EQUALS SIGN
+  MAKE_PAIR( 0xFF1E, 0x003E ),  // FULLWIDTH GREATER-THAN SIGN --> GREATER-THAN SIGN
+  MAKE_PAIR( 0xFF1F, 0x003F ),  // FULLWIDTH QUESTION MARK --> QUESTION MARK
+  MAKE_PAIR( 0xFF20, 0x0040 ),  // FULLWIDTH COMMERCIAL AT --> COMMERCIAL AT
+  MAKE_PAIR( 0xFF21, 0x0041 ),  // FULLWIDTH LATIN CAPITAL LETTER A --> LATIN CAPITAL LETTER A
+  MAKE_PAIR( 0xFF22, 0x0042 ),  // FULLWIDTH LATIN CAPITAL LETTER B --> LATIN CAPITAL LETTER B
+  MAKE_PAIR( 0xFF23, 0x0043 ),  // FULLWIDTH LATIN CAPITAL LETTER C --> LATIN CAPITAL LETTER C
+  MAKE_PAIR( 0xFF24, 0x0044 ),  // FULLWIDTH LATIN CAPITAL LETTER D --> LATIN CAPITAL LETTER D
+  MAKE_PAIR( 0xFF25, 0x0045 ),  // FULLWIDTH LATIN CAPITAL LETTER E --> LATIN CAPITAL LETTER E
+  MAKE_PAIR( 0xFF26, 0x0046 ),  // FULLWIDTH LATIN CAPITAL LETTER F --> LATIN CAPITAL LETTER F
+  MAKE_PAIR( 0xFF27, 0x0047 ),  // FULLWIDTH LATIN CAPITAL LETTER G --> LATIN CAPITAL LETTER G
+  MAKE_PAIR( 0xFF28, 0x0048 ),  // FULLWIDTH LATIN CAPITAL LETTER H --> LATIN CAPITAL LETTER H
+  MAKE_PAIR( 0xFF29, 0x0049 ),  // FULLWIDTH LATIN CAPITAL LETTER I --> LATIN CAPITAL LETTER I
+  MAKE_PAIR( 0xFF2A, 0x004A ),  // FULLWIDTH LATIN CAPITAL LETTER J --> LATIN CAPITAL LETTER J
+  MAKE_PAIR( 0xFF2B, 0x004B ),  // FULLWIDTH LATIN CAPITAL LETTER K --> LATIN CAPITAL LETTER K
+  MAKE_PAIR( 0xFF2C, 0x004C ),  // FULLWIDTH LATIN CAPITAL LETTER L --> LATIN CAPITAL LETTER L
+  MAKE_PAIR( 0xFF2D, 0x004D ),  // FULLWIDTH LATIN CAPITAL LETTER M --> LATIN CAPITAL LETTER M
+  MAKE_PAIR( 0xFF2E, 0x004E ),  // FULLWIDTH LATIN CAPITAL LETTER N --> LATIN CAPITAL LETTER N
+  MAKE_PAIR( 0xFF2F, 0x004F ),  // FULLWIDTH LATIN CAPITAL LETTER O --> LATIN CAPITAL LETTER O
+  MAKE_PAIR( 0xFF30, 0x0050 ),  // FULLWIDTH LATIN CAPITAL LETTER P --> LATIN CAPITAL LETTER P
+  MAKE_PAIR( 0xFF31, 0x0051 ),  // FULLWIDTH LATIN CAPITAL LETTER Q --> LATIN CAPITAL LETTER Q
+  MAKE_PAIR( 0xFF32, 0x0052 ),  // FULLWIDTH LATIN CAPITAL LETTER R --> LATIN CAPITAL LETTER R
+  MAKE_PAIR( 0xFF33, 0x0053 ),  // FULLWIDTH LATIN CAPITAL LETTER S --> LATIN CAPITAL LETTER S
+  MAKE_PAIR( 0xFF34, 0x0054 ),  // FULLWIDTH LATIN CAPITAL LETTER T --> LATIN CAPITAL LETTER T
+  MAKE_PAIR( 0xFF35, 0x0055 ),  // FULLWIDTH LATIN CAPITAL LETTER U --> LATIN CAPITAL LETTER U
+  MAKE_PAIR( 0xFF36, 0x0056 ),  // FULLWIDTH LATIN CAPITAL LETTER V --> LATIN CAPITAL LETTER V
+  MAKE_PAIR( 0xFF37, 0x0057 ),  // FULLWIDTH LATIN CAPITAL LETTER W --> LATIN CAPITAL LETTER W
+  MAKE_PAIR( 0xFF38, 0x0058 ),  // FULLWIDTH LATIN CAPITAL LETTER X --> LATIN CAPITAL LETTER X
+  MAKE_PAIR( 0xFF39, 0x0059 ),  // FULLWIDTH LATIN CAPITAL LETTER Y --> LATIN CAPITAL LETTER Y
+  MAKE_PAIR( 0xFF3A, 0x005A ),  // FULLWIDTH LATIN CAPITAL LETTER Z --> LATIN CAPITAL LETTER Z
+  MAKE_PAIR( 0xFF3B, 0x005B ),  // FULLWIDTH LEFT SQUARE BRACKET --> LEFT SQUARE BRACKET
+  MAKE_PAIR( 0xFF3C, 0x005C ),  // FULLWIDTH REVERSE SOLIDUS --> REVERSE SOLIDUS
+  MAKE_PAIR( 0xFF3D, 0x005D ),  // FULLWIDTH RIGHT SQUARE BRACKET --> RIGHT SQUARE BRACKET
+  MAKE_PAIR( 0xFF3E, 0x005E ),  // FULLWIDTH CIRCUMFLEX ACCENT --> CIRCUMFLEX ACCENT
+  MAKE_PAIR( 0xFF3F, 0x005F ),  // FULLWIDTH LOW LINE --> LOW LINE
+  MAKE_PAIR( 0xFF40, 0x0060 ),  // FULLWIDTH GRAVE ACCENT --> GRAVE ACCENT
+  MAKE_PAIR( 0xFF41, 0x0061 ),  // FULLWIDTH LATIN SMALL LETTER A --> LATIN SMALL LETTER A
+  MAKE_PAIR( 0xFF42, 0x0062 ),  // FULLWIDTH LATIN SMALL LETTER B --> LATIN SMALL LETTER B
+  MAKE_PAIR( 0xFF43, 0x0063 ),  // FULLWIDTH LATIN SMALL LETTER C --> LATIN SMALL LETTER C
+  MAKE_PAIR( 0xFF44, 0x0064 ),  // FULLWIDTH LATIN SMALL LETTER D --> LATIN SMALL LETTER D
+  MAKE_PAIR( 0xFF45, 0x0065 ),  // FULLWIDTH LATIN SMALL LETTER E --> LATIN SMALL LETTER E
+  MAKE_PAIR( 0xFF46, 0x0066 ),  // FULLWIDTH LATIN SMALL LETTER F --> LATIN SMALL LETTER F
+  MAKE_PAIR( 0xFF47, 0x0067 ),  // FULLWIDTH LATIN SMALL LETTER G --> LATIN SMALL LETTER G
+  MAKE_PAIR( 0xFF48, 0x0068 ),  // FULLWIDTH LATIN SMALL LETTER H --> LATIN SMALL LETTER H
+  MAKE_PAIR( 0xFF49, 0x0069 ),  // FULLWIDTH LATIN SMALL LETTER I --> LATIN SMALL LETTER I
+  MAKE_PAIR( 0xFF4A, 0x006A ),  // FULLWIDTH LATIN SMALL LETTER J --> LATIN SMALL LETTER J
+  MAKE_PAIR( 0xFF4B, 0x006B ),  // FULLWIDTH LATIN SMALL LETTER K --> LATIN SMALL LETTER K
+  MAKE_PAIR( 0xFF4C, 0x006C ),  // FULLWIDTH LATIN SMALL LETTER L --> LATIN SMALL LETTER L
+  MAKE_PAIR( 0xFF4D, 0x006D ),  // FULLWIDTH LATIN SMALL LETTER M --> LATIN SMALL LETTER M
+  MAKE_PAIR( 0xFF4E, 0x006E ),  // FULLWIDTH LATIN SMALL LETTER N --> LATIN SMALL LETTER N
+  MAKE_PAIR( 0xFF4F, 0x006F ),  // FULLWIDTH LATIN SMALL LETTER O --> LATIN SMALL LETTER O
+  MAKE_PAIR( 0xFF50, 0x0070 ),  // FULLWIDTH LATIN SMALL LETTER P --> LATIN SMALL LETTER P
+  MAKE_PAIR( 0xFF51, 0x0071 ),  // FULLWIDTH LATIN SMALL LETTER Q --> LATIN SMALL LETTER Q
+  MAKE_PAIR( 0xFF52, 0x0072 ),  // FULLWIDTH LATIN SMALL LETTER R --> LATIN SMALL LETTER R
+  MAKE_PAIR( 0xFF53, 0x0073 ),  // FULLWIDTH LATIN SMALL LETTER S --> LATIN SMALL LETTER S
+  MAKE_PAIR( 0xFF54, 0x0074 ),  // FULLWIDTH LATIN SMALL LETTER T --> LATIN SMALL LETTER T
+  MAKE_PAIR( 0xFF55, 0x0075 ),  // FULLWIDTH LATIN SMALL LETTER U --> LATIN SMALL LETTER U
+  MAKE_PAIR( 0xFF56, 0x0076 ),  // FULLWIDTH LATIN SMALL LETTER V --> LATIN SMALL LETTER V
+  MAKE_PAIR( 0xFF57, 0x0077 ),  // FULLWIDTH LATIN SMALL LETTER W --> LATIN SMALL LETTER W
+  MAKE_PAIR( 0xFF58, 0x0078 ),  // FULLWIDTH LATIN SMALL LETTER X --> LATIN SMALL LETTER X
+  MAKE_PAIR( 0xFF59, 0x0079 ),  // FULLWIDTH LATIN SMALL LETTER Y --> LATIN SMALL LETTER Y
+  MAKE_PAIR( 0xFF5A, 0x007A ),  // FULLWIDTH LATIN SMALL LETTER Z --> LATIN SMALL LETTER Z
+  MAKE_PAIR( 0xFF5B, 0x007B ),  // FULLWIDTH LEFT CURLY BRACKET --> LEFT CURLY BRACKET
+  MAKE_PAIR( 0xFF5C, 0x007C ),  // FULLWIDTH VERTICAL LINE --> VERTICAL LINE
+  MAKE_PAIR( 0xFF5D, 0x007D ),  // FULLWIDTH RIGHT CURLY BRACKET --> RIGHT CURLY BRACKET
+  MAKE_PAIR( 0xFF5E, 0x007E ),  // FULLWIDTH TILDE --> TILDE
+  MAKE_PAIR( 0xFFE0, 0x00A2 ),  // FULLWIDTH CENT SIGN --> CENT SIGN
+  MAKE_PAIR( 0xFFE1, 0x00A3 ),  // FULLWIDTH POUND SIGN --> POUND SIGN
+  MAKE_PAIR( 0xFFE2, 0x00AC ),  // FULLWIDTH NOT SIGN --> NOT SIGN
+  MAKE_PAIR( 0xFFE3, 0x00AF ),  // FULLWIDTH MACRON --> MACRON
+  MAKE_PAIR( 0xFFE4, 0x00A6 ),  // FULLWIDTH BROKEN BAR --> BROKEN BAR
+  MAKE_PAIR( 0xFFE5, 0x00A5 ),  // FULLWIDTH YEN SIGN --> YEN SIGN
+  MAKE_PAIR( 0xFFE6, 0x20A9 )   // FULLWIDTH WON SIGN --> WON SIGN
+};
+
+/*
+  Unicode Normalization Forms
+  http://www.unicode.org/unicode/reports/tr15/index.html
+  http://www.w3.org/International/charlint/
+*/
+
+const sal_Unicode composition_table[][2] = {
+    { 0x0000, 0x0000 }, // 0x3040
+    { 0x0000, 0x0000 }, // 0x3041 HIRAGANA LETTER SMALL A
+    { 0x0000, 0x0000 }, // 0x3042 HIRAGANA LETTER A
+    { 0x0000, 0x0000 }, // 0x3043 HIRAGANA LETTER SMALL I
+    { 0x0000, 0x0000 }, // 0x3044 HIRAGANA LETTER I
+    { 0x0000, 0x0000 }, // 0x3045 HIRAGANA LETTER SMALL U
+    { 0x3094, 0x0000 }, // 0x3046 HIRAGANA LETTER U --> HIRAGANA LETTER VU
+    { 0x0000, 0x0000 }, // 0x3047 HIRAGANA LETTER SMALL E
+    { 0x0000, 0x0000 }, // 0x3048 HIRAGANA LETTER E
+    { 0x0000, 0x0000 }, // 0x3049 HIRAGANA LETTER SMALL O
+    { 0x0000, 0x0000 }, // 0x304a HIRAGANA LETTER O
+    { 0x304c, 0x0000 }, // 0x304b HIRAGANA LETTER KA --> HIRAGANA LETTER GA
+    { 0x0000, 0x0000 }, // 0x304c HIRAGANA LETTER GA
+    { 0x304e, 0x0000 }, // 0x304d HIRAGANA LETTER KI --> HIRAGANA LETTER GI
+    { 0x0000, 0x0000 }, // 0x304e HIRAGANA LETTER GI
+    { 0x3050, 0x0000 }, // 0x304f HIRAGANA LETTER KU --> HIRAGANA LETTER GU
+    { 0x0000, 0x0000 }, // 0x3050 HIRAGANA LETTER GU
+    { 0x3052, 0x0000 }, // 0x3051 HIRAGANA LETTER KE --> HIRAGANA LETTER GE
+    { 0x0000, 0x0000 }, // 0x3052 HIRAGANA LETTER GE
+    { 0x3054, 0x0000 }, // 0x3053 HIRAGANA LETTER KO --> HIRAGANA LETTER GO
+    { 0x0000, 0x0000 }, // 0x3054 HIRAGANA LETTER GO
+    { 0x3056, 0x0000 }, // 0x3055 HIRAGANA LETTER SA --> HIRAGANA LETTER ZA
+    { 0x0000, 0x0000 }, // 0x3056 HIRAGANA LETTER ZA
+    { 0x3058, 0x0000 }, // 0x3057 HIRAGANA LETTER SI --> HIRAGANA LETTER ZI
+    { 0x0000, 0x0000 }, // 0x3058 HIRAGANA LETTER ZI
+    { 0x305a, 0x0000 }, // 0x3059 HIRAGANA LETTER SU --> HIRAGANA LETTER ZU
+    { 0x0000, 0x0000 }, // 0x305a HIRAGANA LETTER ZU
+    { 0x305c, 0x0000 }, // 0x305b HIRAGANA LETTER SE --> HIRAGANA LETTER ZE
+    { 0x0000, 0x0000 }, // 0x305c HIRAGANA LETTER ZE
+    { 0x305e, 0x0000 }, // 0x305d HIRAGANA LETTER SO --> HIRAGANA LETTER ZO
+    { 0x0000, 0x0000 }, // 0x305e HIRAGANA LETTER ZO
+    { 0x3060, 0x0000 }, // 0x305f HIRAGANA LETTER TA --> HIRAGANA LETTER DA
+    { 0x0000, 0x0000 }, // 0x3060 HIRAGANA LETTER DA
+    { 0x3062, 0x0000 }, // 0x3061 HIRAGANA LETTER TI --> HIRAGANA LETTER DI
+    { 0x0000, 0x0000 }, // 0x3062 HIRAGANA LETTER DI
+    { 0x0000, 0x0000 }, // 0x3063 HIRAGANA LETTER SMALL TU
+    { 0x3065, 0x0000 }, // 0x3064 HIRAGANA LETTER TU --> HIRAGANA LETTER DU
+    { 0x0000, 0x0000 }, // 0x3065 HIRAGANA LETTER DU
+    { 0x3067, 0x0000 }, // 0x3066 HIRAGANA LETTER TE --> HIRAGANA LETTER DE
+    { 0x0000, 0x0000 }, // 0x3067 HIRAGANA LETTER DE
+    { 0x3069, 0x0000 }, // 0x3068 HIRAGANA LETTER TO --> HIRAGANA LETTER DO
+    { 0x0000, 0x0000 }, // 0x3069 HIRAGANA LETTER DO
+    { 0x0000, 0x0000 }, // 0x306a HIRAGANA LETTER NA
+    { 0x0000, 0x0000 }, // 0x306b HIRAGANA LETTER NI
+    { 0x0000, 0x0000 }, // 0x306c HIRAGANA LETTER NU
+    { 0x0000, 0x0000 }, // 0x306d HIRAGANA LETTER NE
+    { 0x0000, 0x0000 }, // 0x306e HIRAGANA LETTER NO
+    { 0x3070, 0x3071 }, // 0x306f HIRAGANA LETTER HA --> HIRAGANA LETTER BA or HIRAGANA LETTER PA
+    { 0x0000, 0x0000 }, // 0x3070 HIRAGANA LETTER BA
+    { 0x0000, 0x0000 }, // 0x3071 HIRAGANA LETTER PA
+    { 0x3073, 0x3074 }, // 0x3072 HIRAGANA LETTER HI --> HIRAGANA LETTER BI or HIRAGANA LETTER PI
+    { 0x0000, 0x0000 }, // 0x3073 HIRAGANA LETTER BI
+    { 0x0000, 0x0000 }, // 0x3074 HIRAGANA LETTER PI
+    { 0x3076, 0x3077 }, // 0x3075 HIRAGANA LETTER HU --> HIRAGANA LETTER BU or HIRAGANA LETTER PU
+    { 0x0000, 0x0000 }, // 0x3076 HIRAGANA LETTER BU
+    { 0x0000, 0x0000 }, // 0x3077 HIRAGANA LETTER PU
+    { 0x3079, 0x307a }, // 0x3078 HIRAGANA LETTER HE --> HIRAGANA LETTER BE or HIRAGANA LETTER PE
+    { 0x0000, 0x0000 }, // 0x3079 HIRAGANA LETTER BE
+    { 0x0000, 0x0000 }, // 0x307a HIRAGANA LETTER PE
+    { 0x307c, 0x307d }, // 0x307b HIRAGANA LETTER HO --> HIRAGANA LETTER BO or HIRAGANA LETTER PO
+    { 0x0000, 0x0000 }, // 0x307c HIRAGANA LETTER BO
+    { 0x0000, 0x0000 }, // 0x307d HIRAGANA LETTER PO
+    { 0x0000, 0x0000 }, // 0x307e HIRAGANA LETTER MA
+    { 0x0000, 0x0000 }, // 0x307f HIRAGANA LETTER MI
+    { 0x0000, 0x0000 }, // 0x3080 HIRAGANA LETTER MU
+    { 0x0000, 0x0000 }, // 0x3081 HIRAGANA LETTER ME
+    { 0x0000, 0x0000 }, // 0x3082 HIRAGANA LETTER MO
+    { 0x0000, 0x0000 }, // 0x3083 HIRAGANA LETTER SMALL YA
+    { 0x0000, 0x0000 }, // 0x3084 HIRAGANA LETTER YA
+    { 0x0000, 0x0000 }, // 0x3085 HIRAGANA LETTER SMALL YU
+    { 0x0000, 0x0000 }, // 0x3086 HIRAGANA LETTER YU
+    { 0x0000, 0x0000 }, // 0x3087 HIRAGANA LETTER SMALL YO
+    { 0x0000, 0x0000 }, // 0x3088 HIRAGANA LETTER YO
+    { 0x0000, 0x0000 }, // 0x3089 HIRAGANA LETTER RA
+    { 0x0000, 0x0000 }, // 0x308a HIRAGANA LETTER RI
+    { 0x0000, 0x0000 }, // 0x308b HIRAGANA LETTER RU
+    { 0x0000, 0x0000 }, // 0x308c HIRAGANA LETTER RE
+    { 0x0000, 0x0000 }, // 0x308d HIRAGANA LETTER RO
+    { 0x0000, 0x0000 }, // 0x308e HIRAGANA LETTER SMALL WA
+    { 0x0000, 0x0000 }, // 0x308f HIRAGANA LETTER WA
+    { 0x0000, 0x0000 }, // 0x3090 HIRAGANA LETTER WI
+    { 0x0000, 0x0000 }, // 0x3091 HIRAGANA LETTER WE
+    { 0x0000, 0x0000 }, // 0x3092 HIRAGANA LETTER WO
+    { 0x0000, 0x0000 }, // 0x3093 HIRAGANA LETTER N
+    { 0x0000, 0x0000 }, // 0x3094 HIRAGANA LETTER VU
+    { 0x0000, 0x0000 }, // 0x3095
+    { 0x0000, 0x0000 }, // 0x3096
+    { 0x0000, 0x0000 }, // 0x3097
+    { 0x0000, 0x0000 }, // 0x3098
+    { 0x0000, 0x0000 }, // 0x3099 COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x309a COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x309b KATAKANA-HIRAGANA VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x309c KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x309d HIRAGANA ITERATION MARK
+    { 0x0000, 0x0000 }, // 0x309e HIRAGANA VOICED ITERATION MARK
+    { 0x0000, 0x0000 }, // 0x309f
+    { 0x0000, 0x0000 }, // 0x30a0
+    { 0x0000, 0x0000 }, // 0x30a1 KATAKANA LETTER SMALL A
+    { 0x0000, 0x0000 }, // 0x30a2 KATAKANA LETTER A
+    { 0x0000, 0x0000 }, // 0x30a3 KATAKANA LETTER SMALL I
+    { 0x0000, 0x0000 }, // 0x30a4 KATAKANA LETTER I
+    { 0x0000, 0x0000 }, // 0x30a5 KATAKANA LETTER SMALL U
+    { 0x30f4, 0x0000 }, // 0x30a6 KATAKANA LETTER U --> KATAKANA LETTER VU
+    { 0x0000, 0x0000 }, // 0x30a7 KATAKANA LETTER SMALL E
+    { 0x0000, 0x0000 }, // 0x30a8 KATAKANA LETTER E
+    { 0x0000, 0x0000 }, // 0x30a9 KATAKANA LETTER SMALL O
+    { 0x0000, 0x0000 }, // 0x30aa KATAKANA LETTER O
+    { 0x30ac, 0x0000 }, // 0x30ab KATAKANA LETTER KA --> KATAKANA LETTER GA
+    { 0x0000, 0x0000 }, // 0x30ac KATAKANA LETTER GA
+    { 0x30ae, 0x0000 }, // 0x30ad KATAKANA LETTER KI --> KATAKANA LETTER GI
+    { 0x0000, 0x0000 }, // 0x30ae KATAKANA LETTER GI
+    { 0x30b0, 0x0000 }, // 0x30af KATAKANA LETTER KU --> KATAKANA LETTER GU
+    { 0x0000, 0x0000 }, // 0x30b0 KATAKANA LETTER GU
+    { 0x30b2, 0x0000 }, // 0x30b1 KATAKANA LETTER KE --> KATAKANA LETTER GE
+    { 0x0000, 0x0000 }, // 0x30b2 KATAKANA LETTER GE
+    { 0x30b4, 0x0000 }, // 0x30b3 KATAKANA LETTER KO --> KATAKANA LETTER GO
+    { 0x0000, 0x0000 }, // 0x30b4 KATAKANA LETTER GO
+    { 0x30b6, 0x0000 }, // 0x30b5 KATAKANA LETTER SA --> KATAKANA LETTER ZA
+    { 0x0000, 0x0000 }, // 0x30b6 KATAKANA LETTER ZA
+    { 0x30b8, 0x0000 }, // 0x30b7 KATAKANA LETTER SI --> KATAKANA LETTER ZI
+    { 0x0000, 0x0000 }, // 0x30b8 KATAKANA LETTER ZI
+    { 0x30ba, 0x0000 }, // 0x30b9 KATAKANA LETTER SU --> KATAKANA LETTER ZU
+    { 0x0000, 0x0000 }, // 0x30ba KATAKANA LETTER ZU
+    { 0x30bc, 0x0000 }, // 0x30bb KATAKANA LETTER SE --> KATAKANA LETTER ZE
+    { 0x0000, 0x0000 }, // 0x30bc KATAKANA LETTER ZE
+    { 0x30be, 0x0000 }, // 0x30bd KATAKANA LETTER SO --> KATAKANA LETTER ZO
+    { 0x0000, 0x0000 }, // 0x30be KATAKANA LETTER ZO
+    { 0x30c0, 0x0000 }, // 0x30bf KATAKANA LETTER TA --> KATAKANA LETTER DA
+    { 0x0000, 0x0000 }, // 0x30c0 KATAKANA LETTER DA
+    { 0x30c2, 0x0000 }, // 0x30c1 KATAKANA LETTER TI --> KATAKANA LETTER DI
+    { 0x0000, 0x0000 }, // 0x30c2 KATAKANA LETTER DI
+    { 0x0000, 0x0000 }, // 0x30c3 KATAKANA LETTER SMALL TU
+    { 0x30c5, 0x0000 }, // 0x30c4 KATAKANA LETTER TU --> KATAKANA LETTER DU
+    { 0x0000, 0x0000 }, // 0x30c5 KATAKANA LETTER DU
+    { 0x30c7, 0x0000 }, // 0x30c6 KATAKANA LETTER TE --> KATAKANA LETTER DE
+    { 0x0000, 0x0000 }, // 0x30c7 KATAKANA LETTER DE
+    { 0x30c9, 0x0000 }, // 0x30c8 KATAKANA LETTER TO --> KATAKANA LETTER DO
+    { 0x0000, 0x0000 }, // 0x30c9 KATAKANA LETTER DO
+    { 0x0000, 0x0000 }, // 0x30ca KATAKANA LETTER NA
+    { 0x0000, 0x0000 }, // 0x30cb KATAKANA LETTER NI
+    { 0x0000, 0x0000 }, // 0x30cc KATAKANA LETTER NU
+    { 0x0000, 0x0000 }, // 0x30cd KATAKANA LETTER NE
+    { 0x0000, 0x0000 }, // 0x30ce KATAKANA LETTER NO
+    { 0x30d0, 0x30d1 }, // 0x30cf KATAKANA LETTER HA --> KATAKANA LETTER BA or KATAKANA LETTER PA
+    { 0x0000, 0x0000 }, // 0x30d0 KATAKANA LETTER BA
+    { 0x0000, 0x0000 }, // 0x30d1 KATAKANA LETTER PA
+    { 0x30d3, 0x30d4 }, // 0x30d2 KATAKANA LETTER HI --> KATAKANA LETTER BI or KATAKANA LETTER PI
+    { 0x0000, 0x0000 }, // 0x30d3 KATAKANA LETTER BI
+    { 0x0000, 0x0000 }, // 0x30d4 KATAKANA LETTER PI
+    { 0x30d6, 0x30d7 }, // 0x30d5 KATAKANA LETTER HU --> KATAKANA LETTER BU or KATAKANA LETTER PU
+    { 0x0000, 0x0000 }, // 0x30d6 KATAKANA LETTER BU
+    { 0x0000, 0x0000 }, // 0x30d7 KATAKANA LETTER PU
+    { 0x30d9, 0x30da }, // 0x30d8 KATAKANA LETTER HE --> KATAKANA LETTER BE or KATAKANA LETTER PE
+    { 0x0000, 0x0000 }, // 0x30d9 KATAKANA LETTER BE
+    { 0x0000, 0x0000 }, // 0x30da KATAKANA LETTER PE
+    { 0x30dc, 0x30dd }, // 0x30db KATAKANA LETTER HO --> KATAKANA LETTER BO or KATAKANA LETTER PO
+    { 0x0000, 0x0000 }, // 0x30dc KATAKANA LETTER BO
+    { 0x0000, 0x0000 }, // 0x30dd KATAKANA LETTER PO
+    { 0x0000, 0x0000 }, // 0x30de KATAKANA LETTER MA
+    { 0x0000, 0x0000 }, // 0x30df KATAKANA LETTER MI
+    { 0x0000, 0x0000 }, // 0x30e0 KATAKANA LETTER MU
+    { 0x0000, 0x0000 }, // 0x30e1 KATAKANA LETTER ME
+    { 0x0000, 0x0000 }, // 0x30e2 KATAKANA LETTER MO
+    { 0x0000, 0x0000 }, // 0x30e3 KATAKANA LETTER SMALL YA
+    { 0x0000, 0x0000 }, // 0x30e4 KATAKANA LETTER YA
+    { 0x0000, 0x0000 }, // 0x30e5 KATAKANA LETTER SMALL YU
+    { 0x0000, 0x0000 }, // 0x30e6 KATAKANA LETTER YU
+    { 0x0000, 0x0000 }, // 0x30e7 KATAKANA LETTER SMALL YO
+    { 0x0000, 0x0000 }, // 0x30e8 KATAKANA LETTER YO
+    { 0x0000, 0x0000 }, // 0x30e9 KATAKANA LETTER RA
+    { 0x0000, 0x0000 }, // 0x30ea KATAKANA LETTER RI
+    { 0x0000, 0x0000 }, // 0x30eb KATAKANA LETTER RU
+    { 0x0000, 0x0000 }, // 0x30ec KATAKANA LETTER RE
+    { 0x0000, 0x0000 }, // 0x30ed KATAKANA LETTER RO
+    { 0x0000, 0x0000 }, // 0x30ee KATAKANA LETTER SMALL WA
+    { 0x30f7, 0x0000 }, // 0x30ef KATAKANA LETTER WA --> KATAKANA LETTER VA
+    { 0x30f8, 0x0000 }, // 0x30f0 KATAKANA LETTER WI --> KATAKANA LETTER VI
+    { 0x30f9, 0x0000 }, // 0x30f1 KATAKANA LETTER WE --> KATAKANA LETTER VE
+    { 0x30fa, 0x0000 }, // 0x30f2 KATAKANA LETTER WO --> KATAKANA LETTER VO
+    { 0x0000, 0x0000 }, // 0x30f3 KATAKANA LETTER N
+    { 0x0000, 0x0000 }, // 0x30f4 KATAKANA LETTER VU
+    { 0x0000, 0x0000 }, // 0x30f5 KATAKANA LETTER SMALL KA
+    { 0x0000, 0x0000 }, // 0x30f6 KATAKANA LETTER SMALL KE
+    { 0x0000, 0x0000 }, // 0x30f7 KATAKANA LETTER VA
+    { 0x0000, 0x0000 }, // 0x30f8 KATAKANA LETTER VI
+    { 0x0000, 0x0000 }, // 0x30f9 KATAKANA LETTER VE
+    { 0x0000, 0x0000 }, // 0x30fa KATAKANA LETTER VO
+    { 0x0000, 0x0000 }, // 0x30fb KATAKANA MIDDLE DOT
+    { 0x0000, 0x0000 }, // 0x30fc KATAKANA-HIRAGANA PROLONGED SOUND MARK
+    { 0x0000, 0x0000 }, // 0x30fd KATAKANA ITERATION MARK
+    { 0x0000, 0x0000 }, // 0x30fe KATAKANA VOICED ITERATION MARK
+    { 0x0000, 0x0000 }  // 0x30ff
+};
+
+
+/*
+  Halfwidth and Fullwidth Forms (U+FF00..U+FFEF)
+  ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.txt
+  ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html
+  http://charts.unicode.org/Web/UFF00.html
+*/
+
+OneToOneMappingTable_t half2full[] = {
+  MAKE_PAIR( 0x0020, 0x3000 ),  // SPACE --> IDEOGRAPHIC SPACE
+  MAKE_PAIR( 0x0021, 0xFF01 ),  // EXCLAMATION MARK --> FULLWIDTH EXCLAMATION MARK
+  MAKE_PAIR( 0x0022, 0xFF02 ),  // QUOTATION MARK --> FULLWIDTH QUOTATION MARK
+  MAKE_PAIR( 0x0023, 0xFF03 ),  // NUMBER SIGN --> FULLWIDTH NUMBER SIGN
+  MAKE_PAIR( 0x0024, 0xFF04 ),  // DOLLAR SIGN --> FULLWIDTH DOLLAR SIGN
+  MAKE_PAIR( 0x0025, 0xFF05 ),  // PERCENT SIGN --> FULLWIDTH PERCENT SIGN
+  MAKE_PAIR( 0x0026, 0xFF06 ),  // AMPERSAND --> FULLWIDTH AMPERSAND
+  MAKE_PAIR( 0x0027, 0xFF07 ),  // APOSTROPHE --> FULLWIDTH APOSTROPHE
+  MAKE_PAIR( 0x0028, 0xFF08 ),  // LEFT PARENTHESIS --> FULLWIDTH LEFT PARENTHESIS
+  MAKE_PAIR( 0x0029, 0xFF09 ),  // RIGHT PARENTHESIS --> FULLWIDTH RIGHT PARENTHESIS
+  MAKE_PAIR( 0x002A, 0xFF0A ),  // ASTERISK --> FULLWIDTH ASTERISK
+  MAKE_PAIR( 0x002B, 0xFF0B ),  // PLUS SIGN --> FULLWIDTH PLUS SIGN
+  MAKE_PAIR( 0x002C, 0xFF0C ),  // COMMA --> FULLWIDTH COMMA
+
+//MAKE_PAIR( 0x002D, 0xFF0D ),  // HYPHEN-MINUS --> FULLWIDTH HYPHEN-MINUS
+  MAKE_PAIR( 0x002D, 0x2212 ),  // HYPHEN-MINUS --> MINUS SIGN
+
+  MAKE_PAIR( 0x002E, 0xFF0E ),  // FULL STOP --> FULLWIDTH FULL STOP
+  MAKE_PAIR( 0x002F, 0xFF0F ),  // SOLIDUS --> FULLWIDTH SOLIDUS
+  MAKE_PAIR( 0x0030, 0xFF10 ),  // DIGIT ZERO --> FULLWIDTH DIGIT ZERO
+  MAKE_PAIR( 0x0031, 0xFF11 ),  // DIGIT ONE --> FULLWIDTH DIGIT ONE
+  MAKE_PAIR( 0x0032, 0xFF12 ),  // DIGIT TWO --> FULLWIDTH DIGIT TWO
+  MAKE_PAIR( 0x0033, 0xFF13 ),  // DIGIT THREE --> FULLWIDTH DIGIT THREE
+  MAKE_PAIR( 0x0034, 0xFF14 ),  // DIGIT FOUR --> FULLWIDTH DIGIT FOUR
+  MAKE_PAIR( 0x0035, 0xFF15 ),  // DIGIT FIVE --> FULLWIDTH DIGIT FIVE
+  MAKE_PAIR( 0x0036, 0xFF16 ),  // DIGIT SIX --> FULLWIDTH DIGIT SIX
+  MAKE_PAIR( 0x0037, 0xFF17 ),  // DIGIT SEVEN --> FULLWIDTH DIGIT SEVEN
+  MAKE_PAIR( 0x0038, 0xFF18 ),  // DIGIT EIGHT --> FULLWIDTH DIGIT EIGHT
+  MAKE_PAIR( 0x0039, 0xFF19 ),  // DIGIT NINE --> FULLWIDTH DIGIT NINE
+  MAKE_PAIR( 0x003A, 0xFF1A ),  // COLON --> FULLWIDTH COLON
+  MAKE_PAIR( 0x003B, 0xFF1B ),  // SEMICOLON --> FULLWIDTH SEMICOLON
+  MAKE_PAIR( 0x003C, 0xFF1C ),  // LESS-THAN SIGN --> FULLWIDTH LESS-THAN SIGN
+  MAKE_PAIR( 0x003D, 0xFF1D ),  // EQUALS SIGN --> FULLWIDTH EQUALS SIGN
+  MAKE_PAIR( 0x003E, 0xFF1E ),  // GREATER-THAN SIGN --> FULLWIDTH GREATER-THAN SIGN
+  MAKE_PAIR( 0x003F, 0xFF1F ),  // QUESTION MARK --> FULLWIDTH QUESTION MARK
+  MAKE_PAIR( 0x0040, 0xFF20 ),  // COMMERCIAL AT --> FULLWIDTH COMMERCIAL AT
+  MAKE_PAIR( 0x0041, 0xFF21 ),  // LATIN CAPITAL LETTER A --> FULLWIDTH LATIN CAPITAL LETTER A
+  MAKE_PAIR( 0x0042, 0xFF22 ),  // LATIN CAPITAL LETTER B --> FULLWIDTH LATIN CAPITAL LETTER B
+  MAKE_PAIR( 0x0043, 0xFF23 ),  // LATIN CAPITAL LETTER C --> FULLWIDTH LATIN CAPITAL LETTER C
+  MAKE_PAIR( 0x0044, 0xFF24 ),  // LATIN CAPITAL LETTER D --> FULLWIDTH LATIN CAPITAL LETTER D
+  MAKE_PAIR( 0x0045, 0xFF25 ),  // LATIN CAPITAL LETTER E --> FULLWIDTH LATIN CAPITAL LETTER E
+  MAKE_PAIR( 0x0046, 0xFF26 ),  // LATIN CAPITAL LETTER F --> FULLWIDTH LATIN CAPITAL LETTER F
+  MAKE_PAIR( 0x0047, 0xFF27 ),  // LATIN CAPITAL LETTER G --> FULLWIDTH LATIN CAPITAL LETTER G
+  MAKE_PAIR( 0x0048, 0xFF28 ),  // LATIN CAPITAL LETTER H --> FULLWIDTH LATIN CAPITAL LETTER H
+  MAKE_PAIR( 0x0049, 0xFF29 ),  // LATIN CAPITAL LETTER I --> FULLWIDTH LATIN CAPITAL LETTER I
+  MAKE_PAIR( 0x004A, 0xFF2A ),  // LATIN CAPITAL LETTER J --> FULLWIDTH LATIN CAPITAL LETTER J
+  MAKE_PAIR( 0x004B, 0xFF2B ),  // LATIN CAPITAL LETTER K --> FULLWIDTH LATIN CAPITAL LETTER K
+  MAKE_PAIR( 0x004C, 0xFF2C ),  // LATIN CAPITAL LETTER L --> FULLWIDTH LATIN CAPITAL LETTER L
+  MAKE_PAIR( 0x004D, 0xFF2D ),  // LATIN CAPITAL LETTER M --> FULLWIDTH LATIN CAPITAL LETTER M
+  MAKE_PAIR( 0x004E, 0xFF2E ),  // LATIN CAPITAL LETTER N --> FULLWIDTH LATIN CAPITAL LETTER N
+  MAKE_PAIR( 0x004F, 0xFF2F ),  // LATIN CAPITAL LETTER O --> FULLWIDTH LATIN CAPITAL LETTER O
+  MAKE_PAIR( 0x0050, 0xFF30 ),  // LATIN CAPITAL LETTER P --> FULLWIDTH LATIN CAPITAL LETTER P
+  MAKE_PAIR( 0x0051, 0xFF31 ),  // LATIN CAPITAL LETTER Q --> FULLWIDTH LATIN CAPITAL LETTER Q
+  MAKE_PAIR( 0x0052, 0xFF32 ),  // LATIN CAPITAL LETTER R --> FULLWIDTH LATIN CAPITAL LETTER R
+  MAKE_PAIR( 0x0053, 0xFF33 ),  // LATIN CAPITAL LETTER S --> FULLWIDTH LATIN CAPITAL LETTER S
+  MAKE_PAIR( 0x0054, 0xFF34 ),  // LATIN CAPITAL LETTER T --> FULLWIDTH LATIN CAPITAL LETTER T
+  MAKE_PAIR( 0x0055, 0xFF35 ),  // LATIN CAPITAL LETTER U --> FULLWIDTH LATIN CAPITAL LETTER U
+  MAKE_PAIR( 0x0056, 0xFF36 ),  // LATIN CAPITAL LETTER V --> FULLWIDTH LATIN CAPITAL LETTER V
+  MAKE_PAIR( 0x0057, 0xFF37 ),  // LATIN CAPITAL LETTER W --> FULLWIDTH LATIN CAPITAL LETTER W
+  MAKE_PAIR( 0x0058, 0xFF38 ),  // LATIN CAPITAL LETTER X --> FULLWIDTH LATIN CAPITAL LETTER X
+  MAKE_PAIR( 0x0059, 0xFF39 ),  // LATIN CAPITAL LETTER Y --> FULLWIDTH LATIN CAPITAL LETTER Y
+  MAKE_PAIR( 0x005A, 0xFF3A ),  // LATIN CAPITAL LETTER Z --> FULLWIDTH LATIN CAPITAL LETTER Z
+  MAKE_PAIR( 0x005B, 0xFF3B ),  // LEFT SQUARE BRACKET --> FULLWIDTH LEFT SQUARE BRACKET
+  MAKE_PAIR( 0x005C, 0xFF3C ),  // REVERSE SOLIDUS --> FULLWIDTH REVERSE SOLIDUS
+  MAKE_PAIR( 0x005D, 0xFF3D ),  // RIGHT SQUARE BRACKET --> FULLWIDTH RIGHT SQUARE BRACKET
+  MAKE_PAIR( 0x005E, 0xFF3E ),  // CIRCUMFLEX ACCENT --> FULLWIDTH CIRCUMFLEX ACCENT
+  MAKE_PAIR( 0x005F, 0xFF3F ),  // LOW LINE --> FULLWIDTH LOW LINE
+  MAKE_PAIR( 0x0060, 0xFF40 ),  // GRAVE ACCENT --> FULLWIDTH GRAVE ACCENT
+  MAKE_PAIR( 0x0061, 0xFF41 ),  // LATIN SMALL LETTER A --> FULLWIDTH LATIN SMALL LETTER A
+  MAKE_PAIR( 0x0062, 0xFF42 ),  // LATIN SMALL LETTER B --> FULLWIDTH LATIN SMALL LETTER B
+  MAKE_PAIR( 0x0063, 0xFF43 ),  // LATIN SMALL LETTER C --> FULLWIDTH LATIN SMALL LETTER C
+  MAKE_PAIR( 0x0064, 0xFF44 ),  // LATIN SMALL LETTER D --> FULLWIDTH LATIN SMALL LETTER D
+  MAKE_PAIR( 0x0065, 0xFF45 ),  // LATIN SMALL LETTER E --> FULLWIDTH LATIN SMALL LETTER E
+  MAKE_PAIR( 0x0066, 0xFF46 ),  // LATIN SMALL LETTER F --> FULLWIDTH LATIN SMALL LETTER F
+  MAKE_PAIR( 0x0067, 0xFF47 ),  // LATIN SMALL LETTER G --> FULLWIDTH LATIN SMALL LETTER G
+  MAKE_PAIR( 0x0068, 0xFF48 ),  // LATIN SMALL LETTER H --> FULLWIDTH LATIN SMALL LETTER H
+  MAKE_PAIR( 0x0069, 0xFF49 ),  // LATIN SMALL LETTER I --> FULLWIDTH LATIN SMALL LETTER I
+  MAKE_PAIR( 0x006A, 0xFF4A ),  // LATIN SMALL LETTER J --> FULLWIDTH LATIN SMALL LETTER J
+  MAKE_PAIR( 0x006B, 0xFF4B ),  // LATIN SMALL LETTER K --> FULLWIDTH LATIN SMALL LETTER K
+  MAKE_PAIR( 0x006C, 0xFF4C ),  // LATIN SMALL LETTER L --> FULLWIDTH LATIN SMALL LETTER L
+  MAKE_PAIR( 0x006D, 0xFF4D ),  // LATIN SMALL LETTER M --> FULLWIDTH LATIN SMALL LETTER M
+  MAKE_PAIR( 0x006E, 0xFF4E ),  // LATIN SMALL LETTER N --> FULLWIDTH LATIN SMALL LETTER N
+  MAKE_PAIR( 0x006F, 0xFF4F ),  // LATIN SMALL LETTER O --> FULLWIDTH LATIN SMALL LETTER O
+  MAKE_PAIR( 0x0070, 0xFF50 ),  // LATIN SMALL LETTER P --> FULLWIDTH LATIN SMALL LETTER P
+  MAKE_PAIR( 0x0071, 0xFF51 ),  // LATIN SMALL LETTER Q --> FULLWIDTH LATIN SMALL LETTER Q
+  MAKE_PAIR( 0x0072, 0xFF52 ),  // LATIN SMALL LETTER R --> FULLWIDTH LATIN SMALL LETTER R
+  MAKE_PAIR( 0x0073, 0xFF53 ),  // LATIN SMALL LETTER S --> FULLWIDTH LATIN SMALL LETTER S
+  MAKE_PAIR( 0x0074, 0xFF54 ),  // LATIN SMALL LETTER T --> FULLWIDTH LATIN SMALL LETTER T
+  MAKE_PAIR( 0x0075, 0xFF55 ),  // LATIN SMALL LETTER U --> FULLWIDTH LATIN SMALL LETTER U
+  MAKE_PAIR( 0x0076, 0xFF56 ),  // LATIN SMALL LETTER V --> FULLWIDTH LATIN SMALL LETTER V
+  MAKE_PAIR( 0x0077, 0xFF57 ),  // LATIN SMALL LETTER W --> FULLWIDTH LATIN SMALL LETTER W
+  MAKE_PAIR( 0x0078, 0xFF58 ),  // LATIN SMALL LETTER X --> FULLWIDTH LATIN SMALL LETTER X
+  MAKE_PAIR( 0x0079, 0xFF59 ),  // LATIN SMALL LETTER Y --> FULLWIDTH LATIN SMALL LETTER Y
+  MAKE_PAIR( 0x007A, 0xFF5A ),  // LATIN SMALL LETTER Z --> FULLWIDTH LATIN SMALL LETTER Z
+  MAKE_PAIR( 0x007B, 0xFF5B ),  // LEFT CURLY BRACKET --> FULLWIDTH LEFT CURLY BRACKET
+  MAKE_PAIR( 0x007C, 0xFF5C ),  // VERTICAL LINE --> FULLWIDTH VERTICAL LINE
+  MAKE_PAIR( 0x007D, 0xFF5D ),  // RIGHT CURLY BRACKET --> FULLWIDTH RIGHT CURLY BRACKET
+  MAKE_PAIR( 0x007E, 0xFF5E ),  // TILDE --> FULLWIDTH TILDE
+  MAKE_PAIR( 0x00A2, 0xFFE0 ),  // CENT SIGN --> FULLWIDTH CENT SIGN
+  MAKE_PAIR( 0x00A3, 0xFFE1 ),  // POUND SIGN --> FULLWIDTH POUND SIGN
+  MAKE_PAIR( 0x00A5, 0xFFE5 ),  // YEN SIGN --> FULLWIDTH YEN SIGN
+  MAKE_PAIR( 0x00A6, 0xFFE4 ),  // BROKEN BAR --> FULLWIDTH BROKEN BAR
+  MAKE_PAIR( 0x00AC, 0xFFE2 ),  // NOT SIGN --> FULLWIDTH NOT SIGN
+  MAKE_PAIR( 0x00AF, 0xFFE3 ),  // MACRON --> FULLWIDTH MACRON
+  MAKE_PAIR( 0x20A9, 0xFFE6 ),  // WON SIGN --> FULLWIDTH WON SIGN
+  MAKE_PAIR( 0xFF61, 0x3002 ),  // HALFWIDTH IDEOGRAPHIC FULL STOP --> IDEOGRAPHIC FULL STOP
+  MAKE_PAIR( 0xFF62, 0x300C ),  // HALFWIDTH LEFT CORNER BRACKET --> LEFT CORNER BRACKET
+  MAKE_PAIR( 0xFF63, 0x300D ),  // HALFWIDTH RIGHT CORNER BRACKET --> RIGHT CORNER BRACKET
+  MAKE_PAIR( 0xFF64, 0x3001 ),  // HALFWIDTH IDEOGRAPHIC COMMA --> IDEOGRAPHIC COMMA
+  MAKE_PAIR( 0xFF65, 0x30FB ),  // HALFWIDTH KATAKANA MIDDLE DOT --> KATAKANA MIDDLE DOT
+  MAKE_PAIR( 0xFF66, 0x30F2 ),  // HALFWIDTH KATAKANA LETTER WO --> KATAKANA LETTER WO
+  MAKE_PAIR( 0xFF67, 0x30A1 ),  // HALFWIDTH KATAKANA LETTER SMALL A --> KATAKANA LETTER SMALL A
+  MAKE_PAIR( 0xFF68, 0x30A3 ),  // HALFWIDTH KATAKANA LETTER SMALL I --> KATAKANA LETTER SMALL I
+  MAKE_PAIR( 0xFF69, 0x30A5 ),  // HALFWIDTH KATAKANA LETTER SMALL U --> KATAKANA LETTER SMALL U
+  MAKE_PAIR( 0xFF6A, 0x30A7 ),  // HALFWIDTH KATAKANA LETTER SMALL E --> KATAKANA LETTER SMALL E
+  MAKE_PAIR( 0xFF6B, 0x30A9 ),  // HALFWIDTH KATAKANA LETTER SMALL O --> KATAKANA LETTER SMALL O
+  MAKE_PAIR( 0xFF6C, 0x30E3 ),  // HALFWIDTH KATAKANA LETTER SMALL YA --> KATAKANA LETTER SMALL YA
+  MAKE_PAIR( 0xFF6D, 0x30E5 ),  // HALFWIDTH KATAKANA LETTER SMALL YU --> KATAKANA LETTER SMALL YU
+  MAKE_PAIR( 0xFF6E, 0x30E7 ),  // HALFWIDTH KATAKANA LETTER SMALL YO --> KATAKANA LETTER SMALL YO
+  MAKE_PAIR( 0xFF6F, 0x30C3 ),  // HALFWIDTH KATAKANA LETTER SMALL TU --> KATAKANA LETTER SMALL TU
+  MAKE_PAIR( 0xFF70, 0x30FC ),  // HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK --> KATAKANA-HIRAGANA PROLONGED SOUND MARK
+  MAKE_PAIR( 0xFF71, 0x30A2 ),  // HALFWIDTH KATAKANA LETTER A --> KATAKANA LETTER A
+  MAKE_PAIR( 0xFF72, 0x30A4 ),  // HALFWIDTH KATAKANA LETTER I --> KATAKANA LETTER I
+  MAKE_PAIR( 0xFF73, 0x30A6 ),  // HALFWIDTH KATAKANA LETTER U --> KATAKANA LETTER U
+  MAKE_PAIR( 0xFF74, 0x30A8 ),  // HALFWIDTH KATAKANA LETTER E --> KATAKANA LETTER E
+  MAKE_PAIR( 0xFF75, 0x30AA ),  // HALFWIDTH KATAKANA LETTER O --> KATAKANA LETTER O
+  MAKE_PAIR( 0xFF76, 0x30AB ),  // HALFWIDTH KATAKANA LETTER KA --> KATAKANA LETTER KA
+  MAKE_PAIR( 0xFF77, 0x30AD ),  // HALFWIDTH KATAKANA LETTER KI --> KATAKANA LETTER KI
+  MAKE_PAIR( 0xFF78, 0x30AF ),  // HALFWIDTH KATAKANA LETTER KU --> KATAKANA LETTER KU
+  MAKE_PAIR( 0xFF79, 0x30B1 ),  // HALFWIDTH KATAKANA LETTER KE --> KATAKANA LETTER KE
+  MAKE_PAIR( 0xFF7A, 0x30B3 ),  // HALFWIDTH KATAKANA LETTER KO --> KATAKANA LETTER KO
+  MAKE_PAIR( 0xFF7B, 0x30B5 ),  // HALFWIDTH KATAKANA LETTER SA --> KATAKANA LETTER SA
+  MAKE_PAIR( 0xFF7C, 0x30B7 ),  // HALFWIDTH KATAKANA LETTER SI --> KATAKANA LETTER SI
+  MAKE_PAIR( 0xFF7D, 0x30B9 ),  // HALFWIDTH KATAKANA LETTER SU --> KATAKANA LETTER SU
+  MAKE_PAIR( 0xFF7E, 0x30BB ),  // HALFWIDTH KATAKANA LETTER SE --> KATAKANA LETTER SE
+  MAKE_PAIR( 0xFF7F, 0x30BD ),  // HALFWIDTH KATAKANA LETTER SO --> KATAKANA LETTER SO
+  MAKE_PAIR( 0xFF80, 0x30BF ),  // HALFWIDTH KATAKANA LETTER TA --> KATAKANA LETTER TA
+  MAKE_PAIR( 0xFF81, 0x30C1 ),  // HALFWIDTH KATAKANA LETTER TI --> KATAKANA LETTER TI
+  MAKE_PAIR( 0xFF82, 0x30C4 ),  // HALFWIDTH KATAKANA LETTER TU --> KATAKANA LETTER TU
+  MAKE_PAIR( 0xFF83, 0x30C6 ),  // HALFWIDTH KATAKANA LETTER TE --> KATAKANA LETTER TE
+  MAKE_PAIR( 0xFF84, 0x30C8 ),  // HALFWIDTH KATAKANA LETTER TO --> KATAKANA LETTER TO
+  MAKE_PAIR( 0xFF85, 0x30CA ),  // HALFWIDTH KATAKANA LETTER NA --> KATAKANA LETTER NA
+  MAKE_PAIR( 0xFF86, 0x30CB ),  // HALFWIDTH KATAKANA LETTER NI --> KATAKANA LETTER NI
+  MAKE_PAIR( 0xFF87, 0x30CC ),  // HALFWIDTH KATAKANA LETTER NU --> KATAKANA LETTER NU
+  MAKE_PAIR( 0xFF88, 0x30CD ),  // HALFWIDTH KATAKANA LETTER NE --> KATAKANA LETTER NE
+  MAKE_PAIR( 0xFF89, 0x30CE ),  // HALFWIDTH KATAKANA LETTER NO --> KATAKANA LETTER NO
+  MAKE_PAIR( 0xFF8A, 0x30CF ),  // HALFWIDTH KATAKANA LETTER HA --> KATAKANA LETTER HA
+  MAKE_PAIR( 0xFF8B, 0x30D2 ),  // HALFWIDTH KATAKANA LETTER HI --> KATAKANA LETTER HI
+  MAKE_PAIR( 0xFF8C, 0x30D5 ),  // HALFWIDTH KATAKANA LETTER HU --> KATAKANA LETTER HU
+  MAKE_PAIR( 0xFF8D, 0x30D8 ),  // HALFWIDTH KATAKANA LETTER HE --> KATAKANA LETTER HE
+  MAKE_PAIR( 0xFF8E, 0x30DB ),  // HALFWIDTH KATAKANA LETTER HO --> KATAKANA LETTER HO
+  MAKE_PAIR( 0xFF8F, 0x30DE ),  // HALFWIDTH KATAKANA LETTER MA --> KATAKANA LETTER MA
+  MAKE_PAIR( 0xFF90, 0x30DF ),  // HALFWIDTH KATAKANA LETTER MI --> KATAKANA LETTER MI
+  MAKE_PAIR( 0xFF91, 0x30E0 ),  // HALFWIDTH KATAKANA LETTER MU --> KATAKANA LETTER MU
+  MAKE_PAIR( 0xFF92, 0x30E1 ),  // HALFWIDTH KATAKANA LETTER ME --> KATAKANA LETTER ME
+  MAKE_PAIR( 0xFF93, 0x30E2 ),  // HALFWIDTH KATAKANA LETTER MO --> KATAKANA LETTER MO
+  MAKE_PAIR( 0xFF94, 0x30E4 ),  // HALFWIDTH KATAKANA LETTER YA --> KATAKANA LETTER YA
+  MAKE_PAIR( 0xFF95, 0x30E6 ),  // HALFWIDTH KATAKANA LETTER YU --> KATAKANA LETTER YU
+  MAKE_PAIR( 0xFF96, 0x30E8 ),  // HALFWIDTH KATAKANA LETTER YO --> KATAKANA LETTER YO
+  MAKE_PAIR( 0xFF97, 0x30E9 ),  // HALFWIDTH KATAKANA LETTER RA --> KATAKANA LETTER RA
+  MAKE_PAIR( 0xFF98, 0x30EA ),  // HALFWIDTH KATAKANA LETTER RI --> KATAKANA LETTER RI
+  MAKE_PAIR( 0xFF99, 0x30EB ),  // HALFWIDTH KATAKANA LETTER RU --> KATAKANA LETTER RU
+  MAKE_PAIR( 0xFF9A, 0x30EC ),  // HALFWIDTH KATAKANA LETTER RE --> KATAKANA LETTER RE
+  MAKE_PAIR( 0xFF9B, 0x30ED ),  // HALFWIDTH KATAKANA LETTER RO --> KATAKANA LETTER RO
+  MAKE_PAIR( 0xFF9C, 0x30EF ),  // HALFWIDTH KATAKANA LETTER WA --> KATAKANA LETTER WA
+  MAKE_PAIR( 0xFF9D, 0x30F3 ),  // HALFWIDTH KATAKANA LETTER N --> KATAKANA LETTER N
+  MAKE_PAIR( 0xFF9E, 0x3099 ),  // HALFWIDTH KATAKANA VOICED SOUND MARK --> COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+  MAKE_PAIR( 0xFF9F, 0x309A ),  // HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK --> COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+  MAKE_PAIR( 0xFFA0, 0x3164 ),  // HALFWIDTH HANGUL FILLER --> HANGUL FILLER
+  MAKE_PAIR( 0xFFA1, 0x3131 ),  // HALFWIDTH HANGUL LETTER KIYEOK --> HANGUL LETTER KIYEOK
+  MAKE_PAIR( 0xFFA2, 0x3132 ),  // HALFWIDTH HANGUL LETTER SSANGKIYEOK --> HANGUL LETTER SSANGKIYEOK
+  MAKE_PAIR( 0xFFA3, 0x3133 ),  // HALFWIDTH HANGUL LETTER KIYEOK-SIOS --> HANGUL LETTER KIYEOK-SIOS
+  MAKE_PAIR( 0xFFA4, 0x3134 ),  // HALFWIDTH HANGUL LETTER NIEUN --> HANGUL LETTER NIEUN
+  MAKE_PAIR( 0xFFA5, 0x3135 ),  // HALFWIDTH HANGUL LETTER NIEUN-CIEUC --> HANGUL LETTER NIEUN-CIEUC
+  MAKE_PAIR( 0xFFA6, 0x3136 ),  // HALFWIDTH HANGUL LETTER NIEUN-HIEUH --> HANGUL LETTER NIEUN-HIEUH
+  MAKE_PAIR( 0xFFA7, 0x3137 ),  // HALFWIDTH HANGUL LETTER TIKEUT --> HANGUL LETTER TIKEUT
+  MAKE_PAIR( 0xFFA8, 0x3138 ),  // HALFWIDTH HANGUL LETTER SSANGTIKEUT --> HANGUL LETTER SSANGTIKEUT
+  MAKE_PAIR( 0xFFA9, 0x3139 ),  // HALFWIDTH HANGUL LETTER RIEUL --> HANGUL LETTER RIEUL
+  MAKE_PAIR( 0xFFAA, 0x313A ),  // HALFWIDTH HANGUL LETTER RIEUL-KIYEOK --> HANGUL LETTER RIEUL-KIYEOK
+  MAKE_PAIR( 0xFFAB, 0x313B ),  // HALFWIDTH HANGUL LETTER RIEUL-MIEUM --> HANGUL LETTER RIEUL-MIEUM
+  MAKE_PAIR( 0xFFAC, 0x313C ),  // HALFWIDTH HANGUL LETTER RIEUL-PIEUP --> HANGUL LETTER RIEUL-PIEUP
+  MAKE_PAIR( 0xFFAD, 0x313D ),  // HALFWIDTH HANGUL LETTER RIEUL-SIOS --> HANGUL LETTER RIEUL-SIOS
+  MAKE_PAIR( 0xFFAE, 0x313E ),  // HALFWIDTH HANGUL LETTER RIEUL-THIEUTH --> HANGUL LETTER RIEUL-THIEUTH
+  MAKE_PAIR( 0xFFAF, 0x313F ),  // HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH --> HANGUL LETTER RIEUL-PHIEUPH
+  MAKE_PAIR( 0xFFB0, 0x3140 ),  // HALFWIDTH HANGUL LETTER RIEUL-HIEUH --> HANGUL LETTER RIEUL-HIEUH
+  MAKE_PAIR( 0xFFB1, 0x3141 ),  // HALFWIDTH HANGUL LETTER MIEUM --> HANGUL LETTER MIEUM
+  MAKE_PAIR( 0xFFB2, 0x3142 ),  // HALFWIDTH HANGUL LETTER PIEUP --> HANGUL LETTER PIEUP
+  MAKE_PAIR( 0xFFB3, 0x3143 ),  // HALFWIDTH HANGUL LETTER SSANGPIEUP --> HANGUL LETTER SSANGPIEUP
+  MAKE_PAIR( 0xFFB4, 0x3144 ),  // HALFWIDTH HANGUL LETTER PIEUP-SIOS --> HANGUL LETTER PIEUP-SIOS
+  MAKE_PAIR( 0xFFB5, 0x3145 ),  // HALFWIDTH HANGUL LETTER SIOS --> HANGUL LETTER SIOS
+  MAKE_PAIR( 0xFFB6, 0x3146 ),  // HALFWIDTH HANGUL LETTER SSANGSIOS --> HANGUL LETTER SSANGSIOS
+  MAKE_PAIR( 0xFFB7, 0x3147 ),  // HALFWIDTH HANGUL LETTER IEUNG --> HANGUL LETTER IEUNG
+  MAKE_PAIR( 0xFFB8, 0x3148 ),  // HALFWIDTH HANGUL LETTER CIEUC --> HANGUL LETTER CIEUC
+  MAKE_PAIR( 0xFFB9, 0x3149 ),  // HALFWIDTH HANGUL LETTER SSANGCIEUC --> HANGUL LETTER SSANGCIEUC
+  MAKE_PAIR( 0xFFBA, 0x314A ),  // HALFWIDTH HANGUL LETTER CHIEUCH --> HANGUL LETTER CHIEUCH
+  MAKE_PAIR( 0xFFBB, 0x314B ),  // HALFWIDTH HANGUL LETTER KHIEUKH --> HANGUL LETTER KHIEUKH
+  MAKE_PAIR( 0xFFBC, 0x314C ),  // HALFWIDTH HANGUL LETTER THIEUTH --> HANGUL LETTER THIEUTH
+  MAKE_PAIR( 0xFFBD, 0x314D ),  // HALFWIDTH HANGUL LETTER PHIEUPH --> HANGUL LETTER PHIEUPH
+  MAKE_PAIR( 0xFFBE, 0x314E ),  // HALFWIDTH HANGUL LETTER HIEUH --> HANGUL LETTER HIEUH
+  MAKE_PAIR( 0xFFC2, 0x314F ),  // HALFWIDTH HANGUL LETTER A --> HANGUL LETTER A
+  MAKE_PAIR( 0xFFC3, 0x3150 ),  // HALFWIDTH HANGUL LETTER AE --> HANGUL LETTER AE
+  MAKE_PAIR( 0xFFC4, 0x3151 ),  // HALFWIDTH HANGUL LETTER YA --> HANGUL LETTER YA
+  MAKE_PAIR( 0xFFC5, 0x3152 ),  // HALFWIDTH HANGUL LETTER YAE --> HANGUL LETTER YAE
+  MAKE_PAIR( 0xFFC6, 0x3153 ),  // HALFWIDTH HANGUL LETTER EO --> HANGUL LETTER EO
+  MAKE_PAIR( 0xFFC7, 0x3154 ),  // HALFWIDTH HANGUL LETTER E --> HANGUL LETTER E
+  MAKE_PAIR( 0xFFCA, 0x3155 ),  // HALFWIDTH HANGUL LETTER YEO --> HANGUL LETTER YEO
+  MAKE_PAIR( 0xFFCB, 0x3156 ),  // HALFWIDTH HANGUL LETTER YE --> HANGUL LETTER YE
+  MAKE_PAIR( 0xFFCC, 0x3157 ),  // HALFWIDTH HANGUL LETTER O --> HANGUL LETTER O
+  MAKE_PAIR( 0xFFCD, 0x3158 ),  // HALFWIDTH HANGUL LETTER WA --> HANGUL LETTER WA
+  MAKE_PAIR( 0xFFCE, 0x3159 ),  // HALFWIDTH HANGUL LETTER WAE --> HANGUL LETTER WAE
+  MAKE_PAIR( 0xFFCF, 0x315A ),  // HALFWIDTH HANGUL LETTER OE --> HANGUL LETTER OE
+  MAKE_PAIR( 0xFFD2, 0x315B ),  // HALFWIDTH HANGUL LETTER YO --> HANGUL LETTER YO
+  MAKE_PAIR( 0xFFD3, 0x315C ),  // HALFWIDTH HANGUL LETTER U --> HANGUL LETTER U
+  MAKE_PAIR( 0xFFD4, 0x315D ),  // HALFWIDTH HANGUL LETTER WEO --> HANGUL LETTER WEO
+  MAKE_PAIR( 0xFFD5, 0x315E ),  // HALFWIDTH HANGUL LETTER WE --> HANGUL LETTER WE
+  MAKE_PAIR( 0xFFD6, 0x315F ),  // HALFWIDTH HANGUL LETTER WI --> HANGUL LETTER WI
+  MAKE_PAIR( 0xFFD7, 0x3160 ),  // HALFWIDTH HANGUL LETTER YU --> HANGUL LETTER YU
+  MAKE_PAIR( 0xFFDA, 0x3161 ),  // HALFWIDTH HANGUL LETTER EU --> HANGUL LETTER EU
+  MAKE_PAIR( 0xFFDB, 0x3162 ),  // HALFWIDTH HANGUL LETTER YI --> HANGUL LETTER YI
+  MAKE_PAIR( 0xFFDC, 0x3163 ),  // HALFWIDTH HANGUL LETTER I --> HANGUL LETTER I
+  MAKE_PAIR( 0xFFE8, 0x2502 ),  // HALFWIDTH FORMS LIGHT VERTICAL --> BOX DRAWINGS LIGHT VERTICAL
+  MAKE_PAIR( 0xFFE9, 0x2190 ),  // HALFWIDTH LEFTWARDS ARROW --> LEFTWARDS ARROW
+  MAKE_PAIR( 0xFFEA, 0x2191 ),  // HALFWIDTH UPWARDS ARROW --> UPWARDS ARROW
+  MAKE_PAIR( 0xFFEB, 0x2192 ),  // HALFWIDTH RIGHTWARDS ARROW --> RIGHTWARDS ARROW
+  MAKE_PAIR( 0xFFEC, 0x2193 ),  // HALFWIDTH DOWNWARDS ARROW --> DOWNWARDS ARROW
+  MAKE_PAIR( 0xFFED, 0x25A0 ),  // HALFWIDTH BLACK SQUARE --> BLACK SQUARE
+  MAKE_PAIR( 0xFFEE, 0x25CB )   // HALFWIDTH WHITE CIRCLE --> WHITE CIRCLE
+};
+
+} } } }
+
+#endif
-- 
cgit