]> granicus.if.org Git - php/commitdiff
Upgrade PCRE library to 5.0.
authorAndrei Zmievski <andrei@php.net>
Fri, 27 May 2005 18:12:43 +0000 (18:12 +0000)
committerAndrei Zmievski <andrei@php.net>
Fri, 27 May 2005 18:12:43 +0000 (18:12 +0000)
29 files changed:
ext/pcre/config.m4
ext/pcre/pcrelib/AUTHORS
ext/pcre/pcrelib/COPYING
ext/pcre/pcrelib/ChangeLog
ext/pcre/pcrelib/LICENCE
ext/pcre/pcrelib/NEWS
ext/pcre/pcrelib/NON-UNIX-USE
ext/pcre/pcrelib/README
ext/pcre/pcrelib/dftables.c
ext/pcre/pcrelib/doc/Tech.Notes
ext/pcre/pcrelib/doc/pcre.txt
ext/pcre/pcrelib/get.c
ext/pcre/pcrelib/internal.h
ext/pcre/pcrelib/libpcre.def [new file with mode: 0644]
ext/pcre/pcrelib/libpcreposix.def [new file with mode: 0644]
ext/pcre/pcrelib/maketables.c
ext/pcre/pcrelib/pcre.c
ext/pcre/pcrelib/pcre.h
ext/pcre/pcrelib/pcredemo.c [new file with mode: 0644]
ext/pcre/pcrelib/pcregrep.c
ext/pcre/pcrelib/pcreposix.c
ext/pcre/pcrelib/pcreposix.h
ext/pcre/pcrelib/pcretest.c
ext/pcre/pcrelib/study.c
ext/pcre/pcrelib/ucp.c [new file with mode: 0644]
ext/pcre/pcrelib/ucp.h [new file with mode: 0644]
ext/pcre/pcrelib/ucpinternal.h [new file with mode: 0644]
ext/pcre/pcrelib/ucptable.c [new file with mode: 0644]
ext/pcre/pcrelib/ucptypetable.c [new file with mode: 0644]

index 02e71bd25b0f2cbe6ad03fd6a0170a3a039b17ea..e61468672caf63d176a824cf37b63119d97fb2b9 100644 (file)
@@ -13,7 +13,7 @@ PHP_ARG_WITH(pcre-regex,for PCRE support,
 
 if test "$PHP_PCRE_REGEX" != "no"; then
   if test "$PHP_PCRE_REGEX" = "yes"; then
-    PHP_NEW_EXTENSION(pcre, pcrelib/maketables.c pcrelib/get.c pcrelib/study.c pcrelib/pcre.c php_pcre.c, $ext_shared,,-DSUPPORT_UTF8 -DLINK_SIZE=2 -DPOSIX_MALLOC_THRESHOLD=10 -I@ext_srcdir@/pcrelib)
+    PHP_NEW_EXTENSION(pcre, pcrelib/maketables.c pcrelib/get.c pcrelib/study.c pcrelib/pcre.c pcrelib/ucp.c pcrelib/ucptypetable.c php_pcre.c, $ext_shared,,-DSUPPORT_UTF8 -DSUPPORT_UCP -DLINK_SIZE=2 -DPOSIX_MALLOC_THRESHOLD=10 -DMATCH_LIMIT=10000000 -I@ext_srcdir@/pcrelib)
     PHP_ADD_BUILD_DIR($ext_builddir/pcrelib)
     AC_DEFINE(HAVE_BUNDLED_PCRE, 1, [ ])
   else
@@ -50,7 +50,7 @@ if test "$PHP_PCRE_REGEX" != "no"; then
     
     AC_DEFINE(HAVE_PCRE, 1, [ ])
     PHP_ADD_INCLUDE($PCRE_INCDIR)
-    PHP_NEW_EXTENSION(pcre, php_pcre.c, $ext_shared,,-DSUPPORT_UTF8 -DLINK_SIZE=2 -DPOSIX_MALLOC_THRESHOLD=10)
+    PHP_NEW_EXTENSION(pcre, php_pcre.c, $ext_shared,,-DSUPPORT_UTF8 -DLINK_SIZE=2 -DPOSIX_MALLOC_THRESHOLD=10 -DMATCH_LIMIT=10000000)
   fi
   PHP_SUBST(PCRE_SHARED_LIBADD)
 fi
index 622ba1c9a921f1ebd3a3b29a5c67e63ee0cf1373..00bd1d0642c43510e1595426551e0e6d50b4a189 100644 (file)
@@ -3,4 +3,4 @@ Written by: Philip Hazel <ph10@cam.ac.uk>
 University of Cambridge Computing Service,
 Cambridge, England. Phone: +44 1223 334714.
 
-Copyright (c) 1997-2003 University of Cambridge
+Copyright (c) 1997-2004 University of Cambridge
index 09a242c101133910ac819b871505ea48dfcdf185..1573583b6c095d444954816242be287e64be3d71 100644 (file)
@@ -4,51 +4,42 @@ PCRE LICENCE
 PCRE is a library of functions to support regular expressions whose syntax
 and semantics are as close as possible to those of the Perl 5 language.
 
+Release 5 of PCRE is distributed under the terms of the "BSD" licence, as
+specified below. The documentation for PCRE, supplied in the "doc"
+directory, is distributed under the same terms as the software itself.
+
 Written by: Philip Hazel <ph10@cam.ac.uk>
 
 University of Cambridge Computing Service,
 Cambridge, England. Phone: +44 1223 334714.
 
-Copyright (c) 1997-2003 University of Cambridge
-
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software 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.
-
-2. The origin of this software must not be misrepresented, either by
-   explicit claim or by omission. In practice, this means that if you use
-   PCRE in software that you distribute to others, commercially or
-   otherwise, you must put a sentence like this
-
-     Regular expression support is provided by the PCRE library package,
-     which is open source software, written by Philip Hazel, and copyright
-     by the University of Cambridge, England.
-
-   somewhere reasonably visible in your documentation and in any relevant
-   files or online help data or similar. A reference to the ftp site for
-   the source, that is, to
-
-     ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
-
-   should also be given in the documentation. However, this condition is not
-   intended to apply to whole chains of software. If package A includes PCRE,
-   it must acknowledge it, but if package B is software that includes package
-   A, the condition is not imposed on package B (unless it uses PCRE
-   independently).
-
-3. Altered versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
-   General Purpose Licence (GPL), or Lesser General Purpose Licence (LGPL),
-   then the terms of that licence shall supersede any condition above with
-   which it is incompatible.
-
-The documentation for PCRE, supplied in the "doc" directory, is distributed
-under the same terms as the software itself.
+Copyright (c) 1997-2004 University of Cambridge
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
 
 End
index edc4aea49e849df0e66213a53ba221dd5f317da4..59aa955bd3650a14a53f9f13a76f3c2ec3875cb3 100644 (file)
@@ -1,6 +1,142 @@
 ChangeLog for PCRE
 ------------------
 
+Version 5.0 13-Sep-04
+---------------------
+
+ 1. Internal change: literal characters are no longer packed up into items
+    containing multiple characters in a single byte-string. Each character
+    is now matched using a separate opcode. However, there may be more than one
+    byte in the character in UTF-8 mode.
+
+ 2. The pcre_callout_block structure has two new fields: pattern_position and
+    next_item_length. These contain the offset in the pattern to the next match
+    item, and its length, respectively.
+
+ 3. The PCRE_AUTO_CALLOUT option for pcre_compile() requests the automatic
+    insertion of callouts before each pattern item. Added the /C option to
+    pcretest to make use of this.
+
+ 4. On the advice of a Windows user, the lines
+
+      #if defined(_WIN32) || defined(WIN32)
+      _setmode( _fileno( stdout ), 0x8000 );
+      #endif  /* defined(_WIN32) || defined(WIN32) */
+
+    have been added to the source of pcretest. This apparently does useful
+    magic in relation to line terminators.
+
+ 5. Changed "r" and "w" in the calls to fopen() in pcretest to "rb" and "wb"
+    for the benefit of those environments where the "b" makes a difference.
+
+ 6. The icc compiler has the same options as gcc, but "configure" doesn't seem
+    to know about it. I have put a hack into configure.in that adds in code
+    to set GCC=yes if CC=icc. This seems to end up at a point in the
+    generated configure script that is early enough to affect the setting of
+    compiler options, which is what is needed, but I have no means of testing
+    whether it really works. (The user who reported this had patched the
+    generated configure script, which of course I cannot do.)
+
+    LATER: After change 22 below (new libtool files), the configure script
+    seems to know about icc (and also ecc). Therefore, I have commented out
+    this hack in configure.in.
+
+ 7. Added support for pkg-config (2 patches were sent in).
+
+ 8. Negated POSIX character classes that used a combination of internal tables
+    were completely broken. These were [[:^alpha:]], [[:^alnum:]], and
+    [[:^ascii]]. Typically, they would match almost any characters. The other
+    POSIX classes were not broken in this way.
+
+ 9. Matching the pattern "\b.*?" against "ab cd", starting at offset 1, failed
+    to find the match, as PCRE was deluded into thinking that the match had to
+    start at the start point or following a newline. The same bug applied to
+    patterns with negative forward assertions or any backward assertions
+    preceding ".*" at the start, unless the pattern required a fixed first
+    character. This was a failing pattern: "(?!.bcd).*". The bug is now fixed.
+
+10. In UTF-8 mode, when moving forwards in the subject after a failed match
+    starting at the last subject character, bytes beyond the end of the subject
+    string were read.
+
+11. Renamed the variable "class" as "classbits" to make life easier for C++
+    users. (Previously there was a macro definition, but it apparently wasn't
+    enough.)
+
+12. Added the new field "tables" to the extra data so that tables can be passed
+    in at exec time, or the internal tables can be re-selected. This allows
+    a compiled regex to be saved and re-used at a later time by a different
+    program that might have everything at different addresses.
+
+13. Modified the pcre-config script so that, when run on Solaris, it shows a
+    -R library as well as a -L library.
+
+14. The debugging options of pcretest (-d on the command line or D on a
+    pattern) showed incorrect output for anything following an extended class
+    that contained multibyte characters and which was followed by a quantifier.
+
+15. Added optional support for general category Unicode character properties
+    via the \p, \P, and \X escapes. Unicode property support implies UTF-8
+    support. It adds about 90K to the size of the library. The meanings of the
+    inbuilt class escapes such as \d and \s have NOT been changed.
+
+16. Updated pcredemo.c to include calls to free() to release the memory for the
+    compiled pattern.
+
+17. The generated file chartables.c was being created in the source directory
+    instead of in the building directory. This caused the build to fail if the
+    source directory was different from the building directory, and was
+    read-only.
+
+18. Added some sample Win commands from Mark Tetrode into the NON-UNIX-USE
+    file. No doubt somebody will tell me if they don't make sense... Also added
+    Dan Mooney's comments about building on OpenVMS.
+
+19. Added support for partial matching via the PCRE_PARTIAL option for
+    pcre_exec() and the \P data escape in pcretest.
+
+20. Extended pcretest with 3 new pattern features:
+
+    (i)   A pattern option of the form ">rest-of-line" causes pcretest to
+          write the compiled pattern to the file whose name is "rest-of-line".
+          This is a straight binary dump of the data, with the saved pointer to
+          the character tables forced to be NULL. The study data, if any, is
+          written too. After writing, pcretest reads a new pattern.
+
+    (ii)  If, instead of a pattern, "<rest-of-line" is given, pcretest reads a
+          compiled pattern from the given file. There must not be any
+          occurrences of "<" in the file name (pretty unlikely); if there are,
+          pcretest will instead treat the initial "<" as a pattern delimiter.
+          After reading in the pattern, pcretest goes on to read data lines as
+          usual.
+
+    (iii) The F pattern option causes pcretest to flip the bytes in the 32-bit
+          and 16-bit fields in a compiled pattern, to simulate a pattern that
+          was compiled on a host of opposite endianness.
+
+21. The pcre-exec() function can now cope with patterns that were compiled on
+    hosts of opposite endianness, with this restriction:
+
+      As for any compiled expression that is saved and used later, the tables
+      pointer field cannot be preserved; the extra_data field in the arguments
+      to pcre_exec() should be used to pass in a tables address if a value
+      other than the default internal tables were used at compile time.
+
+22. Calling pcre_exec() with a negative value of the "ovecsize" parameter is
+    now diagnosed as an error. Previously, most of the time, a negative number
+    would have been treated as zero, but if in addition "ovector" was passed as
+    NULL, a crash could occur.
+
+23. Updated the files ltmain.sh, config.sub, config.guess, and aclocal.m4 with
+    new versions from the libtool 1.5 distribution (the last one is a copy of
+    a file called libtool.m4). This seems to have fixed the need to patch
+    "configure" to support Darwin 1.3 (which I used to do). However, I still
+    had to patch ltmain.sh to ensure that ${SED} is set (it isn't on my
+    workstation).
+
+24. Changed the PCRE licence to be the more standard "BSD" licence.
+
+
 Version 4.5 01-Dec-03
 ---------------------
 
index 09a242c101133910ac819b871505ea48dfcdf185..1573583b6c095d444954816242be287e64be3d71 100644 (file)
@@ -4,51 +4,42 @@ PCRE LICENCE
 PCRE is a library of functions to support regular expressions whose syntax
 and semantics are as close as possible to those of the Perl 5 language.
 
+Release 5 of PCRE is distributed under the terms of the "BSD" licence, as
+specified below. The documentation for PCRE, supplied in the "doc"
+directory, is distributed under the same terms as the software itself.
+
 Written by: Philip Hazel <ph10@cam.ac.uk>
 
 University of Cambridge Computing Service,
 Cambridge, England. Phone: +44 1223 334714.
 
-Copyright (c) 1997-2003 University of Cambridge
-
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software 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.
-
-2. The origin of this software must not be misrepresented, either by
-   explicit claim or by omission. In practice, this means that if you use
-   PCRE in software that you distribute to others, commercially or
-   otherwise, you must put a sentence like this
-
-     Regular expression support is provided by the PCRE library package,
-     which is open source software, written by Philip Hazel, and copyright
-     by the University of Cambridge, England.
-
-   somewhere reasonably visible in your documentation and in any relevant
-   files or online help data or similar. A reference to the ftp site for
-   the source, that is, to
-
-     ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
-
-   should also be given in the documentation. However, this condition is not
-   intended to apply to whole chains of software. If package A includes PCRE,
-   it must acknowledge it, but if package B is software that includes package
-   A, the condition is not imposed on package B (unless it uses PCRE
-   independently).
-
-3. Altered versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
-   General Purpose Licence (GPL), or Lesser General Purpose Licence (LGPL),
-   then the terms of that licence shall supersede any condition above with
-   which it is incompatible.
-
-The documentation for PCRE, supplied in the "doc" directory, is distributed
-under the same terms as the software itself.
+Copyright (c) 1997-2004 University of Cambridge
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
 
 End
index 26219749e9456e3a872b62fd3b04643633d38360..e9a5cf255e3aee8fab35e49523460527cb80b387 100644 (file)
@@ -1,6 +1,53 @@
 News about PCRE releases
 ------------------------
 
+Release 5.0 13-Sep-04
+---------------------
+
+The licence under which PCRE is released has been changed to the more
+conventional "BSD" licence.
+
+In the code, some bugs have been fixed, and there are also some major changes
+in this release (which is why I've increased the number to 5.0). Some changes
+are internal rearrangements, and some provide a number of new facilities. The
+new features are:
+
+1. There's an "automatic callout" feature that inserts callouts before every
+   item in the regex, and there's a new callout field that gives the position
+   in the pattern - useful for debugging and tracing.
+
+2. The extra_data structure can now be used to pass in a set of character
+   tables at exec time. This is useful if compiled regex are saved and re-used
+   at a later time when the tables may not be at the same address. If the
+   default internal tables are used, the pointer saved with the compiled
+   pattern is now set to NULL, which means that you don't need to do anything
+   special unless you are using custom tables.
+
+3. It is possible, with some restrictions on the content of the regex, to
+   request "partial" matching. A special return code is given if all of the
+   subject string matched part of the regex. This could be useful for testing
+   an input field as it is being typed.
+
+4. There is now some optional support for Unicode character properties, which
+   means that the patterns items such as \p{Lu} and \X can now be used. Only
+   the general category properties are supported. If PCRE is compiled with this
+   support, an additional 90K data structure is include, which increases the
+   size of the library dramatically.
+
+5. There is support for saving compiled patterns and re-using them later.
+
+6. There is support for running regular expressions that were compiled on a
+   different host with the opposite endianness.
+
+7. The pcretest program has been extended to accommodate the new features.
+
+The main internal rearrangement is that sequences of literal characters are no
+longer handled as strings. Instead, each character is handled on its own. This
+makes some UTF-8 handling easier, and makes the support of partial matching
+possible. Compiled patterns containing long literal strings will be larger as a
+result of this change; I hope that performance will not be much affected.
+
+
 Release 4.5 01-Dec-03
 ---------------------
 
index c015b214bdd79a67143806543d1d20e9b4834f31..f6280af6f694e18573cbeea15fa67ad0a3eaba6a 100644 (file)
@@ -1,19 +1,25 @@
 Compiling PCRE on non-Unix systems
 ----------------------------------
 
-See below for comments on Cygwin or MinGW usage. I (Philip Hazel) have no
-knowledge of Windows sytems and how their libraries work. The items in the
-PCRE Makefile that relate to anything other than Unix-like systems have been
-contributed by PCRE users. There are some other comments and files in the
-Contrib directory on the ftp site that you may find useful.
+See below for comments on Cygwin or MinGW and OpenVMS usage. I (Philip Hazel)
+have no knowledge of Windows or VMS sytems and how their libraries work. The
+items in the PCRE Makefile that relate to anything other than Unix-like systems
+have been contributed by PCRE users. There are some other comments and files in
+the Contrib directory on the ftp site that you may find useful. See
 
-The following are generic comments about building PCRE:
+  ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/Contrib
 
 If you want to compile PCRE for a non-Unix system (or perhaps, more strictly,
-for a system that does not support "configure" and make files), note that PCRE
-consists entirely of code written in Standard C, and so should compile
-successfully on any machine with a Standard C compiler and library, using
-normal compiling commands to do the following:
+for a system that does not support "configure" and "make" files), note that
+PCRE consists entirely of code written in Standard C, and so should compile
+successfully on any system that has a Standard C compiler and library.
+
+
+GENERIC INSTRUCTIONS
+
+The following are generic comments about building PCRE. The interspersed
+indented commands are suggestions from Mark Tetrode as to which commands you
+might use on a Windows system to build a static library.
 
 (1) Copy or rename the file config.in as config.h, and change the macros that
 define HAVE_STRERROR and HAVE_MEMMOVE to define them as 1 rather than 0.
@@ -23,32 +29,85 @@ particular, if you want to force a specific value for newline, you can define
 the NEWLINE macro. The default is to use '\n', thereby using whatever value
 your compiler gives to '\n'.
 
+  rem Mark Tetrode's commands
+  copy config.in config.h
+  rem Use write, because notepad cannot handle UNIX files. Change values.
+  write config.h
+
 (2) Copy or rename the file pcre.in as pcre.h, and change the macro definitions
 for PCRE_MAJOR, PCRE_MINOR, and PCRE_DATE near its start to the values set in
 configure.in.
 
+  rem Mark Tetrode's commands
+  copy pcre.in pcre.h
+  rem Read values from configure.in
+  write configure.in
+  rem Change values
+  write pcre.h
+
 (3) Compile dftables.c as a stand-alone program, and then run it with
 the single argument "chartables.c". This generates a set of standard
 character tables and writes them to that file.
 
+  rem Mark Tetrode's commands
+  rem Compile & run
+  cl -DSUPPORT_UTF8 dftables.c
+  dftables.exe > chartables.c
+
 (4) Compile maketables.c, get.c, study.c and pcre.c and link them all
 together into an object library in whichever form your system keeps such
 libraries. This is the pcre library (chartables.c is included by means of an
 #include directive). If your system has static and shared libraries, you may
 have to do this once for each type.
 
+  rem Mark Tetrode's commands, for a static library
+  rem Compile & lib
+  cl -DSUPPORT_UTF8 -DPOSIX_MALLOC_THRESHOLD=10 /c maketables.c get.c study.c pcre.c
+  lib /OUT:pcre.lib maketables.obj get.obj study.obj pcre.obj
+
 (5) Similarly, compile pcreposix.c and link it (on its own) as the pcreposix
 library.
 
+  rem Mark Tetrode's commands, for a static library
+  rem Compile & lib
+  cl -DSUPPORT_UTF8 -DPOSIX_MALLOC_THRESHOLD=10 /c pcreposix.c
+  lib /OUT:pcreposix.lib pcreposix.obj
+
 (6) Compile the test program pcretest.c. This needs the functions in the
 pcre and pcreposix libraries when linking.
 
+  rem Mark Tetrode's commands
+  rem compile & link
+  cl pcretest.c pcre.lib pcreposix.lib
+
 (7) Run pcretest on the testinput files in the testdata directory, and check
 that the output matches the corresponding testoutput files. You must use the
 -i option when checking testinput2. Note that the supplied files are in Unix
 format, with just LF characters as line terminators. You may need to edit them
 to change this if your system uses a different convention.
 
+  rem Mark Tetrode's commands
+  rem Make a change, i.e. space, backspace, and save again - do this for all
+  rem to change UNIX to Win, \n to \n\r
+  write testoutput1
+  write testoutput2
+  write testoutput3
+  write testoutput4
+  write testoutput5
+  pcretest testdata\testinput1 testdata\myoutput1
+  windiff testdata\testoutput1 testdata\myoutput1
+  pcretest -i testdata\testinput2 testdata\myoutput2
+  windiff testdata\testoutput2 testdata\myoutput2
+  pcretest testdata\testinput3 testdata\myoutput3
+  windiff testdata\testoutput3 testdata\myoutput3
+  pcretest testdata\testinput4 testdata\myoutput4
+  windiff testdata\testoutput4 testdata\myoutput4
+  pcretest testdata\testinput5 testdata\myoutput5
+  windiff testdata\testoutput5 testdata\myoutput5
+
+
+FURTHER REMARKS
+
 If you have a system without "configure" but where you can use a Makefile, edit
 Makefile.in to create Makefile, substituting suitable values for the variables
 at the head of the file.
@@ -119,4 +178,67 @@ void  (*pcre_free)(void *) = free;
 #endif
 =========================
 
+
+BUILDING PCRE ON OPENVMS
+
+Dan Mooney sent the following comments about building PCRE on OpenVMS:
+
+"It was quite easy to compile and link the library. I don't have a formal
+make file but the attached file [reproduced below] contains the OpenVMS DCL
+commands I used to build the library. I had to add #define
+POSIX_MALLOC_THRESHOLD 10 to pcre.h since it was not defined anywhere.
+
+The library was built on:
+O/S: HP OpenVMS v7.3-1
+Compiler: Compaq C v6.5-001-48BCD
+Linker: vA13-01
+
+The test results did not match 100% due to the issues you mention in your
+documentation regarding isprint(), iscntrl(), isgraph() and ispunct(). I
+modified some of the character tables temporarily and was able to get the
+results to match. Tests using the fr locale did not match since I don't have
+that locale loaded. The study size was always reported to be 3 less than the
+value in the standard test output files."
+
+=========================
+$! This DCL procedure builds PCRE on OpenVMS
+$!
+$! I followed the instructions in the non-unix-use file in the distribution.
+$!
+$ COMPILE == "CC/LIST/NOMEMBER_ALIGNMENT/PREFIX_LIBRARY_ENTRIES=ALL_ENTRIES
+$ COMPILE DFTABLES.C
+$ LINK/EXE=DFTABLES.EXE DFTABLES.OBJ
+$ RUN DFTABLES.EXE/OUTPUT=CHARTABLES.C
+$ COMPILE MAKETABLES.C
+$ COMPILE GET.C
+$ COMPILE STUDY.C
+$! I had to set POSIX_MALLOC_THRESHOLD to 10 in PCRE.H since the symbol
+$! did not seem to be defined anywhere.
+$! I edited pcre.h and added #DEFINE SUPPORT_UTF8 to enable UTF8 support.
+$ COMPILE PCRE.C
+$ LIB/CREATE PCRE MAKETABLES.OBJ, GET.OBJ, STUDY.OBJ, PCRE.OBJ
+$! I had to set POSIX_MALLOC_THRESHOLD to 10 in PCRE.H since the symbol
+$! did not seem to be defined anywhere.
+$ COMPILE PCREPOSIX.C
+$ LIB/CREATE PCREPOSIX PCREPOSIX.OBJ
+$ COMPILE PCRETEST.C
+$ LINK/EXE=PCRETEST.EXE PCRETEST.OBJ, PCRE/LIB, PCREPOSIX/LIB
+$! C programs that want access to command line arguments must be
+$! defined as a symbol
+$ PCRETEST :== "$ SYS$ROADSUSERS:[DMOONEY.REGEXP]PCRETEST.EXE"
+$! Arguments must be enclosed in quotes.
+$ PCRETEST "-C"
+$! Test results:
+$!
+$!   The test results did not match 100%. The functions isprint(), iscntrl(),
+$!   isgraph() and ispunct() on OpenVMS must not produce the same results
+$!   as the system that built the test output files provided with the
+$!   distribution.
+$!
+$!   The study size did not match and was always 3 less on OpenVMS.
+$!
+$!   Locale could not be set to fr
+$!
+=========================
+
 ****
index 879ba04f48db545ce29d6dcfa430cee8baf281ee..fc5397ecce7c693eee33ee50e2430fd5c5724d54 100644 (file)
@@ -22,6 +22,28 @@ ensure that they link with PCRE's libpcreposix library. Otherwise they may pick
 up the "real" POSIX functions of the same name.
 
 
+Documentation for PCRE
+----------------------
+
+If you install PCRE in the normal way, you will end up with an installed set of
+man pages whose names all start with "pcre". The one that is called "pcre"
+lists all the others. In addition to these man pages, the PCRE documentation is
+supplied in two other forms; however, as there is no standard place to install
+them, they are left in the doc directory of the unpacked source distribution.
+These forms are:
+
+  1. Files called doc/pcre.txt, doc/pcregrep.txt, and doc/pcretest.txt. The
+     first of these is a concatenation of the text forms of all the section 3
+     man pages except those that summarize individual functions. The other two
+     are the text forms of the section 1 man pages for the pcregrep and
+     pcretest commands. Text forms are provided for ease of scanning with text
+     editors or similar tools.
+
+  2. A subdirectory called doc/html contains all the documentation in HTML
+     form, hyperlinked in various ways, and rooted in a file called
+     doc/index.html.
+
+
 Contributions by users of PCRE
 ------------------------------
 
@@ -46,7 +68,7 @@ INSTALL.
 
 Most commonly, people build PCRE within its own distribution directory, and in
 this case, on many systems, just running "./configure" is sufficient, but the
-usual methods of changing standard defaults are available. For example,
+usual methods of changing standard defaults are available. For example:
 
 CFLAGS='-O2 -Wall' ./configure --prefix=/opt/local
 
@@ -69,6 +91,13 @@ library. You can read more about them in the pcrebuild man page.
   for handling UTF-8 is not included in the library. (Even when included, it
   still has to be enabled by an option at run time.)
 
+. If, in addition to support for UTF-8 character strings, you want to include
+  support for the \P, \p, and \X sequences that recognize Unicode character
+  properties, you must add --enable-unicode-properties to the "configure"
+  command. This adds about 90K to the size of the library (in the form of a
+  property table); only the basic two-letter properties such as Lu are
+  supported.
+
 . You can build PCRE to recognized CR or NL as the newline character, instead
   of whatever your compiler uses for "\n", by adding --newline-is-cr or
   --newline-is-nl to the "configure" command, respectively. Only do this if you
@@ -111,12 +140,14 @@ library. You can read more about them in the pcrebuild man page.
   on the "configure" command. PCRE runs more slowly in this mode, but it may be
   necessary in environments with limited stack sizes.
 
-The "configure" script builds five files:
+The "configure" script builds seven files:
 
-. libtool is a script that builds shared and/or static libraries
+. pcre.h is build by copying pcre.in and making substitutions
 . Makefile is built by copying Makefile.in and making substitutions.
 . config.h is built by copying config.in and making substitutions.
 . pcre-config is built by copying pcre-config.in and making substitutions.
+. libpcre.pc is data for the pkg-config command, built from libpcre.pc.in
+. libtool is a script that builds shared and/or static libraries
 . RunTest is a script for running tests
 
 Once "configure" has run, you can run "make". It builds two libraries called
@@ -125,20 +156,33 @@ command. You can use "make install" to copy these, the public header files
 pcre.h and pcreposix.h, and the man pages to appropriate live directories on
 your system, in the normal way.
 
+
+Retrieving configuration information on Unix-like systems
+---------------------------------------------------------
+
 Running "make install" also installs the command pcre-config, which can be used
 to recall information about the PCRE configuration and installation. For
-example,
+example:
 
   pcre-config --version
 
 prints the version number, and
 
- pcre-config --libs
 pcre-config --libs
 
 outputs information about where the library is installed. This command can be
 included in makefiles for programs that use PCRE, saving the programmer from
 having to remember too many details.
 
+The pkg-config command is another system for saving and retrieving information
+about installed libraries. Instead of separate commands for each library, a
+single command is used. For example:
+
+  pkg-config --cflags pcre
+
+The data is held in *.pc files that are installed in a directory called
+pkgconfig.
+
 
 Shared libraries on Unix-like systems
 -------------------------------------
@@ -158,7 +202,7 @@ installed themselves. However, the versions left in the source directory still
 use the uninstalled libraries.
 
 To build PCRE using static libraries only you must use --disable-shared when
-configuring it. For example
+configuring it. For example:
 
 ./configure --prefix=/usr/gnu --disable-shared
 
@@ -202,9 +246,9 @@ configuring process. (This can also be run by "make runtest", "make check", or
 The script runs the pcretest test program (which is documented in its own man
 page) on each of the testinput files (in the testdata directory) in turn,
 and compares the output with the contents of the corresponding testoutput file.
-A file called testtry is used to hold the output from pcretest. To run pcretest
-on just one of the test files, give its number as an argument to RunTest, for
-example:
+A file called testtry is used to hold the main output from pcretest
+(testsavedregex is also used as a working file). To run pcretest on just one of
+the test files, give its number as an argument to RunTest, for example:
 
   RunTest 2
 
@@ -247,19 +291,23 @@ running "configure". This file can be also fed directly to the perltest script,
 provided you are running Perl 5.8 or higher. (For Perl 5.6, a small patch,
 commented in the script, can be be used.)
 
-The fifth and final file tests error handling with UTF-8 encoding, and internal
-UTF-8 features of PCRE that are not relevant to Perl.
+The fifth test checks error handling with UTF-8 encoding, and internal UTF-8
+features of PCRE that are not relevant to Perl.
+
+The sixth and final test checks the support for Unicode character properties.
+It it not run automatically unless PCRE is built with Unicode property support.
+To to this you must set --enable-unicode-properties when running "configure".
 
 
 Character tables
 ----------------
 
-PCRE uses four tables for manipulating and identifying characters. The final
-argument of the pcre_compile() function is a pointer to a block of memory
-containing the concatenated tables. A call to pcre_maketables() can be used to
-generate a set of tables in the current locale. If the final argument for
-pcre_compile() is passed as NULL, a set of default tables that is built into
-the binary is used.
+PCRE uses four tables for manipulating and identifying characters whose values
+are less than 256. The final argument of the pcre_compile() function is a
+pointer to a block of memory containing the concatenated tables. A call to
+pcre_maketables() can be used to generate a set of tables in the current
+locale. If the final argument for pcre_compile() is passed as NULL, a set of
+default tables that is built into the binary is used.
 
 The source file called chartables.c contains the default set of tables. This is
 not supplied in the distribution, but is built by the program dftables
@@ -299,12 +347,20 @@ The distribution should contain the following files:
     headers:
 
   dftables.c            auxiliary program for building chartables.c
+
   get.c                 )
   maketables.c          )
-  study.c               ) source of
-  pcre.c                )   the functions
+  study.c               ) source of the functions
+  pcre.c                )   in the library
   pcreposix.c           )
   printint.c            )
+
+  ucp.c                 )
+  ucp.h                 ) source for the code that is used for
+  ucpinternal.h         )   Unicode property handling
+  ucptable.c            )
+  ucptypetable.c        )
+
   pcre.in               "source" for the header for the external API; pcre.h
                           is built from this by "configure"
   pcreposix.h           header for the external POSIX wrapper API
@@ -335,7 +391,9 @@ The distribution should contain the following files:
   doc/pcretest.txt      plain text documentation of test program
   doc/perltest.txt      plain text documentation of Perl test program
   install-sh            a shell script for installing files
+  libpcre.pc.in         "source" for libpcre.pc for pkg-config
   ltmain.sh             file used to build a libtool script
+  mkinstalldirs         script for making install directories
   pcretest.c            comprehensive test program
   pcredemo.c            simple demonstration of coding calls to PCRE
   perltest              Perl test program
@@ -346,15 +404,19 @@ The distribution should contain the following files:
   testdata/testinput3   test data for locale-specific tests
   testdata/testinput4   test data for UTF-8 tests compatible with Perl
   testdata/testinput5   test data for other UTF-8 tests
+  testdata/testinput6   test data for Unicode property support tests
   testdata/testoutput1  test results corresponding to testinput1
   testdata/testoutput2  test results corresponding to testinput2
   testdata/testoutput3  test results corresponding to testinput3
   testdata/testoutput4  test results corresponding to testinput4
   testdata/testoutput5  test results corresponding to testinput5
+  testdata/testoutput6  test results corresponding to testinput6
 
 (C) Auxiliary files for Win32 DLL
 
   dll.mk
+  libpcre.def
+  libpcreposix.def
   pcre.def
 
 (D) Auxiliary file for VPASCAL
@@ -362,4 +424,4 @@ The distribution should contain the following files:
   makevp.bat
 
 Philip Hazel <ph10@cam.ac.uk>
-December 2003
+September 2004
index 0c9f9a12c98736c884d96600ed14cd286b03e8c7..0839f0c2ef77dfece946b5b2c90f7b120b06c22d 100644 (file)
@@ -11,26 +11,32 @@ Written by: Philip Hazel <ph10@cam.ac.uk>
            Copyright (c) 1997-2003 University of Cambridge
 
 -----------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software 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.
-
-2. The origin of this software must not be misrepresented, either by
-   explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
-   General Purpose Licence (GPL), then the terms of that licence shall
-   supersede any condition above with which it is incompatible.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
 -----------------------------------------------------------------------------
-
-See the file Tech.Notes for some information on the internals.
 */
 
 
index 73c31c7ca18cfa947d2a54ca6c915540e1751267..18eb72bce70a90c3c53850d029762f44704d0ee3 100644 (file)
@@ -1,6 +1,9 @@
 Technical Notes about PCRE
 --------------------------
 
+Historical note 1
+-----------------
+
 Many years ago I implemented some regular expression functions to an algorithm
 suggested by Martin Richards. These were not Unix-like in form, and were quite
 restricted in what they could do by comparison with Perl. The interesting part
@@ -9,12 +12,15 @@ form of an expression was known in advance. The code to apply an expression did
 not operate by backtracking, as the original Henry Spencer code and current
 Perl code does, but instead checked all possibilities simultaneously by keeping
 a list of current states and checking all of them as it advanced through the
-subject string. (In the terminology of Jeffrey Friedl's book, it was a "DFA
-algorithm".) When the pattern was all used up, all remaining states were
+subject string. In the terminology of Jeffrey Friedl's book, it was a "DFA
+algorithm". When the pattern was all used up, all remaining states were
 possible matches, and the one matching the longest subset of the subject string
 was chosen. This did not necessarily maximize the individual wild portions of
 the pattern, as is expected in Unix and Perl-style regular expressions.
 
+Historical note 2
+-----------------
+
 By contrast, the code originally written by Henry Spencer and subsequently
 heavily modified for Perl actually compiles the expression twice: once in a
 dummy mode in order to find out how much store will be needed, and then for
@@ -23,6 +29,9 @@ optionally, minimizing in Perl) the amount of the subject that matches
 individual wild portions of the pattern. This is an "NFA algorithm" in Friedl's
 terminology.
 
+OK, here's the real stuff
+-------------------------
+
 For the set of functions that forms PCRE (which are unrelated to those
 mentioned above), I tried at first to invent an algorithm that used an amount
 of store bounded by a multiple of the number of characters in the pattern, to
@@ -38,8 +47,16 @@ got quite big anyway to handle all the Perl stuff.
 
 The compiled form of a pattern is a vector of bytes, containing items of
 variable length. The first byte in an item is an opcode, and the length of the
-item is either implicit in the opcode or contained in the data bytes which
-follow it. A list of all the opcodes follows:
+item is either implicit in the opcode or contained in the data bytes that
+follow it. 
+
+In many cases below "two-byte" data values are specified. This is in fact just
+a default. PCRE can be compiled to use 3-byte or 4-byte values (impairing the
+performance). This is necessary only when patterns whose compiled length is
+greater than 64K are going to be processed. In this description, we assume the 
+"normal" compilation options.
+
+A list of all the opcodes follows:
 
 Opcodes with no following data
 ------------------------------
@@ -48,7 +65,7 @@ These items are all just one byte long
 
   OP_END                 end of pattern
   OP_ANY                 match any character
-  OP_ANYBYTE             match any single byte, even in UTF-8 mode 
+  OP_ANYBYTE             match any single byte, even in UTF-8 mode
   OP_SOD                 match start of data: \A
   OP_SOM,                start of match (subject + offset): \G
   OP_CIRC                ^ (start of data, or after \n in multiline)
@@ -63,13 +80,14 @@ These items are all just one byte long
   OP_EODN                match end of data or \n at end: \Z
   OP_EOD                 match end of data: \z
   OP_DOLL                $ (end of data, or before \n in multiline)
-
+  OP_EXTUNI              match an extended Unicode character 
+  
 
 Repeating single characters
 ---------------------------
 
-The common repeats (*, +, ?) when applied to a single character appear as
-two-byte items using the following opcodes:
+The common repeats (*, +, ?) when applied to a single character use the
+following opcodes:
 
   OP_STAR
   OP_MINSTAR
@@ -78,6 +96,7 @@ two-byte items using the following opcodes:
   OP_QUERY
   OP_MINQUERY
 
+In ASCII mode, these are two-byte items; in UTF-8 mode, the length is variable.
 Those with "MIN" in their name are the minimizing versions. Each is followed by
 the character that is to be repeated. Other repeats make use of
 
@@ -109,39 +128,52 @@ byte. The opcodes are:
   OP_TYPEEXACT
 
 
-Matching a character string
+Match by Unicode property
+-------------------------
+
+OP_PROP and OP_NOTPROP are used for positive and negative matches of a 
+character by testing its Unicode property (the \p and \P escape sequences).
+Each is followed by a single byte that encodes the desired property value.
+
+Repeats of these items use the OP_TYPESTAR etc. set of opcodes, followed by two 
+bytes: OP_PROP or OP_NOTPROP and then the desired property value.
+
+
+Matching literal characters
 ---------------------------
 
-The OP_CHARS opcode is followed by a one-byte count and then that number of
-characters. If there are more than 255 characters in sequence, successive
-instances of OP_CHARS are used.
+The OP_CHAR opcode is followed by a single character that is to be matched 
+casefully. For caseless matching, OP_CHARNC is used. In UTF-8 mode, the 
+character may be more than one byte long. (Earlier versions of PCRE used 
+multi-character strings, but this was changed to allow some new features to be 
+added.)
 
 
 Character classes
 -----------------
 
-If there is only one character, OP_CHARS is used for a positive class,
-and OP_NOT for a negative one (that is, for something like [^a]). However, in 
-UTF-8 mode, this applies only to characters with values < 128, because OP_NOT 
-is confined to single bytes.
+If there is only one character, OP_CHAR or OP_CHARNC is used for a positive
+class, and OP_NOT for a negative one (that is, for something like [^a]).
+However, in UTF-8 mode, the use of OP_NOT applies only to characters with
+values < 128, because OP_NOT is confined to single bytes.
 
 Another set of repeating opcodes (OP_NOTSTAR etc.) are used for a repeated,
 negated, single-character class. The normal ones (OP_STAR etc.) are used for a
 repeated positive single-character class.
 
 When there's more than one character in a class and all the characters are less
-than 256, OP_CLASS is used for a positive class, and OP_NCLASS for a negative 
+than 256, OP_CLASS is used for a positive class, and OP_NCLASS for a negative
 one. In either case, the opcode is followed by a 32-byte bit map containing a 1
 bit for every character that is acceptable. The bits are counted from the least
 significant end of each byte.
 
-The reason for having both OP_CLASS and OP_NCLASS is so that, in UTF-8 mode, 
-subject characters with values greater than 256 can be handled correctly. For 
+The reason for having both OP_CLASS and OP_NCLASS is so that, in UTF-8 mode,
+subject characters with values greater than 256 can be handled correctly. For
 OP_CLASS they don't match, whereas for OP_NCLASS they do.
 
 For classes containing characters with values > 255, OP_XCLASS is used. It
 optionally uses a bit map (if any characters lie within it), followed by a list
-of pairs and single characters. There is a flag character than indicates 
+of pairs and single characters. There is a flag character than indicates
 whether it's a positive or a negative class.
 
 
@@ -192,14 +224,14 @@ the bracket itself. (They could have all been done like this, but I was making
 minimal changes.)
 
 A bracket opcode is followed by two bytes which give the offset to the next
-alternative OP_ALT or, if there aren't any branches, to the matching KET
+alternative OP_ALT or, if there aren't any branches, to the matching OP_KET
 opcode. Each OP_ALT is followed by two bytes giving the offset to the next one,
-or to the KET opcode.
+or to the OP_KET opcode.
 
 OP_KET is used for subpatterns that do not repeat indefinitely, while
 OP_KETRMIN and OP_KETRMAX are used for indefinite repetitions, minimally or
 maximally respectively. All three are followed by two bytes giving (as a
-positive number) the offset back to the matching BRA opcode.
+positive number) the offset back to the matching OP_BRA opcode.
 
 If a subpattern is quantified such that it is permitted to match zero times, it
 is preceded by one of OP_BRAZERO or OP_BRAMINZERO. These are single-byte
@@ -207,15 +239,14 @@ opcodes which tell the matcher that skipping this subpattern entirely is a
 valid branch.
 
 A subpattern with an indefinite maximum repetition is replicated in the
-compiled data its minimum number of times (or once with BRAZERO if the
-minimum is zero), with the final copy terminating with a KETRMIN or KETRMAX as
-appropriate.
+compiled data its minimum number of times (or once with OP_BRAZERO if the
+minimum is zero), with the final copy terminating with OP_KETRMIN or OP_KETRMAX
+as appropriate.
 
 A subpattern with a bounded maximum repetition is replicated in a nested
-fashion up to the maximum number of times, with BRAZERO or BRAMINZERO before
-each replication after the minimum, so that, for example, (abc){2,5} is
-compiled as (abc)(abc)((abc)((abc)(abc)?)?)?. The 99 and 200 bracket limits do
-not apply to these internally generated brackets.
+fashion up to the maximum number of times, with OP_BRAZERO or OP_BRAMINZERO
+before each replication after the minimum, so that, for example, (abc){2,5} is
+compiled as (abc)(abc)((abc)((abc)(abc)?)?)?.
 
 
 Assertions
@@ -260,8 +291,11 @@ from the start of the whole pattern.
 Callout
 -------
 
-OP_CALLOUT is followed by one byte of data that holds a callout number in the 
-range 0 to 255.
+OP_CALLOUT is followed by one byte of data that holds a callout number in the
+range 0 to 254 for manual callouts, or 255 for an automatic callout. In both 
+cases there follows a two-byte value giving the offset in the pattern to the
+start of the following item, and another two-byte item giving the length of the
+next item.
 
 
 Changing options
@@ -278,4 +312,4 @@ at compile time, and so does not cause anything to be put into the compiled
 data.
 
 Philip Hazel
-August 2003
+September 2004
index 698baa52e19f25953459178a1b159b77a3056e48..fdf0d6ff6707887c72a3b1c9575f9c6cc732ab9e 100644 (file)
@@ -1,3 +1,4 @@
+-----------------------------------------------------------------------------
 This file contains a concatenation of the PCRE man pages, converted to plain
 text format for ease of searching with a text editor, or for use on systems
 that do not have a man page processor. The small individual files that give
@@ -12,19 +13,19 @@ PCRE(3)                                                                PCRE(3)
 NAME
        PCRE - Perl-compatible regular expressions
 
-DESCRIPTION
+INTRODUCTION
 
        The  PCRE  library is a set of functions that implement regular expres-
        sion pattern matching using the same syntax and semantics as Perl, with
        just  a  few  differences.  The current implementation of PCRE (release
-       4.x) corresponds approximately with Perl  5.8,  including  support  for
-       UTF-8  encoded  strings.   However,  this  support has to be explicitly
-       enabled; it is not the default.
+       5.x) corresponds approximately with Perl  5.8,  including  support  for
+       UTF-8 encoded strings and Unicode general category properties. However,
+       this support has to be explicitly enabled; it is not the default.
 
-       PCRE is written in C and released as a C library. However, a number  of
-       people  have  written  wrappers  and interfaces of various kinds. A C++
-       class is included in these contributions, which can  be  found  in  the
-       Contrib directory at the primary FTP site, which is:
+       PCRE is written in C and released as a C library. A  number  of  people
+       have  written  wrappers and interfaces of various kinds. A C++ class is
+       included in these contributions, which can  be  found  in  the  Contrib
+       directory at the primary FTP site, which is:
 
        ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre
 
@@ -34,18 +35,19 @@ DESCRIPTION
 
        Some  features  of  PCRE can be included, excluded, or changed when the
        library is built. The pcre_config() function makes it  possible  for  a
-       client  to  discover  which features are available. Documentation about
-       building PCRE for various operating systems can be found in the  README
-       file in the source distribution.
+       client  to  discover  which  features are available. The features them-
+       selves are described in the pcrebuild page. Documentation about  build-
+       ing  PCRE for various operating systems can be found in the README file
+       in the source distribution.
 
 
 USER DOCUMENTATION
 
-       The user documentation for PCRE has been split up into a number of dif-
-       ferent sections. In the "man" format, each of these is a separate  "man
-       page".  In  the  HTML  format, each is a separate page, linked from the
-       index page. In the plain text format, all  the  sections  are  concate-
-       nated, for ease of searching. The sections are as follows:
+       The user documentation for PCRE comprises a number  of  different  sec-
+       tions.  In the "man" format, each of these is a separate "man page". In
+       the HTML format, each is a separate page, linked from the  index  page.
+       In  the  plain text format, all the sections are concatenated, for ease
+       of searching. The sections are as follows:
 
          pcre              this document
          pcreapi           details of PCRE's native API
@@ -53,12 +55,14 @@ USER DOCUMENTATION
          pcrecallout       details of the callout feature
          pcrecompat        discussion of Perl compatibility
          pcregrep          description of the pcregrep command
+         pcrepartial       details of the partial matching facility
          pcrepattern       syntax and semantics of supported
                              regular expressions
          pcreperform       discussion of performance issues
          pcreposix         the POSIX-compatible API
+         pcreprecompile    details of saving and re-using precompiled patterns
          pcresample        discussion of the sample program
-         pcretest          the pcretest testing command
+         pcretest          description of the pcretest testing command
 
        In  addition,  in the "man" and HTML formats, there is a short page for
        each library function, listing its arguments and results.
@@ -74,7 +78,7 @@ LIMITATIONS
        process  regular  expressions  that are truly enormous, you can compile
        PCRE with an internal linkage size of 3 or 4 (see the  README  file  in
        the  source  distribution and the pcrebuild documentation for details).
-       If these cases the limit is substantially larger.  However,  the  speed
+       In these cases the limit is substantially larger.  However,  the  speed
        of execution will be slower.
 
        All values in repeating quantifiers must be less than 65536.  The maxi-
@@ -92,67 +96,83 @@ LIMITATIONS
        processed by certain patterns.
 
 
-UTF-8 SUPPORT
+UTF-8 AND UNICODE PROPERTY SUPPORT
 
-       Starting  at  release  3.3,  PCRE  has  had  some support for character
-       strings encoded in the UTF-8 format. For  release  4.0  this  has  been
-       greatly extended to cover most common requirements.
+       From  release  3.3,  PCRE  has  had  some support for character strings
+       encoded in the UTF-8 format. For release 4.0 this was greatly  extended
+       to  cover  most common requirements, and in release 5.0 additional sup-
+       port for Unicode general category properties was added.
 
-       In  order  process  UTF-8 strings, you must build PCRE to include UTF-8
-       support in the code, and, in addition,  you  must  call  pcre_compile()
-       with  the PCRE_UTF8 option flag. When you do this, both the pattern and
-       any subject strings that are matched against it are  treated  as  UTF-8
+       In order process UTF-8 strings, you must build PCRE  to  include  UTF-8
+       support  in  the  code,  and, in addition, you must call pcre_compile()
+       with the PCRE_UTF8 option flag. When you do this, both the pattern  and
+       any  subject  strings  that are matched against it are treated as UTF-8
        strings instead of just strings of bytes.
 
-       If  you compile PCRE with UTF-8 support, but do not use it at run time,
-       the library will be a bit bigger, but the additional run time  overhead
-       is  limited  to testing the PCRE_UTF8 flag in several places, so should
+       If you compile PCRE with UTF-8 support, but do not use it at run  time,
+       the  library will be a bit bigger, but the additional run time overhead
+       is limited to testing the PCRE_UTF8 flag in several places,  so  should
        not be very large.
 
+       If PCRE is built with Unicode character property support (which implies
+       UTF-8 support), the escape sequences \p{..}, \P{..}, and  \X  are  sup-
+       ported.  The available properties that can be tested are limited to the
+       general category properties such as Lu for an upper case letter  or  Nd
+       for  a decimal number. A full list is given in the pcrepattern documen-
+       tation. The PCRE library is increased in size by about 90K when Unicode
+       property support is included.
+
        The following comments apply when PCRE is running in UTF-8 mode:
 
-       1. When you set the PCRE_UTF8 flag, the strings passed as patterns  and
-       subjects  are  checked for validity on entry to the relevant functions.
+       1.  When you set the PCRE_UTF8 flag, the strings passed as patterns and
+       subjects are checked for validity on entry to the  relevant  functions.
        If an invalid UTF-8 string is passed, an error return is given. In some
-       situations,  you  may  already  know  that  your strings are valid, and
+       situations, you may already know  that  your  strings  are  valid,  and
        therefore want to skip these checks in order to improve performance. If
-       you  set  the  PCRE_NO_UTF8_CHECK  flag at compile time or at run time,
-       PCRE assumes that the pattern or subject  it  is  given  (respectively)
-       contains  only valid UTF-8 codes. In this case, it does not diagnose an
-       invalid UTF-8 string. If you pass an invalid UTF-8 string to PCRE  when
-       PCRE_NO_UTF8_CHECK  is set, the results are undefined. Your program may
+       you set the PCRE_NO_UTF8_CHECK flag at compile time  or  at  run  time,
+       PCRE  assumes  that  the  pattern or subject it is given (respectively)
+       contains only valid UTF-8 codes. In this case, it does not diagnose  an
+       invalid  UTF-8 string. If you pass an invalid UTF-8 string to PCRE when
+       PCRE_NO_UTF8_CHECK is set, the results are undefined. Your program  may
        crash.
 
        2. In a pattern, the escape sequence \x{...}, where the contents of the
-       braces  is  a  string  of hexadecimal digits, is interpreted as a UTF-8
-       character whose code number is the given hexadecimal number, for  exam-
-       ple:  \x{1234}.  If a non-hexadecimal digit appears between the braces,
+       braces is a string of hexadecimal digits, is  interpreted  as  a  UTF-8
+       character  whose code number is the given hexadecimal number, for exam-
+       ple: \x{1234}. If a non-hexadecimal digit appears between  the  braces,
        the item is not recognized.  This escape sequence can be used either as
        a literal, or within a character class.
 
-       3.  The  original hexadecimal escape sequence, \xhh, matches a two-byte
+       3. The original hexadecimal escape sequence, \xhh, matches  a  two-byte
        UTF-8 character if the value is greater than 127.
 
-       4. Repeat quantifiers apply to complete UTF-8 characters, not to  indi-
+       4.  Repeat quantifiers apply to complete UTF-8 characters, not to indi-
        vidual bytes, for example: \x{100}{3}.
 
-       5.  The  dot  metacharacter  matches  one  UTF-8 character instead of a
-       single byte.
+       5. The dot metacharacter matches one UTF-8 character instead of a  sin-
+       gle byte.
 
-       6. The escape sequence \C can be used to match a single byte  in  UTF-8
+       6.  The  escape sequence \C can be used to match a single byte in UTF-8
        mode, but its use can lead to some strange effects.
 
-       7.  The  character escapes \b, \B, \d, \D, \s, \S, \w, and \W correctly
-       test characters of any code value, but the characters that PCRE  recog-
-       nizes  as  digits,  spaces,  or  word characters remain the same set as
-       before, all with values less than 256.
+       7. The character escapes \b, \B, \d, \D, \s, \S, \w, and  \W  correctly
+       test  characters of any code value, but the characters that PCRE recog-
+       nizes as digits, spaces, or word characters  remain  the  same  set  as
+       before, all with values less than 256. This remains true even when PCRE
+       includes Unicode property support, because to do otherwise  would  slow
+       down  PCRE in many common cases. If you really want to test for a wider
+       sense of, say, "digit", you must use Unicode  property  tests  such  as
+       \p{Nd}.
 
-       8. Case-insensitive matching applies only to  characters  whose  values
-       are  less  than  256.  PCRE  does  not support the notion of "case" for
-       higher-valued characters.
+       8.  Similarly,  characters that match the POSIX named character classes
+       are all low-valued characters.
 
-       9. PCRE does not support the use of Unicode tables  and  properties  or
-       the Perl escapes \p, \P, and \X.
+       9. Case-insensitive matching applies only to  characters  whose  values
+       are  less than 128, unless PCRE is built with Unicode property support.
+       Even when Unicode property support is available, PCRE  still  uses  its
+       own  character  tables when checking the case of low-valued characters,
+       so as not to degrade performance.  The Unicode property information  is
+       used only for characters with higher values.
 
 
 AUTHOR
@@ -162,8 +182,8 @@ AUTHOR
        Cambridge CB2 3QG, England.
        Phone: +44 1223 334714
 
-Last updated: 20 August 2003
-Copyright (c) 1997-2003 University of Cambridge.
+Last updated: 09 September 2004
+Copyright (c) 1997-2004 University of Cambridge.
 -----------------------------------------------------------------------------
 
 PCRE(3)                                                                PCRE(3)
@@ -177,10 +197,10 @@ PCRE BUILD-TIME OPTIONS
 
        This  document  describes  the  optional  features  of PCRE that can be
        selected when the library is compiled. They are all selected, or  dese-
-       lected,  by  providing  options  to  the  configure script which is run
-       before the make command. The complete list  of  options  for  configure
-       (which  includes the standard ones such as the selection of the instal-
-       lation directory) can be obtained by running
+       lected, by providing options to the configure script that is run before
+       the make command. The complete list of  options  for  configure  (which
+       includes  the  standard  ones such as the selection of the installation
+       directory) can be obtained by running
 
          ./configure --help
 
@@ -204,6 +224,25 @@ UTF-8 SUPPORT
        function.
 
 
+UNICODE CHARACTER PROPERTY SUPPORT
+
+       UTF-8 support allows PCRE to process character values greater than  255
+       in  the  strings that it handles. On its own, however, it does not pro-
+       vide any facilities for accessing the properties of such characters. If
+       you  want  to  be able to use the pattern escapes \P, \p, and \X, which
+       refer to Unicode character properties, you must add
+
+         --enable-unicode-properties
+
+       to the configure command. This implies UTF-8 support, even if you  have
+       not explicitly requested it.
+
+       Including  Unicode  property  support  adds around 90K of tables to the
+       PCRE library, approximately doubling its size. Only the  general  cate-
+       gory  properties  such as Lu and Nd are supported. Details are given in
+       the pcrepattern documentation.
+
+
 CODE VALUE OF NEWLINE
 
        By default, PCRE treats character 10 (linefeed) as the newline  charac-
@@ -231,9 +270,9 @@ BUILDING SHARED AND STATIC LIBRARIES
 
 POSIX MALLOC USAGE
 
-       When PCRE is called through the  POSIX  interface  (see  the  pcreposix
-       documentation),  additional working storage is required for holding the
-       pointers to capturing substrings because PCRE requires  three  integers
+       When PCRE is called through the POSIX interface (see the pcreposix doc-
+       umentation),  additional  working  storage  is required for holding the
+       pointers to capturing substrings, because PCRE requires three  integers
        per  substring,  whereas  the POSIX interface provides only two. If the
        number of expected substrings is small, the wrapper function uses space
        on the stack, because this is faster than using malloc() for each call.
@@ -247,13 +286,13 @@ POSIX MALLOC USAGE
 
 LIMITING PCRE RESOURCE USAGE
 
-       Internally,  PCRE  has a function called match() which it calls repeat-
-       edly (possibly recursively) when performing a  matching  operation.  By
-       limiting  the  number of times this function may be called, a limit can
-       be placed on the resources used by a single call  to  pcre_exec().  The
-       limit  can be changed at run time, as described in the pcreapi documen-
-       tation. The default is 10 million, but this can be changed by adding  a
-       setting such as
+       Internally,  PCRE has a function called match(), which it calls repeat-
+       edly (possibly recursively) when matching a pattern. By controlling the
+       maximum  number  of  times  this function may be called during a single
+       matching operation, a limit can be placed on the resources  used  by  a
+       single  call  to  pcre_exec(). The limit can be changed at run time, as
+       described in the pcreapi documentation. The default is 10 million,  but
+       this can be changed by adding a setting such as
 
          --with-match-limit=500000
 
@@ -264,7 +303,7 @@ HANDLING VERY LARGE PATTERNS
 
        Within  a  compiled  pattern,  offset values are used to point from one
        part to another (for example, from an opening parenthesis to an  alter-
-       nation  metacharacter).  By  default two-byte values are used for these
+       nation  metacharacter).  By default, two-byte values are used for these
        offsets, leading to a maximum size for a  compiled  pattern  of  around
        64K.  This  is sufficient to handle all but the most gigantic patterns.
        Nevertheless, some people do want to process enormous patterns,  so  it
@@ -297,9 +336,9 @@ AVOIDING EXCESSIVE STACK USAGE
          --disable-stack-for-recursion
 
        to the configure command. With this configuration, PCRE  will  use  the
-       pcre_stack_malloc   and   pcre_stack_free   variables  to  call  memory
-       management functions. Separate functions are provided because the usage
-       is very predictable: the block sizes requested are always the same, and
+       pcre_stack_malloc  and pcre_stack_free variables to call memory manage-
+       ment functions. Separate functions are provided because  the  usage  is
+       very  predictable:  the  block sizes requested are always the same, and
        the blocks are always freed in reverse order. A calling  program  might
        be  able  to implement optimized functions that perform better than the
        standard malloc() and  free()  functions.  PCRE  runs  noticeably  more
@@ -309,15 +348,16 @@ AVOIDING EXCESSIVE STACK USAGE
 USING EBCDIC CODE
 
        PCRE  assumes  by  default that it will run in an environment where the
-       character code is ASCII (or UTF-8, which is a superset of ASCII).  PCRE
-       can, however, be compiled to run in an EBCDIC environment by adding
+       character code is ASCII (or Unicode, which is  a  superset  of  ASCII).
+       PCRE  can,  however,  be  compiled  to  run in an EBCDIC environment by
+       adding
 
          --enable-ebcdic
 
        to the configure command.
 
-Last updated: 09 December 2003
-Copyright (c) 1997-2003 University of Cambridge.
+Last updated: 09 September 2004
+Copyright (c) 1997-2004 University of Cambridge.
 -----------------------------------------------------------------------------
 
 PCRE(3)                                                                PCRE(3)
@@ -327,7 +367,7 @@ PCRE(3)                                                                PCRE(3)
 NAME
        PCRE - Perl-compatible regular expressions
 
-SYNOPSIS OF PCRE API
+PCRE NATIVE API
 
        #include <pcre.h>
 
@@ -392,81 +432,95 @@ SYNOPSIS OF PCRE API
        int (*pcre_callout)(pcre_callout_block *);
 
 
-PCRE API
+PCRE API OVERVIEW
 
        PCRE has its own native API, which is described in this document. There
        is also a set of wrapper functions that correspond to the POSIX regular
        expression API.  These are described in the pcreposix documentation.
 
        The  native  API  function  prototypes  are  defined in the header file
-       pcre.h, and on Unix systems the library itself is called libpcre.a,  so
-       can be accessed by adding -lpcre to the command for linking an applica-
-       tion which calls it. The header file defines the macros PCRE_MAJOR  and
-       PCRE_MINOR  to  contain  the  major  and  minor release numbers for the
-       library. Applications can use these to include  support  for  different
-       releases.
+       pcre.h, and on Unix systems the library itself is  called  libpcre.  It
+       can normally be accessed by adding -lpcre to the command for linking an
+       application  that  uses  PCRE.  The  header  file  defines  the  macros
+       PCRE_MAJOR  and  PCRE_MINOR to contain the major and minor release num-
+       bers for the library.  Applications can use these  to  include  support
+       for different releases of PCRE.
 
        The  functions  pcre_compile(),  pcre_study(), and pcre_exec() are used
        for compiling and matching regular expressions. A sample  program  that
-       demonstrates  the simplest way of using them is given in the file pcre-
-       demo.c. The pcresample documentation describes how to run it.
+       demonstrates  the  simplest  way  of using them is provided in the file
+       called pcredemo.c in the source distribution. The pcresample documenta-
+       tion describes how to run it.
 
-       There are convenience functions for extracting captured substrings from
-       a matched subject string. They are:
+       In  addition  to  the  main compiling and matching functions, there are
+       convenience functions for extracting captured substrings from a matched
+       subject string.  They are:
 
          pcre_copy_substring()
          pcre_copy_named_substring()
          pcre_get_substring()
          pcre_get_named_substring()
          pcre_get_substring_list()
+         pcre_get_stringnumber()
 
        pcre_free_substring() and pcre_free_substring_list() are also provided,
        to free the memory used for extracted strings.
 
-       The function pcre_maketables() is used (optionally) to build a  set  of
-       character tables in the current locale for passing to pcre_compile().
+       The function pcre_maketables() is used to  build  a  set  of  character
+       tables   in  the  current  locale  for  passing  to  pcre_compile()  or
+       pcre_exec().  This is an optional facility that is  provided  for  spe-
+       cialist use. Most commonly, no special tables are passed, in which case
+       internal tables that are generated when PCRE is built are used.
 
-       The  function  pcre_fullinfo()  is used to find out information about a
-       compiled pattern; pcre_info() is an obsolete version which returns only
-       some  of  the available information, but is retained for backwards com-
-       patibility.  The function pcre_version() returns a pointer to a  string
+       The function pcre_fullinfo() is used to find out  information  about  a
+       compiled  pattern; pcre_info() is an obsolete version that returns only
+       some of the available information, but is retained for  backwards  com-
+       patibility.   The function pcre_version() returns a pointer to a string
        containing the version of PCRE and its date of release.
 
-       The  global  variables  pcre_malloc and pcre_free initially contain the
-       entry points of the standard  malloc()  and  free()  functions  respec-
+       The global variables pcre_malloc and pcre_free  initially  contain  the
+       entry  points  of  the  standard malloc() and free() functions, respec-
        tively. PCRE calls the memory management functions via these variables,
-       so a calling program can replace them if it  wishes  to  intercept  the
+       so  a  calling  program  can replace them if it wishes to intercept the
        calls. This should be done before calling any PCRE functions.
 
-       The  global  variables  pcre_stack_malloc  and pcre_stack_free are also
-       indirections to memory management functions.  These  special  functions
-       are  used  only  when  PCRE is compiled to use the heap for remembering
-       data, instead of recursive function calls. This is a  non-standard  way
-       of  building  PCRE,  for  use in environments that have limited stacks.
-       Because of the greater use of memory management, it runs  more  slowly.
-       Separate  functions  are provided so that special-purpose external code
+       The global variables pcre_stack_malloc  and  pcre_stack_free  are  also
+       indirections  to  memory  management functions. These special functions
+       are used only when PCRE is compiled to use  the  heap  for  remembering
+       data,  instead  of recursive function calls. This is a non-standard way
+       of building PCRE, for use in environments  that  have  limited  stacks.
+       Because  of  the greater use of memory management, it runs more slowly.
+       Separate functions are provided so that special-purpose  external  code
        can be used for this case. When used, these functions are always called
-       in  a  stack-like  manner  (last obtained, first freed), and always for
+       in a stack-like manner (last obtained, first  freed),  and  always  for
        memory blocks of the same size.
 
        The global variable pcre_callout initially contains NULL. It can be set
-       by  the  caller  to  a "callout" function, which PCRE will then call at
-       specified points during a matching operation. Details are given in  the
+       by the caller to a "callout" function, which PCRE  will  then  call  at
+       specified  points during a matching operation. Details are given in the
        pcrecallout documentation.
 
 
 MULTITHREADING
 
-       The  PCRE  functions  can be used in multi-threading applications, with
+       The PCRE functions can be used in  multi-threading  applications,  with
        the  proviso  that  the  memory  management  functions  pointed  to  by
        pcre_malloc, pcre_free, pcre_stack_malloc, and pcre_stack_free, and the
        callout function pointed to by pcre_callout, are shared by all threads.
 
-       The  compiled form of a regular expression is not altered during match-
+       The compiled form of a regular expression is not altered during  match-
        ing, so the same compiled pattern can safely be used by several threads
        at once.
 
 
+SAVING PRECOMPILED PATTERNS FOR LATER USE
+
+       The compiled form of a regular expression can be saved and re-used at a
+       later  time,  possibly by a different program, and even on a host other
+       than the one on which  it  was  compiled.  Details  are  given  in  the
+       pcreprecompile documentation.
+
+
 CHECKING BUILD-TIME OPTIONS
 
        int pcre_config(int what, void *where);
@@ -486,42 +540,47 @@ CHECKING BUILD-TIME OPTIONS
        The  output is an integer that is set to one if UTF-8 support is avail-
        able; otherwise it is set to zero.
 
+         PCRE_CONFIG_UNICODE_PROPERTIES
+
+       The output is an integer that is set to  one  if  support  for  Unicode
+       character properties is available; otherwise it is set to zero.
+
          PCRE_CONFIG_NEWLINE
 
-       The output is an integer that is set to the value of the code  that  is
-       used  for the newline character. It is either linefeed (10) or carriage
-       return (13), and should normally be the  standard  character  for  your
+       The  output  is an integer that is set to the value of the code that is
+       used for the newline character. It is either linefeed (10) or  carriage
+       return  (13),  and  should  normally be the standard character for your
        operating system.
 
          PCRE_CONFIG_LINK_SIZE
 
-       The  output  is  an  integer that contains the number of bytes used for
+       The output is an integer that contains the number  of  bytes  used  for
        internal linkage in compiled regular expressions. The value is 2, 3, or
-       4.  Larger  values  allow larger regular expressions to be compiled, at
-       the expense of slower matching. The default value of  2  is  sufficient
-       for  all  but  the  most massive patterns, since it allows the compiled
+       4. Larger values allow larger regular expressions to  be  compiled,  at
+       the  expense  of  slower matching. The default value of 2 is sufficient
+       for all but the most massive patterns, since  it  allows  the  compiled
        pattern to be up to 64K in size.
 
          PCRE_CONFIG_POSIX_MALLOC_THRESHOLD
 
-       The output is an integer that contains the threshold  above  which  the
-       POSIX  interface  uses malloc() for output vectors. Further details are
+       The  output  is  an integer that contains the threshold above which the
+       POSIX interface uses malloc() for output vectors. Further  details  are
        given in the pcreposix documentation.
 
          PCRE_CONFIG_MATCH_LIMIT
 
        The output is an integer that gives the default limit for the number of
-       internal  matching  function  calls in a pcre_exec() execution. Further
+       internal matching function calls in a  pcre_exec()  execution.  Further
        details are given with pcre_exec() below.
 
          PCRE_CONFIG_STACKRECURSE
 
-       The output is an integer that is set to one if  internal  recursion  is
-       implemented  by recursive function calls that use the stack to remember
+       The  output  is  an integer that is set to one if internal recursion is
+       implemented by recursive function calls that use the stack to  remember
        their state. This is the usual way that PCRE is compiled. The output is
-       zero  if PCRE was compiled to use blocks of data on the heap instead of
-       recursive  function  calls.  In  this   case,   pcre_stack_malloc   and
-       pcre_stack_free  are  called  to manage memory blocks on the heap, thus
+       zero if PCRE was compiled to use blocks of data on the heap instead  of
+       recursive   function   calls.   In  this  case,  pcre_stack_malloc  and
+       pcre_stack_free are called to manage memory blocks on  the  heap,  thus
        avoiding the use of the stack.
 
 
@@ -531,29 +590,29 @@ COMPILING A PATTERN
             const char **errptr, int *erroffset,
             const unsigned char *tableptr);
 
-
-       The function pcre_compile() is called to  compile  a  pattern  into  an
-       internal  form.  The pattern is a C string terminated by a binary zero,
-       and is passed in the argument pattern. A pointer to a single  block  of
-       memory  that is obtained via pcre_malloc is returned. This contains the
-       compiled code and related data.  The  pcre  type  is  defined  for  the
-       returned  block;  this  is a typedef for a structure whose contents are
-       not externally defined. It is up to the caller to free the memory  when
+       The  function  pcre_compile()  is  called  to compile a pattern into an
+       internal form. The pattern is a C string terminated by a  binary  zero,
+       and  is  passed in the pattern argument. A pointer to a single block of
+       memory that is obtained via pcre_malloc is returned. This contains  the
+       compiled  code  and  related  data.  The  pcre  type is defined for the
+       returned block; this is a typedef for a structure  whose  contents  are
+       not  externally defined. It is up to the caller to free the memory when
        it is no longer required.
 
-       Although  the compiled code of a PCRE regex is relocatable, that is, it
+       Although the compiled code of a PCRE regex is relocatable, that is,  it
        does not depend on memory location, the complete pcre data block is not
-       fully relocatable, because it contains a copy of the tableptr argument,
-       which is an address (see below).
+       fully relocatable, because it may contain a copy of the tableptr  argu-
+       ment, which is an address (see below).
 
        The options argument contains independent bits that affect the compila-
-       tion.  It  should  be  zero  if  no  options  are required. Some of the
-       options, in particular, those that are compatible with Perl,  can  also
-       be  set and unset from within the pattern (see the detailed description
-       of regular expressions in the  pcrepattern  documentation).  For  these
-       options,  the  contents of the options argument specifies their initial
-       settings at the start of compilation and execution.  The  PCRE_ANCHORED
-       option can be set at the time of matching as well as at compile time.
+       tion. It should be zero if  no  options  are  required.  The  available
+       options  are  described  below. Some of them, in particular, those that
+       are compatible with Perl, can also be set and  unset  from  within  the
+       pattern  (see  the  detailed  description in the pcrepattern documenta-
+       tion). For these options, the contents of the options  argument  speci-
+       fies  their initial settings at the start of compilation and execution.
+       The PCRE_ANCHORED option can be set at the time of matching as well  as
+       at compile time.
 
        If errptr is NULL, pcre_compile() returns NULL immediately.  Otherwise,
        if compilation of a pattern fails,  pcre_compile()  returns  NULL,  and
@@ -564,11 +623,14 @@ COMPILING A PATTERN
        given.
 
        If  the  final  argument, tableptr, is NULL, PCRE uses a default set of
-       character tables which are built when it is compiled, using the default
-       C  locale.  Otherwise,  tableptr  must  be  the  result  of  a  call to
-       pcre_maketables(). See the section on locale support below.
-
-       This code fragment shows a typical straightforward  call  to  pcre_com-
+       character tables that are  built  when  PCRE  is  compiled,  using  the
+       default  C  locale.  Otherwise, tableptr must be an address that is the
+       result of a call to pcre_maketables(). This value is  stored  with  the
+       compiled  pattern,  and used again by pcre_exec(), unless another table
+       pointer is passed to it. For more discussion, see the section on locale
+       support below.
+
+       This  code  fragment  shows a typical straightforward call to pcre_com-
        pile():
 
          pcre *re;
@@ -581,21 +643,30 @@ COMPILING A PATTERN
            &erroffset,       /* for error offset */
            NULL);            /* use default character tables */
 
-       The following option bits are defined:
+       The following names for option bits are defined in  the  pcre.h  header
+       file:
 
          PCRE_ANCHORED
 
        If this bit is set, the pattern is forced to be "anchored", that is, it
        is constrained to match only at the first matching point in the  string
-       which is being searched (the "subject string"). This effect can also be
+       that  is being searched (the "subject string"). This effect can also be
        achieved by appropriate constructs in the pattern itself, which is  the
        only way to do it in Perl.
 
+         PCRE_AUTO_CALLOUT
+
+       If this bit is set, pcre_compile() automatically inserts callout items,
+       all with number 255, before each pattern item. For  discussion  of  the
+       callout facility, see the pcrecallout documentation.
+
          PCRE_CASELESS
 
        If  this  bit is set, letters in the pattern match both upper and lower
        case letters. It is equivalent to Perl's  /i  option,  and  it  can  be
-       changed within a pattern by a (?i) option setting.
+       changed  within  a  pattern  by  a (?i) option setting. When running in
+       UTF-8 mode, case support for high-valued characters is  available  only
+       when PCRE is built with Unicode character property support.
 
          PCRE_DOLLAR_ENDONLY
 
@@ -645,11 +716,11 @@ COMPILING A PATTERN
          PCRE_MULTILINE
 
        By default, PCRE treats the subject string as consisting  of  a  single
-       "line"  of  characters (even if it actually contains several newlines).
-       The "start of line" metacharacter (^) matches only at the start of  the
-       string,  while  the "end of line" metacharacter ($) matches only at the
-       end of the string, or before a terminating  newline  (unless  PCRE_DOL-
-       LAR_ENDONLY is set). This is the same as Perl.
+       line  of characters (even if it actually contains newlines). The "start
+       of line" metacharacter (^) matches only at the  start  of  the  string,
+       while  the  "end  of line" metacharacter ($) matches only at the end of
+       the string, or before a terminating newline (unless PCRE_DOLLAR_ENDONLY
+       is set). This is the same as Perl.
 
        When  PCRE_MULTILINE  it  is set, the "start of line" and "end of line"
        constructs match immediately following or immediately before  any  new-
@@ -678,10 +749,10 @@ COMPILING A PATTERN
 
        This option causes PCRE to regard both the pattern and the  subject  as
        strings  of  UTF-8 characters instead of single-byte character strings.
-       However, it is available only if PCRE has been built to  include  UTF-8
-       support.  If  not, the use of this option provokes an error. Details of
-       how this option changes the behaviour of PCRE are given in the  section
-       on UTF-8 support in the main pcre page.
+       However, it is available only when PCRE is built to include UTF-8  sup-
+       port.  If not, the use of this option provokes an error. Details of how
+       this option changes the behaviour of PCRE are given in the  section  on
+       UTF-8 support in the main pcre page.
 
          PCRE_NO_UTF8_CHECK
 
@@ -691,9 +762,9 @@ COMPILING A PATTERN
        is valid, and you want to skip this check for performance reasons,  you
        can  set  the  PCRE_NO_UTF8_CHECK option. When it is set, the effect of
        passing an invalid UTF-8 string as a pattern is undefined. It may cause
-       your  program  to  crash.  Note that there is a similar option for sup-
-       pressing the checking of subject strings passed to pcre_exec().
-
+       your  program  to  crash.   Note that this option can also be passed to
+       pcre_exec(),  to  suppress  the  UTF-8  validity  checking  of  subject
+       strings.
 
 
 STUDYING A PATTERN
@@ -701,29 +772,31 @@ STUDYING A PATTERN
        pcre_extra *pcre_study(const pcre *code, int options,
             const char **errptr);
 
-       When a pattern is going to be used several times, it is worth  spending
-       more  time  analyzing it in order to speed up the time taken for match-
-       ing. The function pcre_study() takes a pointer to a compiled pattern as
-       its first argument. If studing the pattern produces additional informa-
-       tion that will help speed up matching, pcre_study() returns  a  pointer
-       to  a  pcre_extra  block,  in  which the study_data field points to the
-       results of the study.
-
-       The returned value from  a  pcre_study()  can  be  passed  directly  to
-       pcre_exec().  However,  the pcre_extra block also contains other fields
-       that can be set by the caller before the block  is  passed;  these  are
-       described  below.  If  studying  the pattern does not produce any addi-
-       tional information, pcre_study() returns NULL. In that circumstance, if
-       the  calling  program  wants  to  pass  some  of  the  other  fields to
-       pcre_exec(), it must set up its own pcre_extra block.
-
-       The second argument contains option bits. At present,  no  options  are
-       defined for pcre_study(), and this argument should always be zero.
-
-       The  third argument for pcre_study() is a pointer for an error message.
-       If studying succeeds (even if no data is  returned),  the  variable  it
-       points  to  is set to NULL. Otherwise it points to a textual error mes-
-       sage. You should therefore test the error pointer for NULL after  call-
+       If  a  compiled  pattern is going to be used several times, it is worth
+       spending more time analyzing it in order to speed up the time taken for
+       matching.  The function pcre_study() takes a pointer to a compiled pat-
+       tern as its first argument. If studying the pattern produces additional
+       information  that  will  help speed up matching, pcre_study() returns a
+       pointer to a pcre_extra block, in which the study_data field points  to
+       the results of the study.
+
+       The  returned  value  from  pcre_study()  can  be  passed  directly  to
+       pcre_exec(). However, a pcre_extra block  also  contains  other  fields
+       that  can  be  set  by the caller before the block is passed; these are
+       described below in the section on matching a pattern.
+
+       If studying the pattern does not produce  any  additional  information,
+       pcre_study() returns NULL. In that circumstance, if the calling program
+       wants to pass any of the other fields to pcre_exec(), it  must  set  up
+       its own pcre_extra block.
+
+       The  second  argument of pcre_study() contains option bits. At present,
+       no options are defined, and this argument should always be zero.
+
+       The third argument for pcre_study() is a pointer for an error  message.
+       If  studying  succeeds  (even  if no data is returned), the variable it
+       points to is set to NULL. Otherwise it points to a textual  error  mes-
+       sage.  You should therefore test the error pointer for NULL after call-
        ing pcre_study(), to be sure that it has run successfully.
 
        This is a typical call to pcre_study():
@@ -735,40 +808,53 @@ STUDYING A PATTERN
            &error);        /* set to NULL or points to a message */
 
        At present, studying a pattern is useful only for non-anchored patterns
-       that do not have a single fixed starting character. A bitmap of  possi-
-       ble starting characters is created.
+       that  do not have a single fixed starting character. A bitmap of possi-
+       ble starting bytes is created.
 
 
 LOCALE SUPPORT
 
-       PCRE  handles  caseless matching, and determines whether characters are
-       letters, digits, or whatever, by reference to a  set  of  tables.  When
-       running  in UTF-8 mode, this applies only to characters with codes less
-       than 256. The library contains a default set of tables that is  created
-       in  the  default  C locale when PCRE is compiled. This is used when the
-       final argument of pcre_compile() is NULL, and is  sufficient  for  many
-       applications.
-
-       An alternative set of tables can, however, be supplied. Such tables are
-       built by calling the pcre_maketables() function,  which  has  no  argu-
-       ments,  in  the  relevant  locale.  The  result  can  then be passed to
-       pcre_compile() as often as necessary. For example,  to  build  and  use
-       tables that are appropriate for the French locale (where accented char-
-       acters with codes greater than 128 are treated as letters), the follow-
-       ing code could be used:
-
-         setlocale(LC_CTYPE, "fr");
+       PCRE handles caseless matching, and determines whether  characters  are
+       letters,  digits, or whatever, by reference to a set of tables, indexed
+       by character value. (When running in UTF-8 mode, this applies  only  to
+       characters  with  codes  less than 128. Higher-valued codes never match
+       escapes such as \w or \d, but can be tested with \p if  PCRE  is  built
+       with Unicode character property support.)
+
+       An  internal set of tables is created in the default C locale when PCRE
+       is built. This is used when the final  argument  of  pcre_compile()  is
+       NULL,  and  is  sufficient for many applications. An alternative set of
+       tables can, however, be supplied. These may be created in  a  different
+       locale  from the default. As more and more applications change to using
+       Unicode, the need for this locale support is expected to die away.
+
+       External tables are built by calling  the  pcre_maketables()  function,
+       which  has no arguments, in the relevant locale. The result can then be
+       passed to pcre_compile() or pcre_exec()  as  often  as  necessary.  For
+       example,  to  build  and use tables that are appropriate for the French
+       locale (where accented characters with  values  greater  than  128  are
+       treated as letters), the following code could be used:
+
+         setlocale(LC_CTYPE, "fr_FR");
          tables = pcre_maketables();
          re = pcre_compile(..., tables);
 
-       The  tables  are  built in memory that is obtained via pcre_malloc. The
-       pointer that is passed to pcre_compile is saved with the compiled  pat-
-       tern, and the same tables are used via this pointer by pcre_study() and
-       pcre_exec(). Thus, for any single pattern,  compilation,  studying  and
-       matching  all  happen in the same locale, but different patterns can be
-       compiled in different locales. It is  the  caller's  responsibility  to
-       ensure  that  the memory containing the tables remains available for as
-       long as it is needed.
+       When  pcre_maketables()  runs,  the  tables are built in memory that is
+       obtained via pcre_malloc. It is the caller's responsibility  to  ensure
+       that  the memory containing the tables remains available for as long as
+       it is needed.
+
+       The pointer that is passed to pcre_compile() is saved with the compiled
+       pattern,  and the same tables are used via this pointer by pcre_study()
+       and normally also by pcre_exec(). Thus, by default, for any single pat-
+       tern, compilation, studying and matching all happen in the same locale,
+       but different patterns can be compiled in different locales.
+
+       It is possible to pass a table pointer or NULL (indicating the  use  of
+       the  internal  tables)  to  pcre_exec(). Although not intended for this
+       purpose, this facility could be used to match a pattern in a  different
+       locale from the one in which it was compiled. Passing table pointers at
+       run time is discussed below in the section on matching a pattern.
 
 
 INFORMATION ABOUT A PATTERN
@@ -792,8 +878,10 @@ INFORMATION ABOUT A PATTERN
          PCRE_ERROR_BADMAGIC   the "magic number" was not found
          PCRE_ERROR_BADOPTION  the value of what was invalid
 
-       Here  is a typical call of pcre_fullinfo(), to obtain the length of the
-       compiled pattern:
+       The  "magic  number" is placed at the start of each compiled pattern as
+       an simple check against passing an arbitrary memory pointer. Here is  a
+       typical  call  of pcre_fullinfo(), to obtain the length of the compiled
+       pattern:
 
          int rc;
          unsigned long int length;
@@ -817,6 +905,14 @@ INFORMATION ABOUT A PATTERN
        Return  the  number of capturing subpatterns in the pattern. The fourth
        argument should point to an int variable.
 
+         PCRE_INFO_DEFAULTTABLES
+
+       Return a pointer to the internal default character tables within  PCRE.
+       The  fourth  argument should point to an unsigned char * variable. This
+       information call is provided for internal use by the pcre_study() func-
+       tion.  External  callers  can  cause PCRE to use its internal tables by
+       passing a NULL table pointer.
+
          PCRE_INFO_FIRSTBYTE
 
        Return information about the first byte of any matched  string,  for  a
@@ -824,7 +920,7 @@ INFORMATION ABOUT A PATTERN
        PCRE_INFO_FIRSTCHAR; the old name is  still  recognized  for  backwards
        compatibility.)
 
-       If  there  is  a  fixed  first  byte,  e.g.  from  a  pattern  such  as
+       If  there  is  a  fixed first byte, for example, from a pattern such as
        (cat|cow|coyote), it is returned in the integer pointed  to  by  where.
        Otherwise, if either
 
@@ -862,11 +958,13 @@ INFORMATION ABOUT A PATTERN
 
        PCRE  supports the use of named as well as numbered capturing parenthe-
        ses. The names are just an additional way of identifying the  parenthe-
-       ses,  which still acquire a number. A caller that wants to extract data
-       from a named subpattern must convert the name to a number in  order  to
-       access  the  correct  pointers  in  the  output  vector (described with
-       pcre_exec() below). In order to do this, it must first use these  three
-       values to obtain the name-to-number mapping table for the pattern.
+       ses,  which  still  acquire  numbers.  A  convenience  function  called
+       pcre_get_named_substring() is provided  for  extracting  an  individual
+       captured  substring  by  name.  It is also possible to extract the data
+       directly, by first converting the name to a number in order  to  access
+       the  correct  pointers in the output vector (described with pcre_exec()
+       below). To do the conversion, you need to use the  name-to-number  map,
+       which is described by these three values.
 
        The map consists of a number of fixed-size entries. PCRE_INFO_NAMECOUNT
        gives the number of entries, and PCRE_INFO_NAMEENTRYSIZE gives the size
@@ -884,15 +982,17 @@ INFORMATION ABOUT A PATTERN
 
        There are four named subpatterns, so the table has  four  entries,  and
        each  entry  in the table is eight bytes long. The table is as follows,
-       with non-printing bytes shows in hex, and undefined bytes shown as ??:
+       with non-printing bytes shows in hexadecimal, and undefined bytes shown
+       as ??:
 
          00 01 d  a  t  e  00 ??
          00 05 d  a  y  00 ?? ??
          00 04 m  o  n  t  h  00
          00 02 y  e  a  r  00 ??
 
-       When writing code to extract data from named subpatterns, remember that
-       the length of each entry may be different for each compiled pattern.
+       When  writing  code  to  extract  data from named subpatterns using the
+       name-to-number map, remember that the length of each entry is likely to
+       be different for each compiled pattern.
 
          PCRE_INFO_OPTIONS
 
@@ -922,8 +1022,8 @@ INFORMATION ABOUT A PATTERN
 
          PCRE_INFO_STUDYSIZE
 
-       Returns  the  size of the data block pointed to by the study_data field
-       in a pcre_extra block. That is, it is the  value  that  was  passed  to
+       Return the size of the data block pointed to by the study_data field in
+       a pcre_extra block. That is,  it  is  the  value  that  was  passed  to
        pcre_malloc() when PCRE was getting memory into which to place the data
        created by pcre_study(). The fourth argument should point to  a  size_t
        variable.
@@ -958,9 +1058,15 @@ MATCHING A PATTERN
             int options, int *ovector, int ovecsize);
 
        The  function pcre_exec() is called to match a subject string against a
-       pre-compiled pattern, which is passed in the code argument. If the pat-
-       tern  has been studied, the result of the study should be passed in the
-       extra argument.
+       compiled pattern, which is passed in the code argument. If the  pattern
+       has been studied, the result of the study should be passed in the extra
+       argument.
+
+       In most applications, the pattern will have been compiled (and  option-
+       ally  studied)  in the same process that calls pcre_exec(). However, it
+       is possible to save compiled patterns and study data, and then use them
+       later  in  different processes, possibly even on different hosts. For a
+       discussion about this, see the pcreprecompile documentation.
 
        Here is an example of a simple call to pcre_exec():
 
@@ -973,18 +1079,23 @@ MATCHING A PATTERN
            11,             /* the length of the subject string */
            0,              /* start at offset 0 in the subject */
            0,              /* default options */
-           ovector,        /* vector for substring information */
-           30);            /* number of elements in the vector */
+           ovector,        /* vector of integers for substring information */
+           30);            /* number of elements in the vector  (NOT  size  in
+       bytes) */
+
+   Extra data for pcre_exec()
 
-       If the extra argument is not NULL, it must point to a  pcre_extra  data
-       block.  The pcre_study() function returns such a block (when it doesn't
-       return NULL), but you can also create one for yourself, and pass  addi-
-       tional information in it. The fields in the block are as follows:
+       If  the  extra argument is not NULL, it must point to a pcre_extra data
+       block. The pcre_study() function returns such a block (when it  doesn't
+       return  NULL), but you can also create one for yourself, and pass addi-
+       tional information in it. The fields in a pcre_extra block are as  fol-
+       lows:
 
          unsigned long int flags;
          void *study_data;
          unsigned long int match_limit;
          void *callout_data;
+         const unsigned char *tables;
 
        The  flags  field  is a bitmap that specifies which of the other fields
        are set. The flag bits are:
@@ -992,153 +1103,190 @@ MATCHING A PATTERN
          PCRE_EXTRA_STUDY_DATA
          PCRE_EXTRA_MATCH_LIMIT
          PCRE_EXTRA_CALLOUT_DATA
+         PCRE_EXTRA_TABLES
 
        Other flag bits should be set to zero. The study_data field is  set  in
        the  pcre_extra  block  that is returned by pcre_study(), together with
-       the appropriate flag bit. You should not set this yourself, but you can
-       add to the block by setting the other fields.
+       the appropriate flag bit. You should not set this yourself, but you may
+       add  to  the  block by setting the other fields and their corresponding
+       flag bits.
 
        The match_limit field provides a means of preventing PCRE from using up
-       a vast amount of resources when running patterns that are not going  to
-       match,  but  which  have  a very large number of possibilities in their
-       search trees. The classic  example  is  the  use  of  nested  unlimited
-       repeats. Internally, PCRE uses a function called match() which it calls
-       repeatedly (sometimes recursively). The limit is imposed on the  number
-       of  times  this function is called during a match, which has the effect
-       of limiting the amount of recursion  and  backtracking  that  can  take
-       place.  For  patterns that are not anchored, the count starts from zero
-       for each position in the subject string.
-
-       The default limit for the library can be set when PCRE  is  built;  the
-       default  default  is 10 million, which handles all but the most extreme
-       cases. You can reduce  the  default  by  suppling  pcre_exec()  with  a
-       pcre_extra  block  in  which match_limit is set to a smaller value, and
-       PCRE_EXTRA_MATCH_LIMIT is set in the  flags  field.  If  the  limit  is
+       a  vast amount of resources when running patterns that are not going to
+       match, but which have a very large number  of  possibilities  in  their
+       search  trees.  The  classic  example  is  the  use of nested unlimited
+       repeats.
+
+       Internally, PCRE uses a function called match() which it calls  repeat-
+       edly  (sometimes  recursively).  The  limit is imposed on the number of
+       times this function is called during a match, which has the  effect  of
+       limiting  the amount of recursion and backtracking that can take place.
+       For patterns that are not anchored, the count starts from zero for each
+       position in the subject string.
+
+       The  default  limit  for the library can be set when PCRE is built; the
+       default default is 10 million, which handles all but the  most  extreme
+       cases.  You  can  reduce  the  default  by  suppling pcre_exec() with a
+       pcre_extra block in which match_limit is set to a  smaller  value,  and
+       PCRE_EXTRA_MATCH_LIMIT  is  set  in  the  flags  field. If the limit is
        exceeded, pcre_exec() returns PCRE_ERROR_MATCHLIMIT.
 
-       The  pcre_callout  field is used in conjunction with the "callout" fea-
+       The pcre_callout field is used in conjunction with the  "callout"  fea-
        ture, which is described in the pcrecallout documentation.
 
-       The PCRE_ANCHORED option can be passed in the options  argument,  whose
-       unused  bits  must  be zero. This limits pcre_exec() to matching at the
-       first matching position.  However,  if  a  pattern  was  compiled  with
-       PCRE_ANCHORED,  or turned out to be anchored by virtue of its contents,
-       it cannot be made unachored at matching time.
+       The  tables  field  is  used  to  pass  a  character  tables pointer to
+       pcre_exec(); this overrides the value that is stored with the  compiled
+       pattern.  A  non-NULL value is stored with the compiled pattern only if
+       custom tables were supplied to pcre_compile() via  its  tableptr  argu-
+       ment.  If NULL is passed to pcre_exec() using this mechanism, it forces
+       PCRE's internal tables to be used. This facility is  helpful  when  re-
+       using  patterns  that  have been saved after compiling with an external
+       set of tables, because the external tables  might  be  at  a  different
+       address  when  pcre_exec() is called. See the pcreprecompile documenta-
+       tion for a discussion of saving compiled patterns for later use.
 
-       When PCRE_UTF8 was set at compile time, the validity of the subject  as
-       a  UTF-8  string is automatically checked, and the value of startoffset
-       is also checked to ensure that it points to the start of a UTF-8  char-
-       acter.  If  an  invalid  UTF-8  sequence of bytes is found, pcre_exec()
-       returns  the  error  PCRE_ERROR_BADUTF8.  If  startoffset  contains  an
-       invalid value, PCRE_ERROR_BADUTF8_OFFSET is returned.
+   Option bits for pcre_exec()
 
-       If  you  already  know that your subject is valid, and you want to skip
-       these   checks   for   performance   reasons,   you   can    set    the
-       PCRE_NO_UTF8_CHECK  option  when calling pcre_exec(). You might want to
-       do this for the second and subsequent calls to pcre_exec() if  you  are
-       making  repeated  calls  to  find  all  the matches in a single subject
-       string. However, you should be  sure  that  the  value  of  startoffset
-       points  to  the  start of a UTF-8 character. When PCRE_NO_UTF8_CHECK is
-       set, the effect of passing an invalid UTF-8 string as a subject,  or  a
-       value  of startoffset that does not point to the start of a UTF-8 char-
-       acter, is undefined. Your program may crash.
+       The unused bits of the options argument for pcre_exec() must  be  zero.
+       The   only  bits  that  may  be  set  are  PCRE_ANCHORED,  PCRE_NOTBOL,
+       PCRE_NOTEOL, PCRE_NOTEMPTY, PCRE_NO_UTF8_CHECK and PCRE_PARTIAL.
+
+         PCRE_ANCHORED
 
-       There are also three further options that can be set only  at  matching
-       time:
+       The PCRE_ANCHORED option limits pcre_exec() to matching  at  the  first
+       matching  position.  If  a  pattern was compiled with PCRE_ANCHORED, or
+       turned out to be anchored by virtue of its contents, it cannot be  made
+       unachored at matching time.
 
          PCRE_NOTBOL
 
-       The  first  character  of the string is not the beginning of a line, so
-       the circumflex metacharacter should not match before it.  Setting  this
-       without  PCRE_MULTILINE  (at  compile  time) causes circumflex never to
-       match.
+       This option specifies that first character of the subject string is not
+       the beginning of a line, so the  circumflex  metacharacter  should  not
+       match  before it. Setting this without PCRE_MULTILINE (at compile time)
+       causes  circumflex  never  to  match.  This  option  affects  only  the
+       behaviour of the circumflex metacharacter. It does not affect \A.
 
          PCRE_NOTEOL
 
-       The end of the string is not the end of a line, so the dollar metachar-
-       acter  should  not  match  it  nor (except in multiline mode) a newline
-       immediately before it. Setting this without PCRE_MULTILINE (at  compile
-       time) causes dollar never to match.
+       This option specifies that the end of the subject string is not the end
+       of a line, so the dollar metacharacter should not match it nor  (except
+       in  multiline mode) a newline immediately before it. Setting this with-
+       out PCRE_MULTILINE (at compile time) causes dollar never to match. This
+       option  affects only the behaviour of the dollar metacharacter. It does
+       not affect \Z or \z.
 
          PCRE_NOTEMPTY
 
        An empty string is not considered to be a valid match if this option is
-       set. If there are alternatives in the pattern, they are tried.  If  all
-       the  alternatives  match  the empty string, the entire match fails. For
+       set.  If  there are alternatives in the pattern, they are tried. If all
+       the alternatives match the empty string, the entire  match  fails.  For
        example, if the pattern
 
          a?b?
 
-       is applied to a string not beginning with "a" or "b",  it  matches  the
-       empty  string at the start of the subject. With PCRE_NOTEMPTY set, this
+       is  applied  to  a string not beginning with "a" or "b", it matches the
+       empty string at the start of the subject. With PCRE_NOTEMPTY set,  this
        match is not valid, so PCRE searches further into the string for occur-
        rences of "a" or "b".
 
        Perl has no direct equivalent of PCRE_NOTEMPTY, but it does make a spe-
-       cial case of a pattern match of the empty  string  within  its  split()
-       function,  and  when  using  the /g modifier. It is possible to emulate
+       cial  case  of  a  pattern match of the empty string within its split()
+       function, and when using the /g modifier. It  is  possible  to  emulate
        Perl's behaviour after matching a null string by first trying the match
-       again at the same offset with PCRE_NOTEMPTY set, and then if that fails
-       by advancing the starting offset (see below)  and  trying  an  ordinary
-       match again.
+       again at the same offset with PCRE_NOTEMPTY and PCRE_ANCHORED, and then
+       if  that  fails by advancing the starting offset (see below) and trying
+       an ordinary match again. There is some code that demonstrates how to do
+       this in the pcredemo.c sample program.
+
+         PCRE_NO_UTF8_CHECK
+
+       When PCRE_UTF8 is set at compile time, the validity of the subject as a
+       UTF-8 string is automatically checked when pcre_exec() is  subsequently
+       called.   The  value  of  startoffset is also checked to ensure that it
+       points to the start of a UTF-8 character. If an invalid UTF-8  sequence
+       of bytes is found, pcre_exec() returns the error PCRE_ERROR_BADUTF8. If
+       startoffset contains an  invalid  value,  PCRE_ERROR_BADUTF8_OFFSET  is
+       returned.
+
+       If  you  already  know that your subject is valid, and you want to skip
+       these   checks   for   performance   reasons,   you   can    set    the
+       PCRE_NO_UTF8_CHECK  option  when calling pcre_exec(). You might want to
+       do this for the second and subsequent calls to pcre_exec() if  you  are
+       making  repeated  calls  to  find  all  the matches in a single subject
+       string. However, you should be  sure  that  the  value  of  startoffset
+       points  to  the  start of a UTF-8 character. When PCRE_NO_UTF8_CHECK is
+       set, the effect of passing an invalid UTF-8 string as a subject,  or  a
+       value  of startoffset that does not point to the start of a UTF-8 char-
+       acter, is undefined. Your program may crash.
+
+         PCRE_PARTIAL
+
+       This option turns on the  partial  matching  feature.  If  the  subject
+       string  fails to match the pattern, but at some point during the match-
+       ing process the end of the subject was reached (that  is,  the  subject
+       partially  matches  the  pattern and the failure to match occurred only
+       because there were not enough subject characters), pcre_exec()  returns
+       PCRE_ERROR_PARTIAL  instead of PCRE_ERROR_NOMATCH. When PCRE_PARTIAL is
+       used, there are restrictions on what may appear in the  pattern.  These
+       are discussed in the pcrepartial documentation.
+
+   The string to be matched by pcre_exec()
 
        The  subject string is passed to pcre_exec() as a pointer in subject, a
-       length in length, and a starting byte offset in startoffset. Unlike the
-       pattern  string,  the  subject  may contain binary zero bytes. When the
-       starting offset is zero, the search for a match starts at the beginning
-       of the subject, and this is by far the most common case.
-
-       If the pattern was compiled with the PCRE_UTF8 option, the subject must
-       be a sequence of bytes that is a valid UTF-8 string, and  the  starting
-       offset  must point to the beginning of a UTF-8 character. If an invalid
-       UTF-8 string or offset is passed, an error  (either  PCRE_ERROR_BADUTF8
-       or   PCRE_ERROR_BADUTF8_OFFSET)   is   returned,   unless   the  option
-       PCRE_NO_UTF8_CHECK is set,  in  which  case  PCRE's  behaviour  is  not
-       defined.
-
-       A  non-zero  starting offset is useful when searching for another match
-       in the same subject by calling pcre_exec() again after a previous  suc-
-       cess.   Setting  startoffset differs from just passing over a shortened
-       string and setting PCRE_NOTBOL in the case of  a  pattern  that  begins
+       length in length, and a starting byte offset in startoffset.  In  UTF-8
+       mode,  the  byte  offset  must point to the start of a UTF-8 character.
+       Unlike the pattern string, the subject may contain binary  zero  bytes.
+       When  the starting offset is zero, the search for a match starts at the
+       beginning of the subject, and this is by far the most common case.
+
+       A non-zero starting offset is useful when searching for  another  match
+       in  the same subject by calling pcre_exec() again after a previous suc-
+       cess.  Setting startoffset differs from just passing over  a  shortened
+       string  and  setting  PCRE_NOTBOL  in the case of a pattern that begins
        with any kind of lookbehind. For example, consider the pattern
 
          \Biss\B
 
-       which  finds  occurrences  of "iss" in the middle of words. (\B matches
-       only if the current position in the subject is not  a  word  boundary.)
-       When  applied  to the string "Mississipi" the first call to pcre_exec()
-       finds the first occurrence. If pcre_exec() is called  again  with  just
-       the  remainder  of  the  subject,  namely  "issipi", it does not match,
+       which finds occurrences of "iss" in the middle of  words.  (\B  matches
+       only  if  the  current position in the subject is not a word boundary.)
+       When applied to the string "Mississipi" the first call  to  pcre_exec()
+       finds  the  first  occurrence. If pcre_exec() is called again with just
+       the remainder of the subject,  namely  "issipi",  it  does  not  match,
        because \B is always false at the start of the subject, which is deemed
-       to  be  a  word  boundary. However, if pcre_exec() is passed the entire
-       string again, but with startoffset  set  to  4,  it  finds  the  second
-       occurrence  of  "iss"  because  it  is able to look behind the starting
-       point to discover that it is preceded by a letter.
-
-       If a non-zero starting offset is passed when the pattern  is  anchored,
-       one  attempt  to match at the given offset is tried. This can only suc-
-       ceed if the pattern does not require the match to be at  the  start  of
-       the subject.
+       to be a word boundary. However, if pcre_exec()  is  passed  the  entire
+       string again, but with startoffset set to 4, it finds the second occur-
+       rence of "iss" because it is able to look behind the starting point  to
+       discover that it is preceded by a letter.
+
+       If  a  non-zero starting offset is passed when the pattern is anchored,
+       one attempt to match at the given offset is made. This can only succeed
+       if  the  pattern  does  not require the match to be at the start of the
+       subject.
+
+   How pcre_exec() returns captured substrings
 
-       In  general, a pattern matches a certain portion of the subject, and in
-       addition, further substrings from the subject  may  be  picked  out  by
-       parts  of  the  pattern.  Following the usage in Jeffrey Friedl's book,
-       this is called "capturing" in what follows, and the  phrase  "capturing
-       subpattern"  is  used for a fragment of a pattern that picks out a sub-
-       string. PCRE supports several other kinds of  parenthesized  subpattern
+       In general, a pattern matches a certain portion of the subject, and  in
+       addition,  further  substrings  from  the  subject may be picked out by
+       parts of the pattern. Following the usage  in  Jeffrey  Friedl's  book,
+       this  is  called "capturing" in what follows, and the phrase "capturing
+       subpattern" is used for a fragment of a pattern that picks out  a  sub-
+       string.  PCRE  supports several other kinds of parenthesized subpattern
        that do not cause substrings to be captured.
 
-       Captured  substrings are returned to the caller via a vector of integer
-       offsets whose address is passed in ovector. The number of  elements  in
-       the vector is passed in ovecsize. The first two-thirds of the vector is
-       used to pass back captured substrings, each substring using a  pair  of
-       integers.  The  remaining  third  of the vector is used as workspace by
-       pcre_exec() while matching capturing subpatterns, and is not  available
-       for  passing  back  information.  The  length passed in ovecsize should
-       always be a multiple of three. If it is not, it is rounded down.
-
-       When a match has been successful, information about captured substrings
-       is returned in pairs of integers, starting at the beginning of ovector,
+       Captured substrings are returned to the caller via a vector of  integer
+       offsets  whose  address is passed in ovector. The number of elements in
+       the vector is passed in ovecsize, which must be a non-negative  number.
+       Note: this argument is NOT the size of ovector in bytes.
+
+       The  first  two-thirds of the vector is used to pass back captured sub-
+       strings, each substring using a pair of integers. The  remaining  third
+       of  the  vector is used as workspace by pcre_exec() while matching cap-
+       turing subpatterns, and is not available for passing back  information.
+       The  length passed in ovecsize should always be a multiple of three. If
+       it is not, it is rounded down.
+
+       When a match is successful, information about  captured  substrings  is
+       returned  in  pairs  of integers, starting at the beginning of ovector,
        and continuing up to two-thirds of its length at the  most.  The  first
        element of a pair is set to the offset of the first character in a sub-
        string, and the second is set to the  offset  of  the  first  character
@@ -1161,15 +1309,15 @@ MATCHING A PATTERN
        offset values corresponding to the unused subpattern are set to -1.
 
        If a capturing subpattern is matched repeatedly, it is the last portion
-       of the string that it matched that gets returned.
-
-       If the vector is too small to hold all the captured substrings,  it  is
-       used as far as possible (up to two-thirds of its length), and the func-
-       tion returns a value of zero. In particular, if the  substring  offsets
-       are  not  of interest, pcre_exec() may be called with ovector passed as
-       NULL and ovecsize as zero. However, if the pattern contains back refer-
-       ences  and  the  ovector  isn't big enough to remember the related sub-
-       strings, PCRE has to get additional memory  for  use  during  matching.
+       of the string that it matched that is returned.
+
+       If the vector is too small to hold all the captured substring  offsets,
+       it is used as far as possible (up to two-thirds of its length), and the
+       function returns a value of zero. In particular, if the substring  off-
+       sets are not of interest, pcre_exec() may be called with ovector passed
+       as NULL and ovecsize as zero. However, if  the  pattern  contains  back
+       references  and  the  ovector is not big enough to remember the related
+       substrings, PCRE has to get additional memory for use during  matching.
        Thus it is usually advisable to supply an ovector.
 
        Note  that  pcre_info() can be used to find out how many capturing sub-
@@ -1177,6 +1325,8 @@ MATCHING A PATTERN
        that  will  allow for n captured substrings, in addition to the offsets
        of the substring matched by the whole pattern, is (n+1)*3.
 
+   Return values from pcre_exec()
+
        If pcre_exec() fails, it returns a negative number. The  following  are
        defined in the header file:
 
@@ -1196,8 +1346,10 @@ MATCHING A PATTERN
          PCRE_ERROR_BADMAGIC       (-4)
 
        PCRE stores a 4-byte "magic number" at the start of the compiled  code,
-       to  catch  the case when it is passed a junk pointer. This is the error
-       it gives when the magic number isn't present.
+       to catch the case when it is passed a junk pointer and to detect when a
+       pattern that was compiled in an environment of one endianness is run in
+       an  environment  with the other endianness. This is the error that PCRE
+       gives when the magic number is not present.
 
          PCRE_ERROR_UNKNOWN_NODE   (-5)
 
@@ -1211,7 +1363,7 @@ MATCHING A PATTERN
        to pcre_exec() is not big enough to remember the referenced substrings,
        PCRE gets a block of memory at the start of matching to  use  for  this
        purpose.  If the call via pcre_malloc() fails, this error is given. The
-       memory is freed at the end of matching.
+       memory is automatically freed at the end of matching.
 
          PCRE_ERROR_NOSUBSTRING    (-7)
 
@@ -1242,6 +1394,26 @@ MATCHING A PATTERN
        value of startoffset did not point to the beginning of a UTF-8  charac-
        ter.
 
+         PCRE_ERROR_PARTIAL (-12)
+
+       The  subject  string did not match, but it did match partially. See the
+       pcrepartial documentation for details of partial matching.
+
+         PCRE_ERROR_BAD_PARTIAL (-13)
+
+       The PCRE_PARTIAL option was used with  a  compiled  pattern  containing
+       items  that are not supported for partial matching. See the pcrepartial
+       documentation for details of partial matching.
+
+         PCRE_ERROR_INTERNAL (-14)
+
+       An unexpected internal error has occurred. This error could  be  caused
+       by a bug in PCRE or by overwriting of the compiled pattern.
+
+         PCRE_ERROR_BADCOUNT (-15)
+
+       This  error is given if the value of the ovecsize argument is negative.
+
 
 EXTRACTING CAPTURED SUBSTRINGS BY NUMBER
 
@@ -1256,117 +1428,121 @@ EXTRACTING CAPTURED SUBSTRINGS BY NUMBER
        int pcre_get_substring_list(const char *subject,
             int *ovector, int stringcount, const char ***listptr);
 
-       Captured  substrings  can  be  accessed  directly  by using the offsets
-       returned by pcre_exec() in  ovector.  For  convenience,  the  functions
+       Captured substrings can be  accessed  directly  by  using  the  offsets
+       returned  by  pcre_exec()  in  ovector.  For convenience, the functions
        pcre_copy_substring(),    pcre_get_substring(),    and    pcre_get_sub-
-       string_list() are provided for extracting captured substrings  as  new,
-       separate,  zero-terminated strings. These functions identify substrings
-       by number. The next section describes functions  for  extracting  named
-       substrings.  A  substring  that  contains  a  binary  zero is correctly
-       extracted and has a further zero added on the end, but  the  result  is
+       string_list()  are  provided for extracting captured substrings as new,
+       separate, zero-terminated strings. These functions identify  substrings
+       by  number.  The  next section describes functions for extracting named
+       substrings. A substring  that  contains  a  binary  zero  is  correctly
+       extracted  and  has  a further zero added on the end, but the result is
        not, of course, a C string.
 
-       The  first  three  arguments  are the same for all three of these func-
-       tions: subject is the subject string which has just  been  successfully
+       The first three arguments are the same for all  three  of  these  func-
+       tions:  subject  is  the subject string that has just been successfully
        matched, ovector is a pointer to the vector of integer offsets that was
        passed to pcre_exec(), and stringcount is the number of substrings that
-       were  captured  by  the match, including the substring that matched the
-       entire regular expression. This is the value returned by  pcre_exec  if
-       it  is greater than zero. If pcre_exec() returned zero, indicating that
-       it ran out of space in ovector, the value passed as stringcount  should
-       be the size of the vector divided by three.
-
-       The  functions pcre_copy_substring() and pcre_get_substring() extract a
-       single substring, whose number is given as  stringnumber.  A  value  of
-       zero  extracts  the  substring  that  matched the entire pattern, while
-       higher values  extract  the  captured  substrings.  For  pcre_copy_sub-
-       string(),  the  string  is  placed  in buffer, whose length is given by
-       buffersize, while for pcre_get_substring() a new  block  of  memory  is
-       obtained  via  pcre_malloc,  and its address is returned via stringptr.
-       The yield of the function is the length of the  string,  not  including
+       were captured by the match, including the substring  that  matched  the
+       entire regular expression. This is the value returned by pcre_exec() if
+       it is greater than zero. If pcre_exec() returned zero, indicating  that
+       it  ran out of space in ovector, the value passed as stringcount should
+       be the number of elements in the vector divided by three.
+
+       The functions pcre_copy_substring() and pcre_get_substring() extract  a
+       single  substring,  whose  number  is given as stringnumber. A value of
+       zero extracts the substring that matched the  entire  pattern,  whereas
+       higher  values  extract  the  captured  substrings.  For pcre_copy_sub-
+       string(), the string is placed in buffer,  whose  length  is  given  by
+       buffersize,  while  for  pcre_get_substring()  a new block of memory is
+       obtained via pcre_malloc, and its address is  returned  via  stringptr.
+       The  yield  of  the function is the length of the string, not including
        the terminating zero, or one of
 
          PCRE_ERROR_NOMEMORY       (-6)
 
-       The  buffer  was too small for pcre_copy_substring(), or the attempt to
+       The buffer was too small for pcre_copy_substring(), or the  attempt  to
        get memory failed for pcre_get_substring().
 
          PCRE_ERROR_NOSUBSTRING    (-7)
 
        There is no substring whose number is stringnumber.
 
-       The pcre_get_substring_list()  function  extracts  all  available  sub-
-       strings  and  builds  a list of pointers to them. All this is done in a
-       single block of memory which is obtained via pcre_malloc.  The  address
-       of the memory block is returned via listptr, which is also the start of
-       the list of string pointers. The end of the list is marked  by  a  NULL
+       The  pcre_get_substring_list()  function  extracts  all  available sub-
+       strings and builds a list of pointers to them. All this is  done  in  a
+       single block of memory that is obtained via pcre_malloc. The address of
+       the memory block is returned via listptr, which is also  the  start  of
+       the  list  of  string pointers. The end of the list is marked by a NULL
        pointer. The yield of the function is zero if all went well, or
 
          PCRE_ERROR_NOMEMORY       (-6)
 
        if the attempt to get the memory block failed.
 
-       When  any of these functions encounter a substring that is unset, which
-       can happen when capturing subpattern number n+1 matches  some  part  of
-       the  subject, but subpattern n has not been used at all, they return an
+       When any of these functions encounter a substring that is unset,  which
+       can  happen  when  capturing subpattern number n+1 matches some part of
+       the subject, but subpattern n has not been used at all, they return  an
        empty string. This can be distinguished from a genuine zero-length sub-
-       string  by inspecting the appropriate offset in ovector, which is nega-
+       string by inspecting the appropriate offset in ovector, which is  nega-
        tive for unset substrings.
 
-       The    two    convenience    functions    pcre_free_substring()     and
-       pcre_free_substring_list() can be used to free the memory returned by a
-       previous call  of  pcre_get_substring()  or  pcre_get_substring_list(),
-       respectively. They do nothing more than call the function pointed to by
-       pcre_free, which of course could be called directly from a  C  program.
-       However,  PCRE is used in some situations where it is linked via a spe-
+       The  two convenience functions pcre_free_substring() and pcre_free_sub-
+       string_list() can be used to free the memory  returned  by  a  previous
+       call  of  pcre_get_substring()  or  pcre_get_substring_list(),  respec-
+       tively. They do nothing more than  call  the  function  pointed  to  by
+       pcre_free,  which  of course could be called directly from a C program.
+       However, PCRE is used in some situations where it is linked via a  spe-
        cial  interface  to  another  programming  language  which  cannot  use
-       pcre_free  directly;  it is for these cases that the functions are pro-
-       vided.
+       pcre_free directly; it is  for  these  cases  that  the  functions  are
+       provided.
 
 
 EXTRACTING CAPTURED SUBSTRINGS BY NAME
 
+       int pcre_get_stringnumber(const pcre *code,
+            const char *name);
+
        int pcre_copy_named_substring(const pcre *code,
             const char *subject, int *ovector,
             int stringcount, const char *stringname,
             char *buffer, int buffersize);
 
-       int pcre_get_stringnumber(const pcre *code,
-            const char *name);
-
        int pcre_get_named_substring(const pcre *code,
             const char *subject, int *ovector,
             int stringcount, const char *stringname,
             const char **stringptr);
 
-       To extract a substring by name, you first have to find associated  num-
-       ber.  This  can  be  done by calling pcre_get_stringnumber(). The first
-       argument is the compiled pattern, and the second is the name. For exam-
-       ple, for this pattern
+       To  extract a substring by name, you first have to find associated num-
+       ber.  For example, for this pattern
+
+         (a+)b(?<xxx>\d+)...
 
-         ab(?<xxx>\d+)...
+       the number of the subpattern called "xxx" is 2. You can find the number
+       from the name by calling pcre_get_stringnumber(). The first argument is
+       the compiled pattern, and the second is the  name.  The  yield  of  the
+       function  is  the  subpattern number, or PCRE_ERROR_NOSUBSTRING (-7) if
+       there is no subpattern of that name.
 
-       the  number  of the subpattern called "xxx" is 1. Given the number, you
-       can then extract the substring directly, or use one  of  the  functions
-       described  in the previous section. For convenience, there are also two
-       functions that do the whole job.
+       Given the number, you can extract the substring directly, or use one of
+       the functions described in the previous section. For convenience, there
+       are also two functions that do the whole job.
 
        Most   of   the   arguments    of    pcre_copy_named_substring()    and
-       pcre_get_named_substring() are the same as those for the functions that
-       extract by number, and so are not re-described here. There are just two
-       differences.
+       pcre_get_named_substring()  are  the  same  as  those for the similarly
+       named functions that extract by number. As these are described  in  the
+       previous  section,  they  are not re-described here. There are just two
+       differences:
 
-       First,  instead  of a substring number, a substring name is given. Sec-
+       First, instead of a substring number, a substring name is  given.  Sec-
        ond, there is an extra argument, given at the start, which is a pointer
-       to  the compiled pattern. This is needed in order to gain access to the
+       to the compiled pattern. This is needed in order to gain access to  the
        name-to-number translation table.
 
-       These functions call pcre_get_stringnumber(), and if it succeeds,  they
-       then  call  pcre_copy_substring() or pcre_get_substring(), as appropri-
+       These  functions call pcre_get_stringnumber(), and if it succeeds, they
+       then call pcre_copy_substring() or pcre_get_substring(),  as  appropri-
        ate.
 
-Last updated: 09 December 2003
-Copyright (c) 1997-2003 University of Cambridge.
+Last updated: 09 September 2004
+Copyright (c) 1997-2004 University of Cambridge.
 -----------------------------------------------------------------------------
 
 PCRE(3)                                                                PCRE(3)
@@ -1392,11 +1568,47 @@ PCRE CALLOUTS
        default value is zero.  For  example,  this  pattern  has  two  callout
        points:
 
-         (?C1)abc(?C2)def
+         (?C1)eabc(?C2)def
 
-       During matching, when PCRE reaches a callout point (and pcre_callout is
-       set), the external function is called. Its only argument is  a  pointer
-       to a pcre_callout block. This contains the following variables:
+       If  the  PCRE_AUTO_CALLOUT  option  bit  is  set when pcre_compile() is
+       called, PCRE automatically  inserts  callouts,  all  with  number  255,
+       before  each  item in the pattern. For example, if PCRE_AUTO_CALLOUT is
+       used with the pattern
+
+         A(\d{2}|--)
+
+       it is processed as if it were
+
+       (?C255)A(?C255)((?C255)\d{2}(?C255)|(?C255)-(?C255)-(?C255))(?C255)
+
+       Notice that there is a callout before and after  each  parenthesis  and
+       alternation  bar.  Automatic  callouts  can  be  used  for tracking the
+       progress of pattern matching. The pcretest command has an  option  that
+       sets  automatic callouts; when it is used, the output indicates how the
+       pattern is matched. This is useful information when you are  trying  to
+       optimize the performance of a particular pattern.
+
+
+MISSING CALLOUTS
+
+       You  should  be  aware  that,  because of optimizations in the way PCRE
+       matches patterns, callouts sometimes do not happen. For example, if the
+       pattern is
+
+         ab(?C4)cd
+
+       PCRE knows that any matching string must contain the letter "d". If the
+       subject string is "abyz", the lack of "d" means that  matching  doesn't
+       ever  start,  and  the  callout is never reached. However, with "abyd",
+       though the result is still no match, the callout is obeyed.
+
+
+THE CALLOUT INTERFACE
+
+       During matching, when PCRE reaches a callout point, the external  func-
+       tion  defined  by pcre_callout is called (if it is set). The only argu-
+       ment is a pointer to a pcre_callout block. This structure contains  the
+       following fields:
 
          int          version;
          int          callout_number;
@@ -1408,55 +1620,72 @@ PCRE CALLOUTS
          int          capture_top;
          int          capture_last;
          void        *callout_data;
+         int          pattern_position;
+         int          next_item_length;
 
        The  version  field  is an integer containing the version number of the
-       block format. The current version  is  zero.  The  version  number  may
-       change  in  future if additional fields are added, but the intention is
-       never to remove any of the existing fields.
+       block format. The initial version was 0; the current version is 1.  The
+       version  number  will  change  again in future if additional fields are
+       added, but the intention is never to remove any of the existing fields.
 
-       The callout_number field contains the number of the  callout,  as  com-
-       piled into the pattern (that is, the number after ?C).
+       The  callout_number  field  contains the number of the callout, as com-
+       piled into the pattern (that is, the number after ?C for  manual  call-
+       outs, and 255 for automatically generated callouts).
 
        The  offset_vector field is a pointer to the vector of offsets that was
        passed by the caller to pcre_exec(). The contents can be  inspected  in
        order  to extract substrings that have been matched so far, in the same
        way as for extracting substrings after a match has completed.
 
-       The subject and subject_length fields contain copies  the  values  that
+       The subject and subject_length fields contain copies of the values that
        were passed to pcre_exec().
 
        The  start_match  field contains the offset within the subject at which
        the current match attempt started. If the pattern is not anchored,  the
-       callout  function  may  be  called several times for different starting
-       points.
+       callout function may be called several times from the same point in the
+       pattern for different starting points in the subject.
 
        The current_position field contains the offset within  the  subject  of
        the current match pointer.
 
        The  capture_top field contains one more than the number of the highest
-       numbered  captured  substring  so  far.  If  no  substrings  have  been
-       captured, the value of capture_top is one.
+       numbered captured substring so far. If no  substrings  have  been  cap-
+       tured, the value of capture_top is one.
 
        The  capture_last  field  contains the number of the most recently cap-
-       tured substring.
+       tured substring. If no substrings have been captured, its value is  -1.
 
-       The callout_data field contains a value that is passed  to  pcre_exec()
-       by  the  caller specifically so that it can be passed back in callouts.
-       It is passed in the pcre_callout field of the  pcre_extra  data  struc-
-       ture.  If  no  such  data  was  passed,  the value of callout_data in a
-       pcre_callout block is NULL. There is a description  of  the  pcre_extra
+       The  callout_data  field contains a value that is passed to pcre_exec()
+       by the caller specifically so that it can be passed back  in  callouts.
+       It  is  passed  in the pcre_callout field of the pcre_extra data struc-
+       ture. If no such data was  passed,  the  value  of  callout_data  in  a
+       pcre_callout  block  is  NULL. There is a description of the pcre_extra
        structure in the pcreapi documentation.
 
+       The pattern_position field is present from version 1 of the  pcre_call-
+       out structure. It contains the offset to the next item to be matched in
+       the pattern string.
+
+       The next_item_length field is present from version 1 of the  pcre_call-
+       out structure. It contains the length of the next item to be matched in
+       the pattern string. When the callout immediately precedes  an  alterna-
+       tion  bar, a closing parenthesis, or the end of the pattern, the length
+       is zero. When the callout precedes an opening parenthesis,  the  length
+       is that of the entire subpattern.
+
+       The  pattern_position  and next_item_length fields are intended to help
+       in distinguishing between different automatic callouts, which all  have
+       the same callout number. However, they are set for all callouts.
 
 
 RETURN VALUES
 
-       The callout function returns an integer. If the value is zero, matching
-       proceeds as normal. If the value is greater than zero,  matching  fails
-       at the current point, but backtracking to test other possibilities goes
-       ahead, just as if a lookahead assertion had failed.  If  the  value  is
-       less  than  zero,  the  match is abandoned, and pcre_exec() returns the
-       value.
+       The  external callout function returns an integer to PCRE. If the value
+       is zero, matching proceeds as normal. If  the  value  is  greater  than
+       zero,  matching  fails  at  the current point, but backtracking to test
+       other matching possibilities goes ahead, just as if a lookahead  asser-
+       tion  had  failed.  If  the value is less than zero, the match is aban-
+       doned, and pcre_exec() returns the negative value.
 
        Negative  values  should  normally  be   chosen   from   the   set   of
        PCRE_ERROR_xxx values. In particular, PCRE_ERROR_NOMATCH forces a stan-
@@ -1464,8 +1693,8 @@ RETURN VALUES
        reserved  for  use  by callout functions; it will never be used by PCRE
        itself.
 
-Last updated: 21 January 2003
-Copyright (c) 1997-2003 University of Cambridge.
+Last updated: 09 September 2004
+Copyright (c) 1997-2004 University of Cambridge.
 -----------------------------------------------------------------------------
 
 PCRE(3)                                                                PCRE(3)
@@ -1475,7 +1704,7 @@ PCRE(3)                                                                PCRE(3)
 NAME
        PCRE - Perl-compatible regular expressions
 
-DIFFERENCES FROM PERL
+DIFFERENCES BETWEEN PCRE AND PERL
 
        This  document describes the differences in the ways that PCRE and Perl
        handle regular expressions. The differences  described  here  are  with
@@ -1498,18 +1727,23 @@ DIFFERENCES FROM PERL
 
        4. Though binary zero characters are supported in the  subject  string,
        they are not allowed in a pattern string because it is passed as a nor-
-       mal C string, terminated by zero. The escape sequence "\0" can be  used
-       in the pattern to represent a binary zero.
+       mal C string, terminated by zero. The escape sequence \0 can be used in
+       the pattern to represent a binary zero.
 
        5.  The  following Perl escape sequences are not supported: \l, \u, \L,
-       \U, \P, \p, \N, and \X. In fact these are implemented by Perl's general
-       string-handling and are not part of its pattern matching engine. If any
-       of these are encountered by PCRE, an error is generated.
-
-       6. PCRE does support the \Q...\E escape for quoting substrings. Charac-
-       ters  in  between  are  treated as literals. This is slightly different
-       from Perl in that $ and @ are  also  handled  as  literals  inside  the
-       quotes.  In Perl, they cause variable interpolation (but of course PCRE
+       \U, and \N. In fact these are implemented by Perl's general string-han-
+       dling  and are not part of its pattern matching engine. If any of these
+       are encountered by PCRE, an error is generated.
+
+       6. The Perl escape sequences \p, \P, and \X are supported only if  PCRE
+       is  built  with Unicode character property support. The properties that
+       can be tested with \p and \P are limited to the general category  prop-
+       erties such as Lu and Nd.
+
+       7. PCRE does support the \Q...\E escape for quoting substrings. Charac-
+       ters in between are treated as literals.  This  is  slightly  different
+       from  Perl  in  that  $  and  @ are also handled as literals inside the
+       quotes. In Perl, they cause variable interpolation (but of course  PCRE
        does not have variables). Note the following examples:
 
            Pattern            PCRE matches      Perl matches
@@ -1519,58 +1753,63 @@ DIFFERENCES FROM PERL
            \Qabc\$xyz\E       abc\$xyz          abc\$xyz
            \Qabc\E\$\Qxyz\E   abc$xyz           abc$xyz
 
-       The \Q...\E sequence is recognized both inside  and  outside  character
+       The  \Q...\E  sequence  is recognized both inside and outside character
        classes.
 
-       7. Fairly obviously, PCRE does not support the (?{code}) and (?p{code})
-       constructions. However, there is some experimental support  for  recur-
-       sive  patterns  using the non-Perl items (?R), (?number) and (?P>name).
-       Also, the PCRE "callout" feature allows  an  external  function  to  be
-       called during pattern matching.
+       8. Fairly obviously, PCRE does not support the (?{code}) and (?p{code})
+       constructions.  However,  there is support for recursive patterns using
+       the non-Perl items (?R),  (?number),  and  (?P>name).  Also,  the  PCRE
+       "callout"  feature allows an external function to be called during pat-
+       tern matching. See the pcrecallout documentation for details.
 
-       8.  There  are some differences that are concerned with the settings of
-       captured strings when part of  a  pattern  is  repeated.  For  example,
-       matching  "aba"  against  the  pattern  /^(a(b)?)+$/  in Perl leaves $2
+       9. There are some differences that are concerned with the  settings  of
+       captured  strings  when  part  of  a  pattern is repeated. For example,
+       matching "aba" against the  pattern  /^(a(b)?)+$/  in  Perl  leaves  $2
        unset, but in PCRE it is set to "b".
 
-       9. PCRE  provides  some  extensions  to  the  Perl  regular  expression
-       facilities:
+       10. PCRE provides some extensions to the Perl regular expression facil-
+       ities:
 
-       (a)  Although  lookbehind  assertions  must match fixed length strings,
+       (a) Although lookbehind assertions must  match  fixed  length  strings,
        each alternative branch of a lookbehind assertion can match a different
        length of string. Perl requires them all to have the same length.
 
-       (b)  If PCRE_DOLLAR_ENDONLY is set and PCRE_MULTILINE is not set, the $
+       (b) If PCRE_DOLLAR_ENDONLY is set and PCRE_MULTILINE is not set, the  $
        meta-character matches only at the very end of the string.
 
        (c) If PCRE_EXTRA is set, a backslash followed by a letter with no spe-
        cial meaning is faulted.
 
-       (d)  If  PCRE_UNGREEDY is set, the greediness of the repetition quanti-
+       (d) If PCRE_UNGREEDY is set, the greediness of the  repetition  quanti-
        fiers is inverted, that is, by default they are not greedy, but if fol-
        lowed by a question mark they are.
 
-       (e)  PCRE_ANCHORED  can  be used to force a pattern to be tried only at
-       the first matching position in the subject string.
+       (e) PCRE_ANCHORED can be used at matching time to force a pattern to be
+       tried only at the first matching position in the subject string.
 
-       (f) The PCRE_NOTBOL, PCRE_NOTEOL, PCRE_NOTEMPTY, and  PCRE_NO_AUTO_CAP-
+       (f)  The PCRE_NOTBOL, PCRE_NOTEOL, PCRE_NOTEMPTY, and PCRE_NO_AUTO_CAP-
        TURE options for pcre_exec() have no Perl equivalents.
 
-       (g)  The (?R), (?number), and (?P>name) constructs allows for recursive
-       pattern matching (Perl can do  this  using  the  (?p{code})  construct,
+       (g) The (?R), (?number), and (?P>name) constructs allows for  recursive
+       pattern  matching  (Perl  can  do  this using the (?p{code}) construct,
        which PCRE cannot support.)
 
-       (h)  PCRE supports named capturing substrings, using the Python syntax.
+       (h) PCRE supports named capturing substrings, using the Python  syntax.
 
-       (i) PCRE supports the possessive quantifier  "++"  syntax,  taken  from
+       (i)  PCRE  supports  the  possessive quantifier "++" syntax, taken from
        Sun's Java package.
 
        (j) The (R) condition, for testing recursion, is a PCRE extension.
 
        (k) The callout facility is PCRE-specific.
 
-Last updated: 09 December 2003
-Copyright (c) 1997-2003 University of Cambridge.
+       (l) The partial matching facility is PCRE-specific.
+
+       (m) Patterns compiled by PCRE can be saved and re-used at a later time,
+       even on different hosts that have the other endianness.
+
+Last updated: 09 September 2004
+Copyright (c) 1997-2004 University of Cambridge.
 -----------------------------------------------------------------------------
 
 PCRE(3)                                                                PCRE(3)
@@ -1584,35 +1823,36 @@ PCRE REGULAR EXPRESSION DETAILS
 
        The  syntax  and semantics of the regular expressions supported by PCRE
        are described below. Regular expressions are also described in the Perl
-       documentation  and in a number of other books, some of which have copi-
-       ous examples. Jeffrey Friedl's "Mastering  Regular  Expressions",  pub-
-       lished  by  O'Reilly, covers them in great detail. The description here
-       is intended as reference documentation.
-
-       The basic operation of PCRE is on strings of bytes. However,  there  is
-       also  support for UTF-8 character strings. To use this support you must
-       build PCRE to include UTF-8 support, and then call pcre_compile()  with
-       the  PCRE_UTF8  option.  How  this affects the pattern matching is men-
-       tioned in several places below. There is also a summary of  UTF-8  fea-
-       tures in the section on UTF-8 support in the main pcre page.
-
-       A  regular  expression  is  a pattern that is matched against a subject
-       string from left to right. Most characters stand for  themselves  in  a
-       pattern,  and  match  the corresponding characters in the subject. As a
+       documentation  and  in  a  number  of books, some of which have copious
+       examples.  Jeffrey Friedl's "Mastering Regular Expressions",  published
+       by  O'Reilly, covers regular expressions in great detail. This descrip-
+       tion of PCRE's regular expressions is intended as reference material.
+
+       The original operation of PCRE was on strings of  one-byte  characters.
+       However,  there is now also support for UTF-8 character strings. To use
+       this, you must build PCRE to  include  UTF-8  support,  and  then  call
+       pcre_compile()  with  the  PCRE_UTF8  option.  How this affects pattern
+       matching is mentioned in several places below. There is also a  summary
+       of  UTF-8  features  in  the  section on UTF-8 support in the main pcre
+       page.
+
+       A regular expression is a pattern that is  matched  against  a  subject
+       string  from  left  to right. Most characters stand for themselves in a
+       pattern, and match the corresponding characters in the  subject.  As  a
        trivial example, the pattern
 
          The quick brown fox
 
-       matches a portion of a subject string that is identical to itself.  The
+       matches  a portion of a subject string that is identical to itself. The
        power of regular expressions comes from the ability to include alterna-
-       tives and repetitions in the pattern. These are encoded in the  pattern
-       by  the  use  of meta-characters, which do not stand for themselves but
+       tives  and repetitions in the pattern. These are encoded in the pattern
+       by the use of metacharacters, which do not  stand  for  themselves  but
        instead are interpreted in some special way.
 
-       There are two different sets of meta-characters: those that are  recog-
-       nized  anywhere in the pattern except within square brackets, and those
-       that are recognized in square brackets. Outside  square  brackets,  the
-       meta-characters are as follows:
+       There  are  two different sets of metacharacters: those that are recog-
+       nized anywhere in the pattern except within square brackets, and  those
+       that  are  recognized  in square brackets. Outside square brackets, the
+       metacharacters are as follows:
 
          \      general escape character with several uses
          ^      assert start of string (or line, in multiline mode)
@@ -1630,8 +1870,8 @@ PCRE REGULAR EXPRESSION DETAILS
                 also "possessive quantifier"
          {      start min/max quantifier
 
-       Part  of  a  pattern  that is in square brackets is called a "character
-       class". In a character class the only meta-characters are:
+       Part of a pattern that is in square brackets  is  called  a  "character
+       class". In a character class the only metacharacters are:
 
          \      general escape character
          ^      negate the class, but only if the first character
@@ -1640,33 +1880,33 @@ PCRE REGULAR EXPRESSION DETAILS
                   syntax)
          ]      terminates the character class
 
-       The following sections describe the use of each of the meta-characters.
+       The  following sections describe the use of each of the metacharacters.
 
 
 BACKSLASH
 
        The backslash character has several uses. Firstly, if it is followed by
-       a non-alphameric character, it takes  away  any  special  meaning  that
-       character  may  have.  This  use  of  backslash  as an escape character
+       a  non-alphanumeric  character,  it takes away any special meaning that
+       character may have. This  use  of  backslash  as  an  escape  character
        applies both inside and outside character classes.
 
-       For example, if you want to match a * character, you write  \*  in  the
-       pattern.   This  escaping  action  applies whether or not the following
-       character would otherwise be interpreted as a meta-character, so it  is
-       always  safe to precede a non-alphameric with backslash to specify that
-       it stands for itself. In particular, if you want to match a  backslash,
-       you write \\.
+       For  example,  if  you want to match a * character, you write \* in the
+       pattern.  This escaping action applies whether  or  not  the  following
+       character  would  otherwise be interpreted as a metacharacter, so it is
+       always safe to precede a non-alphanumeric  with  backslash  to  specify
+       that  it stands for itself. In particular, if you want to match a back-
+       slash, you write \\.
 
-       If  a  pattern is compiled with the PCRE_EXTENDED option, whitespace in
-       the pattern (other than in a character class) and characters between  a
+       If a pattern is compiled with the PCRE_EXTENDED option,  whitespace  in
+       the  pattern (other than in a character class) and characters between a
        # outside a character class and the next newline character are ignored.
-       An escaping backslash can be used to include a whitespace or #  charac-
+       An  escaping backslash can be used to include a whitespace or # charac-
        ter as part of the pattern.
 
-       If  you  want  to remove the special meaning from a sequence of charac-
-       ters, you can do so by putting them between \Q and \E. This is  differ-
-       ent  from  Perl  in  that  $  and  @ are handled as literals in \Q...\E
-       sequences in PCRE, whereas in Perl, $ and @ cause  variable  interpola-
+       If you want to remove the special meaning from a  sequence  of  charac-
+       ters,  you can do so by putting them between \Q and \E. This is differ-
+       ent from Perl in that $ and  @  are  handled  as  literals  in  \Q...\E
+       sequences  in  PCRE, whereas in Perl, $ and @ cause variable interpola-
        tion. Note the following examples:
 
          Pattern            PCRE matches   Perl matches
@@ -1676,14 +1916,16 @@ BACKSLASH
          \Qabc\$xyz\E       abc\$xyz       abc\$xyz
          \Qabc\E\$\Qxyz\E   abc$xyz        abc$xyz
 
-       The  \Q...\E  sequence  is recognized both inside and outside character
+       The \Q...\E sequence is recognized both inside  and  outside  character
        classes.
 
+   Non-printing characters
+
        A second use of backslash provides a way of encoding non-printing char-
-       acters  in patterns in a visible manner. There is no restriction on the
-       appearance of non-printing characters, apart from the binary zero  that
-       terminates  a  pattern,  but  when  a pattern is being prepared by text
-       editing, it is usually easier  to  use  one  of  the  following  escape
+       acters in patterns in a visible manner. There is no restriction on  the
+       appearance  of non-printing characters, apart from the binary zero that
+       terminates a pattern, but when a pattern  is  being  prepared  by  text
+       editing,  it  is  usually  easier  to  use  one of the following escape
        sequences than the binary character it represents:
 
          \a        alarm, that is, the BEL character (hex 07)
@@ -1697,31 +1939,32 @@ BACKSLASH
          \xhh      character with hex code hh
          \x{hhh..} character with hex code hhh... (UTF-8 mode only)
 
-       The  precise  effect of \cx is as follows: if x is a lower case letter,
-       it is converted to upper case. Then bit 6 of the character (hex 40)  is
-       inverted.   Thus  \cz becomes hex 1A, but \c{ becomes hex 3B, while \c;
+       The precise effect of \cx is as follows: if x is a lower  case  letter,
+       it  is converted to upper case. Then bit 6 of the character (hex 40) is
+       inverted.  Thus \cz becomes hex 1A, but \c{ becomes hex 3B,  while  \c;
        becomes hex 7B.
 
-       After \x, from zero to two hexadecimal digits are read (letters can  be
-       in  upper or lower case). In UTF-8 mode, any number of hexadecimal dig-
-       its may appear between \x{ and }, but the value of the  character  code
-       must  be  less  than  2**31  (that is, the maximum hexadecimal value is
-       7FFFFFFF). If characters other than hexadecimal digits  appear  between
-       \x{  and }, or if there is no terminating }, this form of escape is not
+       After  \x, from zero to two hexadecimal digits are read (letters can be
+       in upper or lower case). In UTF-8 mode, any number of hexadecimal  dig-
+       its  may  appear between \x{ and }, but the value of the character code
+       must be less than 2**31 (that is,  the  maximum  hexadecimal  value  is
+       7FFFFFFF).  If  characters other than hexadecimal digits appear between
+       \x{ and }, or if there is no terminating }, this form of escape is  not
        recognized. Instead, the initial \x will be interpreted as a basic hex-
-       adecimal escape, with no following digits, giving a byte whose value is
-       zero.
+       adecimal escape, with no following digits,  giving  a  character  whose
+       value is zero.
 
        Characters whose value is less than 256 can be defined by either of the
-       two  syntaxes for \x when PCRE is in UTF-8 mode. There is no difference
-       in the way they are handled. For example, \xdc is exactly the  same  as
+       two syntaxes for \x when PCRE is in UTF-8 mode. There is no  difference
+       in  the  way they are handled. For example, \xdc is exactly the same as
        \x{dc}.
 
-       After  \0  up  to  two further octal digits are read. In both cases, if
-       there are fewer than two digits, just those that are present are  used.
-       Thus  the sequence \0\x\07 specifies two binary zeros followed by a BEL
-       character (code value 7). Make sure you supply  two  digits  after  the
-       initial zero if the character that follows is itself an octal digit.
+       After \0 up to two further octal digits are read.  In  both  cases,  if
+       there  are fewer than two digits, just those that are present are used.
+       Thus the sequence \0\x\07 specifies two binary zeros followed by a  BEL
+       character  (code  value  7).  Make sure you supply two digits after the
+       initial zero if the pattern character that follows is itself  an  octal
+       digit.
 
        The handling of a backslash followed by a digit other than 0 is compli-
        cated.  Outside a character class, PCRE reads it and any following dig-
@@ -1758,10 +2001,14 @@ BACKSLASH
        All the sequences that define a single byte value  or  a  single  UTF-8
        character (in UTF-8 mode) can be used both inside and outside character
        classes. In addition, inside a character  class,  the  sequence  \b  is
-       interpreted  as  the  backspace character (hex 08). Outside a character
-       class it has a different meaning (see below).
+       interpreted as the backspace character (hex 08), and the sequence \X is
+       interpreted as the character "X".  Outside  a  character  class,  these
+       sequences have different meanings (see below).
+
+   Generic character types
 
-       The third use of backslash is for specifying generic character types:
+       The  third  use of backslash is for specifying generic character types.
+       The following are always recognized:
 
          \d     any decimal digit
          \D     any character that is not a decimal digit
@@ -1774,31 +2021,126 @@ BACKSLASH
        into  two disjoint sets. Any given character matches one, and only one,
        of each pair.
 
-       In UTF-8 mode, characters with values greater than 255 never match  \d,
-       \s, or \w, and always match \D, \S, and \W.
+       These character type sequences can appear both inside and outside char-
+       acter  classes.  They each match one character of the appropriate type.
+       If the current matching point is at the end of the subject string,  all
+       of them fail, since there is no character to match.
 
        For  compatibility  with Perl, \s does not match the VT character (code
        11).  This makes it different from the the POSIX "space" class. The  \s
        characters are HT (9), LF (10), FF (12), CR (13), and space (32).
 
-       A  "word" character is any letter or digit or the underscore character,
-       that is, any character which can be part of a Perl "word". The  defini-
-       tion  of  letters  and digits is controlled by PCRE's character tables,
-       and may vary if locale- specific matching is taking place (see  "Locale
-       support"  in  the  pcreapi  page).  For  example,  in the "fr" (French)
-       locale, some character codes greater than 128  are  used  for  accented
-       letters, and these are matched by \w.
-
-       These character type sequences can appear both inside and outside char-
-       acter classes. They each match one character of the  appropriate  type.
-       If  the current matching point is at the end of the subject string, all
-       of them fail, since there is no character to match.
+       A "word" character is an underscore or any character less than 256 that
+       is a letter or digit. The definition of  letters  and  digits  is  con-
+       trolled  by PCRE's low-valued character tables, and may vary if locale-
+       specific matching is taking place (see "Locale support" in the  pcreapi
+       page).  For  example,  in  the  "fr_FR" (French) locale, some character
+       codes greater than 128 are used for accented  letters,  and  these  are
+       matched by \w.
+
+       In  UTF-8 mode, characters with values greater than 128 never match \d,
+       \s, or \w, and always match \D, \S, and \W. This is true even when Uni-
+       code character property support is available.
+
+   Unicode character properties
+
+       When PCRE is built with Unicode character property support, three addi-
+       tional escape sequences to match generic character types are  available
+       when UTF-8 mode is selected. They are:
+
+        \p{xx}   a character with the xx property
+        \P{xx}   a character without the xx property
+        \X       an extended Unicode sequence
+
+       The  property  names represented by xx above are limited to the Unicode
+       general category properties. Each character has exactly one such  prop-
+       erty,  specified  by  a two-letter abbreviation. For compatibility with
+       Perl, negation can be specified by including a circumflex  between  the
+       opening  brace  and the property name. For example, \p{^Lu} is the same
+       as \P{Lu}.
+
+       If only one letter is specified with \p or  \P,  it  includes  all  the
+       properties that start with that letter. In this case, in the absence of
+       negation, the curly brackets in the escape sequence are optional; these
+       two examples have the same effect:
+
+         \p{L}
+         \pL
+
+       The following property codes are supported:
+
+         C     Other
+         Cc    Control
+         Cf    Format
+         Cn    Unassigned
+         Co    Private use
+         Cs    Surrogate
+
+         L     Letter
+         Ll    Lower case letter
+         Lm    Modifier letter
+         Lo    Other letter
+         Lt    Title case letter
+         Lu    Upper case letter
+
+         M     Mark
+         Mc    Spacing mark
+         Me    Enclosing mark
+         Mn    Non-spacing mark
+
+         N     Number
+         Nd    Decimal number
+         Nl    Letter number
+         No    Other number
+
+         P     Punctuation
+         Pc    Connector punctuation
+         Pd    Dash punctuation
+         Pe    Close punctuation
+         Pf    Final punctuation
+         Pi    Initial punctuation
+         Po    Other punctuation
+         Ps    Open punctuation
+
+         S     Symbol
+         Sc    Currency symbol
+         Sk    Modifier symbol
+         Sm    Mathematical symbol
+         So    Other symbol
+
+         Z     Separator
+         Zl    Line separator
+         Zp    Paragraph separator
+         Zs    Space separator
+
+       Extended  properties such as "Greek" or "InMusicalSymbols" are not sup-
+       ported by PCRE.
+
+       Specifying caseless matching does not affect  these  escape  sequences.
+       For example, \p{Lu} always matches only upper case letters.
+
+       The  \X  escape  matches  any number of Unicode characters that form an
+       extended Unicode sequence. \X is equivalent to
+
+         (?>\PM\pM*)
+
+       That is, it matches a character without the "mark"  property,  followed
+       by  zero  or  more  characters with the "mark" property, and treats the
+       sequence as an atomic group (see below).  Characters  with  the  "mark"
+       property are typically accents that affect the preceding character.
+
+       Matching  characters  by Unicode property is not fast, because PCRE has
+       to search a structure that contains  data  for  over  fifteen  thousand
+       characters. That is why the traditional escape sequences such as \d and
+       \w do not use Unicode properties in PCRE.
+
+   Simple assertions
 
        The fourth use of backslash is for certain simple assertions. An asser-
        tion  specifies a condition that has to be met at a particular point in
        a match, without consuming any characters from the subject string.  The
        use  of subpatterns for more complicated assertions is described below.
-       The backslashed assertions are
+       The backslashed assertions are:
 
          \b     matches at a word boundary
          \B     matches when not at a word boundary
@@ -1817,31 +2159,32 @@ BACKSLASH
        string if the first or last character matches \w, respectively.
 
        The  \A,  \Z,  and \z assertions differ from the traditional circumflex
-       and dollar (described below) in that they only ever match at  the  very
-       start  and  end  of the subject string, whatever options are set. Thus,
-       they are independent of multiline mode.
-
-       They are not affected by the PCRE_NOTBOL or PCRE_NOTEOL options. If the
-       startoffset argument of pcre_exec() is non-zero, indicating that match-
-       ing is to start at a point other than the beginning of the subject,  \A
-       can  never  match.  The difference between \Z and \z is that \Z matches
-       before a newline that is the last character of the string as well as at
-       the end of the string, whereas \z matches only at the end.
-
-       The  \G assertion is true only when the current matching position is at
-       the start point of the match, as specified by the startoffset  argument
-       of  pcre_exec().  It  differs  from \A when the value of startoffset is
-       non-zero. By calling pcre_exec() multiple times with appropriate  argu-
+       and dollar (described in the next section) in that they only ever match
+       at  the  very start and end of the subject string, whatever options are
+       set. Thus, they are independent of multiline mode. These  three  asser-
+       tions are not affected by the PCRE_NOTBOL or PCRE_NOTEOL options, which
+       affect only the behaviour of the circumflex and dollar  metacharacters.
+       However,  if the startoffset argument of pcre_exec() is non-zero, indi-
+       cating that matching is to start at a point other than the beginning of
+       the  subject,  \A  can never match. The difference between \Z and \z is
+       that \Z matches before a newline that is  the  last  character  of  the
+       string  as well as at the end of the string, whereas \z matches only at
+       the end.
+
+       The \G assertion is true only when the current matching position is  at
+       the  start point of the match, as specified by the startoffset argument
+       of pcre_exec(). It differs from \A when the  value  of  startoffset  is
+       non-zero.  By calling pcre_exec() multiple times with appropriate argu-
        ments, you can mimic Perl's /g option, and it is in this kind of imple-
        mentation where \G can be useful.
 
-       Note, however, that PCRE's interpretation of \G, as the  start  of  the
+       Note,  however,  that  PCRE's interpretation of \G, as the start of the
        current match, is subtly different from Perl's, which defines it as the
-       end of the previous match. In Perl, these can  be  different  when  the
-       previously  matched  string was empty. Because PCRE does just one match
+       end  of  the  previous  match. In Perl, these can be different when the
+       previously matched string was empty. Because PCRE does just  one  match
        at a time, it cannot reproduce this behaviour.
 
-       If all the alternatives of a pattern begin with \G, the  expression  is
+       If  all  the alternatives of a pattern begin with \G, the expression is
        anchored to the starting match position, and the "anchored" flag is set
        in the compiled regular expression.
 
@@ -1849,98 +2192,99 @@ BACKSLASH
 CIRCUMFLEX AND DOLLAR
 
        Outside a character class, in the default matching mode, the circumflex
-       character  is  an  assertion which is true only if the current matching
-       point is at the start of the subject string. If the  startoffset  argu-
-       ment  of  pcre_exec()  is  non-zero,  circumflex can never match if the
-       PCRE_MULTILINE option is unset. Inside a  character  class,  circumflex
+       character is an assertion that is true only  if  the  current  matching
+       point  is  at the start of the subject string. If the startoffset argu-
+       ment of pcre_exec() is non-zero, circumflex  can  never  match  if  the
+       PCRE_MULTILINE  option  is  unset. Inside a character class, circumflex
        has an entirely different meaning (see below).
 
-       Circumflex  need  not be the first character of the pattern if a number
-       of alternatives are involved, but it should be the first thing in  each
-       alternative  in  which  it appears if the pattern is ever to match that
-       branch. If all possible alternatives start with a circumflex, that  is,
-       if  the  pattern  is constrained to match only at the start of the sub-
-       ject, it is said to be an "anchored" pattern.  (There  are  also  other
+       Circumflex need not be the first character of the pattern if  a  number
+       of  alternatives are involved, but it should be the first thing in each
+       alternative in which it appears if the pattern is ever  to  match  that
+       branch.  If all possible alternatives start with a circumflex, that is,
+       if the pattern is constrained to match only at the start  of  the  sub-
+       ject,  it  is  said  to be an "anchored" pattern. (There are also other
        constructs that can cause a pattern to be anchored.)
 
-       A  dollar  character  is an assertion which is true only if the current
-       matching point is at the end of  the  subject  string,  or  immediately
+       A dollar character is an assertion that is true  only  if  the  current
+       matching  point  is  at  the  end of the subject string, or immediately
        before a newline character that is the last character in the string (by
-       default). Dollar need not be the last character of  the  pattern  if  a
-       number  of alternatives are involved, but it should be the last item in
-       any branch in which it appears.  Dollar has no  special  meaning  in  a
+       default).  Dollar  need  not  be the last character of the pattern if a
+       number of alternatives are involved, but it should be the last item  in
+       any  branch  in  which  it appears.  Dollar has no special meaning in a
        character class.
 
-       The  meaning  of  dollar  can be changed so that it matches only at the
-       very end of the string, by setting the  PCRE_DOLLAR_ENDONLY  option  at
+       The meaning of dollar can be changed so that it  matches  only  at  the
+       very  end  of  the string, by setting the PCRE_DOLLAR_ENDONLY option at
        compile time. This does not affect the \Z assertion.
 
        The meanings of the circumflex and dollar characters are changed if the
        PCRE_MULTILINE option is set. When this is the case, they match immedi-
-       ately  after  and  immediately  before  an  internal newline character,
-       respectively, in addition to matching at the start and end of the  sub-
-       ject  string.  For  example,  the  pattern  /^abc$/ matches the subject
-       string "def\nabc" in multiline mode, but not  otherwise.  Consequently,
-       patterns  that  are  anchored  in single line mode because all branches
-       start with ^ are not anchored in multiline mode, and a match  for  cir-
-       cumflex  is  possible  when  the startoffset argument of pcre_exec() is
-       non-zero. The PCRE_DOLLAR_ENDONLY option is ignored  if  PCRE_MULTILINE
-       is set.
-
-       Note  that  the sequences \A, \Z, and \z can be used to match the start
-       and end of the subject in both modes, and if all branches of a  pattern
-       start  with  \A it is always anchored, whether PCRE_MULTILINE is set or
+       ately after and  immediately  before  an  internal  newline  character,
+       respectively,  in addition to matching at the start and end of the sub-
+       ject string. For example,  the  pattern  /^abc$/  matches  the  subject
+       string  "def\nabc"  (where \n represents a newline character) in multi-
+       line mode, but not otherwise.  Consequently, patterns that are anchored
+       in  single line mode because all branches start with ^ are not anchored
+       in multiline mode, and a match for  circumflex  is  possible  when  the
+       startoffset   argument   of  pcre_exec()  is  non-zero.  The  PCRE_DOL-
+       LAR_ENDONLY option is ignored if PCRE_MULTILINE is set.
+
+       Note that the sequences \A, \Z, and \z can be used to match  the  start
+       and  end of the subject in both modes, and if all branches of a pattern
+       start with \A it is always anchored, whether PCRE_MULTILINE is  set  or
        not.
 
 
 FULL STOP (PERIOD, DOT)
 
        Outside a character class, a dot in the pattern matches any one charac-
-       ter  in  the  subject,  including a non-printing character, but not (by
-       default) newline.  In UTF-8 mode, a dot matches  any  UTF-8  character,
-       which  might  be  more than one byte long, except (by default) for new-
-       line. If the PCRE_DOTALL option is set, dots match  newlines  as  well.
-       The  handling of dot is entirely independent of the handling of circum-
-       flex and dollar, the only relationship being  that  they  both  involve
-       newline characters. Dot has no special meaning in a character class.
+       ter in the subject, including a non-printing  character,  but  not  (by
+       default)  newline.   In  UTF-8 mode, a dot matches any UTF-8 character,
+       which might be more than one byte long, except (by default) newline. If
+       the  PCRE_DOTALL  option  is set, dots match newlines as well. The han-
+       dling of dot is entirely independent of the handling of circumflex  and
+       dollar,  the  only  relationship  being  that they both involve newline
+       characters. Dot has no special meaning in a character class.
 
 
 MATCHING A SINGLE BYTE
 
        Outside a character class, the escape sequence \C matches any one byte,
-       both in and out of UTF-8 mode. Unlike a dot, it always matches  a  new-
-       line.  The  feature  is  provided  in Perl in order to match individual
-       bytes in UTF-8 mode.  Because it breaks up UTF-8 characters into  indi-
-       vidual  bytes,  what  remains  in  the  string may be a malformed UTF-8
-       string. For this reason it is best avoided.
+       both  in  and  out of UTF-8 mode. Unlike a dot, it can match a newline.
+       The feature is provided in Perl in order to match individual  bytes  in
+       UTF-8  mode.  Because  it  breaks  up  UTF-8 characters into individual
+       bytes, what remains in the string may be a malformed UTF-8 string.  For
+       this reason, the \C escape sequence is best avoided.
 
-       PCRE does not allow \C to appear in lookbehind assertions (see  below),
-       because in UTF-8 mode it makes it impossible to calculate the length of
-       the lookbehind.
+       PCRE  does  not  allow \C to appear in lookbehind assertions (described
+       below), because in UTF-8 mode this would make it impossible  to  calcu-
+       late the length of the lookbehind.
 
 
-SQUARE BRACKETS
+SQUARE BRACKETS AND CHARACTER CLASSES
 
        An opening square bracket introduces a character class, terminated by a
        closing square bracket. A closing square bracket on its own is not spe-
        cial. If a closing square bracket is required as a member of the class,
-       it  should  be  the first data character in the class (after an initial
+       it should be the first data character in the class  (after  an  initial
        circumflex, if present) or escaped with a backslash.
 
-       A character class matches a single character in the subject.  In  UTF-8
-       mode,  the character may occupy more than one byte. A matched character
+       A  character  class matches a single character in the subject. In UTF-8
+       mode, the character may occupy more than one byte. A matched  character
        must be in the set of characters defined by the class, unless the first
-       character  in  the  class definition is a circumflex, in which case the
-       subject character must not be in the set defined by  the  class.  If  a
-       circumflex  is actually required as a member of the class, ensure it is
+       character in the class definition is a circumflex, in  which  case  the
+       subject  character  must  not  be in the set defined by the class. If a
+       circumflex is actually required as a member of the class, ensure it  is
        not the first character, or escape it with a backslash.
 
-       For example, the character class [aeiou] matches any lower case  vowel,
-       while  [^aeiou]  matches  any character that is not a lower case vowel.
+       For  example, the character class [aeiou] matches any lower case vowel,
+       while [^aeiou] matches any character that is not a  lower  case  vowel.
        Note that a circumflex is just a convenient notation for specifying the
-       characters which are in the class by enumerating those that are not. It
-       is not an assertion: it still consumes a  character  from  the  subject
-       string, and fails if the current pointer is at the end of the string.
+       characters that are in the class by enumerating those that are  not.  A
+       class  that starts with a circumflex is not an assertion: it still con-
+       sumes a character from the subject string, and therefore  it  fails  if
+       the current pointer is at the end of the string.
 
        In  UTF-8 mode, characters with values greater than 255 can be included
        in a class as a literal string of bytes, or by using the  \x{  escaping
@@ -1949,58 +2293,64 @@ SQUARE BRACKETS
        When  caseless  matching  is set, any letters in a class represent both
        their upper case and lower case versions, so for  example,  a  caseless
        [aeiou]  matches  "A"  as well as "a", and a caseless [^aeiou] does not
-       match "A", whereas a caseful version would. PCRE does not  support  the
-       concept of case for characters with values greater than 255.
+       match "A", whereas a caseful version would. When running in UTF-8 mode,
+       PCRE  supports  the  concept of case for characters with values greater
+       than 128 only when it is compiled with Unicode property support.
 
-       The  newline character is never treated in any special way in character
-       classes, whatever the setting  of  the  PCRE_DOTALL  or  PCRE_MULTILINE
+       The newline character is never treated in any special way in  character
+       classes,  whatever  the  setting  of  the PCRE_DOTALL or PCRE_MULTILINE
        options is. A class such as [^a] will always match a newline.
 
-       The  minus (hyphen) character can be used to specify a range of charac-
-       ters in a character  class.  For  example,  [d-m]  matches  any  letter
-       between  d  and  m,  inclusive.  If  a minus character is required in a
-       class, it must be escaped with a backslash  or  appear  in  a  position
-       where  it cannot be interpreted as indicating a range, typically as the
+       The minus (hyphen) character can be used to specify a range of  charac-
+       ters  in  a  character  class.  For  example,  [d-m] matches any letter
+       between d and m, inclusive. If a  minus  character  is  required  in  a
+       class,  it  must  be  escaped  with a backslash or appear in a position
+       where it cannot be interpreted as indicating a range, typically as  the
        first or last character in the class.
 
        It is not possible to have the literal character "]" as the end charac-
-       ter  of a range. A pattern such as [W-]46] is interpreted as a class of
-       two characters ("W" and "-") followed by a literal string "46]", so  it
-       would  match  "W46]"  or  "-46]". However, if the "]" is escaped with a
-       backslash it is interpreted as the end of range, so [W-\]46] is  inter-
-       preted  as  a  single class containing a range followed by two separate
-       characters. The octal or hexadecimal representation of "]" can also  be
-       used to end a range.
-
-       Ranges  operate in the collating sequence of character values. They can
-       also  be  used  for  characters  specified  numerically,  for   example
-       [\000-\037].  In UTF-8 mode, ranges can include characters whose values
+       ter of a range. A pattern such as [W-]46] is interpreted as a class  of
+       two  characters ("W" and "-") followed by a literal string "46]", so it
+       would match "W46]" or "-46]". However, if the "]"  is  escaped  with  a
+       backslash  it is interpreted as the end of range, so [W-\]46] is inter-
+       preted as a class containing a range followed by two other  characters.
+       The  octal or hexadecimal representation of "]" can also be used to end
+       a range.
+
+       Ranges operate in the collating sequence of character values. They  can
+       also   be  used  for  characters  specified  numerically,  for  example
+       [\000-\037]. In UTF-8 mode, ranges can include characters whose  values
        are greater than 255, for example [\x{100}-\x{2ff}].
 
        If a range that includes letters is used when caseless matching is set,
        it matches the letters in either case. For example, [W-c] is equivalent
-       to [][\^_`wxyzabc], matched caselessly, and if character tables for the
-       "fr"  locale  are  in use, [\xc8-\xcb] matches accented E characters in
-       both cases.
-
-       The character types \d, \D, \s, \S, \w, and \W may  also  appear  in  a
-       character  class,  and add the characters that they match to the class.
-       For example, [\dABCDEF] matches any hexadecimal digit. A circumflex can
-       conveniently  be  used with the upper case character types to specify a
-       more restricted set of characters than the matching  lower  case  type.
-       For  example,  the  class  [^\W_]  matches any letter or digit, but not
-       underscore.
-
-       All non-alphameric characters other than \, -, ^ (at the start) and the
-       terminating ] are non-special in character classes, but it does no harm
-       if they are escaped.
+       to  [][\\^_`wxyzabc],  matched  caselessly,  and  in non-UTF-8 mode, if
+       character tables for the "fr_FR" locale are in use, [\xc8-\xcb] matches
+       accented  E  characters in both cases. In UTF-8 mode, PCRE supports the
+       concept of case for characters with values greater than 128  only  when
+       it is compiled with Unicode property support.
+
+       The  character types \d, \D, \p, \P, \s, \S, \w, and \W may also appear
+       in a character class, and add the characters that  they  match  to  the
+       class. For example, [\dABCDEF] matches any hexadecimal digit. A circum-
+       flex can conveniently be used with the upper case  character  types  to
+       specify  a  more  restricted  set of characters than the matching lower
+       case type. For example, the class [^\W_] matches any letter  or  digit,
+       but not underscore.
+
+       The  only  metacharacters  that are recognized in character classes are
+       backslash, hyphen (only where it can be  interpreted  as  specifying  a
+       range),  circumflex  (only  at the start), opening square bracket (only
+       when it can be interpreted as introducing a POSIX class name - see  the
+       next  section),  and  the  terminating closing square bracket. However,
+       escaping other non-alphanumeric characters does no harm.
 
 
 POSIX CHARACTER CLASSES
 
-       Perl supports the POSIX notation  for  character  classes,  which  uses
-       names  enclosed by [: and :] within the enclosing square brackets. PCRE
-       also supports this notation. For example,
+       Perl supports the POSIX notation for character classes. This uses names
+       enclosed  by  [: and :] within the enclosing square brackets. PCRE also
+       supports this notation. For example,
 
          [01[:alpha:]%]
 
@@ -2037,7 +2387,7 @@ POSIX CHARACTER CLASSES
        POSIX syntax [.ch.] and [=ch=] where "ch" is a "collating element", but
        these are not supported, and an error is given if they are encountered.
 
-       In UTF-8 mode, characters with values greater than 255 do not match any
+       In UTF-8 mode, characters with values greater than 128 do not match any
        of the POSIX character classes.
 
 
@@ -2104,13 +2454,14 @@ INTERNAL OPTION SETTING
        in the same way as the Perl-compatible options by using the  characters
        U  and X respectively. The (?X) flag setting is special in that it must
        always occur earlier in the pattern than any of the additional features
-       it turns on, even when it is at top level. It is best put at the start.
+       it  turns on, even when it is at top level. It is best to put it at the
+       start.
 
 
 SUBPATTERNS
 
        Subpatterns are delimited by parentheses (round brackets), which can be
-       nested.  Marking part of a pattern as a subpattern does two things:
+       nested.  Turning part of a pattern into a subpattern does two things:
 
        1. It localizes a set of alternatives. For example, the pattern
 
@@ -2120,11 +2471,11 @@ SUBPATTERNS
        the parentheses, it would match "cataract",  "erpillar"  or  the  empty
        string.
 
-       2.  It  sets  up  the  subpattern as a capturing subpattern (as defined
-       above).  When the whole pattern matches, that portion  of  the  subject
+       2.  It  sets  up  the  subpattern as a capturing subpattern. This means
+       that, when the whole pattern  matches,  that  portion  of  the  subject
        string that matched the subpattern is passed back to the caller via the
        ovector argument of pcre_exec(). Opening parentheses are  counted  from
-       left  to right (starting from 1) to obtain the numbers of the capturing
+       left  to  right  (starting  from 1) to obtain numbers for the capturing
        subpatterns.
 
        For example, if the string "the red king" is matched against  the  pat-
@@ -2169,41 +2520,43 @@ NAMED SUBPATTERNS
        Identifying  capturing  parentheses  by number is simple, but it can be
        very hard to keep track of the numbers in complicated  regular  expres-
        sions.  Furthermore,  if  an  expression  is  modified, the numbers may
-       change. To help with the difficulty, PCRE supports the naming  of  sub-
+       change. To help with this difficulty, PCRE supports the naming of  sub-
        patterns,  something  that  Perl  does  not  provide. The Python syntax
        (?P<name>...) is used. Names consist  of  alphanumeric  characters  and
        underscores, and must be unique within a pattern.
 
        Named  capturing  parentheses  are  still  allocated numbers as well as
        names. The PCRE API provides function calls for extracting the name-to-
-       number  translation  table from a compiled pattern. For further details
-       see the pcreapi documentation.
+       number  translation table from a compiled pattern. There is also a con-
+       venience function for extracting a captured substring by name. For fur-
+       ther details see the pcreapi documentation.
 
 
 REPETITION
 
-       Repetition is specified by quantifiers, which can  follow  any  of  the
+       Repetition  is  specified  by  quantifiers, which can follow any of the
        following items:
 
          a literal data character
          the . metacharacter
          the \C escape sequence
-         escapes such as \d that match single characters
+         the \X escape sequence (in UTF-8 mode with Unicode properties)
+         an escape such as \d that matches a single character
          a character class
          a back reference (see next section)
          a parenthesized subpattern (unless it is an assertion)
 
-       The  general repetition quantifier specifies a minimum and maximum num-
-       ber of permitted matches, by giving the two numbers in  curly  brackets
-       (braces),  separated  by  a comma. The numbers must be less than 65536,
+       The general repetition quantifier specifies a minimum and maximum  num-
+       ber  of  permitted matches, by giving the two numbers in curly brackets
+       (braces), separated by a comma. The numbers must be  less  than  65536,
        and the first must be less than or equal to the second. For example:
 
          z{2,4}
 
-       matches "zz", "zzz", or "zzzz". A closing brace on its  own  is  not  a
-       special  character.  If  the second number is omitted, but the comma is
-       present, there is no upper limit; if the second number  and  the  comma
-       are  both omitted, the quantifier specifies an exact number of required
+       matches  "zz",  "zzz",  or  "zzzz". A closing brace on its own is not a
+       special character. If the second number is omitted, but  the  comma  is
+       present,  there  is  no upper limit; if the second number and the comma
+       are both omitted, the quantifier specifies an exact number of  required
        matches. Thus
 
          [aeiou]{3,}
@@ -2212,14 +2565,17 @@ REPETITION
 
          \d{8}
 
-       matches exactly 8 digits. An opening curly bracket that  appears  in  a
-       position  where a quantifier is not allowed, or one that does not match
-       the syntax of a quantifier, is taken as a literal character. For  exam-
+       matches  exactly  8  digits. An opening curly bracket that appears in a
+       position where a quantifier is not allowed, or one that does not  match
+       the  syntax of a quantifier, is taken as a literal character. For exam-
        ple, {,6} is not a quantifier, but a literal string of four characters.
 
-       In UTF-8 mode, quantifiers apply to UTF-8  characters  rather  than  to
+       In  UTF-8  mode,  quantifiers  apply to UTF-8 characters rather than to
        individual bytes. Thus, for example, \x{100}{2} matches two UTF-8 char-
-       acters, each of which is represented by a two-byte sequence.
+       acters, each of which is represented by a two-byte sequence. Similarly,
+       when Unicode property support is available, \X{3} matches three Unicode
+       extended  sequences,  each of which may be several bytes long (and they
+       may be of different lengths).
 
        The quantifier {0} is permitted, causing the expression to behave as if
        the previous item and the quantifier were not present.
@@ -2247,15 +2603,15 @@ REPETITION
        as  possible  (up  to  the  maximum number of permitted times), without
        causing the rest of the pattern to fail. The classic example  of  where
        this gives problems is in trying to match comments in C programs. These
-       appear between the sequences /* and */ and within the  sequence,  indi-
-       vidual * and / characters may appear. An attempt to match C comments by
-       applying the pattern
+       appear between /* and */ and within the comment,  individual  *  and  /
+       characters  may  appear. An attempt to match C comments by applying the
+       pattern
 
          /\*.*\*/
 
        to the string
 
-         /* first command */  not comment  /* second comment */
+         /* first comment */  not comment  /* second comment */
 
        fails, because it matches the entire string owing to the greediness  of
        the .*  item.
@@ -2283,7 +2639,7 @@ REPETITION
        words, it inverts the default behaviour.
 
        When  a  parenthesized  subpattern  is quantified with a minimum repeat
-       count that is greater than 1 or with a limited maximum, more  store  is
+       count that is greater than 1 or with a limited maximum, more memory  is
        required  for  the  compiled  pattern, in proportion to the size of the
        minimum or maximum.
 
@@ -2374,7 +2730,7 @@ ATOMIC GROUPING AND POSSESSIVE QUANTIFIERS
        consists  of  an  additional  + character following a quantifier. Using
        this notation, the previous example can be rewritten as
 
-         \d++bar
+         \d++foo
 
        Possessive  quantifiers  are  always  greedy;  the   setting   of   the
        PCRE_UNGREEDY option is ignored. They are a convenient notation for the
@@ -2399,68 +2755,70 @@ ATOMIC GROUPING AND POSSESSIVE QUANTIFIERS
          aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 
        it takes a long time before reporting  failure.  This  is  because  the
-       string  can  be  divided  between  the two repeats in a large number of
-       ways, and all have to be tried. (The example used [!?]  rather  than  a
-       single  character  at the end, because both PCRE and Perl have an opti-
-       mization that allows for fast failure when a single character is  used.
-       They  remember  the last single character that is required for a match,
-       and fail early if it is not present in the string.)  If the pattern  is
-       changed to
+       string  can be divided between the internal \D+ repeat and the external
+       * repeat in a large number of ways, and all  have  to  be  tried.  (The
+       example  uses  [!?]  rather than a single character at the end, because
+       both PCRE and Perl have an optimization that allows  for  fast  failure
+       when  a single character is used. They remember the last single charac-
+       ter that is required for a match, and fail early if it is  not  present
+       in  the  string.)  If  the pattern is changed so that it uses an atomic
+       group, like this:
 
          ((?>\D+)|<\d+>)*[!?]
 
-       sequences  of non-digits cannot be broken, and failure happens quickly.
+       sequences of non-digits cannot be broken, and failure happens  quickly.
 
 
 BACK REFERENCES
 
        Outside a character class, a backslash followed by a digit greater than
        0 (and possibly further digits) is a back reference to a capturing sub-
-       pattern earlier (that is, to its left) in the pattern,  provided  there
+       pattern  earlier  (that is, to its left) in the pattern, provided there
        have been that many previous capturing left parentheses.
 
        However, if the decimal number following the backslash is less than 10,
-       it is always taken as a back reference, and causes  an  error  only  if
-       there  are  not that many capturing left parentheses in the entire pat-
-       tern. In other words, the parentheses that are referenced need  not  be
-       to  the left of the reference for numbers less than 10. See the section
-       entitled "Backslash" above for further details of the handling of  dig-
-       its following a backslash.
-
-       A  back  reference matches whatever actually matched the capturing sub-
-       pattern in the current subject string, rather  than  anything  matching
+       it  is  always  taken  as a back reference, and causes an error only if
+       there are not that many capturing left parentheses in the  entire  pat-
+       tern.  In  other words, the parentheses that are referenced need not be
+       to the left of the reference for numbers less than 10. See the  subsec-
+       tion  entitled  "Non-printing  characters" above for further details of
+       the handling of digits following a backslash.
+
+       A back reference matches whatever actually matched the  capturing  sub-
+       pattern  in  the  current subject string, rather than anything matching
        the subpattern itself (see "Subpatterns as subroutines" below for a way
        of doing that). So the pattern
 
          (sens|respons)e and \1ibility
 
-       matches "sense and sensibility" and "response and responsibility",  but
-       not  "sense and responsibility". If caseful matching is in force at the
-       time of the back reference, the case of letters is relevant. For  exam-
+       matches  "sense and sensibility" and "response and responsibility", but
+       not "sense and responsibility". If caseful matching is in force at  the
+       time  of the back reference, the case of letters is relevant. For exam-
        ple,
 
          ((?i)rah)\s+\1
 
-       matches  "rah  rah"  and  "RAH RAH", but not "RAH rah", even though the
+       matches "rah rah" and "RAH RAH", but not "RAH  rah",  even  though  the
        original capturing subpattern is matched caselessly.
 
-       Back references to named subpatterns use the Python  syntax  (?P=name).
+       Back  references  to named subpatterns use the Python syntax (?P=name).
        We could rewrite the above example as follows:
 
          (?<p1>(?i)rah)\s+(?P=p1)
 
-       There  may be more than one back reference to the same subpattern. If a
-       subpattern has not actually been used in a particular match,  any  back
+       There may be more than one back reference to the same subpattern. If  a
+       subpattern  has  not actually been used in a particular match, any back
        references to it always fail. For example, the pattern
 
          (a|(bc))\2
 
-       always  fails if it starts to match "a" rather than "bc". Because there
-       may be many capturing parentheses in a pattern,  all  digits  following
-       the  backslash  are taken as part of a potential back reference number.
+       always fails if it starts to match "a" rather than "bc". Because  there
+       may  be  many  capturing parentheses in a pattern, all digits following
+       the backslash are taken as part of a potential back  reference  number.
        If the pattern continues with a digit character, some delimiter must be
-       used  to  terminate  the back reference. If the PCRE_EXTENDED option is
-       set, this can be whitespace.  Otherwise an empty comment can be used.
+       used to terminate the back reference. If the  PCRE_EXTENDED  option  is
+       set,  this  can  be  whitespace.  Otherwise an empty comment (see "Com-
+       ments" below) can be used.
 
        A back reference that occurs inside the parentheses to which it  refers
        fails  when  the subpattern is first used, so, for example, (a\1) never
@@ -2482,14 +2840,26 @@ ASSERTIONS
        An assertion is a test on the characters  following  or  preceding  the
        current  matching  point that does not actually consume any characters.
        The simple assertions coded as \b, \B, \A, \G, \Z,  \z,  ^  and  $  are
-       described above.  More complicated assertions are coded as subpatterns.
-       There are two kinds: those that look ahead of the current  position  in
-       the subject string, and those that look behind it.
+       described above.
+
+       More  complicated  assertions  are  coded as subpatterns. There are two
+       kinds: those that look ahead of the current  position  in  the  subject
+       string,  and  those  that  look  behind  it. An assertion subpattern is
+       matched in the normal way, except that it does not  cause  the  current
+       matching position to be changed.
+
+       Assertion  subpatterns  are  not  capturing subpatterns, and may not be
+       repeated, because it makes no sense to assert the  same  thing  several
+       times.  If  any kind of assertion contains capturing subpatterns within
+       it, these are counted for the purposes of numbering the capturing  sub-
+       patterns in the whole pattern.  However, substring capturing is carried
+       out only for positive assertions, because it does not  make  sense  for
+       negative assertions.
 
-       An  assertion  subpattern  is matched in the normal way, except that it
-       does not cause the current matching position to be  changed.  Lookahead
-       assertions  start with (?= for positive assertions and (?! for negative
-       assertions. For example,
+   Lookahead assertions
+
+       Lookahead assertions start with (?= for positive assertions and (?! for
+       negative assertions. For example,
 
          \w+(?=;)
 
@@ -2506,13 +2876,15 @@ ASSERTIONS
        does not find an occurrence of "bar"  that  is  preceded  by  something
        other  than "foo"; it finds any occurrence of "bar" whatsoever, because
        the assertion (?!foo) is always true when the next three characters are
-       "bar". A lookbehind assertion is needed to achieve this effect.
+       "bar". A lookbehind assertion is needed to achieve the other effect.
 
        If you want to force a matching failure at some point in a pattern, the
        most convenient way to do it is  with  (?!)  because  an  empty  string
        always  matches, so an assertion that requires there not to be an empty
        string must always fail.
 
+   Lookbehind assertions
+
        Lookbehind assertions start with (?<= for positive assertions and  (?<!
        for negative assertions. For example,
 
@@ -2551,55 +2923,58 @@ ASSERTIONS
 
        PCRE does not allow the \C escape (which matches a single byte in UTF-8
        mode)  to appear in lookbehind assertions, because it makes it impossi-
-       ble to calculate the length of the lookbehind.
+       ble to calculate the length of the lookbehind. The \X escape, which can
+       match different numbers of bytes, is also not permitted.
 
-       Atomic groups can be used in conjunction with lookbehind assertions  to
+       Atomic  groups can be used in conjunction with lookbehind assertions to
        specify efficient matching at the end of the subject string. Consider a
        simple pattern such as
 
          abcd$
 
-       when applied to a long string that does  not  match.  Because  matching
+       when  applied  to  a  long string that does not match. Because matching
        proceeds from left to right, PCRE will look for each "a" in the subject
-       and then see if what follows matches the rest of the  pattern.  If  the
+       and  then  see  if what follows matches the rest of the pattern. If the
        pattern is specified as
 
          ^.*abcd$
 
-       the  initial .* matches the entire string at first, but when this fails
+       the initial .* matches the entire string at first, but when this  fails
        (because there is no following "a"), it backtracks to match all but the
-       last  character,  then all but the last two characters, and so on. Once
-       again the search for "a" covers the entire string, from right to  left,
+       last character, then all but the last two characters, and so  on.  Once
+       again  the search for "a" covers the entire string, from right to left,
        so we are no better off. However, if the pattern is written as
 
          ^(?>.*)(?<=abcd)
 
-       or, equivalently,
+       or, equivalently, using the possessive quantifier syntax,
 
          ^.*+(?<=abcd)
 
-       there  can  be  no  backtracking for the .* item; it can match only the
-       entire string. The subsequent lookbehind assertion does a  single  test
-       on  the last four characters. If it fails, the match fails immediately.
-       For long strings, this approach makes a significant difference  to  the
+       there can be no backtracking for the .* item; it  can  match  only  the
+       entire  string.  The subsequent lookbehind assertion does a single test
+       on the last four characters. If it fails, the match fails  immediately.
+       For  long  strings, this approach makes a significant difference to the
        processing time.
 
+   Using multiple assertions
+
        Several assertions (of any sort) may occur in succession. For example,
 
          (?<=\d{3})(?<!999)foo
 
-       matches  "foo" preceded by three digits that are not "999". Notice that
-       each of the assertions is applied independently at the  same  point  in
-       the  subject  string.  First  there  is a check that the previous three
-       characters are all digits, and then there is  a  check  that  the  same
+       matches "foo" preceded by three digits that are not "999". Notice  that
+       each  of  the  assertions is applied independently at the same point in
+       the subject string. First there is a  check  that  the  previous  three
+       characters  are  all  digits,  and  then there is a check that the same
        three characters are not "999".  This pattern does not match "foo" pre-
-       ceded by six characters, the first of which are  digits  and  the  last
-       three  of  which  are not "999". For example, it doesn't match "123abc-
+       ceded  by  six  characters,  the first of which are digits and the last
+       three of which are not "999". For example, it  doesn't  match  "123abc-
        foo". A pattern to do that is
 
          (?<=\d{3}...)(?<!999)foo
 
-       This time the first assertion looks at the  preceding  six  characters,
+       This  time  the  first assertion looks at the preceding six characters,
        checking that the first three are digits, and then the second assertion
        checks that the preceding three characters are not "999".
 
@@ -2607,245 +2982,449 @@ ASSERTIONS
 
          (?<=(?<!foo)bar)baz
 
-       matches an occurrence of "baz" that is preceded by "bar" which in  turn
+       matches  an occurrence of "baz" that is preceded by "bar" which in turn
        is not preceded by "foo", while
 
          (?<=\d{3}(?!999)...)foo
 
-       is another pattern which matches "foo" preceded by three digits and any
+       is another pattern that matches "foo" preceded by three digits and  any
        three characters that are not "999".
 
-       Assertion subpatterns are not capturing subpatterns,  and  may  not  be
-       repeated,  because  it  makes no sense to assert the same thing several
-       times. If any kind of assertion contains capturing  subpatterns  within
-       it,  these are counted for the purposes of numbering the capturing sub-
-       patterns in the whole pattern.  However, substring capturing is carried
-       out  only  for  positive assertions, because it does not make sense for
-       negative assertions.
-
 
 CONDITIONAL SUBPATTERNS
 
-       It is possible to cause the matching process to obey a subpattern  con-
-       ditionally  or to choose between two alternative subpatterns, depending
-       on the  result  of  an  assertion,  or  whether  a  previous  capturing
-       subpattern  matched  or not. The two possible forms of conditional sub-
-       pattern are
+       It  is possible to cause the matching process to obey a subpattern con-
+       ditionally or to choose between two alternative subpatterns,  depending
+       on  the result of an assertion, or whether a previous capturing subpat-
+       tern matched or not. The two possible forms of  conditional  subpattern
+       are
 
          (?(condition)yes-pattern)
          (?(condition)yes-pattern|no-pattern)
 
-       If the condition is satisfied, the yes-pattern is used;  otherwise  the
-       no-pattern  (if  present)  is used. If there are more than two alterna-
+       If  the  condition is satisfied, the yes-pattern is used; otherwise the
+       no-pattern (if present) is used. If there are more  than  two  alterna-
        tives in the subpattern, a compile-time error occurs.
 
        There are three kinds of condition. If the text between the parentheses
-       consists  of  a  sequence  of digits, the condition is satisfied if the
-       capturing subpattern of that number has previously matched. The  number
-       must  be  greater than zero. Consider the following pattern, which con-
-       tains non-significant white space to make it more readable (assume  the
-       PCRE_EXTENDED  option)  and  to  divide it into three parts for ease of
+       consists of a sequence of digits, the condition  is  satisfied  if  the
+       capturing  subpattern of that number has previously matched. The number
+       must be greater than zero. Consider the following pattern,  which  con-
+       tains  non-significant white space to make it more readable (assume the
+       PCRE_EXTENDED option) and to divide it into three  parts  for  ease  of
        discussion:
 
          ( \( )?    [^()]+    (?(1) \) )
 
-       The first part matches an optional opening  parenthesis,  and  if  that
+       The  first  part  matches  an optional opening parenthesis, and if that
        character is present, sets it as the first captured substring. The sec-
-       ond part matches one or more characters that are not  parentheses.  The
+       ond  part  matches one or more characters that are not parentheses. The
        third part is a conditional subpattern that tests whether the first set
        of parentheses matched or not. If they did, that is, if subject started
        with an opening parenthesis, the condition is true, and so the yes-pat-
-       tern is executed and a  closing  parenthesis  is  required.  Otherwise,
-       since  no-pattern  is  not  present, the subpattern matches nothing. In
-       other words,  this  pattern  matches  a  sequence  of  non-parentheses,
+       tern  is  executed  and  a  closing parenthesis is required. Otherwise,
+       since no-pattern is not present, the  subpattern  matches  nothing.  In
+       other  words,  this  pattern  matches  a  sequence  of non-parentheses,
        optionally enclosed in parentheses.
 
        If the condition is the string (R), it is satisfied if a recursive call
-       to the pattern or subpattern has been made. At "top level", the  condi-
-       tion  is  false.   This  is  a  PCRE  extension. Recursive patterns are
+       to  the pattern or subpattern has been made. At "top level", the condi-
+       tion is false.  This  is  a  PCRE  extension.  Recursive  patterns  are
        described in the next section.
 
-       If the condition is not a sequence of digits or  (R),  it  must  be  an
-       assertion.   This may be a positive or negative lookahead or lookbehind
-       assertion. Consider  this  pattern,  again  containing  non-significant
+       If  the  condition  is  not  a sequence of digits or (R), it must be an
+       assertion.  This may be a positive or negative lookahead or  lookbehind
+       assertion.  Consider  this  pattern,  again  containing non-significant
        white space, and with the two alternatives on the second line:
 
          (?(?=[^a-z]*[a-z])
          \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} )
 
-       The  condition  is  a  positive  lookahead  assertion  that  matches an
-       optional sequence of non-letters followed by a letter. In other  words,
-       it  tests  for the presence of at least one letter in the subject. If a
-       letter is found, the subject is matched against the first  alternative;
-       otherwise  it  is  matched  against  the  second.  This pattern matches
-       strings in one of the two forms dd-aaa-dd or dd-dd-dd,  where  aaa  are
+       The condition  is  a  positive  lookahead  assertion  that  matches  an
+       optional  sequence of non-letters followed by a letter. In other words,
+       it tests for the presence of at least one letter in the subject.  If  a
+       letter  is found, the subject is matched against the first alternative;
+       otherwise it is  matched  against  the  second.  This  pattern  matches
+       strings  in  one  of the two forms dd-aaa-dd or dd-dd-dd, where aaa are
        letters and dd are digits.
 
 
 COMMENTS
 
-       The sequence (?# marks the start of a comment which continues up to the
-       next closing parenthesis. Nested parentheses  are  not  permitted.  The
-       characters  that make up a comment play no part in the pattern matching
+       The sequence (?# marks the start of a comment that continues up to  the
+       next  closing  parenthesis.  Nested  parentheses are not permitted. The
+       characters that make up a comment play no part in the pattern  matching
        at all.
 
-       If the PCRE_EXTENDED option is set, an unescaped # character outside  a
+       If  the PCRE_EXTENDED option is set, an unescaped # character outside a
        character class introduces a comment that continues up to the next new-
        line character in the pattern.
 
 
 RECURSIVE PATTERNS
 
-       Consider the problem of matching a string in parentheses, allowing  for
-       unlimited  nested  parentheses.  Without the use of recursion, the best
-       that can be done is to use a pattern that  matches  up  to  some  fixed
-       depth  of  nesting.  It  is not possible to handle an arbitrary nesting
-       depth. Perl has provided an experimental facility that  allows  regular
-       expressions to recurse (amongst other things). It does this by interpo-
-       lating Perl code in the expression at run time, and the code can  refer
-       to the expression itself. A Perl pattern to solve the parentheses prob-
-       lem can be created like this:
+       Consider  the problem of matching a string in parentheses, allowing for
+       unlimited nested parentheses. Without the use of  recursion,  the  best
+       that  can  be  done  is  to use a pattern that matches up to some fixed
+       depth of nesting. It is not possible to  handle  an  arbitrary  nesting
+       depth.  Perl  provides  a  facility  that allows regular expressions to
+       recurse (amongst other things). It does this by interpolating Perl code
+       in the expression at run time, and the code can refer to the expression
+       itself. A Perl pattern to solve the parentheses problem can be  created
+       like this:
 
          $re = qr{\( (?: (?>[^()]+) | (?p{$re}) )* \)}x;
 
        The (?p{...}) item interpolates Perl code at run time, and in this case
-       refers  recursively to the pattern in which it appears. Obviously, PCRE
-       cannot support the interpolation of Perl  code.  Instead,  it  supports
-       some  special  syntax for recursion of the entire pattern, and also for
+       refers recursively to the pattern in which it appears. Obviously,  PCRE
+       cannot  support  the  interpolation  of Perl code. Instead, it supports
+       some special syntax for recursion of the entire pattern, and  also  for
        individual subpattern recursion.
 
-       The special item that consists of (? followed by a number greater  than
+       The  special item that consists of (? followed by a number greater than
        zero and a closing parenthesis is a recursive call of the subpattern of
-       the given number, provided that it occurs inside that  subpattern.  (If
-       not,  it  is  a  "subroutine" call, which is described in the next sec-
-       tion.) The special item (?R) is a recursive call of the entire  regular
+       the  given  number, provided that it occurs inside that subpattern. (If
+       not, it is a "subroutine" call, which is described  in  the  next  sec-
+       tion.)  The special item (?R) is a recursive call of the entire regular
        expression.
 
-       For  example,  this  PCRE pattern solves the nested parentheses problem
-       (assume the  PCRE_EXTENDED  option  is  set  so  that  white  space  is
+       For example, this PCRE pattern solves the  nested  parentheses  problem
+       (assume  the  PCRE_EXTENDED  option  is  set  so  that  white  space is
        ignored):
 
          \( ( (?>[^()]+) | (?R) )* \)
 
-       First  it matches an opening parenthesis. Then it matches any number of
-       substrings which can either be a  sequence  of  non-parentheses,  or  a
-       recursive  match  of  the pattern itself (that is a correctly parenthe-
+       First it matches an opening parenthesis. Then it matches any number  of
+       substrings  which  can  either  be  a sequence of non-parentheses, or a
+       recursive match of the pattern itself (that is  a  correctly  parenthe-
        sized substring).  Finally there is a closing parenthesis.
 
-       If this were part of a larger pattern, you would not  want  to  recurse
+       If  this  were  part of a larger pattern, you would not want to recurse
        the entire pattern, so instead you could use this:
 
          ( \( ( (?>[^()]+) | (?1) )* \) )
 
-       We  have  put the pattern into parentheses, and caused the recursion to
-       refer to them instead of the whole pattern. In a larger pattern,  keep-
-       ing  track  of parenthesis numbers can be tricky. It may be more conve-
-       nient to use named parentheses instead. For this, PCRE uses  (?P>name),
-       which  is  an  extension  to the Python syntax that PCRE uses for named
+       We have put the pattern into parentheses, and caused the  recursion  to
+       refer  to them instead of the whole pattern. In a larger pattern, keep-
+       ing track of parenthesis numbers can be tricky. It may be  more  conve-
+       nient  to use named parentheses instead. For this, PCRE uses (?P>name),
+       which is an extension to the Python syntax that  PCRE  uses  for  named
        parentheses (Perl does not provide named parentheses). We could rewrite
        the above example as follows:
 
          (?P<pn> \( ( (?>[^()]+) | (?P>pn) )* \) )
 
-       This  particular example pattern contains nested unlimited repeats, and
-       so the use of atomic grouping for matching strings  of  non-parentheses
-       is  important  when  applying the pattern to strings that do not match.
+       This particular example pattern contains nested unlimited repeats,  and
+       so  the  use of atomic grouping for matching strings of non-parentheses
+       is important when applying the pattern to strings that  do  not  match.
        For example, when this pattern is applied to
 
          (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()
 
-       it yields "no match" quickly. However, if atomic grouping is not  used,
-       the  match  runs  for a very long time indeed because there are so many
-       different ways the + and * repeats can carve up the  subject,  and  all
+       it  yields "no match" quickly. However, if atomic grouping is not used,
+       the match runs for a very long time indeed because there  are  so  many
+       different  ways  the  + and * repeats can carve up the subject, and all
        have to be tested before failure can be reported.
 
        At the end of a match, the values set for any capturing subpatterns are
        those from the outermost level of the recursion at which the subpattern
-       value  is  set.   If  you want to obtain intermediate values, a callout
-       function can be used (see below and the pcrecallout documentation).  If
-       the pattern above is matched against
+       value is set.  If you want to obtain  intermediate  values,  a  callout
+       function can be used (see the next section and the pcrecallout documen-
+       tation). If the pattern above is matched against
 
          (ab(cd)ef)
 
-       the  value  for  the  capturing  parentheses is "ef", which is the last
-       value taken on at the top level. If additional parentheses  are  added,
+       the value for the capturing parentheses is  "ef",  which  is  the  last
+       value  taken  on at the top level. If additional parentheses are added,
        giving
 
          \( ( ( (?>[^()]+) | (?R) )* ) \)
             ^                        ^
             ^                        ^
 
-       the  string  they  capture is "ab(cd)ef", the contents of the top level
-       parentheses. If there are more than 15 capturing parentheses in a  pat-
+       the string they capture is "ab(cd)ef", the contents of  the  top  level
+       parentheses.  If there are more than 15 capturing parentheses in a pat-
        tern, PCRE has to obtain extra memory to store data during a recursion,
-       which it does by using pcre_malloc, freeing  it  via  pcre_free  after-
-       wards.  If  no  memory  can  be  obtained,  the  match  fails  with the
+       which  it  does  by  using pcre_malloc, freeing it via pcre_free after-
+       wards. If  no  memory  can  be  obtained,  the  match  fails  with  the
        PCRE_ERROR_NOMEMORY error.
 
-       Do not confuse the (?R) item with the condition (R),  which  tests  for
-       recursion.   Consider  this pattern, which matches text in angle brack-
-       ets, allowing for arbitrary nesting. Only digits are allowed in  nested
-       brackets  (that is, when recursing), whereas any characters are permit-
+       Do  not  confuse  the (?R) item with the condition (R), which tests for
+       recursion.  Consider this pattern, which matches text in  angle  brack-
+       ets,  allowing for arbitrary nesting. Only digits are allowed in nested
+       brackets (that is, when recursing), whereas any characters are  permit-
        ted at the outer level.
 
          < (?: (?(R) \d++  | [^<>]*+) | (?R)) * >
 
-       In this pattern, (?(R) is the start of a conditional  subpattern,  with
-       two  different  alternatives for the recursive and non-recursive cases.
+       In  this  pattern, (?(R) is the start of a conditional subpattern, with
+       two different alternatives for the recursive and  non-recursive  cases.
        The (?R) item is the actual recursive call.
 
 
 SUBPATTERNS AS SUBROUTINES
 
        If the syntax for a recursive subpattern reference (either by number or
-       by  name)  is used outside the parentheses to which it refers, it oper-
-       ates like a subroutine in a programming language.  An  earlier  example
+       by name) is used outside the parentheses to which it refers,  it  oper-
+       ates  like  a  subroutine in a programming language. An earlier example
        pointed out that the pattern
 
          (sens|respons)e and \1ibility
 
-       matches  "sense and sensibility" and "response and responsibility", but
+       matches "sense and sensibility" and "response and responsibility",  but
        not "sense and responsibility". If instead the pattern
 
          (sens|respons)e and (?1)ibility
 
-       is used, it does match "sense and responsibility" as well as the  other
-       two  strings.  Such  references must, however, follow the subpattern to
+       is  used, it does match "sense and responsibility" as well as the other
+       two strings. Such references must, however, follow  the  subpattern  to
        which they refer.
 
 
 CALLOUTS
 
        Perl has a feature whereby using the sequence (?{...}) causes arbitrary
-       Perl  code to be obeyed in the middle of matching a regular expression.
+       Perl code to be obeyed in the middle of matching a regular  expression.
        This makes it possible, amongst other things, to extract different sub-
        strings that match the same pair of parentheses when there is a repeti-
        tion.
 
        PCRE provides a similar feature, but of course it cannot obey arbitrary
        Perl code. The feature is called "callout". The caller of PCRE provides
-       an external function by putting its entry point in the global  variable
-       pcre_callout.   By default, this variable contains NULL, which disables
+       an  external function by putting its entry point in the global variable
+       pcre_callout.  By default, this variable contains NULL, which  disables
        all calling out.
 
-       Within a regular expression, (?C) indicates the  points  at  which  the
-       external  function  is  to be called. If you want to identify different
-       callout points, you can put a number less than 256 after the letter  C.
-       The  default  value is zero.  For example, this pattern has two callout
+       Within  a  regular  expression,  (?C) indicates the points at which the
+       external function is to be called. If you want  to  identify  different
+       callout  points, you can put a number less than 256 after the letter C.
+       The default value is zero.  For example, this pattern has  two  callout
        points:
 
          (?C1)abc(?C2)def
 
+       If the PCRE_AUTO_CALLOUT flag is passed to pcre_compile(), callouts are
+       automatically installed before each item in the pattern. They  are  all
+       numbered 255.
+
        During matching, when PCRE reaches a callout point (and pcre_callout is
-       set),  the  external function is called. It is provided with the number
-       of the callout, and, optionally, one item of data  originally  supplied
-       by  the  caller of pcre_exec(). The callout function may cause matching
-       to backtrack, or to fail altogether.  A  complete  description  of  the
-       interface  to the callout function is given in the pcrecallout documen-
-       tation.
-
-Last updated: 03 February 2003
-Copyright (c) 1997-2003 University of Cambridge.
+       set), the external function is called. It is provided with  the  number
+       of  the callout, the position in the pattern, and, optionally, one item
+       of data originally supplied by the caller of pcre_exec().  The  callout
+       function  may cause matching to proceed, to backtrack, or to fail alto-
+       gether. A complete description of the interface to the callout function
+       is given in the pcrecallout documentation.
+
+Last updated: 09 September 2004
+Copyright (c) 1997-2004 University of Cambridge.
+-----------------------------------------------------------------------------
+
+PCRE(3)                                                                PCRE(3)
+
+
+
+NAME
+       PCRE - Perl-compatible regular expressions
+
+PARTIAL MATCHING IN PCRE
+
+       In  normal  use  of  PCRE,  if  the  subject  string  that is passed to
+       pcre_exec() matches as far as it goes, but is too short  to  match  the
+       entire pattern, PCRE_ERROR_NOMATCH is returned. There are circumstances
+       where it might be helpful to distinguish this case from other cases  in
+       which there is no match.
+
+       Consider, for example, an application where a human is required to type
+       in data for a field with specific formatting requirements.  An  example
+       might be a date in the form ddmmmyy, defined by this pattern:
+
+         ^\d?\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\d\d$
+
+       If the application sees the user's keystrokes one by one, and can check
+       that what has been typed so far is potentially valid,  it  is  able  to
+       raise  an  error as soon as a mistake is made, possibly beeping and not
+       reflecting the character that has been typed. This  immediate  feedback
+       is  likely  to  be a better user interface than a check that is delayed
+       until the entire string has been entered.
+
+       PCRE supports the concept of partial matching by means of the PCRE_PAR-
+       TIAL  option,  which  can be set when calling pcre_exec(). When this is
+       done,  the   return   code   PCRE_ERROR_NOMATCH   is   converted   into
+       PCRE_ERROR_PARTIAL  if  at  any  time  during  the matching process the
+       entire subject string matched part of the pattern. No captured data  is
+       set when this occurs.
+
+       Using PCRE_PARTIAL disables one of PCRE's optimizations. PCRE remembers
+       the last literal byte in a pattern, and abandons  matching  immediately
+       if  such a byte is not present in the subject string. This optimization
+       cannot be used for a subject string that might match only partially.
+
+
+RESTRICTED PATTERNS FOR PCRE_PARTIAL
+
+       Because of the way certain internal optimizations  are  implemented  in
+       PCRE,  the  PCRE_PARTIAL  option  cannot  be  used  with  all patterns.
+       Repeated single characters such as
+
+         a{2,4}
+
+       and repeated single metasequences such as
+
+         \d+
+
+       are not permitted if the maximum number of occurrences is greater  than
+       one.  Optional items such as \d? (where the maximum is one) are permit-
+       ted.  Quantifiers with any values are permitted after  parentheses,  so
+       the invalid examples above can be coded thus:
+
+         (a){2,4}
+         (\d)+
+
+       These  constructions  run more slowly, but for the kinds of application
+       that are envisaged for this facility, this is not felt to  be  a  major
+       restriction.
+
+       If  PCRE_PARTIAL  is  set  for  a  pattern that does not conform to the
+       restrictions, pcre_exec() returns the error code  PCRE_ERROR_BADPARTIAL
+       (-13).
+
+
+EXAMPLE OF PARTIAL MATCHING USING PCRETEST
+
+       If  the  escape  sequence  \P  is  present in a pcretest data line, the
+       PCRE_PARTIAL flag is used for the match. Here is a run of pcretest that
+       uses the date example quoted above:
+
+           re> /^\d?\d(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)\d\d$/
+         data> 25jun04P
+          0: 25jun04
+          1: jun
+         data> 25dec3P
+         Partial match
+         data> 3juP
+         Partial match
+         data> 3jujP
+         No match
+         data> jP
+         No match
+
+       The  first  data  string  is  matched completely, so pcretest shows the
+       matched substrings. The remaining four strings do not  match  the  com-
+       plete pattern, but the first two are partial matches.
+
+Last updated: 08 September 2004
+Copyright (c) 1997-2004 University of Cambridge.
+-----------------------------------------------------------------------------
+
+PCRE(3)                                                                PCRE(3)
+
+
+
+NAME
+       PCRE - Perl-compatible regular expressions
+
+SAVING AND RE-USING PRECOMPILED PCRE PATTERNS
+
+       If  you  are running an application that uses a large number of regular
+       expression patterns, it may be useful to store them  in  a  precompiled
+       form  instead  of  having to compile them every time the application is
+       run.  If you are not  using  any  private  character  tables  (see  the
+       pcre_maketables()  documentation),  this is relatively straightforward.
+       If you are using private tables, it is a little bit more complicated.
+
+       If you save compiled patterns to a file, you can copy them to a differ-
+       ent  host  and  run them there. This works even if the new host has the
+       opposite endianness to the one on which  the  patterns  were  compiled.
+       There  may  be a small performance penalty, but it should be insignifi-
+       cant.
+
+
+SAVING A COMPILED PATTERN
+       The value returned by pcre_compile() points to a single block of memory
+       that  holds  the compiled pattern and associated data. You can find the
+       length of this block in bytes by calling pcre_fullinfo() with an  argu-
+       ment  of  PCRE_INFO_SIZE. You can then save the data in any appropriate
+       manner. Here is sample code that compiles a pattern and writes it to  a
+       file. It assumes that the variable fd refers to a file that is open for
+       output:
+
+         int erroroffset, rc, size;
+         char *error;
+         pcre *re;
+
+         re = pcre_compile("my pattern", 0, &error, &erroroffset, NULL);
+         if (re == NULL) { ... handle errors ... }
+         rc = pcre_fullinfo(re, NULL, PCRE_INFO_SIZE, &size);
+         if (rc < 0) { ... handle errors ... }
+         rc = fwrite(re, 1, size, fd);
+         if (rc != size) { ... handle errors ... }
+
+       In this example, the bytes  that  comprise  the  compiled  pattern  are
+       copied  exactly.  Note that this is binary data that may contain any of
+       the 256 possible byte  values.  On  systems  that  make  a  distinction
+       between binary and non-binary data, be sure that the file is opened for
+       binary output.
+
+       If you want to write more than one pattern to a file, you will have  to
+       devise  a  way of separating them. For binary data, preceding each pat-
+       tern with its length is probably  the  most  straightforward  approach.
+       Another  possibility is to write out the data in hexadecimal instead of
+       binary, one pattern to a line.
+
+       Saving compiled patterns in a file is only one possible way of  storing
+       them  for later use. They could equally well be saved in a database, or
+       in the memory of some daemon process that passes them  via  sockets  to
+       the processes that want them.
+
+       If  the pattern has been studied, it is also possible to save the study
+       data in a similar way to the compiled  pattern  itself.  When  studying
+       generates  additional  information, pcre_study() returns a pointer to a
+       pcre_extra data block. Its format is defined in the section on matching
+       a  pattern in the pcreapi documentation. The study_data field points to
+       the binary study data,  and  this  is  what  you  must  save  (not  the
+       pcre_extra  block itself). The length of the study data can be obtained
+       by calling pcre_fullinfo() with  an  argument  of  PCRE_INFO_STUDYSIZE.
+       Remember  to check that pcre_study() did return a non-NULL value before
+       trying to save the study data.
+
+
+RE-USING A PRECOMPILED PATTERN
+
+       Re-using a precompiled pattern is straightforward. Having  reloaded  it
+       into main memory, you pass its pointer to pcre_exec() in the usual way.
+       This should work even on another host, and even if that  host  has  the
+       opposite endianness to the one where the pattern was compiled.
+
+       However,  if  you  passed a pointer to custom character tables when the
+       pattern was compiled (the tableptr  argument  of  pcre_compile()),  you
+       must now pass a similar pointer to pcre_exec(), because the value saved
+       with the compiled pattern will obviously be  nonsense.  A  field  in  a
+       pcre_extra()  block is used to pass this data, as described in the sec-
+       tion on matching a pattern in the pcreapi documentation.
+
+       If you did not provide custom character tables  when  the  pattern  was
+       compiled,  the  pointer  in  the compiled pattern is NULL, which causes
+       pcre_exec() to use PCRE's internal tables. Thus, you  do  not  need  to
+       take any special action at run time in this case.
+
+       If  you  saved study data with the compiled pattern, you need to create
+       your own pcre_extra data block and set the study_data field to point to
+       the  reloaded  study  data. You must also set the PCRE_EXTRA_STUDY_DATA
+       bit in the flags field to indicate that study  data  is  present.  Then
+       pass the pcre_extra block to pcre_exec() in the usual way.
+
+
+COMPATIBILITY WITH DIFFERENT PCRE RELEASES
+
+       The  layout  of the control block that is at the start of the data that
+       makes up a compiled pattern was changed for release 5.0.  If  you  have
+       any  saved  patterns  that  were compiled with previous releases (not a
+       facility that was previously advertised), you will  have  to  recompile
+       them  for  release  5.0. However, from now on, it should be possible to
+       make changes in a compabible manner.
+
+Last updated: 10 September 2004
+Copyright (c) 1997-2004 University of Cambridge.
 -----------------------------------------------------------------------------
 
 PCRE(3)                                                                PCRE(3)
@@ -2862,63 +3441,73 @@ PCRE PERFORMANCE
        like  [aeiou]  than  a set of alternatives such as (a|e|i|o|u). In gen-
        eral, the simplest construction that provides the required behaviour is
        usually  the  most  efficient.  Jeffrey Friedl's book contains a lot of
-       discussion about optimizing regular expressions for  efficient  perfor-
-       mance.
+       useful general discussion  about  optimizing  regular  expressions  for
+       efficient  performance. This document contains a few observations about
+       PCRE.
 
-       When  a  pattern  begins  with .* not in parentheses, or in parentheses
+       Using Unicode character properties (the \p,  \P,  and  \X  escapes)  is
+       slow,  because PCRE has to scan a structure that contains data for over
+       fifteen thousand characters whenever it needs a  character's  property.
+       If  you  can  find  an  alternative pattern that does not use character
+       properties, it will probably be faster.
+
+       When a pattern begins with .* not in  parentheses,  or  in  parentheses
        that are not the subject of a backreference, and the PCRE_DOTALL option
-       is  set, the pattern is implicitly anchored by PCRE, since it can match
-       only at the start of a subject string. However, if PCRE_DOTALL  is  not
-       set,  PCRE  cannot  make this optimization, because the . metacharacter
-       does not then match a newline, and if the subject string contains  new-
-       lines,  the  pattern may match from the character immediately following
+       is set, the pattern is implicitly anchored by PCRE, since it can  match
+       only  at  the start of a subject string. However, if PCRE_DOTALL is not
+       set, PCRE cannot make this optimization, because  the  .  metacharacter
+       does  not then match a newline, and if the subject string contains new-
+       lines, the pattern may match from the character  immediately  following
        one of them instead of from the very start. For example, the pattern
 
          .*second
 
-       matches the subject "first\nand second" (where \n stands for a  newline
-       character),  with the match starting at the seventh character. In order
+       matches  the subject "first\nand second" (where \n stands for a newline
+       character), with the match starting at the seventh character. In  order
        to do this, PCRE has to retry the match starting after every newline in
        the subject.
 
-       If  you  are using such a pattern with subject strings that do not con-
+       If you are using such a pattern with subject strings that do  not  con-
        tain newlines, the best performance is obtained by setting PCRE_DOTALL,
-       or  starting  the pattern with ^.* to indicate explicit anchoring. That
-       saves PCRE from having to scan along the subject looking for a  newline
+       or starting the pattern with ^.* to indicate explicit  anchoring.  That
+       saves  PCRE from having to scan along the subject looking for a newline
        to restart at.
 
-       Beware  of  patterns  that contain nested indefinite repeats. These can
-       take a long time to run when applied to a string that does  not  match.
+       Beware of patterns that contain nested indefinite  repeats.  These  can
+       take  a  long time to run when applied to a string that does not match.
        Consider the pattern fragment
 
          (a+)*
 
-       This  can  match "aaaa" in 33 different ways, and this number increases
-       very rapidly as the string gets longer. (The * repeat can match  0,  1,
-       2,  3,  or  4  times,  and  for each of those cases other than 0, the +
-       repeats can match different numbers of times.) When  the  remainder  of
+       This can match "aaaa" in 33 different ways, and this  number  increases
+       very  rapidly  as the string gets longer. (The * repeat can match 0, 1,
+       2, 3, or 4 times, and for each of those  cases  other  than  0,  the  +
+       repeats  can  match  different numbers of times.) When the remainder of
        the pattern is such that the entire match is going to fail, PCRE has in
-       principle to try  every  possible  variation,  and  this  can  take  an
+       principle  to  try  every  possible  variation,  and  this  can take an
        extremely long time.
 
        An optimization catches some of the more simple cases such as
 
          (a+)*b
 
-       where  a  literal  character  follows. Before embarking on the standard
-       matching procedure, PCRE checks that there is a "b" later in  the  sub-
-       ject  string, and if there is not, it fails the match immediately. How-
-       ever, when there is no following literal this  optimization  cannot  be
+       where a literal character follows. Before  embarking  on  the  standard
+       matching  procedure,  PCRE  checks  that  there  is  a "b" later in the
+       subject string, and if there is not, it fails  the  match  immediately.
+       However, when there is no following literal this optimization cannot be
        used. You can see the difference by comparing the behaviour of
 
          (a+)*\d
 
-       with  the  pattern  above.  The former gives a failure almost instantly
-       when applied to a whole line of  "a"  characters,  whereas  the  latter
+       with the pattern above. The former gives  a  failure  almost  instantly
+       when  applied  to  a  whole  line of "a" characters, whereas the latter
        takes an appreciable time with strings longer than about 20 characters.
 
-Last updated: 03 February 2003
-Copyright (c) 1997-2003 University of Cambridge.
+       In many cases, the solution to this kind of performance issue is to use
+       an atomic group or a possessive quantifier.
+
+Last updated: 09 September 2004
+Copyright (c) 1997-2004 University of Cambridge.
 -----------------------------------------------------------------------------
 
 PCRE(3)                                                                PCRE(3)
@@ -2929,6 +3518,7 @@ NAME
        PCRE - Perl-compatible regular expressions.
 
 SYNOPSIS OF POSIX API
+
        #include <pcreposix.h>
 
        int regcomp(regex_t *preg, const char *pattern,
@@ -2947,13 +3537,13 @@ DESCRIPTION
 
        This  set  of  functions provides a POSIX-style API to the PCRE regular
        expression package. See the pcreapi documentation for a description  of
-       the native API, which contains additional functionality.
+       PCRE's native API, which contains additional functionality.
 
        The functions described here are just wrapper functions that ultimately
        call  the  PCRE  native  API.  Their  prototypes  are  defined  in  the
        pcreposix.h  header  file,  and  on  Unix systems the library itself is
        called pcreposix.a, so can be accessed by  adding  -lpcreposix  to  the
-       command  for  linking an application which uses them. Because the POSIX
+       command  for  linking  an application that uses them. Because the POSIX
        functions call the native ones, it is also necessary to add -lpcre.
 
        I have implemented only those option bits that can be reasonably mapped
@@ -2985,7 +3575,7 @@ COMPILING A PATTERN
        The  function regcomp() is called to compile a pattern into an internal
        form. The pattern is a C string terminated by a  binary  zero,  and  is
        passed  in  the  argument  pattern. The preg argument is a pointer to a
-       regex_t structure which is used as a base for storing information about
+       regex_t structure that is used as a base for storing information  about
        the compiled expression.
 
        The argument cflags is either zero, or contains one or more of the bits
@@ -3036,24 +3626,24 @@ MATCHING NEWLINE CHARACTERS
 
                                  Default   Change with
 
-         . matches newline          yes      REG_NEWLINE
-         newline matches [^a]       yes      REG_NEWLINE
-         $ matches \n at end        no       REG_NEWLINE
-         $ matches \n in middle     no       REG_NEWLINE
-         ^ matches \n in middle     no       REG_NEWLINE
+         . matches newline          yes    REG_NEWLINE
+         newline matches [^a]       yes    REG_NEWLINE
+         $ matches \n at end        no     REG_NEWLINE
+         $ matches \n in middle     no     REG_NEWLINE
+         ^ matches \n in middle     no     REG_NEWLINE
 
        PCRE's behaviour is the same as Perl's, except that there is no equiva-
-       lent for PCRE_DOLLARENDONLY in Perl. In both PCRE and Perl, there is no
-       way to stop newline from matching [^a].
+       lent for PCRE_DOLLAR_ENDONLY in Perl. In both PCRE and Perl,  there  is
+       no way to stop newline from matching [^a].
 
        The   default  POSIX  newline  handling  can  be  obtained  by  setting
-       PCRE_DOTALL and PCRE_DOLLARENDONLY, but there is no way  to  make  PCRE
+       PCRE_DOTALL and PCRE_DOLLAR_ENDONLY, but there is no way to  make  PCRE
        behave exactly as for the REG_NEWLINE action.
 
 
 MATCHING A PATTERN
 
-       The  function  regexec() is called to match a pre-compiled pattern preg
+       The  function  regexec()  is  called  to  match a compiled pattern preg
        against a given string, which is terminated by a zero byte, subject  to
        the options in eflags. These can be:
 
@@ -3092,7 +3682,7 @@ ERROR MESSAGES
        tion is the size of buffer needed to hold the whole message.
 
 
-STORAGE
+MEMORY USAGE
 
        Compiling a regular expression causes memory to be allocated and  asso-
        ciated  with  the preg structure. The function regfree() frees all such
@@ -3106,8 +3696,8 @@ AUTHOR
        University Computing Service,
        Cambridge CB2 3QG, England.
 
-Last updated: 03 February 2003
-Copyright (c) 1997-2003 University of Cambridge.
+Last updated: 07 September 2004
+Copyright (c) 1997-2004 University of Cambridge.
 -----------------------------------------------------------------------------
 
 PCRE(3)                                                                PCRE(3)
@@ -3134,24 +3724,34 @@ PCRE SAMPLE PROGRAM
        bility  of  matching an empty string. Comments in the code explain what
        is going on.
 
-       On a Unix system that has PCRE installed in /usr/local, you can compile
-       the demonstration program using a command like this:
+       If PCRE is installed in the standard include  and  library  directories
+       for  your  system, you should be able to compile the demonstration pro-
+       gram using this command:
+
+         gcc -o pcredemo pcredemo.c -lpcre
+
+       If PCRE is installed elsewhere, you may need to add additional  options
+       to  the  command line. For example, on a Unix-like system that has PCRE
+       installed in /usr/local, you  can  compile  the  demonstration  program
+       using a command like this:
 
-         gcc -o pcredemo pcredemo.c -I/usr/local/include \
+         gcc -o pcredemo -I/usr/local/include pcredemo.c \
              -L/usr/local/lib -lpcre
 
-       Then you can run simple tests like this:
+       Once  you  have  compiled the demonstration program, you can run simple
+       tests like this:
 
          ./pcredemo 'cat|dog' 'the cat sat on the mat'
          ./pcredemo -g 'cat|dog' 'the dog sat on the cat'
 
-       Note  that  there  is  a  much  more comprehensive test program, called
-       pcretest, which supports  many  more  facilities  for  testing  regular
+       Note that there is a  much  more  comprehensive  test  program,  called
+       pcretest,  which  supports  many  more  facilities  for testing regular
        expressions and the PCRE library. The pcredemo program is provided as a
        simple coding example.
 
-       On some operating systems (e.g. Solaris) you may get an error like this
-       when you try to run pcredemo:
+       On some operating systems (e.g. Solaris), when PCRE is not installed in
+       the standard library directory, you may get an error like this when you
+       try to run pcredemo:
 
          ld.so.1:  a.out:  fatal:  libpcre.so.0:  open failed: No such file or
        directory
@@ -3161,9 +3761,9 @@ PCRE SAMPLE PROGRAM
 
          -R/usr/local/lib
 
-       to the compile command to get round this problem.
+       (for example) to the compile command to get round this problem.
 
-Last updated: 28 January 2003
-Copyright (c) 1997-2003 University of Cambridge.
+Last updated: 09 September 2004
+Copyright (c) 1997-2004 University of Cambridge.
 -----------------------------------------------------------------------------
 
index a20473cf24e94e0f8a978be47a0206a29690ea27..225843e2e298cee58de533c27e949c3fa48b767a 100644 (file)
@@ -12,29 +12,37 @@ Written by: Philip Hazel <ph10@cam.ac.uk>
            Copyright (c) 1997-2003 University of Cambridge
 
 -----------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software 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.
-
-2. The origin of this software must not be misrepresented, either by
-   explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
-   General Purpose Licence (GPL), then the terms of that licence shall
-   supersede any condition above with which it is incompatible.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
 -----------------------------------------------------------------------------
 */
 
 /* This module contains some convenience functions for extracting substrings
 from the subject string after a regex match has succeeded. The original idea
-for these functions came from Scott Wimer <scottw@cgibuilder.com>. */
+for these functions came from Scott Wimer. */
 
 
 /* Include the internals header, which itself includes Standard C headers plus
index 43039570f00693329db7b8842d5ae4456b431068..d80608bc0745183fb3fcd8333cfdf9c46548c8e1 100644 (file)
@@ -5,30 +5,38 @@
 
 /* This is a library of functions to support regular expressions whose syntax
 and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
+the file doc/Tech.Notes for some information on the internals.
 
 Written by: Philip Hazel <ph10@cam.ac.uk>
 
-           Copyright (c) 1997-2003 University of Cambridge
+           Copyright (c) 1997-2004 University of Cambridge
 
 -----------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software 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.
-
-2. The origin of this software must not be misrepresented, either by
-   explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
-   General Purpose Licence (GPL), then the terms of that licence shall
-   supersede any condition above with which it is incompatible.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
 -----------------------------------------------------------------------------
 */
 
@@ -45,6 +53,18 @@ modules, but which are not relevant to the outside. */
 # include <php_config.h>
 #endif
 
+/* Standard C headers plus the external interface definition. The only time
+setjmp and stdarg are used is when NO_RECURSE is set. */
+
+#include <ctype.h>
+#include <limits.h>
+#include <setjmp.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
 #ifndef PCRE_SPY
 #define PCRE_DEFINITION       /* Win32 __declspec(export) trigger for .dll */
 #endif
@@ -57,24 +77,45 @@ On Unix systems, "configure" can be used to override this default. */
 #define NEWLINE '\n'
 #endif
 
-/* The value of MATCH_LIMIT determines the default number of times the match()
-function can be called during a single execution of pcre_exec(). (There is a
-runtime method of setting a different limit.) The limit exists in order to
-catch runaway regular expressions that take for ever to determine that they do
-not match. The default is set very large so that it does not accidentally catch
-legitimate cases. On Unix systems, "configure" can be used to override this
-default default. */
-
-#ifndef MATCH_LIMIT
-#define MATCH_LIMIT 10000000
-#endif
-
 /* If you are compiling for a system that needs some magic to be inserted
  * before the definition of an exported function, define this macro to contain
  * the relevant magic. It apears at the start of every exported function. */
                                                                                                                                 
 #define EXPORT
 
+/* We need to have types that specify unsigned 16-bit and 32-bit integers. We
+cannot determine these outside the compilation (e.g. by running a program as
+part of "configure") because PCRE is often cross-compiled for use on other
+systems. Instead we make use of the maximum sizes that are available at
+preprocessor time in standard C environments. */
+
+#if USHRT_MAX == 65535
+  typedef unsigned short pcre_uint16;
+#elif UINT_MAX == 65535
+  typedef unsigned int pcre_uint16;
+#else
+  #error Cannot determine a type for 16-bit unsigned integers
+#endif
+
+#if UINT_MAX == 4294967295
+  typedef unsigned int pcre_uint32;
+#elif ULONG_MAX == 4294967295
+  typedef unsigned long int pcre_uint32;
+#else
+  #error Cannot determine a type for 32-bit unsigned integers
+#endif
+
+/* All character handling must be done as unsigned characters. Otherwise there
+are problems with top-bit-set characters and functions such as isspace().
+However, we leave the interface to the outside world as char *, because that
+should make things easier for callers. We define a short type for unsigned char
+to save lots of typing. I tried "uchar", but it causes problems on Digital
+Unix, where it is defined in sys/types, so use "uschar" instead. */
+
+typedef unsigned char uschar;
+
+/* Include the public PCRE header */
+
 #include "pcre.h"
 
 /* When compiling for use with the Virtual Pascal compiler, these functions
@@ -95,18 +136,6 @@ neither (there some non-Unix environments where this is the case). This assumes
 that all calls to memmove are moving strings upwards in store, which is the
 case in PCRE. */
 
-/* Standard C headers plus the external interface definition. The only time
-setjmp and stdarg are used is when NO_RECURSE is set. */
-
-#include <ctype.h>
-#include <limits.h>
-#include <setjmp.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
 #if ! HAVE_MEMMOVE
 #undef  memmove        /* some systems may have a macro */
 #if HAVE_BCOPY
@@ -126,13 +155,14 @@ for (i = 0; i < n; ++i) *(--dest) =  *(--src);
 #endif   /* not VPCOMPAT */
 
 
-/* PCRE keeps offsets in its compiled code as 2-byte quantities by default.
-These are used, for example, to link from the start of a subpattern to its
-alternatives and its end. The use of 2 bytes per offset limits the size of the
-compiled regex to around 64K, which is big enough for almost everybody.
-However, I received a request for an even bigger limit. For this reason, and
-also to make the code easier to maintain, the storing and loading of offsets
-from the byte string is now handled by the macros that are defined here.
+/* PCRE keeps offsets in its compiled code as 2-byte quantities (always stored
+in big-endian order) by default. These are used, for example, to link from the
+start of a subpattern to its alternatives and its end. The use of 2 bytes per
+offset limits the size of the compiled regex to around 64K, which is big enough
+for almost everybody. However, I received a request for an even bigger limit.
+For this reason, and also to make the code easier to maintain, the storing and
+loading of offsets from the byte string is now handled by the macros that are
+defined here.
 
 The macros are controlled by the value of LINK_SIZE. This defaults to 2 in
 the config.h file, but can be overridden by using -D on the command line. This
@@ -208,6 +238,7 @@ Standard C system should have one. */
 #define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field))
 #endif
 
+
 /* These are the public options that can change during matching. */
 
 #define PCRE_IMS (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL)
@@ -216,12 +247,13 @@ Standard C system should have one. */
 but skip the top bit so we can use ints for convenience without getting tangled
 with negative values. The public options defined in pcre.h start at the least
 significant end. Make sure they don't overlap, though now that we have expanded
-to four bytes there is plenty of space. */
+to four bytes, there is plenty of space. */
 
 #define PCRE_FIRSTSET      0x40000000  /* first_byte is set */
 #define PCRE_REQCHSET      0x20000000  /* req_byte is set */
 #define PCRE_STARTLINE     0x10000000  /* start after \n for multiline */
 #define PCRE_ICHANGED      0x08000000  /* i option changes within regex */
+#define PCRE_NOPARTIAL     0x04000000  /* can't use partial with this regex */
 
 /* Options for the "extra" block produced by pcre_study(). */
 
@@ -233,10 +265,11 @@ time, run time or study time, respectively. */
 #define PUBLIC_OPTIONS \
   (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \
    PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8| \
-   PCRE_NO_AUTO_CAPTURE|PCRE_NO_UTF8_CHECK)
+   PCRE_NO_AUTO_CAPTURE|PCRE_NO_UTF8_CHECK|PCRE_AUTO_CALLOUT)
 
 #define PUBLIC_EXEC_OPTIONS \
-  (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NO_UTF8_CHECK)
+  (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NO_UTF8_CHECK| \
+   PCRE_PARTIAL)
 
 #define PUBLIC_STUDY_OPTIONS 0   /* None defined */
 
@@ -296,12 +329,13 @@ definitions below, up to ESC_z. There's a dummy for OP_ANY because it
 corresponds to "." rather than an escape sequence. The final one must be
 ESC_REF as subsequent values are used for \1, \2, \3, etc. There is are two
 tests in the code for an escape greater than ESC_b and less than ESC_Z to
-detect the types that may be repeated. These are the types that consume a
-character. If any new escapes are put in between that don't consume a
+detect the types that may be repeated. These are the types that consume
+characters. If any new escapes are put in between that don't consume a
 character, that code will have to change. */
 
 enum { ESC_A = 1, ESC_G, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W,
-       ESC_w, ESC_dum1, ESC_C, ESC_Z, ESC_z, ESC_E, ESC_Q, ESC_REF };
+       ESC_w, ESC_dum1, ESC_C, ESC_P, ESC_p, ESC_X, ESC_Z, ESC_z, ESC_E,
+       ESC_Q, ESC_REF };
 
 /* Flag bits and data types for the extended class (OP_XCLASS) for classes that
 contain UTF-8 characters with values greater than 255. */
@@ -312,6 +346,8 @@ contain UTF-8 characters with values greater than 255. */
 #define XCL_END       0    /* Marks end of individual items */
 #define XCL_SINGLE    1    /* Single item (one multibyte char) follows */
 #define XCL_RANGE     2    /* A range (two multibyte chars) follows */
+#define XCL_PROP      3    /* Unicode property (one property code) follows */
+#define XCL_NOTPROP   4    /* Unicode inverted property (ditto) */
 
 
 /* Opcode table: OP_BRA must be last, as all values >= it are used for brackets
@@ -337,100 +373,112 @@ enum {
   OP_WORDCHAR,           /* 10 \w */
   OP_ANY,            /* 11 Match any character */
   OP_ANYBYTE,        /* 12 Match any byte (\C); different to OP_ANY for UTF-8 */
-  OP_EODN,           /* 13 End of data or \n at end of data: \Z. */
-  OP_EOD,            /* 14 End of data: \z */
-
-  OP_OPT,            /* 15 Set runtime options */
-  OP_CIRC,           /* 16 Start of line - varies with multiline switch */
-  OP_DOLL,           /* 17 End of line - varies with multiline switch */
-  OP_CHARS,          /* 18 Match string of characters */
-  OP_NOT,            /* 19 Match anything but the following char */
-
-  OP_STAR,           /* 20 The maximizing and minimizing versions of */
-  OP_MINSTAR,        /* 21 all these opcodes must come in pairs, with */
-  OP_PLUS,           /* 22 the minimizing one second. */
-  OP_MINPLUS,        /* 23 This first set applies to single characters */
-  OP_QUERY,          /* 24 */
-  OP_MINQUERY,       /* 25 */
-  OP_UPTO,           /* 26 From 0 to n matches */
-  OP_MINUPTO,        /* 27 */
-  OP_EXACT,          /* 28 Exactly n matches */
-
-  OP_NOTSTAR,        /* 29 The maximizing and minimizing versions of */
-  OP_NOTMINSTAR,     /* 30 all these opcodes must come in pairs, with */
-  OP_NOTPLUS,        /* 31 the minimizing one second. */
-  OP_NOTMINPLUS,     /* 32 This set applies to "not" single characters */
-  OP_NOTQUERY,       /* 33 */
-  OP_NOTMINQUERY,    /* 34 */
-  OP_NOTUPTO,        /* 35 From 0 to n matches */
-  OP_NOTMINUPTO,     /* 36 */
-  OP_NOTEXACT,       /* 37 Exactly n matches */
-
-  OP_TYPESTAR,       /* 38 The maximizing and minimizing versions of */
-  OP_TYPEMINSTAR,    /* 39 all these opcodes must come in pairs, with */
-  OP_TYPEPLUS,       /* 40 the minimizing one second. These codes must */
-  OP_TYPEMINPLUS,    /* 41 be in exactly the same order as those above. */
-  OP_TYPEQUERY,      /* 42 This set applies to character types such as \d */
-  OP_TYPEMINQUERY,   /* 43 */
-  OP_TYPEUPTO,       /* 44 From 0 to n matches */
-  OP_TYPEMINUPTO,    /* 45 */
-  OP_TYPEEXACT,      /* 46 Exactly n matches */
-
-  OP_CRSTAR,         /* 47 The maximizing and minimizing versions of */
-  OP_CRMINSTAR,      /* 48 all these opcodes must come in pairs, with */
-  OP_CRPLUS,         /* 49 the minimizing one second. These codes must */
-  OP_CRMINPLUS,      /* 50 be in exactly the same order as those above. */
-  OP_CRQUERY,        /* 51 These are for character classes and back refs */
-  OP_CRMINQUERY,     /* 52 */
-  OP_CRRANGE,        /* 53 These are different to the three seta above. */
-  OP_CRMINRANGE,     /* 54 */
-
-  OP_CLASS,          /* 55 Match a character class, chars < 256 only */
-  OP_NCLASS,         /* 56 Same, but the bitmap was created from a negative
+  OP_NOTPROP,        /* 13 \P (not Unicode property) */
+  OP_PROP,           /* 14 \p (Unicode property) */
+  OP_EXTUNI,         /* 15 \X (extended Unicode sequence */
+  OP_EODN,           /* 16 End of data or \n at end of data: \Z. */
+  OP_EOD,            /* 17 End of data: \z */
+
+  OP_OPT,            /* 18 Set runtime options */
+  OP_CIRC,           /* 19 Start of line - varies with multiline switch */
+  OP_DOLL,           /* 20 End of line - varies with multiline switch */
+  OP_CHAR,           /* 21 Match one character, casefully */
+  OP_CHARNC,         /* 22 Match one character, caselessly */
+  OP_NOT,            /* 23 Match anything but the following char */
+
+  OP_STAR,           /* 24 The maximizing and minimizing versions of */
+  OP_MINSTAR,        /* 25 all these opcodes must come in pairs, with */
+  OP_PLUS,           /* 26 the minimizing one second. */
+  OP_MINPLUS,        /* 27 This first set applies to single characters */
+  OP_QUERY,          /* 28 */
+  OP_MINQUERY,       /* 29 */
+  OP_UPTO,           /* 30 From 0 to n matches */
+  OP_MINUPTO,        /* 31 */
+  OP_EXACT,          /* 32 Exactly n matches */
+
+  OP_NOTSTAR,        /* 33 The maximizing and minimizing versions of */
+  OP_NOTMINSTAR,     /* 34 all these opcodes must come in pairs, with */
+  OP_NOTPLUS,        /* 35 the minimizing one second. */
+  OP_NOTMINPLUS,     /* 36 This set applies to "not" single characters */
+  OP_NOTQUERY,       /* 37 */
+  OP_NOTMINQUERY,    /* 38 */
+  OP_NOTUPTO,        /* 39 From 0 to n matches */
+  OP_NOTMINUPTO,     /* 40 */
+  OP_NOTEXACT,       /* 41 Exactly n matches */
+
+  OP_TYPESTAR,       /* 42 The maximizing and minimizing versions of */
+  OP_TYPEMINSTAR,    /* 43 all these opcodes must come in pairs, with */
+  OP_TYPEPLUS,       /* 44 the minimizing one second. These codes must */
+  OP_TYPEMINPLUS,    /* 45 be in exactly the same order as those above. */
+  OP_TYPEQUERY,      /* 46 This set applies to character types such as \d */
+  OP_TYPEMINQUERY,   /* 47 */
+  OP_TYPEUPTO,       /* 48 From 0 to n matches */
+  OP_TYPEMINUPTO,    /* 49 */
+  OP_TYPEEXACT,      /* 50 Exactly n matches */
+
+  OP_CRSTAR,         /* 51 The maximizing and minimizing versions of */
+  OP_CRMINSTAR,      /* 52 all these opcodes must come in pairs, with */
+  OP_CRPLUS,         /* 53 the minimizing one second. These codes must */
+  OP_CRMINPLUS,      /* 54 be in exactly the same order as those above. */
+  OP_CRQUERY,        /* 55 These are for character classes and back refs */
+  OP_CRMINQUERY,     /* 56 */
+  OP_CRRANGE,        /* 57 These are different to the three sets above. */
+  OP_CRMINRANGE,     /* 58 */
+
+  OP_CLASS,          /* 59 Match a character class, chars < 256 only */
+  OP_NCLASS,         /* 60 Same, but the bitmap was created from a negative
                            class - the difference is relevant only when a UTF-8
                            character > 255 is encountered. */
 
-  OP_XCLASS,         /* 57 Extended class for handling UTF-8 chars within the
+  OP_XCLASS,         /* 61 Extended class for handling UTF-8 chars within the
                            class. This does both positive and negative. */
 
-  OP_REF,            /* 58 Match a back reference */
-  OP_RECURSE,        /* 59 Match a numbered subpattern (possibly recursive) */
-  OP_CALLOUT,        /* 60 Call out to external function if provided */
+  OP_REF,            /* 62 Match a back reference */
+  OP_RECURSE,        /* 63 Match a numbered subpattern (possibly recursive) */
+  OP_CALLOUT,        /* 64 Call out to external function if provided */
 
-  OP_ALT,            /* 61 Start of alternation */
-  OP_KET,            /* 62 End of group that doesn't have an unbounded repeat */
-  OP_KETRMAX,        /* 63 These two must remain together and in this */
-  OP_KETRMIN,        /* 64 order. They are for groups the repeat for ever. */
+  OP_ALT,            /* 65 Start of alternation */
+  OP_KET,            /* 66 End of group that doesn't have an unbounded repeat */
+  OP_KETRMAX,        /* 67 These two must remain together and in this */
+  OP_KETRMIN,        /* 68 order. They are for groups the repeat for ever. */
 
   /* The assertions must come before ONCE and COND */
 
-  OP_ASSERT,         /* 65 Positive lookahead */
-  OP_ASSERT_NOT,     /* 66 Negative lookahead */
-  OP_ASSERTBACK,     /* 67 Positive lookbehind */
-  OP_ASSERTBACK_NOT, /* 68 Negative lookbehind */
-  OP_REVERSE,        /* 69 Move pointer back - used in lookbehind assertions */
+  OP_ASSERT,         /* 69 Positive lookahead */
+  OP_ASSERT_NOT,     /* 70 Negative lookahead */
+  OP_ASSERTBACK,     /* 71 Positive lookbehind */
+  OP_ASSERTBACK_NOT, /* 72 Negative lookbehind */
+  OP_REVERSE,        /* 73 Move pointer back - used in lookbehind assertions */
 
   /* ONCE and COND must come after the assertions, with ONCE first, as there's
   a test for >= ONCE for a subpattern that isn't an assertion. */
 
-  OP_ONCE,           /* 70 Once matched, don't back up into the subpattern */
-  OP_COND,           /* 71 Conditional group */
-  OP_CREF,           /* 72 Used to hold an extraction string number (cond ref) */
+  OP_ONCE,           /* 74 Once matched, don't back up into the subpattern */
+  OP_COND,           /* 75 Conditional group */
+  OP_CREF,           /* 76 Used to hold an extraction string number (cond ref) */
 
-  OP_BRAZERO,        /* 73 These two must remain together and in this */
-  OP_BRAMINZERO,     /* 74 order. */
+  OP_BRAZERO,        /* 77 These two must remain together and in this */
+  OP_BRAMINZERO,     /* 78 order. */
 
-  OP_BRANUMBER,      /* 75 Used for extracting brackets whose number is greater
+  OP_BRANUMBER,      /* 79 Used for extracting brackets whose number is greater
                            than can fit into an opcode. */
 
-  OP_BRA             /* 76 This and greater values are used for brackets that
-                           extract substrings up to a basic limit. After that,
-                           use is made of OP_BRANUMBER. */
+  OP_BRA             /* 80 This and greater values are used for brackets that
+                           extract substrings up to EXTRACT_BASIC_MAX. After
+                           that, use is made of OP_BRANUMBER. */
 };
 
-/* WARNING: There is an implicit assumption in study.c that all opcodes are
-less than 128 in value. This makes handling UTF-8 character sequences easier.
-*/
+/* WARNING WARNING WARNING: There is an implicit assumption in pcre.c and
+study.c that all opcodes are less than 128 in value. This makes handling UTF-8
+character sequences easier. */
+
+/* The highest extraction number before we have to start using additional
+bytes. (Originally PCRE didn't have support for extraction counts highter than
+this number.) The value is limited by the number of opcodes left after OP_BRA,
+i.e. 255 - OP_BRA. We actually set it a bit lower to leave room for additional
+opcodes. */
+
+#define EXTRACT_BASIC_MAX  100
 
 
 /* This macro defines textual names for all the opcodes. There are used only
@@ -439,8 +487,10 @@ macro is referenced only in printint.c. */
 
 #define OP_NAME_LIST \
   "End", "\\A", "\\G", "\\B", "\\b", "\\D", "\\d",                \
-  "\\S", "\\s", "\\W", "\\w", "Any", "Anybyte", "\\Z", "\\z",     \
-  "Opt", "^", "$", "chars", "not",                                \
+  "\\S", "\\s", "\\W", "\\w", "Any", "Anybyte",                   \
+  "notprop", "prop", "extuni",                                    \
+  "\\Z", "\\z",                                                   \
+  "Opt", "^", "$", "char", "charnc", "not",                       \
   "*", "*?", "+", "+?", "?", "??", "{", "{", "{",                 \
   "*", "*?", "+", "+?", "?", "??", "{", "{", "{",                 \
   "*", "*?", "+", "+?", "?", "??", "{", "{", "{",                 \
@@ -463,8 +513,11 @@ in UTF-8 mode. The code that uses this table must know about such things. */
 #define OP_LENGTHS \
   1,                             /* End                                    */ \
   1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* \A, \G, \B, \B, \D, \d, \S, \s, \W, \w */ \
-  1, 1, 1, 1, 2, 1, 1,           /* Any, Anybyte, \Z, \z, Opt, ^, $        */ \
-  2,                             /* Chars - the minimum length             */ \
+  1, 1,                          /* Any, Anybyte                           */ \
+  2, 2, 1,                       /* NOTPROP, PROP, EXTUNI                  */ \
+  1, 1, 2, 1, 1,                 /* \Z, \z, Opt, ^, $                      */ \
+  2,                             /* Char  - the minimum length             */ \
+  2,                             /* Charnc  - the minimum length           */ \
   2,                             /* not                                    */ \
   /* Positive single-char repeats                            ** These are  */ \
   2, 2, 2, 2, 2, 2,              /* *, *?, +, +?, ?, ??      ** minima in  */ \
@@ -483,7 +536,7 @@ in UTF-8 mode. The code that uses this table must know about such things. */
   0,                             /* XCLASS - variable length               */ \
   3,                             /* REF                                    */ \
   1+LINK_SIZE,                   /* RECURSE                                */ \
-  2,                             /* CALLOUT                                */ \
+  2+2*LINK_SIZE,                 /* CALLOUT                                */ \
   1+LINK_SIZE,                   /* Alt                                    */ \
   1+LINK_SIZE,                   /* Ket                                    */ \
   1+LINK_SIZE,                   /* KetRmax                                */ \
@@ -501,14 +554,6 @@ in UTF-8 mode. The code that uses this table must know about such things. */
   1+LINK_SIZE                    /* BRA                                    */ \
 
 
-/* The highest extraction number before we have to start using additional
-bytes. (Originally PCRE didn't have support for extraction counts highter than
-this number.) The value is limited by the number of opcodes left after OP_BRA,
-i.e. 255 - OP_BRA. We actually set it a bit lower to leave room for additional
-opcodes. */
-
-#define EXTRACT_BASIC_MAX  150
-
 /* A magic value for OP_CREF to indicate the "in recursion" condition. */
 
 #define CREF_RECURSE  0xffff
@@ -554,7 +599,7 @@ just to accommodate the POSIX wrapper. */
 #define ERR34 "character value in \\x{...} sequence is too large"
 #define ERR35 "invalid condition (?(0)"
 #define ERR36 "\\C not allowed in lookbehind assertion"
-#define ERR37 "PCRE does not support \\L, \\l, \\N, \\P, \\p, \\U, \\u, or \\X"
+#define ERR37 "PCRE does not support \\L, \\l, \\N, \\U, or \\u"
 #define ERR38 "number after (?C is > 255"
 #define ERR39 "closing ) for (?C expected"
 #define ERR40 "recursive call could loop indefinitely"
@@ -562,37 +607,51 @@ just to accommodate the POSIX wrapper. */
 #define ERR42 "syntax error after (?P"
 #define ERR43 "two named groups have the same name"
 #define ERR44 "invalid UTF-8 string"
-
-/* All character handling must be done as unsigned characters. Otherwise there
-are problems with top-bit-set characters and functions such as isspace().
-However, we leave the interface to the outside world as char *, because that
-should make things easier for callers. We define a short type for unsigned char
-to save lots of typing. I tried "uchar", but it causes problems on Digital
-Unix, where it is defined in sys/types, so use "uschar" instead. */
-
-typedef unsigned char uschar;
+#define ERR45 "support for \\P, \\p, and \\X has not been compiled"
+#define ERR46 "malformed \\P or \\p sequence"
+#define ERR47 "unknown property name after \\P or \\p"
 
 /* The real format of the start of the pcre block; the index of names and the
-code vector run on as long as necessary after the end. */
+code vector run on as long as necessary after the end. We store an explicit
+offset to the name table so that if a regex is compiled on one host, saved, and
+then run on another where the size of pointers is different, all might still
+be well. For the case of compiled-on-4 and run-on-8, we include an extra
+pointer that is always NULL. For future-proofing, we also include a few dummy
+fields - even though you can never get this planning right!
+
+NOTE NOTE NOTE:
+Because people can now save and re-use compiled patterns, any additions to this
+structure should be made at the end, and something earlier (e.g. a new
+flag in the options or one of the dummy fields) should indicate that the new
+fields are present. Currently PCRE always sets the dummy fields to zero.
+NOTE NOTE NOTE:
+*/
 
 typedef struct real_pcre {
-  unsigned long int magic_number;
-  size_t size;                        /* Total that was malloced */
-  const unsigned char *tables;        /* Pointer to tables */
-  unsigned long int options;
-  unsigned short int top_bracket;
-  unsigned short int top_backref;
-  unsigned short int first_byte;
-  unsigned short int req_byte;
-  unsigned short int name_entry_size; /* Size of any name items; 0 => none */
-  unsigned short int name_count;      /* Number of name items */
+  pcre_uint32 magic_number;
+  pcre_uint32 size;               /* Total that was malloced */
+  pcre_uint32 options;
+  pcre_uint32 dummy1;             /* For future use, maybe */
+
+  pcre_uint16 top_bracket;
+  pcre_uint16 top_backref;
+  pcre_uint16 first_byte;
+  pcre_uint16 req_byte;
+  pcre_uint16 name_table_offset;  /* Offset to name table that follows */
+  pcre_uint16 name_entry_size;    /* Size of any name items */
+  pcre_uint16 name_count;         /* Number of name items */
+  pcre_uint16 dummy2;             /* For future use, maybe */
+
+  const unsigned char *tables;    /* Pointer to tables or NULL for std */
+  const unsigned char *nullpad;   /* NULL padding */
 } real_pcre;
 
-/* The format of the block used to store data from pcre_study(). */
+/* The format of the block used to store data from pcre_study(). The same
+remark (see NOTE above) about extending this structure applies. */
 
 typedef struct pcre_study_data {
-  size_t size;                        /* Total that was malloced */
-  uschar options;
+  pcre_uint32 size;               /* Total that was malloced */
+  pcre_uint32 options;
   uschar start_bits[32];
 } pcre_study_data;
 
@@ -605,12 +664,14 @@ typedef struct compile_data {
   const uschar *cbits;          /* Points to character type table */
   const uschar *ctypes;         /* Points to table of type maps */
   const uschar *start_code;     /* The start of the compiled code */
+  const uschar *start_pattern;  /* The start of the pattern */
   uschar *name_table;           /* The name/number table */
   int  names_found;             /* Number of entries so far */
   int  name_entry_size;         /* Size of each entry */
   int  top_backref;             /* Maximum back reference */
   unsigned int backref_map;     /* Bitmap of low back refs */
   int  req_varyopt;             /* "After variable item" flag for reqbyte */
+  BOOL nopartial;               /* Set TRUE if partial won't work */
 } compile_data;
 
 /* Structure for maintaining a chain of pointers to the currently incomplete
@@ -660,6 +721,8 @@ typedef struct match_data {
   BOOL   utf8;                  /* UTF8 flag */
   BOOL   endonly;               /* Dollar not before final \n */
   BOOL   notempty;              /* Empty string match not wanted */
+  BOOL   partial;               /* PARTIAL flag */
+  BOOL   hitend;                /* Hit the end of the subject at some point */
   const uschar *start_code;     /* For use when recursing */
   const uschar *start_subject;  /* Start of the subject string */
   const uschar *end_subject;    /* End of the subject string */
diff --git a/ext/pcre/pcrelib/libpcre.def b/ext/pcre/pcrelib/libpcre.def
new file mode 100644 (file)
index 0000000..2b35d10
--- /dev/null
@@ -0,0 +1,19 @@
+LIBRARY libpcre
+EXPORTS
+pcre_malloc
+pcre_free
+pcre_config
+pcre_callout
+pcre_compile
+pcre_copy_substring
+pcre_exec
+pcre_get_substring
+pcre_get_stringnumber
+pcre_get_substring_list
+pcre_free_substring
+pcre_free_substring_list
+pcre_info
+pcre_fullinfo
+pcre_maketables
+pcre_study
+pcre_version
diff --git a/ext/pcre/pcrelib/libpcreposix.def b/ext/pcre/pcrelib/libpcreposix.def
new file mode 100644 (file)
index 0000000..5723440
--- /dev/null
@@ -0,0 +1,24 @@
+LIBRARY libpcreposix
+EXPORTS
+pcre_malloc
+pcre_free
+pcre_config
+pcre_callout
+pcre_compile
+pcre_copy_substring
+pcre_exec
+pcre_get_substring
+pcre_get_stringnumber
+pcre_get_substring_list
+pcre_free_substring
+pcre_free_substring_list
+pcre_info
+pcre_fullinfo
+pcre_maketables
+pcre_study
+pcre_version
+
+regcomp
+regexec
+regerror
+regfree
index bf88531bc1a3b01156c629a197b1de66f2d0ae83..f1c7b9a5c46ebdc27d96cffa02777a506a5a7bba 100644 (file)
@@ -11,26 +11,32 @@ Written by: Philip Hazel <ph10@cam.ac.uk>
            Copyright (c) 1997-2003 University of Cambridge
 
 -----------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software 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.
-
-2. The origin of this software must not be misrepresented, either by
-   explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
-   General Purpose Licence (GPL), then the terms of that licence shall
-   supersede any condition above with which it is incompatible.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
 -----------------------------------------------------------------------------
-
-See the file Tech.Notes for some information on the internals.
 */
 
 
index 5afca1091af9c8dc33e03b0c803c8836f5fe92fd..9f7ad56448e1b93632d192ac511d3d896ca6afac 100644 (file)
@@ -12,23 +12,31 @@ Written by: Philip Hazel <ph10@cam.ac.uk>
            Copyright (c) 1997-2003 University of Cambridge
 
 -----------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software 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.
-
-2. The origin of this software must not be misrepresented, either by
-   explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
-   General Purpose Licence (GPL), then the terms of that licence shall
-   supersede any condition above with which it is incompatible.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
 -----------------------------------------------------------------------------
 */
 
@@ -51,14 +59,14 @@ C headers, and the external pcre header. */
 
 #include "internal.h"
 
+/* If Unicode Property support is wanted, include a private copy of the
+function that does it, and the table that translates names to numbers. */
 
-/* Allow compilation as C++ source code, should anybody want to do that. */
-
-#ifdef __cplusplus
-#define class pcre_class
+#ifdef SUPPORT_UCP
+#include "ucp.c"
+#include "ucptypetable.c"
 #endif
 
-
 /* Maximum number of items on the nested bracket stacks at compile time. This
 applies to the nesting of all kinds of parentheses. It does not limit
 un-nested, non-capturing parentheses. This number can be made bigger if
@@ -75,14 +83,6 @@ because the offset vector is always a multiple of 3 long. */
 #define REC_STACK_SAVE_MAX 30
 
 
-/* The number of bytes in a literal character string above which we can't add
-any more is set at 250 in order to allow for UTF-8 characters. (In theory it
-could be 255 when UTF-8 support is excluded, but that means that some of the
-test output would be different, which just complicates things.) */
-
-#define MAXLIT 250
-
-
 /* The maximum remaining length of subject we are prepared to search for a
 req_byte match. */
 
@@ -106,16 +106,16 @@ is invalid. */
 
 #if !EBCDIC   /* This is the "normal" table for ASCII systems */
 static const short int escapes[] = {
-    0,      0,      0,      0,      0,      0,      0,      0,   /* 0 - 7 */
-    0,      0,    ':',    ';',    '<',    '=',    '>',    '?',   /* 8 - ? */
-  '@', -ESC_A, -ESC_B, -ESC_C, -ESC_D, -ESC_E,      0, -ESC_G,   /* @ - G */
-    0,      0,      0,      0,      0,      0,      0,      0,   /* H - O */
-    0, -ESC_Q,      0, -ESC_S,      0,      0,      0, -ESC_W,   /* P - W */
-    0,      0, -ESC_Z,    '[',   '\\',    ']',    '^',    '_',   /* X - _ */
-  '`',      7, -ESC_b,      0, -ESC_d,  ESC_e,  ESC_f,      0,   /* ` - g */
-    0,      0,      0,      0,      0,      0,  ESC_n,      0,   /* h - o */
-    0,      0,  ESC_r, -ESC_s,  ESC_tee,    0,      0, -ESC_w,   /* p - w */
-    0,      0, -ESC_z                                            /* x - z */
+     0,      0,      0,      0,      0,      0,      0,      0,   /* 0 - 7 */
+     0,      0,    ':',    ';',    '<',    '=',    '>',    '?',   /* 8 - ? */
+   '@', -ESC_A, -ESC_B, -ESC_C, -ESC_D, -ESC_E,      0, -ESC_G,   /* @ - G */
+     0,      0,      0,      0,      0,      0,      0,      0,   /* H - O */
+-ESC_P, -ESC_Q,      0, -ESC_S,      0,      0,      0, -ESC_W,   /* P - W */
+-ESC_X,      0, -ESC_Z,    '[',   '\\',    ']',    '^',    '_',   /* X - _ */
+   '`',      7, -ESC_b,      0, -ESC_d,  ESC_e,  ESC_f,      0,   /* ` - g */
+     0,      0,      0,      0,      0,      0,  ESC_n,      0,   /* h - o */
+-ESC_p,      0,  ESC_r, -ESC_s,  ESC_tee,    0,      0, -ESC_w,   /* p - w */
+     0,      0, -ESC_z                                            /* x - z */
 };
 
 #else         /* This is the "abnormal" table for EBCDIC systems */
@@ -129,7 +129,7 @@ static const short int escapes[] = {
 /*  78 */     0,   '`',    ':',     '#',    '@',  '\'',    '=',    '"',
 /*  80 */     0,     7, -ESC_b,       0, -ESC_d, ESC_e,  ESC_f,      0,
 /*  88 */     0,     0,      0,     '{',      0,     0,      0,      0,
-/*  90 */     0,     0,      0,     'l',      0, ESC_n,      0,      0,
+/*  90 */     0,     0,      0,     'l',      0, ESC_n,      0, -ESC_p,
 /*  98 */     0, ESC_r,      0,     '}',      0,     0,      0,      0,
 /*  A0 */     0,   '~', -ESC_s, ESC_tee,      0,     0, -ESC_w,      0,
 /*  A8 */     0,-ESC_z,      0,       0,      0,   '[',      0,      0,
@@ -137,9 +137,9 @@ static const short int escapes[] = {
 /*  B8 */     0,     0,      0,       0,      0,   ']',    '=',    '-',
 /*  C0 */   '{',-ESC_A, -ESC_B,  -ESC_C, -ESC_D,-ESC_E,      0, -ESC_G,
 /*  C8 */     0,     0,      0,       0,      0,     0,      0,      0,
-/*  D0 */   '}',     0,      0,       0,      0,     0,      0,      0,
+/*  D0 */   '}',     0,      0,       0,      0,     0,      0, -ESC_P,
 /*  D8 */-ESC_Q,     0,      0,       0,      0,     0,      0,      0,
-/*  E0 */  '\\',     0, -ESC_S,       0,      0,     0, -ESC_W,      0,
+/*  E0 */  '\\',     0, -ESC_S,       0,      0,     0, -ESC_W, -ESC_X,
 /*  E8 */     0,-ESC_Z,      0,       0,      0,     0,      0,      0,
 /*  F0 */     0,     0,      0,       0,      0,     0,      0,      0,
 /*  F8 */     0,     0,      0,       0,      0,     0,      0,      0
@@ -561,6 +561,86 @@ return XSTRING(PCRE_MAJOR) "." XSTRING(PCRE_MINOR) " " XSTRING(PCRE_DATE);
 
 
 
+/*************************************************
+*         Flip bytes in an integer               *
+*************************************************/
+
+/* This function is called when the magic number in a regex doesn't match in
+order to flip its bytes to see if we are dealing with a pattern that was
+compiled on a host of different endianness. If so, this function is used to
+flip other byte values.
+
+Arguments:
+  value        the number to flip
+  n            the number of bytes to flip (assumed to be 2 or 4)
+
+Returns:       the flipped value
+*/
+
+static long int
+byteflip(long int value, int n)
+{
+if (n == 2) return ((value & 0x00ff) << 8) | ((value & 0xff00) >> 8);
+return ((value & 0x000000ff) << 24) |
+       ((value & 0x0000ff00) <<  8) |
+       ((value & 0x00ff0000) >>  8) |
+       ((value & 0xff000000) >> 24);
+}
+
+
+
+/*************************************************
+*       Test for a byte-flipped compiled regex   *
+*************************************************/
+
+/* This function is called from pce_exec() and also from pcre_fullinfo(). Its
+job is to test whether the regex is byte-flipped - that is, it was compiled on
+a system of opposite endianness. The function is called only when the native
+MAGIC_NUMBER test fails. If the regex is indeed flipped, we flip all the
+relevant values into a different data block, and return it.
+
+Arguments:
+  re               points to the regex
+  study            points to study data, or NULL
+  internal_re      points to a new regex block
+  internal_study   points to a new study block
+
+Returns:           the new block if is is indeed a byte-flipped regex
+                   NULL if it is not
+*/
+
+static real_pcre *
+try_flipped(const real_pcre *re, real_pcre *internal_re,
+  const pcre_study_data *study, pcre_study_data *internal_study)
+{
+if (byteflip(re->magic_number, sizeof(re->magic_number)) != MAGIC_NUMBER)
+  return NULL;
+
+*internal_re = *re;           /* To copy other fields */
+internal_re->size = byteflip(re->size, sizeof(re->size));
+internal_re->options = byteflip(re->options, sizeof(re->options));
+internal_re->top_bracket = byteflip(re->top_bracket, sizeof(re->top_bracket));
+internal_re->top_backref = byteflip(re->top_backref, sizeof(re->top_backref));
+internal_re->first_byte = byteflip(re->first_byte, sizeof(re->first_byte));
+internal_re->req_byte = byteflip(re->req_byte, sizeof(re->req_byte));
+internal_re->name_table_offset = byteflip(re->name_table_offset,
+  sizeof(re->name_table_offset));
+internal_re->name_entry_size = byteflip(re->name_entry_size,
+  sizeof(re->name_entry_size));
+internal_re->name_count = byteflip(re->name_count, sizeof(re->name_count));
+
+if (study != NULL)
+  {
+  *internal_study = *study;   /* To copy other fields */
+  internal_study->size = byteflip(study->size, sizeof(study->size));
+  internal_study->options = byteflip(study->options, sizeof(study->options));
+  }
+
+return internal_re;
+}
+
+
+
 /*************************************************
 * (Obsolete) Return info about compiled pattern  *
 *************************************************/
@@ -573,7 +653,7 @@ at the low end of it, and so even on 16-bit systems this will still be OK.
 Therefore, I haven't changed the API for pcre_info().
 
 Arguments:
-  external_re   points to compiled code
+  argument_re   points to compiled code
   optptr        where to pass back the options
   first_byte    where to pass back the first character,
                 or -1 if multiline and all branches start ^,
@@ -584,11 +664,16 @@ Returns:        number of capturing subpatterns
 */
 
 EXPORT int
-pcre_info(const pcre *external_re, int *optptr, int *first_byte)
+pcre_info(const pcre *argument_re, int *optptr, int *first_byte)
 {
-const real_pcre *re = (const real_pcre *)external_re;
+real_pcre internal_re;
+const real_pcre *re = (const real_pcre *)argument_re;
 if (re == NULL) return PCRE_ERROR_NULL;
-if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
+if (re->magic_number != MAGIC_NUMBER)
+  {
+  re = try_flipped(re, &internal_re, NULL, NULL);
+  if (re == NULL) return PCRE_ERROR_BADMAGIC;
+  }
 if (optptr != NULL) *optptr = (int)(re->options & PUBLIC_OPTIONS);
 if (first_byte != NULL)
   *first_byte = ((re->options & PCRE_FIRSTSET) != 0)? re->first_byte :
@@ -606,7 +691,7 @@ return re->top_bracket;
 that additional items can be added compatibly.
 
 Arguments:
-  external_re      points to compiled code
+  argument_re      points to compiled code
   extra_data       points extra data, or NULL
   what             what information is required
   where            where to put the information
@@ -615,18 +700,26 @@ Returns:           0 if data returned, negative on error
 */
 
 EXPORT int
-pcre_fullinfo(const pcre *external_re, const pcre_extra *extra_data, int what,
+pcre_fullinfo(const pcre *argument_re, const pcre_extra *extra_data, int what,
   void *where)
 {
-const real_pcre *re = (const real_pcre *)external_re;
+real_pcre internal_re;
+pcre_study_data internal_study;
+const real_pcre *re = (const real_pcre *)argument_re;
 const pcre_study_data *study = NULL;
 
 if (re == NULL || where == NULL) return PCRE_ERROR_NULL;
-if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
 
 if (extra_data != NULL && (extra_data->flags & PCRE_EXTRA_STUDY_DATA) != 0)
   study = (const pcre_study_data *)extra_data->study_data;
 
+if (re->magic_number != MAGIC_NUMBER)
+  {
+  re = try_flipped(re, &internal_re, study, &internal_study);
+  if (re == NULL) return PCRE_ERROR_BADMAGIC;
+  if (study != NULL) study = &internal_study;
+  }
+
 switch (what)
   {
   case PCRE_INFO_OPTIONS:
@@ -655,10 +748,13 @@ switch (what)
     ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
   break;
 
+  /* Make sure we pass back the pointer to the bit vector in the external
+  block, not the internal copy (with flipped integer fields). */
+
   case PCRE_INFO_FIRSTTABLE:
   *((const uschar **)where) =
     (study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0)?
-      study->start_bits : NULL;
+      ((const pcre_study_data *)extra_data->study_data)->start_bits : NULL;
   break;
 
   case PCRE_INFO_LASTLITERAL:
@@ -675,7 +771,11 @@ switch (what)
   break;
 
   case PCRE_INFO_NAMETABLE:
-  *((const uschar **)where) = (const uschar *)re + sizeof(real_pcre);
+  *((const uschar **)where) = (const uschar *)re + re->name_table_offset;
+  break;
+
+  case PCRE_INFO_DEFAULT_TABLES:
+  *((const uschar **)where) = (const uschar *)pcre_default_tables;
   break;
 
   default: return PCRE_ERROR_BADOPTION;
@@ -713,6 +813,14 @@ switch (what)
 #endif
   break;
 
+  case PCRE_CONFIG_UNICODE_PROPERTIES:
+#ifdef SUPPORT_UCP
+  *((int *)where) = 1;
+#else
+  *((int *)where) = 0;
+#endif
+  break;
+
   case PCRE_CONFIG_NEWLINE:
   *((int *)where) = NEWLINE;
   break;
@@ -835,11 +943,8 @@ else
     case 'l':
     case 'L':
     case 'N':
-    case 'p':
-    case 'P':
     case 'u':
     case 'U':
-    case 'X':
     *errorptr = ERR37;
     break;
 
@@ -989,6 +1094,99 @@ return c;
 
 
 
+#ifdef SUPPORT_UCP
+/*************************************************
+*               Handle \P and \p                 *
+*************************************************/
+
+/* This function is called after \P or \p has been encountered, provided that
+PCRE is compiled with support for Unicode properties. On entry, ptrptr is
+pointing at the P or p. On exit, it is pointing at the final character of the
+escape sequence.
+
+Argument:
+  ptrptr     points to the pattern position pointer
+  negptr     points to a boolean that is set TRUE for negation else FALSE
+  errorptr   points to the pointer to the error message
+
+Returns:     value from ucp_type_table, or -1 for an invalid type
+*/
+
+static int
+get_ucp(const uschar **ptrptr, BOOL *negptr, const char **errorptr)
+{
+int c, i, bot, top;
+const uschar *ptr = *ptrptr;
+char name[4];
+
+c = *(++ptr);
+if (c == 0) goto ERROR_RETURN;
+
+*negptr = FALSE;
+
+/* \P or \p can be followed by a one- or two-character name in {}, optionally
+preceded by ^ for negation. */
+
+if (c == '{')
+  {
+  if (ptr[1] == '^')
+    {
+    *negptr = TRUE;
+    ptr++;
+    }
+  for (i = 0; i <= 2; i++)
+    {
+    c = *(++ptr);
+    if (c == 0) goto ERROR_RETURN;
+    if (c == '}') break;
+    name[i] = c;
+    }
+  if (c !='}')   /* Try to distinguish error cases */
+    {
+    while (*(++ptr) != 0 && *ptr != '}');
+    if (*ptr == '}') goto UNKNOWN_RETURN; else goto ERROR_RETURN;
+    }
+  name[i] = 0;
+  }
+
+/* Otherwise there is just one following character */
+
+else
+  {
+  name[0] = c;
+  name[1] = 0;
+  }
+
+*ptrptr = ptr;
+
+/* Search for a recognized property name using binary chop */
+
+bot = 0;
+top = sizeof(utt)/sizeof(ucp_type_table);
+
+while (bot < top)
+  {
+  i = (bot + top)/2;
+  c = strcmp(name, utt[i].name);
+  if (c == 0) return utt[i].value;
+  if (c > 0) bot = i + 1; else top = i;
+  }
+
+UNKNOWN_RETURN:
+*errorptr = ERR47;
+*ptrptr = ptr;
+return -1;
+
+ERROR_RETURN:
+*errorptr = ERR46;
+*ptrptr = ptr;
+return -1;
+}
+#endif
+
+
+
+
 /*************************************************
 *            Check for counted repeat            *
 *************************************************/
@@ -1085,18 +1283,22 @@ return p;
 /* This is called by several functions that scan a compiled expression looking
 for a fixed first character, or an anchoring op code etc. It skips over things
 that do not influence this. For some calls, a change of option is important.
+For some calls, it makes sense to skip negative forward and all backward
+assertions, and also the \b assertion; for others it does not.
 
 Arguments:
-  code       pointer to the start of the group
-  options    pointer to external options
-  optbit     the option bit whose changing is significant, or
-               zero if none are
+  code         pointer to the start of the group
+  options      pointer to external options
+  optbit       the option bit whose changing is significant, or
+                 zero if none are
+  skipassert   TRUE if certain assertions are to be skipped
 
-Returns:     pointer to the first significant opcode
+Returns:       pointer to the first significant opcode
 */
 
 static const uschar*
-first_significant_code(const uschar *code, int *options, int optbit)
+first_significant_code(const uschar *code, int *options, int optbit,
+  BOOL skipassert)
 {
 for (;;)
   {
@@ -1111,14 +1313,19 @@ for (;;)
     case OP_ASSERT_NOT:
     case OP_ASSERTBACK:
     case OP_ASSERTBACK_NOT:
+    if (!skipassert) return code;
     do code += GET(code, 1); while (*code == OP_ALT);
+    code += OP_lengths[*code];
+    break;
+
+    case OP_WORD_BOUNDARY:
+    case OP_NOT_WORD_BOUNDARY:
+    if (!skipassert) return code;
     /* Fall through */
 
     case OP_CALLOUT:
     case OP_CREF:
     case OP_BRANUMBER:
-    case OP_WORD_BOUNDARY:
-    case OP_NOT_WORD_BOUNDARY:
     code += OP_lengths[*code];
     break;
 
@@ -1220,19 +1427,18 @@ for (;;)
     cc += OP_lengths[*cc];
     break;
 
-    /* Handle char strings. In UTF-8 mode we must count characters, not bytes.
-    This requires a scan of the string, unfortunately. We assume valid UTF-8
-    strings, so all we do is reduce the length by one for every byte whose bits
-    are 10xxxxxx. */
+    /* Handle literal characters */
 
-    case OP_CHARS:
-    branchlength += *(++cc);
+    case OP_CHAR:
+    case OP_CHARNC:
+    branchlength++;
+    cc += 2;
 #ifdef SUPPORT_UTF8
     if ((options & PCRE_UTF8) != 0)
-      for (d = 1; d <= *cc; d++)
-        if ((cc[d] & 0xc0) == 0x80) branchlength--;
+      {
+      while ((*cc & 0xc0) == 0x80) cc++;
+      }
 #endif
-    cc += *cc + 1;
     break;
 
     /* Handle exact repetitions. The count is already in characters, but we
@@ -1256,6 +1462,11 @@ for (;;)
 
     /* Handle single-char matchers */
 
+    case OP_PROP:
+    case OP_NOTPROP:
+    cc++;
+    /* Fall through */
+
     case OP_NOT_DIGIT:
     case OP_DIGIT:
     case OP_NOT_WHITESPACE:
@@ -1342,7 +1553,6 @@ for (;;)
   {
   register int c = *code;
   if (c == OP_END) return NULL;
-  else if (c == OP_CHARS) code += code[1] + OP_lengths[c];
   else if (c > OP_BRA)
     {
     int n = c - OP_BRA;
@@ -1358,11 +1568,13 @@ for (;;)
 
     /* In UTF-8 mode, opcodes that are followed by a character may be followed
     by a multi-byte character. The length in the table is a minimum, so we have
-    to scan along to skip the extra characters. All opcodes are less than 128,
-    so we can use relatively efficient code. */
+    to scan along to skip the extra bytes. All opcodes are less than 128, so we
+    can use relatively efficient code. */
 
     if (utf8) switch(c)
       {
+      case OP_CHAR:
+      case OP_CHARNC:
       case OP_EXACT:
       case OP_UPTO:
       case OP_MINUPTO:
@@ -1377,7 +1589,7 @@ for (;;)
 
       /* XCLASS is used for classes that cannot be represented just by a bit
       map. This includes negated single high-valued characters. The length in
-      the table is zero; the actual length is stored in the compled code. */
+      the table is zero; the actual length is stored in the compiled code. */
 
       case OP_XCLASS:
       code += GET(code, 1) + 1;
@@ -1416,7 +1628,6 @@ for (;;)
   register int c = *code;
   if (c == OP_END) return NULL;
   else if (c == OP_RECURSE) return code;
-  else if (c == OP_CHARS) code += code[1] + OP_lengths[c];
   else if (c > OP_BRA)
     {
     code += OP_lengths[OP_BRA];
@@ -1429,11 +1640,13 @@ for (;;)
 
     /* In UTF-8 mode, opcodes that are followed by a character may be followed
     by a multi-byte character. The length in the table is a minimum, so we have
-    to scan along to skip the extra characters. All opcodes are less than 128,
-    so we can use relatively efficient code. */
+    to scan along to skip the extra bytes. All opcodes are less than 128, so we
+    can use relatively efficient code. */
 
     if (utf8) switch(c)
       {
+      case OP_CHAR:
+      case OP_CHARNC:
       case OP_EXACT:
       case OP_UPTO:
       case OP_MINUPTO:
@@ -1448,7 +1661,7 @@ for (;;)
 
       /* XCLASS is used for classes that cannot be represented just by a bit
       map. This includes negated single high-valued characters. The length in
-      the table is zero; the actual length is stored in the compled code. */
+      the table is zero; the actual length is stored in the compiled code. */
 
       case OP_XCLASS:
       code += GET(code, 1) + 1;
@@ -1483,9 +1696,9 @@ static BOOL
 could_be_empty_branch(const uschar *code, const uschar *endcode, BOOL utf8)
 {
 register int c;
-for (code = first_significant_code(code + 1 + LINK_SIZE, NULL, 0);
+for (code = first_significant_code(code + 1 + LINK_SIZE, NULL, 0, TRUE);
      code < endcode;
-     code = first_significant_code(code + OP_lengths[c], NULL, 0))
+     code = first_significant_code(code + OP_lengths[c], NULL, 0, TRUE))
   {
   const uschar *ccode;
 
@@ -1551,6 +1764,9 @@ for (code = first_significant_code(code + 1 + LINK_SIZE, NULL, 0);
 
     /* Opcodes that must match a character */
 
+    case OP_PROP:
+    case OP_NOTPROP:
+    case OP_EXTUNI:
     case OP_NOT_DIGIT:
     case OP_DIGIT:
     case OP_NOT_WHITESPACE:
@@ -1559,7 +1775,8 @@ for (code = first_significant_code(code + 1 + LINK_SIZE, NULL, 0);
     case OP_WORDCHAR:
     case OP_ANY:
     case OP_ANYBYTE:
-    case OP_CHARS:
+    case OP_CHAR:
+    case OP_CHARNC:
     case OP_NOT:
     case OP_PLUS:
     case OP_MINPLUS:
@@ -1733,6 +1950,107 @@ while ((ptr = (uschar *)find_recurse(ptr, utf8)) != NULL)
 
 
 
+/*************************************************
+*        Insert an automatic callout point       *
+*************************************************/
+
+/* This function is called when the PCRE_AUTO_CALLOUT option is set, to insert
+callout points before each pattern item.
+
+Arguments:
+  code           current code pointer
+  ptr            current pattern pointer
+  cd             pointers to tables etc
+
+Returns:         new code pointer
+*/
+
+static uschar *
+auto_callout(uschar *code, const uschar *ptr, compile_data *cd)
+{
+*code++ = OP_CALLOUT;
+*code++ = 255;
+PUT(code, 0, ptr - cd->start_pattern);  /* Pattern offset */
+PUT(code, LINK_SIZE, 0);                /* Default length */
+return code + 2*LINK_SIZE;
+}
+
+
+
+/*************************************************
+*         Complete a callout item                *
+*************************************************/
+
+/* A callout item contains the length of the next item in the pattern, which
+we can't fill in till after we have reached the relevant point. This is used
+for both automatic and manual callouts.
+
+Arguments:
+  previous_callout   points to previous callout item
+  ptr                current pattern pointer
+  cd                 pointers to tables etc
+
+Returns:             nothing
+*/
+
+static void
+complete_callout(uschar *previous_callout, const uschar *ptr, compile_data *cd)
+{
+int length = ptr - cd->start_pattern - GET(previous_callout, 2);
+PUT(previous_callout, 2 + LINK_SIZE, length);
+}
+
+
+
+#ifdef SUPPORT_UCP
+/*************************************************
+*           Get othercase range                  *
+*************************************************/
+
+/* This function is passed the start and end of a class range, in UTF-8 mode
+with UCP support. It searches up the characters, looking for internal ranges of
+characters in the "other" case. Each call returns the next one, updating the
+start address.
+
+Arguments:
+  cptr        points to starting character value; updated
+  d           end value
+  ocptr       where to put start of othercase range
+  odptr       where to put end of othercase range
+
+Yield:        TRUE when range returned; FALSE when no more
+*/
+
+static BOOL
+get_othercase_range(int *cptr, int d, int *ocptr, int *odptr)
+{
+int c, chartype, othercase, next;
+
+for (c = *cptr; c <= d; c++)
+  {
+  if (ucp_findchar(c, &chartype, &othercase) == ucp_L && othercase != 0) break;
+  }
+
+if (c > d) return FALSE;
+
+*ocptr = othercase;
+next = othercase + 1;
+
+for (++c; c <= d; c++)
+  {
+  if (ucp_findchar(c, &chartype, &othercase) != ucp_L || othercase != next)
+    break;
+  next++;
+  }
+
+*odptr = next - 1;
+*cptr = c;
+
+return TRUE;
+}
+#endif  /* SUPPORT_UCP */
+
+
 /*************************************************
 *           Compile one branch                   *
 *************************************************/
@@ -1744,7 +2062,7 @@ bits.
 Arguments:
   optionsptr     pointer to the option bits
   brackets       points to number of extracting brackets used
-  code           points to the pointer to the current code point
+  codeptr        points to the pointer to the current code point
   ptrptr         points to the current pattern pointer
   errorptr       points to pointer to error message
   firstbyteptr   set to initial literal character, or < 0 (REQ_UNSET, REQ_NONE)
@@ -1764,13 +2082,13 @@ compile_branch(int *optionsptr, int *brackets, uschar **codeptr,
 int repeat_type, op_type;
 int repeat_min = 0, repeat_max = 0;      /* To please picky compilers */
 int bravalue = 0;
-int length;
 int greedy_default, greedy_non_default;
 int firstbyte, reqbyte;
 int zeroreqbyte, zerofirstbyte;
 int req_caseopt, reqvary, tempreqvary;
 int condcount = 0;
 int options = *optionsptr;
+int after_manual_callout = 0;
 register int c;
 register uschar *code = *codeptr;
 uschar *tempcode;
@@ -1779,7 +2097,8 @@ BOOL groupsetfirstbyte = FALSE;
 const uschar *ptr = *ptrptr;
 const uschar *tempptr;
 uschar *previous = NULL;
-uschar class[32];
+uschar *previous_callout = NULL;
+uschar classbits[32];
 
 #ifdef SUPPORT_UTF8
 BOOL class_utf8;
@@ -1795,7 +2114,7 @@ BOOL utf8 = FALSE;
 greedy_default = ((options & PCRE_UNGREEDY) != 0);
 greedy_non_default = greedy_default ^ 1;
 
-/* Initialize no first char, no required char. REQ_UNSET means "no char
+/* Initialize no first byte, no required byte. REQ_UNSET means "no char
 matching encountered yet". It gets changed to REQ_NONE if we hit something that
 matches a non-fixed char first char; reqbyte just remains unset if we never
 find one.
@@ -1810,7 +2129,7 @@ firstbyte = reqbyte = zerofirstbyte = zeroreqbyte = REQ_UNSET;
 /* The variable req_caseopt contains either the REQ_CASELESS value or zero,
 according to the current setting of the caseless flag. REQ_CASELESS is a bit
 value > 255. It is added into the firstbyte or reqbyte variables to record the
-case status of the value. */
+case status of the value. This is used only for ASCII characters. */
 
 req_caseopt = ((options & PCRE_CASELESS) != 0)? REQ_CASELESS : 0;
 
@@ -1820,6 +2139,7 @@ for (;; ptr++)
   {
   BOOL negate_class;
   BOOL possessive_quantifier;
+  BOOL is_quantifier;
   int class_charcount;
   int class_lastchar;
   int newoptions;
@@ -1827,9 +2147,53 @@ for (;; ptr++)
   int skipbytes;
   int subreqbyte;
   int subfirstbyte;
+  int mclength;
+  uschar mcbuffer[8];
+
+  /* Next byte in the pattern */
 
   c = *ptr;
-  if (inescq && c != 0) goto NORMAL_CHAR;
+
+  /* If in \Q...\E, check for the end; if not, we have a literal */
+
+  if (inescq && c != 0)
+    {
+    if (c == '\\' && ptr[1] == 'E')
+      {
+      inescq = FALSE;
+      ptr++;
+      continue;
+      }
+    else
+      {
+      if (previous_callout != NULL)
+        {
+        complete_callout(previous_callout, ptr, cd);
+        previous_callout = NULL;
+        }
+      if ((options & PCRE_AUTO_CALLOUT) != 0)
+        {
+        previous_callout = code;
+        code = auto_callout(code, ptr, cd);
+        }
+      goto NORMAL_CHAR;
+      }
+    }
+
+  /* Fill in length of a previous callout, except when the next thing is
+  a quantifier. */
+
+  is_quantifier = c == '*' || c == '+' || c == '?' ||
+    (c == '{' && is_counted_repeat(ptr+1));
+
+  if (!is_quantifier && previous_callout != NULL &&
+       after_manual_callout-- <= 0)
+    {
+    complete_callout(previous_callout, ptr, cd);
+    previous_callout = NULL;
+    }
+
+  /* In extended mode, skip white space and comments */
 
   if ((options & PCRE_EXTENDED) != 0)
     {
@@ -1843,6 +2207,14 @@ for (;; ptr++)
       }
     }
 
+  /* No auto callout for quantifiers. */
+
+  if ((options & PCRE_AUTO_CALLOUT) != 0 && !is_quantifier)
+    {
+    previous_callout = code;
+    code = auto_callout(code, ptr, cd);
+    }
+
   switch(c)
     {
     /* The branch terminates at end of string, |, or ). */
@@ -1938,7 +2310,7 @@ for (;; ptr++)
     character (< 256), because in that case the compiled code doesn't use the
     bit map. */
 
-    memset(class, 0, 32 * sizeof(uschar));
+    memset(classbits, 0, 32 * sizeof(uschar));
 
     /* Process characters until ] is reached. By writing this as a "do" it
     means that an initial ] is taken as a data character. The first pass
@@ -2022,13 +2394,16 @@ for (;; ptr++)
           if (taboffset < 0) break;
           if (local_negate)
             {
-            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+taboffset];
-            if (blankclass) class[1] |= 0x3c;
+            if (i == 0)
+              for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+taboffset];
+            else
+              for (c = 0; c < 32; c++) classbits[c] &= ~cbits[c+taboffset];
+            if (blankclass) classbits[1] |= 0x3c;
             }
           else
             {
-            for (c = 0; c < 32; c++) class[c] |= cbits[c+taboffset];
-            if (blankclass) class[1] &= ~0x3c;
+            for (c = 0; c < 32; c++) classbits[c] |= cbits[c+taboffset];
+            if (blankclass) classbits[1] &= ~0x3c;
             }
           }
 
@@ -2048,9 +2423,10 @@ for (;; ptr++)
       if (c == '\\')
         {
         c = check_escape(&ptr, errorptr, *brackets, options, TRUE);
-        if (-c == ESC_b) c = '\b';  /* \b is backslash in a class */
 
-        if (-c == ESC_Q)            /* Handle start of quoted string */
+        if (-c == ESC_b) c = '\b';       /* \b is backslash in a class */
+        else if (-c == ESC_X) c = 'X';   /* \X is literal X in a class */
+        else if (-c == ESC_Q)            /* Handle start of quoted string */
           {
           if (ptr[1] == '\\' && ptr[2] == 'E')
             {
@@ -2060,37 +2436,53 @@ for (;; ptr++)
           continue;
           }
 
-        else if (c < 0)
+        if (c < 0)
           {
           register const uschar *cbits = cd->cbits;
-          class_charcount = 10;     /* Greater than 1 is what matters */
+          class_charcount += 2;     /* Greater than 1 is what matters */
           switch (-c)
             {
             case ESC_d:
-            for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_digit];
+            for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_digit];
             continue;
 
             case ESC_D:
-            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_digit];
+            for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_digit];
             continue;
 
             case ESC_w:
-            for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_word];
+            for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_word];
             continue;
 
             case ESC_W:
-            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_word];
+            for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_word];
             continue;
 
             case ESC_s:
-            for (c = 0; c < 32; c++) class[c] |= cbits[c+cbit_space];
-            class[1] &= ~0x08;   /* Perl 5.004 onwards omits VT from \s */
+            for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_space];
+            classbits[1] &= ~0x08;   /* Perl 5.004 onwards omits VT from \s */
             continue;
 
             case ESC_S:
-            for (c = 0; c < 32; c++) class[c] |= ~cbits[c+cbit_space];
-            class[1] |= 0x08;    /* Perl 5.004 onwards omits VT from \s */
+            for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_space];
+            classbits[1] |= 0x08;    /* Perl 5.004 onwards omits VT from \s */
+            continue;
+
+#ifdef SUPPORT_UCP
+            case ESC_p:
+            case ESC_P:
+              {
+              BOOL negated;
+              int property = get_ucp(&ptr, &negated, errorptr);
+              if (property < 0) goto FAILED;
+              class_utf8 = TRUE;
+              *class_utf8data++ = ((-c == ESC_p) != negated)?
+                XCL_PROP : XCL_NOTPROP;
+              *class_utf8data++ = property;
+              class_charcount -= 2;   /* Not a < 256 character */
+              }
             continue;
+#endif
 
             /* Unrecognized escapes are faulted if PCRE is running in its
             strict mode. By default, for compatibility with Perl, they are
@@ -2102,7 +2494,8 @@ for (;; ptr++)
               *errorptr = ERR7;
               goto FAILED;
               }
-            c = *ptr;    /* The final character */
+            c = *ptr;              /* The final character */
+            class_charcount -= 2;  /* Undo the default count from above */
             }
           }
 
@@ -2127,7 +2520,7 @@ for (;; ptr++)
           }
         else
 #endif
-        d = *ptr;
+        d = *ptr;  /* Not UTF-8 mode */
 
         /* The second part of a range can be a single-character escape, but
         not any of the other escapes. Perl 5.6 treats a hyphen as a literal
@@ -2138,11 +2531,13 @@ for (;; ptr++)
           const uschar *oldptr = ptr;
           d = check_escape(&ptr, errorptr, *brackets, options, TRUE);
 
-          /* \b is backslash; any other special means the '-' was literal */
+          /* \b is backslash; \X is literal X; any other special means the '-'
+          was literal */
 
           if (d < 0)
             {
-            if (d == -ESC_b) d = '\b'; else
+            if (d == -ESC_b) d = '\b';
+            else if (d == -ESC_X) d = 'X'; else
               {
               ptr = oldptr - 2;
               goto LONE_SINGLE_CHARACTER;  /* A few lines below */
@@ -2150,47 +2545,95 @@ for (;; ptr++)
             }
           }
 
-        /* Check that the two values are in the correct order */
+        /* The check that the two values are in the correct order happens in
+        the pre-pass. Optimize one-character ranges */
 
-        if (d < c)
-          {
-          *errorptr = ERR8;
-          goto FAILED;
-          }
+        if (d == c) goto LONE_SINGLE_CHARACTER;  /* A few lines below */
 
-        /* If d is greater than 255, we can't just use the bit map, so set up
-        for the UTF-8 supporting class type. If we are not caseless, we can
-        just set up a single range. If we are caseless, the characters < 256
-        are handled with a bitmap, in order to get the case-insensitive
-        handling. */
+        /* In UTF-8 mode, if the upper limit is > 255, or > 127 for caseless
+        matching, we have to use an XCLASS with extra data items. Caseless
+        matching for characters > 127 is available only if UCP support is
+        available. */
 
 #ifdef SUPPORT_UTF8
-        if (d > 255)
+        if (utf8 && (d > 255 || ((options & PCRE_CASELESS) != 0 && d > 127)))
           {
           class_utf8 = TRUE;
-          *class_utf8data++ = XCL_RANGE;
-          if ((options & PCRE_CASELESS) == 0)
+
+          /* With UCP support, we can find the other case equivalents of
+          the relevant characters. There may be several ranges. Optimize how
+          they fit with the basic range. */
+
+#ifdef SUPPORT_UCP
+          if ((options & PCRE_CASELESS) != 0)
             {
-            class_utf8data += ord2utf8(c, class_utf8data);
-            class_utf8data += ord2utf8(d, class_utf8data);
-            continue;  /* Go get the next char in the class */
+            int occ, ocd;
+            int cc = c;
+            int origd = d;
+            while (get_othercase_range(&cc, origd, &occ, &ocd))
+              {
+              if (occ >= c && ocd <= d) continue;  /* Skip embedded ranges */
+
+              if (occ < c  && ocd >= c - 1)        /* Extend the basic range */
+                {                                  /* if there is overlap,   */
+                c = occ;                           /* noting that if occ < c */
+                continue;                          /* we can't have ocd > d  */
+                }                                  /* because a subrange is  */
+              if (ocd > d && occ <= d + 1)         /* always shorter than    */
+                {                                  /* the basic range.       */
+                d = ocd;
+                continue;
+                }
+
+              if (occ == ocd)
+                {
+                *class_utf8data++ = XCL_SINGLE;
+                }
+              else
+                {
+                *class_utf8data++ = XCL_RANGE;
+                class_utf8data += ord2utf8(occ, class_utf8data);
+                }
+              class_utf8data += ord2utf8(ocd, class_utf8data);
+              }
             }
-          class_utf8data += ord2utf8(256, class_utf8data);
+#endif  /* SUPPORT_UCP */
+
+          /* Now record the original range, possibly modified for UCP caseless
+          overlapping ranges. */
+
+          *class_utf8data++ = XCL_RANGE;
+          class_utf8data += ord2utf8(c, class_utf8data);
           class_utf8data += ord2utf8(d, class_utf8data);
-          d = 255;
-          /* Fall through */
+
+          /* With UCP support, we are done. Without UCP support, there is no
+          caseless matching for UTF-8 characters > 127; we can use the bit map
+          for the smaller ones. */
+
+#ifdef SUPPORT_UCP
+          continue;    /* With next character in the class */
+#else
+          if ((options & PCRE_CASELESS) == 0 || c > 127) continue;
+
+          /* Adjust upper limit and fall through to set up the map */
+
+          d = 127;
+
+#endif  /* SUPPORT_UCP */
           }
-#endif
-        /* We use the bit map if the range is entirely < 255, or if part of it
-        is < 255 and matching is caseless. */
+#endif  /* SUPPORT_UTF8 */
+
+        /* We use the bit map for all cases when not in UTF-8 mode; else
+        ranges that lie entirely within 0-127 when there is UCP support; else
+        for partial ranges without UCP support. */
 
         for (; c <= d; c++)
           {
-          class[c/8] |= (1 << (c&7));
+          classbits[c/8] |= (1 << (c&7));
           if ((options & PCRE_CASELESS) != 0)
             {
             int uc = cd->fcc[c];           /* flip case */
-            class[uc/8] |= (1 << (uc&7));
+            classbits[uc/8] |= (1 << (uc&7));
             }
           class_charcount++;                /* in case a one-char range */
           class_lastchar = c;
@@ -2200,28 +2643,44 @@ for (;; ptr++)
         }
 
       /* Handle a lone single character - we can get here for a normal
-      non-escape char, or after \ that introduces a single character. */
+      non-escape char, or after \ that introduces a single character or for an
+      apparent range that isn't. */
 
       LONE_SINGLE_CHARACTER:
 
-      /* Handle a multibyte character */
+      /* Handle a character that cannot go in the bit map */
 
 #ifdef SUPPORT_UTF8
-      if (utf8 && c > 255)
+      if (utf8 && (c > 255 || ((options & PCRE_CASELESS) != 0 && c > 127)))
         {
         class_utf8 = TRUE;
         *class_utf8data++ = XCL_SINGLE;
         class_utf8data += ord2utf8(c, class_utf8data);
+
+#ifdef SUPPORT_UCP
+        if ((options & PCRE_CASELESS) != 0)
+          {
+          int chartype;
+          int othercase;
+          if (ucp_findchar(c, &chartype, &othercase) >= 0 && othercase > 0)
+            {
+            *class_utf8data++ = XCL_SINGLE;
+            class_utf8data += ord2utf8(othercase, class_utf8data);
+            }
+          }
+#endif  /* SUPPORT_UCP */
+
         }
       else
-#endif
+#endif  /* SUPPORT_UTF8 */
+
       /* Handle a single-byte character */
         {
-        class [c/8] |= (1 << (c&7));
+        classbits[c/8] |= (1 << (c&7));
         if ((options & PCRE_CASELESS) != 0)
           {
           c = cd->fcc[c];   /* flip case */
-          class[c/8] |= (1 << (c&7));
+          classbits[c/8] |= (1 << (c&7));
           }
         class_charcount++;
         class_lastchar = c;
@@ -2233,12 +2692,15 @@ for (;; ptr++)
 
     while ((c = *(++ptr)) != ']' || inescq);
 
-    /* If class_charcount is 1, we saw precisely one character with a value <
-    256. In UTF-8 mode, we can optimize if there were no characters >= 256 and
-    the one character is < 128. In non-UTF-8 mode we can always optimize.
+    /* If class_charcount is 1, we saw precisely one character whose value is
+    less than 256. In non-UTF-8 mode we can always optimize. In UTF-8 mode, we
+    can optimize the negative case only if there were no characters >= 128
+    because OP_NOT and the related opcodes like OP_NOTSTAR operate on
+    single-bytes only. This is an historical hangover. Maybe one day we can
+    tidy these opcodes to handle multi-byte characters.
 
     The optimization throws away the bit map. We turn the item into a
-    1-character OP_CHARS if it's positive, or OP_NOT if it's negative. Note
+    1-character OP_CHAR[NC] if it's positive, or OP_NOT if it's negative. Note
     that OP_NOT does not support multibyte characters. In the positive case, it
     can cause firstbyte to be set. Otherwise, there can be no first char if
     this item is first, whatever repeat count may follow. In the case of
@@ -2247,40 +2709,44 @@ for (;; ptr++)
 #ifdef SUPPORT_UTF8
     if (class_charcount == 1 &&
           (!utf8 ||
-          (!class_utf8 && class_lastchar < 128)))
+          (!class_utf8 && (!negate_class || class_lastchar < 128))))
+
 #else
     if (class_charcount == 1)
 #endif
       {
       zeroreqbyte = reqbyte;
+
+      /* The OP_NOT opcode works on one-byte characters only. */
+
       if (negate_class)
         {
         if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
         zerofirstbyte = firstbyte;
         *code++ = OP_NOT;
+        *code++ = class_lastchar;
+        break;
         }
+
+      /* For a single, positive character, get the value into mcbuffer, and
+      then we can handle this with the normal one-character code. */
+
+#ifdef SUPPORT_UTF8
+      if (utf8 && class_lastchar > 127)
+        mclength = ord2utf8(class_lastchar, mcbuffer);
       else
+#endif
         {
-        if (firstbyte == REQ_UNSET)
-          {
-          zerofirstbyte = REQ_NONE;
-          firstbyte = class_lastchar | req_caseopt;
-          }
-        else
-          {
-          zerofirstbyte = firstbyte;
-          reqbyte = class_lastchar | req_caseopt | cd->req_varyopt;
-          }
-        *code++ = OP_CHARS;
-        *code++ = 1;
+        mcbuffer[0] = class_lastchar;
+        mclength = 1;
         }
-      *code++ = class_lastchar;
-      break;  /* End of class handling */
-      }       /* End of 1-byte optimization */
+      goto ONE_CHAR;
+      }       /* End of 1-char optimization */
 
-    /* Otherwise, if this is the first thing in the branch, there can be no
-    first char setting, whatever the repeat count. Any reqbyte setting must
-    remain unchanged after any kind of repeat. */
+    /* The general case - not the one-char optimization. If this is the first
+    thing in the branch, there can be no first char setting, whatever the
+    repeat count. Any reqbyte setting must remain unchanged after any kind of
+    repeat. */
 
     if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
     zerofirstbyte = firstbyte;
@@ -2304,7 +2770,7 @@ for (;; ptr++)
       if (class_charcount > 0)
         {
         *code++ |= XCL_MAP;
-        memcpy(code, class, 32);
+        memcpy(code, classbits, 32);
         code = class_utf8data;
         }
 
@@ -2332,20 +2798,21 @@ for (;; ptr++)
     if (negate_class)
       {
       *code++ = OP_NCLASS;
-      for (c = 0; c < 32; c++) code[c] = ~class[c];
+      for (c = 0; c < 32; c++) code[c] = ~classbits[c];
       }
     else
       {
       *code++ = OP_CLASS;
-      memcpy(code, class, 32);
+      memcpy(code, classbits, 32);
       }
     code += 32;
     break;
 
-    /* Various kinds of repeat */
+    /* Various kinds of repeat; '{' is not necessarily a quantifier, but this
+    has been tested above. */
 
     case '{':
-    if (!is_counted_repeat(ptr+1)) goto NORMAL_CHAR;
+    if (!is_quantifier) goto NORMAL_CHAR;
     ptr = read_repeat_counts(ptr+1, &repeat_min, &repeat_max, errorptr);
     if (*errorptr != NULL) goto FAILED;
     goto REPEAT;
@@ -2422,14 +2889,13 @@ for (;; ptr++)
       code += 1 + LINK_SIZE;
       }
 
-    /* If previous was a string of characters, chop off the last one and use it
-    as the subject of the repeat. If there was only one character, we can
-    abolish the previous item altogether. If a one-char item has a minumum of
-    more than one, ensure that it is set in reqbyte - it might not be if a
-    sequence such as x{3} is the first thing in a branch because the x will
-    have gone into firstbyte instead.  */
+    /* If previous was a character match, abolish the item and generate a
+    repeat item instead. If a char item has a minumum of more than one, ensure
+    that it is set in reqbyte - it might not be if a sequence such as x{3} is
+    the first thing in a branch because the x will have gone into firstbyte
+    instead.  */
 
-    if (*previous == OP_CHARS)
+    if (*previous == OP_CHAR || *previous == OP_CHARNC)
       {
       /* Deal with UTF-8 characters that take up more than one byte. It's
       easier to write this out separately than try to macrify it. Use c to
@@ -2443,16 +2909,6 @@ for (;; ptr++)
         while((*lastchar & 0xc0) == 0x80) lastchar--;
         c = code - lastchar;            /* Length of UTF-8 character */
         memcpy(utf8_char, lastchar, c); /* Save the char */
-        if (lastchar == previous + 2)   /* There was only one character */
-          {
-          code = previous;              /* Abolish the previous item */
-          }
-        else
-          {
-          previous[1] -= c;             /* Adjust length of previous */
-          code = lastchar;              /* Lost char off the end */
-          tempcode = code;              /* Adjust position to be moved for '+' */
-          }
         c |= 0x80;                      /* Flag c as a length */
         }
       else
@@ -2462,17 +2918,8 @@ for (;; ptr++)
       with UTF-8 disabled, or for a UTF-8 character < 128. */
 
         {
-        c = *(--code);
-        if (code == previous + 2)   /* There was only one character */
-          {
-          code = previous;              /* Abolish the previous item */
-          if (repeat_min > 1) reqbyte = c | req_caseopt | cd->req_varyopt;
-          }
-        else
-          {
-          previous[1]--;             /* adjust length */
-          tempcode = code;           /* Adjust position to be moved for '+' */
-          }
+        c = code[-1];
+        if (repeat_min > 1) reqbyte = c | req_caseopt | cd->req_varyopt;
         }
 
       goto OUTPUT_SINGLE_REPEAT;   /* Code shared with single character types */
@@ -2487,27 +2934,40 @@ for (;; ptr++)
       {
       op_type = OP_NOTSTAR - OP_STAR;  /* Use "not" opcodes */
       c = previous[1];
-      code = previous;
       goto OUTPUT_SINGLE_REPEAT;
       }
 
     /* If previous was a character type match (\d or similar), abolish it and
     create a suitable repeat item. The code is shared with single-character
-    repeats by setting op_type to add a suitable offset into repeat_type. */
+    repeats by setting op_type to add a suitable offset into repeat_type. Note
+    the the Unicode property types will be present only when SUPPORT_UCP is
+    defined, but we don't wrap the little bits of code here because it just
+    makes it horribly messy. */
 
     else if (*previous < OP_EODN)
       {
+      uschar *oldcode;
+      int prop_type;
       op_type = OP_TYPESTAR - OP_STAR;  /* Use type opcodes */
       c = *previous;
-      code = previous;
 
       OUTPUT_SINGLE_REPEAT:
+      prop_type = (*previous == OP_PROP || *previous == OP_NOTPROP)?
+        previous[1] : -1;
+
+      oldcode = code;
+      code = previous;                  /* Usually overwrite previous item */
 
       /* If the maximum is zero then the minimum must also be zero; Perl allows
       this case, so we do too - by simply omitting the item altogether. */
 
       if (repeat_max == 0) goto END_REPEAT;
 
+      /* All real repeats make it impossible to handle partial matching (maybe
+      one day we will be able to remove this restriction). */
+
+      if (repeat_max != 1) cd->nopartial = TRUE;
+
       /* Combine the op_type with the repeat_type */
 
       repeat_type += op_type;
@@ -2526,51 +2986,37 @@ for (;; ptr++)
           }
         }
 
-      /* The case {1,} is handled as the special case + */
-
-      else if (repeat_min == 1 && repeat_max == -1)
-        *code++ = OP_PLUS + repeat_type;
-
-      /* The case {n,n} is just an EXACT, while the general case {n,m} is
-      handled as an EXACT followed by an UPTO. An EXACT of 1 is optimized. */
+      /* A repeat minimum of 1 is optimized into some special cases. If the
+      maximum is unlimited, we use OP_PLUS. Otherwise, the original item it
+      left in place and, if the maximum is greater than 1, we use OP_UPTO with
+      one less than the maximum. */
 
-      else
+      else if (repeat_min == 1)
         {
-        if (repeat_min != 1)
-          {
-          *code++ = OP_EXACT + op_type;  /* NB EXACT doesn't have repeat_type */
-          PUT2INC(code, 0, repeat_min);
-          }
-
-        /* If the mininum is 1 and the previous item was a character string,
-        we either have to put back the item that got cancelled if the string
-        length was 1, or add the character back onto the end of a longer
-        string. For a character type nothing need be done; it will just get
-        put back naturally. Note that the final character is always going to
-        get added below, so we leave code ready for its insertion. */
-
-        else if (*previous == OP_CHARS)
+        if (repeat_max == -1)
+          *code++ = OP_PLUS + repeat_type;
+        else
           {
-          if (code == previous) code += 2; else
-
-          /* In UTF-8 mode, a multibyte char has its length in c, with the 0x80
-          bit set as a flag. The length will always be between 2 and 6. */
-
-#ifdef SUPPORT_UTF8
-          if (utf8 && c >= 128) previous[1] += c & 7; else
-#endif
-          previous[1]++;
+          code = oldcode;                 /* leave previous item in place */
+          if (repeat_max == 1) goto END_REPEAT;
+          *code++ = OP_UPTO + repeat_type;
+          PUT2INC(code, 0, repeat_max - 1);
           }
+        }
 
-        /*  For a single negated character we also have to put back the
-        item that got cancelled. At present this applies only to single byte
-        characters in any mode. */
+      /* The case {n,n} is just an EXACT, while the general case {n,m} is
+      handled as an EXACT followed by an UPTO. */
 
-        else if (*previous == OP_NOT) code++;
+      else
+        {
+        *code++ = OP_EXACT + op_type;  /* NB EXACT doesn't have repeat_type */
+        PUT2INC(code, 0, repeat_min);
 
         /* If the maximum is unlimited, insert an OP_STAR. Before doing so,
-        we have to insert the character for the previous code. In UTF-8 mode,
-        long characters have their length in c, with the 0x80 bit as a flag. */
+        we have to insert the character for the previous code. For a repeated
+        Unicode property match, there is an extra byte that defines the
+        required property. In UTF-8 mode, long characters have their length in
+        c, with the 0x80 bit as a flag. */
 
         if (repeat_max < 0)
           {
@@ -2582,7 +3028,10 @@ for (;; ptr++)
             }
           else
 #endif
-          *code++ = c;
+            {
+            *code++ = c;
+            if (prop_type >= 0) *code++ = prop_type;
+            }
           *code++ = OP_STAR + repeat_type;
           }
 
@@ -2600,6 +3049,7 @@ for (;; ptr++)
           else
 #endif
           *code++ = c;
+          if (prop_type >= 0) *code++ = prop_type;
           repeat_max -= repeat_min;
           *code++ = OP_UPTO + repeat_type;
           PUT2INC(code, 0, repeat_max);
@@ -2616,8 +3066,14 @@ for (;; ptr++)
         }
       else
 #endif
-
       *code++ = c;
+
+      /* For a repeated Unicode property match, there is an extra byte that
+      defines the required property. */
+
+#ifdef SUPPORT_UCP
+      if (prop_type >= 0) *code++ = prop_type;
+#endif
       }
 
     /* If previous was a character class or a back reference, we put the repeat
@@ -2635,6 +3091,12 @@ for (;; ptr++)
         code = previous;
         goto END_REPEAT;
         }
+
+      /* All real repeats make it impossible to handle partial matching (maybe
+      one day we will be able to remove this restriction). */
+
+      if (repeat_max != 1) cd->nopartial = TRUE;
+
       if (repeat_min == 0 && repeat_max == -1)
         *code++ = OP_CRSTAR + repeat_type;
       else if (repeat_min == 1 && repeat_max == -1)
@@ -2937,9 +3399,11 @@ for (;; ptr++)
         ptr++;
         break;
 
-        case 'C':                 /* Callout - may be followed by digits */
-        *code++ = OP_CALLOUT;
-          {
+        case 'C':                 /* Callout - may be followed by digits; */
+        previous_callout = code;  /* Save for later completion */
+        after_manual_callout = 1; /* Skip one item before completing */
+        *code++ = OP_CALLOUT;     /* Already checked that the terminating */
+          {                       /* closing parenthesis is present. */
           int n = 0;
           while ((digitab[*(++ptr)] & ctype_digit) != 0)
             n = n * 10 + *ptr - '0';
@@ -2949,6 +3413,9 @@ for (;; ptr++)
             goto FAILED;
             }
           *code++ = n;
+          PUT(code, 0, ptr - cd->start_pattern + 1);  /* Pattern offset */
+          PUT(code, LINK_SIZE, 0);                    /* Default length */
+          code += 2 * LINK_SIZE;
           }
         previous = NULL;
         continue;
@@ -3339,215 +3806,107 @@ for (;; ptr++)
         *code++ = OP_REF;
         PUT2INC(code, 0, number);
         }
-      else
-        {
-        previous = (-c > ESC_b && -c < ESC_Z)? code : NULL;
-        *code++ = -c;
-        }
-      continue;
-      }
 
-    /* Data character: reset and fall through */
-
-    ptr = tempptr;
-    c = '\\';
-
-    /* Handle a run of data characters until a metacharacter is encountered.
-    The first character is guaranteed not to be whitespace or # when the
-    extended flag is set. */
-
-    NORMAL_CHAR:
-    default:
-    previous = code;
-    *code = OP_CHARS;
-    code += 2;
-    length = 0;
-
-    do
-      {
-      /* If in \Q...\E, check for the end; if not, we always have a literal */
+      /* So are Unicode property matches, if supported. We know that get_ucp
+      won't fail because it was tested in the pre-pass. */
 
-      if (inescq)
+#ifdef SUPPORT_UCP
+      else if (-c == ESC_P || -c == ESC_p)
         {
-        if (c == '\\' && ptr[1] == 'E')
-          {
-          inescq = FALSE;
-          ptr++;
-          }
-        else
-          {
-          *code++ = c;
-          length++;
-          }
-        continue;
+        BOOL negated;
+        int value = get_ucp(&ptr, &negated, errorptr);
+        previous = code;
+        *code++ = ((-c == ESC_p) != negated)? OP_PROP : OP_NOTPROP;
+        *code++ = value;
         }
+#endif
 
-      /* Skip white space and comments for /x patterns */
+      /* For the rest, we can obtain the OP value by negating the escape
+      value */
 
-      if ((options & PCRE_EXTENDED) != 0)
+      else
         {
-        if ((cd->ctypes[c] & ctype_space) != 0) continue;
-        if (c == '#')
-          {
-          /* The space before the ; is to avoid a warning on a silly compiler
-          on the Macintosh. */
-          while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
-          if (c == 0) break;
-          continue;
-          }
+        previous = (-c > ESC_b && -c < ESC_Z)? code : NULL;
+        *code++ = -c;
         }
+      continue;
+      }
 
-      /* Backslash may introduce a data char or a metacharacter. Escaped items
-      are checked for validity in the pre-compiling pass. Stop the string
-      before a metaitem. */
-
-      if (c == '\\')
-        {
-        tempptr = ptr;
-        c = check_escape(&ptr, errorptr, *brackets, options, FALSE);
-        if (c < 0) { ptr = tempptr; break; }
-
-        /* If a character is > 127 in UTF-8 mode, we have to turn it into
-        two or more bytes in the UTF-8 encoding. */
+    /* We have a data character whose value is in c. In UTF-8 mode it may have
+    a value > 127. We set its representation in the length/buffer, and then
+    handle it as a data character. */
 
 #ifdef SUPPORT_UTF8
-        if (utf8 && c > 127)
-          {
-          uschar buffer[8];
-          int len = ord2utf8(c, buffer);
-          for (c = 0; c < len; c++) *code++ = buffer[c];
-          length += len;
-          continue;
-          }
+    if (utf8 && c > 127)
+      mclength = ord2utf8(c, mcbuffer);
+    else
 #endif
-        }
-
-      /* Ordinary character or single-char escape */
 
-      *code++ = c;
-      length++;
-      }
+     {
+     mcbuffer[0] = c;
+     mclength = 1;
+     }
 
-    /* This "while" is the end of the "do" above. */
+    goto ONE_CHAR;
 
-    while (length < MAXLIT && (cd->ctypes[c = *(++ptr)] & ctype_meta) == 0);
+    /* Handle a literal character. It is guaranteed not to be whitespace or #
+    when the extended flag is set. If we are in UTF-8 mode, it may be a
+    multi-byte literal character. */
 
-    /* Update the first and last requirements. These are always bytes, even in
-    UTF-8 mode. However, there is a special case to be considered when there
-    are only one or two characters. Because this gets messy in UTF-8 mode, the
-    code is kept separate. When we get here "length" contains the number of
-    bytes. */
+    default:
+    NORMAL_CHAR:
+    mclength = 1;
+    mcbuffer[0] = c;
 
 #ifdef SUPPORT_UTF8
-    if (utf8 && length > 1)
+    if (utf8 && (c & 0xc0) == 0xc0)
       {
-      uschar *t = previous + 3;                      /* After this code, t */
-      while (t < code && (*t & 0xc0) == 0x80) t++;   /* follows the 1st char */
-
-      /* Handle the case when there is only one multibyte character. It must
-      have at least two bytes because of the "length > 1" test above. */
-
-      if (t == code)
-        {
-        /* If no previous first byte, set it from this character, but revert to
-        none on a zero repeat. */
-
-        if (firstbyte == REQ_UNSET)
-          {
-          zerofirstbyte = REQ_NONE;
-          firstbyte = previous[2];
-          }
+      while ((ptr[1] & 0xc0) == 0x80)
+        mcbuffer[mclength++] = *(++ptr);
+      }
+#endif
 
-        /* Otherwise, leave the first byte value alone, and don't change it on
-        a zero repeat */
+    /* At this point we have the character's bytes in mcbuffer, and the length
+    in mclength. When not in UTF-8 mode, the length is always 1. */
 
-        else zerofirstbyte = firstbyte;
+    ONE_CHAR:
+    previous = code;
+    *code++ = ((options & PCRE_CASELESS) != 0)? OP_CHARNC : OP_CHAR;
+    for (c = 0; c < mclength; c++) *code++ = mcbuffer[c];
 
-        /* In both cases, a zero repeat resets the previous required byte */
+    /* Set the first and required bytes appropriately. If no previous first
+    byte, set it from this character, but revert to none on a zero repeat.
+    Otherwise, leave the firstbyte value alone, and don't change it on a zero
+    repeat. */
 
-        zeroreqbyte = reqbyte;
-        }
+    if (firstbyte == REQ_UNSET)
+      {
+      zerofirstbyte = REQ_NONE;
+      zeroreqbyte = reqbyte;
 
-      /* Handle the case when there is more than one character. These may be
-      single-byte or multibyte characters */
+      /* If the character is more than one byte long, we can set firstbyte
+      only if it is not to be matched caselessly. */
 
-      else
+      if (mclength == 1 || req_caseopt == 0)
         {
-        t = code - 1;                       /* After this code, t is at the */
-        while ((*t & 0xc0) == 0x80) t--;    /* start of the last character */
-
-        /* If no previous first byte, set it from the first character, and
-        retain it on a zero repeat (of the last character). The required byte
-        is reset on a zero repeat, either to the byte before the last
-        character, unless this is the first byte of the string. In that case,
-        it reverts to its previous value. */
-
-        if (firstbyte == REQ_UNSET)
-          {
-          zerofirstbyte = firstbyte = previous[2] | req_caseopt;
-          zeroreqbyte = (t - 1 == previous + 2)?
-            reqbyte : t[-1] | req_caseopt | cd->req_varyopt;
-          }
-
-        /* If there was a previous first byte, leave it alone, and don't change
-        it on a zero repeat. The required byte is reset on a zero repeat to the
-        byte before the last character. */
-
-        else
-          {
-          zerofirstbyte = firstbyte;
-          zeroreqbyte = t[-1] | req_caseopt | cd->req_varyopt;
-          }
+        firstbyte = mcbuffer[0] | req_caseopt;
+        if (mclength != 1) reqbyte = code[-1] | cd->req_varyopt;
         }
-
-      /* In all cases (we know length > 1), the new required byte is the last
-      byte of the string. */
-
-      reqbyte = code[-1] | req_caseopt | cd->req_varyopt;
+      else firstbyte = reqbyte = REQ_NONE;
       }
 
-    else   /* End of UTF-8 coding */
-#endif
-
-    /* This is the code for non-UTF-8 operation, either without UTF-8 support,
-    or when UTF-8 is not enabled. */
+    /* firstbyte was previously set; we can set reqbyte only the length is
+    1 or the matching is caseful. */
 
+    else
       {
-      /* firstbyte was not previously set; take it from this string */
-
-      if (firstbyte == REQ_UNSET)
-        {
-        if (length == 1)
-          {
-          zerofirstbyte = REQ_NONE;
-          firstbyte = previous[2] | req_caseopt;
-          zeroreqbyte = reqbyte;
-          }
-        else
-          {
-          zerofirstbyte = firstbyte = previous[2] | req_caseopt;
-          zeroreqbyte = (length > 2)?
-            (code[-2] | req_caseopt | cd->req_varyopt) : reqbyte;
-          reqbyte = code[-1] | req_caseopt | cd->req_varyopt;
-          }
-        }
-
-      /* firstbyte was previously set */
-
-      else
-        {
-        zerofirstbyte = firstbyte;
-        zeroreqbyte = (length == 1)? reqbyte :
-          code[-2] | req_caseopt | cd->req_varyopt;
+      zerofirstbyte = firstbyte;
+      zeroreqbyte = reqbyte;
+      if (mclength == 1 || req_caseopt == 0)
         reqbyte = code[-1] | req_caseopt | cd->req_varyopt;
-        }
       }
 
-    /* Set the length in the data vector, and advance to the next state. */
-
-    previous[1] = length;
-    if (length < MAXLIT) ptr--;
-    break;
+    break;            /* End of literal character handling */
     }
   }                   /* end of big loop */
 
@@ -3809,7 +4168,7 @@ is_anchored(register const uschar *code, int *options, unsigned int bracket_map,
 {
 do {
    const uschar *scode =
-     first_significant_code(code + 1+LINK_SIZE, options, PCRE_MULTILINE);
+     first_significant_code(code + 1+LINK_SIZE, options, PCRE_MULTILINE, FALSE);
    register int op = *scode;
 
    /* Capturing brackets */
@@ -3878,7 +4237,8 @@ is_startline(const uschar *code, unsigned int bracket_map,
   unsigned int backref_map)
 {
 do {
-   const uschar *scode = first_significant_code(code + 1+LINK_SIZE, NULL, 0);
+   const uschar *scode = first_significant_code(code + 1+LINK_SIZE, NULL, 0,
+     FALSE);
    register int op = *scode;
 
    /* Capturing brackets */
@@ -3897,7 +4257,7 @@ do {
    else if (op == OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
      { if (!is_startline(scode, bracket_map, backref_map)) return FALSE; }
 
-   /* .* is not anchored unless DOTALL is set and it isn't in brackets that
+   /* .* means "start at start or after \n" if it isn't in brackets that
    may be referenced. */
 
    else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR)
@@ -3908,6 +4268,9 @@ do {
    /* Check for explicit circumflex */
 
    else if (op != OP_CIRC) return FALSE;
+
+   /* Move on to the next alternative */
+
    code += GET(code, 1);
    }
 while (*code == OP_ALT);  /* Loop for each alternative */
@@ -3943,7 +4306,7 @@ register int c = -1;
 do {
    int d;
    const uschar *scode =
-     first_significant_code(code + 1+LINK_SIZE, options, PCRE_CASELESS);
+     first_significant_code(code + 1+LINK_SIZE, options, PCRE_CASELESS, TRUE);
    register int op = *scode;
 
    if (op >= OP_BRA) op = OP_BRA;
@@ -3963,11 +4326,10 @@ do {
      break;
 
      case OP_EXACT:       /* Fall through */
-     scode++;
-
-     case OP_CHARS:       /* Fall through */
-     scode++;
+     scode += 2;
 
+     case OP_CHAR:
+     case OP_CHARNC:
      case OP_PLUS:
      case OP_MINPLUS:
      if (!inassert) return -1;
@@ -4107,8 +4469,8 @@ int branch_newextra;
 int item_count = -1;
 int name_count = 0;
 int max_name_size = 0;
+int lastitemlength = 0;
 #ifdef SUPPORT_UTF8
-int lastcharlength = 0;
 BOOL utf8;
 BOOL class_utf8;
 #endif
@@ -4199,7 +4561,11 @@ while ((c = *(++ptr)) != 0)
 
   /* If we are inside a \Q...\E sequence, all chars are literal */
 
-  if (inescq) goto NORMAL_CHAR;
+  if (inescq)
+    {
+    if ((options & PCRE_AUTO_CALLOUT) != 0) length += 2 + 2*LINK_SIZE;
+    goto NORMAL_CHAR;
+    }
 
   /* Otherwise, first check for ignored whitespace and comments */
 
@@ -4218,24 +4584,40 @@ while ((c = *(++ptr)) != 0)
 
   item_count++;    /* Is zero for the first non-comment item */
 
+  /* Allow space for auto callout before every item except quantifiers. */
+
+  if ((options & PCRE_AUTO_CALLOUT) != 0 &&
+       c != '*' && c != '+' && c != '?' &&
+       (c != '{' || !is_counted_repeat(ptr + 1)))
+    length += 2 + 2*LINK_SIZE;
+
   switch(c)
     {
-    /* A backslashed item may be an escaped "normal" character or a
-    character type. For a "normal" character, put the pointers and
-    character back so that tests for whitespace etc. in the input
-    are done correctly. */
+    /* A backslashed item may be an escaped data character or it may be a
+    character type. */
 
     case '\\':
+    c = check_escape(&ptr, errorptr, bracount, options, FALSE);
+    if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
+
+    lastitemlength = 1;     /* Default length of last item for repeats */
+
+    if (c >= 0)             /* Data character */
       {
-      const uschar *save_ptr = ptr;
-      c = check_escape(&ptr, errorptr, bracount, options, FALSE);
-      if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
-      if (c >= 0)
+      length += 2;          /* For a one-byte character */
+
+#ifdef SUPPORT_UTF8
+      if (utf8 && c > 127)
         {
-        ptr = save_ptr;
-        c = '\\';
-        goto NORMAL_CHAR;
+        int i;
+        for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
+          if (c <= utf8_table1[i]) break;
+        length += i;
+        lastitemlength += i;
         }
+#endif
+
+      continue;
       }
 
     /* If \Q, enter "literal" mode */
@@ -4246,12 +4628,36 @@ while ((c = *(++ptr)) != 0)
       continue;
       }
 
-    /* Other escapes need one byte, and are of length one for repeats */
+    /* \X is supported only if Unicode property support is compiled */
 
-    length++;
-#ifdef SUPPORT_UTF8
-    lastcharlength = 1;
+#ifndef SUPPORT_UCP
+    if (-c == ESC_X)
+      {
+      *errorptr = ERR45;
+      goto PCRE_ERROR_RETURN;
+      }
+#endif
+
+    /* \P and \p are for Unicode properties, but only when the support has
+    been compiled. Each item needs 2 bytes. */
+
+    else if (-c == ESC_P || -c == ESC_p)
+      {
+#ifdef SUPPORT_UCP
+      BOOL negated;
+      length += 2;
+      lastitemlength = 2;
+      if (get_ucp(&ptr, &negated, errorptr) < 0) goto PCRE_ERROR_RETURN;
+      continue;
+#else
+      *errorptr = ERR45;
+      goto PCRE_ERROR_RETURN;
 #endif
+      }
+
+    /* Other escapes need one byte */
+
+    length++;
 
     /* A back reference needs an additional 2 bytes, plus either one or 5
     bytes for a repeat. We also need to keep the value of the highest
@@ -4281,9 +4687,7 @@ while ((c = *(++ptr)) != 0)
     case '.':
     case '$':
     length++;
-#ifdef SUPPORT_UTF8
-    lastcharlength = 1;
-#endif
+    lastitemlength = 1;
     continue;
 
     case '*':            /* These repeats won't be after brackets; */
@@ -4310,30 +4714,12 @@ while ((c = *(++ptr)) != 0)
 
     else
       {
-#ifdef SUPPORT_UTF8
-      /* In UTF-8 mode, we should find the length in lastcharlength */
-      if (utf8)
+      if (min != 1)
         {
-        if (min != 1)
-          {
-          length -= lastcharlength;   /* Uncount the original char or metachar */
-          if (min > 0) length += 3 + lastcharlength;
-          }
-        length += lastcharlength + ((max > 0)? 3 : 1);
-        }
-      else
-#endif
-
-      /* Not UTF-8 mode: all characters are one byte */
-        {
-        if (min != 1)
-          {
-          length--;   /* Uncount the original char or metachar */
-          if (min > 0) length += 4;
-          }
-
-        length += (max > 0)? 4 : 2;
+        length -= lastitemlength;   /* Uncount the original char or metachar */
+        if (min > 0) length += 3 + lastitemlength;
         }
+      length += lastitemlength + ((max > 0)? 3 : 1);
       }
 
     if (ptr[1] == '?') ptr++;      /* Needs no extra length */
@@ -4364,14 +4750,17 @@ while ((c = *(++ptr)) != 0)
     where we can. (In UTF-8 mode we can do this only for chars < 128.) */
 
     case '[':
-    class_optcount = 0;
+    if (*(++ptr) == '^')
+      {
+      class_optcount = 10;  /* Greater than one */
+      ptr++;
+      }
+    else class_optcount = 0;
 
 #ifdef SUPPORT_UTF8
     class_utf8 = FALSE;
 #endif
 
-    if (*(++ptr) == '^') ptr++;
-
     /* Written as a "do" so that an initial ']' is taken as data */
 
     if (*ptr != 0) do
@@ -4380,7 +4769,7 @@ while ((c = *(++ptr)) != 0)
 
       if (inescq)
         {
-        if (*ptr != '\\' || ptr[1] != 'E') goto NON_SPECIAL_CHARACTER;
+        if (*ptr != '\\' || ptr[1] != 'E') goto GET_ONE_CHARACTER;
         inescq = FALSE;
         ptr += 1;
         continue;
@@ -4390,19 +4779,17 @@ while ((c = *(++ptr)) != 0)
 
       if (*ptr == '\\')
         {
-#ifdef SUPPORT_UTF8
-        int prevchar = ptr[-1];
-#endif
-        int ch = check_escape(&ptr, errorptr, bracount, options, TRUE);
+        c = check_escape(&ptr, errorptr, bracount, options, TRUE);
         if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
 
-        /* \b is backspace inside a class */
+        /* \b is backspace inside a class; \X is literal */
 
-        if (-ch == ESC_b) ch = '\b';
+        if (-c == ESC_b) c = '\b';
+        else if (-c == ESC_X) c = 'X';
 
         /* \Q enters quoting mode */
 
-        if (-ch == ESC_Q)
+        else if (-c == ESC_Q)
           {
           inescq = TRUE;
           continue;
@@ -4410,33 +4797,26 @@ while ((c = *(++ptr)) != 0)
 
         /* Handle escapes that turn into characters */
 
-        if (ch >= 0)
+        if (c >= 0) goto NON_SPECIAL_CHARACTER;
+
+        /* Escapes that are meta-things. The normal ones just affect the
+        bit map, but Unicode properties require an XCLASS extended item. */
+
+        else
           {
+          class_optcount = 10;         /* \d, \s etc; make sure > 1 */
 #ifdef SUPPORT_UTF8
-          if (utf8)
+          if (-c == ESC_p || -c == ESC_P)
             {
-            if (ch > 127) class_optcount = 10;  /* Ensure > 1 */
-            if (ch > 255)
+            if (!class_utf8)
               {
-              uschar buffer[6];
-              if (!class_utf8)
-                {
-                class_utf8 = TRUE;
-                length += LINK_SIZE + 1 + 1;
-                }
-              length += 1 + ord2utf8(ch, buffer);
-
-              /* If this wide character is preceded by '-', add an extra 2 to
-              the length in case the previous character was < 128, because in
-              this case the whole range will be put into the list. */
-
-              if (prevchar == '-') length += 2;
+              class_utf8 = TRUE;
+              length += LINK_SIZE + 2;
               }
+            length += 2;
             }
 #endif
-          class_optcount++;            /* for possible optimization */
           }
-        else class_optcount = 10;      /* \d, \s etc; make sure > 1 */
         }
 
       /* Check the syntax for POSIX stuff. The bits we actually handle are
@@ -4448,42 +4828,155 @@ while ((c = *(++ptr)) != 0)
         class_optcount = 10;    /* Make sure > 1 */
         }
 
-      /* Anything else just increments the possible optimization count. If
-      there are wide characters, we are going to have to use an XCLASS. */
+      /* Anything else increments the possible optimization count. We have to
+      detect ranges here so that we can compute the number of extra ranges for
+      caseless wide characters when UCP support is available. If there are wide
+      characters, we are going to have to use an XCLASS, even for single
+      characters. */
 
       else
         {
-        NON_SPECIAL_CHARACTER:
-        class_optcount++;
+        int d;
+
+        GET_ONE_CHARACTER:
 
 #ifdef SUPPORT_UTF8
         if (utf8)
           {
-          int ch;
           int extra = 0;
-          GETCHARLEN(ch, ptr, extra);
-          if (ch > 127) class_optcount = 10;   /* No optimization possible */
-          if (ch > 255)
+          GETCHARLEN(c, ptr, extra);
+          ptr += extra;
+          }
+        else c = *ptr;
+#else
+        c = *ptr;
+#endif
+
+        /* Come here from handling \ above when it escapes to a char value */
+
+        NON_SPECIAL_CHARACTER:
+        class_optcount++;
+
+        d = -1;
+        if (ptr[1] == '-')
+          {
+          uschar const *hyptr = ptr++;
+          if (ptr[1] == '\\')
             {
-            if (!class_utf8)
+            ptr++;
+            d = check_escape(&ptr, errorptr, bracount, options, TRUE);
+            if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
+            if (-d == ESC_b) d = '\b';        /* backspace */
+            else if (-d == ESC_X) d = 'X';    /* literal X in a class */
+            }
+          else if (ptr[1] != 0 && ptr[1] != ']')
+            {
+            ptr++;
+#ifdef SUPPORT_UTF8
+            if (utf8)
+              {
+              int extra = 0;
+              GETCHARLEN(d, ptr, extra);
+              ptr += extra;
+              }
+            else
+#endif
+            d = *ptr;
+            }
+          if (d < 0) ptr = hyptr;      /* go back to hyphen as data */
+          }
+
+        /* If d >= 0 we have a range. In UTF-8 mode, if the end is > 255, or >
+        127 for caseless matching, we will need to use an XCLASS. */
+
+        if (d >= 0)
+          {
+          class_optcount = 10;     /* Ensure > 1 */
+          if (d < c)
+            {
+            *errorptr = ERR8;
+            goto PCRE_ERROR_RETURN;
+            }
+
+#ifdef SUPPORT_UTF8
+          if (utf8 && (d > 255 || ((options & PCRE_CASELESS) != 0 && d > 127)))
+            {
+            uschar buffer[6];
+            if (!class_utf8)         /* Allow for XCLASS overhead */
               {
               class_utf8 = TRUE;
-              length += LINK_SIZE + 1 + 1;
+              length += LINK_SIZE + 2;
               }
-            length += 2 + extra;
 
-            /* If this wide character is preceded by '-', add an extra 2 to
-            the length in case the previous character was < 128, because in
-            this case the whole range will be put into the list. */
+#ifdef SUPPORT_UCP
+            /* If we have UCP support, find out how many extra ranges are
+            needed to map the other case of characters within this range. We
+            have to mimic the range optimization here, because extending the
+            range upwards might push d over a boundary that makes is use
+            another byte in the UTF-8 representation. */
 
-            if (ptr[-1] == '-') length += 2;
+            if ((options & PCRE_CASELESS) != 0)
+              {
+              int occ, ocd;
+              int cc = c;
+              int origd = d;
+              while (get_othercase_range(&cc, origd, &occ, &ocd))
+                {
+                if (occ >= c && ocd <= d) continue;   /* Skip embedded */
+
+                if (occ < c  && ocd >= c - 1)  /* Extend the basic range */
+                  {                            /* if there is overlap,   */
+                  c = occ;                     /* noting that if occ < c */
+                  continue;                    /* we can't have ocd > d  */
+                  }                            /* because a subrange is  */
+                if (ocd > d && occ <= d + 1)   /* always shorter than    */
+                  {                            /* the basic range.       */
+                  d = ocd;
+                  continue;
+                  }
+
+                /* An extra item is needed */
+
+                length += 1 + ord2utf8(occ, buffer) +
+                  ((occ == ocd)? 0 : ord2utf8(ocd, buffer));
+                }
+              }
+#endif  /* SUPPORT_UCP */
 
-            /* Advance to the end of this character */
+            /* The length of the (possibly extended) range */
 
-            ptr += extra;
+            length += 1 + ord2utf8(c, buffer) + ord2utf8(d, buffer);
             }
+#endif  /* SUPPORT_UTF8 */
+
+          }
+
+        /* We have a single character. There is nothing to be done unless we
+        are in UTF-8 mode. If the char is > 255, or 127 when caseless, we must
+        allow for an XCL_SINGLE item, doubled for caselessness if there is UCP
+        support. */
+
+        else
+          {
+#ifdef SUPPORT_UTF8
+          if (utf8 && (c > 255 || ((options & PCRE_CASELESS) != 0 && c > 127)))
+            {
+            uschar buffer[6];
+            class_optcount = 10;     /* Ensure > 1 */
+            if (!class_utf8)         /* Allow for XCLASS overhead */
+              {
+              class_utf8 = TRUE;
+              length += LINK_SIZE + 2;
+              }
+#ifdef SUPPORT_UCP
+            length += (((options & PCRE_CASELESS) != 0)? 2 : 1) *
+              (1 + ord2utf8(c, buffer));
+#else   /* SUPPORT_UCP */
+            length += 1 + ord2utf8(c, buffer);
+#endif  /* SUPPORT_UCP */
+            }
+#endif  /* SUPPORT_UTF8 */
           }
-#endif
         }
       }
     while (*(++ptr) != 0 && (inescq || *ptr != ']')); /* Concludes "do" above */
@@ -4608,7 +5101,7 @@ while ((c = *(++ptr)) != 0)
           *errorptr = ERR39;
           goto PCRE_ERROR_RETURN;
           }
-        length += 2;
+        length += 2 + 2*LINK_SIZE;
         continue;
 
         /* Named subpatterns are an extension copied from Python */
@@ -4908,111 +5401,46 @@ while ((c = *(++ptr)) != 0)
       }
     continue;
 
-    /* Non-special character. For a run of such characters the length required
-    is the number of characters + 2, except that the maximum run length is
-    MAXLIT. We won't get a skipped space or a non-data escape or the start of a
-    # comment as the first character, so the length can't be zero. */
+    /* Non-special character. It won't be space or # in extended mode, so it is
+    always a genuine character. If we are in a \Q...\E sequence, check for the
+    end; if not, we have a literal. */
 
-    NORMAL_CHAR:
     default:
-    length += 2;
-    runlength = 0;
-    do
-      {
-#ifdef SUPPORT_UTF8
-      lastcharlength = 1;     /* Need length of last char for UTF-8 repeats */
-#endif
-
-      /* If in a \Q...\E sequence, check for end; otherwise it's a literal */
-      if (inescq)
-        {
-        if (c == '\\' && ptr[1] == 'E')
-          {
-          inescq = FALSE;
-          ptr++;
-          }
-        else runlength++;
-        continue;
-        }
-
-      /* Skip whitespace and comments for /x */
-
-      if ((options & PCRE_EXTENDED) != 0)
-        {
-        if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
-        if (c == '#')
-          {
-          /* The space before the ; is to avoid a warning on a silly compiler
-          on the Macintosh. */
-          while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
-          continue;
-          }
-        }
-
-      /* Backslash may introduce a data char or a metacharacter; stop the
-      string before the latter. */
-
-      if (c == '\\')
-        {
-        const uschar *saveptr = ptr;
-        c = check_escape(&ptr, errorptr, bracount, options, FALSE);
-        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
-        if (c < 0) { ptr = saveptr; break; }
-
-        /* In UTF-8 mode, add on the number of additional bytes needed to
-        encode this character, and save the total length in case this is a
-        final char that is repeated. */
-
-#ifdef SUPPORT_UTF8
-        if (utf8 && c > 127)
-          {
-          int i;
-          for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
-            if (c <= utf8_table1[i]) break;
-          runlength += i;
-          lastcharlength += i;
-          }
-#endif
-        }
-
-      /* Ordinary character or single-char escape */
+    NORMAL_CHAR:
 
-      runlength++;
+    if (inescq && c == '\\' && ptr[1] == 'E')
+      {
+      inescq = FALSE;
+      ptr++;
+      continue;
       }
 
-    /* This "while" is the end of the "do" above. */
-
-    while (runlength < MAXLIT &&
-      (compile_block.ctypes[c = *(++ptr)] & ctype_meta) == 0);
+    length += 2;          /* For a one-byte character */
+    lastitemlength = 1;   /* Default length of last item for repeats */
 
-    /* If we hit a meta-character, back off to point to it */
-
-    if (runlength < MAXLIT) ptr--;
-
-    /* If the last char in the string is a UTF-8 multibyte character, we must
-    set lastcharlength correctly. If it was specified as an escape, this will
-    already have been done above. However, we also have to support in-line
-    UTF-8 characters, so check backwards from where we are. */
+    /* In UTF-8 mode, check for additional bytes. */
 
 #ifdef SUPPORT_UTF8
-    if (utf8)
+    if (utf8 && (c & 0xc0) == 0xc0)
       {
-      const uschar *lastptr = ptr - 1;
-      if ((*lastptr & 0x80) != 0)
-        {
-        while((*lastptr & 0xc0) == 0x80) lastptr--;
-        lastcharlength = ptr - lastptr;
+      while ((ptr[1] & 0xc0) == 0x80)         /* Can't flow over the end */
+        {                                     /* because the end is marked */
+        lastitemlength++;                     /* by a zero byte. */
+        length++;
+        ptr++;
         }
       }
 #endif
 
-    length += runlength;
     continue;
     }
   }
 
 length += 2 + LINK_SIZE;    /* For final KET and END */
 
+if ((options & PCRE_AUTO_CALLOUT) != 0)
+  length += 2 + 2*LINK_SIZE;  /* For final callout */
+
 if (length > MAX_PATTERN_SIZE)
   {
   *errorptr = ERR20;
@@ -5031,24 +5459,32 @@ if (re == NULL)
   return NULL;
   }
 
-/* Put in the magic number, and save the size, options, and table pointer */
+/* Put in the magic number, and save the sizes, options, and character table
+pointer. NULL is used for the default character tables. The nullpad field is at
+the end; it's there to help in the case when a regex compiled on a system with
+4-byte pointers is run on another with 8-byte pointers. */
 
 re->magic_number = MAGIC_NUMBER;
 re->size = size;
 re->options = options;
-re->tables = tables;
+re->dummy1 = re->dummy2 = 0;
+re->name_table_offset = sizeof(real_pcre);
 re->name_entry_size = max_name_size + 3;
 re->name_count = name_count;
+re->tables = (tables == pcre_default_tables)? NULL : tables;
+re->nullpad = NULL;
 
 /* The starting points of the name/number translation table and of the code are
 passed around in the compile data block. */
 
 compile_block.names_found = 0;
 compile_block.name_entry_size = max_name_size + 3;
-compile_block.name_table = (uschar *)re + sizeof(real_pcre);
+compile_block.name_table = (uschar *)re + re->name_table_offset;
 codestart = compile_block.name_table + re->name_entry_size * re->name_count;
 compile_block.start_code = codestart;
+compile_block.start_pattern = (const uschar *)pattern;
 compile_block.req_varyopt = 0;
+compile_block.nopartial = FALSE;
 
 /* Set up a starting, non-extracting bracket, then compile the expression. On
 error, *errorptr will be set non-NULL, so we don't need to look at the result
@@ -5063,6 +5499,8 @@ bracount = 0;
 re->top_bracket = bracount;
 re->top_backref = compile_block.top_backref;
 
+if (compile_block.nopartial) re->options |= PCRE_NOPARTIAL;
+
 /* If not reached end of pattern on success, there's an excess bracket. */
 
 if (*errorptr == NULL && *ptr != 0) *errorptr = ERR22;
@@ -5124,7 +5562,7 @@ if ((options & PCRE_ANCHORED) == 0)
 
 /* For an anchored pattern, we use the "required byte" only if it follows a
 variable length item in the regex. Remove the caseless flag for non-caseable
-chars. */
+bytes. */
 
 if (reqbyte >= 0 &&
      ((re->options & PCRE_ANCHORED) == 0 || (reqbyte & REQ_VARY) != 0))
@@ -5144,7 +5582,8 @@ printf("Length = %d top_bracket = %d top_backref = %d\n",
 
 if (re->options != 0)
   {
-  printf("%s%s%s%s%s%s%s%s%s\n",
+  printf("%s%s%s%s%s%s%s%s%s%s\n",
+    ((re->options & PCRE_NOPARTIAL) != 0)? "nopartial " : "",
     ((re->options & PCRE_ANCHORED) != 0)? "anchored " : "",
     ((re->options & PCRE_CASELESS) != 0)? "caseless " : "",
     ((re->options & PCRE_ICHANGED) != 0)? "case state changed " : "",
@@ -5276,27 +5715,46 @@ if (c < 256)
     return !negated;   /* char found */
   }
 
-/* Now match against the list of large chars or ranges that end with a large
-char. First skip the bit map if present. */
+/* First skip the bit map if present. Then match against the list of Unicode
+properties or large chars or ranges that end with a large char. We won't ever
+encounter XCL_PROP or XCL_NOTPROP when UCP support is not compiled. */
 
 if ((*data++ & XCL_MAP) != 0) data += 32;
 
 while ((t = *data++) != XCL_END)
   {
   int x, y;
-  GETCHARINC(x, data);
   if (t == XCL_SINGLE)
     {
+    GETCHARINC(x, data);
     if (c == x) return !negated;
     }
-  else
+  else if (t == XCL_RANGE)
     {
+    GETCHARINC(x, data);
     GETCHARINC(y, data);
     if (c >= x && c <= y) return !negated;
     }
+
+#ifdef SUPPORT_UCP
+  else  /* XCL_PROP & XCL_NOTPROP */
+    {
+    int chartype, othercase;
+    int rqdtype = *data++;
+    int category = ucp_findchar(c, &chartype, &othercase);
+    if (rqdtype >= 128)
+      {
+      if ((rqdtype - 128 == category) == (t == XCL_PROP)) return !negated;
+      }
+    else
+      {
+      if ((rqdtype == chartype) == (t == XCL_PROP)) return !negated;
+      }
+    }
+#endif  /* SUPPORT_UCP */
   }
 
-return negated;   /* char was not found */
+return negated;   /* char did not match */
 }
 #endif
 
@@ -5336,7 +5794,7 @@ always used to.
 
 /* These versions of the macros manage a private stack on the heap. Note
 that the rd argument of RMATCH isn't actually used. It's the md argument of
-match(), which never actually changes. */
+match(), which never changes. */
 
 #define REGISTER
 
@@ -5398,7 +5856,6 @@ typedef struct heapframe {
   const uschar *Xcallpat;
   const uschar *Xcharptr;
   const uschar *Xdata;
-  const uschar *Xlastptr;
   const uschar *Xnext;
   const uschar *Xpp;
   const uschar *Xprev;
@@ -5413,6 +5870,16 @@ typedef struct heapframe {
 
   unsigned long int Xoriginal_ims;
 
+#ifdef SUPPORT_UCP
+  int Xprop_type;
+  int Xprop_fail_result;
+  int Xprop_category;
+  int Xprop_chartype;
+  int Xprop_othercase;
+  int Xprop_test_against;
+  int *Xprop_test_variable;
+#endif
+
   int Xctype;
   int Xfc;
   int Xfi;
@@ -5523,10 +5990,11 @@ HEAP_RECURSE:
 
 /* Ditto for the local variables */
 
-#define callpat            frame->Xcallpat
+#ifdef SUPPORT_UTF8
 #define charptr            frame->Xcharptr
+#endif
+#define callpat            frame->Xcallpat
 #define data               frame->Xdata
-#define lastptr            frame->Xlastptr
 #define next               frame->Xnext
 #define pp                 frame->Xpp
 #define prev               frame->Xprev
@@ -5541,6 +6009,16 @@ HEAP_RECURSE:
 
 #define original_ims       frame->Xoriginal_ims
 
+#ifdef SUPPORT_UCP
+#define prop_type          frame->Xprop_type
+#define prop_fail_result   frame->Xprop_fail_result
+#define prop_category      frame->Xprop_category
+#define prop_chartype      frame->Xprop_chartype
+#define prop_othercase     frame->Xprop_othercase
+#define prop_test_against  frame->Xprop_test_against
+#define prop_test_variable frame->Xprop_test_variable
+#endif
+
 #define ctype              frame->Xctype
 #define fc                 frame->Xfc
 #define fi                 frame->Xfi
@@ -5566,24 +6044,36 @@ i, and fc and c, can be the same variables. */
 #define fi i
 #define fc c
 
-const uschar *callpat;             /* Many of these variables are used ony */
+
+#ifdef SUPPORT_UTF8                /* Many of these variables are used ony */
 const uschar *charptr;             /* small blocks of the code. My normal  */
-const uschar *data;                /* style of coding would have declared  */
-const uschar *lastptr;             /* them within each of those blocks.    */
-const uschar *next;                /* However, in order to accommodate the */
-const uschar *pp;                  /* version of this code that uses an    */
-const uschar *prev;                /* external "stack" implemented on the  */
-const uschar *saved_eptr;          /* heap, it is easier to declare them   */
-                                   /* all here, so the declarations can    */
-recursion_info new_recursive;      /* be cut out in a block. The only      */
-                                   /* declarations within blocks below are */
-BOOL cur_is_word;                  /* for variables that do not have to    */
-BOOL condition;                    /* be preserved over a recursive call   */
-BOOL minimize;                     /* to RMATCH().                         */
+#endif                             /* style of coding would have declared  */
+const uschar *callpat;             /* them within each of those blocks.    */
+const uschar *data;                /* However, in order to accommodate the */
+const uschar *next;                /* version of this code that uses an    */
+const uschar *pp;                  /* external "stack" implemented on the  */
+const uschar *prev;                /* heap, it is easier to declare them   */
+const uschar *saved_eptr;          /* all here, so the declarations can    */
+                                   /* be cut out in a block. The only      */
+recursion_info new_recursive;      /* declarations within blocks below are */
+                                   /* for variables that do not have to    */
+BOOL cur_is_word;                  /* be preserved over a recursive call   */
+BOOL condition;                    /* to RMATCH().                         */
+BOOL minimize;
 BOOL prev_is_word;
 
 unsigned long int original_ims;
 
+#ifdef SUPPORT_UCP
+int prop_type;
+int prop_fail_result;
+int prop_category;
+int prop_chartype;
+int prop_othercase;
+int prop_test_against;
+int *prop_test_variable;
+#endif
+
 int ctype;
 int length;
 int max;
@@ -5598,6 +6088,14 @@ int stacksave[REC_STACK_SAVE_MAX];
 eptrblock newptrb;
 #endif
 
+/* These statements are here to stop the compiler complaining about unitialized
+variables. */
+
+#ifdef SUPPORT_UCP
+prop_fail_result = 0;
+prop_test_against = 0;
+prop_test_variable = NULL;
+#endif
 
 /* OK, now we can get on with the real code of the function. Recursion is
 specified by the macros RMATCH and RRETURN. When NO_RECURSE is *not* defined,
@@ -5629,6 +6127,14 @@ for (;;)
   op = *ecode;
   minimize = FALSE;
 
+  /* For partial matching, remember if we ever hit the end of the subject after
+  matching at least one subject character. */
+
+  if (md->partial &&
+      eptr >= md->end_subject &&
+      eptr > md->start_match)
+    md->hitend = TRUE;
+
   /* Opening capturing bracket. If there is space in the offset vector, save
   the current subject position in the working slot at the top of the vector. We
   mustn't change the current values of the data slot, because they may be set
@@ -5883,20 +6389,22 @@ for (;;)
     if (pcre_callout != NULL)
       {
       pcre_callout_block cb;
-      cb.version          = 0;   /* Version 0 of the callout block */
+      cb.version          = 1;   /* Version 1 of the callout block */
       cb.callout_number   = ecode[1];
       cb.offset_vector    = md->offset_vector;
       cb.subject          = (const char *)md->start_subject;
       cb.subject_length   = md->end_subject - md->start_subject;
       cb.start_match      = md->start_match - md->start_subject;
       cb.current_position = eptr - md->start_subject;
+      cb.pattern_position = GET(ecode, 2);
+      cb.next_item_length = GET(ecode, 2 + LINK_SIZE);
       cb.capture_top      = offset_top/2;
       cb.capture_last     = md->capture_last;
       cb.callout_data     = md->callout_data;
       if ((rrc = (*pcre_callout)(&cb)) > 0) RRETURN(MATCH_NOMATCH);
       if (rrc < 0) RRETURN(rrc);
       }
-    ecode += 2;
+    ecode += 2 + 2*LINK_SIZE;
     break;
 
     /* Recursion either matches the current regex, or some subexpression. The
@@ -6297,7 +6805,7 @@ for (;;)
         {
         if (eptr == md->start_subject) prev_is_word = FALSE; else
           {
-          lastptr = eptr - 1;
+          const uschar *lastptr = eptr - 1;
           while((*lastptr & 0xc0) == 0x80) lastptr--;
           GETCHAR(c, lastptr);
           prev_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0;
@@ -6427,6 +6935,63 @@ for (;;)
     ecode++;
     break;
 
+#ifdef SUPPORT_UCP
+    /* Check the next character by Unicode property. We will get here only
+    if the support is in the binary; otherwise a compile-time error occurs. */
+
+    case OP_PROP:
+    case OP_NOTPROP:
+    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+    GETCHARINCTEST(c, eptr);
+      {
+      int chartype, rqdtype;
+      int othercase;
+      int category = ucp_findchar(c, &chartype, &othercase);
+
+      rqdtype = *(++ecode);
+      ecode++;
+
+      if (rqdtype >= 128)
+        {
+        if ((rqdtype - 128 != category) == (op == OP_PROP))
+          RRETURN(MATCH_NOMATCH);
+        }
+      else
+        {
+        if ((rqdtype != chartype) == (op == OP_PROP))
+          RRETURN(MATCH_NOMATCH);
+        }
+      }
+    break;
+
+    /* Match an extended Unicode sequence. We will get here only if the support
+    is in the binary; otherwise a compile-time error occurs. */
+
+    case OP_EXTUNI:
+    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+    GETCHARINCTEST(c, eptr);
+      {
+      int chartype;
+      int othercase;
+      int category = ucp_findchar(c, &chartype, &othercase);
+      if (category == ucp_M) RRETURN(MATCH_NOMATCH);
+      while (eptr < md->end_subject)
+        {
+        int len = 1;
+        if (!md->utf8) c = *eptr; else
+          {
+          GETCHARLEN(c, eptr, len);
+          }
+        category = ucp_findchar(c, &chartype, &othercase);
+        if (category != ucp_M) break;
+        eptr += len;
+        }
+      }
+    ecode++;
+    break;
+#endif
+
+
     /* Match a back reference, possibly repeatedly. Look past the end of the
     item to see if there is repeat information following. The code is similar
     to that for character classes, but repeated for efficiency. Then obey
@@ -6438,7 +7003,7 @@ for (;;)
     case OP_REF:
       {
       offset = GET2(ecode, 1) << 1;               /* Doubled ref number */
-      ecode += 3;                                     /* Advance past item */
+      ecode += 3;                                 /* Advance past item */
 
       /* If the reference is unset, set the length to be longer than the amount
       of subject left; this ensures that every attempt at a match fails. We
@@ -6540,9 +7105,11 @@ for (;;)
 
 
     /* Match a bit-mapped character class, possibly repeatedly. This op code is
-    used when all the characters in the class have values in the range 0-255.
-    The only difference between OP_CLASS and OP_NCLASS occurs when a data
-    character outside the range is encountered.
+    used when all the characters in the class have values in the range 0-255,
+    and either the matching is caseful, or the characters are in the range
+    0-127 when UTF-8 processing is enabled. The only difference between
+    OP_CLASS and OP_NCLASS occurs when a data character outside the range is
+    encountered.
 
     First, look past the end of the item to see if there is repeat information
     following. Then obey similar code to character type repeats - written out
@@ -6814,38 +7381,82 @@ for (;;)
       }
 #endif    /* End of XCLASS */
 
-    /* Match a run of characters */
+    /* Match a single character, casefully */
+
+    case OP_CHAR:
+#ifdef SUPPORT_UTF8
+    if (md->utf8)
+      {
+      length = 1;
+      ecode++;
+      GETCHARLEN(fc, ecode, length);
+      if (length > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
+      while (length-- > 0) if (*ecode++ != *eptr++) RRETURN(MATCH_NOMATCH);
+      }
+    else
+#endif
 
-    case OP_CHARS:
+    /* Non-UTF-8 mode */
       {
-      register int slen = ecode[1];
+      if (md->end_subject - eptr < 1) RRETURN(MATCH_NOMATCH);
+      if (ecode[1] != *eptr++) RRETURN(MATCH_NOMATCH);
       ecode += 2;
+      }
+    break;
 
-#ifdef DEBUG    /* Sigh. Some compilers never learn. */
-      if (eptr >= md->end_subject)
-        printf("matching subject <null> against pattern ");
-      else
-        {
-        printf("matching subject ");
-        pchars(eptr, slen, TRUE, md);
-        printf(" against pattern ");
-        }
-      pchars(ecode, slen, FALSE, md);
-      printf("\n");
-#endif
+    /* Match a single character, caselessly */
+
+    case OP_CHARNC:
+#ifdef SUPPORT_UTF8
+    if (md->utf8)
+      {
+      length = 1;
+      ecode++;
+      GETCHARLEN(fc, ecode, length);
+
+      if (length > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
 
-      if (slen > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
-      if ((ims & PCRE_CASELESS) != 0)
+      /* If the pattern character's value is < 128, we have only one byte, and
+      can use the fast lookup table. */
+
+      if (fc < 128)
         {
-        while (slen-- > 0)
-          if (md->lcc[*ecode++] != md->lcc[*eptr++])
-            RRETURN(MATCH_NOMATCH);
+        if (md->lcc[*ecode++] != md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH);
         }
+
+      /* Otherwise we must pick up the subject character */
+
       else
         {
-        while (slen-- > 0) if (*ecode++ != *eptr++) RRETURN(MATCH_NOMATCH);
+        int dc;
+        GETCHARINC(dc, eptr);
+        ecode += length;
+
+        /* If we have Unicode property support, we can use it to test the other
+        case of the character, if there is one. The result of ucp_findchar() is
+        < 0 if the char isn't found, and othercase is returned as zero if there
+        isn't one. */
+
+        if (fc != dc)
+          {
+#ifdef SUPPORT_UCP
+          int chartype;
+          int othercase;
+          if (ucp_findchar(fc, &chartype, &othercase) < 0 || dc != othercase)
+#endif
+            RRETURN(MATCH_NOMATCH);
+          }
         }
       }
+    else
+#endif   /* SUPPORT_UTF8 */
+
+    /* Non-UTF-8 mode */
+      {
+      if (md->end_subject - eptr < 1) RRETURN(MATCH_NOMATCH);
+      if (md->lcc[ecode[1]] != md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH);
+      ecode += 2;
+      }
     break;
 
     /* Match a single character repeatedly; different opcodes share code. */
@@ -6889,15 +7500,33 @@ for (;;)
       if (min * length > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
       ecode += length;
 
-      /* Handle multibyte character matching specially here. There is no
-      support for any kind of casing for multibyte characters. */
+      /* Handle multibyte character matching specially here. There is
+      support for caseless matching if UCP support is present. */
 
       if (length > 1)
         {
+        int oclength = 0;
+        uschar occhars[8];
+
+#ifdef SUPPORT_UCP
+        int othercase;
+        int chartype;
+        if ((ims & PCRE_CASELESS) != 0 &&
+             ucp_findchar(fc, &chartype, &othercase) >= 0 &&
+             othercase > 0)
+          oclength = ord2utf8(othercase, occhars);
+#endif  /* SUPPORT_UCP */
+
         for (i = 1; i <= min; i++)
           {
-          if (memcmp(eptr, charptr, length) != 0) RRETURN(MATCH_NOMATCH);
-          eptr += length;
+          if (memcmp(eptr, charptr, length) == 0) eptr += length;
+          /* Need braces because of following else */
+          else if (oclength == 0) { RRETURN(MATCH_NOMATCH); }
+          else
+            {
+            if (memcmp(eptr, occhars, oclength) != 0) RRETURN(MATCH_NOMATCH);
+            eptr += oclength;
+            }
           }
 
         if (min == max) continue;
@@ -6908,11 +7537,15 @@ for (;;)
             {
             RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
             if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-            if (fi >= max ||
-                eptr >= md->end_subject ||
-                memcmp(eptr, charptr, length) != 0)
-              RRETURN(MATCH_NOMATCH);
-            eptr += length;
+            if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+            if (memcmp(eptr, charptr, length) == 0) eptr += length;
+            /* Need braces because of following else */
+            else if (oclength == 0) { RRETURN(MATCH_NOMATCH); }
+            else
+              {
+              if (memcmp(eptr, occhars, oclength) != 0) RRETURN(MATCH_NOMATCH);
+              eptr += oclength;
+              }
             }
           /* Control never gets here */
           }
@@ -6921,10 +7554,14 @@ for (;;)
           pp = eptr;
           for (i = min; i < max; i++)
             {
-            if (eptr > md->end_subject - length ||
-                memcmp(eptr, charptr, length) != 0)
-              break;
-            eptr += length;
+            if (eptr > md->end_subject - length) break;
+            if (memcmp(eptr, charptr, length) == 0) eptr += length;
+            else if (oclength == 0) break;
+            else
+              {
+              if (memcmp(eptr, occhars, oclength) != 0) break;
+              eptr += oclength;
+              }
             }
           while (eptr >= pp)
            {
@@ -6942,7 +7579,7 @@ for (;;)
       value of fc will always be < 128. */
       }
     else
-#endif
+#endif  /* SUPPORT_UTF8 */
 
     /* When not in UTF-8 mode, load a single-byte character. */
       {
@@ -7088,9 +7725,9 @@ for (;;)
     max = rep_max[c];                 /* zero for max => infinity */
     if (max == 0) max = INT_MAX;
 
-    /* Common code for all repeated single-character (less than 255) matches.
-    We can give up quickly if there are fewer than the minimum number of
-    characters left in the subject. */
+    /* Common code for all repeated single-byte matches. We can give up quickly
+    if there are fewer than the minimum number of bytes left in the
+    subject. */
 
     REPEATNOTCHAR:
     if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
@@ -7358,16 +7995,77 @@ for (;;)
     REPEATTYPE:
     ctype = *ecode++;      /* Code for the character type */
 
+#ifdef SUPPORT_UCP
+    if (ctype == OP_PROP || ctype == OP_NOTPROP)
+      {
+      prop_fail_result = ctype == OP_NOTPROP;
+      prop_type = *ecode++;
+      if (prop_type >= 128)
+        {
+        prop_test_against = prop_type - 128;
+        prop_test_variable = &prop_category;
+        }
+      else
+        {
+        prop_test_against = prop_type;
+        prop_test_variable = &prop_chartype;
+        }
+      }
+    else prop_type = -1;
+#endif
+
     /* First, ensure the minimum number of matches are present. Use inline
     code for maximizing the speed, and do the type test once at the start
     (i.e. keep it out of the loop). Also we can test that there are at least
     the minimum number of bytes before we start. This isn't as effective in
     UTF-8 mode, but it does no harm. Separate the UTF-8 code completely as that
-    is tidier. */
+    is tidier. Also separate the UCP code, which can be the same for both UTF-8
+    and single-bytes. */
 
     if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
     if (min > 0)
       {
+#ifdef SUPPORT_UCP
+      if (prop_type > 0)
+        {
+        for (i = 1; i <= min; i++)
+          {
+          GETCHARINC(c, eptr);
+          prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+          if ((*prop_test_variable == prop_test_against) == prop_fail_result)
+            RRETURN(MATCH_NOMATCH);
+          }
+        }
+
+      /* Match extended Unicode sequences. We will get here only if the
+      support is in the binary; otherwise a compile-time error occurs. */
+
+      else if (ctype == OP_EXTUNI)
+        {
+        for (i = 1; i <= min; i++)
+          {
+          GETCHARINCTEST(c, eptr);
+          prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+          if (prop_category == ucp_M) RRETURN(MATCH_NOMATCH);
+          while (eptr < md->end_subject)
+            {
+            int len = 1;
+            if (!md->utf8) c = *eptr; else
+              {
+              GETCHARLEN(c, eptr, len);
+              }
+            prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+            if (prop_category != ucp_M) break;
+            eptr += len;
+            }
+          }
+        }
+
+      else
+#endif     /* SUPPORT_UCP */
+
+/* Handle all other cases when the coding is UTF-8 */
+
 #ifdef SUPPORT_UTF8
       if (md->utf8) switch(ctype)
         {
@@ -7390,7 +8088,7 @@ for (;;)
           {
           if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
           GETCHARINC(c, eptr);
-          if (c < 256 && (md->ctypes[c] & ctype_digit) != 0)
+          if (c < 128 && (md->ctypes[c] & ctype_digit) != 0)
             RRETURN(MATCH_NOMATCH);
           }
         break;
@@ -7444,11 +8142,16 @@ for (;;)
           /* No need to skip more bytes - we know it's a 1-byte character */
           }
         break;
-        }
+
+        default:
+        RRETURN(PCRE_ERROR_INTERNAL);
+        }  /* End switch(ctype) */
+
       else
-#endif
+#endif     /* SUPPORT_UTF8 */
 
-      /* Code for the non-UTF-8 case for minimum matching */
+      /* Code for the non-UTF-8 case for minimum matching of operators other
+      than OP_PROP and OP_NOTPROP. */
 
       switch(ctype)
         {
@@ -7496,6 +8199,9 @@ for (;;)
           if ((md->ctypes[*eptr++] & ctype_word) == 0)
             RRETURN(MATCH_NOMATCH);
         break;
+
+        default:
+        RRETURN(PCRE_ERROR_INTERNAL);
         }
       }
 
@@ -7504,10 +8210,56 @@ for (;;)
     if (min == max) continue;
 
     /* If minimizing, we have to test the rest of the pattern before each
-    subsequent match. Again, separate the UTF-8 case for speed. */
+    subsequent match. Again, separate the UTF-8 case for speed, and also
+    separate the UCP cases. */
 
     if (minimize)
       {
+#ifdef SUPPORT_UCP
+      if (prop_type > 0)
+        {
+        for (fi = min;; fi++)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+          GETCHARINC(c, eptr);
+          prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+          if ((*prop_test_variable == prop_test_against) == prop_fail_result)
+            RRETURN(MATCH_NOMATCH);
+          }
+        }
+
+      /* Match extended Unicode sequences. We will get here only if the
+      support is in the binary; otherwise a compile-time error occurs. */
+
+      else if (ctype == OP_EXTUNI)
+        {
+        for (fi = min;; fi++)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+          GETCHARINCTEST(c, eptr);
+          prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+          if (prop_category == ucp_M) RRETURN(MATCH_NOMATCH);
+          while (eptr < md->end_subject)
+            {
+            int len = 1;
+            if (!md->utf8) c = *eptr; else
+              {
+              GETCHARLEN(c, eptr, len);
+              }
+            prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+            if (prop_category != ucp_M) break;
+            eptr += len;
+            }
+          }
+        }
+
+      else
+#endif     /* SUPPORT_UCP */
+
 #ifdef SUPPORT_UTF8
       /* UTF-8 mode */
       if (md->utf8)
@@ -7557,6 +8309,9 @@ for (;;)
             if (c >= 256 && (md->ctypes[c] & ctype_word) == 0)
               RRETURN(MATCH_NOMATCH);
             break;
+
+            default:
+            RRETURN(PCRE_ERROR_INTERNAL);
             }
           }
         }
@@ -7602,6 +8357,9 @@ for (;;)
             case OP_WORDCHAR:
             if ((md->ctypes[c] & ctype_word) == 0) RRETURN(MATCH_NOMATCH);
             break;
+
+            default:
+            RRETURN(PCRE_ERROR_INTERNAL);
             }
           }
         }
@@ -7610,11 +8368,85 @@ for (;;)
 
     /* If maximizing it is worth using inline code for speed, doing the type
     test once at the start (i.e. keep it out of the loop). Again, keep the
-    UTF-8 stuff separate. */
+    UTF-8 and UCP stuff separate. */
 
     else
       {
-      pp = eptr;
+      pp = eptr;  /* Remember where we started */
+
+#ifdef SUPPORT_UCP
+      if (prop_type > 0)
+        {
+        for (i = min; i < max; i++)
+          {
+          int len = 1;
+          if (eptr >= md->end_subject) break;
+          GETCHARLEN(c, eptr, len);
+          prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+          if ((*prop_test_variable == prop_test_against) == prop_fail_result)
+            break;
+          eptr+= len;
+          }
+
+        /* eptr is now past the end of the maximum run */
+
+        for(;;)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          if (eptr-- == pp) break;        /* Stop if tried at original pos */
+          BACKCHAR(eptr);
+          }
+        }
+
+      /* Match extended Unicode sequences. We will get here only if the
+      support is in the binary; otherwise a compile-time error occurs. */
+
+      else if (ctype == OP_EXTUNI)
+        {
+        for (i = min; i < max; i++)
+          {
+          if (eptr >= md->end_subject) break;
+          GETCHARINCTEST(c, eptr);
+          prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+          if (prop_category == ucp_M) break;
+          while (eptr < md->end_subject)
+            {
+            int len = 1;
+            if (!md->utf8) c = *eptr; else
+              {
+              GETCHARLEN(c, eptr, len);
+              }
+            prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+            if (prop_category != ucp_M) break;
+            eptr += len;
+            }
+          }
+
+        /* eptr is now past the end of the maximum run */
+
+        for(;;)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          if (eptr-- == pp) break;        /* Stop if tried at original pos */
+          for (;;)                        /* Move back over one extended */
+            {
+            int len = 1;
+            BACKCHAR(eptr);
+            if (!md->utf8) c = *eptr; else
+              {
+              GETCHARLEN(c, eptr, len);
+              }
+            prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+            if (prop_category != ucp_M) break;
+            eptr--;
+            }
+          }
+        }
+
+      else
+#endif   /* SUPPORT_UCP */
 
 #ifdef SUPPORT_UTF8
       /* UTF-8 mode */
@@ -7745,6 +8577,9 @@ for (;;)
             eptr+= len;
             }
           break;
+
+          default:
+          RRETURN(PCRE_ERROR_INTERNAL);
           }
 
         /* eptr is now past the end of the maximum run */
@@ -7835,6 +8670,9 @@ for (;;)
             eptr++;
             }
           break;
+
+          default:
+          RRETURN(PCRE_ERROR_INTERNAL);
           }
 
         /* eptr is now past the end of the maximum run */
@@ -7889,7 +8727,6 @@ Undefine all the macros that were defined above to handle this. */
 #undef callpat
 #undef charptr
 #undef data
-#undef lastptr
 #undef next
 #undef pp
 #undef prev
@@ -7940,7 +8777,7 @@ portions of the string if it matches. Two elements in the vector are set for
 each substring: the offsets to the start and end of the substring.
 
 Arguments:
-  external_re     points to the compiled expression
+  argument_re     points to the compiled expression
   extra_data      points to extra data or is NULL
   subject         points to the subject string
   length          length of subject string (may contain binary zeros)
@@ -7956,7 +8793,7 @@ Returns:          > 0 => success; value is the number of elements filled in
 */
 
 EXPORT int
-pcre_exec(const pcre *external_re, const pcre_extra *extra_data,
+pcre_exec(const pcre *argument_re, const pcre_extra *extra_data,
   const char *subject, int length, int start_offset, int options, int *offsets,
   int offsetcount)
 {
@@ -7971,18 +8808,25 @@ BOOL startline;
 BOOL first_byte_caseless = FALSE;
 BOOL req_byte_caseless = FALSE;
 match_data match_block;
+const uschar *tables;
 const uschar *start_bits = NULL;
 const uschar *start_match = (const uschar *)subject + start_offset;
 const uschar *end_subject;
 const uschar *req_byte_ptr = start_match - 1;
+
+pcre_study_data internal_study;
 const pcre_study_data *study;
-const real_pcre *re = (const real_pcre *)external_re;
+
+real_pcre internal_re;
+const real_pcre *external_re = (const real_pcre *)argument_re;
+const real_pcre *re = external_re;
 
 /* Plausibility checks */
 
 if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION;
 if (re == NULL || subject == NULL ||
    (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL;
+if (offsetcount < 0) return PCRE_ERROR_BADCOUNT;
 
 /* Fish out the optional data from the extra_data structure, first setting
 the default values. */
@@ -7991,6 +8835,10 @@ study = NULL;
 match_block.match_limit = MATCH_LIMIT;
 match_block.callout_data = NULL;
 
+/* The table pointer is always in native byte order. */
+
+tables = external_re->tables;
+
 if (extra_data != NULL)
   {
   register unsigned int flags = extra_data->flags;
@@ -8000,17 +8848,37 @@ if (extra_data != NULL)
     match_block.match_limit = extra_data->match_limit;
   if ((flags & PCRE_EXTRA_CALLOUT_DATA) != 0)
     match_block.callout_data = extra_data->callout_data;
+  if ((flags & PCRE_EXTRA_TABLES) != 0) tables = extra_data->tables;
   }
 
-/* Now we have re supposedly pointing to the regex */
+/* If the exec call supplied NULL for tables, use the inbuilt ones. This
+is a feature that makes it possible to save compiled regex and re-use them
+in other programs later. */
+
+if (tables == NULL) tables = pcre_default_tables;
+
+/* Check that the first field in the block is the magic number. If it is not,
+test for a regex that was compiled on a host of opposite endianness. If this is
+the case, flipped values are put in internal_re and internal_study if there was
+study data too. */
+
+if (re->magic_number != MAGIC_NUMBER)
+  {
+  re = try_flipped(re, &internal_re, study, &internal_study);
+  if (re == NULL) return PCRE_ERROR_BADMAGIC;
+  if (study != NULL) study = &internal_study;
+  }
 
-if (re->magic_number != MAGIC_NUMBER) return PCRE_ERROR_BADMAGIC;
+/* Set up other data */
 
 anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
 startline = (re->options & PCRE_STARTLINE) != 0;
 
-match_block.start_code =
-  (const uschar *)re + sizeof(real_pcre) + re->name_count * re->name_entry_size;
+/* The code starts after the real_pcre block and the capture name table. */
+
+match_block.start_code = (const uschar *)external_re + re->name_table_offset +
+  re->name_count * re->name_entry_size;
+
 match_block.start_subject = (const uschar *)subject;
 match_block.start_offset = start_offset;
 match_block.end_subject = match_block.start_subject + length;
@@ -8022,11 +8890,19 @@ match_block.utf8 = (re->options & PCRE_UTF8) != 0;
 match_block.notbol = (options & PCRE_NOTBOL) != 0;
 match_block.noteol = (options & PCRE_NOTEOL) != 0;
 match_block.notempty = (options & PCRE_NOTEMPTY) != 0;
+match_block.partial = (options & PCRE_PARTIAL) != 0;
+match_block.hitend = FALSE;
 
 match_block.recursive = NULL;                   /* No recursion at top level */
 
-match_block.lcc = re->tables + lcc_offset;
-match_block.ctypes = re->tables + ctypes_offset;
+match_block.lcc = tables + lcc_offset;
+match_block.ctypes = tables + ctypes_offset;
+
+/* Partial matching is supported only for a restricted set of regexes at the
+moment. */
+
+if (match_block.partial && (re->options & PCRE_NOPARTIAL) != 0)
+  return PCRE_ERROR_BADPARTIAL;
 
 /* Check a UTF-8 string if required. Unfortunately there's no way of passing
 back the character offset. */
@@ -8055,7 +8931,7 @@ restoring at the exit of a group is easy. */
 ims = re->options & (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL);
 
 /* If the expression has got more back references than the offsets supplied can
-hold, we get a temporary bit of working store to use during the matching.
+hold, we get a temporary chunk of working store to use during the matching.
 Otherwise, we can use the vector supplied, rounding down its size to a multiple
 of 3. */
 
@@ -8121,7 +8997,7 @@ if ((re->options & PCRE_REQCHSET) != 0)
   {
   req_byte = re->req_byte & 255;
   req_byte_caseless = (re->req_byte & REQ_CASELESS) != 0;
-  req_byte2 = (re->tables + fcc_offset)[req_byte];  /* case flipped */
+  req_byte2 = (tables + fcc_offset)[req_byte];  /* case flipped */
   }
 
 /* Loop for handling unanchored repeated matching attempts; for anchored regexs
@@ -8129,12 +9005,14 @@ the loop runs just once. */
 
 do
   {
-  register int *iptr = match_block.offset_vector;
-  register int *iend = iptr + resetcount;
-
   /* Reset the maximum number of extractions we might see. */
 
-  while (iptr < iend) *iptr++ = -1;
+  if (match_block.offset_vector != NULL)
+    {
+    register int *iptr = match_block.offset_vector;
+    register int *iend = iptr + resetcount;
+    while (iptr < iend) *iptr++ = -1;
+    }
 
   /* Advance to a unique first char if possible */
 
@@ -8166,7 +9044,7 @@ do
     {
     while (start_match < end_subject)
       {
-      register int c = *start_match;
+      register unsigned int c = *start_match;
       if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++; else break;
       }
     }
@@ -8188,9 +9066,14 @@ do
   HOWEVER: when the subject string is very, very long, searching to its end can
   take a long time, and give bad performance on quite ordinary patterns. This
   showed up when somebody was matching /^C/ on a 32-megabyte string... so we
-  don't do this when the string is sufficiently long. */
+  don't do this when the string is sufficiently long.
 
-  if (req_byte >= 0 && end_subject - start_match < REQ_BYTE_MAX)
+  ALSO: this processing is disabled when partial matching is requested.
+  */
+
+  if (req_byte >= 0 &&
+      end_subject - start_match < REQ_BYTE_MAX &&
+      !match_block.partial)
     {
     register const uschar *p = start_match + ((first_byte >= 0)? 1 : 0);
 
@@ -8245,7 +9128,8 @@ do
     start_match++;
 #ifdef SUPPORT_UTF8
     if (match_block.utf8)
-      while((*start_match & 0xc0) == 0x80) start_match++;
+      while(start_match < end_subject && (*start_match & 0xc0) == 0x80)
+        start_match++;
 #endif
     continue;
     }
@@ -8296,9 +9180,16 @@ if (using_temporary_offsets)
   (pcre_free)(match_block.offset_vector);
   }
 
-DPRINTF((">>>> returning PCRE_ERROR_NOMATCH\n"));
-
-return PCRE_ERROR_NOMATCH;
+if (match_block.partial && match_block.hitend)
+  {
+  DPRINTF((">>>> returning PCRE_ERROR_PARTIAL\n"));
+  return PCRE_ERROR_PARTIAL;
+  }
+else
+  {
+  DPRINTF((">>>> returning PCRE_ERROR_NOMATCH\n"));
+  return PCRE_ERROR_NOMATCH;
+  }
 }
 
 /* End of pcre.c */
index 6582ca9e713a58e67071b6e356be5db36661f030..a2b78b376de30da02e2ca3470c5c85d4fc86ea47 100644 (file)
@@ -2,7 +2,39 @@
 *       Perl-Compatible Regular Expressions      *
 *************************************************/
 
-/* Copyright (c) 1997-2003 University of Cambridge */
+/* In its original form, this is the .in file that is transformed by
+"configure" into pcre.h.
+
+           Copyright (c) 1997-2004 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
 
 #ifndef _PCRE_H
 #define _PCRE_H
@@ -12,9 +44,9 @@ make changes to pcre.in. */
 
 #include "php_compat.h"
 
-#define PCRE_MAJOR          4
-#define PCRE_MINOR          5
-#define PCRE_DATE           01-December-2003
+#define PCRE_MAJOR          5
+#define PCRE_MINOR          0
+#define PCRE_DATE           13-Sep-2004
 
 /* Win32 uses DLL by default */
 
@@ -60,6 +92,8 @@ extern "C" {
 #define PCRE_UTF8               0x0800
 #define PCRE_NO_AUTO_CAPTURE    0x1000
 #define PCRE_NO_UTF8_CHECK      0x2000
+#define PCRE_AUTO_CALLOUT       0x4000
+#define PCRE_PARTIAL            0x8000
 
 /* Exec-time and get/set-time error codes */
 
@@ -74,6 +108,10 @@ extern "C" {
 #define PCRE_ERROR_CALLOUT         (-9)  /* Never used by PCRE itself */
 #define PCRE_ERROR_BADUTF8        (-10)
 #define PCRE_ERROR_BADUTF8_OFFSET (-11)
+#define PCRE_ERROR_PARTIAL        (-12)
+#define PCRE_ERROR_BADPARTIAL     (-13)
+#define PCRE_ERROR_INTERNAL       (-14)
+#define PCRE_ERROR_BADCOUNT       (-15)
 
 /* Request types for pcre_fullinfo() */
 
@@ -89,6 +127,7 @@ extern "C" {
 #define PCRE_INFO_NAMECOUNT          8
 #define PCRE_INFO_NAMETABLE          9
 #define PCRE_INFO_STUDYSIZE         10
+#define PCRE_INFO_DEFAULT_TABLES    11
 
 /* Request types for pcre_config() */
 
@@ -98,12 +137,14 @@ extern "C" {
 #define PCRE_CONFIG_POSIX_MALLOC_THRESHOLD  3
 #define PCRE_CONFIG_MATCH_LIMIT             4
 #define PCRE_CONFIG_STACKRECURSE            5
+#define PCRE_CONFIG_UNICODE_PROPERTIES      6
 
 /* Bit flags for the pcre_extra structure */
 
 #define PCRE_EXTRA_STUDY_DATA          0x0001
 #define PCRE_EXTRA_MATCH_LIMIT         0x0002
 #define PCRE_EXTRA_CALLOUT_DATA        0x0004
+#define PCRE_EXTRA_TABLES              0x0008
 
 /* Types */
 
@@ -111,13 +152,15 @@ struct real_pcre;                 /* declaration; the definition is private  */
 typedef struct real_pcre pcre;
 
 /* The structure for passing additional data to pcre_exec(). This is defined in
-such as way as to be extensible. */
+such as way as to be extensible. Always add new fields at the end, in order to
+remain compatible. */
 
 typedef struct pcre_extra {
   unsigned long int flags;        /* Bits for which fields are set */
   void *study_data;               /* Opaque data from pcre_study() */
   unsigned long int match_limit;  /* Maximum number of calls to match() */
   void *callout_data;             /* Data passed back in callouts */
+  const unsigned char *tables;    /* Pointer to character tables */
 } pcre_extra;
 
 /* The structure for passing out data via the pcre_callout_function. We use a
@@ -133,10 +176,13 @@ typedef struct pcre_callout_block {
   const char  *subject;           /* The subject being matched */
   int          subject_length;    /* The length of the subject */
   int          start_match;       /* Offset to start of this match attempt */
-  int          current_position;  /* Where we currently are */
+  int          current_position;  /* Where we currently are in the subject */
   int          capture_top;       /* Max current capture */
   int          capture_last;      /* Most recently closed capture */
   void        *callout_data;      /* Data passed in with the call */
+  /* ------------------- Added for Version 1 -------------------------- */
+  int          pattern_position;  /* Offset to next item in the pattern */
+  int          next_item_length;  /* Length of next item in the pattern */
   /* ------------------------------------------------------------------ */
 } pcre_callout_block;
 
diff --git a/ext/pcre/pcrelib/pcredemo.c b/ext/pcre/pcrelib/pcredemo.c
new file mode 100644 (file)
index 0000000..3817203
--- /dev/null
@@ -0,0 +1,324 @@
+/*************************************************
+*           PCRE DEMONSTRATION PROGRAM           *
+*************************************************/
+
+/* This is a demonstration program to illustrate the most straightforward ways
+of calling the PCRE regular expression library from a C program. See the
+pcresample documentation for a short discussion.
+
+Compile thuswise:
+  gcc -Wall pcredemo.c -I/usr/local/include -L/usr/local/lib \
+    -R/usr/local/lib -lpcre
+
+Replace "/usr/local/include" and "/usr/local/lib" with wherever the include and
+library files for PCRE are installed on your system. Only some operating
+systems (e.g. Solaris) use the -R option.
+*/
+
+
+#include <stdio.h>
+#include <string.h>
+#include <pcre.h>
+
+#define OVECCOUNT 30    /* should be a multiple of 3 */
+
+
+int main(int argc, char **argv)
+{
+pcre *re;
+const char *error;
+char *pattern;
+char *subject;
+unsigned char *name_table;
+int erroffset;
+int find_all;
+int namecount;
+int name_entry_size;
+int ovector[OVECCOUNT];
+int subject_length;
+int rc, i;
+
+
+/**************************************************************************
+* First, sort out the command line. There is only one possible option at  *
+* the moment, "-g" to request repeated matching to find all occurrences,  *
+* like Perl's /g option. We set the variable find_all to a non-zero value *
+* if the -g option is present. Apart from that, there must be exactly two *
+* arguments.                                                              *
+**************************************************************************/
+
+find_all = 0;
+for (i = 1; i < argc; i++)
+  {
+  if (strcmp(argv[i], "-g") == 0) find_all = 1;
+    else break;
+  }
+
+/* After the options, we require exactly two arguments, which are the pattern,
+and the subject string. */
+
+if (argc - i != 2)
+  {
+  printf("Two arguments required: a regex and a subject string\n");
+  return 1;
+  }
+
+pattern = argv[i];
+subject = argv[i+1];
+subject_length = (int)strlen(subject);
+
+
+/*************************************************************************
+* Now we are going to compile the regular expression pattern, and handle *
+* and errors that are detected.                                          *
+*************************************************************************/
+
+re = pcre_compile(
+  pattern,              /* the pattern */
+  0,                    /* default options */
+  &error,               /* for error message */
+  &erroffset,           /* for error offset */
+  NULL);                /* use default character tables */
+
+/* Compilation failed: print the error message and exit */
+
+if (re == NULL)
+  {
+  printf("PCRE compilation failed at offset %d: %s\n", erroffset, error);
+  return 1;
+  }
+
+
+/*************************************************************************
+* If the compilation succeeded, we call PCRE again, in order to do a     *
+* pattern match against the subject string. This does just ONE match. If *
+* further matching is needed, it will be done below.                     *
+*************************************************************************/
+
+rc = pcre_exec(
+  re,                   /* the compiled pattern */
+  NULL,                 /* no extra data - we didn't study the pattern */
+  subject,              /* the subject string */
+  subject_length,       /* the length of the subject */
+  0,                    /* start at offset 0 in the subject */
+  0,                    /* default options */
+  ovector,              /* output vector for substring information */
+  OVECCOUNT);           /* number of elements in the output vector */
+
+/* Matching failed: handle error cases */
+
+if (rc < 0)
+  {
+  switch(rc)
+    {
+    case PCRE_ERROR_NOMATCH: printf("No match\n"); break;
+    /*
+    Handle other special cases if you like
+    */
+    default: printf("Matching error %d\n", rc); break;
+    }
+  free(re);     /* Release memory used for the compiled pattern */
+  return 1;
+  }
+
+/* Match succeded */
+
+printf("\nMatch succeeded at offset %d\n", ovector[0]);
+
+
+/*************************************************************************
+* We have found the first match within the subject string. If the output *
+* vector wasn't big enough, set its size to the maximum. Then output any *
+* substrings that were captured.                                         *
+*************************************************************************/
+
+/* The output vector wasn't big enough */
+
+if (rc == 0)
+  {
+  rc = OVECCOUNT/3;
+  printf("ovector only has room for %d captured substrings\n", rc - 1);
+  }
+
+/* Show substrings stored in the output vector by number. Obviously, in a real
+application you might want to do things other than print them. */
+
+for (i = 0; i < rc; i++)
+  {
+  char *substring_start = subject + ovector[2*i];
+  int substring_length = ovector[2*i+1] - ovector[2*i];
+  printf("%2d: %.*s\n", i, substring_length, substring_start);
+  }
+
+
+/**************************************************************************
+* That concludes the basic part of this demonstration program. We have    *
+* compiled a pattern, and performed a single match. The code that follows *
+* first shows how to access named substrings, and then how to code for    *
+* repeated matches on the same subject.                                   *
+**************************************************************************/
+
+/* See if there are any named substrings, and if so, show them by name. First
+we have to extract the count of named parentheses from the pattern. */
+
+(void)pcre_fullinfo(
+  re,                   /* the compiled pattern */
+  NULL,                 /* no extra data - we didn't study the pattern */
+  PCRE_INFO_NAMECOUNT,  /* number of named substrings */
+  &namecount);          /* where to put the answer */
+
+if (namecount <= 0) printf("No named substrings\n"); else
+  {
+  unsigned char *tabptr;
+  printf("Named substrings\n");
+
+  /* Before we can access the substrings, we must extract the table for
+  translating names to numbers, and the size of each entry in the table. */
+
+  (void)pcre_fullinfo(
+    re,                       /* the compiled pattern */
+    NULL,                     /* no extra data - we didn't study the pattern */
+    PCRE_INFO_NAMETABLE,      /* address of the table */
+    &name_table);             /* where to put the answer */
+
+  (void)pcre_fullinfo(
+    re,                       /* the compiled pattern */
+    NULL,                     /* no extra data - we didn't study the pattern */
+    PCRE_INFO_NAMEENTRYSIZE,  /* size of each entry in the table */
+    &name_entry_size);        /* where to put the answer */
+
+  /* Now we can scan the table and, for each entry, print the number, the name,
+  and the substring itself. */
+
+  tabptr = name_table;
+  for (i = 0; i < namecount; i++)
+    {
+    int n = (tabptr[0] << 8) | tabptr[1];
+    printf("(%d) %*s: %.*s\n", n, name_entry_size - 3, tabptr + 2,
+      ovector[2*n+1] - ovector[2*n], subject + ovector[2*n]);
+    tabptr += name_entry_size;
+    }
+  }
+
+
+/*************************************************************************
+* If the "-g" option was given on the command line, we want to continue  *
+* to search for additional matches in the subject string, in a similar   *
+* way to the /g option in Perl. This turns out to be trickier than you   *
+* might think because of the possibility of matching an empty string.    *
+* What happens is as follows:                                            *
+*                                                                        *
+* If the previous match was NOT for an empty string, we can just start   *
+* the next match at the end of the previous one.                         *
+*                                                                        *
+* If the previous match WAS for an empty string, we can't do that, as it *
+* would lead to an infinite loop. Instead, a special call of pcre_exec() *
+* is made with the PCRE_NOTEMPTY and PCRE_ANCHORED flags set. The first  *
+* of these tells PCRE that an empty string is not a valid match; other   *
+* possibilities must be tried. The second flag restricts PCRE to one     *
+* match attempt at the initial string position. If this match succeeds,  *
+* an alternative to the empty string match has been found, and we can    *
+* proceed round the loop.                                                *
+*************************************************************************/
+
+if (!find_all)
+  {
+  free(re);   /* Release the memory used for the compiled pattern */
+  return 0;   /* Finish unless -g was given */
+  }
+
+/* Loop for second and subsequent matches */
+
+for (;;)
+  {
+  int options = 0;                 /* Normally no options */
+  int start_offset = ovector[1];   /* Start at end of previous match */
+
+  /* If the previous match was for an empty string, we are finished if we are
+  at the end of the subject. Otherwise, arrange to run another match at the
+  same point to see if a non-empty match can be found. */
+
+  if (ovector[0] == ovector[1])
+    {
+    if (ovector[0] == subject_length) break;
+    options = PCRE_NOTEMPTY | PCRE_ANCHORED;
+    }
+
+  /* Run the next matching operation */
+
+  rc = pcre_exec(
+    re,                   /* the compiled pattern */
+    NULL,                 /* no extra data - we didn't study the pattern */
+    subject,              /* the subject string */
+    subject_length,       /* the length of the subject */
+    start_offset,         /* starting offset in the subject */
+    options,              /* options */
+    ovector,              /* output vector for substring information */
+    OVECCOUNT);           /* number of elements in the output vector */
+
+  /* This time, a result of NOMATCH isn't an error. If the value in "options"
+  is zero, it just means we have found all possible matches, so the loop ends.
+  Otherwise, it means we have failed to find a non-empty-string match at a
+  point where there was a previous empty-string match. In this case, we do what
+  Perl does: advance the matching position by one, and continue. We do this by
+  setting the "end of previous match" offset, because that is picked up at the
+  top of the loop as the point at which to start again. */
+
+  if (rc == PCRE_ERROR_NOMATCH)
+    {
+    if (options == 0) break;
+    ovector[1] = start_offset + 1;
+    continue;    /* Go round the loop again */
+    }
+
+  /* Other matching errors are not recoverable. */
+
+  if (rc < 0)
+    {
+    printf("Matching error %d\n", rc);
+    free(re);    /* Release memory used for the compiled pattern */
+    return 1;
+    }
+
+  /* Match succeded */
+
+  printf("\nMatch succeeded again at offset %d\n", ovector[0]);
+
+  /* The match succeeded, but the output vector wasn't big enough. */
+
+  if (rc == 0)
+    {
+    rc = OVECCOUNT/3;
+    printf("ovector only has room for %d captured substrings\n", rc - 1);
+    }
+
+  /* As before, show substrings stored in the output vector by number, and then
+  also any named substrings. */
+
+  for (i = 0; i < rc; i++)
+    {
+    char *substring_start = subject + ovector[2*i];
+    int substring_length = ovector[2*i+1] - ovector[2*i];
+    printf("%2d: %.*s\n", i, substring_length, substring_start);
+    }
+
+  if (namecount <= 0) printf("No named substrings\n"); else
+    {
+    unsigned char *tabptr = name_table;
+    printf("Named substrings\n");
+    for (i = 0; i < namecount; i++)
+      {
+      int n = (tabptr[0] << 8) | tabptr[1];
+      printf("(%d) %*s: %.*s\n", n, name_entry_size - 3, tabptr + 2,
+        ovector[2*n+1] - ovector[2*n], subject + ovector[2*n]);
+      tabptr += name_entry_size;
+      }
+    }
+  }      /* End of loop to find second and subsequent matches */
+
+printf("\n");
+free(re);       /* Release memory used for the compiled pattern */
+return 0;
+}
+
+/* End of pcredemo.c */
index 7a06993d19509ef6f060fc055f8f73278449f6ff..21b2a9bbae5b6d6060808a1d6638a3fe1d84b4bd 100644 (file)
@@ -4,7 +4,38 @@
 
 /* This is a grep program that uses the PCRE regular expression library to do
 its pattern matching. On a Unix or Win32 system it can recurse into
-directories. */
+directories.
+
+           Copyright (c) 1997-2004 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
 
 #include <ctype.h>
 #include <stdio.h>
index 856c97b4ae5a9c8df8cb2ea1710b83b53b9beabe..cee0064f7d11d4b6764a95a8cb50a295f63b7fb8 100644 (file)
@@ -15,23 +15,31 @@ Written by: Philip Hazel <ph10@cam.ac.uk>
            Copyright (c) 1997-2003 University of Cambridge
 
 -----------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software 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.
-
-2. The origin of this software must not be misrepresented, either by
-   explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
-   General Purpose Licence (GPL), then the terms of that licence shall
-   supersede any condition above with which it is incompatible.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
 -----------------------------------------------------------------------------
 */
 
@@ -48,7 +56,7 @@ static const char *const estring[] = {
   ERR11, ERR12, ERR13, ERR14, ERR15, ERR16, ERR17, ERR18, ERR19, ERR20,
   ERR21, ERR22, ERR23, ERR24, ERR25, ERR26, ERR27, ERR29, ERR29, ERR30,
   ERR31, ERR32, ERR33, ERR34, ERR35, ERR36, ERR37, ERR38, ERR39, ERR40,
-  ERR41, ERR42, ERR43, ERR44 };
+  ERR41, ERR42, ERR43, ERR44, ERR45, ERR46, ERR47 };
 
 static const int eint[] = {
   REG_EESCAPE, /* "\\ at end of pattern" */
@@ -87,14 +95,17 @@ static const int eint[] = {
   REG_BADPAT,  /* "character value in \x{...} sequence is too large" */
   REG_BADPAT,  /* "invalid condition (?(0)" */
   REG_BADPAT,  /* "\\C not allowed in lookbehind assertion" */
-  REG_EESCAPE, /* "PCRE does not support \\L, \\l, \\N, \\P, \\p, \\U, \\u, or \\X" */
+  REG_EESCAPE, /* "PCRE does not support \\L, \\l, \\N, \\U, or \\u" */
   REG_BADPAT,  /* "number after (?C is > 255" */
   REG_BADPAT,  /* "closing ) for (?C expected" */
   REG_BADPAT,  /* "recursive call could loop indefinitely" */
   REG_BADPAT,  /* "unrecognized character after (?P" */
   REG_BADPAT,  /* "syntax error after (?P" */
   REG_BADPAT,  /* "two named groups have the same name" */
-  REG_BADPAT   /* "invalid UTF-8 string" */
+  REG_BADPAT,  /* "invalid UTF-8 string" */
+  REG_BADPAT,  /* "support for \\P, \\p, and \\X has not been compiled" */
+  REG_BADPAT,  /* "malformed \\P or \\p sequence" */
+  REG_BADPAT   /* "unknown property name after \\P or \\p" */
 };
 
 /* Table of texts corresponding to POSIX error codes */
index 2b97bf44f50496b24c5fc6784106eef29d0020cd..a8056bd77c8ea4f945af6b35d537b4cea42df35e 100644 (file)
@@ -2,14 +2,43 @@
 *       Perl-Compatible Regular Expressions      *
 *************************************************/
 
-/* Copyright (c) 1997-2003 University of Cambridge */
-
 #ifndef _PCREPOSIX_H
 #define _PCREPOSIX_H
 
 /* This is the header for the POSIX wrapper interface to the PCRE Perl-
 Compatible Regular Expression library. It defines the things POSIX says should
-be there. I hope. */
+be there. I hope.
+
+            Copyright (c) 1997-2004 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
 
 /* Have to include stdlib.h in order to ensure that size_t is defined. */
 
index bcc661b684964d657b28d024c7688d14b612c933..e531cc134eab4d0666389ca3b460e4fef74577e1 100644 (file)
@@ -4,7 +4,37 @@
 
 /* This program was hacked up as a tester for PCRE. I really should have
 written it more tidily in the first place. Will I ever learn? It has grown and
-been extended and consequently is now rather untidy in places. */
+been extended and consequently is now rather untidy in places.
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
 
 #include <ctype.h>
 #include <stdio.h>
@@ -12,6 +42,7 @@ been extended and consequently is now rather untidy in places. */
 #include <stdlib.h>
 #include <time.h>
 #include <locale.h>
+#include <errno.h>
 
 /* We need the internal info for displaying the results of pcre_study(). Also
 for getting the opcodes for showing compiled code. */
@@ -35,9 +66,10 @@ Makefile. */
 #endif
 #endif
 
-#define LOOPREPEAT 50000
+#define LOOPREPEAT 500000
 
 #define BUFFER_SIZE 30000
+#define PBUFFER_SIZE BUFFER_SIZE
 #define DBUFFER_SIZE BUFFER_SIZE
 
 
@@ -52,6 +84,8 @@ static int show_malloc;
 static int use_utf8;
 static size_t gotten_store;
 
+static uschar *pbuffer = NULL;
+
 
 static const int utf8_table1[] = {
   0x0000007f, 0x000007ff, 0x0000ffff, 0x001fffff, 0x03ffffff, 0x7fffffff};
@@ -71,10 +105,13 @@ static const int utf8_table3[] = {
 /* The code for doing this is held in a separate file that is also included in
 pcre.c when it is compiled with the debug switch. It defines a function called
 print_internals(), which uses a table of opcode lengths defined by the macro
-OP_LENGTHS, whose name must be OP_lengths. */
+OP_LENGTHS, whose name must be OP_lengths. It also uses a table that translates
+Unicode property names to numbers; this is kept in a separate file. */
 
 static uschar OP_lengths[] = { OP_LENGTHS };
 
+#include "ucp.h"
+#include "ucptypetable.c"
 #include "printint.c"
 
 
@@ -269,7 +306,7 @@ data is not zero. */
 static int callout(pcre_callout_block *cb)
 {
 FILE *f = (first_callout | callout_extra)? outfile : NULL;
-int i, pre_start, post_start;
+int i, pre_start, post_start, subject_length;
 
 if (callout_extra)
   {
@@ -300,16 +337,26 @@ pre_start = pchars((unsigned char *)cb->subject, cb->start_match, f);
 post_start = pchars((unsigned char *)(cb->subject + cb->start_match),
   cb->current_position - cb->start_match, f);
 
+subject_length = pchars((unsigned char *)cb->subject, cb->subject_length, NULL);
+
 (void)pchars((unsigned char *)(cb->subject + cb->current_position),
   cb->subject_length - cb->current_position, f);
 
 if (f != NULL) fprintf(f, "\n");
 
 /* Always print appropriate indicators, with callout number if not already
-shown */
+shown. For automatic callouts, show the pattern offset. */
 
-if (callout_extra) fprintf(outfile, "    ");
-  else fprintf(outfile, "%3d ", cb->callout_number);
+if (cb->callout_number == 255)
+  {
+  fprintf(outfile, "%+3d ", cb->pattern_position);
+  if (cb->pattern_position > 99) fprintf(outfile, "\n    ");
+  }
+else
+  {
+  if (callout_extra) fprintf(outfile, "    ");
+    else fprintf(outfile, "%3d ", cb->callout_number);
+  }
 
 for (i = 0; i < pre_start; i++) fprintf(outfile, " ");
 fprintf(outfile, "^");
@@ -320,6 +367,12 @@ if (post_start > 0)
   fprintf(outfile, "^");
   }
 
+for (i = 0; i < subject_length - pre_start - post_start + 4; i++)
+  fprintf(outfile, " ");
+
+fprintf(outfile, "%.*s", (cb->next_item_length == 0)? 1 : cb->next_item_length,
+  pbuffer + cb->pattern_position);
+
 fprintf(outfile, "\n");
 first_callout = 0;
 
@@ -395,6 +448,23 @@ if ((rc = pcre_fullinfo(re, study, option, ptr)) < 0)
 
 
 
+/*************************************************
+*         Byte flipping function                 *
+*************************************************/
+
+static long int
+byteflip(long int value, int n)
+{
+if (n == 2) return ((value & 0x00ff) << 8) | ((value & 0xff00) >> 8);
+return ((value & 0x000000ff) << 24) |
+       ((value & 0x0000ff00) <<  8) |
+       ((value & 0x00ff0000) >>  8) |
+       ((value & 0xff000000) >> 24);
+}
+
+
+
+
 /*************************************************
 *                Main Program                    *
 *************************************************/
@@ -429,8 +499,15 @@ when I am debugging. */
 
 buffer = (unsigned char *)malloc(BUFFER_SIZE);
 dbuffer = (unsigned char *)malloc(DBUFFER_SIZE);
+pbuffer = (unsigned char *)malloc(PBUFFER_SIZE);
+
+/* The outfile variable is static so that new_malloc can use it. The _setmode()
+stuff is some magic that I don't understand, but which apparently does good
+things in Windows. It's related to line terminations.  */
 
-/* Static so that new_malloc can use it. */
+#if defined(_WIN32) || defined(WIN32)
+_setmode( _fileno( stdout ), 0x8000 );
+#endif  /* defined(_WIN32) || defined(WIN32) */
 
 outfile = stdout;
 
@@ -462,6 +539,8 @@ while (argc > 1 && argv[op][0] == '-')
     printf("Compiled with\n");
     (void)pcre_config(PCRE_CONFIG_UTF8, &rc);
     printf("  %sUTF-8 support\n", rc? "" : "No ");
+    (void)pcre_config(PCRE_CONFIG_UNICODE_PROPERTIES, &rc);
+    printf("  %sUnicode properties support\n", rc? "" : "No ");
     (void)pcre_config(PCRE_CONFIG_NEWLINE, &rc);
     printf("  Newline character is %s\n", (rc == '\r')? "CR" : "LF");
     (void)pcre_config(PCRE_CONFIG_LINK_SIZE, &rc);
@@ -481,11 +560,12 @@ while (argc > 1 && argv[op][0] == '-')
     printf("  -C     show PCRE compile-time options and exit\n");
     printf("  -d     debug: show compiled code; implies -i\n"
            "  -i     show information about compiled pattern\n"
+           "  -m     output memory used information\n"
            "  -o <n> set size of offsets vector to <n>\n");
 #if !defined NOPOSIX
     printf("  -p     use POSIX interface\n");
 #endif
-    printf("  -s     output store information\n"
+    printf("  -s     output store (memory) used information\n"
            "  -t     time compilation and execution\n");
     return 1;
     }
@@ -508,7 +588,7 @@ if (offsets == NULL)
 
 if (argc > 1)
   {
-  infile = fopen(argv[op], "r");
+  infile = fopen(argv[op], "rb");
   if (infile == NULL)
     {
     printf("** Failed to open %s\n", argv[op]);
@@ -518,7 +598,7 @@ if (argc > 1)
 
 if (argc > 2)
   {
-  outfile = fopen(argv[op+1], "w");
+  outfile = fopen(argv[op+1], "wb");
   if (outfile == NULL)
     {
     printf("** Failed to open %s\n", argv[op+1]);
@@ -551,13 +631,17 @@ while (!done)
 
   const char *error;
   unsigned char *p, *pp, *ppp;
+  unsigned char *to_file = NULL;
   const unsigned char *tables = NULL;
+  unsigned long int true_size, true_study_size = 0;
+  size_t size, regex_gotten_store;
   int do_study = 0;
   int do_debug = debug;
   int do_G = 0;
   int do_g = 0;
   int do_showinfo = showinfo;
   int do_showrest = 0;
+  int do_flip = 0;
   int erroroffset, len, delimiter;
 
   use_utf8 = 0;
@@ -571,8 +655,93 @@ while (!done)
   while (isspace(*p)) p++;
   if (*p == 0) continue;
 
-  /* Get the delimiter and seek the end of the pattern; if is isn't
-  complete, read more. */
+  /* See if the pattern is to be loaded pre-compiled from a file. */
+
+  if (*p == '<' && strchr((char *)(p+1), '<') == NULL)
+    {
+    unsigned long int magic;
+    uschar sbuf[8];
+    FILE *f;
+
+    p++;
+    pp = p + (int)strlen((char *)p);
+    while (isspace(pp[-1])) pp--;
+    *pp = 0;
+
+    f = fopen((char *)p, "rb");
+    if (f == NULL)
+      {
+      fprintf(outfile, "Failed to open %s: %s\n", p, strerror(errno));
+      continue;
+      }
+
+    if (fread(sbuf, 1, 8, f) != 8) goto FAIL_READ;
+
+    true_size =
+      (sbuf[0] << 24) | (sbuf[1] << 16) | (sbuf[2] << 8) | sbuf[3];
+    true_study_size =
+      (sbuf[4] << 24) | (sbuf[5] << 16) | (sbuf[6] << 8) | sbuf[7];
+
+    re = (real_pcre *)new_malloc(true_size);
+    regex_gotten_store = gotten_store;
+
+    if (fread(re, 1, true_size, f) != true_size) goto FAIL_READ;
+
+    magic = ((real_pcre *)re)->magic_number;
+    if (magic != MAGIC_NUMBER)
+      {
+      if (byteflip(magic, sizeof(magic)) == MAGIC_NUMBER)
+        {
+        do_flip = 1;
+        }
+      else
+        {
+        fprintf(outfile, "Data in %s is not a compiled PCRE regex\n", p);
+        fclose(f);
+        continue;
+        }
+      }
+
+    fprintf(outfile, "Compiled regex%s loaded from %s\n",
+      do_flip? " (byte-inverted)" : "", p);
+
+    /* Need to know if UTF-8 for printing data strings */
+
+    new_info(re, NULL, PCRE_INFO_OPTIONS, &options);
+    use_utf8 = (options & PCRE_UTF8) != 0;
+
+    /* Now see if there is any following study data */
+
+    if (true_study_size != 0)
+      {
+      pcre_study_data *psd;
+
+      extra = (pcre_extra *)new_malloc(sizeof(pcre_extra) + true_study_size);
+      extra->flags = PCRE_EXTRA_STUDY_DATA;
+
+      psd = (pcre_study_data *)(((char *)extra) + sizeof(pcre_extra));
+      extra->study_data = psd;
+
+      if (fread(psd, 1, true_study_size, f) != true_study_size)
+        {
+        FAIL_READ:
+        fprintf(outfile, "Failed to read data from %s\n", p);
+        if (extra != NULL) new_free(extra);
+        if (re != NULL) new_free(re);
+        fclose(f);
+        continue;
+        }
+      fprintf(outfile, "Study data loaded from %s\n", p);
+      do_study = 1;     /* To get the data output if requested */
+      }
+    else fprintf(outfile, "No study data\n");
+
+    fclose(f);
+    goto SHOW_INFO;
+    }
+
+  /* In-line pattern (the usual case). Get the delimiter and seek the end of
+  the pattern; if is isn't complete, read more. */
 
   delimiter = *p++;
 
@@ -617,9 +786,11 @@ while (!done)
 
   if (pp[1] == '\\') *pp++ = '\\';
 
-  /* Terminate the pattern at the delimiter */
+  /* Terminate the pattern at the delimiter, and save a copy of the pattern
+  for callouts. */
 
   *pp++ = 0;
+  strcpy((char *)pbuffer, (char *)p);
 
   /* Look for options after final delimiter */
 
@@ -639,8 +810,10 @@ while (!done)
 
       case '+': do_showrest = 1; break;
       case 'A': options |= PCRE_ANCHORED; break;
+      case 'C': options |= PCRE_AUTO_CALLOUT; break;
       case 'D': do_debug = do_showinfo = 1; break;
       case 'E': options |= PCRE_DOLLAR_ENDONLY; break;
+      case 'F': do_flip = 1; break;
       case 'G': do_G = 1; break;
       case 'I': do_showinfo = 1; break;
       case 'M': log_store = 1; break;
@@ -669,7 +842,15 @@ while (!done)
       pp = ppp;
       break;
 
+      case '>':
+      to_file = pp;
+      while (*pp != 0) pp++;
+      while (isspace(pp[-1])) pp--;
+      *pp = 0;
+      break;
+
       case '\n': case ' ': break;
+
       default:
       fprintf(outfile, "** Unknown option '%c'\n", pp[-1]);
       goto SKIP_DATA;
@@ -685,6 +866,7 @@ while (!done)
     {
     int rc;
     int cflags = 0;
+
     if ((options & PCRE_CASELESS) != 0) cflags |= REG_ICASE;
     if ((options & PCRE_MULTILINE) != 0) cflags |= REG_NEWLINE;
     rc = regcomp(&preg, (char *)p, cflags);
@@ -759,14 +941,77 @@ while (!done)
               sizeof(real_pcre) -
               ((real_pcre *)re)->name_count * ((real_pcre *)re)->name_entry_size));
 
+    /* Extract the size for possible writing before possibly flipping it,
+    and remember the store that was got. */
+
+    true_size = ((real_pcre *)re)->size;
+    regex_gotten_store = gotten_store;
+
+    /* If /S was present, study the regexp to generate additional info to
+    help with the matching. */
+
+    if (do_study)
+      {
+      if (timeit)
+        {
+        register int i;
+        clock_t time_taken;
+        clock_t start_time = clock();
+        for (i = 0; i < LOOPREPEAT; i++)
+          extra = pcre_study(re, study_options, &error);
+        time_taken = clock() - start_time;
+        if (extra != NULL) free(extra);
+        fprintf(outfile, "  Study time %.3f milliseconds\n",
+          (((double)time_taken * 1000.0) / (double)LOOPREPEAT) /
+            (double)CLOCKS_PER_SEC);
+        }
+      extra = pcre_study(re, study_options, &error);
+      if (error != NULL)
+        fprintf(outfile, "Failed to study: %s\n", error);
+      else if (extra != NULL)
+        true_study_size = ((pcre_study_data *)(extra->study_data))->size;
+      }
+
+    /* If the 'F' option was present, we flip the bytes of all the integer
+    fields in the regex data block and the study block. This is to make it
+    possible to test PCRE's handling of byte-flipped patterns, e.g. those
+    compiled on a different architecture. */
+
+    if (do_flip)
+      {
+      real_pcre *rre = (real_pcre *)re;
+      rre->magic_number = byteflip(rre->magic_number, sizeof(rre->magic_number));
+      rre->size = byteflip(rre->size, sizeof(rre->size));
+      rre->options = byteflip(rre->options, sizeof(rre->options));
+      rre->top_bracket = byteflip(rre->top_bracket, sizeof(rre->top_bracket));
+      rre->top_backref = byteflip(rre->top_backref, sizeof(rre->top_backref));
+      rre->first_byte = byteflip(rre->first_byte, sizeof(rre->first_byte));
+      rre->req_byte = byteflip(rre->req_byte, sizeof(rre->req_byte));
+      rre->name_table_offset = byteflip(rre->name_table_offset,
+        sizeof(rre->name_table_offset));
+      rre->name_entry_size = byteflip(rre->name_entry_size,
+        sizeof(rre->name_entry_size));
+      rre->name_count = byteflip(rre->name_count, sizeof(rre->name_count));
+
+      if (extra != NULL)
+        {
+        pcre_study_data *rsd = (pcre_study_data *)(extra->study_data);
+        rsd->size = byteflip(rsd->size, sizeof(rsd->size));
+        rsd->options = byteflip(rsd->options, sizeof(rsd->options));
+        }
+      }
+
+    /* Extract information from the compiled data if required */
+
+    SHOW_INFO:
+
     if (do_showinfo)
       {
-      unsigned long int get_options;
+      unsigned long int get_options, all_options;
       int old_first_char, old_options, old_count;
       int count, backrefmax, first_char, need_char;
       int nameentrysize, namecount;
       const uschar *nametable;
-      size_t size;
 
       if (do_debug)
         {
@@ -802,9 +1047,9 @@ while (!done)
             get_options, old_options);
         }
 
-      if (size != gotten_store) fprintf(outfile,
+      if (size != regex_gotten_store) fprintf(outfile,
         "Size disagreement: pcre_fullinfo=%d call to malloc for %d\n",
-        size, gotten_store);
+        size, regex_gotten_store);
 
       fprintf(outfile, "Capturing subpattern count = %d\n", count);
       if (backrefmax > 0)
@@ -822,6 +1067,18 @@ while (!done)
           }
         }
 
+      /* The NOPARTIAL bit is a private bit in the options, so we have
+      to fish it out via out back door */
+
+      all_options = ((real_pcre *)re)->options;
+      if (do_flip)
+        {
+        all_options = byteflip(all_options, sizeof(all_options));
+        }
+
+      if ((all_options & PCRE_NOPARTIAL) != 0)
+        fprintf(outfile, "Partial matching not supported\n");
+
       if (get_options == 0) fprintf(outfile, "No options\n");
         else fprintf(outfile, "Options:%s%s%s%s%s%s%s%s%s%s\n",
           ((get_options & PCRE_ANCHORED) != 0)? " anchored" : "",
@@ -871,77 +1128,103 @@ while (!done)
         else
           fprintf(outfile, "Need char = %d%s\n", ch, caseless);
         }
-      }
-
-    /* If /S was present, study the regexp to generate additional info to
-    help with the matching. */
-
-    if (do_study)
-      {
-      if (timeit)
-        {
-        register int i;
-        clock_t time_taken;
-        clock_t start_time = clock();
-        for (i = 0; i < LOOPREPEAT; i++)
-          extra = pcre_study(re, study_options, &error);
-        time_taken = clock() - start_time;
-        if (extra != NULL) free(extra);
-        fprintf(outfile, "  Study time %.3f milliseconds\n",
-          (((double)time_taken * 1000.0) / (double)LOOPREPEAT) /
-            (double)CLOCKS_PER_SEC);
-        }
-
-      extra = pcre_study(re, study_options, &error);
-      if (error != NULL)
-        fprintf(outfile, "Failed to study: %s\n", error);
-      else if (extra == NULL)
-        fprintf(outfile, "Study returned NULL\n");
 
       /* Don't output study size; at present it is in any case a fixed
       value, but it varies, depending on the computer architecture, and
-      so messes up the test suite. */
+      so messes up the test suite. (And with the /F option, it might be
+      flipped.) */
 
-      else if (do_showinfo)
+      if (do_study)
         {
-        size_t size;
-        uschar *start_bits = NULL;
-        new_info(re, extra, PCRE_INFO_STUDYSIZE, &size);
-        new_info(re, extra, PCRE_INFO_FIRSTTABLE, &start_bits);
-        /* fprintf(outfile, "Study size = %d\n", size); */
-        if (start_bits == NULL)
-          fprintf(outfile, "No starting character set\n");
+        if (extra == NULL)
+          fprintf(outfile, "Study returned NULL\n");
         else
           {
-          int i;
-          int c = 24;
-          fprintf(outfile, "Starting character set: ");
-          for (i = 0; i < 256; i++)
+          uschar *start_bits = NULL;
+          new_info(re, extra, PCRE_INFO_FIRSTTABLE, &start_bits);
+
+          if (start_bits == NULL)
+            fprintf(outfile, "No starting byte set\n");
+          else
             {
-            if ((start_bits[i/8] & (1<<(i%8))) != 0)
+            int i;
+            int c = 24;
+            fprintf(outfile, "Starting byte set: ");
+            for (i = 0; i < 256; i++)
               {
-              if (c > 75)
+              if ((start_bits[i/8] & (1<<(i&7))) != 0)
                 {
-                fprintf(outfile, "\n  ");
-                c = 2;
-                }
-              if (isprint(i) && i != ' ')
-                {
-                fprintf(outfile, "%c ", i);
-                c += 2;
-                }
-              else
-                {
-                fprintf(outfile, "\\x%02x ", i);
-                c += 5;
+                if (c > 75)
+                  {
+                  fprintf(outfile, "\n  ");
+                  c = 2;
+                  }
+                if (isprint(i) && i != ' ')
+                  {
+                  fprintf(outfile, "%c ", i);
+                  c += 2;
+                  }
+                else
+                  {
+                  fprintf(outfile, "\\x%02x ", i);
+                  c += 5;
+                  }
                 }
               }
+            fprintf(outfile, "\n");
             }
-          fprintf(outfile, "\n");
           }
         }
       }
-    }
+
+    /* If the '>' option was present, we write out the regex to a file, and
+    that is all. The first 8 bytes of the file are the regex length and then
+    the study length, in big-endian order. */
+
+    if (to_file != NULL)
+      {
+      FILE *f = fopen((char *)to_file, "wb");
+      if (f == NULL)
+        {
+        fprintf(outfile, "Unable to open %s: %s\n", to_file, strerror(errno));
+        }
+      else
+        {
+        uschar sbuf[8];
+        sbuf[0] = (true_size >> 24)  & 255;
+        sbuf[1] = (true_size >> 16)  & 255;
+        sbuf[2] = (true_size >>  8)  & 255;
+        sbuf[3] = (true_size)  & 255;
+
+        sbuf[4] = (true_study_size >> 24)  & 255;
+        sbuf[5] = (true_study_size >> 16)  & 255;
+        sbuf[6] = (true_study_size >>  8)  & 255;
+        sbuf[7] = (true_study_size)  & 255;
+
+        if (fwrite(sbuf, 1, 8, f) < 8 ||
+            fwrite(re, 1, true_size, f) < true_size)
+          {
+          fprintf(outfile, "Write error on %s: %s\n", to_file, strerror(errno));
+          }
+        else
+          {
+          fprintf(outfile, "Compiled regex written to %s\n", to_file);
+          if (extra != NULL)
+            {
+            if (fwrite(extra->study_data, 1, true_study_size, f) <
+                true_study_size)
+              {
+              fprintf(outfile, "Write error on %s: %s\n", to_file,
+                strerror(errno));
+              }
+            else fprintf(outfile, "Study data written to %s\n", to_file);
+            }
+          }
+        fclose(f);
+        }
+      continue;  /* With next regex */
+      }
+    }        /* End of non-POSIX compile */
 
   /* Read data lines and test them */
 
@@ -1045,10 +1328,14 @@ while (!done)
           }
         break;
 
-        case 0:   /* Allows for an empty line */
+        case 0:   /* \ followed by EOF allows for an empty line */
         p--;
         continue;
 
+        case '>':
+        while(isdigit(*p)) start_offset = start_offset * 10 + *p++ - '0';
+        continue;
+
         case 'A':  /* Option setting */
         options |= PCRE_ANCHORED;
         continue;
@@ -1159,6 +1446,10 @@ while (!done)
         if (n == 0) use_offsets = NULL;   /* Ensures it can't write to it */
         continue;
 
+        case 'P':
+        options |= PCRE_PARTIAL;
+        continue;
+
         case 'S':
         show_malloc = 1;
         continue;
@@ -1269,7 +1560,8 @@ while (!done)
             min = mid;
             mid = (mid == max - 1)? max : (max > 0)? (min + max)/2 : mid*2;
             }
-          else if (count >= 0 || count == PCRE_ERROR_NOMATCH)
+          else if (count >= 0 || count == PCRE_ERROR_NOMATCH ||
+                                 count == PCRE_ERROR_PARTIAL)
             {
             if (mid == min + 1)
               {
@@ -1305,8 +1597,11 @@ while (!done)
       /* The normal case is just to do the match once, with the default
       value of match_limit. */
 
-      else count = pcre_exec(re, extra, (char *)bptr, len,
-        start_offset, options | g_notempty, use_offsets, use_size_offsets);
+      else
+        {
+        count = pcre_exec(re, extra, (char *)bptr, len,
+          start_offset, options | g_notempty, use_offsets, use_size_offsets);
+        }
 
       if (count == 0)
         {
@@ -1393,6 +1688,14 @@ while (!done)
           }
         }
 
+      /* There was a partial match */
+
+      else if (count == PCRE_ERROR_PARTIAL)
+        {
+        fprintf(outfile, "Partial match\n");
+        break;  /* Out of the /g loop */
+        }
+
       /* Failed to match. If this is a /g or /G loop and we previously set
       g_notempty after a null match, this is not necessarily the end.
       We want to advance the start offset, and continue. In the case of UTF-8
index a40f721656158b1a938f054b1f8736d6bc760aa2..b0e3b783717e7f23d496394b845f520359dfccae 100644 (file)
@@ -12,23 +12,31 @@ Written by: Philip Hazel <ph10@cam.ac.uk>
            Copyright (c) 1997-2003 University of Cambridge
 
 -----------------------------------------------------------------------------
-Permission is granted to anyone to use this software for any purpose on any
-computer system, and to redistribute it freely, subject to the following
-restrictions:
-
-1. This software 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.
-
-2. The origin of this software must not be misrepresented, either by
-   explicit claim or by omission.
-
-3. Altered versions must be plainly marked as such, and must not be
-   misrepresented as being the original software.
-
-4. If PCRE is embedded in any software that is released under the GNU
-   General Purpose Licence (GPL), then the terms of that licence shall
-   supersede any condition above with which it is incompatible.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
 -----------------------------------------------------------------------------
 */
 
@@ -57,7 +65,7 @@ Returns:        nothing
 */
 
 static void
-set_bit(uschar *start_bits, int c, BOOL caseless, compile_data *cd)
+set_bit(uschar *start_bits, unsigned int c, BOOL caseless, compile_data *cd)
 {
 start_bits[c/8] |= (1 << (c&7));
 if (caseless && (cd->ctypes[c] & ctype_letter) != 0)
@@ -123,7 +131,7 @@ do
       /* Skip over callout */
 
       case OP_CALLOUT:
-      tcode += 2;
+      tcode += 2 + 2*LINK_SIZE;
       break;
 
       /* Skip over extended extraction bracket number */
@@ -186,11 +194,10 @@ do
       /* At least one single char sets the bit and stops */
 
       case OP_EXACT:       /* Fall through */
-      tcode++;
-
-      case OP_CHARS:       /* Fall through */
-      tcode++;
+      tcode += 2;
 
+      case OP_CHAR:
+      case OP_CHARNC:
       case OP_PLUS:
       case OP_MINPLUS:
       set_bit(start_bits, tcode[1], caseless, cd);
@@ -403,8 +410,9 @@ pcre_study(const pcre *external_re, int options, const char **errorptr)
 uschar start_bits[32];
 pcre_extra *extra;
 pcre_study_data *study;
+const uschar *tables;
 const real_pcre *re = (const real_pcre *)external_re;
-uschar *code = (uschar *)re + sizeof(real_pcre) +
+uschar *code = (uschar *)re + re->name_table_offset +
   (re->name_count * re->name_entry_size);
 compile_data compile_block;
 
@@ -429,12 +437,16 @@ at present. */
 if ((re->options & (PCRE_ANCHORED|PCRE_FIRSTSET|PCRE_STARTLINE)) != 0)
   return NULL;
 
-/* Set the character tables in the block which is passed around */
+/* Set the character tables in the block that is passed around */
+
+tables = re->tables;
+if (tables == NULL)
+  (void)pcre_fullinfo(external_re, NULL, PCRE_INFO_DEFAULT_TABLES, &tables);
 
-compile_block.lcc = re->tables + lcc_offset;
-compile_block.fcc = re->tables + fcc_offset;
-compile_block.cbits = re->tables + cbits_offset;
-compile_block.ctypes = re->tables + ctypes_offset;
+compile_block.lcc = tables + lcc_offset;
+compile_block.fcc = tables + fcc_offset;
+compile_block.cbits = tables + cbits_offset;
+compile_block.ctypes = tables + ctypes_offset;
 
 /* See if we can find a fixed set of initial characters for the pattern. */
 
diff --git a/ext/pcre/pcrelib/ucp.c b/ext/pcre/pcrelib/ucp.c
new file mode 100644 (file)
index 0000000..3d69653
--- /dev/null
@@ -0,0 +1,151 @@
+/*************************************************
+*     libucp - Unicode Property Table handler    *
+*************************************************/
+
+/* This function provides a fast way of obtaining the basic Unicode properties
+of a character, using a compact binary tree that occupies less than 100K bytes.
+
+           Copyright (c) 2004 University of Cambridge
+
+-------------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-------------------------------------------------------------------------------
+*/
+
+
+#include "ucp.h"               /* Exported interface */
+#include "ucpinternal.h"       /* Internal table details */
+#include "ucptable.c"          /* The table itself */
+
+
+
+/*************************************************
+*         Search table and return data           *
+*************************************************/
+
+/* Two values are returned: the category is ucp_C, ucp_L, etc. The detailed
+character type is ucp_Lu, ucp_Nd, etc.
+
+Arguments:
+  c           the character value
+  type_ptr    the detailed character type is returned here
+  case_ptr    for letters, the opposite case is returned here, if there
+                is one, else zero
+
+Returns:      the character type category or -1 if not found
+*/
+
+static int
+ucp_findchar(const int c, int *type_ptr, int *case_ptr)
+{
+cnode *node = ucp_table;
+register int cc = c;
+int case_offset;
+
+for (;;)
+  {
+  register int d = node->f1 | ((node->f0 & f0_chhmask) << 16);
+  if (cc == d) break;
+  if (cc < d)
+    {
+    if ((node->f0 & f0_leftexists) == 0) return -1;
+    node ++;
+    }
+  else
+    {
+    register int roffset = (node->f2 & f2_rightmask) >> f2_rightshift;
+    if (roffset == 0) return -1;
+    node += 1 << (roffset - 1);
+    }
+  }
+
+switch ((*type_ptr = ((node->f0 & f0_typemask) >> f0_typeshift)))
+  {
+  case ucp_Cc:
+  case ucp_Cf:
+  case ucp_Cn:
+  case ucp_Co:
+  case ucp_Cs:
+  return ucp_C;
+  break;
+
+  case ucp_Ll:
+  case ucp_Lu:
+  case_offset = node->f2 & f2_casemask;
+  if ((case_offset & 0x0100) != 0) case_offset |= 0xfffff000;
+  *case_ptr = (case_offset == 0)? 0 : cc + case_offset;
+  return ucp_L;
+
+  case ucp_Lm:
+  case ucp_Lo:
+  case ucp_Lt:
+  *case_ptr = 0;
+  return ucp_L;
+  break;
+
+  case ucp_Mc:
+  case ucp_Me:
+  case ucp_Mn:
+  return ucp_M;
+  break;
+
+  case ucp_Nd:
+  case ucp_Nl:
+  case ucp_No:
+  return ucp_N;
+  break;
+
+  case ucp_Pc:
+  case ucp_Pd:
+  case ucp_Pe:
+  case ucp_Pf:
+  case ucp_Pi:
+  case ucp_Ps:
+  case ucp_Po:
+  return ucp_P;
+  break;
+
+  case ucp_Sc:
+  case ucp_Sk:
+  case ucp_Sm:
+  case ucp_So:
+  return ucp_S;
+  break;
+
+  case ucp_Zl:
+  case ucp_Zp:
+  case ucp_Zs:
+  return ucp_Z;
+  break;
+
+  default:         /* "Should never happen" */
+  return -1;
+  break;
+  }
+}
+
+/* End of ucp.c */
diff --git a/ext/pcre/pcrelib/ucp.h b/ext/pcre/pcrelib/ucp.h
new file mode 100644 (file)
index 0000000..c013978
--- /dev/null
@@ -0,0 +1,58 @@
+/*************************************************
+*     libucp - Unicode Property Table handler    *
+*************************************************/
+
+/* These are the character categories that are returned by ucp_findchar */
+
+enum {
+  ucp_C,     /* Other */
+  ucp_L,     /* Letter */
+  ucp_M,     /* Mark */
+  ucp_N,     /* Number */
+  ucp_P,     /* Punctuation */
+  ucp_S,     /* Symbol */
+  ucp_Z      /* Separator */
+};
+
+/* These are the detailed character types that are returned by ucp_findchar */
+
+enum {
+  ucp_Cc,    /* Control */
+  ucp_Cf,    /* Format */
+  ucp_Cn,    /* Unassigned */
+  ucp_Co,    /* Private use */
+  ucp_Cs,    /* Surrogate */
+  ucp_Ll,    /* Lower case letter */
+  ucp_Lm,    /* Modifier letter */
+  ucp_Lo,    /* Other letter */
+  ucp_Lt,    /* Title case letter */
+  ucp_Lu,    /* Upper case letter */
+  ucp_Mc,    /* Spacing mark */
+  ucp_Me,    /* Enclosing mark */
+  ucp_Mn,    /* Non-spacing mark */
+  ucp_Nd,    /* Decimal number */
+  ucp_Nl,    /* Letter number */
+  ucp_No,    /* Other number */
+  ucp_Pc,    /* Connector punctuation */
+  ucp_Pd,    /* Dash punctuation */
+  ucp_Pe,    /* Close punctuation */
+  ucp_Pf,    /* Final punctuation */
+  ucp_Pi,    /* Initial punctuation */
+  ucp_Po,    /* Other punctuation */
+  ucp_Ps,    /* Open punctuation */
+  ucp_Sc,    /* Currency symbol */
+  ucp_Sk,    /* Modifier symbol */
+  ucp_Sm,    /* Mathematical symbol */
+  ucp_So,    /* Other symbol */
+  ucp_Zl,    /* Line separator */
+  ucp_Zp,    /* Paragraph separator */
+  ucp_Zs     /* Space separator */
+};
+
+/* For use in PCRE we make this function static so that there is no conflict if
+PCRE is linked with an application that makes use of an external version -
+assuming an external version is ever released... */
+
+static int ucp_findchar(const int, int *, int *);
+
+/* End of ucp.h */
diff --git a/ext/pcre/pcrelib/ucpinternal.h b/ext/pcre/pcrelib/ucpinternal.h
new file mode 100644 (file)
index 0000000..faefb03
--- /dev/null
@@ -0,0 +1,91 @@
+/*************************************************
+*     libucp - Unicode Property Table handler    *
+*************************************************/
+
+/* Internal header file defining the layout of compact nodes in the tree. */
+
+typedef struct cnode {
+  unsigned short int f0;
+  unsigned short int f1;
+  unsigned short int f2;
+} cnode;
+
+/* Things for the f0 field */
+
+#define f0_leftexists   0x8000    /* Left child exists */
+#define f0_typemask     0x3f00    /* Type bits */
+#define f0_typeshift         8    /* Type shift */
+#define f0_chhmask      0x00ff    /* Character high bits */
+
+/* Things for the f2 field */
+
+#define f2_rightmask    0xf000    /* Mask for right offset bits */
+#define f2_rightshift       12    /* Shift for right offset */
+#define f2_casemask     0x0fff    /* Mask for case offset */
+
+/* The tree consists of a vector of structures of type cnode, with the root
+node as the first element. The three short ints (16-bits) are used as follows:
+
+(f0) (1) The 0x8000 bit of f0 is set if a left child exists. The child's node
+         is the next node in the vector.
+     (2) The 0x4000 bits of f0 is spare.
+     (3) The 0x3f00 bits of f0 contain the character type; this is a number
+         defined by the enumeration in ucp.h (e.g. ucp_Lu).
+     (4) The bottom 8 bits of f0 contain the most significant byte of the
+         character's 24-bit codepoint.
+
+(f1) (1) The f1 field contains the two least significant bytes of the
+         codepoint.
+
+(f2) (1) The 0xf000 bits of f2 contain zero if there is no right child of this
+         node. Otherwise, they contain one plus the exponent of the power of
+         two of the offset to the right node (e.g. a value of 3 means 8). The
+         units of the offset are node items.
+
+     (2) The 0x0fff bits of f2 contain the signed offset from this character to
+         its alternate cased value. They are zero if there is no such
+         character.
+
+
+-----------------------------------------------------------------------------
+||.|.| type (6) | ms char (8) ||  ls char (16)  ||....|  case offset (12)  ||
+-----------------------------------------------------------------------------
+  | |                                              |
+  | |-> spare                                      |
+  |                                        exponent of right
+  |-> left child exists                       child offset
+
+
+The upper/lower casing information is set only for characters that come in
+pairs. There are (at present) four non-one-to-one mappings in the Unicode data.
+These are ignored. They are:
+
+  1FBE Greek Prosgegrammeni (lower, with upper -> capital iota)
+  2126 Ohm
+  212A Kelvin
+  212B Angstrom
+
+Certainly for the last three, having an alternate case would seem to be a
+mistake. I don't know any Greek, so cannot comment on the first one.
+
+
+When searching the tree, proceed as follows:
+
+(1) Start at the first node.
+
+(2) Extract the character value from f1 and the bottom 8 bits of f0;
+
+(3) Compare with the character being sought. If equal, we are done.
+
+(4) If the test character is smaller, inspect the f0_leftexists flag. If it is
+    not set, the character is not in the tree. If it is set, move to the next
+    node, and go to (2).
+
+(5) If the test character is bigger, extract the f2_rightmask bits from f2, and
+    shift them right by f2_rightshift. If the result is zero, the character is
+    not in the tree. Otherwise, calculate the number of nodes to skip by
+    shifting the value 1 left by this number minus one. Go to (2).
+*/
+
+
+/* End of internal.h */
diff --git a/ext/pcre/pcrelib/ucptable.c b/ext/pcre/pcrelib/ucptable.c
new file mode 100644 (file)
index 0000000..7fb3a12
--- /dev/null
@@ -0,0 +1,15105 @@
+/* This source module is automatically generated from the Unicode
+property table. See internal.h for a description of the layout. */
+
+static cnode ucp_table[] = {
+  { 0x9a00, 0x2f1f, 0xe000 },
+  { 0x8700, 0x1558, 0xd000 },
+  { 0x8700, 0x0a99, 0xc000 },
+  { 0x8500, 0x0435, 0xbfe0 },
+  { 0x8500, 0x01ff, 0xafff },
+  { 0x8500, 0x00ff, 0x9079 },
+  { 0x8000, 0x007f, 0x8000 },
+  { 0x9500, 0x003f, 0x7000 },
+  { 0x8000, 0x001f, 0x6000 },
+  { 0x8000, 0x000f, 0x5000 },
+  { 0x8000, 0x0007, 0x4000 },
+  { 0x8000, 0x0003, 0x3000 },
+  { 0x8000, 0x0001, 0x2000 },
+  { 0x0000, 0x0000, 0x0000 },
+  { 0x0000, 0x0002, 0x0000 },
+  { 0x8000, 0x0005, 0x2000 },
+  { 0x0000, 0x0004, 0x0000 },
+  { 0x0000, 0x0006, 0x0000 },
+  { 0x8000, 0x000b, 0x3000 },
+  { 0x8000, 0x0009, 0x2000 },
+  { 0x0000, 0x0008, 0x0000 },
+  { 0x0000, 0x000a, 0x0000 },
+  { 0x8000, 0x000d, 0x2000 },
+  { 0x0000, 0x000c, 0x0000 },
+  { 0x0000, 0x000e, 0x0000 },
+  { 0x8000, 0x0017, 0x4000 },
+  { 0x8000, 0x0013, 0x3000 },
+  { 0x8000, 0x0011, 0x2000 },
+  { 0x0000, 0x0010, 0x0000 },
+  { 0x0000, 0x0012, 0x0000 },
+  { 0x8000, 0x0015, 0x2000 },
+  { 0x0000, 0x0014, 0x0000 },
+  { 0x0000, 0x0016, 0x0000 },
+  { 0x8000, 0x001b, 0x3000 },
+  { 0x8000, 0x0019, 0x2000 },
+  { 0x0000, 0x0018, 0x0000 },
+  { 0x0000, 0x001a, 0x0000 },
+  { 0x8000, 0x001d, 0x2000 },
+  { 0x0000, 0x001c, 0x0000 },
+  { 0x0000, 0x001e, 0x0000 },
+  { 0x9500, 0x002f, 0x5000 },
+  { 0x9500, 0x0027, 0x4000 },
+  { 0x9500, 0x0023, 0x3000 },
+  { 0x9500, 0x0021, 0x2000 },
+  { 0x1d00, 0x0020, 0x0000 },
+  { 0x1500, 0x0022, 0x0000 },
+  { 0x9500, 0x0025, 0x2000 },
+  { 0x1700, 0x0024, 0x0000 },
+  { 0x1500, 0x0026, 0x0000 },
+  { 0x9900, 0x002b, 0x3000 },
+  { 0x9200, 0x0029, 0x2000 },
+  { 0x1600, 0x0028, 0x0000 },
+  { 0x1500, 0x002a, 0x0000 },
+  { 0x9100, 0x002d, 0x2000 },
+  { 0x1500, 0x002c, 0x0000 },
+  { 0x1500, 0x002e, 0x0000 },
+  { 0x8d00, 0x0037, 0x4000 },
+  { 0x8d00, 0x0033, 0x3000 },
+  { 0x8d00, 0x0031, 0x2000 },
+  { 0x0d00, 0x0030, 0x0000 },
+  { 0x0d00, 0x0032, 0x0000 },
+  { 0x8d00, 0x0035, 0x2000 },
+  { 0x0d00, 0x0034, 0x0000 },
+  { 0x0d00, 0x0036, 0x0000 },
+  { 0x9500, 0x003b, 0x3000 },
+  { 0x8d00, 0x0039, 0x2000 },
+  { 0x0d00, 0x0038, 0x0000 },
+  { 0x1500, 0x003a, 0x0000 },
+  { 0x9900, 0x003d, 0x2000 },
+  { 0x1900, 0x003c, 0x0000 },
+  { 0x1900, 0x003e, 0x0000 },
+  { 0x9000, 0x005f, 0x6000 },
+  { 0x8900, 0x004f, 0x5020 },
+  { 0x8900, 0x0047, 0x4020 },
+  { 0x8900, 0x0043, 0x3020 },
+  { 0x8900, 0x0041, 0x2020 },
+  { 0x1500, 0x0040, 0x0000 },
+  { 0x0900, 0x0042, 0x0020 },
+  { 0x8900, 0x0045, 0x2020 },
+  { 0x0900, 0x0044, 0x0020 },
+  { 0x0900, 0x0046, 0x0020 },
+  { 0x8900, 0x004b, 0x3020 },
+  { 0x8900, 0x0049, 0x2020 },
+  { 0x0900, 0x0048, 0x0020 },
+  { 0x0900, 0x004a, 0x0020 },
+  { 0x8900, 0x004d, 0x2020 },
+  { 0x0900, 0x004c, 0x0020 },
+  { 0x0900, 0x004e, 0x0020 },
+  { 0x8900, 0x0057, 0x4020 },
+  { 0x8900, 0x0053, 0x3020 },
+  { 0x8900, 0x0051, 0x2020 },
+  { 0x0900, 0x0050, 0x0020 },
+  { 0x0900, 0x0052, 0x0020 },
+  { 0x8900, 0x0055, 0x2020 },
+  { 0x0900, 0x0054, 0x0020 },
+  { 0x0900, 0x0056, 0x0020 },
+  { 0x9600, 0x005b, 0x3000 },
+  { 0x8900, 0x0059, 0x2020 },
+  { 0x0900, 0x0058, 0x0020 },
+  { 0x0900, 0x005a, 0x0020 },
+  { 0x9200, 0x005d, 0x2000 },
+  { 0x1500, 0x005c, 0x0000 },
+  { 0x1800, 0x005e, 0x0000 },
+  { 0x8500, 0x006f, 0x5fe0 },
+  { 0x8500, 0x0067, 0x4fe0 },
+  { 0x8500, 0x0063, 0x3fe0 },
+  { 0x8500, 0x0061, 0x2fe0 },
+  { 0x1800, 0x0060, 0x0000 },
+  { 0x0500, 0x0062, 0x0fe0 },
+  { 0x8500, 0x0065, 0x2fe0 },
+  { 0x0500, 0x0064, 0x0fe0 },
+  { 0x0500, 0x0066, 0x0fe0 },
+  { 0x8500, 0x006b, 0x3fe0 },
+  { 0x8500, 0x0069, 0x2fe0 },
+  { 0x0500, 0x0068, 0x0fe0 },
+  { 0x0500, 0x006a, 0x0fe0 },
+  { 0x8500, 0x006d, 0x2fe0 },
+  { 0x0500, 0x006c, 0x0fe0 },
+  { 0x0500, 0x006e, 0x0fe0 },
+  { 0x8500, 0x0077, 0x4fe0 },
+  { 0x8500, 0x0073, 0x3fe0 },
+  { 0x8500, 0x0071, 0x2fe0 },
+  { 0x0500, 0x0070, 0x0fe0 },
+  { 0x0500, 0x0072, 0x0fe0 },
+  { 0x8500, 0x0075, 0x2fe0 },
+  { 0x0500, 0x0074, 0x0fe0 },
+  { 0x0500, 0x0076, 0x0fe0 },
+  { 0x9600, 0x007b, 0x3000 },
+  { 0x8500, 0x0079, 0x2fe0 },
+  { 0x0500, 0x0078, 0x0fe0 },
+  { 0x0500, 0x007a, 0x0fe0 },
+  { 0x9200, 0x007d, 0x2000 },
+  { 0x1900, 0x007c, 0x0000 },
+  { 0x1900, 0x007e, 0x0000 },
+  { 0x9500, 0x00bf, 0x7000 },
+  { 0x8000, 0x009f, 0x6000 },
+  { 0x8000, 0x008f, 0x5000 },
+  { 0x8000, 0x0087, 0x4000 },
+  { 0x8000, 0x0083, 0x3000 },
+  { 0x8000, 0x0081, 0x2000 },
+  { 0x0000, 0x0080, 0x0000 },
+  { 0x0000, 0x0082, 0x0000 },
+  { 0x8000, 0x0085, 0x2000 },
+  { 0x0000, 0x0084, 0x0000 },
+  { 0x0000, 0x0086, 0x0000 },
+  { 0x8000, 0x008b, 0x3000 },
+  { 0x8000, 0x0089, 0x2000 },
+  { 0x0000, 0x0088, 0x0000 },
+  { 0x0000, 0x008a, 0x0000 },
+  { 0x8000, 0x008d, 0x2000 },
+  { 0x0000, 0x008c, 0x0000 },
+  { 0x0000, 0x008e, 0x0000 },
+  { 0x8000, 0x0097, 0x4000 },
+  { 0x8000, 0x0093, 0x3000 },
+  { 0x8000, 0x0091, 0x2000 },
+  { 0x0000, 0x0090, 0x0000 },
+  { 0x0000, 0x0092, 0x0000 },
+  { 0x8000, 0x0095, 0x2000 },
+  { 0x0000, 0x0094, 0x0000 },
+  { 0x0000, 0x0096, 0x0000 },
+  { 0x8000, 0x009b, 0x3000 },
+  { 0x8000, 0x0099, 0x2000 },
+  { 0x0000, 0x0098, 0x0000 },
+  { 0x0000, 0x009a, 0x0000 },
+  { 0x8000, 0x009d, 0x2000 },
+  { 0x0000, 0x009c, 0x0000 },
+  { 0x0000, 0x009e, 0x0000 },
+  { 0x9800, 0x00af, 0x5000 },
+  { 0x9a00, 0x00a7, 0x4000 },
+  { 0x9700, 0x00a3, 0x3000 },
+  { 0x9500, 0x00a1, 0x2000 },
+  { 0x1d00, 0x00a0, 0x0000 },
+  { 0x1700, 0x00a2, 0x0000 },
+  { 0x9700, 0x00a5, 0x2000 },
+  { 0x1700, 0x00a4, 0x0000 },
+  { 0x1a00, 0x00a6, 0x0000 },
+  { 0x9400, 0x00ab, 0x3000 },
+  { 0x9a00, 0x00a9, 0x2000 },
+  { 0x1800, 0x00a8, 0x0000 },
+  { 0x0500, 0x00aa, 0x0000 },
+  { 0x8100, 0x00ad, 0x2000 },
+  { 0x1900, 0x00ac, 0x0000 },
+  { 0x1a00, 0x00ae, 0x0000 },
+  { 0x9500, 0x00b7, 0x4000 },
+  { 0x8f00, 0x00b3, 0x3000 },
+  { 0x9900, 0x00b1, 0x2000 },
+  { 0x1a00, 0x00b0, 0x0000 },
+  { 0x0f00, 0x00b2, 0x0000 },
+  { 0x8500, 0x00b5, 0x22e7 },
+  { 0x1800, 0x00b4, 0x0000 },
+  { 0x1a00, 0x00b6, 0x0000 },
+  { 0x9300, 0x00bb, 0x3000 },
+  { 0x8f00, 0x00b9, 0x2000 },
+  { 0x1800, 0x00b8, 0x0000 },
+  { 0x0500, 0x00ba, 0x0000 },
+  { 0x8f00, 0x00bd, 0x2000 },
+  { 0x0f00, 0x00bc, 0x0000 },
+  { 0x0f00, 0x00be, 0x0000 },
+  { 0x8500, 0x00df, 0x6000 },
+  { 0x8900, 0x00cf, 0x5020 },
+  { 0x8900, 0x00c7, 0x4020 },
+  { 0x8900, 0x00c3, 0x3020 },
+  { 0x8900, 0x00c1, 0x2020 },
+  { 0x0900, 0x00c0, 0x0020 },
+  { 0x0900, 0x00c2, 0x0020 },
+  { 0x8900, 0x00c5, 0x2020 },
+  { 0x0900, 0x00c4, 0x0020 },
+  { 0x0900, 0x00c6, 0x0020 },
+  { 0x8900, 0x00cb, 0x3020 },
+  { 0x8900, 0x00c9, 0x2020 },
+  { 0x0900, 0x00c8, 0x0020 },
+  { 0x0900, 0x00ca, 0x0020 },
+  { 0x8900, 0x00cd, 0x2020 },
+  { 0x0900, 0x00cc, 0x0020 },
+  { 0x0900, 0x00ce, 0x0020 },
+  { 0x9900, 0x00d7, 0x4000 },
+  { 0x8900, 0x00d3, 0x3020 },
+  { 0x8900, 0x00d1, 0x2020 },
+  { 0x0900, 0x00d0, 0x0020 },
+  { 0x0900, 0x00d2, 0x0020 },
+  { 0x8900, 0x00d5, 0x2020 },
+  { 0x0900, 0x00d4, 0x0020 },
+  { 0x0900, 0x00d6, 0x0020 },
+  { 0x8900, 0x00db, 0x3020 },
+  { 0x8900, 0x00d9, 0x2020 },
+  { 0x0900, 0x00d8, 0x0020 },
+  { 0x0900, 0x00da, 0x0020 },
+  { 0x8900, 0x00dd, 0x2020 },
+  { 0x0900, 0x00dc, 0x0020 },
+  { 0x0900, 0x00de, 0x0020 },
+  { 0x8500, 0x00ef, 0x5fe0 },
+  { 0x8500, 0x00e7, 0x4fe0 },
+  { 0x8500, 0x00e3, 0x3fe0 },
+  { 0x8500, 0x00e1, 0x2fe0 },
+  { 0x0500, 0x00e0, 0x0fe0 },
+  { 0x0500, 0x00e2, 0x0fe0 },
+  { 0x8500, 0x00e5, 0x2fe0 },
+  { 0x0500, 0x00e4, 0x0fe0 },
+  { 0x0500, 0x00e6, 0x0fe0 },
+  { 0x8500, 0x00eb, 0x3fe0 },
+  { 0x8500, 0x00e9, 0x2fe0 },
+  { 0x0500, 0x00e8, 0x0fe0 },
+  { 0x0500, 0x00ea, 0x0fe0 },
+  { 0x8500, 0x00ed, 0x2fe0 },
+  { 0x0500, 0x00ec, 0x0fe0 },
+  { 0x0500, 0x00ee, 0x0fe0 },
+  { 0x9900, 0x00f7, 0x4000 },
+  { 0x8500, 0x00f3, 0x3fe0 },
+  { 0x8500, 0x00f1, 0x2fe0 },
+  { 0x0500, 0x00f0, 0x0fe0 },
+  { 0x0500, 0x00f2, 0x0fe0 },
+  { 0x8500, 0x00f5, 0x2fe0 },
+  { 0x0500, 0x00f4, 0x0fe0 },
+  { 0x0500, 0x00f6, 0x0fe0 },
+  { 0x8500, 0x00fb, 0x3fe0 },
+  { 0x8500, 0x00f9, 0x2fe0 },
+  { 0x0500, 0x00f8, 0x0fe0 },
+  { 0x0500, 0x00fa, 0x0fe0 },
+  { 0x8500, 0x00fd, 0x2fe0 },
+  { 0x0500, 0x00fc, 0x0fe0 },
+  { 0x0500, 0x00fe, 0x0fe0 },
+  { 0x8500, 0x017f, 0x8ed4 },
+  { 0x8900, 0x013f, 0x7001 },
+  { 0x8500, 0x011f, 0x6fff },
+  { 0x8500, 0x010f, 0x5fff },
+  { 0x8500, 0x0107, 0x4fff },
+  { 0x8500, 0x0103, 0x3fff },
+  { 0x8500, 0x0101, 0x2fff },
+  { 0x0900, 0x0100, 0x0001 },
+  { 0x0900, 0x0102, 0x0001 },
+  { 0x8500, 0x0105, 0x2fff },
+  { 0x0900, 0x0104, 0x0001 },
+  { 0x0900, 0x0106, 0x0001 },
+  { 0x8500, 0x010b, 0x3fff },
+  { 0x8500, 0x0109, 0x2fff },
+  { 0x0900, 0x0108, 0x0001 },
+  { 0x0900, 0x010a, 0x0001 },
+  { 0x8500, 0x010d, 0x2fff },
+  { 0x0900, 0x010c, 0x0001 },
+  { 0x0900, 0x010e, 0x0001 },
+  { 0x8500, 0x0117, 0x4fff },
+  { 0x8500, 0x0113, 0x3fff },
+  { 0x8500, 0x0111, 0x2fff },
+  { 0x0900, 0x0110, 0x0001 },
+  { 0x0900, 0x0112, 0x0001 },
+  { 0x8500, 0x0115, 0x2fff },
+  { 0x0900, 0x0114, 0x0001 },
+  { 0x0900, 0x0116, 0x0001 },
+  { 0x8500, 0x011b, 0x3fff },
+  { 0x8500, 0x0119, 0x2fff },
+  { 0x0900, 0x0118, 0x0001 },
+  { 0x0900, 0x011a, 0x0001 },
+  { 0x8500, 0x011d, 0x2fff },
+  { 0x0900, 0x011c, 0x0001 },
+  { 0x0900, 0x011e, 0x0001 },
+  { 0x8500, 0x012f, 0x5fff },
+  { 0x8500, 0x0127, 0x4fff },
+  { 0x8500, 0x0123, 0x3fff },
+  { 0x8500, 0x0121, 0x2fff },
+  { 0x0900, 0x0120, 0x0001 },
+  { 0x0900, 0x0122, 0x0001 },
+  { 0x8500, 0x0125, 0x2fff },
+  { 0x0900, 0x0124, 0x0001 },
+  { 0x0900, 0x0126, 0x0001 },
+  { 0x8500, 0x012b, 0x3fff },
+  { 0x8500, 0x0129, 0x2fff },
+  { 0x0900, 0x0128, 0x0001 },
+  { 0x0900, 0x012a, 0x0001 },
+  { 0x8500, 0x012d, 0x2fff },
+  { 0x0900, 0x012c, 0x0001 },
+  { 0x0900, 0x012e, 0x0001 },
+  { 0x8500, 0x0137, 0x4fff },
+  { 0x8500, 0x0133, 0x3fff },
+  { 0x8500, 0x0131, 0x2f18 },
+  { 0x0900, 0x0130, 0x0f39 },
+  { 0x0900, 0x0132, 0x0001 },
+  { 0x8500, 0x0135, 0x2fff },
+  { 0x0900, 0x0134, 0x0001 },
+  { 0x0900, 0x0136, 0x0001 },
+  { 0x8900, 0x013b, 0x3001 },
+  { 0x8900, 0x0139, 0x2001 },
+  { 0x0500, 0x0138, 0x0000 },
+  { 0x0500, 0x013a, 0x0fff },
+  { 0x8900, 0x013d, 0x2001 },
+  { 0x0500, 0x013c, 0x0fff },
+  { 0x0500, 0x013e, 0x0fff },
+  { 0x8500, 0x015f, 0x6fff },
+  { 0x8500, 0x014f, 0x5fff },
+  { 0x8900, 0x0147, 0x4001 },
+  { 0x8900, 0x0143, 0x3001 },
+  { 0x8900, 0x0141, 0x2001 },
+  { 0x0500, 0x0140, 0x0fff },
+  { 0x0500, 0x0142, 0x0fff },
+  { 0x8900, 0x0145, 0x2001 },
+  { 0x0500, 0x0144, 0x0fff },
+  { 0x0500, 0x0146, 0x0fff },
+  { 0x8500, 0x014b, 0x3fff },
+  { 0x8500, 0x0149, 0x2000 },
+  { 0x0500, 0x0148, 0x0fff },
+  { 0x0900, 0x014a, 0x0001 },
+  { 0x8500, 0x014d, 0x2fff },
+  { 0x0900, 0x014c, 0x0001 },
+  { 0x0900, 0x014e, 0x0001 },
+  { 0x8500, 0x0157, 0x4fff },
+  { 0x8500, 0x0153, 0x3fff },
+  { 0x8500, 0x0151, 0x2fff },
+  { 0x0900, 0x0150, 0x0001 },
+  { 0x0900, 0x0152, 0x0001 },
+  { 0x8500, 0x0155, 0x2fff },
+  { 0x0900, 0x0154, 0x0001 },
+  { 0x0900, 0x0156, 0x0001 },
+  { 0x8500, 0x015b, 0x3fff },
+  { 0x8500, 0x0159, 0x2fff },
+  { 0x0900, 0x0158, 0x0001 },
+  { 0x0900, 0x015a, 0x0001 },
+  { 0x8500, 0x015d, 0x2fff },
+  { 0x0900, 0x015c, 0x0001 },
+  { 0x0900, 0x015e, 0x0001 },
+  { 0x8500, 0x016f, 0x5fff },
+  { 0x8500, 0x0167, 0x4fff },
+  { 0x8500, 0x0163, 0x3fff },
+  { 0x8500, 0x0161, 0x2fff },
+  { 0x0900, 0x0160, 0x0001 },
+  { 0x0900, 0x0162, 0x0001 },
+  { 0x8500, 0x0165, 0x2fff },
+  { 0x0900, 0x0164, 0x0001 },
+  { 0x0900, 0x0166, 0x0001 },
+  { 0x8500, 0x016b, 0x3fff },
+  { 0x8500, 0x0169, 0x2fff },
+  { 0x0900, 0x0168, 0x0001 },
+  { 0x0900, 0x016a, 0x0001 },
+  { 0x8500, 0x016d, 0x2fff },
+  { 0x0900, 0x016c, 0x0001 },
+  { 0x0900, 0x016e, 0x0001 },
+  { 0x8500, 0x0177, 0x4fff },
+  { 0x8500, 0x0173, 0x3fff },
+  { 0x8500, 0x0171, 0x2fff },
+  { 0x0900, 0x0170, 0x0001 },
+  { 0x0900, 0x0172, 0x0001 },
+  { 0x8500, 0x0175, 0x2fff },
+  { 0x0900, 0x0174, 0x0001 },
+  { 0x0900, 0x0176, 0x0001 },
+  { 0x8900, 0x017b, 0x3001 },
+  { 0x8900, 0x0179, 0x2001 },
+  { 0x0900, 0x0178, 0x0f87 },
+  { 0x0500, 0x017a, 0x0fff },
+  { 0x8900, 0x017d, 0x2001 },
+  { 0x0500, 0x017c, 0x0fff },
+  { 0x0500, 0x017e, 0x0fff },
+  { 0x8500, 0x01bf, 0x7038 },
+  { 0x8900, 0x019f, 0x60d6 },
+  { 0x8900, 0x018f, 0x50ca },
+  { 0x8900, 0x0187, 0x4001 },
+  { 0x8500, 0x0183, 0x3fff },
+  { 0x8900, 0x0181, 0x20d2 },
+  { 0x0500, 0x0180, 0x0000 },
+  { 0x0900, 0x0182, 0x0001 },
+  { 0x8500, 0x0185, 0x2fff },
+  { 0x0900, 0x0184, 0x0001 },
+  { 0x0900, 0x0186, 0x00ce },
+  { 0x8900, 0x018b, 0x3001 },
+  { 0x8900, 0x0189, 0x20cd },
+  { 0x0500, 0x0188, 0x0fff },
+  { 0x0900, 0x018a, 0x00cd },
+  { 0x8500, 0x018d, 0x2000 },
+  { 0x0500, 0x018c, 0x0fff },
+  { 0x0900, 0x018e, 0x004f },
+  { 0x8900, 0x0197, 0x40d1 },
+  { 0x8900, 0x0193, 0x30cd },
+  { 0x8900, 0x0191, 0x2001 },
+  { 0x0900, 0x0190, 0x00cb },
+  { 0x0500, 0x0192, 0x0fff },
+  { 0x8500, 0x0195, 0x2061 },
+  { 0x0900, 0x0194, 0x00cf },
+  { 0x0900, 0x0196, 0x00d3 },
+  { 0x8500, 0x019b, 0x3000 },
+  { 0x8500, 0x0199, 0x2fff },
+  { 0x0900, 0x0198, 0x0001 },
+  { 0x0500, 0x019a, 0x0000 },
+  { 0x8900, 0x019d, 0x20d5 },
+  { 0x0900, 0x019c, 0x00d3 },
+  { 0x0500, 0x019e, 0x0082 },
+  { 0x8900, 0x01af, 0x5001 },
+  { 0x8900, 0x01a7, 0x4001 },
+  { 0x8500, 0x01a3, 0x3fff },
+  { 0x8500, 0x01a1, 0x2fff },
+  { 0x0900, 0x01a0, 0x0001 },
+  { 0x0900, 0x01a2, 0x0001 },
+  { 0x8500, 0x01a5, 0x2fff },
+  { 0x0900, 0x01a4, 0x0001 },
+  { 0x0900, 0x01a6, 0x00da },
+  { 0x8500, 0x01ab, 0x3000 },
+  { 0x8900, 0x01a9, 0x20da },
+  { 0x0500, 0x01a8, 0x0fff },
+  { 0x0500, 0x01aa, 0x0000 },
+  { 0x8500, 0x01ad, 0x2fff },
+  { 0x0900, 0x01ac, 0x0001 },
+  { 0x0900, 0x01ae, 0x00da },
+  { 0x8900, 0x01b7, 0x40db },
+  { 0x8900, 0x01b3, 0x3001 },
+  { 0x8900, 0x01b1, 0x20d9 },
+  { 0x0500, 0x01b0, 0x0fff },
+  { 0x0900, 0x01b2, 0x00d9 },
+  { 0x8900, 0x01b5, 0x2001 },
+  { 0x0500, 0x01b4, 0x0fff },
+  { 0x0500, 0x01b6, 0x0fff },
+  { 0x8700, 0x01bb, 0x3000 },
+  { 0x8500, 0x01b9, 0x2fff },
+  { 0x0900, 0x01b8, 0x0001 },
+  { 0x0500, 0x01ba, 0x0000 },
+  { 0x8500, 0x01bd, 0x2fff },
+  { 0x0900, 0x01bc, 0x0001 },
+  { 0x0500, 0x01be, 0x0000 },
+  { 0x8500, 0x01df, 0x6fff },
+  { 0x8900, 0x01cf, 0x5001 },
+  { 0x8900, 0x01c7, 0x4002 },
+  { 0x8700, 0x01c3, 0x3000 },
+  { 0x8700, 0x01c1, 0x2000 },
+  { 0x0700, 0x01c0, 0x0000 },
+  { 0x0700, 0x01c2, 0x0000 },
+  { 0x8800, 0x01c5, 0x2000 },
+  { 0x0900, 0x01c4, 0x0002 },
+  { 0x0500, 0x01c6, 0x0ffe },
+  { 0x8800, 0x01cb, 0x3000 },
+  { 0x8500, 0x01c9, 0x2ffe },
+  { 0x0800, 0x01c8, 0x0000 },
+  { 0x0900, 0x01ca, 0x0002 },
+  { 0x8900, 0x01cd, 0x2001 },
+  { 0x0500, 0x01cc, 0x0ffe },
+  { 0x0500, 0x01ce, 0x0fff },
+  { 0x8900, 0x01d7, 0x4001 },
+  { 0x8900, 0x01d3, 0x3001 },
+  { 0x8900, 0x01d1, 0x2001 },
+  { 0x0500, 0x01d0, 0x0fff },
+  { 0x0500, 0x01d2, 0x0fff },
+  { 0x8900, 0x01d5, 0x2001 },
+  { 0x0500, 0x01d4, 0x0fff },
+  { 0x0500, 0x01d6, 0x0fff },
+  { 0x8900, 0x01db, 0x3001 },
+  { 0x8900, 0x01d9, 0x2001 },
+  { 0x0500, 0x01d8, 0x0fff },
+  { 0x0500, 0x01da, 0x0fff },
+  { 0x8500, 0x01dd, 0x2fb1 },
+  { 0x0500, 0x01dc, 0x0fff },
+  { 0x0900, 0x01de, 0x0001 },
+  { 0x8500, 0x01ef, 0x5fff },
+  { 0x8500, 0x01e7, 0x4fff },
+  { 0x8500, 0x01e3, 0x3fff },
+  { 0x8500, 0x01e1, 0x2fff },
+  { 0x0900, 0x01e0, 0x0001 },
+  { 0x0900, 0x01e2, 0x0001 },
+  { 0x8500, 0x01e5, 0x2fff },
+  { 0x0900, 0x01e4, 0x0001 },
+  { 0x0900, 0x01e6, 0x0001 },
+  { 0x8500, 0x01eb, 0x3fff },
+  { 0x8500, 0x01e9, 0x2fff },
+  { 0x0900, 0x01e8, 0x0001 },
+  { 0x0900, 0x01ea, 0x0001 },
+  { 0x8500, 0x01ed, 0x2fff },
+  { 0x0900, 0x01ec, 0x0001 },
+  { 0x0900, 0x01ee, 0x0001 },
+  { 0x8900, 0x01f7, 0x4fc8 },
+  { 0x8500, 0x01f3, 0x3ffe },
+  { 0x8900, 0x01f1, 0x2002 },
+  { 0x0500, 0x01f0, 0x0000 },
+  { 0x0800, 0x01f2, 0x0000 },
+  { 0x8500, 0x01f5, 0x2fff },
+  { 0x0900, 0x01f4, 0x0001 },
+  { 0x0900, 0x01f6, 0x0f9f },
+  { 0x8500, 0x01fb, 0x3fff },
+  { 0x8500, 0x01f9, 0x2fff },
+  { 0x0900, 0x01f8, 0x0001 },
+  { 0x0900, 0x01fa, 0x0001 },
+  { 0x8500, 0x01fd, 0x2fff },
+  { 0x0900, 0x01fc, 0x0001 },
+  { 0x0900, 0x01fe, 0x0001 },
+  { 0x8c00, 0x0318, 0x9000 },
+  { 0x8500, 0x0298, 0x8000 },
+  { 0x8500, 0x0258, 0x7000 },
+  { 0x8500, 0x021f, 0x6fff },
+  { 0x8500, 0x020f, 0x5fff },
+  { 0x8500, 0x0207, 0x4fff },
+  { 0x8500, 0x0203, 0x3fff },
+  { 0x8500, 0x0201, 0x2fff },
+  { 0x0900, 0x0200, 0x0001 },
+  { 0x0900, 0x0202, 0x0001 },
+  { 0x8500, 0x0205, 0x2fff },
+  { 0x0900, 0x0204, 0x0001 },
+  { 0x0900, 0x0206, 0x0001 },
+  { 0x8500, 0x020b, 0x3fff },
+  { 0x8500, 0x0209, 0x2fff },
+  { 0x0900, 0x0208, 0x0001 },
+  { 0x0900, 0x020a, 0x0001 },
+  { 0x8500, 0x020d, 0x2fff },
+  { 0x0900, 0x020c, 0x0001 },
+  { 0x0900, 0x020e, 0x0001 },
+  { 0x8500, 0x0217, 0x4fff },
+  { 0x8500, 0x0213, 0x3fff },
+  { 0x8500, 0x0211, 0x2fff },
+  { 0x0900, 0x0210, 0x0001 },
+  { 0x0900, 0x0212, 0x0001 },
+  { 0x8500, 0x0215, 0x2fff },
+  { 0x0900, 0x0214, 0x0001 },
+  { 0x0900, 0x0216, 0x0001 },
+  { 0x8500, 0x021b, 0x3fff },
+  { 0x8500, 0x0219, 0x2fff },
+  { 0x0900, 0x0218, 0x0001 },
+  { 0x0900, 0x021a, 0x0001 },
+  { 0x8500, 0x021d, 0x2fff },
+  { 0x0900, 0x021c, 0x0001 },
+  { 0x0900, 0x021e, 0x0001 },
+  { 0x8500, 0x022f, 0x5fff },
+  { 0x8500, 0x0227, 0x4fff },
+  { 0x8500, 0x0223, 0x3fff },
+  { 0x8500, 0x0221, 0x2000 },
+  { 0x0900, 0x0220, 0x0f7e },
+  { 0x0900, 0x0222, 0x0001 },
+  { 0x8500, 0x0225, 0x2fff },
+  { 0x0900, 0x0224, 0x0001 },
+  { 0x0900, 0x0226, 0x0001 },
+  { 0x8500, 0x022b, 0x3fff },
+  { 0x8500, 0x0229, 0x2fff },
+  { 0x0900, 0x0228, 0x0001 },
+  { 0x0900, 0x022a, 0x0001 },
+  { 0x8500, 0x022d, 0x2fff },
+  { 0x0900, 0x022c, 0x0001 },
+  { 0x0900, 0x022e, 0x0001 },
+  { 0x8500, 0x0250, 0x4000 },
+  { 0x8500, 0x0233, 0x3fff },
+  { 0x8500, 0x0231, 0x2fff },
+  { 0x0900, 0x0230, 0x0001 },
+  { 0x0900, 0x0232, 0x0001 },
+  { 0x8500, 0x0235, 0x2000 },
+  { 0x0500, 0x0234, 0x0000 },
+  { 0x0500, 0x0236, 0x0000 },
+  { 0x8500, 0x0254, 0x3f32 },
+  { 0x8500, 0x0252, 0x2000 },
+  { 0x0500, 0x0251, 0x0000 },
+  { 0x0500, 0x0253, 0x0f2e },
+  { 0x8500, 0x0256, 0x2f33 },
+  { 0x0500, 0x0255, 0x0000 },
+  { 0x0500, 0x0257, 0x0f33 },
+  { 0x8500, 0x0278, 0x6000 },
+  { 0x8500, 0x0268, 0x5f2f },
+  { 0x8500, 0x0260, 0x4f33 },
+  { 0x8500, 0x025c, 0x3000 },
+  { 0x8500, 0x025a, 0x2000 },
+  { 0x0500, 0x0259, 0x0f36 },
+  { 0x0500, 0x025b, 0x0f35 },
+  { 0x8500, 0x025e, 0x2000 },
+  { 0x0500, 0x025d, 0x0000 },
+  { 0x0500, 0x025f, 0x0000 },
+  { 0x8500, 0x0264, 0x3000 },
+  { 0x8500, 0x0262, 0x2000 },
+  { 0x0500, 0x0261, 0x0000 },
+  { 0x0500, 0x0263, 0x0f31 },
+  { 0x8500, 0x0266, 0x2000 },
+  { 0x0500, 0x0265, 0x0000 },
+  { 0x0500, 0x0267, 0x0000 },
+  { 0x8500, 0x0270, 0x4000 },
+  { 0x8500, 0x026c, 0x3000 },
+  { 0x8500, 0x026a, 0x2000 },
+  { 0x0500, 0x0269, 0x0f2d },
+  { 0x0500, 0x026b, 0x0000 },
+  { 0x8500, 0x026e, 0x2000 },
+  { 0x0500, 0x026d, 0x0000 },
+  { 0x0500, 0x026f, 0x0f2d },
+  { 0x8500, 0x0274, 0x3000 },
+  { 0x8500, 0x0272, 0x2f2b },
+  { 0x0500, 0x0271, 0x0000 },
+  { 0x0500, 0x0273, 0x0000 },
+  { 0x8500, 0x0276, 0x2000 },
+  { 0x0500, 0x0275, 0x0f2a },
+  { 0x0500, 0x0277, 0x0000 },
+  { 0x8500, 0x0288, 0x5f26 },
+  { 0x8500, 0x0280, 0x4f26 },
+  { 0x8500, 0x027c, 0x3000 },
+  { 0x8500, 0x027a, 0x2000 },
+  { 0x0500, 0x0279, 0x0000 },
+  { 0x0500, 0x027b, 0x0000 },
+  { 0x8500, 0x027e, 0x2000 },
+  { 0x0500, 0x027d, 0x0000 },
+  { 0x0500, 0x027f, 0x0000 },
+  { 0x8500, 0x0284, 0x3000 },
+  { 0x8500, 0x0282, 0x2000 },
+  { 0x0500, 0x0281, 0x0000 },
+  { 0x0500, 0x0283, 0x0f26 },
+  { 0x8500, 0x0286, 0x2000 },
+  { 0x0500, 0x0285, 0x0000 },
+  { 0x0500, 0x0287, 0x0000 },
+  { 0x8500, 0x0290, 0x4000 },
+  { 0x8500, 0x028c, 0x3000 },
+  { 0x8500, 0x028a, 0x2f27 },
+  { 0x0500, 0x0289, 0x0000 },
+  { 0x0500, 0x028b, 0x0f27 },
+  { 0x8500, 0x028e, 0x2000 },
+  { 0x0500, 0x028d, 0x0000 },
+  { 0x0500, 0x028f, 0x0000 },
+  { 0x8500, 0x0294, 0x3000 },
+  { 0x8500, 0x0292, 0x2f25 },
+  { 0x0500, 0x0291, 0x0000 },
+  { 0x0500, 0x0293, 0x0000 },
+  { 0x8500, 0x0296, 0x2000 },
+  { 0x0500, 0x0295, 0x0000 },
+  { 0x0500, 0x0297, 0x0000 },
+  { 0x9800, 0x02d8, 0x7000 },
+  { 0x8600, 0x02b8, 0x6000 },
+  { 0x8500, 0x02a8, 0x5000 },
+  { 0x8500, 0x02a0, 0x4000 },
+  { 0x8500, 0x029c, 0x3000 },
+  { 0x8500, 0x029a, 0x2000 },
+  { 0x0500, 0x0299, 0x0000 },
+  { 0x0500, 0x029b, 0x0000 },
+  { 0x8500, 0x029e, 0x2000 },
+  { 0x0500, 0x029d, 0x0000 },
+  { 0x0500, 0x029f, 0x0000 },
+  { 0x8500, 0x02a4, 0x3000 },
+  { 0x8500, 0x02a2, 0x2000 },
+  { 0x0500, 0x02a1, 0x0000 },
+  { 0x0500, 0x02a3, 0x0000 },
+  { 0x8500, 0x02a6, 0x2000 },
+  { 0x0500, 0x02a5, 0x0000 },
+  { 0x0500, 0x02a7, 0x0000 },
+  { 0x8600, 0x02b0, 0x4000 },
+  { 0x8500, 0x02ac, 0x3000 },
+  { 0x8500, 0x02aa, 0x2000 },
+  { 0x0500, 0x02a9, 0x0000 },
+  { 0x0500, 0x02ab, 0x0000 },
+  { 0x8500, 0x02ae, 0x2000 },
+  { 0x0500, 0x02ad, 0x0000 },
+  { 0x0500, 0x02af, 0x0000 },
+  { 0x8600, 0x02b4, 0x3000 },
+  { 0x8600, 0x02b2, 0x2000 },
+  { 0x0600, 0x02b1, 0x0000 },
+  { 0x0600, 0x02b3, 0x0000 },
+  { 0x8600, 0x02b6, 0x2000 },
+  { 0x0600, 0x02b5, 0x0000 },
+  { 0x0600, 0x02b7, 0x0000 },
+  { 0x8600, 0x02c8, 0x5000 },
+  { 0x8600, 0x02c0, 0x4000 },
+  { 0x8600, 0x02bc, 0x3000 },
+  { 0x8600, 0x02ba, 0x2000 },
+  { 0x0600, 0x02b9, 0x0000 },
+  { 0x0600, 0x02bb, 0x0000 },
+  { 0x8600, 0x02be, 0x2000 },
+  { 0x0600, 0x02bd, 0x0000 },
+  { 0x0600, 0x02bf, 0x0000 },
+  { 0x9800, 0x02c4, 0x3000 },
+  { 0x9800, 0x02c2, 0x2000 },
+  { 0x0600, 0x02c1, 0x0000 },
+  { 0x1800, 0x02c3, 0x0000 },
+  { 0x8600, 0x02c6, 0x2000 },
+  { 0x1800, 0x02c5, 0x0000 },
+  { 0x0600, 0x02c7, 0x0000 },
+  { 0x8600, 0x02d0, 0x4000 },
+  { 0x8600, 0x02cc, 0x3000 },
+  { 0x8600, 0x02ca, 0x2000 },
+  { 0x0600, 0x02c9, 0x0000 },
+  { 0x0600, 0x02cb, 0x0000 },
+  { 0x8600, 0x02ce, 0x2000 },
+  { 0x0600, 0x02cd, 0x0000 },
+  { 0x0600, 0x02cf, 0x0000 },
+  { 0x9800, 0x02d4, 0x3000 },
+  { 0x9800, 0x02d2, 0x2000 },
+  { 0x0600, 0x02d1, 0x0000 },
+  { 0x1800, 0x02d3, 0x0000 },
+  { 0x9800, 0x02d6, 0x2000 },
+  { 0x1800, 0x02d5, 0x0000 },
+  { 0x1800, 0x02d7, 0x0000 },
+  { 0x9800, 0x02f8, 0x6000 },
+  { 0x9800, 0x02e8, 0x5000 },
+  { 0x8600, 0x02e0, 0x4000 },
+  { 0x9800, 0x02dc, 0x3000 },
+  { 0x9800, 0x02da, 0x2000 },
+  { 0x1800, 0x02d9, 0x0000 },
+  { 0x1800, 0x02db, 0x0000 },
+  { 0x9800, 0x02de, 0x2000 },
+  { 0x1800, 0x02dd, 0x0000 },
+  { 0x1800, 0x02df, 0x0000 },
+  { 0x8600, 0x02e4, 0x3000 },
+  { 0x8600, 0x02e2, 0x2000 },
+  { 0x0600, 0x02e1, 0x0000 },
+  { 0x0600, 0x02e3, 0x0000 },
+  { 0x9800, 0x02e6, 0x2000 },
+  { 0x1800, 0x02e5, 0x0000 },
+  { 0x1800, 0x02e7, 0x0000 },
+  { 0x9800, 0x02f0, 0x4000 },
+  { 0x9800, 0x02ec, 0x3000 },
+  { 0x9800, 0x02ea, 0x2000 },
+  { 0x1800, 0x02e9, 0x0000 },
+  { 0x1800, 0x02eb, 0x0000 },
+  { 0x8600, 0x02ee, 0x2000 },
+  { 0x1800, 0x02ed, 0x0000 },
+  { 0x1800, 0x02ef, 0x0000 },
+  { 0x9800, 0x02f4, 0x3000 },
+  { 0x9800, 0x02f2, 0x2000 },
+  { 0x1800, 0x02f1, 0x0000 },
+  { 0x1800, 0x02f3, 0x0000 },
+  { 0x9800, 0x02f6, 0x2000 },
+  { 0x1800, 0x02f5, 0x0000 },
+  { 0x1800, 0x02f7, 0x0000 },
+  { 0x8c00, 0x0308, 0x5000 },
+  { 0x8c00, 0x0300, 0x4000 },
+  { 0x9800, 0x02fc, 0x3000 },
+  { 0x9800, 0x02fa, 0x2000 },
+  { 0x1800, 0x02f9, 0x0000 },
+  { 0x1800, 0x02fb, 0x0000 },
+  { 0x9800, 0x02fe, 0x2000 },
+  { 0x1800, 0x02fd, 0x0000 },
+  { 0x1800, 0x02ff, 0x0000 },
+  { 0x8c00, 0x0304, 0x3000 },
+  { 0x8c00, 0x0302, 0x2000 },
+  { 0x0c00, 0x0301, 0x0000 },
+  { 0x0c00, 0x0303, 0x0000 },
+  { 0x8c00, 0x0306, 0x2000 },
+  { 0x0c00, 0x0305, 0x0000 },
+  { 0x0c00, 0x0307, 0x0000 },
+  { 0x8c00, 0x0310, 0x4000 },
+  { 0x8c00, 0x030c, 0x3000 },
+  { 0x8c00, 0x030a, 0x2000 },
+  { 0x0c00, 0x0309, 0x0000 },
+  { 0x0c00, 0x030b, 0x0000 },
+  { 0x8c00, 0x030e, 0x2000 },
+  { 0x0c00, 0x030d, 0x0000 },
+  { 0x0c00, 0x030f, 0x0000 },
+  { 0x8c00, 0x0314, 0x3000 },
+  { 0x8c00, 0x0312, 0x2000 },
+  { 0x0c00, 0x0311, 0x0000 },
+  { 0x0c00, 0x0313, 0x0000 },
+  { 0x8c00, 0x0316, 0x2000 },
+  { 0x0c00, 0x0315, 0x0000 },
+  { 0x0c00, 0x0317, 0x0000 },
+  { 0x8500, 0x03b0, 0x8000 },
+  { 0x8c00, 0x035d, 0x7000 },
+  { 0x8c00, 0x0338, 0x6000 },
+  { 0x8c00, 0x0328, 0x5000 },
+  { 0x8c00, 0x0320, 0x4000 },
+  { 0x8c00, 0x031c, 0x3000 },
+  { 0x8c00, 0x031a, 0x2000 },
+  { 0x0c00, 0x0319, 0x0000 },
+  { 0x0c00, 0x031b, 0x0000 },
+  { 0x8c00, 0x031e, 0x2000 },
+  { 0x0c00, 0x031d, 0x0000 },
+  { 0x0c00, 0x031f, 0x0000 },
+  { 0x8c00, 0x0324, 0x3000 },
+  { 0x8c00, 0x0322, 0x2000 },
+  { 0x0c00, 0x0321, 0x0000 },
+  { 0x0c00, 0x0323, 0x0000 },
+  { 0x8c00, 0x0326, 0x2000 },
+  { 0x0c00, 0x0325, 0x0000 },
+  { 0x0c00, 0x0327, 0x0000 },
+  { 0x8c00, 0x0330, 0x4000 },
+  { 0x8c00, 0x032c, 0x3000 },
+  { 0x8c00, 0x032a, 0x2000 },
+  { 0x0c00, 0x0329, 0x0000 },
+  { 0x0c00, 0x032b, 0x0000 },
+  { 0x8c00, 0x032e, 0x2000 },
+  { 0x0c00, 0x032d, 0x0000 },
+  { 0x0c00, 0x032f, 0x0000 },
+  { 0x8c00, 0x0334, 0x3000 },
+  { 0x8c00, 0x0332, 0x2000 },
+  { 0x0c00, 0x0331, 0x0000 },
+  { 0x0c00, 0x0333, 0x0000 },
+  { 0x8c00, 0x0336, 0x2000 },
+  { 0x0c00, 0x0335, 0x0000 },
+  { 0x0c00, 0x0337, 0x0000 },
+  { 0x8c00, 0x0348, 0x5000 },
+  { 0x8c00, 0x0340, 0x4000 },
+  { 0x8c00, 0x033c, 0x3000 },
+  { 0x8c00, 0x033a, 0x2000 },
+  { 0x0c00, 0x0339, 0x0000 },
+  { 0x0c00, 0x033b, 0x0000 },
+  { 0x8c00, 0x033e, 0x2000 },
+  { 0x0c00, 0x033d, 0x0000 },
+  { 0x0c00, 0x033f, 0x0000 },
+  { 0x8c00, 0x0344, 0x3000 },
+  { 0x8c00, 0x0342, 0x2000 },
+  { 0x0c00, 0x0341, 0x0000 },
+  { 0x0c00, 0x0343, 0x0000 },
+  { 0x8c00, 0x0346, 0x2000 },
+  { 0x0c00, 0x0345, 0x0000 },
+  { 0x0c00, 0x0347, 0x0000 },
+  { 0x8c00, 0x0350, 0x4000 },
+  { 0x8c00, 0x034c, 0x3000 },
+  { 0x8c00, 0x034a, 0x2000 },
+  { 0x0c00, 0x0349, 0x0000 },
+  { 0x0c00, 0x034b, 0x0000 },
+  { 0x8c00, 0x034e, 0x2000 },
+  { 0x0c00, 0x034d, 0x0000 },
+  { 0x0c00, 0x034f, 0x0000 },
+  { 0x8c00, 0x0354, 0x3000 },
+  { 0x8c00, 0x0352, 0x2000 },
+  { 0x0c00, 0x0351, 0x0000 },
+  { 0x0c00, 0x0353, 0x0000 },
+  { 0x8c00, 0x0356, 0x2000 },
+  { 0x0c00, 0x0355, 0x0000 },
+  { 0x0c00, 0x0357, 0x0000 },
+  { 0x8900, 0x038f, 0x603f },
+  { 0x8c00, 0x036d, 0x5000 },
+  { 0x8c00, 0x0365, 0x4000 },
+  { 0x8c00, 0x0361, 0x3000 },
+  { 0x8c00, 0x035f, 0x2000 },
+  { 0x0c00, 0x035e, 0x0000 },
+  { 0x0c00, 0x0360, 0x0000 },
+  { 0x8c00, 0x0363, 0x2000 },
+  { 0x0c00, 0x0362, 0x0000 },
+  { 0x0c00, 0x0364, 0x0000 },
+  { 0x8c00, 0x0369, 0x3000 },
+  { 0x8c00, 0x0367, 0x2000 },
+  { 0x0c00, 0x0366, 0x0000 },
+  { 0x0c00, 0x0368, 0x0000 },
+  { 0x8c00, 0x036b, 0x2000 },
+  { 0x0c00, 0x036a, 0x0000 },
+  { 0x0c00, 0x036c, 0x0000 },
+  { 0x9800, 0x0385, 0x4000 },
+  { 0x9800, 0x0375, 0x3000 },
+  { 0x8c00, 0x036f, 0x2000 },
+  { 0x0c00, 0x036e, 0x0000 },
+  { 0x1800, 0x0374, 0x0000 },
+  { 0x9500, 0x037e, 0x2000 },
+  { 0x0600, 0x037a, 0x0000 },
+  { 0x1800, 0x0384, 0x0000 },
+  { 0x8900, 0x0389, 0x3025 },
+  { 0x9500, 0x0387, 0x2000 },
+  { 0x0900, 0x0386, 0x0026 },
+  { 0x0900, 0x0388, 0x0025 },
+  { 0x8900, 0x038c, 0x2040 },
+  { 0x0900, 0x038a, 0x0025 },
+  { 0x0900, 0x038e, 0x003f },
+  { 0x8900, 0x039f, 0x5020 },
+  { 0x8900, 0x0397, 0x4020 },
+  { 0x8900, 0x0393, 0x3020 },
+  { 0x8900, 0x0391, 0x2020 },
+  { 0x0500, 0x0390, 0x0000 },
+  { 0x0900, 0x0392, 0x0020 },
+  { 0x8900, 0x0395, 0x2020 },
+  { 0x0900, 0x0394, 0x0020 },
+  { 0x0900, 0x0396, 0x0020 },
+  { 0x8900, 0x039b, 0x3020 },
+  { 0x8900, 0x0399, 0x2020 },
+  { 0x0900, 0x0398, 0x0020 },
+  { 0x0900, 0x039a, 0x0020 },
+  { 0x8900, 0x039d, 0x2020 },
+  { 0x0900, 0x039c, 0x0020 },
+  { 0x0900, 0x039e, 0x0020 },
+  { 0x8900, 0x03a8, 0x4020 },
+  { 0x8900, 0x03a4, 0x3020 },
+  { 0x8900, 0x03a1, 0x2020 },
+  { 0x0900, 0x03a0, 0x0020 },
+  { 0x0900, 0x03a3, 0x0020 },
+  { 0x8900, 0x03a6, 0x2020 },
+  { 0x0900, 0x03a5, 0x0020 },
+  { 0x0900, 0x03a7, 0x0020 },
+  { 0x8500, 0x03ac, 0x3fda },
+  { 0x8900, 0x03aa, 0x2020 },
+  { 0x0900, 0x03a9, 0x0020 },
+  { 0x0900, 0x03ab, 0x0020 },
+  { 0x8500, 0x03ae, 0x2fdb },
+  { 0x0500, 0x03ad, 0x0fdb },
+  { 0x0500, 0x03af, 0x0fdb },
+  { 0x8500, 0x03f1, 0x7fb0 },
+  { 0x8500, 0x03d1, 0x6fc7 },
+  { 0x8500, 0x03c0, 0x5fe0 },
+  { 0x8500, 0x03b8, 0x4fe0 },
+  { 0x8500, 0x03b4, 0x3fe0 },
+  { 0x8500, 0x03b2, 0x2fe0 },
+  { 0x0500, 0x03b1, 0x0fe0 },
+  { 0x0500, 0x03b3, 0x0fe0 },
+  { 0x8500, 0x03b6, 0x2fe0 },
+  { 0x0500, 0x03b5, 0x0fe0 },
+  { 0x0500, 0x03b7, 0x0fe0 },
+  { 0x8500, 0x03bc, 0x3fe0 },
+  { 0x8500, 0x03ba, 0x2fe0 },
+  { 0x0500, 0x03b9, 0x0fe0 },
+  { 0x0500, 0x03bb, 0x0fe0 },
+  { 0x8500, 0x03be, 0x2fe0 },
+  { 0x0500, 0x03bd, 0x0fe0 },
+  { 0x0500, 0x03bf, 0x0fe0 },
+  { 0x8500, 0x03c8, 0x4fe0 },
+  { 0x8500, 0x03c4, 0x3fe0 },
+  { 0x8500, 0x03c2, 0x2fe1 },
+  { 0x0500, 0x03c1, 0x0fe0 },
+  { 0x0500, 0x03c3, 0x0fe0 },
+  { 0x8500, 0x03c6, 0x2fe0 },
+  { 0x0500, 0x03c5, 0x0fe0 },
+  { 0x0500, 0x03c7, 0x0fe0 },
+  { 0x8500, 0x03cc, 0x3fc0 },
+  { 0x8500, 0x03ca, 0x2fe0 },
+  { 0x0500, 0x03c9, 0x0fe0 },
+  { 0x0500, 0x03cb, 0x0fe0 },
+  { 0x8500, 0x03ce, 0x2fc1 },
+  { 0x0500, 0x03cd, 0x0fc1 },
+  { 0x0500, 0x03d0, 0x0fc2 },
+  { 0x8500, 0x03e1, 0x5fff },
+  { 0x8500, 0x03d9, 0x4fff },
+  { 0x8500, 0x03d5, 0x3fd1 },
+  { 0x8900, 0x03d3, 0x2000 },
+  { 0x0900, 0x03d2, 0x0000 },
+  { 0x0900, 0x03d4, 0x0000 },
+  { 0x8500, 0x03d7, 0x2000 },
+  { 0x0500, 0x03d6, 0x0fca },
+  { 0x0900, 0x03d8, 0x0001 },
+  { 0x8500, 0x03dd, 0x3fff },
+  { 0x8500, 0x03db, 0x2fff },
+  { 0x0900, 0x03da, 0x0001 },
+  { 0x0900, 0x03dc, 0x0001 },
+  { 0x8500, 0x03df, 0x2fff },
+  { 0x0900, 0x03de, 0x0001 },
+  { 0x0900, 0x03e0, 0x0001 },
+  { 0x8500, 0x03e9, 0x4fff },
+  { 0x8500, 0x03e5, 0x3fff },
+  { 0x8500, 0x03e3, 0x2fff },
+  { 0x0900, 0x03e2, 0x0001 },
+  { 0x0900, 0x03e4, 0x0001 },
+  { 0x8500, 0x03e7, 0x2fff },
+  { 0x0900, 0x03e6, 0x0001 },
+  { 0x0900, 0x03e8, 0x0001 },
+  { 0x8500, 0x03ed, 0x3fff },
+  { 0x8500, 0x03eb, 0x2fff },
+  { 0x0900, 0x03ea, 0x0001 },
+  { 0x0900, 0x03ec, 0x0001 },
+  { 0x8500, 0x03ef, 0x2fff },
+  { 0x0900, 0x03ee, 0x0001 },
+  { 0x0500, 0x03f0, 0x0faa },
+  { 0x8900, 0x0415, 0x6020 },
+  { 0x8900, 0x0405, 0x5050 },
+  { 0x8900, 0x03f9, 0x4ff9 },
+  { 0x8500, 0x03f5, 0x3fa0 },
+  { 0x8500, 0x03f3, 0x2000 },
+  { 0x0500, 0x03f2, 0x0007 },
+  { 0x0900, 0x03f4, 0x0fc4 },
+  { 0x8900, 0x03f7, 0x2001 },
+  { 0x1900, 0x03f6, 0x0000 },
+  { 0x0500, 0x03f8, 0x0fff },
+  { 0x8900, 0x0401, 0x3050 },
+  { 0x8500, 0x03fb, 0x2fff },
+  { 0x0900, 0x03fa, 0x0001 },
+  { 0x0900, 0x0400, 0x0050 },
+  { 0x8900, 0x0403, 0x2050 },
+  { 0x0900, 0x0402, 0x0050 },
+  { 0x0900, 0x0404, 0x0050 },
+  { 0x8900, 0x040d, 0x4050 },
+  { 0x8900, 0x0409, 0x3050 },
+  { 0x8900, 0x0407, 0x2050 },
+  { 0x0900, 0x0406, 0x0050 },
+  { 0x0900, 0x0408, 0x0050 },
+  { 0x8900, 0x040b, 0x2050 },
+  { 0x0900, 0x040a, 0x0050 },
+  { 0x0900, 0x040c, 0x0050 },
+  { 0x8900, 0x0411, 0x3020 },
+  { 0x8900, 0x040f, 0x2050 },
+  { 0x0900, 0x040e, 0x0050 },
+  { 0x0900, 0x0410, 0x0020 },
+  { 0x8900, 0x0413, 0x2020 },
+  { 0x0900, 0x0412, 0x0020 },
+  { 0x0900, 0x0414, 0x0020 },
+  { 0x8900, 0x0425, 0x5020 },
+  { 0x8900, 0x041d, 0x4020 },
+  { 0x8900, 0x0419, 0x3020 },
+  { 0x8900, 0x0417, 0x2020 },
+  { 0x0900, 0x0416, 0x0020 },
+  { 0x0900, 0x0418, 0x0020 },
+  { 0x8900, 0x041b, 0x2020 },
+  { 0x0900, 0x041a, 0x0020 },
+  { 0x0900, 0x041c, 0x0020 },
+  { 0x8900, 0x0421, 0x3020 },
+  { 0x8900, 0x041f, 0x2020 },
+  { 0x0900, 0x041e, 0x0020 },
+  { 0x0900, 0x0420, 0x0020 },
+  { 0x8900, 0x0423, 0x2020 },
+  { 0x0900, 0x0422, 0x0020 },
+  { 0x0900, 0x0424, 0x0020 },
+  { 0x8900, 0x042d, 0x4020 },
+  { 0x8900, 0x0429, 0x3020 },
+  { 0x8900, 0x0427, 0x2020 },
+  { 0x0900, 0x0426, 0x0020 },
+  { 0x0900, 0x0428, 0x0020 },
+  { 0x8900, 0x042b, 0x2020 },
+  { 0x0900, 0x042a, 0x0020 },
+  { 0x0900, 0x042c, 0x0020 },
+  { 0x8500, 0x0431, 0x3fe0 },
+  { 0x8900, 0x042f, 0x2020 },
+  { 0x0900, 0x042e, 0x0020 },
+  { 0x0500, 0x0430, 0x0fe0 },
+  { 0x8500, 0x0433, 0x2fe0 },
+  { 0x0500, 0x0432, 0x0fe0 },
+  { 0x0500, 0x0434, 0x0fe0 },
+  { 0x8700, 0x06a4, 0xa000 },
+  { 0x8500, 0x0563, 0x9fd0 },
+  { 0x8900, 0x04b6, 0x8001 },
+  { 0x8500, 0x0475, 0x7fff },
+  { 0x8500, 0x0455, 0x6fb0 },
+  { 0x8500, 0x0445, 0x5fe0 },
+  { 0x8500, 0x043d, 0x4fe0 },
+  { 0x8500, 0x0439, 0x3fe0 },
+  { 0x8500, 0x0437, 0x2fe0 },
+  { 0x0500, 0x0436, 0x0fe0 },
+  { 0x0500, 0x0438, 0x0fe0 },
+  { 0x8500, 0x043b, 0x2fe0 },
+  { 0x0500, 0x043a, 0x0fe0 },
+  { 0x0500, 0x043c, 0x0fe0 },
+  { 0x8500, 0x0441, 0x3fe0 },
+  { 0x8500, 0x043f, 0x2fe0 },
+  { 0x0500, 0x043e, 0x0fe0 },
+  { 0x0500, 0x0440, 0x0fe0 },
+  { 0x8500, 0x0443, 0x2fe0 },
+  { 0x0500, 0x0442, 0x0fe0 },
+  { 0x0500, 0x0444, 0x0fe0 },
+  { 0x8500, 0x044d, 0x4fe0 },
+  { 0x8500, 0x0449, 0x3fe0 },
+  { 0x8500, 0x0447, 0x2fe0 },
+  { 0x0500, 0x0446, 0x0fe0 },
+  { 0x0500, 0x0448, 0x0fe0 },
+  { 0x8500, 0x044b, 0x2fe0 },
+  { 0x0500, 0x044a, 0x0fe0 },
+  { 0x0500, 0x044c, 0x0fe0 },
+  { 0x8500, 0x0451, 0x3fb0 },
+  { 0x8500, 0x044f, 0x2fe0 },
+  { 0x0500, 0x044e, 0x0fe0 },
+  { 0x0500, 0x0450, 0x0fb0 },
+  { 0x8500, 0x0453, 0x2fb0 },
+  { 0x0500, 0x0452, 0x0fb0 },
+  { 0x0500, 0x0454, 0x0fb0 },
+  { 0x8500, 0x0465, 0x5fff },
+  { 0x8500, 0x045d, 0x4fb0 },
+  { 0x8500, 0x0459, 0x3fb0 },
+  { 0x8500, 0x0457, 0x2fb0 },
+  { 0x0500, 0x0456, 0x0fb0 },
+  { 0x0500, 0x0458, 0x0fb0 },
+  { 0x8500, 0x045b, 0x2fb0 },
+  { 0x0500, 0x045a, 0x0fb0 },
+  { 0x0500, 0x045c, 0x0fb0 },
+  { 0x8500, 0x0461, 0x3fff },
+  { 0x8500, 0x045f, 0x2fb0 },
+  { 0x0500, 0x045e, 0x0fb0 },
+  { 0x0900, 0x0460, 0x0001 },
+  { 0x8500, 0x0463, 0x2fff },
+  { 0x0900, 0x0462, 0x0001 },
+  { 0x0900, 0x0464, 0x0001 },
+  { 0x8500, 0x046d, 0x4fff },
+  { 0x8500, 0x0469, 0x3fff },
+  { 0x8500, 0x0467, 0x2fff },
+  { 0x0900, 0x0466, 0x0001 },
+  { 0x0900, 0x0468, 0x0001 },
+  { 0x8500, 0x046b, 0x2fff },
+  { 0x0900, 0x046a, 0x0001 },
+  { 0x0900, 0x046c, 0x0001 },
+  { 0x8500, 0x0471, 0x3fff },
+  { 0x8500, 0x046f, 0x2fff },
+  { 0x0900, 0x046e, 0x0001 },
+  { 0x0900, 0x0470, 0x0001 },
+  { 0x8500, 0x0473, 0x2fff },
+  { 0x0900, 0x0472, 0x0001 },
+  { 0x0900, 0x0474, 0x0001 },
+  { 0x8900, 0x0496, 0x6001 },
+  { 0x8c00, 0x0485, 0x5000 },
+  { 0x8500, 0x047d, 0x4fff },
+  { 0x8500, 0x0479, 0x3fff },
+  { 0x8500, 0x0477, 0x2fff },
+  { 0x0900, 0x0476, 0x0001 },
+  { 0x0900, 0x0478, 0x0001 },
+  { 0x8500, 0x047b, 0x2fff },
+  { 0x0900, 0x047a, 0x0001 },
+  { 0x0900, 0x047c, 0x0001 },
+  { 0x8500, 0x0481, 0x3fff },
+  { 0x8500, 0x047f, 0x2fff },
+  { 0x0900, 0x047e, 0x0001 },
+  { 0x0900, 0x0480, 0x0001 },
+  { 0x8c00, 0x0483, 0x2000 },
+  { 0x1a00, 0x0482, 0x0000 },
+  { 0x0c00, 0x0484, 0x0000 },
+  { 0x8900, 0x048e, 0x4001 },
+  { 0x8900, 0x048a, 0x3001 },
+  { 0x8b00, 0x0488, 0x2000 },
+  { 0x0c00, 0x0486, 0x0000 },
+  { 0x0b00, 0x0489, 0x0000 },
+  { 0x8900, 0x048c, 0x2001 },
+  { 0x0500, 0x048b, 0x0fff },
+  { 0x0500, 0x048d, 0x0fff },
+  { 0x8900, 0x0492, 0x3001 },
+  { 0x8900, 0x0490, 0x2001 },
+  { 0x0500, 0x048f, 0x0fff },
+  { 0x0500, 0x0491, 0x0fff },
+  { 0x8900, 0x0494, 0x2001 },
+  { 0x0500, 0x0493, 0x0fff },
+  { 0x0500, 0x0495, 0x0fff },
+  { 0x8900, 0x04a6, 0x5001 },
+  { 0x8900, 0x049e, 0x4001 },
+  { 0x8900, 0x049a, 0x3001 },
+  { 0x8900, 0x0498, 0x2001 },
+  { 0x0500, 0x0497, 0x0fff },
+  { 0x0500, 0x0499, 0x0fff },
+  { 0x8900, 0x049c, 0x2001 },
+  { 0x0500, 0x049b, 0x0fff },
+  { 0x0500, 0x049d, 0x0fff },
+  { 0x8900, 0x04a2, 0x3001 },
+  { 0x8900, 0x04a0, 0x2001 },
+  { 0x0500, 0x049f, 0x0fff },
+  { 0x0500, 0x04a1, 0x0fff },
+  { 0x8900, 0x04a4, 0x2001 },
+  { 0x0500, 0x04a3, 0x0fff },
+  { 0x0500, 0x04a5, 0x0fff },
+  { 0x8900, 0x04ae, 0x4001 },
+  { 0x8900, 0x04aa, 0x3001 },
+  { 0x8900, 0x04a8, 0x2001 },
+  { 0x0500, 0x04a7, 0x0fff },
+  { 0x0500, 0x04a9, 0x0fff },
+  { 0x8900, 0x04ac, 0x2001 },
+  { 0x0500, 0x04ab, 0x0fff },
+  { 0x0500, 0x04ad, 0x0fff },
+  { 0x8900, 0x04b2, 0x3001 },
+  { 0x8900, 0x04b0, 0x2001 },
+  { 0x0500, 0x04af, 0x0fff },
+  { 0x0500, 0x04b1, 0x0fff },
+  { 0x8900, 0x04b4, 0x2001 },
+  { 0x0500, 0x04b3, 0x0fff },
+  { 0x0500, 0x04b5, 0x0fff },
+  { 0x8500, 0x04f9, 0x7fff },
+  { 0x8500, 0x04d7, 0x6fff },
+  { 0x8500, 0x04c6, 0x5fff },
+  { 0x8900, 0x04be, 0x4001 },
+  { 0x8900, 0x04ba, 0x3001 },
+  { 0x8900, 0x04b8, 0x2001 },
+  { 0x0500, 0x04b7, 0x0fff },
+  { 0x0500, 0x04b9, 0x0fff },
+  { 0x8900, 0x04bc, 0x2001 },
+  { 0x0500, 0x04bb, 0x0fff },
+  { 0x0500, 0x04bd, 0x0fff },
+  { 0x8500, 0x04c2, 0x3fff },
+  { 0x8900, 0x04c0, 0x2000 },
+  { 0x0500, 0x04bf, 0x0fff },
+  { 0x0900, 0x04c1, 0x0001 },
+  { 0x8500, 0x04c4, 0x2fff },
+  { 0x0900, 0x04c3, 0x0001 },
+  { 0x0900, 0x04c5, 0x0001 },
+  { 0x8500, 0x04ce, 0x4fff },
+  { 0x8500, 0x04ca, 0x3fff },
+  { 0x8500, 0x04c8, 0x2fff },
+  { 0x0900, 0x04c7, 0x0001 },
+  { 0x0900, 0x04c9, 0x0001 },
+  { 0x8500, 0x04cc, 0x2fff },
+  { 0x0900, 0x04cb, 0x0001 },
+  { 0x0900, 0x04cd, 0x0001 },
+  { 0x8500, 0x04d3, 0x3fff },
+  { 0x8500, 0x04d1, 0x2fff },
+  { 0x0900, 0x04d0, 0x0001 },
+  { 0x0900, 0x04d2, 0x0001 },
+  { 0x8500, 0x04d5, 0x2fff },
+  { 0x0900, 0x04d4, 0x0001 },
+  { 0x0900, 0x04d6, 0x0001 },
+  { 0x8500, 0x04e7, 0x5fff },
+  { 0x8500, 0x04df, 0x4fff },
+  { 0x8500, 0x04db, 0x3fff },
+  { 0x8500, 0x04d9, 0x2fff },
+  { 0x0900, 0x04d8, 0x0001 },
+  { 0x0900, 0x04da, 0x0001 },
+  { 0x8500, 0x04dd, 0x2fff },
+  { 0x0900, 0x04dc, 0x0001 },
+  { 0x0900, 0x04de, 0x0001 },
+  { 0x8500, 0x04e3, 0x3fff },
+  { 0x8500, 0x04e1, 0x2fff },
+  { 0x0900, 0x04e0, 0x0001 },
+  { 0x0900, 0x04e2, 0x0001 },
+  { 0x8500, 0x04e5, 0x2fff },
+  { 0x0900, 0x04e4, 0x0001 },
+  { 0x0900, 0x04e6, 0x0001 },
+  { 0x8500, 0x04ef, 0x4fff },
+  { 0x8500, 0x04eb, 0x3fff },
+  { 0x8500, 0x04e9, 0x2fff },
+  { 0x0900, 0x04e8, 0x0001 },
+  { 0x0900, 0x04ea, 0x0001 },
+  { 0x8500, 0x04ed, 0x2fff },
+  { 0x0900, 0x04ec, 0x0001 },
+  { 0x0900, 0x04ee, 0x0001 },
+  { 0x8500, 0x04f3, 0x3fff },
+  { 0x8500, 0x04f1, 0x2fff },
+  { 0x0900, 0x04f0, 0x0001 },
+  { 0x0900, 0x04f2, 0x0001 },
+  { 0x8500, 0x04f5, 0x2fff },
+  { 0x0900, 0x04f4, 0x0001 },
+  { 0x0900, 0x04f8, 0x0001 },
+  { 0x8900, 0x0540, 0x6030 },
+  { 0x8500, 0x050f, 0x5fff },
+  { 0x8500, 0x0507, 0x4fff },
+  { 0x8500, 0x0503, 0x3fff },
+  { 0x8500, 0x0501, 0x2fff },
+  { 0x0900, 0x0500, 0x0001 },
+  { 0x0900, 0x0502, 0x0001 },
+  { 0x8500, 0x0505, 0x2fff },
+  { 0x0900, 0x0504, 0x0001 },
+  { 0x0900, 0x0506, 0x0001 },
+  { 0x8500, 0x050b, 0x3fff },
+  { 0x8500, 0x0509, 0x2fff },
+  { 0x0900, 0x0508, 0x0001 },
+  { 0x0900, 0x050a, 0x0001 },
+  { 0x8500, 0x050d, 0x2fff },
+  { 0x0900, 0x050c, 0x0001 },
+  { 0x0900, 0x050e, 0x0001 },
+  { 0x8900, 0x0538, 0x4030 },
+  { 0x8900, 0x0534, 0x3030 },
+  { 0x8900, 0x0532, 0x2030 },
+  { 0x0900, 0x0531, 0x0030 },
+  { 0x0900, 0x0533, 0x0030 },
+  { 0x8900, 0x0536, 0x2030 },
+  { 0x0900, 0x0535, 0x0030 },
+  { 0x0900, 0x0537, 0x0030 },
+  { 0x8900, 0x053c, 0x3030 },
+  { 0x8900, 0x053a, 0x2030 },
+  { 0x0900, 0x0539, 0x0030 },
+  { 0x0900, 0x053b, 0x0030 },
+  { 0x8900, 0x053e, 0x2030 },
+  { 0x0900, 0x053d, 0x0030 },
+  { 0x0900, 0x053f, 0x0030 },
+  { 0x8900, 0x0550, 0x5030 },
+  { 0x8900, 0x0548, 0x4030 },
+  { 0x8900, 0x0544, 0x3030 },
+  { 0x8900, 0x0542, 0x2030 },
+  { 0x0900, 0x0541, 0x0030 },
+  { 0x0900, 0x0543, 0x0030 },
+  { 0x8900, 0x0546, 0x2030 },
+  { 0x0900, 0x0545, 0x0030 },
+  { 0x0900, 0x0547, 0x0030 },
+  { 0x8900, 0x054c, 0x3030 },
+  { 0x8900, 0x054a, 0x2030 },
+  { 0x0900, 0x0549, 0x0030 },
+  { 0x0900, 0x054b, 0x0030 },
+  { 0x8900, 0x054e, 0x2030 },
+  { 0x0900, 0x054d, 0x0030 },
+  { 0x0900, 0x054f, 0x0030 },
+  { 0x9500, 0x055a, 0x4000 },
+  { 0x8900, 0x0554, 0x3030 },
+  { 0x8900, 0x0552, 0x2030 },
+  { 0x0900, 0x0551, 0x0030 },
+  { 0x0900, 0x0553, 0x0030 },
+  { 0x8900, 0x0556, 0x2030 },
+  { 0x0900, 0x0555, 0x0030 },
+  { 0x0600, 0x0559, 0x0000 },
+  { 0x9500, 0x055e, 0x3000 },
+  { 0x9500, 0x055c, 0x2000 },
+  { 0x1500, 0x055b, 0x0000 },
+  { 0x1500, 0x055d, 0x0000 },
+  { 0x8500, 0x0561, 0x2fd0 },
+  { 0x1500, 0x055f, 0x0000 },
+  { 0x0500, 0x0562, 0x0fd0 },
+  { 0x9a00, 0x060f, 0x8000 },
+  { 0x8c00, 0x05ab, 0x7000 },
+  { 0x8500, 0x0583, 0x6fd0 },
+  { 0x8500, 0x0573, 0x5fd0 },
+  { 0x8500, 0x056b, 0x4fd0 },
+  { 0x8500, 0x0567, 0x3fd0 },
+  { 0x8500, 0x0565, 0x2fd0 },
+  { 0x0500, 0x0564, 0x0fd0 },
+  { 0x0500, 0x0566, 0x0fd0 },
+  { 0x8500, 0x0569, 0x2fd0 },
+  { 0x0500, 0x0568, 0x0fd0 },
+  { 0x0500, 0x056a, 0x0fd0 },
+  { 0x8500, 0x056f, 0x3fd0 },
+  { 0x8500, 0x056d, 0x2fd0 },
+  { 0x0500, 0x056c, 0x0fd0 },
+  { 0x0500, 0x056e, 0x0fd0 },
+  { 0x8500, 0x0571, 0x2fd0 },
+  { 0x0500, 0x0570, 0x0fd0 },
+  { 0x0500, 0x0572, 0x0fd0 },
+  { 0x8500, 0x057b, 0x4fd0 },
+  { 0x8500, 0x0577, 0x3fd0 },
+  { 0x8500, 0x0575, 0x2fd0 },
+  { 0x0500, 0x0574, 0x0fd0 },
+  { 0x0500, 0x0576, 0x0fd0 },
+  { 0x8500, 0x0579, 0x2fd0 },
+  { 0x0500, 0x0578, 0x0fd0 },
+  { 0x0500, 0x057a, 0x0fd0 },
+  { 0x8500, 0x057f, 0x3fd0 },
+  { 0x8500, 0x057d, 0x2fd0 },
+  { 0x0500, 0x057c, 0x0fd0 },
+  { 0x0500, 0x057e, 0x0fd0 },
+  { 0x8500, 0x0581, 0x2fd0 },
+  { 0x0500, 0x0580, 0x0fd0 },
+  { 0x0500, 0x0582, 0x0fd0 },
+  { 0x8c00, 0x059a, 0x5000 },
+  { 0x8c00, 0x0592, 0x4000 },
+  { 0x8500, 0x0587, 0x3000 },
+  { 0x8500, 0x0585, 0x2fd0 },
+  { 0x0500, 0x0584, 0x0fd0 },
+  { 0x0500, 0x0586, 0x0fd0 },
+  { 0x9100, 0x058a, 0x2000 },
+  { 0x1500, 0x0589, 0x0000 },
+  { 0x0c00, 0x0591, 0x0000 },
+  { 0x8c00, 0x0596, 0x3000 },
+  { 0x8c00, 0x0594, 0x2000 },
+  { 0x0c00, 0x0593, 0x0000 },
+  { 0x0c00, 0x0595, 0x0000 },
+  { 0x8c00, 0x0598, 0x2000 },
+  { 0x0c00, 0x0597, 0x0000 },
+  { 0x0c00, 0x0599, 0x0000 },
+  { 0x8c00, 0x05a3, 0x4000 },
+  { 0x8c00, 0x059e, 0x3000 },
+  { 0x8c00, 0x059c, 0x2000 },
+  { 0x0c00, 0x059b, 0x0000 },
+  { 0x0c00, 0x059d, 0x0000 },
+  { 0x8c00, 0x05a0, 0x2000 },
+  { 0x0c00, 0x059f, 0x0000 },
+  { 0x0c00, 0x05a1, 0x0000 },
+  { 0x8c00, 0x05a7, 0x3000 },
+  { 0x8c00, 0x05a5, 0x2000 },
+  { 0x0c00, 0x05a4, 0x0000 },
+  { 0x0c00, 0x05a6, 0x0000 },
+  { 0x8c00, 0x05a9, 0x2000 },
+  { 0x0c00, 0x05a8, 0x0000 },
+  { 0x0c00, 0x05aa, 0x0000 },
+  { 0x8700, 0x05d7, 0x6000 },
+  { 0x8c00, 0x05bc, 0x5000 },
+  { 0x8c00, 0x05b3, 0x4000 },
+  { 0x8c00, 0x05af, 0x3000 },
+  { 0x8c00, 0x05ad, 0x2000 },
+  { 0x0c00, 0x05ac, 0x0000 },
+  { 0x0c00, 0x05ae, 0x0000 },
+  { 0x8c00, 0x05b1, 0x2000 },
+  { 0x0c00, 0x05b0, 0x0000 },
+  { 0x0c00, 0x05b2, 0x0000 },
+  { 0x8c00, 0x05b7, 0x3000 },
+  { 0x8c00, 0x05b5, 0x2000 },
+  { 0x0c00, 0x05b4, 0x0000 },
+  { 0x0c00, 0x05b6, 0x0000 },
+  { 0x8c00, 0x05b9, 0x2000 },
+  { 0x0c00, 0x05b8, 0x0000 },
+  { 0x0c00, 0x05bb, 0x0000 },
+  { 0x8c00, 0x05c4, 0x4000 },
+  { 0x9500, 0x05c0, 0x3000 },
+  { 0x9500, 0x05be, 0x2000 },
+  { 0x0c00, 0x05bd, 0x0000 },
+  { 0x0c00, 0x05bf, 0x0000 },
+  { 0x8c00, 0x05c2, 0x2000 },
+  { 0x0c00, 0x05c1, 0x0000 },
+  { 0x1500, 0x05c3, 0x0000 },
+  { 0x8700, 0x05d3, 0x3000 },
+  { 0x8700, 0x05d1, 0x2000 },
+  { 0x0700, 0x05d0, 0x0000 },
+  { 0x0700, 0x05d2, 0x0000 },
+  { 0x8700, 0x05d5, 0x2000 },
+  { 0x0700, 0x05d4, 0x0000 },
+  { 0x0700, 0x05d6, 0x0000 },
+  { 0x8700, 0x05e7, 0x5000 },
+  { 0x8700, 0x05df, 0x4000 },
+  { 0x8700, 0x05db, 0x3000 },
+  { 0x8700, 0x05d9, 0x2000 },
+  { 0x0700, 0x05d8, 0x0000 },
+  { 0x0700, 0x05da, 0x0000 },
+  { 0x8700, 0x05dd, 0x2000 },
+  { 0x0700, 0x05dc, 0x0000 },
+  { 0x0700, 0x05de, 0x0000 },
+  { 0x8700, 0x05e3, 0x3000 },
+  { 0x8700, 0x05e1, 0x2000 },
+  { 0x0700, 0x05e0, 0x0000 },
+  { 0x0700, 0x05e2, 0x0000 },
+  { 0x8700, 0x05e5, 0x2000 },
+  { 0x0700, 0x05e4, 0x0000 },
+  { 0x0700, 0x05e6, 0x0000 },
+  { 0x9500, 0x05f4, 0x4000 },
+  { 0x8700, 0x05f0, 0x3000 },
+  { 0x8700, 0x05e9, 0x2000 },
+  { 0x0700, 0x05e8, 0x0000 },
+  { 0x0700, 0x05ea, 0x0000 },
+  { 0x8700, 0x05f2, 0x2000 },
+  { 0x0700, 0x05f1, 0x0000 },
+  { 0x1500, 0x05f3, 0x0000 },
+  { 0x8100, 0x0603, 0x3000 },
+  { 0x8100, 0x0601, 0x2000 },
+  { 0x0100, 0x0600, 0x0000 },
+  { 0x0100, 0x0602, 0x0000 },
+  { 0x9500, 0x060d, 0x2000 },
+  { 0x1500, 0x060c, 0x0000 },
+  { 0x1a00, 0x060e, 0x0000 },
+  { 0x8d00, 0x0664, 0x7000 },
+  { 0x8700, 0x0638, 0x6000 },
+  { 0x8700, 0x0628, 0x5000 },
+  { 0x9500, 0x061f, 0x4000 },
+  { 0x8c00, 0x0613, 0x3000 },
+  { 0x8c00, 0x0611, 0x2000 },
+  { 0x0c00, 0x0610, 0x0000 },
+  { 0x0c00, 0x0612, 0x0000 },
+  { 0x8c00, 0x0615, 0x2000 },
+  { 0x0c00, 0x0614, 0x0000 },
+  { 0x1500, 0x061b, 0x0000 },
+  { 0x8700, 0x0624, 0x3000 },
+  { 0x8700, 0x0622, 0x2000 },
+  { 0x0700, 0x0621, 0x0000 },
+  { 0x0700, 0x0623, 0x0000 },
+  { 0x8700, 0x0626, 0x2000 },
+  { 0x0700, 0x0625, 0x0000 },
+  { 0x0700, 0x0627, 0x0000 },
+  { 0x8700, 0x0630, 0x4000 },
+  { 0x8700, 0x062c, 0x3000 },
+  { 0x8700, 0x062a, 0x2000 },
+  { 0x0700, 0x0629, 0x0000 },
+  { 0x0700, 0x062b, 0x0000 },
+  { 0x8700, 0x062e, 0x2000 },
+  { 0x0700, 0x062d, 0x0000 },
+  { 0x0700, 0x062f, 0x0000 },
+  { 0x8700, 0x0634, 0x3000 },
+  { 0x8700, 0x0632, 0x2000 },
+  { 0x0700, 0x0631, 0x0000 },
+  { 0x0700, 0x0633, 0x0000 },
+  { 0x8700, 0x0636, 0x2000 },
+  { 0x0700, 0x0635, 0x0000 },
+  { 0x0700, 0x0637, 0x0000 },
+  { 0x8c00, 0x064d, 0x5000 },
+  { 0x8700, 0x0645, 0x4000 },
+  { 0x8700, 0x0641, 0x3000 },
+  { 0x8700, 0x063a, 0x2000 },
+  { 0x0700, 0x0639, 0x0000 },
+  { 0x0600, 0x0640, 0x0000 },
+  { 0x8700, 0x0643, 0x2000 },
+  { 0x0700, 0x0642, 0x0000 },
+  { 0x0700, 0x0644, 0x0000 },
+  { 0x8700, 0x0649, 0x3000 },
+  { 0x8700, 0x0647, 0x2000 },
+  { 0x0700, 0x0646, 0x0000 },
+  { 0x0700, 0x0648, 0x0000 },
+  { 0x8c00, 0x064b, 0x2000 },
+  { 0x0700, 0x064a, 0x0000 },
+  { 0x0c00, 0x064c, 0x0000 },
+  { 0x8c00, 0x0655, 0x4000 },
+  { 0x8c00, 0x0651, 0x3000 },
+  { 0x8c00, 0x064f, 0x2000 },
+  { 0x0c00, 0x064e, 0x0000 },
+  { 0x0c00, 0x0650, 0x0000 },
+  { 0x8c00, 0x0653, 0x2000 },
+  { 0x0c00, 0x0652, 0x0000 },
+  { 0x0c00, 0x0654, 0x0000 },
+  { 0x8d00, 0x0660, 0x3000 },
+  { 0x8c00, 0x0657, 0x2000 },
+  { 0x0c00, 0x0656, 0x0000 },
+  { 0x0c00, 0x0658, 0x0000 },
+  { 0x8d00, 0x0662, 0x2000 },
+  { 0x0d00, 0x0661, 0x0000 },
+  { 0x0d00, 0x0663, 0x0000 },
+  { 0x8700, 0x0684, 0x6000 },
+  { 0x8700, 0x0674, 0x5000 },
+  { 0x9500, 0x066c, 0x4000 },
+  { 0x8d00, 0x0668, 0x3000 },
+  { 0x8d00, 0x0666, 0x2000 },
+  { 0x0d00, 0x0665, 0x0000 },
+  { 0x0d00, 0x0667, 0x0000 },
+  { 0x9500, 0x066a, 0x2000 },
+  { 0x0d00, 0x0669, 0x0000 },
+  { 0x1500, 0x066b, 0x0000 },
+  { 0x8c00, 0x0670, 0x3000 },
+  { 0x8700, 0x066e, 0x2000 },
+  { 0x1500, 0x066d, 0x0000 },
+  { 0x0700, 0x066f, 0x0000 },
+  { 0x8700, 0x0672, 0x2000 },
+  { 0x0700, 0x0671, 0x0000 },
+  { 0x0700, 0x0673, 0x0000 },
+  { 0x8700, 0x067c, 0x4000 },
+  { 0x8700, 0x0678, 0x3000 },
+  { 0x8700, 0x0676, 0x2000 },
+  { 0x0700, 0x0675, 0x0000 },
+  { 0x0700, 0x0677, 0x0000 },
+  { 0x8700, 0x067a, 0x2000 },
+  { 0x0700, 0x0679, 0x0000 },
+  { 0x0700, 0x067b, 0x0000 },
+  { 0x8700, 0x0680, 0x3000 },
+  { 0x8700, 0x067e, 0x2000 },
+  { 0x0700, 0x067d, 0x0000 },
+  { 0x0700, 0x067f, 0x0000 },
+  { 0x8700, 0x0682, 0x2000 },
+  { 0x0700, 0x0681, 0x0000 },
+  { 0x0700, 0x0683, 0x0000 },
+  { 0x8700, 0x0694, 0x5000 },
+  { 0x8700, 0x068c, 0x4000 },
+  { 0x8700, 0x0688, 0x3000 },
+  { 0x8700, 0x0686, 0x2000 },
+  { 0x0700, 0x0685, 0x0000 },
+  { 0x0700, 0x0687, 0x0000 },
+  { 0x8700, 0x068a, 0x2000 },
+  { 0x0700, 0x0689, 0x0000 },
+  { 0x0700, 0x068b, 0x0000 },
+  { 0x8700, 0x0690, 0x3000 },
+  { 0x8700, 0x068e, 0x2000 },
+  { 0x0700, 0x068d, 0x0000 },
+  { 0x0700, 0x068f, 0x0000 },
+  { 0x8700, 0x0692, 0x2000 },
+  { 0x0700, 0x0691, 0x0000 },
+  { 0x0700, 0x0693, 0x0000 },
+  { 0x8700, 0x069c, 0x4000 },
+  { 0x8700, 0x0698, 0x3000 },
+  { 0x8700, 0x0696, 0x2000 },
+  { 0x0700, 0x0695, 0x0000 },
+  { 0x0700, 0x0697, 0x0000 },
+  { 0x8700, 0x069a, 0x2000 },
+  { 0x0700, 0x0699, 0x0000 },
+  { 0x0700, 0x069b, 0x0000 },
+  { 0x8700, 0x06a0, 0x3000 },
+  { 0x8700, 0x069e, 0x2000 },
+  { 0x0700, 0x069d, 0x0000 },
+  { 0x0700, 0x069f, 0x0000 },
+  { 0x8700, 0x06a2, 0x2000 },
+  { 0x0700, 0x06a1, 0x0000 },
+  { 0x0700, 0x06a3, 0x0000 },
+  { 0x8700, 0x0926, 0x9000 },
+  { 0x8700, 0x0725, 0x8000 },
+  { 0x8c00, 0x06e4, 0x7000 },
+  { 0x8700, 0x06c4, 0x6000 },
+  { 0x8700, 0x06b4, 0x5000 },
+  { 0x8700, 0x06ac, 0x4000 },
+  { 0x8700, 0x06a8, 0x3000 },
+  { 0x8700, 0x06a6, 0x2000 },
+  { 0x0700, 0x06a5, 0x0000 },
+  { 0x0700, 0x06a7, 0x0000 },
+  { 0x8700, 0x06aa, 0x2000 },
+  { 0x0700, 0x06a9, 0x0000 },
+  { 0x0700, 0x06ab, 0x0000 },
+  { 0x8700, 0x06b0, 0x3000 },
+  { 0x8700, 0x06ae, 0x2000 },
+  { 0x0700, 0x06ad, 0x0000 },
+  { 0x0700, 0x06af, 0x0000 },
+  { 0x8700, 0x06b2, 0x2000 },
+  { 0x0700, 0x06b1, 0x0000 },
+  { 0x0700, 0x06b3, 0x0000 },
+  { 0x8700, 0x06bc, 0x4000 },
+  { 0x8700, 0x06b8, 0x3000 },
+  { 0x8700, 0x06b6, 0x2000 },
+  { 0x0700, 0x06b5, 0x0000 },
+  { 0x0700, 0x06b7, 0x0000 },
+  { 0x8700, 0x06ba, 0x2000 },
+  { 0x0700, 0x06b9, 0x0000 },
+  { 0x0700, 0x06bb, 0x0000 },
+  { 0x8700, 0x06c0, 0x3000 },
+  { 0x8700, 0x06be, 0x2000 },
+  { 0x0700, 0x06bd, 0x0000 },
+  { 0x0700, 0x06bf, 0x0000 },
+  { 0x8700, 0x06c2, 0x2000 },
+  { 0x0700, 0x06c1, 0x0000 },
+  { 0x0700, 0x06c3, 0x0000 },
+  { 0x9500, 0x06d4, 0x5000 },
+  { 0x8700, 0x06cc, 0x4000 },
+  { 0x8700, 0x06c8, 0x3000 },
+  { 0x8700, 0x06c6, 0x2000 },
+  { 0x0700, 0x06c5, 0x0000 },
+  { 0x0700, 0x06c7, 0x0000 },
+  { 0x8700, 0x06ca, 0x2000 },
+  { 0x0700, 0x06c9, 0x0000 },
+  { 0x0700, 0x06cb, 0x0000 },
+  { 0x8700, 0x06d0, 0x3000 },
+  { 0x8700, 0x06ce, 0x2000 },
+  { 0x0700, 0x06cd, 0x0000 },
+  { 0x0700, 0x06cf, 0x0000 },
+  { 0x8700, 0x06d2, 0x2000 },
+  { 0x0700, 0x06d1, 0x0000 },
+  { 0x0700, 0x06d3, 0x0000 },
+  { 0x8c00, 0x06dc, 0x4000 },
+  { 0x8c00, 0x06d8, 0x3000 },
+  { 0x8c00, 0x06d6, 0x2000 },
+  { 0x0700, 0x06d5, 0x0000 },
+  { 0x0c00, 0x06d7, 0x0000 },
+  { 0x8c00, 0x06da, 0x2000 },
+  { 0x0c00, 0x06d9, 0x0000 },
+  { 0x0c00, 0x06db, 0x0000 },
+  { 0x8c00, 0x06e0, 0x3000 },
+  { 0x8b00, 0x06de, 0x2000 },
+  { 0x0100, 0x06dd, 0x0000 },
+  { 0x0c00, 0x06df, 0x0000 },
+  { 0x8c00, 0x06e2, 0x2000 },
+  { 0x0c00, 0x06e1, 0x0000 },
+  { 0x0c00, 0x06e3, 0x0000 },
+  { 0x9500, 0x0704, 0x6000 },
+  { 0x8d00, 0x06f4, 0x5000 },
+  { 0x8c00, 0x06ec, 0x4000 },
+  { 0x8c00, 0x06e8, 0x3000 },
+  { 0x8600, 0x06e6, 0x2000 },
+  { 0x0600, 0x06e5, 0x0000 },
+  { 0x0c00, 0x06e7, 0x0000 },
+  { 0x8c00, 0x06ea, 0x2000 },
+  { 0x1a00, 0x06e9, 0x0000 },
+  { 0x0c00, 0x06eb, 0x0000 },
+  { 0x8d00, 0x06f0, 0x3000 },
+  { 0x8700, 0x06ee, 0x2000 },
+  { 0x0c00, 0x06ed, 0x0000 },
+  { 0x0700, 0x06ef, 0x0000 },
+  { 0x8d00, 0x06f2, 0x2000 },
+  { 0x0d00, 0x06f1, 0x0000 },
+  { 0x0d00, 0x06f3, 0x0000 },
+  { 0x8700, 0x06fc, 0x4000 },
+  { 0x8d00, 0x06f8, 0x3000 },
+  { 0x8d00, 0x06f6, 0x2000 },
+  { 0x0d00, 0x06f5, 0x0000 },
+  { 0x0d00, 0x06f7, 0x0000 },
+  { 0x8700, 0x06fa, 0x2000 },
+  { 0x0d00, 0x06f9, 0x0000 },
+  { 0x0700, 0x06fb, 0x0000 },
+  { 0x9500, 0x0700, 0x3000 },
+  { 0x9a00, 0x06fe, 0x2000 },
+  { 0x1a00, 0x06fd, 0x0000 },
+  { 0x0700, 0x06ff, 0x0000 },
+  { 0x9500, 0x0702, 0x2000 },
+  { 0x1500, 0x0701, 0x0000 },
+  { 0x1500, 0x0703, 0x0000 },
+  { 0x8700, 0x0715, 0x5000 },
+  { 0x9500, 0x070c, 0x4000 },
+  { 0x9500, 0x0708, 0x3000 },
+  { 0x9500, 0x0706, 0x2000 },
+  { 0x1500, 0x0705, 0x0000 },
+  { 0x1500, 0x0707, 0x0000 },
+  { 0x9500, 0x070a, 0x2000 },
+  { 0x1500, 0x0709, 0x0000 },
+  { 0x1500, 0x070b, 0x0000 },
+  { 0x8c00, 0x0711, 0x3000 },
+  { 0x8100, 0x070f, 0x2000 },
+  { 0x1500, 0x070d, 0x0000 },
+  { 0x0700, 0x0710, 0x0000 },
+  { 0x8700, 0x0713, 0x2000 },
+  { 0x0700, 0x0712, 0x0000 },
+  { 0x0700, 0x0714, 0x0000 },
+  { 0x8700, 0x071d, 0x4000 },
+  { 0x8700, 0x0719, 0x3000 },
+  { 0x8700, 0x0717, 0x2000 },
+  { 0x0700, 0x0716, 0x0000 },
+  { 0x0700, 0x0718, 0x0000 },
+  { 0x8700, 0x071b, 0x2000 },
+  { 0x0700, 0x071a, 0x0000 },
+  { 0x0700, 0x071c, 0x0000 },
+  { 0x8700, 0x0721, 0x3000 },
+  { 0x8700, 0x071f, 0x2000 },
+  { 0x0700, 0x071e, 0x0000 },
+  { 0x0700, 0x0720, 0x0000 },
+  { 0x8700, 0x0723, 0x2000 },
+  { 0x0700, 0x0722, 0x0000 },
+  { 0x0700, 0x0724, 0x0000 },
+  { 0x8700, 0x0797, 0x7000 },
+  { 0x8c00, 0x0745, 0x6000 },
+  { 0x8c00, 0x0735, 0x5000 },
+  { 0x8700, 0x072d, 0x4000 },
+  { 0x8700, 0x0729, 0x3000 },
+  { 0x8700, 0x0727, 0x2000 },
+  { 0x0700, 0x0726, 0x0000 },
+  { 0x0700, 0x0728, 0x0000 },
+  { 0x8700, 0x072b, 0x2000 },
+  { 0x0700, 0x072a, 0x0000 },
+  { 0x0700, 0x072c, 0x0000 },
+  { 0x8c00, 0x0731, 0x3000 },
+  { 0x8700, 0x072f, 0x2000 },
+  { 0x0700, 0x072e, 0x0000 },
+  { 0x0c00, 0x0730, 0x0000 },
+  { 0x8c00, 0x0733, 0x2000 },
+  { 0x0c00, 0x0732, 0x0000 },
+  { 0x0c00, 0x0734, 0x0000 },
+  { 0x8c00, 0x073d, 0x4000 },
+  { 0x8c00, 0x0739, 0x3000 },
+  { 0x8c00, 0x0737, 0x2000 },
+  { 0x0c00, 0x0736, 0x0000 },
+  { 0x0c00, 0x0738, 0x0000 },
+  { 0x8c00, 0x073b, 0x2000 },
+  { 0x0c00, 0x073a, 0x0000 },
+  { 0x0c00, 0x073c, 0x0000 },
+  { 0x8c00, 0x0741, 0x3000 },
+  { 0x8c00, 0x073f, 0x2000 },
+  { 0x0c00, 0x073e, 0x0000 },
+  { 0x0c00, 0x0740, 0x0000 },
+  { 0x8c00, 0x0743, 0x2000 },
+  { 0x0c00, 0x0742, 0x0000 },
+  { 0x0c00, 0x0744, 0x0000 },
+  { 0x8700, 0x0787, 0x5000 },
+  { 0x8700, 0x074f, 0x4000 },
+  { 0x8c00, 0x0749, 0x3000 },
+  { 0x8c00, 0x0747, 0x2000 },
+  { 0x0c00, 0x0746, 0x0000 },
+  { 0x0c00, 0x0748, 0x0000 },
+  { 0x8700, 0x074d, 0x2000 },
+  { 0x0c00, 0x074a, 0x0000 },
+  { 0x0700, 0x074e, 0x0000 },
+  { 0x8700, 0x0783, 0x3000 },
+  { 0x8700, 0x0781, 0x2000 },
+  { 0x0700, 0x0780, 0x0000 },
+  { 0x0700, 0x0782, 0x0000 },
+  { 0x8700, 0x0785, 0x2000 },
+  { 0x0700, 0x0784, 0x0000 },
+  { 0x0700, 0x0786, 0x0000 },
+  { 0x8700, 0x078f, 0x4000 },
+  { 0x8700, 0x078b, 0x3000 },
+  { 0x8700, 0x0789, 0x2000 },
+  { 0x0700, 0x0788, 0x0000 },
+  { 0x0700, 0x078a, 0x0000 },
+  { 0x8700, 0x078d, 0x2000 },
+  { 0x0700, 0x078c, 0x0000 },
+  { 0x0700, 0x078e, 0x0000 },
+  { 0x8700, 0x0793, 0x3000 },
+  { 0x8700, 0x0791, 0x2000 },
+  { 0x0700, 0x0790, 0x0000 },
+  { 0x0700, 0x0792, 0x0000 },
+  { 0x8700, 0x0795, 0x2000 },
+  { 0x0700, 0x0794, 0x0000 },
+  { 0x0700, 0x0796, 0x0000 },
+  { 0x8700, 0x0906, 0x6000 },
+  { 0x8c00, 0x07a7, 0x5000 },
+  { 0x8700, 0x079f, 0x4000 },
+  { 0x8700, 0x079b, 0x3000 },
+  { 0x8700, 0x0799, 0x2000 },
+  { 0x0700, 0x0798, 0x0000 },
+  { 0x0700, 0x079a, 0x0000 },
+  { 0x8700, 0x079d, 0x2000 },
+  { 0x0700, 0x079c, 0x0000 },
+  { 0x0700, 0x079e, 0x0000 },
+  { 0x8700, 0x07a3, 0x3000 },
+  { 0x8700, 0x07a1, 0x2000 },
+  { 0x0700, 0x07a0, 0x0000 },
+  { 0x0700, 0x07a2, 0x0000 },
+  { 0x8700, 0x07a5, 0x2000 },
+  { 0x0700, 0x07a4, 0x0000 },
+  { 0x0c00, 0x07a6, 0x0000 },
+  { 0x8c00, 0x07af, 0x4000 },
+  { 0x8c00, 0x07ab, 0x3000 },
+  { 0x8c00, 0x07a9, 0x2000 },
+  { 0x0c00, 0x07a8, 0x0000 },
+  { 0x0c00, 0x07aa, 0x0000 },
+  { 0x8c00, 0x07ad, 0x2000 },
+  { 0x0c00, 0x07ac, 0x0000 },
+  { 0x0c00, 0x07ae, 0x0000 },
+  { 0x8c00, 0x0902, 0x3000 },
+  { 0x8700, 0x07b1, 0x2000 },
+  { 0x0c00, 0x07b0, 0x0000 },
+  { 0x0c00, 0x0901, 0x0000 },
+  { 0x8700, 0x0904, 0x2000 },
+  { 0x0a00, 0x0903, 0x0000 },
+  { 0x0700, 0x0905, 0x0000 },
+  { 0x8700, 0x0916, 0x5000 },
+  { 0x8700, 0x090e, 0x4000 },
+  { 0x8700, 0x090a, 0x3000 },
+  { 0x8700, 0x0908, 0x2000 },
+  { 0x0700, 0x0907, 0x0000 },
+  { 0x0700, 0x0909, 0x0000 },
+  { 0x8700, 0x090c, 0x2000 },
+  { 0x0700, 0x090b, 0x0000 },
+  { 0x0700, 0x090d, 0x0000 },
+  { 0x8700, 0x0912, 0x3000 },
+  { 0x8700, 0x0910, 0x2000 },
+  { 0x0700, 0x090f, 0x0000 },
+  { 0x0700, 0x0911, 0x0000 },
+  { 0x8700, 0x0914, 0x2000 },
+  { 0x0700, 0x0913, 0x0000 },
+  { 0x0700, 0x0915, 0x0000 },
+  { 0x8700, 0x091e, 0x4000 },
+  { 0x8700, 0x091a, 0x3000 },
+  { 0x8700, 0x0918, 0x2000 },
+  { 0x0700, 0x0917, 0x0000 },
+  { 0x0700, 0x0919, 0x0000 },
+  { 0x8700, 0x091c, 0x2000 },
+  { 0x0700, 0x091b, 0x0000 },
+  { 0x0700, 0x091d, 0x0000 },
+  { 0x8700, 0x0922, 0x3000 },
+  { 0x8700, 0x0920, 0x2000 },
+  { 0x0700, 0x091f, 0x0000 },
+  { 0x0700, 0x0921, 0x0000 },
+  { 0x8700, 0x0924, 0x2000 },
+  { 0x0700, 0x0923, 0x0000 },
+  { 0x0700, 0x0925, 0x0000 },
+  { 0x8c00, 0x09cd, 0x8000 },
+  { 0x8d00, 0x096d, 0x7000 },
+  { 0x8c00, 0x0948, 0x6000 },
+  { 0x8700, 0x0936, 0x5000 },
+  { 0x8700, 0x092e, 0x4000 },
+  { 0x8700, 0x092a, 0x3000 },
+  { 0x8700, 0x0928, 0x2000 },
+  { 0x0700, 0x0927, 0x0000 },
+  { 0x0700, 0x0929, 0x0000 },
+  { 0x8700, 0x092c, 0x2000 },
+  { 0x0700, 0x092b, 0x0000 },
+  { 0x0700, 0x092d, 0x0000 },
+  { 0x8700, 0x0932, 0x3000 },
+  { 0x8700, 0x0930, 0x2000 },
+  { 0x0700, 0x092f, 0x0000 },
+  { 0x0700, 0x0931, 0x0000 },
+  { 0x8700, 0x0934, 0x2000 },
+  { 0x0700, 0x0933, 0x0000 },
+  { 0x0700, 0x0935, 0x0000 },
+  { 0x8a00, 0x0940, 0x4000 },
+  { 0x8c00, 0x093c, 0x3000 },
+  { 0x8700, 0x0938, 0x2000 },
+  { 0x0700, 0x0937, 0x0000 },
+  { 0x0700, 0x0939, 0x0000 },
+  { 0x8a00, 0x093e, 0x2000 },
+  { 0x0700, 0x093d, 0x0000 },
+  { 0x0a00, 0x093f, 0x0000 },
+  { 0x8c00, 0x0944, 0x3000 },
+  { 0x8c00, 0x0942, 0x2000 },
+  { 0x0c00, 0x0941, 0x0000 },
+  { 0x0c00, 0x0943, 0x0000 },
+  { 0x8c00, 0x0946, 0x2000 },
+  { 0x0c00, 0x0945, 0x0000 },
+  { 0x0c00, 0x0947, 0x0000 },
+  { 0x8700, 0x095d, 0x5000 },
+  { 0x8c00, 0x0952, 0x4000 },
+  { 0x8a00, 0x094c, 0x3000 },
+  { 0x8a00, 0x094a, 0x2000 },
+  { 0x0a00, 0x0949, 0x0000 },
+  { 0x0a00, 0x094b, 0x0000 },
+  { 0x8700, 0x0950, 0x2000 },
+  { 0x0c00, 0x094d, 0x0000 },
+  { 0x0c00, 0x0951, 0x0000 },
+  { 0x8700, 0x0959, 0x3000 },
+  { 0x8c00, 0x0954, 0x2000 },
+  { 0x0c00, 0x0953, 0x0000 },
+  { 0x0700, 0x0958, 0x0000 },
+  { 0x8700, 0x095b, 0x2000 },
+  { 0x0700, 0x095a, 0x0000 },
+  { 0x0700, 0x095c, 0x0000 },
+  { 0x9500, 0x0965, 0x4000 },
+  { 0x8700, 0x0961, 0x3000 },
+  { 0x8700, 0x095f, 0x2000 },
+  { 0x0700, 0x095e, 0x0000 },
+  { 0x0700, 0x0960, 0x0000 },
+  { 0x8c00, 0x0963, 0x2000 },
+  { 0x0c00, 0x0962, 0x0000 },
+  { 0x1500, 0x0964, 0x0000 },
+  { 0x8d00, 0x0969, 0x3000 },
+  { 0x8d00, 0x0967, 0x2000 },
+  { 0x0d00, 0x0966, 0x0000 },
+  { 0x0d00, 0x0968, 0x0000 },
+  { 0x8d00, 0x096b, 0x2000 },
+  { 0x0d00, 0x096a, 0x0000 },
+  { 0x0d00, 0x096c, 0x0000 },
+  { 0x8700, 0x09a2, 0x6000 },
+  { 0x8700, 0x0990, 0x5000 },
+  { 0x8700, 0x0986, 0x4000 },
+  { 0x8c00, 0x0981, 0x3000 },
+  { 0x8d00, 0x096f, 0x2000 },
+  { 0x0d00, 0x096e, 0x0000 },
+  { 0x1500, 0x0970, 0x0000 },
+  { 0x8a00, 0x0983, 0x2000 },
+  { 0x0a00, 0x0982, 0x0000 },
+  { 0x0700, 0x0985, 0x0000 },
+  { 0x8700, 0x098a, 0x3000 },
+  { 0x8700, 0x0988, 0x2000 },
+  { 0x0700, 0x0987, 0x0000 },
+  { 0x0700, 0x0989, 0x0000 },
+  { 0x8700, 0x098c, 0x2000 },
+  { 0x0700, 0x098b, 0x0000 },
+  { 0x0700, 0x098f, 0x0000 },
+  { 0x8700, 0x099a, 0x4000 },
+  { 0x8700, 0x0996, 0x3000 },
+  { 0x8700, 0x0994, 0x2000 },
+  { 0x0700, 0x0993, 0x0000 },
+  { 0x0700, 0x0995, 0x0000 },
+  { 0x8700, 0x0998, 0x2000 },
+  { 0x0700, 0x0997, 0x0000 },
+  { 0x0700, 0x0999, 0x0000 },
+  { 0x8700, 0x099e, 0x3000 },
+  { 0x8700, 0x099c, 0x2000 },
+  { 0x0700, 0x099b, 0x0000 },
+  { 0x0700, 0x099d, 0x0000 },
+  { 0x8700, 0x09a0, 0x2000 },
+  { 0x0700, 0x099f, 0x0000 },
+  { 0x0700, 0x09a1, 0x0000 },
+  { 0x8700, 0x09b7, 0x5000 },
+  { 0x8700, 0x09ab, 0x4000 },
+  { 0x8700, 0x09a6, 0x3000 },
+  { 0x8700, 0x09a4, 0x2000 },
+  { 0x0700, 0x09a3, 0x0000 },
+  { 0x0700, 0x09a5, 0x0000 },
+  { 0x8700, 0x09a8, 0x2000 },
+  { 0x0700, 0x09a7, 0x0000 },
+  { 0x0700, 0x09aa, 0x0000 },
+  { 0x8700, 0x09af, 0x3000 },
+  { 0x8700, 0x09ad, 0x2000 },
+  { 0x0700, 0x09ac, 0x0000 },
+  { 0x0700, 0x09ae, 0x0000 },
+  { 0x8700, 0x09b2, 0x2000 },
+  { 0x0700, 0x09b0, 0x0000 },
+  { 0x0700, 0x09b6, 0x0000 },
+  { 0x8c00, 0x09c1, 0x4000 },
+  { 0x8700, 0x09bd, 0x3000 },
+  { 0x8700, 0x09b9, 0x2000 },
+  { 0x0700, 0x09b8, 0x0000 },
+  { 0x0c00, 0x09bc, 0x0000 },
+  { 0x8a00, 0x09bf, 0x2000 },
+  { 0x0a00, 0x09be, 0x0000 },
+  { 0x0a00, 0x09c0, 0x0000 },
+  { 0x8a00, 0x09c7, 0x3000 },
+  { 0x8c00, 0x09c3, 0x2000 },
+  { 0x0c00, 0x09c2, 0x0000 },
+  { 0x0c00, 0x09c4, 0x0000 },
+  { 0x8a00, 0x09cb, 0x2000 },
+  { 0x0a00, 0x09c8, 0x0000 },
+  { 0x0a00, 0x09cc, 0x0000 },
+  { 0x8700, 0x0a2b, 0x7000 },
+  { 0x8a00, 0x0a03, 0x6000 },
+  { 0x8d00, 0x09ed, 0x5000 },
+  { 0x8c00, 0x09e3, 0x4000 },
+  { 0x8700, 0x09df, 0x3000 },
+  { 0x8700, 0x09dc, 0x2000 },
+  { 0x0a00, 0x09d7, 0x0000 },
+  { 0x0700, 0x09dd, 0x0000 },
+  { 0x8700, 0x09e1, 0x2000 },
+  { 0x0700, 0x09e0, 0x0000 },
+  { 0x0c00, 0x09e2, 0x0000 },
+  { 0x8d00, 0x09e9, 0x3000 },
+  { 0x8d00, 0x09e7, 0x2000 },
+  { 0x0d00, 0x09e6, 0x0000 },
+  { 0x0d00, 0x09e8, 0x0000 },
+  { 0x8d00, 0x09eb, 0x2000 },
+  { 0x0d00, 0x09ea, 0x0000 },
+  { 0x0d00, 0x09ec, 0x0000 },
+  { 0x8f00, 0x09f5, 0x4000 },
+  { 0x8700, 0x09f1, 0x3000 },
+  { 0x8d00, 0x09ef, 0x2000 },
+  { 0x0d00, 0x09ee, 0x0000 },
+  { 0x0700, 0x09f0, 0x0000 },
+  { 0x9700, 0x09f3, 0x2000 },
+  { 0x1700, 0x09f2, 0x0000 },
+  { 0x0f00, 0x09f4, 0x0000 },
+  { 0x8f00, 0x09f9, 0x3000 },
+  { 0x8f00, 0x09f7, 0x2000 },
+  { 0x0f00, 0x09f6, 0x0000 },
+  { 0x0f00, 0x09f8, 0x0000 },
+  { 0x8c00, 0x0a01, 0x2000 },
+  { 0x1a00, 0x09fa, 0x0000 },
+  { 0x0c00, 0x0a02, 0x0000 },
+  { 0x8700, 0x0a1a, 0x5000 },
+  { 0x8700, 0x0a10, 0x4000 },
+  { 0x8700, 0x0a08, 0x3000 },
+  { 0x8700, 0x0a06, 0x2000 },
+  { 0x0700, 0x0a05, 0x0000 },
+  { 0x0700, 0x0a07, 0x0000 },
+  { 0x8700, 0x0a0a, 0x2000 },
+  { 0x0700, 0x0a09, 0x0000 },
+  { 0x0700, 0x0a0f, 0x0000 },
+  { 0x8700, 0x0a16, 0x3000 },
+  { 0x8700, 0x0a14, 0x2000 },
+  { 0x0700, 0x0a13, 0x0000 },
+  { 0x0700, 0x0a15, 0x0000 },
+  { 0x8700, 0x0a18, 0x2000 },
+  { 0x0700, 0x0a17, 0x0000 },
+  { 0x0700, 0x0a19, 0x0000 },
+  { 0x8700, 0x0a22, 0x4000 },
+  { 0x8700, 0x0a1e, 0x3000 },
+  { 0x8700, 0x0a1c, 0x2000 },
+  { 0x0700, 0x0a1b, 0x0000 },
+  { 0x0700, 0x0a1d, 0x0000 },
+  { 0x8700, 0x0a20, 0x2000 },
+  { 0x0700, 0x0a1f, 0x0000 },
+  { 0x0700, 0x0a21, 0x0000 },
+  { 0x8700, 0x0a26, 0x3000 },
+  { 0x8700, 0x0a24, 0x2000 },
+  { 0x0700, 0x0a23, 0x0000 },
+  { 0x0700, 0x0a25, 0x0000 },
+  { 0x8700, 0x0a28, 0x2000 },
+  { 0x0700, 0x0a27, 0x0000 },
+  { 0x0700, 0x0a2a, 0x0000 },
+  { 0x8d00, 0x0a6a, 0x6000 },
+  { 0x8c00, 0x0a41, 0x5000 },
+  { 0x8700, 0x0a35, 0x4000 },
+  { 0x8700, 0x0a2f, 0x3000 },
+  { 0x8700, 0x0a2d, 0x2000 },
+  { 0x0700, 0x0a2c, 0x0000 },
+  { 0x0700, 0x0a2e, 0x0000 },
+  { 0x8700, 0x0a32, 0x2000 },
+  { 0x0700, 0x0a30, 0x0000 },
+  { 0x0700, 0x0a33, 0x0000 },
+  { 0x8c00, 0x0a3c, 0x3000 },
+  { 0x8700, 0x0a38, 0x2000 },
+  { 0x0700, 0x0a36, 0x0000 },
+  { 0x0700, 0x0a39, 0x0000 },
+  { 0x8a00, 0x0a3f, 0x2000 },
+  { 0x0a00, 0x0a3e, 0x0000 },
+  { 0x0a00, 0x0a40, 0x0000 },
+  { 0x8700, 0x0a5a, 0x4000 },
+  { 0x8c00, 0x0a4b, 0x3000 },
+  { 0x8c00, 0x0a47, 0x2000 },
+  { 0x0c00, 0x0a42, 0x0000 },
+  { 0x0c00, 0x0a48, 0x0000 },
+  { 0x8c00, 0x0a4d, 0x2000 },
+  { 0x0c00, 0x0a4c, 0x0000 },
+  { 0x0700, 0x0a59, 0x0000 },
+  { 0x8d00, 0x0a66, 0x3000 },
+  { 0x8700, 0x0a5c, 0x2000 },
+  { 0x0700, 0x0a5b, 0x0000 },
+  { 0x0700, 0x0a5e, 0x0000 },
+  { 0x8d00, 0x0a68, 0x2000 },
+  { 0x0d00, 0x0a67, 0x0000 },
+  { 0x0d00, 0x0a69, 0x0000 },
+  { 0x8700, 0x0a87, 0x5000 },
+  { 0x8700, 0x0a72, 0x4000 },
+  { 0x8d00, 0x0a6e, 0x3000 },
+  { 0x8d00, 0x0a6c, 0x2000 },
+  { 0x0d00, 0x0a6b, 0x0000 },
+  { 0x0d00, 0x0a6d, 0x0000 },
+  { 0x8c00, 0x0a70, 0x2000 },
+  { 0x0d00, 0x0a6f, 0x0000 },
+  { 0x0c00, 0x0a71, 0x0000 },
+  { 0x8c00, 0x0a82, 0x3000 },
+  { 0x8700, 0x0a74, 0x2000 },
+  { 0x0700, 0x0a73, 0x0000 },
+  { 0x0c00, 0x0a81, 0x0000 },
+  { 0x8700, 0x0a85, 0x2000 },
+  { 0x0a00, 0x0a83, 0x0000 },
+  { 0x0700, 0x0a86, 0x0000 },
+  { 0x8700, 0x0a90, 0x4000 },
+  { 0x8700, 0x0a8b, 0x3000 },
+  { 0x8700, 0x0a89, 0x2000 },
+  { 0x0700, 0x0a88, 0x0000 },
+  { 0x0700, 0x0a8a, 0x0000 },
+  { 0x8700, 0x0a8d, 0x2000 },
+  { 0x0700, 0x0a8c, 0x0000 },
+  { 0x0700, 0x0a8f, 0x0000 },
+  { 0x8700, 0x0a95, 0x3000 },
+  { 0x8700, 0x0a93, 0x2000 },
+  { 0x0700, 0x0a91, 0x0000 },
+  { 0x0700, 0x0a94, 0x0000 },
+  { 0x8700, 0x0a97, 0x2000 },
+  { 0x0700, 0x0a96, 0x0000 },
+  { 0x0700, 0x0a98, 0x0000 },
+  { 0x8700, 0x10ef, 0xb000 },
+  { 0x8700, 0x0dc6, 0xa000 },
+  { 0x8700, 0x0c31, 0x9000 },
+  { 0x8700, 0x0b5f, 0x8000 },
+  { 0x8a00, 0x0b03, 0x7000 },
+  { 0x8a00, 0x0abe, 0x6000 },
+  { 0x8700, 0x0aaa, 0x5000 },
+  { 0x8700, 0x0aa1, 0x4000 },
+  { 0x8700, 0x0a9d, 0x3000 },
+  { 0x8700, 0x0a9b, 0x2000 },
+  { 0x0700, 0x0a9a, 0x0000 },
+  { 0x0700, 0x0a9c, 0x0000 },
+  { 0x8700, 0x0a9f, 0x2000 },
+  { 0x0700, 0x0a9e, 0x0000 },
+  { 0x0700, 0x0aa0, 0x0000 },
+  { 0x8700, 0x0aa5, 0x3000 },
+  { 0x8700, 0x0aa3, 0x2000 },
+  { 0x0700, 0x0aa2, 0x0000 },
+  { 0x0700, 0x0aa4, 0x0000 },
+  { 0x8700, 0x0aa7, 0x2000 },
+  { 0x0700, 0x0aa6, 0x0000 },
+  { 0x0700, 0x0aa8, 0x0000 },
+  { 0x8700, 0x0ab3, 0x4000 },
+  { 0x8700, 0x0aae, 0x3000 },
+  { 0x8700, 0x0aac, 0x2000 },
+  { 0x0700, 0x0aab, 0x0000 },
+  { 0x0700, 0x0aad, 0x0000 },
+  { 0x8700, 0x0ab0, 0x2000 },
+  { 0x0700, 0x0aaf, 0x0000 },
+  { 0x0700, 0x0ab2, 0x0000 },
+  { 0x8700, 0x0ab8, 0x3000 },
+  { 0x8700, 0x0ab6, 0x2000 },
+  { 0x0700, 0x0ab5, 0x0000 },
+  { 0x0700, 0x0ab7, 0x0000 },
+  { 0x8c00, 0x0abc, 0x2000 },
+  { 0x0700, 0x0ab9, 0x0000 },
+  { 0x0700, 0x0abd, 0x0000 },
+  { 0x8700, 0x0ae1, 0x5000 },
+  { 0x8c00, 0x0ac7, 0x4000 },
+  { 0x8c00, 0x0ac2, 0x3000 },
+  { 0x8a00, 0x0ac0, 0x2000 },
+  { 0x0a00, 0x0abf, 0x0000 },
+  { 0x0c00, 0x0ac1, 0x0000 },
+  { 0x8c00, 0x0ac4, 0x2000 },
+  { 0x0c00, 0x0ac3, 0x0000 },
+  { 0x0c00, 0x0ac5, 0x0000 },
+  { 0x8a00, 0x0acc, 0x3000 },
+  { 0x8a00, 0x0ac9, 0x2000 },
+  { 0x0c00, 0x0ac8, 0x0000 },
+  { 0x0a00, 0x0acb, 0x0000 },
+  { 0x8700, 0x0ad0, 0x2000 },
+  { 0x0c00, 0x0acd, 0x0000 },
+  { 0x0700, 0x0ae0, 0x0000 },
+  { 0x8d00, 0x0aeb, 0x4000 },
+  { 0x8d00, 0x0ae7, 0x3000 },
+  { 0x8c00, 0x0ae3, 0x2000 },
+  { 0x0c00, 0x0ae2, 0x0000 },
+  { 0x0d00, 0x0ae6, 0x0000 },
+  { 0x8d00, 0x0ae9, 0x2000 },
+  { 0x0d00, 0x0ae8, 0x0000 },
+  { 0x0d00, 0x0aea, 0x0000 },
+  { 0x8d00, 0x0aef, 0x3000 },
+  { 0x8d00, 0x0aed, 0x2000 },
+  { 0x0d00, 0x0aec, 0x0000 },
+  { 0x0d00, 0x0aee, 0x0000 },
+  { 0x8c00, 0x0b01, 0x2000 },
+  { 0x1700, 0x0af1, 0x0000 },
+  { 0x0a00, 0x0b02, 0x0000 },
+  { 0x8700, 0x0b28, 0x6000 },
+  { 0x8700, 0x0b18, 0x5000 },
+  { 0x8700, 0x0b0c, 0x4000 },
+  { 0x8700, 0x0b08, 0x3000 },
+  { 0x8700, 0x0b06, 0x2000 },
+  { 0x0700, 0x0b05, 0x0000 },
+  { 0x0700, 0x0b07, 0x0000 },
+  { 0x8700, 0x0b0a, 0x2000 },
+  { 0x0700, 0x0b09, 0x0000 },
+  { 0x0700, 0x0b0b, 0x0000 },
+  { 0x8700, 0x0b14, 0x3000 },
+  { 0x8700, 0x0b10, 0x2000 },
+  { 0x0700, 0x0b0f, 0x0000 },
+  { 0x0700, 0x0b13, 0x0000 },
+  { 0x8700, 0x0b16, 0x2000 },
+  { 0x0700, 0x0b15, 0x0000 },
+  { 0x0700, 0x0b17, 0x0000 },
+  { 0x8700, 0x0b20, 0x4000 },
+  { 0x8700, 0x0b1c, 0x3000 },
+  { 0x8700, 0x0b1a, 0x2000 },
+  { 0x0700, 0x0b19, 0x0000 },
+  { 0x0700, 0x0b1b, 0x0000 },
+  { 0x8700, 0x0b1e, 0x2000 },
+  { 0x0700, 0x0b1d, 0x0000 },
+  { 0x0700, 0x0b1f, 0x0000 },
+  { 0x8700, 0x0b24, 0x3000 },
+  { 0x8700, 0x0b22, 0x2000 },
+  { 0x0700, 0x0b21, 0x0000 },
+  { 0x0700, 0x0b23, 0x0000 },
+  { 0x8700, 0x0b26, 0x2000 },
+  { 0x0700, 0x0b25, 0x0000 },
+  { 0x0700, 0x0b27, 0x0000 },
+  { 0x8700, 0x0b3d, 0x5000 },
+  { 0x8700, 0x0b32, 0x4000 },
+  { 0x8700, 0x0b2d, 0x3000 },
+  { 0x8700, 0x0b2b, 0x2000 },
+  { 0x0700, 0x0b2a, 0x0000 },
+  { 0x0700, 0x0b2c, 0x0000 },
+  { 0x8700, 0x0b2f, 0x2000 },
+  { 0x0700, 0x0b2e, 0x0000 },
+  { 0x0700, 0x0b30, 0x0000 },
+  { 0x8700, 0x0b37, 0x3000 },
+  { 0x8700, 0x0b35, 0x2000 },
+  { 0x0700, 0x0b33, 0x0000 },
+  { 0x0700, 0x0b36, 0x0000 },
+  { 0x8700, 0x0b39, 0x2000 },
+  { 0x0700, 0x0b38, 0x0000 },
+  { 0x0c00, 0x0b3c, 0x0000 },
+  { 0x8a00, 0x0b48, 0x4000 },
+  { 0x8c00, 0x0b41, 0x3000 },
+  { 0x8c00, 0x0b3f, 0x2000 },
+  { 0x0a00, 0x0b3e, 0x0000 },
+  { 0x0a00, 0x0b40, 0x0000 },
+  { 0x8c00, 0x0b43, 0x2000 },
+  { 0x0c00, 0x0b42, 0x0000 },
+  { 0x0a00, 0x0b47, 0x0000 },
+  { 0x8c00, 0x0b56, 0x3000 },
+  { 0x8a00, 0x0b4c, 0x2000 },
+  { 0x0a00, 0x0b4b, 0x0000 },
+  { 0x0c00, 0x0b4d, 0x0000 },
+  { 0x8700, 0x0b5c, 0x2000 },
+  { 0x0a00, 0x0b57, 0x0000 },
+  { 0x0700, 0x0b5d, 0x0000 },
+  { 0x8d00, 0x0be7, 0x7000 },
+  { 0x8700, 0x0b9c, 0x6000 },
+  { 0x8700, 0x0b83, 0x5000 },
+  { 0x8d00, 0x0b6b, 0x4000 },
+  { 0x8d00, 0x0b67, 0x3000 },
+  { 0x8700, 0x0b61, 0x2000 },
+  { 0x0700, 0x0b60, 0x0000 },
+  { 0x0d00, 0x0b66, 0x0000 },
+  { 0x8d00, 0x0b69, 0x2000 },
+  { 0x0d00, 0x0b68, 0x0000 },
+  { 0x0d00, 0x0b6a, 0x0000 },
+  { 0x8d00, 0x0b6f, 0x3000 },
+  { 0x8d00, 0x0b6d, 0x2000 },
+  { 0x0d00, 0x0b6c, 0x0000 },
+  { 0x0d00, 0x0b6e, 0x0000 },
+  { 0x8700, 0x0b71, 0x2000 },
+  { 0x1a00, 0x0b70, 0x0000 },
+  { 0x0c00, 0x0b82, 0x0000 },
+  { 0x8700, 0x0b8f, 0x4000 },
+  { 0x8700, 0x0b88, 0x3000 },
+  { 0x8700, 0x0b86, 0x2000 },
+  { 0x0700, 0x0b85, 0x0000 },
+  { 0x0700, 0x0b87, 0x0000 },
+  { 0x8700, 0x0b8a, 0x2000 },
+  { 0x0700, 0x0b89, 0x0000 },
+  { 0x0700, 0x0b8e, 0x0000 },
+  { 0x8700, 0x0b94, 0x3000 },
+  { 0x8700, 0x0b92, 0x2000 },
+  { 0x0700, 0x0b90, 0x0000 },
+  { 0x0700, 0x0b93, 0x0000 },
+  { 0x8700, 0x0b99, 0x2000 },
+  { 0x0700, 0x0b95, 0x0000 },
+  { 0x0700, 0x0b9a, 0x0000 },
+  { 0x8700, 0x0bb7, 0x5000 },
+  { 0x8700, 0x0bae, 0x4000 },
+  { 0x8700, 0x0ba4, 0x3000 },
+  { 0x8700, 0x0b9f, 0x2000 },
+  { 0x0700, 0x0b9e, 0x0000 },
+  { 0x0700, 0x0ba3, 0x0000 },
+  { 0x8700, 0x0ba9, 0x2000 },
+  { 0x0700, 0x0ba8, 0x0000 },
+  { 0x0700, 0x0baa, 0x0000 },
+  { 0x8700, 0x0bb2, 0x3000 },
+  { 0x8700, 0x0bb0, 0x2000 },
+  { 0x0700, 0x0baf, 0x0000 },
+  { 0x0700, 0x0bb1, 0x0000 },
+  { 0x8700, 0x0bb4, 0x2000 },
+  { 0x0700, 0x0bb3, 0x0000 },
+  { 0x0700, 0x0bb5, 0x0000 },
+  { 0x8a00, 0x0bc6, 0x4000 },
+  { 0x8a00, 0x0bbf, 0x3000 },
+  { 0x8700, 0x0bb9, 0x2000 },
+  { 0x0700, 0x0bb8, 0x0000 },
+  { 0x0a00, 0x0bbe, 0x0000 },
+  { 0x8a00, 0x0bc1, 0x2000 },
+  { 0x0c00, 0x0bc0, 0x0000 },
+  { 0x0a00, 0x0bc2, 0x0000 },
+  { 0x8a00, 0x0bcb, 0x3000 },
+  { 0x8a00, 0x0bc8, 0x2000 },
+  { 0x0a00, 0x0bc7, 0x0000 },
+  { 0x0a00, 0x0bca, 0x0000 },
+  { 0x8c00, 0x0bcd, 0x2000 },
+  { 0x0a00, 0x0bcc, 0x0000 },
+  { 0x0a00, 0x0bd7, 0x0000 },
+  { 0x8700, 0x0c0f, 0x6000 },
+  { 0x9a00, 0x0bf7, 0x5000 },
+  { 0x8d00, 0x0bef, 0x4000 },
+  { 0x8d00, 0x0beb, 0x3000 },
+  { 0x8d00, 0x0be9, 0x2000 },
+  { 0x0d00, 0x0be8, 0x0000 },
+  { 0x0d00, 0x0bea, 0x0000 },
+  { 0x8d00, 0x0bed, 0x2000 },
+  { 0x0d00, 0x0bec, 0x0000 },
+  { 0x0d00, 0x0bee, 0x0000 },
+  { 0x9a00, 0x0bf3, 0x3000 },
+  { 0x8f00, 0x0bf1, 0x2000 },
+  { 0x0f00, 0x0bf0, 0x0000 },
+  { 0x0f00, 0x0bf2, 0x0000 },
+  { 0x9a00, 0x0bf5, 0x2000 },
+  { 0x1a00, 0x0bf4, 0x0000 },
+  { 0x1a00, 0x0bf6, 0x0000 },
+  { 0x8700, 0x0c06, 0x4000 },
+  { 0x8a00, 0x0c01, 0x3000 },
+  { 0x9700, 0x0bf9, 0x2000 },
+  { 0x1a00, 0x0bf8, 0x0000 },
+  { 0x1a00, 0x0bfa, 0x0000 },
+  { 0x8a00, 0x0c03, 0x2000 },
+  { 0x0a00, 0x0c02, 0x0000 },
+  { 0x0700, 0x0c05, 0x0000 },
+  { 0x8700, 0x0c0a, 0x3000 },
+  { 0x8700, 0x0c08, 0x2000 },
+  { 0x0700, 0x0c07, 0x0000 },
+  { 0x0700, 0x0c09, 0x0000 },
+  { 0x8700, 0x0c0c, 0x2000 },
+  { 0x0700, 0x0c0b, 0x0000 },
+  { 0x0700, 0x0c0e, 0x0000 },
+  { 0x8700, 0x0c20, 0x5000 },
+  { 0x8700, 0x0c18, 0x4000 },
+  { 0x8700, 0x0c14, 0x3000 },
+  { 0x8700, 0x0c12, 0x2000 },
+  { 0x0700, 0x0c10, 0x0000 },
+  { 0x0700, 0x0c13, 0x0000 },
+  { 0x8700, 0x0c16, 0x2000 },
+  { 0x0700, 0x0c15, 0x0000 },
+  { 0x0700, 0x0c17, 0x0000 },
+  { 0x8700, 0x0c1c, 0x3000 },
+  { 0x8700, 0x0c1a, 0x2000 },
+  { 0x0700, 0x0c19, 0x0000 },
+  { 0x0700, 0x0c1b, 0x0000 },
+  { 0x8700, 0x0c1e, 0x2000 },
+  { 0x0700, 0x0c1d, 0x0000 },
+  { 0x0700, 0x0c1f, 0x0000 },
+  { 0x8700, 0x0c28, 0x4000 },
+  { 0x8700, 0x0c24, 0x3000 },
+  { 0x8700, 0x0c22, 0x2000 },
+  { 0x0700, 0x0c21, 0x0000 },
+  { 0x0700, 0x0c23, 0x0000 },
+  { 0x8700, 0x0c26, 0x2000 },
+  { 0x0700, 0x0c25, 0x0000 },
+  { 0x0700, 0x0c27, 0x0000 },
+  { 0x8700, 0x0c2d, 0x3000 },
+  { 0x8700, 0x0c2b, 0x2000 },
+  { 0x0700, 0x0c2a, 0x0000 },
+  { 0x0700, 0x0c2c, 0x0000 },
+  { 0x8700, 0x0c2f, 0x2000 },
+  { 0x0700, 0x0c2e, 0x0000 },
+  { 0x0700, 0x0c30, 0x0000 },
+  { 0x8700, 0x0d0e, 0x8000 },
+  { 0x8700, 0x0ca1, 0x7000 },
+  { 0x8d00, 0x0c6c, 0x6000 },
+  { 0x8c00, 0x0c47, 0x5000 },
+  { 0x8c00, 0x0c3e, 0x4000 },
+  { 0x8700, 0x0c36, 0x3000 },
+  { 0x8700, 0x0c33, 0x2000 },
+  { 0x0700, 0x0c32, 0x0000 },
+  { 0x0700, 0x0c35, 0x0000 },
+  { 0x8700, 0x0c38, 0x2000 },
+  { 0x0700, 0x0c37, 0x0000 },
+  { 0x0700, 0x0c39, 0x0000 },
+  { 0x8a00, 0x0c42, 0x3000 },
+  { 0x8c00, 0x0c40, 0x2000 },
+  { 0x0c00, 0x0c3f, 0x0000 },
+  { 0x0a00, 0x0c41, 0x0000 },
+  { 0x8a00, 0x0c44, 0x2000 },
+  { 0x0a00, 0x0c43, 0x0000 },
+  { 0x0c00, 0x0c46, 0x0000 },
+  { 0x8700, 0x0c60, 0x4000 },
+  { 0x8c00, 0x0c4c, 0x3000 },
+  { 0x8c00, 0x0c4a, 0x2000 },
+  { 0x0c00, 0x0c48, 0x0000 },
+  { 0x0c00, 0x0c4b, 0x0000 },
+  { 0x8c00, 0x0c55, 0x2000 },
+  { 0x0c00, 0x0c4d, 0x0000 },
+  { 0x0c00, 0x0c56, 0x0000 },
+  { 0x8d00, 0x0c68, 0x3000 },
+  { 0x8d00, 0x0c66, 0x2000 },
+  { 0x0700, 0x0c61, 0x0000 },
+  { 0x0d00, 0x0c67, 0x0000 },
+  { 0x8d00, 0x0c6a, 0x2000 },
+  { 0x0d00, 0x0c69, 0x0000 },
+  { 0x0d00, 0x0c6b, 0x0000 },
+  { 0x8700, 0x0c90, 0x5000 },
+  { 0x8700, 0x0c87, 0x4000 },
+  { 0x8a00, 0x0c82, 0x3000 },
+  { 0x8d00, 0x0c6e, 0x2000 },
+  { 0x0d00, 0x0c6d, 0x0000 },
+  { 0x0d00, 0x0c6f, 0x0000 },
+  { 0x8700, 0x0c85, 0x2000 },
+  { 0x0a00, 0x0c83, 0x0000 },
+  { 0x0700, 0x0c86, 0x0000 },
+  { 0x8700, 0x0c8b, 0x3000 },
+  { 0x8700, 0x0c89, 0x2000 },
+  { 0x0700, 0x0c88, 0x0000 },
+  { 0x0700, 0x0c8a, 0x0000 },
+  { 0x8700, 0x0c8e, 0x2000 },
+  { 0x0700, 0x0c8c, 0x0000 },
+  { 0x0700, 0x0c8f, 0x0000 },
+  { 0x8700, 0x0c99, 0x4000 },
+  { 0x8700, 0x0c95, 0x3000 },
+  { 0x8700, 0x0c93, 0x2000 },
+  { 0x0700, 0x0c92, 0x0000 },
+  { 0x0700, 0x0c94, 0x0000 },
+  { 0x8700, 0x0c97, 0x2000 },
+  { 0x0700, 0x0c96, 0x0000 },
+  { 0x0700, 0x0c98, 0x0000 },
+  { 0x8700, 0x0c9d, 0x3000 },
+  { 0x8700, 0x0c9b, 0x2000 },
+  { 0x0700, 0x0c9a, 0x0000 },
+  { 0x0700, 0x0c9c, 0x0000 },
+  { 0x8700, 0x0c9f, 0x2000 },
+  { 0x0700, 0x0c9e, 0x0000 },
+  { 0x0700, 0x0ca0, 0x0000 },
+  { 0x8c00, 0x0cc6, 0x6000 },
+  { 0x8700, 0x0cb2, 0x5000 },
+  { 0x8700, 0x0caa, 0x4000 },
+  { 0x8700, 0x0ca5, 0x3000 },
+  { 0x8700, 0x0ca3, 0x2000 },
+  { 0x0700, 0x0ca2, 0x0000 },
+  { 0x0700, 0x0ca4, 0x0000 },
+  { 0x8700, 0x0ca7, 0x2000 },
+  { 0x0700, 0x0ca6, 0x0000 },
+  { 0x0700, 0x0ca8, 0x0000 },
+  { 0x8700, 0x0cae, 0x3000 },
+  { 0x8700, 0x0cac, 0x2000 },
+  { 0x0700, 0x0cab, 0x0000 },
+  { 0x0700, 0x0cad, 0x0000 },
+  { 0x8700, 0x0cb0, 0x2000 },
+  { 0x0700, 0x0caf, 0x0000 },
+  { 0x0700, 0x0cb1, 0x0000 },
+  { 0x8700, 0x0cbd, 0x4000 },
+  { 0x8700, 0x0cb7, 0x3000 },
+  { 0x8700, 0x0cb5, 0x2000 },
+  { 0x0700, 0x0cb3, 0x0000 },
+  { 0x0700, 0x0cb6, 0x0000 },
+  { 0x8700, 0x0cb9, 0x2000 },
+  { 0x0700, 0x0cb8, 0x0000 },
+  { 0x0c00, 0x0cbc, 0x0000 },
+  { 0x8a00, 0x0cc1, 0x3000 },
+  { 0x8c00, 0x0cbf, 0x2000 },
+  { 0x0a00, 0x0cbe, 0x0000 },
+  { 0x0a00, 0x0cc0, 0x0000 },
+  { 0x8a00, 0x0cc3, 0x2000 },
+  { 0x0a00, 0x0cc2, 0x0000 },
+  { 0x0a00, 0x0cc4, 0x0000 },
+  { 0x8d00, 0x0cea, 0x5000 },
+  { 0x8a00, 0x0cd6, 0x4000 },
+  { 0x8a00, 0x0ccb, 0x3000 },
+  { 0x8a00, 0x0cc8, 0x2000 },
+  { 0x0a00, 0x0cc7, 0x0000 },
+  { 0x0a00, 0x0cca, 0x0000 },
+  { 0x8c00, 0x0ccd, 0x2000 },
+  { 0x0c00, 0x0ccc, 0x0000 },
+  { 0x0a00, 0x0cd5, 0x0000 },
+  { 0x8d00, 0x0ce6, 0x3000 },
+  { 0x8700, 0x0ce0, 0x2000 },
+  { 0x0700, 0x0cde, 0x0000 },
+  { 0x0700, 0x0ce1, 0x0000 },
+  { 0x8d00, 0x0ce8, 0x2000 },
+  { 0x0d00, 0x0ce7, 0x0000 },
+  { 0x0d00, 0x0ce9, 0x0000 },
+  { 0x8700, 0x0d05, 0x4000 },
+  { 0x8d00, 0x0cee, 0x3000 },
+  { 0x8d00, 0x0cec, 0x2000 },
+  { 0x0d00, 0x0ceb, 0x0000 },
+  { 0x0d00, 0x0ced, 0x0000 },
+  { 0x8a00, 0x0d02, 0x2000 },
+  { 0x0d00, 0x0cef, 0x0000 },
+  { 0x0a00, 0x0d03, 0x0000 },
+  { 0x8700, 0x0d09, 0x3000 },
+  { 0x8700, 0x0d07, 0x2000 },
+  { 0x0700, 0x0d06, 0x0000 },
+  { 0x0700, 0x0d08, 0x0000 },
+  { 0x8700, 0x0d0b, 0x2000 },
+  { 0x0700, 0x0d0a, 0x0000 },
+  { 0x0700, 0x0d0c, 0x0000 },
+  { 0x8d00, 0x0d6c, 0x7000 },
+  { 0x8700, 0x0d30, 0x6000 },
+  { 0x8700, 0x0d1f, 0x5000 },
+  { 0x8700, 0x0d17, 0x4000 },
+  { 0x8700, 0x0d13, 0x3000 },
+  { 0x8700, 0x0d10, 0x2000 },
+  { 0x0700, 0x0d0f, 0x0000 },
+  { 0x0700, 0x0d12, 0x0000 },
+  { 0x8700, 0x0d15, 0x2000 },
+  { 0x0700, 0x0d14, 0x0000 },
+  { 0x0700, 0x0d16, 0x0000 },
+  { 0x8700, 0x0d1b, 0x3000 },
+  { 0x8700, 0x0d19, 0x2000 },
+  { 0x0700, 0x0d18, 0x0000 },
+  { 0x0700, 0x0d1a, 0x0000 },
+  { 0x8700, 0x0d1d, 0x2000 },
+  { 0x0700, 0x0d1c, 0x0000 },
+  { 0x0700, 0x0d1e, 0x0000 },
+  { 0x8700, 0x0d27, 0x4000 },
+  { 0x8700, 0x0d23, 0x3000 },
+  { 0x8700, 0x0d21, 0x2000 },
+  { 0x0700, 0x0d20, 0x0000 },
+  { 0x0700, 0x0d22, 0x0000 },
+  { 0x8700, 0x0d25, 0x2000 },
+  { 0x0700, 0x0d24, 0x0000 },
+  { 0x0700, 0x0d26, 0x0000 },
+  { 0x8700, 0x0d2c, 0x3000 },
+  { 0x8700, 0x0d2a, 0x2000 },
+  { 0x0700, 0x0d28, 0x0000 },
+  { 0x0700, 0x0d2b, 0x0000 },
+  { 0x8700, 0x0d2e, 0x2000 },
+  { 0x0700, 0x0d2d, 0x0000 },
+  { 0x0700, 0x0d2f, 0x0000 },
+  { 0x8a00, 0x0d46, 0x5000 },
+  { 0x8700, 0x0d38, 0x4000 },
+  { 0x8700, 0x0d34, 0x3000 },
+  { 0x8700, 0x0d32, 0x2000 },
+  { 0x0700, 0x0d31, 0x0000 },
+  { 0x0700, 0x0d33, 0x0000 },
+  { 0x8700, 0x0d36, 0x2000 },
+  { 0x0700, 0x0d35, 0x0000 },
+  { 0x0700, 0x0d37, 0x0000 },
+  { 0x8a00, 0x0d40, 0x3000 },
+  { 0x8a00, 0x0d3e, 0x2000 },
+  { 0x0700, 0x0d39, 0x0000 },
+  { 0x0a00, 0x0d3f, 0x0000 },
+  { 0x8c00, 0x0d42, 0x2000 },
+  { 0x0c00, 0x0d41, 0x0000 },
+  { 0x0c00, 0x0d43, 0x0000 },
+  { 0x8700, 0x0d60, 0x4000 },
+  { 0x8a00, 0x0d4b, 0x3000 },
+  { 0x8a00, 0x0d48, 0x2000 },
+  { 0x0a00, 0x0d47, 0x0000 },
+  { 0x0a00, 0x0d4a, 0x0000 },
+  { 0x8c00, 0x0d4d, 0x2000 },
+  { 0x0a00, 0x0d4c, 0x0000 },
+  { 0x0a00, 0x0d57, 0x0000 },
+  { 0x8d00, 0x0d68, 0x3000 },
+  { 0x8d00, 0x0d66, 0x2000 },
+  { 0x0700, 0x0d61, 0x0000 },
+  { 0x0d00, 0x0d67, 0x0000 },
+  { 0x8d00, 0x0d6a, 0x2000 },
+  { 0x0d00, 0x0d69, 0x0000 },
+  { 0x0d00, 0x0d6b, 0x0000 },
+  { 0x8700, 0x0da2, 0x6000 },
+  { 0x8700, 0x0d8f, 0x5000 },
+  { 0x8700, 0x0d87, 0x4000 },
+  { 0x8a00, 0x0d82, 0x3000 },
+  { 0x8d00, 0x0d6e, 0x2000 },
+  { 0x0d00, 0x0d6d, 0x0000 },
+  { 0x0d00, 0x0d6f, 0x0000 },
+  { 0x8700, 0x0d85, 0x2000 },
+  { 0x0a00, 0x0d83, 0x0000 },
+  { 0x0700, 0x0d86, 0x0000 },
+  { 0x8700, 0x0d8b, 0x3000 },
+  { 0x8700, 0x0d89, 0x2000 },
+  { 0x0700, 0x0d88, 0x0000 },
+  { 0x0700, 0x0d8a, 0x0000 },
+  { 0x8700, 0x0d8d, 0x2000 },
+  { 0x0700, 0x0d8c, 0x0000 },
+  { 0x0700, 0x0d8e, 0x0000 },
+  { 0x8700, 0x0d9a, 0x4000 },
+  { 0x8700, 0x0d93, 0x3000 },
+  { 0x8700, 0x0d91, 0x2000 },
+  { 0x0700, 0x0d90, 0x0000 },
+  { 0x0700, 0x0d92, 0x0000 },
+  { 0x8700, 0x0d95, 0x2000 },
+  { 0x0700, 0x0d94, 0x0000 },
+  { 0x0700, 0x0d96, 0x0000 },
+  { 0x8700, 0x0d9e, 0x3000 },
+  { 0x8700, 0x0d9c, 0x2000 },
+  { 0x0700, 0x0d9b, 0x0000 },
+  { 0x0700, 0x0d9d, 0x0000 },
+  { 0x8700, 0x0da0, 0x2000 },
+  { 0x0700, 0x0d9f, 0x0000 },
+  { 0x0700, 0x0da1, 0x0000 },
+  { 0x8700, 0x0db3, 0x5000 },
+  { 0x8700, 0x0daa, 0x4000 },
+  { 0x8700, 0x0da6, 0x3000 },
+  { 0x8700, 0x0da4, 0x2000 },
+  { 0x0700, 0x0da3, 0x0000 },
+  { 0x0700, 0x0da5, 0x0000 },
+  { 0x8700, 0x0da8, 0x2000 },
+  { 0x0700, 0x0da7, 0x0000 },
+  { 0x0700, 0x0da9, 0x0000 },
+  { 0x8700, 0x0dae, 0x3000 },
+  { 0x8700, 0x0dac, 0x2000 },
+  { 0x0700, 0x0dab, 0x0000 },
+  { 0x0700, 0x0dad, 0x0000 },
+  { 0x8700, 0x0db0, 0x2000 },
+  { 0x0700, 0x0daf, 0x0000 },
+  { 0x0700, 0x0db1, 0x0000 },
+  { 0x8700, 0x0dbb, 0x4000 },
+  { 0x8700, 0x0db7, 0x3000 },
+  { 0x8700, 0x0db5, 0x2000 },
+  { 0x0700, 0x0db4, 0x0000 },
+  { 0x0700, 0x0db6, 0x0000 },
+  { 0x8700, 0x0db9, 0x2000 },
+  { 0x0700, 0x0db8, 0x0000 },
+  { 0x0700, 0x0dba, 0x0000 },
+  { 0x8700, 0x0dc2, 0x3000 },
+  { 0x8700, 0x0dc0, 0x2000 },
+  { 0x0700, 0x0dbd, 0x0000 },
+  { 0x0700, 0x0dc1, 0x0000 },
+  { 0x8700, 0x0dc4, 0x2000 },
+  { 0x0700, 0x0dc3, 0x0000 },
+  { 0x0700, 0x0dc5, 0x0000 },
+  { 0x8700, 0x0f55, 0x9000 },
+  { 0x8700, 0x0ea5, 0x8000 },
+  { 0x8700, 0x0e2d, 0x7000 },
+  { 0x8700, 0x0e0d, 0x6000 },
+  { 0x8a00, 0x0ddf, 0x5000 },
+  { 0x8c00, 0x0dd6, 0x4000 },
+  { 0x8a00, 0x0dd1, 0x3000 },
+  { 0x8a00, 0x0dcf, 0x2000 },
+  { 0x0c00, 0x0dca, 0x0000 },
+  { 0x0a00, 0x0dd0, 0x0000 },
+  { 0x8c00, 0x0dd3, 0x2000 },
+  { 0x0c00, 0x0dd2, 0x0000 },
+  { 0x0c00, 0x0dd4, 0x0000 },
+  { 0x8a00, 0x0ddb, 0x3000 },
+  { 0x8a00, 0x0dd9, 0x2000 },
+  { 0x0a00, 0x0dd8, 0x0000 },
+  { 0x0a00, 0x0dda, 0x0000 },
+  { 0x8a00, 0x0ddd, 0x2000 },
+  { 0x0a00, 0x0ddc, 0x0000 },
+  { 0x0a00, 0x0dde, 0x0000 },
+  { 0x8700, 0x0e05, 0x4000 },
+  { 0x8700, 0x0e01, 0x3000 },
+  { 0x8a00, 0x0df3, 0x2000 },
+  { 0x0a00, 0x0df2, 0x0000 },
+  { 0x1500, 0x0df4, 0x0000 },
+  { 0x8700, 0x0e03, 0x2000 },
+  { 0x0700, 0x0e02, 0x0000 },
+  { 0x0700, 0x0e04, 0x0000 },
+  { 0x8700, 0x0e09, 0x3000 },
+  { 0x8700, 0x0e07, 0x2000 },
+  { 0x0700, 0x0e06, 0x0000 },
+  { 0x0700, 0x0e08, 0x0000 },
+  { 0x8700, 0x0e0b, 0x2000 },
+  { 0x0700, 0x0e0a, 0x0000 },
+  { 0x0700, 0x0e0c, 0x0000 },
+  { 0x8700, 0x0e1d, 0x5000 },
+  { 0x8700, 0x0e15, 0x4000 },
+  { 0x8700, 0x0e11, 0x3000 },
+  { 0x8700, 0x0e0f, 0x2000 },
+  { 0x0700, 0x0e0e, 0x0000 },
+  { 0x0700, 0x0e10, 0x0000 },
+  { 0x8700, 0x0e13, 0x2000 },
+  { 0x0700, 0x0e12, 0x0000 },
+  { 0x0700, 0x0e14, 0x0000 },
+  { 0x8700, 0x0e19, 0x3000 },
+  { 0x8700, 0x0e17, 0x2000 },
+  { 0x0700, 0x0e16, 0x0000 },
+  { 0x0700, 0x0e18, 0x0000 },
+  { 0x8700, 0x0e1b, 0x2000 },
+  { 0x0700, 0x0e1a, 0x0000 },
+  { 0x0700, 0x0e1c, 0x0000 },
+  { 0x8700, 0x0e25, 0x4000 },
+  { 0x8700, 0x0e21, 0x3000 },
+  { 0x8700, 0x0e1f, 0x2000 },
+  { 0x0700, 0x0e1e, 0x0000 },
+  { 0x0700, 0x0e20, 0x0000 },
+  { 0x8700, 0x0e23, 0x2000 },
+  { 0x0700, 0x0e22, 0x0000 },
+  { 0x0700, 0x0e24, 0x0000 },
+  { 0x8700, 0x0e29, 0x3000 },
+  { 0x8700, 0x0e27, 0x2000 },
+  { 0x0700, 0x0e26, 0x0000 },
+  { 0x0700, 0x0e28, 0x0000 },
+  { 0x8700, 0x0e2b, 0x2000 },
+  { 0x0700, 0x0e2a, 0x0000 },
+  { 0x0700, 0x0e2c, 0x0000 },
+  { 0x8d00, 0x0e51, 0x6000 },
+  { 0x8700, 0x0e41, 0x5000 },
+  { 0x8c00, 0x0e35, 0x4000 },
+  { 0x8c00, 0x0e31, 0x3000 },
+  { 0x8700, 0x0e2f, 0x2000 },
+  { 0x0700, 0x0e2e, 0x0000 },
+  { 0x0700, 0x0e30, 0x0000 },
+  { 0x8700, 0x0e33, 0x2000 },
+  { 0x0700, 0x0e32, 0x0000 },
+  { 0x0c00, 0x0e34, 0x0000 },
+  { 0x8c00, 0x0e39, 0x3000 },
+  { 0x8c00, 0x0e37, 0x2000 },
+  { 0x0c00, 0x0e36, 0x0000 },
+  { 0x0c00, 0x0e38, 0x0000 },
+  { 0x9700, 0x0e3f, 0x2000 },
+  { 0x0c00, 0x0e3a, 0x0000 },
+  { 0x0700, 0x0e40, 0x0000 },
+  { 0x8c00, 0x0e49, 0x4000 },
+  { 0x8700, 0x0e45, 0x3000 },
+  { 0x8700, 0x0e43, 0x2000 },
+  { 0x0700, 0x0e42, 0x0000 },
+  { 0x0700, 0x0e44, 0x0000 },
+  { 0x8c00, 0x0e47, 0x2000 },
+  { 0x0600, 0x0e46, 0x0000 },
+  { 0x0c00, 0x0e48, 0x0000 },
+  { 0x8c00, 0x0e4d, 0x3000 },
+  { 0x8c00, 0x0e4b, 0x2000 },
+  { 0x0c00, 0x0e4a, 0x0000 },
+  { 0x0c00, 0x0e4c, 0x0000 },
+  { 0x9500, 0x0e4f, 0x2000 },
+  { 0x0c00, 0x0e4e, 0x0000 },
+  { 0x0d00, 0x0e50, 0x0000 },
+  { 0x8700, 0x0e8a, 0x5000 },
+  { 0x8d00, 0x0e59, 0x4000 },
+  { 0x8d00, 0x0e55, 0x3000 },
+  { 0x8d00, 0x0e53, 0x2000 },
+  { 0x0d00, 0x0e52, 0x0000 },
+  { 0x0d00, 0x0e54, 0x0000 },
+  { 0x8d00, 0x0e57, 0x2000 },
+  { 0x0d00, 0x0e56, 0x0000 },
+  { 0x0d00, 0x0e58, 0x0000 },
+  { 0x8700, 0x0e82, 0x3000 },
+  { 0x9500, 0x0e5b, 0x2000 },
+  { 0x1500, 0x0e5a, 0x0000 },
+  { 0x0700, 0x0e81, 0x0000 },
+  { 0x8700, 0x0e87, 0x2000 },
+  { 0x0700, 0x0e84, 0x0000 },
+  { 0x0700, 0x0e88, 0x0000 },
+  { 0x8700, 0x0e9b, 0x4000 },
+  { 0x8700, 0x0e96, 0x3000 },
+  { 0x8700, 0x0e94, 0x2000 },
+  { 0x0700, 0x0e8d, 0x0000 },
+  { 0x0700, 0x0e95, 0x0000 },
+  { 0x8700, 0x0e99, 0x2000 },
+  { 0x0700, 0x0e97, 0x0000 },
+  { 0x0700, 0x0e9a, 0x0000 },
+  { 0x8700, 0x0e9f, 0x3000 },
+  { 0x8700, 0x0e9d, 0x2000 },
+  { 0x0700, 0x0e9c, 0x0000 },
+  { 0x0700, 0x0e9e, 0x0000 },
+  { 0x8700, 0x0ea2, 0x2000 },
+  { 0x0700, 0x0ea1, 0x0000 },
+  { 0x0700, 0x0ea3, 0x0000 },
+  { 0x9a00, 0x0f14, 0x7000 },
+  { 0x8d00, 0x0ed0, 0x6000 },
+  { 0x8c00, 0x0eb9, 0x5000 },
+  { 0x8c00, 0x0eb1, 0x4000 },
+  { 0x8700, 0x0ead, 0x3000 },
+  { 0x8700, 0x0eaa, 0x2000 },
+  { 0x0700, 0x0ea7, 0x0000 },
+  { 0x0700, 0x0eab, 0x0000 },
+  { 0x8700, 0x0eaf, 0x2000 },
+  { 0x0700, 0x0eae, 0x0000 },
+  { 0x0700, 0x0eb0, 0x0000 },
+  { 0x8c00, 0x0eb5, 0x3000 },
+  { 0x8700, 0x0eb3, 0x2000 },
+  { 0x0700, 0x0eb2, 0x0000 },
+  { 0x0c00, 0x0eb4, 0x0000 },
+  { 0x8c00, 0x0eb7, 0x2000 },
+  { 0x0c00, 0x0eb6, 0x0000 },
+  { 0x0c00, 0x0eb8, 0x0000 },
+  { 0x8700, 0x0ec4, 0x4000 },
+  { 0x8700, 0x0ec0, 0x3000 },
+  { 0x8c00, 0x0ebc, 0x2000 },
+  { 0x0c00, 0x0ebb, 0x0000 },
+  { 0x0700, 0x0ebd, 0x0000 },
+  { 0x8700, 0x0ec2, 0x2000 },
+  { 0x0700, 0x0ec1, 0x0000 },
+  { 0x0700, 0x0ec3, 0x0000 },
+  { 0x8c00, 0x0eca, 0x3000 },
+  { 0x8c00, 0x0ec8, 0x2000 },
+  { 0x0600, 0x0ec6, 0x0000 },
+  { 0x0c00, 0x0ec9, 0x0000 },
+  { 0x8c00, 0x0ecc, 0x2000 },
+  { 0x0c00, 0x0ecb, 0x0000 },
+  { 0x0c00, 0x0ecd, 0x0000 },
+  { 0x9500, 0x0f04, 0x5000 },
+  { 0x8d00, 0x0ed8, 0x4000 },
+  { 0x8d00, 0x0ed4, 0x3000 },
+  { 0x8d00, 0x0ed2, 0x2000 },
+  { 0x0d00, 0x0ed1, 0x0000 },
+  { 0x0d00, 0x0ed3, 0x0000 },
+  { 0x8d00, 0x0ed6, 0x2000 },
+  { 0x0d00, 0x0ed5, 0x0000 },
+  { 0x0d00, 0x0ed7, 0x0000 },
+  { 0x8700, 0x0f00, 0x3000 },
+  { 0x8700, 0x0edc, 0x2000 },
+  { 0x0d00, 0x0ed9, 0x0000 },
+  { 0x0700, 0x0edd, 0x0000 },
+  { 0x9a00, 0x0f02, 0x2000 },
+  { 0x1a00, 0x0f01, 0x0000 },
+  { 0x1a00, 0x0f03, 0x0000 },
+  { 0x9500, 0x0f0c, 0x4000 },
+  { 0x9500, 0x0f08, 0x3000 },
+  { 0x9500, 0x0f06, 0x2000 },
+  { 0x1500, 0x0f05, 0x0000 },
+  { 0x1500, 0x0f07, 0x0000 },
+  { 0x9500, 0x0f0a, 0x2000 },
+  { 0x1500, 0x0f09, 0x0000 },
+  { 0x1500, 0x0f0b, 0x0000 },
+  { 0x9500, 0x0f10, 0x3000 },
+  { 0x9500, 0x0f0e, 0x2000 },
+  { 0x1500, 0x0f0d, 0x0000 },
+  { 0x1500, 0x0f0f, 0x0000 },
+  { 0x9500, 0x0f12, 0x2000 },
+  { 0x1500, 0x0f11, 0x0000 },
+  { 0x1a00, 0x0f13, 0x0000 },
+  { 0x9a00, 0x0f34, 0x6000 },
+  { 0x8d00, 0x0f24, 0x5000 },
+  { 0x9a00, 0x0f1c, 0x4000 },
+  { 0x8c00, 0x0f18, 0x3000 },
+  { 0x9a00, 0x0f16, 0x2000 },
+  { 0x1a00, 0x0f15, 0x0000 },
+  { 0x1a00, 0x0f17, 0x0000 },
+  { 0x9a00, 0x0f1a, 0x2000 },
+  { 0x0c00, 0x0f19, 0x0000 },
+  { 0x1a00, 0x0f1b, 0x0000 },
+  { 0x8d00, 0x0f20, 0x3000 },
+  { 0x9a00, 0x0f1e, 0x2000 },
+  { 0x1a00, 0x0f1d, 0x0000 },
+  { 0x1a00, 0x0f1f, 0x0000 },
+  { 0x8d00, 0x0f22, 0x2000 },
+  { 0x0d00, 0x0f21, 0x0000 },
+  { 0x0d00, 0x0f23, 0x0000 },
+  { 0x8f00, 0x0f2c, 0x4000 },
+  { 0x8d00, 0x0f28, 0x3000 },
+  { 0x8d00, 0x0f26, 0x2000 },
+  { 0x0d00, 0x0f25, 0x0000 },
+  { 0x0d00, 0x0f27, 0x0000 },
+  { 0x8f00, 0x0f2a, 0x2000 },
+  { 0x0d00, 0x0f29, 0x0000 },
+  { 0x0f00, 0x0f2b, 0x0000 },
+  { 0x8f00, 0x0f30, 0x3000 },
+  { 0x8f00, 0x0f2e, 0x2000 },
+  { 0x0f00, 0x0f2d, 0x0000 },
+  { 0x0f00, 0x0f2f, 0x0000 },
+  { 0x8f00, 0x0f32, 0x2000 },
+  { 0x0f00, 0x0f31, 0x0000 },
+  { 0x0f00, 0x0f33, 0x0000 },
+  { 0x8700, 0x0f44, 0x5000 },
+  { 0x9600, 0x0f3c, 0x4000 },
+  { 0x9a00, 0x0f38, 0x3000 },
+  { 0x9a00, 0x0f36, 0x2000 },
+  { 0x0c00, 0x0f35, 0x0000 },
+  { 0x0c00, 0x0f37, 0x0000 },
+  { 0x9600, 0x0f3a, 0x2000 },
+  { 0x0c00, 0x0f39, 0x0000 },
+  { 0x1200, 0x0f3b, 0x0000 },
+  { 0x8700, 0x0f40, 0x3000 },
+  { 0x8a00, 0x0f3e, 0x2000 },
+  { 0x1200, 0x0f3d, 0x0000 },
+  { 0x0a00, 0x0f3f, 0x0000 },
+  { 0x8700, 0x0f42, 0x2000 },
+  { 0x0700, 0x0f41, 0x0000 },
+  { 0x0700, 0x0f43, 0x0000 },
+  { 0x8700, 0x0f4d, 0x4000 },
+  { 0x8700, 0x0f49, 0x3000 },
+  { 0x8700, 0x0f46, 0x2000 },
+  { 0x0700, 0x0f45, 0x0000 },
+  { 0x0700, 0x0f47, 0x0000 },
+  { 0x8700, 0x0f4b, 0x2000 },
+  { 0x0700, 0x0f4a, 0x0000 },
+  { 0x0700, 0x0f4c, 0x0000 },
+  { 0x8700, 0x0f51, 0x3000 },
+  { 0x8700, 0x0f4f, 0x2000 },
+  { 0x0700, 0x0f4e, 0x0000 },
+  { 0x0700, 0x0f50, 0x0000 },
+  { 0x8700, 0x0f53, 0x2000 },
+  { 0x0700, 0x0f52, 0x0000 },
+  { 0x0700, 0x0f54, 0x0000 },
+  { 0x8700, 0x1013, 0x8000 },
+  { 0x8c00, 0x0fa0, 0x7000 },
+  { 0x8c00, 0x0f7b, 0x6000 },
+  { 0x8700, 0x0f65, 0x5000 },
+  { 0x8700, 0x0f5d, 0x4000 },
+  { 0x8700, 0x0f59, 0x3000 },
+  { 0x8700, 0x0f57, 0x2000 },
+  { 0x0700, 0x0f56, 0x0000 },
+  { 0x0700, 0x0f58, 0x0000 },
+  { 0x8700, 0x0f5b, 0x2000 },
+  { 0x0700, 0x0f5a, 0x0000 },
+  { 0x0700, 0x0f5c, 0x0000 },
+  { 0x8700, 0x0f61, 0x3000 },
+  { 0x8700, 0x0f5f, 0x2000 },
+  { 0x0700, 0x0f5e, 0x0000 },
+  { 0x0700, 0x0f60, 0x0000 },
+  { 0x8700, 0x0f63, 0x2000 },
+  { 0x0700, 0x0f62, 0x0000 },
+  { 0x0700, 0x0f64, 0x0000 },
+  { 0x8c00, 0x0f73, 0x4000 },
+  { 0x8700, 0x0f69, 0x3000 },
+  { 0x8700, 0x0f67, 0x2000 },
+  { 0x0700, 0x0f66, 0x0000 },
+  { 0x0700, 0x0f68, 0x0000 },
+  { 0x8c00, 0x0f71, 0x2000 },
+  { 0x0700, 0x0f6a, 0x0000 },
+  { 0x0c00, 0x0f72, 0x0000 },
+  { 0x8c00, 0x0f77, 0x3000 },
+  { 0x8c00, 0x0f75, 0x2000 },
+  { 0x0c00, 0x0f74, 0x0000 },
+  { 0x0c00, 0x0f76, 0x0000 },
+  { 0x8c00, 0x0f79, 0x2000 },
+  { 0x0c00, 0x0f78, 0x0000 },
+  { 0x0c00, 0x0f7a, 0x0000 },
+  { 0x8700, 0x0f8b, 0x5000 },
+  { 0x8c00, 0x0f83, 0x4000 },
+  { 0x8a00, 0x0f7f, 0x3000 },
+  { 0x8c00, 0x0f7d, 0x2000 },
+  { 0x0c00, 0x0f7c, 0x0000 },
+  { 0x0c00, 0x0f7e, 0x0000 },
+  { 0x8c00, 0x0f81, 0x2000 },
+  { 0x0c00, 0x0f80, 0x0000 },
+  { 0x0c00, 0x0f82, 0x0000 },
+  { 0x8c00, 0x0f87, 0x3000 },
+  { 0x9500, 0x0f85, 0x2000 },
+  { 0x0c00, 0x0f84, 0x0000 },
+  { 0x0c00, 0x0f86, 0x0000 },
+  { 0x8700, 0x0f89, 0x2000 },
+  { 0x0700, 0x0f88, 0x0000 },
+  { 0x0700, 0x0f8a, 0x0000 },
+  { 0x8c00, 0x0f97, 0x4000 },
+  { 0x8c00, 0x0f93, 0x3000 },
+  { 0x8c00, 0x0f91, 0x2000 },
+  { 0x0c00, 0x0f90, 0x0000 },
+  { 0x0c00, 0x0f92, 0x0000 },
+  { 0x8c00, 0x0f95, 0x2000 },
+  { 0x0c00, 0x0f94, 0x0000 },
+  { 0x0c00, 0x0f96, 0x0000 },
+  { 0x8c00, 0x0f9c, 0x3000 },
+  { 0x8c00, 0x0f9a, 0x2000 },
+  { 0x0c00, 0x0f99, 0x0000 },
+  { 0x0c00, 0x0f9b, 0x0000 },
+  { 0x8c00, 0x0f9e, 0x2000 },
+  { 0x0c00, 0x0f9d, 0x0000 },
+  { 0x0c00, 0x0f9f, 0x0000 },
+  { 0x9a00, 0x0fc1, 0x6000 },
+  { 0x8c00, 0x0fb0, 0x5000 },
+  { 0x8c00, 0x0fa8, 0x4000 },
+  { 0x8c00, 0x0fa4, 0x3000 },
+  { 0x8c00, 0x0fa2, 0x2000 },
+  { 0x0c00, 0x0fa1, 0x0000 },
+  { 0x0c00, 0x0fa3, 0x0000 },
+  { 0x8c00, 0x0fa6, 0x2000 },
+  { 0x0c00, 0x0fa5, 0x0000 },
+  { 0x0c00, 0x0fa7, 0x0000 },
+  { 0x8c00, 0x0fac, 0x3000 },
+  { 0x8c00, 0x0faa, 0x2000 },
+  { 0x0c00, 0x0fa9, 0x0000 },
+  { 0x0c00, 0x0fab, 0x0000 },
+  { 0x8c00, 0x0fae, 0x2000 },
+  { 0x0c00, 0x0fad, 0x0000 },
+  { 0x0c00, 0x0faf, 0x0000 },
+  { 0x8c00, 0x0fb8, 0x4000 },
+  { 0x8c00, 0x0fb4, 0x3000 },
+  { 0x8c00, 0x0fb2, 0x2000 },
+  { 0x0c00, 0x0fb1, 0x0000 },
+  { 0x0c00, 0x0fb3, 0x0000 },
+  { 0x8c00, 0x0fb6, 0x2000 },
+  { 0x0c00, 0x0fb5, 0x0000 },
+  { 0x0c00, 0x0fb7, 0x0000 },
+  { 0x8c00, 0x0fbc, 0x3000 },
+  { 0x8c00, 0x0fba, 0x2000 },
+  { 0x0c00, 0x0fb9, 0x0000 },
+  { 0x0c00, 0x0fbb, 0x0000 },
+  { 0x9a00, 0x0fbf, 0x2000 },
+  { 0x1a00, 0x0fbe, 0x0000 },
+  { 0x1a00, 0x0fc0, 0x0000 },
+  { 0x8700, 0x1003, 0x5000 },
+  { 0x9a00, 0x0fc9, 0x4000 },
+  { 0x9a00, 0x0fc5, 0x3000 },
+  { 0x9a00, 0x0fc3, 0x2000 },
+  { 0x1a00, 0x0fc2, 0x0000 },
+  { 0x1a00, 0x0fc4, 0x0000 },
+  { 0x9a00, 0x0fc7, 0x2000 },
+  { 0x0c00, 0x0fc6, 0x0000 },
+  { 0x1a00, 0x0fc8, 0x0000 },
+  { 0x9a00, 0x0fcf, 0x3000 },
+  { 0x9a00, 0x0fcb, 0x2000 },
+  { 0x1a00, 0x0fca, 0x0000 },
+  { 0x1a00, 0x0fcc, 0x0000 },
+  { 0x8700, 0x1001, 0x2000 },
+  { 0x0700, 0x1000, 0x0000 },
+  { 0x0700, 0x1002, 0x0000 },
+  { 0x8700, 0x100b, 0x4000 },
+  { 0x8700, 0x1007, 0x3000 },
+  { 0x8700, 0x1005, 0x2000 },
+  { 0x0700, 0x1004, 0x0000 },
+  { 0x0700, 0x1006, 0x0000 },
+  { 0x8700, 0x1009, 0x2000 },
+  { 0x0700, 0x1008, 0x0000 },
+  { 0x0700, 0x100a, 0x0000 },
+  { 0x8700, 0x100f, 0x3000 },
+  { 0x8700, 0x100d, 0x2000 },
+  { 0x0700, 0x100c, 0x0000 },
+  { 0x0700, 0x100e, 0x0000 },
+  { 0x8700, 0x1011, 0x2000 },
+  { 0x0700, 0x1010, 0x0000 },
+  { 0x0700, 0x1012, 0x0000 },
+  { 0x8900, 0x10a5, 0x7000 },
+  { 0x8c00, 0x1039, 0x6000 },
+  { 0x8700, 0x1024, 0x5000 },
+  { 0x8700, 0x101b, 0x4000 },
+  { 0x8700, 0x1017, 0x3000 },
+  { 0x8700, 0x1015, 0x2000 },
+  { 0x0700, 0x1014, 0x0000 },
+  { 0x0700, 0x1016, 0x0000 },
+  { 0x8700, 0x1019, 0x2000 },
+  { 0x0700, 0x1018, 0x0000 },
+  { 0x0700, 0x101a, 0x0000 },
+  { 0x8700, 0x101f, 0x3000 },
+  { 0x8700, 0x101d, 0x2000 },
+  { 0x0700, 0x101c, 0x0000 },
+  { 0x0700, 0x101e, 0x0000 },
+  { 0x8700, 0x1021, 0x2000 },
+  { 0x0700, 0x1020, 0x0000 },
+  { 0x0700, 0x1023, 0x0000 },
+  { 0x8c00, 0x102e, 0x4000 },
+  { 0x8700, 0x1029, 0x3000 },
+  { 0x8700, 0x1026, 0x2000 },
+  { 0x0700, 0x1025, 0x0000 },
+  { 0x0700, 0x1027, 0x0000 },
+  { 0x8a00, 0x102c, 0x2000 },
+  { 0x0700, 0x102a, 0x0000 },
+  { 0x0c00, 0x102d, 0x0000 },
+  { 0x8c00, 0x1032, 0x3000 },
+  { 0x8c00, 0x1030, 0x2000 },
+  { 0x0c00, 0x102f, 0x0000 },
+  { 0x0a00, 0x1031, 0x0000 },
+  { 0x8c00, 0x1037, 0x2000 },
+  { 0x0c00, 0x1036, 0x0000 },
+  { 0x0a00, 0x1038, 0x0000 },
+  { 0x9500, 0x104f, 0x5000 },
+  { 0x8d00, 0x1047, 0x4000 },
+  { 0x8d00, 0x1043, 0x3000 },
+  { 0x8d00, 0x1041, 0x2000 },
+  { 0x0d00, 0x1040, 0x0000 },
+  { 0x0d00, 0x1042, 0x0000 },
+  { 0x8d00, 0x1045, 0x2000 },
+  { 0x0d00, 0x1044, 0x0000 },
+  { 0x0d00, 0x1046, 0x0000 },
+  { 0x9500, 0x104b, 0x3000 },
+  { 0x8d00, 0x1049, 0x2000 },
+  { 0x0d00, 0x1048, 0x0000 },
+  { 0x1500, 0x104a, 0x0000 },
+  { 0x9500, 0x104d, 0x2000 },
+  { 0x1500, 0x104c, 0x0000 },
+  { 0x1500, 0x104e, 0x0000 },
+  { 0x8a00, 0x1057, 0x4000 },
+  { 0x8700, 0x1053, 0x3000 },
+  { 0x8700, 0x1051, 0x2000 },
+  { 0x0700, 0x1050, 0x0000 },
+  { 0x0700, 0x1052, 0x0000 },
+  { 0x8700, 0x1055, 0x2000 },
+  { 0x0700, 0x1054, 0x0000 },
+  { 0x0a00, 0x1056, 0x0000 },
+  { 0x8900, 0x10a1, 0x3000 },
+  { 0x8c00, 0x1059, 0x2000 },
+  { 0x0c00, 0x1058, 0x0000 },
+  { 0x0900, 0x10a0, 0x0000 },
+  { 0x8900, 0x10a3, 0x2000 },
+  { 0x0900, 0x10a2, 0x0000 },
+  { 0x0900, 0x10a4, 0x0000 },
+  { 0x8900, 0x10c5, 0x6000 },
+  { 0x8900, 0x10b5, 0x5000 },
+  { 0x8900, 0x10ad, 0x4000 },
+  { 0x8900, 0x10a9, 0x3000 },
+  { 0x8900, 0x10a7, 0x2000 },
+  { 0x0900, 0x10a6, 0x0000 },
+  { 0x0900, 0x10a8, 0x0000 },
+  { 0x8900, 0x10ab, 0x2000 },
+  { 0x0900, 0x10aa, 0x0000 },
+  { 0x0900, 0x10ac, 0x0000 },
+  { 0x8900, 0x10b1, 0x3000 },
+  { 0x8900, 0x10af, 0x2000 },
+  { 0x0900, 0x10ae, 0x0000 },
+  { 0x0900, 0x10b0, 0x0000 },
+  { 0x8900, 0x10b3, 0x2000 },
+  { 0x0900, 0x10b2, 0x0000 },
+  { 0x0900, 0x10b4, 0x0000 },
+  { 0x8900, 0x10bd, 0x4000 },
+  { 0x8900, 0x10b9, 0x3000 },
+  { 0x8900, 0x10b7, 0x2000 },
+  { 0x0900, 0x10b6, 0x0000 },
+  { 0x0900, 0x10b8, 0x0000 },
+  { 0x8900, 0x10bb, 0x2000 },
+  { 0x0900, 0x10ba, 0x0000 },
+  { 0x0900, 0x10bc, 0x0000 },
+  { 0x8900, 0x10c1, 0x3000 },
+  { 0x8900, 0x10bf, 0x2000 },
+  { 0x0900, 0x10be, 0x0000 },
+  { 0x0900, 0x10c0, 0x0000 },
+  { 0x8900, 0x10c3, 0x2000 },
+  { 0x0900, 0x10c2, 0x0000 },
+  { 0x0900, 0x10c4, 0x0000 },
+  { 0x8700, 0x10df, 0x5000 },
+  { 0x8700, 0x10d7, 0x4000 },
+  { 0x8700, 0x10d3, 0x3000 },
+  { 0x8700, 0x10d1, 0x2000 },
+  { 0x0700, 0x10d0, 0x0000 },
+  { 0x0700, 0x10d2, 0x0000 },
+  { 0x8700, 0x10d5, 0x2000 },
+  { 0x0700, 0x10d4, 0x0000 },
+  { 0x0700, 0x10d6, 0x0000 },
+  { 0x8700, 0x10db, 0x3000 },
+  { 0x8700, 0x10d9, 0x2000 },
+  { 0x0700, 0x10d8, 0x0000 },
+  { 0x0700, 0x10da, 0x0000 },
+  { 0x8700, 0x10dd, 0x2000 },
+  { 0x0700, 0x10dc, 0x0000 },
+  { 0x0700, 0x10de, 0x0000 },
+  { 0x8700, 0x10e7, 0x4000 },
+  { 0x8700, 0x10e3, 0x3000 },
+  { 0x8700, 0x10e1, 0x2000 },
+  { 0x0700, 0x10e0, 0x0000 },
+  { 0x0700, 0x10e2, 0x0000 },
+  { 0x8700, 0x10e5, 0x2000 },
+  { 0x0700, 0x10e4, 0x0000 },
+  { 0x0700, 0x10e6, 0x0000 },
+  { 0x8700, 0x10eb, 0x3000 },
+  { 0x8700, 0x10e9, 0x2000 },
+  { 0x0700, 0x10e8, 0x0000 },
+  { 0x0700, 0x10ea, 0x0000 },
+  { 0x8700, 0x10ed, 0x2000 },
+  { 0x0700, 0x10ec, 0x0000 },
+  { 0x0700, 0x10ee, 0x0000 },
+  { 0x8700, 0x1322, 0xa000 },
+  { 0x8700, 0x1205, 0x9000 },
+  { 0x8700, 0x117a, 0x8000 },
+  { 0x8700, 0x1135, 0x7000 },
+  { 0x8700, 0x1115, 0x6000 },
+  { 0x8700, 0x1105, 0x5000 },
+  { 0x8700, 0x10f7, 0x4000 },
+  { 0x8700, 0x10f3, 0x3000 },
+  { 0x8700, 0x10f1, 0x2000 },
+  { 0x0700, 0x10f0, 0x0000 },
+  { 0x0700, 0x10f2, 0x0000 },
+  { 0x8700, 0x10f5, 0x2000 },
+  { 0x0700, 0x10f4, 0x0000 },
+  { 0x0700, 0x10f6, 0x0000 },
+  { 0x8700, 0x1101, 0x3000 },
+  { 0x9500, 0x10fb, 0x2000 },
+  { 0x0700, 0x10f8, 0x0000 },
+  { 0x0700, 0x1100, 0x0000 },
+  { 0x8700, 0x1103, 0x2000 },
+  { 0x0700, 0x1102, 0x0000 },
+  { 0x0700, 0x1104, 0x0000 },
+  { 0x8700, 0x110d, 0x4000 },
+  { 0x8700, 0x1109, 0x3000 },
+  { 0x8700, 0x1107, 0x2000 },
+  { 0x0700, 0x1106, 0x0000 },
+  { 0x0700, 0x1108, 0x0000 },
+  { 0x8700, 0x110b, 0x2000 },
+  { 0x0700, 0x110a, 0x0000 },
+  { 0x0700, 0x110c, 0x0000 },
+  { 0x8700, 0x1111, 0x3000 },
+  { 0x8700, 0x110f, 0x2000 },
+  { 0x0700, 0x110e, 0x0000 },
+  { 0x0700, 0x1110, 0x0000 },
+  { 0x8700, 0x1113, 0x2000 },
+  { 0x0700, 0x1112, 0x0000 },
+  { 0x0700, 0x1114, 0x0000 },
+  { 0x8700, 0x1125, 0x5000 },
+  { 0x8700, 0x111d, 0x4000 },
+  { 0x8700, 0x1119, 0x3000 },
+  { 0x8700, 0x1117, 0x2000 },
+  { 0x0700, 0x1116, 0x0000 },
+  { 0x0700, 0x1118, 0x0000 },
+  { 0x8700, 0x111b, 0x2000 },
+  { 0x0700, 0x111a, 0x0000 },
+  { 0x0700, 0x111c, 0x0000 },
+  { 0x8700, 0x1121, 0x3000 },
+  { 0x8700, 0x111f, 0x2000 },
+  { 0x0700, 0x111e, 0x0000 },
+  { 0x0700, 0x1120, 0x0000 },
+  { 0x8700, 0x1123, 0x2000 },
+  { 0x0700, 0x1122, 0x0000 },
+  { 0x0700, 0x1124, 0x0000 },
+  { 0x8700, 0x112d, 0x4000 },
+  { 0x8700, 0x1129, 0x3000 },
+  { 0x8700, 0x1127, 0x2000 },
+  { 0x0700, 0x1126, 0x0000 },
+  { 0x0700, 0x1128, 0x0000 },
+  { 0x8700, 0x112b, 0x2000 },
+  { 0x0700, 0x112a, 0x0000 },
+  { 0x0700, 0x112c, 0x0000 },
+  { 0x8700, 0x1131, 0x3000 },
+  { 0x8700, 0x112f, 0x2000 },
+  { 0x0700, 0x112e, 0x0000 },
+  { 0x0700, 0x1130, 0x0000 },
+  { 0x8700, 0x1133, 0x2000 },
+  { 0x0700, 0x1132, 0x0000 },
+  { 0x0700, 0x1134, 0x0000 },
+  { 0x8700, 0x1155, 0x6000 },
+  { 0x8700, 0x1145, 0x5000 },
+  { 0x8700, 0x113d, 0x4000 },
+  { 0x8700, 0x1139, 0x3000 },
+  { 0x8700, 0x1137, 0x2000 },
+  { 0x0700, 0x1136, 0x0000 },
+  { 0x0700, 0x1138, 0x0000 },
+  { 0x8700, 0x113b, 0x2000 },
+  { 0x0700, 0x113a, 0x0000 },
+  { 0x0700, 0x113c, 0x0000 },
+  { 0x8700, 0x1141, 0x3000 },
+  { 0x8700, 0x113f, 0x2000 },
+  { 0x0700, 0x113e, 0x0000 },
+  { 0x0700, 0x1140, 0x0000 },
+  { 0x8700, 0x1143, 0x2000 },
+  { 0x0700, 0x1142, 0x0000 },
+  { 0x0700, 0x1144, 0x0000 },
+  { 0x8700, 0x114d, 0x4000 },
+  { 0x8700, 0x1149, 0x3000 },
+  { 0x8700, 0x1147, 0x2000 },
+  { 0x0700, 0x1146, 0x0000 },
+  { 0x0700, 0x1148, 0x0000 },
+  { 0x8700, 0x114b, 0x2000 },
+  { 0x0700, 0x114a, 0x0000 },
+  { 0x0700, 0x114c, 0x0000 },
+  { 0x8700, 0x1151, 0x3000 },
+  { 0x8700, 0x114f, 0x2000 },
+  { 0x0700, 0x114e, 0x0000 },
+  { 0x0700, 0x1150, 0x0000 },
+  { 0x8700, 0x1153, 0x2000 },
+  { 0x0700, 0x1152, 0x0000 },
+  { 0x0700, 0x1154, 0x0000 },
+  { 0x8700, 0x116a, 0x5000 },
+  { 0x8700, 0x1162, 0x4000 },
+  { 0x8700, 0x1159, 0x3000 },
+  { 0x8700, 0x1157, 0x2000 },
+  { 0x0700, 0x1156, 0x0000 },
+  { 0x0700, 0x1158, 0x0000 },
+  { 0x8700, 0x1160, 0x2000 },
+  { 0x0700, 0x115f, 0x0000 },
+  { 0x0700, 0x1161, 0x0000 },
+  { 0x8700, 0x1166, 0x3000 },
+  { 0x8700, 0x1164, 0x2000 },
+  { 0x0700, 0x1163, 0x0000 },
+  { 0x0700, 0x1165, 0x0000 },
+  { 0x8700, 0x1168, 0x2000 },
+  { 0x0700, 0x1167, 0x0000 },
+  { 0x0700, 0x1169, 0x0000 },
+  { 0x8700, 0x1172, 0x4000 },
+  { 0x8700, 0x116e, 0x3000 },
+  { 0x8700, 0x116c, 0x2000 },
+  { 0x0700, 0x116b, 0x0000 },
+  { 0x0700, 0x116d, 0x0000 },
+  { 0x8700, 0x1170, 0x2000 },
+  { 0x0700, 0x116f, 0x0000 },
+  { 0x0700, 0x1171, 0x0000 },
+  { 0x8700, 0x1176, 0x3000 },
+  { 0x8700, 0x1174, 0x2000 },
+  { 0x0700, 0x1173, 0x0000 },
+  { 0x0700, 0x1175, 0x0000 },
+  { 0x8700, 0x1178, 0x2000 },
+  { 0x0700, 0x1177, 0x0000 },
+  { 0x0700, 0x1179, 0x0000 },
+  { 0x8700, 0x11bf, 0x7000 },
+  { 0x8700, 0x119a, 0x6000 },
+  { 0x8700, 0x118a, 0x5000 },
+  { 0x8700, 0x1182, 0x4000 },
+  { 0x8700, 0x117e, 0x3000 },
+  { 0x8700, 0x117c, 0x2000 },
+  { 0x0700, 0x117b, 0x0000 },
+  { 0x0700, 0x117d, 0x0000 },
+  { 0x8700, 0x1180, 0x2000 },
+  { 0x0700, 0x117f, 0x0000 },
+  { 0x0700, 0x1181, 0x0000 },
+  { 0x8700, 0x1186, 0x3000 },
+  { 0x8700, 0x1184, 0x2000 },
+  { 0x0700, 0x1183, 0x0000 },
+  { 0x0700, 0x1185, 0x0000 },
+  { 0x8700, 0x1188, 0x2000 },
+  { 0x0700, 0x1187, 0x0000 },
+  { 0x0700, 0x1189, 0x0000 },
+  { 0x8700, 0x1192, 0x4000 },
+  { 0x8700, 0x118e, 0x3000 },
+  { 0x8700, 0x118c, 0x2000 },
+  { 0x0700, 0x118b, 0x0000 },
+  { 0x0700, 0x118d, 0x0000 },
+  { 0x8700, 0x1190, 0x2000 },
+  { 0x0700, 0x118f, 0x0000 },
+  { 0x0700, 0x1191, 0x0000 },
+  { 0x8700, 0x1196, 0x3000 },
+  { 0x8700, 0x1194, 0x2000 },
+  { 0x0700, 0x1193, 0x0000 },
+  { 0x0700, 0x1195, 0x0000 },
+  { 0x8700, 0x1198, 0x2000 },
+  { 0x0700, 0x1197, 0x0000 },
+  { 0x0700, 0x1199, 0x0000 },
+  { 0x8700, 0x11af, 0x5000 },
+  { 0x8700, 0x11a2, 0x4000 },
+  { 0x8700, 0x119e, 0x3000 },
+  { 0x8700, 0x119c, 0x2000 },
+  { 0x0700, 0x119b, 0x0000 },
+  { 0x0700, 0x119d, 0x0000 },
+  { 0x8700, 0x11a0, 0x2000 },
+  { 0x0700, 0x119f, 0x0000 },
+  { 0x0700, 0x11a1, 0x0000 },
+  { 0x8700, 0x11ab, 0x3000 },
+  { 0x8700, 0x11a9, 0x2000 },
+  { 0x0700, 0x11a8, 0x0000 },
+  { 0x0700, 0x11aa, 0x0000 },
+  { 0x8700, 0x11ad, 0x2000 },
+  { 0x0700, 0x11ac, 0x0000 },
+  { 0x0700, 0x11ae, 0x0000 },
+  { 0x8700, 0x11b7, 0x4000 },
+  { 0x8700, 0x11b3, 0x3000 },
+  { 0x8700, 0x11b1, 0x2000 },
+  { 0x0700, 0x11b0, 0x0000 },
+  { 0x0700, 0x11b2, 0x0000 },
+  { 0x8700, 0x11b5, 0x2000 },
+  { 0x0700, 0x11b4, 0x0000 },
+  { 0x0700, 0x11b6, 0x0000 },
+  { 0x8700, 0x11bb, 0x3000 },
+  { 0x8700, 0x11b9, 0x2000 },
+  { 0x0700, 0x11b8, 0x0000 },
+  { 0x0700, 0x11ba, 0x0000 },
+  { 0x8700, 0x11bd, 0x2000 },
+  { 0x0700, 0x11bc, 0x0000 },
+  { 0x0700, 0x11be, 0x0000 },
+  { 0x8700, 0x11df, 0x6000 },
+  { 0x8700, 0x11cf, 0x5000 },
+  { 0x8700, 0x11c7, 0x4000 },
+  { 0x8700, 0x11c3, 0x3000 },
+  { 0x8700, 0x11c1, 0x2000 },
+  { 0x0700, 0x11c0, 0x0000 },
+  { 0x0700, 0x11c2, 0x0000 },
+  { 0x8700, 0x11c5, 0x2000 },
+  { 0x0700, 0x11c4, 0x0000 },
+  { 0x0700, 0x11c6, 0x0000 },
+  { 0x8700, 0x11cb, 0x3000 },
+  { 0x8700, 0x11c9, 0x2000 },
+  { 0x0700, 0x11c8, 0x0000 },
+  { 0x0700, 0x11ca, 0x0000 },
+  { 0x8700, 0x11cd, 0x2000 },
+  { 0x0700, 0x11cc, 0x0000 },
+  { 0x0700, 0x11ce, 0x0000 },
+  { 0x8700, 0x11d7, 0x4000 },
+  { 0x8700, 0x11d3, 0x3000 },
+  { 0x8700, 0x11d1, 0x2000 },
+  { 0x0700, 0x11d0, 0x0000 },
+  { 0x0700, 0x11d2, 0x0000 },
+  { 0x8700, 0x11d5, 0x2000 },
+  { 0x0700, 0x11d4, 0x0000 },
+  { 0x0700, 0x11d6, 0x0000 },
+  { 0x8700, 0x11db, 0x3000 },
+  { 0x8700, 0x11d9, 0x2000 },
+  { 0x0700, 0x11d8, 0x0000 },
+  { 0x0700, 0x11da, 0x0000 },
+  { 0x8700, 0x11dd, 0x2000 },
+  { 0x0700, 0x11dc, 0x0000 },
+  { 0x0700, 0x11de, 0x0000 },
+  { 0x8700, 0x11ef, 0x5000 },
+  { 0x8700, 0x11e7, 0x4000 },
+  { 0x8700, 0x11e3, 0x3000 },
+  { 0x8700, 0x11e1, 0x2000 },
+  { 0x0700, 0x11e0, 0x0000 },
+  { 0x0700, 0x11e2, 0x0000 },
+  { 0x8700, 0x11e5, 0x2000 },
+  { 0x0700, 0x11e4, 0x0000 },
+  { 0x0700, 0x11e6, 0x0000 },
+  { 0x8700, 0x11eb, 0x3000 },
+  { 0x8700, 0x11e9, 0x2000 },
+  { 0x0700, 0x11e8, 0x0000 },
+  { 0x0700, 0x11ea, 0x0000 },
+  { 0x8700, 0x11ed, 0x2000 },
+  { 0x0700, 0x11ec, 0x0000 },
+  { 0x0700, 0x11ee, 0x0000 },
+  { 0x8700, 0x11f7, 0x4000 },
+  { 0x8700, 0x11f3, 0x3000 },
+  { 0x8700, 0x11f1, 0x2000 },
+  { 0x0700, 0x11f0, 0x0000 },
+  { 0x0700, 0x11f2, 0x0000 },
+  { 0x8700, 0x11f5, 0x2000 },
+  { 0x0700, 0x11f4, 0x0000 },
+  { 0x0700, 0x11f6, 0x0000 },
+  { 0x8700, 0x1201, 0x3000 },
+  { 0x8700, 0x11f9, 0x2000 },
+  { 0x0700, 0x11f8, 0x0000 },
+  { 0x0700, 0x1200, 0x0000 },
+  { 0x8700, 0x1203, 0x2000 },
+  { 0x0700, 0x1202, 0x0000 },
+  { 0x0700, 0x1204, 0x0000 },
+  { 0x8700, 0x1292, 0x8000 },
+  { 0x8700, 0x1246, 0x7000 },
+  { 0x8700, 0x1226, 0x6000 },
+  { 0x8700, 0x1216, 0x5000 },
+  { 0x8700, 0x120e, 0x4000 },
+  { 0x8700, 0x120a, 0x3000 },
+  { 0x8700, 0x1208, 0x2000 },
+  { 0x0700, 0x1206, 0x0000 },
+  { 0x0700, 0x1209, 0x0000 },
+  { 0x8700, 0x120c, 0x2000 },
+  { 0x0700, 0x120b, 0x0000 },
+  { 0x0700, 0x120d, 0x0000 },
+  { 0x8700, 0x1212, 0x3000 },
+  { 0x8700, 0x1210, 0x2000 },
+  { 0x0700, 0x120f, 0x0000 },
+  { 0x0700, 0x1211, 0x0000 },
+  { 0x8700, 0x1214, 0x2000 },
+  { 0x0700, 0x1213, 0x0000 },
+  { 0x0700, 0x1215, 0x0000 },
+  { 0x8700, 0x121e, 0x4000 },
+  { 0x8700, 0x121a, 0x3000 },
+  { 0x8700, 0x1218, 0x2000 },
+  { 0x0700, 0x1217, 0x0000 },
+  { 0x0700, 0x1219, 0x0000 },
+  { 0x8700, 0x121c, 0x2000 },
+  { 0x0700, 0x121b, 0x0000 },
+  { 0x0700, 0x121d, 0x0000 },
+  { 0x8700, 0x1222, 0x3000 },
+  { 0x8700, 0x1220, 0x2000 },
+  { 0x0700, 0x121f, 0x0000 },
+  { 0x0700, 0x1221, 0x0000 },
+  { 0x8700, 0x1224, 0x2000 },
+  { 0x0700, 0x1223, 0x0000 },
+  { 0x0700, 0x1225, 0x0000 },
+  { 0x8700, 0x1236, 0x5000 },
+  { 0x8700, 0x122e, 0x4000 },
+  { 0x8700, 0x122a, 0x3000 },
+  { 0x8700, 0x1228, 0x2000 },
+  { 0x0700, 0x1227, 0x0000 },
+  { 0x0700, 0x1229, 0x0000 },
+  { 0x8700, 0x122c, 0x2000 },
+  { 0x0700, 0x122b, 0x0000 },
+  { 0x0700, 0x122d, 0x0000 },
+  { 0x8700, 0x1232, 0x3000 },
+  { 0x8700, 0x1230, 0x2000 },
+  { 0x0700, 0x122f, 0x0000 },
+  { 0x0700, 0x1231, 0x0000 },
+  { 0x8700, 0x1234, 0x2000 },
+  { 0x0700, 0x1233, 0x0000 },
+  { 0x0700, 0x1235, 0x0000 },
+  { 0x8700, 0x123e, 0x4000 },
+  { 0x8700, 0x123a, 0x3000 },
+  { 0x8700, 0x1238, 0x2000 },
+  { 0x0700, 0x1237, 0x0000 },
+  { 0x0700, 0x1239, 0x0000 },
+  { 0x8700, 0x123c, 0x2000 },
+  { 0x0700, 0x123b, 0x0000 },
+  { 0x0700, 0x123d, 0x0000 },
+  { 0x8700, 0x1242, 0x3000 },
+  { 0x8700, 0x1240, 0x2000 },
+  { 0x0700, 0x123f, 0x0000 },
+  { 0x0700, 0x1241, 0x0000 },
+  { 0x8700, 0x1244, 0x2000 },
+  { 0x0700, 0x1243, 0x0000 },
+  { 0x0700, 0x1245, 0x0000 },
+  { 0x8700, 0x126e, 0x6000 },
+  { 0x8700, 0x125c, 0x5000 },
+  { 0x8700, 0x1252, 0x4000 },
+  { 0x8700, 0x124c, 0x3000 },
+  { 0x8700, 0x124a, 0x2000 },
+  { 0x0700, 0x1248, 0x0000 },
+  { 0x0700, 0x124b, 0x0000 },
+  { 0x8700, 0x1250, 0x2000 },
+  { 0x0700, 0x124d, 0x0000 },
+  { 0x0700, 0x1251, 0x0000 },
+  { 0x8700, 0x1256, 0x3000 },
+  { 0x8700, 0x1254, 0x2000 },
+  { 0x0700, 0x1253, 0x0000 },
+  { 0x0700, 0x1255, 0x0000 },
+  { 0x8700, 0x125a, 0x2000 },
+  { 0x0700, 0x1258, 0x0000 },
+  { 0x0700, 0x125b, 0x0000 },
+  { 0x8700, 0x1266, 0x4000 },
+  { 0x8700, 0x1262, 0x3000 },
+  { 0x8700, 0x1260, 0x2000 },
+  { 0x0700, 0x125d, 0x0000 },
+  { 0x0700, 0x1261, 0x0000 },
+  { 0x8700, 0x1264, 0x2000 },
+  { 0x0700, 0x1263, 0x0000 },
+  { 0x0700, 0x1265, 0x0000 },
+  { 0x8700, 0x126a, 0x3000 },
+  { 0x8700, 0x1268, 0x2000 },
+  { 0x0700, 0x1267, 0x0000 },
+  { 0x0700, 0x1269, 0x0000 },
+  { 0x8700, 0x126c, 0x2000 },
+  { 0x0700, 0x126b, 0x0000 },
+  { 0x0700, 0x126d, 0x0000 },
+  { 0x8700, 0x127e, 0x5000 },
+  { 0x8700, 0x1276, 0x4000 },
+  { 0x8700, 0x1272, 0x3000 },
+  { 0x8700, 0x1270, 0x2000 },
+  { 0x0700, 0x126f, 0x0000 },
+  { 0x0700, 0x1271, 0x0000 },
+  { 0x8700, 0x1274, 0x2000 },
+  { 0x0700, 0x1273, 0x0000 },
+  { 0x0700, 0x1275, 0x0000 },
+  { 0x8700, 0x127a, 0x3000 },
+  { 0x8700, 0x1278, 0x2000 },
+  { 0x0700, 0x1277, 0x0000 },
+  { 0x0700, 0x1279, 0x0000 },
+  { 0x8700, 0x127c, 0x2000 },
+  { 0x0700, 0x127b, 0x0000 },
+  { 0x0700, 0x127d, 0x0000 },
+  { 0x8700, 0x1286, 0x4000 },
+  { 0x8700, 0x1282, 0x3000 },
+  { 0x8700, 0x1280, 0x2000 },
+  { 0x0700, 0x127f, 0x0000 },
+  { 0x0700, 0x1281, 0x0000 },
+  { 0x8700, 0x1284, 0x2000 },
+  { 0x0700, 0x1283, 0x0000 },
+  { 0x0700, 0x1285, 0x0000 },
+  { 0x8700, 0x128c, 0x3000 },
+  { 0x8700, 0x128a, 0x2000 },
+  { 0x0700, 0x1288, 0x0000 },
+  { 0x0700, 0x128b, 0x0000 },
+  { 0x8700, 0x1290, 0x2000 },
+  { 0x0700, 0x128d, 0x0000 },
+  { 0x0700, 0x1291, 0x0000 },
+  { 0x8700, 0x12dc, 0x7000 },
+  { 0x8700, 0x12b4, 0x6000 },
+  { 0x8700, 0x12a2, 0x5000 },
+  { 0x8700, 0x129a, 0x4000 },
+  { 0x8700, 0x1296, 0x3000 },
+  { 0x8700, 0x1294, 0x2000 },
+  { 0x0700, 0x1293, 0x0000 },
+  { 0x0700, 0x1295, 0x0000 },
+  { 0x8700, 0x1298, 0x2000 },
+  { 0x0700, 0x1297, 0x0000 },
+  { 0x0700, 0x1299, 0x0000 },
+  { 0x8700, 0x129e, 0x3000 },
+  { 0x8700, 0x129c, 0x2000 },
+  { 0x0700, 0x129b, 0x0000 },
+  { 0x0700, 0x129d, 0x0000 },
+  { 0x8700, 0x12a0, 0x2000 },
+  { 0x0700, 0x129f, 0x0000 },
+  { 0x0700, 0x12a1, 0x0000 },
+  { 0x8700, 0x12aa, 0x4000 },
+  { 0x8700, 0x12a6, 0x3000 },
+  { 0x8700, 0x12a4, 0x2000 },
+  { 0x0700, 0x12a3, 0x0000 },
+  { 0x0700, 0x12a5, 0x0000 },
+  { 0x8700, 0x12a8, 0x2000 },
+  { 0x0700, 0x12a7, 0x0000 },
+  { 0x0700, 0x12a9, 0x0000 },
+  { 0x8700, 0x12ae, 0x3000 },
+  { 0x8700, 0x12ac, 0x2000 },
+  { 0x0700, 0x12ab, 0x0000 },
+  { 0x0700, 0x12ad, 0x0000 },
+  { 0x8700, 0x12b2, 0x2000 },
+  { 0x0700, 0x12b0, 0x0000 },
+  { 0x0700, 0x12b3, 0x0000 },
+  { 0x8700, 0x12ca, 0x5000 },
+  { 0x8700, 0x12be, 0x4000 },
+  { 0x8700, 0x12ba, 0x3000 },
+  { 0x8700, 0x12b8, 0x2000 },
+  { 0x0700, 0x12b5, 0x0000 },
+  { 0x0700, 0x12b9, 0x0000 },
+  { 0x8700, 0x12bc, 0x2000 },
+  { 0x0700, 0x12bb, 0x0000 },
+  { 0x0700, 0x12bd, 0x0000 },
+  { 0x8700, 0x12c4, 0x3000 },
+  { 0x8700, 0x12c2, 0x2000 },
+  { 0x0700, 0x12c0, 0x0000 },
+  { 0x0700, 0x12c3, 0x0000 },
+  { 0x8700, 0x12c8, 0x2000 },
+  { 0x0700, 0x12c5, 0x0000 },
+  { 0x0700, 0x12c9, 0x0000 },
+  { 0x8700, 0x12d3, 0x4000 },
+  { 0x8700, 0x12ce, 0x3000 },
+  { 0x8700, 0x12cc, 0x2000 },
+  { 0x0700, 0x12cb, 0x0000 },
+  { 0x0700, 0x12cd, 0x0000 },
+  { 0x8700, 0x12d1, 0x2000 },
+  { 0x0700, 0x12d0, 0x0000 },
+  { 0x0700, 0x12d2, 0x0000 },
+  { 0x8700, 0x12d8, 0x3000 },
+  { 0x8700, 0x12d5, 0x2000 },
+  { 0x0700, 0x12d4, 0x0000 },
+  { 0x0700, 0x12d6, 0x0000 },
+  { 0x8700, 0x12da, 0x2000 },
+  { 0x0700, 0x12d9, 0x0000 },
+  { 0x0700, 0x12db, 0x0000 },
+  { 0x8700, 0x12fd, 0x6000 },
+  { 0x8700, 0x12ec, 0x5000 },
+  { 0x8700, 0x12e4, 0x4000 },
+  { 0x8700, 0x12e0, 0x3000 },
+  { 0x8700, 0x12de, 0x2000 },
+  { 0x0700, 0x12dd, 0x0000 },
+  { 0x0700, 0x12df, 0x0000 },
+  { 0x8700, 0x12e2, 0x2000 },
+  { 0x0700, 0x12e1, 0x0000 },
+  { 0x0700, 0x12e3, 0x0000 },
+  { 0x8700, 0x12e8, 0x3000 },
+  { 0x8700, 0x12e6, 0x2000 },
+  { 0x0700, 0x12e5, 0x0000 },
+  { 0x0700, 0x12e7, 0x0000 },
+  { 0x8700, 0x12ea, 0x2000 },
+  { 0x0700, 0x12e9, 0x0000 },
+  { 0x0700, 0x12eb, 0x0000 },
+  { 0x8700, 0x12f5, 0x4000 },
+  { 0x8700, 0x12f1, 0x3000 },
+  { 0x8700, 0x12ee, 0x2000 },
+  { 0x0700, 0x12ed, 0x0000 },
+  { 0x0700, 0x12f0, 0x0000 },
+  { 0x8700, 0x12f3, 0x2000 },
+  { 0x0700, 0x12f2, 0x0000 },
+  { 0x0700, 0x12f4, 0x0000 },
+  { 0x8700, 0x12f9, 0x3000 },
+  { 0x8700, 0x12f7, 0x2000 },
+  { 0x0700, 0x12f6, 0x0000 },
+  { 0x0700, 0x12f8, 0x0000 },
+  { 0x8700, 0x12fb, 0x2000 },
+  { 0x0700, 0x12fa, 0x0000 },
+  { 0x0700, 0x12fc, 0x0000 },
+  { 0x8700, 0x130d, 0x5000 },
+  { 0x8700, 0x1305, 0x4000 },
+  { 0x8700, 0x1301, 0x3000 },
+  { 0x8700, 0x12ff, 0x2000 },
+  { 0x0700, 0x12fe, 0x0000 },
+  { 0x0700, 0x1300, 0x0000 },
+  { 0x8700, 0x1303, 0x2000 },
+  { 0x0700, 0x1302, 0x0000 },
+  { 0x0700, 0x1304, 0x0000 },
+  { 0x8700, 0x1309, 0x3000 },
+  { 0x8700, 0x1307, 0x2000 },
+  { 0x0700, 0x1306, 0x0000 },
+  { 0x0700, 0x1308, 0x0000 },
+  { 0x8700, 0x130b, 0x2000 },
+  { 0x0700, 0x130a, 0x0000 },
+  { 0x0700, 0x130c, 0x0000 },
+  { 0x8700, 0x1319, 0x4000 },
+  { 0x8700, 0x1313, 0x3000 },
+  { 0x8700, 0x1310, 0x2000 },
+  { 0x0700, 0x130e, 0x0000 },
+  { 0x0700, 0x1312, 0x0000 },
+  { 0x8700, 0x1315, 0x2000 },
+  { 0x0700, 0x1314, 0x0000 },
+  { 0x0700, 0x1318, 0x0000 },
+  { 0x8700, 0x131d, 0x3000 },
+  { 0x8700, 0x131b, 0x2000 },
+  { 0x0700, 0x131a, 0x0000 },
+  { 0x0700, 0x131c, 0x0000 },
+  { 0x8700, 0x1320, 0x2000 },
+  { 0x0700, 0x131e, 0x0000 },
+  { 0x0700, 0x1321, 0x0000 },
+  { 0x8700, 0x1458, 0x9000 },
+  { 0x8700, 0x13cc, 0x8000 },
+  { 0x8d00, 0x1369, 0x7000 },
+  { 0x8700, 0x1342, 0x6000 },
+  { 0x8700, 0x1332, 0x5000 },
+  { 0x8700, 0x132a, 0x4000 },
+  { 0x8700, 0x1326, 0x3000 },
+  { 0x8700, 0x1324, 0x2000 },
+  { 0x0700, 0x1323, 0x0000 },
+  { 0x0700, 0x1325, 0x0000 },
+  { 0x8700, 0x1328, 0x2000 },
+  { 0x0700, 0x1327, 0x0000 },
+  { 0x0700, 0x1329, 0x0000 },
+  { 0x8700, 0x132e, 0x3000 },
+  { 0x8700, 0x132c, 0x2000 },
+  { 0x0700, 0x132b, 0x0000 },
+  { 0x0700, 0x132d, 0x0000 },
+  { 0x8700, 0x1330, 0x2000 },
+  { 0x0700, 0x132f, 0x0000 },
+  { 0x0700, 0x1331, 0x0000 },
+  { 0x8700, 0x133a, 0x4000 },
+  { 0x8700, 0x1336, 0x3000 },
+  { 0x8700, 0x1334, 0x2000 },
+  { 0x0700, 0x1333, 0x0000 },
+  { 0x0700, 0x1335, 0x0000 },
+  { 0x8700, 0x1338, 0x2000 },
+  { 0x0700, 0x1337, 0x0000 },
+  { 0x0700, 0x1339, 0x0000 },
+  { 0x8700, 0x133e, 0x3000 },
+  { 0x8700, 0x133c, 0x2000 },
+  { 0x0700, 0x133b, 0x0000 },
+  { 0x0700, 0x133d, 0x0000 },
+  { 0x8700, 0x1340, 0x2000 },
+  { 0x0700, 0x133f, 0x0000 },
+  { 0x0700, 0x1341, 0x0000 },
+  { 0x8700, 0x1353, 0x5000 },
+  { 0x8700, 0x134b, 0x4000 },
+  { 0x8700, 0x1346, 0x3000 },
+  { 0x8700, 0x1344, 0x2000 },
+  { 0x0700, 0x1343, 0x0000 },
+  { 0x0700, 0x1345, 0x0000 },
+  { 0x8700, 0x1349, 0x2000 },
+  { 0x0700, 0x1348, 0x0000 },
+  { 0x0700, 0x134a, 0x0000 },
+  { 0x8700, 0x134f, 0x3000 },
+  { 0x8700, 0x134d, 0x2000 },
+  { 0x0700, 0x134c, 0x0000 },
+  { 0x0700, 0x134e, 0x0000 },
+  { 0x8700, 0x1351, 0x2000 },
+  { 0x0700, 0x1350, 0x0000 },
+  { 0x0700, 0x1352, 0x0000 },
+  { 0x9500, 0x1361, 0x4000 },
+  { 0x8700, 0x1357, 0x3000 },
+  { 0x8700, 0x1355, 0x2000 },
+  { 0x0700, 0x1354, 0x0000 },
+  { 0x0700, 0x1356, 0x0000 },
+  { 0x8700, 0x1359, 0x2000 },
+  { 0x0700, 0x1358, 0x0000 },
+  { 0x0700, 0x135a, 0x0000 },
+  { 0x9500, 0x1365, 0x3000 },
+  { 0x9500, 0x1363, 0x2000 },
+  { 0x1500, 0x1362, 0x0000 },
+  { 0x1500, 0x1364, 0x0000 },
+  { 0x9500, 0x1367, 0x2000 },
+  { 0x1500, 0x1366, 0x0000 },
+  { 0x1500, 0x1368, 0x0000 },
+  { 0x8700, 0x13ac, 0x6000 },
+  { 0x8f00, 0x1379, 0x5000 },
+  { 0x8d00, 0x1371, 0x4000 },
+  { 0x8d00, 0x136d, 0x3000 },
+  { 0x8d00, 0x136b, 0x2000 },
+  { 0x0d00, 0x136a, 0x0000 },
+  { 0x0d00, 0x136c, 0x0000 },
+  { 0x8d00, 0x136f, 0x2000 },
+  { 0x0d00, 0x136e, 0x0000 },
+  { 0x0d00, 0x1370, 0x0000 },
+  { 0x8f00, 0x1375, 0x3000 },
+  { 0x8f00, 0x1373, 0x2000 },
+  { 0x0f00, 0x1372, 0x0000 },
+  { 0x0f00, 0x1374, 0x0000 },
+  { 0x8f00, 0x1377, 0x2000 },
+  { 0x0f00, 0x1376, 0x0000 },
+  { 0x0f00, 0x1378, 0x0000 },
+  { 0x8700, 0x13a4, 0x4000 },
+  { 0x8700, 0x13a0, 0x3000 },
+  { 0x8f00, 0x137b, 0x2000 },
+  { 0x0f00, 0x137a, 0x0000 },
+  { 0x0f00, 0x137c, 0x0000 },
+  { 0x8700, 0x13a2, 0x2000 },
+  { 0x0700, 0x13a1, 0x0000 },
+  { 0x0700, 0x13a3, 0x0000 },
+  { 0x8700, 0x13a8, 0x3000 },
+  { 0x8700, 0x13a6, 0x2000 },
+  { 0x0700, 0x13a5, 0x0000 },
+  { 0x0700, 0x13a7, 0x0000 },
+  { 0x8700, 0x13aa, 0x2000 },
+  { 0x0700, 0x13a9, 0x0000 },
+  { 0x0700, 0x13ab, 0x0000 },
+  { 0x8700, 0x13bc, 0x5000 },
+  { 0x8700, 0x13b4, 0x4000 },
+  { 0x8700, 0x13b0, 0x3000 },
+  { 0x8700, 0x13ae, 0x2000 },
+  { 0x0700, 0x13ad, 0x0000 },
+  { 0x0700, 0x13af, 0x0000 },
+  { 0x8700, 0x13b2, 0x2000 },
+  { 0x0700, 0x13b1, 0x0000 },
+  { 0x0700, 0x13b3, 0x0000 },
+  { 0x8700, 0x13b8, 0x3000 },
+  { 0x8700, 0x13b6, 0x2000 },
+  { 0x0700, 0x13b5, 0x0000 },
+  { 0x0700, 0x13b7, 0x0000 },
+  { 0x8700, 0x13ba, 0x2000 },
+  { 0x0700, 0x13b9, 0x0000 },
+  { 0x0700, 0x13bb, 0x0000 },
+  { 0x8700, 0x13c4, 0x4000 },
+  { 0x8700, 0x13c0, 0x3000 },
+  { 0x8700, 0x13be, 0x2000 },
+  { 0x0700, 0x13bd, 0x0000 },
+  { 0x0700, 0x13bf, 0x0000 },
+  { 0x8700, 0x13c2, 0x2000 },
+  { 0x0700, 0x13c1, 0x0000 },
+  { 0x0700, 0x13c3, 0x0000 },
+  { 0x8700, 0x13c8, 0x3000 },
+  { 0x8700, 0x13c6, 0x2000 },
+  { 0x0700, 0x13c5, 0x0000 },
+  { 0x0700, 0x13c7, 0x0000 },
+  { 0x8700, 0x13ca, 0x2000 },
+  { 0x0700, 0x13c9, 0x0000 },
+  { 0x0700, 0x13cb, 0x0000 },
+  { 0x8700, 0x1418, 0x7000 },
+  { 0x8700, 0x13ec, 0x6000 },
+  { 0x8700, 0x13dc, 0x5000 },
+  { 0x8700, 0x13d4, 0x4000 },
+  { 0x8700, 0x13d0, 0x3000 },
+  { 0x8700, 0x13ce, 0x2000 },
+  { 0x0700, 0x13cd, 0x0000 },
+  { 0x0700, 0x13cf, 0x0000 },
+  { 0x8700, 0x13d2, 0x2000 },
+  { 0x0700, 0x13d1, 0x0000 },
+  { 0x0700, 0x13d3, 0x0000 },
+  { 0x8700, 0x13d8, 0x3000 },
+  { 0x8700, 0x13d6, 0x2000 },
+  { 0x0700, 0x13d5, 0x0000 },
+  { 0x0700, 0x13d7, 0x0000 },
+  { 0x8700, 0x13da, 0x2000 },
+  { 0x0700, 0x13d9, 0x0000 },
+  { 0x0700, 0x13db, 0x0000 },
+  { 0x8700, 0x13e4, 0x4000 },
+  { 0x8700, 0x13e0, 0x3000 },
+  { 0x8700, 0x13de, 0x2000 },
+  { 0x0700, 0x13dd, 0x0000 },
+  { 0x0700, 0x13df, 0x0000 },
+  { 0x8700, 0x13e2, 0x2000 },
+  { 0x0700, 0x13e1, 0x0000 },
+  { 0x0700, 0x13e3, 0x0000 },
+  { 0x8700, 0x13e8, 0x3000 },
+  { 0x8700, 0x13e6, 0x2000 },
+  { 0x0700, 0x13e5, 0x0000 },
+  { 0x0700, 0x13e7, 0x0000 },
+  { 0x8700, 0x13ea, 0x2000 },
+  { 0x0700, 0x13e9, 0x0000 },
+  { 0x0700, 0x13eb, 0x0000 },
+  { 0x8700, 0x1408, 0x5000 },
+  { 0x8700, 0x13f4, 0x4000 },
+  { 0x8700, 0x13f0, 0x3000 },
+  { 0x8700, 0x13ee, 0x2000 },
+  { 0x0700, 0x13ed, 0x0000 },
+  { 0x0700, 0x13ef, 0x0000 },
+  { 0x8700, 0x13f2, 0x2000 },
+  { 0x0700, 0x13f1, 0x0000 },
+  { 0x0700, 0x13f3, 0x0000 },
+  { 0x8700, 0x1404, 0x3000 },
+  { 0x8700, 0x1402, 0x2000 },
+  { 0x0700, 0x1401, 0x0000 },
+  { 0x0700, 0x1403, 0x0000 },
+  { 0x8700, 0x1406, 0x2000 },
+  { 0x0700, 0x1405, 0x0000 },
+  { 0x0700, 0x1407, 0x0000 },
+  { 0x8700, 0x1410, 0x4000 },
+  { 0x8700, 0x140c, 0x3000 },
+  { 0x8700, 0x140a, 0x2000 },
+  { 0x0700, 0x1409, 0x0000 },
+  { 0x0700, 0x140b, 0x0000 },
+  { 0x8700, 0x140e, 0x2000 },
+  { 0x0700, 0x140d, 0x0000 },
+  { 0x0700, 0x140f, 0x0000 },
+  { 0x8700, 0x1414, 0x3000 },
+  { 0x8700, 0x1412, 0x2000 },
+  { 0x0700, 0x1411, 0x0000 },
+  { 0x0700, 0x1413, 0x0000 },
+  { 0x8700, 0x1416, 0x2000 },
+  { 0x0700, 0x1415, 0x0000 },
+  { 0x0700, 0x1417, 0x0000 },
+  { 0x8700, 0x1438, 0x6000 },
+  { 0x8700, 0x1428, 0x5000 },
+  { 0x8700, 0x1420, 0x4000 },
+  { 0x8700, 0x141c, 0x3000 },
+  { 0x8700, 0x141a, 0x2000 },
+  { 0x0700, 0x1419, 0x0000 },
+  { 0x0700, 0x141b, 0x0000 },
+  { 0x8700, 0x141e, 0x2000 },
+  { 0x0700, 0x141d, 0x0000 },
+  { 0x0700, 0x141f, 0x0000 },
+  { 0x8700, 0x1424, 0x3000 },
+  { 0x8700, 0x1422, 0x2000 },
+  { 0x0700, 0x1421, 0x0000 },
+  { 0x0700, 0x1423, 0x0000 },
+  { 0x8700, 0x1426, 0x2000 },
+  { 0x0700, 0x1425, 0x0000 },
+  { 0x0700, 0x1427, 0x0000 },
+  { 0x8700, 0x1430, 0x4000 },
+  { 0x8700, 0x142c, 0x3000 },
+  { 0x8700, 0x142a, 0x2000 },
+  { 0x0700, 0x1429, 0x0000 },
+  { 0x0700, 0x142b, 0x0000 },
+  { 0x8700, 0x142e, 0x2000 },
+  { 0x0700, 0x142d, 0x0000 },
+  { 0x0700, 0x142f, 0x0000 },
+  { 0x8700, 0x1434, 0x3000 },
+  { 0x8700, 0x1432, 0x2000 },
+  { 0x0700, 0x1431, 0x0000 },
+  { 0x0700, 0x1433, 0x0000 },
+  { 0x8700, 0x1436, 0x2000 },
+  { 0x0700, 0x1435, 0x0000 },
+  { 0x0700, 0x1437, 0x0000 },
+  { 0x8700, 0x1448, 0x5000 },
+  { 0x8700, 0x1440, 0x4000 },
+  { 0x8700, 0x143c, 0x3000 },
+  { 0x8700, 0x143a, 0x2000 },
+  { 0x0700, 0x1439, 0x0000 },
+  { 0x0700, 0x143b, 0x0000 },
+  { 0x8700, 0x143e, 0x2000 },
+  { 0x0700, 0x143d, 0x0000 },
+  { 0x0700, 0x143f, 0x0000 },
+  { 0x8700, 0x1444, 0x3000 },
+  { 0x8700, 0x1442, 0x2000 },
+  { 0x0700, 0x1441, 0x0000 },
+  { 0x0700, 0x1443, 0x0000 },
+  { 0x8700, 0x1446, 0x2000 },
+  { 0x0700, 0x1445, 0x0000 },
+  { 0x0700, 0x1447, 0x0000 },
+  { 0x8700, 0x1450, 0x4000 },
+  { 0x8700, 0x144c, 0x3000 },
+  { 0x8700, 0x144a, 0x2000 },
+  { 0x0700, 0x1449, 0x0000 },
+  { 0x0700, 0x144b, 0x0000 },
+  { 0x8700, 0x144e, 0x2000 },
+  { 0x0700, 0x144d, 0x0000 },
+  { 0x0700, 0x144f, 0x0000 },
+  { 0x8700, 0x1454, 0x3000 },
+  { 0x8700, 0x1452, 0x2000 },
+  { 0x0700, 0x1451, 0x0000 },
+  { 0x0700, 0x1453, 0x0000 },
+  { 0x8700, 0x1456, 0x2000 },
+  { 0x0700, 0x1455, 0x0000 },
+  { 0x0700, 0x1457, 0x0000 },
+  { 0x8700, 0x14d8, 0x8000 },
+  { 0x8700, 0x1498, 0x7000 },
+  { 0x8700, 0x1478, 0x6000 },
+  { 0x8700, 0x1468, 0x5000 },
+  { 0x8700, 0x1460, 0x4000 },
+  { 0x8700, 0x145c, 0x3000 },
+  { 0x8700, 0x145a, 0x2000 },
+  { 0x0700, 0x1459, 0x0000 },
+  { 0x0700, 0x145b, 0x0000 },
+  { 0x8700, 0x145e, 0x2000 },
+  { 0x0700, 0x145d, 0x0000 },
+  { 0x0700, 0x145f, 0x0000 },
+  { 0x8700, 0x1464, 0x3000 },
+  { 0x8700, 0x1462, 0x2000 },
+  { 0x0700, 0x1461, 0x0000 },
+  { 0x0700, 0x1463, 0x0000 },
+  { 0x8700, 0x1466, 0x2000 },
+  { 0x0700, 0x1465, 0x0000 },
+  { 0x0700, 0x1467, 0x0000 },
+  { 0x8700, 0x1470, 0x4000 },
+  { 0x8700, 0x146c, 0x3000 },
+  { 0x8700, 0x146a, 0x2000 },
+  { 0x0700, 0x1469, 0x0000 },
+  { 0x0700, 0x146b, 0x0000 },
+  { 0x8700, 0x146e, 0x2000 },
+  { 0x0700, 0x146d, 0x0000 },
+  { 0x0700, 0x146f, 0x0000 },
+  { 0x8700, 0x1474, 0x3000 },
+  { 0x8700, 0x1472, 0x2000 },
+  { 0x0700, 0x1471, 0x0000 },
+  { 0x0700, 0x1473, 0x0000 },
+  { 0x8700, 0x1476, 0x2000 },
+  { 0x0700, 0x1475, 0x0000 },
+  { 0x0700, 0x1477, 0x0000 },
+  { 0x8700, 0x1488, 0x5000 },
+  { 0x8700, 0x1480, 0x4000 },
+  { 0x8700, 0x147c, 0x3000 },
+  { 0x8700, 0x147a, 0x2000 },
+  { 0x0700, 0x1479, 0x0000 },
+  { 0x0700, 0x147b, 0x0000 },
+  { 0x8700, 0x147e, 0x2000 },
+  { 0x0700, 0x147d, 0x0000 },
+  { 0x0700, 0x147f, 0x0000 },
+  { 0x8700, 0x1484, 0x3000 },
+  { 0x8700, 0x1482, 0x2000 },
+  { 0x0700, 0x1481, 0x0000 },
+  { 0x0700, 0x1483, 0x0000 },
+  { 0x8700, 0x1486, 0x2000 },
+  { 0x0700, 0x1485, 0x0000 },
+  { 0x0700, 0x1487, 0x0000 },
+  { 0x8700, 0x1490, 0x4000 },
+  { 0x8700, 0x148c, 0x3000 },
+  { 0x8700, 0x148a, 0x2000 },
+  { 0x0700, 0x1489, 0x0000 },
+  { 0x0700, 0x148b, 0x0000 },
+  { 0x8700, 0x148e, 0x2000 },
+  { 0x0700, 0x148d, 0x0000 },
+  { 0x0700, 0x148f, 0x0000 },
+  { 0x8700, 0x1494, 0x3000 },
+  { 0x8700, 0x1492, 0x2000 },
+  { 0x0700, 0x1491, 0x0000 },
+  { 0x0700, 0x1493, 0x0000 },
+  { 0x8700, 0x1496, 0x2000 },
+  { 0x0700, 0x1495, 0x0000 },
+  { 0x0700, 0x1497, 0x0000 },
+  { 0x8700, 0x14b8, 0x6000 },
+  { 0x8700, 0x14a8, 0x5000 },
+  { 0x8700, 0x14a0, 0x4000 },
+  { 0x8700, 0x149c, 0x3000 },
+  { 0x8700, 0x149a, 0x2000 },
+  { 0x0700, 0x1499, 0x0000 },
+  { 0x0700, 0x149b, 0x0000 },
+  { 0x8700, 0x149e, 0x2000 },
+  { 0x0700, 0x149d, 0x0000 },
+  { 0x0700, 0x149f, 0x0000 },
+  { 0x8700, 0x14a4, 0x3000 },
+  { 0x8700, 0x14a2, 0x2000 },
+  { 0x0700, 0x14a1, 0x0000 },
+  { 0x0700, 0x14a3, 0x0000 },
+  { 0x8700, 0x14a6, 0x2000 },
+  { 0x0700, 0x14a5, 0x0000 },
+  { 0x0700, 0x14a7, 0x0000 },
+  { 0x8700, 0x14b0, 0x4000 },
+  { 0x8700, 0x14ac, 0x3000 },
+  { 0x8700, 0x14aa, 0x2000 },
+  { 0x0700, 0x14a9, 0x0000 },
+  { 0x0700, 0x14ab, 0x0000 },
+  { 0x8700, 0x14ae, 0x2000 },
+  { 0x0700, 0x14ad, 0x0000 },
+  { 0x0700, 0x14af, 0x0000 },
+  { 0x8700, 0x14b4, 0x3000 },
+  { 0x8700, 0x14b2, 0x2000 },
+  { 0x0700, 0x14b1, 0x0000 },
+  { 0x0700, 0x14b3, 0x0000 },
+  { 0x8700, 0x14b6, 0x2000 },
+  { 0x0700, 0x14b5, 0x0000 },
+  { 0x0700, 0x14b7, 0x0000 },
+  { 0x8700, 0x14c8, 0x5000 },
+  { 0x8700, 0x14c0, 0x4000 },
+  { 0x8700, 0x14bc, 0x3000 },
+  { 0x8700, 0x14ba, 0x2000 },
+  { 0x0700, 0x14b9, 0x0000 },
+  { 0x0700, 0x14bb, 0x0000 },
+  { 0x8700, 0x14be, 0x2000 },
+  { 0x0700, 0x14bd, 0x0000 },
+  { 0x0700, 0x14bf, 0x0000 },
+  { 0x8700, 0x14c4, 0x3000 },
+  { 0x8700, 0x14c2, 0x2000 },
+  { 0x0700, 0x14c1, 0x0000 },
+  { 0x0700, 0x14c3, 0x0000 },
+  { 0x8700, 0x14c6, 0x2000 },
+  { 0x0700, 0x14c5, 0x0000 },
+  { 0x0700, 0x14c7, 0x0000 },
+  { 0x8700, 0x14d0, 0x4000 },
+  { 0x8700, 0x14cc, 0x3000 },
+  { 0x8700, 0x14ca, 0x2000 },
+  { 0x0700, 0x14c9, 0x0000 },
+  { 0x0700, 0x14cb, 0x0000 },
+  { 0x8700, 0x14ce, 0x2000 },
+  { 0x0700, 0x14cd, 0x0000 },
+  { 0x0700, 0x14cf, 0x0000 },
+  { 0x8700, 0x14d4, 0x3000 },
+  { 0x8700, 0x14d2, 0x2000 },
+  { 0x0700, 0x14d1, 0x0000 },
+  { 0x0700, 0x14d3, 0x0000 },
+  { 0x8700, 0x14d6, 0x2000 },
+  { 0x0700, 0x14d5, 0x0000 },
+  { 0x0700, 0x14d7, 0x0000 },
+  { 0x8700, 0x1518, 0x7000 },
+  { 0x8700, 0x14f8, 0x6000 },
+  { 0x8700, 0x14e8, 0x5000 },
+  { 0x8700, 0x14e0, 0x4000 },
+  { 0x8700, 0x14dc, 0x3000 },
+  { 0x8700, 0x14da, 0x2000 },
+  { 0x0700, 0x14d9, 0x0000 },
+  { 0x0700, 0x14db, 0x0000 },
+  { 0x8700, 0x14de, 0x2000 },
+  { 0x0700, 0x14dd, 0x0000 },
+  { 0x0700, 0x14df, 0x0000 },
+  { 0x8700, 0x14e4, 0x3000 },
+  { 0x8700, 0x14e2, 0x2000 },
+  { 0x0700, 0x14e1, 0x0000 },
+  { 0x0700, 0x14e3, 0x0000 },
+  { 0x8700, 0x14e6, 0x2000 },
+  { 0x0700, 0x14e5, 0x0000 },
+  { 0x0700, 0x14e7, 0x0000 },
+  { 0x8700, 0x14f0, 0x4000 },
+  { 0x8700, 0x14ec, 0x3000 },
+  { 0x8700, 0x14ea, 0x2000 },
+  { 0x0700, 0x14e9, 0x0000 },
+  { 0x0700, 0x14eb, 0x0000 },
+  { 0x8700, 0x14ee, 0x2000 },
+  { 0x0700, 0x14ed, 0x0000 },
+  { 0x0700, 0x14ef, 0x0000 },
+  { 0x8700, 0x14f4, 0x3000 },
+  { 0x8700, 0x14f2, 0x2000 },
+  { 0x0700, 0x14f1, 0x0000 },
+  { 0x0700, 0x14f3, 0x0000 },
+  { 0x8700, 0x14f6, 0x2000 },
+  { 0x0700, 0x14f5, 0x0000 },
+  { 0x0700, 0x14f7, 0x0000 },
+  { 0x8700, 0x1508, 0x5000 },
+  { 0x8700, 0x1500, 0x4000 },
+  { 0x8700, 0x14fc, 0x3000 },
+  { 0x8700, 0x14fa, 0x2000 },
+  { 0x0700, 0x14f9, 0x0000 },
+  { 0x0700, 0x14fb, 0x0000 },
+  { 0x8700, 0x14fe, 0x2000 },
+  { 0x0700, 0x14fd, 0x0000 },
+  { 0x0700, 0x14ff, 0x0000 },
+  { 0x8700, 0x1504, 0x3000 },
+  { 0x8700, 0x1502, 0x2000 },
+  { 0x0700, 0x1501, 0x0000 },
+  { 0x0700, 0x1503, 0x0000 },
+  { 0x8700, 0x1506, 0x2000 },
+  { 0x0700, 0x1505, 0x0000 },
+  { 0x0700, 0x1507, 0x0000 },
+  { 0x8700, 0x1510, 0x4000 },
+  { 0x8700, 0x150c, 0x3000 },
+  { 0x8700, 0x150a, 0x2000 },
+  { 0x0700, 0x1509, 0x0000 },
+  { 0x0700, 0x150b, 0x0000 },
+  { 0x8700, 0x150e, 0x2000 },
+  { 0x0700, 0x150d, 0x0000 },
+  { 0x0700, 0x150f, 0x0000 },
+  { 0x8700, 0x1514, 0x3000 },
+  { 0x8700, 0x1512, 0x2000 },
+  { 0x0700, 0x1511, 0x0000 },
+  { 0x0700, 0x1513, 0x0000 },
+  { 0x8700, 0x1516, 0x2000 },
+  { 0x0700, 0x1515, 0x0000 },
+  { 0x0700, 0x1517, 0x0000 },
+  { 0x8700, 0x1538, 0x6000 },
+  { 0x8700, 0x1528, 0x5000 },
+  { 0x8700, 0x1520, 0x4000 },
+  { 0x8700, 0x151c, 0x3000 },
+  { 0x8700, 0x151a, 0x2000 },
+  { 0x0700, 0x1519, 0x0000 },
+  { 0x0700, 0x151b, 0x0000 },
+  { 0x8700, 0x151e, 0x2000 },
+  { 0x0700, 0x151d, 0x0000 },
+  { 0x0700, 0x151f, 0x0000 },
+  { 0x8700, 0x1524, 0x3000 },
+  { 0x8700, 0x1522, 0x2000 },
+  { 0x0700, 0x1521, 0x0000 },
+  { 0x0700, 0x1523, 0x0000 },
+  { 0x8700, 0x1526, 0x2000 },
+  { 0x0700, 0x1525, 0x0000 },
+  { 0x0700, 0x1527, 0x0000 },
+  { 0x8700, 0x1530, 0x4000 },
+  { 0x8700, 0x152c, 0x3000 },
+  { 0x8700, 0x152a, 0x2000 },
+  { 0x0700, 0x1529, 0x0000 },
+  { 0x0700, 0x152b, 0x0000 },
+  { 0x8700, 0x152e, 0x2000 },
+  { 0x0700, 0x152d, 0x0000 },
+  { 0x0700, 0x152f, 0x0000 },
+  { 0x8700, 0x1534, 0x3000 },
+  { 0x8700, 0x1532, 0x2000 },
+  { 0x0700, 0x1531, 0x0000 },
+  { 0x0700, 0x1533, 0x0000 },
+  { 0x8700, 0x1536, 0x2000 },
+  { 0x0700, 0x1535, 0x0000 },
+  { 0x0700, 0x1537, 0x0000 },
+  { 0x8700, 0x1548, 0x5000 },
+  { 0x8700, 0x1540, 0x4000 },
+  { 0x8700, 0x153c, 0x3000 },
+  { 0x8700, 0x153a, 0x2000 },
+  { 0x0700, 0x1539, 0x0000 },
+  { 0x0700, 0x153b, 0x0000 },
+  { 0x8700, 0x153e, 0x2000 },
+  { 0x0700, 0x153d, 0x0000 },
+  { 0x0700, 0x153f, 0x0000 },
+  { 0x8700, 0x1544, 0x3000 },
+  { 0x8700, 0x1542, 0x2000 },
+  { 0x0700, 0x1541, 0x0000 },
+  { 0x0700, 0x1543, 0x0000 },
+  { 0x8700, 0x1546, 0x2000 },
+  { 0x0700, 0x1545, 0x0000 },
+  { 0x0700, 0x1547, 0x0000 },
+  { 0x8700, 0x1550, 0x4000 },
+  { 0x8700, 0x154c, 0x3000 },
+  { 0x8700, 0x154a, 0x2000 },
+  { 0x0700, 0x1549, 0x0000 },
+  { 0x0700, 0x154b, 0x0000 },
+  { 0x8700, 0x154e, 0x2000 },
+  { 0x0700, 0x154d, 0x0000 },
+  { 0x0700, 0x154f, 0x0000 },
+  { 0x8700, 0x1554, 0x3000 },
+  { 0x8700, 0x1552, 0x2000 },
+  { 0x0700, 0x1551, 0x0000 },
+  { 0x0700, 0x1553, 0x0000 },
+  { 0x8700, 0x1556, 0x2000 },
+  { 0x0700, 0x1555, 0x0000 },
+  { 0x0700, 0x1557, 0x0000 },
+  { 0x9900, 0x22ae, 0xc000 },
+  { 0x8900, 0x1e24, 0xb001 },
+  { 0x8700, 0x17a2, 0xa000 },
+  { 0x8700, 0x1658, 0x9000 },
+  { 0x8700, 0x15d8, 0x8000 },
+  { 0x8700, 0x1598, 0x7000 },
+  { 0x8700, 0x1578, 0x6000 },
+  { 0x8700, 0x1568, 0x5000 },
+  { 0x8700, 0x1560, 0x4000 },
+  { 0x8700, 0x155c, 0x3000 },
+  { 0x8700, 0x155a, 0x2000 },
+  { 0x0700, 0x1559, 0x0000 },
+  { 0x0700, 0x155b, 0x0000 },
+  { 0x8700, 0x155e, 0x2000 },
+  { 0x0700, 0x155d, 0x0000 },
+  { 0x0700, 0x155f, 0x0000 },
+  { 0x8700, 0x1564, 0x3000 },
+  { 0x8700, 0x1562, 0x2000 },
+  { 0x0700, 0x1561, 0x0000 },
+  { 0x0700, 0x1563, 0x0000 },
+  { 0x8700, 0x1566, 0x2000 },
+  { 0x0700, 0x1565, 0x0000 },
+  { 0x0700, 0x1567, 0x0000 },
+  { 0x8700, 0x1570, 0x4000 },
+  { 0x8700, 0x156c, 0x3000 },
+  { 0x8700, 0x156a, 0x2000 },
+  { 0x0700, 0x1569, 0x0000 },
+  { 0x0700, 0x156b, 0x0000 },
+  { 0x8700, 0x156e, 0x2000 },
+  { 0x0700, 0x156d, 0x0000 },
+  { 0x0700, 0x156f, 0x0000 },
+  { 0x8700, 0x1574, 0x3000 },
+  { 0x8700, 0x1572, 0x2000 },
+  { 0x0700, 0x1571, 0x0000 },
+  { 0x0700, 0x1573, 0x0000 },
+  { 0x8700, 0x1576, 0x2000 },
+  { 0x0700, 0x1575, 0x0000 },
+  { 0x0700, 0x1577, 0x0000 },
+  { 0x8700, 0x1588, 0x5000 },
+  { 0x8700, 0x1580, 0x4000 },
+  { 0x8700, 0x157c, 0x3000 },
+  { 0x8700, 0x157a, 0x2000 },
+  { 0x0700, 0x1579, 0x0000 },
+  { 0x0700, 0x157b, 0x0000 },
+  { 0x8700, 0x157e, 0x2000 },
+  { 0x0700, 0x157d, 0x0000 },
+  { 0x0700, 0x157f, 0x0000 },
+  { 0x8700, 0x1584, 0x3000 },
+  { 0x8700, 0x1582, 0x2000 },
+  { 0x0700, 0x1581, 0x0000 },
+  { 0x0700, 0x1583, 0x0000 },
+  { 0x8700, 0x1586, 0x2000 },
+  { 0x0700, 0x1585, 0x0000 },
+  { 0x0700, 0x1587, 0x0000 },
+  { 0x8700, 0x1590, 0x4000 },
+  { 0x8700, 0x158c, 0x3000 },
+  { 0x8700, 0x158a, 0x2000 },
+  { 0x0700, 0x1589, 0x0000 },
+  { 0x0700, 0x158b, 0x0000 },
+  { 0x8700, 0x158e, 0x2000 },
+  { 0x0700, 0x158d, 0x0000 },
+  { 0x0700, 0x158f, 0x0000 },
+  { 0x8700, 0x1594, 0x3000 },
+  { 0x8700, 0x1592, 0x2000 },
+  { 0x0700, 0x1591, 0x0000 },
+  { 0x0700, 0x1593, 0x0000 },
+  { 0x8700, 0x1596, 0x2000 },
+  { 0x0700, 0x1595, 0x0000 },
+  { 0x0700, 0x1597, 0x0000 },
+  { 0x8700, 0x15b8, 0x6000 },
+  { 0x8700, 0x15a8, 0x5000 },
+  { 0x8700, 0x15a0, 0x4000 },
+  { 0x8700, 0x159c, 0x3000 },
+  { 0x8700, 0x159a, 0x2000 },
+  { 0x0700, 0x1599, 0x0000 },
+  { 0x0700, 0x159b, 0x0000 },
+  { 0x8700, 0x159e, 0x2000 },
+  { 0x0700, 0x159d, 0x0000 },
+  { 0x0700, 0x159f, 0x0000 },
+  { 0x8700, 0x15a4, 0x3000 },
+  { 0x8700, 0x15a2, 0x2000 },
+  { 0x0700, 0x15a1, 0x0000 },
+  { 0x0700, 0x15a3, 0x0000 },
+  { 0x8700, 0x15a6, 0x2000 },
+  { 0x0700, 0x15a5, 0x0000 },
+  { 0x0700, 0x15a7, 0x0000 },
+  { 0x8700, 0x15b0, 0x4000 },
+  { 0x8700, 0x15ac, 0x3000 },
+  { 0x8700, 0x15aa, 0x2000 },
+  { 0x0700, 0x15a9, 0x0000 },
+  { 0x0700, 0x15ab, 0x0000 },
+  { 0x8700, 0x15ae, 0x2000 },
+  { 0x0700, 0x15ad, 0x0000 },
+  { 0x0700, 0x15af, 0x0000 },
+  { 0x8700, 0x15b4, 0x3000 },
+  { 0x8700, 0x15b2, 0x2000 },
+  { 0x0700, 0x15b1, 0x0000 },
+  { 0x0700, 0x15b3, 0x0000 },
+  { 0x8700, 0x15b6, 0x2000 },
+  { 0x0700, 0x15b5, 0x0000 },
+  { 0x0700, 0x15b7, 0x0000 },
+  { 0x8700, 0x15c8, 0x5000 },
+  { 0x8700, 0x15c0, 0x4000 },
+  { 0x8700, 0x15bc, 0x3000 },
+  { 0x8700, 0x15ba, 0x2000 },
+  { 0x0700, 0x15b9, 0x0000 },
+  { 0x0700, 0x15bb, 0x0000 },
+  { 0x8700, 0x15be, 0x2000 },
+  { 0x0700, 0x15bd, 0x0000 },
+  { 0x0700, 0x15bf, 0x0000 },
+  { 0x8700, 0x15c4, 0x3000 },
+  { 0x8700, 0x15c2, 0x2000 },
+  { 0x0700, 0x15c1, 0x0000 },
+  { 0x0700, 0x15c3, 0x0000 },
+  { 0x8700, 0x15c6, 0x2000 },
+  { 0x0700, 0x15c5, 0x0000 },
+  { 0x0700, 0x15c7, 0x0000 },
+  { 0x8700, 0x15d0, 0x4000 },
+  { 0x8700, 0x15cc, 0x3000 },
+  { 0x8700, 0x15ca, 0x2000 },
+  { 0x0700, 0x15c9, 0x0000 },
+  { 0x0700, 0x15cb, 0x0000 },
+  { 0x8700, 0x15ce, 0x2000 },
+  { 0x0700, 0x15cd, 0x0000 },
+  { 0x0700, 0x15cf, 0x0000 },
+  { 0x8700, 0x15d4, 0x3000 },
+  { 0x8700, 0x15d2, 0x2000 },
+  { 0x0700, 0x15d1, 0x0000 },
+  { 0x0700, 0x15d3, 0x0000 },
+  { 0x8700, 0x15d6, 0x2000 },
+  { 0x0700, 0x15d5, 0x0000 },
+  { 0x0700, 0x15d7, 0x0000 },
+  { 0x8700, 0x1618, 0x7000 },
+  { 0x8700, 0x15f8, 0x6000 },
+  { 0x8700, 0x15e8, 0x5000 },
+  { 0x8700, 0x15e0, 0x4000 },
+  { 0x8700, 0x15dc, 0x3000 },
+  { 0x8700, 0x15da, 0x2000 },
+  { 0x0700, 0x15d9, 0x0000 },
+  { 0x0700, 0x15db, 0x0000 },
+  { 0x8700, 0x15de, 0x2000 },
+  { 0x0700, 0x15dd, 0x0000 },
+  { 0x0700, 0x15df, 0x0000 },
+  { 0x8700, 0x15e4, 0x3000 },
+  { 0x8700, 0x15e2, 0x2000 },
+  { 0x0700, 0x15e1, 0x0000 },
+  { 0x0700, 0x15e3, 0x0000 },
+  { 0x8700, 0x15e6, 0x2000 },
+  { 0x0700, 0x15e5, 0x0000 },
+  { 0x0700, 0x15e7, 0x0000 },
+  { 0x8700, 0x15f0, 0x4000 },
+  { 0x8700, 0x15ec, 0x3000 },
+  { 0x8700, 0x15ea, 0x2000 },
+  { 0x0700, 0x15e9, 0x0000 },
+  { 0x0700, 0x15eb, 0x0000 },
+  { 0x8700, 0x15ee, 0x2000 },
+  { 0x0700, 0x15ed, 0x0000 },
+  { 0x0700, 0x15ef, 0x0000 },
+  { 0x8700, 0x15f4, 0x3000 },
+  { 0x8700, 0x15f2, 0x2000 },
+  { 0x0700, 0x15f1, 0x0000 },
+  { 0x0700, 0x15f3, 0x0000 },
+  { 0x8700, 0x15f6, 0x2000 },
+  { 0x0700, 0x15f5, 0x0000 },
+  { 0x0700, 0x15f7, 0x0000 },
+  { 0x8700, 0x1608, 0x5000 },
+  { 0x8700, 0x1600, 0x4000 },
+  { 0x8700, 0x15fc, 0x3000 },
+  { 0x8700, 0x15fa, 0x2000 },
+  { 0x0700, 0x15f9, 0x0000 },
+  { 0x0700, 0x15fb, 0x0000 },
+  { 0x8700, 0x15fe, 0x2000 },
+  { 0x0700, 0x15fd, 0x0000 },
+  { 0x0700, 0x15ff, 0x0000 },
+  { 0x8700, 0x1604, 0x3000 },
+  { 0x8700, 0x1602, 0x2000 },
+  { 0x0700, 0x1601, 0x0000 },
+  { 0x0700, 0x1603, 0x0000 },
+  { 0x8700, 0x1606, 0x2000 },
+  { 0x0700, 0x1605, 0x0000 },
+  { 0x0700, 0x1607, 0x0000 },
+  { 0x8700, 0x1610, 0x4000 },
+  { 0x8700, 0x160c, 0x3000 },
+  { 0x8700, 0x160a, 0x2000 },
+  { 0x0700, 0x1609, 0x0000 },
+  { 0x0700, 0x160b, 0x0000 },
+  { 0x8700, 0x160e, 0x2000 },
+  { 0x0700, 0x160d, 0x0000 },
+  { 0x0700, 0x160f, 0x0000 },
+  { 0x8700, 0x1614, 0x3000 },
+  { 0x8700, 0x1612, 0x2000 },
+  { 0x0700, 0x1611, 0x0000 },
+  { 0x0700, 0x1613, 0x0000 },
+  { 0x8700, 0x1616, 0x2000 },
+  { 0x0700, 0x1615, 0x0000 },
+  { 0x0700, 0x1617, 0x0000 },
+  { 0x8700, 0x1638, 0x6000 },
+  { 0x8700, 0x1628, 0x5000 },
+  { 0x8700, 0x1620, 0x4000 },
+  { 0x8700, 0x161c, 0x3000 },
+  { 0x8700, 0x161a, 0x2000 },
+  { 0x0700, 0x1619, 0x0000 },
+  { 0x0700, 0x161b, 0x0000 },
+  { 0x8700, 0x161e, 0x2000 },
+  { 0x0700, 0x161d, 0x0000 },
+  { 0x0700, 0x161f, 0x0000 },
+  { 0x8700, 0x1624, 0x3000 },
+  { 0x8700, 0x1622, 0x2000 },
+  { 0x0700, 0x1621, 0x0000 },
+  { 0x0700, 0x1623, 0x0000 },
+  { 0x8700, 0x1626, 0x2000 },
+  { 0x0700, 0x1625, 0x0000 },
+  { 0x0700, 0x1627, 0x0000 },
+  { 0x8700, 0x1630, 0x4000 },
+  { 0x8700, 0x162c, 0x3000 },
+  { 0x8700, 0x162a, 0x2000 },
+  { 0x0700, 0x1629, 0x0000 },
+  { 0x0700, 0x162b, 0x0000 },
+  { 0x8700, 0x162e, 0x2000 },
+  { 0x0700, 0x162d, 0x0000 },
+  { 0x0700, 0x162f, 0x0000 },
+  { 0x8700, 0x1634, 0x3000 },
+  { 0x8700, 0x1632, 0x2000 },
+  { 0x0700, 0x1631, 0x0000 },
+  { 0x0700, 0x1633, 0x0000 },
+  { 0x8700, 0x1636, 0x2000 },
+  { 0x0700, 0x1635, 0x0000 },
+  { 0x0700, 0x1637, 0x0000 },
+  { 0x8700, 0x1648, 0x5000 },
+  { 0x8700, 0x1640, 0x4000 },
+  { 0x8700, 0x163c, 0x3000 },
+  { 0x8700, 0x163a, 0x2000 },
+  { 0x0700, 0x1639, 0x0000 },
+  { 0x0700, 0x163b, 0x0000 },
+  { 0x8700, 0x163e, 0x2000 },
+  { 0x0700, 0x163d, 0x0000 },
+  { 0x0700, 0x163f, 0x0000 },
+  { 0x8700, 0x1644, 0x3000 },
+  { 0x8700, 0x1642, 0x2000 },
+  { 0x0700, 0x1641, 0x0000 },
+  { 0x0700, 0x1643, 0x0000 },
+  { 0x8700, 0x1646, 0x2000 },
+  { 0x0700, 0x1645, 0x0000 },
+  { 0x0700, 0x1647, 0x0000 },
+  { 0x8700, 0x1650, 0x4000 },
+  { 0x8700, 0x164c, 0x3000 },
+  { 0x8700, 0x164a, 0x2000 },
+  { 0x0700, 0x1649, 0x0000 },
+  { 0x0700, 0x164b, 0x0000 },
+  { 0x8700, 0x164e, 0x2000 },
+  { 0x0700, 0x164d, 0x0000 },
+  { 0x0700, 0x164f, 0x0000 },
+  { 0x8700, 0x1654, 0x3000 },
+  { 0x8700, 0x1652, 0x2000 },
+  { 0x0700, 0x1651, 0x0000 },
+  { 0x0700, 0x1653, 0x0000 },
+  { 0x8700, 0x1656, 0x2000 },
+  { 0x0700, 0x1655, 0x0000 },
+  { 0x0700, 0x1657, 0x0000 },
+  { 0x8700, 0x16e4, 0x8000 },
+  { 0x8700, 0x16a4, 0x7000 },
+  { 0x8700, 0x1681, 0x6000 },
+  { 0x8700, 0x1668, 0x5000 },
+  { 0x8700, 0x1660, 0x4000 },
+  { 0x8700, 0x165c, 0x3000 },
+  { 0x8700, 0x165a, 0x2000 },
+  { 0x0700, 0x1659, 0x0000 },
+  { 0x0700, 0x165b, 0x0000 },
+  { 0x8700, 0x165e, 0x2000 },
+  { 0x0700, 0x165d, 0x0000 },
+  { 0x0700, 0x165f, 0x0000 },
+  { 0x8700, 0x1664, 0x3000 },
+  { 0x8700, 0x1662, 0x2000 },
+  { 0x0700, 0x1661, 0x0000 },
+  { 0x0700, 0x1663, 0x0000 },
+  { 0x8700, 0x1666, 0x2000 },
+  { 0x0700, 0x1665, 0x0000 },
+  { 0x0700, 0x1667, 0x0000 },
+  { 0x8700, 0x1670, 0x4000 },
+  { 0x8700, 0x166c, 0x3000 },
+  { 0x8700, 0x166a, 0x2000 },
+  { 0x0700, 0x1669, 0x0000 },
+  { 0x0700, 0x166b, 0x0000 },
+  { 0x9500, 0x166e, 0x2000 },
+  { 0x1500, 0x166d, 0x0000 },
+  { 0x0700, 0x166f, 0x0000 },
+  { 0x8700, 0x1674, 0x3000 },
+  { 0x8700, 0x1672, 0x2000 },
+  { 0x0700, 0x1671, 0x0000 },
+  { 0x0700, 0x1673, 0x0000 },
+  { 0x8700, 0x1676, 0x2000 },
+  { 0x0700, 0x1675, 0x0000 },
+  { 0x1d00, 0x1680, 0x0000 },
+  { 0x8700, 0x1691, 0x5000 },
+  { 0x8700, 0x1689, 0x4000 },
+  { 0x8700, 0x1685, 0x3000 },
+  { 0x8700, 0x1683, 0x2000 },
+  { 0x0700, 0x1682, 0x0000 },
+  { 0x0700, 0x1684, 0x0000 },
+  { 0x8700, 0x1687, 0x2000 },
+  { 0x0700, 0x1686, 0x0000 },
+  { 0x0700, 0x1688, 0x0000 },
+  { 0x8700, 0x168d, 0x3000 },
+  { 0x8700, 0x168b, 0x2000 },
+  { 0x0700, 0x168a, 0x0000 },
+  { 0x0700, 0x168c, 0x0000 },
+  { 0x8700, 0x168f, 0x2000 },
+  { 0x0700, 0x168e, 0x0000 },
+  { 0x0700, 0x1690, 0x0000 },
+  { 0x8700, 0x1699, 0x4000 },
+  { 0x8700, 0x1695, 0x3000 },
+  { 0x8700, 0x1693, 0x2000 },
+  { 0x0700, 0x1692, 0x0000 },
+  { 0x0700, 0x1694, 0x0000 },
+  { 0x8700, 0x1697, 0x2000 },
+  { 0x0700, 0x1696, 0x0000 },
+  { 0x0700, 0x1698, 0x0000 },
+  { 0x8700, 0x16a0, 0x3000 },
+  { 0x9600, 0x169b, 0x2000 },
+  { 0x0700, 0x169a, 0x0000 },
+  { 0x1200, 0x169c, 0x0000 },
+  { 0x8700, 0x16a2, 0x2000 },
+  { 0x0700, 0x16a1, 0x0000 },
+  { 0x0700, 0x16a3, 0x0000 },
+  { 0x8700, 0x16c4, 0x6000 },
+  { 0x8700, 0x16b4, 0x5000 },
+  { 0x8700, 0x16ac, 0x4000 },
+  { 0x8700, 0x16a8, 0x3000 },
+  { 0x8700, 0x16a6, 0x2000 },
+  { 0x0700, 0x16a5, 0x0000 },
+  { 0x0700, 0x16a7, 0x0000 },
+  { 0x8700, 0x16aa, 0x2000 },
+  { 0x0700, 0x16a9, 0x0000 },
+  { 0x0700, 0x16ab, 0x0000 },
+  { 0x8700, 0x16b0, 0x3000 },
+  { 0x8700, 0x16ae, 0x2000 },
+  { 0x0700, 0x16ad, 0x0000 },
+  { 0x0700, 0x16af, 0x0000 },
+  { 0x8700, 0x16b2, 0x2000 },
+  { 0x0700, 0x16b1, 0x0000 },
+  { 0x0700, 0x16b3, 0x0000 },
+  { 0x8700, 0x16bc, 0x4000 },
+  { 0x8700, 0x16b8, 0x3000 },
+  { 0x8700, 0x16b6, 0x2000 },
+  { 0x0700, 0x16b5, 0x0000 },
+  { 0x0700, 0x16b7, 0x0000 },
+  { 0x8700, 0x16ba, 0x2000 },
+  { 0x0700, 0x16b9, 0x0000 },
+  { 0x0700, 0x16bb, 0x0000 },
+  { 0x8700, 0x16c0, 0x3000 },
+  { 0x8700, 0x16be, 0x2000 },
+  { 0x0700, 0x16bd, 0x0000 },
+  { 0x0700, 0x16bf, 0x0000 },
+  { 0x8700, 0x16c2, 0x2000 },
+  { 0x0700, 0x16c1, 0x0000 },
+  { 0x0700, 0x16c3, 0x0000 },
+  { 0x8700, 0x16d4, 0x5000 },
+  { 0x8700, 0x16cc, 0x4000 },
+  { 0x8700, 0x16c8, 0x3000 },
+  { 0x8700, 0x16c6, 0x2000 },
+  { 0x0700, 0x16c5, 0x0000 },
+  { 0x0700, 0x16c7, 0x0000 },
+  { 0x8700, 0x16ca, 0x2000 },
+  { 0x0700, 0x16c9, 0x0000 },
+  { 0x0700, 0x16cb, 0x0000 },
+  { 0x8700, 0x16d0, 0x3000 },
+  { 0x8700, 0x16ce, 0x2000 },
+  { 0x0700, 0x16cd, 0x0000 },
+  { 0x0700, 0x16cf, 0x0000 },
+  { 0x8700, 0x16d2, 0x2000 },
+  { 0x0700, 0x16d1, 0x0000 },
+  { 0x0700, 0x16d3, 0x0000 },
+  { 0x8700, 0x16dc, 0x4000 },
+  { 0x8700, 0x16d8, 0x3000 },
+  { 0x8700, 0x16d6, 0x2000 },
+  { 0x0700, 0x16d5, 0x0000 },
+  { 0x0700, 0x16d7, 0x0000 },
+  { 0x8700, 0x16da, 0x2000 },
+  { 0x0700, 0x16d9, 0x0000 },
+  { 0x0700, 0x16db, 0x0000 },
+  { 0x8700, 0x16e0, 0x3000 },
+  { 0x8700, 0x16de, 0x2000 },
+  { 0x0700, 0x16dd, 0x0000 },
+  { 0x0700, 0x16df, 0x0000 },
+  { 0x8700, 0x16e2, 0x2000 },
+  { 0x0700, 0x16e1, 0x0000 },
+  { 0x0700, 0x16e3, 0x0000 },
+  { 0x8700, 0x1748, 0x7000 },
+  { 0x8c00, 0x1714, 0x6000 },
+  { 0x8700, 0x1703, 0x5000 },
+  { 0x9500, 0x16ec, 0x4000 },
+  { 0x8700, 0x16e8, 0x3000 },
+  { 0x8700, 0x16e6, 0x2000 },
+  { 0x0700, 0x16e5, 0x0000 },
+  { 0x0700, 0x16e7, 0x0000 },
+  { 0x8700, 0x16ea, 0x2000 },
+  { 0x0700, 0x16e9, 0x0000 },
+  { 0x1500, 0x16eb, 0x0000 },
+  { 0x8e00, 0x16f0, 0x3000 },
+  { 0x8e00, 0x16ee, 0x2000 },
+  { 0x1500, 0x16ed, 0x0000 },
+  { 0x0e00, 0x16ef, 0x0000 },
+  { 0x8700, 0x1701, 0x2000 },
+  { 0x0700, 0x1700, 0x0000 },
+  { 0x0700, 0x1702, 0x0000 },
+  { 0x8700, 0x170b, 0x4000 },
+  { 0x8700, 0x1707, 0x3000 },
+  { 0x8700, 0x1705, 0x2000 },
+  { 0x0700, 0x1704, 0x0000 },
+  { 0x0700, 0x1706, 0x0000 },
+  { 0x8700, 0x1709, 0x2000 },
+  { 0x0700, 0x1708, 0x0000 },
+  { 0x0700, 0x170a, 0x0000 },
+  { 0x8700, 0x1710, 0x3000 },
+  { 0x8700, 0x170e, 0x2000 },
+  { 0x0700, 0x170c, 0x0000 },
+  { 0x0700, 0x170f, 0x0000 },
+  { 0x8c00, 0x1712, 0x2000 },
+  { 0x0700, 0x1711, 0x0000 },
+  { 0x0c00, 0x1713, 0x0000 },
+  { 0x8700, 0x172f, 0x5000 },
+  { 0x8700, 0x1727, 0x4000 },
+  { 0x8700, 0x1723, 0x3000 },
+  { 0x8700, 0x1721, 0x2000 },
+  { 0x0700, 0x1720, 0x0000 },
+  { 0x0700, 0x1722, 0x0000 },
+  { 0x8700, 0x1725, 0x2000 },
+  { 0x0700, 0x1724, 0x0000 },
+  { 0x0700, 0x1726, 0x0000 },
+  { 0x8700, 0x172b, 0x3000 },
+  { 0x8700, 0x1729, 0x2000 },
+  { 0x0700, 0x1728, 0x0000 },
+  { 0x0700, 0x172a, 0x0000 },
+  { 0x8700, 0x172d, 0x2000 },
+  { 0x0700, 0x172c, 0x0000 },
+  { 0x0700, 0x172e, 0x0000 },
+  { 0x8700, 0x1740, 0x4000 },
+  { 0x8c00, 0x1733, 0x3000 },
+  { 0x8700, 0x1731, 0x2000 },
+  { 0x0700, 0x1730, 0x0000 },
+  { 0x0c00, 0x1732, 0x0000 },
+  { 0x9500, 0x1735, 0x2000 },
+  { 0x0c00, 0x1734, 0x0000 },
+  { 0x1500, 0x1736, 0x0000 },
+  { 0x8700, 0x1744, 0x3000 },
+  { 0x8700, 0x1742, 0x2000 },
+  { 0x0700, 0x1741, 0x0000 },
+  { 0x0700, 0x1743, 0x0000 },
+  { 0x8700, 0x1746, 0x2000 },
+  { 0x0700, 0x1745, 0x0000 },
+  { 0x0700, 0x1747, 0x0000 },
+  { 0x8700, 0x1782, 0x6000 },
+  { 0x8700, 0x1764, 0x5000 },
+  { 0x8700, 0x1750, 0x4000 },
+  { 0x8700, 0x174c, 0x3000 },
+  { 0x8700, 0x174a, 0x2000 },
+  { 0x0700, 0x1749, 0x0000 },
+  { 0x0700, 0x174b, 0x0000 },
+  { 0x8700, 0x174e, 0x2000 },
+  { 0x0700, 0x174d, 0x0000 },
+  { 0x0700, 0x174f, 0x0000 },
+  { 0x8700, 0x1760, 0x3000 },
+  { 0x8c00, 0x1752, 0x2000 },
+  { 0x0700, 0x1751, 0x0000 },
+  { 0x0c00, 0x1753, 0x0000 },
+  { 0x8700, 0x1762, 0x2000 },
+  { 0x0700, 0x1761, 0x0000 },
+  { 0x0700, 0x1763, 0x0000 },
+  { 0x8700, 0x176c, 0x4000 },
+  { 0x8700, 0x1768, 0x3000 },
+  { 0x8700, 0x1766, 0x2000 },
+  { 0x0700, 0x1765, 0x0000 },
+  { 0x0700, 0x1767, 0x0000 },
+  { 0x8700, 0x176a, 0x2000 },
+  { 0x0700, 0x1769, 0x0000 },
+  { 0x0700, 0x176b, 0x0000 },
+  { 0x8c00, 0x1772, 0x3000 },
+  { 0x8700, 0x176f, 0x2000 },
+  { 0x0700, 0x176e, 0x0000 },
+  { 0x0700, 0x1770, 0x0000 },
+  { 0x8700, 0x1780, 0x2000 },
+  { 0x0c00, 0x1773, 0x0000 },
+  { 0x0700, 0x1781, 0x0000 },
+  { 0x8700, 0x1792, 0x5000 },
+  { 0x8700, 0x178a, 0x4000 },
+  { 0x8700, 0x1786, 0x3000 },
+  { 0x8700, 0x1784, 0x2000 },
+  { 0x0700, 0x1783, 0x0000 },
+  { 0x0700, 0x1785, 0x0000 },
+  { 0x8700, 0x1788, 0x2000 },
+  { 0x0700, 0x1787, 0x0000 },
+  { 0x0700, 0x1789, 0x0000 },
+  { 0x8700, 0x178e, 0x3000 },
+  { 0x8700, 0x178c, 0x2000 },
+  { 0x0700, 0x178b, 0x0000 },
+  { 0x0700, 0x178d, 0x0000 },
+  { 0x8700, 0x1790, 0x2000 },
+  { 0x0700, 0x178f, 0x0000 },
+  { 0x0700, 0x1791, 0x0000 },
+  { 0x8700, 0x179a, 0x4000 },
+  { 0x8700, 0x1796, 0x3000 },
+  { 0x8700, 0x1794, 0x2000 },
+  { 0x0700, 0x1793, 0x0000 },
+  { 0x0700, 0x1795, 0x0000 },
+  { 0x8700, 0x1798, 0x2000 },
+  { 0x0700, 0x1797, 0x0000 },
+  { 0x0700, 0x1799, 0x0000 },
+  { 0x8700, 0x179e, 0x3000 },
+  { 0x8700, 0x179c, 0x2000 },
+  { 0x0700, 0x179b, 0x0000 },
+  { 0x0700, 0x179d, 0x0000 },
+  { 0x8700, 0x17a0, 0x2000 },
+  { 0x0700, 0x179f, 0x0000 },
+  { 0x0700, 0x17a1, 0x0000 },
+  { 0x8700, 0x1915, 0x9000 },
+  { 0x8700, 0x1837, 0x8000 },
+  { 0x8d00, 0x17e4, 0x7000 },
+  { 0x8a00, 0x17c2, 0x6000 },
+  { 0x8700, 0x17b2, 0x5000 },
+  { 0x8700, 0x17aa, 0x4000 },
+  { 0x8700, 0x17a6, 0x3000 },
+  { 0x8700, 0x17a4, 0x2000 },
+  { 0x0700, 0x17a3, 0x0000 },
+  { 0x0700, 0x17a5, 0x0000 },
+  { 0x8700, 0x17a8, 0x2000 },
+  { 0x0700, 0x17a7, 0x0000 },
+  { 0x0700, 0x17a9, 0x0000 },
+  { 0x8700, 0x17ae, 0x3000 },
+  { 0x8700, 0x17ac, 0x2000 },
+  { 0x0700, 0x17ab, 0x0000 },
+  { 0x0700, 0x17ad, 0x0000 },
+  { 0x8700, 0x17b0, 0x2000 },
+  { 0x0700, 0x17af, 0x0000 },
+  { 0x0700, 0x17b1, 0x0000 },
+  { 0x8c00, 0x17ba, 0x4000 },
+  { 0x8a00, 0x17b6, 0x3000 },
+  { 0x8100, 0x17b4, 0x2000 },
+  { 0x0700, 0x17b3, 0x0000 },
+  { 0x0100, 0x17b5, 0x0000 },
+  { 0x8c00, 0x17b8, 0x2000 },
+  { 0x0c00, 0x17b7, 0x0000 },
+  { 0x0c00, 0x17b9, 0x0000 },
+  { 0x8a00, 0x17be, 0x3000 },
+  { 0x8c00, 0x17bc, 0x2000 },
+  { 0x0c00, 0x17bb, 0x0000 },
+  { 0x0c00, 0x17bd, 0x0000 },
+  { 0x8a00, 0x17c0, 0x2000 },
+  { 0x0a00, 0x17bf, 0x0000 },
+  { 0x0a00, 0x17c1, 0x0000 },
+  { 0x8c00, 0x17d2, 0x5000 },
+  { 0x8c00, 0x17ca, 0x4000 },
+  { 0x8c00, 0x17c6, 0x3000 },
+  { 0x8a00, 0x17c4, 0x2000 },
+  { 0x0a00, 0x17c3, 0x0000 },
+  { 0x0a00, 0x17c5, 0x0000 },
+  { 0x8a00, 0x17c8, 0x2000 },
+  { 0x0a00, 0x17c7, 0x0000 },
+  { 0x0c00, 0x17c9, 0x0000 },
+  { 0x8c00, 0x17ce, 0x3000 },
+  { 0x8c00, 0x17cc, 0x2000 },
+  { 0x0c00, 0x17cb, 0x0000 },
+  { 0x0c00, 0x17cd, 0x0000 },
+  { 0x8c00, 0x17d0, 0x2000 },
+  { 0x0c00, 0x17cf, 0x0000 },
+  { 0x0c00, 0x17d1, 0x0000 },
+  { 0x9500, 0x17da, 0x4000 },
+  { 0x9500, 0x17d6, 0x3000 },
+  { 0x9500, 0x17d4, 0x2000 },
+  { 0x0c00, 0x17d3, 0x0000 },
+  { 0x1500, 0x17d5, 0x0000 },
+  { 0x9500, 0x17d8, 0x2000 },
+  { 0x0600, 0x17d7, 0x0000 },
+  { 0x1500, 0x17d9, 0x0000 },
+  { 0x8d00, 0x17e0, 0x3000 },
+  { 0x8700, 0x17dc, 0x2000 },
+  { 0x1700, 0x17db, 0x0000 },
+  { 0x0c00, 0x17dd, 0x0000 },
+  { 0x8d00, 0x17e2, 0x2000 },
+  { 0x0d00, 0x17e1, 0x0000 },
+  { 0x0d00, 0x17e3, 0x0000 },
+  { 0x8d00, 0x1811, 0x6000 },
+  { 0x9500, 0x1800, 0x5000 },
+  { 0x8f00, 0x17f2, 0x4000 },
+  { 0x8d00, 0x17e8, 0x3000 },
+  { 0x8d00, 0x17e6, 0x2000 },
+  { 0x0d00, 0x17e5, 0x0000 },
+  { 0x0d00, 0x17e7, 0x0000 },
+  { 0x8f00, 0x17f0, 0x2000 },
+  { 0x0d00, 0x17e9, 0x0000 },
+  { 0x0f00, 0x17f1, 0x0000 },
+  { 0x8f00, 0x17f6, 0x3000 },
+  { 0x8f00, 0x17f4, 0x2000 },
+  { 0x0f00, 0x17f3, 0x0000 },
+  { 0x0f00, 0x17f5, 0x0000 },
+  { 0x8f00, 0x17f8, 0x2000 },
+  { 0x0f00, 0x17f7, 0x0000 },
+  { 0x0f00, 0x17f9, 0x0000 },
+  { 0x9500, 0x1808, 0x4000 },
+  { 0x9500, 0x1804, 0x3000 },
+  { 0x9500, 0x1802, 0x2000 },
+  { 0x1500, 0x1801, 0x0000 },
+  { 0x1500, 0x1803, 0x0000 },
+  { 0x9100, 0x1806, 0x2000 },
+  { 0x1500, 0x1805, 0x0000 },
+  { 0x1500, 0x1807, 0x0000 },
+  { 0x8c00, 0x180c, 0x3000 },
+  { 0x9500, 0x180a, 0x2000 },
+  { 0x1500, 0x1809, 0x0000 },
+  { 0x0c00, 0x180b, 0x0000 },
+  { 0x9d00, 0x180e, 0x2000 },
+  { 0x0c00, 0x180d, 0x0000 },
+  { 0x0d00, 0x1810, 0x0000 },
+  { 0x8700, 0x1827, 0x5000 },
+  { 0x8d00, 0x1819, 0x4000 },
+  { 0x8d00, 0x1815, 0x3000 },
+  { 0x8d00, 0x1813, 0x2000 },
+  { 0x0d00, 0x1812, 0x0000 },
+  { 0x0d00, 0x1814, 0x0000 },
+  { 0x8d00, 0x1817, 0x2000 },
+  { 0x0d00, 0x1816, 0x0000 },
+  { 0x0d00, 0x1818, 0x0000 },
+  { 0x8700, 0x1823, 0x3000 },
+  { 0x8700, 0x1821, 0x2000 },
+  { 0x0700, 0x1820, 0x0000 },
+  { 0x0700, 0x1822, 0x0000 },
+  { 0x8700, 0x1825, 0x2000 },
+  { 0x0700, 0x1824, 0x0000 },
+  { 0x0700, 0x1826, 0x0000 },
+  { 0x8700, 0x182f, 0x4000 },
+  { 0x8700, 0x182b, 0x3000 },
+  { 0x8700, 0x1829, 0x2000 },
+  { 0x0700, 0x1828, 0x0000 },
+  { 0x0700, 0x182a, 0x0000 },
+  { 0x8700, 0x182d, 0x2000 },
+  { 0x0700, 0x182c, 0x0000 },
+  { 0x0700, 0x182e, 0x0000 },
+  { 0x8700, 0x1833, 0x3000 },
+  { 0x8700, 0x1831, 0x2000 },
+  { 0x0700, 0x1830, 0x0000 },
+  { 0x0700, 0x1832, 0x0000 },
+  { 0x8700, 0x1835, 0x2000 },
+  { 0x0700, 0x1834, 0x0000 },
+  { 0x0700, 0x1836, 0x0000 },
+  { 0x8700, 0x1877, 0x7000 },
+  { 0x8700, 0x1857, 0x6000 },
+  { 0x8700, 0x1847, 0x5000 },
+  { 0x8700, 0x183f, 0x4000 },
+  { 0x8700, 0x183b, 0x3000 },
+  { 0x8700, 0x1839, 0x2000 },
+  { 0x0700, 0x1838, 0x0000 },
+  { 0x0700, 0x183a, 0x0000 },
+  { 0x8700, 0x183d, 0x2000 },
+  { 0x0700, 0x183c, 0x0000 },
+  { 0x0700, 0x183e, 0x0000 },
+  { 0x8600, 0x1843, 0x3000 },
+  { 0x8700, 0x1841, 0x2000 },
+  { 0x0700, 0x1840, 0x0000 },
+  { 0x0700, 0x1842, 0x0000 },
+  { 0x8700, 0x1845, 0x2000 },
+  { 0x0700, 0x1844, 0x0000 },
+  { 0x0700, 0x1846, 0x0000 },
+  { 0x8700, 0x184f, 0x4000 },
+  { 0x8700, 0x184b, 0x3000 },
+  { 0x8700, 0x1849, 0x2000 },
+  { 0x0700, 0x1848, 0x0000 },
+  { 0x0700, 0x184a, 0x0000 },
+  { 0x8700, 0x184d, 0x2000 },
+  { 0x0700, 0x184c, 0x0000 },
+  { 0x0700, 0x184e, 0x0000 },
+  { 0x8700, 0x1853, 0x3000 },
+  { 0x8700, 0x1851, 0x2000 },
+  { 0x0700, 0x1850, 0x0000 },
+  { 0x0700, 0x1852, 0x0000 },
+  { 0x8700, 0x1855, 0x2000 },
+  { 0x0700, 0x1854, 0x0000 },
+  { 0x0700, 0x1856, 0x0000 },
+  { 0x8700, 0x1867, 0x5000 },
+  { 0x8700, 0x185f, 0x4000 },
+  { 0x8700, 0x185b, 0x3000 },
+  { 0x8700, 0x1859, 0x2000 },
+  { 0x0700, 0x1858, 0x0000 },
+  { 0x0700, 0x185a, 0x0000 },
+  { 0x8700, 0x185d, 0x2000 },
+  { 0x0700, 0x185c, 0x0000 },
+  { 0x0700, 0x185e, 0x0000 },
+  { 0x8700, 0x1863, 0x3000 },
+  { 0x8700, 0x1861, 0x2000 },
+  { 0x0700, 0x1860, 0x0000 },
+  { 0x0700, 0x1862, 0x0000 },
+  { 0x8700, 0x1865, 0x2000 },
+  { 0x0700, 0x1864, 0x0000 },
+  { 0x0700, 0x1866, 0x0000 },
+  { 0x8700, 0x186f, 0x4000 },
+  { 0x8700, 0x186b, 0x3000 },
+  { 0x8700, 0x1869, 0x2000 },
+  { 0x0700, 0x1868, 0x0000 },
+  { 0x0700, 0x186a, 0x0000 },
+  { 0x8700, 0x186d, 0x2000 },
+  { 0x0700, 0x186c, 0x0000 },
+  { 0x0700, 0x186e, 0x0000 },
+  { 0x8700, 0x1873, 0x3000 },
+  { 0x8700, 0x1871, 0x2000 },
+  { 0x0700, 0x1870, 0x0000 },
+  { 0x0700, 0x1872, 0x0000 },
+  { 0x8700, 0x1875, 0x2000 },
+  { 0x0700, 0x1874, 0x0000 },
+  { 0x0700, 0x1876, 0x0000 },
+  { 0x8700, 0x189f, 0x6000 },
+  { 0x8700, 0x188f, 0x5000 },
+  { 0x8700, 0x1887, 0x4000 },
+  { 0x8700, 0x1883, 0x3000 },
+  { 0x8700, 0x1881, 0x2000 },
+  { 0x0700, 0x1880, 0x0000 },
+  { 0x0700, 0x1882, 0x0000 },
+  { 0x8700, 0x1885, 0x2000 },
+  { 0x0700, 0x1884, 0x0000 },
+  { 0x0700, 0x1886, 0x0000 },
+  { 0x8700, 0x188b, 0x3000 },
+  { 0x8700, 0x1889, 0x2000 },
+  { 0x0700, 0x1888, 0x0000 },
+  { 0x0700, 0x188a, 0x0000 },
+  { 0x8700, 0x188d, 0x2000 },
+  { 0x0700, 0x188c, 0x0000 },
+  { 0x0700, 0x188e, 0x0000 },
+  { 0x8700, 0x1897, 0x4000 },
+  { 0x8700, 0x1893, 0x3000 },
+  { 0x8700, 0x1891, 0x2000 },
+  { 0x0700, 0x1890, 0x0000 },
+  { 0x0700, 0x1892, 0x0000 },
+  { 0x8700, 0x1895, 0x2000 },
+  { 0x0700, 0x1894, 0x0000 },
+  { 0x0700, 0x1896, 0x0000 },
+  { 0x8700, 0x189b, 0x3000 },
+  { 0x8700, 0x1899, 0x2000 },
+  { 0x0700, 0x1898, 0x0000 },
+  { 0x0700, 0x189a, 0x0000 },
+  { 0x8700, 0x189d, 0x2000 },
+  { 0x0700, 0x189c, 0x0000 },
+  { 0x0700, 0x189e, 0x0000 },
+  { 0x8700, 0x1905, 0x5000 },
+  { 0x8700, 0x18a7, 0x4000 },
+  { 0x8700, 0x18a3, 0x3000 },
+  { 0x8700, 0x18a1, 0x2000 },
+  { 0x0700, 0x18a0, 0x0000 },
+  { 0x0700, 0x18a2, 0x0000 },
+  { 0x8700, 0x18a5, 0x2000 },
+  { 0x0700, 0x18a4, 0x0000 },
+  { 0x0700, 0x18a6, 0x0000 },
+  { 0x8700, 0x1901, 0x3000 },
+  { 0x8c00, 0x18a9, 0x2000 },
+  { 0x0700, 0x18a8, 0x0000 },
+  { 0x0700, 0x1900, 0x0000 },
+  { 0x8700, 0x1903, 0x2000 },
+  { 0x0700, 0x1902, 0x0000 },
+  { 0x0700, 0x1904, 0x0000 },
+  { 0x8700, 0x190d, 0x4000 },
+  { 0x8700, 0x1909, 0x3000 },
+  { 0x8700, 0x1907, 0x2000 },
+  { 0x0700, 0x1906, 0x0000 },
+  { 0x0700, 0x1908, 0x0000 },
+  { 0x8700, 0x190b, 0x2000 },
+  { 0x0700, 0x190a, 0x0000 },
+  { 0x0700, 0x190c, 0x0000 },
+  { 0x8700, 0x1911, 0x3000 },
+  { 0x8700, 0x190f, 0x2000 },
+  { 0x0700, 0x190e, 0x0000 },
+  { 0x0700, 0x1910, 0x0000 },
+  { 0x8700, 0x1913, 0x2000 },
+  { 0x0700, 0x1912, 0x0000 },
+  { 0x0700, 0x1914, 0x0000 },
+  { 0x8500, 0x1d10, 0x8000 },
+  { 0x8700, 0x1963, 0x7000 },
+  { 0x9a00, 0x1940, 0x6000 },
+  { 0x8c00, 0x1928, 0x5000 },
+  { 0x8c00, 0x1920, 0x4000 },
+  { 0x8700, 0x1919, 0x3000 },
+  { 0x8700, 0x1917, 0x2000 },
+  { 0x0700, 0x1916, 0x0000 },
+  { 0x0700, 0x1918, 0x0000 },
+  { 0x8700, 0x191b, 0x2000 },
+  { 0x0700, 0x191a, 0x0000 },
+  { 0x0700, 0x191c, 0x0000 },
+  { 0x8a00, 0x1924, 0x3000 },
+  { 0x8c00, 0x1922, 0x2000 },
+  { 0x0c00, 0x1921, 0x0000 },
+  { 0x0a00, 0x1923, 0x0000 },
+  { 0x8a00, 0x1926, 0x2000 },
+  { 0x0a00, 0x1925, 0x0000 },
+  { 0x0c00, 0x1927, 0x0000 },
+  { 0x8a00, 0x1934, 0x4000 },
+  { 0x8a00, 0x1930, 0x3000 },
+  { 0x8a00, 0x192a, 0x2000 },
+  { 0x0a00, 0x1929, 0x0000 },
+  { 0x0a00, 0x192b, 0x0000 },
+  { 0x8c00, 0x1932, 0x2000 },
+  { 0x0a00, 0x1931, 0x0000 },
+  { 0x0a00, 0x1933, 0x0000 },
+  { 0x8a00, 0x1938, 0x3000 },
+  { 0x8a00, 0x1936, 0x2000 },
+  { 0x0a00, 0x1935, 0x0000 },
+  { 0x0a00, 0x1937, 0x0000 },
+  { 0x8c00, 0x193a, 0x2000 },
+  { 0x0c00, 0x1939, 0x0000 },
+  { 0x0c00, 0x193b, 0x0000 },
+  { 0x8700, 0x1953, 0x5000 },
+  { 0x8d00, 0x194b, 0x4000 },
+  { 0x8d00, 0x1947, 0x3000 },
+  { 0x9500, 0x1945, 0x2000 },
+  { 0x1500, 0x1944, 0x0000 },
+  { 0x0d00, 0x1946, 0x0000 },
+  { 0x8d00, 0x1949, 0x2000 },
+  { 0x0d00, 0x1948, 0x0000 },
+  { 0x0d00, 0x194a, 0x0000 },
+  { 0x8d00, 0x194f, 0x3000 },
+  { 0x8d00, 0x194d, 0x2000 },
+  { 0x0d00, 0x194c, 0x0000 },
+  { 0x0d00, 0x194e, 0x0000 },
+  { 0x8700, 0x1951, 0x2000 },
+  { 0x0700, 0x1950, 0x0000 },
+  { 0x0700, 0x1952, 0x0000 },
+  { 0x8700, 0x195b, 0x4000 },
+  { 0x8700, 0x1957, 0x3000 },
+  { 0x8700, 0x1955, 0x2000 },
+  { 0x0700, 0x1954, 0x0000 },
+  { 0x0700, 0x1956, 0x0000 },
+  { 0x8700, 0x1959, 0x2000 },
+  { 0x0700, 0x1958, 0x0000 },
+  { 0x0700, 0x195a, 0x0000 },
+  { 0x8700, 0x195f, 0x3000 },
+  { 0x8700, 0x195d, 0x2000 },
+  { 0x0700, 0x195c, 0x0000 },
+  { 0x0700, 0x195e, 0x0000 },
+  { 0x8700, 0x1961, 0x2000 },
+  { 0x0700, 0x1960, 0x0000 },
+  { 0x0700, 0x1962, 0x0000 },
+  { 0x9a00, 0x19f0, 0x6000 },
+  { 0x9a00, 0x19e0, 0x5000 },
+  { 0x8700, 0x196b, 0x4000 },
+  { 0x8700, 0x1967, 0x3000 },
+  { 0x8700, 0x1965, 0x2000 },
+  { 0x0700, 0x1964, 0x0000 },
+  { 0x0700, 0x1966, 0x0000 },
+  { 0x8700, 0x1969, 0x2000 },
+  { 0x0700, 0x1968, 0x0000 },
+  { 0x0700, 0x196a, 0x0000 },
+  { 0x8700, 0x1971, 0x3000 },
+  { 0x8700, 0x196d, 0x2000 },
+  { 0x0700, 0x196c, 0x0000 },
+  { 0x0700, 0x1970, 0x0000 },
+  { 0x8700, 0x1973, 0x2000 },
+  { 0x0700, 0x1972, 0x0000 },
+  { 0x0700, 0x1974, 0x0000 },
+  { 0x9a00, 0x19e8, 0x4000 },
+  { 0x9a00, 0x19e4, 0x3000 },
+  { 0x9a00, 0x19e2, 0x2000 },
+  { 0x1a00, 0x19e1, 0x0000 },
+  { 0x1a00, 0x19e3, 0x0000 },
+  { 0x9a00, 0x19e6, 0x2000 },
+  { 0x1a00, 0x19e5, 0x0000 },
+  { 0x1a00, 0x19e7, 0x0000 },
+  { 0x9a00, 0x19ec, 0x3000 },
+  { 0x9a00, 0x19ea, 0x2000 },
+  { 0x1a00, 0x19e9, 0x0000 },
+  { 0x1a00, 0x19eb, 0x0000 },
+  { 0x9a00, 0x19ee, 0x2000 },
+  { 0x1a00, 0x19ed, 0x0000 },
+  { 0x1a00, 0x19ef, 0x0000 },
+  { 0x8500, 0x1d00, 0x5000 },
+  { 0x9a00, 0x19f8, 0x4000 },
+  { 0x9a00, 0x19f4, 0x3000 },
+  { 0x9a00, 0x19f2, 0x2000 },
+  { 0x1a00, 0x19f1, 0x0000 },
+  { 0x1a00, 0x19f3, 0x0000 },
+  { 0x9a00, 0x19f6, 0x2000 },
+  { 0x1a00, 0x19f5, 0x0000 },
+  { 0x1a00, 0x19f7, 0x0000 },
+  { 0x9a00, 0x19fc, 0x3000 },
+  { 0x9a00, 0x19fa, 0x2000 },
+  { 0x1a00, 0x19f9, 0x0000 },
+  { 0x1a00, 0x19fb, 0x0000 },
+  { 0x9a00, 0x19fe, 0x2000 },
+  { 0x1a00, 0x19fd, 0x0000 },
+  { 0x1a00, 0x19ff, 0x0000 },
+  { 0x8500, 0x1d08, 0x4000 },
+  { 0x8500, 0x1d04, 0x3000 },
+  { 0x8500, 0x1d02, 0x2000 },
+  { 0x0500, 0x1d01, 0x0000 },
+  { 0x0500, 0x1d03, 0x0000 },
+  { 0x8500, 0x1d06, 0x2000 },
+  { 0x0500, 0x1d05, 0x0000 },
+  { 0x0500, 0x1d07, 0x0000 },
+  { 0x8500, 0x1d0c, 0x3000 },
+  { 0x8500, 0x1d0a, 0x2000 },
+  { 0x0500, 0x1d09, 0x0000 },
+  { 0x0500, 0x1d0b, 0x0000 },
+  { 0x8500, 0x1d0e, 0x2000 },
+  { 0x0500, 0x1d0d, 0x0000 },
+  { 0x0500, 0x1d0f, 0x0000 },
+  { 0x8600, 0x1d50, 0x7000 },
+  { 0x8600, 0x1d30, 0x6000 },
+  { 0x8500, 0x1d20, 0x5000 },
+  { 0x8500, 0x1d18, 0x4000 },
+  { 0x8500, 0x1d14, 0x3000 },
+  { 0x8500, 0x1d12, 0x2000 },
+  { 0x0500, 0x1d11, 0x0000 },
+  { 0x0500, 0x1d13, 0x0000 },
+  { 0x8500, 0x1d16, 0x2000 },
+  { 0x0500, 0x1d15, 0x0000 },
+  { 0x0500, 0x1d17, 0x0000 },
+  { 0x8500, 0x1d1c, 0x3000 },
+  { 0x8500, 0x1d1a, 0x2000 },
+  { 0x0500, 0x1d19, 0x0000 },
+  { 0x0500, 0x1d1b, 0x0000 },
+  { 0x8500, 0x1d1e, 0x2000 },
+  { 0x0500, 0x1d1d, 0x0000 },
+  { 0x0500, 0x1d1f, 0x0000 },
+  { 0x8500, 0x1d28, 0x4000 },
+  { 0x8500, 0x1d24, 0x3000 },
+  { 0x8500, 0x1d22, 0x2000 },
+  { 0x0500, 0x1d21, 0x0000 },
+  { 0x0500, 0x1d23, 0x0000 },
+  { 0x8500, 0x1d26, 0x2000 },
+  { 0x0500, 0x1d25, 0x0000 },
+  { 0x0500, 0x1d27, 0x0000 },
+  { 0x8600, 0x1d2c, 0x3000 },
+  { 0x8500, 0x1d2a, 0x2000 },
+  { 0x0500, 0x1d29, 0x0000 },
+  { 0x0500, 0x1d2b, 0x0000 },
+  { 0x8600, 0x1d2e, 0x2000 },
+  { 0x0600, 0x1d2d, 0x0000 },
+  { 0x0600, 0x1d2f, 0x0000 },
+  { 0x8600, 0x1d40, 0x5000 },
+  { 0x8600, 0x1d38, 0x4000 },
+  { 0x8600, 0x1d34, 0x3000 },
+  { 0x8600, 0x1d32, 0x2000 },
+  { 0x0600, 0x1d31, 0x0000 },
+  { 0x0600, 0x1d33, 0x0000 },
+  { 0x8600, 0x1d36, 0x2000 },
+  { 0x0600, 0x1d35, 0x0000 },
+  { 0x0600, 0x1d37, 0x0000 },
+  { 0x8600, 0x1d3c, 0x3000 },
+  { 0x8600, 0x1d3a, 0x2000 },
+  { 0x0600, 0x1d39, 0x0000 },
+  { 0x0600, 0x1d3b, 0x0000 },
+  { 0x8600, 0x1d3e, 0x2000 },
+  { 0x0600, 0x1d3d, 0x0000 },
+  { 0x0600, 0x1d3f, 0x0000 },
+  { 0x8600, 0x1d48, 0x4000 },
+  { 0x8600, 0x1d44, 0x3000 },
+  { 0x8600, 0x1d42, 0x2000 },
+  { 0x0600, 0x1d41, 0x0000 },
+  { 0x0600, 0x1d43, 0x0000 },
+  { 0x8600, 0x1d46, 0x2000 },
+  { 0x0600, 0x1d45, 0x0000 },
+  { 0x0600, 0x1d47, 0x0000 },
+  { 0x8600, 0x1d4c, 0x3000 },
+  { 0x8600, 0x1d4a, 0x2000 },
+  { 0x0600, 0x1d49, 0x0000 },
+  { 0x0600, 0x1d4b, 0x0000 },
+  { 0x8600, 0x1d4e, 0x2000 },
+  { 0x0600, 0x1d4d, 0x0000 },
+  { 0x0600, 0x1d4f, 0x0000 },
+  { 0x8900, 0x1e04, 0x6001 },
+  { 0x8600, 0x1d60, 0x5000 },
+  { 0x8600, 0x1d58, 0x4000 },
+  { 0x8600, 0x1d54, 0x3000 },
+  { 0x8600, 0x1d52, 0x2000 },
+  { 0x0600, 0x1d51, 0x0000 },
+  { 0x0600, 0x1d53, 0x0000 },
+  { 0x8600, 0x1d56, 0x2000 },
+  { 0x0600, 0x1d55, 0x0000 },
+  { 0x0600, 0x1d57, 0x0000 },
+  { 0x8600, 0x1d5c, 0x3000 },
+  { 0x8600, 0x1d5a, 0x2000 },
+  { 0x0600, 0x1d59, 0x0000 },
+  { 0x0600, 0x1d5b, 0x0000 },
+  { 0x8600, 0x1d5e, 0x2000 },
+  { 0x0600, 0x1d5d, 0x0000 },
+  { 0x0600, 0x1d5f, 0x0000 },
+  { 0x8500, 0x1d68, 0x4000 },
+  { 0x8500, 0x1d64, 0x3000 },
+  { 0x8500, 0x1d62, 0x2000 },
+  { 0x0600, 0x1d61, 0x0000 },
+  { 0x0500, 0x1d63, 0x0000 },
+  { 0x8500, 0x1d66, 0x2000 },
+  { 0x0500, 0x1d65, 0x0000 },
+  { 0x0500, 0x1d67, 0x0000 },
+  { 0x8900, 0x1e00, 0x3001 },
+  { 0x8500, 0x1d6a, 0x2000 },
+  { 0x0500, 0x1d69, 0x0000 },
+  { 0x0500, 0x1d6b, 0x0000 },
+  { 0x8900, 0x1e02, 0x2001 },
+  { 0x0500, 0x1e01, 0x0fff },
+  { 0x0500, 0x1e03, 0x0fff },
+  { 0x8900, 0x1e14, 0x5001 },
+  { 0x8900, 0x1e0c, 0x4001 },
+  { 0x8900, 0x1e08, 0x3001 },
+  { 0x8900, 0x1e06, 0x2001 },
+  { 0x0500, 0x1e05, 0x0fff },
+  { 0x0500, 0x1e07, 0x0fff },
+  { 0x8900, 0x1e0a, 0x2001 },
+  { 0x0500, 0x1e09, 0x0fff },
+  { 0x0500, 0x1e0b, 0x0fff },
+  { 0x8900, 0x1e10, 0x3001 },
+  { 0x8900, 0x1e0e, 0x2001 },
+  { 0x0500, 0x1e0d, 0x0fff },
+  { 0x0500, 0x1e0f, 0x0fff },
+  { 0x8900, 0x1e12, 0x2001 },
+  { 0x0500, 0x1e11, 0x0fff },
+  { 0x0500, 0x1e13, 0x0fff },
+  { 0x8900, 0x1e1c, 0x4001 },
+  { 0x8900, 0x1e18, 0x3001 },
+  { 0x8900, 0x1e16, 0x2001 },
+  { 0x0500, 0x1e15, 0x0fff },
+  { 0x0500, 0x1e17, 0x0fff },
+  { 0x8900, 0x1e1a, 0x2001 },
+  { 0x0500, 0x1e19, 0x0fff },
+  { 0x0500, 0x1e1b, 0x0fff },
+  { 0x8900, 0x1e20, 0x3001 },
+  { 0x8900, 0x1e1e, 0x2001 },
+  { 0x0500, 0x1e1d, 0x0fff },
+  { 0x0500, 0x1e1f, 0x0fff },
+  { 0x8900, 0x1e22, 0x2001 },
+  { 0x0500, 0x1e21, 0x0fff },
+  { 0x0500, 0x1e23, 0x0fff },
+  { 0x9600, 0x2045, 0xa000 },
+  { 0x8500, 0x1f32, 0x9008 },
+  { 0x8900, 0x1ea8, 0x8001 },
+  { 0x8900, 0x1e64, 0x7001 },
+  { 0x8900, 0x1e44, 0x6001 },
+  { 0x8900, 0x1e34, 0x5001 },
+  { 0x8900, 0x1e2c, 0x4001 },
+  { 0x8900, 0x1e28, 0x3001 },
+  { 0x8900, 0x1e26, 0x2001 },
+  { 0x0500, 0x1e25, 0x0fff },
+  { 0x0500, 0x1e27, 0x0fff },
+  { 0x8900, 0x1e2a, 0x2001 },
+  { 0x0500, 0x1e29, 0x0fff },
+  { 0x0500, 0x1e2b, 0x0fff },
+  { 0x8900, 0x1e30, 0x3001 },
+  { 0x8900, 0x1e2e, 0x2001 },
+  { 0x0500, 0x1e2d, 0x0fff },
+  { 0x0500, 0x1e2f, 0x0fff },
+  { 0x8900, 0x1e32, 0x2001 },
+  { 0x0500, 0x1e31, 0x0fff },
+  { 0x0500, 0x1e33, 0x0fff },
+  { 0x8900, 0x1e3c, 0x4001 },
+  { 0x8900, 0x1e38, 0x3001 },
+  { 0x8900, 0x1e36, 0x2001 },
+  { 0x0500, 0x1e35, 0x0fff },
+  { 0x0500, 0x1e37, 0x0fff },
+  { 0x8900, 0x1e3a, 0x2001 },
+  { 0x0500, 0x1e39, 0x0fff },
+  { 0x0500, 0x1e3b, 0x0fff },
+  { 0x8900, 0x1e40, 0x3001 },
+  { 0x8900, 0x1e3e, 0x2001 },
+  { 0x0500, 0x1e3d, 0x0fff },
+  { 0x0500, 0x1e3f, 0x0fff },
+  { 0x8900, 0x1e42, 0x2001 },
+  { 0x0500, 0x1e41, 0x0fff },
+  { 0x0500, 0x1e43, 0x0fff },
+  { 0x8900, 0x1e54, 0x5001 },
+  { 0x8900, 0x1e4c, 0x4001 },
+  { 0x8900, 0x1e48, 0x3001 },
+  { 0x8900, 0x1e46, 0x2001 },
+  { 0x0500, 0x1e45, 0x0fff },
+  { 0x0500, 0x1e47, 0x0fff },
+  { 0x8900, 0x1e4a, 0x2001 },
+  { 0x0500, 0x1e49, 0x0fff },
+  { 0x0500, 0x1e4b, 0x0fff },
+  { 0x8900, 0x1e50, 0x3001 },
+  { 0x8900, 0x1e4e, 0x2001 },
+  { 0x0500, 0x1e4d, 0x0fff },
+  { 0x0500, 0x1e4f, 0x0fff },
+  { 0x8900, 0x1e52, 0x2001 },
+  { 0x0500, 0x1e51, 0x0fff },
+  { 0x0500, 0x1e53, 0x0fff },
+  { 0x8900, 0x1e5c, 0x4001 },
+  { 0x8900, 0x1e58, 0x3001 },
+  { 0x8900, 0x1e56, 0x2001 },
+  { 0x0500, 0x1e55, 0x0fff },
+  { 0x0500, 0x1e57, 0x0fff },
+  { 0x8900, 0x1e5a, 0x2001 },
+  { 0x0500, 0x1e59, 0x0fff },
+  { 0x0500, 0x1e5b, 0x0fff },
+  { 0x8900, 0x1e60, 0x3001 },
+  { 0x8900, 0x1e5e, 0x2001 },
+  { 0x0500, 0x1e5d, 0x0fff },
+  { 0x0500, 0x1e5f, 0x0fff },
+  { 0x8900, 0x1e62, 0x2001 },
+  { 0x0500, 0x1e61, 0x0fff },
+  { 0x0500, 0x1e63, 0x0fff },
+  { 0x8900, 0x1e84, 0x6001 },
+  { 0x8900, 0x1e74, 0x5001 },
+  { 0x8900, 0x1e6c, 0x4001 },
+  { 0x8900, 0x1e68, 0x3001 },
+  { 0x8900, 0x1e66, 0x2001 },
+  { 0x0500, 0x1e65, 0x0fff },
+  { 0x0500, 0x1e67, 0x0fff },
+  { 0x8900, 0x1e6a, 0x2001 },
+  { 0x0500, 0x1e69, 0x0fff },
+  { 0x0500, 0x1e6b, 0x0fff },
+  { 0x8900, 0x1e70, 0x3001 },
+  { 0x8900, 0x1e6e, 0x2001 },
+  { 0x0500, 0x1e6d, 0x0fff },
+  { 0x0500, 0x1e6f, 0x0fff },
+  { 0x8900, 0x1e72, 0x2001 },
+  { 0x0500, 0x1e71, 0x0fff },
+  { 0x0500, 0x1e73, 0x0fff },
+  { 0x8900, 0x1e7c, 0x4001 },
+  { 0x8900, 0x1e78, 0x3001 },
+  { 0x8900, 0x1e76, 0x2001 },
+  { 0x0500, 0x1e75, 0x0fff },
+  { 0x0500, 0x1e77, 0x0fff },
+  { 0x8900, 0x1e7a, 0x2001 },
+  { 0x0500, 0x1e79, 0x0fff },
+  { 0x0500, 0x1e7b, 0x0fff },
+  { 0x8900, 0x1e80, 0x3001 },
+  { 0x8900, 0x1e7e, 0x2001 },
+  { 0x0500, 0x1e7d, 0x0fff },
+  { 0x0500, 0x1e7f, 0x0fff },
+  { 0x8900, 0x1e82, 0x2001 },
+  { 0x0500, 0x1e81, 0x0fff },
+  { 0x0500, 0x1e83, 0x0fff },
+  { 0x8900, 0x1e94, 0x5001 },
+  { 0x8900, 0x1e8c, 0x4001 },
+  { 0x8900, 0x1e88, 0x3001 },
+  { 0x8900, 0x1e86, 0x2001 },
+  { 0x0500, 0x1e85, 0x0fff },
+  { 0x0500, 0x1e87, 0x0fff },
+  { 0x8900, 0x1e8a, 0x2001 },
+  { 0x0500, 0x1e89, 0x0fff },
+  { 0x0500, 0x1e8b, 0x0fff },
+  { 0x8900, 0x1e90, 0x3001 },
+  { 0x8900, 0x1e8e, 0x2001 },
+  { 0x0500, 0x1e8d, 0x0fff },
+  { 0x0500, 0x1e8f, 0x0fff },
+  { 0x8900, 0x1e92, 0x2001 },
+  { 0x0500, 0x1e91, 0x0fff },
+  { 0x0500, 0x1e93, 0x0fff },
+  { 0x8900, 0x1ea0, 0x4001 },
+  { 0x8500, 0x1e98, 0x3000 },
+  { 0x8500, 0x1e96, 0x2000 },
+  { 0x0500, 0x1e95, 0x0fff },
+  { 0x0500, 0x1e97, 0x0000 },
+  { 0x8500, 0x1e9a, 0x2000 },
+  { 0x0500, 0x1e99, 0x0000 },
+  { 0x0500, 0x1e9b, 0x0fc5 },
+  { 0x8900, 0x1ea4, 0x3001 },
+  { 0x8900, 0x1ea2, 0x2001 },
+  { 0x0500, 0x1ea1, 0x0fff },
+  { 0x0500, 0x1ea3, 0x0fff },
+  { 0x8900, 0x1ea6, 0x2001 },
+  { 0x0500, 0x1ea5, 0x0fff },
+  { 0x0500, 0x1ea7, 0x0fff },
+  { 0x8900, 0x1ee8, 0x7001 },
+  { 0x8900, 0x1ec8, 0x6001 },
+  { 0x8900, 0x1eb8, 0x5001 },
+  { 0x8900, 0x1eb0, 0x4001 },
+  { 0x8900, 0x1eac, 0x3001 },
+  { 0x8900, 0x1eaa, 0x2001 },
+  { 0x0500, 0x1ea9, 0x0fff },
+  { 0x0500, 0x1eab, 0x0fff },
+  { 0x8900, 0x1eae, 0x2001 },
+  { 0x0500, 0x1ead, 0x0fff },
+  { 0x0500, 0x1eaf, 0x0fff },
+  { 0x8900, 0x1eb4, 0x3001 },
+  { 0x8900, 0x1eb2, 0x2001 },
+  { 0x0500, 0x1eb1, 0x0fff },
+  { 0x0500, 0x1eb3, 0x0fff },
+  { 0x8900, 0x1eb6, 0x2001 },
+  { 0x0500, 0x1eb5, 0x0fff },
+  { 0x0500, 0x1eb7, 0x0fff },
+  { 0x8900, 0x1ec0, 0x4001 },
+  { 0x8900, 0x1ebc, 0x3001 },
+  { 0x8900, 0x1eba, 0x2001 },
+  { 0x0500, 0x1eb9, 0x0fff },
+  { 0x0500, 0x1ebb, 0x0fff },
+  { 0x8900, 0x1ebe, 0x2001 },
+  { 0x0500, 0x1ebd, 0x0fff },
+  { 0x0500, 0x1ebf, 0x0fff },
+  { 0x8900, 0x1ec4, 0x3001 },
+  { 0x8900, 0x1ec2, 0x2001 },
+  { 0x0500, 0x1ec1, 0x0fff },
+  { 0x0500, 0x1ec3, 0x0fff },
+  { 0x8900, 0x1ec6, 0x2001 },
+  { 0x0500, 0x1ec5, 0x0fff },
+  { 0x0500, 0x1ec7, 0x0fff },
+  { 0x8900, 0x1ed8, 0x5001 },
+  { 0x8900, 0x1ed0, 0x4001 },
+  { 0x8900, 0x1ecc, 0x3001 },
+  { 0x8900, 0x1eca, 0x2001 },
+  { 0x0500, 0x1ec9, 0x0fff },
+  { 0x0500, 0x1ecb, 0x0fff },
+  { 0x8900, 0x1ece, 0x2001 },
+  { 0x0500, 0x1ecd, 0x0fff },
+  { 0x0500, 0x1ecf, 0x0fff },
+  { 0x8900, 0x1ed4, 0x3001 },
+  { 0x8900, 0x1ed2, 0x2001 },
+  { 0x0500, 0x1ed1, 0x0fff },
+  { 0x0500, 0x1ed3, 0x0fff },
+  { 0x8900, 0x1ed6, 0x2001 },
+  { 0x0500, 0x1ed5, 0x0fff },
+  { 0x0500, 0x1ed7, 0x0fff },
+  { 0x8900, 0x1ee0, 0x4001 },
+  { 0x8900, 0x1edc, 0x3001 },
+  { 0x8900, 0x1eda, 0x2001 },
+  { 0x0500, 0x1ed9, 0x0fff },
+  { 0x0500, 0x1edb, 0x0fff },
+  { 0x8900, 0x1ede, 0x2001 },
+  { 0x0500, 0x1edd, 0x0fff },
+  { 0x0500, 0x1edf, 0x0fff },
+  { 0x8900, 0x1ee4, 0x3001 },
+  { 0x8900, 0x1ee2, 0x2001 },
+  { 0x0500, 0x1ee1, 0x0fff },
+  { 0x0500, 0x1ee3, 0x0fff },
+  { 0x8900, 0x1ee6, 0x2001 },
+  { 0x0500, 0x1ee5, 0x0fff },
+  { 0x0500, 0x1ee7, 0x0fff },
+  { 0x8900, 0x1f0e, 0x6ff8 },
+  { 0x8900, 0x1ef8, 0x5001 },
+  { 0x8900, 0x1ef0, 0x4001 },
+  { 0x8900, 0x1eec, 0x3001 },
+  { 0x8900, 0x1eea, 0x2001 },
+  { 0x0500, 0x1ee9, 0x0fff },
+  { 0x0500, 0x1eeb, 0x0fff },
+  { 0x8900, 0x1eee, 0x2001 },
+  { 0x0500, 0x1eed, 0x0fff },
+  { 0x0500, 0x1eef, 0x0fff },
+  { 0x8900, 0x1ef4, 0x3001 },
+  { 0x8900, 0x1ef2, 0x2001 },
+  { 0x0500, 0x1ef1, 0x0fff },
+  { 0x0500, 0x1ef3, 0x0fff },
+  { 0x8900, 0x1ef6, 0x2001 },
+  { 0x0500, 0x1ef5, 0x0fff },
+  { 0x0500, 0x1ef7, 0x0fff },
+  { 0x8500, 0x1f06, 0x4008 },
+  { 0x8500, 0x1f02, 0x3008 },
+  { 0x8500, 0x1f00, 0x2008 },
+  { 0x0500, 0x1ef9, 0x0fff },
+  { 0x0500, 0x1f01, 0x0008 },
+  { 0x8500, 0x1f04, 0x2008 },
+  { 0x0500, 0x1f03, 0x0008 },
+  { 0x0500, 0x1f05, 0x0008 },
+  { 0x8900, 0x1f0a, 0x3ff8 },
+  { 0x8900, 0x1f08, 0x2ff8 },
+  { 0x0500, 0x1f07, 0x0008 },
+  { 0x0900, 0x1f09, 0x0ff8 },
+  { 0x8900, 0x1f0c, 0x2ff8 },
+  { 0x0900, 0x1f0b, 0x0ff8 },
+  { 0x0900, 0x1f0d, 0x0ff8 },
+  { 0x8500, 0x1f22, 0x5008 },
+  { 0x8900, 0x1f18, 0x4ff8 },
+  { 0x8500, 0x1f12, 0x3008 },
+  { 0x8500, 0x1f10, 0x2008 },
+  { 0x0900, 0x1f0f, 0x0ff8 },
+  { 0x0500, 0x1f11, 0x0008 },
+  { 0x8500, 0x1f14, 0x2008 },
+  { 0x0500, 0x1f13, 0x0008 },
+  { 0x0500, 0x1f15, 0x0008 },
+  { 0x8900, 0x1f1c, 0x3ff8 },
+  { 0x8900, 0x1f1a, 0x2ff8 },
+  { 0x0900, 0x1f19, 0x0ff8 },
+  { 0x0900, 0x1f1b, 0x0ff8 },
+  { 0x8500, 0x1f20, 0x2008 },
+  { 0x0900, 0x1f1d, 0x0ff8 },
+  { 0x0500, 0x1f21, 0x0008 },
+  { 0x8900, 0x1f2a, 0x4ff8 },
+  { 0x8500, 0x1f26, 0x3008 },
+  { 0x8500, 0x1f24, 0x2008 },
+  { 0x0500, 0x1f23, 0x0008 },
+  { 0x0500, 0x1f25, 0x0008 },
+  { 0x8900, 0x1f28, 0x2ff8 },
+  { 0x0500, 0x1f27, 0x0008 },
+  { 0x0900, 0x1f29, 0x0ff8 },
+  { 0x8900, 0x1f2e, 0x3ff8 },
+  { 0x8900, 0x1f2c, 0x2ff8 },
+  { 0x0900, 0x1f2b, 0x0ff8 },
+  { 0x0900, 0x1f2d, 0x0ff8 },
+  { 0x8500, 0x1f30, 0x2008 },
+  { 0x0900, 0x1f2f, 0x0ff8 },
+  { 0x0500, 0x1f31, 0x0008 },
+  { 0x9800, 0x1fbd, 0x8000 },
+  { 0x8500, 0x1f7a, 0x7070 },
+  { 0x8500, 0x1f56, 0x6000 },
+  { 0x8500, 0x1f42, 0x5008 },
+  { 0x8900, 0x1f3a, 0x4ff8 },
+  { 0x8500, 0x1f36, 0x3008 },
+  { 0x8500, 0x1f34, 0x2008 },
+  { 0x0500, 0x1f33, 0x0008 },
+  { 0x0500, 0x1f35, 0x0008 },
+  { 0x8900, 0x1f38, 0x2ff8 },
+  { 0x0500, 0x1f37, 0x0008 },
+  { 0x0900, 0x1f39, 0x0ff8 },
+  { 0x8900, 0x1f3e, 0x3ff8 },
+  { 0x8900, 0x1f3c, 0x2ff8 },
+  { 0x0900, 0x1f3b, 0x0ff8 },
+  { 0x0900, 0x1f3d, 0x0ff8 },
+  { 0x8500, 0x1f40, 0x2008 },
+  { 0x0900, 0x1f3f, 0x0ff8 },
+  { 0x0500, 0x1f41, 0x0008 },
+  { 0x8900, 0x1f4c, 0x4ff8 },
+  { 0x8900, 0x1f48, 0x3ff8 },
+  { 0x8500, 0x1f44, 0x2008 },
+  { 0x0500, 0x1f43, 0x0008 },
+  { 0x0500, 0x1f45, 0x0008 },
+  { 0x8900, 0x1f4a, 0x2ff8 },
+  { 0x0900, 0x1f49, 0x0ff8 },
+  { 0x0900, 0x1f4b, 0x0ff8 },
+  { 0x8500, 0x1f52, 0x3000 },
+  { 0x8500, 0x1f50, 0x2000 },
+  { 0x0900, 0x1f4d, 0x0ff8 },
+  { 0x0500, 0x1f51, 0x0008 },
+  { 0x8500, 0x1f54, 0x2000 },
+  { 0x0500, 0x1f53, 0x0008 },
+  { 0x0500, 0x1f55, 0x0008 },
+  { 0x8900, 0x1f6a, 0x5ff8 },
+  { 0x8500, 0x1f62, 0x4008 },
+  { 0x8900, 0x1f5d, 0x3ff8 },
+  { 0x8900, 0x1f59, 0x2ff8 },
+  { 0x0500, 0x1f57, 0x0008 },
+  { 0x0900, 0x1f5b, 0x0ff8 },
+  { 0x8500, 0x1f60, 0x2008 },
+  { 0x0900, 0x1f5f, 0x0ff8 },
+  { 0x0500, 0x1f61, 0x0008 },
+  { 0x8500, 0x1f66, 0x3008 },
+  { 0x8500, 0x1f64, 0x2008 },
+  { 0x0500, 0x1f63, 0x0008 },
+  { 0x0500, 0x1f65, 0x0008 },
+  { 0x8900, 0x1f68, 0x2ff8 },
+  { 0x0500, 0x1f67, 0x0008 },
+  { 0x0900, 0x1f69, 0x0ff8 },
+  { 0x8500, 0x1f72, 0x4056 },
+  { 0x8900, 0x1f6e, 0x3ff8 },
+  { 0x8900, 0x1f6c, 0x2ff8 },
+  { 0x0900, 0x1f6b, 0x0ff8 },
+  { 0x0900, 0x1f6d, 0x0ff8 },
+  { 0x8500, 0x1f70, 0x204a },
+  { 0x0900, 0x1f6f, 0x0ff8 },
+  { 0x0500, 0x1f71, 0x004a },
+  { 0x8500, 0x1f76, 0x3064 },
+  { 0x8500, 0x1f74, 0x2056 },
+  { 0x0500, 0x1f73, 0x0056 },
+  { 0x0500, 0x1f75, 0x0056 },
+  { 0x8500, 0x1f78, 0x2080 },
+  { 0x0500, 0x1f77, 0x0064 },
+  { 0x0500, 0x1f79, 0x0080 },
+  { 0x8800, 0x1f9c, 0x6000 },
+  { 0x8800, 0x1f8c, 0x5000 },
+  { 0x8500, 0x1f84, 0x4008 },
+  { 0x8500, 0x1f80, 0x3008 },
+  { 0x8500, 0x1f7c, 0x207e },
+  { 0x0500, 0x1f7b, 0x0070 },
+  { 0x0500, 0x1f7d, 0x007e },
+  { 0x8500, 0x1f82, 0x2008 },
+  { 0x0500, 0x1f81, 0x0008 },
+  { 0x0500, 0x1f83, 0x0008 },
+  { 0x8800, 0x1f88, 0x3000 },
+  { 0x8500, 0x1f86, 0x2008 },
+  { 0x0500, 0x1f85, 0x0008 },
+  { 0x0500, 0x1f87, 0x0008 },
+  { 0x8800, 0x1f8a, 0x2000 },
+  { 0x0800, 0x1f89, 0x0000 },
+  { 0x0800, 0x1f8b, 0x0000 },
+  { 0x8500, 0x1f94, 0x4008 },
+  { 0x8500, 0x1f90, 0x3008 },
+  { 0x8800, 0x1f8e, 0x2000 },
+  { 0x0800, 0x1f8d, 0x0000 },
+  { 0x0800, 0x1f8f, 0x0000 },
+  { 0x8500, 0x1f92, 0x2008 },
+  { 0x0500, 0x1f91, 0x0008 },
+  { 0x0500, 0x1f93, 0x0008 },
+  { 0x8800, 0x1f98, 0x3000 },
+  { 0x8500, 0x1f96, 0x2008 },
+  { 0x0500, 0x1f95, 0x0008 },
+  { 0x0500, 0x1f97, 0x0008 },
+  { 0x8800, 0x1f9a, 0x2000 },
+  { 0x0800, 0x1f99, 0x0000 },
+  { 0x0800, 0x1f9b, 0x0000 },
+  { 0x8800, 0x1fac, 0x5000 },
+  { 0x8500, 0x1fa4, 0x4008 },
+  { 0x8500, 0x1fa0, 0x3008 },
+  { 0x8800, 0x1f9e, 0x2000 },
+  { 0x0800, 0x1f9d, 0x0000 },
+  { 0x0800, 0x1f9f, 0x0000 },
+  { 0x8500, 0x1fa2, 0x2008 },
+  { 0x0500, 0x1fa1, 0x0008 },
+  { 0x0500, 0x1fa3, 0x0008 },
+  { 0x8800, 0x1fa8, 0x3000 },
+  { 0x8500, 0x1fa6, 0x2008 },
+  { 0x0500, 0x1fa5, 0x0008 },
+  { 0x0500, 0x1fa7, 0x0008 },
+  { 0x8800, 0x1faa, 0x2000 },
+  { 0x0800, 0x1fa9, 0x0000 },
+  { 0x0800, 0x1fab, 0x0000 },
+  { 0x8500, 0x1fb4, 0x4000 },
+  { 0x8500, 0x1fb0, 0x3008 },
+  { 0x8800, 0x1fae, 0x2000 },
+  { 0x0800, 0x1fad, 0x0000 },
+  { 0x0800, 0x1faf, 0x0000 },
+  { 0x8500, 0x1fb2, 0x2000 },
+  { 0x0500, 0x1fb1, 0x0008 },
+  { 0x0500, 0x1fb3, 0x0009 },
+  { 0x8900, 0x1fb9, 0x3ff8 },
+  { 0x8500, 0x1fb7, 0x2000 },
+  { 0x0500, 0x1fb6, 0x0000 },
+  { 0x0900, 0x1fb8, 0x0ff8 },
+  { 0x8900, 0x1fbb, 0x2fb6 },
+  { 0x0900, 0x1fba, 0x0fb6 },
+  { 0x0800, 0x1fbc, 0x0000 },
+  { 0x9d00, 0x2005, 0x7000 },
+  { 0x8500, 0x1fe1, 0x6008 },
+  { 0x9800, 0x1fce, 0x5000 },
+  { 0x8500, 0x1fc6, 0x4000 },
+  { 0x9800, 0x1fc1, 0x3000 },
+  { 0x9800, 0x1fbf, 0x2000 },
+  { 0x0500, 0x1fbe, 0x0000 },
+  { 0x1800, 0x1fc0, 0x0000 },
+  { 0x8500, 0x1fc3, 0x2009 },
+  { 0x0500, 0x1fc2, 0x0000 },
+  { 0x0500, 0x1fc4, 0x0000 },
+  { 0x8900, 0x1fca, 0x3faa },
+  { 0x8900, 0x1fc8, 0x2faa },
+  { 0x0500, 0x1fc7, 0x0000 },
+  { 0x0900, 0x1fc9, 0x0faa },
+  { 0x8800, 0x1fcc, 0x2000 },
+  { 0x0900, 0x1fcb, 0x0faa },
+  { 0x1800, 0x1fcd, 0x0000 },
+  { 0x8900, 0x1fd8, 0x4ff8 },
+  { 0x8500, 0x1fd2, 0x3000 },
+  { 0x8500, 0x1fd0, 0x2008 },
+  { 0x1800, 0x1fcf, 0x0000 },
+  { 0x0500, 0x1fd1, 0x0008 },
+  { 0x8500, 0x1fd6, 0x2000 },
+  { 0x0500, 0x1fd3, 0x0000 },
+  { 0x0500, 0x1fd7, 0x0000 },
+  { 0x9800, 0x1fdd, 0x3000 },
+  { 0x8900, 0x1fda, 0x2f9c },
+  { 0x0900, 0x1fd9, 0x0ff8 },
+  { 0x0900, 0x1fdb, 0x0f9c },
+  { 0x9800, 0x1fdf, 0x2000 },
+  { 0x1800, 0x1fde, 0x0000 },
+  { 0x0500, 0x1fe0, 0x0008 },
+  { 0x8500, 0x1ff3, 0x5009 },
+  { 0x8900, 0x1fe9, 0x4ff8 },
+  { 0x8500, 0x1fe5, 0x3007 },
+  { 0x8500, 0x1fe3, 0x2000 },
+  { 0x0500, 0x1fe2, 0x0000 },
+  { 0x0500, 0x1fe4, 0x0000 },
+  { 0x8500, 0x1fe7, 0x2000 },
+  { 0x0500, 0x1fe6, 0x0000 },
+  { 0x0900, 0x1fe8, 0x0ff8 },
+  { 0x9800, 0x1fed, 0x3000 },
+  { 0x8900, 0x1feb, 0x2f90 },
+  { 0x0900, 0x1fea, 0x0f90 },
+  { 0x0900, 0x1fec, 0x0ff9 },
+  { 0x9800, 0x1fef, 0x2000 },
+  { 0x1800, 0x1fee, 0x0000 },
+  { 0x0500, 0x1ff2, 0x0000 },
+  { 0x8800, 0x1ffc, 0x4000 },
+  { 0x8900, 0x1ff8, 0x3f80 },
+  { 0x8500, 0x1ff6, 0x2000 },
+  { 0x0500, 0x1ff4, 0x0000 },
+  { 0x0500, 0x1ff7, 0x0000 },
+  { 0x8900, 0x1ffa, 0x2f82 },
+  { 0x0900, 0x1ff9, 0x0f80 },
+  { 0x0900, 0x1ffb, 0x0f82 },
+  { 0x9d00, 0x2001, 0x3000 },
+  { 0x9800, 0x1ffe, 0x2000 },
+  { 0x1800, 0x1ffd, 0x0000 },
+  { 0x1d00, 0x2000, 0x0000 },
+  { 0x9d00, 0x2003, 0x2000 },
+  { 0x1d00, 0x2002, 0x0000 },
+  { 0x1d00, 0x2004, 0x0000 },
+  { 0x9500, 0x2025, 0x6000 },
+  { 0x9100, 0x2015, 0x5000 },
+  { 0x8100, 0x200d, 0x4000 },
+  { 0x9d00, 0x2009, 0x3000 },
+  { 0x9d00, 0x2007, 0x2000 },
+  { 0x1d00, 0x2006, 0x0000 },
+  { 0x1d00, 0x2008, 0x0000 },
+  { 0x9d00, 0x200b, 0x2000 },
+  { 0x1d00, 0x200a, 0x0000 },
+  { 0x0100, 0x200c, 0x0000 },
+  { 0x9100, 0x2011, 0x3000 },
+  { 0x8100, 0x200f, 0x2000 },
+  { 0x0100, 0x200e, 0x0000 },
+  { 0x1100, 0x2010, 0x0000 },
+  { 0x9100, 0x2013, 0x2000 },
+  { 0x1100, 0x2012, 0x0000 },
+  { 0x1100, 0x2014, 0x0000 },
+  { 0x9300, 0x201d, 0x4000 },
+  { 0x9300, 0x2019, 0x3000 },
+  { 0x9500, 0x2017, 0x2000 },
+  { 0x1500, 0x2016, 0x0000 },
+  { 0x1400, 0x2018, 0x0000 },
+  { 0x9400, 0x201b, 0x2000 },
+  { 0x1600, 0x201a, 0x0000 },
+  { 0x1400, 0x201c, 0x0000 },
+  { 0x9500, 0x2021, 0x3000 },
+  { 0x9400, 0x201f, 0x2000 },
+  { 0x1600, 0x201e, 0x0000 },
+  { 0x1500, 0x2020, 0x0000 },
+  { 0x9500, 0x2023, 0x2000 },
+  { 0x1500, 0x2022, 0x0000 },
+  { 0x1500, 0x2024, 0x0000 },
+  { 0x9500, 0x2035, 0x5000 },
+  { 0x8100, 0x202d, 0x4000 },
+  { 0x9c00, 0x2029, 0x3000 },
+  { 0x9500, 0x2027, 0x2000 },
+  { 0x1500, 0x2026, 0x0000 },
+  { 0x1b00, 0x2028, 0x0000 },
+  { 0x8100, 0x202b, 0x2000 },
+  { 0x0100, 0x202a, 0x0000 },
+  { 0x0100, 0x202c, 0x0000 },
+  { 0x9500, 0x2031, 0x3000 },
+  { 0x9d00, 0x202f, 0x2000 },
+  { 0x0100, 0x202e, 0x0000 },
+  { 0x1500, 0x2030, 0x0000 },
+  { 0x9500, 0x2033, 0x2000 },
+  { 0x1500, 0x2032, 0x0000 },
+  { 0x1500, 0x2034, 0x0000 },
+  { 0x9500, 0x203d, 0x4000 },
+  { 0x9400, 0x2039, 0x3000 },
+  { 0x9500, 0x2037, 0x2000 },
+  { 0x1500, 0x2036, 0x0000 },
+  { 0x1500, 0x2038, 0x0000 },
+  { 0x9500, 0x203b, 0x2000 },
+  { 0x1300, 0x203a, 0x0000 },
+  { 0x1500, 0x203c, 0x0000 },
+  { 0x9500, 0x2041, 0x3000 },
+  { 0x9000, 0x203f, 0x2000 },
+  { 0x1500, 0x203e, 0x0000 },
+  { 0x1000, 0x2040, 0x0000 },
+  { 0x9500, 0x2043, 0x2000 },
+  { 0x1500, 0x2042, 0x0000 },
+  { 0x1900, 0x2044, 0x0000 },
+  { 0x9900, 0x21ae, 0x9000 },
+  { 0x8900, 0x211a, 0x8000 },
+  { 0x9700, 0x20a7, 0x7000 },
+  { 0x8f00, 0x2076, 0x6000 },
+  { 0x9500, 0x2057, 0x5000 },
+  { 0x9500, 0x204d, 0x4000 },
+  { 0x9500, 0x2049, 0x3000 },
+  { 0x9500, 0x2047, 0x2000 },
+  { 0x1200, 0x2046, 0x0000 },
+  { 0x1500, 0x2048, 0x0000 },
+  { 0x9500, 0x204b, 0x2000 },
+  { 0x1500, 0x204a, 0x0000 },
+  { 0x1500, 0x204c, 0x0000 },
+  { 0x9500, 0x2051, 0x3000 },
+  { 0x9500, 0x204f, 0x2000 },
+  { 0x1500, 0x204e, 0x0000 },
+  { 0x1500, 0x2050, 0x0000 },
+  { 0x9500, 0x2053, 0x2000 },
+  { 0x1900, 0x2052, 0x0000 },
+  { 0x1000, 0x2054, 0x0000 },
+  { 0x8100, 0x206c, 0x4000 },
+  { 0x8100, 0x2062, 0x3000 },
+  { 0x8100, 0x2060, 0x2000 },
+  { 0x1d00, 0x205f, 0x0000 },
+  { 0x0100, 0x2061, 0x0000 },
+  { 0x8100, 0x206a, 0x2000 },
+  { 0x0100, 0x2063, 0x0000 },
+  { 0x0100, 0x206b, 0x0000 },
+  { 0x8f00, 0x2070, 0x3000 },
+  { 0x8100, 0x206e, 0x2000 },
+  { 0x0100, 0x206d, 0x0000 },
+  { 0x0100, 0x206f, 0x0000 },
+  { 0x8f00, 0x2074, 0x2000 },
+  { 0x0500, 0x2071, 0x0000 },
+  { 0x0f00, 0x2075, 0x0000 },
+  { 0x8f00, 0x2086, 0x5000 },
+  { 0x9200, 0x207e, 0x4000 },
+  { 0x9900, 0x207a, 0x3000 },
+  { 0x8f00, 0x2078, 0x2000 },
+  { 0x0f00, 0x2077, 0x0000 },
+  { 0x0f00, 0x2079, 0x0000 },
+  { 0x9900, 0x207c, 0x2000 },
+  { 0x1900, 0x207b, 0x0000 },
+  { 0x1600, 0x207d, 0x0000 },
+  { 0x8f00, 0x2082, 0x3000 },
+  { 0x8f00, 0x2080, 0x2000 },
+  { 0x0500, 0x207f, 0x0000 },
+  { 0x0f00, 0x2081, 0x0000 },
+  { 0x8f00, 0x2084, 0x2000 },
+  { 0x0f00, 0x2083, 0x0000 },
+  { 0x0f00, 0x2085, 0x0000 },
+  { 0x9200, 0x208e, 0x4000 },
+  { 0x9900, 0x208a, 0x3000 },
+  { 0x8f00, 0x2088, 0x2000 },
+  { 0x0f00, 0x2087, 0x0000 },
+  { 0x0f00, 0x2089, 0x0000 },
+  { 0x9900, 0x208c, 0x2000 },
+  { 0x1900, 0x208b, 0x0000 },
+  { 0x1600, 0x208d, 0x0000 },
+  { 0x9700, 0x20a3, 0x3000 },
+  { 0x9700, 0x20a1, 0x2000 },
+  { 0x1700, 0x20a0, 0x0000 },
+  { 0x1700, 0x20a2, 0x0000 },
+  { 0x9700, 0x20a5, 0x2000 },
+  { 0x1700, 0x20a4, 0x0000 },
+  { 0x1700, 0x20a6, 0x0000 },
+  { 0x8c00, 0x20e5, 0x6000 },
+  { 0x8c00, 0x20d5, 0x5000 },
+  { 0x9700, 0x20af, 0x4000 },
+  { 0x9700, 0x20ab, 0x3000 },
+  { 0x9700, 0x20a9, 0x2000 },
+  { 0x1700, 0x20a8, 0x0000 },
+  { 0x1700, 0x20aa, 0x0000 },
+  { 0x9700, 0x20ad, 0x2000 },
+  { 0x1700, 0x20ac, 0x0000 },
+  { 0x1700, 0x20ae, 0x0000 },
+  { 0x8c00, 0x20d1, 0x3000 },
+  { 0x9700, 0x20b1, 0x2000 },
+  { 0x1700, 0x20b0, 0x0000 },
+  { 0x0c00, 0x20d0, 0x0000 },
+  { 0x8c00, 0x20d3, 0x2000 },
+  { 0x0c00, 0x20d2, 0x0000 },
+  { 0x0c00, 0x20d4, 0x0000 },
+  { 0x8b00, 0x20dd, 0x4000 },
+  { 0x8c00, 0x20d9, 0x3000 },
+  { 0x8c00, 0x20d7, 0x2000 },
+  { 0x0c00, 0x20d6, 0x0000 },
+  { 0x0c00, 0x20d8, 0x0000 },
+  { 0x8c00, 0x20db, 0x2000 },
+  { 0x0c00, 0x20da, 0x0000 },
+  { 0x0c00, 0x20dc, 0x0000 },
+  { 0x8c00, 0x20e1, 0x3000 },
+  { 0x8b00, 0x20df, 0x2000 },
+  { 0x0b00, 0x20de, 0x0000 },
+  { 0x0b00, 0x20e0, 0x0000 },
+  { 0x8b00, 0x20e3, 0x2000 },
+  { 0x0b00, 0x20e2, 0x0000 },
+  { 0x0b00, 0x20e4, 0x0000 },
+  { 0x8500, 0x210a, 0x5000 },
+  { 0x8900, 0x2102, 0x4000 },
+  { 0x8c00, 0x20e9, 0x3000 },
+  { 0x8c00, 0x20e7, 0x2000 },
+  { 0x0c00, 0x20e6, 0x0000 },
+  { 0x0c00, 0x20e8, 0x0000 },
+  { 0x9a00, 0x2100, 0x2000 },
+  { 0x0c00, 0x20ea, 0x0000 },
+  { 0x1a00, 0x2101, 0x0000 },
+  { 0x9a00, 0x2106, 0x3000 },
+  { 0x9a00, 0x2104, 0x2000 },
+  { 0x1a00, 0x2103, 0x0000 },
+  { 0x1a00, 0x2105, 0x0000 },
+  { 0x9a00, 0x2108, 0x2000 },
+  { 0x0900, 0x2107, 0x0000 },
+  { 0x1a00, 0x2109, 0x0000 },
+  { 0x8900, 0x2112, 0x4000 },
+  { 0x8500, 0x210e, 0x3000 },
+  { 0x8900, 0x210c, 0x2000 },
+  { 0x0900, 0x210b, 0x0000 },
+  { 0x0900, 0x210d, 0x0000 },
+  { 0x8900, 0x2110, 0x2000 },
+  { 0x0500, 0x210f, 0x0000 },
+  { 0x0900, 0x2111, 0x0000 },
+  { 0x9a00, 0x2116, 0x3000 },
+  { 0x9a00, 0x2114, 0x2000 },
+  { 0x0500, 0x2113, 0x0000 },
+  { 0x0900, 0x2115, 0x0000 },
+  { 0x9a00, 0x2118, 0x2000 },
+  { 0x1a00, 0x2117, 0x0000 },
+  { 0x0900, 0x2119, 0x0000 },
+  { 0x8e00, 0x2162, 0x7000 },
+  { 0x9a00, 0x213a, 0x6000 },
+  { 0x8900, 0x212a, 0x5000 },
+  { 0x9a00, 0x2122, 0x4000 },
+  { 0x9a00, 0x211e, 0x3000 },
+  { 0x8900, 0x211c, 0x2000 },
+  { 0x0900, 0x211b, 0x0000 },
+  { 0x0900, 0x211d, 0x0000 },
+  { 0x9a00, 0x2120, 0x2000 },
+  { 0x1a00, 0x211f, 0x0000 },
+  { 0x1a00, 0x2121, 0x0000 },
+  { 0x8900, 0x2126, 0x3000 },
+  { 0x8900, 0x2124, 0x2000 },
+  { 0x1a00, 0x2123, 0x0000 },
+  { 0x1a00, 0x2125, 0x0000 },
+  { 0x8900, 0x2128, 0x2000 },
+  { 0x1a00, 0x2127, 0x0000 },
+  { 0x1a00, 0x2129, 0x0000 },
+  { 0x9a00, 0x2132, 0x4000 },
+  { 0x9a00, 0x212e, 0x3000 },
+  { 0x8900, 0x212c, 0x2000 },
+  { 0x0900, 0x212b, 0x0000 },
+  { 0x0900, 0x212d, 0x0000 },
+  { 0x8900, 0x2130, 0x2000 },
+  { 0x0500, 0x212f, 0x0000 },
+  { 0x0900, 0x2131, 0x0000 },
+  { 0x8700, 0x2136, 0x3000 },
+  { 0x8500, 0x2134, 0x2000 },
+  { 0x0900, 0x2133, 0x0000 },
+  { 0x0700, 0x2135, 0x0000 },
+  { 0x8700, 0x2138, 0x2000 },
+  { 0x0700, 0x2137, 0x0000 },
+  { 0x0500, 0x2139, 0x0000 },
+  { 0x9900, 0x214b, 0x5000 },
+  { 0x9900, 0x2143, 0x4000 },
+  { 0x8900, 0x213f, 0x3000 },
+  { 0x8500, 0x213d, 0x2000 },
+  { 0x1a00, 0x213b, 0x0000 },
+  { 0x0900, 0x213e, 0x0000 },
+  { 0x9900, 0x2141, 0x2000 },
+  { 0x1900, 0x2140, 0x0000 },
+  { 0x1900, 0x2142, 0x0000 },
+  { 0x8500, 0x2147, 0x3000 },
+  { 0x8900, 0x2145, 0x2000 },
+  { 0x1900, 0x2144, 0x0000 },
+  { 0x0500, 0x2146, 0x0000 },
+  { 0x8500, 0x2149, 0x2000 },
+  { 0x0500, 0x2148, 0x0000 },
+  { 0x1a00, 0x214a, 0x0000 },
+  { 0x8f00, 0x215a, 0x4000 },
+  { 0x8f00, 0x2156, 0x3000 },
+  { 0x8f00, 0x2154, 0x2000 },
+  { 0x0f00, 0x2153, 0x0000 },
+  { 0x0f00, 0x2155, 0x0000 },
+  { 0x8f00, 0x2158, 0x2000 },
+  { 0x0f00, 0x2157, 0x0000 },
+  { 0x0f00, 0x2159, 0x0000 },
+  { 0x8f00, 0x215e, 0x3000 },
+  { 0x8f00, 0x215c, 0x2000 },
+  { 0x0f00, 0x215b, 0x0000 },
+  { 0x0f00, 0x215d, 0x0000 },
+  { 0x8e00, 0x2160, 0x2000 },
+  { 0x0f00, 0x215f, 0x0000 },
+  { 0x0e00, 0x2161, 0x0000 },
+  { 0x8e00, 0x2182, 0x6000 },
+  { 0x8e00, 0x2172, 0x5000 },
+  { 0x8e00, 0x216a, 0x4000 },
+  { 0x8e00, 0x2166, 0x3000 },
+  { 0x8e00, 0x2164, 0x2000 },
+  { 0x0e00, 0x2163, 0x0000 },
+  { 0x0e00, 0x2165, 0x0000 },
+  { 0x8e00, 0x2168, 0x2000 },
+  { 0x0e00, 0x2167, 0x0000 },
+  { 0x0e00, 0x2169, 0x0000 },
+  { 0x8e00, 0x216e, 0x3000 },
+  { 0x8e00, 0x216c, 0x2000 },
+  { 0x0e00, 0x216b, 0x0000 },
+  { 0x0e00, 0x216d, 0x0000 },
+  { 0x8e00, 0x2170, 0x2000 },
+  { 0x0e00, 0x216f, 0x0000 },
+  { 0x0e00, 0x2171, 0x0000 },
+  { 0x8e00, 0x217a, 0x4000 },
+  { 0x8e00, 0x2176, 0x3000 },
+  { 0x8e00, 0x2174, 0x2000 },
+  { 0x0e00, 0x2173, 0x0000 },
+  { 0x0e00, 0x2175, 0x0000 },
+  { 0x8e00, 0x2178, 0x2000 },
+  { 0x0e00, 0x2177, 0x0000 },
+  { 0x0e00, 0x2179, 0x0000 },
+  { 0x8e00, 0x217e, 0x3000 },
+  { 0x8e00, 0x217c, 0x2000 },
+  { 0x0e00, 0x217b, 0x0000 },
+  { 0x0e00, 0x217d, 0x0000 },
+  { 0x8e00, 0x2180, 0x2000 },
+  { 0x0e00, 0x217f, 0x0000 },
+  { 0x0e00, 0x2181, 0x0000 },
+  { 0x9a00, 0x219e, 0x5000 },
+  { 0x9a00, 0x2196, 0x4000 },
+  { 0x9900, 0x2192, 0x3000 },
+  { 0x9900, 0x2190, 0x2000 },
+  { 0x0e00, 0x2183, 0x0000 },
+  { 0x1900, 0x2191, 0x0000 },
+  { 0x9900, 0x2194, 0x2000 },
+  { 0x1900, 0x2193, 0x0000 },
+  { 0x1a00, 0x2195, 0x0000 },
+  { 0x9900, 0x219a, 0x3000 },
+  { 0x9a00, 0x2198, 0x2000 },
+  { 0x1a00, 0x2197, 0x0000 },
+  { 0x1a00, 0x2199, 0x0000 },
+  { 0x9a00, 0x219c, 0x2000 },
+  { 0x1900, 0x219b, 0x0000 },
+  { 0x1a00, 0x219d, 0x0000 },
+  { 0x9900, 0x21a6, 0x4000 },
+  { 0x9a00, 0x21a2, 0x3000 },
+  { 0x9900, 0x21a0, 0x2000 },
+  { 0x1a00, 0x219f, 0x0000 },
+  { 0x1a00, 0x21a1, 0x0000 },
+  { 0x9a00, 0x21a4, 0x2000 },
+  { 0x1900, 0x21a3, 0x0000 },
+  { 0x1a00, 0x21a5, 0x0000 },
+  { 0x9a00, 0x21aa, 0x3000 },
+  { 0x9a00, 0x21a8, 0x2000 },
+  { 0x1a00, 0x21a7, 0x0000 },
+  { 0x1a00, 0x21a9, 0x0000 },
+  { 0x9a00, 0x21ac, 0x2000 },
+  { 0x1a00, 0x21ab, 0x0000 },
+  { 0x1a00, 0x21ad, 0x0000 },
+  { 0x9900, 0x222e, 0x8000 },
+  { 0x9a00, 0x21ee, 0x7000 },
+  { 0x9900, 0x21ce, 0x6000 },
+  { 0x9a00, 0x21be, 0x5000 },
+  { 0x9a00, 0x21b6, 0x4000 },
+  { 0x9a00, 0x21b2, 0x3000 },
+  { 0x9a00, 0x21b0, 0x2000 },
+  { 0x1a00, 0x21af, 0x0000 },
+  { 0x1a00, 0x21b1, 0x0000 },
+  { 0x9a00, 0x21b4, 0x2000 },
+  { 0x1a00, 0x21b3, 0x0000 },
+  { 0x1a00, 0x21b5, 0x0000 },
+  { 0x9a00, 0x21ba, 0x3000 },
+  { 0x9a00, 0x21b8, 0x2000 },
+  { 0x1a00, 0x21b7, 0x0000 },
+  { 0x1a00, 0x21b9, 0x0000 },
+  { 0x9a00, 0x21bc, 0x2000 },
+  { 0x1a00, 0x21bb, 0x0000 },
+  { 0x1a00, 0x21bd, 0x0000 },
+  { 0x9a00, 0x21c6, 0x4000 },
+  { 0x9a00, 0x21c2, 0x3000 },
+  { 0x9a00, 0x21c0, 0x2000 },
+  { 0x1a00, 0x21bf, 0x0000 },
+  { 0x1a00, 0x21c1, 0x0000 },
+  { 0x9a00, 0x21c4, 0x2000 },
+  { 0x1a00, 0x21c3, 0x0000 },
+  { 0x1a00, 0x21c5, 0x0000 },
+  { 0x9a00, 0x21ca, 0x3000 },
+  { 0x9a00, 0x21c8, 0x2000 },
+  { 0x1a00, 0x21c7, 0x0000 },
+  { 0x1a00, 0x21c9, 0x0000 },
+  { 0x9a00, 0x21cc, 0x2000 },
+  { 0x1a00, 0x21cb, 0x0000 },
+  { 0x1a00, 0x21cd, 0x0000 },
+  { 0x9a00, 0x21de, 0x5000 },
+  { 0x9a00, 0x21d6, 0x4000 },
+  { 0x9900, 0x21d2, 0x3000 },
+  { 0x9a00, 0x21d0, 0x2000 },
+  { 0x1900, 0x21cf, 0x0000 },
+  { 0x1a00, 0x21d1, 0x0000 },
+  { 0x9900, 0x21d4, 0x2000 },
+  { 0x1a00, 0x21d3, 0x0000 },
+  { 0x1a00, 0x21d5, 0x0000 },
+  { 0x9a00, 0x21da, 0x3000 },
+  { 0x9a00, 0x21d8, 0x2000 },
+  { 0x1a00, 0x21d7, 0x0000 },
+  { 0x1a00, 0x21d9, 0x0000 },
+  { 0x9a00, 0x21dc, 0x2000 },
+  { 0x1a00, 0x21db, 0x0000 },
+  { 0x1a00, 0x21dd, 0x0000 },
+  { 0x9a00, 0x21e6, 0x4000 },
+  { 0x9a00, 0x21e2, 0x3000 },
+  { 0x9a00, 0x21e0, 0x2000 },
+  { 0x1a00, 0x21df, 0x0000 },
+  { 0x1a00, 0x21e1, 0x0000 },
+  { 0x9a00, 0x21e4, 0x2000 },
+  { 0x1a00, 0x21e3, 0x0000 },
+  { 0x1a00, 0x21e5, 0x0000 },
+  { 0x9a00, 0x21ea, 0x3000 },
+  { 0x9a00, 0x21e8, 0x2000 },
+  { 0x1a00, 0x21e7, 0x0000 },
+  { 0x1a00, 0x21e9, 0x0000 },
+  { 0x9a00, 0x21ec, 0x2000 },
+  { 0x1a00, 0x21eb, 0x0000 },
+  { 0x1a00, 0x21ed, 0x0000 },
+  { 0x9900, 0x220e, 0x6000 },
+  { 0x9900, 0x21fe, 0x5000 },
+  { 0x9900, 0x21f6, 0x4000 },
+  { 0x9a00, 0x21f2, 0x3000 },
+  { 0x9a00, 0x21f0, 0x2000 },
+  { 0x1a00, 0x21ef, 0x0000 },
+  { 0x1a00, 0x21f1, 0x0000 },
+  { 0x9900, 0x21f4, 0x2000 },
+  { 0x1a00, 0x21f3, 0x0000 },
+  { 0x1900, 0x21f5, 0x0000 },
+  { 0x9900, 0x21fa, 0x3000 },
+  { 0x9900, 0x21f8, 0x2000 },
+  { 0x1900, 0x21f7, 0x0000 },
+  { 0x1900, 0x21f9, 0x0000 },
+  { 0x9900, 0x21fc, 0x2000 },
+  { 0x1900, 0x21fb, 0x0000 },
+  { 0x1900, 0x21fd, 0x0000 },
+  { 0x9900, 0x2206, 0x4000 },
+  { 0x9900, 0x2202, 0x3000 },
+  { 0x9900, 0x2200, 0x2000 },
+  { 0x1900, 0x21ff, 0x0000 },
+  { 0x1900, 0x2201, 0x0000 },
+  { 0x9900, 0x2204, 0x2000 },
+  { 0x1900, 0x2203, 0x0000 },
+  { 0x1900, 0x2205, 0x0000 },
+  { 0x9900, 0x220a, 0x3000 },
+  { 0x9900, 0x2208, 0x2000 },
+  { 0x1900, 0x2207, 0x0000 },
+  { 0x1900, 0x2209, 0x0000 },
+  { 0x9900, 0x220c, 0x2000 },
+  { 0x1900, 0x220b, 0x0000 },
+  { 0x1900, 0x220d, 0x0000 },
+  { 0x9900, 0x221e, 0x5000 },
+  { 0x9900, 0x2216, 0x4000 },
+  { 0x9900, 0x2212, 0x3000 },
+  { 0x9900, 0x2210, 0x2000 },
+  { 0x1900, 0x220f, 0x0000 },
+  { 0x1900, 0x2211, 0x0000 },
+  { 0x9900, 0x2214, 0x2000 },
+  { 0x1900, 0x2213, 0x0000 },
+  { 0x1900, 0x2215, 0x0000 },
+  { 0x9900, 0x221a, 0x3000 },
+  { 0x9900, 0x2218, 0x2000 },
+  { 0x1900, 0x2217, 0x0000 },
+  { 0x1900, 0x2219, 0x0000 },
+  { 0x9900, 0x221c, 0x2000 },
+  { 0x1900, 0x221b, 0x0000 },
+  { 0x1900, 0x221d, 0x0000 },
+  { 0x9900, 0x2226, 0x4000 },
+  { 0x9900, 0x2222, 0x3000 },
+  { 0x9900, 0x2220, 0x2000 },
+  { 0x1900, 0x221f, 0x0000 },
+  { 0x1900, 0x2221, 0x0000 },
+  { 0x9900, 0x2224, 0x2000 },
+  { 0x1900, 0x2223, 0x0000 },
+  { 0x1900, 0x2225, 0x0000 },
+  { 0x9900, 0x222a, 0x3000 },
+  { 0x9900, 0x2228, 0x2000 },
+  { 0x1900, 0x2227, 0x0000 },
+  { 0x1900, 0x2229, 0x0000 },
+  { 0x9900, 0x222c, 0x2000 },
+  { 0x1900, 0x222b, 0x0000 },
+  { 0x1900, 0x222d, 0x0000 },
+  { 0x9900, 0x226e, 0x7000 },
+  { 0x9900, 0x224e, 0x6000 },
+  { 0x9900, 0x223e, 0x5000 },
+  { 0x9900, 0x2236, 0x4000 },
+  { 0x9900, 0x2232, 0x3000 },
+  { 0x9900, 0x2230, 0x2000 },
+  { 0x1900, 0x222f, 0x0000 },
+  { 0x1900, 0x2231, 0x0000 },
+  { 0x9900, 0x2234, 0x2000 },
+  { 0x1900, 0x2233, 0x0000 },
+  { 0x1900, 0x2235, 0x0000 },
+  { 0x9900, 0x223a, 0x3000 },
+  { 0x9900, 0x2238, 0x2000 },
+  { 0x1900, 0x2237, 0x0000 },
+  { 0x1900, 0x2239, 0x0000 },
+  { 0x9900, 0x223c, 0x2000 },
+  { 0x1900, 0x223b, 0x0000 },
+  { 0x1900, 0x223d, 0x0000 },
+  { 0x9900, 0x2246, 0x4000 },
+  { 0x9900, 0x2242, 0x3000 },
+  { 0x9900, 0x2240, 0x2000 },
+  { 0x1900, 0x223f, 0x0000 },
+  { 0x1900, 0x2241, 0x0000 },
+  { 0x9900, 0x2244, 0x2000 },
+  { 0x1900, 0x2243, 0x0000 },
+  { 0x1900, 0x2245, 0x0000 },
+  { 0x9900, 0x224a, 0x3000 },
+  { 0x9900, 0x2248, 0x2000 },
+  { 0x1900, 0x2247, 0x0000 },
+  { 0x1900, 0x2249, 0x0000 },
+  { 0x9900, 0x224c, 0x2000 },
+  { 0x1900, 0x224b, 0x0000 },
+  { 0x1900, 0x224d, 0x0000 },
+  { 0x9900, 0x225e, 0x5000 },
+  { 0x9900, 0x2256, 0x4000 },
+  { 0x9900, 0x2252, 0x3000 },
+  { 0x9900, 0x2250, 0x2000 },
+  { 0x1900, 0x224f, 0x0000 },
+  { 0x1900, 0x2251, 0x0000 },
+  { 0x9900, 0x2254, 0x2000 },
+  { 0x1900, 0x2253, 0x0000 },
+  { 0x1900, 0x2255, 0x0000 },
+  { 0x9900, 0x225a, 0x3000 },
+  { 0x9900, 0x2258, 0x2000 },
+  { 0x1900, 0x2257, 0x0000 },
+  { 0x1900, 0x2259, 0x0000 },
+  { 0x9900, 0x225c, 0x2000 },
+  { 0x1900, 0x225b, 0x0000 },
+  { 0x1900, 0x225d, 0x0000 },
+  { 0x9900, 0x2266, 0x4000 },
+  { 0x9900, 0x2262, 0x3000 },
+  { 0x9900, 0x2260, 0x2000 },
+  { 0x1900, 0x225f, 0x0000 },
+  { 0x1900, 0x2261, 0x0000 },
+  { 0x9900, 0x2264, 0x2000 },
+  { 0x1900, 0x2263, 0x0000 },
+  { 0x1900, 0x2265, 0x0000 },
+  { 0x9900, 0x226a, 0x3000 },
+  { 0x9900, 0x2268, 0x2000 },
+  { 0x1900, 0x2267, 0x0000 },
+  { 0x1900, 0x2269, 0x0000 },
+  { 0x9900, 0x226c, 0x2000 },
+  { 0x1900, 0x226b, 0x0000 },
+  { 0x1900, 0x226d, 0x0000 },
+  { 0x9900, 0x228e, 0x6000 },
+  { 0x9900, 0x227e, 0x5000 },
+  { 0x9900, 0x2276, 0x4000 },
+  { 0x9900, 0x2272, 0x3000 },
+  { 0x9900, 0x2270, 0x2000 },
+  { 0x1900, 0x226f, 0x0000 },
+  { 0x1900, 0x2271, 0x0000 },
+  { 0x9900, 0x2274, 0x2000 },
+  { 0x1900, 0x2273, 0x0000 },
+  { 0x1900, 0x2275, 0x0000 },
+  { 0x9900, 0x227a, 0x3000 },
+  { 0x9900, 0x2278, 0x2000 },
+  { 0x1900, 0x2277, 0x0000 },
+  { 0x1900, 0x2279, 0x0000 },
+  { 0x9900, 0x227c, 0x2000 },
+  { 0x1900, 0x227b, 0x0000 },
+  { 0x1900, 0x227d, 0x0000 },
+  { 0x9900, 0x2286, 0x4000 },
+  { 0x9900, 0x2282, 0x3000 },
+  { 0x9900, 0x2280, 0x2000 },
+  { 0x1900, 0x227f, 0x0000 },
+  { 0x1900, 0x2281, 0x0000 },
+  { 0x9900, 0x2284, 0x2000 },
+  { 0x1900, 0x2283, 0x0000 },
+  { 0x1900, 0x2285, 0x0000 },
+  { 0x9900, 0x228a, 0x3000 },
+  { 0x9900, 0x2288, 0x2000 },
+  { 0x1900, 0x2287, 0x0000 },
+  { 0x1900, 0x2289, 0x0000 },
+  { 0x9900, 0x228c, 0x2000 },
+  { 0x1900, 0x228b, 0x0000 },
+  { 0x1900, 0x228d, 0x0000 },
+  { 0x9900, 0x229e, 0x5000 },
+  { 0x9900, 0x2296, 0x4000 },
+  { 0x9900, 0x2292, 0x3000 },
+  { 0x9900, 0x2290, 0x2000 },
+  { 0x1900, 0x228f, 0x0000 },
+  { 0x1900, 0x2291, 0x0000 },
+  { 0x9900, 0x2294, 0x2000 },
+  { 0x1900, 0x2293, 0x0000 },
+  { 0x1900, 0x2295, 0x0000 },
+  { 0x9900, 0x229a, 0x3000 },
+  { 0x9900, 0x2298, 0x2000 },
+  { 0x1900, 0x2297, 0x0000 },
+  { 0x1900, 0x2299, 0x0000 },
+  { 0x9900, 0x229c, 0x2000 },
+  { 0x1900, 0x229b, 0x0000 },
+  { 0x1900, 0x229d, 0x0000 },
+  { 0x9900, 0x22a6, 0x4000 },
+  { 0x9900, 0x22a2, 0x3000 },
+  { 0x9900, 0x22a0, 0x2000 },
+  { 0x1900, 0x229f, 0x0000 },
+  { 0x1900, 0x22a1, 0x0000 },
+  { 0x9900, 0x22a4, 0x2000 },
+  { 0x1900, 0x22a3, 0x0000 },
+  { 0x1900, 0x22a5, 0x0000 },
+  { 0x9900, 0x22aa, 0x3000 },
+  { 0x9900, 0x22a8, 0x2000 },
+  { 0x1900, 0x22a7, 0x0000 },
+  { 0x1900, 0x22a9, 0x0000 },
+  { 0x9900, 0x22ac, 0x2000 },
+  { 0x1900, 0x22ab, 0x0000 },
+  { 0x1900, 0x22ad, 0x0000 },
+  { 0x8f00, 0x2787, 0xb000 },
+  { 0x9a00, 0x250b, 0xa000 },
+  { 0x9900, 0x23ae, 0x9000 },
+  { 0x9a00, 0x232e, 0x8000 },
+  { 0x9900, 0x22ee, 0x7000 },
+  { 0x9900, 0x22ce, 0x6000 },
+  { 0x9900, 0x22be, 0x5000 },
+  { 0x9900, 0x22b6, 0x4000 },
+  { 0x9900, 0x22b2, 0x3000 },
+  { 0x9900, 0x22b0, 0x2000 },
+  { 0x1900, 0x22af, 0x0000 },
+  { 0x1900, 0x22b1, 0x0000 },
+  { 0x9900, 0x22b4, 0x2000 },
+  { 0x1900, 0x22b3, 0x0000 },
+  { 0x1900, 0x22b5, 0x0000 },
+  { 0x9900, 0x22ba, 0x3000 },
+  { 0x9900, 0x22b8, 0x2000 },
+  { 0x1900, 0x22b7, 0x0000 },
+  { 0x1900, 0x22b9, 0x0000 },
+  { 0x9900, 0x22bc, 0x2000 },
+  { 0x1900, 0x22bb, 0x0000 },
+  { 0x1900, 0x22bd, 0x0000 },
+  { 0x9900, 0x22c6, 0x4000 },
+  { 0x9900, 0x22c2, 0x3000 },
+  { 0x9900, 0x22c0, 0x2000 },
+  { 0x1900, 0x22bf, 0x0000 },
+  { 0x1900, 0x22c1, 0x0000 },
+  { 0x9900, 0x22c4, 0x2000 },
+  { 0x1900, 0x22c3, 0x0000 },
+  { 0x1900, 0x22c5, 0x0000 },
+  { 0x9900, 0x22ca, 0x3000 },
+  { 0x9900, 0x22c8, 0x2000 },
+  { 0x1900, 0x22c7, 0x0000 },
+  { 0x1900, 0x22c9, 0x0000 },
+  { 0x9900, 0x22cc, 0x2000 },
+  { 0x1900, 0x22cb, 0x0000 },
+  { 0x1900, 0x22cd, 0x0000 },
+  { 0x9900, 0x22de, 0x5000 },
+  { 0x9900, 0x22d6, 0x4000 },
+  { 0x9900, 0x22d2, 0x3000 },
+  { 0x9900, 0x22d0, 0x2000 },
+  { 0x1900, 0x22cf, 0x0000 },
+  { 0x1900, 0x22d1, 0x0000 },
+  { 0x9900, 0x22d4, 0x2000 },
+  { 0x1900, 0x22d3, 0x0000 },
+  { 0x1900, 0x22d5, 0x0000 },
+  { 0x9900, 0x22da, 0x3000 },
+  { 0x9900, 0x22d8, 0x2000 },
+  { 0x1900, 0x22d7, 0x0000 },
+  { 0x1900, 0x22d9, 0x0000 },
+  { 0x9900, 0x22dc, 0x2000 },
+  { 0x1900, 0x22db, 0x0000 },
+  { 0x1900, 0x22dd, 0x0000 },
+  { 0x9900, 0x22e6, 0x4000 },
+  { 0x9900, 0x22e2, 0x3000 },
+  { 0x9900, 0x22e0, 0x2000 },
+  { 0x1900, 0x22df, 0x0000 },
+  { 0x1900, 0x22e1, 0x0000 },
+  { 0x9900, 0x22e4, 0x2000 },
+  { 0x1900, 0x22e3, 0x0000 },
+  { 0x1900, 0x22e5, 0x0000 },
+  { 0x9900, 0x22ea, 0x3000 },
+  { 0x9900, 0x22e8, 0x2000 },
+  { 0x1900, 0x22e7, 0x0000 },
+  { 0x1900, 0x22e9, 0x0000 },
+  { 0x9900, 0x22ec, 0x2000 },
+  { 0x1900, 0x22eb, 0x0000 },
+  { 0x1900, 0x22ed, 0x0000 },
+  { 0x9a00, 0x230e, 0x6000 },
+  { 0x9900, 0x22fe, 0x5000 },
+  { 0x9900, 0x22f6, 0x4000 },
+  { 0x9900, 0x22f2, 0x3000 },
+  { 0x9900, 0x22f0, 0x2000 },
+  { 0x1900, 0x22ef, 0x0000 },
+  { 0x1900, 0x22f1, 0x0000 },
+  { 0x9900, 0x22f4, 0x2000 },
+  { 0x1900, 0x22f3, 0x0000 },
+  { 0x1900, 0x22f5, 0x0000 },
+  { 0x9900, 0x22fa, 0x3000 },
+  { 0x9900, 0x22f8, 0x2000 },
+  { 0x1900, 0x22f7, 0x0000 },
+  { 0x1900, 0x22f9, 0x0000 },
+  { 0x9900, 0x22fc, 0x2000 },
+  { 0x1900, 0x22fb, 0x0000 },
+  { 0x1900, 0x22fd, 0x0000 },
+  { 0x9a00, 0x2306, 0x4000 },
+  { 0x9a00, 0x2302, 0x3000 },
+  { 0x9a00, 0x2300, 0x2000 },
+  { 0x1900, 0x22ff, 0x0000 },
+  { 0x1a00, 0x2301, 0x0000 },
+  { 0x9a00, 0x2304, 0x2000 },
+  { 0x1a00, 0x2303, 0x0000 },
+  { 0x1a00, 0x2305, 0x0000 },
+  { 0x9900, 0x230a, 0x3000 },
+  { 0x9900, 0x2308, 0x2000 },
+  { 0x1a00, 0x2307, 0x0000 },
+  { 0x1900, 0x2309, 0x0000 },
+  { 0x9a00, 0x230c, 0x2000 },
+  { 0x1900, 0x230b, 0x0000 },
+  { 0x1a00, 0x230d, 0x0000 },
+  { 0x9a00, 0x231e, 0x5000 },
+  { 0x9a00, 0x2316, 0x4000 },
+  { 0x9a00, 0x2312, 0x3000 },
+  { 0x9a00, 0x2310, 0x2000 },
+  { 0x1a00, 0x230f, 0x0000 },
+  { 0x1a00, 0x2311, 0x0000 },
+  { 0x9a00, 0x2314, 0x2000 },
+  { 0x1a00, 0x2313, 0x0000 },
+  { 0x1a00, 0x2315, 0x0000 },
+  { 0x9a00, 0x231a, 0x3000 },
+  { 0x9a00, 0x2318, 0x2000 },
+  { 0x1a00, 0x2317, 0x0000 },
+  { 0x1a00, 0x2319, 0x0000 },
+  { 0x9a00, 0x231c, 0x2000 },
+  { 0x1a00, 0x231b, 0x0000 },
+  { 0x1a00, 0x231d, 0x0000 },
+  { 0x9a00, 0x2326, 0x4000 },
+  { 0x9a00, 0x2322, 0x3000 },
+  { 0x9900, 0x2320, 0x2000 },
+  { 0x1a00, 0x231f, 0x0000 },
+  { 0x1900, 0x2321, 0x0000 },
+  { 0x9a00, 0x2324, 0x2000 },
+  { 0x1a00, 0x2323, 0x0000 },
+  { 0x1a00, 0x2325, 0x0000 },
+  { 0x9200, 0x232a, 0x3000 },
+  { 0x9a00, 0x2328, 0x2000 },
+  { 0x1a00, 0x2327, 0x0000 },
+  { 0x1600, 0x2329, 0x0000 },
+  { 0x9a00, 0x232c, 0x2000 },
+  { 0x1a00, 0x232b, 0x0000 },
+  { 0x1a00, 0x232d, 0x0000 },
+  { 0x9a00, 0x236e, 0x7000 },
+  { 0x9a00, 0x234e, 0x6000 },
+  { 0x9a00, 0x233e, 0x5000 },
+  { 0x9a00, 0x2336, 0x4000 },
+  { 0x9a00, 0x2332, 0x3000 },
+  { 0x9a00, 0x2330, 0x2000 },
+  { 0x1a00, 0x232f, 0x0000 },
+  { 0x1a00, 0x2331, 0x0000 },
+  { 0x9a00, 0x2334, 0x2000 },
+  { 0x1a00, 0x2333, 0x0000 },
+  { 0x1a00, 0x2335, 0x0000 },
+  { 0x9a00, 0x233a, 0x3000 },
+  { 0x9a00, 0x2338, 0x2000 },
+  { 0x1a00, 0x2337, 0x0000 },
+  { 0x1a00, 0x2339, 0x0000 },
+  { 0x9a00, 0x233c, 0x2000 },
+  { 0x1a00, 0x233b, 0x0000 },
+  { 0x1a00, 0x233d, 0x0000 },
+  { 0x9a00, 0x2346, 0x4000 },
+  { 0x9a00, 0x2342, 0x3000 },
+  { 0x9a00, 0x2340, 0x2000 },
+  { 0x1a00, 0x233f, 0x0000 },
+  { 0x1a00, 0x2341, 0x0000 },
+  { 0x9a00, 0x2344, 0x2000 },
+  { 0x1a00, 0x2343, 0x0000 },
+  { 0x1a00, 0x2345, 0x0000 },
+  { 0x9a00, 0x234a, 0x3000 },
+  { 0x9a00, 0x2348, 0x2000 },
+  { 0x1a00, 0x2347, 0x0000 },
+  { 0x1a00, 0x2349, 0x0000 },
+  { 0x9a00, 0x234c, 0x2000 },
+  { 0x1a00, 0x234b, 0x0000 },
+  { 0x1a00, 0x234d, 0x0000 },
+  { 0x9a00, 0x235e, 0x5000 },
+  { 0x9a00, 0x2356, 0x4000 },
+  { 0x9a00, 0x2352, 0x3000 },
+  { 0x9a00, 0x2350, 0x2000 },
+  { 0x1a00, 0x234f, 0x0000 },
+  { 0x1a00, 0x2351, 0x0000 },
+  { 0x9a00, 0x2354, 0x2000 },
+  { 0x1a00, 0x2353, 0x0000 },
+  { 0x1a00, 0x2355, 0x0000 },
+  { 0x9a00, 0x235a, 0x3000 },
+  { 0x9a00, 0x2358, 0x2000 },
+  { 0x1a00, 0x2357, 0x0000 },
+  { 0x1a00, 0x2359, 0x0000 },
+  { 0x9a00, 0x235c, 0x2000 },
+  { 0x1a00, 0x235b, 0x0000 },
+  { 0x1a00, 0x235d, 0x0000 },
+  { 0x9a00, 0x2366, 0x4000 },
+  { 0x9a00, 0x2362, 0x3000 },
+  { 0x9a00, 0x2360, 0x2000 },
+  { 0x1a00, 0x235f, 0x0000 },
+  { 0x1a00, 0x2361, 0x0000 },
+  { 0x9a00, 0x2364, 0x2000 },
+  { 0x1a00, 0x2363, 0x0000 },
+  { 0x1a00, 0x2365, 0x0000 },
+  { 0x9a00, 0x236a, 0x3000 },
+  { 0x9a00, 0x2368, 0x2000 },
+  { 0x1a00, 0x2367, 0x0000 },
+  { 0x1a00, 0x2369, 0x0000 },
+  { 0x9a00, 0x236c, 0x2000 },
+  { 0x1a00, 0x236b, 0x0000 },
+  { 0x1a00, 0x236d, 0x0000 },
+  { 0x9a00, 0x238e, 0x6000 },
+  { 0x9a00, 0x237e, 0x5000 },
+  { 0x9a00, 0x2376, 0x4000 },
+  { 0x9a00, 0x2372, 0x3000 },
+  { 0x9a00, 0x2370, 0x2000 },
+  { 0x1a00, 0x236f, 0x0000 },
+  { 0x1a00, 0x2371, 0x0000 },
+  { 0x9a00, 0x2374, 0x2000 },
+  { 0x1a00, 0x2373, 0x0000 },
+  { 0x1a00, 0x2375, 0x0000 },
+  { 0x9a00, 0x237a, 0x3000 },
+  { 0x9a00, 0x2378, 0x2000 },
+  { 0x1a00, 0x2377, 0x0000 },
+  { 0x1a00, 0x2379, 0x0000 },
+  { 0x9900, 0x237c, 0x2000 },
+  { 0x1a00, 0x237b, 0x0000 },
+  { 0x1a00, 0x237d, 0x0000 },
+  { 0x9a00, 0x2386, 0x4000 },
+  { 0x9a00, 0x2382, 0x3000 },
+  { 0x9a00, 0x2380, 0x2000 },
+  { 0x1a00, 0x237f, 0x0000 },
+  { 0x1a00, 0x2381, 0x0000 },
+  { 0x9a00, 0x2384, 0x2000 },
+  { 0x1a00, 0x2383, 0x0000 },
+  { 0x1a00, 0x2385, 0x0000 },
+  { 0x9a00, 0x238a, 0x3000 },
+  { 0x9a00, 0x2388, 0x2000 },
+  { 0x1a00, 0x2387, 0x0000 },
+  { 0x1a00, 0x2389, 0x0000 },
+  { 0x9a00, 0x238c, 0x2000 },
+  { 0x1a00, 0x238b, 0x0000 },
+  { 0x1a00, 0x238d, 0x0000 },
+  { 0x9900, 0x239e, 0x5000 },
+  { 0x9a00, 0x2396, 0x4000 },
+  { 0x9a00, 0x2392, 0x3000 },
+  { 0x9a00, 0x2390, 0x2000 },
+  { 0x1a00, 0x238f, 0x0000 },
+  { 0x1a00, 0x2391, 0x0000 },
+  { 0x9a00, 0x2394, 0x2000 },
+  { 0x1a00, 0x2393, 0x0000 },
+  { 0x1a00, 0x2395, 0x0000 },
+  { 0x9a00, 0x239a, 0x3000 },
+  { 0x9a00, 0x2398, 0x2000 },
+  { 0x1a00, 0x2397, 0x0000 },
+  { 0x1a00, 0x2399, 0x0000 },
+  { 0x9900, 0x239c, 0x2000 },
+  { 0x1900, 0x239b, 0x0000 },
+  { 0x1900, 0x239d, 0x0000 },
+  { 0x9900, 0x23a6, 0x4000 },
+  { 0x9900, 0x23a2, 0x3000 },
+  { 0x9900, 0x23a0, 0x2000 },
+  { 0x1900, 0x239f, 0x0000 },
+  { 0x1900, 0x23a1, 0x0000 },
+  { 0x9900, 0x23a4, 0x2000 },
+  { 0x1900, 0x23a3, 0x0000 },
+  { 0x1900, 0x23a5, 0x0000 },
+  { 0x9900, 0x23aa, 0x3000 },
+  { 0x9900, 0x23a8, 0x2000 },
+  { 0x1900, 0x23a7, 0x0000 },
+  { 0x1900, 0x23a9, 0x0000 },
+  { 0x9900, 0x23ac, 0x2000 },
+  { 0x1900, 0x23ab, 0x0000 },
+  { 0x1900, 0x23ad, 0x0000 },
+  { 0x8f00, 0x248b, 0x8000 },
+  { 0x9a00, 0x241d, 0x7000 },
+  { 0x9a00, 0x23ce, 0x6000 },
+  { 0x9a00, 0x23be, 0x5000 },
+  { 0x9500, 0x23b6, 0x4000 },
+  { 0x9900, 0x23b2, 0x3000 },
+  { 0x9900, 0x23b0, 0x2000 },
+  { 0x1900, 0x23af, 0x0000 },
+  { 0x1900, 0x23b1, 0x0000 },
+  { 0x9600, 0x23b4, 0x2000 },
+  { 0x1900, 0x23b3, 0x0000 },
+  { 0x1200, 0x23b5, 0x0000 },
+  { 0x9a00, 0x23ba, 0x3000 },
+  { 0x9a00, 0x23b8, 0x2000 },
+  { 0x1a00, 0x23b7, 0x0000 },
+  { 0x1a00, 0x23b9, 0x0000 },
+  { 0x9a00, 0x23bc, 0x2000 },
+  { 0x1a00, 0x23bb, 0x0000 },
+  { 0x1a00, 0x23bd, 0x0000 },
+  { 0x9a00, 0x23c6, 0x4000 },
+  { 0x9a00, 0x23c2, 0x3000 },
+  { 0x9a00, 0x23c0, 0x2000 },
+  { 0x1a00, 0x23bf, 0x0000 },
+  { 0x1a00, 0x23c1, 0x0000 },
+  { 0x9a00, 0x23c4, 0x2000 },
+  { 0x1a00, 0x23c3, 0x0000 },
+  { 0x1a00, 0x23c5, 0x0000 },
+  { 0x9a00, 0x23ca, 0x3000 },
+  { 0x9a00, 0x23c8, 0x2000 },
+  { 0x1a00, 0x23c7, 0x0000 },
+  { 0x1a00, 0x23c9, 0x0000 },
+  { 0x9a00, 0x23cc, 0x2000 },
+  { 0x1a00, 0x23cb, 0x0000 },
+  { 0x1a00, 0x23cd, 0x0000 },
+  { 0x9a00, 0x240d, 0x5000 },
+  { 0x9a00, 0x2405, 0x4000 },
+  { 0x9a00, 0x2401, 0x3000 },
+  { 0x9a00, 0x23d0, 0x2000 },
+  { 0x1a00, 0x23cf, 0x0000 },
+  { 0x1a00, 0x2400, 0x0000 },
+  { 0x9a00, 0x2403, 0x2000 },
+  { 0x1a00, 0x2402, 0x0000 },
+  { 0x1a00, 0x2404, 0x0000 },
+  { 0x9a00, 0x2409, 0x3000 },
+  { 0x9a00, 0x2407, 0x2000 },
+  { 0x1a00, 0x2406, 0x0000 },
+  { 0x1a00, 0x2408, 0x0000 },
+  { 0x9a00, 0x240b, 0x2000 },
+  { 0x1a00, 0x240a, 0x0000 },
+  { 0x1a00, 0x240c, 0x0000 },
+  { 0x9a00, 0x2415, 0x4000 },
+  { 0x9a00, 0x2411, 0x3000 },
+  { 0x9a00, 0x240f, 0x2000 },
+  { 0x1a00, 0x240e, 0x0000 },
+  { 0x1a00, 0x2410, 0x0000 },
+  { 0x9a00, 0x2413, 0x2000 },
+  { 0x1a00, 0x2412, 0x0000 },
+  { 0x1a00, 0x2414, 0x0000 },
+  { 0x9a00, 0x2419, 0x3000 },
+  { 0x9a00, 0x2417, 0x2000 },
+  { 0x1a00, 0x2416, 0x0000 },
+  { 0x1a00, 0x2418, 0x0000 },
+  { 0x9a00, 0x241b, 0x2000 },
+  { 0x1a00, 0x241a, 0x0000 },
+  { 0x1a00, 0x241c, 0x0000 },
+  { 0x8f00, 0x246b, 0x6000 },
+  { 0x9a00, 0x2446, 0x5000 },
+  { 0x9a00, 0x2425, 0x4000 },
+  { 0x9a00, 0x2421, 0x3000 },
+  { 0x9a00, 0x241f, 0x2000 },
+  { 0x1a00, 0x241e, 0x0000 },
+  { 0x1a00, 0x2420, 0x0000 },
+  { 0x9a00, 0x2423, 0x2000 },
+  { 0x1a00, 0x2422, 0x0000 },
+  { 0x1a00, 0x2424, 0x0000 },
+  { 0x9a00, 0x2442, 0x3000 },
+  { 0x9a00, 0x2440, 0x2000 },
+  { 0x1a00, 0x2426, 0x0000 },
+  { 0x1a00, 0x2441, 0x0000 },
+  { 0x9a00, 0x2444, 0x2000 },
+  { 0x1a00, 0x2443, 0x0000 },
+  { 0x1a00, 0x2445, 0x0000 },
+  { 0x8f00, 0x2463, 0x4000 },
+  { 0x9a00, 0x244a, 0x3000 },
+  { 0x9a00, 0x2448, 0x2000 },
+  { 0x1a00, 0x2447, 0x0000 },
+  { 0x1a00, 0x2449, 0x0000 },
+  { 0x8f00, 0x2461, 0x2000 },
+  { 0x0f00, 0x2460, 0x0000 },
+  { 0x0f00, 0x2462, 0x0000 },
+  { 0x8f00, 0x2467, 0x3000 },
+  { 0x8f00, 0x2465, 0x2000 },
+  { 0x0f00, 0x2464, 0x0000 },
+  { 0x0f00, 0x2466, 0x0000 },
+  { 0x8f00, 0x2469, 0x2000 },
+  { 0x0f00, 0x2468, 0x0000 },
+  { 0x0f00, 0x246a, 0x0000 },
+  { 0x8f00, 0x247b, 0x5000 },
+  { 0x8f00, 0x2473, 0x4000 },
+  { 0x8f00, 0x246f, 0x3000 },
+  { 0x8f00, 0x246d, 0x2000 },
+  { 0x0f00, 0x246c, 0x0000 },
+  { 0x0f00, 0x246e, 0x0000 },
+  { 0x8f00, 0x2471, 0x2000 },
+  { 0x0f00, 0x2470, 0x0000 },
+  { 0x0f00, 0x2472, 0x0000 },
+  { 0x8f00, 0x2477, 0x3000 },
+  { 0x8f00, 0x2475, 0x2000 },
+  { 0x0f00, 0x2474, 0x0000 },
+  { 0x0f00, 0x2476, 0x0000 },
+  { 0x8f00, 0x2479, 0x2000 },
+  { 0x0f00, 0x2478, 0x0000 },
+  { 0x0f00, 0x247a, 0x0000 },
+  { 0x8f00, 0x2483, 0x4000 },
+  { 0x8f00, 0x247f, 0x3000 },
+  { 0x8f00, 0x247d, 0x2000 },
+  { 0x0f00, 0x247c, 0x0000 },
+  { 0x0f00, 0x247e, 0x0000 },
+  { 0x8f00, 0x2481, 0x2000 },
+  { 0x0f00, 0x2480, 0x0000 },
+  { 0x0f00, 0x2482, 0x0000 },
+  { 0x8f00, 0x2487, 0x3000 },
+  { 0x8f00, 0x2485, 0x2000 },
+  { 0x0f00, 0x2484, 0x0000 },
+  { 0x0f00, 0x2486, 0x0000 },
+  { 0x8f00, 0x2489, 0x2000 },
+  { 0x0f00, 0x2488, 0x0000 },
+  { 0x0f00, 0x248a, 0x0000 },
+  { 0x9a00, 0x24cb, 0x7000 },
+  { 0x9a00, 0x24ab, 0x6000 },
+  { 0x8f00, 0x249b, 0x5000 },
+  { 0x8f00, 0x2493, 0x4000 },
+  { 0x8f00, 0x248f, 0x3000 },
+  { 0x8f00, 0x248d, 0x2000 },
+  { 0x0f00, 0x248c, 0x0000 },
+  { 0x0f00, 0x248e, 0x0000 },
+  { 0x8f00, 0x2491, 0x2000 },
+  { 0x0f00, 0x2490, 0x0000 },
+  { 0x0f00, 0x2492, 0x0000 },
+  { 0x8f00, 0x2497, 0x3000 },
+  { 0x8f00, 0x2495, 0x2000 },
+  { 0x0f00, 0x2494, 0x0000 },
+  { 0x0f00, 0x2496, 0x0000 },
+  { 0x8f00, 0x2499, 0x2000 },
+  { 0x0f00, 0x2498, 0x0000 },
+  { 0x0f00, 0x249a, 0x0000 },
+  { 0x9a00, 0x24a3, 0x4000 },
+  { 0x9a00, 0x249f, 0x3000 },
+  { 0x9a00, 0x249d, 0x2000 },
+  { 0x1a00, 0x249c, 0x0000 },
+  { 0x1a00, 0x249e, 0x0000 },
+  { 0x9a00, 0x24a1, 0x2000 },
+  { 0x1a00, 0x24a0, 0x0000 },
+  { 0x1a00, 0x24a2, 0x0000 },
+  { 0x9a00, 0x24a7, 0x3000 },
+  { 0x9a00, 0x24a5, 0x2000 },
+  { 0x1a00, 0x24a4, 0x0000 },
+  { 0x1a00, 0x24a6, 0x0000 },
+  { 0x9a00, 0x24a9, 0x2000 },
+  { 0x1a00, 0x24a8, 0x0000 },
+  { 0x1a00, 0x24aa, 0x0000 },
+  { 0x9a00, 0x24bb, 0x5000 },
+  { 0x9a00, 0x24b3, 0x4000 },
+  { 0x9a00, 0x24af, 0x3000 },
+  { 0x9a00, 0x24ad, 0x2000 },
+  { 0x1a00, 0x24ac, 0x0000 },
+  { 0x1a00, 0x24ae, 0x0000 },
+  { 0x9a00, 0x24b1, 0x2000 },
+  { 0x1a00, 0x24b0, 0x0000 },
+  { 0x1a00, 0x24b2, 0x0000 },
+  { 0x9a00, 0x24b7, 0x3000 },
+  { 0x9a00, 0x24b5, 0x2000 },
+  { 0x1a00, 0x24b4, 0x0000 },
+  { 0x1a00, 0x24b6, 0x0000 },
+  { 0x9a00, 0x24b9, 0x2000 },
+  { 0x1a00, 0x24b8, 0x0000 },
+  { 0x1a00, 0x24ba, 0x0000 },
+  { 0x9a00, 0x24c3, 0x4000 },
+  { 0x9a00, 0x24bf, 0x3000 },
+  { 0x9a00, 0x24bd, 0x2000 },
+  { 0x1a00, 0x24bc, 0x0000 },
+  { 0x1a00, 0x24be, 0x0000 },
+  { 0x9a00, 0x24c1, 0x2000 },
+  { 0x1a00, 0x24c0, 0x0000 },
+  { 0x1a00, 0x24c2, 0x0000 },
+  { 0x9a00, 0x24c7, 0x3000 },
+  { 0x9a00, 0x24c5, 0x2000 },
+  { 0x1a00, 0x24c4, 0x0000 },
+  { 0x1a00, 0x24c6, 0x0000 },
+  { 0x9a00, 0x24c9, 0x2000 },
+  { 0x1a00, 0x24c8, 0x0000 },
+  { 0x1a00, 0x24ca, 0x0000 },
+  { 0x8f00, 0x24eb, 0x6000 },
+  { 0x9a00, 0x24db, 0x5000 },
+  { 0x9a00, 0x24d3, 0x4000 },
+  { 0x9a00, 0x24cf, 0x3000 },
+  { 0x9a00, 0x24cd, 0x2000 },
+  { 0x1a00, 0x24cc, 0x0000 },
+  { 0x1a00, 0x24ce, 0x0000 },
+  { 0x9a00, 0x24d1, 0x2000 },
+  { 0x1a00, 0x24d0, 0x0000 },
+  { 0x1a00, 0x24d2, 0x0000 },
+  { 0x9a00, 0x24d7, 0x3000 },
+  { 0x9a00, 0x24d5, 0x2000 },
+  { 0x1a00, 0x24d4, 0x0000 },
+  { 0x1a00, 0x24d6, 0x0000 },
+  { 0x9a00, 0x24d9, 0x2000 },
+  { 0x1a00, 0x24d8, 0x0000 },
+  { 0x1a00, 0x24da, 0x0000 },
+  { 0x9a00, 0x24e3, 0x4000 },
+  { 0x9a00, 0x24df, 0x3000 },
+  { 0x9a00, 0x24dd, 0x2000 },
+  { 0x1a00, 0x24dc, 0x0000 },
+  { 0x1a00, 0x24de, 0x0000 },
+  { 0x9a00, 0x24e1, 0x2000 },
+  { 0x1a00, 0x24e0, 0x0000 },
+  { 0x1a00, 0x24e2, 0x0000 },
+  { 0x9a00, 0x24e7, 0x3000 },
+  { 0x9a00, 0x24e5, 0x2000 },
+  { 0x1a00, 0x24e4, 0x0000 },
+  { 0x1a00, 0x24e6, 0x0000 },
+  { 0x9a00, 0x24e9, 0x2000 },
+  { 0x1a00, 0x24e8, 0x0000 },
+  { 0x0f00, 0x24ea, 0x0000 },
+  { 0x8f00, 0x24fb, 0x5000 },
+  { 0x8f00, 0x24f3, 0x4000 },
+  { 0x8f00, 0x24ef, 0x3000 },
+  { 0x8f00, 0x24ed, 0x2000 },
+  { 0x0f00, 0x24ec, 0x0000 },
+  { 0x0f00, 0x24ee, 0x0000 },
+  { 0x8f00, 0x24f1, 0x2000 },
+  { 0x0f00, 0x24f0, 0x0000 },
+  { 0x0f00, 0x24f2, 0x0000 },
+  { 0x8f00, 0x24f7, 0x3000 },
+  { 0x8f00, 0x24f5, 0x2000 },
+  { 0x0f00, 0x24f4, 0x0000 },
+  { 0x0f00, 0x24f6, 0x0000 },
+  { 0x8f00, 0x24f9, 0x2000 },
+  { 0x0f00, 0x24f8, 0x0000 },
+  { 0x0f00, 0x24fa, 0x0000 },
+  { 0x9a00, 0x2503, 0x4000 },
+  { 0x8f00, 0x24ff, 0x3000 },
+  { 0x8f00, 0x24fd, 0x2000 },
+  { 0x0f00, 0x24fc, 0x0000 },
+  { 0x0f00, 0x24fe, 0x0000 },
+  { 0x9a00, 0x2501, 0x2000 },
+  { 0x1a00, 0x2500, 0x0000 },
+  { 0x1a00, 0x2502, 0x0000 },
+  { 0x9a00, 0x2507, 0x3000 },
+  { 0x9a00, 0x2505, 0x2000 },
+  { 0x1a00, 0x2504, 0x0000 },
+  { 0x1a00, 0x2506, 0x0000 },
+  { 0x9a00, 0x2509, 0x2000 },
+  { 0x1a00, 0x2508, 0x0000 },
+  { 0x1a00, 0x250a, 0x0000 },
+  { 0x9a00, 0x260b, 0x9000 },
+  { 0x9a00, 0x258b, 0x8000 },
+  { 0x9a00, 0x254b, 0x7000 },
+  { 0x9a00, 0x252b, 0x6000 },
+  { 0x9a00, 0x251b, 0x5000 },
+  { 0x9a00, 0x2513, 0x4000 },
+  { 0x9a00, 0x250f, 0x3000 },
+  { 0x9a00, 0x250d, 0x2000 },
+  { 0x1a00, 0x250c, 0x0000 },
+  { 0x1a00, 0x250e, 0x0000 },
+  { 0x9a00, 0x2511, 0x2000 },
+  { 0x1a00, 0x2510, 0x0000 },
+  { 0x1a00, 0x2512, 0x0000 },
+  { 0x9a00, 0x2517, 0x3000 },
+  { 0x9a00, 0x2515, 0x2000 },
+  { 0x1a00, 0x2514, 0x0000 },
+  { 0x1a00, 0x2516, 0x0000 },
+  { 0x9a00, 0x2519, 0x2000 },
+  { 0x1a00, 0x2518, 0x0000 },
+  { 0x1a00, 0x251a, 0x0000 },
+  { 0x9a00, 0x2523, 0x4000 },
+  { 0x9a00, 0x251f, 0x3000 },
+  { 0x9a00, 0x251d, 0x2000 },
+  { 0x1a00, 0x251c, 0x0000 },
+  { 0x1a00, 0x251e, 0x0000 },
+  { 0x9a00, 0x2521, 0x2000 },
+  { 0x1a00, 0x2520, 0x0000 },
+  { 0x1a00, 0x2522, 0x0000 },
+  { 0x9a00, 0x2527, 0x3000 },
+  { 0x9a00, 0x2525, 0x2000 },
+  { 0x1a00, 0x2524, 0x0000 },
+  { 0x1a00, 0x2526, 0x0000 },
+  { 0x9a00, 0x2529, 0x2000 },
+  { 0x1a00, 0x2528, 0x0000 },
+  { 0x1a00, 0x252a, 0x0000 },
+  { 0x9a00, 0x253b, 0x5000 },
+  { 0x9a00, 0x2533, 0x4000 },
+  { 0x9a00, 0x252f, 0x3000 },
+  { 0x9a00, 0x252d, 0x2000 },
+  { 0x1a00, 0x252c, 0x0000 },
+  { 0x1a00, 0x252e, 0x0000 },
+  { 0x9a00, 0x2531, 0x2000 },
+  { 0x1a00, 0x2530, 0x0000 },
+  { 0x1a00, 0x2532, 0x0000 },
+  { 0x9a00, 0x2537, 0x3000 },
+  { 0x9a00, 0x2535, 0x2000 },
+  { 0x1a00, 0x2534, 0x0000 },
+  { 0x1a00, 0x2536, 0x0000 },
+  { 0x9a00, 0x2539, 0x2000 },
+  { 0x1a00, 0x2538, 0x0000 },
+  { 0x1a00, 0x253a, 0x0000 },
+  { 0x9a00, 0x2543, 0x4000 },
+  { 0x9a00, 0x253f, 0x3000 },
+  { 0x9a00, 0x253d, 0x2000 },
+  { 0x1a00, 0x253c, 0x0000 },
+  { 0x1a00, 0x253e, 0x0000 },
+  { 0x9a00, 0x2541, 0x2000 },
+  { 0x1a00, 0x2540, 0x0000 },
+  { 0x1a00, 0x2542, 0x0000 },
+  { 0x9a00, 0x2547, 0x3000 },
+  { 0x9a00, 0x2545, 0x2000 },
+  { 0x1a00, 0x2544, 0x0000 },
+  { 0x1a00, 0x2546, 0x0000 },
+  { 0x9a00, 0x2549, 0x2000 },
+  { 0x1a00, 0x2548, 0x0000 },
+  { 0x1a00, 0x254a, 0x0000 },
+  { 0x9a00, 0x256b, 0x6000 },
+  { 0x9a00, 0x255b, 0x5000 },
+  { 0x9a00, 0x2553, 0x4000 },
+  { 0x9a00, 0x254f, 0x3000 },
+  { 0x9a00, 0x254d, 0x2000 },
+  { 0x1a00, 0x254c, 0x0000 },
+  { 0x1a00, 0x254e, 0x0000 },
+  { 0x9a00, 0x2551, 0x2000 },
+  { 0x1a00, 0x2550, 0x0000 },
+  { 0x1a00, 0x2552, 0x0000 },
+  { 0x9a00, 0x2557, 0x3000 },
+  { 0x9a00, 0x2555, 0x2000 },
+  { 0x1a00, 0x2554, 0x0000 },
+  { 0x1a00, 0x2556, 0x0000 },
+  { 0x9a00, 0x2559, 0x2000 },
+  { 0x1a00, 0x2558, 0x0000 },
+  { 0x1a00, 0x255a, 0x0000 },
+  { 0x9a00, 0x2563, 0x4000 },
+  { 0x9a00, 0x255f, 0x3000 },
+  { 0x9a00, 0x255d, 0x2000 },
+  { 0x1a00, 0x255c, 0x0000 },
+  { 0x1a00, 0x255e, 0x0000 },
+  { 0x9a00, 0x2561, 0x2000 },
+  { 0x1a00, 0x2560, 0x0000 },
+  { 0x1a00, 0x2562, 0x0000 },
+  { 0x9a00, 0x2567, 0x3000 },
+  { 0x9a00, 0x2565, 0x2000 },
+  { 0x1a00, 0x2564, 0x0000 },
+  { 0x1a00, 0x2566, 0x0000 },
+  { 0x9a00, 0x2569, 0x2000 },
+  { 0x1a00, 0x2568, 0x0000 },
+  { 0x1a00, 0x256a, 0x0000 },
+  { 0x9a00, 0x257b, 0x5000 },
+  { 0x9a00, 0x2573, 0x4000 },
+  { 0x9a00, 0x256f, 0x3000 },
+  { 0x9a00, 0x256d, 0x2000 },
+  { 0x1a00, 0x256c, 0x0000 },
+  { 0x1a00, 0x256e, 0x0000 },
+  { 0x9a00, 0x2571, 0x2000 },
+  { 0x1a00, 0x2570, 0x0000 },
+  { 0x1a00, 0x2572, 0x0000 },
+  { 0x9a00, 0x2577, 0x3000 },
+  { 0x9a00, 0x2575, 0x2000 },
+  { 0x1a00, 0x2574, 0x0000 },
+  { 0x1a00, 0x2576, 0x0000 },
+  { 0x9a00, 0x2579, 0x2000 },
+  { 0x1a00, 0x2578, 0x0000 },
+  { 0x1a00, 0x257a, 0x0000 },
+  { 0x9a00, 0x2583, 0x4000 },
+  { 0x9a00, 0x257f, 0x3000 },
+  { 0x9a00, 0x257d, 0x2000 },
+  { 0x1a00, 0x257c, 0x0000 },
+  { 0x1a00, 0x257e, 0x0000 },
+  { 0x9a00, 0x2581, 0x2000 },
+  { 0x1a00, 0x2580, 0x0000 },
+  { 0x1a00, 0x2582, 0x0000 },
+  { 0x9a00, 0x2587, 0x3000 },
+  { 0x9a00, 0x2585, 0x2000 },
+  { 0x1a00, 0x2584, 0x0000 },
+  { 0x1a00, 0x2586, 0x0000 },
+  { 0x9a00, 0x2589, 0x2000 },
+  { 0x1a00, 0x2588, 0x0000 },
+  { 0x1a00, 0x258a, 0x0000 },
+  { 0x9a00, 0x25cb, 0x7000 },
+  { 0x9a00, 0x25ab, 0x6000 },
+  { 0x9a00, 0x259b, 0x5000 },
+  { 0x9a00, 0x2593, 0x4000 },
+  { 0x9a00, 0x258f, 0x3000 },
+  { 0x9a00, 0x258d, 0x2000 },
+  { 0x1a00, 0x258c, 0x0000 },
+  { 0x1a00, 0x258e, 0x0000 },
+  { 0x9a00, 0x2591, 0x2000 },
+  { 0x1a00, 0x2590, 0x0000 },
+  { 0x1a00, 0x2592, 0x0000 },
+  { 0x9a00, 0x2597, 0x3000 },
+  { 0x9a00, 0x2595, 0x2000 },
+  { 0x1a00, 0x2594, 0x0000 },
+  { 0x1a00, 0x2596, 0x0000 },
+  { 0x9a00, 0x2599, 0x2000 },
+  { 0x1a00, 0x2598, 0x0000 },
+  { 0x1a00, 0x259a, 0x0000 },
+  { 0x9a00, 0x25a3, 0x4000 },
+  { 0x9a00, 0x259f, 0x3000 },
+  { 0x9a00, 0x259d, 0x2000 },
+  { 0x1a00, 0x259c, 0x0000 },
+  { 0x1a00, 0x259e, 0x0000 },
+  { 0x9a00, 0x25a1, 0x2000 },
+  { 0x1a00, 0x25a0, 0x0000 },
+  { 0x1a00, 0x25a2, 0x0000 },
+  { 0x9a00, 0x25a7, 0x3000 },
+  { 0x9a00, 0x25a5, 0x2000 },
+  { 0x1a00, 0x25a4, 0x0000 },
+  { 0x1a00, 0x25a6, 0x0000 },
+  { 0x9a00, 0x25a9, 0x2000 },
+  { 0x1a00, 0x25a8, 0x0000 },
+  { 0x1a00, 0x25aa, 0x0000 },
+  { 0x9a00, 0x25bb, 0x5000 },
+  { 0x9a00, 0x25b3, 0x4000 },
+  { 0x9a00, 0x25af, 0x3000 },
+  { 0x9a00, 0x25ad, 0x2000 },
+  { 0x1a00, 0x25ac, 0x0000 },
+  { 0x1a00, 0x25ae, 0x0000 },
+  { 0x9a00, 0x25b1, 0x2000 },
+  { 0x1a00, 0x25b0, 0x0000 },
+  { 0x1a00, 0x25b2, 0x0000 },
+  { 0x9900, 0x25b7, 0x3000 },
+  { 0x9a00, 0x25b5, 0x2000 },
+  { 0x1a00, 0x25b4, 0x0000 },
+  { 0x1a00, 0x25b6, 0x0000 },
+  { 0x9a00, 0x25b9, 0x2000 },
+  { 0x1a00, 0x25b8, 0x0000 },
+  { 0x1a00, 0x25ba, 0x0000 },
+  { 0x9a00, 0x25c3, 0x4000 },
+  { 0x9a00, 0x25bf, 0x3000 },
+  { 0x9a00, 0x25bd, 0x2000 },
+  { 0x1a00, 0x25bc, 0x0000 },
+  { 0x1a00, 0x25be, 0x0000 },
+  { 0x9900, 0x25c1, 0x2000 },
+  { 0x1a00, 0x25c0, 0x0000 },
+  { 0x1a00, 0x25c2, 0x0000 },
+  { 0x9a00, 0x25c7, 0x3000 },
+  { 0x9a00, 0x25c5, 0x2000 },
+  { 0x1a00, 0x25c4, 0x0000 },
+  { 0x1a00, 0x25c6, 0x0000 },
+  { 0x9a00, 0x25c9, 0x2000 },
+  { 0x1a00, 0x25c8, 0x0000 },
+  { 0x1a00, 0x25ca, 0x0000 },
+  { 0x9a00, 0x25eb, 0x6000 },
+  { 0x9a00, 0x25db, 0x5000 },
+  { 0x9a00, 0x25d3, 0x4000 },
+  { 0x9a00, 0x25cf, 0x3000 },
+  { 0x9a00, 0x25cd, 0x2000 },
+  { 0x1a00, 0x25cc, 0x0000 },
+  { 0x1a00, 0x25ce, 0x0000 },
+  { 0x9a00, 0x25d1, 0x2000 },
+  { 0x1a00, 0x25d0, 0x0000 },
+  { 0x1a00, 0x25d2, 0x0000 },
+  { 0x9a00, 0x25d7, 0x3000 },
+  { 0x9a00, 0x25d5, 0x2000 },
+  { 0x1a00, 0x25d4, 0x0000 },
+  { 0x1a00, 0x25d6, 0x0000 },
+  { 0x9a00, 0x25d9, 0x2000 },
+  { 0x1a00, 0x25d8, 0x0000 },
+  { 0x1a00, 0x25da, 0x0000 },
+  { 0x9a00, 0x25e3, 0x4000 },
+  { 0x9a00, 0x25df, 0x3000 },
+  { 0x9a00, 0x25dd, 0x2000 },
+  { 0x1a00, 0x25dc, 0x0000 },
+  { 0x1a00, 0x25de, 0x0000 },
+  { 0x9a00, 0x25e1, 0x2000 },
+  { 0x1a00, 0x25e0, 0x0000 },
+  { 0x1a00, 0x25e2, 0x0000 },
+  { 0x9a00, 0x25e7, 0x3000 },
+  { 0x9a00, 0x25e5, 0x2000 },
+  { 0x1a00, 0x25e4, 0x0000 },
+  { 0x1a00, 0x25e6, 0x0000 },
+  { 0x9a00, 0x25e9, 0x2000 },
+  { 0x1a00, 0x25e8, 0x0000 },
+  { 0x1a00, 0x25ea, 0x0000 },
+  { 0x9900, 0x25fb, 0x5000 },
+  { 0x9a00, 0x25f3, 0x4000 },
+  { 0x9a00, 0x25ef, 0x3000 },
+  { 0x9a00, 0x25ed, 0x2000 },
+  { 0x1a00, 0x25ec, 0x0000 },
+  { 0x1a00, 0x25ee, 0x0000 },
+  { 0x9a00, 0x25f1, 0x2000 },
+  { 0x1a00, 0x25f0, 0x0000 },
+  { 0x1a00, 0x25f2, 0x0000 },
+  { 0x9a00, 0x25f7, 0x3000 },
+  { 0x9a00, 0x25f5, 0x2000 },
+  { 0x1a00, 0x25f4, 0x0000 },
+  { 0x1a00, 0x25f6, 0x0000 },
+  { 0x9900, 0x25f9, 0x2000 },
+  { 0x1900, 0x25f8, 0x0000 },
+  { 0x1900, 0x25fa, 0x0000 },
+  { 0x9a00, 0x2603, 0x4000 },
+  { 0x9900, 0x25ff, 0x3000 },
+  { 0x9900, 0x25fd, 0x2000 },
+  { 0x1900, 0x25fc, 0x0000 },
+  { 0x1900, 0x25fe, 0x0000 },
+  { 0x9a00, 0x2601, 0x2000 },
+  { 0x1a00, 0x2600, 0x0000 },
+  { 0x1a00, 0x2602, 0x0000 },
+  { 0x9a00, 0x2607, 0x3000 },
+  { 0x9a00, 0x2605, 0x2000 },
+  { 0x1a00, 0x2604, 0x0000 },
+  { 0x1a00, 0x2606, 0x0000 },
+  { 0x9a00, 0x2609, 0x2000 },
+  { 0x1a00, 0x2608, 0x0000 },
+  { 0x1a00, 0x260a, 0x0000 },
+  { 0x9a00, 0x268e, 0x8000 },
+  { 0x9a00, 0x264c, 0x7000 },
+  { 0x9a00, 0x262c, 0x6000 },
+  { 0x9a00, 0x261c, 0x5000 },
+  { 0x9a00, 0x2613, 0x4000 },
+  { 0x9a00, 0x260f, 0x3000 },
+  { 0x9a00, 0x260d, 0x2000 },
+  { 0x1a00, 0x260c, 0x0000 },
+  { 0x1a00, 0x260e, 0x0000 },
+  { 0x9a00, 0x2611, 0x2000 },
+  { 0x1a00, 0x2610, 0x0000 },
+  { 0x1a00, 0x2612, 0x0000 },
+  { 0x9a00, 0x2617, 0x3000 },
+  { 0x9a00, 0x2615, 0x2000 },
+  { 0x1a00, 0x2614, 0x0000 },
+  { 0x1a00, 0x2616, 0x0000 },
+  { 0x9a00, 0x261a, 0x2000 },
+  { 0x1a00, 0x2619, 0x0000 },
+  { 0x1a00, 0x261b, 0x0000 },
+  { 0x9a00, 0x2624, 0x4000 },
+  { 0x9a00, 0x2620, 0x3000 },
+  { 0x9a00, 0x261e, 0x2000 },
+  { 0x1a00, 0x261d, 0x0000 },
+  { 0x1a00, 0x261f, 0x0000 },
+  { 0x9a00, 0x2622, 0x2000 },
+  { 0x1a00, 0x2621, 0x0000 },
+  { 0x1a00, 0x2623, 0x0000 },
+  { 0x9a00, 0x2628, 0x3000 },
+  { 0x9a00, 0x2626, 0x2000 },
+  { 0x1a00, 0x2625, 0x0000 },
+  { 0x1a00, 0x2627, 0x0000 },
+  { 0x9a00, 0x262a, 0x2000 },
+  { 0x1a00, 0x2629, 0x0000 },
+  { 0x1a00, 0x262b, 0x0000 },
+  { 0x9a00, 0x263c, 0x5000 },
+  { 0x9a00, 0x2634, 0x4000 },
+  { 0x9a00, 0x2630, 0x3000 },
+  { 0x9a00, 0x262e, 0x2000 },
+  { 0x1a00, 0x262d, 0x0000 },
+  { 0x1a00, 0x262f, 0x0000 },
+  { 0x9a00, 0x2632, 0x2000 },
+  { 0x1a00, 0x2631, 0x0000 },
+  { 0x1a00, 0x2633, 0x0000 },
+  { 0x9a00, 0x2638, 0x3000 },
+  { 0x9a00, 0x2636, 0x2000 },
+  { 0x1a00, 0x2635, 0x0000 },
+  { 0x1a00, 0x2637, 0x0000 },
+  { 0x9a00, 0x263a, 0x2000 },
+  { 0x1a00, 0x2639, 0x0000 },
+  { 0x1a00, 0x263b, 0x0000 },
+  { 0x9a00, 0x2644, 0x4000 },
+  { 0x9a00, 0x2640, 0x3000 },
+  { 0x9a00, 0x263e, 0x2000 },
+  { 0x1a00, 0x263d, 0x0000 },
+  { 0x1a00, 0x263f, 0x0000 },
+  { 0x9a00, 0x2642, 0x2000 },
+  { 0x1a00, 0x2641, 0x0000 },
+  { 0x1a00, 0x2643, 0x0000 },
+  { 0x9a00, 0x2648, 0x3000 },
+  { 0x9a00, 0x2646, 0x2000 },
+  { 0x1a00, 0x2645, 0x0000 },
+  { 0x1a00, 0x2647, 0x0000 },
+  { 0x9a00, 0x264a, 0x2000 },
+  { 0x1a00, 0x2649, 0x0000 },
+  { 0x1a00, 0x264b, 0x0000 },
+  { 0x9a00, 0x266c, 0x6000 },
+  { 0x9a00, 0x265c, 0x5000 },
+  { 0x9a00, 0x2654, 0x4000 },
+  { 0x9a00, 0x2650, 0x3000 },
+  { 0x9a00, 0x264e, 0x2000 },
+  { 0x1a00, 0x264d, 0x0000 },
+  { 0x1a00, 0x264f, 0x0000 },
+  { 0x9a00, 0x2652, 0x2000 },
+  { 0x1a00, 0x2651, 0x0000 },
+  { 0x1a00, 0x2653, 0x0000 },
+  { 0x9a00, 0x2658, 0x3000 },
+  { 0x9a00, 0x2656, 0x2000 },
+  { 0x1a00, 0x2655, 0x0000 },
+  { 0x1a00, 0x2657, 0x0000 },
+  { 0x9a00, 0x265a, 0x2000 },
+  { 0x1a00, 0x2659, 0x0000 },
+  { 0x1a00, 0x265b, 0x0000 },
+  { 0x9a00, 0x2664, 0x4000 },
+  { 0x9a00, 0x2660, 0x3000 },
+  { 0x9a00, 0x265e, 0x2000 },
+  { 0x1a00, 0x265d, 0x0000 },
+  { 0x1a00, 0x265f, 0x0000 },
+  { 0x9a00, 0x2662, 0x2000 },
+  { 0x1a00, 0x2661, 0x0000 },
+  { 0x1a00, 0x2663, 0x0000 },
+  { 0x9a00, 0x2668, 0x3000 },
+  { 0x9a00, 0x2666, 0x2000 },
+  { 0x1a00, 0x2665, 0x0000 },
+  { 0x1a00, 0x2667, 0x0000 },
+  { 0x9a00, 0x266a, 0x2000 },
+  { 0x1a00, 0x2669, 0x0000 },
+  { 0x1a00, 0x266b, 0x0000 },
+  { 0x9a00, 0x267c, 0x5000 },
+  { 0x9a00, 0x2674, 0x4000 },
+  { 0x9a00, 0x2670, 0x3000 },
+  { 0x9a00, 0x266e, 0x2000 },
+  { 0x1a00, 0x266d, 0x0000 },
+  { 0x1900, 0x266f, 0x0000 },
+  { 0x9a00, 0x2672, 0x2000 },
+  { 0x1a00, 0x2671, 0x0000 },
+  { 0x1a00, 0x2673, 0x0000 },
+  { 0x9a00, 0x2678, 0x3000 },
+  { 0x9a00, 0x2676, 0x2000 },
+  { 0x1a00, 0x2675, 0x0000 },
+  { 0x1a00, 0x2677, 0x0000 },
+  { 0x9a00, 0x267a, 0x2000 },
+  { 0x1a00, 0x2679, 0x0000 },
+  { 0x1a00, 0x267b, 0x0000 },
+  { 0x9a00, 0x2686, 0x4000 },
+  { 0x9a00, 0x2682, 0x3000 },
+  { 0x9a00, 0x2680, 0x2000 },
+  { 0x1a00, 0x267d, 0x0000 },
+  { 0x1a00, 0x2681, 0x0000 },
+  { 0x9a00, 0x2684, 0x2000 },
+  { 0x1a00, 0x2683, 0x0000 },
+  { 0x1a00, 0x2685, 0x0000 },
+  { 0x9a00, 0x268a, 0x3000 },
+  { 0x9a00, 0x2688, 0x2000 },
+  { 0x1a00, 0x2687, 0x0000 },
+  { 0x1a00, 0x2689, 0x0000 },
+  { 0x9a00, 0x268c, 0x2000 },
+  { 0x1a00, 0x268b, 0x0000 },
+  { 0x1a00, 0x268d, 0x0000 },
+  { 0x9a00, 0x273f, 0x7000 },
+  { 0x9a00, 0x271e, 0x6000 },
+  { 0x9a00, 0x270e, 0x5000 },
+  { 0x9a00, 0x2703, 0x4000 },
+  { 0x9a00, 0x26a0, 0x3000 },
+  { 0x9a00, 0x2690, 0x2000 },
+  { 0x1a00, 0x268f, 0x0000 },
+  { 0x1a00, 0x2691, 0x0000 },
+  { 0x9a00, 0x2701, 0x2000 },
+  { 0x1a00, 0x26a1, 0x0000 },
+  { 0x1a00, 0x2702, 0x0000 },
+  { 0x9a00, 0x2708, 0x3000 },
+  { 0x9a00, 0x2706, 0x2000 },
+  { 0x1a00, 0x2704, 0x0000 },
+  { 0x1a00, 0x2707, 0x0000 },
+  { 0x9a00, 0x270c, 0x2000 },
+  { 0x1a00, 0x2709, 0x0000 },
+  { 0x1a00, 0x270d, 0x0000 },
+  { 0x9a00, 0x2716, 0x4000 },
+  { 0x9a00, 0x2712, 0x3000 },
+  { 0x9a00, 0x2710, 0x2000 },
+  { 0x1a00, 0x270f, 0x0000 },
+  { 0x1a00, 0x2711, 0x0000 },
+  { 0x9a00, 0x2714, 0x2000 },
+  { 0x1a00, 0x2713, 0x0000 },
+  { 0x1a00, 0x2715, 0x0000 },
+  { 0x9a00, 0x271a, 0x3000 },
+  { 0x9a00, 0x2718, 0x2000 },
+  { 0x1a00, 0x2717, 0x0000 },
+  { 0x1a00, 0x2719, 0x0000 },
+  { 0x9a00, 0x271c, 0x2000 },
+  { 0x1a00, 0x271b, 0x0000 },
+  { 0x1a00, 0x271d, 0x0000 },
+  { 0x9a00, 0x272f, 0x5000 },
+  { 0x9a00, 0x2726, 0x4000 },
+  { 0x9a00, 0x2722, 0x3000 },
+  { 0x9a00, 0x2720, 0x2000 },
+  { 0x1a00, 0x271f, 0x0000 },
+  { 0x1a00, 0x2721, 0x0000 },
+  { 0x9a00, 0x2724, 0x2000 },
+  { 0x1a00, 0x2723, 0x0000 },
+  { 0x1a00, 0x2725, 0x0000 },
+  { 0x9a00, 0x272b, 0x3000 },
+  { 0x9a00, 0x2729, 0x2000 },
+  { 0x1a00, 0x2727, 0x0000 },
+  { 0x1a00, 0x272a, 0x0000 },
+  { 0x9a00, 0x272d, 0x2000 },
+  { 0x1a00, 0x272c, 0x0000 },
+  { 0x1a00, 0x272e, 0x0000 },
+  { 0x9a00, 0x2737, 0x4000 },
+  { 0x9a00, 0x2733, 0x3000 },
+  { 0x9a00, 0x2731, 0x2000 },
+  { 0x1a00, 0x2730, 0x0000 },
+  { 0x1a00, 0x2732, 0x0000 },
+  { 0x9a00, 0x2735, 0x2000 },
+  { 0x1a00, 0x2734, 0x0000 },
+  { 0x1a00, 0x2736, 0x0000 },
+  { 0x9a00, 0x273b, 0x3000 },
+  { 0x9a00, 0x2739, 0x2000 },
+  { 0x1a00, 0x2738, 0x0000 },
+  { 0x1a00, 0x273a, 0x0000 },
+  { 0x9a00, 0x273d, 0x2000 },
+  { 0x1a00, 0x273c, 0x0000 },
+  { 0x1a00, 0x273e, 0x0000 },
+  { 0x9a00, 0x2767, 0x6000 },
+  { 0x9a00, 0x2751, 0x5000 },
+  { 0x9a00, 0x2747, 0x4000 },
+  { 0x9a00, 0x2743, 0x3000 },
+  { 0x9a00, 0x2741, 0x2000 },
+  { 0x1a00, 0x2740, 0x0000 },
+  { 0x1a00, 0x2742, 0x0000 },
+  { 0x9a00, 0x2745, 0x2000 },
+  { 0x1a00, 0x2744, 0x0000 },
+  { 0x1a00, 0x2746, 0x0000 },
+  { 0x9a00, 0x274b, 0x3000 },
+  { 0x9a00, 0x2749, 0x2000 },
+  { 0x1a00, 0x2748, 0x0000 },
+  { 0x1a00, 0x274a, 0x0000 },
+  { 0x9a00, 0x274f, 0x2000 },
+  { 0x1a00, 0x274d, 0x0000 },
+  { 0x1a00, 0x2750, 0x0000 },
+  { 0x9a00, 0x275d, 0x4000 },
+  { 0x9a00, 0x2759, 0x3000 },
+  { 0x9a00, 0x2756, 0x2000 },
+  { 0x1a00, 0x2752, 0x0000 },
+  { 0x1a00, 0x2758, 0x0000 },
+  { 0x9a00, 0x275b, 0x2000 },
+  { 0x1a00, 0x275a, 0x0000 },
+  { 0x1a00, 0x275c, 0x0000 },
+  { 0x9a00, 0x2763, 0x3000 },
+  { 0x9a00, 0x2761, 0x2000 },
+  { 0x1a00, 0x275e, 0x0000 },
+  { 0x1a00, 0x2762, 0x0000 },
+  { 0x9a00, 0x2765, 0x2000 },
+  { 0x1a00, 0x2764, 0x0000 },
+  { 0x1a00, 0x2766, 0x0000 },
+  { 0x8f00, 0x2777, 0x5000 },
+  { 0x9200, 0x276f, 0x4000 },
+  { 0x9200, 0x276b, 0x3000 },
+  { 0x9200, 0x2769, 0x2000 },
+  { 0x1600, 0x2768, 0x0000 },
+  { 0x1600, 0x276a, 0x0000 },
+  { 0x9200, 0x276d, 0x2000 },
+  { 0x1600, 0x276c, 0x0000 },
+  { 0x1600, 0x276e, 0x0000 },
+  { 0x9200, 0x2773, 0x3000 },
+  { 0x9200, 0x2771, 0x2000 },
+  { 0x1600, 0x2770, 0x0000 },
+  { 0x1600, 0x2772, 0x0000 },
+  { 0x9200, 0x2775, 0x2000 },
+  { 0x1600, 0x2774, 0x0000 },
+  { 0x0f00, 0x2776, 0x0000 },
+  { 0x8f00, 0x277f, 0x4000 },
+  { 0x8f00, 0x277b, 0x3000 },
+  { 0x8f00, 0x2779, 0x2000 },
+  { 0x0f00, 0x2778, 0x0000 },
+  { 0x0f00, 0x277a, 0x0000 },
+  { 0x8f00, 0x277d, 0x2000 },
+  { 0x0f00, 0x277c, 0x0000 },
+  { 0x0f00, 0x277e, 0x0000 },
+  { 0x8f00, 0x2783, 0x3000 },
+  { 0x8f00, 0x2781, 0x2000 },
+  { 0x0f00, 0x2780, 0x0000 },
+  { 0x0f00, 0x2782, 0x0000 },
+  { 0x8f00, 0x2785, 0x2000 },
+  { 0x0f00, 0x2784, 0x0000 },
+  { 0x0f00, 0x2786, 0x0000 },
+  { 0x9900, 0x29a0, 0xa000 },
+  { 0x9a00, 0x28a0, 0x9000 },
+  { 0x9a00, 0x2820, 0x8000 },
+  { 0x9900, 0x27dc, 0x7000 },
+  { 0x9a00, 0x27aa, 0x6000 },
+  { 0x9a00, 0x279a, 0x5000 },
+  { 0x8f00, 0x278f, 0x4000 },
+  { 0x8f00, 0x278b, 0x3000 },
+  { 0x8f00, 0x2789, 0x2000 },
+  { 0x0f00, 0x2788, 0x0000 },
+  { 0x0f00, 0x278a, 0x0000 },
+  { 0x8f00, 0x278d, 0x2000 },
+  { 0x0f00, 0x278c, 0x0000 },
+  { 0x0f00, 0x278e, 0x0000 },
+  { 0x8f00, 0x2793, 0x3000 },
+  { 0x8f00, 0x2791, 0x2000 },
+  { 0x0f00, 0x2790, 0x0000 },
+  { 0x0f00, 0x2792, 0x0000 },
+  { 0x9a00, 0x2798, 0x2000 },
+  { 0x1a00, 0x2794, 0x0000 },
+  { 0x1a00, 0x2799, 0x0000 },
+  { 0x9a00, 0x27a2, 0x4000 },
+  { 0x9a00, 0x279e, 0x3000 },
+  { 0x9a00, 0x279c, 0x2000 },
+  { 0x1a00, 0x279b, 0x0000 },
+  { 0x1a00, 0x279d, 0x0000 },
+  { 0x9a00, 0x27a0, 0x2000 },
+  { 0x1a00, 0x279f, 0x0000 },
+  { 0x1a00, 0x27a1, 0x0000 },
+  { 0x9a00, 0x27a6, 0x3000 },
+  { 0x9a00, 0x27a4, 0x2000 },
+  { 0x1a00, 0x27a3, 0x0000 },
+  { 0x1a00, 0x27a5, 0x0000 },
+  { 0x9a00, 0x27a8, 0x2000 },
+  { 0x1a00, 0x27a7, 0x0000 },
+  { 0x1a00, 0x27a9, 0x0000 },
+  { 0x9a00, 0x27bb, 0x5000 },
+  { 0x9a00, 0x27b3, 0x4000 },
+  { 0x9a00, 0x27ae, 0x3000 },
+  { 0x9a00, 0x27ac, 0x2000 },
+  { 0x1a00, 0x27ab, 0x0000 },
+  { 0x1a00, 0x27ad, 0x0000 },
+  { 0x9a00, 0x27b1, 0x2000 },
+  { 0x1a00, 0x27af, 0x0000 },
+  { 0x1a00, 0x27b2, 0x0000 },
+  { 0x9a00, 0x27b7, 0x3000 },
+  { 0x9a00, 0x27b5, 0x2000 },
+  { 0x1a00, 0x27b4, 0x0000 },
+  { 0x1a00, 0x27b6, 0x0000 },
+  { 0x9a00, 0x27b9, 0x2000 },
+  { 0x1a00, 0x27b8, 0x0000 },
+  { 0x1a00, 0x27ba, 0x0000 },
+  { 0x9900, 0x27d4, 0x4000 },
+  { 0x9900, 0x27d0, 0x3000 },
+  { 0x9a00, 0x27bd, 0x2000 },
+  { 0x1a00, 0x27bc, 0x0000 },
+  { 0x1a00, 0x27be, 0x0000 },
+  { 0x9900, 0x27d2, 0x2000 },
+  { 0x1900, 0x27d1, 0x0000 },
+  { 0x1900, 0x27d3, 0x0000 },
+  { 0x9900, 0x27d8, 0x3000 },
+  { 0x9900, 0x27d6, 0x2000 },
+  { 0x1900, 0x27d5, 0x0000 },
+  { 0x1900, 0x27d7, 0x0000 },
+  { 0x9900, 0x27da, 0x2000 },
+  { 0x1900, 0x27d9, 0x0000 },
+  { 0x1900, 0x27db, 0x0000 },
+  { 0x9a00, 0x2800, 0x6000 },
+  { 0x9900, 0x27f0, 0x5000 },
+  { 0x9900, 0x27e4, 0x4000 },
+  { 0x9900, 0x27e0, 0x3000 },
+  { 0x9900, 0x27de, 0x2000 },
+  { 0x1900, 0x27dd, 0x0000 },
+  { 0x1900, 0x27df, 0x0000 },
+  { 0x9900, 0x27e2, 0x2000 },
+  { 0x1900, 0x27e1, 0x0000 },
+  { 0x1900, 0x27e3, 0x0000 },
+  { 0x9600, 0x27e8, 0x3000 },
+  { 0x9600, 0x27e6, 0x2000 },
+  { 0x1900, 0x27e5, 0x0000 },
+  { 0x1200, 0x27e7, 0x0000 },
+  { 0x9600, 0x27ea, 0x2000 },
+  { 0x1200, 0x27e9, 0x0000 },
+  { 0x1200, 0x27eb, 0x0000 },
+  { 0x9900, 0x27f8, 0x4000 },
+  { 0x9900, 0x27f4, 0x3000 },
+  { 0x9900, 0x27f2, 0x2000 },
+  { 0x1900, 0x27f1, 0x0000 },
+  { 0x1900, 0x27f3, 0x0000 },
+  { 0x9900, 0x27f6, 0x2000 },
+  { 0x1900, 0x27f5, 0x0000 },
+  { 0x1900, 0x27f7, 0x0000 },
+  { 0x9900, 0x27fc, 0x3000 },
+  { 0x9900, 0x27fa, 0x2000 },
+  { 0x1900, 0x27f9, 0x0000 },
+  { 0x1900, 0x27fb, 0x0000 },
+  { 0x9900, 0x27fe, 0x2000 },
+  { 0x1900, 0x27fd, 0x0000 },
+  { 0x1900, 0x27ff, 0x0000 },
+  { 0x9a00, 0x2810, 0x5000 },
+  { 0x9a00, 0x2808, 0x4000 },
+  { 0x9a00, 0x2804, 0x3000 },
+  { 0x9a00, 0x2802, 0x2000 },
+  { 0x1a00, 0x2801, 0x0000 },
+  { 0x1a00, 0x2803, 0x0000 },
+  { 0x9a00, 0x2806, 0x2000 },
+  { 0x1a00, 0x2805, 0x0000 },
+  { 0x1a00, 0x2807, 0x0000 },
+  { 0x9a00, 0x280c, 0x3000 },
+  { 0x9a00, 0x280a, 0x2000 },
+  { 0x1a00, 0x2809, 0x0000 },
+  { 0x1a00, 0x280b, 0x0000 },
+  { 0x9a00, 0x280e, 0x2000 },
+  { 0x1a00, 0x280d, 0x0000 },
+  { 0x1a00, 0x280f, 0x0000 },
+  { 0x9a00, 0x2818, 0x4000 },
+  { 0x9a00, 0x2814, 0x3000 },
+  { 0x9a00, 0x2812, 0x2000 },
+  { 0x1a00, 0x2811, 0x0000 },
+  { 0x1a00, 0x2813, 0x0000 },
+  { 0x9a00, 0x2816, 0x2000 },
+  { 0x1a00, 0x2815, 0x0000 },
+  { 0x1a00, 0x2817, 0x0000 },
+  { 0x9a00, 0x281c, 0x3000 },
+  { 0x9a00, 0x281a, 0x2000 },
+  { 0x1a00, 0x2819, 0x0000 },
+  { 0x1a00, 0x281b, 0x0000 },
+  { 0x9a00, 0x281e, 0x2000 },
+  { 0x1a00, 0x281d, 0x0000 },
+  { 0x1a00, 0x281f, 0x0000 },
+  { 0x9a00, 0x2860, 0x7000 },
+  { 0x9a00, 0x2840, 0x6000 },
+  { 0x9a00, 0x2830, 0x5000 },
+  { 0x9a00, 0x2828, 0x4000 },
+  { 0x9a00, 0x2824, 0x3000 },
+  { 0x9a00, 0x2822, 0x2000 },
+  { 0x1a00, 0x2821, 0x0000 },
+  { 0x1a00, 0x2823, 0x0000 },
+  { 0x9a00, 0x2826, 0x2000 },
+  { 0x1a00, 0x2825, 0x0000 },
+  { 0x1a00, 0x2827, 0x0000 },
+  { 0x9a00, 0x282c, 0x3000 },
+  { 0x9a00, 0x282a, 0x2000 },
+  { 0x1a00, 0x2829, 0x0000 },
+  { 0x1a00, 0x282b, 0x0000 },
+  { 0x9a00, 0x282e, 0x2000 },
+  { 0x1a00, 0x282d, 0x0000 },
+  { 0x1a00, 0x282f, 0x0000 },
+  { 0x9a00, 0x2838, 0x4000 },
+  { 0x9a00, 0x2834, 0x3000 },
+  { 0x9a00, 0x2832, 0x2000 },
+  { 0x1a00, 0x2831, 0x0000 },
+  { 0x1a00, 0x2833, 0x0000 },
+  { 0x9a00, 0x2836, 0x2000 },
+  { 0x1a00, 0x2835, 0x0000 },
+  { 0x1a00, 0x2837, 0x0000 },
+  { 0x9a00, 0x283c, 0x3000 },
+  { 0x9a00, 0x283a, 0x2000 },
+  { 0x1a00, 0x2839, 0x0000 },
+  { 0x1a00, 0x283b, 0x0000 },
+  { 0x9a00, 0x283e, 0x2000 },
+  { 0x1a00, 0x283d, 0x0000 },
+  { 0x1a00, 0x283f, 0x0000 },
+  { 0x9a00, 0x2850, 0x5000 },
+  { 0x9a00, 0x2848, 0x4000 },
+  { 0x9a00, 0x2844, 0x3000 },
+  { 0x9a00, 0x2842, 0x2000 },
+  { 0x1a00, 0x2841, 0x0000 },
+  { 0x1a00, 0x2843, 0x0000 },
+  { 0x9a00, 0x2846, 0x2000 },
+  { 0x1a00, 0x2845, 0x0000 },
+  { 0x1a00, 0x2847, 0x0000 },
+  { 0x9a00, 0x284c, 0x3000 },
+  { 0x9a00, 0x284a, 0x2000 },
+  { 0x1a00, 0x2849, 0x0000 },
+  { 0x1a00, 0x284b, 0x0000 },
+  { 0x9a00, 0x284e, 0x2000 },
+  { 0x1a00, 0x284d, 0x0000 },
+  { 0x1a00, 0x284f, 0x0000 },
+  { 0x9a00, 0x2858, 0x4000 },
+  { 0x9a00, 0x2854, 0x3000 },
+  { 0x9a00, 0x2852, 0x2000 },
+  { 0x1a00, 0x2851, 0x0000 },
+  { 0x1a00, 0x2853, 0x0000 },
+  { 0x9a00, 0x2856, 0x2000 },
+  { 0x1a00, 0x2855, 0x0000 },
+  { 0x1a00, 0x2857, 0x0000 },
+  { 0x9a00, 0x285c, 0x3000 },
+  { 0x9a00, 0x285a, 0x2000 },
+  { 0x1a00, 0x2859, 0x0000 },
+  { 0x1a00, 0x285b, 0x0000 },
+  { 0x9a00, 0x285e, 0x2000 },
+  { 0x1a00, 0x285d, 0x0000 },
+  { 0x1a00, 0x285f, 0x0000 },
+  { 0x9a00, 0x2880, 0x6000 },
+  { 0x9a00, 0x2870, 0x5000 },
+  { 0x9a00, 0x2868, 0x4000 },
+  { 0x9a00, 0x2864, 0x3000 },
+  { 0x9a00, 0x2862, 0x2000 },
+  { 0x1a00, 0x2861, 0x0000 },
+  { 0x1a00, 0x2863, 0x0000 },
+  { 0x9a00, 0x2866, 0x2000 },
+  { 0x1a00, 0x2865, 0x0000 },
+  { 0x1a00, 0x2867, 0x0000 },
+  { 0x9a00, 0x286c, 0x3000 },
+  { 0x9a00, 0x286a, 0x2000 },
+  { 0x1a00, 0x2869, 0x0000 },
+  { 0x1a00, 0x286b, 0x0000 },
+  { 0x9a00, 0x286e, 0x2000 },
+  { 0x1a00, 0x286d, 0x0000 },
+  { 0x1a00, 0x286f, 0x0000 },
+  { 0x9a00, 0x2878, 0x4000 },
+  { 0x9a00, 0x2874, 0x3000 },
+  { 0x9a00, 0x2872, 0x2000 },
+  { 0x1a00, 0x2871, 0x0000 },
+  { 0x1a00, 0x2873, 0x0000 },
+  { 0x9a00, 0x2876, 0x2000 },
+  { 0x1a00, 0x2875, 0x0000 },
+  { 0x1a00, 0x2877, 0x0000 },
+  { 0x9a00, 0x287c, 0x3000 },
+  { 0x9a00, 0x287a, 0x2000 },
+  { 0x1a00, 0x2879, 0x0000 },
+  { 0x1a00, 0x287b, 0x0000 },
+  { 0x9a00, 0x287e, 0x2000 },
+  { 0x1a00, 0x287d, 0x0000 },
+  { 0x1a00, 0x287f, 0x0000 },
+  { 0x9a00, 0x2890, 0x5000 },
+  { 0x9a00, 0x2888, 0x4000 },
+  { 0x9a00, 0x2884, 0x3000 },
+  { 0x9a00, 0x2882, 0x2000 },
+  { 0x1a00, 0x2881, 0x0000 },
+  { 0x1a00, 0x2883, 0x0000 },
+  { 0x9a00, 0x2886, 0x2000 },
+  { 0x1a00, 0x2885, 0x0000 },
+  { 0x1a00, 0x2887, 0x0000 },
+  { 0x9a00, 0x288c, 0x3000 },
+  { 0x9a00, 0x288a, 0x2000 },
+  { 0x1a00, 0x2889, 0x0000 },
+  { 0x1a00, 0x288b, 0x0000 },
+  { 0x9a00, 0x288e, 0x2000 },
+  { 0x1a00, 0x288d, 0x0000 },
+  { 0x1a00, 0x288f, 0x0000 },
+  { 0x9a00, 0x2898, 0x4000 },
+  { 0x9a00, 0x2894, 0x3000 },
+  { 0x9a00, 0x2892, 0x2000 },
+  { 0x1a00, 0x2891, 0x0000 },
+  { 0x1a00, 0x2893, 0x0000 },
+  { 0x9a00, 0x2896, 0x2000 },
+  { 0x1a00, 0x2895, 0x0000 },
+  { 0x1a00, 0x2897, 0x0000 },
+  { 0x9a00, 0x289c, 0x3000 },
+  { 0x9a00, 0x289a, 0x2000 },
+  { 0x1a00, 0x2899, 0x0000 },
+  { 0x1a00, 0x289b, 0x0000 },
+  { 0x9a00, 0x289e, 0x2000 },
+  { 0x1a00, 0x289d, 0x0000 },
+  { 0x1a00, 0x289f, 0x0000 },
+  { 0x9900, 0x2920, 0x8000 },
+  { 0x9a00, 0x28e0, 0x7000 },
+  { 0x9a00, 0x28c0, 0x6000 },
+  { 0x9a00, 0x28b0, 0x5000 },
+  { 0x9a00, 0x28a8, 0x4000 },
+  { 0x9a00, 0x28a4, 0x3000 },
+  { 0x9a00, 0x28a2, 0x2000 },
+  { 0x1a00, 0x28a1, 0x0000 },
+  { 0x1a00, 0x28a3, 0x0000 },
+  { 0x9a00, 0x28a6, 0x2000 },
+  { 0x1a00, 0x28a5, 0x0000 },
+  { 0x1a00, 0x28a7, 0x0000 },
+  { 0x9a00, 0x28ac, 0x3000 },
+  { 0x9a00, 0x28aa, 0x2000 },
+  { 0x1a00, 0x28a9, 0x0000 },
+  { 0x1a00, 0x28ab, 0x0000 },
+  { 0x9a00, 0x28ae, 0x2000 },
+  { 0x1a00, 0x28ad, 0x0000 },
+  { 0x1a00, 0x28af, 0x0000 },
+  { 0x9a00, 0x28b8, 0x4000 },
+  { 0x9a00, 0x28b4, 0x3000 },
+  { 0x9a00, 0x28b2, 0x2000 },
+  { 0x1a00, 0x28b1, 0x0000 },
+  { 0x1a00, 0x28b3, 0x0000 },
+  { 0x9a00, 0x28b6, 0x2000 },
+  { 0x1a00, 0x28b5, 0x0000 },
+  { 0x1a00, 0x28b7, 0x0000 },
+  { 0x9a00, 0x28bc, 0x3000 },
+  { 0x9a00, 0x28ba, 0x2000 },
+  { 0x1a00, 0x28b9, 0x0000 },
+  { 0x1a00, 0x28bb, 0x0000 },
+  { 0x9a00, 0x28be, 0x2000 },
+  { 0x1a00, 0x28bd, 0x0000 },
+  { 0x1a00, 0x28bf, 0x0000 },
+  { 0x9a00, 0x28d0, 0x5000 },
+  { 0x9a00, 0x28c8, 0x4000 },
+  { 0x9a00, 0x28c4, 0x3000 },
+  { 0x9a00, 0x28c2, 0x2000 },
+  { 0x1a00, 0x28c1, 0x0000 },
+  { 0x1a00, 0x28c3, 0x0000 },
+  { 0x9a00, 0x28c6, 0x2000 },
+  { 0x1a00, 0x28c5, 0x0000 },
+  { 0x1a00, 0x28c7, 0x0000 },
+  { 0x9a00, 0x28cc, 0x3000 },
+  { 0x9a00, 0x28ca, 0x2000 },
+  { 0x1a00, 0x28c9, 0x0000 },
+  { 0x1a00, 0x28cb, 0x0000 },
+  { 0x9a00, 0x28ce, 0x2000 },
+  { 0x1a00, 0x28cd, 0x0000 },
+  { 0x1a00, 0x28cf, 0x0000 },
+  { 0x9a00, 0x28d8, 0x4000 },
+  { 0x9a00, 0x28d4, 0x3000 },
+  { 0x9a00, 0x28d2, 0x2000 },
+  { 0x1a00, 0x28d1, 0x0000 },
+  { 0x1a00, 0x28d3, 0x0000 },
+  { 0x9a00, 0x28d6, 0x2000 },
+  { 0x1a00, 0x28d5, 0x0000 },
+  { 0x1a00, 0x28d7, 0x0000 },
+  { 0x9a00, 0x28dc, 0x3000 },
+  { 0x9a00, 0x28da, 0x2000 },
+  { 0x1a00, 0x28d9, 0x0000 },
+  { 0x1a00, 0x28db, 0x0000 },
+  { 0x9a00, 0x28de, 0x2000 },
+  { 0x1a00, 0x28dd, 0x0000 },
+  { 0x1a00, 0x28df, 0x0000 },
+  { 0x9900, 0x2900, 0x6000 },
+  { 0x9a00, 0x28f0, 0x5000 },
+  { 0x9a00, 0x28e8, 0x4000 },
+  { 0x9a00, 0x28e4, 0x3000 },
+  { 0x9a00, 0x28e2, 0x2000 },
+  { 0x1a00, 0x28e1, 0x0000 },
+  { 0x1a00, 0x28e3, 0x0000 },
+  { 0x9a00, 0x28e6, 0x2000 },
+  { 0x1a00, 0x28e5, 0x0000 },
+  { 0x1a00, 0x28e7, 0x0000 },
+  { 0x9a00, 0x28ec, 0x3000 },
+  { 0x9a00, 0x28ea, 0x2000 },
+  { 0x1a00, 0x28e9, 0x0000 },
+  { 0x1a00, 0x28eb, 0x0000 },
+  { 0x9a00, 0x28ee, 0x2000 },
+  { 0x1a00, 0x28ed, 0x0000 },
+  { 0x1a00, 0x28ef, 0x0000 },
+  { 0x9a00, 0x28f8, 0x4000 },
+  { 0x9a00, 0x28f4, 0x3000 },
+  { 0x9a00, 0x28f2, 0x2000 },
+  { 0x1a00, 0x28f1, 0x0000 },
+  { 0x1a00, 0x28f3, 0x0000 },
+  { 0x9a00, 0x28f6, 0x2000 },
+  { 0x1a00, 0x28f5, 0x0000 },
+  { 0x1a00, 0x28f7, 0x0000 },
+  { 0x9a00, 0x28fc, 0x3000 },
+  { 0x9a00, 0x28fa, 0x2000 },
+  { 0x1a00, 0x28f9, 0x0000 },
+  { 0x1a00, 0x28fb, 0x0000 },
+  { 0x9a00, 0x28fe, 0x2000 },
+  { 0x1a00, 0x28fd, 0x0000 },
+  { 0x1a00, 0x28ff, 0x0000 },
+  { 0x9900, 0x2910, 0x5000 },
+  { 0x9900, 0x2908, 0x4000 },
+  { 0x9900, 0x2904, 0x3000 },
+  { 0x9900, 0x2902, 0x2000 },
+  { 0x1900, 0x2901, 0x0000 },
+  { 0x1900, 0x2903, 0x0000 },
+  { 0x9900, 0x2906, 0x2000 },
+  { 0x1900, 0x2905, 0x0000 },
+  { 0x1900, 0x2907, 0x0000 },
+  { 0x9900, 0x290c, 0x3000 },
+  { 0x9900, 0x290a, 0x2000 },
+  { 0x1900, 0x2909, 0x0000 },
+  { 0x1900, 0x290b, 0x0000 },
+  { 0x9900, 0x290e, 0x2000 },
+  { 0x1900, 0x290d, 0x0000 },
+  { 0x1900, 0x290f, 0x0000 },
+  { 0x9900, 0x2918, 0x4000 },
+  { 0x9900, 0x2914, 0x3000 },
+  { 0x9900, 0x2912, 0x2000 },
+  { 0x1900, 0x2911, 0x0000 },
+  { 0x1900, 0x2913, 0x0000 },
+  { 0x9900, 0x2916, 0x2000 },
+  { 0x1900, 0x2915, 0x0000 },
+  { 0x1900, 0x2917, 0x0000 },
+  { 0x9900, 0x291c, 0x3000 },
+  { 0x9900, 0x291a, 0x2000 },
+  { 0x1900, 0x2919, 0x0000 },
+  { 0x1900, 0x291b, 0x0000 },
+  { 0x9900, 0x291e, 0x2000 },
+  { 0x1900, 0x291d, 0x0000 },
+  { 0x1900, 0x291f, 0x0000 },
+  { 0x9900, 0x2960, 0x7000 },
+  { 0x9900, 0x2940, 0x6000 },
+  { 0x9900, 0x2930, 0x5000 },
+  { 0x9900, 0x2928, 0x4000 },
+  { 0x9900, 0x2924, 0x3000 },
+  { 0x9900, 0x2922, 0x2000 },
+  { 0x1900, 0x2921, 0x0000 },
+  { 0x1900, 0x2923, 0x0000 },
+  { 0x9900, 0x2926, 0x2000 },
+  { 0x1900, 0x2925, 0x0000 },
+  { 0x1900, 0x2927, 0x0000 },
+  { 0x9900, 0x292c, 0x3000 },
+  { 0x9900, 0x292a, 0x2000 },
+  { 0x1900, 0x2929, 0x0000 },
+  { 0x1900, 0x292b, 0x0000 },
+  { 0x9900, 0x292e, 0x2000 },
+  { 0x1900, 0x292d, 0x0000 },
+  { 0x1900, 0x292f, 0x0000 },
+  { 0x9900, 0x2938, 0x4000 },
+  { 0x9900, 0x2934, 0x3000 },
+  { 0x9900, 0x2932, 0x2000 },
+  { 0x1900, 0x2931, 0x0000 },
+  { 0x1900, 0x2933, 0x0000 },
+  { 0x9900, 0x2936, 0x2000 },
+  { 0x1900, 0x2935, 0x0000 },
+  { 0x1900, 0x2937, 0x0000 },
+  { 0x9900, 0x293c, 0x3000 },
+  { 0x9900, 0x293a, 0x2000 },
+  { 0x1900, 0x2939, 0x0000 },
+  { 0x1900, 0x293b, 0x0000 },
+  { 0x9900, 0x293e, 0x2000 },
+  { 0x1900, 0x293d, 0x0000 },
+  { 0x1900, 0x293f, 0x0000 },
+  { 0x9900, 0x2950, 0x5000 },
+  { 0x9900, 0x2948, 0x4000 },
+  { 0x9900, 0x2944, 0x3000 },
+  { 0x9900, 0x2942, 0x2000 },
+  { 0x1900, 0x2941, 0x0000 },
+  { 0x1900, 0x2943, 0x0000 },
+  { 0x9900, 0x2946, 0x2000 },
+  { 0x1900, 0x2945, 0x0000 },
+  { 0x1900, 0x2947, 0x0000 },
+  { 0x9900, 0x294c, 0x3000 },
+  { 0x9900, 0x294a, 0x2000 },
+  { 0x1900, 0x2949, 0x0000 },
+  { 0x1900, 0x294b, 0x0000 },
+  { 0x9900, 0x294e, 0x2000 },
+  { 0x1900, 0x294d, 0x0000 },
+  { 0x1900, 0x294f, 0x0000 },
+  { 0x9900, 0x2958, 0x4000 },
+  { 0x9900, 0x2954, 0x3000 },
+  { 0x9900, 0x2952, 0x2000 },
+  { 0x1900, 0x2951, 0x0000 },
+  { 0x1900, 0x2953, 0x0000 },
+  { 0x9900, 0x2956, 0x2000 },
+  { 0x1900, 0x2955, 0x0000 },
+  { 0x1900, 0x2957, 0x0000 },
+  { 0x9900, 0x295c, 0x3000 },
+  { 0x9900, 0x295a, 0x2000 },
+  { 0x1900, 0x2959, 0x0000 },
+  { 0x1900, 0x295b, 0x0000 },
+  { 0x9900, 0x295e, 0x2000 },
+  { 0x1900, 0x295d, 0x0000 },
+  { 0x1900, 0x295f, 0x0000 },
+  { 0x9900, 0x2980, 0x6000 },
+  { 0x9900, 0x2970, 0x5000 },
+  { 0x9900, 0x2968, 0x4000 },
+  { 0x9900, 0x2964, 0x3000 },
+  { 0x9900, 0x2962, 0x2000 },
+  { 0x1900, 0x2961, 0x0000 },
+  { 0x1900, 0x2963, 0x0000 },
+  { 0x9900, 0x2966, 0x2000 },
+  { 0x1900, 0x2965, 0x0000 },
+  { 0x1900, 0x2967, 0x0000 },
+  { 0x9900, 0x296c, 0x3000 },
+  { 0x9900, 0x296a, 0x2000 },
+  { 0x1900, 0x2969, 0x0000 },
+  { 0x1900, 0x296b, 0x0000 },
+  { 0x9900, 0x296e, 0x2000 },
+  { 0x1900, 0x296d, 0x0000 },
+  { 0x1900, 0x296f, 0x0000 },
+  { 0x9900, 0x2978, 0x4000 },
+  { 0x9900, 0x2974, 0x3000 },
+  { 0x9900, 0x2972, 0x2000 },
+  { 0x1900, 0x2971, 0x0000 },
+  { 0x1900, 0x2973, 0x0000 },
+  { 0x9900, 0x2976, 0x2000 },
+  { 0x1900, 0x2975, 0x0000 },
+  { 0x1900, 0x2977, 0x0000 },
+  { 0x9900, 0x297c, 0x3000 },
+  { 0x9900, 0x297a, 0x2000 },
+  { 0x1900, 0x2979, 0x0000 },
+  { 0x1900, 0x297b, 0x0000 },
+  { 0x9900, 0x297e, 0x2000 },
+  { 0x1900, 0x297d, 0x0000 },
+  { 0x1900, 0x297f, 0x0000 },
+  { 0x9200, 0x2990, 0x5000 },
+  { 0x9200, 0x2988, 0x4000 },
+  { 0x9200, 0x2984, 0x3000 },
+  { 0x9900, 0x2982, 0x2000 },
+  { 0x1900, 0x2981, 0x0000 },
+  { 0x1600, 0x2983, 0x0000 },
+  { 0x9200, 0x2986, 0x2000 },
+  { 0x1600, 0x2985, 0x0000 },
+  { 0x1600, 0x2987, 0x0000 },
+  { 0x9200, 0x298c, 0x3000 },
+  { 0x9200, 0x298a, 0x2000 },
+  { 0x1600, 0x2989, 0x0000 },
+  { 0x1600, 0x298b, 0x0000 },
+  { 0x9200, 0x298e, 0x2000 },
+  { 0x1600, 0x298d, 0x0000 },
+  { 0x1600, 0x298f, 0x0000 },
+  { 0x9200, 0x2998, 0x4000 },
+  { 0x9200, 0x2994, 0x3000 },
+  { 0x9200, 0x2992, 0x2000 },
+  { 0x1600, 0x2991, 0x0000 },
+  { 0x1600, 0x2993, 0x0000 },
+  { 0x9200, 0x2996, 0x2000 },
+  { 0x1600, 0x2995, 0x0000 },
+  { 0x1600, 0x2997, 0x0000 },
+  { 0x9900, 0x299c, 0x3000 },
+  { 0x9900, 0x299a, 0x2000 },
+  { 0x1900, 0x2999, 0x0000 },
+  { 0x1900, 0x299b, 0x0000 },
+  { 0x9900, 0x299e, 0x2000 },
+  { 0x1900, 0x299d, 0x0000 },
+  { 0x1900, 0x299f, 0x0000 },
+  { 0x9900, 0x2aa0, 0x9000 },
+  { 0x9900, 0x2a20, 0x8000 },
+  { 0x9900, 0x29e0, 0x7000 },
+  { 0x9900, 0x29c0, 0x6000 },
+  { 0x9900, 0x29b0, 0x5000 },
+  { 0x9900, 0x29a8, 0x4000 },
+  { 0x9900, 0x29a4, 0x3000 },
+  { 0x9900, 0x29a2, 0x2000 },
+  { 0x1900, 0x29a1, 0x0000 },
+  { 0x1900, 0x29a3, 0x0000 },
+  { 0x9900, 0x29a6, 0x2000 },
+  { 0x1900, 0x29a5, 0x0000 },
+  { 0x1900, 0x29a7, 0x0000 },
+  { 0x9900, 0x29ac, 0x3000 },
+  { 0x9900, 0x29aa, 0x2000 },
+  { 0x1900, 0x29a9, 0x0000 },
+  { 0x1900, 0x29ab, 0x0000 },
+  { 0x9900, 0x29ae, 0x2000 },
+  { 0x1900, 0x29ad, 0x0000 },
+  { 0x1900, 0x29af, 0x0000 },
+  { 0x9900, 0x29b8, 0x4000 },
+  { 0x9900, 0x29b4, 0x3000 },
+  { 0x9900, 0x29b2, 0x2000 },
+  { 0x1900, 0x29b1, 0x0000 },
+  { 0x1900, 0x29b3, 0x0000 },
+  { 0x9900, 0x29b6, 0x2000 },
+  { 0x1900, 0x29b5, 0x0000 },
+  { 0x1900, 0x29b7, 0x0000 },
+  { 0x9900, 0x29bc, 0x3000 },
+  { 0x9900, 0x29ba, 0x2000 },
+  { 0x1900, 0x29b9, 0x0000 },
+  { 0x1900, 0x29bb, 0x0000 },
+  { 0x9900, 0x29be, 0x2000 },
+  { 0x1900, 0x29bd, 0x0000 },
+  { 0x1900, 0x29bf, 0x0000 },
+  { 0x9900, 0x29d0, 0x5000 },
+  { 0x9900, 0x29c8, 0x4000 },
+  { 0x9900, 0x29c4, 0x3000 },
+  { 0x9900, 0x29c2, 0x2000 },
+  { 0x1900, 0x29c1, 0x0000 },
+  { 0x1900, 0x29c3, 0x0000 },
+  { 0x9900, 0x29c6, 0x2000 },
+  { 0x1900, 0x29c5, 0x0000 },
+  { 0x1900, 0x29c7, 0x0000 },
+  { 0x9900, 0x29cc, 0x3000 },
+  { 0x9900, 0x29ca, 0x2000 },
+  { 0x1900, 0x29c9, 0x0000 },
+  { 0x1900, 0x29cb, 0x0000 },
+  { 0x9900, 0x29ce, 0x2000 },
+  { 0x1900, 0x29cd, 0x0000 },
+  { 0x1900, 0x29cf, 0x0000 },
+  { 0x9600, 0x29d8, 0x4000 },
+  { 0x9900, 0x29d4, 0x3000 },
+  { 0x9900, 0x29d2, 0x2000 },
+  { 0x1900, 0x29d1, 0x0000 },
+  { 0x1900, 0x29d3, 0x0000 },
+  { 0x9900, 0x29d6, 0x2000 },
+  { 0x1900, 0x29d5, 0x0000 },
+  { 0x1900, 0x29d7, 0x0000 },
+  { 0x9900, 0x29dc, 0x3000 },
+  { 0x9600, 0x29da, 0x2000 },
+  { 0x1200, 0x29d9, 0x0000 },
+  { 0x1200, 0x29db, 0x0000 },
+  { 0x9900, 0x29de, 0x2000 },
+  { 0x1900, 0x29dd, 0x0000 },
+  { 0x1900, 0x29df, 0x0000 },
+  { 0x9900, 0x2a00, 0x6000 },
+  { 0x9900, 0x29f0, 0x5000 },
+  { 0x9900, 0x29e8, 0x4000 },
+  { 0x9900, 0x29e4, 0x3000 },
+  { 0x9900, 0x29e2, 0x2000 },
+  { 0x1900, 0x29e1, 0x0000 },
+  { 0x1900, 0x29e3, 0x0000 },
+  { 0x9900, 0x29e6, 0x2000 },
+  { 0x1900, 0x29e5, 0x0000 },
+  { 0x1900, 0x29e7, 0x0000 },
+  { 0x9900, 0x29ec, 0x3000 },
+  { 0x9900, 0x29ea, 0x2000 },
+  { 0x1900, 0x29e9, 0x0000 },
+  { 0x1900, 0x29eb, 0x0000 },
+  { 0x9900, 0x29ee, 0x2000 },
+  { 0x1900, 0x29ed, 0x0000 },
+  { 0x1900, 0x29ef, 0x0000 },
+  { 0x9900, 0x29f8, 0x4000 },
+  { 0x9900, 0x29f4, 0x3000 },
+  { 0x9900, 0x29f2, 0x2000 },
+  { 0x1900, 0x29f1, 0x0000 },
+  { 0x1900, 0x29f3, 0x0000 },
+  { 0x9900, 0x29f6, 0x2000 },
+  { 0x1900, 0x29f5, 0x0000 },
+  { 0x1900, 0x29f7, 0x0000 },
+  { 0x9600, 0x29fc, 0x3000 },
+  { 0x9900, 0x29fa, 0x2000 },
+  { 0x1900, 0x29f9, 0x0000 },
+  { 0x1900, 0x29fb, 0x0000 },
+  { 0x9900, 0x29fe, 0x2000 },
+  { 0x1200, 0x29fd, 0x0000 },
+  { 0x1900, 0x29ff, 0x0000 },
+  { 0x9900, 0x2a10, 0x5000 },
+  { 0x9900, 0x2a08, 0x4000 },
+  { 0x9900, 0x2a04, 0x3000 },
+  { 0x9900, 0x2a02, 0x2000 },
+  { 0x1900, 0x2a01, 0x0000 },
+  { 0x1900, 0x2a03, 0x0000 },
+  { 0x9900, 0x2a06, 0x2000 },
+  { 0x1900, 0x2a05, 0x0000 },
+  { 0x1900, 0x2a07, 0x0000 },
+  { 0x9900, 0x2a0c, 0x3000 },
+  { 0x9900, 0x2a0a, 0x2000 },
+  { 0x1900, 0x2a09, 0x0000 },
+  { 0x1900, 0x2a0b, 0x0000 },
+  { 0x9900, 0x2a0e, 0x2000 },
+  { 0x1900, 0x2a0d, 0x0000 },
+  { 0x1900, 0x2a0f, 0x0000 },
+  { 0x9900, 0x2a18, 0x4000 },
+  { 0x9900, 0x2a14, 0x3000 },
+  { 0x9900, 0x2a12, 0x2000 },
+  { 0x1900, 0x2a11, 0x0000 },
+  { 0x1900, 0x2a13, 0x0000 },
+  { 0x9900, 0x2a16, 0x2000 },
+  { 0x1900, 0x2a15, 0x0000 },
+  { 0x1900, 0x2a17, 0x0000 },
+  { 0x9900, 0x2a1c, 0x3000 },
+  { 0x9900, 0x2a1a, 0x2000 },
+  { 0x1900, 0x2a19, 0x0000 },
+  { 0x1900, 0x2a1b, 0x0000 },
+  { 0x9900, 0x2a1e, 0x2000 },
+  { 0x1900, 0x2a1d, 0x0000 },
+  { 0x1900, 0x2a1f, 0x0000 },
+  { 0x9900, 0x2a60, 0x7000 },
+  { 0x9900, 0x2a40, 0x6000 },
+  { 0x9900, 0x2a30, 0x5000 },
+  { 0x9900, 0x2a28, 0x4000 },
+  { 0x9900, 0x2a24, 0x3000 },
+  { 0x9900, 0x2a22, 0x2000 },
+  { 0x1900, 0x2a21, 0x0000 },
+  { 0x1900, 0x2a23, 0x0000 },
+  { 0x9900, 0x2a26, 0x2000 },
+  { 0x1900, 0x2a25, 0x0000 },
+  { 0x1900, 0x2a27, 0x0000 },
+  { 0x9900, 0x2a2c, 0x3000 },
+  { 0x9900, 0x2a2a, 0x2000 },
+  { 0x1900, 0x2a29, 0x0000 },
+  { 0x1900, 0x2a2b, 0x0000 },
+  { 0x9900, 0x2a2e, 0x2000 },
+  { 0x1900, 0x2a2d, 0x0000 },
+  { 0x1900, 0x2a2f, 0x0000 },
+  { 0x9900, 0x2a38, 0x4000 },
+  { 0x9900, 0x2a34, 0x3000 },
+  { 0x9900, 0x2a32, 0x2000 },
+  { 0x1900, 0x2a31, 0x0000 },
+  { 0x1900, 0x2a33, 0x0000 },
+  { 0x9900, 0x2a36, 0x2000 },
+  { 0x1900, 0x2a35, 0x0000 },
+  { 0x1900, 0x2a37, 0x0000 },
+  { 0x9900, 0x2a3c, 0x3000 },
+  { 0x9900, 0x2a3a, 0x2000 },
+  { 0x1900, 0x2a39, 0x0000 },
+  { 0x1900, 0x2a3b, 0x0000 },
+  { 0x9900, 0x2a3e, 0x2000 },
+  { 0x1900, 0x2a3d, 0x0000 },
+  { 0x1900, 0x2a3f, 0x0000 },
+  { 0x9900, 0x2a50, 0x5000 },
+  { 0x9900, 0x2a48, 0x4000 },
+  { 0x9900, 0x2a44, 0x3000 },
+  { 0x9900, 0x2a42, 0x2000 },
+  { 0x1900, 0x2a41, 0x0000 },
+  { 0x1900, 0x2a43, 0x0000 },
+  { 0x9900, 0x2a46, 0x2000 },
+  { 0x1900, 0x2a45, 0x0000 },
+  { 0x1900, 0x2a47, 0x0000 },
+  { 0x9900, 0x2a4c, 0x3000 },
+  { 0x9900, 0x2a4a, 0x2000 },
+  { 0x1900, 0x2a49, 0x0000 },
+  { 0x1900, 0x2a4b, 0x0000 },
+  { 0x9900, 0x2a4e, 0x2000 },
+  { 0x1900, 0x2a4d, 0x0000 },
+  { 0x1900, 0x2a4f, 0x0000 },
+  { 0x9900, 0x2a58, 0x4000 },
+  { 0x9900, 0x2a54, 0x3000 },
+  { 0x9900, 0x2a52, 0x2000 },
+  { 0x1900, 0x2a51, 0x0000 },
+  { 0x1900, 0x2a53, 0x0000 },
+  { 0x9900, 0x2a56, 0x2000 },
+  { 0x1900, 0x2a55, 0x0000 },
+  { 0x1900, 0x2a57, 0x0000 },
+  { 0x9900, 0x2a5c, 0x3000 },
+  { 0x9900, 0x2a5a, 0x2000 },
+  { 0x1900, 0x2a59, 0x0000 },
+  { 0x1900, 0x2a5b, 0x0000 },
+  { 0x9900, 0x2a5e, 0x2000 },
+  { 0x1900, 0x2a5d, 0x0000 },
+  { 0x1900, 0x2a5f, 0x0000 },
+  { 0x9900, 0x2a80, 0x6000 },
+  { 0x9900, 0x2a70, 0x5000 },
+  { 0x9900, 0x2a68, 0x4000 },
+  { 0x9900, 0x2a64, 0x3000 },
+  { 0x9900, 0x2a62, 0x2000 },
+  { 0x1900, 0x2a61, 0x0000 },
+  { 0x1900, 0x2a63, 0x0000 },
+  { 0x9900, 0x2a66, 0x2000 },
+  { 0x1900, 0x2a65, 0x0000 },
+  { 0x1900, 0x2a67, 0x0000 },
+  { 0x9900, 0x2a6c, 0x3000 },
+  { 0x9900, 0x2a6a, 0x2000 },
+  { 0x1900, 0x2a69, 0x0000 },
+  { 0x1900, 0x2a6b, 0x0000 },
+  { 0x9900, 0x2a6e, 0x2000 },
+  { 0x1900, 0x2a6d, 0x0000 },
+  { 0x1900, 0x2a6f, 0x0000 },
+  { 0x9900, 0x2a78, 0x4000 },
+  { 0x9900, 0x2a74, 0x3000 },
+  { 0x9900, 0x2a72, 0x2000 },
+  { 0x1900, 0x2a71, 0x0000 },
+  { 0x1900, 0x2a73, 0x0000 },
+  { 0x9900, 0x2a76, 0x2000 },
+  { 0x1900, 0x2a75, 0x0000 },
+  { 0x1900, 0x2a77, 0x0000 },
+  { 0x9900, 0x2a7c, 0x3000 },
+  { 0x9900, 0x2a7a, 0x2000 },
+  { 0x1900, 0x2a79, 0x0000 },
+  { 0x1900, 0x2a7b, 0x0000 },
+  { 0x9900, 0x2a7e, 0x2000 },
+  { 0x1900, 0x2a7d, 0x0000 },
+  { 0x1900, 0x2a7f, 0x0000 },
+  { 0x9900, 0x2a90, 0x5000 },
+  { 0x9900, 0x2a88, 0x4000 },
+  { 0x9900, 0x2a84, 0x3000 },
+  { 0x9900, 0x2a82, 0x2000 },
+  { 0x1900, 0x2a81, 0x0000 },
+  { 0x1900, 0x2a83, 0x0000 },
+  { 0x9900, 0x2a86, 0x2000 },
+  { 0x1900, 0x2a85, 0x0000 },
+  { 0x1900, 0x2a87, 0x0000 },
+  { 0x9900, 0x2a8c, 0x3000 },
+  { 0x9900, 0x2a8a, 0x2000 },
+  { 0x1900, 0x2a89, 0x0000 },
+  { 0x1900, 0x2a8b, 0x0000 },
+  { 0x9900, 0x2a8e, 0x2000 },
+  { 0x1900, 0x2a8d, 0x0000 },
+  { 0x1900, 0x2a8f, 0x0000 },
+  { 0x9900, 0x2a98, 0x4000 },
+  { 0x9900, 0x2a94, 0x3000 },
+  { 0x9900, 0x2a92, 0x2000 },
+  { 0x1900, 0x2a91, 0x0000 },
+  { 0x1900, 0x2a93, 0x0000 },
+  { 0x9900, 0x2a96, 0x2000 },
+  { 0x1900, 0x2a95, 0x0000 },
+  { 0x1900, 0x2a97, 0x0000 },
+  { 0x9900, 0x2a9c, 0x3000 },
+  { 0x9900, 0x2a9a, 0x2000 },
+  { 0x1900, 0x2a99, 0x0000 },
+  { 0x1900, 0x2a9b, 0x0000 },
+  { 0x9900, 0x2a9e, 0x2000 },
+  { 0x1900, 0x2a9d, 0x0000 },
+  { 0x1900, 0x2a9f, 0x0000 },
+  { 0x9a00, 0x2e92, 0x8000 },
+  { 0x9900, 0x2ae0, 0x7000 },
+  { 0x9900, 0x2ac0, 0x6000 },
+  { 0x9900, 0x2ab0, 0x5000 },
+  { 0x9900, 0x2aa8, 0x4000 },
+  { 0x9900, 0x2aa4, 0x3000 },
+  { 0x9900, 0x2aa2, 0x2000 },
+  { 0x1900, 0x2aa1, 0x0000 },
+  { 0x1900, 0x2aa3, 0x0000 },
+  { 0x9900, 0x2aa6, 0x2000 },
+  { 0x1900, 0x2aa5, 0x0000 },
+  { 0x1900, 0x2aa7, 0x0000 },
+  { 0x9900, 0x2aac, 0x3000 },
+  { 0x9900, 0x2aaa, 0x2000 },
+  { 0x1900, 0x2aa9, 0x0000 },
+  { 0x1900, 0x2aab, 0x0000 },
+  { 0x9900, 0x2aae, 0x2000 },
+  { 0x1900, 0x2aad, 0x0000 },
+  { 0x1900, 0x2aaf, 0x0000 },
+  { 0x9900, 0x2ab8, 0x4000 },
+  { 0x9900, 0x2ab4, 0x3000 },
+  { 0x9900, 0x2ab2, 0x2000 },
+  { 0x1900, 0x2ab1, 0x0000 },
+  { 0x1900, 0x2ab3, 0x0000 },
+  { 0x9900, 0x2ab6, 0x2000 },
+  { 0x1900, 0x2ab5, 0x0000 },
+  { 0x1900, 0x2ab7, 0x0000 },
+  { 0x9900, 0x2abc, 0x3000 },
+  { 0x9900, 0x2aba, 0x2000 },
+  { 0x1900, 0x2ab9, 0x0000 },
+  { 0x1900, 0x2abb, 0x0000 },
+  { 0x9900, 0x2abe, 0x2000 },
+  { 0x1900, 0x2abd, 0x0000 },
+  { 0x1900, 0x2abf, 0x0000 },
+  { 0x9900, 0x2ad0, 0x5000 },
+  { 0x9900, 0x2ac8, 0x4000 },
+  { 0x9900, 0x2ac4, 0x3000 },
+  { 0x9900, 0x2ac2, 0x2000 },
+  { 0x1900, 0x2ac1, 0x0000 },
+  { 0x1900, 0x2ac3, 0x0000 },
+  { 0x9900, 0x2ac6, 0x2000 },
+  { 0x1900, 0x2ac5, 0x0000 },
+  { 0x1900, 0x2ac7, 0x0000 },
+  { 0x9900, 0x2acc, 0x3000 },
+  { 0x9900, 0x2aca, 0x2000 },
+  { 0x1900, 0x2ac9, 0x0000 },
+  { 0x1900, 0x2acb, 0x0000 },
+  { 0x9900, 0x2ace, 0x2000 },
+  { 0x1900, 0x2acd, 0x0000 },
+  { 0x1900, 0x2acf, 0x0000 },
+  { 0x9900, 0x2ad8, 0x4000 },
+  { 0x9900, 0x2ad4, 0x3000 },
+  { 0x9900, 0x2ad2, 0x2000 },
+  { 0x1900, 0x2ad1, 0x0000 },
+  { 0x1900, 0x2ad3, 0x0000 },
+  { 0x9900, 0x2ad6, 0x2000 },
+  { 0x1900, 0x2ad5, 0x0000 },
+  { 0x1900, 0x2ad7, 0x0000 },
+  { 0x9900, 0x2adc, 0x3000 },
+  { 0x9900, 0x2ada, 0x2000 },
+  { 0x1900, 0x2ad9, 0x0000 },
+  { 0x1900, 0x2adb, 0x0000 },
+  { 0x9900, 0x2ade, 0x2000 },
+  { 0x1900, 0x2add, 0x0000 },
+  { 0x1900, 0x2adf, 0x0000 },
+  { 0x9a00, 0x2b00, 0x6000 },
+  { 0x9900, 0x2af0, 0x5000 },
+  { 0x9900, 0x2ae8, 0x4000 },
+  { 0x9900, 0x2ae4, 0x3000 },
+  { 0x9900, 0x2ae2, 0x2000 },
+  { 0x1900, 0x2ae1, 0x0000 },
+  { 0x1900, 0x2ae3, 0x0000 },
+  { 0x9900, 0x2ae6, 0x2000 },
+  { 0x1900, 0x2ae5, 0x0000 },
+  { 0x1900, 0x2ae7, 0x0000 },
+  { 0x9900, 0x2aec, 0x3000 },
+  { 0x9900, 0x2aea, 0x2000 },
+  { 0x1900, 0x2ae9, 0x0000 },
+  { 0x1900, 0x2aeb, 0x0000 },
+  { 0x9900, 0x2aee, 0x2000 },
+  { 0x1900, 0x2aed, 0x0000 },
+  { 0x1900, 0x2aef, 0x0000 },
+  { 0x9900, 0x2af8, 0x4000 },
+  { 0x9900, 0x2af4, 0x3000 },
+  { 0x9900, 0x2af2, 0x2000 },
+  { 0x1900, 0x2af1, 0x0000 },
+  { 0x1900, 0x2af3, 0x0000 },
+  { 0x9900, 0x2af6, 0x2000 },
+  { 0x1900, 0x2af5, 0x0000 },
+  { 0x1900, 0x2af7, 0x0000 },
+  { 0x9900, 0x2afc, 0x3000 },
+  { 0x9900, 0x2afa, 0x2000 },
+  { 0x1900, 0x2af9, 0x0000 },
+  { 0x1900, 0x2afb, 0x0000 },
+  { 0x9900, 0x2afe, 0x2000 },
+  { 0x1900, 0x2afd, 0x0000 },
+  { 0x1900, 0x2aff, 0x0000 },
+  { 0x9a00, 0x2e82, 0x5000 },
+  { 0x9a00, 0x2b08, 0x4000 },
+  { 0x9a00, 0x2b04, 0x3000 },
+  { 0x9a00, 0x2b02, 0x2000 },
+  { 0x1a00, 0x2b01, 0x0000 },
+  { 0x1a00, 0x2b03, 0x0000 },
+  { 0x9a00, 0x2b06, 0x2000 },
+  { 0x1a00, 0x2b05, 0x0000 },
+  { 0x1a00, 0x2b07, 0x0000 },
+  { 0x9a00, 0x2b0c, 0x3000 },
+  { 0x9a00, 0x2b0a, 0x2000 },
+  { 0x1a00, 0x2b09, 0x0000 },
+  { 0x1a00, 0x2b0b, 0x0000 },
+  { 0x9a00, 0x2e80, 0x2000 },
+  { 0x1a00, 0x2b0d, 0x0000 },
+  { 0x1a00, 0x2e81, 0x0000 },
+  { 0x9a00, 0x2e8a, 0x4000 },
+  { 0x9a00, 0x2e86, 0x3000 },
+  { 0x9a00, 0x2e84, 0x2000 },
+  { 0x1a00, 0x2e83, 0x0000 },
+  { 0x1a00, 0x2e85, 0x0000 },
+  { 0x9a00, 0x2e88, 0x2000 },
+  { 0x1a00, 0x2e87, 0x0000 },
+  { 0x1a00, 0x2e89, 0x0000 },
+  { 0x9a00, 0x2e8e, 0x3000 },
+  { 0x9a00, 0x2e8c, 0x2000 },
+  { 0x1a00, 0x2e8b, 0x0000 },
+  { 0x1a00, 0x2e8d, 0x0000 },
+  { 0x9a00, 0x2e90, 0x2000 },
+  { 0x1a00, 0x2e8f, 0x0000 },
+  { 0x1a00, 0x2e91, 0x0000 },
+  { 0x9a00, 0x2ed3, 0x7000 },
+  { 0x9a00, 0x2eb3, 0x6000 },
+  { 0x9a00, 0x2ea3, 0x5000 },
+  { 0x9a00, 0x2e9b, 0x4000 },
+  { 0x9a00, 0x2e96, 0x3000 },
+  { 0x9a00, 0x2e94, 0x2000 },
+  { 0x1a00, 0x2e93, 0x0000 },
+  { 0x1a00, 0x2e95, 0x0000 },
+  { 0x9a00, 0x2e98, 0x2000 },
+  { 0x1a00, 0x2e97, 0x0000 },
+  { 0x1a00, 0x2e99, 0x0000 },
+  { 0x9a00, 0x2e9f, 0x3000 },
+  { 0x9a00, 0x2e9d, 0x2000 },
+  { 0x1a00, 0x2e9c, 0x0000 },
+  { 0x1a00, 0x2e9e, 0x0000 },
+  { 0x9a00, 0x2ea1, 0x2000 },
+  { 0x1a00, 0x2ea0, 0x0000 },
+  { 0x1a00, 0x2ea2, 0x0000 },
+  { 0x9a00, 0x2eab, 0x4000 },
+  { 0x9a00, 0x2ea7, 0x3000 },
+  { 0x9a00, 0x2ea5, 0x2000 },
+  { 0x1a00, 0x2ea4, 0x0000 },
+  { 0x1a00, 0x2ea6, 0x0000 },
+  { 0x9a00, 0x2ea9, 0x2000 },
+  { 0x1a00, 0x2ea8, 0x0000 },
+  { 0x1a00, 0x2eaa, 0x0000 },
+  { 0x9a00, 0x2eaf, 0x3000 },
+  { 0x9a00, 0x2ead, 0x2000 },
+  { 0x1a00, 0x2eac, 0x0000 },
+  { 0x1a00, 0x2eae, 0x0000 },
+  { 0x9a00, 0x2eb1, 0x2000 },
+  { 0x1a00, 0x2eb0, 0x0000 },
+  { 0x1a00, 0x2eb2, 0x0000 },
+  { 0x9a00, 0x2ec3, 0x5000 },
+  { 0x9a00, 0x2ebb, 0x4000 },
+  { 0x9a00, 0x2eb7, 0x3000 },
+  { 0x9a00, 0x2eb5, 0x2000 },
+  { 0x1a00, 0x2eb4, 0x0000 },
+  { 0x1a00, 0x2eb6, 0x0000 },
+  { 0x9a00, 0x2eb9, 0x2000 },
+  { 0x1a00, 0x2eb8, 0x0000 },
+  { 0x1a00, 0x2eba, 0x0000 },
+  { 0x9a00, 0x2ebf, 0x3000 },
+  { 0x9a00, 0x2ebd, 0x2000 },
+  { 0x1a00, 0x2ebc, 0x0000 },
+  { 0x1a00, 0x2ebe, 0x0000 },
+  { 0x9a00, 0x2ec1, 0x2000 },
+  { 0x1a00, 0x2ec0, 0x0000 },
+  { 0x1a00, 0x2ec2, 0x0000 },
+  { 0x9a00, 0x2ecb, 0x4000 },
+  { 0x9a00, 0x2ec7, 0x3000 },
+  { 0x9a00, 0x2ec5, 0x2000 },
+  { 0x1a00, 0x2ec4, 0x0000 },
+  { 0x1a00, 0x2ec6, 0x0000 },
+  { 0x9a00, 0x2ec9, 0x2000 },
+  { 0x1a00, 0x2ec8, 0x0000 },
+  { 0x1a00, 0x2eca, 0x0000 },
+  { 0x9a00, 0x2ecf, 0x3000 },
+  { 0x9a00, 0x2ecd, 0x2000 },
+  { 0x1a00, 0x2ecc, 0x0000 },
+  { 0x1a00, 0x2ece, 0x0000 },
+  { 0x9a00, 0x2ed1, 0x2000 },
+  { 0x1a00, 0x2ed0, 0x0000 },
+  { 0x1a00, 0x2ed2, 0x0000 },
+  { 0x9a00, 0x2ef3, 0x6000 },
+  { 0x9a00, 0x2ee3, 0x5000 },
+  { 0x9a00, 0x2edb, 0x4000 },
+  { 0x9a00, 0x2ed7, 0x3000 },
+  { 0x9a00, 0x2ed5, 0x2000 },
+  { 0x1a00, 0x2ed4, 0x0000 },
+  { 0x1a00, 0x2ed6, 0x0000 },
+  { 0x9a00, 0x2ed9, 0x2000 },
+  { 0x1a00, 0x2ed8, 0x0000 },
+  { 0x1a00, 0x2eda, 0x0000 },
+  { 0x9a00, 0x2edf, 0x3000 },
+  { 0x9a00, 0x2edd, 0x2000 },
+  { 0x1a00, 0x2edc, 0x0000 },
+  { 0x1a00, 0x2ede, 0x0000 },
+  { 0x9a00, 0x2ee1, 0x2000 },
+  { 0x1a00, 0x2ee0, 0x0000 },
+  { 0x1a00, 0x2ee2, 0x0000 },
+  { 0x9a00, 0x2eeb, 0x4000 },
+  { 0x9a00, 0x2ee7, 0x3000 },
+  { 0x9a00, 0x2ee5, 0x2000 },
+  { 0x1a00, 0x2ee4, 0x0000 },
+  { 0x1a00, 0x2ee6, 0x0000 },
+  { 0x9a00, 0x2ee9, 0x2000 },
+  { 0x1a00, 0x2ee8, 0x0000 },
+  { 0x1a00, 0x2eea, 0x0000 },
+  { 0x9a00, 0x2eef, 0x3000 },
+  { 0x9a00, 0x2eed, 0x2000 },
+  { 0x1a00, 0x2eec, 0x0000 },
+  { 0x1a00, 0x2eee, 0x0000 },
+  { 0x9a00, 0x2ef1, 0x2000 },
+  { 0x1a00, 0x2ef0, 0x0000 },
+  { 0x1a00, 0x2ef2, 0x0000 },
+  { 0x9a00, 0x2f0f, 0x5000 },
+  { 0x9a00, 0x2f07, 0x4000 },
+  { 0x9a00, 0x2f03, 0x3000 },
+  { 0x9a00, 0x2f01, 0x2000 },
+  { 0x1a00, 0x2f00, 0x0000 },
+  { 0x1a00, 0x2f02, 0x0000 },
+  { 0x9a00, 0x2f05, 0x2000 },
+  { 0x1a00, 0x2f04, 0x0000 },
+  { 0x1a00, 0x2f06, 0x0000 },
+  { 0x9a00, 0x2f0b, 0x3000 },
+  { 0x9a00, 0x2f09, 0x2000 },
+  { 0x1a00, 0x2f08, 0x0000 },
+  { 0x1a00, 0x2f0a, 0x0000 },
+  { 0x9a00, 0x2f0d, 0x2000 },
+  { 0x1a00, 0x2f0c, 0x0000 },
+  { 0x1a00, 0x2f0e, 0x0000 },
+  { 0x9a00, 0x2f17, 0x4000 },
+  { 0x9a00, 0x2f13, 0x3000 },
+  { 0x9a00, 0x2f11, 0x2000 },
+  { 0x1a00, 0x2f10, 0x0000 },
+  { 0x1a00, 0x2f12, 0x0000 },
+  { 0x9a00, 0x2f15, 0x2000 },
+  { 0x1a00, 0x2f14, 0x0000 },
+  { 0x1a00, 0x2f16, 0x0000 },
+  { 0x9a00, 0x2f1b, 0x3000 },
+  { 0x9a00, 0x2f19, 0x2000 },
+  { 0x1a00, 0x2f18, 0x0000 },
+  { 0x1a00, 0x2f1a, 0x0000 },
+  { 0x9a00, 0x2f1d, 0x2000 },
+  { 0x1a00, 0x2f1c, 0x0000 },
+  { 0x1a00, 0x2f1e, 0x0000 },
+  { 0x8701, 0x00f0, 0xd000 },
+  { 0x8700, 0xa34d, 0xc000 },
+  { 0x9a00, 0x3391, 0xb000 },
+  { 0x8700, 0x3149, 0xa000 },
+  { 0x9500, 0x303d, 0x9000 },
+  { 0x9a00, 0x2f9f, 0x8000 },
+  { 0x9a00, 0x2f5f, 0x7000 },
+  { 0x9a00, 0x2f3f, 0x6000 },
+  { 0x9a00, 0x2f2f, 0x5000 },
+  { 0x9a00, 0x2f27, 0x4000 },
+  { 0x9a00, 0x2f23, 0x3000 },
+  { 0x9a00, 0x2f21, 0x2000 },
+  { 0x1a00, 0x2f20, 0x0000 },
+  { 0x1a00, 0x2f22, 0x0000 },
+  { 0x9a00, 0x2f25, 0x2000 },
+  { 0x1a00, 0x2f24, 0x0000 },
+  { 0x1a00, 0x2f26, 0x0000 },
+  { 0x9a00, 0x2f2b, 0x3000 },
+  { 0x9a00, 0x2f29, 0x2000 },
+  { 0x1a00, 0x2f28, 0x0000 },
+  { 0x1a00, 0x2f2a, 0x0000 },
+  { 0x9a00, 0x2f2d, 0x2000 },
+  { 0x1a00, 0x2f2c, 0x0000 },
+  { 0x1a00, 0x2f2e, 0x0000 },
+  { 0x9a00, 0x2f37, 0x4000 },
+  { 0x9a00, 0x2f33, 0x3000 },
+  { 0x9a00, 0x2f31, 0x2000 },
+  { 0x1a00, 0x2f30, 0x0000 },
+  { 0x1a00, 0x2f32, 0x0000 },
+  { 0x9a00, 0x2f35, 0x2000 },
+  { 0x1a00, 0x2f34, 0x0000 },
+  { 0x1a00, 0x2f36, 0x0000 },
+  { 0x9a00, 0x2f3b, 0x3000 },
+  { 0x9a00, 0x2f39, 0x2000 },
+  { 0x1a00, 0x2f38, 0x0000 },
+  { 0x1a00, 0x2f3a, 0x0000 },
+  { 0x9a00, 0x2f3d, 0x2000 },
+  { 0x1a00, 0x2f3c, 0x0000 },
+  { 0x1a00, 0x2f3e, 0x0000 },
+  { 0x9a00, 0x2f4f, 0x5000 },
+  { 0x9a00, 0x2f47, 0x4000 },
+  { 0x9a00, 0x2f43, 0x3000 },
+  { 0x9a00, 0x2f41, 0x2000 },
+  { 0x1a00, 0x2f40, 0x0000 },
+  { 0x1a00, 0x2f42, 0x0000 },
+  { 0x9a00, 0x2f45, 0x2000 },
+  { 0x1a00, 0x2f44, 0x0000 },
+  { 0x1a00, 0x2f46, 0x0000 },
+  { 0x9a00, 0x2f4b, 0x3000 },
+  { 0x9a00, 0x2f49, 0x2000 },
+  { 0x1a00, 0x2f48, 0x0000 },
+  { 0x1a00, 0x2f4a, 0x0000 },
+  { 0x9a00, 0x2f4d, 0x2000 },
+  { 0x1a00, 0x2f4c, 0x0000 },
+  { 0x1a00, 0x2f4e, 0x0000 },
+  { 0x9a00, 0x2f57, 0x4000 },
+  { 0x9a00, 0x2f53, 0x3000 },
+  { 0x9a00, 0x2f51, 0x2000 },
+  { 0x1a00, 0x2f50, 0x0000 },
+  { 0x1a00, 0x2f52, 0x0000 },
+  { 0x9a00, 0x2f55, 0x2000 },
+  { 0x1a00, 0x2f54, 0x0000 },
+  { 0x1a00, 0x2f56, 0x0000 },
+  { 0x9a00, 0x2f5b, 0x3000 },
+  { 0x9a00, 0x2f59, 0x2000 },
+  { 0x1a00, 0x2f58, 0x0000 },
+  { 0x1a00, 0x2f5a, 0x0000 },
+  { 0x9a00, 0x2f5d, 0x2000 },
+  { 0x1a00, 0x2f5c, 0x0000 },
+  { 0x1a00, 0x2f5e, 0x0000 },
+  { 0x9a00, 0x2f7f, 0x6000 },
+  { 0x9a00, 0x2f6f, 0x5000 },
+  { 0x9a00, 0x2f67, 0x4000 },
+  { 0x9a00, 0x2f63, 0x3000 },
+  { 0x9a00, 0x2f61, 0x2000 },
+  { 0x1a00, 0x2f60, 0x0000 },
+  { 0x1a00, 0x2f62, 0x0000 },
+  { 0x9a00, 0x2f65, 0x2000 },
+  { 0x1a00, 0x2f64, 0x0000 },
+  { 0x1a00, 0x2f66, 0x0000 },
+  { 0x9a00, 0x2f6b, 0x3000 },
+  { 0x9a00, 0x2f69, 0x2000 },
+  { 0x1a00, 0x2f68, 0x0000 },
+  { 0x1a00, 0x2f6a, 0x0000 },
+  { 0x9a00, 0x2f6d, 0x2000 },
+  { 0x1a00, 0x2f6c, 0x0000 },
+  { 0x1a00, 0x2f6e, 0x0000 },
+  { 0x9a00, 0x2f77, 0x4000 },
+  { 0x9a00, 0x2f73, 0x3000 },
+  { 0x9a00, 0x2f71, 0x2000 },
+  { 0x1a00, 0x2f70, 0x0000 },
+  { 0x1a00, 0x2f72, 0x0000 },
+  { 0x9a00, 0x2f75, 0x2000 },
+  { 0x1a00, 0x2f74, 0x0000 },
+  { 0x1a00, 0x2f76, 0x0000 },
+  { 0x9a00, 0x2f7b, 0x3000 },
+  { 0x9a00, 0x2f79, 0x2000 },
+  { 0x1a00, 0x2f78, 0x0000 },
+  { 0x1a00, 0x2f7a, 0x0000 },
+  { 0x9a00, 0x2f7d, 0x2000 },
+  { 0x1a00, 0x2f7c, 0x0000 },
+  { 0x1a00, 0x2f7e, 0x0000 },
+  { 0x9a00, 0x2f8f, 0x5000 },
+  { 0x9a00, 0x2f87, 0x4000 },
+  { 0x9a00, 0x2f83, 0x3000 },
+  { 0x9a00, 0x2f81, 0x2000 },
+  { 0x1a00, 0x2f80, 0x0000 },
+  { 0x1a00, 0x2f82, 0x0000 },
+  { 0x9a00, 0x2f85, 0x2000 },
+  { 0x1a00, 0x2f84, 0x0000 },
+  { 0x1a00, 0x2f86, 0x0000 },
+  { 0x9a00, 0x2f8b, 0x3000 },
+  { 0x9a00, 0x2f89, 0x2000 },
+  { 0x1a00, 0x2f88, 0x0000 },
+  { 0x1a00, 0x2f8a, 0x0000 },
+  { 0x9a00, 0x2f8d, 0x2000 },
+  { 0x1a00, 0x2f8c, 0x0000 },
+  { 0x1a00, 0x2f8e, 0x0000 },
+  { 0x9a00, 0x2f97, 0x4000 },
+  { 0x9a00, 0x2f93, 0x3000 },
+  { 0x9a00, 0x2f91, 0x2000 },
+  { 0x1a00, 0x2f90, 0x0000 },
+  { 0x1a00, 0x2f92, 0x0000 },
+  { 0x9a00, 0x2f95, 0x2000 },
+  { 0x1a00, 0x2f94, 0x0000 },
+  { 0x1a00, 0x2f96, 0x0000 },
+  { 0x9a00, 0x2f9b, 0x3000 },
+  { 0x9a00, 0x2f99, 0x2000 },
+  { 0x1a00, 0x2f98, 0x0000 },
+  { 0x1a00, 0x2f9a, 0x0000 },
+  { 0x9a00, 0x2f9d, 0x2000 },
+  { 0x1a00, 0x2f9c, 0x0000 },
+  { 0x1a00, 0x2f9e, 0x0000 },
+  { 0x9a00, 0x2ff9, 0x7000 },
+  { 0x9a00, 0x2fbf, 0x6000 },
+  { 0x9a00, 0x2faf, 0x5000 },
+  { 0x9a00, 0x2fa7, 0x4000 },
+  { 0x9a00, 0x2fa3, 0x3000 },
+  { 0x9a00, 0x2fa1, 0x2000 },
+  { 0x1a00, 0x2fa0, 0x0000 },
+  { 0x1a00, 0x2fa2, 0x0000 },
+  { 0x9a00, 0x2fa5, 0x2000 },
+  { 0x1a00, 0x2fa4, 0x0000 },
+  { 0x1a00, 0x2fa6, 0x0000 },
+  { 0x9a00, 0x2fab, 0x3000 },
+  { 0x9a00, 0x2fa9, 0x2000 },
+  { 0x1a00, 0x2fa8, 0x0000 },
+  { 0x1a00, 0x2faa, 0x0000 },
+  { 0x9a00, 0x2fad, 0x2000 },
+  { 0x1a00, 0x2fac, 0x0000 },
+  { 0x1a00, 0x2fae, 0x0000 },
+  { 0x9a00, 0x2fb7, 0x4000 },
+  { 0x9a00, 0x2fb3, 0x3000 },
+  { 0x9a00, 0x2fb1, 0x2000 },
+  { 0x1a00, 0x2fb0, 0x0000 },
+  { 0x1a00, 0x2fb2, 0x0000 },
+  { 0x9a00, 0x2fb5, 0x2000 },
+  { 0x1a00, 0x2fb4, 0x0000 },
+  { 0x1a00, 0x2fb6, 0x0000 },
+  { 0x9a00, 0x2fbb, 0x3000 },
+  { 0x9a00, 0x2fb9, 0x2000 },
+  { 0x1a00, 0x2fb8, 0x0000 },
+  { 0x1a00, 0x2fba, 0x0000 },
+  { 0x9a00, 0x2fbd, 0x2000 },
+  { 0x1a00, 0x2fbc, 0x0000 },
+  { 0x1a00, 0x2fbe, 0x0000 },
+  { 0x9a00, 0x2fcf, 0x5000 },
+  { 0x9a00, 0x2fc7, 0x4000 },
+  { 0x9a00, 0x2fc3, 0x3000 },
+  { 0x9a00, 0x2fc1, 0x2000 },
+  { 0x1a00, 0x2fc0, 0x0000 },
+  { 0x1a00, 0x2fc2, 0x0000 },
+  { 0x9a00, 0x2fc5, 0x2000 },
+  { 0x1a00, 0x2fc4, 0x0000 },
+  { 0x1a00, 0x2fc6, 0x0000 },
+  { 0x9a00, 0x2fcb, 0x3000 },
+  { 0x9a00, 0x2fc9, 0x2000 },
+  { 0x1a00, 0x2fc8, 0x0000 },
+  { 0x1a00, 0x2fca, 0x0000 },
+  { 0x9a00, 0x2fcd, 0x2000 },
+  { 0x1a00, 0x2fcc, 0x0000 },
+  { 0x1a00, 0x2fce, 0x0000 },
+  { 0x9a00, 0x2ff1, 0x4000 },
+  { 0x9a00, 0x2fd3, 0x3000 },
+  { 0x9a00, 0x2fd1, 0x2000 },
+  { 0x1a00, 0x2fd0, 0x0000 },
+  { 0x1a00, 0x2fd2, 0x0000 },
+  { 0x9a00, 0x2fd5, 0x2000 },
+  { 0x1a00, 0x2fd4, 0x0000 },
+  { 0x1a00, 0x2ff0, 0x0000 },
+  { 0x9a00, 0x2ff5, 0x3000 },
+  { 0x9a00, 0x2ff3, 0x2000 },
+  { 0x1a00, 0x2ff2, 0x0000 },
+  { 0x1a00, 0x2ff4, 0x0000 },
+  { 0x9a00, 0x2ff7, 0x2000 },
+  { 0x1a00, 0x2ff6, 0x0000 },
+  { 0x1a00, 0x2ff8, 0x0000 },
+  { 0x9600, 0x301d, 0x6000 },
+  { 0x9200, 0x300d, 0x5000 },
+  { 0x8600, 0x3005, 0x4000 },
+  { 0x9500, 0x3001, 0x3000 },
+  { 0x9a00, 0x2ffb, 0x2000 },
+  { 0x1a00, 0x2ffa, 0x0000 },
+  { 0x1d00, 0x3000, 0x0000 },
+  { 0x9500, 0x3003, 0x2000 },
+  { 0x1500, 0x3002, 0x0000 },
+  { 0x1a00, 0x3004, 0x0000 },
+  { 0x9200, 0x3009, 0x3000 },
+  { 0x8e00, 0x3007, 0x2000 },
+  { 0x0700, 0x3006, 0x0000 },
+  { 0x1600, 0x3008, 0x0000 },
+  { 0x9200, 0x300b, 0x2000 },
+  { 0x1600, 0x300a, 0x0000 },
+  { 0x1600, 0x300c, 0x0000 },
+  { 0x9200, 0x3015, 0x4000 },
+  { 0x9200, 0x3011, 0x3000 },
+  { 0x9200, 0x300f, 0x2000 },
+  { 0x1600, 0x300e, 0x0000 },
+  { 0x1600, 0x3010, 0x0000 },
+  { 0x9a00, 0x3013, 0x2000 },
+  { 0x1a00, 0x3012, 0x0000 },
+  { 0x1600, 0x3014, 0x0000 },
+  { 0x9200, 0x3019, 0x3000 },
+  { 0x9200, 0x3017, 0x2000 },
+  { 0x1600, 0x3016, 0x0000 },
+  { 0x1600, 0x3018, 0x0000 },
+  { 0x9200, 0x301b, 0x2000 },
+  { 0x1600, 0x301a, 0x0000 },
+  { 0x1100, 0x301c, 0x0000 },
+  { 0x8c00, 0x302d, 0x5000 },
+  { 0x8e00, 0x3025, 0x4000 },
+  { 0x8e00, 0x3021, 0x3000 },
+  { 0x9200, 0x301f, 0x2000 },
+  { 0x1200, 0x301e, 0x0000 },
+  { 0x1a00, 0x3020, 0x0000 },
+  { 0x8e00, 0x3023, 0x2000 },
+  { 0x0e00, 0x3022, 0x0000 },
+  { 0x0e00, 0x3024, 0x0000 },
+  { 0x8e00, 0x3029, 0x3000 },
+  { 0x8e00, 0x3027, 0x2000 },
+  { 0x0e00, 0x3026, 0x0000 },
+  { 0x0e00, 0x3028, 0x0000 },
+  { 0x8c00, 0x302b, 0x2000 },
+  { 0x0c00, 0x302a, 0x0000 },
+  { 0x0c00, 0x302c, 0x0000 },
+  { 0x8600, 0x3035, 0x4000 },
+  { 0x8600, 0x3031, 0x3000 },
+  { 0x8c00, 0x302f, 0x2000 },
+  { 0x0c00, 0x302e, 0x0000 },
+  { 0x1100, 0x3030, 0x0000 },
+  { 0x8600, 0x3033, 0x2000 },
+  { 0x0600, 0x3032, 0x0000 },
+  { 0x0600, 0x3034, 0x0000 },
+  { 0x8e00, 0x3039, 0x3000 },
+  { 0x9a00, 0x3037, 0x2000 },
+  { 0x1a00, 0x3036, 0x0000 },
+  { 0x0e00, 0x3038, 0x0000 },
+  { 0x8600, 0x303b, 0x2000 },
+  { 0x0e00, 0x303a, 0x0000 },
+  { 0x0700, 0x303c, 0x0000 },
+  { 0x8700, 0x30c0, 0x8000 },
+  { 0x8700, 0x307e, 0x7000 },
+  { 0x8700, 0x305e, 0x6000 },
+  { 0x8700, 0x304e, 0x5000 },
+  { 0x8700, 0x3046, 0x4000 },
+  { 0x8700, 0x3042, 0x3000 },
+  { 0x9a00, 0x303f, 0x2000 },
+  { 0x1a00, 0x303e, 0x0000 },
+  { 0x0700, 0x3041, 0x0000 },
+  { 0x8700, 0x3044, 0x2000 },
+  { 0x0700, 0x3043, 0x0000 },
+  { 0x0700, 0x3045, 0x0000 },
+  { 0x8700, 0x304a, 0x3000 },
+  { 0x8700, 0x3048, 0x2000 },
+  { 0x0700, 0x3047, 0x0000 },
+  { 0x0700, 0x3049, 0x0000 },
+  { 0x8700, 0x304c, 0x2000 },
+  { 0x0700, 0x304b, 0x0000 },
+  { 0x0700, 0x304d, 0x0000 },
+  { 0x8700, 0x3056, 0x4000 },
+  { 0x8700, 0x3052, 0x3000 },
+  { 0x8700, 0x3050, 0x2000 },
+  { 0x0700, 0x304f, 0x0000 },
+  { 0x0700, 0x3051, 0x0000 },
+  { 0x8700, 0x3054, 0x2000 },
+  { 0x0700, 0x3053, 0x0000 },
+  { 0x0700, 0x3055, 0x0000 },
+  { 0x8700, 0x305a, 0x3000 },
+  { 0x8700, 0x3058, 0x2000 },
+  { 0x0700, 0x3057, 0x0000 },
+  { 0x0700, 0x3059, 0x0000 },
+  { 0x8700, 0x305c, 0x2000 },
+  { 0x0700, 0x305b, 0x0000 },
+  { 0x0700, 0x305d, 0x0000 },
+  { 0x8700, 0x306e, 0x5000 },
+  { 0x8700, 0x3066, 0x4000 },
+  { 0x8700, 0x3062, 0x3000 },
+  { 0x8700, 0x3060, 0x2000 },
+  { 0x0700, 0x305f, 0x0000 },
+  { 0x0700, 0x3061, 0x0000 },
+  { 0x8700, 0x3064, 0x2000 },
+  { 0x0700, 0x3063, 0x0000 },
+  { 0x0700, 0x3065, 0x0000 },
+  { 0x8700, 0x306a, 0x3000 },
+  { 0x8700, 0x3068, 0x2000 },
+  { 0x0700, 0x3067, 0x0000 },
+  { 0x0700, 0x3069, 0x0000 },
+  { 0x8700, 0x306c, 0x2000 },
+  { 0x0700, 0x306b, 0x0000 },
+  { 0x0700, 0x306d, 0x0000 },
+  { 0x8700, 0x3076, 0x4000 },
+  { 0x8700, 0x3072, 0x3000 },
+  { 0x8700, 0x3070, 0x2000 },
+  { 0x0700, 0x306f, 0x0000 },
+  { 0x0700, 0x3071, 0x0000 },
+  { 0x8700, 0x3074, 0x2000 },
+  { 0x0700, 0x3073, 0x0000 },
+  { 0x0700, 0x3075, 0x0000 },
+  { 0x8700, 0x307a, 0x3000 },
+  { 0x8700, 0x3078, 0x2000 },
+  { 0x0700, 0x3077, 0x0000 },
+  { 0x0700, 0x3079, 0x0000 },
+  { 0x8700, 0x307c, 0x2000 },
+  { 0x0700, 0x307b, 0x0000 },
+  { 0x0700, 0x307d, 0x0000 },
+  { 0x9100, 0x30a0, 0x6000 },
+  { 0x8700, 0x308e, 0x5000 },
+  { 0x8700, 0x3086, 0x4000 },
+  { 0x8700, 0x3082, 0x3000 },
+  { 0x8700, 0x3080, 0x2000 },
+  { 0x0700, 0x307f, 0x0000 },
+  { 0x0700, 0x3081, 0x0000 },
+  { 0x8700, 0x3084, 0x2000 },
+  { 0x0700, 0x3083, 0x0000 },
+  { 0x0700, 0x3085, 0x0000 },
+  { 0x8700, 0x308a, 0x3000 },
+  { 0x8700, 0x3088, 0x2000 },
+  { 0x0700, 0x3087, 0x0000 },
+  { 0x0700, 0x3089, 0x0000 },
+  { 0x8700, 0x308c, 0x2000 },
+  { 0x0700, 0x308b, 0x0000 },
+  { 0x0700, 0x308d, 0x0000 },
+  { 0x8700, 0x3096, 0x4000 },
+  { 0x8700, 0x3092, 0x3000 },
+  { 0x8700, 0x3090, 0x2000 },
+  { 0x0700, 0x308f, 0x0000 },
+  { 0x0700, 0x3091, 0x0000 },
+  { 0x8700, 0x3094, 0x2000 },
+  { 0x0700, 0x3093, 0x0000 },
+  { 0x0700, 0x3095, 0x0000 },
+  { 0x9800, 0x309c, 0x3000 },
+  { 0x8c00, 0x309a, 0x2000 },
+  { 0x0c00, 0x3099, 0x0000 },
+  { 0x1800, 0x309b, 0x0000 },
+  { 0x8600, 0x309e, 0x2000 },
+  { 0x0600, 0x309d, 0x0000 },
+  { 0x0700, 0x309f, 0x0000 },
+  { 0x8700, 0x30b0, 0x5000 },
+  { 0x8700, 0x30a8, 0x4000 },
+  { 0x8700, 0x30a4, 0x3000 },
+  { 0x8700, 0x30a2, 0x2000 },
+  { 0x0700, 0x30a1, 0x0000 },
+  { 0x0700, 0x30a3, 0x0000 },
+  { 0x8700, 0x30a6, 0x2000 },
+  { 0x0700, 0x30a5, 0x0000 },
+  { 0x0700, 0x30a7, 0x0000 },
+  { 0x8700, 0x30ac, 0x3000 },
+  { 0x8700, 0x30aa, 0x2000 },
+  { 0x0700, 0x30a9, 0x0000 },
+  { 0x0700, 0x30ab, 0x0000 },
+  { 0x8700, 0x30ae, 0x2000 },
+  { 0x0700, 0x30ad, 0x0000 },
+  { 0x0700, 0x30af, 0x0000 },
+  { 0x8700, 0x30b8, 0x4000 },
+  { 0x8700, 0x30b4, 0x3000 },
+  { 0x8700, 0x30b2, 0x2000 },
+  { 0x0700, 0x30b1, 0x0000 },
+  { 0x0700, 0x30b3, 0x0000 },
+  { 0x8700, 0x30b6, 0x2000 },
+  { 0x0700, 0x30b5, 0x0000 },
+  { 0x0700, 0x30b7, 0x0000 },
+  { 0x8700, 0x30bc, 0x3000 },
+  { 0x8700, 0x30ba, 0x2000 },
+  { 0x0700, 0x30b9, 0x0000 },
+  { 0x0700, 0x30bb, 0x0000 },
+  { 0x8700, 0x30be, 0x2000 },
+  { 0x0700, 0x30bd, 0x0000 },
+  { 0x0700, 0x30bf, 0x0000 },
+  { 0x8700, 0x3105, 0x7000 },
+  { 0x8700, 0x30e0, 0x6000 },
+  { 0x8700, 0x30d0, 0x5000 },
+  { 0x8700, 0x30c8, 0x4000 },
+  { 0x8700, 0x30c4, 0x3000 },
+  { 0x8700, 0x30c2, 0x2000 },
+  { 0x0700, 0x30c1, 0x0000 },
+  { 0x0700, 0x30c3, 0x0000 },
+  { 0x8700, 0x30c6, 0x2000 },
+  { 0x0700, 0x30c5, 0x0000 },
+  { 0x0700, 0x30c7, 0x0000 },
+  { 0x8700, 0x30cc, 0x3000 },
+  { 0x8700, 0x30ca, 0x2000 },
+  { 0x0700, 0x30c9, 0x0000 },
+  { 0x0700, 0x30cb, 0x0000 },
+  { 0x8700, 0x30ce, 0x2000 },
+  { 0x0700, 0x30cd, 0x0000 },
+  { 0x0700, 0x30cf, 0x0000 },
+  { 0x8700, 0x30d8, 0x4000 },
+  { 0x8700, 0x30d4, 0x3000 },
+  { 0x8700, 0x30d2, 0x2000 },
+  { 0x0700, 0x30d1, 0x0000 },
+  { 0x0700, 0x30d3, 0x0000 },
+  { 0x8700, 0x30d6, 0x2000 },
+  { 0x0700, 0x30d5, 0x0000 },
+  { 0x0700, 0x30d7, 0x0000 },
+  { 0x8700, 0x30dc, 0x3000 },
+  { 0x8700, 0x30da, 0x2000 },
+  { 0x0700, 0x30d9, 0x0000 },
+  { 0x0700, 0x30db, 0x0000 },
+  { 0x8700, 0x30de, 0x2000 },
+  { 0x0700, 0x30dd, 0x0000 },
+  { 0x0700, 0x30df, 0x0000 },
+  { 0x8700, 0x30f0, 0x5000 },
+  { 0x8700, 0x30e8, 0x4000 },
+  { 0x8700, 0x30e4, 0x3000 },
+  { 0x8700, 0x30e2, 0x2000 },
+  { 0x0700, 0x30e1, 0x0000 },
+  { 0x0700, 0x30e3, 0x0000 },
+  { 0x8700, 0x30e6, 0x2000 },
+  { 0x0700, 0x30e5, 0x0000 },
+  { 0x0700, 0x30e7, 0x0000 },
+  { 0x8700, 0x30ec, 0x3000 },
+  { 0x8700, 0x30ea, 0x2000 },
+  { 0x0700, 0x30e9, 0x0000 },
+  { 0x0700, 0x30eb, 0x0000 },
+  { 0x8700, 0x30ee, 0x2000 },
+  { 0x0700, 0x30ed, 0x0000 },
+  { 0x0700, 0x30ef, 0x0000 },
+  { 0x8700, 0x30f8, 0x4000 },
+  { 0x8700, 0x30f4, 0x3000 },
+  { 0x8700, 0x30f2, 0x2000 },
+  { 0x0700, 0x30f1, 0x0000 },
+  { 0x0700, 0x30f3, 0x0000 },
+  { 0x8700, 0x30f6, 0x2000 },
+  { 0x0700, 0x30f5, 0x0000 },
+  { 0x0700, 0x30f7, 0x0000 },
+  { 0x8600, 0x30fc, 0x3000 },
+  { 0x8700, 0x30fa, 0x2000 },
+  { 0x0700, 0x30f9, 0x0000 },
+  { 0x1000, 0x30fb, 0x0000 },
+  { 0x8600, 0x30fe, 0x2000 },
+  { 0x0600, 0x30fd, 0x0000 },
+  { 0x0700, 0x30ff, 0x0000 },
+  { 0x8700, 0x3125, 0x6000 },
+  { 0x8700, 0x3115, 0x5000 },
+  { 0x8700, 0x310d, 0x4000 },
+  { 0x8700, 0x3109, 0x3000 },
+  { 0x8700, 0x3107, 0x2000 },
+  { 0x0700, 0x3106, 0x0000 },
+  { 0x0700, 0x3108, 0x0000 },
+  { 0x8700, 0x310b, 0x2000 },
+  { 0x0700, 0x310a, 0x0000 },
+  { 0x0700, 0x310c, 0x0000 },
+  { 0x8700, 0x3111, 0x3000 },
+  { 0x8700, 0x310f, 0x2000 },
+  { 0x0700, 0x310e, 0x0000 },
+  { 0x0700, 0x3110, 0x0000 },
+  { 0x8700, 0x3113, 0x2000 },
+  { 0x0700, 0x3112, 0x0000 },
+  { 0x0700, 0x3114, 0x0000 },
+  { 0x8700, 0x311d, 0x4000 },
+  { 0x8700, 0x3119, 0x3000 },
+  { 0x8700, 0x3117, 0x2000 },
+  { 0x0700, 0x3116, 0x0000 },
+  { 0x0700, 0x3118, 0x0000 },
+  { 0x8700, 0x311b, 0x2000 },
+  { 0x0700, 0x311a, 0x0000 },
+  { 0x0700, 0x311c, 0x0000 },
+  { 0x8700, 0x3121, 0x3000 },
+  { 0x8700, 0x311f, 0x2000 },
+  { 0x0700, 0x311e, 0x0000 },
+  { 0x0700, 0x3120, 0x0000 },
+  { 0x8700, 0x3123, 0x2000 },
+  { 0x0700, 0x3122, 0x0000 },
+  { 0x0700, 0x3124, 0x0000 },
+  { 0x8700, 0x3139, 0x5000 },
+  { 0x8700, 0x3131, 0x4000 },
+  { 0x8700, 0x3129, 0x3000 },
+  { 0x8700, 0x3127, 0x2000 },
+  { 0x0700, 0x3126, 0x0000 },
+  { 0x0700, 0x3128, 0x0000 },
+  { 0x8700, 0x312b, 0x2000 },
+  { 0x0700, 0x312a, 0x0000 },
+  { 0x0700, 0x312c, 0x0000 },
+  { 0x8700, 0x3135, 0x3000 },
+  { 0x8700, 0x3133, 0x2000 },
+  { 0x0700, 0x3132, 0x0000 },
+  { 0x0700, 0x3134, 0x0000 },
+  { 0x8700, 0x3137, 0x2000 },
+  { 0x0700, 0x3136, 0x0000 },
+  { 0x0700, 0x3138, 0x0000 },
+  { 0x8700, 0x3141, 0x4000 },
+  { 0x8700, 0x313d, 0x3000 },
+  { 0x8700, 0x313b, 0x2000 },
+  { 0x0700, 0x313a, 0x0000 },
+  { 0x0700, 0x313c, 0x0000 },
+  { 0x8700, 0x313f, 0x2000 },
+  { 0x0700, 0x313e, 0x0000 },
+  { 0x0700, 0x3140, 0x0000 },
+  { 0x8700, 0x3145, 0x3000 },
+  { 0x8700, 0x3143, 0x2000 },
+  { 0x0700, 0x3142, 0x0000 },
+  { 0x0700, 0x3144, 0x0000 },
+  { 0x8700, 0x3147, 0x2000 },
+  { 0x0700, 0x3146, 0x0000 },
+  { 0x0700, 0x3148, 0x0000 },
+  { 0x9a00, 0x3290, 0x9000 },
+  { 0x9a00, 0x3202, 0x8000 },
+  { 0x8700, 0x3189, 0x7000 },
+  { 0x8700, 0x3169, 0x6000 },
+  { 0x8700, 0x3159, 0x5000 },
+  { 0x8700, 0x3151, 0x4000 },
+  { 0x8700, 0x314d, 0x3000 },
+  { 0x8700, 0x314b, 0x2000 },
+  { 0x0700, 0x314a, 0x0000 },
+  { 0x0700, 0x314c, 0x0000 },
+  { 0x8700, 0x314f, 0x2000 },
+  { 0x0700, 0x314e, 0x0000 },
+  { 0x0700, 0x3150, 0x0000 },
+  { 0x8700, 0x3155, 0x3000 },
+  { 0x8700, 0x3153, 0x2000 },
+  { 0x0700, 0x3152, 0x0000 },
+  { 0x0700, 0x3154, 0x0000 },
+  { 0x8700, 0x3157, 0x2000 },
+  { 0x0700, 0x3156, 0x0000 },
+  { 0x0700, 0x3158, 0x0000 },
+  { 0x8700, 0x3161, 0x4000 },
+  { 0x8700, 0x315d, 0x3000 },
+  { 0x8700, 0x315b, 0x2000 },
+  { 0x0700, 0x315a, 0x0000 },
+  { 0x0700, 0x315c, 0x0000 },
+  { 0x8700, 0x315f, 0x2000 },
+  { 0x0700, 0x315e, 0x0000 },
+  { 0x0700, 0x3160, 0x0000 },
+  { 0x8700, 0x3165, 0x3000 },
+  { 0x8700, 0x3163, 0x2000 },
+  { 0x0700, 0x3162, 0x0000 },
+  { 0x0700, 0x3164, 0x0000 },
+  { 0x8700, 0x3167, 0x2000 },
+  { 0x0700, 0x3166, 0x0000 },
+  { 0x0700, 0x3168, 0x0000 },
+  { 0x8700, 0x3179, 0x5000 },
+  { 0x8700, 0x3171, 0x4000 },
+  { 0x8700, 0x316d, 0x3000 },
+  { 0x8700, 0x316b, 0x2000 },
+  { 0x0700, 0x316a, 0x0000 },
+  { 0x0700, 0x316c, 0x0000 },
+  { 0x8700, 0x316f, 0x2000 },
+  { 0x0700, 0x316e, 0x0000 },
+  { 0x0700, 0x3170, 0x0000 },
+  { 0x8700, 0x3175, 0x3000 },
+  { 0x8700, 0x3173, 0x2000 },
+  { 0x0700, 0x3172, 0x0000 },
+  { 0x0700, 0x3174, 0x0000 },
+  { 0x8700, 0x3177, 0x2000 },
+  { 0x0700, 0x3176, 0x0000 },
+  { 0x0700, 0x3178, 0x0000 },
+  { 0x8700, 0x3181, 0x4000 },
+  { 0x8700, 0x317d, 0x3000 },
+  { 0x8700, 0x317b, 0x2000 },
+  { 0x0700, 0x317a, 0x0000 },
+  { 0x0700, 0x317c, 0x0000 },
+  { 0x8700, 0x317f, 0x2000 },
+  { 0x0700, 0x317e, 0x0000 },
+  { 0x0700, 0x3180, 0x0000 },
+  { 0x8700, 0x3185, 0x3000 },
+  { 0x8700, 0x3183, 0x2000 },
+  { 0x0700, 0x3182, 0x0000 },
+  { 0x0700, 0x3184, 0x0000 },
+  { 0x8700, 0x3187, 0x2000 },
+  { 0x0700, 0x3186, 0x0000 },
+  { 0x0700, 0x3188, 0x0000 },
+  { 0x8700, 0x31aa, 0x6000 },
+  { 0x9a00, 0x319a, 0x5000 },
+  { 0x8f00, 0x3192, 0x4000 },
+  { 0x8700, 0x318d, 0x3000 },
+  { 0x8700, 0x318b, 0x2000 },
+  { 0x0700, 0x318a, 0x0000 },
+  { 0x0700, 0x318c, 0x0000 },
+  { 0x9a00, 0x3190, 0x2000 },
+  { 0x0700, 0x318e, 0x0000 },
+  { 0x1a00, 0x3191, 0x0000 },
+  { 0x9a00, 0x3196, 0x3000 },
+  { 0x8f00, 0x3194, 0x2000 },
+  { 0x0f00, 0x3193, 0x0000 },
+  { 0x0f00, 0x3195, 0x0000 },
+  { 0x9a00, 0x3198, 0x2000 },
+  { 0x1a00, 0x3197, 0x0000 },
+  { 0x1a00, 0x3199, 0x0000 },
+  { 0x8700, 0x31a2, 0x4000 },
+  { 0x9a00, 0x319e, 0x3000 },
+  { 0x9a00, 0x319c, 0x2000 },
+  { 0x1a00, 0x319b, 0x0000 },
+  { 0x1a00, 0x319d, 0x0000 },
+  { 0x8700, 0x31a0, 0x2000 },
+  { 0x1a00, 0x319f, 0x0000 },
+  { 0x0700, 0x31a1, 0x0000 },
+  { 0x8700, 0x31a6, 0x3000 },
+  { 0x8700, 0x31a4, 0x2000 },
+  { 0x0700, 0x31a3, 0x0000 },
+  { 0x0700, 0x31a5, 0x0000 },
+  { 0x8700, 0x31a8, 0x2000 },
+  { 0x0700, 0x31a7, 0x0000 },
+  { 0x0700, 0x31a9, 0x0000 },
+  { 0x8700, 0x31f2, 0x5000 },
+  { 0x8700, 0x31b2, 0x4000 },
+  { 0x8700, 0x31ae, 0x3000 },
+  { 0x8700, 0x31ac, 0x2000 },
+  { 0x0700, 0x31ab, 0x0000 },
+  { 0x0700, 0x31ad, 0x0000 },
+  { 0x8700, 0x31b0, 0x2000 },
+  { 0x0700, 0x31af, 0x0000 },
+  { 0x0700, 0x31b1, 0x0000 },
+  { 0x8700, 0x31b6, 0x3000 },
+  { 0x8700, 0x31b4, 0x2000 },
+  { 0x0700, 0x31b3, 0x0000 },
+  { 0x0700, 0x31b5, 0x0000 },
+  { 0x8700, 0x31f0, 0x2000 },
+  { 0x0700, 0x31b7, 0x0000 },
+  { 0x0700, 0x31f1, 0x0000 },
+  { 0x8700, 0x31fa, 0x4000 },
+  { 0x8700, 0x31f6, 0x3000 },
+  { 0x8700, 0x31f4, 0x2000 },
+  { 0x0700, 0x31f3, 0x0000 },
+  { 0x0700, 0x31f5, 0x0000 },
+  { 0x8700, 0x31f8, 0x2000 },
+  { 0x0700, 0x31f7, 0x0000 },
+  { 0x0700, 0x31f9, 0x0000 },
+  { 0x8700, 0x31fe, 0x3000 },
+  { 0x8700, 0x31fc, 0x2000 },
+  { 0x0700, 0x31fb, 0x0000 },
+  { 0x0700, 0x31fd, 0x0000 },
+  { 0x9a00, 0x3200, 0x2000 },
+  { 0x0700, 0x31ff, 0x0000 },
+  { 0x1a00, 0x3201, 0x0000 },
+  { 0x9a00, 0x3243, 0x7000 },
+  { 0x8f00, 0x3223, 0x6000 },
+  { 0x9a00, 0x3212, 0x5000 },
+  { 0x9a00, 0x320a, 0x4000 },
+  { 0x9a00, 0x3206, 0x3000 },
+  { 0x9a00, 0x3204, 0x2000 },
+  { 0x1a00, 0x3203, 0x0000 },
+  { 0x1a00, 0x3205, 0x0000 },
+  { 0x9a00, 0x3208, 0x2000 },
+  { 0x1a00, 0x3207, 0x0000 },
+  { 0x1a00, 0x3209, 0x0000 },
+  { 0x9a00, 0x320e, 0x3000 },
+  { 0x9a00, 0x320c, 0x2000 },
+  { 0x1a00, 0x320b, 0x0000 },
+  { 0x1a00, 0x320d, 0x0000 },
+  { 0x9a00, 0x3210, 0x2000 },
+  { 0x1a00, 0x320f, 0x0000 },
+  { 0x1a00, 0x3211, 0x0000 },
+  { 0x9a00, 0x321a, 0x4000 },
+  { 0x9a00, 0x3216, 0x3000 },
+  { 0x9a00, 0x3214, 0x2000 },
+  { 0x1a00, 0x3213, 0x0000 },
+  { 0x1a00, 0x3215, 0x0000 },
+  { 0x9a00, 0x3218, 0x2000 },
+  { 0x1a00, 0x3217, 0x0000 },
+  { 0x1a00, 0x3219, 0x0000 },
+  { 0x9a00, 0x321e, 0x3000 },
+  { 0x9a00, 0x321c, 0x2000 },
+  { 0x1a00, 0x321b, 0x0000 },
+  { 0x1a00, 0x321d, 0x0000 },
+  { 0x8f00, 0x3221, 0x2000 },
+  { 0x0f00, 0x3220, 0x0000 },
+  { 0x0f00, 0x3222, 0x0000 },
+  { 0x9a00, 0x3233, 0x5000 },
+  { 0x9a00, 0x322b, 0x4000 },
+  { 0x8f00, 0x3227, 0x3000 },
+  { 0x8f00, 0x3225, 0x2000 },
+  { 0x0f00, 0x3224, 0x0000 },
+  { 0x0f00, 0x3226, 0x0000 },
+  { 0x8f00, 0x3229, 0x2000 },
+  { 0x0f00, 0x3228, 0x0000 },
+  { 0x1a00, 0x322a, 0x0000 },
+  { 0x9a00, 0x322f, 0x3000 },
+  { 0x9a00, 0x322d, 0x2000 },
+  { 0x1a00, 0x322c, 0x0000 },
+  { 0x1a00, 0x322e, 0x0000 },
+  { 0x9a00, 0x3231, 0x2000 },
+  { 0x1a00, 0x3230, 0x0000 },
+  { 0x1a00, 0x3232, 0x0000 },
+  { 0x9a00, 0x323b, 0x4000 },
+  { 0x9a00, 0x3237, 0x3000 },
+  { 0x9a00, 0x3235, 0x2000 },
+  { 0x1a00, 0x3234, 0x0000 },
+  { 0x1a00, 0x3236, 0x0000 },
+  { 0x9a00, 0x3239, 0x2000 },
+  { 0x1a00, 0x3238, 0x0000 },
+  { 0x1a00, 0x323a, 0x0000 },
+  { 0x9a00, 0x323f, 0x3000 },
+  { 0x9a00, 0x323d, 0x2000 },
+  { 0x1a00, 0x323c, 0x0000 },
+  { 0x1a00, 0x323e, 0x0000 },
+  { 0x9a00, 0x3241, 0x2000 },
+  { 0x1a00, 0x3240, 0x0000 },
+  { 0x1a00, 0x3242, 0x0000 },
+  { 0x9a00, 0x326f, 0x6000 },
+  { 0x8f00, 0x325f, 0x5000 },
+  { 0x8f00, 0x3257, 0x4000 },
+  { 0x8f00, 0x3253, 0x3000 },
+  { 0x8f00, 0x3251, 0x2000 },
+  { 0x1a00, 0x3250, 0x0000 },
+  { 0x0f00, 0x3252, 0x0000 },
+  { 0x8f00, 0x3255, 0x2000 },
+  { 0x0f00, 0x3254, 0x0000 },
+  { 0x0f00, 0x3256, 0x0000 },
+  { 0x8f00, 0x325b, 0x3000 },
+  { 0x8f00, 0x3259, 0x2000 },
+  { 0x0f00, 0x3258, 0x0000 },
+  { 0x0f00, 0x325a, 0x0000 },
+  { 0x8f00, 0x325d, 0x2000 },
+  { 0x0f00, 0x325c, 0x0000 },
+  { 0x0f00, 0x325e, 0x0000 },
+  { 0x9a00, 0x3267, 0x4000 },
+  { 0x9a00, 0x3263, 0x3000 },
+  { 0x9a00, 0x3261, 0x2000 },
+  { 0x1a00, 0x3260, 0x0000 },
+  { 0x1a00, 0x3262, 0x0000 },
+  { 0x9a00, 0x3265, 0x2000 },
+  { 0x1a00, 0x3264, 0x0000 },
+  { 0x1a00, 0x3266, 0x0000 },
+  { 0x9a00, 0x326b, 0x3000 },
+  { 0x9a00, 0x3269, 0x2000 },
+  { 0x1a00, 0x3268, 0x0000 },
+  { 0x1a00, 0x326a, 0x0000 },
+  { 0x9a00, 0x326d, 0x2000 },
+  { 0x1a00, 0x326c, 0x0000 },
+  { 0x1a00, 0x326e, 0x0000 },
+  { 0x8f00, 0x3280, 0x5000 },
+  { 0x9a00, 0x3277, 0x4000 },
+  { 0x9a00, 0x3273, 0x3000 },
+  { 0x9a00, 0x3271, 0x2000 },
+  { 0x1a00, 0x3270, 0x0000 },
+  { 0x1a00, 0x3272, 0x0000 },
+  { 0x9a00, 0x3275, 0x2000 },
+  { 0x1a00, 0x3274, 0x0000 },
+  { 0x1a00, 0x3276, 0x0000 },
+  { 0x9a00, 0x327b, 0x3000 },
+  { 0x9a00, 0x3279, 0x2000 },
+  { 0x1a00, 0x3278, 0x0000 },
+  { 0x1a00, 0x327a, 0x0000 },
+  { 0x9a00, 0x327d, 0x2000 },
+  { 0x1a00, 0x327c, 0x0000 },
+  { 0x1a00, 0x327f, 0x0000 },
+  { 0x8f00, 0x3288, 0x4000 },
+  { 0x8f00, 0x3284, 0x3000 },
+  { 0x8f00, 0x3282, 0x2000 },
+  { 0x0f00, 0x3281, 0x0000 },
+  { 0x0f00, 0x3283, 0x0000 },
+  { 0x8f00, 0x3286, 0x2000 },
+  { 0x0f00, 0x3285, 0x0000 },
+  { 0x0f00, 0x3287, 0x0000 },
+  { 0x9a00, 0x328c, 0x3000 },
+  { 0x9a00, 0x328a, 0x2000 },
+  { 0x0f00, 0x3289, 0x0000 },
+  { 0x1a00, 0x328b, 0x0000 },
+  { 0x9a00, 0x328e, 0x2000 },
+  { 0x1a00, 0x328d, 0x0000 },
+  { 0x1a00, 0x328f, 0x0000 },
+  { 0x9a00, 0x3311, 0x8000 },
+  { 0x9a00, 0x32d0, 0x7000 },
+  { 0x9a00, 0x32b0, 0x6000 },
+  { 0x9a00, 0x32a0, 0x5000 },
+  { 0x9a00, 0x3298, 0x4000 },
+  { 0x9a00, 0x3294, 0x3000 },
+  { 0x9a00, 0x3292, 0x2000 },
+  { 0x1a00, 0x3291, 0x0000 },
+  { 0x1a00, 0x3293, 0x0000 },
+  { 0x9a00, 0x3296, 0x2000 },
+  { 0x1a00, 0x3295, 0x0000 },
+  { 0x1a00, 0x3297, 0x0000 },
+  { 0x9a00, 0x329c, 0x3000 },
+  { 0x9a00, 0x329a, 0x2000 },
+  { 0x1a00, 0x3299, 0x0000 },
+  { 0x1a00, 0x329b, 0x0000 },
+  { 0x9a00, 0x329e, 0x2000 },
+  { 0x1a00, 0x329d, 0x0000 },
+  { 0x1a00, 0x329f, 0x0000 },
+  { 0x9a00, 0x32a8, 0x4000 },
+  { 0x9a00, 0x32a4, 0x3000 },
+  { 0x9a00, 0x32a2, 0x2000 },
+  { 0x1a00, 0x32a1, 0x0000 },
+  { 0x1a00, 0x32a3, 0x0000 },
+  { 0x9a00, 0x32a6, 0x2000 },
+  { 0x1a00, 0x32a5, 0x0000 },
+  { 0x1a00, 0x32a7, 0x0000 },
+  { 0x9a00, 0x32ac, 0x3000 },
+  { 0x9a00, 0x32aa, 0x2000 },
+  { 0x1a00, 0x32a9, 0x0000 },
+  { 0x1a00, 0x32ab, 0x0000 },
+  { 0x9a00, 0x32ae, 0x2000 },
+  { 0x1a00, 0x32ad, 0x0000 },
+  { 0x1a00, 0x32af, 0x0000 },
+  { 0x9a00, 0x32c0, 0x5000 },
+  { 0x8f00, 0x32b8, 0x4000 },
+  { 0x8f00, 0x32b4, 0x3000 },
+  { 0x8f00, 0x32b2, 0x2000 },
+  { 0x0f00, 0x32b1, 0x0000 },
+  { 0x0f00, 0x32b3, 0x0000 },
+  { 0x8f00, 0x32b6, 0x2000 },
+  { 0x0f00, 0x32b5, 0x0000 },
+  { 0x0f00, 0x32b7, 0x0000 },
+  { 0x8f00, 0x32bc, 0x3000 },
+  { 0x8f00, 0x32ba, 0x2000 },
+  { 0x0f00, 0x32b9, 0x0000 },
+  { 0x0f00, 0x32bb, 0x0000 },
+  { 0x8f00, 0x32be, 0x2000 },
+  { 0x0f00, 0x32bd, 0x0000 },
+  { 0x0f00, 0x32bf, 0x0000 },
+  { 0x9a00, 0x32c8, 0x4000 },
+  { 0x9a00, 0x32c4, 0x3000 },
+  { 0x9a00, 0x32c2, 0x2000 },
+  { 0x1a00, 0x32c1, 0x0000 },
+  { 0x1a00, 0x32c3, 0x0000 },
+  { 0x9a00, 0x32c6, 0x2000 },
+  { 0x1a00, 0x32c5, 0x0000 },
+  { 0x1a00, 0x32c7, 0x0000 },
+  { 0x9a00, 0x32cc, 0x3000 },
+  { 0x9a00, 0x32ca, 0x2000 },
+  { 0x1a00, 0x32c9, 0x0000 },
+  { 0x1a00, 0x32cb, 0x0000 },
+  { 0x9a00, 0x32ce, 0x2000 },
+  { 0x1a00, 0x32cd, 0x0000 },
+  { 0x1a00, 0x32cf, 0x0000 },
+  { 0x9a00, 0x32f0, 0x6000 },
+  { 0x9a00, 0x32e0, 0x5000 },
+  { 0x9a00, 0x32d8, 0x4000 },
+  { 0x9a00, 0x32d4, 0x3000 },
+  { 0x9a00, 0x32d2, 0x2000 },
+  { 0x1a00, 0x32d1, 0x0000 },
+  { 0x1a00, 0x32d3, 0x0000 },
+  { 0x9a00, 0x32d6, 0x2000 },
+  { 0x1a00, 0x32d5, 0x0000 },
+  { 0x1a00, 0x32d7, 0x0000 },
+  { 0x9a00, 0x32dc, 0x3000 },
+  { 0x9a00, 0x32da, 0x2000 },
+  { 0x1a00, 0x32d9, 0x0000 },
+  { 0x1a00, 0x32db, 0x0000 },
+  { 0x9a00, 0x32de, 0x2000 },
+  { 0x1a00, 0x32dd, 0x0000 },
+  { 0x1a00, 0x32df, 0x0000 },
+  { 0x9a00, 0x32e8, 0x4000 },
+  { 0x9a00, 0x32e4, 0x3000 },
+  { 0x9a00, 0x32e2, 0x2000 },
+  { 0x1a00, 0x32e1, 0x0000 },
+  { 0x1a00, 0x32e3, 0x0000 },
+  { 0x9a00, 0x32e6, 0x2000 },
+  { 0x1a00, 0x32e5, 0x0000 },
+  { 0x1a00, 0x32e7, 0x0000 },
+  { 0x9a00, 0x32ec, 0x3000 },
+  { 0x9a00, 0x32ea, 0x2000 },
+  { 0x1a00, 0x32e9, 0x0000 },
+  { 0x1a00, 0x32eb, 0x0000 },
+  { 0x9a00, 0x32ee, 0x2000 },
+  { 0x1a00, 0x32ed, 0x0000 },
+  { 0x1a00, 0x32ef, 0x0000 },
+  { 0x9a00, 0x3301, 0x5000 },
+  { 0x9a00, 0x32f8, 0x4000 },
+  { 0x9a00, 0x32f4, 0x3000 },
+  { 0x9a00, 0x32f2, 0x2000 },
+  { 0x1a00, 0x32f1, 0x0000 },
+  { 0x1a00, 0x32f3, 0x0000 },
+  { 0x9a00, 0x32f6, 0x2000 },
+  { 0x1a00, 0x32f5, 0x0000 },
+  { 0x1a00, 0x32f7, 0x0000 },
+  { 0x9a00, 0x32fc, 0x3000 },
+  { 0x9a00, 0x32fa, 0x2000 },
+  { 0x1a00, 0x32f9, 0x0000 },
+  { 0x1a00, 0x32fb, 0x0000 },
+  { 0x9a00, 0x32fe, 0x2000 },
+  { 0x1a00, 0x32fd, 0x0000 },
+  { 0x1a00, 0x3300, 0x0000 },
+  { 0x9a00, 0x3309, 0x4000 },
+  { 0x9a00, 0x3305, 0x3000 },
+  { 0x9a00, 0x3303, 0x2000 },
+  { 0x1a00, 0x3302, 0x0000 },
+  { 0x1a00, 0x3304, 0x0000 },
+  { 0x9a00, 0x3307, 0x2000 },
+  { 0x1a00, 0x3306, 0x0000 },
+  { 0x1a00, 0x3308, 0x0000 },
+  { 0x9a00, 0x330d, 0x3000 },
+  { 0x9a00, 0x330b, 0x2000 },
+  { 0x1a00, 0x330a, 0x0000 },
+  { 0x1a00, 0x330c, 0x0000 },
+  { 0x9a00, 0x330f, 0x2000 },
+  { 0x1a00, 0x330e, 0x0000 },
+  { 0x1a00, 0x3310, 0x0000 },
+  { 0x9a00, 0x3351, 0x7000 },
+  { 0x9a00, 0x3331, 0x6000 },
+  { 0x9a00, 0x3321, 0x5000 },
+  { 0x9a00, 0x3319, 0x4000 },
+  { 0x9a00, 0x3315, 0x3000 },
+  { 0x9a00, 0x3313, 0x2000 },
+  { 0x1a00, 0x3312, 0x0000 },
+  { 0x1a00, 0x3314, 0x0000 },
+  { 0x9a00, 0x3317, 0x2000 },
+  { 0x1a00, 0x3316, 0x0000 },
+  { 0x1a00, 0x3318, 0x0000 },
+  { 0x9a00, 0x331d, 0x3000 },
+  { 0x9a00, 0x331b, 0x2000 },
+  { 0x1a00, 0x331a, 0x0000 },
+  { 0x1a00, 0x331c, 0x0000 },
+  { 0x9a00, 0x331f, 0x2000 },
+  { 0x1a00, 0x331e, 0x0000 },
+  { 0x1a00, 0x3320, 0x0000 },
+  { 0x9a00, 0x3329, 0x4000 },
+  { 0x9a00, 0x3325, 0x3000 },
+  { 0x9a00, 0x3323, 0x2000 },
+  { 0x1a00, 0x3322, 0x0000 },
+  { 0x1a00, 0x3324, 0x0000 },
+  { 0x9a00, 0x3327, 0x2000 },
+  { 0x1a00, 0x3326, 0x0000 },
+  { 0x1a00, 0x3328, 0x0000 },
+  { 0x9a00, 0x332d, 0x3000 },
+  { 0x9a00, 0x332b, 0x2000 },
+  { 0x1a00, 0x332a, 0x0000 },
+  { 0x1a00, 0x332c, 0x0000 },
+  { 0x9a00, 0x332f, 0x2000 },
+  { 0x1a00, 0x332e, 0x0000 },
+  { 0x1a00, 0x3330, 0x0000 },
+  { 0x9a00, 0x3341, 0x5000 },
+  { 0x9a00, 0x3339, 0x4000 },
+  { 0x9a00, 0x3335, 0x3000 },
+  { 0x9a00, 0x3333, 0x2000 },
+  { 0x1a00, 0x3332, 0x0000 },
+  { 0x1a00, 0x3334, 0x0000 },
+  { 0x9a00, 0x3337, 0x2000 },
+  { 0x1a00, 0x3336, 0x0000 },
+  { 0x1a00, 0x3338, 0x0000 },
+  { 0x9a00, 0x333d, 0x3000 },
+  { 0x9a00, 0x333b, 0x2000 },
+  { 0x1a00, 0x333a, 0x0000 },
+  { 0x1a00, 0x333c, 0x0000 },
+  { 0x9a00, 0x333f, 0x2000 },
+  { 0x1a00, 0x333e, 0x0000 },
+  { 0x1a00, 0x3340, 0x0000 },
+  { 0x9a00, 0x3349, 0x4000 },
+  { 0x9a00, 0x3345, 0x3000 },
+  { 0x9a00, 0x3343, 0x2000 },
+  { 0x1a00, 0x3342, 0x0000 },
+  { 0x1a00, 0x3344, 0x0000 },
+  { 0x9a00, 0x3347, 0x2000 },
+  { 0x1a00, 0x3346, 0x0000 },
+  { 0x1a00, 0x3348, 0x0000 },
+  { 0x9a00, 0x334d, 0x3000 },
+  { 0x9a00, 0x334b, 0x2000 },
+  { 0x1a00, 0x334a, 0x0000 },
+  { 0x1a00, 0x334c, 0x0000 },
+  { 0x9a00, 0x334f, 0x2000 },
+  { 0x1a00, 0x334e, 0x0000 },
+  { 0x1a00, 0x3350, 0x0000 },
+  { 0x9a00, 0x3371, 0x6000 },
+  { 0x9a00, 0x3361, 0x5000 },
+  { 0x9a00, 0x3359, 0x4000 },
+  { 0x9a00, 0x3355, 0x3000 },
+  { 0x9a00, 0x3353, 0x2000 },
+  { 0x1a00, 0x3352, 0x0000 },
+  { 0x1a00, 0x3354, 0x0000 },
+  { 0x9a00, 0x3357, 0x2000 },
+  { 0x1a00, 0x3356, 0x0000 },
+  { 0x1a00, 0x3358, 0x0000 },
+  { 0x9a00, 0x335d, 0x3000 },
+  { 0x9a00, 0x335b, 0x2000 },
+  { 0x1a00, 0x335a, 0x0000 },
+  { 0x1a00, 0x335c, 0x0000 },
+  { 0x9a00, 0x335f, 0x2000 },
+  { 0x1a00, 0x335e, 0x0000 },
+  { 0x1a00, 0x3360, 0x0000 },
+  { 0x9a00, 0x3369, 0x4000 },
+  { 0x9a00, 0x3365, 0x3000 },
+  { 0x9a00, 0x3363, 0x2000 },
+  { 0x1a00, 0x3362, 0x0000 },
+  { 0x1a00, 0x3364, 0x0000 },
+  { 0x9a00, 0x3367, 0x2000 },
+  { 0x1a00, 0x3366, 0x0000 },
+  { 0x1a00, 0x3368, 0x0000 },
+  { 0x9a00, 0x336d, 0x3000 },
+  { 0x9a00, 0x336b, 0x2000 },
+  { 0x1a00, 0x336a, 0x0000 },
+  { 0x1a00, 0x336c, 0x0000 },
+  { 0x9a00, 0x336f, 0x2000 },
+  { 0x1a00, 0x336e, 0x0000 },
+  { 0x1a00, 0x3370, 0x0000 },
+  { 0x9a00, 0x3381, 0x5000 },
+  { 0x9a00, 0x3379, 0x4000 },
+  { 0x9a00, 0x3375, 0x3000 },
+  { 0x9a00, 0x3373, 0x2000 },
+  { 0x1a00, 0x3372, 0x0000 },
+  { 0x1a00, 0x3374, 0x0000 },
+  { 0x9a00, 0x3377, 0x2000 },
+  { 0x1a00, 0x3376, 0x0000 },
+  { 0x1a00, 0x3378, 0x0000 },
+  { 0x9a00, 0x337d, 0x3000 },
+  { 0x9a00, 0x337b, 0x2000 },
+  { 0x1a00, 0x337a, 0x0000 },
+  { 0x1a00, 0x337c, 0x0000 },
+  { 0x9a00, 0x337f, 0x2000 },
+  { 0x1a00, 0x337e, 0x0000 },
+  { 0x1a00, 0x3380, 0x0000 },
+  { 0x9a00, 0x3389, 0x4000 },
+  { 0x9a00, 0x3385, 0x3000 },
+  { 0x9a00, 0x3383, 0x2000 },
+  { 0x1a00, 0x3382, 0x0000 },
+  { 0x1a00, 0x3384, 0x0000 },
+  { 0x9a00, 0x3387, 0x2000 },
+  { 0x1a00, 0x3386, 0x0000 },
+  { 0x1a00, 0x3388, 0x0000 },
+  { 0x9a00, 0x338d, 0x3000 },
+  { 0x9a00, 0x338b, 0x2000 },
+  { 0x1a00, 0x338a, 0x0000 },
+  { 0x1a00, 0x338c, 0x0000 },
+  { 0x9a00, 0x338f, 0x2000 },
+  { 0x1a00, 0x338e, 0x0000 },
+  { 0x1a00, 0x3390, 0x0000 },
+  { 0x8700, 0xa14d, 0xa000 },
+  { 0x8700, 0xa04d, 0x9000 },
+  { 0x9a00, 0x4dcf, 0x8000 },
+  { 0x9a00, 0x33d1, 0x7000 },
+  { 0x9a00, 0x33b1, 0x6000 },
+  { 0x9a00, 0x33a1, 0x5000 },
+  { 0x9a00, 0x3399, 0x4000 },
+  { 0x9a00, 0x3395, 0x3000 },
+  { 0x9a00, 0x3393, 0x2000 },
+  { 0x1a00, 0x3392, 0x0000 },
+  { 0x1a00, 0x3394, 0x0000 },
+  { 0x9a00, 0x3397, 0x2000 },
+  { 0x1a00, 0x3396, 0x0000 },
+  { 0x1a00, 0x3398, 0x0000 },
+  { 0x9a00, 0x339d, 0x3000 },
+  { 0x9a00, 0x339b, 0x2000 },
+  { 0x1a00, 0x339a, 0x0000 },
+  { 0x1a00, 0x339c, 0x0000 },
+  { 0x9a00, 0x339f, 0x2000 },
+  { 0x1a00, 0x339e, 0x0000 },
+  { 0x1a00, 0x33a0, 0x0000 },
+  { 0x9a00, 0x33a9, 0x4000 },
+  { 0x9a00, 0x33a5, 0x3000 },
+  { 0x9a00, 0x33a3, 0x2000 },
+  { 0x1a00, 0x33a2, 0x0000 },
+  { 0x1a00, 0x33a4, 0x0000 },
+  { 0x9a00, 0x33a7, 0x2000 },
+  { 0x1a00, 0x33a6, 0x0000 },
+  { 0x1a00, 0x33a8, 0x0000 },
+  { 0x9a00, 0x33ad, 0x3000 },
+  { 0x9a00, 0x33ab, 0x2000 },
+  { 0x1a00, 0x33aa, 0x0000 },
+  { 0x1a00, 0x33ac, 0x0000 },
+  { 0x9a00, 0x33af, 0x2000 },
+  { 0x1a00, 0x33ae, 0x0000 },
+  { 0x1a00, 0x33b0, 0x0000 },
+  { 0x9a00, 0x33c1, 0x5000 },
+  { 0x9a00, 0x33b9, 0x4000 },
+  { 0x9a00, 0x33b5, 0x3000 },
+  { 0x9a00, 0x33b3, 0x2000 },
+  { 0x1a00, 0x33b2, 0x0000 },
+  { 0x1a00, 0x33b4, 0x0000 },
+  { 0x9a00, 0x33b7, 0x2000 },
+  { 0x1a00, 0x33b6, 0x0000 },
+  { 0x1a00, 0x33b8, 0x0000 },
+  { 0x9a00, 0x33bd, 0x3000 },
+  { 0x9a00, 0x33bb, 0x2000 },
+  { 0x1a00, 0x33ba, 0x0000 },
+  { 0x1a00, 0x33bc, 0x0000 },
+  { 0x9a00, 0x33bf, 0x2000 },
+  { 0x1a00, 0x33be, 0x0000 },
+  { 0x1a00, 0x33c0, 0x0000 },
+  { 0x9a00, 0x33c9, 0x4000 },
+  { 0x9a00, 0x33c5, 0x3000 },
+  { 0x9a00, 0x33c3, 0x2000 },
+  { 0x1a00, 0x33c2, 0x0000 },
+  { 0x1a00, 0x33c4, 0x0000 },
+  { 0x9a00, 0x33c7, 0x2000 },
+  { 0x1a00, 0x33c6, 0x0000 },
+  { 0x1a00, 0x33c8, 0x0000 },
+  { 0x9a00, 0x33cd, 0x3000 },
+  { 0x9a00, 0x33cb, 0x2000 },
+  { 0x1a00, 0x33ca, 0x0000 },
+  { 0x1a00, 0x33cc, 0x0000 },
+  { 0x9a00, 0x33cf, 0x2000 },
+  { 0x1a00, 0x33ce, 0x0000 },
+  { 0x1a00, 0x33d0, 0x0000 },
+  { 0x9a00, 0x33f1, 0x6000 },
+  { 0x9a00, 0x33e1, 0x5000 },
+  { 0x9a00, 0x33d9, 0x4000 },
+  { 0x9a00, 0x33d5, 0x3000 },
+  { 0x9a00, 0x33d3, 0x2000 },
+  { 0x1a00, 0x33d2, 0x0000 },
+  { 0x1a00, 0x33d4, 0x0000 },
+  { 0x9a00, 0x33d7, 0x2000 },
+  { 0x1a00, 0x33d6, 0x0000 },
+  { 0x1a00, 0x33d8, 0x0000 },
+  { 0x9a00, 0x33dd, 0x3000 },
+  { 0x9a00, 0x33db, 0x2000 },
+  { 0x1a00, 0x33da, 0x0000 },
+  { 0x1a00, 0x33dc, 0x0000 },
+  { 0x9a00, 0x33df, 0x2000 },
+  { 0x1a00, 0x33de, 0x0000 },
+  { 0x1a00, 0x33e0, 0x0000 },
+  { 0x9a00, 0x33e9, 0x4000 },
+  { 0x9a00, 0x33e5, 0x3000 },
+  { 0x9a00, 0x33e3, 0x2000 },
+  { 0x1a00, 0x33e2, 0x0000 },
+  { 0x1a00, 0x33e4, 0x0000 },
+  { 0x9a00, 0x33e7, 0x2000 },
+  { 0x1a00, 0x33e6, 0x0000 },
+  { 0x1a00, 0x33e8, 0x0000 },
+  { 0x9a00, 0x33ed, 0x3000 },
+  { 0x9a00, 0x33eb, 0x2000 },
+  { 0x1a00, 0x33ea, 0x0000 },
+  { 0x1a00, 0x33ec, 0x0000 },
+  { 0x9a00, 0x33ef, 0x2000 },
+  { 0x1a00, 0x33ee, 0x0000 },
+  { 0x1a00, 0x33f0, 0x0000 },
+  { 0x8700, 0x4db5, 0x5000 },
+  { 0x9a00, 0x33f9, 0x4000 },
+  { 0x9a00, 0x33f5, 0x3000 },
+  { 0x9a00, 0x33f3, 0x2000 },
+  { 0x1a00, 0x33f2, 0x0000 },
+  { 0x1a00, 0x33f4, 0x0000 },
+  { 0x9a00, 0x33f7, 0x2000 },
+  { 0x1a00, 0x33f6, 0x0000 },
+  { 0x1a00, 0x33f8, 0x0000 },
+  { 0x9a00, 0x33fd, 0x3000 },
+  { 0x9a00, 0x33fb, 0x2000 },
+  { 0x1a00, 0x33fa, 0x0000 },
+  { 0x1a00, 0x33fc, 0x0000 },
+  { 0x9a00, 0x33ff, 0x2000 },
+  { 0x1a00, 0x33fe, 0x0000 },
+  { 0x0700, 0x3400, 0x0000 },
+  { 0x9a00, 0x4dc7, 0x4000 },
+  { 0x9a00, 0x4dc3, 0x3000 },
+  { 0x9a00, 0x4dc1, 0x2000 },
+  { 0x1a00, 0x4dc0, 0x0000 },
+  { 0x1a00, 0x4dc2, 0x0000 },
+  { 0x9a00, 0x4dc5, 0x2000 },
+  { 0x1a00, 0x4dc4, 0x0000 },
+  { 0x1a00, 0x4dc6, 0x0000 },
+  { 0x9a00, 0x4dcb, 0x3000 },
+  { 0x9a00, 0x4dc9, 0x2000 },
+  { 0x1a00, 0x4dc8, 0x0000 },
+  { 0x1a00, 0x4dca, 0x0000 },
+  { 0x9a00, 0x4dcd, 0x2000 },
+  { 0x1a00, 0x4dcc, 0x0000 },
+  { 0x1a00, 0x4dce, 0x0000 },
+  { 0x8700, 0xa00d, 0x7000 },
+  { 0x9a00, 0x4def, 0x6000 },
+  { 0x9a00, 0x4ddf, 0x5000 },
+  { 0x9a00, 0x4dd7, 0x4000 },
+  { 0x9a00, 0x4dd3, 0x3000 },
+  { 0x9a00, 0x4dd1, 0x2000 },
+  { 0x1a00, 0x4dd0, 0x0000 },
+  { 0x1a00, 0x4dd2, 0x0000 },
+  { 0x9a00, 0x4dd5, 0x2000 },
+  { 0x1a00, 0x4dd4, 0x0000 },
+  { 0x1a00, 0x4dd6, 0x0000 },
+  { 0x9a00, 0x4ddb, 0x3000 },
+  { 0x9a00, 0x4dd9, 0x2000 },
+  { 0x1a00, 0x4dd8, 0x0000 },
+  { 0x1a00, 0x4dda, 0x0000 },
+  { 0x9a00, 0x4ddd, 0x2000 },
+  { 0x1a00, 0x4ddc, 0x0000 },
+  { 0x1a00, 0x4dde, 0x0000 },
+  { 0x9a00, 0x4de7, 0x4000 },
+  { 0x9a00, 0x4de3, 0x3000 },
+  { 0x9a00, 0x4de1, 0x2000 },
+  { 0x1a00, 0x4de0, 0x0000 },
+  { 0x1a00, 0x4de2, 0x0000 },
+  { 0x9a00, 0x4de5, 0x2000 },
+  { 0x1a00, 0x4de4, 0x0000 },
+  { 0x1a00, 0x4de6, 0x0000 },
+  { 0x9a00, 0x4deb, 0x3000 },
+  { 0x9a00, 0x4de9, 0x2000 },
+  { 0x1a00, 0x4de8, 0x0000 },
+  { 0x1a00, 0x4dea, 0x0000 },
+  { 0x9a00, 0x4ded, 0x2000 },
+  { 0x1a00, 0x4dec, 0x0000 },
+  { 0x1a00, 0x4dee, 0x0000 },
+  { 0x9a00, 0x4dff, 0x5000 },
+  { 0x9a00, 0x4df7, 0x4000 },
+  { 0x9a00, 0x4df3, 0x3000 },
+  { 0x9a00, 0x4df1, 0x2000 },
+  { 0x1a00, 0x4df0, 0x0000 },
+  { 0x1a00, 0x4df2, 0x0000 },
+  { 0x9a00, 0x4df5, 0x2000 },
+  { 0x1a00, 0x4df4, 0x0000 },
+  { 0x1a00, 0x4df6, 0x0000 },
+  { 0x9a00, 0x4dfb, 0x3000 },
+  { 0x9a00, 0x4df9, 0x2000 },
+  { 0x1a00, 0x4df8, 0x0000 },
+  { 0x1a00, 0x4dfa, 0x0000 },
+  { 0x9a00, 0x4dfd, 0x2000 },
+  { 0x1a00, 0x4dfc, 0x0000 },
+  { 0x1a00, 0x4dfe, 0x0000 },
+  { 0x8700, 0xa005, 0x4000 },
+  { 0x8700, 0xa001, 0x3000 },
+  { 0x8700, 0x9fa5, 0x2000 },
+  { 0x0700, 0x4e00, 0x0000 },
+  { 0x0700, 0xa000, 0x0000 },
+  { 0x8700, 0xa003, 0x2000 },
+  { 0x0700, 0xa002, 0x0000 },
+  { 0x0700, 0xa004, 0x0000 },
+  { 0x8700, 0xa009, 0x3000 },
+  { 0x8700, 0xa007, 0x2000 },
+  { 0x0700, 0xa006, 0x0000 },
+  { 0x0700, 0xa008, 0x0000 },
+  { 0x8700, 0xa00b, 0x2000 },
+  { 0x0700, 0xa00a, 0x0000 },
+  { 0x0700, 0xa00c, 0x0000 },
+  { 0x8700, 0xa02d, 0x6000 },
+  { 0x8700, 0xa01d, 0x5000 },
+  { 0x8700, 0xa015, 0x4000 },
+  { 0x8700, 0xa011, 0x3000 },
+  { 0x8700, 0xa00f, 0x2000 },
+  { 0x0700, 0xa00e, 0x0000 },
+  { 0x0700, 0xa010, 0x0000 },
+  { 0x8700, 0xa013, 0x2000 },
+  { 0x0700, 0xa012, 0x0000 },
+  { 0x0700, 0xa014, 0x0000 },
+  { 0x8700, 0xa019, 0x3000 },
+  { 0x8700, 0xa017, 0x2000 },
+  { 0x0700, 0xa016, 0x0000 },
+  { 0x0700, 0xa018, 0x0000 },
+  { 0x8700, 0xa01b, 0x2000 },
+  { 0x0700, 0xa01a, 0x0000 },
+  { 0x0700, 0xa01c, 0x0000 },
+  { 0x8700, 0xa025, 0x4000 },
+  { 0x8700, 0xa021, 0x3000 },
+  { 0x8700, 0xa01f, 0x2000 },
+  { 0x0700, 0xa01e, 0x0000 },
+  { 0x0700, 0xa020, 0x0000 },
+  { 0x8700, 0xa023, 0x2000 },
+  { 0x0700, 0xa022, 0x0000 },
+  { 0x0700, 0xa024, 0x0000 },
+  { 0x8700, 0xa029, 0x3000 },
+  { 0x8700, 0xa027, 0x2000 },
+  { 0x0700, 0xa026, 0x0000 },
+  { 0x0700, 0xa028, 0x0000 },
+  { 0x8700, 0xa02b, 0x2000 },
+  { 0x0700, 0xa02a, 0x0000 },
+  { 0x0700, 0xa02c, 0x0000 },
+  { 0x8700, 0xa03d, 0x5000 },
+  { 0x8700, 0xa035, 0x4000 },
+  { 0x8700, 0xa031, 0x3000 },
+  { 0x8700, 0xa02f, 0x2000 },
+  { 0x0700, 0xa02e, 0x0000 },
+  { 0x0700, 0xa030, 0x0000 },
+  { 0x8700, 0xa033, 0x2000 },
+  { 0x0700, 0xa032, 0x0000 },
+  { 0x0700, 0xa034, 0x0000 },
+  { 0x8700, 0xa039, 0x3000 },
+  { 0x8700, 0xa037, 0x2000 },
+  { 0x0700, 0xa036, 0x0000 },
+  { 0x0700, 0xa038, 0x0000 },
+  { 0x8700, 0xa03b, 0x2000 },
+  { 0x0700, 0xa03a, 0x0000 },
+  { 0x0700, 0xa03c, 0x0000 },
+  { 0x8700, 0xa045, 0x4000 },
+  { 0x8700, 0xa041, 0x3000 },
+  { 0x8700, 0xa03f, 0x2000 },
+  { 0x0700, 0xa03e, 0x0000 },
+  { 0x0700, 0xa040, 0x0000 },
+  { 0x8700, 0xa043, 0x2000 },
+  { 0x0700, 0xa042, 0x0000 },
+  { 0x0700, 0xa044, 0x0000 },
+  { 0x8700, 0xa049, 0x3000 },
+  { 0x8700, 0xa047, 0x2000 },
+  { 0x0700, 0xa046, 0x0000 },
+  { 0x0700, 0xa048, 0x0000 },
+  { 0x8700, 0xa04b, 0x2000 },
+  { 0x0700, 0xa04a, 0x0000 },
+  { 0x0700, 0xa04c, 0x0000 },
+  { 0x8700, 0xa0cd, 0x8000 },
+  { 0x8700, 0xa08d, 0x7000 },
+  { 0x8700, 0xa06d, 0x6000 },
+  { 0x8700, 0xa05d, 0x5000 },
+  { 0x8700, 0xa055, 0x4000 },
+  { 0x8700, 0xa051, 0x3000 },
+  { 0x8700, 0xa04f, 0x2000 },
+  { 0x0700, 0xa04e, 0x0000 },
+  { 0x0700, 0xa050, 0x0000 },
+  { 0x8700, 0xa053, 0x2000 },
+  { 0x0700, 0xa052, 0x0000 },
+  { 0x0700, 0xa054, 0x0000 },
+  { 0x8700, 0xa059, 0x3000 },
+  { 0x8700, 0xa057, 0x2000 },
+  { 0x0700, 0xa056, 0x0000 },
+  { 0x0700, 0xa058, 0x0000 },
+  { 0x8700, 0xa05b, 0x2000 },
+  { 0x0700, 0xa05a, 0x0000 },
+  { 0x0700, 0xa05c, 0x0000 },
+  { 0x8700, 0xa065, 0x4000 },
+  { 0x8700, 0xa061, 0x3000 },
+  { 0x8700, 0xa05f, 0x2000 },
+  { 0x0700, 0xa05e, 0x0000 },
+  { 0x0700, 0xa060, 0x0000 },
+  { 0x8700, 0xa063, 0x2000 },
+  { 0x0700, 0xa062, 0x0000 },
+  { 0x0700, 0xa064, 0x0000 },
+  { 0x8700, 0xa069, 0x3000 },
+  { 0x8700, 0xa067, 0x2000 },
+  { 0x0700, 0xa066, 0x0000 },
+  { 0x0700, 0xa068, 0x0000 },
+  { 0x8700, 0xa06b, 0x2000 },
+  { 0x0700, 0xa06a, 0x0000 },
+  { 0x0700, 0xa06c, 0x0000 },
+  { 0x8700, 0xa07d, 0x5000 },
+  { 0x8700, 0xa075, 0x4000 },
+  { 0x8700, 0xa071, 0x3000 },
+  { 0x8700, 0xa06f, 0x2000 },
+  { 0x0700, 0xa06e, 0x0000 },
+  { 0x0700, 0xa070, 0x0000 },
+  { 0x8700, 0xa073, 0x2000 },
+  { 0x0700, 0xa072, 0x0000 },
+  { 0x0700, 0xa074, 0x0000 },
+  { 0x8700, 0xa079, 0x3000 },
+  { 0x8700, 0xa077, 0x2000 },
+  { 0x0700, 0xa076, 0x0000 },
+  { 0x0700, 0xa078, 0x0000 },
+  { 0x8700, 0xa07b, 0x2000 },
+  { 0x0700, 0xa07a, 0x0000 },
+  { 0x0700, 0xa07c, 0x0000 },
+  { 0x8700, 0xa085, 0x4000 },
+  { 0x8700, 0xa081, 0x3000 },
+  { 0x8700, 0xa07f, 0x2000 },
+  { 0x0700, 0xa07e, 0x0000 },
+  { 0x0700, 0xa080, 0x0000 },
+  { 0x8700, 0xa083, 0x2000 },
+  { 0x0700, 0xa082, 0x0000 },
+  { 0x0700, 0xa084, 0x0000 },
+  { 0x8700, 0xa089, 0x3000 },
+  { 0x8700, 0xa087, 0x2000 },
+  { 0x0700, 0xa086, 0x0000 },
+  { 0x0700, 0xa088, 0x0000 },
+  { 0x8700, 0xa08b, 0x2000 },
+  { 0x0700, 0xa08a, 0x0000 },
+  { 0x0700, 0xa08c, 0x0000 },
+  { 0x8700, 0xa0ad, 0x6000 },
+  { 0x8700, 0xa09d, 0x5000 },
+  { 0x8700, 0xa095, 0x4000 },
+  { 0x8700, 0xa091, 0x3000 },
+  { 0x8700, 0xa08f, 0x2000 },
+  { 0x0700, 0xa08e, 0x0000 },
+  { 0x0700, 0xa090, 0x0000 },
+  { 0x8700, 0xa093, 0x2000 },
+  { 0x0700, 0xa092, 0x0000 },
+  { 0x0700, 0xa094, 0x0000 },
+  { 0x8700, 0xa099, 0x3000 },
+  { 0x8700, 0xa097, 0x2000 },
+  { 0x0700, 0xa096, 0x0000 },
+  { 0x0700, 0xa098, 0x0000 },
+  { 0x8700, 0xa09b, 0x2000 },
+  { 0x0700, 0xa09a, 0x0000 },
+  { 0x0700, 0xa09c, 0x0000 },
+  { 0x8700, 0xa0a5, 0x4000 },
+  { 0x8700, 0xa0a1, 0x3000 },
+  { 0x8700, 0xa09f, 0x2000 },
+  { 0x0700, 0xa09e, 0x0000 },
+  { 0x0700, 0xa0a0, 0x0000 },
+  { 0x8700, 0xa0a3, 0x2000 },
+  { 0x0700, 0xa0a2, 0x0000 },
+  { 0x0700, 0xa0a4, 0x0000 },
+  { 0x8700, 0xa0a9, 0x3000 },
+  { 0x8700, 0xa0a7, 0x2000 },
+  { 0x0700, 0xa0a6, 0x0000 },
+  { 0x0700, 0xa0a8, 0x0000 },
+  { 0x8700, 0xa0ab, 0x2000 },
+  { 0x0700, 0xa0aa, 0x0000 },
+  { 0x0700, 0xa0ac, 0x0000 },
+  { 0x8700, 0xa0bd, 0x5000 },
+  { 0x8700, 0xa0b5, 0x4000 },
+  { 0x8700, 0xa0b1, 0x3000 },
+  { 0x8700, 0xa0af, 0x2000 },
+  { 0x0700, 0xa0ae, 0x0000 },
+  { 0x0700, 0xa0b0, 0x0000 },
+  { 0x8700, 0xa0b3, 0x2000 },
+  { 0x0700, 0xa0b2, 0x0000 },
+  { 0x0700, 0xa0b4, 0x0000 },
+  { 0x8700, 0xa0b9, 0x3000 },
+  { 0x8700, 0xa0b7, 0x2000 },
+  { 0x0700, 0xa0b6, 0x0000 },
+  { 0x0700, 0xa0b8, 0x0000 },
+  { 0x8700, 0xa0bb, 0x2000 },
+  { 0x0700, 0xa0ba, 0x0000 },
+  { 0x0700, 0xa0bc, 0x0000 },
+  { 0x8700, 0xa0c5, 0x4000 },
+  { 0x8700, 0xa0c1, 0x3000 },
+  { 0x8700, 0xa0bf, 0x2000 },
+  { 0x0700, 0xa0be, 0x0000 },
+  { 0x0700, 0xa0c0, 0x0000 },
+  { 0x8700, 0xa0c3, 0x2000 },
+  { 0x0700, 0xa0c2, 0x0000 },
+  { 0x0700, 0xa0c4, 0x0000 },
+  { 0x8700, 0xa0c9, 0x3000 },
+  { 0x8700, 0xa0c7, 0x2000 },
+  { 0x0700, 0xa0c6, 0x0000 },
+  { 0x0700, 0xa0c8, 0x0000 },
+  { 0x8700, 0xa0cb, 0x2000 },
+  { 0x0700, 0xa0ca, 0x0000 },
+  { 0x0700, 0xa0cc, 0x0000 },
+  { 0x8700, 0xa10d, 0x7000 },
+  { 0x8700, 0xa0ed, 0x6000 },
+  { 0x8700, 0xa0dd, 0x5000 },
+  { 0x8700, 0xa0d5, 0x4000 },
+  { 0x8700, 0xa0d1, 0x3000 },
+  { 0x8700, 0xa0cf, 0x2000 },
+  { 0x0700, 0xa0ce, 0x0000 },
+  { 0x0700, 0xa0d0, 0x0000 },
+  { 0x8700, 0xa0d3, 0x2000 },
+  { 0x0700, 0xa0d2, 0x0000 },
+  { 0x0700, 0xa0d4, 0x0000 },
+  { 0x8700, 0xa0d9, 0x3000 },
+  { 0x8700, 0xa0d7, 0x2000 },
+  { 0x0700, 0xa0d6, 0x0000 },
+  { 0x0700, 0xa0d8, 0x0000 },
+  { 0x8700, 0xa0db, 0x2000 },
+  { 0x0700, 0xa0da, 0x0000 },
+  { 0x0700, 0xa0dc, 0x0000 },
+  { 0x8700, 0xa0e5, 0x4000 },
+  { 0x8700, 0xa0e1, 0x3000 },
+  { 0x8700, 0xa0df, 0x2000 },
+  { 0x0700, 0xa0de, 0x0000 },
+  { 0x0700, 0xa0e0, 0x0000 },
+  { 0x8700, 0xa0e3, 0x2000 },
+  { 0x0700, 0xa0e2, 0x0000 },
+  { 0x0700, 0xa0e4, 0x0000 },
+  { 0x8700, 0xa0e9, 0x3000 },
+  { 0x8700, 0xa0e7, 0x2000 },
+  { 0x0700, 0xa0e6, 0x0000 },
+  { 0x0700, 0xa0e8, 0x0000 },
+  { 0x8700, 0xa0eb, 0x2000 },
+  { 0x0700, 0xa0ea, 0x0000 },
+  { 0x0700, 0xa0ec, 0x0000 },
+  { 0x8700, 0xa0fd, 0x5000 },
+  { 0x8700, 0xa0f5, 0x4000 },
+  { 0x8700, 0xa0f1, 0x3000 },
+  { 0x8700, 0xa0ef, 0x2000 },
+  { 0x0700, 0xa0ee, 0x0000 },
+  { 0x0700, 0xa0f0, 0x0000 },
+  { 0x8700, 0xa0f3, 0x2000 },
+  { 0x0700, 0xa0f2, 0x0000 },
+  { 0x0700, 0xa0f4, 0x0000 },
+  { 0x8700, 0xa0f9, 0x3000 },
+  { 0x8700, 0xa0f7, 0x2000 },
+  { 0x0700, 0xa0f6, 0x0000 },
+  { 0x0700, 0xa0f8, 0x0000 },
+  { 0x8700, 0xa0fb, 0x2000 },
+  { 0x0700, 0xa0fa, 0x0000 },
+  { 0x0700, 0xa0fc, 0x0000 },
+  { 0x8700, 0xa105, 0x4000 },
+  { 0x8700, 0xa101, 0x3000 },
+  { 0x8700, 0xa0ff, 0x2000 },
+  { 0x0700, 0xa0fe, 0x0000 },
+  { 0x0700, 0xa100, 0x0000 },
+  { 0x8700, 0xa103, 0x2000 },
+  { 0x0700, 0xa102, 0x0000 },
+  { 0x0700, 0xa104, 0x0000 },
+  { 0x8700, 0xa109, 0x3000 },
+  { 0x8700, 0xa107, 0x2000 },
+  { 0x0700, 0xa106, 0x0000 },
+  { 0x0700, 0xa108, 0x0000 },
+  { 0x8700, 0xa10b, 0x2000 },
+  { 0x0700, 0xa10a, 0x0000 },
+  { 0x0700, 0xa10c, 0x0000 },
+  { 0x8700, 0xa12d, 0x6000 },
+  { 0x8700, 0xa11d, 0x5000 },
+  { 0x8700, 0xa115, 0x4000 },
+  { 0x8700, 0xa111, 0x3000 },
+  { 0x8700, 0xa10f, 0x2000 },
+  { 0x0700, 0xa10e, 0x0000 },
+  { 0x0700, 0xa110, 0x0000 },
+  { 0x8700, 0xa113, 0x2000 },
+  { 0x0700, 0xa112, 0x0000 },
+  { 0x0700, 0xa114, 0x0000 },
+  { 0x8700, 0xa119, 0x3000 },
+  { 0x8700, 0xa117, 0x2000 },
+  { 0x0700, 0xa116, 0x0000 },
+  { 0x0700, 0xa118, 0x0000 },
+  { 0x8700, 0xa11b, 0x2000 },
+  { 0x0700, 0xa11a, 0x0000 },
+  { 0x0700, 0xa11c, 0x0000 },
+  { 0x8700, 0xa125, 0x4000 },
+  { 0x8700, 0xa121, 0x3000 },
+  { 0x8700, 0xa11f, 0x2000 },
+  { 0x0700, 0xa11e, 0x0000 },
+  { 0x0700, 0xa120, 0x0000 },
+  { 0x8700, 0xa123, 0x2000 },
+  { 0x0700, 0xa122, 0x0000 },
+  { 0x0700, 0xa124, 0x0000 },
+  { 0x8700, 0xa129, 0x3000 },
+  { 0x8700, 0xa127, 0x2000 },
+  { 0x0700, 0xa126, 0x0000 },
+  { 0x0700, 0xa128, 0x0000 },
+  { 0x8700, 0xa12b, 0x2000 },
+  { 0x0700, 0xa12a, 0x0000 },
+  { 0x0700, 0xa12c, 0x0000 },
+  { 0x8700, 0xa13d, 0x5000 },
+  { 0x8700, 0xa135, 0x4000 },
+  { 0x8700, 0xa131, 0x3000 },
+  { 0x8700, 0xa12f, 0x2000 },
+  { 0x0700, 0xa12e, 0x0000 },
+  { 0x0700, 0xa130, 0x0000 },
+  { 0x8700, 0xa133, 0x2000 },
+  { 0x0700, 0xa132, 0x0000 },
+  { 0x0700, 0xa134, 0x0000 },
+  { 0x8700, 0xa139, 0x3000 },
+  { 0x8700, 0xa137, 0x2000 },
+  { 0x0700, 0xa136, 0x0000 },
+  { 0x0700, 0xa138, 0x0000 },
+  { 0x8700, 0xa13b, 0x2000 },
+  { 0x0700, 0xa13a, 0x0000 },
+  { 0x0700, 0xa13c, 0x0000 },
+  { 0x8700, 0xa145, 0x4000 },
+  { 0x8700, 0xa141, 0x3000 },
+  { 0x8700, 0xa13f, 0x2000 },
+  { 0x0700, 0xa13e, 0x0000 },
+  { 0x0700, 0xa140, 0x0000 },
+  { 0x8700, 0xa143, 0x2000 },
+  { 0x0700, 0xa142, 0x0000 },
+  { 0x0700, 0xa144, 0x0000 },
+  { 0x8700, 0xa149, 0x3000 },
+  { 0x8700, 0xa147, 0x2000 },
+  { 0x0700, 0xa146, 0x0000 },
+  { 0x0700, 0xa148, 0x0000 },
+  { 0x8700, 0xa14b, 0x2000 },
+  { 0x0700, 0xa14a, 0x0000 },
+  { 0x0700, 0xa14c, 0x0000 },
+  { 0x8700, 0xa24d, 0x9000 },
+  { 0x8700, 0xa1cd, 0x8000 },
+  { 0x8700, 0xa18d, 0x7000 },
+  { 0x8700, 0xa16d, 0x6000 },
+  { 0x8700, 0xa15d, 0x5000 },
+  { 0x8700, 0xa155, 0x4000 },
+  { 0x8700, 0xa151, 0x3000 },
+  { 0x8700, 0xa14f, 0x2000 },
+  { 0x0700, 0xa14e, 0x0000 },
+  { 0x0700, 0xa150, 0x0000 },
+  { 0x8700, 0xa153, 0x2000 },
+  { 0x0700, 0xa152, 0x0000 },
+  { 0x0700, 0xa154, 0x0000 },
+  { 0x8700, 0xa159, 0x3000 },
+  { 0x8700, 0xa157, 0x2000 },
+  { 0x0700, 0xa156, 0x0000 },
+  { 0x0700, 0xa158, 0x0000 },
+  { 0x8700, 0xa15b, 0x2000 },
+  { 0x0700, 0xa15a, 0x0000 },
+  { 0x0700, 0xa15c, 0x0000 },
+  { 0x8700, 0xa165, 0x4000 },
+  { 0x8700, 0xa161, 0x3000 },
+  { 0x8700, 0xa15f, 0x2000 },
+  { 0x0700, 0xa15e, 0x0000 },
+  { 0x0700, 0xa160, 0x0000 },
+  { 0x8700, 0xa163, 0x2000 },
+  { 0x0700, 0xa162, 0x0000 },
+  { 0x0700, 0xa164, 0x0000 },
+  { 0x8700, 0xa169, 0x3000 },
+  { 0x8700, 0xa167, 0x2000 },
+  { 0x0700, 0xa166, 0x0000 },
+  { 0x0700, 0xa168, 0x0000 },
+  { 0x8700, 0xa16b, 0x2000 },
+  { 0x0700, 0xa16a, 0x0000 },
+  { 0x0700, 0xa16c, 0x0000 },
+  { 0x8700, 0xa17d, 0x5000 },
+  { 0x8700, 0xa175, 0x4000 },
+  { 0x8700, 0xa171, 0x3000 },
+  { 0x8700, 0xa16f, 0x2000 },
+  { 0x0700, 0xa16e, 0x0000 },
+  { 0x0700, 0xa170, 0x0000 },
+  { 0x8700, 0xa173, 0x2000 },
+  { 0x0700, 0xa172, 0x0000 },
+  { 0x0700, 0xa174, 0x0000 },
+  { 0x8700, 0xa179, 0x3000 },
+  { 0x8700, 0xa177, 0x2000 },
+  { 0x0700, 0xa176, 0x0000 },
+  { 0x0700, 0xa178, 0x0000 },
+  { 0x8700, 0xa17b, 0x2000 },
+  { 0x0700, 0xa17a, 0x0000 },
+  { 0x0700, 0xa17c, 0x0000 },
+  { 0x8700, 0xa185, 0x4000 },
+  { 0x8700, 0xa181, 0x3000 },
+  { 0x8700, 0xa17f, 0x2000 },
+  { 0x0700, 0xa17e, 0x0000 },
+  { 0x0700, 0xa180, 0x0000 },
+  { 0x8700, 0xa183, 0x2000 },
+  { 0x0700, 0xa182, 0x0000 },
+  { 0x0700, 0xa184, 0x0000 },
+  { 0x8700, 0xa189, 0x3000 },
+  { 0x8700, 0xa187, 0x2000 },
+  { 0x0700, 0xa186, 0x0000 },
+  { 0x0700, 0xa188, 0x0000 },
+  { 0x8700, 0xa18b, 0x2000 },
+  { 0x0700, 0xa18a, 0x0000 },
+  { 0x0700, 0xa18c, 0x0000 },
+  { 0x8700, 0xa1ad, 0x6000 },
+  { 0x8700, 0xa19d, 0x5000 },
+  { 0x8700, 0xa195, 0x4000 },
+  { 0x8700, 0xa191, 0x3000 },
+  { 0x8700, 0xa18f, 0x2000 },
+  { 0x0700, 0xa18e, 0x0000 },
+  { 0x0700, 0xa190, 0x0000 },
+  { 0x8700, 0xa193, 0x2000 },
+  { 0x0700, 0xa192, 0x0000 },
+  { 0x0700, 0xa194, 0x0000 },
+  { 0x8700, 0xa199, 0x3000 },
+  { 0x8700, 0xa197, 0x2000 },
+  { 0x0700, 0xa196, 0x0000 },
+  { 0x0700, 0xa198, 0x0000 },
+  { 0x8700, 0xa19b, 0x2000 },
+  { 0x0700, 0xa19a, 0x0000 },
+  { 0x0700, 0xa19c, 0x0000 },
+  { 0x8700, 0xa1a5, 0x4000 },
+  { 0x8700, 0xa1a1, 0x3000 },
+  { 0x8700, 0xa19f, 0x2000 },
+  { 0x0700, 0xa19e, 0x0000 },
+  { 0x0700, 0xa1a0, 0x0000 },
+  { 0x8700, 0xa1a3, 0x2000 },
+  { 0x0700, 0xa1a2, 0x0000 },
+  { 0x0700, 0xa1a4, 0x0000 },
+  { 0x8700, 0xa1a9, 0x3000 },
+  { 0x8700, 0xa1a7, 0x2000 },
+  { 0x0700, 0xa1a6, 0x0000 },
+  { 0x0700, 0xa1a8, 0x0000 },
+  { 0x8700, 0xa1ab, 0x2000 },
+  { 0x0700, 0xa1aa, 0x0000 },
+  { 0x0700, 0xa1ac, 0x0000 },
+  { 0x8700, 0xa1bd, 0x5000 },
+  { 0x8700, 0xa1b5, 0x4000 },
+  { 0x8700, 0xa1b1, 0x3000 },
+  { 0x8700, 0xa1af, 0x2000 },
+  { 0x0700, 0xa1ae, 0x0000 },
+  { 0x0700, 0xa1b0, 0x0000 },
+  { 0x8700, 0xa1b3, 0x2000 },
+  { 0x0700, 0xa1b2, 0x0000 },
+  { 0x0700, 0xa1b4, 0x0000 },
+  { 0x8700, 0xa1b9, 0x3000 },
+  { 0x8700, 0xa1b7, 0x2000 },
+  { 0x0700, 0xa1b6, 0x0000 },
+  { 0x0700, 0xa1b8, 0x0000 },
+  { 0x8700, 0xa1bb, 0x2000 },
+  { 0x0700, 0xa1ba, 0x0000 },
+  { 0x0700, 0xa1bc, 0x0000 },
+  { 0x8700, 0xa1c5, 0x4000 },
+  { 0x8700, 0xa1c1, 0x3000 },
+  { 0x8700, 0xa1bf, 0x2000 },
+  { 0x0700, 0xa1be, 0x0000 },
+  { 0x0700, 0xa1c0, 0x0000 },
+  { 0x8700, 0xa1c3, 0x2000 },
+  { 0x0700, 0xa1c2, 0x0000 },
+  { 0x0700, 0xa1c4, 0x0000 },
+  { 0x8700, 0xa1c9, 0x3000 },
+  { 0x8700, 0xa1c7, 0x2000 },
+  { 0x0700, 0xa1c6, 0x0000 },
+  { 0x0700, 0xa1c8, 0x0000 },
+  { 0x8700, 0xa1cb, 0x2000 },
+  { 0x0700, 0xa1ca, 0x0000 },
+  { 0x0700, 0xa1cc, 0x0000 },
+  { 0x8700, 0xa20d, 0x7000 },
+  { 0x8700, 0xa1ed, 0x6000 },
+  { 0x8700, 0xa1dd, 0x5000 },
+  { 0x8700, 0xa1d5, 0x4000 },
+  { 0x8700, 0xa1d1, 0x3000 },
+  { 0x8700, 0xa1cf, 0x2000 },
+  { 0x0700, 0xa1ce, 0x0000 },
+  { 0x0700, 0xa1d0, 0x0000 },
+  { 0x8700, 0xa1d3, 0x2000 },
+  { 0x0700, 0xa1d2, 0x0000 },
+  { 0x0700, 0xa1d4, 0x0000 },
+  { 0x8700, 0xa1d9, 0x3000 },
+  { 0x8700, 0xa1d7, 0x2000 },
+  { 0x0700, 0xa1d6, 0x0000 },
+  { 0x0700, 0xa1d8, 0x0000 },
+  { 0x8700, 0xa1db, 0x2000 },
+  { 0x0700, 0xa1da, 0x0000 },
+  { 0x0700, 0xa1dc, 0x0000 },
+  { 0x8700, 0xa1e5, 0x4000 },
+  { 0x8700, 0xa1e1, 0x3000 },
+  { 0x8700, 0xa1df, 0x2000 },
+  { 0x0700, 0xa1de, 0x0000 },
+  { 0x0700, 0xa1e0, 0x0000 },
+  { 0x8700, 0xa1e3, 0x2000 },
+  { 0x0700, 0xa1e2, 0x0000 },
+  { 0x0700, 0xa1e4, 0x0000 },
+  { 0x8700, 0xa1e9, 0x3000 },
+  { 0x8700, 0xa1e7, 0x2000 },
+  { 0x0700, 0xa1e6, 0x0000 },
+  { 0x0700, 0xa1e8, 0x0000 },
+  { 0x8700, 0xa1eb, 0x2000 },
+  { 0x0700, 0xa1ea, 0x0000 },
+  { 0x0700, 0xa1ec, 0x0000 },
+  { 0x8700, 0xa1fd, 0x5000 },
+  { 0x8700, 0xa1f5, 0x4000 },
+  { 0x8700, 0xa1f1, 0x3000 },
+  { 0x8700, 0xa1ef, 0x2000 },
+  { 0x0700, 0xa1ee, 0x0000 },
+  { 0x0700, 0xa1f0, 0x0000 },
+  { 0x8700, 0xa1f3, 0x2000 },
+  { 0x0700, 0xa1f2, 0x0000 },
+  { 0x0700, 0xa1f4, 0x0000 },
+  { 0x8700, 0xa1f9, 0x3000 },
+  { 0x8700, 0xa1f7, 0x2000 },
+  { 0x0700, 0xa1f6, 0x0000 },
+  { 0x0700, 0xa1f8, 0x0000 },
+  { 0x8700, 0xa1fb, 0x2000 },
+  { 0x0700, 0xa1fa, 0x0000 },
+  { 0x0700, 0xa1fc, 0x0000 },
+  { 0x8700, 0xa205, 0x4000 },
+  { 0x8700, 0xa201, 0x3000 },
+  { 0x8700, 0xa1ff, 0x2000 },
+  { 0x0700, 0xa1fe, 0x0000 },
+  { 0x0700, 0xa200, 0x0000 },
+  { 0x8700, 0xa203, 0x2000 },
+  { 0x0700, 0xa202, 0x0000 },
+  { 0x0700, 0xa204, 0x0000 },
+  { 0x8700, 0xa209, 0x3000 },
+  { 0x8700, 0xa207, 0x2000 },
+  { 0x0700, 0xa206, 0x0000 },
+  { 0x0700, 0xa208, 0x0000 },
+  { 0x8700, 0xa20b, 0x2000 },
+  { 0x0700, 0xa20a, 0x0000 },
+  { 0x0700, 0xa20c, 0x0000 },
+  { 0x8700, 0xa22d, 0x6000 },
+  { 0x8700, 0xa21d, 0x5000 },
+  { 0x8700, 0xa215, 0x4000 },
+  { 0x8700, 0xa211, 0x3000 },
+  { 0x8700, 0xa20f, 0x2000 },
+  { 0x0700, 0xa20e, 0x0000 },
+  { 0x0700, 0xa210, 0x0000 },
+  { 0x8700, 0xa213, 0x2000 },
+  { 0x0700, 0xa212, 0x0000 },
+  { 0x0700, 0xa214, 0x0000 },
+  { 0x8700, 0xa219, 0x3000 },
+  { 0x8700, 0xa217, 0x2000 },
+  { 0x0700, 0xa216, 0x0000 },
+  { 0x0700, 0xa218, 0x0000 },
+  { 0x8700, 0xa21b, 0x2000 },
+  { 0x0700, 0xa21a, 0x0000 },
+  { 0x0700, 0xa21c, 0x0000 },
+  { 0x8700, 0xa225, 0x4000 },
+  { 0x8700, 0xa221, 0x3000 },
+  { 0x8700, 0xa21f, 0x2000 },
+  { 0x0700, 0xa21e, 0x0000 },
+  { 0x0700, 0xa220, 0x0000 },
+  { 0x8700, 0xa223, 0x2000 },
+  { 0x0700, 0xa222, 0x0000 },
+  { 0x0700, 0xa224, 0x0000 },
+  { 0x8700, 0xa229, 0x3000 },
+  { 0x8700, 0xa227, 0x2000 },
+  { 0x0700, 0xa226, 0x0000 },
+  { 0x0700, 0xa228, 0x0000 },
+  { 0x8700, 0xa22b, 0x2000 },
+  { 0x0700, 0xa22a, 0x0000 },
+  { 0x0700, 0xa22c, 0x0000 },
+  { 0x8700, 0xa23d, 0x5000 },
+  { 0x8700, 0xa235, 0x4000 },
+  { 0x8700, 0xa231, 0x3000 },
+  { 0x8700, 0xa22f, 0x2000 },
+  { 0x0700, 0xa22e, 0x0000 },
+  { 0x0700, 0xa230, 0x0000 },
+  { 0x8700, 0xa233, 0x2000 },
+  { 0x0700, 0xa232, 0x0000 },
+  { 0x0700, 0xa234, 0x0000 },
+  { 0x8700, 0xa239, 0x3000 },
+  { 0x8700, 0xa237, 0x2000 },
+  { 0x0700, 0xa236, 0x0000 },
+  { 0x0700, 0xa238, 0x0000 },
+  { 0x8700, 0xa23b, 0x2000 },
+  { 0x0700, 0xa23a, 0x0000 },
+  { 0x0700, 0xa23c, 0x0000 },
+  { 0x8700, 0xa245, 0x4000 },
+  { 0x8700, 0xa241, 0x3000 },
+  { 0x8700, 0xa23f, 0x2000 },
+  { 0x0700, 0xa23e, 0x0000 },
+  { 0x0700, 0xa240, 0x0000 },
+  { 0x8700, 0xa243, 0x2000 },
+  { 0x0700, 0xa242, 0x0000 },
+  { 0x0700, 0xa244, 0x0000 },
+  { 0x8700, 0xa249, 0x3000 },
+  { 0x8700, 0xa247, 0x2000 },
+  { 0x0700, 0xa246, 0x0000 },
+  { 0x0700, 0xa248, 0x0000 },
+  { 0x8700, 0xa24b, 0x2000 },
+  { 0x0700, 0xa24a, 0x0000 },
+  { 0x0700, 0xa24c, 0x0000 },
+  { 0x8700, 0xa2cd, 0x8000 },
+  { 0x8700, 0xa28d, 0x7000 },
+  { 0x8700, 0xa26d, 0x6000 },
+  { 0x8700, 0xa25d, 0x5000 },
+  { 0x8700, 0xa255, 0x4000 },
+  { 0x8700, 0xa251, 0x3000 },
+  { 0x8700, 0xa24f, 0x2000 },
+  { 0x0700, 0xa24e, 0x0000 },
+  { 0x0700, 0xa250, 0x0000 },
+  { 0x8700, 0xa253, 0x2000 },
+  { 0x0700, 0xa252, 0x0000 },
+  { 0x0700, 0xa254, 0x0000 },
+  { 0x8700, 0xa259, 0x3000 },
+  { 0x8700, 0xa257, 0x2000 },
+  { 0x0700, 0xa256, 0x0000 },
+  { 0x0700, 0xa258, 0x0000 },
+  { 0x8700, 0xa25b, 0x2000 },
+  { 0x0700, 0xa25a, 0x0000 },
+  { 0x0700, 0xa25c, 0x0000 },
+  { 0x8700, 0xa265, 0x4000 },
+  { 0x8700, 0xa261, 0x3000 },
+  { 0x8700, 0xa25f, 0x2000 },
+  { 0x0700, 0xa25e, 0x0000 },
+  { 0x0700, 0xa260, 0x0000 },
+  { 0x8700, 0xa263, 0x2000 },
+  { 0x0700, 0xa262, 0x0000 },
+  { 0x0700, 0xa264, 0x0000 },
+  { 0x8700, 0xa269, 0x3000 },
+  { 0x8700, 0xa267, 0x2000 },
+  { 0x0700, 0xa266, 0x0000 },
+  { 0x0700, 0xa268, 0x0000 },
+  { 0x8700, 0xa26b, 0x2000 },
+  { 0x0700, 0xa26a, 0x0000 },
+  { 0x0700, 0xa26c, 0x0000 },
+  { 0x8700, 0xa27d, 0x5000 },
+  { 0x8700, 0xa275, 0x4000 },
+  { 0x8700, 0xa271, 0x3000 },
+  { 0x8700, 0xa26f, 0x2000 },
+  { 0x0700, 0xa26e, 0x0000 },
+  { 0x0700, 0xa270, 0x0000 },
+  { 0x8700, 0xa273, 0x2000 },
+  { 0x0700, 0xa272, 0x0000 },
+  { 0x0700, 0xa274, 0x0000 },
+  { 0x8700, 0xa279, 0x3000 },
+  { 0x8700, 0xa277, 0x2000 },
+  { 0x0700, 0xa276, 0x0000 },
+  { 0x0700, 0xa278, 0x0000 },
+  { 0x8700, 0xa27b, 0x2000 },
+  { 0x0700, 0xa27a, 0x0000 },
+  { 0x0700, 0xa27c, 0x0000 },
+  { 0x8700, 0xa285, 0x4000 },
+  { 0x8700, 0xa281, 0x3000 },
+  { 0x8700, 0xa27f, 0x2000 },
+  { 0x0700, 0xa27e, 0x0000 },
+  { 0x0700, 0xa280, 0x0000 },
+  { 0x8700, 0xa283, 0x2000 },
+  { 0x0700, 0xa282, 0x0000 },
+  { 0x0700, 0xa284, 0x0000 },
+  { 0x8700, 0xa289, 0x3000 },
+  { 0x8700, 0xa287, 0x2000 },
+  { 0x0700, 0xa286, 0x0000 },
+  { 0x0700, 0xa288, 0x0000 },
+  { 0x8700, 0xa28b, 0x2000 },
+  { 0x0700, 0xa28a, 0x0000 },
+  { 0x0700, 0xa28c, 0x0000 },
+  { 0x8700, 0xa2ad, 0x6000 },
+  { 0x8700, 0xa29d, 0x5000 },
+  { 0x8700, 0xa295, 0x4000 },
+  { 0x8700, 0xa291, 0x3000 },
+  { 0x8700, 0xa28f, 0x2000 },
+  { 0x0700, 0xa28e, 0x0000 },
+  { 0x0700, 0xa290, 0x0000 },
+  { 0x8700, 0xa293, 0x2000 },
+  { 0x0700, 0xa292, 0x0000 },
+  { 0x0700, 0xa294, 0x0000 },
+  { 0x8700, 0xa299, 0x3000 },
+  { 0x8700, 0xa297, 0x2000 },
+  { 0x0700, 0xa296, 0x0000 },
+  { 0x0700, 0xa298, 0x0000 },
+  { 0x8700, 0xa29b, 0x2000 },
+  { 0x0700, 0xa29a, 0x0000 },
+  { 0x0700, 0xa29c, 0x0000 },
+  { 0x8700, 0xa2a5, 0x4000 },
+  { 0x8700, 0xa2a1, 0x3000 },
+  { 0x8700, 0xa29f, 0x2000 },
+  { 0x0700, 0xa29e, 0x0000 },
+  { 0x0700, 0xa2a0, 0x0000 },
+  { 0x8700, 0xa2a3, 0x2000 },
+  { 0x0700, 0xa2a2, 0x0000 },
+  { 0x0700, 0xa2a4, 0x0000 },
+  { 0x8700, 0xa2a9, 0x3000 },
+  { 0x8700, 0xa2a7, 0x2000 },
+  { 0x0700, 0xa2a6, 0x0000 },
+  { 0x0700, 0xa2a8, 0x0000 },
+  { 0x8700, 0xa2ab, 0x2000 },
+  { 0x0700, 0xa2aa, 0x0000 },
+  { 0x0700, 0xa2ac, 0x0000 },
+  { 0x8700, 0xa2bd, 0x5000 },
+  { 0x8700, 0xa2b5, 0x4000 },
+  { 0x8700, 0xa2b1, 0x3000 },
+  { 0x8700, 0xa2af, 0x2000 },
+  { 0x0700, 0xa2ae, 0x0000 },
+  { 0x0700, 0xa2b0, 0x0000 },
+  { 0x8700, 0xa2b3, 0x2000 },
+  { 0x0700, 0xa2b2, 0x0000 },
+  { 0x0700, 0xa2b4, 0x0000 },
+  { 0x8700, 0xa2b9, 0x3000 },
+  { 0x8700, 0xa2b7, 0x2000 },
+  { 0x0700, 0xa2b6, 0x0000 },
+  { 0x0700, 0xa2b8, 0x0000 },
+  { 0x8700, 0xa2bb, 0x2000 },
+  { 0x0700, 0xa2ba, 0x0000 },
+  { 0x0700, 0xa2bc, 0x0000 },
+  { 0x8700, 0xa2c5, 0x4000 },
+  { 0x8700, 0xa2c1, 0x3000 },
+  { 0x8700, 0xa2bf, 0x2000 },
+  { 0x0700, 0xa2be, 0x0000 },
+  { 0x0700, 0xa2c0, 0x0000 },
+  { 0x8700, 0xa2c3, 0x2000 },
+  { 0x0700, 0xa2c2, 0x0000 },
+  { 0x0700, 0xa2c4, 0x0000 },
+  { 0x8700, 0xa2c9, 0x3000 },
+  { 0x8700, 0xa2c7, 0x2000 },
+  { 0x0700, 0xa2c6, 0x0000 },
+  { 0x0700, 0xa2c8, 0x0000 },
+  { 0x8700, 0xa2cb, 0x2000 },
+  { 0x0700, 0xa2ca, 0x0000 },
+  { 0x0700, 0xa2cc, 0x0000 },
+  { 0x8700, 0xa30d, 0x7000 },
+  { 0x8700, 0xa2ed, 0x6000 },
+  { 0x8700, 0xa2dd, 0x5000 },
+  { 0x8700, 0xa2d5, 0x4000 },
+  { 0x8700, 0xa2d1, 0x3000 },
+  { 0x8700, 0xa2cf, 0x2000 },
+  { 0x0700, 0xa2ce, 0x0000 },
+  { 0x0700, 0xa2d0, 0x0000 },
+  { 0x8700, 0xa2d3, 0x2000 },
+  { 0x0700, 0xa2d2, 0x0000 },
+  { 0x0700, 0xa2d4, 0x0000 },
+  { 0x8700, 0xa2d9, 0x3000 },
+  { 0x8700, 0xa2d7, 0x2000 },
+  { 0x0700, 0xa2d6, 0x0000 },
+  { 0x0700, 0xa2d8, 0x0000 },
+  { 0x8700, 0xa2db, 0x2000 },
+  { 0x0700, 0xa2da, 0x0000 },
+  { 0x0700, 0xa2dc, 0x0000 },
+  { 0x8700, 0xa2e5, 0x4000 },
+  { 0x8700, 0xa2e1, 0x3000 },
+  { 0x8700, 0xa2df, 0x2000 },
+  { 0x0700, 0xa2de, 0x0000 },
+  { 0x0700, 0xa2e0, 0x0000 },
+  { 0x8700, 0xa2e3, 0x2000 },
+  { 0x0700, 0xa2e2, 0x0000 },
+  { 0x0700, 0xa2e4, 0x0000 },
+  { 0x8700, 0xa2e9, 0x3000 },
+  { 0x8700, 0xa2e7, 0x2000 },
+  { 0x0700, 0xa2e6, 0x0000 },
+  { 0x0700, 0xa2e8, 0x0000 },
+  { 0x8700, 0xa2eb, 0x2000 },
+  { 0x0700, 0xa2ea, 0x0000 },
+  { 0x0700, 0xa2ec, 0x0000 },
+  { 0x8700, 0xa2fd, 0x5000 },
+  { 0x8700, 0xa2f5, 0x4000 },
+  { 0x8700, 0xa2f1, 0x3000 },
+  { 0x8700, 0xa2ef, 0x2000 },
+  { 0x0700, 0xa2ee, 0x0000 },
+  { 0x0700, 0xa2f0, 0x0000 },
+  { 0x8700, 0xa2f3, 0x2000 },
+  { 0x0700, 0xa2f2, 0x0000 },
+  { 0x0700, 0xa2f4, 0x0000 },
+  { 0x8700, 0xa2f9, 0x3000 },
+  { 0x8700, 0xa2f7, 0x2000 },
+  { 0x0700, 0xa2f6, 0x0000 },
+  { 0x0700, 0xa2f8, 0x0000 },
+  { 0x8700, 0xa2fb, 0x2000 },
+  { 0x0700, 0xa2fa, 0x0000 },
+  { 0x0700, 0xa2fc, 0x0000 },
+  { 0x8700, 0xa305, 0x4000 },
+  { 0x8700, 0xa301, 0x3000 },
+  { 0x8700, 0xa2ff, 0x2000 },
+  { 0x0700, 0xa2fe, 0x0000 },
+  { 0x0700, 0xa300, 0x0000 },
+  { 0x8700, 0xa303, 0x2000 },
+  { 0x0700, 0xa302, 0x0000 },
+  { 0x0700, 0xa304, 0x0000 },
+  { 0x8700, 0xa309, 0x3000 },
+  { 0x8700, 0xa307, 0x2000 },
+  { 0x0700, 0xa306, 0x0000 },
+  { 0x0700, 0xa308, 0x0000 },
+  { 0x8700, 0xa30b, 0x2000 },
+  { 0x0700, 0xa30a, 0x0000 },
+  { 0x0700, 0xa30c, 0x0000 },
+  { 0x8700, 0xa32d, 0x6000 },
+  { 0x8700, 0xa31d, 0x5000 },
+  { 0x8700, 0xa315, 0x4000 },
+  { 0x8700, 0xa311, 0x3000 },
+  { 0x8700, 0xa30f, 0x2000 },
+  { 0x0700, 0xa30e, 0x0000 },
+  { 0x0700, 0xa310, 0x0000 },
+  { 0x8700, 0xa313, 0x2000 },
+  { 0x0700, 0xa312, 0x0000 },
+  { 0x0700, 0xa314, 0x0000 },
+  { 0x8700, 0xa319, 0x3000 },
+  { 0x8700, 0xa317, 0x2000 },
+  { 0x0700, 0xa316, 0x0000 },
+  { 0x0700, 0xa318, 0x0000 },
+  { 0x8700, 0xa31b, 0x2000 },
+  { 0x0700, 0xa31a, 0x0000 },
+  { 0x0700, 0xa31c, 0x0000 },
+  { 0x8700, 0xa325, 0x4000 },
+  { 0x8700, 0xa321, 0x3000 },
+  { 0x8700, 0xa31f, 0x2000 },
+  { 0x0700, 0xa31e, 0x0000 },
+  { 0x0700, 0xa320, 0x0000 },
+  { 0x8700, 0xa323, 0x2000 },
+  { 0x0700, 0xa322, 0x0000 },
+  { 0x0700, 0xa324, 0x0000 },
+  { 0x8700, 0xa329, 0x3000 },
+  { 0x8700, 0xa327, 0x2000 },
+  { 0x0700, 0xa326, 0x0000 },
+  { 0x0700, 0xa328, 0x0000 },
+  { 0x8700, 0xa32b, 0x2000 },
+  { 0x0700, 0xa32a, 0x0000 },
+  { 0x0700, 0xa32c, 0x0000 },
+  { 0x8700, 0xa33d, 0x5000 },
+  { 0x8700, 0xa335, 0x4000 },
+  { 0x8700, 0xa331, 0x3000 },
+  { 0x8700, 0xa32f, 0x2000 },
+  { 0x0700, 0xa32e, 0x0000 },
+  { 0x0700, 0xa330, 0x0000 },
+  { 0x8700, 0xa333, 0x2000 },
+  { 0x0700, 0xa332, 0x0000 },
+  { 0x0700, 0xa334, 0x0000 },
+  { 0x8700, 0xa339, 0x3000 },
+  { 0x8700, 0xa337, 0x2000 },
+  { 0x0700, 0xa336, 0x0000 },
+  { 0x0700, 0xa338, 0x0000 },
+  { 0x8700, 0xa33b, 0x2000 },
+  { 0x0700, 0xa33a, 0x0000 },
+  { 0x0700, 0xa33c, 0x0000 },
+  { 0x8700, 0xa345, 0x4000 },
+  { 0x8700, 0xa341, 0x3000 },
+  { 0x8700, 0xa33f, 0x2000 },
+  { 0x0700, 0xa33e, 0x0000 },
+  { 0x0700, 0xa340, 0x0000 },
+  { 0x8700, 0xa343, 0x2000 },
+  { 0x0700, 0xa342, 0x0000 },
+  { 0x0700, 0xa344, 0x0000 },
+  { 0x8700, 0xa349, 0x3000 },
+  { 0x8700, 0xa347, 0x2000 },
+  { 0x0700, 0xa346, 0x0000 },
+  { 0x0700, 0xa348, 0x0000 },
+  { 0x8700, 0xa34b, 0x2000 },
+  { 0x0700, 0xa34a, 0x0000 },
+  { 0x0700, 0xa34c, 0x0000 },
+  { 0x8700, 0xfc4d, 0xb000 },
+  { 0x8700, 0xf97f, 0xa000 },
+  { 0x8700, 0xa44d, 0x9000 },
+  { 0x8700, 0xa3cd, 0x8000 },
+  { 0x8700, 0xa38d, 0x7000 },
+  { 0x8700, 0xa36d, 0x6000 },
+  { 0x8700, 0xa35d, 0x5000 },
+  { 0x8700, 0xa355, 0x4000 },
+  { 0x8700, 0xa351, 0x3000 },
+  { 0x8700, 0xa34f, 0x2000 },
+  { 0x0700, 0xa34e, 0x0000 },
+  { 0x0700, 0xa350, 0x0000 },
+  { 0x8700, 0xa353, 0x2000 },
+  { 0x0700, 0xa352, 0x0000 },
+  { 0x0700, 0xa354, 0x0000 },
+  { 0x8700, 0xa359, 0x3000 },
+  { 0x8700, 0xa357, 0x2000 },
+  { 0x0700, 0xa356, 0x0000 },
+  { 0x0700, 0xa358, 0x0000 },
+  { 0x8700, 0xa35b, 0x2000 },
+  { 0x0700, 0xa35a, 0x0000 },
+  { 0x0700, 0xa35c, 0x0000 },
+  { 0x8700, 0xa365, 0x4000 },
+  { 0x8700, 0xa361, 0x3000 },
+  { 0x8700, 0xa35f, 0x2000 },
+  { 0x0700, 0xa35e, 0x0000 },
+  { 0x0700, 0xa360, 0x0000 },
+  { 0x8700, 0xa363, 0x2000 },
+  { 0x0700, 0xa362, 0x0000 },
+  { 0x0700, 0xa364, 0x0000 },
+  { 0x8700, 0xa369, 0x3000 },
+  { 0x8700, 0xa367, 0x2000 },
+  { 0x0700, 0xa366, 0x0000 },
+  { 0x0700, 0xa368, 0x0000 },
+  { 0x8700, 0xa36b, 0x2000 },
+  { 0x0700, 0xa36a, 0x0000 },
+  { 0x0700, 0xa36c, 0x0000 },
+  { 0x8700, 0xa37d, 0x5000 },
+  { 0x8700, 0xa375, 0x4000 },
+  { 0x8700, 0xa371, 0x3000 },
+  { 0x8700, 0xa36f, 0x2000 },
+  { 0x0700, 0xa36e, 0x0000 },
+  { 0x0700, 0xa370, 0x0000 },
+  { 0x8700, 0xa373, 0x2000 },
+  { 0x0700, 0xa372, 0x0000 },
+  { 0x0700, 0xa374, 0x0000 },
+  { 0x8700, 0xa379, 0x3000 },
+  { 0x8700, 0xa377, 0x2000 },
+  { 0x0700, 0xa376, 0x0000 },
+  { 0x0700, 0xa378, 0x0000 },
+  { 0x8700, 0xa37b, 0x2000 },
+  { 0x0700, 0xa37a, 0x0000 },
+  { 0x0700, 0xa37c, 0x0000 },
+  { 0x8700, 0xa385, 0x4000 },
+  { 0x8700, 0xa381, 0x3000 },
+  { 0x8700, 0xa37f, 0x2000 },
+  { 0x0700, 0xa37e, 0x0000 },
+  { 0x0700, 0xa380, 0x0000 },
+  { 0x8700, 0xa383, 0x2000 },
+  { 0x0700, 0xa382, 0x0000 },
+  { 0x0700, 0xa384, 0x0000 },
+  { 0x8700, 0xa389, 0x3000 },
+  { 0x8700, 0xa387, 0x2000 },
+  { 0x0700, 0xa386, 0x0000 },
+  { 0x0700, 0xa388, 0x0000 },
+  { 0x8700, 0xa38b, 0x2000 },
+  { 0x0700, 0xa38a, 0x0000 },
+  { 0x0700, 0xa38c, 0x0000 },
+  { 0x8700, 0xa3ad, 0x6000 },
+  { 0x8700, 0xa39d, 0x5000 },
+  { 0x8700, 0xa395, 0x4000 },
+  { 0x8700, 0xa391, 0x3000 },
+  { 0x8700, 0xa38f, 0x2000 },
+  { 0x0700, 0xa38e, 0x0000 },
+  { 0x0700, 0xa390, 0x0000 },
+  { 0x8700, 0xa393, 0x2000 },
+  { 0x0700, 0xa392, 0x0000 },
+  { 0x0700, 0xa394, 0x0000 },
+  { 0x8700, 0xa399, 0x3000 },
+  { 0x8700, 0xa397, 0x2000 },
+  { 0x0700, 0xa396, 0x0000 },
+  { 0x0700, 0xa398, 0x0000 },
+  { 0x8700, 0xa39b, 0x2000 },
+  { 0x0700, 0xa39a, 0x0000 },
+  { 0x0700, 0xa39c, 0x0000 },
+  { 0x8700, 0xa3a5, 0x4000 },
+  { 0x8700, 0xa3a1, 0x3000 },
+  { 0x8700, 0xa39f, 0x2000 },
+  { 0x0700, 0xa39e, 0x0000 },
+  { 0x0700, 0xa3a0, 0x0000 },
+  { 0x8700, 0xa3a3, 0x2000 },
+  { 0x0700, 0xa3a2, 0x0000 },
+  { 0x0700, 0xa3a4, 0x0000 },
+  { 0x8700, 0xa3a9, 0x3000 },
+  { 0x8700, 0xa3a7, 0x2000 },
+  { 0x0700, 0xa3a6, 0x0000 },
+  { 0x0700, 0xa3a8, 0x0000 },
+  { 0x8700, 0xa3ab, 0x2000 },
+  { 0x0700, 0xa3aa, 0x0000 },
+  { 0x0700, 0xa3ac, 0x0000 },
+  { 0x8700, 0xa3bd, 0x5000 },
+  { 0x8700, 0xa3b5, 0x4000 },
+  { 0x8700, 0xa3b1, 0x3000 },
+  { 0x8700, 0xa3af, 0x2000 },
+  { 0x0700, 0xa3ae, 0x0000 },
+  { 0x0700, 0xa3b0, 0x0000 },
+  { 0x8700, 0xa3b3, 0x2000 },
+  { 0x0700, 0xa3b2, 0x0000 },
+  { 0x0700, 0xa3b4, 0x0000 },
+  { 0x8700, 0xa3b9, 0x3000 },
+  { 0x8700, 0xa3b7, 0x2000 },
+  { 0x0700, 0xa3b6, 0x0000 },
+  { 0x0700, 0xa3b8, 0x0000 },
+  { 0x8700, 0xa3bb, 0x2000 },
+  { 0x0700, 0xa3ba, 0x0000 },
+  { 0x0700, 0xa3bc, 0x0000 },
+  { 0x8700, 0xa3c5, 0x4000 },
+  { 0x8700, 0xa3c1, 0x3000 },
+  { 0x8700, 0xa3bf, 0x2000 },
+  { 0x0700, 0xa3be, 0x0000 },
+  { 0x0700, 0xa3c0, 0x0000 },
+  { 0x8700, 0xa3c3, 0x2000 },
+  { 0x0700, 0xa3c2, 0x0000 },
+  { 0x0700, 0xa3c4, 0x0000 },
+  { 0x8700, 0xa3c9, 0x3000 },
+  { 0x8700, 0xa3c7, 0x2000 },
+  { 0x0700, 0xa3c6, 0x0000 },
+  { 0x0700, 0xa3c8, 0x0000 },
+  { 0x8700, 0xa3cb, 0x2000 },
+  { 0x0700, 0xa3ca, 0x0000 },
+  { 0x0700, 0xa3cc, 0x0000 },
+  { 0x8700, 0xa40d, 0x7000 },
+  { 0x8700, 0xa3ed, 0x6000 },
+  { 0x8700, 0xa3dd, 0x5000 },
+  { 0x8700, 0xa3d5, 0x4000 },
+  { 0x8700, 0xa3d1, 0x3000 },
+  { 0x8700, 0xa3cf, 0x2000 },
+  { 0x0700, 0xa3ce, 0x0000 },
+  { 0x0700, 0xa3d0, 0x0000 },
+  { 0x8700, 0xa3d3, 0x2000 },
+  { 0x0700, 0xa3d2, 0x0000 },
+  { 0x0700, 0xa3d4, 0x0000 },
+  { 0x8700, 0xa3d9, 0x3000 },
+  { 0x8700, 0xa3d7, 0x2000 },
+  { 0x0700, 0xa3d6, 0x0000 },
+  { 0x0700, 0xa3d8, 0x0000 },
+  { 0x8700, 0xa3db, 0x2000 },
+  { 0x0700, 0xa3da, 0x0000 },
+  { 0x0700, 0xa3dc, 0x0000 },
+  { 0x8700, 0xa3e5, 0x4000 },
+  { 0x8700, 0xa3e1, 0x3000 },
+  { 0x8700, 0xa3df, 0x2000 },
+  { 0x0700, 0xa3de, 0x0000 },
+  { 0x0700, 0xa3e0, 0x0000 },
+  { 0x8700, 0xa3e3, 0x2000 },
+  { 0x0700, 0xa3e2, 0x0000 },
+  { 0x0700, 0xa3e4, 0x0000 },
+  { 0x8700, 0xa3e9, 0x3000 },
+  { 0x8700, 0xa3e7, 0x2000 },
+  { 0x0700, 0xa3e6, 0x0000 },
+  { 0x0700, 0xa3e8, 0x0000 },
+  { 0x8700, 0xa3eb, 0x2000 },
+  { 0x0700, 0xa3ea, 0x0000 },
+  { 0x0700, 0xa3ec, 0x0000 },
+  { 0x8700, 0xa3fd, 0x5000 },
+  { 0x8700, 0xa3f5, 0x4000 },
+  { 0x8700, 0xa3f1, 0x3000 },
+  { 0x8700, 0xa3ef, 0x2000 },
+  { 0x0700, 0xa3ee, 0x0000 },
+  { 0x0700, 0xa3f0, 0x0000 },
+  { 0x8700, 0xa3f3, 0x2000 },
+  { 0x0700, 0xa3f2, 0x0000 },
+  { 0x0700, 0xa3f4, 0x0000 },
+  { 0x8700, 0xa3f9, 0x3000 },
+  { 0x8700, 0xa3f7, 0x2000 },
+  { 0x0700, 0xa3f6, 0x0000 },
+  { 0x0700, 0xa3f8, 0x0000 },
+  { 0x8700, 0xa3fb, 0x2000 },
+  { 0x0700, 0xa3fa, 0x0000 },
+  { 0x0700, 0xa3fc, 0x0000 },
+  { 0x8700, 0xa405, 0x4000 },
+  { 0x8700, 0xa401, 0x3000 },
+  { 0x8700, 0xa3ff, 0x2000 },
+  { 0x0700, 0xa3fe, 0x0000 },
+  { 0x0700, 0xa400, 0x0000 },
+  { 0x8700, 0xa403, 0x2000 },
+  { 0x0700, 0xa402, 0x0000 },
+  { 0x0700, 0xa404, 0x0000 },
+  { 0x8700, 0xa409, 0x3000 },
+  { 0x8700, 0xa407, 0x2000 },
+  { 0x0700, 0xa406, 0x0000 },
+  { 0x0700, 0xa408, 0x0000 },
+  { 0x8700, 0xa40b, 0x2000 },
+  { 0x0700, 0xa40a, 0x0000 },
+  { 0x0700, 0xa40c, 0x0000 },
+  { 0x8700, 0xa42d, 0x6000 },
+  { 0x8700, 0xa41d, 0x5000 },
+  { 0x8700, 0xa415, 0x4000 },
+  { 0x8700, 0xa411, 0x3000 },
+  { 0x8700, 0xa40f, 0x2000 },
+  { 0x0700, 0xa40e, 0x0000 },
+  { 0x0700, 0xa410, 0x0000 },
+  { 0x8700, 0xa413, 0x2000 },
+  { 0x0700, 0xa412, 0x0000 },
+  { 0x0700, 0xa414, 0x0000 },
+  { 0x8700, 0xa419, 0x3000 },
+  { 0x8700, 0xa417, 0x2000 },
+  { 0x0700, 0xa416, 0x0000 },
+  { 0x0700, 0xa418, 0x0000 },
+  { 0x8700, 0xa41b, 0x2000 },
+  { 0x0700, 0xa41a, 0x0000 },
+  { 0x0700, 0xa41c, 0x0000 },
+  { 0x8700, 0xa425, 0x4000 },
+  { 0x8700, 0xa421, 0x3000 },
+  { 0x8700, 0xa41f, 0x2000 },
+  { 0x0700, 0xa41e, 0x0000 },
+  { 0x0700, 0xa420, 0x0000 },
+  { 0x8700, 0xa423, 0x2000 },
+  { 0x0700, 0xa422, 0x0000 },
+  { 0x0700, 0xa424, 0x0000 },
+  { 0x8700, 0xa429, 0x3000 },
+  { 0x8700, 0xa427, 0x2000 },
+  { 0x0700, 0xa426, 0x0000 },
+  { 0x0700, 0xa428, 0x0000 },
+  { 0x8700, 0xa42b, 0x2000 },
+  { 0x0700, 0xa42a, 0x0000 },
+  { 0x0700, 0xa42c, 0x0000 },
+  { 0x8700, 0xa43d, 0x5000 },
+  { 0x8700, 0xa435, 0x4000 },
+  { 0x8700, 0xa431, 0x3000 },
+  { 0x8700, 0xa42f, 0x2000 },
+  { 0x0700, 0xa42e, 0x0000 },
+  { 0x0700, 0xa430, 0x0000 },
+  { 0x8700, 0xa433, 0x2000 },
+  { 0x0700, 0xa432, 0x0000 },
+  { 0x0700, 0xa434, 0x0000 },
+  { 0x8700, 0xa439, 0x3000 },
+  { 0x8700, 0xa437, 0x2000 },
+  { 0x0700, 0xa436, 0x0000 },
+  { 0x0700, 0xa438, 0x0000 },
+  { 0x8700, 0xa43b, 0x2000 },
+  { 0x0700, 0xa43a, 0x0000 },
+  { 0x0700, 0xa43c, 0x0000 },
+  { 0x8700, 0xa445, 0x4000 },
+  { 0x8700, 0xa441, 0x3000 },
+  { 0x8700, 0xa43f, 0x2000 },
+  { 0x0700, 0xa43e, 0x0000 },
+  { 0x0700, 0xa440, 0x0000 },
+  { 0x8700, 0xa443, 0x2000 },
+  { 0x0700, 0xa442, 0x0000 },
+  { 0x0700, 0xa444, 0x0000 },
+  { 0x8700, 0xa449, 0x3000 },
+  { 0x8700, 0xa447, 0x2000 },
+  { 0x0700, 0xa446, 0x0000 },
+  { 0x0700, 0xa448, 0x0000 },
+  { 0x8700, 0xa44b, 0x2000 },
+  { 0x0700, 0xa44a, 0x0000 },
+  { 0x0700, 0xa44c, 0x0000 },
+  { 0x8300, 0xf8ff, 0x8000 },
+  { 0x9a00, 0xa490, 0x7000 },
+  { 0x8700, 0xa46d, 0x6000 },
+  { 0x8700, 0xa45d, 0x5000 },
+  { 0x8700, 0xa455, 0x4000 },
+  { 0x8700, 0xa451, 0x3000 },
+  { 0x8700, 0xa44f, 0x2000 },
+  { 0x0700, 0xa44e, 0x0000 },
+  { 0x0700, 0xa450, 0x0000 },
+  { 0x8700, 0xa453, 0x2000 },
+  { 0x0700, 0xa452, 0x0000 },
+  { 0x0700, 0xa454, 0x0000 },
+  { 0x8700, 0xa459, 0x3000 },
+  { 0x8700, 0xa457, 0x2000 },
+  { 0x0700, 0xa456, 0x0000 },
+  { 0x0700, 0xa458, 0x0000 },
+  { 0x8700, 0xa45b, 0x2000 },
+  { 0x0700, 0xa45a, 0x0000 },
+  { 0x0700, 0xa45c, 0x0000 },
+  { 0x8700, 0xa465, 0x4000 },
+  { 0x8700, 0xa461, 0x3000 },
+  { 0x8700, 0xa45f, 0x2000 },
+  { 0x0700, 0xa45e, 0x0000 },
+  { 0x0700, 0xa460, 0x0000 },
+  { 0x8700, 0xa463, 0x2000 },
+  { 0x0700, 0xa462, 0x0000 },
+  { 0x0700, 0xa464, 0x0000 },
+  { 0x8700, 0xa469, 0x3000 },
+  { 0x8700, 0xa467, 0x2000 },
+  { 0x0700, 0xa466, 0x0000 },
+  { 0x0700, 0xa468, 0x0000 },
+  { 0x8700, 0xa46b, 0x2000 },
+  { 0x0700, 0xa46a, 0x0000 },
+  { 0x0700, 0xa46c, 0x0000 },
+  { 0x8700, 0xa47d, 0x5000 },
+  { 0x8700, 0xa475, 0x4000 },
+  { 0x8700, 0xa471, 0x3000 },
+  { 0x8700, 0xa46f, 0x2000 },
+  { 0x0700, 0xa46e, 0x0000 },
+  { 0x0700, 0xa470, 0x0000 },
+  { 0x8700, 0xa473, 0x2000 },
+  { 0x0700, 0xa472, 0x0000 },
+  { 0x0700, 0xa474, 0x0000 },
+  { 0x8700, 0xa479, 0x3000 },
+  { 0x8700, 0xa477, 0x2000 },
+  { 0x0700, 0xa476, 0x0000 },
+  { 0x0700, 0xa478, 0x0000 },
+  { 0x8700, 0xa47b, 0x2000 },
+  { 0x0700, 0xa47a, 0x0000 },
+  { 0x0700, 0xa47c, 0x0000 },
+  { 0x8700, 0xa485, 0x4000 },
+  { 0x8700, 0xa481, 0x3000 },
+  { 0x8700, 0xa47f, 0x2000 },
+  { 0x0700, 0xa47e, 0x0000 },
+  { 0x0700, 0xa480, 0x0000 },
+  { 0x8700, 0xa483, 0x2000 },
+  { 0x0700, 0xa482, 0x0000 },
+  { 0x0700, 0xa484, 0x0000 },
+  { 0x8700, 0xa489, 0x3000 },
+  { 0x8700, 0xa487, 0x2000 },
+  { 0x0700, 0xa486, 0x0000 },
+  { 0x0700, 0xa488, 0x0000 },
+  { 0x8700, 0xa48b, 0x2000 },
+  { 0x0700, 0xa48a, 0x0000 },
+  { 0x0700, 0xa48c, 0x0000 },
+  { 0x9a00, 0xa4b0, 0x6000 },
+  { 0x9a00, 0xa4a0, 0x5000 },
+  { 0x9a00, 0xa498, 0x4000 },
+  { 0x9a00, 0xa494, 0x3000 },
+  { 0x9a00, 0xa492, 0x2000 },
+  { 0x1a00, 0xa491, 0x0000 },
+  { 0x1a00, 0xa493, 0x0000 },
+  { 0x9a00, 0xa496, 0x2000 },
+  { 0x1a00, 0xa495, 0x0000 },
+  { 0x1a00, 0xa497, 0x0000 },
+  { 0x9a00, 0xa49c, 0x3000 },
+  { 0x9a00, 0xa49a, 0x2000 },
+  { 0x1a00, 0xa499, 0x0000 },
+  { 0x1a00, 0xa49b, 0x0000 },
+  { 0x9a00, 0xa49e, 0x2000 },
+  { 0x1a00, 0xa49d, 0x0000 },
+  { 0x1a00, 0xa49f, 0x0000 },
+  { 0x9a00, 0xa4a8, 0x4000 },
+  { 0x9a00, 0xa4a4, 0x3000 },
+  { 0x9a00, 0xa4a2, 0x2000 },
+  { 0x1a00, 0xa4a1, 0x0000 },
+  { 0x1a00, 0xa4a3, 0x0000 },
+  { 0x9a00, 0xa4a6, 0x2000 },
+  { 0x1a00, 0xa4a5, 0x0000 },
+  { 0x1a00, 0xa4a7, 0x0000 },
+  { 0x9a00, 0xa4ac, 0x3000 },
+  { 0x9a00, 0xa4aa, 0x2000 },
+  { 0x1a00, 0xa4a9, 0x0000 },
+  { 0x1a00, 0xa4ab, 0x0000 },
+  { 0x9a00, 0xa4ae, 0x2000 },
+  { 0x1a00, 0xa4ad, 0x0000 },
+  { 0x1a00, 0xa4af, 0x0000 },
+  { 0x9a00, 0xa4c0, 0x5000 },
+  { 0x9a00, 0xa4b8, 0x4000 },
+  { 0x9a00, 0xa4b4, 0x3000 },
+  { 0x9a00, 0xa4b2, 0x2000 },
+  { 0x1a00, 0xa4b1, 0x0000 },
+  { 0x1a00, 0xa4b3, 0x0000 },
+  { 0x9a00, 0xa4b6, 0x2000 },
+  { 0x1a00, 0xa4b5, 0x0000 },
+  { 0x1a00, 0xa4b7, 0x0000 },
+  { 0x9a00, 0xa4bc, 0x3000 },
+  { 0x9a00, 0xa4ba, 0x2000 },
+  { 0x1a00, 0xa4b9, 0x0000 },
+  { 0x1a00, 0xa4bb, 0x0000 },
+  { 0x9a00, 0xa4be, 0x2000 },
+  { 0x1a00, 0xa4bd, 0x0000 },
+  { 0x1a00, 0xa4bf, 0x0000 },
+  { 0x8700, 0xd7a3, 0x4000 },
+  { 0x9a00, 0xa4c4, 0x3000 },
+  { 0x9a00, 0xa4c2, 0x2000 },
+  { 0x1a00, 0xa4c1, 0x0000 },
+  { 0x1a00, 0xa4c3, 0x0000 },
+  { 0x9a00, 0xa4c6, 0x2000 },
+  { 0x1a00, 0xa4c5, 0x0000 },
+  { 0x0700, 0xac00, 0x0000 },
+  { 0x8400, 0xdbff, 0x3000 },
+  { 0x8400, 0xdb7f, 0x2000 },
+  { 0x0400, 0xd800, 0x0000 },
+  { 0x0400, 0xdb80, 0x0000 },
+  { 0x8400, 0xdfff, 0x2000 },
+  { 0x0400, 0xdc00, 0x0000 },
+  { 0x0300, 0xe000, 0x0000 },
+  { 0x8700, 0xf93f, 0x7000 },
+  { 0x8700, 0xf91f, 0x6000 },
+  { 0x8700, 0xf90f, 0x5000 },
+  { 0x8700, 0xf907, 0x4000 },
+  { 0x8700, 0xf903, 0x3000 },
+  { 0x8700, 0xf901, 0x2000 },
+  { 0x0700, 0xf900, 0x0000 },
+  { 0x0700, 0xf902, 0x0000 },
+  { 0x8700, 0xf905, 0x2000 },
+  { 0x0700, 0xf904, 0x0000 },
+  { 0x0700, 0xf906, 0x0000 },
+  { 0x8700, 0xf90b, 0x3000 },
+  { 0x8700, 0xf909, 0x2000 },
+  { 0x0700, 0xf908, 0x0000 },
+  { 0x0700, 0xf90a, 0x0000 },
+  { 0x8700, 0xf90d, 0x2000 },
+  { 0x0700, 0xf90c, 0x0000 },
+  { 0x0700, 0xf90e, 0x0000 },
+  { 0x8700, 0xf917, 0x4000 },
+  { 0x8700, 0xf913, 0x3000 },
+  { 0x8700, 0xf911, 0x2000 },
+  { 0x0700, 0xf910, 0x0000 },
+  { 0x0700, 0xf912, 0x0000 },
+  { 0x8700, 0xf915, 0x2000 },
+  { 0x0700, 0xf914, 0x0000 },
+  { 0x0700, 0xf916, 0x0000 },
+  { 0x8700, 0xf91b, 0x3000 },
+  { 0x8700, 0xf919, 0x2000 },
+  { 0x0700, 0xf918, 0x0000 },
+  { 0x0700, 0xf91a, 0x0000 },
+  { 0x8700, 0xf91d, 0x2000 },
+  { 0x0700, 0xf91c, 0x0000 },
+  { 0x0700, 0xf91e, 0x0000 },
+  { 0x8700, 0xf92f, 0x5000 },
+  { 0x8700, 0xf927, 0x4000 },
+  { 0x8700, 0xf923, 0x3000 },
+  { 0x8700, 0xf921, 0x2000 },
+  { 0x0700, 0xf920, 0x0000 },
+  { 0x0700, 0xf922, 0x0000 },
+  { 0x8700, 0xf925, 0x2000 },
+  { 0x0700, 0xf924, 0x0000 },
+  { 0x0700, 0xf926, 0x0000 },
+  { 0x8700, 0xf92b, 0x3000 },
+  { 0x8700, 0xf929, 0x2000 },
+  { 0x0700, 0xf928, 0x0000 },
+  { 0x0700, 0xf92a, 0x0000 },
+  { 0x8700, 0xf92d, 0x2000 },
+  { 0x0700, 0xf92c, 0x0000 },
+  { 0x0700, 0xf92e, 0x0000 },
+  { 0x8700, 0xf937, 0x4000 },
+  { 0x8700, 0xf933, 0x3000 },
+  { 0x8700, 0xf931, 0x2000 },
+  { 0x0700, 0xf930, 0x0000 },
+  { 0x0700, 0xf932, 0x0000 },
+  { 0x8700, 0xf935, 0x2000 },
+  { 0x0700, 0xf934, 0x0000 },
+  { 0x0700, 0xf936, 0x0000 },
+  { 0x8700, 0xf93b, 0x3000 },
+  { 0x8700, 0xf939, 0x2000 },
+  { 0x0700, 0xf938, 0x0000 },
+  { 0x0700, 0xf93a, 0x0000 },
+  { 0x8700, 0xf93d, 0x2000 },
+  { 0x0700, 0xf93c, 0x0000 },
+  { 0x0700, 0xf93e, 0x0000 },
+  { 0x8700, 0xf95f, 0x6000 },
+  { 0x8700, 0xf94f, 0x5000 },
+  { 0x8700, 0xf947, 0x4000 },
+  { 0x8700, 0xf943, 0x3000 },
+  { 0x8700, 0xf941, 0x2000 },
+  { 0x0700, 0xf940, 0x0000 },
+  { 0x0700, 0xf942, 0x0000 },
+  { 0x8700, 0xf945, 0x2000 },
+  { 0x0700, 0xf944, 0x0000 },
+  { 0x0700, 0xf946, 0x0000 },
+  { 0x8700, 0xf94b, 0x3000 },
+  { 0x8700, 0xf949, 0x2000 },
+  { 0x0700, 0xf948, 0x0000 },
+  { 0x0700, 0xf94a, 0x0000 },
+  { 0x8700, 0xf94d, 0x2000 },
+  { 0x0700, 0xf94c, 0x0000 },
+  { 0x0700, 0xf94e, 0x0000 },
+  { 0x8700, 0xf957, 0x4000 },
+  { 0x8700, 0xf953, 0x3000 },
+  { 0x8700, 0xf951, 0x2000 },
+  { 0x0700, 0xf950, 0x0000 },
+  { 0x0700, 0xf952, 0x0000 },
+  { 0x8700, 0xf955, 0x2000 },
+  { 0x0700, 0xf954, 0x0000 },
+  { 0x0700, 0xf956, 0x0000 },
+  { 0x8700, 0xf95b, 0x3000 },
+  { 0x8700, 0xf959, 0x2000 },
+  { 0x0700, 0xf958, 0x0000 },
+  { 0x0700, 0xf95a, 0x0000 },
+  { 0x8700, 0xf95d, 0x2000 },
+  { 0x0700, 0xf95c, 0x0000 },
+  { 0x0700, 0xf95e, 0x0000 },
+  { 0x8700, 0xf96f, 0x5000 },
+  { 0x8700, 0xf967, 0x4000 },
+  { 0x8700, 0xf963, 0x3000 },
+  { 0x8700, 0xf961, 0x2000 },
+  { 0x0700, 0xf960, 0x0000 },
+  { 0x0700, 0xf962, 0x0000 },
+  { 0x8700, 0xf965, 0x2000 },
+  { 0x0700, 0xf964, 0x0000 },
+  { 0x0700, 0xf966, 0x0000 },
+  { 0x8700, 0xf96b, 0x3000 },
+  { 0x8700, 0xf969, 0x2000 },
+  { 0x0700, 0xf968, 0x0000 },
+  { 0x0700, 0xf96a, 0x0000 },
+  { 0x8700, 0xf96d, 0x2000 },
+  { 0x0700, 0xf96c, 0x0000 },
+  { 0x0700, 0xf96e, 0x0000 },
+  { 0x8700, 0xf977, 0x4000 },
+  { 0x8700, 0xf973, 0x3000 },
+  { 0x8700, 0xf971, 0x2000 },
+  { 0x0700, 0xf970, 0x0000 },
+  { 0x0700, 0xf972, 0x0000 },
+  { 0x8700, 0xf975, 0x2000 },
+  { 0x0700, 0xf974, 0x0000 },
+  { 0x0700, 0xf976, 0x0000 },
+  { 0x8700, 0xf97b, 0x3000 },
+  { 0x8700, 0xf979, 0x2000 },
+  { 0x0700, 0xf978, 0x0000 },
+  { 0x0700, 0xf97a, 0x0000 },
+  { 0x8700, 0xf97d, 0x2000 },
+  { 0x0700, 0xf97c, 0x0000 },
+  { 0x0700, 0xf97e, 0x0000 },
+  { 0x8700, 0xfb27, 0x9000 },
+  { 0x8700, 0xf9ff, 0x8000 },
+  { 0x8700, 0xf9bf, 0x7000 },
+  { 0x8700, 0xf99f, 0x6000 },
+  { 0x8700, 0xf98f, 0x5000 },
+  { 0x8700, 0xf987, 0x4000 },
+  { 0x8700, 0xf983, 0x3000 },
+  { 0x8700, 0xf981, 0x2000 },
+  { 0x0700, 0xf980, 0x0000 },
+  { 0x0700, 0xf982, 0x0000 },
+  { 0x8700, 0xf985, 0x2000 },
+  { 0x0700, 0xf984, 0x0000 },
+  { 0x0700, 0xf986, 0x0000 },
+  { 0x8700, 0xf98b, 0x3000 },
+  { 0x8700, 0xf989, 0x2000 },
+  { 0x0700, 0xf988, 0x0000 },
+  { 0x0700, 0xf98a, 0x0000 },
+  { 0x8700, 0xf98d, 0x2000 },
+  { 0x0700, 0xf98c, 0x0000 },
+  { 0x0700, 0xf98e, 0x0000 },
+  { 0x8700, 0xf997, 0x4000 },
+  { 0x8700, 0xf993, 0x3000 },
+  { 0x8700, 0xf991, 0x2000 },
+  { 0x0700, 0xf990, 0x0000 },
+  { 0x0700, 0xf992, 0x0000 },
+  { 0x8700, 0xf995, 0x2000 },
+  { 0x0700, 0xf994, 0x0000 },
+  { 0x0700, 0xf996, 0x0000 },
+  { 0x8700, 0xf99b, 0x3000 },
+  { 0x8700, 0xf999, 0x2000 },
+  { 0x0700, 0xf998, 0x0000 },
+  { 0x0700, 0xf99a, 0x0000 },
+  { 0x8700, 0xf99d, 0x2000 },
+  { 0x0700, 0xf99c, 0x0000 },
+  { 0x0700, 0xf99e, 0x0000 },
+  { 0x8700, 0xf9af, 0x5000 },
+  { 0x8700, 0xf9a7, 0x4000 },
+  { 0x8700, 0xf9a3, 0x3000 },
+  { 0x8700, 0xf9a1, 0x2000 },
+  { 0x0700, 0xf9a0, 0x0000 },
+  { 0x0700, 0xf9a2, 0x0000 },
+  { 0x8700, 0xf9a5, 0x2000 },
+  { 0x0700, 0xf9a4, 0x0000 },
+  { 0x0700, 0xf9a6, 0x0000 },
+  { 0x8700, 0xf9ab, 0x3000 },
+  { 0x8700, 0xf9a9, 0x2000 },
+  { 0x0700, 0xf9a8, 0x0000 },
+  { 0x0700, 0xf9aa, 0x0000 },
+  { 0x8700, 0xf9ad, 0x2000 },
+  { 0x0700, 0xf9ac, 0x0000 },
+  { 0x0700, 0xf9ae, 0x0000 },
+  { 0x8700, 0xf9b7, 0x4000 },
+  { 0x8700, 0xf9b3, 0x3000 },
+  { 0x8700, 0xf9b1, 0x2000 },
+  { 0x0700, 0xf9b0, 0x0000 },
+  { 0x0700, 0xf9b2, 0x0000 },
+  { 0x8700, 0xf9b5, 0x2000 },
+  { 0x0700, 0xf9b4, 0x0000 },
+  { 0x0700, 0xf9b6, 0x0000 },
+  { 0x8700, 0xf9bb, 0x3000 },
+  { 0x8700, 0xf9b9, 0x2000 },
+  { 0x0700, 0xf9b8, 0x0000 },
+  { 0x0700, 0xf9ba, 0x0000 },
+  { 0x8700, 0xf9bd, 0x2000 },
+  { 0x0700, 0xf9bc, 0x0000 },
+  { 0x0700, 0xf9be, 0x0000 },
+  { 0x8700, 0xf9df, 0x6000 },
+  { 0x8700, 0xf9cf, 0x5000 },
+  { 0x8700, 0xf9c7, 0x4000 },
+  { 0x8700, 0xf9c3, 0x3000 },
+  { 0x8700, 0xf9c1, 0x2000 },
+  { 0x0700, 0xf9c0, 0x0000 },
+  { 0x0700, 0xf9c2, 0x0000 },
+  { 0x8700, 0xf9c5, 0x2000 },
+  { 0x0700, 0xf9c4, 0x0000 },
+  { 0x0700, 0xf9c6, 0x0000 },
+  { 0x8700, 0xf9cb, 0x3000 },
+  { 0x8700, 0xf9c9, 0x2000 },
+  { 0x0700, 0xf9c8, 0x0000 },
+  { 0x0700, 0xf9ca, 0x0000 },
+  { 0x8700, 0xf9cd, 0x2000 },
+  { 0x0700, 0xf9cc, 0x0000 },
+  { 0x0700, 0xf9ce, 0x0000 },
+  { 0x8700, 0xf9d7, 0x4000 },
+  { 0x8700, 0xf9d3, 0x3000 },
+  { 0x8700, 0xf9d1, 0x2000 },
+  { 0x0700, 0xf9d0, 0x0000 },
+  { 0x0700, 0xf9d2, 0x0000 },
+  { 0x8700, 0xf9d5, 0x2000 },
+  { 0x0700, 0xf9d4, 0x0000 },
+  { 0x0700, 0xf9d6, 0x0000 },
+  { 0x8700, 0xf9db, 0x3000 },
+  { 0x8700, 0xf9d9, 0x2000 },
+  { 0x0700, 0xf9d8, 0x0000 },
+  { 0x0700, 0xf9da, 0x0000 },
+  { 0x8700, 0xf9dd, 0x2000 },
+  { 0x0700, 0xf9dc, 0x0000 },
+  { 0x0700, 0xf9de, 0x0000 },
+  { 0x8700, 0xf9ef, 0x5000 },
+  { 0x8700, 0xf9e7, 0x4000 },
+  { 0x8700, 0xf9e3, 0x3000 },
+  { 0x8700, 0xf9e1, 0x2000 },
+  { 0x0700, 0xf9e0, 0x0000 },
+  { 0x0700, 0xf9e2, 0x0000 },
+  { 0x8700, 0xf9e5, 0x2000 },
+  { 0x0700, 0xf9e4, 0x0000 },
+  { 0x0700, 0xf9e6, 0x0000 },
+  { 0x8700, 0xf9eb, 0x3000 },
+  { 0x8700, 0xf9e9, 0x2000 },
+  { 0x0700, 0xf9e8, 0x0000 },
+  { 0x0700, 0xf9ea, 0x0000 },
+  { 0x8700, 0xf9ed, 0x2000 },
+  { 0x0700, 0xf9ec, 0x0000 },
+  { 0x0700, 0xf9ee, 0x0000 },
+  { 0x8700, 0xf9f7, 0x4000 },
+  { 0x8700, 0xf9f3, 0x3000 },
+  { 0x8700, 0xf9f1, 0x2000 },
+  { 0x0700, 0xf9f0, 0x0000 },
+  { 0x0700, 0xf9f2, 0x0000 },
+  { 0x8700, 0xf9f5, 0x2000 },
+  { 0x0700, 0xf9f4, 0x0000 },
+  { 0x0700, 0xf9f6, 0x0000 },
+  { 0x8700, 0xf9fb, 0x3000 },
+  { 0x8700, 0xf9f9, 0x2000 },
+  { 0x0700, 0xf9f8, 0x0000 },
+  { 0x0700, 0xf9fa, 0x0000 },
+  { 0x8700, 0xf9fd, 0x2000 },
+  { 0x0700, 0xf9fc, 0x0000 },
+  { 0x0700, 0xf9fe, 0x0000 },
+  { 0x8700, 0xfa41, 0x7000 },
+  { 0x8700, 0xfa1f, 0x6000 },
+  { 0x8700, 0xfa0f, 0x5000 },
+  { 0x8700, 0xfa07, 0x4000 },
+  { 0x8700, 0xfa03, 0x3000 },
+  { 0x8700, 0xfa01, 0x2000 },
+  { 0x0700, 0xfa00, 0x0000 },
+  { 0x0700, 0xfa02, 0x0000 },
+  { 0x8700, 0xfa05, 0x2000 },
+  { 0x0700, 0xfa04, 0x0000 },
+  { 0x0700, 0xfa06, 0x0000 },
+  { 0x8700, 0xfa0b, 0x3000 },
+  { 0x8700, 0xfa09, 0x2000 },
+  { 0x0700, 0xfa08, 0x0000 },
+  { 0x0700, 0xfa0a, 0x0000 },
+  { 0x8700, 0xfa0d, 0x2000 },
+  { 0x0700, 0xfa0c, 0x0000 },
+  { 0x0700, 0xfa0e, 0x0000 },
+  { 0x8700, 0xfa17, 0x4000 },
+  { 0x8700, 0xfa13, 0x3000 },
+  { 0x8700, 0xfa11, 0x2000 },
+  { 0x0700, 0xfa10, 0x0000 },
+  { 0x0700, 0xfa12, 0x0000 },
+  { 0x8700, 0xfa15, 0x2000 },
+  { 0x0700, 0xfa14, 0x0000 },
+  { 0x0700, 0xfa16, 0x0000 },
+  { 0x8700, 0xfa1b, 0x3000 },
+  { 0x8700, 0xfa19, 0x2000 },
+  { 0x0700, 0xfa18, 0x0000 },
+  { 0x0700, 0xfa1a, 0x0000 },
+  { 0x8700, 0xfa1d, 0x2000 },
+  { 0x0700, 0xfa1c, 0x0000 },
+  { 0x0700, 0xfa1e, 0x0000 },
+  { 0x8700, 0xfa31, 0x5000 },
+  { 0x8700, 0xfa27, 0x4000 },
+  { 0x8700, 0xfa23, 0x3000 },
+  { 0x8700, 0xfa21, 0x2000 },
+  { 0x0700, 0xfa20, 0x0000 },
+  { 0x0700, 0xfa22, 0x0000 },
+  { 0x8700, 0xfa25, 0x2000 },
+  { 0x0700, 0xfa24, 0x0000 },
+  { 0x0700, 0xfa26, 0x0000 },
+  { 0x8700, 0xfa2b, 0x3000 },
+  { 0x8700, 0xfa29, 0x2000 },
+  { 0x0700, 0xfa28, 0x0000 },
+  { 0x0700, 0xfa2a, 0x0000 },
+  { 0x8700, 0xfa2d, 0x2000 },
+  { 0x0700, 0xfa2c, 0x0000 },
+  { 0x0700, 0xfa30, 0x0000 },
+  { 0x8700, 0xfa39, 0x4000 },
+  { 0x8700, 0xfa35, 0x3000 },
+  { 0x8700, 0xfa33, 0x2000 },
+  { 0x0700, 0xfa32, 0x0000 },
+  { 0x0700, 0xfa34, 0x0000 },
+  { 0x8700, 0xfa37, 0x2000 },
+  { 0x0700, 0xfa36, 0x0000 },
+  { 0x0700, 0xfa38, 0x0000 },
+  { 0x8700, 0xfa3d, 0x3000 },
+  { 0x8700, 0xfa3b, 0x2000 },
+  { 0x0700, 0xfa3a, 0x0000 },
+  { 0x0700, 0xfa3c, 0x0000 },
+  { 0x8700, 0xfa3f, 0x2000 },
+  { 0x0700, 0xfa3e, 0x0000 },
+  { 0x0700, 0xfa40, 0x0000 },
+  { 0x8700, 0xfa61, 0x6000 },
+  { 0x8700, 0xfa51, 0x5000 },
+  { 0x8700, 0xfa49, 0x4000 },
+  { 0x8700, 0xfa45, 0x3000 },
+  { 0x8700, 0xfa43, 0x2000 },
+  { 0x0700, 0xfa42, 0x0000 },
+  { 0x0700, 0xfa44, 0x0000 },
+  { 0x8700, 0xfa47, 0x2000 },
+  { 0x0700, 0xfa46, 0x0000 },
+  { 0x0700, 0xfa48, 0x0000 },
+  { 0x8700, 0xfa4d, 0x3000 },
+  { 0x8700, 0xfa4b, 0x2000 },
+  { 0x0700, 0xfa4a, 0x0000 },
+  { 0x0700, 0xfa4c, 0x0000 },
+  { 0x8700, 0xfa4f, 0x2000 },
+  { 0x0700, 0xfa4e, 0x0000 },
+  { 0x0700, 0xfa50, 0x0000 },
+  { 0x8700, 0xfa59, 0x4000 },
+  { 0x8700, 0xfa55, 0x3000 },
+  { 0x8700, 0xfa53, 0x2000 },
+  { 0x0700, 0xfa52, 0x0000 },
+  { 0x0700, 0xfa54, 0x0000 },
+  { 0x8700, 0xfa57, 0x2000 },
+  { 0x0700, 0xfa56, 0x0000 },
+  { 0x0700, 0xfa58, 0x0000 },
+  { 0x8700, 0xfa5d, 0x3000 },
+  { 0x8700, 0xfa5b, 0x2000 },
+  { 0x0700, 0xfa5a, 0x0000 },
+  { 0x0700, 0xfa5c, 0x0000 },
+  { 0x8700, 0xfa5f, 0x2000 },
+  { 0x0700, 0xfa5e, 0x0000 },
+  { 0x0700, 0xfa60, 0x0000 },
+  { 0x8500, 0xfb06, 0x5000 },
+  { 0x8700, 0xfa69, 0x4000 },
+  { 0x8700, 0xfa65, 0x3000 },
+  { 0x8700, 0xfa63, 0x2000 },
+  { 0x0700, 0xfa62, 0x0000 },
+  { 0x0700, 0xfa64, 0x0000 },
+  { 0x8700, 0xfa67, 0x2000 },
+  { 0x0700, 0xfa66, 0x0000 },
+  { 0x0700, 0xfa68, 0x0000 },
+  { 0x8500, 0xfb02, 0x3000 },
+  { 0x8500, 0xfb00, 0x2000 },
+  { 0x0700, 0xfa6a, 0x0000 },
+  { 0x0500, 0xfb01, 0x0000 },
+  { 0x8500, 0xfb04, 0x2000 },
+  { 0x0500, 0xfb03, 0x0000 },
+  { 0x0500, 0xfb05, 0x0000 },
+  { 0x8700, 0xfb1f, 0x4000 },
+  { 0x8500, 0xfb16, 0x3000 },
+  { 0x8500, 0xfb14, 0x2000 },
+  { 0x0500, 0xfb13, 0x0000 },
+  { 0x0500, 0xfb15, 0x0000 },
+  { 0x8700, 0xfb1d, 0x2000 },
+  { 0x0500, 0xfb17, 0x0000 },
+  { 0x0c00, 0xfb1e, 0x0000 },
+  { 0x8700, 0xfb23, 0x3000 },
+  { 0x8700, 0xfb21, 0x2000 },
+  { 0x0700, 0xfb20, 0x0000 },
+  { 0x0700, 0xfb22, 0x0000 },
+  { 0x8700, 0xfb25, 0x2000 },
+  { 0x0700, 0xfb24, 0x0000 },
+  { 0x0700, 0xfb26, 0x0000 },
+  { 0x8700, 0xfbac, 0x8000 },
+  { 0x8700, 0xfb6c, 0x7000 },
+  { 0x8700, 0xfb4c, 0x6000 },
+  { 0x8700, 0xfb38, 0x5000 },
+  { 0x8700, 0xfb2f, 0x4000 },
+  { 0x8700, 0xfb2b, 0x3000 },
+  { 0x9900, 0xfb29, 0x2000 },
+  { 0x0700, 0xfb28, 0x0000 },
+  { 0x0700, 0xfb2a, 0x0000 },
+  { 0x8700, 0xfb2d, 0x2000 },
+  { 0x0700, 0xfb2c, 0x0000 },
+  { 0x0700, 0xfb2e, 0x0000 },
+  { 0x8700, 0xfb33, 0x3000 },
+  { 0x8700, 0xfb31, 0x2000 },
+  { 0x0700, 0xfb30, 0x0000 },
+  { 0x0700, 0xfb32, 0x0000 },
+  { 0x8700, 0xfb35, 0x2000 },
+  { 0x0700, 0xfb34, 0x0000 },
+  { 0x0700, 0xfb36, 0x0000 },
+  { 0x8700, 0xfb43, 0x4000 },
+  { 0x8700, 0xfb3c, 0x3000 },
+  { 0x8700, 0xfb3a, 0x2000 },
+  { 0x0700, 0xfb39, 0x0000 },
+  { 0x0700, 0xfb3b, 0x0000 },
+  { 0x8700, 0xfb40, 0x2000 },
+  { 0x0700, 0xfb3e, 0x0000 },
+  { 0x0700, 0xfb41, 0x0000 },
+  { 0x8700, 0xfb48, 0x3000 },
+  { 0x8700, 0xfb46, 0x2000 },
+  { 0x0700, 0xfb44, 0x0000 },
+  { 0x0700, 0xfb47, 0x0000 },
+  { 0x8700, 0xfb4a, 0x2000 },
+  { 0x0700, 0xfb49, 0x0000 },
+  { 0x0700, 0xfb4b, 0x0000 },
+  { 0x8700, 0xfb5c, 0x5000 },
+  { 0x8700, 0xfb54, 0x4000 },
+  { 0x8700, 0xfb50, 0x3000 },
+  { 0x8700, 0xfb4e, 0x2000 },
+  { 0x0700, 0xfb4d, 0x0000 },
+  { 0x0700, 0xfb4f, 0x0000 },
+  { 0x8700, 0xfb52, 0x2000 },
+  { 0x0700, 0xfb51, 0x0000 },
+  { 0x0700, 0xfb53, 0x0000 },
+  { 0x8700, 0xfb58, 0x3000 },
+  { 0x8700, 0xfb56, 0x2000 },
+  { 0x0700, 0xfb55, 0x0000 },
+  { 0x0700, 0xfb57, 0x0000 },
+  { 0x8700, 0xfb5a, 0x2000 },
+  { 0x0700, 0xfb59, 0x0000 },
+  { 0x0700, 0xfb5b, 0x0000 },
+  { 0x8700, 0xfb64, 0x4000 },
+  { 0x8700, 0xfb60, 0x3000 },
+  { 0x8700, 0xfb5e, 0x2000 },
+  { 0x0700, 0xfb5d, 0x0000 },
+  { 0x0700, 0xfb5f, 0x0000 },
+  { 0x8700, 0xfb62, 0x2000 },
+  { 0x0700, 0xfb61, 0x0000 },
+  { 0x0700, 0xfb63, 0x0000 },
+  { 0x8700, 0xfb68, 0x3000 },
+  { 0x8700, 0xfb66, 0x2000 },
+  { 0x0700, 0xfb65, 0x0000 },
+  { 0x0700, 0xfb67, 0x0000 },
+  { 0x8700, 0xfb6a, 0x2000 },
+  { 0x0700, 0xfb69, 0x0000 },
+  { 0x0700, 0xfb6b, 0x0000 },
+  { 0x8700, 0xfb8c, 0x6000 },
+  { 0x8700, 0xfb7c, 0x5000 },
+  { 0x8700, 0xfb74, 0x4000 },
+  { 0x8700, 0xfb70, 0x3000 },
+  { 0x8700, 0xfb6e, 0x2000 },
+  { 0x0700, 0xfb6d, 0x0000 },
+  { 0x0700, 0xfb6f, 0x0000 },
+  { 0x8700, 0xfb72, 0x2000 },
+  { 0x0700, 0xfb71, 0x0000 },
+  { 0x0700, 0xfb73, 0x0000 },
+  { 0x8700, 0xfb78, 0x3000 },
+  { 0x8700, 0xfb76, 0x2000 },
+  { 0x0700, 0xfb75, 0x0000 },
+  { 0x0700, 0xfb77, 0x0000 },
+  { 0x8700, 0xfb7a, 0x2000 },
+  { 0x0700, 0xfb79, 0x0000 },
+  { 0x0700, 0xfb7b, 0x0000 },
+  { 0x8700, 0xfb84, 0x4000 },
+  { 0x8700, 0xfb80, 0x3000 },
+  { 0x8700, 0xfb7e, 0x2000 },
+  { 0x0700, 0xfb7d, 0x0000 },
+  { 0x0700, 0xfb7f, 0x0000 },
+  { 0x8700, 0xfb82, 0x2000 },
+  { 0x0700, 0xfb81, 0x0000 },
+  { 0x0700, 0xfb83, 0x0000 },
+  { 0x8700, 0xfb88, 0x3000 },
+  { 0x8700, 0xfb86, 0x2000 },
+  { 0x0700, 0xfb85, 0x0000 },
+  { 0x0700, 0xfb87, 0x0000 },
+  { 0x8700, 0xfb8a, 0x2000 },
+  { 0x0700, 0xfb89, 0x0000 },
+  { 0x0700, 0xfb8b, 0x0000 },
+  { 0x8700, 0xfb9c, 0x5000 },
+  { 0x8700, 0xfb94, 0x4000 },
+  { 0x8700, 0xfb90, 0x3000 },
+  { 0x8700, 0xfb8e, 0x2000 },
+  { 0x0700, 0xfb8d, 0x0000 },
+  { 0x0700, 0xfb8f, 0x0000 },
+  { 0x8700, 0xfb92, 0x2000 },
+  { 0x0700, 0xfb91, 0x0000 },
+  { 0x0700, 0xfb93, 0x0000 },
+  { 0x8700, 0xfb98, 0x3000 },
+  { 0x8700, 0xfb96, 0x2000 },
+  { 0x0700, 0xfb95, 0x0000 },
+  { 0x0700, 0xfb97, 0x0000 },
+  { 0x8700, 0xfb9a, 0x2000 },
+  { 0x0700, 0xfb99, 0x0000 },
+  { 0x0700, 0xfb9b, 0x0000 },
+  { 0x8700, 0xfba4, 0x4000 },
+  { 0x8700, 0xfba0, 0x3000 },
+  { 0x8700, 0xfb9e, 0x2000 },
+  { 0x0700, 0xfb9d, 0x0000 },
+  { 0x0700, 0xfb9f, 0x0000 },
+  { 0x8700, 0xfba2, 0x2000 },
+  { 0x0700, 0xfba1, 0x0000 },
+  { 0x0700, 0xfba3, 0x0000 },
+  { 0x8700, 0xfba8, 0x3000 },
+  { 0x8700, 0xfba6, 0x2000 },
+  { 0x0700, 0xfba5, 0x0000 },
+  { 0x0700, 0xfba7, 0x0000 },
+  { 0x8700, 0xfbaa, 0x2000 },
+  { 0x0700, 0xfba9, 0x0000 },
+  { 0x0700, 0xfbab, 0x0000 },
+  { 0x8700, 0xfc0d, 0x7000 },
+  { 0x8700, 0xfbed, 0x6000 },
+  { 0x8700, 0xfbdd, 0x5000 },
+  { 0x8700, 0xfbd5, 0x4000 },
+  { 0x8700, 0xfbb0, 0x3000 },
+  { 0x8700, 0xfbae, 0x2000 },
+  { 0x0700, 0xfbad, 0x0000 },
+  { 0x0700, 0xfbaf, 0x0000 },
+  { 0x8700, 0xfbd3, 0x2000 },
+  { 0x0700, 0xfbb1, 0x0000 },
+  { 0x0700, 0xfbd4, 0x0000 },
+  { 0x8700, 0xfbd9, 0x3000 },
+  { 0x8700, 0xfbd7, 0x2000 },
+  { 0x0700, 0xfbd6, 0x0000 },
+  { 0x0700, 0xfbd8, 0x0000 },
+  { 0x8700, 0xfbdb, 0x2000 },
+  { 0x0700, 0xfbda, 0x0000 },
+  { 0x0700, 0xfbdc, 0x0000 },
+  { 0x8700, 0xfbe5, 0x4000 },
+  { 0x8700, 0xfbe1, 0x3000 },
+  { 0x8700, 0xfbdf, 0x2000 },
+  { 0x0700, 0xfbde, 0x0000 },
+  { 0x0700, 0xfbe0, 0x0000 },
+  { 0x8700, 0xfbe3, 0x2000 },
+  { 0x0700, 0xfbe2, 0x0000 },
+  { 0x0700, 0xfbe4, 0x0000 },
+  { 0x8700, 0xfbe9, 0x3000 },
+  { 0x8700, 0xfbe7, 0x2000 },
+  { 0x0700, 0xfbe6, 0x0000 },
+  { 0x0700, 0xfbe8, 0x0000 },
+  { 0x8700, 0xfbeb, 0x2000 },
+  { 0x0700, 0xfbea, 0x0000 },
+  { 0x0700, 0xfbec, 0x0000 },
+  { 0x8700, 0xfbfd, 0x5000 },
+  { 0x8700, 0xfbf5, 0x4000 },
+  { 0x8700, 0xfbf1, 0x3000 },
+  { 0x8700, 0xfbef, 0x2000 },
+  { 0x0700, 0xfbee, 0x0000 },
+  { 0x0700, 0xfbf0, 0x0000 },
+  { 0x8700, 0xfbf3, 0x2000 },
+  { 0x0700, 0xfbf2, 0x0000 },
+  { 0x0700, 0xfbf4, 0x0000 },
+  { 0x8700, 0xfbf9, 0x3000 },
+  { 0x8700, 0xfbf7, 0x2000 },
+  { 0x0700, 0xfbf6, 0x0000 },
+  { 0x0700, 0xfbf8, 0x0000 },
+  { 0x8700, 0xfbfb, 0x2000 },
+  { 0x0700, 0xfbfa, 0x0000 },
+  { 0x0700, 0xfbfc, 0x0000 },
+  { 0x8700, 0xfc05, 0x4000 },
+  { 0x8700, 0xfc01, 0x3000 },
+  { 0x8700, 0xfbff, 0x2000 },
+  { 0x0700, 0xfbfe, 0x0000 },
+  { 0x0700, 0xfc00, 0x0000 },
+  { 0x8700, 0xfc03, 0x2000 },
+  { 0x0700, 0xfc02, 0x0000 },
+  { 0x0700, 0xfc04, 0x0000 },
+  { 0x8700, 0xfc09, 0x3000 },
+  { 0x8700, 0xfc07, 0x2000 },
+  { 0x0700, 0xfc06, 0x0000 },
+  { 0x0700, 0xfc08, 0x0000 },
+  { 0x8700, 0xfc0b, 0x2000 },
+  { 0x0700, 0xfc0a, 0x0000 },
+  { 0x0700, 0xfc0c, 0x0000 },
+  { 0x8700, 0xfc2d, 0x6000 },
+  { 0x8700, 0xfc1d, 0x5000 },
+  { 0x8700, 0xfc15, 0x4000 },
+  { 0x8700, 0xfc11, 0x3000 },
+  { 0x8700, 0xfc0f, 0x2000 },
+  { 0x0700, 0xfc0e, 0x0000 },
+  { 0x0700, 0xfc10, 0x0000 },
+  { 0x8700, 0xfc13, 0x2000 },
+  { 0x0700, 0xfc12, 0x0000 },
+  { 0x0700, 0xfc14, 0x0000 },
+  { 0x8700, 0xfc19, 0x3000 },
+  { 0x8700, 0xfc17, 0x2000 },
+  { 0x0700, 0xfc16, 0x0000 },
+  { 0x0700, 0xfc18, 0x0000 },
+  { 0x8700, 0xfc1b, 0x2000 },
+  { 0x0700, 0xfc1a, 0x0000 },
+  { 0x0700, 0xfc1c, 0x0000 },
+  { 0x8700, 0xfc25, 0x4000 },
+  { 0x8700, 0xfc21, 0x3000 },
+  { 0x8700, 0xfc1f, 0x2000 },
+  { 0x0700, 0xfc1e, 0x0000 },
+  { 0x0700, 0xfc20, 0x0000 },
+  { 0x8700, 0xfc23, 0x2000 },
+  { 0x0700, 0xfc22, 0x0000 },
+  { 0x0700, 0xfc24, 0x0000 },
+  { 0x8700, 0xfc29, 0x3000 },
+  { 0x8700, 0xfc27, 0x2000 },
+  { 0x0700, 0xfc26, 0x0000 },
+  { 0x0700, 0xfc28, 0x0000 },
+  { 0x8700, 0xfc2b, 0x2000 },
+  { 0x0700, 0xfc2a, 0x0000 },
+  { 0x0700, 0xfc2c, 0x0000 },
+  { 0x8700, 0xfc3d, 0x5000 },
+  { 0x8700, 0xfc35, 0x4000 },
+  { 0x8700, 0xfc31, 0x3000 },
+  { 0x8700, 0xfc2f, 0x2000 },
+  { 0x0700, 0xfc2e, 0x0000 },
+  { 0x0700, 0xfc30, 0x0000 },
+  { 0x8700, 0xfc33, 0x2000 },
+  { 0x0700, 0xfc32, 0x0000 },
+  { 0x0700, 0xfc34, 0x0000 },
+  { 0x8700, 0xfc39, 0x3000 },
+  { 0x8700, 0xfc37, 0x2000 },
+  { 0x0700, 0xfc36, 0x0000 },
+  { 0x0700, 0xfc38, 0x0000 },
+  { 0x8700, 0xfc3b, 0x2000 },
+  { 0x0700, 0xfc3a, 0x0000 },
+  { 0x0700, 0xfc3c, 0x0000 },
+  { 0x8700, 0xfc45, 0x4000 },
+  { 0x8700, 0xfc41, 0x3000 },
+  { 0x8700, 0xfc3f, 0x2000 },
+  { 0x0700, 0xfc3e, 0x0000 },
+  { 0x0700, 0xfc40, 0x0000 },
+  { 0x8700, 0xfc43, 0x2000 },
+  { 0x0700, 0xfc42, 0x0000 },
+  { 0x0700, 0xfc44, 0x0000 },
+  { 0x8700, 0xfc49, 0x3000 },
+  { 0x8700, 0xfc47, 0x2000 },
+  { 0x0700, 0xfc46, 0x0000 },
+  { 0x0700, 0xfc48, 0x0000 },
+  { 0x8700, 0xfc4b, 0x2000 },
+  { 0x0700, 0xfc4a, 0x0000 },
+  { 0x0700, 0xfc4c, 0x0000 },
+  { 0x8700, 0xfeac, 0xa000 },
+  { 0x8700, 0xfd5d, 0x9000 },
+  { 0x8700, 0xfccd, 0x8000 },
+  { 0x8700, 0xfc8d, 0x7000 },
+  { 0x8700, 0xfc6d, 0x6000 },
+  { 0x8700, 0xfc5d, 0x5000 },
+  { 0x8700, 0xfc55, 0x4000 },
+  { 0x8700, 0xfc51, 0x3000 },
+  { 0x8700, 0xfc4f, 0x2000 },
+  { 0x0700, 0xfc4e, 0x0000 },
+  { 0x0700, 0xfc50, 0x0000 },
+  { 0x8700, 0xfc53, 0x2000 },
+  { 0x0700, 0xfc52, 0x0000 },
+  { 0x0700, 0xfc54, 0x0000 },
+  { 0x8700, 0xfc59, 0x3000 },
+  { 0x8700, 0xfc57, 0x2000 },
+  { 0x0700, 0xfc56, 0x0000 },
+  { 0x0700, 0xfc58, 0x0000 },
+  { 0x8700, 0xfc5b, 0x2000 },
+  { 0x0700, 0xfc5a, 0x0000 },
+  { 0x0700, 0xfc5c, 0x0000 },
+  { 0x8700, 0xfc65, 0x4000 },
+  { 0x8700, 0xfc61, 0x3000 },
+  { 0x8700, 0xfc5f, 0x2000 },
+  { 0x0700, 0xfc5e, 0x0000 },
+  { 0x0700, 0xfc60, 0x0000 },
+  { 0x8700, 0xfc63, 0x2000 },
+  { 0x0700, 0xfc62, 0x0000 },
+  { 0x0700, 0xfc64, 0x0000 },
+  { 0x8700, 0xfc69, 0x3000 },
+  { 0x8700, 0xfc67, 0x2000 },
+  { 0x0700, 0xfc66, 0x0000 },
+  { 0x0700, 0xfc68, 0x0000 },
+  { 0x8700, 0xfc6b, 0x2000 },
+  { 0x0700, 0xfc6a, 0x0000 },
+  { 0x0700, 0xfc6c, 0x0000 },
+  { 0x8700, 0xfc7d, 0x5000 },
+  { 0x8700, 0xfc75, 0x4000 },
+  { 0x8700, 0xfc71, 0x3000 },
+  { 0x8700, 0xfc6f, 0x2000 },
+  { 0x0700, 0xfc6e, 0x0000 },
+  { 0x0700, 0xfc70, 0x0000 },
+  { 0x8700, 0xfc73, 0x2000 },
+  { 0x0700, 0xfc72, 0x0000 },
+  { 0x0700, 0xfc74, 0x0000 },
+  { 0x8700, 0xfc79, 0x3000 },
+  { 0x8700, 0xfc77, 0x2000 },
+  { 0x0700, 0xfc76, 0x0000 },
+  { 0x0700, 0xfc78, 0x0000 },
+  { 0x8700, 0xfc7b, 0x2000 },
+  { 0x0700, 0xfc7a, 0x0000 },
+  { 0x0700, 0xfc7c, 0x0000 },
+  { 0x8700, 0xfc85, 0x4000 },
+  { 0x8700, 0xfc81, 0x3000 },
+  { 0x8700, 0xfc7f, 0x2000 },
+  { 0x0700, 0xfc7e, 0x0000 },
+  { 0x0700, 0xfc80, 0x0000 },
+  { 0x8700, 0xfc83, 0x2000 },
+  { 0x0700, 0xfc82, 0x0000 },
+  { 0x0700, 0xfc84, 0x0000 },
+  { 0x8700, 0xfc89, 0x3000 },
+  { 0x8700, 0xfc87, 0x2000 },
+  { 0x0700, 0xfc86, 0x0000 },
+  { 0x0700, 0xfc88, 0x0000 },
+  { 0x8700, 0xfc8b, 0x2000 },
+  { 0x0700, 0xfc8a, 0x0000 },
+  { 0x0700, 0xfc8c, 0x0000 },
+  { 0x8700, 0xfcad, 0x6000 },
+  { 0x8700, 0xfc9d, 0x5000 },
+  { 0x8700, 0xfc95, 0x4000 },
+  { 0x8700, 0xfc91, 0x3000 },
+  { 0x8700, 0xfc8f, 0x2000 },
+  { 0x0700, 0xfc8e, 0x0000 },
+  { 0x0700, 0xfc90, 0x0000 },
+  { 0x8700, 0xfc93, 0x2000 },
+  { 0x0700, 0xfc92, 0x0000 },
+  { 0x0700, 0xfc94, 0x0000 },
+  { 0x8700, 0xfc99, 0x3000 },
+  { 0x8700, 0xfc97, 0x2000 },
+  { 0x0700, 0xfc96, 0x0000 },
+  { 0x0700, 0xfc98, 0x0000 },
+  { 0x8700, 0xfc9b, 0x2000 },
+  { 0x0700, 0xfc9a, 0x0000 },
+  { 0x0700, 0xfc9c, 0x0000 },
+  { 0x8700, 0xfca5, 0x4000 },
+  { 0x8700, 0xfca1, 0x3000 },
+  { 0x8700, 0xfc9f, 0x2000 },
+  { 0x0700, 0xfc9e, 0x0000 },
+  { 0x0700, 0xfca0, 0x0000 },
+  { 0x8700, 0xfca3, 0x2000 },
+  { 0x0700, 0xfca2, 0x0000 },
+  { 0x0700, 0xfca4, 0x0000 },
+  { 0x8700, 0xfca9, 0x3000 },
+  { 0x8700, 0xfca7, 0x2000 },
+  { 0x0700, 0xfca6, 0x0000 },
+  { 0x0700, 0xfca8, 0x0000 },
+  { 0x8700, 0xfcab, 0x2000 },
+  { 0x0700, 0xfcaa, 0x0000 },
+  { 0x0700, 0xfcac, 0x0000 },
+  { 0x8700, 0xfcbd, 0x5000 },
+  { 0x8700, 0xfcb5, 0x4000 },
+  { 0x8700, 0xfcb1, 0x3000 },
+  { 0x8700, 0xfcaf, 0x2000 },
+  { 0x0700, 0xfcae, 0x0000 },
+  { 0x0700, 0xfcb0, 0x0000 },
+  { 0x8700, 0xfcb3, 0x2000 },
+  { 0x0700, 0xfcb2, 0x0000 },
+  { 0x0700, 0xfcb4, 0x0000 },
+  { 0x8700, 0xfcb9, 0x3000 },
+  { 0x8700, 0xfcb7, 0x2000 },
+  { 0x0700, 0xfcb6, 0x0000 },
+  { 0x0700, 0xfcb8, 0x0000 },
+  { 0x8700, 0xfcbb, 0x2000 },
+  { 0x0700, 0xfcba, 0x0000 },
+  { 0x0700, 0xfcbc, 0x0000 },
+  { 0x8700, 0xfcc5, 0x4000 },
+  { 0x8700, 0xfcc1, 0x3000 },
+  { 0x8700, 0xfcbf, 0x2000 },
+  { 0x0700, 0xfcbe, 0x0000 },
+  { 0x0700, 0xfcc0, 0x0000 },
+  { 0x8700, 0xfcc3, 0x2000 },
+  { 0x0700, 0xfcc2, 0x0000 },
+  { 0x0700, 0xfcc4, 0x0000 },
+  { 0x8700, 0xfcc9, 0x3000 },
+  { 0x8700, 0xfcc7, 0x2000 },
+  { 0x0700, 0xfcc6, 0x0000 },
+  { 0x0700, 0xfcc8, 0x0000 },
+  { 0x8700, 0xfccb, 0x2000 },
+  { 0x0700, 0xfcca, 0x0000 },
+  { 0x0700, 0xfccc, 0x0000 },
+  { 0x8700, 0xfd0d, 0x7000 },
+  { 0x8700, 0xfced, 0x6000 },
+  { 0x8700, 0xfcdd, 0x5000 },
+  { 0x8700, 0xfcd5, 0x4000 },
+  { 0x8700, 0xfcd1, 0x3000 },
+  { 0x8700, 0xfccf, 0x2000 },
+  { 0x0700, 0xfcce, 0x0000 },
+  { 0x0700, 0xfcd0, 0x0000 },
+  { 0x8700, 0xfcd3, 0x2000 },
+  { 0x0700, 0xfcd2, 0x0000 },
+  { 0x0700, 0xfcd4, 0x0000 },
+  { 0x8700, 0xfcd9, 0x3000 },
+  { 0x8700, 0xfcd7, 0x2000 },
+  { 0x0700, 0xfcd6, 0x0000 },
+  { 0x0700, 0xfcd8, 0x0000 },
+  { 0x8700, 0xfcdb, 0x2000 },
+  { 0x0700, 0xfcda, 0x0000 },
+  { 0x0700, 0xfcdc, 0x0000 },
+  { 0x8700, 0xfce5, 0x4000 },
+  { 0x8700, 0xfce1, 0x3000 },
+  { 0x8700, 0xfcdf, 0x2000 },
+  { 0x0700, 0xfcde, 0x0000 },
+  { 0x0700, 0xfce0, 0x0000 },
+  { 0x8700, 0xfce3, 0x2000 },
+  { 0x0700, 0xfce2, 0x0000 },
+  { 0x0700, 0xfce4, 0x0000 },
+  { 0x8700, 0xfce9, 0x3000 },
+  { 0x8700, 0xfce7, 0x2000 },
+  { 0x0700, 0xfce6, 0x0000 },
+  { 0x0700, 0xfce8, 0x0000 },
+  { 0x8700, 0xfceb, 0x2000 },
+  { 0x0700, 0xfcea, 0x0000 },
+  { 0x0700, 0xfcec, 0x0000 },
+  { 0x8700, 0xfcfd, 0x5000 },
+  { 0x8700, 0xfcf5, 0x4000 },
+  { 0x8700, 0xfcf1, 0x3000 },
+  { 0x8700, 0xfcef, 0x2000 },
+  { 0x0700, 0xfcee, 0x0000 },
+  { 0x0700, 0xfcf0, 0x0000 },
+  { 0x8700, 0xfcf3, 0x2000 },
+  { 0x0700, 0xfcf2, 0x0000 },
+  { 0x0700, 0xfcf4, 0x0000 },
+  { 0x8700, 0xfcf9, 0x3000 },
+  { 0x8700, 0xfcf7, 0x2000 },
+  { 0x0700, 0xfcf6, 0x0000 },
+  { 0x0700, 0xfcf8, 0x0000 },
+  { 0x8700, 0xfcfb, 0x2000 },
+  { 0x0700, 0xfcfa, 0x0000 },
+  { 0x0700, 0xfcfc, 0x0000 },
+  { 0x8700, 0xfd05, 0x4000 },
+  { 0x8700, 0xfd01, 0x3000 },
+  { 0x8700, 0xfcff, 0x2000 },
+  { 0x0700, 0xfcfe, 0x0000 },
+  { 0x0700, 0xfd00, 0x0000 },
+  { 0x8700, 0xfd03, 0x2000 },
+  { 0x0700, 0xfd02, 0x0000 },
+  { 0x0700, 0xfd04, 0x0000 },
+  { 0x8700, 0xfd09, 0x3000 },
+  { 0x8700, 0xfd07, 0x2000 },
+  { 0x0700, 0xfd06, 0x0000 },
+  { 0x0700, 0xfd08, 0x0000 },
+  { 0x8700, 0xfd0b, 0x2000 },
+  { 0x0700, 0xfd0a, 0x0000 },
+  { 0x0700, 0xfd0c, 0x0000 },
+  { 0x8700, 0xfd2d, 0x6000 },
+  { 0x8700, 0xfd1d, 0x5000 },
+  { 0x8700, 0xfd15, 0x4000 },
+  { 0x8700, 0xfd11, 0x3000 },
+  { 0x8700, 0xfd0f, 0x2000 },
+  { 0x0700, 0xfd0e, 0x0000 },
+  { 0x0700, 0xfd10, 0x0000 },
+  { 0x8700, 0xfd13, 0x2000 },
+  { 0x0700, 0xfd12, 0x0000 },
+  { 0x0700, 0xfd14, 0x0000 },
+  { 0x8700, 0xfd19, 0x3000 },
+  { 0x8700, 0xfd17, 0x2000 },
+  { 0x0700, 0xfd16, 0x0000 },
+  { 0x0700, 0xfd18, 0x0000 },
+  { 0x8700, 0xfd1b, 0x2000 },
+  { 0x0700, 0xfd1a, 0x0000 },
+  { 0x0700, 0xfd1c, 0x0000 },
+  { 0x8700, 0xfd25, 0x4000 },
+  { 0x8700, 0xfd21, 0x3000 },
+  { 0x8700, 0xfd1f, 0x2000 },
+  { 0x0700, 0xfd1e, 0x0000 },
+  { 0x0700, 0xfd20, 0x0000 },
+  { 0x8700, 0xfd23, 0x2000 },
+  { 0x0700, 0xfd22, 0x0000 },
+  { 0x0700, 0xfd24, 0x0000 },
+  { 0x8700, 0xfd29, 0x3000 },
+  { 0x8700, 0xfd27, 0x2000 },
+  { 0x0700, 0xfd26, 0x0000 },
+  { 0x0700, 0xfd28, 0x0000 },
+  { 0x8700, 0xfd2b, 0x2000 },
+  { 0x0700, 0xfd2a, 0x0000 },
+  { 0x0700, 0xfd2c, 0x0000 },
+  { 0x8700, 0xfd3d, 0x5000 },
+  { 0x8700, 0xfd35, 0x4000 },
+  { 0x8700, 0xfd31, 0x3000 },
+  { 0x8700, 0xfd2f, 0x2000 },
+  { 0x0700, 0xfd2e, 0x0000 },
+  { 0x0700, 0xfd30, 0x0000 },
+  { 0x8700, 0xfd33, 0x2000 },
+  { 0x0700, 0xfd32, 0x0000 },
+  { 0x0700, 0xfd34, 0x0000 },
+  { 0x8700, 0xfd39, 0x3000 },
+  { 0x8700, 0xfd37, 0x2000 },
+  { 0x0700, 0xfd36, 0x0000 },
+  { 0x0700, 0xfd38, 0x0000 },
+  { 0x8700, 0xfd3b, 0x2000 },
+  { 0x0700, 0xfd3a, 0x0000 },
+  { 0x0700, 0xfd3c, 0x0000 },
+  { 0x8700, 0xfd55, 0x4000 },
+  { 0x8700, 0xfd51, 0x3000 },
+  { 0x9200, 0xfd3f, 0x2000 },
+  { 0x1600, 0xfd3e, 0x0000 },
+  { 0x0700, 0xfd50, 0x0000 },
+  { 0x8700, 0xfd53, 0x2000 },
+  { 0x0700, 0xfd52, 0x0000 },
+  { 0x0700, 0xfd54, 0x0000 },
+  { 0x8700, 0xfd59, 0x3000 },
+  { 0x8700, 0xfd57, 0x2000 },
+  { 0x0700, 0xfd56, 0x0000 },
+  { 0x0700, 0xfd58, 0x0000 },
+  { 0x8700, 0xfd5b, 0x2000 },
+  { 0x0700, 0xfd5a, 0x0000 },
+  { 0x0700, 0xfd5c, 0x0000 },
+  { 0x8c00, 0xfe09, 0x8000 },
+  { 0x8700, 0xfd9f, 0x7000 },
+  { 0x8700, 0xfd7d, 0x6000 },
+  { 0x8700, 0xfd6d, 0x5000 },
+  { 0x8700, 0xfd65, 0x4000 },
+  { 0x8700, 0xfd61, 0x3000 },
+  { 0x8700, 0xfd5f, 0x2000 },
+  { 0x0700, 0xfd5e, 0x0000 },
+  { 0x0700, 0xfd60, 0x0000 },
+  { 0x8700, 0xfd63, 0x2000 },
+  { 0x0700, 0xfd62, 0x0000 },
+  { 0x0700, 0xfd64, 0x0000 },
+  { 0x8700, 0xfd69, 0x3000 },
+  { 0x8700, 0xfd67, 0x2000 },
+  { 0x0700, 0xfd66, 0x0000 },
+  { 0x0700, 0xfd68, 0x0000 },
+  { 0x8700, 0xfd6b, 0x2000 },
+  { 0x0700, 0xfd6a, 0x0000 },
+  { 0x0700, 0xfd6c, 0x0000 },
+  { 0x8700, 0xfd75, 0x4000 },
+  { 0x8700, 0xfd71, 0x3000 },
+  { 0x8700, 0xfd6f, 0x2000 },
+  { 0x0700, 0xfd6e, 0x0000 },
+  { 0x0700, 0xfd70, 0x0000 },
+  { 0x8700, 0xfd73, 0x2000 },
+  { 0x0700, 0xfd72, 0x0000 },
+  { 0x0700, 0xfd74, 0x0000 },
+  { 0x8700, 0xfd79, 0x3000 },
+  { 0x8700, 0xfd77, 0x2000 },
+  { 0x0700, 0xfd76, 0x0000 },
+  { 0x0700, 0xfd78, 0x0000 },
+  { 0x8700, 0xfd7b, 0x2000 },
+  { 0x0700, 0xfd7a, 0x0000 },
+  { 0x0700, 0xfd7c, 0x0000 },
+  { 0x8700, 0xfd8d, 0x5000 },
+  { 0x8700, 0xfd85, 0x4000 },
+  { 0x8700, 0xfd81, 0x3000 },
+  { 0x8700, 0xfd7f, 0x2000 },
+  { 0x0700, 0xfd7e, 0x0000 },
+  { 0x0700, 0xfd80, 0x0000 },
+  { 0x8700, 0xfd83, 0x2000 },
+  { 0x0700, 0xfd82, 0x0000 },
+  { 0x0700, 0xfd84, 0x0000 },
+  { 0x8700, 0xfd89, 0x3000 },
+  { 0x8700, 0xfd87, 0x2000 },
+  { 0x0700, 0xfd86, 0x0000 },
+  { 0x0700, 0xfd88, 0x0000 },
+  { 0x8700, 0xfd8b, 0x2000 },
+  { 0x0700, 0xfd8a, 0x0000 },
+  { 0x0700, 0xfd8c, 0x0000 },
+  { 0x8700, 0xfd97, 0x4000 },
+  { 0x8700, 0xfd93, 0x3000 },
+  { 0x8700, 0xfd8f, 0x2000 },
+  { 0x0700, 0xfd8e, 0x0000 },
+  { 0x0700, 0xfd92, 0x0000 },
+  { 0x8700, 0xfd95, 0x2000 },
+  { 0x0700, 0xfd94, 0x0000 },
+  { 0x0700, 0xfd96, 0x0000 },
+  { 0x8700, 0xfd9b, 0x3000 },
+  { 0x8700, 0xfd99, 0x2000 },
+  { 0x0700, 0xfd98, 0x0000 },
+  { 0x0700, 0xfd9a, 0x0000 },
+  { 0x8700, 0xfd9d, 0x2000 },
+  { 0x0700, 0xfd9c, 0x0000 },
+  { 0x0700, 0xfd9e, 0x0000 },
+  { 0x8700, 0xfdbf, 0x6000 },
+  { 0x8700, 0xfdaf, 0x5000 },
+  { 0x8700, 0xfda7, 0x4000 },
+  { 0x8700, 0xfda3, 0x3000 },
+  { 0x8700, 0xfda1, 0x2000 },
+  { 0x0700, 0xfda0, 0x0000 },
+  { 0x0700, 0xfda2, 0x0000 },
+  { 0x8700, 0xfda5, 0x2000 },
+  { 0x0700, 0xfda4, 0x0000 },
+  { 0x0700, 0xfda6, 0x0000 },
+  { 0x8700, 0xfdab, 0x3000 },
+  { 0x8700, 0xfda9, 0x2000 },
+  { 0x0700, 0xfda8, 0x0000 },
+  { 0x0700, 0xfdaa, 0x0000 },
+  { 0x8700, 0xfdad, 0x2000 },
+  { 0x0700, 0xfdac, 0x0000 },
+  { 0x0700, 0xfdae, 0x0000 },
+  { 0x8700, 0xfdb7, 0x4000 },
+  { 0x8700, 0xfdb3, 0x3000 },
+  { 0x8700, 0xfdb1, 0x2000 },
+  { 0x0700, 0xfdb0, 0x0000 },
+  { 0x0700, 0xfdb2, 0x0000 },
+  { 0x8700, 0xfdb5, 0x2000 },
+  { 0x0700, 0xfdb4, 0x0000 },
+  { 0x0700, 0xfdb6, 0x0000 },
+  { 0x8700, 0xfdbb, 0x3000 },
+  { 0x8700, 0xfdb9, 0x2000 },
+  { 0x0700, 0xfdb8, 0x0000 },
+  { 0x0700, 0xfdba, 0x0000 },
+  { 0x8700, 0xfdbd, 0x2000 },
+  { 0x0700, 0xfdbc, 0x0000 },
+  { 0x0700, 0xfdbe, 0x0000 },
+  { 0x8700, 0xfdf7, 0x5000 },
+  { 0x8700, 0xfdc7, 0x4000 },
+  { 0x8700, 0xfdc3, 0x3000 },
+  { 0x8700, 0xfdc1, 0x2000 },
+  { 0x0700, 0xfdc0, 0x0000 },
+  { 0x0700, 0xfdc2, 0x0000 },
+  { 0x8700, 0xfdc5, 0x2000 },
+  { 0x0700, 0xfdc4, 0x0000 },
+  { 0x0700, 0xfdc6, 0x0000 },
+  { 0x8700, 0xfdf3, 0x3000 },
+  { 0x8700, 0xfdf1, 0x2000 },
+  { 0x0700, 0xfdf0, 0x0000 },
+  { 0x0700, 0xfdf2, 0x0000 },
+  { 0x8700, 0xfdf5, 0x2000 },
+  { 0x0700, 0xfdf4, 0x0000 },
+  { 0x0700, 0xfdf6, 0x0000 },
+  { 0x8c00, 0xfe01, 0x4000 },
+  { 0x8700, 0xfdfb, 0x3000 },
+  { 0x8700, 0xfdf9, 0x2000 },
+  { 0x0700, 0xfdf8, 0x0000 },
+  { 0x0700, 0xfdfa, 0x0000 },
+  { 0x9a00, 0xfdfd, 0x2000 },
+  { 0x1700, 0xfdfc, 0x0000 },
+  { 0x0c00, 0xfe00, 0x0000 },
+  { 0x8c00, 0xfe05, 0x3000 },
+  { 0x8c00, 0xfe03, 0x2000 },
+  { 0x0c00, 0xfe02, 0x0000 },
+  { 0x0c00, 0xfe04, 0x0000 },
+  { 0x8c00, 0xfe07, 0x2000 },
+  { 0x0c00, 0xfe06, 0x0000 },
+  { 0x0c00, 0xfe08, 0x0000 },
+  { 0x9900, 0xfe66, 0x7000 },
+  { 0x9500, 0xfe45, 0x6000 },
+  { 0x9600, 0xfe35, 0x5000 },
+  { 0x8c00, 0xfe21, 0x4000 },
+  { 0x8c00, 0xfe0d, 0x3000 },
+  { 0x8c00, 0xfe0b, 0x2000 },
+  { 0x0c00, 0xfe0a, 0x0000 },
+  { 0x0c00, 0xfe0c, 0x0000 },
+  { 0x8c00, 0xfe0f, 0x2000 },
+  { 0x0c00, 0xfe0e, 0x0000 },
+  { 0x0c00, 0xfe20, 0x0000 },
+  { 0x9100, 0xfe31, 0x3000 },
+  { 0x8c00, 0xfe23, 0x2000 },
+  { 0x0c00, 0xfe22, 0x0000 },
+  { 0x1500, 0xfe30, 0x0000 },
+  { 0x9000, 0xfe33, 0x2000 },
+  { 0x1100, 0xfe32, 0x0000 },
+  { 0x1000, 0xfe34, 0x0000 },
+  { 0x9600, 0xfe3d, 0x4000 },
+  { 0x9600, 0xfe39, 0x3000 },
+  { 0x9600, 0xfe37, 0x2000 },
+  { 0x1200, 0xfe36, 0x0000 },
+  { 0x1200, 0xfe38, 0x0000 },
+  { 0x9600, 0xfe3b, 0x2000 },
+  { 0x1200, 0xfe3a, 0x0000 },
+  { 0x1200, 0xfe3c, 0x0000 },
+  { 0x9600, 0xfe41, 0x3000 },
+  { 0x9600, 0xfe3f, 0x2000 },
+  { 0x1200, 0xfe3e, 0x0000 },
+  { 0x1200, 0xfe40, 0x0000 },
+  { 0x9600, 0xfe43, 0x2000 },
+  { 0x1200, 0xfe42, 0x0000 },
+  { 0x1200, 0xfe44, 0x0000 },
+  { 0x9500, 0xfe56, 0x5000 },
+  { 0x9000, 0xfe4d, 0x4000 },
+  { 0x9500, 0xfe49, 0x3000 },
+  { 0x9600, 0xfe47, 0x2000 },
+  { 0x1500, 0xfe46, 0x0000 },
+  { 0x1200, 0xfe48, 0x0000 },
+  { 0x9500, 0xfe4b, 0x2000 },
+  { 0x1500, 0xfe4a, 0x0000 },
+  { 0x1500, 0xfe4c, 0x0000 },
+  { 0x9500, 0xfe51, 0x3000 },
+  { 0x9000, 0xfe4f, 0x2000 },
+  { 0x1000, 0xfe4e, 0x0000 },
+  { 0x1500, 0xfe50, 0x0000 },
+  { 0x9500, 0xfe54, 0x2000 },
+  { 0x1500, 0xfe52, 0x0000 },
+  { 0x1500, 0xfe55, 0x0000 },
+  { 0x9200, 0xfe5e, 0x4000 },
+  { 0x9200, 0xfe5a, 0x3000 },
+  { 0x9100, 0xfe58, 0x2000 },
+  { 0x1500, 0xfe57, 0x0000 },
+  { 0x1600, 0xfe59, 0x0000 },
+  { 0x9200, 0xfe5c, 0x2000 },
+  { 0x1600, 0xfe5b, 0x0000 },
+  { 0x1600, 0xfe5d, 0x0000 },
+  { 0x9900, 0xfe62, 0x3000 },
+  { 0x9500, 0xfe60, 0x2000 },
+  { 0x1500, 0xfe5f, 0x0000 },
+  { 0x1500, 0xfe61, 0x0000 },
+  { 0x9900, 0xfe64, 0x2000 },
+  { 0x1100, 0xfe63, 0x0000 },
+  { 0x1900, 0xfe65, 0x0000 },
+  { 0x8700, 0xfe8c, 0x6000 },
+  { 0x8700, 0xfe7c, 0x5000 },
+  { 0x8700, 0xfe73, 0x4000 },
+  { 0x9500, 0xfe6b, 0x3000 },
+  { 0x9700, 0xfe69, 0x2000 },
+  { 0x1500, 0xfe68, 0x0000 },
+  { 0x1500, 0xfe6a, 0x0000 },
+  { 0x8700, 0xfe71, 0x2000 },
+  { 0x0700, 0xfe70, 0x0000 },
+  { 0x0700, 0xfe72, 0x0000 },
+  { 0x8700, 0xfe78, 0x3000 },
+  { 0x8700, 0xfe76, 0x2000 },
+  { 0x0700, 0xfe74, 0x0000 },
+  { 0x0700, 0xfe77, 0x0000 },
+  { 0x8700, 0xfe7a, 0x2000 },
+  { 0x0700, 0xfe79, 0x0000 },
+  { 0x0700, 0xfe7b, 0x0000 },
+  { 0x8700, 0xfe84, 0x4000 },
+  { 0x8700, 0xfe80, 0x3000 },
+  { 0x8700, 0xfe7e, 0x2000 },
+  { 0x0700, 0xfe7d, 0x0000 },
+  { 0x0700, 0xfe7f, 0x0000 },
+  { 0x8700, 0xfe82, 0x2000 },
+  { 0x0700, 0xfe81, 0x0000 },
+  { 0x0700, 0xfe83, 0x0000 },
+  { 0x8700, 0xfe88, 0x3000 },
+  { 0x8700, 0xfe86, 0x2000 },
+  { 0x0700, 0xfe85, 0x0000 },
+  { 0x0700, 0xfe87, 0x0000 },
+  { 0x8700, 0xfe8a, 0x2000 },
+  { 0x0700, 0xfe89, 0x0000 },
+  { 0x0700, 0xfe8b, 0x0000 },
+  { 0x8700, 0xfe9c, 0x5000 },
+  { 0x8700, 0xfe94, 0x4000 },
+  { 0x8700, 0xfe90, 0x3000 },
+  { 0x8700, 0xfe8e, 0x2000 },
+  { 0x0700, 0xfe8d, 0x0000 },
+  { 0x0700, 0xfe8f, 0x0000 },
+  { 0x8700, 0xfe92, 0x2000 },
+  { 0x0700, 0xfe91, 0x0000 },
+  { 0x0700, 0xfe93, 0x0000 },
+  { 0x8700, 0xfe98, 0x3000 },
+  { 0x8700, 0xfe96, 0x2000 },
+  { 0x0700, 0xfe95, 0x0000 },
+  { 0x0700, 0xfe97, 0x0000 },
+  { 0x8700, 0xfe9a, 0x2000 },
+  { 0x0700, 0xfe99, 0x0000 },
+  { 0x0700, 0xfe9b, 0x0000 },
+  { 0x8700, 0xfea4, 0x4000 },
+  { 0x8700, 0xfea0, 0x3000 },
+  { 0x8700, 0xfe9e, 0x2000 },
+  { 0x0700, 0xfe9d, 0x0000 },
+  { 0x0700, 0xfe9f, 0x0000 },
+  { 0x8700, 0xfea2, 0x2000 },
+  { 0x0700, 0xfea1, 0x0000 },
+  { 0x0700, 0xfea3, 0x0000 },
+  { 0x8700, 0xfea8, 0x3000 },
+  { 0x8700, 0xfea6, 0x2000 },
+  { 0x0700, 0xfea5, 0x0000 },
+  { 0x0700, 0xfea7, 0x0000 },
+  { 0x8700, 0xfeaa, 0x2000 },
+  { 0x0700, 0xfea9, 0x0000 },
+  { 0x0700, 0xfeab, 0x0000 },
+  { 0x8700, 0xffaf, 0x9000 },
+  { 0x8900, 0xff2f, 0x8020 },
+  { 0x8700, 0xfeec, 0x7000 },
+  { 0x8700, 0xfecc, 0x6000 },
+  { 0x8700, 0xfebc, 0x5000 },
+  { 0x8700, 0xfeb4, 0x4000 },
+  { 0x8700, 0xfeb0, 0x3000 },
+  { 0x8700, 0xfeae, 0x2000 },
+  { 0x0700, 0xfead, 0x0000 },
+  { 0x0700, 0xfeaf, 0x0000 },
+  { 0x8700, 0xfeb2, 0x2000 },
+  { 0x0700, 0xfeb1, 0x0000 },
+  { 0x0700, 0xfeb3, 0x0000 },
+  { 0x8700, 0xfeb8, 0x3000 },
+  { 0x8700, 0xfeb6, 0x2000 },
+  { 0x0700, 0xfeb5, 0x0000 },
+  { 0x0700, 0xfeb7, 0x0000 },
+  { 0x8700, 0xfeba, 0x2000 },
+  { 0x0700, 0xfeb9, 0x0000 },
+  { 0x0700, 0xfebb, 0x0000 },
+  { 0x8700, 0xfec4, 0x4000 },
+  { 0x8700, 0xfec0, 0x3000 },
+  { 0x8700, 0xfebe, 0x2000 },
+  { 0x0700, 0xfebd, 0x0000 },
+  { 0x0700, 0xfebf, 0x0000 },
+  { 0x8700, 0xfec2, 0x2000 },
+  { 0x0700, 0xfec1, 0x0000 },
+  { 0x0700, 0xfec3, 0x0000 },
+  { 0x8700, 0xfec8, 0x3000 },
+  { 0x8700, 0xfec6, 0x2000 },
+  { 0x0700, 0xfec5, 0x0000 },
+  { 0x0700, 0xfec7, 0x0000 },
+  { 0x8700, 0xfeca, 0x2000 },
+  { 0x0700, 0xfec9, 0x0000 },
+  { 0x0700, 0xfecb, 0x0000 },
+  { 0x8700, 0xfedc, 0x5000 },
+  { 0x8700, 0xfed4, 0x4000 },
+  { 0x8700, 0xfed0, 0x3000 },
+  { 0x8700, 0xfece, 0x2000 },
+  { 0x0700, 0xfecd, 0x0000 },
+  { 0x0700, 0xfecf, 0x0000 },
+  { 0x8700, 0xfed2, 0x2000 },
+  { 0x0700, 0xfed1, 0x0000 },
+  { 0x0700, 0xfed3, 0x0000 },
+  { 0x8700, 0xfed8, 0x3000 },
+  { 0x8700, 0xfed6, 0x2000 },
+  { 0x0700, 0xfed5, 0x0000 },
+  { 0x0700, 0xfed7, 0x0000 },
+  { 0x8700, 0xfeda, 0x2000 },
+  { 0x0700, 0xfed9, 0x0000 },
+  { 0x0700, 0xfedb, 0x0000 },
+  { 0x8700, 0xfee4, 0x4000 },
+  { 0x8700, 0xfee0, 0x3000 },
+  { 0x8700, 0xfede, 0x2000 },
+  { 0x0700, 0xfedd, 0x0000 },
+  { 0x0700, 0xfedf, 0x0000 },
+  { 0x8700, 0xfee2, 0x2000 },
+  { 0x0700, 0xfee1, 0x0000 },
+  { 0x0700, 0xfee3, 0x0000 },
+  { 0x8700, 0xfee8, 0x3000 },
+  { 0x8700, 0xfee6, 0x2000 },
+  { 0x0700, 0xfee5, 0x0000 },
+  { 0x0700, 0xfee7, 0x0000 },
+  { 0x8700, 0xfeea, 0x2000 },
+  { 0x0700, 0xfee9, 0x0000 },
+  { 0x0700, 0xfeeb, 0x0000 },
+  { 0x9500, 0xff0f, 0x6000 },
+  { 0x8700, 0xfefc, 0x5000 },
+  { 0x8700, 0xfef4, 0x4000 },
+  { 0x8700, 0xfef0, 0x3000 },
+  { 0x8700, 0xfeee, 0x2000 },
+  { 0x0700, 0xfeed, 0x0000 },
+  { 0x0700, 0xfeef, 0x0000 },
+  { 0x8700, 0xfef2, 0x2000 },
+  { 0x0700, 0xfef1, 0x0000 },
+  { 0x0700, 0xfef3, 0x0000 },
+  { 0x8700, 0xfef8, 0x3000 },
+  { 0x8700, 0xfef6, 0x2000 },
+  { 0x0700, 0xfef5, 0x0000 },
+  { 0x0700, 0xfef7, 0x0000 },
+  { 0x8700, 0xfefa, 0x2000 },
+  { 0x0700, 0xfef9, 0x0000 },
+  { 0x0700, 0xfefb, 0x0000 },
+  { 0x9500, 0xff07, 0x4000 },
+  { 0x9500, 0xff03, 0x3000 },
+  { 0x9500, 0xff01, 0x2000 },
+  { 0x0100, 0xfeff, 0x0000 },
+  { 0x1500, 0xff02, 0x0000 },
+  { 0x9500, 0xff05, 0x2000 },
+  { 0x1700, 0xff04, 0x0000 },
+  { 0x1500, 0xff06, 0x0000 },
+  { 0x9900, 0xff0b, 0x3000 },
+  { 0x9200, 0xff09, 0x2000 },
+  { 0x1600, 0xff08, 0x0000 },
+  { 0x1500, 0xff0a, 0x0000 },
+  { 0x9100, 0xff0d, 0x2000 },
+  { 0x1500, 0xff0c, 0x0000 },
+  { 0x1500, 0xff0e, 0x0000 },
+  { 0x9500, 0xff1f, 0x5000 },
+  { 0x8d00, 0xff17, 0x4000 },
+  { 0x8d00, 0xff13, 0x3000 },
+  { 0x8d00, 0xff11, 0x2000 },
+  { 0x0d00, 0xff10, 0x0000 },
+  { 0x0d00, 0xff12, 0x0000 },
+  { 0x8d00, 0xff15, 0x2000 },
+  { 0x0d00, 0xff14, 0x0000 },
+  { 0x0d00, 0xff16, 0x0000 },
+  { 0x9500, 0xff1b, 0x3000 },
+  { 0x8d00, 0xff19, 0x2000 },
+  { 0x0d00, 0xff18, 0x0000 },
+  { 0x1500, 0xff1a, 0x0000 },
+  { 0x9900, 0xff1d, 0x2000 },
+  { 0x1900, 0xff1c, 0x0000 },
+  { 0x1900, 0xff1e, 0x0000 },
+  { 0x8900, 0xff27, 0x4020 },
+  { 0x8900, 0xff23, 0x3020 },
+  { 0x8900, 0xff21, 0x2020 },
+  { 0x1500, 0xff20, 0x0000 },
+  { 0x0900, 0xff22, 0x0020 },
+  { 0x8900, 0xff25, 0x2020 },
+  { 0x0900, 0xff24, 0x0020 },
+  { 0x0900, 0xff26, 0x0020 },
+  { 0x8900, 0xff2b, 0x3020 },
+  { 0x8900, 0xff29, 0x2020 },
+  { 0x0900, 0xff28, 0x0020 },
+  { 0x0900, 0xff2a, 0x0020 },
+  { 0x8900, 0xff2d, 0x2020 },
+  { 0x0900, 0xff2c, 0x0020 },
+  { 0x0900, 0xff2e, 0x0020 },
+  { 0x8700, 0xff6f, 0x7000 },
+  { 0x8500, 0xff4f, 0x6fe0 },
+  { 0x9000, 0xff3f, 0x5000 },
+  { 0x8900, 0xff37, 0x4020 },
+  { 0x8900, 0xff33, 0x3020 },
+  { 0x8900, 0xff31, 0x2020 },
+  { 0x0900, 0xff30, 0x0020 },
+  { 0x0900, 0xff32, 0x0020 },
+  { 0x8900, 0xff35, 0x2020 },
+  { 0x0900, 0xff34, 0x0020 },
+  { 0x0900, 0xff36, 0x0020 },
+  { 0x9600, 0xff3b, 0x3000 },
+  { 0x8900, 0xff39, 0x2020 },
+  { 0x0900, 0xff38, 0x0020 },
+  { 0x0900, 0xff3a, 0x0020 },
+  { 0x9200, 0xff3d, 0x2000 },
+  { 0x1500, 0xff3c, 0x0000 },
+  { 0x1800, 0xff3e, 0x0000 },
+  { 0x8500, 0xff47, 0x4fe0 },
+  { 0x8500, 0xff43, 0x3fe0 },
+  { 0x8500, 0xff41, 0x2fe0 },
+  { 0x1800, 0xff40, 0x0000 },
+  { 0x0500, 0xff42, 0x0fe0 },
+  { 0x8500, 0xff45, 0x2fe0 },
+  { 0x0500, 0xff44, 0x0fe0 },
+  { 0x0500, 0xff46, 0x0fe0 },
+  { 0x8500, 0xff4b, 0x3fe0 },
+  { 0x8500, 0xff49, 0x2fe0 },
+  { 0x0500, 0xff48, 0x0fe0 },
+  { 0x0500, 0xff4a, 0x0fe0 },
+  { 0x8500, 0xff4d, 0x2fe0 },
+  { 0x0500, 0xff4c, 0x0fe0 },
+  { 0x0500, 0xff4e, 0x0fe0 },
+  { 0x9600, 0xff5f, 0x5000 },
+  { 0x8500, 0xff57, 0x4fe0 },
+  { 0x8500, 0xff53, 0x3fe0 },
+  { 0x8500, 0xff51, 0x2fe0 },
+  { 0x0500, 0xff50, 0x0fe0 },
+  { 0x0500, 0xff52, 0x0fe0 },
+  { 0x8500, 0xff55, 0x2fe0 },
+  { 0x0500, 0xff54, 0x0fe0 },
+  { 0x0500, 0xff56, 0x0fe0 },
+  { 0x9600, 0xff5b, 0x3000 },
+  { 0x8500, 0xff59, 0x2fe0 },
+  { 0x0500, 0xff58, 0x0fe0 },
+  { 0x0500, 0xff5a, 0x0fe0 },
+  { 0x9200, 0xff5d, 0x2000 },
+  { 0x1900, 0xff5c, 0x0000 },
+  { 0x1900, 0xff5e, 0x0000 },
+  { 0x8700, 0xff67, 0x4000 },
+  { 0x9200, 0xff63, 0x3000 },
+  { 0x9500, 0xff61, 0x2000 },
+  { 0x1200, 0xff60, 0x0000 },
+  { 0x1600, 0xff62, 0x0000 },
+  { 0x9000, 0xff65, 0x2000 },
+  { 0x1500, 0xff64, 0x0000 },
+  { 0x0700, 0xff66, 0x0000 },
+  { 0x8700, 0xff6b, 0x3000 },
+  { 0x8700, 0xff69, 0x2000 },
+  { 0x0700, 0xff68, 0x0000 },
+  { 0x0700, 0xff6a, 0x0000 },
+  { 0x8700, 0xff6d, 0x2000 },
+  { 0x0700, 0xff6c, 0x0000 },
+  { 0x0700, 0xff6e, 0x0000 },
+  { 0x8700, 0xff8f, 0x6000 },
+  { 0x8700, 0xff7f, 0x5000 },
+  { 0x8700, 0xff77, 0x4000 },
+  { 0x8700, 0xff73, 0x3000 },
+  { 0x8700, 0xff71, 0x2000 },
+  { 0x0600, 0xff70, 0x0000 },
+  { 0x0700, 0xff72, 0x0000 },
+  { 0x8700, 0xff75, 0x2000 },
+  { 0x0700, 0xff74, 0x0000 },
+  { 0x0700, 0xff76, 0x0000 },
+  { 0x8700, 0xff7b, 0x3000 },
+  { 0x8700, 0xff79, 0x2000 },
+  { 0x0700, 0xff78, 0x0000 },
+  { 0x0700, 0xff7a, 0x0000 },
+  { 0x8700, 0xff7d, 0x2000 },
+  { 0x0700, 0xff7c, 0x0000 },
+  { 0x0700, 0xff7e, 0x0000 },
+  { 0x8700, 0xff87, 0x4000 },
+  { 0x8700, 0xff83, 0x3000 },
+  { 0x8700, 0xff81, 0x2000 },
+  { 0x0700, 0xff80, 0x0000 },
+  { 0x0700, 0xff82, 0x0000 },
+  { 0x8700, 0xff85, 0x2000 },
+  { 0x0700, 0xff84, 0x0000 },
+  { 0x0700, 0xff86, 0x0000 },
+  { 0x8700, 0xff8b, 0x3000 },
+  { 0x8700, 0xff89, 0x2000 },
+  { 0x0700, 0xff88, 0x0000 },
+  { 0x0700, 0xff8a, 0x0000 },
+  { 0x8700, 0xff8d, 0x2000 },
+  { 0x0700, 0xff8c, 0x0000 },
+  { 0x0700, 0xff8e, 0x0000 },
+  { 0x8600, 0xff9f, 0x5000 },
+  { 0x8700, 0xff97, 0x4000 },
+  { 0x8700, 0xff93, 0x3000 },
+  { 0x8700, 0xff91, 0x2000 },
+  { 0x0700, 0xff90, 0x0000 },
+  { 0x0700, 0xff92, 0x0000 },
+  { 0x8700, 0xff95, 0x2000 },
+  { 0x0700, 0xff94, 0x0000 },
+  { 0x0700, 0xff96, 0x0000 },
+  { 0x8700, 0xff9b, 0x3000 },
+  { 0x8700, 0xff99, 0x2000 },
+  { 0x0700, 0xff98, 0x0000 },
+  { 0x0700, 0xff9a, 0x0000 },
+  { 0x8700, 0xff9d, 0x2000 },
+  { 0x0700, 0xff9c, 0x0000 },
+  { 0x0600, 0xff9e, 0x0000 },
+  { 0x8700, 0xffa7, 0x4000 },
+  { 0x8700, 0xffa3, 0x3000 },
+  { 0x8700, 0xffa1, 0x2000 },
+  { 0x0700, 0xffa0, 0x0000 },
+  { 0x0700, 0xffa2, 0x0000 },
+  { 0x8700, 0xffa5, 0x2000 },
+  { 0x0700, 0xffa4, 0x0000 },
+  { 0x0700, 0xffa6, 0x0000 },
+  { 0x8700, 0xffab, 0x3000 },
+  { 0x8700, 0xffa9, 0x2000 },
+  { 0x0700, 0xffa8, 0x0000 },
+  { 0x0700, 0xffaa, 0x0000 },
+  { 0x8700, 0xffad, 0x2000 },
+  { 0x0700, 0xffac, 0x0000 },
+  { 0x0700, 0xffae, 0x0000 },
+  { 0x8701, 0x004c, 0x8000 },
+  { 0x8701, 0x0008, 0x7000 },
+  { 0x8700, 0xffd6, 0x6000 },
+  { 0x8700, 0xffc2, 0x5000 },
+  { 0x8700, 0xffb7, 0x4000 },
+  { 0x8700, 0xffb3, 0x3000 },
+  { 0x8700, 0xffb1, 0x2000 },
+  { 0x0700, 0xffb0, 0x0000 },
+  { 0x0700, 0xffb2, 0x0000 },
+  { 0x8700, 0xffb5, 0x2000 },
+  { 0x0700, 0xffb4, 0x0000 },
+  { 0x0700, 0xffb6, 0x0000 },
+  { 0x8700, 0xffbb, 0x3000 },
+  { 0x8700, 0xffb9, 0x2000 },
+  { 0x0700, 0xffb8, 0x0000 },
+  { 0x0700, 0xffba, 0x0000 },
+  { 0x8700, 0xffbd, 0x2000 },
+  { 0x0700, 0xffbc, 0x0000 },
+  { 0x0700, 0xffbe, 0x0000 },
+  { 0x8700, 0xffcc, 0x4000 },
+  { 0x8700, 0xffc6, 0x3000 },
+  { 0x8700, 0xffc4, 0x2000 },
+  { 0x0700, 0xffc3, 0x0000 },
+  { 0x0700, 0xffc5, 0x0000 },
+  { 0x8700, 0xffca, 0x2000 },
+  { 0x0700, 0xffc7, 0x0000 },
+  { 0x0700, 0xffcb, 0x0000 },
+  { 0x8700, 0xffd2, 0x3000 },
+  { 0x8700, 0xffce, 0x2000 },
+  { 0x0700, 0xffcd, 0x0000 },
+  { 0x0700, 0xffcf, 0x0000 },
+  { 0x8700, 0xffd4, 0x2000 },
+  { 0x0700, 0xffd3, 0x0000 },
+  { 0x0700, 0xffd5, 0x0000 },
+  { 0x9900, 0xffec, 0x5000 },
+  { 0x9800, 0xffe3, 0x4000 },
+  { 0x8700, 0xffdc, 0x3000 },
+  { 0x8700, 0xffda, 0x2000 },
+  { 0x0700, 0xffd7, 0x0000 },
+  { 0x0700, 0xffdb, 0x0000 },
+  { 0x9700, 0xffe1, 0x2000 },
+  { 0x1700, 0xffe0, 0x0000 },
+  { 0x1900, 0xffe2, 0x0000 },
+  { 0x9a00, 0xffe8, 0x3000 },
+  { 0x9700, 0xffe5, 0x2000 },
+  { 0x1a00, 0xffe4, 0x0000 },
+  { 0x1700, 0xffe6, 0x0000 },
+  { 0x9900, 0xffea, 0x2000 },
+  { 0x1900, 0xffe9, 0x0000 },
+  { 0x1900, 0xffeb, 0x0000 },
+  { 0x8701, 0x0000, 0x4000 },
+  { 0x8100, 0xfffa, 0x3000 },
+  { 0x9a00, 0xffee, 0x2000 },
+  { 0x1a00, 0xffed, 0x0000 },
+  { 0x0100, 0xfff9, 0x0000 },
+  { 0x9a00, 0xfffc, 0x2000 },
+  { 0x0100, 0xfffb, 0x0000 },
+  { 0x1a00, 0xfffd, 0x0000 },
+  { 0x8701, 0x0004, 0x3000 },
+  { 0x8701, 0x0002, 0x2000 },
+  { 0x0701, 0x0001, 0x0000 },
+  { 0x0701, 0x0003, 0x0000 },
+  { 0x8701, 0x0006, 0x2000 },
+  { 0x0701, 0x0005, 0x0000 },
+  { 0x0701, 0x0007, 0x0000 },
+  { 0x8701, 0x002a, 0x6000 },
+  { 0x8701, 0x0019, 0x5000 },
+  { 0x8701, 0x0011, 0x4000 },
+  { 0x8701, 0x000d, 0x3000 },
+  { 0x8701, 0x000a, 0x2000 },
+  { 0x0701, 0x0009, 0x0000 },
+  { 0x0701, 0x000b, 0x0000 },
+  { 0x8701, 0x000f, 0x2000 },
+  { 0x0701, 0x000e, 0x0000 },
+  { 0x0701, 0x0010, 0x0000 },
+  { 0x8701, 0x0015, 0x3000 },
+  { 0x8701, 0x0013, 0x2000 },
+  { 0x0701, 0x0012, 0x0000 },
+  { 0x0701, 0x0014, 0x0000 },
+  { 0x8701, 0x0017, 0x2000 },
+  { 0x0701, 0x0016, 0x0000 },
+  { 0x0701, 0x0018, 0x0000 },
+  { 0x8701, 0x0021, 0x4000 },
+  { 0x8701, 0x001d, 0x3000 },
+  { 0x8701, 0x001b, 0x2000 },
+  { 0x0701, 0x001a, 0x0000 },
+  { 0x0701, 0x001c, 0x0000 },
+  { 0x8701, 0x001f, 0x2000 },
+  { 0x0701, 0x001e, 0x0000 },
+  { 0x0701, 0x0020, 0x0000 },
+  { 0x8701, 0x0025, 0x3000 },
+  { 0x8701, 0x0023, 0x2000 },
+  { 0x0701, 0x0022, 0x0000 },
+  { 0x0701, 0x0024, 0x0000 },
+  { 0x8701, 0x0028, 0x2000 },
+  { 0x0701, 0x0026, 0x0000 },
+  { 0x0701, 0x0029, 0x0000 },
+  { 0x8701, 0x003a, 0x5000 },
+  { 0x8701, 0x0032, 0x4000 },
+  { 0x8701, 0x002e, 0x3000 },
+  { 0x8701, 0x002c, 0x2000 },
+  { 0x0701, 0x002b, 0x0000 },
+  { 0x0701, 0x002d, 0x0000 },
+  { 0x8701, 0x0030, 0x2000 },
+  { 0x0701, 0x002f, 0x0000 },
+  { 0x0701, 0x0031, 0x0000 },
+  { 0x8701, 0x0036, 0x3000 },
+  { 0x8701, 0x0034, 0x2000 },
+  { 0x0701, 0x0033, 0x0000 },
+  { 0x0701, 0x0035, 0x0000 },
+  { 0x8701, 0x0038, 0x2000 },
+  { 0x0701, 0x0037, 0x0000 },
+  { 0x0701, 0x0039, 0x0000 },
+  { 0x8701, 0x0044, 0x4000 },
+  { 0x8701, 0x0040, 0x3000 },
+  { 0x8701, 0x003d, 0x2000 },
+  { 0x0701, 0x003c, 0x0000 },
+  { 0x0701, 0x003f, 0x0000 },
+  { 0x8701, 0x0042, 0x2000 },
+  { 0x0701, 0x0041, 0x0000 },
+  { 0x0701, 0x0043, 0x0000 },
+  { 0x8701, 0x0048, 0x3000 },
+  { 0x8701, 0x0046, 0x2000 },
+  { 0x0701, 0x0045, 0x0000 },
+  { 0x0701, 0x0047, 0x0000 },
+  { 0x8701, 0x004a, 0x2000 },
+  { 0x0701, 0x0049, 0x0000 },
+  { 0x0701, 0x004b, 0x0000 },
+  { 0x8701, 0x00b0, 0x7000 },
+  { 0x8701, 0x0090, 0x6000 },
+  { 0x8701, 0x0080, 0x5000 },
+  { 0x8701, 0x0056, 0x4000 },
+  { 0x8701, 0x0052, 0x3000 },
+  { 0x8701, 0x0050, 0x2000 },
+  { 0x0701, 0x004d, 0x0000 },
+  { 0x0701, 0x0051, 0x0000 },
+  { 0x8701, 0x0054, 0x2000 },
+  { 0x0701, 0x0053, 0x0000 },
+  { 0x0701, 0x0055, 0x0000 },
+  { 0x8701, 0x005a, 0x3000 },
+  { 0x8701, 0x0058, 0x2000 },
+  { 0x0701, 0x0057, 0x0000 },
+  { 0x0701, 0x0059, 0x0000 },
+  { 0x8701, 0x005c, 0x2000 },
+  { 0x0701, 0x005b, 0x0000 },
+  { 0x0701, 0x005d, 0x0000 },
+  { 0x8701, 0x0088, 0x4000 },
+  { 0x8701, 0x0084, 0x3000 },
+  { 0x8701, 0x0082, 0x2000 },
+  { 0x0701, 0x0081, 0x0000 },
+  { 0x0701, 0x0083, 0x0000 },
+  { 0x8701, 0x0086, 0x2000 },
+  { 0x0701, 0x0085, 0x0000 },
+  { 0x0701, 0x0087, 0x0000 },
+  { 0x8701, 0x008c, 0x3000 },
+  { 0x8701, 0x008a, 0x2000 },
+  { 0x0701, 0x0089, 0x0000 },
+  { 0x0701, 0x008b, 0x0000 },
+  { 0x8701, 0x008e, 0x2000 },
+  { 0x0701, 0x008d, 0x0000 },
+  { 0x0701, 0x008f, 0x0000 },
+  { 0x8701, 0x00a0, 0x5000 },
+  { 0x8701, 0x0098, 0x4000 },
+  { 0x8701, 0x0094, 0x3000 },
+  { 0x8701, 0x0092, 0x2000 },
+  { 0x0701, 0x0091, 0x0000 },
+  { 0x0701, 0x0093, 0x0000 },
+  { 0x8701, 0x0096, 0x2000 },
+  { 0x0701, 0x0095, 0x0000 },
+  { 0x0701, 0x0097, 0x0000 },
+  { 0x8701, 0x009c, 0x3000 },
+  { 0x8701, 0x009a, 0x2000 },
+  { 0x0701, 0x0099, 0x0000 },
+  { 0x0701, 0x009b, 0x0000 },
+  { 0x8701, 0x009e, 0x2000 },
+  { 0x0701, 0x009d, 0x0000 },
+  { 0x0701, 0x009f, 0x0000 },
+  { 0x8701, 0x00a8, 0x4000 },
+  { 0x8701, 0x00a4, 0x3000 },
+  { 0x8701, 0x00a2, 0x2000 },
+  { 0x0701, 0x00a1, 0x0000 },
+  { 0x0701, 0x00a3, 0x0000 },
+  { 0x8701, 0x00a6, 0x2000 },
+  { 0x0701, 0x00a5, 0x0000 },
+  { 0x0701, 0x00a7, 0x0000 },
+  { 0x8701, 0x00ac, 0x3000 },
+  { 0x8701, 0x00aa, 0x2000 },
+  { 0x0701, 0x00a9, 0x0000 },
+  { 0x0701, 0x00ab, 0x0000 },
+  { 0x8701, 0x00ae, 0x2000 },
+  { 0x0701, 0x00ad, 0x0000 },
+  { 0x0701, 0x00af, 0x0000 },
+  { 0x8701, 0x00d0, 0x6000 },
+  { 0x8701, 0x00c0, 0x5000 },
+  { 0x8701, 0x00b8, 0x4000 },
+  { 0x8701, 0x00b4, 0x3000 },
+  { 0x8701, 0x00b2, 0x2000 },
+  { 0x0701, 0x00b1, 0x0000 },
+  { 0x0701, 0x00b3, 0x0000 },
+  { 0x8701, 0x00b6, 0x2000 },
+  { 0x0701, 0x00b5, 0x0000 },
+  { 0x0701, 0x00b7, 0x0000 },
+  { 0x8701, 0x00bc, 0x3000 },
+  { 0x8701, 0x00ba, 0x2000 },
+  { 0x0701, 0x00b9, 0x0000 },
+  { 0x0701, 0x00bb, 0x0000 },
+  { 0x8701, 0x00be, 0x2000 },
+  { 0x0701, 0x00bd, 0x0000 },
+  { 0x0701, 0x00bf, 0x0000 },
+  { 0x8701, 0x00c8, 0x4000 },
+  { 0x8701, 0x00c4, 0x3000 },
+  { 0x8701, 0x00c2, 0x2000 },
+  { 0x0701, 0x00c1, 0x0000 },
+  { 0x0701, 0x00c3, 0x0000 },
+  { 0x8701, 0x00c6, 0x2000 },
+  { 0x0701, 0x00c5, 0x0000 },
+  { 0x0701, 0x00c7, 0x0000 },
+  { 0x8701, 0x00cc, 0x3000 },
+  { 0x8701, 0x00ca, 0x2000 },
+  { 0x0701, 0x00c9, 0x0000 },
+  { 0x0701, 0x00cb, 0x0000 },
+  { 0x8701, 0x00ce, 0x2000 },
+  { 0x0701, 0x00cd, 0x0000 },
+  { 0x0701, 0x00cf, 0x0000 },
+  { 0x8701, 0x00e0, 0x5000 },
+  { 0x8701, 0x00d8, 0x4000 },
+  { 0x8701, 0x00d4, 0x3000 },
+  { 0x8701, 0x00d2, 0x2000 },
+  { 0x0701, 0x00d1, 0x0000 },
+  { 0x0701, 0x00d3, 0x0000 },
+  { 0x8701, 0x00d6, 0x2000 },
+  { 0x0701, 0x00d5, 0x0000 },
+  { 0x0701, 0x00d7, 0x0000 },
+  { 0x8701, 0x00dc, 0x3000 },
+  { 0x8701, 0x00da, 0x2000 },
+  { 0x0701, 0x00d9, 0x0000 },
+  { 0x0701, 0x00db, 0x0000 },
+  { 0x8701, 0x00de, 0x2000 },
+  { 0x0701, 0x00dd, 0x0000 },
+  { 0x0701, 0x00df, 0x0000 },
+  { 0x8701, 0x00e8, 0x4000 },
+  { 0x8701, 0x00e4, 0x3000 },
+  { 0x8701, 0x00e2, 0x2000 },
+  { 0x0701, 0x00e1, 0x0000 },
+  { 0x0701, 0x00e3, 0x0000 },
+  { 0x8701, 0x00e6, 0x2000 },
+  { 0x0701, 0x00e5, 0x0000 },
+  { 0x0701, 0x00e7, 0x0000 },
+  { 0x8701, 0x00ec, 0x3000 },
+  { 0x8701, 0x00ea, 0x2000 },
+  { 0x0701, 0x00e9, 0x0000 },
+  { 0x0701, 0x00eb, 0x0000 },
+  { 0x8701, 0x00ee, 0x2000 },
+  { 0x0701, 0x00ed, 0x0000 },
+  { 0x0701, 0x00ef, 0x0000 },
+  { 0x8501, 0xd459, 0xb000 },
+  { 0x9a01, 0xd080, 0xa000 },
+  { 0x8701, 0x045f, 0x9000 },
+  { 0x8701, 0x0349, 0x8000 },
+  { 0x9a01, 0x013c, 0x7000 },
+  { 0x8f01, 0x0119, 0x6000 },
+  { 0x8f01, 0x0109, 0x5000 },
+  { 0x8701, 0x00f8, 0x4000 },
+  { 0x8701, 0x00f4, 0x3000 },
+  { 0x8701, 0x00f2, 0x2000 },
+  { 0x0701, 0x00f1, 0x0000 },
+  { 0x0701, 0x00f3, 0x0000 },
+  { 0x8701, 0x00f6, 0x2000 },
+  { 0x0701, 0x00f5, 0x0000 },
+  { 0x0701, 0x00f7, 0x0000 },
+  { 0x9501, 0x0101, 0x3000 },
+  { 0x8701, 0x00fa, 0x2000 },
+  { 0x0701, 0x00f9, 0x0000 },
+  { 0x1501, 0x0100, 0x0000 },
+  { 0x8f01, 0x0107, 0x2000 },
+  { 0x1a01, 0x0102, 0x0000 },
+  { 0x0f01, 0x0108, 0x0000 },
+  { 0x8f01, 0x0111, 0x4000 },
+  { 0x8f01, 0x010d, 0x3000 },
+  { 0x8f01, 0x010b, 0x2000 },
+  { 0x0f01, 0x010a, 0x0000 },
+  { 0x0f01, 0x010c, 0x0000 },
+  { 0x8f01, 0x010f, 0x2000 },
+  { 0x0f01, 0x010e, 0x0000 },
+  { 0x0f01, 0x0110, 0x0000 },
+  { 0x8f01, 0x0115, 0x3000 },
+  { 0x8f01, 0x0113, 0x2000 },
+  { 0x0f01, 0x0112, 0x0000 },
+  { 0x0f01, 0x0114, 0x0000 },
+  { 0x8f01, 0x0117, 0x2000 },
+  { 0x0f01, 0x0116, 0x0000 },
+  { 0x0f01, 0x0118, 0x0000 },
+  { 0x8f01, 0x0129, 0x5000 },
+  { 0x8f01, 0x0121, 0x4000 },
+  { 0x8f01, 0x011d, 0x3000 },
+  { 0x8f01, 0x011b, 0x2000 },
+  { 0x0f01, 0x011a, 0x0000 },
+  { 0x0f01, 0x011c, 0x0000 },
+  { 0x8f01, 0x011f, 0x2000 },
+  { 0x0f01, 0x011e, 0x0000 },
+  { 0x0f01, 0x0120, 0x0000 },
+  { 0x8f01, 0x0125, 0x3000 },
+  { 0x8f01, 0x0123, 0x2000 },
+  { 0x0f01, 0x0122, 0x0000 },
+  { 0x0f01, 0x0124, 0x0000 },
+  { 0x8f01, 0x0127, 0x2000 },
+  { 0x0f01, 0x0126, 0x0000 },
+  { 0x0f01, 0x0128, 0x0000 },
+  { 0x8f01, 0x0131, 0x4000 },
+  { 0x8f01, 0x012d, 0x3000 },
+  { 0x8f01, 0x012b, 0x2000 },
+  { 0x0f01, 0x012a, 0x0000 },
+  { 0x0f01, 0x012c, 0x0000 },
+  { 0x8f01, 0x012f, 0x2000 },
+  { 0x0f01, 0x012e, 0x0000 },
+  { 0x0f01, 0x0130, 0x0000 },
+  { 0x9a01, 0x0138, 0x3000 },
+  { 0x8f01, 0x0133, 0x2000 },
+  { 0x0f01, 0x0132, 0x0000 },
+  { 0x1a01, 0x0137, 0x0000 },
+  { 0x9a01, 0x013a, 0x2000 },
+  { 0x1a01, 0x0139, 0x0000 },
+  { 0x1a01, 0x013b, 0x0000 },
+  { 0x8701, 0x031c, 0x6000 },
+  { 0x8701, 0x030c, 0x5000 },
+  { 0x8701, 0x0304, 0x4000 },
+  { 0x8701, 0x0300, 0x3000 },
+  { 0x9a01, 0x013e, 0x2000 },
+  { 0x1a01, 0x013d, 0x0000 },
+  { 0x1a01, 0x013f, 0x0000 },
+  { 0x8701, 0x0302, 0x2000 },
+  { 0x0701, 0x0301, 0x0000 },
+  { 0x0701, 0x0303, 0x0000 },
+  { 0x8701, 0x0308, 0x3000 },
+  { 0x8701, 0x0306, 0x2000 },
+  { 0x0701, 0x0305, 0x0000 },
+  { 0x0701, 0x0307, 0x0000 },
+  { 0x8701, 0x030a, 0x2000 },
+  { 0x0701, 0x0309, 0x0000 },
+  { 0x0701, 0x030b, 0x0000 },
+  { 0x8701, 0x0314, 0x4000 },
+  { 0x8701, 0x0310, 0x3000 },
+  { 0x8701, 0x030e, 0x2000 },
+  { 0x0701, 0x030d, 0x0000 },
+  { 0x0701, 0x030f, 0x0000 },
+  { 0x8701, 0x0312, 0x2000 },
+  { 0x0701, 0x0311, 0x0000 },
+  { 0x0701, 0x0313, 0x0000 },
+  { 0x8701, 0x0318, 0x3000 },
+  { 0x8701, 0x0316, 0x2000 },
+  { 0x0701, 0x0315, 0x0000 },
+  { 0x0701, 0x0317, 0x0000 },
+  { 0x8701, 0x031a, 0x2000 },
+  { 0x0701, 0x0319, 0x0000 },
+  { 0x0701, 0x031b, 0x0000 },
+  { 0x8701, 0x0339, 0x5000 },
+  { 0x8701, 0x0331, 0x4000 },
+  { 0x8f01, 0x0321, 0x3000 },
+  { 0x8701, 0x031e, 0x2000 },
+  { 0x0701, 0x031d, 0x0000 },
+  { 0x0f01, 0x0320, 0x0000 },
+  { 0x8f01, 0x0323, 0x2000 },
+  { 0x0f01, 0x0322, 0x0000 },
+  { 0x0701, 0x0330, 0x0000 },
+  { 0x8701, 0x0335, 0x3000 },
+  { 0x8701, 0x0333, 0x2000 },
+  { 0x0701, 0x0332, 0x0000 },
+  { 0x0701, 0x0334, 0x0000 },
+  { 0x8701, 0x0337, 0x2000 },
+  { 0x0701, 0x0336, 0x0000 },
+  { 0x0701, 0x0338, 0x0000 },
+  { 0x8701, 0x0341, 0x4000 },
+  { 0x8701, 0x033d, 0x3000 },
+  { 0x8701, 0x033b, 0x2000 },
+  { 0x0701, 0x033a, 0x0000 },
+  { 0x0701, 0x033c, 0x0000 },
+  { 0x8701, 0x033f, 0x2000 },
+  { 0x0701, 0x033e, 0x0000 },
+  { 0x0701, 0x0340, 0x0000 },
+  { 0x8701, 0x0345, 0x3000 },
+  { 0x8701, 0x0343, 0x2000 },
+  { 0x0701, 0x0342, 0x0000 },
+  { 0x0701, 0x0344, 0x0000 },
+  { 0x8701, 0x0347, 0x2000 },
+  { 0x0701, 0x0346, 0x0000 },
+  { 0x0701, 0x0348, 0x0000 },
+  { 0x8901, 0x041f, 0x7028 },
+  { 0x9501, 0x039f, 0x6000 },
+  { 0x8701, 0x038e, 0x5000 },
+  { 0x8701, 0x0386, 0x4000 },
+  { 0x8701, 0x0382, 0x3000 },
+  { 0x8701, 0x0380, 0x2000 },
+  { 0x0e01, 0x034a, 0x0000 },
+  { 0x0701, 0x0381, 0x0000 },
+  { 0x8701, 0x0384, 0x2000 },
+  { 0x0701, 0x0383, 0x0000 },
+  { 0x0701, 0x0385, 0x0000 },
+  { 0x8701, 0x038a, 0x3000 },
+  { 0x8701, 0x0388, 0x2000 },
+  { 0x0701, 0x0387, 0x0000 },
+  { 0x0701, 0x0389, 0x0000 },
+  { 0x8701, 0x038c, 0x2000 },
+  { 0x0701, 0x038b, 0x0000 },
+  { 0x0701, 0x038d, 0x0000 },
+  { 0x8701, 0x0396, 0x4000 },
+  { 0x8701, 0x0392, 0x3000 },
+  { 0x8701, 0x0390, 0x2000 },
+  { 0x0701, 0x038f, 0x0000 },
+  { 0x0701, 0x0391, 0x0000 },
+  { 0x8701, 0x0394, 0x2000 },
+  { 0x0701, 0x0393, 0x0000 },
+  { 0x0701, 0x0395, 0x0000 },
+  { 0x8701, 0x039a, 0x3000 },
+  { 0x8701, 0x0398, 0x2000 },
+  { 0x0701, 0x0397, 0x0000 },
+  { 0x0701, 0x0399, 0x0000 },
+  { 0x8701, 0x039c, 0x2000 },
+  { 0x0701, 0x039b, 0x0000 },
+  { 0x0701, 0x039d, 0x0000 },
+  { 0x8901, 0x040f, 0x5028 },
+  { 0x8901, 0x0407, 0x4028 },
+  { 0x8901, 0x0403, 0x3028 },
+  { 0x8901, 0x0401, 0x2028 },
+  { 0x0901, 0x0400, 0x0028 },
+  { 0x0901, 0x0402, 0x0028 },
+  { 0x8901, 0x0405, 0x2028 },
+  { 0x0901, 0x0404, 0x0028 },
+  { 0x0901, 0x0406, 0x0028 },
+  { 0x8901, 0x040b, 0x3028 },
+  { 0x8901, 0x0409, 0x2028 },
+  { 0x0901, 0x0408, 0x0028 },
+  { 0x0901, 0x040a, 0x0028 },
+  { 0x8901, 0x040d, 0x2028 },
+  { 0x0901, 0x040c, 0x0028 },
+  { 0x0901, 0x040e, 0x0028 },
+  { 0x8901, 0x0417, 0x4028 },
+  { 0x8901, 0x0413, 0x3028 },
+  { 0x8901, 0x0411, 0x2028 },
+  { 0x0901, 0x0410, 0x0028 },
+  { 0x0901, 0x0412, 0x0028 },
+  { 0x8901, 0x0415, 0x2028 },
+  { 0x0901, 0x0414, 0x0028 },
+  { 0x0901, 0x0416, 0x0028 },
+  { 0x8901, 0x041b, 0x3028 },
+  { 0x8901, 0x0419, 0x2028 },
+  { 0x0901, 0x0418, 0x0028 },
+  { 0x0901, 0x041a, 0x0028 },
+  { 0x8901, 0x041d, 0x2028 },
+  { 0x0901, 0x041c, 0x0028 },
+  { 0x0901, 0x041e, 0x0028 },
+  { 0x8501, 0x043f, 0x6fd8 },
+  { 0x8501, 0x042f, 0x5fd8 },
+  { 0x8901, 0x0427, 0x4028 },
+  { 0x8901, 0x0423, 0x3028 },
+  { 0x8901, 0x0421, 0x2028 },
+  { 0x0901, 0x0420, 0x0028 },
+  { 0x0901, 0x0422, 0x0028 },
+  { 0x8901, 0x0425, 0x2028 },
+  { 0x0901, 0x0424, 0x0028 },
+  { 0x0901, 0x0426, 0x0028 },
+  { 0x8501, 0x042b, 0x3fd8 },
+  { 0x8501, 0x0429, 0x2fd8 },
+  { 0x0501, 0x0428, 0x0fd8 },
+  { 0x0501, 0x042a, 0x0fd8 },
+  { 0x8501, 0x042d, 0x2fd8 },
+  { 0x0501, 0x042c, 0x0fd8 },
+  { 0x0501, 0x042e, 0x0fd8 },
+  { 0x8501, 0x0437, 0x4fd8 },
+  { 0x8501, 0x0433, 0x3fd8 },
+  { 0x8501, 0x0431, 0x2fd8 },
+  { 0x0501, 0x0430, 0x0fd8 },
+  { 0x0501, 0x0432, 0x0fd8 },
+  { 0x8501, 0x0435, 0x2fd8 },
+  { 0x0501, 0x0434, 0x0fd8 },
+  { 0x0501, 0x0436, 0x0fd8 },
+  { 0x8501, 0x043b, 0x3fd8 },
+  { 0x8501, 0x0439, 0x2fd8 },
+  { 0x0501, 0x0438, 0x0fd8 },
+  { 0x0501, 0x043a, 0x0fd8 },
+  { 0x8501, 0x043d, 0x2fd8 },
+  { 0x0501, 0x043c, 0x0fd8 },
+  { 0x0501, 0x043e, 0x0fd8 },
+  { 0x8501, 0x044f, 0x5fd8 },
+  { 0x8501, 0x0447, 0x4fd8 },
+  { 0x8501, 0x0443, 0x3fd8 },
+  { 0x8501, 0x0441, 0x2fd8 },
+  { 0x0501, 0x0440, 0x0fd8 },
+  { 0x0501, 0x0442, 0x0fd8 },
+  { 0x8501, 0x0445, 0x2fd8 },
+  { 0x0501, 0x0444, 0x0fd8 },
+  { 0x0501, 0x0446, 0x0fd8 },
+  { 0x8501, 0x044b, 0x3fd8 },
+  { 0x8501, 0x0449, 0x2fd8 },
+  { 0x0501, 0x0448, 0x0fd8 },
+  { 0x0501, 0x044a, 0x0fd8 },
+  { 0x8501, 0x044d, 0x2fd8 },
+  { 0x0501, 0x044c, 0x0fd8 },
+  { 0x0501, 0x044e, 0x0fd8 },
+  { 0x8701, 0x0457, 0x4000 },
+  { 0x8701, 0x0453, 0x3000 },
+  { 0x8701, 0x0451, 0x2000 },
+  { 0x0701, 0x0450, 0x0000 },
+  { 0x0701, 0x0452, 0x0000 },
+  { 0x8701, 0x0455, 0x2000 },
+  { 0x0701, 0x0454, 0x0000 },
+  { 0x0701, 0x0456, 0x0000 },
+  { 0x8701, 0x045b, 0x3000 },
+  { 0x8701, 0x0459, 0x2000 },
+  { 0x0701, 0x0458, 0x0000 },
+  { 0x0701, 0x045a, 0x0000 },
+  { 0x8701, 0x045d, 0x2000 },
+  { 0x0701, 0x045c, 0x0000 },
+  { 0x0701, 0x045e, 0x0000 },
+  { 0x9a01, 0xd000, 0x8000 },
+  { 0x8d01, 0x04a1, 0x7000 },
+  { 0x8701, 0x047f, 0x6000 },
+  { 0x8701, 0x046f, 0x5000 },
+  { 0x8701, 0x0467, 0x4000 },
+  { 0x8701, 0x0463, 0x3000 },
+  { 0x8701, 0x0461, 0x2000 },
+  { 0x0701, 0x0460, 0x0000 },
+  { 0x0701, 0x0462, 0x0000 },
+  { 0x8701, 0x0465, 0x2000 },
+  { 0x0701, 0x0464, 0x0000 },
+  { 0x0701, 0x0466, 0x0000 },
+  { 0x8701, 0x046b, 0x3000 },
+  { 0x8701, 0x0469, 0x2000 },
+  { 0x0701, 0x0468, 0x0000 },
+  { 0x0701, 0x046a, 0x0000 },
+  { 0x8701, 0x046d, 0x2000 },
+  { 0x0701, 0x046c, 0x0000 },
+  { 0x0701, 0x046e, 0x0000 },
+  { 0x8701, 0x0477, 0x4000 },
+  { 0x8701, 0x0473, 0x3000 },
+  { 0x8701, 0x0471, 0x2000 },
+  { 0x0701, 0x0470, 0x0000 },
+  { 0x0701, 0x0472, 0x0000 },
+  { 0x8701, 0x0475, 0x2000 },
+  { 0x0701, 0x0474, 0x0000 },
+  { 0x0701, 0x0476, 0x0000 },
+  { 0x8701, 0x047b, 0x3000 },
+  { 0x8701, 0x0479, 0x2000 },
+  { 0x0701, 0x0478, 0x0000 },
+  { 0x0701, 0x047a, 0x0000 },
+  { 0x8701, 0x047d, 0x2000 },
+  { 0x0701, 0x047c, 0x0000 },
+  { 0x0701, 0x047e, 0x0000 },
+  { 0x8701, 0x048f, 0x5000 },
+  { 0x8701, 0x0487, 0x4000 },
+  { 0x8701, 0x0483, 0x3000 },
+  { 0x8701, 0x0481, 0x2000 },
+  { 0x0701, 0x0480, 0x0000 },
+  { 0x0701, 0x0482, 0x0000 },
+  { 0x8701, 0x0485, 0x2000 },
+  { 0x0701, 0x0484, 0x0000 },
+  { 0x0701, 0x0486, 0x0000 },
+  { 0x8701, 0x048b, 0x3000 },
+  { 0x8701, 0x0489, 0x2000 },
+  { 0x0701, 0x0488, 0x0000 },
+  { 0x0701, 0x048a, 0x0000 },
+  { 0x8701, 0x048d, 0x2000 },
+  { 0x0701, 0x048c, 0x0000 },
+  { 0x0701, 0x048e, 0x0000 },
+  { 0x8701, 0x0497, 0x4000 },
+  { 0x8701, 0x0493, 0x3000 },
+  { 0x8701, 0x0491, 0x2000 },
+  { 0x0701, 0x0490, 0x0000 },
+  { 0x0701, 0x0492, 0x0000 },
+  { 0x8701, 0x0495, 0x2000 },
+  { 0x0701, 0x0494, 0x0000 },
+  { 0x0701, 0x0496, 0x0000 },
+  { 0x8701, 0x049b, 0x3000 },
+  { 0x8701, 0x0499, 0x2000 },
+  { 0x0701, 0x0498, 0x0000 },
+  { 0x0701, 0x049a, 0x0000 },
+  { 0x8701, 0x049d, 0x2000 },
+  { 0x0701, 0x049c, 0x0000 },
+  { 0x0d01, 0x04a0, 0x0000 },
+  { 0x8701, 0x081a, 0x6000 },
+  { 0x8701, 0x080a, 0x5000 },
+  { 0x8d01, 0x04a9, 0x4000 },
+  { 0x8d01, 0x04a5, 0x3000 },
+  { 0x8d01, 0x04a3, 0x2000 },
+  { 0x0d01, 0x04a2, 0x0000 },
+  { 0x0d01, 0x04a4, 0x0000 },
+  { 0x8d01, 0x04a7, 0x2000 },
+  { 0x0d01, 0x04a6, 0x0000 },
+  { 0x0d01, 0x04a8, 0x0000 },
+  { 0x8701, 0x0803, 0x3000 },
+  { 0x8701, 0x0801, 0x2000 },
+  { 0x0701, 0x0800, 0x0000 },
+  { 0x0701, 0x0802, 0x0000 },
+  { 0x8701, 0x0805, 0x2000 },
+  { 0x0701, 0x0804, 0x0000 },
+  { 0x0701, 0x0808, 0x0000 },
+  { 0x8701, 0x0812, 0x4000 },
+  { 0x8701, 0x080e, 0x3000 },
+  { 0x8701, 0x080c, 0x2000 },
+  { 0x0701, 0x080b, 0x0000 },
+  { 0x0701, 0x080d, 0x0000 },
+  { 0x8701, 0x0810, 0x2000 },
+  { 0x0701, 0x080f, 0x0000 },
+  { 0x0701, 0x0811, 0x0000 },
+  { 0x8701, 0x0816, 0x3000 },
+  { 0x8701, 0x0814, 0x2000 },
+  { 0x0701, 0x0813, 0x0000 },
+  { 0x0701, 0x0815, 0x0000 },
+  { 0x8701, 0x0818, 0x2000 },
+  { 0x0701, 0x0817, 0x0000 },
+  { 0x0701, 0x0819, 0x0000 },
+  { 0x8701, 0x082a, 0x5000 },
+  { 0x8701, 0x0822, 0x4000 },
+  { 0x8701, 0x081e, 0x3000 },
+  { 0x8701, 0x081c, 0x2000 },
+  { 0x0701, 0x081b, 0x0000 },
+  { 0x0701, 0x081d, 0x0000 },
+  { 0x8701, 0x0820, 0x2000 },
+  { 0x0701, 0x081f, 0x0000 },
+  { 0x0701, 0x0821, 0x0000 },
+  { 0x8701, 0x0826, 0x3000 },
+  { 0x8701, 0x0824, 0x2000 },
+  { 0x0701, 0x0823, 0x0000 },
+  { 0x0701, 0x0825, 0x0000 },
+  { 0x8701, 0x0828, 0x2000 },
+  { 0x0701, 0x0827, 0x0000 },
+  { 0x0701, 0x0829, 0x0000 },
+  { 0x8701, 0x0832, 0x4000 },
+  { 0x8701, 0x082e, 0x3000 },
+  { 0x8701, 0x082c, 0x2000 },
+  { 0x0701, 0x082b, 0x0000 },
+  { 0x0701, 0x082d, 0x0000 },
+  { 0x8701, 0x0830, 0x2000 },
+  { 0x0701, 0x082f, 0x0000 },
+  { 0x0701, 0x0831, 0x0000 },
+  { 0x8701, 0x0837, 0x3000 },
+  { 0x8701, 0x0834, 0x2000 },
+  { 0x0701, 0x0833, 0x0000 },
+  { 0x0701, 0x0835, 0x0000 },
+  { 0x8701, 0x083c, 0x2000 },
+  { 0x0701, 0x0838, 0x0000 },
+  { 0x0701, 0x083f, 0x0000 },
+  { 0x9a01, 0xd040, 0x7000 },
+  { 0x9a01, 0xd020, 0x6000 },
+  { 0x9a01, 0xd010, 0x5000 },
+  { 0x9a01, 0xd008, 0x4000 },
+  { 0x9a01, 0xd004, 0x3000 },
+  { 0x9a01, 0xd002, 0x2000 },
+  { 0x1a01, 0xd001, 0x0000 },
+  { 0x1a01, 0xd003, 0x0000 },
+  { 0x9a01, 0xd006, 0x2000 },
+  { 0x1a01, 0xd005, 0x0000 },
+  { 0x1a01, 0xd007, 0x0000 },
+  { 0x9a01, 0xd00c, 0x3000 },
+  { 0x9a01, 0xd00a, 0x2000 },
+  { 0x1a01, 0xd009, 0x0000 },
+  { 0x1a01, 0xd00b, 0x0000 },
+  { 0x9a01, 0xd00e, 0x2000 },
+  { 0x1a01, 0xd00d, 0x0000 },
+  { 0x1a01, 0xd00f, 0x0000 },
+  { 0x9a01, 0xd018, 0x4000 },
+  { 0x9a01, 0xd014, 0x3000 },
+  { 0x9a01, 0xd012, 0x2000 },
+  { 0x1a01, 0xd011, 0x0000 },
+  { 0x1a01, 0xd013, 0x0000 },
+  { 0x9a01, 0xd016, 0x2000 },
+  { 0x1a01, 0xd015, 0x0000 },
+  { 0x1a01, 0xd017, 0x0000 },
+  { 0x9a01, 0xd01c, 0x3000 },
+  { 0x9a01, 0xd01a, 0x2000 },
+  { 0x1a01, 0xd019, 0x0000 },
+  { 0x1a01, 0xd01b, 0x0000 },
+  { 0x9a01, 0xd01e, 0x2000 },
+  { 0x1a01, 0xd01d, 0x0000 },
+  { 0x1a01, 0xd01f, 0x0000 },
+  { 0x9a01, 0xd030, 0x5000 },
+  { 0x9a01, 0xd028, 0x4000 },
+  { 0x9a01, 0xd024, 0x3000 },
+  { 0x9a01, 0xd022, 0x2000 },
+  { 0x1a01, 0xd021, 0x0000 },
+  { 0x1a01, 0xd023, 0x0000 },
+  { 0x9a01, 0xd026, 0x2000 },
+  { 0x1a01, 0xd025, 0x0000 },
+  { 0x1a01, 0xd027, 0x0000 },
+  { 0x9a01, 0xd02c, 0x3000 },
+  { 0x9a01, 0xd02a, 0x2000 },
+  { 0x1a01, 0xd029, 0x0000 },
+  { 0x1a01, 0xd02b, 0x0000 },
+  { 0x9a01, 0xd02e, 0x2000 },
+  { 0x1a01, 0xd02d, 0x0000 },
+  { 0x1a01, 0xd02f, 0x0000 },
+  { 0x9a01, 0xd038, 0x4000 },
+  { 0x9a01, 0xd034, 0x3000 },
+  { 0x9a01, 0xd032, 0x2000 },
+  { 0x1a01, 0xd031, 0x0000 },
+  { 0x1a01, 0xd033, 0x0000 },
+  { 0x9a01, 0xd036, 0x2000 },
+  { 0x1a01, 0xd035, 0x0000 },
+  { 0x1a01, 0xd037, 0x0000 },
+  { 0x9a01, 0xd03c, 0x3000 },
+  { 0x9a01, 0xd03a, 0x2000 },
+  { 0x1a01, 0xd039, 0x0000 },
+  { 0x1a01, 0xd03b, 0x0000 },
+  { 0x9a01, 0xd03e, 0x2000 },
+  { 0x1a01, 0xd03d, 0x0000 },
+  { 0x1a01, 0xd03f, 0x0000 },
+  { 0x9a01, 0xd060, 0x6000 },
+  { 0x9a01, 0xd050, 0x5000 },
+  { 0x9a01, 0xd048, 0x4000 },
+  { 0x9a01, 0xd044, 0x3000 },
+  { 0x9a01, 0xd042, 0x2000 },
+  { 0x1a01, 0xd041, 0x0000 },
+  { 0x1a01, 0xd043, 0x0000 },
+  { 0x9a01, 0xd046, 0x2000 },
+  { 0x1a01, 0xd045, 0x0000 },
+  { 0x1a01, 0xd047, 0x0000 },
+  { 0x9a01, 0xd04c, 0x3000 },
+  { 0x9a01, 0xd04a, 0x2000 },
+  { 0x1a01, 0xd049, 0x0000 },
+  { 0x1a01, 0xd04b, 0x0000 },
+  { 0x9a01, 0xd04e, 0x2000 },
+  { 0x1a01, 0xd04d, 0x0000 },
+  { 0x1a01, 0xd04f, 0x0000 },
+  { 0x9a01, 0xd058, 0x4000 },
+  { 0x9a01, 0xd054, 0x3000 },
+  { 0x9a01, 0xd052, 0x2000 },
+  { 0x1a01, 0xd051, 0x0000 },
+  { 0x1a01, 0xd053, 0x0000 },
+  { 0x9a01, 0xd056, 0x2000 },
+  { 0x1a01, 0xd055, 0x0000 },
+  { 0x1a01, 0xd057, 0x0000 },
+  { 0x9a01, 0xd05c, 0x3000 },
+  { 0x9a01, 0xd05a, 0x2000 },
+  { 0x1a01, 0xd059, 0x0000 },
+  { 0x1a01, 0xd05b, 0x0000 },
+  { 0x9a01, 0xd05e, 0x2000 },
+  { 0x1a01, 0xd05d, 0x0000 },
+  { 0x1a01, 0xd05f, 0x0000 },
+  { 0x9a01, 0xd070, 0x5000 },
+  { 0x9a01, 0xd068, 0x4000 },
+  { 0x9a01, 0xd064, 0x3000 },
+  { 0x9a01, 0xd062, 0x2000 },
+  { 0x1a01, 0xd061, 0x0000 },
+  { 0x1a01, 0xd063, 0x0000 },
+  { 0x9a01, 0xd066, 0x2000 },
+  { 0x1a01, 0xd065, 0x0000 },
+  { 0x1a01, 0xd067, 0x0000 },
+  { 0x9a01, 0xd06c, 0x3000 },
+  { 0x9a01, 0xd06a, 0x2000 },
+  { 0x1a01, 0xd069, 0x0000 },
+  { 0x1a01, 0xd06b, 0x0000 },
+  { 0x9a01, 0xd06e, 0x2000 },
+  { 0x1a01, 0xd06d, 0x0000 },
+  { 0x1a01, 0xd06f, 0x0000 },
+  { 0x9a01, 0xd078, 0x4000 },
+  { 0x9a01, 0xd074, 0x3000 },
+  { 0x9a01, 0xd072, 0x2000 },
+  { 0x1a01, 0xd071, 0x0000 },
+  { 0x1a01, 0xd073, 0x0000 },
+  { 0x9a01, 0xd076, 0x2000 },
+  { 0x1a01, 0xd075, 0x0000 },
+  { 0x1a01, 0xd077, 0x0000 },
+  { 0x9a01, 0xd07c, 0x3000 },
+  { 0x9a01, 0xd07a, 0x2000 },
+  { 0x1a01, 0xd079, 0x0000 },
+  { 0x1a01, 0xd07b, 0x0000 },
+  { 0x9a01, 0xd07e, 0x2000 },
+  { 0x1a01, 0xd07d, 0x0000 },
+  { 0x1a01, 0xd07f, 0x0000 },
+  { 0x9a01, 0xd18d, 0x9000 },
+  { 0x9a01, 0xd10a, 0x8000 },
+  { 0x9a01, 0xd0c0, 0x7000 },
+  { 0x9a01, 0xd0a0, 0x6000 },
+  { 0x9a01, 0xd090, 0x5000 },
+  { 0x9a01, 0xd088, 0x4000 },
+  { 0x9a01, 0xd084, 0x3000 },
+  { 0x9a01, 0xd082, 0x2000 },
+  { 0x1a01, 0xd081, 0x0000 },
+  { 0x1a01, 0xd083, 0x0000 },
+  { 0x9a01, 0xd086, 0x2000 },
+  { 0x1a01, 0xd085, 0x0000 },
+  { 0x1a01, 0xd087, 0x0000 },
+  { 0x9a01, 0xd08c, 0x3000 },
+  { 0x9a01, 0xd08a, 0x2000 },
+  { 0x1a01, 0xd089, 0x0000 },
+  { 0x1a01, 0xd08b, 0x0000 },
+  { 0x9a01, 0xd08e, 0x2000 },
+  { 0x1a01, 0xd08d, 0x0000 },
+  { 0x1a01, 0xd08f, 0x0000 },
+  { 0x9a01, 0xd098, 0x4000 },
+  { 0x9a01, 0xd094, 0x3000 },
+  { 0x9a01, 0xd092, 0x2000 },
+  { 0x1a01, 0xd091, 0x0000 },
+  { 0x1a01, 0xd093, 0x0000 },
+  { 0x9a01, 0xd096, 0x2000 },
+  { 0x1a01, 0xd095, 0x0000 },
+  { 0x1a01, 0xd097, 0x0000 },
+  { 0x9a01, 0xd09c, 0x3000 },
+  { 0x9a01, 0xd09a, 0x2000 },
+  { 0x1a01, 0xd099, 0x0000 },
+  { 0x1a01, 0xd09b, 0x0000 },
+  { 0x9a01, 0xd09e, 0x2000 },
+  { 0x1a01, 0xd09d, 0x0000 },
+  { 0x1a01, 0xd09f, 0x0000 },
+  { 0x9a01, 0xd0b0, 0x5000 },
+  { 0x9a01, 0xd0a8, 0x4000 },
+  { 0x9a01, 0xd0a4, 0x3000 },
+  { 0x9a01, 0xd0a2, 0x2000 },
+  { 0x1a01, 0xd0a1, 0x0000 },
+  { 0x1a01, 0xd0a3, 0x0000 },
+  { 0x9a01, 0xd0a6, 0x2000 },
+  { 0x1a01, 0xd0a5, 0x0000 },
+  { 0x1a01, 0xd0a7, 0x0000 },
+  { 0x9a01, 0xd0ac, 0x3000 },
+  { 0x9a01, 0xd0aa, 0x2000 },
+  { 0x1a01, 0xd0a9, 0x0000 },
+  { 0x1a01, 0xd0ab, 0x0000 },
+  { 0x9a01, 0xd0ae, 0x2000 },
+  { 0x1a01, 0xd0ad, 0x0000 },
+  { 0x1a01, 0xd0af, 0x0000 },
+  { 0x9a01, 0xd0b8, 0x4000 },
+  { 0x9a01, 0xd0b4, 0x3000 },
+  { 0x9a01, 0xd0b2, 0x2000 },
+  { 0x1a01, 0xd0b1, 0x0000 },
+  { 0x1a01, 0xd0b3, 0x0000 },
+  { 0x9a01, 0xd0b6, 0x2000 },
+  { 0x1a01, 0xd0b5, 0x0000 },
+  { 0x1a01, 0xd0b7, 0x0000 },
+  { 0x9a01, 0xd0bc, 0x3000 },
+  { 0x9a01, 0xd0ba, 0x2000 },
+  { 0x1a01, 0xd0b9, 0x0000 },
+  { 0x1a01, 0xd0bb, 0x0000 },
+  { 0x9a01, 0xd0be, 0x2000 },
+  { 0x1a01, 0xd0bd, 0x0000 },
+  { 0x1a01, 0xd0bf, 0x0000 },
+  { 0x9a01, 0xd0e0, 0x6000 },
+  { 0x9a01, 0xd0d0, 0x5000 },
+  { 0x9a01, 0xd0c8, 0x4000 },
+  { 0x9a01, 0xd0c4, 0x3000 },
+  { 0x9a01, 0xd0c2, 0x2000 },
+  { 0x1a01, 0xd0c1, 0x0000 },
+  { 0x1a01, 0xd0c3, 0x0000 },
+  { 0x9a01, 0xd0c6, 0x2000 },
+  { 0x1a01, 0xd0c5, 0x0000 },
+  { 0x1a01, 0xd0c7, 0x0000 },
+  { 0x9a01, 0xd0cc, 0x3000 },
+  { 0x9a01, 0xd0ca, 0x2000 },
+  { 0x1a01, 0xd0c9, 0x0000 },
+  { 0x1a01, 0xd0cb, 0x0000 },
+  { 0x9a01, 0xd0ce, 0x2000 },
+  { 0x1a01, 0xd0cd, 0x0000 },
+  { 0x1a01, 0xd0cf, 0x0000 },
+  { 0x9a01, 0xd0d8, 0x4000 },
+  { 0x9a01, 0xd0d4, 0x3000 },
+  { 0x9a01, 0xd0d2, 0x2000 },
+  { 0x1a01, 0xd0d1, 0x0000 },
+  { 0x1a01, 0xd0d3, 0x0000 },
+  { 0x9a01, 0xd0d6, 0x2000 },
+  { 0x1a01, 0xd0d5, 0x0000 },
+  { 0x1a01, 0xd0d7, 0x0000 },
+  { 0x9a01, 0xd0dc, 0x3000 },
+  { 0x9a01, 0xd0da, 0x2000 },
+  { 0x1a01, 0xd0d9, 0x0000 },
+  { 0x1a01, 0xd0db, 0x0000 },
+  { 0x9a01, 0xd0de, 0x2000 },
+  { 0x1a01, 0xd0dd, 0x0000 },
+  { 0x1a01, 0xd0df, 0x0000 },
+  { 0x9a01, 0xd0f0, 0x5000 },
+  { 0x9a01, 0xd0e8, 0x4000 },
+  { 0x9a01, 0xd0e4, 0x3000 },
+  { 0x9a01, 0xd0e2, 0x2000 },
+  { 0x1a01, 0xd0e1, 0x0000 },
+  { 0x1a01, 0xd0e3, 0x0000 },
+  { 0x9a01, 0xd0e6, 0x2000 },
+  { 0x1a01, 0xd0e5, 0x0000 },
+  { 0x1a01, 0xd0e7, 0x0000 },
+  { 0x9a01, 0xd0ec, 0x3000 },
+  { 0x9a01, 0xd0ea, 0x2000 },
+  { 0x1a01, 0xd0e9, 0x0000 },
+  { 0x1a01, 0xd0eb, 0x0000 },
+  { 0x9a01, 0xd0ee, 0x2000 },
+  { 0x1a01, 0xd0ed, 0x0000 },
+  { 0x1a01, 0xd0ef, 0x0000 },
+  { 0x9a01, 0xd102, 0x4000 },
+  { 0x9a01, 0xd0f4, 0x3000 },
+  { 0x9a01, 0xd0f2, 0x2000 },
+  { 0x1a01, 0xd0f1, 0x0000 },
+  { 0x1a01, 0xd0f3, 0x0000 },
+  { 0x9a01, 0xd100, 0x2000 },
+  { 0x1a01, 0xd0f5, 0x0000 },
+  { 0x1a01, 0xd101, 0x0000 },
+  { 0x9a01, 0xd106, 0x3000 },
+  { 0x9a01, 0xd104, 0x2000 },
+  { 0x1a01, 0xd103, 0x0000 },
+  { 0x1a01, 0xd105, 0x0000 },
+  { 0x9a01, 0xd108, 0x2000 },
+  { 0x1a01, 0xd107, 0x0000 },
+  { 0x1a01, 0xd109, 0x0000 },
+  { 0x9a01, 0xd14d, 0x7000 },
+  { 0x9a01, 0xd12d, 0x6000 },
+  { 0x9a01, 0xd11a, 0x5000 },
+  { 0x9a01, 0xd112, 0x4000 },
+  { 0x9a01, 0xd10e, 0x3000 },
+  { 0x9a01, 0xd10c, 0x2000 },
+  { 0x1a01, 0xd10b, 0x0000 },
+  { 0x1a01, 0xd10d, 0x0000 },
+  { 0x9a01, 0xd110, 0x2000 },
+  { 0x1a01, 0xd10f, 0x0000 },
+  { 0x1a01, 0xd111, 0x0000 },
+  { 0x9a01, 0xd116, 0x3000 },
+  { 0x9a01, 0xd114, 0x2000 },
+  { 0x1a01, 0xd113, 0x0000 },
+  { 0x1a01, 0xd115, 0x0000 },
+  { 0x9a01, 0xd118, 0x2000 },
+  { 0x1a01, 0xd117, 0x0000 },
+  { 0x1a01, 0xd119, 0x0000 },
+  { 0x9a01, 0xd122, 0x4000 },
+  { 0x9a01, 0xd11e, 0x3000 },
+  { 0x9a01, 0xd11c, 0x2000 },
+  { 0x1a01, 0xd11b, 0x0000 },
+  { 0x1a01, 0xd11d, 0x0000 },
+  { 0x9a01, 0xd120, 0x2000 },
+  { 0x1a01, 0xd11f, 0x0000 },
+  { 0x1a01, 0xd121, 0x0000 },
+  { 0x9a01, 0xd126, 0x3000 },
+  { 0x9a01, 0xd124, 0x2000 },
+  { 0x1a01, 0xd123, 0x0000 },
+  { 0x1a01, 0xd125, 0x0000 },
+  { 0x9a01, 0xd12b, 0x2000 },
+  { 0x1a01, 0xd12a, 0x0000 },
+  { 0x1a01, 0xd12c, 0x0000 },
+  { 0x9a01, 0xd13d, 0x5000 },
+  { 0x9a01, 0xd135, 0x4000 },
+  { 0x9a01, 0xd131, 0x3000 },
+  { 0x9a01, 0xd12f, 0x2000 },
+  { 0x1a01, 0xd12e, 0x0000 },
+  { 0x1a01, 0xd130, 0x0000 },
+  { 0x9a01, 0xd133, 0x2000 },
+  { 0x1a01, 0xd132, 0x0000 },
+  { 0x1a01, 0xd134, 0x0000 },
+  { 0x9a01, 0xd139, 0x3000 },
+  { 0x9a01, 0xd137, 0x2000 },
+  { 0x1a01, 0xd136, 0x0000 },
+  { 0x1a01, 0xd138, 0x0000 },
+  { 0x9a01, 0xd13b, 0x2000 },
+  { 0x1a01, 0xd13a, 0x0000 },
+  { 0x1a01, 0xd13c, 0x0000 },
+  { 0x9a01, 0xd145, 0x4000 },
+  { 0x9a01, 0xd141, 0x3000 },
+  { 0x9a01, 0xd13f, 0x2000 },
+  { 0x1a01, 0xd13e, 0x0000 },
+  { 0x1a01, 0xd140, 0x0000 },
+  { 0x9a01, 0xd143, 0x2000 },
+  { 0x1a01, 0xd142, 0x0000 },
+  { 0x1a01, 0xd144, 0x0000 },
+  { 0x9a01, 0xd149, 0x3000 },
+  { 0x9a01, 0xd147, 0x2000 },
+  { 0x1a01, 0xd146, 0x0000 },
+  { 0x1a01, 0xd148, 0x0000 },
+  { 0x9a01, 0xd14b, 0x2000 },
+  { 0x1a01, 0xd14a, 0x0000 },
+  { 0x1a01, 0xd14c, 0x0000 },
+  { 0x8a01, 0xd16d, 0x6000 },
+  { 0x9a01, 0xd15d, 0x5000 },
+  { 0x9a01, 0xd155, 0x4000 },
+  { 0x9a01, 0xd151, 0x3000 },
+  { 0x9a01, 0xd14f, 0x2000 },
+  { 0x1a01, 0xd14e, 0x0000 },
+  { 0x1a01, 0xd150, 0x0000 },
+  { 0x9a01, 0xd153, 0x2000 },
+  { 0x1a01, 0xd152, 0x0000 },
+  { 0x1a01, 0xd154, 0x0000 },
+  { 0x9a01, 0xd159, 0x3000 },
+  { 0x9a01, 0xd157, 0x2000 },
+  { 0x1a01, 0xd156, 0x0000 },
+  { 0x1a01, 0xd158, 0x0000 },
+  { 0x9a01, 0xd15b, 0x2000 },
+  { 0x1a01, 0xd15a, 0x0000 },
+  { 0x1a01, 0xd15c, 0x0000 },
+  { 0x8a01, 0xd165, 0x4000 },
+  { 0x9a01, 0xd161, 0x3000 },
+  { 0x9a01, 0xd15f, 0x2000 },
+  { 0x1a01, 0xd15e, 0x0000 },
+  { 0x1a01, 0xd160, 0x0000 },
+  { 0x9a01, 0xd163, 0x2000 },
+  { 0x1a01, 0xd162, 0x0000 },
+  { 0x1a01, 0xd164, 0x0000 },
+  { 0x8c01, 0xd169, 0x3000 },
+  { 0x8c01, 0xd167, 0x2000 },
+  { 0x0a01, 0xd166, 0x0000 },
+  { 0x0c01, 0xd168, 0x0000 },
+  { 0x9a01, 0xd16b, 0x2000 },
+  { 0x1a01, 0xd16a, 0x0000 },
+  { 0x1a01, 0xd16c, 0x0000 },
+  { 0x8c01, 0xd17d, 0x5000 },
+  { 0x8101, 0xd175, 0x4000 },
+  { 0x8a01, 0xd171, 0x3000 },
+  { 0x8a01, 0xd16f, 0x2000 },
+  { 0x0a01, 0xd16e, 0x0000 },
+  { 0x0a01, 0xd170, 0x0000 },
+  { 0x8101, 0xd173, 0x2000 },
+  { 0x0a01, 0xd172, 0x0000 },
+  { 0x0101, 0xd174, 0x0000 },
+  { 0x8101, 0xd179, 0x3000 },
+  { 0x8101, 0xd177, 0x2000 },
+  { 0x0101, 0xd176, 0x0000 },
+  { 0x0101, 0xd178, 0x0000 },
+  { 0x8c01, 0xd17b, 0x2000 },
+  { 0x0101, 0xd17a, 0x0000 },
+  { 0x0c01, 0xd17c, 0x0000 },
+  { 0x8c01, 0xd185, 0x4000 },
+  { 0x8c01, 0xd181, 0x3000 },
+  { 0x8c01, 0xd17f, 0x2000 },
+  { 0x0c01, 0xd17e, 0x0000 },
+  { 0x0c01, 0xd180, 0x0000 },
+  { 0x9a01, 0xd183, 0x2000 },
+  { 0x0c01, 0xd182, 0x0000 },
+  { 0x1a01, 0xd184, 0x0000 },
+  { 0x8c01, 0xd189, 0x3000 },
+  { 0x8c01, 0xd187, 0x2000 },
+  { 0x0c01, 0xd186, 0x0000 },
+  { 0x0c01, 0xd188, 0x0000 },
+  { 0x8c01, 0xd18b, 0x2000 },
+  { 0x0c01, 0xd18a, 0x0000 },
+  { 0x1a01, 0xd18c, 0x0000 },
+  { 0x9a01, 0xd32f, 0x8000 },
+  { 0x9a01, 0xd1cd, 0x7000 },
+  { 0x8c01, 0xd1ad, 0x6000 },
+  { 0x9a01, 0xd19d, 0x5000 },
+  { 0x9a01, 0xd195, 0x4000 },
+  { 0x9a01, 0xd191, 0x3000 },
+  { 0x9a01, 0xd18f, 0x2000 },
+  { 0x1a01, 0xd18e, 0x0000 },
+  { 0x1a01, 0xd190, 0x0000 },
+  { 0x9a01, 0xd193, 0x2000 },
+  { 0x1a01, 0xd192, 0x0000 },
+  { 0x1a01, 0xd194, 0x0000 },
+  { 0x9a01, 0xd199, 0x3000 },
+  { 0x9a01, 0xd197, 0x2000 },
+  { 0x1a01, 0xd196, 0x0000 },
+  { 0x1a01, 0xd198, 0x0000 },
+  { 0x9a01, 0xd19b, 0x2000 },
+  { 0x1a01, 0xd19a, 0x0000 },
+  { 0x1a01, 0xd19c, 0x0000 },
+  { 0x9a01, 0xd1a5, 0x4000 },
+  { 0x9a01, 0xd1a1, 0x3000 },
+  { 0x9a01, 0xd19f, 0x2000 },
+  { 0x1a01, 0xd19e, 0x0000 },
+  { 0x1a01, 0xd1a0, 0x0000 },
+  { 0x9a01, 0xd1a3, 0x2000 },
+  { 0x1a01, 0xd1a2, 0x0000 },
+  { 0x1a01, 0xd1a4, 0x0000 },
+  { 0x9a01, 0xd1a9, 0x3000 },
+  { 0x9a01, 0xd1a7, 0x2000 },
+  { 0x1a01, 0xd1a6, 0x0000 },
+  { 0x1a01, 0xd1a8, 0x0000 },
+  { 0x8c01, 0xd1ab, 0x2000 },
+  { 0x0c01, 0xd1aa, 0x0000 },
+  { 0x0c01, 0xd1ac, 0x0000 },
+  { 0x9a01, 0xd1bd, 0x5000 },
+  { 0x9a01, 0xd1b5, 0x4000 },
+  { 0x9a01, 0xd1b1, 0x3000 },
+  { 0x9a01, 0xd1af, 0x2000 },
+  { 0x1a01, 0xd1ae, 0x0000 },
+  { 0x1a01, 0xd1b0, 0x0000 },
+  { 0x9a01, 0xd1b3, 0x2000 },
+  { 0x1a01, 0xd1b2, 0x0000 },
+  { 0x1a01, 0xd1b4, 0x0000 },
+  { 0x9a01, 0xd1b9, 0x3000 },
+  { 0x9a01, 0xd1b7, 0x2000 },
+  { 0x1a01, 0xd1b6, 0x0000 },
+  { 0x1a01, 0xd1b8, 0x0000 },
+  { 0x9a01, 0xd1bb, 0x2000 },
+  { 0x1a01, 0xd1ba, 0x0000 },
+  { 0x1a01, 0xd1bc, 0x0000 },
+  { 0x9a01, 0xd1c5, 0x4000 },
+  { 0x9a01, 0xd1c1, 0x3000 },
+  { 0x9a01, 0xd1bf, 0x2000 },
+  { 0x1a01, 0xd1be, 0x0000 },
+  { 0x1a01, 0xd1c0, 0x0000 },
+  { 0x9a01, 0xd1c3, 0x2000 },
+  { 0x1a01, 0xd1c2, 0x0000 },
+  { 0x1a01, 0xd1c4, 0x0000 },
+  { 0x9a01, 0xd1c9, 0x3000 },
+  { 0x9a01, 0xd1c7, 0x2000 },
+  { 0x1a01, 0xd1c6, 0x0000 },
+  { 0x1a01, 0xd1c8, 0x0000 },
+  { 0x9a01, 0xd1cb, 0x2000 },
+  { 0x1a01, 0xd1ca, 0x0000 },
+  { 0x1a01, 0xd1cc, 0x0000 },
+  { 0x9a01, 0xd30f, 0x6000 },
+  { 0x9a01, 0xd1dd, 0x5000 },
+  { 0x9a01, 0xd1d5, 0x4000 },
+  { 0x9a01, 0xd1d1, 0x3000 },
+  { 0x9a01, 0xd1cf, 0x2000 },
+  { 0x1a01, 0xd1ce, 0x0000 },
+  { 0x1a01, 0xd1d0, 0x0000 },
+  { 0x9a01, 0xd1d3, 0x2000 },
+  { 0x1a01, 0xd1d2, 0x0000 },
+  { 0x1a01, 0xd1d4, 0x0000 },
+  { 0x9a01, 0xd1d9, 0x3000 },
+  { 0x9a01, 0xd1d7, 0x2000 },
+  { 0x1a01, 0xd1d6, 0x0000 },
+  { 0x1a01, 0xd1d8, 0x0000 },
+  { 0x9a01, 0xd1db, 0x2000 },
+  { 0x1a01, 0xd1da, 0x0000 },
+  { 0x1a01, 0xd1dc, 0x0000 },
+  { 0x9a01, 0xd307, 0x4000 },
+  { 0x9a01, 0xd303, 0x3000 },
+  { 0x9a01, 0xd301, 0x2000 },
+  { 0x1a01, 0xd300, 0x0000 },
+  { 0x1a01, 0xd302, 0x0000 },
+  { 0x9a01, 0xd305, 0x2000 },
+  { 0x1a01, 0xd304, 0x0000 },
+  { 0x1a01, 0xd306, 0x0000 },
+  { 0x9a01, 0xd30b, 0x3000 },
+  { 0x9a01, 0xd309, 0x2000 },
+  { 0x1a01, 0xd308, 0x0000 },
+  { 0x1a01, 0xd30a, 0x0000 },
+  { 0x9a01, 0xd30d, 0x2000 },
+  { 0x1a01, 0xd30c, 0x0000 },
+  { 0x1a01, 0xd30e, 0x0000 },
+  { 0x9a01, 0xd31f, 0x5000 },
+  { 0x9a01, 0xd317, 0x4000 },
+  { 0x9a01, 0xd313, 0x3000 },
+  { 0x9a01, 0xd311, 0x2000 },
+  { 0x1a01, 0xd310, 0x0000 },
+  { 0x1a01, 0xd312, 0x0000 },
+  { 0x9a01, 0xd315, 0x2000 },
+  { 0x1a01, 0xd314, 0x0000 },
+  { 0x1a01, 0xd316, 0x0000 },
+  { 0x9a01, 0xd31b, 0x3000 },
+  { 0x9a01, 0xd319, 0x2000 },
+  { 0x1a01, 0xd318, 0x0000 },
+  { 0x1a01, 0xd31a, 0x0000 },
+  { 0x9a01, 0xd31d, 0x2000 },
+  { 0x1a01, 0xd31c, 0x0000 },
+  { 0x1a01, 0xd31e, 0x0000 },
+  { 0x9a01, 0xd327, 0x4000 },
+  { 0x9a01, 0xd323, 0x3000 },
+  { 0x9a01, 0xd321, 0x2000 },
+  { 0x1a01, 0xd320, 0x0000 },
+  { 0x1a01, 0xd322, 0x0000 },
+  { 0x9a01, 0xd325, 0x2000 },
+  { 0x1a01, 0xd324, 0x0000 },
+  { 0x1a01, 0xd326, 0x0000 },
+  { 0x9a01, 0xd32b, 0x3000 },
+  { 0x9a01, 0xd329, 0x2000 },
+  { 0x1a01, 0xd328, 0x0000 },
+  { 0x1a01, 0xd32a, 0x0000 },
+  { 0x9a01, 0xd32d, 0x2000 },
+  { 0x1a01, 0xd32c, 0x0000 },
+  { 0x1a01, 0xd32e, 0x0000 },
+  { 0x8901, 0xd418, 0x7000 },
+  { 0x9a01, 0xd34f, 0x6000 },
+  { 0x9a01, 0xd33f, 0x5000 },
+  { 0x9a01, 0xd337, 0x4000 },
+  { 0x9a01, 0xd333, 0x3000 },
+  { 0x9a01, 0xd331, 0x2000 },
+  { 0x1a01, 0xd330, 0x0000 },
+  { 0x1a01, 0xd332, 0x0000 },
+  { 0x9a01, 0xd335, 0x2000 },
+  { 0x1a01, 0xd334, 0x0000 },
+  { 0x1a01, 0xd336, 0x0000 },
+  { 0x9a01, 0xd33b, 0x3000 },
+  { 0x9a01, 0xd339, 0x2000 },
+  { 0x1a01, 0xd338, 0x0000 },
+  { 0x1a01, 0xd33a, 0x0000 },
+  { 0x9a01, 0xd33d, 0x2000 },
+  { 0x1a01, 0xd33c, 0x0000 },
+  { 0x1a01, 0xd33e, 0x0000 },
+  { 0x9a01, 0xd347, 0x4000 },
+  { 0x9a01, 0xd343, 0x3000 },
+  { 0x9a01, 0xd341, 0x2000 },
+  { 0x1a01, 0xd340, 0x0000 },
+  { 0x1a01, 0xd342, 0x0000 },
+  { 0x9a01, 0xd345, 0x2000 },
+  { 0x1a01, 0xd344, 0x0000 },
+  { 0x1a01, 0xd346, 0x0000 },
+  { 0x9a01, 0xd34b, 0x3000 },
+  { 0x9a01, 0xd349, 0x2000 },
+  { 0x1a01, 0xd348, 0x0000 },
+  { 0x1a01, 0xd34a, 0x0000 },
+  { 0x9a01, 0xd34d, 0x2000 },
+  { 0x1a01, 0xd34c, 0x0000 },
+  { 0x1a01, 0xd34e, 0x0000 },
+  { 0x8901, 0xd408, 0x5000 },
+  { 0x8901, 0xd400, 0x4000 },
+  { 0x9a01, 0xd353, 0x3000 },
+  { 0x9a01, 0xd351, 0x2000 },
+  { 0x1a01, 0xd350, 0x0000 },
+  { 0x1a01, 0xd352, 0x0000 },
+  { 0x9a01, 0xd355, 0x2000 },
+  { 0x1a01, 0xd354, 0x0000 },
+  { 0x1a01, 0xd356, 0x0000 },
+  { 0x8901, 0xd404, 0x3000 },
+  { 0x8901, 0xd402, 0x2000 },
+  { 0x0901, 0xd401, 0x0000 },
+  { 0x0901, 0xd403, 0x0000 },
+  { 0x8901, 0xd406, 0x2000 },
+  { 0x0901, 0xd405, 0x0000 },
+  { 0x0901, 0xd407, 0x0000 },
+  { 0x8901, 0xd410, 0x4000 },
+  { 0x8901, 0xd40c, 0x3000 },
+  { 0x8901, 0xd40a, 0x2000 },
+  { 0x0901, 0xd409, 0x0000 },
+  { 0x0901, 0xd40b, 0x0000 },
+  { 0x8901, 0xd40e, 0x2000 },
+  { 0x0901, 0xd40d, 0x0000 },
+  { 0x0901, 0xd40f, 0x0000 },
+  { 0x8901, 0xd414, 0x3000 },
+  { 0x8901, 0xd412, 0x2000 },
+  { 0x0901, 0xd411, 0x0000 },
+  { 0x0901, 0xd413, 0x0000 },
+  { 0x8901, 0xd416, 0x2000 },
+  { 0x0901, 0xd415, 0x0000 },
+  { 0x0901, 0xd417, 0x0000 },
+  { 0x8901, 0xd438, 0x6000 },
+  { 0x8501, 0xd428, 0x5000 },
+  { 0x8501, 0xd420, 0x4000 },
+  { 0x8501, 0xd41c, 0x3000 },
+  { 0x8501, 0xd41a, 0x2000 },
+  { 0x0901, 0xd419, 0x0000 },
+  { 0x0501, 0xd41b, 0x0000 },
+  { 0x8501, 0xd41e, 0x2000 },
+  { 0x0501, 0xd41d, 0x0000 },
+  { 0x0501, 0xd41f, 0x0000 },
+  { 0x8501, 0xd424, 0x3000 },
+  { 0x8501, 0xd422, 0x2000 },
+  { 0x0501, 0xd421, 0x0000 },
+  { 0x0501, 0xd423, 0x0000 },
+  { 0x8501, 0xd426, 0x2000 },
+  { 0x0501, 0xd425, 0x0000 },
+  { 0x0501, 0xd427, 0x0000 },
+  { 0x8501, 0xd430, 0x4000 },
+  { 0x8501, 0xd42c, 0x3000 },
+  { 0x8501, 0xd42a, 0x2000 },
+  { 0x0501, 0xd429, 0x0000 },
+  { 0x0501, 0xd42b, 0x0000 },
+  { 0x8501, 0xd42e, 0x2000 },
+  { 0x0501, 0xd42d, 0x0000 },
+  { 0x0501, 0xd42f, 0x0000 },
+  { 0x8901, 0xd434, 0x3000 },
+  { 0x8501, 0xd432, 0x2000 },
+  { 0x0501, 0xd431, 0x0000 },
+  { 0x0501, 0xd433, 0x0000 },
+  { 0x8901, 0xd436, 0x2000 },
+  { 0x0901, 0xd435, 0x0000 },
+  { 0x0901, 0xd437, 0x0000 },
+  { 0x8901, 0xd448, 0x5000 },
+  { 0x8901, 0xd440, 0x4000 },
+  { 0x8901, 0xd43c, 0x3000 },
+  { 0x8901, 0xd43a, 0x2000 },
+  { 0x0901, 0xd439, 0x0000 },
+  { 0x0901, 0xd43b, 0x0000 },
+  { 0x8901, 0xd43e, 0x2000 },
+  { 0x0901, 0xd43d, 0x0000 },
+  { 0x0901, 0xd43f, 0x0000 },
+  { 0x8901, 0xd444, 0x3000 },
+  { 0x8901, 0xd442, 0x2000 },
+  { 0x0901, 0xd441, 0x0000 },
+  { 0x0901, 0xd443, 0x0000 },
+  { 0x8901, 0xd446, 0x2000 },
+  { 0x0901, 0xd445, 0x0000 },
+  { 0x0901, 0xd447, 0x0000 },
+  { 0x8501, 0xd450, 0x4000 },
+  { 0x8901, 0xd44c, 0x3000 },
+  { 0x8901, 0xd44a, 0x2000 },
+  { 0x0901, 0xd449, 0x0000 },
+  { 0x0901, 0xd44b, 0x0000 },
+  { 0x8501, 0xd44e, 0x2000 },
+  { 0x0901, 0xd44d, 0x0000 },
+  { 0x0501, 0xd44f, 0x0000 },
+  { 0x8501, 0xd454, 0x3000 },
+  { 0x8501, 0xd452, 0x2000 },
+  { 0x0501, 0xd451, 0x0000 },
+  { 0x0501, 0xd453, 0x0000 },
+  { 0x8501, 0xd457, 0x2000 },
+  { 0x0501, 0xd456, 0x0000 },
+  { 0x0501, 0xd458, 0x0000 },
+  { 0x8702, 0xf876, 0xb000 },
+  { 0x8901, 0xd670, 0xa000 },
+  { 0x8901, 0xd570, 0x9000 },
+  { 0x8901, 0xd4e4, 0x8000 },
+  { 0x8501, 0xd499, 0x7000 },
+  { 0x8901, 0xd479, 0x6000 },
+  { 0x8901, 0xd469, 0x5000 },
+  { 0x8501, 0xd461, 0x4000 },
+  { 0x8501, 0xd45d, 0x3000 },
+  { 0x8501, 0xd45b, 0x2000 },
+  { 0x0501, 0xd45a, 0x0000 },
+  { 0x0501, 0xd45c, 0x0000 },
+  { 0x8501, 0xd45f, 0x2000 },
+  { 0x0501, 0xd45e, 0x0000 },
+  { 0x0501, 0xd460, 0x0000 },
+  { 0x8501, 0xd465, 0x3000 },
+  { 0x8501, 0xd463, 0x2000 },
+  { 0x0501, 0xd462, 0x0000 },
+  { 0x0501, 0xd464, 0x0000 },
+  { 0x8501, 0xd467, 0x2000 },
+  { 0x0501, 0xd466, 0x0000 },
+  { 0x0901, 0xd468, 0x0000 },
+  { 0x8901, 0xd471, 0x4000 },
+  { 0x8901, 0xd46d, 0x3000 },
+  { 0x8901, 0xd46b, 0x2000 },
+  { 0x0901, 0xd46a, 0x0000 },
+  { 0x0901, 0xd46c, 0x0000 },
+  { 0x8901, 0xd46f, 0x2000 },
+  { 0x0901, 0xd46e, 0x0000 },
+  { 0x0901, 0xd470, 0x0000 },
+  { 0x8901, 0xd475, 0x3000 },
+  { 0x8901, 0xd473, 0x2000 },
+  { 0x0901, 0xd472, 0x0000 },
+  { 0x0901, 0xd474, 0x0000 },
+  { 0x8901, 0xd477, 0x2000 },
+  { 0x0901, 0xd476, 0x0000 },
+  { 0x0901, 0xd478, 0x0000 },
+  { 0x8501, 0xd489, 0x5000 },
+  { 0x8901, 0xd481, 0x4000 },
+  { 0x8901, 0xd47d, 0x3000 },
+  { 0x8901, 0xd47b, 0x2000 },
+  { 0x0901, 0xd47a, 0x0000 },
+  { 0x0901, 0xd47c, 0x0000 },
+  { 0x8901, 0xd47f, 0x2000 },
+  { 0x0901, 0xd47e, 0x0000 },
+  { 0x0901, 0xd480, 0x0000 },
+  { 0x8501, 0xd485, 0x3000 },
+  { 0x8501, 0xd483, 0x2000 },
+  { 0x0501, 0xd482, 0x0000 },
+  { 0x0501, 0xd484, 0x0000 },
+  { 0x8501, 0xd487, 0x2000 },
+  { 0x0501, 0xd486, 0x0000 },
+  { 0x0501, 0xd488, 0x0000 },
+  { 0x8501, 0xd491, 0x4000 },
+  { 0x8501, 0xd48d, 0x3000 },
+  { 0x8501, 0xd48b, 0x2000 },
+  { 0x0501, 0xd48a, 0x0000 },
+  { 0x0501, 0xd48c, 0x0000 },
+  { 0x8501, 0xd48f, 0x2000 },
+  { 0x0501, 0xd48e, 0x0000 },
+  { 0x0501, 0xd490, 0x0000 },
+  { 0x8501, 0xd495, 0x3000 },
+  { 0x8501, 0xd493, 0x2000 },
+  { 0x0501, 0xd492, 0x0000 },
+  { 0x0501, 0xd494, 0x0000 },
+  { 0x8501, 0xd497, 0x2000 },
+  { 0x0501, 0xd496, 0x0000 },
+  { 0x0501, 0xd498, 0x0000 },
+  { 0x8501, 0xd4c3, 0x6000 },
+  { 0x8901, 0xd4b1, 0x5000 },
+  { 0x8901, 0xd4a6, 0x4000 },
+  { 0x8901, 0xd49e, 0x3000 },
+  { 0x8501, 0xd49b, 0x2000 },
+  { 0x0501, 0xd49a, 0x0000 },
+  { 0x0901, 0xd49c, 0x0000 },
+  { 0x8901, 0xd4a2, 0x2000 },
+  { 0x0901, 0xd49f, 0x0000 },
+  { 0x0901, 0xd4a5, 0x0000 },
+  { 0x8901, 0xd4ac, 0x3000 },
+  { 0x8901, 0xd4aa, 0x2000 },
+  { 0x0901, 0xd4a9, 0x0000 },
+  { 0x0901, 0xd4ab, 0x0000 },
+  { 0x8901, 0xd4af, 0x2000 },
+  { 0x0901, 0xd4ae, 0x0000 },
+  { 0x0901, 0xd4b0, 0x0000 },
+  { 0x8501, 0xd4b9, 0x4000 },
+  { 0x8901, 0xd4b5, 0x3000 },
+  { 0x8901, 0xd4b3, 0x2000 },
+  { 0x0901, 0xd4b2, 0x0000 },
+  { 0x0901, 0xd4b4, 0x0000 },
+  { 0x8501, 0xd4b7, 0x2000 },
+  { 0x0501, 0xd4b6, 0x0000 },
+  { 0x0501, 0xd4b8, 0x0000 },
+  { 0x8501, 0xd4bf, 0x3000 },
+  { 0x8501, 0xd4bd, 0x2000 },
+  { 0x0501, 0xd4bb, 0x0000 },
+  { 0x0501, 0xd4be, 0x0000 },
+  { 0x8501, 0xd4c1, 0x2000 },
+  { 0x0501, 0xd4c0, 0x0000 },
+  { 0x0501, 0xd4c2, 0x0000 },
+  { 0x8901, 0xd4d4, 0x5000 },
+  { 0x8501, 0xd4cc, 0x4000 },
+  { 0x8501, 0xd4c8, 0x3000 },
+  { 0x8501, 0xd4c6, 0x2000 },
+  { 0x0501, 0xd4c5, 0x0000 },
+  { 0x0501, 0xd4c7, 0x0000 },
+  { 0x8501, 0xd4ca, 0x2000 },
+  { 0x0501, 0xd4c9, 0x0000 },
+  { 0x0501, 0xd4cb, 0x0000 },
+  { 0x8901, 0xd4d0, 0x3000 },
+  { 0x8501, 0xd4ce, 0x2000 },
+  { 0x0501, 0xd4cd, 0x0000 },
+  { 0x0501, 0xd4cf, 0x0000 },
+  { 0x8901, 0xd4d2, 0x2000 },
+  { 0x0901, 0xd4d1, 0x0000 },
+  { 0x0901, 0xd4d3, 0x0000 },
+  { 0x8901, 0xd4dc, 0x4000 },
+  { 0x8901, 0xd4d8, 0x3000 },
+  { 0x8901, 0xd4d6, 0x2000 },
+  { 0x0901, 0xd4d5, 0x0000 },
+  { 0x0901, 0xd4d7, 0x0000 },
+  { 0x8901, 0xd4da, 0x2000 },
+  { 0x0901, 0xd4d9, 0x0000 },
+  { 0x0901, 0xd4db, 0x0000 },
+  { 0x8901, 0xd4e0, 0x3000 },
+  { 0x8901, 0xd4de, 0x2000 },
+  { 0x0901, 0xd4dd, 0x0000 },
+  { 0x0901, 0xd4df, 0x0000 },
+  { 0x8901, 0xd4e2, 0x2000 },
+  { 0x0901, 0xd4e1, 0x0000 },
+  { 0x0901, 0xd4e3, 0x0000 },
+  { 0x8501, 0xd529, 0x7000 },
+  { 0x8901, 0xd504, 0x6000 },
+  { 0x8501, 0xd4f4, 0x5000 },
+  { 0x8501, 0xd4ec, 0x4000 },
+  { 0x8901, 0xd4e8, 0x3000 },
+  { 0x8901, 0xd4e6, 0x2000 },
+  { 0x0901, 0xd4e5, 0x0000 },
+  { 0x0901, 0xd4e7, 0x0000 },
+  { 0x8501, 0xd4ea, 0x2000 },
+  { 0x0901, 0xd4e9, 0x0000 },
+  { 0x0501, 0xd4eb, 0x0000 },
+  { 0x8501, 0xd4f0, 0x3000 },
+  { 0x8501, 0xd4ee, 0x2000 },
+  { 0x0501, 0xd4ed, 0x0000 },
+  { 0x0501, 0xd4ef, 0x0000 },
+  { 0x8501, 0xd4f2, 0x2000 },
+  { 0x0501, 0xd4f1, 0x0000 },
+  { 0x0501, 0xd4f3, 0x0000 },
+  { 0x8501, 0xd4fc, 0x4000 },
+  { 0x8501, 0xd4f8, 0x3000 },
+  { 0x8501, 0xd4f6, 0x2000 },
+  { 0x0501, 0xd4f5, 0x0000 },
+  { 0x0501, 0xd4f7, 0x0000 },
+  { 0x8501, 0xd4fa, 0x2000 },
+  { 0x0501, 0xd4f9, 0x0000 },
+  { 0x0501, 0xd4fb, 0x0000 },
+  { 0x8501, 0xd500, 0x3000 },
+  { 0x8501, 0xd4fe, 0x2000 },
+  { 0x0501, 0xd4fd, 0x0000 },
+  { 0x0501, 0xd4ff, 0x0000 },
+  { 0x8501, 0xd502, 0x2000 },
+  { 0x0501, 0xd501, 0x0000 },
+  { 0x0501, 0xd503, 0x0000 },
+  { 0x8901, 0xd518, 0x5000 },
+  { 0x8901, 0xd50f, 0x4000 },
+  { 0x8901, 0xd509, 0x3000 },
+  { 0x8901, 0xd507, 0x2000 },
+  { 0x0901, 0xd505, 0x0000 },
+  { 0x0901, 0xd508, 0x0000 },
+  { 0x8901, 0xd50d, 0x2000 },
+  { 0x0901, 0xd50a, 0x0000 },
+  { 0x0901, 0xd50e, 0x0000 },
+  { 0x8901, 0xd513, 0x3000 },
+  { 0x8901, 0xd511, 0x2000 },
+  { 0x0901, 0xd510, 0x0000 },
+  { 0x0901, 0xd512, 0x0000 },
+  { 0x8901, 0xd516, 0x2000 },
+  { 0x0901, 0xd514, 0x0000 },
+  { 0x0901, 0xd517, 0x0000 },
+  { 0x8501, 0xd521, 0x4000 },
+  { 0x8901, 0xd51c, 0x3000 },
+  { 0x8901, 0xd51a, 0x2000 },
+  { 0x0901, 0xd519, 0x0000 },
+  { 0x0901, 0xd51b, 0x0000 },
+  { 0x8501, 0xd51f, 0x2000 },
+  { 0x0501, 0xd51e, 0x0000 },
+  { 0x0501, 0xd520, 0x0000 },
+  { 0x8501, 0xd525, 0x3000 },
+  { 0x8501, 0xd523, 0x2000 },
+  { 0x0501, 0xd522, 0x0000 },
+  { 0x0501, 0xd524, 0x0000 },
+  { 0x8501, 0xd527, 0x2000 },
+  { 0x0501, 0xd526, 0x0000 },
+  { 0x0501, 0xd528, 0x0000 },
+  { 0x8901, 0xd54f, 0x6000 },
+  { 0x8901, 0xd539, 0x5000 },
+  { 0x8501, 0xd531, 0x4000 },
+  { 0x8501, 0xd52d, 0x3000 },
+  { 0x8501, 0xd52b, 0x2000 },
+  { 0x0501, 0xd52a, 0x0000 },
+  { 0x0501, 0xd52c, 0x0000 },
+  { 0x8501, 0xd52f, 0x2000 },
+  { 0x0501, 0xd52e, 0x0000 },
+  { 0x0501, 0xd530, 0x0000 },
+  { 0x8501, 0xd535, 0x3000 },
+  { 0x8501, 0xd533, 0x2000 },
+  { 0x0501, 0xd532, 0x0000 },
+  { 0x0501, 0xd534, 0x0000 },
+  { 0x8501, 0xd537, 0x2000 },
+  { 0x0501, 0xd536, 0x0000 },
+  { 0x0901, 0xd538, 0x0000 },
+  { 0x8901, 0xd543, 0x4000 },
+  { 0x8901, 0xd53e, 0x3000 },
+  { 0x8901, 0xd53c, 0x2000 },
+  { 0x0901, 0xd53b, 0x0000 },
+  { 0x0901, 0xd53d, 0x0000 },
+  { 0x8901, 0xd541, 0x2000 },
+  { 0x0901, 0xd540, 0x0000 },
+  { 0x0901, 0xd542, 0x0000 },
+  { 0x8901, 0xd54b, 0x3000 },
+  { 0x8901, 0xd546, 0x2000 },
+  { 0x0901, 0xd544, 0x0000 },
+  { 0x0901, 0xd54a, 0x0000 },
+  { 0x8901, 0xd54d, 0x2000 },
+  { 0x0901, 0xd54c, 0x0000 },
+  { 0x0901, 0xd54e, 0x0000 },
+  { 0x8501, 0xd560, 0x5000 },
+  { 0x8501, 0xd558, 0x4000 },
+  { 0x8501, 0xd554, 0x3000 },
+  { 0x8501, 0xd552, 0x2000 },
+  { 0x0901, 0xd550, 0x0000 },
+  { 0x0501, 0xd553, 0x0000 },
+  { 0x8501, 0xd556, 0x2000 },
+  { 0x0501, 0xd555, 0x0000 },
+  { 0x0501, 0xd557, 0x0000 },
+  { 0x8501, 0xd55c, 0x3000 },
+  { 0x8501, 0xd55a, 0x2000 },
+  { 0x0501, 0xd559, 0x0000 },
+  { 0x0501, 0xd55b, 0x0000 },
+  { 0x8501, 0xd55e, 0x2000 },
+  { 0x0501, 0xd55d, 0x0000 },
+  { 0x0501, 0xd55f, 0x0000 },
+  { 0x8501, 0xd568, 0x4000 },
+  { 0x8501, 0xd564, 0x3000 },
+  { 0x8501, 0xd562, 0x2000 },
+  { 0x0501, 0xd561, 0x0000 },
+  { 0x0501, 0xd563, 0x0000 },
+  { 0x8501, 0xd566, 0x2000 },
+  { 0x0501, 0xd565, 0x0000 },
+  { 0x0501, 0xd567, 0x0000 },
+  { 0x8901, 0xd56c, 0x3000 },
+  { 0x8501, 0xd56a, 0x2000 },
+  { 0x0501, 0xd569, 0x0000 },
+  { 0x0501, 0xd56b, 0x0000 },
+  { 0x8901, 0xd56e, 0x2000 },
+  { 0x0901, 0xd56d, 0x0000 },
+  { 0x0901, 0xd56f, 0x0000 },
+  { 0x8501, 0xd5f0, 0x8000 },
+  { 0x8901, 0xd5b0, 0x7000 },
+  { 0x8501, 0xd590, 0x6000 },
+  { 0x8901, 0xd580, 0x5000 },
+  { 0x8901, 0xd578, 0x4000 },
+  { 0x8901, 0xd574, 0x3000 },
+  { 0x8901, 0xd572, 0x2000 },
+  { 0x0901, 0xd571, 0x0000 },
+  { 0x0901, 0xd573, 0x0000 },
+  { 0x8901, 0xd576, 0x2000 },
+  { 0x0901, 0xd575, 0x0000 },
+  { 0x0901, 0xd577, 0x0000 },
+  { 0x8901, 0xd57c, 0x3000 },
+  { 0x8901, 0xd57a, 0x2000 },
+  { 0x0901, 0xd579, 0x0000 },
+  { 0x0901, 0xd57b, 0x0000 },
+  { 0x8901, 0xd57e, 0x2000 },
+  { 0x0901, 0xd57d, 0x0000 },
+  { 0x0901, 0xd57f, 0x0000 },
+  { 0x8501, 0xd588, 0x4000 },
+  { 0x8901, 0xd584, 0x3000 },
+  { 0x8901, 0xd582, 0x2000 },
+  { 0x0901, 0xd581, 0x0000 },
+  { 0x0901, 0xd583, 0x0000 },
+  { 0x8501, 0xd586, 0x2000 },
+  { 0x0901, 0xd585, 0x0000 },
+  { 0x0501, 0xd587, 0x0000 },
+  { 0x8501, 0xd58c, 0x3000 },
+  { 0x8501, 0xd58a, 0x2000 },
+  { 0x0501, 0xd589, 0x0000 },
+  { 0x0501, 0xd58b, 0x0000 },
+  { 0x8501, 0xd58e, 0x2000 },
+  { 0x0501, 0xd58d, 0x0000 },
+  { 0x0501, 0xd58f, 0x0000 },
+  { 0x8901, 0xd5a0, 0x5000 },
+  { 0x8501, 0xd598, 0x4000 },
+  { 0x8501, 0xd594, 0x3000 },
+  { 0x8501, 0xd592, 0x2000 },
+  { 0x0501, 0xd591, 0x0000 },
+  { 0x0501, 0xd593, 0x0000 },
+  { 0x8501, 0xd596, 0x2000 },
+  { 0x0501, 0xd595, 0x0000 },
+  { 0x0501, 0xd597, 0x0000 },
+  { 0x8501, 0xd59c, 0x3000 },
+  { 0x8501, 0xd59a, 0x2000 },
+  { 0x0501, 0xd599, 0x0000 },
+  { 0x0501, 0xd59b, 0x0000 },
+  { 0x8501, 0xd59e, 0x2000 },
+  { 0x0501, 0xd59d, 0x0000 },
+  { 0x0501, 0xd59f, 0x0000 },
+  { 0x8901, 0xd5a8, 0x4000 },
+  { 0x8901, 0xd5a4, 0x3000 },
+  { 0x8901, 0xd5a2, 0x2000 },
+  { 0x0901, 0xd5a1, 0x0000 },
+  { 0x0901, 0xd5a3, 0x0000 },
+  { 0x8901, 0xd5a6, 0x2000 },
+  { 0x0901, 0xd5a5, 0x0000 },
+  { 0x0901, 0xd5a7, 0x0000 },
+  { 0x8901, 0xd5ac, 0x3000 },
+  { 0x8901, 0xd5aa, 0x2000 },
+  { 0x0901, 0xd5a9, 0x0000 },
+  { 0x0901, 0xd5ab, 0x0000 },
+  { 0x8901, 0xd5ae, 0x2000 },
+  { 0x0901, 0xd5ad, 0x0000 },
+  { 0x0901, 0xd5af, 0x0000 },
+  { 0x8501, 0xd5d0, 0x6000 },
+  { 0x8501, 0xd5c0, 0x5000 },
+  { 0x8901, 0xd5b8, 0x4000 },
+  { 0x8901, 0xd5b4, 0x3000 },
+  { 0x8901, 0xd5b2, 0x2000 },
+  { 0x0901, 0xd5b1, 0x0000 },
+  { 0x0901, 0xd5b3, 0x0000 },
+  { 0x8901, 0xd5b6, 0x2000 },
+  { 0x0901, 0xd5b5, 0x0000 },
+  { 0x0901, 0xd5b7, 0x0000 },
+  { 0x8501, 0xd5bc, 0x3000 },
+  { 0x8501, 0xd5ba, 0x2000 },
+  { 0x0901, 0xd5b9, 0x0000 },
+  { 0x0501, 0xd5bb, 0x0000 },
+  { 0x8501, 0xd5be, 0x2000 },
+  { 0x0501, 0xd5bd, 0x0000 },
+  { 0x0501, 0xd5bf, 0x0000 },
+  { 0x8501, 0xd5c8, 0x4000 },
+  { 0x8501, 0xd5c4, 0x3000 },
+  { 0x8501, 0xd5c2, 0x2000 },
+  { 0x0501, 0xd5c1, 0x0000 },
+  { 0x0501, 0xd5c3, 0x0000 },
+  { 0x8501, 0xd5c6, 0x2000 },
+  { 0x0501, 0xd5c5, 0x0000 },
+  { 0x0501, 0xd5c7, 0x0000 },
+  { 0x8501, 0xd5cc, 0x3000 },
+  { 0x8501, 0xd5ca, 0x2000 },
+  { 0x0501, 0xd5c9, 0x0000 },
+  { 0x0501, 0xd5cb, 0x0000 },
+  { 0x8501, 0xd5ce, 0x2000 },
+  { 0x0501, 0xd5cd, 0x0000 },
+  { 0x0501, 0xd5cf, 0x0000 },
+  { 0x8901, 0xd5e0, 0x5000 },
+  { 0x8901, 0xd5d8, 0x4000 },
+  { 0x8901, 0xd5d4, 0x3000 },
+  { 0x8501, 0xd5d2, 0x2000 },
+  { 0x0501, 0xd5d1, 0x0000 },
+  { 0x0501, 0xd5d3, 0x0000 },
+  { 0x8901, 0xd5d6, 0x2000 },
+  { 0x0901, 0xd5d5, 0x0000 },
+  { 0x0901, 0xd5d7, 0x0000 },
+  { 0x8901, 0xd5dc, 0x3000 },
+  { 0x8901, 0xd5da, 0x2000 },
+  { 0x0901, 0xd5d9, 0x0000 },
+  { 0x0901, 0xd5db, 0x0000 },
+  { 0x8901, 0xd5de, 0x2000 },
+  { 0x0901, 0xd5dd, 0x0000 },
+  { 0x0901, 0xd5df, 0x0000 },
+  { 0x8901, 0xd5e8, 0x4000 },
+  { 0x8901, 0xd5e4, 0x3000 },
+  { 0x8901, 0xd5e2, 0x2000 },
+  { 0x0901, 0xd5e1, 0x0000 },
+  { 0x0901, 0xd5e3, 0x0000 },
+  { 0x8901, 0xd5e6, 0x2000 },
+  { 0x0901, 0xd5e5, 0x0000 },
+  { 0x0901, 0xd5e7, 0x0000 },
+  { 0x8901, 0xd5ec, 0x3000 },
+  { 0x8901, 0xd5ea, 0x2000 },
+  { 0x0901, 0xd5e9, 0x0000 },
+  { 0x0901, 0xd5eb, 0x0000 },
+  { 0x8501, 0xd5ee, 0x2000 },
+  { 0x0901, 0xd5ed, 0x0000 },
+  { 0x0501, 0xd5ef, 0x0000 },
+  { 0x8501, 0xd630, 0x7000 },
+  { 0x8901, 0xd610, 0x6000 },
+  { 0x8501, 0xd600, 0x5000 },
+  { 0x8501, 0xd5f8, 0x4000 },
+  { 0x8501, 0xd5f4, 0x3000 },
+  { 0x8501, 0xd5f2, 0x2000 },
+  { 0x0501, 0xd5f1, 0x0000 },
+  { 0x0501, 0xd5f3, 0x0000 },
+  { 0x8501, 0xd5f6, 0x2000 },
+  { 0x0501, 0xd5f5, 0x0000 },
+  { 0x0501, 0xd5f7, 0x0000 },
+  { 0x8501, 0xd5fc, 0x3000 },
+  { 0x8501, 0xd5fa, 0x2000 },
+  { 0x0501, 0xd5f9, 0x0000 },
+  { 0x0501, 0xd5fb, 0x0000 },
+  { 0x8501, 0xd5fe, 0x2000 },
+  { 0x0501, 0xd5fd, 0x0000 },
+  { 0x0501, 0xd5ff, 0x0000 },
+  { 0x8901, 0xd608, 0x4000 },
+  { 0x8501, 0xd604, 0x3000 },
+  { 0x8501, 0xd602, 0x2000 },
+  { 0x0501, 0xd601, 0x0000 },
+  { 0x0501, 0xd603, 0x0000 },
+  { 0x8501, 0xd606, 0x2000 },
+  { 0x0501, 0xd605, 0x0000 },
+  { 0x0501, 0xd607, 0x0000 },
+  { 0x8901, 0xd60c, 0x3000 },
+  { 0x8901, 0xd60a, 0x2000 },
+  { 0x0901, 0xd609, 0x0000 },
+  { 0x0901, 0xd60b, 0x0000 },
+  { 0x8901, 0xd60e, 0x2000 },
+  { 0x0901, 0xd60d, 0x0000 },
+  { 0x0901, 0xd60f, 0x0000 },
+  { 0x8901, 0xd620, 0x5000 },
+  { 0x8901, 0xd618, 0x4000 },
+  { 0x8901, 0xd614, 0x3000 },
+  { 0x8901, 0xd612, 0x2000 },
+  { 0x0901, 0xd611, 0x0000 },
+  { 0x0901, 0xd613, 0x0000 },
+  { 0x8901, 0xd616, 0x2000 },
+  { 0x0901, 0xd615, 0x0000 },
+  { 0x0901, 0xd617, 0x0000 },
+  { 0x8901, 0xd61c, 0x3000 },
+  { 0x8901, 0xd61a, 0x2000 },
+  { 0x0901, 0xd619, 0x0000 },
+  { 0x0901, 0xd61b, 0x0000 },
+  { 0x8901, 0xd61e, 0x2000 },
+  { 0x0901, 0xd61d, 0x0000 },
+  { 0x0901, 0xd61f, 0x0000 },
+  { 0x8501, 0xd628, 0x4000 },
+  { 0x8501, 0xd624, 0x3000 },
+  { 0x8501, 0xd622, 0x2000 },
+  { 0x0901, 0xd621, 0x0000 },
+  { 0x0501, 0xd623, 0x0000 },
+  { 0x8501, 0xd626, 0x2000 },
+  { 0x0501, 0xd625, 0x0000 },
+  { 0x0501, 0xd627, 0x0000 },
+  { 0x8501, 0xd62c, 0x3000 },
+  { 0x8501, 0xd62a, 0x2000 },
+  { 0x0501, 0xd629, 0x0000 },
+  { 0x0501, 0xd62b, 0x0000 },
+  { 0x8501, 0xd62e, 0x2000 },
+  { 0x0501, 0xd62d, 0x0000 },
+  { 0x0501, 0xd62f, 0x0000 },
+  { 0x8901, 0xd650, 0x6000 },
+  { 0x8901, 0xd640, 0x5000 },
+  { 0x8501, 0xd638, 0x4000 },
+  { 0x8501, 0xd634, 0x3000 },
+  { 0x8501, 0xd632, 0x2000 },
+  { 0x0501, 0xd631, 0x0000 },
+  { 0x0501, 0xd633, 0x0000 },
+  { 0x8501, 0xd636, 0x2000 },
+  { 0x0501, 0xd635, 0x0000 },
+  { 0x0501, 0xd637, 0x0000 },
+  { 0x8901, 0xd63c, 0x3000 },
+  { 0x8501, 0xd63a, 0x2000 },
+  { 0x0501, 0xd639, 0x0000 },
+  { 0x0501, 0xd63b, 0x0000 },
+  { 0x8901, 0xd63e, 0x2000 },
+  { 0x0901, 0xd63d, 0x0000 },
+  { 0x0901, 0xd63f, 0x0000 },
+  { 0x8901, 0xd648, 0x4000 },
+  { 0x8901, 0xd644, 0x3000 },
+  { 0x8901, 0xd642, 0x2000 },
+  { 0x0901, 0xd641, 0x0000 },
+  { 0x0901, 0xd643, 0x0000 },
+  { 0x8901, 0xd646, 0x2000 },
+  { 0x0901, 0xd645, 0x0000 },
+  { 0x0901, 0xd647, 0x0000 },
+  { 0x8901, 0xd64c, 0x3000 },
+  { 0x8901, 0xd64a, 0x2000 },
+  { 0x0901, 0xd649, 0x0000 },
+  { 0x0901, 0xd64b, 0x0000 },
+  { 0x8901, 0xd64e, 0x2000 },
+  { 0x0901, 0xd64d, 0x0000 },
+  { 0x0901, 0xd64f, 0x0000 },
+  { 0x8501, 0xd660, 0x5000 },
+  { 0x8501, 0xd658, 0x4000 },
+  { 0x8901, 0xd654, 0x3000 },
+  { 0x8901, 0xd652, 0x2000 },
+  { 0x0901, 0xd651, 0x0000 },
+  { 0x0901, 0xd653, 0x0000 },
+  { 0x8501, 0xd656, 0x2000 },
+  { 0x0901, 0xd655, 0x0000 },
+  { 0x0501, 0xd657, 0x0000 },
+  { 0x8501, 0xd65c, 0x3000 },
+  { 0x8501, 0xd65a, 0x2000 },
+  { 0x0501, 0xd659, 0x0000 },
+  { 0x0501, 0xd65b, 0x0000 },
+  { 0x8501, 0xd65e, 0x2000 },
+  { 0x0501, 0xd65d, 0x0000 },
+  { 0x0501, 0xd65f, 0x0000 },
+  { 0x8501, 0xd668, 0x4000 },
+  { 0x8501, 0xd664, 0x3000 },
+  { 0x8501, 0xd662, 0x2000 },
+  { 0x0501, 0xd661, 0x0000 },
+  { 0x0501, 0xd663, 0x0000 },
+  { 0x8501, 0xd666, 0x2000 },
+  { 0x0501, 0xd665, 0x0000 },
+  { 0x0501, 0xd667, 0x0000 },
+  { 0x8501, 0xd66c, 0x3000 },
+  { 0x8501, 0xd66a, 0x2000 },
+  { 0x0501, 0xd669, 0x0000 },
+  { 0x0501, 0xd66b, 0x0000 },
+  { 0x8501, 0xd66e, 0x2000 },
+  { 0x0501, 0xd66d, 0x0000 },
+  { 0x0501, 0xd66f, 0x0000 },
+  { 0x8501, 0xd774, 0x9000 },
+  { 0x8901, 0xd6f4, 0x8000 },
+  { 0x8901, 0xd6b4, 0x7000 },
+  { 0x8501, 0xd690, 0x6000 },
+  { 0x8901, 0xd680, 0x5000 },
+  { 0x8901, 0xd678, 0x4000 },
+  { 0x8901, 0xd674, 0x3000 },
+  { 0x8901, 0xd672, 0x2000 },
+  { 0x0901, 0xd671, 0x0000 },
+  { 0x0901, 0xd673, 0x0000 },
+  { 0x8901, 0xd676, 0x2000 },
+  { 0x0901, 0xd675, 0x0000 },
+  { 0x0901, 0xd677, 0x0000 },
+  { 0x8901, 0xd67c, 0x3000 },
+  { 0x8901, 0xd67a, 0x2000 },
+  { 0x0901, 0xd679, 0x0000 },
+  { 0x0901, 0xd67b, 0x0000 },
+  { 0x8901, 0xd67e, 0x2000 },
+  { 0x0901, 0xd67d, 0x0000 },
+  { 0x0901, 0xd67f, 0x0000 },
+  { 0x8901, 0xd688, 0x4000 },
+  { 0x8901, 0xd684, 0x3000 },
+  { 0x8901, 0xd682, 0x2000 },
+  { 0x0901, 0xd681, 0x0000 },
+  { 0x0901, 0xd683, 0x0000 },
+  { 0x8901, 0xd686, 0x2000 },
+  { 0x0901, 0xd685, 0x0000 },
+  { 0x0901, 0xd687, 0x0000 },
+  { 0x8501, 0xd68c, 0x3000 },
+  { 0x8501, 0xd68a, 0x2000 },
+  { 0x0901, 0xd689, 0x0000 },
+  { 0x0501, 0xd68b, 0x0000 },
+  { 0x8501, 0xd68e, 0x2000 },
+  { 0x0501, 0xd68d, 0x0000 },
+  { 0x0501, 0xd68f, 0x0000 },
+  { 0x8501, 0xd6a0, 0x5000 },
+  { 0x8501, 0xd698, 0x4000 },
+  { 0x8501, 0xd694, 0x3000 },
+  { 0x8501, 0xd692, 0x2000 },
+  { 0x0501, 0xd691, 0x0000 },
+  { 0x0501, 0xd693, 0x0000 },
+  { 0x8501, 0xd696, 0x2000 },
+  { 0x0501, 0xd695, 0x0000 },
+  { 0x0501, 0xd697, 0x0000 },
+  { 0x8501, 0xd69c, 0x3000 },
+  { 0x8501, 0xd69a, 0x2000 },
+  { 0x0501, 0xd699, 0x0000 },
+  { 0x0501, 0xd69b, 0x0000 },
+  { 0x8501, 0xd69e, 0x2000 },
+  { 0x0501, 0xd69d, 0x0000 },
+  { 0x0501, 0xd69f, 0x0000 },
+  { 0x8901, 0xd6ac, 0x4000 },
+  { 0x8901, 0xd6a8, 0x3000 },
+  { 0x8501, 0xd6a2, 0x2000 },
+  { 0x0501, 0xd6a1, 0x0000 },
+  { 0x0501, 0xd6a3, 0x0000 },
+  { 0x8901, 0xd6aa, 0x2000 },
+  { 0x0901, 0xd6a9, 0x0000 },
+  { 0x0901, 0xd6ab, 0x0000 },
+  { 0x8901, 0xd6b0, 0x3000 },
+  { 0x8901, 0xd6ae, 0x2000 },
+  { 0x0901, 0xd6ad, 0x0000 },
+  { 0x0901, 0xd6af, 0x0000 },
+  { 0x8901, 0xd6b2, 0x2000 },
+  { 0x0901, 0xd6b1, 0x0000 },
+  { 0x0901, 0xd6b3, 0x0000 },
+  { 0x8501, 0xd6d4, 0x6000 },
+  { 0x8501, 0xd6c4, 0x5000 },
+  { 0x8901, 0xd6bc, 0x4000 },
+  { 0x8901, 0xd6b8, 0x3000 },
+  { 0x8901, 0xd6b6, 0x2000 },
+  { 0x0901, 0xd6b5, 0x0000 },
+  { 0x0901, 0xd6b7, 0x0000 },
+  { 0x8901, 0xd6ba, 0x2000 },
+  { 0x0901, 0xd6b9, 0x0000 },
+  { 0x0901, 0xd6bb, 0x0000 },
+  { 0x8901, 0xd6c0, 0x3000 },
+  { 0x8901, 0xd6be, 0x2000 },
+  { 0x0901, 0xd6bd, 0x0000 },
+  { 0x0901, 0xd6bf, 0x0000 },
+  { 0x8501, 0xd6c2, 0x2000 },
+  { 0x1901, 0xd6c1, 0x0000 },
+  { 0x0501, 0xd6c3, 0x0000 },
+  { 0x8501, 0xd6cc, 0x4000 },
+  { 0x8501, 0xd6c8, 0x3000 },
+  { 0x8501, 0xd6c6, 0x2000 },
+  { 0x0501, 0xd6c5, 0x0000 },
+  { 0x0501, 0xd6c7, 0x0000 },
+  { 0x8501, 0xd6ca, 0x2000 },
+  { 0x0501, 0xd6c9, 0x0000 },
+  { 0x0501, 0xd6cb, 0x0000 },
+  { 0x8501, 0xd6d0, 0x3000 },
+  { 0x8501, 0xd6ce, 0x2000 },
+  { 0x0501, 0xd6cd, 0x0000 },
+  { 0x0501, 0xd6cf, 0x0000 },
+  { 0x8501, 0xd6d2, 0x2000 },
+  { 0x0501, 0xd6d1, 0x0000 },
+  { 0x0501, 0xd6d3, 0x0000 },
+  { 0x8901, 0xd6e4, 0x5000 },
+  { 0x8501, 0xd6dc, 0x4000 },
+  { 0x8501, 0xd6d8, 0x3000 },
+  { 0x8501, 0xd6d6, 0x2000 },
+  { 0x0501, 0xd6d5, 0x0000 },
+  { 0x0501, 0xd6d7, 0x0000 },
+  { 0x8501, 0xd6da, 0x2000 },
+  { 0x0501, 0xd6d9, 0x0000 },
+  { 0x1901, 0xd6db, 0x0000 },
+  { 0x8501, 0xd6e0, 0x3000 },
+  { 0x8501, 0xd6de, 0x2000 },
+  { 0x0501, 0xd6dd, 0x0000 },
+  { 0x0501, 0xd6df, 0x0000 },
+  { 0x8901, 0xd6e2, 0x2000 },
+  { 0x0501, 0xd6e1, 0x0000 },
+  { 0x0901, 0xd6e3, 0x0000 },
+  { 0x8901, 0xd6ec, 0x4000 },
+  { 0x8901, 0xd6e8, 0x3000 },
+  { 0x8901, 0xd6e6, 0x2000 },
+  { 0x0901, 0xd6e5, 0x0000 },
+  { 0x0901, 0xd6e7, 0x0000 },
+  { 0x8901, 0xd6ea, 0x2000 },
+  { 0x0901, 0xd6e9, 0x0000 },
+  { 0x0901, 0xd6eb, 0x0000 },
+  { 0x8901, 0xd6f0, 0x3000 },
+  { 0x8901, 0xd6ee, 0x2000 },
+  { 0x0901, 0xd6ed, 0x0000 },
+  { 0x0901, 0xd6ef, 0x0000 },
+  { 0x8901, 0xd6f2, 0x2000 },
+  { 0x0901, 0xd6f1, 0x0000 },
+  { 0x0901, 0xd6f3, 0x0000 },
+  { 0x8901, 0xd734, 0x7000 },
+  { 0x8501, 0xd714, 0x6000 },
+  { 0x8501, 0xd704, 0x5000 },
+  { 0x8501, 0xd6fc, 0x4000 },
+  { 0x8901, 0xd6f8, 0x3000 },
+  { 0x8901, 0xd6f6, 0x2000 },
+  { 0x0901, 0xd6f5, 0x0000 },
+  { 0x0901, 0xd6f7, 0x0000 },
+  { 0x8901, 0xd6fa, 0x2000 },
+  { 0x0901, 0xd6f9, 0x0000 },
+  { 0x1901, 0xd6fb, 0x0000 },
+  { 0x8501, 0xd700, 0x3000 },
+  { 0x8501, 0xd6fe, 0x2000 },
+  { 0x0501, 0xd6fd, 0x0000 },
+  { 0x0501, 0xd6ff, 0x0000 },
+  { 0x8501, 0xd702, 0x2000 },
+  { 0x0501, 0xd701, 0x0000 },
+  { 0x0501, 0xd703, 0x0000 },
+  { 0x8501, 0xd70c, 0x4000 },
+  { 0x8501, 0xd708, 0x3000 },
+  { 0x8501, 0xd706, 0x2000 },
+  { 0x0501, 0xd705, 0x0000 },
+  { 0x0501, 0xd707, 0x0000 },
+  { 0x8501, 0xd70a, 0x2000 },
+  { 0x0501, 0xd709, 0x0000 },
+  { 0x0501, 0xd70b, 0x0000 },
+  { 0x8501, 0xd710, 0x3000 },
+  { 0x8501, 0xd70e, 0x2000 },
+  { 0x0501, 0xd70d, 0x0000 },
+  { 0x0501, 0xd70f, 0x0000 },
+  { 0x8501, 0xd712, 0x2000 },
+  { 0x0501, 0xd711, 0x0000 },
+  { 0x0501, 0xd713, 0x0000 },
+  { 0x8901, 0xd724, 0x5000 },
+  { 0x8901, 0xd71c, 0x4000 },
+  { 0x8501, 0xd718, 0x3000 },
+  { 0x8501, 0xd716, 0x2000 },
+  { 0x1901, 0xd715, 0x0000 },
+  { 0x0501, 0xd717, 0x0000 },
+  { 0x8501, 0xd71a, 0x2000 },
+  { 0x0501, 0xd719, 0x0000 },
+  { 0x0501, 0xd71b, 0x0000 },
+  { 0x8901, 0xd720, 0x3000 },
+  { 0x8901, 0xd71e, 0x2000 },
+  { 0x0901, 0xd71d, 0x0000 },
+  { 0x0901, 0xd71f, 0x0000 },
+  { 0x8901, 0xd722, 0x2000 },
+  { 0x0901, 0xd721, 0x0000 },
+  { 0x0901, 0xd723, 0x0000 },
+  { 0x8901, 0xd72c, 0x4000 },
+  { 0x8901, 0xd728, 0x3000 },
+  { 0x8901, 0xd726, 0x2000 },
+  { 0x0901, 0xd725, 0x0000 },
+  { 0x0901, 0xd727, 0x0000 },
+  { 0x8901, 0xd72a, 0x2000 },
+  { 0x0901, 0xd729, 0x0000 },
+  { 0x0901, 0xd72b, 0x0000 },
+  { 0x8901, 0xd730, 0x3000 },
+  { 0x8901, 0xd72e, 0x2000 },
+  { 0x0901, 0xd72d, 0x0000 },
+  { 0x0901, 0xd72f, 0x0000 },
+  { 0x8901, 0xd732, 0x2000 },
+  { 0x0901, 0xd731, 0x0000 },
+  { 0x0901, 0xd733, 0x0000 },
+  { 0x8501, 0xd754, 0x6000 },
+  { 0x8501, 0xd744, 0x5000 },
+  { 0x8501, 0xd73c, 0x4000 },
+  { 0x8501, 0xd738, 0x3000 },
+  { 0x8501, 0xd736, 0x2000 },
+  { 0x1901, 0xd735, 0x0000 },
+  { 0x0501, 0xd737, 0x0000 },
+  { 0x8501, 0xd73a, 0x2000 },
+  { 0x0501, 0xd739, 0x0000 },
+  { 0x0501, 0xd73b, 0x0000 },
+  { 0x8501, 0xd740, 0x3000 },
+  { 0x8501, 0xd73e, 0x2000 },
+  { 0x0501, 0xd73d, 0x0000 },
+  { 0x0501, 0xd73f, 0x0000 },
+  { 0x8501, 0xd742, 0x2000 },
+  { 0x0501, 0xd741, 0x0000 },
+  { 0x0501, 0xd743, 0x0000 },
+  { 0x8501, 0xd74c, 0x4000 },
+  { 0x8501, 0xd748, 0x3000 },
+  { 0x8501, 0xd746, 0x2000 },
+  { 0x0501, 0xd745, 0x0000 },
+  { 0x0501, 0xd747, 0x0000 },
+  { 0x8501, 0xd74a, 0x2000 },
+  { 0x0501, 0xd749, 0x0000 },
+  { 0x0501, 0xd74b, 0x0000 },
+  { 0x8501, 0xd750, 0x3000 },
+  { 0x8501, 0xd74e, 0x2000 },
+  { 0x0501, 0xd74d, 0x0000 },
+  { 0x1901, 0xd74f, 0x0000 },
+  { 0x8501, 0xd752, 0x2000 },
+  { 0x0501, 0xd751, 0x0000 },
+  { 0x0501, 0xd753, 0x0000 },
+  { 0x8901, 0xd764, 0x5000 },
+  { 0x8901, 0xd75c, 0x4000 },
+  { 0x8901, 0xd758, 0x3000 },
+  { 0x8901, 0xd756, 0x2000 },
+  { 0x0501, 0xd755, 0x0000 },
+  { 0x0901, 0xd757, 0x0000 },
+  { 0x8901, 0xd75a, 0x2000 },
+  { 0x0901, 0xd759, 0x0000 },
+  { 0x0901, 0xd75b, 0x0000 },
+  { 0x8901, 0xd760, 0x3000 },
+  { 0x8901, 0xd75e, 0x2000 },
+  { 0x0901, 0xd75d, 0x0000 },
+  { 0x0901, 0xd75f, 0x0000 },
+  { 0x8901, 0xd762, 0x2000 },
+  { 0x0901, 0xd761, 0x0000 },
+  { 0x0901, 0xd763, 0x0000 },
+  { 0x8901, 0xd76c, 0x4000 },
+  { 0x8901, 0xd768, 0x3000 },
+  { 0x8901, 0xd766, 0x2000 },
+  { 0x0901, 0xd765, 0x0000 },
+  { 0x0901, 0xd767, 0x0000 },
+  { 0x8901, 0xd76a, 0x2000 },
+  { 0x0901, 0xd769, 0x0000 },
+  { 0x0901, 0xd76b, 0x0000 },
+  { 0x8501, 0xd770, 0x3000 },
+  { 0x8901, 0xd76e, 0x2000 },
+  { 0x0901, 0xd76d, 0x0000 },
+  { 0x1901, 0xd76f, 0x0000 },
+  { 0x8501, 0xd772, 0x2000 },
+  { 0x0501, 0xd771, 0x0000 },
+  { 0x0501, 0xd773, 0x0000 },
+  { 0x8d01, 0xd7f8, 0x8000 },
+  { 0x8501, 0xd7b4, 0x7000 },
+  { 0x8901, 0xd794, 0x6000 },
+  { 0x8501, 0xd784, 0x5000 },
+  { 0x8501, 0xd77c, 0x4000 },
+  { 0x8501, 0xd778, 0x3000 },
+  { 0x8501, 0xd776, 0x2000 },
+  { 0x0501, 0xd775, 0x0000 },
+  { 0x0501, 0xd777, 0x0000 },
+  { 0x8501, 0xd77a, 0x2000 },
+  { 0x0501, 0xd779, 0x0000 },
+  { 0x0501, 0xd77b, 0x0000 },
+  { 0x8501, 0xd780, 0x3000 },
+  { 0x8501, 0xd77e, 0x2000 },
+  { 0x0501, 0xd77d, 0x0000 },
+  { 0x0501, 0xd77f, 0x0000 },
+  { 0x8501, 0xd782, 0x2000 },
+  { 0x0501, 0xd781, 0x0000 },
+  { 0x0501, 0xd783, 0x0000 },
+  { 0x8501, 0xd78c, 0x4000 },
+  { 0x8501, 0xd788, 0x3000 },
+  { 0x8501, 0xd786, 0x2000 },
+  { 0x0501, 0xd785, 0x0000 },
+  { 0x0501, 0xd787, 0x0000 },
+  { 0x8501, 0xd78a, 0x2000 },
+  { 0x1901, 0xd789, 0x0000 },
+  { 0x0501, 0xd78b, 0x0000 },
+  { 0x8901, 0xd790, 0x3000 },
+  { 0x8501, 0xd78e, 0x2000 },
+  { 0x0501, 0xd78d, 0x0000 },
+  { 0x0501, 0xd78f, 0x0000 },
+  { 0x8901, 0xd792, 0x2000 },
+  { 0x0901, 0xd791, 0x0000 },
+  { 0x0901, 0xd793, 0x0000 },
+  { 0x8901, 0xd7a4, 0x5000 },
+  { 0x8901, 0xd79c, 0x4000 },
+  { 0x8901, 0xd798, 0x3000 },
+  { 0x8901, 0xd796, 0x2000 },
+  { 0x0901, 0xd795, 0x0000 },
+  { 0x0901, 0xd797, 0x0000 },
+  { 0x8901, 0xd79a, 0x2000 },
+  { 0x0901, 0xd799, 0x0000 },
+  { 0x0901, 0xd79b, 0x0000 },
+  { 0x8901, 0xd7a0, 0x3000 },
+  { 0x8901, 0xd79e, 0x2000 },
+  { 0x0901, 0xd79d, 0x0000 },
+  { 0x0901, 0xd79f, 0x0000 },
+  { 0x8901, 0xd7a2, 0x2000 },
+  { 0x0901, 0xd7a1, 0x0000 },
+  { 0x0901, 0xd7a3, 0x0000 },
+  { 0x8501, 0xd7ac, 0x4000 },
+  { 0x8901, 0xd7a8, 0x3000 },
+  { 0x8901, 0xd7a6, 0x2000 },
+  { 0x0901, 0xd7a5, 0x0000 },
+  { 0x0901, 0xd7a7, 0x0000 },
+  { 0x8501, 0xd7aa, 0x2000 },
+  { 0x1901, 0xd7a9, 0x0000 },
+  { 0x0501, 0xd7ab, 0x0000 },
+  { 0x8501, 0xd7b0, 0x3000 },
+  { 0x8501, 0xd7ae, 0x2000 },
+  { 0x0501, 0xd7ad, 0x0000 },
+  { 0x0501, 0xd7af, 0x0000 },
+  { 0x8501, 0xd7b2, 0x2000 },
+  { 0x0501, 0xd7b1, 0x0000 },
+  { 0x0501, 0xd7b3, 0x0000 },
+  { 0x8d01, 0xd7d8, 0x6000 },
+  { 0x8501, 0xd7c4, 0x5000 },
+  { 0x8501, 0xd7bc, 0x4000 },
+  { 0x8501, 0xd7b8, 0x3000 },
+  { 0x8501, 0xd7b6, 0x2000 },
+  { 0x0501, 0xd7b5, 0x0000 },
+  { 0x0501, 0xd7b7, 0x0000 },
+  { 0x8501, 0xd7ba, 0x2000 },
+  { 0x0501, 0xd7b9, 0x0000 },
+  { 0x0501, 0xd7bb, 0x0000 },
+  { 0x8501, 0xd7c0, 0x3000 },
+  { 0x8501, 0xd7be, 0x2000 },
+  { 0x0501, 0xd7bd, 0x0000 },
+  { 0x0501, 0xd7bf, 0x0000 },
+  { 0x8501, 0xd7c2, 0x2000 },
+  { 0x0501, 0xd7c1, 0x0000 },
+  { 0x1901, 0xd7c3, 0x0000 },
+  { 0x8d01, 0xd7d0, 0x4000 },
+  { 0x8501, 0xd7c8, 0x3000 },
+  { 0x8501, 0xd7c6, 0x2000 },
+  { 0x0501, 0xd7c5, 0x0000 },
+  { 0x0501, 0xd7c7, 0x0000 },
+  { 0x8d01, 0xd7ce, 0x2000 },
+  { 0x0501, 0xd7c9, 0x0000 },
+  { 0x0d01, 0xd7cf, 0x0000 },
+  { 0x8d01, 0xd7d4, 0x3000 },
+  { 0x8d01, 0xd7d2, 0x2000 },
+  { 0x0d01, 0xd7d1, 0x0000 },
+  { 0x0d01, 0xd7d3, 0x0000 },
+  { 0x8d01, 0xd7d6, 0x2000 },
+  { 0x0d01, 0xd7d5, 0x0000 },
+  { 0x0d01, 0xd7d7, 0x0000 },
+  { 0x8d01, 0xd7e8, 0x5000 },
+  { 0x8d01, 0xd7e0, 0x4000 },
+  { 0x8d01, 0xd7dc, 0x3000 },
+  { 0x8d01, 0xd7da, 0x2000 },
+  { 0x0d01, 0xd7d9, 0x0000 },
+  { 0x0d01, 0xd7db, 0x0000 },
+  { 0x8d01, 0xd7de, 0x2000 },
+  { 0x0d01, 0xd7dd, 0x0000 },
+  { 0x0d01, 0xd7df, 0x0000 },
+  { 0x8d01, 0xd7e4, 0x3000 },
+  { 0x8d01, 0xd7e2, 0x2000 },
+  { 0x0d01, 0xd7e1, 0x0000 },
+  { 0x0d01, 0xd7e3, 0x0000 },
+  { 0x8d01, 0xd7e6, 0x2000 },
+  { 0x0d01, 0xd7e5, 0x0000 },
+  { 0x0d01, 0xd7e7, 0x0000 },
+  { 0x8d01, 0xd7f0, 0x4000 },
+  { 0x8d01, 0xd7ec, 0x3000 },
+  { 0x8d01, 0xd7ea, 0x2000 },
+  { 0x0d01, 0xd7e9, 0x0000 },
+  { 0x0d01, 0xd7eb, 0x0000 },
+  { 0x8d01, 0xd7ee, 0x2000 },
+  { 0x0d01, 0xd7ed, 0x0000 },
+  { 0x0d01, 0xd7ef, 0x0000 },
+  { 0x8d01, 0xd7f4, 0x3000 },
+  { 0x8d01, 0xd7f2, 0x2000 },
+  { 0x0d01, 0xd7f1, 0x0000 },
+  { 0x0d01, 0xd7f3, 0x0000 },
+  { 0x8d01, 0xd7f6, 0x2000 },
+  { 0x0d01, 0xd7f5, 0x0000 },
+  { 0x0d01, 0xd7f7, 0x0000 },
+  { 0x8702, 0xf836, 0x7000 },
+  { 0x8702, 0xf816, 0x6000 },
+  { 0x8702, 0xf806, 0x5000 },
+  { 0x8702, 0x0000, 0x4000 },
+  { 0x8d01, 0xd7fc, 0x3000 },
+  { 0x8d01, 0xd7fa, 0x2000 },
+  { 0x0d01, 0xd7f9, 0x0000 },
+  { 0x0d01, 0xd7fb, 0x0000 },
+  { 0x8d01, 0xd7fe, 0x2000 },
+  { 0x0d01, 0xd7fd, 0x0000 },
+  { 0x0d01, 0xd7ff, 0x0000 },
+  { 0x8702, 0xf802, 0x3000 },
+  { 0x8702, 0xf800, 0x2000 },
+  { 0x0702, 0xa6d6, 0x0000 },
+  { 0x0702, 0xf801, 0x0000 },
+  { 0x8702, 0xf804, 0x2000 },
+  { 0x0702, 0xf803, 0x0000 },
+  { 0x0702, 0xf805, 0x0000 },
+  { 0x8702, 0xf80e, 0x4000 },
+  { 0x8702, 0xf80a, 0x3000 },
+  { 0x8702, 0xf808, 0x2000 },
+  { 0x0702, 0xf807, 0x0000 },
+  { 0x0702, 0xf809, 0x0000 },
+  { 0x8702, 0xf80c, 0x2000 },
+  { 0x0702, 0xf80b, 0x0000 },
+  { 0x0702, 0xf80d, 0x0000 },
+  { 0x8702, 0xf812, 0x3000 },
+  { 0x8702, 0xf810, 0x2000 },
+  { 0x0702, 0xf80f, 0x0000 },
+  { 0x0702, 0xf811, 0x0000 },
+  { 0x8702, 0xf814, 0x2000 },
+  { 0x0702, 0xf813, 0x0000 },
+  { 0x0702, 0xf815, 0x0000 },
+  { 0x8702, 0xf826, 0x5000 },
+  { 0x8702, 0xf81e, 0x4000 },
+  { 0x8702, 0xf81a, 0x3000 },
+  { 0x8702, 0xf818, 0x2000 },
+  { 0x0702, 0xf817, 0x0000 },
+  { 0x0702, 0xf819, 0x0000 },
+  { 0x8702, 0xf81c, 0x2000 },
+  { 0x0702, 0xf81b, 0x0000 },
+  { 0x0702, 0xf81d, 0x0000 },
+  { 0x8702, 0xf822, 0x3000 },
+  { 0x8702, 0xf820, 0x2000 },
+  { 0x0702, 0xf81f, 0x0000 },
+  { 0x0702, 0xf821, 0x0000 },
+  { 0x8702, 0xf824, 0x2000 },
+  { 0x0702, 0xf823, 0x0000 },
+  { 0x0702, 0xf825, 0x0000 },
+  { 0x8702, 0xf82e, 0x4000 },
+  { 0x8702, 0xf82a, 0x3000 },
+  { 0x8702, 0xf828, 0x2000 },
+  { 0x0702, 0xf827, 0x0000 },
+  { 0x0702, 0xf829, 0x0000 },
+  { 0x8702, 0xf82c, 0x2000 },
+  { 0x0702, 0xf82b, 0x0000 },
+  { 0x0702, 0xf82d, 0x0000 },
+  { 0x8702, 0xf832, 0x3000 },
+  { 0x8702, 0xf830, 0x2000 },
+  { 0x0702, 0xf82f, 0x0000 },
+  { 0x0702, 0xf831, 0x0000 },
+  { 0x8702, 0xf834, 0x2000 },
+  { 0x0702, 0xf833, 0x0000 },
+  { 0x0702, 0xf835, 0x0000 },
+  { 0x8702, 0xf856, 0x6000 },
+  { 0x8702, 0xf846, 0x5000 },
+  { 0x8702, 0xf83e, 0x4000 },
+  { 0x8702, 0xf83a, 0x3000 },
+  { 0x8702, 0xf838, 0x2000 },
+  { 0x0702, 0xf837, 0x0000 },
+  { 0x0702, 0xf839, 0x0000 },
+  { 0x8702, 0xf83c, 0x2000 },
+  { 0x0702, 0xf83b, 0x0000 },
+  { 0x0702, 0xf83d, 0x0000 },
+  { 0x8702, 0xf842, 0x3000 },
+  { 0x8702, 0xf840, 0x2000 },
+  { 0x0702, 0xf83f, 0x0000 },
+  { 0x0702, 0xf841, 0x0000 },
+  { 0x8702, 0xf844, 0x2000 },
+  { 0x0702, 0xf843, 0x0000 },
+  { 0x0702, 0xf845, 0x0000 },
+  { 0x8702, 0xf84e, 0x4000 },
+  { 0x8702, 0xf84a, 0x3000 },
+  { 0x8702, 0xf848, 0x2000 },
+  { 0x0702, 0xf847, 0x0000 },
+  { 0x0702, 0xf849, 0x0000 },
+  { 0x8702, 0xf84c, 0x2000 },
+  { 0x0702, 0xf84b, 0x0000 },
+  { 0x0702, 0xf84d, 0x0000 },
+  { 0x8702, 0xf852, 0x3000 },
+  { 0x8702, 0xf850, 0x2000 },
+  { 0x0702, 0xf84f, 0x0000 },
+  { 0x0702, 0xf851, 0x0000 },
+  { 0x8702, 0xf854, 0x2000 },
+  { 0x0702, 0xf853, 0x0000 },
+  { 0x0702, 0xf855, 0x0000 },
+  { 0x8702, 0xf866, 0x5000 },
+  { 0x8702, 0xf85e, 0x4000 },
+  { 0x8702, 0xf85a, 0x3000 },
+  { 0x8702, 0xf858, 0x2000 },
+  { 0x0702, 0xf857, 0x0000 },
+  { 0x0702, 0xf859, 0x0000 },
+  { 0x8702, 0xf85c, 0x2000 },
+  { 0x0702, 0xf85b, 0x0000 },
+  { 0x0702, 0xf85d, 0x0000 },
+  { 0x8702, 0xf862, 0x3000 },
+  { 0x8702, 0xf860, 0x2000 },
+  { 0x0702, 0xf85f, 0x0000 },
+  { 0x0702, 0xf861, 0x0000 },
+  { 0x8702, 0xf864, 0x2000 },
+  { 0x0702, 0xf863, 0x0000 },
+  { 0x0702, 0xf865, 0x0000 },
+  { 0x8702, 0xf86e, 0x4000 },
+  { 0x8702, 0xf86a, 0x3000 },
+  { 0x8702, 0xf868, 0x2000 },
+  { 0x0702, 0xf867, 0x0000 },
+  { 0x0702, 0xf869, 0x0000 },
+  { 0x8702, 0xf86c, 0x2000 },
+  { 0x0702, 0xf86b, 0x0000 },
+  { 0x0702, 0xf86d, 0x0000 },
+  { 0x8702, 0xf872, 0x3000 },
+  { 0x8702, 0xf870, 0x2000 },
+  { 0x0702, 0xf86f, 0x0000 },
+  { 0x0702, 0xf871, 0x0000 },
+  { 0x8702, 0xf874, 0x2000 },
+  { 0x0702, 0xf873, 0x0000 },
+  { 0x0702, 0xf875, 0x0000 },
+  { 0x8702, 0xf976, 0x9000 },
+  { 0x8702, 0xf8f6, 0x8000 },
+  { 0x8702, 0xf8b6, 0x7000 },
+  { 0x8702, 0xf896, 0x6000 },
+  { 0x8702, 0xf886, 0x5000 },
+  { 0x8702, 0xf87e, 0x4000 },
+  { 0x8702, 0xf87a, 0x3000 },
+  { 0x8702, 0xf878, 0x2000 },
+  { 0x0702, 0xf877, 0x0000 },
+  { 0x0702, 0xf879, 0x0000 },
+  { 0x8702, 0xf87c, 0x2000 },
+  { 0x0702, 0xf87b, 0x0000 },
+  { 0x0702, 0xf87d, 0x0000 },
+  { 0x8702, 0xf882, 0x3000 },
+  { 0x8702, 0xf880, 0x2000 },
+  { 0x0702, 0xf87f, 0x0000 },
+  { 0x0702, 0xf881, 0x0000 },
+  { 0x8702, 0xf884, 0x2000 },
+  { 0x0702, 0xf883, 0x0000 },
+  { 0x0702, 0xf885, 0x0000 },
+  { 0x8702, 0xf88e, 0x4000 },
+  { 0x8702, 0xf88a, 0x3000 },
+  { 0x8702, 0xf888, 0x2000 },
+  { 0x0702, 0xf887, 0x0000 },
+  { 0x0702, 0xf889, 0x0000 },
+  { 0x8702, 0xf88c, 0x2000 },
+  { 0x0702, 0xf88b, 0x0000 },
+  { 0x0702, 0xf88d, 0x0000 },
+  { 0x8702, 0xf892, 0x3000 },
+  { 0x8702, 0xf890, 0x2000 },
+  { 0x0702, 0xf88f, 0x0000 },
+  { 0x0702, 0xf891, 0x0000 },
+  { 0x8702, 0xf894, 0x2000 },
+  { 0x0702, 0xf893, 0x0000 },
+  { 0x0702, 0xf895, 0x0000 },
+  { 0x8702, 0xf8a6, 0x5000 },
+  { 0x8702, 0xf89e, 0x4000 },
+  { 0x8702, 0xf89a, 0x3000 },
+  { 0x8702, 0xf898, 0x2000 },
+  { 0x0702, 0xf897, 0x0000 },
+  { 0x0702, 0xf899, 0x0000 },
+  { 0x8702, 0xf89c, 0x2000 },
+  { 0x0702, 0xf89b, 0x0000 },
+  { 0x0702, 0xf89d, 0x0000 },
+  { 0x8702, 0xf8a2, 0x3000 },
+  { 0x8702, 0xf8a0, 0x2000 },
+  { 0x0702, 0xf89f, 0x0000 },
+  { 0x0702, 0xf8a1, 0x0000 },
+  { 0x8702, 0xf8a4, 0x2000 },
+  { 0x0702, 0xf8a3, 0x0000 },
+  { 0x0702, 0xf8a5, 0x0000 },
+  { 0x8702, 0xf8ae, 0x4000 },
+  { 0x8702, 0xf8aa, 0x3000 },
+  { 0x8702, 0xf8a8, 0x2000 },
+  { 0x0702, 0xf8a7, 0x0000 },
+  { 0x0702, 0xf8a9, 0x0000 },
+  { 0x8702, 0xf8ac, 0x2000 },
+  { 0x0702, 0xf8ab, 0x0000 },
+  { 0x0702, 0xf8ad, 0x0000 },
+  { 0x8702, 0xf8b2, 0x3000 },
+  { 0x8702, 0xf8b0, 0x2000 },
+  { 0x0702, 0xf8af, 0x0000 },
+  { 0x0702, 0xf8b1, 0x0000 },
+  { 0x8702, 0xf8b4, 0x2000 },
+  { 0x0702, 0xf8b3, 0x0000 },
+  { 0x0702, 0xf8b5, 0x0000 },
+  { 0x8702, 0xf8d6, 0x6000 },
+  { 0x8702, 0xf8c6, 0x5000 },
+  { 0x8702, 0xf8be, 0x4000 },
+  { 0x8702, 0xf8ba, 0x3000 },
+  { 0x8702, 0xf8b8, 0x2000 },
+  { 0x0702, 0xf8b7, 0x0000 },
+  { 0x0702, 0xf8b9, 0x0000 },
+  { 0x8702, 0xf8bc, 0x2000 },
+  { 0x0702, 0xf8bb, 0x0000 },
+  { 0x0702, 0xf8bd, 0x0000 },
+  { 0x8702, 0xf8c2, 0x3000 },
+  { 0x8702, 0xf8c0, 0x2000 },
+  { 0x0702, 0xf8bf, 0x0000 },
+  { 0x0702, 0xf8c1, 0x0000 },
+  { 0x8702, 0xf8c4, 0x2000 },
+  { 0x0702, 0xf8c3, 0x0000 },
+  { 0x0702, 0xf8c5, 0x0000 },
+  { 0x8702, 0xf8ce, 0x4000 },
+  { 0x8702, 0xf8ca, 0x3000 },
+  { 0x8702, 0xf8c8, 0x2000 },
+  { 0x0702, 0xf8c7, 0x0000 },
+  { 0x0702, 0xf8c9, 0x0000 },
+  { 0x8702, 0xf8cc, 0x2000 },
+  { 0x0702, 0xf8cb, 0x0000 },
+  { 0x0702, 0xf8cd, 0x0000 },
+  { 0x8702, 0xf8d2, 0x3000 },
+  { 0x8702, 0xf8d0, 0x2000 },
+  { 0x0702, 0xf8cf, 0x0000 },
+  { 0x0702, 0xf8d1, 0x0000 },
+  { 0x8702, 0xf8d4, 0x2000 },
+  { 0x0702, 0xf8d3, 0x0000 },
+  { 0x0702, 0xf8d5, 0x0000 },
+  { 0x8702, 0xf8e6, 0x5000 },
+  { 0x8702, 0xf8de, 0x4000 },
+  { 0x8702, 0xf8da, 0x3000 },
+  { 0x8702, 0xf8d8, 0x2000 },
+  { 0x0702, 0xf8d7, 0x0000 },
+  { 0x0702, 0xf8d9, 0x0000 },
+  { 0x8702, 0xf8dc, 0x2000 },
+  { 0x0702, 0xf8db, 0x0000 },
+  { 0x0702, 0xf8dd, 0x0000 },
+  { 0x8702, 0xf8e2, 0x3000 },
+  { 0x8702, 0xf8e0, 0x2000 },
+  { 0x0702, 0xf8df, 0x0000 },
+  { 0x0702, 0xf8e1, 0x0000 },
+  { 0x8702, 0xf8e4, 0x2000 },
+  { 0x0702, 0xf8e3, 0x0000 },
+  { 0x0702, 0xf8e5, 0x0000 },
+  { 0x8702, 0xf8ee, 0x4000 },
+  { 0x8702, 0xf8ea, 0x3000 },
+  { 0x8702, 0xf8e8, 0x2000 },
+  { 0x0702, 0xf8e7, 0x0000 },
+  { 0x0702, 0xf8e9, 0x0000 },
+  { 0x8702, 0xf8ec, 0x2000 },
+  { 0x0702, 0xf8eb, 0x0000 },
+  { 0x0702, 0xf8ed, 0x0000 },
+  { 0x8702, 0xf8f2, 0x3000 },
+  { 0x8702, 0xf8f0, 0x2000 },
+  { 0x0702, 0xf8ef, 0x0000 },
+  { 0x0702, 0xf8f1, 0x0000 },
+  { 0x8702, 0xf8f4, 0x2000 },
+  { 0x0702, 0xf8f3, 0x0000 },
+  { 0x0702, 0xf8f5, 0x0000 },
+  { 0x8702, 0xf936, 0x7000 },
+  { 0x8702, 0xf916, 0x6000 },
+  { 0x8702, 0xf906, 0x5000 },
+  { 0x8702, 0xf8fe, 0x4000 },
+  { 0x8702, 0xf8fa, 0x3000 },
+  { 0x8702, 0xf8f8, 0x2000 },
+  { 0x0702, 0xf8f7, 0x0000 },
+  { 0x0702, 0xf8f9, 0x0000 },
+  { 0x8702, 0xf8fc, 0x2000 },
+  { 0x0702, 0xf8fb, 0x0000 },
+  { 0x0702, 0xf8fd, 0x0000 },
+  { 0x8702, 0xf902, 0x3000 },
+  { 0x8702, 0xf900, 0x2000 },
+  { 0x0702, 0xf8ff, 0x0000 },
+  { 0x0702, 0xf901, 0x0000 },
+  { 0x8702, 0xf904, 0x2000 },
+  { 0x0702, 0xf903, 0x0000 },
+  { 0x0702, 0xf905, 0x0000 },
+  { 0x8702, 0xf90e, 0x4000 },
+  { 0x8702, 0xf90a, 0x3000 },
+  { 0x8702, 0xf908, 0x2000 },
+  { 0x0702, 0xf907, 0x0000 },
+  { 0x0702, 0xf909, 0x0000 },
+  { 0x8702, 0xf90c, 0x2000 },
+  { 0x0702, 0xf90b, 0x0000 },
+  { 0x0702, 0xf90d, 0x0000 },
+  { 0x8702, 0xf912, 0x3000 },
+  { 0x8702, 0xf910, 0x2000 },
+  { 0x0702, 0xf90f, 0x0000 },
+  { 0x0702, 0xf911, 0x0000 },
+  { 0x8702, 0xf914, 0x2000 },
+  { 0x0702, 0xf913, 0x0000 },
+  { 0x0702, 0xf915, 0x0000 },
+  { 0x8702, 0xf926, 0x5000 },
+  { 0x8702, 0xf91e, 0x4000 },
+  { 0x8702, 0xf91a, 0x3000 },
+  { 0x8702, 0xf918, 0x2000 },
+  { 0x0702, 0xf917, 0x0000 },
+  { 0x0702, 0xf919, 0x0000 },
+  { 0x8702, 0xf91c, 0x2000 },
+  { 0x0702, 0xf91b, 0x0000 },
+  { 0x0702, 0xf91d, 0x0000 },
+  { 0x8702, 0xf922, 0x3000 },
+  { 0x8702, 0xf920, 0x2000 },
+  { 0x0702, 0xf91f, 0x0000 },
+  { 0x0702, 0xf921, 0x0000 },
+  { 0x8702, 0xf924, 0x2000 },
+  { 0x0702, 0xf923, 0x0000 },
+  { 0x0702, 0xf925, 0x0000 },
+  { 0x8702, 0xf92e, 0x4000 },
+  { 0x8702, 0xf92a, 0x3000 },
+  { 0x8702, 0xf928, 0x2000 },
+  { 0x0702, 0xf927, 0x0000 },
+  { 0x0702, 0xf929, 0x0000 },
+  { 0x8702, 0xf92c, 0x2000 },
+  { 0x0702, 0xf92b, 0x0000 },
+  { 0x0702, 0xf92d, 0x0000 },
+  { 0x8702, 0xf932, 0x3000 },
+  { 0x8702, 0xf930, 0x2000 },
+  { 0x0702, 0xf92f, 0x0000 },
+  { 0x0702, 0xf931, 0x0000 },
+  { 0x8702, 0xf934, 0x2000 },
+  { 0x0702, 0xf933, 0x0000 },
+  { 0x0702, 0xf935, 0x0000 },
+  { 0x8702, 0xf956, 0x6000 },
+  { 0x8702, 0xf946, 0x5000 },
+  { 0x8702, 0xf93e, 0x4000 },
+  { 0x8702, 0xf93a, 0x3000 },
+  { 0x8702, 0xf938, 0x2000 },
+  { 0x0702, 0xf937, 0x0000 },
+  { 0x0702, 0xf939, 0x0000 },
+  { 0x8702, 0xf93c, 0x2000 },
+  { 0x0702, 0xf93b, 0x0000 },
+  { 0x0702, 0xf93d, 0x0000 },
+  { 0x8702, 0xf942, 0x3000 },
+  { 0x8702, 0xf940, 0x2000 },
+  { 0x0702, 0xf93f, 0x0000 },
+  { 0x0702, 0xf941, 0x0000 },
+  { 0x8702, 0xf944, 0x2000 },
+  { 0x0702, 0xf943, 0x0000 },
+  { 0x0702, 0xf945, 0x0000 },
+  { 0x8702, 0xf94e, 0x4000 },
+  { 0x8702, 0xf94a, 0x3000 },
+  { 0x8702, 0xf948, 0x2000 },
+  { 0x0702, 0xf947, 0x0000 },
+  { 0x0702, 0xf949, 0x0000 },
+  { 0x8702, 0xf94c, 0x2000 },
+  { 0x0702, 0xf94b, 0x0000 },
+  { 0x0702, 0xf94d, 0x0000 },
+  { 0x8702, 0xf952, 0x3000 },
+  { 0x8702, 0xf950, 0x2000 },
+  { 0x0702, 0xf94f, 0x0000 },
+  { 0x0702, 0xf951, 0x0000 },
+  { 0x8702, 0xf954, 0x2000 },
+  { 0x0702, 0xf953, 0x0000 },
+  { 0x0702, 0xf955, 0x0000 },
+  { 0x8702, 0xf966, 0x5000 },
+  { 0x8702, 0xf95e, 0x4000 },
+  { 0x8702, 0xf95a, 0x3000 },
+  { 0x8702, 0xf958, 0x2000 },
+  { 0x0702, 0xf957, 0x0000 },
+  { 0x0702, 0xf959, 0x0000 },
+  { 0x8702, 0xf95c, 0x2000 },
+  { 0x0702, 0xf95b, 0x0000 },
+  { 0x0702, 0xf95d, 0x0000 },
+  { 0x8702, 0xf962, 0x3000 },
+  { 0x8702, 0xf960, 0x2000 },
+  { 0x0702, 0xf95f, 0x0000 },
+  { 0x0702, 0xf961, 0x0000 },
+  { 0x8702, 0xf964, 0x2000 },
+  { 0x0702, 0xf963, 0x0000 },
+  { 0x0702, 0xf965, 0x0000 },
+  { 0x8702, 0xf96e, 0x4000 },
+  { 0x8702, 0xf96a, 0x3000 },
+  { 0x8702, 0xf968, 0x2000 },
+  { 0x0702, 0xf967, 0x0000 },
+  { 0x0702, 0xf969, 0x0000 },
+  { 0x8702, 0xf96c, 0x2000 },
+  { 0x0702, 0xf96b, 0x0000 },
+  { 0x0702, 0xf96d, 0x0000 },
+  { 0x8702, 0xf972, 0x3000 },
+  { 0x8702, 0xf970, 0x2000 },
+  { 0x0702, 0xf96f, 0x0000 },
+  { 0x0702, 0xf971, 0x0000 },
+  { 0x8702, 0xf974, 0x2000 },
+  { 0x0702, 0xf973, 0x0000 },
+  { 0x0702, 0xf975, 0x0000 },
+  { 0x810e, 0x0077, 0x9000 },
+  { 0x8702, 0xf9f6, 0x8000 },
+  { 0x8702, 0xf9b6, 0x7000 },
+  { 0x8702, 0xf996, 0x6000 },
+  { 0x8702, 0xf986, 0x5000 },
+  { 0x8702, 0xf97e, 0x4000 },
+  { 0x8702, 0xf97a, 0x3000 },
+  { 0x8702, 0xf978, 0x2000 },
+  { 0x0702, 0xf977, 0x0000 },
+  { 0x0702, 0xf979, 0x0000 },
+  { 0x8702, 0xf97c, 0x2000 },
+  { 0x0702, 0xf97b, 0x0000 },
+  { 0x0702, 0xf97d, 0x0000 },
+  { 0x8702, 0xf982, 0x3000 },
+  { 0x8702, 0xf980, 0x2000 },
+  { 0x0702, 0xf97f, 0x0000 },
+  { 0x0702, 0xf981, 0x0000 },
+  { 0x8702, 0xf984, 0x2000 },
+  { 0x0702, 0xf983, 0x0000 },
+  { 0x0702, 0xf985, 0x0000 },
+  { 0x8702, 0xf98e, 0x4000 },
+  { 0x8702, 0xf98a, 0x3000 },
+  { 0x8702, 0xf988, 0x2000 },
+  { 0x0702, 0xf987, 0x0000 },
+  { 0x0702, 0xf989, 0x0000 },
+  { 0x8702, 0xf98c, 0x2000 },
+  { 0x0702, 0xf98b, 0x0000 },
+  { 0x0702, 0xf98d, 0x0000 },
+  { 0x8702, 0xf992, 0x3000 },
+  { 0x8702, 0xf990, 0x2000 },
+  { 0x0702, 0xf98f, 0x0000 },
+  { 0x0702, 0xf991, 0x0000 },
+  { 0x8702, 0xf994, 0x2000 },
+  { 0x0702, 0xf993, 0x0000 },
+  { 0x0702, 0xf995, 0x0000 },
+  { 0x8702, 0xf9a6, 0x5000 },
+  { 0x8702, 0xf99e, 0x4000 },
+  { 0x8702, 0xf99a, 0x3000 },
+  { 0x8702, 0xf998, 0x2000 },
+  { 0x0702, 0xf997, 0x0000 },
+  { 0x0702, 0xf999, 0x0000 },
+  { 0x8702, 0xf99c, 0x2000 },
+  { 0x0702, 0xf99b, 0x0000 },
+  { 0x0702, 0xf99d, 0x0000 },
+  { 0x8702, 0xf9a2, 0x3000 },
+  { 0x8702, 0xf9a0, 0x2000 },
+  { 0x0702, 0xf99f, 0x0000 },
+  { 0x0702, 0xf9a1, 0x0000 },
+  { 0x8702, 0xf9a4, 0x2000 },
+  { 0x0702, 0xf9a3, 0x0000 },
+  { 0x0702, 0xf9a5, 0x0000 },
+  { 0x8702, 0xf9ae, 0x4000 },
+  { 0x8702, 0xf9aa, 0x3000 },
+  { 0x8702, 0xf9a8, 0x2000 },
+  { 0x0702, 0xf9a7, 0x0000 },
+  { 0x0702, 0xf9a9, 0x0000 },
+  { 0x8702, 0xf9ac, 0x2000 },
+  { 0x0702, 0xf9ab, 0x0000 },
+  { 0x0702, 0xf9ad, 0x0000 },
+  { 0x8702, 0xf9b2, 0x3000 },
+  { 0x8702, 0xf9b0, 0x2000 },
+  { 0x0702, 0xf9af, 0x0000 },
+  { 0x0702, 0xf9b1, 0x0000 },
+  { 0x8702, 0xf9b4, 0x2000 },
+  { 0x0702, 0xf9b3, 0x0000 },
+  { 0x0702, 0xf9b5, 0x0000 },
+  { 0x8702, 0xf9d6, 0x6000 },
+  { 0x8702, 0xf9c6, 0x5000 },
+  { 0x8702, 0xf9be, 0x4000 },
+  { 0x8702, 0xf9ba, 0x3000 },
+  { 0x8702, 0xf9b8, 0x2000 },
+  { 0x0702, 0xf9b7, 0x0000 },
+  { 0x0702, 0xf9b9, 0x0000 },
+  { 0x8702, 0xf9bc, 0x2000 },
+  { 0x0702, 0xf9bb, 0x0000 },
+  { 0x0702, 0xf9bd, 0x0000 },
+  { 0x8702, 0xf9c2, 0x3000 },
+  { 0x8702, 0xf9c0, 0x2000 },
+  { 0x0702, 0xf9bf, 0x0000 },
+  { 0x0702, 0xf9c1, 0x0000 },
+  { 0x8702, 0xf9c4, 0x2000 },
+  { 0x0702, 0xf9c3, 0x0000 },
+  { 0x0702, 0xf9c5, 0x0000 },
+  { 0x8702, 0xf9ce, 0x4000 },
+  { 0x8702, 0xf9ca, 0x3000 },
+  { 0x8702, 0xf9c8, 0x2000 },
+  { 0x0702, 0xf9c7, 0x0000 },
+  { 0x0702, 0xf9c9, 0x0000 },
+  { 0x8702, 0xf9cc, 0x2000 },
+  { 0x0702, 0xf9cb, 0x0000 },
+  { 0x0702, 0xf9cd, 0x0000 },
+  { 0x8702, 0xf9d2, 0x3000 },
+  { 0x8702, 0xf9d0, 0x2000 },
+  { 0x0702, 0xf9cf, 0x0000 },
+  { 0x0702, 0xf9d1, 0x0000 },
+  { 0x8702, 0xf9d4, 0x2000 },
+  { 0x0702, 0xf9d3, 0x0000 },
+  { 0x0702, 0xf9d5, 0x0000 },
+  { 0x8702, 0xf9e6, 0x5000 },
+  { 0x8702, 0xf9de, 0x4000 },
+  { 0x8702, 0xf9da, 0x3000 },
+  { 0x8702, 0xf9d8, 0x2000 },
+  { 0x0702, 0xf9d7, 0x0000 },
+  { 0x0702, 0xf9d9, 0x0000 },
+  { 0x8702, 0xf9dc, 0x2000 },
+  { 0x0702, 0xf9db, 0x0000 },
+  { 0x0702, 0xf9dd, 0x0000 },
+  { 0x8702, 0xf9e2, 0x3000 },
+  { 0x8702, 0xf9e0, 0x2000 },
+  { 0x0702, 0xf9df, 0x0000 },
+  { 0x0702, 0xf9e1, 0x0000 },
+  { 0x8702, 0xf9e4, 0x2000 },
+  { 0x0702, 0xf9e3, 0x0000 },
+  { 0x0702, 0xf9e5, 0x0000 },
+  { 0x8702, 0xf9ee, 0x4000 },
+  { 0x8702, 0xf9ea, 0x3000 },
+  { 0x8702, 0xf9e8, 0x2000 },
+  { 0x0702, 0xf9e7, 0x0000 },
+  { 0x0702, 0xf9e9, 0x0000 },
+  { 0x8702, 0xf9ec, 0x2000 },
+  { 0x0702, 0xf9eb, 0x0000 },
+  { 0x0702, 0xf9ed, 0x0000 },
+  { 0x8702, 0xf9f2, 0x3000 },
+  { 0x8702, 0xf9f0, 0x2000 },
+  { 0x0702, 0xf9ef, 0x0000 },
+  { 0x0702, 0xf9f1, 0x0000 },
+  { 0x8702, 0xf9f4, 0x2000 },
+  { 0x0702, 0xf9f3, 0x0000 },
+  { 0x0702, 0xf9f5, 0x0000 },
+  { 0x810e, 0x0037, 0x7000 },
+  { 0x8702, 0xfa16, 0x6000 },
+  { 0x8702, 0xfa06, 0x5000 },
+  { 0x8702, 0xf9fe, 0x4000 },
+  { 0x8702, 0xf9fa, 0x3000 },
+  { 0x8702, 0xf9f8, 0x2000 },
+  { 0x0702, 0xf9f7, 0x0000 },
+  { 0x0702, 0xf9f9, 0x0000 },
+  { 0x8702, 0xf9fc, 0x2000 },
+  { 0x0702, 0xf9fb, 0x0000 },
+  { 0x0702, 0xf9fd, 0x0000 },
+  { 0x8702, 0xfa02, 0x3000 },
+  { 0x8702, 0xfa00, 0x2000 },
+  { 0x0702, 0xf9ff, 0x0000 },
+  { 0x0702, 0xfa01, 0x0000 },
+  { 0x8702, 0xfa04, 0x2000 },
+  { 0x0702, 0xfa03, 0x0000 },
+  { 0x0702, 0xfa05, 0x0000 },
+  { 0x8702, 0xfa0e, 0x4000 },
+  { 0x8702, 0xfa0a, 0x3000 },
+  { 0x8702, 0xfa08, 0x2000 },
+  { 0x0702, 0xfa07, 0x0000 },
+  { 0x0702, 0xfa09, 0x0000 },
+  { 0x8702, 0xfa0c, 0x2000 },
+  { 0x0702, 0xfa0b, 0x0000 },
+  { 0x0702, 0xfa0d, 0x0000 },
+  { 0x8702, 0xfa12, 0x3000 },
+  { 0x8702, 0xfa10, 0x2000 },
+  { 0x0702, 0xfa0f, 0x0000 },
+  { 0x0702, 0xfa11, 0x0000 },
+  { 0x8702, 0xfa14, 0x2000 },
+  { 0x0702, 0xfa13, 0x0000 },
+  { 0x0702, 0xfa15, 0x0000 },
+  { 0x810e, 0x0027, 0x5000 },
+  { 0x810e, 0x0001, 0x4000 },
+  { 0x8702, 0xfa1a, 0x3000 },
+  { 0x8702, 0xfa18, 0x2000 },
+  { 0x0702, 0xfa17, 0x0000 },
+  { 0x0702, 0xfa19, 0x0000 },
+  { 0x8702, 0xfa1c, 0x2000 },
+  { 0x0702, 0xfa1b, 0x0000 },
+  { 0x0702, 0xfa1d, 0x0000 },
+  { 0x810e, 0x0023, 0x3000 },
+  { 0x810e, 0x0021, 0x2000 },
+  { 0x010e, 0x0020, 0x0000 },
+  { 0x010e, 0x0022, 0x0000 },
+  { 0x810e, 0x0025, 0x2000 },
+  { 0x010e, 0x0024, 0x0000 },
+  { 0x010e, 0x0026, 0x0000 },
+  { 0x810e, 0x002f, 0x4000 },
+  { 0x810e, 0x002b, 0x3000 },
+  { 0x810e, 0x0029, 0x2000 },
+  { 0x010e, 0x0028, 0x0000 },
+  { 0x010e, 0x002a, 0x0000 },
+  { 0x810e, 0x002d, 0x2000 },
+  { 0x010e, 0x002c, 0x0000 },
+  { 0x010e, 0x002e, 0x0000 },
+  { 0x810e, 0x0033, 0x3000 },
+  { 0x810e, 0x0031, 0x2000 },
+  { 0x010e, 0x0030, 0x0000 },
+  { 0x010e, 0x0032, 0x0000 },
+  { 0x810e, 0x0035, 0x2000 },
+  { 0x010e, 0x0034, 0x0000 },
+  { 0x010e, 0x0036, 0x0000 },
+  { 0x810e, 0x0057, 0x6000 },
+  { 0x810e, 0x0047, 0x5000 },
+  { 0x810e, 0x003f, 0x4000 },
+  { 0x810e, 0x003b, 0x3000 },
+  { 0x810e, 0x0039, 0x2000 },
+  { 0x010e, 0x0038, 0x0000 },
+  { 0x010e, 0x003a, 0x0000 },
+  { 0x810e, 0x003d, 0x2000 },
+  { 0x010e, 0x003c, 0x0000 },
+  { 0x010e, 0x003e, 0x0000 },
+  { 0x810e, 0x0043, 0x3000 },
+  { 0x810e, 0x0041, 0x2000 },
+  { 0x010e, 0x0040, 0x0000 },
+  { 0x010e, 0x0042, 0x0000 },
+  { 0x810e, 0x0045, 0x2000 },
+  { 0x010e, 0x0044, 0x0000 },
+  { 0x010e, 0x0046, 0x0000 },
+  { 0x810e, 0x004f, 0x4000 },
+  { 0x810e, 0x004b, 0x3000 },
+  { 0x810e, 0x0049, 0x2000 },
+  { 0x010e, 0x0048, 0x0000 },
+  { 0x010e, 0x004a, 0x0000 },
+  { 0x810e, 0x004d, 0x2000 },
+  { 0x010e, 0x004c, 0x0000 },
+  { 0x010e, 0x004e, 0x0000 },
+  { 0x810e, 0x0053, 0x3000 },
+  { 0x810e, 0x0051, 0x2000 },
+  { 0x010e, 0x0050, 0x0000 },
+  { 0x010e, 0x0052, 0x0000 },
+  { 0x810e, 0x0055, 0x2000 },
+  { 0x010e, 0x0054, 0x0000 },
+  { 0x010e, 0x0056, 0x0000 },
+  { 0x810e, 0x0067, 0x5000 },
+  { 0x810e, 0x005f, 0x4000 },
+  { 0x810e, 0x005b, 0x3000 },
+  { 0x810e, 0x0059, 0x2000 },
+  { 0x010e, 0x0058, 0x0000 },
+  { 0x010e, 0x005a, 0x0000 },
+  { 0x810e, 0x005d, 0x2000 },
+  { 0x010e, 0x005c, 0x0000 },
+  { 0x010e, 0x005e, 0x0000 },
+  { 0x810e, 0x0063, 0x3000 },
+  { 0x810e, 0x0061, 0x2000 },
+  { 0x010e, 0x0060, 0x0000 },
+  { 0x010e, 0x0062, 0x0000 },
+  { 0x810e, 0x0065, 0x2000 },
+  { 0x010e, 0x0064, 0x0000 },
+  { 0x010e, 0x0066, 0x0000 },
+  { 0x810e, 0x006f, 0x4000 },
+  { 0x810e, 0x006b, 0x3000 },
+  { 0x810e, 0x0069, 0x2000 },
+  { 0x010e, 0x0068, 0x0000 },
+  { 0x010e, 0x006a, 0x0000 },
+  { 0x810e, 0x006d, 0x2000 },
+  { 0x010e, 0x006c, 0x0000 },
+  { 0x010e, 0x006e, 0x0000 },
+  { 0x810e, 0x0073, 0x3000 },
+  { 0x810e, 0x0071, 0x2000 },
+  { 0x010e, 0x0070, 0x0000 },
+  { 0x010e, 0x0072, 0x0000 },
+  { 0x810e, 0x0075, 0x2000 },
+  { 0x010e, 0x0074, 0x0000 },
+  { 0x010e, 0x0076, 0x0000 },
+  { 0x8c0e, 0x0177, 0x8000 },
+  { 0x8c0e, 0x0137, 0x7000 },
+  { 0x8c0e, 0x0117, 0x6000 },
+  { 0x8c0e, 0x0107, 0x5000 },
+  { 0x810e, 0x007f, 0x4000 },
+  { 0x810e, 0x007b, 0x3000 },
+  { 0x810e, 0x0079, 0x2000 },
+  { 0x010e, 0x0078, 0x0000 },
+  { 0x010e, 0x007a, 0x0000 },
+  { 0x810e, 0x007d, 0x2000 },
+  { 0x010e, 0x007c, 0x0000 },
+  { 0x010e, 0x007e, 0x0000 },
+  { 0x8c0e, 0x0103, 0x3000 },
+  { 0x8c0e, 0x0101, 0x2000 },
+  { 0x0c0e, 0x0100, 0x0000 },
+  { 0x0c0e, 0x0102, 0x0000 },
+  { 0x8c0e, 0x0105, 0x2000 },
+  { 0x0c0e, 0x0104, 0x0000 },
+  { 0x0c0e, 0x0106, 0x0000 },
+  { 0x8c0e, 0x010f, 0x4000 },
+  { 0x8c0e, 0x010b, 0x3000 },
+  { 0x8c0e, 0x0109, 0x2000 },
+  { 0x0c0e, 0x0108, 0x0000 },
+  { 0x0c0e, 0x010a, 0x0000 },
+  { 0x8c0e, 0x010d, 0x2000 },
+  { 0x0c0e, 0x010c, 0x0000 },
+  { 0x0c0e, 0x010e, 0x0000 },
+  { 0x8c0e, 0x0113, 0x3000 },
+  { 0x8c0e, 0x0111, 0x2000 },
+  { 0x0c0e, 0x0110, 0x0000 },
+  { 0x0c0e, 0x0112, 0x0000 },
+  { 0x8c0e, 0x0115, 0x2000 },
+  { 0x0c0e, 0x0114, 0x0000 },
+  { 0x0c0e, 0x0116, 0x0000 },
+  { 0x8c0e, 0x0127, 0x5000 },
+  { 0x8c0e, 0x011f, 0x4000 },
+  { 0x8c0e, 0x011b, 0x3000 },
+  { 0x8c0e, 0x0119, 0x2000 },
+  { 0x0c0e, 0x0118, 0x0000 },
+  { 0x0c0e, 0x011a, 0x0000 },
+  { 0x8c0e, 0x011d, 0x2000 },
+  { 0x0c0e, 0x011c, 0x0000 },
+  { 0x0c0e, 0x011e, 0x0000 },
+  { 0x8c0e, 0x0123, 0x3000 },
+  { 0x8c0e, 0x0121, 0x2000 },
+  { 0x0c0e, 0x0120, 0x0000 },
+  { 0x0c0e, 0x0122, 0x0000 },
+  { 0x8c0e, 0x0125, 0x2000 },
+  { 0x0c0e, 0x0124, 0x0000 },
+  { 0x0c0e, 0x0126, 0x0000 },
+  { 0x8c0e, 0x012f, 0x4000 },
+  { 0x8c0e, 0x012b, 0x3000 },
+  { 0x8c0e, 0x0129, 0x2000 },
+  { 0x0c0e, 0x0128, 0x0000 },
+  { 0x0c0e, 0x012a, 0x0000 },
+  { 0x8c0e, 0x012d, 0x2000 },
+  { 0x0c0e, 0x012c, 0x0000 },
+  { 0x0c0e, 0x012e, 0x0000 },
+  { 0x8c0e, 0x0133, 0x3000 },
+  { 0x8c0e, 0x0131, 0x2000 },
+  { 0x0c0e, 0x0130, 0x0000 },
+  { 0x0c0e, 0x0132, 0x0000 },
+  { 0x8c0e, 0x0135, 0x2000 },
+  { 0x0c0e, 0x0134, 0x0000 },
+  { 0x0c0e, 0x0136, 0x0000 },
+  { 0x8c0e, 0x0157, 0x6000 },
+  { 0x8c0e, 0x0147, 0x5000 },
+  { 0x8c0e, 0x013f, 0x4000 },
+  { 0x8c0e, 0x013b, 0x3000 },
+  { 0x8c0e, 0x0139, 0x2000 },
+  { 0x0c0e, 0x0138, 0x0000 },
+  { 0x0c0e, 0x013a, 0x0000 },
+  { 0x8c0e, 0x013d, 0x2000 },
+  { 0x0c0e, 0x013c, 0x0000 },
+  { 0x0c0e, 0x013e, 0x0000 },
+  { 0x8c0e, 0x0143, 0x3000 },
+  { 0x8c0e, 0x0141, 0x2000 },
+  { 0x0c0e, 0x0140, 0x0000 },
+  { 0x0c0e, 0x0142, 0x0000 },
+  { 0x8c0e, 0x0145, 0x2000 },
+  { 0x0c0e, 0x0144, 0x0000 },
+  { 0x0c0e, 0x0146, 0x0000 },
+  { 0x8c0e, 0x014f, 0x4000 },
+  { 0x8c0e, 0x014b, 0x3000 },
+  { 0x8c0e, 0x0149, 0x2000 },
+  { 0x0c0e, 0x0148, 0x0000 },
+  { 0x0c0e, 0x014a, 0x0000 },
+  { 0x8c0e, 0x014d, 0x2000 },
+  { 0x0c0e, 0x014c, 0x0000 },
+  { 0x0c0e, 0x014e, 0x0000 },
+  { 0x8c0e, 0x0153, 0x3000 },
+  { 0x8c0e, 0x0151, 0x2000 },
+  { 0x0c0e, 0x0150, 0x0000 },
+  { 0x0c0e, 0x0152, 0x0000 },
+  { 0x8c0e, 0x0155, 0x2000 },
+  { 0x0c0e, 0x0154, 0x0000 },
+  { 0x0c0e, 0x0156, 0x0000 },
+  { 0x8c0e, 0x0167, 0x5000 },
+  { 0x8c0e, 0x015f, 0x4000 },
+  { 0x8c0e, 0x015b, 0x3000 },
+  { 0x8c0e, 0x0159, 0x2000 },
+  { 0x0c0e, 0x0158, 0x0000 },
+  { 0x0c0e, 0x015a, 0x0000 },
+  { 0x8c0e, 0x015d, 0x2000 },
+  { 0x0c0e, 0x015c, 0x0000 },
+  { 0x0c0e, 0x015e, 0x0000 },
+  { 0x8c0e, 0x0163, 0x3000 },
+  { 0x8c0e, 0x0161, 0x2000 },
+  { 0x0c0e, 0x0160, 0x0000 },
+  { 0x0c0e, 0x0162, 0x0000 },
+  { 0x8c0e, 0x0165, 0x2000 },
+  { 0x0c0e, 0x0164, 0x0000 },
+  { 0x0c0e, 0x0166, 0x0000 },
+  { 0x8c0e, 0x016f, 0x4000 },
+  { 0x8c0e, 0x016b, 0x3000 },
+  { 0x8c0e, 0x0169, 0x2000 },
+  { 0x0c0e, 0x0168, 0x0000 },
+  { 0x0c0e, 0x016a, 0x0000 },
+  { 0x8c0e, 0x016d, 0x2000 },
+  { 0x0c0e, 0x016c, 0x0000 },
+  { 0x0c0e, 0x016e, 0x0000 },
+  { 0x8c0e, 0x0173, 0x3000 },
+  { 0x8c0e, 0x0171, 0x2000 },
+  { 0x0c0e, 0x0170, 0x0000 },
+  { 0x0c0e, 0x0172, 0x0000 },
+  { 0x8c0e, 0x0175, 0x2000 },
+  { 0x0c0e, 0x0174, 0x0000 },
+  { 0x0c0e, 0x0176, 0x0000 },
+  { 0x8c0e, 0x01b7, 0x7000 },
+  { 0x8c0e, 0x0197, 0x6000 },
+  { 0x8c0e, 0x0187, 0x5000 },
+  { 0x8c0e, 0x017f, 0x4000 },
+  { 0x8c0e, 0x017b, 0x3000 },
+  { 0x8c0e, 0x0179, 0x2000 },
+  { 0x0c0e, 0x0178, 0x0000 },
+  { 0x0c0e, 0x017a, 0x0000 },
+  { 0x8c0e, 0x017d, 0x2000 },
+  { 0x0c0e, 0x017c, 0x0000 },
+  { 0x0c0e, 0x017e, 0x0000 },
+  { 0x8c0e, 0x0183, 0x3000 },
+  { 0x8c0e, 0x0181, 0x2000 },
+  { 0x0c0e, 0x0180, 0x0000 },
+  { 0x0c0e, 0x0182, 0x0000 },
+  { 0x8c0e, 0x0185, 0x2000 },
+  { 0x0c0e, 0x0184, 0x0000 },
+  { 0x0c0e, 0x0186, 0x0000 },
+  { 0x8c0e, 0x018f, 0x4000 },
+  { 0x8c0e, 0x018b, 0x3000 },
+  { 0x8c0e, 0x0189, 0x2000 },
+  { 0x0c0e, 0x0188, 0x0000 },
+  { 0x0c0e, 0x018a, 0x0000 },
+  { 0x8c0e, 0x018d, 0x2000 },
+  { 0x0c0e, 0x018c, 0x0000 },
+  { 0x0c0e, 0x018e, 0x0000 },
+  { 0x8c0e, 0x0193, 0x3000 },
+  { 0x8c0e, 0x0191, 0x2000 },
+  { 0x0c0e, 0x0190, 0x0000 },
+  { 0x0c0e, 0x0192, 0x0000 },
+  { 0x8c0e, 0x0195, 0x2000 },
+  { 0x0c0e, 0x0194, 0x0000 },
+  { 0x0c0e, 0x0196, 0x0000 },
+  { 0x8c0e, 0x01a7, 0x5000 },
+  { 0x8c0e, 0x019f, 0x4000 },
+  { 0x8c0e, 0x019b, 0x3000 },
+  { 0x8c0e, 0x0199, 0x2000 },
+  { 0x0c0e, 0x0198, 0x0000 },
+  { 0x0c0e, 0x019a, 0x0000 },
+  { 0x8c0e, 0x019d, 0x2000 },
+  { 0x0c0e, 0x019c, 0x0000 },
+  { 0x0c0e, 0x019e, 0x0000 },
+  { 0x8c0e, 0x01a3, 0x3000 },
+  { 0x8c0e, 0x01a1, 0x2000 },
+  { 0x0c0e, 0x01a0, 0x0000 },
+  { 0x0c0e, 0x01a2, 0x0000 },
+  { 0x8c0e, 0x01a5, 0x2000 },
+  { 0x0c0e, 0x01a4, 0x0000 },
+  { 0x0c0e, 0x01a6, 0x0000 },
+  { 0x8c0e, 0x01af, 0x4000 },
+  { 0x8c0e, 0x01ab, 0x3000 },
+  { 0x8c0e, 0x01a9, 0x2000 },
+  { 0x0c0e, 0x01a8, 0x0000 },
+  { 0x0c0e, 0x01aa, 0x0000 },
+  { 0x8c0e, 0x01ad, 0x2000 },
+  { 0x0c0e, 0x01ac, 0x0000 },
+  { 0x0c0e, 0x01ae, 0x0000 },
+  { 0x8c0e, 0x01b3, 0x3000 },
+  { 0x8c0e, 0x01b1, 0x2000 },
+  { 0x0c0e, 0x01b0, 0x0000 },
+  { 0x0c0e, 0x01b2, 0x0000 },
+  { 0x8c0e, 0x01b5, 0x2000 },
+  { 0x0c0e, 0x01b4, 0x0000 },
+  { 0x0c0e, 0x01b6, 0x0000 },
+  { 0x8c0e, 0x01d7, 0x6000 },
+  { 0x8c0e, 0x01c7, 0x5000 },
+  { 0x8c0e, 0x01bf, 0x4000 },
+  { 0x8c0e, 0x01bb, 0x3000 },
+  { 0x8c0e, 0x01b9, 0x2000 },
+  { 0x0c0e, 0x01b8, 0x0000 },
+  { 0x0c0e, 0x01ba, 0x0000 },
+  { 0x8c0e, 0x01bd, 0x2000 },
+  { 0x0c0e, 0x01bc, 0x0000 },
+  { 0x0c0e, 0x01be, 0x0000 },
+  { 0x8c0e, 0x01c3, 0x3000 },
+  { 0x8c0e, 0x01c1, 0x2000 },
+  { 0x0c0e, 0x01c0, 0x0000 },
+  { 0x0c0e, 0x01c2, 0x0000 },
+  { 0x8c0e, 0x01c5, 0x2000 },
+  { 0x0c0e, 0x01c4, 0x0000 },
+  { 0x0c0e, 0x01c6, 0x0000 },
+  { 0x8c0e, 0x01cf, 0x4000 },
+  { 0x8c0e, 0x01cb, 0x3000 },
+  { 0x8c0e, 0x01c9, 0x2000 },
+  { 0x0c0e, 0x01c8, 0x0000 },
+  { 0x0c0e, 0x01ca, 0x0000 },
+  { 0x8c0e, 0x01cd, 0x2000 },
+  { 0x0c0e, 0x01cc, 0x0000 },
+  { 0x0c0e, 0x01ce, 0x0000 },
+  { 0x8c0e, 0x01d3, 0x3000 },
+  { 0x8c0e, 0x01d1, 0x2000 },
+  { 0x0c0e, 0x01d0, 0x0000 },
+  { 0x0c0e, 0x01d2, 0x0000 },
+  { 0x8c0e, 0x01d5, 0x2000 },
+  { 0x0c0e, 0x01d4, 0x0000 },
+  { 0x0c0e, 0x01d6, 0x0000 },
+  { 0x8c0e, 0x01e7, 0x5000 },
+  { 0x8c0e, 0x01df, 0x4000 },
+  { 0x8c0e, 0x01db, 0x3000 },
+  { 0x8c0e, 0x01d9, 0x2000 },
+  { 0x0c0e, 0x01d8, 0x0000 },
+  { 0x0c0e, 0x01da, 0x0000 },
+  { 0x8c0e, 0x01dd, 0x2000 },
+  { 0x0c0e, 0x01dc, 0x0000 },
+  { 0x0c0e, 0x01de, 0x0000 },
+  { 0x8c0e, 0x01e3, 0x3000 },
+  { 0x8c0e, 0x01e1, 0x2000 },
+  { 0x0c0e, 0x01e0, 0x0000 },
+  { 0x0c0e, 0x01e2, 0x0000 },
+  { 0x8c0e, 0x01e5, 0x2000 },
+  { 0x0c0e, 0x01e4, 0x0000 },
+  { 0x0c0e, 0x01e6, 0x0000 },
+  { 0x8c0e, 0x01ef, 0x4000 },
+  { 0x8c0e, 0x01eb, 0x3000 },
+  { 0x8c0e, 0x01e9, 0x2000 },
+  { 0x0c0e, 0x01e8, 0x0000 },
+  { 0x0c0e, 0x01ea, 0x0000 },
+  { 0x8c0e, 0x01ed, 0x2000 },
+  { 0x0c0e, 0x01ec, 0x0000 },
+  { 0x0c0e, 0x01ee, 0x0000 },
+  { 0x830f, 0xfffd, 0x2000 },
+  { 0x030f, 0x0000, 0x0000 },
+  { 0x0310, 0x0000, 0x1000 },
+  { 0x0310, 0xfffd, 0x0000 },
+};
diff --git a/ext/pcre/pcrelib/ucptypetable.c b/ext/pcre/pcrelib/ucptypetable.c
new file mode 100644 (file)
index 0000000..129529b
--- /dev/null
@@ -0,0 +1,93 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/*
+This is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language. See
+the file Tech.Notes for some information on the internals.
+
+Written by: Philip Hazel <ph10@cam.ac.uk>
+
+           Copyright (c) 1997-2004 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+/* This module contains a table for translating Unicode property names into
+code values for the ucp_findchar function. It is in a separate module so that
+it can be included both in the main pcre library, and into pcretest (for
+printing out internals). */
+
+typedef struct {
+  const char *name;
+  int value;
+} ucp_type_table;
+
+static ucp_type_table utt[] = {
+  { "C",  128 + ucp_C },
+  { "Cc", ucp_Cc },
+  { "Cf", ucp_Cf },
+  { "Cn", ucp_Cn },
+  { "Co", ucp_Co },
+  { "Cs", ucp_Cs },
+  { "L",  128 + ucp_L },
+  { "Ll", ucp_Ll },
+  { "Lm", ucp_Lm },
+  { "Lo", ucp_Lo },
+  { "Lt", ucp_Lt },
+  { "Lu", ucp_Lu },
+  { "M",  128 + ucp_M },
+  { "Mc", ucp_Mc },
+  { "Me", ucp_Me },
+  { "Mn", ucp_Mn },
+  { "N",  128 + ucp_N },
+  { "Nd", ucp_Nd },
+  { "Nl", ucp_Nl },
+  { "No", ucp_No },
+  { "P",  128 + ucp_P },
+  { "Pc", ucp_Pc },
+  { "Pd", ucp_Pd },
+  { "Pe", ucp_Pe },
+  { "Pf", ucp_Pf },
+  { "Pi", ucp_Pi },
+  { "Po", ucp_Po },
+  { "Ps", ucp_Ps },
+  { "S",  128 + ucp_S },
+  { "Sc", ucp_Sc },
+  { "Sk", ucp_Sk },
+  { "Sm", ucp_Sm },
+  { "So", ucp_So },
+  { "Z",  128 + ucp_Z },
+  { "Zl", ucp_Zl },
+  { "Zp", ucp_Zp },
+  { "Zs", ucp_Zs }
+};
+
+/* End of ucptypetable.c */