diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2013-03-14 05:42:27 +0000 |
---|---|---|
committer | <> | 2013-04-03 16:25:08 +0000 |
commit | c4dd7a1a684490673e25aaf4fabec5df138854c4 (patch) | |
tree | 4d57c44caae4480efff02b90b9be86f44bf25409 /ext/mbstring | |
download | php2-master.tar.gz |
Imported from /home/lorry/working-area/delta_php2/php-5.4.13.tar.bz2.HEADphp-5.4.13master
Diffstat (limited to 'ext/mbstring')
640 files changed, 156413 insertions, 0 deletions
diff --git a/ext/mbstring/CREDITS b/ext/mbstring/CREDITS new file mode 100644 index 0000000..d03463b --- /dev/null +++ b/ext/mbstring/CREDITS @@ -0,0 +1,2 @@ +Multibyte String Functions +Tsukada Takuya, Rui Hirokawa diff --git a/ext/mbstring/README b/ext/mbstring/README new file mode 100644 index 0000000..338aa79 --- /dev/null +++ b/ext/mbstring/README @@ -0,0 +1,17 @@ +!!Caution: DO NOT ADD/CHANGE MBSTRING CODE!! + +New mbstring is under development, anyone who would like +add new feature/change behavior should access to development +source. + +http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/php-i18n/ + +All changes made after 2002/5/19 are subject to be +removed. + +You are warned in php-dev and php-cvs lists many times +already. If you are curious, search archive for details. + +Thank you. + + diff --git a/ext/mbstring/README.libmbfl b/ext/mbstring/README.libmbfl new file mode 100644 index 0000000..4f1174e --- /dev/null +++ b/ext/mbstring/README.libmbfl @@ -0,0 +1,16 @@ + +libmbfl is a streamable multibyte character code filter and +converter library. +libmbfl is distributed under LGPL 2.1 and bundled with PHP. + +The original version of libmbfl is developed and distributed +at http://sourceforge.jp/project/php-i18n/ . + +If you need to modify the bundled libmbfl, the change also have to be applied for +the libmbfl on sourceforge.jp. + +If you have question about libmbfl, please ask to + hirokawa@php.net, moriyoshi@php.net. + +See libmbfl/DISCLAIMER for licensing information of libmbfl. + diff --git a/ext/mbstring/README_PHP3-i18n-ja b/ext/mbstring/README_PHP3-i18n-ja new file mode 100644 index 0000000..cac00b8 --- /dev/null +++ b/ext/mbstring/README_PHP3-i18n-ja @@ -0,0 +1,774 @@ +========================================== + README for I18N Package +========================================== + +o Name and location of package + +Name: php-3.0.18-i18n-ja-2 +Location: http://www.happysize.co.jp/techie/php-ja-jp/ + ftp://ftp.happysize.co.jp/php-ja-jp/ + http://php.vdomains.org/ + ftp://ftp.vdomains.org/pub/php-ja-jp/ + http://php.jpnnet.com/ + +Currently, this I18N version of PHP only adds Japanese support to base +PHP. It allows you to use Japanese in scripts, as well as conversion +between various Japanese encodings. It will work perfectly fine with +ASCII with i18n option enabled. (note: executable is bit larger due +to UNICODE table). The basic design aproach is to allow for other +languages to be added in the future. Developers are encourage to join +us! + +For more information on Japanese encodings, please refer to the +section "Additional Notes." + + +o What is this package? + +This package allows you to handle multiple Japanese encodings (SJIS, EUC, +UTF-8, JIS) in PHP. If you find any bugs in this package, please report +them to the appropriate mailing list. For now, the PHP-jp mailing list +is the best place for this. + +PHP-jp ML mailto:PHP-jp@sidecar.ics.es.osaka-u.ac.jp + http://sidecar.ics.es.osaka-u.ac.jp/php-jp/ + (discussions are in Japanese) + + +o Who should use this + +Due to lack of documentation, it's not intended for beginners. If +something goes wrong, be prepared to fix it on your own. + + +o Warranty and Copyright + +There is no warranty with this package. Use it at your own risk. + +Please refer to the source code for the copyrights. In general, each +program's copyright is owned by the programmer. Unless you obey the +copyright holders restrictions, you are not allowed to use it in any +form. + + +o Redistribution + +As described in the source code, this package and the components are +allowed to be redistributed with certain restrictions. + +Due to this package being still in beta, please try to redistribute +it as an entire package. Please try not to distribute it as a form +of patch. Because we would prefer to have this package distributed +as one single package (not patch of patch of patch), avoid releasing +any patch to this package. + + +o Who made this + +A team of volunteers, PHP3 Internationalization, has been contributing +their free time producing it. Although we are not related to the core +PHP programmers, we are hoping to have our modifications merged into the +core distribution in the near future. Thus, we did not call this a +"Japanese Patch" (or distribution). Our final goal is to have true +i18nized PHP! + +For anyone interested in this project, please drop us a line. + +Contact Address: + phpj-dev@kage.net + (Discussions are in Japanese, but feel free to write us in English) + +Webpage (English and Japanese): + http://php.jpnnet.com/ + +Project Outline (Japanese): + http://www.happysize.co.jp/techie/php-ja-jp/spec.htm + +Developers: + Hironori Sato <satoh@jpnnet.com> + Shigeru Kanemoto <sgk@happysize.co.jp> + Tsukada Takuya <tsukada@fminn.nagano.nagano.jp> + U. Kenkichi <kenkichi@axes.co.jp> + Tateyama <tateyan@amy.hi-ho.ne.jp> + Other gracious contributors + + +o Future plans + +- fulfilling what's written in outline +- support for other languages other than Japanese +- make the character conversion as a library (?) +- more testing + + +o Special Thanks to + +PHP Japanese webpage maintainer, Hirokawa-san + http://www.cityfujisawa.ne.jp/%7Elouis/apps/phpfi/ +PHP-JP ML's Yamamoto-san + http://sidecar.ics.es.osaka-u.ac.jp/php-jp/ +Previous jp-patch developers + + + +========================================== + Advantages of using I18N package +========================================== + +- allows you to use various character encodings for script files and + http output +- distinguish character encoding in POST/GET/COOKIE +- proper mail output using JIS as body and MIME/Base64/JIS subject +- if http output's Content-Type is text/html, it will set proper charset +- stable character encoding conversion +- multibyte regex + + + +========================================== + Installation +========================================== + +o Summary + +Add --enable-i18n option when running configure. For your own setup, +add any other appropriate options as well. + +Don't forget to copy php3.ini-dist to desired location. +(ex. /usr/local/lib/php3.ini) + +If you have already installed PHP3, copy all the entries in php3.ini-dist +which start with "i18n.xxxx" to php3.ini. + + +o configure option + --enable-i18n + include i18n features + + --enable-mbregex + include multibyte regex library + (without i18n enabled, mbregex functions will not function) + + +o creating cgi version + + % tar xvzf php-3.0.18-i18n-ja-2.tar.gz + % cd php-3.0.18-i18n-ja-2 + % ./configure --enable-i18n --enable-mbregex + % make + + +o creating Apache version (regular module) + + % tar xvzf php-3.0.18-i18n-ja-2.tar.gz + % tar xvzf apache_1.3.x.tar.gz + % cd apache_1.3.x + % ./configure + % cd ../php-3.0.18-i18n-ja-2 + % ./configure --with-apache=../apache_1.3.x --enable-i18n --enable-mbregex + % make + % make install + % cd ../apache_1.3.x + % ./configure --activate-module=src/modules/php3/libphp3.a + % make + % make install + + +o creating Apache DSO version + + create DSO capable Apache first + % tar xvzf apache_1.3.x.tar.gz + % cd apache-1.3.x + % ./configure --enable-shared=max + % make + % make install + + now create php3 + % cd php-3.0.18-i18n-ja-2 + % ./configure --with-apxs=/usr/local/apache/bin/apxs --enable-i18n \ + --enable-mbregex + % make + % make install + + +========================================== + Additional Notes +========================================== + +o Multibyte regex library + +From beta4, we have included the multibyte (mb) regex library which comes with +Ruby. With this addition, you can now use regex in EUC, SJIS and UTF-8 +encoding. To avoid any conflicts with HSREGEX included with Apache, +each function name has been changed. Therefore, mb regex functions are +named differently from the original ereg functions in PHP. The character +encoding used in mb regex is configured in i18n.internal_encoding. + + +o Binary Output + +If http output encoding is set to other than 'pass', conversion of encoding +from internal encoding to http output is done automatically. Thus, +if you prefer to spit out anything in raw binary format, your data +may be corrupted. In such event, set http_output to 'pass'. + +ex. + <? + i18n_http_output("pass"); + ... + echo $the_binary_data_string; + ?> + + +o Content-Type + +Depending on the setting of http_output, PHP will output the proper charset. +ex. Content-Type: text/html; charset="..." + +Be aware of following: + +- If you set Content-Type header using header() function, that will + override the automatic addition of charset. +- Be cautious when you set i18n_http_output, since if any output is + made prior to this, proper header may have been sent out to the + client already. + + +o In the event of trouble + +If you find any bugs or trouble, please contact us at the above address. +It may help us to track the problem if you send us the script as well. + +If you encounter any memory related error such as segmentation violation, +add --enable-debug when you run configure. This will give you more +detail information on where error has occurred. The error is stored +in the server log or regular http output in CGI mode. + + +o About Japanese encodings + +Due to historical reason, there are multiple character encodings used +for Japanese. The most common encodings are: SJIS, EUC, JIS, and UTF-8. +Here are (very) brief description of them: + +EUC + commonly used in UNIX environment + 8bit-8bit combo + always >=0x80 + +SJIS + commonly used in Mac or PCs + similar to EUC + mostly 8bit-8bit (some 8bit-7bit) + mostly >=0x80 + there are some halfwidth (size of ASCII) multibytes + +JIS + commonly used in 7bit environment (nntp and smtp) + starts with escaping char, \033 and a few more characters + +UTF-8 + 16bit+ encoding + defines many languages existing in this world + see http://www.unicode.org/ for more detail + +Because of having all these character encodings, PHP needs to translate +between these encodings on the fly. Also, the addition of the mb regex +library allows you to handle mb strings without fear of getting mb char +chopped in half. + +Since Japanese is not the only language with multiple encodings, we +encourage other developers to modify our code to suit your needs. We +definitely need people to work with Korean, Chinese (both traditional +and simplified), and Russian. Let us know if you are interested in +this project! + + + +========================================== + php3.ini setting +========================================== + +The following init options will allow you to change the default settings. +Define these settings in the global section of php3.ini. + +All keywords are case-insensitive. + +o Encoding naming + + For each encoding, there are three names: standarized, alias, MIME + + - UTF-8 + standard: UTF-8 + alias: N/A + mime: UTF-8 + + - ASCII + standard: ASCII + alias: N/A + mime: US-ASCII + + - Japanese EUC + standard: EUC-JP + alias: EUC, EUC_JP, eucJP, x-euc-jp + mime: EUC-JP + + - Shift JIS + standard: SJIS + alias: x-sjis, MS_Kanji + mime: Shift_JIS + + - JIS + standard: JIS + alias: N/A + mime: ISO-2022-JP + + - Quoted-Printable + standard: Quoted-Printable + alias: qprint + mime: N/A + + - BASE64 + standard: BASE64 + alias: N/A + mime: N/A + + - no conversion + standard: pass + alias: none + mime: N/A + + - auto encoding detection + standard: auto + alias: unknown + mime: N/A + + * N/A - Not Applicapable + +o i18n.http_output - default http output encoding + + i18n.http_output = EUC-JP|SJIS|JIS|UTF-8|pass + EUC-JP : EUC + SJIS: SJIS + JIS : JIS + UTF-8: UTF-8 + pass: no conversion + + The default is pass (internal encoding is used) + It can be re-configured on the fly using i18n_http_output(). + + +o i18n.internal_encoding - internal encoding + + i18n.internal_encoding = EUC-JP|SJIS|UTF-8 + EUC-JP : EUC + SJIS: SJIS + UTF-8: UTF-8 + + The default is EUC-JP. + + PHP parser is designed based on using ISO-8859-1. For other + encodings, following conditions have to be satisfied in order + to use them: + - per byte encoding + - single byte charactor in range of 00h-7fh which is compatible + with ASCII + - multibyte without 00h-7fh + In case of Japanese, EUC-JP and UTF-8 are the only encoding that + meets this criteria. + + If i18n.internal_encoding and i18n.http_output differs, conversion + takes place at the time of output. If you convert any data within + PHP scripts to URL encoding, BASE64 or Quoted-Printable, encoding + stays as defined in i18n.internal_encoding. Thus, if you would + prefer to encode in compliance with i18n.http_output, you need + to manually convert encoding. + + ex. $str = urlencode( i18n_convert($str, i18n_http_output()) ); + + Encoding such as ISO-2022-** and HZ encoding which uses escape + sequences can not be used as internal encoding. If used, they + result in following errors: + - parser pukes funky error + - magic_quotes_*** breaks encoding (SJIS may have similar problem) + - string manipulation and regex will malfunction + + +o i18n.script_encoding - script encoding + + i18n.script_encoding = auto|EUC-JP|SJIS|JIS|UTF-8 + auto: automatic + EUC-JP : EUC + SJIS: SJIS + JIS : JIS + UTF-8: UTF-8 + + The default is auto. + The script's encoding is converted to i18n.internal_encoding before + entering the script parser. + + Be aware that auto detection may fail under some conditions. + For best auto detection, add multibyte charactor at begining of + script. + + +o i18n.http_input - handling of http input (GET/POST/COOKIE) + + i18n.http_input = pass|auto + auto: auto conversion + pass: no conversion + + The default is auto. + If set to pass, no conversion will take place. + If set to auto, it will automatically detect the encoding. If + detection is successful, it will convert to the proper internal + encoding. If not, it will assume the input as defined in + i18n.http_input_default. + +o i18n.http_input_default - default http input encoding + + i18n.http_input_default = pass|EUC-JP|SJIS|JIS|UTF-8 + pass: no conversion + EUC-JP : EUC + SJIS: SJIS + JIS : JIS + UTF-8: UTF-8 + + The default is pass. + This option is only effective as long as i18n.http_input is set to + auto. If the auto detection fails, this encoding is used as an + assumption to convert the http input to the internal encoding. + If set to pass, no conversion will take place. + +o sample settings + + 1) For most flexibility, we recommend using following example. + i18n.http_output = SJIS + i18n.internal_encoding = EUC-JP + i18n.script_encoding = auto + i18n.http_input = auto + i18n.http_input_default = SJIS + + 2) To avoid unexpected encoding problems, try these: + + i18n.http_output = pass + i18n.internal_encoding = EUC-JP + i18n.script_encoding = pass + i18n.http_input = pass + i18n.http_input_default = pass + + + +========================================== + PHP functions +========================================== + +The following describes the additional PHP functions. + +All keywords are case-insensitive. + +o i18n_http_output(encoding) +o encoding = i18n_http_output() + + This will set the http output encoding. Any output following this + function will be controlled by this function. If no argument is given, + the current http output encode setting is returned. + + encodings + EUC-JP : EUC + SJIS: SJIS + JIS : JIS + UTF-8: UTF-8 + pass: no conversion + + NONE is not allowed + + +o encoding = i18n_internal_encoding() + + Returns the current internal encoding as a string. + + internal encoding + EUC-JP : EUC + SJIS: SJIS + UTF-8: UTF-8 + + +o encoding = i18n_http_input() + + Returns http input encoding. + + encodings + EUC-JP : EUC + SJIS: SJIS + JIS : JIS + UTF-8: UTF-8 + pass: no conversion (only if i18n.http_input is set to pass) + + +o string = i18n_convert(string, encoding) + string = i18n_convert(string, encoding, pre-conversion-encoding) + + Returns converted string in desired encoding. If + pre-conversion-encoding is not defined, the given + string is assumed to be in internal encoding. + + encoding + EUC-JP : EUC + SJIS: SJIS + JIS : JIS + UTF-8: UTF-8 + pass: no conversion + + pre-conversion-encoding + EUC-JP : EUC + SJIS: SJIS + JIS : JIS + UTF-8: UTF-8 + pass: no conversion + auto: auto detection + + +o encoding = i18n_discover_encoding(string) + + Encoding of the given string is returned (as a string). + + encoding + EUC-JP : EUC + SJIS: SJIS + JIS : JIS + UTF-8: UTF-8 + ASCII: ASCII (only 09h, 0Ah, 0Dh, 20h-7Eh) + pass: unable to determine (text is too short to determine) + unknown: unknown or possible error + + +o int = mbstrlen(string) +o int = mbstrlen(string, encoding) + + Returns character length of a given string. If no encoding is defined, + the encoding of string is assumed to be the internal encoding. + + encoding + EUC-JP : EUC + SJIS: SJIS + JIS : JIS + UTF-8: UTF-8 + auto: automatic + + +o int = mbstrpos(string1, string2) +o int = mbstrpos(string1, string2, start) +o int = mbstrpos(string1, string2, start, encoding) + + Same as strpos. If no encoding is defined, the encoding of string + is assumed to be the internal encoding. + + encoding + EUC-JP : EUC + SJIS: SJIS + JIS : JIS + UTF-8: UTF-8 + + +o int = mbstrrpos(string1, string2) +o int = mbstrrpos(string1, string2, encoding) + + Same as strrpos. If no encoding is defined, the encoding of string + is assumed to be the internal encoding. + + encoding + EUC-JP : EUC + SJIS: SJIS + JIS : JIS + UTF-8: UTF-8 + + +o string = mbsubstr(string, position) +o string = mbsubstr(string, position, length) +o string = mbsubstr(string, position, length, encoding) + + Same as substr. If no encoding is defined, the encoding of string + is assumed to be the internal encoding. + + encoding + EUC-JP : EUC + SJIS: SJIS + JIS : JIS + UTF-8: UTF-8 + + +o string = mbstrcut(string, position) +o string = mbstrcut(string, position, length) +o string = mbstrcut(string, position, length, encoding) + + Same as subcut. If position is the 2nd byte of a mb character, it will cut + from the first byte of that character. It will cut the string without + chopping a single byte from a mb character. In another words, if you + set length to 5, you will only get two mb characters. If no encoding + is defined, the encoding of string is assumed to be the internal encoding. + + encoding + EUC-JP : EUC + SJIS: SJIS + JIS : JIS + UTF-8: UTF-8 + + +o string = i18n_mime_header_encode(string) + MIME encode the string in the format of =?ISO-2022-JP?B?[string]?=. + + +o string = i18n_mime_header_decode(string) + MIME decodes the string. + + +o string = i18n_ja_jp_hantozen(string) +o string = i18n_ja_jp_hantozen(string, option) +o string = i18n_ja_jp_hantozen(string, option, encoding) + + Conversion between full width character and halfwidth character. + + option + The following options are allowed. The default is "KV". + Acronym: FW = fullwidth, HW = halfwidth + + "r" : FW alphabet -> HW alphabet + + "R" : HW alphabet -> FW alphabet + + "n" : FW number -> HW number + + "N" : HW number -> FW number + + "a" : FW alpha numeric (21h-7Eh) -> HW alpha numeric + + "A" : HW alpha numeric (21h-7Eh) -> FW alpha numeric + + "k" : FW katakana -> HW katakana + + "K" : HW katakana -> FW katakana + + "h" : FW hiragana -> HW hiragana + + "H" : HW hiragana -> FW katakana + + "c" : FW katakana -> FW hiragana + + "C" : FW hiragana -> FW katakana + + "V" : merge dakuon character. only works with "K" and "H" option + + encoding + If no encoding is defined, the encoding of string is assumed to be + the internal encoding. + EUC-JP : EUC + SJIS: SJIS + JIS : JIS + UTF-8: UTF-8 + + +int = mbereg(regex_pattern, string, string) +int = mberegi(regex_pattern, string, string) + mb version of ereg() and eregi() + + +string = mbereg_replace(regex_pattern, string, string) +string = mberegi_replace(regex_pattern, string, string) + mb version of ereg_replace() and eregi_replace() + + +string_array = mbsplit(regex, string, limit) + mb version of split() + + + +========================================== + FAQ +========================================== + +Here, we have gathered some commonly asked questions on PHP-jp mailing +list. + +o To use Japanese in GET method + +If you need to assign Japanese text in GET method with argument, such as; +xxxx.php?data=<Japanese text>, use urlencode function in PHP. If not, +text may not be passed onto action php properly. + +ex: <a href="hoge.php?data=<? echo urlencode($data) ?>">Link</a> + + +o When passing data via GET/POST/COOKIE, \ character sneaks in + +When using SJIS as internal encoding, or passed-on data includes '"\, +PHP automatically inserts escaping character, \. Set magic_quotes_gpc +in php3.ini from On to Off. An alternative work around to this problem +is to use StripSlashes(). + +If $quote_str is in SJIS and you would like to extract Japanese text, +use ereg_replace as follows: + +ereg_replace(sprintf("([%c-%c%c-%c]\\\\)\\\\",0x81,0x9f,0xe0,0xfc), + "\\1",$quote_str); + +This will effectively extract Japanese text out of $quote_str. + + +o Sometimes, encoding detection fails + +If i18n_http_input() returns 'pass', it's likely that PHP failed to +detect whether it's SJIS or EUC. In such case, use <input type=hidden +value="some Japanese text"> to properly detect the incoming text's +encoding. + + + +========================================== + Japanese Manual +========================================== +Translated manual done by "PHP Japanese Manual Project" : + +http://www.php.net/manual/ja/manual.php + +Starting 3.0.18-i18n-ja, we have removed doc-jp from tarball package. + + +========================================== + Change Logs +========================================== + +o 2000-10-28, Rui Hirokawa <hirokawa@php.net> + +This patch is derived from php-3.0.15-i18n-ja as well as php-3.0.16 by +Kuwamura applied to original php-3.0.18. It also includes following fixes: + +1) allows you to set charset in mail(). +2) fixed mbregex definitions to avoid conflicts with system regex +3) php3.ini-dist now uses PASS for http_output instead of SJIS + +o 2000-11-24, Hironori Sato <satoh@yyplanet.com> + +Applied above patched and added detection for gdImageStringTTF in configure. +Following setups are known to work: + +gd-1.3-6, gd-devel-1.3-6, freetype-1.3.1-5, freetype-devel-1.3.1-5 + ImageTTFText($im,$size,$angle,$x1,$y1,$color,"/path/to/font.ttf", + i18n_convert("ÆüËܸì", "UTF-8")); + ImageGif($im); + +gd-1.7.3-1k1, gd-devel-1.7.3-1k1, freetype-1.3.1-5, freetype-devel-1.3.1-5 + ImageTTFText($im,$size,$angle,$x1,$y1,$color,"/path/to/font.ttf","ÆüËܸì"); + ImagePng($im); + * i18n_internal_encoding = EUC Ëô¤Ï SJIS + +For any gd libraries before 1.6.2, you need to use i18n_convert. For +gd-1.5.2/3, upgrade to anything above 1.7 to use ImageTTFText without +using i18n_convert. As long as you have internal_encoding set to EUC or +SJIS, ImageTTFText should work without mojibake. Again, make sure you +have i18n_http_output("pass") before calling ImageGif, ImagePng, ImageJpeg! + +o 2000-12-09, Rui Hirokawa <hirokawa@php.net> + +Fixed mail() which was causing segmentation fault when header was null. + diff --git a/ext/mbstring/config.m4 b/ext/mbstring/config.m4 new file mode 100644 index 0000000..5d70d45 --- /dev/null +++ b/ext/mbstring/config.m4 @@ -0,0 +1,375 @@ +dnl +dnl $Id$ +dnl + +AC_DEFUN([PHP_MBSTRING_ADD_SOURCES], [ + PHP_MBSTRING_SOURCES="$PHP_MBSTRING_SOURCES $1" +]) + +AC_DEFUN([PHP_MBSTRING_ADD_BASE_SOURCES], [ + PHP_MBSTRING_BASE_SOURCES="$PHP_MBSTRING_BASE_SOURCES $1" +]) + +AC_DEFUN([PHP_MBSTRING_ADD_BUILD_DIR], [ + PHP_MBSTRING_EXTRA_BUILD_DIRS="$PHP_MBSTRING_EXTRA_BUILD_DIRS $1" +]) + +AC_DEFUN([PHP_MBSTRING_ADD_INCLUDE], [ + PHP_MBSTRING_EXTRA_INCLUDES="$PHP_MBSTRING_EXTRA_INCLUDES $1" +]) + +AC_DEFUN([PHP_MBSTRING_ADD_CONFIG_HEADER], [ + PHP_MBSTRING_EXTRA_CONFIG_HEADERS="$PHP_MBSTRING_EXTRA_CONFIG_HEADERS $1" +]) + +AC_DEFUN([PHP_MBSTRING_ADD_CFLAG], [ + PHP_MBSTRING_CFLAGS="$PHP_MBSTRING_CFLAGS $1" +]) + +AC_DEFUN([PHP_MBSTRING_ADD_INSTALL_HEADERS], [ + PHP_MBSTRING_INSTALL_HEADERS="$PHP_MBSTRING_INSTALL_HEADERS $1" +]) + +AC_DEFUN([PHP_MBSTRING_EXTENSION], [ + PHP_NEW_EXTENSION(mbstring, $PHP_MBSTRING_SOURCES, $ext_shared,, $PHP_MBSTRING_CFLAGS) + PHP_SUBST(MBSTRING_SHARED_LIBADD) + + for dir in $PHP_MBSTRING_EXTRA_BUILD_DIRS; do + PHP_ADD_BUILD_DIR([$ext_builddir/$dir], 1) + done + + for dir in $PHP_MBSTRING_EXTRA_INCLUDES; do + PHP_ADD_INCLUDE([$ext_srcdir/$dir]) + PHP_ADD_INCLUDE([$ext_builddir/$dir]) + done + + if test "$ext_shared" = "no"; then + PHP_ADD_SOURCES(PHP_EXT_DIR(mbstring), $PHP_MBSTRING_BASE_SOURCES) + out="php_config.h" + else + PHP_ADD_SOURCES_X(PHP_EXT_DIR(mbstring),$PHP_MBSTRING_BASE_SOURCES,,shared_objects_mbstring,yes) + if test -f "$ext_builddir/config.h.in"; then + out="$abs_builddir/config.h" + else + out="php_config.h" + fi + fi + + for cfg in $PHP_MBSTRING_EXTRA_CONFIG_HEADERS; do + cat > $ext_builddir/$cfg <<EOF +#include "$out" +EOF + done + PHP_MBSTRING_ADD_INSTALL_HEADERS([mbstring.h]) + PHP_INSTALL_HEADERS([ext/mbstring], [$PHP_MBSTRING_INSTALL_HEADERS]) +]) + +AC_DEFUN([PHP_MBSTRING_SETUP_MBREGEX], [ + if test "$PHP_MBREGEX" = "yes"; then + if test "$PHP_ONIG" = "yes" || test "$PHP_ONIG" = "no"; then + dnl + dnl Bundled oniguruma + dnl + if test "$PHP_MBREGEX_BACKTRACK" != "no"; then + AC_DEFINE([USE_COMBINATION_EXPLOSION_CHECK],1,[whether to check multibyte regex backtrack]) + fi + + AC_CACHE_CHECK(for variable length prototypes and stdarg.h, php_cv_mbstring_stdarg, [ + AC_TRY_RUN([ +#include <stdarg.h> +int foo(int x, ...) { + va_list va; + va_start(va, x); + va_arg(va, int); + va_arg(va, char *); + va_arg(va, double); + return 0; +} +int main() { return foo(10, "", 3.14); } + ], [php_cv_mbstring_stdarg=yes], [php_cv_mbstring_stdarg=no], [ + dnl cross-compile needs something here + case $host_alias in + *netware*) + php_cv_mbstring_stdarg=yes + ;; + *) + php_cv_mbstring_stdarg=no + ;; + esac + ]) + ]) + + AC_CHECK_HEADERS([stdlib.h string.h strings.h unistd.h sys/time.h sys/times.h stdarg.h]) + AC_CHECK_SIZEOF(int, 4) + AC_CHECK_SIZEOF(short, 2) + AC_CHECK_SIZEOF(long, 4) + AC_C_CONST + AC_HEADER_TIME + AC_FUNC_ALLOCA + AC_FUNC_MEMCMP + AC_CHECK_HEADER([stdarg.h], [ + AC_DEFINE([HAVE_STDARG_PROTOTYPES], [1], [Define to 1 if you have the <stdarg.h> header file.]) + ], []) + AC_DEFINE([PHP_ONIG_BUNDLED], [1], [Define to 1 if the bundled oniguruma is used]) + AC_DEFINE([HAVE_ONIG], [1], [Define to 1 if the oniguruma library is available]) + PHP_MBSTRING_ADD_CFLAG([-DNOT_RUBY]) + PHP_MBSTRING_ADD_BUILD_DIR([oniguruma]) + PHP_MBSTRING_ADD_BUILD_DIR([oniguruma/enc]) + PHP_MBSTRING_ADD_INCLUDE([oniguruma]) + PHP_MBSTRING_ADD_CONFIG_HEADER([oniguruma/config.h]) + PHP_MBSTRING_ADD_SOURCES([ + oniguruma/regcomp.c + oniguruma/regerror.c + oniguruma/regexec.c + oniguruma/reggnu.c + oniguruma/regparse.c + oniguruma/regenc.c + oniguruma/regext.c + oniguruma/regsyntax.c + oniguruma/regtrav.c + oniguruma/regversion.c + oniguruma/st.c + oniguruma/enc/unicode.c + oniguruma/enc/ascii.c + oniguruma/enc/utf8.c + oniguruma/enc/euc_jp.c + oniguruma/enc/euc_tw.c + oniguruma/enc/euc_kr.c + oniguruma/enc/sjis.c + oniguruma/enc/iso8859_1.c + oniguruma/enc/iso8859_2.c + oniguruma/enc/iso8859_3.c + oniguruma/enc/iso8859_4.c + oniguruma/enc/iso8859_5.c + oniguruma/enc/iso8859_6.c + oniguruma/enc/iso8859_7.c + oniguruma/enc/iso8859_8.c + oniguruma/enc/iso8859_9.c + oniguruma/enc/iso8859_10.c + oniguruma/enc/iso8859_11.c + oniguruma/enc/iso8859_13.c + oniguruma/enc/iso8859_14.c + oniguruma/enc/iso8859_15.c + oniguruma/enc/iso8859_16.c + oniguruma/enc/koi8.c + oniguruma/enc/koi8_r.c + oniguruma/enc/big5.c + oniguruma/enc/utf16_be.c + oniguruma/enc/utf16_le.c + oniguruma/enc/utf32_be.c + oniguruma/enc/utf32_le.c + ]) + PHP_MBSTRING_ADD_INSTALL_HEADERS([oniguruma/oniguruma.h]) + else + dnl + dnl External oniguruma + dnl + if test ! -f "$PHP_ONIG/include/oniguruma.h"; then + AC_MSG_ERROR([oniguruma.h not found in $PHP_ONIG/include]) + fi + PHP_ADD_INCLUDE([$PHP_ONIG/include]) + + PHP_CHECK_LIBRARY(onig, onig_init, [ + PHP_ADD_LIBRARY_WITH_PATH(onig, $PHP_ONIG/$PHP_LIBDIR, MBSTRING_SHARED_LIBADD) + AC_DEFINE([HAVE_ONIG], [1], [Define to 1 if the oniguruma library is available]) + ],[ + AC_MSG_ERROR([Problem with oniguruma. Please check config.log for more information.]) + ], [ + -L$PHP_ONIG/$PHP_LIBDIR + ]) + + save_old_LDFLAGS=$LDFLAGS + PHP_EVAL_LIBLINE([$MBSTRING_SHARED_LIBADD], LDFLAGS) + AC_MSG_CHECKING([if oniguruma has an invalid entry for KOI8 encoding]) + AC_TRY_LINK([ +#include <oniguruma.h> + ], [ +return (int)(ONIG_ENCODING_KOI8 + 1); + ], [ + AC_MSG_RESULT([no]) + ], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([PHP_ONIG_BAD_KOI8_ENTRY], [1], [define to 1 if oniguruma has an invalid entry for KOI8 encoding]) + ]) + LDFLAGS=$save_old_LDFLAGS + fi + + PHP_MBSTRING_ADD_CFLAG([-DONIG_ESCAPE_UCHAR_COLLISION=1]) + PHP_MBSTRING_ADD_CFLAG([-DUChar=OnigUChar]) + + AC_DEFINE([HAVE_MBREGEX], 1, [whether to have multibyte regex support]) + + PHP_MBSTRING_ADD_BASE_SOURCES([php_mbregex.c]) + PHP_MBSTRING_ADD_INSTALL_HEADERS([php_mbregex.h php_onig_compat.h]) + fi +]) + +AC_DEFUN([PHP_MBSTRING_SETUP_LIBMBFL], [ + dnl libmbfl is required and can not be disabled + if test "$PHP_LIBMBFL" = "yes" || test "$PHP_LIBMBFL" = "no"; then + dnl + dnl Bundled libmbfl + dnl + PHP_MBSTRING_ADD_BUILD_DIR([libmbfl]) + PHP_MBSTRING_ADD_BUILD_DIR([libmbfl/mbfl]) + PHP_MBSTRING_ADD_BUILD_DIR([libmbfl/filters]) + PHP_MBSTRING_ADD_BUILD_DIR([libmbfl/nls]) + PHP_MBSTRING_ADD_INCLUDE([libmbfl]) + PHP_MBSTRING_ADD_INCLUDE([libmbfl/mbfl]) + PHP_MBSTRING_ADD_CONFIG_HEADER([libmbfl/config.h]) + + PHP_MBSTRING_ADD_SOURCES([ + libmbfl/filters/html_entities.c + libmbfl/filters/mbfilter_7bit.c + libmbfl/filters/mbfilter_ascii.c + libmbfl/filters/mbfilter_base64.c + libmbfl/filters/mbfilter_big5.c + libmbfl/filters/mbfilter_byte2.c + libmbfl/filters/mbfilter_byte4.c + libmbfl/filters/mbfilter_cp1251.c + libmbfl/filters/mbfilter_cp1252.c + libmbfl/filters/mbfilter_cp1254.c + libmbfl/filters/mbfilter_cp5022x.c + libmbfl/filters/mbfilter_cp51932.c + libmbfl/filters/mbfilter_cp850.c + libmbfl/filters/mbfilter_cp866.c + libmbfl/filters/mbfilter_cp932.c + libmbfl/filters/mbfilter_cp936.c + libmbfl/filters/mbfilter_gb18030.c + libmbfl/filters/mbfilter_euc_cn.c + libmbfl/filters/mbfilter_euc_jp.c + libmbfl/filters/mbfilter_euc_jp_2004.c + libmbfl/filters/mbfilter_euc_jp_win.c + libmbfl/filters/mbfilter_euc_kr.c + libmbfl/filters/mbfilter_euc_tw.c + libmbfl/filters/mbfilter_htmlent.c + libmbfl/filters/mbfilter_hz.c + libmbfl/filters/mbfilter_iso2022_jp_ms.c + libmbfl/filters/mbfilter_iso2022jp_2004.c + libmbfl/filters/mbfilter_iso2022jp_mobile.c + libmbfl/filters/mbfilter_iso2022_kr.c + libmbfl/filters/mbfilter_iso8859_1.c + libmbfl/filters/mbfilter_iso8859_10.c + libmbfl/filters/mbfilter_iso8859_13.c + libmbfl/filters/mbfilter_iso8859_14.c + libmbfl/filters/mbfilter_iso8859_15.c + libmbfl/filters/mbfilter_iso8859_16.c + libmbfl/filters/mbfilter_iso8859_2.c + libmbfl/filters/mbfilter_iso8859_3.c + libmbfl/filters/mbfilter_iso8859_4.c + libmbfl/filters/mbfilter_iso8859_5.c + libmbfl/filters/mbfilter_iso8859_6.c + libmbfl/filters/mbfilter_iso8859_7.c + libmbfl/filters/mbfilter_iso8859_8.c + libmbfl/filters/mbfilter_iso8859_9.c + libmbfl/filters/mbfilter_jis.c + libmbfl/filters/mbfilter_koi8r.c + libmbfl/filters/mbfilter_armscii8.c + libmbfl/filters/mbfilter_qprint.c + libmbfl/filters/mbfilter_sjis.c + libmbfl/filters/mbfilter_sjis_open.c + libmbfl/filters/mbfilter_sjis_mobile.c + libmbfl/filters/mbfilter_sjis_mac.c + libmbfl/filters/mbfilter_sjis_2004.c + libmbfl/filters/mbfilter_tl_jisx0201_jisx0208.c + libmbfl/filters/mbfilter_ucs2.c + libmbfl/filters/mbfilter_ucs4.c + libmbfl/filters/mbfilter_uhc.c + libmbfl/filters/mbfilter_utf16.c + libmbfl/filters/mbfilter_utf32.c + libmbfl/filters/mbfilter_utf7.c + libmbfl/filters/mbfilter_utf7imap.c + libmbfl/filters/mbfilter_utf8.c + libmbfl/filters/mbfilter_utf8_mobile.c + libmbfl/filters/mbfilter_uuencode.c + libmbfl/filters/mbfilter_koi8u.c + libmbfl/mbfl/mbfilter.c + libmbfl/mbfl/mbfilter_8bit.c + libmbfl/mbfl/mbfilter_pass.c + libmbfl/mbfl/mbfilter_wchar.c + libmbfl/mbfl/mbfl_convert.c + libmbfl/mbfl/mbfl_encoding.c + libmbfl/mbfl/mbfl_filter_output.c + libmbfl/mbfl/mbfl_ident.c + libmbfl/mbfl/mbfl_language.c + libmbfl/mbfl/mbfl_memory_device.c + libmbfl/mbfl/mbfl_string.c + libmbfl/mbfl/mbfl_allocators.c + libmbfl/nls/nls_de.c + libmbfl/nls/nls_en.c + libmbfl/nls/nls_ja.c + libmbfl/nls/nls_kr.c + libmbfl/nls/nls_neutral.c + libmbfl/nls/nls_ru.c + libmbfl/nls/nls_uni.c + libmbfl/nls/nls_zh.c + libmbfl/nls/nls_hy.c + libmbfl/nls/nls_tr.c + libmbfl/nls/nls_ua.c + ]) + PHP_MBSTRING_ADD_CFLAG([-DHAVE_CONFIG_H]) + PHP_MBSTRING_ADD_INSTALL_HEADERS([libmbfl/config.h libmbfl/mbfl/eaw_table.h libmbfl/mbfl/mbfilter.h libmbfl/mbfl/mbfilter_8bit.h libmbfl/mbfl/mbfilter_pass.h libmbfl/mbfl/mbfilter_wchar.h libmbfl/mbfl/mbfl_allocators.h libmbfl/mbfl/mbfl_consts.h libmbfl/mbfl/mbfl_convert.h libmbfl/mbfl/mbfl_defs.h libmbfl/mbfl/mbfl_encoding.h libmbfl/mbfl/mbfl_filter_output.h libmbfl/mbfl/mbfl_ident.h libmbfl/mbfl/mbfl_language.h libmbfl/mbfl/mbfl_memory_device.h libmbfl/mbfl/mbfl_string.h]) + else + dnl + dnl External libmfl + dnl + for inc in include include/mbfl-1.0 include/mbfl; do + if test -f "$PHP_LIBMBFL/$inc/mbfilter.h"; then + PHP_LIBMBFL_INCLUDE="$inc" + break + fi + done + + if test -z "$PHP_LIBMBFL_INCLUDE"; then + AC_MSG_ERROR([mbfilter.h not found. Please reinstall libmbfl library.]) + else + PHP_ADD_INCLUDE([$PHP_LIBMBFL_INCLUDE]) + fi + + PHP_CHECK_LIBRARY(mbfl, mbfl_buffer_converter_new, [ + PHP_ADD_LIBRARY_WITH_PATH(mbfl, $PHP_LIBMBFL/$PHP_LIBDIR, MBSTRING_SHARED_LIBADD) + ],[ + AC_MSG_ERROR([Problem with libmbfl. Please check config.log for more information.]) + ], [ + -L$PHP_LIBMBFL/$PHP_LIBDIR + ]) + fi +]) + +dnl +dnl Main config +dnl + +PHP_ARG_ENABLE(mbstring, whether to enable multibyte string support, +[ --enable-mbstring Enable multibyte string support]) + +PHP_ARG_ENABLE([mbregex], [whether to enable multibyte regex support], +[ --disable-mbregex MBSTRING: Disable multibyte regex support], yes, no) + +PHP_ARG_ENABLE([mbregex_backtrack], [whether to check multibyte regex backtrack], +[ --disable-mbregex-backtrack + MBSTRING: Disable multibyte regex backtrack check], yes, no) + +PHP_ARG_WITH(libmbfl, [for external libmbfl], +[ --with-libmbfl[=DIR] MBSTRING: Use external libmbfl. DIR is the libmbfl base + install directory [BUNDLED]], no, no) + +PHP_ARG_WITH(onig, [for external oniguruma], +[ --with-onig[=DIR] MBSTRING: Use external oniguruma. DIR is the oniguruma install prefix. + If DIR is not set, the bundled oniguruma will be used], no, no) + +if test "$PHP_MBSTRING" != "no"; then + AC_DEFINE([HAVE_MBSTRING],1,[whether to have multibyte string support]) + + PHP_MBSTRING_ADD_BASE_SOURCES([mbstring.c php_unicode.c mb_gpc.c]) + + if test "$PHP_MBREGEX" != "no"; then + PHP_MBSTRING_SETUP_MBREGEX + fi + + dnl libmbfl is required + PHP_MBSTRING_SETUP_LIBMBFL + PHP_MBSTRING_EXTENSION +fi + +# vim600: sts=2 sw=2 et diff --git a/ext/mbstring/config.w32 b/ext/mbstring/config.w32 new file mode 100644 index 0000000..7bc9518 --- /dev/null +++ b/ext/mbstring/config.w32 @@ -0,0 +1,81 @@ +// $Id$ +// vim:ft=javascript + +ARG_ENABLE("mbstring", "multibyte string functions", "no"); +ARG_ENABLE("mbregex", "multibyte regex support", "no"); +ARG_ENABLE("mbregex-backtrack", "check multibyte regex backtrack", "yes"); + +if (PHP_MBSTRING != "no") { + + FSO.CopyFile("ext\\mbstring\\libmbfl\\config.h.w32", + "ext\\mbstring\\libmbfl\\config.h", true); + FSO.CopyFile("ext\\mbstring\\oniguruma\\win32\\config.h", + "ext\\mbstring\\oniguruma\\config.h", true); + + EXTENSION("mbstring", "mbstring.c php_unicode.c mb_gpc.c", PHP_MBSTRING_SHARED, + "-Iext/mbstring/libmbfl -Iext/mbstring/libmbfl/mbfl \ + -Iext/mbstring/oniguruma /D NOT_RUBY=1 /D LIBMBFL_EXPORTS=1 \ + /D HAVE_STDARG_PROTOTYPES=1 /D HAVE_CONFIG_H /D HAVE_STDLIB_H \ + /D HAVE_STRICMP /D MBFL_DLL_EXPORT=1 /D EXPORT"); + + ADD_SOURCES("ext/mbstring/libmbfl/filters", "html_entities.c \ + mbfilter_7bit.c mbfilter_ascii.c mbfilter_base64.c mbfilter_big5.c \ + mbfilter_byte2.c mbfilter_byte4.c mbfilter_cp1251.c mbfilter_cp1252.c \ + mbfilter_cp866.c mbfilter_cp932.c mbfilter_cp936.c mbfilter_cp51932.c \ + mbfilter_euc_cn.c mbfilter_euc_jp.c mbfilter_euc_jp_win.c mbfilter_euc_kr.c \ + mbfilter_euc_tw.c mbfilter_htmlent.c mbfilter_hz.c mbfilter_iso2022_kr.c \ + mbfilter_iso8859_1.c mbfilter_iso8859_10.c mbfilter_iso8859_13.c \ + mbfilter_iso8859_14.c mbfilter_iso8859_15.c mbfilter_iso8859_16.c \ + mbfilter_iso8859_2.c mbfilter_iso8859_3.c mbfilter_iso8859_4.c \ + mbfilter_iso8859_5.c mbfilter_iso8859_6.c mbfilter_iso8859_7.c \ + mbfilter_iso8859_8.c mbfilter_iso8859_9.c mbfilter_jis.c \ + mbfilter_iso2022_jp_ms.c mbfilter_gb18030.c mbfilter_sjis_2004.c \ + mbfilter_koi8r.c mbfilter_qprint.c mbfilter_sjis.c mbfilter_ucs2.c \ + mbfilter_ucs4.c mbfilter_uhc.c mbfilter_utf16.c mbfilter_utf32.c \ + mbfilter_utf7.c mbfilter_utf7imap.c mbfilter_utf8.c mbfilter_utf8_mobile.c \ + mbfilter_koi8u.c mbfilter_cp1254.c mbfilter_euc_jp_2004.c \ + mbfilter_uuencode.c mbfilter_armscii8.c mbfilter_cp850.c \ + mbfilter_cp5022x.c mbfilter_sjis_open.c mbfilter_sjis_mobile.c \ + mbfilter_sjis_mac.c \ + mbfilter_iso2022jp_2004.c mbfilter_iso2022jp_mobile.c \ + mbfilter_tl_jisx0201_jisx0208.c", "mbstring"); + + ADD_SOURCES("ext/mbstring/libmbfl/mbfl", "mbfilter.c mbfilter_8bit.c \ + mbfilter_pass.c mbfilter_wchar.c mbfl_convert.c mbfl_encoding.c \ + mbfl_filter_output.c mbfl_ident.c mbfl_language.c mbfl_memory_device.c \ + mbfl_string.c mbfl_allocators.c", "mbstring"); + + ADD_SOURCES("ext/mbstring/libmbfl/nls", "nls_de.c nls_en.c nls_ja.c \ + nls_kr.c nls_neutral.c nls_ru.c nls_uni.c nls_zh.c nls_hy.c \ + nls_ua.c nls_tr.c", "mbstring"); + + AC_DEFINE('HAVE_MBSTRING', 1, 'Have mbstring support'); + AC_DEFINE('HAVE_MBSTR_CN', 1, 'CN'); + AC_DEFINE('HAVE_MBSTR_JA', 1, 'JA'); + AC_DEFINE('HAVE_MBSTR_KR', 1, 'KR'); + AC_DEFINE('HAVE_MBSTR_RU', 1, 'RU'); + AC_DEFINE('HAVE_MBSTR_TW', 1, 'TW'); + + PHP_INSTALL_HEADERS("ext/mbstring", "mbstring.h oniguruma/oniguruma.h php_mbregex.h php_onig_compat.h libmbfl/config.h libmbfl/mbfl/eaw_table.h libmbfl/mbfl/mbfilter.h libmbfl/mbfl/mbfilter_8bit.h libmbfl/mbfl/mbfilter_pass.h libmbfl/mbfl/mbfilter_wchar.h libmbfl/mbfl/mbfl_allocators.h libmbfl/mbfl/mbfl_consts.h libmbfl/mbfl/mbfl_convert.h libmbfl/mbfl/mbfl_defs.h libmbfl/mbfl/mbfl_encoding.h libmbfl/mbfl/mbfl_filter_output.h libmbfl/mbfl/mbfl_ident.h libmbfl/mbfl/mbfl_language.h libmbfl/mbfl/mbfl_memory_device.h libmbfl/mbfl/mbfl_string.h"); + + if (PHP_MBREGEX != "no") { + AC_DEFINE('HAVE_STDARG_PROTOTYPES', 1, 'have stdarg.h'); + AC_DEFINE('HAVE_MBREGEX', 1); + AC_DEFINE('HAVE_ONIG', 1); + if (PHP_MBREGEX_BACKTRACK != "no") { + AC_DEFINE('USE_COMBINATION_EXPLOSION_CHECK', 1); + } + ADD_SOURCES("ext/mbstring/oniguruma", "regcomp.c regerror.c \ + regenc.c regexec.c reggnu.c regparse.c regposerr.c \ + regext.c regsyntax.c regtrav.c regversion.c st.c", "mbstring"); + ADD_SOURCES("ext/mbstring/oniguruma/enc", "ascii.c big5.c \ + euc_jp.c euc_kr.c euc_tw.c iso8859_1.c iso8859_2.c \ + iso8859_3.c iso8859_4.c iso8859_5.c iso8859_6.c \ + iso8859_7.c iso8859_8.c iso8859_9.c iso8859_10.c \ + iso8859_11.c iso8859_13.c iso8859_14.c iso8859_15.c iso8859_16.c \ + koi8.c koi8_r.c sjis.c utf8.c unicode.c utf16_be.c utf16_le.c \ + utf32_be.c utf32_le.c gb18030.c", "mbstring"); + ADD_SOURCES("ext/mbstring", "php_mbregex.c", "mbstring"); + PHP_INSTALL_HEADERS("ext/mbstring", "php_mbregex.h"); + } +} diff --git a/ext/mbstring/libmbfl/AUTHORS b/ext/mbstring/libmbfl/AUTHORS new file mode 100644 index 0000000..9a9f2f9 --- /dev/null +++ b/ext/mbstring/libmbfl/AUTHORS @@ -0,0 +1,13 @@ +Marcus Boerger <helly@php.net> +Hayk Chamyan <hamshen@gmail.com> +Wez Furlong <wez@thebrainroom.com> +Rui Hirokawa <hirokawa@php.net> +Shigeru Kanemoto <sgk@happysize.co.jp> +U. Kenkichi <kenkichi@axes.co.jp> +Moriyoshi Koizumi <moriyoshi@php.net> +Hironori Sato <satoh@jpnnet.com> +Tsukada Takuya <tsukada@fminn.nagano.nagano.jp> +Tateyama <tateyan@amy.hi-ho.ne.jp> +Den V. Tsopa <tdv@edisoft.ru> +Maksym Veremeyenko <verem@m1stereo.tv> +Haluk AKIN <halukakin@gmail.com> diff --git a/ext/mbstring/libmbfl/DISCLAIMER b/ext/mbstring/libmbfl/DISCLAIMER new file mode 100644 index 0000000..97fe77c --- /dev/null +++ b/ext/mbstring/libmbfl/DISCLAIMER @@ -0,0 +1,69 @@ +# charset=UTF-8 +# vim600: encoding=UTF-8 + + "streamable kanji code filter and converter" + + Copyright (c) 1998,1999,2000,2001 HappySize, Inc. All rights reserved. + + This software is released under the GNU Lesser General Public License. + (Version 2.1, February 1999) + Please read the following detail of the licence (in japanese). + + ◆使用許諾æ¡ä»¶â—† + + ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã«ã‚ˆã£ã¦é–‹ç™ºã•れã¾ã—ãŸã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒ + ピーサイズã¯ã€è‘—作権法ãŠã‚ˆã³ä¸‡å›½è‘—作権æ¡ç´„ã®å®šã‚ã«ã‚ˆã‚Šã€ã“ã®ã‚½ãƒ•トウェアã«é–¢ + ã™ã‚‹ã™ã¹ã¦ã®æ¨©åˆ©ã‚’ç•™ä¿ã™ã‚‹æ¨©åˆ©ã‚’æŒã¡ã€ã“ã“ã«è¡Œä½¿ã—ã¾ã™ã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイ + ズã¯ä»¥ä¸‹ã«æ˜Žè¨˜ã—ãŸæ¡ä»¶ã«å¾“ã£ã¦ã€ã“ã®ã‚½ãƒ•トウェアを使用ã™ã‚‹æŽ’ä»–çš„ã§ã¯ãªã„権利 + ã‚’ãŠå®¢æ§˜ã«è¨±è«¾ã—ã¾ã™ã€‚何人ãŸã‚Šã¨ã‚‚ã€ä»¥ä¸‹ã®æ¡ä»¶ã«åã—ã¦ã“ã®ã‚½ãƒ•トウェアを使用 + ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 + + ã“ã®ã‚½ãƒ•トウェアを「GNU Lesser General Public License (Version 2.1, February + 1999)ã€ã«ç¤ºã•ã‚ŒãŸæ¡ä»¶ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚’ã€å…¨ã¦ã®æ–¹ã«è¨±è«¾ã—ã¾ã™ã€‚「GNU Lesser + General Public Licenseã€ã‚’満ãŸã•ãªã„使用ã«ã¯ã€æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã‹ã‚‰æ›¸é¢ + ã«ã‚ˆã‚‹è¨±è«¾ã‚’å¾—ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ + + 「GNU Lesser General Public Licenseã€ã®å…¨æ–‡ã¯ä»¥ä¸‹ã®ã‚¦ã‚§ãƒ–ページã‹ã‚‰å–å¾—ã§ã + ã¾ã™ã€‚「GNU Lesser General Public Licenseã€ã¨ã¯ã€ã“れã¾ã§Library General + Public Licenseã¨å‘¼ã°ã‚Œã¦ã„ãŸã‚‚ã®ã§ã™ã€‚ + http://www.gnu.org/ --- GNUウェブサイト + http://www.gnu.org/copyleft/lesser.html --- ãƒ©ã‚¤ã‚»ãƒ³ã‚¹æ–‡é¢ + ã“ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã®å†…容ãŒã‚ã‹ã‚‰ãªã„æ–¹ã€å®ˆã‚Œãªã„æ–¹ã«ã¯ä½¿ç”¨ã‚’許諾ã—ã¾ã›ã‚“。 + + ã—ã‹ã—ãªãŒã‚‰ã€å½“社ã¨GNUプãƒã‚¸ã‚§ã‚¯ãƒˆã¨ã®ç‰¹å®šã®é–¢ä¿‚を示唆ã¾ãŸã¯ä¸»å¼µã™ã‚‹ã‚‚ã®ã§ + ã¯ã‚りã¾ã›ã‚“。 + + â—†ä¿è¨¼å†…容◆ + + ã“ã®ã‚½ãƒ•トウェアã¯ã€æœŸå¾…ã•れãŸå‹•作・機能・性能をæŒã¤ã“ã¨ã‚’目標ã¨ã—ã¦è¨è¨ˆã•れ + 開発ã•れã¦ã„ã¾ã™ãŒã€ã“れをä¿è¨¼ã™ã‚‹ã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“。ã“ã®ã‚½ãƒ•トウェアã¯ã€Œã“ + ã®ã¾ã¾ã€ã®çŠ¶æ…‹ã§æä¾›ã•れã¦ãŠã‚Šã€ãŸã¨ãˆã°ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®æœ‰ç”¨æ€§ãªã„ã—特定㮠+ 目的ã«åˆè‡´ã™ã‚‹ã“ã¨ã¨ã„ã£ãŸã€ä½•らã‹ã®ä¿è¨¼å†…容ãŒã€æ˜Žç¤ºã•れãŸã‚Šæš—é»™ã«ç¤ºã•れã¦ã„ + ã‚‹å ´åˆã§ã‚ã£ã¦ã‚‚ã€ãã®ä¿è¨¼ã¯ç„¡åйã§ã™ã€‚ã“ã®ã‚½ãƒ•トウェアを使用ã—ãŸçµæžœãªã„ã—使 + 用ã—ãªã‹ã£ãŸçµæžœã«ã‚ˆã£ã¦ã€ç›´æŽ¥ã‚ã‚‹ã„ã¯é–“接ã«å—ã‘ãŸèº«ä½“çš„ãªå‚·å®³ã€è²¡ç”£ä¸Šã®æå®³ + ã€ãƒ‡ãƒ¼ã‚¿ã®æå¤±ã‚ã‚‹ã„ã¯ãã®ä»–ã®å…¨ã¦ã®æå®³ã«ã¤ã„ã¦ã¯ã€ãã®æå®³ã®å¯èƒ½æ€§ãŒä½¿ç”¨è€… + ã€å½“社ã‚ã‚‹ã„ã¯ç¬¬ä¸‰è€…ã«ã‚ˆã£ã¦è¦å‘Šã•れã¦ã„ãŸå ´åˆã§ã‚ã£ã¦ã‚‚ã€å½“社ã¯ãã®æå®³ã®è³ + 償ãŠã‚ˆã³è£œå¡«ã‚’行ã„ã¾ã›ã‚“。ã“ã®è¦å®šã¯ä»–ã®å…¨ã¦ã®ã€æ›¸é¢ä¸Šã¾ãŸã¯æ›¸é¢ã«ç„¡ã„ä¿è¨¼ãƒ» + 契約・è¦å®šã«å„ªå…ˆã—ã¾ã™ã€‚ + + ◆著作権者ã®é€£çµ¡å…ˆãŠã‚ˆã³ä½¿ç”¨æ¡ä»¶ã«ã¤ã„ã¦ã®å•ã„åˆã‚ã›å…ˆâ—† + + 〒102-0073 + æ±äº¬éƒ½åƒä»£ç”°åŒºä¹æ®µåŒ—1-13-5日本地所第一ビル4F + æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズ + Phone: 03-3512-3655, Fax: 03-3512-3656 + Email: sales@happysize.co.jp + Web: http://happysize.com/ + + ◆著者◆ + + 金本 茂 <sgk@happysize.co.jp> + + ◆履æ´â—† + + 1998/11/10 sgk implementation in C++ + 1999/4/25 sgk Cã§æ›¸ããªãŠã—。 + 1999/4/26 sgk 入力フィルタを実装。漢å—コードを推定ã—ãªãŒã‚‰ãƒ•ã‚£ãƒ«ã‚¿ã‚’è¿½åŠ ã€‚ + 1999/6/?? Unicodeサãƒãƒ¼ãƒˆã€‚ + 1999/6/22 sgk ライセンスをLGPLã«å¤‰æ›´ã€‚ + diff --git a/ext/mbstring/libmbfl/INSTALL b/ext/mbstring/libmbfl/INSTALL new file mode 100644 index 0000000..b07c915 --- /dev/null +++ b/ext/mbstring/libmbfl/INSTALL @@ -0,0 +1,12 @@ + +For UNIX compatible system, + +./buildconf +./configure +make +make install + +For Windows, + +Visual C++ 6.0 and Borland C++ 5.0 is suppoted. + diff --git a/ext/mbstring/libmbfl/LICENSE b/ext/mbstring/libmbfl/LICENSE new file mode 100644 index 0000000..3b20440 --- /dev/null +++ b/ext/mbstring/libmbfl/LICENSE @@ -0,0 +1,458 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/ext/mbstring/libmbfl/Makefile.am b/ext/mbstring/libmbfl/Makefile.am new file mode 100644 index 0000000..7886104 --- /dev/null +++ b/ext/mbstring/libmbfl/Makefile.am @@ -0,0 +1,7 @@ +AUTOMAKE_OPTIONS=dejagnu +DEJATOOL=conv_encoding conv_kana strwidth strcut +RUNTESTDEFAULTFLAGS=--tool $$tool --srcdir "$$srcdir"/tests +LANG=C +EXTRA_DIST=AUTHORS DISCLAIMER LICENSE buildconf +SUBDIRS = nls filters mbfl tests +CLEANFILES=*.log *.sum diff --git a/ext/mbstring/libmbfl/NEWS b/ext/mbstring/libmbfl/NEWS new file mode 100644 index 0000000..fc16367 --- /dev/null +++ b/ext/mbstring/libmbfl/NEWS @@ -0,0 +1,30 @@ + +version 1.3.2 August 20, 2011 + +- added JISX-0213:2004 based encoding : Shift_JIS-2004, EUC-JP-2004, ISO-2022-JP-2004 (rui). +- added gb18030 encoding (rui). +- added CP950 with user user defined area based on Big5 (rui). +- added mapping for user defined character area to CP936 (rui). +- added UTF-8-Mobile to support the pictogram characters defined by mobile phone carrier in Japan (rui). + +version 1.3.1 August 5, 2011 + +- added check for invalid/obsolete utf-8 encoding (rui). + +version 1.3.0 August 1, 2011 + +- added encoding conversion between Shift_JIS and Unicode (6.0 or PUA) + for pictogram characters defined by mobile phone carrier in Japan (rui). + + Detailed info:https://github.com/hirokawa/libmbfl/wiki/Introduction-to-libmbflhttps:--github.com-hirokawa-libmbfl-wiki-Introduction-to-libmbfl-_edit%23 + +- fixed encoding conversion of cp5022x for user defined area (rui). +- added MacJapanese (SJIS-mac) for legacy encoding support (rui). +- backport from PHP 5.2 (rui). + +version 1.1.0 March 02, 2010 + +- added cp5022x encoding (moriyoshi) +- added ISO-2022-JP-MS (moriyoshi) +- moved to github.com from sourceforge.jp (moriyoshi) + diff --git a/ext/mbstring/libmbfl/README b/ext/mbstring/libmbfl/README new file mode 100644 index 0000000..5a32555 --- /dev/null +++ b/ext/mbstring/libmbfl/README @@ -0,0 +1,8 @@ +This is Libmbfl, a streamable multibyte character code filter and +converter library. + +See LICENSE and DISCLAIMER for licensing information. + +See the file INSTALL for building and installation instructions. + +# $Id$ diff --git a/ext/mbstring/libmbfl/buildconf b/ext/mbstring/libmbfl/buildconf new file mode 100755 index 0000000..981812a --- /dev/null +++ b/ext/mbstring/libmbfl/buildconf @@ -0,0 +1,6 @@ +#!/bin/sh +libtoolize -c -f --automake +aclocal +autoheader +automake -a -c --foreign +autoconf diff --git a/ext/mbstring/libmbfl/config.h.in b/ext/mbstring/libmbfl/config.h.in new file mode 100644 index 0000000..bded33a --- /dev/null +++ b/ext/mbstring/libmbfl/config.h.in @@ -0,0 +1,94 @@ +/* config.h.in. Generated from configure.in by autoheader. */ + +/* Define to 1 if you have the <assert.h> header file. */ +#undef HAVE_ASSERT_H + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if your system has a GNU libc compatible `malloc' function, and + to 0 otherwise. */ +#undef HAVE_MALLOC + +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if your system has a GNU libc compatible `realloc' function, + and to 0 otherwise. */ +#undef HAVE_REALLOC + +/* Define to 1 if you have the <stddef.h> header file. */ +#undef HAVE_STDDEF_H + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strcasecmp' function. */ +#undef HAVE_STRCASECMP + +/* Define to 1 if you have the `strchr' function. */ +#undef HAVE_STRCHR + +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Define to rpl_malloc if the replacement function should be used. */ +#undef malloc + +/* Define to rpl_realloc if the replacement function should be used. */ +#undef realloc + +/* Define to `unsigned int' if <sys/types.h> does not define. */ +#undef size_t diff --git a/ext/mbstring/libmbfl/config.h.w32 b/ext/mbstring/libmbfl/config.h.w32 new file mode 100644 index 0000000..7458e44 --- /dev/null +++ b/ext/mbstring/libmbfl/config.h.w32 @@ -0,0 +1,12 @@ +#define HAVE_STDIO_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STDDEF_H 1 +#define HAVE_ASSERT_H 1 +#define HAVE_MEMORY_H 1 +/* #undef HAVE_STRINGS_H */ +#define HAVE_STRING_H 1 +/* #undef HAVE_STRCASECMP */ +#define HAVE_STRICMP 1 +#define HAVE_WIN32_NATIVE_THREAD 1 +#define USE_WIN32_NATIVE_THREAD 1 +#define ENABLE_THREADS 1 diff --git a/ext/mbstring/libmbfl/configure.in b/ext/mbstring/libmbfl/configure.in new file mode 100644 index 0000000..f7fd58f --- /dev/null +++ b/ext/mbstring/libmbfl/configure.in @@ -0,0 +1,49 @@ +# Process this file with autoconf to produce a configure script. +AC_INIT(mbfl/mbfilter.c) +AM_INIT_AUTOMAKE(libmbfl, 1.1.0) +AC_CONFIG_SRCDIR(mbfl/mbfilter.c) +AM_CONFIG_HEADER(config.h) + +# SHLIB isn't a version number but the API reference +# Read http://www.gnu.org/software/libtool/manual/libtool.html#Updating-version-info +SHLIB_VERSION="1:1:0" +AC_SUBST(SHLIB_VERSION) + +# Checks for programs. +AC_PROG_CC +AC_PROG_CXX +AC_PROG_LIBTOOL +AC_PROG_RANLIB + +# Checks for libraries. + +# Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS([stdlib.h stddef.h assert.h]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_TYPE_SIZE_T + +# Checks for library functions. +AC_FUNC_MALLOC +AC_FUNC_REALLOC +AC_CHECK_FUNCS([strcasecmp strchr]) + +AC_CHECK_PROGS([FETCH_VIA_FTP], [wget curl ncftpget]) + +if test "$FETCH_VIA_FTP" = "curl"; then + FETCH_VIA_FTP="curl -O" +fi + +AC_CONFIG_FILES([ + Makefile + mbfl/Makefile + filters/Makefile + nls/Makefile + tests/Makefile + tests/conv_encoding.tests/Makefile + tests/conv_kana.tests/Makefile + tests/strwidth.tests/Makefile + tests/strcut.tests/Makefile]) +AC_OUTPUT diff --git a/ext/mbstring/libmbfl/cvsclean b/ext/mbstring/libmbfl/cvsclean new file mode 100755 index 0000000..60ae246 --- /dev/null +++ b/ext/mbstring/libmbfl/cvsclean @@ -0,0 +1,14 @@ +#!/bin/sh +function cvsclean_sub() { + prev_pwd=`pwd` + cd $1 + cat .cvsignore | while read fname; do + rm -r -f $fname + done + cd "$prev_pwd" +} + +cvsclean_sub . +cvsclean_sub mbfl +cvsclean_sub filters +cvsclean_sub nls diff --git a/ext/mbstring/libmbfl/filters/Makefile.am b/ext/mbstring/libmbfl/filters/Makefile.am new file mode 100644 index 0000000..33f9049 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/Makefile.am @@ -0,0 +1,269 @@ +EXTRA_DIST=Makefile.bcc32 mk_sb_tbl.awk +noinst_LTLIBRARIES=libmbfl_filters.la +INCLUDES=-I../mbfl +PERL=perl +libmbfl_filters_la_LDFLAGS=-version-info $(SHLIB_VERSION) +libmbfl_filters_la_SOURCES=mbfilter_cp936.c \ + mbfilter_hz.c \ + mbfilter_euc_tw.c \ + mbfilter_big5.c \ + mbfilter_euc_jp.c \ + mbfilter_jis.c \ + mbfilter_iso8859_1.c \ + mbfilter_iso8859_2.c \ + mbfilter_cp1254.c \ + mbfilter_cp1252.c \ + mbfilter_cp1251.c \ + mbfilter_ascii.c \ + mbfilter_iso8859_3.c \ + mbfilter_iso8859_4.c \ + mbfilter_iso8859_5.c \ + mbfilter_iso8859_6.c \ + mbfilter_iso8859_7.c \ + mbfilter_iso8859_8.c \ + mbfilter_iso8859_9.c \ + mbfilter_iso8859_10.c \ + mbfilter_iso8859_13.c \ + mbfilter_iso8859_14.c \ + mbfilter_iso8859_15.c \ + mbfilter_iso8859_16.c \ + mbfilter_htmlent.c \ + mbfilter_byte2.c \ + mbfilter_byte4.c \ + mbfilter_uuencode.c \ + mbfilter_base64.c \ + mbfilter_sjis.c \ + mbfilter_sjis_2004.c \ + mbfilter_sjis_open.c \ + mbfilter_sjis_mobile.c \ + mbfilter_sjis_mac.c \ + mbfilter_7bit.c \ + mbfilter_qprint.c \ + mbfilter_ucs4.c \ + mbfilter_ucs2.c \ + mbfilter_utf32.c \ + mbfilter_utf16.c \ + mbfilter_utf8.c \ + mbfilter_utf8_mobile.c \ + mbfilter_utf7.c \ + mbfilter_utf7imap.c \ + mbfilter_euc_jp_win.c \ + mbfilter_euc_jp_2004.c \ + mbfilter_cp932.c \ + mbfilter_cp51932.c \ + mbfilter_euc_cn.c \ + mbfilter_euc_kr.c \ + mbfilter_uhc.c \ + mbfilter_iso2022_jp_ms.c \ + mbfilter_iso2022jp_2004.c \ + mbfilter_iso2022jp_mobile.c \ + mbfilter_gb18030.c \ + mbfilter_iso2022_kr.c \ + mbfilter_cp866.c \ + mbfilter_koi8r.c \ + mbfilter_koi8u.c \ + mbfilter_armscii8.c \ + mbfilter_cp850.c \ + mbfilter_cp5022x.c \ + mbfilter_tl_jisx0201_jisx0208.c \ + html_entities.c \ + cp932_table.h \ + html_entities.h \ + mbfilter_7bit.h \ + mbfilter_ascii.h \ + mbfilter_base64.h \ + mbfilter_big5.h \ + mbfilter_byte2.h \ + mbfilter_byte4.h \ + mbfilter_cp1251.h \ + mbfilter_cp1252.h \ + mbfilter_cp1254.h \ + mbfilter_cp866.h \ + mbfilter_cp932.h \ + mbfilter_cp936.h \ + mbfilter_gb18030.h \ + mbfilter_euc_cn.h \ + mbfilter_euc_jp.h \ + mbfilter_euc_jp_2004.h \ + mbfilter_euc_jp_win.h \ + mbfilter_euc_kr.h \ + mbfilter_euc_tw.h \ + mbfilter_htmlent.h \ + mbfilter_hz.h \ + mbfilter_iso2022_jp_ms.h \ + mbfilter_iso2022jp_2004.h \ + mbfilter_iso2022jp_mobile.h \ + mbfilter_iso2022_kr.h \ + mbfilter_iso8859_1.h \ + mbfilter_iso8859_10.h \ + mbfilter_iso8859_13.h \ + mbfilter_iso8859_14.h \ + mbfilter_iso8859_15.h \ + mbfilter_iso8859_16.h \ + mbfilter_iso8859_2.h \ + mbfilter_iso8859_3.h \ + mbfilter_iso8859_4.h \ + mbfilter_iso8859_5.h \ + mbfilter_iso8859_6.h \ + mbfilter_iso8859_7.h \ + mbfilter_iso8859_8.h \ + mbfilter_iso8859_9.h \ + mbfilter_jis.h \ + mbfilter_koi8r.h \ + mbfilter_koi8u.h \ + mbfilter_armscii8.h \ + mbfilter_qprint.h \ + mbfilter_sjis.h \ + mbfilter_sjis_open.h \ + mbfilter_sjis_mobile.h \ + mbfilter_sjis_mac.h \ + mbfilter_ucs2.h \ + mbfilter_ucs4.h \ + mbfilter_uhc.h \ + mbfilter_utf16.h \ + mbfilter_utf32.h \ + mbfilter_utf7.h \ + mbfilter_utf7imap.h \ + mbfilter_utf8.h \ + mbfilter_utf8_mobile.h \ + mbfilter_uuencode.h \ + mbfilter_cp5022x.h \ + mbfilter_cp51932.h \ + mbfilter_cp850.h \ + mbfilter_tl_jisx0201_jisx0208.h \ + unicode_prop.h \ + unicode_table_big5.h \ + unicode_table_cns11643.h \ + unicode_table_cp1251.h \ + unicode_table_cp1252.h \ + unicode_table_cp1254.h \ + unicode_table_cp866.h \ + unicode_table_cp932_ext.h \ + unicode_table_cp936.h \ + unicode_table_iso8859_10.h \ + unicode_table_iso8859_13.h \ + unicode_table_iso8859_14.h \ + unicode_table_iso8859_15.h \ + unicode_table_iso8859_16.h \ + unicode_table_iso8859_2.h \ + unicode_table_iso8859_3.h \ + unicode_table_iso8859_4.h \ + unicode_table_iso8859_5.h \ + unicode_table_iso8859_6.h \ + unicode_table_iso8859_7.h \ + unicode_table_iso8859_8.h \ + unicode_table_iso8859_9.h \ + unicode_table_jis.h \ + unicode_table_koi8r.h \ + unicode_table_koi8u.h \ + unicode_table_armscii8.h \ + unicode_table_cp850.h \ + unicode_table_uhc.h \ + unicode_table_gb18030.h \ + translit_kana_jisx0201_jisx0208.h \ + emoji2uni.h + +mbfilter_iso8859_2.c: unicode_table_iso8859_2.h + +mbfilter_iso8859_3.c: unicode_table_iso8859_3.h + +mbfilter_iso8859_4.c: unicode_table_iso8859_4.h + +mbfilter_iso8859_5.c: unicode_table_iso8859_5.h + +mbfilter_iso8859_6.c: unicode_table_iso8859_6.h + +mbfilter_iso8859_7.c: unicode_table_iso8859_7.h + +mbfilter_iso8859_8.c: unicode_table_iso8859_8.h + +mbfilter_iso8859_9.c: unicode_table_iso8859_9.h + +mbfilter_iso8859_10.c: unicode_table_iso8859_10.h + +mbfilter_iso8859_11.c: unicode_table_iso8859_11.h + +mbfilter_iso8859_13.c: unicode_table_iso8859_13.h + +mbfilter_iso8859_14.c: unicode_table_iso8859_13.h + +mbfilter_iso8859_15.c: unicode_table_iso8859_15.h + +mbfilter_iso8859_16.c: unicode_table_iso8859_16.h + +8859-1.TXT 8859-2.TXT 8859-3.TXT 8859-4.TXT 8859-5.TXT 8859-6.TXT \ +8859-7.TXT 8859-8.TXT 8859-9.TXT 8859-10.TXT 8859-11.TXT 8859-13.TXT \ +8859-14.TXT 8859-15.TXT 8859-16.TXT: + $(FETCH_VIA_FTP) ftp://ftp.unicode.org/Public/MAPPINGS/ISO8859/$@ + +unicode_table_iso8859_1.h: mk_sb_tbl.awk + $(AWK) -v TABLE_NAME=iso8859_1_ucs_table \ + -v IFNDEF_NAME=UNICODE_TABLE_ISO8859_1_H -f mk_sb_tbl.awk 8859-1.TXT > $@ + +unicode_table_iso8859_2.h: mk_sb_tbl.awk + $(AWK) -v TABLE_NAME=iso8859_2_ucs_table \ + -v IFNDEF_NAME=UNICODE_TABLE_ISO8859_2_H -f mk_sb_tbl.awk 8859-2.TXT > $@ + +unicode_table_iso8859_3.h: mk_sb_tbl.awk + $(AWK) -v TABLE_NAME=iso8859_3_ucs_table \ + -v IFNDEF_NAME=UNICODE_TABLE_ISO8859_3_H -f mk_sb_tbl.awk 8859-3.TXT > $@ + +unicode_table_iso8859_4.h: mk_sb_tbl.awk + $(AWK) -v TABLE_NAME=iso8859_4_ucs_table \ + -v IFNDEF_NAME=UNICODE_TABLE_ISO8859_4_H -f mk_sb_tbl.awk 8859-4.TXT > $@ + +unicode_table_iso8859_5.h: mk_sb_tbl.awk + $(AWK) -v TABLE_NAME=iso8859_5_ucs_table \ + -v IFNDEF_NAME=UNICODE_TABLE_ISO8859_5_H -f mk_sb_tbl.awk 8859-5.TXT > $@ + +unicode_table_iso8859_6.h: mk_sb_tbl.awk + $(AWK) -v TABLE_NAME=iso8859_6_ucs_table \ + -v IFNDEF_NAME=UNICODE_TABLE_ISO8859_6_H -f mk_sb_tbl.awk 8859-6.TXT > $@ + +unicode_table_iso8859_7.h: mk_sb_tbl.awk + $(AWK) -v TABLE_NAME=iso8859_7_ucs_table \ + -v IFNDEF_NAME=UNICODE_TABLE_ISO8859_7_H -f mk_sb_tbl.awk 8859-7.TXT > $@ + +unicode_table_iso8859_8.h: mk_sb_tbl.awk + $(AWK) -v TABLE_NAME=iso8859_8_ucs_table \ + -v IFNDEF_NAME=UNICODE_TABLE_ISO8859_8_H -f mk_sb_tbl.awk 8859-8.TXT > $@ + +unicode_table_iso8859_9.h: mk_sb_tbl.awk + $(AWK) -v TABLE_NAME=iso8859_9_ucs_table \ + -v IFNDEF_NAME=UNICODE_TABLE_ISO8859_9_H -f mk_sb_tbl.awk 8859-9.TXT > $@ + +unicode_table_iso8859_10.h: mk_sb_tbl.awk + $(AWK) -v TABLE_NAME=iso8859_10_ucs_table \ + -v IFNDEF_NAME=UNICODE_TABLE_ISO8859_10_H -f mk_sb_tbl.awk 8859-10.TXT > $@ + +unicode_table_iso8859_11.h: mk_sb_tbl.awk + $(AWK) -v TABLE_NAME=iso8859_11_ucs_table \ + -v IFNDEF_NAME=UNICODE_TABLE_ISO8859_11_H -f mk_sb_tbl.awk 8859-11.TXT > $@ + +unicode_table_iso8859_13.h: mk_sb_tbl.awk + $(AWK) -v TABLE_NAME=iso8859_13_ucs_table \ + -v IFNDEF_NAME=UNICODE_TABLE_ISO8859_13_H -f mk_sb_tbl.awk 8859-13.TXT > $@ + +unicode_table_iso8859_14.h: mk_sb_tbl.awk + $(AWK) -v TABLE_NAME=iso8859_14_ucs_table \ + -v IFNDEF_NAME=UNICODE_TABLE_ISO8859_14_H -f mk_sb_tbl.awk 8859-14.TXT > $@ + +unicode_table_iso8859_15.h: mk_sb_tbl.awk + $(AWK) -v TABLE_NAME=iso8859_15_ucs_table \ + -v IFNDEF_NAME=UNICODE_TABLE_ISO8859_15_H -f mk_sb_tbl.awk 8859-15.TXT > $@ + +unicode_table_iso8859_16.h: mk_sb_tbl.awk + $(AWK) -v TABLE_NAME=iso8859_16_ucs_table \ + -v IFNDEF_NAME=UNICODE_TABLEISO8859_16_H -f mk_sb_tbl.awk 8859-16.TXT > $@ + +EmojiSources.txt : + $(FETCH_VIA_FTP) ftp://ftp.unicode.org/Public/UNIDATA/$@ + +emoji2uni.h : mk_emoji_tbl.pl + $(PERL) mk_emoji_tbl.pl EmojiSources.txt + +unidata: 8859-1.TXT 8859-2.TXT 8859-3.TXT 8859-4.TXT 8859-5.TXT 8859-6.TXT \ +8859-7.TXT 8859-8.TXT 8859-9.TXT 8859-10.TXT 8859-11.TXT 8859-13.TXT \ +8859-14.TXT 8859-15.TXT 8859-16.TXT EmojiSources.txt + +.PHONY: unidata diff --git a/ext/mbstring/libmbfl/filters/cp932_table.h b/ext/mbstring/libmbfl/filters/cp932_table.h new file mode 100644 index 0000000..d8cbb7f --- /dev/null +++ b/ext/mbstring/libmbfl/filters/cp932_table.h @@ -0,0 +1,95 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ + +#ifndef CP932_TABLE_H +#define CP932_TABLE_H + +/* + * cp932 table + */ +static const unsigned short cp932ext3_eucjp_table[] = { + /* ku 115 */ + 0xF3F3,0xF3F4,0xF3F5,0xF3F6,0xF3F7,0xF3F8,0xF3F9,0xF3FA, + 0xF3FB,0xF3FC,0xF3FD,0xF3FE,0xF4A1,0xF4A2,0xF4A3,0xF4A4, + 0xF4A5,0xF4A6,0xF4A7,0xF4A8,0x224C,0xA2C3,0xF4A9,0xF4AA, + 0xF4AB,0xF4AC,0xF4AD,0x2268,0xD4E3,0xDCDF,0xE4E9,0xE3F8, + 0xD9A1,0xB1BB,0xF4AE,0xC2AD,0xC3FC,0xE4D0,0xC2BF,0xBCF4, + 0xB0A9,0xB0C8,0xF4AF,0xB0D2,0xB0D4,0xB0E3,0xB0EE,0xB1A7, + 0xB1A3,0xB1AC,0xB1A9,0xB1BE,0xB1DF,0xB1D8,0xB1C8,0xB1D7, + 0xB1E3,0xB1F4,0xB1E1,0xB2A3,0xF4B0,0xB2BB,0xB2E6,0xB2ED, + 0xB2F5,0xB2FC,0xF4B1,0xB3B5,0xB3D8,0xB3DB,0xB3E5,0xB3EE, + 0xB3FB,0xF4B2,0xF4B3,0xB4C0,0xB4C7,0xB4D0,0xB4DE,0xF4B4, + 0xB5AA,0xF4B5,0xB5AF,0xB5C4,0xB5E8,0xF4B6,0xB7C2,0xB7E4, + 0xB7E8,0xB7E7,0xF4B7,0xF4B8,0xF4B9,0xB8CE, + + /* ku 116 */ + 0xB8E1,0xB8F5,0xB8F7,0xB8F8,0xB8FC,0xB9AF,0xB9B7,0xBABE, + 0xBADB,0xCDAA,0xBAE1,0xF4BA,0xBAEB,0xBBB3,0xBBB8,0xF4BB, + 0xBBCA,0xF4BC,0xF4BD,0xBBD0,0xBBDE,0xBBF4,0xBBF5,0xBBF9, + 0xBCE4,0xBCED,0xBCFE,0xF4BE,0xBDC2,0xBDE7,0xF4BF,0xBDF0, + 0xBEB0,0xBEAC,0xF4C0,0xBEB3,0xBEBD,0xBECD,0xBEC9,0xBEE4, + 0xBFA8,0xBFC9,0xC0C4,0xC0E4,0xC0F4,0xC1A6,0xF4C1,0xC1F5, + 0xC1FC,0xF4C2,0xC1F8,0xC2AB,0xC2A1,0xC2A5,0xF4C3,0xC2B8, + 0xC2BA,0xF4C4,0xC2C4,0xC2D2,0xC2D7,0xC2DB,0xC2DE,0xC2ED, + 0xC2F0,0xF4C5,0xC3A1,0xC3B5,0xC3C9,0xC3B9,0xF4C6,0xC3D8, + 0xC3FE,0xF4C7,0xC4CC,0xF4C8,0xC4D9,0xC4EA,0xC4FD,0xF4C9, + 0xC5A7,0xC5B5,0xC5B6,0xF4CA,0xC5D5,0xC6B8,0xC6D7,0xC6E0, + 0xC6EA,0xC6E3,0xC7A1,0xC7AB,0xC7C7,0xC7C3, + + /* ku 117 */ + 0xC7CB,0xC7CF,0xC7D9,0xF4CB,0xF4CC,0xC7E6,0xC7EE,0xC7FC, + 0xC7EB,0xC7F0,0xC8B1,0xC8E5,0xC8F8,0xC9A6,0xC9AB,0xC9AD, + 0xF4CD,0xC9CA,0xC9D3,0xC9E9,0xC9E3,0xC9FC,0xC9F4,0xC9F5, + 0xF4CE,0xCAB3,0xCABD,0xCAEF,0xCAF1,0xCBAE,0xF4CF,0xCBCA, + 0xCBE6,0xCBEA,0xCBF0,0xCBF4,0xCBEE,0xCCA5,0xCBF9,0xCCAB, + 0xCCAE,0xCCAD,0xCCB2,0xCCC2,0xCCD0,0xCCD9,0xF4D0,0xCDBB, + 0xF4D1,0xCEBB,0xF4D2,0xCEBA,0xCEC3,0xF4D3,0xCEF2,0xB3DD, + 0xCFD5,0xCFE2,0xCFE9,0xCFED,0xF4D4,0xF4D5,0xF4D6,0xF4D7, + 0xD0E5,0xF4D8,0xD0E9,0xD1E8,0xF4D9,0xF4DA,0xD1EC,0xD2BB, + 0xF4DB,0xD3E1,0xD3E8,0xD4A7,0xF4DC,0xF4DD,0xD4D4,0xD4F2, + 0xD5AE,0xF4DE,0xD7DE,0xF4DF,0xD8A2,0xD8B7,0xD8C1,0xD8D1, + 0xD8F4,0xD9C6,0xD9C8,0xD9D1,0xF4E0,0xF4E1, + + /* ku 118 */ + 0xF4E2,0xF4E3,0xF4E4,0xDCD3,0xDDC8,0xDDD4,0xDDEA,0xDDFA, + 0xDEA4,0xDEB0,0xF4E5,0xDEB5,0xDECB,0xF4E6,0xDFB9,0xF4E7, + 0xDFC3,0xF4E8,0xF4E9,0xE0D9,0xF4EA,0xF4EB,0xE1E2,0xF4EC, + 0xF4ED,0xF4EE,0xE2C7,0xE3A8,0xE3A6,0xE3A9,0xE3AF,0xE3B0, + 0xE3AA,0xE3AB,0xE3BC,0xE3C1,0xE3BF,0xE3D5,0xE3D8,0xE3D6, + 0xE3DF,0xE3E3,0xE3E1,0xE3D4,0xE3E9,0xE4A6,0xE3F1,0xE3F2, + 0xE4CB,0xE4C1,0xE4C3,0xE4BE,0xF4EF,0xE4C0,0xE4C7,0xE4BF, + 0xE4E0,0xE4DE,0xE4D1,0xF4F0,0xE4DC,0xE4D2,0xE4DB,0xE4D4, + 0xE4FA,0xE4EF,0xE5B3,0xE5BF,0xE5C9,0xE5D0,0xE5E2,0xE5EA, + 0xE5EB,0xF4F1,0xF4F2,0xF4F3,0xE6E8,0xE6EF,0xE7AC,0xF4F4, + 0xE7AE,0xF4F5,0xE7B1,0xF4F6,0xE7B2,0xE8B1,0xE8B6,0xF4F7, + 0xF4F8,0xE8DD,0xF4F9,0xF4FA,0xE9D1,0xF4FB, + + /* ku 119 */ + 0xE9ED,0xEACD,0xF4FC,0xEADB,0xEAE6,0xEAEA,0xEBA5,0xEBFB, + 0xEBFA,0xF4FD,0xECD6,0xF4FE +}; + +static const int cp932ext3_eucjp_table_size = (sizeof (cp932ext3_eucjp_table) / sizeof (unsigned short)); + +#endif /* CP932_TABLE_H */ diff --git a/ext/mbstring/libmbfl/filters/emoji2uni.h b/ext/mbstring/libmbfl/filters/emoji2uni.h new file mode 100644 index 0000000..37f44c5 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/emoji2uni.h @@ -0,0 +1,1227 @@ +static const int mb_tbl_code2uni_docomo1_min = 0x28c2; +static const int mb_tbl_code2uni_docomo1_max = 0x29db; + +static const unsigned short mb_tbl_code2uni_docomo1[] = { // 0x28c2 - 0x29db + 0x2600, 0x2601, 0x2614, 0x26c4, + 0x26a1, 0xf300, 0xf301, 0xf302, + 0x2648, 0x2649, 0x264a, 0x264b, + 0x264c, 0x264d, 0x264e, 0x264f, + 0x2650, 0x2651, 0x2652, 0x2653, + 0xf3bd, 0x26be, 0x26f3, 0xf3be, + 0x26bd, 0xf3bf, 0xf3c0, 0xf3c1, + 0xf4df, 0xf683, 0x24c2, 0xf684, + 0xf697, 0xf699, 0xf68c, 0xf6a2, + 0x2708, 0xf3e0, 0xf3e2, 0xf3e3, + 0xf3e5, 0xf3e6, 0xf3e7, 0xf3e8, + 0xf3ea, 0x26fd, 0xf17f, 0xf6a5, + 0xf6bb, 0xf374, 0x2615, 0xf378, + 0xf37a, 0xf354, 0xf460, 0x2702, + 0xf3a4, 0xf3a5, 0x2197, 0xf3a0, + 0xf3a7, 0xf3a8, 0xf3a9, 0xf3aa, + 0xf3ab, 0xf6ac, 0xf6ad, 0xf4f7, + 0xf45c, 0xf4d6, 0xf380, 0xf381, + 0xf382, 0x260e, 0xf4f1, 0xf4dd, + 0xf4fa, 0xf3ae, 0xf4bf, 0x2665, + 0x2660, 0x2666, 0x2663, 0xf440, + 0xf442, 0x270a, 0x270c, 0x270b, + 0x2198, 0x2196, 0xf463, 0xf45f, + 0xf453, 0x267f, 0xf311, 0xf314, + 0xf313, 0xf319, 0xf315, 0xf436, + 0xf431, 0x26f5, 0xf384, 0x2199, + 0xEE16, 0xEE17, 0xEE18, 0xEE19, + 0xEE1A, 0xEE1B, 0xf3ac, 0xf45d, + 0x2712, 0xEE1C, 0xEE1D, 0xf464, + 0xf4ba, 0xf303, 0xEE1E, 0xEE1F, + 0xEE20, 0xf51c, 0xf51b, 0xf51a, + 0x23f0, 0xEE21, 0xEE22, 0xEE23, + 0xEE24, 0xEE25, 0xEE26, 0xEE27, + 0xEE28, 0xEE29, 0xEE2A, 0xEE2B, + 0xEE2C, 0xEE2D, 0xEE2E, 0xEE2F, + 0xEE30, 0xEE31, 0xEE32, 0xEE33, + 0xf4f2, 0xf4e9, 0xf4e0, 0xEE10, + 0xEE11, 0x2709, 0xEE12, 0xEE13, + 0xf4b4, 0xf193, 0xf194, 0xf511, + 0x21a9, 0xf191, 0xf50d, 0xf195, + 0xf6a9, 0x27bf, 0x0023, 0xE82D, + 0x0031, 0x0032, 0x0033, 0x0034, + 0x0035, 0x0036, 0x0037, 0x0038, + 0x0039, 0x0030, 0x2764, 0xf493, + 0xf494, 0xf495, 0xf603, 0xf620, + 0xf61e, 0xf616, 0xf635, 0x2934, + 0xf3b5, 0x2668, 0xf4a0, 0xf48b, + 0x2728, 0xf4a1, 0xf4a2, 0xf44a, + 0xf4a3, 0xf3b6, 0x2935, 0xf4a4, + 0x2757, 0x2049, 0x203c, 0xf4a5, + 0xf4a6, 0xf4a7, 0xf4a8, 0x3030, + 0x27b0, 0xf197, 0xEE14, 0xEE15, + 0xf455, 0xf45b, 0xf484, 0xf456, + 0xf3c2, 0xf514, 0xf6aa, 0xf4b0, + 0xf4bb, 0xf48c, 0xf527, 0x270f, + 0xf451, 0xf48d, 0x23f3, 0xf6b2, + 0xf375, 0x231a, 0xf614, 0xf60c, + 0xf605, 0xf613, 0xf621, 0xf612, + 0xf60d, 0xf44d, 0xf61c, 0xf609, + 0xf606, 0xf623, 0xf60f, 0xf62d, + 0xf622, 0xf196, 0xf4ce, 0x00a9, + 0x2122, 0xf3c3, 0x3299, 0x267b, + 0x00ae, 0x26a0, 0xf232, 0xf233, + 0xf234, 0xf235, 0x2194, 0x2195, + 0xf3eb, 0xf30a, 0xf5fb, 0xf340, + 0xf352, 0xf337, 0xf34c, 0xf34e, + 0xf331, 0xf341, 0xf338, 0xf359, + 0xf370, 0xf376, 0xf35c, 0xf35e, + 0xf40c, 0xf424, 0xf427, 0xf41f, + 0xf60b, 0xf601, 0xf434, 0xf437, + 0xf377, 0xf631, }; +static const int mb_tbl_code2uni_kddi1_min = 0x24b8; +static const int mb_tbl_code2uni_kddi1_max = 0x25c6; + +static const unsigned short mb_tbl_code2uni_kddi1[] = { // 0x24b8 - 0x25c6 + 0xf342, 0xf4bc, 0x26f2, 0x26fa, + 0xf004, 0xf19a, 0xf3c6, 0xf422, + 0xf1ea, 0xf1f7, 0xf6a7, 0xf6c0, + 0xf38c, 0xf306, 0xf423, 0xf4b9, + 0xf46e, 0xf3e3, 0xf3e5, 0xf3eb, + 0xf3e8, 0xf6a2, 0xf51e, 0xf4f6, + 0xf192, 0xf239, 0xf202, 0xf194, + 0xf235, 0xf233, 0xf22f, 0xf23a, + 0xf446, 0xf447, 0xf52e, 0xf4f3, + 0xf4f4, 0xf4dd, 0xf454, 0xf33a, + 0xf490, 0xf335, 0xf376, 0xf37b, + 0x3297, 0xf48a, 0xf388, 0xf389, + 0xEE42, 0xf452, 0xf462, 0xf485, + 0xf487, 0xf488, 0xf458, 0xf459, + 0x2665, 0xf496, 0xf499, 0xf49a, + 0xf49b, 0xf49c, 0x2728, 0xf3bf, + 0x2b55, 0xf375, 0xf35e, 0xf366, + 0xf35f, 0xf361, 0xf358, 0xf35a, + 0xf35d, 0xf35b, 0xf362, 0xf363, + 0xf34e, 0xf34a, 0xf345, 0xf346, + 0xf371, 0xf372, 0xf60f, 0xf614, + 0xf624, 0xf623, 0xf616, 0xf62a, + 0xf60c, 0xf628, 0xf637, 0xf633, + 0xf612, 0xf632, 0xf630, 0xf3bc, + 0xf60a, 0xf61a, 0xf618, 0xf443, + 0xf444, 0xf64f, 0xf44f, 0xf44c, + 0xf44e, 0xf44b, 0xf645, 0xf646, + 0xf647, 0xf491, 0xf46f, 0xf3ba, + 0xf3b1, 0xf3ca, 0xf692, 0xf691, + 0xf693, 0xf3a2, 0xf38d, 0xf38e, + 0xf393, 0xf392, 0xf38f, 0xf302, + 0xf470, 0xf367, 0xf387, 0xf41a, + 0xf390, 0xf383, 0xf391, 0xf385, + 0xf303, 0xf308, 0xf3e9, 0xf305, + 0xf3a9, 0xf3ec, 0xf3ef, 0xf3f0, + 0xf3ed, 0xf1eb, 0xf1e9, 0xf1ee, + 0xf1ec, 0xf1e8, 0xf1f0, 0xf471, + 0xf472, 0xf473, 0xf474, 0xf475, + 0xf476, 0xf477, 0xf478, 0xf42c, + 0xf483, 0xf420, 0xf41b, 0xf418, + 0xf428, 0xf42e, 0xf40d, 0xf414, + 0xf417, 0xf42b, 0xf170, 0xf171, + 0xf17e, 0xf18e, 0xf463, 0xf45f, + 0xf6a9, 0x2934, 0x2935, 0x2049, + 0x203c, 0x27b0, 0xf348, 0xf34d, + 0xf347, 0xf34c, 0xf33d, 0xf344, + 0xf330, 0xf351, 0xf360, 0xf355, + 0xf357, 0xf38b, 0xf379, 0xf432, + 0xf3b9, 0xf3c4, 0xf3a3, 0xf3b3, + 0xf479, 0xf47a, 0xf43c, 0xf445, + 0xf43d, 0xf33c, 0xf368, 0xf369, + 0xf36a, 0xf36b, 0xf36c, 0xf36d, + 0xf648, 0xf64a, 0xf649, 0xf30b, + 0xf49d, 0xf524, 0xf36e, 0xf41d, + 0xf41e, 0xf36f, 0xf34f, 0xf4b8, + 0xf4ab, 0xf621, 0xf63e, 0xf30c, + 0xf63d, 0xf63a, 0xf4e9, 0xf639, + 0xf602, 0xf63b, 0xf640, 0xf629, + 0xf63f, 0xf622, 0xf63c, 0xf457, + 0xf5ff, 0xf689, 0xf3b4, 0xf0cf, + 0xf364, 0xf4e7, 0xf6b6, 0xf6a8, + 0xEE43, 0xf493, 0xf425, 0xf456, + 0xf48c, 0x267b, 0x2194, 0x2195, + 0xf30a, 0xf331, 0xf40c, 0xf638, + 0xf601, 0xEE44, 0xf33f, 0x270a, + 0x0023, 0xf64b, 0xf64c, 0xf64d, + 0xf64e, 0xEE45, 0xEE46, 0xEE47, + 0xEE48, 0xEE49, 0xEE4A}; +static const int mb_tbl_code2uni_kddi2_min = 0x26ec; +static const int mb_tbl_code2uni_kddi2_max = 0x2863; + +static const unsigned short mb_tbl_code2uni_kddi2[] = { // 0x26ec - 0x2863 + 0xf320, 0xf300, 0xf6a5, 0xf3c3, + 0x2747, 0xf3a1, 0xf3b0, 0xf38a, + 0xf433, 0xf603, 0xf620, 0xf62d, + 0xf62b, 0xf4a4, 0xf4a1, 0xf494, + 0xf495, 0x2734, 0xf4a3, 0xf525, + 0x23f3, 0xf6ac, 0xf6ad, 0x267f, + 0xf530, 0x26a0, 0x2757, 0x2753, + 0x26d4, 0x26c4, 0xf319, 0x26a1, + 0x2600, 0xf31b, 0x2744, 0x2b50, + 0x2614, 0x2601, 0x26c5, 0x2648, + 0x2649, 0x264a, 0x264b, 0x264c, + 0x264d, 0x264e, 0x264f, 0x2650, + 0x2651, 0x2652, 0x2653, 0x26ce, + 0xf45c, 0xf4d4, 0xf3ab, 0xf4d6, + 0xf4ce, 0x270f, 0xf4d0, 0xf3e7, + 0xf3ea, 0xf6bb, 0xf17f, 0xf68f, + 0xf4e1, 0x2693, 0xf3e6, 0xf3e0, + 0xf374, 0xf3e2, 0xf6b2, 0xf68c, + 0xf685, 0xf697, 0xf69a, 0x2708, + 0x26f5, 0xf683, 0x26bd, 0xf3be, + 0xf3c2, 0xf3c1, 0x26be, 0xf3c8, + 0x2668, 0xf3ee, 0xf3ac, 0xf309, + 0xf5fc, 0xf377, 0xf378, 0xf37a, + 0xf356, 0xf3af, 0xf3ae, 0xf4b0, + 0xf3b2, 0xf384, 0xf338, 0xf47b, + 0xf1ef, 0xf349, 0xf341, 0xf381, + 0xf370, 0xf373, 0xf352, 0xf421, + 0xf353, 0xf359, 0xf354, 0xf430, + 0xf434, 0xf435, 0xf438, 0xf431, + 0xf427, 0xf41c, 0xf437, 0xf429, + 0xf424, 0xf436, 0xf334, 0xf33b, + 0xf337, 0xf4a2, 0xf4a7, 0xf61c, + 0xf198, 0xf4aa, 0xf498, 0xf48b, + 0xf47e, 0xf365, 0xf43e, 0xf47f, + 0xf4ae, 0x3299, 0xf4af, 0xf44a, + 0xf4a8, 0xf4a9, 0x261d, 0xf250, + 0xf480, 0xf44d, 0xf469, 0x263a, + 0xf468, 0xf4ac, 0xf453, 0xf448, + 0xf449, 0xf46a, 0xf4fa, 0xf3a4, + 0xf45b, 0xf3b6, 0xf3b8, 0xf3bb, + 0xf3a7, 0xf484, 0xf52b, 0xf486, + 0xf4bf, 0xf45a, 0xf47d, 0xf199, + 0xf489, 0xf50a, 0xf514, 0xf340, + 0xf48d, 0xf4f7, 0x2702, 0xf3a5, + 0xf50d, 0xf511, 0xf460, 0xf4ea, + 0xf512, 0xf4db, 0xf4de, 0xf4e6, + 0xf4e0, 0x2709, 0x0031, 0x0032, + 0x0033, 0x0034, 0x0035, 0x0036, + 0x0037, 0x0038, 0x0039, 0xf51f, + 0xE82D, 0x25c0, 0x25b6, 0x23ea, + 0x23e9, 0x25ab, 0x25aa, 0x2139, + 0x25fd, 0x25fe, 0xf538, 0xf539, + 0x25fb, 0x25fc, 0x26aa, 0x26ab, + 0x2795, 0x2796, 0x2733, 0x2b06, + 0x2b07, 0xf6ab, 0xf53d, 0xf53c, + 0x23ec, 0x23eb, 0xf536, 0xf537, + 0x2b1c, 0x2b1b, 0xf534, 0xf535, + 0x2196, 0x2198, 0x2122, 0x2716, + 0x274c, 0x274e, 0x27a1, 0x2b05, + 0x2797, 0x2197, 0x2199, 0x2714, + 0x00a9, 0x00ae, 0xf53a, 0xf53b, + 0x21aa, 0x21a9, 0x2705, 0xf4dc, + 0xf4cd, 0xf4c3, 0xf4be, 0xf4c5, + 0xf4cb, 0xf4d7, 0xf4d8, 0xf4d9, + 0xf4d5, 0xf4c4, 0xf4c6, 0xf4d3, + 0xf4c7, 0xf4cc, 0xf4d2, 0xf4da, + 0xf4cf, 0x26fd, 0xf5fe, 0xf1fa, + 0xf4ca, 0xf4c8, 0xf4c9, 0xEE40, + 0xf193, 0xf4b2, 0x231a, 0x231b, + 0xf4b3, 0xf4b4, 0xf4f9, 0xf52a, + 0xf4fc, 0xf529, 0xf4bd, 0xf526, + 0xf50b, 0xf4b5, 0xE83C, 0xf527, + 0xf4f1, 0xf50c, 0xf517, 0xf4f0, + 0x2003, 0x2002, 0x2005, 0xf4c1, + 0xf4c2, 0xf4e8, 0xf4e4, 0xf4e5, + 0x23f0, 0x2764, 0x260e, 0x2615, + 0xf301, 0x26f3, 0xf3c0, 0xf4df, + 0xf3a8, 0xf3ad, 0xf3aa, 0xf380, + 0xf382, 0x2660, 0x2666, 0x2663, + 0xf440, 0xf442, 0x270c, 0x270b, + 0xf311, 0xf314, 0xf313, 0xf191, + 0x0030, 0xf197, 0xf635, 0xf49e, + 0xf4a5, 0xf4a6, 0xEE41, 0xf30f, + 0xf35c, 0xEB89, 0xf510, 0xf520, + 0xf521, 0xf522, 0xf523, 0xf251, + 0x2611, 0x2712, 0xf518, 0xf50e, + 0xf519, 0xf516, 0xf4f2, 0xf3e1, + 0xf4eb, 0xf4d1, 0xf50f, 0xf503, + 0xf195, 0xf455, 0xf45e, 0xf4bb, + 0xf4fb, 0xf339, 0x26ea, 0xf687, + 0xf5fb, 0xf3b5, 0xf47c, 0xf42f, + 0xf43b, 0xf42d, 0xf609, 0xf60d, + 0xf631, 0xf613, 0xf419, 0xf680, + 0xf451, 0xf48f, 0xf528, 0xf386, + }; +static const int mb_tbl_code2uni_sb1_min = 0x27a9; +static const int mb_tbl_code2uni_sb1_max = 0x2861; + +static const unsigned short mb_tbl_code2uni_sb1[] = { // 0x27a9 - 0x2861 + 0xf4eb, 0xf4ee, 0xf4e9, 0xf4f2, + 0xf61c, 0xf60d, 0xf631, 0xf613, + 0xf435, 0xf419, 0xf437, 0xf47d, + 0xf680, 0xf451, 0xf4a1, 0xf340, + 0xf48f, 0xf381, 0xf52b, 0xf50d, + 0xf3c3, 0xf528, 0xf386, 0xf341, + 0xf342, 0xf47f, 0xf47b, 0xf480, + 0xf525, 0xf4bc, 0xf4ba, 0xf354, + 0x26f2, 0x26fa, 0x2668, 0xf3a1, + 0xf3ab, 0xf4bf, 0xf4c0, 0xf4fb, + 0xf4fc, 0xf4fa, 0xf47e, 0x303d, + 0xf004, 0xf19a, 0xf4b0, 0xf3af, + 0xf3c6, 0xf3c1, 0xf3b0, 0xf40e, + 0xf6a4, 0xf6b2, 0xf6a7, 0xf6b9, + 0xf6ba, 0xf6bc, 0xf489, 0xf4a4, + 0x26a1, 0xf460, 0xf6c0, 0xf6bd, + 0xf50a, 0xf4e2, 0xf38c, 0xf512, + 0xf513, 0xf306, 0xf373, 0xf4d6, + 0xf4b1, 0xf4b9, 0xf4e1, 0xf4aa, + 0xf3e6, 0xf6a5, 0xf17f, 0xf68f, + 0xf6bb, 0xf46e, 0xf3e3, 0xf3e7, + 0xf3e5, 0xf3ea, 0xf3eb, 0xf3e8, + 0xf68c, 0xf695, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xf6b6, + 0xf6a2, 0xf201, 0xf49f, 0x2734, + 0x2733, 0xf51e, 0xf6ad, 0xf530, + 0x267f, 0xf4f6, 0x2665, 0x2666, + 0x2660, 0x2663, 0x0023, 0x27bf, + 0xf195, 0xf199, 0xf192, 0xf236, + 0xf21a, 0xf237, 0xf238, 0xf534, + 0xf532, 0xf533, 0x0031, 0x0032, + 0x0033, 0x0034, 0x0035, 0x0036, + 0x0037, 0x0038, 0x0039, 0x0030, + 0xf250, 0xf239, 0xf202, 0xf194, + 0xf235, 0xf233, 0xf22f, 0xf23a, + 0xf446, 0xf447, 0xf448, 0xf449, + 0x2b06, 0x2b07, 0x27a1, 0x2b05, + 0x2197, 0x2196, 0x2198, 0x2199, + 0x25b6, 0x25c0, 0x23e9, 0x23ea, + 0xf52f, 0x2648, 0x2649, 0x264a, + 0x264b, 0x264c, 0x264d, 0x264e, + 0x264f, 0x2650, 0x2651, 0x2652, + 0x2653, 0x26ce, 0xf51d, 0xf197, + 0x00a9, 0x00ae, 0xf4f3, 0xf4f4, + 0x26a0, 0xf481, 0xEE77, 0xEE78, + 0xEE79, 0xEE7A, 0xEE7B, 0xEE7C, + 0xEE7D}; + +static const int mb_tbl_code2uni_sb2_min = 0x2921; +static const int mb_tbl_code2uni_sb2_max = 0x29cc; + +static const unsigned short mb_tbl_code2uni_sb2[] = { // 0x2921 - 0x29cc + 0xf466, 0xf467, 0xf48b, 0xf468, + 0xf469, 0xf455, 0xf45f, 0xf4f7, + 0x260e, 0xf4f1, 0xf4e0, 0xf4bb, + 0xf44a, 0xf44d, 0x261d, 0x270a, + 0x270c, 0x270b, 0xf3bf, 0x26f3, + 0xf3be, 0x26be, 0xf3c4, 0x26bd, + 0xf41f, 0xf434, 0xf697, 0x26f5, + 0x2708, 0xf683, 0xf685, 0x2753, + 0x2757, 0x2764, 0xf494, 0xf550, + 0xf551, 0xf552, 0xf553, 0xf554, + 0xf555, 0xf556, 0xf557, 0xf558, + 0xf559, 0xf55a, 0xf55b, 0xf338, + 0xf531, 0xf339, 0xf384, 0xf48d, + 0xf48e, 0xf3e0, 0x26ea, 0xf3e2, + 0xf689, 0x26fd, 0xf5fb, 0xf3a4, + 0xf3a5, 0xf3b5, 0xf511, 0xf3b7, + 0xf3b8, 0xf3ba, 0xf374, 0xf378, + 0x2615, 0xf370, 0xf37a, 0x26c4, + 0x2601, 0x2600, 0x2614, 0xf319, + 0xf304, 0xf47c, 0xf431, 0xf42f, + 0xf43b, 0xf436, 0xf42d, 0xf433, + 0xf427, 0xf60a, 0xf603, 0xf61e, + 0xf620, 0xf4a9, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xf4dd, + 0xf454, 0xf33a, 0xf337, 0xf33b, + 0xf490, 0xf334, 0xf335, 0xf6be, + 0xf3a7, 0xf376, 0xf37b, 0x3297, + 0xf6ac, 0xf48a, 0xf388, 0xf4a3, + 0xf389, 0x2702, 0xf380, 0x3299, + 0xf4bd, 0xf4e3, 0xf452, 0xf457, + 0xf461, 0xf462, 0xf484, 0xf485, + 0xf486, 0xf487, 0xf488, 0xf458, + 0xf459, 0xf45c, 0xf3ac, 0xf514, + 0xf3b6, 0xf493, 0xf497, 0xf498, + 0xf499, 0xf49a, 0xf49b, 0xf49c, + 0x2728, 0x2b50, 0xf4a8, 0xf4a6, + 0x2b55, 0x274c, 0xf4a2, 0xf31f, + 0x2754, 0x2755, 0xf375, 0xf35e, + 0xf366, 0xf35f, 0xf361, 0xf358, + 0xf35a, 0xf35d, 0xf35c, 0xf35b, + 0xf359, 0xf362, 0xf363, 0xf34e, + 0xf34a, 0xf353, 0xf349, 0xf345, + 0xf346, 0xf382, 0xf371, 0xf372, + }; +static const int mb_tbl_code2uni_sb3_min = 0x2a99; +static const int mb_tbl_code2uni_sb3_max = 0x2b35; + +static const unsigned short mb_tbl_code2uni_sb3[] = { // 0x2a99 - 0x2b35 + 0xf625, 0xf60f, 0xf614, 0xf601, + 0xf609, 0xf623, 0xf616, 0xf62a, + 0xf61d, 0xf60c, 0xf628, 0xf637, + 0xf633, 0xf612, 0xf630, 0xf632, + 0xf62d, 0xf602, 0xf622, 0x263a, + 0xf604, 0xf621, 0xf61a, 0xf618, + 0xf440, 0xf443, 0xf442, 0xf444, + 0xf64f, 0xf44b, 0xf44f, 0xf44c, + 0xf44e, 0xf450, 0xf645, 0xf646, + 0xf491, 0xf647, 0xf64c, 0xf46b, + 0xf46f, 0xf3c0, 0xf3c8, 0xf3b1, + 0xf3ca, 0xf699, 0xf69a, 0xf692, + 0xf691, 0xf693, 0xf3a2, 0xf687, + 0xf684, 0xf38d, 0xf49d, 0xf38e, + 0xf393, 0xf392, 0xf38f, 0xf302, + 0xf492, 0xf30a, 0xf367, 0xf387, + 0xf41a, 0xf390, 0xf300, 0xf33e, + 0xf383, 0xf391, 0xf343, 0xf385, + 0xf305, 0xf307, 0xf303, 0xf308, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xf3e9, + 0xf3a8, 0xf3a9, 0xf3ec, 0xf3ef, + 0xf3f0, 0xf3a6, 0xf3ed, 0xf5fc, + 0xE4C5, 0xf1ef, 0xf1fa, 0xf1eb, + 0xf1e9, 0xf1ee, 0xf1ec, 0xf1ea, + 0xf1f7, 0xf1e8, 0xf1f0, 0xf471, + 0xf472, 0xf473, 0xf474, 0xf475, + 0xf476, 0xf477, 0xf478, 0xf5fd, + 0xf482, 0xf483, 0xf42c, 0xf426, + 0xf420, 0xf424, 0xf439, 0xf41b, + 0xf418, 0xf428, 0xf412, 0xf411, + 0xf43a, 0xf42e, 0xf430, 0xf40d, + 0xf414, 0xf417, 0xf42b, 0xf438, + 0xf170, 0xf171, 0xf18e, 0xf17e, + 0xf463, 0x2122, 0xEE70, 0xEE71, + 0xEE72, 0xEE73, 0xEE74, 0xEE75, + 0xEE76}; + + + +static const int mb_tbl_uni_docomo2code1_min = 0x0023; +static const int mb_tbl_uni_docomo2code1_max = 0x00ae; + +static const unsigned short mb_tbl_uni_docomo2code1_key[] = { // 0x0023 - 0x00ae + 0x0023, 0x0030, 0x0031, 0x0032, + 0x0033, 0x0034, 0x0035, 0x0036, + 0x0037, 0x0038, 0x0039, 0x00a9, + 0x00ae, }; + +static const unsigned short mb_tbl_uni_docomo2code1_value[] = { // 0x0023 - 0x00ae + 0x2964, 0x296f, 0x2966, 0x2967, + 0x2968, 0x2969, 0x296a, 0x296b, + 0x296c, 0x296d, 0x296e, 0x29b5, + 0x29ba, }; + +static const int mb_tbl_uni_docomo2code1_len = sizeof(mb_tbl_uni_docomo2code1_key)/sizeof(unsigned short); + +static const int mb_tbl_uni_docomo2code2_min = 0x203c; +static const int mb_tbl_uni_docomo2code2_max = 0x3299; + +static const unsigned short mb_tbl_uni_docomo2code2_key[] = { // 0x203c - 0x3299 + 0x203c, 0x2049, 0x2122, 0x2194, + 0x2195, 0x2196, 0x2197, 0x2198, + 0x2199, 0x21a9, 0x231a, 0x23f0, + 0x23f3, 0x24c2, 0x2600, 0x2601, + 0x260e, 0x2614, 0x2615, 0x2648, + 0x2649, 0x264a, 0x264b, 0x264c, + 0x264d, 0x264e, 0x264f, 0x2650, + 0x2651, 0x2652, 0x2653, 0x2660, + 0x2663, 0x2665, 0x2666, 0x2668, + 0x267b, 0x267f, 0x26a0, 0x26a1, + 0x26bd, 0x26be, 0x26c4, 0x26f3, + 0x26f5, 0x26fd, 0x2702, 0x2708, + 0x2709, 0x270a, 0x270b, 0x270c, + 0x270f, 0x2712, 0x2728, 0x2757, + 0x2764, 0x27b0, 0x27bf, 0x2934, + 0x2935, 0x3030, 0x3299, }; + +static const unsigned short mb_tbl_uni_docomo2code2_value[] = { // 0x203c - 0x3299 + 0x2988, 0x2987, 0x29b6, 0x29c0, + 0x29c1, 0x291b, 0x28fc, 0x291a, + 0x2929, 0x295e, 0x29a3, 0x293e, + 0x29a0, 0x28e0, 0x28c2, 0x28c3, + 0x290b, 0x28c4, 0x28f4, 0x28ca, + 0x28cb, 0x28cc, 0x28cd, 0x28ce, + 0x28cf, 0x28d0, 0x28d1, 0x28d2, + 0x28d3, 0x28d4, 0x28d5, 0x2912, + 0x2914, 0x2911, 0x2913, 0x297b, + 0x29b9, 0x291f, 0x29bb, 0x28c6, + 0x28da, 0x28d7, 0x28c5, 0x28d8, + 0x2927, 0x28ef, 0x28f9, 0x28e6, + 0x2957, 0x2917, 0x2919, 0x2918, + 0x299d, 0x2932, 0x297e, 0x2986, + 0x2970, 0x298e, 0x2963, 0x2979, + 0x2984, 0x298d, 0x29b8, }; + +static const int mb_tbl_uni_docomo2code2_len = sizeof(mb_tbl_uni_docomo2code2_key)/sizeof(unsigned short); + +static const int mb_tbl_uni_docomo2code3_min = 0x1f17f; +static const int mb_tbl_uni_docomo2code3_max = 0x1f6bb; + +static const unsigned short mb_tbl_uni_docomo2code3_key[] = { // 0x1f17f - 0x1f6bb + 0xf17f, 0xf191, 0xf193, 0xf194, + 0xf195, 0xf196, 0xf197, 0xf232, + 0xf233, 0xf234, 0xf235, 0xf300, + 0xf301, 0xf302, 0xf303, 0xf30a, + 0xf311, 0xf313, 0xf314, 0xf315, + 0xf319, 0xf331, 0xf337, 0xf338, + 0xf340, 0xf341, 0xf34c, 0xf34e, + 0xf352, 0xf354, 0xf359, 0xf35c, + 0xf35e, 0xf370, 0xf374, 0xf375, + 0xf376, 0xf377, 0xf378, 0xf37a, + 0xf380, 0xf381, 0xf382, 0xf384, + 0xf3a0, 0xf3a4, 0xf3a5, 0xf3a7, + 0xf3a8, 0xf3a9, 0xf3aa, 0xf3ab, + 0xf3ac, 0xf3ae, 0xf3b5, 0xf3b6, + 0xf3bd, 0xf3be, 0xf3bf, 0xf3c0, + 0xf3c1, 0xf3c2, 0xf3c3, 0xf3e0, + 0xf3e2, 0xf3e3, 0xf3e5, 0xf3e6, + 0xf3e7, 0xf3e8, 0xf3ea, 0xf3eb, + 0xf40c, 0xf41f, 0xf424, 0xf427, + 0xf431, 0xf434, 0xf436, 0xf437, + 0xf440, 0xf442, 0xf44a, 0xf44d, + 0xf451, 0xf453, 0xf455, 0xf456, + 0xf45b, 0xf45c, 0xf45d, 0xf45f, + 0xf460, 0xf463, 0xf464, 0xf484, + 0xf48b, 0xf48c, 0xf48d, 0xf493, + 0xf494, 0xf495, 0xf4a0, 0xf4a1, + 0xf4a2, 0xf4a3, 0xf4a4, 0xf4a5, + 0xf4a6, 0xf4a7, 0xf4a8, 0xf4b0, + 0xf4b4, 0xf4ba, 0xf4bb, 0xf4bf, + 0xf4ce, 0xf4d6, 0xf4dd, 0xf4df, + 0xf4e0, 0xf4e9, 0xf4f1, 0xf4f2, + 0xf4f7, 0xf4fa, 0xf50d, 0xf511, + 0xf514, 0xf51a, 0xf51b, 0xf51c, + 0xf527, 0xf5fb, 0xf601, 0xf603, + 0xf605, 0xf606, 0xf609, 0xf60b, + 0xf60c, 0xf60d, 0xf60f, 0xf612, + 0xf613, 0xf614, 0xf616, 0xf61c, + 0xf61e, 0xf620, 0xf621, 0xf622, + 0xf623, 0xf62d, 0xf631, 0xf635, + 0xf683, 0xf684, 0xf68c, 0xf697, + 0xf699, 0xf6a2, 0xf6a5, 0xf6a9, + 0xf6aa, 0xf6ac, 0xf6ad, 0xf6b2, + 0xf6bb, }; + +static const unsigned short mb_tbl_uni_docomo2code3_value[] = { // 0x1f17f - 0x1f6bb + 0x28f0, 0x295f, 0x295b, 0x295c, + 0x2961, 0x29b3, 0x298f, 0x29bc, + 0x29bd, 0x29be, 0x29bf, 0x28c7, + 0x28c8, 0x28c9, 0x2937, 0x29c3, + 0x2920, 0x2922, 0x2921, 0x2924, + 0x2923, 0x29ca, 0x29c7, 0x29cc, + 0x29c5, 0x29cb, 0x29c8, 0x29c9, + 0x29c6, 0x28f7, 0x29cd, 0x29d0, + 0x29d1, 0x29ce, 0x28f3, 0x29a2, + 0x29cf, 0x29da, 0x28f5, 0x28f6, + 0x2908, 0x2909, 0x290a, 0x2928, + 0x28fd, 0x28fa, 0x28fb, 0x28fe, + 0x28ff, 0x2900, 0x2901, 0x2902, + 0x2930, 0x290f, 0x297a, 0x2983, + 0x28d6, 0x28d9, 0x28db, 0x28dc, + 0x28dd, 0x2996, 0x29b7, 0x28e7, + 0x28e8, 0x28e9, 0x28ea, 0x28eb, + 0x28ec, 0x28ed, 0x28ee, 0x29c2, + 0x29d2, 0x29d5, 0x29d3, 0x29d4, + 0x2926, 0x29d8, 0x2925, 0x29d9, + 0x2915, 0x2916, 0x2981, 0x29ab, + 0x299e, 0x291e, 0x2992, 0x2995, + 0x2993, 0x2906, 0x2931, 0x291d, + 0x28f8, 0x291c, 0x2935, 0x2994, + 0x297d, 0x299b, 0x299f, 0x2971, + 0x2972, 0x2973, 0x297c, 0x297f, + 0x2980, 0x2982, 0x2985, 0x2989, + 0x298a, 0x298b, 0x298c, 0x2999, + 0x295a, 0x2936, 0x299a, 0x2910, + 0x29b4, 0x2907, 0x290d, 0x28de, + 0x2954, 0x2953, 0x290c, 0x2952, + 0x2905, 0x290e, 0x2960, 0x295d, + 0x2997, 0x293d, 0x293c, 0x293b, + 0x299c, 0x29c4, 0x29d7, 0x2974, + 0x29a6, 0x29ae, 0x29ad, 0x29d6, + 0x29a5, 0x29aa, 0x29b0, 0x29a9, + 0x29a7, 0x29a4, 0x2977, 0x29ac, + 0x2976, 0x2975, 0x29a8, 0x29b2, + 0x29af, 0x29b1, 0x29db, 0x2978, + 0x28df, 0x28e1, 0x28e4, 0x28e2, + 0x28e3, 0x28e5, 0x28f1, 0x2962, + 0x2998, 0x2903, 0x2904, 0x29a1, + 0x28f2, }; + +static const int mb_tbl_uni_docomo2code3_len = sizeof(mb_tbl_uni_docomo2code3_key)/sizeof(unsigned short); + +static const int mb_tbl_uni_kddi2code1_min = 0x0023; +static const int mb_tbl_uni_kddi2code1_max = 0x00ae; + +static const unsigned short mb_tbl_uni_kddi2code1_key[] = { // 0x0023 - 0x00ae + 0x0023, 0x0030, 0x0031, 0x0032, + 0x0033, 0x0034, 0x0035, 0x0036, + 0x0037, 0x0038, 0x0039, 0x00a9, + 0x00ae, }; + +static const unsigned short mb_tbl_uni_kddi2code1_value[] = { // 0x0023 - 0x00ae + 0x25bc, 0x2830, 0x27a6, 0x27a7, + 0x27a8, 0x27a9, 0x27aa, 0x27ab, + 0x27ac, 0x27ad, 0x27ae, 0x27dc, + 0x27dd, }; + +static const int mb_tbl_uni_kddi2code1_len = sizeof(mb_tbl_uni_kddi2code1_key)/sizeof(unsigned short); + +static const int mb_tbl_uni_kddi2code2_min = 0x2002; +static const int mb_tbl_uni_kddi2code2_max = 0x3299; + +static const unsigned short mb_tbl_uni_kddi2code2_key[] = { // 0x2002 - 0x3299 + 0x2002, 0x2003, 0x2005, 0x203c, + 0x2049, 0x2122, 0x2139, 0x2194, + 0x2195, 0x2196, 0x2197, 0x2198, + 0x2199, 0x21a9, 0x21aa, 0x231a, + 0x231b, 0x23e9, 0x23ea, 0x23eb, + 0x23ec, 0x23f0, 0x23f3, 0x25aa, + 0x25ab, 0x25b6, 0x25c0, 0x25fb, + 0x25fc, 0x25fd, 0x25fe, 0x2600, + 0x2601, 0x260e, 0x2611, 0x2614, + 0x2615, 0x261d, 0x263a, 0x2648, + 0x2649, 0x264a, 0x264b, 0x264c, + 0x264d, 0x264e, 0x264f, 0x2650, + 0x2651, 0x2652, 0x2653, 0x2660, + 0x2663, 0x2665, 0x2666, 0x2668, + 0x267b, 0x267f, 0x2693, 0x26a0, + 0x26a1, 0x26aa, 0x26ab, 0x26bd, + 0x26be, 0x26c4, 0x26c5, 0x26ce, + 0x26d4, 0x26ea, 0x26f2, 0x26f3, + 0x26f5, 0x26fa, 0x26fd, 0x2702, + 0x2705, 0x2708, 0x2709, 0x270a, + 0x270b, 0x270c, 0x270f, 0x2712, + 0x2714, 0x2716, 0x2728, 0x2733, + 0x2734, 0x2744, 0x2747, 0x274c, + 0x274e, 0x2753, 0x2757, 0x2764, + 0x2795, 0x2796, 0x2797, 0x27a1, + 0x27b0, 0x2934, 0x2935, 0x2b05, + 0x2b06, 0x2b07, 0x2b1b, 0x2b1c, + 0x2b50, 0x2b55, 0x3297, 0x3299, + }; + +static const unsigned short mb_tbl_uni_kddi2code2_value[] = { // 0x2002 - 0x3299 + 0x2811, 0x2810, 0x2812, 0x2568, + 0x2567, 0x27d2, 0x27b7, 0x25b2, + 0x25b3, 0x27d0, 0x27d9, 0x27d1, + 0x27da, 0x27e1, 0x27e0, 0x27fe, + 0x27ff, 0x27b4, 0x27b3, 0x27c9, + 0x27c8, 0x2818, 0x2700, 0x27b6, + 0x27b5, 0x27b2, 0x27b1, 0x27bc, + 0x27bd, 0x27b8, 0x27b9, 0x270c, + 0x2711, 0x281a, 0x2840, 0x2710, + 0x281b, 0x277a, 0x277f, 0x2713, + 0x2714, 0x2715, 0x2716, 0x2717, + 0x2718, 0x2719, 0x271a, 0x271b, + 0x271c, 0x271d, 0x271e, 0x2825, + 0x2827, 0x24f0, 0x2826, 0x2740, + 0x25b1, 0x2703, 0x272d, 0x2705, + 0x270b, 0x27be, 0x27bf, 0x273a, + 0x273e, 0x2709, 0x2712, 0x271f, + 0x2708, 0x2852, 0x24ba, 0x281d, + 0x2738, 0x24bb, 0x27f5, 0x279a, + 0x27e2, 0x2737, 0x27a5, 0x25bb, + 0x282b, 0x282a, 0x2725, 0x2841, + 0x27db, 0x27d3, 0x24f6, 0x27c2, + 0x26fd, 0x270e, 0x26f0, 0x27d4, + 0x27d5, 0x2707, 0x2706, 0x2819, + 0x27c0, 0x27c1, 0x27d8, 0x27d6, + 0x2569, 0x2565, 0x2566, 0x27d7, + 0x27c3, 0x27c4, 0x27cd, 0x27cc, + 0x270f, 0x24f8, 0x24e4, 0x2775, + }; + +static const int mb_tbl_uni_kddi2code2_len = sizeof(mb_tbl_uni_kddi2code2_key)/sizeof(unsigned short); + +static const int mb_tbl_uni_kddi2code3_min = 0x1f004; +static const int mb_tbl_uni_kddi2code3_max = 0x1f6c0; + +static const unsigned short mb_tbl_uni_kddi2code3_key[] = { // 0x1f004 - 0x1f6c0 + 0xf004, 0xf0cf, 0xf170, 0xf171, + 0xf17e, 0xf17f, 0xf18e, 0xf191, + 0xf192, 0xf193, 0xf194, 0xf195, + 0xf197, 0xf198, 0xf199, 0xf19a, + 0xf1e8, 0xf1e9, 0xf1ea, 0xf1eb, + 0xf1ec, 0xf1ee, 0xf1ef, 0xf1f0, + 0xf1f7, 0xf1fa, 0xf202, 0xf22f, + 0xf233, 0xf235, 0xf239, 0xf23a, + 0xf250, 0xf251, 0xf300, 0xf301, + 0xf302, 0xf303, 0xf305, 0xf306, + 0xf308, 0xf309, 0xf30a, 0xf30b, + 0xf30c, 0xf30f, 0xf311, 0xf313, + 0xf314, 0xf319, 0xf31b, 0xf320, + 0xf330, 0xf331, 0xf334, 0xf335, + 0xf337, 0xf338, 0xf339, 0xf33a, + 0xf33b, 0xf33c, 0xf33d, 0xf33f, + 0xf340, 0xf341, 0xf342, 0xf344, + 0xf345, 0xf346, 0xf347, 0xf348, + 0xf349, 0xf34a, 0xf34c, 0xf34d, + 0xf34e, 0xf34f, 0xf351, 0xf352, + 0xf353, 0xf354, 0xf355, 0xf356, + 0xf357, 0xf358, 0xf359, 0xf35a, + 0xf35b, 0xf35c, 0xf35d, 0xf35e, + 0xf35f, 0xf360, 0xf361, 0xf362, + 0xf363, 0xf364, 0xf365, 0xf366, + 0xf367, 0xf368, 0xf369, 0xf36a, + 0xf36b, 0xf36c, 0xf36d, 0xf36e, + 0xf36f, 0xf370, 0xf371, 0xf372, + 0xf373, 0xf374, 0xf375, 0xf376, + 0xf377, 0xf378, 0xf379, 0xf37a, + 0xf37b, 0xf380, 0xf381, 0xf382, + 0xf383, 0xf384, 0xf385, 0xf386, + 0xf387, 0xf388, 0xf389, 0xf38a, + 0xf38b, 0xf38c, 0xf38d, 0xf38e, + 0xf38f, 0xf390, 0xf391, 0xf392, + 0xf393, 0xf3a1, 0xf3a2, 0xf3a3, + 0xf3a4, 0xf3a5, 0xf3a7, 0xf3a8, + 0xf3a9, 0xf3aa, 0xf3ab, 0xf3ac, + 0xf3ad, 0xf3ae, 0xf3af, 0xf3b0, + 0xf3b1, 0xf3b2, 0xf3b3, 0xf3b4, + 0xf3b5, 0xf3b6, 0xf3b8, 0xf3b9, + 0xf3ba, 0xf3bb, 0xf3bc, 0xf3be, + 0xf3bf, 0xf3c0, 0xf3c1, 0xf3c2, + 0xf3c3, 0xf3c4, 0xf3c6, 0xf3c8, + 0xf3ca, 0xf3e0, 0xf3e1, 0xf3e2, + 0xf3e3, 0xf3e5, 0xf3e6, 0xf3e7, + 0xf3e8, 0xf3e9, 0xf3ea, 0xf3eb, + 0xf3ec, 0xf3ed, 0xf3ee, 0xf3ef, + 0xf3f0, 0xf40c, 0xf40d, 0xf414, + 0xf417, 0xf418, 0xf419, 0xf41a, + 0xf41b, 0xf41c, 0xf41d, 0xf41e, + 0xf420, 0xf421, 0xf422, 0xf423, + 0xf424, 0xf425, 0xf427, 0xf428, + 0xf429, 0xf42b, 0xf42c, 0xf42d, + 0xf42e, 0xf42f, 0xf430, 0xf431, + 0xf432, 0xf433, 0xf434, 0xf435, + 0xf436, 0xf437, 0xf438, 0xf43b, + 0xf43c, 0xf43d, 0xf43e, 0xf440, + 0xf442, 0xf443, 0xf444, 0xf445, + 0xf446, 0xf447, 0xf448, 0xf449, + 0xf44a, 0xf44b, 0xf44c, 0xf44d, + 0xf44e, 0xf44f, 0xf451, 0xf452, + 0xf453, 0xf454, 0xf455, 0xf456, + 0xf457, 0xf458, 0xf459, 0xf45a, + 0xf45b, 0xf45c, 0xf45e, 0xf45f, + 0xf460, 0xf462, 0xf463, 0xf468, + 0xf469, 0xf46a, 0xf46e, 0xf46f, + 0xf470, 0xf471, 0xf472, 0xf473, + 0xf474, 0xf475, 0xf476, 0xf477, + 0xf478, 0xf479, 0xf47a, 0xf47b, + 0xf47c, 0xf47d, 0xf47e, 0xf47f, + 0xf480, 0xf483, 0xf484, 0xf485, + 0xf486, 0xf487, 0xf488, 0xf489, + 0xf48a, 0xf48b, 0xf48c, 0xf48d, + 0xf48f, 0xf490, 0xf491, 0xf493, + 0xf494, 0xf495, 0xf496, 0xf498, + 0xf499, 0xf49a, 0xf49b, 0xf49c, + 0xf49d, 0xf49e, 0xf4a1, 0xf4a2, + 0xf4a3, 0xf4a4, 0xf4a5, 0xf4a6, + 0xf4a7, 0xf4a8, 0xf4a9, 0xf4aa, + 0xf4ab, 0xf4ac, 0xf4ae, 0xf4af, + 0xf4b0, 0xf4b2, 0xf4b3, 0xf4b4, + 0xf4b5, 0xf4b8, 0xf4b9, 0xf4bb, + 0xf4bc, 0xf4bd, 0xf4be, 0xf4bf, + 0xf4c1, 0xf4c2, 0xf4c3, 0xf4c4, + 0xf4c5, 0xf4c6, 0xf4c7, 0xf4c8, + 0xf4c9, 0xf4ca, 0xf4cb, 0xf4cc, + 0xf4cd, 0xf4ce, 0xf4cf, 0xf4d0, + 0xf4d1, 0xf4d2, 0xf4d3, 0xf4d4, + 0xf4d5, 0xf4d6, 0xf4d7, 0xf4d8, + 0xf4d9, 0xf4da, 0xf4db, 0xf4dc, + 0xf4dd, 0xf4de, 0xf4df, 0xf4e0, + 0xf4e1, 0xf4e4, 0xf4e5, 0xf4e6, + 0xf4e7, 0xf4e8, 0xf4e9, 0xf4ea, + 0xf4eb, 0xf4f0, 0xf4f1, 0xf4f2, + 0xf4f3, 0xf4f4, 0xf4f6, 0xf4f7, + 0xf4f9, 0xf4fa, 0xf4fb, 0xf4fc, + 0xf503, 0xf50a, 0xf50b, 0xf50c, + 0xf50d, 0xf50e, 0xf50f, 0xf510, + 0xf511, 0xf512, 0xf514, 0xf516, + 0xf517, 0xf518, 0xf519, 0xf51e, + 0xf51f, 0xf520, 0xf521, 0xf522, + 0xf523, 0xf524, 0xf525, 0xf526, + 0xf527, 0xf528, 0xf529, 0xf52a, + 0xf52b, 0xf52e, 0xf530, 0xf534, + 0xf535, 0xf536, 0xf537, 0xf538, + 0xf539, 0xf53a, 0xf53b, 0xf53c, + 0xf53d, 0xf5fb, 0xf5fc, 0xf5fe, + 0xf5ff, 0xf601, 0xf602, 0xf603, + 0xf609, 0xf60a, 0xf60c, 0xf60d, + 0xf60f, 0xf612, 0xf613, 0xf614, + 0xf616, 0xf618, 0xf61a, 0xf61c, + 0xf620, 0xf621, 0xf622, 0xf623, + 0xf624, 0xf628, 0xf629, 0xf62a, + 0xf62b, 0xf62d, 0xf630, 0xf631, + 0xf632, 0xf633, 0xf635, 0xf637, + 0xf638, 0xf639, 0xf63a, 0xf63b, + 0xf63c, 0xf63d, 0xf63e, 0xf63f, + 0xf640, 0xf645, 0xf646, 0xf647, + 0xf648, 0xf649, 0xf64a, 0xf64b, + 0xf64c, 0xf64d, 0xf64e, 0xf64f, + 0xf680, 0xf683, 0xf685, 0xf687, + 0xf689, 0xf68c, 0xf68f, 0xf691, + 0xf692, 0xf693, 0xf697, 0xf69a, + 0xf6a2, 0xf6a5, 0xf6a7, 0xf6a8, + 0xf6a9, 0xf6ab, 0xf6ac, 0xf6ad, + 0xf6b2, 0xf6b6, 0xf6bb, 0xf6c0, + }; + +static const unsigned short mb_tbl_uni_kddi2code3_value[] = { // 0x1f004 - 0x1f6c0 + 0x24bc, 0x25a7, 0x255e, 0x255f, + 0x2560, 0x272a, 0x2561, 0x282f, + 0x24d0, 0x27fc, 0x24d3, 0x284c, + 0x2831, 0x276c, 0x2793, 0x24bd, + 0x2549, 0x2546, 0x24c0, 0x2545, + 0x2548, 0x2547, 0x2750, 0x254a, + 0x24c1, 0x27f7, 0x24d2, 0x24d6, + 0x24d5, 0x24d4, 0x24d1, 0x24d7, + 0x277b, 0x283f, 0x26ed, 0x281c, + 0x2533, 0x253c, 0x253f, 0x24c5, + 0x253d, 0x2743, 0x25b4, 0x258b, + 0x2597, 0x2837, 0x282c, 0x282e, + 0x282d, 0x270a, 0x270d, 0x26ec, + 0x2570, 0x25b5, 0x2766, 0x24e1, + 0x2768, 0x274e, 0x2851, 0x24df, + 0x2767, 0x2581, 0x256e, 0x25ba, + 0x2797, 0x2752, 0x24b8, 0x256f, + 0x2506, 0x2507, 0x256c, 0x256a, + 0x2751, 0x2505, 0x256d, 0x256b, + 0x2504, 0x2592, 0x2571, 0x2756, + 0x2758, 0x275a, 0x2573, 0x2748, + 0x2574, 0x24fe, 0x2759, 0x24ff, + 0x2501, 0x2838, 0x2500, 0x24fa, + 0x24fc, 0x2572, 0x24fd, 0x2502, + 0x2503, 0x25a8, 0x2771, 0x24fb, + 0x2535, 0x2582, 0x2583, 0x2584, + 0x2585, 0x2586, 0x2587, 0x258e, + 0x2591, 0x2754, 0x2508, 0x2509, + 0x2755, 0x2730, 0x24f9, 0x24e2, + 0x2745, 0x2746, 0x2576, 0x2747, + 0x24e3, 0x2823, 0x2753, 0x2824, + 0x2539, 0x274d, 0x253b, 0x2863, + 0x2536, 0x24e6, 0x24e7, 0x26f3, + 0x2575, 0x24c4, 0x252e, 0x252f, + 0x2532, 0x2538, 0x253a, 0x2531, + 0x2530, 0x26f1, 0x252d, 0x257a, + 0x2787, 0x279b, 0x278c, 0x2820, + 0x2540, 0x2822, 0x2722, 0x2742, + 0x2821, 0x274a, 0x2749, 0x26f2, + 0x2528, 0x274c, 0x257b, 0x25a6, + 0x2855, 0x2789, 0x278a, 0x2578, + 0x2527, 0x278b, 0x2517, 0x273b, + 0x24f7, 0x281e, 0x273d, 0x273c, + 0x26ef, 0x2579, 0x24be, 0x273f, + 0x2529, 0x272f, 0x2847, 0x2731, + 0x24c9, 0x24ca, 0x272e, 0x2727, + 0x24cc, 0x253e, 0x2728, 0x24cb, + 0x2541, 0x2544, 0x2741, 0x2542, + 0x2543, 0x25b6, 0x255a, 0x255b, + 0x255c, 0x2557, 0x285e, 0x2537, + 0x2556, 0x2761, 0x258f, 0x2590, + 0x2555, 0x2757, 0x24bf, 0x24c6, + 0x2764, 0x25ae, 0x2760, 0x2558, + 0x2763, 0x255d, 0x2553, 0x2859, + 0x2559, 0x2857, 0x275b, 0x275f, + 0x2577, 0x26f4, 0x275c, 0x275d, + 0x2765, 0x2762, 0x275e, 0x2858, + 0x257e, 0x2580, 0x2772, 0x2828, + 0x2829, 0x251b, 0x251c, 0x257f, + 0x24d8, 0x24d9, 0x2783, 0x2784, + 0x2777, 0x2521, 0x251f, 0x277d, + 0x2520, 0x251e, 0x2860, 0x24e9, + 0x2782, 0x24de, 0x284d, 0x25af, + 0x25a3, 0x24ee, 0x24ef, 0x2791, + 0x2788, 0x2720, 0x284e, 0x2563, + 0x279e, 0x24ea, 0x2562, 0x2780, + 0x277e, 0x2785, 0x24c8, 0x2526, + 0x2534, 0x254b, 0x254c, 0x254d, + 0x254e, 0x254f, 0x2550, 0x2551, + 0x2552, 0x257c, 0x257d, 0x274f, + 0x2856, 0x2792, 0x2770, 0x2773, + 0x277c, 0x2554, 0x278d, 0x24eb, + 0x278f, 0x24ec, 0x24ed, 0x2794, + 0x24e5, 0x276f, 0x25b0, 0x2798, + 0x2861, 0x24e0, 0x2525, 0x25ad, + 0x26fb, 0x26fc, 0x24f1, 0x276e, + 0x24f2, 0x24f3, 0x24f4, 0x24f5, + 0x258c, 0x2833, 0x26fa, 0x2769, + 0x26fe, 0x26f9, 0x2834, 0x2835, + 0x276a, 0x2778, 0x2779, 0x276d, + 0x2594, 0x2781, 0x2774, 0x2776, + 0x274b, 0x27fd, 0x2800, 0x2801, + 0x2809, 0x2593, 0x24c7, 0x284f, + 0x24b9, 0x2806, 0x27e6, 0x2790, + 0x2813, 0x2814, 0x27e5, 0x27ed, + 0x27e7, 0x27ee, 0x27f0, 0x27f9, + 0x27fa, 0x27f8, 0x27e8, 0x27f1, + 0x27e4, 0x2724, 0x27f4, 0x2726, + 0x2849, 0x27f2, 0x27ef, 0x2721, + 0x27ec, 0x2723, 0x27e9, 0x27ea, + 0x27eb, 0x27f3, 0x27a1, 0x27e3, + 0x24dd, 0x27a2, 0x281f, 0x27a4, + 0x272c, 0x2816, 0x2817, 0x27a3, + 0x25a9, 0x2815, 0x259a, 0x279f, + 0x2848, 0x280f, 0x280c, 0x2846, + 0x24db, 0x24dc, 0x24cf, 0x2799, + 0x2802, 0x2786, 0x2850, 0x2804, + 0x284b, 0x2795, 0x2808, 0x280d, + 0x279c, 0x2843, 0x284a, 0x283a, + 0x279d, 0x27a0, 0x2796, 0x2845, + 0x280e, 0x2842, 0x2844, 0x24ce, + 0x27af, 0x283b, 0x283c, 0x283d, + 0x283e, 0x258d, 0x26ff, 0x2807, + 0x280b, 0x2862, 0x2805, 0x2803, + 0x278e, 0x24da, 0x2704, 0x27ce, + 0x27cf, 0x27ca, 0x27cb, 0x27ba, + 0x27bb, 0x27de, 0x27df, 0x27c7, + 0x27c6, 0x2854, 0x2744, 0x27f6, + 0x25a4, 0x25b8, 0x259c, 0x26f5, + 0x285a, 0x2518, 0x2510, 0x285b, + 0x250a, 0x2514, 0x285d, 0x250b, + 0x250e, 0x251a, 0x2519, 0x276b, + 0x26f6, 0x2595, 0x25a1, 0x250d, + 0x250c, 0x2511, 0x259f, 0x250f, + 0x26f8, 0x26f7, 0x2516, 0x285c, + 0x2515, 0x2513, 0x2832, 0x2512, + 0x25b7, 0x259b, 0x2599, 0x259d, + 0x25a2, 0x2598, 0x2596, 0x25a0, + 0x259e, 0x2522, 0x2523, 0x2524, + 0x2588, 0x258a, 0x2589, 0x25bd, + 0x25be, 0x25bf, 0x25c0, 0x251d, + 0x285f, 0x2739, 0x2734, 0x2853, + 0x25a5, 0x2733, 0x272b, 0x252b, + 0x252a, 0x252c, 0x2735, 0x2736, + 0x24cd, 0x26ee, 0x24c2, 0x25ab, + 0x2564, 0x27c5, 0x2701, 0x2702, + 0x2732, 0x25aa, 0x2729, 0x24c3, + }; + +static const int mb_tbl_uni_kddi2code3_len = sizeof(mb_tbl_uni_kddi2code3_key)/sizeof(unsigned short); + +static const int mb_tbl_uni_sb2code1_min = 0x0023; +static const int mb_tbl_uni_sb2code1_max = 0x00ae; + +static const unsigned short mb_tbl_uni_sb2code1_key[] = { // 0x0023 - 0x00ae + 0x0023, 0x0030, 0x0031, 0x0032, + 0x0033, 0x0034, 0x0035, 0x0036, + 0x0037, 0x0038, 0x0039, 0x00a9, + 0x00ae, }; + +static const unsigned short mb_tbl_uni_sb2code1_value[] = { // 0x0023 - 0x00ae + 0x2817, 0x282c, 0x2823, 0x2824, + 0x2825, 0x2826, 0x2827, 0x2828, + 0x2829, 0x282a, 0x282b, 0x2855, + 0x2856, }; + +static const int mb_tbl_uni_sb2code1_len = sizeof(mb_tbl_uni_sb2code1_key)/sizeof(unsigned short); + +static const int mb_tbl_uni_sb2code2_min = 0x2122; +static const int mb_tbl_uni_sb2code2_max = 0x3299; + +static const unsigned short mb_tbl_uni_sb2code2_key[] = { // 0x2122 - 0x3299 + 0x2122, 0x2196, 0x2197, 0x2198, + 0x2199, 0x23e9, 0x23ea, 0x25b6, + 0x25c0, 0x2600, 0x2601, 0x260e, + 0x2614, 0x2615, 0x261d, 0x263a, + 0x2648, 0x2649, 0x264a, 0x264b, + 0x264c, 0x264d, 0x264e, 0x264f, + 0x2650, 0x2651, 0x2652, 0x2653, + 0x2660, 0x2663, 0x2665, 0x2666, + 0x2668, 0x267f, 0x26a0, 0x26a1, + 0x26bd, 0x26be, 0x26c4, 0x26ce, + 0x26ea, 0x26f2, 0x26f3, 0x26f5, + 0x26fa, 0x26fd, 0x2702, 0x2708, + 0x270a, 0x270b, 0x270c, 0x2728, + 0x2733, 0x2734, 0x274c, 0x2753, + 0x2754, 0x2755, 0x2757, 0x2764, + 0x27a1, 0x27bf, 0x2b05, 0x2b06, + 0x2b07, 0x2b50, 0x2b55, 0x303d, + 0x3297, 0x3299, }; + +static const unsigned short mb_tbl_uni_sb2code2_value[] = { // 0x2122 - 0x3299 + 0x2b2e, 0x283e, 0x283d, 0x283f, + 0x2840, 0x2843, 0x2844, 0x2841, + 0x2842, 0x296a, 0x2969, 0x2929, + 0x296b, 0x2965, 0x292f, 0x2aac, + 0x2846, 0x2847, 0x2848, 0x2849, + 0x284a, 0x284b, 0x284c, 0x284d, + 0x284e, 0x284f, 0x2850, 0x2851, + 0x2815, 0x2816, 0x2813, 0x2814, + 0x27cb, 0x2811, 0x2859, 0x27e5, + 0x2938, 0x2936, 0x2968, 0x2852, + 0x2957, 0x27c9, 0x2934, 0x293c, + 0x27ca, 0x295a, 0x2992, 0x293d, + 0x2930, 0x2932, 0x2931, 0x29ad, + 0x280d, 0x280c, 0x29b2, 0x2940, + 0x29b5, 0x29b6, 0x2941, 0x2942, + 0x283b, 0x2818, 0x283c, 0x2839, + 0x283a, 0x29ae, 0x29b1, 0x27d4, + 0x298c, 0x2994, }; + +static const int mb_tbl_uni_sb2code2_len = sizeof(mb_tbl_uni_sb2code2_key)/sizeof(unsigned short); + +static const int mb_tbl_uni_sb2code3_min = 0x1f004; +static const int mb_tbl_uni_sb2code3_max = 0x1f6c0; + +static const unsigned short mb_tbl_uni_sb2code3_key[] = { // 0x1f004 - 0x1f6c0 + 0xf004, 0xf170, 0xf171, 0xf17e, + 0xf17f, 0xf18e, 0xf192, 0xf194, + 0xf195, 0xf197, 0xf199, 0xf19a, + 0xf1e8, 0xf1e9, 0xf1ea, 0xf1eb, + 0xf1ec, 0xf1ee, 0xf1ef, 0xf1f0, + 0xf1f7, 0xf1fa, 0xf201, 0xf202, + 0xf21a, 0xf22f, 0xf233, 0xf235, + 0xf236, 0xf237, 0xf238, 0xf239, + 0xf23a, 0xf250, 0xf300, 0xf302, + 0xf303, 0xf304, 0xf305, 0xf306, + 0xf307, 0xf308, 0xf30a, 0xf319, + 0xf31f, 0xf334, 0xf335, 0xf337, + 0xf338, 0xf339, 0xf33a, 0xf33b, + 0xf33e, 0xf340, 0xf341, 0xf342, + 0xf343, 0xf345, 0xf346, 0xf349, + 0xf34a, 0xf34e, 0xf353, 0xf354, + 0xf358, 0xf359, 0xf35a, 0xf35b, + 0xf35c, 0xf35d, 0xf35e, 0xf35f, + 0xf361, 0xf362, 0xf363, 0xf366, + 0xf367, 0xf370, 0xf371, 0xf372, + 0xf373, 0xf374, 0xf375, 0xf376, + 0xf378, 0xf37a, 0xf37b, 0xf380, + 0xf381, 0xf382, 0xf383, 0xf384, + 0xf385, 0xf386, 0xf387, 0xf388, + 0xf389, 0xf38c, 0xf38d, 0xf38e, + 0xf38f, 0xf390, 0xf391, 0xf392, + 0xf393, 0xf3a1, 0xf3a2, 0xf3a4, + 0xf3a5, 0xf3a6, 0xf3a7, 0xf3a8, + 0xf3a9, 0xf3ab, 0xf3ac, 0xf3af, + 0xf3b0, 0xf3b1, 0xf3b5, 0xf3b6, + 0xf3b7, 0xf3b8, 0xf3ba, 0xf3be, + 0xf3bf, 0xf3c0, 0xf3c1, 0xf3c3, + 0xf3c4, 0xf3c6, 0xf3c8, 0xf3ca, + 0xf3e0, 0xf3e2, 0xf3e3, 0xf3e5, + 0xf3e6, 0xf3e7, 0xf3e8, 0xf3e9, + 0xf3ea, 0xf3eb, 0xf3ec, 0xf3ed, + 0xf3ef, 0xf3f0, 0xf40d, 0xf40e, + 0xf411, 0xf412, 0xf414, 0xf417, + 0xf418, 0xf419, 0xf41a, 0xf41b, + 0xf41f, 0xf420, 0xf424, 0xf426, + 0xf427, 0xf428, 0xf42b, 0xf42c, + 0xf42d, 0xf42e, 0xf42f, 0xf430, + 0xf431, 0xf433, 0xf434, 0xf435, + 0xf436, 0xf437, 0xf438, 0xf439, + 0xf43a, 0xf43b, 0xf440, 0xf442, + 0xf443, 0xf444, 0xf446, 0xf447, + 0xf448, 0xf449, 0xf44a, 0xf44b, + 0xf44c, 0xf44d, 0xf44e, 0xf44f, + 0xf450, 0xf451, 0xf452, 0xf454, + 0xf455, 0xf457, 0xf458, 0xf459, + 0xf45c, 0xf45f, 0xf460, 0xf461, + 0xf462, 0xf463, 0xf466, 0xf467, + 0xf468, 0xf469, 0xf46b, 0xf46e, + 0xf46f, 0xf471, 0xf472, 0xf473, + 0xf474, 0xf475, 0xf476, 0xf477, + 0xf478, 0xf47b, 0xf47c, 0xf47d, + 0xf47e, 0xf47f, 0xf480, 0xf481, + 0xf482, 0xf483, 0xf484, 0xf485, + 0xf486, 0xf487, 0xf488, 0xf489, + 0xf48a, 0xf48b, 0xf48d, 0xf48e, + 0xf48f, 0xf490, 0xf491, 0xf492, + 0xf493, 0xf494, 0xf497, 0xf498, + 0xf499, 0xf49a, 0xf49b, 0xf49c, + 0xf49d, 0xf49f, 0xf4a1, 0xf4a2, + 0xf4a3, 0xf4a4, 0xf4a6, 0xf4a8, + 0xf4a9, 0xf4aa, 0xf4b0, 0xf4b1, + 0xf4b9, 0xf4ba, 0xf4bb, 0xf4bc, + 0xf4bd, 0xf4bf, 0xf4c0, 0xf4d6, + 0xf4dd, 0xf4e0, 0xf4e1, 0xf4e2, + 0xf4e3, 0xf4e9, 0xf4eb, 0xf4ee, + 0xf4f1, 0xf4f2, 0xf4f3, 0xf4f4, + 0xf4f6, 0xf4f7, 0xf4fa, 0xf4fb, + 0xf4fc, 0xf50a, 0xf50d, 0xf511, + 0xf512, 0xf513, 0xf514, 0xf51d, + 0xf51e, 0xf525, 0xf528, 0xf52b, + 0xf52f, 0xf530, 0xf531, 0xf532, + 0xf533, 0xf534, 0xf550, 0xf551, + 0xf552, 0xf553, 0xf554, 0xf555, + 0xf556, 0xf557, 0xf558, 0xf559, + 0xf55a, 0xf55b, 0xf5fb, 0xf5fc, + 0xf5fd, 0xf601, 0xf602, 0xf603, + 0xf604, 0xf609, 0xf60a, 0xf60c, + 0xf60d, 0xf60f, 0xf612, 0xf613, + 0xf614, 0xf616, 0xf618, 0xf61a, + 0xf61c, 0xf61d, 0xf61e, 0xf620, + 0xf621, 0xf622, 0xf623, 0xf625, + 0xf628, 0xf62a, 0xf62d, 0xf630, + 0xf631, 0xf632, 0xf633, 0xf637, + 0xf645, 0xf646, 0xf647, 0xf64c, + 0xf64f, 0xf680, 0xf683, 0xf684, + 0xf685, 0xf687, 0xf689, 0xf68c, + 0xf68f, 0xf691, 0xf692, 0xf693, + 0xf695, 0xf697, 0xf699, 0xf69a, + 0xf6a2, 0xf6a4, 0xf6a5, 0xf6a7, + 0xf6ac, 0xf6ad, 0xf6b2, 0xf6b6, + 0xf6b9, 0xf6ba, 0xf6bb, 0xf6bc, + 0xf6bd, 0xf6be, 0xf6c0, }; + +static const unsigned short mb_tbl_uni_sb2code3_value[] = { // 0x1f004 - 0x1f6c0 + 0x27d5, 0x2b29, 0x2b2a, 0x2b2c, + 0x27f7, 0x2b2b, 0x281b, 0x2830, + 0x2819, 0x2854, 0x281a, 0x27d6, + 0x2b0a, 0x2b05, 0x2b08, 0x2b04, + 0x2b07, 0x2b06, 0x2b02, 0x2b0b, + 0x2b09, 0x2b03, 0x280a, 0x282f, + 0x281d, 0x2833, 0x2832, 0x2831, + 0x281c, 0x281e, 0x281f, 0x282e, + 0x2834, 0x282d, 0x2adb, 0x2ad4, + 0x2ae3, 0x296d, 0x2ae1, 0x27ee, + 0x2ae2, 0x2ae4, 0x2ad6, 0x296c, + 0x29b4, 0x2986, 0x2987, 0x2983, + 0x2950, 0x2952, 0x2982, 0x2984, + 0x2adc, 0x27b8, 0x27c0, 0x27c1, + 0x2adf, 0x29c8, 0x29c9, 0x29c7, + 0x29c5, 0x29c4, 0x29c6, 0x27c8, + 0x29bc, 0x29c1, 0x29bd, 0x29c0, + 0x29bf, 0x29be, 0x29b8, 0x29ba, + 0x29bb, 0x29c2, 0x29c3, 0x29b9, + 0x2ad7, 0x2966, 0x29cb, 0x29cc, + 0x27ef, 0x2963, 0x29b7, 0x298a, + 0x2964, 0x2967, 0x298b, 0x2993, + 0x27ba, 0x29ca, 0x2add, 0x2953, + 0x2ae0, 0x27bf, 0x2ad8, 0x298f, + 0x2991, 0x27eb, 0x2ace, 0x2ad0, + 0x2ad3, 0x2ada, 0x2ade, 0x2ad2, + 0x2ad1, 0x27cc, 0x2acb, 0x295c, + 0x295d, 0x2afe, 0x2989, 0x2af9, + 0x2afa, 0x27cd, 0x29a3, 0x27d8, + 0x27db, 0x2ac4, 0x295e, 0x29a5, + 0x2960, 0x2961, 0x2962, 0x2935, + 0x2933, 0x2ac2, 0x27da, 0x27bd, + 0x2937, 0x27d9, 0x2ac3, 0x2ac5, + 0x2956, 0x2958, 0x27fb, 0x27fd, + 0x27f5, 0x27fc, 0x2800, 0x2af8, + 0x27fe, 0x27ff, 0x2afb, 0x2aff, + 0x2afc, 0x2afd, 0x2b24, 0x27dc, + 0x2b20, 0x2b1f, 0x2b25, 0x2b26, + 0x2b1d, 0x27b2, 0x2ad9, 0x2b1c, + 0x2939, 0x2b19, 0x2b1a, 0x2b18, + 0x2975, 0x2b1e, 0x2b27, 0x2b17, + 0x2973, 0x2b22, 0x2970, 0x2b23, + 0x296f, 0x2974, 0x293a, 0x27b1, + 0x2972, 0x27b3, 0x2b28, 0x2b1b, + 0x2b21, 0x2971, 0x2ab1, 0x2ab3, + 0x2ab2, 0x2ab4, 0x2835, 0x2836, + 0x2837, 0x2838, 0x292d, 0x2ab6, + 0x2ab8, 0x292e, 0x2ab9, 0x2ab7, + 0x2aba, 0x27b6, 0x2997, 0x2981, + 0x2926, 0x2998, 0x29a0, 0x29a1, + 0x29a2, 0x2927, 0x27e6, 0x2999, + 0x299a, 0x2b2d, 0x2921, 0x2922, + 0x2924, 0x2925, 0x2ac0, 0x27fa, + 0x2ac1, 0x2b0c, 0x2b0d, 0x2b0e, + 0x2b0f, 0x2b10, 0x2b11, 0x2b12, + 0x2b13, 0x27c3, 0x296e, 0x27b4, + 0x27d3, 0x27c2, 0x27c4, 0x285a, + 0x2b15, 0x2b16, 0x299b, 0x299c, + 0x299d, 0x299e, 0x299f, 0x27e3, + 0x298e, 0x2923, 0x2954, 0x2955, + 0x27b9, 0x2985, 0x2abd, 0x2ad5, + 0x29a6, 0x2943, 0x29a7, 0x29a8, + 0x29a9, 0x29aa, 0x29ab, 0x29ac, + 0x2acf, 0x280b, 0x27b7, 0x29b3, + 0x2990, 0x27e4, 0x29b0, 0x29af, + 0x297a, 0x27f4, 0x27d7, 0x27f1, + 0x27f2, 0x27c7, 0x292c, 0x27c6, + 0x2995, 0x27ce, 0x27cf, 0x27f0, + 0x2980, 0x292b, 0x27f3, 0x27ea, + 0x2996, 0x27ab, 0x27a9, 0x27aa, + 0x292a, 0x27ac, 0x2857, 0x2858, + 0x2812, 0x2928, 0x27d2, 0x27d0, + 0x27d1, 0x27e9, 0x27bc, 0x295f, + 0x27ec, 0x27ed, 0x29a4, 0x2853, + 0x280e, 0x27c5, 0x27be, 0x27bb, + 0x2845, 0x2810, 0x2951, 0x2821, + 0x2822, 0x2820, 0x2944, 0x2945, + 0x2946, 0x2947, 0x2948, 0x2949, + 0x294a, 0x294b, 0x294c, 0x294d, + 0x294e, 0x294f, 0x295b, 0x2b00, + 0x2b14, 0x2a9c, 0x2aaa, 0x2977, + 0x2aad, 0x2a9d, 0x2976, 0x2aa2, + 0x27ae, 0x2a9a, 0x2aa6, 0x27b0, + 0x2a9b, 0x2a9f, 0x2ab0, 0x2aaf, + 0x27ad, 0x2aa1, 0x2978, 0x2979, + 0x2aae, 0x2aab, 0x2a9e, 0x2a99, + 0x2aa3, 0x2aa0, 0x2aa9, 0x2aa7, + 0x27af, 0x2aa8, 0x2aa5, 0x2aa4, + 0x2abb, 0x2abc, 0x2abe, 0x2abf, + 0x2ab5, 0x27b5, 0x293e, 0x2acd, + 0x293f, 0x2acc, 0x2959, 0x2801, + 0x27f8, 0x2ac9, 0x2ac8, 0x2aca, + 0x2802, 0x293b, 0x2ac6, 0x2ac7, + 0x2809, 0x27dd, 0x27f6, 0x27df, + 0x298d, 0x280f, 0x27de, 0x2808, + 0x27e0, 0x27e1, 0x27f9, 0x27e2, + 0x27e8, 0x2988, 0x27e7, }; + +static const int mb_tbl_uni_sb2code3_len = sizeof(mb_tbl_uni_sb2code3_key)/sizeof(unsigned short); + +/* unsupported in Unicode 6.0 */ + +static const int mb_tbl_uni_docomo2code5_min = 0xfe82d; +static const int mb_tbl_uni_docomo2code5_max = 0xfee33; + +static const unsigned short mb_tbl_uni_docomo2code5_key[] = { // 0xfe82d - 0xfee33 + 0xE82D, 0xEE10, 0xEE11, 0xEE12, + 0xEE13, 0xEE14, 0xEE15, 0xEE16, + 0xEE17, 0xEE18, 0xEE19, 0xEE1A, + 0xEE1B, 0xEE1C, 0xEE1D, 0xEE1E, + 0xEE1F, 0xEE20, 0xEE21, 0xEE22, + 0xEE23, 0xEE24, 0xEE25, 0xEE26, + 0xEE27, 0xEE28, 0xEE29, 0xEE2A, + 0xEE2B, 0xEE2C, 0xEE2D, 0xEE2E, + 0xEE2F, 0xEE30, 0xEE31, 0xEE32, + 0xEE33, }; + +static const unsigned short mb_tbl_uni_docomo2code5_val[] = { // 0xfe82d - 0xfee33 + 0x2965, 0x2955, 0x2956, 0x2958, + 0x2959, 0x2990, 0x2991, 0x292A, + 0x292B, 0x292C, 0x292D, 0x292E, + 0x292F, 0x2933, 0x2934, 0x2938, + 0x2939, 0x293A, 0x293F, 0x2940, + 0x2941, 0x2942, 0x2943, 0x2944, + 0x2945, 0x2946, 0x2947, 0x2948, + 0x2949, 0x294A, 0x294B, 0x294C, + 0x294D, 0x294E, 0x294F, 0x2950, + 0x2951, }; + +static const unsigned short mb_tbl_uni_docomo2code5_len = sizeof(mb_tbl_uni_docomo2code5_key)/sizeof(unsigned short); + + +static const int mb_tbl_uni_kddi2code5_min = 0xfe82d; +static const int mb_tbl_uni_kddi2code5_max = 0xfee4a; + +static const unsigned short mb_tbl_uni_kddi2code5_key[] = { // 0xfe82d - 0xfee4a + 0xE82D, 0xE83C, 0xEB89, 0xEE40, + 0xEE41, 0xEE42, 0xEE43, 0xEE44, + 0xEE45, 0xEE46, 0xEE47, 0xEE48, + 0xEE49, 0xEE4A, }; + +static const unsigned short mb_tbl_uni_kddi2code5_val[] = { // 0xfe82d - 0xfee4a + 0x27B0, 0x280A, 0x2839, 0x27FB, + 0x2836, 0x24E8, 0x25AC, 0x25B9, + 0x25C1, 0x25C2, 0x25C3, 0x25C4, + 0x25C5, 0x25C6, }; + +static const unsigned short mb_tbl_uni_kddi2code5_len = sizeof(mb_tbl_uni_kddi2code5_key)/sizeof(unsigned short); + + +static const int mb_tbl_uni_sb2code5_min = 0xfe4c5; +static const int mb_tbl_uni_sb2code5_max = 0xfee7d; + +static const unsigned short mb_tbl_uni_sb2code5_key[] = { // 0xfe4c5 - 0xfee7d + 0xE4C5, 0xEE70, 0xEE71, 0xEE72, + 0xEE73, 0xEE74, 0xEE75, 0xEE76, + 0xEE77, 0xEE78, 0xEE79, 0xEE7A, + 0xEE7B, 0xEE7C, 0xEE7D, }; + +static const unsigned short mb_tbl_uni_sb2code5_val[] = { // 0xfe4c5 - 0xfee7d + 0x2B01, 0x2B2F, 0x2B30, 0x2B31, + 0x2B32, 0x2B33, 0x2B34, 0x2B35, + 0x285B, 0x285C, 0x285D, 0x285E, + 0x285F, 0x2860, 0x2861, }; + +static const unsigned short mb_tbl_uni_sb2code5_len = sizeof(mb_tbl_uni_sb2code5_key)/sizeof(unsigned short); + diff --git a/ext/mbstring/libmbfl/filters/html_entities.c b/ext/mbstring/libmbfl/filters/html_entities.c new file mode 100644 index 0000000..5551952 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/html_entities.c @@ -0,0 +1,298 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Marcus Boerger <helly@php.net> + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "html_entities.h" + +const mbfl_html_entity_entry mbfl_html_entity_list[] = { + {"quot", 34}, + {"amp", 38}, + {"lt", 60}, + {"gt", 62}, + {"nbsp", 160}, + {"iexcl", 161}, + {"cent", 162}, + {"pound", 163}, + {"curren", 164}, + {"yen", 165}, + {"brvbar", 166}, + {"sect", 167}, + {"uml", 168}, + {"copy", 169}, + {"ordf", 170}, + {"laquo", 171}, + {"not", 172}, + {"shy", 173}, + {"reg", 174}, + {"macr", 175}, + {"deg", 176}, + {"plusmn", 177}, + {"sup2", 178}, + {"sup3", 179}, + {"acute", 180}, + {"micro", 181}, + {"para", 182}, + {"middot", 183}, + {"cedil", 184}, + {"sup1", 185}, + {"ordm", 186}, + {"raquo", 187}, + {"frac14", 188}, + {"frac12", 189}, + {"frac34", 190}, + {"iquest", 191}, + {"Agrave", 192}, + {"Aacute", 193}, + {"Acirc", 194}, + {"Atilde", 195}, + {"Auml", 196}, + {"Aring", 197}, + {"AElig", 198}, + {"Ccedil", 199}, + {"Egrave", 200}, + {"Eacute", 201}, + {"Ecirc", 202}, + {"Euml", 203}, + {"Igrave", 204}, + {"Iacute", 205}, + {"Icirc", 206}, + {"Iuml", 207}, + {"ETH", 208}, + {"Ntilde", 209}, + {"Ograve", 210}, + {"Oacute", 211}, + {"Ocirc", 212}, + {"Otilde", 213}, + {"Ouml", 214}, + {"times", 215}, + {"Oslash", 216}, + {"Ugrave", 217}, + {"Uacute", 218}, + {"Ucirc", 219}, + {"Uuml", 220}, + {"Yacute", 221}, + {"THORN", 222}, + {"szlig", 223}, + {"agrave", 224}, + {"aacute", 225}, + {"acirc", 226}, + {"atilde", 227}, + {"auml", 228}, + {"aring", 229}, + {"aelig", 230}, + {"ccedil", 231}, + {"egrave", 232}, + {"eacute", 233}, + {"ecirc", 234}, + {"euml", 235}, + {"igrave", 236}, + {"iacute", 237}, + {"icirc", 238}, + {"iuml", 239}, + {"eth", 240}, + {"ntilde", 241}, + {"ograve", 242}, + {"oacute", 243}, + {"ocirc", 244}, + {"otilde", 245}, + {"ouml", 246}, + {"divide", 247}, + {"oslash", 248}, + {"ugrave", 249}, + {"uacute", 250}, + {"ucirc", 251}, + {"uuml", 252}, + {"yacute", 253}, + {"thorn", 254}, + {"yuml", 255}, + {"OElig", 338}, + {"oelig", 339}, + {"Scaron", 352}, + {"scaron", 353}, + {"Yuml", 376}, + {"fnof", 402}, + {"circ", 710}, + {"tilde", 732}, + {"Alpha", 913}, + {"Beta", 914}, + {"Gamma", 915}, + {"Delta", 916}, + {"Epsilon", 917}, + {"Zeta", 918}, + {"Eta", 919}, + {"Theta", 920}, + {"Iota", 921}, + {"Kappa", 922}, + {"Lambda", 923}, + {"Mu", 924}, + {"Nu", 925}, + {"Xi", 926}, + {"Omicron", 927}, + {"Pi", 928}, + {"Rho", 929}, + {"Sigma", 931}, + {"Tau", 932}, + {"Upsilon", 933}, + {"Phi", 934}, + {"Chi", 935}, + {"Psi", 936}, + {"Omega", 937}, + {"alpha", 945}, + {"beta", 946}, + {"gamma", 947}, + {"delta", 948}, + {"epsilon", 949}, + {"zeta", 950}, + {"eta", 951}, + {"theta", 952}, + {"iota", 953}, + {"kappa", 954}, + {"lambda", 955}, + {"mu", 956}, + {"nu", 957}, + {"xi", 958}, + {"omicron", 959}, + {"pi", 960}, + {"rho", 961}, + {"sigmaf", 962}, + {"sigma", 963}, + {"tau", 964}, + {"upsilon", 965}, + {"phi", 966}, + {"chi", 967}, + {"psi", 968}, + {"omega", 969}, + {"thetasym", 977}, + {"upsih", 978}, + {"piv", 982}, + {"ensp", 8194}, + {"emsp", 8195}, + {"thinsp", 8201}, + {"zwnj", 8204}, + {"zwj", 8205}, + {"lrm", 8206}, + {"rlm", 8207}, + {"ndash", 8211}, + {"mdash", 8212}, + {"lsquo", 8216}, + {"rsquo", 8217}, + {"sbquo", 8218}, + {"ldquo", 8220}, + {"rdquo", 8221}, + {"bdquo", 8222}, + {"dagger", 8224}, + {"Dagger", 8225}, + {"bull", 8226}, + {"hellip", 8230}, + {"permil", 8240}, + {"prime", 8242}, + {"Prime", 8243}, + {"lsaquo", 8249}, + {"rsaquo", 8250}, + {"oline", 8254}, + {"frasl", 8260}, + {"euro", 8364}, + {"weierp", 8472}, + {"image", 8465}, + {"real", 8476}, + {"trade", 8482}, + {"alefsym", 8501}, + {"larr", 8592}, + {"uarr", 8593}, + {"rarr", 8594}, + {"darr", 8595}, + {"harr", 8596}, + {"crarr", 8629}, + {"lArr", 8656}, + {"uArr", 8657}, + {"rArr", 8658}, + {"dArr", 8659}, + {"hArr", 8660}, + {"forall", 8704}, + {"part", 8706}, + {"exist", 8707}, + {"empty", 8709}, + {"nabla", 8711}, + {"isin", 8712}, + {"notin", 8713}, + {"ni", 8715}, + {"prod", 8719}, + {"sum", 8721}, + {"minus", 8722}, + {"lowast", 8727}, + {"radic", 8730}, + {"prop", 8733}, + {"infin", 8734}, + {"ang", 8736}, + {"and", 8743}, + {"or", 8744}, + {"cap", 8745}, + {"cup", 8746}, + {"int", 8747}, + {"there4", 8756}, + {"sim", 8764}, + {"cong", 8773}, + {"asymp", 8776}, + {"ne", 8800}, + {"equiv", 8801}, + {"le", 8804}, + {"ge", 8805}, + {"sub", 8834}, + {"sup", 8835}, + {"nsub", 8836}, + {"sube", 8838}, + {"supe", 8839}, + {"oplus", 8853}, + {"otimes", 8855}, + {"perp", 8869}, + {"sdot", 8901}, + {"lceil", 8968}, + {"rceil", 8969}, + {"lfloor", 8970}, + {"rfloor", 8971}, + {"lang", 9001}, + {"rang", 9002}, + {"loz", 9674}, + {"spades", 9824}, + {"clubs", 9827}, + {"hearts", 9829}, + {"diams", 9830}, + {NULL, -1} /* mark end of table */ +}; + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/ext/mbstring/libmbfl/filters/html_entities.h b/ext/mbstring/libmbfl/filters/html_entities.h new file mode 100644 index 0000000..a73b9d5 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/html_entities.h @@ -0,0 +1,41 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Marcus Boerger <helly@php.net> + * + */ +/* + * The source code included in this files was separated from mbfilter.h + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_HTML_ENTITIES_H +#define MBFL_HTML_ENTITIES_H + +typedef struct _mbfl_html_entity_entry { + char * name; + int code; +} mbfl_html_entity_entry; + +extern const mbfl_html_entity_entry mbfl_html_entity_list[]; + +#endif /* MBFL_HTML_ENTITIES_H */ + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_7bit.c b/ext/mbstring/libmbfl/filters/mbfilter_7bit.c new file mode 100644 index 0000000..7b793cd --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_7bit.c @@ -0,0 +1,82 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_7bit.h" + +const mbfl_encoding mbfl_encoding_7bit = { + mbfl_no_encoding_7bit, + "7bit", + "7bit", + NULL, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_convert_vtbl vtbl_8bit_7bit = { + mbfl_no_encoding_8bit, + mbfl_no_encoding_7bit, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_any_7bit, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_7bit_8bit = { + mbfl_no_encoding_7bit, + mbfl_no_encoding_8bit, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_7bit_any, + mbfl_filt_conv_common_flush +}; + + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +int mbfl_filt_conv_7bit_any(int c, mbfl_convert_filter *filter) +{ + return (*filter->output_function)(c, filter->data); +} + + +int mbfl_filt_conv_any_7bit(int c, mbfl_convert_filter *filter) +{ + if (c >= 0 && c < 0x80) { + CK((*filter->output_function)(c, filter->data)); + } + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_7bit.h b/ext/mbstring/libmbfl/filters/mbfilter_7bit.h new file mode 100644 index 0000000..d9a285f --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_7bit.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifndef MBFL_MBFILTER_7BIT_H +#define MBFL_MBFILTER_7BIT_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_7bit; +extern const struct mbfl_convert_vtbl vtbl_8bit_7bit; +extern const struct mbfl_convert_vtbl vtbl_7bit_8bit; + +int mbfl_filt_conv_7bit_any(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_any_7bit(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_7BIT_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_armscii8.c b/ext/mbstring/libmbfl/filters/mbfilter_armscii8.c new file mode 100644 index 0000000..2d1fc8d --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_armscii8.c @@ -0,0 +1,149 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: Hayk Chamyan <hamshen@gmail.com> + * + */ + +/* + * "armenian code filter and converter" + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_armscii8.h" +#include "unicode_table_armscii8.h" + +static int mbfl_filt_ident_armscii8(int c, mbfl_identify_filter *filter); + +static const char *mbfl_encoding_armscii8_aliases[] = {"ArmSCII-8", "ArmSCII8", "ARMSCII-8", "ARMSCII8", NULL}; + +const mbfl_encoding mbfl_encoding_armscii8 = { + mbfl_no_encoding_armscii8, + "ArmSCII-8", + "ArmSCII-8", + (const char *(*)[])&mbfl_encoding_armscii8_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_armscii8 = { + mbfl_no_encoding_armscii8, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_armscii8 +}; + +const struct mbfl_convert_vtbl vtbl_wchar_armscii8 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_armscii8, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_armscii8, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_armscii8_wchar = { + mbfl_no_encoding_armscii8, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_armscii8_wchar, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * armscii8 => wchar + */ +int mbfl_filt_conv_armscii8_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < armscii8_ucs_table_min) { + s = c; + } else if (c >= armscii8_ucs_table_min && c < 0x100) { + s = armscii8_ucs_table[c - armscii8_ucs_table_min]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_ARMSCII8; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* + * wchar => armscii8 + */ +int mbfl_filt_conv_wchar_armscii8(int c, mbfl_convert_filter *filter) +{ + + int s, n; + + if (c >= 0x28 && c < 0x30) { + s = ucs_armscii8_table[c-0x28]; + } else if (c < armscii8_ucs_table_min) { + s = c; + } else { + s = -1; + n = armscii8_ucs_table_len-1; + while (n >= 0) { + if (c == armscii8_ucs_table[n]) { + s = armscii8_ucs_table_min + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_ARMSCII8) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +static int mbfl_filt_ident_armscii8(int c, mbfl_identify_filter *filter) +{ + if (c >= armscii8_ucs_table_min && c <= 0xff) + filter->flag = 0; + else + filter->flag = 1; /* not it */ + return c; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_armscii8.h b/ext/mbstring/libmbfl/filters/mbfilter_armscii8.h new file mode 100644 index 0000000..fc84827 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_armscii8.h @@ -0,0 +1,45 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: Hayk Chamyan <hamshen@gmail.com> + * + */ + +#ifndef MBFL_MBFILTER_ARMSCII8_H +#define MBFL_MBFILTER_ARMSCII8_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_armscii8; +extern const struct mbfl_identify_vtbl vtbl_identify_armscii8; +extern const struct mbfl_convert_vtbl vtbl_wchar_armscii8; +extern const struct mbfl_convert_vtbl vtbl_armscii8_wchar; + +int mbfl_filt_conv_armscii8_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_armscii8(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ARMSCII8_H */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ascii.c b/ext/mbstring/libmbfl/filters/mbfilter_ascii.c new file mode 100644 index 0000000..77871fb --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_ascii.c @@ -0,0 +1,114 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_ascii.h" + +static int mbfl_filt_ident_ascii(int c, mbfl_identify_filter *filter); + +static const char *mbfl_encoding_ascii_aliases[] = {"ANSI_X3.4-1968", "iso-ir-6", "ANSI_X3.4-1986", "ISO_646.irv:1991", "US-ASCII", "ISO646-US", "us", "IBM367", "IBM-367", "cp367", "csASCII", NULL}; + +const mbfl_encoding mbfl_encoding_ascii = { + mbfl_no_encoding_ascii, + "ASCII", + "US-ASCII", /* preferred MIME name */ + (const char *(*)[])&mbfl_encoding_ascii_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_ascii = { + mbfl_no_encoding_ascii, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_ascii +}; + +const struct mbfl_convert_vtbl vtbl_ascii_wchar = { + mbfl_no_encoding_ascii, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_ascii_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_ascii = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_ascii, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_ascii, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * ASCII => wchar + */ +int mbfl_filt_conv_ascii_wchar(int c, mbfl_convert_filter *filter) +{ + return (*filter->output_function)(c, filter->data); +} + + +/* + * wchar => ASCII + */ +int mbfl_filt_conv_wchar_ascii(int c, mbfl_convert_filter *filter) +{ + if (c >= 0 && c < 0x80) { + CK((*filter->output_function)(c, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +static int mbfl_filt_ident_ascii(int c, mbfl_identify_filter *filter) +{ + if (c >= 0x20 && c < 0x80) { + ; + } else if (c == 0x0d || c == 0x0a || c == 0x09 || c == 0) { /* CR or LF or HTAB or null */ + ; + } else { + filter->flag = 1; + } + + return c; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ascii.h b/ext/mbstring/libmbfl/filters/mbfilter_ascii.h new file mode 100644 index 0000000..c48ced6 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_ascii.h @@ -0,0 +1,46 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifndef MBFL_MBFILTER_ASCII_H +#define MBFL_MBFILTER_ASCII_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_ascii; +extern const struct mbfl_identify_vtbl vtbl_identify_ascii; +extern const struct mbfl_convert_vtbl vtbl_ascii_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_ascii; + +int mbfl_filt_conv_ascii_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_ascii(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ASCII_H */ + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_base64.c b/ext/mbstring/libmbfl/filters/mbfilter_base64.c new file mode 100644 index 0000000..198f38c --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_base64.c @@ -0,0 +1,214 @@ + /* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_base64.h" + +const mbfl_encoding mbfl_encoding_base64 = { + mbfl_no_encoding_base64, + "BASE64", + "BASE64", + NULL, + NULL, + MBFL_ENCTYPE_ENC_STRM | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_convert_vtbl vtbl_8bit_b64 = { + mbfl_no_encoding_8bit, + mbfl_no_encoding_base64, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_base64enc, + mbfl_filt_conv_base64enc_flush +}; + +const struct mbfl_convert_vtbl vtbl_b64_8bit = { + mbfl_no_encoding_base64, + mbfl_no_encoding_8bit, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_base64dec, + mbfl_filt_conv_base64dec_flush +}; + + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * any => BASE64 + */ +static const unsigned char mbfl_base64_table[] = { + /* 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', */ + 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d, + /* 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', */ + 0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a, + /* 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', */ + 0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d, + /* 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', */ + 0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a, + /* '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/', '\0' */ + 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2b,0x2f,0x00 +}; + +int mbfl_filt_conv_base64enc(int c, mbfl_convert_filter *filter) +{ + int n; + + n = (filter->status & 0xff); + if (n == 0) { + filter->status++; + filter->cache = (c & 0xff) << 16; + } else if (n == 1) { + filter->status++; + filter->cache |= (c & 0xff) << 8; + } else { + filter->status &= ~0xff; + if ((filter->status & MBFL_BASE64_STS_MIME_HEADER) == 0) { + n = (filter->status & 0xff00) >> 8; + if (n > 72) { + CK((*filter->output_function)(0x0d, filter->data)); /* CR */ + CK((*filter->output_function)(0x0a, filter->data)); /* LF */ + filter->status &= ~0xff00; + } + filter->status += 0x400; + } + n = filter->cache | (c & 0xff); + CK((*filter->output_function)(mbfl_base64_table[(n >> 18) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_base64_table[(n >> 12) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_base64_table[(n >> 6) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_base64_table[n & 0x3f], filter->data)); + } + + return c; +} + +int mbfl_filt_conv_base64enc_flush(mbfl_convert_filter *filter) +{ + int status, cache, len; + + status = filter->status & 0xff; + cache = filter->cache; + len = (filter->status & 0xff00) >> 8; + filter->status &= ~0xffff; + filter->cache = 0; + /* flush fragments */ + if (status >= 1) { + if ((filter->status & MBFL_BASE64_STS_MIME_HEADER) == 0) { + if (len > 72){ + CK((*filter->output_function)(0x0d, filter->data)); /* CR */ + CK((*filter->output_function)(0x0a, filter->data)); /* LF */ + } + } + CK((*filter->output_function)(mbfl_base64_table[(cache >> 18) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_base64_table[(cache >> 12) & 0x3f], filter->data)); + if (status == 1) { + CK((*filter->output_function)(0x3d, filter->data)); /* '=' */ + CK((*filter->output_function)(0x3d, filter->data)); /* '=' */ + } else { + CK((*filter->output_function)(mbfl_base64_table[(cache >> 6) & 0x3f], filter->data)); + CK((*filter->output_function)(0x3d, filter->data)); /* '=' */ + } + } + return 0; +} + +/* + * BASE64 => any + */ +int mbfl_filt_conv_base64dec(int c, mbfl_convert_filter *filter) +{ + int n; + + if (c == 0x0d || c == 0x0a || c == 0x20 || c == 0x09 || c == 0x3d) { /* CR or LF or SPACE or HTAB or '=' */ + return c; + } + + n = 0; + if (c >= 0x41 && c <= 0x5a) { /* A - Z */ + n = c - 65; + } else if (c >= 0x61 && c <= 0x7a) { /* a - z */ + n = c - 71; + } else if (c >= 0x30 && c <= 0x39) { /* 0 - 9 */ + n = c + 4; + } else if (c == 0x2b) { /* '+' */ + n = 62; + } else if (c == 0x2f) { /* '/' */ + n = 63; + } + n &= 0x3f; + + switch (filter->status) { + case 0: + filter->status = 1; + filter->cache = n << 18; + break; + case 1: + filter->status = 2; + filter->cache |= n << 12; + break; + case 2: + filter->status = 3; + filter->cache |= n << 6; + break; + default: + filter->status = 0; + n |= filter->cache; + CK((*filter->output_function)((n >> 16) & 0xff, filter->data)); + CK((*filter->output_function)((n >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(n & 0xff, filter->data)); + break; + } + + return c; +} + +int mbfl_filt_conv_base64dec_flush(mbfl_convert_filter *filter) +{ + int status, cache; + + status = filter->status; + cache = filter->cache; + filter->status = 0; + filter->cache = 0; + /* flush fragments */ + if (status >= 2) { + CK((*filter->output_function)((cache >> 16) & 0xff, filter->data)); + if (status >= 3) { + CK((*filter->output_function)((cache >> 8) & 0xff, filter->data)); + } + } + return 0; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_base64.h b/ext/mbstring/libmbfl/filters/mbfilter_base64.h new file mode 100644 index 0000000..6bd525f --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_base64.h @@ -0,0 +1,45 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifndef MBFL_MBFILTER_BASE64_H +#define MBFL_MBFILTER_BASE64_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_base64; +extern const struct mbfl_convert_vtbl vtbl_b64_8bit; +extern const struct mbfl_convert_vtbl vtbl_8bit_b64; + +int mbfl_filt_conv_base64enc(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_base64enc_flush(mbfl_convert_filter *filter); +int mbfl_filt_conv_base64dec(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_base64dec_flush(mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_BASE64_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_big5.c b/ext/mbstring/libmbfl/filters/mbfilter_big5.c new file mode 100644 index 0000000..099f8e6 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_big5.c @@ -0,0 +1,344 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: Rui Hirokawa <hirokawa@php.net> + * + */ +/* + * The source code included in this files was separated from mbfilter_tw.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_big5.h" + +#include "unicode_table_big5.h" + +static int mbfl_filt_ident_big5(int c, mbfl_identify_filter *filter); + +static const unsigned char mblen_table_big5[] = { /* 0x81-0xFE */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 +}; + +static const char *mbfl_encoding_big5_aliases[] = {"CN-BIG5", "BIG-FIVE", "BIGFIVE", NULL}; + +const mbfl_encoding mbfl_encoding_big5 = { + mbfl_no_encoding_big5, + "BIG-5", + "BIG5", + (const char *(*)[])&mbfl_encoding_big5_aliases, + mblen_table_big5, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE +}; + +const mbfl_encoding mbfl_encoding_cp950 = { + mbfl_no_encoding_cp950, + "CP950", + "BIG5", + NULL, + mblen_table_big5, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_identify_vtbl vtbl_identify_big5 = { + mbfl_no_encoding_big5, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_big5 +}; + +const struct mbfl_identify_vtbl vtbl_identify_cp950 = { + mbfl_no_encoding_cp950, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_big5 +}; + +const struct mbfl_convert_vtbl vtbl_big5_wchar = { + mbfl_no_encoding_big5, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_big5_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_big5 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_big5, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_big5, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_cp950_wchar = { + mbfl_no_encoding_cp950, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_big5_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_cp950 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_cp950, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_big5, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* 63 + 94 = 157 or 94 */ +static unsigned short cp950_pua_tbl[][4] = { + {0xe000,0xe310,0xfa40,0xfefe}, + {0xe311,0xeeb7,0x8e40,0xa0fe}, + {0xeeb8,0xf6b0,0x8140,0x8dfe}, + {0xf6b1,0xf70e,0xc6a1,0xc6fe}, + {0xf70f,0xf848,0xc740,0xc8fe}, +}; + +/* + * Big5 => wchar + */ +int +mbfl_filt_conv_big5_wchar(int c, mbfl_convert_filter *filter) +{ + int k; + int c1, w, c2; + + switch (filter->status) { + case 0: + if (filter->from->no_encoding == mbfl_no_encoding_cp950) { + c1 = 0x80; + } else { + c1 = 0xa0; + } + + if (c >= 0 && c <= 0x80) { /* latin */ + CK((*filter->output_function)(c, filter->data)); + } else if (c == 0xff) { + CK((*filter->output_function)(0xf8f8, filter->data)); + } else if (c > c1 && c < 0xff) { /* dbcs lead byte */ + filter->status = 1; + filter->cache = c; + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 1: /* dbcs second byte */ + filter->status = 0; + c1 = filter->cache; + if ((c > 0x39 && c < 0x7f) | (c > 0xa0 && c < 0xff)) { + if (c < 0x7f){ + w = (c1 - 0xa1)*157 + (c - 0x40); + } else { + w = (c1 - 0xa1)*157 + (c - 0xa1) + 0x3f; + } + if (w >= 0 && w < big5_ucs_table_size) { + w = big5_ucs_table[w]; + } else { + w = 0; + } + + if (filter->from->no_encoding == mbfl_no_encoding_cp950) { + /* PUA for CP950 */ + if (w <= 0 && + (((c1 >= 0xfa && c1 <= 0xfe) || (c1 >= 0x8e && c1 <= 0xa0) || + (c1 >= 0x81 && c1 <= 0x8d) ||(c1 >= 0xc7 && c1 <= 0xc8)) + && ((c > 0x39 && c < 0x7f) || (c > 0xa0 && c < 0xff))) || + ((c1 == 0xc6) && (c > 0xa0 && c < 0xff))) { + c2 = c1 << 8 | c; + for (k = 0; k < sizeof(cp950_pua_tbl)/(sizeof(unsigned short)*4); k++) { + if (c2 >= cp950_pua_tbl[k][2] && c2 <= cp950_pua_tbl[k][3]) { + break; + } + } + + if ((cp950_pua_tbl[k][2] & 0xff) == 0x40) { + w = 157*(c1 - (cp950_pua_tbl[k][2]>>8)) + c - (c >= 0xa1 ? 0x62 : 0x40) + + cp950_pua_tbl[k][0]; + } else { + w = c2 - cp950_pua_tbl[k][2] + cp950_pua_tbl[k][0]; + } + } + } + + if (w <= 0) { + w = (c1 << 8) | c; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_BIG5; + } + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => Big5 + */ +int +mbfl_filt_conv_wchar_big5(int c, mbfl_convert_filter *filter) +{ + int k; + int c1, s, c2; + + s = 0; + if (c >= ucs_a1_big5_table_min && c < ucs_a1_big5_table_max) { + s = ucs_a1_big5_table[c - ucs_a1_big5_table_min]; + } else if (c >= ucs_a2_big5_table_min && c < ucs_a2_big5_table_max) { + s = ucs_a2_big5_table[c - ucs_a2_big5_table_min]; + } else if (c >= ucs_a3_big5_table_min && c < ucs_a3_big5_table_max) { + s = ucs_a3_big5_table[c - ucs_a3_big5_table_min]; + } else if (c >= ucs_i_big5_table_min && c < ucs_i_big5_table_max) { + s = ucs_i_big5_table[c - ucs_i_big5_table_min]; + } else if (c >= ucs_pua_big5_table_min && c < ucs_pua_big5_table_max) { + s = ucs_pua_big5_table[c - ucs_pua_big5_table_min]; + } else if (c >= ucs_r1_big5_table_min && c < ucs_r1_big5_table_max) { + s = ucs_r1_big5_table[c - ucs_r1_big5_table_min]; + } else if (c >= ucs_r2_big5_table_min && c < ucs_r2_big5_table_max) { + s = ucs_r2_big5_table[c - ucs_r2_big5_table_min]; + } + + if (filter->to->no_encoding == mbfl_no_encoding_cp950) { + if (c >= 0xe000 && c <= 0xf848) { /* PUA for CP950 */ + for (k = 0; k < sizeof(cp950_pua_tbl)/(sizeof(unsigned short)*4); k++) { + if (c <= cp950_pua_tbl[k][1]) { + break; + } + } + c1 = c - cp950_pua_tbl[k][0]; + if ((cp950_pua_tbl[k][2] & 0xff) == 0x40) { + c2 = cp950_pua_tbl[k][2] >> 8; + s = ((c1 / 157) + c2) << 8; c1 %= 157; + s |= c1 + (c1 >= 0x3f ? 0x62 : 0x40); + } else { + s = c1 + cp950_pua_tbl[k][2]; + } + } + + if (c == 0x80) { + s = 0x80; + } else if (c == 0xf8f8) { + s = 0xff; + } else if (c == 0x256d) { + s = 0xa27e; + } else if (c == 0x256e) { + s = 0xa2a1; + } else if (c == 0x256f) { + s = 0xa2a3; + } else if (c == 0x2570) { + s = 0xa2a2; + } + } + + if (s <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_BIG5) { + s = c & MBFL_WCSPLANE_MASK; + } + if (c == 0) { + s = 0; + } else if (s <= 0) { + s = -1; + } + } + if (s >= 0) { + if (s <= 0x80 || s == 0xff) { /* latin */ + CK((*filter->output_function)(s, filter->data)); + } else { + CK((*filter->output_function)((s >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(s & 0xff, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +static int mbfl_filt_ident_big5(int c, mbfl_identify_filter *filter) +{ + int c1; + if (filter->encoding->no_encoding == mbfl_no_encoding_cp950) { + c1 = 0x80; + } else { + c1 = 0xa0; + } + + if (filter->status) { /* kanji second char */ + if (c < 0x40 || (c > 0x7e && c < 0xa1) ||c > 0xfe) { /* bad */ + filter->flag = 1; + } + filter->status = 0; + } else if (c >= 0 && c < 0x80) { /* latin ok */ + ; + } else if (c > c1 && c < 0xff) { /* DBCS lead byte */ + filter->status = 1; + } else { /* bad */ + filter->flag = 1; + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_big5.h b/ext/mbstring/libmbfl/filters/mbfilter_big5.h new file mode 100644 index 0000000..93d10de --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_big5.h @@ -0,0 +1,48 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: Rui Hirokawa <hirokawa@php.net> + * + */ +/* + * The source code included in this files was separated from mbfilter_tw.h + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_BIG5_H +#define MBFL_MBFILTER_BIG5_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_big5; +extern const struct mbfl_identify_vtbl vtbl_identify_big5; +extern const struct mbfl_convert_vtbl vtbl_big5_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_big5; + +extern const mbfl_encoding mbfl_encoding_cp950; +extern const struct mbfl_identify_vtbl vtbl_identify_cp950; +extern const struct mbfl_convert_vtbl vtbl_cp950_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_cp950; + +int mbfl_filt_conv_big5_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_big5(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_BIG5_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_byte2.c b/ext/mbstring/libmbfl/filters/mbfilter_byte2.c new file mode 100644 index 0000000..03b471b --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_byte2.c @@ -0,0 +1,137 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_byte2.h" + +const mbfl_encoding mbfl_encoding_byte2be = { + mbfl_no_encoding_byte2be, + "byte2be", + NULL, + NULL, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const mbfl_encoding mbfl_encoding_byte2le = { + mbfl_no_encoding_byte2le, + "byte2le", + NULL, + NULL, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_convert_vtbl vtbl_byte2be_wchar = { + mbfl_no_encoding_byte2be, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_byte2be_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_byte2be = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_byte2be, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_byte2be, + mbfl_filt_conv_common_flush }; + +const struct mbfl_convert_vtbl vtbl_byte2le_wchar = { + mbfl_no_encoding_byte2le, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_byte2le_wchar, + mbfl_filt_conv_common_flush }; + +const struct mbfl_convert_vtbl vtbl_wchar_byte2le = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_byte2le, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_byte2le, + mbfl_filt_conv_common_flush }; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +int mbfl_filt_conv_byte2be_wchar(int c, mbfl_convert_filter *filter) +{ + int n; + + if (filter->status == 0) { + filter->status = 1; + n = (c & 0xff) << 8; + filter->cache = n; + } else { + filter->status = 0; + n = (c & 0xff) | filter->cache; + CK((*filter->output_function)(n, filter->data)); + } + return c; +} + +int mbfl_filt_conv_wchar_byte2be(int c, mbfl_convert_filter *filter) +{ + CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(c & 0xff, filter->data)); + return c; +} + +int mbfl_filt_conv_byte2le_wchar(int c, mbfl_convert_filter *filter) +{ + int n; + + if (filter->status == 0) { + filter->status = 1; + n = c & 0xff; + filter->cache = n; + } else { + filter->status = 0; + n = ((c & 0xff) << 8) | filter->cache; + CK((*filter->output_function)(n, filter->data)); + } + return c; +} + +int mbfl_filt_conv_wchar_byte2le(int c, mbfl_convert_filter *filter) +{ + CK((*filter->output_function)(c & 0xff, filter->data)); + CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_byte2.h b/ext/mbstring/libmbfl/filters/mbfilter_byte2.h new file mode 100644 index 0000000..e762a9d --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_byte2.h @@ -0,0 +1,48 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifndef MBFL_MBFILTER_BYTE2_H +#define MBFL_MBFILTER_BYTE2_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_byte2be; +extern const mbfl_encoding mbfl_encoding_byte2le; +extern const struct mbfl_convert_vtbl vtbl_byte2be_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_byte2be; +extern const struct mbfl_convert_vtbl vtbl_byte2le_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_byte2le; + +int mbfl_filt_conv_wchar_byte2be(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_byte2be_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_byte2le(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_byte2le_wchar(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_BYTE2_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_byte4.c b/ext/mbstring/libmbfl/filters/mbfilter_byte4.c new file mode 100644 index 0000000..24b7367 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_byte4.c @@ -0,0 +1,159 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_byte4.h" + +const mbfl_encoding mbfl_encoding_byte4be = { + mbfl_no_encoding_byte4be, + "byte4be", + NULL, + NULL, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const mbfl_encoding mbfl_encoding_byte4le = { + mbfl_no_encoding_byte4le, + "byte4le", + NULL, + NULL, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_convert_vtbl vtbl_byte4be_wchar = { + mbfl_no_encoding_byte4be, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_byte4be_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_byte4be = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_byte4be, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_byte4be, + mbfl_filt_conv_common_flush }; + +const struct mbfl_convert_vtbl vtbl_byte4le_wchar = { + mbfl_no_encoding_byte4le, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_byte4le_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_byte4le = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_byte4le, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_byte4le, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +int mbfl_filt_conv_byte4be_wchar(int c, mbfl_convert_filter *filter) +{ + int n; + + if (filter->status == 0) { + filter->status = 1; + n = (c & 0xff) << 24; + filter->cache = n; + } else if (filter->status == 1) { + filter->status = 2; + n = (c & 0xff) << 16; + filter->cache |= n; + } else if (filter->status == 2) { + filter->status = 3; + n = (c & 0xff) << 8; + filter->cache |= n; + } else { + filter->status = 0; + n = (c & 0xff) | filter->cache; + CK((*filter->output_function)(n, filter->data)); + } + return c; +} + +int mbfl_filt_conv_wchar_byte4be(int c, mbfl_convert_filter *filter) +{ + CK((*filter->output_function)((c >> 24) & 0xff, filter->data)); + CK((*filter->output_function)((c >> 16) & 0xff, filter->data)); + CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(c & 0xff, filter->data)); + return c; +} + +int mbfl_filt_conv_byte4le_wchar(int c, mbfl_convert_filter *filter) +{ + int n; + + if (filter->status == 0) { + filter->status = 1; + n = (c & 0xff); + filter->cache = n; + } else if (filter->status == 1) { + filter->status = 2; + n = (c & 0xff) << 8; + filter->cache |= n; + } else if (filter->status == 2) { + filter->status = 3; + n = (c & 0xff) << 16; + filter->cache |= n; + } else { + filter->status = 0; + n = ((c & 0xff) << 24) | filter->cache; + CK((*filter->output_function)(n, filter->data)); + } + return c; +} + +int mbfl_filt_conv_wchar_byte4le(int c, mbfl_convert_filter *filter) +{ + CK((*filter->output_function)(c & 0xff, filter->data)); + CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); + CK((*filter->output_function)((c >> 16) & 0xff, filter->data)); + CK((*filter->output_function)((c >> 24) & 0xff, filter->data)); + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_byte4.h b/ext/mbstring/libmbfl/filters/mbfilter_byte4.h new file mode 100644 index 0000000..f6c0aed --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_byte4.h @@ -0,0 +1,46 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifndef MBFL_MBFILTER_BYTE4_H +#define MBFL_MBFILTER_BYTE4_H + +extern const mbfl_encoding mbfl_encoding_byte4be; +extern const mbfl_encoding mbfl_encoding_byte4le; +extern const struct mbfl_convert_vtbl vtbl_byte4be_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_byte4be; +extern const struct mbfl_convert_vtbl vtbl_byte4le_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_byte4le; + +int mbfl_filt_conv_wchar_byte4be(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_byte4be_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_byte4le(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_byte4le_wchar(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_BYTE4_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1251.c b/ext/mbstring/libmbfl/filters/mbfilter_cp1251.c new file mode 100644 index 0000000..b5ab8e7 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp1251.c @@ -0,0 +1,152 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Den V. Tsopa <tdv@edisoft.ru> + * + */ +/* + * The source code included in this files was separated from mbfilter_ru.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_cp1251.h" +#include "unicode_table_cp1251.h" + +static int mbfl_filt_ident_cp1251(int c, mbfl_identify_filter *filter); + +static const char *mbfl_encoding_cp1251_aliases[] = {"CP1251", "CP-1251", "WINDOWS-1251", NULL}; + +const mbfl_encoding mbfl_encoding_cp1251 = { + mbfl_no_encoding_cp1251, + "Windows-1251", + "Windows-1251", + (const char *(*)[])&mbfl_encoding_cp1251_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_cp1251 = { + mbfl_no_encoding_cp1251, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_cp1251 +}; + +const struct mbfl_convert_vtbl vtbl_wchar_cp1251 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_cp1251, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_cp1251, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_cp1251_wchar = { + mbfl_no_encoding_cp1251, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_cp1251_wchar, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * cp1251 => wchar + */ +int +mbfl_filt_conv_cp1251_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < cp1251_ucs_table_min) { + s = c; + } else if (c >= cp1251_ucs_table_min && c < 0x100) { + s = cp1251_ucs_table[c - cp1251_ucs_table_min]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_CP1251; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* + * wchar => cp1251 + */ +int +mbfl_filt_conv_wchar_cp1251(int c, mbfl_convert_filter *filter) +{ + int s, n; + + if (c < 0x80) { + s = c; + } else { + s = -1; + n = cp1251_ucs_table_len-1; + while (n >= 0) { + if (c == cp1251_ucs_table[n]) { + s = cp1251_ucs_table_min + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_CP1251) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +/* all of this is so ugly now! */ +static int mbfl_filt_ident_cp1251(int c, mbfl_identify_filter *filter) +{ + if (c >= 0x80 && c < 0xff) + filter->flag = 0; + else + filter->flag = 1; /* not it */ + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1251.h b/ext/mbstring/libmbfl/filters/mbfilter_cp1251.h new file mode 100644 index 0000000..6c0f680 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp1251.h @@ -0,0 +1,44 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Den V. Tsopa <tdv@edisoft.ru> + * + */ +/* + * the source code included in this files was separated from mbfilter_ru.h + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_CP1251_H +#define MBFL_MBFILTER_CP1251_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_cp1251; +extern const struct mbfl_identify_vtbl vtbl_identify_cp1251; +extern const struct mbfl_convert_vtbl vtbl_wchar_cp1251; +extern const struct mbfl_convert_vtbl vtbl_cp1251_wchar; + +int mbfl_filt_conv_wchar_cp1251(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_cp1251_wchar(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_CP1251_H */ + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1252.c b/ext/mbstring/libmbfl/filters/mbfilter_cp1252.c new file mode 100644 index 0000000..ad16082 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp1252.c @@ -0,0 +1,147 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Wez Furlong <wez@thebrainroom.com> + * + */ +/* + * the source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_cp1252.h" +#include "unicode_table_cp1252.h" + +static int mbfl_filt_ident_cp1252(int c, mbfl_identify_filter *filter); + +static const char *mbfl_encoding_cp1252_aliases[] = {"cp1252", NULL}; + +const mbfl_encoding mbfl_encoding_cp1252 = { + mbfl_no_encoding_cp1252, + "Windows-1252", + "Windows-1252", + (const char *(*)[])&mbfl_encoding_cp1252_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_cp1252 = { + mbfl_no_encoding_cp1252, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_cp1252 +}; + +const struct mbfl_convert_vtbl vtbl_cp1252_wchar = { + mbfl_no_encoding_cp1252, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_cp1252_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_cp1252 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_cp1252, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_cp1252, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * wchar => cp1252 + */ +int mbfl_filt_conv_wchar_cp1252(int c, mbfl_convert_filter *filter) +{ + int s=-1, n; + + if (c >= 0x100) { + /* look it up from the cp1252 table */ + s = -1; + n = 31; + while (n >= 0) { + if (c == cp1252_ucs_table[n] && c != 0xfffe) { + s = 0x80 + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_1) + { + s = c & MBFL_WCSPLANE_MASK; + } + } + else if (c >= 0 && c < 0x100) { + s = c; + } + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + return c; +} + +/* + * cp1252 => wchar + */ +int mbfl_filt_conv_cp1252_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0x80 && c < 0xa0) { + s = cp1252_ucs_table[c - 0x80]; + } else { + s = c; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* We only distinguish the MS extensions to ISO-8859-1. + * Actually, this is pretty much a NO-OP, since the identification + * system doesn't allow us to discriminate between a positive match, + * a possible match and a definite non-match. + * The problem here is that cp1252 looks like SJIS for certain chars. + * */ +static int mbfl_filt_ident_cp1252(int c, mbfl_identify_filter *filter) +{ + if (c >= 0x80 && c < 0xa0) + filter->flag = 0; + else + filter->flag = 1; /* not it */ + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1252.h b/ext/mbstring/libmbfl/filters/mbfilter_cp1252.h new file mode 100644 index 0000000..032c30e --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp1252.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Wez Furlong <wez@thebrainroom.com> + * + */ +/* + * the source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_CP1252_H +#define MBFL_MBFILTER_CP1252_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_cp1252; +extern const struct mbfl_identify_vtbl vtbl_identify_cp1252; +extern const struct mbfl_convert_vtbl vtbl_cp1252_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_cp1252; + +int mbfl_filt_conv_wchar_cp1252(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_cp1252_wchar(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_CP1252_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1254.c b/ext/mbstring/libmbfl/filters/mbfilter_cp1254.c new file mode 100644 index 0000000..7e93342 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp1254.c @@ -0,0 +1,157 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Haluk AKIN <halukakin@gmail.com> + * + */ +/* + * The source code included in this files was separated from mbfilter_ru.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_cp1254.h" +#include "unicode_table_cp1254.h" + +static int mbfl_filt_ident_cp1254(int c, mbfl_identify_filter *filter); + +static const char *mbfl_encoding_cp1254_aliases[] = {"CP1254", "CP-1254", "WINDOWS-1254", NULL}; + +const mbfl_encoding mbfl_encoding_cp1254 = { + mbfl_no_encoding_cp1254, + "Windows-1254", + "Windows-1254", + (const char *(*)[])&mbfl_encoding_cp1254_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_cp1254 = { + mbfl_no_encoding_cp1254, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_cp1254 +}; + +const struct mbfl_convert_vtbl vtbl_cp1254_wchar = { + mbfl_no_encoding_cp1254, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_cp1254_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_cp1254 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_cp1254, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_cp1254, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * wchar => cp1254 + */ +int +mbfl_filt_conv_wchar_cp1254(int c, mbfl_convert_filter *filter) +{ + int s, n; + + if (c < 0x80) { + s = c; + } else { + s = -1; + n = cp1254_ucs_table_len-1; + while (n >= 0) { + if (c == cp1254_ucs_table[n] && c != 0xfffe) { + s = cp1254_ucs_table_min + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_CP1254) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +/* + * cp1254 => wchar + */ +int +mbfl_filt_conv_cp1254_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < cp1254_ucs_table_min) { + s = c; + } else if (c >= cp1254_ucs_table_min && c < 0x100) { + s = cp1254_ucs_table[c - cp1254_ucs_table_min]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_CP1254; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* We only distinguish the MS extensions to ISO-8859-1. + * Actually, this is pretty much a NO-OP, since the identification + * system doesn't allow us to discriminate between a positive match, + * a possible match and a definite non-match. + * The problem here is that cp1254 looks like SJIS for certain chars. + * */ +static int mbfl_filt_ident_cp1254(int c, mbfl_identify_filter *filter) +{ + if (c >= 0x80 && c < 0xff) + filter->flag = 0; + else + filter->flag = 1; /* not it */ + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1254.h b/ext/mbstring/libmbfl/filters/mbfilter_cp1254.h new file mode 100644 index 0000000..3200d52 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp1254.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Haluk AKIN <halukakin@gmail.com> + * + */ +/* + * the source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_CP1254_H +#define MBFL_MBFILTER_CP1254_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_cp1254; +extern const struct mbfl_identify_vtbl vtbl_identify_cp1254; +extern const struct mbfl_convert_vtbl vtbl_cp1254_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_cp1254; + +int mbfl_filt_conv_wchar_cp1254(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_cp1254_wchar(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_CP1254_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c b/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c new file mode 100644 index 0000000..8d733a9 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c @@ -0,0 +1,1296 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: Moriyoshi Koizumi <koizumi@gree.co.jp> + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_cp5022x.h" +#include "mbfilter_jis.h" +#include "mbfilter_tl_jisx0201_jisx0208.h" + +#include "unicode_table_cp932_ext.h" +#include "unicode_table_jis.h" +#include "cp932_table.h" + +typedef struct _mbfl_filt_conv_wchar_cp50220_ctx { + mbfl_filt_tl_jisx0201_jisx0208_param tl_param; + mbfl_convert_filter last; +} mbfl_filt_conv_wchar_cp50220_ctx; + +static int mbfl_filt_ident_jis_ms(int c, mbfl_identify_filter *filter); +static int mbfl_filt_ident_cp50220(int c, mbfl_identify_filter *filter); +static int mbfl_filt_ident_cp50221(int c, mbfl_identify_filter *filter); +static int mbfl_filt_ident_cp50222(int c, mbfl_identify_filter *filter); +static void mbfl_filt_conv_wchar_cp50220_ctor(mbfl_convert_filter *filt); +static void mbfl_filt_conv_wchar_cp50220_dtor(mbfl_convert_filter *filt); +static void mbfl_filt_conv_wchar_cp50220_copy(mbfl_convert_filter *src, mbfl_convert_filter *dest); + +const mbfl_encoding mbfl_encoding_jis_ms = { + mbfl_no_encoding_jis_ms, + "JIS-ms", + "ISO-2022-JP", + NULL, + NULL, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE +}; + +const mbfl_encoding mbfl_encoding_cp50220 = { + mbfl_no_encoding_cp50220, + "CP50220", + "ISO-2022-JP", + (const char *(*)[])NULL, + NULL, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE +}; + +const mbfl_encoding mbfl_encoding_cp50220raw = { + mbfl_no_encoding_cp50220raw, + "CP50220raw", + "ISO-2022-JP", + (const char *(*)[])NULL, + NULL, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE +}; + +const mbfl_encoding mbfl_encoding_cp50221 = { + mbfl_no_encoding_cp50221, + "CP50221", + "ISO-2022-JP", + NULL, + NULL, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE +}; + +const mbfl_encoding mbfl_encoding_cp50222 = { + mbfl_no_encoding_cp50222, + "CP50222", + "ISO-2022-JP", + NULL, + NULL, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_identify_vtbl vtbl_identify_jis_ms = { + mbfl_no_encoding_jis_ms, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_jis_ms +}; + +const struct mbfl_identify_vtbl vtbl_identify_cp50220 = { + mbfl_no_encoding_cp50220, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_cp50220 +}; + +const struct mbfl_identify_vtbl vtbl_identify_cp50220raw = { + mbfl_no_encoding_cp50220raw, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_cp50220 +}; + +const struct mbfl_identify_vtbl vtbl_identify_cp50221 = { + mbfl_no_encoding_cp50221, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_cp50221 +}; + +const struct mbfl_identify_vtbl vtbl_identify_cp50222 = { + mbfl_no_encoding_cp50222, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_cp50222 +}; + +const struct mbfl_convert_vtbl vtbl_jis_ms_wchar = { + mbfl_no_encoding_jis_ms, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_jis_ms_wchar, + mbfl_filt_conv_common_flush, +}; + +const struct mbfl_convert_vtbl vtbl_wchar_jis_ms = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_jis_ms, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_jis_ms, + mbfl_filt_conv_any_jis_flush +}; + +const struct mbfl_convert_vtbl vtbl_cp50220_wchar = { + mbfl_no_encoding_cp50220, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_jis_ms_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_cp50220 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_cp50220, + mbfl_filt_conv_wchar_cp50220_ctor, + mbfl_filt_conv_wchar_cp50220_dtor, + mbfl_filt_conv_wchar_cp50221, + mbfl_filt_conv_any_jis_flush, + mbfl_filt_conv_wchar_cp50220_copy +}; + +const struct mbfl_convert_vtbl vtbl_cp50220raw_wchar = { + mbfl_no_encoding_cp50220raw, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_jis_ms_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_cp50220raw = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_cp50220raw, + mbfl_filt_conv_wchar_cp50220_ctor, + mbfl_filt_conv_wchar_cp50220_dtor, + mbfl_filt_conv_wchar_cp50220raw, + mbfl_filt_conv_any_jis_flush, + mbfl_filt_conv_wchar_cp50220_copy +}; + +const struct mbfl_convert_vtbl vtbl_cp50221_wchar = { + mbfl_no_encoding_cp50221, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_jis_ms_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_cp50221 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_cp50221, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_cp50221, + mbfl_filt_conv_any_jis_flush +}; + +const struct mbfl_convert_vtbl vtbl_cp50222_wchar = { + mbfl_no_encoding_cp50222, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_jis_ms_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_cp50222 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_cp50222, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_cp50222, + mbfl_filt_conv_wchar_cp50222_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * JIS-ms => wchar + */ +int +mbfl_filt_conv_jis_ms_wchar(int c, mbfl_convert_filter *filter) +{ + int c1, s, w; + +retry: + switch (filter->status & 0xf) { +/* case 0x00: ASCII */ +/* case 0x10: X 0201 latin */ +/* case 0x20: X 0201 kana */ +/* case 0x80: X 0208 */ +/* case 0x90: X 0212 */ + case 0: + if (c == 0x1b) { + filter->status += 2; + } else if (c == 0x0e) { /* "kana in" */ + filter->status = 0x20; + } else if (c == 0x0f) { /* "kana out" */ + filter->status = 0; + } else if (filter->status == 0x10 && c == 0x5c) { /* YEN SIGN */ + CK((*filter->output_function)(0xa5, filter->data)); + } else if (filter->status == 0x10 && c == 0x7e) { /* OVER LINE */ + CK((*filter->output_function)(0x203e, filter->data)); + } else if (filter->status == 0x20 && c > 0x20 && c < 0x60) { /* kana */ + CK((*filter->output_function)(0xff40 + c, filter->data)); + } else if ((filter->status == 0x80 || filter->status == 0x90) && c > 0x20 && c < 0x93) { /* kanji first char */ + filter->cache = c; + filter->status += 1; + } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else if (c > 0xa0 && c < 0xe0) { /* GR kana */ + CK((*filter->output_function)(0xfec0 + c, filter->data)); + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + +/* case 0x81: X 0208 second char */ +/* case 0x91: X 0212 second char */ + case 1: + filter->status &= ~0xf; + c1 = filter->cache; + if (c > 0x20 && c < 0x7f) { + s = (c1 - 0x21)*94 + c - 0x21; + if (filter->status == 0x80) { + if (s >= 0 && s < jisx0208_ucs_table_size) { + w = jisx0208_ucs_table[s]; + } else if (s >= cp932ext1_ucs_table_min && s < cp932ext1_ucs_table_max) { + w = cp932ext1_ucs_table[s - cp932ext1_ucs_table_min]; + } else if (s >= cp932ext2_ucs_table_min && s < cp932ext2_ucs_table_max) { + w = cp932ext2_ucs_table[s - cp932ext2_ucs_table_min]; + } else if (s >= cp932ext3_ucs_table_min && s < cp932ext2_ucs_table_max) { + w = cp932ext3_ucs_table[s - cp932ext3_ucs_table_min]; + } else if (s >= 94 * 94 && s < 114 * 94) { + /* user-defined => PUA (Microsoft extended) */ + w = s - 94*94 + 0xe000; + } else { + w = 0; + } + if (w <= 0) { + w = (c1 << 8) | c; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_JIS0208; + } + } else { + if (s >= 0 && s < jisx0212_ucs_table_size) { + w = jisx0212_ucs_table[s]; + } else { + w = 0; + } + if (w <= 0) { + w = (c1 << 8) | c; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_JIS0212; + } + } + CK((*filter->output_function)(w, filter->data)); + } else if (c == 0x1b) { + filter->status += 2; + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + /* ESC */ +/* case 0x02: */ +/* case 0x12: */ +/* case 0x22: */ +/* case 0x82: */ +/* case 0x92: */ + case 2: + if (c == 0x24) { /* '$' */ + filter->status++; + } else if (c == 0x28) { /* '(' */ + filter->status += 3; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + goto retry; + } + break; + + /* ESC $ */ +/* case 0x03: */ +/* case 0x13: */ +/* case 0x23: */ +/* case 0x83: */ +/* case 0x93: */ + case 3: + if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ + filter->status = 0x80; + } else if (c == 0x28) { /* '(' */ + filter->status++; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x24, filter->data)); + goto retry; + } + break; + + /* ESC $ ( */ +/* case 0x04: */ +/* case 0x14: */ +/* case 0x24: */ +/* case 0x84: */ +/* case 0x94: */ + case 4: + if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ + filter->status = 0x80; + } else if (c == 0x44) { /* 'D' */ + filter->status = 0x90; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x24, filter->data)); + CK((*filter->output_function)(0x28, filter->data)); + goto retry; + } + break; + + /* ESC ( */ +/* case 0x05: */ +/* case 0x15: */ +/* case 0x25: */ +/* case 0x85: */ +/* case 0x95: */ + case 5: + if (c == 0x42 || c == 0x48) { /* 'B' or 'H' */ + filter->status = 0; + } else if (c == 0x4a) { /* 'J' */ + filter->status = 0x10; + } else if (c == 0x49) { /* 'I' */ + filter->status = 0x20; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x28, filter->data)); + goto retry; + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => JIS + */ +int +mbfl_filt_conv_wchar_jis_ms(int c, mbfl_convert_filter *filter) +{ + int c1, s; + + s = 0; + if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { + s = ucs_a1_jis_table[c - ucs_a1_jis_table_min]; + } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) { + s = ucs_a2_jis_table[c - ucs_a2_jis_table_min]; + } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) { + s = ucs_i_jis_table[c - ucs_i_jis_table_min]; + } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) { + s = ucs_r_jis_table[c - ucs_r_jis_table_min]; + } else if (c >= 0xe000 && c < (0xe000 + 10 * 94)) { + /* PUE => Microsoft extended (pseudo 95ku - 114ku) */ + /* See http://www.opengroup.or.jp/jvc/cde/ucs-conv.html#ch4_2 */ + s = c - 0xe000; + s = (s / 94 + 0x75) << 8 | (s % 94 + 0x21); + } else if (c >= (0xe000 + 10 * 94) && c <= (0xe000 + 20 * 94)) { + /* PUE => JISX0212 user-defined (G3 85ku - 94ku) */ + /* See http://www.opengroup.or.jp/jvc/cde/ucs-conv.html#ch4_2 */ + s = c - (0xe000 + 10 * 94); + s = (s / 94 + 0xf5) << 8 | (s % 94 + 0xa1); + } + + /* do some transliteration */ + if (s <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_JIS0208) { + s = c & MBFL_WCSPLANE_MASK; + } else if (c1 == MBFL_WCSPLANE_JIS0212) { + s = c & MBFL_WCSPLANE_MASK; + s |= 0x8080; + } else if (c == 0xa5) { /* YEN SIGN */ + s = 0x1005c; + } else if (c == 0x203e) { /* OVER LINE */ + s = 0x1007e; + } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + s = 0x2140; + } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ + s = 0x2141; + } else if (c == 0x2225) { /* PARALLEL TO */ + s = 0x2142; + } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */ + s = 0x215d; + } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */ + s = 0x2171; + } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */ + s = 0x2172; + } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ + s = 0x224c; + } + } + if (s <= 0 || (s >= 0x8080 && s < 0x10000)) { + int i; + s = -1; + + for (i = 0; + i < cp932ext1_ucs_table_max - cp932ext1_ucs_table_min; i++) { + const int oh = cp932ext1_ucs_table_min / 94; + + if (c == cp932ext1_ucs_table[i]) { + s = ((i / 94 + oh + 0x21) << 8) + (i % 94 + 0x21); + break; + } + } + + if (s < 0) { + const int oh = cp932ext2_ucs_table_min / 94; + const int cp932ext2_ucs_table_size = + cp932ext2_ucs_table_max - cp932ext2_ucs_table_min; + for (i = 0; i < cp932ext2_ucs_table_size; i++) { + if (c == cp932ext2_ucs_table[i]) { + s = ((i / 94 + oh + 0x21) << 8) + (i % 94 + 0x21); + break; + } + } + } + + if (s < 0) { + const int cp932ext3_ucs_table_size = + cp932ext3_ucs_table_max - cp932ext3_ucs_table_min; + const int limit = cp932ext3_ucs_table_size > + cp932ext3_eucjp_table_size ? + cp932ext3_eucjp_table_size: + cp932ext3_ucs_table_size; + for (i = 0; i < limit; i++) { + if (c == cp932ext3_ucs_table[i]) { + s = cp932ext3_eucjp_table[i]; + break; + } + } + } + + if (c == 0) { + s = 0; + } else if (s <= 0) { + s = -1; + } + } + + if (s >= 0) { + if (s < 0x80) { /* ASCII */ + if ((filter->status & 0xff00) != 0) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + } + filter->status = 0; + CK((*filter->output_function)(s, filter->data)); + } else if (s < 0x100) { /* kana */ + if ((filter->status & 0xff00) != 0x100) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x49, filter->data)); /* 'I' */ + } + filter->status = 0x100; + CK((*filter->output_function)(s & 0x7f, filter->data)); + } else if (s < 0x8080) { /* X 0208 */ + if ((filter->status & 0xff00) != 0x200) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x24, filter->data)); /* '$' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + } + filter->status = 0x200; + CK((*filter->output_function)((s >> 8) & 0x7f, filter->data)); + CK((*filter->output_function)(s & 0x7f, filter->data)); + } else if (s < 0x10000) { /* X 0212 */ + if ((filter->status & 0xff00) != 0x300) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x24, filter->data)); /* '$' */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x44, filter->data)); /* 'D' */ + } + filter->status = 0x300; + CK((*filter->output_function)((s >> 8) & 0x7f, filter->data)); + CK((*filter->output_function)(s & 0x7f, filter->data)); + } else { /* X 0201 latin */ + if ((filter->status & 0xff00) != 0x400) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x4a, filter->data)); /* 'J' */ + } + filter->status = 0x400; + CK((*filter->output_function)(s & 0x7f, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +/* + * wchar => CP50220 + */ +static void +mbfl_filt_conv_wchar_cp50220_ctor(mbfl_convert_filter *filt) +{ + mbfl_filt_conv_wchar_cp50220_ctx *ctx; + + mbfl_filt_conv_common_ctor(filt); + + ctx = mbfl_malloc(sizeof(mbfl_filt_conv_wchar_cp50220_ctx)); + if (ctx == NULL) { + mbfl_filt_conv_common_dtor(filt); + return; + } + + ctx->tl_param.mode = MBFL_FILT_TL_HAN2ZEN_KATAKANA | MBFL_FILT_TL_HAN2ZEN_GLUE; + + ctx->last = *filt; + ctx->last.opaque = ctx; + ctx->last.data = filt->data; + filt->filter_function = vtbl_tl_jisx0201_jisx0208.filter_function; + filt->filter_flush = vtbl_tl_jisx0201_jisx0208.filter_flush; + filt->output_function = (int(*)(int, void *))ctx->last.filter_function; + filt->flush_function = (int(*)(void *))ctx->last.filter_flush; + filt->data = &ctx->last; + filt->opaque = ctx; + vtbl_tl_jisx0201_jisx0208.filter_ctor(filt); +} + +static void +mbfl_filt_conv_wchar_cp50220_copy(mbfl_convert_filter *src, mbfl_convert_filter *dest) +{ + mbfl_filt_conv_wchar_cp50220_ctx *ctx; + + *dest = *src; + ctx = mbfl_malloc(sizeof(mbfl_filt_conv_wchar_cp50220_ctx)); + if (ctx != NULL) { + *ctx = *(mbfl_filt_conv_wchar_cp50220_ctx*)src->opaque; + } + + dest->opaque = ctx; + dest->data = &ctx->last; +} + +static void +mbfl_filt_conv_wchar_cp50220_dtor(mbfl_convert_filter *filt) +{ + vtbl_tl_jisx0201_jisx0208.filter_dtor(filt); + + if (filt->opaque != NULL) { + mbfl_free(filt->opaque); + } + + mbfl_filt_conv_common_dtor(filt); +} + +/* + * wchar => cp50220raw + */ +int +mbfl_filt_conv_wchar_cp50220raw(int c, mbfl_convert_filter *filter) +{ + if (c & MBFL_WCSPLANE_JIS0208) { + const int s = c & MBFL_WCSPLANE_MASK; + + if ((filter->status & 0xff00) != 0x200) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x24, filter->data)); /* '$' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + filter->status = 0x200; + } + CK((*filter->output_function)((s >> 8) & 0x7f, filter->data)); + CK((*filter->output_function)(s & 0x7f, filter->data)); + return c; + } else { + return mbfl_filt_conv_wchar_cp50221(c, filter); + } +} + +/* + * wchar => CP50221 + */ +int +mbfl_filt_conv_wchar_cp50221(int c, mbfl_convert_filter *filter) +{ + int s = 0; + + if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { + s = ucs_a1_jis_table[c - ucs_a1_jis_table_min]; + } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) { + s = ucs_a2_jis_table[c - ucs_a2_jis_table_min]; + } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) { + s = ucs_i_jis_table[c - ucs_i_jis_table_min]; + } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) { + s = ucs_r_jis_table[c - ucs_r_jis_table_min]; + } else if (c >= 0xe000 && c < (0xe000 + 10 * 94)) { + /* PUE => Microsoft extended */ + /* See http://www.opengroup.or.jp/jvc/cde/ucs-conv.html#ch4_2 */ + s = c - 0xe000; + s = (s / 94 + 0x75) << 8 | (s % 94 + 0x21); + } else if (c >= (0xe000 + 10 * 94) && c <= (0xe000 + 20 * 94)) { + /* PUE => JISX0212 user-defined (G3 85ku - 94ku) */ + /* See http://www.opengroup.or.jp/jvc/cde/ucs-conv.html#ch4_2 */ + s = c - (0xe000 + 10 * 94); + s = (s / 94 + 0xf5) << 8 | (s % 94 + 0xa1); + } + + if (s <= 0) { + if (c == 0xa5) { /* YEN SIGN */ + s = 0x1005c; + } else if (c == 0x203e) { /* OVER LINE */ + s = 0x1007e; + } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + s = 0x2140; + } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ + s = 0x2141; + } else if (c == 0x2225) { /* PARALLEL TO */ + s = 0x2142; + } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */ + s = 0x215d; + } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */ + s = 0x2171; + } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */ + s = 0x2172; + } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ + s = 0x224c; + } + } + if (s <= 0 || (s >= 0x8080 && s < 0x10000)) { + int i; + s = -1; + + for (i = 0; + i < cp932ext1_ucs_table_max - cp932ext1_ucs_table_min; + i++) { + const int oh = cp932ext1_ucs_table_min / 94; + + if (c == cp932ext1_ucs_table[i]) { + s = ((i / 94 + oh + 0x21) << 8) + (i % 94 + 0x21); + break; + } + } + + if (s < 0) { + const int oh = cp932ext2_ucs_table_min / 94; + const int cp932ext2_ucs_table_size = + cp932ext2_ucs_table_max - cp932ext2_ucs_table_min; + for (i = 0; i < cp932ext2_ucs_table_size; i++) { + if (c == cp932ext2_ucs_table[i]) { + s = ((i / 94 + oh + 0x21) << 8) + (i % 94 + 0x21); + break; + } + } + } + + if (s < 0) { + const int cp932ext3_ucs_table_size = + cp932ext3_ucs_table_max - cp932ext3_ucs_table_min; + const int limit = cp932ext3_ucs_table_size > + cp932ext3_eucjp_table_size ? + cp932ext3_eucjp_table_size: + cp932ext3_ucs_table_size; + for (i = 0; i < limit; i++) { + if (c == cp932ext3_ucs_table[i]) { + s = cp932ext3_eucjp_table[i]; + break; + } + } + } + + if (c == 0) { + s = 0; + } else if (s <= 0) { + s = -1; + } + } + + if (s >= 0) { + if (s < 0x80) { /* ASCII */ + if ((filter->status & 0xff00) != 0) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + filter->status = 0; + } + CK((*filter->output_function)(s, filter->data)); + } else if (s >= 0xa0 && s < 0xe0) { /* X 0201 kana */ + if ((filter->status & 0xff00) != 0x500) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x49, filter->data)); /* 'I' */ + filter->status = 0x500; + } + CK((*filter->output_function)(s - 0x80, filter->data)); + } else if (s < 0x8080) { /* X 0208 */ + if ((filter->status & 0xff00) != 0x200) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x24, filter->data)); /* '$' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + filter->status = 0x200; + } + CK((*filter->output_function)((s >> 8) & 0x7f, filter->data)); + CK((*filter->output_function)(s & 0x7f, filter->data)); + } else if (s < 0x10000) { /* X0212 */ + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } else { /* X 0201 latin */ + if ((filter->status & 0xff00) != 0x400) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x4a, filter->data)); /* 'J' */ + } + filter->status = 0x400; + CK((*filter->output_function)(s & 0x7f, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +/* + * wchar => CP50222 + */ +int +mbfl_filt_conv_wchar_cp50222(int c, mbfl_convert_filter *filter) +{ + int s; + + s = 0; + + if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { + s = ucs_a1_jis_table[c - ucs_a1_jis_table_min]; + } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) { + s = ucs_a2_jis_table[c - ucs_a2_jis_table_min]; + } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) { + s = ucs_i_jis_table[c - ucs_i_jis_table_min]; + } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) { + s = ucs_r_jis_table[c - ucs_r_jis_table_min]; + } else if (c >= 0xe000 && c < (0xe000 + 10 * 94)) { + /* PUE => Microsoft extended */ + /* See http://www.opengroup.or.jp/jvc/cde/ucs-conv.html#ch4_2 */ + s = c - 0xe000; + s = (s / 94 + 0x75) << 8 | (s % 94 + 0x21); + } else if (c >= (0xe000 + 10 * 94) && c <= (0xe000 + 20 * 94)) { + /* PUE => JISX0212 user-defined (G3 85ku - 94ku) */ + /* See http://www.opengroup.or.jp/jvc/cde/ucs-conv.html#ch4_2 */ + s = c - (0xe000 + 10 * 94); + s = (s / 94 + 0xf5) << 8 | (s % 94 + 0xa1); + } + + if (s <= 0) { + if (c == 0xa5) { /* YEN SIGN */ + s = 0x1005c; + } else if (c == 0x203e) { /* OVER LINE */ + s = 0x1007e; + } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + s = 0x2140; + } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ + s = 0x2141; + } else if (c == 0x2225) { /* PARALLEL TO */ + s = 0x2142; + } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */ + s = 0x215d; + } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */ + s = 0x2171; + } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */ + s = 0x2172; + } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ + s = 0x224c; + } + } + if (s <= 0 || (s >= 0x8080 && s < 0x10000)) { + int i; + s = -1; + + for (i = 0; + i < cp932ext1_ucs_table_max - cp932ext1_ucs_table_min; i++) { + const int oh = cp932ext1_ucs_table_min / 94; + + if (c == cp932ext1_ucs_table[i]) { + s = ((i / 94 + oh + 0x21) << 8) + (i % 94 + 0x21); + break; + } + } + + if (s <= 0) { + const int oh = cp932ext2_ucs_table_min / 94; + const int cp932ext2_ucs_table_size = + cp932ext2_ucs_table_max - cp932ext2_ucs_table_min; + for (i = 0; i < cp932ext2_ucs_table_size; i++) { + if (c == cp932ext2_ucs_table[i]) { + s = ((i / 94 + oh + 0x21) << 8) + (i % 94 + 0x21); + break; + } + } + } + + if (s <= 0) { + const int cp932ext3_ucs_table_size = + cp932ext3_ucs_table_max - cp932ext3_ucs_table_min; + const int limit = cp932ext3_ucs_table_size > + cp932ext3_eucjp_table_size ? + cp932ext3_eucjp_table_size: + cp932ext3_ucs_table_size; + for (i = 0; i < limit; i++) { + if (c == cp932ext3_ucs_table[i]) { + s = cp932ext3_eucjp_table[i]; + break; + } + } + } + + if (c == 0) { + s = 0; + } else if (s <= 0) { + s = -1; + } + } + + if (s >= 0) { + if (s < 0x80) { /* ASCII */ + if ((filter->status & 0xff00) == 0x500) { + CK((*filter->output_function)(0x0f, filter->data)); /* SO */ + filter->status = 0; + } else if ((filter->status & 0xff00) != 0) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + filter->status = 0; + } + CK((*filter->output_function)(s, filter->data)); + } else if (s >= 0xa0 && s < 0xe0) { /* X 0201 kana */ + if ((filter->status & 0xff00) != 0x500) { + CK((*filter->output_function)(0x0e, filter->data)); /* SI */ + filter->status = 0x500; + } + CK((*filter->output_function)(s - 0x80, filter->data)); + } else if (s < 0x8080) { /* X 0208 */ + if ((filter->status & 0xff00) == 0x500) { + CK((*filter->output_function)(0x0f, filter->data)); /* SO */ + filter->status = 0; + } + if ((filter->status & 0xff00) != 0x200) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x24, filter->data)); /* '$' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + filter->status = 0x200; + } + CK((*filter->output_function)((s >> 8) & 0x7f, filter->data)); + CK((*filter->output_function)(s & 0x7f, filter->data)); + } else if (s < 0x10000) { /* X0212 */ + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } else { /* X 0201 latin */ + if ((filter->status & 0xff00) == 0x500) { + CK((*filter->output_function)(0x0f, filter->data)); /* SO */ + filter->status = 0; + } + if ((filter->status & 0xff00) != 0x400) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x4a, filter->data)); /* 'J' */ + } + filter->status = 0x400; + CK((*filter->output_function)(s & 0x7f, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +int +mbfl_filt_conv_wchar_cp50222_flush(mbfl_convert_filter *filter) +{ + /* back to latin */ + if ((filter->status & 0xff00) == 0x500) { + CK((*filter->output_function)(0x0f, filter->data)); /* SO */ + } else if ((filter->status & 0xff00) != 0) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + } + filter->status &= 0xff; + + if (filter->flush_function != NULL) { + return (*filter->flush_function)(filter->data); + } + + return 0; +} + + +static int mbfl_filt_ident_jis_ms(int c, mbfl_identify_filter *filter) +{ +retry: + switch (filter->status & 0xf) { +/* case 0x00: ASCII */ +/* case 0x10: X 0201 latin */ +/* case 0x20: X 0201 kana */ +/* case 0x80: X 0208 */ +/* case 0x90: X 0212 */ + case 0: + if (c == 0x1b) { + filter->status += 2; + } else if (c == 0x0e) { /* "kana in" */ + filter->status = 0x20; + } else if (c == 0x0f) { /* "kana out" */ + filter->status = 0; + } else if ((filter->status == 0x80 || filter->status == 0x90) && c > 0x20 && c < 0x7f) { /* kanji first char */ + filter->status += 1; + } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ + ; + } else { + filter->flag = 1; /* bad */ + } + break; + +/* case 0x81: X 0208 second char */ +/* case 0x91: X 0212 second char */ + case 1: + filter->status &= ~0xf; + if (c == 0x1b) { + goto retry; + } else if (c < 0x21 || c > 0x7e) { /* bad */ + filter->flag = 1; + } + break; + + /* ESC */ + case 2: + if (c == 0x24) { /* '$' */ + filter->status++; + } else if (c == 0x28) { /* '(' */ + filter->status += 3; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC $ */ + case 3: + if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ + filter->status = 0x80; + } else if (c == 0x28) { /* '(' */ + filter->status++; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC $ ( */ + case 4: + if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ + filter->status = 0x80; + } else if (c == 0x44) { /* 'D' */ + filter->status = 0x90; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC ( */ + case 5: + if (c == 0x42 || c == 0x48) { /* 'B' or 'H' */ + filter->status = 0; + } else if (c == 0x4a) { /* 'J' */ + filter->status = 0x10; + } else if (c == 0x49) { /* 'I' */ + filter->status = 0x20; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +static int mbfl_filt_ident_cp50220(int c, mbfl_identify_filter *filter) +{ +retry: + switch (filter->status & 0xf) { +/* case 0x00: ASCII */ +/* case 0x10: X 0201 latin */ +/* case 0x80: X 0208 */ + case 0: + if (c == 0x1b) { + filter->status += 2; + } else if (filter->status == 0x80 && c > 0x20 && c < 0x7f) { /* kanji first char */ + filter->status += 1; + } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ + ; + } else { + filter->flag = 1; /* bad */ + } + break; + +/* case 0x81: X 0208 second char */ + case 1: + if (c == 0x1b) { + filter->status++; + } else { + filter->status &= ~0xf; + if (c < 0x21 || c > 0x7e) { /* bad */ + filter->flag = 1; + } + } + break; + + /* ESC */ + case 2: + if (c == 0x24) { /* '$' */ + filter->status++; + } else if (c == 0x28) { /* '(' */ + filter->status += 3; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC $ */ + case 3: + if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ + filter->status = 0x80; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC ( */ + case 5: + if (c == 0x42) { /* 'B' */ + filter->status = 0; + } else if (c == 0x4a) { /* 'J' */ + filter->status = 0x10; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +static int mbfl_filt_ident_cp50221(int c, mbfl_identify_filter *filter) +{ +retry: + switch (filter->status & 0xf) { +/* case 0x00: ASCII */ +/* case 0x10: X 0201 latin */ +/* case 0x80: X 0208 */ + case 0: + if (c == 0x1b) { + filter->status += 2; + } else if (filter->status == 0x80 && c > 0x20 && c < 0x7f) { /* kanji first char */ + filter->status += 1; + } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ + ; + } else { + filter->flag = 1; /* bad */ + } + break; + +/* case 0x81: X 0208 second char */ + case 1: + if (c == 0x1b) { + filter->status++; + } else { + filter->status &= ~0xf; + if (c < 0x21 || c > 0x7e) { /* bad */ + filter->flag = 1; + } + } + break; + + /* ESC */ + case 2: + if (c == 0x24) { /* '$' */ + filter->status++; + } else if (c == 0x28) { /* '(' */ + filter->status += 3; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC $ */ + case 3: + if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ + filter->status = 0x80; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC ( */ + case 5: + if (c == 0x42) { /* 'B' */ + filter->status = 0; + } else if (c == 0x4a) { /* 'J' */ + filter->status = 0x10; + } else if (c == 0x49) { /* 'I' */ + filter->status = 0x20; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +static int mbfl_filt_ident_cp50222(int c, mbfl_identify_filter *filter) +{ +retry: + switch (filter->status & 0xf) { +/* case 0x00: ASCII */ +/* case 0x10: X 0201 latin */ +/* case 0x80: X 0208 */ + case 0: + if (c == 0x1b) { + filter->status += 2; + } else if (filter->status == 0x80 && c > 0x20 && c < 0x7f) { /* kanji first char */ + filter->status += 1; + } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ + ; + } else { + filter->flag = 1; /* bad */ + } + break; + +/* case 0x81: X 0208 second char */ + case 1: + if (c == 0x1b) { + filter->status++; + } else { + filter->status &= ~0xf; + if (c < 0x21 || c > 0x7e) { /* bad */ + filter->flag = 1; + } + } + break; + + /* ESC */ + case 2: + if (c == 0x24) { /* '$' */ + filter->status++; + } else if (c == 0x28) { /* '(' */ + filter->status += 3; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC $ */ + case 3: + if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ + filter->status = 0x80; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC ( */ + case 5: + if (c == 0x42) { /* 'B' */ + filter->status = 0; + } else if (c == 0x4a) { /* 'J' */ + filter->status = 0x10; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.h b/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.h new file mode 100644 index 0000000..a462f70 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.h @@ -0,0 +1,64 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_ja.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_CP50221_h +#define MBFL_MBFILTER_CP50221_h + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_jis_ms; +extern const mbfl_encoding mbfl_encoding_cp50220; +extern const mbfl_encoding mbfl_encoding_cp50220raw; +extern const mbfl_encoding mbfl_encoding_cp50221; +extern const mbfl_encoding mbfl_encoding_cp50222; +extern const struct mbfl_identify_vtbl vtbl_identify_jis_ms; +extern const struct mbfl_identify_vtbl vtbl_identify_cp50220; +extern const struct mbfl_identify_vtbl vtbl_identify_cp50220raw; +extern const struct mbfl_identify_vtbl vtbl_identify_cp50221; +extern const struct mbfl_identify_vtbl vtbl_identify_cp50222; +extern const struct mbfl_convert_vtbl vtbl_jis_ms_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_jis_ms; +extern const struct mbfl_convert_vtbl vtbl_cp50220_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_cp50220; +extern const struct mbfl_convert_vtbl vtbl_cp50220raw_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_cp50220raw; +extern const struct mbfl_convert_vtbl vtbl_cp50221_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_cp50221; +extern const struct mbfl_convert_vtbl vtbl_cp50222_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_cp50222; + +int mbfl_filt_conv_jis_ms_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_jis_ms(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_cp50220(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_cp50220raw(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_cp50221(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_cp50222(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_cp50222_flush(mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_CP50221_h */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp51932.c b/ext/mbstring/libmbfl/filters/mbfilter_cp51932.c new file mode 100644 index 0000000..f84be1e --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp51932.c @@ -0,0 +1,345 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_ja.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_cp51932.h" + +#include "unicode_table_cp932_ext.h" +#include "unicode_table_jis.h" +#include "cp932_table.h" + +static int mbfl_filt_ident_cp51932(int c, mbfl_identify_filter *filter); + +static const unsigned char mblen_table_eucjp[] = { /* 0xA1-0xFE */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 +}; + + +static const char *mbfl_encoding_cp51932_aliases[] = {"cp51932", NULL}; + +const struct mbfl_identify_vtbl vtbl_identify_cp51932 = { + mbfl_no_encoding_cp51932, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_cp51932 +}; + +const mbfl_encoding mbfl_encoding_cp51932 = { + mbfl_no_encoding_cp51932, + "CP51932", + "CP51932", + (const char *(*)[])&mbfl_encoding_cp51932_aliases, + mblen_table_eucjp, + MBFL_ENCTYPE_MBCS +}; + +const struct mbfl_convert_vtbl vtbl_cp51932_wchar = { + mbfl_no_encoding_cp51932, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_cp51932_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_cp51932 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_cp51932, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_cp51932, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +#define sjistoidx(c1, c2) \ + (((c1) > 0x9f) \ + ? (((c1) - 0xc1) * 188 + (c2) - (((c2) > 0x7e) ? 0x41 : 0x40)) \ + : (((c1) - 0x81) * 188 + (c2) - (((c2) > 0x7e) ? 0x41 : 0x40))) +#define idxtoeuc1(c) (((c) / 94) + 0xa1) +#define idxtoeuc2(c) (((c) % 94) + 0xa1) + +/* + * cp51932 => wchar + */ +int +mbfl_filt_conv_cp51932_wchar(int c, mbfl_convert_filter *filter) +{ + int c1, s, w; + + switch (filter->status) { + case 0: + if (c >= 0 && c < 0x80) { /* latin */ + CK((*filter->output_function)(c, filter->data)); + } else if (c > 0xa0 && c < 0xff) { /* CP932 first char */ + filter->status = 1; + filter->cache = c; + } else if (c == 0x8e) { /* kana first char */ + filter->status = 2; + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 1: /* got first half */ + filter->status = 0; + c1 = filter->cache; + if (c > 0xa0 && c < 0xff) { + w = 0; + s = (c1 - 0xa1)*94 + c - 0xa1; + if (s <= 137) { + if (s == 31) { + w = 0xff3c; /* FULLWIDTH REVERSE SOLIDUS */ + } else if (s == 32) { + w = 0xff5e; /* FULLWIDTH TILDE */ + } else if (s == 33) { + w = 0x2225; /* PARALLEL TO */ + } else if (s == 60) { + w = 0xff0d; /* FULLWIDTH HYPHEN-MINUS */ + } else if (s == 80) { + w = 0xffe0; /* FULLWIDTH CENT SIGN */ + } else if (s == 81) { + w = 0xffe1; /* FULLWIDTH POUND SIGN */ + } else if (s == 137) { + w = 0xffe2; /* FULLWIDTH NOT SIGN */ + } + } + if (w == 0) { + if (s >= cp932ext1_ucs_table_min && s < cp932ext1_ucs_table_max) { /* vendor ext1 (13ku) */ + w = cp932ext1_ucs_table[s - cp932ext1_ucs_table_min]; + } else if (s >= 0 && s < jisx0208_ucs_table_size) { /* X 0208 */ + w = jisx0208_ucs_table[s]; + } else if (s >= cp932ext2_ucs_table_min && s < cp932ext2_ucs_table_max) { /* vendor ext2 (89ku - 92ku) */ + w = cp932ext2_ucs_table[s - cp932ext2_ucs_table_min]; + } + } + if (w <= 0) { + w = ((c1 & 0x7f) << 8) | (c & 0x7f); + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_WINCP932; + } + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 2: /* got 0x8e, X0201 kana */ + filter->status = 0; + if (c > 0xa0 && c < 0xe0) { + w = 0xfec0 + c; + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = 0x8e00 | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => cp51932 + */ +int +mbfl_filt_conv_wchar_cp51932(int c, mbfl_convert_filter *filter) +{ + int c1, c2, s1; + + s1 = 0; + if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { + s1 = ucs_a1_jis_table[c - ucs_a1_jis_table_min]; + } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) { + s1 = ucs_a2_jis_table[c - ucs_a2_jis_table_min]; + } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) { + s1 = ucs_i_jis_table[c - ucs_i_jis_table_min]; + } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) { + s1 = ucs_r_jis_table[c - ucs_r_jis_table_min]; + } + if (s1 >= 0x8080) s1 = -1; /* we don't support JIS X0213 */ + if (s1 <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_WINCP932) { + s1 = c & MBFL_WCSPLANE_MASK; + if (s1 >= ((85 + 0x20) << 8)) { /* 85ku - 120ku */ + s1 = -1; + } + } else if (c1 == MBFL_WCSPLANE_JIS0208) { + s1 = c & MBFL_WCSPLANE_MASK; + if ((s1 >= ((85 + 0x20) << 8) && /* 85ku - 94ku */ + s1 <= ((88 + 0x20) << 8)) ||/* IBM extension */ + (s1 >= ((93 + 0x20) << 8) && /* 89ku - 92ku */ + s1 <= ((94 + 0x20) << 8))) { + s1 = -1; + } + } else if (c == 0xa5) { /* YEN SIGN */ + s1 = 0x005c; /* YEN SIGN */ + } else if (c == 0x203e) { /* OVER LINE */ + s1 = 0x007e; /* FULLWIDTH MACRON */ + } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + s1 = 0x2140; + } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ + s1 = 0x2141; + } else if (c == 0x2225) { /* PARALLEL TO */ + s1 = 0x2142; + } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */ + s1 = 0x215d; + } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */ + s1 = 0x2171; + } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */ + s1 = 0x2172; + } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ + s1 = 0x224c; + } else { + s1 = -1; + c1 = 0; + c2 = cp932ext1_ucs_table_max - cp932ext1_ucs_table_min; + while (c1 < c2) { /* CP932 vendor ext1 (13ku) */ + if (c == cp932ext1_ucs_table[c1]) { + s1 = ((c1/94 + 0x2d) << 8) + (c1%94 + 0x21); + break; + } + c1++; + } + if (s1 < 0) { + c1 = 0; + c2 = cp932ext2_ucs_table_max - cp932ext2_ucs_table_min; + while (c1 < c2) { /* CP932 vendor ext3 (115ku - 119ku) */ + if (c == cp932ext2_ucs_table[c1]) { + s1 = ((c1/94 + 0x79) << 8) +(c1%94 + 0x21); + break; + } + c1++; + } + } + } + if (c == 0) { + s1 = 0; + } else if (s1 <= 0) { + s1 = -1; + } + } + + if (s1 >= 0) { + if (s1 < 0x80) { /* latin */ + CK((*filter->output_function)(s1, filter->data)); + } else if (s1 < 0x100) { /* kana */ + CK((*filter->output_function)(0x8e, filter->data)); + CK((*filter->output_function)(s1, filter->data)); + } else if (s1 < 0x8080) { /* X 0208 */ + CK((*filter->output_function)(((s1 >> 8) & 0xff) | 0x80, filter->data)); + CK((*filter->output_function)((s1 & 0xff) | 0x80, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +static int mbfl_filt_ident_cp51932(int c, mbfl_identify_filter *filter) +{ + switch (filter->status) { + case 0: /* latin */ + if (c >= 0 && c < 0x80) { /* ok */ + ; + } else if (c > 0xa0 && c < 0xff) { /* kanji first char */ + filter->status = 1; + } else if (c == 0x8e) { /* kana first char */ + filter->status = 2; + } else { /* bad */ + filter->flag = 1; + } + break; + + case 1: /* got first half */ + if (c < 0xa1 || c > 0xfe) { /* bad */ + filter->flag = 1; + } + filter->status = 0; + break; + + case 2: /* got 0x8e */ + if (c < 0xa1 || c > 0xdf) { /* bad */ + filter->flag = 1; + } + filter->status = 0; + break; + + default: + filter->status = 0; + break; + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp51932.h b/ext/mbstring/libmbfl/filters/mbfilter_cp51932.h new file mode 100644 index 0000000..be86b82 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp51932.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_ja.h + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_CP51932_H +#define MBFL_MBFILTER_CP51932_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_cp51932; +extern const struct mbfl_identify_vtbl vtbl_identify_cp51932; +extern const struct mbfl_convert_vtbl vtbl_cp51932_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_cp51932; + +int mbfl_filt_conv_cp51932_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_cp51932(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_CP51932_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp850.c b/ext/mbstring/libmbfl/filters/mbfilter_cp850.c new file mode 100644 index 0000000..9e4696a --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp850.c @@ -0,0 +1,147 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Den V. Tsopa <tdv@edisoft.ru> + * Adaption for CP850: D. Giffeler <dg@artegic.de> + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_cp850.h" +#include "unicode_table_cp850.h" + +static int mbfl_filt_ident_cp850(int c, mbfl_identify_filter *filter); + +static const char *mbfl_encoding_cp850_aliases[] = {"CP850", "CP-850", "IBM850", "IBM-850", NULL}; + +const mbfl_encoding mbfl_encoding_cp850 = { + mbfl_no_encoding_cp850, + "CP850", + "CP850", + (const char *(*)[])&mbfl_encoding_cp850_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_cp850 = { + mbfl_no_encoding_cp850, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_cp850 +}; + +const struct mbfl_convert_vtbl vtbl_wchar_cp850 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_cp850, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_cp850, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_cp850_wchar = { + mbfl_no_encoding_cp850, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_cp850_wchar, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * cp850 => wchar + */ +int +mbfl_filt_conv_cp850_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < cp850_ucs_table_min) { + s = c; + } else if (c >= cp850_ucs_table_min && c < 0x100) { + s = cp850_ucs_table[c - cp850_ucs_table_min]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_CP850; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* + * wchar => cp850 + */ +int +mbfl_filt_conv_wchar_cp850(int c, mbfl_convert_filter *filter) +{ + int s, n; + + if (c < 0x80) { + s = c; + } else { + s = -1; + n = cp850_ucs_table_len-1; + while (n >= 0) { + if (c == cp850_ucs_table[n]) { + s = cp850_ucs_table_min + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_CP850) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +static int mbfl_filt_ident_cp850(int c, mbfl_identify_filter *filter) +{ + if (c >= 0x80 && c < 0xff) + filter->flag = 0; + else + filter->flag = 1; /* not it */ + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp850.h b/ext/mbstring/libmbfl/filters/mbfilter_cp850.h new file mode 100644 index 0000000..a1e0f9c --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp850.h @@ -0,0 +1,37 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Den V. Tsopa <tdv@edisoft.ru> + * Adaption for CP850: D. Giffeler <dg@artegic.de> + * + */ + +#ifndef MBFL_MBFILTER_CP850_H +#define MBFL_MBFILTER_CP850_H + +extern const mbfl_encoding mbfl_encoding_cp850; +extern const struct mbfl_identify_vtbl vtbl_identify_cp850; +extern const struct mbfl_convert_vtbl vtbl_wchar_cp850; +extern const struct mbfl_convert_vtbl vtbl_cp850_wchar; + +int mbfl_filt_conv_cp850_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_cp850(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_CP850_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp866.c b/ext/mbstring/libmbfl/filters/mbfilter_cp866.c new file mode 100644 index 0000000..22e109f --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp866.c @@ -0,0 +1,151 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Den V. Tsopa <tdv@edisoft.ru> + * + */ +/* + * The source code included in this files was separated from mbfilter_ru.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_cp866.h" +#include "unicode_table_cp866.h" + +static int mbfl_filt_ident_cp866(int c, mbfl_identify_filter *filter); + +static const char *mbfl_encoding_cp866_aliases[] = {"CP866", "CP-866", "IBM866", "IBM-866", NULL}; + +const mbfl_encoding mbfl_encoding_cp866 = { + mbfl_no_encoding_cp866, + "CP866", + "CP866", + (const char *(*)[])&mbfl_encoding_cp866_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_cp866 = { + mbfl_no_encoding_cp866, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_cp866 +}; + +const struct mbfl_convert_vtbl vtbl_wchar_cp866 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_cp866, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_cp866, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_cp866_wchar = { + mbfl_no_encoding_cp866, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_cp866_wchar, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * cp866 => wchar + */ +int +mbfl_filt_conv_cp866_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < cp866_ucs_table_min) { + s = c; + } else if (c >= cp866_ucs_table_min && c < 0x100) { + s = cp866_ucs_table[c - cp866_ucs_table_min]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_CP866; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* + * wchar => cp866 + */ +int +mbfl_filt_conv_wchar_cp866(int c, mbfl_convert_filter *filter) +{ + int s, n; + + if (c < 0x80) { + s = c; + } else { + s = -1; + n = cp866_ucs_table_len-1; + while (n >= 0) { + if (c == cp866_ucs_table[n]) { + s = cp866_ucs_table_min + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_CP866) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +static int mbfl_filt_ident_cp866(int c, mbfl_identify_filter *filter) +{ + if (c >= 0x80 && c < 0xff) + filter->flag = 0; + else + filter->flag = 1; /* not it */ + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp866.h b/ext/mbstring/libmbfl/filters/mbfilter_cp866.h new file mode 100644 index 0000000..9cb4e25 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp866.h @@ -0,0 +1,41 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Den V. Tsopa <tdv@edisoft.ru> + * + */ +/* + * The source code included in this files was separated from mbfilter_ru.h + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_CP866_H +#define MBFL_MBFILTER_CP866_H + +extern const mbfl_encoding mbfl_encoding_cp866; +extern const struct mbfl_identify_vtbl vtbl_identify_cp866; +extern const struct mbfl_convert_vtbl vtbl_wchar_cp866; +extern const struct mbfl_convert_vtbl vtbl_cp866_wchar; + +int mbfl_filt_conv_cp866_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_cp866(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_CP866_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp932.c b/ext/mbstring/libmbfl/filters/mbfilter_cp932.c new file mode 100644 index 0000000..40ba849 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp932.c @@ -0,0 +1,350 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * the source code included in this files was separated from mbfilter_ja.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_cp932.h" + +#include "unicode_table_cp932_ext.h" +#include "unicode_table_jis.h" + +static int mbfl_filt_ident_cp932(int c, mbfl_identify_filter *filter); + +static const unsigned char mblen_table_sjis[] = { /* 0x80-0x9f,0xE0-0xFF */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +}; + +static const char *mbfl_encoding_cp932_aliases[] = {"MS932", "Windows-31J", "MS_Kanji", NULL}; + +const mbfl_encoding mbfl_encoding_cp932 = { + mbfl_no_encoding_cp932, + "CP932", + "Shift_JIS", + (const char *(*)[])&mbfl_encoding_cp932_aliases, + mblen_table_sjis, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_identify_vtbl vtbl_identify_cp932 = { + mbfl_no_encoding_cp932, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_cp932 +}; + +const struct mbfl_convert_vtbl vtbl_cp932_wchar = { + mbfl_no_encoding_cp932, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_cp932_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_cp932 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_cp932, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_cp932, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +#define SJIS_ENCODE(c1,c2,s1,s2) \ + do { \ + s1 = c1; \ + s1--; \ + s1 >>= 1; \ + if ((c1) < 0x5f) { \ + s1 += 0x71; \ + } else { \ + s1 += 0xb1; \ + } \ + s2 = c2; \ + if ((c1) & 1) { \ + if ((c2) < 0x60) { \ + s2--; \ + } \ + s2 += 0x20; \ + } else { \ + s2 += 0x7e; \ + } \ + } while (0) + +#define SJIS_DECODE(c1,c2,s1,s2) \ + do { \ + s1 = c1; \ + if (s1 < 0xa0) { \ + s1 -= 0x81; \ + } else { \ + s1 -= 0xc1; \ + } \ + s1 <<= 1; \ + s1 += 0x21; \ + s2 = c2; \ + if (s2 < 0x9f) { \ + if (s2 < 0x7f) { \ + s2++; \ + } \ + s2 -= 0x20; \ + } else { \ + s1++; \ + s2 -= 0x7e; \ + } \ + } while (0) + + +/* + * SJIS-win => wchar + */ +int +mbfl_filt_conv_cp932_wchar(int c, mbfl_convert_filter *filter) +{ + int c1, s, s1, s2, w; + + switch (filter->status) { + case 0: + if (c >= 0 && c < 0x80) { /* latin */ + CK((*filter->output_function)(c, filter->data)); + } else if (c > 0xa0 && c < 0xe0) { /* kana */ + CK((*filter->output_function)(0xfec0 + c, filter->data)); + } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */ + filter->status = 1; + filter->cache = c; + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 1: /* kanji second char */ + filter->status = 0; + c1 = filter->cache; + if (c >= 0x40 && c <= 0xfc && c != 0x7f) { + w = 0; + SJIS_DECODE(c1, c, s1, s2); + s = (s1 - 0x21)*94 + s2 - 0x21; + if (s <= 137) { + if (s == 31) { + w = 0xff3c; /* FULLWIDTH REVERSE SOLIDUS */ + } else if (s == 32) { + w = 0xff5e; /* FULLWIDTH TILDE */ + } else if (s == 33) { + w = 0x2225; /* PARALLEL TO */ + } else if (s == 60) { + w = 0xff0d; /* FULLWIDTH HYPHEN-MINUS */ + } else if (s == 80) { + w = 0xffe0; /* FULLWIDTH CENT SIGN */ + } else if (s == 81) { + w = 0xffe1; /* FULLWIDTH POUND SIGN */ + } else if (s == 137) { + w = 0xffe2; /* FULLWIDTH NOT SIGN */ + } + } + if (w == 0) { + if (s >= cp932ext1_ucs_table_min && s < cp932ext1_ucs_table_max) { /* vendor ext1 (13ku) */ + w = cp932ext1_ucs_table[s - cp932ext1_ucs_table_min]; + } else if (s >= 0 && s < jisx0208_ucs_table_size) { /* X 0208 */ + w = jisx0208_ucs_table[s]; + } else if (s >= cp932ext2_ucs_table_min && s < cp932ext2_ucs_table_max) { /* vendor ext2 (89ku - 92ku) */ + w = cp932ext2_ucs_table[s - cp932ext2_ucs_table_min]; + } else if (s >= cp932ext3_ucs_table_min && s < cp932ext3_ucs_table_max) { /* vendor ext3 (115ku - 119ku) */ + w = cp932ext3_ucs_table[s - cp932ext3_ucs_table_min]; + } else if (s >= (94*94) && s < (114*94)) { /* user (95ku - 114ku) */ + w = s - (94*94) + 0xe000; + } + } + if (w <= 0) { + w = (s1 << 8) | s2; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_WINCP932; + } + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => SJIS-win + */ +int +mbfl_filt_conv_wchar_cp932(int c, mbfl_convert_filter *filter) +{ + int c1, c2, s1, s2; + + s1 = 0; + s2 = 0; + if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { + s1 = ucs_a1_jis_table[c - ucs_a1_jis_table_min]; + } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) { + s1 = ucs_a2_jis_table[c - ucs_a2_jis_table_min]; + } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) { + s1 = ucs_i_jis_table[c - ucs_i_jis_table_min]; + } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) { + s1 = ucs_r_jis_table[c - ucs_r_jis_table_min]; + } else if (c >= 0xe000 && c < (0xe000 + 20*94)) { /* user (95ku - 114ku) */ + s1 = c - 0xe000; + c1 = s1/94 + 0x7f; + c2 = s1%94 + 0x21; + s1 = (c1 << 8) | c2; + s2 = 1; + } + if (s1 <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_WINCP932) { + s1 = c & MBFL_WCSPLANE_MASK; + s2 = 1; + } else if (c1 == MBFL_WCSPLANE_JIS0208) { + s1 = c & MBFL_WCSPLANE_MASK; + } else if (c1 == MBFL_WCSPLANE_JIS0212) { + s1 = c & MBFL_WCSPLANE_MASK; + s1 |= 0x8080; + } else if (c == 0xa5) { /* YEN SIGN */ + s1 = 0x005c; /* YEN SIGN */ + } else if (c == 0x203e) { /* OVER LINE */ + s1 = 0x007e; /* FULLWIDTH MACRON */ + } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + s1 = 0x2140; + } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ + s1 = 0x2141; + } else if (c == 0x2225) { /* PARALLEL TO */ + s1 = 0x2142; + } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */ + s1 = 0x215d; + } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */ + s1 = 0x2171; + } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */ + s1 = 0x2172; + } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ + s1 = 0x224c; + } + } + if ((s1 <= 0) || (s1 >= 0x8080 && s2 == 0)) { /* not found or X 0212 */ + s1 = -1; + c1 = 0; + c2 = cp932ext1_ucs_table_max - cp932ext1_ucs_table_min; + while (c1 < c2) { /* CP932 vendor ext1 (13ku) */ + if (c == cp932ext1_ucs_table[c1]) { + s1 = ((c1/94 + 0x2d) << 8) + (c1%94 + 0x21); + break; + } + c1++; + } + if (s1 <= 0) { + c1 = 0; + c2 = cp932ext3_ucs_table_max - cp932ext3_ucs_table_min; + while (c1 < c2) { /* CP932 vendor ext3 (115ku - 119ku) */ + if (c == cp932ext3_ucs_table[c1]) { + s1 = ((c1/94 + 0x93) << 8) + (c1%94 + 0x21); + break; + } + c1++; + } + } + if (c == 0) { + s1 = 0; + } else if (s1 <= 0) { + s1 = -1; + } + } + if (s1 >= 0) { + if (s1 < 0x100) { /* latin or kana */ + CK((*filter->output_function)(s1, filter->data)); + } else { /* kanji */ + c1 = (s1 >> 8) & 0xff; + c2 = s1 & 0xff; + SJIS_ENCODE(c1, c2, s1, s2); + CK((*filter->output_function)(s1, filter->data)); + CK((*filter->output_function)(s2, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +static int mbfl_filt_ident_cp932(int c, mbfl_identify_filter *filter) +{ + if (filter->status) { /* kanji second char */ + if (c < 0x40 || c > 0xfc || c == 0x7f) { /* bad */ + filter->flag = 1; + } + filter->status = 0; + } else if (c >= 0 && c < 0x80) { /* latin ok */ + ; + } else if (c > 0xa0 && c < 0xe0) { /* kana ok */ + ; + } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */ + filter->status = 1; + } else { /* bad */ + filter->flag = 1; + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp932.h b/ext/mbstring/libmbfl/filters/mbfilter_cp932.h new file mode 100644 index 0000000..b6a2114 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp932.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * the source code included in this files was separated from mbfilter_ja.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_CP932_H +#define MBFL_MBFILTER_CP932_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_cp932; +extern const struct mbfl_identify_vtbl vtbl_identify_cp932; +extern const struct mbfl_convert_vtbl vtbl_cp932_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_cp932; + +int mbfl_filt_conv_cp932_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_cp932(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_CP932_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp936.c b/ext/mbstring/libmbfl/filters/mbfilter_cp936.c new file mode 100644 index 0000000..caf26e3 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp936.c @@ -0,0 +1,306 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * the source code included in this files was separated from mbfilter_cn.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_cp936.h" +#define UNICODE_TABLE_CP936_DEF +#include "unicode_table_cp936.h" + +static int mbfl_filt_ident_cp936(int c, mbfl_identify_filter *filter); + +static const unsigned char mblen_table_cp936[] = { /* 0x81-0xFE */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 +}; + +static const char *mbfl_encoding_cp936_aliases[] = {"CP-936", "GBK", NULL}; + +const mbfl_encoding mbfl_encoding_cp936 = { + mbfl_no_encoding_cp936, + "CP936", + "CP936", + (const char *(*)[])&mbfl_encoding_cp936_aliases, + mblen_table_cp936, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_identify_vtbl vtbl_identify_cp936 = { + mbfl_no_encoding_cp936, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_cp936 +}; + +const struct mbfl_convert_vtbl vtbl_cp936_wchar = { + mbfl_no_encoding_cp936, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_cp936_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_cp936 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_cp936, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_cp936, + mbfl_filt_conv_common_flush +}; + + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * CP936 => wchar + */ +int +mbfl_filt_conv_cp936_wchar(int c, mbfl_convert_filter *filter) +{ + int k; + int c1, c2, w = -1; + + switch (filter->status) { + case 0: + if (c >= 0 && c < 0x80) { /* latin */ + CK((*filter->output_function)(c, filter->data)); + } else if (c == 0x80) { /* euro sign */ + CK((*filter->output_function)(0x20ac, filter->data)); + } else if (c < 0xff) { /* dbcs lead byte */ + filter->status = 1; + filter->cache = c; + } else { /* 0xff */ + CK((*filter->output_function)(0xf8f5, filter->data)); + } + break; + + case 1: /* dbcs second byte */ + filter->status = 0; + c1 = filter->cache; + + if (((c1 >= 0xaa && c1 <= 0xaf) || (c1 >= 0xf8 && c1 <= 0xfe)) && + (c >= 0xa1 && c <= 0xfe)) { + /* UDA part1,2: U+E000-U+E4C5 */ + w = 94*(c1 >= 0xf8 ? c1 - 0xf2 : c1 - 0xaa) + (c - 0xa1) + 0xe000; + CK((*filter->output_function)(w, filter->data)); + } else if (c1 >= 0xa1 && c1 <= 0xa7 && c >= 0x40 && c < 0xa1 && c != 0x7f) { + /* UDA part3 : U+E4C6-U+E765*/ + w = 96*(c1 - 0xa1) + c - (c >= 0x80 ? 0x41 : 0x40) + 0xe4c6; + CK((*filter->output_function)(w, filter->data)); + } + + c2 = (c1 << 8) | c; + + if (w <= 0 && + ((c2 >= 0xa2ab && c2 <= 0xa9f0 + (0xe80f-0xe801)) || + (c2 >= 0xd7fa && c2 <= 0xd7fa + (0xe814-0xe810)) || + (c2 >= 0xfe50 && c2 <= 0xfe80 + (0xe864-0xe844)))) { + for (k = 0; k < mbfl_cp936_pua_tbl_max; k++) { + if (c2 >= mbfl_cp936_pua_tbl[k][2] && + c2 <= mbfl_cp936_pua_tbl[k][2] + + mbfl_cp936_pua_tbl[k][1] - mbfl_cp936_pua_tbl[k][0]) { + w = c2 - mbfl_cp936_pua_tbl[k][2] + mbfl_cp936_pua_tbl[k][0]; + CK((*filter->output_function)(w, filter->data)); + break; + } + } + } + + if (w <= 0) { + if (c1 < 0xff && c1 > 0x80 && c > 0x39 && c < 0xff && c != 0x7f) { + w = (c1 - 0x81)*192 + (c - 0x40); + if (w >= 0 && w < cp936_ucs_table_size) { + w = cp936_ucs_table[w]; + } else { + w = 0; + } + if (w <= 0) { + w = (c1 << 8) | c; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_WINCP936; + } + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => CP936 + */ +int +mbfl_filt_conv_wchar_cp936(int c, mbfl_convert_filter *filter) +{ + int k, k1, k2; + int c1, s = 0; + + if (c >= ucs_a1_cp936_table_min && c < ucs_a1_cp936_table_max) { + /* U+0000 - U+0451 */ + s = ucs_a1_cp936_table[c - ucs_a1_cp936_table_min]; + } else if (c >= ucs_a2_cp936_table_min && c < ucs_a2_cp936_table_max) { + /* U+2000 - U+26FF */ + if (c == 0x203e) { + s = 0xa3fe; + } else if (c == 0x2218) { + s = 0xa1e3; + } else if (c == 0x223c) { + s = 0xa1ab; + } else { + s = ucs_a2_cp936_table[c - ucs_a2_cp936_table_min]; + } + } else if (c >= ucs_a3_cp936_table_min && c < ucs_a3_cp936_table_max) { + /* U+2F00 - U+33FF */ + s = ucs_a3_cp936_table[c - ucs_a3_cp936_table_min]; + } else if (c >= ucs_i_cp936_table_min && c < ucs_i_cp936_table_max) { + /* U+4D00-9FFF CJK Unified Ideographs (+ Extension A) */ + s = ucs_i_cp936_table[c - ucs_i_cp936_table_min]; + } else if (c >= 0xe000 && c <= 0xe864) { /* PUA */ + if (c < 0xe766) { + if (c < 0xe4c6) { + c1 = c - 0xe000; + s = (c1 % 94) + 0xa1; c1 /= 94; + s |= (c1 < 0x06 ? c1 + 0xaa : c1 + 0xf2) << 8; + } else { + c1 = c - 0xe4c6; + s = ((c1 / 96) + 0xa1) << 8; c1 %= 96; + s |= c1 + (c1 >= 0x3f ? 0x41 : 0x40); + } + } else { + /* U+E766..U+E864 */ + k1 = 0; k2 = mbfl_cp936_pua_tbl_max; + while (k1 < k2) { + k = (k1 + k2) >> 1; + if (c < mbfl_cp936_pua_tbl[k][0]) { + k2 = k; + } else if (c > mbfl_cp936_pua_tbl[k][1]) { + k1 = k + 1; + } else { + s = c - mbfl_cp936_pua_tbl[k][0] + mbfl_cp936_pua_tbl[k][2]; + break; + } + } + } + } else if (c == 0xf8f5) { + s = 0xff; + } else if (c >= ucs_ci_cp936_table_min && c < ucs_ci_cp936_table_max) { + /* U+F900-FA2F CJK Compatibility Ideographs */ + s = ucs_ci_cp936_table[c - ucs_ci_cp936_table_min]; + } else if (c >= ucs_cf_cp936_table_min && c < ucs_cf_cp936_table_max) { + s = ucs_cf_cp936_table[c - ucs_cf_cp936_table_min]; + } else if (c >= ucs_sfv_cp936_table_min && c < ucs_sfv_cp936_table_max) { + s = ucs_sfv_cp936_table[c - ucs_sfv_cp936_table_min]; /* U+FE50-FE6F Small Form Variants */ + } else if (c >= ucs_hff_cp936_table_min && c < ucs_hff_cp936_table_max) { + /* U+FF00-FFFF HW/FW Forms */ + if (c == 0xff04) { + s = 0xa1e7; + } else if (c == 0xff5e) { + s = 0xa1ab; + } else if (c >= 0xff01 && c <= 0xff5d) { + s = c - 0xff01 + 0xa3a1; + } else if (c >= 0xffe0 && c <= 0xffe5) { + s = ucs_hff_s_cp936_table[c-0xffe0]; + } + } + if (s <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_WINCP936) { + s = c & MBFL_WCSPLANE_MASK; + } + if (c == 0) { + s = 0; + } else if (s <= 0) { + s = -1; + } + } + if (s >= 0) { + if (s <= 0x80 || s == 0xff) { /* latin */ + CK((*filter->output_function)(s, filter->data)); + } else { + CK((*filter->output_function)((s >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(s & 0xff, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +static int mbfl_filt_ident_cp936(int c, mbfl_identify_filter *filter) +{ + if (filter->status) { /* kanji second char */ + if (c < 0x40 || c > 0xfe || c == 0x7f) { /* bad */ + filter->flag = 1; + } + filter->status = 0; + } else if (c >= 0 && c < 0x80) { /* latin ok */ + ; + } else if (c > 0x80 && c < 0xff) { /* DBCS lead byte */ + filter->status = 1; + } else { /* bad */ + filter->flag = 1; + } + + return c; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp936.h b/ext/mbstring/libmbfl/filters/mbfilter_cp936.h new file mode 100644 index 0000000..1bd603d --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_cp936.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * the source code included in this files was separated from mbfilter_cn.h + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_CP936_H +#define MBFL_MBFILTER_CP936_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_cp936; +extern const struct mbfl_identify_vtbl vtbl_identify_cp936; +extern const struct mbfl_convert_vtbl vtbl_cp936_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_cp936; + +int mbfl_filt_conv_cp936_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_cp936(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_CP936_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c new file mode 100644 index 0000000..f91edf3 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c @@ -0,0 +1,244 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_cn.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_euc_cn.h" + +#include "unicode_table_cp936.h" + +static int mbfl_filt_ident_euccn(int c, mbfl_identify_filter *filter); + +static const unsigned char mblen_table_euccn[] = { /* 0xA1-0xFE */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 +}; + +static const char *mbfl_encoding_euc_cn_aliases[] = {"CN-GB", "EUC_CN", "eucCN", "x-euc-cn", "gb2312", NULL}; + +const mbfl_encoding mbfl_encoding_euc_cn = { + mbfl_no_encoding_euc_cn, + "EUC-CN", + "CN-GB", + (const char *(*)[])&mbfl_encoding_euc_cn_aliases, + mblen_table_euccn, + MBFL_ENCTYPE_MBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_euccn = { + mbfl_no_encoding_euc_cn, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_euccn +}; + +const struct mbfl_convert_vtbl vtbl_euccn_wchar = { + mbfl_no_encoding_euc_cn, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_euccn_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_euccn = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_euc_cn, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_euccn, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * EUC-CN => wchar + */ +int +mbfl_filt_conv_euccn_wchar(int c, mbfl_convert_filter *filter) +{ + int c1, w; + + switch (filter->status) { + case 0: + if (c >= 0 && c < 0x80) { /* latin */ + CK((*filter->output_function)(c, filter->data)); + } else if (c > 0xa0 && c < 0xff) { /* dbcs lead byte */ + filter->status = 1; + filter->cache = c; + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 1: /* dbcs second byte */ + filter->status = 0; + c1 = filter->cache; + if (c1 > 0xa0 && c1 < 0xff && c > 0xa0 && c < 0xff) { + w = (c1 - 0x81)*192 + (c - 0x40); + if (w >= 0 && w < cp936_ucs_table_size) { + w = cp936_ucs_table[w]; + } else { + w = 0; + } + if (w <= 0) { + w = (c1 << 8) | c; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_GB2312; + } + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => EUC-CN + */ +int +mbfl_filt_conv_wchar_euccn(int c, mbfl_convert_filter *filter) +{ + int c1, c2, s; + + s = 0; + if (c >= ucs_a1_cp936_table_min && c < ucs_a1_cp936_table_max) { + s = ucs_a1_cp936_table[c - ucs_a1_cp936_table_min]; + } else if (c >= ucs_a2_cp936_table_min && c < ucs_a2_cp936_table_max) { + s = ucs_a2_cp936_table[c - ucs_a2_cp936_table_min]; + } else if (c >= ucs_a3_cp936_table_min && c < ucs_a3_cp936_table_max) { + s = ucs_a3_cp936_table[c - ucs_a3_cp936_table_min]; + } else if (c >= ucs_i_cp936_table_min && c < ucs_i_cp936_table_max) { + s = ucs_i_cp936_table[c - ucs_i_cp936_table_min]; + } else if (c >= ucs_hff_cp936_table_min && c < ucs_hff_cp936_table_max) { + if (c == 0xff04) { + s = 0xa1e7; + } else if (c == 0xff5e) { + s = 0xa1ab; + } else if (c >= 0xff01 && c <= 0xff5d) { + s = c - 0xff01 + 0xa3a1; + } else if (c >= 0xffe0 && c <= 0xffe5) { + s = ucs_hff_s_cp936_table[c-0xffe0]; + } + } + c1 = (s >> 8) & 0xff; + c2 = s & 0xff; + + if (c1 < 0xa1 || c2 < 0xa1) { /* exclude CP936 extension */ + s = c; + } + + if (s <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_GB2312) { + s = c & MBFL_WCSPLANE_MASK; + } + if (c == 0) { + s = 0; + } else if (s <= 0) { + s = -1; + } + } + if (s >= 0) { + if (s < 0x80) { /* latin */ + CK((*filter->output_function)(s, filter->data)); + } else { + CK((*filter->output_function)((s >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(s & 0xff, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +static int mbfl_filt_ident_euccn(int c, mbfl_identify_filter *filter) +{ + switch (filter->status) { + case 0: /* latin */ + if (c >= 0 && c < 0x80) { /* ok */ + ; + } else if (c > 0xa0 && c < 0xff) { /* DBCS lead byte */ + filter->status = 1; + } else { /* bad */ + filter->flag = 1; + } + break; + + case 1: /* got lead byte */ + if (c < 0xa1 || c > 0xfe) { /* bad */ + filter->flag = 1; + } + filter->status = 0; + break; + + default: + filter->status = 0; + break; + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.h new file mode 100644 index 0000000..e72bc08 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_euc_cn.h + * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_EUC_CN_H +#define MBFL_MBFILTER_EUC_CN_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_euc_cn; +extern const struct mbfl_identify_vtbl vtbl_identify_euccn; +extern const struct mbfl_convert_vtbl vtbl_euccn_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_euccn; + +int mbfl_filt_conv_euccn_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_euccn(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_EUC_CN_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c new file mode 100644 index 0000000..7015df4 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c @@ -0,0 +1,331 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_ja.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_euc_jp.h" + +#include "unicode_table_cp932_ext.h" +#include "unicode_table_jis.h" + +int mbfl_filt_ident_eucjp(int c, mbfl_identify_filter *filter); + +const unsigned char mblen_table_eucjp[] = { /* 0xA1-0xFE */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 +}; + +static const char *mbfl_encoding_euc_jp_aliases[] = {"EUC", "EUC_JP", "eucJP", "x-euc-jp", NULL}; + +const mbfl_encoding mbfl_encoding_euc_jp = { + mbfl_no_encoding_euc_jp, + "EUC-JP", + "EUC-JP", + (const char *(*)[])&mbfl_encoding_euc_jp_aliases, + mblen_table_eucjp, + MBFL_ENCTYPE_MBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_eucjp = { + mbfl_no_encoding_euc_jp, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_eucjp +}; + +const struct mbfl_convert_vtbl vtbl_eucjp_wchar = { + mbfl_no_encoding_euc_jp, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_eucjp_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_eucjp = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_euc_jp, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_eucjp, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * EUC-JP => wchar + */ +int +mbfl_filt_conv_eucjp_wchar(int c, mbfl_convert_filter *filter) +{ + int c1, s, w; + + switch (filter->status) { + case 0: + if (c >= 0 && c < 0x80) { /* latin */ + CK((*filter->output_function)(c, filter->data)); + } else if (c > 0xa0 && c < 0xff) { /* X 0208 first char */ + filter->status = 1; + filter->cache = c; + } else if (c == 0x8e) { /* kana first char */ + filter->status = 2; + } else if (c == 0x8f) { /* X 0212 first char */ + filter->status = 3; + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 1: /* got first half */ + filter->status = 0; + c1 = filter->cache; + if (c > 0xa0 && c < 0xff) { + s = (c1 - 0xa1)*94 + c - 0xa1; + if (s >= 0 && s < jisx0208_ucs_table_size) { + w = jisx0208_ucs_table[s]; + } else { + w = 0; + } + if (w <= 0) { + w = ((c1 & 0x7f) << 8) | (c & 0x7f); + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_JIS0208; + } + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 2: /* got 0x8e */ + filter->status = 0; + if (c > 0xa0 && c < 0xe0) { + w = 0xfec0 + c; + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = 0x8e00 | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 3: /* got 0x8f, X 0212 first char */ + if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + filter->status = 0; + } else { + filter->status++; + filter->cache = c; + } + break; + case 4: /* got 0x8f, X 0212 second char */ + filter->status = 0; + c1 = filter->cache; + if (c1 > 0xa0 && c1 < 0xff && c > 0xa0 && c < 0xff) { + s = (c1 - 0xa1)*94 + c - 0xa1; + if (s >= 0 && s < jisx0212_ucs_table_size) { + w = jisx0212_ucs_table[s]; + } else { + w = 0; + } + if (w <= 0) { + w = ((c1 & 0x7f) << 8) | (c & 0x7f); + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_JIS0212; + } + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c | 0x8f0000; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => EUC-JP + */ +int +mbfl_filt_conv_wchar_eucjp(int c, mbfl_convert_filter *filter) +{ + int c1, s; + + s = 0; + if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { + s = ucs_a1_jis_table[c - ucs_a1_jis_table_min]; + } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) { + s = ucs_a2_jis_table[c - ucs_a2_jis_table_min]; + } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) { + s = ucs_i_jis_table[c - ucs_i_jis_table_min]; + } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) { + s = ucs_r_jis_table[c - ucs_r_jis_table_min]; + } + if (s <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_JIS0208) { + s = c & MBFL_WCSPLANE_MASK; + } else if (c1 == MBFL_WCSPLANE_JIS0212) { + s = c & MBFL_WCSPLANE_MASK; + s |= 0x8080; + } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + s = 0x2140; + } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ + s = 0x2141; + } else if (c == 0x2225) { /* PARALLEL TO */ + s = 0x2142; + } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */ + s = 0x215d; + } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */ + s = 0x2171; + } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */ + s = 0x2172; + } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ + s = 0x224c; + } + if (c == 0) { + s = 0; + } else if (s <= 0) { + s = -1; + } + } + if (s >= 0) { + if (s < 0x80) { /* latin */ + CK((*filter->output_function)(s, filter->data)); + } else if (s < 0x100) { /* kana */ + CK((*filter->output_function)(0x8e, filter->data)); + CK((*filter->output_function)(s, filter->data)); + } else if (s < 0x8080) { /* X 0208 */ + CK((*filter->output_function)(((s >> 8) & 0xff) | 0x80, filter->data)); + CK((*filter->output_function)((s & 0xff) | 0x80, filter->data)); + } else { /* X 0212 */ + CK((*filter->output_function)(0x8f, filter->data)); + CK((*filter->output_function)(((s >> 8) & 0xff) | 0x80, filter->data)); + CK((*filter->output_function)((s & 0xff) | 0x80, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +int mbfl_filt_ident_eucjp(int c, mbfl_identify_filter *filter) +{ + switch (filter->status) { + case 0: /* latin */ + if (c >= 0 && c < 0x80) { /* ok */ + ; + } else if (c > 0xa0 && c < 0xff) { /* kanji first char */ + filter->status = 1; + } else if (c == 0x8e) { /* kana first char */ + filter->status = 2; + } else if (c == 0x8f) { /* X 0212 first char */ + filter->status = 3; + } else { /* bad */ + filter->flag = 1; + } + break; + + case 1: /* got first half */ + if (c < 0xa1 || c > 0xfe) { /* bad */ + filter->flag = 1; + } + filter->status = 0; + break; + + case 2: /* got 0x8e */ + if (c < 0xa1 || c > 0xdf) { /* bad */ + filter->flag = 1; + } + filter->status = 0; + break; + + case 3: /* got 0x8f */ + if (c < 0xa1 || c > 0xfe) { /* bad */ + filter->flag = 1; + } + filter->status++; + break; + case 4: /* got 0x8f */ + if (c < 0xa1 || c > 0xfe) { /* bad */ + filter->flag = 1; + } + filter->status = 0; + break; + + default: + filter->status = 0; + break; + } + + return c; +} + + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.h new file mode 100644 index 0000000..de1212d --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_ja.h + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_EUC_JP_H +#define MBFL_MBFILTER_EUC_JP_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_euc_jp; +extern const struct mbfl_identify_vtbl vtbl_identify_eucjp; +extern const struct mbfl_convert_vtbl vtbl_eucjp_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_eucjp; + +int mbfl_filt_conv_eucjp_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_eucjp(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_EUC_JP_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.c new file mode 100644 index 0000000..2905ce8 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.c @@ -0,0 +1,78 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_ja.c + * by rui hirokawa <hirokawa@php.net> on 16 aug 2011. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_euc_jp_2004.h" +#include "mbfilter_sjis_2004.h" + +#include "unicode_table_jis2004.h" + +extern int mbfl_filt_ident_eucjp(int c, mbfl_identify_filter *filter); +extern const unsigned char mblen_table_eucjp[]; + +static const char *mbfl_encoding_eucjp2004_aliases[] = {"EUC_JP-2004", NULL}; + +const mbfl_encoding mbfl_encoding_eucjp2004 = { + mbfl_no_encoding_eucjp2004, + "EUC-JP-2004", + "EUC-JP", + (const char *(*)[])&mbfl_encoding_eucjp2004_aliases, + mblen_table_eucjp, + MBFL_ENCTYPE_MBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_eucjp2004 = { + mbfl_no_encoding_eucjp2004, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_eucjp +}; + +const struct mbfl_convert_vtbl vtbl_eucjp2004_wchar = { + mbfl_no_encoding_eucjp2004, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_jis2004_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_eucjp2004 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_eucjp2004, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_jis2004, + mbfl_filt_conv_jis2004_flush +}; + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.h new file mode 100644 index 0000000..ce4b60a --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_ja.h + * by rui hirokawa <hirokawa@php.net> on 15 aug 2011. + * + */ + +#ifndef MBFL_MBFILTER_EUC_JP_2004_H +#define MBFL_MBFILTER_EUC_JP_2004_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_eucjp2004; +extern const struct mbfl_identify_vtbl vtbl_identify_eucjp2004; +extern const struct mbfl_convert_vtbl vtbl_eucjp2004_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_eucjp2004; + +int mbfl_filt_conv_eucjp2004_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_eucjp2004(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_EUC_JP_2004_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c new file mode 100644 index 0000000..eb8949a --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c @@ -0,0 +1,434 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_ja.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_euc_jp_win.h" + +#include "unicode_table_cp932_ext.h" +#include "unicode_table_jis.h" +#include "cp932_table.h" + +static int mbfl_filt_ident_eucjp_win(int c, mbfl_identify_filter *filter); + +static const unsigned char mblen_table_eucjp[] = { /* 0xA1-0xFE */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 +}; + + +static const char *mbfl_encoding_eucjp_win_aliases[] = {"eucJP-open", + "eucJP-ms", NULL}; + +const struct mbfl_identify_vtbl vtbl_identify_eucjpwin = { + mbfl_no_encoding_eucjp_win, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_eucjp_win +}; + +const mbfl_encoding mbfl_encoding_eucjp_win = { + mbfl_no_encoding_eucjp_win, + "eucJP-win", + "EUC-JP", + (const char *(*)[])&mbfl_encoding_eucjp_win_aliases, + mblen_table_eucjp, + MBFL_ENCTYPE_MBCS +}; + +const struct mbfl_convert_vtbl vtbl_eucjpwin_wchar = { + mbfl_no_encoding_eucjp_win, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_eucjpwin_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_eucjpwin = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_eucjp_win, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_eucjpwin, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * eucJP-win => wchar + */ +int +mbfl_filt_conv_eucjpwin_wchar(int c, mbfl_convert_filter *filter) +{ + int c1, s, w, n; + + switch (filter->status) { + case 0: + if (c >= 0 && c < 0x80) { /* latin */ + CK((*filter->output_function)(c, filter->data)); + } else if (c > 0xa0 && c < 0xff) { /* CP932 first char */ + filter->status = 1; + filter->cache = c; + } else if (c == 0x8e) { /* kana first char */ + filter->status = 2; + } else if (c == 0x8f) { /* X 0212 first char */ + filter->status = 3; + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 1: /* got first half */ + filter->status = 0; + c1 = filter->cache; + if (c > 0xa0 && c < 0xff) { + w = 0; + s = (c1 - 0xa1)*94 + c - 0xa1; + if (s <= 137) { + if (s == 31) { + w = 0xff3c; /* FULLWIDTH REVERSE SOLIDUS */ + } else if (s == 32) { + w = 0xff5e; /* FULLWIDTH TILDE */ + } else if (s == 33) { + w = 0x2225; /* PARALLEL TO */ + } else if (s == 60) { + w = 0xff0d; /* FULLWIDTH HYPHEN-MINUS */ + } else if (s == 80) { + w = 0xffe0; /* FULLWIDTH CENT SIGN */ + } else if (s == 81) { + w = 0xffe1; /* FULLWIDTH POUND SIGN */ + } else if (s == 137) { + w = 0xffe2; /* FULLWIDTH NOT SIGN */ + } + } + if (w == 0) { + if (s >= cp932ext1_ucs_table_min && s < cp932ext1_ucs_table_max) { /* vendor ext1 (13ku) */ + w = cp932ext1_ucs_table[s - cp932ext1_ucs_table_min]; + } else if (s >= 0 && s < jisx0208_ucs_table_size) { /* X 0208 */ + w = jisx0208_ucs_table[s]; + } else if (s >= (84 * 94)) { /* user (85ku - 94ku) */ + w = s - (84 * 94) + 0xe000; + } + } + if (w <= 0) { + w = ((c1 & 0x7f) << 8) | (c & 0x7f); + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_WINCP932; + } + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 2: /* got 0x8e, X0201 kana */ + filter->status = 0; + if (c > 0xa0 && c < 0xe0) { + w = 0xfec0 + c; + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = 0x8e00 | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 3: /* got 0x8f, X 0212 first char */ + if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + filter->status = 0; + } else { + filter->status++; + filter->cache = c; + } + break; + case 4: /* got 0x8f, X 0212 second char */ + filter->status = 0; + c1 = filter->cache; + if (c1 > 0xa0 && c1 < 0xff && c > 0xa0 && c < 0xff) { + s = (c1 - 0xa1)*94 + c - 0xa1; + if (s >= 0 && s < jisx0212_ucs_table_size) { + w = jisx0212_ucs_table[s]; + if (w == 0x007e) { + w = 0xff5e; /* FULLWIDTH TILDE */ + } + } else if (s >= (82*94) && s < (84*94)) { /* vender ext3 (83ku - 84ku) <-> CP932 (115ku -120ku) */ + s = (c1<< 8) | c; + w = 0; + n = 0; + while (n < cp932ext3_eucjp_table_size) { + if (s == cp932ext3_eucjp_table[n]) { + if (n < (cp932ext3_ucs_table_max - cp932ext3_ucs_table_min)) { + w = cp932ext3_ucs_table[n]; + } + break; + } + n++; + } + } else if (s >= (84*94)) { /* user (85ku - 94ku) */ + w = s - (84*94) + (0xe000 + (94*10)); + } else { + w = 0; + } + if (w == 0x00A6) { + w = 0xFFE4; /* FULLWIDTH BROKEN BAR */ + } + if (w <= 0) { + w = ((c1 & 0x7f) << 8) | (c & 0x7f); + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_JIS0212; + } + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c | 0x8f0000; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => eucJP-win + */ +int +mbfl_filt_conv_wchar_eucjpwin(int c, mbfl_convert_filter *filter) +{ + int c1, c2, s1; + + s1 = 0; + if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { + s1 = ucs_a1_jis_table[c - ucs_a1_jis_table_min]; + } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) { + s1 = ucs_a2_jis_table[c - ucs_a2_jis_table_min]; + } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) { + s1 = ucs_i_jis_table[c - ucs_i_jis_table_min]; + } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) { + s1 = ucs_r_jis_table[c - ucs_r_jis_table_min]; + } else if (c >= 0xe000 && c < (0xe000 + 10*94)) { /* user (X0208 85ku - 94ku) */ + s1 = c - 0xe000; + c1 = s1/94 + 0x75; + c2 = s1%94 + 0x21; + s1 = (c1 << 8) | c2; + } else if (c >= (0xe000 + 10*94) && c < (0xe000 + 20*94)) { /* user (X0212 85ku - 94ku) */ + s1 = c - (0xe000 + 10*94); + c1 = s1/94 + 0xf5; + c2 = s1%94 + 0xa1; + s1 = (c1 << 8) | c2; + } + if (s1 == 0xa2f1) { + s1 = 0x2d62; /* NUMERO SIGN */ + } + if (s1 <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_WINCP932) { + s1 = c & MBFL_WCSPLANE_MASK; + if (s1 >= ((85 + 0x20) << 8)) { /* 85ku - 120ku */ + s1 = -1; + } + } else if (c1 == MBFL_WCSPLANE_JIS0208) { + s1 = c & MBFL_WCSPLANE_MASK; + if (s1 >= ((85 + 0x20) << 8)) { /* 85ku - 94ku */ + s1 = -1; + } + } else if (c1 == MBFL_WCSPLANE_JIS0212) { + s1 = c & MBFL_WCSPLANE_MASK; + if (s1 >= ((83 + 0x20) << 8)) { /* 83ku - 94ku */ + s1 = -1; + } else { + s1 |= 0x8080; + } + } else if (c == 0xa5) { /* YEN SIGN */ + s1 = 0x216f; /* FULLWIDTH YEN SIGN */ + } else if (c == 0x203e) { /* OVER LINE */ + s1 = 0x2131; /* FULLWIDTH MACRON */ + } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + s1 = 0x2140; + } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ + s1 = 0x2141; + } else if (c == 0x2225) { /* PARALLEL TO */ + s1 = 0x2142; + } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */ + s1 = 0x215d; + } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */ + s1 = 0x2171; + } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */ + s1 = 0x2172; + } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ + s1 = 0x224c; + } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ + s1 = 0x2141; + } else { + s1 = -1; + c1 = 0; + c2 = cp932ext1_ucs_table_max - cp932ext1_ucs_table_min; + while (c1 < c2) { /* CP932 vendor ext1 (13ku) */ + const int oh = cp932ext1_ucs_table_min / 94; + + if (c == cp932ext1_ucs_table[c1]) { + s1 = ((c1 / 94 + oh + 0x21) << 8) + (c1 % 94 + 0x21); + break; + } + c1++; + } + if (s1 < 0) { + c1 = 0; + c2 = cp932ext3_ucs_table_max - cp932ext3_ucs_table_min; + while (c1 < c2) { /* CP932 vendor ext3 (115ku - 119ku) */ + if (c == cp932ext3_ucs_table[c1]) { + if (c1 < cp932ext3_eucjp_table_size) { + s1 = cp932ext3_eucjp_table[c1]; + } + break; + } + c1++; + } + } + } + if (c == 0) { + s1 = 0; + } else if (s1 <= 0) { + s1 = -1; + } + } + + if (s1 >= 0) { + if (s1 < 0x80) { /* latin */ + CK((*filter->output_function)(s1, filter->data)); + } else if (s1 < 0x100) { /* kana */ + CK((*filter->output_function)(0x8e, filter->data)); + CK((*filter->output_function)(s1, filter->data)); + } else if (s1 < 0x8080) { /* X 0208 */ + CK((*filter->output_function)(((s1 >> 8) & 0xff) | 0x80, filter->data)); + CK((*filter->output_function)((s1 & 0xff) | 0x80, filter->data)); + } else { /* X 0212 */ + CK((*filter->output_function)(0x8f, filter->data)); + CK((*filter->output_function)(((s1 >> 8) & 0xff) | 0x80, filter->data)); + CK((*filter->output_function)((s1 & 0xff) | 0x80, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +static int mbfl_filt_ident_eucjp_win(int c, mbfl_identify_filter *filter) +{ + switch (filter->status) { + case 0: /* latin */ + if (c >= 0 && c < 0x80) { /* ok */ + ; + } else if (c > 0xa0 && c < 0xff) { /* kanji first char */ + filter->status = 1; + } else if (c == 0x8e) { /* kana first char */ + filter->status = 2; + } else if (c == 0x8f) { /* X 0212 first char */ + filter->status = 3; + } else { /* bad */ + filter->flag = 1; + } + break; + + case 1: /* got first half */ + if (c < 0xa1 || c > 0xfe) { /* bad */ + filter->flag = 1; + } + filter->status = 0; + break; + + case 2: /* got 0x8e */ + if (c < 0xa1 || c > 0xdf) { /* bad */ + filter->flag = 1; + } + filter->status = 0; + break; + + case 3: /* got 0x8f */ + if (c < 0xa1 || c > 0xfe) { /* bad */ + filter->flag = 1; + } + filter->status++; + break; + case 4: /* got 0x8f */ + if (c < 0xa1 || c > 0xfe) { /* bad */ + filter->flag = 1; + } + filter->status = 0; + break; + + default: + filter->status = 0; + break; + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.h new file mode 100644 index 0000000..8b79a72 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_ja.h + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_EUC_JP_WIN_H +#define MBFL_MBFILTER_EUC_JP_WIN_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_eucjp_win; +extern const struct mbfl_identify_vtbl vtbl_identify_eucjpwin; +extern const struct mbfl_convert_vtbl vtbl_eucjpwin_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_eucjpwin; + +int mbfl_filt_conv_eucjpwin_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_eucjpwin(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_EUC_JP_WIN_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c new file mode 100644 index 0000000..211a3ad --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c @@ -0,0 +1,256 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_kr.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_euc_kr.h" +#include "unicode_table_uhc.h" + +static int mbfl_filt_ident_euckr(int c, mbfl_identify_filter *filter); + +static const unsigned char mblen_table_euckr[] = { /* 0xA1-0xFE */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 +}; + +static const char *mbfl_encoding_euc_kr_aliases[] = {"EUC_KR", "eucKR", "x-euc-kr", NULL}; + +const mbfl_encoding mbfl_encoding_euc_kr = { + mbfl_no_encoding_euc_kr, + "EUC-KR", + "EUC-KR", + (const char *(*)[])&mbfl_encoding_euc_kr_aliases, + mblen_table_euckr, + MBFL_ENCTYPE_MBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_euckr = { + mbfl_no_encoding_euc_kr, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_euckr +}; + +const struct mbfl_convert_vtbl vtbl_euckr_wchar = { + mbfl_no_encoding_euc_kr, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_euckr_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_euckr = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_euc_kr, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_euckr, + mbfl_filt_conv_common_flush +}; + + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * EUC-KR => wchar + */ +int +mbfl_filt_conv_euckr_wchar(int c, mbfl_convert_filter *filter) +{ + int c1, w, flag; + + switch (filter->status) { + case 0: + if (c >= 0 && c < 0x80) { /* latin */ + CK((*filter->output_function)(c, filter->data)); + } else if (c > 0xa0 && c < 0xff && c != 0xc9) { /* dbcs lead byte */ + filter->status = 1; + filter->cache = c; + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 1: /* dbcs second byte */ + filter->status = 0; + c1 = filter->cache; + flag = 0; + if (c1 >= 0xa1 && c1 <= 0xc6) { + flag = 1; + } else if (c1 >= 0xc7 && c1 <= 0xfe && c1 != 0xc9) { + flag = 2; + } + if (flag > 0 && c >= 0xa1 && c <= 0xfe) { + if (flag == 1){ /* 1st: 0xa1..0xc6, 2nd: 0x41..0x7a, 0x81..0xfe */ + w = (c1 - 0xa1)*190 + (c - 0x41); + if (w >= 0 && w < uhc2_ucs_table_size) { + w = uhc2_ucs_table[w]; + } else { + w = 0; + } + } else { /* 1st: 0xc7..0xc8,0xca..0xfe, 2nd: 0xa1..0xfe */ + w = (c1 - 0xc7)*94 + (c - 0xa1); + if (w >= 0 && w < uhc3_ucs_table_size) { + w = uhc3_ucs_table[w]; + } else { + w = 0; + } + } + + if (w <= 0) { + w = (c1 << 8) | c; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_KSC5601; + } + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => EUC-KR + */ +int +mbfl_filt_conv_wchar_euckr(int c, mbfl_convert_filter *filter) +{ + int c1, c2, s; + + s = 0; + + if (c >= ucs_a1_uhc_table_min && c < ucs_a1_uhc_table_max) { + s = ucs_a1_uhc_table[c - ucs_a1_uhc_table_min]; + } else if (c >= ucs_a2_uhc_table_min && c < ucs_a2_uhc_table_max) { + s = ucs_a2_uhc_table[c - ucs_a2_uhc_table_min]; + } else if (c >= ucs_a3_uhc_table_min && c < ucs_a3_uhc_table_max) { + s = ucs_a3_uhc_table[c - ucs_a3_uhc_table_min]; + } else if (c >= ucs_i_uhc_table_min && c < ucs_i_uhc_table_max) { + s = ucs_i_uhc_table[c - ucs_i_uhc_table_min]; + } else if (c >= ucs_s_uhc_table_min && c < ucs_s_uhc_table_max) { + s = ucs_s_uhc_table[c - ucs_s_uhc_table_min]; + } else if (c >= ucs_r1_uhc_table_min && c < ucs_r1_uhc_table_max) { + s = ucs_r1_uhc_table[c - ucs_r1_uhc_table_min]; + } else if (c >= ucs_r2_uhc_table_min && c < ucs_r2_uhc_table_max) { + s = ucs_r2_uhc_table[c - ucs_r2_uhc_table_min]; + } + + c1 = (s >> 8) & 0xff; + c2 = s & 0xff; + /* exclude UHC extension area */ + if (c1 < 0xa1 || c2 < 0xa1){ + s = c; + } + + if (s <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_KSC5601) { + s = c & MBFL_WCSPLANE_MASK; + } + if (c == 0) { + s = 0; + } else if (s <= 0) { + s = -1; + } + } + if (s >= 0) { + if (s < 0x80) { /* latin */ + CK((*filter->output_function)(s, filter->data)); + } else { + CK((*filter->output_function)((s >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(s & 0xff, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +static int mbfl_filt_ident_euckr(int c, mbfl_identify_filter *filter) +{ + switch (filter->status) { + case 0: /* latin */ + if (c >= 0 && c < 0x80) { /* ok */ + ; + } else if (c > 0xa0 && c < 0xff) { /* DBCS lead byte */ + filter->status = 1; + } else { /* bad */ + filter->flag = 1; + } + break; + + case 1: /* got lead byte */ + if (c < 0xa1 || c > 0xfe) { /* bad */ + filter->flag = 1; + } + filter->status = 0; + break; + + default: + filter->status = 0; + break; + } + + return c; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.h new file mode 100644 index 0000000..5ccbe79 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_kr.h + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_EUC_KR_H +#define MBFL_MBFILTER_EUC_KR_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_euc_kr; +extern const struct mbfl_identify_vtbl vtbl_identify_euckr; +extern const struct mbfl_convert_vtbl vtbl_euckr_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_euckr; + +int mbfl_filt_conv_euckr_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_euckr(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_EUC_KR_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c new file mode 100644 index 0000000..95665d0 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c @@ -0,0 +1,329 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: Rui Hirokawa <hirokawa@php.net> + * + */ +/* + * The source code included in this files was separated from mbfilter_tw.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_euc_tw.h" + +#include "unicode_table_cns11643.h" + +static int mbfl_filt_ident_euctw(int c, mbfl_identify_filter *filter); + +static const unsigned char mblen_table_euctw[] = { /* 0xA1-0xFE */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 +}; + + +static const char *mbfl_encoding_euc_tw_aliases[] = {"EUC_TW", "eucTW", "x-euc-tw", NULL}; + +const mbfl_encoding mbfl_encoding_euc_tw = { + mbfl_no_encoding_euc_tw, + "EUC-TW", + "EUC-TW", + (const char *(*)[])&mbfl_encoding_euc_tw_aliases, + mblen_table_euctw, + MBFL_ENCTYPE_MBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_euctw = { + mbfl_no_encoding_euc_tw, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_euctw +}; + +const struct mbfl_convert_vtbl vtbl_euctw_wchar = { + mbfl_no_encoding_euc_tw, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_euctw_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_euctw = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_euc_tw, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_euctw, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * EUC-TW => wchar + */ +int +mbfl_filt_conv_euctw_wchar(int c, mbfl_convert_filter *filter) +{ + int c1, s, w, plane; + + switch (filter->status) { + case 0: + if (c >= 0 && c < 0x80) { /* latin */ + CK((*filter->output_function)(c, filter->data)); + } else if (c > 0xa0 && c < 0xff) { /* dbcs first byte */ + filter->status = 1; + filter->cache = c; + } else if (c == 0x8e) { /* mbcs first byte */ + filter->status = 2; + filter->cache = c; + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 1: /* mbcs second byte */ + filter->status = 0; + c1 = filter->cache; + if (c > 0xa0 && c < 0xff) { + w = (c1 - 0xa1)*94 + (c - 0xa1); + if (w >= 0 && w < cns11643_1_ucs_table_size) { + w = cns11643_1_ucs_table[w]; + } else { + w = 0; + } + if (w <= 0) { + w = (c1 << 8) | c; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_CNS11643; + } + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 2: /* got 0x8e, first char */ + c1 = filter->cache; + if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + filter->status = 0; + } else if (c > 0xa0 && c < 0xaf) { + filter->status = 3; + filter->cache = c - 0xa1; + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 3: /* got 0x8e, third char */ + filter->status = 0; + c1 = filter->cache; + if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + filter->status = 0; + } else if (c > 0xa0 && c < 0xff) { + filter->status = 4; + filter->cache = (c1 << 8) + c - 0xa1; + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 4: /* mbcs fourth char */ + filter->status = 0; + c1 = filter->cache; + if (c1 >= 0x100 && c1 <= 0xdff && c > 0xa0 && c < 0xff) { + plane = (c1 & 0xf00) >> 8; + s = (c1 & 0xff)*94 + c - 0xa1; + w = 0; + if (s >= 0) { + if (plane == 1 && s < cns11643_2_ucs_table_size) { + w = cns11643_2_ucs_table[s]; + } + if (plane == 13 && s < cns11643_14_ucs_table_size) { + w = cns11643_14_ucs_table[s]; + } + } + if (w <= 0) { + w = ((c1 & 0x7f) << 8) | (c & 0x7f); + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_CNS11643; + } + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c | 0x8e0000; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => EUC-TW + */ +int +mbfl_filt_conv_wchar_euctw(int c, mbfl_convert_filter *filter) +{ + int c1, s, plane; + + s = 0; + if (c >= ucs_a1_cns11643_table_min && c < ucs_a1_cns11643_table_max) { + s = ucs_a1_cns11643_table[c - ucs_a1_cns11643_table_min]; + } else if (c >= ucs_a2_cns11643_table_min && c < ucs_a2_cns11643_table_max) { + s = ucs_a2_cns11643_table[c - ucs_a2_cns11643_table_min]; + } else if (c >= ucs_a3_cns11643_table_min && c < ucs_a3_cns11643_table_max) { + s = ucs_a3_cns11643_table[c - ucs_a3_cns11643_table_min]; + } else if (c >= ucs_i_cns11643_table_min && c < ucs_i_cns11643_table_max) { + s = ucs_i_cns11643_table[c - ucs_i_cns11643_table_min]; + } else if (c >= ucs_r_cns11643_table_min && c < ucs_r_cns11643_table_max) { + s = ucs_r_cns11643_table[c - ucs_r_cns11643_table_min]; + } + if (s <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_CNS11643) { + s = c & MBFL_WCSPLANE_MASK; + } + if (c == 0) { + s = 0; + } else if (s <= 0) { + s = -1; + } + } + if (s >= 0) { + plane = (s & 0x1f0000) >> 16; + if (plane <= 1){ + if (s < 0x80) { /* latin */ + CK((*filter->output_function)(s, filter->data)); + } else { + s = (s & 0xffff) | 0x8080; + CK((*filter->output_function)((s >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(s & 0xff, filter->data)); + } + } else { + s = (0x8ea00000 + (plane << 16)) | ((s & 0xffff) | 0x8080); + CK((*filter->output_function)(0x8e , filter->data)); + CK((*filter->output_function)((s >> 16) & 0xff, filter->data)); + CK((*filter->output_function)((s >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(s & 0xff, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + return c; +} + +static int mbfl_filt_ident_euctw(int c, mbfl_identify_filter *filter) +{ + switch (filter->status) { + case 0: /* latin */ + if (c >= 0 && c < 0x80) { /* ok */ + ; + } else if (c > 0xa0 && c < 0xff) { /* DBCS lead byte */ + filter->status = 1; + } else if (c == 0x8e) { /* DBCS lead byte */ + filter->status = 2; + } else { /* bad */ + filter->flag = 1; + } + break; + + case 1: /* got lead byte */ + if (c < 0xa1 || c > 0xfe) { /* bad */ + filter->flag = 1; + } + filter->status = 0; + break; + + case 2: /* got lead byte */ + if (c >= 0xa1 && c < 0xaf) { /* ok */ + filter->status = 3; + } else { + filter->flag = 1; /* bad */ + } + break; + + case 3: /* got lead byte */ + if (c < 0xa1 || c > 0xfe) { /* bad */ + filter->flag = 1; + } + filter->status = 4; + break; + + case 4: /* got lead byte */ + if (c < 0xa1 || c > 0xfe) { /* bad */ + filter->flag = 1; + } + filter->status = 0; + break; + + default: + filter->status = 0; + break; + } + + return c; +} + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.h b/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.h new file mode 100644 index 0000000..6407180 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: Rui Hirokawa <hirokawa@php.net> + * + */ +/* + * The source code included in this files was separated from mbfilter_tw.h + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_EUC_TW_H +#define MBFL_MBFILTER_EUC_TW_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_euc_tw; +extern const struct mbfl_identify_vtbl vtbl_identify_euctw; +extern const struct mbfl_convert_vtbl vtbl_euctw_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_euctw; + +int mbfl_filt_conv_euctw_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_euctw(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_EUC_TW_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_gb18030.c b/ext/mbstring/libmbfl/filters/mbfilter_gb18030.c new file mode 100644 index 0000000..f6f12be --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_gb18030.c @@ -0,0 +1,473 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * the source code included in this files was separated from mbfilter_cp936.c + * by rui hirokawa <hirokawa@php.net> on 11 Aug 2011. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_gb18030.h" + +#include "unicode_table_cp936.h" +#include "unicode_table_gb18030.h" + +static int mbfl_filt_ident_gb18030(int c, mbfl_identify_filter *filter); + +static const char *mbfl_encoding_gb18030_aliases[] = {"gb-18030", "gb-18030-2000", NULL}; + +const mbfl_encoding mbfl_encoding_gb18030 = { + mbfl_no_encoding_gb18030, + "GB18030", + "GB18030", + (const char *(*)[])&mbfl_encoding_gb18030_aliases, + NULL, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_identify_vtbl vtbl_identify_gb18030 = { + mbfl_no_encoding_gb18030, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_gb18030 +}; + +const struct mbfl_convert_vtbl vtbl_gb18030_wchar = { + mbfl_no_encoding_gb18030, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_gb18030_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_gb18030 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_gb18030, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_gb18030, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + + +int +mbfl_bisec_srch(int w, const unsigned short *tbl, int n) +{ + int k, k1 = 0, k2 = n-1; + + while (k1 < k2) { + k = (k1+k2) >> 1; + if (w <= tbl[2*k+1]) { + k2 = k; + } else if (w >= tbl[2*k+2]) { + k1 = k + 1; + } else { + return -1; + } + } + return k1; +} + +int +mbfl_bisec_srch2(int w, const unsigned short tbl[], int n) +{ + int k, k1 = 0, k2 = n; + + if (w == tbl[0]) { + return 0; + } + + while (k2 - k1 > 1) { + k = (k1 + k2) >> 1; + if (w < tbl[k]) { + k2 = k; + } else if (w > tbl[k]) { + k1 = k; + } else { + return k; + } + } + return -1; +} + +/* + * GB18030 => wchar + */ +int +mbfl_filt_conv_gb18030_wchar(int c, mbfl_convert_filter *filter) +{ + int k; + int c1, c2, c3, w = -1; + + switch (filter->status) { + case 0: + if (c >= 0 && c < 0x80) { /* latin */ + CK((*filter->output_function)(c, filter->data)); + } else if (c == 0x80) { /* euro sign */ + CK((*filter->output_function)(0x20ac, filter->data)); + } else if (c == 0xff) { + CK((*filter->output_function)(0x00ff, filter->data)); + } else if (c > 0x80 && c < 0xff) { /* dbcs/qbcs lead byte */ + filter->status = 1; + filter->cache = c; + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 1: /* dbcs/qbcs second byte */ + c1 = filter->cache; + filter->status = 0; + + if (c1 >= 0x81 && c1 <= 0x84 && c >= 0x30 && c <= 0x39) { /* 4 byte range: Unicode BMP */ + filter->status = 2; + filter->cache = (c1 << 8) | c; + return c; + } else if (c1 >= 0x90 && c1 <= 0xe3 && c >= 0x30 && c <= 0x39) { + /* 4 byte range: Unicode 16 planes */ + filter->status = 2; + filter->cache = (c1 << 8) | c; + return c; + } else if (((c1 >= 0xaa && c1 <= 0xaf) || (c1 >= 0xf8 && c1 <= 0xfe)) && + (c >= 0xa1 && c <= 0xfe)) { /* UDA part1,2: U+E000-U+E4C5 */ + w = 94*(c1 >= 0xf8 ? c1 - 0xf2 : c1 - 0xaa) + (c - 0xa1) + 0xe000; + CK((*filter->output_function)(w, filter->data)); + } else if (c1 >= 0xa1 && c1 <= 0xa7 && c >= 0x40 && c < 0xa1 && c != 0x7f) { + /* UDA part3 : U+E4C6-U+E765*/ + w = 96*(c1 - 0xa1) + c - (c >= 0x80 ? 0x41 : 0x40) + 0xe4c6; + CK((*filter->output_function)(w, filter->data)); + } + + c2 = (c1 << 8) | c; + + if (w <= 0 && + ((c2 >= 0xa2ab && c2 <= 0xa9f0 + (0xe80f-0xe801)) || + (c2 >= 0xd7fa && c2 <= 0xd7fa + (0xe814-0xe810)) || + (c2 >= 0xfe50 && c2 <= 0xfe80 + (0xe864-0xe844)))) { + for (k = 0; k < mbfl_gb18030_pua_tbl_max; k++) { + if (c2 >= mbfl_gb18030_pua_tbl[k][2] && + c2 <= mbfl_gb18030_pua_tbl[k][2] + mbfl_gb18030_pua_tbl[k][1] + - mbfl_gb18030_pua_tbl[k][0]) { + w = c2 - mbfl_gb18030_pua_tbl[k][2] + mbfl_gb18030_pua_tbl[k][0]; + CK((*filter->output_function)(w, filter->data)); + break; + } + } + } + + if (w <= 0) { + if ((c1 >= 0xa1 && c1 <= 0xa9 && c >= 0xa1 && c <= 0xfe) || + (c1 >= 0xb0 && c1 <= 0xf7 && c >= 0xa1 && c <= 0xfe) || + (c1 >= 0x81 && c1 <= 0xa0 && c >= 0x40 && c <= 0xfe && c != 0x7f) || + (c1 >= 0xaa && c1 <= 0xfe && c >= 0x40 && c <= 0xa0 && c != 0x7f) || + (c1 >= 0xa8 && c1 <= 0xa9 && c >= 0x40 && c <= 0xa0 && c != 0x7f)) { + w = (c1 - 0x81)*192 + (c - 0x40); + if (w >= 0 && w < cp936_ucs_table_size) { + w = cp936_ucs_table[w]; + } else { + w = 0; + } + if (w <= 0) { + w = (c1 << 8) | c; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_GB18030; + } + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + } + break; + case 2: /* qbcs third byte */ + c1 = (filter->cache >> 8) & 0xff; + c2 = filter->cache & 0xff; + filter->status = 0; + filter->cache = 0; + if (((c1 >= 0x81 && c1 <= 0x84) || (c1 >= 0x90 && c1 <= 0xe3)) && + c2 >= 0x30 && c2 <= 0x39 && c >= 0x81 && c <= 0xfe) { + filter->cache = (c1 << 16) | (c2 << 8) | c; + filter->status = 3; + } else { + w = (c1 << 16) | (c2 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 3: /* qbcs fourth byte */ + c1 = (filter->cache >> 16) & 0xff; + c2 = (filter->cache >> 8) & 0xff; + c3 = filter->cache & 0xff; + filter->status = 0; + filter->cache = 0; + if (((c1 >= 0x81 && c1 <= 0x84) || (c1 >= 0x90 && c1 <= 0xe3)) && + c2 >= 0x30 && c2 <= 0x39 && c3 >= 0x81 && c3 <= 0xfe && c >= 0x30 && c <= 0x39) { + if (c1 >= 0x90 && c1 <= 0xe3) { + w = ((c1 - 0x90)*10 + (c2 - 0x30)*126 + (c3 - 0x81))*10 + (c - 0x30) + 0x10000; + } else { /* Unicode BMP */ + w = (((c1 - 0x81)*10 + (c2 - 0x30))*126 + (c3 - 0x81))*10 + (c - 0x30); + if (w >= 0 && w <= 39419) { + k = mbfl_bisec_srch(w, mbfl_gb2uni_tbl, mbfl_gb_uni_max); + if (k<0) { + /* error */ + w = (c1 << 24) | (c2 << 16) | (c3 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + return c; + } + w += mbfl_gb_uni_ofst[k]; + } else { + w = (c1 << 24) | (c2 << 16) | (c3 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + return c; + } + } + CK((*filter->output_function)(w, filter->data)); + } else { + w = (c1 << 24) | (c2 << 16) | (c3 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => GB18030 + */ +int +mbfl_filt_conv_wchar_gb18030(int c, mbfl_convert_filter *filter) +{ + int k, k1, k2; + int c1, s = 0, s1 = 0; + + if (c >= ucs_a1_cp936_table_min && c < ucs_a1_cp936_table_max) { + s = ucs_a1_cp936_table[c - ucs_a1_cp936_table_min]; + } else if (c >= ucs_a2_cp936_table_min && c < ucs_a2_cp936_table_max) { + s = ucs_a2_cp936_table[c - ucs_a2_cp936_table_min]; + } else if (c >= ucs_a3_cp936_table_min && c < ucs_a3_cp936_table_max) { + s = ucs_a3_cp936_table[c - ucs_a3_cp936_table_min]; + } else if (c >= ucs_i_cp936_table_min && c < ucs_i_cp936_table_max) { + s = ucs_i_cp936_table[c - ucs_i_cp936_table_min]; + } else if (c >= ucs_ci_cp936_table_min && c < ucs_ci_cp936_table_max) { + /* U+F900-FA2F CJK Compatibility Ideographs */ + if (c == 0xf92c) { + s = 0xfd9c; + } else if (c == 0xf979) { + s = 0xfd9d; + } else if (c == 0xf995) { + s = 0xfd9e; + } else if (c == 0xf9e7) { + s = 0xfd9f; + } else if (c == 0xf9f1) { + s = 0xfda0; + } else if (c >= 0xfa0c && c <= 0xfa29) { + s = ucs_ci_s_cp936_table[c - 0xfa0c]; + } + } else if (c >= ucs_cf_cp936_table_min && c < ucs_cf_cp936_table_max) { + /* FE30h CJK Compatibility Forms */ + s = ucs_cf_cp936_table[c - ucs_cf_cp936_table_min]; + } else if (c >= ucs_sfv_cp936_table_min && c < ucs_sfv_cp936_table_max) { + /* U+FE50-FE6F Small Form Variants */ + s = ucs_sfv_cp936_table[c - ucs_sfv_cp936_table_min]; + } else if (c >= ucs_hff_cp936_table_min && c < ucs_hff_cp936_table_max) { + /* U+FF00-FFFF HW/FW Forms */ + if (c == 0xff04) { + s = 0xa1e7; + } else if (c == 0xff5e) { + s = 0xa1ab; + } else if (c >= 0xff01 && c <= 0xff5d) { + s = c - 0xff01 + 0xa3a1; + } else if (c >= 0xffe0 && c <= 0xffe5) { + s = ucs_hff_s_cp936_table[c-0xffe0]; + } + } + + if (c == 0x20ac) { /* euro-sign */ + s = 0xa2e3; + } + + if (s <= 0 && c >= mbfl_gb18030_c_tbl_key[0] && + c <= mbfl_gb18030_c_tbl_key[mbfl_gb18030_c_tbl_max-1]) { + k1 = mbfl_bisec_srch2(c, mbfl_gb18030_c_tbl_key, mbfl_gb18030_c_tbl_max); + if (k1 >= 0) { + s = mbfl_gb18030_c_tbl_val[k1]; + } + } + + if (c >= 0xe000 && c <= 0xe864) { /* PUA */ + if (c < 0xe766) { + if (c < 0xe4c6) { + c1 = c - 0xe000; + s = (c1 % 94) + 0xa1; c1 /= 94; + s |= (c1 < 0x06 ? c1 + 0xaa : c1 + 0xf2) << 8; + } else { + c1 = c - 0xe4c6; + s = ((c1 / 96) + 0xa1) << 8; c1 %= 96; + s |= c1 + (c1 >= 0x3f ? 0x41 : 0x40); + } + } else { + /* U+E766..U+E864 */ + k1 = 0; k2 = mbfl_gb18030_pua_tbl_max; + while (k1 < k2) { + k = (k1 + k2) >> 1; + if (c < mbfl_gb18030_pua_tbl[k][0]) { + k2 = k; + } else if (c > mbfl_gb18030_pua_tbl[k][1]) { + k1 = k + 1; + } else { + s = c - mbfl_gb18030_pua_tbl[k][0] + mbfl_gb18030_pua_tbl[k][2]; + break; + } + } + } + } + + if (s <= 0 && c >= 0x0080 && c <= 0xffff) { /* BMP */ + s = mbfl_bisec_srch(c, mbfl_uni2gb_tbl, mbfl_gb_uni_max); + if (s >= 0) { + c1 = c - mbfl_gb_uni_ofst[s]; + s = (c1 % 10) + 0x30; c1 /= 10; + s |= ((c1 % 126) + 0x81) << 8; c1 /= 126; + s |= ((c1 % 10) + 0x30) << 16; c1 /= 10; + s1 = c1 + 0x81; + } + } else if (c >= 0x10000 && c <= 0x10ffff) { /* Code set 3: Unicode U+10000..U+10FFFF */ + c1 = c - 0x10000; + s = (c1 % 10) + 0x30; c1 /= 10; + s |= ((c1 % 126) + 0x81) << 8; c1 /= 126; + s |= ((c1 % 10) + 0x30) << 16; c1 /= 10; + s1 = c1 + 0x90; + } + + if (s <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_WINCP936) { + s = c & MBFL_WCSPLANE_MASK; + } + if (c == 0) { + s = 0; + } else if (s <= 0) { + s = -1; + } + } + if (s >= 0) { + if (s <= 0x80) { /* latin */ + CK((*filter->output_function)(s, filter->data)); + } else if (s1 > 0) { /* qbcs */ + CK((*filter->output_function)(s1 & 0xff, filter->data)); + CK((*filter->output_function)((s >> 16) & 0xff, filter->data)); + CK((*filter->output_function)((s >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(s & 0xff, filter->data)); + } else { /* dbcs */ + CK((*filter->output_function)((s >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(s & 0xff, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +static int mbfl_filt_ident_gb18030(int c, mbfl_identify_filter *filter) +{ + int c1; + + c1 = (filter->status >> 8) & 0xff; + filter->status &= 0xff; + + if (filter->status == 0) { + if (c <= 0x80 || c == 0xff) { + filter->status = 0; + } else { + filter->status = 1; + filter->status |= (c << 8); + } + } else if (filter->status == 1) { /* dbcs/qbcs 2nd byte */ + if (((c1 >= 0x81 && c1 <= 0x84) || (c1 >= 0x90 && c1 <= 0xe3)) && c >= 0x30 && c <= 0x39) { /* qbcs */ + filter->status = 2; + } else if (((c1 >= 0xaa && c1 <= 0xaf) || (c1 >= 0xf8 && c1 <= 0xfe)) && (c >= 0xa1 && c <= 0xfe)) { + filter->status = 0; /* UDA part 1,2 */ + } else if (c1 >= 0xa1 && c1 <= 0xa7 && c >= 0x40 && c < 0xa1 && c != 0x7f) { + filter->status = 0; /* UDA part 3 */ + } else if ((c1 >= 0xa1 && c1 <= 0xa9 && c >= 0xa1 && c <= 0xfe) || + (c1 >= 0xb0 && c1 <= 0xf7 && c >= 0xa1 && c <= 0xfe) || + (c1 >= 0x81 && c1 <= 0xa0 && c >= 0x40 && c <= 0xfe && c != 0x7f) || + (c1 >= 0xaa && c1 <= 0xfe && c >= 0x40 && c <= 0xa0 && c != 0x7f) || + (c1 >= 0xa8 && c1 <= 0xa9 && c >= 0x40 && c <= 0xa0 && c != 0x7f)) { + filter->status = 0; /* DBCS */ + } else { + filter->flag = 1; /* bad */ + filter->status = 0; + } + } else if (filter->status == 2) { /* qbcs 3rd byte */ + if (c > 0x80 && c < 0xff) { + filter->status = 3; + } else { + filter->flag = 1; /* bad */ + filter->status = 0; + } + } else if (filter->status == 3) { /* qbcs 4th byte */ + if (c >= 0x30 && c < 0x40) { + filter->status = 0; + } else { + filter->flag = 1; /* bad */ + filter->status = 0; + } + } else { /* bad */ + filter->flag = 1; + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_gb18030.h b/ext/mbstring/libmbfl/filters/mbfilter_gb18030.h new file mode 100644 index 0000000..e182a39 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_gb18030.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * the source code included in this files was separated from mbfilter_cn.h + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_GB18030_H +#define MBFL_MBFILTER_GB18030_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_gb18030; +extern const struct mbfl_identify_vtbl vtbl_identify_gb18030; +extern const struct mbfl_convert_vtbl vtbl_gb18030_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_gb18030; + +int mbfl_filt_conv_gb18030_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_gb18030(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_GB18030_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c b/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c new file mode 100644 index 0000000..56c364d --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c @@ -0,0 +1,312 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Marcus Boerger <helly@php.net> + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STRING_H +#include <string.h> +#endif + +#ifdef HAVE_STRINGS_H +#include <strings.h> +#endif + +#include "mbfilter.h" +#include "mbfilter_htmlent.h" +#include "html_entities.h" + +static const int htmlentitifieds[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +}; + +static const char *mbfl_encoding_html_ent_aliases[] = {"HTML", "html", NULL}; + +const mbfl_encoding mbfl_encoding_html_ent = { + mbfl_no_encoding_html_ent, + "HTML-ENTITIES", + "HTML-ENTITIES", + (const char *(*)[])&mbfl_encoding_html_ent_aliases, + NULL, + MBFL_ENCTYPE_ENC_STRM | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_convert_vtbl vtbl_wchar_html = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_html_ent, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_html_enc, + mbfl_filt_conv_html_enc_flush +}; + +const struct mbfl_convert_vtbl vtbl_html_wchar = { + mbfl_no_encoding_html_ent, + mbfl_no_encoding_wchar, + mbfl_filt_conv_html_dec_ctor, + mbfl_filt_conv_html_dec_dtor, + mbfl_filt_conv_html_dec, + mbfl_filt_conv_html_dec_flush }; + + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * any => HTML + */ +int mbfl_filt_conv_html_enc(int c, mbfl_convert_filter *filter) +{ + int tmp[64]; + int i; + unsigned int uc; + const mbfl_html_entity_entry *e; + + if (c < sizeof(htmlentitifieds) / sizeof(htmlentitifieds[0]) && + htmlentitifieds[c] != 1) { + CK((*filter->output_function)(c, filter->data)); + } else { + CK((*filter->output_function)('&', filter->data)); + for (i = 0; (e = &mbfl_html_entity_list[i])->name != NULL; i++) { + if (c == e->code) { + char *p; + + for (p = e->name; *p != '\0'; p++) { + CK((*filter->output_function)((int)*p, filter->data)); + } + goto last; + } + } + + { + int *p = tmp + sizeof(tmp) / sizeof(tmp[0]); + + CK((*filter->output_function)('#', filter->data)); + + uc = (unsigned int)c; + + *(--p) = '\0'; + do { + *(--p) = "0123456789"[uc % 10]; + uc /= 10; + } while (uc); + + for (; *p != '\0'; p++) { + CK((*filter->output_function)(*p, filter->data)); + } + } + last: + CK((*filter->output_function)(';', filter->data)); + } + return c; +} + +int mbfl_filt_conv_html_enc_flush(mbfl_convert_filter *filter) +{ + filter->status = 0; + filter->opaque = NULL; + + if (filter->flush_function != NULL) { + (*filter->flush_function)(filter->data); + } + + return 0; +} + +/* + * HTML => any + */ +#define html_enc_buffer_size 16 +static const char html_entity_chars[] = "#0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + +void mbfl_filt_conv_html_dec_ctor(mbfl_convert_filter *filter) +{ + filter->status = 0; + filter->opaque = mbfl_malloc(html_enc_buffer_size+1); +} + +void mbfl_filt_conv_html_dec_dtor(mbfl_convert_filter *filter) +{ + filter->status = 0; + if (filter->opaque) + { + mbfl_free((void*)filter->opaque); + } + filter->opaque = NULL; +} + +int mbfl_filt_conv_html_dec(int c, mbfl_convert_filter *filter) +{ + int pos, ent = 0; + mbfl_html_entity_entry *entity; + char *buffer = (char*)filter->opaque; + + if (!filter->status) { + if (c == '&' ) { + filter->status = 1; + buffer[0] = '&'; + } else { + CK((*filter->output_function)(c, filter->data)); + } + } else { + if (c == ';') { + if (buffer[1]=='#') { + if (filter->status > 2 && (buffer[2] == 'x' || buffer[2] == 'X')) { + if (filter->status > 3) { + /* numeric entity */ + for (pos=3; pos<filter->status; pos++) { + int v = buffer[pos]; + if (v >= '0' && v <= '9') { + v = v - '0'; + } else if (v >= 'A' && v <= 'F') { + v = v - 'A' + 10; + } else if (v >= 'a' && v <= 'f') { + v = v - 'a' + 10; + } else { + ent = -1; + break; + } + ent = ent * 16 + v; + } + } else { + ent = -1; + } + } else { + /* numeric entity */ + if (filter->status > 2) { + for (pos=2; pos<filter->status; pos++) { + int v = buffer[pos]; + if (v >= '0' && v <= '9') { + v = v - '0'; + } else { + ent = -1; + break; + } + ent = ent*10 + v; + } + } else { + ent = -1; + } + } + if (ent >= 0 && ent < 0x110000) { + CK((*filter->output_function)(ent, filter->data)); + } else { + for (pos = 0; pos < filter->status; pos++) { + CK((*filter->output_function)(buffer[pos], filter->data)); + } + CK((*filter->output_function)(c, filter->data)); + } + filter->status = 0; + /*php_error_docref("ref.mbstring" TSRMLS_CC, E_NOTICE, "mbstring decoded '%s'=%d", buffer, ent);*/ + } else { + /* named entity */ + buffer[filter->status] = 0; + entity = (mbfl_html_entity_entry *)mbfl_html_entity_list; + while (entity->name) { + if (!strcmp(buffer+1, entity->name)) { + ent = entity->code; + break; + } + entity++; + } + if (ent) { + /* decoded */ + CK((*filter->output_function)(ent, filter->data)); + filter->status = 0; + /*php_error_docref("ref.mbstring" TSRMLS_CC, E_NOTICE,"mbstring decoded '%s'=%d", buffer, ent);*/ + } else { + /* failure */ + buffer[filter->status++] = ';'; + buffer[filter->status] = 0; + /* php_error_docref("ref.mbstring" TSRMLS_CC, E_WARNING, "mbstring cannot decode '%s'", buffer); */ + mbfl_filt_conv_html_dec_flush(filter); + } + } + } else { + /* add character */ + buffer[filter->status++] = c; + /* add character and check */ + if (!strchr(html_entity_chars, c) || filter->status+1==html_enc_buffer_size || (c=='#' && filter->status>2)) + { + /* illegal character or end of buffer */ + if (c=='&') + filter->status--; + buffer[filter->status] = 0; + /* php_error_docref("ref.mbstring" TSRMLS_CC, E_WARNING, "mbstring cannot decode '%s'", buffer)l */ + mbfl_filt_conv_html_dec_flush(filter); + if (c=='&') + { + buffer[filter->status++] = '&'; + } + } + } + } + return c; +} + +int mbfl_filt_conv_html_dec_flush(mbfl_convert_filter *filter) +{ + int status, pos = 0; + unsigned char *buffer; + int err = 0; + + buffer = (unsigned char*)filter->opaque; + status = filter->status; + filter->status = 0; + + /* flush fragments */ + while (status--) { + int e = (*filter->output_function)(buffer[pos++], filter->data); + if (e != 0) + err = e; + } + + if (filter->flush_function != NULL) { + (*filter->flush_function)(filter->data); + } + + return err; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_htmlent.h b/ext/mbstring/libmbfl/filters/mbfilter_htmlent.h new file mode 100644 index 0000000..99827c2 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_htmlent.h @@ -0,0 +1,48 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Marcus Boerger <helly@php.net> + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_HTMLENT_H +#define MBFL_MBFILTER_HTMLENT_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_html_ent; +extern const struct mbfl_convert_vtbl vtbl_wchar_html; +extern const struct mbfl_convert_vtbl vtbl_html_wchar; + +void mbfl_filt_conv_html_dec_ctor(mbfl_convert_filter *filter); +void mbfl_filt_conv_html_dec_dtor(mbfl_convert_filter *filter); +int mbfl_filt_conv_html_enc(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_html_enc_flush(mbfl_convert_filter *filter); +int mbfl_filt_conv_html_dec(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_html_dec_flush(mbfl_convert_filter *filter); +void mbfl_filt_conv_html_dec_ctor(mbfl_convert_filter *filter); +void mbfl_filt_conv_html_dec_dtor(mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_HTMLENT_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_hz.c b/ext/mbstring/libmbfl/filters/mbfilter_hz.c new file mode 100644 index 0000000..893ad5f --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_hz.c @@ -0,0 +1,284 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_cn.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_hz.h" + +#include "unicode_table_cp936.h" + +static int mbfl_filt_ident_hz(int c, mbfl_identify_filter *filter); + +const mbfl_encoding mbfl_encoding_hz = { + mbfl_no_encoding_hz, + "HZ", + "HZ-GB-2312", + NULL, + NULL, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_identify_vtbl vtbl_identify_hz = { + mbfl_no_encoding_hz, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_hz +}; + +const struct mbfl_convert_vtbl vtbl_hz_wchar = { + mbfl_no_encoding_hz, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_hz_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_hz = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_hz, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_hz, + mbfl_filt_conv_any_hz_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * HZ => wchar + */ +int +mbfl_filt_conv_hz_wchar(int c, mbfl_convert_filter *filter) +{ + int c1, s, w; + + switch (filter->status & 0xf) { +/* case 0x00: ASCII */ +/* case 0x10: GB2312 */ + case 0: + if (c == 0x7e) { + filter->status += 2; + } else if (filter->status == 0x10 && c > 0x20 && c < 0x7f) { /* DBCS first char */ + filter->cache = c; + filter->status += 1; + } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + +/* case 0x11: GB2312 second char */ + case 1: + filter->status &= ~0xf; + c1 = filter->cache; + if (c1 > 0x20 && c1 < 0x7f && c > 0x20 && c < 0x7f) { + s = (c1 - 1)*192 + c + 0x40; /* GB2312 */ + if (s >= 0 && s < cp936_ucs_table_size) { + w = cp936_ucs_table[s]; + } else { + w = 0; + } + if (w <= 0) { + w = (c1 << 8) | c; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_GB2312; + } + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + /* '~' */ + case 2: + if (c == 0x7d) { /* '}' */ + filter->status = 0x0; + } else if (c == 0x7b) { /* '{' */ + filter->status = 0x10; + } else if (c == 0x7e) { /* '~' */ + filter->status = 0x0; + CK((*filter->output_function)(0x007e, filter->data)); + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => HZ + */ +int +mbfl_filt_conv_wchar_hz(int c, mbfl_convert_filter *filter) +{ + int s; + + s = 0; + if (c >= ucs_a1_cp936_table_min && c < ucs_a1_cp936_table_max) { + s = ucs_a1_cp936_table[c - ucs_a1_cp936_table_min]; + } else if (c >= ucs_a2_cp936_table_min && c < ucs_a2_cp936_table_max) { + s = ucs_a2_cp936_table[c - ucs_a2_cp936_table_min]; + } else if (c >= ucs_a3_cp936_table_min && c < ucs_a3_cp936_table_max) { + s = ucs_a3_cp936_table[c - ucs_a3_cp936_table_min]; + } else if (c >= ucs_i_cp936_table_min && c < ucs_i_cp936_table_max) { + s = ucs_i_cp936_table[c - ucs_i_cp936_table_min]; + } else if (c >= ucs_hff_cp936_table_min && c < ucs_hff_cp936_table_max) { + if (c == 0xff04) { + s = 0xa1e7; + } else if (c == 0xff5e) { + s = 0xa1ab; + } else if (c >= 0xff01 && c <= 0xff5d) { + s = c - 0xff01 + 0xa3a1; + } else if (c >= 0xffe0 && c <= 0xffe5) { + s = ucs_hff_s_cp936_table[c-0xffe0]; + } + } + if (s & 0x8000) { + s -= 0x8080; + } + + if (s <= 0) { + if (c == 0) { + s = 0; + } else if (s <= 0) { + s = -1; + } + } else if ((s >= 0x80 && s < 0x2121) || (s > 0x8080)) { + s = -1; + } + if (s >= 0) { + if (s < 0x80) { /* ASCII */ + if ((filter->status & 0xff00) != 0) { + CK((*filter->output_function)(0x7e, filter->data)); /* '~' */ + CK((*filter->output_function)(0x7d, filter->data)); /* '}' */ + } + filter->status = 0; + if (s == 0x7e){ + CK((*filter->output_function)(0x7e, filter->data)); + } + CK((*filter->output_function)(s, filter->data)); + } else { /* GB 2312-80 */ + if ((filter->status & 0xff00) != 0x200) { + CK((*filter->output_function)(0x7e, filter->data)); /* '~' */ + CK((*filter->output_function)(0x7b, filter->data)); /* '{' */ + } + filter->status = 0x200; + CK((*filter->output_function)((s >> 8) & 0x7f, filter->data)); + CK((*filter->output_function)(s & 0x7f, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +int +mbfl_filt_conv_any_hz_flush(mbfl_convert_filter *filter) +{ + /* back to latin */ + if ((filter->status & 0xff00) != 0) { + CK((*filter->output_function)(0x7e, filter->data)); /* ~ */ + CK((*filter->output_function)(0x7d, filter->data)); /* '{' */ + } + filter->status &= 0xff; + return 0; +} + +static int mbfl_filt_ident_hz(int c, mbfl_identify_filter *filter) +{ + switch (filter->status & 0xf) { +/* case 0x00: ASCII */ +/* case 0x10: GB2312 */ + case 0: + if (c == 0x7e) { + filter->status += 2; + } else if (filter->status == 0x10 && c > 0x20 && c < 0x7f) { /* DBCS first char */ + filter->status += 1; + } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ + ; + } else { + filter->flag = 1; /* bad */ + } + break; + +/* case 0x11: GB2312 second char */ + case 1: + filter->status &= ~0xf; + if (c < 0x21 || c > 0x7e) { /* bad */ + filter->flag = 1; + } + break; + + case 2: + if (c == 0x7d) { /* '}' */ + filter->status = 0; + } else if (c == 0x7b) { /* '{' */ + filter->status = 0x10; + } else if (c == 0x7e) { /* '~' */ + filter->status = 0; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_hz.h b/ext/mbstring/libmbfl/filters/mbfilter_hz.h new file mode 100644 index 0000000..1e7ebc3 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_hz.h @@ -0,0 +1,44 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_cn.h + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_HZ_H +#define MBFL_MBFILTER_HZ_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_hz; +extern const struct mbfl_identify_vtbl vtbl_identify_hz; +extern const struct mbfl_convert_vtbl vtbl_hz_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_hz; + +int mbfl_filt_conv_hz_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_hz(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_any_hz_flush(mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_HZ_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c new file mode 100644 index 0000000..a7daf2b --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c @@ -0,0 +1,528 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_ja.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_iso2022_jp_ms.h" + +#include "unicode_table_cp932_ext.h" +#include "unicode_table_jis.h" +#include "cp932_table.h" + +int mbfl_filt_ident_2022jpms(int c, mbfl_identify_filter *filter); + +static const char *mbfl_encoding_2022jpms_aliases[] = {"ISO2022JPMS", NULL}; + +const mbfl_encoding mbfl_encoding_2022jpms = { + mbfl_no_encoding_2022jpms, + "ISO-2022-JP-MS", + "ISO-2022-JP", + (const char *(*)[])&mbfl_encoding_2022jpms_aliases, + NULL, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_identify_vtbl vtbl_identify_2022jpms = { + mbfl_no_encoding_2022jpms, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_2022jpms +}; + +const struct mbfl_convert_vtbl vtbl_2022jpms_wchar = { + mbfl_no_encoding_2022jpms, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_2022jpms_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_2022jpms = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_2022jpms, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_2022jpms, + mbfl_filt_conv_any_2022jpms_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +#define sjistoidx(c1, c2) \ + (((c1) > 0x9f) \ + ? (((c1) - 0xc1) * 188 + (c2) - (((c2) > 0x7e) ? 0x41 : 0x40)) \ + : (((c1) - 0x81) * 188 + (c2) - (((c2) > 0x7e) ? 0x41 : 0x40))) +#define idxtojis1(c) (((c) / 94) + 0x21) +#define idxtojis2(c) (((c) % 94) + 0x21) + +/* + * ISO-2022-JP-MS => wchar + */ +int +mbfl_filt_conv_2022jpms_wchar(int c, mbfl_convert_filter *filter) +{ + int c1, s, w; + +retry: + switch (filter->status & 0xf) { +/* case 0x00: ASCII */ +/* case 0x10: X 0201 latin */ +/* case 0x20: X 0201 kana */ +/* case 0x80: X 0208 */ +/* case 0xa0: UDC */ + case 0: + if (c == 0x1b) { + filter->status += 2; + } else if (filter->status == 0x20 && c > 0x20 && c < 0x60) { /* kana */ + CK((*filter->output_function)(0xff40 + c, filter->data)); + } else if ((filter->status == 0x80 || filter->status == 0xa0) && c > 0x20 && c < 0x80) { /* kanji first char */ + filter->cache = c; + filter->status += 1; + } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else if (c > 0xa0 && c < 0xe0) { /* GR kana */ + CK((*filter->output_function)(0xfec0 + c, filter->data)); + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + +/* case 0x81: X 0208 second char */ +/* case 0xa1: UDC second char */ + case 1: + w = 0; + filter->status &= ~0xf; + c1 = filter->cache; + if (c > 0x20 && c < 0x7f) { + s = (c1 - 0x21)*94 + c - 0x21; + if (filter->status == 0x80) { + if (s <= 137) { + if (s == 31) { + w = 0xff3c; /* FULLWIDTH REVERSE SOLIDUS */ + } else if (s == 32) { + w = 0xff5e; /* FULLWIDTH TILDE */ + } else if (s == 33) { + w = 0x2225; /* PARALLEL TO */ + } else if (s == 60) { + w = 0xff0d; /* FULLWIDTH HYPHEN-MINUS */ + } else if (s == 80) { + w = 0xffe0; /* FULLWIDTH CENT SIGN */ + } else if (s == 81) { + w = 0xffe1; /* FULLWIDTH POUND SIGN */ + } else if (s == 137) { + w = 0xffe2; /* FULLWIDTH NOT SIGN */ + } + } + if (w == 0) { + if (s >= cp932ext1_ucs_table_min && s < cp932ext1_ucs_table_max) { /* vendor ext1 (13ku) */ + w = cp932ext1_ucs_table[s - cp932ext1_ucs_table_min]; + } else if (s >= 0 && s < jisx0208_ucs_table_size) { + w = jisx0208_ucs_table[s]; + } else if (s >= cp932ext2_ucs_table_min && s < cp932ext2_ucs_table_max) { /* vendor ext2 (89ku - 92ku) */ + w = cp932ext2_ucs_table[s - cp932ext2_ucs_table_min]; + } else { + w = 0; + } + } + if (w <= 0) { + w = (c1 << 8) | c; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_JIS0208; + } + CK((*filter->output_function)(w, filter->data)); + } else { + if (c1 > 0x20 && c1 < 0x35) { + w = 0xe000 + (c1 - 0x21)*94 + c - 0x21; + } + if (w <= 0) { + w = (((c1 - 0x21) + 0x7f) << 8) | c; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_JIS0208; + } + CK((*filter->output_function)(w, filter->data)); + } + } else if (c == 0x1b) { + filter->status += 2; + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + /* ESC */ +/* case 0x02: */ +/* case 0x12: */ +/* case 0x22: */ +/* case 0x82: */ +/* case 0xa2: */ + case 2: + if (c == 0x24) { /* '$' */ + filter->status++; + } else if (c == 0x28) { /* '(' */ + filter->status += 3; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + goto retry; + } + break; + + /* ESC $ */ +/* case 0x03: */ +/* case 0x13: */ +/* case 0x23: */ +/* case 0x83: */ +/* case 0xa3: */ + case 3: + if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ + filter->status = 0x80; + } else if (c == 0x28) { /* '(' */ + filter->status++; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x24, filter->data)); + goto retry; + } + break; + + /* ESC $ ( */ +/* case 0x04: */ +/* case 0x14: */ +/* case 0x24: */ +/* case 0x84: */ +/* case 0xa4: */ + case 4: + if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ + filter->status = 0x80; + } else if (c == 0x3f) { /* '?' */ + filter->status = 0xa0; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x24, filter->data)); + CK((*filter->output_function)(0x28, filter->data)); + goto retry; + } + break; + + /* ESC ( */ +/* case 0x05: */ +/* case 0x15: */ +/* case 0x25: */ +/* case 0x85: */ +/* case 0xa5: */ + case 5: + if (c == 0x42) { /* 'B' */ + filter->status = 0; + } else if (c == 0x4a) { /* 'J' */ + filter->status = 0; + } else if (c == 0x49) { /* 'I' */ + filter->status = 0x20; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x28, filter->data)); + goto retry; + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +static int +cp932ext3_cp932ext2_jis(int c) +{ + int idx; + + idx = sjistoidx(0xfa, 0x40) + c; + if (idx >= sjistoidx(0xfa, 0x5c)) + idx -= sjistoidx(0xfa, 0x5c) - sjistoidx(0xed, 0x40); + else if (idx >= sjistoidx(0xfa, 0x55)) + idx -= sjistoidx(0xfa, 0x55) - sjistoidx(0xee, 0xfa); + else if (idx >= sjistoidx(0xfa, 0x40)) + idx -= sjistoidx(0xfa, 0x40) - sjistoidx(0xee, 0xef); + return idxtojis1(idx) << 8 | idxtojis2(idx); +} + +/* + * wchar => ISO-2022-JP-MS + */ +int +mbfl_filt_conv_wchar_2022jpms(int c, mbfl_convert_filter *filter) +{ + int c1, c2, s1, s2; + + s1 = 0; + s2 = 0; + if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { + s1 = ucs_a1_jis_table[c - ucs_a1_jis_table_min]; + } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) { + s1 = ucs_a2_jis_table[c - ucs_a2_jis_table_min]; + } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) { + s1 = ucs_i_jis_table[c - ucs_i_jis_table_min]; + } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) { + s1 = ucs_r_jis_table[c - ucs_r_jis_table_min]; + } else if (c >= 0xe000 && c < (0xe000 + 20*94)) { /* user (95ku - 114ku) */ + s1 = c - 0xe000; + c1 = s1/94 + 0x7f; + c2 = s1%94 + 0x21; + s1 = (c1 << 8) | c2; + } + if (s1 <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_WINCP932) { + s1 = c & MBFL_WCSPLANE_MASK; + s2 = 1; + } else if (c1 == MBFL_WCSPLANE_JIS0208) { + s1 = c & MBFL_WCSPLANE_MASK; + } else if (c1 == MBFL_WCSPLANE_JIS0212) { + s1 = c & MBFL_WCSPLANE_MASK; + s1 |= 0x8080; + } else if (c == 0xa5) { /* YEN SIGN */ + s1 = 0x216f; /* FULLWIDTH YEN SIGN */ + } else if (c == 0x203e) { /* OVER LINE */ + s1 = 0x2131; /* FULLWIDTH MACRON */ + } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + s1 = 0x2140; + } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ + s1 = 0x2141; + } else if (c == 0x2225) { /* PARALLEL TO */ + s1 = 0x2142; + } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */ + s1 = 0x215d; + } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */ + s1 = 0x2171; + } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */ + s1 = 0x2172; + } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ + s1 = 0x224c; + } + } + if ((s1 <= 0) || (s1 >= 0xa1a1 && s2 == 0)) { /* not found or X 0212 */ + s1 = -1; + c1 = 0; + c2 = cp932ext1_ucs_table_max - cp932ext1_ucs_table_min; + while (c1 < c2) { /* CP932 vendor ext1 (13ku) */ + if (c == cp932ext1_ucs_table[c1]) { + s1 = ((c1/94 + 0x2d) << 8) + (c1%94 + 0x21); + break; + } + c1++; + } + if (s1 <= 0) { + c1 = 0; + c2 = cp932ext3_ucs_table_max - cp932ext3_ucs_table_min; + while (c1 < c2) { /* CP932 vendor ext3 (115ku - 119ku) */ + if (c == cp932ext3_ucs_table[c1]) { + s1 = cp932ext3_cp932ext2_jis(c1); + break; + } + c1++; + } + } + if (c == 0) { + s1 = 0; + } else if (s1 <= 0) { + s1 = -1; + } + } + if (s1 >= 0) { + if (s1 < 0x80) { /* latin */ + if ((filter->status & 0xff00) != 0) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + } + CK((*filter->output_function)(s1, filter->data)); + filter->status = 0; + } else if (s1 > 0xa0 && s1 < 0xe0) { /* kana */ + if ((filter->status & 0xff00) != 0x100) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x49, filter->data)); /* 'I' */ + } + filter->status = 0x100; + CK((*filter->output_function)(s1 & 0x7f, filter->data)); + } else if (s1 < 0x7e7f) { /* X 0208 */ + if ((filter->status & 0xff00) != 0x200) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x24, filter->data)); /* '$' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + } + filter->status = 0x200; + CK((*filter->output_function)((s1 >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(s1 & 0x7f, filter->data)); + } else if (s1 < 0x927f) { /* UDC */ + if ((filter->status & 0xff00) != 0x800) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x24, filter->data)); /* '$' */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x3f, filter->data)); /* '?' */ + } + filter->status = 0x800; + CK((*filter->output_function)(((s1 >> 8) - 0x5e) & 0x7f, filter->data)); + CK((*filter->output_function)(s1 & 0x7f, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +int +mbfl_filt_conv_any_2022jpms_flush(mbfl_convert_filter *filter) +{ + /* back to latin */ + if ((filter->status & 0xff00) != 0) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + } + + filter->status &= 0xff; + + if (filter->flush_function != NULL) { + return (*filter->flush_function)(filter->data); + } + + return 0; +} + +int mbfl_filt_ident_2022jpms(int c, mbfl_identify_filter *filter) +{ +retry: + switch (filter->status & 0xf) { +/* case 0x00: ASCII */ +/* case 0x10: X 0201 latin */ +/* case 0x20: X 0201 kana */ +/* case 0x80: X 0208 */ +/* case 0xa0: X UDC */ + case 0: + if (c == 0x1b) { + filter->status += 2; + } else if ((filter->status == 0x80 || filter->status == 0xa0) && c > 0x20 && c < 0x80) { /* kanji first char */ + filter->status += 1; + } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ + ; + } else { + filter->flag = 1; /* bad */ + } + break; + +/* case 0x81: X 0208 second char */ +/* case 0xa1: UDC second char */ + case 1: + filter->status &= ~0xf; + if (c == 0x1b) { + goto retry; + } else if (c < 0x21 || c > 0x7e) { /* bad */ + filter->flag = 1; + } + break; + + /* ESC */ + case 2: + if (c == 0x24) { /* '$' */ + filter->status++; + } else if (c == 0x28) { /* '(' */ + filter->status += 3; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC $ */ + case 3: + if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ + filter->status = 0x80; + } else if (c == 0x28) { /* '(' */ + filter->status++; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC $ ( */ + case 4: + if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ + filter->status = 0x80; + } else if (c == 0x3f) { /* '?' */ + filter->status = 0xa0; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC ( */ + case 5: + if (c == 0x42) { /* 'B' */ + filter->status = 0; + } else if (c == 0x4a) { /* 'J' */ + filter->status = 0; + } else if (c == 0x49) { /* 'I' */ + filter->status = 0x20; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.h b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.h new file mode 100644 index 0000000..8479a45 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.h @@ -0,0 +1,44 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_ja.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_ISO2022_JP_MS_H +#define MBFL_MBFILTER_ISO2022_JP_MS_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_2022jpms; +extern const struct mbfl_identify_vtbl vtbl_identify_2022jpms; +extern const struct mbfl_convert_vtbl vtbl_2022jpms_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_2022jpms; + +int mbfl_filt_conv_2022jpms_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_2022jpms(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_any_2022jpms_flush(mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ISO2022_JP_MS_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c new file mode 100644 index 0000000..01c01a4 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c @@ -0,0 +1,359 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_kr.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_iso2022_kr.h" +#include "unicode_table_uhc.h" + +static int mbfl_filt_ident_2022kr(int c, mbfl_identify_filter *filter); + +const mbfl_encoding mbfl_encoding_2022kr = { + mbfl_no_encoding_2022kr, + "ISO-2022-KR", + "ISO-2022-KR", + NULL, + NULL, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_identify_vtbl vtbl_identify_2022kr = { + mbfl_no_encoding_2022kr, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_2022kr +}; + +const struct mbfl_convert_vtbl vtbl_wchar_2022kr = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_2022kr, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_2022kr, + mbfl_filt_conv_any_2022kr_flush +}; + +const struct mbfl_convert_vtbl vtbl_2022kr_wchar = { + mbfl_no_encoding_2022kr, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_2022kr_wchar, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * ISO-2022-KR => wchar + */ +int +mbfl_filt_conv_2022kr_wchar(int c, mbfl_convert_filter *filter) +{ + int c1, w, flag; + +retry: + switch (filter->status & 0xf) { + /* case 0x00: ASCII */ + /* case 0x10: KSC5601 */ + case 0: + if (c == 0x1b) { /* ESC */ + filter->status += 2; + } else if (c == 0x0f) { /* SI (ASCII) */ + filter->status &= ~0xff; + } else if (c == 0x0e) { /* SO (KSC5601) */ + filter->status |= 0x10; + } else if ((filter->status & 0x10) != 0 && c > 0x20 && c < 0x7f) { + /* KSC5601 lead byte */ + filter->cache = c; + filter->status += 1; + } else if ((filter->status & 0x10) == 0 && c >= 0 && c < 0x80) { + /* latin, CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 1: /* dbcs second byte */ + filter->status &= ~0xf; + c1 = filter->cache; + flag = 0; + if (c1 > 0x20 && c1 < 0x47) { + flag = 1; + } else if (c1 >= 0x47 && c1 <= 0x7e && c1 != 0x49) { + flag = 2; + } + if (flag > 0 && c > 0x20 && c < 0x7f) { + if (flag == 1){ + w = (c1 - 0x21)*190 + (c - 0x41) + 0x80; + if (w >= 0 && w < uhc2_ucs_table_size) { + w = uhc2_ucs_table[w]; + } else { + w = 0; + } + } else { + w = (c1 - 0x47)*94 + (c - 0x21); + if (w >= 0 && w < uhc3_ucs_table_size) { + w = uhc3_ucs_table[w]; + } else { + w = 0; + } + } + + if (w <= 0) { + w = (c1 << 8) | c; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_KSC5601; + } + CK((*filter->output_function)(w, filter->data)); + } else if (c == 0x1b) { /* ESC */ + filter->status++; + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 2: /* ESC */ + if (c == 0x24) { /* '$' */ + filter->status++; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + goto retry; + } + break; + case 3: /* ESC $ */ + if (c == 0x29) { /* ')' */ + filter->status++; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x24, filter->data)); + goto retry; + } + break; + case 4: /* ESC $ ) */ + if (c == 0x43) { /* 'C' */ + filter->status &= ~0xf; + filter->status |= 0x100; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x24, filter->data)); + CK((*filter->output_function)(0x29, filter->data)); + goto retry; + } + break; + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => ISO-2022-KR + */ +int +mbfl_filt_conv_wchar_2022kr(int c, mbfl_convert_filter *filter) +{ + int c1, c2, s; + + s = 0; + + if (c >= ucs_a1_uhc_table_min && c < ucs_a1_uhc_table_max) { + s = ucs_a1_uhc_table[c - ucs_a1_uhc_table_min]; + } else if (c >= ucs_a2_uhc_table_min && c < ucs_a2_uhc_table_max) { + s = ucs_a2_uhc_table[c - ucs_a2_uhc_table_min]; + } else if (c >= ucs_a3_uhc_table_min && c < ucs_a3_uhc_table_max) { + s = ucs_a3_uhc_table[c - ucs_a3_uhc_table_min]; + } else if (c >= ucs_i_uhc_table_min && c < ucs_i_uhc_table_max) { + s = ucs_i_uhc_table[c - ucs_i_uhc_table_min]; + } else if (c >= ucs_s_uhc_table_min && c < ucs_s_uhc_table_max) { + s = ucs_s_uhc_table[c - ucs_s_uhc_table_min]; + } else if (c >= ucs_r1_uhc_table_min && c < ucs_r1_uhc_table_max) { + s = ucs_r1_uhc_table[c - ucs_r1_uhc_table_min]; + } else if (c >= ucs_r2_uhc_table_min && c < ucs_r2_uhc_table_max) { + s = ucs_r2_uhc_table[c - ucs_r2_uhc_table_min]; + } + + c1 = (s >> 8) & 0xff; + c2 = s & 0xff; + /* exclude UHC extension area */ + if (c1 < 0xa1 || c2 < 0xa1){ + s = c; + } + if (s & 0x8000) { + s -= 0x8080; + } + + if (s <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_KSC5601) { + s = c & MBFL_WCSPLANE_MASK; + } + if (c == 0) { + s = 0; + } else if (s <= 0) { + s = -1; + } + } else if ((s >= 0x80 && s < 0x2121) || (s > 0x8080)) { + s = -1; + } + if (s >= 0) { + if (s < 0x80 && s > 0) { /* ASCII */ + if ((filter->status & 0x10) != 0) { + CK((*filter->output_function)(0x0f, filter->data)); /* SI */ + filter->status &= ~0x10; + } + CK((*filter->output_function)(s, filter->data)); + } else { + if ( (filter->status & 0x100) == 0) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x24, filter->data)); /* '$' */ + CK((*filter->output_function)(0x29, filter->data)); /* ')' */ + CK((*filter->output_function)(0x43, filter->data)); /* 'C' */ + filter->status |= 0x100; + } + if ((filter->status & 0x10) == 0) { + CK((*filter->output_function)(0x0e, filter->data)); /* SO */ + filter->status |= 0x10; + } + CK((*filter->output_function)((s >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(s & 0xff, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +int +mbfl_filt_conv_any_2022kr_flush(mbfl_convert_filter *filter) +{ + /* back to ascii */ + if ((filter->status & 0xff00) != 0) { + CK((*filter->output_function)(0x0f, filter->data)); /* SI */ + } + + filter->status &= 0xff; + + if (filter->flush_function != NULL) { + return (*filter->flush_function)(filter->data); + } + + return 0; +} + +static int mbfl_filt_ident_2022kr(int c, mbfl_identify_filter *filter) +{ +retry: + switch (filter->status & 0xf) { +/* case 0x00: ASCII */ +/* case 0x10: KSC5601 mode */ +/* case 0x20: KSC5601 DBCS */ +/* case 0x40: KSC5601 SBCS */ + case 0: + if (!(filter->status & 0x10)) { + if (c == 0x1b) + filter->status += 2; + } else if (filter->status == 0x20 && c > 0x20 && c < 0x7f) { /* kanji first char */ + filter->status += 1; + } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ + ; + } else { + filter->flag = 1; /* bad */ + } + break; + +/* case 0x21: KSC5601 second char */ + case 1: + filter->status &= ~0xf; + if (c < 0x21 || c > 0x7e) { /* bad */ + filter->flag = 1; + } + break; + + /* ESC */ + case 2: + if (c == 0x24) { /* '$' */ + filter->status++; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC $ */ + case 3: + if (c == 0x29) { /* ')' */ + filter->status++; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC $) */ + case 5: + if (c == 0x43) { /* 'C' */ + filter->status = 0x10; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.h b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.h new file mode 100644 index 0000000..1dd9f69 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.h @@ -0,0 +1,44 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_kr.h + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_ISO2022_KR_H +#define MBFL_MBFILTER_ISO2022_KR_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_2022kr; +extern const struct mbfl_identify_vtbl vtbl_identify_2022kr; +extern const struct mbfl_convert_vtbl vtbl_wchar_2022kr; +extern const struct mbfl_convert_vtbl vtbl_2022kr_wchar; + +int mbfl_filt_conv_2022kr_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_2022kr(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_any_2022kr_flush(mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ISO2022_KR_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.c b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.c new file mode 100644 index 0000000..d855374 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.c @@ -0,0 +1,168 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_jis.c + * by rui hirokawa <hirokawa@php.net> on 18 aug 2011. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_iso2022jp_2004.h" +#include "mbfilter_sjis_2004.h" + +#include "unicode_table_jis2004.h" +#include "unicode_table_jis.h" + +extern int mbfl_filt_conv_any_jis_flush(mbfl_convert_filter *filter); +static int mbfl_filt_ident_2022jp_2004(int c, mbfl_identify_filter *filter); + +const mbfl_encoding mbfl_encoding_2022jp_2004 = { + mbfl_no_encoding_2022jp_2004, + "ISO-2022-JP-2004", + "ISO-2022-JP-2004", + NULL, + NULL, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_identify_vtbl vtbl_identify_2022jp_2004 = { + mbfl_no_encoding_2022jp_2004, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_2022jp_2004 +}; + +const struct mbfl_convert_vtbl vtbl_2022jp_2004_wchar = { + mbfl_no_encoding_2022jp_2004, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_jis2004_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_2022jp_2004 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_2022jp_2004, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_jis2004, + mbfl_filt_conv_jis2004_flush +}; + +static int mbfl_filt_ident_2022jp_2004(int c, mbfl_identify_filter *filter) +{ +retry: + switch (filter->status & 0xf) { +/* case 0x00: ASCII */ +/* case 0x80: X 0212 */ +/* case 0x90: X 0213 plane 1 */ +/* case 0xa0: X 0213 plane 2 */ + case 0: + if (c == 0x1b) { + filter->status += 2; + } else if (filter->status == 0x80 && c > 0x20 && c < 0x7f) { /* kanji first char */ + filter->status += 1; + } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ + ; + } else { + filter->flag = 1; /* bad */ + } + break; + +/* case 0x81: X 0208 second char */ + case 1: + if (c == 0x1b) { + filter->status++; + } else { + filter->status &= ~0xf; + if (c < 0x21 || c > 0x7e) { /* bad */ + filter->flag = 1; + } + } + break; + + /* ESC */ + case 2: + if (c == 0x24) { /* '$' */ + filter->status++; + } else if (c == 0x28) { /* '(' */ + filter->status += 3; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC $ */ + case 3: + if (c == 0x42) { /* 'B' */ + filter->status = 0x80; + } else if (c == 0x28) { /* '(' */ + filter->status++; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC $ ( */ + case 4: + if (c == 0x51) { /* JIS X 0213 plane 1 */ + filter->status = 0x90; + } else if (c == 0x50) { /* JIS X 0213 plane 2 */ + filter->status = 0xa0; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC ( */ + case 5: + if (c == 0x42) { /* 'B' */ + filter->status = 0; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.h b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.h new file mode 100644 index 0000000..f6e56b9 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.h @@ -0,0 +1,44 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_ja.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_2022JP_2004_H +#define MBFL_MBFILTER_2022JP_2004_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_2022jp_2004; +extern const struct mbfl_identify_vtbl vtbl_identify_2022jp_2004; +extern const struct mbfl_convert_vtbl vtbl_2022jp_2004_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_2022jp_2004; + +int mbfl_filt_conv_2022jp_2004_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_2022jp_2004(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_any_2022jp_2004_flush(mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_2022JP_2004_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c new file mode 100644 index 0000000..4deb029 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c @@ -0,0 +1,433 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_iso2022_jp_ms.c + * by Rui Hirokawa <hirokawa@php.net> on 25 July 2011. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_iso2022jp_mobile.h" +#include "mbfilter_sjis_mobile.h" + +#include "unicode_table_cp932_ext.h" +#include "unicode_table_jis.h" +#include "cp932_table.h" + +extern int mbfl_filt_conv_any_jis_flush(mbfl_convert_filter *filter); +extern int mbfl_filt_ident_2022jpms(int c, mbfl_identify_filter *filter); + +static const char *mbfl_encoding_2022jp_kddi_aliases[] = {"ISO-2022-JP-KDDI", NULL}; + +const mbfl_encoding mbfl_encoding_2022jp_kddi = { + mbfl_no_encoding_2022jp_kddi, + "ISO-2022-JP-MOBILE#KDDI", + "ISO-2022-JP", + mbfl_encoding_2022jp_kddi_aliases, + NULL, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_identify_vtbl vtbl_identify_2022jp_kddi = { + mbfl_no_encoding_2022jp_kddi, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_2022jpms +}; + +const struct mbfl_convert_vtbl vtbl_2022jp_kddi_wchar = { + mbfl_no_encoding_2022jp_kddi, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_2022jp_mobile_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_2022jp_kddi = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_2022jp_kddi, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_2022jp_mobile, + mbfl_filt_conv_any_jis_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +#define sjistoidx(c1, c2) \ + (((c1) > 0x9f) \ + ? (((c1) - 0xc1) * 188 + (c2) - (((c2) > 0x7e) ? 0x41 : 0x40)) \ + : (((c1) - 0x81) * 188 + (c2) - (((c2) > 0x7e) ? 0x41 : 0x40))) +#define idxtojis1(c) (((c) / 94) + 0x21) +#define idxtojis2(c) (((c) % 94) + 0x21) + +#define SJIS_ENCODE(c1,c2,s1,s2) \ + do { \ + s1 = c1; \ + s1--; \ + s1 >>= 1; \ + if ((c1) < 0x5f) { \ + s1 += 0x71; \ + } else { \ + s1 += 0xb1; \ + } \ + s2 = c2; \ + if ((c1) & 1) { \ + if ((c2) < 0x60) { \ + s2--; \ + } \ + s2 += 0x20; \ + } else { \ + s2 += 0x7e; \ + } \ + } while (0) + +#define SJIS_DECODE(c1,c2,s1,s2) \ + do { \ + s1 = c1; \ + if (s1 < 0xa0) { \ + s1 -= 0x81; \ + } else { \ + s1 -= 0xc1; \ + } \ + s1 <<= 1; \ + s1 += 0x21; \ + s2 = c2; \ + if (s2 < 0x9f) { \ + if (s2 < 0x7f) { \ + s2++; \ + } \ + s2 -= 0x20; \ + } else { \ + s1++; \ + s2 -= 0x7e; \ + } \ + } while (0) + +#define CODE2JIS(c1,c2,s1,s2) \ + c1 = (s1)/94+0x21; \ + c2 = (s1)-94*((c1)-0x21)+0x21; \ + s1 = ((c1) << 8) | (c2); \ + s2 = 1 + +/* + * ISO-2022-JP-Mobile => wchar + */ +int +mbfl_filt_conv_2022jp_mobile_wchar(int c, mbfl_convert_filter *filter) +{ + int c1, s, w, snd; + +retry: + switch (filter->status & 0xf) { +/* case 0x00: ASCII */ +/* case 0x10: X 0201 latin */ +/* case 0x20: X 0201 kana */ +/* case 0x80: X 0208 */ + case 0: + if (c == 0x1b) { + filter->status += 2; + } else if (filter->status == 0x20 && c > 0x20 && c < 0x60) { /* kana */ + CK((*filter->output_function)(0xff40 + c, filter->data)); + } else if (filter->status == 0x80 && c > 0x20 && c < 0x80) { /* kanji first char */ + filter->cache = c; + filter->status += 1; + } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else if (c > 0xa0 && c < 0xe0) { /* GR kana */ + CK((*filter->output_function)(0xfec0 + c, filter->data)); + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + +/* case 0x81: X 0208 second char */ + case 1: + w = 0; + filter->status &= ~0xf; + c1 = filter->cache; + if (c > 0x20 && c < 0x7f) { + s = (c1 - 0x21)*94 + c - 0x21; + + if (s <= 137) { + if (s == 31) { + w = 0xff3c; /* FULLWIDTH REVERSE SOLIDUS */ + } else if (s == 32) { + w = 0xff5e; /* FULLWIDTH TILDE */ + } else if (s == 33) { + w = 0x2225; /* PARALLEL TO */ + } else if (s == 60) { + w = 0xff0d; /* FULLWIDTH HYPHEN-MINUS */ + } else if (s == 80) { + w = 0xffe0; /* FULLWIDTH CENT SIGN */ + } else if (s == 81) { + w = 0xffe1; /* FULLWIDTH POUND SIGN */ + } else if (s == 137) { + w = 0xffe2; /* FULLWIDTH NOT SIGN */ + } + } + + if (w == 0) { + if (s >= cp932ext1_ucs_table_min && s < cp932ext1_ucs_table_max) { /* vendor ext1 (13ku) */ + w = cp932ext1_ucs_table[s - cp932ext1_ucs_table_min]; + } else if (s >= 0 && s < jisx0208_ucs_table_size) { + w = jisx0208_ucs_table[s]; + } else { + w = 0; + } + } + + if (s >= (84*94) && s < 91*94) { + s += 22*94; + if (filter->from->no_encoding == mbfl_no_encoding_2022jp_kddi) { + w = mbfilter_sjis_emoji_kddi2unicode(s, &snd); + } + if (w > 0 && snd > 0) { + CK((*filter->output_function)(snd, filter->data)); + } + } + + if (w <= 0) { + w = (c1 << 8) | c; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_JIS0208; + } + CK((*filter->output_function)(w, filter->data)); + } else if (c == 0x1b) { + filter->status += 2; + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + /* ESC */ +/* case 0x02: */ +/* case 0x12: */ +/* case 0x22: */ +/* case 0x82: */ + case 2: + if (c == 0x24) { /* '$' */ + filter->status++; + } else if (c == 0x28) { /* '(' */ + filter->status += 3; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + goto retry; + } + break; + + /* ESC $ */ +/* case 0x03: */ +/* case 0x13: */ +/* case 0x23: */ +/* case 0x83: */ + case 3: + if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ + filter->status = 0x80; + } else if (c == 0x28) { /* '(' */ + filter->status++; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x24, filter->data)); + goto retry; + } + break; + + /* ESC $ ( */ +/* case 0x04: */ +/* case 0x14: */ +/* case 0x24: */ +/* case 0x84: */ + case 4: + if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ + filter->status = 0x80; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x24, filter->data)); + CK((*filter->output_function)(0x28, filter->data)); + goto retry; + } + break; + + /* ESC ( */ +/* case 0x05: */ +/* case 0x15: */ +/* case 0x25: */ +/* case 0x85: */ + case 5: + if (c == 0x42) { /* 'B' */ + filter->status = 0; + } else if (c == 0x4a) { /* 'J' */ + filter->status = 0; + } else if (c == 0x49) { /* 'I' */ + filter->status = 0x20; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x28, filter->data)); + goto retry; + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => ISO-2022-JP-Mobile + */ +int +mbfl_filt_conv_wchar_2022jp_mobile(int c, mbfl_convert_filter *filter) +{ + int c1, c2, s1, s2; + + s1 = 0; + s2 = 0; + if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { + s1 = ucs_a1_jis_table[c - ucs_a1_jis_table_min]; + } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) { + s1 = ucs_a2_jis_table[c - ucs_a2_jis_table_min]; + } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) { + s1 = ucs_i_jis_table[c - ucs_i_jis_table_min]; + } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) { + s1 = ucs_r_jis_table[c - ucs_r_jis_table_min]; + } else if (c >= 0xe000 && c < (0xe000 + 20*94)) { /* user (95ku - 114ku) */ + s1 = c - 0xe000; + c1 = s1/94 + 0x7f; + c2 = s1%94 + 0x21; + s1 = (c1 << 8) | c2; + } + if (s1 <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_WINCP932) { + s1 = c & MBFL_WCSPLANE_MASK; + s2 = 1; + } else if (c1 == MBFL_WCSPLANE_JIS0208) { + s1 = c & MBFL_WCSPLANE_MASK; + } else if (c1 == MBFL_WCSPLANE_JIS0212) { + s1 = c & MBFL_WCSPLANE_MASK; + s1 |= 0x8080; + } else if (c == 0xa5) { /* YEN SIGN */ + s1 = 0x216f; /* FULLWIDTH YEN SIGN */ + } else if (c == 0x203e) { /* OVER LINE */ + s1 = 0x2131; /* FULLWIDTH MACRON */ + } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + s1 = 0x2140; + } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ + s1 = 0x2141; + } else if (c == 0x2225) { /* PARALLEL TO */ + s1 = 0x2142; + } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */ + s1 = 0x215d; + } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */ + s1 = 0x2171; + } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */ + s1 = 0x2172; + } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ + s1 = 0x224c; + } + } + + if ((s1 <= 0) || (s1 >= 0xa1a1 && s2 == 0)) { /* not found or X 0212 */ + s1 = -1; + c1 = 0; + c2 = cp932ext1_ucs_table_max - cp932ext1_ucs_table_min; + while (c1 < c2) { /* CP932 vendor ext1 (13ku) */ + if (c == cp932ext1_ucs_table[c1]) { + s1 = ((c1/94 + 0x2d) << 8) + (c1%94 + 0x21); + break; + } + c1++; + } + if (c == 0) { + s1 = 0; + } else if (s1 <= 0) { + s1 = -1; + } + } + + if (filter->to->no_encoding == mbfl_no_encoding_2022jp_kddi && + mbfilter_unicode2sjis_emoji_kddi(c, &s1, filter) > 0) { + CODE2JIS(c1,c2,s1,s2); + s1 -= 0x1600; + } + + if (filter->status == 1 && filter->cache > 0) { + return c; + } + + if (s1 >= 0) { + if (s1 < 0x80) { /* latin */ + if ((filter->status & 0xff00) != 0) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + } + CK((*filter->output_function)(s1, filter->data)); + filter->status = 0; + } else if (s1 > 0xa0 && s1 < 0xe0) { /* kana */ + if ((filter->status & 0xff00) != 0x100) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x49, filter->data)); /* 'I' */ + } + filter->status = 0x100; + CK((*filter->output_function)(s1 & 0x7f, filter->data)); + } else if (s1 < 0x7e7f) { /* X 0208 */ + if ((filter->status & 0xff00) != 0x200) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x24, filter->data)); /* '$' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + } + filter->status = 0x200; + CK((*filter->output_function)((s1 >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(s1 & 0x7f, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.h b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.h new file mode 100644 index 0000000..7ae1da2 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_iso2022_jp_ms.h + * by Rui Hirokawa <hirokawa@php.net> on 25 July 2011. + * + */ + +#ifndef MBFL_MBFILTER_ISO2022_JP_MOBILE_H +#define MBFL_MBFILTER_ISO2022_JP_MOBILE_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_2022jp_kddi; +extern const struct mbfl_identify_vtbl vtbl_identify_2022jp_kddi; +extern const struct mbfl_convert_vtbl vtbl_2022jp_kddi_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_2022jp_kddi; + +int mbfl_filt_conv_2022jp_mobile_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_2022jp_mobile(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ISO2022_JP_MOBILE_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c new file mode 100644 index 0000000..901bbb7 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c @@ -0,0 +1,100 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_iso8859_1.h" + +static const char *mbfl_encoding_8859_1_aliases[] = {"ISO_8859-1", "latin1", NULL}; + +const mbfl_encoding mbfl_encoding_8859_1 = { + mbfl_no_encoding_8859_1, + "ISO-8859-1", + "ISO-8859-1", + (const char *(*)[])&mbfl_encoding_8859_1_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_8859_1 = { + mbfl_no_encoding_8859_1, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_true +}; + +const struct mbfl_convert_vtbl vtbl_8859_1_wchar = { + mbfl_no_encoding_8859_1, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_8859_1_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_8859_1 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_8859_1, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_8859_1, + mbfl_filt_conv_common_flush +}; + + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * ISO-8859-1 => wchar + */ +int mbfl_filt_conv_8859_1_wchar(int c, mbfl_convert_filter *filter) +{ + return (*filter->output_function)(c, filter->data); +} + +/* + * wchar => ISO-8859-1 + */ +int mbfl_filt_conv_wchar_8859_1(int c, mbfl_convert_filter *filter) +{ + if (c >= 0 && c < 0x100) { + CK((*filter->output_function)(c, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.h new file mode 100644 index 0000000..d55a457 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.h + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_ISO8859_1_H +#define MBFL_MBFILTER_ISO8859_1_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_8859_1; +extern const struct mbfl_identify_vtbl vtbl_identify_8859_1; +extern const struct mbfl_convert_vtbl vtbl_8859_1_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_8859_1; + +int mbfl_filt_conv_8859_1_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_8859_1(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ISO8859_1_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c new file mode 100644 index 0000000..b0f80e7 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c @@ -0,0 +1,138 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_iso8859_10.h" +#include "unicode_table_iso8859_10.h" + +static const char *mbfl_encoding_8859_10_aliases[] = {"ISO_8859-10", "latin6", NULL}; + +const mbfl_encoding mbfl_encoding_8859_10 = { + mbfl_no_encoding_8859_10, + "ISO-8859-10", + "ISO-8859-10", + (const char *(*)[])&mbfl_encoding_8859_10_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_8859_10 = { + mbfl_no_encoding_8859_10, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_true +}; + +const struct mbfl_convert_vtbl vtbl_8859_10_wchar = { + mbfl_no_encoding_8859_10, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_8859_10_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_8859_10 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_8859_10, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_8859_10, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * ISO-8859-10 => wchar + */ +int mbfl_filt_conv_8859_10_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < 0xa0) { + s = c; + } else if (c >= 0xa0 && c < 0x100) { + s = iso8859_10_ucs_table[c - 0xa0]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_8859_10; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* + * wchar => ISO-8859-10 + */ +int mbfl_filt_conv_wchar_8859_10(int c, mbfl_convert_filter *filter) +{ + int s, n; + + if (c >= 0 && c < 0xa0) { + s = c; + } else { + s = -1; + n = 95; + while (n >= 0) { + if (c == iso8859_10_ucs_table[n]) { + s = 0xa0 + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_10) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.h new file mode 100644 index 0000000..3743422 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_ISO8859_10_H +#define MBFL_MBFILTER_ISO8859_10_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_8859_10; +extern const struct mbfl_identify_vtbl vtbl_identify_8859_10; +extern const struct mbfl_convert_vtbl vtbl_8859_10_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_8859_10; + +int mbfl_filt_conv_8859_10_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_8859_10(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ISO8859_10_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c new file mode 100644 index 0000000..674db7e --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c @@ -0,0 +1,138 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_iso8859_13.h" +#include "unicode_table_iso8859_13.h" + +static const char *mbfl_encoding_8859_13_aliases[] = {"ISO_8859-13", NULL}; + +const mbfl_encoding mbfl_encoding_8859_13 = { + mbfl_no_encoding_8859_13, + "ISO-8859-13", + "ISO-8859-13", + (const char *(*)[])&mbfl_encoding_8859_13_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_8859_13 = { + mbfl_no_encoding_8859_13, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_true +}; + +const struct mbfl_convert_vtbl vtbl_8859_13_wchar = { + mbfl_no_encoding_8859_13, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_8859_13_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_8859_13 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_8859_13, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_8859_13, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * ISO-8859-13 => wchar + */ +int mbfl_filt_conv_8859_13_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < 0xa0) { + s = c; + } else if (c >= 0xa0 && c < 0x100) { + s = iso8859_13_ucs_table[c - 0xa0]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_8859_13; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* + * wchar => ISO-8859-13 + */ +int mbfl_filt_conv_wchar_8859_13(int c, mbfl_convert_filter *filter) +{ + int s, n; + + if (c >= 0 && c < 0xa0) { + s = c; + } else { + s = -1; + n = 95; + while (n >= 0) { + if (c == iso8859_13_ucs_table[n]) { + s = 0xa0 + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_13) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.h new file mode 100644 index 0000000..594575c --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_ISO8859_13_H +#define MBFL_MBFILTER_ISO8859_13_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_8859_13; +extern const struct mbfl_identify_vtbl vtbl_identify_8859_13; +extern const struct mbfl_convert_vtbl vtbl_8859_13_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_8859_13; + +int mbfl_filt_conv_8859_13_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_8859_13(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ISO8859_13_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c new file mode 100644 index 0000000..c0d241c --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c @@ -0,0 +1,138 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_iso8859_14.h" +#include "unicode_table_iso8859_14.h" + +static const char *mbfl_encoding_8859_14_aliases[] = {"ISO_8859-14", "latin8", NULL}; + +const mbfl_encoding mbfl_encoding_8859_14 = { + mbfl_no_encoding_8859_14, + "ISO-8859-14", + "ISO-8859-14", + (const char *(*)[])&mbfl_encoding_8859_14_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_8859_14 = { + mbfl_no_encoding_8859_14, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_true +}; + +const struct mbfl_convert_vtbl vtbl_8859_14_wchar = { + mbfl_no_encoding_8859_14, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_8859_14_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_8859_14 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_8859_14, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_8859_14, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * ISO-8859-14 => wchar + */ +int mbfl_filt_conv_8859_14_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < 0xa0) { + s = c; + } else if (c >= 0xa0 && c < 0x100) { + s = iso8859_14_ucs_table[c - 0xa0]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_8859_14; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* + * wchar => ISO-8859-14 + */ +int mbfl_filt_conv_wchar_8859_14(int c, mbfl_convert_filter *filter) +{ + int s, n; + + if (c >= 0 && c < 0xa0) { + s = c; + } else { + s = -1; + n = 95; + while (n >= 0) { + if (c == iso8859_14_ucs_table[n]) { + s = 0xa0 + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_14) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.h new file mode 100644 index 0000000..0006bae --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.h @@ -0,0 +1,26 @@ +/* + * COPYRIGHT NOTICE + * + * This file is a portion of "streamable kanji code filter and converter" + * library, which is distributed under GNU Lesser General Public License + * version 2.1. + * + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_ISO8859_14_H +#define MBFL_MBFILTER_ISO8859_14_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_8859_14; +extern const struct mbfl_identify_vtbl vtbl_identify_8859_14; +extern const struct mbfl_convert_vtbl vtbl_8859_14_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_8859_14; + +int mbfl_filt_conv_8859_14_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_8859_14(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ISO8859_14_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c new file mode 100644 index 0000000..af321d6 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c @@ -0,0 +1,136 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_iso8859_15.h" +#include "unicode_table_iso8859_15.h" + +static const char *mbfl_encoding_8859_15_aliases[] = {"ISO_8859-15", NULL}; + +const mbfl_encoding mbfl_encoding_8859_15 = { + mbfl_no_encoding_8859_15, + "ISO-8859-15", + "ISO-8859-15", + (const char *(*)[])&mbfl_encoding_8859_15_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_8859_15 = { + mbfl_no_encoding_8859_15, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_true +}; + +const struct mbfl_convert_vtbl vtbl_8859_15_wchar = { + mbfl_no_encoding_8859_15, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_8859_15_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_8859_15 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_8859_15, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_8859_15, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * ISO-8859-15 => wchar + */ +int mbfl_filt_conv_8859_15_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < 0xa0) { + s = c; + } else if (c >= 0xa0 && c < 0x100) { + s = iso8859_15_ucs_table[c - 0xa0]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_8859_15; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* + * wchar => ISO-8859-15 + */ +int mbfl_filt_conv_wchar_8859_15(int c, mbfl_convert_filter *filter) +{ + int s, n; + + if (c >= 0 && c < 0xa0) { + s = c; + } else { + s = -1; + n = 95; + while (n >= 0) { + if (c == iso8859_15_ucs_table[n]) { + s = 0xa0 + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_15) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.h new file mode 100644 index 0000000..b5054de --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.h @@ -0,0 +1,26 @@ +/* + * COPYRIGHT NOTICE + * + * This file is a portion of "streamable kanji code filter and converter" + * library, which is distributed under GNU Lesser General Public License + * version 2.1. + * + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 4 Dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_ISO8859_15_H +#define MBFL_MBFILTER_ISO8859_15_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_8859_15; +extern const struct mbfl_identify_vtbl vtbl_identify_8859_15; +extern const struct mbfl_convert_vtbl vtbl_8859_15_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_8859_15; + +int mbfl_filt_conv_8859_15_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_8859_15(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ISO8859_15_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.c new file mode 100644 index 0000000..8f12feb --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.c @@ -0,0 +1,136 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_iso8859_16.h" +#include "unicode_table_iso8859_16.h" + +static const char *mbfl_encoding_8859_16_aliases[] = {"ISO_8859-16", NULL}; + +const mbfl_encoding mbfl_encoding_8859_16 = { + mbfl_no_encoding_8859_16, + "ISO-8859-16", + "ISO-8859-16", + (const char *(*)[])&mbfl_encoding_8859_16_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_8859_16 = { + mbfl_no_encoding_8859_16, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_true +}; + +const struct mbfl_convert_vtbl vtbl_8859_16_wchar = { + mbfl_no_encoding_8859_16, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_8859_16_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_8859_16 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_8859_16, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_8859_16, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * ISO-8859-16 => wchar + */ +int mbfl_filt_conv_8859_16_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < 0xa0) { + s = c; + } else if (c >= 0xa0 && c < 0x100) { + s = iso8859_16_ucs_table[c - 0xa0]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_8859_16; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* + * wchar => ISO-8859-16 + */ +int mbfl_filt_conv_wchar_8859_16(int c, mbfl_convert_filter *filter) +{ + int s, n; + + if (c >= 0 && c < 0xa0) { + s = c; + } else { + s = -1; + n = 95; + while (n >= 0) { + if (c == iso8859_16_ucs_table[n]) { + s = 0xa0 + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_16) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.h new file mode 100644 index 0000000..a5e2d2f --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.h @@ -0,0 +1,23 @@ +/* + * COPYRIGHT NOTICE + * + * This file is a portion of "streamable kanji code filter and converter" + * library, which is distributed under GNU Lesser General Public License + * version 2.1. + * + */ + +#ifndef MBFL_MBFILTER_ISO8859_16_H +#define MBFL_MBFILTER_ISO8859_16_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_8859_16; +extern const struct mbfl_identify_vtbl vtbl_identify_8859_16; +extern const struct mbfl_convert_vtbl vtbl_8859_16_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_8859_16; + +int mbfl_filt_conv_8859_16_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_8859_16(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ISO8859_16_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c new file mode 100644 index 0000000..c52c72a --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c @@ -0,0 +1,139 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_iso8859_2.h" +#include "unicode_table_iso8859_2.h" + +static const char *mbfl_encoding_8859_2_aliases[] = {"ISO_8859-2", "latin2", NULL}; + +const mbfl_encoding mbfl_encoding_8859_2 = { + mbfl_no_encoding_8859_2, + "ISO-8859-2", + "ISO-8859-2", + (const char *(*)[])&mbfl_encoding_8859_2_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_8859_2 = { + mbfl_no_encoding_8859_2, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_true +}; + +const struct mbfl_convert_vtbl vtbl_8859_2_wchar = { + mbfl_no_encoding_8859_2, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_8859_2_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_8859_2 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_8859_2, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_8859_2, + mbfl_filt_conv_common_flush +}; + + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * ISO-8859-2 => wchar + */ +int mbfl_filt_conv_8859_2_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < 0xa0) { + s = c; + } else if (c >= 0xa0 && c < 0x100) { + s = iso8859_2_ucs_table[c - 0xa0]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_8859_2; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* + * wchar => ISO-8859-2 + */ +int mbfl_filt_conv_wchar_8859_2(int c, mbfl_convert_filter *filter) +{ + int s, n; + + if (c >= 0 && c < 0xa0) { + s = c; + } else { + s = -1; + n = 95; + while (n >= 0) { + if (c == iso8859_2_ucs_table[n]) { + s = 0xa0 + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_2) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.h new file mode 100644 index 0000000..732e919 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_ISO8859_2_H +#define MBFL_MBFILTER_ISO8859_2_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_8859_2; +extern const struct mbfl_identify_vtbl vtbl_identify_8859_2; +extern const struct mbfl_convert_vtbl vtbl_8859_2_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_8859_2; + +int mbfl_filt_conv_8859_2_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_8859_2(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ISO8859_2_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c new file mode 100644 index 0000000..d47098c --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c @@ -0,0 +1,139 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_iso8859_3.h" +#include "unicode_table_iso8859_3.h" + +static const char *mbfl_encoding_8859_3_aliases[] = {"ISO_8859-3", "latin3", NULL}; + +const mbfl_encoding mbfl_encoding_8859_3 = { + mbfl_no_encoding_8859_3, + "ISO-8859-3", + "ISO-8859-3", + (const char *(*)[])&mbfl_encoding_8859_3_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_8859_3 = { + mbfl_no_encoding_8859_3, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_true +}; + +const struct mbfl_convert_vtbl vtbl_8859_3_wchar = { + mbfl_no_encoding_8859_3, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_8859_3_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_8859_3 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_8859_3, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_8859_3, + mbfl_filt_conv_common_flush +}; + + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * ISO-8859-3 => wchar + */ +int mbfl_filt_conv_8859_3_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < 0xa0) { + s = c; + } else if (c >= 0xa0 && c < 0x100) { + s = iso8859_3_ucs_table[c - 0xa0]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_8859_3; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* + * wchar => ISO-8859-3 + */ +int mbfl_filt_conv_wchar_8859_3(int c, mbfl_convert_filter *filter) +{ + int s, n; + + if (c >= 0 && c < 0xa0) { + s = c; + } else { + s = -1; + n = 95; + while (n >= 0) { + if (c == iso8859_3_ucs_table[n]) { + s = 0xa0 + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_3) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.h new file mode 100644 index 0000000..88ab3be --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_ISO8859_3_H +#define MBFL_MBFILTER_ISO8859_3_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_8859_3; +extern const struct mbfl_identify_vtbl vtbl_identify_8859_3; +extern const struct mbfl_convert_vtbl vtbl_8859_3_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_8859_3; + +int mbfl_filt_conv_8859_3_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_8859_3(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ISO8859_3_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c new file mode 100644 index 0000000..65c539e --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c @@ -0,0 +1,137 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_iso8859_4.h" +#include "unicode_table_iso8859_4.h" + +static const char *mbfl_encoding_8859_4_aliases[] = {"ISO_8859-4", "latin4", NULL}; + +const mbfl_encoding mbfl_encoding_8859_4 = { + mbfl_no_encoding_8859_4, + "ISO-8859-4", + "ISO-8859-4", + (const char *(*)[])&mbfl_encoding_8859_4_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_8859_4 = { + mbfl_no_encoding_8859_4, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_true }; + +const struct mbfl_convert_vtbl vtbl_8859_4_wchar = { + mbfl_no_encoding_8859_4, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_8859_4_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_8859_4 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_8859_4, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_8859_4, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * ISO-8859-4 => wchar + */ +int mbfl_filt_conv_8859_4_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < 0xa0) { + s = c; + } else if (c >= 0xa0 && c < 0x100) { + s = iso8859_4_ucs_table[c - 0xa0]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_8859_4; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* + * wchar => ISO-8859-4 + */ +int mbfl_filt_conv_wchar_8859_4(int c, mbfl_convert_filter *filter) +{ + int s, n; + + if (c >= 0 && c < 0xa0) { + s = c; + } else { + s = -1; + n = 95; + while (n >= 0) { + if (c == iso8859_4_ucs_table[n]) { + s = 0xa0 + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_4) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.h new file mode 100644 index 0000000..c682391 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.h @@ -0,0 +1,41 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_ISO8859_4_H +#define MBFL_MBFILTER_ISO8859_4_H + +extern const mbfl_encoding mbfl_encoding_8859_4; +extern const struct mbfl_identify_vtbl vtbl_identify_8859_4; +extern const struct mbfl_convert_vtbl vtbl_8859_4_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_8859_4; + +int mbfl_filt_conv_8859_4_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_8859_4(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ISO8859_4_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c new file mode 100644 index 0000000..3a41398 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c @@ -0,0 +1,139 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_iso8859_5.h" +#include "unicode_table_iso8859_5.h" + +static const char *mbfl_encoding_8859_5_aliases[] = {"ISO_8859-5", "cyrillic", NULL}; + +const mbfl_encoding mbfl_encoding_8859_5 = { + mbfl_no_encoding_8859_5, + "ISO-8859-5", + "ISO-8859-5", + (const char *(*)[])&mbfl_encoding_8859_5_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_8859_5 = { + mbfl_no_encoding_8859_5, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_true +}; + +const struct mbfl_convert_vtbl vtbl_8859_5_wchar = { + mbfl_no_encoding_8859_5, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_8859_5_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_8859_5 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_8859_5, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_8859_5, + mbfl_filt_conv_common_flush +}; + + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * ISO-8859-5 => wchar + */ +int mbfl_filt_conv_8859_5_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < 0xa0) { + s = c; + } else if (c >= 0xa0 && c < 0x100) { + s = iso8859_5_ucs_table[c - 0xa0]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_8859_5; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* + * wchar => ISO-8859-5 + */ +int mbfl_filt_conv_wchar_8859_5(int c, mbfl_convert_filter *filter) +{ + int s, n; + + if (c >= 0 && c < 0xa0) { + s = c; + } else { + s = -1; + n = 95; + while (n >= 0) { + if (c == iso8859_5_ucs_table[n]) { + s = 0xa0 + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_5) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.h new file mode 100644 index 0000000..531c1c1 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_ISO8859_5_H +#define MBFL_MBFILTER_ISO8859_5_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_8859_5; +extern const struct mbfl_identify_vtbl vtbl_identify_8859_5; +extern const struct mbfl_convert_vtbl vtbl_8859_5_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_8859_5; + +int mbfl_filt_conv_8859_5_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_8859_5(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ISO8859_5_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c new file mode 100644 index 0000000..9823064 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c @@ -0,0 +1,139 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_iso8859_6.h" +#include "unicode_table_iso8859_6.h" + +static const char *mbfl_encoding_8859_6_aliases[] = {"ISO_8859-6", "arabic", NULL}; + +const mbfl_encoding mbfl_encoding_8859_6 = { + mbfl_no_encoding_8859_6, + "ISO-8859-6", + "ISO-8859-6", + (const char *(*)[])&mbfl_encoding_8859_6_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_8859_6 = { + mbfl_no_encoding_8859_6, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_true +}; + +const struct mbfl_convert_vtbl vtbl_8859_6_wchar = { + mbfl_no_encoding_8859_6, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_8859_6_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_8859_6 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_8859_6, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_8859_6, + mbfl_filt_conv_common_flush +}; + + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * ISO-8859-6 => wchar + */ +int mbfl_filt_conv_8859_6_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < 0xa0) { + s = c; + } else if (c >= 0xa0 && c < 0x100) { + s = iso8859_6_ucs_table[c - 0xa0]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_8859_6; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* + * wchar => ISO-8859-6 + */ +int mbfl_filt_conv_wchar_8859_6(int c, mbfl_convert_filter *filter) +{ + int s, n; + + if (c >= 0 && c < 0xa0) { + s = c; + } else { + s = -1; + n = 95; + while (n >= 0) { + if (c == iso8859_6_ucs_table[n]) { + s = 0xa0 + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_6) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.h new file mode 100644 index 0000000..bc27f3e --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_ISO8859_6_H +#define MBFL_MBFILTER_ISO8859_6_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_8859_6; +extern const struct mbfl_identify_vtbl vtbl_identify_8859_6; +extern const struct mbfl_convert_vtbl vtbl_8859_6_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_8859_6; + +int mbfl_filt_conv_8859_6_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_8859_6(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ISO8859_6_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c new file mode 100644 index 0000000..a02ce7f --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c @@ -0,0 +1,139 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_iso8859_7.h" +#include "unicode_table_iso8859_7.h" + +static const char *mbfl_encoding_8859_7_aliases[] = {"ISO_8859-7", "greek", NULL}; + +const mbfl_encoding mbfl_encoding_8859_7 = { + mbfl_no_encoding_8859_7, + "ISO-8859-7", + "ISO-8859-7", + (const char *(*)[])&mbfl_encoding_8859_7_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_8859_7 = { + mbfl_no_encoding_8859_7, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_true +}; + +const struct mbfl_convert_vtbl vtbl_8859_7_wchar = { + mbfl_no_encoding_8859_7, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_8859_7_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_8859_7 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_8859_7, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_8859_7, + mbfl_filt_conv_common_flush +}; + + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * ISO-8859-7 => wchar + */ +int mbfl_filt_conv_8859_7_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < 0xa0) { + s = c; + } else if (c >= 0xa0 && c < 0x100) { + s = iso8859_7_ucs_table[c - 0xa0]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_8859_7; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* + * wchar => ISO-8859-7 + */ +int mbfl_filt_conv_wchar_8859_7(int c, mbfl_convert_filter *filter) +{ + int s, n; + + if (c >= 0 && c < 0xa0) { + s = c; + } else { + s = -1; + n = 95; + while (n >= 0) { + if (c == iso8859_7_ucs_table[n]) { + s = 0xa0 + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_7) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.h new file mode 100644 index 0000000..d3042f3 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_ISO8859_7_H +#define MBFL_MBFILTER_ISO8859_7_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_8859_7; +extern const struct mbfl_identify_vtbl vtbl_identify_8859_7; +extern const struct mbfl_convert_vtbl vtbl_8859_7_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_8859_7; + +int mbfl_filt_conv_8859_7_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_8859_7(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ISO8859_7_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c new file mode 100644 index 0000000..fa4571a --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c @@ -0,0 +1,137 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_iso8859_8.h" +#include "unicode_table_iso8859_8.h" + +static const char *mbfl_encoding_8859_8_aliases[] = {"ISO_8859-8", "hebrew", NULL}; + +const mbfl_encoding mbfl_encoding_8859_8 = { + mbfl_no_encoding_8859_8, + "ISO-8859-8", + "ISO-8859-8", + (const char *(*)[])&mbfl_encoding_8859_8_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_8859_8 = { + mbfl_no_encoding_8859_8, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_true +}; + +const struct mbfl_convert_vtbl vtbl_8859_8_wchar = { + mbfl_no_encoding_8859_8, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_8859_8_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_8859_8 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_8859_8, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_8859_8, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * ISO-8859-8 => wchar + */ +int mbfl_filt_conv_8859_8_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < 0xa0) { + s = c; + } else if (c >= 0xa0 && c < 0x100) { + s = iso8859_8_ucs_table[c - 0xa0]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_8859_8; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* + * wchar => ISO-8859-8 + */ +int mbfl_filt_conv_wchar_8859_8(int c, mbfl_convert_filter *filter) +{ + int s, n; + + if (c >= 0 && c < 0xa0) { + s = c; + } else { + s = -1; + n = 95; + while (n >= 0) { + if (c == iso8859_8_ucs_table[n]) { + s = 0xa0 + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_8) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.h new file mode 100644 index 0000000..884d509 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_ISO8859_8_H +#define MBFL_MBFILTER_ISO8859_8_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_8859_8; +extern const struct mbfl_identify_vtbl vtbl_identify_8859_8; +extern const struct mbfl_convert_vtbl vtbl_8859_8_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_8859_8; + +int mbfl_filt_conv_8859_8_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_8859_8(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ISO8859_8_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c new file mode 100644 index 0000000..57d2e37 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c @@ -0,0 +1,138 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_iso8859_9.h" +#include "unicode_table_iso8859_9.h" + +static const char *mbfl_encoding_8859_9_aliases[] = {"ISO_8859-9", "latin5", NULL}; + +const mbfl_encoding mbfl_encoding_8859_9 = { + mbfl_no_encoding_8859_9, + "ISO-8859-9", + "ISO-8859-9", + (const char *(*)[])&mbfl_encoding_8859_9_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_8859_9 = { + mbfl_no_encoding_8859_9, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_true +}; + +const struct mbfl_convert_vtbl vtbl_8859_9_wchar = { + mbfl_no_encoding_8859_9, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_8859_9_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_8859_9 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_8859_9, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_8859_9, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * ISO-8859-9 => wchar + */ +int mbfl_filt_conv_8859_9_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < 0xa0) { + s = c; + } else if (c >= 0xa0 && c < 0x100) { + s = iso8859_9_ucs_table[c - 0xa0]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_8859_9; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* + * wchar => ISO-8859-9 + */ +int mbfl_filt_conv_wchar_8859_9(int c, mbfl_convert_filter *filter) +{ + int s, n; + + if (c >= 0 && c < 0xa0) { + s = c; + } else { + s = -1; + n = 95; + while (n >= 0) { + if (c == iso8859_9_ucs_table[n]) { + s = 0xa0 + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_8859_9) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.h b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.h new file mode 100644 index 0000000..3731eda --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_ISO8859_9_H +#define MBFL_MBFILTER_ISO8859_9_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_8859_9; +extern const struct mbfl_identify_vtbl vtbl_identify_8859_9; +extern const struct mbfl_convert_vtbl vtbl_8859_9_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_8859_9; + +int mbfl_filt_conv_8859_9_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_8859_9(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ISO8859_9_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_jis.c b/ext/mbstring/libmbfl/filters/mbfilter_jis.c new file mode 100644 index 0000000..7fa1fd3 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_jis.c @@ -0,0 +1,663 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_ja.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_jis.h" + +#include "unicode_table_cp932_ext.h" +#include "unicode_table_jis.h" + +static int mbfl_filt_ident_jis(int c, mbfl_identify_filter *filter); +static int mbfl_filt_ident_2022jp(int c, mbfl_identify_filter *filter); + +const mbfl_encoding mbfl_encoding_jis = { + mbfl_no_encoding_jis, + "JIS", + "ISO-2022-JP", + NULL, + NULL, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE +}; + +const mbfl_encoding mbfl_encoding_2022jp = { + mbfl_no_encoding_2022jp, + "ISO-2022-JP", + "ISO-2022-JP", + NULL, + NULL, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_identify_vtbl vtbl_identify_jis = { + mbfl_no_encoding_jis, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_jis +}; + +const struct mbfl_identify_vtbl vtbl_identify_2022jp = { + mbfl_no_encoding_2022jp, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_2022jp +}; + +const struct mbfl_convert_vtbl vtbl_jis_wchar = { + mbfl_no_encoding_jis, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_jis_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_jis = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_jis, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_jis, + mbfl_filt_conv_any_jis_flush +}; + +const struct mbfl_convert_vtbl vtbl_2022jp_wchar = { + mbfl_no_encoding_2022jp, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_jis_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_2022jp = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_2022jp, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_2022jp, + mbfl_filt_conv_any_jis_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * JIS => wchar + */ +int +mbfl_filt_conv_jis_wchar(int c, mbfl_convert_filter *filter) +{ + int c1, s, w; + +retry: + switch (filter->status & 0xf) { +/* case 0x00: ASCII */ +/* case 0x10: X 0201 latin */ +/* case 0x20: X 0201 kana */ +/* case 0x80: X 0208 */ +/* case 0x90: X 0212 */ + case 0: + if (c == 0x1b) { + filter->status += 2; + } else if (c == 0x0e) { /* "kana in" */ + filter->status = 0x20; + } else if (c == 0x0f) { /* "kana out" */ + filter->status = 0; + } else if (filter->status == 0x10 && c == 0x5c) { /* YEN SIGN */ + CK((*filter->output_function)(0xa5, filter->data)); + } else if (filter->status == 0x10 && c == 0x7e) { /* OVER LINE */ + CK((*filter->output_function)(0x203e, filter->data)); + } else if (filter->status == 0x20 && c > 0x20 && c < 0x60) { /* kana */ + CK((*filter->output_function)(0xff40 + c, filter->data)); + } else if ((filter->status == 0x80 || filter->status == 0x90) && c > 0x20 && c < 0x7f) { /* kanji first char */ + filter->cache = c; + filter->status += 1; + } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else if (c > 0xa0 && c < 0xe0) { /* GR kana */ + CK((*filter->output_function)(0xfec0 + c, filter->data)); + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + +/* case 0x81: X 0208 second char */ +/* case 0x91: X 0212 second char */ + case 1: + filter->status &= ~0xf; + c1 = filter->cache; + if (c > 0x20 && c < 0x7f) { + s = (c1 - 0x21)*94 + c - 0x21; + if (filter->status == 0x80) { + if (s >= 0 && s < jisx0208_ucs_table_size) { + w = jisx0208_ucs_table[s]; + } else { + w = 0; + } + if (w <= 0) { + w = (c1 << 8) | c; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_JIS0208; + } + } else { + if (s >= 0 && s < jisx0212_ucs_table_size) { + w = jisx0212_ucs_table[s]; + } else { + w = 0; + } + if (w <= 0) { + w = (c1 << 8) | c; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_JIS0212; + } + } + CK((*filter->output_function)(w, filter->data)); + } else if (c == 0x1b) { + filter->status += 2; + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + /* ESC */ +/* case 0x02: */ +/* case 0x12: */ +/* case 0x22: */ +/* case 0x82: */ +/* case 0x92: */ + case 2: + if (c == 0x24) { /* '$' */ + filter->status++; + } else if (c == 0x28) { /* '(' */ + filter->status += 3; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + goto retry; + } + break; + + /* ESC $ */ +/* case 0x03: */ +/* case 0x13: */ +/* case 0x23: */ +/* case 0x83: */ +/* case 0x93: */ + case 3: + if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ + filter->status = 0x80; + } else if (c == 0x28) { /* '(' */ + filter->status++; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x24, filter->data)); + goto retry; + } + break; + + /* ESC $ ( */ +/* case 0x04: */ +/* case 0x14: */ +/* case 0x24: */ +/* case 0x84: */ +/* case 0x94: */ + case 4: + if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ + filter->status = 0x80; + } else if (c == 0x44) { /* 'D' */ + filter->status = 0x90; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x24, filter->data)); + CK((*filter->output_function)(0x28, filter->data)); + goto retry; + } + break; + + /* ESC ( */ +/* case 0x05: */ +/* case 0x15: */ +/* case 0x25: */ +/* case 0x85: */ +/* case 0x95: */ + case 5: + if (c == 0x42 || c == 0x48) { /* 'B' or 'H' */ + filter->status = 0; + } else if (c == 0x4a) { /* 'J' */ + filter->status = 0x10; + } else if (c == 0x49) { /* 'I' */ + filter->status = 0x20; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x28, filter->data)); + goto retry; + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => JIS + */ +int +mbfl_filt_conv_wchar_jis(int c, mbfl_convert_filter *filter) +{ + int c1, s; + + s = 0; + if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { + s = ucs_a1_jis_table[c - ucs_a1_jis_table_min]; + } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) { + s = ucs_a2_jis_table[c - ucs_a2_jis_table_min]; + } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) { + s = ucs_i_jis_table[c - ucs_i_jis_table_min]; + } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) { + s = ucs_r_jis_table[c - ucs_r_jis_table_min]; + } + if (s <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_JIS0208) { + s = c & MBFL_WCSPLANE_MASK; + } else if (c1 == MBFL_WCSPLANE_JIS0212) { + s = c & MBFL_WCSPLANE_MASK; + s |= 0x8080; + } else if (c == 0xa5) { /* YEN SIGN */ + s = 0x1005c; + } else if (c == 0x203e) { /* OVER LINE */ + s = 0x1007e; + } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + s = 0x2140; + } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ + s = 0x2141; + } else if (c == 0x2225) { /* PARALLEL TO */ + s = 0x2142; + } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */ + s = 0x215d; + } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */ + s = 0x2171; + } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */ + s = 0x2172; + } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ + s = 0x224c; + } + if (c == 0) { + s = 0; + } else if (s <= 0) { + s = -1; + } + } + if (s >= 0) { + if (s < 0x80) { /* ASCII */ + if ((filter->status & 0xff00) != 0) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + } + filter->status = 0; + CK((*filter->output_function)(s, filter->data)); + } else if (s < 0x100) { /* kana */ + if ((filter->status & 0xff00) != 0x100) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x49, filter->data)); /* 'I' */ + } + filter->status = 0x100; + CK((*filter->output_function)(s & 0x7f, filter->data)); + } else if (s < 0x8080) { /* X 0208 */ + if ((filter->status & 0xff00) != 0x200) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x24, filter->data)); /* '$' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + } + filter->status = 0x200; + CK((*filter->output_function)((s >> 8) & 0x7f, filter->data)); + CK((*filter->output_function)(s & 0x7f, filter->data)); + } else if (s < 0x10000) { /* X 0212 */ + if ((filter->status & 0xff00) != 0x300) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x24, filter->data)); /* '$' */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x44, filter->data)); /* 'D' */ + } + filter->status = 0x300; + CK((*filter->output_function)((s >> 8) & 0x7f, filter->data)); + CK((*filter->output_function)(s & 0x7f, filter->data)); + } else { /* X 0201 latin */ + if ((filter->status & 0xff00) != 0x400) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x4a, filter->data)); /* 'J' */ + } + filter->status = 0x400; + CK((*filter->output_function)(s & 0x7f, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + + +/* + * wchar => ISO-2022-JP + */ +int +mbfl_filt_conv_wchar_2022jp(int c, mbfl_convert_filter *filter) +{ + int s; + + s = 0; + if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { + s = ucs_a1_jis_table[c - ucs_a1_jis_table_min]; + } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) { + s = ucs_a2_jis_table[c - ucs_a2_jis_table_min]; + } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) { + s = ucs_i_jis_table[c - ucs_i_jis_table_min]; + } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) { + s = ucs_r_jis_table[c - ucs_r_jis_table_min]; + } + if (s <= 0) { + if (c == 0xa5) { /* YEN SIGN */ + s = 0x1005c; + } else if (c == 0x203e) { /* OVER LINE */ + s = 0x1007e; + } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + s = 0x2140; + } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ + s = 0x2141; + } else if (c == 0x2225) { /* PARALLEL TO */ + s = 0x2142; + } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */ + s = 0x215d; + } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */ + s = 0x2171; + } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */ + s = 0x2172; + } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ + s = 0x224c; + } + if (c == 0) { + s = 0; + } else if (s <= 0) { + s = -1; + } + } else if ((s >= 0x80 && s < 0x2121) || (s > 0x8080)) { + s = -1; + } + if (s >= 0) { + if (s < 0x80) { /* ASCII */ + if ((filter->status & 0xff00) != 0) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + } + filter->status = 0; + CK((*filter->output_function)(s, filter->data)); + } else if (s < 0x10000) { /* X 0208 */ + if ((filter->status & 0xff00) != 0x200) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x24, filter->data)); /* '$' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + } + filter->status = 0x200; + CK((*filter->output_function)((s >> 8) & 0x7f, filter->data)); + CK((*filter->output_function)(s & 0x7f, filter->data)); + } else { /* X 0201 latin */ + if ((filter->status & 0xff00) != 0x400) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x4a, filter->data)); /* 'J' */ + } + filter->status = 0x400; + CK((*filter->output_function)(s & 0x7f, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +int +mbfl_filt_conv_any_jis_flush(mbfl_convert_filter *filter) +{ + /* back to latin */ + if ((filter->status & 0xff00) != 0) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + } + filter->status &= 0xff; + + if (filter->flush_function != NULL) { + return (*filter->flush_function)(filter->data); + } + + return 0; +} + +static int mbfl_filt_ident_jis(int c, mbfl_identify_filter *filter) +{ +retry: + switch (filter->status & 0xf) { +/* case 0x00: ASCII */ +/* case 0x10: X 0201 latin */ +/* case 0x20: X 0201 kana */ +/* case 0x80: X 0208 */ +/* case 0x90: X 0212 */ + case 0: + if (c == 0x1b) { + filter->status += 2; + } else if (c == 0x0e) { /* "kana in" */ + filter->status = 0x20; + } else if (c == 0x0f) { /* "kana out" */ + filter->status = 0; + } else if ((filter->status == 0x80 || filter->status == 0x90) && c > 0x20 && c < 0x7f) { /* kanji first char */ + filter->status += 1; + } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ + ; + } else { + filter->flag = 1; /* bad */ + } + break; + +/* case 0x81: X 0208 second char */ +/* case 0x91: X 0212 second char */ + case 1: + filter->status &= ~0xf; + if (c == 0x1b) { + goto retry; + } else if (c < 0x21 || c > 0x7e) { /* bad */ + filter->flag = 1; + } + break; + + /* ESC */ + case 2: + if (c == 0x24) { /* '$' */ + filter->status++; + } else if (c == 0x28) { /* '(' */ + filter->status += 3; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC $ */ + case 3: + if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ + filter->status = 0x80; + } else if (c == 0x28) { /* '(' */ + filter->status++; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC $ ( */ + case 4: + if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ + filter->status = 0x80; + } else if (c == 0x44) { /* 'D' */ + filter->status = 0x90; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC ( */ + case 5: + if (c == 0x42 || c == 0x48) { /* 'B' or 'H' */ + filter->status = 0; + } else if (c == 0x4a) { /* 'J' */ + filter->status = 0x10; + } else if (c == 0x49) { /* 'I' */ + filter->status = 0x20; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +static int mbfl_filt_ident_2022jp(int c, mbfl_identify_filter *filter) +{ +retry: + switch (filter->status & 0xf) { +/* case 0x00: ASCII */ +/* case 0x10: X 0201 latin */ +/* case 0x80: X 0208 */ + case 0: + if (c == 0x1b) { + filter->status += 2; + } else if (filter->status == 0x80 && c > 0x20 && c < 0x7f) { /* kanji first char */ + filter->status += 1; + } else if (c >= 0 && c < 0x80) { /* latin, CTLs */ + ; + } else { + filter->flag = 1; /* bad */ + } + break; + +/* case 0x81: X 0208 second char */ + case 1: + if (c == 0x1b) { + filter->status++; + } else { + filter->status &= ~0xf; + if (c < 0x21 || c > 0x7e) { /* bad */ + filter->flag = 1; + } + } + break; + + /* ESC */ + case 2: + if (c == 0x24) { /* '$' */ + filter->status++; + } else if (c == 0x28) { /* '(' */ + filter->status += 3; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC $ */ + case 3: + if (c == 0x40 || c == 0x42) { /* '@' or 'B' */ + filter->status = 0x80; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + /* ESC ( */ + case 5: + if (c == 0x42) { /* 'B' */ + filter->status = 0; + } else if (c == 0x4a) { /* 'J' */ + filter->status = 0x10; + } else { + filter->flag = 1; /* bad */ + filter->status &= ~0xf; + goto retry; + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_jis.h b/ext/mbstring/libmbfl/filters/mbfilter_jis.h new file mode 100644 index 0000000..0375307 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_jis.h @@ -0,0 +1,49 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_ja.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_JIS_H +#define MBFL_MBFILTER_JIS_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_jis; +extern const mbfl_encoding mbfl_encoding_2022jp; +extern const struct mbfl_identify_vtbl vtbl_identify_2022jp; +extern const struct mbfl_identify_vtbl vtbl_identify_jis; +extern const struct mbfl_convert_vtbl vtbl_jis_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_jis; +extern const struct mbfl_convert_vtbl vtbl_2022jp_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_2022jp; + +int mbfl_filt_conv_jis_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_jis(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_2022jp(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_any_jis_flush(mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_JIS_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_koi8r.c b/ext/mbstring/libmbfl/filters/mbfilter_koi8r.c new file mode 100644 index 0000000..892bf15 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_koi8r.c @@ -0,0 +1,149 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Den V. Tsopa <tdv@edisoft.ru> + * + */ +/* + * The source code included in this files was separated from mbfilter_ru.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_koi8r.h" +#include "unicode_table_koi8r.h" + +static int mbfl_filt_ident_koi8r(int c, mbfl_identify_filter *filter); + +static const char *mbfl_encoding_koi8r_aliases[] = {"KOI8-R", "KOI8R", NULL}; + +const mbfl_encoding mbfl_encoding_koi8r = { + mbfl_no_encoding_koi8r, + "KOI8-R", + "KOI8-R", + (const char *(*)[])&mbfl_encoding_koi8r_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_koi8r = { + mbfl_no_encoding_koi8r, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_koi8r +}; + +const struct mbfl_convert_vtbl vtbl_wchar_koi8r = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_koi8r, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_koi8r, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_koi8r_wchar = { + mbfl_no_encoding_koi8r, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_koi8r_wchar, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * koi8r => wchar + */ +int +mbfl_filt_conv_koi8r_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < koi8r_ucs_table_min) { + s = c; + } else if (c >= koi8r_ucs_table_min && c < 0x100) { + s = koi8r_ucs_table[c - koi8r_ucs_table_min]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_KOI8R; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* + * wchar => koi8r + */ +int +mbfl_filt_conv_wchar_koi8r(int c, mbfl_convert_filter *filter) +{ + int s, n; + + if (c < 0x80) { + s = c; + } else { + s = -1; + n = koi8r_ucs_table_len-1; + while (n >= 0) { + if (c == koi8r_ucs_table[n]) { + s = koi8r_ucs_table_min + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_KOI8R) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +static int mbfl_filt_ident_koi8r(int c, mbfl_identify_filter *filter) +{ + if (c >= 0x80 && c < 0xff) + filter->flag = 0; + else + filter->flag = 1; /* not it */ + return c; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_koi8r.h b/ext/mbstring/libmbfl/filters/mbfilter_koi8r.h new file mode 100644 index 0000000..8298631 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_koi8r.h @@ -0,0 +1,50 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Den V. Tsopa <tdv@edisoft.ru> + * + */ +/* + * The source code included in this files was separated from mbfilter_ru.h + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_KOI8R_H +#define MBFL_MBFILTER_KOI8R_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_koi8r; +extern const struct mbfl_identify_vtbl vtbl_identify_koi8r; +extern const struct mbfl_convert_vtbl vtbl_wchar_koi8r; +extern const struct mbfl_convert_vtbl vtbl_koi8r_wchar; + +int mbfl_filt_conv_koi8r_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_koi8r(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_KOI8R_H */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_koi8u.c b/ext/mbstring/libmbfl/filters/mbfilter_koi8u.c new file mode 100644 index 0000000..9b8f450 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_koi8u.c @@ -0,0 +1,146 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Maksym Veremeyenko <verem@m1.tv> + * + * Based on mbfilter_koi8r.c code + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_koi8u.h" +#include "unicode_table_koi8u.h" + +static int mbfl_filt_ident_koi8u(int c, mbfl_identify_filter *filter); + +static const char *mbfl_encoding_koi8u_aliases[] = {"KOI8-U", "KOI8U", NULL}; + +const mbfl_encoding mbfl_encoding_koi8u = { + mbfl_no_encoding_koi8u, + "KOI8-U", + "KOI8-U", + (const char *(*)[])&mbfl_encoding_koi8u_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_koi8u = { + mbfl_no_encoding_koi8u, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_koi8u +}; + +const struct mbfl_convert_vtbl vtbl_wchar_koi8u = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_koi8u, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_koi8u, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_koi8u_wchar = { + mbfl_no_encoding_koi8u, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_koi8u_wchar, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * koi8u => wchar + */ +int +mbfl_filt_conv_koi8u_wchar(int c, mbfl_convert_filter *filter) +{ + int s; + + if (c >= 0 && c < koi8u_ucs_table_min) { + s = c; + } else if (c >= koi8u_ucs_table_min && c < 0x100) { + s = koi8u_ucs_table[c - koi8u_ucs_table_min]; + if (s <= 0) { + s = c; + s &= MBFL_WCSPLANE_MASK; + s |= MBFL_WCSPLANE_KOI8U; + } + } else { + s = c; + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + } + + CK((*filter->output_function)(s, filter->data)); + + return c; +} + +/* + * wchar => koi8u + */ +int +mbfl_filt_conv_wchar_koi8u(int c, mbfl_convert_filter *filter) +{ + int s, n; + + if (c < 0x80) { + s = c; + } else { + s = -1; + n = koi8u_ucs_table_len-1; + while (n >= 0) { + if (c == koi8u_ucs_table[n]) { + s = koi8u_ucs_table_min + n; + break; + } + n--; + } + if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_KOI8U) { + s = c & MBFL_WCSPLANE_MASK; + } + } + + if (s >= 0) { + CK((*filter->output_function)(s, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +static int mbfl_filt_ident_koi8u(int c, mbfl_identify_filter *filter) +{ + if (c >= 0x80 && c < 0xff) + filter->flag = 0; + else + filter->flag = 1; /* not it */ + return c; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_koi8u.h b/ext/mbstring/libmbfl/filters/mbfilter_koi8u.h new file mode 100644 index 0000000..693ade3 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_koi8u.h @@ -0,0 +1,47 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Maksym Veremeyenko <verem@m1.tv> + * + * Based on mbfilter_koi8r.h code + * + */ + +#ifndef MBFL_MBFILTER_KOI8U_H +#define MBFL_MBFILTER_KOI8U_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_koi8u; +extern const struct mbfl_identify_vtbl vtbl_identify_koi8u; +extern const struct mbfl_convert_vtbl vtbl_wchar_koi8u; +extern const struct mbfl_convert_vtbl vtbl_koi8u_wchar; + +int mbfl_filt_conv_koi8u_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_koi8u(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_KOI8U_H */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_qprint.c b/ext/mbstring/libmbfl/filters/mbfilter_qprint.c new file mode 100644 index 0000000..df9752b --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_qprint.c @@ -0,0 +1,244 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_qprint.h" +#include "unicode_prop.h" + +static const char *mbfl_encoding_qprint_aliases[] = {"qprint", NULL}; + +const mbfl_encoding mbfl_encoding_qprint = { + mbfl_no_encoding_qprint, + "Quoted-Printable", + "Quoted-Printable", + (const char *(*)[])&mbfl_encoding_qprint_aliases, + NULL, + MBFL_ENCTYPE_ENC_STRM | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_convert_vtbl vtbl_8bit_qprint = { + mbfl_no_encoding_8bit, + mbfl_no_encoding_qprint, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_qprintenc, + mbfl_filt_conv_qprintenc_flush }; + +const struct mbfl_convert_vtbl vtbl_qprint_8bit = { + mbfl_no_encoding_qprint, + mbfl_no_encoding_8bit, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_qprintdec, + mbfl_filt_conv_qprintdec_flush }; + + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * any => Quoted-Printable + */ + +int mbfl_filt_conv_qprintenc(int c, mbfl_convert_filter *filter) +{ + int s, n; + + switch (filter->status & 0xff) { + case 0: + filter->cache = c; + filter->status++; + break; + default: + s = filter->cache; + filter->cache = c; + n = (filter->status & 0xff00) >> 8; + + if (s == 0) { /* null */ + CK((*filter->output_function)(s, filter->data)); + filter->status &= ~0xff00; + break; + } + + if ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) == 0) { + if (s == 0x0a || (s == 0x0d && c != 0x0a)) { /* line feed */ + CK((*filter->output_function)(0x0d, filter->data)); /* CR */ + CK((*filter->output_function)(0x0a, filter->data)); /* LF */ + filter->status &= ~0xff00; + break; + } else if (s == 0x0d) { + break; + } + } + + if ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) == 0 && n >= 72) { /* soft line feed */ + CK((*filter->output_function)(0x3d, filter->data)); /* '=' */ + CK((*filter->output_function)(0x0d, filter->data)); /* CR */ + CK((*filter->output_function)(0x0a, filter->data)); /* LF */ + filter->status &= ~0xff00; + } + + if (s <= 0 || s >= 0x80 || s == 0x3d /* not ASCII or '=' */ + || ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) != 0 && + (mbfl_charprop_table[s] & MBFL_CHP_MMHQENC) != 0)) { + /* hex-octet */ + CK((*filter->output_function)(0x3d, filter->data)); /* '=' */ + n = (s >> 4) & 0xf; + if (n < 10) { + n += 48; /* '0' */ + } else { + n += 55; /* 'A' - 10 */ + } + CK((*filter->output_function)(n, filter->data)); + n = s & 0xf; + if (n < 10) { + n += 48; + } else { + n += 55; + } + CK((*filter->output_function)(n, filter->data)); + if ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) == 0) { + filter->status += 0x300; + } + } else { + CK((*filter->output_function)(s, filter->data)); + if ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) == 0) { + filter->status += 0x100; + } + } + break; + } + + return c; +} + +int mbfl_filt_conv_qprintenc_flush(mbfl_convert_filter *filter) +{ + /* flush filter cache */ + (*filter->filter_function)('\0', filter); + filter->status &= ~0xffff; + filter->cache = 0; + return 0; +} + +/* + * Quoted-Printable => any + */ +int mbfl_filt_conv_qprintdec(int c, mbfl_convert_filter *filter) +{ + int n, m; + + static int hex2code_map[] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + }; + + switch (filter->status) { + case 1: + if (hex2code_map[c & 0xff] >= 0) { + filter->cache = c; + filter->status = 2; + } else if (c == 0x0d) { /* soft line feed */ + filter->status = 3; + } else if (c == 0x0a) { /* soft line feed */ + filter->status = 0; + } else { + CK((*filter->output_function)(0x3d, filter->data)); /* '=' */ + CK((*filter->output_function)(c, filter->data)); + filter->status = 0; + } + break; + case 2: + m = hex2code_map[c & 0xff]; + if (m < 0) { + CK((*filter->output_function)(0x3d, filter->data)); /* '=' */ + CK((*filter->output_function)(filter->cache, filter->data)); + n = c; + } else { + n = hex2code_map[filter->cache] << 4 | m; + } + CK((*filter->output_function)(n, filter->data)); + filter->status = 0; + break; + case 3: + if (c != 0x0a) { /* LF */ + CK((*filter->output_function)(c, filter->data)); + } + filter->status = 0; + break; + default: + if (c == 0x3d) { /* '=' */ + filter->status = 1; + } else { + CK((*filter->output_function)(c, filter->data)); + } + break; + } + + return c; +} + +int mbfl_filt_conv_qprintdec_flush(mbfl_convert_filter *filter) +{ + int status, cache; + + status = filter->status; + cache = filter->cache; + filter->status = 0; + filter->cache = 0; + /* flush fragments */ + if (status == 1) { + CK((*filter->output_function)(0x3d, filter->data)); /* '=' */ + } else if (status == 2) { + CK((*filter->output_function)(0x3d, filter->data)); /* '=' */ + CK((*filter->output_function)(cache, filter->data)); + } + + return 0; +} + + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_qprint.h b/ext/mbstring/libmbfl/filters/mbfilter_qprint.h new file mode 100644 index 0000000..3a39fa7 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_qprint.h @@ -0,0 +1,44 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_QPRINT_H +#define MBFL_MBFILTER_QPRINT_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_qprint; +extern const struct mbfl_convert_vtbl vtbl_8bit_qprint; +extern const struct mbfl_convert_vtbl vtbl_qprint_8bit; + +int mbfl_filt_conv_qprintenc(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_qprintenc_flush(mbfl_convert_filter *filter); +int mbfl_filt_conv_qprintdec(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_qprintdec_flush(mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_ASCII_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis.c new file mode 100644 index 0000000..7c463cd --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis.c @@ -0,0 +1,298 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_ja.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_sjis.h" + +#define UNICODE_TABLE_CP932_DEF +#define UNICODE_TABLE_JIS_DEF + +#include "unicode_table_cp932_ext.h" +#include "unicode_table_jis.h" + +int mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter); + +const unsigned char mblen_table_sjis[] = { /* 0x80-0x9f,0xE0-0xFF */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +}; + +static const char *mbfl_encoding_sjis_aliases[] = {"x-sjis", "SHIFT-JIS", NULL}; + +const mbfl_encoding mbfl_encoding_sjis = { + mbfl_no_encoding_sjis, + "SJIS", + "Shift_JIS", + (const char *(*)[])&mbfl_encoding_sjis_aliases, + mblen_table_sjis, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_identify_vtbl vtbl_identify_sjis = { + mbfl_no_encoding_sjis, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_sjis +}; + +const struct mbfl_convert_vtbl vtbl_sjis_wchar = { + mbfl_no_encoding_sjis, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_sjis_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_sjis = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_sjis, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_sjis, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +#define SJIS_ENCODE(c1,c2,s1,s2) \ + do { \ + s1 = c1; \ + s1--; \ + s1 >>= 1; \ + if ((c1) < 0x5f) { \ + s1 += 0x71; \ + } else { \ + s1 += 0xb1; \ + } \ + s2 = c2; \ + if ((c1) & 1) { \ + if ((c2) < 0x60) { \ + s2--; \ + } \ + s2 += 0x20; \ + } else { \ + s2 += 0x7e; \ + } \ + } while (0) + +#define SJIS_DECODE(c1,c2,s1,s2) \ + do { \ + s1 = c1; \ + if (s1 < 0xa0) { \ + s1 -= 0x81; \ + } else { \ + s1 -= 0xc1; \ + } \ + s1 <<= 1; \ + s1 += 0x21; \ + s2 = c2; \ + if (s2 < 0x9f) { \ + if (s2 < 0x7f) { \ + s2++; \ + } \ + s2 -= 0x20; \ + } else { \ + s1++; \ + s2 -= 0x7e; \ + } \ + } while (0) + + +/* + * SJIS => wchar + */ +int +mbfl_filt_conv_sjis_wchar(int c, mbfl_convert_filter *filter) +{ + int c1, s1, s2, w; + + switch (filter->status) { + case 0: + if (c >= 0 && c < 0x80) { /* latin */ + CK((*filter->output_function)(c, filter->data)); + } else if (c > 0xa0 && c < 0xe0) { /* kana */ + CK((*filter->output_function)(0xfec0 + c, filter->data)); + } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */ + filter->status = 1; + filter->cache = c; + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 1: /* kanji second char */ + filter->status = 0; + c1 = filter->cache; + if (c >= 0x40 && c <= 0xfc && c != 0x7f) { + SJIS_DECODE(c1, c, s1, s2); + w = (s1 - 0x21)*94 + s2 - 0x21; + if (w >= 0 && w < jisx0208_ucs_table_size) { + w = jisx0208_ucs_table[w]; + } else { + w = 0; + } + if (w <= 0) { + if (s1 < 0x7f && s2 < 0x7f) { + w = (s1 << 8) | s2; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_JIS0208; + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + } + } + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => SJIS + */ +int +mbfl_filt_conv_wchar_sjis(int c, mbfl_convert_filter *filter) +{ + int c1, c2, s1, s2; + + s1 = 0; + if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { + s1 = ucs_a1_jis_table[c - ucs_a1_jis_table_min]; + } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) { + s1 = ucs_a2_jis_table[c - ucs_a2_jis_table_min]; + } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) { + s1 = ucs_i_jis_table[c - ucs_i_jis_table_min]; + } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) { + s1 = ucs_r_jis_table[c - ucs_r_jis_table_min]; + } + if (s1 <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_JIS0208) { + s1 = c & MBFL_WCSPLANE_MASK; + } else if (c == 0xa5) { /* YEN SIGN */ + s1 = 0x216f; /* FULLWIDTH YEN SIGN */ + } else if (c == 0x203e) { /* OVER LINE */ + s1 = 0x2131; /* FULLWIDTH MACRON */ + } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + s1 = 0x2140; + } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ + s1 = 0x2141; + } else if (c == 0x2225) { /* PARALLEL TO */ + s1 = 0x2142; + } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */ + s1 = 0x215d; + } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */ + s1 = 0x2171; + } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */ + s1 = 0x2172; + } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ + s1 = 0x224c; + } + if (c == 0) { + s1 = 0; + } else if (s1 <= 0) { + s1 = -1; + } + } else if (s1 >= 0x8080) { + s1 = -1; + } + if (s1 >= 0) { + if (s1 < 0x100) { /* latin or kana */ + CK((*filter->output_function)(s1, filter->data)); + } else { /* kanji */ + c1 = (s1 >> 8) & 0xff; + c2 = s1 & 0xff; + SJIS_ENCODE(c1, c2, s1, s2); + CK((*filter->output_function)(s1, filter->data)); + CK((*filter->output_function)(s2, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +int mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter) +{ + if (filter->status) { /* kanji second char */ + if (c < 0x40 || c > 0xfc || c == 0x7f) { /* bad */ + filter->flag = 1; + } + filter->status = 0; + } else if (c >= 0 && c < 0x80) { /* latin ok */ + ; + } else if (c > 0xa0 && c < 0xe0) { /* kana ok */ + ; + } else if (c > 0x80 && c < 0xf0 && c != 0xa0) { /* kanji first char */ + filter->status = 1; + } else { /* bad */ + filter->flag = 1; + } + + return c; +} + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis.h b/ext/mbstring/libmbfl/filters/mbfilter_sjis.h new file mode 100644 index 0000000..cb9146f --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis.h @@ -0,0 +1,47 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_ja.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_SJIS_H +#define MBFL_MBFILTER_SJIS_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_sjis; +extern const struct mbfl_identify_vtbl vtbl_identify_sjis; +extern const struct mbfl_convert_vtbl vtbl_sjis_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_sjis; + +int mbfl_filt_conv_sjis_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_sjis(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_SJIS_H */ + +/* + * charset=UTF-8 + */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c new file mode 100644 index 0000000..4e1838f --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c @@ -0,0 +1,725 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_sjis.c + * by rui hirokawa <hirokawa@php.net> on 15 aug 2011. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_sjis_2004.h" + +#include "unicode_table_jis2004.h" +#include "unicode_table_jis.h" + +extern const unsigned char mblen_table_sjis[]; + +static int mbfl_filt_ident_sjis2004(int c, mbfl_identify_filter *filter); + +extern int mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter); +extern int mbfl_bisec_srch(int w, const unsigned short *tbl, int n); +extern int mbfl_bisec_srch2(int w, const unsigned short tbl[], int n); + +static const char *mbfl_encoding_sjis2004_aliases[] = {"SJIS2004","Shift_JIS-2004", NULL}; + +const mbfl_encoding mbfl_encoding_sjis2004 = { + mbfl_no_encoding_sjis2004, + "SJIS-2004", + "Shift_JIS", + (const char *(*)[])&mbfl_encoding_sjis2004_aliases, + mblen_table_sjis, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_identify_vtbl vtbl_identify_sjis2004 = { + mbfl_no_encoding_sjis2004, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_sjis +}; + +const struct mbfl_convert_vtbl vtbl_sjis2004_wchar = { + mbfl_no_encoding_sjis2004, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_jis2004_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_sjis2004 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_sjis2004, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_jis2004, + mbfl_filt_conv_jis2004_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +#define SJIS_ENCODE(c1,c2,s1,s2) \ + do { \ + s1 = c1; \ + s1--; \ + s1 >>= 1; \ + if ((c1) < 0x5f) { \ + s1 += 0x71; \ + } else { \ + s1 += 0xb1; \ + } \ + s2 = c2; \ + if ((c1) & 1) { \ + if ((c2) < 0x60) { \ + s2--; \ + } \ + s2 += 0x20; \ + } else { \ + s2 += 0x7e; \ + } \ + } while (0) + +#define SJIS_DECODE(c1,c2,s1,s2) \ + do { \ + s1 = c1; \ + if (s1 < 0xa0) { \ + s1 -= 0x81; \ + } else { \ + s1 -= 0xc1; \ + } \ + s1 <<= 1; \ + s1 += 0x21; \ + s2 = c2; \ + if (s2 < 0x9f) { \ + if (s2 < 0x7f) { \ + s2++; \ + } \ + s2 -= 0x20; \ + } else { \ + s1++; \ + s2 -= 0x7e; \ + } \ + } while (0) + + +/* + * JIS-2004 => wchar + */ +int +mbfl_filt_conv_jis2004_wchar(int c, mbfl_convert_filter *filter) +{ + int k; + int c1, c2, s, s1, s2, w = 0, w1; + +retry: + switch (filter->status & 0xf) { + case 0: + if (c >= 0 && c < 0x80) { /* latin */ + if (filter->from->no_encoding == mbfl_no_encoding_eucjp2004) { + CK((*filter->output_function)(c, filter->data)); + } else if (filter->from->no_encoding == mbfl_no_encoding_sjis2004) { + if (c == 0x5c) { + CK((*filter->output_function)(0x00a5, filter->data)); + } else if (c == 0x7e) { + CK((*filter->output_function)(0x203e, filter->data)); + } else { + CK((*filter->output_function)(c, filter->data)); + } + } else { /* ISO-2022-JP-2004 */ + if (c == 0x1b) { + filter->status += 6; + } else if ((filter->status == 0x80 || filter->status == 0x90 || filter->status == 0xa0) + && c > 0x20 && c < 0x7f) { /* kanji first char */ + filter->cache = c; + if (filter->status == 0x90) { + filter->status += 1; /* JIS X 0213 plane 1 */ + } else if (filter->status == 0xa0) { + filter->status += 4; /* JIS X 0213 plane 2 */ + } else { + filter->status += 5; /* JIS X 0208 */ + } + } else { + CK((*filter->output_function)(c, filter->data)); + } + } + } else { + if (filter->from->no_encoding == mbfl_no_encoding_eucjp2004) { + if (c > 0xa0 && c < 0xff) { /* X 0213 plane 1 first char */ + filter->status = 1; + filter->cache = c; + } else if (c == 0x8e) { /* kana first char */ + filter->status = 2; + } else if (c == 0x8f) { /* X 0213 plane 2 first char */ + filter->status = 3; + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + } else if (filter->from->no_encoding == mbfl_no_encoding_sjis2004) { + if (c > 0xa0 && c < 0xe0) { /* kana */ + CK((*filter->output_function)(0xfec0 + c, filter->data)); + } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */ + filter->status = 1; + filter->cache = c; + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + } + break; + + case 1: /* kanji second char */ + filter->status &= ~0xf; + c1 = filter->cache; + + if (filter->from->no_encoding == mbfl_no_encoding_eucjp2004) { + if (c > 0xa0 && c < 0xff) { + s1 = c1 - 0x80; + s2 = c - 0x80; + } + } else if (filter->from->no_encoding == mbfl_no_encoding_sjis2004) { + if (c >= 0x40 && c <= 0xfc && c != 0x7f) { + SJIS_DECODE(c1, c, s1, s2); + } + } else { + s1 = c1; + s2 = c; + } + w1 = (s1 << 8) | s2; + + if (w1 >= 0x2121) { + /* conversion for combining characters */ + if ((w1 >= 0x2477 && w1 <= 0x2479) || (w1 >= 0x2479 && w1 <= 0x247B) || + (w1 >= 0x2577 && w1 <= 0x257E) || w1 == 0x2678 || w1 == 0x2B44 || + (w1 >= 0x2B48 && w1 <= 0x2B4F) || (w1 >= 0x2B65 && w1 <= 0x2B66)) { + k = mbfl_bisec_srch2(w1, jisx0213_u2_key, jisx0213_u2_tbl_len); + if (k >= 0) { + w = jisx0213_u2_tbl[2*k]; + CK((*filter->output_function)(w, filter->data)); + w = jisx0213_u2_tbl[2*k+1]; + } + } + + /* conversion for BMP */ + if (w <= 0) { + w1 = (s1 - 0x21)*94 + s2 - 0x21; + if (w1 >= 0 && w1 < jisx0213_ucs_table_size) { + w = jisx0213_ucs_table[w1]; + } + } + + /* conversion for CJK Unified Ideographs ext.B (U+2XXXX) */ + if (w <= 0) { + w1 = (s1 << 8) | s2; + k = mbfl_bisec_srch2(w1, jisx0213_jis_u5_key, jisx0213_u5_tbl_len); + if (k >= 0) { + w = jisx0213_jis_u5_tbl[k] + 0x20000; + } + } + + if (w <= 0) { + if (s1 < 0x7f && s2 < 0x7f) { + w = (s1 << 8) | s2; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_JIS0213; + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + } + } + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 2: /* got 0x8e : EUC-JP-2004 kana */ + filter->status = 0; + if (c > 0xa0 && c < 0xe0) { + w = 0xfec0 + c; + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = 0x8e00 | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 3: /* X 0213 plane 2 first char : EUC-JP-2004 (0x8f), ISO-2022-JP-2004 */ + if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + filter->status = 0; + } else { + if (filter->from->no_encoding == mbfl_no_encoding_eucjp2004) { + s1 = c - 0x80; + } else { + s1 = c; + } + if (s1 > 0x20 && s1 < 0x80) { + filter->cache = s1; + filter->status++; + } else { + if (filter->to->no_encoding == mbfl_no_encoding_eucjp2004) { + w = c | 0x8f00; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + } else { + w = c & 0x7f; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_JIS0213; + } + CK((*filter->output_function)(w, filter->data)); + } + } + break; + + case 4: /* X 0213 plane 2 second char : EUC-JP-2004, ISO-2022-JP-2004 */ + + filter->status &= ~0xf; + c1 = filter->cache; + if (filter->from->no_encoding == mbfl_no_encoding_eucjp2004) { + c2 = c - 0x80; + } else { + c2 = c; + } + s1 = c1 - 0x21; + s2 = c2 - 0x21; + + if (((s1 >= 0 && s1 <= 4 && s1 != 1) || s1 == 7 || (s1 >= 11 && s1 <= 14) || + (s1 >= 77 && s1 < 94)) && s2 >= 0 && s2 < 94) { + /* calc offset from ku */ + for (k = 0; k < jisx0213_p2_ofst_len; k++) { + if (s1 == jisx0213_p2_ofst[k]-1) { + break; + } + } + k = k - (jisx0213_p2_ofst[k]-1); + + /* check for japanese chars in BMP */ + s = (s1 + 94 + k)*94 + s2; + if (s >= 0 && s < jisx0213_ucs_table_size) { + w = jisx0213_ucs_table[s]; + } else { + w = 0; + } + + /* check for japanese chars in CJK Unified Ideographs ext.B (U+2XXXX) */ + if (w <= 0) { + w1 = ((c1 + k + 94) << 8) | c2; + k = mbfl_bisec_srch2(w1, jisx0213_jis_u5_key, jisx0213_u5_tbl_len); + if (k >= 0) { + w = jisx0213_jis_u5_tbl[k] + 0x20000; + } + } + + if (w <= 0) { + w = ((c1 & 0x7f) << 8) | (c2 & 0x7f); + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_JIS0213; + } + + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + if (filter->to->no_encoding == mbfl_no_encoding_eucjp2004) { + w = (c1 << 8) | c | 0x8f0000; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + } else { + w = ((c1 & 0x7f) << 8) | (c2 & 0x7f); + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_JIS0213; + } + CK((*filter->output_function)(w, filter->data)); + } + + break; + + case 5: /* X 0208 : ISO-2022-JP-2004 */ + filter->status &= ~0xf; + c1 = filter->cache; + if (c > 0x20 && c < 0x7f) { + s = (c1 - 0x21)*94 + c - 0x21; + if (s >= 0 && s < jisx0208_ucs_table_size) { + w = jisx0208_ucs_table[s]; + } + } + if (w <= 0) { + w = (c1 << 8) | c; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_JIS0208; + } + CK((*filter->output_function)(w, filter->data)); + break; + + /* ESC : ISO-2022-JP-2004 */ +/* case 0x06: */ +/* case 0x16: */ +/* case 0x26: */ +/* case 0x86: */ +/* case 0x96: */ +/* case 0xa6: */ + case 6: + if (c == 0x24) { /* '$' */ + filter->status++; + } else if (c == 0x28) { /* '(' */ + filter->status += 3; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + goto retry; + } + break; + + /* ESC $ : ISO-2022-JP-2004 */ +/* case 0x07: */ +/* case 0x17: */ +/* case 0x27: */ +/* case 0x87: */ +/* case 0x97: */ +/* case 0xa7: */ + case 7: + if (c == 0x42) { /* 'B' -> JIS X 0208-1983 */ + filter->status = 0x80; + } else if (c == 0x28) { /* '(' */ + filter->status++; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x24, filter->data)); + goto retry; + } + break; + + break; + + /* ESC $ ( : ISO-2022-JP-2004 */ +/* case 0x08: */ +/* case 0x18: */ +/* case 0x28: */ +/* case 0x88: */ +/* case 0x98: */ +/* case 0xa8: */ + case 8: + if (c == 0x51) { /* JIS X 0213 plane 1 */ + filter->status = 0x90; + } else if (c == 0x50) { /* JIS X 0213 plane 2 */ + filter->status = 0xa0; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x24, filter->data)); + CK((*filter->output_function)(0x28, filter->data)); + goto retry; + } + break; + + /* ESC ( : ISO-2022-JP-2004 */ +/* case 0x09: */ +/* case 0x19: */ +/* case 0x29: */ +/* case 0x89: */ +/* case 0x99: */ + case 9: + if (c == 0x42) { /* 'B' : ASCII */ + filter->status = 0; + } else { + filter->status &= ~0xf; + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x28, filter->data)); + goto retry; + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +int +mbfl_filt_conv_wchar_jis2004(int c, mbfl_convert_filter *filter) { + int k; + int c1, c2, s1 = 0, s2; + +retry: + + /* check for 1st char of combining characters */ + if ((filter->status & 0xf)== 0 && ( + c == 0x00E6 || + (c >= 0x0254 && c <= 0x02E9) || + (c >= 0x304B && c <= 0x3053) || + (c >= 0x30AB && c <= 0x30C8) || + c == 0x31F7)) { + for (k=0;k<jisx0213_u2_tbl_len;k++) { + if (c == jisx0213_u2_tbl[2*k]) { + filter->status++; + filter->cache = k; + return c; + } + } + } + + /* check for 2nd char of combining characters */ + if ((filter->status & 0xf) == 1 && + filter->cache >= 0 && filter->cache <= jisx0213_u2_tbl_len) { + k = filter->cache; + filter->status &= ~0xf; + filter->cache = 0; + + c1 = jisx0213_u2_tbl[2*k]; + if ((c1 == 0x0254 || c1 == 0x028C || c1 == 0x0259 || c1 == 0x025A) + && c == 0x0301) { + k++; + } + if (c == jisx0213_u2_tbl[2*k+1]) { + s1 = jisx0213_u2_key[k]; + } else { /* fallback */ + s1 = jisx0213_u2_fb_tbl[k]; + + if (filter->to->no_encoding == mbfl_no_encoding_sjis2004) { + c1 = (s1 >> 8) & 0xff; + c2 = s1 & 0xff; + SJIS_ENCODE(c1, c2, s1, s2); + } else if (filter->to->no_encoding == mbfl_no_encoding_eucjp2004) { + s2 = (s1 & 0xff) + 0x80; + s1 = ((s1 >> 8) & 0xff) + 0x80; + } else { + if (filter->status != 0x200) { + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x24, filter->data)); + CK((*filter->output_function)(0x28, filter->data)); + CK((*filter->output_function)(0x51, filter->data)); + } + filter->status = 0x200; + + s2 = s1 & 0x7f; + s1 = (s1 >> 8) & 0x7f; + } + + CK((*filter->output_function)(s1, filter->data)); + CK((*filter->output_function)(s2, filter->data)); + goto retry; + } + } + + /* check for major japanese chars: U+4E00 - U+9FFF */ + if (s1 <= 0) { + for (k=0; k < uni2jis_tbl_len ;k++) { + if (c >= uni2jis_tbl_range[k][0] && c <= uni2jis_tbl_range[k][1]) { + s1 = uni2jis_tbl[k][c-uni2jis_tbl_range[k][0]]; + break; + } + } + } + + /* check for japanese chars in compressed mapping area: U+1E00 - U+4DBF */ + if (s1 <= 0 && c >= ucs_c1_jisx0213_min && c <= ucs_c1_jisx0213_max) { + k = mbfl_bisec_srch(c, ucs_c1_jisx0213_tbl, ucs_c1_jisx0213_tbl_len); + if (k >= 0) { + s1 = ucs_c1_jisx0213_ofst[k] + c - ucs_c1_jisx0213_tbl[2*k]; + } + } + + /* check for japanese chars in CJK Unified Ideographs ext.B (U+2XXXX) */ + if (s1 <= 0 && c >= jisx0213_u5_tbl_min && c <= jisx0213_u5_tbl_max) { + k = mbfl_bisec_srch2(c - 0x20000, jisx0213_u5_jis_key, jisx0213_u5_tbl_len); + if (k >= 0) { + s1 = jisx0213_u5_jis_tbl[k]; + } + } + + if (s1 <= 0) { + /* CJK Compatibility Forms: U+FE30 - U+FE4F */ + if (c == 0xfe45) { + s1 = 0x233e; + } else if (c == 0xfe46) { + s1 = 0x233d; + } else if (c >= 0xf91d && c <= 0xf9dc) { + /* CJK Compatibility Ideographs: U+F900 - U+F92A */ + k = mbfl_bisec_srch2(c, ucs_r2b_jisx0213_cmap_key, ucs_r2b_jisx0213_cmap_len); + if (k >= 0) { + s1 = ucs_r2b_jisx0213_cmap_val[k]; + } + } + } + + if (s1 <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_JIS0213) { + s1 = c & MBFL_WCSPLANE_MASK; + } + if (c == 0) { + s1 = 0; + } else if (s1 <= 0) { + s1 = -1; + } + } else if (s1 >= 0x9980) { + s1 = -1; + } + + if (s1 >= 0) { + if (s1 < 0x80) { /* ASCII */ + if (filter->to->no_encoding == mbfl_no_encoding_2022jp_2004 && + (filter->status & 0xff00) != 0) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + } + filter->status = 0; + CK((*filter->output_function)(s1, filter->data)); + } else if (s1 < 0x100) { /* latin or kana */ + if (filter->to->no_encoding == mbfl_no_encoding_eucjp2004) { + CK((*filter->output_function)(0x8e, filter->data)); + } + CK((*filter->output_function)(s1, filter->data)); + } else if (s1 < 0x7f00) { /* X 0213 plane 1 */ + if (filter->to->no_encoding == mbfl_no_encoding_sjis2004) { + c1 = (s1 >> 8) & 0xff; + c2 = s1 & 0xff; + SJIS_ENCODE(c1, c2, s1, s2); + } else if (filter->to->no_encoding == mbfl_no_encoding_eucjp2004) { + s2 = (s1 & 0xff) + 0x80; + s1 = ((s1 >> 8) & 0xff) + 0x80; + } else { + if ((filter->status & 0xff00) != 0x200) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x24, filter->data)); /* '$' */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x51, filter->data)); /* 'Q' */ + } + filter->status = 0x200; + s2 = s1 & 0xff; + s1 = (s1 >> 8) & 0xff; + } + CK((*filter->output_function)(s1, filter->data)); + CK((*filter->output_function)(s2, filter->data)); + } else { /* X 0213 plane 2 */ + if (filter->to->no_encoding == mbfl_no_encoding_sjis2004) { + c1 = (s1 >> 8) & 0xff; + c2 = s1 & 0xff; + SJIS_ENCODE(c1, c2, s1, s2); + } else { + s2 = s1 & 0xff; + k = ((s1 >> 8) & 0xff) - 0x7f; + if (k >= 0 && k < jisx0213_p2_ofst_len) { + s1 = jisx0213_p2_ofst[k] - 1 + 0x21; + } + if (filter->to->no_encoding == mbfl_no_encoding_eucjp2004) { + s2 |= 0x80; + s1 |= 0x80; + CK((*filter->output_function)(0x8f, filter->data)); + } else { + if ((filter->status & 0xff00) != 0x200) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x24, filter->data)); /* '$' */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x50, filter->data)); /* 'P' */ + } + filter->status = 0x200; + } + } + + CK((*filter->output_function)(s1, filter->data)); + CK((*filter->output_function)(s2, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } +} + +int +mbfl_filt_conv_jis2004_flush(mbfl_convert_filter *filter) +{ + int k, c1, c2, s1, s2; + + k = filter->cache; + filter->cache = 0; + + if (filter->status == 1 && k >= 0 && k <= jisx0213_u2_tbl_len) { + s1 = jisx0213_u2_fb_tbl[k]; + + if (filter->to->no_encoding == mbfl_no_encoding_sjis2004) { + c1 = (s1 >> 8) & 0xff; + c2 = s1 & 0xff; + SJIS_ENCODE(c1, c2, s1, s2); + } else if (filter->to->no_encoding == mbfl_no_encoding_eucjp2004) { + s2 = (s1 & 0xff) | 0x80; + s1 = ((s1 >> 8) & 0xff) | 0x80; + } else { + s2 = s1 & 0x7f; + s1 = (s1 >> 8) & 0x7f; + if ((filter->status & 0xff00) != 0x200) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x24, filter->data)); /* '$' */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x51, filter->data)); /* 'Q' */ + } + filter->status = 0x200; + } + + CK((*filter->output_function)(s1, filter->data)); + CK((*filter->output_function)(s2, filter->data)); + } + + /* back to latin */ + if ((filter->status & 0xff00) != 0) { + CK((*filter->output_function)(0x1b, filter->data)); /* ESC */ + CK((*filter->output_function)(0x28, filter->data)); /* '(' */ + CK((*filter->output_function)(0x42, filter->data)); /* 'B' */ + } + + filter->status = 0; + + if (filter->flush_function != NULL) { + return (*filter->flush_function)(filter->data); + } + + return 0; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.h b/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.h new file mode 100644 index 0000000..cf91f7a --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.h @@ -0,0 +1,49 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_sjis.c + * by rui hirokawa <hirokawa@php.net> on 15 aug 2011. + * + */ + +#ifndef MBFL_MBFILTER_SJIS_2004_H +#define MBFL_MBFILTER_SJIS_2004_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_sjis2004; +extern const struct mbfl_identify_vtbl vtbl_identify_sjis2004; +extern const struct mbfl_convert_vtbl vtbl_sjis2004_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_sjis2004; + +int mbfl_filt_conv_jis2004_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_jis2004(int c, mbfl_convert_filter *filter); + +int mbfl_filt_conv_jis2004_flush(mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_SJIS_2004_H */ + +/* + * charset=UTF-8 + */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c new file mode 100644 index 0000000..2f84edf --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c @@ -0,0 +1,700 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * the source code included in this files was separated from mbfilter_sjis_open.c + * by Rui Hirokawa <hirokawa@php.net> on 25 July 2011. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_sjis_mac.h" + +#include "unicode_table_cp932_ext.h" +#include "unicode_table_jis.h" + +#include "sjis_mac2uni.h" + +extern int mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter); +extern const unsigned char mblen_table_sjis[]; + +static int mbfl_filt_conv_sjis_mac_flush(mbfl_convert_filter *filter); + +static const char *mbfl_encoding_sjis_mac_aliases[] = {"MacJapanese", "x-Mac-Japanese", NULL}; + +const mbfl_encoding mbfl_encoding_sjis_mac = { + mbfl_no_encoding_sjis_mac, + "SJIS-mac", + "Shift_JIS", + (const char *(*)[])&mbfl_encoding_sjis_mac_aliases, + mblen_table_sjis, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_identify_vtbl vtbl_identify_sjis_mac = { + mbfl_no_encoding_sjis_mac, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_sjis +}; + +const struct mbfl_convert_vtbl vtbl_sjis_mac_wchar = { + mbfl_no_encoding_sjis_mac, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_sjis_mac_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_sjis_mac = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_sjis_mac, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_sjis_mac, + mbfl_filt_conv_sjis_mac_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +#define SJIS_ENCODE(c1,c2,s1,s2) \ + do { \ + s1 = c1; \ + s1--; \ + s1 >>= 1; \ + if ((c1) < 0x5f) { \ + s1 += 0x71; \ + } else { \ + s1 += 0xb1; \ + } \ + s2 = c2; \ + if ((c1) & 1) { \ + if ((c2) < 0x60) { \ + s2--; \ + } \ + s2 += 0x20; \ + } else { \ + s2 += 0x7e; \ + } \ + } while (0) + +#define SJIS_DECODE(c1,c2,s1,s2) \ + do { \ + s1 = c1; \ + if (s1 < 0xa0) { \ + s1 -= 0x81; \ + } else { \ + s1 -= 0xc1; \ + } \ + s1 <<= 1; \ + s1 += 0x21; \ + s2 = c2; \ + if (s2 < 0x9f) { \ + if (s2 < 0x7f) { \ + s2++; \ + } \ + s2 -= 0x20; \ + } else { \ + s1++; \ + s2 -= 0x7e; \ + } \ + } while (0) + +/* + * SJIS-mac => wchar + */ +int +mbfl_filt_conv_sjis_mac_wchar(int c, mbfl_convert_filter *filter) +{ + int i, j, n; + int c1, s, s1, s2, w; + + switch (filter->status) { + case 0: + if (c >= 0 && c < 0x80 && c != 0x5c) { /* latin */ + CK((*filter->output_function)(c, filter->data)); + } else if (c > 0xa0 && c < 0xe0) { /* kana */ + CK((*filter->output_function)(0xfec0 + c, filter->data)); + } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */ + filter->status = 1; + filter->cache = c; + } else if (c == 0x5c) { + CK((*filter->output_function)(0x00a5, filter->data)); + } else if (c == 0x80) { + CK((*filter->output_function)(0x005c, filter->data)); + } else if (c == 0xa0) { + CK((*filter->output_function)(0x00a0, filter->data)); + } else if (c == 0xfd) { + CK((*filter->output_function)(0x00a9, filter->data)); + } else if (c == 0xfe) { + CK((*filter->output_function)(0x2122, filter->data)); + } else if (c == 0xff) { + CK((*filter->output_function)(0x2026, filter->data)); + CK((*filter->output_function)(0xf87f, filter->data)); + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 1: /* kanji second char */ + filter->status = 0; + c1 = filter->cache; + if (c >= 0x40 && c <= 0xfc && c != 0x7f) { + w = 0; + SJIS_DECODE(c1, c, s1, s2); + s = (s1 - 0x21)*94 + s2 - 0x21; + if (s <= 0x89) { + if (s == 0x1c) { + w = 0x2014; /* EM DASH */ + } else if (s == 0x1f) { + w = 0xff3c; /* FULLWIDTH REVERSE SOLIDUS */ + } else if (s == 0x20) { + w = 0x301c; /* FULLWIDTH TILDE */ + } else if (s == 0x21) { + w = 0x2016; /* PARALLEL TO */ + } else if (s == 0x3c) { + w = 0x2212; /* FULLWIDTH HYPHEN-MINUS */ + } else if (s == 0x50) { + w = 0x00a2; /* FULLWIDTH CENT SIGN */ + } else if (s == 0x51) { + w = 0x00a3; /* FULLWIDTH POUND SIGN */ + } else if (s == 0x89) { + w = 0x00ac; /* FULLWIDTH NOT SIGN */ + } + } + + /* apple gaiji area 0x8540 - 0x886d */ + if (w == 0) { + for (i=0; i<7; i++) { + if (s >= code_tbl[i][0] && s <= code_tbl[i][1]) { + w = s - code_tbl[i][0] + code_tbl[i][2]; + break; + } + } + } + + if (w == 0) { + + for (i=0; i<code_tbl_m_len; i++) { + if (s == code_tbl_m[i][0]) { + if (code_tbl_m[i][1] == 0xf860) { + n = 4; + } else if (code_tbl_m[i][1] == 0xf861) { + n = 5; + } else { + n = 6; + } + for (j=1; j<n-1; j++) { + CK((*filter->output_function)(code_tbl_m[i][j], filter->data)); + } + w = code_tbl_m[i][n-1]; + break; + } + } + } + + if (w == 0) { + for (i=0; i<8; i++) { + if (s >= code_ofst_tbl[i][0] && s <= code_ofst_tbl[i][1]) { + w = code_map[i][s - code_ofst_tbl[i][0]]; + s2 = 0; + if (s >= 0x043e && s <= 0x0441) { + s2 = 0xf87a; + } else if (s == 0x03b1 || s == 0x03b7) { + s2 = 0xf87f; + } else if (s == 0x04b8 || s == 0x04b9 || s == 0x04c4) { + s2 = 0x20dd; + } else if (s == 0x1ed9 || s == 0x1eda || s == 0x1ee8 || s == 0x1ef3 || + (s >= 0x1ef5 && s <= 0x1efb) || s == 0x1f05 || s == 0x1f06 || + s == 0x1f18 || (s >= 0x1ff2 && s <= 0x20a5)) { + s2 = 0xf87e; + } + if (s2 > 0) { + CK((*filter->output_function)(w, filter->data)); + w = s2; + } + break; + } + } + } + + if (w == 0 && s >= 0 && s < jisx0208_ucs_table_size) { /* X 0208 */ + w = jisx0208_ucs_table[s]; + } + + if (w <= 0) { + w = (s1 << 8) | s2; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_WINCP932; + } + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => SJIS-mac + */ +int +mbfl_filt_conv_wchar_sjis_mac(int c, mbfl_convert_filter *filter) +{ + int i; + int c1, c2, s1, s2, mode; + + s1 = 0; + s2 = 0; + + // a1: U+0000 -> U+046F + // a2: U+2000 -> U+30FF + // i: U+4E00 -> U+9FFF + // r: U+FF00 -> U+FFFF + + switch (filter->status) { + + case 1: + c1 = filter->cache; + filter->cache = 0; + filter->status = 0; + + s1 = 0; + s2 = 0; + + if (c == 0xf87a) { + for (i=0;i<4;i++) { + if (c1 == s_form_tbl[i+34+3+3]) { + s1 = s_form_sjis_tbl[i+34+3+3]; + break; + } + } + if (s1 <= 0) { + s2 = c1; + } + } else if (c == 0x20dd) { + for (i=0;i<3;i++) { + if (c1 == s_form_tbl[i+34+3]) { + s1 = s_form_sjis_tbl[i+34+3]; + break; + } + } + if (s1 <= 0) { + s2 = c1; + } + } else if (c == 0xf87f) { + for (i=0;i<3;i++) { + if (c1 == s_form_tbl[i+34]) { + s1 = s_form_sjis_tbl[i+34]; + break; + } + } + if (s1 <= 0) { + s2 = c1; s1 = -1; + } + } else if (c == 0xf87e) { + for (i=0;i<34;i++) { + if (c1 == s_form_tbl[i]) { + s1 = s_form_sjis_tbl[i]; + break; + } + } + if (s1 <= 0) { + s2 = c1; s1 = -1; + } + } else { + s2 = c1; + s1 = c; + } + + if (s2 > 0) { + for (i=0;i<s_form_tbl_len;i++) { + if (c1 == s_form_tbl[i]) { + s1 = s_form_sjis_fallback_tbl[i]; + break; + } + } + } + + if (s1 >= 0) { + if (s1 < 0x100) { + CK((*filter->output_function)(s1, filter->data)); + } else { + CK((*filter->output_function)((s1 >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(s1 & 0xff, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + if (s2 <= 0 || s1 == -1) { + break; + } + + case 0: + + if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { + s1 = ucs_a1_jis_table[c - ucs_a1_jis_table_min]; + if (c == 0x5c) { + s1 = 0x80; + } else if (c == 0xa9) { + s1 = 0xfd; + } + } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) { + s1 = ucs_a2_jis_table[c - ucs_a2_jis_table_min]; + if (c == 0x2122) { + s1 = 0xfe; + } else if (c == 0x2014) { + s1 = 0x213d; + } else if (c == 0x2116) { + s1 = 0x2c1d; + } + } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) { + s1 = ucs_i_jis_table[c - ucs_i_jis_table_min]; + } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) { + s1 = ucs_r_jis_table[c - ucs_r_jis_table_min]; + } + + if (c >= 0x2000) { + for (i=0;i<s_form_tbl_len;i++) { + if (c == s_form_tbl[i]) { + filter->status = 1; + filter->cache = c; + return c; + } + } + + if (c == 0xf860 || c == 0xf861 || c == 0xf862) { + filter->status = 2; + filter->cache = c; + return c; + } + } + + if (s1 <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_WINCP932) { + s1 = c & MBFL_WCSPLANE_MASK; + s2 = 1; + } else if (c1 == MBFL_WCSPLANE_JIS0208) { + s1 = c & MBFL_WCSPLANE_MASK; + } else if (c1 == MBFL_WCSPLANE_JIS0212) { + s1 = c & MBFL_WCSPLANE_MASK; + s1 |= 0x8080; + } else if (c == 0xa0) { + s1 = 0x00a0; + } else if (c == 0xa5) { /* YEN SIGN */ + s1 = 0x216f; /* FULLWIDTH YEN SIGN */ + } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + s1 = 0x2140; + } + } + + if (s1 <= 0) { + for (i=0; i<wchar2sjis_mac_r_tbl_len; i++) { + if (c >= wchar2sjis_mac_r_tbl[i][0] && c <= wchar2sjis_mac_r_tbl[i][1]) { + s1 = c - wchar2sjis_mac_r_tbl[i][0] + wchar2sjis_mac_r_tbl[i][2]; + break; + } + } + + if (s1 <= 0) { + for (i=0; i<wchar2sjis_mac_r_map_len; i++) { + if (c >= wchar2sjis_mac_r_map[i][0] && c <= wchar2sjis_mac_r_map[i][1]) { + s1 = wchar2sjis_mac_code_map[i][c-wchar2sjis_mac_r_map[i][0]]; + break; + } + } + } + + if (s1 <= 0) { + for (i=0; i<wchar2sjis_mac_wchar_tbl_len ; i++) { + if ( c == wchar2sjis_mac_wchar_tbl[i][0]) { + s1 = wchar2sjis_mac_wchar_tbl[i][1] & 0xffff; + break; + } + } + } + + if (s1 > 0) { + c1 = s1/94+0x21; + c2 = s1-94*(c1-0x21)+0x21; + s1 = (c1 << 8) | c2; + s2 = 1; + } + } + + if ((s1 <= 0) || (s1 >= 0x8080 && s2 == 0)) { /* not found or X 0212 */ + s1 = -1; + c1 = 0; + + if (c == 0) { + s1 = 0; + } else if (s1 <= 0) { + s1 = -1; + } + } + + if (s1 >= 0) { + if (s1 < 0x100) { /* latin or kana */ + CK((*filter->output_function)(s1, filter->data)); + } else { /* kanji */ + c1 = (s1 >> 8) & 0xff; + c2 = s1 & 0xff; + SJIS_ENCODE(c1, c2, s1, s2); + CK((*filter->output_function)(s1, filter->data)); + CK((*filter->output_function)(s2, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + break; + + + case 2: + c1 = filter->cache; + filter->cache = 0; + filter->status = 0; + if (c1 == 0xf860) { + for (i=0; i<5; i++) { + if (c == code_tbl_m[i][2]) { + filter->cache = c | 0x10000; + filter->status = 3; + break; + } + } + } else if (c1 == 0xf861) { + for (i=0; i<3; i++) { + if (c == code_tbl_m[i+5][2]) { + filter->cache = c | 0x20000; + filter->status = 3; + break; + } + } + } else if (c1 == 0xf862) { + for (i=0; i<4; i++) { + if (c == code_tbl_m[i+5+3][2]) { + filter->cache = c | 0x40000; + filter->status = 3; + break; + } + } + } + + if (filter->status == 0 && filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c1, filter)); + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + + break; + + case 3: + s1 = 0; + c1 = filter->cache & 0xffff; + mode = (filter->cache & 0xf0000) >> 16; + + filter->cache = 0; + filter->status = 0; + + if (mode == 0x1) { + for (i=0; i<5; i++) { + if (c1 == code_tbl_m[i][2] && c == code_tbl_m[i][3]) { + s1 = code_tbl_m[i][0]; + break; + } + } + + if (s1 > 0) { + c1 = s1/94+0x21; + c2 = s1-94*(c1-0x21)+0x21; + SJIS_ENCODE(c1, c2, s1, s2); + CK((*filter->output_function)(s1, filter->data)); + CK((*filter->output_function)(s2, filter->data)); + } + + if (s1 <= 0 && filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(0xf860, filter)); + CK(mbfl_filt_conv_illegal_output(c1, filter)); + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + + } else if (mode == 0x2) { + for (i=0; i<3; i++) { + if (c1 == code_tbl_m[i+5][2] && c == code_tbl_m[i+5][3]) { + filter->cache = c | 0x20000; + filter->status = 4; + break; + } + } + } else if (mode == 0x4) { + for (i=0; i<4; i++) { + if (c1 == code_tbl_m[i+8][2] && c == code_tbl_m[i+8][3]) { + filter->cache = c | 0x40000; + filter->status = 4; + break; + } + } + } + break; + + case 4: + s1 = 0; + c1 = filter->cache & 0xffff; + mode = (filter->cache & 0xf0000) >> 16; + + filter->cache = 0; + filter->status = 0; + + if (mode == 0x2) { + for (i=0; i<3; i++) { + if (c1 == code_tbl_m[i+5][3] && c == code_tbl_m[i+5][4]) { + s1 = code_tbl_m[i+5][0]; + break; + } + } + + if (s1 > 0) { + c1 = s1/94+0x21; + c2 = s1-94*(c1-0x21)+0x21; + SJIS_ENCODE(c1, c2, s1, s2); + CK((*filter->output_function)(s1, filter->data)); + CK((*filter->output_function)(s2, filter->data)); + } + + if (s1 <= 0 && filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(0xf861, filter)); + for (i=0; i<3; i++) { + if (c1 == code_tbl_m[i+5][3]) { + CK(mbfl_filt_conv_illegal_output(code_tbl_m[i+5][2], filter)); + break; + } + } + CK(mbfl_filt_conv_illegal_output(c1, filter)); + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } else if (mode == 0x4) { + for (i=0; i<4; i++) { + if (c1 == code_tbl_m[i+8][3] && c == code_tbl_m[i+8][4]) { + filter->cache = c | 0x40000; + filter->status = 5; + break; + } + } + } + break; + + case 5: + s1 = 0; + c1 = filter->cache & 0xffff; + mode = (filter->cache & 0xf0000) >> 16; + + filter->cache = 0; + filter->status = 0; + + if (mode == 0x4) { + for (i=0; i<4; i++) { + if (c1 == code_tbl_m[i+8][4] && c == code_tbl_m[i+8][5]) { + s1 = code_tbl_m[i+8][0]; + break; + } + } + + if (s1 > 0) { + c1 = s1/94+0x21; + c2 = s1-94*(c1-0x21)+0x21; + SJIS_ENCODE(c1, c2, s1, s2); + CK((*filter->output_function)(s1, filter->data)); + CK((*filter->output_function)(s2, filter->data)); + } + + if (s1 <= 0 && filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(0xf862, filter)); + for (i=0; i<4; i++) { + if (c1 == code_tbl_m[i+8][4]) { + CK(mbfl_filt_conv_illegal_output( code_tbl_m[i+8][2], filter)); + CK(mbfl_filt_conv_illegal_output( code_tbl_m[i+8][3], filter)); + break; + } + } + CK(mbfl_filt_conv_illegal_output(c1, filter)); + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + break; + + default: + filter->status = 0; + break; + } + return c; +} + +static int +mbfl_filt_conv_sjis_mac_flush(mbfl_convert_filter *filter) +{ + int i, c1, s1 = 0; + if (filter->status == 1 && filter->cache > 0) { + c1 = filter->cache; + for (i=0;i<s_form_tbl_len;i++) { + if (c1 == s_form_tbl[i]) { + s1 = s_form_sjis_fallback_tbl[i]; + break; + } + } + if (s1 > 0) { + CK((*filter->output_function)((s1 >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(s1 & 0xff, filter->data)); + } + } + filter->cache = 0; + filter->status = 0; + + if (filter->flush_function != NULL) { + return (*filter->flush_function)(filter->data); + } + + return 0; +} + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.h b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.h new file mode 100644 index 0000000..3b191aa --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.h @@ -0,0 +1,44 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * the source code included in this files was separated from mbfilter_sjis_open.c + * by Rui Hirokawa <hirokawa@php.net> on 25 July 2011. + * + */ + +#ifndef MBFL_MBFILTER_SJIS_MAC_H +#define MBFL_MBFILTER_SJIS_MAC_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_sjis_mac; + +extern const struct mbfl_identify_vtbl vtbl_identify_sjis_mac; +extern const struct mbfl_convert_vtbl vtbl_sjis_mac_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_sjis_mac; + +int mbfl_filt_conv_sjis_mac_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_sjis_mac(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_SJIS_MAC_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c new file mode 100644 index 0000000..7a549af --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c @@ -0,0 +1,927 @@ + +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * the source code included in this files was separated from mbfilter_sjis_open.c + * by Rui Hirokawa <hirokawa@php.net> on 25 July 2011. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_sjis_mobile.h" + +#include "unicode_table_cp932_ext.h" +#include "unicode_table_jis.h" + +#include "emoji2uni.h" + +extern int mbfl_bisec_srch2(int w, const unsigned short tbl[], int n); +extern int mbfl_filt_ident_sjis(int c, mbfl_identify_filter *filter); +extern const unsigned char mblen_table_sjis[]; + +static const char *mbfl_encoding_sjis_docomo_aliases[] = {"SJIS-DOCOMO", "shift_jis-imode", "x-sjis-emoji-docomo", NULL}; +static const char *mbfl_encoding_sjis_kddi_aliases[] = {"SJIS-KDDI", "shift_jis-kddi", "x-sjis-emoji-kddi", NULL}; +static const char *mbfl_encoding_sjis_sb_aliases[] = {"SJIS-SOFTBANK", "shift_jis-softbank", "x-sjis-emoji-softbank", NULL}; + +const mbfl_encoding mbfl_encoding_sjis_docomo = { + mbfl_no_encoding_sjis_docomo, + "SJIS-Mobile#DOCOMO", + "Shift_JIS", + (const char *(*)[])&mbfl_encoding_sjis_docomo_aliases, + mblen_table_sjis, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE +}; + +const mbfl_encoding mbfl_encoding_sjis_kddi = { + mbfl_no_encoding_sjis_kddi, + "SJIS-Mobile#KDDI", + "Shift_JIS", + (const char *(*)[])&mbfl_encoding_sjis_kddi_aliases, + mblen_table_sjis, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE +}; + +const mbfl_encoding mbfl_encoding_sjis_sb = { + mbfl_no_encoding_sjis_sb, + "SJIS-Mobile#SOFTBANK", + "Shift_JIS", + (const char *(*)[])&mbfl_encoding_sjis_sb_aliases, + mblen_table_sjis, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_identify_vtbl vtbl_identify_sjis_docomo = { + mbfl_no_encoding_sjis_docomo, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_sjis +}; + +const struct mbfl_identify_vtbl vtbl_identify_sjis_kddi = { + mbfl_no_encoding_sjis_kddi, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_sjis +}; + +const struct mbfl_identify_vtbl vtbl_identify_sjis_sb = { + mbfl_no_encoding_sjis_sb, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_sjis +}; + +const struct mbfl_convert_vtbl vtbl_sjis_docomo_wchar = { + mbfl_no_encoding_sjis_docomo, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_sjis_mobile_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_sjis_docomo = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_sjis_docomo, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_sjis_mobile, + mbfl_filt_conv_sjis_mobile_flush +}; + +const struct mbfl_convert_vtbl vtbl_sjis_kddi_wchar = { + mbfl_no_encoding_sjis_kddi, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_sjis_mobile_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_sjis_kddi = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_sjis_kddi, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_sjis_mobile, + mbfl_filt_conv_sjis_mobile_flush +}; + +const struct mbfl_convert_vtbl vtbl_sjis_sb_wchar = { + mbfl_no_encoding_sjis_sb, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_sjis_mobile_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_sjis_sb = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_sjis_sb, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_sjis_mobile, + mbfl_filt_conv_sjis_mobile_flush +}; + +static const char nflags_s[10][2] = {"CN","DE","ES","FR","GB","IT","JP","KR","RU","US"}; +static const int nflags_code_kddi[10] = {0x2549, 0x2546, 0x24c0, 0x2545, 0x2548, 0x2547, 0x2750, 0x254a, 0x24c1, 0x27f7}; +static const int nflags_code_sb[10] = {0x2b0a, 0x2b05, 0x2b08, 0x2b04, 0x2b07, 0x2b06, 0x2b02, 0x2b0b, 0x2b09, 0x2b03}; + +const unsigned short mbfl_docomo2uni_pua[4][3] = { + {0x28c2, 0x292f, 0xe63e}, + {0x2930, 0x2934, 0xe6ac}, + {0x2935, 0x2951, 0xe6b1}, + {0x2952, 0x29db, 0xe6ce}, +}; + +const unsigned short mbfl_kddi2uni_pua[7][3] = { + {0x26ec, 0x2838, 0xe468}, + {0x284c, 0x2863, 0xe5b5}, + {0x24b8, 0x24ca, 0xe5cd}, + {0x24cb, 0x2545, 0xea80}, + {0x2839, 0x284b, 0xeafb}, + {0x2546, 0x25c0, 0xeb0e}, + {0x25c1, 0x25c6, 0xeb89}, +}; + +const unsigned short mbfl_sb2uni_pua[6][3] = { + {0x27a9, 0x2802, 0xe101}, + {0x2808, 0x2861, 0xe201}, + {0x2921, 0x297a, 0xe001}, + {0x2980, 0x29cc, 0xe301}, + {0x2a99, 0x2ae4, 0xe401}, + {0x2af8, 0x2b35, 0xe501}, +}; + +const unsigned short mbfl_kddi2uni_pua_b[8][3] = { + {0x24b8, 0x24f6, 0xec40}, + {0x24f7, 0x2573, 0xec80}, + {0x2574, 0x25b2, 0xed40}, + {0x25b3, 0x25c6, 0xed80}, + {0x26ec, 0x272a, 0xef40}, + {0x272b, 0x27a7, 0xef80}, + {0x27a8, 0x27e6, 0xf040}, + {0x27e7, 0x2863, 0xf080}, +}; + +#define NFLAGS(c) (0x1F1A5+(int)(c)) + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +#define SJIS_ENCODE(c1,c2,s1,s2) \ + do { \ + s1 = c1; \ + s1--; \ + s1 >>= 1; \ + if ((c1) < 0x5f) { \ + s1 += 0x71; \ + } else { \ + s1 += 0xb1; \ + } \ + s2 = c2; \ + if ((c1) & 1) { \ + if ((c2) < 0x60) { \ + s2--; \ + } \ + s2 += 0x20; \ + } else { \ + s2 += 0x7e; \ + } \ + } while (0) + +#define SJIS_DECODE(c1,c2,s1,s2) \ + do { \ + s1 = c1; \ + if (s1 < 0xa0) { \ + s1 -= 0x81; \ + } else { \ + s1 -= 0xc1; \ + } \ + s1 <<= 1; \ + s1 += 0x21; \ + s2 = c2; \ + if (s2 < 0x9f) { \ + if (s2 < 0x7f) { \ + s2++; \ + } \ + s2 -= 0x20; \ + } else { \ + s1++; \ + s2 -= 0x7e; \ + } \ + } while (0) + +#define CODE2JIS(c1,c2,s1,s2) \ + c1 = (s1)/94+0x21; \ + c2 = (s1)-94*((c1)-0x21)+0x21; \ + s1 = ((c1) << 8) | (c2); \ + s2 = 1 + +int +mbfilter_conv_map_tbl(int c, int *w, const unsigned short map[][3], int n) +{ + int i, match = 0; + + for (i = 0; i < n; i++) { + if (map[i][0] <= c && c <= map[i][1]) { + *w = c - map[i][0] + map[i][2]; + match = 1; + break; + } + } + return match; +} + +int +mbfilter_conv_r_map_tbl(int c, int *w, const unsigned short map[][3], int n) +{ + int i, match = 0; + + for (i = 0; i < n; i++) { + if (map[i][2] <= c && c <= map[i][2] - map[i][0] + map[i][1]) { + *w = c + map[i][0] - map[i][2]; + match = 1; + break; + } + } + return match; +} + +int +mbfilter_sjis_emoji_docomo2unicode(int s, int *snd) +{ + int w = s; + if (s >= mb_tbl_code2uni_docomo1_min && s <= mb_tbl_code2uni_docomo1_max) { + if (s >= mb_tbl_code2uni_docomo1_min + 0x00a2 && + s <= mb_tbl_code2uni_docomo1_min + 0x00ad && + s != mb_tbl_code2uni_docomo1_min + 0x00a3) { + w = 0x20E3; + *snd = mb_tbl_code2uni_docomo1[s - mb_tbl_code2uni_docomo1_min]; + if (*snd > 0xf000) { + *snd += 0x10000; + } + } else { + w = mb_tbl_code2uni_docomo1[s - mb_tbl_code2uni_docomo1_min]; + if (w > 0xf000) { + w += 0x10000; + } else if (w > 0xe000) { /* unsuported by Unicode 6.0 */ + w += 0xf0000; + } + *snd = 0; + if (!w) { + w = s; + } + } + } + + return w; +} + +int +mbfilter_sjis_emoji_kddi2unicode(int s, int *snd) +{ + int w = s, si, c; + const int nflags_order_kddi[] = {3, 1, 5, 4, 0, 7}; + + *snd = 0; + if (s >= mb_tbl_code2uni_kddi1_min && s <= mb_tbl_code2uni_kddi1_max) { + si = s - mb_tbl_code2uni_kddi1_min; + if (si == 0x0008) { /* ES */ + *snd = NFLAGS(nflags_s[2][0]); w = NFLAGS(nflags_s[2][1]); + } else if (si == 0x0009) { /* RU */ + *snd = NFLAGS(nflags_s[8][0]); w = NFLAGS(nflags_s[8][1]); + } else if (si >= 0x008d && si <= 0x0092) { + c = nflags_order_kddi[si-0x008d]; + *snd = NFLAGS(nflags_s[c][0]); w = NFLAGS(nflags_s[c][1]); + } else if (si == 0x0104) { + *snd = 0x0023; w = 0x20E3; + } else { + w = mb_tbl_code2uni_kddi1[si]; + if (w > 0xf000) { + w += 0x10000; + } else if (w > 0xe000) { /* unsuported by Unicode 6.0 */ + w += 0xf0000; + } + } + } else if (s >= mb_tbl_code2uni_kddi2_min && s <= mb_tbl_code2uni_kddi2_max) { + si = s - mb_tbl_code2uni_kddi2_min; + if (si == 100) { /* JP */ + *snd = NFLAGS(nflags_s[6][0]); w = NFLAGS(nflags_s[6][1]); + } else if (si >= 0x00ba && si <= 0x00c2) { + *snd = si-0x00ba+0x0031; w = 0x20E3; + } else if (si == 0x010b) { /* US */ + *snd = NFLAGS(nflags_s[9][0]); w = NFLAGS(nflags_s[9][1]); + } else if (si == 0x0144) { + *snd = 0x0030; w = 0x20E3; + } else { + w = mb_tbl_code2uni_kddi2[si]; + if (w > 0xf000) { + w += 0x10000; + } else if (w > 0xe000) { /* unsuported by Unicode 6.0 */ + w += 0xf0000; + } + } + } + return w; +} + +int +mbfilter_sjis_emoji_sb2unicode(int s, int *snd) +{ + int w = s, si, c; + const int nflags_order_sb[10] = {6, 9, 3, 1, 5, 4, 2, 8, 0, 7}; + + *snd = 0; + if (s >= mb_tbl_code2uni_sb1_min && s <= mb_tbl_code2uni_sb1_max) { + si = s - mb_tbl_code2uni_sb1_min; + if (si == 0x006e || (si >= 0x007a && si <= 0x0083)) { + *snd = mb_tbl_code2uni_sb1[si]; + if (*snd > 0xf000) { + *snd += 0x10000; + } + w = 0x20E3; + } else { + w = mb_tbl_code2uni_sb1[si]; + if (w > 0xf000) { + w += 0x10000; + } else if (w > 0xe000) { /* unsuported by Unicode 6.0 */ + w += 0xf0000; + } + } + } else if (s >= mb_tbl_code2uni_sb2_min && s <= mb_tbl_code2uni_sb2_max) { + si = s - mb_tbl_code2uni_sb2_min; + w = mb_tbl_code2uni_sb2[si]; + if (w > 0xf000) { + w += 0x10000; + } else if (w > 0xe000) { /* unsuported by Unicode 6.0 */ + w += 0xf0000; + } + } else if (s >= mb_tbl_code2uni_sb3_min && s <= mb_tbl_code2uni_sb3_max) { + si = s - mb_tbl_code2uni_sb3_min; + if (si >= 0x0069 && si <= 0x0072) { + c = nflags_order_sb[si-0x0069]; + *snd = NFLAGS(nflags_s[c][0]); w = NFLAGS(nflags_s[c][1]); + } else { + w = mb_tbl_code2uni_sb3[si]; + if (w > 0xf000) { + w += 0x10000; + } else if (w > 0xe000) { /* unsuported by Unicode 6.0 */ + w += 0xf0000; + } + } + } + return w; +} + +int +mbfilter_unicode2sjis_emoji_docomo(int c, int *s1, mbfl_convert_filter *filter) +{ + int i, match = 0, c1s; + + if (filter->status == 1) { + c1s = filter->cache; + filter->cache = 0; + filter->status = 0; + if (c == 0x20E3) { + if (c1s == 0x0023) { + *s1 = 0x2964; + match = 1; + } else if (c1s == 0x0030) { + *s1 = 0x296f; + match = 1; + } else if (c1s >= 0x0031 && c1s <= 0x0039) { + *s1 = 0x2966 + (c1s - 0x0031); + match = 1; + } + } else { + CK((*filter->output_function)(c1s, filter->data)); + } + } else { + if (c == 0x0023 || (c >= 0x0030 && c<=0x0039)) { + filter->status = 1; + filter->cache = c; + *s1 = -1; + return match; + } + + if (c == 0x00A9) { + *s1 = 0x29b5; match = 1; + } else if (c == 0x00AE) { + *s1 = 0x29ba; match = 1; + } else if (c >= mb_tbl_uni_docomo2code2_min && c <= mb_tbl_uni_docomo2code2_max) { + i = mbfl_bisec_srch2(c, mb_tbl_uni_docomo2code2_key, mb_tbl_uni_docomo2code2_len); + if (i >= 0) { + *s1 = mb_tbl_uni_docomo2code2_value[i]; + match = 1; + } + } else if (c >= mb_tbl_uni_docomo2code3_min && c <= mb_tbl_uni_docomo2code3_max) { + i = mbfl_bisec_srch2(c - 0x10000, mb_tbl_uni_docomo2code3_key, mb_tbl_uni_docomo2code3_len); + if (i >= 0) { + *s1 = mb_tbl_uni_docomo2code3_value[i]; + match = 1; + } + } else if (c >= mb_tbl_uni_docomo2code5_min && c <= mb_tbl_uni_docomo2code5_max) { + i = mbfl_bisec_srch2(c - 0xf0000, mb_tbl_uni_docomo2code5_key, mb_tbl_uni_docomo2code5_len); + if (i >= 0) { + *s1 = mb_tbl_uni_docomo2code5_val[i]; + match = 1; + } + } + } + + return match; +} + +int +mbfilter_unicode2sjis_emoji_kddi(int c, int *s1, mbfl_convert_filter *filter) +{ + int i, match = 0, c1s; + + if (filter->status == 1) { + c1s = filter->cache; + filter->cache = 0; + filter->status = 0; + if (c == 0x20E3) { + if (c1s == 0x0023) { + *s1 = 0x25bc; + match = 1; + } else if (c1s == 0x0030) { + *s1 = 0x2830; + match = 1; + } else if (c1s >= 0x0031 && c1s <= 0x0039) { + *s1 = 0x27a6 + (c1s - 0x0031); + match = 1; + } + } else if ((c >= NFLAGS(0x41) && c <= NFLAGS(0x5A)) && (c1s >= NFLAGS(0x41) && c1s <= NFLAGS(0x5A))) { + for (i=0; i<10; i++) { + if (c1s == NFLAGS(nflags_s[i][0]) && c == NFLAGS(nflags_s[i][1])) { + *s1 = nflags_code_kddi[i]; + match = 1; + break; + } + } + } else { + if (c1s >= ucs_a1_jis_table_min && c1s < ucs_a1_jis_table_max) { + c1s = ucs_a1_jis_table[c1s - ucs_a1_jis_table_min]; + CK((*filter->output_function)(c1s, filter->data)); + } + } + } else { + if (c == 0x0023 || ( c >= 0x0030 && c<=0x0039) || + (c >= NFLAGS(0x41) && c<= NFLAGS(0x5A))) { + filter->status = 1; + filter->cache = c; + *s1 = -1; + return match; + } + + if (c == 0x00A9) { + *s1 = 0x27dc; match = 1; + } else if (c == 0x00AE) { + *s1 = 0x27dd; match = 1; + } else if (c >= mb_tbl_uni_kddi2code2_min && c <= mb_tbl_uni_kddi2code2_max) { + i = mbfl_bisec_srch2(c, mb_tbl_uni_kddi2code2_key, mb_tbl_uni_kddi2code2_len); + if (i >= 0) { + *s1 = mb_tbl_uni_kddi2code2_value[i]; + match = 1; + } + } else if (c >= mb_tbl_uni_kddi2code3_min && c <= mb_tbl_uni_kddi2code3_max) { + i = mbfl_bisec_srch2(c - 0x10000, mb_tbl_uni_kddi2code3_key, mb_tbl_uni_kddi2code3_len); + if (i >= 0) { + *s1 = mb_tbl_uni_kddi2code3_value[i]; + match = 1; + } + } else if (c >= mb_tbl_uni_kddi2code5_min && c <= mb_tbl_uni_kddi2code5_max) { + i = mbfl_bisec_srch2(c - 0xf0000, mb_tbl_uni_kddi2code5_key, mb_tbl_uni_kddi2code5_len); + if (i >= 0) { + *s1 = mb_tbl_uni_kddi2code5_val[i]; + match = 1; + } + } + } + + return match; +} + +int +mbfilter_unicode2sjis_emoji_sb(int c, int *s1, mbfl_convert_filter *filter) +{ + int i, match = 0, c1s; + + if (filter->status == 1) { + filter->status = 0; + c1s = filter->cache; + filter->cache = 0; + if (c == 0x20E3) { + if (c1s == 0x0023) { + *s1 = 0x2817; + match = 1; + } else if (c1s == 0x0030) { + *s1 = 0x282c; + match = 1; + } else if (c1s >= 0x0031 && c1s <= 0x0039) { + *s1 = 0x2823 + (c1s - 0x0031); + match = 1; + } + } else if ((c >= NFLAGS(0x41) && c <= NFLAGS(0x5A)) && (c1s >= NFLAGS(0x41) && c1s <= NFLAGS(0x5A))) { + for (i=0; i<10; i++) { + if (c1s == NFLAGS(nflags_s[i][0]) && c == NFLAGS(nflags_s[i][1])) { + *s1 = nflags_code_sb[i]; + match = 1; + break; + } + } + } else { + if (c1s >= ucs_a1_jis_table_min && c1s < ucs_a1_jis_table_max) { + c1s = ucs_a1_jis_table[c1s - ucs_a1_jis_table_min]; + CK((*filter->output_function)(c1s, filter->data)); + } + } + } else { + if (c == 0x0023 || ( c >= 0x0030 && c<=0x0039) || (c >= NFLAGS(0x41) && c<= NFLAGS(0x5A))) { + filter->status = 1; + filter->cache = c; + *s1 = -1; + return match; + } + + if (c == 0x00A9) { + *s1 = 0x2855; match = 1; + } else if (c == 0x00AE) { + *s1 = 0x2856; match = 1; + } else if (c >= mb_tbl_uni_sb2code2_min && c <= mb_tbl_uni_sb2code2_max) { + i = mbfl_bisec_srch2(c, mb_tbl_uni_sb2code2_key, mb_tbl_uni_sb2code2_len); + if (i >= 0) { + *s1 = mb_tbl_uni_sb2code2_value[i]; + match = 1; + } + } else if (c >= mb_tbl_uni_sb2code3_min && c <= mb_tbl_uni_sb2code3_max) { + i = mbfl_bisec_srch2(c - 0x10000, mb_tbl_uni_sb2code3_key, mb_tbl_uni_sb2code3_len); + if (i >= 0) { + *s1 = mb_tbl_uni_sb2code3_value[i]; + match = 1; + } + } else if (c >= mb_tbl_uni_sb2code5_min && c <= mb_tbl_uni_sb2code5_max) { + i = mbfl_bisec_srch2(c - 0xf0000, mb_tbl_uni_sb2code5_key, mb_tbl_uni_sb2code5_len); + if (i >= 0) { + *s1 = mb_tbl_uni_sb2code5_val[i]; + match = 1; + } + } + } + return match; +} + +/* + * SJIS-win => wchar + */ +int +mbfl_filt_conv_sjis_mobile_wchar(int c, mbfl_convert_filter *filter) +{ + int c1, s, s1, s2, w; + int snd = 0; + +retry: + switch (filter->status) { + case 0: + if (c >= 0 && c < 0x80) { /* latin */ + if (filter->from->no_encoding == mbfl_no_encoding_sjis_sb && c == 0x1b) { + filter->cache = c; + filter->status = 2; + } else { + CK((*filter->output_function)(c, filter->data)); + } + } else if (c > 0xa0 && c < 0xe0) { /* kana */ + CK((*filter->output_function)(0xfec0 + c, filter->data)); + } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */ + filter->status = 1; + filter->cache = c; + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 1: /* kanji second char */ + filter->status = 0; + c1 = filter->cache; + if (c >= 0x40 && c <= 0xfc && c != 0x7f) { + w = 0; + SJIS_DECODE(c1, c, s1, s2); + s = (s1 - 0x21)*94 + s2 - 0x21; + if (s <= 137) { + if (s == 31) { + w = 0xff3c; /* FULLWIDTH REVERSE SOLIDUS */ + } else if (s == 32) { + w = 0xff5e; /* FULLWIDTH TILDE */ + } else if (s == 33) { + w = 0x2225; /* PARALLEL TO */ + } else if (s == 60) { + w = 0xff0d; /* FULLWIDTH HYPHEN-MINUS */ + } else if (s == 80) { + w = 0xffe0; /* FULLWIDTH CENT SIGN */ + } else if (s == 81) { + w = 0xffe1; /* FULLWIDTH POUND SIGN */ + } else if (s == 137) { + w = 0xffe2; /* FULLWIDTH NOT SIGN */ + } + } + if (w == 0) { + if (s >= cp932ext1_ucs_table_min && s < cp932ext1_ucs_table_max) { /* vendor ext1 (13ku) */ + w = cp932ext1_ucs_table[s - cp932ext1_ucs_table_min]; + } else if (s >= 0 && s < jisx0208_ucs_table_size) { /* X 0208 */ + w = jisx0208_ucs_table[s]; + } else if (s >= cp932ext2_ucs_table_min && s < cp932ext2_ucs_table_max) { /* vendor ext2 (89ku - 92ku) */ + w = cp932ext2_ucs_table[s - cp932ext2_ucs_table_min]; + } else if (s >= cp932ext3_ucs_table_min && s < cp932ext3_ucs_table_max) { /* vendor ext3 (115ku - 119ku) */ + w = cp932ext3_ucs_table[s - cp932ext3_ucs_table_min]; + } else if (s >= (94*94) && s < (114*94)) { /* user (95ku - 114ku) */ + w = s - (94*94) + 0xe000; + } + + if (s >= (94*94) && s < 119*94) { + if (filter->from->no_encoding == mbfl_no_encoding_sjis_docomo) { + w = mbfilter_sjis_emoji_docomo2unicode(s, &snd); + } else if (filter->from->no_encoding == mbfl_no_encoding_sjis_kddi) { + w = mbfilter_sjis_emoji_kddi2unicode(s, &snd); + } else if (filter->from->no_encoding == mbfl_no_encoding_sjis_sb) { + w = mbfilter_sjis_emoji_sb2unicode(s, &snd); + } + + if (w > 0 && snd > 0) { + CK((*filter->output_function)(snd, filter->data)); + } + } + } + if (w <= 0) { + w = (s1 << 8) | s2; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_WINCP932; + } + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + /* ESC : Softbank Emoji */ + case 2: + if (filter->from->no_encoding == mbfl_no_encoding_sjis_sb && + c == 0x24) { + filter->cache = c; + filter->status++; + } else { + filter->cache = 0; + filter->status = 0; + CK((*filter->output_function)(0x1b, filter->data)); + goto retry; + } + break; + + /* ESC $ : Softbank Emoji */ + case 3: + if (filter->from->no_encoding == mbfl_no_encoding_sjis_sb && + ((c >= 0x45 && c <= 0x47) || (c >= 0x4f && c <= 0x51))) { + filter->cache = c; + filter->status++; + } else { + filter->cache = 0; + filter->status = 0; + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x24, filter->data)); + goto retry; + } + break; + + /* ESC [GEFOPQ] : Softbank Emoji */ + case 4: + w = 0; + if (filter->from->no_encoding == mbfl_no_encoding_sjis_sb) { + c1 = filter->cache; + + if (c == 0x0f) { + w = c; + filter->cache = 0; + filter->status = 0; + } else { + if (c1 == 0x47 && c >= 0x21 && c <= 0x7a) { + s1 = 0x91; s2 = c; + } else if (c1 == 0x45 && c >= 0x21 && c <= 0x7a) { + s1 = 0x8d; s2 = c; + } else if (c1 == 0x46 && c >= 0x21 && c <= 0x7a) { + s1 = 0x8e; s2 = c; + } else if (c1 == 0x4f && c >= 0x21 && c <= 0x6d) { + s1 = 0x92; s2 = c; + } else if (c1 == 0x50 && c >= 0x21 && c <= 0x6c) { + s1 = 0x95; s2 = c; + } else if (c1 == 0x51 && c >= 0x21 && c <= 0x5e) { + s1 = 0x96; s2 = c; + } + s = (s1 - 0x21)*94 + s2 - 0x21; + w = mbfilter_sjis_emoji_sb2unicode(s, &snd); + if (w > 0) { + if (snd > 0) { + CK((*filter->output_function)(snd, filter->data)); + } + CK((*filter->output_function)(w, filter->data)); + } + } + } + + if (w <= 0) { + c1 = filter->cache; + filter->cache = 0; + filter->status = 0; + CK((*filter->output_function)(0x1b, filter->data)); + CK((*filter->output_function)(0x24, filter->data)); + CK((*filter->output_function)(c1 & 0xff, filter->data)); + goto retry; + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => SJIS-win + */ +int +mbfl_filt_conv_wchar_sjis_mobile(int c, mbfl_convert_filter *filter) +{ + int c1, c2, s1, s2; + + s1 = 0; + s2 = 0; + if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { + s1 = ucs_a1_jis_table[c - ucs_a1_jis_table_min]; + } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) { + s1 = ucs_a2_jis_table[c - ucs_a2_jis_table_min]; + } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) { + s1 = ucs_i_jis_table[c - ucs_i_jis_table_min]; + } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) { + s1 = ucs_r_jis_table[c - ucs_r_jis_table_min]; + } else if (c >= 0xe000 && c < (0xe000 + 20*94)) { /* user (95ku - 114ku) */ + s1 = c - 0xe000; + c1 = s1/94 + 0x7f; + c2 = s1%94 + 0x21; + s1 = (c1 << 8) | c2; + s2 = 1; + } + if (s1 <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_WINCP932) { + s1 = c & MBFL_WCSPLANE_MASK; + s2 = 1; + } else if (c1 == MBFL_WCSPLANE_JIS0208) { + s1 = c & MBFL_WCSPLANE_MASK; + } else if (c1 == MBFL_WCSPLANE_JIS0212) { + s1 = c & MBFL_WCSPLANE_MASK; + s1 |= 0x8080; + } else if (c == 0xa5) { /* YEN SIGN */ + s1 = 0x216f; /* FULLWIDTH YEN SIGN */ + } else if (c == 0x203e) { /* OVER LINE */ + s1 = 0x2131; /* FULLWIDTH MACRON */ + } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + s1 = 0x2140; + } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ + s1 = 0x2141; + } else if (c == 0x2225) { /* PARALLEL TO */ + s1 = 0x2142; + } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */ + s1 = 0x215d; + } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */ + s1 = 0x2171; + } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */ + s1 = 0x2172; + } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ + s1 = 0x224c; + } + } + + if ((s1 <= 0) || (s1 >= 0x8080 && s2 == 0)) { /* not found or X 0212 */ + s1 = -1; + c1 = 0; + c2 = cp932ext1_ucs_table_max - cp932ext1_ucs_table_min; + while (c1 < c2) { /* CP932 vendor ext1 (13ku) */ + if (c == cp932ext1_ucs_table[c1]) { + s1 = ((c1/94 + 0x2d) << 8) + (c1%94 + 0x21); + break; + } + c1++; + } + if (s1 <= 0) { + c1 = 0; + c2 = cp932ext2_ucs_table_max - cp932ext2_ucs_table_min; + while (c1 < c2) { /* CP932 vendor ext2 (115ku - 119ku) */ + if (c == cp932ext2_ucs_table[c1]) { + s1 = ((c1/94 + 0x93) << 8) + (c1%94 + 0x21); + break; + } + c1++; + } + } + + if (s1 <= 0) { + c1 = 0; + c2 = cp932ext3_ucs_table_max - cp932ext3_ucs_table_min; + while (c1 < c2) { /* CP932 vendor ext3 (115ku - 119ku) */ + if (c == cp932ext3_ucs_table[c1]) { + s1 = ((c1/94 + 0x93) << 8) + (c1%94 + 0x21); + break; + } + c1++; + } + } + if (c == 0) { + s1 = 0; + } else if (s1 <= 0) { + s1 = -1; + } + } + + if ((filter->to->no_encoding == mbfl_no_encoding_sjis_docomo && + mbfilter_unicode2sjis_emoji_docomo(c, &s1, filter) > 0) || + (filter->to->no_encoding == mbfl_no_encoding_sjis_kddi && + mbfilter_unicode2sjis_emoji_kddi(c, &s1, filter) > 0) || + (filter->to->no_encoding == mbfl_no_encoding_sjis_sb && + mbfilter_unicode2sjis_emoji_sb(c, &s1, filter) > 0 )) { + CODE2JIS(c1,c2,s1,s2); + } + + if (filter->status == 1 && filter->cache > 0) { + return c; + } + + if (s1 >= 0) { + if (s1 < 0x100) { /* latin or kana */ + CK((*filter->output_function)(s1, filter->data)); + } else { /* kanji */ + c1 = (s1 >> 8) & 0xff; + c2 = s1 & 0xff; + SJIS_ENCODE(c1, c2, s1, s2); + CK((*filter->output_function)(s1, filter->data)); + CK((*filter->output_function)(s2, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +int +mbfl_filt_conv_sjis_mobile_flush(mbfl_convert_filter *filter) +{ + int c1 = filter->cache; + if (filter->status == 1 && (c1 == 0x0023 || (c1 >= 0x0030 && c1<=0x0039))) { + CK((*filter->output_function)(c1, filter->data)); + } + filter->status = 0; + filter->cache = 0; + + if (filter->flush_function != NULL) { + return (*filter->flush_function)(filter->data); + } + + return 0; +} + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.h b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.h new file mode 100644 index 0000000..15a91a5 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.h @@ -0,0 +1,70 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * the source code included in this files was separated from mbfilter_sjis_open.c + * by Rui Hirokawa <hirokawa@php.net> on 25 July 2011. + * + */ + +#ifndef MBFL_MBFILTER_SJIS_MOBILE_H +#define MBFL_MBFILTER_SJIS_MOBILE_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_sjis_docomo; +extern const mbfl_encoding mbfl_encoding_sjis_kddi; +extern const mbfl_encoding mbfl_encoding_sjis_sb; + +extern const struct mbfl_identify_vtbl vtbl_identify_sjis_docomo; +extern const struct mbfl_identify_vtbl vtbl_identify_sjis_kddi; +extern const struct mbfl_identify_vtbl vtbl_identify_sjis_sb; + +extern const struct mbfl_convert_vtbl vtbl_sjis_docomo_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_sjis_docomo; +extern const struct mbfl_convert_vtbl vtbl_sjis_kddi_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_sjis_kddi; +extern const struct mbfl_convert_vtbl vtbl_sjis_sb_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_sjis_sb; + +extern const unsigned short mbfl_docomo2uni_pua[4][3]; +extern const unsigned short mbfl_kddi2uni_pua[7][3]; +extern const unsigned short mbfl_sb2uni_pua[6][3]; +extern const unsigned short mbfl_kddi2uni_pua_b[8][3]; + +int mbfl_filt_conv_sjis_mobile_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_sjis_mobile(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_sjis_mobile_flush(mbfl_convert_filter *filter); + +int mbfilter_sjis_emoji_docomo2unicode(int s, int *snd); +int mbfilter_sjis_emoji_kddi2unicode(int s, int *snd); +int mbfilter_sjis_emoji_sb2unicode(int s, int *snd); + +int mbfilter_unicode2sjis_emoji_docomo(int c, int *s1, mbfl_convert_filter *filter); +int mbfilter_unicode2sjis_emoji_kddi(int c, int *s1, mbfl_convert_filter *filter); +int mbfilter_unicode2sjis_emoji_sb(int c, int *s1, mbfl_convert_filter *filter); + +int mbfilter_conv_map_tbl(int c, int *w, const unsigned short map[][3], int n); +int mbfilter_conv_r_map_tbl(int c, int *w, const unsigned short map[][3], int n); + +#endif /* MBFL_MBFILTER_SJIS_MOBILE_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.c new file mode 100644 index 0000000..81ab32e --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.c @@ -0,0 +1,350 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * the source code included in this files was separated from mbfilter_ja.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_sjis_open.h" + +#include "unicode_table_cp932_ext.h" +#include "unicode_table_jis.h" + +static int mbfl_filt_ident_sjis_open(int c, mbfl_identify_filter *filter); + +static const unsigned char mblen_table_sjis[] = { /* 0x80-0x9f,0xE0-0xFF */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +}; + +static const char *mbfl_encoding_sjis_open_aliases[] = {"SJIS-open", "SJIS-ms", NULL}; + +const mbfl_encoding mbfl_encoding_sjis_open = { + mbfl_no_encoding_sjis_open, + "SJIS-win", + "Shift_JIS", + (const char *(*)[])&mbfl_encoding_sjis_open_aliases, + mblen_table_sjis, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_identify_vtbl vtbl_identify_sjis_open = { + mbfl_no_encoding_sjis_open, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_sjis_open +}; + +const struct mbfl_convert_vtbl vtbl_sjis_open_wchar = { + mbfl_no_encoding_sjis_open, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_sjis_open_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_sjis_open = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_sjis_open, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_sjis_open, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +#define SJIS_ENCODE(c1,c2,s1,s2) \ + do { \ + s1 = c1; \ + s1--; \ + s1 >>= 1; \ + if ((c1) < 0x5f) { \ + s1 += 0x71; \ + } else { \ + s1 += 0xb1; \ + } \ + s2 = c2; \ + if ((c1) & 1) { \ + if ((c2) < 0x60) { \ + s2--; \ + } \ + s2 += 0x20; \ + } else { \ + s2 += 0x7e; \ + } \ + } while (0) + +#define SJIS_DECODE(c1,c2,s1,s2) \ + do { \ + s1 = c1; \ + if (s1 < 0xa0) { \ + s1 -= 0x81; \ + } else { \ + s1 -= 0xc1; \ + } \ + s1 <<= 1; \ + s1 += 0x21; \ + s2 = c2; \ + if (s2 < 0x9f) { \ + if (s2 < 0x7f) { \ + s2++; \ + } \ + s2 -= 0x20; \ + } else { \ + s1++; \ + s2 -= 0x7e; \ + } \ + } while (0) + +/* + * SJIS-win => wchar + */ +int +mbfl_filt_conv_sjis_open_wchar(int c, mbfl_convert_filter *filter) +{ + int c1, s, s1, s2, w; + + switch (filter->status) { + case 0: + if (c >= 0 && c < 0x80) { /* latin */ + CK((*filter->output_function)(c, filter->data)); + } else if (c > 0xa0 && c < 0xe0) { /* kana */ + CK((*filter->output_function)(0xfec0 + c, filter->data)); + } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */ + filter->status = 1; + filter->cache = c; + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 1: /* kanji second char */ + filter->status = 0; + c1 = filter->cache; + if (c >= 0x40 && c <= 0xfc && c != 0x7f) { + w = 0; + SJIS_DECODE(c1, c, s1, s2); + s = (s1 - 0x21)*94 + s2 - 0x21; + if (s <= 137) { + if (s == 31) { + w = 0xff3c; /* FULLWIDTH REVERSE SOLIDUS */ + } else if (s == 32) { + w = 0xff5e; /* FULLWIDTH TILDE */ + } else if (s == 33) { + w = 0x2225; /* PARALLEL TO */ + } else if (s == 60) { + w = 0xff0d; /* FULLWIDTH HYPHEN-MINUS */ + } else if (s == 80) { + w = 0xffe0; /* FULLWIDTH CENT SIGN */ + } else if (s == 81) { + w = 0xffe1; /* FULLWIDTH POUND SIGN */ + } else if (s == 137) { + w = 0xffe2; /* FULLWIDTH NOT SIGN */ + } + } + if (w == 0) { + if (s >= cp932ext1_ucs_table_min && s < cp932ext1_ucs_table_max) { /* vendor ext1 (13ku) */ + w = cp932ext1_ucs_table[s - cp932ext1_ucs_table_min]; + } else if (s >= 0 && s < jisx0208_ucs_table_size) { /* X 0208 */ + w = jisx0208_ucs_table[s]; + } else if (s >= cp932ext2_ucs_table_min && s < cp932ext2_ucs_table_max) { /* vendor ext2 (89ku - 92ku) */ + w = cp932ext2_ucs_table[s - cp932ext2_ucs_table_min]; + } else if (s >= cp932ext3_ucs_table_min && s < cp932ext3_ucs_table_max) { /* vendor ext3 (115ku - 119ku) */ + w = cp932ext3_ucs_table[s - cp932ext3_ucs_table_min]; + } else if (s >= (94*94) && s < (114*94)) { /* user (95ku - 114ku) */ + w = s - (94*94) + 0xe000; + } + } + if (w <= 0) { + w = (s1 << 8) | s2; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_WINCP932; + } + CK((*filter->output_function)(w, filter->data)); + } else if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => SJIS-win + */ +int +mbfl_filt_conv_wchar_sjis_open(int c, mbfl_convert_filter *filter) +{ + int c1, c2, s1, s2; + + s1 = 0; + s2 = 0; + if (c >= ucs_a1_jis_table_min && c < ucs_a1_jis_table_max) { + s1 = ucs_a1_jis_table[c - ucs_a1_jis_table_min]; + } else if (c >= ucs_a2_jis_table_min && c < ucs_a2_jis_table_max) { + s1 = ucs_a2_jis_table[c - ucs_a2_jis_table_min]; + } else if (c >= ucs_i_jis_table_min && c < ucs_i_jis_table_max) { + s1 = ucs_i_jis_table[c - ucs_i_jis_table_min]; + } else if (c >= ucs_r_jis_table_min && c < ucs_r_jis_table_max) { + s1 = ucs_r_jis_table[c - ucs_r_jis_table_min]; + } else if (c >= 0xe000 && c < (0xe000 + 20*94)) { /* user (95ku - 114ku) */ + s1 = c - 0xe000; + c1 = s1/94 + 0x7f; + c2 = s1%94 + 0x21; + s1 = (c1 << 8) | c2; + s2 = 1; + } + if (s1 <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_WINCP932) { + s1 = c & MBFL_WCSPLANE_MASK; + s2 = 1; + } else if (c1 == MBFL_WCSPLANE_JIS0208) { + s1 = c & MBFL_WCSPLANE_MASK; + } else if (c1 == MBFL_WCSPLANE_JIS0212) { + s1 = c & MBFL_WCSPLANE_MASK; + s1 |= 0x8080; + } else if (c == 0xa5) { /* YEN SIGN */ + s1 = 0x216f; /* FULLWIDTH YEN SIGN */ + } else if (c == 0x203e) { /* OVER LINE */ + s1 = 0x2131; /* FULLWIDTH MACRON */ + } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + s1 = 0x2140; + } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ + s1 = 0x2141; + } else if (c == 0x2225) { /* PARALLEL TO */ + s1 = 0x2142; + } else if (c == 0xff0d) { /* FULLWIDTH HYPHEN-MINUS */ + s1 = 0x215d; + } else if (c == 0xffe0) { /* FULLWIDTH CENT SIGN */ + s1 = 0x2171; + } else if (c == 0xffe1) { /* FULLWIDTH POUND SIGN */ + s1 = 0x2172; + } else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */ + s1 = 0x224c; + } + } + if ((s1 <= 0) || (s1 >= 0x8080 && s2 == 0)) { /* not found or X 0212 */ + s1 = -1; + c1 = 0; + c2 = cp932ext1_ucs_table_max - cp932ext1_ucs_table_min; + while (c1 < c2) { /* CP932 vendor ext1 (13ku) */ + if (c == cp932ext1_ucs_table[c1]) { + s1 = ((c1/94 + 0x2d) << 8) + (c1%94 + 0x21); + break; + } + c1++; + } + if (s1 <= 0) { + c1 = 0; + c2 = cp932ext3_ucs_table_max - cp932ext3_ucs_table_min; + while (c1 < c2) { /* CP932 vendor ext3 (115ku - 119ku) */ + if (c == cp932ext3_ucs_table[c1]) { + s1 = ((c1/94 + 0x93) << 8) + (c1%94 + 0x21); + break; + } + c1++; + } + } + if (c == 0) { + s1 = 0; + } else if (s1 <= 0) { + s1 = -1; + } + } + + if (s1 >= 0) { + if (s1 < 0x100) { /* latin or kana */ + CK((*filter->output_function)(s1, filter->data)); + } else { /* kanji */ + c1 = (s1 >> 8) & 0xff; + c2 = s1 & 0xff; + SJIS_ENCODE(c1, c2, s1, s2); + CK((*filter->output_function)(s1, filter->data)); + CK((*filter->output_function)(s2, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +static int mbfl_filt_ident_sjis_open(int c, mbfl_identify_filter *filter) +{ + if (filter->status) { /* kanji second char */ + if (c < 0x40 || c > 0xfc || c == 0x7f) { /* bad */ + filter->flag = 1; + } + filter->status = 0; + } else if (c >= 0 && c < 0x80) { /* latin ok */ + ; + } else if (c > 0xa0 && c < 0xe0) { /* kana ok */ + ; + } else if (c > 0x80 && c < 0xfd && c != 0xa0) { /* kanji first char */ + filter->status = 1; + } else { /* bad */ + filter->flag = 1; + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.h b/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.h new file mode 100644 index 0000000..f24e42e --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.h @@ -0,0 +1,44 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * the source code included in this files was separated from mbfilter_ja.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_SJIS_OPEN_H +#define MBFL_MBFILTER_SJIS_OPEN_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_sjis_open; + +extern const struct mbfl_identify_vtbl vtbl_identify_sjis_open; +extern const struct mbfl_convert_vtbl vtbl_sjis_open_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_sjis_open; + +int mbfl_filt_conv_sjis_open_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_sjis_open(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_SJIS_OPEN_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_tl_jisx0201_jisx0208.c b/ext/mbstring/libmbfl/filters/mbfilter_tl_jisx0201_jisx0208.c new file mode 100644 index 0000000..c66c51f --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_tl_jisx0201_jisx0208.c @@ -0,0 +1,302 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: Moriyoshi Koizumi <koizumi@gree.co.jp> + * + */ + +#include "mbfl_allocators.h" +#include "mbfilter_tl_jisx0201_jisx0208.h" +#include "translit_kana_jisx0201_jisx0208.h" + +void +mbfl_filt_tl_jisx0201_jisx0208_init(mbfl_convert_filter *filt) +{ + mbfl_filt_conv_common_ctor(filt); +} + +void +mbfl_filt_tl_jisx0201_jisx0208_cleanup(mbfl_convert_filter *filt) +{ +} + +int +mbfl_filt_tl_jisx0201_jisx0208(int c, mbfl_convert_filter *filt) +{ + int s, n; + int mode = ((mbfl_filt_tl_jisx0201_jisx0208_param *)filt->opaque)->mode; + + s = c; + + if ((mode & MBFL_FILT_TL_HAN2ZEN_ALL) + && c >= 0x21 && c <= 0x7d && c != 0x22 && c != 0x27 && c != 0x5c) { + /* all except <"> <'> <\> <~> */ + s = c + 0xfee0; + } else if ((mode & MBFL_FILT_TL_HAN2ZEN_ALPHA) && + ((c >= 0x41 && c <= 0x5a) || (c >= 0x61 && c <= 0x7a))) { + /* alpha */ + s = c + 0xfee0; + } else if ((mode & MBFL_FILT_TL_HAN2ZEN_NUMERIC) && + c >= 0x30 && c <= 0x39) { + /* num */ + s = c + 0xfee0; + } else if ((mode & MBFL_FILT_TL_HAN2ZEN_SPACE) && c == 0x20) { + /* space */ + s = 0x3000; + } + + if (mode & + (MBFL_FILT_TL_HAN2ZEN_KATAKANA | MBFL_FILT_TL_HAN2ZEN_HIRAGANA)) { + /* hankaku kana to zenkaku kana */ + if ((mode & MBFL_FILT_TL_HAN2ZEN_KATAKANA) && + (mode & MBFL_FILT_TL_HAN2ZEN_GLUE)) { + /* hankaku kana to zenkaku katakana and glue voiced sound mark */ + if (c >= 0xff61 && c <= 0xff9f) { + if (filt->status) { + n = (filt->cache - 0xff60) & 0x3f; + if (c == 0xff9e && ((n >= 22 && n <= 36) || (n >= 42 && n <= 46))) { + filt->status = 0; + s = 0x3001 + hankana2zenkana_table[n]; + } else if (c == 0xff9e && n == 19) { + filt->status = 0; + s = 0x30f4; + } else if (c == 0xff9f && (n >= 42 && n <= 46)) { + filt->status = 0; + s = 0x3002 + hankana2zenkana_table[n]; + } else { + filt->status = 1; + filt->cache = c; + s = 0x3000 + hankana2zenkana_table[n]; + } + } else { + filt->status = 1; + filt->cache = c; + return c; + } + } else { + if (filt->status) { + n = (filt->cache - 0xff60) & 0x3f; + filt->status = 0; + (*filt->output_function)(0x3000 + hankana2zenkana_table[n], filt->data); + } + } + } else if ((mode & MBFL_FILT_TL_HAN2ZEN_HIRAGANA) && + (mode & MBFL_FILT_TL_HAN2ZEN_GLUE)) { + /* hankaku kana to zenkaku hirangana and glue voiced sound mark */ + if (c >= 0xff61 && c <= 0xff9f) { + if (filt->status) { + n = (filt->cache - 0xff60) & 0x3f; + if (c == 0xff9e && ((n >= 22 && n <= 36) || (n >= 42 && n <= 46))) { + filt->status = 0; + s = 0x3001 + hankana2zenhira_table[n]; + } else if (c == 0xff9f && (n >= 42 && n <= 46)) { + filt->status = 0; + s = 0x3002 + hankana2zenhira_table[n]; + } else { + filt->status = 1; + filt->cache = c; + s = 0x3000 + hankana2zenhira_table[n]; + } + } else { + filt->status = 1; + filt->cache = c; + return c; + } + } else { + if (filt->status) { + n = (filt->cache - 0xff60) & 0x3f; + filt->status = 0; + (*filt->output_function)(0x3000 + hankana2zenhira_table[n], filt->data); + } + } + } else if ((mode & MBFL_FILT_TL_HAN2ZEN_KATAKANA) && + c >= 0xff61 && c <= 0xff9f) { + /* hankaku kana to zenkaku katakana */ + s = 0x3000 + hankana2zenkana_table[c - 0xff60]; + } else if ((mode & MBFL_FILT_TL_HAN2ZEN_HIRAGANA) + && c >= 0xff61 && c <= 0xff9f) { + /* hankaku kana to zenkaku hirangana */ + s = 0x3000 + hankana2zenhira_table[c - 0xff60]; + } + } + + if (mode & MBFL_FILT_TL_HAN2ZEN_COMPAT1) { + /* special ascii to symbol */ + if (c == 0x5c) { + s = 0xffe5; /* FULLWIDTH YEN SIGN */ + } else if (c == 0xa5) { /* YEN SIGN */ + s = 0xffe5; /* FULLWIDTH YEN SIGN */ + } else if (c == 0x7e) { + s = 0xffe3; /* FULLWIDTH MACRON */ + } else if (c == 0x203e) { /* OVERLINE */ + s = 0xffe3; /* FULLWIDTH MACRON */ + } else if (c == 0x27) { + s = 0x2019; /* RIGHT SINGLE QUOTATION MARK */ + } else if (c == 0x22) { + s = 0x201d; /* RIGHT DOUBLE QUOTATION MARK */ + } + } else if (mode & MBFL_FILT_TL_HAN2ZEN_COMPAT2) { + /* special ascii to symbol */ + if (c == 0x5c) { + s = 0xff3c; /* FULLWIDTH REVERSE SOLIDUS */ + } else if (c == 0x7e) { + s = 0xff5e; /* FULLWIDTH TILDE */ + } else if (c == 0x27) { + s = 0xff07; /* FULLWIDTH APOSTROPHE */ + } else if (c == 0x22) { + s = 0xff02; /* FULLWIDTH QUOTATION MARK */ + } + } + + if (mode & 0xf0) { /* zenkaku to hankaku */ + if ((mode & 0x10) && c >= 0xff01 && c <= 0xff5d && c != 0xff02 && c != 0xff07 && c!= 0xff3c) { /* all except <"> <'> <\> <~> */ + s = c - 0xfee0; + } else if ((mode & 0x20) && ((c >= 0xff21 && c <= 0xff3a) || (c >= 0xff41 && c <= 0xff5a))) { /* alpha */ + s = c - 0xfee0; + } else if ((mode & 0x40) && (c >= 0xff10 && c <= 0xff19)) { /* num */ + s = c - 0xfee0; + } else if ((mode & 0x80) && (c == 0x3000)) { /* spase */ + s = 0x20; + } else if ((mode & 0x10) && (c == 0x2212)) { /* MINUS SIGN */ + s = 0x2d; + } + } + + if (mode & + (MBFL_FILT_TL_ZEN2HAN_KATAKANA | MBFL_FILT_TL_ZEN2HAN_HIRAGANA)) { + /* Zenkaku kana to hankaku kana */ + if ((mode & MBFL_FILT_TL_ZEN2HAN_KATAKANA) && + c >= 0x30a1 && c <= 0x30f4) { + /* Zenkaku katakana to hankaku kana */ + n = c - 0x30a1; + if (zenkana2hankana_table[n][1] != 0) { + (filt->output_function)(0xff00 + zenkana2hankana_table[n][0], filt->data); + s = 0xff00 + zenkana2hankana_table[n][1]; + } else { + s = 0xff00 + zenkana2hankana_table[n][0]; + } + } else if ((mode & MBFL_FILT_TL_ZEN2HAN_HIRAGANA) && + c >= 0x3041 && c <= 0x3093) { + /* Zenkaku hirangana to hankaku kana */ + n = c - 0x3041; + if (zenkana2hankana_table[n][1] != 0) { + (filt->output_function)(0xff00 + zenkana2hankana_table[n][0], filt->data); + s = 0xff00 + zenkana2hankana_table[n][1]; + } else { + s = 0xff00 + zenkana2hankana_table[n][0]; + } + } else if (c == 0x3001) { + s = 0xff64; /* HALFWIDTH IDEOGRAPHIC COMMA */ + } else if (c == 0x3002) { + s = 0xff61; /* HALFWIDTH IDEOGRAPHIC FULL STOP */ + } else if (c == 0x300c) { + s = 0xff62; /* HALFWIDTH LEFT CORNER BRACKET */ + } else if (c == 0x300d) { + s = 0xff63; /* HALFWIDTH RIGHT CORNER BRACKET */ + } else if (c == 0x309b) { + s = 0xff9e; /* HALFWIDTH KATAKANA VOICED SOUND MARK */ + } else if (c == 0x309c) { + s = 0xff9f; /* HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK */ + } else if (c == 0x30fc) { + s = 0xff70; /* HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK */ + } else if (c == 0x30fb) { + s = 0xff65; /* HALFWIDTH KATAKANA MIDDLE DOT */ + } + } else if (mode & (MBFL_FILT_TL_ZEN2HAN_HIRA2KANA + | MBFL_FILT_TL_ZEN2HAN_KANA2HIRA)) { + if ((mode & MBFL_FILT_TL_ZEN2HAN_HIRA2KANA) && + c >= 0x3041 && c <= 0x3093) { + /* Zenkaku hirangana to Zenkaku katakana */ + s = c + 0x60; + } else if ((mode & MBFL_FILT_TL_ZEN2HAN_KANA2HIRA) && + c >= 0x30a1 && c <= 0x30f3) { + /* Zenkaku katakana to Zenkaku hirangana */ + s = c - 0x60; + } + } + + if (mode & MBFL_FILT_TL_ZEN2HAN_COMPAT1) { /* special symbol to ascii */ + if (c == 0xffe5) { /* FULLWIDTH YEN SIGN */ + s = 0x5c; + } else if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + s = 0x5c; + } else if (c == 0xffe3) { /* FULLWIDTH MACRON */ + s = 0x7e; + } else if (c == 0x203e) { /* OVERLINE */ + s = 0x7e; + } else if (c == 0x2018) { /* LEFT SINGLE QUOTATION MARK*/ + s = 0x27; + } else if (c == 0x2019) { /* RIGHT SINGLE QUOTATION MARK */ + s = 0x27; + } else if (c == 0x201c) { /* LEFT DOUBLE QUOTATION MARK */ + s = 0x22; + } else if (c == 0x201d) { /* RIGHT DOUBLE QUOTATION MARK */ + s = 0x22; + } + } + + if (mode & MBFL_FILT_TL_ZEN2HAN_COMPAT2) { /* special symbol to ascii */ + if (c == 0xff3c) { /* FULLWIDTH REVERSE SOLIDUS */ + s = 0x5c; + } else if (c == 0xff5e) { /* FULLWIDTH TILDE */ + s = 0x7e; + } else if (c == 0xff07) { /* FULLWIDTH APOSTROPHE */ + s = 0x27; + } else if (c == 0xff02) { /* FULLWIDTH QUOTATION MARK */ + s = 0x22; + } + } + + return (*filt->output_function)(s, filt->data); +} + +int +mbfl_filt_tl_jisx0201_jisx0208_flush(mbfl_convert_filter *filt) +{ + int ret, n; + int mode = ((mbfl_filt_tl_jisx0201_jisx0208_param *)filt->opaque)->mode; + + ret = 0; + if (filt->status) { + n = (filt->cache - 0xff60) & 0x3f; + if (mode & 0x100) { /* hankaku kana to zenkaku katakana */ + ret = (*filt->output_function)(0x3000 + hankana2zenkana_table[n], filt->data); + } else if (mode & 0x200) { /* hankaku kana to zenkaku hirangana */ + ret = (*filt->output_function)(0x3000 + hankana2zenhira_table[n], filt->data); + } + filt->status = 0; + } + + if (filt->flush_function != NULL) { + return (*filt->flush_function)(filt->data); + } + + return ret; +} + +const struct mbfl_convert_vtbl vtbl_tl_jisx0201_jisx0208 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_wchar, + mbfl_filt_tl_jisx0201_jisx0208_init, + mbfl_filt_tl_jisx0201_jisx0208_cleanup, + mbfl_filt_tl_jisx0201_jisx0208, + mbfl_filt_tl_jisx0201_jisx0208_flush +}; + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_tl_jisx0201_jisx0208.h b/ext/mbstring/libmbfl/filters/mbfilter_tl_jisx0201_jisx0208.h new file mode 100644 index 0000000..b52b38e --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_tl_jisx0201_jisx0208.h @@ -0,0 +1,79 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: Moriyoshi Koizumi <koizumi@gree.co.jp> + * + */ + +#ifndef MBFILTER_TL_KANA_JISX0201_JISX0208_H +#define MBFILTER_TL_KANA_JISX0201_JISX0208_H + +#include "mbfl_convert.h" + +#define MBFL_FILT_TL_HAN2ZEN_ALL 0x00000001 +#define MBFL_FILT_TL_HAN2ZEN_ALPHA 0x00000002 +#define MBFL_FILT_TL_HAN2ZEN_NUMERIC 0x00000004 +#define MBFL_FILT_TL_HAN2ZEN_SPACE 0x00000008 +#define MBFL_FILT_TL_ZEN2HAN_ALL 0x00000010 +#define MBFL_FILT_TL_ZEN2HAN_ALPHA 0x00000020 +#define MBFL_FILT_TL_ZEN2HAN_NUMERIC 0x00000040 +#define MBFL_FILT_TL_ZEN2HAN_SPACE 0x00000080 +#define MBFL_FILT_TL_HAN2ZEN_KATAKANA 0x00000100 +#define MBFL_FILT_TL_HAN2ZEN_HIRAGANA 0x00000200 +#define MBFL_FILT_TL_HAN2ZEN_GLUE 0x00000800 +#define MBFL_FILT_TL_ZEN2HAN_KATAKANA 0x00001000 +#define MBFL_FILT_TL_ZEN2HAN_HIRAGANA 0x00002000 +#define MBFL_FILT_TL_ZEN2HAN_HIRA2KANA 0x00010000 +#define MBFL_FILT_TL_ZEN2HAN_KANA2HIRA 0x00020000 +#define MBFL_FILT_TL_HAN2ZEN_COMPAT1 0x00100000 +#define MBFL_FILT_TL_ZEN2HAN_COMPAT1 0x00200000 +#define MBFL_FILT_TL_HAN2ZEN_COMPAT2 0x00400000 +#define MBFL_FILT_TL_ZEN2HAN_COMPAT2 0x00800000 +#define MBFL_FILT_TL_HAN2ZEN_MASK ( \ + MBFL_FILT_TL_HAN2ZEN_ALL |\ + MBFL_FILT_TL_HAN2ZEN_ALPHA |\ + MBFL_FILT_TL_HAN2ZEN_NUMERIC |\ + MBFL_FILT_TL_HAN2ZEN_SPACE |\ + MBFL_FILT_TL_HAN2ZEN_KATAKANA |\ + MBFL_FILT_TL_HAN2ZEN_HIRAGANA |\ + MBFL_FILT_TL_HAN2ZEN_GLUE |\ + MBFL_FILT_TL_HAN2ZEN_COMPAT1 |\ + MBFL_FILT_TL_HAN2ZEN_COMPAT2) +#define MBFL_FILT_TL_ZEN2HAN_MASK ( \ + MBFL_FILT_TL_ZEN2HAN_ALL | \ + MBFL_FILT_TL_ZEN2HAN_ALPHA | \ + MBFL_FILT_TL_ZEN2HAN_NUMERIC | \ + MBFL_FILT_TL_ZEN2HAN_SPACE | \ + MBFL_FILT_TL_ZEN2HAN_KATAKANA | \ + MBFL_FILT_TL_ZEN2HAN_HIRAGANA | \ + MBFL_FILT_TL_ZEN2HAN_HIRA2KANA | \ + MBFL_FILT_TL_ZEN2HAN_KANA2HIRA | \ + MBFL_FILT_TL_ZEN2HAN_COMPAT1 | \ + MBFL_FILT_TL_ZEN2HAN_COMPAT2) + + +typedef struct _mbfl_filt_tl_jisx0201_jisx0208_param { + mbfl_convert_filter *next_filter; + int mode; +} mbfl_filt_tl_jisx0201_jisx0208_param; + +extern const struct mbfl_convert_vtbl vtbl_tl_jisx0201_jisx0208; + +#endif /* MBFILTER_TL_KANA_JISX0201_JISX0208_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c b/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c new file mode 100644 index 0000000..4d83af0 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c @@ -0,0 +1,238 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_ucs2.h" + +static const char *mbfl_encoding_ucs2_aliases[] = {"ISO-10646-UCS-2", "UCS2" , "UNICODE", NULL}; + +const mbfl_encoding mbfl_encoding_ucs2 = { + mbfl_no_encoding_ucs2, + "UCS-2", + "UCS-2", + (const char *(*)[])&mbfl_encoding_ucs2_aliases, + NULL, + MBFL_ENCTYPE_WCS2BE +}; + +const mbfl_encoding mbfl_encoding_ucs2be = { + mbfl_no_encoding_ucs2be, + "UCS-2BE", + "UCS-2BE", + NULL, + NULL, + MBFL_ENCTYPE_WCS2BE +}; + +const mbfl_encoding mbfl_encoding_ucs2le = { + mbfl_no_encoding_ucs2le, + "UCS-2LE", + "UCS-2LE", + NULL, + NULL, + MBFL_ENCTYPE_WCS2LE +}; + +const struct mbfl_convert_vtbl vtbl_ucs2_wchar = { + mbfl_no_encoding_ucs2, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_ucs2_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_ucs2 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_ucs2, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_ucs2be, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_ucs2be_wchar = { + mbfl_no_encoding_ucs2be, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_ucs2be_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_ucs2be = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_ucs2be, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_ucs2be, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_ucs2le_wchar = { + mbfl_no_encoding_ucs2le, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_ucs2le_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_ucs2le = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_ucs2le, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_ucs2le, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * UCS-2 => wchar + */ +int mbfl_filt_conv_ucs2_wchar(int c, mbfl_convert_filter *filter) +{ + int n, endian; + + endian = filter->status & 0xff00; + switch (filter->status & 0xff) { + case 0: + if (endian) { + n = c & 0xff; + } else { + n = (c & 0xff) << 8; + } + filter->cache = n; + filter->status++; + break; + default: + if (endian) { + n = (c & 0xff) << 8; + } else { + n = c & 0xff; + } + n |= filter->cache; + if (n == 0xfffe) { + if (endian) { + filter->status = 0; /* big-endian */ + } else { + filter->status = 0x100; /* little-endian */ + } + CK((*filter->output_function)(0xfeff, filter->data)); + } else { + filter->status &= ~0xff; + CK((*filter->output_function)(n, filter->data)); + } + break; + } + + return c; +} + +/* + * UCS-2BE => wchar + */ +int mbfl_filt_conv_ucs2be_wchar(int c, mbfl_convert_filter *filter) +{ + int n; + + if (filter->status == 0) { + filter->status = 1; + n = (c & 0xff) << 8; + filter->cache = n; + } else { + filter->status = 0; + n = (c & 0xff) | filter->cache; + CK((*filter->output_function)(n, filter->data)); + } + return c; +} + +/* + * wchar => UCS-2BE + */ +int mbfl_filt_conv_wchar_ucs2be(int c, mbfl_convert_filter *filter) +{ + if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) { + CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(c & 0xff, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +/* + * UCS-2LE => wchar + */ +int mbfl_filt_conv_ucs2le_wchar(int c, mbfl_convert_filter *filter) +{ + int n; + + if (filter->status == 0) { + filter->status = 1; + n = c & 0xff; + filter->cache = n; + } else { + filter->status = 0; + n = ((c & 0xff) << 8) | filter->cache; + CK((*filter->output_function)(n, filter->data)); + } + return c; +} + + +/* + * wchar => UCS-2LE + */ +int mbfl_filt_conv_wchar_ucs2le(int c, mbfl_convert_filter *filter) +{ + if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) { + CK((*filter->output_function)(c & 0xff, filter->data)); + CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ucs2.h b/ext/mbstring/libmbfl/filters/mbfilter_ucs2.h new file mode 100644 index 0000000..6dd1e65 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_ucs2.h @@ -0,0 +1,51 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_UCS2_H +#define MBFL_MBFILTER_UCS2_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_ucs2; +extern const mbfl_encoding mbfl_encoding_ucs2be; +extern const mbfl_encoding mbfl_encoding_ucs2le; +extern const struct mbfl_convert_vtbl vtbl_ucs2_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_ucs2; +extern const struct mbfl_convert_vtbl vtbl_ucs2be_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_ucs2be; +extern const struct mbfl_convert_vtbl vtbl_ucs2le_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_ucs2le; + +int mbfl_filt_conv_ucs2_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_ucs2be_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_ucs2be(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_ucs2le_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_ucs2le(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_UCS2_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c b/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c new file mode 100644 index 0000000..12a2033 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c @@ -0,0 +1,275 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_ucs4.h" + +static const char *mbfl_encoding_ucs4_aliases[] = {"ISO-10646-UCS-4", "UCS4", NULL}; + +const mbfl_encoding mbfl_encoding_ucs4 = { + mbfl_no_encoding_ucs4, + "UCS-4", + "UCS-4", + (const char *(*)[])&mbfl_encoding_ucs4_aliases, + NULL, + MBFL_ENCTYPE_WCS4BE +}; + +const mbfl_encoding mbfl_encoding_ucs4be = { + mbfl_no_encoding_ucs4be, + "UCS-4BE", + "UCS-4BE", + NULL, + NULL, + MBFL_ENCTYPE_WCS4BE +}; + +const mbfl_encoding mbfl_encoding_ucs4le = { + mbfl_no_encoding_ucs4le, + "UCS-4LE", + "UCS-4LE", + NULL, + NULL, + MBFL_ENCTYPE_WCS4LE +}; + +const struct mbfl_convert_vtbl vtbl_ucs4_wchar = { + mbfl_no_encoding_ucs4, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_ucs4_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_ucs4 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_ucs4, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_ucs4be, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_ucs4be_wchar = { + mbfl_no_encoding_ucs4be, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_ucs4be_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_ucs4be = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_ucs4be, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_ucs4be, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_ucs4le_wchar = { + mbfl_no_encoding_ucs4le, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_ucs4le_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_ucs4le = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_ucs4le, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_ucs4le, + mbfl_filt_conv_common_flush +}; + + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * UCS-4 => wchar + */ +int mbfl_filt_conv_ucs4_wchar(int c, mbfl_convert_filter *filter) +{ + int n, endian; + + endian = filter->status & 0xff00; + switch (filter->status & 0xff) { + case 0: + if (endian) { + n = c & 0xff; + } else { + n = (c & 0xff) << 24; + } + filter->cache = n; + filter->status++; + break; + case 1: + if (endian) { + n = (c & 0xff) << 8; + } else { + n = (c & 0xff) << 16; + } + filter->cache |= n; + filter->status++; + break; + case 2: + if (endian) { + n = (c & 0xff) << 16; + } else { + n = (c & 0xff) << 8; + } + filter->cache |= n; + filter->status++; + break; + default: + if (endian) { + n = (c & 0xff) << 24; + } else { + n = c & 0xff; + } + n |= filter->cache; + if ((n & 0xffff) == 0 && ((n >> 16) & 0xffff) == 0xfffe) { + if (endian) { + filter->status = 0; /* big-endian */ + } else { + filter->status = 0x100; /* little-endian */ + } + CK((*filter->output_function)(0xfeff, filter->data)); + } else { + filter->status &= ~0xff; + CK((*filter->output_function)(n, filter->data)); + } + break; + } + + return c; +} + +/* + * UCS-4BE => wchar + */ +int mbfl_filt_conv_ucs4be_wchar(int c, mbfl_convert_filter *filter) +{ + int n; + + if (filter->status == 0) { + filter->status = 1; + n = (c & 0xff) << 24; + filter->cache = n; + } else if (filter->status == 1) { + filter->status = 2; + n = (c & 0xff) << 16; + filter->cache |= n; + } else if (filter->status == 2) { + filter->status = 3; + n = (c & 0xff) << 8; + filter->cache |= n; + } else { + filter->status = 0; + n = (c & 0xff) | filter->cache; + CK((*filter->output_function)(n, filter->data)); + } + return c; +} + +/* + * wchar => UCS-4BE + */ +int mbfl_filt_conv_wchar_ucs4be(int c, mbfl_convert_filter *filter) +{ + if (c >= 0 && c < MBFL_WCSGROUP_UCS4MAX) { + CK((*filter->output_function)((c >> 24) & 0xff, filter->data)); + CK((*filter->output_function)((c >> 16) & 0xff, filter->data)); + CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(c & 0xff, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +/* + * UCS-4LE => wchar + */ +int mbfl_filt_conv_ucs4le_wchar(int c, mbfl_convert_filter *filter) +{ + int n; + + if (filter->status == 0) { + filter->status = 1; + n = (c & 0xff); + filter->cache = n; + } else if (filter->status == 1) { + filter->status = 2; + n = (c & 0xff) << 8; + filter->cache |= n; + } else if (filter->status == 2) { + filter->status = 3; + n = (c & 0xff) << 16; + filter->cache |= n; + } else { + filter->status = 0; + n = ((c & 0xff) << 24) | filter->cache; + CK((*filter->output_function)(n, filter->data)); + } + return c; +} + +/* + * wchar => UCS-4LE + */ +int mbfl_filt_conv_wchar_ucs4le(int c, mbfl_convert_filter *filter) +{ + if (c >= 0 && c < MBFL_WCSGROUP_UCS4MAX) { + CK((*filter->output_function)(c & 0xff, filter->data)); + CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); + CK((*filter->output_function)((c >> 16) & 0xff, filter->data)); + CK((*filter->output_function)((c >> 24) & 0xff, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ucs4.h b/ext/mbstring/libmbfl/filters/mbfilter_ucs4.h new file mode 100644 index 0000000..718c7e1 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_ucs4.h @@ -0,0 +1,49 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_UCS4_H +#define MBFL_MBFILTER_UCS4_H + +extern const mbfl_encoding mbfl_encoding_ucs4; +extern const mbfl_encoding mbfl_encoding_ucs4le; +extern const mbfl_encoding mbfl_encoding_ucs4be; +extern const struct mbfl_convert_vtbl vtbl_ucs4_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_ucs4; +extern const struct mbfl_convert_vtbl vtbl_ucs4be_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_ucs4be; +extern const struct mbfl_convert_vtbl vtbl_ucs4le_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_ucs4le; + +int mbfl_filt_conv_ucs4_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_ucs4be_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_ucs4be(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_ucs4le_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_ucs4le(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_UCS4_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_uhc.c b/ext/mbstring/libmbfl/filters/mbfilter_uhc.c new file mode 100644 index 0000000..86765b2 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_uhc.c @@ -0,0 +1,267 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_kr.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_uhc.h" +#define UNICODE_TABLE_UHC_DEF +#include "unicode_table_uhc.h" + +static int mbfl_filt_ident_uhc(int c, mbfl_identify_filter *filter); + +static const unsigned char mblen_table_uhc[] = { /* 0x81-0xFE */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 +}; + +static const char *mbfl_encoding_uhc_aliases[] = {"CP949", NULL}; + +const mbfl_encoding mbfl_encoding_uhc = { + mbfl_no_encoding_uhc, + "UHC", + "UHC", + (const char *(*)[])&mbfl_encoding_uhc_aliases, + mblen_table_uhc, + MBFL_ENCTYPE_MBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_uhc = { + mbfl_no_encoding_uhc, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_uhc +}; + +const struct mbfl_convert_vtbl vtbl_uhc_wchar = { + mbfl_no_encoding_uhc, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_uhc_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_uhc = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_uhc, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_uhc, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * UHC => wchar + */ +int +mbfl_filt_conv_uhc_wchar(int c, mbfl_convert_filter *filter) +{ + int c1, w = 0, flag = 0; + + switch (filter->status) { + case 0: + if (c >= 0 && c < 0x80) { /* latin */ + CK((*filter->output_function)(c, filter->data)); + } else if (c > 0x80 && c < 0xff && c != 0xc9) { /* dbcs lead byte */ + filter->status = 1; + filter->cache = c; + } else { + w = c & MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + break; + + case 1: /* dbcs second byte */ + filter->status = 0; + c1 = filter->cache; + + if ( c1 >= 0x81 && c1 <= 0xa0){ + w = (c1 - 0x81)*190 + (c - 0x41); + if (w >= 0 && w < uhc1_ucs_table_size) { + flag = 1; + w = uhc1_ucs_table[w]; + } else { + w = 0; + } + } else if ( c1 >= 0xa1 && c1 <= 0xc6){ + w = (c1 - 0xa1)*190 + (c - 0x41); + if (w >= 0 && w < uhc2_ucs_table_size) { + flag = 2; + w = uhc2_ucs_table[w]; + } else { + w = 0; + } + } else if ( c1 >= 0xc7 && c1 <= 0xfe){ + w = (c1 - 0xc7)*94 + (c - 0xa1); + if (w >= 0 && w < uhc3_ucs_table_size) { + flag = 3; + w = uhc3_ucs_table[w]; + } else { + w = 0; + } + } + if (flag > 0){ + if (w <= 0) { + w = (c1 << 8) | c; + w &= MBFL_WCSPLANE_MASK; + w |= MBFL_WCSPLANE_UHC; + } + CK((*filter->output_function)(w, filter->data)); + } else { + if ((c >= 0 && c < 0x21) || c == 0x7f) { /* CTLs */ + CK((*filter->output_function)(c, filter->data)); + } else { + w = (c1 << 8) | c; + w &= MBFL_WCSGROUP_MASK; + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + } + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => UHC + */ +int +mbfl_filt_conv_wchar_uhc(int c, mbfl_convert_filter *filter) +{ + int c1, s; + + s = 0; + if (c >= ucs_a1_uhc_table_min && c < ucs_a1_uhc_table_max) { + s = ucs_a1_uhc_table[c - ucs_a1_uhc_table_min]; + } else if (c >= ucs_a2_uhc_table_min && c < ucs_a2_uhc_table_max) { + s = ucs_a2_uhc_table[c - ucs_a2_uhc_table_min]; + } else if (c >= ucs_a3_uhc_table_min && c < ucs_a3_uhc_table_max) { + s = ucs_a3_uhc_table[c - ucs_a3_uhc_table_min]; + } else if (c >= ucs_i_uhc_table_min && c < ucs_i_uhc_table_max) { + s = ucs_i_uhc_table[c - ucs_i_uhc_table_min]; + } else if (c >= ucs_s_uhc_table_min && c < ucs_s_uhc_table_max) { + s = ucs_s_uhc_table[c - ucs_s_uhc_table_min]; + } else if (c >= ucs_r1_uhc_table_min && c < ucs_r1_uhc_table_max) { + s = ucs_r1_uhc_table[c - ucs_r1_uhc_table_min]; + } else if (c >= ucs_r2_uhc_table_min && c < ucs_r2_uhc_table_max) { + s = ucs_r2_uhc_table[c - ucs_r2_uhc_table_min]; + } + if (s <= 0) { + c1 = c & ~MBFL_WCSPLANE_MASK; + if (c1 == MBFL_WCSPLANE_UHC) { + s = c & MBFL_WCSPLANE_MASK; + } + if (c == 0) { + s = 0; + } else if (s <= 0) { + s = -1; + } + } + if (s >= 0) { + if (s < 0x80) { /* latin */ + CK((*filter->output_function)(s, filter->data)); + } else { + CK((*filter->output_function)((s >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(s & 0xff, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +static int mbfl_filt_ident_uhc(int c, mbfl_identify_filter *filter) +{ + switch (filter->status) { + case 0: /* latin */ + if (c >= 0 && c < 0x80) { /* ok */ + ; + } else if (c >= 0x81 && c <= 0xa0) { /* dbcs first char */ + filter->status= 1; + } else if (c >= 0xa1 && c <= 0xc6) { /* dbcs first char */ + filter->status= 2; + } else if (c >= 0xc7 && c <= 0xfe) { /* dbcs first char */ + filter->status= 3; + } else { /* bad */ + filter->flag = 1; + } + + case 1: + case 2: + if (c < 0x41 || (c > 0x5a && c < 0x61) + || (c > 0x7a && c < 0x81) || c > 0xfe) { /* bad */ + filter->flag = 1; + } + filter->status = 0; + break; + + case 3: + if (c < 0xa1 || c > 0xfe) { /* bad */ + filter->flag = 1; + } + filter->status = 0; + break; + + default: + filter->status = 0; + break; + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_uhc.h b/ext/mbstring/libmbfl/filters/mbfilter_uhc.h new file mode 100644 index 0000000..f964249 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_uhc.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter_kr.h + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_UHC_H +#define MBFL_MBFILTER_UHC_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_uhc; +extern const struct mbfl_identify_vtbl vtbl_identify_uhc; +extern const struct mbfl_convert_vtbl vtbl_uhc_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_uhc; + +int mbfl_filt_conv_uhc_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_uhc(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_UHC_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf16.c b/ext/mbstring/libmbfl/filters/mbfilter_utf16.c new file mode 100644 index 0000000..5df6551 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf16.c @@ -0,0 +1,316 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_utf16.h" + +static const char *mbfl_encoding_utf16_aliases[] = {"utf16", NULL}; + +const mbfl_encoding mbfl_encoding_utf16 = { + mbfl_no_encoding_utf16, + "UTF-16", + "UTF-16", + (const char *(*)[])&mbfl_encoding_utf16_aliases, + NULL, + MBFL_ENCTYPE_MWC2BE +}; + +const mbfl_encoding mbfl_encoding_utf16be = { + mbfl_no_encoding_utf16be, + "UTF-16BE", + "UTF-16BE", + NULL, + NULL, + MBFL_ENCTYPE_MWC2BE +}; + +const mbfl_encoding mbfl_encoding_utf16le = { + mbfl_no_encoding_utf16le, + "UTF-16LE", + "UTF-16LE", + NULL, + NULL, + MBFL_ENCTYPE_MWC2LE +}; + +const struct mbfl_convert_vtbl vtbl_utf16_wchar = { + mbfl_no_encoding_utf16, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_utf16_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_utf16 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_utf16, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_utf16be, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_utf16be_wchar = { + mbfl_no_encoding_utf16be, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_utf16be_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_utf16be = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_utf16be, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_utf16be, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_utf16le_wchar = { + mbfl_no_encoding_utf16le, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_utf16le_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_utf16le = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_utf16le, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_utf16le, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * UTF-16 => wchar + */ +int mbfl_filt_conv_utf16_wchar(int c, mbfl_convert_filter *filter) +{ + int n, endian; + + endian = filter->status & 0xff00; + switch (filter->status & 0x0f) { + case 0: + if (endian) { + n = c & 0xff; + } else { + n = (c & 0xff) << 8; + } + filter->cache |= n; + filter->status++; + break; + default: + if (endian) { + n = (c & 0xff) << 8; + } else { + n = c & 0xff; + } + n |= filter->cache & 0xffff; + filter->status &= ~0x0f; + if (n >= 0xd800 && n < 0xdc00) { + filter->cache = ((n & 0x3ff) << 16) + 0x400000; + } else if (n >= 0xdc00 && n < 0xe000) { + n &= 0x3ff; + n |= (filter->cache & 0xfff0000) >> 6; + filter->cache = 0; + if (n >= MBFL_WCSPLANE_SUPMIN && n < MBFL_WCSPLANE_SUPMAX) { + CK((*filter->output_function)(n, filter->data)); + } else { /* illegal character */ + n &= MBFL_WCSGROUP_MASK; + n |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(n, filter->data)); + } + } else { + int is_first = filter->status & 0x10; + filter->cache = 0; + filter->status |= 0x10; + if (!is_first) { + if (n == 0xfffe) { + if (endian) { + filter->status &= ~0x100; /* big-endian */ + } else { + filter->status |= 0x100; /* little-endian */ + } + break; + } else if (n == 0xfeff) { + break; + } + } + CK((*filter->output_function)(n, filter->data)); + } + break; + } + + return c; +} + +/* + * UTF-16BE => wchar + */ +int mbfl_filt_conv_utf16be_wchar(int c, mbfl_convert_filter *filter) +{ + int n; + + switch (filter->status) { + case 0: + filter->status = 1; + n = (c & 0xff) << 8; + filter->cache |= n; + break; + default: + filter->status = 0; + n = (filter->cache & 0xff00) | (c & 0xff); + if (n >= 0xd800 && n < 0xdc00) { + filter->cache = ((n & 0x3ff) << 16) + 0x400000; + } else if (n >= 0xdc00 && n < 0xe000) { + n &= 0x3ff; + n |= (filter->cache & 0xfff0000) >> 6; + filter->cache = 0; + if (n >= MBFL_WCSPLANE_SUPMIN && n < MBFL_WCSPLANE_SUPMAX) { + CK((*filter->output_function)(n, filter->data)); + } else { /* illegal character */ + n &= MBFL_WCSGROUP_MASK; + n |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(n, filter->data)); + } + } else { + filter->cache = 0; + CK((*filter->output_function)(n, filter->data)); + } + break; + } + + return c; +} + +/* + * wchar => UTF-16BE + */ +int mbfl_filt_conv_wchar_utf16be(int c, mbfl_convert_filter *filter) +{ + int n; + + if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) { + CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(c & 0xff, filter->data)); + } else if (c >= MBFL_WCSPLANE_SUPMIN && c < MBFL_WCSPLANE_SUPMAX) { + n = ((c >> 10) - 0x40) | 0xd800; + CK((*filter->output_function)((n >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(n & 0xff, filter->data)); + n = (c & 0x3ff) | 0xdc00; + CK((*filter->output_function)((n >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(n & 0xff, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +/* + * UTF-16LE => wchar + */ +int mbfl_filt_conv_utf16le_wchar(int c, mbfl_convert_filter *filter) +{ + int n; + + switch (filter->status) { + case 0: + filter->status = 1; + n = c & 0xff; + filter->cache |= n; + break; + default: + filter->status = 0; + n = (filter->cache & 0xff) | ((c & 0xff) << 8); + if (n >= 0xd800 && n < 0xdc00) { + filter->cache = ((n & 0x3ff) << 16) + 0x400000; + } else if (n >= 0xdc00 && n < 0xe000) { + n &= 0x3ff; + n |= (filter->cache & 0xfff0000) >> 6; + filter->cache = 0; + if (n >= MBFL_WCSPLANE_SUPMIN && n < MBFL_WCSPLANE_SUPMAX) { + CK((*filter->output_function)(n, filter->data)); + } else { /* illegal character */ + n &= MBFL_WCSGROUP_MASK; + n |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(n, filter->data)); + } + } else { + filter->cache = 0; + CK((*filter->output_function)(n, filter->data)); + } + break; + } + + return c; +} + +/* + * wchar => UTF-16LE + */ +int mbfl_filt_conv_wchar_utf16le(int c, mbfl_convert_filter *filter) +{ + int n; + + if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) { + CK((*filter->output_function)(c & 0xff, filter->data)); + CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); + } else if (c >= MBFL_WCSPLANE_SUPMIN && c < MBFL_WCSPLANE_SUPMAX) { + n = ((c >> 10) - 0x40) | 0xd800; + CK((*filter->output_function)(n & 0xff, filter->data)); + CK((*filter->output_function)((n >> 8) & 0xff, filter->data)); + n = (c & 0x3ff) | 0xdc00; + CK((*filter->output_function)(n & 0xff, filter->data)); + CK((*filter->output_function)((n >> 8) & 0xff, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf16.h b/ext/mbstring/libmbfl/filters/mbfilter_utf16.h new file mode 100644 index 0000000..f54bb00 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf16.h @@ -0,0 +1,49 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_UTF16_H +#define MBFL_MBFILTER_UTF16_H + +extern const mbfl_encoding mbfl_encoding_utf16; +extern const mbfl_encoding mbfl_encoding_utf16be; +extern const mbfl_encoding mbfl_encoding_utf16le; +extern const struct mbfl_convert_vtbl vtbl_utf16_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_utf16; +extern const struct mbfl_convert_vtbl vtbl_utf16be_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_utf16be; +extern const struct mbfl_convert_vtbl vtbl_utf16le_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_utf16le; + +int mbfl_filt_conv_utf16_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_utf16be_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_utf16be(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_utf16le_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_utf16le(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_UTF16_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf32.c b/ext/mbstring/libmbfl/filters/mbfilter_utf32.c new file mode 100644 index 0000000..3cef6b0 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf32.c @@ -0,0 +1,287 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 20 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_utf32.h" + +static const char *mbfl_encoding_utf32_aliases[] = {"utf32", NULL}; + +const mbfl_encoding mbfl_encoding_utf32 = { + mbfl_no_encoding_utf32, + "UTF-32", + "UTF-32", + (const char *(*)[])&mbfl_encoding_utf32_aliases, + NULL, + MBFL_ENCTYPE_WCS4BE +}; + +const mbfl_encoding mbfl_encoding_utf32be = { + mbfl_no_encoding_utf32be, + "UTF-32BE", + "UTF-32BE", + NULL, + NULL, + MBFL_ENCTYPE_WCS4BE +}; + +const mbfl_encoding mbfl_encoding_utf32le = { + mbfl_no_encoding_utf32le, + "UTF-32LE", + "UTF-32LE", + NULL, + NULL, + MBFL_ENCTYPE_WCS4LE +}; + +const struct mbfl_convert_vtbl vtbl_utf32_wchar = { + mbfl_no_encoding_utf32, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_utf32_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_utf32 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_utf32, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_utf32be, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_utf32be_wchar = { + mbfl_no_encoding_utf32be, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_utf32be_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_utf32be = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_utf32be, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_utf32be, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_utf32le_wchar = { + mbfl_no_encoding_utf32le, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_utf32le_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_utf32le = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_utf32le, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_utf32le, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * UTF-32 => wchar + */ +int mbfl_filt_conv_utf32_wchar(int c, mbfl_convert_filter *filter) +{ + int n, endian; + + endian = filter->status & 0xff00; + switch (filter->status & 0xff) { + case 0: + if (endian) { + n = c & 0xff; + } else { + n = (c & 0xff) << 24; + } + filter->cache = n; + filter->status++; + break; + case 1: + if (endian) { + n = (c & 0xff) << 8; + } else { + n = (c & 0xff) << 16; + } + filter->cache |= n; + filter->status++; + break; + case 2: + if (endian) { + n = (c & 0xff) << 16; + } else { + n = (c & 0xff) << 8; + } + filter->cache |= n; + filter->status++; + break; + default: + if (endian) { + n = (c & 0xff) << 24; + } else { + n = c & 0xff; + } + n |= filter->cache; + if ((n & 0xffff) == 0 && ((n >> 16) & 0xffff) == 0xfffe) { + if (endian) { + filter->status = 0; /* big-endian */ + } else { + filter->status = 0x100; /* little-endian */ + } + CK((*filter->output_function)(0xfeff, filter->data)); + } else { + filter->status &= ~0xff; + if (n < MBFL_WCSPLANE_UTF32MAX && (n < 0xd800 || n > 0xdfff)) { + CK((*filter->output_function)(n, filter->data)); + } else { + n = (n & MBFL_WCSGROUP_MASK) | MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(n, filter->data)); + } + } + break; + } + + return c; +} + +/* + * UTF-32BE => wchar + */ +int mbfl_filt_conv_utf32be_wchar(int c, mbfl_convert_filter *filter) +{ + int n; + + if (filter->status == 0) { + filter->status = 1; + n = (c & 0xff) << 24; + filter->cache = n; + } else if (filter->status == 1) { + filter->status = 2; + n = (c & 0xff) << 16; + filter->cache |= n; + } else if (filter->status == 2) { + filter->status = 3; + n = (c & 0xff) << 8; + filter->cache |= n; + } else { + filter->status = 0; + n = (c & 0xff) | filter->cache; + if (n < MBFL_WCSPLANE_UTF32MAX && (n < 0xd800 || n > 0xdfff)) { + CK((*filter->output_function)(n, filter->data)); + } else { + n = (n & MBFL_WCSGROUP_MASK) | MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(n, filter->data)); + } + } + return c; +} + +/* + * wchar => UTF-32BE + */ +int mbfl_filt_conv_wchar_utf32be(int c, mbfl_convert_filter *filter) +{ + if (c >= 0 && c < MBFL_WCSPLANE_UTF32MAX) { + CK((*filter->output_function)((c >> 24) & 0xff, filter->data)); + CK((*filter->output_function)((c >> 16) & 0xff, filter->data)); + CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); + CK((*filter->output_function)(c & 0xff, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +/* + * UTF-32LE => wchar + */ +int mbfl_filt_conv_utf32le_wchar(int c, mbfl_convert_filter *filter) +{ + int n; + + if (filter->status == 0) { + filter->status = 1; + n = (c & 0xff); + filter->cache = n; + } else if (filter->status == 1) { + filter->status = 2; + n = (c & 0xff) << 8; + filter->cache |= n; + } else if (filter->status == 2) { + filter->status = 3; + n = (c & 0xff) << 16; + filter->cache |= n; + } else { + filter->status = 0; + n = ((c & 0xff) << 24) | filter->cache; + if (n < MBFL_WCSPLANE_UTF32MAX && (n < 0xd800 || n > 0xdfff)) { + CK((*filter->output_function)(n, filter->data)); + } else { + n = (n & MBFL_WCSGROUP_MASK) | MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(n, filter->data)); + } + } + return c; +} + +/* + * wchar => UTF-32LE + */ +int mbfl_filt_conv_wchar_utf32le(int c, mbfl_convert_filter *filter) +{ + if (c >= 0 && c < MBFL_WCSPLANE_UTF32MAX) { + CK((*filter->output_function)(c & 0xff, filter->data)); + CK((*filter->output_function)((c >> 8) & 0xff, filter->data)); + CK((*filter->output_function)((c >> 16) & 0xff, filter->data)); + CK((*filter->output_function)((c >> 24) & 0xff, filter->data)); + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf32.h b/ext/mbstring/libmbfl/filters/mbfilter_utf32.h new file mode 100644 index 0000000..c280e9f --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf32.h @@ -0,0 +1,50 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 20 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_UTF32_H +#define MBFL_MBFILTER_UTF32_H + +extern const mbfl_encoding mbfl_encoding_utf32; +extern const mbfl_encoding mbfl_encoding_utf32be; +extern const mbfl_encoding mbfl_encoding_utf32le; +extern const struct mbfl_convert_vtbl vtbl_utf32_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_utf32; +extern const struct mbfl_convert_vtbl vtbl_utf32be_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_utf32be; +extern const struct mbfl_convert_vtbl vtbl_utf32le_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_utf32le; + +int mbfl_filt_conv_utf32_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_utf32be_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_utf32be(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_utf32le_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_utf32le(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_UTF32_H */ + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf7.c b/ext/mbstring/libmbfl/filters/mbfilter_utf7.c new file mode 100644 index 0000000..2bb1dfa --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf7.c @@ -0,0 +1,465 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_utf7.h" + +static int mbfl_filt_ident_utf7(int c, mbfl_identify_filter *filter); + +static const unsigned char mbfl_base64_table[] = { + /* 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', */ + 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d, + /* 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', */ + 0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a, + /* 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', */ + 0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d, + /* 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', */ + 0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a, + /* '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/', '\0' */ + 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2b,0x2f,0x00 +}; + +static const char *mbfl_encoding_utf7_aliases[] = {"utf7", NULL}; + +const mbfl_encoding mbfl_encoding_utf7 = { + mbfl_no_encoding_utf7, + "UTF-7", + "UTF-7", + (const char *(*)[])&mbfl_encoding_utf7_aliases, + NULL, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE | MBFL_ENCTYPE_GL_UNSAFE +}; + +const struct mbfl_identify_vtbl vtbl_identify_utf7 = { + mbfl_no_encoding_utf7, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_utf7 +}; + +const struct mbfl_convert_vtbl vtbl_utf7_wchar = { + mbfl_no_encoding_utf7, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_utf7_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_utf7 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_utf7, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_utf7, + mbfl_filt_conv_wchar_utf7_flush +}; + + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * UTF-7 => wchar + */ +int mbfl_filt_conv_utf7_wchar(int c, mbfl_convert_filter *filter) +{ + int s, n; + + n = -1; + if (filter->status != 0) { /* Modified Base64 */ + if (c >= 0x41 && c <= 0x5a) { /* A - Z */ + n = c - 65; + } else if (c >= 0x61 && c <= 0x7a) { /* a - z */ + n = c - 71; + } else if (c >= 0x30 && c <= 0x39) { /* 0 - 9 */ + n = c + 4; + } else if (c == 0x2b) { /* '+' */ + n = 62; + } else if (c == 0x2f) { /* '/' */ + n = 63; + } + if (n < 0 || n > 63) { + if (c == 0x2d) { + if (filter->status == 1) { /* "+-" -> "+" */ + CK((*filter->output_function)(0x2b, filter->data)); + } + } else if (c >= 0 && c < 0x80) { /* ASCII exclude '-' */ + CK((*filter->output_function)(c, filter->data)); + } else { /* illegal character */ + s = c & MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(s, filter->data)); + } + filter->cache = 0; + filter->status = 0; + return c; + } + } + + switch (filter->status) { + /* directly encoded characters */ + case 0: + if (c == 0x2b) { /* '+' shift character */ + filter->status = 1; + } else if (c >= 0 && c < 0x80) { /* ASCII */ + CK((*filter->output_function)(c, filter->data)); + } else { /* illegal character */ + s = c & MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(s, filter->data)); + } + break; + + /* decode Modified Base64 */ + case 1: + case 2: + filter->cache |= n << 10; + filter->status = 3; + break; + case 3: + filter->cache |= n << 4; + filter->status = 4; + break; + case 4: + s = ((n >> 2) & 0xf) | (filter->cache & 0xffff); + n = (n & 0x3) << 14; + filter->status = 5; + if (s >= 0xd800 && s < 0xdc00) { + s = (((s & 0x3ff) << 16) + 0x400000) | n; + filter->cache = s; + } else if (s >= 0xdc00 && s < 0xe000) { + s &= 0x3ff; + s |= (filter->cache & 0xfff0000) >> 6; + filter->cache = n; + if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) { + CK((*filter->output_function)(s, filter->data)); + } else { /* illegal character */ + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(s, filter->data)); + } + } else { + filter->cache = n; + CK((*filter->output_function)(s, filter->data)); + } + break; + + case 5: + filter->cache |= n << 8; + filter->status = 6; + break; + case 6: + filter->cache |= n << 2; + filter->status = 7; + break; + case 7: + s = ((n >> 4) & 0x3) | (filter->cache & 0xffff); + n = (n & 0xf) << 12; + filter->status = 8; + if (s >= 0xd800 && s < 0xdc00) { + s = (((s & 0x3ff) << 16) + 0x400000) | n; + filter->cache = s; + } else if (s >= 0xdc00 && s < 0xe000) { + s &= 0x3ff; + s |= (filter->cache & 0xfff0000) >> 6; + filter->cache = n; + if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) { + CK((*filter->output_function)(s, filter->data)); + } else { /* illegal character */ + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(s, filter->data)); + } + } else { + filter->cache = n; + CK((*filter->output_function)(s, filter->data)); + } + break; + + case 8: + filter->cache |= n << 6; + filter->status = 9; + break; + case 9: + s = n | (filter->cache & 0xffff); + filter->status = 2; + if (s >= 0xd800 && s < 0xdc00) { + s = (((s & 0x3ff) << 16) + 0x400000); + filter->cache = s; + } else if (s >= 0xdc00 && s < 0xe000) { + s &= 0x3ff; + s |= (filter->cache & 0xfff0000) >> 6; + filter->cache = 0; + if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) { + CK((*filter->output_function)(s, filter->data)); + } else { /* illegal character */ + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(s, filter->data)); + } + } else { + filter->cache = 0; + CK((*filter->output_function)(s, filter->data)); + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +/* + * wchar => UTF-7 + */ +int mbfl_filt_conv_wchar_utf7(int c, mbfl_convert_filter *filter) +{ + int s, n; + + n = 0; + if (c >= 0 && c < 0x80) { /* ASCII */ + if (c >= 0x41 && c <= 0x5a) { /* A - Z */ + n = 1; + } else if (c >= 0x61 && c <= 0x7a) { /* a - z */ + n = 1; + } else if (c >= 0x30 && c <= 0x39) { /* 0 - 9 */ + n = 1; + } else if (c == '\0') { /* '\0' */ + n = 1; + } else if (c == 0x2f) { /* '/' */ + n = 1; + } else if (c == 0x2d) { /* '-' */ + n = 1; + } else if (c == 0x20) { /* SPACE */ + n = 2; + } else if (c == 0x09) { /* HTAB */ + n = 2; + } else if (c == 0x0d) { /* CR */ + n = 2; + } else if (c == 0x0a) { /* LF */ + n = 2; + } else if (c == 0x27) { /* "'" */ + n = 2; + } else if (c == 0x28) { /* '(' */ + n = 2; + } else if (c == 0x29) { /* ')' */ + n = 2; + } else if (c == 0x2c) { /* ',' */ + n = 2; + } else if (c == 0x2e) { /* '.' */ + n = 2; + } else if (c == 0x3a) { /* ':' */ + n = 2; + } else if (c == 0x3f) { /* '?' */ + n = 2; + } + } else if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) { + ; + } else if (c >= MBFL_WCSPLANE_SUPMIN && c < MBFL_WCSPLANE_SUPMAX) { + s = ((c >> 10) - 0x40) | 0xd800; + CK((*filter->filter_function)(s, filter)); + s = (c & 0x3ff) | 0xdc00; + CK((*filter->filter_function)(s, filter)); + return c; + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + return c; + } + + switch (filter->status) { + case 0: + if (n != 0) { /* directly encode characters */ + CK((*filter->output_function)(c, filter->data)); + } else { /* Modified Base64 */ + CK((*filter->output_function)(0x2b, filter->data)); /* '+' */ + filter->status++; + filter->cache = c; + } + break; + + /* encode Modified Base64 */ + case 1: + s = filter->cache; + CK((*filter->output_function)(mbfl_base64_table[(s >> 10) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_base64_table[(s >> 4) & 0x3f], filter->data)); + if (n != 0) { + CK((*filter->output_function)(mbfl_base64_table[(s << 2) & 0x3c], filter->data)); + if (n == 1) { + CK((*filter->output_function)(0x2d, filter->data)); /* '-' */ + } + CK((*filter->output_function)(c, filter->data)); + filter->status = 0; + } else { + filter->status++; + filter->cache = ((s & 0xf) << 16) | c; + } + break; + + case 2: + s = filter->cache; + CK((*filter->output_function)(mbfl_base64_table[(s >> 14) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_base64_table[(s >> 8) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_base64_table[(s >> 2) & 0x3f], filter->data)); + if (n != 0) { + CK((*filter->output_function)(mbfl_base64_table[(s << 4) & 0x30], filter->data)); + if (n == 1) { + CK((*filter->output_function)(0x2d, filter->data)); /* '-' */ + } + CK((*filter->output_function)(c, filter->data)); + filter->status = 0; + } else { + filter->status++; + filter->cache = ((s & 0x3) << 16) | c; + } + break; + + case 3: + s = filter->cache; + CK((*filter->output_function)(mbfl_base64_table[(s >> 12) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_base64_table[(s >> 6) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_base64_table[s & 0x3f], filter->data)); + if (n != 0) { + if (n == 1) { + CK((*filter->output_function)(0x2d, filter->data)); /* '-' */ + } + CK((*filter->output_function)(c, filter->data)); + filter->status = 0; + } else { + filter->status = 1; + filter->cache = c; + } + break; + + default: + filter->status = 0; + break; + } + + return c; + +} + +int mbfl_filt_conv_wchar_utf7_flush(mbfl_convert_filter *filter) +{ + int status, cache; + + status = filter->status; + cache = filter->cache; + filter->status = 0; + filter->cache = 0; + /* flush fragments */ + switch (status) { + case 1: + CK((*filter->output_function)(mbfl_base64_table[(cache >> 10) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_base64_table[(cache >> 4) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_base64_table[(cache << 2) & 0x3c], filter->data)); + CK((*filter->output_function)(0x2d, filter->data)); /* '-' */ + break; + + case 2: + CK((*filter->output_function)(mbfl_base64_table[(cache >> 14) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_base64_table[(cache >> 8) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_base64_table[(cache >> 2) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_base64_table[(cache << 4) & 0x30], filter->data)); + CK((*filter->output_function)(0x2d, filter->data)); /* '-' */ + break; + + case 3: + CK((*filter->output_function)(mbfl_base64_table[(cache >> 12) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_base64_table[(cache >> 6) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_base64_table[cache & 0x3f], filter->data)); + CK((*filter->output_function)(0x2d, filter->data)); /* '-' */ + break; + } + + if (filter->flush_function != NULL) { + (*filter->flush_function)(filter->data); + } + + return 0; +} + +static int mbfl_filt_ident_utf7(int c, mbfl_identify_filter *filter) +{ + int n; + + switch (filter->status) { + /* directly encoded characters */ + case 0: + if (c == 0x2b) { /* '+' shift character */ + filter->status++; + } else if (c == 0x5c || c == 0x7e || c < 0 || c > 0x7f) { /* illegal character */ + filter->flag = 1; /* bad */ + } + break; + + /* Modified Base64 */ + case 1: + case 2: + n = 0; + if (c >= 0x41 && c <= 0x5a) { /* A - Z */ + n = 1; + } else if (c >= 0x61 && c <= 0x7a) { /* a - z */ + n = 1; + } else if (c >= 0x30 && c <= 0x39) { /* 0 - 9 */ + n = 1; + } else if (c == 0x2b) { /* '+' */ + n = 1; + } else if (c == 0x2f) { /* '/' */ + n = 1; + } + if (n <= 0) { + if (filter->status == 1 && c != 0x2d) { + filter->flag = 1; /* bad */ + } else if (c < 0 || c > 0x7f) { + filter->flag = 1; /* bad */ + } + filter->status = 0; + } else { + filter->status = 2; + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf7.h b/ext/mbstring/libmbfl/filters/mbfilter_utf7.h new file mode 100644 index 0000000..0da3b02 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf7.h @@ -0,0 +1,44 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_UTF7_H +#define MBFL_MBFILTER_UTF7_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_utf7; +extern const struct mbfl_identify_vtbl vtbl_identify_utf7; +extern const struct mbfl_convert_vtbl vtbl_utf7_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_utf7; + +int mbfl_filt_conv_utf7_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_utf7(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_utf7_flush(mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_UTF7_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c b/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c new file mode 100644 index 0000000..b32095c --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c @@ -0,0 +1,372 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_utf7imap.h" + +const mbfl_encoding mbfl_encoding_utf7imap = { + mbfl_no_encoding_utf7imap, + "UTF7-IMAP", + NULL, + NULL, + NULL, + MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_SHFTCODE +}; + +const struct mbfl_convert_vtbl vtbl_utf7imap_wchar = { + mbfl_no_encoding_utf7imap, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_utf7imap_wchar, + mbfl_filt_conv_common_flush }; + +const struct mbfl_convert_vtbl vtbl_wchar_utf7imap = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_utf7imap, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_utf7imap, + mbfl_filt_conv_wchar_utf7imap_flush }; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * UTF7-IMAP => wchar + */ +int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter) +{ + int s, n; + + n = -1; + if (filter->status != 0) { /* Modified Base64 */ + if (c >= 0x41 && c <= 0x5a) { /* A - Z */ + n = c - 65; + } else if (c >= 0x61 && c <= 0x7a) { /* a - z */ + n = c - 71; + } else if (c >= 0x30 && c <= 0x39) { /* 0 - 9 */ + n = c + 4; + } else if (c == 0x2b) { /* '+' */ + n = 62; + } else if (c == 0x2c) { /* ',' */ + n = 63; + } + if (n < 0 || n > 63) { + if (c == 0x2d) { + if (filter->status == 1) { /* "&-" -> "&" */ + CK((*filter->output_function)(0x26, filter->data)); + } + } else if (c >= 0 && c < 0x80) { /* ASCII exclude '-' */ + CK((*filter->output_function)(c, filter->data)); + } else { /* illegal character */ + s = c & MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(s, filter->data)); + } + filter->cache = 0; + filter->status = 0; + return c; + } + } + + switch (filter->status) { + /* directly encoded characters */ + case 0: + if (c == 0x26) { /* '&' shift character */ + filter->status++; + } else if (c >= 0 && c < 0x80) { /* ASCII */ + CK((*filter->output_function)(c, filter->data)); + } else { /* illegal character */ + s = c & MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(s, filter->data)); + } + break; + + /* decode Modified Base64 */ + case 1: + case 2: + filter->cache |= n << 10; + filter->status = 3; + break; + case 3: + filter->cache |= n << 4; + filter->status = 4; + break; + case 4: + s = ((n >> 2) & 0xf) | (filter->cache & 0xffff); + n = (n & 0x3) << 14; + filter->status = 5; + if (s >= 0xd800 && s < 0xdc00) { + s = (((s & 0x3ff) << 16) + 0x400000) | n; + filter->cache = s; + } else if (s >= 0xdc00 && s < 0xe000) { + s &= 0x3ff; + s |= (filter->cache & 0xfff0000) >> 6; + filter->cache = n; + if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) { + CK((*filter->output_function)(s, filter->data)); + } else { /* illegal character */ + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(s, filter->data)); + } + } else { + filter->cache = n; + CK((*filter->output_function)(s, filter->data)); + } + break; + + case 5: + filter->cache |= n << 8; + filter->status = 6; + break; + case 6: + filter->cache |= n << 2; + filter->status = 7; + break; + case 7: + s = ((n >> 4) & 0x3) | (filter->cache & 0xffff); + n = (n & 0xf) << 12; + filter->status = 8; + if (s >= 0xd800 && s < 0xdc00) { + s = (((s & 0x3ff) << 16) + 0x400000) | n; + filter->cache = s; + } else if (s >= 0xdc00 && s < 0xe000) { + s &= 0x3ff; + s |= (filter->cache & 0xfff0000) >> 6; + filter->cache = n; + if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) { + CK((*filter->output_function)(s, filter->data)); + } else { /* illegal character */ + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(s, filter->data)); + } + } else { + filter->cache = n; + CK((*filter->output_function)(s, filter->data)); + } + break; + + case 8: + filter->cache |= n << 6; + filter->status = 9; + break; + case 9: + s = n | (filter->cache & 0xffff); + filter->status = 2; + if (s >= 0xd800 && s < 0xdc00) { + s = (((s & 0x3ff) << 16) + 0x400000); + filter->cache = s; + } else if (s >= 0xdc00 && s < 0xe000) { + s &= 0x3ff; + s |= (filter->cache & 0xfff0000) >> 6; + filter->cache = 0; + if (s >= MBFL_WCSPLANE_SUPMIN && s < MBFL_WCSPLANE_SUPMAX) { + CK((*filter->output_function)(s, filter->data)); + } else { /* illegal character */ + s &= MBFL_WCSGROUP_MASK; + s |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(s, filter->data)); + } + } else { + filter->cache = 0; + CK((*filter->output_function)(s, filter->data)); + } + break; + + default: + filter->status = 0; + break; + } + + return c; +} + +static const unsigned char mbfl_utf7imap_base64_table[] = +{ + /* 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', */ + 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d, + /* 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', */ + 0x4e,0x4f,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a, + /* 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', */ + 0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d, + /* 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', */ + 0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a, + /* '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', ',', '\0' */ + 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x2b,0x2c,0x00 +}; + +/* + * wchar => UTF7-IMAP + */ +int mbfl_filt_conv_wchar_utf7imap(int c, mbfl_convert_filter *filter) +{ + int n, s; + + n = 0; + if (c == 0x26) { + n = 1; + } else if ((c >= 0x20 && c <= 0x7e) || c == 0) { + n = 2; + } else if (c >= 0 && c < MBFL_WCSPLANE_UCS2MAX) { + ; + } else if (c >= MBFL_WCSPLANE_SUPMIN && c < MBFL_WCSPLANE_SUPMAX) { + s = ((c >> 10) - 0x40) | 0xd800; + CK((*filter->filter_function)(s, filter)); + s = (c & 0x3ff) | 0xdc00; + CK((*filter->filter_function)(s, filter)); + return c; + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + return c; + } + + switch (filter->status) { + case 0: + if (n != 0) { /* directly encode characters */ + CK((*filter->output_function)(c, filter->data)); + if (n == 1) { + CK((*filter->output_function)(0x2d, filter->data)); /* '-' */ + } + } else { /* Modified Base64 */ + CK((*filter->output_function)(0x26, filter->data)); /* '&' */ + filter->status = 1; + filter->cache = c; + } + break; + + /* encode Modified Base64 */ + case 1: + s = filter->cache; + CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 10) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 4) & 0x3f], filter->data)); + if (n != 0) { + CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s << 2) & 0x3c], filter->data)); + CK((*filter->output_function)(0x2d, filter->data)); /* '-' */ + CK((*filter->output_function)(c, filter->data)); + if (n == 1) { + CK((*filter->output_function)(0x2d, filter->data)); /* '-' */ + } + filter->status = 0; + } else { + filter->status = 2; + filter->cache = ((s & 0xf) << 16) | c; + } + break; + + case 2: + s = filter->cache; + CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 14) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 8) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 2) & 0x3f], filter->data)); + if (n != 0) { + CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s << 4) & 0x30], filter->data)); + CK((*filter->output_function)(0x2d, filter->data)); /* '-' */ + CK((*filter->output_function)(c, filter->data)); + if (n == 1) { + CK((*filter->output_function)(0x2d, filter->data)); /* '-' */ + } + filter->status = 0; + } else { + filter->status = 3; + filter->cache = ((s & 0x3) << 16) | c; + } + break; + + case 3: + s = filter->cache; + CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 12) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_utf7imap_base64_table[(s >> 6) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_utf7imap_base64_table[s & 0x3f], filter->data)); + if (n != 0) { + CK((*filter->output_function)(0x2d, filter->data)); /* '-' */ + CK((*filter->output_function)(c, filter->data)); + if (n == 1) { + CK((*filter->output_function)(0x2d, filter->data)); /* '-' */ + } + filter->status = 0; + } else { + filter->status = 1; + filter->cache = c; + } + break; + + default: + filter->status = 0; + break; + } + + return c; + +} + +int mbfl_filt_conv_wchar_utf7imap_flush(mbfl_convert_filter *filter) +{ + int status, cache; + + status = filter->status; + cache = filter->cache; + filter->status = 0; + filter->cache = 0; + /* flush fragments */ + switch (status) { + case 1: + CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 10) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 4) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache << 2) & 0x3c], filter->data)); + CK((*filter->output_function)(0x2d, filter->data)); /* '-' */ + break; + + case 2: + CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 14) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 8) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 2) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache << 4) & 0x30], filter->data)); + CK((*filter->output_function)(0x2d, filter->data)); /* '-' */ + break; + + case 3: + CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 12) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_utf7imap_base64_table[(cache >> 6) & 0x3f], filter->data)); + CK((*filter->output_function)(mbfl_utf7imap_base64_table[cache & 0x3f], filter->data)); + CK((*filter->output_function)(0x2d, filter->data)); /* '-' */ + break; + } + return 0; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.h b/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.h new file mode 100644 index 0000000..d6c5478 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.h @@ -0,0 +1,43 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_UTF7IMAP_H +#define MBFL_MBFILTER_UTF7IMAP_H + +#include "mbfilter.h" + +extern const mbfl_encoding mbfl_encoding_utf7imap; +extern const struct mbfl_convert_vtbl vtbl_utf7imap_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_utf7imap; + +int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_utf7imap(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_utf7imap_flush(mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_UTF7IMAP_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8.c b/ext/mbstring/libmbfl/filters/mbfilter_utf8.c new file mode 100644 index 0000000..fcee610 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf8.c @@ -0,0 +1,309 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_utf8.h" + +int mbfl_filt_ident_utf8(int c, mbfl_identify_filter *filter); + +const unsigned char mblen_table_utf8[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +}; + +static const char *mbfl_encoding_utf8_aliases[] = {"utf8", NULL}; + +const mbfl_encoding mbfl_encoding_utf8 = { + mbfl_no_encoding_utf8, + "UTF-8", + "UTF-8", + (const char *(*)[])&mbfl_encoding_utf8_aliases, + mblen_table_utf8, + MBFL_ENCTYPE_MBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_utf8 = { + mbfl_no_encoding_utf8, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_utf8 +}; + +const struct mbfl_convert_vtbl vtbl_utf8_wchar = { + mbfl_no_encoding_utf8, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_utf8_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_utf8 = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_utf8, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_utf8, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * UTF-8 => wchar + */ +int mbfl_filt_conv_utf8_wchar(int c, mbfl_convert_filter *filter) +{ + int s, c1, w = 0, flag = 0; + + if (c < 0x80) { + if (filter->status != 0) { + w = (filter->cache & MBFL_WCSGROUP_MASK) | MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + filter->status = 0; + filter->cache = 0; + } + if (c >= 0) { + CK((*filter->output_function)(c, filter->data)); + } + } else if (c < 0xc0) { + int status = filter->status & 0xff; + switch (status) { + case 0x10: /* 2byte code 2nd char: 0x80-0xbf */ + case 0x21: /* 3byte code 3rd char: 0x80-0xbf */ + case 0x32: /* 4byte code 4th char: 0x80-0xbf */ + filter->status = 0; + s = filter->cache | (c & 0x3f); + filter->cache = 0; + if ((status == 0x10 && s >= 0x80) || + (status == 0x21 && s >= 0x800 && (s < 0xd800 || s > 0xdfff)) || + (status == 0x32 && s >= 0x10000 && s < 0x110000)) { + CK((*filter->output_function)(s, filter->data)); + } else { + w = s & MBFL_WCSGROUP_MASK; + flag = 1; + } + break; + case 0x20: /* 3byte code 2nd char: 0:0xa0-0xbf,D:0x80-9F,1-C,E-F:0x80-0x9f */ + s = filter->cache | ((c & 0x3f) << 6); + c1 = (s >> 12) & 0xf; + if ((c1 == 0x0 && c >= 0xa0) || + (c1 == 0xd && c < 0xa0) || + (c1 > 0x0 && c1 != 0xd)) { + filter->cache = s; + filter->status++; + } else { + w = s & MBFL_WCSGROUP_MASK; + flag = 1; + } + break; + case 0x31: /* 4byte code 3rd char: 0x80-0xbf */ + filter->cache |= ((c & 0x3f) << 6); + filter->status++; + break; + case 0x30: /* 4byte code 2nd char: 0:0x90-0xbf,1-3:0x80-0xbf,4:0x80-0x8f */ + s = filter->cache | ((c & 0x3f) << 12); + c1 = (s >> 18) & 0x7; + if ((c1 == 0x0 && c >= 0x90) || + (c1 > 0x0 && c1 < 0x4) || + (c1 == 0x4 && c < 0x90)) { + filter->cache = s; + filter->status++; + } else { + w = s & MBFL_WCSGROUP_MASK; + flag = 1; + } + break; + default: + w = c & MBFL_WCSGROUP_MASK; + flag = 1; + break; + } + } else if (c < 0xc2) { /* invalid: 0xc0,0xc1 */ + w = c & MBFL_WCSGROUP_MASK; + flag = 1; + } else if (c < 0xe0) { /* 2byte code first char: 0xc2-0xdf */ + if (filter->status == 0x0) { + filter->status = 0x10; + filter->cache = (c & 0x1f) << 6; + } else { + w = c & MBFL_WCSGROUP_MASK; + flag = 1; + } + } else if (c < 0xf0) { /* 3byte code first char: 0xe0-0xef */ + if (filter->status == 0x0) { + filter->status = 0x20; + filter->cache = (c & 0xf) << 12; + } else { + w = c & MBFL_WCSGROUP_MASK; + flag = 1; + } + } else if (c < 0xf5) { /* 4byte code first char: 0xf0-0xf4 */ + if (filter->status == 0x0) { + filter->status = 0x30; + filter->cache = (c & 0x7) << 18; + } else { + w = c & MBFL_WCSGROUP_MASK; + flag = 1; + } + } else { + w = c & MBFL_WCSGROUP_MASK; + flag = 1; + } + + if (flag) { + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + filter->status = 0; + filter->cache = 0; + } + + return c; +} + +/* + * wchar => UTF-8 + */ +int mbfl_filt_conv_wchar_utf8(int c, mbfl_convert_filter *filter) +{ + if (c >= 0 && c < 0x110000) { + if (c < 0x80) { + CK((*filter->output_function)(c, filter->data)); + } else if (c < 0x800) { + CK((*filter->output_function)(((c >> 6) & 0x1f) | 0xc0, filter->data)); + CK((*filter->output_function)((c & 0x3f) | 0x80, filter->data)); + } else if (c < 0x10000) { + CK((*filter->output_function)(((c >> 12) & 0x0f) | 0xe0, filter->data)); + CK((*filter->output_function)(((c >> 6) & 0x3f) | 0x80, filter->data)); + CK((*filter->output_function)((c & 0x3f) | 0x80, filter->data)); + } else { + CK((*filter->output_function)(((c >> 18) & 0x07) | 0xf0, filter->data)); + CK((*filter->output_function)(((c >> 12) & 0x3f) | 0x80, filter->data)); + CK((*filter->output_function)(((c >> 6) & 0x3f) | 0x80, filter->data)); + CK((*filter->output_function)((c & 0x3f) | 0x80, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + +int mbfl_filt_ident_utf8(int c, mbfl_identify_filter *filter) +{ + int c1; + + c1 = (filter->status >> 8) & 0xff; + filter->status &= 0xff; + + if (c < 0x80) { + if (c < 0) { + filter->flag = 1; /* bad */ + } else if (filter->status) { + filter->flag = 1; /* bad */ + } + filter->status = 0; + } else if (c < 0xc0) { + switch (filter->status) { + case 0x20: /* 3 byte code 2nd char */ + if ((c1 == 0x0 && c >= 0xa0) || + (c1 == 0xd && c < 0xa0) || + (c1 > 0x0 && c1 != 0xd)) { + filter->status++; + } else { + filter->flag = 1; /* bad */ + filter->status = 0; + } + break; + case 0x30: /* 4 byte code 2nd char */ + if ((c1 == 0x0 && c >= 0x90) || + (c1 > 0x0 && c1 < 0x4) || + (c1 == 0x4 && c < 0x90)) { + filter->status++; + } else { + filter->flag = 1; /* bad */ + filter->status = 0; + } + break; + case 0x31: /* 4 byte code 3rd char */ + filter->status++; + break; + case 0x10: /* 2 byte code 2nd char */ + case 0x21: /* 3 byte code 3rd char */ + case 0x32: /* 4 byte code 4th char */ + filter->status = 0; + break; + default: + filter->flag = 1; /* bad */ + filter->status = 0; + break; + } + } else if (c < 0xc2) { /* 0xc0,0xc1 */ + filter->flag = 1; /* bad */ + filter->status = 0; + } else { + if (filter->status) { + filter->flag = 1; /* bad */ + } + filter->status = 0; + if (c < 0xe0) { /* 2 byte code first char */ + filter->status = 0x10; + } else if (c < 0xf0) { /* 3 byte code 1st char */ + filter->status = 0x20; + filter->status |= (c & 0xf) << 8; + } else if (c < 0xf5) { /* 4 byte code 1st char */ + filter->status = 0x30; + filter->status |= (c & 0x7) << 8; + } else { + filter->flag = 1; /* bad */ + } + } + + return c; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8.h b/ext/mbstring/libmbfl/filters/mbfilter_utf8.h new file mode 100644 index 0000000..07bf655 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf8.h @@ -0,0 +1,41 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_UTF8_H +#define MBFL_MBFILTER_UTF8_H + +extern const mbfl_encoding mbfl_encoding_utf8; +extern const struct mbfl_identify_vtbl vtbl_identify_utf8; +extern const struct mbfl_convert_vtbl vtbl_utf8_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_utf8; + +int mbfl_filt_conv_utf8_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_utf8(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_UTF8_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c b/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c new file mode 100644 index 0000000..62feca4 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c @@ -0,0 +1,362 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by rui hrokawa <hirokawa@php.net> on 8 aug 2011. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" + +#include "mbfilter_utf8_mobile.h" +#include "mbfilter_sjis_mobile.h" + +extern int mbfl_filt_ident_utf8(int c, mbfl_identify_filter *filter); + +extern const unsigned char mblen_table_utf8[]; + +static const char *mbfl_encoding_utf8_docomo_aliases[] = {"UTF-8-DOCOMO", "UTF8-DOCOMO", NULL}; +static const char *mbfl_encoding_utf8_kddi_a_aliases[] = {NULL}; +static const char *mbfl_encoding_utf8_kddi_b_aliases[] = {"UTF-8-Mobile#KDDI", "UTF-8-KDDI", "UTF8-KDDI", NULL}; +static const char *mbfl_encoding_utf8_sb_aliases[] = {"UTF-8-SOFTBANK", "UTF8-SOFTBANK", NULL}; + +const mbfl_encoding mbfl_encoding_utf8_docomo = { + mbfl_no_encoding_utf8_docomo, + "UTF-8-Mobile#DOCOMO", + "UTF-8", + (const char *(*)[])&mbfl_encoding_utf8_docomo_aliases, + mblen_table_utf8, + MBFL_ENCTYPE_MBCS +}; + +const mbfl_encoding mbfl_encoding_utf8_kddi_a = { + mbfl_no_encoding_utf8_kddi_a, + "UTF-8-Mobile#KDDI-A", + "UTF-8", + (const char *(*)[])&mbfl_encoding_utf8_kddi_a_aliases, + mblen_table_utf8, + MBFL_ENCTYPE_MBCS +}; + +const mbfl_encoding mbfl_encoding_utf8_kddi_b = { + mbfl_no_encoding_utf8_kddi_b, + "UTF-8-Mobile#KDDI-B", + "UTF-8", + (const char *(*)[])&mbfl_encoding_utf8_kddi_b_aliases, + mblen_table_utf8, + MBFL_ENCTYPE_MBCS +}; + +const mbfl_encoding mbfl_encoding_utf8_sb = { + mbfl_no_encoding_utf8_sb, + "UTF-8-Mobile#SOFTBANK", + "UTF-8", + (const char *(*)[])&mbfl_encoding_utf8_sb_aliases, + mblen_table_utf8, + MBFL_ENCTYPE_MBCS +}; + +const struct mbfl_identify_vtbl vtbl_identify_utf8_docomo = { + mbfl_no_encoding_utf8_docomo, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_utf8 +}; + +const struct mbfl_identify_vtbl vtbl_identify_utf8_kddi_a = { + mbfl_no_encoding_utf8_kddi_a, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_utf8 +}; + +const struct mbfl_identify_vtbl vtbl_identify_utf8_kddi_b = { + mbfl_no_encoding_utf8_kddi_b, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_utf8 +}; + +const struct mbfl_identify_vtbl vtbl_identify_utf8_sb = { + mbfl_no_encoding_utf8_sb, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_utf8 +}; + +const struct mbfl_convert_vtbl vtbl_utf8_docomo_wchar = { + mbfl_no_encoding_utf8_docomo, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_utf8_mobile_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_utf8_docomo = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_utf8_docomo, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_utf8_mobile, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_utf8_kddi_a_wchar = { + mbfl_no_encoding_utf8_kddi_a, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_utf8_mobile_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_utf8_kddi_a = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_utf8_kddi_a, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_utf8_mobile, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_utf8_kddi_b_wchar = { + mbfl_no_encoding_utf8_kddi_b, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_utf8_mobile_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_utf8_kddi_b = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_utf8_kddi_b, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_utf8_mobile, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_utf8_sb_wchar = { + mbfl_no_encoding_utf8_sb, + mbfl_no_encoding_wchar, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_utf8_mobile_wchar, + mbfl_filt_conv_common_flush +}; + +const struct mbfl_convert_vtbl vtbl_wchar_utf8_sb = { + mbfl_no_encoding_wchar, + mbfl_no_encoding_utf8_sb, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_wchar_utf8_mobile, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* + * UTF-8 => wchar + */ +int mbfl_filt_conv_utf8_mobile_wchar(int c, mbfl_convert_filter *filter) +{ + int s, w = 0, flag = 0; + int s1 = 0, c1 = 0, snd = 0; + + if (c < 0x80) { + if (c >= 0) { + CK((*filter->output_function)(c, filter->data)); + } + filter->status = 0; + } else if (c < 0xc0) { + int status = filter->status & 0xff; + switch (status) { + case 0x10: /* 2byte code 2nd char: 0x80-0xbf */ + case 0x21: /* 3byte code 3rd char: 0x80-0xbf */ + case 0x32: /* 4byte code 4th char: 0x80-0xbf */ + filter->status = 0; + s = filter->cache | (c & 0x3f); + filter->cache = 0; + if ((status == 0x10 && s >= 0x80) || + (status == 0x21 && s >= 0x800 && (s < 0xd800 || s > 0xdfff)) || + (status == 0x32 && s >= 0x10000 && s < 0x110000)) { + + if (filter->from->no_encoding == mbfl_no_encoding_utf8_docomo && + mbfilter_conv_r_map_tbl(s, &s1, mbfl_docomo2uni_pua, 4) > 0) { + s = mbfilter_sjis_emoji_docomo2unicode(s1, &snd); + } else if (filter->from->no_encoding == mbfl_no_encoding_utf8_kddi_a && + mbfilter_conv_r_map_tbl(s, &s1, mbfl_kddi2uni_pua, 7) > 0) { + s = mbfilter_sjis_emoji_kddi2unicode(s1, &snd); + } else if (filter->from->no_encoding == mbfl_no_encoding_utf8_kddi_b && + mbfilter_conv_r_map_tbl(s, &s1, mbfl_kddi2uni_pua_b, 8) > 0) { + s = mbfilter_sjis_emoji_kddi2unicode(s1, &snd); + } else if (filter->from->no_encoding == mbfl_no_encoding_utf8_sb && + mbfilter_conv_r_map_tbl(s, &s1, mbfl_sb2uni_pua, 6) > 0) { + s = mbfilter_sjis_emoji_sb2unicode(s1, &snd); + } + + if (snd > 0) { + CK((*filter->output_function)(snd, filter->data)); + } + CK((*filter->output_function)(s, filter->data)); + } else { + w = s & MBFL_WCSGROUP_MASK; + flag = 1; + } + break; + case 0x20: /* 3byte code 2nd char: 0:0xa0-0xbf,D:0x80-9F,1-C,E-F:0x80-0x9f */ + s = filter->cache | ((c & 0x3f) << 6); + c1 = (s >> 12) & 0xf; + if ((c1 == 0x0 && c >= 0xa0) || + (c1 == 0xd && c < 0xa0) || + (c1 > 0x0 && c1 != 0xd)) { + filter->cache = s; + filter->status++; + } else { + w = s & MBFL_WCSGROUP_MASK; + flag = 1; + } + break; + case 0x31: /* 4byte code 3rd char: 0x80-0xbf */ + filter->cache |= ((c & 0x3f) << 6); + filter->status++; + break; + case 0x30: /* 4byte code 2nd char: 0:0x90-0xbf,1-3:0x80-0xbf,4:0x80-0x8f */ + s = filter->cache | ((c & 0x3f) << 12); + c1 = (s >> 18) & 0x7; + if ((c1 == 0x0 && c >= 0x90) || + (c1 > 0x0 && c1 < 0x4) || + (c1 == 0x4 && c < 0x90)) { + filter->cache = s; + filter->status++; + } else { + w = s & MBFL_WCSGROUP_MASK; + flag = 1; + } + break; + default: + w = c & MBFL_WCSGROUP_MASK; + flag = 1; + break; + } + } else if (c < 0xc2) { /* invalid: 0xc0,0xc1 */ + w = c & MBFL_WCSGROUP_MASK; + flag = 1; + } else if (c < 0xe0) { /* 2byte code first char: 0xc2-0xdf */ + if (filter->status == 0x0) { + filter->status = 0x10; + filter->cache = (c & 0x1f) << 6; + } else { + w = c & MBFL_WCSGROUP_MASK; + flag = 1; + } + } else if (c < 0xf0) { /* 3byte code first char: 0xe0-0xef */ + if (filter->status == 0x0) { + filter->status = 0x20; + filter->cache = (c & 0xf) << 12; + } else { + w = c & MBFL_WCSGROUP_MASK; + flag = 1; + } + } else if (c < 0xf5) { /* 4byte code first char: 0xf0-0xf4 */ + if (filter->status == 0x0) { + filter->status = 0x30; + filter->cache = (c & 0x7) << 18; + } else { + w = c & MBFL_WCSGROUP_MASK; + flag = 1; + } + } else { + w = c & MBFL_WCSGROUP_MASK; + flag = 1; + } + + if (flag) { + w |= MBFL_WCSGROUP_THROUGH; + CK((*filter->output_function)(w, filter->data)); + filter->status = 0; + filter->cache = 0; + } + + return c; +} + +/* + * wchar => UTF-8 + */ +int mbfl_filt_conv_wchar_utf8_mobile(int c, mbfl_convert_filter *filter) +{ + if (c >= 0 && c < 0x110000) { + int s1, c1; + + if ((filter->to->no_encoding == mbfl_no_encoding_utf8_docomo && + mbfilter_unicode2sjis_emoji_docomo(c, &s1, filter) > 0 && + mbfilter_conv_map_tbl(s1, &c1, mbfl_docomo2uni_pua, 4) > 0) || + (filter->to->no_encoding == mbfl_no_encoding_utf8_kddi_a && + mbfilter_unicode2sjis_emoji_kddi(c, &s1, filter) > 0 && + mbfilter_conv_map_tbl(s1, &c1, mbfl_kddi2uni_pua, 7) > 0) || + (filter->to->no_encoding == mbfl_no_encoding_utf8_kddi_b && + mbfilter_unicode2sjis_emoji_kddi(c, &s1, filter) > 0 && + mbfilter_conv_map_tbl(s1, &c1, mbfl_kddi2uni_pua_b, 8) > 0) || + (filter->to->no_encoding == mbfl_no_encoding_utf8_sb && + mbfilter_unicode2sjis_emoji_sb(c, &s1, filter) > 0 && + mbfilter_conv_map_tbl(s1, &c1, mbfl_sb2uni_pua, 6) > 0)) { + c = c1; + } + + if (filter->status == 1 && filter->cache > 0) { + return c; + } + + if (c < 0x80) { + CK((*filter->output_function)(c, filter->data)); + } else if (c < 0x800) { + CK((*filter->output_function)(((c >> 6) & 0x1f) | 0xc0, filter->data)); + CK((*filter->output_function)((c & 0x3f) | 0x80, filter->data)); + } else if (c < 0x10000) { + CK((*filter->output_function)(((c >> 12) & 0x0f) | 0xe0, filter->data)); + CK((*filter->output_function)(((c >> 6) & 0x3f) | 0x80, filter->data)); + CK((*filter->output_function)((c & 0x3f) | 0x80, filter->data)); + } else { + CK((*filter->output_function)(((c >> 18) & 0x07) | 0xf0, filter->data)); + CK((*filter->output_function)(((c >> 12) & 0x3f) | 0x80, filter->data)); + CK((*filter->output_function)(((c >> 6) & 0x3f) | 0x80, filter->data)); + CK((*filter->output_function)((c & 0x3f) | 0x80, filter->data)); + } + } else { + if (filter->illegal_mode != MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + CK(mbfl_filt_conv_illegal_output(c, filter)); + } + } + + return c; +} + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.h b/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.h new file mode 100644 index 0000000..ef5e6da --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.h @@ -0,0 +1,55 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by rui hrokawa <hirokawa@php.net> on 8 aug 2011. + * + */ + +#ifndef MBFL_MBFILTER_UTF8_MOBILE_H +#define MBFL_MBFILTER_UTF8_MOBILE_H + +extern const mbfl_encoding mbfl_encoding_utf8_docomo; +extern const mbfl_encoding mbfl_encoding_utf8_kddi_a; +extern const mbfl_encoding mbfl_encoding_utf8_kddi_b; +extern const mbfl_encoding mbfl_encoding_utf8_sb; + +extern const struct mbfl_identify_vtbl vtbl_identify_utf8_docomo; +extern const struct mbfl_identify_vtbl vtbl_identify_utf8_kddi_a; +extern const struct mbfl_identify_vtbl vtbl_identify_utf8_kddi_b; +extern const struct mbfl_identify_vtbl vtbl_identify_utf8_sb; + +extern const struct mbfl_convert_vtbl vtbl_utf8_docomo_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_utf8_docomo; +extern const struct mbfl_convert_vtbl vtbl_utf8_kddi_a_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_utf8_kddi_a; +extern const struct mbfl_convert_vtbl vtbl_utf8_kddi_b_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_utf8_kddi_b; +extern const struct mbfl_convert_vtbl vtbl_utf8_sb_wchar; +extern const struct mbfl_convert_vtbl vtbl_wchar_utf8_sb; + +int mbfl_filt_conv_utf8_mobile_wchar(int c, mbfl_convert_filter *filter); +int mbfl_filt_conv_wchar_utf8_mobile(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_UTF8_MOBILE_H */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_uuencode.c b/ext/mbstring/libmbfl/filters/mbfilter_uuencode.c new file mode 100644 index 0000000..64fc39d --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_uuencode.c @@ -0,0 +1,152 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfilter.h" +#include "mbfilter_uuencode.h" + +const mbfl_encoding mbfl_encoding_uuencode = { + mbfl_no_encoding_uuencode, + "UUENCODE", + "x-uuencode", + NULL, + NULL, + MBFL_ENCTYPE_SBCS +}; + +const struct mbfl_convert_vtbl vtbl_uuencode_8bit = { + mbfl_no_encoding_uuencode, + mbfl_no_encoding_8bit, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_uudec, + mbfl_filt_conv_common_flush +}; + +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + +/* uuencode => any */ +#define UUDEC(c) (char)(((c)-' ')&077) +static const char * uuenc_begin_text = "begin "; +enum { uudec_state_ground=0, uudec_state_inbegin, + uudec_state_until_newline, + uudec_state_size, uudec_state_a, uudec_state_b, uudec_state_c, uudec_state_d, + uudec_state_skip_newline}; + +int mbfl_filt_conv_uudec(int c, mbfl_convert_filter * filter) +{ + int n; + + switch(filter->status) { + case uudec_state_ground: + /* looking for "begin 0666 filename\n" line */ + if (filter->cache == 0 && c == 'b') + { + filter->status = uudec_state_inbegin; + filter->cache = 1; /* move to 'e' */ + } + else if (c == '\n') + filter->cache = 0; + else + filter->cache++; + break; + case uudec_state_inbegin: + if (uuenc_begin_text[filter->cache++] != c) { + /* doesn't match pattern */ + filter->status = uudec_state_ground; + break; + } + if (filter->cache == 5) + { + /* thats good enough - wait for a newline */ + filter->status = uudec_state_until_newline; + filter->cache = 0; + } + break; + case uudec_state_until_newline: + if (c == '\n') + filter->status = uudec_state_size; + break; + case uudec_state_size: + /* get "size" byte */ + n = UUDEC(c); + filter->cache = n << 24; + filter->status = uudec_state_a; + break; + case uudec_state_a: + /* get "a" byte */ + n = UUDEC(c); + filter->cache |= (n << 16); + filter->status = uudec_state_b; + break; + case uudec_state_b: + /* get "b" byte */ + n = UUDEC(c); + filter->cache |= (n << 8); + filter->status = uudec_state_c; + break; + case uudec_state_c: + /* get "c" byte */ + n = UUDEC(c); + filter->cache |= n; + filter->status = uudec_state_d; + break; + case uudec_state_d: + /* get "d" byte */ + { + int A, B, C, D = UUDEC(c); + A = (filter->cache >> 16) & 0xff; + B = (filter->cache >> 8) & 0xff; + C = (filter->cache) & 0xff; + n = (filter->cache >> 24) & 0xff; + if (n-- > 0) + CK((*filter->output_function)( (A << 2) | (B >> 4), filter->data)); + if (n-- > 0) + CK((*filter->output_function)( (B << 4) | (C >> 2), filter->data)); + if (n-- > 0) + CK((*filter->output_function)( (C << 6) | D, filter->data)); + filter->cache = n << 24; + + if (n == 0) + filter->status = uudec_state_skip_newline; /* skip next byte (newline) */ + else + filter->status = uudec_state_a; /* go back to fetch "A" byte */ + } + break; + case uudec_state_skip_newline: + /* skip newline */ + filter->status = uudec_state_size; + } + return c; +} + + diff --git a/ext/mbstring/libmbfl/filters/mbfilter_uuencode.h b/ext/mbstring/libmbfl/filters/mbfilter_uuencode.h new file mode 100644 index 0000000..ca7521c --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mbfilter_uuencode.h @@ -0,0 +1,39 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_UUENCODE_H +#define MBFL_MBFILTER_UUENCODE_H + +extern const mbfl_encoding mbfl_encoding_uuencode; +extern const struct mbfl_convert_vtbl vtbl_uuencode_8bit; + +int mbfl_filt_conv_uudec(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_UUENCODE_H */ + diff --git a/ext/mbstring/libmbfl/filters/mk_emoji_tbl.pl b/ext/mbstring/libmbfl/filters/mk_emoji_tbl.pl new file mode 100755 index 0000000..5b5c3d6 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mk_emoji_tbl.pl @@ -0,0 +1,425 @@ +#!/usr/bin/perl +# script to generate Shift_JIS encoded Emoji to/from Unicode conversion table. +# Rui Hirokawa <hirokawa@php.net> +# +# usage: mktbl.pl EmojiSources.txt +# +# Unicoe;DoCoMo;KDDI;SoftBank + +@docomo = (); +@kddi = (); +@softbank = (); + +@to_docomo = (); +@to_kddi = (); +@to_sb = (); + +$fname = "emoji2uni.h"; +open(OUT,">$fname") or die $!; + +sub sjis2code { + my @c = unpack("C*", pack("H4", $_[0])); + + # Shift_JIS -> JIS + $c[0] = (($c[0]-($c[0]<160?112:176))<<1)-($c[1]<159?1:0); + $c[1] -= ($c[1]<159?($c[1]>127?32:31):126); + + $s = ($c[0] - 0x21)*94 + $c[1]-0x21; + + return $s; +} + +sub show_code { + my @c = @_; + $s = "\t"; + for ($i=0; $i<=$#c; $i++) {# + if ($c[$i]) { + @v = split(' ',$c[$i]); + $s .= "0x$v[0], \t"; + if ($#v > 0) { + print "$i $v[0] $v[1]\n"; + } + } else { + $s .= "0x0000, \t"; + } + if ($i % 4 == 3) { + $s .= "\n\t"; + } + } + return $s; +} + +while(<>) { + if ($_ =~ /^\d+/) { + @v = split(/;/,$_); + if ($v[1] =~ /[\dA-F]+/) { + $code = &sjis2code($v[1]); + $docomo{$code} = $v[0]; + $to_docomo{$v[0]} = $code; + } + if ($v[2] =~ /[\dA-F]+/) { + $code = &sjis2code($v[2]); + $kddi{$code} = $v[0]; + $to_kddi{$v[0]} = $code; + } + if ($v[3] =~ /[\dA-F]+/) { + $code = &sjis2code($v[3]); + $softbank{$code} = $v[0]; + $to_sb{$v[0]} = $code; + } + } +} + +print "DoCoMo\n"; + +$docomo_min = 10434; +$docomo_max = 10434+281; +@docomo_v = (); + +foreach $key (sort {hex($a) <=> hex($b)} keys(%docomo)) { + $s = $key; + $pos = $s % 94; + $ku = ($s - $pos)/94; + $v = $key - $docomo_min; + #print "$ku:$pos - ". $v ."=> $docomo{$key}\n"; + $docomo_v[$key-$docomo_min] = $docomo{$key}; +} + +$to_docomo_min = 10434; + +$to_docomo_min1 = 0x0023; +$to_docomo_max1 = 0x00AE; +$to_docomo_min2 = 0x203C; +$to_docomo_max2 = 0x3299; +$to_docomo_min3 = 0x1F17F; +$to_docomo_max3 = 0x1F6BB; + +@r_docomo1_key = (); +@r_docomo1_val = (); + +@r_docomo2_key = (); +@r_docomo2_val = (); + +@r_docomo3_key = (); +@r_docomo3_val = (); + + +foreach $key (sort {hex($a) <=> hex($b)} keys(%to_docomo)) { + $s = $to_docomo{$key}; + + $pos = $s % 94; + $ku = ($s - $pos)/94; + $v = $to_docomo{$key} - $to_docomo_min; + $h = sprintf("%x",$s); + #print "$ku:$pos = $h ($v) <= $key\n"; + if (hex($key) <= $to_docomo_max1) { + push(@r_docomo1_key, $key); + push(@r_docomo1_val, sprintf("%x", $to_docomo{$key})); + } elsif (hex($key) <= $to_docomo_max2) { + push(@r_docomo2_key, $key); + push(@r_docomo2_val, $h); + } elsif (hex($key) >= $to_docomo_max3) { + push(@r_docomo3_key, $key); + push(@r_docomo3_val, $h); + } +} + +push(@r_docomo1_key, 0x00); +push(@r_docomo1_val, 0x00); +push(@r_docomo2_key, 0x00); +push(@r_docomo2_val, 0x00); +push(@r_docomo3_key, 0x00); +push(@r_docomo3_val, 0x00); + +print OUT "int mb_tbl_code2uni_docomo_min = $docomo_min;\n"; +print OUT "int mb_tbl_code2uni_docomo_max = $docomo_max;\n\n"; + +print OUT "int mb_tbl_code2uni_docomo[] = {\n"; +print OUT &show_code(@docomo_v); +print OUT "};\n\n"; + +print OUT "int mb_tbl_uni_docomo2code_min1 = $to_docomo_min1;\n"; +print OUT "int mb_tbl_uni_docomo2code_max1 = $to_docomo_max1;\n"; +print OUT "int mb_tbl_uni_docomo2code_min2 = $to_docomo_min2;\n"; +print OUT "int mb_tbl_uni_docomo2code_max2 = $to_docomo_max2;\n"; +print OUT "int mb_tbl_uni_docomo2code_min3 = $to_docomo_min3;\n"; +print OUT "int mb_tbl_uni_docomo2code_max3 = $to_docomo_max3;\n\n"; + +#print "DOCOMO reverse 1\n"; + +print OUT "int mb_tbl_uni_docomo2code_key1[] = {\n"; +print OUT &show_code(@r_docomo1_key),"\n"; +print OUT "};\n\n"; +print OUT "int mb_tbl_uni_docomo2code_val1[] = {\n"; +print OUT &show_code(@r_docomo1_val),"\n"; +print OUT "};\n\n"; + +#print "DOCOMO reverse 2\n"; + +print OUT "int mb_tbl_uni_docomo2code_key2[] = {\n"; +print OUT &show_code(@r_docomo2_key),"\n"; +print OUT "};\n\n"; +print OUT "int mb_tbl_uni_docomo2code_val2[] = {\n"; +print OUT &show_code(@r_docomo2_val),"\n"; +print OUT "};\n\n"; + +print "DOCOMO reverse 3\n"; + +print OUT "int mb_tbl_uni_docomo2code_key3[] = {\n"; +print OUT &show_code(@r_docomo3_key),"\n"; +print OUT "};\n\n"; +print OUT "int mb_tbl_uni_docomo2code_val3[] = {\n"; +print OUT &show_code(@r_docomo3_val),"\n"; +print OUT "};\n\n"; + +#print "DOCOMO reverse end \n"; + +$kddi_min1 = 9400; +$kddi_max1 = 9400+264; +$kddi_min2 = 9400+564; +$kddi_max2 = 9400+939; + +@kddi_v1 = (); +@kddi_v2 = (); + +#print "KDDI\n"; + +foreach $key (sort {hex($a) <=> hex($b)} keys(%kddi)) { + $s = $key; + $pos = $s % 94; + $ku = ($s - $pos)/94; + $v = $key - $kddi_min1; + $h = sprintf("%x",$key); + #print "$ku:$pos :: $v ($h) => $kddi{$key}\n"; + + if ($key <= $kddi_max1) { + $kddi_v1[$key-$kddi_min1] = $kddi{$key}; + } elsif ($key <= $kddi_max2) { + $kddi_v2[$key-$kddi_min2] = $kddi{$key}; + } +} + +$to_kddi_min = 9660; +$to_kddi_min1 = 0x0030; +$to_kddi_max1 = 0x00AE; +$to_kddi_min2 = 0x2002; +$to_kddi_max2 = 0x3299; +$to_kddi_min3 = 0x1F004; +$to_kddi_max3 = 0x1F6C0; + +@r_kddi1_key = (); @r_kddi1_val = (); +@r_kddi2_key = (); @r_kddi2_val = (); +@r_kddi3_key = (); @r_kddi3_val = (); + +foreach $key (sort {hex($a) <=> hex($b)} keys(%to_kddi)) { + $s = $to_kddi{$key}; + + $pos = $s % 94; + $ku = ($s - $pos)/94; + $v = $to_kddi{$key} - $to_kddi_min; + $h = sprintf("%x",$s); + #print "$ku:$pos = $h ($v) <= $key\n"; + if (hex($key) <= $to_kddi_max1) { + push(@r_kddi1_key, $key); + push(@r_kddi1_val, $h); + } elsif (hex($key) <= $to_kddi_max2) { + push(@r_kddi2_key, $key); + push(@r_kddi2_val, $h); + } else { + push(@r_kddi3_key, $key); + push(@r_kddi3_val, $h); + } +} + +push(@r_kddi1_key, 0x00); +push(@r_kddi1_val, 0x00); +push(@r_kddi2_key, 0x00); +push(@r_kddi2_val, 0x00); +push(@r_kddi3_key, 0x00); +push(@r_kddi3_val, 0x00); + +print OUT "int mb_tbl_code2uni_kddi1_min = $kddi_min1;\n"; +print OUT "int mb_tbl_code2uni_kddi1_max = $kddi_max1;\n"; +print OUT "int mb_tbl_code2uni_kddi2_min = $kddi_min2;\n"; +print OUT "int mb_tbl_code2uni_kddi2_max = $kddi_max2;\n\n"; + +#print "KDDI 1\n"; + +print OUT "int mb_tbl_code2uni_kddi1[] = {\n"; +print OUT &show_code(@kddi_v1); +print OUT "};\n\n"; + +#print "KDDI 2\n"; + +print OUT "int mb_tbl_code2uni_kddi2[] = {\n"; +print OUT &show_code(@kddi_v2); +print OUT "};\n\n"; + +print OUT "int mb_tbl_uni_kddi2code_min1 = $to_kddi_min1;\n"; +print OUT "int mb_tbl_uni_kddi2code_max1 = $to_kddi_max1;\n"; +print OUT "int mb_tbl_uni_kddi2code_min2 = $to_kddi_min2;\n"; +print OUT "int mb_tbl_uni_kddi2code_max2 = $to_kddi_max2;\n"; +print OUT "int mb_tbl_uni_kddi2code_min3 = $to_kddi_min3;\n"; +print OUT "int mb_tbl_uni_kddi2code_max3 = $to_kddi_max3;\n\n"; + +#print "KDDI reverse 1\n"; + +print OUT "int mb_tbl_uni_kddi2code_key1[] = {\n"; +print OUT &show_code(@r_kddi1_key),"\n"; +print OUT "};\n\n"; +print OUT "int mb_tbl_uni_kddi2code_val1[] = {\n"; +print OUT &show_code(@r_kddi1_val),"\n"; +print OUT "};\n\n"; + +#print "KDDI reverse 1\n"; + +print OUT "int mb_tbl_uni_kddi2code_key2[] = {\n"; +print OUT &show_code(@r_kddi2_key),"\n"; +print OUT "};\n\n"; +print OUT "int mb_tbl_uni_kddi2code_val2[] = {\n"; +print OUT &show_code(@r_kddi2_val),"\n"; +print OUT "};\n\n"; + +#print "KDDI reverse 3\n"; + +print OUT "int mb_tbl_uni_kddi2code_key3[] = {\n"; +print OUT &show_code(@r_kddi3_key),"\n"; +print OUT "};\n\n"; +print OUT "int mb_tbl_uni_kddi2code_val3[] = {\n"; +print OUT &show_code(@r_kddi3_val),"\n"; +print OUT "};\n\n"; + + +$sb_min1 = 10153; +$sb_max1 = 10153+177; +$sb_min2 = 10153+376; +$sb_max2 = 10153+547; +$sb_min3 = 10153+752; +$sb_max3 = 10153+901; + +@sb_v1 = (); +@sb_v2 = (); +@sb_v3 = (); + +if (1) { + print "SoftBank\n"; + + foreach $key (sort {hex($a) <=> hex($b)} keys(%softbank)) { + $s = $key; + $pos = $s % 94; + $ku = ($s - $pos)/94; + $v = $key - $sb_min1; + $h = sprintf("%x",$key); + #print "$ku:$pos :: $v ($h) => $softbank{$key}\n"; + if ($key <= $sb_max1) { + $sb_v1[$key-$sb_min1] = $softbank{$key}; + } elsif ($key <= $sb_max2) { + $sb_v2[$key-$sb_min2] = $softbank{$key}; + } elsif ($key <= $sb_max3) { + $sb_v3[$key-$sb_min3] = $softbank{$key}; + } + } + +} + +$to_sb_min = 10263; +$to_sb_min1 = 0x0023; +$to_sb_max1 = 0x00AE; +$to_sb_min2 = 0x2122; +$to_sb_max2 = 0x3299; +$to_sb_min3 = 0x1F004; +$to_sb_max3 = 0x1F6C0; + +@r_sb1_key = (); @r_sb1_val = (); +@r_sb2_key = (); @r_sb2_val = (); +@r_sb3_key = (); @r_sb3_val = (); + +foreach $key (sort {hex($a) <=> hex($b)} keys(%to_sb)) { + $s = $to_sb{$key}; + + $pos = $s % 94; + $ku = ($s - $pos)/94; + $v = $to_sb{$key} - $to_sb_min; + $h = sprintf("%x",$s); + #print "$ku:$pos = $h ($v) <= $key\n"; + if (hex($key) <= $to_sb_max1) { + push(@r_sb1_key, $key); + push(@r_sb1_val, $h); + } elsif (hex($key) >= $to_sb_min2 && hex($key) <= $to_sb_max2) { + push(@r_sb2_key, $key); + push(@r_sb2_val, $h); + } else { + push(@r_sb3_key, $key); + push(@r_sb3_val, $h); + } +} + +push(@r_sb1_key, 0x00); +push(@r_sb1_val, 0x00); +push(@r_sb2_key, 0x00); +push(@r_sb2_val, 0x00); +push(@r_sb3_key, 0x00); +push(@r_sb3_val, 0x00); + + +print OUT "int mb_tbl_code2uni_sb1_min = $sb_min1;\n"; +print OUT "int mb_tbl_code2uni_sb1_max = $sb_max1;\n"; +print OUT "int mb_tbl_code2uni_sb2_min = $sb_min2;\n"; +print OUT "int mb_tbl_code2uni_sb2_max = $sb_max2;\n"; +print OUT "int mb_tbl_code2uni_sb3_min = $sb_min3;\n"; +print OUT "int mb_tbl_code2uni_sb3_max = $sb_max3;\n\n"; + +#print "SoftBank 1\n"; + +print OUT "int mb_tbl_code2uni_sb1[] = {\n"; +print OUT &show_code(@sb_v1); +print OUT "};\n\n"; + +#print "SoftBank 2\n"; + +print OUT "int mb_tbl_code2uni_sb2[] = {\n"; +print OUT &show_code(@sb_v2); +print OUT "};\n\n"; + +#print "SoftBank 3\n"; + +print OUT "int mb_tbl_code2uni_sb3[] = {\n"; +print OUT &show_code(@sb_v3); +print OUT "};\n\n"; + +print OUT "int mb_tbl_uni_sb2code_min1 = $to_sb_min1;\n"; +print OUT "int mb_tbl_uni_sb2code_max1 = $to_sb_max1;\n"; +print OUT "int mb_tbl_uni_sb2code_min2 = $to_sb_min2;\n"; +print OUT "int mb_tbl_uni_sb2code_max2 = $to_sb_max2;\n"; +print OUT "int mb_tbl_uni_sb2code_min3 = $to_sb_min3;\n"; +print OUT "int mb_tbl_uni_sb2code_max3 = $to_sb_max3;\n\n"; + +#print "SB reverse 1\n"; + +print OUT "int mb_tbl_uni_sb2code_key1[] = {\n"; +print OUT &show_code(@r_sb1_key),"\n"; +print OUT "};\n\n"; +print OUT "int mb_tbl_uni_sb2code_val1[] = {\n"; +print OUT &show_code(@r_sb1_val),"\n"; +print OUT "};\n\n"; + +#print "SB reverse 2\n"; + +print OUT "int mb_tbl_uni_sb2code_key2[] = {\n"; +print OUT &show_code(@r_sb2_key),"\n"; +print OUT "};\n\n"; +print OUT "int mb_tbl_uni_sb2code_val2[] = {\n"; +print OUT &show_code(@r_sb2_val),"\n"; +print OUT "};\n\n"; + +#print "SB reverse 3\n"; + +print OUT "int mb_tbl_uni_sb2code_key3[] = {\n"; +print OUT &show_code(@r_sb3_key),"\n"; +print OUT "};\n\n"; +print OUT "int mb_tbl_uni_sb2code_val3[] = {\n"; +print OUT &show_code(@r_sb3_val),"\n"; +print OUT "};\n\n"; + + +close(OUT); diff --git a/ext/mbstring/libmbfl/filters/mk_sb_tbl.awk b/ext/mbstring/libmbfl/filters/mk_sb_tbl.awk new file mode 100755 index 0000000..f0ad290 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/mk_sb_tbl.awk @@ -0,0 +1,65 @@ +#!/usr/bin/awk -f +# +# $Id$ +# +# Description: a script that generates a single byte code set to Unicode +# mapping table. +# + +function conv(str) { + if (!match(str, "^0[xX]")) { + return 0 + str + } + + retval = 0 + + for (i = 3; i <= length(str); i++) { + n = index("0123456789abcdefABCDEF", substr(str, i, 1)) - 1 + + if (n < 0) { + return 0 + str; + } else if (n >= 16) { + n -= 6; + } + + retval = retval * 16 + n + } + + return retval +} + +BEGIN { + FS="[ \t#]" +} + +/^#/ { + # Do nothing +} + +{ + tbl[conv($1)] = conv($2) +} + +END { + print "/* This file is automatically generated. Do not edit! */" + if (IFNDEF_NAME) { + print "#ifndef " IFNDEF_NAME + } + + print "static const int " TABLE_NAME "[] = {" + i = 160; + for (;;) { + printf("\t0x%04x, 0x%04x, 0x%04x, 0x%04x, 0x%04x, 0x%04x, 0x%04x, 0x%04x", tbl[i++], tbl[i++], tbl[i++], tbl[i++], tbl[i++], tbl[i++], tbl[i++], tbl[i++]); + if (i != 256) { + printf(",\n"); + } else { + print "" + break; + } + } + print "};" + + if (IFNDEF_NAME) { + print "#endif /* " IFNDEF_NAME " */" + } +} diff --git a/ext/mbstring/libmbfl/filters/sjis_mac2uni.h b/ext/mbstring/libmbfl/filters/sjis_mac2uni.h new file mode 100644 index 0000000..1bd77c9 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/sjis_mac2uni.h @@ -0,0 +1,349 @@ + + +static const unsigned short sjis_mac2wchar1[] = { // 0x03ac - 0x03c9 +0x339c, 0x339f, 0x339d, 0x33a0, +0x33a4, 0xff4d, 0x33a1, 0x33a5, +0x339e, 0x33a2, 0x338e, 0xff47, +0x338f, 0x33c4, 0x3396, 0x3397, +0x2113, 0x3398, 0x33b3, 0x33b2, +0x33b1, 0x33b0, 0x2109, 0x33d4, +0x33cb, 0x3390, 0x3385, 0x3386, +0x3387, 0xf860, }; +static const unsigned short sjis_mac2wchar2[] = { // 0x0406 - 0x0420 +0x2116, 0x33cd, +0x2121, 0xf861, 0x2664, 0x2667, +0x2661, 0x2662, 0x2660, 0x2663, +0x2665, 0x2666, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x3020, 0x260e, +0x3004, }; +static const unsigned short sjis_mac2wchar3[] = { // 0x0432 - 0x0441 +0x261e, 0x261c, +0x261d, 0x261f, 0x21c6, 0x21c4, +0x21c5, 0xf860, 0x21e8, 0x21e6, +0x21e7, 0x21e9, 0x21e8, 0x21e6, +0x21e7, 0x21e9, }; +static const unsigned short sjis_mac2wchar4[] = { // 0x0468 - 0x0480 +0x3230, 0x322a, 0x322b, 0x322c, +0x322d, 0x322e, 0x322f, 0x3240, +0x3237, 0x3242, 0x3243, 0x3239, +0x323a, 0x3231, 0x323e, 0x3234, +0x3232, 0x323b, 0x3236, 0x3233, +0x3235, 0x323c, 0x323d, 0x323f, +0x3238, }; +static const unsigned short sjis_mac2wchar5[] = { // 0x04b8 - 0x04e8 +0x5927, 0x5c0f, 0x32a4, 0x32a5, +0x32a6, 0x32a7, 0x32a8, 0x32a9, +0x3296, 0x329d, 0x3298, 0x329e, +0x63a7, 0x3299, 0x3349, 0x3322, +0x334d, 0x3314, 0x3316, 0x3305, +0x3333, 0x334e, 0x3303, 0x3336, +0x3318, 0x3315, 0x3327, 0x3351, +0x334a, 0x3339, 0x3357, 0x330d, +0x3342, 0x3323, 0x3326, 0x333b, +0x332b, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x3300, 0x331e, 0x332a, 0x3331, +0x3347, }; +static const unsigned short sjis_mac2wchar6[] = { // 0x050c - 0x0551 +0x337e, 0x337d, 0x337c, 0x337b, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x337f, 0xf862, 0xf862, +0x222e, 0x221f, 0x22bf, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x301d, 0x301f, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x3094, 0x0000, 0x30f7, 0x30f8, +0x30f9, 0x30fa, }; +static const unsigned short sjis_mac2wchar7[] = { // 0x1ed9 - 0x1f18 +0x3001, 0x3002, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0xffe3, 0xfe33, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x30fc, +0xfe31, 0x2010, 0x0000, 0x0000, +0x301c, 0x2016, 0xff5c, 0x2026, +0xfe30, 0x0000, 0x0000, 0x0000, +0x0000, 0xfe35, 0xfe36, 0xfe39, +0xfe3a, 0xff3b, 0xff3d, 0xfe37, +0xfe38, 0xfe3f, 0xfe40, 0xfe3d, +0xfe3e, 0xfe41, 0xfe42, 0xfe43, +0xfe44, 0xfe3b, 0xfe3c, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0xff1d, }; +static const unsigned short sjis_mac2wchar8[] = { // 0x1ff2 - 0x20a5 +0x3041, 0x0000, +0x3043, 0x0000, 0x3045, 0x0000, +0x3047, 0x0000, 0x3049, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x3063, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x3083, 0x0000, 0x3085, 0x0000, +0x3087, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x308e, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x30a1, 0x0000, 0x30a3, 0x0000, +0x30a5, 0x0000, 0x30a7, 0x0000, +0x30a9, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x30c3, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x30e3, 0x0000, +0x30e5, 0x0000, 0x30e7, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x30ee, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x30f5, 0x30f6, }; + +static const unsigned short wchar2sjis_mac4[] = { // 0x2660 - 0x2667 +0x040e, 0x040c, 0x040d, 0x040f, +0x040a, 0x0410, 0x0411, 0x040b, +}; + +static const unsigned short wchar2sjis_mac7[] = { // 0x322a - 0x3243 +0x0469, 0x046a, +0x046b, 0x046c, 0x046d, 0x046e, +0x0468, 0x0475, 0x0478, 0x047b, +0x0477, 0x047c, 0x047a, 0x0470, +0x0480, 0x0473, 0x0474, 0x0479, +0x047d, 0x047e, 0x0476, 0x047f, +0x046f, 0x0000, 0x0471, 0x0472, +}; + +static const unsigned short wchar2sjis_mac8[] = { // 0x3296 - 0x329e +0x04c0, 0x0000, +0x04c2, 0x04c5, 0x0000, 0x0000, +0x0000, 0x04c1, 0x04c3, }; + +static const unsigned short wchar2sjis_mac9[] = { // 0x3300 - 0x33d4 +0x04e4, 0x0000, 0x0000, 0x04ce, +0x0000, 0x04cb, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x04d7, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x04c9, 0x04d1, 0x04ca, 0x0000, +0x04d0, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x04e5, 0x0000, +0x0000, 0x0000, 0x04c7, 0x04d9, +0x0000, 0x0000, 0x04da, 0x04d2, +0x0000, 0x0000, 0x04e6, 0x04dc, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x04e7, 0x0000, 0x04cc, +0x0000, 0x0000, 0x04cf, 0x0000, +0x0000, 0x04d5, 0x0000, 0x04db, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x04d8, 0x0000, +0x0000, 0x0000, 0x0000, 0x04e8, +0x0000, 0x04c6, 0x04d4, 0x0000, +0x0000, 0x04c8, 0x04cd, 0x0000, +0x0000, 0x04d3, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x04d6, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x050f, +0x050e, 0x050d, 0x050c, 0x0521, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x03c6, 0x03c7, 0x03c8, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x03b6, 0x03b8, +0x03c5, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x03ba, 0x03bb, +0x03bd, 0x0000, 0x0000, 0x0000, +0x03ac, 0x03ae, 0x03b4, 0x03ad, +0x03af, 0x03b2, 0x03b5, 0x0000, +0x03b0, 0x03b3, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x03c1, 0x03c0, 0x03bf, 0x03be, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x03b9, 0x0000, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x03c4, +0x0000, 0x0407, 0x0000, 0x0000, +0x0000, 0x0000, 0x0000, 0x0000, +0x03c3, }; + +static const unsigned short wchar2sjis_mac10[] = { // 0xfe30 - 0xfe44 +0x1efc, 0x1ef4, 0x0000, 0x1ee9, +0x0000, 0x1f01, 0x1f02, 0x1f07, +0x1f08, 0x1f03, 0x1f04, 0x1f11, +0x1f12, 0x1f0b, 0x1f0c, 0x1f09, +0x1f0a, 0x1f0d, 0x1f0e, 0x1f0f, +0x1f10, }; + +static const unsigned short code_tbl[][3] = { + {0x02f0, 0x0303, 0x2460}, + {0x030e, 0x0321, 0x2474}, + {0x032c, 0x0334, 0x2776}, + {0x0341, 0x0349, 0x2488}, + {0x034e, 0x0359, 0x2160}, + {0x0362, 0x036d, 0x2170}, + {0x038a, 0x03a3, 0x249c}, +}; + +static const unsigned short code_ofst_tbl[] [2]= { + {0x03ac, 0x03c9}, + {0x0406, 0x0420}, + {0x0432, 0x0441}, + {0x0468, 0x0480}, + {0x04b8, 0x04e8}, + {0x050c, 0x0551}, + {0x1ed9, 0x1f18}, + {0x1ff2, 0x20a5}, +}; + +static const unsigned short *code_map[] = { + sjis_mac2wchar1, sjis_mac2wchar2, sjis_mac2wchar3, sjis_mac2wchar4, + sjis_mac2wchar5, sjis_mac2wchar6, sjis_mac2wchar7, sjis_mac2wchar8}; + +static const unsigned short code_tbl_m[][6] = { + {0x0340, 0xf860, 0x0030, 0x002e, 0x0000, 0x0000}, + {0x03c9, 0xf860, 0x0054, 0x0042, 0x0000, 0x0000}, + {0x035c, 0xf860, 0x0058, 0x0056, 0x0000, 0x0000}, + {0x0370, 0xf860, 0x0078, 0x0076, 0x0000, 0x0000}, + {0x0439, 0xf860, 0x2193, 0x2191, 0x0000, 0x0000}, + {0x0409, 0xf861, 0x0046, 0x0041, 0x0058, 0x0000}, + {0x035b, 0xf861, 0x0058, 0x0049, 0x0056, 0x0000}, + {0x036f, 0xf861, 0x0078, 0x0069, 0x0076, 0x0000}, + {0x035a, 0xf862, 0x0058, 0x0049, 0x0049, 0x0049}, + {0x036e, 0xf862, 0x0078, 0x0069, 0x0069, 0x0069}, + {0x0522, 0xf862, 0x6709, 0x9650, 0x4f1a, 0x793e}, + {0x0523, 0xf862, 0x8ca1, 0x56e3, 0x6cd5, 0x4eba}, +}; + +static int code_tbl_m_len = sizeof(code_tbl_m)/(sizeof(unsigned short)*6); + +static const unsigned short s_form_tbl[] = { + 0x2010,0x2016,0x2026, + 0x3001,0x3002,0x301c,0x3041,0x3043,0x3045,0x3047,0x3049, + 0x3063,0x3083,0x3085,0x3087,0x308e,0x30a1,0x30a3,0x30a5, + 0x30a7,0x30a9,0x30c3,0x30e3,0x30e5,0x30e7,0x30ee,0x30f5, + 0x30f6,0x30fc,0xff1d,0xff3b,0xff3d,0xff5c,0xffe3, // vertical f87e (34) + 0x2026,0xff47,0xff4d, // halfwidth f87f (3) + 0x5927,0x5c0f,0x63a7, // enclosing circle 20dd (3) + 0x21e6,0x21e7,0x21e8,0x21e9, // black arrow f87a (4) +}; + +static int s_form_tbl_len = sizeof(s_form_tbl)/sizeof(unsigned short); + +static const unsigned short s_form_sjis_tbl[] = { + 0xeb5d,0xeb61,0xeb63, + 0xeb41,0xeb42,0xeb60,0xec9f,0xeca1,0xeca3,0xeca5,0xeca7, + 0xecc1,0xece1,0xece3,0xece5,0xecec,0xed40,0xed42,0xed44, + 0xed46,0xed48,0xed62,0xed83,0xed85,0xed87,0xed8e,0xed95, + 0xed96,0xeb5b,0xeb81,0xeb6d,0xeb6e,0xeb62,0xeb50, // vertical + 0x00ff,0x864b,0x8645, // halfwidth + 0x8791,0x8792,0x879d, // enclosing circle + 0x86d4,0x86d5,0x86d3,0x86d6, // black arrow +}; + +static const unsigned short s_form_sjis_fallback_tbl[] = { + 0x815d,0x8161,0x8163, + 0x8141,0x8142,0x8160,0x829f,0x82a1,0x82a3,0x82a5,0x82a7, + 0x82c1,0x82e1,0x82e3,0x82e5,0x82ec,0x8340,0x8342,0x8344, + 0x8346,0x8348,0x8362,0x8383,0x8385,0x8387,0x838e,0x8395, + 0x8396,0x815b,0x8181,0x816d,0x816e,0x8162,0x8150, // vertical + 0x815d,0x8287,0x828d, // halfwidth + 0x91e5,0x8fac,0x8d54, // enclosing circle + 0x86d0,0x86d1,0x86cf,0x86d2, // arrow +}; + +static const unsigned short wchar2sjis_mac_r_tbl[][3] = { + {0x2160, 0x216b, 0x034e}, + {0x2170, 0x217b, 0x0362}, + {0x2460, 0x2473, 0x02f0}, + {0x2474, 0x2487, 0x030e}, + {0x2488, 0x2490, 0x0341}, + {0x249c, 0x24b5, 0x038a}, + {0x2776, 0x277e, 0x032c}, + {0x30f7, 0x30fa, 0x054e}, + {0x32a4, 0x32a9, 0x04ba}, +}; + +static int wchar2sjis_mac_r_tbl_len = sizeof(wchar2sjis_mac_r_tbl)/(3*sizeof(unsigned short)); + +static const unsigned short wchar2sjis_mac_r_map[][2] = { + {0x2660, 0x2667}, + {0x322a, 0x3243}, + {0x3296, 0x329e}, + {0x3300, 0x33d4}, + {0xfe30, 0xfe44}, +}; + +static int wchar2sjis_mac_r_map_len = sizeof(wchar2sjis_mac_r_map)/(2*sizeof(unsigned short)); + +static const unsigned short *wchar2sjis_mac_code_map[] = { + wchar2sjis_mac4, wchar2sjis_mac7, wchar2sjis_mac8, wchar2sjis_mac9, wchar2sjis_mac10}; + +static const unsigned short wchar2sjis_mac_wchar_tbl[][2] = { + {0x2109, 0x03c2}, + {0x2113, 0x03bc}, + {0x2116, 0x0406}, + {0x2121, 0x0408}, + {0x21c4, 0x0437}, + {0x21c5, 0x0438}, + {0x21c6, 0x0436}, + {0x21e6, 0x043b}, + {0x21e7, 0x043c}, + {0x21e8, 0x043a}, + {0x21e9, 0x043d}, + {0x221f, 0x0525}, + {0x222e, 0x0524}, + {0x22bf, 0x0526}, + {0x260e, 0x041f}, + {0x261c, 0x0433}, + {0x261d, 0x0434}, + {0x261e, 0x0432}, + {0x261f, 0x0435}, + {0x3004, 0x0420}, + {0x301d, 0x0538}, + {0x301f, 0x0539}, + {0x3020, 0x041e}, + {0x3094, 0x054c}, +}; + +static int wchar2sjis_mac_wchar_tbl_len = sizeof(wchar2sjis_mac_wchar_tbl)/(2*sizeof(unsigned short)); diff --git a/ext/mbstring/libmbfl/filters/translit_kana_jisx0201_jisx0208.h b/ext/mbstring/libmbfl/filters/translit_kana_jisx0201_jisx0208.h new file mode 100644 index 0000000..4f8f4b7 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/translit_kana_jisx0201_jisx0208.h @@ -0,0 +1,67 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: Moriyoshi Koizumi <koizumi@gree.co.jp> + * + */ + +#ifndef TRANSLIT_KANA_JISX0201_JISX0208_H +#define TRANSLIT_KANA_JISX0201_JISX0208_H + +static const unsigned char hankana2zenkana_table[64] = { + 0x00,0x02,0x0C,0x0D,0x01,0xFB,0xF2,0xA1,0xA3,0xA5, + 0xA7,0xA9,0xE3,0xE5,0xE7,0xC3,0xFC,0xA2,0xA4,0xA6, + 0xA8,0xAA,0xAB,0xAD,0xAF,0xB1,0xB3,0xB5,0xB7,0xB9, + 0xBB,0xBD,0xBF,0xC1,0xC4,0xC6,0xC8,0xCA,0xCB,0xCC, + 0xCD,0xCE,0xCF,0xD2,0xD5,0xD8,0xDB,0xDE,0xDF,0xE0, + 0xE1,0xE2,0xE4,0xE6,0xE8,0xE9,0xEA,0xEB,0xEC,0xED, + 0xEF,0xF3,0x9B,0x9C +}; + +static const unsigned char hankana2zenhira_table[64] = { + 0x00,0x02,0x0C,0x0D,0x01,0xFB,0x92,0x41,0x43,0x45, + 0x47,0x49,0x83,0x85,0x87,0x63,0xFC,0x42,0x44,0x46, + 0x48,0x4A,0x4B,0x4D,0x4F,0x51,0x53,0x55,0x57,0x59, + 0x5B,0x5D,0x5F,0x61,0x64,0x66,0x68,0x6A,0x6B,0x6C, + 0x6D,0x6E,0x6F,0x72,0x75,0x78,0x7B,0x7E,0x7F,0x80, + 0x81,0x82,0x84,0x86,0x88,0x89,0x8A,0x8B,0x8C,0x8D, + 0x8F,0x93,0x9B,0x9C +}; +static const unsigned char zenkana2hankana_table[84][2] = { + {0x67,0x00},{0x71,0x00},{0x68,0x00},{0x72,0x00},{0x69,0x00}, + {0x73,0x00},{0x6A,0x00},{0x74,0x00},{0x6B,0x00},{0x75,0x00}, + {0x76,0x00},{0x76,0x9E},{0x77,0x00},{0x77,0x9E},{0x78,0x00}, + {0x78,0x9E},{0x79,0x00},{0x79,0x9E},{0x7A,0x00},{0x7A,0x9E}, + {0x7B,0x00},{0x7B,0x9E},{0x7C,0x00},{0x7C,0x9E},{0x7D,0x00}, + {0x7D,0x9E},{0x7E,0x00},{0x7E,0x9E},{0x7F,0x00},{0x7F,0x9E}, + {0x80,0x00},{0x80,0x9E},{0x81,0x00},{0x81,0x9E},{0x6F,0x00}, + {0x82,0x00},{0x82,0x9E},{0x83,0x00},{0x83,0x9E},{0x84,0x00}, + {0x84,0x9E},{0x85,0x00},{0x86,0x00},{0x87,0x00},{0x88,0x00}, + {0x89,0x00},{0x8A,0x00},{0x8A,0x9E},{0x8A,0x9F},{0x8B,0x00}, + {0x8B,0x9E},{0x8B,0x9F},{0x8C,0x00},{0x8C,0x9E},{0x8C,0x9F}, + {0x8D,0x00},{0x8D,0x9E},{0x8D,0x9F},{0x8E,0x00},{0x8E,0x9E}, + {0x8E,0x9F},{0x8F,0x00},{0x90,0x00},{0x91,0x00},{0x92,0x00}, + {0x93,0x00},{0x6C,0x00},{0x94,0x00},{0x6D,0x00},{0x95,0x00}, + {0x6E,0x00},{0x96,0x00},{0x97,0x00},{0x98,0x00},{0x99,0x00}, + {0x9A,0x00},{0x9B,0x00},{0x9C,0x00},{0x9C,0x00},{0x72,0x00}, + {0x74,0x00},{0x66,0x00},{0x9D,0x00},{0x73,0x9E} +}; + +#endif /* TRANSLIT_KANA_JISX0201_JISX0208_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_prop.h b/ext/mbstring/libmbfl/filters/unicode_prop.h new file mode 100644 index 0000000..d21ec61 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_prop.h @@ -0,0 +1,167 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The authors of this file: PHP3 Internationalization team + * + */ + +/* charactor property table */ +#define MBFL_CHP_CTL 0x01 +#define MBFL_CHP_DIGIT 0x02 +#define MBFL_CHP_UALPHA 0x04 +#define MBFL_CHP_LALPHA 0x08 +#define MBFL_CHP_MMHQENC 0x10 /* must Q-encoding in MIME Header encoded-word */ +#define MBFL_CHP_MSPECIAL 0x20 /* RFC822 Special characters */ + +/* + * Unicode table + */ + +static const unsigned char mbfl_charprop_table[] = { +/* NUL 0 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC, +/* SCH 1 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* SIX 2 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* EIX 3 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* EOT 4 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* ENQ 5 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* ACK 6 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* BEL 7 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* BS 8 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* HI 9 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* LF 10 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* VI 11 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* FF 12 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* CR 13 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* SO 14 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* SI 15 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* SLE 16 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* CSI 17 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* DC2 18 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* DC3 19 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* DC4 20 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* NAK 21 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* SYN 22 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* EIB 23 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* CAN 24 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* EM 25 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* SLB 26 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* ESC 27 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* FS 28 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* GS 29 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* RS 30 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* US 31 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC , +/* SP 32 */ MBFL_CHP_MMHQENC , +/* ! 33 */ 0 , +/* " 34 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , +/* # 35 */ MBFL_CHP_MMHQENC , +/* $ 36 */ MBFL_CHP_MMHQENC , +/* % 37 */ MBFL_CHP_MMHQENC , +/* & 38 */ MBFL_CHP_MMHQENC , +/* ' 39 */ MBFL_CHP_MMHQENC , +/* ( 40 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , +/* ) 41 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , +/* * 42 */ 0 , +/* + 43 */ 0 , +/* , 44 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , +/* - 45 */ 0 , +/* . 46 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , +/* / 47 */ 0 , +/* 0 48 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , +/* 1 49 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , +/* 2 50 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , +/* 3 51 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , +/* 4 52 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , +/* 5 53 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , +/* 6 54 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , +/* 7 55 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , +/* 8 56 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , +/* 9 57 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC , +/* : 58 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , +/* ; 59 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , +/* < 60 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , +/* = 61 */ 0 , +/* > 62 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , +/* ? 63 */ MBFL_CHP_MMHQENC , +/* @ 64 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , +/* A 65 */ MBFL_CHP_UALPHA , +/* B 66 */ MBFL_CHP_UALPHA , +/* C 67 */ MBFL_CHP_UALPHA , +/* D 68 */ MBFL_CHP_UALPHA , +/* E 69 */ MBFL_CHP_UALPHA , +/* F 70 */ MBFL_CHP_UALPHA , +/* G 71 */ MBFL_CHP_UALPHA , +/* H 72 */ MBFL_CHP_UALPHA , +/* I 73 */ MBFL_CHP_UALPHA , +/* J 74 */ MBFL_CHP_UALPHA , +/* K 75 */ MBFL_CHP_UALPHA , +/* L 76 */ MBFL_CHP_UALPHA , +/* M 77 */ MBFL_CHP_UALPHA , +/* N 78 */ MBFL_CHP_UALPHA , +/* O 79 */ MBFL_CHP_UALPHA , +/* P 80 */ MBFL_CHP_UALPHA , +/* Q 81 */ MBFL_CHP_UALPHA , +/* R 82 */ MBFL_CHP_UALPHA , +/* S 83 */ MBFL_CHP_UALPHA , +/* T 84 */ MBFL_CHP_UALPHA , +/* U 85 */ MBFL_CHP_UALPHA , +/* V 86 */ MBFL_CHP_UALPHA , +/* W 87 */ MBFL_CHP_UALPHA , +/* X 88 */ MBFL_CHP_UALPHA , +/* Y 89 */ MBFL_CHP_UALPHA , +/* Z 90 */ MBFL_CHP_UALPHA , +/* [ 91 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , +/* \ 92 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , +/* ] 93 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL , +/* ^ 94 */ MBFL_CHP_MMHQENC , +/* _ 95 */ MBFL_CHP_MMHQENC , +/* ` 96 */ MBFL_CHP_MMHQENC , +/* a 97 */ MBFL_CHP_LALPHA , +/* b 98 */ MBFL_CHP_LALPHA , +/* c 99 */ MBFL_CHP_LALPHA , +/* d 100 */ MBFL_CHP_LALPHA , +/* e 101 */ MBFL_CHP_LALPHA , +/* f 102 */ MBFL_CHP_LALPHA , +/* g 103 */ MBFL_CHP_LALPHA , +/* h 104 */ MBFL_CHP_LALPHA , +/* i 105 */ MBFL_CHP_LALPHA , +/* j 106 */ MBFL_CHP_LALPHA , +/* k 107 */ MBFL_CHP_LALPHA , +/* l 108 */ MBFL_CHP_LALPHA , +/* m 109 */ MBFL_CHP_LALPHA , +/* n 110 */ MBFL_CHP_LALPHA , +/* o 111 */ MBFL_CHP_LALPHA , +/* p 112 */ MBFL_CHP_LALPHA , +/* q 113 */ MBFL_CHP_LALPHA , +/* r 114 */ MBFL_CHP_LALPHA , +/* s 115 */ MBFL_CHP_LALPHA , +/* t 116 */ MBFL_CHP_LALPHA , +/* u 117 */ MBFL_CHP_LALPHA , +/* v 118 */ MBFL_CHP_LALPHA , +/* w 119 */ MBFL_CHP_LALPHA , +/* x 120 */ MBFL_CHP_LALPHA , +/* y 121 */ MBFL_CHP_LALPHA , +/* z 122 */ MBFL_CHP_LALPHA , +/* { 123 */ MBFL_CHP_MMHQENC , +/* | 124 */ MBFL_CHP_MMHQENC , +/* } 125 */ MBFL_CHP_MMHQENC , +/* ~ 126 */ MBFL_CHP_MMHQENC , +/* DEL 127 */ MBFL_CHP_MMHQENC +}; + diff --git a/ext/mbstring/libmbfl/filters/unicode_table_armscii8.h b/ext/mbstring/libmbfl/filters/unicode_table_armscii8.h new file mode 100644 index 0000000..174e95d --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_armscii8.h @@ -0,0 +1,54 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: Hayk Chamyan <hamshen@gmail.com> + * + */ + +#ifndef UNICODE_TABLE_ARMSCII8_H +#define UNICODE_TABLE_ARMSCII8_H + +/* ArmSCII-8 to Unicode table */ +static const unsigned short armscii8_ucs_table[] = { +/*0x00a0, 0x00a1, 0x0587, 0x0589, 0x0029, 0x0028, 0x00bb, 0x00ab,*/ +0x00a0, 0xfffd, 0x0587, 0x0589, 0x0029, 0x0028, 0x00bb, 0x00ab, +0x2014, 0x002e, 0x055d, 0x002c, 0x002d, 0x058a, 0x2026, 0x055c, +0x055b, 0x055e, 0x0531, 0x0561, 0x0532, 0x0562, 0x0533, 0x0563, +0x0534, 0x0564, 0x0535, 0x0565, 0x0536, 0x0566, 0x0537, 0x0567, +0x0538, 0x0568, 0x0539, 0x0569, 0x053a, 0x056a, 0x053b, 0x056b, +0x053c, 0x056c, 0x053d, 0x056d, 0x053e, 0x056e, 0x053f, 0x056f, +0x0540, 0x0570, 0x0541, 0x0571, 0x0542, 0x0572, 0x0543, 0x0573, +0x0544, 0x0574, 0x0545, 0x0575, 0x0546, 0x0576, 0x0547, 0x0577, +0x0548, 0x0578, 0x0549, 0x0579, 0x054a, 0x057a, 0x054b, 0x057b, +0x054c, 0x057c, 0x054d, 0x057d, 0x054e, 0x057e, 0x054f, 0x057f, +0x0550, 0x0580, 0x0551, 0x0581, 0x0552, 0x0582, 0x0553, 0x0583, +/*0x0554, 0x0584, 0x0555, 0x0585, 0x0556, 0x0586, 0x055a, 0x00ff*/ +0x0554, 0x0584, 0x0555, 0x0585, 0x0556, 0x0586, 0x055a, 0xfffd +}; + +static const unsigned char ucs_armscii8_table[] = { +0xa5, 0xa4, 0x2a, 0x2b, 0xab, 0xac, 0xa9, 0x2f +}; + +static const int armscii8_ucs_table_min = 0xa0; +static const int armscii8_ucs_table_len = (sizeof (armscii8_ucs_table) / sizeof (unsigned short)); +static const int armscii8_ucs_table_max = 0xa0 + (sizeof (armscii8_ucs_table) / sizeof (unsigned short)); + +#endif /* UNICODE_TABLE_ARMSCII8_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_big5.h b/ext/mbstring/libmbfl/filters/unicode_table_big5.h new file mode 100644 index 0000000..2616d04 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_big5.h @@ -0,0 +1,5123 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: Rui Hirokawa <hirokawa@php.net> + * + */ + +#ifndef UNICODE_TABLE_BIG5_H +#define UNICODE_TABLE_BIG5_H + +/* Big5 -> UCS */ +static const unsigned short big5_ucs_table[] = { +0x3000,0xff0c,0x3001,0x3002,0xff0e,0x2027,0xff1b,0xff1a, +0xff1f,0xff01,0xfe30,0x2026,0x2025,0xfe50,0xfe51,0xfe52, +0x00b7,0xfe54,0xfe55,0xfe56,0xfe57,0xff5c,0x2013,0xfe31, +0x2014,0xfe33,0x2574,0xfe34,0xfe4f,0xff08,0xff09,0xfe35, +0xfe36,0xff5b,0xff5d,0xfe37,0xfe38,0x3014,0x3015,0xfe39, +0xfe3a,0x3010,0x3011,0xfe3b,0xfe3c,0x300a,0x300b,0xfe3d, +0xfe3e,0x3008,0x3009,0xfe3f,0xfe40,0x300c,0x300d,0xfe41, +0xfe42,0x300e,0x300f,0xfe43,0xfe44,0xfe59,0xfe5a,0xfe5b, +0xfe5c,0xfe5d,0xfe5e,0x2018,0x2019,0x201c,0x201d,0x301d, +0x301e,0x2035,0x2032,0xff03,0xff06,0xff0a,0x203b,0x00a7, +0x3003,0x25cb,0x25cf,0x25b3,0x25b2,0x25ce,0x2606,0x2605, +0x25c7,0x25c6,0x25a1,0x25a0,0x25bd,0x25bc,0x32a3,0x2105, +0x00af,0xffe3,0xff3f,0x02cd,0xfe49,0xfe4a,0xfe4d,0xfe4e, +0xfe4b,0xfe4c,0xfe5f,0xfe60,0xfe61,0xff0b,0xff0d,0x00d7, +0x00f7,0x00b1,0x221a,0xff1c,0xff1e,0xff1d,0x2266,0x2267, +0x2260,0x221e,0x2252,0x2261,0xfe62,0xfe63,0xfe64,0xfe65, +0xfe66,0xff5e,0x2229,0x222a,0x22a5,0x2220,0x221f,0x22bf, +0x33d2,0x33d1,0x222b,0x222e,0x2235,0x2234,0x2640,0x2642, +0x2295,0x2299,0x2191,0x2193,0x2190,0x2192,0x2196,0x2197, +0x2199,0x2198,0x2225,0x2223,0xff0f,0xff3c,0x2215,0xfe68, +0xff04,0xffe5,0x3012,0xffe0,0xffe1,0xff05,0xff20,0x2103, +0x2109,0xfe69,0xfe6a,0xfe6b,0x33d5,0x339c,0x339d,0x339e, +0x33ce,0x33a1,0x338e,0x338f,0x33c4,0x00b0,0x5159,0x515b, +0x515e,0x515d,0x5161,0x5163,0x55e7,0x74e9,0x7cce,0x2581, +0x2582,0x2583,0x2584,0x2585,0x2586,0x2587,0x2588,0x258f, +0x258e,0x258d,0x258c,0x258b,0x258a,0x2589,0x253c,0x2534, +0x252c,0x2524,0x251c,0x2594,0x2500,0x2502,0x2595,0x250c, +0x2510,0x2514,0x2518,0x256d,0x256e,0x2570,0x256f,0x2550, +0x255e,0x256a,0x2561,0x25e2,0x25e3,0x25e5,0x25e4,0x2571, +0x2572,0x2573,0xff10,0xff11,0xff12,0xff13,0xff14,0xff15, +0xff16,0xff17,0xff18,0xff19,0x2160,0x2161,0x2162,0x2163, +0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,0x3021,0x3022, +0x3023,0x3024,0x3025,0x3026,0x3027,0x3028,0x3029,0x5341, +0x5344,0x5345,0xff21,0xff22,0xff23,0xff24,0xff25,0xff26, +0xff27,0xff28,0xff29,0xff2a,0xff2b,0xff2c,0xff2d,0xff2e, +0xff2f,0xff30,0xff31,0xff32,0xff33,0xff34,0xff35,0xff36, +0xff37,0xff38,0xff39,0xff3a,0xff41,0xff42,0xff43,0xff44, +0xff45,0xff46,0xff47,0xff48,0xff49,0xff4a,0xff4b,0xff4c, +0xff4d,0xff4e,0xff4f,0xff50,0xff51,0xff52,0xff53,0xff54, +0xff55,0xff56,0xff57,0xff58,0xff59,0xff5a,0x0391,0x0392, +0x0393,0x0394,0x0395,0x0396,0x0397,0x0398,0x0399,0x039a, +0x039b,0x039c,0x039d,0x039e,0x039f,0x03a0,0x03a1,0x03a3, +0x03a4,0x03a5,0x03a6,0x03a7,0x03a8,0x03a9,0x03b1,0x03b2, +0x03b3,0x03b4,0x03b5,0x03b6,0x03b7,0x03b8,0x03b9,0x03ba, +0x03bb,0x03bc,0x03bd,0x03be,0x03bf,0x03c0,0x03c1,0x03c3, +0x03c4,0x03c5,0x03c6,0x03c7,0x03c8,0x03c9,0x3105,0x3106, +0x3107,0x3108,0x3109,0x310a,0x310b,0x310c,0x310d,0x310e, +0x310f,0x3110,0x3111,0x3112,0x3113,0x3114,0x3115,0x3116, +0x3117,0x3118,0x3119,0x311a,0x311b,0x311c,0x311d,0x311e, +0x311f,0x3120,0x3121,0x3122,0x3123,0x3124,0x3125,0x3126, +0x3127,0x3128,0x3129,0x02d9,0x02c9,0x02ca,0x02c7,0x02cb, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x20ac,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4e00, +0x4e59,0x4e01,0x4e03,0x4e43,0x4e5d,0x4e86,0x4e8c,0x4eba, +0x513f,0x5165,0x516b,0x51e0,0x5200,0x5201,0x529b,0x5315, +0x5341,0x535c,0x53c8,0x4e09,0x4e0b,0x4e08,0x4e0a,0x4e2b, +0x4e38,0x51e1,0x4e45,0x4e48,0x4e5f,0x4e5e,0x4e8e,0x4ea1, +0x5140,0x5203,0x52fa,0x5343,0x53c9,0x53e3,0x571f,0x58eb, +0x5915,0x5927,0x5973,0x5b50,0x5b51,0x5b53,0x5bf8,0x5c0f, +0x5c22,0x5c38,0x5c71,0x5ddd,0x5de5,0x5df1,0x5df2,0x5df3, +0x5dfe,0x5e72,0x5efe,0x5f0b,0x5f13,0x624d,0x4e11,0x4e10, +0x4e0d,0x4e2d,0x4e30,0x4e39,0x4e4b,0x5c39,0x4e88,0x4e91, +0x4e95,0x4e92,0x4e94,0x4ea2,0x4ec1,0x4ec0,0x4ec3,0x4ec6, +0x4ec7,0x4ecd,0x4eca,0x4ecb,0x4ec4,0x5143,0x5141,0x5167, +0x516d,0x516e,0x516c,0x5197,0x51f6,0x5206,0x5207,0x5208, +0x52fb,0x52fe,0x52ff,0x5316,0x5339,0x5348,0x5347,0x5345, +0x535e,0x5384,0x53cb,0x53ca,0x53cd,0x58ec,0x5929,0x592b, +0x592a,0x592d,0x5b54,0x5c11,0x5c24,0x5c3a,0x5c6f,0x5df4, +0x5e7b,0x5eff,0x5f14,0x5f15,0x5fc3,0x6208,0x6236,0x624b, +0x624e,0x652f,0x6587,0x6597,0x65a4,0x65b9,0x65e5,0x66f0, +0x6708,0x6728,0x6b20,0x6b62,0x6b79,0x6bcb,0x6bd4,0x6bdb, +0x6c0f,0x6c34,0x706b,0x722a,0x7236,0x723b,0x7247,0x7259, +0x725b,0x72ac,0x738b,0x4e19,0x4e16,0x4e15,0x4e14,0x4e18, +0x4e3b,0x4e4d,0x4e4f,0x4e4e,0x4ee5,0x4ed8,0x4ed4,0x4ed5, +0x4ed6,0x4ed7,0x4ee3,0x4ee4,0x4ed9,0x4ede,0x5145,0x5144, +0x5189,0x518a,0x51ac,0x51f9,0x51fa,0x51f8,0x520a,0x52a0, +0x529f,0x5305,0x5306,0x5317,0x531d,0x4edf,0x534a,0x5349, +0x5361,0x5360,0x536f,0x536e,0x53bb,0x53ef,0x53e4,0x53f3, +0x53ec,0x53ee,0x53e9,0x53e8,0x53fc,0x53f8,0x53f5,0x53eb, +0x53e6,0x53ea,0x53f2,0x53f1,0x53f0,0x53e5,0x53ed,0x53fb, +0x56db,0x56da,0x5916,0x592e,0x5931,0x5974,0x5976,0x5b55, +0x5b83,0x5c3c,0x5de8,0x5de7,0x5de6,0x5e02,0x5e03,0x5e73, +0x5e7c,0x5f01,0x5f18,0x5f17,0x5fc5,0x620a,0x6253,0x6254, +0x6252,0x6251,0x65a5,0x65e6,0x672e,0x672c,0x672a,0x672b, +0x672d,0x6b63,0x6bcd,0x6c11,0x6c10,0x6c38,0x6c41,0x6c40, +0x6c3e,0x72af,0x7384,0x7389,0x74dc,0x74e6,0x7518,0x751f, +0x7528,0x7529,0x7530,0x7531,0x7532,0x7533,0x758b,0x767d, +0x76ae,0x76bf,0x76ee,0x77db,0x77e2,0x77f3,0x793a,0x79be, +0x7a74,0x7acb,0x4e1e,0x4e1f,0x4e52,0x4e53,0x4e69,0x4e99, +0x4ea4,0x4ea6,0x4ea5,0x4eff,0x4f09,0x4f19,0x4f0a,0x4f15, +0x4f0d,0x4f10,0x4f11,0x4f0f,0x4ef2,0x4ef6,0x4efb,0x4ef0, +0x4ef3,0x4efd,0x4f01,0x4f0b,0x5149,0x5147,0x5146,0x5148, +0x5168,0x5171,0x518d,0x51b0,0x5217,0x5211,0x5212,0x520e, +0x5216,0x52a3,0x5308,0x5321,0x5320,0x5370,0x5371,0x5409, +0x540f,0x540c,0x540a,0x5410,0x5401,0x540b,0x5404,0x5411, +0x540d,0x5408,0x5403,0x540e,0x5406,0x5412,0x56e0,0x56de, +0x56dd,0x5733,0x5730,0x5728,0x572d,0x572c,0x572f,0x5729, +0x5919,0x591a,0x5937,0x5938,0x5984,0x5978,0x5983,0x597d, +0x5979,0x5982,0x5981,0x5b57,0x5b58,0x5b87,0x5b88,0x5b85, +0x5b89,0x5bfa,0x5c16,0x5c79,0x5dde,0x5e06,0x5e76,0x5e74, +0x5f0f,0x5f1b,0x5fd9,0x5fd6,0x620e,0x620c,0x620d,0x6210, +0x6263,0x625b,0x6258,0x6536,0x65e9,0x65e8,0x65ec,0x65ed, +0x66f2,0x66f3,0x6709,0x673d,0x6734,0x6731,0x6735,0x6b21, +0x6b64,0x6b7b,0x6c16,0x6c5d,0x6c57,0x6c59,0x6c5f,0x6c60, +0x6c50,0x6c55,0x6c61,0x6c5b,0x6c4d,0x6c4e,0x7070,0x725f, +0x725d,0x767e,0x7af9,0x7c73,0x7cf8,0x7f36,0x7f8a,0x7fbd, +0x8001,0x8003,0x800c,0x8012,0x8033,0x807f,0x8089,0x808b, +0x808c,0x81e3,0x81ea,0x81f3,0x81fc,0x820c,0x821b,0x821f, +0x826e,0x8272,0x827e,0x866b,0x8840,0x884c,0x8863,0x897f, +0x9621,0x4e32,0x4ea8,0x4f4d,0x4f4f,0x4f47,0x4f57,0x4f5e, +0x4f34,0x4f5b,0x4f55,0x4f30,0x4f50,0x4f51,0x4f3d,0x4f3a, +0x4f38,0x4f43,0x4f54,0x4f3c,0x4f46,0x4f63,0x4f5c,0x4f60, +0x4f2f,0x4f4e,0x4f36,0x4f59,0x4f5d,0x4f48,0x4f5a,0x514c, +0x514b,0x514d,0x5175,0x51b6,0x51b7,0x5225,0x5224,0x5229, +0x522a,0x5228,0x52ab,0x52a9,0x52aa,0x52ac,0x5323,0x5373, +0x5375,0x541d,0x542d,0x541e,0x543e,0x5426,0x544e,0x5427, +0x5446,0x5443,0x5433,0x5448,0x5442,0x541b,0x5429,0x544a, +0x5439,0x543b,0x5438,0x542e,0x5435,0x5436,0x5420,0x543c, +0x5440,0x5431,0x542b,0x541f,0x542c,0x56ea,0x56f0,0x56e4, +0x56eb,0x574a,0x5751,0x5740,0x574d,0x5747,0x574e,0x573e, +0x5750,0x574f,0x573b,0x58ef,0x593e,0x599d,0x5992,0x59a8, +0x599e,0x59a3,0x5999,0x5996,0x598d,0x59a4,0x5993,0x598a, +0x59a5,0x5b5d,0x5b5c,0x5b5a,0x5b5b,0x5b8c,0x5b8b,0x5b8f, +0x5c2c,0x5c40,0x5c41,0x5c3f,0x5c3e,0x5c90,0x5c91,0x5c94, +0x5c8c,0x5deb,0x5e0c,0x5e8f,0x5e87,0x5e8a,0x5ef7,0x5f04, +0x5f1f,0x5f64,0x5f62,0x5f77,0x5f79,0x5fd8,0x5fcc,0x5fd7, +0x5fcd,0x5ff1,0x5feb,0x5ff8,0x5fea,0x6212,0x6211,0x6284, +0x6297,0x6296,0x6280,0x6276,0x6289,0x626d,0x628a,0x627c, +0x627e,0x6279,0x6273,0x6292,0x626f,0x6298,0x626e,0x6295, +0x6293,0x6291,0x6286,0x6539,0x653b,0x6538,0x65f1,0x66f4, +0x675f,0x674e,0x674f,0x6750,0x6751,0x675c,0x6756,0x675e, +0x6749,0x6746,0x6760,0x6753,0x6757,0x6b65,0x6bcf,0x6c42, +0x6c5e,0x6c99,0x6c81,0x6c88,0x6c89,0x6c85,0x6c9b,0x6c6a, +0x6c7a,0x6c90,0x6c70,0x6c8c,0x6c68,0x6c96,0x6c92,0x6c7d, +0x6c83,0x6c72,0x6c7e,0x6c74,0x6c86,0x6c76,0x6c8d,0x6c94, +0x6c98,0x6c82,0x7076,0x707c,0x707d,0x7078,0x7262,0x7261, +0x7260,0x72c4,0x72c2,0x7396,0x752c,0x752b,0x7537,0x7538, +0x7682,0x76ef,0x77e3,0x79c1,0x79c0,0x79bf,0x7a76,0x7cfb, +0x7f55,0x8096,0x8093,0x809d,0x8098,0x809b,0x809a,0x80b2, +0x826f,0x8292,0x828b,0x828d,0x898b,0x89d2,0x8a00,0x8c37, +0x8c46,0x8c55,0x8c9d,0x8d64,0x8d70,0x8db3,0x8eab,0x8eca, +0x8f9b,0x8fb0,0x8fc2,0x8fc6,0x8fc5,0x8fc4,0x5de1,0x9091, +0x90a2,0x90aa,0x90a6,0x90a3,0x9149,0x91c6,0x91cc,0x9632, +0x962e,0x9631,0x962a,0x962c,0x4e26,0x4e56,0x4e73,0x4e8b, +0x4e9b,0x4e9e,0x4eab,0x4eac,0x4f6f,0x4f9d,0x4f8d,0x4f73, +0x4f7f,0x4f6c,0x4f9b,0x4f8b,0x4f86,0x4f83,0x4f70,0x4f75, +0x4f88,0x4f69,0x4f7b,0x4f96,0x4f7e,0x4f8f,0x4f91,0x4f7a, +0x5154,0x5152,0x5155,0x5169,0x5177,0x5176,0x5178,0x51bd, +0x51fd,0x523b,0x5238,0x5237,0x523a,0x5230,0x522e,0x5236, +0x5241,0x52be,0x52bb,0x5352,0x5354,0x5353,0x5351,0x5366, +0x5377,0x5378,0x5379,0x53d6,0x53d4,0x53d7,0x5473,0x5475, +0x5496,0x5478,0x5495,0x5480,0x547b,0x5477,0x5484,0x5492, +0x5486,0x547c,0x5490,0x5471,0x5476,0x548c,0x549a,0x5462, +0x5468,0x548b,0x547d,0x548e,0x56fa,0x5783,0x5777,0x576a, +0x5769,0x5761,0x5766,0x5764,0x577c,0x591c,0x5949,0x5947, +0x5948,0x5944,0x5954,0x59be,0x59bb,0x59d4,0x59b9,0x59ae, +0x59d1,0x59c6,0x59d0,0x59cd,0x59cb,0x59d3,0x59ca,0x59af, +0x59b3,0x59d2,0x59c5,0x5b5f,0x5b64,0x5b63,0x5b97,0x5b9a, +0x5b98,0x5b9c,0x5b99,0x5b9b,0x5c1a,0x5c48,0x5c45,0x5c46, +0x5cb7,0x5ca1,0x5cb8,0x5ca9,0x5cab,0x5cb1,0x5cb3,0x5e18, +0x5e1a,0x5e16,0x5e15,0x5e1b,0x5e11,0x5e78,0x5e9a,0x5e97, +0x5e9c,0x5e95,0x5e96,0x5ef6,0x5f26,0x5f27,0x5f29,0x5f80, +0x5f81,0x5f7f,0x5f7c,0x5fdd,0x5fe0,0x5ffd,0x5ff5,0x5fff, +0x600f,0x6014,0x602f,0x6035,0x6016,0x602a,0x6015,0x6021, +0x6027,0x6029,0x602b,0x601b,0x6216,0x6215,0x623f,0x623e, +0x6240,0x627f,0x62c9,0x62cc,0x62c4,0x62bf,0x62c2,0x62b9, +0x62d2,0x62db,0x62ab,0x62d3,0x62d4,0x62cb,0x62c8,0x62a8, +0x62bd,0x62bc,0x62d0,0x62d9,0x62c7,0x62cd,0x62b5,0x62da, +0x62b1,0x62d8,0x62d6,0x62d7,0x62c6,0x62ac,0x62ce,0x653e, +0x65a7,0x65bc,0x65fa,0x6614,0x6613,0x660c,0x6606,0x6602, +0x660e,0x6600,0x660f,0x6615,0x660a,0x6607,0x670d,0x670b, +0x676d,0x678b,0x6795,0x6771,0x679c,0x6773,0x6777,0x6787, +0x679d,0x6797,0x676f,0x6770,0x677f,0x6789,0x677e,0x6790, +0x6775,0x679a,0x6793,0x677c,0x676a,0x6772,0x6b23,0x6b66, +0x6b67,0x6b7f,0x6c13,0x6c1b,0x6ce3,0x6ce8,0x6cf3,0x6cb1, +0x6ccc,0x6ce5,0x6cb3,0x6cbd,0x6cbe,0x6cbc,0x6ce2,0x6cab, +0x6cd5,0x6cd3,0x6cb8,0x6cc4,0x6cb9,0x6cc1,0x6cae,0x6cd7, +0x6cc5,0x6cf1,0x6cbf,0x6cbb,0x6ce1,0x6cdb,0x6cca,0x6cac, +0x6cef,0x6cdc,0x6cd6,0x6ce0,0x7095,0x708e,0x7092,0x708a, +0x7099,0x722c,0x722d,0x7238,0x7248,0x7267,0x7269,0x72c0, +0x72ce,0x72d9,0x72d7,0x72d0,0x73a9,0x73a8,0x739f,0x73ab, +0x73a5,0x753d,0x759d,0x7599,0x759a,0x7684,0x76c2,0x76f2, +0x76f4,0x77e5,0x77fd,0x793e,0x7940,0x7941,0x79c9,0x79c8, +0x7a7a,0x7a79,0x7afa,0x7cfe,0x7f54,0x7f8c,0x7f8b,0x8005, +0x80ba,0x80a5,0x80a2,0x80b1,0x80a1,0x80ab,0x80a9,0x80b4, +0x80aa,0x80af,0x81e5,0x81fe,0x820d,0x82b3,0x829d,0x8299, +0x82ad,0x82bd,0x829f,0x82b9,0x82b1,0x82ac,0x82a5,0x82af, +0x82b8,0x82a3,0x82b0,0x82be,0x82b7,0x864e,0x8671,0x521d, +0x8868,0x8ecb,0x8fce,0x8fd4,0x8fd1,0x90b5,0x90b8,0x90b1, +0x90b6,0x91c7,0x91d1,0x9577,0x9580,0x961c,0x9640,0x963f, +0x963b,0x9644,0x9642,0x96b9,0x96e8,0x9752,0x975e,0x4e9f, +0x4ead,0x4eae,0x4fe1,0x4fb5,0x4faf,0x4fbf,0x4fe0,0x4fd1, +0x4fcf,0x4fdd,0x4fc3,0x4fb6,0x4fd8,0x4fdf,0x4fca,0x4fd7, +0x4fae,0x4fd0,0x4fc4,0x4fc2,0x4fda,0x4fce,0x4fde,0x4fb7, +0x5157,0x5192,0x5191,0x51a0,0x524e,0x5243,0x524a,0x524d, +0x524c,0x524b,0x5247,0x52c7,0x52c9,0x52c3,0x52c1,0x530d, +0x5357,0x537b,0x539a,0x53db,0x54ac,0x54c0,0x54a8,0x54ce, +0x54c9,0x54b8,0x54a6,0x54b3,0x54c7,0x54c2,0x54bd,0x54aa, +0x54c1,0x54c4,0x54c8,0x54af,0x54ab,0x54b1,0x54bb,0x54a9, +0x54a7,0x54bf,0x56ff,0x5782,0x578b,0x57a0,0x57a3,0x57a2, +0x57ce,0x57ae,0x5793,0x5955,0x5951,0x594f,0x594e,0x5950, +0x59dc,0x59d8,0x59ff,0x59e3,0x59e8,0x5a03,0x59e5,0x59ea, +0x59da,0x59e6,0x5a01,0x59fb,0x5b69,0x5ba3,0x5ba6,0x5ba4, +0x5ba2,0x5ba5,0x5c01,0x5c4e,0x5c4f,0x5c4d,0x5c4b,0x5cd9, +0x5cd2,0x5df7,0x5e1d,0x5e25,0x5e1f,0x5e7d,0x5ea0,0x5ea6, +0x5efa,0x5f08,0x5f2d,0x5f65,0x5f88,0x5f85,0x5f8a,0x5f8b, +0x5f87,0x5f8c,0x5f89,0x6012,0x601d,0x6020,0x6025,0x600e, +0x6028,0x604d,0x6070,0x6068,0x6062,0x6046,0x6043,0x606c, +0x606b,0x606a,0x6064,0x6241,0x62dc,0x6316,0x6309,0x62fc, +0x62ed,0x6301,0x62ee,0x62fd,0x6307,0x62f1,0x62f7,0x62ef, +0x62ec,0x62fe,0x62f4,0x6311,0x6302,0x653f,0x6545,0x65ab, +0x65bd,0x65e2,0x6625,0x662d,0x6620,0x6627,0x662f,0x661f, +0x6628,0x6631,0x6624,0x66f7,0x67ff,0x67d3,0x67f1,0x67d4, +0x67d0,0x67ec,0x67b6,0x67af,0x67f5,0x67e9,0x67ef,0x67c4, +0x67d1,0x67b4,0x67da,0x67e5,0x67b8,0x67cf,0x67de,0x67f3, +0x67b0,0x67d9,0x67e2,0x67dd,0x67d2,0x6b6a,0x6b83,0x6b86, +0x6bb5,0x6bd2,0x6bd7,0x6c1f,0x6cc9,0x6d0b,0x6d32,0x6d2a, +0x6d41,0x6d25,0x6d0c,0x6d31,0x6d1e,0x6d17,0x6d3b,0x6d3d, +0x6d3e,0x6d36,0x6d1b,0x6cf5,0x6d39,0x6d27,0x6d38,0x6d29, +0x6d2e,0x6d35,0x6d0e,0x6d2b,0x70ab,0x70ba,0x70b3,0x70ac, +0x70af,0x70ad,0x70b8,0x70ae,0x70a4,0x7230,0x7272,0x726f, +0x7274,0x72e9,0x72e0,0x72e1,0x73b7,0x73ca,0x73bb,0x73b2, +0x73cd,0x73c0,0x73b3,0x751a,0x752d,0x754f,0x754c,0x754e, +0x754b,0x75ab,0x75a4,0x75a5,0x75a2,0x75a3,0x7678,0x7686, +0x7687,0x7688,0x76c8,0x76c6,0x76c3,0x76c5,0x7701,0x76f9, +0x76f8,0x7709,0x770b,0x76fe,0x76fc,0x7707,0x77dc,0x7802, +0x7814,0x780c,0x780d,0x7946,0x7949,0x7948,0x7947,0x79b9, +0x79ba,0x79d1,0x79d2,0x79cb,0x7a7f,0x7a81,0x7aff,0x7afd, +0x7c7d,0x7d02,0x7d05,0x7d00,0x7d09,0x7d07,0x7d04,0x7d06, +0x7f38,0x7f8e,0x7fbf,0x8004,0x8010,0x800d,0x8011,0x8036, +0x80d6,0x80e5,0x80da,0x80c3,0x80c4,0x80cc,0x80e1,0x80db, +0x80ce,0x80de,0x80e4,0x80dd,0x81f4,0x8222,0x82e7,0x8303, +0x8305,0x82e3,0x82db,0x82e6,0x8304,0x82e5,0x8302,0x8309, +0x82d2,0x82d7,0x82f1,0x8301,0x82dc,0x82d4,0x82d1,0x82de, +0x82d3,0x82df,0x82ef,0x8306,0x8650,0x8679,0x867b,0x867a, +0x884d,0x886b,0x8981,0x89d4,0x8a08,0x8a02,0x8a03,0x8c9e, +0x8ca0,0x8d74,0x8d73,0x8db4,0x8ecd,0x8ecc,0x8ff0,0x8fe6, +0x8fe2,0x8fea,0x8fe5,0x8fed,0x8feb,0x8fe4,0x8fe8,0x90ca, +0x90ce,0x90c1,0x90c3,0x914b,0x914a,0x91cd,0x9582,0x9650, +0x964b,0x964c,0x964d,0x9762,0x9769,0x97cb,0x97ed,0x97f3, +0x9801,0x98a8,0x98db,0x98df,0x9996,0x9999,0x4e58,0x4eb3, +0x500c,0x500d,0x5023,0x4fef,0x5026,0x5025,0x4ff8,0x5029, +0x5016,0x5006,0x503c,0x501f,0x501a,0x5012,0x5011,0x4ffa, +0x5000,0x5014,0x5028,0x4ff1,0x5021,0x500b,0x5019,0x5018, +0x4ff3,0x4fee,0x502d,0x502a,0x4ffe,0x502b,0x5009,0x517c, +0x51a4,0x51a5,0x51a2,0x51cd,0x51cc,0x51c6,0x51cb,0x5256, +0x525c,0x5254,0x525b,0x525d,0x532a,0x537f,0x539f,0x539d, +0x53df,0x54e8,0x5510,0x5501,0x5537,0x54fc,0x54e5,0x54f2, +0x5506,0x54fa,0x5514,0x54e9,0x54ed,0x54e1,0x5509,0x54ee, +0x54ea,0x54e6,0x5527,0x5507,0x54fd,0x550f,0x5703,0x5704, +0x57c2,0x57d4,0x57cb,0x57c3,0x5809,0x590f,0x5957,0x5958, +0x595a,0x5a11,0x5a18,0x5a1c,0x5a1f,0x5a1b,0x5a13,0x59ec, +0x5a20,0x5a23,0x5a29,0x5a25,0x5a0c,0x5a09,0x5b6b,0x5c58, +0x5bb0,0x5bb3,0x5bb6,0x5bb4,0x5bae,0x5bb5,0x5bb9,0x5bb8, +0x5c04,0x5c51,0x5c55,0x5c50,0x5ced,0x5cfd,0x5cfb,0x5cea, +0x5ce8,0x5cf0,0x5cf6,0x5d01,0x5cf4,0x5dee,0x5e2d,0x5e2b, +0x5eab,0x5ead,0x5ea7,0x5f31,0x5f92,0x5f91,0x5f90,0x6059, +0x6063,0x6065,0x6050,0x6055,0x606d,0x6069,0x606f,0x6084, +0x609f,0x609a,0x608d,0x6094,0x608c,0x6085,0x6096,0x6247, +0x62f3,0x6308,0x62ff,0x634e,0x633e,0x632f,0x6355,0x6342, +0x6346,0x634f,0x6349,0x633a,0x6350,0x633d,0x632a,0x632b, +0x6328,0x634d,0x634c,0x6548,0x6549,0x6599,0x65c1,0x65c5, +0x6642,0x6649,0x664f,0x6643,0x6652,0x664c,0x6645,0x6641, +0x66f8,0x6714,0x6715,0x6717,0x6821,0x6838,0x6848,0x6846, +0x6853,0x6839,0x6842,0x6854,0x6829,0x68b3,0x6817,0x684c, +0x6851,0x683d,0x67f4,0x6850,0x6840,0x683c,0x6843,0x682a, +0x6845,0x6813,0x6818,0x6841,0x6b8a,0x6b89,0x6bb7,0x6c23, +0x6c27,0x6c28,0x6c26,0x6c24,0x6cf0,0x6d6a,0x6d95,0x6d88, +0x6d87,0x6d66,0x6d78,0x6d77,0x6d59,0x6d93,0x6d6c,0x6d89, +0x6d6e,0x6d5a,0x6d74,0x6d69,0x6d8c,0x6d8a,0x6d79,0x6d85, +0x6d65,0x6d94,0x70ca,0x70d8,0x70e4,0x70d9,0x70c8,0x70cf, +0x7239,0x7279,0x72fc,0x72f9,0x72fd,0x72f8,0x72f7,0x7386, +0x73ed,0x7409,0x73ee,0x73e0,0x73ea,0x73de,0x7554,0x755d, +0x755c,0x755a,0x7559,0x75be,0x75c5,0x75c7,0x75b2,0x75b3, +0x75bd,0x75bc,0x75b9,0x75c2,0x75b8,0x768b,0x76b0,0x76ca, +0x76cd,0x76ce,0x7729,0x771f,0x7720,0x7728,0x77e9,0x7830, +0x7827,0x7838,0x781d,0x7834,0x7837,0x7825,0x782d,0x7820, +0x781f,0x7832,0x7955,0x7950,0x7960,0x795f,0x7956,0x795e, +0x795d,0x7957,0x795a,0x79e4,0x79e3,0x79e7,0x79df,0x79e6, +0x79e9,0x79d8,0x7a84,0x7a88,0x7ad9,0x7b06,0x7b11,0x7c89, +0x7d21,0x7d17,0x7d0b,0x7d0a,0x7d20,0x7d22,0x7d14,0x7d10, +0x7d15,0x7d1a,0x7d1c,0x7d0d,0x7d19,0x7d1b,0x7f3a,0x7f5f, +0x7f94,0x7fc5,0x7fc1,0x8006,0x8018,0x8015,0x8019,0x8017, +0x803d,0x803f,0x80f1,0x8102,0x80f0,0x8105,0x80ed,0x80f4, +0x8106,0x80f8,0x80f3,0x8108,0x80fd,0x810a,0x80fc,0x80ef, +0x81ed,0x81ec,0x8200,0x8210,0x822a,0x822b,0x8228,0x822c, +0x82bb,0x832b,0x8352,0x8354,0x834a,0x8338,0x8350,0x8349, +0x8335,0x8334,0x834f,0x8332,0x8339,0x8336,0x8317,0x8340, +0x8331,0x8328,0x8343,0x8654,0x868a,0x86aa,0x8693,0x86a4, +0x86a9,0x868c,0x86a3,0x869c,0x8870,0x8877,0x8881,0x8882, +0x887d,0x8879,0x8a18,0x8a10,0x8a0e,0x8a0c,0x8a15,0x8a0a, +0x8a17,0x8a13,0x8a16,0x8a0f,0x8a11,0x8c48,0x8c7a,0x8c79, +0x8ca1,0x8ca2,0x8d77,0x8eac,0x8ed2,0x8ed4,0x8ecf,0x8fb1, +0x9001,0x9006,0x8ff7,0x9000,0x8ffa,0x8ff4,0x9003,0x8ffd, +0x9005,0x8ff8,0x9095,0x90e1,0x90dd,0x90e2,0x9152,0x914d, +0x914c,0x91d8,0x91dd,0x91d7,0x91dc,0x91d9,0x9583,0x9662, +0x9663,0x9661,0x965b,0x965d,0x9664,0x9658,0x965e,0x96bb, +0x98e2,0x99ac,0x9aa8,0x9ad8,0x9b25,0x9b32,0x9b3c,0x4e7e, +0x507a,0x507d,0x505c,0x5047,0x5043,0x504c,0x505a,0x5049, +0x5065,0x5076,0x504e,0x5055,0x5075,0x5074,0x5077,0x504f, +0x500f,0x506f,0x506d,0x515c,0x5195,0x51f0,0x526a,0x526f, +0x52d2,0x52d9,0x52d8,0x52d5,0x5310,0x530f,0x5319,0x533f, +0x5340,0x533e,0x53c3,0x66fc,0x5546,0x556a,0x5566,0x5544, +0x555e,0x5561,0x5543,0x554a,0x5531,0x5556,0x554f,0x5555, +0x552f,0x5564,0x5538,0x552e,0x555c,0x552c,0x5563,0x5533, +0x5541,0x5557,0x5708,0x570b,0x5709,0x57df,0x5805,0x580a, +0x5806,0x57e0,0x57e4,0x57fa,0x5802,0x5835,0x57f7,0x57f9, +0x5920,0x5962,0x5a36,0x5a41,0x5a49,0x5a66,0x5a6a,0x5a40, +0x5a3c,0x5a62,0x5a5a,0x5a46,0x5a4a,0x5b70,0x5bc7,0x5bc5, +0x5bc4,0x5bc2,0x5bbf,0x5bc6,0x5c09,0x5c08,0x5c07,0x5c60, +0x5c5c,0x5c5d,0x5d07,0x5d06,0x5d0e,0x5d1b,0x5d16,0x5d22, +0x5d11,0x5d29,0x5d14,0x5d19,0x5d24,0x5d27,0x5d17,0x5de2, +0x5e38,0x5e36,0x5e33,0x5e37,0x5eb7,0x5eb8,0x5eb6,0x5eb5, +0x5ebe,0x5f35,0x5f37,0x5f57,0x5f6c,0x5f69,0x5f6b,0x5f97, +0x5f99,0x5f9e,0x5f98,0x5fa1,0x5fa0,0x5f9c,0x607f,0x60a3, +0x6089,0x60a0,0x60a8,0x60cb,0x60b4,0x60e6,0x60bd,0x60c5, +0x60bb,0x60b5,0x60dc,0x60bc,0x60d8,0x60d5,0x60c6,0x60df, +0x60b8,0x60da,0x60c7,0x621a,0x621b,0x6248,0x63a0,0x63a7, +0x6372,0x6396,0x63a2,0x63a5,0x6377,0x6367,0x6398,0x63aa, +0x6371,0x63a9,0x6389,0x6383,0x639b,0x636b,0x63a8,0x6384, +0x6388,0x6399,0x63a1,0x63ac,0x6392,0x638f,0x6380,0x637b, +0x6369,0x6368,0x637a,0x655d,0x6556,0x6551,0x6559,0x6557, +0x555f,0x654f,0x6558,0x6555,0x6554,0x659c,0x659b,0x65ac, +0x65cf,0x65cb,0x65cc,0x65ce,0x665d,0x665a,0x6664,0x6668, +0x6666,0x665e,0x66f9,0x52d7,0x671b,0x6881,0x68af,0x68a2, +0x6893,0x68b5,0x687f,0x6876,0x68b1,0x68a7,0x6897,0x68b0, +0x6883,0x68c4,0x68ad,0x6886,0x6885,0x6894,0x689d,0x68a8, +0x689f,0x68a1,0x6882,0x6b32,0x6bba,0x6beb,0x6bec,0x6c2b, +0x6d8e,0x6dbc,0x6df3,0x6dd9,0x6db2,0x6de1,0x6dcc,0x6de4, +0x6dfb,0x6dfa,0x6e05,0x6dc7,0x6dcb,0x6daf,0x6dd1,0x6dae, +0x6dde,0x6df9,0x6db8,0x6df7,0x6df5,0x6dc5,0x6dd2,0x6e1a, +0x6db5,0x6dda,0x6deb,0x6dd8,0x6dea,0x6df1,0x6dee,0x6de8, +0x6dc6,0x6dc4,0x6daa,0x6dec,0x6dbf,0x6de6,0x70f9,0x7109, +0x710a,0x70fd,0x70ef,0x723d,0x727d,0x7281,0x731c,0x731b, +0x7316,0x7313,0x7319,0x7387,0x7405,0x740a,0x7403,0x7406, +0x73fe,0x740d,0x74e0,0x74f6,0x74f7,0x751c,0x7522,0x7565, +0x7566,0x7562,0x7570,0x758f,0x75d4,0x75d5,0x75b5,0x75ca, +0x75cd,0x768e,0x76d4,0x76d2,0x76db,0x7737,0x773e,0x773c, +0x7736,0x7738,0x773a,0x786b,0x7843,0x784e,0x7965,0x7968, +0x796d,0x79fb,0x7a92,0x7a95,0x7b20,0x7b28,0x7b1b,0x7b2c, +0x7b26,0x7b19,0x7b1e,0x7b2e,0x7c92,0x7c97,0x7c95,0x7d46, +0x7d43,0x7d71,0x7d2e,0x7d39,0x7d3c,0x7d40,0x7d30,0x7d33, +0x7d44,0x7d2f,0x7d42,0x7d32,0x7d31,0x7f3d,0x7f9e,0x7f9a, +0x7fcc,0x7fce,0x7fd2,0x801c,0x804a,0x8046,0x812f,0x8116, +0x8123,0x812b,0x8129,0x8130,0x8124,0x8202,0x8235,0x8237, +0x8236,0x8239,0x838e,0x839e,0x8398,0x8378,0x83a2,0x8396, +0x83bd,0x83ab,0x8392,0x838a,0x8393,0x8389,0x83a0,0x8377, +0x837b,0x837c,0x8386,0x83a7,0x8655,0x5f6a,0x86c7,0x86c0, +0x86b6,0x86c4,0x86b5,0x86c6,0x86cb,0x86b1,0x86af,0x86c9, +0x8853,0x889e,0x8888,0x88ab,0x8892,0x8896,0x888d,0x888b, +0x8993,0x898f,0x8a2a,0x8a1d,0x8a23,0x8a25,0x8a31,0x8a2d, +0x8a1f,0x8a1b,0x8a22,0x8c49,0x8c5a,0x8ca9,0x8cac,0x8cab, +0x8ca8,0x8caa,0x8ca7,0x8d67,0x8d66,0x8dbe,0x8dba,0x8edb, +0x8edf,0x9019,0x900d,0x901a,0x9017,0x9023,0x901f,0x901d, +0x9010,0x9015,0x901e,0x9020,0x900f,0x9022,0x9016,0x901b, +0x9014,0x90e8,0x90ed,0x90fd,0x9157,0x91ce,0x91f5,0x91e6, +0x91e3,0x91e7,0x91ed,0x91e9,0x9589,0x966a,0x9675,0x9673, +0x9678,0x9670,0x9674,0x9676,0x9677,0x966c,0x96c0,0x96ea, +0x96e9,0x7ae0,0x7adf,0x9802,0x9803,0x9b5a,0x9ce5,0x9e75, +0x9e7f,0x9ea5,0x9ebb,0x50a2,0x508d,0x5085,0x5099,0x5091, +0x5080,0x5096,0x5098,0x509a,0x6700,0x51f1,0x5272,0x5274, +0x5275,0x5269,0x52de,0x52dd,0x52db,0x535a,0x53a5,0x557b, +0x5580,0x55a7,0x557c,0x558a,0x559d,0x5598,0x5582,0x559c, +0x55aa,0x5594,0x5587,0x558b,0x5583,0x55b3,0x55ae,0x559f, +0x553e,0x55b2,0x559a,0x55bb,0x55ac,0x55b1,0x557e,0x5589, +0x55ab,0x5599,0x570d,0x582f,0x582a,0x5834,0x5824,0x5830, +0x5831,0x5821,0x581d,0x5820,0x58f9,0x58fa,0x5960,0x5a77, +0x5a9a,0x5a7f,0x5a92,0x5a9b,0x5aa7,0x5b73,0x5b71,0x5bd2, +0x5bcc,0x5bd3,0x5bd0,0x5c0a,0x5c0b,0x5c31,0x5d4c,0x5d50, +0x5d34,0x5d47,0x5dfd,0x5e45,0x5e3d,0x5e40,0x5e43,0x5e7e, +0x5eca,0x5ec1,0x5ec2,0x5ec4,0x5f3c,0x5f6d,0x5fa9,0x5faa, +0x5fa8,0x60d1,0x60e1,0x60b2,0x60b6,0x60e0,0x611c,0x6123, +0x60fa,0x6115,0x60f0,0x60fb,0x60f4,0x6168,0x60f1,0x610e, +0x60f6,0x6109,0x6100,0x6112,0x621f,0x6249,0x63a3,0x638c, +0x63cf,0x63c0,0x63e9,0x63c9,0x63c6,0x63cd,0x63d2,0x63e3, +0x63d0,0x63e1,0x63d6,0x63ed,0x63ee,0x6376,0x63f4,0x63ea, +0x63db,0x6452,0x63da,0x63f9,0x655e,0x6566,0x6562,0x6563, +0x6591,0x6590,0x65af,0x666e,0x6670,0x6674,0x6676,0x666f, +0x6691,0x667a,0x667e,0x6677,0x66fe,0x66ff,0x671f,0x671d, +0x68fa,0x68d5,0x68e0,0x68d8,0x68d7,0x6905,0x68df,0x68f5, +0x68ee,0x68e7,0x68f9,0x68d2,0x68f2,0x68e3,0x68cb,0x68cd, +0x690d,0x6912,0x690e,0x68c9,0x68da,0x696e,0x68fb,0x6b3e, +0x6b3a,0x6b3d,0x6b98,0x6b96,0x6bbc,0x6bef,0x6c2e,0x6c2f, +0x6c2c,0x6e2f,0x6e38,0x6e54,0x6e21,0x6e32,0x6e67,0x6e4a, +0x6e20,0x6e25,0x6e23,0x6e1b,0x6e5b,0x6e58,0x6e24,0x6e56, +0x6e6e,0x6e2d,0x6e26,0x6e6f,0x6e34,0x6e4d,0x6e3a,0x6e2c, +0x6e43,0x6e1d,0x6e3e,0x6ecb,0x6e89,0x6e19,0x6e4e,0x6e63, +0x6e44,0x6e72,0x6e69,0x6e5f,0x7119,0x711a,0x7126,0x7130, +0x7121,0x7136,0x716e,0x711c,0x724c,0x7284,0x7280,0x7336, +0x7325,0x7334,0x7329,0x743a,0x742a,0x7433,0x7422,0x7425, +0x7435,0x7436,0x7434,0x742f,0x741b,0x7426,0x7428,0x7525, +0x7526,0x756b,0x756a,0x75e2,0x75db,0x75e3,0x75d9,0x75d8, +0x75de,0x75e0,0x767b,0x767c,0x7696,0x7693,0x76b4,0x76dc, +0x774f,0x77ed,0x785d,0x786c,0x786f,0x7a0d,0x7a08,0x7a0b, +0x7a05,0x7a00,0x7a98,0x7a97,0x7a96,0x7ae5,0x7ae3,0x7b49, +0x7b56,0x7b46,0x7b50,0x7b52,0x7b54,0x7b4d,0x7b4b,0x7b4f, +0x7b51,0x7c9f,0x7ca5,0x7d5e,0x7d50,0x7d68,0x7d55,0x7d2b, +0x7d6e,0x7d72,0x7d61,0x7d66,0x7d62,0x7d70,0x7d73,0x5584, +0x7fd4,0x7fd5,0x800b,0x8052,0x8085,0x8155,0x8154,0x814b, +0x8151,0x814e,0x8139,0x8146,0x813e,0x814c,0x8153,0x8174, +0x8212,0x821c,0x83e9,0x8403,0x83f8,0x840d,0x83e0,0x83c5, +0x840b,0x83c1,0x83ef,0x83f1,0x83f4,0x8457,0x840a,0x83f0, +0x840c,0x83cc,0x83fd,0x83f2,0x83ca,0x8438,0x840e,0x8404, +0x83dc,0x8407,0x83d4,0x83df,0x865b,0x86df,0x86d9,0x86ed, +0x86d4,0x86db,0x86e4,0x86d0,0x86de,0x8857,0x88c1,0x88c2, +0x88b1,0x8983,0x8996,0x8a3b,0x8a60,0x8a55,0x8a5e,0x8a3c, +0x8a41,0x8a54,0x8a5b,0x8a50,0x8a46,0x8a34,0x8a3a,0x8a36, +0x8a56,0x8c61,0x8c82,0x8caf,0x8cbc,0x8cb3,0x8cbd,0x8cc1, +0x8cbb,0x8cc0,0x8cb4,0x8cb7,0x8cb6,0x8cbf,0x8cb8,0x8d8a, +0x8d85,0x8d81,0x8dce,0x8ddd,0x8dcb,0x8dda,0x8dd1,0x8dcc, +0x8ddb,0x8dc6,0x8efb,0x8ef8,0x8efc,0x8f9c,0x902e,0x9035, +0x9031,0x9038,0x9032,0x9036,0x9102,0x90f5,0x9109,0x90fe, +0x9163,0x9165,0x91cf,0x9214,0x9215,0x9223,0x9209,0x921e, +0x920d,0x9210,0x9207,0x9211,0x9594,0x958f,0x958b,0x9591, +0x9593,0x9592,0x958e,0x968a,0x968e,0x968b,0x967d,0x9685, +0x9686,0x968d,0x9672,0x9684,0x96c1,0x96c5,0x96c4,0x96c6, +0x96c7,0x96ef,0x96f2,0x97cc,0x9805,0x9806,0x9808,0x98e7, +0x98ea,0x98ef,0x98e9,0x98f2,0x98ed,0x99ae,0x99ad,0x9ec3, +0x9ecd,0x9ed1,0x4e82,0x50ad,0x50b5,0x50b2,0x50b3,0x50c5, +0x50be,0x50ac,0x50b7,0x50bb,0x50af,0x50c7,0x527f,0x5277, +0x527d,0x52df,0x52e6,0x52e4,0x52e2,0x52e3,0x532f,0x55df, +0x55e8,0x55d3,0x55e6,0x55ce,0x55dc,0x55c7,0x55d1,0x55e3, +0x55e4,0x55ef,0x55da,0x55e1,0x55c5,0x55c6,0x55e5,0x55c9, +0x5712,0x5713,0x585e,0x5851,0x5858,0x5857,0x585a,0x5854, +0x586b,0x584c,0x586d,0x584a,0x5862,0x5852,0x584b,0x5967, +0x5ac1,0x5ac9,0x5acc,0x5abe,0x5abd,0x5abc,0x5ab3,0x5ac2, +0x5ab2,0x5d69,0x5d6f,0x5e4c,0x5e79,0x5ec9,0x5ec8,0x5f12, +0x5f59,0x5fac,0x5fae,0x611a,0x610f,0x6148,0x611f,0x60f3, +0x611b,0x60f9,0x6101,0x6108,0x614e,0x614c,0x6144,0x614d, +0x613e,0x6134,0x6127,0x610d,0x6106,0x6137,0x6221,0x6222, +0x6413,0x643e,0x641e,0x642a,0x642d,0x643d,0x642c,0x640f, +0x641c,0x6414,0x640d,0x6436,0x6416,0x6417,0x6406,0x656c, +0x659f,0x65b0,0x6697,0x6689,0x6687,0x6688,0x6696,0x6684, +0x6698,0x668d,0x6703,0x6994,0x696d,0x695a,0x6977,0x6960, +0x6954,0x6975,0x6930,0x6982,0x694a,0x6968,0x696b,0x695e, +0x6953,0x6979,0x6986,0x695d,0x6963,0x695b,0x6b47,0x6b72, +0x6bc0,0x6bbf,0x6bd3,0x6bfd,0x6ea2,0x6eaf,0x6ed3,0x6eb6, +0x6ec2,0x6e90,0x6e9d,0x6ec7,0x6ec5,0x6ea5,0x6e98,0x6ebc, +0x6eba,0x6eab,0x6ed1,0x6e96,0x6e9c,0x6ec4,0x6ed4,0x6eaa, +0x6ea7,0x6eb4,0x714e,0x7159,0x7169,0x7164,0x7149,0x7167, +0x715c,0x716c,0x7166,0x714c,0x7165,0x715e,0x7146,0x7168, +0x7156,0x723a,0x7252,0x7337,0x7345,0x733f,0x733e,0x746f, +0x745a,0x7455,0x745f,0x745e,0x7441,0x743f,0x7459,0x745b, +0x745c,0x7576,0x7578,0x7600,0x75f0,0x7601,0x75f2,0x75f1, +0x75fa,0x75ff,0x75f4,0x75f3,0x76de,0x76df,0x775b,0x776b, +0x7766,0x775e,0x7763,0x7779,0x776a,0x776c,0x775c,0x7765, +0x7768,0x7762,0x77ee,0x788e,0x78b0,0x7897,0x7898,0x788c, +0x7889,0x787c,0x7891,0x7893,0x787f,0x797a,0x797f,0x7981, +0x842c,0x79bd,0x7a1c,0x7a1a,0x7a20,0x7a14,0x7a1f,0x7a1e, +0x7a9f,0x7aa0,0x7b77,0x7bc0,0x7b60,0x7b6e,0x7b67,0x7cb1, +0x7cb3,0x7cb5,0x7d93,0x7d79,0x7d91,0x7d81,0x7d8f,0x7d5b, +0x7f6e,0x7f69,0x7f6a,0x7f72,0x7fa9,0x7fa8,0x7fa4,0x8056, +0x8058,0x8086,0x8084,0x8171,0x8170,0x8178,0x8165,0x816e, +0x8173,0x816b,0x8179,0x817a,0x8166,0x8205,0x8247,0x8482, +0x8477,0x843d,0x8431,0x8475,0x8466,0x846b,0x8449,0x846c, +0x845b,0x843c,0x8435,0x8461,0x8463,0x8469,0x846d,0x8446, +0x865e,0x865c,0x865f,0x86f9,0x8713,0x8708,0x8707,0x8700, +0x86fe,0x86fb,0x8702,0x8703,0x8706,0x870a,0x8859,0x88df, +0x88d4,0x88d9,0x88dc,0x88d8,0x88dd,0x88e1,0x88ca,0x88d5, +0x88d2,0x899c,0x89e3,0x8a6b,0x8a72,0x8a73,0x8a66,0x8a69, +0x8a70,0x8a87,0x8a7c,0x8a63,0x8aa0,0x8a71,0x8a85,0x8a6d, +0x8a62,0x8a6e,0x8a6c,0x8a79,0x8a7b,0x8a3e,0x8a68,0x8c62, +0x8c8a,0x8c89,0x8cca,0x8cc7,0x8cc8,0x8cc4,0x8cb2,0x8cc3, +0x8cc2,0x8cc5,0x8de1,0x8ddf,0x8de8,0x8def,0x8df3,0x8dfa, +0x8dea,0x8de4,0x8de6,0x8eb2,0x8f03,0x8f09,0x8efe,0x8f0a, +0x8f9f,0x8fb2,0x904b,0x904a,0x9053,0x9042,0x9054,0x903c, +0x9055,0x9050,0x9047,0x904f,0x904e,0x904d,0x9051,0x903e, +0x9041,0x9112,0x9117,0x916c,0x916a,0x9169,0x91c9,0x9237, +0x9257,0x9238,0x923d,0x9240,0x923e,0x925b,0x924b,0x9264, +0x9251,0x9234,0x9249,0x924d,0x9245,0x9239,0x923f,0x925a, +0x9598,0x9698,0x9694,0x9695,0x96cd,0x96cb,0x96c9,0x96ca, +0x96f7,0x96fb,0x96f9,0x96f6,0x9756,0x9774,0x9776,0x9810, +0x9811,0x9813,0x980a,0x9812,0x980c,0x98fc,0x98f4,0x98fd, +0x98fe,0x99b3,0x99b1,0x99b4,0x9ae1,0x9ce9,0x9e82,0x9f0e, +0x9f13,0x9f20,0x50e7,0x50ee,0x50e5,0x50d6,0x50ed,0x50da, +0x50d5,0x50cf,0x50d1,0x50f1,0x50ce,0x50e9,0x5162,0x51f3, +0x5283,0x5282,0x5331,0x53ad,0x55fe,0x5600,0x561b,0x5617, +0x55fd,0x5614,0x5606,0x5609,0x560d,0x560e,0x55f7,0x5616, +0x561f,0x5608,0x5610,0x55f6,0x5718,0x5716,0x5875,0x587e, +0x5883,0x5893,0x588a,0x5879,0x5885,0x587d,0x58fd,0x5925, +0x5922,0x5924,0x596a,0x5969,0x5ae1,0x5ae6,0x5ae9,0x5ad7, +0x5ad6,0x5ad8,0x5ae3,0x5b75,0x5bde,0x5be7,0x5be1,0x5be5, +0x5be6,0x5be8,0x5be2,0x5be4,0x5bdf,0x5c0d,0x5c62,0x5d84, +0x5d87,0x5e5b,0x5e63,0x5e55,0x5e57,0x5e54,0x5ed3,0x5ed6, +0x5f0a,0x5f46,0x5f70,0x5fb9,0x6147,0x613f,0x614b,0x6177, +0x6162,0x6163,0x615f,0x615a,0x6158,0x6175,0x622a,0x6487, +0x6458,0x6454,0x64a4,0x6478,0x645f,0x647a,0x6451,0x6467, +0x6434,0x646d,0x647b,0x6572,0x65a1,0x65d7,0x65d6,0x66a2, +0x66a8,0x669d,0x699c,0x69a8,0x6995,0x69c1,0x69ae,0x69d3, +0x69cb,0x699b,0x69b7,0x69bb,0x69ab,0x69b4,0x69d0,0x69cd, +0x69ad,0x69cc,0x69a6,0x69c3,0x69a3,0x6b49,0x6b4c,0x6c33, +0x6f33,0x6f14,0x6efe,0x6f13,0x6ef4,0x6f29,0x6f3e,0x6f20, +0x6f2c,0x6f0f,0x6f02,0x6f22,0x6eff,0x6eef,0x6f06,0x6f31, +0x6f38,0x6f32,0x6f23,0x6f15,0x6f2b,0x6f2f,0x6f88,0x6f2a, +0x6eec,0x6f01,0x6ef2,0x6ecc,0x6ef7,0x7194,0x7199,0x717d, +0x718a,0x7184,0x7192,0x723e,0x7292,0x7296,0x7344,0x7350, +0x7464,0x7463,0x746a,0x7470,0x746d,0x7504,0x7591,0x7627, +0x760d,0x760b,0x7609,0x7613,0x76e1,0x76e3,0x7784,0x777d, +0x777f,0x7761,0x78c1,0x789f,0x78a7,0x78b3,0x78a9,0x78a3, +0x798e,0x798f,0x798d,0x7a2e,0x7a31,0x7aaa,0x7aa9,0x7aed, +0x7aef,0x7ba1,0x7b95,0x7b8b,0x7b75,0x7b97,0x7b9d,0x7b94, +0x7b8f,0x7bb8,0x7b87,0x7b84,0x7cb9,0x7cbd,0x7cbe,0x7dbb, +0x7db0,0x7d9c,0x7dbd,0x7dbe,0x7da0,0x7dca,0x7db4,0x7db2, +0x7db1,0x7dba,0x7da2,0x7dbf,0x7db5,0x7db8,0x7dad,0x7dd2, +0x7dc7,0x7dac,0x7f70,0x7fe0,0x7fe1,0x7fdf,0x805e,0x805a, +0x8087,0x8150,0x8180,0x818f,0x8188,0x818a,0x817f,0x8182, +0x81e7,0x81fa,0x8207,0x8214,0x821e,0x824b,0x84c9,0x84bf, +0x84c6,0x84c4,0x8499,0x849e,0x84b2,0x849c,0x84cb,0x84b8, +0x84c0,0x84d3,0x8490,0x84bc,0x84d1,0x84ca,0x873f,0x871c, +0x873b,0x8722,0x8725,0x8734,0x8718,0x8755,0x8737,0x8729, +0x88f3,0x8902,0x88f4,0x88f9,0x88f8,0x88fd,0x88e8,0x891a, +0x88ef,0x8aa6,0x8a8c,0x8a9e,0x8aa3,0x8a8d,0x8aa1,0x8a93, +0x8aa4,0x8aaa,0x8aa5,0x8aa8,0x8a98,0x8a91,0x8a9a,0x8aa7, +0x8c6a,0x8c8d,0x8c8c,0x8cd3,0x8cd1,0x8cd2,0x8d6b,0x8d99, +0x8d95,0x8dfc,0x8f14,0x8f12,0x8f15,0x8f13,0x8fa3,0x9060, +0x9058,0x905c,0x9063,0x9059,0x905e,0x9062,0x905d,0x905b, +0x9119,0x9118,0x911e,0x9175,0x9178,0x9177,0x9174,0x9278, +0x9280,0x9285,0x9298,0x9296,0x927b,0x9293,0x929c,0x92a8, +0x927c,0x9291,0x95a1,0x95a8,0x95a9,0x95a3,0x95a5,0x95a4, +0x9699,0x969c,0x969b,0x96cc,0x96d2,0x9700,0x977c,0x9785, +0x97f6,0x9817,0x9818,0x98af,0x98b1,0x9903,0x9905,0x990c, +0x9909,0x99c1,0x9aaf,0x9ab0,0x9ae6,0x9b41,0x9b42,0x9cf4, +0x9cf6,0x9cf3,0x9ebc,0x9f3b,0x9f4a,0x5104,0x5100,0x50fb, +0x50f5,0x50f9,0x5102,0x5108,0x5109,0x5105,0x51dc,0x5287, +0x5288,0x5289,0x528d,0x528a,0x52f0,0x53b2,0x562e,0x563b, +0x5639,0x5632,0x563f,0x5634,0x5629,0x5653,0x564e,0x5657, +0x5674,0x5636,0x562f,0x5630,0x5880,0x589f,0x589e,0x58b3, +0x589c,0x58ae,0x58a9,0x58a6,0x596d,0x5b09,0x5afb,0x5b0b, +0x5af5,0x5b0c,0x5b08,0x5bee,0x5bec,0x5be9,0x5beb,0x5c64, +0x5c65,0x5d9d,0x5d94,0x5e62,0x5e5f,0x5e61,0x5ee2,0x5eda, +0x5edf,0x5edd,0x5ee3,0x5ee0,0x5f48,0x5f71,0x5fb7,0x5fb5, +0x6176,0x6167,0x616e,0x615d,0x6155,0x6182,0x617c,0x6170, +0x616b,0x617e,0x61a7,0x6190,0x61ab,0x618e,0x61ac,0x619a, +0x61a4,0x6194,0x61ae,0x622e,0x6469,0x646f,0x6479,0x649e, +0x64b2,0x6488,0x6490,0x64b0,0x64a5,0x6493,0x6495,0x64a9, +0x6492,0x64ae,0x64ad,0x64ab,0x649a,0x64ac,0x6499,0x64a2, +0x64b3,0x6575,0x6577,0x6578,0x66ae,0x66ab,0x66b4,0x66b1, +0x6a23,0x6a1f,0x69e8,0x6a01,0x6a1e,0x6a19,0x69fd,0x6a21, +0x6a13,0x6a0a,0x69f3,0x6a02,0x6a05,0x69ed,0x6a11,0x6b50, +0x6b4e,0x6ba4,0x6bc5,0x6bc6,0x6f3f,0x6f7c,0x6f84,0x6f51, +0x6f66,0x6f54,0x6f86,0x6f6d,0x6f5b,0x6f78,0x6f6e,0x6f8e, +0x6f7a,0x6f70,0x6f64,0x6f97,0x6f58,0x6ed5,0x6f6f,0x6f60, +0x6f5f,0x719f,0x71ac,0x71b1,0x71a8,0x7256,0x729b,0x734e, +0x7357,0x7469,0x748b,0x7483,0x747e,0x7480,0x757f,0x7620, +0x7629,0x761f,0x7624,0x7626,0x7621,0x7622,0x769a,0x76ba, +0x76e4,0x778e,0x7787,0x778c,0x7791,0x778b,0x78cb,0x78c5, +0x78ba,0x78ca,0x78be,0x78d5,0x78bc,0x78d0,0x7a3f,0x7a3c, +0x7a40,0x7a3d,0x7a37,0x7a3b,0x7aaf,0x7aae,0x7bad,0x7bb1, +0x7bc4,0x7bb4,0x7bc6,0x7bc7,0x7bc1,0x7ba0,0x7bcc,0x7cca, +0x7de0,0x7df4,0x7def,0x7dfb,0x7dd8,0x7dec,0x7ddd,0x7de8, +0x7de3,0x7dda,0x7dde,0x7de9,0x7d9e,0x7dd9,0x7df2,0x7df9, +0x7f75,0x7f77,0x7faf,0x7fe9,0x8026,0x819b,0x819c,0x819d, +0x81a0,0x819a,0x8198,0x8517,0x853d,0x851a,0x84ee,0x852c, +0x852d,0x8513,0x8511,0x8523,0x8521,0x8514,0x84ec,0x8525, +0x84ff,0x8506,0x8782,0x8774,0x8776,0x8760,0x8766,0x8778, +0x8768,0x8759,0x8757,0x874c,0x8753,0x885b,0x885d,0x8910, +0x8907,0x8912,0x8913,0x8915,0x890a,0x8abc,0x8ad2,0x8ac7, +0x8ac4,0x8a95,0x8acb,0x8af8,0x8ab2,0x8ac9,0x8ac2,0x8abf, +0x8ab0,0x8ad6,0x8acd,0x8ab6,0x8ab9,0x8adb,0x8c4c,0x8c4e, +0x8c6c,0x8ce0,0x8cde,0x8ce6,0x8ce4,0x8cec,0x8ced,0x8ce2, +0x8ce3,0x8cdc,0x8cea,0x8ce1,0x8d6d,0x8d9f,0x8da3,0x8e2b, +0x8e10,0x8e1d,0x8e22,0x8e0f,0x8e29,0x8e1f,0x8e21,0x8e1e, +0x8eba,0x8f1d,0x8f1b,0x8f1f,0x8f29,0x8f26,0x8f2a,0x8f1c, +0x8f1e,0x8f25,0x9069,0x906e,0x9068,0x906d,0x9077,0x9130, +0x912d,0x9127,0x9131,0x9187,0x9189,0x918b,0x9183,0x92c5, +0x92bb,0x92b7,0x92ea,0x92ac,0x92e4,0x92c1,0x92b3,0x92bc, +0x92d2,0x92c7,0x92f0,0x92b2,0x95ad,0x95b1,0x9704,0x9706, +0x9707,0x9709,0x9760,0x978d,0x978b,0x978f,0x9821,0x982b, +0x981c,0x98b3,0x990a,0x9913,0x9912,0x9918,0x99dd,0x99d0, +0x99df,0x99db,0x99d1,0x99d5,0x99d2,0x99d9,0x9ab7,0x9aee, +0x9aef,0x9b27,0x9b45,0x9b44,0x9b77,0x9b6f,0x9d06,0x9d09, +0x9d03,0x9ea9,0x9ebe,0x9ece,0x58a8,0x9f52,0x5112,0x5118, +0x5114,0x5110,0x5115,0x5180,0x51aa,0x51dd,0x5291,0x5293, +0x52f3,0x5659,0x566b,0x5679,0x5669,0x5664,0x5678,0x566a, +0x5668,0x5665,0x5671,0x566f,0x566c,0x5662,0x5676,0x58c1, +0x58be,0x58c7,0x58c5,0x596e,0x5b1d,0x5b34,0x5b78,0x5bf0, +0x5c0e,0x5f4a,0x61b2,0x6191,0x61a9,0x618a,0x61cd,0x61b6, +0x61be,0x61ca,0x61c8,0x6230,0x64c5,0x64c1,0x64cb,0x64bb, +0x64bc,0x64da,0x64c4,0x64c7,0x64c2,0x64cd,0x64bf,0x64d2, +0x64d4,0x64be,0x6574,0x66c6,0x66c9,0x66b9,0x66c4,0x66c7, +0x66b8,0x6a3d,0x6a38,0x6a3a,0x6a59,0x6a6b,0x6a58,0x6a39, +0x6a44,0x6a62,0x6a61,0x6a4b,0x6a47,0x6a35,0x6a5f,0x6a48, +0x6b59,0x6b77,0x6c05,0x6fc2,0x6fb1,0x6fa1,0x6fc3,0x6fa4, +0x6fc1,0x6fa7,0x6fb3,0x6fc0,0x6fb9,0x6fb6,0x6fa6,0x6fa0, +0x6fb4,0x71be,0x71c9,0x71d0,0x71d2,0x71c8,0x71d5,0x71b9, +0x71ce,0x71d9,0x71dc,0x71c3,0x71c4,0x7368,0x749c,0x74a3, +0x7498,0x749f,0x749e,0x74e2,0x750c,0x750d,0x7634,0x7638, +0x763a,0x76e7,0x76e5,0x77a0,0x779e,0x779f,0x77a5,0x78e8, +0x78da,0x78ec,0x78e7,0x79a6,0x7a4d,0x7a4e,0x7a46,0x7a4c, +0x7a4b,0x7aba,0x7bd9,0x7c11,0x7bc9,0x7be4,0x7bdb,0x7be1, +0x7be9,0x7be6,0x7cd5,0x7cd6,0x7e0a,0x7e11,0x7e08,0x7e1b, +0x7e23,0x7e1e,0x7e1d,0x7e09,0x7e10,0x7f79,0x7fb2,0x7ff0, +0x7ff1,0x7fee,0x8028,0x81b3,0x81a9,0x81a8,0x81fb,0x8208, +0x8258,0x8259,0x854a,0x8559,0x8548,0x8568,0x8569,0x8543, +0x8549,0x856d,0x856a,0x855e,0x8783,0x879f,0x879e,0x87a2, +0x878d,0x8861,0x892a,0x8932,0x8925,0x892b,0x8921,0x89aa, +0x89a6,0x8ae6,0x8afa,0x8aeb,0x8af1,0x8b00,0x8adc,0x8ae7, +0x8aee,0x8afe,0x8b01,0x8b02,0x8af7,0x8aed,0x8af3,0x8af6, +0x8afc,0x8c6b,0x8c6d,0x8c93,0x8cf4,0x8e44,0x8e31,0x8e34, +0x8e42,0x8e39,0x8e35,0x8f3b,0x8f2f,0x8f38,0x8f33,0x8fa8, +0x8fa6,0x9075,0x9074,0x9078,0x9072,0x907c,0x907a,0x9134, +0x9192,0x9320,0x9336,0x92f8,0x9333,0x932f,0x9322,0x92fc, +0x932b,0x9304,0x931a,0x9310,0x9326,0x9321,0x9315,0x932e, +0x9319,0x95bb,0x96a7,0x96a8,0x96aa,0x96d5,0x970e,0x9711, +0x9716,0x970d,0x9713,0x970f,0x975b,0x975c,0x9766,0x9798, +0x9830,0x9838,0x983b,0x9837,0x982d,0x9839,0x9824,0x9910, +0x9928,0x991e,0x991b,0x9921,0x991a,0x99ed,0x99e2,0x99f1, +0x9ab8,0x9abc,0x9afb,0x9aed,0x9b28,0x9b91,0x9d15,0x9d23, +0x9d26,0x9d28,0x9d12,0x9d1b,0x9ed8,0x9ed4,0x9f8d,0x9f9c, +0x512a,0x511f,0x5121,0x5132,0x52f5,0x568e,0x5680,0x5690, +0x5685,0x5687,0x568f,0x58d5,0x58d3,0x58d1,0x58ce,0x5b30, +0x5b2a,0x5b24,0x5b7a,0x5c37,0x5c68,0x5dbc,0x5dba,0x5dbd, +0x5db8,0x5e6b,0x5f4c,0x5fbd,0x61c9,0x61c2,0x61c7,0x61e6, +0x61cb,0x6232,0x6234,0x64ce,0x64ca,0x64d8,0x64e0,0x64f0, +0x64e6,0x64ec,0x64f1,0x64e2,0x64ed,0x6582,0x6583,0x66d9, +0x66d6,0x6a80,0x6a94,0x6a84,0x6aa2,0x6a9c,0x6adb,0x6aa3, +0x6a7e,0x6a97,0x6a90,0x6aa0,0x6b5c,0x6bae,0x6bda,0x6c08, +0x6fd8,0x6ff1,0x6fdf,0x6fe0,0x6fdb,0x6fe4,0x6feb,0x6fef, +0x6f80,0x6fec,0x6fe1,0x6fe9,0x6fd5,0x6fee,0x6ff0,0x71e7, +0x71df,0x71ee,0x71e6,0x71e5,0x71ed,0x71ec,0x71f4,0x71e0, +0x7235,0x7246,0x7370,0x7372,0x74a9,0x74b0,0x74a6,0x74a8, +0x7646,0x7642,0x764c,0x76ea,0x77b3,0x77aa,0x77b0,0x77ac, +0x77a7,0x77ad,0x77ef,0x78f7,0x78fa,0x78f4,0x78ef,0x7901, +0x79a7,0x79aa,0x7a57,0x7abf,0x7c07,0x7c0d,0x7bfe,0x7bf7, +0x7c0c,0x7be0,0x7ce0,0x7cdc,0x7cde,0x7ce2,0x7cdf,0x7cd9, +0x7cdd,0x7e2e,0x7e3e,0x7e46,0x7e37,0x7e32,0x7e43,0x7e2b, +0x7e3d,0x7e31,0x7e45,0x7e41,0x7e34,0x7e39,0x7e48,0x7e35, +0x7e3f,0x7e2f,0x7f44,0x7ff3,0x7ffc,0x8071,0x8072,0x8070, +0x806f,0x8073,0x81c6,0x81c3,0x81ba,0x81c2,0x81c0,0x81bf, +0x81bd,0x81c9,0x81be,0x81e8,0x8209,0x8271,0x85aa,0x8584, +0x857e,0x859c,0x8591,0x8594,0x85af,0x859b,0x8587,0x85a8, +0x858a,0x8667,0x87c0,0x87d1,0x87b3,0x87d2,0x87c6,0x87ab, +0x87bb,0x87ba,0x87c8,0x87cb,0x893b,0x8936,0x8944,0x8938, +0x893d,0x89ac,0x8b0e,0x8b17,0x8b19,0x8b1b,0x8b0a,0x8b20, +0x8b1d,0x8b04,0x8b10,0x8c41,0x8c3f,0x8c73,0x8cfa,0x8cfd, +0x8cfc,0x8cf8,0x8cfb,0x8da8,0x8e49,0x8e4b,0x8e48,0x8e4a, +0x8f44,0x8f3e,0x8f42,0x8f45,0x8f3f,0x907f,0x907d,0x9084, +0x9081,0x9082,0x9080,0x9139,0x91a3,0x919e,0x919c,0x934d, +0x9382,0x9328,0x9375,0x934a,0x9365,0x934b,0x9318,0x937e, +0x936c,0x935b,0x9370,0x935a,0x9354,0x95ca,0x95cb,0x95cc, +0x95c8,0x95c6,0x96b1,0x96b8,0x96d6,0x971c,0x971e,0x97a0, +0x97d3,0x9846,0x98b6,0x9935,0x9a01,0x99ff,0x9bae,0x9bab, +0x9baa,0x9bad,0x9d3b,0x9d3f,0x9e8b,0x9ecf,0x9ede,0x9edc, +0x9edd,0x9edb,0x9f3e,0x9f4b,0x53e2,0x5695,0x56ae,0x58d9, +0x58d8,0x5b38,0x5f5d,0x61e3,0x6233,0x64f4,0x64f2,0x64fe, +0x6506,0x64fa,0x64fb,0x64f7,0x65b7,0x66dc,0x6726,0x6ab3, +0x6aac,0x6ac3,0x6abb,0x6ab8,0x6ac2,0x6aae,0x6aaf,0x6b5f, +0x6b78,0x6baf,0x7009,0x700b,0x6ffe,0x7006,0x6ffa,0x7011, +0x700f,0x71fb,0x71fc,0x71fe,0x71f8,0x7377,0x7375,0x74a7, +0x74bf,0x7515,0x7656,0x7658,0x7652,0x77bd,0x77bf,0x77bb, +0x77bc,0x790e,0x79ae,0x7a61,0x7a62,0x7a60,0x7ac4,0x7ac5, +0x7c2b,0x7c27,0x7c2a,0x7c1e,0x7c23,0x7c21,0x7ce7,0x7e54, +0x7e55,0x7e5e,0x7e5a,0x7e61,0x7e52,0x7e59,0x7f48,0x7ff9, +0x7ffb,0x8077,0x8076,0x81cd,0x81cf,0x820a,0x85cf,0x85a9, +0x85cd,0x85d0,0x85c9,0x85b0,0x85ba,0x85b9,0x85a6,0x87ef, +0x87ec,0x87f2,0x87e0,0x8986,0x89b2,0x89f4,0x8b28,0x8b39, +0x8b2c,0x8b2b,0x8c50,0x8d05,0x8e59,0x8e63,0x8e66,0x8e64, +0x8e5f,0x8e55,0x8ec0,0x8f49,0x8f4d,0x9087,0x9083,0x9088, +0x91ab,0x91ac,0x91d0,0x9394,0x938a,0x9396,0x93a2,0x93b3, +0x93ae,0x93ac,0x93b0,0x9398,0x939a,0x9397,0x95d4,0x95d6, +0x95d0,0x95d5,0x96e2,0x96dc,0x96d9,0x96db,0x96de,0x9724, +0x97a3,0x97a6,0x97ad,0x97f9,0x984d,0x984f,0x984c,0x984e, +0x9853,0x98ba,0x993e,0x993f,0x993d,0x992e,0x99a5,0x9a0e, +0x9ac1,0x9b03,0x9b06,0x9b4f,0x9b4e,0x9b4d,0x9bca,0x9bc9, +0x9bfd,0x9bc8,0x9bc0,0x9d51,0x9d5d,0x9d60,0x9ee0,0x9f15, +0x9f2c,0x5133,0x56a5,0x58de,0x58df,0x58e2,0x5bf5,0x9f90, +0x5eec,0x61f2,0x61f7,0x61f6,0x61f5,0x6500,0x650f,0x66e0, +0x66dd,0x6ae5,0x6add,0x6ada,0x6ad3,0x701b,0x701f,0x7028, +0x701a,0x701d,0x7015,0x7018,0x7206,0x720d,0x7258,0x72a2, +0x7378,0x737a,0x74bd,0x74ca,0x74e3,0x7587,0x7586,0x765f, +0x7661,0x77c7,0x7919,0x79b1,0x7a6b,0x7a69,0x7c3e,0x7c3f, +0x7c38,0x7c3d,0x7c37,0x7c40,0x7e6b,0x7e6d,0x7e79,0x7e69, +0x7e6a,0x7f85,0x7e73,0x7fb6,0x7fb9,0x7fb8,0x81d8,0x85e9, +0x85dd,0x85ea,0x85d5,0x85e4,0x85e5,0x85f7,0x87fb,0x8805, +0x880d,0x87f9,0x87fe,0x8960,0x895f,0x8956,0x895e,0x8b41, +0x8b5c,0x8b58,0x8b49,0x8b5a,0x8b4e,0x8b4f,0x8b46,0x8b59, +0x8d08,0x8d0a,0x8e7c,0x8e72,0x8e87,0x8e76,0x8e6c,0x8e7a, +0x8e74,0x8f54,0x8f4e,0x8fad,0x908a,0x908b,0x91b1,0x91ae, +0x93e1,0x93d1,0x93df,0x93c3,0x93c8,0x93dc,0x93dd,0x93d6, +0x93e2,0x93cd,0x93d8,0x93e4,0x93d7,0x93e8,0x95dc,0x96b4, +0x96e3,0x972a,0x9727,0x9761,0x97dc,0x97fb,0x985e,0x9858, +0x985b,0x98bc,0x9945,0x9949,0x9a16,0x9a19,0x9b0d,0x9be8, +0x9be7,0x9bd6,0x9bdb,0x9d89,0x9d61,0x9d72,0x9d6a,0x9d6c, +0x9e92,0x9e97,0x9e93,0x9eb4,0x52f8,0x56a8,0x56b7,0x56b6, +0x56b4,0x56bc,0x58e4,0x5b40,0x5b43,0x5b7d,0x5bf6,0x5dc9, +0x61f8,0x61fa,0x6518,0x6514,0x6519,0x66e6,0x6727,0x6aec, +0x703e,0x7030,0x7032,0x7210,0x737b,0x74cf,0x7662,0x7665, +0x7926,0x792a,0x792c,0x792b,0x7ac7,0x7af6,0x7c4c,0x7c43, +0x7c4d,0x7cef,0x7cf0,0x8fae,0x7e7d,0x7e7c,0x7e82,0x7f4c, +0x8000,0x81da,0x8266,0x85fb,0x85f9,0x8611,0x85fa,0x8606, +0x860b,0x8607,0x860a,0x8814,0x8815,0x8964,0x89ba,0x89f8, +0x8b70,0x8b6c,0x8b66,0x8b6f,0x8b5f,0x8b6b,0x8d0f,0x8d0d, +0x8e89,0x8e81,0x8e85,0x8e82,0x91b4,0x91cb,0x9418,0x9403, +0x93fd,0x95e1,0x9730,0x98c4,0x9952,0x9951,0x99a8,0x9a2b, +0x9a30,0x9a37,0x9a35,0x9c13,0x9c0d,0x9e79,0x9eb5,0x9ee8, +0x9f2f,0x9f5f,0x9f63,0x9f61,0x5137,0x5138,0x56c1,0x56c0, +0x56c2,0x5914,0x5c6c,0x5dcd,0x61fc,0x61fe,0x651d,0x651c, +0x6595,0x66e9,0x6afb,0x6b04,0x6afa,0x6bb2,0x704c,0x721b, +0x72a7,0x74d6,0x74d4,0x7669,0x77d3,0x7c50,0x7e8f,0x7e8c, +0x7fbc,0x8617,0x862d,0x861a,0x8823,0x8822,0x8821,0x881f, +0x896a,0x896c,0x89bd,0x8b74,0x8b77,0x8b7d,0x8d13,0x8e8a, +0x8e8d,0x8e8b,0x8f5f,0x8faf,0x91ba,0x942e,0x9433,0x9435, +0x943a,0x9438,0x9432,0x942b,0x95e2,0x9738,0x9739,0x9732, +0x97ff,0x9867,0x9865,0x9957,0x9a45,0x9a43,0x9a40,0x9a3e, +0x9acf,0x9b54,0x9b51,0x9c2d,0x9c25,0x9daf,0x9db4,0x9dc2, +0x9db8,0x9e9d,0x9eef,0x9f19,0x9f5c,0x9f66,0x9f67,0x513c, +0x513b,0x56c8,0x56ca,0x56c9,0x5b7f,0x5dd4,0x5dd2,0x5f4e, +0x61ff,0x6524,0x6b0a,0x6b61,0x7051,0x7058,0x7380,0x74e4, +0x758a,0x766e,0x766c,0x79b3,0x7c60,0x7c5f,0x807e,0x807d, +0x81df,0x8972,0x896f,0x89fc,0x8b80,0x8d16,0x8d17,0x8e91, +0x8e93,0x8f61,0x9148,0x9444,0x9451,0x9452,0x973d,0x973e, +0x97c3,0x97c1,0x986b,0x9955,0x9a55,0x9a4d,0x9ad2,0x9b1a, +0x9c49,0x9c31,0x9c3e,0x9c3b,0x9dd3,0x9dd7,0x9f34,0x9f6c, +0x9f6a,0x9f94,0x56cc,0x5dd6,0x6200,0x6523,0x652b,0x652a, +0x66ec,0x6b10,0x74da,0x7aca,0x7c64,0x7c63,0x7c65,0x7e93, +0x7e96,0x7e94,0x81e2,0x8638,0x863f,0x8831,0x8b8a,0x9090, +0x908f,0x9463,0x9460,0x9464,0x9768,0x986f,0x995c,0x9a5a, +0x9a5b,0x9a57,0x9ad3,0x9ad4,0x9ad1,0x9c54,0x9c57,0x9c56, +0x9de5,0x9e9f,0x9ef4,0x56d1,0x58e9,0x652c,0x705e,0x7671, +0x7672,0x77d7,0x7f50,0x7f88,0x8836,0x8839,0x8862,0x8b93, +0x8b92,0x8b96,0x8277,0x8d1b,0x91c0,0x946a,0x9742,0x9748, +0x9744,0x97c6,0x9870,0x9a5f,0x9b22,0x9b58,0x9c5f,0x9df9, +0x9dfa,0x9e7c,0x9e7d,0x9f07,0x9f77,0x9f72,0x5ef3,0x6b16, +0x7063,0x7c6c,0x7c6e,0x883b,0x89c0,0x8ea1,0x91c1,0x9472, +0x9470,0x9871,0x995e,0x9ad6,0x9b23,0x9ecc,0x7064,0x77da, +0x8b9a,0x9477,0x97c9,0x9a62,0x9a65,0x7e9c,0x8b9c,0x8eaa, +0x91c5,0x947d,0x947e,0x947c,0x9c77,0x9c78,0x9ef7,0x8c54, +0x947f,0x9e1a,0x7228,0x9a6a,0x9b31,0x9e1b,0x9e1e,0x7c72, +0xf6b1,0xf6b2,0xf6b3,0xf6b4,0xf6b5,0xf6b6,0xf6b7,0xf6b8, +0xf6b9,0xf6ba,0xf6bb,0xf6bc,0xf6bd,0xf6be,0xf6bf,0xf6c0, +0xf6c1,0xf6c2,0xf6c3,0xf6c4,0xf6c5,0xf6c6,0xf6c7,0xf6c8, +0xf6c9,0xf6ca,0xf6cb,0xf6cc,0xf6cd,0xf6ce,0xf6cf,0xf6d0, +0xf6d1,0xf6d2,0xf6d3,0xf6d4,0xf6d5,0xf6d6,0xf6d7,0xf6d8, +0xf6d9,0xf6da,0xf6db,0xf6dc,0xf6dd,0xf6de,0xf6df,0xf6e0, +0xf6e1,0xf6e2,0xf6e3,0xf6e4,0xf6e5,0xf6e6,0xf6e7,0xf6e8, +0xf6e9,0xf6ea,0xf6eb,0xf6ec,0xf6ed,0xf6ee,0xf6ef,0xf6f0, +0xf6f1,0xf6f2,0xf6f3,0xf6f4,0xf6f5,0xf6f6,0xf6f7,0xf6f8, +0xf6f9,0xf6fa,0xf6fb,0xf6fc,0xf6fd,0xf6fe,0xf6ff,0xf700, +0xf701,0xf702,0xf703,0xf704,0xf705,0xf706,0xf707,0xf708, +0xf709,0xf70a,0xf70b,0xf70c,0xf70d,0xf70e,0xf70f,0xf710, +0xf711,0xf712,0xf713,0xf714,0xf715,0xf716,0xf717,0xf718, +0xf719,0xf71a,0xf71b,0xf71c,0xf71d,0xf71e,0xf71f,0xf720, +0xf721,0xf722,0xf723,0xf724,0xf725,0xf726,0xf727,0xf728, +0xf729,0xf72a,0xf72b,0xf72c,0xf72d,0xf72e,0xf72f,0xf730, +0xf731,0xf732,0xf733,0xf734,0xf735,0xf736,0xf737,0xf738, +0xf739,0xf73a,0xf73b,0xf73c,0xf73d,0xf73e,0xf73f,0xf740, +0xf741,0xf742,0xf743,0xf744,0xf745,0xf746,0xf747,0xf748, +0xf749,0xf74a,0xf74b,0xf74c,0xf74d,0xf74e,0xf74f,0xf750, +0xf751,0xf752,0xf753,0xf754,0xf755,0xf756,0xf757,0xf758, +0xf759,0xf75a,0xf75b,0xf75c,0xf75d,0xf75e,0xf75f,0xf760, +0xf761,0xf762,0xf763,0xf764,0xf765,0xf766,0xf767,0xf768, +0xf769,0xf76a,0xf76b,0xf76c,0xf76d,0xf76e,0xf76f,0xf770, +0xf771,0xf772,0xf773,0xf774,0xf775,0xf776,0xf777,0xf778, +0xf779,0xf77a,0xf77b,0xf77c,0xf77d,0xf77e,0xf77f,0xf780, +0xf781,0xf782,0xf783,0xf784,0xf785,0xf786,0xf787,0xf788, +0xf789,0xf78a,0xf78b,0xf78c,0xf78d,0xf78e,0xf78f,0xf790, +0xf791,0xf792,0xf793,0xf794,0xf795,0xf796,0xf797,0xf798, +0xf799,0xf79a,0xf79b,0xf79c,0xf79d,0xf79e,0xf79f,0xf7a0, +0xf7a1,0xf7a2,0xf7a3,0xf7a4,0xf7a5,0xf7a6,0xf7a7,0xf7a8, +0xf7a9,0xf7aa,0xf7ab,0xf7ac,0xf7ad,0xf7ae,0xf7af,0xf7b0, +0xf7b1,0xf7b2,0xf7b3,0xf7b4,0xf7b5,0xf7b6,0xf7b7,0xf7b8, +0xf7b9,0xf7ba,0xf7bb,0xf7bc,0xf7bd,0xf7be,0xf7bf,0xf7c0, +0xf7c1,0xf7c2,0xf7c3,0xf7c4,0xf7c5,0xf7c6,0xf7c7,0xf7c8, +0xf7c9,0xf7ca,0xf7cb,0xf7cc,0xf7cd,0xf7ce,0xf7cf,0xf7d0, +0xf7d1,0xf7d2,0xf7d3,0xf7d4,0xf7d5,0xf7d6,0xf7d7,0xf7d8, +0xf7d9,0xf7da,0xf7db,0xf7dc,0xf7dd,0xf7de,0xf7df,0xf7e0, +0xf7e1,0xf7e2,0xf7e3,0xf7e4,0xf7e5,0xf7e6,0xf7e7,0xf7e8, +0xf7e9,0xf7ea,0xf7eb,0xf7ec,0xf7ed,0xf7ee,0xf7ef,0xf7f0, +0xf7f1,0xf7f2,0xf7f3,0xf7f4,0xf7f5,0xf7f6,0xf7f7,0xf7f8, +0xf7f9,0xf7fa,0xf7fb,0xf7fc,0xf7fd,0xf7fe,0xf7ff,0xf800, +0xf801,0xf802,0xf803,0xf804,0xf805,0xf806,0xf807,0xf808, +0xf809,0xf80a,0xf80b,0xf80c,0xf80d,0xf80e,0xf80f,0xf810, +0xf811,0xf812,0xf813,0xf814,0xf815,0xf816,0xf817,0xf818, +0xf819,0xf81a,0xf81b,0xf81c,0xf81d,0xf81e,0xf81f,0xf820, +0xf821,0xf822,0xf823,0xf824,0xf825,0xf826,0xf827,0xf828, +0xf829,0xf82a,0xf82b,0xf82c,0xf82d,0xf82e,0xf82f,0xf830, +0xf831,0xf832,0xf833,0xf834,0xf835,0xf836,0xf837,0xf838, +0xf839,0xf83a,0xf83b,0xf83c,0xf83d,0xf83e,0xf83f,0xf840, +0xf841,0xf842,0xf843,0xf844,0xf845,0xf846,0xf847,0xf848, +0x4e42,0x4e5c,0x51f5,0x531a,0x5382,0x4e07,0x4e0c,0x4e47, +0x4e8d,0x56d7,0xfa0c,0x5c6e,0x5f73,0x4e0f,0x5187,0x4e0e, +0x4e2e,0x4e93,0x4ec2,0x4ec9,0x4ec8,0x5198,0x52fc,0x536c, +0x53b9,0x5720,0x5903,0x592c,0x5c10,0x5dff,0x65e1,0x6bb3, +0x6bcc,0x6c14,0x723f,0x4e31,0x4e3c,0x4ee8,0x4edc,0x4ee9, +0x4ee1,0x4edd,0x4eda,0x520c,0x531c,0x534c,0x5722,0x5723, +0x5917,0x592f,0x5b81,0x5b84,0x5c12,0x5c3b,0x5c74,0x5c73, +0x5e04,0x5e80,0x5e82,0x5fc9,0x6209,0x6250,0x6c15,0x6c36, +0x6c43,0x6c3f,0x6c3b,0x72ae,0x72b0,0x738a,0x79b8,0x808a, +0x961e,0x4f0e,0x4f18,0x4f2c,0x4ef5,0x4f14,0x4ef1,0x4f00, +0x4ef7,0x4f08,0x4f1d,0x4f02,0x4f05,0x4f22,0x4f13,0x4f04, +0x4ef4,0x4f12,0x51b1,0x5213,0x5209,0x5210,0x52a6,0x5322, +0x531f,0x534d,0x538a,0x5407,0x56e1,0x56df,0x572e,0x572a, +0x5734,0x593c,0x5980,0x597c,0x5985,0x597b,0x597e,0x5977, +0x597f,0x5b56,0x5c15,0x5c25,0x5c7c,0x5c7a,0x5c7b,0x5c7e, +0x5ddf,0x5e75,0x5e84,0x5f02,0x5f1a,0x5f74,0x5fd5,0x5fd4, +0x5fcf,0x625c,0x625e,0x6264,0x6261,0x6266,0x6262,0x6259, +0x6260,0x625a,0x6265,0x65ef,0x65ee,0x673e,0x6739,0x6738, +0x673b,0x673a,0x673f,0x673c,0x6733,0x6c18,0x6c46,0x6c52, +0x6c5c,0x6c4f,0x6c4a,0x6c54,0x6c4b,0x6c4c,0x7071,0x725e, +0x72b4,0x72b5,0x738e,0x752a,0x767f,0x7a75,0x7f51,0x8278, +0x827c,0x8280,0x827d,0x827f,0x864d,0x897e,0x9099,0x9097, +0x9098,0x909b,0x9094,0x9622,0x9624,0x9620,0x9623,0x4f56, +0x4f3b,0x4f62,0x4f49,0x4f53,0x4f64,0x4f3e,0x4f67,0x4f52, +0x4f5f,0x4f41,0x4f58,0x4f2d,0x4f33,0x4f3f,0x4f61,0x518f, +0x51b9,0x521c,0x521e,0x5221,0x52ad,0x52ae,0x5309,0x5363, +0x5372,0x538e,0x538f,0x5430,0x5437,0x542a,0x5454,0x5445, +0x5419,0x541c,0x5425,0x5418,0x543d,0x544f,0x5441,0x5428, +0x5424,0x5447,0x56ee,0x56e7,0x56e5,0x5741,0x5745,0x574c, +0x5749,0x574b,0x5752,0x5906,0x5940,0x59a6,0x5998,0x59a0, +0x5997,0x598e,0x59a2,0x5990,0x598f,0x59a7,0x59a1,0x5b8e, +0x5b92,0x5c28,0x5c2a,0x5c8d,0x5c8f,0x5c88,0x5c8b,0x5c89, +0x5c92,0x5c8a,0x5c86,0x5c93,0x5c95,0x5de0,0x5e0a,0x5e0e, +0x5e8b,0x5e89,0x5e8c,0x5e88,0x5e8d,0x5f05,0x5f1d,0x5f78, +0x5f76,0x5fd2,0x5fd1,0x5fd0,0x5fed,0x5fe8,0x5fee,0x5ff3, +0x5fe1,0x5fe4,0x5fe3,0x5ffa,0x5fef,0x5ff7,0x5ffb,0x6000, +0x5ff4,0x623a,0x6283,0x628c,0x628e,0x628f,0x6294,0x6287, +0x6271,0x627b,0x627a,0x6270,0x6281,0x6288,0x6277,0x627d, +0x6272,0x6274,0x6537,0x65f0,0x65f4,0x65f3,0x65f2,0x65f5, +0x6745,0x6747,0x6759,0x6755,0x674c,0x6748,0x675d,0x674d, +0x675a,0x674b,0x6bd0,0x6c19,0x6c1a,0x6c78,0x6c67,0x6c6b, +0x6c84,0x6c8b,0x6c8f,0x6c71,0x6c6f,0x6c69,0x6c9a,0x6c6d, +0x6c87,0x6c95,0x6c9c,0x6c66,0x6c73,0x6c65,0x6c7b,0x6c8e, +0x7074,0x707a,0x7263,0x72bf,0x72bd,0x72c3,0x72c6,0x72c1, +0x72ba,0x72c5,0x7395,0x7397,0x7393,0x7394,0x7392,0x753a, +0x7539,0x7594,0x7595,0x7681,0x793d,0x8034,0x8095,0x8099, +0x8090,0x8092,0x809c,0x8290,0x828f,0x8285,0x828e,0x8291, +0x8293,0x828a,0x8283,0x8284,0x8c78,0x8fc9,0x8fbf,0x909f, +0x90a1,0x90a5,0x909e,0x90a7,0x90a0,0x9630,0x9628,0x962f, +0x962d,0x4e33,0x4f98,0x4f7c,0x4f85,0x4f7d,0x4f80,0x4f87, +0x4f76,0x4f74,0x4f89,0x4f84,0x4f77,0x4f4c,0x4f97,0x4f6a, +0x4f9a,0x4f79,0x4f81,0x4f78,0x4f90,0x4f9c,0x4f94,0x4f9e, +0x4f92,0x4f82,0x4f95,0x4f6b,0x4f6e,0x519e,0x51bc,0x51be, +0x5235,0x5232,0x5233,0x5246,0x5231,0x52bc,0x530a,0x530b, +0x533c,0x5392,0x5394,0x5487,0x547f,0x5481,0x5491,0x5482, +0x5488,0x546b,0x547a,0x547e,0x5465,0x546c,0x5474,0x5466, +0x548d,0x546f,0x5461,0x5460,0x5498,0x5463,0x5467,0x5464, +0x56f7,0x56f9,0x576f,0x5772,0x576d,0x576b,0x5771,0x5770, +0x5776,0x5780,0x5775,0x577b,0x5773,0x5774,0x5762,0x5768, +0x577d,0x590c,0x5945,0x59b5,0x59ba,0x59cf,0x59ce,0x59b2, +0x59cc,0x59c1,0x59b6,0x59bc,0x59c3,0x59d6,0x59b1,0x59bd, +0x59c0,0x59c8,0x59b4,0x59c7,0x5b62,0x5b65,0x5b93,0x5b95, +0x5c44,0x5c47,0x5cae,0x5ca4,0x5ca0,0x5cb5,0x5caf,0x5ca8, +0x5cac,0x5c9f,0x5ca3,0x5cad,0x5ca2,0x5caa,0x5ca7,0x5c9d, +0x5ca5,0x5cb6,0x5cb0,0x5ca6,0x5e17,0x5e14,0x5e19,0x5f28, +0x5f22,0x5f23,0x5f24,0x5f54,0x5f82,0x5f7e,0x5f7d,0x5fde, +0x5fe5,0x602d,0x6026,0x6019,0x6032,0x600b,0x6034,0x600a, +0x6017,0x6033,0x601a,0x601e,0x602c,0x6022,0x600d,0x6010, +0x602e,0x6013,0x6011,0x600c,0x6009,0x601c,0x6214,0x623d, +0x62ad,0x62b4,0x62d1,0x62be,0x62aa,0x62b6,0x62ca,0x62ae, +0x62b3,0x62af,0x62bb,0x62a9,0x62b0,0x62b8,0x653d,0x65a8, +0x65bb,0x6609,0x65fc,0x6604,0x6612,0x6608,0x65fb,0x6603, +0x660b,0x660d,0x6605,0x65fd,0x6611,0x6610,0x66f6,0x670a, +0x6785,0x676c,0x678e,0x6792,0x6776,0x677b,0x6798,0x6786, +0x6784,0x6774,0x678d,0x678c,0x677a,0x679f,0x6791,0x6799, +0x6783,0x677d,0x6781,0x6778,0x6779,0x6794,0x6b25,0x6b80, +0x6b7e,0x6bde,0x6c1d,0x6c93,0x6cec,0x6ceb,0x6cee,0x6cd9, +0x6cb6,0x6cd4,0x6cad,0x6ce7,0x6cb7,0x6cd0,0x6cc2,0x6cba, +0x6cc3,0x6cc6,0x6ced,0x6cf2,0x6cd2,0x6cdd,0x6cb4,0x6c8a, +0x6c9d,0x6c80,0x6cde,0x6cc0,0x6d30,0x6ccd,0x6cc7,0x6cb0, +0x6cf9,0x6ccf,0x6ce9,0x6cd1,0x7094,0x7098,0x7085,0x7093, +0x7086,0x7084,0x7091,0x7096,0x7082,0x709a,0x7083,0x726a, +0x72d6,0x72cb,0x72d8,0x72c9,0x72dc,0x72d2,0x72d4,0x72da, +0x72cc,0x72d1,0x73a4,0x73a1,0x73ad,0x73a6,0x73a2,0x73a0, +0x73ac,0x739d,0x74dd,0x74e8,0x753f,0x7540,0x753e,0x758c, +0x7598,0x76af,0x76f3,0x76f1,0x76f0,0x76f5,0x77f8,0x77fc, +0x77f9,0x77fb,0x77fa,0x77f7,0x7942,0x793f,0x79c5,0x7a78, +0x7a7b,0x7afb,0x7c75,0x7cfd,0x8035,0x808f,0x80ae,0x80a3, +0x80b8,0x80b5,0x80ad,0x8220,0x82a0,0x82c0,0x82ab,0x829a, +0x8298,0x829b,0x82b5,0x82a7,0x82ae,0x82bc,0x829e,0x82ba, +0x82b4,0x82a8,0x82a1,0x82a9,0x82c2,0x82a4,0x82c3,0x82b6, +0x82a2,0x8670,0x866f,0x866d,0x866e,0x8c56,0x8fd2,0x8fcb, +0x8fd3,0x8fcd,0x8fd6,0x8fd5,0x8fd7,0x90b2,0x90b4,0x90af, +0x90b3,0x90b0,0x9639,0x963d,0x963c,0x963a,0x9643,0x4fcd, +0x4fc5,0x4fd3,0x4fb2,0x4fc9,0x4fcb,0x4fc1,0x4fd4,0x4fdc, +0x4fd9,0x4fbb,0x4fb3,0x4fdb,0x4fc7,0x4fd6,0x4fba,0x4fc0, +0x4fb9,0x4fec,0x5244,0x5249,0x52c0,0x52c2,0x533d,0x537c, +0x5397,0x5396,0x5399,0x5398,0x54ba,0x54a1,0x54ad,0x54a5, +0x54cf,0x54c3,0x830d,0x54b7,0x54ae,0x54d6,0x54b6,0x54c5, +0x54c6,0x54a0,0x5470,0x54bc,0x54a2,0x54be,0x5472,0x54de, +0x54b0,0x57b5,0x579e,0x579f,0x57a4,0x578c,0x5797,0x579d, +0x579b,0x5794,0x5798,0x578f,0x5799,0x57a5,0x579a,0x5795, +0x58f4,0x590d,0x5953,0x59e1,0x59de,0x59ee,0x5a00,0x59f1, +0x59dd,0x59fa,0x59fd,0x59fc,0x59f6,0x59e4,0x59f2,0x59f7, +0x59db,0x59e9,0x59f3,0x59f5,0x59e0,0x59fe,0x59f4,0x59ed, +0x5ba8,0x5c4c,0x5cd0,0x5cd8,0x5ccc,0x5cd7,0x5ccb,0x5cdb, +0x5cde,0x5cda,0x5cc9,0x5cc7,0x5cca,0x5cd6,0x5cd3,0x5cd4, +0x5ccf,0x5cc8,0x5cc6,0x5cce,0x5cdf,0x5cf8,0x5df9,0x5e21, +0x5e22,0x5e23,0x5e20,0x5e24,0x5eb0,0x5ea4,0x5ea2,0x5e9b, +0x5ea3,0x5ea5,0x5f07,0x5f2e,0x5f56,0x5f86,0x6037,0x6039, +0x6054,0x6072,0x605e,0x6045,0x6053,0x6047,0x6049,0x605b, +0x604c,0x6040,0x6042,0x605f,0x6024,0x6044,0x6058,0x6066, +0x606e,0x6242,0x6243,0x62cf,0x630d,0x630b,0x62f5,0x630e, +0x6303,0x62eb,0x62f9,0x630f,0x630c,0x62f8,0x62f6,0x6300, +0x6313,0x6314,0x62fa,0x6315,0x62fb,0x62f0,0x6541,0x6543, +0x65aa,0x65bf,0x6636,0x6621,0x6632,0x6635,0x661c,0x6626, +0x6622,0x6633,0x662b,0x663a,0x661d,0x6634,0x6639,0x662e, +0x670f,0x6710,0x67c1,0x67f2,0x67c8,0x67ba,0x67dc,0x67bb, +0x67f8,0x67d8,0x67c0,0x67b7,0x67c5,0x67eb,0x67e4,0x67df, +0x67b5,0x67cd,0x67b3,0x67f7,0x67f6,0x67ee,0x67e3,0x67c2, +0x67b9,0x67ce,0x67e7,0x67f0,0x67b2,0x67fc,0x67c6,0x67ed, +0x67cc,0x67ae,0x67e6,0x67db,0x67fa,0x67c9,0x67ca,0x67c3, +0x67ea,0x67cb,0x6b28,0x6b82,0x6b84,0x6bb6,0x6bd6,0x6bd8, +0x6be0,0x6c20,0x6c21,0x6d28,0x6d34,0x6d2d,0x6d1f,0x6d3c, +0x6d3f,0x6d12,0x6d0a,0x6cda,0x6d33,0x6d04,0x6d19,0x6d3a, +0x6d1a,0x6d11,0x6d00,0x6d1d,0x6d42,0x6d01,0x6d18,0x6d37, +0x6d03,0x6d0f,0x6d40,0x6d07,0x6d20,0x6d2c,0x6d08,0x6d22, +0x6d09,0x6d10,0x70b7,0x709f,0x70be,0x70b1,0x70b0,0x70a1, +0x70b4,0x70b5,0x70a9,0x7241,0x7249,0x724a,0x726c,0x7270, +0x7273,0x726e,0x72ca,0x72e4,0x72e8,0x72eb,0x72df,0x72ea, +0x72e6,0x72e3,0x7385,0x73cc,0x73c2,0x73c8,0x73c5,0x73b9, +0x73b6,0x73b5,0x73b4,0x73eb,0x73bf,0x73c7,0x73be,0x73c3, +0x73c6,0x73b8,0x73cb,0x74ec,0x74ee,0x752e,0x7547,0x7548, +0x75a7,0x75aa,0x7679,0x76c4,0x7708,0x7703,0x7704,0x7705, +0x770a,0x76f7,0x76fb,0x76fa,0x77e7,0x77e8,0x7806,0x7811, +0x7812,0x7805,0x7810,0x780f,0x780e,0x7809,0x7803,0x7813, +0x794a,0x794c,0x794b,0x7945,0x7944,0x79d5,0x79cd,0x79cf, +0x79d6,0x79ce,0x7a80,0x7a7e,0x7ad1,0x7b00,0x7b01,0x7c7a, +0x7c78,0x7c79,0x7c7f,0x7c80,0x7c81,0x7d03,0x7d08,0x7d01, +0x7f58,0x7f91,0x7f8d,0x7fbe,0x8007,0x800e,0x800f,0x8014, +0x8037,0x80d8,0x80c7,0x80e0,0x80d1,0x80c8,0x80c2,0x80d0, +0x80c5,0x80e3,0x80d9,0x80dc,0x80ca,0x80d5,0x80c9,0x80cf, +0x80d7,0x80e6,0x80cd,0x81ff,0x8221,0x8294,0x82d9,0x82fe, +0x82f9,0x8307,0x82e8,0x8300,0x82d5,0x833a,0x82eb,0x82d6, +0x82f4,0x82ec,0x82e1,0x82f2,0x82f5,0x830c,0x82fb,0x82f6, +0x82f0,0x82ea,0x82e4,0x82e0,0x82fa,0x82f3,0x82ed,0x8677, +0x8674,0x867c,0x8673,0x8841,0x884e,0x8867,0x886a,0x8869, +0x89d3,0x8a04,0x8a07,0x8d72,0x8fe3,0x8fe1,0x8fee,0x8fe0, +0x90f1,0x90bd,0x90bf,0x90d5,0x90c5,0x90be,0x90c7,0x90cb, +0x90c8,0x91d4,0x91d3,0x9654,0x964f,0x9651,0x9653,0x964a, +0x964e,0x501e,0x5005,0x5007,0x5013,0x5022,0x5030,0x501b, +0x4ff5,0x4ff4,0x5033,0x5037,0x502c,0x4ff6,0x4ff7,0x5017, +0x501c,0x5020,0x5027,0x5035,0x502f,0x5031,0x500e,0x515a, +0x5194,0x5193,0x51ca,0x51c4,0x51c5,0x51c8,0x51ce,0x5261, +0x525a,0x5252,0x525e,0x525f,0x5255,0x5262,0x52cd,0x530e, +0x539e,0x5526,0x54e2,0x5517,0x5512,0x54e7,0x54f3,0x54e4, +0x551a,0x54ff,0x5504,0x5508,0x54eb,0x5511,0x5505,0x54f1, +0x550a,0x54fb,0x54f7,0x54f8,0x54e0,0x550e,0x5503,0x550b, +0x5701,0x5702,0x57cc,0x5832,0x57d5,0x57d2,0x57ba,0x57c6, +0x57bd,0x57bc,0x57b8,0x57b6,0x57bf,0x57c7,0x57d0,0x57b9, +0x57c1,0x590e,0x594a,0x5a19,0x5a16,0x5a2d,0x5a2e,0x5a15, +0x5a0f,0x5a17,0x5a0a,0x5a1e,0x5a33,0x5b6c,0x5ba7,0x5bad, +0x5bac,0x5c03,0x5c56,0x5c54,0x5cec,0x5cff,0x5cee,0x5cf1, +0x5cf7,0x5d00,0x5cf9,0x5e29,0x5e28,0x5ea8,0x5eae,0x5eaa, +0x5eac,0x5f33,0x5f30,0x5f67,0x605d,0x605a,0x6067,0x6041, +0x60a2,0x6088,0x6080,0x6092,0x6081,0x609d,0x6083,0x6095, +0x609b,0x6097,0x6087,0x609c,0x608e,0x6219,0x6246,0x62f2, +0x6310,0x6356,0x632c,0x6344,0x6345,0x6336,0x6343,0x63e4, +0x6339,0x634b,0x634a,0x633c,0x6329,0x6341,0x6334,0x6358, +0x6354,0x6359,0x632d,0x6347,0x6333,0x635a,0x6351,0x6338, +0x6357,0x6340,0x6348,0x654a,0x6546,0x65c6,0x65c3,0x65c4, +0x65c2,0x664a,0x665f,0x6647,0x6651,0x6712,0x6713,0x681f, +0x681a,0x6849,0x6832,0x6833,0x683b,0x684b,0x684f,0x6816, +0x6831,0x681c,0x6835,0x682b,0x682d,0x682f,0x684e,0x6844, +0x6834,0x681d,0x6812,0x6814,0x6826,0x6828,0x682e,0x684d, +0x683a,0x6825,0x6820,0x6b2c,0x6b2f,0x6b2d,0x6b31,0x6b34, +0x6b6d,0x8082,0x6b88,0x6be6,0x6be4,0x6be8,0x6be3,0x6be2, +0x6be7,0x6c25,0x6d7a,0x6d63,0x6d64,0x6d76,0x6d0d,0x6d61, +0x6d92,0x6d58,0x6d62,0x6d6d,0x6d6f,0x6d91,0x6d8d,0x6def, +0x6d7f,0x6d86,0x6d5e,0x6d67,0x6d60,0x6d97,0x6d70,0x6d7c, +0x6d5f,0x6d82,0x6d98,0x6d2f,0x6d68,0x6d8b,0x6d7e,0x6d80, +0x6d84,0x6d16,0x6d83,0x6d7b,0x6d7d,0x6d75,0x6d90,0x70dc, +0x70d3,0x70d1,0x70dd,0x70cb,0x7f39,0x70e2,0x70d7,0x70d2, +0x70de,0x70e0,0x70d4,0x70cd,0x70c5,0x70c6,0x70c7,0x70da, +0x70ce,0x70e1,0x7242,0x7278,0x7277,0x7276,0x7300,0x72fa, +0x72f4,0x72fe,0x72f6,0x72f3,0x72fb,0x7301,0x73d3,0x73d9, +0x73e5,0x73d6,0x73bc,0x73e7,0x73e3,0x73e9,0x73dc,0x73d2, +0x73db,0x73d4,0x73dd,0x73da,0x73d7,0x73d8,0x73e8,0x74de, +0x74df,0x74f4,0x74f5,0x7521,0x755b,0x755f,0x75b0,0x75c1, +0x75bb,0x75c4,0x75c0,0x75bf,0x75b6,0x75ba,0x768a,0x76c9, +0x771d,0x771b,0x7710,0x7713,0x7712,0x7723,0x7711,0x7715, +0x7719,0x771a,0x7722,0x7727,0x7823,0x782c,0x7822,0x7835, +0x782f,0x7828,0x782e,0x782b,0x7821,0x7829,0x7833,0x782a, +0x7831,0x7954,0x795b,0x794f,0x795c,0x7953,0x7952,0x7951, +0x79eb,0x79ec,0x79e0,0x79ee,0x79ed,0x79ea,0x79dc,0x79de, +0x79dd,0x7a86,0x7a89,0x7a85,0x7a8b,0x7a8c,0x7a8a,0x7a87, +0x7ad8,0x7b10,0x7b04,0x7b13,0x7b05,0x7b0f,0x7b08,0x7b0a, +0x7b0e,0x7b09,0x7b12,0x7c84,0x7c91,0x7c8a,0x7c8c,0x7c88, +0x7c8d,0x7c85,0x7d1e,0x7d1d,0x7d11,0x7d0e,0x7d18,0x7d16, +0x7d13,0x7d1f,0x7d12,0x7d0f,0x7d0c,0x7f5c,0x7f61,0x7f5e, +0x7f60,0x7f5d,0x7f5b,0x7f96,0x7f92,0x7fc3,0x7fc2,0x7fc0, +0x8016,0x803e,0x8039,0x80fa,0x80f2,0x80f9,0x80f5,0x8101, +0x80fb,0x8100,0x8201,0x822f,0x8225,0x8333,0x832d,0x8344, +0x8319,0x8351,0x8325,0x8356,0x833f,0x8341,0x8326,0x831c, +0x8322,0x8342,0x834e,0x831b,0x832a,0x8308,0x833c,0x834d, +0x8316,0x8324,0x8320,0x8337,0x832f,0x8329,0x8347,0x8345, +0x834c,0x8353,0x831e,0x832c,0x834b,0x8327,0x8348,0x8653, +0x8652,0x86a2,0x86a8,0x8696,0x868d,0x8691,0x869e,0x8687, +0x8697,0x8686,0x868b,0x869a,0x8685,0x86a5,0x8699,0x86a1, +0x86a7,0x8695,0x8698,0x868e,0x869d,0x8690,0x8694,0x8843, +0x8844,0x886d,0x8875,0x8876,0x8872,0x8880,0x8871,0x887f, +0x886f,0x8883,0x887e,0x8874,0x887c,0x8a12,0x8c47,0x8c57, +0x8c7b,0x8ca4,0x8ca3,0x8d76,0x8d78,0x8db5,0x8db7,0x8db6, +0x8ed1,0x8ed3,0x8ffe,0x8ff5,0x9002,0x8fff,0x8ffb,0x9004, +0x8ffc,0x8ff6,0x90d6,0x90e0,0x90d9,0x90da,0x90e3,0x90df, +0x90e5,0x90d8,0x90db,0x90d7,0x90dc,0x90e4,0x9150,0x914e, +0x914f,0x91d5,0x91e2,0x91da,0x965c,0x965f,0x96bc,0x98e3, +0x9adf,0x9b2f,0x4e7f,0x5070,0x506a,0x5061,0x505e,0x5060, +0x5053,0x504b,0x505d,0x5072,0x5048,0x504d,0x5041,0x505b, +0x504a,0x5062,0x5015,0x5045,0x505f,0x5069,0x506b,0x5063, +0x5064,0x5046,0x5040,0x506e,0x5073,0x5057,0x5051,0x51d0, +0x526b,0x526d,0x526c,0x526e,0x52d6,0x52d3,0x532d,0x539c, +0x5575,0x5576,0x553c,0x554d,0x5550,0x5534,0x552a,0x5551, +0x5562,0x5536,0x5535,0x5530,0x5552,0x5545,0x550c,0x5532, +0x5565,0x554e,0x5539,0x5548,0x552d,0x553b,0x5540,0x554b, +0x570a,0x5707,0x57fb,0x5814,0x57e2,0x57f6,0x57dc,0x57f4, +0x5800,0x57ed,0x57fd,0x5808,0x57f8,0x580b,0x57f3,0x57cf, +0x5807,0x57ee,0x57e3,0x57f2,0x57e5,0x57ec,0x57e1,0x580e, +0x57fc,0x5810,0x57e7,0x5801,0x580c,0x57f1,0x57e9,0x57f0, +0x580d,0x5804,0x595c,0x5a60,0x5a58,0x5a55,0x5a67,0x5a5e, +0x5a38,0x5a35,0x5a6d,0x5a50,0x5a5f,0x5a65,0x5a6c,0x5a53, +0x5a64,0x5a57,0x5a43,0x5a5d,0x5a52,0x5a44,0x5a5b,0x5a48, +0x5a8e,0x5a3e,0x5a4d,0x5a39,0x5a4c,0x5a70,0x5a69,0x5a47, +0x5a51,0x5a56,0x5a42,0x5a5c,0x5b72,0x5b6e,0x5bc1,0x5bc0, +0x5c59,0x5d1e,0x5d0b,0x5d1d,0x5d1a,0x5d20,0x5d0c,0x5d28, +0x5d0d,0x5d26,0x5d25,0x5d0f,0x5d30,0x5d12,0x5d23,0x5d1f, +0x5d2e,0x5e3e,0x5e34,0x5eb1,0x5eb4,0x5eb9,0x5eb2,0x5eb3, +0x5f36,0x5f38,0x5f9b,0x5f96,0x5f9f,0x608a,0x6090,0x6086, +0x60be,0x60b0,0x60ba,0x60d3,0x60d4,0x60cf,0x60e4,0x60d9, +0x60dd,0x60c8,0x60b1,0x60db,0x60b7,0x60ca,0x60bf,0x60c3, +0x60cd,0x60c0,0x6332,0x6365,0x638a,0x6382,0x637d,0x63bd, +0x639e,0x63ad,0x639d,0x6397,0x63ab,0x638e,0x636f,0x6387, +0x6390,0x636e,0x63af,0x6375,0x639c,0x636d,0x63ae,0x637c, +0x63a4,0x633b,0x639f,0x6378,0x6385,0x6381,0x6391,0x638d, +0x6370,0x6553,0x65cd,0x6665,0x6661,0x665b,0x6659,0x665c, +0x6662,0x6718,0x6879,0x6887,0x6890,0x689c,0x686d,0x686e, +0x68ae,0x68ab,0x6956,0x686f,0x68a3,0x68ac,0x68a9,0x6875, +0x6874,0x68b2,0x688f,0x6877,0x6892,0x687c,0x686b,0x6872, +0x68aa,0x6880,0x6871,0x687e,0x689b,0x6896,0x688b,0x68a0, +0x6889,0x68a4,0x6878,0x687b,0x6891,0x688c,0x688a,0x687d, +0x6b36,0x6b33,0x6b37,0x6b38,0x6b91,0x6b8f,0x6b8d,0x6b8e, +0x6b8c,0x6c2a,0x6dc0,0x6dab,0x6db4,0x6db3,0x6e74,0x6dac, +0x6de9,0x6de2,0x6db7,0x6df6,0x6dd4,0x6e00,0x6dc8,0x6de0, +0x6ddf,0x6dd6,0x6dbe,0x6de5,0x6ddc,0x6ddd,0x6ddb,0x6df4, +0x6dca,0x6dbd,0x6ded,0x6df0,0x6dba,0x6dd5,0x6dc2,0x6dcf, +0x6dc9,0x6dd0,0x6df2,0x6dd3,0x6dfd,0x6dd7,0x6dcd,0x6de3, +0x6dbb,0x70fa,0x710d,0x70f7,0x7117,0x70f4,0x710c,0x70f0, +0x7104,0x70f3,0x7110,0x70fc,0x70ff,0x7106,0x7113,0x7100, +0x70f8,0x70f6,0x710b,0x7102,0x710e,0x727e,0x727b,0x727c, +0x727f,0x731d,0x7317,0x7307,0x7311,0x7318,0x730a,0x7308, +0x72ff,0x730f,0x731e,0x7388,0x73f6,0x73f8,0x73f5,0x7404, +0x7401,0x73fd,0x7407,0x7400,0x73fa,0x73fc,0x73ff,0x740c, +0x740b,0x73f4,0x7408,0x7564,0x7563,0x75ce,0x75d2,0x75cf, +0x75cb,0x75cc,0x75d1,0x75d0,0x768f,0x7689,0x76d3,0x7739, +0x772f,0x772d,0x7731,0x7732,0x7734,0x7733,0x773d,0x7725, +0x773b,0x7735,0x7848,0x7852,0x7849,0x784d,0x784a,0x784c, +0x7826,0x7845,0x7850,0x7964,0x7967,0x7969,0x796a,0x7963, +0x796b,0x7961,0x79bb,0x79fa,0x79f8,0x79f6,0x79f7,0x7a8f, +0x7a94,0x7a90,0x7b35,0x7b47,0x7b34,0x7b25,0x7b30,0x7b22, +0x7b24,0x7b33,0x7b18,0x7b2a,0x7b1d,0x7b31,0x7b2b,0x7b2d, +0x7b2f,0x7b32,0x7b38,0x7b1a,0x7b23,0x7c94,0x7c98,0x7c96, +0x7ca3,0x7d35,0x7d3d,0x7d38,0x7d36,0x7d3a,0x7d45,0x7d2c, +0x7d29,0x7d41,0x7d47,0x7d3e,0x7d3f,0x7d4a,0x7d3b,0x7d28, +0x7f63,0x7f95,0x7f9c,0x7f9d,0x7f9b,0x7fca,0x7fcb,0x7fcd, +0x7fd0,0x7fd1,0x7fc7,0x7fcf,0x7fc9,0x801f,0x801e,0x801b, +0x8047,0x8043,0x8048,0x8118,0x8125,0x8119,0x811b,0x812d, +0x811f,0x812c,0x811e,0x8121,0x8115,0x8127,0x811d,0x8122, +0x8211,0x8238,0x8233,0x823a,0x8234,0x8232,0x8274,0x8390, +0x83a3,0x83a8,0x838d,0x837a,0x8373,0x83a4,0x8374,0x838f, +0x8381,0x8395,0x8399,0x8375,0x8394,0x83a9,0x837d,0x8383, +0x838c,0x839d,0x839b,0x83aa,0x838b,0x837e,0x83a5,0x83af, +0x8388,0x8397,0x83b0,0x837f,0x83a6,0x8387,0x83ae,0x8376, +0x839a,0x8659,0x8656,0x86bf,0x86b7,0x86c2,0x86c1,0x86c5, +0x86ba,0x86b0,0x86c8,0x86b9,0x86b3,0x86b8,0x86cc,0x86b4, +0x86bb,0x86bc,0x86c3,0x86bd,0x86be,0x8852,0x8889,0x8895, +0x88a8,0x88a2,0x88aa,0x889a,0x8891,0x88a1,0x889f,0x8898, +0x88a7,0x8899,0x889b,0x8897,0x88a4,0x88ac,0x888c,0x8893, +0x888e,0x8982,0x89d6,0x89d9,0x89d5,0x8a30,0x8a27,0x8a2c, +0x8a1e,0x8c39,0x8c3b,0x8c5c,0x8c5d,0x8c7d,0x8ca5,0x8d7d, +0x8d7b,0x8d79,0x8dbc,0x8dc2,0x8db9,0x8dbf,0x8dc1,0x8ed8, +0x8ede,0x8edd,0x8edc,0x8ed7,0x8ee0,0x8ee1,0x9024,0x900b, +0x9011,0x901c,0x900c,0x9021,0x90ef,0x90ea,0x90f0,0x90f4, +0x90f2,0x90f3,0x90d4,0x90eb,0x90ec,0x90e9,0x9156,0x9158, +0x915a,0x9153,0x9155,0x91ec,0x91f4,0x91f1,0x91f3,0x91f8, +0x91e4,0x91f9,0x91ea,0x91eb,0x91f7,0x91e8,0x91ee,0x957a, +0x9586,0x9588,0x967c,0x966d,0x966b,0x9671,0x966f,0x96bf, +0x976a,0x9804,0x98e5,0x9997,0x509b,0x5095,0x5094,0x509e, +0x508b,0x50a3,0x5083,0x508c,0x508e,0x509d,0x5068,0x509c, +0x5092,0x5082,0x5087,0x515f,0x51d4,0x5312,0x5311,0x53a4, +0x53a7,0x5591,0x55a8,0x55a5,0x55ad,0x5577,0x5645,0x55a2, +0x5593,0x5588,0x558f,0x55b5,0x5581,0x55a3,0x5592,0x55a4, +0x557d,0x558c,0x55a6,0x557f,0x5595,0x55a1,0x558e,0x570c, +0x5829,0x5837,0x5819,0x581e,0x5827,0x5823,0x5828,0x57f5, +0x5848,0x5825,0x581c,0x581b,0x5833,0x583f,0x5836,0x582e, +0x5839,0x5838,0x582d,0x582c,0x583b,0x5961,0x5aaf,0x5a94, +0x5a9f,0x5a7a,0x5aa2,0x5a9e,0x5a78,0x5aa6,0x5a7c,0x5aa5, +0x5aac,0x5a95,0x5aae,0x5a37,0x5a84,0x5a8a,0x5a97,0x5a83, +0x5a8b,0x5aa9,0x5a7b,0x5a7d,0x5a8c,0x5a9c,0x5a8f,0x5a93, +0x5a9d,0x5bea,0x5bcd,0x5bcb,0x5bd4,0x5bd1,0x5bca,0x5bce, +0x5c0c,0x5c30,0x5d37,0x5d43,0x5d6b,0x5d41,0x5d4b,0x5d3f, +0x5d35,0x5d51,0x5d4e,0x5d55,0x5d33,0x5d3a,0x5d52,0x5d3d, +0x5d31,0x5d59,0x5d42,0x5d39,0x5d49,0x5d38,0x5d3c,0x5d32, +0x5d36,0x5d40,0x5d45,0x5e44,0x5e41,0x5f58,0x5fa6,0x5fa5, +0x5fab,0x60c9,0x60b9,0x60cc,0x60e2,0x60ce,0x60c4,0x6114, +0x60f2,0x610a,0x6116,0x6105,0x60f5,0x6113,0x60f8,0x60fc, +0x60fe,0x60c1,0x6103,0x6118,0x611d,0x6110,0x60ff,0x6104, +0x610b,0x624a,0x6394,0x63b1,0x63b0,0x63ce,0x63e5,0x63e8, +0x63ef,0x63c3,0x649d,0x63f3,0x63ca,0x63e0,0x63f6,0x63d5, +0x63f2,0x63f5,0x6461,0x63df,0x63be,0x63dd,0x63dc,0x63c4, +0x63d8,0x63d3,0x63c2,0x63c7,0x63cc,0x63cb,0x63c8,0x63f0, +0x63d7,0x63d9,0x6532,0x6567,0x656a,0x6564,0x655c,0x6568, +0x6565,0x658c,0x659d,0x659e,0x65ae,0x65d0,0x65d2,0x667c, +0x666c,0x667b,0x6680,0x6671,0x6679,0x666a,0x6672,0x6701, +0x690c,0x68d3,0x6904,0x68dc,0x692a,0x68ec,0x68ea,0x68f1, +0x690f,0x68d6,0x68f7,0x68eb,0x68e4,0x68f6,0x6913,0x6910, +0x68f3,0x68e1,0x6907,0x68cc,0x6908,0x6970,0x68b4,0x6911, +0x68ef,0x68c6,0x6914,0x68f8,0x68d0,0x68fd,0x68fc,0x68e8, +0x690b,0x690a,0x6917,0x68ce,0x68c8,0x68dd,0x68de,0x68e6, +0x68f4,0x68d1,0x6906,0x68d4,0x68e9,0x6915,0x6925,0x68c7, +0x6b39,0x6b3b,0x6b3f,0x6b3c,0x6b94,0x6b97,0x6b99,0x6b95, +0x6bbd,0x6bf0,0x6bf2,0x6bf3,0x6c30,0x6dfc,0x6e46,0x6e47, +0x6e1f,0x6e49,0x6e88,0x6e3c,0x6e3d,0x6e45,0x6e62,0x6e2b, +0x6e3f,0x6e41,0x6e5d,0x6e73,0x6e1c,0x6e33,0x6e4b,0x6e40, +0x6e51,0x6e3b,0x6e03,0x6e2e,0x6e5e,0x6e68,0x6e5c,0x6e61, +0x6e31,0x6e28,0x6e60,0x6e71,0x6e6b,0x6e39,0x6e22,0x6e30, +0x6e53,0x6e65,0x6e27,0x6e78,0x6e64,0x6e77,0x6e55,0x6e79, +0x6e52,0x6e66,0x6e35,0x6e36,0x6e5a,0x7120,0x711e,0x712f, +0x70fb,0x712e,0x7131,0x7123,0x7125,0x7122,0x7132,0x711f, +0x7128,0x713a,0x711b,0x724b,0x725a,0x7288,0x7289,0x7286, +0x7285,0x728b,0x7312,0x730b,0x7330,0x7322,0x7331,0x7333, +0x7327,0x7332,0x732d,0x7326,0x7323,0x7335,0x730c,0x742e, +0x742c,0x7430,0x742b,0x7416,0x741a,0x7421,0x742d,0x7431, +0x7424,0x7423,0x741d,0x7429,0x7420,0x7432,0x74fb,0x752f, +0x756f,0x756c,0x75e7,0x75da,0x75e1,0x75e6,0x75dd,0x75df, +0x75e4,0x75d7,0x7695,0x7692,0x76da,0x7746,0x7747,0x7744, +0x774d,0x7745,0x774a,0x774e,0x774b,0x774c,0x77de,0x77ec, +0x7860,0x7864,0x7865,0x785c,0x786d,0x7871,0x786a,0x786e, +0x7870,0x7869,0x7868,0x785e,0x7862,0x7974,0x7973,0x7972, +0x7970,0x7a02,0x7a0a,0x7a03,0x7a0c,0x7a04,0x7a99,0x7ae6, +0x7ae4,0x7b4a,0x7b3b,0x7b44,0x7b48,0x7b4c,0x7b4e,0x7b40, +0x7b58,0x7b45,0x7ca2,0x7c9e,0x7ca8,0x7ca1,0x7d58,0x7d6f, +0x7d63,0x7d53,0x7d56,0x7d67,0x7d6a,0x7d4f,0x7d6d,0x7d5c, +0x7d6b,0x7d52,0x7d54,0x7d69,0x7d51,0x7d5f,0x7d4e,0x7f3e, +0x7f3f,0x7f65,0x7f66,0x7fa2,0x7fa0,0x7fa1,0x7fd7,0x8051, +0x804f,0x8050,0x80fe,0x80d4,0x8143,0x814a,0x8152,0x814f, +0x8147,0x813d,0x814d,0x813a,0x81e6,0x81ee,0x81f7,0x81f8, +0x81f9,0x8204,0x823c,0x823d,0x823f,0x8275,0x833b,0x83cf, +0x83f9,0x8423,0x83c0,0x83e8,0x8412,0x83e7,0x83e4,0x83fc, +0x83f6,0x8410,0x83c6,0x83c8,0x83eb,0x83e3,0x83bf,0x8401, +0x83dd,0x83e5,0x83d8,0x83ff,0x83e1,0x83cb,0x83ce,0x83d6, +0x83f5,0x83c9,0x8409,0x840f,0x83de,0x8411,0x8406,0x83c2, +0x83f3,0x83d5,0x83fa,0x83c7,0x83d1,0x83ea,0x8413,0x83c3, +0x83ec,0x83ee,0x83c4,0x83fb,0x83d7,0x83e2,0x841b,0x83db, +0x83fe,0x86d8,0x86e2,0x86e6,0x86d3,0x86e3,0x86da,0x86ea, +0x86dd,0x86eb,0x86dc,0x86ec,0x86e9,0x86d7,0x86e8,0x86d1, +0x8848,0x8856,0x8855,0x88ba,0x88d7,0x88b9,0x88b8,0x88c0, +0x88be,0x88b6,0x88bc,0x88b7,0x88bd,0x88b2,0x8901,0x88c9, +0x8995,0x8998,0x8997,0x89dd,0x89da,0x89db,0x8a4e,0x8a4d, +0x8a39,0x8a59,0x8a40,0x8a57,0x8a58,0x8a44,0x8a45,0x8a52, +0x8a48,0x8a51,0x8a4a,0x8a4c,0x8a4f,0x8c5f,0x8c81,0x8c80, +0x8cba,0x8cbe,0x8cb0,0x8cb9,0x8cb5,0x8d84,0x8d80,0x8d89, +0x8dd8,0x8dd3,0x8dcd,0x8dc7,0x8dd6,0x8ddc,0x8dcf,0x8dd5, +0x8dd9,0x8dc8,0x8dd7,0x8dc5,0x8eef,0x8ef7,0x8efa,0x8ef9, +0x8ee6,0x8eee,0x8ee5,0x8ef5,0x8ee7,0x8ee8,0x8ef6,0x8eeb, +0x8ef1,0x8eec,0x8ef4,0x8ee9,0x902d,0x9034,0x902f,0x9106, +0x912c,0x9104,0x90ff,0x90fc,0x9108,0x90f9,0x90fb,0x9101, +0x9100,0x9107,0x9105,0x9103,0x9161,0x9164,0x915f,0x9162, +0x9160,0x9201,0x920a,0x9225,0x9203,0x921a,0x9226,0x920f, +0x920c,0x9200,0x9212,0x91ff,0x91fd,0x9206,0x9204,0x9227, +0x9202,0x921c,0x9224,0x9219,0x9217,0x9205,0x9216,0x957b, +0x958d,0x958c,0x9590,0x9687,0x967e,0x9688,0x9689,0x9683, +0x9680,0x96c2,0x96c8,0x96c3,0x96f1,0x96f0,0x976c,0x9770, +0x976e,0x9807,0x98a9,0x98eb,0x9ce6,0x9ef9,0x4e83,0x4e84, +0x4eb6,0x50bd,0x50bf,0x50c6,0x50ae,0x50c4,0x50ca,0x50b4, +0x50c8,0x50c2,0x50b0,0x50c1,0x50ba,0x50b1,0x50cb,0x50c9, +0x50b6,0x50b8,0x51d7,0x527a,0x5278,0x527b,0x527c,0x55c3, +0x55db,0x55cc,0x55d0,0x55cb,0x55ca,0x55dd,0x55c0,0x55d4, +0x55c4,0x55e9,0x55bf,0x55d2,0x558d,0x55cf,0x55d5,0x55e2, +0x55d6,0x55c8,0x55f2,0x55cd,0x55d9,0x55c2,0x5714,0x5853, +0x5868,0x5864,0x584f,0x584d,0x5849,0x586f,0x5855,0x584e, +0x585d,0x5859,0x5865,0x585b,0x583d,0x5863,0x5871,0x58fc, +0x5ac7,0x5ac4,0x5acb,0x5aba,0x5ab8,0x5ab1,0x5ab5,0x5ab0, +0x5abf,0x5ac8,0x5abb,0x5ac6,0x5ab7,0x5ac0,0x5aca,0x5ab4, +0x5ab6,0x5acd,0x5ab9,0x5a90,0x5bd6,0x5bd8,0x5bd9,0x5c1f, +0x5c33,0x5d71,0x5d63,0x5d4a,0x5d65,0x5d72,0x5d6c,0x5d5e, +0x5d68,0x5d67,0x5d62,0x5df0,0x5e4f,0x5e4e,0x5e4a,0x5e4d, +0x5e4b,0x5ec5,0x5ecc,0x5ec6,0x5ecb,0x5ec7,0x5f40,0x5faf, +0x5fad,0x60f7,0x6149,0x614a,0x612b,0x6145,0x6136,0x6132, +0x612e,0x6146,0x612f,0x614f,0x6129,0x6140,0x6220,0x9168, +0x6223,0x6225,0x6224,0x63c5,0x63f1,0x63eb,0x6410,0x6412, +0x6409,0x6420,0x6424,0x6433,0x6443,0x641f,0x6415,0x6418, +0x6439,0x6437,0x6422,0x6423,0x640c,0x6426,0x6430,0x6428, +0x6441,0x6435,0x642f,0x640a,0x641a,0x6440,0x6425,0x6427, +0x640b,0x63e7,0x641b,0x642e,0x6421,0x640e,0x656f,0x6592, +0x65d3,0x6686,0x668c,0x6695,0x6690,0x668b,0x668a,0x6699, +0x6694,0x6678,0x6720,0x6966,0x695f,0x6938,0x694e,0x6962, +0x6971,0x693f,0x6945,0x696a,0x6939,0x6942,0x6957,0x6959, +0x697a,0x6948,0x6949,0x6935,0x696c,0x6933,0x693d,0x6965, +0x68f0,0x6978,0x6934,0x6969,0x6940,0x696f,0x6944,0x6976, +0x6958,0x6941,0x6974,0x694c,0x693b,0x694b,0x6937,0x695c, +0x694f,0x6951,0x6932,0x6952,0x692f,0x697b,0x693c,0x6b46, +0x6b45,0x6b43,0x6b42,0x6b48,0x6b41,0x6b9b,0xfa0d,0x6bfb, +0x6bfc,0x6bf9,0x6bf7,0x6bf8,0x6e9b,0x6ed6,0x6ec8,0x6e8f, +0x6ec0,0x6e9f,0x6e93,0x6e94,0x6ea0,0x6eb1,0x6eb9,0x6ec6, +0x6ed2,0x6ebd,0x6ec1,0x6e9e,0x6ec9,0x6eb7,0x6eb0,0x6ecd, +0x6ea6,0x6ecf,0x6eb2,0x6ebe,0x6ec3,0x6edc,0x6ed8,0x6e99, +0x6e92,0x6e8e,0x6e8d,0x6ea4,0x6ea1,0x6ebf,0x6eb3,0x6ed0, +0x6eca,0x6e97,0x6eae,0x6ea3,0x7147,0x7154,0x7152,0x7163, +0x7160,0x7141,0x715d,0x7162,0x7172,0x7178,0x716a,0x7161, +0x7142,0x7158,0x7143,0x714b,0x7170,0x715f,0x7150,0x7153, +0x7144,0x714d,0x715a,0x724f,0x728d,0x728c,0x7291,0x7290, +0x728e,0x733c,0x7342,0x733b,0x733a,0x7340,0x734a,0x7349, +0x7444,0x744a,0x744b,0x7452,0x7451,0x7457,0x7440,0x744f, +0x7450,0x744e,0x7442,0x7446,0x744d,0x7454,0x74e1,0x74ff, +0x74fe,0x74fd,0x751d,0x7579,0x7577,0x6983,0x75ef,0x760f, +0x7603,0x75f7,0x75fe,0x75fc,0x75f9,0x75f8,0x7610,0x75fb, +0x75f6,0x75ed,0x75f5,0x75fd,0x7699,0x76b5,0x76dd,0x7755, +0x775f,0x7760,0x7752,0x7756,0x775a,0x7769,0x7767,0x7754, +0x7759,0x776d,0x77e0,0x7887,0x789a,0x7894,0x788f,0x7884, +0x7895,0x7885,0x7886,0x78a1,0x7883,0x7879,0x7899,0x7880, +0x7896,0x787b,0x797c,0x7982,0x797d,0x7979,0x7a11,0x7a18, +0x7a19,0x7a12,0x7a17,0x7a15,0x7a22,0x7a13,0x7a1b,0x7a10, +0x7aa3,0x7aa2,0x7a9e,0x7aeb,0x7b66,0x7b64,0x7b6d,0x7b74, +0x7b69,0x7b72,0x7b65,0x7b73,0x7b71,0x7b70,0x7b61,0x7b78, +0x7b76,0x7b63,0x7cb2,0x7cb4,0x7caf,0x7d88,0x7d86,0x7d80, +0x7d8d,0x7d7f,0x7d85,0x7d7a,0x7d8e,0x7d7b,0x7d83,0x7d7c, +0x7d8c,0x7d94,0x7d84,0x7d7d,0x7d92,0x7f6d,0x7f6b,0x7f67, +0x7f68,0x7f6c,0x7fa6,0x7fa5,0x7fa7,0x7fdb,0x7fdc,0x8021, +0x8164,0x8160,0x8177,0x815c,0x8169,0x815b,0x8162,0x8172, +0x6721,0x815e,0x8176,0x8167,0x816f,0x8144,0x8161,0x821d, +0x8249,0x8244,0x8240,0x8242,0x8245,0x84f1,0x843f,0x8456, +0x8476,0x8479,0x848f,0x848d,0x8465,0x8451,0x8440,0x8486, +0x8467,0x8430,0x844d,0x847d,0x845a,0x8459,0x8474,0x8473, +0x845d,0x8507,0x845e,0x8437,0x843a,0x8434,0x847a,0x8443, +0x8478,0x8432,0x8445,0x8429,0x83d9,0x844b,0x842f,0x8442, +0x842d,0x845f,0x8470,0x8439,0x844e,0x844c,0x8452,0x846f, +0x84c5,0x848e,0x843b,0x8447,0x8436,0x8433,0x8468,0x847e, +0x8444,0x842b,0x8460,0x8454,0x846e,0x8450,0x870b,0x8704, +0x86f7,0x870c,0x86fa,0x86d6,0x86f5,0x874d,0x86f8,0x870e, +0x8709,0x8701,0x86f6,0x870d,0x8705,0x88d6,0x88cb,0x88cd, +0x88ce,0x88de,0x88db,0x88da,0x88cc,0x88d0,0x8985,0x899b, +0x89df,0x89e5,0x89e4,0x89e1,0x89e0,0x89e2,0x89dc,0x89e6, +0x8a76,0x8a86,0x8a7f,0x8a61,0x8a3f,0x8a77,0x8a82,0x8a84, +0x8a75,0x8a83,0x8a81,0x8a74,0x8a7a,0x8c3c,0x8c4b,0x8c4a, +0x8c65,0x8c64,0x8c66,0x8c86,0x8c84,0x8c85,0x8ccc,0x8d68, +0x8d69,0x8d91,0x8d8c,0x8d8e,0x8d8f,0x8d8d,0x8d93,0x8d94, +0x8d90,0x8d92,0x8df0,0x8de0,0x8dec,0x8df1,0x8dee,0x8dd0, +0x8de9,0x8de3,0x8de2,0x8de7,0x8df2,0x8deb,0x8df4,0x8f06, +0x8eff,0x8f01,0x8f00,0x8f05,0x8f07,0x8f08,0x8f02,0x8f0b, +0x9052,0x903f,0x9044,0x9049,0x903d,0x9110,0x910d,0x910f, +0x9111,0x9116,0x9114,0x910b,0x910e,0x916e,0x916f,0x9248, +0x9252,0x9230,0x923a,0x9266,0x9233,0x9265,0x925e,0x9283, +0x922e,0x924a,0x9246,0x926d,0x926c,0x924f,0x9260,0x9267, +0x926f,0x9236,0x9261,0x9270,0x9231,0x9254,0x9263,0x9250, +0x9272,0x924e,0x9253,0x924c,0x9256,0x9232,0x959f,0x959c, +0x959e,0x959b,0x9692,0x9693,0x9691,0x9697,0x96ce,0x96fa, +0x96fd,0x96f8,0x96f5,0x9773,0x9777,0x9778,0x9772,0x980f, +0x980d,0x980e,0x98ac,0x98f6,0x98f9,0x99af,0x99b2,0x99b0, +0x99b5,0x9aad,0x9aab,0x9b5b,0x9cea,0x9ced,0x9ce7,0x9e80, +0x9efd,0x50e6,0x50d4,0x50d7,0x50e8,0x50f3,0x50db,0x50ea, +0x50dd,0x50e4,0x50d3,0x50ec,0x50f0,0x50ef,0x50e3,0x50e0, +0x51d8,0x5280,0x5281,0x52e9,0x52eb,0x5330,0x53ac,0x5627, +0x5615,0x560c,0x5612,0x55fc,0x560f,0x561c,0x5601,0x5613, +0x5602,0x55fa,0x561d,0x5604,0x55ff,0x55f9,0x5889,0x587c, +0x5890,0x5898,0x5886,0x5881,0x587f,0x5874,0x588b,0x587a, +0x5887,0x5891,0x588e,0x5876,0x5882,0x5888,0x587b,0x5894, +0x588f,0x58fe,0x596b,0x5adc,0x5aee,0x5ae5,0x5ad5,0x5aea, +0x5ada,0x5aed,0x5aeb,0x5af3,0x5ae2,0x5ae0,0x5adb,0x5aec, +0x5ade,0x5add,0x5ad9,0x5ae8,0x5adf,0x5b77,0x5be0,0x5be3, +0x5c63,0x5d82,0x5d80,0x5d7d,0x5d86,0x5d7a,0x5d81,0x5d77, +0x5d8a,0x5d89,0x5d88,0x5d7e,0x5d7c,0x5d8d,0x5d79,0x5d7f, +0x5e58,0x5e59,0x5e53,0x5ed8,0x5ed1,0x5ed7,0x5ece,0x5edc, +0x5ed5,0x5ed9,0x5ed2,0x5ed4,0x5f44,0x5f43,0x5f6f,0x5fb6, +0x612c,0x6128,0x6141,0x615e,0x6171,0x6173,0x6152,0x6153, +0x6172,0x616c,0x6180,0x6174,0x6154,0x617a,0x615b,0x6165, +0x613b,0x616a,0x6161,0x6156,0x6229,0x6227,0x622b,0x642b, +0x644d,0x645b,0x645d,0x6474,0x6476,0x6472,0x6473,0x647d, +0x6475,0x6466,0x64a6,0x644e,0x6482,0x645e,0x645c,0x644b, +0x6453,0x6460,0x6450,0x647f,0x643f,0x646c,0x646b,0x6459, +0x6465,0x6477,0x6573,0x65a0,0x66a1,0x66a0,0x669f,0x6705, +0x6704,0x6722,0x69b1,0x69b6,0x69c9,0x69a0,0x69ce,0x6996, +0x69b0,0x69ac,0x69bc,0x6991,0x6999,0x698e,0x69a7,0x698d, +0x69a9,0x69be,0x69af,0x69bf,0x69c4,0x69bd,0x69a4,0x69d4, +0x69b9,0x69ca,0x699a,0x69cf,0x69b3,0x6993,0x69aa,0x69a1, +0x699e,0x69d9,0x6997,0x6990,0x69c2,0x69b5,0x69a5,0x69c6, +0x6b4a,0x6b4d,0x6b4b,0x6b9e,0x6b9f,0x6ba0,0x6bc3,0x6bc4, +0x6bfe,0x6ece,0x6ef5,0x6ef1,0x6f03,0x6f25,0x6ef8,0x6f37, +0x6efb,0x6f2e,0x6f09,0x6f4e,0x6f19,0x6f1a,0x6f27,0x6f18, +0x6f3b,0x6f12,0x6eed,0x6f0a,0x6f36,0x6f73,0x6ef9,0x6eee, +0x6f2d,0x6f40,0x6f30,0x6f3c,0x6f35,0x6eeb,0x6f07,0x6f0e, +0x6f43,0x6f05,0x6efd,0x6ef6,0x6f39,0x6f1c,0x6efc,0x6f3a, +0x6f1f,0x6f0d,0x6f1e,0x6f08,0x6f21,0x7187,0x7190,0x7189, +0x7180,0x7185,0x7182,0x718f,0x717b,0x7186,0x7181,0x7197, +0x7244,0x7253,0x7297,0x7295,0x7293,0x7343,0x734d,0x7351, +0x734c,0x7462,0x7473,0x7471,0x7475,0x7472,0x7467,0x746e, +0x7500,0x7502,0x7503,0x757d,0x7590,0x7616,0x7608,0x760c, +0x7615,0x7611,0x760a,0x7614,0x76b8,0x7781,0x777c,0x7785, +0x7782,0x776e,0x7780,0x776f,0x777e,0x7783,0x78b2,0x78aa, +0x78b4,0x78ad,0x78a8,0x787e,0x78ab,0x789e,0x78a5,0x78a0, +0x78ac,0x78a2,0x78a4,0x7998,0x798a,0x798b,0x7996,0x7995, +0x7994,0x7993,0x7997,0x7988,0x7992,0x7990,0x7a2b,0x7a4a, +0x7a30,0x7a2f,0x7a28,0x7a26,0x7aa8,0x7aab,0x7aac,0x7aee, +0x7b88,0x7b9c,0x7b8a,0x7b91,0x7b90,0x7b96,0x7b8d,0x7b8c, +0x7b9b,0x7b8e,0x7b85,0x7b98,0x5284,0x7b99,0x7ba4,0x7b82, +0x7cbb,0x7cbf,0x7cbc,0x7cba,0x7da7,0x7db7,0x7dc2,0x7da3, +0x7daa,0x7dc1,0x7dc0,0x7dc5,0x7d9d,0x7dce,0x7dc4,0x7dc6, +0x7dcb,0x7dcc,0x7daf,0x7db9,0x7d96,0x7dbc,0x7d9f,0x7da6, +0x7dae,0x7da9,0x7da1,0x7dc9,0x7f73,0x7fe2,0x7fe3,0x7fe5, +0x7fde,0x8024,0x805d,0x805c,0x8189,0x8186,0x8183,0x8187, +0x818d,0x818c,0x818b,0x8215,0x8497,0x84a4,0x84a1,0x849f, +0x84ba,0x84ce,0x84c2,0x84ac,0x84ae,0x84ab,0x84b9,0x84b4, +0x84c1,0x84cd,0x84aa,0x849a,0x84b1,0x84d0,0x849d,0x84a7, +0x84bb,0x84a2,0x8494,0x84c7,0x84cc,0x849b,0x84a9,0x84af, +0x84a8,0x84d6,0x8498,0x84b6,0x84cf,0x84a0,0x84d7,0x84d4, +0x84d2,0x84db,0x84b0,0x8491,0x8661,0x8733,0x8723,0x8728, +0x876b,0x8740,0x872e,0x871e,0x8721,0x8719,0x871b,0x8743, +0x872c,0x8741,0x873e,0x8746,0x8720,0x8732,0x872a,0x872d, +0x873c,0x8712,0x873a,0x8731,0x8735,0x8742,0x8726,0x8727, +0x8738,0x8724,0x871a,0x8730,0x8711,0x88f7,0x88e7,0x88f1, +0x88f2,0x88fa,0x88fe,0x88ee,0x88fc,0x88f6,0x88fb,0x88f0, +0x88ec,0x88eb,0x899d,0x89a1,0x899f,0x899e,0x89e9,0x89eb, +0x89e8,0x8aab,0x8a99,0x8a8b,0x8a92,0x8a8f,0x8a96,0x8c3d, +0x8c68,0x8c69,0x8cd5,0x8ccf,0x8cd7,0x8d96,0x8e09,0x8e02, +0x8dff,0x8e0d,0x8dfd,0x8e0a,0x8e03,0x8e07,0x8e06,0x8e05, +0x8dfe,0x8e00,0x8e04,0x8f10,0x8f11,0x8f0e,0x8f0d,0x9123, +0x911c,0x9120,0x9122,0x911f,0x911d,0x911a,0x9124,0x9121, +0x911b,0x917a,0x9172,0x9179,0x9173,0x92a5,0x92a4,0x9276, +0x929b,0x927a,0x92a0,0x9294,0x92aa,0x928d,0x92a6,0x929a, +0x92ab,0x9279,0x9297,0x927f,0x92a3,0x92ee,0x928e,0x9282, +0x9295,0x92a2,0x927d,0x9288,0x92a1,0x928a,0x9286,0x928c, +0x9299,0x92a7,0x927e,0x9287,0x92a9,0x929d,0x928b,0x922d, +0x969e,0x96a1,0x96ff,0x9758,0x977d,0x977a,0x977e,0x9783, +0x9780,0x9782,0x977b,0x9784,0x9781,0x977f,0x97ce,0x97cd, +0x9816,0x98ad,0x98ae,0x9902,0x9900,0x9907,0x999d,0x999c, +0x99c3,0x99b9,0x99bb,0x99ba,0x99c2,0x99bd,0x99c7,0x9ab1, +0x9ae3,0x9ae7,0x9b3e,0x9b3f,0x9b60,0x9b61,0x9b5f,0x9cf1, +0x9cf2,0x9cf5,0x9ea7,0x50ff,0x5103,0x5130,0x50f8,0x5106, +0x5107,0x50f6,0x50fe,0x510b,0x510c,0x50fd,0x510a,0x528b, +0x528c,0x52f1,0x52ef,0x5648,0x5642,0x564c,0x5635,0x5641, +0x564a,0x5649,0x5646,0x5658,0x565a,0x5640,0x5633,0x563d, +0x562c,0x563e,0x5638,0x562a,0x563a,0x571a,0x58ab,0x589d, +0x58b1,0x58a0,0x58a3,0x58af,0x58ac,0x58a5,0x58a1,0x58ff, +0x5aff,0x5af4,0x5afd,0x5af7,0x5af6,0x5b03,0x5af8,0x5b02, +0x5af9,0x5b01,0x5b07,0x5b05,0x5b0f,0x5c67,0x5d99,0x5d97, +0x5d9f,0x5d92,0x5da2,0x5d93,0x5d95,0x5da0,0x5d9c,0x5da1, +0x5d9a,0x5d9e,0x5e69,0x5e5d,0x5e60,0x5e5c,0x7df3,0x5edb, +0x5ede,0x5ee1,0x5f49,0x5fb2,0x618b,0x6183,0x6179,0x61b1, +0x61b0,0x61a2,0x6189,0x619b,0x6193,0x61af,0x61ad,0x619f, +0x6192,0x61aa,0x61a1,0x618d,0x6166,0x61b3,0x622d,0x646e, +0x6470,0x6496,0x64a0,0x6485,0x6497,0x649c,0x648f,0x648b, +0x648a,0x648c,0x64a3,0x649f,0x6468,0x64b1,0x6498,0x6576, +0x657a,0x6579,0x657b,0x65b2,0x65b3,0x66b5,0x66b0,0x66a9, +0x66b2,0x66b7,0x66aa,0x66af,0x6a00,0x6a06,0x6a17,0x69e5, +0x69f8,0x6a15,0x69f1,0x69e4,0x6a20,0x69ff,0x69ec,0x69e2, +0x6a1b,0x6a1d,0x69fe,0x6a27,0x69f2,0x69ee,0x6a14,0x69f7, +0x69e7,0x6a40,0x6a08,0x69e6,0x69fb,0x6a0d,0x69fc,0x69eb, +0x6a09,0x6a04,0x6a18,0x6a25,0x6a0f,0x69f6,0x6a26,0x6a07, +0x69f4,0x6a16,0x6b51,0x6ba5,0x6ba3,0x6ba2,0x6ba6,0x6c01, +0x6c00,0x6bff,0x6c02,0x6f41,0x6f26,0x6f7e,0x6f87,0x6fc6, +0x6f92,0x6f8d,0x6f89,0x6f8c,0x6f62,0x6f4f,0x6f85,0x6f5a, +0x6f96,0x6f76,0x6f6c,0x6f82,0x6f55,0x6f72,0x6f52,0x6f50, +0x6f57,0x6f94,0x6f93,0x6f5d,0x6f00,0x6f61,0x6f6b,0x6f7d, +0x6f67,0x6f90,0x6f53,0x6f8b,0x6f69,0x6f7f,0x6f95,0x6f63, +0x6f77,0x6f6a,0x6f7b,0x71b2,0x71af,0x719b,0x71b0,0x71a0, +0x719a,0x71a9,0x71b5,0x719d,0x71a5,0x719e,0x71a4,0x71a1, +0x71aa,0x719c,0x71a7,0x71b3,0x7298,0x729a,0x7358,0x7352, +0x735e,0x735f,0x7360,0x735d,0x735b,0x7361,0x735a,0x7359, +0x7362,0x7487,0x7489,0x748a,0x7486,0x7481,0x747d,0x7485, +0x7488,0x747c,0x7479,0x7508,0x7507,0x757e,0x7625,0x761e, +0x7619,0x761d,0x761c,0x7623,0x761a,0x7628,0x761b,0x769c, +0x769d,0x769e,0x769b,0x778d,0x778f,0x7789,0x7788,0x78cd, +0x78bb,0x78cf,0x78cc,0x78d1,0x78ce,0x78d4,0x78c8,0x78c3, +0x78c4,0x78c9,0x799a,0x79a1,0x79a0,0x799c,0x79a2,0x799b, +0x6b76,0x7a39,0x7ab2,0x7ab4,0x7ab3,0x7bb7,0x7bcb,0x7bbe, +0x7bac,0x7bce,0x7baf,0x7bb9,0x7bca,0x7bb5,0x7cc5,0x7cc8, +0x7ccc,0x7ccb,0x7df7,0x7ddb,0x7dea,0x7de7,0x7dd7,0x7de1, +0x7e03,0x7dfa,0x7de6,0x7df6,0x7df1,0x7df0,0x7dee,0x7ddf, +0x7f76,0x7fac,0x7fb0,0x7fad,0x7fed,0x7feb,0x7fea,0x7fec, +0x7fe6,0x7fe8,0x8064,0x8067,0x81a3,0x819f,0x819e,0x8195, +0x81a2,0x8199,0x8197,0x8216,0x824f,0x8253,0x8252,0x8250, +0x824e,0x8251,0x8524,0x853b,0x850f,0x8500,0x8529,0x850e, +0x8509,0x850d,0x851f,0x850a,0x8527,0x851c,0x84fb,0x852b, +0x84fa,0x8508,0x850c,0x84f4,0x852a,0x84f2,0x8515,0x84f7, +0x84eb,0x84f3,0x84fc,0x8512,0x84ea,0x84e9,0x8516,0x84fe, +0x8528,0x851d,0x852e,0x8502,0x84fd,0x851e,0x84f6,0x8531, +0x8526,0x84e7,0x84e8,0x84f0,0x84ef,0x84f9,0x8518,0x8520, +0x8530,0x850b,0x8519,0x852f,0x8662,0x8756,0x8763,0x8764, +0x8777,0x87e1,0x8773,0x8758,0x8754,0x875b,0x8752,0x8761, +0x875a,0x8751,0x875e,0x876d,0x876a,0x8750,0x874e,0x875f, +0x875d,0x876f,0x876c,0x877a,0x876e,0x875c,0x8765,0x874f, +0x877b,0x8775,0x8762,0x8767,0x8769,0x885a,0x8905,0x890c, +0x8914,0x890b,0x8917,0x8918,0x8919,0x8906,0x8916,0x8911, +0x890e,0x8909,0x89a2,0x89a4,0x89a3,0x89ed,0x89f0,0x89ec, +0x8acf,0x8ac6,0x8ab8,0x8ad3,0x8ad1,0x8ad4,0x8ad5,0x8abb, +0x8ad7,0x8abe,0x8ac0,0x8ac5,0x8ad8,0x8ac3,0x8aba,0x8abd, +0x8ad9,0x8c3e,0x8c4d,0x8c8f,0x8ce5,0x8cdf,0x8cd9,0x8ce8, +0x8cda,0x8cdd,0x8ce7,0x8da0,0x8d9c,0x8da1,0x8d9b,0x8e20, +0x8e23,0x8e25,0x8e24,0x8e2e,0x8e15,0x8e1b,0x8e16,0x8e11, +0x8e19,0x8e26,0x8e27,0x8e14,0x8e12,0x8e18,0x8e13,0x8e1c, +0x8e17,0x8e1a,0x8f2c,0x8f24,0x8f18,0x8f1a,0x8f20,0x8f23, +0x8f16,0x8f17,0x9073,0x9070,0x906f,0x9067,0x906b,0x912f, +0x912b,0x9129,0x912a,0x9132,0x9126,0x912e,0x9185,0x9186, +0x918a,0x9181,0x9182,0x9184,0x9180,0x92d0,0x92c3,0x92c4, +0x92c0,0x92d9,0x92b6,0x92cf,0x92f1,0x92df,0x92d8,0x92e9, +0x92d7,0x92dd,0x92cc,0x92ef,0x92c2,0x92e8,0x92ca,0x92c8, +0x92ce,0x92e6,0x92cd,0x92d5,0x92c9,0x92e0,0x92de,0x92e7, +0x92d1,0x92d3,0x92b5,0x92e1,0x92c6,0x92b4,0x957c,0x95ac, +0x95ab,0x95ae,0x95b0,0x96a4,0x96a2,0x96d3,0x9705,0x9708, +0x9702,0x975a,0x978a,0x978e,0x9788,0x97d0,0x97cf,0x981e, +0x981d,0x9826,0x9829,0x9828,0x9820,0x981b,0x9827,0x98b2, +0x9908,0x98fa,0x9911,0x9914,0x9916,0x9917,0x9915,0x99dc, +0x99cd,0x99cf,0x99d3,0x99d4,0x99ce,0x99c9,0x99d6,0x99d8, +0x99cb,0x99d7,0x99cc,0x9ab3,0x9aec,0x9aeb,0x9af3,0x9af2, +0x9af1,0x9b46,0x9b43,0x9b67,0x9b74,0x9b71,0x9b66,0x9b76, +0x9b75,0x9b70,0x9b68,0x9b64,0x9b6c,0x9cfc,0x9cfa,0x9cfd, +0x9cff,0x9cf7,0x9d07,0x9d00,0x9cf9,0x9cfb,0x9d08,0x9d05, +0x9d04,0x9e83,0x9ed3,0x9f0f,0x9f10,0x511c,0x5113,0x5117, +0x511a,0x5111,0x51de,0x5334,0x53e1,0x5670,0x5660,0x566e, +0x5673,0x5666,0x5663,0x566d,0x5672,0x565e,0x5677,0x571c, +0x571b,0x58c8,0x58bd,0x58c9,0x58bf,0x58ba,0x58c2,0x58bc, +0x58c6,0x5b17,0x5b19,0x5b1b,0x5b21,0x5b14,0x5b13,0x5b10, +0x5b16,0x5b28,0x5b1a,0x5b20,0x5b1e,0x5bef,0x5dac,0x5db1, +0x5da9,0x5da7,0x5db5,0x5db0,0x5dae,0x5daa,0x5da8,0x5db2, +0x5dad,0x5daf,0x5db4,0x5e67,0x5e68,0x5e66,0x5e6f,0x5ee9, +0x5ee7,0x5ee6,0x5ee8,0x5ee5,0x5f4b,0x5fbc,0x619d,0x61a8, +0x6196,0x61c5,0x61b4,0x61c6,0x61c1,0x61cc,0x61ba,0x61bf, +0x61b8,0x618c,0x64d7,0x64d6,0x64d0,0x64cf,0x64c9,0x64bd, +0x6489,0x64c3,0x64db,0x64f3,0x64d9,0x6533,0x657f,0x657c, +0x65a2,0x66c8,0x66be,0x66c0,0x66ca,0x66cb,0x66cf,0x66bd, +0x66bb,0x66ba,0x66cc,0x6723,0x6a34,0x6a66,0x6a49,0x6a67, +0x6a32,0x6a68,0x6a3e,0x6a5d,0x6a6d,0x6a76,0x6a5b,0x6a51, +0x6a28,0x6a5a,0x6a3b,0x6a3f,0x6a41,0x6a6a,0x6a64,0x6a50, +0x6a4f,0x6a54,0x6a6f,0x6a69,0x6a60,0x6a3c,0x6a5e,0x6a56, +0x6a55,0x6a4d,0x6a4e,0x6a46,0x6b55,0x6b54,0x6b56,0x6ba7, +0x6baa,0x6bab,0x6bc8,0x6bc7,0x6c04,0x6c03,0x6c06,0x6fad, +0x6fcb,0x6fa3,0x6fc7,0x6fbc,0x6fce,0x6fc8,0x6f5e,0x6fc4, +0x6fbd,0x6f9e,0x6fca,0x6fa8,0x7004,0x6fa5,0x6fae,0x6fba, +0x6fac,0x6faa,0x6fcf,0x6fbf,0x6fb8,0x6fa2,0x6fc9,0x6fab, +0x6fcd,0x6faf,0x6fb2,0x6fb0,0x71c5,0x71c2,0x71bf,0x71b8, +0x71d6,0x71c0,0x71c1,0x71cb,0x71d4,0x71ca,0x71c7,0x71cf, +0x71bd,0x71d8,0x71bc,0x71c6,0x71da,0x71db,0x729d,0x729e, +0x7369,0x7366,0x7367,0x736c,0x7365,0x736b,0x736a,0x747f, +0x749a,0x74a0,0x7494,0x7492,0x7495,0x74a1,0x750b,0x7580, +0x762f,0x762d,0x7631,0x763d,0x7633,0x763c,0x7635,0x7632, +0x7630,0x76bb,0x76e6,0x779a,0x779d,0x77a1,0x779c,0x779b, +0x77a2,0x77a3,0x7795,0x7799,0x7797,0x78dd,0x78e9,0x78e5, +0x78ea,0x78de,0x78e3,0x78db,0x78e1,0x78e2,0x78ed,0x78df, +0x78e0,0x79a4,0x7a44,0x7a48,0x7a47,0x7ab6,0x7ab8,0x7ab5, +0x7ab1,0x7ab7,0x7bde,0x7be3,0x7be7,0x7bdd,0x7bd5,0x7be5, +0x7bda,0x7be8,0x7bf9,0x7bd4,0x7bea,0x7be2,0x7bdc,0x7beb, +0x7bd8,0x7bdf,0x7cd2,0x7cd4,0x7cd7,0x7cd0,0x7cd1,0x7e12, +0x7e21,0x7e17,0x7e0c,0x7e1f,0x7e20,0x7e13,0x7e0e,0x7e1c, +0x7e15,0x7e1a,0x7e22,0x7e0b,0x7e0f,0x7e16,0x7e0d,0x7e14, +0x7e25,0x7e24,0x7f43,0x7f7b,0x7f7c,0x7f7a,0x7fb1,0x7fef, +0x802a,0x8029,0x806c,0x81b1,0x81a6,0x81ae,0x81b9,0x81b5, +0x81ab,0x81b0,0x81ac,0x81b4,0x81b2,0x81b7,0x81a7,0x81f2, +0x8255,0x8256,0x8257,0x8556,0x8545,0x856b,0x854d,0x8553, +0x8561,0x8558,0x8540,0x8546,0x8564,0x8541,0x8562,0x8544, +0x8551,0x8547,0x8563,0x853e,0x855b,0x8571,0x854e,0x856e, +0x8575,0x8555,0x8567,0x8560,0x858c,0x8566,0x855d,0x8554, +0x8565,0x856c,0x8663,0x8665,0x8664,0x879b,0x878f,0x8797, +0x8793,0x8792,0x8788,0x8781,0x8796,0x8798,0x8779,0x8787, +0x87a3,0x8785,0x8790,0x8791,0x879d,0x8784,0x8794,0x879c, +0x879a,0x8789,0x891e,0x8926,0x8930,0x892d,0x892e,0x8927, +0x8931,0x8922,0x8929,0x8923,0x892f,0x892c,0x891f,0x89f1, +0x8ae0,0x8ae2,0x8af2,0x8af4,0x8af5,0x8add,0x8b14,0x8ae4, +0x8adf,0x8af0,0x8ac8,0x8ade,0x8ae1,0x8ae8,0x8aff,0x8aef, +0x8afb,0x8c91,0x8c92,0x8c90,0x8cf5,0x8cee,0x8cf1,0x8cf0, +0x8cf3,0x8d6c,0x8d6e,0x8da5,0x8da7,0x8e33,0x8e3e,0x8e38, +0x8e40,0x8e45,0x8e36,0x8e3c,0x8e3d,0x8e41,0x8e30,0x8e3f, +0x8ebd,0x8f36,0x8f2e,0x8f35,0x8f32,0x8f39,0x8f37,0x8f34, +0x9076,0x9079,0x907b,0x9086,0x90fa,0x9133,0x9135,0x9136, +0x9193,0x9190,0x9191,0x918d,0x918f,0x9327,0x931e,0x9308, +0x931f,0x9306,0x930f,0x937a,0x9338,0x933c,0x931b,0x9323, +0x9312,0x9301,0x9346,0x932d,0x930e,0x930d,0x92cb,0x931d, +0x92fa,0x9325,0x9313,0x92f9,0x92f7,0x9334,0x9302,0x9324, +0x92ff,0x9329,0x9339,0x9335,0x932a,0x9314,0x930c,0x930b, +0x92fe,0x9309,0x9300,0x92fb,0x9316,0x95bc,0x95cd,0x95be, +0x95b9,0x95ba,0x95b6,0x95bf,0x95b5,0x95bd,0x96a9,0x96d4, +0x970b,0x9712,0x9710,0x9799,0x9797,0x9794,0x97f0,0x97f8, +0x9835,0x982f,0x9832,0x9924,0x991f,0x9927,0x9929,0x999e, +0x99ee,0x99ec,0x99e5,0x99e4,0x99f0,0x99e3,0x99ea,0x99e9, +0x99e7,0x9ab9,0x9abf,0x9ab4,0x9abb,0x9af6,0x9afa,0x9af9, +0x9af7,0x9b33,0x9b80,0x9b85,0x9b87,0x9b7c,0x9b7e,0x9b7b, +0x9b82,0x9b93,0x9b92,0x9b90,0x9b7a,0x9b95,0x9b7d,0x9b88, +0x9d25,0x9d17,0x9d20,0x9d1e,0x9d14,0x9d29,0x9d1d,0x9d18, +0x9d22,0x9d10,0x9d19,0x9d1f,0x9e88,0x9e86,0x9e87,0x9eae, +0x9ead,0x9ed5,0x9ed6,0x9efa,0x9f12,0x9f3d,0x5126,0x5125, +0x5122,0x5124,0x5120,0x5129,0x52f4,0x5693,0x568c,0x568d, +0x5686,0x5684,0x5683,0x567e,0x5682,0x567f,0x5681,0x58d6, +0x58d4,0x58cf,0x58d2,0x5b2d,0x5b25,0x5b32,0x5b23,0x5b2c, +0x5b27,0x5b26,0x5b2f,0x5b2e,0x5b7b,0x5bf1,0x5bf2,0x5db7, +0x5e6c,0x5e6a,0x5fbe,0x5fbb,0x61c3,0x61b5,0x61bc,0x61e7, +0x61e0,0x61e5,0x61e4,0x61e8,0x61de,0x64ef,0x64e9,0x64e3, +0x64eb,0x64e4,0x64e8,0x6581,0x6580,0x65b6,0x65da,0x66d2, +0x6a8d,0x6a96,0x6a81,0x6aa5,0x6a89,0x6a9f,0x6a9b,0x6aa1, +0x6a9e,0x6a87,0x6a93,0x6a8e,0x6a95,0x6a83,0x6aa8,0x6aa4, +0x6a91,0x6a7f,0x6aa6,0x6a9a,0x6a85,0x6a8c,0x6a92,0x6b5b, +0x6bad,0x6c09,0x6fcc,0x6fa9,0x6ff4,0x6fd4,0x6fe3,0x6fdc, +0x6fed,0x6fe7,0x6fe6,0x6fde,0x6ff2,0x6fdd,0x6fe2,0x6fe8, +0x71e1,0x71f1,0x71e8,0x71f2,0x71e4,0x71f0,0x71e2,0x7373, +0x736e,0x736f,0x7497,0x74b2,0x74ab,0x7490,0x74aa,0x74ad, +0x74b1,0x74a5,0x74af,0x7510,0x7511,0x7512,0x750f,0x7584, +0x7643,0x7648,0x7649,0x7647,0x76a4,0x76e9,0x77b5,0x77ab, +0x77b2,0x77b7,0x77b6,0x77b4,0x77b1,0x77a8,0x77f0,0x78f3, +0x78fd,0x7902,0x78fb,0x78fc,0x78f2,0x7905,0x78f9,0x78fe, +0x7904,0x79ab,0x79a8,0x7a5c,0x7a5b,0x7a56,0x7a58,0x7a54, +0x7a5a,0x7abe,0x7ac0,0x7ac1,0x7c05,0x7c0f,0x7bf2,0x7c00, +0x7bff,0x7bfb,0x7c0e,0x7bf4,0x7c0b,0x7bf3,0x7c02,0x7c09, +0x7c03,0x7c01,0x7bf8,0x7bfd,0x7c06,0x7bf0,0x7bf1,0x7c10, +0x7c0a,0x7ce8,0x7e2d,0x7e3c,0x7e42,0x7e33,0x9848,0x7e38, +0x7e2a,0x7e49,0x7e40,0x7e47,0x7e29,0x7e4c,0x7e30,0x7e3b, +0x7e36,0x7e44,0x7e3a,0x7f45,0x7f7f,0x7f7e,0x7f7d,0x7ff4, +0x7ff2,0x802c,0x81bb,0x81c4,0x81cc,0x81ca,0x81c5,0x81c7, +0x81bc,0x81e9,0x825b,0x825a,0x825c,0x8583,0x8580,0x858f, +0x85a7,0x8595,0x85a0,0x858b,0x85a3,0x857b,0x85a4,0x859a, +0x859e,0x8577,0x857c,0x8589,0x85a1,0x857a,0x8578,0x8557, +0x858e,0x8596,0x8586,0x858d,0x8599,0x859d,0x8581,0x85a2, +0x8582,0x8588,0x8585,0x8579,0x8576,0x8598,0x8590,0x859f, +0x8668,0x87be,0x87aa,0x87ad,0x87c5,0x87b0,0x87ac,0x87b9, +0x87b5,0x87bc,0x87ae,0x87c9,0x87c3,0x87c2,0x87cc,0x87b7, +0x87af,0x87c4,0x87ca,0x87b4,0x87b6,0x87bf,0x87b8,0x87bd, +0x87de,0x87b2,0x8935,0x8933,0x893c,0x893e,0x8941,0x8952, +0x8937,0x8942,0x89ad,0x89af,0x89ae,0x89f2,0x89f3,0x8b1e, +0x8b18,0x8b16,0x8b11,0x8b05,0x8b0b,0x8b22,0x8b0f,0x8b12, +0x8b15,0x8b07,0x8b0d,0x8b08,0x8b06,0x8b1c,0x8b13,0x8b1a, +0x8c4f,0x8c70,0x8c72,0x8c71,0x8c6f,0x8c95,0x8c94,0x8cf9, +0x8d6f,0x8e4e,0x8e4d,0x8e53,0x8e50,0x8e4c,0x8e47,0x8f43, +0x8f40,0x9085,0x907e,0x9138,0x919a,0x91a2,0x919b,0x9199, +0x919f,0x91a1,0x919d,0x91a0,0x93a1,0x9383,0x93af,0x9364, +0x9356,0x9347,0x937c,0x9358,0x935c,0x9376,0x9349,0x9350, +0x9351,0x9360,0x936d,0x938f,0x934c,0x936a,0x9379,0x9357, +0x9355,0x9352,0x934f,0x9371,0x9377,0x937b,0x9361,0x935e, +0x9363,0x9367,0x9380,0x934e,0x9359,0x95c7,0x95c0,0x95c9, +0x95c3,0x95c5,0x95b7,0x96ae,0x96b0,0x96ac,0x9720,0x971f, +0x9718,0x971d,0x9719,0x979a,0x97a1,0x979c,0x979e,0x979d, +0x97d5,0x97d4,0x97f1,0x9841,0x9844,0x984a,0x9849,0x9845, +0x9843,0x9925,0x992b,0x992c,0x992a,0x9933,0x9932,0x992f, +0x992d,0x9931,0x9930,0x9998,0x99a3,0x99a1,0x9a02,0x99fa, +0x99f4,0x99f7,0x99f9,0x99f8,0x99f6,0x99fb,0x99fd,0x99fe, +0x99fc,0x9a03,0x9abe,0x9afe,0x9afd,0x9b01,0x9afc,0x9b48, +0x9b9a,0x9ba8,0x9b9e,0x9b9b,0x9ba6,0x9ba1,0x9ba5,0x9ba4, +0x9b86,0x9ba2,0x9ba0,0x9baf,0x9d33,0x9d41,0x9d67,0x9d36, +0x9d2e,0x9d2f,0x9d31,0x9d38,0x9d30,0x9d45,0x9d42,0x9d43, +0x9d3e,0x9d37,0x9d40,0x9d3d,0x7ff5,0x9d2d,0x9e8a,0x9e89, +0x9e8d,0x9eb0,0x9ec8,0x9eda,0x9efb,0x9eff,0x9f24,0x9f23, +0x9f22,0x9f54,0x9fa0,0x5131,0x512d,0x512e,0x5698,0x569c, +0x5697,0x569a,0x569d,0x5699,0x5970,0x5b3c,0x5c69,0x5c6a, +0x5dc0,0x5e6d,0x5e6e,0x61d8,0x61df,0x61ed,0x61ee,0x61f1, +0x61ea,0x61f0,0x61eb,0x61d6,0x61e9,0x64ff,0x6504,0x64fd, +0x64f8,0x6501,0x6503,0x64fc,0x6594,0x65db,0x66da,0x66db, +0x66d8,0x6ac5,0x6ab9,0x6abd,0x6ae1,0x6ac6,0x6aba,0x6ab6, +0x6ab7,0x6ac7,0x6ab4,0x6aad,0x6b5e,0x6bc9,0x6c0b,0x7007, +0x700c,0x700d,0x7001,0x7005,0x7014,0x700e,0x6fff,0x7000, +0x6ffb,0x7026,0x6ffc,0x6ff7,0x700a,0x7201,0x71ff,0x71f9, +0x7203,0x71fd,0x7376,0x74b8,0x74c0,0x74b5,0x74c1,0x74be, +0x74b6,0x74bb,0x74c2,0x7514,0x7513,0x765c,0x7664,0x7659, +0x7650,0x7653,0x7657,0x765a,0x76a6,0x76bd,0x76ec,0x77c2, +0x77ba,0x78ff,0x790c,0x7913,0x7914,0x7909,0x7910,0x7912, +0x7911,0x79ad,0x79ac,0x7a5f,0x7c1c,0x7c29,0x7c19,0x7c20, +0x7c1f,0x7c2d,0x7c1d,0x7c26,0x7c28,0x7c22,0x7c25,0x7c30, +0x7e5c,0x7e50,0x7e56,0x7e63,0x7e58,0x7e62,0x7e5f,0x7e51, +0x7e60,0x7e57,0x7e53,0x7fb5,0x7fb3,0x7ff7,0x7ff8,0x8075, +0x81d1,0x81d2,0x81d0,0x825f,0x825e,0x85b4,0x85c6,0x85c0, +0x85c3,0x85c2,0x85b3,0x85b5,0x85bd,0x85c7,0x85c4,0x85bf, +0x85cb,0x85ce,0x85c8,0x85c5,0x85b1,0x85b6,0x85d2,0x8624, +0x85b8,0x85b7,0x85be,0x8669,0x87e7,0x87e6,0x87e2,0x87db, +0x87eb,0x87ea,0x87e5,0x87df,0x87f3,0x87e4,0x87d4,0x87dc, +0x87d3,0x87ed,0x87d8,0x87e3,0x87a4,0x87d7,0x87d9,0x8801, +0x87f4,0x87e8,0x87dd,0x8953,0x894b,0x894f,0x894c,0x8946, +0x8950,0x8951,0x8949,0x8b2a,0x8b27,0x8b23,0x8b33,0x8b30, +0x8b35,0x8b47,0x8b2f,0x8b3c,0x8b3e,0x8b31,0x8b25,0x8b37, +0x8b26,0x8b36,0x8b2e,0x8b24,0x8b3b,0x8b3d,0x8b3a,0x8c42, +0x8c75,0x8c99,0x8c98,0x8c97,0x8cfe,0x8d04,0x8d02,0x8d00, +0x8e5c,0x8e62,0x8e60,0x8e57,0x8e56,0x8e5e,0x8e65,0x8e67, +0x8e5b,0x8e5a,0x8e61,0x8e5d,0x8e69,0x8e54,0x8f46,0x8f47, +0x8f48,0x8f4b,0x9128,0x913a,0x913b,0x913e,0x91a8,0x91a5, +0x91a7,0x91af,0x91aa,0x93b5,0x938c,0x9392,0x93b7,0x939b, +0x939d,0x9389,0x93a7,0x938e,0x93aa,0x939e,0x93a6,0x9395, +0x9388,0x9399,0x939f,0x938d,0x93b1,0x9391,0x93b2,0x93a4, +0x93a8,0x93b4,0x93a3,0x93a5,0x95d2,0x95d3,0x95d1,0x96b3, +0x96d7,0x96da,0x5dc2,0x96df,0x96d8,0x96dd,0x9723,0x9722, +0x9725,0x97ac,0x97ae,0x97a8,0x97ab,0x97a4,0x97aa,0x97a2, +0x97a5,0x97d7,0x97d9,0x97d6,0x97d8,0x97fa,0x9850,0x9851, +0x9852,0x98b8,0x9941,0x993c,0x993a,0x9a0f,0x9a0b,0x9a09, +0x9a0d,0x9a04,0x9a11,0x9a0a,0x9a05,0x9a07,0x9a06,0x9ac0, +0x9adc,0x9b08,0x9b04,0x9b05,0x9b29,0x9b35,0x9b4a,0x9b4c, +0x9b4b,0x9bc7,0x9bc6,0x9bc3,0x9bbf,0x9bc1,0x9bb5,0x9bb8, +0x9bd3,0x9bb6,0x9bc4,0x9bb9,0x9bbd,0x9d5c,0x9d53,0x9d4f, +0x9d4a,0x9d5b,0x9d4b,0x9d59,0x9d56,0x9d4c,0x9d57,0x9d52, +0x9d54,0x9d5f,0x9d58,0x9d5a,0x9e8e,0x9e8c,0x9edf,0x9f01, +0x9f00,0x9f16,0x9f25,0x9f2b,0x9f2a,0x9f29,0x9f28,0x9f4c, +0x9f55,0x5134,0x5135,0x5296,0x52f7,0x53b4,0x56ab,0x56ad, +0x56a6,0x56a7,0x56aa,0x56ac,0x58da,0x58dd,0x58db,0x5912, +0x5b3d,0x5b3e,0x5b3f,0x5dc3,0x5e70,0x5fbf,0x61fb,0x6507, +0x6510,0x650d,0x6509,0x650c,0x650e,0x6584,0x65de,0x65dd, +0x66de,0x6ae7,0x6ae0,0x6acc,0x6ad1,0x6ad9,0x6acb,0x6adf, +0x6adc,0x6ad0,0x6aeb,0x6acf,0x6acd,0x6ade,0x6b60,0x6bb0, +0x6c0c,0x7019,0x7027,0x7020,0x7016,0x702b,0x7021,0x7022, +0x7023,0x7029,0x7017,0x7024,0x701c,0x702a,0x720c,0x720a, +0x7207,0x7202,0x7205,0x72a5,0x72a6,0x72a4,0x72a3,0x72a1, +0x74cb,0x74c5,0x74b7,0x74c3,0x7516,0x7660,0x77c9,0x77ca, +0x77c4,0x77f1,0x791d,0x791b,0x7921,0x791c,0x7917,0x791e, +0x79b0,0x7a67,0x7a68,0x7c33,0x7c3c,0x7c39,0x7c2c,0x7c3b, +0x7cec,0x7cea,0x7e76,0x7e75,0x7e78,0x7e70,0x7e77,0x7e6f, +0x7e7a,0x7e72,0x7e74,0x7e68,0x7f4b,0x7f4a,0x7f83,0x7f86, +0x7fb7,0x7ffd,0x7ffe,0x8078,0x81d7,0x81d5,0x8264,0x8261, +0x8263,0x85eb,0x85f1,0x85ed,0x85d9,0x85e1,0x85e8,0x85da, +0x85d7,0x85ec,0x85f2,0x85f8,0x85d8,0x85df,0x85e3,0x85dc, +0x85d1,0x85f0,0x85e6,0x85ef,0x85de,0x85e2,0x8800,0x87fa, +0x8803,0x87f6,0x87f7,0x8809,0x880c,0x880b,0x8806,0x87fc, +0x8808,0x87ff,0x880a,0x8802,0x8962,0x895a,0x895b,0x8957, +0x8961,0x895c,0x8958,0x895d,0x8959,0x8988,0x89b7,0x89b6, +0x89f6,0x8b50,0x8b48,0x8b4a,0x8b40,0x8b53,0x8b56,0x8b54, +0x8b4b,0x8b55,0x8b51,0x8b42,0x8b52,0x8b57,0x8c43,0x8c77, +0x8c76,0x8c9a,0x8d06,0x8d07,0x8d09,0x8dac,0x8daa,0x8dad, +0x8dab,0x8e6d,0x8e78,0x8e73,0x8e6a,0x8e6f,0x8e7b,0x8ec2, +0x8f52,0x8f51,0x8f4f,0x8f50,0x8f53,0x8fb4,0x9140,0x913f, +0x91b0,0x91ad,0x93de,0x93c7,0x93cf,0x93c2,0x93da,0x93d0, +0x93f9,0x93ec,0x93cc,0x93d9,0x93a9,0x93e6,0x93ca,0x93d4, +0x93ee,0x93e3,0x93d5,0x93c4,0x93ce,0x93c0,0x93d2,0x93e7, +0x957d,0x95da,0x95db,0x96e1,0x9729,0x972b,0x972c,0x9728, +0x9726,0x97b3,0x97b7,0x97b6,0x97dd,0x97de,0x97df,0x985c, +0x9859,0x985d,0x9857,0x98bf,0x98bd,0x98bb,0x98be,0x9948, +0x9947,0x9943,0x99a6,0x99a7,0x9a1a,0x9a15,0x9a25,0x9a1d, +0x9a24,0x9a1b,0x9a22,0x9a20,0x9a27,0x9a23,0x9a1e,0x9a1c, +0x9a14,0x9ac2,0x9b0b,0x9b0a,0x9b0e,0x9b0c,0x9b37,0x9bea, +0x9beb,0x9be0,0x9bde,0x9be4,0x9be6,0x9be2,0x9bf0,0x9bd4, +0x9bd7,0x9bec,0x9bdc,0x9bd9,0x9be5,0x9bd5,0x9be1,0x9bda, +0x9d77,0x9d81,0x9d8a,0x9d84,0x9d88,0x9d71,0x9d80,0x9d78, +0x9d86,0x9d8b,0x9d8c,0x9d7d,0x9d6b,0x9d74,0x9d75,0x9d70, +0x9d69,0x9d85,0x9d73,0x9d7b,0x9d82,0x9d6f,0x9d79,0x9d7f, +0x9d87,0x9d68,0x9e94,0x9e91,0x9ec0,0x9efc,0x9f2d,0x9f40, +0x9f41,0x9f4d,0x9f56,0x9f57,0x9f58,0x5337,0x56b2,0x56b5, +0x56b3,0x58e3,0x5b45,0x5dc6,0x5dc7,0x5eee,0x5eef,0x5fc0, +0x5fc1,0x61f9,0x6517,0x6516,0x6515,0x6513,0x65df,0x66e8, +0x66e3,0x66e4,0x6af3,0x6af0,0x6aea,0x6ae8,0x6af9,0x6af1, +0x6aee,0x6aef,0x703c,0x7035,0x702f,0x7037,0x7034,0x7031, +0x7042,0x7038,0x703f,0x703a,0x7039,0x7040,0x703b,0x7033, +0x7041,0x7213,0x7214,0x72a8,0x737d,0x737c,0x74ba,0x76ab, +0x76aa,0x76be,0x76ed,0x77cc,0x77ce,0x77cf,0x77cd,0x77f2, +0x7925,0x7923,0x7927,0x7928,0x7924,0x7929,0x79b2,0x7a6e, +0x7a6c,0x7a6d,0x7af7,0x7c49,0x7c48,0x7c4a,0x7c47,0x7c45, +0x7cee,0x7e7b,0x7e7e,0x7e81,0x7e80,0x7fba,0x7fff,0x8079, +0x81db,0x81d9,0x820b,0x8268,0x8269,0x8622,0x85ff,0x8601, +0x85fe,0x861b,0x8600,0x85f6,0x8604,0x8609,0x8605,0x860c, +0x85fd,0x8819,0x8810,0x8811,0x8817,0x8813,0x8816,0x8963, +0x8966,0x89b9,0x89f7,0x8b60,0x8b6a,0x8b5d,0x8b68,0x8b63, +0x8b65,0x8b67,0x8b6d,0x8dae,0x8e86,0x8e88,0x8e84,0x8f59, +0x8f56,0x8f57,0x8f55,0x8f58,0x8f5a,0x908d,0x9143,0x9141, +0x91b7,0x91b5,0x91b2,0x91b3,0x940b,0x9413,0x93fb,0x9420, +0x940f,0x9414,0x93fe,0x9415,0x9410,0x9428,0x9419,0x940d, +0x93f5,0x9400,0x93f7,0x9407,0x940e,0x9416,0x9412,0x93fa, +0x9409,0x93f8,0x940a,0x93ff,0x93fc,0x940c,0x93f6,0x9411, +0x9406,0x95de,0x95e0,0x95df,0x972e,0x972f,0x97b9,0x97bb, +0x97fd,0x97fe,0x9860,0x9862,0x9863,0x985f,0x98c1,0x98c2, +0x9950,0x994e,0x9959,0x994c,0x994b,0x9953,0x9a32,0x9a34, +0x9a31,0x9a2c,0x9a2a,0x9a36,0x9a29,0x9a2e,0x9a38,0x9a2d, +0x9ac7,0x9aca,0x9ac6,0x9b10,0x9b12,0x9b11,0x9c0b,0x9c08, +0x9bf7,0x9c05,0x9c12,0x9bf8,0x9c40,0x9c07,0x9c0e,0x9c06, +0x9c17,0x9c14,0x9c09,0x9d9f,0x9d99,0x9da4,0x9d9d,0x9d92, +0x9d98,0x9d90,0x9d9b,0x9da0,0x9d94,0x9d9c,0x9daa,0x9d97, +0x9da1,0x9d9a,0x9da2,0x9da8,0x9d9e,0x9da3,0x9dbf,0x9da9, +0x9d96,0x9da6,0x9da7,0x9e99,0x9e9b,0x9e9a,0x9ee5,0x9ee4, +0x9ee7,0x9ee6,0x9f30,0x9f2e,0x9f5b,0x9f60,0x9f5e,0x9f5d, +0x9f59,0x9f91,0x513a,0x5139,0x5298,0x5297,0x56c3,0x56bd, +0x56be,0x5b48,0x5b47,0x5dcb,0x5dcf,0x5ef1,0x61fd,0x651b, +0x6b02,0x6afc,0x6b03,0x6af8,0x6b00,0x7043,0x7044,0x704a, +0x7048,0x7049,0x7045,0x7046,0x721d,0x721a,0x7219,0x737e, +0x7517,0x766a,0x77d0,0x792d,0x7931,0x792f,0x7c54,0x7c53, +0x7cf2,0x7e8a,0x7e87,0x7e88,0x7e8b,0x7e86,0x7e8d,0x7f4d, +0x7fbb,0x8030,0x81dd,0x8618,0x862a,0x8626,0x861f,0x8623, +0x861c,0x8619,0x8627,0x862e,0x8621,0x8620,0x8629,0x861e, +0x8625,0x8829,0x881d,0x881b,0x8820,0x8824,0x881c,0x882b, +0x884a,0x896d,0x8969,0x896e,0x896b,0x89fa,0x8b79,0x8b78, +0x8b45,0x8b7a,0x8b7b,0x8d10,0x8d14,0x8daf,0x8e8e,0x8e8c, +0x8f5e,0x8f5b,0x8f5d,0x9146,0x9144,0x9145,0x91b9,0x943f, +0x943b,0x9436,0x9429,0x943d,0x943c,0x9430,0x9439,0x942a, +0x9437,0x942c,0x9440,0x9431,0x95e5,0x95e4,0x95e3,0x9735, +0x973a,0x97bf,0x97e1,0x9864,0x98c9,0x98c6,0x98c0,0x9958, +0x9956,0x9a39,0x9a3d,0x9a46,0x9a44,0x9a42,0x9a41,0x9a3a, +0x9a3f,0x9acd,0x9b15,0x9b17,0x9b18,0x9b16,0x9b3a,0x9b52, +0x9c2b,0x9c1d,0x9c1c,0x9c2c,0x9c23,0x9c28,0x9c29,0x9c24, +0x9c21,0x9db7,0x9db6,0x9dbc,0x9dc1,0x9dc7,0x9dca,0x9dcf, +0x9dbe,0x9dc5,0x9dc3,0x9dbb,0x9db5,0x9dce,0x9db9,0x9dba, +0x9dac,0x9dc8,0x9db1,0x9dad,0x9dcc,0x9db3,0x9dcd,0x9db2, +0x9e7a,0x9e9c,0x9eeb,0x9eee,0x9eed,0x9f1b,0x9f18,0x9f1a, +0x9f31,0x9f4e,0x9f65,0x9f64,0x9f92,0x4eb9,0x56c6,0x56c5, +0x56cb,0x5971,0x5b4b,0x5b4c,0x5dd5,0x5dd1,0x5ef2,0x6521, +0x6520,0x6526,0x6522,0x6b0b,0x6b08,0x6b09,0x6c0d,0x7055, +0x7056,0x7057,0x7052,0x721e,0x721f,0x72a9,0x737f,0x74d8, +0x74d5,0x74d9,0x74d7,0x766d,0x76ad,0x7935,0x79b4,0x7a70, +0x7a71,0x7c57,0x7c5c,0x7c59,0x7c5b,0x7c5a,0x7cf4,0x7cf1, +0x7e91,0x7f4f,0x7f87,0x81de,0x826b,0x8634,0x8635,0x8633, +0x862c,0x8632,0x8636,0x882c,0x8828,0x8826,0x882a,0x8825, +0x8971,0x89bf,0x89be,0x89fb,0x8b7e,0x8b84,0x8b82,0x8b86, +0x8b85,0x8b7f,0x8d15,0x8e95,0x8e94,0x8e9a,0x8e92,0x8e90, +0x8e96,0x8e97,0x8f60,0x8f62,0x9147,0x944c,0x9450,0x944a, +0x944b,0x944f,0x9447,0x9445,0x9448,0x9449,0x9446,0x973f, +0x97e3,0x986a,0x9869,0x98cb,0x9954,0x995b,0x9a4e,0x9a53, +0x9a54,0x9a4c,0x9a4f,0x9a48,0x9a4a,0x9a49,0x9a52,0x9a50, +0x9ad0,0x9b19,0x9b2b,0x9b3b,0x9b56,0x9b55,0x9c46,0x9c48, +0x9c3f,0x9c44,0x9c39,0x9c33,0x9c41,0x9c3c,0x9c37,0x9c34, +0x9c32,0x9c3d,0x9c36,0x9ddb,0x9dd2,0x9dde,0x9dda,0x9dcb, +0x9dd0,0x9ddc,0x9dd1,0x9ddf,0x9de9,0x9dd9,0x9dd8,0x9dd6, +0x9df5,0x9dd5,0x9ddd,0x9eb6,0x9ef0,0x9f35,0x9f33,0x9f32, +0x9f42,0x9f6b,0x9f95,0x9fa2,0x513d,0x5299,0x58e8,0x58e7, +0x5972,0x5b4d,0x5dd8,0x882f,0x5f4f,0x6201,0x6203,0x6204, +0x6529,0x6525,0x6596,0x66eb,0x6b11,0x6b12,0x6b0f,0x6bca, +0x705b,0x705a,0x7222,0x7382,0x7381,0x7383,0x7670,0x77d4, +0x7c67,0x7c66,0x7e95,0x826c,0x863a,0x8640,0x8639,0x863c, +0x8631,0x863b,0x863e,0x8830,0x8832,0x882e,0x8833,0x8976, +0x8974,0x8973,0x89fe,0x8b8c,0x8b8e,0x8b8b,0x8b88,0x8c45, +0x8d19,0x8e98,0x8f64,0x8f63,0x91bc,0x9462,0x9455,0x945d, +0x9457,0x945e,0x97c4,0x97c5,0x9800,0x9a56,0x9a59,0x9b1e, +0x9b1f,0x9b20,0x9c52,0x9c58,0x9c50,0x9c4a,0x9c4d,0x9c4b, +0x9c55,0x9c59,0x9c4c,0x9c4e,0x9dfb,0x9df7,0x9def,0x9de3, +0x9deb,0x9df8,0x9de4,0x9df6,0x9de1,0x9dee,0x9de6,0x9df2, +0x9df0,0x9de2,0x9dec,0x9df4,0x9df3,0x9de8,0x9ded,0x9ec2, +0x9ed0,0x9ef2,0x9ef3,0x9f06,0x9f1c,0x9f38,0x9f37,0x9f36, +0x9f43,0x9f4f,0x9f71,0x9f70,0x9f6e,0x9f6f,0x56d3,0x56cd, +0x5b4e,0x5c6d,0x652d,0x66ed,0x66ee,0x6b13,0x705f,0x7061, +0x705d,0x7060,0x7223,0x74db,0x74e5,0x77d5,0x7938,0x79b7, +0x79b6,0x7c6a,0x7e97,0x7f89,0x826d,0x8643,0x8838,0x8837, +0x8835,0x884b,0x8b94,0x8b95,0x8e9e,0x8e9f,0x8ea0,0x8e9d, +0x91be,0x91bd,0x91c2,0x946b,0x9468,0x9469,0x96e5,0x9746, +0x9743,0x9747,0x97c7,0x97e5,0x9a5e,0x9ad5,0x9b59,0x9c63, +0x9c67,0x9c66,0x9c62,0x9c5e,0x9c60,0x9e02,0x9dfe,0x9e07, +0x9e03,0x9e06,0x9e05,0x9e00,0x9e01,0x9e09,0x9dff,0x9dfd, +0x9e04,0x9ea0,0x9f1e,0x9f46,0x9f74,0x9f75,0x9f76,0x56d4, +0x652e,0x65b8,0x6b18,0x6b19,0x6b17,0x6b1a,0x7062,0x7226, +0x72aa,0x77d8,0x77d9,0x7939,0x7c69,0x7c6b,0x7cf6,0x7e9a, +0x7e98,0x7e9b,0x7e99,0x81e0,0x81e1,0x8646,0x8647,0x8648, +0x8979,0x897a,0x897c,0x897b,0x89ff,0x8b98,0x8b99,0x8ea5, +0x8ea4,0x8ea3,0x946e,0x946d,0x946f,0x9471,0x9473,0x9749, +0x9872,0x995f,0x9c68,0x9c6e,0x9c6d,0x9e0b,0x9e0d,0x9e10, +0x9e0f,0x9e12,0x9e11,0x9ea1,0x9ef5,0x9f09,0x9f47,0x9f78, +0x9f7b,0x9f7a,0x9f79,0x571e,0x7066,0x7c6f,0x883c,0x8db2, +0x8ea6,0x91c3,0x9474,0x9478,0x9476,0x9475,0x9a60,0x9c74, +0x9c73,0x9c71,0x9c75,0x9e14,0x9e13,0x9ef6,0x9f0a,0x9fa4, +0x7068,0x7065,0x7cf7,0x866a,0x883e,0x883d,0x883f,0x8b9e, +0x8c9c,0x8ea9,0x8ec9,0x974b,0x9873,0x9874,0x98cc,0x9961, +0x99ab,0x9a64,0x9a66,0x9a67,0x9b24,0x9e15,0x9e17,0x9f48, +0x6207,0x6b1e,0x7227,0x864c,0x8ea8,0x9482,0x9480,0x9481, +0x9a69,0x9a68,0x9b2e,0x9e19,0x7229,0x864b,0x8b9f,0x9483, +0x9c79,0x9eb7,0x7675,0x9a6b,0x9c7a,0x9e1d,0x7069,0x706a, +0x9ea4,0x9f7e,0x9f49,0x9f98,0x7881,0x92b9,0x88cf,0x58bb, +0x6052,0x7ca7,0x5afa,0x2554,0x2566,0x2557,0x2560,0x256c, +0x2563,0x255a,0x2569,0x255d,0x2552,0x2564,0x2555,0x255e, +0x256a,0x2561,0x2558,0x2567,0x255b,0x2553,0x2565,0x2556, +0x255f,0x256b,0x2562,0x2559,0x2568,0x255c,0x2551,0x2550, +0x256d,0x256e,0x2570,0x256f,0x2593}; + +static const int big5_ucs_table_size = sizeof(big5_ucs_table)/sizeof(unsigned short); + +/* UCS -> Big5 */ +static const unsigned short ucs_a1_big5_table[] = { +/* 0x0000 */ +0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, +0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f, +0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, +0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f, +0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, +0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f, +0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, +0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f, +0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, +0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f, +0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, +0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f, +0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, +0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f, +0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, +0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1b1, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1c2, +0xa258,0xa1d3,0x0000,0x0000,0x0000,0x0000,0x0000,0xa150, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1d1, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1d2, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x0100 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x0200 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa3be, +0x0000,0xa3bc,0xa3bd,0xa3bf,0x0000,0xa1c5,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa3bb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x0300 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa344,0xa345,0xa346,0xa347,0xa348,0xa349,0xa34a, +0xa34b,0xa34c,0xa34d,0xa34e,0xa34f,0xa350,0xa351,0xa352, +0xa353,0xa354,0x0000,0xa355,0xa356,0xa357,0xa358,0xa359, +0xa35a,0xa35b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa35c,0xa35d,0xa35e,0xa35f,0xa360,0xa361,0xa362, +0xa363,0xa364,0xa365,0xa366,0xa367,0xa368,0xa369,0xa36a, +0xa36b,0xa36c,0x0000,0xa36d,0xa36e,0xa36f,0xa370,0xa371, +0xa372,0xa373}; + +static const int ucs_a1_big5_table_min = 0x0000; +static const int ucs_a1_big5_table_max = 0x0000 + (sizeof (ucs_a1_big5_table) / sizeof (unsigned short)); + + +static const unsigned short ucs_a2_big5_table[] = { +/* 0x2000 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xa156,0xa158,0x0000,0x0000,0x0000, +0xa1a5,0xa1a6,0x0000,0x0000,0xa1a7,0xa1a8,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xa14c,0xa14b,0xa145, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xa1ac,0x0000,0x0000,0xa1ab,0x0000,0x0000, +0x0000,0x0000,0x0000,0xa1b0,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa3e1,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x2100 */ +0x0000,0x0000,0x0000,0xa24a,0x0000,0xa1c1,0x0000,0x0000, +0x0000,0xa24b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa2b9,0xa2ba,0xa2bb,0xa2bc,0xa2bd,0xa2be,0xa2bf,0xa2c0, +0xa2c1,0xa2c2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa1f6,0xa1f4,0xa1f7,0xa1f5,0x0000,0x0000,0xa1f8,0xa1f9, +0xa1fb,0xa1fa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x2200 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xa241,0x0000,0x0000, +0x0000,0x0000,0xa1d4,0x0000,0x0000,0x0000,0xa1db,0xa1e8, +0xa1e7,0x0000,0x0000,0xa1fd,0x0000,0xa1fc,0x0000,0x0000, +0x0000,0xa1e4,0xa1e5,0xa1ec,0x0000,0x0000,0xa1ed,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa1ef,0xa1ee,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xa1dc,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa1da,0xa1dd,0x0000,0x0000,0x0000,0x0000,0xa1d8,0xa1d9, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xa1f2,0x0000,0x0000, +0x0000,0xa1f3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xa1e6,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1e9, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x2300 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x2400 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa277,0x0000,0xa278,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa27a,0x0000,0x0000,0x0000, +0xa27b,0x0000,0x0000,0x0000,0xa27c,0x0000,0x0000,0x0000, +0xa27d,0x0000,0x0000,0x0000,0xa275,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa274,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa273,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa272,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa271,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf9f9,0xf9f8,0xf9e6,0xf9ef,0xf9dd,0xf9e8,0xf9f1,0xf9df, +0xf9ec,0xf9f5,0xf9e3,0xf9ee,0xf9f7,0xf9e5,0xf9e9,0xf9f2, +0xf9e0,0xf9eb,0xf9f4,0xf9e2,0xf9e7,0xf9f0,0xf9de,0xf9ed, +0xf9f6,0xf9e4,0xf9ea,0xf9f3,0xf9e1,0xf9fa,0xf9fb,0xf9fd, +0xf9fc,0xa2ac,0xa2ad,0xa2ae,0xa15a,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa262,0xa263,0xa264,0xa265,0xa266,0xa267,0xa268, +0xa269,0xa270,0xa26f,0xa26e,0xa26d,0xa26c,0xa26b,0xa26a, +0x0000,0x0000,0x0000,0xf9fe,0xa276,0xa279,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa1bd,0xa1bc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xa1b6,0xa1b5,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa1bf,0xa1be,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1bb,0xa1ba, +0x0000,0x0000,0x0000,0xa1b3,0x0000,0x0000,0xa1b7,0xa1b4, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xa2a8,0xa2a9,0xa2ab,0xa2aa,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x2600 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0xa1b9,0xa1b8,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa1f0,0x0000,0xa1f1}; + +static const int ucs_a2_big5_table_min = 0x2000; +static const int ucs_a2_big5_table_max = 0x2000 + (sizeof (ucs_a2_big5_table) / sizeof (unsigned short)); + + +static const unsigned short ucs_a3_big5_table[] = { +/* 0x2f00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa140,0xa142,0xa143,0xa1b2,0x0000,0x0000,0x0000,0x0000, +0xa171,0xa172,0xa16d,0xa16e,0xa175,0xa176,0xa179,0xa17a, +0xa169,0xa16a,0xa245,0x0000,0xa165,0xa166,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xa1a9,0xa1aa,0x0000, +0x0000,0xa2c3,0xa2c4,0xa2c5,0xa2c6,0xa2c7,0xa2c8,0xa2c9, +0xa2ca,0xa2cb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x3100 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0xa374,0xa375,0xa376, +0xa377,0xa378,0xa379,0xa37a,0xa37b,0xa37c,0xa37d,0xa37e, +0xa3a1,0xa3a2,0xa3a3,0xa3a4,0xa3a5,0xa3a6,0xa3a7,0xa3a8, +0xa3a9,0xa3aa,0xa3ab,0xa3ac,0xa3ad,0xa3ae,0xa3af,0xa3b0, +0xa3b1,0xa3b2,0xa3b3,0xa3b4,0xa3b5,0xa3b6,0xa3b7,0xa3b8, +0xa3b9,0xa3ba,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x3200 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xa1c0,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x3300 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa255,0xa256, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa250,0xa251,0xa252,0x0000, +0x0000,0xa254,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa257,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa253,0x0000, +0x0000,0xa1eb,0xa1ea,0x0000,0x0000,0xa24f}; + +static const int ucs_a3_big5_table_min = 0x2f00; +static const int ucs_a3_big5_table_max = 0x2f00 + (sizeof (ucs_a3_big5_table) / sizeof (unsigned short)); + +static const unsigned short ucs_i_big5_table[] = { +/* 0x4d00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa440,0xa442,0x0000,0xa443,0x0000,0x0000,0x0000,0xc945, +0xa456,0xa454,0xa457,0xa455,0xc946,0xa4a3,0xc94f,0xc94d, +0xa4a2,0xa4a1,0x0000,0x0000,0xa542,0xa541,0xa540,0x0000, +0xa543,0xa4fe,0x0000,0x0000,0x0000,0x0000,0xa5e0,0xa5e1, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8c3,0x0000, +0x0000,0x0000,0x0000,0xa458,0x0000,0xa4a4,0xc950,0x0000, +0xa4a5,0xc963,0xa6ea,0xcbb1,0x0000,0x0000,0x0000,0x0000, +0xa459,0xa4a6,0x0000,0xa544,0xc964,0x0000,0x0000,0x0000, +0x0000,0x0000,0xc940,0xa444,0x0000,0xa45b,0x0000,0xc947, +0xa45c,0x0000,0x0000,0xa4a7,0x0000,0xa545,0xa547,0xa546, +0x0000,0x0000,0xa5e2,0xa5e3,0x0000,0x0000,0xa8c4,0x0000, +0xadbc,0xa441,0x0000,0x0000,0xc941,0xa445,0xa45e,0xa45d, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa5e4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xa8c5,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb0ae,0xd44b, +0x0000,0x0000,0xb6c3,0xdcb1,0xdcb2,0x0000,0xa446,0x0000, +0xa4a9,0x0000,0x0000,0xa8c6,0xa447,0xc948,0xa45f,0x0000, +0x0000,0xa4aa,0xa4ac,0xc951,0xa4ad,0xa4ab,0x0000,0x0000, +0x0000,0xa5e5,0x0000,0xa8c7,0x0000,0x0000,0xa8c8,0xab45, +0x0000,0xa460,0xa4ae,0x0000,0xa5e6,0xa5e8,0xa5e7,0x0000, +0xa6eb,0x0000,0x0000,0xa8c9,0xa8ca,0xab46,0xab47,0x0000, +0x0000,0x0000,0x0000,0xadbd,0x0000,0x0000,0xdcb3,0x0000, +0x0000,0xf6d6,0xa448,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa4b0,0xa4af,0xc952,0xa4b1,0xa4b7,0x0000,0xa4b2,0xa4b3, +0xc954,0xc953,0xa4b5,0xa4b6,0x0000,0xa4b4,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa54a,0xa54b,0xa54c,0xa54d, +0xa549,0xa550,0xc96a,0x0000,0xc966,0xc969,0xa551,0xa561, +0x0000,0xc968,0x0000,0xa54e,0xa54f,0xa548,0x0000,0x0000, +0xc965,0xc967,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa5f5,0xc9b0,0xa5f2,0xa5f6,0xc9ba,0xc9ae,0xa5f3,0xc9b2, +0x0000,0x0000,0x0000,0xa5f4,0x0000,0xa5f7,0x0000,0xa5e9, +0xc9b1,0xa5f8,0xc9b5,0x0000,0xc9b9,0xc9b6,0x0000,0x0000, +0xc9b3,0xa5ea,0xa5ec,0xa5f9,0x0000,0xa5ee,0xc9ab,0xa5f1, +0xa5ef,0xa5f0,0xc9bb,0xc9b8,0xc9af,0xa5ed,0x0000,0x0000, +0xc9ac,0xa5eb,0x0000,0x0000,0x0000,0xc9b4,0x0000,0x0000, +0x0000,0x0000,0xc9b7,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xc9ad,0xca66,0x0000,0xa742, +0xa6f4,0x0000,0x0000,0xca67,0xa6f1,0x0000,0xa744,0x0000, +0xa6f9,0x0000,0xa6f8,0xca5b,0xa6fc,0xa6f7,0xca60,0xca68, +0x0000,0xca64,0x0000,0xa6fa,0x0000,0x0000,0xa6fd,0xa6ee, +0xa747,0xca5d,0x0000,0x0000,0xcbbd,0xa6ec,0xa743,0xa6ed, +0xa6f5,0xa6f6,0xca62,0xca5e,0xa6fb,0xa6f3,0xca5a,0xa6ef, +0xca65,0xa745,0xa748,0xa6f2,0xa740,0xa746,0xa6f0,0xca63, +0xa741,0xca69,0xca5c,0xa6fe,0xca5f,0x0000,0x0000,0xca61, +0x0000,0xa8d8,0xcbbf,0xcbcb,0xa8d0,0x0000,0xcbcc,0xa8cb, +0xa8d5,0x0000,0x0000,0xa8ce,0xcbb9,0xa8d6,0xcbb8,0xcbbc, +0xcbc3,0xcbc1,0xa8de,0xa8d9,0xcbb3,0xcbb5,0xa8db,0xa8cf, +0xcbb6,0xcbc2,0xcbc9,0xa8d4,0xcbbb,0xcbb4,0xa8d3,0xcbb7, +0xa8d7,0xcbba,0x0000,0xa8d2,0x0000,0xa8cd,0x0000,0xa8dc, +0xcbc4,0xa8dd,0xcbc8,0x0000,0xcbc6,0xcbca,0xa8da,0xcbbe, +0xcbb2,0x0000,0xcbc0,0xa8d1,0xcbc5,0xa8cc,0xcbc7,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xab56,0xab4a, +0x0000,0x0000,0xcde0,0xcde8,0x0000,0xab49,0xab51,0xab5d, +0x0000,0xcdee,0xcdec,0xcde7,0x0000,0x0000,0x0000,0xab4b, +0xcded,0xcde3,0xab59,0xab50,0xab58,0xcdde,0x0000,0xcdea, +0x0000,0xcde1,0xab54,0xcde2,0x0000,0xcddd,0xab5b,0xab4e, +0xab57,0xab4d,0x0000,0xcddf,0xcde4,0x0000,0xcdeb,0xab55, +0xab52,0xcde6,0xab5a,0xcde9,0xcde5,0xab4f,0xab5c,0xab53, +0xab4c,0xab48,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xcdef,0x0000,0xadd7,0xadc1, +0x0000,0xadd1,0x0000,0xadd6,0xd0d0,0xd0cf,0xd0d4,0xd0d5, +0xadc4,0x0000,0xadcd,0x0000,0x0000,0x0000,0xadda,0x0000, +0xadce,0x0000,0x0000,0x0000,0x0000,0xd0c9,0xadc7,0xd0ca, +0x0000,0xaddc,0x0000,0xadd3,0xadbe,0xadbf,0xd0dd,0xb0bf, +0x0000,0xadcc,0xadcb,0xd0cb,0xadcf,0xd45b,0xadc6,0xd0d6, +0xadd5,0xadd4,0xadca,0xd0ce,0xd0d7,0x0000,0xd0c8,0xadc9, +0xd0d8,0xadd2,0xd0cc,0xadc0,0x0000,0xadc3,0xadc2,0xd0d9, +0xadd0,0xadc5,0xadd9,0xaddb,0xd0d3,0xadd8,0x0000,0xd0db, +0xd0cd,0xd0dc,0x0000,0xd0d1,0x0000,0xd0da,0x0000,0xd0d2, +0x0000,0x0000,0x0000,0x0000,0xadc8,0x0000,0x0000,0x0000, +0xd463,0xd457,0x0000,0xb0b3,0x0000,0xd45c,0xd462,0xb0b2, +0xd455,0xb0b6,0xd459,0xd452,0xb0b4,0xd456,0xb0b9,0xb0be, +0x0000,0xd467,0x0000,0xd451,0x0000,0xb0ba,0x0000,0xd466, +0x0000,0x0000,0xb0b5,0xd458,0xb0b1,0xd453,0xd44f,0xd45d, +0xd450,0xd44e,0xd45a,0xd460,0xd461,0xb0b7,0x0000,0x0000, +0xd85b,0xd45e,0xd44d,0xd45f,0x0000,0xb0c1,0xd464,0xb0c0, +0xd44c,0x0000,0xd454,0xd465,0xb0bc,0xb0bb,0xb0b8,0xb0bd, +0x0000,0x0000,0xb0af,0x0000,0x0000,0xb0b0,0x0000,0x0000, +0xb3c8,0x0000,0xd85e,0xd857,0x0000,0xb3c5,0x0000,0xd85f, +0x0000,0x0000,0x0000,0xd855,0xd858,0xb3c4,0xd859,0x0000, +0x0000,0xb3c7,0xd85d,0x0000,0xd853,0xd852,0xb3c9,0x0000, +0xb3ca,0xb3c6,0xb3cb,0xd851,0xd85c,0xd85a,0xd854,0x0000, +0x0000,0x0000,0xb3c3,0xd856,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xb6ca,0xb6c4,0xdcb7,0xb6cd, +0xdcbd,0xdcc0,0xb6c6,0xb6c7,0xdcba,0xb6c5,0xdcc3,0xb6cb, +0xdcc4,0x0000,0xdcbf,0xb6cc,0x0000,0xdcb4,0xb6c9,0xdcb5, +0x0000,0xdcbe,0xdcbc,0x0000,0xdcb8,0xb6c8,0xdcb6,0xb6ce, +0xdcbb,0xdcc2,0xdcb9,0xdcc1,0x0000,0x0000,0xb9b6,0xb9b3, +0x0000,0xb9b4,0x0000,0xe0f9,0xe0f1,0xb9b2,0xb9af,0xe0f2, +0x0000,0x0000,0xb9b1,0xe0f5,0x0000,0xe0f7,0x0000,0x0000, +0xe0fe,0x0000,0x0000,0xe0fd,0xe0f8,0xb9ae,0xe0f0,0xb9ac, +0xe0f3,0xb9b7,0xe0f6,0x0000,0xe0fa,0xb9b0,0xb9ad,0xe0fc, +0xe0fb,0xb9b5,0x0000,0xe0f4,0x0000,0xbbf8,0xe4ec,0x0000, +0xe4e9,0xbbf9,0x0000,0xbbf7,0x0000,0xe4f0,0xe4ed,0xe4e6, +0xbbf6,0x0000,0xbbfa,0xe4e7,0xbbf5,0xbbfd,0xe4ea,0xe4eb, +0xbbfb,0xbbfc,0xe4f1,0xe4ee,0xe4ef,0x0000,0x0000,0x0000, +0xbeaa,0xe8f8,0xbea7,0xe8f5,0xbea9,0xbeab,0x0000,0xe8f6, +0xbea8,0x0000,0xe8f7,0x0000,0xe8f4,0x0000,0x0000,0xc076, +0xecbd,0xc077,0xecbb,0x0000,0xecbc,0xecba,0xecb9,0x0000, +0x0000,0xecbe,0xc075,0x0000,0x0000,0xefb8,0xefb9,0x0000, +0xe4e8,0xefb7,0xc078,0xc35f,0xf1eb,0xf1ec,0x0000,0xc4d7, +0xc4d8,0xf5c1,0xf5c0,0xc56c,0xc56b,0xf7d0,0x0000,0xa449, +0xa461,0xa4b9,0x0000,0xa4b8,0xa553,0xa552,0xa5fc,0xa5fb, +0xa5fd,0xa5fa,0x0000,0xa74a,0xa749,0xa74b,0x0000,0x0000, +0x0000,0x0000,0xa8e0,0x0000,0xa8df,0xa8e1,0x0000,0xab5e, +0x0000,0xa259,0xd0de,0xa25a,0xb0c2,0xa25c,0xa25b,0xd860, +0x0000,0xa25d,0xb9b8,0xa25e,0x0000,0xa44a,0x0000,0xa4ba, +0xa5fe,0xa8e2,0x0000,0xa44b,0xa4bd,0xa4bb,0xa4bc,0x0000, +0x0000,0xa640,0x0000,0x0000,0x0000,0xa74c,0xa8e4,0xa8e3, +0xa8e5,0x0000,0x0000,0x0000,0xaddd,0x0000,0x0000,0x0000, +0xbeac,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc94e, +0x0000,0xa554,0xa555,0x0000,0x0000,0xa641,0x0000,0xca6a, +0x0000,0xab60,0xab5f,0xd0e0,0xd0df,0xb0c3,0x0000,0xa4be, +0xc955,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbcd,0x0000, +0xab61,0x0000,0xade0,0x0000,0xadde,0xaddf,0x0000,0x0000, +0x0000,0x0000,0xbead,0x0000,0xa556,0x0000,0x0000,0x0000, +0xa642,0xc9bc,0x0000,0x0000,0x0000,0x0000,0xa74d,0xa74e, +0x0000,0xca6b,0x0000,0x0000,0xcbce,0xa8e6,0xcbcf,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd0e2,0xd0e3,0xade3,0x0000, +0xd0e4,0x0000,0xd0e1,0xade4,0xade2,0xade1,0xd0e5,0x0000, +0xd468,0x0000,0x0000,0x0000,0xd861,0x0000,0x0000,0xdcc5, +0xe140,0x0000,0x0000,0x0000,0xbbfe,0xbeae,0xe8f9,0x0000, +0xa44c,0xa45a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xb0c4,0xb3cd,0x0000,0xb9b9,0x0000,0xc942,0xa4bf,0x0000, +0xa559,0xa557,0xa558,0x0000,0x0000,0xa8e7,0x0000,0x0000, +0xa44d,0xa44e,0x0000,0xa462,0x0000,0x0000,0xa4c0,0xa4c1, +0xa4c2,0xc9be,0xa55a,0x0000,0xc96b,0x0000,0xa646,0x0000, +0xc9bf,0xa644,0xa645,0xc9bd,0x0000,0x0000,0xa647,0xa643, +0x0000,0x0000,0x0000,0x0000,0xca6c,0xaaec,0xca6d,0x0000, +0x0000,0xca6e,0x0000,0x0000,0xa750,0xa74f,0x0000,0x0000, +0xa753,0xa751,0xa752,0x0000,0x0000,0x0000,0xa8ed,0x0000, +0xa8ec,0xcbd4,0xcbd1,0xcbd2,0x0000,0xcbd0,0xa8ee,0xa8ea, +0xa8e9,0x0000,0xa8eb,0xa8e8,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa8ef,0x0000,0xab63,0xcdf0,0x0000,0xcbd3,0xab68, +0x0000,0xcdf1,0xab64,0xab67,0xab66,0xab65,0xab62,0x0000, +0x0000,0x0000,0xd0e8,0x0000,0xade7,0xd0eb,0xade5,0x0000, +0x0000,0x0000,0xd0e7,0xade8,0xade6,0xade9,0xd0e9,0xd0ea, +0x0000,0xd0e6,0xd0ec,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xb3d1,0xb0c5,0xd469,0xd46b,0xd46a,0xd46c,0xb0c6, +0x0000,0x0000,0xb3ce,0x0000,0xb3cf,0xb3d0,0x0000,0xb6d0, +0xdcc7,0x0000,0xdcc6,0xdcc8,0xdcc9,0xb6d1,0x0000,0xb6cf, +0xe141,0xe142,0xb9bb,0xb9ba,0xe35a,0x0000,0x0000,0xbc40, +0xbc41,0xbc42,0xbc44,0xe4f2,0xe4f3,0xbc43,0x0000,0x0000, +0x0000,0xbeaf,0x0000,0xbeb0,0x0000,0x0000,0xf1ed,0xf5c3, +0xf5c2,0xf7d1,0x0000,0xa44f,0x0000,0x0000,0x0000,0xa55c, +0xa55b,0x0000,0x0000,0xa648,0x0000,0x0000,0xc9c0,0x0000, +0x0000,0xa755,0xa756,0xa754,0xa757,0xca6f,0xca70,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xa8f1,0xcbd5,0x0000,0xa8f0,0x0000, +0xcdf2,0xab6c,0xcdf3,0xab6b,0x0000,0x0000,0x0000,0xab69, +0x0000,0xab6a,0x0000,0x0000,0x0000,0xd0ed,0x0000,0x0000, +0x0000,0x0000,0xb0c7,0xd46e,0x0000,0xb0ca,0xd46d,0xb1e5, +0xb0c9,0xb0c8,0x0000,0xb3d4,0x0000,0xb3d3,0xb3d2,0xb6d2, +0x0000,0x0000,0xb6d5,0xb6d6,0xb6d4,0x0000,0xb6d3,0x0000, +0x0000,0xe143,0x0000,0xe144,0x0000,0x0000,0x0000,0xe4f5, +0xbc45,0xe4f4,0x0000,0xbeb1,0xecbf,0xc079,0x0000,0xf1ee, +0xc455,0x0000,0xa463,0xa4c3,0xc956,0x0000,0xa4c4,0xa4c5, +/* 0x5300 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0xa55d,0xa55e,0x0000, +0xa649,0xca71,0xcbd6,0xcbd7,0x0000,0xab6d,0xd0ee,0xb0cc, +0xb0cb,0xd863,0xd862,0x0000,0x0000,0xa450,0xa4c6,0xa55f, +0x0000,0xb0cd,0xc943,0x0000,0xc96c,0xa560,0x0000,0xc9c2, +0xa64b,0xa64a,0xc9c1,0xa758,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xadea,0x0000,0x0000,0xd46f,0x0000,0xb6d7, +0xe145,0xb9bc,0x0000,0x0000,0xe8fa,0x0000,0x0000,0xf3fd, +0x0000,0xa4c7,0x0000,0x0000,0xcbd8,0xcdf4,0xb0d0,0xb0ce, +0xb0cf,0xa451,0x0000,0xa464,0xa2cd,0xa4ca,0x0000,0xa4c9, +0xa4c8,0xa563,0xa562,0x0000,0xc96d,0xc9c3,0x0000,0x0000, +0x0000,0xa8f5,0xa8f2,0xa8f4,0xa8f3,0x0000,0x0000,0xab6e, +0x0000,0x0000,0xb3d5,0x0000,0xa452,0x0000,0xa4cb,0x0000, +0xa565,0xa564,0x0000,0xca72,0x0000,0x0000,0xa8f6,0x0000, +0x0000,0x0000,0x0000,0x0000,0xc957,0x0000,0xa567,0xa566, +0xa64c,0xa64d,0xca73,0xa759,0x0000,0xa75a,0x0000,0xa8f7, +0xa8f8,0xa8f9,0x0000,0xab6f,0xcdf5,0x0000,0x0000,0xadeb, +0x0000,0x0000,0xc944,0x0000,0xa4cc,0x0000,0x0000,0x0000, +0x0000,0x0000,0xc9c4,0x0000,0x0000,0x0000,0xca74,0xca75, +0x0000,0x0000,0xcbd9,0x0000,0xcbda,0x0000,0xcdf7,0xcdf6, +0xcdf9,0xcdf8,0xab70,0x0000,0xd470,0xaded,0xd0ef,0xadec, +0x0000,0x0000,0x0000,0x0000,0xd864,0xb3d6,0x0000,0xd865, +0x0000,0x0000,0x0000,0x0000,0xe146,0xb9bd,0x0000,0x0000, +0x0000,0x0000,0xbc46,0x0000,0xf1ef,0x0000,0x0000,0x0000, +0x0000,0xc958,0x0000,0xa568,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xb0d1,0x0000,0x0000,0x0000,0x0000, +0xa453,0xa465,0xa4ce,0xa4cd,0x0000,0xa4cf,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa8fb,0x0000,0xa8fa,0xa8fc, +0x0000,0x0000,0x0000,0xab71,0x0000,0x0000,0x0000,0xadee, +0x0000,0xe8fb,0xc24f,0xa466,0xa56a,0xa579,0xa574,0x0000, +0xa56f,0xa56e,0xa575,0xa573,0xa56c,0xa57a,0xa56d,0xa569, +0xa578,0xa577,0xa576,0xa56b,0x0000,0xa572,0x0000,0x0000, +0xa571,0x0000,0x0000,0xa57b,0xa570,0x0000,0x0000,0x0000, +/* 0x5400 */ +0x0000,0xa653,0x0000,0xa659,0xa655,0x0000,0xa65b,0xc9c5, +0xa658,0xa64e,0xa651,0xa654,0xa650,0xa657,0xa65a,0xa64f, +0xa652,0xa656,0xa65c,0x0000,0x0000,0x0000,0x0000,0x0000, +0xca7e,0xca7b,0x0000,0xa767,0xca7c,0xa75b,0xa75d,0xa775, +0xa770,0x0000,0x0000,0x0000,0xcaa5,0xca7d,0xa75f,0xa761, +0xcaa4,0xa768,0xca78,0xa774,0xa776,0xa75c,0xa76d,0x0000, +0xca76,0xa773,0x0000,0xa764,0x0000,0xa76e,0xa76f,0xca77, +0xa76c,0xa76a,0x0000,0xa76b,0xa771,0xcaa1,0xa75e,0x0000, +0xa772,0xcaa3,0xa766,0xa763,0x0000,0xca7a,0xa762,0xcaa6, +0xa765,0x0000,0xa769,0x0000,0x0000,0x0000,0xa760,0xcaa2, +0x0000,0x0000,0x0000,0x0000,0xca79,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcbeb,0xcbea,0xa94f,0xcbed,0xcbef,0xcbe4,0xcbe7,0xcbee, +0xa950,0x0000,0x0000,0xcbe1,0xcbe5,0x0000,0x0000,0xcbe9, +0xce49,0xa94b,0xce4d,0xa8fd,0xcbe6,0xa8fe,0xa94c,0xa945, +0xa941,0x0000,0xcbe2,0xa944,0xa949,0xa952,0xcbe3,0xcbdc, +0xa943,0xcbdd,0xcbdf,0x0000,0xa946,0x0000,0xa948,0xcbdb, +0xcbe0,0x0000,0x0000,0xa951,0xa94d,0xcbe8,0xa953,0x0000, +0xa94a,0xcbde,0xa947,0x0000,0x0000,0xa942,0xa940,0x0000, +0xcbec,0x0000,0xa94e,0x0000,0x0000,0x0000,0x0000,0x0000, +0xce48,0xcdfb,0xce4b,0x0000,0x0000,0xcdfd,0xab78,0xaba8, +0xab74,0xaba7,0xab7d,0xaba4,0xab72,0xcdfc,0xce43,0xaba3, +0xce4f,0xaba5,0x0000,0xab79,0x0000,0x0000,0xce45,0xce42, +0xab77,0x0000,0xcdfa,0xaba6,0xce4a,0xab7c,0xce4c,0xaba9, +0xab73,0xab7e,0xab7b,0xce40,0xaba1,0xce46,0xce47,0xab7a, +0xaba2,0xab76,0x0000,0x0000,0x0000,0x0000,0xab75,0xcdfe, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xce44,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xce4e,0x0000, +0xd144,0xadfb,0xd0f1,0x0000,0xd0f6,0xadf4,0xae40,0xd0f4, +0xadef,0xadf9,0xadfe,0xd0fb,0x0000,0xadfa,0xadfd,0x0000, +0x0000,0xd0fe,0xadf5,0xd0f5,0x0000,0x0000,0x0000,0xd142, +0xd143,0x0000,0xadf7,0xd141,0xadf3,0xae43,0x0000,0xd0f8, +/* 0x5500 */ +0x0000,0xadf1,0x0000,0xd146,0xd0f9,0xd0fd,0xadf6,0xae42, +0xd0fa,0xadfc,0xd140,0xd147,0xd4a1,0x0000,0xd145,0xae44, +0xadf0,0xd0fc,0xd0f3,0x0000,0xadf8,0x0000,0x0000,0xd0f2, +0x0000,0x0000,0xd0f7,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd0f0,0xae41, +0x0000,0x0000,0xd477,0x0000,0xb0e4,0xd4a7,0xb0e2,0xb0df, +0xd47c,0xb0db,0xd4a2,0xb0e6,0xd476,0xd47b,0xd47a,0xadf2, +0xb0e1,0xd4a5,0x0000,0xd4a8,0xd473,0x0000,0xb3e8,0x0000, +0xd4a9,0xb0e7,0x0000,0xb0d9,0xb0d6,0xd47e,0xb0d3,0x0000, +0xd4a6,0x0000,0xb0da,0xd4aa,0x0000,0xd474,0xd4a4,0xb0dd, +0xd475,0xd478,0xd47d,0x0000,0x0000,0xb0de,0xb0dc,0xb0e8, +0x0000,0x0000,0x0000,0x0000,0xb0e3,0x0000,0xb0d7,0xb1d2, +0x0000,0xb0d8,0xd479,0xb0e5,0xb0e0,0xd4a3,0xb0d5,0x0000, +0x0000,0x0000,0xb0d4,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd471,0xd472,0xd86a, +0x0000,0x0000,0x0000,0xb3d7,0xb3da,0xd875,0xb3ee,0xd878, +0xb3d8,0xd871,0xb3de,0xb3e4,0xb5bd,0x0000,0x0000,0xb3e2, +0xd86e,0xb3ef,0xb3db,0xb3e3,0xd876,0xdcd7,0xd87b,0xd86f, +0x0000,0xd866,0xd873,0xd86d,0xb3e1,0xd879,0x0000,0x0000, +0xb3dd,0xb3f1,0xb3ea,0x0000,0xb3df,0xb3dc,0x0000,0xb3e7, +0x0000,0xd87a,0xd86c,0xd872,0xd874,0xd868,0xd877,0xb3d9, +0xd867,0x0000,0xb3e0,0xb3f0,0xb3ec,0xd869,0xb3e6,0x0000, +0x0000,0xb3ed,0xb3e9,0xb3e5,0x0000,0xd870,0x0000,0x0000, +0x0000,0x0000,0x0000,0xb3eb,0x0000,0x0000,0x0000,0xdcd5, +0xdcd1,0x0000,0xdce0,0xdcca,0xdcd3,0xb6e5,0xb6e6,0xb6de, +0xdcdc,0xb6e8,0xdccf,0xdcce,0xdccc,0xdcde,0xb6dc,0xdcd8, +0xdccd,0xb6df,0xdcd6,0xb6da,0xdcd2,0xdcd9,0xdcdb,0x0000, +0x0000,0xdcdf,0xb6e3,0xdccb,0xb6dd,0xdcd0,0x0000,0xb6d8, +0x0000,0xb6e4,0xdcda,0xb6e0,0xb6e1,0xb6e7,0xb6db,0xa25f, +0xb6d9,0xdcd4,0x0000,0x0000,0x0000,0x0000,0x0000,0xb6e2, +0x0000,0x0000,0xdcdd,0x0000,0x0000,0x0000,0xb9cd,0xb9c8, +0x0000,0xe155,0xe151,0x0000,0xe14b,0xb9c2,0xb9be,0xe154, +0xb9bf,0xe14e,0xe150,0x0000,0xe153,0x0000,0xb9c4,0x0000, +0xb9cb,0xb9c5,0x0000,0x0000,0xe149,0xb9c6,0xb9c7,0xe14c, +0xb9cc,0x0000,0xe14a,0xe14f,0xb9c3,0xe148,0xb9c9,0xb9c1, +0x0000,0x0000,0x0000,0xb9c0,0xe14d,0xe152,0x0000,0xb9ca, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe147, +0x0000,0xbc4d,0xe547,0x0000,0xe544,0x0000,0xbc47,0xbc53, +0xbc54,0x0000,0xbc4a,0xe542,0xbc4c,0xe4f9,0xbc52,0x0000, +0xe546,0xbc49,0xe548,0xbc48,0x0000,0xe543,0xe545,0xbc4b, +0xe541,0xe4fa,0xe4f7,0x0000,0x0000,0xd86b,0xe4fd,0x0000, +0xe4f6,0xe4fc,0xe4fb,0x0000,0xe4f8,0x0000,0xbc4f,0x0000, +0x0000,0x0000,0x0000,0xbc4e,0x0000,0x0000,0x0000,0xbc50, +0xe4fe,0xbeb2,0xe540,0x0000,0x0000,0x0000,0xe945,0x0000, +0xe8fd,0x0000,0xbebe,0xe942,0xbeb6,0xbeba,0xe941,0x0000, +0xbeb9,0xbeb5,0xbeb8,0xbeb3,0xbebd,0xe943,0xe8fe,0xbebc, +0xe8fc,0xbebb,0xe944,0xe940,0xbc51,0x0000,0xbebf,0xe946, +0xbeb7,0xbeb4,0x0000,0x0000,0x0000,0x0000,0xecc6,0xecc8, +0xc07b,0xecc9,0xecc7,0xecc5,0xecc4,0xc07d,0xecc3,0xc07e, +0x0000,0x0000,0x0000,0x0000,0xecc1,0xecc2,0xc07a,0xc0a1, +0xc07c,0x0000,0x0000,0xecc0,0x0000,0xc250,0x0000,0xefbc, +0xefba,0xefbf,0xefbd,0x0000,0xefbb,0xefbe,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xc360,0xf1f2,0xf1f3, +0xc456,0x0000,0xf1f4,0xf1f0,0xf1f5,0xf1f1,0xc251,0x0000, +0x0000,0x0000,0xf3fe,0xf441,0xc459,0xf440,0xc458,0xc457, +0x0000,0x0000,0x0000,0x0000,0xc45a,0xf5c5,0xf5c6,0x0000, +0xc4da,0xc4d9,0xc4db,0xf5c4,0x0000,0xf6d8,0xf6d7,0x0000, +0xc56d,0xc56f,0xc56e,0xf6d9,0xc5c8,0xf8a6,0x0000,0x0000, +0x0000,0xc5f1,0x0000,0xf8a5,0xf8ee,0x0000,0x0000,0xc949, +0x0000,0x0000,0xa57d,0xa57c,0x0000,0xa65f,0xa65e,0xc9c7, +0xa65d,0xc9c6,0x0000,0x0000,0xa779,0xcaa9,0x0000,0xcaa8, +0x0000,0x0000,0xa777,0xa77a,0x0000,0x0000,0xcaa7,0x0000, +0xa778,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbf0, +0x0000,0xcbf1,0xa954,0x0000,0x0000,0x0000,0x0000,0xabaa, +/* 0x5700 */ +0x0000,0xd148,0xd149,0xae45,0xae46,0x0000,0x0000,0xd4ac, +0xb0e9,0xb0eb,0xd4ab,0xb0ea,0xd87c,0xb3f2,0x0000,0x0000, +0x0000,0x0000,0xb6e9,0xb6ea,0xdce1,0x0000,0xb9cf,0x0000, +0xb9ce,0x0000,0xe549,0xe948,0xe947,0x0000,0xf96b,0xa467, +0xc959,0x0000,0xc96e,0xc96f,0x0000,0x0000,0x0000,0x0000, +0xa662,0xa666,0xc9c9,0x0000,0xa664,0xa663,0xc9c8,0xa665, +0xa661,0x0000,0x0000,0xa660,0xc9ca,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xa7a6,0x0000,0x0000,0xa7a3,0x0000, +0xa77d,0xcaaa,0x0000,0x0000,0x0000,0xcaab,0x0000,0xa7a1, +0x0000,0xcaad,0xa77b,0xcaae,0xcaac,0xa77e,0xa7a2,0xa7a5, +0xa7a4,0xa77c,0xcaaf,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa959,0xcbfe,0x0000,0xa95b,0x0000,0xa95a,0x0000, +0xcc40,0xa958,0xa957,0xcbf5,0x0000,0xcbf4,0x0000,0xcbf2, +0xcbf7,0xcbf6,0xcbf3,0xcbfc,0xcbfd,0xcbfa,0xcbf8,0xa956, +0x0000,0x0000,0x0000,0xcbfb,0xa95c,0xcc41,0x0000,0x0000, +0xcbf9,0x0000,0xabab,0xa955,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xabac,0xce54,0x0000,0x0000,0xce5a, +0x0000,0x0000,0x0000,0xabb2,0xce58,0xce5e,0x0000,0xce55, +0xce59,0xce5b,0xce5d,0xce57,0x0000,0xce56,0xce51,0xce52, +0xabad,0x0000,0xabaf,0xabae,0xce53,0xce5c,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xabb1,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xce50,0xd153,0x0000, +0xd152,0xd157,0xd14e,0x0000,0xd151,0xd150,0x0000,0xd154, +0x0000,0xd158,0xae47,0xae4a,0x0000,0x0000,0xd14f,0xd155, +0x0000,0x0000,0x0000,0xae49,0xd14a,0x0000,0xabb0,0xd4ba, +0xd156,0x0000,0xd14d,0x0000,0xae48,0xd14c,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd4b1,0x0000,0x0000,0xb0ec, +0xb0f0,0xd4c1,0xd4af,0xd4bd,0xb0f1,0xd4bf,0x0000,0xd4c5, +0x0000,0xd4c9,0x0000,0x0000,0xd4c0,0xd4b4,0xd4bc,0x0000, +0xd4ca,0xd4c8,0xd4be,0xd4b9,0xd4b2,0xd8a6,0xd4b0,0xb0f5, +0xd4b7,0xb0f6,0xb0f2,0xd4ad,0xd4c3,0xd4b5,0x0000,0x0000, +0xd4b3,0xd4c6,0xb0f3,0x0000,0xd4cc,0xb0ed,0xb0ef,0xd4bb, +0xd4b6,0xae4b,0xb0ee,0xd4b8,0xd4c7,0xd4cb,0xd4c2,0x0000, +0xd4c4,0x0000,0x0000,0x0000,0xd4ae,0x0000,0x0000,0x0000, +0x0000,0xd8a1,0x0000,0xd8aa,0xd8a9,0xb3fa,0xd8a2,0x0000, +0xb3fb,0xb3f9,0x0000,0xd8a4,0xb3f6,0xd8a8,0x0000,0xd8a3, +0xd8a5,0xd87d,0xb3f4,0x0000,0xd8b2,0xd8b1,0xd8ae,0xb3f3, +0xb3f7,0xb3f8,0xd14b,0xd8ab,0xb3f5,0xb0f4,0xd8ad,0xd87e, +0xd8b0,0xd8af,0x0000,0xd8b3,0x0000,0xdcef,0x0000,0xd8ac, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd8a7,0xdce7,0xb6f4,0xb6f7,0xb6f2,0xdce6,0xdcea,0xdce5, +0x0000,0xb6ec,0xb6f6,0xdce2,0xb6f0,0xdce9,0x0000,0xb6ee, +0xb6ed,0xdcec,0xb6ef,0xdcee,0x0000,0xdceb,0xb6eb,0x0000, +0x0000,0x0000,0xb6f5,0xdcf0,0xdce4,0xdced,0x0000,0x0000, +0xdce3,0x0000,0x0000,0xb6f1,0x0000,0xb6f3,0x0000,0xdce8, +0x0000,0xdcf1,0x0000,0x0000,0xe15d,0xb9d0,0xe163,0x0000, +0x0000,0xb9d5,0xe15f,0xe166,0xe157,0xb9d7,0xb9d1,0xe15c, +0xbc55,0xe15b,0xe164,0xb9d2,0x0000,0xb9d6,0xe15a,0xe160, +0xe165,0xe156,0xb9d4,0xe15e,0x0000,0x0000,0xe162,0xe168, +0xe158,0xe161,0x0000,0xb9d3,0xe167,0x0000,0x0000,0x0000, +0xe159,0x0000,0x0000,0x0000,0xbc59,0xe54b,0xbc57,0xbc56, +0xe54d,0xe552,0x0000,0xe54e,0x0000,0xe551,0xbc5c,0x0000, +0xbea5,0xbc5b,0x0000,0xe54a,0xe550,0x0000,0xbc5a,0xe54f, +0x0000,0xe54c,0x0000,0xbc58,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe94d,0xf9d9,0xe94f,0xe94a,0xbec1,0xe94c, +0x0000,0xbec0,0xe94e,0x0000,0x0000,0xbec3,0xe950,0xbec2, +0xe949,0xe94b,0x0000,0x0000,0x0000,0x0000,0xc0a5,0xeccc, +0x0000,0xc0a4,0xeccd,0xc0a3,0xeccb,0xc0a2,0xecca,0x0000, +0xc253,0xc252,0xf1f6,0xf1f8,0x0000,0xf1f7,0xc361,0xc362, +0x0000,0x0000,0xc363,0xf442,0xc45b,0x0000,0x0000,0xf7d3, +0xf7d2,0xc5f2,0x0000,0xa468,0xa4d0,0x0000,0x0000,0xa7a7, +0x0000,0x0000,0x0000,0x0000,0xce5f,0x0000,0x0000,0x0000, +0x0000,0xb3fc,0xb3fd,0x0000,0xdcf2,0xb9d8,0xe169,0xe553, +/* 0x5900 */ +0x0000,0x0000,0x0000,0xc95a,0x0000,0x0000,0xcab0,0x0000, +0x0000,0x0000,0x0000,0x0000,0xcc42,0xce60,0xd159,0xae4c, +0x0000,0x0000,0xf1f9,0x0000,0xc4dc,0xa469,0xa57e,0xc970, +0x0000,0xa667,0xa668,0x0000,0xa95d,0x0000,0x0000,0x0000, +0xb0f7,0x0000,0xb9da,0x0000,0xb9db,0xb9d9,0x0000,0xa46a, +0x0000,0xa4d1,0xa4d3,0xa4d2,0xc95b,0xa4d4,0xa5a1,0xc971, +0x0000,0xa5a2,0x0000,0x0000,0x0000,0x0000,0x0000,0xa669, +0xa66a,0x0000,0x0000,0x0000,0xc9cb,0x0000,0xa7a8,0x0000, +0xcab1,0x0000,0x0000,0x0000,0xa961,0xcc43,0x0000,0xa95f, +0xa960,0xa95e,0xd15a,0x0000,0x0000,0x0000,0xabb6,0xabb5, +0xabb7,0xabb4,0x0000,0xce61,0xa962,0xabb3,0x0000,0xae4d, +0xae4e,0x0000,0xae4f,0x0000,0xd4cd,0x0000,0x0000,0x0000, +0xb3fe,0xd8b4,0xb0f8,0x0000,0x0000,0x0000,0x0000,0xb6f8, +0x0000,0xb9dd,0xb9dc,0xe16a,0x0000,0xbc5d,0xbec4,0x0000, +0xefc0,0xf6da,0xf7d4,0xa46b,0xa5a3,0x0000,0xa5a4,0xc9d1, +0xa66c,0xa66f,0x0000,0xc9cf,0xc9cd,0xa66e,0xc9d0,0xc9d2, +0xc9cc,0xa671,0xa670,0xa66d,0xa66b,0xc9ce,0x0000,0x0000, +0x0000,0x0000,0xa7b3,0x0000,0x0000,0xa7b0,0xcab6,0xcab9, +0xcab8,0x0000,0xa7aa,0xa7b2,0x0000,0x0000,0xa7af,0xcab5, +0xcab3,0xa7ae,0x0000,0x0000,0x0000,0xa7a9,0xa7ac,0x0000, +0xcab4,0xcabb,0xcab7,0xa7ad,0xa7b1,0xa7b4,0xcab2,0xcaba, +0xa7ab,0x0000,0x0000,0x0000,0x0000,0x0000,0xa967,0xa96f, +0x0000,0xcc4f,0xcc48,0xa970,0xcc53,0xcc44,0xcc4b,0x0000, +0x0000,0xa966,0xcc45,0xa964,0xcc4c,0xcc50,0xa963,0x0000, +0xcc51,0xcc4a,0x0000,0xcc4d,0x0000,0xa972,0xa969,0xcc54, +0xcc52,0x0000,0xa96e,0xa96c,0xcc49,0xa96b,0xcc47,0xcc46, +0xa96a,0xa968,0xa971,0xa96d,0xa965,0x0000,0xcc4e,0x0000, +0xabb9,0x0000,0xabc0,0xce6f,0xabb8,0xce67,0xce63,0x0000, +0xce73,0xce62,0x0000,0xabbb,0xce6c,0xabbe,0xabc1,0x0000, +0xabbc,0xce70,0xabbf,0x0000,0xae56,0xce76,0xce64,0x0000, +0x0000,0xce66,0xce6d,0xce71,0xce75,0xce72,0xce6b,0xce6e, +0x0000,0x0000,0xce68,0xabc3,0xce6a,0xce69,0xce74,0xabba, +0xce65,0xabc2,0x0000,0xabbd,0x0000,0x0000,0x0000,0x0000, +0x0000,0xae5c,0xd162,0x0000,0xae5b,0x0000,0x0000,0xd160, +0x0000,0xae50,0x0000,0xae55,0x0000,0xd15f,0xd15c,0xd161, +0xae51,0xd15b,0x0000,0xae54,0xae52,0x0000,0xd163,0xae53, +0xae57,0x0000,0x0000,0xae58,0x0000,0xae5a,0x0000,0x0000, +0x0000,0xae59,0x0000,0x0000,0x0000,0xd15d,0xd15e,0x0000, +0x0000,0x0000,0x0000,0xd164,0x0000,0xd4d4,0xb0f9,0xd8c2, +0xd4d3,0xd4e6,0x0000,0x0000,0xb140,0x0000,0xd4e4,0x0000, +0xb0fe,0xb0fa,0xd4ed,0xd4dd,0xd4e0,0x0000,0xb143,0xd4ea, +0xd4e2,0xb0fb,0xb144,0x0000,0xd4e7,0xd4e5,0x0000,0x0000, +0xd4d6,0xd4eb,0xd4df,0xd4da,0x0000,0xd4d0,0xd4ec,0xd4dc, +0xd4cf,0x0000,0xb142,0xd4e1,0xd4ee,0xd4de,0xd4d2,0xd4d7, +0xd4ce,0x0000,0xb141,0x0000,0xd4db,0xd4d8,0xb0fc,0xd4d1, +0x0000,0xd4e9,0xb0fd,0x0000,0xd4d9,0xd4d5,0x0000,0x0000, +0xd4e8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb440, +0xd8bb,0x0000,0xd8b8,0xd8c9,0xd8bd,0xd8ca,0x0000,0xb442, +0x0000,0x0000,0x0000,0xd8c6,0xd8c3,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd8c4,0xd8c7,0xd8cb,0x0000,0xd4e3,0xd8cd, +0xdd47,0x0000,0xb443,0xd8ce,0xd8b6,0xd8c0,0x0000,0xd8c5, +0x0000,0x0000,0xb441,0xb444,0xd8cc,0xd8cf,0xd8ba,0xd8b7, +0x0000,0x0000,0xd8b9,0x0000,0x0000,0xd8be,0xd8bc,0xb445, +0x0000,0xd8c8,0x0000,0x0000,0xd8bf,0x0000,0xd8c1,0xd8b5, +0xdcfa,0xdcf8,0xb742,0xb740,0xdd43,0xdcf9,0xdd44,0xdd40, +0xdcf7,0xdd46,0xdcf6,0xdcfd,0xb6fe,0xb6fd,0xb6fc,0xdcfb, +0xdd41,0xb6f9,0xb741,0x0000,0xdcf4,0x0000,0xdcfe,0xdcf3, +0xdcfc,0xb6fa,0xdd42,0xdcf5,0xb6fb,0xdd45,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe16e,0xb9e2,0xb9e1, +0xb9e3,0xe17a,0xe170,0xe176,0xe16b,0xe179,0xe178,0xe17c, +0xe175,0xb9de,0xe174,0xb9e4,0x0000,0xe16d,0xb9df,0x0000, +0xe17b,0xb9e0,0xe16f,0xe172,0xe177,0xe171,0xe16c,0x0000, +0x0000,0x0000,0x0000,0xe173,0xe555,0xbc61,0xe558,0xe557, +0xe55a,0xe55c,0xf9dc,0xbc5f,0x0000,0xe556,0x0000,0xe554, +/* 0x5b00 */ +0x0000,0xe55d,0xe55b,0xe559,0x0000,0xe55f,0x0000,0xe55e, +0xbc63,0xbc5e,0x0000,0xbc60,0xbc62,0x0000,0x0000,0xe560, +0xe957,0x0000,0x0000,0xe956,0xe955,0x0000,0xe958,0xe951, +0x0000,0xe952,0xe95a,0xe953,0x0000,0xbec5,0xe95c,0x0000, +0xe95b,0xe954,0x0000,0xecd1,0xc0a8,0xeccf,0xecd4,0xecd3, +0xe959,0x0000,0xc0a7,0x0000,0xecd2,0xecce,0xecd6,0xecd5, +0xc0a6,0x0000,0xecd0,0x0000,0xbec6,0x0000,0x0000,0x0000, +0xc254,0x0000,0x0000,0x0000,0xefc1,0xf1fa,0xf1fb,0xf1fc, +0xc45c,0x0000,0x0000,0xc45d,0x0000,0xf443,0x0000,0xf5c8, +0xf5c7,0x0000,0x0000,0xf6db,0xf6dc,0xf7d5,0xf8a7,0x0000, +0xa46c,0xa46d,0x0000,0xa46e,0xa4d5,0xa5a5,0xc9d3,0xa672, +0xa673,0x0000,0xa7b7,0xa7b8,0xa7b6,0xa7b5,0x0000,0xa973, +0x0000,0x0000,0xcc55,0xa975,0xa974,0xcc56,0x0000,0x0000, +0x0000,0xabc4,0x0000,0xae5d,0xd165,0x0000,0xd4f0,0x0000, +0xb145,0xb447,0xd4ef,0xb446,0x0000,0xb9e5,0x0000,0xe17d, +0xbec7,0x0000,0xc0a9,0xecd7,0x0000,0xc45e,0x0000,0xc570, +0x0000,0xc972,0x0000,0xa5a6,0xc973,0xa676,0x0000,0xa674, +0xa675,0xa677,0x0000,0xa7ba,0xa7b9,0x0000,0xcabc,0xa7bb, +0x0000,0x0000,0xcabd,0xcc57,0x0000,0xcc58,0x0000,0xa976, +0xa978,0xa97a,0xa977,0xa97b,0xa979,0x0000,0x0000,0x0000, +0x0000,0x0000,0xabc8,0xabc5,0xabc7,0xabc9,0xabc6,0xd166, +0xce77,0x0000,0x0000,0x0000,0xd168,0xd167,0xae63,0x0000, +0xae5f,0x0000,0x0000,0xae60,0xae62,0xae64,0xae61,0x0000, +0xae66,0xae65,0x0000,0x0000,0x0000,0x0000,0x0000,0xb14a, +0xd4f2,0xd4f1,0xb149,0x0000,0xb148,0xb147,0xb14b,0xb146, +0x0000,0x0000,0xd8d5,0xd8d2,0xb449,0xd8d1,0xd8d6,0x0000, +0xb44b,0xd8d4,0xb448,0xb44a,0xd8d3,0x0000,0xdd48,0x0000, +0xdd49,0xdd4a,0x0000,0x0000,0x0000,0x0000,0xb9e6,0xb9ee, +0xe17e,0xb9e8,0xb9ec,0xe1a1,0xb9ed,0xb9e9,0xb9ea,0xb9e7, +0xb9eb,0xbc66,0xd8d0,0xbc67,0xbc65,0x0000,0xbc64,0xe95d, +0xbec8,0xecd8,0xecd9,0x0000,0x0000,0xc364,0xc45f,0x0000, +0xa46f,0x0000,0xa678,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x5c00 */ +0x0000,0xabca,0x0000,0xd169,0xae67,0x0000,0x0000,0xb14e, +0xb14d,0xb14c,0xb44c,0xb44d,0xd8d7,0xb9ef,0xbec9,0xa470, +0xc95c,0xa4d6,0xc974,0x0000,0x0000,0xc9d4,0xa679,0x0000, +0x0000,0x0000,0xa97c,0x0000,0x0000,0x0000,0x0000,0xdd4b, +0x0000,0x0000,0xa471,0x0000,0xa4d7,0xc9d5,0x0000,0x0000, +0xcabe,0x0000,0xcabf,0x0000,0xa7bc,0x0000,0x0000,0x0000, +0xd8d8,0xb44e,0x0000,0xdd4c,0x0000,0x0000,0x0000,0xc0aa, +0xa472,0xa4a8,0xa4d8,0xc975,0xa5a7,0x0000,0xa7c0,0xa7bf, +0xa7bd,0xa7be,0x0000,0x0000,0xcc59,0xa97e,0xa9a1,0xcc5a, +0xa97d,0x0000,0x0000,0xabce,0xce78,0xabcd,0xabcb,0xabcc, +0xae6a,0xae68,0x0000,0x0000,0xd16b,0xae69,0xd16a,0x0000, +0xae5e,0xd4f3,0x0000,0x0000,0xb150,0xb151,0x0000,0x0000, +0xb14f,0x0000,0xb9f0,0xe1a2,0xbc68,0xbc69,0x0000,0xe561, +0xc0ab,0xefc2,0xefc3,0x0000,0xc4dd,0xf8a8,0xc94b,0xa4d9, +0x0000,0xa473,0x0000,0xc977,0xc976,0x0000,0x0000,0x0000, +0x0000,0xa67a,0xc9d7,0xc9d8,0xc9d6,0x0000,0xc9d9,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcac7,0x0000, +0xcac2,0xcac4,0xcac6,0xcac3,0xa7c4,0xcac0,0x0000,0xcac1, +0xa7c1,0xa7c2,0xcac5,0xcac8,0xa7c3,0xcac9,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xcc68,0x0000,0xcc62, +0xcc5d,0xa9a3,0xcc65,0xcc63,0xcc5c,0xcc69,0xcc6c,0xcc67, +0xcc60,0xa9a5,0xcc66,0xa9a6,0xcc61,0xcc64,0xcc5b,0xcc5f, +0xcc6b,0xa9a7,0x0000,0xa9a8,0x0000,0xcc5e,0xcc6a,0xa9a2, +0xa9a4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xceab,0xcea4, +0xceaa,0xcea3,0xcea5,0xce7d,0xce7b,0x0000,0xceac,0xcea9, +0xce79,0x0000,0xabd0,0xcea7,0xcea8,0x0000,0xcea6,0xce7c, +0xce7a,0xabcf,0xcea2,0xce7e,0x0000,0x0000,0xcea1,0xcead, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xae6f,0x0000,0xae6e,0x0000,0xd16c,0xae6b,0xd16e,0x0000, +0xae70,0xd16f,0x0000,0x0000,0xae73,0x0000,0xae71,0xd170, +0xceae,0xd172,0x0000,0xae6d,0x0000,0xae6c,0x0000,0xd16d, +0xd171,0xae72,0x0000,0x0000,0x0000,0x0000,0xb153,0xb152, +0x0000,0x0000,0x0000,0xd4f5,0xd4f9,0xd4fb,0xb154,0xd4fe, +0x0000,0xb158,0xd541,0x0000,0xb15a,0x0000,0xb156,0xb15e, +0x0000,0xb15b,0xd4f7,0xb155,0x0000,0xd4f6,0xd4f4,0xd543, +0xd4f8,0x0000,0xb157,0xd542,0xb15c,0xd4fd,0xd4fc,0xb15d, +0xd4fa,0xb159,0x0000,0x0000,0x0000,0x0000,0xd544,0x0000, +0xd540,0xd8e7,0xd8ee,0xd8e3,0xb451,0xd8df,0xd8ef,0xd8d9, +0xd8ec,0xd8ea,0xd8e4,0x0000,0xd8ed,0xd8e6,0x0000,0xd8de, +0xd8f0,0xd8dc,0xd8e9,0xd8da,0x0000,0xd8f1,0x0000,0xb452, +0x0000,0xd8eb,0xdd4f,0xd8dd,0xb44f,0x0000,0xd8e1,0x0000, +0xb450,0xd8e0,0xd8e5,0x0000,0x0000,0xd8e2,0x0000,0x0000, +0x0000,0xd8e8,0x0000,0x0000,0x0000,0x0000,0xdd53,0x0000, +0x0000,0x0000,0xdd56,0xdd4e,0x0000,0xdd50,0x0000,0xdd55, +0xdd54,0xb743,0x0000,0xd8db,0xdd52,0x0000,0x0000,0xb744, +0x0000,0xdd4d,0xdd51,0x0000,0x0000,0x0000,0x0000,0xe1a9, +0x0000,0xe1b0,0xe1a7,0x0000,0xe1ae,0xe1a5,0xe1ad,0xe1b1, +0xe1a4,0xe1a8,0xe1a3,0x0000,0xb9f1,0x0000,0xe1a6,0xb9f2, +0xe1ac,0xe1ab,0xe1aa,0x0000,0x0000,0xe1af,0x0000,0x0000, +0x0000,0x0000,0xe565,0xe567,0xbc6b,0xe568,0x0000,0xe563, +0x0000,0xe562,0xe56c,0x0000,0xe56a,0xbc6a,0xe56d,0xe564, +0xe569,0xe56b,0xe566,0x0000,0x0000,0x0000,0x0000,0xe961, +0xe966,0xe960,0xe965,0x0000,0xe95e,0xe968,0xe964,0xe969, +0xe963,0xe95f,0xe967,0x0000,0xe96a,0xe962,0x0000,0xecda, +0xc0af,0x0000,0xc0ad,0x0000,0xc0ac,0xc0ae,0x0000,0x0000, +0xefc4,0x0000,0xf172,0xf1fd,0x0000,0x0000,0xf444,0xf445, +0x0000,0xc460,0x0000,0xf5c9,0x0000,0xc4de,0x0000,0xf5ca, +0x0000,0xf6de,0xc572,0x0000,0xc571,0xf6dd,0xc5c9,0x0000, +0xf7d6,0x0000,0x0000,0x0000,0x0000,0xa474,0xa67b,0xc9da, +0xcaca,0xa8b5,0xb15f,0x0000,0x0000,0xa475,0xa5aa,0xa5a9, +0xa5a8,0x0000,0x0000,0xa7c5,0x0000,0x0000,0xae74,0x0000, +0xdd57,0xa476,0xa477,0xa478,0xa4da,0x0000,0x0000,0xabd1, +0x0000,0xceaf,0x0000,0x0000,0x0000,0xb453,0xa479,0xc95d, +/* 0x5e00 */ +0x0000,0x0000,0xa5ab,0xa5ac,0xc978,0x0000,0xa67c,0x0000, +0x0000,0x0000,0xcacb,0x0000,0xa7c6,0x0000,0xcacc,0x0000, +0x0000,0xa9ae,0x0000,0x0000,0xcc6e,0xa9ac,0xa9ab,0xcc6d, +0xa9a9,0xcc6f,0xa9aa,0xa9ad,0x0000,0xabd2,0x0000,0xabd4, +0xceb3,0xceb0,0xceb1,0xceb2,0xceb4,0xabd3,0x0000,0x0000, +0xd174,0xd173,0x0000,0xae76,0x0000,0xae75,0x0000,0x0000, +0x0000,0x0000,0x0000,0xb162,0xd546,0x0000,0xb161,0xb163, +0xb160,0x0000,0x0000,0x0000,0x0000,0xb455,0xd545,0x0000, +0xb456,0xd8f3,0x0000,0xb457,0xd8f2,0xb454,0x0000,0x0000, +0x0000,0x0000,0xdd5a,0xdd5c,0xb745,0xdd5b,0xdd59,0xdd58, +0x0000,0x0000,0x0000,0xe1b4,0xb9f7,0xb9f5,0x0000,0xb9f6, +0xe1b2,0xe1b3,0x0000,0xb9f3,0xe571,0xe56f,0x0000,0xbc6d, +0xe570,0xbc6e,0xbc6c,0xb9f4,0x0000,0x0000,0xe96d,0xe96b, +0xe96c,0xe56e,0xecdc,0xc0b0,0xecdb,0xefc5,0xefc6,0xe96e, +0xf1fe,0x0000,0xa47a,0xa5ad,0xa67e,0xc9db,0xa67d,0x0000, +0xa9af,0xb746,0x0000,0xa4db,0xa5ae,0xabd5,0xb458,0x0000, +0xc979,0x0000,0xc97a,0x0000,0xc9dc,0x0000,0x0000,0xa7c8, +0xcad0,0xcace,0xa7c9,0xcacd,0xcacf,0xcad1,0x0000,0xa7c7, +0x0000,0x0000,0x0000,0x0000,0x0000,0xa9b3,0xa9b4,0xa9b1, +0x0000,0x0000,0xa9b0,0xceb8,0xa9b2,0x0000,0x0000,0x0000, +0xabd6,0x0000,0xceb7,0xceb9,0xceb6,0xceba,0xabd7,0xae79, +0xd175,0x0000,0xd177,0xae77,0xd178,0xae78,0xd176,0x0000, +0xceb5,0xd547,0xd54a,0xd54b,0xd548,0xb167,0xb166,0xb164, +0xb165,0xd549,0x0000,0x0000,0x0000,0x0000,0xb168,0x0000, +0x0000,0xb45a,0xb45b,0x0000,0xb45c,0xdd5d,0xdd5f,0xdd61, +0xb748,0xb747,0xb459,0xdd60,0xdd5e,0x0000,0xe1b8,0x0000, +0x0000,0xe1b6,0xe1bc,0xb9f8,0xe1bd,0xe1ba,0xb9f9,0xe1b7, +0xe1b5,0xe1bb,0xbc70,0xe573,0xe1b9,0xbc72,0xe574,0xbc71, +0xbc74,0xe575,0xbc6f,0xbc73,0x0000,0xe973,0xe971,0xe970, +0xe972,0xe96f,0x0000,0x0000,0xc366,0x0000,0xf446,0xf447, +0x0000,0xf5cb,0xf6df,0xc655,0x0000,0x0000,0xa9b5,0xa7ca, +0x0000,0x0000,0xabd8,0x0000,0x0000,0x0000,0xa47b,0xa4dc, +/* 0x5f00 */ +0x0000,0xa5af,0xc9dd,0x0000,0xa7cb,0xcad2,0x0000,0xcebb, +0xabd9,0x0000,0xb9fa,0xa47c,0x0000,0x0000,0x0000,0xa6a1, +0x0000,0x0000,0xb749,0xa47d,0xa4dd,0xa4de,0x0000,0xa5b1, +0xa5b0,0x0000,0xc9de,0xa6a2,0x0000,0xcad3,0x0000,0xa7cc, +0x0000,0x0000,0xcc71,0xcc72,0xcc73,0x0000,0xa9b6,0xa9b7, +0xcc70,0xa9b8,0x0000,0x0000,0x0000,0xabda,0xcebc,0x0000, +0xd17a,0xae7a,0x0000,0xd179,0x0000,0xb169,0xd54c,0xb16a, +0xd54d,0x0000,0x0000,0x0000,0xb45d,0x0000,0x0000,0x0000, +0xdd62,0x0000,0x0000,0xe1bf,0xe1be,0x0000,0xb9fb,0x0000, +0xbc75,0xe576,0xbeca,0xe974,0xc0b1,0x0000,0xc573,0xf7d8, +0x0000,0x0000,0x0000,0x0000,0xcc74,0x0000,0xcebd,0xb16b, +0xd8f4,0xb74a,0x0000,0x0000,0x0000,0xc255,0x0000,0x0000, +0x0000,0x0000,0xa7ce,0x0000,0xa7cd,0xabdb,0x0000,0xd17b, +0x0000,0xb16d,0xb343,0xb16e,0xb16c,0xb45e,0x0000,0xe1c0, +0xb9fc,0xbc76,0x0000,0xc94c,0xc9df,0x0000,0xcad5,0xa7cf, +0xcad4,0xa7d0,0x0000,0x0000,0xa9bc,0xcc77,0xcc76,0xa9bb, +0xa9b9,0xa9ba,0xcc75,0x0000,0x0000,0xabdd,0xcebe,0xabe0, +0xabdc,0xabe2,0xabde,0xabdf,0xabe1,0x0000,0x0000,0x0000, +0xae7d,0xae7c,0xae7b,0x0000,0x0000,0x0000,0xd54f,0xb16f, +0xb172,0xb170,0x0000,0xd54e,0xb175,0x0000,0xb171,0xd550, +0xb174,0xb173,0x0000,0x0000,0x0000,0xd8f6,0xd8f5,0x0000, +0xb461,0xb45f,0xb460,0xd8f7,0xb74b,0xdd64,0xb74c,0xdd63, +0x0000,0x0000,0xe577,0x0000,0x0000,0xbc78,0xe1c1,0xbc77, +0x0000,0xb9fd,0x0000,0xecde,0xe975,0xc0b2,0xecdd,0xf240, +0xf448,0xf449,0x0000,0xa4df,0x0000,0xa5b2,0x0000,0x0000, +0x0000,0xc97b,0x0000,0x0000,0xa7d2,0xa7d4,0x0000,0xc9e2, +0xcad8,0xcad7,0xcad6,0x0000,0xc9e1,0xc9e0,0xa6a4,0xa7d3, +0xa7d1,0xa6a3,0x0000,0x0000,0x0000,0xa9bd,0xcc78,0x0000, +0xa9be,0xcadd,0x0000,0xcadf,0xcade,0xcc79,0x0000,0x0000, +0xcada,0x0000,0xa7d8,0xa7d6,0x0000,0xcad9,0xcadb,0xcae1, +0x0000,0xa7d5,0x0000,0xcadc,0xcae5,0xa9c0,0x0000,0xcae2, +0xa7d7,0x0000,0xcae0,0xcae3,0x0000,0xa9bf,0x0000,0xa9c1, +0xcae4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xccaf,0xcca2,0xcc7e,0xccae,0xcca9,0xabe7,0xa9c2, +0xccaa,0xccad,0xabe3,0xccac,0xa9c3,0xa9c8,0xa9c6,0xcca3, +0x0000,0xcc7c,0xcca5,0xa9cd,0xccb0,0xabe4,0xcca6,0x0000, +0xabe5,0xa9c9,0xcca8,0x0000,0xcecd,0xabe6,0xcc7b,0xa9ca, +0xabe8,0xa9cb,0xa9c7,0xa9cc,0xcca7,0xcc7a,0xccab,0xa9c4, +0x0000,0x0000,0xcc7d,0xcca4,0xcca1,0xa9c5,0x0000,0xcebf, +0x0000,0xcec0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xceca,0xd1a1,0xcecb,0xabee,0xcece,0xcec4,0xabed,0xcec6, +0x0000,0xcec7,0x0000,0x0000,0xcec9,0xabe9,0x0000,0x0000, +0xaea3,0x0000,0xf9da,0xcec5,0xcec1,0xaea4,0x0000,0x0000, +0xcecf,0xae7e,0xd17d,0xcec8,0x0000,0xd17c,0xcec3,0xcecc, +0x0000,0x0000,0xabec,0xaea1,0xabf2,0xaea2,0xced0,0xd17e, +0xabeb,0xaea6,0xabf1,0xabf0,0xabef,0xaea5,0xced1,0xaea7, +0xabea,0x0000,0xcec2,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb176, +0xd1a4,0xd1a6,0x0000,0xd1a8,0xaea8,0xaeae,0xd553,0xd1ac, +0xd1a3,0xb178,0xd551,0x0000,0xaead,0xaeab,0xd1ae,0x0000, +0xd552,0x0000,0xd1a5,0x0000,0xaeac,0xd1a9,0xaeaf,0xd1ab, +0x0000,0x0000,0xaeaa,0xd1aa,0xd1ad,0xd1a7,0x0000,0xaea9, +0xb179,0x0000,0xd1a2,0xb177,0x0000,0x0000,0x0000,0x0000, +0xb17a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd555,0xd55e,0xb464,0x0000,0xb17c,0xb1a3,0xb465,0xd560, +0xb1aa,0xd8f9,0xd556,0xb1a2,0xb1a5,0xb17e,0xd554,0xd562, +0xd565,0xd949,0x0000,0xd563,0xd8fd,0xb1a1,0xb1a8,0xb1ac, +0xd55d,0xd8f8,0xd561,0xb17b,0xd8fa,0xd564,0xd8fc,0xd559, +0x0000,0xb462,0x0000,0xd557,0xd558,0xb1a7,0x0000,0x0000, +0xb1a6,0xd55b,0xb1ab,0xd55f,0xb1a4,0xd55c,0x0000,0xb1a9, +0xb466,0xb463,0xd8fb,0x0000,0xd55a,0x0000,0xb17d,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xb46b,0xb46f,0xd940,0xb751,0xb46d,0xd944,0xb471,0xdd65, +0xd946,0xb753,0xb469,0xb46c,0xd947,0x0000,0xd948,0xd94e, +0xb473,0xb754,0x0000,0xd94a,0xd94f,0xd943,0xb75e,0x0000, +0xb755,0xb472,0xd941,0xd950,0x0000,0xb75d,0xb470,0xb74e, +0xd94d,0x0000,0xb474,0xd945,0xd8fe,0xb46a,0xd942,0x0000, +0xd94b,0x0000,0xb74d,0xb752,0xb467,0xd94c,0x0000,0xb750, +0x0000,0x0000,0x0000,0xb468,0x0000,0x0000,0x0000,0xb75c, +0xe1c3,0xdd70,0x0000,0xdd68,0xe1c2,0x0000,0xdd6c,0xdd6e, +0x0000,0x0000,0xdd6b,0x0000,0xb75b,0x0000,0xdd6a,0xb75f, +0x0000,0x0000,0x0000,0xe1d2,0x0000,0x0000,0xb75a,0xba40, +0xdd71,0xe1c4,0x0000,0x0000,0xb758,0xdd69,0xdd6d,0xb9fe, +0xb74f,0xdd66,0xdd67,0xba41,0xb757,0xb759,0xb756,0xdd6f, +0x0000,0x0000,0xe1c8,0xe1c9,0xe1ce,0xbc7d,0xe1d5,0x0000, +0xba47,0x0000,0xba46,0xe1d0,0x0000,0xbc7c,0xe1c5,0xba45, +0x0000,0xe1d4,0xba43,0xba44,0x0000,0xe1d1,0xe5aa,0xbc7a, +0xb46e,0x0000,0xe1d3,0xbca3,0xe1cb,0x0000,0xbc7b,0x0000, +0xbca2,0xe1c6,0xe1ca,0xe1c7,0xe1cd,0xba48,0xbc79,0xba42, +0x0000,0xe57a,0xe1cf,0x0000,0xbca1,0x0000,0xbca4,0x0000, +0xe1cc,0x0000,0xbc7e,0xe579,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe57e,0xbece,0xe578,0xe9a3,0xe5a9,0xbca8,0x0000, +0xbca6,0xbecc,0xe5a6,0xe5a2,0xbcac,0x0000,0xe978,0x0000, +0x0000,0x0000,0xbcaa,0xe5a1,0x0000,0xe976,0x0000,0xe5a5, +0x0000,0xe5a8,0xe57d,0x0000,0xbcab,0x0000,0x0000,0xbca5, +0xe977,0xbecd,0xe5a7,0xbca7,0xbca9,0xe5a4,0xbcad,0xe5a3, +0xe57c,0xe57b,0xbecb,0xe5ab,0xe97a,0xece0,0xbed0,0x0000, +0xe9a2,0x0000,0xe97e,0x0000,0xece1,0x0000,0xbed1,0xe9a1, +0x0000,0xe97c,0xc0b4,0xecdf,0x0000,0xe979,0xe97b,0xc0b5, +0xbed3,0xc0b3,0xbed2,0xc0b7,0xe97d,0xbecf,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xefcf,0x0000, +0xefc7,0x0000,0x0000,0x0000,0x0000,0x0000,0xece7,0xefc8, +0xece3,0x0000,0x0000,0xc256,0xece5,0xece4,0xc0b6,0xece2, +0xece6,0xefd0,0xefcc,0xefce,0x0000,0xefc9,0xefca,0x0000, +0xefcd,0xefcb,0xc367,0x0000,0x0000,0xc36a,0xc369,0xc368, +0xc461,0xf44a,0xc462,0xf241,0xc4df,0xf5cc,0xc4e0,0xc574, +0xc5ca,0xf7d9,0x0000,0xf7da,0xf7db,0x0000,0x0000,0xf9ba, +0xa4e0,0xc97c,0xa5b3,0x0000,0xa6a6,0xa6a7,0xa6a5,0x0000, +0xa6a8,0xa7da,0xa7d9,0x0000,0xccb1,0xa9cf,0xa9ce,0x0000, +0x0000,0xd1af,0xb1ad,0xb1ae,0x0000,0x0000,0x0000,0xb475, +0xdd72,0xb760,0xb761,0xdd74,0xdd76,0xdd75,0x0000,0xe1d7, +0x0000,0xe1d6,0xba49,0xe1d8,0x0000,0xe5ac,0xbcae,0x0000, +0xbed4,0x0000,0xc0b8,0xc257,0xc0b9,0x0000,0xa4e1,0x0000, +0x0000,0x0000,0xcae6,0x0000,0x0000,0xccb2,0xa9d1,0xa9d0, +0xa9d2,0xabf3,0xced2,0xced3,0x0000,0x0000,0xd1b0,0xaeb0, +0xb1af,0xb476,0xd951,0xa4e2,0x0000,0xa47e,0xa4e3,0x0000, +0xc97d,0xa5b7,0xa5b6,0xa5b4,0xa5b5,0x0000,0x0000,0x0000, +0xa6ab,0xc9e9,0xc9eb,0xa6aa,0xc9e3,0x0000,0xc9e4,0x0000, +0xc9ea,0xc9e6,0xc9e8,0xa6a9,0xc9e5,0xc9ec,0xc9e7,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xa7e1,0xa7ea,0xa7e8, +0xcaf0,0xcaed,0xcaf5,0xa7e6,0xcaf6,0x0000,0xa7df,0xcaf3, +0x0000,0xa7e5,0xcaef,0xcaee,0xa7e3,0xcaf4,0xa7e4,0xa9d3, +0xa7de,0xcaf1,0x0000,0xcae7,0xa7db,0x0000,0xa7ee,0xcaec, +0xcaf2,0xa7e0,0xa7e2,0x0000,0xcae8,0x0000,0xcae9,0xcaea, +0x0000,0xa7ed,0xa7e7,0xa7ec,0xcaeb,0xa7eb,0xa7dd,0xa7dc, +0xa7e9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa9e1,0xccbe,0xccb7,0xa9dc,0xa9ef,0xccb3,0xccba,0xccbc, +0xccbf,0xa9ea,0x0000,0xccbb,0xccb4,0xa9e8,0xccb8,0x0000, +0xccc0,0xa9d9,0x0000,0xccbd,0xa9e3,0xa9e2,0xccb6,0xa9d7, +0x0000,0x0000,0xa9d8,0x0000,0xa9d6,0x0000,0xa9ee,0xa9e6, +0xa9e0,0xa9d4,0xccb9,0xa9df,0xa9d5,0xa9e7,0xa9f0,0xced4, +0xa9e4,0xccb5,0xa9da,0xa9dd,0xa9de,0x0000,0xa9ec,0xa9ed, +0xa9eb,0xa9e5,0xa9e9,0xa9db,0xabf4,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xceda,0xac41,0xabf8,0xabfa,0xac40, +0xcee6,0xabfd,0xd1b1,0xaeb1,0xac43,0xced7,0xcedf,0xabfe, +0xcede,0xcedb,0xcee3,0xcee5,0xabf7,0xabfb,0xac42,0xaeb3, +0xcee0,0xabf9,0xac45,0xced9,0x0000,0x0000,0x0000,0xabfc, +0xaeb2,0xabf6,0x0000,0xced6,0xcedd,0xced5,0xced8,0xcedc, +0xd1b2,0xac44,0x0000,0xcee1,0xcee2,0xcee4,0xabf5,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xaec1,0xd1be,0xaebf,0xaec0,0xd1b4,0xd1c4,0x0000,0xaeb6, +0x0000,0x0000,0xd566,0xd1c6,0xd1c0,0x0000,0xd1b7,0x0000, +0xd1c9,0xd1ba,0xaebc,0xd57d,0xd1bd,0xaebe,0xaeb5,0x0000, +0xd1cb,0xd1bf,0xaeb8,0xd1b8,0xd1b5,0xd1b6,0xaeb9,0xd1c5, +0xd1cc,0xaebb,0xd1bc,0xd1bb,0xaec3,0xaec2,0xaeb4,0xaeba, +0xaebd,0xd1c8,0x0000,0x0000,0xd1c2,0xaeb7,0xd1b3,0xd1ca, +0xd1c1,0xd1c3,0xd1c7,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd567,0x0000,0xb1b7, +0xb1cb,0xb1ca,0x0000,0xb1bf,0x0000,0xd579,0xd575,0xd572, +0xd5a6,0xb1ba,0xb1b2,0x0000,0x0000,0xd577,0xb4a8,0xb1b6, +0xd5a1,0x0000,0xb1cc,0xb1c9,0xd57b,0xd56a,0x0000,0x0000, +0xb1c8,0xd5a3,0xd569,0xb1bd,0xb1c1,0xd5a2,0x0000,0xd573, +0xb1c2,0xb1bc,0xd568,0x0000,0xb478,0xd5a5,0xd571,0xb1c7, +0xd574,0xd5a4,0xb1c6,0x0000,0xd952,0x0000,0xb1b3,0xd56f, +0xb1b8,0xb1c3,0x0000,0xb1be,0xd578,0xd56e,0xd56c,0xd57e, +0xb1b0,0xb1c4,0xb1b4,0xb477,0xd57c,0xb1b5,0x0000,0xb1b1, +0xb1c0,0xb1bb,0xb1b9,0xd570,0xb1c5,0xd56d,0xd57a,0xd576, +0xd954,0xd953,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd56b,0xd964,0x0000, +0xb47a,0x0000,0xd96a,0xd959,0xd967,0xdd77,0xb47d,0xd96b, +0xd96e,0xb47c,0xd95c,0xd96d,0xd96c,0xb47e,0xd955,0xb479, +0xb4a3,0x0000,0xb4a1,0xd969,0x0000,0xd95f,0xb4a5,0xd970, +0xd968,0xd971,0xb4ad,0xb4ab,0xd966,0xd965,0x0000,0xd963, +0xd95d,0xb4a4,0x0000,0xb4a2,0xd1b9,0xd956,0x0000,0xddb7, +0xd957,0xb47b,0xb4aa,0xdd79,0x0000,0xb4a6,0xb4a7,0xd958, +0xd96f,0xdd78,0xd960,0xd95b,0xb4a9,0xd961,0xd95e,0x0000, +0x0000,0xb4ae,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x6400 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb770,0x0000, +0x0000,0xdd7c,0xddb1,0xddb6,0xddaa,0xb76c,0xddbb,0xb769, +0xdd7a,0x0000,0xdd7b,0xb762,0xb76b,0xdda4,0xb76e,0xb76f, +0xdda5,0x0000,0xddb2,0xddb8,0xb76a,0x0000,0xb764,0xdda3, +0xdd7d,0xddba,0xdda8,0xdda9,0xdd7e,0xddb4,0xddab,0xddb5, +0xddad,0x0000,0xb765,0xe1d9,0xb768,0xb766,0xddb9,0xddb0, +0xddac,0x0000,0x0000,0xdda1,0xba53,0xddaf,0xb76d,0xdda7, +0x0000,0xdda6,0x0000,0x0000,0x0000,0xb767,0xb763,0xe1ee, +0xddb3,0xddae,0x0000,0xdda2,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe1e9,0x0000,0xe1da,0xe1e5,0x0000, +0xe1ec,0xba51,0xb4ac,0xe1ea,0xba4c,0x0000,0x0000,0x0000, +0xba4b,0xe1f1,0x0000,0xe1db,0xe1e8,0xe1dc,0xe1e7,0xba4f, +0xe1eb,0xd962,0x0000,0x0000,0x0000,0xe1f2,0xe1e3,0xba52, +0xe5ba,0xbcaf,0x0000,0xe1f0,0xe1ef,0xba54,0xe5ad,0xbcb0, +0xe5ae,0x0000,0xe1df,0xe1e0,0xe1dd,0xe1e2,0xe1de,0xe1f3, +0xba4e,0xbcb1,0xba50,0xba55,0x0000,0xe1e1,0x0000,0xe1ed, +0x0000,0x0000,0xe1e6,0x0000,0x0000,0xe5b1,0x0000,0xba4a, +0xbcb4,0xe9aa,0xe5b6,0xe5b5,0xe5b7,0x0000,0x0000,0xe5b4, +0xbcb5,0x0000,0xbcbb,0xbcb8,0x0000,0xbcb9,0xe5af,0xe5b2, +0xe5bc,0xbcc1,0xbcbf,0x0000,0xe5b3,0xd95a,0xbcb2,0xe5b9, +0xe5b0,0x0000,0xbcc2,0xe5b8,0xba4d,0xbcb7,0xe1e4,0x0000, +0x0000,0xbcba,0x0000,0xbcbe,0xbcc0,0xbcbd,0xbcbc,0x0000, +0xbcb6,0xe5bb,0xbcb3,0xbcc3,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xbed8,0xbed9,0xe9a9,0xbee2,0xbedf, +0x0000,0xbed6,0xbedd,0xe9ab,0xbedb,0xbed5,0x0000,0xbedc, +0x0000,0xe9a8,0xc0bb,0xbed7,0x0000,0xbede,0xc0ba,0xe9a7, +0xe9a6,0x0000,0xbee0,0x0000,0xbee1,0x0000,0xe9a5,0xe9a4, +0xc0bc,0xe9ae,0xbeda,0xe9ac,0x0000,0x0000,0x0000,0x0000, +0xc0bd,0x0000,0xc0c2,0xecea,0xecec,0x0000,0xc0bf,0x0000, +0xeced,0xece9,0x0000,0xeceb,0xc0c0,0xc0c3,0x0000,0xece8, +0xc0be,0xc0c1,0xc259,0xe9ad,0xc258,0x0000,0x0000,0xc25e, +0xefd4,0x0000,0xc25c,0xc25d,0xefd7,0xefd3,0xc25a,0xefd1, +0xc36b,0xefd5,0x0000,0xefd6,0xefd2,0x0000,0xc25b,0xf242, +0x0000,0xf245,0x0000,0x0000,0xf246,0xf244,0xf247,0xc36c, +0xf243,0x0000,0x0000,0xf44e,0xc464,0xf44d,0xf44c,0xf44b, +0xc463,0xc465,0x0000,0xf5cd,0xc4e2,0xc4e1,0x0000,0x0000, +0xf6e1,0xf6e0,0xf6e3,0xc5cb,0xc575,0xf7dd,0xf6e2,0x0000, +0x0000,0xf7dc,0xc5cd,0xc5cc,0xc5f3,0xf8a9,0xf8ef,0xa4e4, +0x0000,0x0000,0xd972,0xe9af,0x0000,0x0000,0xa6ac,0xcaf7, +0xa7f1,0xa7ef,0x0000,0xa7f0,0x0000,0xccc1,0xa9f1,0xac46, +0x0000,0xcee7,0x0000,0xcee8,0x0000,0xac47,0xd1ce,0x0000, +0xaec4,0xaec5,0xd1cd,0x0000,0x0000,0x0000,0x0000,0xb1d3, +0x0000,0xb1cf,0x0000,0xd5a7,0xb1d6,0xb1d5,0xb1ce,0xb1d1, +0xb1d4,0xb1d0,0x0000,0x0000,0xd976,0xb1cd,0xb4af,0x0000, +0x0000,0x0000,0xb4b1,0xb4b2,0xd975,0xd978,0xb4b0,0xd973, +0xd977,0x0000,0xd974,0x0000,0xb771,0x0000,0x0000,0xddbc, +0x0000,0x0000,0xba56,0xe1f4,0xbee3,0xbcc4,0xe5bd,0xbcc5, +0xbcc6,0xe5bf,0xe5be,0xe5c0,0xe9b1,0x0000,0x0000,0xe9b0, +0xecef,0xecee,0xc0c4,0xc0c5,0xf248,0x0000,0x0000,0xa4e5, +0x0000,0x0000,0x0000,0x0000,0xd979,0x0000,0x0000,0x0000, +0xb4b4,0xb4b3,0xddbd,0x0000,0xefd8,0xc4e3,0xf7de,0xa4e6, +0x0000,0xaec6,0x0000,0xb1d8,0xb1d7,0xd97a,0xd97b,0xb772, +0xe1f5,0xba57,0xe9b2,0x0000,0xa4e7,0xa5b8,0x0000,0xa9f2, +0xccc2,0x0000,0xcee9,0xac48,0xb1d9,0x0000,0xd97c,0xb4b5, +0xb773,0x0000,0xe5c1,0xe5c2,0x0000,0x0000,0xecf0,0xc25f, +0xf8f0,0xa4e8,0x0000,0xccc3,0xa9f3,0xac49,0x0000,0xceea, +0x0000,0xaec7,0xd1d2,0xd1d0,0xd1d1,0xaec8,0xd1cf,0x0000, +0x0000,0x0000,0x0000,0xb1db,0xb1dc,0xd5a8,0xb1dd,0xb1da, +0xd97d,0x0000,0xd97e,0xddbe,0x0000,0x0000,0xba59,0xba58, +0x0000,0x0000,0xecf1,0xefd9,0x0000,0xf24a,0xf249,0xf44f, +0x0000,0xc95e,0xac4a,0x0000,0x0000,0xa4e9,0xa5b9,0x0000, +0xa6ae,0xa6ad,0x0000,0x0000,0xa6af,0xa6b0,0xc9ee,0xc9ed, +0xcaf8,0xa7f2,0xcafb,0xcafa,0xcaf9,0xcafc,0x0000,0x0000, +0x0000,0x0000,0xa9f4,0xccc9,0xccc5,0xccce,0x0000,0x0000, +0xa9fb,0x0000,0xa9f9,0xccca,0xccc6,0xcccd,0xa9f8,0xaa40, +0xccc8,0xccc4,0xa9fe,0xcccb,0xa9f7,0xcccc,0xa9fa,0xa9fc, +0xccd0,0xcccf,0xccc7,0xa9f6,0xa9f5,0xa9fd,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xceef,0xcef5,0x0000,0xac50, +0xac4d,0xceec,0xcef1,0x0000,0xac53,0xac4b,0xcef0,0xac4e, +0xac51,0x0000,0x0000,0xcef3,0x0000,0xac4c,0xcef8,0xac4f, +0x0000,0xac52,0xceed,0xcef2,0xcef6,0xceee,0xceeb,0x0000, +0x0000,0xcef7,0xcef4,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xaed0,0xaec9,0xaecc,0x0000,0xaecf,0x0000,0xd1d5, +0x0000,0xaeca,0xd1d3,0x0000,0xaece,0x0000,0x0000,0xaecb, +0x0000,0xd1d6,0xaecd,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xd5ac,0xb1df,0xd5ab,0xd5ad,0xb1de,0xb1e3,0xd1d4, +0x0000,0xd5aa,0xd5ae,0x0000,0xb1e0,0xd5a9,0xb1e2,0x0000, +0xb1e1,0x0000,0xd9a7,0x0000,0xd9a2,0x0000,0xb4b6,0xb4ba, +0xb4b7,0xd9a5,0xd9a8,0x0000,0xb4b8,0x0000,0xb4b9,0xb4be, +0xddc7,0xd9a6,0xb4bc,0xd9a3,0xd9a1,0x0000,0xb4bd,0x0000, +0xd9a4,0x0000,0x0000,0x0000,0xb779,0x0000,0xddbf,0xb776, +0xb777,0xb775,0xddc4,0xddc3,0xddc0,0xb77b,0x0000,0x0000, +0xddc2,0xb4bb,0x0000,0x0000,0xddc6,0xddc1,0xb778,0xb774, +0xb77a,0xddc5,0x0000,0x0000,0x0000,0xba5c,0x0000,0xe1f8, +0xe1f7,0xe1f6,0xba5a,0x0000,0x0000,0x0000,0x0000,0x0000, +0xba5b,0xe5c5,0xe5c8,0xbcc8,0x0000,0x0000,0xbcc7,0xe5c9, +0xe5c4,0xbcca,0xe5c6,0x0000,0xbcc9,0xe5c3,0x0000,0xe5c7, +0xbee9,0xbee6,0xe9bb,0xe9ba,0x0000,0xe9b9,0xe9b4,0x0000, +0xe9b5,0x0000,0x0000,0x0000,0xbee7,0x0000,0xbee4,0xbee8, +0xe9b3,0xbee5,0xe9b6,0xe9b7,0xe9bc,0x0000,0x0000,0xe9b8, +0x0000,0x0000,0xecf2,0x0000,0x0000,0x0000,0xc0c7,0x0000, +0xefdc,0xc0c6,0xefda,0xefdb,0xc260,0xc36e,0xf24b,0x0000, +0xc36d,0x0000,0x0000,0xf451,0xf452,0x0000,0xc466,0x0000, +0xf450,0xc4e4,0x0000,0xf7df,0xc5ce,0xf8aa,0xf8ab,0x0000, +0xa4ea,0x0000,0xa6b1,0xa6b2,0xa7f3,0x0000,0xccd1,0xac54, +0xaed1,0xb1e4,0x0000,0x0000,0xb0d2,0x0000,0xb4bf,0xb4c0, +0xb3cc,0xd9a9,0x0000,0xb77c,0xe1fa,0xe1f9,0x0000,0x0000, +0xa4eb,0xa6b3,0xccd2,0xaa42,0x0000,0xaa41,0x0000,0xcef9, +0xcefa,0x0000,0xd1d7,0xd1d8,0xaed2,0xaed3,0x0000,0xaed4, +0xd5af,0x0000,0x0000,0xb1e6,0x0000,0xb4c2,0x0000,0xb4c1, +0xddc8,0xdf7a,0xe1fb,0xe9bd,0x0000,0x0000,0xc261,0xc467, +0xa4ec,0x0000,0xa5bc,0xa5bd,0xa5bb,0xa5be,0xa5ba,0x0000, +0x0000,0xa6b6,0x0000,0xc9f6,0xa6b5,0xa6b7,0x0000,0x0000, +0xc9f1,0xc9f0,0xc9f3,0xc9f2,0xc9f5,0xa6b4,0xc9ef,0xc9f4, +0x0000,0x0000,0x0000,0x0000,0x0000,0xcafd,0xa7fd,0xcafe, +0xcb43,0xa7fc,0x0000,0xcb47,0xcb42,0xcb45,0xa7f5,0xa7f6, +0xa7f7,0xa7f8,0x0000,0xa840,0x0000,0xcb41,0xa7fa,0xa841, +0x0000,0xcb40,0xcb46,0x0000,0xa7f9,0xcb44,0xa7fb,0xa7f4, +0xa7fe,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xaa57,0x0000,0xccd4,0xaa43,0x0000,0xaa4d, +0xaa4e,0xaa46,0xaa58,0xaa48,0xccdc,0xaa53,0xccd7,0xaa49, +0xcce6,0xcce7,0xccdf,0xccd8,0xaa56,0xcce4,0xaa51,0xaa4f, +0x0000,0xcce5,0x0000,0xcce3,0xccdb,0xccd3,0xccda,0xaa4a, +0x0000,0xaa50,0x0000,0xaa44,0xccde,0xccdd,0xccd5,0x0000, +0xaa52,0xcce1,0xccd6,0xaa55,0xcce8,0xaa45,0x0000,0xaa4c, +0xccd9,0xcce2,0xaa54,0x0000,0xaa47,0xaa4b,0x0000,0xcce0, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcf5b,0xac5c, +0xac69,0x0000,0xcf56,0xcf4c,0xac62,0xcf4a,0xac5b,0xcf45, +0xac65,0xcf52,0xcefe,0xcf41,0x0000,0x0000,0x0000,0x0000, +0xcf44,0xcefb,0xcf51,0xcf61,0xac60,0xcf46,0xcf58,0x0000, +0xcefd,0xcf5f,0xcf60,0xcf63,0xcf5a,0xcf4b,0xcf53,0xac66, +0xac59,0xac61,0xac6d,0xac56,0xac58,0x0000,0x0000,0x0000, +0xcf43,0xac6a,0xac63,0xcf5d,0xcf40,0xac6c,0xac67,0xcf49, +0x0000,0x0000,0xac6b,0xcf50,0xcf48,0xac64,0xcf5c,0xcf54, +0x0000,0xac5e,0xcf62,0xcf47,0xac5a,0xcf59,0xcf4f,0xac5f, +0xcf55,0xac57,0xcefc,0xac68,0xaee3,0xac5d,0xcf4e,0xcf4d, +0xcf42,0x0000,0xcf5e,0x0000,0xcf57,0x0000,0x0000,0xac55, +/* 0x6800 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd1ec,0xaeea,0xd1ed,0x0000,0xd1e1,0xaedf, +0xaeeb,0x0000,0xd1da,0x0000,0xd1e3,0xd1eb,0x0000,0xd1d9, +0xd1f4,0xaed5,0x0000,0x0000,0x0000,0xd1f3,0xd1ee,0x0000, +0xd1ef,0xaedd,0xaee8,0xd1e5,0x0000,0xd1e6,0xd1f0,0xd1e7, +0x0000,0xd1e2,0xd1dc,0xd1dd,0xd1ea,0xd1e4,0x0000,0x0000, +0xaed6,0xaeda,0xd1f2,0xd1de,0xaee6,0xaee2,0x0000,0x0000, +0xaee5,0xaeec,0xaedb,0xaee7,0xd1e9,0xaee9,0xaed8,0x0000, +0xaed7,0xd1db,0x0000,0xd1df,0xaee0,0xd1f1,0xd1e8,0xd1e0, +0xaee4,0xaee1,0x0000,0xaed9,0xaedc,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd5c4,0x0000,0xd5b4,0xd5b5,0xd5b9, +0x0000,0xd5c8,0xd5c5,0x0000,0xd5be,0xd5bd,0xb1ed,0xd5c1, +0xd5d0,0xd5b0,0x0000,0xd5d1,0xd5c3,0xd5d5,0xd5c9,0xb1ec, +0xd5c7,0xb1e7,0xb1fc,0xb1f2,0x0000,0xb1f6,0xb1f5,0xd5b1, +0x0000,0xd5ce,0xd5d4,0xd5cc,0xd5d3,0x0000,0x0000,0xd5c0, +0xd5b2,0xd5d2,0xd5c2,0xb1ea,0xb1f7,0x0000,0xd5cb,0xb1f0, +0x0000,0x0000,0x0000,0xd5ca,0xd5b3,0xb1f8,0x0000,0xb1fa, +0xd5cd,0xb1fb,0xb1e9,0xd5ba,0xd5cf,0x0000,0x0000,0xb1ef, +0xb1f9,0xd5bc,0xd5c6,0xd5b7,0xd5bb,0xb1f4,0xd5b6,0xb1e8, +0xb1f1,0xb1ee,0xd5bf,0xaede,0xd9c0,0xb1eb,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xb1f3,0x0000,0xd9c3,0xd9d9, +0xd9ce,0xb4d6,0x0000,0xb4d1,0xd9bd,0xb4d2,0xd9cd,0x0000, +0xd9c6,0xd9d3,0xb4ce,0xd9ab,0xd9d5,0xb4c4,0xd9b3,0xb4c7, +0xb4c6,0x0000,0xb4d7,0x0000,0xd9ad,0xd9cf,0xd9d0,0xb4c9, +0xb4c5,0xd9bb,0x0000,0xb4d0,0xd9b6,0x0000,0xd9d1,0xb4cc, +0xd9c9,0xd9d6,0xd9b0,0xd9b5,0xd9af,0x0000,0xb4cb,0xd9c2, +0xddde,0xd9b1,0xb4cf,0xd9ba,0xd9d2,0xb4ca,0xd9b7,0xd9b4, +0xd9c5,0xb4cd,0xb4c3,0xb4d9,0xd9c8,0xd9c7,0x0000,0x0000, +/* 0x6900 */ +0x0000,0x0000,0x0000,0x0000,0xd9ac,0xb4c8,0xd9d4,0xd9bc, +0xd9be,0x0000,0xd9cb,0xd9ca,0xd9aa,0xb4d3,0xb4d5,0xd9b2, +0xd9b9,0xd9c1,0xb4d4,0xd9b8,0xd9c4,0xd9d7,0x0000,0xd9cc, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd9d8,0x0000,0x0000, +0x0000,0x0000,0xd9ae,0x0000,0x0000,0x0000,0x0000,0xddf2, +0xb7a6,0x0000,0xddf0,0xdddb,0xdde0,0xddd9,0x0000,0xddec, +0xddcb,0xddd2,0x0000,0xddea,0xddf4,0xdddc,0x0000,0xddcf, +0xdde2,0xdde7,0xddd3,0x0000,0xdde4,0xddd0,0x0000,0x0000, +0xddd7,0xddd8,0xb7a8,0xddeb,0xdde9,0x0000,0xddcc,0xddee, +0x0000,0xddef,0xddf1,0xb7ac,0xb7a4,0x0000,0xd5b8,0xddd4, +0xdde6,0xddd5,0xb7a1,0xb7b1,0xdded,0xb7af,0xb7ab,0xddca, +0xb7a3,0x0000,0xddcd,0xb7b0,0x0000,0xdddd,0xddc9,0x0000, +0xb7a9,0xdde1,0xddd1,0xb7aa,0xddda,0xb77e,0xb4d8,0xdde3, +0xd9bf,0xddce,0x0000,0x0000,0xdde8,0xb7a5,0xdde5,0xb7a2, +0xdddf,0xb7ad,0xddd6,0xddf3,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xb7a7,0xdec6,0x0000,0x0000,0xb7ae,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe24a,0xe248,0x0000, +0xe25e,0xe246,0x0000,0xe258,0xb77d,0xba5f,0xe242,0xe25d, +0x0000,0xe247,0xe255,0xba64,0xba5d,0x0000,0xe25b,0x0000, +0xe240,0xe25a,0x0000,0xba6f,0xe251,0xe261,0xba6d,0xe249, +0xba5e,0xe24b,0xe259,0xba67,0xe244,0xba6b,0xba61,0xe24d, +0xe243,0xe1fc,0x0000,0xe257,0xba68,0xe260,0xe1fd,0xba65, +0x0000,0xe253,0x0000,0xba66,0xe245,0xe250,0xe24c,0xe24e, +0x0000,0xba60,0xe25f,0xba6e,0xe24f,0x0000,0xe262,0x0000, +0x0000,0xe1fe,0xe254,0xba63,0xba6c,0xba6a,0xe241,0xe256, +0xba69,0x0000,0x0000,0xba62,0xe252,0x0000,0x0000,0x0000, +0x0000,0xe25c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe5d5,0x0000,0xe5d1,0xe5cd,0xe5e1,0xe5de, +0xbccd,0x0000,0x0000,0xe5e5,0xe5d4,0xbcd8,0xe5db,0x0000, +0x0000,0xe5d0,0xe5da,0xbcd5,0xe5ee,0x0000,0xe5eb,0xe5dd, +0xe5ce,0x0000,0x0000,0xe5e2,0xe5e4,0xbcd1,0xe5d8,0xe5d3, +0xe5ca,0xbcce,0xbcd6,0x0000,0xe5e7,0xbcd7,0xe5cb,0xe5ed, +0xe5e0,0xe5e6,0xbcd4,0x0000,0x0000,0xe5e3,0x0000,0xe5ea, +0x0000,0xbcd9,0x0000,0xbcd3,0xe5dc,0xe5cf,0xe5ef,0xe5cc, +0xe5e8,0xbcd0,0x0000,0xe5d6,0x0000,0xe5d7,0xbccf,0xbccc, +0xe5d2,0xbcd2,0x0000,0xbccb,0x0000,0xe5e9,0xe5ec,0xe5d9, +0xe9ca,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe9c2,0x0000,0xe9be,0xbef6,0x0000,0x0000, +0xbeeb,0xbef0,0xbeec,0xe9cc,0xe9d7,0xbeea,0xe9c4,0xe9cd, +0xe5df,0xe9ce,0x0000,0x0000,0xbef1,0x0000,0xe9dd,0xbef5, +0xbef8,0xe9c0,0x0000,0xbef4,0x0000,0xe9db,0xe9dc,0xe9d2, +0xe9d1,0xe9c9,0x0000,0x0000,0xe9d3,0xe9da,0xe9d9,0x0000, +0xbeef,0xbeed,0xe9cb,0xe9c8,0x0000,0xe9c5,0xe9d8,0xbef7, +0xe9d6,0xbef3,0xbef2,0x0000,0xe9d0,0x0000,0xe9bf,0xe9c1, +0xe9c3,0xe9d5,0xe9cf,0xbeee,0x0000,0xe9c6,0x0000,0xe9d4, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe9c7,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc0cf,0xed45, +0xc0c8,0xecf5,0x0000,0xed41,0xc0ca,0xed48,0x0000,0xecfc, +0x0000,0xecf7,0x0000,0x0000,0xed49,0xecf3,0xecfe,0x0000, +0xc0d1,0xed44,0xed4a,0xecfd,0xc0c9,0xed40,0xecf4,0xc0d0, +0x0000,0x0000,0xed47,0xecf9,0xc0cc,0x0000,0xecfb,0xecf8, +0xc0d2,0xecfa,0xc0cb,0xc0ce,0xed43,0xecf6,0xed46,0x0000, +0xed42,0x0000,0x0000,0x0000,0xc263,0xefe7,0xc268,0xc269, +0x0000,0x0000,0x0000,0xc262,0xefe6,0x0000,0xefe3,0xefe4, +0xc266,0xefde,0xefe2,0xc265,0x0000,0xefdf,0x0000,0x0000, +0x0000,0x0000,0xc267,0xc264,0x0000,0xefdd,0xefe1,0xefe5, +0x0000,0x0000,0x0000,0xf251,0xf24e,0xf257,0x0000,0xf256, +0xf254,0xf24f,0x0000,0xc372,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf250,0xc371,0xc0cd,0xf253,0xc370,0xf258,0xf252, +0xf24d,0xefe0,0x0000,0x0000,0x0000,0xc36f,0x0000,0xf24c, +0xf456,0x0000,0xf455,0xf255,0xc468,0x0000,0xf459,0xf45a, +0xf454,0xf458,0x0000,0xf453,0x0000,0x0000,0x0000,0x0000, +0xf5d1,0xf457,0xc4e7,0xc4e5,0xf5cf,0x0000,0x0000,0x0000, +0xf5d2,0x0000,0xf5ce,0xf5d0,0xc4e6,0x0000,0x0000,0x0000, +0xf6e5,0xf6e6,0xc576,0xf6e4,0x0000,0x0000,0x0000,0xf7e2, +0xc5cf,0xf7e0,0xf7e1,0xf8ac,0x0000,0x0000,0xc656,0xf8f3, +0xf8f1,0xf8f2,0xf8f4,0x0000,0x0000,0x0000,0xf9bb,0x0000, +0xa4ed,0xa6b8,0x0000,0xaa59,0x0000,0xcce9,0x0000,0x0000, +0xcf64,0x0000,0x0000,0x0000,0xd1f5,0xd1f7,0x0000,0xd1f6, +0x0000,0xd1f8,0xb1fd,0xd5d7,0xd1f9,0x0000,0xd5d6,0xd5d8, +0xd5d9,0xd9da,0xb4db,0xd9db,0xd9dd,0xb4dc,0xb4da,0xd9dc, +0x0000,0xddfa,0xddf8,0xddf7,0x0000,0xddf6,0xddf5,0xb7b2, +0xddf9,0xba70,0xe263,0xe265,0xba71,0xe264,0xbcdb,0x0000, +0xbcda,0xe5f0,0x0000,0x0000,0xe9df,0xe9de,0xe9e0,0x0000, +0x0000,0xbef9,0x0000,0xed4b,0xc0d3,0x0000,0xefe8,0xc26a, +0xf259,0xc577,0xa4ee,0xa5bf,0xa6b9,0xa842,0xaa5a,0xaa5b, +0x0000,0x0000,0xac6e,0x0000,0x0000,0xd1fa,0x0000,0x0000, +0x0000,0x0000,0xb7b3,0x0000,0x0000,0x0000,0xe6d1,0xbefa, +0xc26b,0xa4ef,0x0000,0xa6ba,0x0000,0x0000,0xcceb,0xaa5c, +0xccea,0x0000,0xcf65,0xac6f,0xcf66,0x0000,0xac70,0x0000, +0xd1fc,0xaeee,0xaeed,0x0000,0xd5de,0xd5dc,0xd5dd,0xd5db, +0x0000,0xd5da,0x0000,0x0000,0xd9de,0xd9e1,0xb4de,0xd9df, +0xb4dd,0xd9e0,0x0000,0xddfb,0x0000,0x0000,0xe266,0xe267, +0xe268,0x0000,0xe5f3,0xe5f2,0xbcdc,0xe5f1,0xe5f4,0xe9e1, +0x0000,0x0000,0xe9e2,0xe9e3,0x0000,0xed4c,0xc0d4,0xc26c, +0xf25a,0x0000,0xc4e8,0xc95f,0x0000,0xac71,0xcf67,0xaeef, +0x0000,0x0000,0xb1fe,0x0000,0xb4df,0xd9e2,0x0000,0xb7b5, +0xb7b4,0x0000,0x0000,0xe269,0xe26a,0xbcdd,0xbcde,0xe9e5, +0xe9e4,0xefe9,0xf7e3,0xa4f0,0xc960,0xa5c0,0x0000,0xa843, +0xcb48,0x0000,0xac72,0xb7b6,0xa4f1,0x0000,0xcf68,0xac73, +0xcf69,0x0000,0xc0d5,0xa4f2,0x0000,0x0000,0xccec,0x0000, +0xcf6a,0x0000,0xd242,0xd241,0xd1fe,0x0000,0xd1fd,0xd243, +0xd240,0x0000,0x0000,0xb240,0xb241,0x0000,0x0000,0xb4e0, +0xd9e3,0x0000,0xd9e4,0xd9e5,0x0000,0x0000,0x0000,0xde41, +0xde42,0xde40,0x0000,0xddfd,0xddfe,0xb7b7,0xe26b,0xe5f7, +0xe5f6,0xe5f5,0xe5f8,0xe9e7,0xe9e6,0xbefb,0xe9e8,0x0000, +0xc0d6,0xed4d,0x0000,0xefea,0xf25b,0xf6e7,0x0000,0xa4f3, +0xa5c2,0xa5c1,0x0000,0xaa5d,0xc961,0xc97e,0xa6bb,0x0000, +0xc9f7,0xcb49,0xcb4a,0xaa5e,0x0000,0xcced,0x0000,0xac74, +0xcf6b,0xcf6c,0x0000,0xaef0,0xaef4,0xd244,0xaef3,0xaef1, +0xaef2,0x0000,0xd5df,0xb242,0xb4e3,0x0000,0xb4e1,0xb4e2, +0xd9e6,0x0000,0x0000,0xba72,0xa4f4,0x0000,0xc9a1,0x0000, +0xa5c3,0x0000,0x0000,0xc9a4,0x0000,0x0000,0xa5c6,0xc9a3, +0xa5c5,0xa5c4,0xa844,0xc9a2,0x0000,0x0000,0xc9f8,0x0000, +0x0000,0x0000,0xc9fc,0xc9fe,0xca40,0xa6c5,0xa6c6,0xc9fb, +0xa6c1,0x0000,0xc9f9,0x0000,0xc9fd,0xa6c2,0x0000,0xa6bd, +0x0000,0xa6be,0x0000,0xa6c4,0xc9fa,0xa6bc,0xa845,0xa6bf, +0xa6c0,0xa6c3,0x0000,0x0000,0x0000,0xcb5b,0xcb59,0xcb4c, +0xa851,0xcb53,0xa84c,0xcb4d,0x0000,0xcb55,0x0000,0xcb52, +0xa84f,0xcb51,0xa856,0xcb5a,0xa858,0x0000,0xa85a,0x0000, +0xcb4b,0x0000,0xa84d,0xcb5c,0x0000,0xa854,0xa857,0x0000, +0xcd45,0xa847,0xa85e,0xa855,0xcb4e,0xa84a,0xa859,0xcb56, +0xa848,0xa849,0xcd43,0xcb4f,0xa850,0xa85b,0xcb5d,0xcb50, +0xa84e,0x0000,0xa853,0xccee,0xa85c,0xcb57,0xa852,0x0000, +0xa85d,0xa846,0xcb54,0xa84b,0xcb58,0xcd44,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xaa6a,0xaa7a,0xccf5,0xaa71,0x0000, +0xcd4b,0xaa62,0x0000,0xaa65,0xcd42,0x0000,0xccf3,0xccf7, +0xaa6d,0xaa6f,0xccfa,0xaa76,0xaa68,0xaa66,0xaa67,0xaa75, +0xcd47,0xaa70,0xccf9,0xccfb,0xaa6e,0xaa73,0xccfc,0xcd4a, +0x0000,0xac75,0xaa79,0x0000,0xaa63,0xcd49,0x0000,0xcd4d, +0xccf8,0xcd4f,0xcd40,0xaa6c,0xccf4,0xaa6b,0xaa7d,0xaa72, +0x0000,0xccf2,0xcf75,0xaa78,0xaa7c,0xcd41,0xcd46,0x0000, +0xaa7e,0xaa77,0xaa69,0xaa5f,0x0000,0xaa64,0x0000,0xccf6, +0xaa60,0xcd4e,0x0000,0xccf0,0xccef,0xccfd,0xccf1,0xaa7b, +0xaef5,0xaa74,0xccfe,0xaa61,0x0000,0xaca6,0x0000,0x0000, +0x0000,0xcd4c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcf7c,0xcfa1,0x0000,0xcfa4,0xcf77,0x0000,0x0000,0xcfa7, +0xcfaa,0xcfac,0xcf74,0xac76,0xac7b,0xd249,0xacad,0xcfa5, +0xcfad,0xcf7b,0xcf73,0x0000,0x0000,0x0000,0xd264,0xac7e, +0xcfa2,0xcf78,0xcf7a,0xaca5,0x0000,0xcf7d,0xac7d,0xcf70, +0xcfa8,0x0000,0xcfab,0x0000,0x0000,0xac7a,0x0000,0xaca8, +0xcf6d,0xacaa,0xac78,0xacae,0xcfa9,0xcf6f,0xacab,0xd25e, +0xcd48,0xac7c,0xac77,0xcf76,0xcf6e,0xacac,0xaca4,0xcfa3, +0xaca9,0xaca7,0xcf79,0xaca1,0xcf71,0xaca2,0xaca3,0xcf72, +0xcfa6,0xac79,0xcf7e,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd24c,0xaefd,0xaf43,0x0000,0x0000,0x0000,0xd255,0xd25b, +0xd257,0xd24a,0xd24d,0xd246,0xd247,0xaf4a,0xaefa,0xd256, +0xd25f,0xaf45,0xaef6,0x0000,0xaf40,0xd24e,0xaf42,0xd24f, +0xd259,0x0000,0x0000,0x0000,0xaf44,0xd268,0xd248,0xaefc, +0xaefb,0xaf48,0xd245,0xd266,0xd25a,0xd267,0xd261,0xd253, +0xd262,0x0000,0xd25c,0xd265,0xd263,0xaf49,0xd254,0xaef9, +0xaef8,0xaf41,0xaf47,0xd260,0xaf46,0xd251,0xb243,0x0000, +0xd269,0xd250,0xd24b,0xaefe,0xaf4b,0xaef7,0x0000,0xd258, +0xd25d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xb265,0xd5e1,0xd5e5,0x0000,0xb252,0xb250, +0x0000,0x0000,0xb247,0xd5e3,0xd5e2,0xb25b,0x0000,0xd5e8, +0xb255,0x0000,0xd5fa,0xd647,0xb244,0xd5f7,0xd5f0,0xb267, +0xd5e0,0x0000,0xd5fc,0x0000,0xb264,0xb258,0xb263,0xb24e, +0xd5ec,0xd5fe,0xd5f6,0xb24f,0xb249,0xd645,0x0000,0xd5fd, +0xd640,0xb251,0xb259,0xd642,0xd5ea,0xd5fb,0xd5ef,0xd644, +0xb25e,0xb246,0xb25c,0xd5f4,0xd5f2,0xd5f3,0xb253,0xd5ee, +0xd5ed,0xb248,0xd5e7,0xd646,0xb24a,0xd5f1,0xb268,0x0000, +0xb262,0xd5e6,0xb25f,0xb25d,0xb266,0xd5f8,0xb261,0xd252, +0xd5f9,0xb260,0xd641,0xb245,0xd5f5,0xb257,0xd5e9,0xb256, +0x0000,0xb254,0xb24c,0xb24b,0xd9e7,0xd643,0x0000,0x0000, +0xd5eb,0x0000,0x0000,0xd9fc,0x0000,0xb24d,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xb541,0xb25a,0xb4ee,0xd9f6,0xb4fc,0x0000,0xd9ea, +0xb4eb,0xb4e7,0xda49,0xb4ed,0xb4f1,0xb4ec,0xb4f5,0xda4d, +0xda44,0x0000,0x0000,0xd9f1,0xb4fa,0xb4f4,0xd9fd,0xb4e4, +0xda4a,0xda43,0xb4e8,0xd9f7,0xb4f7,0xda55,0xda56,0x0000, +0xb4e5,0xda48,0xb4f9,0xd9fb,0xd9ed,0xd9ee,0xb4fd,0xd9f2, +0xd9f9,0xd9f3,0x0000,0xb4fb,0xb544,0xd9ef,0xd9e8,0xd9e9, +0x0000,0xd9eb,0xb4ea,0xd9f8,0x0000,0xb4f8,0xb542,0x0000, +0x0000,0xd9fa,0xda53,0xda4b,0xb4e6,0xda51,0xb4f2,0x0000, +0xb4f0,0x0000,0xda57,0xb4ef,0xda41,0xd9f4,0xd9fe,0xb547, +0xda45,0xda42,0xd9f0,0xb543,0xda4f,0xda4c,0xda54,0xb4e9, +0xda40,0xb546,0x0000,0xda47,0x0000,0x0000,0xb4f3,0xb4f6, +0x0000,0xda46,0xb545,0xd9f5,0xd5e4,0x0000,0x0000,0xda50, +0xda4e,0xda52,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd9ec,0xb540,0x0000,0x0000,0x0000,0xde61,0xde60,0xde46, +0xb7bd,0x0000,0xde5f,0xde49,0xde4a,0x0000,0xb7c7,0xde68, +0xb7c2,0xde5e,0x0000,0xde43,0xb7c8,0xb7be,0xde52,0xde48, +0xde4b,0xde63,0xb7b8,0xde6a,0xde62,0xb7c1,0xde57,0xb7cc, +0x0000,0x0000,0xb7cb,0xb7c5,0x0000,0x0000,0xde69,0xb7b9, +0xde55,0xde4c,0xde59,0xde65,0xb7cd,0x0000,0xb7bb,0xde54, +0x0000,0xde4d,0xb7c4,0x0000,0xb7c3,0xde50,0xde5a,0xde64, +0xde47,0xde51,0xb7bc,0xde5b,0xb7c9,0xb7c0,0xde4e,0xb7bf, +0xde45,0xde53,0xde67,0xb4fe,0xbab0,0xde56,0xe26c,0xde58, +0xde66,0xb7c6,0xde4f,0xb7ba,0xb7ca,0xbcf0,0xde44,0x0000, +0xde5d,0x0000,0x0000,0x0000,0xde5c,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe2aa,0xbaad,0xe27d,0xe2a4,0xbaa2, +0x0000,0xe26e,0xbaaf,0x0000,0xba77,0xe26d,0xe2b0,0xbab1, +0xe271,0xe2a3,0x0000,0xe273,0xe2b3,0xe2af,0xba75,0xbaa1, +0xe653,0xbaae,0xba7d,0xe26f,0x0000,0xe2ae,0xbaa3,0xe2ab, +0xe2b8,0xe275,0xe27e,0x0000,0x0000,0xe2b6,0xe2ac,0xba7c, +0x0000,0x0000,0xe27c,0xba76,0xba74,0xbaa8,0x0000,0x0000, +0xe27a,0xe277,0xe278,0x0000,0xe2b2,0x0000,0xe2b7,0xe2b5, +0xba7a,0xe2b9,0xba7e,0xbaa7,0x0000,0xe270,0xe5fa,0xe279, +0x0000,0xba78,0xbaac,0xbaa9,0xba7b,0xe2a5,0xe274,0xbaaa, +0xe2a7,0xbaa4,0xbaa6,0xba73,0x0000,0xe2a9,0xe2a1,0xe272, +0xbaa5,0xe2b1,0xe2b4,0xe27b,0xe2a8,0x0000,0xba79,0xbcdf, +0xe2a6,0xe5f9,0x0000,0xe2ad,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe276,0xe644, +0xe64e,0xbce2,0xe64d,0xe659,0xbce4,0xe64b,0x0000,0xe64f, +0xbcef,0x0000,0xe646,0xbce7,0x0000,0xe652,0xe9f0,0xbcf3, +0xbcf2,0xe654,0xe643,0xe65e,0xbced,0x0000,0xbce3,0xe657, +0x0000,0xe65b,0xe660,0xe655,0xe649,0xbce6,0xbce9,0xbcf1, +0xbcec,0x0000,0xe64c,0xe2a2,0x0000,0x0000,0xe648,0xe65f, +0xbce8,0x0000,0xbceb,0xe661,0xbce0,0xe656,0xe5fb,0xe65c, +0xc0df,0x0000,0xe64a,0x0000,0xbce1,0xe645,0xbce5,0xe5fc, +0xbaab,0xe641,0x0000,0xe65a,0xe642,0xe640,0xbcea,0x0000, +0xe658,0x0000,0xe5fe,0xe651,0xe650,0xe65d,0xe647,0xbcee, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe9f3,0x0000, +0xbf49,0xbefe,0xea40,0xe9eb,0xbf41,0xe9f7,0xbf48,0xbf43, +0xe9f5,0xed4f,0xe9fb,0xea42,0xe9fa,0xe9e9,0xe9f8,0xea44, +0xea46,0xbefd,0xea45,0xbf44,0xbf4a,0x0000,0xbf47,0x0000, +0xe9fe,0xbf46,0xe9f9,0x0000,0xe9ed,0xe9f2,0x0000,0xe9fd, +0xbf45,0xbf42,0xbefc,0xbf40,0xe9f1,0x0000,0xe5fd,0xe9ec, +0xe9ef,0xea41,0xe9f4,0xe9ea,0xed4e,0xea43,0xe9ee,0xe9fc, +0x0000,0x0000,0x0000,0x0000,0xed51,0xc0e3,0x0000,0x0000, +0xc0d7,0x0000,0x0000,0xc0db,0xed53,0xed59,0xed57,0xc0d9, +0xc0da,0xc0e1,0xed5a,0xed52,0xc0dc,0x0000,0xed56,0xed55, +0xed5b,0xc0e2,0x0000,0xc0dd,0xc0e0,0xed54,0xc0e4,0xc0de, +0xc0e5,0xc0d8,0xed58,0x0000,0xed50,0x0000,0x0000,0xeff7, +0x0000,0x0000,0xc271,0xeff4,0xeff6,0x0000,0xc26f,0xeff2, +0xeff3,0xefee,0x0000,0x0000,0xe9f6,0xefef,0xc270,0xefeb, +0x0000,0xc26d,0xeff8,0xc26e,0xefec,0xefed,0xeff1,0xc273, +0x0000,0xc272,0x0000,0x0000,0xeff0,0xc378,0xf25f,0xf265, +0xc379,0xf25c,0xc376,0xc373,0xf267,0xc377,0x0000,0xc374, +0xf25e,0xf261,0xf262,0xf263,0xf266,0x0000,0xeff5,0xf25d, +0xc375,0xf264,0xf268,0xf260,0x0000,0x0000,0x0000,0xf45d, +0xc46a,0xf460,0xc46b,0xf468,0xf45f,0xf45c,0x0000,0xf45e, +0xf462,0xf465,0xf464,0xf467,0xf45b,0x0000,0xc469,0xf463, +0xf466,0xf469,0xf461,0xf5d3,0xf5d4,0xf5d8,0xf5d9,0x0000, +0xf5d6,0xf5d7,0xf5d5,0x0000,0xc4e9,0x0000,0x0000,0x0000, +0x0000,0xc578,0xf6eb,0x0000,0x0000,0xf6e8,0xf6e9,0xf6ea, +0xc579,0x0000,0xf7e5,0xf7e4,0x0000,0xf8af,0xc5f4,0xf8ad, +0xf8b0,0xf8ae,0xf8f5,0xc657,0xc665,0xf9a3,0xf96c,0x0000, +0xf9a2,0xf9d0,0xf9d1,0xa4f5,0x0000,0x0000,0x0000,0x0000, +0xa6c7,0xca41,0x0000,0x0000,0xcb5e,0x0000,0xa85f,0x0000, +0xa862,0x0000,0xcb5f,0x0000,0xa860,0xa861,0x0000,0x0000, +0x0000,0x0000,0xcd58,0xcd5a,0xcd55,0xcd52,0xcd54,0x0000, +0x0000,0x0000,0xaaa4,0x0000,0x0000,0x0000,0xaaa2,0x0000, +0x0000,0xcd56,0xaaa3,0xcd53,0xcd50,0xaaa1,0xcd57,0x0000, +0xcd51,0xaaa5,0xcd59,0x0000,0x0000,0x0000,0x0000,0xcfaf, +0x0000,0xcfb3,0x0000,0x0000,0xacb7,0x0000,0x0000,0x0000, +0x0000,0xcfb6,0x0000,0xacaf,0xacb2,0xacb4,0xacb6,0xacb3, +0xcfb2,0xcfb1,0x0000,0xacb1,0xcfb4,0xcfb5,0x0000,0xcfae, +0xacb5,0x0000,0xacb0,0x0000,0x0000,0x0000,0xcfb0,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd277,0xd278,0xd279, +0xaf50,0x0000,0xaf4c,0xd26e,0x0000,0xd276,0xd27b,0xaf51, +0x0000,0xd26c,0xd272,0xd26b,0xd275,0x0000,0x0000,0xd271, +0xaf4d,0xaf4f,0xd27a,0x0000,0xd26a,0xd26d,0xd273,0x0000, +0xd274,0xd27c,0xd270,0x0000,0xaf4e,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb26d, +0xd64e,0x0000,0x0000,0xd650,0xd64c,0x0000,0xd658,0xd64a, +0xd657,0xb269,0xd648,0xda5b,0xd652,0xb26c,0x0000,0xd653, +0xd656,0x0000,0xd65a,0x0000,0xd64f,0x0000,0xd654,0x0000, +0x0000,0xb26a,0xb26b,0xd659,0xd64d,0xd649,0xd65b,0x0000, +0xd651,0x0000,0x0000,0xd655,0x0000,0x0000,0x0000,0xd64b, +0x0000,0xb548,0xb549,0xda65,0xb54f,0x0000,0xda59,0xda62, +0xda58,0xb54c,0xda60,0xda5e,0x0000,0xda5f,0xb54a,0x0000, +0xda63,0x0000,0x0000,0x0000,0x0000,0x0000,0xda5c,0xda5a, +0xb54b,0xda5d,0xda61,0x0000,0x0000,0x0000,0xb54d,0x0000, +0x0000,0x0000,0xda64,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xde70,0xde77,0xde79,0xdea1,0x0000,0xb7da,0xde6b, +0x0000,0xb7d2,0x0000,0xde7a,0xb7d7,0xdea2,0xb7ce,0x0000, +0xde7d,0x0000,0xde6d,0xde7e,0xde6c,0x0000,0xb7dc,0x0000, +0xde78,0xb7cf,0xdea3,0x0000,0xb7d4,0xde71,0xb7d9,0xde7c, +0xde6f,0xde76,0xde72,0xde6e,0xb7d1,0xb7d8,0xb7d6,0xb7d3, +0xb7db,0xb7d0,0xde75,0x0000,0xb7d5,0x0000,0xb54e,0x0000, +0xde7b,0x0000,0xde73,0x0000,0x0000,0x0000,0x0000,0x0000, +0xde74,0x0000,0x0000,0xe2c1,0x0000,0xbab4,0x0000,0x0000, +0xe2bd,0xe2c3,0xe2bf,0x0000,0xbab6,0xe2be,0xe2c2,0xe2ba, +0x0000,0xe2bc,0xbab5,0x0000,0x0000,0x0000,0x0000,0xe2c0, +0xe2bb,0x0000,0xbab7,0x0000,0xbab2,0x0000,0x0000,0xe2c4, +0x0000,0xbab3,0xe667,0xe664,0xe670,0xe66a,0xe66c,0xbcf4, +0xe666,0xe66e,0x0000,0x0000,0xe66d,0xe66b,0x0000,0xe671, +0xbcf7,0xe668,0xe66f,0x0000,0xbcf5,0x0000,0x0000,0xe663, +0xe665,0xbcf6,0xe662,0xe672,0x0000,0xe669,0x0000,0x0000, +0xea4a,0xbf51,0x0000,0x0000,0xea55,0xea53,0xbf4b,0xea49, +0xea4c,0xea4d,0xea48,0xbf55,0xbf56,0xea47,0xea56,0xea51, +0xbf4f,0xbf4c,0xea50,0xea4e,0x0000,0x0000,0xbf52,0xea52, +0xbf4d,0x0000,0xbf4e,0x0000,0xea4f,0xbf50,0xea4b,0x0000, +0xea54,0xbf53,0xea57,0xea58,0xbf54,0x0000,0x0000,0xc0e7, +0xc0ee,0xed5c,0xed62,0x0000,0xed60,0xc0ea,0xc0e9,0xc0e6, +0xed5e,0x0000,0x0000,0x0000,0xc0ec,0xc0eb,0xc0e8,0x0000, +0xed61,0xed5d,0xed5f,0x0000,0xc0ed,0x0000,0x0000,0x0000, +0xc277,0xeffb,0x0000,0xc274,0xc275,0xeffd,0xc276,0xeffa, +/* 0x7200 */ +0x0000,0xeff9,0xf26c,0xeffc,0x0000,0xf26d,0xc37a,0xf26b, +0x0000,0x0000,0xf26a,0x0000,0xf269,0xc37b,0x0000,0x0000, +0xc46c,0x0000,0x0000,0xf46a,0xf46b,0x0000,0x0000,0x0000, +0x0000,0xf5dc,0xf5db,0xc4ea,0x0000,0xf5da,0xf6ec,0xf6ed, +0x0000,0x0000,0xf7e6,0xf8b1,0x0000,0x0000,0xf8f6,0xf9bc, +0xc679,0xf9c6,0xa4f6,0x0000,0xaaa6,0xaaa7,0x0000,0x0000, +0xacb8,0x0000,0x0000,0x0000,0x0000,0xc0ef,0xa4f7,0x0000, +0xaaa8,0xaf52,0xb7dd,0xa4f8,0x0000,0xb26e,0xbab8,0xc962, +0x0000,0xcfb7,0xd27d,0x0000,0xe2c5,0x0000,0xc0f0,0xa4f9, +0xaaa9,0xcfb8,0xcfb9,0xda66,0xb550,0x0000,0x0000,0xdea4, +0x0000,0x0000,0xb7de,0xe2c6,0x0000,0x0000,0xbcf8,0x0000, +0xc37c,0xa4fa,0xda67,0xa4fb,0x0000,0xa6c9,0xca42,0xa6c8, +0xa865,0xa864,0xa863,0xcb60,0x0000,0x0000,0x0000,0xaaaa, +0x0000,0xaaab,0xcd5b,0x0000,0xcfba,0x0000,0xcfbd,0xacba, +0xcfbb,0x0000,0xacb9,0xcfbc,0xacbb,0x0000,0xd2a2,0xd2a1, +0xd27e,0xaf53,0x0000,0xd65d,0xd65e,0xb26f,0xd65c,0xd65f, +0xb552,0xb270,0x0000,0x0000,0xb551,0xda6b,0xda6a,0x0000, +0xda68,0xda69,0x0000,0xda6c,0xdea6,0xdea5,0xdea9,0x0000, +0xdea8,0xdea7,0xbab9,0xe2c9,0x0000,0xe2c8,0xbaba,0xe2c7, +0xe673,0x0000,0xe674,0xbcf9,0x0000,0xea59,0xea5a,0x0000, +0x0000,0xf272,0xc37d,0xf271,0xf270,0xf26e,0xf26f,0xc4eb, +0xf46c,0xf6ee,0xf8f7,0x0000,0xa4fc,0x0000,0xc9a5,0xa5c7, +0xc9a6,0x0000,0x0000,0x0000,0xca43,0xca44,0x0000,0x0000, +0x0000,0x0000,0xcb66,0x0000,0x0000,0xcb62,0x0000,0xcb61, +0xaaac,0xcb65,0xa867,0xcb63,0xa866,0xcb67,0xcb64,0x0000, +0x0000,0xcd5f,0xcfbe,0xcd5d,0xcd64,0x0000,0xaaad,0x0000, +0xaab0,0xcd65,0xcd61,0x0000,0xcd62,0x0000,0xcd5c,0xaaaf, +0xcd5e,0xaaae,0xcd63,0x0000,0xcd60,0x0000,0x0000,0xcfc2, +0xacbd,0xacbe,0x0000,0xcfc5,0xcfbf,0x0000,0xcfc4,0x0000, +0xcfc0,0xacbc,0xcfc3,0xcfc1,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd2a8,0xd2a5,0x0000,0xd2a7,0xaf58, +0xaf57,0xaf55,0xd2a4,0xd2a9,0xaf54,0xaf56,0xd2a6,0xd667, +0xd2a3,0xd2aa,0x0000,0x0000,0x0000,0x0000,0x0000,0xd662, +0xd666,0x0000,0xd665,0xda6e,0xda79,0x0000,0x0000,0xd668, +0x0000,0xd663,0xda6d,0xb274,0x0000,0x0000,0xb273,0xd661, +0xd664,0xb275,0x0000,0xb272,0xb271,0xd660,0xd669,0x0000, +0x0000,0x0000,0xda70,0xda77,0x0000,0xb554,0xda76,0xda73, +0x0000,0xb556,0x0000,0x0000,0x0000,0xda75,0x0000,0x0000, +0xda6f,0xda71,0xda74,0xda72,0xb555,0xda78,0xb553,0xb7df, +0x0000,0x0000,0xdead,0xdeac,0xdeaa,0x0000,0xb7e2,0xb7e1, +0xdeae,0x0000,0xdeab,0xe2ca,0xbabb,0xb7e0,0x0000,0x0000, +0x0000,0xdeb0,0xdeaf,0x0000,0xe2cd,0xe2cb,0xbcfa,0x0000, +0xbabc,0xe2cc,0xe676,0x0000,0x0000,0x0000,0x0000,0xbcfb, +0xe675,0xe67e,0xe67d,0xe67b,0x0000,0xe67a,0xe677,0xe678, +0xe679,0xe67c,0xe6a1,0x0000,0x0000,0xea5f,0xea5c,0xea5d, +0xbf57,0xea5b,0xea61,0xea60,0xea5e,0x0000,0xed64,0xed65, +0xc0f1,0x0000,0xc0f2,0xed63,0x0000,0xc279,0xeffe,0xc278, +0xc37e,0x0000,0xc3a1,0xc46d,0xf46e,0xf46d,0xf5dd,0xf6ef, +0xc57a,0xf7e8,0xf7e7,0xf7e9,0xa5c8,0xcfc6,0xaf59,0xb276, +0xd66a,0xa5c9,0xc9a7,0xa4fd,0x0000,0x0000,0xca45,0x0000, +0x0000,0x0000,0xcb6c,0xcb6a,0xcb6b,0xcb68,0xa868,0xcb69, +0x0000,0x0000,0x0000,0x0000,0x0000,0xcd6d,0x0000,0xaab3, +0xcd6b,0xcd67,0xcd6a,0x0000,0xcd66,0xaab5,0xcd69,0x0000, +0xaab2,0xaab1,0x0000,0xaab4,0xcd6c,0xcd68,0x0000,0x0000, +0x0000,0x0000,0xacc2,0xacc5,0xcfce,0xcfcd,0xcfcc,0xacbf, +0xcfd5,0xcfcb,0x0000,0xacc1,0xd2af,0x0000,0xcfd2,0xcfd0, +0xacc4,0x0000,0xcfc8,0xcfd3,0x0000,0xcfca,0xcfd4,0xcfd1, +0xcfc9,0x0000,0xacc0,0xcfd6,0xcfc7,0xacc3,0x0000,0x0000, +0x0000,0x0000,0xd2b4,0xd2ab,0xd2b6,0x0000,0xd2ae,0xd2b9, +0xd2ba,0xd2ac,0xd2b8,0xd2b5,0xd2b3,0xd2b7,0xaf5f,0x0000, +0xaf5d,0x0000,0x0000,0xd2b1,0x0000,0xd2ad,0x0000,0xd2b0, +0xd2bb,0xd2b2,0xaf5e,0xcfcf,0x0000,0xaf5a,0xaf5c,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd678,0xd66d,0xd66b,0x0000, +0xd66c,0x0000,0xd673,0x0000,0xd674,0xd670,0xb27b,0xd675, +0xd672,0xd66f,0x0000,0xb279,0xd66e,0xb277,0xb27a,0xd671, +0xd679,0xaf5b,0xb278,0xd677,0xd676,0xb27c,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xda7e,0x0000, +0x0000,0x0000,0xdaa1,0xb560,0x0000,0xdaa7,0x0000,0x0000, +0xdaa9,0xdaa2,0xb55a,0xdaa6,0xdaa5,0xb55b,0xb561,0x0000, +0xb562,0xdaa8,0xb558,0xda7d,0xda7b,0xdaa3,0xda7a,0xb55f, +0xda7c,0xdaa4,0xdaaa,0xb559,0xb55e,0xb55c,0xb55d,0x0000, +0x0000,0x0000,0xb557,0x0000,0x0000,0x0000,0x0000,0xb7e9, +0xdeb7,0xb7e8,0xdebb,0x0000,0xdeb1,0x0000,0xdebc,0x0000, +0x0000,0x0000,0xdeb2,0xdeb3,0x0000,0xdebd,0xdeba,0xdeb8, +0xdeb9,0xdeb5,0xdeb4,0x0000,0xdebe,0xb7e5,0x0000,0xdeb6, +0x0000,0xb7ea,0xb7e4,0xb7eb,0xb7ec,0x0000,0xb7e7,0xb7e6, +0x0000,0x0000,0xe2ce,0xbabe,0xbabd,0x0000,0x0000,0xe2d3, +0x0000,0xbcfc,0xbabf,0x0000,0x0000,0xbac1,0xe2d4,0xb7e3, +0xbac0,0xe2d0,0xe2d2,0xe2cf,0x0000,0xe2d1,0x0000,0x0000, +0x0000,0xe6ab,0x0000,0x0000,0xe6aa,0xe6a7,0xbd40,0xea62, +0xbd41,0xe6a6,0x0000,0xbcfe,0x0000,0xe6a8,0xe6a5,0xe6a2, +0xe6a9,0xe6a3,0xe6a4,0xbcfd,0x0000,0x0000,0x0000,0x0000, +0xed69,0x0000,0xea66,0x0000,0xea65,0xea67,0x0000,0xed66, +0xbf5a,0x0000,0xea63,0x0000,0xbf58,0x0000,0xbf5c,0xbf5b, +0xea64,0xea68,0x0000,0xbf59,0x0000,0xed6d,0xc0f5,0xc27a, +0xc0f6,0xc0f3,0xed6a,0xed68,0x0000,0xed6b,0x0000,0xed6e, +0xc0f4,0xed6c,0xed67,0x0000,0x0000,0xf042,0xf045,0xf275, +0xf040,0x0000,0xf46f,0xf046,0x0000,0xc3a2,0xf044,0xc27b, +0xf041,0xf043,0xf047,0xf276,0x0000,0xf274,0x0000,0x0000, +0x0000,0x0000,0xc3a3,0xf273,0x0000,0x0000,0x0000,0xc46e, +0x0000,0x0000,0x0000,0x0000,0xc4ed,0xf6f1,0xc4ec,0xf6f3, +0xf6f0,0xf6f2,0xc5d0,0xf8b2,0xa5ca,0xcd6e,0xd2bc,0xd2bd, +0xb27d,0xdebf,0xbf5d,0xc3a4,0xc57b,0xf8b3,0xa5cb,0x0000, +0xcd6f,0xa260,0x0000,0x0000,0xcfd7,0x0000,0xcfd8,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd2be,0xd2bf,0xb27e,0xb2a1, +0x0000,0x0000,0x0000,0xdaab,0x0000,0xdec2,0xdec1,0xdec0, +0xe2d5,0x0000,0xe2d6,0xe2d7,0xbac2,0x0000,0x0000,0xe6ad, +0xe6ac,0x0000,0x0000,0xea69,0xbf5e,0xbf5f,0x0000,0xed72, +0xed6f,0xed70,0xed71,0xf049,0xf048,0xc27c,0xf277,0xf5de, +0xa5cc,0x0000,0xacc6,0x0000,0xb2a2,0xdec3,0x0000,0xa5cd, +0x0000,0xd2c0,0xb2a3,0x0000,0x0000,0xb563,0xb564,0x0000, +0xa5ce,0xa5cf,0xca46,0xa86a,0xa869,0xacc7,0xcfd9,0xdaac, +0xa5d0,0xa5d1,0xa5d2,0xa5d3,0x0000,0x0000,0x0000,0xa86b, +0xa86c,0xcb6e,0xcb6d,0x0000,0x0000,0xaab6,0xcd72,0xcd70, +0xcd71,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfda, +0xcfdb,0x0000,0x0000,0xaccb,0xacc9,0x0000,0xacca,0xacc8, +0x0000,0x0000,0x0000,0x0000,0xaf60,0x0000,0x0000,0x0000, +0x0000,0xaf64,0xaf63,0xd2c1,0xaf62,0xaf61,0x0000,0xd2c2, +0x0000,0x0000,0xb2a6,0xd67b,0xd67a,0xb2a4,0xb2a5,0x0000, +0x0000,0x0000,0xb566,0xb565,0xdaae,0x0000,0x0000,0xdaad, +0xb2a7,0x0000,0x0000,0x0000,0x0000,0x0000,0xb7ed,0xdec5, +0xb7ee,0xdec4,0x0000,0x0000,0x0000,0xe2d8,0xe6ae,0xbd42, +0xea6a,0x0000,0x0000,0x0000,0xed73,0x0000,0xc3a6,0xc3a5, +0x0000,0x0000,0xc57c,0xa5d4,0xcd73,0x0000,0x0000,0xb2a8, +0xe2d9,0xbac3,0x0000,0x0000,0xcb6f,0xcb70,0x0000,0x0000, +0xcd74,0xaab8,0xaab9,0x0000,0x0000,0xaab7,0x0000,0x0000, +0x0000,0x0000,0xaccf,0xacd0,0xaccd,0xacce,0x0000,0xcfdc, +0x0000,0x0000,0xcfdd,0xaccc,0x0000,0x0000,0x0000,0x0000, +0xd2c3,0x0000,0xaf68,0xaf69,0x0000,0xb2ab,0xd2c9,0x0000, +0xaf6e,0xaf6c,0xd2ca,0xd2c5,0xaf6b,0xaf6a,0xaf65,0xd2c8, +0xd2c7,0xd2c4,0xaf6d,0x0000,0xd2c6,0xaf66,0x0000,0xaf67, +0x0000,0x0000,0xb2ac,0xd6a1,0xd6a2,0xb2ad,0xd67c,0xd67e, +0xd6a4,0xd6a3,0xd67d,0x0000,0xb2a9,0xb2aa,0x0000,0xdab6, +0xb56b,0xb56a,0xdab0,0xb568,0x0000,0xdab3,0xb56c,0xdab4, +0xb56d,0xdab1,0xb567,0xb569,0xdab5,0x0000,0xdab2,0xdaaf, +0x0000,0x0000,0x0000,0x0000,0x0000,0xded2,0x0000,0xdec7, +0xb7f0,0xb7f3,0xb7f2,0xb7f7,0xb7f6,0xded3,0xded1,0xdeca, +0xdece,0xdecd,0xb7f4,0xded0,0xdecc,0xded4,0xdecb,0xb7f5, +0xb7ef,0xb7f1,0x0000,0xdec9,0x0000,0x0000,0x0000,0x0000, +0xe2db,0xbac7,0xe2df,0xbac6,0xe2dc,0xbac5,0x0000,0xdec8, +0xdecf,0xe2de,0x0000,0xbac8,0xe2e0,0xe2dd,0xe2da,0x0000, +0x0000,0xe6b1,0xe6b5,0xe6b7,0xe6b3,0xe6b2,0xe6b0,0xbd45, +0xbd43,0xbd48,0xbd49,0xe6b4,0xbd46,0xe6af,0xbd47,0xbac4, +0xe6b6,0xbd44,0x0000,0x0000,0x0000,0xea6c,0x0000,0xea6b, +0xea73,0xea6d,0xea72,0xea6f,0xbf60,0xea71,0x0000,0x0000, +0xbf61,0x0000,0xbf62,0x0000,0xea70,0xea6e,0x0000,0x0000, +0x0000,0x0000,0xc0f8,0xed74,0x0000,0x0000,0xc0f7,0xed77, +0xed75,0xed76,0x0000,0x0000,0xc0f9,0x0000,0x0000,0x0000, +0xf04d,0x0000,0xc2a1,0xf04e,0x0000,0x0000,0xc27d,0xf04f, +0xc27e,0xf04c,0xf050,0x0000,0xf04a,0x0000,0x0000,0xc3a7, +0xf278,0xc3a8,0xc46f,0x0000,0xf04b,0xc470,0x0000,0x0000, +0x0000,0xc4ee,0xf5df,0x0000,0xc57e,0xf6f4,0xc57d,0x0000, +0xf7ea,0xc5f5,0xc5f6,0x0000,0x0000,0xf9cc,0x0000,0x0000, +0xacd1,0xcfde,0x0000,0xb56e,0xb56f,0xa5d5,0xa6ca,0xca47, +0x0000,0xcb71,0xa86d,0x0000,0xaaba,0x0000,0xacd2,0xacd3, +0xacd4,0xd6a6,0xd2cb,0xaf6f,0x0000,0x0000,0xb2ae,0xd6a5, +0x0000,0x0000,0xdab8,0xb571,0x0000,0xdab7,0xb570,0x0000, +0x0000,0xded5,0xbd4a,0xe6bb,0xe6b8,0xe6b9,0xe6ba,0x0000, +0x0000,0x0000,0x0000,0x0000,0xed78,0x0000,0xf051,0x0000, +0x0000,0x0000,0xf471,0xf470,0x0000,0xf6f5,0xa5d6,0xcd75, +0xaf70,0x0000,0x0000,0x0000,0xb572,0xded6,0x0000,0x0000, +0xe2e1,0x0000,0xbd4b,0xea74,0x0000,0xf052,0xf472,0xa5d7, +0x0000,0x0000,0xaabb,0xacd7,0xcfdf,0xacd8,0xacd6,0x0000, +0xacd5,0xd2cc,0xaf71,0x0000,0x0000,0xaf72,0xaf73,0x0000, +0x0000,0x0000,0xb2b0,0xd6a7,0xb2af,0x0000,0x0000,0x0000, +0x0000,0x0000,0xdab9,0xb2b1,0xb573,0xded7,0xb7f8,0xb7f9, +0x0000,0xbac9,0x0000,0xbaca,0xbd4c,0xbf64,0xea75,0xbf63, +0x0000,0xed79,0xc0fa,0x0000,0xf053,0xf473,0xa5d8,0xa86e, +0xcd78,0xcd77,0xaabc,0xcd76,0xaabd,0xcd79,0x0000,0xcfe5, +0xacdb,0xacda,0xcfe7,0xcfe6,0xacdf,0x0000,0xacde,0x0000, +/* 0x7700 */ +0x0000,0xacd9,0x0000,0xcfe1,0xcfe2,0xcfe3,0x0000,0xace0, +0xcfe0,0xacdc,0xcfe4,0xacdd,0x0000,0x0000,0x0000,0x0000, +0xd2cf,0xd2d3,0xd2d1,0xd2d0,0x0000,0xd2d4,0x0000,0x0000, +0x0000,0xd2d5,0xd2d6,0xd2ce,0x0000,0xd2cd,0x0000,0xaf75, +0xaf76,0x0000,0xd2d7,0xd2d2,0x0000,0xd6b0,0x0000,0xd2d8, +0xaf77,0xaf74,0x0000,0x0000,0x0000,0xd6aa,0x0000,0xd6a9, +0x0000,0xd6ab,0xd6ac,0xd6ae,0xd6ad,0xd6b2,0xb2b5,0xb2b2, +0xb2b6,0xd6a8,0xb2b7,0xd6b1,0xb2b4,0xd6af,0xb2b3,0x0000, +0x0000,0x0000,0x0000,0x0000,0xdabc,0xdabe,0xdaba,0xdabb, +0x0000,0x0000,0xdabf,0xdac1,0xdac2,0xdabd,0xdac0,0xb574, +0x0000,0x0000,0xdedb,0x0000,0xdee0,0xded8,0xdedc,0x0000, +0x0000,0xdee1,0xdedd,0xb7fa,0xb843,0x0000,0xb7fd,0xded9, +0xdeda,0xbace,0xb846,0xb7fe,0x0000,0xb844,0xb7fc,0xdedf, +0xb845,0xdede,0xb841,0xb7fb,0xb842,0xdee2,0xe2e6,0xe2e8, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xb840,0x0000,0x0000,0xe2e3,0xbacc,0xe2e9,0xbacd, +0xe2e7,0xe2e2,0xe2e5,0xe2ea,0xbacb,0xe2e4,0x0000,0xbd4e, +0xe6bf,0xe6be,0x0000,0xbd51,0xbd4f,0xe6bc,0xbd4d,0xe6bd, +0x0000,0xbd50,0x0000,0x0000,0x0000,0xea7d,0x0000,0xeaa1, +0x0000,0xea7e,0xea76,0xea7a,0xea79,0xea77,0xbf66,0xbf67, +0xbf65,0xea78,0xea7b,0xea7c,0x0000,0xbf68,0x0000,0xc140, +0xeda3,0x0000,0xc0fc,0xed7b,0xc0fe,0xc141,0x0000,0x0000, +0xc0fd,0xeda2,0xed7c,0xc0fb,0xeda1,0xed7a,0xed7e,0xed7d, +0x0000,0x0000,0xf055,0xc2a4,0xc2a5,0xc2a2,0x0000,0xc2a3, +0x0000,0x0000,0xf054,0x0000,0xf27b,0x0000,0x0000,0xc3a9, +0x0000,0xf279,0xf27a,0x0000,0xf474,0xf477,0xf475,0xf476, +0xf5e0,0x0000,0x0000,0xc4ef,0xf7eb,0xf8b4,0x0000,0xc5f7, +0xf8f8,0xf8f9,0xc666,0xa5d9,0xace1,0x0000,0xdac3,0x0000, +0xdee3,0x0000,0xa5da,0xa86f,0x0000,0xaabe,0x0000,0xcfe8, +0xcfe9,0xaf78,0x0000,0x0000,0xdac4,0xb575,0xb847,0xc142, +0xeda4,0xf27c,0xf478,0xa5db,0x0000,0x0000,0x0000,0xcda1, +0xcd7a,0xcd7c,0xcd7e,0xcd7d,0xcd7b,0xaabf,0x0000,0x0000, +/* 0x7800 */ +0x0000,0x0000,0xace2,0xcff2,0x0000,0xcfed,0xcfea,0x0000, +0x0000,0xcff1,0x0000,0x0000,0xace4,0xace5,0xcff0,0xcfef, +0xcfee,0xcfeb,0xcfec,0xcff3,0xace3,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xaf7c,0x0000,0xafa4, +0xafa3,0xd2e1,0xd2db,0xd2d9,0x0000,0xafa1,0xd6b9,0xaf7a, +0xd2de,0xd2e2,0xd2e4,0xd2e0,0xd2da,0xafa2,0xd2df,0xd2dd, +0xaf79,0xd2e5,0xafa5,0xd2e3,0xaf7d,0xd2dc,0x0000,0xaf7e, +0xaf7b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xb2b9,0x0000,0xd6ba,0x0000,0x0000, +0xd6b3,0xd6b5,0xd6b7,0x0000,0xd6b8,0xd6b6,0xb2ba,0x0000, +0xd6bb,0x0000,0xd6b4,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xdac8,0xb576,0xdad0,0x0000, +0xdac5,0x0000,0xdad1,0x0000,0xdac6,0xdac7,0x0000,0x0000, +0xdacf,0xdace,0xdacb,0xb2b8,0xb577,0xdac9,0xdacc,0xb578, +0xdacd,0xdaca,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xdeee,0x0000,0xdef2,0xb84e,0x0000,0xe2f0,0xb851, +0xdef0,0xf9d6,0x0000,0xdeed,0xdee8,0xdeea,0xdeeb,0xdee4, +0x0000,0xb84d,0x0000,0x0000,0xb84c,0x0000,0xb848,0xdee7, +0x0000,0xb84f,0x0000,0xb850,0xdee6,0xdee9,0xdef1,0xb84a, +0xb84b,0xdeef,0xdee5,0x0000,0x0000,0x0000,0xe2f2,0xbad0, +0xe2f4,0xdeec,0xe2f6,0xbad4,0xe2f7,0xe2f3,0x0000,0xbad1, +0xe2ef,0xbad3,0xe2ec,0xe2f1,0xe2f5,0xe2ee,0x0000,0x0000, +0xb849,0x0000,0xe2eb,0xbad2,0xe2ed,0x0000,0x0000,0x0000, +0x0000,0x0000,0xbd54,0xe6c1,0xbd58,0x0000,0xbd56,0x0000, +0x0000,0xbacf,0x0000,0xe6c8,0xe6c9,0xbd53,0x0000,0x0000, +0xe6c7,0xe6ca,0xbd55,0xbd52,0xe6c3,0xe6c0,0xe6c5,0xe6c2, +0xbd59,0xe6c4,0x0000,0x0000,0xe6c6,0xbd57,0x0000,0x0000, +0x0000,0x0000,0xbf6a,0xeaa8,0x0000,0xeaa2,0xeaa6,0xeaac, +0xeaad,0xeaa9,0xeaaa,0xeaa7,0x0000,0xeaa4,0x0000,0xbf6c, +0xbf69,0xeaa3,0xeaa5,0x0000,0xbf6b,0xeaab,0x0000,0xc146, +0x0000,0x0000,0xedaa,0xeda5,0xc145,0x0000,0x0000,0xc143, +0x0000,0xedac,0xc144,0xeda8,0xeda9,0xeda6,0xedad,0xf056, +/* 0x7900 */ +0x0000,0xc147,0xeda7,0x0000,0xedae,0xedab,0x0000,0x0000, +0x0000,0xf05a,0x0000,0x0000,0xf057,0x0000,0xc2a6,0x0000, +0xf05b,0xf05d,0xf05c,0xf058,0xf059,0x0000,0x0000,0xf2a3, +0x0000,0xc3aa,0x0000,0xf27e,0xf2a2,0xf27d,0xf2a4,0x0000, +0x0000,0xf2a1,0x0000,0xf47a,0xf47d,0xf479,0xc471,0xf47b, +0xf47c,0xf47e,0xc472,0xc474,0xc473,0xf5e1,0x0000,0xf5e3, +0x0000,0xf5e2,0x0000,0x0000,0x0000,0xf6f6,0x0000,0x0000, +0xf8b5,0xf8fa,0xa5dc,0x0000,0x0000,0xcb72,0xaac0,0xcda3, +0xaac1,0xaac2,0xcda2,0x0000,0xcff8,0xcff7,0xace6,0xace9, +0xace8,0xace7,0xcff4,0xcff6,0xcff5,0x0000,0x0000,0xd2e8, +0xafa7,0xd2ec,0xd2eb,0xd2ea,0xd2e6,0xafa6,0xafaa,0xafad, +0x0000,0x0000,0xafae,0xd2e7,0xd2e9,0xafac,0xafab,0xafa9, +0xafa8,0xd6c2,0x0000,0xd6c0,0xd6bc,0xb2bb,0x0000,0xd6bd, +0xb2bc,0xd6be,0xd6bf,0xd6c1,0x0000,0xb2bd,0x0000,0x0000, +0xdad5,0x0000,0xdad4,0xdad3,0xdad2,0x0000,0x0000,0x0000, +0x0000,0xdef6,0xb852,0x0000,0xdef3,0xdef5,0x0000,0xb853, +0x0000,0xb854,0xdef4,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe341,0x0000,0xe2f9,0xe2fa,0x0000,0xbad7,0xbad5,0xbad6, +0xe343,0x0000,0xe342,0xe2fe,0xe2fd,0xe2fc,0xe2fb,0xe340, +0xe2f8,0x0000,0xe6cb,0xe6d0,0xe6ce,0x0000,0x0000,0x0000, +0xe6cd,0xe6cc,0xe6cf,0x0000,0xeaae,0x0000,0xbf6d,0xc148, +0xedb0,0x0000,0xc149,0xedaf,0xf05f,0xf05e,0xc2a7,0x0000, +0xf2a5,0xc3ab,0xf4a1,0xc5a1,0xf6f7,0x0000,0xf8b7,0xf8b6, +0xc9a8,0xacea,0xaceb,0xd6c3,0x0000,0xb856,0xa5dd,0xa872, +0xa871,0xa870,0x0000,0x0000,0x0000,0xcda4,0x0000,0x0000, +0xaac4,0xaac3,0x0000,0xacee,0x0000,0xcffa,0xcffd,0xcffb, +0x0000,0xacec,0xaced,0x0000,0x0000,0xcff9,0xcffc,0x0000, +0xafb5,0x0000,0x0000,0x0000,0xd2f3,0xd2f5,0xd2f4,0xafb2, +0xd2ef,0x0000,0x0000,0xafb0,0xafaf,0x0000,0xafb3,0xafb1, +0x0000,0xafb4,0xd2f2,0xd2ed,0xd2ee,0xd2f1,0xd2f0,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6c6,0xd6c7, +0xd6c5,0x0000,0xd6c4,0xb2be,0x0000,0x0000,0x0000,0x0000, +0xb57d,0x0000,0xdad6,0xdad8,0xdada,0xb57c,0x0000,0x0000, +0xb57a,0x0000,0xdad7,0xb57b,0xdad9,0xb579,0x0000,0x0000, +0xdf41,0xdef7,0xdefa,0xdefe,0xb85a,0xdefc,0x0000,0xdefb, +0xdef8,0xdef9,0xb858,0xdf40,0xb857,0x0000,0xb85c,0xb85b, +0xb859,0x0000,0xdefd,0x0000,0x0000,0x0000,0xe349,0x0000, +0xe348,0x0000,0x0000,0xe344,0x0000,0x0000,0xbad8,0xe347, +0xe346,0xbad9,0x0000,0x0000,0x0000,0x0000,0x0000,0xbd5e, +0x0000,0xe6d2,0x0000,0xbd5f,0xbd5b,0xbd5d,0x0000,0xbd5a, +0xbd5c,0x0000,0x0000,0x0000,0xeaaf,0x0000,0xbf70,0xeab1, +0xeab0,0x0000,0xe345,0xbf72,0xbf71,0xbf6e,0xbf6f,0x0000, +0x0000,0x0000,0x0000,0x0000,0xedb5,0x0000,0xedb3,0xc14a, +0xedb4,0x0000,0xedb6,0xedb2,0xedb1,0x0000,0x0000,0xf060, +0xc2aa,0xc2a8,0xc2a9,0x0000,0x0000,0x0000,0x0000,0xf2a6, +0xf2a7,0xc3ad,0x0000,0xc3ac,0xf4a3,0xf4a4,0xf4a2,0x0000, +0xf6f8,0xf6f9,0x0000,0x0000,0xa5de,0xca48,0xa873,0x0000, +0xcda5,0xaac6,0xaac5,0xcda6,0x0000,0x0000,0xd040,0xacef, +0xcffe,0xacf0,0x0000,0x0000,0xafb6,0xd2f8,0xd2f6,0xd2fc, +0xafb7,0xd2f7,0xd2fb,0xd2f9,0xd2fa,0x0000,0x0000,0xd6c8, +0xd6ca,0x0000,0xb2bf,0x0000,0xd6c9,0xb2c0,0xb5a2,0xb5a1, +0xb57e,0xdadb,0x0000,0x0000,0x0000,0x0000,0xdf44,0xb85d, +0xb85e,0x0000,0xdf43,0xdf42,0x0000,0x0000,0x0000,0x0000, +0xe34a,0xbadb,0xbada,0xe34b,0xe34c,0x0000,0xbd61,0xbd60, +0x0000,0xeab5,0xe6d3,0xe6d5,0xe6d4,0xeab4,0xeab2,0xeab6, +0xeab3,0x0000,0xbf73,0x0000,0x0000,0x0000,0xedb7,0xc14b, +0xedb8,0xedb9,0x0000,0x0000,0xc2ab,0xc2ac,0x0000,0xc475, +0x0000,0x0000,0xc5d1,0xa5df,0x0000,0x0000,0x0000,0x0000, +0x0000,0xd041,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd2fd,0xafb8,0x0000,0x0000,0x0000,0x0000,0x0000,0xb3ba, +0xb3b9,0x0000,0x0000,0xb5a4,0xdadd,0xb5a3,0xdadc,0x0000, +0x0000,0x0000,0x0000,0xdf45,0x0000,0xbadc,0xe34d,0xbadd, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc476,0xf4a5, +0x0000,0xa6cb,0xaac7,0xcda7,0x0000,0xacf2,0x0000,0xacf1, +0xd042,0xd043,0x0000,0x0000,0xd340,0xd342,0xafb9,0x0000, +0xd344,0xd347,0xd345,0x0000,0x0000,0x0000,0xd346,0xd343, +0xd2fe,0xafba,0xd348,0xd341,0x0000,0x0000,0x0000,0x0000, +0xd6d3,0xb2c6,0xd6dc,0xb2c3,0x0000,0xd6d5,0xb2c7,0x0000, +0xb2c1,0x0000,0xd6d0,0xd6dd,0xd6d1,0xd6ce,0xb2c5,0x0000, +0xb2c2,0x0000,0xd6d4,0xd6d7,0xb2c4,0xd6d8,0xb2c8,0xd6d9, +0xd6cf,0xd6d6,0xd6da,0xd6d2,0xd6cd,0xd6cb,0x0000,0x0000, +0xd6db,0x0000,0x0000,0xdadf,0x0000,0x0000,0x0000,0x0000, +0xdae4,0x0000,0x0000,0x0000,0xdae0,0xdae6,0xb5a7,0xd6cc, +0xdae1,0xb5a5,0xdade,0xb5ac,0xdae2,0xb5ab,0xdae3,0xb5ad, +0xb5a8,0xb5ae,0xb5a9,0x0000,0xb5aa,0x0000,0xb5a6,0x0000, +0xdae5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xb861,0xdf50,0x0000,0xdf53,0xdf47,0xdf4c,0xdf46,0xb863, +0x0000,0xdf4a,0x0000,0x0000,0x0000,0xdf48,0xb862,0x0000, +0xdf4f,0xdf4e,0xdf4b,0xdf4d,0xdf49,0xbae1,0xdf52,0xb85f, +0xdf51,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe35d,0x0000,0xbae8,0xe358,0x0000,0xbae7, +0xe34e,0x0000,0xe350,0xbae0,0xe355,0xe354,0xe357,0xbae5, +0xe352,0xe351,0x0000,0x0000,0xbae4,0xbadf,0xe353,0xbae2, +0xe359,0xe35b,0x0000,0xe356,0xe34f,0xbae3,0x0000,0x0000, +0xbd69,0xbade,0x0000,0x0000,0xe35c,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe6d9,0xbd62,0x0000,0xe6db, +0x0000,0xbd63,0x0000,0x0000,0xbd65,0xe6de,0x0000,0xe6d6, +0xbae6,0xe6dc,0x0000,0x0000,0x0000,0x0000,0xe6d8,0x0000, +0xb860,0xbd68,0x0000,0x0000,0xbd64,0x0000,0xbd66,0xbd67, +0x0000,0xbf76,0xe6dd,0xe6d7,0xbd6a,0x0000,0xe6da,0x0000, +0x0000,0x0000,0x0000,0x0000,0xeac0,0xeabb,0x0000,0x0000, +0xeac5,0xbf74,0xeabd,0xbf78,0xeac3,0xeaba,0xeab7,0xeac6, +0xc151,0xbf79,0xeac2,0xeab8,0xbf77,0xeabc,0xbf7b,0xeab9, +0xeabe,0xbf7a,0xeac1,0xeac4,0x0000,0x0000,0x0000,0x0000, +0xedcb,0xedcc,0xedbc,0xedc3,0xedc1,0x0000,0x0000,0xc14f, +0xedc8,0xeabf,0x0000,0xedbf,0x0000,0xedc9,0xc14e,0xedbe, +0xedbd,0xedc7,0xedc4,0xedc6,0x0000,0xedba,0xedca,0xc14c, +0x0000,0xedc5,0xedce,0xedc2,0xc150,0xc14d,0xedc0,0xedbb, +0xedcd,0xbf75,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf063,0x0000,0x0000,0xf061,0xf067,0xc2b0,0xf065, +0xf064,0xc2b2,0xf06a,0xc2b1,0x0000,0xf06b,0xf068,0xc2ae, +0xf069,0xf062,0xc2af,0xc2ad,0xf2ab,0xf066,0x0000,0x0000, +0xf06c,0x0000,0x0000,0xf2a8,0x0000,0x0000,0x0000,0xc3b2, +0xc3b0,0xf2aa,0x0000,0xf2ac,0xf2a9,0xc3b1,0xc3ae,0xc3af, +0xc3b3,0x0000,0x0000,0xc478,0x0000,0xf4aa,0x0000,0xf4a9, +0xf4a7,0xf4a6,0xf4a8,0x0000,0xc477,0xc479,0x0000,0x0000, +0xc4f0,0x0000,0x0000,0xf5e5,0xf5e4,0x0000,0x0000,0xf6fa, +0x0000,0xf6fc,0xf6fe,0xf6fd,0xf6fb,0x0000,0x0000,0xc5a3, +0xc5a2,0x0000,0x0000,0xc5d3,0xc5d2,0xc5d4,0xf7ed,0xf7ec, +0x0000,0xf8fb,0xf8b8,0xf8fc,0xc658,0x0000,0xc659,0xf96d, +0x0000,0x0000,0xc67e,0xa6cc,0x0000,0xcda8,0x0000,0x0000, +0xd045,0xd046,0xd044,0x0000,0x0000,0xacf3,0x0000,0xd047, +0xd048,0xd049,0x0000,0x0000,0xd349,0xd34f,0x0000,0x0000, +0xd34d,0xafbb,0xd34b,0x0000,0xd34c,0xd34e,0x0000,0x0000, +0x0000,0xd34a,0xb2c9,0x0000,0xd6de,0xb2cb,0xd6e0,0xb2ca, +0xd6df,0x0000,0x0000,0x0000,0x0000,0x0000,0xdae8,0xb5af, +0x0000,0xdaea,0xdae7,0xd6e1,0x0000,0xb5b0,0x0000,0xf9db, +0xdae9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdf56, +0x0000,0xb864,0xdf54,0xb865,0xdf55,0xb866,0x0000,0x0000, +0x0000,0xbae9,0xe361,0xe35e,0xe360,0xbaea,0xbaeb,0xe35f, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe6df,0x0000,0x0000, +0xe6e0,0x0000,0xbd6b,0xe6e2,0xe6e1,0x0000,0xa261,0x0000, +0xeaca,0xeacb,0xeac7,0x0000,0xeac8,0xbf7c,0xbf7d,0xeac9, +0x0000,0xc157,0x0000,0x0000,0xc153,0xc158,0xc154,0xc156, +0xc152,0x0000,0xc155,0x0000,0x0000,0x0000,0x0000,0xc2b3, +0xedcf,0x0000,0xf2ae,0x0000,0xf2ad,0x0000,0xf4ab,0xc47a, +0xc47b,0xf741,0xf5e6,0x0000,0xf740,0x0000,0xf8fd,0xf9a4, +0xa6cd,0x0000,0x0000,0xa874,0x0000,0xcda9,0xaac8,0x0000, +0xacf6,0xd04c,0xacf4,0xd04a,0xacf9,0xacf5,0xacfa,0xacf8, +0xd04b,0xacf7,0xafbf,0xafbe,0xd35a,0xafc7,0xd353,0xd359, +0xafc3,0xd352,0xd358,0xd356,0xafc2,0xafc4,0xd355,0xafbd, +0xd354,0xafc8,0xafc5,0xafc9,0xafc6,0xd351,0xd350,0xd357, +0xafc0,0xafbc,0xafc1,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd6f0,0xd6e9,0x0000,0xb5b5,0xd6e8,0x0000,0xb2cf,0xb2d6, +0xb2d3,0xb2d9,0xb2d8,0xb2d4,0x0000,0xd6e2,0xd6e5,0x0000, +0xd6e4,0xb2d0,0xd6e6,0xd6ef,0xb2d1,0xd6e3,0xd6ec,0xd6ed, +0xb2d2,0xd6ea,0xb2d7,0xb2cd,0xb2d5,0xd6e7,0xb2cc,0xd6eb, +0x0000,0x0000,0xd6ee,0x0000,0x0000,0x0000,0xdafb,0xdaf2, +0xb5b2,0xdaf9,0xdaf6,0xdaee,0xdaf7,0xb5b4,0xdaef,0x0000, +0xdaeb,0x0000,0x0000,0xb86c,0xdaf4,0x0000,0xb5b1,0xdafa, +0x0000,0xb5b8,0xb5ba,0xdaed,0x0000,0x0000,0xb5b9,0xdaf0, +0xb5b3,0xdaf8,0xdaf1,0xdaf5,0x0000,0xdaf3,0xb5b6,0xdaec, +0xb5bb,0xb2ce,0xb5b7,0xb5bc,0x0000,0x0000,0x0000,0x0000, +0x0000,0xb868,0xdf5d,0xdf5f,0xdf61,0xdf65,0x0000,0xdf5b, +0xdf59,0xb86a,0x0000,0xdf60,0xdf64,0xdf5c,0xdf58,0x0000, +0xdf57,0x0000,0x0000,0x0000,0xdf62,0xdf5a,0xdf5e,0xb86b, +0x0000,0xb869,0xdf66,0xb867,0xdf63,0x0000,0xe372,0x0000, +0x0000,0x0000,0x0000,0x0000,0xbaee,0xe36a,0xbd78,0xe374, +0xbaf1,0xe378,0xbaf7,0xe365,0x0000,0x0000,0xe375,0xe362, +0x0000,0xe377,0xe366,0x0000,0xbafe,0xbafb,0xe376,0xe370, +0xbaed,0xbaf5,0xbaf4,0x0000,0xbaf3,0xbaf9,0x0000,0xe363, +0xbafa,0xe371,0xbaf6,0xbaec,0xe373,0xbaef,0xbaf0,0xbaf8, +0xe368,0xe367,0xe364,0x0000,0xe36c,0xe369,0xe36d,0xbafd, +0x0000,0xe379,0xbaf2,0xe36e,0xe36f,0x0000,0xe36b,0x0000, +0x0000,0x0000,0xbafc,0x0000,0x0000,0x0000,0x0000,0xe6e7, +0xbd70,0xbd79,0xbd75,0xe6e4,0x0000,0xbd72,0xbd76,0xe6f0, +0xbd6c,0xe6e8,0x0000,0xbd74,0x0000,0x0000,0xe6eb,0xe6e6, +0xbd73,0xbd77,0xe6e5,0x0000,0xbd71,0x0000,0xe6ef,0xbd6e, +0xe6ee,0xe6ed,0xbd7a,0xe572,0xbd6d,0x0000,0xe6ec,0xe6e3, +0x0000,0xbd7b,0xe6ea,0xbd6f,0x0000,0x0000,0x0000,0x0000, +/* 0x7e00 */ +0x0000,0x0000,0x0000,0xe6e9,0x0000,0x0000,0x0000,0x0000, +0xbfa2,0xbfa7,0xbf7e,0xead8,0xeacf,0xeadb,0xead3,0xead9, +0xbfa8,0xbfa1,0xeacc,0xead2,0xeadc,0xead5,0xeada,0xeace, +0x0000,0x0000,0xead6,0xbfa3,0xead4,0xbfa6,0xbfa5,0xead0, +0xead1,0xeacd,0xead7,0xbfa4,0xeade,0xeadd,0x0000,0x0000, +0x0000,0xedda,0xedd6,0xc15f,0x0000,0xedd0,0xc159,0xc169, +0xeddc,0xc161,0xc15d,0xedd3,0xc164,0xc167,0xedde,0xc15c, +0xedd5,0xc165,0xede0,0xeddd,0xedd1,0xc160,0xc15a,0xc168, +0xedd8,0xc163,0xedd2,0xc15e,0xeddf,0xc162,0xc15b,0xedd9, +0xc166,0xedd7,0x0000,0x0000,0xeddb,0x0000,0x0000,0x0000, +0xf06e,0xf074,0xc2b9,0xf077,0xc2b4,0xc2b5,0xf06f,0xf076, +0xf071,0xc2ba,0xc2b7,0x0000,0xf06d,0x0000,0xc2b6,0xf073, +0xf075,0xc2b8,0xf072,0xf070,0x0000,0x0000,0x0000,0x0000, +0xf2b8,0xc3b7,0xc3b8,0xc3b4,0x0000,0xc3b5,0x0000,0xf2b4, +0xf2b2,0x0000,0xf2b6,0xc3ba,0xf2b7,0xf2b0,0xf2af,0xf2b3, +0xf2b1,0xc3b6,0xf2b5,0xf4ac,0xc47e,0xc47d,0xf4ad,0x0000, +0xf4af,0xf4ae,0xc4a1,0x0000,0x0000,0x0000,0xf5eb,0xf5e8, +0xf5e9,0x0000,0xf5e7,0xf5ea,0xc4f2,0xf5ec,0x0000,0xc4f1, +0x0000,0xf742,0x0000,0xc5d5,0xc5d7,0xf7ee,0xc5d6,0xf8b9, +0xf940,0xf942,0xf8fe,0xf941,0xc66c,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x7f00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa6ce,0x0000, +0xacfb,0xd26f,0xafca,0x0000,0x0000,0xb2da,0xdafc,0xdafd, +0x0000,0x0000,0x0000,0xeadf,0xc16a,0xede1,0x0000,0x0000, +0xc2bb,0x0000,0xf2ba,0xf2b9,0xc4a2,0xf5ed,0x0000,0xf743, +0xc5f8,0xca49,0x0000,0x0000,0xaac9,0xa875,0x0000,0x0000, +0xd04d,0x0000,0x0000,0xd360,0xd35b,0xd35f,0xd35d,0xafcb, +0xd35e,0xd35c,0x0000,0xd6f1,0x0000,0xdafe,0xdb40,0xdf69, +0xdf6a,0xb86e,0xb86f,0xdf68,0xdf6b,0xdf67,0xb86d,0x0000, +0xbb40,0x0000,0xb870,0xe37a,0x0000,0xbd7c,0xe6f1,0xbd7d, +0x0000,0xbfa9,0xeae2,0xeae0,0xeae1,0xede4,0xede3,0xede2, +0x0000,0x0000,0x0000,0xf2bb,0x0000,0xc3b9,0xf2bc,0xf744, +0xc5f9,0xf8ba,0xa6cf,0xaacb,0xaaca,0xd04f,0xacfc,0x0000, +0x0000,0xd04e,0xd362,0x0000,0xafcc,0xd6f2,0xd361,0x0000, +0x0000,0x0000,0xb2dc,0xd6f5,0xd6f3,0xd6f4,0xb2db,0x0000, +0xdb42,0xdb43,0xdb41,0x0000,0xb873,0xdf6d,0xdf6c,0xdf6e, +0xb872,0xb871,0x0000,0x0000,0xe6f2,0xe6f4,0x0000,0xbd7e, +0xe6f3,0xeae3,0xbfaa,0xf079,0x0000,0xf078,0xc3bb,0xf2bd, +0xc3bd,0xc3bc,0xf4b0,0xf5ee,0xc4f3,0xa6d0,0xd050,0xacfd, +0xd365,0xafce,0xd364,0xd363,0x0000,0xafcd,0x0000,0xd6fb, +0x0000,0xd6fd,0xd6f6,0xd6f7,0xb2dd,0xd6f8,0xb2de,0xd6fc, +0xd6f9,0xd6fa,0xb2df,0x0000,0xb5be,0xb5bf,0x0000,0xdb44, +0x0000,0x0000,0x0000,0xdf6f,0xdf70,0x0000,0xe37e,0xbb43, +0xbb41,0xbb42,0xe37b,0xe37c,0x0000,0xe37d,0xe6f9,0x0000, +0xe6fa,0xbda1,0xe6f7,0xe6f6,0xe6f8,0xe6f5,0xbfad,0xeae4, +0xbfab,0xbfac,0xede6,0xc16b,0xede5,0xefa8,0x0000,0xf07a, +0xf07b,0xc2bc,0x0000,0xc2bd,0xc16c,0xf2be,0xf2bf,0xf4b1, +0xc4a3,0xa6d1,0x0000,0xa6d2,0xacfe,0xaacc,0xafcf,0xd051, +0x0000,0x0000,0x0000,0xb5c0,0xa6d3,0xad41,0xd052,0xd053, +0xad40,0xad42,0xa6d4,0x0000,0xd054,0xafd1,0xd366,0xafd3, +0xafd0,0xafd2,0x0000,0xd741,0xb2e0,0x0000,0xd740,0xd6fe, +0x0000,0xdf71,0x0000,0x0000,0xe3a1,0x0000,0xbda2,0x0000, +0xbfae,0xeae6,0xeae5,0x0000,0xede7,0x0000,0x0000,0x0000, +0xf5ef,0x0000,0x0000,0xa6d5,0xcb73,0xcdaa,0xad43,0xd055, +0x0000,0xd368,0x0000,0x0000,0x0000,0xafd4,0xd367,0xafd5, +0x0000,0x0000,0x0000,0xd743,0x0000,0x0000,0xb2e2,0xd742, +0xd744,0x0000,0xb2e1,0x0000,0x0000,0x0000,0x0000,0xdb46, +0xdb47,0xdb45,0xb5c1,0x0000,0x0000,0x0000,0xb874,0x0000, +0xb875,0x0000,0xbb45,0x0000,0xe3a3,0xe3a2,0xbb44,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe6fb,0x0000,0x0000,0xe6fc, +0x0000,0x0000,0x0000,0x0000,0xeae7,0x0000,0x0000,0xc170, +0xc16f,0xc16d,0xc16e,0xc171,0x0000,0xf07c,0xc2bf,0xc2be, +0xf2c0,0xf4b2,0x0000,0x0000,0x0000,0xc5a5,0xc5a4,0xa6d6, +0x0000,0x0000,0xd1fb,0x0000,0xb877,0xb5c2,0xb876,0xbb46, +0x0000,0xa6d7,0xc9a9,0xa6d8,0xa6d9,0x0000,0x0000,0xcdab, +0xcb76,0x0000,0xcb77,0xa877,0x0000,0xcb74,0xa876,0x0000, +0xa879,0xcb75,0xa87b,0xa87a,0xcb78,0xa878,0x0000,0x0000, +0x0000,0xaad1,0xaacf,0xcdad,0x0000,0xaace,0x0000,0x0000, +0x0000,0xaad3,0xaad5,0xaad2,0x0000,0xcdb0,0xcdac,0xaad6, +0x0000,0xaad0,0xa87c,0x0000,0xaad4,0xcdaf,0x0000,0x0000, +0xcdae,0x0000,0xaacd,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd05b,0xad47,0xad48,0xd05d,0x0000,0xd057, +0xd05a,0xd063,0xd061,0x0000,0xad49,0xd067,0xad4c,0xd064, +0xd05c,0xd059,0x0000,0x0000,0xdb49,0xd062,0xad44,0xd065, +0xd056,0xd05f,0xad46,0xad4b,0xd060,0xad4f,0xad4d,0x0000, +0xd058,0xad4a,0x0000,0xd05e,0xad4e,0xad45,0xd066,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xafda,0x0000,0xafe3, +0xafd8,0xafd6,0xd36a,0xafde,0xafdb,0xd36c,0x0000,0x0000, +0xafdd,0xd36b,0xd369,0xd36e,0xafe2,0xafe0,0xdb48,0x0000, +0xd36f,0xd36d,0xafd7,0x0000,0x0000,0xafd9,0xafdc,0x0000, +0xafdf,0x0000,0xafe1,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd74e,0xb2e4,0x0000, +0xd745,0xd747,0x0000,0xd748,0x0000,0xd750,0xd74c,0xd74a, +0x0000,0xd74d,0xd751,0xb2e5,0xb2e9,0xd746,0x0000,0xd74f, +0x0000,0xb2e7,0x0000,0xb2e6,0xd74b,0xd749,0x0000,0xb2e3, +0xb2e8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xb5c8,0xdb51,0x0000,0x0000,0xdb4f,0xb5ca,0x0000, +0x0000,0x0000,0x0000,0xdb4a,0xdfa1,0x0000,0xb5c9,0xdb4e, +0x0000,0x0000,0xdb4b,0xb5c5,0xb5cb,0xdb50,0xb5c7,0xdb4d, +0xbb47,0xb5c6,0xdb4c,0xb5cc,0xb5c4,0xb5c3,0x0000,0x0000, +0x0000,0x0000,0x0000,0xdf77,0xdf75,0x0000,0xdf7b,0x0000, +0xdf73,0xdfa2,0xdf78,0x0000,0xdf72,0xb87b,0xb8a3,0xdf7d, +0x0000,0xdf76,0x0000,0xb87e,0x0000,0x0000,0xb87c,0xdf7e, +0xb879,0xb878,0xdf79,0xb87d,0xb5cd,0x0000,0xdf7c,0xdf74, +0xb87a,0xb8a1,0xb8a2,0x0000,0x0000,0x0000,0x0000,0xbb4c, +0xbb48,0x0000,0xbb4d,0xe3a6,0x0000,0x0000,0xe3a5,0xe3a7, +0xbb4a,0xe3a4,0xbb4b,0xe3aa,0xe3a9,0xe3a8,0x0000,0xbb49, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe741,0x0000,0xe744, +0xbda8,0xe743,0xbda7,0xbda3,0xbda4,0xbda5,0xe740,0xe6fe, +0xbda6,0x0000,0xe742,0xe6fd,0x0000,0x0000,0xeae9,0xeaf3, +0xbfb1,0xbfb0,0x0000,0xeaed,0xeaef,0x0000,0xeaea,0x0000, +0xeaee,0xeae8,0xeaf1,0xbfaf,0xeaf0,0xeaec,0x0000,0xeaf2, +0x0000,0xeaeb,0xc174,0xede8,0xedee,0xc178,0xc17a,0xc177, +0xc176,0x0000,0xc175,0xc173,0xede9,0xedec,0xc172,0xeded, +0x0000,0xc179,0xedeb,0x0000,0xedea,0xc2c0,0x0000,0xc2c1, +0xf0a1,0xf07d,0xf07e,0x0000,0x0000,0xf2c2,0x0000,0xf2c1, +0xc3be,0xf4b4,0xc4a4,0xf4b3,0x0000,0xf5f0,0xf745,0xc5a6, +0xf943,0xf944,0xc5d8,0xa6da,0x0000,0xaad7,0xdb52,0xbb4e, +0xc17b,0xedef,0xa6db,0x0000,0xafe5,0xafe4,0xdb53,0x0000, +0x0000,0x0000,0xeaf4,0xa6dc,0xad50,0x0000,0x0000,0xdb54, +0xdb55,0xdb56,0xbb4f,0xbfb2,0xa6dd,0x0000,0xaad8,0xd068, +0xafe6,0xd370,0xb2ea,0x0000,0xdb57,0xb8a4,0x0000,0xbb50, +0xbfb3,0xc17c,0xc2c2,0xf4b5,0xa6de,0xaad9,0x0000,0x0000, +0xafe7,0xd752,0xb5ce,0x0000,0xbb51,0xe3ab,0xe745,0x0000, +0x0000,0x0000,0x0000,0xa6df,0xb5cf,0xdfa3,0xbb52,0xa6e0, +0xcdb1,0xd069,0xad51,0x0000,0x0000,0xd372,0x0000,0x0000, +0xafea,0x0000,0xafe8,0xafe9,0xafeb,0x0000,0x0000,0xd371, +0x0000,0x0000,0xd757,0xd754,0xd756,0xb2eb,0xb2ed,0xb2ec, +0xd753,0xb2ee,0xd755,0x0000,0xdb58,0xdb59,0x0000,0xdb5a, +0xdfa6,0x0000,0xdfa7,0x0000,0xdfa5,0xdfa8,0x0000,0xb8a5, +0x0000,0xdfa4,0x0000,0xbb53,0x0000,0x0000,0xe74a,0xe746, +0xe749,0xe74b,0xe748,0xe747,0x0000,0xeaf5,0xeaf6,0xeaf7, +0xbfb4,0xbfb5,0xedf1,0xedf0,0xedf2,0x0000,0xf0a3,0xf0a2, +0x0000,0xf2c4,0x0000,0xf2c5,0xf2c3,0x0000,0xc4a5,0x0000, +0xf4b6,0xf4b7,0x0000,0xf746,0xf7ef,0xf8bb,0xa6e1,0xa87d, +0x0000,0xc17d,0xa6e2,0x0000,0xd758,0xdb5b,0x0000,0xc641, +0xca4a,0x0000,0x0000,0x0000,0xca4b,0xca4d,0xa6e3,0xca4e, +0xca4c,0x0000,0x0000,0xcba2,0xcba3,0xcb7b,0x0000,0x0000, +0x0000,0x0000,0xcba1,0xa8a1,0x0000,0xa8a2,0xcb7c,0xcb7a, +0xcb79,0xcb7d,0xa87e,0xcb7e,0xd06a,0x0000,0x0000,0x0000, +0xcdb6,0xaadc,0xcdb5,0xcdb7,0x0000,0xaadb,0xcdbc,0xaadf, +0xcdb2,0xcdc0,0xcdc6,0xaae6,0xcdc3,0xaae3,0x0000,0xcdb9, +0xcdbf,0xcdc1,0x0000,0xcdb4,0xaae2,0xaadd,0xcdba,0xaae4, +0xaae7,0xaae1,0x0000,0xaada,0xcdbe,0xcdb8,0xcdc5,0xaae9, +0xaae5,0xaae0,0xcdbd,0xafec,0xcdbb,0xaade,0xaae8,0x0000, +0xcdb3,0x0000,0xcdc2,0xcdc4,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xad62,0xad5c,0xad64,0xad61,0xd071,0xd074,0xad5d, +0x0000,0xd06b,0x0000,0xad56,0xad60,0x0000,0xad63,0xad65, +0xd0a2,0xd077,0x0000,0xad55,0xd0a1,0xad59,0xad57,0xad52, +0xd06f,0x0000,0xd07e,0xd073,0xd076,0xd0a5,0x0000,0xad66, +0xd07d,0xad5e,0xd078,0xd0a4,0xd075,0xd079,0xd07c,0x0000, +0x0000,0xd06d,0xd0a3,0xd07b,0x0000,0x0000,0xd06c,0x0000, +0xd070,0xad5f,0xad5a,0xad53,0xad58,0xad54,0xad67,0xd06e, +0xd3a5,0xad5b,0x0000,0x0000,0xd07a,0xce41,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3a8,0xaffa, +0x0000,0xd376,0x0000,0xd3a3,0xd37d,0x0000,0xd3b2,0x0000, +0xd3aa,0x0000,0xd37e,0x0000,0xd3a9,0xd378,0xd37c,0xd3b5, +0xaffd,0xd3ad,0xd3a4,0xafed,0xd3b3,0xd374,0x0000,0xd3ac, +0x0000,0xaffc,0xaff7,0xd373,0xaff5,0xaff4,0xaff9,0xd3ab, +0xaff1,0xaff8,0xd072,0xdb5c,0xd3a6,0x0000,0x0000,0xd37a, +0xaffb,0xd37b,0xd3a1,0xaffe,0xd375,0xd3af,0x0000,0xd3ae, +0xd3b6,0xaff3,0xaff0,0xd3b4,0xd3b0,0xd3a7,0xd3a2,0xaff6, +0xaff2,0xd377,0xafee,0xd3b1,0xafef,0x0000,0xd379,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd75e,0xd760,0xd765,0xd779,0xb2fc, +0xb2f2,0x0000,0xd75d,0xb2fd,0xb2fe,0xd768,0xd76f,0xd775, +0x0000,0xd762,0x0000,0xd769,0x0000,0x0000,0xb340,0xd777, +0xd772,0xb2fa,0xb2f8,0xd76e,0xd76a,0xd75c,0xb2ef,0xd761, +0xd759,0x0000,0xb2f7,0xb2f9,0xd766,0xd763,0xb2f4,0xd773, +0xb2f1,0xd764,0xd77a,0xd76c,0x0000,0xd76b,0xb2f0,0x0000, +0xb2fb,0x0000,0xb2f3,0xd75a,0xd75f,0xd770,0xd776,0xb341, +0xd75b,0xd767,0xd76d,0xb2f6,0x0000,0x0000,0xd778,0xd771, +0xd774,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xb2f5,0x0000,0xdb6c, +0xdb60,0xb5d7,0xdb7d,0xdba7,0xdbaa,0xb5d5,0xdb68,0xdba3, +0xdb69,0xdb77,0xb5e2,0xdb73,0xb5df,0x0000,0xdb74,0xdb5d, +0x0000,0xdba4,0x0000,0x0000,0xb5e8,0xdba1,0xdb75,0xdbac, +0xdb70,0xdfc8,0x0000,0xdbaf,0xb5e6,0xdb6e,0xdb7a,0xb5e9, +0xb5d4,0xdb72,0xdbad,0xdb6b,0xdb64,0xdb6f,0x0000,0xdb63, +0xdb61,0xb5d0,0xdba5,0xdb6a,0xdba8,0x0000,0xdba9,0xb5d8, +0xb5dd,0xb5d9,0xb5e1,0xdb7e,0xb5da,0xdb76,0xdb66,0x0000, +0xb5d2,0xdb5e,0xdba2,0xdbab,0xdb65,0xb5e0,0xdbb0,0xdb71, +/* 0x8400 */ +0x0000,0xdb6d,0x0000,0xb5d1,0xb5e5,0x0000,0xdb7c,0xb5e7, +0x0000,0xdb78,0xb5dc,0xb5d6,0xb5de,0xb5d3,0xb5e4,0xdb79, +0xdb67,0xdb7b,0xdb62,0xdba6,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xdbae,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xdb5f,0x0000,0x0000,0x0000,0x0000, +0x0000,0xdfc7,0x0000,0xdfdd,0xb855,0xdfcc,0x0000,0xdfca, +0xdfb5,0xb8a9,0xdfc5,0xdfd9,0xdfc1,0xb8b1,0xdfd8,0xdfbf, +0xb5e3,0xdfcf,0xdfc0,0xdfd6,0xb8b0,0xb8a8,0x0000,0xdfaa, +0xdfb2,0x0000,0xdfcb,0xdfc3,0xdfdc,0xdfc6,0xb8b6,0xdfd7, +0x0000,0xb8ad,0x0000,0xdfc9,0xdfd1,0xdfb6,0xdfd0,0x0000, +0xdfe1,0xdfb1,0xdfd2,0x0000,0xdfdf,0x0000,0xdfab,0xb5db, +0x0000,0xdfb9,0xdfb8,0xb8af,0x0000,0xdfbc,0xdfbe,0xdfcd, +0xdfde,0xb8b2,0x0000,0xb8b3,0x0000,0xdfb0,0xb8ab,0xdfb4, +0xdfda,0xb8b4,0x0000,0xb8ac,0xb8ae,0xb8b5,0xdfe0,0xdfd3, +0xdfce,0x0000,0x0000,0xdfbb,0xdfba,0xb8aa,0xdfac,0xb8a7, +0xdfc4,0xdfad,0xdfc2,0x0000,0x0000,0xdfb7,0xdfdb,0x0000, +0x0000,0x0000,0xb8a6,0x0000,0x0000,0x0000,0xdfb3,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xdfaf,0xdfd5,0xdfae, +0xbb60,0xe3d3,0x0000,0x0000,0xe3c2,0x0000,0x0000,0xe3ac, +0xe3ca,0xbb58,0xe3bb,0xe3c5,0xbb5b,0xe3be,0xbb59,0xe3af, +0xe3cd,0xe3ae,0xe3c1,0x0000,0xe3ad,0x0000,0x0000,0xe3bf, +0xe3c8,0xe3c6,0xe3ba,0xe3b5,0xe3b3,0x0000,0xe3b4,0xe3c7, +0xe3d2,0xe3bc,0xbb5a,0x0000,0xe3b7,0x0000,0xe3cb,0x0000, +0xbb5d,0xe3b6,0xe3b0,0xe3c0,0xbb61,0x0000,0x0000,0xbb55, +0xbb5e,0xe3b8,0xe3b2,0x0000,0xbb57,0xdfd4,0xbb56,0xe3c3, +0x0000,0xbb54,0xbb63,0xbb5c,0xe3c4,0xe3b9,0xe3b1,0xe3cc, +0xe3bd,0xbb62,0xe3d0,0xbb5f,0xe3cf,0x0000,0xe3c9,0xe3ce, +0x0000,0x0000,0x0000,0xe3d1,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe773, +0xe774,0xe767,0xe766,0xe762,0xbdb4,0x0000,0xbdac,0xe776, +0xe775,0xdfa9,0xe75f,0xe763,0xe75d,0x0000,0xe770,0xe761, +0x0000,0xe777,0xe75a,0xe758,0xe764,0xe76e,0xe769,0xbdb6, +0xe74f,0x0000,0xe76d,0x0000,0x0000,0x0000,0xbdb7,0xdfbd, +0xe75b,0xe752,0xe755,0xe77b,0xe75c,0xe753,0xe751,0xe74e, +0x0000,0xbdb0,0xe765,0xbdaf,0xbdb3,0xe760,0xe768,0xbda9, +0xe778,0xe77c,0xbdab,0x0000,0xe757,0xe76b,0xe76f,0xe754, +0xe779,0xbdb2,0x0000,0xbdb1,0xe74c,0xbdb5,0xe772,0xe756, +0xe76a,0xe750,0xe75e,0xe759,0xbdad,0xbdae,0xe76c,0xe77d, +0xe77a,0xe771,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe74d,0x0000,0xbdaa,0xeb49,0x0000, +0xeb40,0xeb43,0x0000,0xbfbb,0xeb45,0xeaf9,0xeb41,0xeb47, +0xbfb8,0xbfbc,0xbfb6,0x0000,0x0000,0xeafb,0xeb4c,0x0000, +0x0000,0xeb46,0x0000,0xeafc,0xeb55,0xeb4f,0xeaf8,0xee46, +0xeafe,0xbfb7,0x0000,0xeb4a,0x0000,0xeb54,0xbfbf,0x0000, +0xeb51,0xeafd,0xeb44,0xeb48,0xeb42,0xeb56,0xeb53,0xeb50, +0xbfb9,0xbfba,0xbfbe,0xeafa,0xeb57,0xbfbd,0xeb4d,0x0000, +0x0000,0xeb4b,0x0000,0x0000,0x0000,0xeb4e,0xee53,0xee40, +0xee45,0xee52,0xee44,0xedfb,0xee41,0x0000,0xc1a2,0x0000, +0xedf4,0xee4d,0xee4f,0xedf3,0xc1a1,0xee51,0xee49,0xc1a8, +0xee50,0xee42,0xc1aa,0xedf9,0xeb52,0xee4a,0xee47,0xedf5, +0xee55,0xc1a4,0x0000,0x0000,0xc1a5,0xedf7,0xee48,0x0000, +0xee54,0xee4b,0xedfd,0xc1a7,0xc1a3,0xee4c,0xedfe,0xee56, +0xedf8,0xee43,0xee4e,0xedfa,0xedfc,0x0000,0xc2cb,0xedf6, +0xc1a9,0xc2c4,0xc17e,0x0000,0x0000,0x0000,0x0000,0xc1a6, +0xc2c8,0xf0b3,0x0000,0xf0a9,0xf0a4,0xf0aa,0xf0b4,0xf0b8, +0xf0b7,0xc2ca,0xc2c9,0x0000,0x0000,0xf0ab,0xf0b9,0xf0ae, +0xf0a6,0x0000,0xf0a8,0xf0a7,0xf0ad,0xf0b2,0xf0a5,0xf0ac, +0xf0b1,0xc2c7,0x0000,0xf0af,0x0000,0xc2c5,0xf0b0,0xc2c3, +0xc2c6,0xf2d5,0xf0b5,0x0000,0x0000,0xc3c2,0x0000,0xf2cd, +0xf2d1,0xf2c9,0xf2cc,0x0000,0xf2d4,0xc3c0,0xf2d9,0xf2d2, +0x0000,0xf2ca,0xf2da,0xf2d3,0xc3c3,0xc3c4,0xf2d7,0x0000, +0xf2cb,0xc3bf,0xc3c1,0xf2c6,0xf2ce,0xf2c8,0x0000,0xf2d8, +0xf2d6,0xf2c7,0xf2cf,0x0000,0x0000,0x0000,0xf4be,0xc3c5, +0xf2d0,0xc4a7,0xc4a9,0xc4a6,0x0000,0xf4c3,0xf4bb,0xf4b9, +0xf4bd,0xf4ba,0x0000,0x0000,0xf4bf,0xf4c1,0xc4aa,0xc4ac, +0x0000,0xf4c0,0xc4ad,0xc4ab,0xf4c2,0x0000,0x0000,0x0000, +0x0000,0xc4a8,0x0000,0x0000,0x0000,0x0000,0x0000,0xc4f4, +0xf5f1,0xf5f7,0xc4f6,0xf4bc,0xf5f6,0x0000,0xf5fd,0xf5f4, +0xf5fb,0xf5fa,0xf4b8,0xf5f5,0xf0b6,0xf5fe,0xf5f3,0xf5f8, +0x0000,0xf5fc,0xf5f2,0x0000,0xf74a,0xc4f5,0xf5f9,0x0000, +0x0000,0xf7f4,0xf74b,0xf749,0xf747,0xf748,0xf74c,0x0000, +0xc5d9,0xf7f2,0xf7f0,0xf7f5,0xf7f3,0x0000,0xf7f6,0xc5da, +0xf7f1,0x0000,0x0000,0xf8bc,0x0000,0x0000,0xf945,0xf946, +0xf947,0x0000,0x0000,0xf9c7,0xf9bd,0xca4f,0xaaea,0x0000, +0xad68,0x0000,0xd3b8,0xd3b7,0xb040,0xb342,0xd77c,0x0000, +0x0000,0xd77b,0x0000,0xb5ea,0xb8b8,0x0000,0xb8b7,0xb8b9, +0x0000,0xe3d4,0xe77e,0xeb58,0xeb5a,0xeb59,0x0000,0xc1ab, +0xee57,0xf0ba,0xf9a5,0xa6e4,0x0000,0xcdc9,0xcdca,0xcdc8, +0xcdc7,0xaaeb,0x0000,0xd0a9,0xd0a7,0x0000,0x0000,0xd0a6, +0x0000,0xad69,0xad6b,0xad6a,0xd0a8,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd3c4,0xd3c1,0xd3bf, +0x0000,0x0000,0xb041,0xd3c2,0xb046,0xd3bc,0xd3cb,0x0000, +0xd3cd,0xd3bd,0x0000,0xb043,0xd3ce,0xd3c9,0xd3bb,0xd3c0, +0xd3ca,0xd3c6,0xd3c3,0x0000,0xb048,0xd3cc,0xd3be,0x0000, +0x0000,0xd3c7,0xd3b9,0xb047,0xb044,0xd3c5,0x0000,0xd3c8, +0xd3ba,0xb045,0xb042,0x0000,0x0000,0x0000,0x0000,0xb34c, +0xd7a5,0xb34b,0x0000,0xd7a8,0xd7ab,0xb348,0xb346,0xd77e, +0xd7a9,0xd7a7,0xd7a4,0xd7ac,0xd7ad,0xd7af,0xd7b0,0xd77d, +0xb345,0xd7a2,0xd7a1,0xd7ae,0xb347,0xd7a3,0xb349,0xb344, +0xd7a6,0xb34d,0x0000,0xb34a,0xd7aa,0x0000,0x0000,0x0000, +0xb5f1,0xdbbf,0x0000,0xdbb4,0xb5ee,0x0000,0xdfe7,0xdbbd, +0xdbb1,0xb5ec,0xdbb6,0xb5ef,0xdbba,0xdbb8,0xb5f2,0xb5eb, +0x0000,0x0000,0xdbb2,0xdbb5,0xb5f0,0x0000,0xdbb3,0x0000, +0xdbbe,0xdbbc,0xdbb7,0xdbb9,0xdbbb,0xb5ed,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xdfe8,0xdfee,0xdfe4, +0xdfea,0xb8ba,0xdfe6,0xb8c0,0x0000,0x0000,0xb8bf,0x0000, +0xb8be,0xdfed,0xb8c1,0xb8c2,0xdfe3,0xdff0,0xb8c3,0xb8bd, +0xb8bc,0xdfec,0xb8c4,0xdfe2,0xdfe5,0xdfef,0xdfeb,0x0000, +0x0000,0xe3f4,0xe3e9,0xb8bb,0x0000,0x0000,0x0000,0x0000, +0xbb6a,0xe3dd,0xe3f2,0xe3de,0xbb65,0x0000,0xe3db,0x0000, +0xe3e4,0xe3dc,0xbb67,0xe3d6,0xe3f1,0xbb68,0xe3ee,0xe3ef, +0xe3d7,0xbb6d,0xe3e6,0x0000,0xe3e0,0xe3e7,0xe3da,0x0000, +0xe3f3,0xe3eb,0xe3e5,0xe3d5,0xbb69,0xe3ec,0x0000,0xbb6c, +0xe3f0,0x0000,0xe3ea,0xbb66,0xe3e8,0x0000,0xe3e2,0xbb64, +0xe3d9,0xe3e1,0xe3ed,0xe3df,0x0000,0x0000,0xe3e3,0x0000, +0x0000,0x0000,0x0000,0x0000,0xbdc1,0xdfe9,0xe7b2,0xe7bb, +0xe7b1,0xe7ad,0xe7aa,0xbdc2,0xe7a8,0xbb6b,0xe7a1,0xbdc0, +0xe7a7,0xbdbf,0xe7ac,0xe7a9,0xe7b9,0xe7b4,0xe7ae,0xe7b3, +0xbdbb,0xe7ab,0xe7be,0xe7a2,0xe7a3,0xe7ba,0xbdbc,0xe7bf, +0xbdbe,0xe7c0,0xe7b0,0xe3d8,0xe7b6,0xe7af,0xe7b8,0xe7b5, +0x0000,0x0000,0x0000,0xe7a6,0xbdb9,0xe7bd,0xbdba,0xe7a4, +0xbdbd,0xeb64,0xe7b7,0xe7bc,0x0000,0x0000,0x0000,0x0000, +0x0000,0xeb61,0xbdb8,0xbfc0,0xeb6b,0xeb67,0x0000,0xeb65, +0xeb60,0xeb6f,0x0000,0x0000,0x0000,0xbfc4,0x0000,0xeb5c, +0xeb68,0xeb69,0xeb5f,0xeb5e,0xeb6c,0x0000,0xeb62,0xeb5d, +0xeb63,0x0000,0xeb6e,0xeb5b,0xeb6d,0xeb6a,0xbfc2,0xbfc1, +0x0000,0x0000,0xbfc3,0xeb66,0xf0cb,0x0000,0x0000,0x0000, +0x0000,0x0000,0xee59,0xc1b1,0xee5d,0xee5a,0xee61,0xee67, +0xee5c,0x0000,0xee70,0xc1ae,0xee6a,0xee5f,0xee6b,0xee66, +0xee6d,0xee5e,0xc1b3,0xc1b2,0xee60,0xee6e,0xee58,0xee6c, +0xc1ac,0x0000,0xee64,0xee63,0xee68,0xee5b,0xc1b0,0x0000, +0xc1b4,0xee62,0xee69,0xc1b5,0xee65,0x0000,0x0000,0x0000, +0x0000,0xc1ad,0xc1af,0xf0c7,0xf0c5,0x0000,0x0000,0xf0cc, +0xf0c9,0xf0cd,0x0000,0xf0be,0xf0c6,0xf0d1,0xee6f,0xf0c2, +0xc2cf,0xe7a5,0xf0bd,0xf0ca,0xf0c4,0xf0c1,0xf0bc,0xf0bb, +0xf0d0,0x0000,0xf0c0,0xf0bf,0xc2cd,0xf0c8,0x0000,0xc2cc, +0x0000,0x0000,0xc2ce,0xf0c3,0xf0cf,0x0000,0xf2de,0xf2df, +0x0000,0xc3c9,0xf2dc,0xc3c6,0xf2e4,0x0000,0xc3ca,0xf2e6, +0xf2db,0xf0ce,0xf2e8,0xf2dd,0x0000,0xc3c7,0xf2e3,0x0000, +0xf2e5,0xf2e0,0xf2e7,0xf2e2,0xf2e1,0xc3c8,0x0000,0x0000, +0xf4c5,0xf4c6,0x0000,0xf4c8,0xc4ae,0xc4af,0xf4c9,0xf4c7, +0x0000,0xf4c4,0x0000,0xf642,0xf645,0xf641,0x0000,0xc4fa, +0xf643,0xc4f9,0xc4f8,0xc4f7,0xf644,0xf751,0xf74f,0x0000, +0xf74e,0xf640,0xf750,0xf646,0xf74d,0x0000,0xf7f9,0xf7d7, +0xf7f7,0xc5db,0xf7f8,0xf7fa,0x0000,0xf8bf,0xc5fa,0xf8be, +0xf8bd,0xc5fb,0x0000,0xc65a,0xf96e,0xf9a7,0xf9a6,0xf9a8, +0xa6e5,0xd0aa,0x0000,0xd3cf,0xd3d0,0x0000,0x0000,0x0000, +0xdbc0,0x0000,0xf647,0xf8c0,0xa6e6,0xad6c,0xd0ab,0x0000, +0x0000,0x0000,0xd7b1,0xb34e,0x0000,0xdbc2,0xdbc1,0xb5f3, +0x0000,0xb8c5,0xe7c1,0xbdc3,0x0000,0xbdc4,0x0000,0x0000, +0x0000,0xbfc5,0xc5fc,0xa6e7,0x0000,0x0000,0x0000,0xd0ac, +0xaaed,0xd0ae,0xd0ad,0xad6d,0x0000,0xd3d1,0x0000,0xd3d8, +0xb049,0xd3d6,0xd3d4,0x0000,0xd3db,0xd3d2,0xd3d3,0xb04a, +0x0000,0xb04e,0x0000,0x0000,0xd3dc,0xb04d,0xd3da,0xd3d7, +0xd3d5,0xb04b,0xb04c,0xd3d9,0x0000,0x0000,0x0000,0x0000, +0xb350,0xd7b2,0x0000,0xb355,0xd7c2,0xb354,0xd7c4,0x0000, +0x0000,0xd7b8,0xb352,0xd7c3,0x0000,0xd7b3,0xb353,0xd7bf, +0xd7bb,0xd7bd,0xd7b7,0xd7be,0x0000,0x0000,0xb34f,0xd7ba, +0x0000,0xd7b9,0xd7b5,0x0000,0xd7c0,0x0000,0x0000,0xd7bc, +0xd7b4,0x0000,0xd7b6,0xb351,0xd7c1,0x0000,0x0000,0x0000, +0x0000,0xb5f6,0xdbcd,0x0000,0x0000,0x0000,0xdbc9,0xdbcb, +0xdbc6,0xdbc5,0xdbc3,0x0000,0xdbca,0xdbcc,0xdbc8,0x0000, +0xdbc7,0xb5f4,0xb5f5,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xdbcf,0xb8cd,0xdff2,0xdff8,0xdff3,0xdff4,0xf9d8, +0xdff9,0x0000,0xb8cf,0x0000,0xb8c7,0xb8ce,0xdff1,0xdbc4, +0xb8ca,0xb8c8,0xdff7,0xdff6,0xb8c9,0xb8cb,0xdff5,0xb8c6, +0x0000,0xb8cc,0x0000,0x0000,0x0000,0x0000,0x0000,0xe3f6, +0xbb74,0x0000,0x0000,0xe442,0xe441,0x0000,0xe3fb,0xbb76, +0xe440,0xe3f7,0xe3f8,0xbb6e,0xbb70,0x0000,0xe3fd,0xe3f5, +0xbb72,0xbb71,0xe3f9,0xe3fe,0xe3fc,0xbb73,0xe3fa,0x0000, +/* 0x8900 */ +0x0000,0xdbce,0xbb6f,0x0000,0x0000,0xe7c2,0xe7c9,0xbdc6, +0x0000,0xe7cd,0xbdca,0xe7c5,0xe7c3,0x0000,0xe7cc,0x0000, +0xbdc5,0xe7cb,0xbdc7,0xbdc8,0xe7c4,0xbdc9,0xe7ca,0xe7c6, +0xe7c7,0xe7c8,0xbb75,0x0000,0x0000,0x0000,0xeb70,0xeb7c, +0x0000,0xbfca,0xeb77,0xeb79,0x0000,0xbfc8,0xeb71,0xeb75, +0x0000,0xeb78,0xbfc6,0xbfc9,0xeb7b,0xeb73,0xeb74,0xeb7a, +0xeb72,0xeb76,0xbfc7,0xee72,0x0000,0xee71,0xc1b7,0xee77, +0xc1b9,0x0000,0x0000,0xc1b6,0xee73,0xc1ba,0xee74,0x0000, +0x0000,0xee75,0xee78,0x0000,0xc1b8,0x0000,0xf0d6,0x0000, +0x0000,0xf0d9,0x0000,0xf0d3,0xf0d5,0x0000,0x0000,0xf0d4, +0xf0d7,0xf0d8,0xee76,0xf0d2,0x0000,0x0000,0xc3cd,0xf2ec, +0xf2ef,0xf2f1,0xf2ea,0xf2eb,0xf2ee,0xf2f0,0xc3ce,0xc3cc, +0xc3cb,0xf2ed,0xf2e9,0xf4ca,0xc4b0,0x0000,0xf4cb,0x0000, +0x0000,0xf649,0xc4fb,0xf64b,0xc4fc,0xf648,0xf64a,0xc5a8, +0x0000,0xf752,0xc5a7,0xf7fd,0xf7fc,0x0000,0xf7fb,0x0000, +0x0000,0xf948,0xf949,0xf94b,0xf94a,0x0000,0xca50,0xa6e8, +0x0000,0xad6e,0xd7c5,0xb5f7,0x0000,0xdffa,0xc2d0,0x0000, +0xf2f2,0x0000,0x0000,0xa8a3,0x0000,0x0000,0x0000,0xb357, +0x0000,0x0000,0x0000,0xb356,0x0000,0xdbd0,0xb5f8,0xdbd2, +0xdbd1,0x0000,0x0000,0xdffb,0xb8d0,0xe443,0xe446,0xe445, +0x0000,0xe444,0xe7ce,0xe7d0,0xe7cf,0x0000,0xbfcc,0x0000, +0x0000,0x0000,0xbfcb,0x0000,0xc1bb,0xee79,0xee7b,0xee7a, +0x0000,0x0000,0xc2d1,0x0000,0x0000,0x0000,0xf2f4,0xf2f3, +0x0000,0xf4cc,0xc4b1,0x0000,0x0000,0xc4fd,0xf754,0xf753, +0xc65b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xa8a4,0xd0af,0xad6f,0xd7c8,0xd7c6,0x0000, +0x0000,0xd7c7,0xdbd4,0xdbd5,0xe043,0xdbd3,0x0000,0xdffc, +0xe041,0xe040,0xe042,0xb8d1,0xdffe,0xdffd,0xe044,0x0000, +0xe449,0xe447,0x0000,0xe448,0xe7d3,0xe7d1,0x0000,0x0000, +0xe7d2,0xeb7d,0xee7c,0xee7d,0xc2d2,0x0000,0xf2f5,0xf4cd, +0xc4b2,0x0000,0xf64c,0xf755,0xc5a9,0x0000,0xf7fe,0xf94c, +0xa8a5,0x0000,0xad71,0xad72,0xd0b0,0x0000,0x0000,0xd0b1, +0xad70,0x0000,0xb054,0x0000,0xb052,0x0000,0xb051,0xb058, +0xb050,0xb059,0xd3dd,0xb056,0x0000,0xb053,0xb057,0xb055, +0xb04f,0x0000,0x0000,0xb35f,0x0000,0xb359,0xd7cc,0xb35e, +0x0000,0x0000,0xb360,0xb35a,0x0000,0xb35b,0x0000,0xd7ca, +0x0000,0x0000,0xb358,0x0000,0xd7cb,0xb35d,0x0000,0x0000, +0xd7c9,0xb35c,0x0000,0x0000,0xb644,0x0000,0xb646,0x0000, +0x0000,0xdbd8,0xb645,0xb5f9,0xb5fd,0x0000,0xb8e4,0xe049, +0xdbda,0xb5fe,0x0000,0x0000,0xdbdd,0xdbde,0xb643,0x0000, +0xdbe0,0x0000,0xdbe2,0x0000,0xdbe3,0xdbd7,0xdbd6,0xdbe4, +0xb642,0xdbe1,0xdbdf,0x0000,0xb640,0xb5fb,0xb647,0xdbdb, +0xdbdc,0xdbd9,0x0000,0xb641,0x0000,0x0000,0xb5fc,0x0000, +0xb5fa,0xe048,0xb8df,0xb8da,0x0000,0x0000,0xb8d5,0x0000, +0xb8e5,0xb8d6,0x0000,0xb8d2,0xb8e1,0xb8de,0xb8e0,0x0000, +0xb8d7,0xb8dc,0xb8d3,0xb8d4,0xe050,0xe04d,0xe045,0xe04a, +0x0000,0xb8e2,0xe051,0xb8e3,0xb8d9,0x0000,0x0000,0xe047, +0x0000,0xe04f,0xe04b,0xe04e,0xe04c,0xb8dd,0xe046,0xb8d8, +0x0000,0x0000,0x0000,0xe44c,0xbb78,0xbb7b,0x0000,0xe44e, +0x0000,0xbba5,0xe44d,0xbb7d,0x0000,0xbdcf,0xe44f,0x0000, +0xbba4,0xe44b,0xbba6,0x0000,0x0000,0x0000,0xbb79,0x0000, +0xb8db,0xbb7c,0x0000,0xbb7a,0xbb7e,0xbba2,0xbb77,0xbba7, +0xbba3,0x0000,0xbba1,0xe44a,0x0000,0x0000,0x0000,0x0000, +0xbdd6,0x0000,0xbdd2,0x0000,0x0000,0x0000,0xbdd9,0x0000, +0xe7d6,0xbdda,0xe7e2,0xe7db,0xbdcb,0xe7e3,0xe7dd,0xbdd5, +0xe7de,0x0000,0xbdd4,0xe7e1,0xbdce,0xe7df,0xe7d5,0xbdcd, +0xebaa,0xbdd3,0x0000,0xbdd0,0x0000,0xbdd8,0x0000,0xe7d4, +0x0000,0xe7d8,0xbdcc,0xe7d7,0xe7d9,0xe7da,0xbdd7,0xe7dc, +0xe7e0,0xe7e4,0x0000,0xbddb,0xbfd2,0xeba5,0xebab,0xeba8, +0xeb7e,0xebac,0xeba1,0x0000,0xeba7,0x0000,0xbfcd,0xbfd3, +0xebad,0x0000,0x0000,0xbfcf,0x0000,0xbfd9,0xbfd4,0xebaf, +0xeba9,0xbfd0,0xeba2,0xbfda,0xeba3,0xeba4,0xbfdb,0xbfd8, +0xbdd1,0x0000,0xbfce,0xebb0,0xbfdc,0x0000,0xbfd5,0xebae, +0xbfd1,0xbfd6,0xbfd7,0x0000,0xc1c3,0xeea4,0xeead,0xeeaa, +0xeeac,0x0000,0xc1c0,0xeea5,0x0000,0xeeab,0xc1bc,0xeea7, +0xc1c4,0xeea3,0xeea8,0xeeaf,0xeba6,0xeea9,0xeea2,0xc1bd, +0xeea1,0xc1be,0xeeb0,0xc1bf,0xeeae,0xc1c2,0xee7e,0x0000, +0xc1c1,0x0000,0xeea6,0xf0dc,0xf0ea,0xf0e5,0xf0e7,0xf0db, +0xc2d3,0x0000,0xf0da,0xc2d6,0xc2d5,0x0000,0xf0e9,0xf0e1, +0xf0de,0xf0e4,0x0000,0xf0dd,0x0000,0xf0df,0xf0e8,0xf0e6, +0x0000,0xc2d4,0xf0ed,0xf0eb,0xf0e2,0xf0ec,0xf0e3,0x0000, +0xf2f9,0xc3cf,0xf341,0x0000,0x0000,0xf64f,0xc3d6,0xf0e0, +0xf2f7,0xc3d2,0xf2f8,0xf2fd,0x0000,0x0000,0xc3d4,0xc3d5, +0xf2f6,0xf340,0xf342,0xf2fa,0xf2fc,0xf2fe,0xf2fb,0xf343, +0xc3d1,0xc3d7,0xc3d3,0x0000,0xc3d0,0xf4d0,0x0000,0xc4b7, +0xf4ce,0x0000,0x0000,0xf4d2,0x0000,0xf4d3,0xc4b5,0xf4d4, +0xf4d1,0x0000,0xf4cf,0xc4b8,0xc4b4,0xf4d5,0x0000,0xc4b6, +0xc4b3,0x0000,0x0000,0x0000,0xc4fe,0x0000,0x0000,0xc540, +0xf64e,0xf64d,0xf650,0xf651,0x0000,0xc541,0xf756,0xf75b, +0xc5aa,0x0000,0xf758,0x0000,0xf757,0xf75a,0xf759,0x0000, +0xf843,0x0000,0xc5dc,0xf842,0xf840,0x0000,0xf841,0x0000, +0x0000,0x0000,0xc5fe,0xc5fd,0xf8c1,0xf8c2,0xc640,0x0000, +0xf94d,0xf94e,0xc667,0x0000,0xc66d,0x0000,0xf9a9,0xf9c8, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x8c00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8a6, +0x0000,0xd7cd,0x0000,0xd7ce,0xe052,0xe450,0xe7e5,0xc1c6, +0x0000,0xc1c5,0xf0ee,0xf344,0x0000,0xf844,0xa8a7,0xd3de, +0xb05a,0xb361,0xe054,0xe053,0xbddc,0xe7e6,0xbddd,0xeeb1, +0xc2d7,0x0000,0x0000,0x0000,0xc676,0xa8a8,0xcdcb,0xd3df, +0x0000,0x0000,0xb362,0x0000,0xd7cf,0xd7d0,0x0000,0xdbe5, +0x0000,0xb648,0xb8e6,0x0000,0xe056,0xe055,0xe057,0x0000, +0xe451,0xe452,0xbba8,0xbfdd,0xbdde,0xbfde,0x0000,0xeeb5, +0xeeb2,0xeeb4,0xeeb3,0xc1c7,0x0000,0xf0ef,0xf346,0xf345, +0xcba4,0xb05c,0xb05b,0xd3e0,0x0000,0xd7d1,0x0000,0x0000, +0xdbe7,0xdbe6,0xb649,0x0000,0xe059,0xe05a,0xe058,0x0000, +0x0000,0xb8e8,0xb8e7,0x0000,0xbbaa,0xbba9,0x0000,0xe7e7, +0xebb3,0xebb1,0xebb2,0xbfdf,0xeeb7,0xeeb6,0x0000,0xf0f2, +0xf0f1,0xf0f0,0xf347,0x0000,0xf9aa,0xa8a9,0xad73,0x0000, +0xad74,0xb05d,0xb05e,0xd3e2,0xd3e1,0xd7d2,0x0000,0xb368, +0xb366,0xb363,0xb367,0xb365,0xb364,0x0000,0x0000,0xb64a, +0xdbea,0x0000,0xb8ed,0xb64c,0xb651,0xdbec,0xb653,0xb652, +0xb655,0xdbeb,0xdbe8,0xb64f,0xb64b,0xb64d,0xdbe9,0xb654, +0xb650,0xb64e,0xb8ef,0xb8ee,0xb8ec,0xb8f0,0x0000,0xb8ea, +0xb8eb,0x0000,0xb8e9,0x0000,0xe05b,0x0000,0x0000,0xe454, +0x0000,0xbbac,0xbbad,0xbbab,0x0000,0xe453,0x0000,0xe455, +0x0000,0xe7ea,0xe7ec,0x0000,0xbde7,0xe7ed,0xbde0,0xe7e9, +0xbddf,0xbde9,0xbde5,0xbde6,0xbde2,0xe7e8,0xbde1,0xe7ee, +0xe7eb,0x0000,0xbde8,0x0000,0xbde3,0xbde4,0xebb5,0x0000, +0xebb7,0xebb6,0x0000,0xebb8,0xbfe0,0xebb4,0x0000,0x0000, +0xc1cb,0xeeb8,0xc1c8,0xc1cc,0xc1ca,0xc1c9,0xf0f3,0x0000, +0xf0f6,0x0000,0xf0f5,0x0000,0xf0f4,0xc2d8,0xf348,0xf349, +0xc3d8,0xf34a,0xc3d9,0x0000,0x0000,0xc4ba,0x0000,0xc4b9, +0xf652,0x0000,0x0000,0xc542,0xf653,0xf75c,0xc5ab,0xc5ac, +0x0000,0xf845,0x0000,0xc642,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa8aa,0x0000,0xb36a,0xb369, +0xe05c,0xe05d,0x0000,0xbbae,0xebb9,0xbdea,0xebba,0xeeb9, +0xa8ab,0x0000,0xd0b2,0xad76,0xad75,0x0000,0xd3e3,0xb05f, +0xd3e4,0xd7d5,0x0000,0xd7d4,0x0000,0xd7d3,0x0000,0x0000, +0xdbee,0xb658,0x0000,0x0000,0xdbed,0xb657,0x0000,0x0000, +0x0000,0xdbef,0xb656,0x0000,0xe05f,0xe062,0xe060,0xe061, +0xe065,0xe05e,0xe066,0xe063,0xe064,0xbbb0,0xe456,0x0000, +0x0000,0xbbaf,0x0000,0xe7f2,0xe7f0,0x0000,0x0000,0xbdeb, +0xe7ef,0xe7f1,0x0000,0xbdec,0x0000,0xebbb,0x0000,0xebbc, +0xc1cd,0x0000,0xf34c,0xf34e,0xf34b,0xf34d,0xf4d6,0xf654, +0x0000,0x0000,0xf96f,0xa8ac,0xad77,0xd3e5,0xd3e7,0xd3e6, +0x0000,0xd7d8,0xb36c,0x0000,0xd7d6,0x0000,0xb36b,0xd7d9, +0x0000,0xd7da,0xd7d7,0x0000,0x0000,0xdbfb,0xb660,0xdbf3, +0xdbf9,0x0000,0x0000,0xb65b,0xb65e,0xdbf2,0xb659,0xdbf6, +0xe06c,0xb65d,0x0000,0xdbf1,0x0000,0xdbf7,0xdbf4,0xdbfa, +0xdbf0,0xdbf8,0xb65c,0xb65f,0xdbf5,0xb65a,0x0000,0xb8f2, +0xe068,0xb8f1,0xe06f,0xe06e,0xb8f8,0x0000,0xb8f9,0xe070, +0xb8f3,0xe06d,0xb8f7,0xe072,0xe069,0x0000,0xe06b,0xb8f4, +0xe067,0xe06a,0xe071,0xb8f5,0xe073,0x0000,0x0000,0x0000, +0x0000,0x0000,0xb8f6,0x0000,0xbbb1,0xe45b,0xe461,0xe459, +0xe462,0x0000,0xe458,0xe45d,0xe463,0xe460,0xe45f,0xe45e, +0x0000,0xe457,0xe45c,0x0000,0x0000,0xe45a,0x0000,0xbdf1, +0xbdee,0xe7fb,0xe841,0xe843,0xe840,0xe7f8,0xe7fa,0xe845, +0xe842,0xe7fc,0xe846,0xe7f9,0xe844,0xbdef,0xbdf5,0xbdf3, +0xe7f3,0xbdf4,0xbdf0,0xe7f4,0xe7f6,0xe7f5,0xe7fd,0xe7fe, +0x0000,0xbdf2,0x0000,0xbded,0x0000,0x0000,0xe7f7,0x0000, +0xebc6,0xbfe2,0x0000,0xebbd,0xbfe3,0xbfe6,0xebc2,0x0000, +0xebbf,0xbfe5,0x0000,0x0000,0xebc3,0xebc4,0xebbe,0xebc7, +0xebc0,0xebc5,0xbfe4,0x0000,0xbfe1,0xebc1,0x0000,0xeebf, +0xc1d0,0xc1ce,0xc1d1,0xc1cf,0xeebe,0xeebb,0xeeba,0x0000, +0xeebd,0x0000,0x0000,0xeebc,0xf145,0xc2de,0xf0fb,0xf0fa, +0x0000,0xc2d9,0xf141,0xf140,0xf0f7,0xf143,0xf0fc,0xc2dd, +0xf0f9,0xf142,0xf0f8,0xc2da,0xc2dc,0xf0fd,0xc2db,0xf0fe, +0x0000,0xf144,0xf352,0x0000,0xc3de,0xf34f,0x0000,0xf353, +0x0000,0x0000,0xc3db,0xf351,0xc3e0,0x0000,0xc3dd,0x0000, +0xf350,0x0000,0xc3df,0xf354,0xc3da,0x0000,0x0000,0x0000, +0x0000,0xc4bc,0xc4be,0x0000,0xf4d9,0xc4bd,0xf4d7,0xc3dc, +0xf4d8,0xc4bb,0xc543,0xc545,0xf656,0xc544,0xf655,0x0000, +0xf761,0xc5ad,0xf760,0xc5ae,0xf75e,0xf75d,0xf762,0xf763, +0xf846,0x0000,0xf75f,0x0000,0x0000,0xf8c6,0xf8c3,0xf8c4, +0xf8c5,0xc65c,0x0000,0xf951,0xf950,0xf94f,0xf970,0x0000, +0xf9be,0xf9ab,0xc66e,0xa8ad,0xb060,0x0000,0x0000,0x0000, +0x0000,0x0000,0xb8fa,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xbdf6,0x0000,0x0000,0xebc8,0x0000,0x0000, +0xc2df,0x0000,0xf355,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf9ac,0xa8ae,0xaaee,0xad79,0xad78,0x0000,0xb063, +0x0000,0xd3e8,0xb061,0xd3e9,0xb062,0x0000,0x0000,0xd7df, +0xd7db,0x0000,0x0000,0xb36d,0xd7de,0xd7dd,0xd7dc,0xb36e, +0xd7e0,0xd7e1,0x0000,0x0000,0x0000,0xdc43,0xdc41,0xdc45, +0xdc46,0xdc4c,0x0000,0xdc48,0xdc4a,0x0000,0xdc42,0xdbfc, +0x0000,0xdc49,0x0000,0x0000,0xdc4b,0xdc44,0xdc47,0xdbfd, +0xb662,0xdc40,0xdbfe,0xb661,0xb663,0x0000,0xb8fd,0xe075, +0xe077,0xe076,0xe07b,0xb8fb,0x0000,0xe078,0xe074,0xe079, +0xe07a,0xb8fc,0xb8fe,0xe07c,0x0000,0xe467,0xe466,0x0000, +0xe464,0xe465,0xbbb3,0xbbb5,0xbbb2,0xbbb4,0xe84d,0xe84e, +0xe849,0x0000,0xe84a,0xbdf8,0xbdfd,0xbdf7,0xbdfe,0xbdf9, +0xe84b,0x0000,0x0000,0xe84c,0xe848,0xbe40,0xbdfb,0x0000, +0x0000,0xbdfa,0xbdfc,0x0000,0xe847,0x0000,0xebca,0xbfe8, +0x0000,0x0000,0xebcc,0xbfea,0xebcf,0xebcb,0xebc9,0xebce, +0xbfe9,0xebcd,0x0000,0xbfe7,0x0000,0x0000,0xc1d3,0xc1d6, +0xeec1,0x0000,0xc1d4,0xeec0,0xc1d2,0xc1d5,0xf146,0xf147, +0xf148,0xc2e0,0x0000,0xf149,0x0000,0xc2e1,0xc3e2,0xf358, +0xf359,0xf357,0xf356,0xf35a,0xc3e1,0xf4dd,0xf4db,0xf4dc, +0xf4de,0xf4da,0xf4df,0xf658,0x0000,0xf659,0xf657,0xc546, +0xf764,0xc5af,0xf765,0xf848,0xf847,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xa8af,0xb664,0x0000,0x0000,0xb940, +0x0000,0x0000,0x0000,0xbbb6,0x0000,0x0000,0xbfec,0x0000, +0xbfeb,0x0000,0x0000,0x0000,0x0000,0xc3e3,0xc47c,0xc547, +0xa8b0,0xb064,0xb941,0x0000,0xf35b,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcba6, +0x0000,0x0000,0xa8b1,0x0000,0xa8b4,0xa8b3,0xa8b2,0x0000, +0x0000,0xcba5,0x0000,0xcdcd,0x0000,0xcdcf,0xaaef,0x0000, +0x0000,0xaaf1,0xcdcc,0xcdce,0xaaf0,0xcdd1,0xcdd0,0xcdd2, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd0b6,0xd0b4,0xad7c,0xd0b3,0xada3,0xad7e,0xad7b,0x0000, +0xada4,0x0000,0xad7d,0xada2,0x0000,0xada1,0xd0b5,0x0000, +0xad7a,0x0000,0x0000,0x0000,0xb06a,0xd3eb,0xd3f1,0xb067, +0xb06e,0x0000,0xb069,0xd3ee,0xd3f0,0xb06c,0xd3ea,0xd3ed, +0xb068,0xb065,0xd3ec,0xb06b,0xd3ef,0xb06d,0xb066,0x0000, +0x0000,0x0000,0x0000,0xd7e3,0xd7e6,0xb370,0x0000,0xb37a, +0xb376,0xd7e4,0x0000,0x0000,0xb37e,0xb377,0xb37c,0xb372, +0x0000,0xb36f,0xb371,0xb37d,0xd7e5,0xb375,0xb378,0xb374, +0xb379,0xd7e7,0xb37b,0xb373,0xd7e2,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xdc4d,0xb665,0xdc4f, +0x0000,0xb667,0xb669,0x0000,0xdc4e,0xb666,0xb66a,0x0000, +0xb668,0x0000,0x0000,0x0000,0xb947,0xe0a3,0xb94f,0xe07e, +0x0000,0xb950,0xb945,0x0000,0xe0a1,0x0000,0x0000,0xb94a, +0x0000,0xe0a2,0xb943,0xb942,0x0000,0xb94d,0xb94c,0xb94b, +0xb949,0xb94e,0xe07d,0xb944,0xb946,0xb948,0x0000,0x0000, +0xbbb8,0xbbbb,0x0000,0xbbbf,0xbbb9,0xbbbe,0xbbbc,0x0000, +0xbbb7,0x0000,0xbbbd,0xbbba,0x0000,0x0000,0x0000,0xe852, +0xbe43,0xbe41,0x0000,0xe853,0x0000,0xbe44,0xbe42,0xe851, +0xe850,0x0000,0xbff0,0xe84f,0xbfee,0xbfed,0xebd0,0xbe45, +0xbfef,0xebd1,0xbff2,0xebd2,0xbff1,0xc1d8,0xeec3,0xc1d7, +0xc1dc,0xc1da,0xc1db,0xc2e3,0xc1d9,0xeec2,0xebd3,0xc2e2, +0xc2e4,0x0000,0xc3e4,0xc3e5,0x0000,0xf4e0,0x0000,0xc5de, +0xc5dd,0xa8b6,0x0000,0x0000,0xca55,0xb06f,0x0000,0xca52, +0xca53,0xca51,0x0000,0xca54,0x0000,0x0000,0xcbaa,0xcba7, +0xcbac,0xcba8,0xa8b7,0xa8ba,0x0000,0xcba9,0xa8b9,0xcbab, +0x0000,0x0000,0xa8b8,0x0000,0x0000,0x0000,0x0000,0xcdd5, +0xcdd7,0xaaf4,0xcdd3,0xcdd6,0xcdd4,0xaaf2,0xaaf5,0x0000, +0xaaf3,0x0000,0x0000,0x0000,0x0000,0xd0b8,0xd0bc,0xd0b9, +0x0000,0xada7,0x0000,0xada8,0x0000,0xd0bb,0x0000,0xd0bd, +0xd0bf,0x0000,0xada5,0xd0be,0x0000,0x0000,0xada6,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd7ee,0xd0ba,0xd3f2,0xd3fb, +0xd3f9,0xd3f4,0xd3f5,0xd3fa,0xd3fc,0xb071,0x0000,0xd3f7, +0xd3f3,0xb070,0xb072,0xd3f6,0xd3fd,0xd3f8,0x0000,0x0000, +0xb3a1,0xd7f1,0xd7e9,0xd7ef,0xd7f0,0xb3a2,0x0000,0xd7e8, +0xd7ea,0xd0b7,0xd7ec,0xd7ed,0xd7eb,0xb66c,0x0000,0x0000, +0x0000,0xdc56,0xebd4,0xdc57,0xdc54,0xb3a3,0xb66e,0xdc53, +0xdc59,0xdc58,0xb66b,0xdc5c,0xdc52,0xdc5b,0xdc50,0xdc5a, +0xdc55,0xb66d,0x0000,0xe0aa,0x0000,0xe0a5,0xe0ab,0xe0a6, +0xe0a4,0xe0a7,0xb951,0x0000,0xe0a9,0x0000,0xe0a8,0xb952, +0xbbc1,0xbbc0,0xe46e,0xe471,0xe469,0xe46d,0xbbc2,0xe46c, +0xe46a,0xe470,0xe46b,0xe468,0xe46f,0x0000,0xe859,0xbe48, +0xf14a,0xe856,0xe857,0xe855,0xdc51,0xbe47,0xe85a,0xe854, +0xbe46,0xbe49,0xe858,0xebd5,0xbff3,0xebd6,0xebd7,0x0000, +0xeec4,0xc1dd,0xf14b,0xf14c,0x0000,0x0000,0xf14d,0xf35d, +0xf35c,0xf4e2,0x0000,0xf4e1,0xf65b,0xf65c,0xf65a,0xf766, +0xc5b0,0xa8bb,0xadaa,0xada9,0xb075,0xb074,0xd440,0xd441, +0xd3fe,0x0000,0xb073,0xd7f5,0x0000,0xd7f6,0xd7f2,0xb3a4, +0xd7f3,0x0000,0xd7f4,0x0000,0x0000,0x0000,0x0000,0xdc5f, +0xdc61,0xdc5d,0xdc60,0xb66f,0xdc5e,0xb670,0x0000,0x0000, +0xdd73,0xb955,0xb954,0x0000,0xb953,0x0000,0xe0ac,0xe0ad, +0x0000,0x0000,0xe473,0xe475,0xbbc6,0xbbc3,0x0000,0xbbc5, +0xbbc4,0xe474,0xe472,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe861,0xe85e,0xe85f,0xbe4d,0xe860,0xe85b,0xe85c,0xbe4a, +0x0000,0xbe4b,0xe85d,0xbe4c,0x0000,0xebdb,0x0000,0xebdc, +0xebd9,0xebda,0xbff4,0xebd8,0x0000,0x0000,0x0000,0x0000, +0x0000,0xeec8,0xeec5,0xeec7,0xc1e0,0xeecb,0xc1df,0xeec9, +0xeecc,0xeeca,0xeec6,0xc1de,0x0000,0xf14f,0x0000,0xf150, +0xf14e,0x0000,0xf152,0xc2e5,0xc2e6,0xf35f,0xc3e7,0xf151, +0xf35e,0xc3e6,0xf4e5,0xf4e6,0xc4bf,0xf4e4,0x0000,0xf4e3, +0x0000,0xf65d,0xc548,0x0000,0xf849,0xf8c8,0xf8c7,0x0000, +0xc643,0xc65d,0xf8c9,0xf971,0x0000,0xc66f,0xa8bc,0xaaf6, +0x0000,0xb956,0x0000,0xc4c0,0xa8bd,0xadab,0xb3a5,0xb671, +0xc2e7,0xaaf7,0x0000,0xd0c1,0xd0c0,0xd442,0x0000,0xb078, +0xb076,0xb07a,0xd444,0x0000,0xb079,0xb077,0x0000,0x0000, +0x0000,0x0000,0xd443,0xb3a8,0xd7fc,0x0000,0xb3a7,0xb3a9, +0xd842,0xb3ab,0xd7fe,0xd840,0xd7f7,0xb3aa,0xd843,0x0000, +0x0000,0xd7f9,0x0000,0xd7fa,0xd7f8,0xb3a6,0x0000,0xd841, +0xd7fb,0xd7fd,0x0000,0x0000,0x0000,0xdc6d,0x0000,0xdc6c, +0xdc6a,0xdc62,0xdc71,0xdc65,0xdc6f,0xdc76,0xdc6e,0xb679, +0x0000,0xb675,0xdc63,0x0000,0xdc69,0xb677,0x0000,0xdc68, +0xb678,0xb67a,0xdc6b,0x0000,0xb672,0xb673,0xdc77,0xdc75, +0x0000,0xdc74,0xdc66,0x0000,0xdc72,0x0000,0xb676,0x0000, +0x0000,0x0000,0x0000,0xb674,0xdc73,0xdc64,0xdc67,0xdc70, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe4ba,0xe0b7,0x0000, +0xe0b0,0xe0c3,0xe0cc,0xe0b3,0xb961,0x0000,0xe0c0,0xb957, +0xb959,0xb965,0xe0b1,0x0000,0x0000,0xb95a,0xb95c,0xb966, +0xb95b,0x0000,0x0000,0x0000,0x0000,0xb964,0xe0b9,0x0000, +0xe0ae,0xb962,0xe0b8,0xb95e,0xe0ca,0xb963,0xe0c8,0xe0bc, +0xe0c6,0xb960,0xe0af,0xe0c9,0xe0c4,0x0000,0xe0cb,0xb958, +0x0000,0x0000,0xb967,0xb95d,0x0000,0x0000,0xe0b5,0x0000, +0xe0bd,0xe0c1,0x0000,0xe0c5,0xb95f,0xe0b4,0xe0b2,0xe0be, +0x0000,0x0000,0x0000,0x0000,0xe0bb,0xe0ba,0x0000,0xe0bf, +0xe0c2,0x0000,0xe0c7,0x0000,0x0000,0x0000,0xe478,0x0000, +0xbbc7,0xe4a4,0xe47a,0xbbcc,0xbbd0,0xe4ad,0xe4b5,0xe4a6, +0xbbc8,0x0000,0xe4aa,0xe0b6,0x0000,0xbbc9,0xe4b1,0xe4b6, +0xe4ae,0x0000,0xe4b0,0xe4b9,0xe4b2,0xe47e,0xe4a9,0x0000, +0x0000,0xbbd1,0x0000,0xbbcd,0xe47c,0xe4ab,0xbbcb,0xe4a5, +0xbbca,0xe4b3,0xe4a2,0xe479,0xbbce,0xe4b8,0x0000,0x0000, +0xe47b,0xe4af,0xe4ac,0xe4a7,0xe477,0xe476,0xe4a1,0xe4b4, +0xbbcf,0xe4b7,0xe47d,0xe4a3,0xbe52,0x0000,0x0000,0x0000, +0x0000,0x0000,0xbe5a,0xbe55,0xe8a4,0xe8a1,0xe867,0xbe50, +0x0000,0xf9d7,0x0000,0xbe4f,0xbe56,0x0000,0x0000,0x0000, +0xe865,0xbe54,0xe871,0xe863,0xe864,0xbe4e,0xe8a3,0xbe58, +0xe874,0xe879,0xe873,0xebee,0xe86f,0xe877,0xe875,0xe868, +0xe862,0xe87d,0xbe57,0xe87e,0x0000,0xe878,0x0000,0xe86d, +0xe86b,0xe866,0x0000,0x0000,0x0000,0xe86e,0xe87b,0xe86a, +0xe87a,0xe8a2,0x0000,0x0000,0xbe53,0x0000,0xe876,0xe87c, +0xe872,0xe86c,0xbe51,0x0000,0x0000,0x0000,0xe4a8,0xe870, +0xbe59,0xe869,0x0000,0x0000,0x0000,0x0000,0x0000,0xebf4, +0xbff7,0xebf3,0xebf0,0xec44,0xbffb,0x0000,0xec41,0xebf8, +0xec43,0xebe9,0xebf6,0x0000,0xbffd,0x0000,0xebe1,0x0000, +0xebdf,0xec42,0x0000,0xec40,0xebfe,0xebed,0xebec,0xebe2, +0xc040,0x0000,0xebe8,0xebf2,0xebfd,0xc043,0xec45,0x0000, +0xc1e8,0xc045,0xbffe,0xebe6,0x0000,0xebef,0xebde,0xebe0, +0xbff5,0xc042,0xbffa,0xebe7,0xebf7,0xebf1,0xc041,0xebdd, +0xc1e3,0xebf9,0xebfc,0xbffc,0x0000,0xebeb,0xc044,0xbff9, +0x0000,0x0000,0x0000,0xbff8,0xebf5,0xebfb,0xbff6,0x0000, +0xebe4,0xebfa,0x0000,0x0000,0xebe5,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xebea,0xeed2, +0x0000,0xeed7,0xc1e5,0xc1e7,0xeedd,0xc1e1,0xeeec,0xeee3, +0xeed8,0xeed9,0xeee2,0x0000,0xc1ee,0xeee1,0xeed1,0xeee0, +0xeed4,0xeeed,0xc1ed,0xc1eb,0xeed5,0x0000,0xeee8,0x0000, +0xeeda,0xeee7,0x0000,0xeee9,0xeed0,0xc1e6,0x0000,0xeeea, +0x0000,0x0000,0xeede,0x0000,0xc1ea,0xeedb,0x0000,0x0000, +0xc1ec,0xeee4,0x0000,0x0000,0x0000,0xc1e4,0xeed6,0xeee5, +0x0000,0xeedf,0xebe3,0xeee6,0xeed3,0x0000,0xc1e9,0x0000, +0xeeeb,0x0000,0xc1e2,0xeece,0x0000,0x0000,0x0000,0x0000, +0xf160,0xf159,0xc2e9,0x0000,0xf154,0xf163,0xf15b,0xeedc, +0x0000,0xf165,0xf155,0x0000,0xc2e8,0xf15f,0xc2ea,0xc2f2, +0xc2f0,0xf161,0xc2f1,0xf157,0x0000,0xf158,0xf15d,0xf162, +0x0000,0xeecd,0xc2eb,0xf16a,0xf167,0xf16b,0xf15e,0xf15a, +0xf168,0xf36a,0xf15c,0x0000,0xc2ee,0x0000,0xc2ed,0xeecf, +0xc2ef,0xf164,0xf166,0xc2ec,0xf169,0xf153,0x0000,0xf156, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf373,0x0000,0xf363,0xc3eb,0xf371,0x0000,0x0000,0xf361, +0xc3ec,0x0000,0xf36c,0x0000,0xf368,0xc3f1,0xf372,0xf362, +0xf365,0xc3e9,0xf374,0x0000,0xf36d,0xf370,0xc3ef,0xc3f4, +0xc3f2,0xf369,0xf364,0x0000,0xc3ed,0xc3ee,0xf360,0xc3ea, +0x0000,0xc3e8,0xc3f0,0xf36f,0xc3f3,0x0000,0xf36b,0xf375, +0xc3f5,0x0000,0x0000,0x0000,0xf367,0x0000,0xf36e,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf4f3,0xf542,0xf4f5, +0xf4fc,0xf366,0xf4fa,0xf4e9,0xf540,0xc4c3,0xf4ed,0xf4fe, +0xf4f4,0x0000,0x0000,0xc4c2,0x0000,0x0000,0xf544,0xf4f6, +0x0000,0xf4fb,0xf4fd,0xf4e7,0xf541,0xf4f2,0xf4f7,0xf4eb, +0xf4ef,0xf543,0xf4f9,0xf4e8,0xf4ec,0xf4ee,0xf4f8,0x0000, +0xc4c1,0xf4f1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf4ea,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf4f0,0xf661,0xf666,0xc54f,0xf668,0x0000,0xc549,0x0000, +0xf664,0xf66a,0xc54e,0xc54a,0x0000,0xc54b,0xf660,0xf667, +0xc54d,0xf665,0xc54c,0xf65f,0xf663,0xf662,0x0000,0xf65e, +0xf669,0x0000,0x0000,0x0000,0xc5b1,0xf76d,0xf770,0xf76c, +0xf76e,0xf76f,0xf769,0xf76a,0xf767,0x0000,0x0000,0xf76b, +0xf768,0xc5b2,0xc5b3,0x0000,0x0000,0xf84b,0x0000,0xf84d, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf84c,0xf84e,0x0000, +0xc5e0,0x0000,0xf84a,0xc5df,0xc5e1,0x0000,0x0000,0x0000, +0xf8cb,0xf8cc,0xc644,0xf8ca,0x0000,0xf953,0xf952,0xf954, +0xc65f,0xf955,0xc65e,0xf956,0xf972,0xf975,0xf974,0xc668, +0xf973,0x0000,0x0000,0x0000,0xc672,0xc670,0xc671,0xc677, +0xf9c0,0xf9c1,0xf9bf,0xf9c9,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x9500 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xaaf8, +0x0000,0x0000,0xd844,0xdc78,0xe8a5,0xf376,0x0000,0x0000, +0xaaf9,0x0000,0xadac,0xb07b,0x0000,0x0000,0xd845,0x0000, +0xd846,0xb3ac,0x0000,0xb67d,0xdc7a,0xdc79,0xb6a3,0xb67c, +0xdc7b,0xb67e,0xb6a2,0xb6a1,0xb67b,0x0000,0x0000,0x0000, +0xb968,0x0000,0x0000,0xe0d0,0xe0ce,0x0000,0xe0cf,0xe0cd, +0x0000,0xbbd2,0x0000,0xbbd5,0xbbd7,0xbbd6,0x0000,0x0000, +0xbbd3,0xbbd4,0x0000,0xe8a7,0xe8a6,0xbe5b,0xe8a8,0x0000, +0xe8a9,0xbe5c,0x0000,0x0000,0x0000,0xec4d,0xec4b,0xeef3, +0x0000,0xec49,0xec4a,0xc046,0xec46,0xec4e,0xec48,0xec4c, +0xeeef,0x0000,0x0000,0xeef1,0x0000,0xeef2,0xc1f3,0xeeee, +0xc1f2,0xeef0,0xc1ef,0xc1f0,0xc1f1,0xec47,0x0000,0x0000, +0xc2f5,0xf16e,0xf16c,0xf16d,0xc2f3,0xc2f6,0xc2f4,0x0000, +0x0000,0x0000,0xf377,0xf378,0xc3f6,0x0000,0xf545,0xf547, +0xf546,0xc4c4,0xc550,0xf66d,0xf66c,0xf66b,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x9600 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xaafa,0x0000,0xc9aa,0x0000, +0xca58,0xa6e9,0xca56,0xca59,0xca57,0x0000,0x0000,0x0000, +0xcbae,0x0000,0xa8c1,0x0000,0xa8c2,0xcbb0,0xa8bf,0xcbaf, +0xcbad,0xa8c0,0xa8be,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xcdd8,0xcddb,0xaafd,0xcdda,0xcdd9,0x0000,0xaafc, +0xaafb,0x0000,0xab40,0xcddc,0xaafe,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd0c6,0xadae,0xadaf,0xadb0,0xd0c7,0xd0c3, +0xadad,0xd0c4,0x0000,0xd0c5,0xd0c2,0x0000,0x0000,0x0000, +0xb0a4,0x0000,0x0000,0xb0a1,0xd445,0xb0a2,0xb0a5,0xd446, +0x0000,0xb07e,0xb07c,0xb07d,0xb0a3,0x0000,0x0000,0x0000, +0x0000,0x0000,0xb3ad,0xd849,0xb3b5,0xd848,0x0000,0xd84b, +0xb3b1,0xd84a,0xb6ab,0xb3af,0xb3b2,0xb3ae,0xb3b3,0xb3b4, +0xb3b0,0x0000,0x0000,0x0000,0xd847,0xb6a7,0xdc7d,0x0000, +0xdca3,0x0000,0x0000,0xdca2,0xb6ac,0xb6a8,0xb6a9,0xdc7c, +0xdc7e,0xdca1,0xb6a4,0xb6a6,0x0000,0xb6aa,0xb6a5,0x0000, +0x0000,0xe0d3,0xe0d1,0xe0d2,0xb96a,0xb96b,0x0000,0xe0d4, +0xb969,0xbbd8,0x0000,0xbbda,0xbbd9,0x0000,0xe4bb,0x0000, +0x0000,0xe4bc,0xe8ab,0x0000,0xe8aa,0x0000,0x0000,0xc047, +0xc048,0xec4f,0xc049,0x0000,0xeef6,0x0000,0xeef4,0x0000, +0xeef5,0xc1f4,0x0000,0xf16f,0xc3f7,0x0000,0x0000,0x0000, +0xc1f5,0xab41,0x0000,0xb0a6,0xd447,0x0000,0x0000,0xd84c, +0xb3b6,0xb6ad,0xdca4,0xdca6,0xb6af,0xb6ae,0xb6b0,0xb6b1, +0xdca5,0xb96e,0xb96f,0xb96d,0xbbdb,0xb96c,0xe0d5,0x0000, +0x0000,0x0000,0xbbdc,0xe8ac,0xec50,0xc04a,0xc1f6,0xf170, +0xf174,0xc2f9,0xf171,0xc2fa,0xc2f8,0xf175,0xc2fb,0xf173, +0x0000,0xf379,0xc2f7,0xc3f8,0x0000,0xf8cd,0x0000,0x0000, +0xab42,0xb3b8,0xb3b7,0x0000,0x0000,0x0000,0x0000,0xb6b2, +0xdca8,0xdca7,0xb6b3,0x0000,0x0000,0xe0d9,0xb973,0xb970, +0xe0d8,0xb972,0xe0d6,0xb971,0x0000,0xe0d7,0x0000,0xe4bd, +0xbbdd,0x0000,0xe8af,0x0000,0xbe5d,0xe8ad,0xbe5e,0xbe5f, +0xe8ae,0xbe60,0x0000,0xec51,0x0000,0xc04e,0xc04b,0xc050, +0xec53,0xc04c,0xec52,0xc04f,0x0000,0x0000,0xc04d,0x0000, +0xeef9,0xeefb,0x0000,0x0000,0xc1f7,0xeefa,0xc1f8,0xeef8, +0xeef7,0x0000,0xf177,0xf176,0xc2fc,0xf178,0xf37e,0xc3fa, +0xf37d,0xf37a,0xc3f9,0xf37b,0xf37c,0x0000,0xf548,0xf549, +0xc4c5,0x0000,0xc553,0x0000,0x0000,0xf66e,0x0000,0x0000, +0xc551,0xc552,0xf66f,0x0000,0x0000,0xc5b4,0xc5b5,0xf771, +0x0000,0x0000,0xc645,0xf8cf,0xc647,0x0000,0xf8ce,0xf8d0, +0xc646,0xf957,0x0000,0xf9ad,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xab43,0x0000,0x0000,0x0000,0xb974,0x0000, +0xe4be,0x0000,0xe8b0,0xc051,0xc052,0x0000,0xab44,0x0000, +0xbe61,0xc3fb,0xadb1,0x0000,0x0000,0x0000,0xc053,0x0000, +0xc5e2,0xadb2,0xd84d,0x0000,0xdca9,0x0000,0xdcab,0x0000, +0xdcaa,0x0000,0xe0dd,0xe0da,0xb975,0x0000,0xb976,0xe0db, +0xe0dc,0x0000,0xe4c0,0xe4c5,0xbbde,0xe4bf,0xe4c1,0xe4c8, +0xe4c3,0xe4c7,0xe4c4,0xe4c2,0xe4c6,0xbbdf,0x0000,0x0000, +0xe8b3,0x0000,0xe8b1,0xbe63,0x0000,0xbe62,0xe8b2,0xbe64, +0x0000,0x0000,0x0000,0x0000,0xec56,0x0000,0x0000,0xec55, +0xc054,0xec54,0xeefc,0x0000,0xeefe,0xef41,0xef40,0x0000, +0xc1f9,0xeefd,0xf1a1,0xc2fd,0xf17d,0xf1a2,0xc2fe,0x0000, +0xf17b,0x0000,0xf17e,0xf17c,0xf179,0xc340,0xf17a,0x0000, +0x0000,0x0000,0x0000,0xf3a1,0x0000,0x0000,0xf3a3,0xf3a2, +0x0000,0xf54a,0x0000,0xf54b,0x0000,0x0000,0x0000,0xf670, +0x0000,0xc5b7,0x0000,0xc5b6,0xf84f,0xf850,0xc648,0xf8d1, +0x0000,0xc669,0x0000,0xadb3,0xb6b4,0xe4ca,0xe4c9,0xe8b5, +0xe8b4,0x0000,0x0000,0xc1fa,0xef43,0xef42,0xf1a5,0xf1a3, +0xf1a6,0xf1a4,0x0000,0x0000,0xc3fc,0xf3a4,0xf3a5,0xf3a6, +0x0000,0xf671,0x0000,0xf772,0x0000,0xf8d2,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xadb4,0x0000,0x0000, +0xec57,0xef44,0x0000,0xadb5,0x0000,0x0000,0xbbe0,0x0000, +0xec58,0xc341,0xf1a7,0xc3fd,0x0000,0xf54c,0xf54d,0xc554, +0xf851,0xadb6,0xb3bb,0xb3bc,0xd84e,0xb6b5,0xb6b6,0xdcac, +0xb6b7,0x0000,0xb97a,0x0000,0xb97c,0xe0df,0xe0e0,0xe0de, +0xb977,0xb978,0xb97b,0xb979,0x0000,0x0000,0xe4cb,0xbbe1, +0xbbe2,0x0000,0x0000,0xe8bc,0xbe67,0xe8b7,0xe8b6,0x0000, +0xe8bb,0xbe65,0x0000,0x0000,0xc05b,0x0000,0xe8b8,0xe8bd, +0xe8ba,0xe8b9,0x0000,0xbe66,0x0000,0xc059,0x0000,0xec5a, +0xc055,0x0000,0xec5b,0x0000,0x0000,0xec59,0x0000,0xc058, +0xc056,0xc05a,0x0000,0xc057,0x0000,0x0000,0x0000,0x0000, +0x0000,0xef45,0x0000,0xef4a,0xef46,0xef49,0xc1fb,0x0000, +0xedd4,0xef48,0xef47,0x0000,0xc344,0xc342,0xc345,0xc343, +0xf1a8,0xf1a9,0xf1aa,0xc346,0x0000,0x0000,0x0000,0xf3aa, +0xc440,0xf3a8,0x0000,0xc441,0xf3a7,0xf3a9,0xc3fe,0xf551, +0xf54e,0x0000,0xf54f,0xf550,0xf672,0xc556,0x0000,0xc555, +0x0000,0xf774,0xf773,0xc5b8,0x0000,0x0000,0x0000,0xc5e3, +0xc649,0xc660,0xf958,0xf9ae,0xf9af,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xadb7,0xdcad,0x0000,0x0000,0xe0e1,0xe4cc,0xe4cd,0xbbe3, +0x0000,0xbbe4,0xe8be,0xbe68,0x0000,0x0000,0xc1fc,0x0000, +0xf1ab,0x0000,0xc347,0xf3ad,0xc442,0xf3ac,0xf3ae,0xf3ab, +0xf675,0xf552,0xf553,0x0000,0xc4c6,0x0000,0xf674,0x0000, +0x0000,0xf673,0x0000,0xf775,0xf9b0,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xadb8,0x0000,0x0000,0x0000,0xadb9, +0x0000,0x0000,0xb0a7,0xd448,0x0000,0xd84f,0x0000,0xb6b8, +0x0000,0xb6bb,0xb6b9,0xdcae,0x0000,0xb6bd,0x0000,0xb6ba, +0x0000,0x0000,0xb6bc,0x0000,0xb97e,0x0000,0xe0e2,0x0000, +0x0000,0xe0e3,0xe8c0,0x0000,0xb97d,0xb9a1,0xb9a2,0x0000, +0xe4cf,0x0000,0xe4ce,0xbbe5,0x0000,0xbbe6,0x0000,0xe4d0, +0xe8bf,0xbbe8,0xbe69,0x0000,0xbbe7,0x0000,0x0000,0x0000, +0xc05c,0xe8c1,0xbe6b,0xbe6a,0xe8c2,0xe8c5,0xe8c3,0xe8c4, +0xbe6c,0x0000,0xc061,0xc05f,0x0000,0x0000,0xc05e,0xec5d, +0x0000,0xc060,0x0000,0x0000,0xec5c,0xef4b,0x0000,0xec5e, +0xc05d,0xec5f,0xef4e,0xef4c,0xef4d,0xef52,0xc34b,0xef51, +0xef54,0xef53,0xef50,0xef4f,0x0000,0xc1fd,0x0000,0x0000, +0x0000,0x0000,0xf1ae,0x0000,0xf1ad,0xc34a,0xc348,0xc349, +0x0000,0xf1ac,0x0000,0xf3b1,0x0000,0xc443,0x0000,0xf3b0, +0xf3af,0xc444,0x0000,0xf558,0xf557,0x0000,0xf555,0x0000, +0xf554,0xc4c8,0xc4c7,0xf559,0xf776,0xc5b9,0xf677,0xc557, +0xf676,0xf556,0x0000,0xf777,0xc5e4,0x0000,0xc661,0xf959, +0x0000,0xf9b1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xadba,0xd850, +0xef55,0xadbb,0x0000,0x0000,0xe4d2,0xe4d1,0xec60,0x0000, +0x0000,0xef57,0x0000,0xef56,0x0000,0xc34c,0xf3b2,0xf3b3, +0xc4c9,0x0000,0x0000,0xf9b2,0xb0a8,0xb6bf,0xb6be,0xe0e4, +0xe0e6,0xb9a4,0xe0e5,0xb9a3,0xb9a5,0xe0e7,0x0000,0x0000, +0x0000,0xe4d4,0xe4d6,0xe4d5,0x0000,0xe4d8,0x0000,0x0000, +0x0000,0xbbe9,0xe4d7,0xe4d3,0x0000,0x0000,0x0000,0xe4d9, +0x0000,0xe8cc,0x0000,0xe8cf,0xe8d1,0xe8c7,0xe8cb,0xe8c8, +0xbe6e,0xbe71,0xbe73,0xe8c9,0xe8ca,0xbe72,0xe8cd,0xe8d0, +0xe8ce,0xbe74,0x0000,0xbe70,0xe8c6,0xbe6d,0x0000,0xbe6f, +0x0000,0x0000,0xc063,0xec66,0xec64,0xec63,0x0000,0xec69, +0x0000,0xec68,0xec67,0x0000,0xec62,0xc062,0xec61,0x0000, +0xec65,0xc064,0x0000,0x0000,0xef5a,0x0000,0xef5e,0xef5b, +0xef5d,0xef5c,0xef59,0xef5f,0xef62,0xef60,0xef61,0xc240, +/* 0x9a00 */ +0x0000,0xc1fe,0xef58,0xef63,0xf1b3,0xf1b6,0xf1b8,0xf1b7, +0x0000,0xf1b1,0xf1b5,0xf1b0,0x0000,0xf1b2,0xc34d,0xf1af, +0x0000,0xf1b4,0x0000,0x0000,0xf3c0,0xf3b5,0xc445,0x0000, +0x0000,0xc446,0xf3b4,0xf3b9,0xf3bf,0xf3b7,0xf3be,0x0000, +0xf3bb,0x0000,0xf3ba,0xf3bd,0xf3b8,0xf3b6,0x0000,0xf3bc, +0x0000,0xf560,0xf55e,0xc4ca,0xf55d,0xf563,0xf561,0x0000, +0xc4cb,0xf55c,0xf55a,0x0000,0xf55b,0xc4cd,0xf55f,0xc4cc, +0xf562,0xf678,0xf67e,0x0000,0x0000,0xf679,0xc55b,0xf6a1, +0xc55a,0xf67d,0xf67c,0xc559,0xf67b,0xc558,0xf67a,0x0000, +0xf77d,0xf7a1,0xf77e,0x0000,0xf77b,0xc5bb,0xf778,0xf77c, +0xf7a3,0x0000,0xf7a2,0xf779,0xf77a,0xc5ba,0xf852,0xc5e7, +0x0000,0xf853,0xc5e5,0xc5e6,0x0000,0x0000,0xf8d3,0xc64a, +0xf976,0x0000,0xc66a,0x0000,0xf9b3,0xc66b,0xf9b4,0xf9b5, +0xf9c3,0xf9c2,0xc67a,0xf9cd,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xb0a9,0x0000,0x0000,0xe0e9,0x0000,0xe0e8,0x0000,0xbbea, +0xbbeb,0xe4da,0x0000,0xe8d2,0xec6c,0x0000,0x0000,0xbe75, +0xc065,0xec6a,0x0000,0xec6d,0xc066,0x0000,0xef64,0xec6b, +0xf1b9,0xc34e,0xf3c1,0x0000,0x0000,0x0000,0xf566,0xf564, +0x0000,0x0000,0xf565,0x0000,0x0000,0xf6a2,0x0000,0xc55c, +0xf7a4,0xc5ea,0xc5bc,0xc5e8,0xc5e9,0xf8d4,0xc662,0x0000, +0xb0aa,0x0000,0x0000,0x0000,0xf1ba,0x0000,0x0000,0xd449, +0x0000,0xb9a6,0x0000,0xe4db,0x0000,0x0000,0xbbec,0xe4dc, +0x0000,0x0000,0x0000,0xe8d4,0xe8d3,0xc068,0xbe76,0xbe77, +0x0000,0xe8d7,0xe8d6,0xe8d5,0x0000,0x0000,0xec6e,0xec71, +0x0000,0xec70,0xec6f,0xc067,0xef68,0xef66,0xef65,0x0000, +/* 0x9b00 */ +0x0000,0xef67,0x0000,0xc34f,0xf1bc,0xf1bd,0xc350,0x0000, +0xf1bb,0x0000,0xf3c3,0xf3c2,0xf3c5,0xc447,0xf3c4,0x0000, +0xf567,0xf569,0xf568,0x0000,0x0000,0xf6a3,0xf6a6,0xf6a4, +0xf6a5,0xf7a5,0xc5bd,0x0000,0x0000,0x0000,0xf854,0xf855, +0xf856,0x0000,0xc64b,0xc663,0xf9b6,0xb0ab,0x0000,0xbe78, +0xc069,0xf1be,0x0000,0xf7a6,0x0000,0x0000,0xf9c4,0xd44a, +0x0000,0xc67b,0xb0ac,0xec72,0x0000,0xf1bf,0x0000,0xf3c6, +0x0000,0x0000,0xf6a7,0xf7a7,0xb0ad,0x0000,0xe4dd,0xe4de, +0x0000,0xbbed,0xbbee,0xe8d9,0xbe7a,0xbe79,0xe8d8,0x0000, +0xef69,0x0000,0xf1c0,0xf1c2,0xf1c1,0xc353,0xc352,0xc351, +0x0000,0xc55e,0xf6a8,0x0000,0xc55d,0xf7a9,0xf7a8,0x0000, +0xc64c,0xf8d5,0xb3bd,0xe0ea,0x0000,0x0000,0x0000,0xe4e1, +0xe4df,0xe4e0,0x0000,0x0000,0xe8e2,0x0000,0xe8dd,0xe8da, +0xe8e1,0x0000,0x0000,0x0000,0xe8e3,0x0000,0x0000,0xbe7c, +0xe8e0,0xe8dc,0x0000,0x0000,0xe8db,0xe8df,0xe8de,0xbe7b, +0x0000,0x0000,0xec7d,0xec78,0xec76,0xeca1,0xec77,0x0000, +0xec73,0x0000,0xec79,0x0000,0x0000,0xec74,0xef72,0xec75, +0xeca2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xec7c,0xc06a,0xec7b,0xec7a,0x0000,0xec7e,0x0000,0x0000, +0x0000,0x0000,0xef6a,0xef6d,0x0000,0x0000,0xef6c,0x0000, +0xef74,0xef6f,0xef73,0x0000,0xef71,0xef70,0xef6e,0x0000, +0xef6b,0x0000,0xc243,0xc242,0x0000,0xc244,0xc241,0xef75, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf1c8,0xf1cb,0x0000, +0xf1c9,0xf1cd,0x0000,0x0000,0x0000,0xf1ce,0x0000,0xf1c6, +0xc358,0xf1c7,0x0000,0xf1c5,0xf1cc,0x0000,0xf1c4,0xf1c3, +0xc357,0xc355,0xc354,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf1ca,0xf3cf,0xf3d5,0xc44a,0xf3d0, +0x0000,0xf3d3,0xf3d7,0xc44b,0xf3d2,0x0000,0xf3ca,0x0000, +0xf3c9,0xf3d6,0xf3cd,0x0000,0xf3cb,0xf3d4,0xf3cc,0xc449, +0xc448,0x0000,0xf3c7,0xf3c8,0xf3d1,0x0000,0x0000,0x0000, +0xf3ce,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf56c, +0xf56f,0x0000,0x0000,0x0000,0x0000,0xc356,0x0000,0x0000, +/* 0x9c00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0xf56d,0xf573,0xf571, +0xf56b,0xf576,0x0000,0xf56a,0x0000,0xc4cf,0xf572,0x0000, +0x0000,0x0000,0xf56e,0xc4ce,0xf575,0x0000,0x0000,0xf574, +0x0000,0x0000,0x0000,0x0000,0xf6ab,0xf6aa,0x0000,0x0000, +0x0000,0xf6b1,0x0000,0xf6ad,0xf6b0,0xc560,0x0000,0x0000, +0xf6ae,0xf6af,0x0000,0xf6a9,0xf6ac,0xc55f,0x0000,0x0000, +0x0000,0xc5bf,0xf7b4,0xf7af,0xf7b3,0x0000,0xf7b6,0xf7b2, +0x0000,0xf7ae,0x0000,0xc5c1,0xf7b1,0xf7b5,0xc5c0,0xf7ac, +0xf570,0xf7b0,0x0000,0x0000,0xf7ad,0x0000,0xf7aa,0x0000, +0xf7ab,0xc5be,0xf85a,0xf85c,0xf85f,0xf85b,0xf860,0x0000, +0xf859,0x0000,0xf857,0x0000,0xc5eb,0xf85d,0xc5ed,0xc5ec, +0xf858,0xf85e,0x0000,0x0000,0x0000,0x0000,0xf8da,0xc64d, +0xf8db,0x0000,0xf8d9,0xf8d6,0x0000,0x0000,0xf8d8,0xf8d7, +0xf95a,0x0000,0x0000,0x0000,0x0000,0xf95c,0xf95b,0x0000, +0x0000,0xf979,0x0000,0xf978,0xf977,0xf97a,0x0000,0xc673, +0xc674,0xf9ca,0xf9ce,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xb3be,0xdcaf,0xe0ed, +0x0000,0xb9a7,0xe0eb,0x0000,0x0000,0xe0ec,0x0000,0x0000, +0x0000,0xe4e2,0xe4e3,0xbbf1,0xbbef,0xe4e4,0xbbf0,0xe8e8, +0x0000,0xe8eb,0xe8e5,0xe8ec,0xe8e4,0xe8e6,0x0000,0xe8e7, +0xe8ea,0x0000,0x0000,0xbea1,0xe8ef,0xe8ee,0xbe7d,0xe8e9, +0xe8ed,0xbe7e,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xecac,0x0000,0xc06f,0x0000,0xeca7,0xc06b,0x0000,0xeca4, +0xecaa,0xecad,0x0000,0xc070,0x0000,0xeca9,0xeca6,0xecae, +0xeca5,0x0000,0xecab,0xc06c,0x0000,0xeca3,0xc06d,0x0000, +0xc06e,0xeca8,0x0000,0x0000,0x0000,0xefa9,0xef7a,0xef7b, +0xef7e,0xef7c,0x0000,0xef76,0x0000,0x0000,0xef79,0xefa5, +0xef7d,0x0000,0x0000,0xc245,0x0000,0xefa7,0xefa4,0xc246, +0xefa6,0xef77,0xefa2,0xefa3,0x0000,0xefa1,0x0000,0x0000, +0x0000,0x0000,0xf1d2,0xf1d4,0xf1d7,0x0000,0x0000,0xf1d1, +0x0000,0xc359,0xf1d9,0xf1d0,0xf1da,0x0000,0xf1d6,0xf1d8, +0xf1dc,0xf1d5,0xf1dd,0xf1d3,0xf1cf,0xc35a,0x0000,0xf1db, +0xc35b,0xc44d,0x0000,0x0000,0x0000,0x0000,0x0000,0xef78, +0xf3f1,0xf3e8,0xc44f,0xf3e4,0xc450,0x0000,0x0000,0xf3ed, +0xf3e7,0xf3dd,0xc44e,0xf3ea,0xf3e5,0xf3e6,0x0000,0xf3d8, +0xf3df,0xf3ee,0x0000,0xf3eb,0x0000,0xf3e3,0x0000,0xf3ef, +0xf3de,0xf3d9,0xf3ec,0x0000,0xf3db,0xf3e9,0xf3e0,0xf3f0, +0xf3dc,0xc44c,0xf3da,0xf3e1,0xf3e2,0x0000,0x0000,0x0000, +0xf57d,0x0000,0xf57b,0x0000,0xf5a2,0x0000,0xf5ae,0xf5a5, +0xf57c,0xf578,0xf5a7,0xf57e,0xf5a3,0xf57a,0xf5aa,0xf577, +0xf5a1,0xf5a6,0xf5a8,0xf5ab,0xf579,0x0000,0xf5af,0xf5b0, +0xf5a9,0xf5ad,0xf5a4,0x0000,0xf6c1,0xf6c4,0x0000,0xc561, +0x0000,0xf6c3,0xf6c8,0xf6c6,0xc562,0xf6bd,0xf6b3,0xf6b2, +0xc564,0xf6bf,0xf6c0,0xf6bc,0xf6b4,0x0000,0xf6b9,0xf5ac, +0x0000,0xf6b5,0xc563,0xf6bb,0x0000,0xf6ba,0x0000,0xf6b6, +0xf6c2,0x0000,0xf6b7,0xf7bb,0xf6c5,0xf6c7,0xf6be,0xf6b8, +0xf7bc,0xf7be,0xf7b8,0xc5c2,0x0000,0xf7c5,0xf7c3,0xc5c3, +0xf7c2,0xf7c1,0xf7ba,0xf7b7,0xf7bd,0xf7c6,0xf7b9,0xf7bf, +0x0000,0xf869,0xf86e,0xf864,0xf867,0xc5ee,0xf86b,0x0000, +0xf872,0xf7c0,0x0000,0xf865,0xf86f,0xf873,0xf86a,0xf863, +0xf86d,0x0000,0xf86c,0xf871,0xf870,0xf7c4,0xf868,0xf862, +0xf866,0xc64e,0xc64f,0xf861,0x0000,0xf8e6,0xf8dd,0xf8e5, +0xf8e2,0xf8e3,0xf8dc,0xf8df,0xf8e7,0xf8e1,0xf8e0,0xf8de, +0x0000,0xf8e4,0x0000,0xf95d,0x0000,0xf95e,0x0000,0xf960, +0xf95f,0xf962,0xf961,0xf97c,0xf97b,0xf9b7,0x0000,0xf9b8, +0x0000,0xf9c5,0xc678,0xc67c,0x0000,0xf9cf,0xc67d,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xb3bf,0x0000,0x0000, +0x0000,0xc4d0,0xf6c9,0x0000,0xc650,0xc651,0x0000,0xb3c0, +0xe0ee,0x0000,0xb9a8,0xe8f0,0x0000,0x0000,0xecb0,0xecb1, +0xecaf,0xefab,0xefaa,0xc247,0xf1df,0xefac,0xf1de,0x0000, +0x0000,0xf3f3,0xc451,0xc453,0xf3f2,0x0000,0x0000,0xc452, +0x0000,0xf5b1,0xf5b3,0xf5b2,0xf6ca,0xc565,0x0000,0xc5ef, +0xf8e8,0xf963,0x0000,0x0000,0xf9d2,0xb3c1,0x0000,0xe4e5, +0x0000,0xbea2,0x0000,0x0000,0x0000,0xecb3,0xecb2,0x0000, +0xefad,0x0000,0x0000,0x0000,0xc454,0xc4d1,0xf7c7,0xf9cb, +0x0000,0x0000,0x0000,0xb3c2,0xbbf2,0x0000,0xbea3,0x0000, +0xf3f4,0x0000,0xf874,0xb6c0,0x0000,0x0000,0x0000,0x0000, +0xefae,0x0000,0x0000,0x0000,0xc664,0xb6c1,0xbea4,0xc248, +0xf875,0xb6c2,0x0000,0xe8f1,0xc072,0xecb4,0xecb5,0x0000, +0xc071,0x0000,0xefaf,0xc24c,0xc24a,0xc24b,0xc249,0xf1e0, +0xc35c,0x0000,0x0000,0x0000,0xf5b5,0xf5b4,0xf5b7,0xf5b6, +0xc4d2,0x0000,0x0000,0xf6cb,0x0000,0xf6cd,0xf6cc,0xc566, +0xf7c8,0x0000,0xf876,0xf877,0xc5f0,0xf964,0xf97d,0xc675, +0x0000,0xdcb0,0xecb6,0xefb0,0xf3f5,0xe0ef,0x0000,0xefb1, +0xf1e2,0xf1e1,0x0000,0x0000,0x0000,0x0000,0xf878,0xc652, +0x0000,0xf965,0xf97e,0x0000,0x0000,0x0000,0xb9a9,0xe8f2, +0xe8f3,0x0000,0xecb7,0xb9aa,0x0000,0xc35d,0xf1e3,0x0000, +0xf6cf,0xc567,0xf6d0,0xf6ce,0xf879,0x0000,0xf8e9,0x0000, +0xb9ab,0x0000,0xefb4,0xefb3,0xefb2,0xf1e4,0x0000,0x0000, +0xf1e8,0xf1e7,0xf1e6,0xf1e5,0xc35e,0xf3f6,0xf5b9,0xc4d3, +0xf5b8,0xf6d1,0xf7cb,0xf7ca,0xc5c4,0xf7c9,0xf87c,0xf87b, +0xf87a,0x0000,0x0000,0xbbf3,0x0000,0xecb8,0xc24d,0x0000, +0xf3f7,0xf3f8,0xf7cc,0xf87d,0x0000,0x0000,0xf8ea,0xf966, +0xf9b9,0xf9d4,0xbbf4,0xc24e,0xf1e9,0xf3f9,0xf6d2,0xf87e, +0x0000,0x0000,0xbea6,0x0000,0xefb5,0xf1ea,0xf3fa,0xf3fb, +0xf3fc,0xf5be,0x0000,0xf5ba,0xc568,0xf5bd,0xf5bc,0xc4d4, +0xf5bb,0xc4d6,0x0000,0xc4d5,0xf6d4,0xf6d3,0xc569,0xc56a, +0x0000,0x0000,0xc5c6,0xf7cd,0xc5c5,0x0000,0xf8a3,0xf8a4, +0xf8a2,0xf8a1,0xc654,0x0000,0xf8eb,0xf8ec,0xf8ed,0xc653, +0xf967,0xf96a,0xf969,0xf968,0x0000,0x0000,0xf9d3,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xc073,0x0000,0x0000, +0xc365,0xf5bf,0xf6d5,0x0000,0xc5c7,0xf7ce,0x0000,0x0000, +0xf9d5,0x0000,0x0000,0x0000,0xc074,0x0000,0x0000,0x0000, +0xefb6,0x0000,0xf7cf,0x0000,0xf9a1}; + +static const int ucs_i_big5_table_min = 0x4d00; +static const int ucs_i_big5_table_max = 0x4d00 + (sizeof (ucs_i_big5_table) / sizeof (unsigned short)); + +static const unsigned short ucs_pua_big5_table[] = { +/* 0xf600 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xc6a1,0xc6a2,0xc6a3,0xc6a4,0xc6a5,0xc6a6,0xc6a7, +0xc6a8,0xc6a9,0xc6aa,0xc6ab,0xc6ac,0xc6ad,0xc6ae,0xc6af, +0xc6b0,0xc6b1,0xc6b2,0xc6b3,0xc6b4,0xc6b5,0xc6b6,0xc6b7, +0xc6b8,0xc6b9,0xc6ba,0xc6bb,0xc6bc,0xc6bd,0xc6be,0xc6bf, +0xc6c0,0xc6c1,0xc6c2,0xc6c3,0xc6c4,0xc6c5,0xc6c6,0xc6c7, +0xc6c8,0xc6c9,0xc6ca,0xc6cb,0xc6cc,0xc6cd,0xc6ce,0xc6cf, +0xc6d0,0xc6d1,0xc6d2,0xc6d3,0xc6d4,0xc6d5,0xc6d6,0xc6d7, +0xc6d8,0xc6d9,0xc6da,0xc6db,0xc6dc,0xc6dd,0xc6de,0xc6df, +0xc6e0,0xc6e1,0xc6e2,0xc6e3,0xc6e4,0xc6e5,0xc6e6,0xc6e7, +0xc6e8,0xc6e9,0xc6ea,0xc6eb,0xc6ec,0xc6ed,0xc6ee,0xc6ef, +0xc6f0,0xc6f1,0xc6f2,0xc6f3,0xc6f4,0xc6f5,0xc6f6,0xc6f7, +0xc6f8,0xc6f9,0xc6fa,0xc6fb,0xc6fc,0xc6fd,0xc6fe,0xc740, +0xc741,0xc742,0xc743,0xc744,0xc745,0xc746,0xc747,0xc748, +0xc749,0xc74a,0xc74b,0xc74c,0xc74d,0xc74e,0xc74f,0xc750, +0xc751,0xc752,0xc753,0xc754,0xc755,0xc756,0xc757,0xc758, +0xc759,0xc75a,0xc75b,0xc75c,0xc75d,0xc75e,0xc75f,0xc760, +0xc761,0xc762,0xc763,0xc764,0xc765,0xc766,0xc767,0xc768, +0xc769,0xc76a,0xc76b,0xc76c,0xc76d,0xc76e,0xc76f,0xc770, +0xc771,0xc772,0xc773,0xc774,0xc775,0xc776,0xc777,0xc778, +0xc779,0xc77a,0xc77b,0xc77c,0xc77d,0xc77e,0xc7a1,0xc7a2, +0xc7a3,0xc7a4,0xc7a5,0xc7a6,0xc7a7,0xc7a8,0xc7a9,0xc7aa, +0xc7ab,0xc7ac,0xc7ad,0xc7ae,0xc7af,0xc7b0,0xc7b1,0xc7b2, +0xc7b3,0xc7b4,0xc7b5,0xc7b6,0xc7b7,0xc7b8,0xc7b9,0xc7ba, +0xc7bb,0xc7bc,0xc7bd,0xc7be,0xc7bf,0xc7c0,0xc7c1,0xc7c2, +0xc7c3,0xc7c4,0xc7c5,0xc7c6,0xc7c7,0xc7c8,0xc7c9,0xc7ca, +0xc7cb,0xc7cc,0xc7cd,0xc7ce,0xc7cf,0xc7d0,0xc7d1,0xc7d2, +0xc7d3,0xc7d4,0xc7d5,0xc7d6,0xc7d7,0xc7d8,0xc7d9,0xc7da, +0xc7db,0xc7dc,0xc7dd,0xc7de,0xc7df,0xc7e0,0xc7e1,0xc7e2, +0xc7e3,0xc7e4,0xc7e5,0xc7e6,0xc7e7,0xc7e8,0xc7e9,0xc7ea, +0xc7eb,0xc7ec,0xc7ed,0xc7ee,0xc7ef,0xc7f0,0xc7f1,0xc7f2, +0xc7f3,0xc7f4,0xc7f5,0xc7f6,0xc7f7,0xc7f8,0xc7f9,0xc7fa, +0xc7fb,0xc7fc,0xc7fd,0xc7fe,0xc840,0xc841,0xc842,0xc843, +0xc844,0xc845,0xc846,0xc847,0xc848,0xc849,0xc84a,0xc84b, +0xc84c,0xc84d,0xc84e,0xc84f,0xc850,0xc851,0xc852,0xc853, +0xc854,0xc855,0xc856,0xc857,0xc858,0xc859,0xc85a,0xc85b, +0xc85c,0xc85d,0xc85e,0xc85f,0xc860,0xc861,0xc862,0xc863, +0xc864,0xc865,0xc866,0xc867,0xc868,0xc869,0xc86a,0xc86b, +0xc86c,0xc86d,0xc86e,0xc86f,0xc870,0xc871,0xc872,0xc873, +0xc874,0xc875,0xc876,0xc877,0xc878,0xc879,0xc87a,0xc87b, +0xc87c,0xc87d,0xc87e,0xc8a1,0xc8a2,0xc8a3,0xc8a4,0xc8a5, +0xc8a6,0xc8a7,0xc8a8,0xc8a9,0xc8aa,0xc8ab,0xc8ac,0xc8ad, +0xc8ae,0xc8af,0xc8b0,0xc8b1,0xc8b2,0xc8b3,0xc8b4,0xc8b5, +0xc8b6,0xc8b7,0xc8b8,0xc8b9,0xc8ba,0xc8bb,0xc8bc,0xc8bd, +0xc8be,0xc8bf,0xc8c0,0xc8c1,0xc8c2,0xc8c3,0xc8c4,0xc8c5, +0xc8c6,0xc8c7,0xc8c8,0xc8c9,0xc8ca,0xc8cb,0xc8cc,0xc8cd, +0xc8ce,0xc8cf,0xc8d0,0xc8d1,0xc8d2,0xc8d3,0xc8d4,0xc8d5, +0xc8d6,0xc8d7,0xc8d8,0xc8d9,0xc8da,0xc8db,0xc8dc,0xc8dd, +0xc8de,0xc8df,0xc8e0,0xc8e1,0xc8e2,0xc8e3,0xc8e4,0xc8e5, +0xc8e6,0xc8e7,0xc8e8,0xc8e9,0xc8ea,0xc8eb,0xc8ec,0xc8ed, +0xc8ee,0xc8ef,0xc8f0,0xc8f1,0xc8f2,0xc8f3,0xc8f4,0xc8f5, +0xc8f6,0xc8f7,0xc8f8,0xc8f9,0xc8fa,0xc8fb,0xc8fc,0xc8fd, +0xc8fe}; + +static const int ucs_pua_big5_table_min = 0xf600; +static const int ucs_pua_big5_table_max = 0xf600 + (sizeof (ucs_pua_big5_table) / sizeof (unsigned short)); + +static const unsigned short ucs_r1_big5_table[] = { +/* 0xfa00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xc94a,0xddfc}; + +static const int ucs_r1_big5_table_min = 0xfa00; +static const int ucs_r1_big5_table_max = 0xfa00 + (sizeof (ucs_r1_big5_table) / sizeof (unsigned short)); + +static const unsigned short ucs_r2_big5_table[] = { +/* 0xfe00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa14a,0xa157,0x0000,0xa159,0xa15b,0xa15f,0xa160,0xa163, +0xa164,0xa167,0xa168,0xa16b,0xa16c,0xa16f,0xa170,0xa173, +0xa174,0xa177,0xa178,0xa17b,0xa17c,0x0000,0x0000,0x0000, +0x0000,0xa1c6,0xa1c7,0xa1ca,0xa1cb,0xa1c8,0xa1c9,0xa15c, +0xa14d,0xa14e,0xa14f,0x0000,0xa151,0xa152,0xa153,0xa154, +0x0000,0xa17d,0xa17e,0xa1a1,0xa1a2,0xa1a3,0xa1a4,0xa1cc, +0xa1cd,0xa1ce,0xa1de,0xa1df,0xa1e0,0xa1e1,0xa1e2,0x0000, +0xa242,0xa24c,0xa24d,0xa24e,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xff00 */ +0x0000,0xa149,0x0000,0xa1ad,0xa243,0xa248,0xa1ae,0x0000, +0xa15d,0xa15e,0xa1af,0xa1cf,0xa141,0xa1d0,0xa144,0xa1fe, +0xa2af,0xa2b0,0xa2b1,0xa2b2,0xa2b3,0xa2b4,0xa2b5,0xa2b6, +0xa2b7,0xa2b8,0xa147,0xa146,0xa1d5,0xa1d7,0xa1d6,0xa148, +0xa249,0xa2cf,0xa2d0,0xa2d1,0xa2d2,0xa2d3,0xa2d4,0xa2d5, +0xa2d6,0xa2d7,0xa2d8,0xa2d9,0xa2da,0xa2db,0xa2dc,0xa2dd, +0xa2de,0xa2df,0xa2e0,0xa2e1,0xa2e2,0xa2e3,0xa2e4,0xa2e5, +0xa2e6,0xa2e7,0xa2e8,0x0000,0xa240,0x0000,0x0000,0xa1c4, +0x0000,0xa2e9,0xa2ea,0xa2eb,0xa2ec,0xa2ed,0xa2ee,0xa2ef, +0xa2f0,0xa2f1,0xa2f2,0xa2f3,0xa2f4,0xa2f5,0xa2f6,0xa2f7, +0xa2f8,0xa2f9,0xa2fa,0xa2fb,0xa2fc,0xa2fd,0xa2fe,0xa340, +0xa341,0xa342,0xa343,0xa161,0xa155,0xa162,0xa1e3,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa246,0xa247,0x0000,0xa1c3,0x0000,0xa244}; + +static const int ucs_r2_big5_table_min = 0xfe00; +static const int ucs_r2_big5_table_max = 0xfe00 + (sizeof (ucs_r2_big5_table) / sizeof (unsigned short)); + +#endif /* UNICODE_TABLE_BIG5_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cns11643.h b/ext/mbstring/libmbfl/filters/unicode_table_cns11643.h new file mode 100644 index 0000000..0c17e1e --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_cns11643.h @@ -0,0 +1,6149 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: Rui Hirokawa <hirokawa@php.net> + * + */ + +#ifndef UNICODE_TABLE_CNS11643_H +#define UNICODE_TABLE_CNS11643_H + +/* + * Unicode table + */ + +/* CNS11643 -> UCS */ +static const unsigned short cns11643_1_ucs_table[] = { +0x3000,0xff0c,0x3001,0x3002,0xff0e,0x30fb,0xff1b,0xff1a, +0xff1f,0xff01,0xfe30,0x2026,0x2025,0xfe50,0xfe51,0xfe52, +0x00b7,0xfe54,0xfe55,0xfe56,0xfe57,0xfe31,0x2014,0xfe32, +0x2013,0x0000,0x0000,0x0000,0x0000,0xff08,0xff09,0xfe35, +0xfe36,0xff5b,0xff5d,0xfe37,0xfe38,0x3014,0x3015,0xfe39, +0xfe3a,0x3010,0x3011,0xfe3b,0xfe3c,0x300a,0x300b,0xfe3d, +0xfe3e,0x3008,0x3009,0xfe3f,0xfe40,0x300c,0x300d,0xfe41, +0xfe42,0x300e,0x300f,0xfe43,0xfe44,0xfe59,0xfe5a,0xfe5b, +0xfe5c,0xfe5d,0xfe5e,0x2018,0x2019,0x201c,0x201d,0x301d, +0x301e,0x2032,0x2035,0xff03,0xff06,0xff0a,0x203b,0x00a7, +0x3003,0x25cb,0x25cf,0x25b3,0x25b2,0x25ce,0x2606,0x2605, +0x25c7,0x25c6,0x25a1,0x25a0,0x25bd,0x25bc,0x32a3,0x2105, +0x203e,0x0000,0xff3f,0x0000,0xfe49,0xfe4a,0xfe4d,0xfe4e, +0xfe4b,0xfe4c,0xfe5f,0xfe60,0xfe61,0xff0b,0xff0d,0x00d7, +0x00f7,0x00b1,0x221a,0xff1c,0xff1e,0xff1d,0x2266,0x2267, +0x2260,0x221e,0x2252,0x2261,0xfe62,0xfe63,0xfe64,0xfe66, +0xfe65,0x223c,0x2229,0x222a,0x22a5,0x2220,0x221f,0x22bf, +0x33d2,0x33d1,0x222b,0x222e,0x2235,0x2234,0x2640,0x2642, +0x2641,0x2609,0x2191,0x2193,0x2192,0x2190,0x2196,0x2197, +0x2199,0x2198,0x2016,0xff5c,0xff0f,0xff3c,0x2215,0xfe68, +0xff04,0xffe5,0x3012,0xffe0,0xffe1,0xff05,0xff20,0x2103, +0x2109,0xfe69,0xfe6a,0xfe6b,0x33d5,0x339c,0x339d,0x339e, +0x33ce,0x33a1,0x338e,0x338f,0x33c4,0x00b0,0x5159,0x515b, +0x515e,0x515d,0x5161,0x5163,0x55e7,0x74e9,0x7cce,0x2581, +0x2582,0x2583,0x2584,0x2585,0x2586,0x2587,0x2588,0x258f, +0x258e,0x258d,0x258c,0x258b,0x258a,0x2589,0x253c,0x2534, +0x252c,0x2524,0x251c,0x2594,0x2500,0x2502,0x2595,0x250c, +0x2510,0x2514,0x2518,0x256d,0x256e,0x2570,0x256f,0x2550, +0x255e,0x256a,0x2561,0x25e2,0x25e3,0x25e5,0x25e4,0x2571, +0x2572,0x2573,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xff10,0xff11,0xff12,0xff13,0xff14,0xff15, +0xff16,0xff17,0xff18,0xff19,0x2160,0x2161,0x2162,0x2163, +0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,0x3021,0x3022, +0x3023,0x3024,0x3025,0x3026,0x3027,0x3028,0x3029,0x0000, +0x5344,0x0000,0xff21,0xff22,0xff23,0xff24,0xff25,0xff26, +0xff27,0xff28,0xff29,0xff2a,0xff2b,0xff2c,0xff2d,0xff2e, +0xff2f,0xff30,0xff31,0xff32,0xff33,0xff34,0xff35,0xff36, +0xff37,0xff38,0xff39,0xff3a,0xff41,0xff42,0xff43,0xff44, +0xff45,0xff46,0xff47,0xff48,0xff49,0xff4a,0xff4b,0xff4c, +0xff4d,0xff4e,0xff4f,0xff50,0xff51,0xff52,0xff53,0xff54, +0xff55,0xff56,0xff57,0xff58,0xff59,0xff5a,0x0391,0x0392, +0x0393,0x0394,0x0395,0x0396,0x0397,0x0398,0x0399,0x039a, +0x039b,0x039c,0x039d,0x039e,0x039f,0x03a0,0x03a1,0x03a3, +0x03a4,0x03a5,0x03a6,0x03a7,0x03a8,0x03a9,0x03b1,0x03b2, +0x03b3,0x03b4,0x03b5,0x03b6,0x03b7,0x03b8,0x03b9,0x03ba, +0x03bb,0x03bc,0x03bd,0x03be,0x03bf,0x03c0,0x03c1,0x03c3, +0x03c4,0x03c5,0x03c6,0x03c7,0x03c8,0x03c9,0x3105,0x3106, +0x3107,0x3108,0x3109,0x310a,0x310b,0x310c,0x310d,0x310e, +0x310f,0x3110,0x3111,0x3112,0x3113,0x3114,0x3115,0x3116, +0x3117,0x3118,0x3119,0x311a,0x311b,0x311c,0x311d,0x311e, +0x311f,0x3120,0x3121,0x3122,0x3123,0x3124,0x3125,0x3126, +0x3127,0x3128,0x3129,0x02d9,0x02c9,0x02ca,0x02c7,0x02cb, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2460,0x2461, +0x2462,0x2463,0x2464,0x2465,0x2466,0x2467,0x2468,0x2469, +0x2474,0x2475,0x2476,0x2477,0x2478,0x2479,0x247a,0x247b, +0x247c,0x247d,0x2170,0x2171,0x2172,0x2173,0x2174,0x2175, +0x2176,0x2177,0x2178,0x2179,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2400,0x2401, +0x2402,0x2403,0x2404,0x2405,0x2406,0x2407,0x2408,0x2409, +0x240a,0x240b,0x240c,0x240d,0x240e,0x240f,0x2410,0x2411, +0x2412,0x2413,0x2414,0x2415,0x2416,0x2417,0x2418,0x2419, +0x241a,0x241b,0x241c,0x241d,0x241e,0x241f,0x2421,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x4e00,0x4e59,0x4e01,0x4e03,0x4e43,0x4e5d, +0x4e86,0x4e8c,0x4eba,0x513f,0x5165,0x516b,0x51e0,0x5200, +0x5201,0x529b,0x5315,0x5341,0x535c,0x53c8,0x4e09,0x4e0b, +0x4e08,0x4e0a,0x4e2b,0x4e38,0x51e1,0x4e45,0x4e48,0x4e5f, +0x4e5e,0x4e8e,0x4ea1,0x5140,0x5203,0x52fa,0x5343,0x53c9, +0x53e3,0x571f,0x58eb,0x5915,0x5927,0x5973,0x5b50,0x5b51, +0x5b53,0x5bf8,0x5c0f,0x5c22,0x5c38,0x5c71,0x5ddd,0x5de5, +0x5df1,0x5df2,0x5df3,0x5dfe,0x5e72,0x5efe,0x5f0b,0x5f13, +0x624d,0x4e11,0x4e10,0x4e0d,0x4e2d,0x4e30,0x4e39,0x4e4b, +0x5c39,0x4e88,0x4e91,0x4e95,0x4e92,0x4e94,0x4ea2,0x4ec1, +0x4ec0,0x4ec3,0x4ec6,0x4ec7,0x4ecd,0x4eca,0x4ecb,0x4ec4, +0x5143,0x5141,0x5167,0x516d,0x516e,0x516c,0x5197,0x51f6, +0x5206,0x5207,0x5208,0x52fb,0x52fe,0x52ff,0x5316,0x5339, +0x5348,0x5347,0x5345,0x535e,0x5384,0x53cb,0x53ca,0x53cd, +0x58ec,0x5929,0x592b,0x592a,0x592d,0x5b54,0x5c11,0x5c24, +0x5c3a,0x5c6f,0x5df4,0x5e7b,0x5eff,0x5f14,0x5f15,0x5fc3, +0x6208,0x6236,0x624b,0x624e,0x652f,0x6587,0x6597,0x65a4, +0x65b9,0x65e5,0x66f0,0x6708,0x6728,0x6b20,0x6b62,0x6b79, +0x6bcb,0x6bd4,0x6bdb,0x6c0f,0x6c34,0x706b,0x722a,0x7236, +0x723b,0x7247,0x7259,0x725b,0x72ac,0x738b,0x4e19,0x4e16, +0x4e15,0x4e14,0x4e18,0x4e3b,0x4e4d,0x4e4f,0x4e4e,0x4ee5, +0x4ed8,0x4ed4,0x4ed5,0x4ed6,0x4ed7,0x4ee3,0x4ee4,0x4ed9, +0x4ede,0x5145,0x5144,0x5189,0x518a,0x51ac,0x51f9,0x51fa, +0x51f8,0x520a,0x52a0,0x529f,0x5305,0x5306,0x5317,0x531d, +0x4edf,0x534a,0x5349,0x5361,0x5360,0x536f,0x536e,0x53bb, +0x53ef,0x53e4,0x53f3,0x53ec,0x53ee,0x53e9,0x53e8,0x53fc, +0x53f8,0x53f5,0x53eb,0x53e6,0x53ea,0x53f2,0x53f1,0x53f0, +0x53e5,0x53ed,0x53fb,0x56db,0x56da,0x5916,0x592e,0x5931, +0x5974,0x5976,0x5b55,0x5b83,0x5c3c,0x5de8,0x5de7,0x5de6, +0x5e02,0x5e03,0x5e73,0x5e7c,0x5f01,0x5f18,0x5f17,0x5fc5, +0x620a,0x6253,0x6254,0x6252,0x6251,0x65a5,0x65e6,0x672e, +0x672c,0x672a,0x672b,0x672d,0x6b63,0x6bcd,0x6c11,0x6c10, +0x6c38,0x6c41,0x6c40,0x6c3e,0x72af,0x7384,0x7389,0x74dc, +0x74e6,0x7518,0x751f,0x7528,0x7529,0x7530,0x7531,0x7532, +0x7533,0x758b,0x767d,0x76ae,0x76bf,0x76ee,0x77db,0x77e2, +0x77f3,0x793a,0x79be,0x7a74,0x7acb,0x4e1e,0x4e1f,0x4e52, +0x4e53,0x4e69,0x4e99,0x4ea4,0x4ea6,0x4ea5,0x4eff,0x4f09, +0x4f19,0x4f0a,0x4f15,0x4f0d,0x4f10,0x4f11,0x4f0f,0x4ef2, +0x4ef6,0x4efb,0x4ef0,0x4ef3,0x4efd,0x4f01,0x4f0b,0x5149, +0x5147,0x5146,0x5148,0x5168,0x5171,0x518d,0x51b0,0x5217, +0x5211,0x5212,0x520e,0x5216,0x52a3,0x5308,0x5321,0x5320, +0x5370,0x5371,0x5409,0x540f,0x540c,0x540a,0x5410,0x5401, +0x540b,0x5404,0x5411,0x540d,0x5408,0x5403,0x540e,0x5406, +0x5412,0x56e0,0x56de,0x56dd,0x5733,0x5730,0x5728,0x572d, +0x572c,0x572f,0x5729,0x5919,0x591a,0x5937,0x5938,0x5984, +0x5978,0x5983,0x597d,0x5979,0x5982,0x5981,0x5b57,0x5b58, +0x5b87,0x5b88,0x5b85,0x5b89,0x5bfa,0x5c16,0x5c79,0x5dde, +0x5e06,0x5e76,0x5e74,0x5f0f,0x5f1b,0x5fd9,0x5fd6,0x620e, +0x620c,0x620d,0x6210,0x6263,0x625b,0x6258,0x6536,0x65e9, +0x65e8,0x65ec,0x65ed,0x66f2,0x66f3,0x6709,0x673d,0x6734, +0x6731,0x6735,0x6b21,0x6b64,0x6b7b,0x6c16,0x6c5d,0x6c57, +0x6c59,0x6c5f,0x6c60,0x6c50,0x6c55,0x6c61,0x6c5b,0x6c4d, +0x6c4e,0x7070,0x725f,0x725d,0x767e,0x7af9,0x7c73,0x7cf8, +0x7f36,0x7f8a,0x7fbd,0x8001,0x8003,0x800c,0x8012,0x8033, +0x807f,0x8089,0x808b,0x808c,0x81e3,0x81ea,0x81f3,0x81fc, +0x820c,0x821b,0x821f,0x826e,0x8272,0x827e,0x866b,0x8840, +0x884c,0x8863,0x897f,0x9621,0x4e32,0x4ea8,0x4f4d,0x4f4f, +0x4f47,0x4f57,0x4f5e,0x4f34,0x4f5b,0x4f55,0x4f30,0x4f50, +0x4f51,0x4f3d,0x4f3a,0x4f38,0x4f43,0x4f54,0x4f3c,0x4f46, +0x4f63,0x4f5c,0x4f60,0x4f2f,0x4f4e,0x4f36,0x4f59,0x4f5d, +0x4f48,0x4f5a,0x514c,0x514b,0x514d,0x5175,0x51b6,0x51b7, +0x5225,0x5224,0x5229,0x522a,0x5228,0x52ab,0x52a9,0x52aa, +0x52ac,0x5323,0x5373,0x5375,0x541d,0x542d,0x541e,0x543e, +0x5426,0x544e,0x5427,0x5446,0x5443,0x5433,0x5448,0x5442, +0x541b,0x5429,0x544a,0x5439,0x543b,0x5438,0x542e,0x5435, +0x5436,0x5420,0x543c,0x5440,0x5431,0x542b,0x541f,0x542c, +0x56ea,0x56f0,0x56e4,0x56eb,0x574a,0x5751,0x5740,0x574d, +0x5747,0x574e,0x573e,0x5750,0x574f,0x573b,0x58ef,0x593e, +0x599d,0x5992,0x59a8,0x599e,0x59a3,0x5999,0x5996,0x598d, +0x59a4,0x5993,0x598a,0x59a5,0x5b5d,0x5b5c,0x5b5a,0x5b5b, +0x5b8c,0x5b8b,0x5b8f,0x5c2c,0x5c40,0x5c41,0x5c3f,0x5c3e, +0x5c90,0x5c91,0x5c94,0x5c8c,0x5deb,0x5e0c,0x5e8f,0x5e87, +0x5e8a,0x5ef7,0x5f04,0x5f1f,0x5f64,0x5f62,0x5f77,0x5f79, +0x5fd8,0x5fcc,0x5fd7,0x5fcd,0x5ff1,0x5feb,0x5ff8,0x5fea, +0x6212,0x6211,0x6284,0x6297,0x6296,0x6280,0x6276,0x6289, +0x626d,0x628a,0x627c,0x627e,0x6279,0x6273,0x6292,0x626f, +0x6298,0x626e,0x6295,0x6293,0x6291,0x6286,0x6539,0x653b, +0x6538,0x65f1,0x66f4,0x675f,0x674e,0x674f,0x6750,0x6751, +0x675c,0x6756,0x675e,0x6749,0x6746,0x6760,0x6753,0x6757, +0x6b65,0x6bcf,0x6c42,0x6c5e,0x6c99,0x6c81,0x6c88,0x6c89, +0x6c85,0x6c9b,0x6c6a,0x6c7a,0x6c90,0x6c70,0x6c8c,0x6c68, +0x6c96,0x6c92,0x6c7d,0x6c83,0x6c72,0x6c7e,0x6c74,0x6c86, +0x6c76,0x6c8d,0x6c94,0x6c98,0x6c82,0x7076,0x707c,0x707d, +0x7078,0x7262,0x7261,0x7260,0x72c4,0x72c2,0x7396,0x752c, +0x752b,0x7537,0x7538,0x7682,0x76ef,0x77e3,0x79c1,0x79c0, +0x79bf,0x7a76,0x7cfb,0x7f55,0x8096,0x8093,0x809d,0x8098, +0x809b,0x809a,0x80b2,0x826f,0x8292,0x828b,0x828d,0x898b, +0x89d2,0x8a00,0x8c37,0x8c46,0x8c55,0x8c9d,0x8d64,0x8d70, +0x8db3,0x8eab,0x8eca,0x8f9b,0x8fb0,0x8fc2,0x8fc6,0x8fc5, +0x8fc4,0x5de1,0x9091,0x90a2,0x90aa,0x90a6,0x90a3,0x9149, +0x91c6,0x91cc,0x9632,0x962e,0x9631,0x962a,0x962c,0x4e26, +0x4e56,0x4e73,0x4e8b,0x4e9b,0x4e9e,0x4eab,0x4eac,0x4f6f, +0x4f9d,0x4f8d,0x4f73,0x4f7f,0x4f6c,0x4f9b,0x4f8b,0x4f86, +0x4f83,0x4f70,0x4f75,0x4f88,0x4f69,0x4f7b,0x4f96,0x4f7e, +0x4f8f,0x4f91,0x4f7a,0x5154,0x5152,0x5155,0x5169,0x5177, +0x5176,0x5178,0x51bd,0x51fd,0x523b,0x5238,0x5237,0x523a, +0x5230,0x522e,0x5236,0x5241,0x52be,0x52bb,0x5352,0x5354, +0x5353,0x5351,0x5366,0x5377,0x5378,0x5379,0x53d6,0x53d4, +0x53d7,0x5473,0x5475,0x5496,0x5478,0x5495,0x5480,0x547b, +0x5477,0x5484,0x5492,0x5486,0x547c,0x5490,0x5471,0x5476, +0x548c,0x549a,0x5462,0x5468,0x548b,0x547d,0x548e,0x56fa, +0x5783,0x5777,0x576a,0x5769,0x5761,0x5766,0x5764,0x577c, +0x591c,0x5949,0x5947,0x5948,0x5944,0x5954,0x59be,0x59bb, +0x59d4,0x59b9,0x59ae,0x59d1,0x59c6,0x59d0,0x59cd,0x59cb, +0x59d3,0x59ca,0x59af,0x59b3,0x59d2,0x59c5,0x5b5f,0x5b64, +0x5b63,0x5b97,0x5b9a,0x5b98,0x5b9c,0x5b99,0x5b9b,0x5c1a, +0x5c48,0x5c45,0x5c46,0x5cb7,0x5ca1,0x5cb8,0x5ca9,0x5cab, +0x5cb1,0x5cb3,0x5e18,0x5e1a,0x5e16,0x5e15,0x5e1b,0x5e11, +0x5e78,0x5e9a,0x5e97,0x5e9c,0x5e95,0x5e96,0x5ef6,0x5f26, +0x5f27,0x5f29,0x5f80,0x5f81,0x5f7f,0x5f7c,0x5fdd,0x5fe0, +0x5ffd,0x5ff5,0x5fff,0x600f,0x6014,0x602f,0x6035,0x6016, +0x602a,0x6015,0x6021,0x6027,0x6029,0x602b,0x601b,0x6216, +0x6215,0x623f,0x623e,0x6240,0x627f,0x62c9,0x62cc,0x62c4, +0x62bf,0x62c2,0x62b9,0x62d2,0x62db,0x62ab,0x62d3,0x62d4, +0x62cb,0x62c8,0x62a8,0x62bd,0x62bc,0x62d0,0x62d9,0x62c7, +0x62cd,0x62b5,0x62da,0x62b1,0x62d8,0x62d6,0x62d7,0x62c6, +0x62ac,0x62ce,0x653e,0x65a7,0x65bc,0x65fa,0x6614,0x6613, +0x660c,0x6606,0x6602,0x660e,0x6600,0x660f,0x6615,0x660a, +0x6607,0x670d,0x670b,0x676d,0x678b,0x6795,0x6771,0x679c, +0x6773,0x6777,0x6787,0x679d,0x6797,0x676f,0x6770,0x677f, +0x6789,0x677e,0x6790,0x6775,0x679a,0x6793,0x677c,0x676a, +0x6772,0x6b23,0x6b66,0x6b67,0x6b7f,0x6c13,0x6c1b,0x6ce3, +0x6ce8,0x6cf3,0x6cb1,0x6ccc,0x6ce5,0x6cb3,0x6cbd,0x6cbe, +0x6cbc,0x6ce2,0x6cab,0x6cd5,0x6cd3,0x6cb8,0x6cc4,0x6cb9, +0x6cc1,0x6cae,0x6cd7,0x6cc5,0x6cf1,0x6cbf,0x6cbb,0x6ce1, +0x6cdb,0x6cca,0x6cac,0x6cef,0x6cdc,0x6cd6,0x6ce0,0x7095, +0x708e,0x7092,0x708a,0x7099,0x722c,0x722d,0x7238,0x7248, +0x7267,0x7269,0x72c0,0x72ce,0x72d9,0x72d7,0x72d0,0x73a9, +0x73a8,0x739f,0x73ab,0x73a5,0x753d,0x759d,0x7599,0x759a, +0x7684,0x76c2,0x76f2,0x76f4,0x77e5,0x77fd,0x793e,0x7940, +0x7941,0x79c9,0x79c8,0x7a7a,0x7a79,0x7afa,0x7cfe,0x7f54, +0x7f8c,0x7f8b,0x8005,0x80ba,0x80a5,0x80a2,0x80b1,0x80a1, +0x80ab,0x80a9,0x80b4,0x80aa,0x80af,0x81e5,0x81fe,0x820d, +0x82b3,0x829d,0x8299,0x82ad,0x82bd,0x829f,0x82b9,0x82b1, +0x82ac,0x82a5,0x82af,0x82b8,0x82a3,0x82b0,0x82be,0x82b7, +0x864e,0x8671,0x521d,0x8868,0x8ecb,0x8fce,0x8fd4,0x8fd1, +0x90b5,0x90b8,0x90b1,0x90b6,0x91c7,0x91d1,0x9577,0x9580, +0x961c,0x9640,0x963f,0x963b,0x9644,0x9642,0x96b9,0x96e8, +0x9752,0x975e,0x4e9f,0x4ead,0x4eae,0x4fe1,0x4fb5,0x4faf, +0x4fbf,0x4fe0,0x4fd1,0x4fcf,0x4fdd,0x4fc3,0x4fb6,0x4fd8, +0x4fdf,0x4fca,0x4fd7,0x4fae,0x4fd0,0x4fc4,0x4fc2,0x4fda, +0x4fce,0x4fde,0x4fb7,0x5157,0x5192,0x5191,0x51a0,0x524e, +0x5243,0x524a,0x524d,0x524c,0x524b,0x5247,0x52c7,0x52c9, +0x52c3,0x52c1,0x530d,0x5357,0x537b,0x539a,0x53db,0x54ac, +0x54c0,0x54a8,0x54ce,0x54c9,0x54b8,0x54a6,0x54b3,0x54c7, +0x54c2,0x54bd,0x54aa,0x54c1,0x54c4,0x54c8,0x54af,0x54ab, +0x54b1,0x54bb,0x54a9,0x54a7,0x54bf,0x56ff,0x5782,0x578b, +0x57a0,0x57a3,0x57a2,0x57ce,0x57ae,0x5793,0x5955,0x5951, +0x594f,0x594e,0x5950,0x59dc,0x59d8,0x59ff,0x59e3,0x59e8, +0x5a03,0x59e5,0x59ea,0x59da,0x59e6,0x5a01,0x59fb,0x5b69, +0x5ba3,0x5ba6,0x5ba4,0x5ba2,0x5ba5,0x5c01,0x5c4e,0x5c4f, +0x5c4d,0x5c4b,0x5cd9,0x5cd2,0x5df7,0x5e1d,0x5e25,0x5e1f, +0x5e7d,0x5ea0,0x5ea6,0x5efa,0x5f08,0x5f2d,0x5f65,0x5f88, +0x5f85,0x5f8a,0x5f8b,0x5f87,0x5f8c,0x5f89,0x6012,0x601d, +0x6020,0x6025,0x600e,0x6028,0x604d,0x6070,0x6068,0x6062, +0x6046,0x6043,0x606c,0x606b,0x606a,0x6064,0x6241,0x62dc, +0x6316,0x6309,0x62fc,0x62ed,0x6301,0x62ee,0x62fd,0x6307, +0x62f1,0x62f7,0x62ef,0x62ec,0x62fe,0x62f4,0x6311,0x6302, +0x653f,0x6545,0x65ab,0x65bd,0x65e2,0x6625,0x662d,0x6620, +0x6627,0x662f,0x661f,0x6628,0x6631,0x6624,0x66f7,0x67ff, +0x67d3,0x67f1,0x67d4,0x67d0,0x67ec,0x67b6,0x67af,0x67f5, +0x67e9,0x67ef,0x67c4,0x67d1,0x67b4,0x67da,0x67e5,0x67b8, +0x67cf,0x67de,0x67f3,0x67b0,0x67d9,0x67e2,0x67dd,0x67d2, +0x6b6a,0x6b83,0x6b86,0x6bb5,0x6bd2,0x6bd7,0x6c1f,0x6cc9, +0x6d0b,0x6d32,0x6d2a,0x6d41,0x6d25,0x6d0c,0x6d31,0x6d1e, +0x6d17,0x6d3b,0x6d3d,0x6d3e,0x6d36,0x6d1b,0x6cf5,0x6d39, +0x6d27,0x6d38,0x6d29,0x6d2e,0x6d35,0x6d0e,0x6d2b,0x70ab, +0x70ba,0x70b3,0x70ac,0x70af,0x70ad,0x70b8,0x70ae,0x70a4, +0x7230,0x7272,0x726f,0x7274,0x72e9,0x72e0,0x72e1,0x73b7, +0x73ca,0x73bb,0x73b2,0x73cd,0x73c0,0x73b3,0x751a,0x752d, +0x754f,0x754c,0x754e,0x754b,0x75ab,0x75a4,0x75a5,0x75a2, +0x75a3,0x7678,0x7686,0x7687,0x7688,0x76c8,0x76c6,0x76c3, +0x76c5,0x7701,0x76f9,0x76f8,0x7709,0x770b,0x76fe,0x76fc, +0x7707,0x77dc,0x7802,0x7814,0x780c,0x780d,0x7946,0x7949, +0x7948,0x7947,0x79b9,0x79ba,0x79d1,0x79d2,0x79cb,0x7a7f, +0x7a81,0x7aff,0x7afd,0x7c7d,0x7d02,0x7d05,0x7d00,0x7d09, +0x7d07,0x7d04,0x7d06,0x7f38,0x7f8e,0x7fbf,0x8010,0x800d, +0x8011,0x8036,0x80d6,0x80e5,0x80da,0x80c3,0x80c4,0x80cc, +0x80e1,0x80db,0x80ce,0x80de,0x80e4,0x80dd,0x81f4,0x8222, +0x82e7,0x8303,0x8305,0x82e3,0x82db,0x82e6,0x8304,0x82e5, +0x8302,0x8309,0x82d2,0x82d7,0x82f1,0x8301,0x82dc,0x82d4, +0x82d1,0x82de,0x82d3,0x82df,0x82ef,0x8306,0x8650,0x8679, +0x867b,0x867a,0x884d,0x886b,0x8981,0x89d4,0x8a08,0x8a02, +0x8a03,0x8c9e,0x8ca0,0x8d74,0x8d73,0x8db4,0x8ecd,0x8ecc, +0x8ff0,0x8fe6,0x8fe2,0x8fea,0x8fe5,0x8fed,0x8feb,0x8fe4, +0x8fe8,0x90ca,0x90ce,0x90c1,0x90c3,0x914b,0x914a,0x91cd, +0x9582,0x9650,0x964b,0x964c,0x964d,0x9762,0x9769,0x97cb, +0x97ed,0x97f3,0x9801,0x98a8,0x98db,0x98df,0x9996,0x9999, +0x4e58,0x4eb3,0x500c,0x500d,0x5023,0x4fef,0x5026,0x5025, +0x4ff8,0x5029,0x5016,0x5006,0x503c,0x501f,0x501a,0x5012, +0x5011,0x4ffa,0x5000,0x5014,0x5028,0x4ff1,0x5021,0x500b, +0x5019,0x5018,0x4ff3,0x4fee,0x502d,0x502a,0x4ffe,0x502b, +0x5009,0x517c,0x51a4,0x51a5,0x51a2,0x51cd,0x51cc,0x51c6, +0x51cb,0x5256,0x525c,0x5254,0x525b,0x525d,0x532a,0x537f, +0x539f,0x539d,0x53df,0x54e8,0x5510,0x5501,0x5537,0x54fc, +0x54e5,0x54f2,0x5506,0x54fa,0x5514,0x54e9,0x54ed,0x54e1, +0x5509,0x54ee,0x54ea,0x54e6,0x5527,0x5507,0x54fd,0x550f, +0x5703,0x5704,0x57c2,0x57d4,0x57cb,0x57c3,0x5809,0x590f, +0x5957,0x5958,0x595a,0x5a11,0x5a18,0x5a1c,0x5a1f,0x5a1b, +0x5a13,0x59ec,0x5a20,0x5a23,0x5a29,0x5a25,0x5a0c,0x5a09, +0x5b6b,0x5c58,0x5bb0,0x5bb3,0x5bb6,0x5bb4,0x5bae,0x5bb5, +0x5bb9,0x5bb8,0x5c04,0x5c51,0x5c55,0x5c50,0x5ced,0x5cfd, +0x5cfb,0x5cea,0x5ce8,0x5cf0,0x5cf6,0x5d01,0x5cf4,0x5dee, +0x5e2d,0x5e2b,0x5eab,0x5ead,0x5ea7,0x5f31,0x5f92,0x5f91, +0x5f90,0x6059,0x6063,0x6065,0x6050,0x6055,0x606d,0x6069, +0x606f,0x6084,0x609f,0x609a,0x608d,0x6094,0x608c,0x6085, +0x6096,0x6247,0x62f3,0x6308,0x62ff,0x634e,0x633e,0x632f, +0x6355,0x6342,0x6346,0x634f,0x6349,0x633a,0x6350,0x633d, +0x632a,0x632b,0x6328,0x634d,0x634c,0x6548,0x6549,0x6599, +0x65c1,0x65c5,0x6642,0x6649,0x664f,0x6643,0x6652,0x664c, +0x6645,0x6641,0x66f8,0x6714,0x6715,0x6717,0x6821,0x6838, +0x6848,0x6846,0x6853,0x6839,0x6842,0x6854,0x6829,0x68b3, +0x6817,0x684c,0x6851,0x683d,0x67f4,0x6850,0x6840,0x683c, +0x6843,0x682a,0x6845,0x6813,0x6818,0x6841,0x6b8a,0x6b89, +0x6bb7,0x6c23,0x6c27,0x6c28,0x6c26,0x6c24,0x6cf0,0x6d6a, +0x6d95,0x6d88,0x6d87,0x6d66,0x6d78,0x6d77,0x6d59,0x6d93, +0x6d6c,0x6d89,0x6d6e,0x6d5a,0x6d74,0x6d69,0x6d8c,0x6d8a, +0x6d79,0x6d85,0x6d65,0x6d94,0x70ca,0x70d8,0x70e4,0x70d9, +0x70c8,0x70cf,0x7239,0x7279,0x72fc,0x72f9,0x72fd,0x72f8, +0x72f7,0x7386,0x73ed,0x7409,0x73ee,0x73e0,0x73ea,0x73de, +0x7554,0x755d,0x755c,0x755a,0x7559,0x75be,0x75c5,0x75c7, +0x75b2,0x75b3,0x75bd,0x75bc,0x75b9,0x75c2,0x75b8,0x768b, +0x76b0,0x76ca,0x76cd,0x76ce,0x7729,0x771f,0x7720,0x7728, +0x77e9,0x7830,0x7827,0x7838,0x781d,0x7834,0x7837,0x7825, +0x782d,0x7820,0x781f,0x7832,0x7955,0x7950,0x7960,0x795f, +0x7956,0x795e,0x795d,0x7957,0x795a,0x79e4,0x79e3,0x79e7, +0x79df,0x79e6,0x79e9,0x79d8,0x7a84,0x7a88,0x7ad9,0x7b06, +0x7b11,0x7c89,0x7d21,0x7d17,0x7d0b,0x7d0a,0x7d20,0x7d22, +0x7d14,0x7d10,0x7d15,0x7d1a,0x7d1c,0x7d0d,0x7d19,0x7d1b, +0x7f3a,0x7f5f,0x7f94,0x7fc5,0x7fc1,0x8006,0x8004,0x8018, +0x8015,0x8019,0x8017,0x803d,0x803f,0x80f1,0x8102,0x80f0, +0x8105,0x80ed,0x80f4,0x8106,0x80f8,0x80f3,0x8108,0x80fd, +0x810a,0x80fc,0x80ef,0x81ed,0x81ec,0x8200,0x8210,0x822a, +0x822b,0x8228,0x822c,0x82bb,0x832b,0x8352,0x8354,0x834a, +0x8338,0x8350,0x8349,0x8335,0x8334,0x834f,0x8332,0x8339, +0x8336,0x8317,0x8340,0x8331,0x8328,0x8343,0x8654,0x868a, +0x86aa,0x8693,0x86a4,0x86a9,0x868c,0x86a3,0x869c,0x8870, +0x8877,0x8881,0x8882,0x887d,0x8879,0x8a18,0x8a10,0x8a0e, +0x8a0c,0x8a15,0x8a0a,0x8a17,0x8a13,0x8a16,0x8a0f,0x8a11, +0x8c48,0x8c7a,0x8c79,0x8ca1,0x8ca2,0x8d77,0x8eac,0x8ed2, +0x8ed4,0x8ecf,0x8fb1,0x9001,0x9006,0x8ff7,0x9000,0x8ffa, +0x8ff4,0x9003,0x8ffd,0x9005,0x8ff8,0x9095,0x90e1,0x90dd, +0x90e2,0x9152,0x914d,0x914c,0x91d8,0x91dd,0x91d7,0x91dc, +0x91d9,0x9583,0x9662,0x9663,0x9661,0x965b,0x965d,0x9664, +0x9658,0x965e,0x96bb,0x98e2,0x99ac,0x9aa8,0x9ad8,0x9b25, +0x9b32,0x9b3c,0x4e7e,0x507a,0x507d,0x505c,0x5047,0x5043, +0x504c,0x505a,0x5049,0x5065,0x5076,0x504e,0x5055,0x5075, +0x5074,0x5077,0x504f,0x500f,0x506f,0x506d,0x515c,0x5195, +0x51f0,0x526a,0x526f,0x52d2,0x52d9,0x52d8,0x52d5,0x5310, +0x530f,0x5319,0x533f,0x5340,0x533e,0x53c3,0x66fc,0x5546, +0x556a,0x5566,0x5544,0x555e,0x5561,0x5543,0x554a,0x5531, +0x5556,0x554f,0x5555,0x552f,0x5564,0x5538,0x552e,0x555c, +0x552c,0x5563,0x5533,0x5541,0x5557,0x5708,0x570b,0x5709, +0x57df,0x5805,0x580a,0x5806,0x57e0,0x57e4,0x57fa,0x5802, +0x5835,0x57f7,0x57f9,0x5920,0x5962,0x5a36,0x5a41,0x5a49, +0x5a66,0x5a6a,0x5a40,0x5a3c,0x5a62,0x5a5a,0x5a46,0x5a4a, +0x5b70,0x5bc7,0x5bc5,0x5bc4,0x5bc2,0x5bbf,0x5bc6,0x5c09, +0x5c08,0x5c07,0x5c60,0x5c5c,0x5c5d,0x5d07,0x5d06,0x5d0e, +0x5d1b,0x5d16,0x5d22,0x5d11,0x5d29,0x5d14,0x5d19,0x5d24, +0x5d27,0x5d17,0x5de2,0x5e38,0x5e36,0x5e33,0x5e37,0x5eb7, +0x5eb8,0x5eb6,0x5eb5,0x5ebe,0x5f35,0x5f37,0x5f57,0x5f6c, +0x5f69,0x5f6b,0x5f97,0x5f99,0x5f9e,0x5f98,0x5fa1,0x5fa0, +0x5f9c,0x607f,0x60a3,0x6089,0x60a0,0x60a8,0x60cb,0x60b4, +0x60e6,0x60bd,0x60c5,0x60bb,0x60b5,0x60dc,0x60bc,0x60d8, +0x60d5,0x60c6,0x60df,0x60b8,0x60da,0x60c7,0x621a,0x621b, +0x6248,0x63a0,0x63a7,0x6372,0x6396,0x63a2,0x63a5,0x6377, +0x6367,0x6398,0x63aa,0x6371,0x63a9,0x6389,0x6383,0x639b, +0x636b,0x63a8,0x6384,0x6388,0x6399,0x63a1,0x63ac,0x6392, +0x638f,0x6380,0x637b,0x6369,0x6368,0x637a,0x655d,0x6556, +0x6551,0x6559,0x6557,0x555f,0x654f,0x6558,0x6555,0x6554, +0x659c,0x659b,0x65ac,0x65cf,0x65cb,0x65cc,0x65ce,0x665d, +0x665a,0x6664,0x6668,0x6666,0x665e,0x66f9,0x52d7,0x671b, +0x6881,0x68af,0x68a2,0x6893,0x68b5,0x687f,0x6876,0x68b1, +0x68a7,0x6897,0x68b0,0x6883,0x68c4,0x68ad,0x6886,0x6885, +0x6894,0x689d,0x68a8,0x689f,0x68a1,0x6882,0x6b32,0x6bba, +0x6beb,0x6bec,0x6c2b,0x6d8e,0x6dbc,0x6df3,0x6dd9,0x6db2, +0x6de1,0x6dcc,0x6de4,0x6dfb,0x6dfa,0x6e05,0x6dc7,0x6dcb, +0x6daf,0x6dd1,0x6dae,0x6dde,0x6df9,0x6db8,0x6df7,0x6df5, +0x6dc5,0x6dd2,0x6e1a,0x6db5,0x6dda,0x6deb,0x6dd8,0x6dea, +0x6df1,0x6dee,0x6de8,0x6dc6,0x6dc4,0x6daa,0x6dec,0x6dbf, +0x6de6,0x70f9,0x7109,0x710a,0x70fd,0x70ef,0x723d,0x727d, +0x7281,0x731c,0x731b,0x7316,0x7313,0x7319,0x7387,0x7405, +0x740a,0x7403,0x7406,0x73fe,0x740d,0x74e0,0x74f6,0x74f7, +0x751c,0x7522,0x7565,0x7566,0x7562,0x7570,0x758f,0x75d4, +0x75d5,0x75b5,0x75ca,0x75cd,0x768e,0x76d4,0x76d2,0x76db, +0x7737,0x773e,0x773c,0x7736,0x7738,0x773a,0x786b,0x7843, +0x784e,0x7965,0x7968,0x796d,0x79fb,0x7a92,0x7a95,0x7b20, +0x7b28,0x7b1b,0x7b2c,0x7b26,0x7b19,0x7b1e,0x7b2e,0x7c92, +0x7c97,0x7c95,0x7d46,0x7d43,0x7d71,0x7d2e,0x7d39,0x7d3c, +0x7d40,0x7d30,0x7d33,0x7d44,0x7d2f,0x7d42,0x7d32,0x7d31, +0x7f3d,0x7f9e,0x7f9a,0x7fcc,0x7fce,0x7fd2,0x801c,0x804a, +0x8046,0x812f,0x8116,0x8123,0x812b,0x8129,0x8130,0x8124, +0x8202,0x8235,0x8237,0x8236,0x8239,0x838e,0x839e,0x8398, +0x8378,0x83a2,0x8396,0x83bd,0x83ab,0x8392,0x838a,0x8393, +0x8389,0x83a0,0x8377,0x837b,0x837c,0x8386,0x83a7,0x8655, +0x5f6a,0x86c7,0x86c0,0x86b6,0x86c4,0x86b5,0x86c6,0x86cb, +0x86b1,0x86af,0x86c9,0x8853,0x889e,0x8888,0x88ab,0x8892, +0x8896,0x888d,0x888b,0x8993,0x898f,0x8a2a,0x8a1d,0x8a23, +0x8a25,0x8a31,0x8a2d,0x8a1f,0x8a1b,0x8a22,0x8c49,0x8c5a, +0x8ca9,0x8cac,0x8cab,0x8ca8,0x8caa,0x8ca7,0x8d67,0x8d66, +0x8dbe,0x8dba,0x8edb,0x8edf,0x9019,0x900d,0x901a,0x9017, +0x9023,0x901f,0x901d,0x9010,0x9015,0x901e,0x9020,0x900f, +0x9022,0x9016,0x901b,0x9014,0x90e8,0x90ed,0x90fd,0x9157, +0x91ce,0x91f5,0x91e6,0x91e3,0x91e7,0x91ed,0x91e9,0x9589, +0x966a,0x9675,0x9673,0x9678,0x9670,0x9674,0x9676,0x9677, +0x966c,0x96c0,0x96ea,0x96e9,0x7ae0,0x7adf,0x9802,0x9803, +0x9b5a,0x9ce5,0x9e75,0x9e7f,0x9ea5,0x9ebb,0x50a2,0x508d, +0x5085,0x5099,0x5091,0x5080,0x5096,0x5098,0x509a,0x6700, +0x51f1,0x5272,0x5274,0x5275,0x5269,0x52de,0x52dd,0x52db, +0x535a,0x53a5,0x557b,0x5580,0x55a7,0x557c,0x558a,0x559d, +0x5598,0x5582,0x559c,0x55aa,0x5594,0x5587,0x558b,0x5583, +0x55b3,0x55ae,0x559f,0x553e,0x55b2,0x559a,0x55bb,0x55ac, +0x55b1,0x557e,0x5589,0x55ab,0x5599,0x570d,0x582f,0x582a, +0x5834,0x5824,0x5830,0x5831,0x5821,0x581d,0x5820,0x58f9, +0x58fa,0x5960,0x5a77,0x5a9a,0x5a7f,0x5a92,0x5a9b,0x5aa7, +0x5b73,0x5b71,0x5bd2,0x5bcc,0x5bd3,0x5bd0,0x5c0a,0x5c0b, +0x5c31,0x5d4c,0x5d50,0x5d34,0x5d47,0x5dfd,0x5e45,0x5e3d, +0x5e40,0x5e43,0x5e7e,0x5eca,0x5ec1,0x5ec2,0x5ec4,0x5f3c, +0x5f6d,0x5fa9,0x5faa,0x5fa8,0x60d1,0x60e1,0x60b2,0x60b6, +0x60e0,0x611c,0x6123,0x60fa,0x6115,0x60f0,0x60fb,0x60f4, +0x6168,0x60f1,0x610e,0x60f6,0x6109,0x6100,0x6112,0x621f, +0x6249,0x63a3,0x638c,0x63cf,0x63c0,0x63e9,0x63c9,0x63c6, +0x63cd,0x63d2,0x63e3,0x63d0,0x63e1,0x63d6,0x63ed,0x63ee, +0x6376,0x63f4,0x63ea,0x63db,0x6452,0x63da,0x63f9,0x655e, +0x6566,0x6562,0x6563,0x6591,0x6590,0x65af,0x666e,0x6670, +0x6674,0x6676,0x666f,0x6691,0x667a,0x667e,0x6677,0x66fe, +0x66ff,0x671f,0x671d,0x68fa,0x68d5,0x68e0,0x68d8,0x68d7, +0x6905,0x68df,0x68f5,0x68ee,0x68e7,0x68f9,0x68d2,0x68f2, +0x68e3,0x68cb,0x68cd,0x690d,0x6912,0x690e,0x68c9,0x68da, +0x696e,0x68fb,0x6b3e,0x6b3a,0x6b3d,0x6b98,0x6b96,0x6bbc, +0x6bef,0x6c2e,0x6c2f,0x6c2c,0x6e2f,0x6e38,0x6e54,0x6e21, +0x6e32,0x6e67,0x6e4a,0x6e20,0x6e25,0x6e23,0x6e1b,0x6e5b, +0x6e58,0x6e24,0x6e56,0x6e6e,0x6e2d,0x6e26,0x6e6f,0x6e34, +0x6e4d,0x6e3a,0x6e2c,0x6e43,0x6e1d,0x6e3e,0x6ecb,0x6e89, +0x6e19,0x6e4e,0x6e63,0x6e44,0x6e72,0x6e69,0x6e5f,0x7119, +0x711a,0x7126,0x7130,0x7121,0x7136,0x716e,0x711c,0x724c, +0x7284,0x7280,0x7336,0x7325,0x7334,0x7329,0x743a,0x742a, +0x7433,0x7422,0x7425,0x7435,0x7436,0x7434,0x742f,0x741b, +0x7426,0x7428,0x7525,0x7526,0x756b,0x756a,0x75e2,0x75db, +0x75e3,0x75d9,0x75d8,0x75de,0x75e0,0x767b,0x767c,0x7696, +0x7693,0x76b4,0x76dc,0x774f,0x77ed,0x785d,0x786c,0x786f, +0x7a0d,0x7a08,0x7a0b,0x7a05,0x7a00,0x7a98,0x7a97,0x7a96, +0x7ae5,0x7ae3,0x7b49,0x7b56,0x7b46,0x7b50,0x7b52,0x7b54, +0x7b4d,0x7b4b,0x7b4f,0x7b51,0x7c9f,0x7ca5,0x7d5e,0x7d50, +0x7d68,0x7d55,0x7d2b,0x7d6e,0x7d72,0x7d61,0x7d66,0x7d62, +0x7d70,0x7d73,0x5584,0x7fd4,0x7fd5,0x800b,0x8052,0x8085, +0x8155,0x8154,0x814b,0x8151,0x814e,0x8139,0x8146,0x813e, +0x814c,0x8153,0x8174,0x8212,0x821c,0x83e9,0x8403,0x83f8, +0x840d,0x83e0,0x83c5,0x840b,0x83c1,0x83ef,0x83f1,0x83f4, +0x8457,0x840a,0x83f0,0x840c,0x83cc,0x83fd,0x83f2,0x83ca, +0x8438,0x840e,0x8404,0x83dc,0x8407,0x83d4,0x83df,0x865b, +0x86df,0x86d9,0x86ed,0x86d4,0x86db,0x86e4,0x86d0,0x86de, +0x8857,0x88c1,0x88c2,0x88b1,0x8983,0x8996,0x8a3b,0x8a60, +0x8a55,0x8a5e,0x8a3c,0x8a41,0x8a54,0x8a5b,0x8a50,0x8a46, +0x8a34,0x8a3a,0x8a36,0x8a56,0x8c61,0x8c82,0x8caf,0x8cbc, +0x8cb3,0x8cbd,0x8cc1,0x8cbb,0x8cc0,0x8cb4,0x8cb7,0x8cb6, +0x8cbf,0x8cb8,0x8d8a,0x8d85,0x8d81,0x8dce,0x8ddd,0x8dcb, +0x8dda,0x8dd1,0x8dcc,0x8ddb,0x8dc6,0x8efb,0x8ef8,0x8efc, +0x8f9c,0x902e,0x9035,0x9031,0x9038,0x9032,0x9036,0x9102, +0x90f5,0x9109,0x90fe,0x9163,0x9165,0x91cf,0x9214,0x9215, +0x9223,0x9209,0x921e,0x920d,0x9210,0x9207,0x9211,0x9594, +0x958f,0x958b,0x9591,0x9593,0x9592,0x958e,0x968a,0x968e, +0x968b,0x967d,0x9685,0x9686,0x968d,0x9672,0x9684,0x96c1, +0x96c5,0x96c4,0x96c6,0x96c7,0x96ef,0x96f2,0x97cc,0x9805, +0x9806,0x9808,0x98e7,0x98ea,0x98ef,0x98e9,0x98f2,0x98ed, +0x99ae,0x99ad,0x9ec3,0x9ecd,0x9ed1,0x4e82,0x50ad,0x50b5, +0x50b2,0x50b3,0x50c5,0x50be,0x50ac,0x50b7,0x50bb,0x50af, +0x50c7,0x527f,0x5277,0x527d,0x52df,0x52e6,0x52e4,0x52e2, +0x52e3,0x532f,0x55df,0x55e8,0x55d3,0x55e6,0x55ce,0x55dc, +0x55c7,0x55d1,0x55e3,0x55e4,0x55ef,0x55da,0x55e1,0x55c5, +0x55c6,0x55e5,0x55c9,0x5712,0x5713,0x585e,0x5851,0x5858, +0x5857,0x585a,0x5854,0x586b,0x584c,0x586d,0x584a,0x5862, +0x5852,0x584b,0x5967,0x5ac1,0x5ac9,0x5acc,0x5abe,0x5abd, +0x5abc,0x5ab3,0x5ac2,0x5ab2,0x5d69,0x5d6f,0x5e4c,0x5e79, +0x5ec9,0x5ec8,0x5f12,0x5f59,0x5fac,0x5fae,0x611a,0x610f, +0x6148,0x611f,0x60f3,0x611b,0x60f9,0x6101,0x6108,0x614e, +0x614c,0x6144,0x614d,0x613e,0x6134,0x6127,0x610d,0x6106, +0x6137,0x6221,0x6222,0x6413,0x643e,0x641e,0x642a,0x642d, +0x643d,0x642c,0x640f,0x641c,0x6414,0x640d,0x6436,0x6416, +0x6417,0x6406,0x656c,0x659f,0x65b0,0x6697,0x6689,0x6687, +0x6688,0x6696,0x6684,0x6698,0x668d,0x6703,0x6994,0x696d, +0x695a,0x6977,0x6960,0x6954,0x6975,0x6930,0x6982,0x694a, +0x6968,0x696b,0x695e,0x6953,0x6979,0x6986,0x695d,0x6963, +0x695b,0x6b47,0x6b72,0x6bc0,0x6bbf,0x6bd3,0x6bfd,0x6ea2, +0x6eaf,0x6ed3,0x6eb6,0x6ec2,0x6e90,0x6e9d,0x6ec7,0x6ec5, +0x6ea5,0x6e98,0x6ebc,0x6eba,0x6eab,0x6ed1,0x6e96,0x6e9c, +0x6ec4,0x6ed4,0x6eaa,0x6ea7,0x6eb4,0x714e,0x7159,0x7169, +0x7164,0x7149,0x7167,0x715c,0x716c,0x7166,0x714c,0x7165, +0x715e,0x7146,0x7168,0x7156,0x723a,0x7252,0x7337,0x7345, +0x733f,0x733e,0x746f,0x745a,0x7455,0x745f,0x745e,0x7441, +0x743f,0x7459,0x745b,0x745c,0x7576,0x7578,0x7600,0x75f0, +0x7601,0x75f2,0x75f1,0x75fa,0x75ff,0x75f4,0x75f3,0x76de, +0x76df,0x775b,0x776b,0x7766,0x775e,0x7763,0x7779,0x776a, +0x776c,0x775c,0x7765,0x7768,0x7762,0x77ee,0x788e,0x78b0, +0x7897,0x7898,0x788c,0x7889,0x787c,0x7891,0x7893,0x787f, +0x797a,0x797f,0x7981,0x842c,0x79bd,0x7a1c,0x7a1a,0x7a20, +0x7a14,0x7a1f,0x7a1e,0x7a9f,0x7aa0,0x7b77,0x7bc0,0x7b60, +0x7b6e,0x7b67,0x7cb1,0x7cb3,0x7cb5,0x7d93,0x7d79,0x7d91, +0x7d81,0x7d8f,0x7d5b,0x7f6e,0x7f69,0x7f6a,0x7f72,0x7fa9, +0x7fa8,0x7fa4,0x8056,0x8058,0x8086,0x8084,0x8171,0x8170, +0x8178,0x8165,0x816e,0x8173,0x816b,0x8179,0x817a,0x8166, +0x8205,0x8247,0x8482,0x8477,0x843d,0x8431,0x8475,0x8466, +0x846b,0x8449,0x846c,0x845b,0x843c,0x8435,0x8461,0x8463, +0x8469,0x846d,0x8446,0x865e,0x865c,0x865f,0x86f9,0x8713, +0x8708,0x8707,0x8700,0x86fe,0x86fb,0x8702,0x8703,0x8706, +0x870a,0x8859,0x88df,0x88d4,0x88d9,0x88dc,0x88d8,0x88dd, +0x88e1,0x88ca,0x88d5,0x88d2,0x899c,0x89e3,0x8a6b,0x8a72, +0x8a73,0x8a66,0x8a69,0x8a70,0x8a87,0x8a7c,0x8a63,0x8aa0, +0x8a71,0x8a85,0x8a6d,0x8a62,0x8a6e,0x8a6c,0x8a79,0x8a7b, +0x8a3e,0x8a68,0x8c62,0x8c8a,0x8c89,0x8cca,0x8cc7,0x8cc8, +0x8cc4,0x8cb2,0x8cc3,0x8cc2,0x8cc5,0x8de1,0x8ddf,0x8de8, +0x8def,0x8df3,0x8dfa,0x8dea,0x8de4,0x8de6,0x8eb2,0x8f03, +0x8f09,0x8efe,0x8f0a,0x8f9f,0x8fb2,0x904b,0x904a,0x9053, +0x9042,0x9054,0x903c,0x9055,0x9050,0x9047,0x904f,0x904e, +0x904d,0x9051,0x903e,0x9041,0x9112,0x9117,0x916c,0x916a, +0x9169,0x91c9,0x9237,0x9257,0x9238,0x923d,0x9240,0x923e, +0x925b,0x924b,0x9264,0x9251,0x9234,0x9249,0x924d,0x9245, +0x9239,0x923f,0x925a,0x9598,0x9698,0x9694,0x9695,0x96cd, +0x96cb,0x96c9,0x96ca,0x96f7,0x96fb,0x96f9,0x96f6,0x9756, +0x9774,0x9776,0x9810,0x9811,0x9813,0x980a,0x9812,0x980c, +0x98fc,0x98f4,0x98fd,0x98fe,0x99b3,0x99b1,0x99b4,0x9ae1, +0x9ce9,0x9e82,0x9f0e,0x9f13,0x9f20,0x50e7,0x50ee,0x50e5, +0x50d6,0x50ed,0x50da,0x50d5,0x50cf,0x50d1,0x50f1,0x50ce, +0x50e9,0x5162,0x51f3,0x5283,0x5282,0x5331,0x53ad,0x55fe, +0x5600,0x561b,0x5617,0x55fd,0x5614,0x5606,0x5609,0x560d, +0x560e,0x55f7,0x5616,0x561f,0x5608,0x5610,0x55f6,0x5718, +0x5716,0x5875,0x587e,0x5883,0x5893,0x588a,0x5879,0x5885, +0x587d,0x58fd,0x5925,0x5922,0x5924,0x596a,0x5969,0x5ae1, +0x5ae6,0x5ae9,0x5ad7,0x5ad6,0x5ad8,0x5ae3,0x5b75,0x5bde, +0x5be7,0x5be1,0x5be5,0x5be6,0x5be8,0x5be2,0x5be4,0x5bdf, +0x5c0d,0x5c62,0x5d84,0x5d87,0x5e5b,0x5e63,0x5e55,0x5e57, +0x5e54,0x5ed3,0x5ed6,0x5f0a,0x5f46,0x5f70,0x5fb9,0x6147, +0x613f,0x614b,0x6177,0x6162,0x6163,0x615f,0x615a,0x6158, +0x6175,0x622a,0x6487,0x6458,0x6454,0x64a4,0x6478,0x645f, +0x647a,0x6451,0x6467,0x6434,0x646d,0x647b,0x6572,0x65a1, +0x65d7,0x65d6,0x66a2,0x66a8,0x669d,0x699c,0x69a8,0x6995, +0x69c1,0x69ae,0x69d3,0x69cb,0x699b,0x69b7,0x69bb,0x69ab, +0x69b4,0x69d0,0x69cd,0x69ad,0x69cc,0x69a6,0x69c3,0x69a3, +0x6b49,0x6b4c,0x6c33,0x6f33,0x6f14,0x6efe,0x6f13,0x6ef4, +0x6f29,0x6f3e,0x6f20,0x6f2c,0x6f0f,0x6f02,0x6f22,0x6eff, +0x6eef,0x6f06,0x6f31,0x6f38,0x6f32,0x6f23,0x6f15,0x6f2b, +0x6f2f,0x6f88,0x6f2a,0x6eec,0x6f01,0x6ef2,0x6ecc,0x6ef7, +0x7194,0x7199,0x717d,0x718a,0x7184,0x7192,0x723e,0x7292, +0x7296,0x7344,0x7350,0x7464,0x7463,0x746a,0x7470,0x746d, +0x7504,0x7591,0x7627,0x760d,0x760b,0x7609,0x7613,0x76e1, +0x76e3,0x7784,0x777d,0x777f,0x7761,0x78c1,0x789f,0x78a7, +0x78b3,0x78a9,0x78a3,0x798e,0x798f,0x798d,0x7a2e,0x7a31, +0x7aaa,0x7aa9,0x7aed,0x7aef,0x7ba1,0x7b95,0x7b8b,0x7b75, +0x7b97,0x7b9d,0x7b94,0x7b8f,0x7bb8,0x7b87,0x7b84,0x7cb9, +0x7cbd,0x7cbe,0x7dbb,0x7db0,0x7d9c,0x7dbd,0x7dbe,0x7da0, +0x7dca,0x7db4,0x7db2,0x7db1,0x7dba,0x7da2,0x7dbf,0x7db5, +0x7db8,0x7dad,0x7dd2,0x7dc7,0x7dac,0x7f70,0x7fe0,0x7fe1, +0x7fdf,0x805e,0x805a,0x8087,0x8150,0x8180,0x818f,0x8188, +0x818a,0x817f,0x8182,0x81e7,0x81fa,0x8207,0x8214,0x821e, +0x824b,0x84c9,0x84bf,0x84c6,0x84c4,0x8499,0x849e,0x84b2, +0x849c,0x84cb,0x84b8,0x84c0,0x84d3,0x8490,0x84bc,0x84d1, +0x84ca,0x873f,0x871c,0x873b,0x8722,0x8725,0x8734,0x8718, +0x8755,0x8737,0x8729,0x88f3,0x8902,0x88f4,0x88f9,0x88f8, +0x88fd,0x88e8,0x891a,0x88ef,0x8aa6,0x8a8c,0x8a9e,0x8aa3, +0x8a8d,0x8aa1,0x8a93,0x8aa4,0x8aaa,0x8aa5,0x8aa8,0x8a98, +0x8a91,0x8a9a,0x8aa7,0x8c6a,0x8c8d,0x8c8c,0x8cd3,0x8cd1, +0x8cd2,0x8d6b,0x8d99,0x8d95,0x8dfc,0x8f14,0x8f12,0x8f15, +0x8f13,0x8fa3,0x9060,0x9058,0x905c,0x9063,0x9059,0x905e, +0x9062,0x905d,0x905b,0x9119,0x9118,0x911e,0x9175,0x9178, +0x9177,0x9174,0x9278,0x92ac,0x9280,0x9285,0x9298,0x9296, +0x927b,0x9293,0x929c,0x92a8,0x927c,0x9291,0x95a1,0x95a8, +0x95a9,0x95a3,0x95a5,0x95a4,0x9699,0x969c,0x969b,0x96cc, +0x96d2,0x9700,0x977c,0x9785,0x97f6,0x9817,0x9818,0x98af, +0x98b1,0x9903,0x9905,0x990c,0x9909,0x99c1,0x9aaf,0x9ab0, +0x9ae6,0x9b41,0x9b42,0x9cf4,0x9cf6,0x9cf3,0x9ebc,0x9f3b, +0x9f4a,0x5104,0x5100,0x50fb,0x50f5,0x50f9,0x5102,0x5108, +0x5109,0x5105,0x51dc,0x5287,0x5288,0x5289,0x528d,0x528a, +0x52f0,0x53b2,0x562e,0x563b,0x5639,0x5632,0x563f,0x5634, +0x5629,0x5653,0x564e,0x5657,0x5674,0x5636,0x562f,0x5630, +0x5880,0x589f,0x589e,0x58b3,0x589c,0x58ae,0x58a9,0x58a6, +0x596d,0x5b09,0x5afb,0x5b0b,0x5af5,0x5b0c,0x5b08,0x5bee, +0x5bec,0x5be9,0x5beb,0x5c64,0x5c65,0x5d9d,0x5d94,0x5e62, +0x5e5f,0x5e61,0x5ee2,0x5eda,0x5edf,0x5edd,0x5ee3,0x5ee0, +0x5f48,0x5f71,0x5fb7,0x5fb5,0x6176,0x6167,0x616e,0x615d, +0x6155,0x6182,0x617c,0x6170,0x616b,0x617e,0x61a7,0x6190, +0x61ab,0x618e,0x61ac,0x619a,0x61a4,0x6194,0x61ae,0x622e, +0x6469,0x646f,0x6479,0x649e,0x64b2,0x6488,0x6490,0x64b0, +0x64a5,0x6493,0x6495,0x64a9,0x6492,0x64ae,0x64ad,0x64ab, +0x649a,0x64ac,0x6499,0x64a2,0x64b3,0x6575,0x6577,0x6578, +0x66ae,0x66ab,0x66b4,0x66b1,0x6a23,0x6a1f,0x69e8,0x6a01, +0x6a1e,0x6a19,0x69fd,0x6a21,0x6a13,0x6a0a,0x69f3,0x6a02, +0x6a05,0x69ed,0x6a11,0x6b50,0x6b4e,0x6ba4,0x6bc5,0x6bc6, +0x6f3f,0x6f7c,0x6f84,0x6f51,0x6f66,0x6f54,0x6f86,0x6f6d, +0x6f5b,0x6f78,0x6f6e,0x6f8e,0x6f7a,0x6f70,0x6f64,0x6f97, +0x6f58,0x6ed5,0x6f6f,0x6f60,0x6f5f,0x719f,0x71ac,0x71b1, +0x71a8,0x7256,0x729b,0x734e,0x7357,0x7469,0x748b,0x7483, +0x747e,0x7480,0x757f,0x7620,0x7629,0x761f,0x7624,0x7626, +0x7621,0x7622,0x769a,0x76ba,0x76e4,0x778e,0x7787,0x778c, +0x7791,0x778b,0x78cb,0x78c5,0x78ba,0x78ca,0x78be,0x78d5, +0x78bc,0x78d0,0x7a3f,0x7a3c,0x7a40,0x7a3d,0x7a37,0x7a3b, +0x7aaf,0x7aae,0x7bad,0x7bb1,0x7bc4,0x7bb4,0x7bc6,0x7bc7, +0x7bc1,0x7ba0,0x7bcc,0x7cca,0x7de0,0x7df4,0x7def,0x7dfb, +0x7dd8,0x7dec,0x7ddd,0x7de8,0x7de3,0x7dda,0x7dde,0x7de9, +0x7d9e,0x7dd9,0x7df2,0x7df9,0x7f75,0x7f77,0x7faf,0x7fe9, +0x8026,0x819b,0x819c,0x819d,0x81a0,0x819a,0x8198,0x8517, +0x853d,0x851a,0x84ee,0x852c,0x852d,0x8513,0x8511,0x8523, +0x8521,0x8514,0x84ec,0x8525,0x84ff,0x8506,0x8782,0x8774, +0x8776,0x8760,0x8766,0x8778,0x8768,0x8759,0x8757,0x874c, +0x8753,0x885b,0x885d,0x8910,0x8907,0x8912,0x8913,0x8915, +0x890a,0x8abc,0x8ad2,0x8ac7,0x8ac4,0x8a95,0x8acb,0x8af8, +0x8ab2,0x8ac9,0x8ac2,0x8abf,0x8ab0,0x8ad6,0x8acd,0x8ab6, +0x8ab9,0x8adb,0x8c4c,0x8c4e,0x8c6c,0x8ce0,0x8cde,0x8ce6, +0x8ce4,0x8cec,0x8ced,0x8ce2,0x8ce3,0x8cdc,0x8cea,0x8ce1, +0x8d6d,0x8d9f,0x8da3,0x8e2b,0x8e10,0x8e1d,0x8e22,0x8e0f, +0x8e29,0x8e1f,0x8e21,0x8e1e,0x8eba,0x8f1d,0x8f1b,0x8f1f, +0x8f29,0x8f26,0x8f2a,0x8f1c,0x8f1e,0x8f25,0x9069,0x906e, +0x9068,0x906d,0x9077,0x9130,0x912d,0x9127,0x9131,0x9187, +0x9189,0x918b,0x9183,0x92c5,0x92bb,0x92b7,0x92ea,0x92e4, +0x92c1,0x92b3,0x92bc,0x92d2,0x92c7,0x92f0,0x92b2,0x95ad, +0x95b1,0x9704,0x9706,0x9707,0x9709,0x9760,0x978d,0x978b, +0x978f,0x9821,0x982b,0x981c,0x98b3,0x990a,0x9913,0x9912, +0x9918,0x99dd,0x99d0,0x99df,0x99db,0x99d1,0x99d5,0x99d2, +0x99d9,0x9ab7,0x9aee,0x9aef,0x9b27,0x9b45,0x9b44,0x9b77, +0x9b6f,0x9d06,0x9d09,0x9d03,0x9ea9,0x9ebe,0x9ece,0x58a8, +0x9f52,0x5112,0x5118,0x5114,0x5110,0x5115,0x5180,0x51aa, +0x51dd,0x5291,0x5293,0x52f3,0x5659,0x566b,0x5679,0x5669, +0x5664,0x5678,0x566a,0x5668,0x5665,0x5671,0x566f,0x566c, +0x5662,0x5676,0x58c1,0x58be,0x58c7,0x58c5,0x596e,0x5b1d, +0x5b34,0x5b78,0x5bf0,0x5c0e,0x5f4a,0x61b2,0x6191,0x61a9, +0x618a,0x61cd,0x61b6,0x61be,0x61ca,0x61c8,0x6230,0x64c5, +0x64c1,0x64cb,0x64bb,0x64bc,0x64da,0x64c4,0x64c7,0x64c2, +0x64cd,0x64bf,0x64d2,0x64d4,0x64be,0x6574,0x66c6,0x66c9, +0x66b9,0x66c4,0x66c7,0x66b8,0x6a3d,0x6a38,0x6a3a,0x6a59, +0x6a6b,0x6a58,0x6a39,0x6a44,0x6a62,0x6a61,0x6a4b,0x6a47, +0x6a35,0x6a5f,0x6a48,0x6b59,0x6b77,0x6c05,0x6fc2,0x6fb1, +0x6fa1,0x6fc3,0x6fa4,0x6fc1,0x6fa7,0x6fb3,0x6fc0,0x6fb9, +0x6fb6,0x6fa6,0x6fa0,0x6fb4,0x71be,0x71c9,0x71d0,0x71d2, +0x71c8,0x71d5,0x71b9,0x71ce,0x71d9,0x71dc,0x71c3,0x71c4, +0x7368,0x749c,0x74a3,0x7498,0x749f,0x749e,0x74e2,0x750c, +0x750d,0x7634,0x7638,0x763a,0x76e7,0x76e5,0x77a0,0x779e, +0x779f,0x77a5,0x78e8,0x78da,0x78ec,0x78e7,0x79a6,0x7a4d, +0x7a4e,0x7a46,0x7a4c,0x7a4b,0x7aba,0x7bd9,0x7c11,0x7bc9, +0x7be4,0x7bdb,0x7be1,0x7be9,0x7be6,0x7cd5,0x7cd6,0x7e0a, +0x7e11,0x7e08,0x7e1b,0x7e23,0x7e1e,0x7e1d,0x7e09,0x7e10, +0x7f79,0x7fb2,0x7ff0,0x7ff1,0x7fee,0x8028,0x81b3,0x81a9, +0x81a8,0x81fb,0x8208,0x8258,0x8259,0x854a,0x8559,0x8548, +0x8568,0x8569,0x8543,0x8549,0x856d,0x856a,0x855e,0x8783, +0x879f,0x879e,0x87a2,0x878d,0x8861,0x892a,0x8932,0x8925, +0x892b,0x8921,0x89aa,0x89a6,0x8ae6,0x8afa,0x8aeb,0x8af1, +0x8b00,0x8adc,0x8ae7,0x8aee,0x8afe,0x8b01,0x8b02,0x8af7, +0x8aed,0x8af3,0x8af6,0x8afc,0x8c6b,0x8c6d,0x8c93,0x8cf4, +0x8e44,0x8e31,0x8e34,0x8e42,0x8e39,0x8e35,0x8f3b,0x8f2f, +0x8f38,0x8f33,0x8fa8,0x8fa6,0x9075,0x9074,0x9078,0x9072, +0x907c,0x907a,0x9134,0x9192,0x9320,0x9336,0x92f8,0x9333, +0x932f,0x9322,0x92fc,0x932b,0x9304,0x931a,0x9310,0x9326, +0x9321,0x9315,0x932e,0x9319,0x95bb,0x96a7,0x96a8,0x96aa, +0x96d5,0x970e,0x9711,0x9716,0x970d,0x9713,0x970f,0x975b, +0x975c,0x9766,0x9798,0x9830,0x9838,0x983b,0x9837,0x982d, +0x9839,0x9824,0x9910,0x9928,0x991e,0x991b,0x9921,0x991a, +0x99ed,0x99e2,0x99f1,0x9ab8,0x9abc,0x9afb,0x9aed,0x9b28, +0x9b91,0x9d15,0x9d23,0x9d26,0x9d28,0x9d12,0x9d1b,0x9ed8, +0x9ed4,0x9f8d,0x9f9c,0x512a,0x511f,0x5121,0x5132,0x52f5, +0x568e,0x5680,0x5690,0x5685,0x5687,0x568f,0x58d5,0x58d3, +0x58d1,0x58ce,0x5b30,0x5b2a,0x5b24,0x5b7a,0x5c37,0x5c68, +0x5dbc,0x5dba,0x5dbd,0x5db8,0x5e6b,0x5f4c,0x5fbd,0x61c9, +0x61c2,0x61c7,0x61e6,0x61cb,0x6232,0x6234,0x64ce,0x64ca, +0x64d8,0x64e0,0x64f0,0x64e6,0x64ec,0x64f1,0x64e2,0x64ed, +0x6582,0x6583,0x66d9,0x66d6,0x6a80,0x6a94,0x6a84,0x6aa2, +0x6a9c,0x6adb,0x6aa3,0x6a7e,0x6a97,0x6a90,0x6aa0,0x6b5c, +0x6bae,0x6bda,0x6c08,0x6fd8,0x6ff1,0x6fdf,0x6fe0,0x6fdb, +0x6fe4,0x6feb,0x6fef,0x6f80,0x6fec,0x6fe1,0x6fe9,0x6fd5, +0x6fee,0x6ff0,0x71e7,0x71df,0x71ee,0x71e6,0x71e5,0x71ed, +0x71ec,0x71f4,0x71e0,0x7235,0x7246,0x7370,0x7372,0x74a9, +0x74b0,0x74a6,0x74a8,0x7646,0x7642,0x764c,0x76ea,0x77b3, +0x77aa,0x77b0,0x77ac,0x77a7,0x77ad,0x77ef,0x78f7,0x78fa, +0x78f4,0x78ef,0x7901,0x79a7,0x79aa,0x7a57,0x7abf,0x7c07, +0x7c0d,0x7bfe,0x7bf7,0x7c0c,0x7be0,0x7ce0,0x7cdc,0x7cde, +0x7ce2,0x7cdf,0x7cd9,0x7cdd,0x7e2e,0x7e3e,0x7e46,0x7e37, +0x7e32,0x7e43,0x7e2b,0x7e3d,0x7e31,0x7e45,0x7e41,0x7e34, +0x7e39,0x7e48,0x7e35,0x7e3f,0x7e2f,0x7f44,0x7ff3,0x7ffc, +0x8071,0x8072,0x8070,0x806f,0x8073,0x81c6,0x81c3,0x81ba, +0x81c2,0x81c0,0x81bf,0x81bd,0x81c9,0x81be,0x81e8,0x8209, +0x8271,0x85aa,0x8584,0x857e,0x859c,0x8591,0x8594,0x85af, +0x859b,0x8587,0x85a8,0x858a,0x85a6,0x8667,0x87c0,0x87d1, +0x87b3,0x87d2,0x87c6,0x87ab,0x87bb,0x87ba,0x87c8,0x87cb, +0x893b,0x8936,0x8944,0x8938,0x893d,0x89ac,0x8b0e,0x8b17, +0x8b19,0x8b1b,0x8b0a,0x8b20,0x8b1d,0x8b04,0x8b10,0x8c41, +0x8c3f,0x8c73,0x8cfa,0x8cfd,0x8cfc,0x8cf8,0x8cfb,0x8da8, +0x8e49,0x8e4b,0x8e48,0x8e4a,0x8f44,0x8f3e,0x8f42,0x8f45, +0x8f3f,0x907f,0x907d,0x9084,0x9081,0x9082,0x9080,0x9139, +0x91a3,0x919e,0x919c,0x934d,0x9382,0x9328,0x9375,0x934a, +0x9365,0x934b,0x9318,0x937e,0x936c,0x935b,0x9370,0x935a, +0x9354,0x95ca,0x95cb,0x95cc,0x95c8,0x95c6,0x96b1,0x96b8, +0x96d6,0x971c,0x971e,0x97a0,0x97d3,0x9846,0x98b6,0x9935, +0x9a01,0x99ff,0x9bae,0x9bab,0x9baa,0x9bad,0x9d3b,0x9d3f, +0x9e8b,0x9ecf,0x9ede,0x9edc,0x9edd,0x9edb,0x9f3e,0x9f4b, +0x53e2,0x5695,0x56ae,0x58d9,0x58d8,0x5b38,0x5f5e,0x61e3, +0x6233,0x64f4,0x64f2,0x64fe,0x6506,0x64fa,0x64fb,0x64f7, +0x65b7,0x66dc,0x6726,0x6ab3,0x6aac,0x6ac3,0x6abb,0x6ab8, +0x6ac2,0x6aae,0x6aaf,0x6b5f,0x6b78,0x6baf,0x7009,0x700b, +0x6ffe,0x7006,0x6ffa,0x7011,0x700f,0x71fb,0x71fc,0x71fe, +0x71f8,0x7377,0x7375,0x74a7,0x74bf,0x7515,0x7656,0x7658, +0x7652,0x77bd,0x77bf,0x77bb,0x77bc,0x790e,0x79ae,0x7a61, +0x7a62,0x7a60,0x7ac4,0x7ac5,0x7c2b,0x7c27,0x7c2a,0x7c1e, +0x7c23,0x7c21,0x7ce7,0x7e54,0x7e55,0x7e5e,0x7e5a,0x7e61, +0x7e52,0x7e59,0x7f48,0x7ff9,0x7ffb,0x8077,0x8076,0x81cd, +0x81cf,0x820a,0x85cf,0x85a9,0x85cd,0x85d0,0x85c9,0x85b0, +0x85ba,0x85b9,0x87ef,0x87ec,0x87f2,0x87e0,0x8986,0x89b2, +0x89f4,0x8b28,0x8b39,0x8b2c,0x8b2b,0x8c50,0x8d05,0x8e59, +0x8e63,0x8e66,0x8e64,0x8e5f,0x8e55,0x8ec0,0x8f49,0x8f4d, +0x9087,0x9083,0x9088,0x91ab,0x91ac,0x91d0,0x9394,0x938a, +0x9396,0x93a2,0x93b3,0x93ae,0x93ac,0x93b0,0x9398,0x939a, +0x9397,0x95d4,0x95d6,0x95d0,0x95d5,0x96e2,0x96dc,0x96d9, +0x96db,0x96de,0x9724,0x97a3,0x97a6,0x97ad,0x97f9,0x984d, +0x984f,0x984c,0x984e,0x9853,0x98ba,0x993e,0x993f,0x993d, +0x992e,0x99a5,0x9a0e,0x9ac1,0x9b03,0x9b06,0x9b4f,0x9b4e, +0x9b4d,0x9bca,0x9bc9,0x9bfd,0x9bc8,0x9bc0,0x9d51,0x9d5d, +0x9d60,0x9ee0,0x9f15,0x9f2c,0x5133,0x56a5,0x56a8,0x58de, +0x58df,0x58e2,0x5bf5,0x9f90,0x5eec,0x61f2,0x61f7,0x61f6, +0x61f5,0x6500,0x650f,0x66e0,0x66dd,0x6ae5,0x6add,0x6ada, +0x6ad3,0x701b,0x701f,0x7028,0x701a,0x701d,0x7015,0x7018, +0x7206,0x720d,0x7258,0x72a2,0x7378,0x737a,0x74bd,0x74ca, +0x74e3,0x7587,0x7586,0x765f,0x7661,0x77c7,0x7919,0x79b1, +0x7a6b,0x7a69,0x7c3e,0x7c3f,0x7c38,0x7c3d,0x7c37,0x7c40, +0x7e6b,0x7e6d,0x7e79,0x7e69,0x7e6a,0x7e73,0x7f85,0x7fb6, +0x7fb9,0x7fb8,0x81d8,0x85e9,0x85dd,0x85ea,0x85d5,0x85e4, +0x85e5,0x85f7,0x87fb,0x8805,0x880d,0x87f9,0x87fe,0x8960, +0x895f,0x8956,0x895e,0x8b41,0x8b5c,0x8b58,0x8b49,0x8b5a, +0x8b4e,0x8b4f,0x8b46,0x8b59,0x8d08,0x8d0a,0x8e7c,0x8e72, +0x8e87,0x8e76,0x8e6c,0x8e7a,0x8e74,0x8f54,0x8f4e,0x8fad, +0x908a,0x908b,0x91b1,0x91ae,0x93e1,0x93d1,0x93df,0x93c3, +0x93c8,0x93dc,0x93dd,0x93d6,0x93e2,0x93cd,0x93d8,0x93e4, +0x93d7,0x93e8,0x95dc,0x96b4,0x96e3,0x972a,0x9727,0x9761, +0x97dc,0x97fb,0x985e,0x9858,0x985b,0x98bc,0x9945,0x9949, +0x9a16,0x9a19,0x9b0d,0x9be8,0x9be7,0x9bd6,0x9bdb,0x9d89, +0x9d61,0x9d72,0x9d6a,0x9d6c,0x9e92,0x9e97,0x9e93,0x9eb4, +0x52f8,0x56b7,0x56b6,0x56b4,0x56bc,0x58e4,0x5b40,0x5b43, +0x5b7d,0x5bf6,0x5dc9,0x61f8,0x61fa,0x6518,0x6514,0x6519, +0x66e6,0x6727,0x6aec,0x703e,0x7030,0x7032,0x7210,0x737b, +0x74cf,0x7662,0x7665,0x7926,0x792a,0x792c,0x792b,0x7ac7, +0x7af6,0x7c4c,0x7c43,0x7c4d,0x7cef,0x7cf0,0x8fae,0x7e7d, +0x7e7c,0x7e82,0x7f4c,0x8000,0x81da,0x8266,0x85fb,0x85f9, +0x8611,0x85fa,0x8606,0x860b,0x8607,0x860a,0x8814,0x8815, +0x8964,0x89ba,0x89f8,0x8b70,0x8b6c,0x8b66,0x8b6f,0x8b5f, +0x8b6b,0x8d0f,0x8d0d,0x8e89,0x8e81,0x8e85,0x8e82,0x91b4, +0x91cb,0x9418,0x9403,0x93fd,0x95e1,0x9730,0x98c4,0x9952, +0x9951,0x99a8,0x9a2b,0x9a30,0x9a37,0x9a35,0x9c13,0x9c0d, +0x9e79,0x9eb5,0x9ee8,0x9f2f,0x9f5f,0x9f63,0x9f61,0x5137, +0x5138,0x56c1,0x56c0,0x56c2,0x5914,0x5c6c,0x5dcd,0x61fc, +0x61fe,0x651d,0x651c,0x6595,0x66e9,0x6afb,0x6b04,0x6afa, +0x6bb2,0x704c,0x721b,0x72a7,0x74d6,0x74d4,0x7669,0x77d3, +0x7c50,0x7e8f,0x7e8c,0x7fbc,0x8617,0x862d,0x861a,0x8823, +0x8822,0x8821,0x881f,0x896a,0x896c,0x89bd,0x8b74,0x8b77, +0x8b7d,0x8d13,0x8e8a,0x8e8d,0x8e8b,0x8f5f,0x8faf,0x91ba, +0x942e,0x9433,0x9435,0x943a,0x9438,0x9432,0x942b,0x95e2, +0x9738,0x9739,0x9732,0x97ff,0x9867,0x9865,0x9957,0x9a45, +0x9a43,0x9a40,0x9a3e,0x9acf,0x9b54,0x9b51,0x9c2d,0x9c25, +0x9daf,0x9db4,0x9dc2,0x9db8,0x9e9d,0x9eef,0x9f19,0x9f5c, +0x9f66,0x9f67,0x513c,0x513b,0x56c8,0x56ca,0x56c9,0x5b7f, +0x5dd4,0x5dd2,0x5f4e,0x61ff,0x6524,0x6b0a,0x6b61,0x7051, +0x7058,0x7380,0x74e4,0x758a,0x766e,0x766c,0x79b3,0x7c60, +0x7c5f,0x807e,0x807d,0x81df,0x8972,0x896f,0x89fc,0x8b80, +0x8d16,0x8d17,0x8e91,0x8e93,0x8f61,0x9148,0x9444,0x9451, +0x9452,0x973d,0x973e,0x97c3,0x97c1,0x986b,0x9955,0x9a55, +0x9a4d,0x9ad2,0x9b1a,0x9c49,0x9c31,0x9c3e,0x9c3b,0x9dd3, +0x9dd7,0x9f34,0x9f6c,0x9f6a,0x9f94,0x56cc,0x5dd6,0x6200, +0x6523,0x652b,0x652a,0x66ec,0x6b10,0x74da,0x7aca,0x7c64, +0x7c63,0x7c65,0x7e93,0x7e96,0x7e94,0x81e2,0x8638,0x863f, +0x8831,0x8b8a,0x9090,0x908f,0x9463,0x9460,0x9464,0x9768, +0x986f,0x995c,0x9a5a,0x9a5b,0x9a57,0x9ad3,0x9ad4,0x9ad1, +0x9c54,0x9c57,0x9c56,0x9de5,0x9e9f,0x9ef4,0x56d1,0x58e9, +0x652c,0x705e,0x7671,0x7672,0x77d7,0x7f50,0x7f88,0x8836, +0x8839,0x8862,0x8b93,0x8b92,0x8b96,0x8277,0x8d1b,0x91c0, +0x946a,0x9742,0x9748,0x9744,0x97c6,0x9870,0x9a5f,0x9b22, +0x9b58,0x9c5f,0x9df9,0x9dfa,0x9e7c,0x9e7d,0x9f07,0x9f77, +0x9f72,0x5ef3,0x6b16,0x7063,0x7c6c,0x7c6e,0x883b,0x89c0, +0x8ea1,0x91c1,0x9472,0x9470,0x9871,0x995e,0x9ad6,0x9b23, +0x9ecc,0x7064,0x77da,0x8b9a,0x9477,0x97c9,0x9a62,0x9a65, +0x7e9c,0x8b9c,0x8eaa,0x91c5,0x947d,0x947e,0x947c,0x9c77, +0x9c78,0x9ef7,0x8c54,0x947f,0x9e1a,0x7228,0x9a6a,0x9b31, +0x9e1b,0x9e1e,0x7c72}; + +static const int cns11643_1_ucs_table_size = (sizeof(cns11643_1_ucs_table)/sizeof(unsigned short)); + +static const unsigned short cns11643_2_ucs_table[] = { +0x4e42,0x4e5c,0x51f5,0x531a,0x5382,0x4e07,0x4e0c,0x4e47, +0x4e8d,0x56d7,0x5c6e,0x5f73,0x4e0f,0x5187,0x4e0e,0x4e2e, +0x4e93,0x4ec2,0x4ec9,0x4ec8,0x5198,0x52fc,0x536c,0x53b9, +0x5720,0x5903,0x592c,0x5c10,0x5dff,0x65e1,0x6bb3,0x6bcc, +0x6c14,0x723f,0x4e31,0x4e3c,0x4ee8,0x4edc,0x4ee9,0x4ee1, +0x4edd,0x4eda,0x520c,0x5209,0x531c,0x534c,0x5722,0x5723, +0x5917,0x592f,0x5b81,0x5b84,0x5c12,0x5c3b,0x5c74,0x5c73, +0x5e04,0x5e80,0x5e82,0x5fc9,0x6209,0x6250,0x6c15,0x6c36, +0x6c43,0x6c3f,0x6c3b,0x72ae,0x72b0,0x738a,0x79b8,0x808a, +0x961e,0x4f0e,0x4f18,0x4f2c,0x4ef5,0x4f14,0x4ef1,0x4f00, +0x4ef7,0x4f08,0x4f1d,0x4f02,0x4f05,0x4f22,0x4f13,0x4f04, +0x4ef4,0x4f12,0x51b1,0x5213,0x5210,0x52a6,0x5322,0x531f, +0x534d,0x538a,0x5407,0x56e1,0x56df,0x572e,0x572a,0x5734, +0x593c,0x5980,0x597c,0x5985,0x597b,0x597e,0x5977,0x597f, +0x5b56,0x5c15,0x5c25,0x5c7c,0x5c7a,0x5c7b,0x5c7e,0x5ddf, +0x5e75,0x5e84,0x5f02,0x5f1a,0x5f74,0x5fd5,0x5fd4,0x5fcf, +0x625c,0x625e,0x6264,0x6261,0x6266,0x6262,0x6259,0x6260, +0x625a,0x6265,0x6537,0x65ef,0x65ee,0x673e,0x6739,0x6738, +0x673b,0x673a,0x673f,0x673c,0x6733,0x6c18,0x6c46,0x6c52, +0x6c5c,0x6c4f,0x6c4a,0x6c54,0x6c4b,0x6c4c,0x7071,0x725e, +0x72b4,0x72b5,0x738e,0x752a,0x767f,0x7a75,0x7f51,0x8278, +0x827c,0x8280,0x827d,0x827f,0x864d,0x897e,0x9099,0x9097, +0x9098,0x909b,0x9094,0x9622,0x9624,0x9620,0x9623,0x4f56, +0x4f3b,0x4f62,0x4f49,0x4f53,0x4f64,0x4f3e,0x4f67,0x4f52, +0x4f5f,0x4f41,0x4f58,0x4f2d,0x4f33,0x4f3f,0x4f61,0x518f, +0x51b9,0x521c,0x521e,0x5221,0x52ad,0x52ae,0x5309,0x5363, +0x5372,0x538e,0x538f,0x5430,0x5437,0x542a,0x5454,0x5445, +0x5419,0x541c,0x5425,0x5418,0x543d,0x544f,0x5441,0x5428, +0x5424,0x5447,0x56ee,0x56e7,0x56e5,0x5741,0x5745,0x574c, +0x5749,0x574b,0x5752,0x5906,0x5940,0x59a6,0x5998,0x59a0, +0x5997,0x598e,0x59a2,0x5990,0x598f,0x59a7,0x59a1,0x5b8e, +0x5b92,0x5c28,0x5c2a,0x5c8d,0x5c8f,0x5c88,0x5c8b,0x5c89, +0x5c92,0x5c8a,0x5c86,0x5c93,0x5c95,0x5de0,0x5e0a,0x5e0e, +0x5e8b,0x5e89,0x5e8c,0x5e88,0x5e8d,0x5f05,0x5f1d,0x5f78, +0x5f76,0x5fd2,0x5fd1,0x5fd0,0x5fed,0x5fe8,0x5fee,0x5ff3, +0x5fe1,0x5fe4,0x5fe3,0x5ffa,0x5fef,0x5ff7,0x5ffb,0x6000, +0x5ff4,0x623a,0x6283,0x628c,0x628e,0x628f,0x6294,0x6287, +0x6271,0x627b,0x627a,0x6270,0x6281,0x6288,0x6277,0x627d, +0x6272,0x6274,0x65f0,0x65f4,0x65f3,0x65f2,0x65f5,0x6745, +0x6747,0x6759,0x6755,0x674c,0x6748,0x675d,0x674d,0x675a, +0x674b,0x6bd0,0x6c19,0x6c1a,0x6c78,0x6c67,0x6c6b,0x6c84, +0x6c8b,0x6c8f,0x6c71,0x6c6f,0x6c69,0x6c9a,0x6c6d,0x6c87, +0x6c95,0x6c9c,0x6c66,0x6c73,0x6c65,0x6c7b,0x6c8e,0x7074, +0x707a,0x7263,0x72bf,0x72bd,0x72c3,0x72c6,0x72c1,0x72ba, +0x72c5,0x7395,0x7397,0x7393,0x7394,0x7392,0x753a,0x7539, +0x7594,0x7595,0x7681,0x793d,0x8034,0x8095,0x8099,0x8090, +0x8092,0x809c,0x8290,0x828f,0x8285,0x828e,0x8291,0x8293, +0x828a,0x8283,0x8284,0x8c78,0x8fc9,0x8fbf,0x909f,0x90a1, +0x90a5,0x909e,0x90a7,0x90a0,0x9630,0x9628,0x962f,0x962d, +0x4e33,0x4f98,0x4f7c,0x4f85,0x4f7d,0x4f80,0x4f87,0x4f76, +0x4f74,0x4f89,0x4f84,0x4f77,0x4f4c,0x4f97,0x4f6a,0x4f9a, +0x4f79,0x4f81,0x4f78,0x4f90,0x4f9c,0x4f94,0x4f9e,0x4f92, +0x4f82,0x4f95,0x4f6b,0x4f6e,0x519e,0x51bc,0x51be,0x5235, +0x5232,0x5233,0x5246,0x5231,0x52bc,0x530a,0x530b,0x533c, +0x5392,0x5394,0x5487,0x547f,0x5481,0x5491,0x5482,0x5488, +0x546b,0x547a,0x547e,0x5465,0x546c,0x5474,0x5466,0x548d, +0x546f,0x5461,0x5460,0x5498,0x5463,0x5467,0x5464,0x56f7, +0x56f9,0x576f,0x5772,0x576d,0x576b,0x5771,0x5770,0x5776, +0x5780,0x5775,0x577b,0x5773,0x5774,0x5762,0x5768,0x577d, +0x590c,0x5945,0x59b5,0x59ba,0x59cf,0x59ce,0x59b2,0x59cc, +0x59c1,0x59b6,0x59bc,0x59c3,0x59d6,0x59b1,0x59bd,0x59c0, +0x59c8,0x59b4,0x59c7,0x5b62,0x5b65,0x5b93,0x5b95,0x5c44, +0x5c47,0x5cae,0x5ca4,0x5ca0,0x5cb5,0x5caf,0x5ca8,0x5cac, +0x5c9f,0x5ca3,0x5cad,0x5ca2,0x5caa,0x5ca7,0x5c9d,0x5ca5, +0x5cb6,0x5cb0,0x5ca6,0x5e17,0x5e14,0x5e19,0x5f28,0x5f22, +0x5f23,0x5f24,0x5f54,0x5f82,0x5f7e,0x5f7d,0x5fde,0x5fe5, +0x602d,0x6026,0x6019,0x6032,0x600b,0x6034,0x600a,0x6017, +0x6033,0x601a,0x601e,0x602c,0x6022,0x600d,0x6010,0x602e, +0x6013,0x6011,0x600c,0x6009,0x601c,0x6214,0x623d,0x62ad, +0x62b4,0x62d1,0x62be,0x62aa,0x62b6,0x62ca,0x62ae,0x62b3, +0x62af,0x62bb,0x62a9,0x62b0,0x62b8,0x653d,0x65a8,0x65bb, +0x6609,0x65fc,0x6604,0x6612,0x6608,0x65fb,0x6603,0x660b, +0x660d,0x6605,0x65fd,0x6611,0x6610,0x66f6,0x670a,0x6785, +0x676c,0x678e,0x6792,0x6776,0x677b,0x6798,0x6786,0x6784, +0x6774,0x678d,0x678c,0x677a,0x679f,0x6791,0x6799,0x6783, +0x677d,0x6781,0x6778,0x6779,0x6794,0x6b25,0x6b80,0x6b7e, +0x6bde,0x6c1d,0x6c93,0x6cec,0x6ceb,0x6cee,0x6cd9,0x6cb6, +0x6cd4,0x6cad,0x6ce7,0x6cb7,0x6cd0,0x6cc2,0x6cba,0x6cc3, +0x6cc6,0x6ced,0x6cf2,0x6cd2,0x6cdd,0x6cb4,0x6c8a,0x6c9d, +0x6c80,0x6cde,0x6cc0,0x6d30,0x6ccd,0x6cc7,0x6cb0,0x6cf9, +0x6ccf,0x6ce9,0x6cd1,0x7094,0x7098,0x7085,0x7093,0x7086, +0x7084,0x7091,0x7096,0x7082,0x709a,0x7083,0x726a,0x72d6, +0x72cb,0x72d8,0x72c9,0x72dc,0x72d2,0x72d4,0x72da,0x72cc, +0x72d1,0x73a4,0x73a1,0x73ad,0x73a6,0x73a2,0x73a0,0x73ac, +0x739d,0x74dd,0x74e8,0x753f,0x7540,0x753e,0x758c,0x7598, +0x76af,0x76f3,0x76f1,0x76f0,0x76f5,0x77f8,0x77fc,0x77f9, +0x77fb,0x77fa,0x77f7,0x7942,0x793f,0x79c5,0x7a78,0x7a7b, +0x7afb,0x7c75,0x7cfd,0x8035,0x808f,0x80ae,0x80a3,0x80b8, +0x80b5,0x80ad,0x8220,0x82a0,0x82c0,0x82ab,0x829a,0x8298, +0x829b,0x82b5,0x82a7,0x82ae,0x82bc,0x829e,0x82ba,0x82b4, +0x82a8,0x82a1,0x82a9,0x82c2,0x82a4,0x82c3,0x82b6,0x82a2, +0x8670,0x866f,0x866d,0x866e,0x8c56,0x8fd2,0x8fcb,0x8fd3, +0x8fcd,0x8fd6,0x8fd5,0x8fd7,0x90b2,0x90b4,0x90af,0x90b3, +0x90b0,0x9639,0x963d,0x963c,0x963a,0x9643,0x4fcd,0x4fc5, +0x4fd3,0x4fb2,0x4fc9,0x4fcb,0x4fc1,0x4fd4,0x4fdc,0x4fd9, +0x4fbb,0x4fb3,0x4fdb,0x4fc7,0x4fd6,0x4fba,0x4fc0,0x4fb9, +0x4fec,0x5244,0x5249,0x52c0,0x52c2,0x533d,0x537c,0x5397, +0x5396,0x5399,0x5398,0x54ba,0x54a1,0x54ad,0x54a5,0x54cf, +0x54c3,0x830d,0x54b7,0x54ae,0x54d6,0x54b6,0x54c5,0x54c6, +0x54a0,0x5470,0x54bc,0x54a2,0x54be,0x5472,0x54de,0x54b0, +0x57b5,0x579e,0x579f,0x57a4,0x578c,0x5797,0x579d,0x579b, +0x5794,0x5798,0x578f,0x5799,0x57a5,0x579a,0x5795,0x58f4, +0x590d,0x5953,0x59e1,0x59de,0x59ee,0x5a00,0x59f1,0x59dd, +0x59fa,0x59fd,0x59fc,0x59f6,0x59e4,0x59f2,0x59f7,0x59db, +0x59e9,0x59f3,0x59f5,0x59e0,0x59fe,0x59f4,0x59ed,0x5ba8, +0x5c4c,0x5cd0,0x5cd8,0x5ccc,0x5cd7,0x5ccb,0x5cdb,0x5cde, +0x5cda,0x5cc9,0x5cc7,0x5cca,0x5cd6,0x5cd3,0x5cd4,0x5ccf, +0x5cc8,0x5cc6,0x5cce,0x5cdf,0x5cf8,0x5df9,0x5e21,0x5e22, +0x5e23,0x5e20,0x5e24,0x5eb0,0x5ea4,0x5ea2,0x5e9b,0x5ea3, +0x5ea5,0x5f07,0x5f2e,0x5f56,0x5f86,0x6037,0x6039,0x6054, +0x6072,0x605e,0x6045,0x6053,0x6047,0x6049,0x605b,0x604c, +0x6040,0x6042,0x605f,0x6024,0x6044,0x6058,0x6066,0x606e, +0x6242,0x6243,0x62cf,0x630d,0x630b,0x62f5,0x630e,0x6303, +0x62eb,0x62f9,0x630f,0x630c,0x62f8,0x62f6,0x6300,0x6313, +0x6314,0x62fa,0x6315,0x62fb,0x62f0,0x6541,0x6543,0x65aa, +0x65bf,0x6636,0x6621,0x6632,0x6635,0x661c,0x6626,0x6622, +0x6633,0x662b,0x663a,0x661d,0x6634,0x6639,0x662e,0x670f, +0x6710,0x67c1,0x67f2,0x67c8,0x67ba,0x67dc,0x67bb,0x67f8, +0x67d8,0x67c0,0x67b7,0x67c5,0x67eb,0x67e4,0x67df,0x67b5, +0x67cd,0x67b3,0x67f7,0x67f6,0x67ee,0x67e3,0x67c2,0x67b9, +0x67ce,0x67e7,0x67f0,0x67b2,0x67fc,0x67c6,0x67ed,0x67cc, +0x67ae,0x67e6,0x67db,0x67fa,0x67c9,0x67ca,0x67c3,0x67ea, +0x67cb,0x6b28,0x6b82,0x6b84,0x6bb6,0x6bd6,0x6bd8,0x6be0, +0x6c20,0x6c21,0x6d28,0x6d34,0x6d2d,0x6d1f,0x6d3c,0x6d3f, +0x6d12,0x6d0a,0x6cda,0x6d33,0x6d04,0x6d19,0x6d3a,0x6d1a, +0x6d11,0x6d00,0x6d1d,0x6d42,0x6d01,0x6d18,0x6d37,0x6d03, +0x6d0f,0x6d40,0x6d07,0x6d20,0x6d2c,0x6d08,0x6d22,0x6d09, +0x6d10,0x70b7,0x709f,0x70be,0x70b1,0x70b0,0x70a1,0x70b4, +0x70b5,0x70a9,0x7241,0x7249,0x724a,0x726c,0x7270,0x7273, +0x726e,0x72ca,0x72e4,0x72e8,0x72eb,0x72df,0x72ea,0x72e6, +0x72e3,0x7385,0x73cc,0x73c2,0x73c8,0x73c5,0x73b9,0x73b6, +0x73b5,0x73b4,0x73eb,0x73bf,0x73c7,0x73be,0x73c3,0x73c6, +0x73b8,0x73cb,0x74ec,0x74ee,0x752e,0x7547,0x7548,0x75a7, +0x75aa,0x7679,0x76c4,0x7708,0x7703,0x7704,0x7705,0x770a, +0x76f7,0x76fb,0x76fa,0x77e7,0x77e8,0x7806,0x7811,0x7812, +0x7805,0x7810,0x780f,0x780e,0x7809,0x7803,0x7813,0x794a, +0x794c,0x794b,0x7945,0x7944,0x79d5,0x79cd,0x79cf,0x79d6, +0x79ce,0x7a80,0x7a7e,0x7ad1,0x7b00,0x7b01,0x7c7a,0x7c78, +0x7c79,0x7c7f,0x7c80,0x7c81,0x7d03,0x7d08,0x7d01,0x7f58, +0x7f91,0x7f8d,0x7fbe,0x8007,0x800e,0x800f,0x8014,0x8037, +0x80d8,0x80c7,0x80e0,0x80d1,0x80c8,0x80c2,0x80d0,0x80c5, +0x80e3,0x80d9,0x80dc,0x80ca,0x80d5,0x80c9,0x80cf,0x80d7, +0x80e6,0x80cd,0x81ff,0x8221,0x8294,0x82d9,0x82fe,0x82f9, +0x8307,0x82e8,0x8300,0x82d5,0x833a,0x82eb,0x82d6,0x82f4, +0x82ec,0x82e1,0x82f2,0x82f5,0x830c,0x82fb,0x82f6,0x82f0, +0x82ea,0x82e4,0x82e0,0x82fa,0x82f3,0x82ed,0x8677,0x8674, +0x867c,0x8673,0x8841,0x884e,0x8867,0x886a,0x8869,0x89d3, +0x8a04,0x8a07,0x8d72,0x8fe3,0x8fe1,0x8fee,0x8fe0,0x90f1, +0x90bd,0x90bf,0x90d5,0x90c5,0x90be,0x90c7,0x90cb,0x90c8, +0x91d4,0x91d3,0x9654,0x964f,0x9651,0x9653,0x964a,0x964e, +0x501e,0x5005,0x5007,0x5013,0x5022,0x5030,0x501b,0x4ff5, +0x4ff4,0x5033,0x5037,0x502c,0x4ff6,0x4ff7,0x5017,0x501c, +0x5020,0x5027,0x5035,0x502f,0x5031,0x500e,0x515a,0x5194, +0x5193,0x51ca,0x51c4,0x51c5,0x51c8,0x51ce,0x5261,0x525a, +0x5252,0x525e,0x525f,0x5255,0x5262,0x52cd,0x530e,0x539e, +0x5526,0x54e2,0x5517,0x5512,0x54e7,0x54f3,0x54e4,0x551a, +0x54ff,0x5504,0x5508,0x54eb,0x5511,0x5505,0x54f1,0x550a, +0x54fb,0x54f7,0x54f8,0x54e0,0x550e,0x5503,0x550b,0x5701, +0x5702,0x57cc,0x5832,0x57d5,0x57d2,0x57ba,0x57c6,0x57bd, +0x57bc,0x57b8,0x57b6,0x57bf,0x57c7,0x57d0,0x57b9,0x57c1, +0x590e,0x594a,0x5a19,0x5a16,0x5a2d,0x5a2e,0x5a15,0x5a0f, +0x5a17,0x5a0a,0x5a1e,0x5a33,0x5b6c,0x5ba7,0x5bad,0x5bac, +0x5c03,0x5c56,0x5c54,0x5cec,0x5cff,0x5cee,0x5cf1,0x5cf7, +0x5d00,0x5cf9,0x5e29,0x5e28,0x5ea8,0x5eae,0x5eaa,0x5eac, +0x5f33,0x5f30,0x5f67,0x605d,0x605a,0x6067,0x6041,0x60a2, +0x6088,0x6080,0x6092,0x6081,0x609d,0x6083,0x6095,0x609b, +0x6097,0x6087,0x609c,0x608e,0x6219,0x6246,0x62f2,0x6310, +0x6356,0x632c,0x6344,0x6345,0x6336,0x6343,0x63e4,0x6339, +0x634b,0x634a,0x633c,0x6329,0x6341,0x6334,0x6358,0x6354, +0x6359,0x632d,0x6347,0x6333,0x635a,0x6351,0x6338,0x6357, +0x6340,0x6348,0x654a,0x6546,0x65c6,0x65c3,0x65c4,0x65c2, +0x664a,0x665f,0x6647,0x6651,0x6712,0x6713,0x681f,0x681a, +0x6849,0x6832,0x6833,0x683b,0x684b,0x684f,0x6816,0x6831, +0x681c,0x6835,0x682b,0x682d,0x682f,0x684e,0x6844,0x6834, +0x681d,0x6812,0x6814,0x6826,0x6828,0x682e,0x684d,0x683a, +0x6825,0x6820,0x6b2c,0x6b2f,0x6b2d,0x6b31,0x6b34,0x6b6d, +0x8082,0x6b88,0x6be6,0x6be4,0x6be8,0x6be3,0x6be2,0x6be7, +0x6c25,0x6d7a,0x6d63,0x6d64,0x6d76,0x6d0d,0x6d61,0x6d92, +0x6d58,0x6d62,0x6d6d,0x6d6f,0x6d91,0x6d8d,0x6def,0x6d7f, +0x6d86,0x6d5e,0x6d67,0x6d60,0x6d97,0x6d70,0x6d7c,0x6d5f, +0x6d82,0x6d98,0x6d2f,0x6d68,0x6d8b,0x6d7e,0x6d80,0x6d84, +0x6d16,0x6d83,0x6d7b,0x6d7d,0x6d75,0x6d90,0x70dc,0x70d3, +0x70d1,0x70dd,0x70cb,0x7f39,0x70e2,0x70d7,0x70d2,0x70de, +0x70e0,0x70d4,0x70cd,0x70c5,0x70c6,0x70c7,0x70da,0x70ce, +0x70e1,0x7242,0x7278,0x7277,0x7276,0x7300,0x72fa,0x72f4, +0x72fe,0x72f6,0x72f3,0x72fb,0x7301,0x73d3,0x73d9,0x73e5, +0x73d6,0x73bc,0x73e7,0x73e3,0x73e9,0x73dc,0x73d2,0x73db, +0x73d4,0x73dd,0x73da,0x73d7,0x73d8,0x73e8,0x74de,0x74df, +0x74f4,0x74f5,0x7521,0x755b,0x755f,0x75b0,0x75c1,0x75bb, +0x75c4,0x75c0,0x75bf,0x75b6,0x75ba,0x768a,0x76c9,0x771d, +0x771b,0x7710,0x7713,0x7712,0x7723,0x7711,0x7715,0x7719, +0x771a,0x7722,0x7727,0x7823,0x782c,0x7822,0x7835,0x782f, +0x7828,0x782e,0x782b,0x7821,0x7829,0x7833,0x782a,0x7831, +0x7954,0x795b,0x794f,0x795c,0x7953,0x7952,0x7951,0x79eb, +0x79ec,0x79e0,0x79ee,0x79ed,0x79ea,0x79dc,0x79de,0x79dd, +0x7a86,0x7a89,0x7a85,0x7a8b,0x7a8c,0x7a8a,0x7a87,0x7ad8, +0x7b10,0x7b04,0x7b13,0x7b05,0x7b0f,0x7b08,0x7b0a,0x7b0e, +0x7b09,0x7b12,0x7c84,0x7c91,0x7c8a,0x7c8c,0x7c88,0x7c8d, +0x7c85,0x7d1e,0x7d1d,0x7d11,0x7d0e,0x7d18,0x7d16,0x7d13, +0x7d1f,0x7d12,0x7d0f,0x7d0c,0x7f5c,0x7f61,0x7f5e,0x7f60, +0x7f5d,0x7f5b,0x7f96,0x7f92,0x7fc3,0x7fc2,0x7fc0,0x8016, +0x803e,0x8039,0x80fa,0x80f2,0x80f9,0x80f5,0x8101,0x80fb, +0x8100,0x8201,0x822f,0x8225,0x8333,0x832d,0x8344,0x8319, +0x8351,0x8325,0x8356,0x833f,0x8341,0x8326,0x831c,0x8322, +0x8342,0x834e,0x831b,0x832a,0x8308,0x833c,0x834d,0x8316, +0x8324,0x8320,0x8337,0x832f,0x8329,0x8347,0x8345,0x834c, +0x8353,0x831e,0x832c,0x834b,0x8327,0x8348,0x8653,0x8652, +0x86a2,0x86a8,0x8696,0x868d,0x8691,0x869e,0x8687,0x8697, +0x8686,0x868b,0x869a,0x8685,0x86a5,0x8699,0x86a1,0x86a7, +0x8695,0x8698,0x868e,0x869d,0x8690,0x8694,0x8843,0x8844, +0x886d,0x8875,0x8876,0x8872,0x8880,0x8871,0x887f,0x886f, +0x8883,0x887e,0x8874,0x887c,0x8a12,0x8c47,0x8c57,0x8c7b, +0x8ca4,0x8ca3,0x8d76,0x8d78,0x8db5,0x8db7,0x8db6,0x8ed1, +0x8ed3,0x8ffe,0x8ff5,0x9002,0x8fff,0x8ffb,0x9004,0x8ffc, +0x8ff6,0x90d6,0x90e0,0x90d9,0x90da,0x90e3,0x90df,0x90e5, +0x90d8,0x90db,0x90d7,0x90dc,0x90e4,0x9150,0x914e,0x914f, +0x91d5,0x91e2,0x91da,0x965c,0x965f,0x96bc,0x98e3,0x9adf, +0x9b2f,0x4e7f,0x5070,0x506a,0x5061,0x505e,0x5060,0x5053, +0x504b,0x505d,0x5072,0x5048,0x504d,0x5041,0x505b,0x504a, +0x5062,0x5015,0x5045,0x505f,0x5069,0x506b,0x5063,0x5064, +0x5046,0x5040,0x506e,0x5073,0x5057,0x5051,0x51d0,0x526b, +0x526d,0x526c,0x526e,0x52d6,0x52d3,0x532d,0x539c,0x5575, +0x5576,0x553c,0x554d,0x5550,0x5534,0x552a,0x5551,0x5562, +0x5536,0x5535,0x5530,0x5552,0x5545,0x550c,0x5532,0x5565, +0x554e,0x5539,0x5548,0x552d,0x553b,0x5540,0x554b,0x570a, +0x5707,0x57fb,0x5814,0x57e2,0x57f6,0x57dc,0x57f4,0x5800, +0x57ed,0x57fd,0x5808,0x57f8,0x580b,0x57f3,0x57cf,0x5807, +0x57ee,0x57e3,0x57f2,0x57e5,0x57ec,0x57e1,0x580e,0x57fc, +0x5810,0x57e7,0x5801,0x580c,0x57f1,0x57e9,0x57f0,0x580d, +0x5804,0x595c,0x5a60,0x5a58,0x5a55,0x5a67,0x5a5e,0x5a38, +0x5a35,0x5a6d,0x5a50,0x5a5f,0x5a65,0x5a6c,0x5a53,0x5a64, +0x5a57,0x5a43,0x5a5d,0x5a52,0x5a44,0x5a5b,0x5a48,0x5a8e, +0x5a3e,0x5a4d,0x5a39,0x5a4c,0x5a70,0x5a69,0x5a47,0x5a51, +0x5a56,0x5a42,0x5a5c,0x5b72,0x5b6e,0x5bc1,0x5bc0,0x5c59, +0x5d1e,0x5d0b,0x5d1d,0x5d1a,0x5d20,0x5d0c,0x5d28,0x5d0d, +0x5d26,0x5d25,0x5d0f,0x5d30,0x5d12,0x5d23,0x5d1f,0x5d2e, +0x5e3e,0x5e34,0x5eb1,0x5eb4,0x5eb9,0x5eb2,0x5eb3,0x5f36, +0x5f38,0x5f9b,0x5f96,0x5f9f,0x608a,0x6090,0x6086,0x60be, +0x60b0,0x60ba,0x60d3,0x60d4,0x60cf,0x60e4,0x60d9,0x60dd, +0x60c8,0x60b1,0x60db,0x60b7,0x60ca,0x60bf,0x60c3,0x60cd, +0x60c0,0x6332,0x6365,0x638a,0x6382,0x637d,0x63bd,0x639e, +0x63ad,0x639d,0x6397,0x63ab,0x638e,0x636f,0x6387,0x6390, +0x636e,0x63af,0x6375,0x639c,0x636d,0x63ae,0x637c,0x63a4, +0x633b,0x639f,0x6378,0x6385,0x6381,0x6391,0x638d,0x6370, +0x6553,0x65cd,0x6665,0x6661,0x665b,0x6659,0x665c,0x6662, +0x6718,0x6879,0x6887,0x6890,0x689c,0x686d,0x686e,0x68ae, +0x68ab,0x6956,0x686f,0x68a3,0x68ac,0x68a9,0x6875,0x6874, +0x68b2,0x688f,0x6877,0x6892,0x687c,0x686b,0x6872,0x68aa, +0x6880,0x6871,0x687e,0x689b,0x6896,0x688b,0x68a0,0x6889, +0x68a4,0x6878,0x687b,0x6891,0x688c,0x688a,0x687d,0x6b36, +0x6b33,0x6b37,0x6b38,0x6b91,0x6b8f,0x6b8d,0x6b8e,0x6b8c, +0x6c2a,0x6dc0,0x6dab,0x6db4,0x6db3,0x6e74,0x6dac,0x6de9, +0x6de2,0x6db7,0x6df6,0x6dd4,0x6e00,0x6dc8,0x6de0,0x6ddf, +0x6dd6,0x6dbe,0x6de5,0x6ddc,0x6ddd,0x6ddb,0x6df4,0x6dca, +0x6dbd,0x6ded,0x6df0,0x6dba,0x6dd5,0x6dc2,0x6dcf,0x6dc9, +0x6dd0,0x6df2,0x6dd3,0x6dfd,0x6dd7,0x6dcd,0x6de3,0x6dbb, +0x70fa,0x710d,0x70f7,0x7117,0x70f4,0x710c,0x70f0,0x7104, +0x70f3,0x7110,0x70fc,0x70ff,0x7106,0x7113,0x7100,0x70f8, +0x70f6,0x710b,0x7102,0x710e,0x727e,0x727b,0x727c,0x727f, +0x731d,0x7317,0x7307,0x7311,0x7318,0x730a,0x7308,0x72ff, +0x730f,0x731e,0x7388,0x73f6,0x73f8,0x73f5,0x7404,0x7401, +0x73fd,0x7407,0x7400,0x73fa,0x73fc,0x73ff,0x740c,0x740b, +0x73f4,0x7408,0x7564,0x7563,0x75ce,0x75d2,0x75cf,0x75cb, +0x75cc,0x75d1,0x75d0,0x768f,0x7689,0x76d3,0x7739,0x772f, +0x772d,0x7731,0x7732,0x7734,0x7733,0x773d,0x7725,0x773b, +0x7735,0x7848,0x7852,0x7849,0x784d,0x784a,0x784c,0x7826, +0x7845,0x7850,0x7964,0x7967,0x7969,0x796a,0x7963,0x796b, +0x7961,0x79bb,0x79fa,0x79f8,0x79f6,0x79f7,0x7a8f,0x7a94, +0x7a90,0x7b35,0x7b3b,0x7b34,0x7b25,0x7b30,0x7b22,0x7b24, +0x7b33,0x7b18,0x7b2a,0x7b1d,0x7b31,0x7b2b,0x7b2d,0x7b2f, +0x7b32,0x7b38,0x7b1a,0x7b23,0x7c94,0x7c98,0x7c96,0x7ca3, +0x7d35,0x7d3d,0x7d38,0x7d36,0x7d3a,0x7d45,0x7d2c,0x7d29, +0x7d41,0x7d47,0x7d3e,0x7d3f,0x7d4a,0x7d3b,0x7d28,0x7f63, +0x7f95,0x7f9c,0x7f9d,0x7f9b,0x7fca,0x7fcb,0x7fcd,0x7fd0, +0x7fd1,0x7fc7,0x7fcf,0x7fc9,0x801f,0x801e,0x801b,0x8047, +0x8043,0x8048,0x8118,0x8125,0x8119,0x811b,0x812d,0x811f, +0x812c,0x811e,0x8121,0x8115,0x8127,0x811d,0x8122,0x8211, +0x8238,0x8233,0x823a,0x8234,0x8232,0x8274,0x8390,0x83a3, +0x83a8,0x838d,0x837a,0x8373,0x83a4,0x8374,0x838f,0x8381, +0x8395,0x8399,0x8375,0x8394,0x83a9,0x837d,0x8383,0x838c, +0x839d,0x839b,0x83aa,0x838b,0x837e,0x83a5,0x83af,0x8388, +0x8397,0x83b0,0x837f,0x83a6,0x8387,0x83ae,0x8376,0x8659, +0x8656,0x86bf,0x86b7,0x86c2,0x86c1,0x86c5,0x86ba,0x86b0, +0x86c8,0x86b9,0x86b3,0x86b8,0x86cc,0x86b4,0x86bb,0x86bc, +0x86c3,0x86bd,0x86be,0x8852,0x8889,0x8895,0x88a8,0x88a2, +0x88aa,0x889a,0x8891,0x88a1,0x889f,0x8898,0x88a7,0x8899, +0x889b,0x8897,0x88a4,0x88ac,0x888c,0x8893,0x888e,0x8982, +0x89d6,0x89d9,0x89d5,0x8a30,0x8a27,0x8a2c,0x8a1e,0x8c39, +0x8c3b,0x8c5c,0x8c5d,0x8c7d,0x8ca5,0x8d7d,0x8d7b,0x8d79, +0x8dbc,0x8dc2,0x8db9,0x8dbf,0x8dc1,0x8ed8,0x8ede,0x8edd, +0x8edc,0x8ed7,0x8ee0,0x8ee1,0x9024,0x900b,0x9011,0x901c, +0x900c,0x9021,0x90ef,0x90ea,0x90f0,0x90f4,0x90f2,0x90f3, +0x90d4,0x90eb,0x90ec,0x90e9,0x9156,0x9158,0x915a,0x9153, +0x9155,0x91ec,0x91f4,0x91f1,0x91f3,0x91f8,0x91e4,0x91f9, +0x91ea,0x91eb,0x91f7,0x91e8,0x91ee,0x957a,0x9586,0x9588, +0x967c,0x966d,0x966b,0x9671,0x966f,0x96bf,0x976a,0x9804, +0x98e5,0x9997,0x509b,0x5095,0x5094,0x509e,0x508b,0x50a3, +0x5083,0x508c,0x508e,0x509d,0x5068,0x509c,0x5092,0x5082, +0x5087,0x515f,0x51d4,0x5312,0x5311,0x53a4,0x53a7,0x5591, +0x55a8,0x55a5,0x55ad,0x5577,0x5645,0x55a2,0x5593,0x5588, +0x558f,0x55b5,0x5581,0x55a3,0x5592,0x55a4,0x557d,0x558c, +0x55a6,0x557f,0x5595,0x55a1,0x558e,0x570c,0x5829,0x5837, +0x5819,0x581e,0x5827,0x5823,0x5828,0x57f5,0x5848,0x5825, +0x581c,0x581b,0x5833,0x583f,0x5836,0x582e,0x5839,0x5838, +0x582d,0x582c,0x583b,0x5961,0x5aaf,0x5a94,0x5a9f,0x5a7a, +0x5aa2,0x5a9e,0x5a78,0x5aa6,0x5a7c,0x5aa5,0x5aac,0x5a95, +0x5aae,0x5a37,0x5a84,0x5a8a,0x5a97,0x5a83,0x5a8b,0x5aa9, +0x5a7b,0x5a7d,0x5a8c,0x5a9c,0x5a8f,0x5a93,0x5a9d,0x5bea, +0x5bcd,0x5bcb,0x5bd4,0x5bd1,0x5bca,0x5bce,0x5c0c,0x5c30, +0x5d37,0x5d43,0x5d6b,0x5d41,0x5d4b,0x5d3f,0x5d35,0x5d51, +0x5d4e,0x5d55,0x5d33,0x5d3a,0x5d52,0x5d3d,0x5d31,0x5d59, +0x5d42,0x5d39,0x5d49,0x5d38,0x5d3c,0x5d32,0x5d36,0x5d40, +0x5d45,0x5e44,0x5e41,0x5f58,0x5fa6,0x5fa5,0x5fab,0x60c9, +0x60b9,0x60cc,0x60e2,0x60ce,0x60c4,0x6114,0x60f2,0x610a, +0x6116,0x6105,0x60f5,0x6113,0x60f8,0x60fc,0x60fe,0x60c1, +0x6103,0x6118,0x611d,0x6110,0x60ff,0x6104,0x610b,0x624a, +0x6394,0x63b1,0x63b0,0x63ce,0x63e5,0x63e8,0x63ef,0x63c3, +0x649d,0x63f3,0x63ca,0x63e0,0x63f6,0x63d5,0x63f2,0x63f5, +0x6461,0x63df,0x63be,0x63dd,0x63dc,0x63c4,0x63d8,0x63d3, +0x63c2,0x63c7,0x63cc,0x63cb,0x63c8,0x63f0,0x63d7,0x63d9, +0x6532,0x6567,0x656a,0x6564,0x655c,0x6568,0x6565,0x658c, +0x659d,0x659e,0x65ae,0x65d0,0x65d2,0x667c,0x666c,0x667b, +0x6680,0x6671,0x6679,0x666a,0x6672,0x6701,0x690c,0x68d3, +0x6904,0x68dc,0x692a,0x68ec,0x68ea,0x68f1,0x690f,0x68d6, +0x68f7,0x68eb,0x68e4,0x68f6,0x6913,0x6910,0x68f3,0x68e1, +0x6907,0x68cc,0x6908,0x6970,0x68b4,0x6911,0x68ef,0x68c6, +0x6914,0x68f8,0x68d0,0x68fd,0x68fc,0x68e8,0x690b,0x690a, +0x6917,0x68ce,0x68c8,0x68dd,0x68de,0x68e6,0x68f4,0x68d1, +0x6906,0x68d4,0x68e9,0x6915,0x6925,0x68c7,0x6b39,0x6b3b, +0x6b3f,0x6b3c,0x6b94,0x6b97,0x6b99,0x6b95,0x6bbd,0x6bf0, +0x6bf2,0x6bf3,0x6c30,0x6dfc,0x6e46,0x6e47,0x6e1f,0x6e49, +0x6e88,0x6e3c,0x6e3d,0x6e45,0x6e62,0x6e2b,0x6e3f,0x6e41, +0x6e5d,0x6e73,0x6e1c,0x6e33,0x6e4b,0x6e40,0x6e51,0x6e3b, +0x6e03,0x6e2e,0x6e5e,0x6e68,0x6e5c,0x6e61,0x6e31,0x6e28, +0x6e60,0x6e71,0x6e6b,0x6e39,0x6e22,0x6e30,0x6e53,0x6e65, +0x6e27,0x6e78,0x6e64,0x6e77,0x6e55,0x6e79,0x6e52,0x6e66, +0x6e35,0x6e36,0x6e5a,0x7120,0x711e,0x712f,0x70fb,0x712e, +0x7131,0x7123,0x7125,0x7122,0x7132,0x711f,0x7128,0x713a, +0x711b,0x724b,0x725a,0x7288,0x7289,0x7286,0x7285,0x728b, +0x7312,0x730b,0x7330,0x7322,0x7331,0x7333,0x7327,0x7332, +0x732d,0x7326,0x7323,0x7335,0x730c,0x742e,0x742c,0x7430, +0x742b,0x7416,0x741a,0x7421,0x742d,0x7431,0x7424,0x7423, +0x741d,0x7429,0x7420,0x7432,0x74fb,0x752f,0x756f,0x756c, +0x75e7,0x75da,0x75e1,0x75e6,0x75dd,0x75df,0x75e4,0x75d7, +0x7695,0x7692,0x76da,0x7746,0x7747,0x7744,0x774d,0x7745, +0x774a,0x774e,0x774b,0x774c,0x77de,0x77ec,0x7860,0x7864, +0x7865,0x785c,0x786d,0x7871,0x786a,0x786e,0x7870,0x7869, +0x7868,0x785e,0x7862,0x7974,0x7973,0x7972,0x7970,0x7a02, +0x7a0a,0x7a03,0x7a0c,0x7a04,0x7a99,0x7ae6,0x7ae4,0x7b4a, +0x7b47,0x7b44,0x7b48,0x7b4c,0x7b4e,0x7b40,0x7b58,0x7b45, +0x7ca2,0x7c9e,0x7ca8,0x7ca1,0x7d58,0x7d6f,0x7d63,0x7d53, +0x7d56,0x7d67,0x7d6a,0x7d4f,0x7d6d,0x7d5c,0x7d6b,0x7d52, +0x7d54,0x7d69,0x7d51,0x7d5f,0x7d4e,0x7f3e,0x7f3f,0x7f65, +0x7f66,0x7fa2,0x7fa0,0x7fa1,0x7fd7,0x8051,0x804f,0x8050, +0x80fe,0x80d4,0x8143,0x814a,0x8152,0x814f,0x8147,0x813d, +0x814d,0x813a,0x81e6,0x81ee,0x81f7,0x81f8,0x81f9,0x8204, +0x823c,0x823d,0x823f,0x8275,0x833b,0x83cf,0x83f9,0x8423, +0x83c0,0x83e8,0x8412,0x83e7,0x83e4,0x83fc,0x83f6,0x8410, +0x83c6,0x83c8,0x83eb,0x83e3,0x83bf,0x8401,0x83dd,0x83e5, +0x83d8,0x83ff,0x83e1,0x83cb,0x83ce,0x83d6,0x83f5,0x83c9, +0x8409,0x840f,0x83de,0x8411,0x8406,0x83c2,0x83f3,0x83d5, +0x83fa,0x83c7,0x83d1,0x83ea,0x8413,0x839a,0x83c3,0x83ec, +0x83ee,0x83c4,0x83fb,0x83d7,0x83e2,0x841b,0x83db,0x83fe, +0x86d8,0x86e2,0x86e6,0x86d3,0x86e3,0x86da,0x86ea,0x86dd, +0x86eb,0x86dc,0x86ec,0x86e9,0x86d7,0x86e8,0x86d1,0x8848, +0x8856,0x8855,0x88ba,0x88d7,0x88b9,0x88b8,0x88c0,0x88be, +0x88b6,0x88bc,0x88b7,0x88bd,0x88b2,0x8901,0x88c9,0x8995, +0x8998,0x8997,0x89dd,0x89da,0x89db,0x8a4e,0x8a4d,0x8a39, +0x8a59,0x8a40,0x8a57,0x8a58,0x8a44,0x8a45,0x8a52,0x8a48, +0x8a51,0x8a4a,0x8a4c,0x8a4f,0x8c5f,0x8c81,0x8c80,0x8cba, +0x8cbe,0x8cb0,0x8cb9,0x8cb5,0x8d84,0x8d80,0x8d89,0x8dd8, +0x8dd3,0x8dcd,0x8dc7,0x8dd6,0x8ddc,0x8dcf,0x8dd5,0x8dd9, +0x8dc8,0x8dd7,0x8dc5,0x8eef,0x8ef7,0x8efa,0x8ef9,0x8ee6, +0x8eee,0x8ee5,0x8ef5,0x8ee7,0x8ee8,0x8ef6,0x8eeb,0x8ef1, +0x8eec,0x8ef4,0x8ee9,0x902d,0x9034,0x902f,0x9106,0x912c, +0x9104,0x90ff,0x90fc,0x9108,0x90f9,0x90fb,0x9101,0x9100, +0x9107,0x9105,0x9103,0x9161,0x9164,0x915f,0x9162,0x9160, +0x9201,0x920a,0x9225,0x9203,0x921a,0x9226,0x920f,0x920c, +0x9200,0x9212,0x91ff,0x91fd,0x9206,0x9204,0x9227,0x9202, +0x921c,0x9224,0x9219,0x9217,0x9205,0x9216,0x957b,0x958d, +0x958c,0x9590,0x9687,0x967e,0x9688,0x9689,0x9683,0x9680, +0x96c2,0x96c8,0x96c3,0x96f1,0x96f0,0x976c,0x9770,0x976e, +0x9807,0x98a9,0x98eb,0x9ce6,0x9ef9,0x4e83,0x4e84,0x4eb6, +0x50bd,0x50bf,0x50c6,0x50ae,0x50c4,0x50ca,0x50b4,0x50c8, +0x50c2,0x50b0,0x50c1,0x50ba,0x50b1,0x50cb,0x50c9,0x50b6, +0x50b8,0x51d7,0x527a,0x5278,0x527b,0x527c,0x55c3,0x55db, +0x55cc,0x55d0,0x55cb,0x55ca,0x55dd,0x55c0,0x55d4,0x55c4, +0x55e9,0x55bf,0x55d2,0x558d,0x55cf,0x55d5,0x55e2,0x55d6, +0x55c8,0x55f2,0x55cd,0x55d9,0x55c2,0x5714,0x5853,0x5868, +0x5864,0x584f,0x584d,0x5849,0x586f,0x5855,0x584e,0x585d, +0x5859,0x5865,0x585b,0x583d,0x5863,0x5871,0x58fc,0x5ac7, +0x5ac4,0x5acb,0x5aba,0x5ab8,0x5ab1,0x5ab5,0x5ab0,0x5abf, +0x5ac8,0x5abb,0x5ac6,0x5ab7,0x5ac0,0x5aca,0x5ab4,0x5ab6, +0x5acd,0x5ab9,0x5a90,0x5bd6,0x5bd8,0x5bd9,0x5c1f,0x5c33, +0x5d71,0x5d63,0x5d4a,0x5d65,0x5d72,0x5d6c,0x5d5e,0x5d68, +0x5d67,0x5d62,0x5df0,0x5e4f,0x5e4e,0x5e4a,0x5e4d,0x5e4b, +0x5ec5,0x5ecc,0x5ec6,0x5ecb,0x5ec7,0x5f40,0x5faf,0x5fad, +0x60f7,0x6149,0x614a,0x612b,0x6145,0x6136,0x6132,0x612e, +0x6146,0x612f,0x614f,0x6129,0x6140,0x6220,0x9168,0x6223, +0x6225,0x6224,0x63c5,0x63f1,0x63eb,0x6410,0x6412,0x6409, +0x6420,0x6424,0x6433,0x6443,0x641f,0x6415,0x6418,0x6439, +0x6437,0x6422,0x6423,0x640c,0x6426,0x6430,0x6428,0x6441, +0x6435,0x642f,0x640a,0x641a,0x6440,0x6425,0x6427,0x640b, +0x63e7,0x641b,0x642e,0x6421,0x640e,0x656f,0x6592,0x65d3, +0x6686,0x668c,0x6695,0x6690,0x668b,0x668a,0x6699,0x6694, +0x6678,0x6720,0x6966,0x695f,0x6938,0x694e,0x6962,0x6971, +0x693f,0x6945,0x696a,0x6939,0x6942,0x6957,0x6959,0x697a, +0x6948,0x6949,0x6935,0x696c,0x6933,0x693d,0x6965,0x68f0, +0x6978,0x6934,0x6969,0x6940,0x696f,0x6944,0x6976,0x6958, +0x6941,0x6974,0x694c,0x693b,0x694b,0x6937,0x695c,0x694f, +0x6951,0x6932,0x6952,0x692f,0x697b,0x693c,0x6b46,0x6b45, +0x6b43,0x6b42,0x6b48,0x6b41,0x6b9b,0x6bfb,0x6bfc,0x6bf9, +0x6bf7,0x6bf8,0x6e9b,0x6ed6,0x6ec8,0x6e8f,0x6ec0,0x6e9f, +0x6e93,0x6e94,0x6ea0,0x6eb1,0x6eb9,0x6ec6,0x6ed2,0x6ebd, +0x6ec1,0x6e9e,0x6ec9,0x6eb7,0x6eb0,0x6ecd,0x6ea6,0x6ecf, +0x6eb2,0x6ebe,0x6ec3,0x6edc,0x6ed8,0x6e99,0x6e92,0x6e8e, +0x6e8d,0x6ea4,0x6ea1,0x6ebf,0x6eb3,0x6ed0,0x6eca,0x6e97, +0x6eae,0x6ea3,0x7147,0x7154,0x7152,0x7163,0x7160,0x7141, +0x715d,0x7162,0x7172,0x7178,0x716a,0x7161,0x7142,0x7158, +0x7143,0x714b,0x7170,0x715f,0x7150,0x7153,0x7144,0x714d, +0x715a,0x724f,0x728d,0x728c,0x7291,0x7290,0x728e,0x733c, +0x7342,0x733b,0x733a,0x7340,0x734a,0x7349,0x7444,0x744a, +0x744b,0x7452,0x7451,0x7457,0x7440,0x744f,0x7450,0x744e, +0x7442,0x7446,0x744d,0x7454,0x74e1,0x74ff,0x74fe,0x74fd, +0x751d,0x7579,0x7577,0x6983,0x75ef,0x760f,0x7603,0x75f7, +0x75fe,0x75fc,0x75f9,0x75f8,0x7610,0x75fb,0x75f6,0x75ed, +0x75f5,0x75fd,0x7699,0x76b5,0x76dd,0x7755,0x775f,0x7760, +0x7752,0x7756,0x775a,0x7769,0x7767,0x7754,0x7759,0x776d, +0x77e0,0x7887,0x789a,0x7894,0x788f,0x7884,0x7895,0x7885, +0x7886,0x78a1,0x7883,0x7879,0x7899,0x7880,0x7896,0x787b, +0x797c,0x7982,0x797d,0x7979,0x7a11,0x7a18,0x7a19,0x7a12, +0x7a17,0x7a15,0x7a22,0x7a13,0x7a1b,0x7a10,0x7aa3,0x7aa2, +0x7a9e,0x7aeb,0x7b66,0x7b64,0x7b6d,0x7b74,0x7b69,0x7b72, +0x7b65,0x7b73,0x7b71,0x7b70,0x7b61,0x7b78,0x7b76,0x7b63, +0x7cb2,0x7cb4,0x7caf,0x7d88,0x7d86,0x7d80,0x7d8d,0x7d7f, +0x7d85,0x7d7a,0x7d8e,0x7d7b,0x7d83,0x7d7c,0x7d8c,0x7d94, +0x7d84,0x7d7d,0x7d92,0x7f6d,0x7f6b,0x7f67,0x7f68,0x7f6c, +0x7fa6,0x7fa5,0x7fa7,0x7fdb,0x7fdc,0x8021,0x8164,0x8160, +0x8177,0x815c,0x8169,0x815b,0x8162,0x8172,0x6721,0x815e, +0x8176,0x8167,0x816f,0x8144,0x8161,0x821d,0x8249,0x8244, +0x8240,0x8242,0x8245,0x84f1,0x843f,0x8456,0x8476,0x8479, +0x848f,0x848d,0x8465,0x8451,0x8440,0x8486,0x8467,0x8430, +0x844d,0x847d,0x845a,0x8459,0x8474,0x8473,0x845d,0x8507, +0x845e,0x8437,0x843a,0x8434,0x847a,0x8443,0x8478,0x8432, +0x8445,0x8429,0x83d9,0x844b,0x842f,0x8442,0x842d,0x845f, +0x8470,0x8439,0x844e,0x844c,0x8452,0x846f,0x84c5,0x848e, +0x843b,0x8447,0x8436,0x8433,0x8468,0x847e,0x8444,0x842b, +0x8460,0x8454,0x846e,0x8450,0x870b,0x8704,0x86f7,0x870c, +0x86fa,0x86d6,0x86f5,0x874d,0x86f8,0x870e,0x8709,0x8701, +0x86f6,0x870d,0x8705,0x88d6,0x88cb,0x88cd,0x88ce,0x88de, +0x88db,0x88da,0x88cc,0x88d0,0x8985,0x899b,0x89df,0x89e5, +0x89e4,0x89e1,0x89e0,0x89e2,0x89dc,0x89e6,0x8a76,0x8a86, +0x8a7f,0x8a61,0x8a3f,0x8a77,0x8a82,0x8a84,0x8a75,0x8a83, +0x8a81,0x8a74,0x8a7a,0x8c3c,0x8c4b,0x8c4a,0x8c65,0x8c64, +0x8c66,0x8c86,0x8c84,0x8c85,0x8ccc,0x8d68,0x8d69,0x8d91, +0x8d8c,0x8d8e,0x8d8f,0x8d8d,0x8d93,0x8d94,0x8d90,0x8d92, +0x8df0,0x8de0,0x8dec,0x8df1,0x8dee,0x8dd0,0x8de9,0x8de3, +0x8de2,0x8de7,0x8df2,0x8deb,0x8df4,0x8f06,0x8eff,0x8f01, +0x8f00,0x8f05,0x8f07,0x8f08,0x8f02,0x8f0b,0x9052,0x903f, +0x9044,0x9049,0x903d,0x9110,0x910d,0x910f,0x9111,0x9116, +0x9114,0x910b,0x910e,0x916e,0x916f,0x9248,0x9252,0x9230, +0x923a,0x9266,0x9233,0x9265,0x925e,0x9283,0x922e,0x924a, +0x9246,0x926d,0x926c,0x924f,0x9260,0x9267,0x926f,0x9236, +0x9261,0x9270,0x9231,0x9254,0x9263,0x9250,0x9272,0x924e, +0x9253,0x924c,0x9256,0x9232,0x959f,0x959c,0x959e,0x959b, +0x9692,0x9693,0x9691,0x9697,0x96ce,0x96fa,0x96fd,0x96f8, +0x96f5,0x9773,0x9777,0x9778,0x9772,0x980f,0x980d,0x980e, +0x98ac,0x98f6,0x98f9,0x99af,0x99b2,0x99b0,0x99b5,0x9aad, +0x9aab,0x9b5b,0x9cea,0x9ced,0x9ce7,0x9e80,0x9efd,0x50e6, +0x50d4,0x50d7,0x50e8,0x50f3,0x50db,0x50ea,0x50dd,0x50e4, +0x50d3,0x50ec,0x50f0,0x50ef,0x50e3,0x50e0,0x51d8,0x5280, +0x5281,0x52e9,0x52eb,0x5330,0x53ac,0x5627,0x5615,0x560c, +0x5612,0x55fc,0x560f,0x561c,0x5601,0x5613,0x5602,0x55fa, +0x561d,0x5604,0x55ff,0x55f9,0x5889,0x587c,0x5890,0x5898, +0x5886,0x5881,0x587f,0x5874,0x588b,0x587a,0x5887,0x5891, +0x588e,0x5876,0x5882,0x5888,0x587b,0x5894,0x588f,0x58fe, +0x596b,0x5adc,0x5aee,0x5ae5,0x5ad5,0x5aea,0x5ada,0x5aed, +0x5aeb,0x5af3,0x5ae2,0x5ae0,0x5adb,0x5aec,0x5ade,0x5add, +0x5ad9,0x5ae8,0x5adf,0x5b77,0x5be0,0x5be3,0x5c63,0x5d82, +0x5d80,0x5d7d,0x5d86,0x5d7a,0x5d81,0x5d77,0x5d8a,0x5d89, +0x5d88,0x5d7e,0x5d7c,0x5d8d,0x5d79,0x5d7f,0x5e58,0x5e59, +0x5e53,0x5ed8,0x5ed1,0x5ed7,0x5ece,0x5edc,0x5ed5,0x5ed9, +0x5ed2,0x5ed4,0x5f44,0x5f43,0x5f6f,0x5fb6,0x612c,0x6128, +0x6141,0x615e,0x6171,0x6173,0x6152,0x6153,0x6172,0x616c, +0x6180,0x6174,0x6154,0x617a,0x615b,0x6165,0x613b,0x616a, +0x6161,0x6156,0x6229,0x6227,0x622b,0x642b,0x644d,0x645b, +0x645d,0x6474,0x6476,0x6472,0x6473,0x647d,0x6475,0x6466, +0x64a6,0x644e,0x6482,0x645e,0x645c,0x644b,0x6453,0x6460, +0x6450,0x647f,0x643f,0x646c,0x646b,0x6459,0x6465,0x6477, +0x6573,0x65a0,0x66a1,0x66a0,0x669f,0x6705,0x6704,0x6722, +0x69b1,0x69b6,0x69c9,0x69a0,0x69ce,0x6996,0x69b0,0x69ac, +0x69bc,0x6991,0x6999,0x698e,0x69a7,0x698d,0x69a9,0x69be, +0x69af,0x69bf,0x69c4,0x69bd,0x69a4,0x69d4,0x69b9,0x69ca, +0x699a,0x69cf,0x69b3,0x6993,0x69aa,0x69a1,0x699e,0x69d9, +0x6997,0x6990,0x69c2,0x69b5,0x69a5,0x69c6,0x6b4a,0x6b4d, +0x6b4b,0x6b9e,0x6b9f,0x6ba0,0x6bc3,0x6bc4,0x6bfe,0x6ece, +0x6ef5,0x6ef1,0x6f03,0x6f25,0x6ef8,0x6f37,0x6efb,0x6f2e, +0x6f09,0x6f4e,0x6f19,0x6f1a,0x6f27,0x6f18,0x6f3b,0x6f12, +0x6eed,0x6f0a,0x6f36,0x6f73,0x6ef9,0x6eee,0x6f2d,0x6f40, +0x6f30,0x6f3c,0x6f35,0x6eeb,0x6f07,0x6f0e,0x6f43,0x6f05, +0x6efd,0x6ef6,0x6f39,0x6f1c,0x6efc,0x6f3a,0x6f1f,0x6f0d, +0x6f1e,0x6f08,0x6f21,0x7187,0x7190,0x7189,0x7180,0x7185, +0x7182,0x718f,0x717b,0x7186,0x7181,0x7197,0x7244,0x7253, +0x7297,0x7295,0x7293,0x7343,0x734d,0x7351,0x734c,0x7462, +0x7473,0x7471,0x7475,0x7472,0x7467,0x746e,0x7500,0x7502, +0x7503,0x757d,0x7590,0x7616,0x7608,0x760c,0x7615,0x7611, +0x760a,0x7614,0x76b8,0x7781,0x777c,0x7785,0x7782,0x776e, +0x7780,0x776f,0x777e,0x7783,0x78b2,0x78aa,0x78b4,0x78ad, +0x78a8,0x787e,0x78ab,0x789e,0x78a5,0x78a0,0x78ac,0x78a2, +0x78a4,0x7998,0x798a,0x798b,0x7996,0x7995,0x7994,0x7993, +0x7997,0x7988,0x7992,0x7990,0x7a2b,0x7a4a,0x7a30,0x7a2f, +0x7a28,0x7a26,0x7aa8,0x7aab,0x7aac,0x7aee,0x7b88,0x7b9c, +0x7b8a,0x7b91,0x7b90,0x7b96,0x7b8d,0x7b8c,0x7b9b,0x7b8e, +0x7b85,0x7b98,0x5284,0x7b99,0x7ba4,0x7b82,0x7cbb,0x7cbf, +0x7cbc,0x7cba,0x7da7,0x7db7,0x7dc2,0x7da3,0x7daa,0x7dc1, +0x7dc0,0x7dc5,0x7d9d,0x7dce,0x7dc4,0x7dc6,0x7dcb,0x7dcc, +0x7daf,0x7db9,0x7d96,0x7dbc,0x7d9f,0x7da6,0x7dae,0x7da9, +0x7da1,0x7dc9,0x7f73,0x7fe2,0x7fe3,0x7fe5,0x7fde,0x8024, +0x805d,0x805c,0x8189,0x8186,0x8183,0x8187,0x818d,0x818c, +0x818b,0x8215,0x8497,0x84a4,0x84a1,0x849f,0x84ba,0x84ce, +0x84c2,0x84ac,0x84ae,0x84ab,0x84b9,0x84b4,0x84c1,0x84cd, +0x84aa,0x849a,0x84b1,0x84d0,0x849d,0x84a7,0x84bb,0x84a2, +0x8494,0x84c7,0x84cc,0x849b,0x84a9,0x84af,0x84a8,0x84d6, +0x8498,0x84b6,0x84cf,0x84a0,0x84d7,0x84d4,0x84d2,0x84db, +0x84b0,0x8491,0x8661,0x8733,0x8723,0x8728,0x876b,0x8740, +0x872e,0x871e,0x8721,0x8719,0x871b,0x8743,0x872c,0x8741, +0x873e,0x8746,0x8720,0x8732,0x872a,0x872d,0x873c,0x8712, +0x873a,0x8731,0x8735,0x8742,0x8726,0x8727,0x8738,0x8724, +0x871a,0x8730,0x8711,0x88f7,0x88e7,0x88f1,0x88f2,0x88fa, +0x88fe,0x88ee,0x88fc,0x88f6,0x88fb,0x88f0,0x88ec,0x88eb, +0x899d,0x89a1,0x899f,0x899e,0x89e9,0x89eb,0x89e8,0x8aab, +0x8a99,0x8a8b,0x8a92,0x8a8f,0x8a96,0x8c3d,0x8c68,0x8c69, +0x8cd5,0x8ccf,0x8cd7,0x8d96,0x8e09,0x8e02,0x8dff,0x8e0d, +0x8dfd,0x8e0a,0x8e03,0x8e07,0x8e06,0x8e05,0x8dfe,0x8e00, +0x8e04,0x8f10,0x8f11,0x8f0e,0x8f0d,0x9123,0x911c,0x9120, +0x9122,0x911f,0x911d,0x911a,0x9124,0x9121,0x911b,0x917a, +0x9172,0x9179,0x9173,0x92a5,0x92a4,0x9276,0x929b,0x927a, +0x92a0,0x9294,0x92aa,0x928d,0x92a6,0x929a,0x92ab,0x9279, +0x9297,0x927f,0x92a3,0x92ee,0x928e,0x9282,0x9295,0x92a2, +0x927d,0x9288,0x92a1,0x928a,0x9286,0x928c,0x9299,0x92a7, +0x927e,0x9287,0x92a9,0x929d,0x928b,0x922d,0x969e,0x96a1, +0x96ff,0x9758,0x977d,0x977a,0x977e,0x9783,0x9780,0x9782, +0x977b,0x9784,0x9781,0x977f,0x97ce,0x97cd,0x9816,0x98ad, +0x98ae,0x9902,0x9900,0x9907,0x999d,0x999c,0x99c3,0x99b9, +0x99bb,0x99ba,0x99c2,0x99bd,0x99c7,0x9ab1,0x9ae3,0x9ae7, +0x9b3e,0x9b3f,0x9b60,0x9b61,0x9b5f,0x9cf1,0x9cf2,0x9cf5, +0x9ea7,0x50ff,0x5103,0x5130,0x50f8,0x5106,0x5107,0x50f6, +0x50fe,0x510b,0x510c,0x50fd,0x510a,0x528b,0x528c,0x52f1, +0x52ef,0x5648,0x5642,0x564c,0x5635,0x5641,0x564a,0x5649, +0x5646,0x5658,0x565a,0x5640,0x5633,0x563d,0x562c,0x563e, +0x5638,0x562a,0x563a,0x571a,0x58ab,0x589d,0x58b1,0x58a0, +0x58a3,0x58af,0x58ac,0x58a5,0x58a1,0x58ff,0x5aff,0x5af4, +0x5afd,0x5af7,0x5af6,0x5b03,0x5af8,0x5b02,0x5af9,0x5b01, +0x5b07,0x5b05,0x5b0f,0x5c67,0x5d99,0x5d97,0x5d9f,0x5d92, +0x5da2,0x5d93,0x5d95,0x5da0,0x5d9c,0x5da1,0x5d9a,0x5d9e, +0x5e69,0x5e5d,0x5e60,0x5e5c,0x7df3,0x5edb,0x5ede,0x5ee1, +0x5f49,0x5fb2,0x618b,0x6183,0x6179,0x61b1,0x61b0,0x61a2, +0x6189,0x619b,0x6193,0x61af,0x61ad,0x619f,0x6192,0x61aa, +0x61a1,0x618d,0x6166,0x61b3,0x622d,0x646e,0x6470,0x6496, +0x64a0,0x6485,0x6497,0x649c,0x648f,0x648b,0x648a,0x648c, +0x64a3,0x649f,0x6468,0x64b1,0x6498,0x6576,0x657a,0x6579, +0x657b,0x65b2,0x65b3,0x66b5,0x66b0,0x66a9,0x66b2,0x66b7, +0x66aa,0x66af,0x6a00,0x6a06,0x6a17,0x69e5,0x69f8,0x6a15, +0x69f1,0x69e4,0x6a20,0x69ff,0x69ec,0x69e2,0x6a1b,0x6a1d, +0x69fe,0x6a27,0x69f2,0x69ee,0x6a14,0x69f7,0x69e7,0x6a40, +0x6a08,0x69e6,0x69fb,0x6a0d,0x69fc,0x69eb,0x6a09,0x6a04, +0x6a18,0x6a25,0x6a0f,0x69f6,0x6a26,0x6a07,0x69f4,0x6a16, +0x6b51,0x6ba5,0x6ba3,0x6ba2,0x6ba6,0x6c01,0x6c00,0x6bff, +0x6c02,0x6f41,0x6f26,0x6f7e,0x6f87,0x6fc6,0x6f92,0x6f8d, +0x6f89,0x6f8c,0x6f62,0x6f4f,0x6f85,0x6f5a,0x6f96,0x6f76, +0x6f6c,0x6f82,0x6f55,0x6f72,0x6f52,0x6f50,0x6f57,0x6f94, +0x6f93,0x6f5d,0x6f00,0x6f61,0x6f6b,0x6f7d,0x6f67,0x6f90, +0x6f53,0x6f8b,0x6f69,0x6f7f,0x6f95,0x6f63,0x6f77,0x6f6a, +0x6f7b,0x71b2,0x71af,0x719b,0x71b0,0x71a0,0x719a,0x71a9, +0x71b5,0x719d,0x71a5,0x719e,0x71a4,0x71a1,0x71aa,0x719c, +0x71a7,0x71b3,0x7298,0x729a,0x7358,0x7352,0x735e,0x735f, +0x7360,0x735d,0x735b,0x7361,0x735a,0x7359,0x7362,0x7487, +0x7489,0x748a,0x7486,0x7481,0x747d,0x7485,0x7488,0x747c, +0x7479,0x7508,0x7507,0x757e,0x7625,0x761e,0x7619,0x761d, +0x761c,0x7623,0x761a,0x7628,0x761b,0x769c,0x769d,0x769e, +0x769b,0x778d,0x778f,0x7789,0x7788,0x78cd,0x78bb,0x78cf, +0x78cc,0x78d1,0x78ce,0x78d4,0x78c8,0x78c3,0x78c4,0x78c9, +0x799a,0x79a1,0x79a0,0x799c,0x79a2,0x799b,0x6b76,0x7a39, +0x7ab2,0x7ab4,0x7ab3,0x7bb7,0x7bcb,0x7bbe,0x7bac,0x7bce, +0x7baf,0x7bb9,0x7bca,0x7bb5,0x7cc5,0x7cc8,0x7ccc,0x7ccb, +0x7df7,0x7ddb,0x7dea,0x7de7,0x7dd7,0x7de1,0x7e03,0x7dfa, +0x7de6,0x7df6,0x7df1,0x7df0,0x7dee,0x7ddf,0x7f76,0x7fac, +0x7fb0,0x7fad,0x7fed,0x7feb,0x7fea,0x7fec,0x7fe6,0x7fe8, +0x8064,0x8067,0x81a3,0x819f,0x819e,0x8195,0x81a2,0x8199, +0x8197,0x8216,0x824f,0x8253,0x8252,0x8250,0x824e,0x8251, +0x8524,0x853b,0x850f,0x8500,0x8529,0x850e,0x8509,0x850d, +0x851f,0x850a,0x8527,0x851c,0x84fb,0x852b,0x84fa,0x8508, +0x850c,0x84f4,0x852a,0x84f2,0x8515,0x84f7,0x84eb,0x84f3, +0x84fc,0x8512,0x84ea,0x84e9,0x8516,0x84fe,0x8528,0x851d, +0x852e,0x8502,0x84fd,0x851e,0x84f6,0x8531,0x8526,0x84e7, +0x84e8,0x84f0,0x84ef,0x84f9,0x8518,0x8520,0x8530,0x850b, +0x8519,0x852f,0x8662,0x8756,0x8763,0x8764,0x8777,0x87e1, +0x8773,0x8758,0x8754,0x875b,0x8752,0x8761,0x875a,0x8751, +0x875e,0x876d,0x876a,0x8750,0x874e,0x875f,0x875d,0x876f, +0x876c,0x877a,0x876e,0x875c,0x8765,0x874f,0x877b,0x8775, +0x8762,0x8767,0x8769,0x885a,0x8905,0x890c,0x8914,0x890b, +0x8917,0x8918,0x8919,0x8906,0x8916,0x8911,0x890e,0x8909, +0x89a2,0x89a4,0x89a3,0x89ed,0x89f0,0x89ec,0x8acf,0x8ac6, +0x8ab8,0x8ad3,0x8ad1,0x8ad4,0x8ad5,0x8abb,0x8ad7,0x8abe, +0x8ac0,0x8ac5,0x8ad8,0x8ac3,0x8aba,0x8abd,0x8ad9,0x8c3e, +0x8c4d,0x8c8f,0x8ce5,0x8cdf,0x8cd9,0x8ce8,0x8cda,0x8cdd, +0x8ce7,0x8da0,0x8d9c,0x8da1,0x8d9b,0x8e20,0x8e23,0x8e25, +0x8e24,0x8e2e,0x8e15,0x8e1b,0x8e16,0x8e11,0x8e19,0x8e26, +0x8e27,0x8e14,0x8e12,0x8e18,0x8e13,0x8e1c,0x8e17,0x8e1a, +0x8f2c,0x8f24,0x8f18,0x8f1a,0x8f20,0x8f23,0x8f16,0x8f17, +0x9073,0x9070,0x906f,0x9067,0x906b,0x912f,0x912b,0x9129, +0x912a,0x9132,0x9126,0x912e,0x9185,0x9186,0x918a,0x9181, +0x9182,0x9184,0x9180,0x92d0,0x92c3,0x92c4,0x92c0,0x92d9, +0x92b6,0x92cf,0x92f1,0x92df,0x92d8,0x92e9,0x92d7,0x92dd, +0x92cc,0x92ef,0x92c2,0x92e8,0x92ca,0x92c8,0x92ce,0x92e6, +0x92cd,0x92d5,0x92c9,0x92e0,0x92de,0x92e7,0x92d1,0x92d3, +0x92b5,0x92e1,0x9325,0x92c6,0x92b4,0x957c,0x95ac,0x95ab, +0x95ae,0x95b0,0x96a4,0x96a2,0x96d3,0x9705,0x9708,0x9702, +0x975a,0x978a,0x978e,0x9788,0x97d0,0x97cf,0x981e,0x981d, +0x9826,0x9829,0x9828,0x9820,0x981b,0x9827,0x98b2,0x9908, +0x98fa,0x9911,0x9914,0x9916,0x9917,0x9915,0x99dc,0x99cd, +0x99cf,0x99d3,0x99d4,0x99ce,0x99c9,0x99d6,0x99d8,0x99cb, +0x99d7,0x99cc,0x9ab3,0x9aec,0x9aeb,0x9af3,0x9af2,0x9af1, +0x9b46,0x9b43,0x9b67,0x9b74,0x9b71,0x9b66,0x9b76,0x9b75, +0x9b70,0x9b68,0x9b64,0x9b6c,0x9cfc,0x9cfa,0x9cfd,0x9cff, +0x9cf7,0x9d07,0x9d00,0x9cf9,0x9cfb,0x9d08,0x9d05,0x9d04, +0x9e83,0x9ed3,0x9f0f,0x9f10,0x511c,0x5113,0x5117,0x511a, +0x5111,0x51de,0x5334,0x53e1,0x5670,0x5660,0x566e,0x5673, +0x5666,0x5663,0x566d,0x5672,0x565e,0x5677,0x571c,0x571b, +0x58c8,0x58bd,0x58c9,0x58bf,0x58ba,0x58c2,0x58bc,0x58c6, +0x5b17,0x5b19,0x5b1b,0x5b21,0x5b14,0x5b13,0x5b10,0x5b16, +0x5b28,0x5b1a,0x5b20,0x5b1e,0x5bef,0x5dac,0x5db1,0x5da9, +0x5da7,0x5db5,0x5db0,0x5dae,0x5daa,0x5da8,0x5db2,0x5dad, +0x5daf,0x5db4,0x5e67,0x5e68,0x5e66,0x5e6f,0x5ee9,0x5ee7, +0x5ee6,0x5ee8,0x5ee5,0x5f4b,0x5fbc,0x5fbb,0x619d,0x61a8, +0x6196,0x61c5,0x61b4,0x61c6,0x61c1,0x61cc,0x61ba,0x61bf, +0x61b8,0x618c,0x64d7,0x64d6,0x64d0,0x64cf,0x64c9,0x64bd, +0x6489,0x64c3,0x64db,0x64f3,0x64d9,0x6533,0x657f,0x657c, +0x65a2,0x66c8,0x66be,0x66c0,0x66ca,0x66cb,0x66cf,0x66bd, +0x66bb,0x66ba,0x66cc,0x6723,0x6a34,0x6a66,0x6a49,0x6a67, +0x6a32,0x6a68,0x6a3e,0x6a5d,0x6a6d,0x6a76,0x6a5b,0x6a51, +0x6a28,0x6a5a,0x6a3b,0x6a3f,0x6a41,0x6a6a,0x6a64,0x6a50, +0x6a4f,0x6a54,0x6a6f,0x6a69,0x6a60,0x6a3c,0x6a5e,0x6a56, +0x6a55,0x6a4d,0x6a4e,0x6a46,0x6b55,0x6b54,0x6b56,0x6ba7, +0x6baa,0x6bab,0x6bc8,0x6bc7,0x6c04,0x6c03,0x6c06,0x6fad, +0x6fcb,0x6fa3,0x6fc7,0x6fbc,0x6fce,0x6fc8,0x6f5e,0x6fc4, +0x6fbd,0x6f9e,0x6fca,0x6fa8,0x7004,0x6fa5,0x6fae,0x6fba, +0x6fac,0x6faa,0x6fcf,0x6fbf,0x6fb8,0x6fa2,0x6fc9,0x6fab, +0x6fcd,0x6faf,0x6fb2,0x6fb0,0x71c5,0x71c2,0x71bf,0x71b8, +0x71d6,0x71c0,0x71c1,0x71cb,0x71d4,0x71ca,0x71c7,0x71cf, +0x71bd,0x71d8,0x71bc,0x71c6,0x71da,0x71db,0x729d,0x729e, +0x7369,0x7366,0x7367,0x736c,0x7365,0x736b,0x736a,0x747f, +0x749a,0x74a0,0x7494,0x7492,0x7495,0x74a1,0x750b,0x7580, +0x762f,0x762d,0x7631,0x763d,0x7633,0x763c,0x7635,0x7632, +0x7630,0x76bb,0x76e6,0x779a,0x779d,0x77a1,0x779c,0x779b, +0x77a2,0x77a3,0x7795,0x7799,0x7797,0x78dd,0x78e9,0x78e5, +0x78ea,0x78de,0x78e3,0x78db,0x78e1,0x78e2,0x78ed,0x78df, +0x78e0,0x79a4,0x7a44,0x7a48,0x7a47,0x7ab6,0x7ab8,0x7ab5, +0x7ab1,0x7ab7,0x7bde,0x7be3,0x7be7,0x7bdd,0x7bd5,0x7be5, +0x7bda,0x7be8,0x7bf9,0x7bd4,0x7bea,0x7be2,0x7bdc,0x7beb, +0x7bd8,0x7bdf,0x7cd2,0x7cd4,0x7cd7,0x7cd0,0x7cd1,0x7e12, +0x7e21,0x7e17,0x7e0c,0x7e1f,0x7e20,0x7e13,0x7e0e,0x7e1c, +0x7e15,0x7e1a,0x7e22,0x7e0b,0x7e0f,0x7e16,0x7e0d,0x7e14, +0x7e25,0x7e24,0x7f43,0x7f7b,0x7f7c,0x7f7a,0x7fb1,0x7fef, +0x802a,0x8029,0x806c,0x81b1,0x81a6,0x81ae,0x81b9,0x81b5, +0x81ab,0x81b0,0x81ac,0x81b4,0x81b2,0x81b7,0x81a7,0x81f2, +0x8255,0x8256,0x8257,0x8556,0x8545,0x856b,0x854d,0x8553, +0x8561,0x8558,0x8540,0x8546,0x8564,0x8541,0x8562,0x8544, +0x8551,0x8547,0x8563,0x853e,0x855b,0x8571,0x854e,0x856e, +0x8575,0x8555,0x8567,0x8560,0x858c,0x8566,0x855d,0x8554, +0x8565,0x856c,0x8663,0x8665,0x8664,0x87a4,0x879b,0x878f, +0x8797,0x8793,0x8792,0x8788,0x8781,0x8796,0x8798,0x8779, +0x8787,0x87a3,0x8785,0x8790,0x8791,0x879d,0x8784,0x8794, +0x879c,0x879a,0x8789,0x891e,0x8926,0x8930,0x892d,0x892e, +0x8927,0x8931,0x8922,0x8929,0x8923,0x892f,0x892c,0x891f, +0x89f1,0x8ae0,0x8ae2,0x8af2,0x8af4,0x8af5,0x8add,0x8b14, +0x8ae4,0x8adf,0x8af0,0x8ac8,0x8ade,0x8ae1,0x8ae8,0x8aff, +0x8aef,0x8afb,0x8c91,0x8c92,0x8c90,0x8cf5,0x8cee,0x8cf1, +0x8cf0,0x8cf3,0x8d6c,0x8d6e,0x8da5,0x8da7,0x8e33,0x8e3e, +0x8e38,0x8e40,0x8e45,0x8e36,0x8e3c,0x8e3d,0x8e41,0x8e30, +0x8e3f,0x8ebd,0x8f36,0x8f2e,0x8f35,0x8f32,0x8f39,0x8f37, +0x8f34,0x9076,0x9079,0x907b,0x9086,0x90fa,0x9133,0x9135, +0x9136,0x9193,0x9190,0x9191,0x918d,0x918f,0x9327,0x931e, +0x9308,0x931f,0x9306,0x930f,0x937a,0x9338,0x933c,0x931b, +0x9323,0x9312,0x9301,0x9346,0x932d,0x930e,0x930d,0x92cb, +0x931d,0x92fa,0x9313,0x92f9,0x92f7,0x9334,0x9302,0x9324, +0x92ff,0x9329,0x9339,0x9335,0x932a,0x9314,0x930c,0x930b, +0x92fe,0x9309,0x9300,0x92fb,0x9316,0x95bc,0x95cd,0x95be, +0x95b9,0x95ba,0x95b6,0x95bf,0x95b5,0x95bd,0x96a9,0x96d4, +0x970b,0x9712,0x9710,0x9799,0x9797,0x9794,0x97f0,0x97f8, +0x9835,0x982f,0x9832,0x9924,0x991f,0x9927,0x9929,0x999e, +0x99ee,0x99ec,0x99e5,0x99e4,0x99f0,0x99e3,0x99ea,0x99e9, +0x99e7,0x9ab9,0x9abf,0x9ab4,0x9abb,0x9af6,0x9afa,0x9af9, +0x9af7,0x9b33,0x9b80,0x9b85,0x9b87,0x9b7c,0x9b7e,0x9b7b, +0x9b82,0x9b93,0x9b92,0x9b90,0x9b7a,0x9b95,0x9b7d,0x9b88, +0x9d25,0x9d17,0x9d20,0x9d1e,0x9d14,0x9d29,0x9d1d,0x9d18, +0x9d22,0x9d10,0x9d19,0x9d1f,0x9e88,0x9e86,0x9e87,0x9eae, +0x9ead,0x9ed5,0x9ed6,0x9efa,0x9f12,0x9f3d,0x5126,0x5125, +0x5122,0x5124,0x5120,0x5129,0x52f4,0x5693,0x568c,0x568d, +0x5686,0x5684,0x5683,0x567e,0x5682,0x567f,0x5681,0x58d6, +0x58d4,0x58cf,0x58d2,0x5b2d,0x5b25,0x5b32,0x5b23,0x5b2c, +0x5b27,0x5b26,0x5b2f,0x5b2e,0x5b7b,0x5bf1,0x5bf2,0x5db7, +0x5e6c,0x5e6a,0x5fbe,0x61c3,0x61b5,0x61bc,0x61e7,0x61e0, +0x61e5,0x61e4,0x61e8,0x61de,0x64ef,0x64e9,0x64e3,0x64eb, +0x64e4,0x64e8,0x6581,0x6580,0x65b6,0x65da,0x66d2,0x6a8d, +0x6a96,0x6a81,0x6aa5,0x6a89,0x6a9f,0x6a9b,0x6aa1,0x6a9e, +0x6a87,0x6a93,0x6a8e,0x6a95,0x6a83,0x6aa8,0x6aa4,0x6a91, +0x6a7f,0x6aa6,0x6a9a,0x6a85,0x6a8c,0x6a92,0x6b5b,0x6bad, +0x6c09,0x6fcc,0x6fa9,0x6ff4,0x6fd4,0x6fe3,0x6fdc,0x6fed, +0x6fe7,0x6fe6,0x6fde,0x6ff2,0x6fdd,0x6fe2,0x6fe8,0x71e1, +0x71f1,0x71e8,0x71f2,0x71e4,0x71f0,0x71e2,0x7373,0x736e, +0x736f,0x7497,0x74b2,0x74ab,0x7490,0x74aa,0x74ad,0x74b1, +0x74a5,0x74af,0x7510,0x7511,0x7512,0x750f,0x7584,0x7643, +0x7648,0x7649,0x7647,0x76a4,0x76e9,0x77b5,0x77ab,0x77b2, +0x77b7,0x77b6,0x77b4,0x77b1,0x77a8,0x77f0,0x78f3,0x78fd, +0x7902,0x78fb,0x78fc,0x78ff,0x78f2,0x7905,0x78f9,0x78fe, +0x7904,0x79ab,0x79a8,0x7a5c,0x7a5b,0x7a56,0x7a58,0x7a54, +0x7a5a,0x7abe,0x7ac0,0x7ac1,0x7c05,0x7c0f,0x7bf2,0x7c00, +0x7bff,0x7bfb,0x7c0e,0x7bf4,0x7c0b,0x7bf3,0x7c02,0x7c09, +0x7c03,0x7c01,0x7bf8,0x7bfd,0x7c06,0x7bf0,0x7bf1,0x7c10, +0x7c0a,0x7ce8,0x7e2d,0x7e3c,0x7e42,0x7e33,0x9848,0x7e38, +0x7e2a,0x7e49,0x7e40,0x7e47,0x7e29,0x7e4c,0x7e30,0x7e3b, +0x7e36,0x7e44,0x7e3a,0x7f45,0x7f7f,0x7f7e,0x7f7d,0x7ff4, +0x7ff2,0x802c,0x81bb,0x81c4,0x81cc,0x81ca,0x81c5,0x81c7, +0x81bc,0x81e9,0x825b,0x825a,0x825c,0x8583,0x8580,0x858f, +0x85a7,0x8595,0x85a0,0x858b,0x85a3,0x857b,0x85a4,0x859a, +0x859e,0x8577,0x857c,0x8589,0x85a1,0x857a,0x8578,0x8557, +0x858e,0x8596,0x8586,0x858d,0x8599,0x859d,0x8581,0x85a2, +0x8582,0x8588,0x8585,0x8579,0x8576,0x8598,0x8590,0x859f, +0x8668,0x87be,0x87aa,0x87ad,0x87c5,0x87b0,0x87ac,0x87b9, +0x87b5,0x87bc,0x87ae,0x87c9,0x87c3,0x87c2,0x87cc,0x87b7, +0x87af,0x87c4,0x87ca,0x87b4,0x87b6,0x87bf,0x87b8,0x87bd, +0x87de,0x87b2,0x8935,0x8933,0x893c,0x893e,0x8941,0x8952, +0x8937,0x8942,0x89ad,0x89af,0x89ae,0x89f2,0x89f3,0x8b1e, +0x8b18,0x8b16,0x8b11,0x8b05,0x8b0b,0x8b22,0x8b0f,0x8b12, +0x8b15,0x8b07,0x8b0d,0x8b08,0x8b06,0x8b1c,0x8b13,0x8b1a, +0x8c4f,0x8c70,0x8c72,0x8c71,0x8c6f,0x8c95,0x8c94,0x8cf9, +0x8d6f,0x8e4e,0x8e4d,0x8e53,0x8e50,0x8e4c,0x8e47,0x8f43, +0x8f40,0x9085,0x907e,0x9138,0x919a,0x91a2,0x919b,0x9199, +0x919f,0x91a1,0x919d,0x91a0,0x93a1,0x9383,0x93af,0x9364, +0x9356,0x9347,0x937c,0x9358,0x935c,0x9376,0x9349,0x9350, +0x9351,0x9360,0x936d,0x938f,0x934c,0x936a,0x9379,0x9357, +0x9355,0x9352,0x934f,0x9371,0x9377,0x937b,0x9361,0x935e, +0x9363,0x9367,0x934e,0x9359,0x95c7,0x95c0,0x95c9,0x95c3, +0x95c5,0x95b7,0x96ae,0x96b0,0x96ac,0x9720,0x971f,0x9718, +0x971d,0x9719,0x979a,0x97a1,0x979c,0x979e,0x979d,0x97d5, +0x97d4,0x97f1,0x9841,0x9844,0x984a,0x9849,0x9845,0x9843, +0x9925,0x992b,0x992c,0x992a,0x9933,0x9932,0x992f,0x992d, +0x9931,0x9930,0x9998,0x99a3,0x99a1,0x9a02,0x99fa,0x99f4, +0x99f7,0x99f9,0x99f8,0x99f6,0x99fb,0x99fd,0x99fe,0x99fc, +0x9a03,0x9abe,0x9afe,0x9afd,0x9b01,0x9afc,0x9b48,0x9b9a, +0x9ba8,0x9b9e,0x9b9b,0x9ba6,0x9ba1,0x9ba5,0x9ba4,0x9b86, +0x9ba2,0x9ba0,0x9baf,0x9d33,0x9d41,0x9d67,0x9d36,0x9d2e, +0x9d2f,0x9d31,0x9d38,0x9d30,0x9d45,0x9d42,0x9d43,0x9d3e, +0x9d37,0x9d40,0x9d3d,0x7ff5,0x9d2d,0x9e8a,0x9e89,0x9e8d, +0x9eb0,0x9ec8,0x9eda,0x9efb,0x9eff,0x9f24,0x9f23,0x9f22, +0x9f54,0x9fa0,0x5131,0x512d,0x512e,0x5698,0x569c,0x5697, +0x569a,0x569d,0x5699,0x5970,0x5b3c,0x5c69,0x5c6a,0x5dc0, +0x5e6d,0x5e6e,0x61d8,0x61df,0x61ed,0x61ee,0x61f1,0x61ea, +0x61f0,0x61eb,0x61d6,0x61e9,0x64ff,0x6504,0x64fd,0x64f8, +0x6501,0x6503,0x64fc,0x6594,0x65db,0x66da,0x66db,0x66d8, +0x6ac5,0x6ab9,0x6abd,0x6ae1,0x6ac6,0x6aba,0x6ab6,0x6ab7, +0x6ac7,0x6ab4,0x6aad,0x6b5e,0x6bc9,0x6c0b,0x7007,0x700c, +0x700d,0x7001,0x7005,0x7014,0x700e,0x6fff,0x7000,0x6ffb, +0x7026,0x6ffc,0x6ff7,0x700a,0x7201,0x71ff,0x71f9,0x7203, +0x71fd,0x7376,0x74b8,0x74c0,0x74b5,0x74c1,0x74be,0x74b6, +0x74bb,0x74c2,0x7514,0x7513,0x765c,0x7664,0x7659,0x7650, +0x7653,0x7657,0x765a,0x76a6,0x76bd,0x76ec,0x77c2,0x77ba, +0x790c,0x7913,0x7914,0x7909,0x7910,0x7912,0x7911,0x79ad, +0x79ac,0x7a5f,0x7c1c,0x7c29,0x7c19,0x7c20,0x7c1f,0x7c2d, +0x7c1d,0x7c26,0x7c28,0x7c22,0x7c25,0x7c30,0x7e5c,0x7e50, +0x7e56,0x7e63,0x7e58,0x7e62,0x7e5f,0x7e51,0x7e60,0x7e57, +0x7e53,0x7fb5,0x7fb3,0x7ff7,0x7ff8,0x8075,0x81d1,0x81d2, +0x81d0,0x825f,0x825e,0x85b4,0x85c6,0x85c0,0x85c3,0x85c2, +0x85b3,0x85b5,0x85bd,0x85c7,0x85c4,0x85bf,0x85cb,0x85ce, +0x85c8,0x85c5,0x85b1,0x85b6,0x85d2,0x8624,0x85b8,0x85b7, +0x85be,0x8669,0x87e7,0x87e6,0x87e2,0x87db,0x87eb,0x87ea, +0x87e5,0x87df,0x87f3,0x87e4,0x87d4,0x87dc,0x87d3,0x87ed, +0x87d8,0x87e3,0x87d7,0x87d9,0x8801,0x87f4,0x87e8,0x87dd, +0x8953,0x894b,0x894f,0x894c,0x8946,0x8950,0x8951,0x8949, +0x8b2a,0x8b27,0x8b23,0x8b33,0x8b30,0x8b35,0x8b47,0x8b2f, +0x8b3c,0x8b3e,0x8b31,0x8b25,0x8b37,0x8b26,0x8b36,0x8b2e, +0x8b24,0x8b3b,0x8b3d,0x8b3a,0x8c42,0x8c75,0x8c99,0x8c98, +0x8c97,0x8cfe,0x8d04,0x8d02,0x8d00,0x8e5c,0x8e62,0x8e60, +0x8e57,0x8e56,0x8e5e,0x8e65,0x8e67,0x8e5b,0x8e5a,0x8e61, +0x8e5d,0x8e69,0x8e54,0x8f46,0x8f47,0x8f48,0x8f4b,0x9128, +0x913a,0x913b,0x913e,0x91a8,0x91a5,0x91a7,0x91af,0x91aa, +0x93b5,0x938c,0x9392,0x93b7,0x939b,0x939d,0x9389,0x93a7, +0x938e,0x93aa,0x939e,0x93a6,0x9395,0x9388,0x9399,0x939f, +0x9380,0x938d,0x93b1,0x9391,0x93b2,0x93a4,0x93a8,0x93b4, +0x93a3,0x95d2,0x95d3,0x95d1,0x96b3,0x96d7,0x96da,0x5dc2, +0x96df,0x96d8,0x96dd,0x9723,0x9722,0x9725,0x97ac,0x97ae, +0x97a8,0x97ab,0x97a4,0x97aa,0x97a2,0x97a5,0x97d7,0x97d9, +0x97d6,0x97d8,0x97fa,0x9850,0x9851,0x9852,0x98b8,0x9941, +0x993c,0x993a,0x9a0f,0x9a0b,0x9a09,0x9a0d,0x9a04,0x9a11, +0x9a0a,0x9a05,0x9a07,0x9a06,0x9ac0,0x9adc,0x9b08,0x9b04, +0x9b05,0x9b29,0x9b35,0x9b4a,0x9b4c,0x9b4b,0x9bc7,0x9bc6, +0x9bc3,0x9bbf,0x9bc1,0x9bb5,0x9bb8,0x9bd3,0x9bb6,0x9bc4, +0x9bb9,0x9bbd,0x9d5c,0x9d53,0x9d4f,0x9d4a,0x9d5b,0x9d4b, +0x9d59,0x9d56,0x9d4c,0x9d57,0x9d52,0x9d54,0x9d5f,0x9d58, +0x9d5a,0x9e8e,0x9e8c,0x9edf,0x9f01,0x9f00,0x9f16,0x9f25, +0x9f2b,0x9f2a,0x9f29,0x9f28,0x9f4c,0x9f55,0x5134,0x5135, +0x5296,0x52f7,0x53b4,0x56ab,0x56ad,0x56a6,0x56a7,0x56aa, +0x56ac,0x58da,0x58dd,0x58db,0x5912,0x5b3d,0x5b3e,0x5b3f, +0x5dc3,0x5e70,0x5fbf,0x61fb,0x6507,0x6510,0x650d,0x6509, +0x650c,0x650e,0x6584,0x65de,0x65dd,0x66de,0x6ae7,0x6ae0, +0x6acc,0x6ad1,0x6ad9,0x6acb,0x6adf,0x6adc,0x6ad0,0x6aeb, +0x6acf,0x6acd,0x6ade,0x6b60,0x6bb0,0x6c0c,0x7019,0x7027, +0x7020,0x7016,0x702b,0x7021,0x7022,0x7023,0x7029,0x7017, +0x7024,0x701c,0x720c,0x720a,0x7207,0x7202,0x7205,0x72a5, +0x72a6,0x72a4,0x72a3,0x72a1,0x74cb,0x74c5,0x74b7,0x74c3, +0x7516,0x7660,0x77c9,0x77ca,0x77c4,0x77f1,0x791d,0x791b, +0x7921,0x791c,0x7917,0x791e,0x79b0,0x7a67,0x7a68,0x7c33, +0x7c3c,0x7c39,0x7c2c,0x7c3b,0x7cec,0x7cea,0x7e76,0x7e75, +0x7e78,0x7e70,0x7e77,0x7e6f,0x7e7a,0x7e72,0x7e74,0x7e68, +0x7f4b,0x7f4a,0x7f83,0x7f86,0x7fb7,0x7ffd,0x7ffe,0x8078, +0x81d7,0x81d5,0x820b,0x8264,0x8261,0x8263,0x85eb,0x85f1, +0x85ed,0x85d9,0x85e1,0x85e8,0x85da,0x85d7,0x85ec,0x85f2, +0x85f8,0x85d8,0x85df,0x85e3,0x85dc,0x85d1,0x85f0,0x85e6, +0x85ef,0x85de,0x85e2,0x8800,0x87fa,0x8803,0x87f6,0x87f7, +0x8809,0x880c,0x880b,0x8806,0x87fc,0x8808,0x87ff,0x880a, +0x8802,0x8962,0x895a,0x895b,0x8957,0x8961,0x895c,0x8958, +0x895d,0x8959,0x8988,0x89b7,0x89b6,0x89f6,0x8b50,0x8b48, +0x8b4a,0x8b40,0x8b53,0x8b56,0x8b54,0x8b4b,0x8b55,0x8b51, +0x8b42,0x8b52,0x8b57,0x8c43,0x8c77,0x8c76,0x8c9a,0x8d06, +0x8d07,0x8d09,0x8dac,0x8daa,0x8dad,0x8dab,0x8e6d,0x8e78, +0x8e73,0x8e6a,0x8e6f,0x8e7b,0x8ec2,0x8f52,0x8f51,0x8f4f, +0x8f50,0x8f53,0x8fb4,0x9140,0x913f,0x91b0,0x91ad,0x93de, +0x93c7,0x93cf,0x93c2,0x93da,0x93d0,0x93f9,0x93ec,0x93cc, +0x93d9,0x93a9,0x93e6,0x93ca,0x93d4,0x93ee,0x93e3,0x93d5, +0x93c4,0x93ce,0x93c0,0x93d2,0x93a5,0x93e7,0x957d,0x95da, +0x95db,0x96e1,0x9729,0x972b,0x972c,0x9728,0x9726,0x97b3, +0x97b7,0x97b6,0x97dd,0x97de,0x97df,0x985c,0x9859,0x985d, +0x9857,0x98bf,0x98bd,0x98bb,0x98be,0x9948,0x9947,0x9943, +0x99a6,0x99a7,0x9a1a,0x9a15,0x9a25,0x9a1d,0x9a24,0x9a1b, +0x9a22,0x9a20,0x9a27,0x9a23,0x9a1e,0x9a1c,0x9a14,0x9ac2, +0x9b0b,0x9b0a,0x9b0e,0x9b0c,0x9b37,0x9bea,0x9beb,0x9be0, +0x9bde,0x9be4,0x9be6,0x9be2,0x9bf0,0x9bd4,0x9bd7,0x9bec, +0x9bdc,0x9bd9,0x9be5,0x9bd5,0x9be1,0x9bda,0x9d77,0x9d81, +0x9d8a,0x9d84,0x9d88,0x9d71,0x9d80,0x9d78,0x9d86,0x9d8b, +0x9d8c,0x9d7d,0x9d6b,0x9d74,0x9d75,0x9d70,0x9d69,0x9d85, +0x9d73,0x9d7b,0x9d82,0x9d6f,0x9d79,0x9d7f,0x9d87,0x9d68, +0x9e94,0x9e91,0x9ec0,0x9efc,0x9f2d,0x9f40,0x9f41,0x9f4d, +0x9f56,0x9f57,0x9f58,0x5337,0x56b2,0x56b5,0x56b3,0x58e3, +0x5b45,0x5dc6,0x5dc7,0x5eee,0x5eef,0x5fc0,0x5fc1,0x61f9, +0x6517,0x6516,0x6515,0x6513,0x65df,0x66e8,0x66e3,0x66e4, +0x6af3,0x6af0,0x6aea,0x6ae8,0x6af9,0x6af1,0x6aee,0x6aef, +0x703c,0x7035,0x702f,0x7037,0x7034,0x7031,0x7042,0x7038, +0x703f,0x703a,0x7039,0x702a,0x7040,0x703b,0x7033,0x7041, +0x7213,0x7214,0x72a8,0x737d,0x737c,0x74ba,0x76ab,0x76aa, +0x76be,0x76ed,0x77cc,0x77ce,0x77cf,0x77cd,0x77f2,0x7925, +0x7923,0x7927,0x7928,0x7924,0x7929,0x79b2,0x7a6e,0x7a6c, +0x7a6d,0x7af7,0x7c49,0x7c48,0x7c4a,0x7c47,0x7c45,0x7cee, +0x7e7b,0x7e7e,0x7e81,0x7e80,0x7fba,0x7fff,0x8079,0x81db, +0x81d9,0x8268,0x8269,0x8622,0x85ff,0x8601,0x85fe,0x861b, +0x8600,0x85f6,0x8604,0x8609,0x8605,0x860c,0x85fd,0x8819, +0x8810,0x8811,0x8817,0x8813,0x8816,0x8963,0x8966,0x89b9, +0x89f7,0x8b60,0x8b6a,0x8b5d,0x8b68,0x8b63,0x8b65,0x8b67, +0x8b6d,0x8dae,0x8e86,0x8e88,0x8e84,0x8f59,0x8f56,0x8f57, +0x8f55,0x8f58,0x8f5a,0x908d,0x9143,0x9141,0x91b7,0x91b5, +0x91b2,0x91b3,0x940b,0x9413,0x93fb,0x9420,0x940f,0x9414, +0x93fe,0x9415,0x9410,0x9428,0x9419,0x940d,0x93f5,0x9400, +0x93f7,0x9407,0x940e,0x9416,0x9412,0x93fa,0x9409,0x93f8, +0x943c,0x940a,0x93ff,0x93fc,0x940c,0x93f6,0x9411,0x9406, +0x95de,0x95e0,0x95df,0x972e,0x972f,0x97b9,0x97bb,0x97fd, +0x97fe,0x9860,0x9862,0x9863,0x985f,0x98c1,0x98c2,0x9950, +0x994e,0x9959,0x994c,0x994b,0x9953,0x9a32,0x9a34,0x9a31, +0x9a2c,0x9a2a,0x9a36,0x9a29,0x9a2e,0x9a38,0x9a2d,0x9ac7, +0x9aca,0x9ac6,0x9b10,0x9b12,0x9b11,0x9c0b,0x9c08,0x9bf7, +0x9c05,0x9c12,0x9bf8,0x9c40,0x9c07,0x9c0e,0x9c06,0x9c17, +0x9c14,0x9c09,0x9d9f,0x9d99,0x9da4,0x9d9d,0x9d92,0x9d98, +0x9d90,0x9d9b,0x9da0,0x9d94,0x9d9c,0x9daa,0x9d97,0x9da1, +0x9d9a,0x9da2,0x9da8,0x9d9e,0x9da3,0x9dbf,0x9da9,0x9d96, +0x9da6,0x9da7,0x9e99,0x9e9b,0x9e9a,0x9ee5,0x9ee4,0x9ee7, +0x9ee6,0x9f30,0x9f2e,0x9f5b,0x9f60,0x9f5e,0x9f5d,0x9f59, +0x9f91,0x513a,0x5139,0x5298,0x5297,0x56c3,0x56bd,0x56be, +0x5b48,0x5b47,0x5dcb,0x5dcf,0x5ef1,0x61fd,0x651b,0x6b02, +0x6afc,0x6b03,0x6af8,0x6b00,0x7043,0x7044,0x704a,0x7048, +0x7049,0x7045,0x7046,0x721d,0x721a,0x7219,0x737e,0x7517, +0x766a,0x77d0,0x792d,0x7931,0x792f,0x7c54,0x7c53,0x7cf2, +0x7e8a,0x7e87,0x7e88,0x7e8b,0x7e86,0x7e8d,0x7f4d,0x7fbb, +0x8030,0x81dd,0x8618,0x862a,0x8626,0x861f,0x8623,0x861c, +0x8619,0x8627,0x862e,0x8621,0x8620,0x8629,0x861e,0x8625, +0x8829,0x881d,0x881b,0x8820,0x8824,0x881c,0x882b,0x884a, +0x896d,0x8969,0x896e,0x896b,0x89fa,0x8b79,0x8b78,0x8b45, +0x8b7a,0x8b7b,0x8d10,0x8d14,0x8daf,0x8e8e,0x8e8c,0x8f5e, +0x8f5b,0x8f5d,0x9146,0x9144,0x9145,0x91b9,0x943f,0x943b, +0x9436,0x9429,0x943d,0x9430,0x9439,0x942a,0x9437,0x942c, +0x9440,0x9431,0x95e5,0x95e4,0x95e3,0x9735,0x973a,0x97bf, +0x97e1,0x9864,0x98c9,0x98c6,0x98c0,0x9958,0x9956,0x9a39, +0x9a3d,0x9a46,0x9a44,0x9a42,0x9a41,0x9a3a,0x9a3f,0x9acd, +0x9b15,0x9b17,0x9b18,0x9b16,0x9b3a,0x9b52,0x9c2b,0x9c1d, +0x9c1c,0x9c2c,0x9c23,0x9c28,0x9c29,0x9c24,0x9c21,0x9db7, +0x9db6,0x9dbc,0x9dc1,0x9dc7,0x9dca,0x9dcf,0x9dbe,0x9dc5, +0x9dc3,0x9dbb,0x9db5,0x9dce,0x9db9,0x9dba,0x9dac,0x9dc8, +0x9db1,0x9dad,0x9dcc,0x9db3,0x9dcd,0x9db2,0x9e7a,0x9e9c, +0x9eeb,0x9eee,0x9eed,0x9f1b,0x9f18,0x9f1a,0x9f31,0x9f4e, +0x9f65,0x9f64,0x9f92,0x4eb9,0x56c6,0x56c5,0x56cb,0x5971, +0x5b4b,0x5b4c,0x5dd5,0x5dd1,0x5ef2,0x6521,0x6520,0x6526, +0x6522,0x6b0b,0x6b08,0x6b09,0x6c0d,0x7055,0x7056,0x7057, +0x7052,0x721e,0x721f,0x72a9,0x737f,0x74d8,0x74d5,0x74d9, +0x74d7,0x766d,0x76ad,0x7935,0x79b4,0x7a70,0x7a71,0x7c57, +0x7c5c,0x7c59,0x7c5b,0x7c5a,0x7cf4,0x7cf1,0x7e91,0x7f4f, +0x7f87,0x81de,0x826b,0x8634,0x8635,0x8633,0x862c,0x8632, +0x8636,0x882c,0x8828,0x8826,0x882a,0x8825,0x8971,0x89bf, +0x89be,0x89fb,0x8b7e,0x8b84,0x8b82,0x8b86,0x8b85,0x8b7f, +0x8d15,0x8e95,0x8e94,0x8e9a,0x8e92,0x8e90,0x8e96,0x8e97, +0x8f60,0x8f62,0x9147,0x944c,0x9450,0x944a,0x944b,0x944f, +0x9447,0x9445,0x9448,0x9449,0x9446,0x973f,0x97e3,0x986a, +0x9869,0x98cb,0x9954,0x995b,0x9a4e,0x9a53,0x9a54,0x9a4c, +0x9a4f,0x9a48,0x9a4a,0x9a49,0x9a52,0x9a50,0x9ad0,0x9b19, +0x9b2b,0x9b3b,0x9b56,0x9b55,0x9c46,0x9c48,0x9c3f,0x9c44, +0x9c39,0x9c33,0x9c41,0x9c3c,0x9c37,0x9c34,0x9c32,0x9c3d, +0x9c36,0x9ddb,0x9dd2,0x9dde,0x9dda,0x9dcb,0x9dd0,0x9ddc, +0x9dd1,0x9ddf,0x9de9,0x9dd9,0x9dd8,0x9dd6,0x9df5,0x9dd5, +0x9ddd,0x9eb6,0x9ef0,0x9f35,0x9f33,0x9f32,0x9f42,0x9f6b, +0x9f95,0x9fa2,0x513d,0x5299,0x58e8,0x58e7,0x5972,0x5b4d, +0x5dd8,0x882f,0x5f4f,0x6201,0x6203,0x6204,0x6529,0x6525, +0x6596,0x66eb,0x6b11,0x6b12,0x6b0f,0x6bca,0x705b,0x705a, +0x7222,0x7382,0x7381,0x7383,0x7670,0x77d4,0x7c67,0x7c66, +0x7e95,0x826c,0x863a,0x8640,0x8639,0x863c,0x8631,0x863b, +0x863e,0x8830,0x8832,0x882e,0x8833,0x8976,0x8974,0x8973, +0x89fe,0x8b8c,0x8b8e,0x8b8b,0x8b88,0x8c45,0x8d19,0x8e98, +0x8f64,0x8f63,0x91bc,0x9462,0x9455,0x945d,0x9457,0x945e, +0x97c4,0x97c5,0x9800,0x9a56,0x9a59,0x9b1e,0x9b1f,0x9b20, +0x9c52,0x9c58,0x9c50,0x9c4a,0x9c4d,0x9c4b,0x9c55,0x9c59, +0x9c4c,0x9c4e,0x9dfb,0x9df7,0x9def,0x9de3,0x9deb,0x9df8, +0x9de4,0x9df6,0x9de1,0x9dee,0x9de6,0x9df2,0x9df0,0x9de2, +0x9dec,0x9df4,0x9df3,0x9de8,0x9ded,0x9ec2,0x9ed0,0x9ef2, +0x9ef3,0x9f06,0x9f1c,0x9f38,0x9f37,0x9f36,0x9f43,0x9f4f, +0x9f71,0x9f70,0x9f6e,0x9f6f,0x56d3,0x56cd,0x5b4e,0x5c6d, +0x652d,0x66ed,0x66ee,0x6b13,0x705f,0x7061,0x705d,0x7060, +0x7223,0x74db,0x74e5,0x77d5,0x7938,0x79b7,0x79b6,0x7c6a, +0x7e97,0x7f89,0x826d,0x8643,0x8838,0x8837,0x8835,0x884b, +0x8b94,0x8b95,0x8e9e,0x8e9f,0x8ea0,0x8e9d,0x91be,0x91bd, +0x91c2,0x946b,0x9468,0x9469,0x96e5,0x9746,0x9743,0x9747, +0x97c7,0x97e5,0x9a5e,0x9ad5,0x9b59,0x9c63,0x9c67,0x9c66, +0x9c62,0x9c5e,0x9c60,0x9e02,0x9dfe,0x9e07,0x9e03,0x9e06, +0x9e05,0x9e00,0x9e01,0x9e09,0x9dff,0x9dfd,0x9e04,0x9ea0, +0x9f1e,0x9f46,0x9f74,0x9f75,0x9f76,0x56d4,0x652e,0x65b8, +0x6b18,0x6b19,0x6b17,0x6b1a,0x7062,0x7226,0x72aa,0x77d8, +0x77d9,0x7939,0x7c69,0x7c6b,0x7cf6,0x7e9a,0x7e98,0x7e9b, +0x7e99,0x81e0,0x81e1,0x8646,0x8647,0x8648,0x8979,0x897a, +0x897c,0x897b,0x89ff,0x8b98,0x8b99,0x8ea5,0x8ea4,0x8ea3, +0x946e,0x946d,0x946f,0x9471,0x9473,0x9749,0x9872,0x995f, +0x9c68,0x9c6e,0x9c6d,0x9e0b,0x9e0d,0x9e10,0x9e0f,0x9e12, +0x9e11,0x9ea1,0x9ef5,0x9f09,0x9f47,0x9f78,0x9f7b,0x9f7a, +0x9f79,0x571e,0x7066,0x7c6f,0x883c,0x8db2,0x8ea6,0x91c3, +0x9474,0x9478,0x9476,0x9475,0x9a60,0x9b2e,0x9c74,0x9c73, +0x9c71,0x9c75,0x9e14,0x9e13,0x9ef6,0x9f0a,0x9fa4,0x7068, +0x7065,0x7cf7,0x866a,0x883e,0x883d,0x883f,0x8b9e,0x8c9c, +0x8ea9,0x8ec9,0x974b,0x9873,0x9874,0x98cc,0x9961,0x99ab, +0x9a64,0x9a66,0x9a67,0x9b24,0x9e15,0x9e17,0x9f48,0x6207, +0x6b1e,0x7227,0x864c,0x8ea8,0x9482,0x9480,0x9481,0x9a69, +0x9a68,0x9e19,0x864b,0x8b9f,0x9483,0x9c79,0x9eb7,0x7675, +0x9a6b,0x9c7a,0x9e1d,0x7069,0x706a,0x7229,0x9ea4,0x9f7e, +0x9f49,0x9f98}; + +static const int cns11643_2_ucs_table_size = (sizeof (cns11643_2_ucs_table) / sizeof (unsigned short)); + +static const unsigned short cns11643_14_ucs_table[] = { +0x4e28,0x4e36,0x4e3f,0x4e85,0x4e05,0x4e04,0x5182,0x5196, +0x5338,0x5369,0x53b6,0x4e2a,0x4e87,0x4e49,0x51e2,0x4e46, +0x4e8f,0x4ebc,0x4ebe,0x5166,0x51e3,0x5204,0x529c,0x0000, +0x5902,0x590a,0x5b80,0x5ddb,0x5e7a,0x5e7f,0x5ef4,0x5f50, +0x5f51,0x5f61,0x961d,0x0000,0x4e63,0x4e62,0x4ea3,0x5185, +0x4ec5,0x4ecf,0x4ece,0x4ecc,0x5184,0x5186,0x0000,0x0000, +0x51e4,0x5205,0x529e,0x529d,0x52fd,0x5300,0x533a,0x0000, +0x5346,0x535d,0x5386,0x53b7,0x0000,0x53cc,0x0000,0x53ce, +0x5721,0x0000,0x5e00,0x5f0c,0x6237,0x6238,0x6534,0x6535, +0x65e0,0x0000,0x738d,0x4e97,0x4ee0,0x0000,0x0000,0x4ee7, +0x0000,0x4ee6,0x0000,0x0000,0x0000,0x0000,0x56d8,0x518b, +0x518c,0x5199,0x51e5,0x0000,0x520b,0x0000,0x0000,0x5304, +0x5303,0x5307,0x0000,0x531e,0x535f,0x536d,0x5389,0x53ba, +0x53d0,0x0000,0x53f6,0x53f7,0x53f9,0x0000,0x53f4,0x0000, +0x0000,0x5724,0x5904,0x5918,0x5932,0x5930,0x5934,0x0000, +0x5975,0x0000,0x5b82,0x5bf9,0x5c14,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x5e81,0x5e83,0x5f0d,0x5f52, +0x0000,0x5fca,0x5fc7,0x6239,0x0000,0x624f,0x65e7,0x672f, +0x6b7a,0x6c39,0x0000,0x0000,0x6c37,0x6c44,0x6c45,0x738c, +0x7592,0x7676,0x9093,0x9092,0x0000,0x0000,0x4e21,0x4e20, +0x4e22,0x4e68,0x4e89,0x4e98,0x4ef9,0x4eef,0x0000,0x0000, +0x4ef8,0x4f06,0x4f03,0x4efc,0x4eee,0x4f16,0x0000,0x4f28, +0x4f1c,0x4f07,0x4f1a,0x4efa,0x4f17,0x514a,0x0000,0x5172, +0x0000,0x51b4,0x51b3,0x51b2,0x0000,0x51e8,0x0000,0x5214, +0x520f,0x5215,0x5218,0x52a8,0x0000,0x534b,0x534f,0x0000, +0x5350,0x0000,0x538b,0x0000,0x53be,0x0000,0x53d2,0x5416, +0x53ff,0x0000,0x5400,0x0000,0x5405,0x5413,0x5415,0x0000, +0x0000,0x56e3,0x5735,0x5736,0x5731,0x5732,0x58ee,0x5905, +0x4e54,0x0000,0x5936,0x0000,0x0000,0x0000,0x597a,0x0000, +0x5986,0x0000,0x0000,0x5b86,0x5f53,0x5c18,0x0000,0x5c3d, +0x5c78,0x0000,0x0000,0x0000,0x0000,0x5c80,0x0000,0x5e08, +0x0000,0x0000,0x0000,0x0000,0x5ef5,0x5f0e,0x0000,0x0000, +0x0000,0x5fd3,0x5fda,0x0000,0x5fdb,0x0000,0x620f,0x625d, +0x625f,0x6267,0x6257,0x9f50,0x0000,0x65eb,0x65ea,0x0000, +0x6737,0x0000,0x6732,0x6736,0x6b22,0x6bce,0x0000,0x6c58, +0x6c51,0x6c77,0x6c3c,0x0000,0x6c5a,0x0000,0x6c53,0x706f, +0x7072,0x706e,0x0000,0x0000,0x7073,0x72b1,0x72b2,0x0000, +0x738f,0x0000,0x0000,0x0000,0x793c,0x0000,0x808d,0x808e, +0x0000,0x827b,0x0000,0x8d71,0x8fb9,0x9096,0x909a,0x0000, +0x4e24,0x4e71,0x0000,0x4e9c,0x4f45,0x4f4a,0x4f39,0x4f37, +0x0000,0x4f32,0x4f42,0x0000,0x4f44,0x4f4b,0x0000,0x4f40, +0x4f35,0x4f31,0x5151,0x0000,0x5150,0x514e,0x0000,0x0000, +0x519d,0x0000,0x51b5,0x51b8,0x51ec,0x5223,0x5227,0x5226, +0x521f,0x522b,0x5220,0x52b4,0x52b3,0x0000,0x5325,0x533b, +0x5374,0x0000,0x0000,0x0000,0x0000,0x0000,0x544d,0x0000, +0x0000,0x543a,0x0000,0x0000,0x5444,0x544c,0x5423,0x541a, +0x5432,0x544b,0x5421,0x0000,0x5434,0x5449,0x5450,0x5422, +0x543f,0x5451,0x545a,0x542f,0x0000,0x56e9,0x56f2,0x56f3, +0x56ef,0x56ed,0x56ec,0x56e6,0x5748,0x0000,0x5744,0x573f, +0x573c,0x5753,0x5756,0x0000,0x575f,0x5743,0x5758,0x5757, +0x0000,0x0000,0x0000,0x5746,0x0000,0x573d,0x0000,0x5742, +0x5754,0x5755,0x58f1,0x58f2,0x58f0,0x590b,0x9ea6,0x56f1, +0x593d,0x0000,0x5994,0x598c,0x0000,0x599c,0x0000,0x0000, +0x599f,0x0000,0x599b,0x0000,0x5989,0x599a,0x0000,0x6588, +0x0000,0x5b8d,0x0000,0x5bfe,0x5bff,0x5bfd,0x5c2b,0x0000, +0x5c84,0x5c8e,0x5c9c,0x0000,0x0000,0x5c85,0x5df5,0x5e09, +0x0000,0x0000,0x5e0b,0x0000,0x5e92,0x5e90,0x5f03,0x0000, +0x5f1e,0x5f63,0x0000,0x5fe7,0x5ffe,0x5fe6,0x5fdc,0x5fce, +0x0000,0x5ffc,0x5fdf,0x5fec,0x5ff6,0x0000,0x5ff2,0x5ff0, +0x5ff9,0x0000,0x6213,0x0000,0x0000,0x623b,0x623c,0x6282, +0x0000,0x0000,0x0000,0x6278,0x628b,0x0000,0x629e,0x62a5, +0x629b,0x629c,0x6299,0x628d,0x6285,0x629d,0x6275,0x0000, +0x0000,0x0000,0x65f6,0x0000,0x0000,0x0000,0x66f5,0x675b, +0x0000,0x6754,0x6752,0x0000,0x6758,0x6744,0x674a,0x6761, +0x0000,0x6c7f,0x6c91,0x6c9e,0x0000,0x6c6e,0x6c7c,0x6c9f, +0x6c75,0x0000,0x6c56,0x6ca2,0x6c79,0x0000,0x6ca1,0x0000, +0x6caa,0x6ca0,0x0000,0x7079,0x7077,0x707e,0x0000,0x7075, +0x707b,0x7264,0x0000,0x72bb,0x72bc,0x72c7,0x72b9,0x72be, +0x72b6,0x0000,0x0000,0x7398,0x0000,0x0000,0x0000,0x0000, +0x7593,0x7680,0x0000,0x7683,0x76c0,0x76c1,0x0000,0x0000, +0x77f4,0x77f5,0x0000,0x7acc,0x7acd,0x7cfa,0x809f,0x8091, +0x8097,0x8094,0x0000,0x8286,0x828c,0x0000,0x8295,0x0000, +0x866c,0x0000,0x8fb5,0x8fbe,0x8fc7,0x0000,0x8fc1,0x90a9, +0x90a4,0x0000,0x0000,0x0000,0x90a8,0x9627,0x9626,0x962b, +0x9633,0x9634,0x9629,0x4e3d,0x0000,0x4e9d,0x4f93,0x4f8a, +0x0000,0x0000,0x4f6d,0x4f8e,0x4fa0,0x4fa2,0x4fa1,0x4f9f, +0x4fa3,0x0000,0x4f72,0x0000,0x4f8c,0x5156,0x0000,0x0000, +0x5190,0x0000,0x0000,0x0000,0x51ed,0x51fe,0x522f,0x0000, +0x523c,0x5234,0x5239,0x52b9,0x52b5,0x52bf,0x5355,0x0000, +0x5376,0x537a,0x5393,0x0000,0x53c1,0x53c2,0x53d5,0x5485, +0x0000,0x545f,0x5493,0x5489,0x5479,0x9efe,0x548f,0x5469, +0x546d,0x0000,0x5494,0x546a,0x548a,0x0000,0x56fd,0x56fb, +0x56f8,0x0000,0x56fc,0x56f6,0x5765,0x5781,0x5763,0x5767, +0x0000,0x576e,0x5778,0x577f,0x0000,0x0000,0x58f3,0x594b, +0x594c,0x0000,0x0000,0x0000,0x59ad,0x0000,0x59c4,0x0000, +0x59c2,0x59b0,0x0000,0x0000,0x0000,0x0000,0x59bf,0x0000, +0x59c9,0x59b8,0x59ac,0x0000,0x0000,0x0000,0x59b7,0x59d7, +0x0000,0x5b60,0x0000,0x5b96,0x5b9e,0x5b94,0x5b9f,0x5b9d, +0x0000,0x5c00,0x5c19,0x0000,0x0000,0x5c49,0x5c4a,0x0000, +0x5cbb,0x5cc1,0x0000,0x0000,0x0000,0x5cb9,0x5c9e,0x5cb4, +0x5cba,0x5df6,0x5e13,0x5e12,0x5e77,0x0000,0x5e98,0x0000, +0x5e99,0x5e9d,0x5ef8,0x0000,0x5ef9,0x0000,0x5f06,0x5f21, +0x0000,0x5f25,0x5f55,0x0000,0x0000,0x0000,0x5f84,0x5f83, +0x6030,0x6007,0x0000,0x6036,0x0000,0x0000,0x0000,0x5fe9, +0x603d,0x6008,0x0000,0x0000,0x62ba,0x62b2,0x0000,0x62b7, +0x62e4,0x62a7,0x0000,0x0000,0x0000,0x62d5,0x62e1,0x62dd, +0x62a6,0x62c1,0x62c5,0x62c0,0x62df,0x62e0,0x62de,0x0000, +0x6589,0x0000,0x65a6,0x65ba,0x0000,0x65ff,0x0000,0x6617, +0x6618,0x6601,0x65fe,0x0000,0x670c,0x0000,0x676b,0x6796, +0x6782,0x678a,0x0000,0x67a3,0x0000,0x67a2,0x678f,0x0000, +0x67f9,0x6780,0x6b26,0x6b27,0x6b68,0x6b69,0x0000,0x6b81, +0x6bb4,0x6bd1,0x0000,0x0000,0x6c1c,0x0000,0x0000,0x0000, +0x0000,0x0000,0x6c97,0x6c6c,0x6cdf,0x0000,0x6cea,0x0000, +0x6ce4,0x6cd8,0x6cb2,0x6cce,0x6cc8,0x0000,0x708b,0x7088, +0x7090,0x708f,0x0000,0x7087,0x7089,0x708d,0x7081,0x0000, +0x708c,0x0000,0x0000,0x7240,0x0000,0x0000,0x7265,0x7266, +0x7268,0x0000,0x0000,0x72cd,0x72d3,0x72db,0x0000,0x72cf, +0x73a7,0x73a3,0x739e,0x0000,0x73af,0x0000,0x0000,0x73aa, +0x739c,0x0000,0x7542,0x7544,0x753b,0x7541,0x0000,0x759b, +0x759e,0x0000,0x79c4,0x79c3,0x79c6,0x0000,0x0000,0x79c7, +0x0000,0x79ca,0x0000,0x0000,0x7acf,0x7c76,0x7c74,0x7cff, +0x7cfc,0x0000,0x0000,0x7f59,0x80a8,0x0000,0x0000,0x80b0, +0x0000,0x80b3,0x0000,0x80a4,0x80b6,0x80a7,0x80ac,0x0000, +0x80a6,0x5367,0x820e,0x82c4,0x833e,0x829c,0x0000,0x0000, +0x0000,0x0000,0x0000,0x82aa,0x0000,0x82c9,0x0000,0x0000, +0x82a6,0x82b2,0x0000,0x0000,0x0000,0x8fcc,0x8fd9,0x8fca, +0x8fd8,0x8fcf,0x90b7,0x0000,0x90ad,0x90b9,0x9637,0x0000, +0x9641,0x963e,0x96b6,0x9751,0x9763,0x4e57,0x4e79,0x4eb2, +0x4eb0,0x4eaf,0x4eb1,0x4fd2,0x4fd5,0x0000,0x4fbe,0x4fb8, +0x4fb0,0x4fb1,0x4fc8,0x0000,0x0000,0x4fc6,0x4fcc,0x4fe5, +0x4fe3,0x4fb4,0x516a,0x0000,0x519f,0x0000,0x51c1,0x0000, +0x51c2,0x51c3,0x5245,0x5248,0x0000,0x0000,0x524f,0x0000, +0x0000,0x52c5,0x52ca,0x52c4,0x5327,0x5358,0x537d,0x0000, +0x53dd,0x53dc,0x53da,0x53d9,0x54b9,0x0000,0x54d0,0x54b4, +0x54ca,0x0000,0x54a3,0x54da,0x54a4,0x0000,0x54b2,0x549e, +0x549f,0x54b5,0x0000,0x0000,0x54cd,0x0000,0x54cc,0x0000, +0x5700,0x57ac,0x5791,0x578e,0x578d,0x5792,0x57a1,0x5790, +0x57a6,0x57a8,0x0000,0x579c,0x5796,0x57a7,0x0000,0x0000, +0x0000,0x0000,0x58f5,0x0000,0x5909,0x5908,0x0000,0x5952, +0x0000,0x0000,0x59df,0x0000,0x59eb,0x59ef,0x59f0,0x59d5, +0x5a0d,0x5a04,0x59f9,0x5a02,0x59f8,0x59e2,0x59d9,0x59e7, +0x5b6a,0x0000,0x0000,0x5bab,0x0000,0x5c1b,0x5c2f,0x0000, +0x663c,0x0000,0x0000,0x0000,0x5cd1,0x5cdc,0x5ce6,0x5ce1, +0x5ccd,0x0000,0x5ce2,0x5cdd,0x5ce5,0x5dfb,0x5dfa,0x5e1e, +0x0000,0x5ea1,0x0000,0x0000,0x5efc,0x5efb,0x5f2f,0x0000, +0x0000,0x5f66,0x0000,0x0000,0x0000,0x605c,0x0000,0x604e, +0x6051,0x0000,0x0000,0x6023,0x6031,0x607c,0x6052,0x0000, +0x6060,0x604a,0x6061,0x0000,0x6218,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x631f,0x6317,0x62ea,0x6321, +0x6304,0x6305,0x0000,0x6531,0x6544,0x6540,0x0000,0x6542, +0x65be,0x0000,0x6629,0x661b,0x0000,0x6623,0x662c,0x661a, +0x6630,0x663b,0x661e,0x6637,0x6638,0x0000,0x670e,0x0000, +0x0000,0x67e8,0x67d6,0x0000,0x67c7,0x67bc,0x6852,0x67bf, +0x67d5,0x67fe,0x8363,0x67fb,0x0000,0x67b1,0x6801,0x6805, +0x6800,0x67d7,0x0000,0x6b2a,0x6b6b,0x0000,0x0000,0x0000, +0x0000,0x6be1,0x0000,0x0000,0x6d23,0x6cff,0x6d14,0x6d05, +0x6d13,0x6d06,0x6d21,0x0000,0x6d15,0x6caf,0x6cf4,0x6d02, +0x6d45,0x0000,0x6d26,0x0000,0x6d44,0x0000,0x6d24,0x70a5, +0x0000,0x70a3,0x0000,0x70a2,0x70bb,0x70a0,0x70aa,0x0000, +0x0000,0x70a8,0x70b6,0x70b2,0x70a7,0x0000,0x0000,0x70b9, +0x722e,0x0000,0x723c,0x0000,0x726d,0x0000,0x0000,0x72e7, +0x72ed,0x0000,0x72ec,0x72e5,0x72e2,0x0000,0x73c4,0x73bd, +0x73cf,0x73c9,0x73c1,0x73d0,0x0000,0x73ce,0x74ed,0x74eb, +0x0000,0x74ef,0x7549,0x7550,0x7546,0x754a,0x0000,0x754d, +0x75a6,0x0000,0x0000,0x0000,0x75a8,0x0000,0x0000,0x76c7, +0x76ff,0x0000,0x76fd,0x77e6,0x780a,0x0000,0x7804,0x780b, +0x7807,0x0000,0x7815,0x7808,0x0000,0x79d3,0x79d4,0x79d0, +0x79d7,0x7a7c,0x0000,0x0000,0x7a7d,0x7a83,0x7a82,0x0000, +0x7ad4,0x7ad5,0x7ad3,0x7ad0,0x7ad2,0x7afe,0x7afc,0x7c77, +0x7c7c,0x7c7b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x7f8f,0x80d3,0x0000,0x80cb,0x80d2,0x0000, +0x8109,0x80e2,0x80df,0x80c6,0x0000,0x8224,0x82f7,0x82d8, +0x82dd,0x0000,0x0000,0x82f8,0x82fc,0x0000,0x0000,0x82e9, +0x0000,0x82ee,0x0000,0x82d0,0x830e,0x82e2,0x830b,0x82fd, +0x5179,0x8676,0x0000,0x8678,0x0000,0x0000,0x8675,0x867d, +0x0000,0x8842,0x8866,0x0000,0x898c,0x8a05,0x0000,0x8a06, +0x0000,0x8c9f,0x0000,0x8ff1,0x8fe7,0x8fe9,0x8fef,0x90c2, +0x90bc,0x0000,0x90c6,0x90c0,0x0000,0x0000,0x90cd,0x90c9, +0x0000,0x90c4,0x0000,0x9581,0x0000,0x9cec,0x5032,0x4ff9, +0x501d,0x4fff,0x5004,0x4ff0,0x5003,0x0000,0x5002,0x4ffc, +0x4ff2,0x5024,0x5008,0x5036,0x502e,0x0000,0x5010,0x5038, +0x5039,0x4ffd,0x5056,0x4ffb,0x51a3,0x51a6,0x51a1,0x0000, +0x0000,0x51c7,0x51c9,0x5260,0x5264,0x5259,0x5265,0x5267, +0x5257,0x5263,0x0000,0x5253,0x0000,0x52cf,0x0000,0x52ce, +0x52d0,0x52d1,0x52cc,0x0000,0x0000,0x0000,0x550d,0x54f4, +0x0000,0x5513,0x54ef,0x54f5,0x54f9,0x5502,0x5500,0x0000, +0x0000,0x5518,0x54f0,0x54f6,0x0000,0x0000,0x5519,0x0000, +0x5705,0x57c9,0x0000,0x57b7,0x57cd,0x0000,0x0000,0x0000, +0x57be,0x57bb,0x0000,0x57db,0x57c8,0x57c4,0x57c5,0x57d1, +0x57ca,0x57c0,0x0000,0x0000,0x5a21,0x5a2a,0x0000,0x5a1d, +0x0000,0x5a0b,0x0000,0x0000,0x0000,0x0000,0x5a22,0x0000, +0x0000,0x5a24,0x0000,0x5a14,0x5a31,0x0000,0x5a2f,0x5a1a, +0x5a12,0x0000,0x0000,0x5a26,0x0000,0x0000,0x5bbc,0x5bbb, +0x5bb7,0x5c05,0x5c06,0x5c52,0x5c53,0x0000,0x0000,0x5cfa, +0x5ceb,0x0000,0x5cf3,0x5cf5,0x5ce9,0x5cef,0x0000,0x5e2a, +0x5e30,0x5e2e,0x5e2c,0x5e2f,0x5eaf,0x5ea9,0x0000,0x5efd, +0x5f32,0x5f8e,0x5f93,0x5f8f,0x604f,0x6099,0x0000,0x607e, +0x0000,0x6074,0x604b,0x6073,0x6075,0x0000,0x0000,0x6056, +0x60a9,0x608b,0x60a6,0x0000,0x6093,0x60ae,0x609e,0x60a7, +0x6245,0x0000,0x0000,0x632e,0x0000,0x6352,0x6330,0x635b, +0x0000,0x6319,0x631b,0x0000,0x6331,0x635d,0x6337,0x6335, +0x6353,0x0000,0x635c,0x633f,0x654b,0x0000,0x0000,0x658b, +0x0000,0x659a,0x6650,0x6646,0x664e,0x6640,0x0000,0x664b, +0x6648,0x0000,0x6660,0x6644,0x664d,0x0000,0x6837,0x6824, +0x0000,0x0000,0x681b,0x6836,0x0000,0x682c,0x6819,0x6856, +0x6847,0x683e,0x681e,0x0000,0x6815,0x6822,0x6827,0x6859, +0x6858,0x6855,0x6830,0x6823,0x6b2e,0x6b2b,0x6b30,0x6b6c, +0x0000,0x6b8b,0x0000,0x6be9,0x6bea,0x6be5,0x6d6b,0x0000, +0x0000,0x6d73,0x6d57,0x0000,0x0000,0x6d5d,0x6d56,0x6d8f, +0x6d5b,0x6d1c,0x6d9a,0x6d9b,0x6d99,0x0000,0x6d81,0x6d71, +0x0000,0x0000,0x6d72,0x6d5c,0x6d96,0x70c4,0x70db,0x70cc, +0x70d0,0x70e3,0x70df,0x0000,0x70d6,0x70ee,0x70d5,0x0000, +0x0000,0x0000,0x0000,0x727a,0x0000,0x72f5,0x7302,0x0000, +0x0000,0x73e2,0x73ec,0x73d5,0x73f9,0x73df,0x73e6,0x0000, +0x0000,0x0000,0x0000,0x73e4,0x73e1,0x74f3,0x0000,0x0000, +0x0000,0x0000,0x7556,0x7555,0x7558,0x7557,0x755e,0x75c3, +0x0000,0x0000,0x75b4,0x0000,0x75b1,0x0000,0x0000,0x76cb, +0x76cc,0x772a,0x0000,0x7716,0x770f,0x0000,0x0000,0x773f, +0x772b,0x770e,0x7724,0x0000,0x7721,0x7718,0x77dd,0x0000, +0x0000,0x7824,0x7836,0x0000,0x7958,0x7959,0x0000,0x7962, +0x79da,0x79d9,0x0000,0x79e1,0x79e5,0x79e8,0x79db,0x0000, +0x79e2,0x79f0,0x0000,0x0000,0x0000,0x0000,0x7ada,0x7add, +0x0000,0x7adb,0x7adc,0x0000,0x0000,0x7b0d,0x7b0b,0x7b14, +0x7c8e,0x7c86,0x0000,0x7c87,0x7c83,0x7c8b,0x0000,0x0000, +0x0000,0x0000,0x7d24,0x0000,0x0000,0x0000,0x7d25,0x7f62, +0x7f93,0x7f99,0x7f97,0x0000,0x0000,0x7fc4,0x7fc6,0x800a, +0x0000,0x0000,0x8040,0x803c,0x803b,0x80f6,0x80ff,0x80ee, +0x8104,0x8103,0x8107,0x0000,0x0000,0x80f7,0x0000,0x0000, +0x822d,0x0000,0x8227,0x8229,0x831f,0x8357,0x0000,0x0000, +0x0000,0x0000,0x8321,0x0000,0x0000,0x8318,0x8358,0x0000, +0x0000,0x0000,0x0000,0x0000,0x8684,0x869f,0x869b,0x8689, +0x86a6,0x8692,0x868f,0x86a0,0x884f,0x8878,0x887a,0x886e, +0x887b,0x8884,0x8873,0x0000,0x0000,0x8a0d,0x8a0b,0x8a19, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8ff9,0x9009, +0x9008,0x0000,0x90de,0x9151,0x0000,0x0000,0x91db,0x91df, +0x91de,0x91d6,0x91e0,0x9585,0x9660,0x9659,0x0000,0x9656, +0x0000,0x0000,0x96bd,0x0000,0x0000,0x5042,0x5059,0x0000, +0x5044,0x5066,0x5052,0x5054,0x5071,0x5050,0x507b,0x507c, +0x5058,0x0000,0x0000,0x5079,0x506c,0x5078,0x51a8,0x51d1, +0x51cf,0x5268,0x5276,0x52d4,0x0000,0x53a0,0x53c4,0x0000, +0x5558,0x554c,0x5568,0x0000,0x5549,0x0000,0x0000,0x555d, +0x5529,0x0000,0x5554,0x5553,0x0000,0x555a,0x0000,0x553a, +0x553f,0x552b,0x57ea,0x0000,0x57ef,0x0000,0x0000,0x57dd, +0x57fe,0x0000,0x57de,0x57e6,0x0000,0x57e8,0x57ff,0x5803, +0x58f7,0x68a6,0x591f,0x0000,0x595b,0x595d,0x595e,0x0000, +0x0000,0x5a2b,0x0000,0x5a3b,0x0000,0x0000,0x5a61,0x5a3a, +0x5a6e,0x5a4b,0x5a6b,0x0000,0x0000,0x5a45,0x5a4e,0x5a68, +0x5a3d,0x5a71,0x5a3f,0x5a6f,0x5a75,0x0000,0x5a73,0x5a2c, +0x5a59,0x5a54,0x5a4f,0x5a63,0x0000,0x0000,0x5bc8,0x0000, +0x5bc3,0x0000,0x5c5b,0x5c61,0x0000,0x5d21,0x5d0a,0x5d09, +0x0000,0x5d2c,0x5d08,0x0000,0x0000,0x5d2a,0x5d15,0x0000, +0x5d10,0x5d13,0x0000,0x5d2f,0x5d18,0x0000,0x5de3,0x5e39, +0x5e35,0x5e3a,0x5e32,0x0000,0x0000,0x0000,0x0000,0x5ebb, +0x5eba,0x5f34,0x5f39,0x0000,0x0000,0x0000,0x0000,0x6098, +0x0000,0x60d0,0x0000,0x0000,0x0000,0x60d7,0x60aa,0x0000, +0x60a1,0x60a4,0x0000,0x60ee,0x0000,0x60e7,0x0000,0x0000, +0x60de,0x0000,0x0000,0x637e,0x638b,0x0000,0x0000,0x6379, +0x6386,0x6393,0x0000,0x6373,0x636a,0x0000,0x636c,0x0000, +0x637f,0x0000,0x63b2,0x63ba,0x0000,0x0000,0x6366,0x6374, +0x0000,0x655a,0x0000,0x654e,0x654d,0x658d,0x658e,0x65ad, +0x0000,0x65c7,0x65ca,0x0000,0x65c9,0x0000,0x65e3,0x6657, +0x0000,0x6663,0x6667,0x671a,0x6719,0x6716,0x0000,0x0000, +0x689e,0x68b6,0x6898,0x6873,0x0000,0x689a,0x688e,0x68b7, +0x68db,0x68a5,0x686c,0x68c1,0x6884,0x0000,0x0000,0x6895, +0x687a,0x6899,0x0000,0x68b8,0x68b9,0x6870,0x0000,0x6b35, +0x0000,0x6b90,0x6bbb,0x6bed,0x0000,0x0000,0x0000,0x6dc1, +0x6dc3,0x6dce,0x0000,0x0000,0x6dad,0x6e04,0x0000,0x6db9, +0x0000,0x6de7,0x0000,0x6e08,0x6e06,0x0000,0x6e0a,0x6db0, +0x0000,0x6df8,0x6e0c,0x0000,0x6db1,0x0000,0x6e02,0x6e07, +0x6e09,0x6e01,0x6e17,0x6dff,0x6e12,0x0000,0x0000,0x7103, +0x7107,0x7101,0x70f5,0x70f1,0x7108,0x70f2,0x710f,0x0000, +0x70fe,0x0000,0x0000,0x0000,0x731a,0x7310,0x730e,0x7402, +0x73f3,0x0000,0x0000,0x73fb,0x0000,0x0000,0x0000,0x751b, +0x7523,0x7561,0x7568,0x0000,0x7567,0x75d3,0x0000,0x0000, +0x7690,0x0000,0x0000,0x76d5,0x76d7,0x76d6,0x7730,0x0000, +0x7726,0x0000,0x7740,0x0000,0x771e,0x0000,0x0000,0x0000, +0x7847,0x0000,0x784b,0x7851,0x784f,0x7842,0x7846,0x0000, +0x796e,0x796c,0x79f2,0x0000,0x79f1,0x79f5,0x79f3,0x79f9, +0x0000,0x0000,0x0000,0x7a9a,0x7a93,0x7a91,0x7ae1,0x0000, +0x0000,0x7b21,0x7b1c,0x7b16,0x7b17,0x7b36,0x7b1f,0x0000, +0x7c93,0x7c99,0x7c9a,0x7c9c,0x0000,0x7d49,0x0000,0x7d34, +0x7d37,0x0000,0x7d2d,0x0000,0x7d4c,0x0000,0x0000,0x7d48, +0x0000,0x0000,0x7f3b,0x0000,0x0000,0x0000,0x0000,0x8008, +0x801a,0x0000,0x801d,0x0000,0x8049,0x8045,0x8044,0x7c9b, +0x0000,0x0000,0x812a,0x812e,0x0000,0x0000,0x8131,0x0000, +0x811a,0x8134,0x8117,0x0000,0x0000,0x0000,0x831d,0x8371, +0x8384,0x8380,0x8372,0x83a1,0x0000,0x8379,0x8391,0x0000, +0x839f,0x83ad,0x0000,0x0000,0x8323,0x0000,0x8385,0x839c, +0x83b7,0x8658,0x865a,0x0000,0x8657,0x86b2,0x0000,0x86ae, +0x0000,0x0000,0x0000,0x8845,0x889c,0x8894,0x88a3,0x888f, +0x88a5,0x88a9,0x88a6,0x888a,0x88a0,0x8890,0x8992,0x8991, +0x8994,0x0000,0x8a26,0x8a32,0x8a28,0x0000,0x0000,0x8a1c, +0x0000,0x8a2b,0x8a20,0x0000,0x8a29,0x0000,0x0000,0x0000, +0x8a21,0x8c3a,0x0000,0x8c5b,0x8c58,0x8c7c,0x0000,0x8ca6, +0x8cae,0x8cad,0x8d65,0x0000,0x8d7e,0x0000,0x8d7c,0x8d7f, +0x8d7a,0x8dbd,0x0000,0x0000,0x8dc0,0x8dbb,0x8ead,0x8eaf, +0x8ed6,0x0000,0x0000,0x0000,0x0000,0x0000,0x8ed9,0x0000, +0x0000,0x9012,0x900e,0x9025,0x0000,0x9013,0x90ee,0x0000, +0x90ab,0x90f7,0x0000,0x9159,0x9154,0x91f2,0x91f0,0x91e5, +0x91f6,0x0000,0x0000,0x9587,0x0000,0x965a,0x0000,0x0000, +0x966e,0x0000,0x0000,0x0000,0x9679,0x0000,0x98e1,0x98e6, +0x0000,0x9ec4,0x9ed2,0x4e80,0x0000,0x4e81,0x508f,0x5097, +0x5088,0x5089,0x0000,0x0000,0x5081,0x5160,0x0000,0x0000, +0x5e42,0x51d3,0x0000,0x0000,0x51d2,0x51d6,0x5273,0x0000, +0x5270,0x0000,0x0000,0x0000,0x53a8,0x53a6,0x53c5,0x5597, +0x55de,0x0000,0x0000,0x5596,0x55b4,0x0000,0x5585,0x0000, +0x559b,0x55a0,0x0000,0x5559,0x0000,0x5586,0x0000,0x0000, +0x55af,0x557a,0x0000,0x0000,0x0000,0x559e,0x0000,0x55a9, +0x570f,0x570e,0x581a,0x0000,0x581f,0x0000,0x583c,0x5818, +0x583e,0x5826,0x0000,0x583a,0x0000,0x5822,0x0000,0x58fb, +0x5963,0x5964,0x0000,0x5aa8,0x5aa3,0x5a82,0x5a88,0x5aa1, +0x5a85,0x5a98,0x0000,0x5a99,0x0000,0x5a89,0x5a81,0x5a96, +0x5a80,0x0000,0x0000,0x5a91,0x0000,0x0000,0x0000,0x0000, +0x5acf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5a87, +0x5aa0,0x0000,0x5a79,0x0000,0x5a86,0x5aab,0x5aaa,0x5aa4, +0x5a8d,0x5a7e,0x0000,0x5bd5,0x0000,0x0000,0x0000,0x5c1e, +0x5c5f,0x5c5e,0x5d44,0x5d3e,0x0000,0x5d48,0x5d1c,0x0000, +0x5d5b,0x5d4d,0x0000,0x0000,0x5d57,0x0000,0x5d53,0x5d4f, +0x0000,0x5d3b,0x5d46,0x0000,0x0000,0x5e46,0x5e47,0x0000, +0x5e48,0x5ec0,0x5ebd,0x5ebf,0x0000,0x5f11,0x0000,0x5f3e, +0x5f3b,0x0000,0x5f3a,0x0000,0x0000,0x0000,0x5fa7,0x0000, +0x60ea,0x0000,0x6107,0x6122,0x610c,0x0000,0x0000,0x60b3, +0x60d6,0x60d2,0x0000,0x60e3,0x60e5,0x60e9,0x0000,0x0000, +0x6111,0x60fd,0x0000,0x0000,0x611e,0x6120,0x6121,0x621e, +0x0000,0x63e2,0x63de,0x63e6,0x0000,0x0000,0x0000,0x0000, +0x63f8,0x0000,0x63fe,0x63c1,0x63bf,0x63f7,0x63d1,0x655f, +0x6560,0x6561,0x0000,0x0000,0x65d1,0x0000,0x0000,0x667d, +0x666b,0x667f,0x0000,0x0000,0x6673,0x6681,0x666d,0x6669, +0x0000,0x0000,0x671e,0x68ed,0x0000,0x0000,0x0000,0x0000, +0x6903,0x0000,0x68fe,0x68e5,0x691e,0x6902,0x0000,0x0000, +0x6909,0x68ca,0x6900,0x0000,0x6901,0x6918,0x68e2,0x68cf, +0x0000,0x692e,0x68c5,0x68ff,0x0000,0x691c,0x68c3,0x0000, +0x6b6f,0x0000,0x6b6e,0x0000,0x6bbe,0x0000,0x6bf4,0x6c2d, +0x0000,0x6db6,0x6e75,0x6e1e,0x0000,0x6e18,0x0000,0x6e48, +0x0000,0x6e4f,0x0000,0x6e42,0x6e6a,0x6e70,0x6dfe,0x0000, +0x0000,0x6e6d,0x0000,0x6e7b,0x6e7e,0x6e59,0x0000,0x6e57, +0x0000,0x6e80,0x6e50,0x0000,0x6e29,0x6e76,0x6e2a,0x6e4c, +0x712a,0x0000,0x7135,0x712c,0x7137,0x711d,0x0000,0x0000, +0x7138,0x0000,0x7134,0x712b,0x7133,0x7127,0x7124,0x0000, +0x712d,0x7232,0x7283,0x7282,0x7287,0x7306,0x7324,0x7338, +0x732a,0x732c,0x732b,0x0000,0x732f,0x7328,0x7417,0x0000, +0x0000,0x7419,0x7438,0x0000,0x741f,0x7414,0x743c,0x73f7, +0x741c,0x7415,0x7418,0x7439,0x74f9,0x7524,0x0000,0x0000, +0x0000,0x756e,0x756d,0x7571,0x758e,0x0000,0x75e5,0x0000, +0x0000,0x0000,0x0000,0x7694,0x76b3,0x0000,0x76d9,0x0000, +0x7748,0x7749,0x7743,0x0000,0x0000,0x7742,0x77df,0x0000, +0x7863,0x7876,0x0000,0x785f,0x7866,0x7966,0x7971,0x0000, +0x0000,0x7976,0x7984,0x7975,0x79ff,0x7a07,0x0000,0x7a0e, +0x7a09,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7ae7, +0x7ae2,0x7b55,0x0000,0x0000,0x7b43,0x7b57,0x7b6c,0x7b42, +0x7b53,0x0000,0x7b41,0x0000,0x0000,0x7ca7,0x7ca0,0x7ca6, +0x7ca4,0x7d74,0x0000,0x7d59,0x0000,0x7d60,0x7d57,0x7d6c, +0x7d7e,0x7d64,0x0000,0x7d5a,0x7d5d,0x0000,0x0000,0x0000, +0x7d76,0x7d4d,0x7d75,0x0000,0x7fd3,0x7fd6,0x0000,0x0000, +0x8060,0x804e,0x8145,0x813b,0x0000,0x8148,0x8142,0x8149, +0x8140,0x8114,0x8141,0x0000,0x81ef,0x81f6,0x8203,0x0000, +0x83ed,0x0000,0x83da,0x8418,0x83d2,0x8408,0x0000,0x8400, +0x0000,0x0000,0x0000,0x8417,0x8346,0x8414,0x83d3,0x8405, +0x841f,0x8402,0x8416,0x83cd,0x83e6,0x0000,0x865d,0x86d5, +0x86e1,0x0000,0x0000,0x0000,0x0000,0x86ee,0x8847,0x8846, +0x0000,0x0000,0x88bb,0x0000,0x88bf,0x88b4,0x0000,0x88b5, +0x0000,0x899a,0x8a43,0x0000,0x0000,0x8a5a,0x0000,0x0000, +0x0000,0x8a35,0x8a38,0x8a42,0x8a49,0x8a5d,0x8a4b,0x8a3d, +0x0000,0x0000,0x0000,0x0000,0x8c60,0x8c5e,0x8c7f,0x8c7e, +0x8c83,0x0000,0x8cb1,0x8d87,0x0000,0x0000,0x8d88,0x8d83, +0x0000,0x0000,0x8d86,0x8d8b,0x8d82,0x8dca,0x8dd2,0x0000, +0x0000,0x8dd4,0x8dc9,0x8eb0,0x0000,0x0000,0x0000,0x8ef2, +0x8ee4,0x8ef3,0x8eea,0x0000,0x8efd,0x0000,0x8f9d,0x902b, +0x902a,0x0000,0x9028,0x9029,0x902c,0x0000,0x0000,0x903a, +0x9030,0x9037,0x903b,0x0000,0x910a,0x0000,0x0000,0x0000, +0x91fe,0x9220,0x0000,0x920b,0x0000,0x9218,0x9222,0x0000, +0x921b,0x9208,0x0000,0x920e,0x9213,0x0000,0x0000,0x9595, +0x0000,0x0000,0x0000,0x968c,0x967b,0x967f,0x9681,0x0000, +0x9682,0x0000,0x0000,0x0000,0x0000,0x0000,0x96ee,0x96ed, +0x0000,0x96ec,0x975f,0x976f,0x0000,0x976d,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x98f0,0x0000,0x0000,0x0000, +0x9aa9,0x0000,0x0000,0x9ae0,0x4eb7,0x0000,0x0000,0x50cc, +0x50bc,0x0000,0x50aa,0x50b9,0x0000,0x50ab,0x50c3,0x50cd, +0x517e,0x527e,0x5279,0x0000,0x0000,0x52e1,0x52e0,0x52e7, +0x5380,0x53ab,0x53aa,0x53a9,0x53e0,0x55ea,0x0000,0x55d7, +0x0000,0x0000,0x55c1,0x5715,0x0000,0x586c,0x0000,0x585c, +0x5850,0x5861,0x586a,0x5869,0x5856,0x5860,0x5866,0x585f, +0x5923,0x5966,0x5968,0x0000,0x0000,0x5ace,0x0000,0x5ac5, +0x5ac3,0x0000,0x0000,0x5ad0,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x5b74,0x5b76,0x5bdc,0x5bd7,0x5bda,0x5bdb, +0x0000,0x5c20,0x5d6d,0x5d66,0x0000,0x5d64,0x5d6e,0x0000, +0x5d60,0x5f42,0x5f5a,0x5f6e,0x0000,0x0000,0x6130,0x613a, +0x612a,0x6143,0x6119,0x6131,0x0000,0x613d,0x0000,0x0000, +0x0000,0x6408,0x6432,0x6438,0x0000,0x6431,0x0000,0x6419, +0x0000,0x6411,0x0000,0x0000,0x6429,0x641d,0x0000,0x0000, +0x0000,0x643c,0x0000,0x6446,0x6447,0x0000,0x0000,0x643a, +0x6407,0x0000,0x656b,0x0000,0x6570,0x656d,0x0000,0x65e4, +0x6693,0x0000,0x0000,0x0000,0x0000,0x668f,0x0000,0x0000, +0x6692,0x0000,0x668e,0x0000,0x6946,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x6931,0x0000,0x0000,0x693e, +0x0000,0x697c,0x6943,0x0000,0x6973,0x0000,0x6955,0x0000, +0x0000,0x6985,0x694d,0x6950,0x6947,0x6967,0x6936,0x6964, +0x6961,0x0000,0x697d,0x6b44,0x6b40,0x6b71,0x6b73,0x6b9c, +0x0000,0x0000,0x0000,0x6bc1,0x0000,0x6bfa,0x6c31,0x6c32, +0x0000,0x0000,0x6eb8,0x6ea8,0x0000,0x6e91,0x6ebb,0x0000, +0x6e9a,0x0000,0x0000,0x6ea9,0x0000,0x0000,0x6eb5,0x6e6c, +0x6ee8,0x0000,0x6edd,0x6eda,0x6ee6,0x6eac,0x0000,0x0000, +0x0000,0x6ed9,0x6ee3,0x6ee9,0x6edb,0x0000,0x716f,0x0000, +0x0000,0x7148,0x0000,0x714a,0x716b,0x0000,0x714f,0x7157, +0x7174,0x0000,0x0000,0x0000,0x7145,0x7151,0x716d,0x0000, +0x7251,0x7250,0x724e,0x0000,0x7341,0x0000,0x732e,0x7346, +0x0000,0x7427,0x0000,0x7448,0x7453,0x743d,0x0000,0x745d, +0x7456,0x0000,0x741e,0x7447,0x7443,0x7458,0x7449,0x0000, +0x744c,0x7445,0x743e,0x0000,0x7501,0x751e,0x0000,0x0000, +0x757a,0x75ee,0x7602,0x7697,0x7698,0x0000,0x0000,0x0000, +0x775d,0x7764,0x7753,0x7758,0x7882,0x7890,0x788a,0x0000, +0x787a,0x787d,0x0000,0x788b,0x7878,0x0000,0x0000,0x788d, +0x7888,0x7892,0x7881,0x797e,0x7983,0x0000,0x0000,0x0000, +0x7980,0x0000,0x0000,0x0000,0x7a0f,0x0000,0x0000,0x7a1d, +0x0000,0x7aa1,0x7aa4,0x0000,0x7ae9,0x7aea,0x0000,0x7b62, +0x7b6b,0x0000,0x7b5e,0x0000,0x7b79,0x0000,0x0000,0x7b6f, +0x7b68,0x0000,0x0000,0x7cae,0x0000,0x0000,0x0000,0x7cb0, +0x0000,0x7d90,0x0000,0x7d8a,0x0000,0x7d8b,0x7d99,0x7d95, +0x0000,0x7d87,0x7d78,0x7d97,0x7d89,0x7d98,0x0000,0x0000, +0x0000,0x7fa3,0x0000,0x0000,0x0000,0x7fdd,0x8057,0x0000, +0x8163,0x816a,0x816c,0x0000,0x0000,0x0000,0x815d,0x8175, +0x0000,0x815f,0x0000,0x817d,0x816d,0x0000,0x0000,0x8241, +0x844f,0x8484,0x0000,0x847f,0x0000,0x8448,0x842a,0x847b, +0x8472,0x8464,0x842e,0x845c,0x8453,0x0000,0x8441,0x84c8, +0x0000,0x8462,0x8480,0x843e,0x8483,0x8471,0x0000,0x844a, +0x8455,0x8458,0x0000,0x0000,0x0000,0x86fc,0x86fd,0x8715, +0x0000,0x8716,0x86ff,0x0000,0x0000,0x0000,0x8858,0x88cf, +0x88e0,0x0000,0x0000,0x0000,0x0000,0x89e7,0x8a6a,0x8a80, +0x0000,0x8a6f,0x8a65,0x0000,0x8a78,0x8a7d,0x8a88,0x0000, +0x0000,0x8a64,0x8a7e,0x0000,0x8a67,0x8c63,0x8c88,0x0000, +0x8ccd,0x0000,0x8cc9,0x0000,0x8ded,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x8eb1,0x0000,0x0000,0x8f04, +0x8f9e,0x8fa0,0x9043,0x9046,0x9048,0x9045,0x9040,0x904c, +0x0000,0x0000,0x910c,0x9113,0x9115,0x0000,0x916b,0x9167, +0x925d,0x9255,0x9235,0x0000,0x9259,0x922f,0x923c,0x928f, +0x925c,0x926a,0x9262,0x925f,0x926b,0x926e,0x923b,0x9244, +0x9241,0x959a,0x0000,0x9599,0x0000,0x0000,0x0000,0x968f, +0x0000,0x9696,0x0000,0x0000,0x0000,0x96f4,0x96fc,0x0000, +0x9755,0x0000,0x9779,0x0000,0x0000,0x0000,0x97ee,0x97f5, +0x0000,0x980b,0x0000,0x98f3,0x0000,0x0000,0x98f7,0x98ff, +0x98f5,0x0000,0x98ec,0x98f1,0x0000,0x0000,0x999a,0x0000, +0x9ae2,0x9b3d,0x9b5d,0x9ce8,0x0000,0x9ceb,0x9cef,0x9cee, +0x9e81,0x9f14,0x50d0,0x50d9,0x50dc,0x50d8,0x0000,0x50e1, +0x50eb,0x0000,0x0000,0x50f4,0x50e2,0x50de,0x0000,0x0000, +0x0000,0x51f4,0x0000,0x0000,0x0000,0x52ed,0x52ea,0x0000, +0x5332,0x0000,0x53ae,0x53b0,0x0000,0x55fb,0x5603,0x560b, +0x0000,0x5607,0x0000,0x55f8,0x0000,0x5628,0x561e,0x0000, +0x5618,0x5611,0x5651,0x5605,0x5717,0x5892,0x0000,0x588c, +0x0000,0x5878,0x5884,0x5873,0x58ad,0x5897,0x5895,0x5877, +0x5872,0x5896,0x588d,0x5910,0x0000,0x596c,0x0000,0x5ae7, +0x0000,0x5ae4,0x0000,0x0000,0x5aef,0x5626,0x0000,0x0000, +0x5af0,0x5d7b,0x0000,0x5d83,0x0000,0x0000,0x5d8b,0x5d8c, +0x0000,0x5d78,0x5e52,0x0000,0x0000,0x5ed0,0x5ecf,0x0000, +0x5fb3,0x5fb4,0x0000,0x0000,0x0000,0x617b,0x0000,0x616f, +0x6181,0x613c,0x6142,0x6138,0x6133,0x0000,0x6160,0x6169, +0x617d,0x6186,0x622c,0x6228,0x0000,0x644c,0x0000,0x6457, +0x647c,0x0000,0x0000,0x6455,0x6462,0x6471,0x646a,0x6456, +0x643b,0x6481,0x0000,0x644f,0x647e,0x6464,0x0000,0x0000, +0x0000,0x0000,0x0000,0x6571,0x0000,0x0000,0x66a5,0x669a, +0x669c,0x0000,0x66a6,0x0000,0x66a4,0x698f,0x69c5,0x69c8, +0x6992,0x69b2,0x0000,0x0000,0x0000,0x69e3,0x69c0,0x69d6, +0x69d1,0x699f,0x69a2,0x69d2,0x0000,0x0000,0x0000,0x69e1, +0x69d5,0x699d,0x0000,0x0000,0x6998,0x0000,0x6b74,0x6ba1, +0x0000,0x6ef0,0x6ef3,0x0000,0x0000,0x6f1b,0x6f0c,0x6f1d, +0x6f34,0x6f28,0x6f17,0x0000,0x6f44,0x6f42,0x6f04,0x6f11, +0x6efa,0x6f4a,0x7191,0x718e,0x0000,0x718b,0x718d,0x717f, +0x718c,0x717e,0x717c,0x7183,0x0000,0x7188,0x0000,0x0000, +0x7294,0x0000,0x7355,0x7353,0x734f,0x7354,0x746c,0x7465, +0x7466,0x7461,0x746b,0x7468,0x7476,0x0000,0x7460,0x0000, +0x7474,0x7506,0x760e,0x0000,0x7607,0x0000,0x0000,0x76b9, +0x0000,0x76b7,0x76e2,0x0000,0x7774,0x7777,0x7776,0x7775, +0x0000,0x7778,0x7771,0x0000,0x777a,0x715b,0x777b,0x78a6, +0x78ae,0x78b8,0x0000,0x0000,0x0000,0x78b1,0x78af,0x0000, +0x7989,0x7987,0x0000,0x0000,0x7a29,0x0000,0x7a2a,0x0000, +0x7a2d,0x7a2c,0x0000,0x7a32,0x0000,0x7aec,0x7af0,0x7b81, +0x7b9e,0x7b83,0x0000,0x7b92,0x0000,0x7ba3,0x7b9f,0x7b93, +0x0000,0x7b86,0x7cb8,0x7cb7,0x0000,0x0000,0x0000,0x0000, +0x0000,0x7dc8,0x7db6,0x0000,0x7dd1,0x0000,0x7da8,0x7dab, +0x0000,0x7db3,0x7dcd,0x0000,0x7dcf,0x7da4,0x0000,0x0000, +0x7f41,0x7f6f,0x7f71,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x8023,0x805b,0x0000,0x8061,0x805f,0x8181,0x0000, +0x0000,0x8184,0x8213,0x0000,0x824a,0x824c,0x0000,0x0000, +0x0000,0x84bd,0x8495,0x0000,0x8492,0x84c3,0x0000,0x8496, +0x84a5,0x84b5,0x84b3,0x84a3,0x84e4,0x84d8,0x84d5,0x0000, +0x84b7,0x84ad,0x84da,0x8493,0x8736,0x0000,0x0000,0x0000, +0x873d,0x872b,0x8747,0x8739,0x0000,0x8745,0x871d,0x0000, +0x88ff,0x88ea,0x0000,0x88f5,0x0000,0x8900,0x88ed,0x8903, +0x88e9,0x0000,0x0000,0x89ea,0x0000,0x8a9b,0x8a8e,0x8aa2, +0x0000,0x8a9c,0x8a94,0x8a90,0x8aa9,0x8aac,0x0000,0x8a9f, +0x0000,0x0000,0x8a9d,0x0000,0x8c67,0x0000,0x0000,0x8cd0, +0x8cd6,0x8cd4,0x8d98,0x8d9a,0x8d97,0x0000,0x0000,0x0000, +0x8e0b,0x8e08,0x8e01,0x8eb4,0x8eb3,0x0000,0x8fa1,0x8fa2, +0x0000,0x905a,0x0000,0x9061,0x905f,0x0000,0x0000,0x9125, +0x917b,0x9176,0x917c,0x0000,0x9289,0x92f6,0x92b1,0x92ad, +0x9292,0x9281,0x9284,0x0000,0x92ae,0x9290,0x929e,0x0000, +0x0000,0x0000,0x95a2,0x95a7,0x0000,0x0000,0x0000,0x0000, +0x0000,0x96a0,0x969d,0x969f,0x96d0,0x0000,0x96d1,0x0000, +0x0000,0x9759,0x0000,0x9764,0x0000,0x0000,0x0000,0x9819, +0x0000,0x9814,0x9815,0x981a,0x0000,0x0000,0x0000,0x0000, +0x9906,0x0000,0x98f8,0x9901,0x0000,0x99be,0x99bc,0x99b7, +0x99b6,0x99c0,0x0000,0x99b8,0x0000,0x0000,0x0000,0x99c4, +0x0000,0x99bf,0x0000,0x9ada,0x9ae4,0x9ae9,0x9ae8,0x9aea, +0x9ae5,0x0000,0x9b26,0x0000,0x0000,0x9b40,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x9ebd,0x0000,0x0000, +0x0000,0x0000,0x510e,0x0000,0x50f7,0x0000,0x50fc,0x510d, +0x5101,0x51da,0x51d9,0x51db,0x5286,0x528e,0x52ee,0x5333, +0x53b1,0x0000,0x5647,0x562d,0x5654,0x0000,0x564b,0x5652, +0x5631,0x5644,0x5656,0x5650,0x562b,0x0000,0x564d,0x5637, +0x564f,0x58a2,0x58b7,0x0000,0x58b2,0x0000,0x58aa,0x58b5, +0x58b0,0x0000,0x58b4,0x58a4,0x58a7,0x0000,0x5926,0x5afe, +0x0000,0x5b04,0x0000,0x5afc,0x0000,0x5b06,0x5b0a,0x5afa, +0x5b0d,0x5b00,0x5b0e,0x0000,0x0000,0x0000,0x5d91,0x0000, +0x5d8f,0x5d90,0x5d98,0x5da4,0x5d9b,0x5da3,0x5d96,0x5de4, +0x5e5a,0x0000,0x0000,0x5e5e,0x0000,0x5fb8,0x6157,0x615c, +0x61a6,0x6195,0x6188,0x0000,0x61a3,0x618f,0x0000,0x6164, +0x0000,0x6159,0x6178,0x0000,0x6185,0x6187,0x619e,0x0000, +0x0000,0x6198,0x619c,0x0000,0x0000,0x622f,0x6480,0x649b, +0x648e,0x648d,0x6494,0x64c6,0x0000,0x64a8,0x6483,0x0000, +0x64b9,0x6486,0x64b4,0x64af,0x6491,0x0000,0x64aa,0x64a1, +0x64a7,0x66b6,0x66b3,0x0000,0x66bc,0x66ac,0x0000,0x66ad, +0x6a0e,0x0000,0x6a1c,0x6a1a,0x0000,0x0000,0x6a0b,0x0000, +0x69ef,0x6a0c,0x69f0,0x6a22,0x0000,0x69d8,0x0000,0x6a12, +0x69fa,0x0000,0x6a2a,0x0000,0x6a10,0x0000,0x0000,0x6a29, +0x69f9,0x69ea,0x6a2c,0x6a24,0x0000,0x69e9,0x6b52,0x6b4f, +0x6b53,0x0000,0x0000,0x6f10,0x6f65,0x6f75,0x0000,0x0000, +0x0000,0x0000,0x6fd0,0x0000,0x6f5c,0x6f3d,0x6f71,0x0000, +0x6f91,0x6f0b,0x6f79,0x6f81,0x6f8f,0x0000,0x6f59,0x6f74, +0x0000,0x71ae,0x0000,0x71a3,0x71ad,0x0000,0x0000,0x71ab, +0x71a6,0x71a2,0x0000,0x52f2,0x7257,0x7255,0x7299,0x734b, +0x747a,0x0000,0x0000,0x0000,0x748c,0x7484,0x0000,0x0000, +0x7482,0x7493,0x747b,0x0000,0x7509,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x778a,0x0000,0x7790,0x0000,0x78c6, +0x78d3,0x78c0,0x78d2,0x78c7,0x78c2,0x0000,0x799f,0x799d, +0x799e,0x0000,0x7a41,0x0000,0x7a38,0x7a3a,0x7a42,0x0000, +0x0000,0x7a3e,0x7ab0,0x7bae,0x7bb3,0x0000,0x0000,0x7bbf, +0x0000,0x0000,0x7bcd,0x0000,0x7bb2,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x7cc4,0x7ccd,0x7cc2,0x7cc6, +0x7cc3,0x7cc9,0x7cc7,0x0000,0x7df8,0x0000,0x7ded,0x7de2, +0x0000,0x0000,0x0000,0x7ddc,0x7e02,0x7e01,0x0000,0x7dd6, +0x0000,0x7de4,0x7dfe,0x0000,0x7e00,0x7dfc,0x7dfd,0x0000, +0x7df5,0x7dff,0x0000,0x7deb,0x7de5,0x7f78,0x7fae,0x7fe7, +0x0000,0x8065,0x806a,0x8066,0x8068,0x806b,0x8194,0x81a1, +0x8192,0x8196,0x8193,0x0000,0x0000,0x8501,0x0000,0x84f8, +0x0000,0x84f5,0x0000,0x8504,0x0000,0x0000,0x0000,0x0000, +0x851b,0x8503,0x8533,0x8534,0x84ed,0x0000,0x0000,0x8535, +0x0000,0x8505,0x0000,0x0000,0x0000,0x0000,0x877d,0x0000, +0x0000,0x0000,0x8771,0x0000,0x885c,0x88e6,0x890f,0x891b, +0x0000,0x89a9,0x89a5,0x89ee,0x8ab1,0x0000,0x8acc,0x8ace, +0x0000,0x8ab7,0x0000,0x8ab5,0x8ae9,0x8ab4,0x0000,0x8ab3, +0x8ac1,0x8aaf,0x8aca,0x8ad0,0x0000,0x0000,0x0000,0x8c8e, +0x0000,0x0000,0x8ce9,0x8cdb,0x0000,0x8ceb,0x8da4,0x0000, +0x8da2,0x8d9d,0x0000,0x0000,0x0000,0x0000,0x8e2a,0x8e28, +0x0000,0x0000,0x8eb8,0x8eb6,0x8eb9,0x8eb7,0x8f22,0x8f2b, +0x8f27,0x8f19,0x8fa4,0x0000,0x8fb3,0x0000,0x9071,0x906a, +0x0000,0x0000,0x9188,0x918c,0x92bf,0x92b8,0x92be,0x92dc, +0x92e5,0x0000,0x0000,0x92d4,0x92d6,0x0000,0x92da,0x92ed, +0x92f3,0x92db,0x0000,0x92b9,0x92e2,0x92eb,0x95af,0x0000, +0x95b2,0x95b3,0x0000,0x0000,0x0000,0x96a3,0x96a5,0x0000, +0x0000,0x0000,0x0000,0x970a,0x0000,0x9787,0x9789,0x978c, +0x97ef,0x982a,0x9822,0x0000,0x981f,0x0000,0x9919,0x0000, +0x99ca,0x99da,0x0000,0x0000,0x0000,0x99de,0x99c8,0x99e0, +0x0000,0x9ab6,0x9ab5,0x0000,0x9af4,0x0000,0x9b6b,0x9b69, +0x9b72,0x9b63,0x0000,0x9d0d,0x0000,0x9d01,0x9d0c,0x0000, +0x9cf8,0x0000,0x0000,0x9cfe,0x9d02,0x9e84,0x0000,0x9eab, +0x9eaa,0x511d,0x5116,0x0000,0x512b,0x511e,0x511b,0x5290, +0x5294,0x5314,0x0000,0x0000,0x5667,0x0000,0x567b,0x0000, +0x565f,0x5661,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x58c3,0x58ca,0x58bb,0x58c0,0x58c4,0x5901,0x5b1f, +0x5b18,0x5b11,0x5b15,0x0000,0x5b12,0x5b1c,0x0000,0x5b22, +0x5b79,0x5da6,0x0000,0x5db3,0x5dab,0x5eea,0x0000,0x5f5b, +0x0000,0x0000,0x61b7,0x61ce,0x61b9,0x61bd,0x61cf,0x61c0, +0x6199,0x6197,0x0000,0x61bb,0x61d0,0x61c4,0x6231,0x0000, +0x64d3,0x64c0,0x0000,0x0000,0x0000,0x0000,0x64dc,0x64d1, +0x64c8,0x0000,0x64d5,0x66c3,0x0000,0x0000,0x66bf,0x66c5, +0x0000,0x66cd,0x66c1,0x6706,0x0000,0x6724,0x6a63,0x6a42, +0x6a52,0x0000,0x6a43,0x6a33,0x0000,0x6a6c,0x6a57,0x0000, +0x6a4c,0x6a6e,0x0000,0x0000,0x0000,0x0000,0x0000,0x6a37, +0x0000,0x6a71,0x6a4a,0x6a36,0x0000,0x6a53,0x0000,0x6a45, +0x6a70,0x0000,0x0000,0x6a5c,0x6b58,0x6b57,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x6fbb,0x0000,0x0000,0x6fbe, +0x0000,0x0000,0x0000,0x6fb5,0x6fd3,0x6f9f,0x0000,0x6fb7, +0x6ff5,0x71b7,0x0000,0x71bb,0x0000,0x71d1,0x0000,0x71ba, +0x0000,0x71b6,0x71cc,0x0000,0x0000,0x71d3,0x749b,0x0000, +0x0000,0x7496,0x74a2,0x749d,0x750a,0x750e,0x0000,0x7581, +0x762c,0x7637,0x7636,0x763b,0x0000,0x76a1,0x0000,0x0000, +0x7798,0x0000,0x7796,0x0000,0x0000,0x0000,0x78d6,0x78eb, +0x0000,0x78dc,0x0000,0x79a5,0x79a9,0x9834,0x7a53,0x7a45, +0x0000,0x7a4f,0x0000,0x7abd,0x7abb,0x7af1,0x0000,0x0000, +0x7bec,0x7bed,0x0000,0x0000,0x7cd3,0x0000,0x7ce1,0x0000, +0x7e19,0x0000,0x0000,0x0000,0x7e27,0x7e26,0x0000,0x0000, +0x806e,0x81af,0x0000,0x0000,0x81ad,0x0000,0x81aa,0x8218, +0x0000,0x0000,0x0000,0x0000,0x856f,0x854c,0x0000,0x8542, +0x0000,0x855c,0x8570,0x855f,0x0000,0x855a,0x854b,0x853f, +0x878a,0x0000,0x878b,0x87a1,0x878e,0x0000,0x0000,0x8799, +0x885e,0x885f,0x8924,0x89a7,0x8aea,0x8afd,0x8af9,0x8ae3, +0x8ae5,0x0000,0x0000,0x8aec,0x0000,0x0000,0x0000,0x0000, +0x8cf2,0x0000,0x8cef,0x0000,0x8da6,0x0000,0x0000,0x0000, +0x8e3b,0x8e43,0x0000,0x8e32,0x8f31,0x8f30,0x0000,0x8f2d, +0x8f3c,0x8fa7,0x8fa5,0x0000,0x0000,0x0000,0x9137,0x9195, +0x918e,0x0000,0x9196,0x0000,0x9345,0x930a,0x0000,0x0000, +0x92fd,0x9317,0x931c,0x9307,0x9331,0x9332,0x932c,0x9330, +0x9303,0x9305,0x0000,0x95c2,0x0000,0x95b8,0x0000,0x95c1, +0x0000,0x0000,0x0000,0x96ab,0x96b7,0x0000,0x0000,0x9715, +0x9714,0x0000,0x0000,0x970c,0x9717,0x0000,0x9793,0x0000, +0x97d2,0x0000,0x0000,0x9836,0x9831,0x9833,0x983c,0x982e, +0x983a,0x0000,0x983d,0x0000,0x98b5,0x9922,0x9923,0x9920, +0x991c,0x991d,0x0000,0x99a0,0x0000,0x99ef,0x99e8,0x99eb, +0x0000,0x0000,0x0000,0x99e1,0x99e6,0x0000,0x0000,0x9af8, +0x9af5,0x0000,0x0000,0x9b83,0x9b94,0x9b84,0x0000,0x9b8b, +0x9b8f,0x0000,0x9b8c,0x0000,0x9b89,0x0000,0x9b8e,0x0000, +0x0000,0x0000,0x9d24,0x9d0f,0x0000,0x9d13,0x9d0a,0x0000, +0x0000,0x0000,0x0000,0x9d2a,0x9d1a,0x0000,0x9d27,0x9d16, +0x9d21,0x0000,0x9e85,0x9eac,0x9ec6,0x9ec5,0x9ed7,0x9f53, +0x0000,0x5128,0x5127,0x51df,0x0000,0x5335,0x53b3,0x0000, +0x568a,0x567d,0x5689,0x0000,0x58cd,0x58d0,0x0000,0x5b2b, +0x5b33,0x5b29,0x5b35,0x5b31,0x5b37,0x5c36,0x5dbe,0x0000, +0x5db9,0x0000,0x5dbb,0x0000,0x61e2,0x61db,0x61dd,0x61dc, +0x61da,0x0000,0x61d9,0x0000,0x0000,0x64df,0x0000,0x0000, +0x64e1,0x0000,0x64ee,0x0000,0x65b5,0x66d4,0x66d5,0x0000, +0x66d0,0x66d1,0x66ce,0x66d7,0x0000,0x0000,0x6a7d,0x6a8a, +0x0000,0x6aa7,0x0000,0x6a99,0x6a82,0x6a88,0x0000,0x0000, +0x6a86,0x0000,0x6a98,0x6a9d,0x0000,0x0000,0x6a8f,0x0000, +0x6aaa,0x0000,0x6b5d,0x0000,0x6c0a,0x0000,0x6fd7,0x6fd6, +0x6fe5,0x0000,0x0000,0x0000,0x6fd9,0x6fda,0x6fea,0x0000, +0x6ff6,0x0000,0x0000,0x71e3,0x0000,0x71e9,0x0000,0x71eb, +0x71ef,0x71f3,0x71ea,0x0000,0x0000,0x0000,0x0000,0x0000, +0x7371,0x0000,0x74ae,0x0000,0x74b3,0x0000,0x74ac,0x0000, +0x0000,0x7583,0x7645,0x764e,0x7644,0x76a3,0x76a5,0x77a6, +0x77a4,0x0000,0x77a9,0x77af,0x0000,0x0000,0x0000,0x78f0, +0x78f8,0x78f1,0x0000,0x7a49,0x0000,0x0000,0x0000,0x7ac2, +0x7af2,0x7af3,0x7bfa,0x0000,0x7bf6,0x7bfc,0x7c18,0x7c08, +0x7c12,0x0000,0x0000,0x7cdb,0x7cda,0x0000,0x0000,0x0000, +0x7e2c,0x7e4d,0x0000,0x0000,0x7f46,0x7ff6,0x802b,0x8074, +0x81b8,0x81c8,0x0000,0x0000,0x0000,0x8592,0x8593,0x0000, +0x857f,0x85ab,0x8597,0x0000,0x0000,0x85ac,0x0000,0x0000, +0x0000,0x87ce,0x0000,0x87cd,0x0000,0x0000,0x87c1,0x87b1, +0x87c7,0x0000,0x8940,0x0000,0x893f,0x8939,0x0000,0x8943, +0x0000,0x0000,0x0000,0x89ab,0x0000,0x8b1f,0x8b09,0x8b0c, +0x0000,0x0000,0x8c40,0x0000,0x8c96,0x0000,0x8cf6,0x8cf7, +0x0000,0x8e46,0x8e4f,0x0000,0x0000,0x0000,0x8f3d,0x8f41, +0x9366,0x9378,0x935d,0x9369,0x9374,0x937d,0x936e,0x9372, +0x9373,0x9362,0x9348,0x9353,0x935f,0x9368,0x0000,0x937f, +0x936b,0x0000,0x95c4,0x0000,0x96af,0x96ad,0x96b2,0x0000, +0x0000,0x971a,0x971b,0x0000,0x0000,0x0000,0x0000,0x979b, +0x979f,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x9840,0x0000,0x9847,0x0000,0x98b7,0x0000,0x0000, +0x0000,0x0000,0x0000,0x99a2,0x0000,0x0000,0x9a00,0x99f3, +0x0000,0x0000,0x99f5,0x0000,0x0000,0x9abd,0x9b00,0x9b02, +0x0000,0x9b34,0x9b49,0x9b9f,0x0000,0x9ba3,0x9bcd,0x9b99, +0x9b9d,0x0000,0x0000,0x9d39,0x0000,0x9d44,0x0000,0x0000, +0x9d35,0x0000,0x0000,0x9eaf,0x0000,0x512f,0x0000,0x0000, +0x9f8e,0x0000,0x569f,0x569b,0x569e,0x5696,0x5694,0x56a0, +0x0000,0x5b3b,0x0000,0x0000,0x5b3a,0x5dc1,0x5f4d,0x5f5d, +0x61f3,0x0000,0x0000,0x0000,0x0000,0x64f6,0x64e5,0x64ea, +0x64e7,0x6505,0x0000,0x64f9,0x0000,0x0000,0x0000,0x6aab, +0x6aed,0x6ab2,0x6ab0,0x6ab5,0x6abe,0x6ac1,0x6ac8,0x0000, +0x6ac0,0x6abc,0x6ab1,0x6ac4,0x6abf,0x0000,0x0000,0x7008, +0x7003,0x6ffd,0x7010,0x7002,0x7013,0x0000,0x71fa,0x7200, +0x74b9,0x74bc,0x0000,0x765b,0x7651,0x764f,0x76eb,0x77b8, +0x0000,0x77b9,0x77c1,0x77c0,0x77be,0x790b,0x0000,0x7907, +0x790a,0x7908,0x0000,0x790d,0x7906,0x7915,0x79af,0x0000, +0x0000,0x0000,0x7af5,0x0000,0x0000,0x7c2e,0x0000,0x7c1b, +0x0000,0x7c1a,0x7c24,0x0000,0x0000,0x7ce6,0x7ce3,0x0000, +0x0000,0x7e5d,0x7e4f,0x7e66,0x7e5b,0x7f47,0x7fb4,0x0000, +0x0000,0x0000,0x7ffa,0x802e,0x0000,0x0000,0x81ce,0x0000, +0x0000,0x8219,0x0000,0x0000,0x85cc,0x85b2,0x0000,0x85bb, +0x85c1,0x0000,0x0000,0x0000,0x87e9,0x87ee,0x87f0,0x87d6, +0x880e,0x87da,0x8948,0x894a,0x894e,0x894d,0x89b1,0x89b0, +0x89b3,0x0000,0x8b38,0x8b32,0x0000,0x8b2d,0x0000,0x8b34, +0x0000,0x8b29,0x8c74,0x0000,0x0000,0x8d03,0x0000,0x0000, +0x8da9,0x8e58,0x0000,0x0000,0x8ebf,0x8ec1,0x8f4a,0x8fac, +0x0000,0x9089,0x913d,0x913c,0x91a9,0x93a0,0x0000,0x9390, +0x0000,0x9393,0x938b,0x93ad,0x93bb,0x93b8,0x0000,0x0000, +0x939c,0x95d8,0x95d7,0x0000,0x0000,0x0000,0x975d,0x97a9, +0x97da,0x0000,0x0000,0x0000,0x0000,0x9854,0x0000,0x9855, +0x984b,0x0000,0x983f,0x98b9,0x0000,0x0000,0x0000,0x0000, +0x9938,0x9936,0x9940,0x0000,0x993b,0x9939,0x99a4,0x0000, +0x0000,0x9a08,0x9a0c,0x0000,0x9a10,0x0000,0x9b07,0x0000, +0x9bd2,0x0000,0x9bc2,0x9bbb,0x9bcc,0x9bcb,0x0000,0x0000, +0x9d4d,0x9d63,0x9d4e,0x0000,0x9d50,0x9d55,0x0000,0x9d5e, +0x0000,0x9e90,0x9eb2,0x9eb1,0x0000,0x9eca,0x9f02,0x9f27, +0x9f26,0x0000,0x56af,0x58e0,0x58dc,0x0000,0x5b39,0x0000, +0x0000,0x5b7c,0x5bf3,0x0000,0x0000,0x5c6b,0x5dc4,0x650b, +0x6508,0x650a,0x0000,0x0000,0x65dc,0x0000,0x0000,0x66e1, +0x66df,0x6ace,0x6ad4,0x6ae3,0x6ad7,0x6ae2,0x0000,0x0000, +0x0000,0x0000,0x6ad8,0x6ad5,0x6ad2,0x0000,0x0000,0x701e, +0x702c,0x7025,0x6ff3,0x7204,0x7208,0x7215,0x0000,0x74c4, +0x74c9,0x74c7,0x74c8,0x76a9,0x77c6,0x77c5,0x7918,0x791a, +0x7920,0x0000,0x7a66,0x7a64,0x7a6a,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x7c35,0x7c34,0x0000,0x0000,0x7e6c, +0x0000,0x7e6e,0x7e71,0x0000,0x81d4,0x81d6,0x821a,0x8262, +0x8265,0x8276,0x85db,0x85d6,0x0000,0x85e7,0x0000,0x0000, +0x85f4,0x0000,0x87fd,0x87d5,0x8807,0x0000,0x880f,0x87f8, +0x0000,0x0000,0x8987,0x0000,0x89b5,0x89f5,0x0000,0x8b3f, +0x8b43,0x8b4c,0x0000,0x8d0b,0x8e6b,0x8e68,0x8e70,0x8e75, +0x8e77,0x0000,0x8ec3,0x0000,0x93e9,0x93ea,0x93cb,0x93c5, +0x93c6,0x0000,0x93ed,0x93d3,0x0000,0x93e5,0x0000,0x0000, +0x93db,0x93eb,0x93e0,0x93c1,0x0000,0x0000,0x95dd,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x97b2,0x97b4,0x97b1,0x97b5,0x97f2,0x0000,0x0000,0x0000, +0x9856,0x0000,0x0000,0x0000,0x9944,0x0000,0x9a26,0x9a1f, +0x9a18,0x9a21,0x9a17,0x0000,0x9b09,0x0000,0x0000,0x9bc5, +0x9bdf,0x0000,0x9be3,0x0000,0x9be9,0x9bee,0x0000,0x0000, +0x9d66,0x9d7a,0x0000,0x9d6e,0x9d91,0x9d83,0x9d76,0x9d7e, +0x9d6d,0x0000,0x9e95,0x9ee3,0x0000,0x0000,0x9f03,0x9f04, +0x0000,0x9f17,0x0000,0x5136,0x0000,0x5336,0x0000,0x5b42, +0x0000,0x0000,0x5b44,0x5b46,0x5b7e,0x5dca,0x5dc8,0x5dcc, +0x5ef0,0x0000,0x6585,0x66e5,0x66e7,0x0000,0x0000,0x0000, +0x6af4,0x0000,0x6ae9,0x0000,0x0000,0x0000,0x0000,0x0000, +0x703d,0x0000,0x7036,0x0000,0x7216,0x0000,0x7212,0x720f, +0x7217,0x7211,0x720b,0x0000,0x0000,0x74cd,0x74d0,0x74cc, +0x74ce,0x74d1,0x0000,0x7589,0x0000,0x7a6f,0x7c4b,0x7c44, +0x0000,0x0000,0x0000,0x0000,0x0000,0x7e7f,0x8b71,0x0000, +0x802f,0x807a,0x807b,0x807c,0x0000,0x0000,0x0000,0x85fc, +0x8610,0x8602,0x0000,0x0000,0x85ee,0x8603,0x0000,0x860d, +0x8613,0x8608,0x860f,0x8818,0x8812,0x0000,0x0000,0x8967, +0x8965,0x89bb,0x8b69,0x8b62,0x0000,0x8b6e,0x0000,0x8b61, +0x0000,0x8b64,0x8b4d,0x8c51,0x0000,0x0000,0x8e83,0x8ec6, +0x0000,0x941f,0x0000,0x9404,0x9417,0x9408,0x9405,0x0000, +0x93f3,0x941e,0x9402,0x941a,0x941b,0x9427,0x941c,0x0000, +0x96b5,0x0000,0x0000,0x9733,0x0000,0x9734,0x9731,0x97b8, +0x97ba,0x0000,0x97fc,0x0000,0x0000,0x98c3,0x0000,0x994d, +0x0000,0x9a2f,0x0000,0x0000,0x0000,0x9ac9,0x0000,0x9ac8, +0x9ac4,0x9b2a,0x9b38,0x9b50,0x0000,0x9c0a,0x9bfb,0x9c04, +0x9bfc,0x9bfe,0x0000,0x0000,0x0000,0x9c02,0x9bf6,0x9c1b, +0x9bf9,0x9c15,0x9c10,0x9bff,0x9c00,0x9c0c,0x0000,0x0000, +0x9d95,0x9da5,0x0000,0x0000,0x0000,0x0000,0x9e98,0x9ec1, +0x0000,0x9f5a,0x5164,0x56bb,0x0000,0x58e6,0x5b49,0x5bf7, +0x0000,0x0000,0x5dd0,0x0000,0x5fc2,0x0000,0x6511,0x0000, +0x6aff,0x6afe,0x6afd,0x0000,0x6b01,0x0000,0x0000,0x704b, +0x704d,0x7047,0x74d3,0x7668,0x7667,0x0000,0x0000,0x77d1, +0x7930,0x7932,0x792e,0x0000,0x9f9d,0x7ac9,0x7ac8,0x0000, +0x7c56,0x7c51,0x0000,0x0000,0x0000,0x7e85,0x7e89,0x7e8e, +0x7e84,0x0000,0x826a,0x862b,0x862f,0x8628,0x0000,0x8616, +0x8615,0x861d,0x881a,0x0000,0x0000,0x0000,0x89bc,0x8b75, +0x8b7c,0x0000,0x8d11,0x8d12,0x8f5c,0x91bb,0x0000,0x93f4, +0x0000,0x0000,0x942d,0x0000,0x0000,0x96e4,0x9737,0x9736, +0x9767,0x97be,0x97bd,0x97e2,0x9868,0x9866,0x98c8,0x98ca, +0x98c7,0x98dc,0x0000,0x994f,0x99a9,0x9a3c,0x0000,0x9a3b, +0x9ace,0x0000,0x9b14,0x9b53,0x0000,0x9c2e,0x0000,0x9c1f, +0x0000,0x0000,0x0000,0x0000,0x9db0,0x9dbd,0x0000,0x0000, +0x9dae,0x9dc4,0x9e7b,0x0000,0x0000,0x9e9e,0x0000,0x9f05, +0x0000,0x9f69,0x9fa1,0x56c7,0x571d,0x5b4a,0x5dd3,0x0000, +0x5f72,0x6202,0x0000,0x6235,0x6527,0x651e,0x651f,0x0000, +0x0000,0x6b07,0x6b06,0x0000,0x0000,0x7054,0x721c,0x7220, +0x7af8,0x0000,0x7c5d,0x7c58,0x0000,0x7e92,0x7f4e,0x0000, +0x0000,0x0000,0x8827,0x0000,0x8b81,0x8b83,0x0000,0x8c44, +0x0000,0x0000,0x0000,0x0000,0x9442,0x944d,0x9454,0x944e, +0x0000,0x9443,0x0000,0x0000,0x973c,0x9740,0x97c0,0x0000, +0x0000,0x0000,0x0000,0x995a,0x9a51,0x0000,0x9add,0x0000, +0x0000,0x9c38,0x0000,0x9c45,0x9c3a,0x0000,0x9c35,0x0000, +0x0000,0x0000,0x9ef1,0x0000,0x9f93,0x529a,0x0000,0x0000, +0x8641,0x5dd7,0x0000,0x6528,0x0000,0x0000,0x0000,0x7053, +0x7059,0x0000,0x7221,0x0000,0x766f,0x7937,0x79b5,0x7c62, +0x7c5e,0x7cf5,0x0000,0x0000,0x863d,0x0000,0x882d,0x8989, +0x8b8d,0x8b87,0x8b90,0x8d1a,0x8e99,0x0000,0x0000,0x0000, +0x945f,0x0000,0x0000,0x9456,0x9461,0x945b,0x945a,0x945c, +0x9465,0x0000,0x9741,0x0000,0x0000,0x986e,0x986c,0x986d, +0x0000,0x99aa,0x9a5c,0x9a58,0x9ade,0x0000,0x9c4f,0x9c51, +0x0000,0x9c53,0x0000,0x0000,0x0000,0x9dfc,0x9f39,0x0000, +0x513e,0x0000,0x56d2,0x0000,0x5b4f,0x6b14,0x0000,0x7a72, +0x7a73,0x0000,0x0000,0x0000,0x8b91,0x0000,0x0000,0x91bf, +0x0000,0x946c,0x0000,0x0000,0x96e6,0x9745,0x0000,0x97c8, +0x97e4,0x995d,0x0000,0x9b21,0x0000,0x9b2c,0x9b57,0x0000, +0x0000,0x9c5d,0x9c61,0x9c65,0x9e08,0x0000,0x0000,0x0000, +0x0000,0x0000,0x9f45,0x0000,0x0000,0x6205,0x66ef,0x6b1b, +0x6b1d,0x7225,0x7224,0x7c6d,0x0000,0x8642,0x8649,0x0000, +0x8978,0x898a,0x8b97,0x0000,0x8c9b,0x8d1c,0x0000,0x8ea2, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x9c6c,0x0000,0x9c6f,0x0000,0x9e0e,0x0000,0x9f08,0x9f1d, +0x9fa3,0x0000,0x0000,0x5f60,0x6b1c,0x0000,0x0000,0x0000, +0x7cf3,0x0000,0x8b9b,0x8ea7,0x91c4,0x0000,0x947a,0x0000, +0x0000,0x9a61,0x9a63,0x9ad7,0x9c76,0x0000,0x9fa5,0x0000, +0x7067,0x0000,0x72ab,0x864a,0x897d,0x8b9d,0x8c53,0x8f65, +0x947b,0x0000,0x98cd,0x98dd,0x0000,0x9b30,0x9e16,0x0000, +0x0000,0x0000,0x0000,0x0000,0x96e7,0x9e18,0x9ea2,0x0000, +0x9f7c,0x0000,0x7e9e,0x9484,0x0000,0x9e1c,0x0000,0x7c71, +0x97ca,0x0000,0x0000,0x0000,0x9ea3,0x0000,0x9c7b,0x9f97, +0x0000,0x0000,0x9750,0x0000,0x0000,0x0000,0x5727,0x5c13, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5fc8,0x0000, +0x0000,0x0000,0x0000,0x0000,0x6765,0x0000,0x0000,0x52bd, +0x0000,0x5b66,0x0000,0x65f9,0x6788,0x6ce6,0x6ccb,0x0000, +0x4fbd,0x5f8d,0x0000,0x6018,0x6048,0x0000,0x6b29,0x70a6, +0x0000,0x7706,0x0000,0x0000,0x0000,0x5a10,0x5cfc,0x5cfe, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x70c9,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9579,0x0000, +0x96ba,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x7b29,0x8128,0x0000,0x8a2e,0x0000,0x0000,0x0000,0x9ad9, +0x0000,0x582b,0x5845,0x0000,0x63fa,0x0000,0x0000,0x0000, +0x6e86,0x0000,0x0000,0x0000,0x0000,0x0000,0x5867,0x0000, +0x5bdd,0x656e,0x0000,0x0000,0x0000,0x8c87,0x0000,0x50d2, +0x50df,0x0000,0x0000,0x0000,0x0000,0x69ba,0x0000,0x6b9d, +0x0000,0x8059,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6f8a,0x0000, +0x0000,0x7bc3,0x7bc2,0x0000,0x0000,0x0000,0x0000,0x90f6, +0x0000,0x9823,0x0000,0x0000,0x0000,0x0000,0x0000,0x71cd, +0x7499,0x0000,0x0000,0x0000,0x0000,0x0000,0x9842,0x0000, +0x0000,0x0000,0x0000,0x7f84,0x0000,0x0000,0x0000,0x0000, +0x0000,0x8d0e,0x0000,0x9861,0x0000,0x0000,0x8b73,0x0000, +0x9c27,0x0000,0x9458,0x77d6,0x9b2d,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x4f66,0x4f68,0x4fe7,0x503f,0x0000,0x50a6,0x510f, +0x523e,0x5324,0x5365,0x539b,0x517f,0x54cb,0x5573,0x5571, +0x556b,0x55f4,0x5622,0x5620,0x5692,0x56ba,0x5691,0x56b0, +0x5759,0x578a,0x580f,0x5812,0x5813,0x5847,0x589b,0x5900, +0x594d,0x5ad1,0x5ad3,0x5b67,0x5c57,0x5c77,0x5cd5,0x5d75, +0x5d8e,0x5da5,0x5db6,0x5dbf,0x5e65,0x5ecd,0x5eed,0x5f94, +0x5f9a,0x5fba,0x6125,0x6150,0x62a3,0x6360,0x6364,0x63b6, +0x6403,0x64b6,0x651a,0x7a25,0x5c21,0x66e2,0x6702,0x67a4, +0x67ac,0x6810,0x6806,0x685e,0x685a,0x692c,0x6929,0x6a2d, +0x6a77,0x6a7a,0x6aca,0x6ae6,0x6af5,0x6b0d,0x6b0e,0x6bdc, +0x6bdd,0x6bf6,0x6c1e,0x6c63,0x6da5,0x6e0f,0x6e8a,0x6e84, +0x6e8b,0x6e7c,0x6f4c,0x6f48,0x6f49,0x6f9d,0x6f99,0x6ff8, +0x702e,0x702d,0x705c,0x79cc,0x70bf,0x70ea,0x70e5,0x7111, +0x7112,0x713f,0x7139,0x713b,0x713d,0x7177,0x7175,0x7176, +0x7171,0x7196,0x7193,0x71b4,0x71dd,0x71de,0x720e,0x5911, +0x7218,0x7347,0x7348,0x73ef,0x7412,0x743b,0x74a4,0x748d, +0x74b4,0x7673,0x7677,0x76bc,0x7819,0x781b,0x783d,0x7853, +0x7854,0x7858,0x78b7,0x78d8,0x78ee,0x7922,0x794d,0x7986, +0x7999,0x79a3,0x79bc,0x7aa7,0x7b37,0x7b59,0x7bd0,0x7c2f, +0x7c32,0x7c42,0x7c4e,0x7c68,0x7ca9,0x7ced,0x7dd0,0x7e07, +0x7dd3,0x7e64,0x7f40,0x0000,0x8041,0x8063,0x80bb,0x6711, +0x6725,0x8248,0x8310,0x8362,0x8312,0x8421,0x841e,0x84e2, +0x84de,0x84e1,0x8573,0x85d4,0x85f5,0x8637,0x8645,0x8672, +0x874a,0x87a9,0x87a5,0x87f5,0x8834,0x8850,0x8887,0x8954, +0x8984,0x8b03,0x8c52,0x8cd8,0x8d0c,0x8d18,0x8db0,0x8ebc, +0x8ed5,0x8faa,0x909c,0x0000,0x915c,0x922b,0x9221,0x9273, +0x92f4,0x92f5,0x933f,0x9342,0x9386,0x93be,0x93bc,0x93bd, +0x93f1,0x93f2,0x93ef,0x9422,0x9423,0x9424,0x9467,0x9466, +0x9597,0x95ce,0x95e7,0x973b,0x974d,0x98e4,0x9942,0x9b1d, +0x9b98,0x0000,0x9d49,0x6449,0x5e71,0x5e85,0x61d3,0x990e, +0x8002,0x781e,0x0000,0x0000,0x5528,0x5572,0x55ba,0x55f0, +0x55ee,0x56b8,0x56b9,0x56c4,0x8053,0x92b0}; + +static const int cns11643_14_ucs_table_size = (sizeof(cns11643_14_ucs_table)/sizeof(unsigned short)); + +/* UCS -> CNS11643 */ +static const unsigned int ucs_a1_cns11643_table[] = { +/* 0x0000 */ +0x00000,0x00001,0x00002,0x00003,0x00004,0x00005,0x00006,0x00007, +0x00008,0x00009,0x0000a,0x0000b,0x0000c,0x0000d,0x0000e,0x0000f, +0x00010,0x00011,0x00012,0x00013,0x00014,0x00015,0x00016,0x00017, +0x00018,0x00019,0x0001a,0x0001b,0x0001c,0x0001d,0x0001e,0x0001f, +0x00020,0x00021,0x00022,0x00023,0x00024,0x00025,0x00026,0x00027, +0x00028,0x00029,0x0002a,0x0002b,0x0002c,0x0002d,0x0002e,0x0002f, +0x00030,0x00031,0x00032,0x00033,0x00034,0x00035,0x00036,0x00037, +0x00038,0x00039,0x0003a,0x0003b,0x0003c,0x0003d,0x0003e,0x0003f, +0x00040,0x00041,0x00042,0x00043,0x00044,0x00045,0x00046,0x00047, +0x00048,0x00049,0x0004a,0x0004b,0x0004c,0x0004d,0x0004e,0x0004f, +0x00050,0x00051,0x00052,0x00053,0x00054,0x00055,0x00056,0x00057, +0x00058,0x00059,0x0005a,0x0005b,0x0005c,0x0005d,0x0005e,0x0005f, +0x00060,0x00061,0x00062,0x00063,0x00064,0x00065,0x00066,0x00067, +0x00068,0x00069,0x0006a,0x0006b,0x0006c,0x0006d,0x0006e,0x0006f, +0x00070,0x00071,0x00072,0x00073,0x00074,0x00075,0x00076,0x00077, +0x00078,0x00079,0x0007a,0x0007b,0x0007c,0x0007d,0x0007e,0x0007f, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x12170, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x12278,0x12234,0x00000,0x00000,0x00000,0x00000,0x00000,0x12131, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x12232, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x12233, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +/* 0x0100 */ +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +/* 0x0200 */ +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x1256f, +0x00000,0x1256d,0x1256e,0x12570,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x1256c,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +/* 0x0300 */ +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x12475,0x12476,0x12477,0x12478,0x12479,0x1247a,0x1247b, +0x1247c,0x1247d,0x1247e,0x12521,0x12522,0x12523,0x12524,0x12525, +0x12526,0x12527,0x00000,0x12528,0x12529,0x1252a,0x1252b,0x1252c, +0x1252d,0x1252e,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x1252f,0x12530,0x12531,0x12532,0x12533,0x12534,0x12535, +0x12536,0x12537,0x12538,0x12539,0x1253a,0x1253b,0x1253c,0x1253d, +0x1253e,0x1253f,0x00000,0x12540,0x12541,0x12542,0x12543,0x12544, +0x12545,0x12546}; + +static const int ucs_a1_cns11643_table_min = 0x0000; +static const int ucs_a1_cns11643_table_max = 0x0000 + (sizeof (ucs_a1_cns11643_table) / sizeof (unsigned int)); + +static const unsigned int ucs_a2_cns11643_table[] = { +/* 0x2000 */ +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x12139,0x12137,0x00000,0x1225d,0x00000, +0x12164,0x12165,0x00000,0x00000,0x12166,0x12167,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x1212d,0x1212c,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x1216a,0x00000,0x00000,0x1216b,0x00000,0x00000, +0x00000,0x00000,0x00000,0x1216f,0x00000,0x00000,0x12223,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +/* 0x2100 */ +0x00000,0x00000,0x00000,0x1226a,0x00000,0x12222,0x00000,0x00000, +0x00000,0x1226b,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x1242b,0x1242c,0x1242d,0x1242e,0x1242f,0x12430,0x12431,0x12432, +0x12433,0x12434,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x12635,0x12636,0x12637,0x12638,0x12639,0x1263a,0x1263b,0x1263c, +0x1263d,0x1263e,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x12258,0x12255,0x12257,0x12256,0x00000,0x00000,0x12259,0x1225a, +0x1225c,0x1225b,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +/* 0x2200 */ +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x12261,0x00000,0x00000, +0x00000,0x00000,0x12235,0x00000,0x00000,0x00000,0x1223c,0x12249, +0x12248,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x12245,0x12246,0x1224d,0x00000,0x00000,0x1224e,0x00000, +0x00000,0x00000,0x00000,0x00000,0x12250,0x1224f,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x12244,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x1223d,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x1223b,0x1223e,0x00000,0x00000,0x00000,0x00000,0x12239,0x1223a, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x12247,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x1224a, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +/* 0x2300 */ +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x14221,0x14222,0x14223,0x14224,0x14225,0x14226,0x14227,0x14228, +0x14229,0x1422a,0x1422b,0x1422c,0x1422d,0x1422e,0x1422f,0x14230, +0x14231,0x14232,0x14233,0x14234,0x14235,0x14236,0x14237,0x14238, +0x14239,0x1423a,0x1423b,0x1423c,0x1423d,0x1423e,0x1423f,0x14240, +0x00000,0x14241,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x12621,0x12622,0x12623,0x12624,0x12625,0x12626,0x12627,0x12628, +0x12629,0x1262a,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x1262b,0x1262c,0x1262d,0x1262e, +0x1262f,0x12630,0x12631,0x12632,0x12633,0x12634,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x12339,0x00000,0x1233a,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x1233c,0x00000,0x00000,0x00000, +0x1233d,0x00000,0x00000,0x00000,0x1233e,0x00000,0x00000,0x00000, +0x1233f,0x00000,0x00000,0x00000,0x12337,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x12336,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x12335,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x12334,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x12333,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x12344,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x12345,0x00000, +0x00000,0x12347,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x12346,0x00000,0x00000,0x12340,0x12341,0x12343, +0x12342,0x1234c,0x1234d,0x1234e,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x12324,0x12325,0x12326,0x12327,0x12328,0x12329,0x1232a, +0x1232b,0x12332,0x12331,0x12330,0x1232f,0x1232e,0x1232d,0x1232c, +0x00000,0x00000,0x00000,0x00000,0x12338,0x1233b,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x1217c,0x1217b,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x12175,0x12174,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x1217e,0x1217d,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x1217a,0x12179, +0x00000,0x00000,0x00000,0x12172,0x00000,0x00000,0x12176,0x12173, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x12348,0x12349,0x1234b,0x1234a,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +/* 0x2600 */ +0x00000,0x00000,0x00000,0x00000,0x00000,0x12178,0x12177,0x00000, +0x00000,0x12254,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x12251,0x12253,0x12252}; + +static const int ucs_a2_cns11643_table_min = 0x2000; +static const int ucs_a2_cns11643_table_max = 0x2000 + (sizeof (ucs_a1_cns11643_table) / sizeof (unsigned int)); + +static const unsigned int ucs_a3_cns11643_table[] = { +/* 0x2f00 */ +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x12121,0x12123,0x12124,0x12171,0x00000,0x00000,0x00000,0x00000, +0x12152,0x12153,0x1214e,0x1214f,0x12156,0x12157,0x1215a,0x1215b, +0x1214a,0x1214b,0x12265,0x00000,0x12146,0x12147,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x12168,0x12169,0x00000, +0x00000,0x12435,0x12436,0x12437,0x12438,0x12439,0x1243a,0x1243b, +0x1243c,0x1243d,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x12126,0x00000,0x00000,0x00000,0x00000, +/* 0x3100 */ +0x00000,0x00000,0x00000,0x00000,0x00000,0x12547,0x12548,0x12549, +0x1254a,0x1254b,0x1254c,0x1254d,0x1254e,0x1254f,0x12550,0x12551, +0x12552,0x12553,0x12554,0x12555,0x12556,0x12557,0x12558,0x12559, +0x1255a,0x1255b,0x1255c,0x1255d,0x1255e,0x1255f,0x12560,0x12561, +0x12562,0x12563,0x12564,0x12565,0x12566,0x12567,0x12568,0x12569, +0x1256a,0x1256b,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +/* 0x3200 */ +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x12221,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +/* 0x3300 */ +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x12275,0x12276, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x12270,0x12271,0x12272,0x00000, +0x00000,0x12274,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x12277,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x12273,0x00000, +0x00000,0x1224c,0x1224b,0x00000,0x00000,0x1226f}; + +static const int ucs_a3_cns11643_table_min = 0x2f00; +static const int ucs_a3_cns11643_table_max = 0x2f00 + (sizeof (ucs_a3_cns11643_table) / sizeof (unsigned int)); + +static const unsigned int ucs_i_cns11643_table[] = { +/* 0x4d00 */ +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x14421,0x14423,0x00000,0x14424,0xe2126,0xe2125,0x00000,0x22126, +0x14437,0x14435,0x14438,0x14436,0x22127,0x14462,0x2212f,0x2212d, +0x14461,0x14460,0x00000,0x00000,0x14562,0x14561,0x14560,0x00000, +0x14563,0x1455f,0x00000,0x00000,0x00000,0x00000,0x14722,0x14723, +0xe2262,0xe2261,0xe2263,0x00000,0xe243f,0x00000,0x14b64,0x00000, +0xe2121,0x00000,0xe212c,0x14439,0x00000,0x14463,0x22130,0x00000, +0x14464,0x22143,0x1486b,0x22531,0x00000,0x00000,0xe2122,0x00000, +0x1443a,0x14465,0x00000,0x14564,0x22144,0xe2740,0x00000,0xe2123, +0x00000,0x00000,0x22121,0x14425,0x00000,0x1443c,0xe2130,0x22128, +0x1443d,0xe212e,0x00000,0x14466,0x00000,0x14565,0x14567,0x14566, +0x00000,0x00000,0x14724,0x14725,0xe2345,0x00000,0x14b65,0xe2b22, +0x1537d,0x14422,0x00000,0x00000,0x22122,0x14426,0x1443f,0x1443e, +0x00000,0x00000,0xe2146,0xe2145,0x00000,0x00000,0x00000,0x00000, +0xe2264,0x14726,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0xe2440,0x00000,0x14b66,0x00000,0x00000,0x00000,0x00000, +0x00000,0xe2b23,0x00000,0x00000,0x00000,0x00000,0x15871,0x2334e, +0xe396c,0xe396e,0x1632a,0x24156,0x24157,0xe2124,0x14427,0xe212d, +0x14468,0xe2265,0x00000,0x14b67,0x14428,0x22129,0x14440,0xe2131, +0x00000,0x14469,0x1446b,0x22131,0x1446c,0x1446a,0x00000,0xe216c, +0xe2266,0x14727,0x00000,0x14b68,0xe2442,0xe2742,0x14b69,0x14f67, +0x00000,0x14441,0x1446d,0xe2147,0x14728,0x1472a,0x14729,0x00000, +0x1486c,0x00000,0x00000,0x14b6a,0x14b6b,0x14f68,0x14f69,0xe2b26, +0xe2b25,0xe2b27,0xe2b24,0x1537e,0x00000,0x00000,0x24158,0xe4033, +0x00000,0x26d44,0x14429,0x00000,0xe2132,0x00000,0xe2133,0x00000, +0x1446f,0x1446e,0x22132,0x14470,0x14476,0xe2149,0x14471,0x14472, +0x22134,0x22133,0x14474,0x14475,0xe214c,0x14473,0xe214b,0xe214a, +0x00000,0x00000,0x00000,0x00000,0x1456a,0x1456b,0x1456c,0x1456d, +0x14569,0x14570,0x2214a,0x00000,0x22146,0x22149,0x14571,0x14623, +0xe216d,0x22148,0x00000,0x1456e,0x1456f,0x14568,0xe2172,0xe2170, +0x22145,0x22147,0x00000,0x00000,0x00000,0x00000,0xe226f,0xe2268, +0x14737,0x2216f,0x14734,0x14738,0x22179,0x2216d,0x14735,0x22171, +0xe226b,0xe2267,0xe2276,0x14736,0xe226e,0x14739,0x00000,0x1472b, +0x22170,0x1473a,0x22174,0xe226d,0x22178,0x22175,0xe226c,0xe2274, +0x22172,0x1472c,0x1472e,0x1473b,0x00000,0x14730,0x2216a,0x14733, +0x14731,0x14732,0x2217a,0x22177,0x2216e,0x1472f,0xe2270,0xe2277, +0x2216b,0x1472d,0xe2275,0x00000,0xe2273,0x22173,0x00000,0x00000, +0x00000,0x00000,0x22176,0x00000,0x00000,0x00000,0x00000,0x00000, +0xe2272,0x00000,0x00000,0x00000,0x2216c,0x22328,0x00000,0x14924, +0x14875,0xe2450,0xe2448,0x22329,0x14872,0xe244f,0x14926,0xe2446, +0x1487a,0xe2445,0x14879,0x2227b,0x1487d,0x14878,0x22322,0x2232a, +0xe244e,0x22326,0xe2449,0x1487b,0xe244b,0xe2443,0x1487e,0x1486f, +0x14929,0x2227d,0xe2444,0xe244c,0x2253d,0x1486d,0x14925,0x1486e, +0x14876,0x14877,0x22324,0x2227e,0x1487c,0x14874,0x2227a,0x14870, +0x22327,0x14927,0x1492a,0x14873,0x14922,0x14928,0x14871,0x22325, +0x14923,0x2232b,0x2227c,0x14921,0x22321,0x00000,0xe6448,0x22323, +0xe6449,0x14b79,0x2253f,0x2254b,0x14b71,0xe2747,0x2254c,0x14b6c, +0x14b76,0x00000,0xe274f,0x14b6f,0x22539,0x14b77,0x22538,0x2253c, +0x22543,0x22541,0x14c21,0x14b7a,0x22533,0x22535,0x14b7c,0x14b70, +0x22536,0x22542,0x22549,0x14b75,0x2253b,0x22534,0x14b74,0x22537, +0x14b78,0x2253a,0xe2744,0x14b73,0xe2751,0x14b6e,0xe2748,0x14b7d, +0x22544,0x14b7e,0x22548,0xe2743,0x22546,0x2254a,0x14b7b,0x2253e, +0x22532,0x00000,0x22540,0x14b72,0x22545,0x14b6d,0x22547,0xe274c, +0xe2749,0xe274b,0xe274a,0xe274d,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x14f78,0x14f6c, +0xe2b2d,0xe2b2e,0x22922,0x2292a,0xe2b36,0x14f6b,0x14f73,0x15021, +0xe2b2c,0x22930,0x2292e,0x22929,0x00000,0xe6263,0xe2b2b,0x14f6d, +0x2292f,0x22925,0x14f7b,0x14f72,0x14f7a,0x2287e,0xe2b32,0x2292c, +0xe2b2f,0x22923,0x14f76,0x22924,0xe2b33,0x2287d,0x14f7d,0x14f70, +0x14f79,0x14f6f,0xe2b28,0x22921,0x22926,0xe2b29,0x2292d,0x14f77, +0x14f74,0x22928,0x14f7c,0x2292b,0x22927,0x14f71,0x14f7e,0x14f75, +0x14f6e,0x14f6a,0x00000,0xe2b35,0x00000,0xe2b34,0x00000,0xe644a, +0x00000,0x00000,0x00000,0x00000,0x22931,0x00000,0x1543a,0x15424, +0xe2f48,0x15434,0xe2f4d,0x15439,0x22d71,0x22d70,0x22d75,0x22d76, +0x15427,0xe2f44,0x15430,0xe2f58,0xe2f4c,0xe2f56,0x1543d,0xe2f46, +0x15431,0x00000,0xe2f4b,0xe2f49,0xe2f47,0x22d6a,0x1542a,0x22d6b, +0xe2f4f,0x1543f,0x00000,0x15436,0x15421,0x15422,0x22d7e,0x15924, +0xe2f53,0x1542f,0x1542e,0x22d6c,0x15432,0x2335e,0x15429,0x22d77, +0x15438,0x15437,0x1542d,0x22d6f,0x22d78,0xe2f45,0x22d69,0x1542c, +0x22d79,0x15435,0x22d6d,0x15423,0xe2f4e,0x15426,0x15425,0x22d7a, +0x15433,0x15428,0x1543c,0x1543e,0x22d74,0x1543b,0xe2f51,0x22d7c, +0x22d6e,0x22d7d,0xe2f43,0x22d72,0x00000,0x22d7b,0xe2f50,0x22d73, +0xe2f54,0xe2f55,0x00000,0x00000,0x1542b,0x00000,0x00000,0xe644b, +0x23366,0x2335a,0xe343c,0x15876,0xe343f,0x2335f,0x23365,0x15875, +0x23358,0x15879,0x2335c,0x23355,0x15877,0x23359,0x1587c,0x15923, +0xe3444,0x2336a,0xe3441,0x23354,0xe3442,0x1587d,0xe2f57,0x23369, +0xe3447,0xe343d,0x15878,0x2335b,0x15874,0x23356,0x23352,0x23360, +0x23353,0x23351,0x2335d,0x23363,0x23364,0x1587a,0xe3440,0x00000, +0x23a3f,0x23361,0x23350,0x23362,0xe344b,0x15926,0x23367,0x15925, +0x2334f,0xe3443,0x23357,0x23368,0x15921,0x1587e,0x1587b,0x15922, +0xe344c,0xe344a,0x15872,0xe3445,0xe3446,0x15873,0x00000,0x00000, +0x15e2e,0xe3975,0x23a42,0x23a3b,0x00000,0x15e2b,0x00000,0x23a43, +0xe3971,0xe3972,0x00000,0x23a39,0x23a3c,0x15e2a,0x23a3d,0xe396f, +0x00000,0x15e2d,0x23a41,0x00000,0x23a37,0x23a36,0x15e2f,0xe3970, +0x15e30,0x15e2c,0x15e31,0x23a35,0x23a40,0x23a3e,0x23a38,0x00000, +0x00000,0x00000,0x15e29,0x23a3a,0x00000,0x00000,0xe644d,0x00000, +0x00000,0x00000,0xe4039,0xe403c,0x16331,0x1632b,0x2415c,0x16334, +0x24162,0x24165,0x1632d,0x1632e,0x2415f,0x1632c,0x24168,0x16332, +0x24169,0xe403a,0x24164,0x16333,0xe4037,0x24159,0x16330,0x2415a, +0x00000,0x24163,0x24161,0xe403d,0x2415d,0x1632f,0x2415b,0x16335, +0x24160,0x24167,0x2415e,0x24166,0xe4036,0xe403e,0x1677c,0x16779, +0xe456b,0x1677a,0xe634c,0x24921,0x24877,0x16778,0x16775,0x24878, +0xe456e,0xe456c,0x16777,0x2487b,0xe456d,0x2487d,0xe4576,0xe634d, +0x24926,0xe4570,0xe4575,0x24925,0x2487e,0x16774,0x24876,0x16772, +0x24879,0x1677d,0x2487c,0xe4571,0x24922,0x16776,0x16773,0x24924, +0x24923,0x1677b,0x00000,0x2487a,0xe4574,0x16c23,0x24f54,0xe4b29, +0x24f51,0x16c24,0x00000,0x16c22,0xe4b2b,0x24f58,0x24f55,0x24f4e, +0x16c21,0xe4b2d,0x16c25,0x24f4f,0x16b7e,0x16c28,0x24f52,0x24f53, +0x16c26,0x16c27,0x24f59,0x24f56,0x24f57,0xe4b2c,0xe4b27,0xe644e, +0x17033,0x25643,0x17030,0x25640,0x17032,0x17034,0xe5031,0x25641, +0x17031,0x00000,0x25642,0xe5035,0x2563f,0xe5030,0xe5034,0x17341, +0x25c49,0x17342,0x25c47,0x00000,0x25c48,0x25c46,0x25c45,0xe5441, +0xe5440,0x25c4a,0x17340,0xe5033,0x00000,0x26144,0x26145,0xe5752, +0x24f50,0x26143,0x17343,0x1782b,0x26537,0x26538,0xe5c32,0x17a62, +0x17a63,0x26b4f,0x26b4e,0x17b58,0x17b57,0x26e7d,0xe606f,0x1442a, +0x14442,0x14478,0x00000,0x14477,0x14573,0x14572,0x1473e,0x1473d, +0x1473f,0x1473c,0xe2278,0x1492c,0x1492b,0x1492d,0xe2454,0x00000, +0xe2453,0xe2451,0x14c23,0x00000,0x14c22,0x14c24,0xe2752,0x15022, +0x00000,0x12279,0x22e21,0x1227a,0x15927,0x1227c,0x1227b,0x23a44, +0xe3976,0x1227d,0x1677e,0x1227e,0xe5e25,0x1442b,0xe2134,0x14479, +0x14740,0x14c25,0xe2b37,0x1442c,0x1447c,0x1447a,0x1447b,0x00000, +0x00000,0x14741,0xe227a,0x00000,0x00000,0x1492e,0x14c27,0x14c26, +0x14c28,0xe2e7b,0x00000,0x00000,0x15440,0x00000,0xe403f,0xe6453, +0x17035,0x00000,0xe2127,0x00000,0xe214d,0xe2148,0xe214e,0x2212e, +0x00000,0x14574,0x14575,0xe2178,0xe2179,0x14742,0x00000,0x2232c, +0xe2755,0x15024,0x15023,0x22e23,0x22e22,0x15928,0xe2128,0x1447d, +0x22135,0xe217a,0x00000,0x00000,0x00000,0xe2457,0x2254d,0xe2b39, +0x15025,0xe2f5b,0x15443,0xe2f59,0x15441,0x15442,0xe2f5a,0x00000, +0xe344d,0x00000,0x17036,0x00000,0x14576,0x00000,0x00000,0x00000, +0x14743,0x2217b,0xe227e,0xe227d,0xe227c,0xe2459,0x1492f,0x14930, +0xe245a,0x2232d,0x00000,0x00000,0x2254e,0x14c29,0x2254f,0x00000, +0x00000,0xe2b3b,0xe2b3d,0xe2b3e,0x22e25,0x22e26,0x15446,0xe2f5e, +0x22e27,0xe2f5f,0x22e24,0x15447,0x15445,0x15444,0x22e28,0xe344f, +0x2336b,0xe344e,0xe397d,0xe397a,0x23a45,0x00000,0xe397e,0x2416a, +0x24927,0xe4b2f,0xe4b2e,0xe4b30,0x16c29,0x17037,0x25644,0xe5442, +0x1442d,0x1443b,0xe212f,0xe2135,0xe2151,0xe217b,0x00000,0x00000, +0xe2322,0x00000,0x00000,0x00000,0xe245b,0xe2759,0x00000,0x00000, +0x15929,0x15e33,0x00000,0x16821,0xe457a,0x22123,0x1447e,0x00000, +0x14579,0x14577,0x14578,0x00000,0x00000,0x14c2a,0xe275a,0x00000, +0x1442e,0x1442f,0x00000,0x14443,0xe2136,0xe2152,0x14521,0x14522, +0x14523,0x2214c,0x1457a,0xe217d,0x2214b,0x00000,0x14747,0xe2325, +0x2217d,0x14745,0x14746,0x2217c,0xe2324,0xe2326,0x14748,0x14744, +0xe2327,0x00000,0x00000,0x00000,0x2232e,0x14f4f,0x2232f,0xe245f, +0xe2461,0x22330,0x00000,0xe245c,0x14932,0x14931,0xe245e,0xe245d, +0x14935,0x14933,0x14934,0xe2460,0x00000,0x00000,0x14c30,0xe275b, +0x14c2f,0x22554,0x22551,0x22552,0xe275e,0x22550,0x14c31,0x14c2d, +0x14c2c,0xe275f,0x14c2e,0x14c2b,0xe275d,0x00000,0xe644f,0x00000, +0x00000,0x14c32,0x00000,0x15027,0x22932,0xe2b3f,0x22553,0x1502c, +0xe2b40,0x22933,0x15028,0x1502b,0x1502a,0x15029,0x15026,0xe2b43, +0x00000,0x00000,0x22e2b,0xe2f68,0x1544a,0x22e2e,0x15448,0xe2f65, +0x00000,0xe2f62,0x22e2a,0x1544b,0x15449,0x1544c,0x22e2c,0x22e2d, +0xe2f60,0x22e29,0x22e2f,0xe2f66,0xe2f61,0xe2f63,0x00000,0xe2f64, +0xe3450,0x15e37,0x1592a,0x2336c,0x2336e,0x2336d,0x2336f,0x1592b, +0xe3a23,0x00000,0x15e34,0xe3a21,0x15e35,0x15e36,0xe3451,0x16337, +0x2416c,0xe4041,0x2416b,0x2416d,0x2416e,0x16338,0xe4040,0x16336, +0x24928,0x24929,0x16823,0x16822,0x24c61,0x00000,0xe4b31,0x16c2a, +0x16c2b,0x16c2c,0x16c2e,0x24f5a,0x24f5b,0x16c2d,0xe4b32,0x00000, +0xe5036,0x17038,0x00000,0x17039,0xe5037,0x00000,0x26539,0x26b51, +0x26b50,0x26e7e,0xe602c,0x14430,0xe2137,0xe2154,0xe2153,0x1457c, +0x1457b,0x00000,0x00000,0x14749,0x00000,0x00000,0x2217e,0x00000, +0xe2328,0x14937,0x14938,0x14936,0x14939,0x22331,0x22332,0x00000, +0x00000,0x00000,0x00000,0xe2463,0xe2462,0xe2761,0x00000,0x00000, +0x00000,0xe2760,0x00000,0x14c34,0x22555,0xe625a,0x14c33,0xe2762, +0x22934,0x15030,0x22935,0x1502f,0xe2b48,0xe2b46,0x00000,0x1502d, +0x00000,0x1502e,0xe2b47,0x00000,0xe2f6f,0x22e30,0xe2f6c,0xe2f6a, +0xe2f6d,0xe2f6e,0x1592c,0x23371,0xe3452,0x1592f,0x23370,0x15b2b, +0x1592e,0x1592d,0x00000,0x15e3a,0x00000,0x15e39,0x15e38,0x16339, +0xe4045,0xe4044,0x1633c,0x1633d,0x1633b,0x00000,0x1633a,0xe4046, +0x00000,0x2492a,0xe4621,0x2492b,0x00000,0xe457e,0xe4b33,0x24f5d, +0x16c2f,0x24f5c,0xe4d2c,0x1703a,0x25c4b,0x17344,0x00000,0x2653a, +0x17961,0x00000,0x14444,0x14524,0x22136,0xe2155,0x14525,0x14526, +0xe2156,0x00000,0x00000,0xe2223,0xe2222,0x1457d,0x1457e,0xe2224, +0x1474a,0x22333,0x22556,0x22557,0x00000,0x15031,0x22e31,0x15931, +0x15930,0x23a47,0x23a46,0x00000,0xe5038,0x14431,0x14527,0x14621, +0x00000,0x15932,0x22124,0x00000,0x2214d,0x14622,0xe2226,0x22222, +0x1474c,0x1474b,0x22221,0x1493a,0xe6450,0xe2465,0x00000,0xe2b49, +0x00000,0x00000,0x1544d,0x00000,0x00000,0x23372,0x00000,0x1633e, +0x2492c,0x16824,0xe4623,0xe4b34,0x25645,0xe5444,0xe5c34,0x2686a, +0xe2129,0x14528,0xe2157,0xe2466,0x22558,0x22936,0x15935,0x15933, +0x15934,0x14432,0x00000,0x14445,0x1243f,0x1452b,0xe2159,0x1452a, +0x14529,0x14625,0x14624,0xe232a,0x2214e,0x22223,0x00000,0xe232b, +0xe232d,0x14c38,0x14c35,0x14c37,0x14c36,0xe2763,0x00000,0x15032, +0xe2b4a,0x00000,0x15e3b,0x00000,0x14433,0xe215a,0x1452c,0xe2227, +0x14627,0x14626,0x00000,0x22334,0x00000,0xe6451,0x14c39,0xe2a5c, +0x00000,0xe212a,0x00000,0x00000,0x22137,0xe2228,0x14629,0x14628, +0x1474d,0x1474e,0x22335,0x1493b,0xe2467,0x1493c,0xe2765,0x14c3a, +0x14c3b,0x14c3c,0xe2766,0x15033,0x22937,0xe2b4b,0x00000,0x1544e, +0xe4047,0x00000,0x22125,0x00000,0x1452d,0x00000,0xe215b,0x00000, +0x00000,0xe2229,0x22224,0xe232f,0x00000,0x00000,0x22336,0x22337, +0x00000,0x00000,0x22559,0xe2767,0x2255a,0x00000,0x22939,0x22938, +0x2293b,0x2293a,0x15034,0xe6452,0x23373,0x15450,0x22e32,0x1544f, +0xe3454,0x00000,0x00000,0x00000,0x23a48,0x15e3c,0xe3a28,0x23a49, +0xe3a27,0xe404a,0xe4049,0xe4048,0x2492d,0x16825,0xe4625,0x00000, +0xe4626,0xe4b35,0x16c30,0xe5445,0x2653b,0x00000,0xe212b,0xe215c, +0x00000,0x22138,0xe222a,0x1462a,0x00000,0x00000,0xe2331,0x00000, +0x00000,0xe2769,0xe276a,0x15936,0xe3455,0xe3a29,0x00000,0x00000, +0x14434,0x14446,0x1452f,0x1452e,0xe215e,0x14530,0xe2160,0x00000, +0xe222b,0x00000,0xe2333,0x00000,0x14c3e,0xe276b,0x14c3d,0x14c3f, +0x00000,0xe2b50,0xe2b4f,0x15035,0xe2b4e,0xe2b4d,0x00000,0x15451, +0xe404b,0x25646,0x1763b,0x14447,0x1462c,0x1463b,0x14636,0x00000, +0x14631,0x14630,0x14637,0x14635,0x1462e,0x1463c,0x1462f,0x1462b, +0x1463a,0x14639,0x14638,0x1462d,0xe2231,0x14634,0xe222d,0xe222e, +0x14633,0xe222f,0x00000,0x1463d,0x14632,0x00000,0x00000,0xe2335, +0xe2337,0x14754,0x00000,0x1475a,0x14756,0xe2339,0x1475c,0x22225, +0x14759,0x1474f,0x14752,0x14755,0x14751,0x14758,0x1475b,0x14750, +0x14753,0x14757,0x1475d,0xe233a,0x00000,0xe233b,0xe2334,0x00000, +0x22340,0x2233d,0xe2476,0x14949,0x2233e,0x1493d,0x1493f,0x14957, +0x14952,0xe2479,0xe247e,0xe2475,0x22345,0x2233f,0x14941,0x14943, +0x22344,0x1494a,0x2233a,0x14956,0x14958,0x1493e,0x1494f,0xe2524, +0x22338,0x14955,0xe2477,0x14946,0xe247b,0x14950,0x14951,0x22339, +0x1494e,0x1494c,0xe2470,0x1494d,0x14953,0x22341,0x14940,0xe2521, +0x14954,0x22343,0x14948,0x14945,0xe2473,0x2233c,0x14944,0x22346, +0x14947,0xe247c,0x1494b,0xe2478,0xe2474,0xe246d,0x14942,0x22342, +0xe247d,0xe2522,0x00000,0x00000,0x2233b,0x00000,0x00000,0x00000, +0x00000,0x00000,0xe2523,0x00000,0x00000,0x00000,0x00000,0xe276e, +0x2256b,0x2256a,0x14c51,0x2256d,0x2256f,0x22564,0x22567,0x2256e, +0x14c52,0xe2774,0xe2778,0x22561,0x22565,0xe2775,0x00000,0x22569, +0x2294a,0x14c4d,0x2294e,0x14c40,0x22566,0x14c41,0x14c4e,0x14c47, +0x14c43,0xe2771,0x22562,0x14c46,0x14c4b,0x14c54,0x22563,0x2255c, +0x14c45,0x2255d,0x2255f,0x00000,0x14c48,0xe276c,0x14c4a,0x2255b, +0x22560,0xe2770,0xe2779,0x14c53,0x14c4f,0x22568,0x14c55,0xe2773, +0x14c4c,0x2255e,0x14c49,0xe276f,0xe2777,0x14c44,0x14c42,0x00000, +0x2256c,0x00000,0x14c50,0x00000,0x00000,0x00000,0xe2b5c,0xe2b5d, +0x22949,0x2293d,0x2294c,0xe2b57,0xe2b59,0x2293f,0x1503c,0x1504a, +0x15038,0x15049,0x15041,0x15046,0x15036,0x2293e,0x22944,0x15045, +0x22950,0x15047,0xe2b5b,0x1503d,0xe2b54,0xe2b5e,0x22946,0x22943, +0x1503b,0xe2b51,0x2293c,0x15048,0x2294b,0x15040,0x2294d,0x1504b, +0x15037,0x15042,0x1503f,0x22941,0x15043,0x22947,0x22948,0x1503e, +0x15044,0x1503a,0xe2b55,0xe6454,0xe2b63,0xe2b61,0x15039,0x22940, +0xe2b53,0x00000,0x00000,0x00000,0x00000,0x00000,0x22945,0x00000, +0x00000,0x00000,0xe2b58,0x00000,0x00000,0x00000,0x2294f,0x00000, +0x22e46,0x1545e,0x22e34,0x00000,0x22e39,0x15457,0x15462,0x22e37, +0x15452,0x1545c,0x15461,0x22e3e,0x00000,0x1545d,0x15460,0xe2f77, +0xe3021,0x22e41,0x15458,0x22e38,0xe2f74,0xe2f78,0xe3022,0x22e44, +0x22e45,0xe2f79,0x1545a,0x22e43,0x15456,0x15465,0x00000,0x22e3b, +0xe2f7b,0x15454,0xe2f7a,0x22e48,0x22e3c,0x22e40,0x15459,0x15464, +0x22e3d,0x1545f,0x22e42,0x22e49,0x23424,0xe2f73,0x22e47,0x15466, +0x15453,0x22e3f,0x22e36,0xe2f76,0x1545b,0x00000,0x00000,0x22e35, +0xe2f7e,0xe3025,0x22e3a,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x22e33,0x15463, +0xe6721,0xe345f,0x2337a,0xe3468,0x15949,0x2342a,0x15947,0x15944, +0x23421,0x15940,0x23425,0x1594b,0x23379,0x2337e,0x2337d,0x15455, +0x15946,0x23428,0xe3466,0x2342b,0x23376,0x00000,0x15e4e,0xe3467, +0x2342c,0x1594c,0x00000,0x1593e,0x1593b,0x23423,0x15938,0x00000, +0x23429,0xe345b,0x1593f,0x2342d,0xe3458,0x23377,0x23427,0x15942, +0x23378,0x2337b,0x23422,0xe3462,0xe3461,0x15943,0x15941,0x1594d, +0xe3457,0xe3a36,0xe3464,0x00000,0x15948,0xe345e,0x1593c,0x15a76, +0x00000,0x1593d,0x2337c,0x1594a,0x15945,0x23426,0x1593a,0x00000, +0xe3459,0x00000,0x15939,0xe6457,0x00000,0x00000,0x00000,0x00000, +0x00000,0xe6456,0xe6722,0xe6455,0x00000,0x23374,0x23375,0x23a4e, +0x00000,0x00000,0xe3a3c,0x15e3d,0x15e40,0x23a59,0x15e54,0x23a5c, +0x15e3e,0x23a55,0x15e44,0x15e4a,0x16143,0xe3a31,0xe3a38,0x15e48, +0x23a52,0x15e55,0x15e41,0x15e49,0x23a5a,0x2417c,0x23a5f,0x23a53, +0x00000,0x23a4a,0x23a57,0x23a51,0x15e47,0x23a5d,0xe3a2e,0xe3a2a, +0x15e43,0x15e57,0x15e50,0xe3a33,0x15e45,0x15e42,0xe3a40,0x15e4d, +0xe3a34,0x23a5e,0x23a50,0x23a56,0x23a58,0x23a4c,0x23a5b,0x15e3f, +0x23a4b,0xe3a42,0x15e46,0x15e56,0x15e52,0x23a4d,0x15e4c,0xe3a3b, +0x00000,0x15e53,0x15e4f,0x15e4b,0xe3a2f,0x23a54,0x00000,0x00000, +0x00000,0x00000,0xe6723,0x15e51,0x00000,0x00000,0x00000,0x2417a, +0x24176,0xe4051,0x24227,0x2416f,0x24178,0x1634c,0x1634d,0x16345, +0x24223,0x1634f,0x24174,0x24173,0x24171,0x24225,0x16343,0x2417d, +0x24172,0x16346,0x2417b,0x16341,0x24177,0x2417e,0x24222,0xe404e, +0x00000,0x24226,0x1634a,0x24170,0x16344,0x24175,0xe3a2b,0x1633f, +0x00000,0x1634b,0x24221,0x16347,0x16348,0x1634e,0x16342,0x12321, +0x16340,0x24179,0xe404c,0x00000,0x00000,0x00000,0xe6725,0x16349, +0xe6724,0x00000,0x24224,0x00000,0xe6458,0x00000,0x16835,0x16830, +0xe462e,0x2493c,0x24938,0xe4628,0x24932,0x1682a,0x16826,0x2493b, +0x16827,0x24935,0x24937,0xe4629,0x2493a,0xe4636,0x1682c,0xe462c, +0x16833,0x1682d,0x00000,0xe462a,0x24930,0x1682e,0x1682f,0x24933, +0x16834,0xe4634,0x24931,0x24936,0x1682b,0x2492f,0x16831,0x16829, +0xe4633,0x00000,0x00000,0x16828,0x24934,0x24939,0xe4631,0x16832, +0xe645a,0x00000,0xe6459,0x00000,0x00000,0x00000,0xe4650,0x2492e, +0xe4630,0x16c37,0x24f6e,0xe4b41,0x24f6b,0xe4b38,0x16c31,0x16c3d, +0x16c3e,0xe4b3d,0x16c34,0x24f69,0x16c36,0x24f61,0x16c3c,0xe4b44, +0x24f6d,0x16c33,0x24f6f,0x16c32,0x00000,0x24f6a,0x24f6c,0x16c35, +0x24f68,0x24f62,0x24f5f,0x00000,0xe4b3e,0x23a4f,0x24f65,0xe4b37, +0x24f5e,0x24f64,0x24f63,0xe4b3b,0x24f60,0xe4b43,0x16c39,0xe4b45, +0xe4b40,0xe4635,0xe4b3c,0x16c38,0xe4b39,0x00000,0xe4b3f,0x16c3a, +0x24f66,0x1703b,0x24f67,0x00000,0x00000,0x00000,0x2564f,0xe503f, +0x25648,0xe5040,0x17047,0x2564c,0x1703f,0x17043,0x2564b,0xe503b, +0x17042,0x1703e,0x17041,0x1703c,0x17046,0x2564d,0x25649,0x17045, +0x25647,0x17044,0x2564e,0x2564a,0x16c3b,0x00000,0x17048,0x25650, +0x17040,0x1703d,0x00000,0xe503d,0x00000,0xe5448,0x25c52,0x25c54, +0x17346,0x25c55,0x25c53,0x25c51,0x25c50,0x17348,0x25c4f,0x17349, +0x00000,0xe5449,0xe5447,0x00000,0x25c4d,0x25c4e,0x17345,0x1734a, +0x17347,0xe645d,0xe645b,0x25c4c,0xe575b,0x1763c,0xe575a,0x26148, +0x26146,0x2614b,0x26149,0xe5758,0x26147,0x2614a,0xe5759,0xe5757, +0xe575c,0x00000,0x00000,0x00000,0x00000,0x1782c,0x2653e,0x2653f, +0x1782d,0x00000,0x26540,0x2653c,0x26541,0x2653d,0x1763d,0xe5a2d, +0xe645e,0x00000,0x2686b,0x2686d,0x17964,0x2686c,0x17963,0x17962, +0xe6726,0xe6727,0xe645c,0xe5e26,0x17965,0x26b53,0x26b54,0x00000, +0x17a65,0x17a64,0x17a66,0x26b52,0xe6728,0x26d46,0x26d45,0xe5f40, +0x17b59,0x17b5b,0x17b5a,0x26d47,0x17c34,0x27034,0x00000,0x00000, +0x00000,0x17c5d,0xe6071,0x27033,0x2707c,0x00000,0x00000,0x2212a, +0xe2177,0x00000,0x1463f,0x1463e,0x00000,0x14760,0x1475f,0x22227, +0x1475e,0x22226,0x00000,0xe233e,0x1495b,0x22349,0xe252c,0x22348, +0x00000,0xe2526,0x14959,0x1495c,0xe252b,0xe252a,0x22347,0xe2529, +0x1495a,0xe2548,0xe2527,0xe2528,0x00000,0x00000,0xe2822,0x22570, +0xe277d,0x22571,0x14c56,0xe277c,0xe2821,0xe277b,0x00000,0x1504c, +0xe2b65,0x22e4a,0x22e4b,0x15467,0x15468,0xe3027,0x00000,0x2342f, +0x1594e,0x15950,0x2342e,0x1594f,0x23a60,0x15e58,0xe3a44,0xe3a43, +0x00000,0x00000,0x16350,0x16351,0x24228,0xe4052,0x16837,0xe4637, +0x16836,0x00000,0x24f70,0x25652,0x25651,0xe5f41,0x2715a,0x14448, +0x22139,0xe2161,0x2214f,0x22150,0xe2234,0x00000,0x00000,0xe6249, +0x14763,0x14767,0x22229,0x00000,0x14765,0x14764,0x22228,0x14766, +0x14762,0xe2341,0xe2342,0x14761,0x2222a,0xe233f,0xe2340,0x00000, +0x00000,0x00000,0x00000,0x14966,0xe2531,0xe253e,0x14963,0xe2530, +0x1495f,0x2234a,0xe2540,0xe2536,0xe252f,0x2234b,0xe253c,0x14961, +0xe252d,0x2234d,0x1495d,0x2234e,0x2234c,0x14960,0x14962,0x14965, +0x14964,0x1495e,0x2234f,0xe2532,0xe2541,0xe2542,0xe2533,0xe2538, +0xe2537,0xe645f,0x00000,0x00000,0x00000,0x00000,0x00000,0xe2535, +0x00000,0x14c5b,0x2257e,0xe2825,0x14c5d,0xe2823,0x14c5c,0xe2826, +0x22621,0x14c5a,0x14c59,0x22575,0x00000,0x22574,0xe2828,0x22572, +0x22577,0x22576,0x22573,0x2257c,0x2257d,0x2257a,0x22578,0x14c58, +0xe2829,0x00000,0x00000,0x2257b,0x14c5e,0x22622,0x00000,0xe282a, +0x22579,0xe2824,0x1504d,0x14c57,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0xe6460,0x1504e,0x22955,0xe2b69,0xe2b68,0x2295b, +0xe2b6c,0xe2b67,0xe2b6a,0x15054,0x22959,0x2295f,0xe2b71,0x22956, +0x2295a,0x2295c,0x2295e,0x22958,0xe2b70,0x22957,0x22952,0x22953, +0x1504f,0xe2b6b,0x15051,0x15050,0x22954,0x2295d,0xe2b6d,0xe2b72, +0xe2b6e,0x00000,0x00000,0x00000,0xe2b66,0x00000,0x15053,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x22951,0x22e55,0xe302a, +0x22e54,0x22e59,0x22e50,0xe3030,0x22e53,0x22e52,0xe302f,0x22e56, +0xe3038,0x22e5a,0x15469,0x1546c,0xe3034,0xe3035,0x22e51,0x22e57, +0xe3033,0xe3028,0xe3037,0x1546b,0x22e4c,0xe302b,0x15052,0x2343d, +0x22e58,0xe3036,0x22e4f,0x00000,0x1546a,0x22e4e,0x00000,0x00000, +0x00000,0x00000,0x00000,0xe3032,0x23434,0xe346e,0xe3471,0x15951, +0x15955,0x23444,0x23432,0x23440,0x15956,0x23442,0xe3472,0x23448, +0xe3474,0x2344c,0xe3469,0x00000,0x23443,0x23437,0x2343f,0xe346b, +0x2344d,0x2344b,0x23441,0x2343c,0x23435,0x23a68,0x23433,0x1595a, +0x2343a,0x1595b,0x15957,0x23430,0x23446,0x23438,0xe346f,0xe3475, +0x23436,0x23449,0x15958,0xe3476,0x2344f,0x15952,0x15954,0x2343e, +0x23439,0x1546d,0x15953,0x2343b,0x2344a,0x2344e,0x23445,0xe6461, +0x23447,0x00000,0xe6462,0xe6463,0x23431,0x00000,0x00000,0x00000, +0xe3a4a,0x23a63,0xe3a45,0x23a6c,0x23a6b,0x15e60,0x23a64,0xe3a47, +0x15e61,0x15e5f,0xe3a50,0x23a66,0x15e5c,0x23a6a,0xe3a4c,0x23a65, +0x23a67,0x23a61,0x15e5a,0xe6336,0x23a74,0x23a73,0x23a70,0x15e59, +0x15e5d,0x15e5e,0x22e4d,0x23a6d,0x15e5b,0x15959,0x23a6f,0x23a62, +0x23a72,0x23a71,0xe3a4e,0x23a75,0xe3a49,0x24236,0xe3a4b,0x23a6e, +0x00000,0x00000,0x00000,0x00000,0x00000,0xe6337,0x00000,0xe6464, +0x23a69,0x2422e,0x1635b,0x1635e,0x16359,0x2422d,0x24231,0x2422c, +0xe4057,0x16353,0x1635d,0x24229,0x16357,0x24230,0xe405b,0x16355, +0x16354,0x24233,0x16356,0x24235,0xe4056,0x24232,0x16352,0xe405e, +0xe405c,0xe4058,0x1635c,0x24237,0x2422b,0x24234,0xe405d,0xe6343, +0x2422a,0xe405a,0xe4059,0x16358,0xe4054,0x1635a,0x00000,0x2422f, +0x00000,0x24238,0xe4643,0xe463e,0x24944,0x16838,0x2494a,0xe4642, +0xe463c,0x1683d,0x24946,0x2494d,0x2493e,0x1683f,0x16839,0x24943, +0x16c3f,0x24942,0x2494b,0x1683a,0xe463d,0x1683e,0x24941,0x24947, +0x2494c,0x2493d,0x1683c,0x24945,0xe463a,0xe4645,0x24949,0x2494f, +0x2493f,0x24948,0xe4638,0x1683b,0x2494e,0xe4641,0xe4644,0xe4640, +0x24940,0x00000,0x00000,0xe6465,0x16c43,0x24f72,0x16c41,0x16c40, +0x24f74,0x24f79,0xe4b46,0x24f75,0xe4b50,0x24f78,0x16c46,0xe4b51, +0x1702e,0x16c45,0xe4b4b,0x24f71,0x24f77,0xe463f,0x16c44,0x24f76, +0xe4b4d,0x24f73,0xe4b49,0x16c42,0xe4b4f,0xe4b4c,0x00000,0xe4b47, +0x00000,0x00000,0x25657,0xe504a,0x25659,0x25654,0x1704a,0x25656, +0xe504b,0x17049,0x25658,0xe5048,0xe504c,0x1704c,0x2565a,0x1704b, +0x25653,0x25655,0xe5049,0x00000,0x00000,0xe544b,0x1734e,0x25c58, +0xe544c,0x1734d,0x25c59,0x1734c,0x25c57,0x1734b,0x25c56,0x00000, +0x1763f,0x1763e,0x26542,0x26544,0xe5a2f,0x26543,0x1782e,0x1782f, +0xe5a2e,0x00000,0x17830,0x2686e,0x17966,0x00000,0xe5e28,0x26f22, +0x26f21,0x17c5e,0x00000,0x14449,0x14531,0x00000,0xe2343,0x14967, +0xe2545,0xe2543,0xe2544,0xe282d,0x22960,0xe2b77,0x00000,0xe3477, +0x00000,0x15e62,0x15e63,0xe3a52,0x24239,0x16840,0x24950,0x24f7a, +0xe6466,0xe504d,0xe2139,0x2213a,0xe2235,0xe2344,0x22350,0x00000, +0xe2b7a,0xe2b79,0xe213a,0xe2546,0x22623,0x22961,0x22e5b,0x1546e, +0xe4646,0xe6560,0x26545,0x00000,0x17a67,0x1444a,0x14640,0x22151, +0xe2236,0x14768,0x14769,0x00000,0x14c5f,0x00000,0x00000,0xe3479, +0x1595c,0x00000,0x16842,0xe405f,0x16843,0x16841,0xe4b53,0x1444b, +0x00000,0x14532,0x14534,0x14533,0x2213b,0x14535,0x14641,0x22152, +0xe2238,0x14642,0xe2237,0x00000,0xe2239,0x00000,0xe2347,0x1476a, +0x1476b,0x00000,0x00000,0x00000,0x2222b,0xe2549,0x14968,0x00000, +0x22351,0x00000,0x00000,0x00000,0x14c63,0x22624,0x00000,0x14c61, +0x14c62,0x14c60,0x22e5c,0xe282e,0xe282f,0xe6467,0x15058,0x15057, +0x15059,0x15056,0xe2b7c,0x22962,0x14c64,0x15055,0x00000,0x1546f, +0x15470,0x00000,0x15471,0xe347b,0x23450,0xe347c,0xe347d,0x00000, +0x15e64,0x23a76,0x1595d,0xe3a53,0xe3a54,0x00000,0xe4060,0x1635f, +0xe4061,0x16845,0x16844,0x24951,0xe4648,0x16c47,0x1704d,0x00000, +0x2614c,0x26d48,0x26f23,0x1444c,0x14643,0xe223b,0x14644,0x22231, +0x1476d,0x14770,0xe234b,0x2222f,0x2222d,0x1476f,0x22230,0x22232, +0x2222c,0x14772,0x14771,0x1476e,0x1476c,0x2222e,0xe234d,0x00000, +0x00000,0xe2555,0x14973,0x00000,0xe254c,0x14970,0x22356,0x22359, +0x22358,0x00000,0x1496a,0x14972,0xe254b,0x00000,0x1496f,0x22355, +0x22353,0x1496e,0xe2556,0xe2553,0xe254e,0x14969,0x1496c,0xe2551, +0x22354,0x2235b,0x22357,0x1496d,0x14971,0x14974,0x22352,0x2235a, +0x1496b,0x00000,0x00000,0x00000,0xe2841,0xe2833,0x14c69,0x14c71, +0xe2838,0x22630,0x22629,0x14c72,0x22634,0x22625,0x2262c,0xe2845, +0xe2840,0x14c68,0x22626,0x14c66,0x2262d,0x22631,0x14c65,0xe283d, +0x22632,0x2262b,0xe2837,0x2262e,0xe2835,0x14c74,0x14c6b,0x22635, +0x22633,0xe283f,0x14c70,0x14c6e,0x2262a,0x14c6d,0x22628,0x22627, +0x14c6c,0x14c6a,0x14c73,0x14c6f,0x14c67,0xe2c26,0x2262f,0xe2846, +0x1505b,0xe2c2d,0x15062,0x22970,0x1505a,0x22968,0x22964,0xe2c21, +0x22974,0x22963,0xe2c2c,0x1505d,0x2296d,0x15060,0x15063,0xe2c2e, +0x1505e,0x22971,0x15061,0xe2c23,0x15478,0x22977,0x22965,0xe2c24, +0xe2c25,0x22967,0x2296e,0x22972,0x22976,0x22973,0x2296c,0x2296f, +0xe2c2b,0xe2c29,0x22969,0x15065,0x2296b,0x2296a,0x22975,0x1505c, +0x22966,0x15064,0xe2c2a,0x1505f,0xe2c28,0x00000,0x00000,0x00000, +0x00000,0x1547e,0x22e64,0xe3040,0x1547d,0xe2c27,0x00000,0x22e62, +0xe6270,0x15472,0xe304f,0x15477,0xe304a,0x22e61,0x22e5e,0x22e63, +0x15473,0x22e5d,0xe304e,0x15476,0x15474,0xe303e,0x22e65,0x15475, +0x15479,0xe303b,0xe3045,0x1547a,0xe3048,0x1547c,0xe3052,0x00000, +0x00000,0x1547b,0xe303c,0xe3522,0xe3538,0x22e5f,0x22e60,0xe304d, +0x00000,0xe304b,0x00000,0x22e66,0x00000,0x23457,0x1595e,0x23b26, +0x23456,0x23469,0xe3528,0xe3524,0x15964,0xe3531,0x23467,0xe3533, +0x15963,0x1595f,0x23470,0x23460,0x23463,0xe352e,0x15967,0x2346d, +0x23465,0x15960,0x15968,0xe352a,0x2346a,0x23468,0xe352f,0xe353b, +0x23459,0x2346e,0x23462,0x2345d,0xe353a,0x23453,0x2346f,0x2345f, +0x23452,0xe3539,0x15966,0x23464,0x23471,0x23461,0x23455,0x2345a, +0x23451,0xe3527,0x15965,0xe353c,0x2345e,0x2345b,0x15961,0x23454, +0xe3530,0x2346c,0x15962,0xe352b,0x2345c,0x23458,0xe3529,0xe3534, +0x2346b,0xe3532,0x00000,0xe3537,0x00000,0xe3535,0x00000,0x15e65, +0x23a7d,0xe3a75,0x23a7a,0x23b2d,0x23b21,0x23b2e,0xe3a7c,0x15e67, +0xe3a63,0xe3a61,0xe3a58,0x23b2a,0x23b27,0xe3a5b,0xe3a77,0xe3a72, +0xe3a59,0xe3a60,0x23b28,0x23b2b,0x23b2f,0xe3a7b,0x23466,0x23b31, +0x2424d,0xe3a66,0x15e68,0x23b32,0x23a78,0x23b24,0xe3a62,0x23b29, +0xe3a5c,0xe3a5e,0x15e66,0x15e69,0x23b30,0x23b33,0x23a7c,0x23a79, +0xe3a73,0xe3a5a,0x23a7b,0xe3a57,0xe3a7a,0x23b22,0x23a7e,0x15e6a, +0xe3a56,0x23b2c,0xe3a79,0xe3a78,0x23b23,0x00000,0x23b25,0x23a77, +0x24241,0x2423f,0x16368,0x16366,0x24249,0x24240,0x2424a,0x24246, +0x2423e,0x2424c,0x2423d,0x24244,0x16365,0x16364,0x16363,0x24242, +0x24247,0x16360,0x16367,0xe4067,0x2423b,0xe4066,0x24245,0x2423a, +0x24243,0x16361,0x24248,0x2423c,0x16362,0x2424b,0xe4064,0xe3a6b, +0xe406a,0xe6468,0x00000,0xe6469,0x00000,0x24955,0x1684a,0x16849, +0x1684b,0x24961,0x24957,0x2495d,0x24952,0x24960,0x2495f,0x24963, +0x2495c,0x16846,0x2495b,0x1684c,0xe464c,0x24954,0x16847,0xe464a, +0x24962,0x16848,0x24956,0x24959,0x2495e,0x24958,0x24953,0xe464f, +0xe4653,0x00000,0x00000,0x2495a,0x24f7c,0x16c4b,0x25021,0x24f7e, +0x25023,0x25025,0xe4b5c,0x16c49,0xe4b58,0x24f7d,0xe4b54,0x24f7b, +0xe4b5e,0x25026,0x25024,0x25022,0xe4b56,0x25028,0xe4b5a,0x25027, +0x16c4d,0x16c48,0xe4b5b,0x16c4a,0x16c4c,0xe4b5d,0xe4b5f,0x25029, +0x25661,0xe5050,0xe5053,0x25660,0x2565f,0xe5051,0x25662,0x2565b, +0xe504f,0x2565c,0x25664,0x2565d,0xe5054,0x1704e,0x25666,0xe504e, +0x25665,0x2565e,0xe5056,0x25c5d,0x17351,0x25c5b,0x25c60,0x25c5f, +0x25663,0xe5450,0x17350,0xe544e,0x25c5e,0x25c5a,0x25c62,0x25c61, +0x1734f,0xe5452,0x25c5c,0xe544f,0x1704f,0xe5451,0x00000,0xe5453, +0x17640,0xe5a31,0xe5761,0xe575e,0x2614d,0x26546,0x26547,0x26548, +0x17967,0x00000,0xe5c36,0x17968,0xe5c39,0x2686f,0xe5c3a,0x26b56, +0x26b55,0xe5e29,0xe5f42,0x26d49,0x26d4a,0x26f24,0x27035,0xe6073, +0x1444d,0x1444e,0x00000,0x1444f,0x14536,0x14645,0x22233,0x14773, +0x14774,0x00000,0x14977,0x14978,0x14976,0x14975,0x00000,0x14c75, +0xe2848,0x00000,0x22636,0x14c77,0x14c76,0x22637,0xe625c,0xe646a, +0x00000,0x15066,0xe2c2f,0x15521,0x22e67,0x00000,0x23473,0x00000, +0x15969,0x15e6c,0x23472,0x15e6b,0xe4071,0x1684d,0xe4072,0x24964, +0x17050,0xe5057,0x17352,0x25c63,0xe5a34,0x17969,0xe5c3b,0x17b5c, +0xe213b,0x22153,0xe223d,0x14646,0x22154,0x14777,0xe2350,0x14775, +0x14776,0x14778,0x00000,0x1497a,0x14979,0xe255a,0x2235c,0x1497b, +0x00000,0x00000,0x2235d,0x22638,0xe284c,0x22639,0xe284a,0x14c78, +0x14c7a,0x14c7c,0x14c79,0x14c7d,0x14c7b,0xe284e,0xe284b,0xe284d, +0x00000,0x00000,0x1506a,0x15067,0x15069,0x1506b,0x15068,0x22e68, +0x22978,0x00000,0x00000,0xe2c32,0x22e6a,0x22e69,0x15527,0x00000, +0x15523,0x00000,0x00000,0x15524,0x15526,0x15528,0x15525,0xe3057, +0x1552a,0x15529,0x00000,0xe3056,0xe3055,0x00000,0x00000,0x1596e, +0x23475,0x23474,0x1596d,0xe3541,0x1596c,0x1596b,0x1596f,0x1596a, +0xe353f,0x00000,0x23b39,0x23b36,0x15e6e,0x23b35,0x23b3a,0x00000, +0x15e70,0x23b38,0x15e6d,0x15e6f,0x23b37,0xe3a7e,0x2424e,0xe4074, +0x2424f,0x24250,0xe4075,0xe4076,0xe4073,0xe6345,0x1684e,0x16856, +0x24965,0x16850,0x16854,0x24966,0x16855,0x16851,0x16852,0x1684f, +0x16853,0x16c50,0x23b34,0x16c51,0x16c4f,0x00000,0x16c4e,0x25667, +0x17051,0x25c64,0x25c65,0xe5a35,0x00000,0x17831,0x1796a,0xe5e2a, +0x14450,0xe223e,0x14779,0x00000,0x00000,0xe255e,0xe255c,0xe255d, +0xe2850,0x1506c,0x00000,0x22e6b,0x1552b,0xe3058,0xe3059,0x15972, +0x15971,0x15970,0x15e71,0x15e72,0x23b3b,0x16857,0x17052,0x14451, +0x2213c,0x14537,0x22155,0xe624a,0xe223f,0x22234,0x1477a,0x00000, +0xe2352,0xe2851,0x14c7e,0xe2c34,0x00000,0x00000,0xe3b24,0x24251, +0xe4078,0xe6525,0x14452,0x00000,0x14538,0x22235,0x00000,0x00000, +0x2235e,0x00000,0x2235f,0xe255f,0x1497c,0x00000,0x00000,0xe2c35, +0x23b3c,0x15e73,0x00000,0x24252,0x00000,0x00000,0xe5454,0x17353, +0x14453,0x14467,0x14539,0x22156,0x14647,0xe2354,0x14a22,0x14a21, +0x1497d,0x1497e,0x00000,0x00000,0x2263a,0x14d22,0x14d23,0x2263b, +0x14d21,0xe2854,0xe2855,0x15070,0x22979,0x1506f,0x1506d,0x1506e, +0x1552e,0x1552c,0xe305a,0xe305b,0x22e6d,0x1552d,0x22e6c,0xe646b, +0x15522,0x23476,0x00000,0xe3543,0x15974,0x15975,0xe3b26,0xe3b25, +0x15973,0xe3544,0x16858,0x24967,0x16c52,0x16c53,0x00000,0x2502a, +0x17354,0x2614e,0x2614f,0xe5a38,0x17a68,0x27036,0x2212b,0x1453a, +0x00000,0x14454,0x00000,0x22158,0x22157,0x00000,0x00000,0xe646c, +0xe2355,0x1477b,0x22237,0x22238,0x22236,0x00000,0x22239,0x00000, +0xe235a,0x00000,0x00000,0x00000,0xe2561,0xe2566,0x22367,0x00000, +0x22362,0x22364,0x22366,0x22363,0x14a26,0x22360,0xe2562,0x22361, +0x14a23,0x14a24,0x22365,0x22368,0x14a25,0x22369,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0xe2563,0x22649,0xe285d,0x22643, +0x2263e,0x14d25,0x22646,0x22644,0x2263d,0x2264a,0x2264d,0x22648, +0x22641,0x14d27,0x22647,0x14d28,0x22642,0x22645,0x2263c,0x22640, +0x2264c,0x14d29,0x00000,0x14d2a,0xe285e,0x2263f,0x2264b,0x14d24, +0x14d26,0xe285c,0xe285f,0xe2857,0x00000,0x00000,0x00000,0x00000, +0x00000,0xe2858,0x00000,0x00000,0x00000,0x00000,0x22a2c,0x22a25, +0x22a2b,0x22a24,0x22a26,0x2297e,0x2297c,0xe2c3f,0x22a2d,0x22a2a, +0x2297a,0xe2c3b,0x15072,0x22a28,0x22a29,0xe646d,0x22a27,0x2297d, +0x2297b,0x15071,0x22a23,0x22a21,0xe2c3c,0xe2c42,0x22a22,0x22a2e, +0x00000,0xe2c3e,0xe2c41,0x00000,0x00000,0xe2c43,0xe2c3d,0x00000, +0x15533,0xe3063,0x15532,0xe305f,0x22e6e,0x1552f,0x22e70,0xe3064, +0x15534,0x22e71,0x00000,0xe3061,0x15537,0xe3062,0x15535,0x22e72, +0x22a2f,0x22e74,0xe305e,0x15531,0xe6271,0x15530,0xe6272,0x22e6f, +0x22e73,0x15536,0x00000,0x00000,0x00000,0x00000,0x15977,0x15976, +0xe354b,0xe3548,0xe3547,0x23478,0x2347c,0x2347e,0x15978,0x23523, +0xe3551,0x1597c,0x23525,0xe3552,0x1597e,0xe354f,0x1597a,0x15a24, +0xe3555,0x15a21,0x2347a,0x15979,0xe3b2b,0x23479,0x23477,0x23527, +0x2347b,0xe3546,0x1597b,0x23526,0x15a22,0x23522,0x23521,0x15a23, +0x2347d,0x1597d,0xe354e,0x00000,0xe354a,0x00000,0x23528,0xe3554, +0x23524,0x23b4b,0x23b52,0x23b47,0x15e76,0x23b43,0x23b53,0x23b3d, +0x23b50,0x23b4e,0x23b48,0xe3b36,0x23b51,0x23b4a,0xe3b28,0x23b42, +0x23b54,0x23b40,0x23b4d,0x23b3e,0xe3b27,0x23b55,0xe3b37,0x15e77, +0xe3b2a,0x23b4f,0x24255,0x23b41,0x15e74,0xe3b2e,0x23b45,0xe3b34, +0x15e75,0x23b44,0x23b49,0xe3b33,0x00000,0x23b46,0x00000,0xe3b31, +0x00000,0x23b4c,0x00000,0xe3b2d,0x00000,0x00000,0x24259,0x00000, +0xe4121,0x00000,0x2425c,0x24254,0xe407c,0x24256,0xe407a,0x2425b, +0x2425a,0x16369,0x00000,0x23b3f,0x24258,0xe4079,0xe407d,0x1636a, +0x00000,0x24253,0x24257,0x00000,0x00000,0xe646e,0x00000,0x2496e, +0xe465c,0x24975,0x2496c,0xe4654,0x24973,0x2496a,0x24972,0x24976, +0x24969,0x2496d,0x24968,0xe4656,0x16859,0x00000,0x2496b,0x1685a, +0x24971,0x24970,0x2496f,0xe4659,0xe465a,0x24974,0xe646f,0xe4b65, +0xe4b66,0xe4b63,0x2502e,0x25030,0x16c55,0x25031,0xe4b6b,0x2502c, +0xe4b67,0x2502b,0x25035,0xe4b69,0x25033,0x16c54,0x25036,0x2502d, +0x25032,0x25034,0x2502f,0xe4b6a,0xe4b68,0xe6470,0xe5058,0x2566b, +0x25670,0x2566a,0x2566f,0xe505b,0x25668,0x25672,0x2566e,0x25673, +0x2566d,0x25669,0x25671,0xe505a,0x25674,0x2566c,0xe6471,0x25c66, +0x17358,0xe5457,0x17356,0xe5459,0x17355,0x17357,0xe5455,0xe6472, +0x26150,0xe5762,0x2643e,0x26549,0xe5a39,0x00000,0x26870,0x26871, +0xe5c3d,0x1796b,0xe5c3c,0x26b57,0xe5c3e,0x17a69,0x00000,0x26b58, +0xe5e2d,0x26d4c,0x17b5e,0xe5f43,0x17b5d,0x26d4b,0x17c35,0xe6030, +0x26f25,0x00000,0x00000,0xe213c,0x00000,0x14455,0x1477c,0x2223a, +0x2236a,0x14b56,0x15a25,0xe3557,0xe4b6c,0x14456,0x1464a,0x14649, +0x14648,0x00000,0x00000,0x14a27,0x00000,0x00000,0x15538,0x00000, +0x2425d,0x14457,0x14458,0x14459,0x1453b,0xe2567,0xe2860,0x15073, +0x00000,0x22a30,0xe2c45,0xe2c44,0x00000,0x15e78,0x1445a,0x2213d, +0xe2163,0x00000,0x1464b,0x1464c,0x22159,0x00000,0x1477d,0x00000, +0xe235c,0xe2568,0x2236b,0xe256b,0x14a28,0x00000,0x2236c,0x00000, +0x00000,0x14d30,0xe2862,0xe2861,0x2264f,0x14d2e,0x14d2d,0x2264e, +0x14d2b,0x22650,0x14d2c,0x14d2f,0x00000,0x15074,0xe2c46,0x15076, +0x22a34,0x22a31,0x22a32,0x22a33,0x22a35,0x15075,0x00000,0x00000, +0x22e76,0x22e75,0xe3066,0x1553a,0xe3069,0x15539,0xe3068,0xe306a, +0xe3067,0x00000,0xe355b,0x15a28,0x2352a,0xe3559,0x15a27,0x15a29, +0x15a26,0xe3558,0xe355a,0x00000,0x00000,0x15e7a,0x23529,0x00000, +0x15e7b,0x23b57,0xe3979,0x15e7c,0x23b56,0x15e79,0xe3b3a,0xe3b3b, +0xe3b3d,0x00000,0x24260,0x24262,0x1636b,0x24261,0x2425f,0x2425e, +0x00000,0x00000,0xe465d,0x24979,0x1685f,0x1685d,0x00000,0x1685e, +0x24977,0x24978,0xe4b6d,0x1685b,0x2503a,0x25038,0xe4b70,0x16c57, +0x25039,0x16c58,0x16c56,0x1685c,0x00000,0xe6473,0x25677,0x25675, +0x25676,0x25037,0x25c68,0x17359,0x25c67,0x26151,0x26152,0x25678, +0x2654a,0xe6677,0x1445b,0x1464d,0x14821,0x2223b,0x1477e,0xe2863, +0x14d31,0x1636c,0xe213d,0x1453c,0x1464e,0x15077,0x15e7d,0xe213e, +0x2215a,0xe2247,0x2215b,0xe2248,0x2223c,0xe6678,0x00000,0x14a2a, +0x22370,0x2236e,0x14a2b,0x2236d,0x2236f,0x22371,0x00000,0x14a29, +0xe256e,0x00000,0xe256d,0x00000,0x00000,0x14d35,0x14d36,0x14d33, +0xe2865,0xe2867,0x14d32,0x22a39,0x14d34,0xe2868,0x00000,0x00000, +0x15078,0xe2c48,0x22a38,0x22a3a,0x22a37,0x22a3b,0x15079,0x1553d, +0x22e77,0xe306c,0x22e79,0x1553b,0x22e7a,0x1553c,0x22e78,0xe306b, +0x22a36,0x2352b,0x2352e,0x2352f,0x2352c,0x15a2d,0x15a2c,0x15a2a, +0x15a2b,0x2352d,0xe3561,0xe3560,0x00000,0xe3b3f,0x15a2e,0xe3b40, +0xe3b3e,0x15f21,0x15f22,0x00000,0x15f23,0x24263,0x24265,0x24267, +0x1636e,0x1636d,0x15e7e,0x24266,0x24264,0xe6474,0x2497d,0xe4661, +0xe4660,0x2497b,0x24a23,0x16860,0x24a24,0x24a21,0x16861,0x2497c, +0x2497a,0x24a22,0x16c5a,0x2503c,0x2497e,0x16c5c,0x2503d,0x16c5b, +0x16c5e,0x2503e,0x16c59,0x16c5d,0x00000,0x2567d,0x2567b,0x2567a, +0x2567c,0x25679,0xe505c,0x00000,0x17833,0xe6475,0x26872,0x26873, +0xe5c3f,0x26b59,0x26d4d,0x17d22,0xe213f,0xe2361,0x14d37,0x14a2c, +0xe2869,0xe286b,0x1507a,0xe2c4c,0xe2c4b,0xe306e,0x1445c,0x1453d, +/* 0x5f00 */ +0x00000,0x1464f,0x2223d,0xe256f,0x14a2d,0x22372,0xe286d,0x22a3c, +0x1507b,0x00000,0x16862,0x1445d,0xe2164,0xe2249,0xe2362,0x14822, +0x00000,0xe3b42,0x1636f,0x1445e,0x1453e,0x1453f,0x00000,0x14651, +0x14650,0x00000,0x2223e,0x14823,0x00000,0x22373,0xe2571,0x14a2e, +0x00000,0xe286e,0x22652,0x22653,0x22654,0xe2870,0x14d38,0x14d39, +0x22651,0x14d3a,0x00000,0x00000,0x00000,0x1507c,0x22a3d,0xe2c4d, +0x22e7c,0x1553e,0xe306f,0x22e7b,0xe3562,0x15a2f,0x23530,0x15a30, +0x23531,0xe3563,0xe3b47,0xe3b45,0x15f24,0x00000,0xe3b44,0x00000, +0x24268,0x00000,0xe4122,0x24a26,0x24a25,0x00000,0x16863,0x00000, +0x16c5f,0x2503f,0x17053,0x2567e,0x1735a,0xe5763,0x17b5f,0x26f27, +0xe2140,0xe2141,0xe224a,0xe2351,0x22655,0xe2871,0x22a3e,0x15a31, +0x23b58,0x16370,0xe4123,0xe505e,0x00000,0xe5764,0x17641,0x00000, +0xe6164,0xe2142,0x14a30,0xe2572,0x14a2f,0x1507d,0xe2c50,0x22e7d, +0x00000,0x15a33,0x15d29,0x15a34,0x15a32,0x15f25,0xe4124,0x24a27, +0x16864,0x16c60,0xe5f45,0x2212c,0x2223f,0x00000,0x22375,0x14a31, +0x22374,0x14a32,0x00000,0x00000,0x14d3e,0x22658,0x22657,0x14d3d, +0x14d3b,0x14d3c,0x22656,0xe2876,0xe2875,0x15121,0x22a3f,0x15124, +0x1507e,0x15126,0x15122,0x15123,0x15125,0xe6264,0xe3070,0xe3072, +0x15541,0x15540,0x1553f,0xe3071,0xe6476,0x00000,0x23533,0x15a35, +0x15a38,0x15a36,0xe6477,0x23532,0x15a3b,0x00000,0x15a37,0x23534, +0x15a3a,0x15a39,0x00000,0x00000,0x00000,0x23b5a,0x23b59,0xe3b4b, +0x15f28,0x15f26,0x15f27,0x23b5b,0x16371,0x2426a,0x16372,0x24269, +0x00000,0x00000,0x25040,0xe4663,0xe4664,0x16c62,0x24a28,0x16c61, +0xe4b72,0x16865,0xe6478,0x25722,0x25721,0x1735b,0x25c69,0x2654b, +0x26874,0x26875,0xe5e2f,0x14540,0x00000,0x14652,0x00000,0xe224d, +0xe6251,0x2215c,0xe224c,0x00000,0x14a34,0x14a36,0xe2578,0x22242, +0x22378,0x22377,0x22376,0xe2366,0x22241,0x22240,0x14825,0x14a35, +0x14a33,0x14824,0xe2367,0xe2369,0xe2577,0x14d3f,0x22659,0xe257b, +0x14d40,0x2237d,0x00000,0x22421,0x2237e,0x2265a,0xe2576,0xe2574, +0x2237a,0xe287e,0x14a3a,0x14a38,0xe257c,0x22379,0x2237b,0x22423, +0xe2622,0x14a37,0xe2621,0x2237c,0x22427,0x14d42,0xe257d,0x22424, +0x14a39,0xe2623,0x22422,0x22425,0xe257a,0x14d41,0xe2575,0x14d43, +0x22426,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0xe2878, +0xe2922,0x2266e,0x22661,0x2265f,0x2266d,0x22668,0x1512b,0x14d44, +0x22669,0x2266c,0x15127,0x2266b,0x14d45,0x14d4a,0x14d48,0x22662, +0xe6266,0x2265d,0x22664,0x14d4f,0x2266f,0x15128,0x22665,0x00000, +0x15129,0x14d4b,0x22667,0xe2c5a,0x22a4e,0x1512a,0x2265c,0x14d4c, +0x1512c,0x14d4d,0x14d49,0x14d4e,0x22666,0x2265b,0x2266a,0x14d46, +0xe2877,0xe2c5b,0x2265e,0x22663,0x22660,0x14d47,0xe287a,0x22a40, +0x00000,0x22a41,0x00000,0x00000,0x00000,0xe2921,0x00000,0x00000, +0x22a4b,0x22f23,0x22a4c,0x15132,0x22a4f,0x22a45,0x15131,0x22a47, +0xe6267,0x22a48,0xe2c60,0xe3079,0x22a4a,0x1512d,0xe2c56,0xe3073, +0x15545,0xe2c57,0xe2c5d,0x22a46,0x22a42,0x15546,0xe307e,0x00000, +0x22a50,0x15542,0x22f21,0x22a49,0xe2c54,0x22e7e,0x22a44,0x22a4d, +0xe2c5f,0xe2c61,0x15130,0x15543,0x15136,0x15544,0x22a51,0x22f22, +0x1512f,0x15548,0x15135,0x15134,0x15133,0x15547,0x22a52,0x15549, +0x1512e,0x00000,0x22a43,0xe307a,0xe3078,0xe307b,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0xe2c5c,0x00000,0xe3076,0x15a3c, +0x22f26,0x22f28,0x00000,0x22f2a,0x1554a,0x15550,0x23537,0x22f2e, +0x22f25,0x15a3e,0x23535,0xe3122,0x1554f,0x1554d,0x22f30,0x00000, +0x23536,0x00000,0x22f27,0xe3125,0x1554e,0x22f2b,0x15551,0x22f2d, +0xe3568,0xe3074,0x1554c,0x22f2c,0x22f2f,0x22f29,0xe3127,0x1554b, +0x15a3f,0xe3571,0x22f24,0x15a3d,0xe3572,0x00000,0xe3123,0xe3128, +0x15a40,0xe3121,0xe356f,0x00000,0x00000,0x00000,0xe3126,0x00000, +0x23539,0x23542,0x15f2b,0xe3b54,0x15a42,0x15a47,0x15f2c,0x23544, +0x15a4e,0x23b5d,0x2353a,0x15a46,0x15a49,0x15a44,0x23538,0x23546, +0x23549,0x23b6c,0x00000,0x23547,0x23b61,0x15a45,0x15a4c,0x15a50, +0x23541,0x23b5c,0x23545,0x15a41,0x23b5e,0x23548,0x23b60,0x2353d, +0xe356a,0x15f29,0xe3b56,0x2353b,0x2353c,0x15a4b,0xe3b55,0xe356e, +0x15a4a,0x2353f,0x15a4f,0x23543,0x15a48,0x23540,0xe3579,0x15a4d, +0x15f2d,0x15f2a,0x23b5f,0xe3b58,0x2353e,0xe3b59,0x15a43,0xe3576, +0x00000,0xe3b5a,0xe3b4d,0x00000,0x00000,0x00000,0xe3574,0x00000, +0x15f32,0x15f36,0x23b63,0x16377,0x15f34,0x23b67,0x15f38,0x2426b, +0x23b69,0x16379,0x15f30,0x15f33,0x23b6a,0xe3b5e,0x23b6b,0x23b71, +0x15f3a,0x1637a,0x00000,0x23b6d,0x23b72,0x23b66,0x16426,0xe3b4f, +0x1637b,0x15f39,0x23b64,0x23b73,0xe3b51,0x16425,0x15f37,0x16374, +0x23b70,0xe3b5d,0x15f3b,0x23b68,0x23b62,0x15f31,0x23b65,0x00000, +0x23b6e,0xe412b,0x16373,0x16378,0x15f2e,0x23b6f,0xe3b61,0x16376, +0xe3b62,0xe3b63,0xe3b50,0x15f2f,0x00000,0xe6479,0x00000,0x16424, +0x24a2a,0x24276,0xe4129,0x2426e,0x24a29,0x00000,0x24272,0x24274, +0xe4127,0xe412c,0x24271,0xe466f,0x16423,0x00000,0x24270,0x16427, +0xe466e,0x00000,0xe4128,0x24a39,0xe466c,0xe412e,0x16422,0x16867, +0x24277,0x24a2b,0xe466d,0xe412a,0x1637e,0x2426f,0x24273,0x16866, +0x16375,0x2426c,0x2426d,0x16868,0x1637d,0x16421,0x1637c,0x24275, +0xe647a,0x00000,0x24a2f,0x24a30,0x24a35,0x16c67,0x24a3c,0xe4b73, +0x1686e,0xe4b7e,0x1686d,0x24a37,0xe4b74,0x16c66,0x24a2c,0x1686c, +0xe4671,0x24a3b,0x1686a,0x1686b,0xe4b7c,0x24a38,0x25051,0x16c64, +0x15f35,0xe4672,0x24a3a,0x16c6b,0x24a32,0x00000,0x16c65,0xe466a, +0x16c6a,0x24a2d,0x24a31,0x24a2e,0x24a34,0x1686f,0x16c63,0x16869, +0xe4c21,0x25043,0x24a36,0xe4668,0x16c69,0xe4673,0x16c6c,0x00000, +0x24a33,0xe466b,0x16c68,0x25042,0x00000,0xe4c23,0xe4674,0xe4c24, +0xe4b77,0x25047,0x17057,0x25041,0x2572e,0x25050,0x16c70,0xe4b7a, +0x16c6e,0x17055,0x2504d,0x25049,0x16c74,0xe4b76,0x25725,0xe5068, +0xe4c28,0xe5067,0x16c72,0x25048,0xe4c29,0x25723,0xe4c25,0x2504c, +0x00000,0x2504f,0x25046,0xe4b79,0x16c73,0x00000,0xe4b75,0x16c6d, +0x25724,0x17056,0x2504e,0x16c6f,0x16c71,0x2504b,0x16c75,0x2504a, +0x25045,0x25044,0x17054,0x25052,0x25727,0x25c6b,0x17059,0xe5061, +0x2572d,0xe5063,0x2572b,0xe506a,0x25c6c,0xe5064,0x1705a,0x2572c, +0xe5066,0x25729,0x1735d,0x25c6a,0xe506c,0x25726,0x25728,0x1735e, +0x1705c,0x1735c,0x1705b,0x17360,0x2572a,0x17058,0xe5062,0xe5065, +0xe506b,0x00000,0x00000,0xe6679,0x00000,0x00000,0x2615b,0x00000, +0x26153,0xe5461,0xe545f,0xe545c,0xe545e,0xe545d,0x25c72,0x26154, +0x25c6e,0x00000,0xe545b,0x17642,0x25c70,0x25c6f,0x1735f,0x25c6d, +0x25c71,0x2615c,0x26158,0x2615a,0x00000,0x26155,0x26156,0x00000, +0x26159,0x26157,0x17834,0xe5765,0x00000,0x17837,0x17836,0x17835, +0x1796c,0x26876,0x1796d,0x2654c,0x17a6a,0x26b5a,0x17a6b,0x17b60, +0x17c36,0x26f28,0xe5f46,0x26f29,0x26f2a,0xe613e,0x00000,0x2722a, +0x14541,0x2215d,0x14653,0x00000,0x14827,0x14828,0x14826,0xe236b, +0x14829,0x14a3c,0x14a3b,0xe2625,0x22670,0x14d51,0x14d50,0x00000, +0xe2c63,0x22f31,0x15a51,0x15a52,0x00000,0x00000,0xe3b64,0x15f3c, +0x24278,0x16428,0x16429,0x2427a,0x2427c,0x2427b,0x00000,0x24a3e, +0xe4676,0x24a3d,0x16870,0x24a3f,0xe4675,0x25053,0x16c76,0xe4c2c, +0x1705d,0xe506d,0x17361,0x17643,0x17362,0xe5f48,0x14542,0xe2165, +0xe2166,0xe224e,0x22428,0xe2628,0xe2629,0x22671,0x14d53,0x14d52, +0x14d54,0x15137,0x22a53,0x22a54,0x00000,0xe3129,0x22f32,0x15552, +0x15a53,0x15f3d,0x23b74,0x14543,0x00000,0x1445f,0x14544,0xe2250, +0x2215e,0x14657,0x14656,0x14654,0x14655,0x00000,0x00000,0xe236f, +0x1482c,0x22249,0x2224b,0x1482b,0x22243,0xe236c,0x22244,0xe236d, +0x2224a,0x22246,0x22248,0x1482a,0x22245,0x2224c,0x22247,0xe236e, +0x00000,0x00000,0x00000,0x00000,0x00000,0x14a43,0x14a4c,0x14a4a, +0x22432,0x2242f,0x22437,0x14a48,0x22438,0xe2639,0x14a41,0x22435, +0xe262e,0x14a47,0x22431,0x22430,0x14a45,0x22436,0x14a46,0x14d55, +0x14a40,0x22433,0xe262a,0x22429,0x14a3d,0xe2637,0x14a50,0x2242e, +0x22434,0x14a42,0x14a44,0xe262f,0x2242a,0xe2636,0x2242b,0x2242c, +0x00000,0x14a4f,0x14a49,0x14a4e,0x2242d,0x14a4d,0x14a3f,0x14a3e, +0x14a4b,0xe2635,0x00000,0xe2633,0xe2634,0xe2638,0xe2631,0x00000, +0x00000,0x00000,0x00000,0xe647b,0x00000,0xe2632,0xe2931,0xe292a, +0x14d63,0x2267d,0x22676,0x14d5e,0x14d71,0x22672,0x22679,0x2267b, +0x2267e,0x14d6c,0xe2926,0x2267a,0x22673,0x14d6a,0x22677,0xe2928, +0x22721,0x14d5b,0xe2925,0x2267c,0x14d65,0x14d64,0x22675,0x14d59, +0xe2934,0xe2932,0x14d5a,0x00000,0x14d58,0xe2933,0x14d70,0x14d68, +0x14d62,0x14d56,0x22678,0x14d61,0x14d57,0x14d69,0x14d72,0x22a55, +0x14d66,0x22674,0x14d5c,0x14d5f,0x14d60,0xe292e,0x14d6e,0x14d6f, +0x14d6d,0x14d67,0x14d6b,0x14d5d,0x15138,0xe2930,0xe2937,0xe2935, +0xe2936,0xe292f,0x00000,0x00000,0xe2929,0x00000,0x00000,0x00000, +0x00000,0x00000,0xe2c6d,0x22a5b,0x15144,0x1513c,0x1513e,0x15143, +0x22a67,0x15141,0x22f33,0x15553,0x15146,0x22a58,0x22a60,0x15142, +0x22a5f,0x22a5c,0x22a64,0x22a66,0x1513b,0x1513f,0x15145,0x15555, +0x22a61,0x1513d,0x15148,0x22a5a,0xe2c6f,0xe2c70,0x00000,0x15140, +0x15554,0x1513a,0x00000,0x22a57,0x22a5e,0x22a56,0x22a59,0x22a5d, +0x22f34,0x15147,0x00000,0x22a62,0x22a63,0x22a65,0x15139,0xe2c6c, +0x00000,0xe3132,0x00000,0xe3133,0x00000,0x00000,0x00000,0xe2c6b, +0x00000,0xe2c6e,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x15563,0x22f40,0x15561,0x15562,0x22f36,0x22f46,0xe312c,0x15558, +0xe312f,0xe3135,0x2354a,0x22f48,0x22f42,0xe3138,0x22f39,0xe3137, +0x22f4b,0x22f3c,0x1555e,0x23561,0x22f3f,0x15560,0x15557,0xe313c, +0x22f4d,0x22f41,0x1555a,0x22f3a,0x22f37,0x22f38,0x1555b,0x22f47, +0x22f4e,0x1555d,0x22f3e,0x22f3d,0x15565,0x15564,0x15556,0x1555c, +0x1555f,0x22f4a,0xe312e,0xe3139,0x22f44,0x15559,0x22f35,0x22f4c, +0x22f43,0x22f45,0x22f49,0xe3130,0xe313b,0xe3136,0x00000,0x00000, +0xe647c,0x00000,0x00000,0x00000,0xe647d,0x2354b,0xe3631,0x15a5b, +0x15a6f,0x15a6e,0xe3627,0x15a63,0xe3629,0x2355d,0x23559,0x23556, +0x23568,0x15a5e,0x15a56,0xe3626,0xe3632,0x2355b,0x15f4d,0x15a5a, +0x23563,0xe3622,0x15a70,0x15a6d,0x2355f,0x2354e,0xe357c,0xe362b, +0x15a6c,0x23565,0x2354d,0x15a61,0x15a65,0x23564,0xe3623,0x23557, +0x15a66,0x15a60,0x2354c,0xe357d,0x15f3f,0x23567,0x23555,0x15a6b, +0x23558,0x23566,0x15a6a,0xe3624,0x23b75,0x00000,0x15a57,0x23553, +0x15a5c,0x15a67,0x00000,0x15a62,0x2355c,0x23552,0x23550,0x23562, +0x15a54,0x15a68,0x15a58,0x15f3e,0x23560,0x15a59,0x00000,0x15a55, +0x15a64,0x15a5f,0x15a5d,0x23554,0x15a69,0x23551,0x2355e,0x2355a, +0x23b77,0x23b76,0xe362d,0x00000,0x00000,0x00000,0xe647e,0x00000, +0x00000,0x00000,0xe362e,0x00000,0x00000,0x2354f,0x23c29,0xe3b71, +0x15f41,0xe3b70,0x23c2f,0x23b7c,0x23c2c,0x2427d,0x15f44,0x23c30, +0x23c33,0x15f43,0x23c21,0x23c32,0x23c31,0x15f45,0x23b78,0x15f40, +0x15f48,0xe3b73,0x15f46,0x23c2e,0x00000,0x23c24,0x15f4a,0x23c35, +0x23c2d,0x23c36,0x15f52,0x15f50,0x23c2b,0x23c2a,0xe3b67,0x23c28, +0x23c22,0x15f49,0xe3b66,0x15f47,0x22f3b,0x23b79,0xe3b68,0x2433d, +0x23b7a,0x15f42,0x15f4f,0x24321,0x00000,0x15f4b,0x15f4c,0x23b7b, +0x23c34,0x2427e,0x23c25,0x23b7e,0x15f4e,0x23c26,0x23c23,0xe3b72, +0xe3b6d,0x15f53,0xe6339,0x00000,0x00000,0x00000,0xe3b6f,0x00000, +/* 0x6400 */ +0x00000,0x00000,0x00000,0xe6521,0x00000,0x00000,0x16438,0xe4149, +0xe4132,0x24324,0x24337,0x2433c,0x24330,0x16434,0x24341,0x16431, +0x24322,0xe413a,0x24323,0x1642a,0x16433,0x2432a,0x16436,0x16437, +0x2432b,0xe4138,0x24338,0x2433e,0x16432,0xe413e,0x1642c,0x24329, +0x24325,0x24340,0x2432e,0x2432f,0x24326,0x2433a,0x24331,0x2433b, +0x24333,0xe413d,0x1642d,0x24a40,0x16430,0x1642e,0x2433f,0x24336, +0x24332,0xe4136,0xe4133,0x24327,0x1687a,0x24335,0x16435,0x2432d, +0xe4134,0x2432c,0xe4148,0xe4725,0xe4142,0x1642f,0x1642b,0x24a55, +0x24339,0x24334,0x00000,0x24328,0x00000,0x00000,0xe4144,0xe4145, +0x00000,0xe6676,0x00000,0x24a50,0xe4678,0x24a41,0x24a4c,0xe4728, +0x24a53,0x16878,0x15f51,0x24a51,0x16873,0xe467e,0xe4724,0xe467a, +0x16872,0x24a58,0x00000,0x24a42,0x24a4f,0x24a43,0x24a4e,0x16876, +0x24a52,0x23c27,0xe4721,0x00000,0xe472a,0x24a59,0x24a4a,0x16879, +0x25061,0x16c77,0xe4723,0x24a57,0x24a56,0x1687b,0x25054,0x16c78, +0x25055,0xe4722,0x24a46,0x24a47,0x24a44,0x24a49,0x24a45,0x24a5a, +0x16875,0x16c79,0x16877,0x1687c,0xe467b,0x24a48,0xe4729,0x24a54, +0xe4c2d,0xe4726,0x24a4d,0xe4c35,0x00000,0x25058,0xe4c38,0x16871, +0x16c7c,0x25735,0x2505d,0x2505c,0x2505e,0xe4c30,0xe4c2f,0x2505b, +0x16c7d,0xe4c3b,0x16d25,0x16d22,0xe4c31,0x16d23,0x25056,0x25059, +0x25063,0x16d2b,0x16d29,0xe4c2e,0x2505a,0x23b7d,0x16c7a,0x25060, +0x25057,0xe4c3e,0x16d2c,0x2505f,0x16874,0x16d21,0x24a4b,0xe4c3f, +0xe4c34,0x16d24,0xe4c3d,0x16d28,0x16d2a,0x16d27,0x16d26,0xe4c3a, +0x16c7e,0x25062,0x16c7b,0x16d2d,0xe4c39,0x00000,0xe6522,0x00000, +0x00000,0xe4c37,0x00000,0x17061,0x17062,0x25734,0x1706b,0x17068, +0xe5070,0x1705f,0x17066,0x25736,0x17064,0x1705e,0xe4c32,0x17065, +0xe5077,0x25733,0x17364,0x17060,0x00000,0x17067,0x17363,0x25732, +0x25731,0xe5076,0x17069,0xe506f,0x1706a,0xe5079,0x25730,0x2572f, +0x17365,0x25739,0x17063,0x25737,0xe5075,0x00000,0x00000,0xe5464, +0x17366,0xe5467,0x1736b,0x25c75,0x25c77,0xe576b,0x17368,0xe576d, +0x25c78,0x25c74,0xe576c,0x25c76,0x17369,0x1736c,0xe5469,0x25c73, +0x17367,0x1736a,0x17645,0x25738,0x17644,0x00000,0xe576a,0x1764a, +0x26160,0xe5770,0x17648,0x17649,0x26163,0x2615f,0x17646,0x2615d, +0x17838,0x26161,0x00000,0x26162,0x2615e,0xe576e,0x17647,0x2654d, +0xe5a3b,0x26550,0xe5a3c,0xe5a3a,0x26551,0x2654f,0x26552,0x17839, +0x2654e,0xe5e31,0x00000,0x2687a,0x1796f,0x26879,0x26878,0x26877, +0x1796e,0x17970,0xe6523,0x26b5b,0x17a6d,0x17a6c,0xe5f4a,0xe5f4b, +0x26d4f,0x26d4e,0x26d51,0x17c37,0x17b61,0x26f2c,0x26d50,0xe5f49, +0xe6032,0x26f2b,0x17c39,0x17c38,0x17c5f,0x27037,0x2707d,0x14545, +0x00000,0xe2c72,0x23c37,0x2573a,0xe2167,0xe2168,0x1482d,0x2224d, +0x14a53,0x14a51,0x00000,0x14a52,0x00000,0x22722,0x14d73,0x15149, +0xe2c74,0x22a68,0xe2c76,0x22a69,0xe2c73,0x1514a,0x22f50,0x00000, +0x15566,0x15567,0x22f4f,0xe313d,0x00000,0xe3637,0xe3636,0x15a77, +0x00000,0x15a73,0x00000,0x23569,0x15a7a,0x15a79,0x15a72,0x15a75, +0x15a78,0x15a74,0xe3634,0x00000,0x23c3b,0x15a71,0x15f54,0xe3b74, +0xe3b75,0xe3b76,0x15f56,0x15f57,0x23c3a,0x23c3d,0x15f55,0x23c38, +0x23c3c,0x00000,0x23c39,0xe414b,0x16439,0xe414e,0xe6346,0x24342, +0xe414d,0xe4730,0x1687d,0x24a5b,0x1706c,0x16d2e,0x25064,0x16d2f, +0x16d30,0x25066,0x25065,0x25067,0x2573c,0x00000,0x00000,0x2573b, +0x25c7a,0x25c79,0x1736d,0x1736e,0x26553,0xe5c41,0x00000,0x14546, +0xe2558,0xe2939,0x00000,0xe3140,0x23c3e,0xe3638,0xe3639,0x00000, +0x15f59,0x15f58,0x24343,0x00000,0x26164,0x17a6e,0x26f2d,0x14547, +0x00000,0x15568,0xe3142,0x15a7c,0x15a7b,0x23c3f,0x23c40,0x1643a, +0x24a5c,0x1687e,0x2573d,0x00000,0x14548,0x14658,0xe293b,0x14d74, +0x22723,0x00000,0x22a6a,0x1514b,0x15a7d,0xe363a,0x23c41,0x15f5a, +0x1643b,0x00000,0x25068,0x25069,0x00000,0xe546b,0x25c7b,0x1764b, +0x2707e,0x14549,0xe293c,0x22724,0x14d75,0x1514c,0xe2c77,0x22a6b, +0x00000,0x15569,0x22f54,0x22f52,0x22f53,0x1556a,0x22f51,0xe363c, +0x00000,0xe363f,0xe363d,0x15b21,0x15b22,0x2356a,0x15b23,0x15a7e, +0x23c42,0xe3b79,0x23c43,0x24344,0x00000,0x00000,0x16922,0x16921, +0x00000,0x00000,0x25c7c,0x26165,0xe5a3f,0x26555,0x26554,0x2687b, +0xe2169,0x2213e,0x1514d,0xe3641,0xe4150,0x1454a,0x14659,0xe2251, +0x1482f,0x1482e,0xe2373,0xe2372,0x14830,0x14831,0x2224f,0x2224e, +0x22439,0x14a54,0x2243c,0x2243b,0x2243a,0x2243d,0xe263d,0x00000, +0x00000,0xe625e,0x14d76,0x2272a,0x22726,0x2272f,0xe2943,0xe293e, +0x14d7d,0xe2942,0x14d7b,0x2272b,0x22727,0x2272e,0x14d7a,0x14e23, +0x22729,0x22725,0x14e22,0x2272c,0x14d79,0x2272d,0x14d7c,0x14d7e, +0x22731,0x22730,0x22728,0x14d78,0x14d77,0x14e21,0x00000,0xe2940, +0xe2941,0x00000,0xe2c7e,0xe2c7a,0x22a70,0x22a76,0xe2d23,0x15153, +0x15150,0x22a6d,0x22a72,0xe2c7c,0x15156,0x1514e,0x22a71,0x15151, +0x15154,0xe2c79,0x00000,0x22a74,0xe2c7d,0x1514f,0x22a79,0x15152, +0xe2d21,0x15155,0x22a6e,0x22a73,0x22a77,0x22a6f,0x22a6c,0xe2d24, +0xe2d25,0x22a78,0x22a75,0xe2d22,0xe2c37,0x00000,0x00000,0x00000, +0xe3146,0x15572,0x1556b,0x1556e,0xe314c,0x15571,0xe3144,0x22f57, +0xe3149,0x1556c,0x22f55,0xe3148,0x15570,0xe314d,0xe3145,0x1556d, +0xe3143,0x22f58,0x1556f,0x00000,0x00000,0x00000,0x00000,0xe3642, +0x00000,0x2356e,0x15b25,0x2356d,0x2356f,0x15b24,0x15b29,0x22f56, +0xe314b,0x2356c,0x23570,0xe3644,0x15b26,0x2356b,0x15b28,0xe3645, +0x15b27,0xe3c26,0x23c4a,0xe3b7d,0x23c45,0xe3c25,0x15f5b,0x15f5f, +0x15f5c,0x23c48,0x23c4b,0xe3c23,0x15f5d,0x00000,0x15f5e,0x15f63, +0x2434d,0x23c49,0x15f61,0x23c46,0x23c44,0xe3b7c,0x15f62,0xe3b7e, +0x23c47,0xe3c24,0x00000,0x00000,0x16441,0x00000,0x24345,0x1643e, +0x1643f,0x1643d,0x2434a,0x24349,0x24346,0x16443,0xe415b,0xe4156, +0x24348,0x15f60,0xe4159,0xe4151,0x2434c,0x24347,0x16440,0x1643c, +0x16442,0x2434b,0xe4734,0x00000,0xe4735,0x16925,0x00000,0x24a5f, +0x24a5e,0x24a5d,0x16923,0x00000,0xe4739,0xe4733,0xe4737,0x00000, +0x16924,0x2506c,0x2506f,0x16d32,0xe4c44,0xe4c46,0x16d31,0x25070, +0x2506b,0x16d34,0x2506d,0xe4c41,0x16d33,0x2506a,0xe4c40,0x2506e, +0x17072,0x1706f,0x25746,0x25745,0xe4c43,0x25744,0x2573f,0xe507d, +0x25740,0xe5123,0x00000,0xe507a,0x17070,0xe507e,0x1706d,0x17071, +0x2573e,0x1706e,0x25741,0x25742,0x25747,0xe5122,0xe5471,0x25743, +0xe546f,0xe5470,0x25c7d,0x00000,0xe546c,0xe546d,0x17370,0xe5472, +0x26168,0x1736f,0x26166,0x26167,0x1764c,0x1783b,0x26556,0xe5a43, +0x1783a,0xe5a42,0xe6526,0x2687d,0x2687e,0xe5c42,0x17971,0xe5c43, +0x2687c,0x17a6f,0x00000,0x26f2e,0x17c3a,0x27038,0x27039,0xe613f, +0x1454b,0x00000,0x14832,0x14833,0x14a55,0xe2641,0x22732,0x15157, +0x15573,0x15b2a,0x00000,0x00000,0x15937,0x00000,0x15f64,0x15f65, +0x15e32,0x23c4c,0xe6527,0x16444,0x24a61,0x24a60,0xe5124,0x00000, +0x1454c,0x14834,0x22733,0x14e25,0xe2945,0x14e24,0xe2d27,0x22a7a, +0x22a7b,0xe6632,0x22f59,0x22f5a,0x15574,0x15575,0xe3648,0x15576, +0x23571,0xe3647,0xe3646,0x15b2c,0x00000,0x15f67,0xe3c29,0x15f66, +0x2434e,0x24641,0x24a62,0x25748,0xe5126,0xe6633,0x1764d,0x17972, +0x1454d,0x00000,0x1465c,0x1465d,0x1465b,0x1465e,0x1465a,0xe2252, +0x00000,0x14837,0xe2377,0x22257,0x14836,0x14838,0xe2378,0xe2375, +0x22252,0x22251,0x22254,0x22253,0x22256,0x14835,0x22250,0x22255, +0x00000,0x00000,0x00000,0x00000,0xe2648,0x2243e,0x14a5f,0x2243f, +0x22443,0x14a5e,0xe2649,0x22447,0x22442,0x22445,0x14a57,0x14a58, +0x14a59,0x14a5a,0xe2645,0x14a61,0xe2644,0x22441,0x14a5c,0x14a62, +0xe2647,0x22440,0x22446,0xe2642,0x14a5b,0x22444,0x14a5d,0x14a56, +0x14a60,0xe264a,0x00000,0x00000,0x00000,0xe6257,0x00000,0x00000, +0x00000,0x00000,0x14e3a,0xe2947,0x22735,0x14e26,0x00000,0x14e30, +0x14e31,0x14e29,0x14e3b,0x14e2b,0x2273d,0x14e36,0x22738,0x14e2c, +0x22747,0x22748,0x22740,0x22739,0x14e39,0x22745,0x14e34,0x14e32, +0xe2952,0x22746,0xe2949,0x22744,0x2273c,0x22734,0x2273b,0x14e2d, +0xe625f,0x14e33,0xe294a,0x14e27,0x2273f,0x2273e,0x22736,0xe294f, +0x14e35,0x22742,0x22737,0x14e38,0x22749,0x14e28,0xe2948,0x14e2f, +0x2273a,0x22743,0x14e37,0x00000,0x14e2a,0x14e2e,0x00000,0x22741, +0x00000,0x00000,0xe294e,0xe294c,0xe6528,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0xe6529,0x00000,0x22b3d,0x1515f, +0x1516c,0xe2d36,0x22b38,0x22b2e,0x15165,0x22b2c,0x1515e,0x22b27, +0x15168,0x22b34,0x22b21,0x22b23,0xe2d2e,0x00000,0x00000,0xe2d30, +0x22b26,0x22a7c,0x22b33,0x22b43,0x15163,0x22b28,0x22b3a,0xe2d2d, +0x22a7e,0x22b41,0x22b42,0x22b45,0x22b3c,0x22b2d,0x22b35,0x15169, +0x1515c,0x15164,0x15170,0x15159,0x1515b,0xe2d31,0xe2d2b,0xe2d3a, +0x22b25,0x1516d,0x15166,0x22b3f,0x22b22,0x1516f,0x1516a,0x22b2b, +0x00000,0x00000,0x1516e,0x22b32,0x22b2a,0x15167,0x22b3e,0x22b36, +0xe2d2a,0x15161,0x22b44,0x22b29,0x1515d,0x22b3b,0x22b31,0x15162, +0x22b37,0x1515a,0x22a7d,0x1516b,0x15627,0x15160,0x22b30,0x22b2f, +0x22b24,0xe2951,0x22b40,0xe2d34,0x22b39,0x00000,0xe2d32,0x15158, +0xe2d39,0xe2d37,0x00000,0x00000,0x00000,0xe2d38,0xe652b,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0xe652a,0x00000,0x22f6e,0x1562e,0x22f6f,0xe315d,0x22f63,0x15623, +0x1562f,0xe3157,0x22f5c,0xe3153,0x22f65,0x22f6d,0xe315b,0x22f5b, +0x22f76,0x15577,0xe315e,0xe3164,0xe3150,0x22f75,0x22f70,0xe315f, +0x22f71,0x15621,0x1562c,0x22f67,0xe3156,0x22f68,0x22f72,0x22f69, +0xe3163,0x22f64,0x22f5e,0x22f5f,0x22f6c,0x22f66,0xe3154,0xe314f, +0x15578,0x1557c,0x22f74,0x22f60,0x1562a,0x15626,0xe315a,0x00000, +0x15629,0x15630,0x1557d,0x1562b,0x22f6b,0x1562d,0x1557a,0xe3159, +0x15579,0x22f5d,0x00000,0x22f61,0x15624,0x22f73,0x22f6a,0x22f62, +0x15628,0x15625,0xe2d2f,0x1557b,0x1557e,0xe3162,0xe3158,0x00000, +0xe3161,0xe3160,0xe652d,0x00000,0x00000,0x00000,0xe652c,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x23628,0xe3655,0x23576,0x23577,0x2357b, +0xe3660,0x2362c,0x23629,0xe364e,0x23622,0x23621,0x15b33,0x23625, +0x23634,0x23572,0xe365b,0x23635,0x23627,0x23639,0x2362d,0x15b32, +0x2362b,0x15b2d,0x15b42,0x15b38,0xe3657,0x15b3c,0x15b3b,0x23573, +0x00000,0x23632,0x23638,0x23630,0x23637,0x00000,0xe3651,0x23624, +0x23574,0x23636,0x23626,0x15b30,0x15b3d,0xe365a,0x2362f,0x15b36, +0xe364d,0xe365c,0xe3650,0x2362e,0x23575,0x15b3e,0xe364b,0x15b40, +0x23631,0x15b41,0x15b2f,0x2357c,0x23633,0xe3654,0xe3478,0x15b35, +0x15b3f,0x2357e,0x2362a,0x23579,0x2357d,0x15b3a,0x23578,0x15b2e, +0x15b37,0x15b34,0x23623,0x15622,0x23c63,0x15b31,0xe364c,0xe3652, +0xe365e,0xe365f,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0xe3656,0x00000,0xe3c45,0x15b39,0xe3c41,0x23c66,0x23c7c, +0x23c71,0x15f7b,0xe3c38,0x15f76,0x23c60,0x15f77,0x23c70,0xe3c3e, +0x23c69,0x23c76,0x15f73,0x23c4e,0x23c78,0x15f69,0x23c56,0x15f6c, +0x15f6b,0x00000,0x15f7c,0xe3653,0x23c50,0x23c72,0x23c73,0x15f6e, +0x15f6a,0x23c5e,0xe3c3d,0x15f75,0x23c59,0xe3c32,0x23c74,0x15f71, +0x23c6c,0x23c79,0x23c53,0x23c58,0x23c52,0xe3c2a,0x15f70,0x23c65, +0x24364,0x23c54,0x15f74,0x23c5d,0x23c75,0x15f6f,0x23c5a,0x23c57, +0x23c68,0x15f72,0x15f68,0x15f7e,0x23c6b,0x23c6a,0xe3c31,0xe3c42, +0xe3c39,0xe3c3b,0xe3c34,0xe3c2f,0x23c4f,0x15f6d,0x23c77,0x23c5f, +0x23c61,0xe3c37,0x23c6e,0x23c6d,0x23c4d,0x15f78,0x15f7a,0x23c55, +0x23c5c,0x23c64,0x15f79,0x23c5b,0x23c67,0x23c7a,0x00000,0x23c6f, +0xe3c3c,0x00000,0x00000,0x00000,0xe3c44,0x00000,0xe3c33,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x23c7b,0x00000,0x00000, +0x00000,0xe652f,0x23c51,0x00000,0xe652e,0x00000,0xe3c40,0x24378, +0x1644c,0xe4165,0x24376,0x24361,0x24366,0x2435f,0xe4177,0x24372, +0x24351,0x24358,0x00000,0x24370,0x2437a,0x24362,0xe4168,0x24355, +0x24368,0x2436d,0x24359,0xe416b,0x2436a,0x24356,0xe415d,0xe4175, +0x2435d,0x2435e,0x1644e,0x24371,0x2436f,0xe4173,0x24352,0x24374, +0xe4174,0x24375,0x24377,0x16452,0x1644a,0xe416f,0x2357a,0x2435a, +0x2436c,0x2435b,0x16447,0x16457,0x24373,0x16455,0x16451,0x24350, +0x16449,0xe4179,0x24353,0x16456,0xe4178,0x24363,0x2434f,0xe4176, +0x1644f,0x24367,0x24357,0x16450,0x24360,0x16446,0x15f7d,0x24369, +0x23c62,0x24354,0x00000,0xe416d,0x2436e,0x1644b,0x2436b,0x16448, +0x24365,0x16453,0x2435c,0x24379,0xe416a,0xe417b,0x00000,0x00000, +0x00000,0x00000,0x1644d,0x2452c,0x00000,0xe4172,0x16454,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x24a70,0x24a6e,0xe473a, +0x24b26,0x24a6c,0xe473d,0x24a7e,0x16445,0x16928,0x24a68,0x24b25, +0xe4751,0x24a6d,0x24a7b,0x1692d,0x16926,0xe474e,0x24b23,0xe4746, +0x24a66,0x24b22,0xe4747,0x16938,0x24a77,0x24b29,0x16936,0x24a6f, +0x16927,0x24a71,0x24b21,0x16930,0x24a6a,0x16934,0x1692a,0x24a73, +0x24a69,0x24a63,0xe473e,0x24a7d,0x16931,0x24b28,0x24a64,0x1692e, +0x00000,0x24a79,0xe6352,0x1692f,0x24a6b,0x24a76,0x24a72,0x24a74, +0xe4743,0x16929,0x24b27,0x16937,0x24a75,0xe473b,0x24b2a,0x00000, +0xe473c,0x24a65,0x24a7a,0x1692c,0x16935,0x16933,0x24a67,0x24a7c, +0x16932,0xe4745,0xe4748,0x1692b,0x24a78,0xe474d,0xe4744,0x00000, +0xe4c54,0x24b24,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0xe474c,0x2507c,0xe4742,0x25078,0x25074,0x2512a,0x25127, +0x16d37,0xe4c64,0xe4c60,0x2512e,0x2507b,0x16d42,0x25124,0xe4c4f, +0xe4c51,0x25077,0x25123,0x16d3f,0x25137,0x00000,0x25134,0x25126, +0x25075,0xe4c5f,0xe4c57,0x2512b,0x2512d,0x16d3b,0x25121,0x2507a, +0x25071,0x16d38,0x16d40,0x00000,0x25130,0x16d41,0x25072,0x25136, +0x25129,0x2512f,0x16d3e,0xe4c4d,0xe4c50,0x2512c,0xe4c47,0x25133, +0xe4c5b,0x16d43,0xe4c56,0x16d3d,0x25125,0x25076,0x25138,0x25073, +0x25131,0x16d3a,0xe4c4a,0x2507d,0xe4c49,0x2507e,0x16d39,0x16d36, +0x25079,0x16d3c,0xe4c52,0x16d35,0xe4c62,0x25132,0x25135,0x25122, +0x25755,0xe4c5e,0xe4c59,0x00000,0xe4c61,0xe6530,0x00000,0x00000, +0x00000,0x00000,0x2574d,0xe512c,0x25749,0x17121,0xe513c,0xe5138, +0x17074,0x17079,0x17075,0x25757,0x25762,0x17073,0x2574f,0x25758, +0x25128,0x25759,0xe5128,0xe512b,0x1707a,0xe5140,0x25768,0x1707e, +0x17123,0x2574b,0xe513b,0x1707d,0xe5131,0x25766,0x25767,0x2575d, +0x2575c,0x25754,0xe5129,0xe513e,0x2575e,0x25765,0x25764,0xe512f, +0x17078,0x17076,0x25756,0x25753,0xe5144,0x25750,0x25763,0x17122, +0x25761,0x1707c,0x1707b,0xe5127,0x2575b,0x00000,0x2574a,0x2574c, +0x2574e,0x25760,0x2575a,0x17077,0xe512e,0x25751,0xe5132,0x2575f, +0xe5141,0xe513a,0x00000,0x00000,0x00000,0x00000,0x25752,0xe6531, +0x00000,0x00000,0xe6532,0x00000,0x00000,0xe5475,0x17378,0x25d31, +0x17371,0x25d22,0xe547b,0x25d2d,0x17373,0x25d34,0xe5521,0x25d29, +0xe547c,0x25d24,0xe5476,0x00000,0x25d35,0x25c7e,0x25d2b,0xe5527, +0x1737a,0x25d30,0x25d36,0x25d2a,0x17372,0x25d2c,0x25d21,0x17379, +0xe5523,0xe547a,0x25d33,0x25d26,0x17375,0xe5524,0x25d28,0x25d25, +0x1737b,0x25d27,0x17374,0x17377,0x25d2f,0x25d23,0x25d32,0xe5478, +0x25d2e,0x00000,0xe5529,0xe5774,0x1764f,0x26173,0x17654,0x17655, +0xe5777,0xe5821,0xe5776,0x1764e,0x26172,0xe5778,0x2616f,0x26170, +0x17652,0x2616a,0x2616e,0x17651,0xe577e,0x2616b,0xe5779,0xe5823, +0xe577d,0xe577a,0x17653,0x17650,0xe5822,0x26169,0x2616d,0x26171, +0xe577b,0x00000,0xe6533,0x2655c,0x26559,0x26562,0xe5a44,0x26561, +0x2655f,0x2655a,0xe5a4f,0x1783f,0xe5a45,0xe5a4e,0x00000,0xe5a47, +0xe5a4d,0x2655b,0x1783e,0x17376,0x2655e,0x1783d,0x26563,0x2655d, +0x26558,0x2616c,0xe5a48,0xe5a46,0x00000,0x1783c,0xe6534,0x26557, +0x26924,0xe5c49,0x26923,0x26560,0x17973,0xe5775,0x26927,0x26928, +0x26922,0x26926,0x00000,0x26921,0xe5c47,0xe6535,0x00000,0x00000, +0x26b5f,0x26925,0x17a72,0x17a70,0x26b5d,0xe5e35,0xe5e34,0xe5e33, +0x26b60,0xe5e37,0x26b5c,0x26b5e,0x17a71,0x00000,0xe5f4f,0xe5f4e, +0x26d53,0x26d54,0x17b62,0x26d52,0x00000,0xe6536,0xe6537,0x26f31, +0x17c3b,0x26f2f,0x26f30,0x2703a,0xe6074,0x00000,0x17d23,0x27123, +0x27121,0x27122,0x27124,0xe6140,0xe6165,0xe6141,0x2722b,0x00000, +0x1454e,0x14839,0xe2379,0x14e3c,0x00000,0x2274a,0xe2953,0xe2954, +0x22b46,0xe6269,0xe2d3c,0xe3166,0x22f77,0x22f79,0xe3165,0x22f78, +0xe3167,0x22f7a,0x15b43,0x2363b,0x22f7b,0xe3662,0x2363a,0x2363c, +0x2363d,0x23c7d,0x16022,0x23c7e,0x23d22,0x16023,0x16021,0x23d21, +0xe417d,0x24422,0x2437e,0x2437d,0xe417c,0x2437c,0x2437b,0x16458, +0x24421,0x16939,0x24b2b,0x24b2d,0x1693a,0x24b2c,0x16d45,0xe4c66, +0x16d44,0x25139,0xe4c65,0xe4c67,0x2576a,0x25769,0x2576b,0xe5146, +0xe5145,0x17124,0x00000,0x25d37,0x1737c,0xe552b,0x26174,0x17656, +0x26564,0x17b63,0x1454f,0x1465f,0x1483a,0x14a63,0x14e3d,0x14e3e, +0xe2955,0xe2956,0x15171,0xe2d3d,0xe3168,0x22f7c,0xe3c49,0xe3c47, +0x00000,0xe417e,0x16459,0xe4221,0xe4753,0x00000,0x25259,0x17125, +0x17657,0x14550,0xe2253,0x1483b,0x00000,0x00000,0x2274c,0x14e3f, +0x2274b,0xe2958,0x22b47,0x15172,0x22b48,0x00000,0x15173,0x00000, +0x22f7e,0x15632,0x15631,0xe316a,0x23642,0x23640,0x23641,0x2363f, +0xe3664,0x2363e,0x00000,0x00000,0x23d23,0x23d26,0x16025,0x23d24, +0x16024,0x23d25,0x00000,0x24423,0xe4222,0xe6354,0x24b2e,0x24b2f, +0x24b30,0xe4754,0x2513c,0x2513b,0x16d46,0x2513a,0x2513d,0x2576c, +0x00000,0x00000,0x2576d,0x2576e,0x00000,0x25d38,0x1737d,0x17658, +0x26565,0x00000,0x17a73,0x2213f,0xe2959,0x15174,0x22b49,0x15633, +0x00000,0x00000,0x15b44,0xe3665,0x16026,0x23d27,0xe3c4b,0x1645b, +0x1645a,0xe4226,0x00000,0x24b31,0x24b32,0x16d47,0x16d48,0x25770, +0x2576f,0x26175,0x26f32,0x14551,0x22140,0x14660,0xe237a,0x14a64, +0x22448,0xe295a,0x15175,0x1645c,0x14552,0x00000,0x22b4a,0x15176, +0x22b4b,0x00000,0x1737e,0x14553,0xe6538,0xe6539,0x2274d,0x00000, +0x22b4c,0xe2d42,0x23025,0x23024,0x23022,0xe316e,0x23021,0x23026, +0x23023,0xe316c,0xe316d,0x15b45,0x15b46,0xe3666,0x00000,0x16027, +0x23d28,0x00000,0x23d29,0x23d2a,0xe3c4d,0x00000,0xe653a,0x24427, +0x24428,0x24426,0xe4228,0x24424,0x24425,0x1645d,0x24b33,0x25140, +0x2513f,0x2513e,0x25141,0x25772,0x25771,0x17126,0x25773,0x00000, +0x17421,0x25d39,0xe552d,0x26176,0x26566,0x26d55,0x00000,0x14554, +0x14662,0x14661,0x00000,0x14e40,0x22141,0x2215f,0x1483c,0x00000, +0x22258,0x22449,0x2244a,0x14e41,0xe295d,0x2274e,0xe653b,0x15177, +0x22b4d,0x22b4e,0x00000,0x15634,0x15638,0x23027,0x15637,0x15635, +0x15636,0x00000,0x23643,0x15b47,0x1602a,0xe3c4e,0x16028,0x16029, +0x23d2b,0xe4229,0xe422a,0x1693b,0x14555,0x00000,0x22160,0xe2257, +0x14663,0xe2254,0x00000,0x22163,0xe2421,0x00000,0x14666,0x22162, +0x14665,0x14664,0x14a65,0x22161,0xe2258,0xe2259,0x22259,0x00000, +0x00000,0x00000,0x2225d,0x2225f,0x22260,0x14846,0x14847,0x2225c, +0x14842,0xe237d,0x2225a,0xe2425,0x2225e,0x14843,0xe2655,0x1483e, +0xe237c,0x1483f,0xe2423,0x14845,0x2225b,0x1483d,0x14a66,0x14840, +0x14841,0x14844,0x00000,0xe653c,0x00000,0x2245b,0x22459,0x2244c, +0x14a72,0x22453,0x14a6d,0x2244d,0xe2964,0x22455,0xe2650,0x22452, +0x14a70,0x22451,0x14a77,0x2245a,0x14a79,0xe2653,0x14a7b,0xe237e, +0x2244b,0xe2657,0x14a6e,0x2245c,0xe2651,0x14a75,0x14a78,0xe264c, +0x22765,0x14a68,0x14b21,0x14a76,0x2244e,0x14a6b,0x14a7a,0x22456, +0x14a69,0x14a6a,0x22763,0x2244f,0x14a71,0x14a7c,0x2245d,0x22450, +0x14a6f,0xe264d,0x14a74,0x2274f,0x14a7d,0x22457,0x14a73,0xe2963, +0x14a7e,0x14a67,0x22454,0x14a6c,0x22458,0x22764,0xe264e,0xe2652, +0xe265c,0xe2659,0xe2656,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0xe265b,0x14e4d,0x14e5d,0x22756,0x14e54,0xe2d4e, +0x2276b,0x14e45,0xe296b,0x14e48,0x22762,0x00000,0x22754,0x22758, +0x14e50,0x14e52,0x2275b,0x14e59,0x14e4b,0x14e49,0x14e4a,0x14e58, +0x22767,0x14e53,0x2275a,0x2275c,0x14e51,0x14e56,0x2275d,0x2276a, +0xe296d,0x15178,0x14e5c,0xe6261,0x14e46,0x22769,0xe296c,0x2276d, +0x22759,0x2276f,0x22760,0x14e4f,0x22755,0x14e4e,0x14e60,0x14e55, +0xe296a,0x22753,0x22b57,0x14e5b,0x14e5f,0x22761,0x22766,0xe2965, +0x14e61,0x14e5a,0x14e4c,0x14e42,0xe2969,0x14e47,0xe6260,0x22757, +0x14e43,0x2276e,0xe2967,0x22751,0x22750,0x2275e,0x22752,0x14e5e, +0x15639,0x14e57,0x2275f,0x14e44,0xe2d4f,0x15229,0x00000,0x00000, +0x00000,0x2276c,0x00000,0x00000,0x00000,0x00000,0x00000,0xe2d46, +0x22b5e,0x22b61,0xe2d50,0x22b64,0x22b59,0xe2d48,0xe2d4a,0x22b67, +0x22b6a,0x22b6c,0x22b56,0x15179,0x1517e,0x2302c,0x15230,0x22b65, +0x22b6d,0x22b5d,0x22b55,0xe2d49,0xe2d47,0xe2d4d,0x23047,0x15223, +0x22b62,0x22b5a,0x22b5c,0x15228,0xe317a,0x22b5f,0x15222,0x22b52, +0x22b68,0xe2d4b,0x22b6b,0xe2d45,0xe2d57,0x1517d,0xe2d53,0x1522b, +0x22b4f,0x1522d,0x1517b,0x15231,0x22b69,0x22b51,0x1522e,0x23041, +0x22768,0x15221,0x1517a,0x22b58,0x22b50,0x1522f,0x15227,0x22b63, +0x1522c,0x1522a,0x22b5b,0x15224,0x22b53,0x15225,0x15226,0x22b54, +0x22b66,0x1517c,0x22b60,0x00000,0xe2d55,0xe2d51,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0xe3177,0xe3173, +0x2302f,0x15641,0x15646,0xe3179,0xe3226,0xe3176,0x23038,0x2303e, +0x2303a,0x2302d,0x23030,0x23029,0x2302a,0x1564d,0x1563e,0x23039, +0x23042,0x15648,0x1563a,0xe316f,0x15643,0x23031,0x15645,0x23032, +0x2303c,0xe3222,0xe3225,0xe3172,0x15647,0x2304b,0x2302b,0x15640, +0x1563f,0x1564b,0x23028,0x23049,0x2303d,0x2304a,0x23044,0x23036, +0x23045,0xe3221,0x2303f,0x23048,0x23046,0x1564c,0x23037,0x1563d, +0x1563c,0x15644,0x1564a,0x23043,0x15649,0x23034,0x15b48,0xe3178, +0x2304c,0x23033,0x2302e,0x15642,0x1564e,0x1563b,0xe3227,0x2303b, +0x23040,0xe317d,0xe317b,0xe317c,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0xe653d,0x00000,0x00000, +0x00000,0x00000,0x15b6a,0x23645,0x23649,0xe366f,0x15b57,0x15b55, +0xe367a,0xe3721,0x15b4c,0x23647,0x23646,0x15b60,0xe3c50,0x2364c, +0x15b5a,0xe3672,0x2365e,0x2366a,0x15b49,0x2365b,0x23654,0x15b6c, +0x23644,0xe366a,0x23660,0xe366b,0x15b69,0x15b5d,0x15b68,0x15b53, +0x23650,0x23662,0x2365a,0x15b54,0x15b4e,0x23668,0xe366c,0x23661, +0x23663,0x15b56,0x15b5e,0x23665,0x2364e,0x2365f,0x23653,0x23667, +0x15b63,0x15b4b,0x15b61,0x23658,0x23656,0x23657,0x15b58,0x23652, +0x23651,0x15b4d,0x2364b,0x23669,0x15b4f,0x23655,0x15b6d,0xe3674, +0x15b67,0x2364a,0x15b64,0x15b62,0x15b6b,0x2365c,0x15b66,0x23035, +0x2365d,0x15b65,0x23664,0x15b4a,0x23659,0x15b5c,0x2364d,0x15b5b, +0xe367c,0x15b59,0x15b51,0x15b50,0x23d2c,0x23666,0xe3c5d,0xe3728, +0x2364f,0xe3726,0xe3723,0x23d41,0xe3670,0x15b52,0xe3677,0xe3724, +0xe3676,0xe3725,0xe3679,0x00000,0xe367d,0x00000,0x00000,0xe653e, +0x00000,0x00000,0xe3729,0x00000,0x00000,0x00000,0x00000,0xe3727, +0xe3c54,0x16047,0x15b5f,0x16035,0x23d3b,0x16043,0xe3c52,0x23d2f, +0x16032,0x1602e,0x23d4d,0x16034,0x16038,0x16033,0x1603c,0x23d51, +0x23d48,0xe3c6b,0xe3c6d,0x23d36,0x16041,0x1603b,0x23d42,0x1602b, +0x23d4e,0x23d47,0x1602f,0x23d3c,0x1603e,0x23d59,0x23d5a,0x00000, +0x1602c,0x23d4c,0x16040,0x23d40,0x23d32,0x23d33,0x16044,0x23d37, +0x23d3e,0x23d38,0xe3c5a,0x16042,0x1604a,0x23d34,0x23d2d,0x23d2e, +0xe3c56,0x23d30,0x16031,0x23d3d,0xe3c6e,0x1603f,0x16048,0xe3c58, +0xe3c69,0x23d3f,0x23d57,0x23d4f,0x1602d,0x23d55,0x16039,0xe3c66, +0x16037,0xe3c64,0x23d5b,0x16036,0x23d45,0x23d39,0x23d43,0x1604d, +0x23d49,0x23d46,0x23d35,0x16049,0x23d53,0x23d50,0x23d58,0x16030, +0x23d44,0x1604c,0xe3c5b,0x23d4b,0xe423a,0xe3c60,0x1603a,0x1603d, +0xe3c5c,0x23d4a,0x1604b,0x23d3a,0x23648,0xe3c51,0xe3c6c,0x23d54, +0x23d52,0x23d56,0x00000,0xe3c62,0xe6542,0x00000,0xe3c63,0x00000, +0xe3c68,0x00000,0x00000,0x00000,0xe6540,0x00000,0xe633d,0x00000, +0x23d31,0x16046,0xe653f,0xe6541,0x00000,0x24447,0x24446,0x2442c, +0x16463,0xe4230,0x24445,0x2442f,0x24430,0x00000,0x1646d,0x2444e, +0x16468,0x24444,0xe4233,0x24429,0x1646e,0x16464,0x24438,0x2442e, +0x24431,0x24449,0x1645e,0x24450,0x24448,0x16467,0x2443d,0x16472, +0xe422e,0xe4236,0x16471,0x1646b,0xe4240,0x00000,0x2444f,0x1645f, +0x2443b,0x24432,0x2443f,0x2444b,0x16473,0xe4239,0x16461,0x2443a, +0xe422d,0x24433,0x1646a,0xe4231,0x16469,0x24436,0x24440,0x2444a, +0x2442d,0x24437,0x16462,0x24441,0x1646f,0x16466,0x24434,0x16465, +0x2442b,0x24439,0x2444d,0x16045,0x16957,0x2443c,0x24b34,0x2443e, +0x2444c,0x1646c,0x24435,0x16460,0x16470,0x16d5a,0x2442a,0x00000, +0x24443,0xe4244,0xe423e,0xe4247,0x24442,0xe423d,0x00000,0x00000, +0x00000,0x00000,0x00000,0xe4245,0x00000,0x00000,0xe423f,0x00000, +0xe423b,0xe4246,0x00000,0x24b50,0x16954,0x24b45,0x24b4a,0x16949, +0xe4756,0x24b36,0x16956,0xe4757,0x16940,0x24b35,0x24b56,0x16958, +0x24b39,0x24b49,0xe4765,0x24b3b,0x24b59,0x24b55,0x1693e,0x16948, +0x2515b,0x16955,0x16946,0x24b37,0xe4763,0x24b54,0x1694a,0x24b51, +0x24b5e,0x24b3d,0x24b46,0xe4c78,0xe475b,0x24b5c,0x24b52,0x16945, +0xe4c6a,0xe4764,0x24b44,0x1693f,0x1693d,0x1694f,0x00000,0xe475f, +0x24b42,0x24b3f,0x24b40,0xe475a,0x24b58,0xe475c,0x24b5d,0x24b5b, +0x16943,0x24b5f,0x16947,0x1694e,0x00000,0x24b38,0x25143,0x24b41, +0xe475e,0x16941,0x16953,0x16950,0x16944,0x24b4b,0x24b3c,0x16951, +0x24b4d,0x1694b,0x1694d,0x1693c,0xe475d,0x24b4f,0x24b47,0x24b3a, +0x1694c,0x24b57,0x24b5a,0x24b43,0x24b4e,0xe4c74,0x16942,0x16d49, +0x24b4c,0x25142,0xe4762,0x24b53,0xe4761,0x00000,0x00000,0x00000, +0xe6544,0xe6545,0xe4766,0x00000,0xe6543,0x00000,0x24b3e,0x2514c, +0x25156,0x16d4c,0x25155,0x25161,0x16d4e,0x25153,0x00000,0x25157, +0x16d59,0xe4c7d,0x2514e,0x16d51,0xe4c73,0x2515a,0x2577b,0x16d5d, +0x16d5c,0x2515c,0x2514b,0x25166,0x16d57,0xe4c6b,0x16d4d,0x2515f, +0x00000,0x25163,0x25168,0x2515d,0x25151,0x16d50,0x16d53,0x16d5b, +0x16d56,0xe4c75,0x25154,0x24b48,0xe4c7e,0xe4c6c,0x25150,0x25167, +0x16d52,0xe4c79,0x16d55,0x25169,0x16d4a,0x2515e,0x25144,0x25164, +0x1742a,0xe4c7a,0x25152,0x00000,0x16d4b,0x2514d,0x16d4f,0x25145, +0x16952,0x25149,0xe6363,0x25162,0x2514a,0x25148,0x16d54,0xe4c7b, +0x25160,0xe4c77,0x25147,0x25159,0x25158,0x25165,0x2514f,0x16d58, +0x00000,0xe6547,0x00000,0x00000,0x00000,0xe6546,0x2577e,0xe5156, +0x17133,0x17129,0x2582c,0x25776,0x1712b,0x25824,0x17132,0x1712d, +0x25822,0x25d3b,0x25828,0x2582e,0x25827,0x25774,0x25825,0x25830, +0x25832,0x17128,0x25831,0x1712e,0x17134,0xe5154,0x17131,0xe5158, +0x2582b,0x17130,0x25826,0xe514d,0x25778,0x2577d,0xe5150,0x2582a, +0x1712f,0x1712c,0x17127,0x1712a,0x2577c,0x00000,0x25146,0x25777, +0x2577a,0x2582d,0x25821,0x25775,0x25d3a,0x2582f,0x25779,0x25829, +0xe4c71,0x00000,0x00000,0xe5155,0x25d3d,0x1742e,0xe5530,0xe552f, +0x17422,0xe5535,0xe5536,0x17426,0x25d3f,0x25d45,0x25d43,0x17424, +0x17425,0x1742c,0x25d46,0x25d3e,0x17427,0xe5531,0x25d42,0x25d41, +0x25d47,0x1742d,0xe5537,0x17428,0x1742b,0x25d40,0x1742f,0x17429, +0x17430,0x17423,0x25d44,0xe5a55,0x25d3c,0xe5159,0xe5539,0x26225, +0xe6548,0x00000,0x1765d,0x26222,0x26224,0xe5828,0x1765b,0x2617e, +0x26221,0x2617a,0xe582a,0xe5827,0x25823,0x2617b,0x1765c,0x26177, +0xe5826,0x17659,0x26226,0x1765a,0x26178,0x26179,0x2617d,0x1765f, +0xe5829,0x1765e,0x00000,0xe582b,0x2617c,0x17845,0x2656a,0x26570, +0x17846,0x26567,0x17843,0x17840,0x26572,0x17844,0xe5a52,0x17841, +0x26569,0x2656c,0x2656d,0x2656e,0x26571,0xe5a54,0x26223,0x26568, +0x17842,0x2656f,0x26934,0x2656b,0xe5a53,0xe654a,0xe6549,0x2692b, +0x17975,0x2692e,0x17976,0x26937,0x2692d,0x2692a,0xe5c51,0x2692c, +0x26930,0x26933,0x26932,0x26936,0x26929,0xe5c4f,0x17974,0x26931, +0x26935,0x26938,0x2692f,0x26b61,0x26b62,0x26b66,0x26b67,0xe5e3c, +0x26b64,0x26b65,0x26b63,0xe5e3a,0x17a74,0xe5e3b,0x00000,0x00000, +0x00000,0x17b64,0x26d59,0xe6036,0xe5f52,0x26d56,0x26d57,0x26d58, +0x17b65,0xe6037,0x26f34,0x26f33,0xe654b,0x2703d,0x17c60,0x2703b, +0x2703e,0x2703c,0x27125,0x17d24,0x17d32,0x27171,0x2715b,0xe6179, +0x27170,0x2723e,0x2723f,0x14556,0x00000,0x00000,0xe2428,0xe2426, +0x14848,0x22261,0xe2427,0xe242b,0x2245e,0xe2662,0x14b22,0xe265f, +0x14b25,0xe265e,0x2245f,0xe2663,0x14b23,0x14b24,0xe2660,0x00000, +0x00000,0xe2977,0x22778,0x2277a,0x22775,0x22772,0x22774,0xe2974, +0xe2970,0xe2975,0x14e65,0xe296f,0xe2979,0xe2976,0x14e63,0xe2972, +0xe2971,0x22776,0x14e64,0x22773,0x22770,0x14e62,0x22777,0x00000, +0x22771,0x14e66,0x22779,0x00000,0x00000,0x00000,0x00000,0x22b6f, +0xe2d5e,0x22b73,0xe2d5c,0xe2d5a,0x1523a,0xe2d58,0xe626a,0xe2d65, +0xe2d62,0x22b76,0xe2d5f,0x15232,0x15235,0x15237,0x15239,0x15236, +0x22b72,0x22b71,0xe2d64,0x15234,0x22b74,0x22b75,0xe2d63,0x22b6e, +0x15238,0xe2d68,0x15233,0xe2d5d,0x00000,0x00000,0x22b70,0xe654d, +0x00000,0x00000,0x00000,0x00000,0xe3228,0x2305a,0x2305b,0x2305c, +0x15653,0xe6279,0x1564f,0x23051,0xe322a,0x23059,0x2305e,0x15654, +0xe322b,0x2304f,0x23055,0x2304e,0x23058,0xe3231,0xe322f,0x23054, +0x15650,0x15652,0x2305d,0xe3229,0x2304d,0x23050,0x23056,0xe322d, +0x23057,0x2305f,0x23053,0xe322c,0x15651,0xe654f,0x00000,0x00000, +0x00000,0x00000,0xe654e,0x00000,0x00000,0x00000,0xe3230,0x15b72, +0x23671,0xe3730,0xe3732,0x23673,0x2366f,0xe372f,0x2367b,0x2366d, +0x2367a,0x15b6e,0x2366b,0x23d5f,0x23675,0x15b71,0xe3735,0x23676, +0x23679,0xe372e,0x2367d,0xe372c,0x23672,0x00000,0x23677,0xe372d, +0xe3731,0x15b6f,0x15b70,0x2367c,0x23670,0x2366c,0x2367e,0xe3733, +0x23674,0xe6550,0xe6551,0x23678,0x00000,0x00000,0x00000,0x2366e, +0x00000,0x1604e,0x1604f,0x23d69,0x16055,0xe3c74,0x23d5d,0x23d66, +0x23d5c,0x16052,0x23d64,0x23d62,0xe3c7d,0x23d63,0x16050,0xe3c7c, +0x23d67,0x00000,0xe3c6f,0xe3c7a,0xe3c72,0xe3d21,0x23d60,0x23d5e, +0x16051,0x23d61,0x23d65,0xe3c7b,0xe3c79,0xe3c71,0x16053,0xe3c73, +0xe3c77,0xe6553,0x23d68,0xe6554,0x00000,0xe6555,0x00000,0xe6552, +0x00000,0x24456,0x2445d,0x2445f,0x24465,0xe4257,0x16522,0x24451, +0xe424c,0x16478,0xe424e,0x24460,0x1647d,0x24466,0x16474,0xe4251, +0x24463,0xe4258,0x24453,0x24464,0x24452,0x00000,0x16524,0xe4252, +0x2445e,0x16475,0x24467,0xe483c,0x1647a,0x24457,0x16521,0x24462, +0x24455,0x2445c,0x24458,0x24454,0x16477,0x1647e,0x1647c,0x16479, +0x16523,0x16476,0x2445b,0xe424f,0x1647b,0xe4259,0x16054,0xe4249, +0x24461,0xe6559,0x24459,0x00000,0xe4253,0xe6557,0xe6558,0xe6556, +0x2445a,0x00000,0x00000,0x24b67,0xe476f,0x1695b,0xe476e,0xe476c, +0x24b63,0x24b69,0x24b65,0xe4770,0x1695d,0x24b64,0x24b68,0x24b60, +0xe4772,0x24b62,0x1695c,0xe476a,0xe476d,0xe476b,0xe4768,0x24b66, +0x24b61,0xe4767,0x1695e,0xe655b,0x16959,0x00000,0xe655a,0x24b6a, +0x00000,0x1695a,0x2516f,0x2516c,0x25178,0x25172,0x25174,0x16d5e, +0x2516e,0x25176,0xe4d2a,0xe4d24,0x25175,0x25173,0xe4d29,0x25179, +0x16d61,0x25170,0x25177,0xe4d28,0x16d5f,0xe4d25,0xe4d22,0x2516b, +0x2516d,0x16d60,0x2516a,0x2517a,0xe655c,0x25171,0xe5162,0xe515a, +0x25836,0x1713b,0xe5160,0xe515c,0x25841,0x2583f,0x17135,0x25835, +0x25838,0x25839,0x25834,0x1713f,0x17140,0x25833,0x25842,0x2583d, +0x17139,0x17136,0x2583c,0x2583a,0xe5163,0xe6374,0x1713c,0x2583e, +0x17137,0xe515e,0x17138,0xe5166,0x2583b,0x1713a,0x25837,0x00000, +0x25840,0x1713d,0x25843,0x25844,0x1713e,0xe655d,0xe655e,0x17432, +0x17439,0x25d48,0x25d4e,0xe553c,0x25d4c,0x17435,0x17434,0x17431, +0x25d4a,0xe553e,0xe5543,0xe5540,0x17437,0x17436,0x17433,0xe5541, +0x25d4d,0x25d49,0x25d4b,0xe5542,0x17438,0x00000,0x00000,0x00000, +0x17663,0x26229,0xe582d,0x17660,0x17661,0x2622b,0x17662,0x26228, +0xe582e,0x26227,0x26576,0x2622a,0xe5a56,0x26577,0x17847,0x26575, +0xe5a57,0x00000,0x26574,0xe5c59,0x26573,0x17848,0xe655f,0xe5c56, +0x17977,0xe5c58,0xe5c55,0x26939,0x2693a,0xe5a58,0xe5c53,0xe5c57, +0xe6561,0x26b6a,0x26b69,0x17a75,0xe5f53,0x26b68,0x26d5a,0x26d5b, +0xe5f54,0xe6039,0x26f35,0x2703f,0xe6143,0xe6142,0x27126,0x2722c, +0x17d46,0x27240,0x14557,0x00000,0x14e67,0x14e68,0xe2d69,0x00000, +0x1523b,0x00000,0xe3d22,0x00000,0x00000,0x1743a,0x14558,0x00000, +0x14e69,0x15655,0x16525,0x14559,0xe2d6b,0x15b73,0x1695f,0x22142, +0xe297c,0x22b77,0x23060,0x00000,0x24b6b,0x00000,0x1743b,0x1455a, +0x14e6a,0x22b78,0x22b79,0x23d6a,0x16056,0x00000,0xe425d,0x24468, +0xe425c,0xe425b,0x16526,0x24b6c,0x00000,0xe4d2e,0x16d62,0xe4d2d, +0x17849,0x1455b,0x23d6b,0x1455c,0x00000,0x1484a,0x22262,0x14849, +0x14b28,0x14b27,0x14b26,0x22460,0xe2664,0xe2a21,0xe2a22,0x14e6b, +0xe2a23,0x14e6c,0x2277b,0x00000,0x22b7a,0xe2d6d,0x22b7d,0x1523d, +0x22b7b,0x00000,0x1523c,0x22b7c,0x1523e,0x00000,0x23063,0x23062, +0x23061,0x15656,0xe3236,0x23722,0x23723,0x15b74,0x23721,0x23724, +0x16058,0x15b75,0xe3d24,0xe3d23,0x16057,0x23d6f,0x23d6e,0xe3d25, +0x23d6c,0x23d6d,0x00000,0x23d70,0x2446a,0x24469,0x2446d,0x00000, +0x2446c,0x2446b,0x16960,0x24b6f,0xe4775,0x24b6e,0x16961,0x24b6d, +0x2517b,0xe4d2f,0x2517c,0x16d63,0x00000,0x25845,0x25846,0x00000, +0x00000,0x2657c,0x1784a,0x2657b,0x2657a,0x26578,0x26579,0x17a76, +0x2693b,0x26d5c,0x27127,0xe617b,0x1455d,0x00000,0x22164,0x14667, +0x22165,0xe242c,0xe242d,0x00000,0x22263,0x22264,0xe266b,0x00000, +0x00000,0xe2669,0x22466,0xe2666,0xe2667,0x22462,0xe266a,0x22461, +0x14e6d,0x22465,0x14b2a,0x22463,0x14b29,0x22467,0x22464,0xe2668, +0x00000,0x22821,0x22b7e,0x2277d,0x22826,0xe2a26,0x14e6e,0xe2a2a, +0x14e71,0x22827,0x22823,0xe2a27,0x22824,0x00000,0x2277c,0x14e70, +0x2277e,0x14e6f,0x22825,0xe2a28,0x22822,0x00000,0x00000,0x22c24, +0x15240,0x15241,0xe2d75,0x22c27,0x22c21,0xe2d74,0x22c26,0xe2d70, +0x22c22,0x1523f,0x22c25,0x22c23,0xe2d73,0xe2d71,0x00000,0x00000, +0x00000,0x00000,0x00000,0x23069,0x23066,0xe3238,0x23068,0x1565b, +0x1565a,0x15658,0x23065,0x2306a,0x15657,0x15659,0x23067,0x2372c, +0x23064,0x2306b,0xe3239,0x00000,0x00000,0x00000,0xe3d26,0x23727, +0x2372b,0x00000,0x2372a,0x23d72,0x23d7d,0x00000,0xe373b,0x2372d, +0xe373a,0x23728,0x23d71,0x15b79,0x00000,0x00000,0x15b78,0x23726, +0x23729,0x15b7a,0xe3739,0x15b77,0x15b76,0x23725,0x2372e,0x00000, +0x00000,0x00000,0x23d74,0x23d7b,0xe3d27,0x1605a,0x23d7a,0x23d77, +0xe3d2e,0x1605c,0xe3d29,0xe3d2b,0xe3d2a,0x23d79,0xe4261,0xe3d2d, +0x23d73,0x23d75,0x23d78,0x23d76,0x1605b,0x23d7c,0x16059,0x16527, +0xe3d28,0x00000,0x24471,0x24470,0x2446e,0x00000,0x1652a,0x16529, +0x24472,0xe425f,0x2446f,0x24b70,0x16962,0x16528,0xe4262,0xe6562, +0xe6563,0x24474,0x24473,0xe4d30,0x24b73,0x24b71,0x16d64,0xe4779, +0x16963,0x24b72,0x2517e,0xe4778,0xe477a,0xe4777,0x00000,0x16d65, +0x2517d,0x25228,0x25227,0x25225,0x00000,0x25224,0x25221,0x25222, +0x25223,0x25226,0x25229,0x00000,0x00000,0x2584b,0x25848,0x25849, +0x17141,0x25847,0x2584d,0x2584c,0x2584a,0x00000,0x25d50,0x25d51, +0x1743c,0xe5549,0x1743d,0x25d4f,0x00000,0x17665,0x2622c,0x17664, +0x1784b,0x00000,0x1784c,0x17978,0x2693d,0x2693c,0x26b6b,0x26d5d, +0x17b66,0x26f37,0x26f36,0x26f38,0x14668,0x22c28,0x1565c,0x15b7b, +0x2372f,0x14669,0x22166,0x1455e,0xe225a,0xe216b,0x22265,0xe242f, +0x00000,0x00000,0x2246c,0x2246a,0x2246b,0x22468,0x14b2b,0x22469, +0xe266e,0x00000,0x00000,0x00000,0xe2a33,0x2282f,0xe2a2d,0x14e74, +0x2282d,0x22829,0x2282c,0xe2a2c,0x22828,0x14e76,0x2282b,0xe2a2b, +0x14e73,0x14e72,0xe2a32,0x14e75,0x2282e,0x2282a,0x00000,0xe2a2f, +0x00000,0x00000,0x15245,0x15248,0x22c30,0x22c2f,0x22c2e,0x15242, +0x22c37,0x22c2d,0x00000,0x15244,0x23070,0xe2d78,0x22c34,0x22c32, +0x15247,0xe2d7b,0x22c2a,0x22c35,0xe2d77,0x22c2c,0x22c36,0x22c33, +0x22c2b,0xe2d7a,0x15243,0x22c38,0x22c29,0x15246,0xe2d7e,0xe2d79, +0xe2d7c,0x00000,0x23075,0x2306c,0x23077,0xe323e,0x2306f,0x2307a, +0x2307b,0x2306d,0x23079,0x23076,0x23074,0x23078,0x15662,0xe3240, +0x15660,0xe3247,0xe323c,0x23072,0xe3246,0x2306e,0xe3241,0x23071, +0x2307c,0x23073,0x15661,0x22c31,0xe323d,0x1565d,0x1565f,0xe6564, +0x00000,0x00000,0x00000,0xe373d,0x2373d,0x23732,0x23730,0xe3d38, +0x23731,0xe323f,0x23738,0xe3740,0x23739,0x23735,0x15c22,0x2373a, +0x23737,0x23734,0xe373c,0x15b7e,0x23733,0x15b7c,0x15c21,0x23736, +0x2373e,0x1565e,0x15b7d,0x2373c,0x2373b,0x15c23,0x00000,0x00000, +0x00000,0x00000,0xe6565,0x00000,0xe3d36,0xe3d3a,0x23e24,0xe3d2f, +0xe3d3b,0xe3d32,0x23e25,0x16066,0xe3d39,0x23e2b,0xe426d,0xe3d35, +0x23e2d,0x23e26,0x16060,0x23e2a,0x23e29,0x16061,0x16067,0xe4264, +0x16068,0x23e2c,0x1605e,0x23e23,0x23e21,0x23e27,0x23d7e,0x16065, +0x23e22,0x23e28,0x23e2e,0x1605f,0x16064,0x16062,0x16063,0x00000, +0xe3d33,0xe3d3c,0x1605d,0xe6566,0xe3d37,0xe4268,0xe4275,0x16531, +0x2447b,0x16530,0x24521,0xe426f,0x24475,0xe4274,0x24522,0xe426e, +0xe4266,0xe4271,0x24476,0x24477,0xe4273,0x24523,0x2447e,0x2447c, +0x2447d,0x24479,0x24478,0xe4267,0x24524,0x1652d,0xe426b,0x2447a, +0xe4270,0x16532,0x1652c,0x16533,0x16534,0xe426a,0x1652f,0x1652e, +0xe4825,0xe477e,0x24b74,0x16965,0x16964,0xe477c,0xe477d,0x24b79, +0xe4822,0x16d66,0x16966,0xe4821,0xe477b,0x16968,0x24b7a,0x1652b, +0x16967,0x24b76,0x24b78,0x24b75,0xe4827,0x24b77,0xe4823,0x00000, +0x00000,0x25233,0xe4d31,0xe4d3b,0x25232,0x2522f,0x16d69,0x2584e, +0x16d6a,0x2522e,0xe4d39,0x16d68,0xe4d36,0x25230,0x2522d,0x2522a, +0x25231,0x2522b,0x2522c,0x16d67,0xe4d35,0xe6568,0x00000,0x00000, +0x25d55,0x00000,0x25852,0xe4d3a,0x25851,0x25853,0xe516a,0x25d52, +0x17144,0xe6375,0x2584f,0xe5167,0x17142,0xe516c,0x17146,0x17145, +0x25850,0x25854,0xe516b,0x17143,0xe6567,0x25d59,0x17440,0x17666, +0x17441,0x1743e,0x25d56,0x25d54,0xe554f,0x25d57,0xe554b,0x25d5a, +0x1743f,0x25d58,0x25d53,0xe554d,0xe6569,0x2622f,0x26232,0x26621, +0x2622d,0xe582f,0x2693e,0x26233,0xe5830,0x1784d,0x26231,0x17667, +0x2622e,0x26230,0x26234,0x26622,0xe5a5a,0x2657e,0x00000,0xe5a5c, +0xe5a5d,0xe5a5b,0x1784e,0x2657d,0xe5c5e,0xe5c5c,0xe5c5f,0x17979, +0xe5c5d,0xe5c60,0x00000,0xe5e3d,0x17a78,0x26d5f,0x17a77,0x26d61, +0x26d5e,0x26d60,0x17c3c,0x27040,0x1466a,0x22830,0x2307d,0x2307e, +0x15c24,0x24525,0x17147,0x1784f,0x17b67,0x27041,0x1466b,0x00000, +0x22831,0x12322,0x00000,0xe2e22,0x22c39,0xe2e21,0x22c3a,0xe2e24, +0x00000,0x00000,0x00000,0xe3248,0x23121,0x23122,0x15c25,0x15c26, +0x00000,0xe3d3d,0x00000,0x23e2f,0x00000,0x24528,0x24527,0x24526, +0x24b7b,0xe4277,0x24b7c,0x24b7d,0x16969,0x00000,0xe4828,0x25235, +0x25234,0xe4d3d,0xe516d,0x25855,0x17148,0x17149,0xe516e,0x25d5e, +0x25d5b,0x25d5c,0x25d5d,0x26236,0x26235,0x17668,0x26623,0x26b6c, +0x1466c,0x00000,0x15249,0xe3744,0x15c27,0x24529,0xe4278,0x1466d, +0x00000,0x23123,0x15c28,0xe3745,0xe3d3e,0x16069,0x1606a,0x00000, +0x1466e,0x1466f,0x22266,0x14b2d,0x14b2c,0x1524a,0x22c3b,0x23e30, +0x14670,0x14671,0x14672,0x14673,0x00000,0x00000,0x00000,0x14b2e, +0x14b2f,0x2246e,0x2246d,0xe2a37,0x00000,0x14e77,0x22834,0x22832, +0x22833,0xe2a38,0xe2a35,0x00000,0xe2a36,0x00000,0xe2e27,0x22c3c, +0x22c3d,0xe2e25,0xe2e28,0x1524e,0x1524c,0xe2e2a,0x1524d,0x1524b, +0xe2e26,0x00000,0x00000,0x00000,0x15663,0xe324e,0xe324d,0xe3250, +0xe324f,0x15667,0x15666,0x23124,0x15665,0x15664,0xe3251,0x23125, +0x00000,0xe3746,0x15c2b,0x23740,0x2373f,0x15c29,0x15c2a,0xe3749, +0xe3747,0x00000,0x1606c,0x1606b,0x23e32,0xe3d43,0xe3d42,0x23e31, +0x15c2c,0xe3d44,0x00000,0x00000,0x00000,0x00000,0x16535,0x2452b, +0x16536,0x2452a,0xe427b,0x00000,0x00000,0x24b7e,0x25236,0x16d6b, +0x25856,0xe5170,0x00000,0xe5552,0x25d5f,0x00000,0x17851,0x17850, +0x00000,0xe5c62,0x17b68,0x14674,0x22835,0x00000,0xe3d45,0x15c2d, +0x24c21,0x1696a,0xe225b,0xe2673,0x2246f,0x22470,0x00000,0x00000, +0x22836,0x14e79,0x14e7a,0xe2a3a,0x00000,0x14e78,0xe2a3b,0x00000, +0x00000,0x00000,0x15252,0x15253,0x15250,0x15251,0xe2e2b,0x22c3e, +0xe2e2f,0x00000,0x22c3f,0x1524f,0x00000,0x00000,0x00000,0x00000, +0x23126,0xe3257,0x1566b,0x1566c,0xe3255,0x15c30,0x2312c,0x00000, +0x15671,0x1566f,0x2312d,0x23128,0x1566e,0x1566d,0x15668,0x2312b, +0x2312a,0x23127,0x15670,0xe3252,0x23129,0x15669,0x00000,0x1566a, +0x00000,0x00000,0x15c31,0x23744,0x23745,0x15c32,0x23741,0x23743, +0x23747,0x23746,0x23742,0xe374a,0x15c2e,0x15c2f,0x00000,0x23e3a, +0x16071,0x16070,0x23e34,0x1606e,0x00000,0x23e37,0x16072,0x23e38, +0x16073,0x23e35,0x1606d,0x1606f,0x23e39,0xe3d47,0x23e36,0x23e33, +0x00000,0x00000,0x00000,0x00000,0x00000,0x24538,0xe427c,0x2452d, +0x16538,0x1653b,0x1653a,0x1653f,0x1653e,0x24539,0x24537,0x24530, +0x24534,0x24533,0x1653c,0x24536,0x24532,0x2453a,0x24531,0x1653d, +0x16537,0x16539,0xe427d,0x2452f,0x00000,0x00000,0x00000,0xe482b, +0x24c23,0x1696e,0x24c27,0x1696d,0x24c24,0x1696c,0xe4829,0x2452e, +0x24535,0x24c26,0x00000,0x1696f,0x24c28,0x24c25,0x24c22,0x00000, +0x00000,0x25239,0x2523d,0x2523f,0x2523b,0x2523a,0x25238,0x16d6e, +0x16d6c,0x16d71,0x16d72,0x2523c,0x16d6f,0x25237,0x16d70,0x1696b, +0x2523e,0x16d6d,0x00000,0x00000,0xe5171,0x25858,0x00000,0x25857, +0x2585f,0x25859,0x2585e,0x2585b,0x1714a,0x2585d,0xe5173,0xe5172, +0x1714b,0x00000,0x1714c,0xe5174,0x2585c,0x2585a,0x00000,0x00000, +0x00000,0x00000,0x17443,0x25d60,0xe5555,0xe5553,0x17442,0x25d63, +0x25d61,0x25d62,0x00000,0x00000,0x17444,0x00000,0xe5554,0xe5834, +0x2623a,0xe5833,0x1766b,0x2623b,0x00000,0x00000,0x17669,0x2623c, +0x1766a,0x26239,0x2623d,0xe5832,0x26237,0x00000,0x00000,0x17852, +0x26624,0x17853,0x1797a,0x00000,0x26238,0x1797b,0x00000,0xe5e3f, +0xe5e3e,0x17a79,0x26b6d,0x00000,0x17b6a,0x26d62,0x17b69,0xe603b, +0x26f39,0x17c61,0x17c62,0xe656a,0x00000,0x2723a,0xe225c,0xe656b, +0x15254,0x22c40,0x00000,0x16074,0x16075,0x14675,0x1484b,0x22267, +0xe2674,0x22471,0x14b30,0xe2676,0x14e7b,0x00000,0x15255,0x15256, +0x15257,0x23749,0x2312e,0x15672,0x00000,0x00000,0x15c33,0x23748, +0xe374d,0x00000,0x23e3c,0x16077,0xe3d4c,0x23e3b,0x16076,0xe427e, +0xe4321,0x2453b,0x16d73,0x25243,0x25240,0x25241,0x25242,0x00000, +0x00000,0xe5176,0x00000,0xe5556,0x25d64,0xe5557,0x2623e,0x00000, +0x00000,0xe5a5e,0x26940,0x2693f,0x00000,0x26d63,0x14676,0x22837, +0x15673,0x00000,0x00000,0xe3d4d,0x16078,0x2453c,0x00000,0xe4830, +0x24c29,0xe482e,0x16d74,0x25860,0xe656c,0x2623f,0x26941,0x14677, +0xe2677,0xe2678,0x14e7c,0x1525a,0x22c41,0x1525b,0x15259,0xe2e32, +0x15258,0x2312f,0x15674,0xe325a,0xe325b,0x15675,0x15676,0x00000, +0x00000,0x00000,0x15c35,0x2374a,0x15c34,0xe3750,0xe3752,0xe3751, +0x00000,0xe3d4f,0x23e3d,0x15c36,0x16079,0x2453d,0x16540,0x16541, +0x00000,0x16970,0xe4831,0x16971,0x16d75,0x1714e,0x25861,0x1714d, +0x00000,0x25d65,0x17445,0xe5835,0x26240,0x26942,0x14678,0x14b31, +0x2283a,0x22839,0x14e7d,0x22838,0x14e7e,0x2283b,0x00000,0x22c47, +0x1525e,0x1525d,0x22c49,0x22c48,0x15262,0xe2e35,0x15261,0xe2e33, +/* 0x7700 */ +0x00000,0x1525c,0x00000,0x22c43,0x22c44,0x22c45,0xe626c,0x15263, +0x22c42,0x1525f,0x22c46,0x15260,0x00000,0x00000,0xe3264,0xe325f, +0x23132,0x23136,0x23134,0x23133,0x00000,0x23137,0xe325e,0x00000, +0xe3268,0x23138,0x23139,0x23131,0x00000,0x23130,0xe3759,0x15678, +0x15679,0xe3267,0x2313a,0x23135,0xe3265,0x23753,0xe3755,0x2313b, +0x1567a,0x15677,0xe325c,0xe3263,0x00000,0x2374d,0x00000,0x2374c, +0xe3753,0x2374e,0x2374f,0x23751,0x23750,0x23755,0x15c3a,0x15c37, +0x15c3b,0x2374b,0x15c3c,0x23754,0x15c39,0x23752,0x15c38,0xe3262, +0xe3757,0x00000,0xe3d56,0xe3d53,0x23e40,0x23e42,0x23e3e,0x23e3f, +0xe3d51,0xe3d52,0x23e43,0x23e45,0x23e46,0x23e41,0x23e44,0x1607a, +0x00000,0x00000,0x24541,0xe4327,0x24546,0x2453e,0x24542,0x00000, +0xe4328,0x24547,0x24543,0x16542,0x1654a,0xe4325,0x16545,0x2453f, +0x24540,0x16975,0x1654d,0x16546,0xe4326,0x1654b,0x16544,0x24545, +0x1654c,0x24544,0x16548,0x16543,0x16549,0x24548,0x24c2e,0x24c30, +0x00000,0xe4839,0x00000,0x00000,0xe4833,0xe4836,0xe4835,0xe4834, +0xe4838,0x16547,0xe483b,0xe483d,0x24c2b,0x16973,0x24c31,0x16974, +0x24c2f,0x24c2a,0x24c2d,0x24c32,0x16972,0x24c2c,0x00000,0x16d77, +0x25247,0x25246,0xe4d44,0x16d7a,0x16d78,0x25244,0x16d76,0x25245, +0xe4d46,0x16d79,0x00000,0x00000,0x00000,0x25869,0xe517b,0x2586b, +0xe5179,0x2586a,0x25862,0x25866,0x25865,0x25863,0x17150,0x17151, +0x1714f,0x25864,0x25867,0x25868,0xe5559,0x17152,0xe5558,0x1744a, +0x25d6d,0xe555b,0x17447,0x25d67,0x17449,0x1744b,0x00000,0xe555c, +0x17448,0x25d6c,0x25d68,0x17446,0x25d6b,0x25d66,0x25d6a,0x25d69, +0xe5836,0xe5838,0x26242,0x1766e,0x1766f,0x1766c,0xe583b,0x1766d, +0xe583a,0xe5839,0x26241,0x00000,0x26627,0xe5a60,0xe5a5f,0x17854, +0x00000,0x26625,0x26626,0x00000,0x26943,0x26946,0x26944,0x26945, +0x26b6e,0xe5e42,0x00000,0x17a7a,0x26f3a,0x27042,0xe6432,0x17c63, +0x27128,0x27129,0x17d33,0x14679,0x15264,0xe3269,0x23e47,0xe3d57, +0x24549,0x00000,0x1467a,0x14b32,0x00000,0x14f21,0xe2e36,0x22c4a, +0x22c4b,0x1567b,0x00000,0x00000,0x23e48,0x1607b,0x1654e,0x1744c, +0x25d6e,0x26628,0x26947,0x1467b,0xe267b,0xe267c,0x00000,0x22841, +0x2283c,0x2283e,0x22840,0x2283f,0x2283d,0x14f22,0x00000,0x00000, +/* 0x7800 */ +0x00000,0x00000,0x15265,0x22c54,0xe2e39,0x22c4f,0x22c4c,0xe2e3b, +0xe2e3e,0x22c53,0xe2e37,0xe2e3a,0x15267,0x15268,0x22c52,0x22c51, +0x22c50,0x22c4d,0x22c4e,0x22c55,0x15266,0xe2e3d,0x00000,0x00000, +0x00000,0xe656d,0x00000,0xe656e,0x00000,0x15721,0xe667c,0x15727, +0x15726,0x23144,0x2313e,0x2313c,0xe326c,0x15724,0x2375c,0x1567d, +0x23141,0x23145,0x23147,0x23143,0x2313d,0x15725,0x23142,0x23140, +0x1567c,0x23148,0x15728,0x23146,0x15722,0x2313f,0xe326d,0x15723, +0x1567e,0x00000,0x00000,0x00000,0x00000,0xe656f,0x00000,0x00000, +0x00000,0x00000,0xe3762,0x15c3e,0x00000,0x2375d,0xe3763,0xe375d, +0x23756,0x23758,0x2375a,0xe375f,0x2375b,0x23759,0x15c3f,0xe3761, +0x2375e,0xe3760,0x23757,0xe6570,0xe6571,0x00000,0x00000,0x00000, +0xe6572,0x00000,0x00000,0x00000,0x23e4c,0x1607c,0x23e54,0xe3d5c, +0x23e49,0x00000,0x23e55,0xe3d59,0x23e4a,0x23e4b,0xe3d5d,0x00000, +0x23e53,0x23e52,0x23e4f,0x15c3d,0x1607d,0x23e4d,0x23e50,0x1607e, +0x23e51,0x23e4e,0x00000,0x00000,0x00000,0x00000,0xe3d5a,0x00000, +0xe4331,0x24554,0xe432d,0x24558,0x16555,0xe432e,0x24c38,0x16558, +0x24556,0xe4337,0xe4329,0x24553,0x2454e,0x24550,0x24551,0x2454a, +0xe4335,0x16554,0xe432b,0xe4330,0x16553,0xe4334,0x1654f,0x2454d, +0xe432a,0x16556,0xe4336,0x16557,0x2454c,0x2454f,0x24557,0x16551, +0x16552,0x24555,0x2454b,0x00000,0x00000,0x00000,0x24c3a,0x16977, +0x24c3c,0x24552,0x24c3e,0x1697b,0x24c3f,0x24c3b,0xe483e,0x16978, +0x24c37,0x1697a,0x24c34,0x24c39,0x24c3d,0x24c36,0xe483f,0xe4845, +0x16550,0xe4844,0x24c33,0x16979,0x24c35,0x00000,0x00000,0xe6573, +0xe4840,0x00000,0x16d7d,0x25249,0x16e23,0x00000,0x16e21,0x00000, +0xe4d4a,0x16976,0xe4d4d,0x25250,0x25251,0x16d7c,0xe4d48,0xe4d4c, +0x2524f,0x25252,0x16d7e,0x16d7b,0x2524b,0x25248,0x2524d,0x2524a, +0x16e24,0x2524c,0xe4d4b,0xe4d49,0x2524e,0x16e22,0xe5221,0x00000, +0xe6574,0x00000,0x17154,0x25872,0xe5224,0x2586c,0x25870,0x25876, +0x25877,0x25873,0x25874,0x25871,0x00000,0x2586e,0x00000,0x17156, +0x17153,0x2586d,0x2586f,0xe5222,0x17155,0x25875,0xe6575,0x17450, +0xe5560,0xe5562,0x25d75,0x25d6f,0x1744f,0x00000,0x00000,0x1744d, +0xe5561,0x25d77,0x1744e,0x25d72,0x25d73,0x25d70,0x25d78,0x25d74, +/* 0x7900 */ +0x00000,0x17451,0x25d71,0x00000,0x25d79,0x25d76,0xe5843,0xe583e, +0xe5840,0x26246,0xe583f,0xe583c,0x26243,0xe5842,0x17670,0x00000, +0x26247,0x26249,0x26248,0x26244,0x26245,0xe5844,0x00000,0x2662d, +0xe5a61,0x17855,0xe5a62,0x2662a,0x2662c,0x26629,0x2662e,0x00000, +0xe5a63,0x2662b,0xe6576,0x26949,0x2694c,0x26948,0x1797c,0x2694a, +0x2694b,0x2694d,0x1797d,0x17a21,0x1797e,0x26b6f,0xe5e45,0x26b71, +0xe5e43,0x26b70,0xe5e44,0x00000,0x00000,0x26d64,0x00000,0xe603c, +0x27043,0x2712a,0x1467c,0x00000,0xe2433,0x22472,0x14f23,0x22843, +0x14f24,0x14f25,0x22842,0x00000,0x22c5a,0x22c59,0x15269,0x1526c, +0x1526b,0x1526a,0x22c56,0x22c58,0x22c57,0xe6577,0x00000,0x2314b, +0x1572a,0x2314f,0x2314e,0x2314d,0x23149,0x15729,0x1572d,0x15730, +0xe326f,0xe3270,0x15731,0x2314a,0x2314c,0x1572f,0x1572e,0x1572c, +0x1572b,0x23765,0xe3272,0x23763,0x2375f,0x15c40,0xe3d5e,0x23760, +0x15c41,0x23761,0x23762,0x23764,0xe3766,0x15c42,0xe3765,0x00000, +0x23e59,0xe3d5f,0x23e58,0x23e57,0x23e56,0xe3d64,0xe3d62,0x00000, +0x00000,0x2455c,0x16559,0x00000,0x24559,0x2455b,0xe4338,0x1655a, +0xe433d,0x1655b,0x2455a,0xe4339,0xe3d63,0x00000,0xe6578,0xe4848, +0x24c48,0xe4847,0x24c41,0x24c42,0x00000,0x1697e,0x1697c,0x1697d, +0x24c4a,0x00000,0x24c49,0x24c46,0x24c45,0x24c44,0x24c43,0x24c47, +0x24c40,0xe6579,0x25253,0x25258,0x25256,0xe4d50,0xe4d51,0xe4d4f, +0x25255,0x25254,0x25257,0xe657a,0x25878,0xe5226,0x17157,0x17452, +0x25d7b,0xe5227,0x17453,0x25d7a,0x2624b,0x2624a,0x17671,0xe5845, +0x2662f,0x17856,0x2694e,0x17b6b,0x26d65,0xe603d,0x27045,0x27044, +0x22167,0x1526d,0x1526e,0x23766,0xe657b,0x1655d,0x1467d,0x14b35, +0x14b34,0x14b33,0x00000,0xe2a3e,0xe2a3d,0x22844,0xe2a3f,0xe2a42, +0x14f27,0x14f26,0xe2a44,0x15271,0xe654c,0x22c5c,0x22c5f,0x22c5d, +0xe2e42,0x1526f,0x15270,0xe2e40,0xe2e41,0x22c5b,0x22c5e,0xe2e43, +0x15738,0xe3274,0xe3273,0xe3279,0x23156,0x23158,0x23157,0x15735, +0x23152,0xe3276,0xe327b,0x15733,0x15732,0xe3277,0x15736,0x15734, +0xe3278,0x15737,0x23155,0x23150,0x23151,0x23154,0x23153,0x00000, +0xe327c,0xe3769,0xe3767,0xe376b,0x00000,0xe376a,0x23769,0x2376a, +0x23768,0xe376c,0x23767,0x15c43,0x00000,0x00000,0x00000,0xe3d65, +0x16125,0x00000,0x23e5a,0x23e5c,0x23e5e,0x16124,0x00000,0xe3d66, +0x16122,0xe3d69,0x23e5b,0x16123,0x23e5d,0x16121,0xe3d68,0xe4341, +0x24566,0x2455d,0x24560,0x24564,0x16561,0x24562,0x00000,0x24561, +0x2455e,0x2455f,0x1655f,0x24565,0x1655e,0xe4344,0x16563,0x16562, +0x16560,0x00000,0x24563,0x00000,0x00000,0xe6524,0x24c50,0x00000, +0x24c4f,0xe484b,0xe484d,0x24c4b,0xe4850,0xe484f,0x16a21,0x24c4e, +0x24c4d,0x16a22,0xe4852,0x00000,0x00000,0x00000,0x00000,0x16e29, +0xe4d55,0x2525a,0xe4d56,0x16e2a,0x16e26,0x16e28,0xe4d5a,0x16e25, +0x16e27,0xe4d53,0xe4d57,0x00000,0x25879,0xe522a,0x1715a,0x2587b, +0x2587a,0xe5564,0x24c4c,0x1715c,0x1715b,0x17158,0x17159,0xe522c, +0x00000,0x00000,0x00000,0xe5229,0x25e22,0x00000,0x25d7e,0x17454, +0x25e21,0x00000,0x25e23,0x25d7d,0x25d7c,0x00000,0x00000,0x2624c, +0x17674,0x17672,0x17673,0x00000,0xe5a66,0x00000,0xe5a65,0x26630, +0x26631,0x17858,0xe5a67,0x17857,0x26950,0x26951,0x2694f,0xe5c64, +0x26d66,0x26d67,0xe6076,0xe6077,0x1467e,0x22268,0x14b36,0x00000, +0x22845,0x14f29,0x14f28,0x22846,0xe2e44,0xe2e47,0x22c61,0x15272, +0x22c60,0x15273,0xe2e49,0xe2e48,0x15739,0x2315b,0x23159,0x2315f, +0x1573a,0x2315a,0x2315e,0x2315c,0x2315d,0x00000,0x00000,0x2376b, +0x2376d,0xe3772,0x15c44,0xe3771,0x2376c,0x15c45,0x16128,0x16127, +0x16126,0x23e5f,0xe3770,0x00000,0x00000,0x00000,0x24569,0x16564, +0x16565,0xe4346,0x24568,0x24567,0xe4347,0x00000,0x00000,0xe657c, +0x24c51,0x16a24,0x16a23,0x24c52,0x24c53,0x00000,0x16e2c,0x16e2b, +0xe4d5b,0x25921,0x2525b,0x2525d,0x2525c,0x2587e,0x2587c,0x25922, +0x2587d,0x00000,0x1715d,0xe522f,0x00000,0xe522e,0x25e24,0x17455, +0x25e25,0x25e26,0xe5568,0x00000,0x17675,0x17676,0x00000,0x17a22, +0xe5e49,0xe5e48,0x17c3d,0x14721,0xe267e,0xe2721,0x00000,0xe2a47, +0xe2e4e,0x22c62,0xe2e4f,0xe2e4d,0xe2e4b,0xe2e4c,0x00000,0x00000, +0x23160,0x1573b,0xe3323,0xe3326,0xe3327,0xe3324,0x00000,0x15d7e, +0x15d7d,0xe3773,0xe3d71,0x1612a,0x23e61,0x16129,0x23e60,0xe3d70, +0x00000,0xe4349,0xe434a,0x2456a,0xe4854,0x16a25,0x24c54,0x16a26, +0xe4855,0xe5230,0xe5569,0xe556a,0x00000,0xe5849,0x17a23,0x26952, +0xe5f55,0x1484c,0x14f2a,0x22847,0xe2e51,0x15275,0xe2e50,0x15274, +0x22c63,0x22c64,0x00000,0x00000,0x23162,0x23164,0x1573c,0x00000, +0x23166,0x23169,0x23167,0xe332b,0x00000,0xe332a,0x23168,0x23165, +0x23161,0x1573d,0x2316a,0x23163,0xe332c,0x00000,0xe3778,0xe3779, +0x23776,0x15c4b,0x23821,0x15c48,0xe3777,0x23778,0x15c4c,0xe377b, +0x15c46,0xe3776,0x23773,0x23822,0x23774,0x23771,0x15c4a,0x00000, +0x15c47,0xe632d,0x23777,0x2377a,0x15c49,0x2377b,0x15c4d,0x2377c, +0x23772,0x23779,0x2377d,0x23775,0x23770,0x2376e,0xe377a,0xe657d, +0x2377e,0x00000,0x00000,0x2376f,0x00000,0x00000,0x00000,0x00000, +0x23e68,0xe3d7b,0xe3d78,0xe3d75,0x23e64,0x23e6a,0x1612d,0x23e63, +0x23e65,0x1612b,0x23e62,0x16132,0x23e66,0x16131,0x23e67,0x16133, +0x1612e,0x16134,0x1612f,0xe3d79,0x16130,0xe3d72,0x1612c,0xe3d76, +0x23e69,0xe657e,0x00000,0x00000,0x00000,0x00000,0xe434f,0x00000, +0x16568,0x24575,0xe434c,0x24578,0x2456c,0x24571,0x2456b,0x1656a, +0xe4355,0x2456f,0x00000,0xe434d,0xe3d77,0x2456d,0x16569,0xe4354, +0x24574,0x24573,0x24570,0x24572,0x2456e,0x16a2a,0x24577,0x16566, +0x24576,0xe4351,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0xe4856,0x24c64,0xe4858,0x16a31,0x24c5f,0xe4860,0x16a30, +0x24c55,0x00000,0x24c57,0x16a29,0x24c5c,0x24c5b,0x24c5e,0x16a2e, +0x24c59,0x24c58,0xe485a,0xe485e,0x16a2d,0x16a28,0x24c5a,0x16a2b, +0x24c60,0x24c62,0x00000,0x24c5d,0x24c56,0x16a2c,0xe4857,0xe485d, +0x16e34,0x16a27,0x00000,0xe485c,0x24c63,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x25261,0x16e2d,0xe4d5c,0x25263, +0x00000,0x16e2e,0xe4d65,0xe4d5d,0x16e30,0x25266,0x00000,0x2525e, +0x16a2f,0x25264,0x00000,0x00000,0x00000,0x00000,0x25260,0xe4d60, +0x16567,0x16e33,0xe6367,0xe6366,0x16e2f,0x00000,0x16e31,0x16e32, +0x00000,0x17160,0x25265,0x2525f,0x16e35,0xe4d63,0x25262,0x00000, +0xe6621,0x00000,0x00000,0x00000,0x2592c,0x25927,0x00000,0x00000, +0x25931,0x1715e,0x25929,0x17162,0x2592f,0x25926,0x25923,0x25932, +0x1745b,0x17163,0x2592e,0x25924,0x17161,0x25928,0x17165,0x25925, +0x2592a,0x17164,0x2592d,0x25930,0xe5233,0xe5234,0x00000,0x00000, +0x25e38,0x25e39,0x25e29,0x25e30,0x25e2e,0x00000,0xe556d,0x17459, +0x25e35,0x2592b,0xe556b,0x25e2c,0xe556e,0x25e36,0x17458,0x25e2b, +0x25e2a,0x25e34,0x25e31,0x25e33,0x00000,0x25e27,0x25e37,0x17456, +0xe5570,0x25e32,0x25e3b,0x25e2f,0x1745a,0x17457,0x25e2d,0x25e28, +0x25e3a,0x1715f,0xe5571,0x00000,0x00000,0x00000,0x00000,0x00000, +0xe556f,0x2624f,0xe5850,0xe584e,0x2624d,0x26253,0x1767a,0x26251, +0x26250,0x1767c,0x26256,0x1767b,0xe5851,0x26257,0x26254,0x17678, +0x26255,0x2624e,0x17679,0x17677,0x26635,0x26252,0xe584c,0xe6622, +0x26258,0x00000,0xe6623,0x26632,0xe5a6f,0xe5a6e,0x00000,0x1785d, +0x1785b,0x26634,0x00000,0x26636,0x26633,0x1785c,0x17859,0x1785a, +0x1785e,0x00000,0xe6624,0x17a25,0xe5c66,0x26957,0x00000,0x26956, +0x26954,0x26953,0x26955,0xe5c65,0x17a24,0x17a26,0xe6625,0x00000, +0x17a7b,0xe5e4c,0x00000,0x26b73,0x26b72,0x00000,0xe5e4b,0x26d68, +0xe5f58,0x26d6a,0x26d6c,0x26d6b,0x26d69,0xe5f57,0xe603f,0x17b6d, +0x17b6c,0x00000,0xe603e,0x17c3f,0x17c3e,0x17c40,0x26f3c,0x26f3b, +0xe6626,0x2712b,0x27046,0x2712c,0x17d25,0xe6144,0x17d26,0x2715c, +0x00000,0xe623a,0x17d4b,0x1484d,0xe2a49,0x22848,0xe2a48,0xe2e52, +0x22c66,0x22c67,0x22c65,0xe2e54,0xe2e53,0x15276,0x00000,0x22c68, +0x22c69,0x22c6a,0x00000,0xe3331,0x2316b,0x23171,0xe332e,0xe3330, +0x2316f,0x1573e,0x2316d,0xe3332,0x2316e,0x23170,0xe332d,0x00000, +0x00000,0x2316c,0x15c4e,0xe377d,0x23823,0x15c50,0x23825,0x15c4f, +0x23824,0xe377e,0xe3821,0xe383e,0xe3822,0x00000,0x23e6c,0x16135, +0xe3e21,0x23e6e,0x23e6b,0x23826,0xe3e23,0x16136,0xe3e22,0xe3d7e, +0x23e6d,0xe6627,0x00000,0x00000,0x00000,0x00000,0xe4358,0x2457b, +0xe435c,0x1656b,0x24579,0x1656c,0x2457a,0x1656d,0x00000,0xe4862, +0xe4861,0x16a32,0x24c68,0x24c65,0x24c67,0x16a33,0x16a34,0x24c66, +0x00000,0x00000,0xe4d6f,0xe4d71,0xe4d6d,0x25267,0xe4d70,0xe4d73, +0x25268,0xe4d72,0x16e36,0x2526a,0x25269,0xe4d6e,0x12323,0x00000, +0x25936,0x25937,0x25933,0xe5237,0x25934,0x17166,0x17167,0x25935, +0x00000,0x17461,0xe5575,0xe5574,0x1745d,0x17462,0x1745e,0x17460, +0x1745c,0xe5239,0x1745f,0xe5855,0x00000,0x00000,0xe5854,0x1767d, +0x25e3c,0x00000,0x26638,0x00000,0x26637,0xe6628,0x26958,0x17a27, +0x17a28,0x26d6e,0x26b74,0xe6169,0x26d6d,0xe6040,0x2712d,0x27172, +0x1484e,0x00000,0xe2722,0x14b37,0xe2a4b,0x22849,0x14f2b,0xe2a4a, +0x15279,0x22c6d,0x15277,0x22c6b,0x1527c,0x15278,0x1527d,0x1527b, +0x22c6c,0x1527a,0x15742,0x15741,0x2317c,0x1574a,0x23175,0x2317b, +0x15746,0x23174,0x2317a,0x23178,0x15745,0x15747,0x23177,0x15740, +0x23176,0x1574b,0x15748,0x1574c,0x15749,0x23173,0x23172,0x23179, +0x15743,0x1573f,0x15744,0x00000,0xe3337,0xe333b,0x00000,0x00000, +0x23835,0x2382e,0x00000,0x1613b,0x2382d,0xe3829,0x15c54,0x15c5b, +0x15c58,0x15c5e,0x15c5d,0x15c59,0xe3826,0x23827,0x2382a,0xe3827, +0x23829,0x15c55,0x2382b,0x23834,0x15c56,0x23828,0x23831,0x23832, +0x15c57,0x2382f,0x15c5c,0x15c52,0x15c5a,0x2382c,0x15c51,0x23830, +0xe382e,0xe3824,0x23833,0x00000,0xe382b,0xe3e34,0x23f21,0x23e76, +0x16138,0x23e7d,0x23e7a,0x23e72,0x23e7b,0x1613a,0x23e73,0xe3e29, +0x23e6f,0xe3e26,0xe3e2e,0x16573,0x23e78,0xe3e2f,0x16137,0x23e7e, +0xe3e28,0x1613e,0x16140,0x23e71,0xe3e2c,0x00000,0x1613f,0x23e74, +0x16139,0x23e7c,0x23e75,0x23e79,0xe3e2a,0x23e77,0x1613c,0x23e70, +0x16141,0x15c53,0x1613d,0x16142,0xe3e24,0xe3e35,0xe3e33,0x00000, +0xe4367,0x1656f,0x24624,0x24626,0x24628,0x2462c,0xe3e2b,0x24622, +0x2457e,0x16571,0x00000,0x24627,0x2462b,0x24623,0x2457d,0xe4366, +0x2457c,0xe4369,0xe4360,0xe4362,0x24629,0x24621,0x24625,0x16572, +0xe435e,0x16570,0x2462d,0x1656e,0x2462a,0xe4364,0x24c79,0xe4368, +0xe436a,0xe4363,0x00000,0x00000,0x16a37,0x24c71,0x16e43,0x24c7b, +0x16a3a,0x24d21,0x16a40,0x24c6c,0xe4874,0x00000,0x24c7c,0x24c69, +0xe486d,0x24c7e,0x24c6d,0xe486e,0x16a47,0x16a44,0x24c7d,0x24c77, +0x16a36,0x16a3e,0x16a3d,0xe4870,0x16a3c,0x16a42,0xe4869,0x24c6a, +0x16a43,0x24c78,0x16a3f,0x16a35,0x24c7a,0x16a38,0x16a39,0x16a41, +0x24c6f,0x24c6e,0x24c6b,0x00000,0x24c73,0x24c70,0x24c74,0x16a46, +0xe4868,0x24d22,0x16a3b,0x24c75,0x24c76,0xe4871,0x24c72,0xe4873, +0xe6629,0xe486b,0x16a45,0xe662b,0x00000,0x00000,0xe4e22,0x2526f, +0x16e3b,0x16e44,0x16e40,0x2526c,0xe4d7c,0x16e3d,0x16e41,0x25278, +0x16e37,0x25270,0xe4d78,0x16e3f,0xe4e24,0xe4e2f,0x25273,0x2526e, +0x16e3e,0x16e42,0x2526d,0xe4e2e,0x16e3c,0xe4d77,0x25277,0x16e39, +0x25276,0x25275,0x16e45,0x2503b,0x16e38,0xe4e2b,0x25274,0x2526b, +0xe4d75,0x16e46,0x25272,0x16e3a,0xe4e28,0xe4e29,0xe4e25,0xe4e2c, +0xe4e27,0xe4d7e,0xe4d7d,0x25271,0x00000,0x00000,0x00000,0xe662a, +0x1716a,0x1716f,0x17168,0x25944,0x2593b,0x25947,0x2593f,0x25945, +0x17170,0x17169,0x25938,0x2593e,0x25948,0x25941,0x25946,0x2593a, +0x00000,0xe523b,0x25942,0x1716b,0x25940,0x1716e,0x1716d,0x2593c, +0x2593d,0x25939,0x25943,0x1716c,0x2594a,0x25949,0xe5240,0xe523f, +0x00000,0x25e47,0x25e43,0x17469,0xe5579,0x25e3d,0x17463,0x17473, +0x25e49,0x1746b,0x17467,0x25e40,0x1746e,0x17471,0x25e4b,0x17466, +0x25e42,0x1746f,0x25e4d,0x25e4a,0x25e3e,0x1746a,0x17464,0x17472, +0x25e45,0x1746d,0x25e3f,0x17468,0x25e4c,0x1746c,0x17465,0x25e46, +0x17470,0x25e44,0x00000,0x00000,0x25e48,0xe557a,0x00000,0xe5859, +0x2625a,0x26260,0x17725,0x26263,0x1767e,0x17721,0x2625b,0x26262, +0x2625d,0x17726,0x17723,0xe585b,0x26259,0xe5858,0x17722,0x2625f, +0x26261,0x17724,0x2625e,0x2625c,0xe662c,0x00000,0xe585a,0x00000, +0x26642,0x17862,0x17863,0x1785f,0xe5a72,0x17860,0xe5a74,0x2663e, +0x2663c,0xe5a75,0x26640,0x17864,0x26641,0x2663a,0x26639,0x2663d, +0x2663b,0x17861,0x2663f,0x26959,0x17a2b,0x17a2a,0x2695a,0xe5c6c, +0x2695c,0x2695b,0x17a2c,0x00000,0xe5e53,0xe5e50,0x26b79,0x26b76, +0x26b77,0xe5e51,0x26b75,0x26b78,0x17a7d,0x26b7a,0xe5e52,0x17a7c, +0x00000,0x26d6f,0xe5f5a,0x17c41,0x17c43,0x26f3d,0x17c42,0x27047, +0x2712f,0x27131,0x2712e,0x27130,0x17d39,0x00000,0xe6235,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +/* 0x7f00 */ +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x1484f,0x00000, +0x1527e,0x23052,0x1574d,0xe3831,0x00000,0x15c5f,0x23f22,0x23f23, +0xe662d,0xe4877,0x00000,0x2594b,0x17474,0x25e4e,0xe557d,0xe585c, +0x17727,0x00000,0x26644,0x26643,0x17a2d,0x26b7b,0xe5f5b,0x26d70, +0x17c64,0x22269,0x00000,0x00000,0x14f2c,0x14b38,0x00000,0x00000, +0x22c6e,0xe2a4e,0x00000,0x23224,0x2317d,0x23223,0x23221,0x1574e, +0x23222,0x2317e,0xe333c,0x23836,0x00000,0x23f24,0x23f25,0x24630, +0x24631,0x16575,0x16576,0x2462f,0x24632,0x2462e,0x16574,0xe4878, +0x16a48,0xe4879,0x16577,0x24d23,0x00000,0x16e47,0x25279,0x16e48, +0xe4e30,0x17171,0x2594e,0x2594c,0x2594d,0x25e51,0x25e50,0x25e4f, +0x00000,0x00000,0x00000,0x26645,0xe6422,0x17865,0x26646,0x26d71, +0x17c65,0x27048,0x14850,0x14f2e,0x14f2d,0x22c70,0x15321,0xe2e5d, +0x00000,0x22c6f,0x23226,0xe333d,0x1574f,0x23837,0x23225,0xe333f, +0x00000,0xe333e,0x15c61,0x2383a,0x23838,0x23839,0x15c60,0x00000, +0x23f27,0x23f28,0x23f26,0xe436e,0x1657a,0x24634,0x24633,0x24635, +0x16579,0x16578,0x00000,0x00000,0x2527a,0x2527c,0xe4e31,0x16e49, +0x2527b,0x2594f,0x17172,0x26265,0xe585d,0x26264,0x17866,0x26647, +0x17868,0x17867,0x2695d,0x26b7c,0x17a7e,0x14851,0x22c71,0x15322, +0x23229,0x15751,0x23228,0x23227,0xe3342,0x15750,0xe3343,0x23840, +0x00000,0x23842,0x2383b,0x2383c,0x15c62,0x2383d,0x15c63,0x23841, +0x2383e,0x2383f,0x15c64,0xe3e37,0x16144,0x16145,0xe3e38,0x23f29, +0x00000,0x00000,0x00000,0x24636,0x24637,0xe4372,0x24d27,0x16a4b, +0x16a49,0x16a4a,0x24d24,0x24d25,0x00000,0x24d26,0x25323,0xe4e32, +0x25324,0x16e4a,0x25321,0x2527e,0x25322,0x2527d,0x17175,0x25950, +0x17173,0x17174,0x25e53,0x17475,0x25e52,0x26134,0xe557e,0x26266, +0x26267,0x17728,0xe5861,0x17729,0x17476,0x26648,0x26649,0x2695e, +0x17a2e,0x14852,0xe667b,0x14853,0x15753,0x14f2f,0x15752,0x22c72, +0xe3836,0x00000,0xe3344,0x16146,0x14854,0x15324,0x22c73,0x22c74, +0x15323,0x15325,0x14855,0x00000,0x22c75,0x15755,0x2322a,0x15757, +0x15754,0x15756,0xe3837,0x23845,0x15c65,0xe3839,0x23844,0x23843, +0x00000,0x24638,0x00000,0xe4922,0x24d28,0x00000,0x16e4b,0x00000, +0x17176,0x25952,0x25951,0xe5621,0x25e54,0x00000,0xe5862,0xe5c6f, +0x26b7d,0x00000,0x00000,0x14856,0x22473,0x2284a,0x15326,0x22c76, +0x00000,0x2322c,0x00000,0xe3349,0xe3348,0x15758,0x2322b,0x15759, +0xe3347,0xe662f,0x00000,0x23847,0xe383d,0xe383c,0x15c67,0x23846, +0x23848,0xe383b,0x15c66,0x00000,0x00000,0x00000,0xe3e3c,0x23f2b, +0x23f2c,0x23f2a,0x16147,0xe6729,0x00000,0x00000,0x1657b,0xe4373, +0x1657c,0xe6356,0x16a4d,0xe4923,0x24d2a,0x24d29,0x16a4c,0xe4926, +0xe3e3b,0xe4925,0x00000,0xe6630,0x25325,0xe4e34,0xe4e36,0x25326, +0xe4e37,0x00000,0xe4e35,0xe4e38,0x25953,0x00000,0xe5243,0x1747a, +0x17479,0x17477,0x17478,0x1747b,0xe5622,0x26268,0x1772b,0x1772a, +0x2664a,0x2695f,0xe5c70,0xe5c71,0xe5c72,0x17b6f,0x17b6e,0x14857, +0x00000,0x00000,0x22f7d,0x00000,0x1657e,0x16148,0x1657d,0x16a4e, +0x00000,0x14858,0x22168,0x14859,0x1485a,0xe2435,0xe2436,0x2284b, +0x22476,0xe2724,0x22477,0x14b3a,0xe2726,0x22474,0x14b39,0xe2725, +0x14b3c,0x22475,0x14b3e,0x14b3d,0x22478,0x14b3b,0x00000,0xe2723, +0x00000,0x14f34,0x14f32,0x2284d,0xe2a56,0x14f31,0xe2a5b,0xe2a58, +0xe2a4f,0x14f36,0x14f38,0x14f35,0xe2a59,0x22850,0x2284c,0x14f39, +0xe2a52,0x14f33,0x14b3f,0xe2a54,0x14f37,0x2284f,0xe2a57,0x00000, +0x2284e,0x00000,0x14f30,0xe6631,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x22c7c,0x1532a,0x1532b,0x22c7e,0xe2e66,0x22c78, +0x22c7b,0x22d26,0x22d24,0xe2e60,0x1532c,0x22d2a,0x1532f,0x22d27, +0x22c7d,0x22c7a,0xe2e61,0xe2e5e,0x23f2e,0x22d25,0x15327,0x22d28, +0x22c77,0x22d22,0x15329,0x1532e,0x22d23,0x15332,0x15330,0xe2e65, +0x22c79,0x1532d,0xe2e64,0x22d21,0x15331,0x15328,0x22d29,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x1575e,0xe334c,0x15767, +0x1575c,0x1575a,0x2322e,0x15762,0x1575f,0x23230,0xe334a,0xe3352, +0x15761,0x2322f,0x2322d,0x23232,0x15766,0x15764,0x23f2d,0xe334b, +0x23233,0x23231,0x1575b,0xe334e,0xe334d,0x1575d,0x15760,0xe334f, +0x15763,0xe2e63,0x15765,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0xe3e44,0x23852,0x15c69,0xe3849, +0x23849,0x2384b,0xe3847,0x2384c,0x00000,0x23854,0x23850,0x2384e, +0x00000,0x23851,0x23855,0x15c6a,0x15c6e,0x2384a,0x00000,0x23853, +0xe632e,0x15c6c,0xe3841,0x15c6b,0x2384f,0x2384d,0xe3842,0x15c68, +0x15c6d,0xe3845,0x00000,0x00000,0xe3848,0x00000,0x00000,0x00000, +0x00000,0x1614e,0x23f36,0xe3e3e,0x00000,0x23f34,0x16150,0x00000, +0xe3e43,0xe3e45,0xe3e41,0x23f2f,0x24646,0xe3e3d,0x1614f,0x23f33, +0xe3e40,0xe3e42,0x23f30,0x1614b,0x16151,0x23f35,0x1614d,0x23f32, +0x16a4f,0x1614c,0x23f31,0x16152,0x1614a,0x16149,0x00000,0x00000, +0x00000,0x00000,0x00000,0x2463e,0x2463c,0xe437b,0x24642,0xe437e, +0x2463a,0x24647,0x2463f,0xe4375,0x24639,0x16624,0x1662a,0x24644, +0x00000,0x2463d,0xe4376,0x16627,0xe4377,0xe4423,0x16625,0x24645, +0x16622,0x16621,0x24640,0x16626,0x16153,0xe437c,0x24643,0x2463b, +0x16623,0x16628,0x16629,0x00000,0x00000,0xe4422,0x00000,0x16a54, +0x16a50,0xe4927,0x16a55,0x24d2d,0xe492a,0x00000,0x24d2c,0x24d2e, +0x16a52,0x24d2b,0x16a53,0x24d31,0x24d30,0x24d2f,0x00000,0x16a51, +0x00000,0x00000,0xe4e3b,0xe4e3d,0xe4e39,0x2532a,0xe4e3c,0x2532d, +0x16e51,0x2532c,0x16e50,0x16e4c,0x16e4d,0x16e4e,0x25329,0x25328, +0x16e4f,0xe4e3a,0x2532b,0x25327,0x00000,0x00000,0x25955,0x2595f, +0x17179,0x17178,0xe5249,0x25959,0x2595b,0xe5247,0x25956,0xe5244, +0x2595a,0x25954,0x2595d,0x17177,0x2595c,0x25958,0x00000,0x2595e, +0xe5623,0x25957,0x1747e,0x25e55,0x25e5b,0x17524,0x17526,0x17523, +0x17522,0x00000,0x17521,0x1747d,0x25e56,0x25e59,0x1747c,0x25e5a, +0xe5624,0x17525,0x25e58,0x00000,0x25e57,0x1772c,0xe5865,0x1772d, +0x2626b,0x26269,0x2626a,0x00000,0xe5a77,0x2664c,0xe5a78,0x2664b, +0x17869,0x26961,0x17a2f,0x26960,0x00000,0x26b7e,0x26d72,0x17b70, +0x27132,0x27133,0x17c44,0x1485b,0x00000,0x14f3a,0x23f37,0x16a56, +0x17527,0x25e5c,0x1485c,0x00000,0x15769,0x15768,0x23f38,0xe3e47, +0x00000,0x00000,0x25960,0x1485d,0x15333,0x00000,0xe3e48,0x23f39, +0x23f3a,0x23f3b,0x16a57,0x1717a,0x1485e,0x00000,0x14f3b,0x22d2b, +0x1576a,0x23234,0x15c6f,0xe3e49,0x23f3c,0x1662b,0x00000,0x16a58, +0x1717b,0x17528,0x1772e,0x2664d,0x1485f,0x14f3c,0xe2a5d,0x00000, +0x1576b,0x23856,0x16154,0xe492b,0x16a59,0x24d32,0x2532e,0x00000, +0xe524a,0xe5868,0xe5a79,0x14860,0x16155,0x24648,0x16a5a,0x14861, +0x22851,0x22d2c,0x15334,0x00000,0xe2e68,0x23236,0x00000,0xe3357, +0x1576e,0xe3358,0x1576c,0x1576d,0x1576f,0xe3355,0x00000,0x23235, +0x00000,0x00000,0x2385b,0x23858,0x2385a,0x15c70,0x15c72,0x15c71, +0x23857,0x15c73,0x23859,0x00000,0x23f3d,0x23f3e,0x00000,0x23f3f, +0x2464b,0xe4426,0x2464c,0x00000,0x2464a,0x2464d,0x00000,0x1662c, +0xe6634,0x24649,0xe492d,0x16a5b,0xe492e,0x00000,0x25333,0x2532f, +0x25332,0x25334,0x25331,0x25330,0x00000,0x25961,0x25962,0x25963, +0x1717c,0x1717d,0x25e5e,0x25e5d,0x25e5f,0x00000,0x2626d,0x2626c, +0x00000,0x2664f,0xe5a7a,0x26650,0x2664e,0xe5a7b,0x17a30,0x00000, +0x26962,0x26963,0xe5e55,0x26d73,0x26f3e,0x27049,0x14862,0x14b40, +0x00000,0x17529,0x14863,0x00000,0x2385c,0x23f40,0xe5a7c,0x17c6c, +0x2226a,0x00000,0x00000,0xe2438,0x2226b,0x2226d,0x14864,0x2226e, +0x2226c,0x00000,0x00000,0x22522,0x22523,0x2247b,0xe2728,0x00000, +0x00000,0x00000,0x22521,0x14b42,0xe2729,0x14b43,0x2247c,0x2247a, +0x22479,0x2247d,0x14b41,0x2247e,0x22d2d,0xe272b,0x00000,0x00000, +0x22856,0x14f3f,0x22855,0x22857,0xe2a60,0x14f3e,0x2285c,0x14f42, +0x22852,0x22860,0x22866,0x14f49,0x22863,0x14f46,0xe2a6b,0x22859, +0x2285f,0x22861,0xe2a66,0x22854,0x14f45,0x14f40,0x2285a,0x14f47, +0x14f4a,0x14f44,0xe2a6c,0x14f3d,0x2285e,0x22858,0x22865,0x14f4c, +0x14f48,0x14f43,0x2285d,0x15770,0x2285b,0x14f41,0x14f4b,0x00000, +0x22853,0x00000,0x22862,0x22864,0xe2a5e,0x00000,0x00000,0x00000, +0x00000,0xe2a68,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0xe2e76,0x15345,0x1533f,0x15347,0x15344,0x22d34,0x22d37,0x15340, +0xe2e6a,0x22d2e,0x00000,0x15339,0x15343,0xe2e6b,0x15346,0x15348, +0x22d43,0x22d3a,0xe2e78,0x15338,0x22d42,0x1533c,0x1533a,0x15335, +0x22d32,0xe2e72,0x22d41,0x22d36,0x22d39,0x22d46,0xe2e74,0x15349, +0x22d40,0x15341,0x22d3b,0x22d45,0x22d38,0x22d3c,0x22d3f,0xe2e69, +0xe2e6e,0x22d30,0x22d44,0x22d3e,0xe2e6f,0xe2e7a,0x22d2f,0x00000, +0x22d33,0x15342,0x1533d,0x15336,0x1533b,0x15337,0x1534a,0x22d31, +0x23247,0x1533e,0x00000,0xe2e79,0x22d3d,0x22942,0xe2e77,0x00000, +0xe6635,0x00000,0xe6637,0x00000,0x00000,0x00000,0x2324a,0x1577e, +0xe3362,0x2323a,0x00000,0x23245,0x23241,0xe384d,0x23254,0xe3359, +0x2324c,0xe335f,0x23242,0xe385b,0x2324b,0x2323c,0x23240,0x23257, +0x15823,0x2324f,0x23246,0x15771,0x23255,0x23238,0x00000,0x2324e, +0x00000,0x15822,0x1577b,0x23237,0x15779,0x15778,0x1577d,0x2324d, +0x15775,0x1577c,0x22d35,0x23f41,0x23248,0x00000,0xe2a5f,0x2323e, +0x15821,0x2323f,0x23243,0x15824,0x23239,0x23251,0xe3e57,0x23250, +0x23258,0x15777,0x15774,0x23256,0x23252,0x23249,0x23244,0x1577a, +0x15776,0x2323b,0x15772,0x23253,0x15773,0x00000,0x2323d,0xe335a, +0xe3363,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0xe6636,0xe2d33,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0xe384e,0xe3851,0x23862,0x23864,0x23869,0x2387d,0x15d23, +0x15c77,0xe3854,0x23861,0x15d24,0x15d25,0x2386c,0x23873,0x23879, +0xe3850,0x23866,0x00000,0x2386d,0xe384f,0xe385d,0x15d26,0x2387b, +0x23876,0x15d21,0x15c7d,0x23872,0x2386e,0x23860,0x15c74,0x23865, +0x2385d,0xe3855,0x15c7c,0x15c7e,0x2386a,0x23867,0x15c79,0x23877, +0x15c76,0x23868,0x23f6a,0x23870,0xe385e,0x2386f,0x15c75,0xe3857, +0x15d22,0xe3852,0x15c78,0x2385e,0x23863,0x23874,0x2387a,0x15d27, +0x2385f,0x2386b,0x23871,0x15c7b,0x00000,0xe3858,0x2387c,0x23875, +0x23878,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0xe385f, +0x00000,0x00000,0x00000,0x00000,0x00000,0x15c7a,0x00000,0x23f51, +0x23f45,0x1615d,0x23f62,0x23f6b,0x23f6e,0x1615b,0x23f4d,0x23f66, +0x23f4e,0x23f5c,0x16168,0x23f58,0x16165,0xe3e5e,0x23f59,0x23f42, +0x00000,0x23f67,0xe3e4f,0xe3e59,0x1616e,0x23f64,0x23f5a,0x23f70, +0x23f55,0x2466d,0xe3e4d,0x23f73,0x1616c,0x23f53,0x23f5f,0x1616f, +0x1615a,0x23f57,0x23f71,0x23f50,0x23f49,0x23f54,0xe3e5f,0x23f48, +0x23f46,0x16156,0x23f68,0x23f4f,0x23f6c,0xe3e4b,0x23f6d,0x1615e, +0x16163,0x1615f,0x16167,0x23f63,0x16160,0x23f5b,0x23f4b,0x00000, +0x16158,0x23f43,0x23f65,0x23f6f,0x23f4a,0x16166,0x23f74,0x23f56, +0xe3e52,0x23f52,0xe3e5c,0x16157,0x1616b,0xe3e5a,0x23f61,0x1616d, +0xe3e50,0x23f5d,0x16162,0x1615c,0x16164,0x16159,0x1616a,0x23f5e, +0x23f4c,0x23f60,0x23f47,0x23f69,0xe3e58,0x00000,0xe3e5d,0xe3e56, +0xe3e4e,0x00000,0x00000,0x23f72,0x00000,0x00000,0xe6639,0xe3e5b, +0x00000,0xe6638,0x00000,0x23f44,0x00000,0x00000,0x00000,0x00000, +0x00000,0x2466c,0xe442d,0x24724,0x1655c,0x24671,0xe4431,0x2466f, +0x2465a,0x16630,0x2466a,0x2467e,0x24666,0x16638,0x2467d,0x24664, +0x16169,0x24674,0x24665,0x2467b,0x16637,0x1662f,0xe443a,0x2464f, +0x24657,0xe4435,0x24670,0x24668,0x24723,0x2466b,0x1663d,0x2467c, +0xe442c,0x16634,0xe443e,0x2466e,0x24676,0x2465b,0x24675,0xe4427, +0x24728,0x24656,0x24677,0xe4433,0x24726,0xe443f,0x24650,0x16161, +0xe4440,0x2465e,0x2465d,0x16636,0xe4432,0x24661,0x24663,0x24672, +0x24725,0x16639,0xe4438,0x1663a,0xe4430,0x24655,0x16632,0x24659, +0x24721,0x1663b,0x00000,0x16633,0x16635,0x1663c,0x24727,0x24678, +0x24673,0xe443c,0xe442f,0x24660,0x2465f,0x16631,0x24651,0x1662e, +0x24669,0x24652,0x24667,0xe442e,0x00000,0x2465c,0x24722,0xe442a, +0xe4439,0x00000,0x1662d,0xe443b,0xe4428,0x00000,0x24658,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x24654,0x2467a,0x24653, +0x16a68,0x24d5a,0xe4935,0xe4944,0x24d49,0xe4933,0xe4938,0x24d33, +0x24d51,0x16a60,0x24d42,0x24d4c,0x16a63,0x24d45,0x16a61,0x24d36, +0x24d54,0x24d35,0x24d48,0xe493c,0x24d34,0xe4939,0x00000,0x24d46, +0x24d4f,0x24d4d,0x24d41,0x24d3c,0x24d3a,0xe4942,0x24d3b,0x24d4e, +0x24d59,0x24d43,0x16a62,0xe493b,0x24d3e,0xe493a,0x24d52,0xe4941, +0x16a65,0x24d3d,0x24d37,0x24d47,0x16a69,0xe4932,0x00000,0x16a5d, +0x16a66,0x24d3f,0x24d39,0xe4936,0x16a5f,0x24679,0x16a5e,0x24d4a, +0xe4436,0x16a5c,0x16a6b,0x16a64,0x24d4b,0x24d40,0x24d38,0x24d53, +0x24d44,0x16a6a,0x24d57,0x16a67,0x24d56,0xe493f,0x24d50,0x24d55, +0xe493e,0x00000,0xe4943,0x24d58,0x00000,0x00000,0xe663b,0x00000, +0x00000,0xe663c,0xe663a,0x00000,0xe493d,0x00000,0x00000,0x2535c, +0x2535d,0x25350,0x2534f,0x2534b,0x16e5d,0xe4e4f,0x16e55,0x2535f, +0x2535e,0x2464e,0x25348,0x2534c,0x25346,0xe4e44,0x25359,0x2534a, +0xe4e42,0x25360,0x25343,0x25341,0x2534d,0x25357,0x25352,0x16e5f, +0x25338,0xe4e40,0x25356,0xe4e4c,0xe4e46,0xe4e54,0x16e60,0x24662, +0x25344,0x2533b,0x2533e,0x25364,0x25345,0x2533c,0x2533a,0x25337, +0x00000,0x16e59,0x2534e,0x16e58,0x16e5c,0x25349,0x25351,0x16e52, +0x25361,0x25365,0x16e54,0xe4e4b,0x25340,0x25354,0x25358,0x2533d, +0x25362,0x16e5b,0x00000,0x16e5a,0x25335,0x16e5e,0x2535b,0x2533f, +0x25353,0x25339,0x25347,0x25342,0x16e56,0x16e57,0x25355,0x25366, +0x25363,0x2535a,0x00000,0xe4e4d,0xe4e4e,0xe4e52,0x00000,0x00000, +0x00000,0x00000,0x00000,0x25336,0x00000,0x16e53,0x25974,0xe525a, +0x2596b,0x2596e,0xe5252,0x17225,0x25970,0x25965,0x2596c,0x25972, +0x17222,0x17226,0x1717e,0xe5259,0xe5250,0x25967,0x25977,0x00000, +0x00000,0x25971,0x00000,0x25968,0x25a22,0x2597a,0x25964,0x25e72, +0x2596a,0x17221,0xe5258,0x25975,0xe5254,0x25a21,0x17229,0xe5256, +0x2597c,0x25969,0x2596f,0x25973,0x2596d,0x25a23,0x2597e,0x2597b, +0x17223,0x17224,0x17228,0x25966,0x25a24,0x17227,0x25978,0xe524f, +0xe5255,0x25976,0x00000,0xe663d,0x00000,0x25979,0x25f21,0x25e6c, +0x25e71,0x25e7e,0x25e70,0x25e68,0x25e6d,0x00000,0x1752c,0xe562b, +0x25e61,0x25e79,0x25e7b,0x25e60,0x1752b,0x25e7d,0x25e75,0x17532, +0x25e7c,0x25e6e,0x17534,0x25e66,0x2597d,0x25e76,0x25e73,0x25e62, +0x25f23,0x1752e,0xe5628,0xe5629,0x1752f,0x25e64,0x25e74,0xe562d, +0x25f22,0x25e77,0x25e6a,0x17531,0x1752d,0x25e78,0x25e6b,0x25f24, +0x25e65,0x25e6f,0x25e7a,0x25e67,0x25e69,0x00000,0x17535,0x25e63, +0x17533,0x17730,0x1752a,0xe562c,0xe5630,0x00000,0x00000,0x17530, +0x17734,0x2627d,0xe586c,0x26273,0x2626e,0x26274,0x2627e,0x26324, +0x26323,0x17736,0x17735,0xe586e,0x00000,0x26275,0x26325,0x26278, +0x26270,0xe586f,0x26272,0x26271,0x26277,0x2627c,0x2626f,0x26276, +0x2627b,0x17733,0x00000,0x26279,0xe586b,0x17731,0x2627a,0x1772f, +0x17732,0x26660,0x26321,0x00000,0xe663e,0x1786d,0xe5a7e,0x26658, +0x2665c,0x26654,0x26657,0xe5a7d,0x2665f,0x1786b,0x26664,0x2665d, +0x00000,0x26655,0x26665,0x2665e,0x1786e,0x1786f,0x26662,0xe5b22, +0x26656,0x1786a,0x1786c,0x26651,0x26659,0x26653,0xe5c7b,0x26663, +0x26661,0x26652,0x2665a,0x00000,0xe5b25,0xe663f,0x2696a,0x17870, +0x2665b,0x17a32,0x17a34,0x17a31,0xe5c76,0x2696f,0x26967,0x26965, +0x26969,0x26966,0xe5c78,0xe5c7c,0x2696b,0x2696d,0x17a35,0x17a37, +0xe5d22,0x2696c,0x17a38,0x17a36,0x2696e,0xe5c7e,0x00000,0xe5d23, +0xe5c77,0x17a33,0x00000,0xe5d21,0x00000,0xe5e5b,0xe5e5a,0x17b21, +0x26c21,0x26c27,0x17b23,0x26968,0x26c26,0xe5e5c,0x26c2d,0x26c24, +0x26c2b,0x26c2a,0x26964,0x26c25,0x26322,0x26c2e,0x26c23,0x26c28, +0xe5e58,0x26c2c,0x26c22,0xe5e56,0x26d77,0x17b22,0x26c29,0xe5e57, +0x00000,0x26f43,0x26d78,0x26d76,0x26d74,0x26d75,0x26d79,0xe6640, +0x17c45,0x26f41,0x26f3f,0x26f44,0x26f42,0xe6043,0x26f45,0x17c46, +0x26f40,0xe602f,0xe6146,0x2704a,0x00000,0xe6641,0x27134,0x27135, +0x27136,0xe6147,0xe617c,0x27235,0x2722d,0x2226f,0x14f4d,0x00000, +0x1534b,0x00000,0x2325a,0x23259,0x15825,0x15d28,0x23921,0xe3863, +0xe3860,0x2387e,0xe3861,0x16170,0x1663f,0xe3e61,0x1663e,0x16640, +0x00000,0x24d5b,0x25367,0x25a25,0x25a27,0x25a26,0x00000,0x17536, +0x25f25,0x26326,0x27173,0x14865,0xe272d,0x22869,0x2286a,0x22868, +0x22867,0x14f4e,0xe6642,0x22d4a,0x22d48,0xe2f23,0xe2e7c,0x22d47, +0xe2e7e,0x1534c,0x1534e,0x1534d,0x22d49,0xe2f24,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0xe3369,0x23266,0x23263,0x23261, +0x00000,0xe336c,0x15826,0x23264,0x1582b,0x2325e,0x2326d,0xe336f, +0x2326f,0x2325f,0xe336e,0x15828,0x23270,0x2326b,0x2325d,0x23262, +0x2326c,0x23268,0x23265,0xe336b,0x1582d,0x2326e,0x23260,0xe336a, +0xe3370,0x23269,0x2325b,0x1582c,0x15829,0x23267,0xe336d,0x2326a, +0x2325c,0x1582a,0x15827,0x00000,0x00000,0x00000,0xe3866,0x15d32, +0x23928,0x15d31,0xe3864,0x2392b,0x2392e,0x15d2e,0x15d2c,0x23923, +0x2392c,0x2392a,0x23927,0x2392f,0x23930,0x23932,0x23933,0x23922, +0x15d2b,0x23925,0x23924,0x23931,0x15d2d,0x23926,0x15d2f,0x15d2a, +0x23929,0x15d33,0x00000,0x15d30,0x2392d,0x00000,0x00000,0x00000, +0x16177,0x24025,0x00000,0x23f78,0x16174,0xe3e62,0x2472e,0x24023, +0x23f75,0x16172,0x23f7a,0x16175,0x23f7e,0x23f7c,0x16178,0x16171, +0x00000,0xe3e63,0x23f76,0x23f79,0x16176,0x00000,0x23f77,0x00000, +0x24024,0x24022,0x23f7b,0x23f7d,0x24021,0x16173,0xe3e68,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x2472f,0x24735,0x2472b, +0x24731,0x16641,0x2472d,0x16647,0xe4444,0xe4445,0x16646,0xe4449, +0x16645,0x24734,0x16648,0x16649,0x2472a,0x24737,0x1664a,0x16644, +0x16643,0x24733,0x1664b,0x24729,0x2472c,0x24736,0x24732,0x00000, +0x00000,0x24d7b,0x24d70,0x16642,0x00000,0xe4446,0xe4448,0x00000, +0x16a72,0x24d64,0x24d79,0x24d65,0x16a6d,0xe494f,0x24d62,0x00000, +0x24d6b,0x24d63,0x16a6f,0x24d5d,0x24d78,0x16a70,0x24d75,0x24d76, +0x24d5e,0x16a75,0x24d6d,0xe494a,0x24d67,0x24d6e,0x24d61,0x00000, +0x24d7a,0x24d72,0x24d6c,0x24d5c,0x16a71,0x24d73,0xe4945,0x16a74, +0x24d77,0xe494c,0x24d71,0x16a6e,0x24d6f,0xe4949,0x24d69,0x16a6c, +0x24d60,0x24d68,0x24d74,0x24d66,0x00000,0xe494e,0x24d6a,0xe494b, +0x00000,0x00000,0xe6643,0x00000,0x16e6a,0x24730,0x25379,0x25424, +0x25378,0x25374,0x25371,0x16e6b,0x2536f,0x16a73,0x25368,0x16e69, +0x2536e,0x16e68,0x25373,0x25370,0x25422,0x2537b,0x25375,0x2537a, +0x16e64,0x25372,0x25427,0x25369,0x2536a,0x25423,0x16e65,0x25428, +0x16e67,0x25429,0x25377,0x24d5f,0x2537d,0x25376,0x25421,0x2537c, +0x00000,0xe4e5d,0x00000,0x2536d,0x16e62,0x25426,0x16e63,0x2536b, +0x16e66,0x25a32,0x2537e,0x25425,0x00000,0xe4e59,0x00000,0x00000, +0x00000,0x25a2f,0x16e61,0x1722a,0x25a39,0x25a35,0x00000,0x25a33, +0x25a2e,0x25a3d,0xe525b,0xe525d,0x00000,0x1722e,0xe525f,0x25a2a, +0x25a36,0x25a37,0x25a2d,0x25a2c,0x25a3a,0x00000,0x25a30,0x25a2b, +0x25a31,0xe5262,0x25a3c,0x25a29,0x25a3b,0x25a38,0x1722c,0x1722b, +0x00000,0xe525e,0x1722d,0x25a34,0x25a28,0xe6645,0x00000,0x00000, +0x00000,0xe6644,0x25f27,0x1753c,0x25f2b,0x25f28,0x25f2f,0x25f35, +0x25f2a,0xe563a,0x25f3e,0x17539,0x25f38,0x25f2d,0x25f39,0x25f34, +0x25f3b,0x25f2c,0x1753e,0x1753d,0x25f2e,0x25f3c,0x25f26,0x25f3a, +0x17537,0xe5639,0x25f32,0x25f31,0x25f36,0x25f29,0x1753b,0xe563b, +0x1753f,0x25f30,0x25f37,0x17540,0x25f33,0xe5636,0xe5634,0x00000, +0x00000,0x17538,0x1753a,0x26333,0x26331,0xe5b28,0xe5876,0x26337, +0x26335,0x26338,0xe5878,0x2632a,0x26332,0x2633c,0x25f3d,0x2632e, +0x1773a,0x2536c,0x26329,0x26336,0x26330,0x2632d,0x26328,0x26327, +0x2633b,0xe5873,0x2632c,0x2632b,0x17738,0x26334,0xe5874,0x17737, +0xe5875,0x00000,0x17739,0x2632f,0x2633a,0xe6646,0x26669,0x2666a, +0xe5b2c,0x17874,0x26667,0x17871,0x2666f,0xe5b27,0x17875,0x26671, +0x26666,0x26339,0x26673,0x26668,0x00000,0x17872,0x2666e,0xe5b29, +0x26670,0x2666b,0x26672,0x2666d,0x2666c,0x17873,0xe5877,0xe5b2b, +0x26971,0x26972,0xe5d25,0x26974,0x17a39,0x17a3a,0x26975,0x26973, +0xe5d24,0x26970,0xe5e5d,0x26c31,0x26c34,0x26c30,0x00000,0x17b27, +0x26c32,0x17b26,0x17b25,0x17b24,0x26c33,0x26d7e,0x26d7c,0xe5f5f, +0x26d7b,0x26c2f,0x26d7d,0x26c35,0x26d7a,0xe6045,0x26f48,0x26f26, +0x26f46,0x17c47,0x26f47,0x26f49,0xe6647,0x2704d,0x17c66,0x2704c, +0x2704b,0x17c67,0x00000,0x17d27,0x2715d,0x27175,0x27174,0x27176, +0x14866,0x22d4b,0xe2f26,0x23271,0x23272,0xe386a,0xe3e6a,0xe3e69, +0x24026,0x00000,0x26c36,0x2704e,0x14867,0x1534f,0x22d4c,0xe3371, +0xe6648,0x00000,0x23934,0x15d34,0x00000,0x24028,0x24027,0x16179, +0xe444d,0x1664c,0x2542a,0x16e6c,0xe4e5f,0x16e6d,0xe5263,0xe5264, +0x00000,0x1722f,0x17c68,0x14868,0x00000,0x00000,0xe2f27,0x22d4d, +0x14f50,0x22d4f,0x22d4e,0x15350,0x00000,0x23273,0xe3374,0x2327a, +0x1582e,0x23278,0x23276,0xe3377,0x2327d,0x23274,0x23275,0x1582f, +0xe3372,0x15833,0xe3373,0xe3375,0x2327e,0x15832,0x2327c,0x23279, +0x23277,0x15830,0x15831,0x2327b,0xe3376,0x00000,0x00000,0xe6649, +0x15d36,0x23935,0xe3872,0x15d3b,0x23945,0x15d3a,0x23947,0xe386e, +0xe3874,0x2393b,0x15d38,0x23946,0xe386c,0x23936,0x15d39,0x23942, +0x2393e,0x23940,0x2393a,0x23941,0xe386b,0x00000,0x15d35,0x2393d, +0xe3873,0x2393c,0x23938,0xe386d,0x23943,0xe386f,0xe3871,0x2393f, +0x23937,0xe3870,0x23939,0x15d37,0x23944,0x00000,0x00000,0x00000, +0x00000,0x1617c,0x24033,0x00000,0xe3e70,0xe3e72,0x2402f,0x24031, +0x2402c,0x2402b,0x24029,0xe3e6d,0x24030,0x24032,0x2402e,0xe3e6f, +0x2402d,0x1617a,0x1617b,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x24035,0x16654,0x24739,0x2473f,0x2473a,0x2473b,0xe444e, +0x24740,0x00000,0x16656,0x00000,0x1664e,0x16655,0x24738,0x2402a, +0x16651,0x1664f,0x2473e,0x2473d,0x16650,0x16652,0x2473c,0x1664d, +0xe444f,0x16653,0x00000,0x00000,0x00000,0x00000,0xe4e60,0x24d7d, +0x16a7c,0xe4959,0xe4952,0x24e2a,0x24e29,0xe4957,0x24e24,0x16a7e, +0x24e28,0x24d7e,0x24e21,0x16a76,0x16a78,0xe4954,0x24e26,0x24d7c, +0x16a7a,0x16a79,0x24e22,0x24e27,0x24e25,0x16a7b,0x24e23,0xe4951, +0xe4956,0x24034,0x16a77,0xe4958,0x00000,0x2542b,0x25432,0x16e6f, +0x00000,0x25436,0x16e73,0x2542e,0x2542c,0x00000,0x25435,0xe4e61, +0x16e6e,0x25434,0x16e70,0x16e71,0x2542d,0x16e72,0x25433,0x2542f, +0x25430,0x25431,0x16a7d,0xe4e62,0x00000,0x00000,0x25a3e,0x25a4a, +0x00000,0x17234,0x25a45,0x25a47,0xe5265,0x17232,0x25a3f,0x25a43, +0x00000,0x25a46,0x17230,0x17233,0x25a49,0x25a41,0x25a42,0x25a48, +0x25a40,0x25a44,0x17231,0x25f40,0x00000,0x25f3f,0x17542,0x25f45, +0x17544,0xe5640,0x00000,0x17541,0x25f41,0x17545,0x25f42,0xe563f, +0xe563d,0x25f43,0x25f46,0xe5642,0x17543,0x00000,0x26341,0x00000, +0xe5879,0x26344,0xe587a,0x2633e,0x26340,0xe587c,0xe587b,0x2633f, +0x26342,0x26343,0x25f44,0x2633d,0xe664a,0x00000,0x17878,0x26677, +0x2667a,0x2667c,0x26675,0x26676,0x26679,0x2667b,0x17879,0x17877, +0x17876,0x26678,0x26674,0x26976,0x17a3b,0xe5d29,0x26977,0xe5d28, +0x00000,0x26c38,0x17b28,0x26c3a,0x17b29,0x26c37,0x26c39,0x17b72, +0x00000,0x26e21,0x17b71,0x26f4c,0x26f4b,0x00000,0x26f4a,0x00000, +0xe6149,0x27137,0x27138,0x2713a,0x27139,0xe617d,0x22270,0x14869, +0x00000,0x15351,0x23948,0x1617d,0xe664b,0x24741,0x1773b,0xe5b2f, +0x2667d,0xe6046,0xe614a,0x14b44,0xe2f29,0x00000,0x00000,0x15d3d, +0x00000,0xe3876,0xe3875,0x15d3c,0xe3877,0x24036,0x1617e,0x24038, +0x24037,0x00000,0xe3e74,0x24742,0x16657,0x24e2b,0x24e2e,0x24e2d, +0x00000,0x24e2c,0x25437,0x25439,0x25438,0xe4e65,0x17236,0xe5266, +0x00000,0xe4e64,0x17235,0xe5646,0x17546,0x25f47,0x25f49,0x25f48, +0xe587e,0xe587d,0x1773c,0xe5921,0x00000,0xe5b31,0x26721,0x2667e, +0x00000,0x26978,0x17a3c,0xe5d2a,0xe5e61,0x17b2a,0x26e23,0x26e22, +0x17d28,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x14b45,0x22d50,0x15352,0x2394b,0x23949,0x00000, +0x00000,0x2394a,0x2403a,0x2403b,0x24749,0x24039,0x00000,0x24743, +0x24747,0x24746,0x24748,0x16658,0x24745,0x24744,0x2474a,0xe4454, +0x24e31,0x24e2f,0xe495c,0x24e30,0x2543c,0x2543a,0xe4e66,0x00000, +0x2543b,0x25a4b,0x25f4a,0x25f4b,0x1773d,0xe5b32,0x26722,0x26979, +0x17a3d,0x00000,0x26c3b,0x26e24,0x17b73,0x00000,0x26f4d,0x2713b, +0x14b46,0x00000,0x15354,0x15355,0x22d51,0xe2f2a,0xe2f2c,0x22d52, +0x15353,0x00000,0x15839,0xe337b,0x15837,0xe337a,0x15836,0x1583d, +0x15835,0x1583e,0x23321,0x1583b,0x00000,0x15838,0x1583c,0x1583a, +0x15834,0xe337c,0x00000,0x15d45,0xe387e,0x15d3f,0x2394f,0x15d44, +0xe3923,0xe3929,0x15d46,0x15d40,0x00000,0x15d41,0xe3879,0x2394d, +0xe387b,0xe3925,0x15d3e,0xe3922,0x2394e,0x15d43,0xe6330,0x00000, +0x2394c,0x15d42,0xe387a,0x00000,0x1622b,0xe3e7c,0x1622d,0x00000, +0xe3e7d,0x2403e,0x1622c,0x16221,0x16225,0xe3f24,0x1666b,0x2474f, +0x24040,0x16226,0xe3e7e,0xe3e75,0x24043,0x24044,0x1622a,0x00000, +0x24046,0xe3f21,0x24048,0xe3f23,0x24049,0x2403d,0x2403c,0x2404a, +0x16229,0x24047,0x24045,0x00000,0x16227,0x16223,0x1622e,0x24041, +0x24042,0x2403f,0xe3e78,0x16228,0x00000,0xe3f22,0x16224,0x00000, +0x16222,0x2474e,0x16666,0x16661,0xe4460,0xe4459,0x1665c,0xe4463, +0x1666c,0x1665d,0xe4455,0x16659,0x16668,0x16665,0x16667,0xe4458, +0x1665e,0x16663,0x1665a,0x1665b,0x24756,0x24753,0x2474b,0x24750, +0xe445b,0x16669,0x24757,0x1666a,0x16660,0xe445c,0xe4461,0x2474d, +0xe4456,0x24755,0x24751,0x24754,0x24752,0x16664,0x2474c,0x1665f, +0xe445d,0x00000,0x00000,0x24e34,0x16b22,0x16b25,0xe495f,0x24e36, +0xe4964,0x16b2d,0x24e35,0x16b27,0xe4963,0x16e78,0x24e37,0x00000, +0x16b2c,0x24e33,0x16b2e,0xe495e,0xe4962,0xe496b,0x16b23,0xe4968, +0x16662,0x16b26,0xe4960,0x16b24,0x16b28,0x16b2a,0x16b21,0x16b2f, +0x16b2b,0xe4965,0x16b29,0x24e32,0xe4966,0x00000,0x00000,0xe4e74, +0x16f21,0xe4e67,0x16e7b,0xe4e72,0xe4e70,0xe4e6e,0x16f24,0xe4e6c, +0x2543f,0x16f25,0x2544b,0x25444,0x16e74,0x2544c,0x25446,0x16e7e, +0x25447,0xe4e73,0x16e7d,0x2544a,0x16e77,0x25448,0x2543e,0x16e76, +0x25a56,0x16e7c,0xe4e75,0x16e79,0xe4e69,0x16f23,0xe4e6a,0x2543d, +0xe4e76,0x25441,0x16e75,0x25440,0x25442,0x25443,0x16f22,0x25445, +0x25449,0x2544d,0x00000,0x16f26,0x1723c,0x25a51,0x25a57,0x25a54, +0x25a4c,0x25a58,0x25a4d,0xe526a,0x25a53,0xe526b,0x17237,0x1723d, +0x25a59,0xe4e6f,0xe5267,0x17239,0xe526e,0x17243,0x1723e,0x25a5b, +0x25a55,0x1723a,0x25a4e,0x17244,0x25a4f,0x25a50,0x17245,0x17242, +0x16e7a,0xe5269,0x17238,0x25a5c,0x17246,0xe5268,0x1723f,0x25a5a, +0x1723b,0x17240,0x17241,0xe664c,0x1754e,0x25f50,0x25f59,0x25f56, +0x25f58,0xe5649,0x1754b,0x25f51,0xe564a,0x25f57,0x17547,0x25f53, +0x1754f,0x25f4f,0x25f54,0x25f5b,0x25a52,0x25f55,0x25f4e,0x17548, +0x25f4d,0x17549,0x25f5c,0x1754a,0x25f5a,0x1754d,0x25f4c,0xe5648, +0x1754c,0x00000,0x25f52,0x26347,0x26355,0x26350,0x26352,0x26346, +0x1773e,0xe592a,0x26345,0x17741,0x17740,0xe5926,0x26354,0x2634c, +0x26349,0x2634f,0xe5924,0x26348,0xe5928,0x2634a,0x26353,0x26351, +0xe5923,0x1773f,0x26358,0x26356,0x2634d,0x26357,0x2634e,0xe5b34, +0x26726,0x1787a,0x2672d,0xe5b35,0x00000,0x26c3e,0x17923,0x2634b, +0x26724,0x1787d,0x26725,0x2672a,0xe5b36,0xe5d33,0x17921,0x17922, +0x26723,0x2672c,0x2672e,0x26727,0x26729,0x2672b,0x26728,0x2672f, +0x1787c,0x17924,0x1787e,0x00000,0x1787b,0x2697c,0x00000,0x17a42, +0x2697a,0xe5d30,0xe5d2c,0x2697e,0xe5d32,0x26a21,0x17a40,0x26a22, +0x2697d,0xe5d2b,0x2697b,0x17a43,0x17a3f,0x26a23,0xe5d2e,0x17a41, +0x17a3e,0xe5c6d,0x00000,0xe642d,0x17b2b,0xe5e62,0x00000,0x17b2c, +0x26c3d,0x26c3c,0x26c3f,0x26c40,0xe5e63,0x17b2d,0x26e25,0x26e2a, +0x17b74,0xe5f61,0x26e27,0xe5f62,0x26e26,0x26e29,0x26e28,0xe6048, +0x26f51,0x00000,0x17c48,0x26f50,0x26f4e,0xe6047,0x26f4f,0x00000, +0xe6049,0xe607b,0x17c6a,0x17c69,0x2704f,0x27050,0x17c6b,0xe614b, +0x2713c,0x2713d,0x17d34,0xe616b,0x17d3a,0xe617e,0x27177,0x27236, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +/* 0x8c00 */ +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x14b47, +0x00000,0x23950,0xe392a,0x23951,0x24758,0x24e38,0x2544e,0x17551, +0xe564d,0x17550,0x26359,0x26730,0xe5f64,0x26f52,0x14b48,0x23322, +0x1583f,0x15d47,0x2475a,0x24759,0x16f27,0x2544f,0x16f28,0x25f5d, +0x17742,0xe5d34,0xe664d,0xe6221,0x17d43,0x14b49,0x2286b,0x23323, +0xe392d,0x00000,0x15d48,0xe392c,0x23952,0x23953,0xe3f2a,0x2404b, +0xe3f29,0x1622f,0x1666d,0xe4464,0x2475c,0x2475b,0x2475d,0xe496d, +0x24e39,0x24e3a,0x16b30,0x17247,0x16f29,0x17248,0x00000,0x25f61, +0x25f5e,0x25f60,0x25f5f,0x17552,0xe592b,0x2635a,0x26732,0x26731, +0x22524,0x15841,0x15840,0x23324,0xe392e,0x23954,0xe3f2c,0xe3f2b, +0x2404d,0x2404c,0x16230,0xe3f2d,0x2475f,0x24760,0x2475e,0xe634a, +0xe4465,0x1666f,0x1666e,0x00000,0x16b32,0x16b31,0xe4e7a,0x25450, +0x25a5f,0x25a5d,0x25a5e,0x17249,0x25f63,0x25f62,0xe564f,0x2635d, +0x2635c,0x2635b,0x26733,0xe614d,0x27178,0x14b4a,0x15356,0xe2f2e, +0x15357,0x15842,0x15843,0x23326,0x23325,0x23955,0xe3930,0x15d4e, +0x15d4c,0x15d49,0x15d4d,0x15d4b,0x15d4a,0xe3932,0xe3931,0x16231, +0x24050,0xe3f2f,0x16674,0x16233,0x16238,0x24052,0x1623a,0x16239, +0x1623c,0x24051,0x2404e,0x16236,0x16232,0x16234,0x2404f,0x1623b, +0x16237,0x16235,0x16676,0x16675,0x16673,0x16677,0x00000,0x16671, +0x16672,0xe4469,0x16670,0x00000,0x24761,0xe4467,0x00000,0x24e3c, +0xe4970,0x16b34,0x16b35,0x16b33,0xe4972,0x24e3b,0xe4971,0x24e3d, +0xe664e,0x25453,0x25455,0xe4e7e,0x16f32,0x25456,0x16f2b,0x25452, +0x16f2a,0x16f34,0x16f30,0x16f31,0x16f2d,0x25451,0x16f2c,0x25457, +0x25454,0xe4e7d,0x16f33,0xe4f22,0x16f2e,0x16f2f,0x25a61,0xe5275, +0x25a63,0x25a62,0xe5273,0x25a64,0x1724a,0x25a60,0xe5651,0xe5652, +0x17556,0x25f64,0x17553,0x17557,0x17555,0x17554,0x2635e,0x00000, +0x26361,0x00000,0x26360,0xe592e,0x2635f,0x17743,0x26734,0x26735, +0x17925,0x26736,0x17926,0xe5b38,0xe664f,0x17a45,0xe6428,0x17a44, +0x26c41,0xe5e65,0xe5e66,0x17b2e,0x26c42,0x26e2b,0x17b75,0x17b76, +0xe6650,0x26f53,0xe604a,0x17c6d,0xe614e,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x14b4b,0xe3933,0x15d50,0x15d4f, +0x24762,0x24763,0x00000,0x16b36,0x25a65,0x16f35,0x25a66,0x25f65, +0x14b4c,0xe243a,0x22d53,0x15359,0x15358,0x00000,0x23327,0x15844, +0x23328,0x23958,0xe3939,0x23957,0xe3937,0x23956,0xe3935,0xe3938, +0x24054,0x1623f,0xe3f39,0xe3f34,0x24053,0x1623e,0xe3f37,0xe3f30, +0xe3f33,0x24055,0x1623d,0xe3f38,0x24765,0x24768,0x24766,0x24767, +0x2476b,0x24764,0x2476c,0x24769,0x2476a,0x16b38,0x24e3e,0xe4975, +0xe4973,0x16b37,0xe4974,0x2545b,0x25459,0xe4f26,0x00000,0x16f36, +0x25458,0x2545a,0xe4f25,0x16f37,0xe4f23,0x25a67,0xe5277,0x25a68, +0x17558,0xe5931,0x26738,0x2673a,0x26737,0x26739,0x26a24,0x26c43, +0xe6651,0x00000,0x2715e,0x14b4d,0x1535a,0x23329,0x2332b,0x2332a, +0x00000,0x2395b,0x15d52,0xe393e,0x23959,0xe393a,0x15d51,0x2395c, +0xe393d,0x2395d,0x2395a,0x00000,0x00000,0x24061,0x16247,0x24059, +0x2405f,0xe3f3f,0xe3f3a,0x16242,0x16245,0x24058,0x16240,0x2405c, +0x24772,0x16244,0xe3f3b,0x24057,0xe3f3e,0x2405d,0x2405a,0x24060, +0x24056,0x2405e,0x16243,0x16246,0x2405b,0x16241,0x00000,0x16679, +0x2476e,0x16678,0x24775,0x24774,0x16721,0x00000,0x16722,0x24776, +0x1667a,0x24773,0x1667e,0x24778,0x2476f,0xe446b,0x24771,0x1667b, +0x2476d,0x24770,0x24777,0x1667c,0x24779,0x00000,0x00000,0x00000, +0x00000,0x00000,0x1667d,0x00000,0x16b39,0x24e43,0x24e49,0x24e41, +0x24e4a,0xe497b,0x24e40,0x24e45,0x24e4b,0x24e48,0x24e47,0x24e46, +0xe497a,0x24e3f,0x24e44,0xe4979,0x00000,0x24e42,0x00000,0x16f3c, +0x16f39,0x25464,0x25469,0x2546b,0x25468,0x25461,0x25463,0x2546d, +0x2546a,0x25465,0x2546e,0x25462,0x2546c,0x16f3a,0x16f40,0x16f3e, +0x2545c,0x16f3f,0x16f3b,0x2545d,0x2545f,0x2545e,0x25466,0x25467, +0xe4f2c,0x16f3d,0xe4f2b,0x16f38,0x00000,0x00000,0x25460,0x00000, +0x25a72,0x1724c,0xe527e,0x25a69,0x1724d,0x17250,0x25a6e,0x00000, +0x25a6b,0x1724f,0x00000,0xe527b,0x25a6f,0x25a70,0x25a6a,0x25a73, +0x25a6c,0x25a71,0x1724e,0xe527c,0x1724b,0x25a6d,0xe5654,0x25f6b, +0x1755b,0x17559,0x1755c,0x1755a,0x25f6a,0x25f67,0x25f66,0xe5655, +0x25f69,0x00000,0x00000,0x25f68,0x2636f,0x17749,0x26366,0x26365, +0xe5932,0x17744,0x2636b,0x2636a,0x26362,0x2636d,0x26367,0x17748, +0x26364,0x2636c,0x26363,0x17745,0x17747,0x26368,0x17746,0x26369, +0xe5b3a,0x2636e,0x2673e,0xe5b39,0x1792b,0x2673b,0x00000,0x2673f, +0xe5b3b,0x00000,0x17928,0x2673d,0x1792d,0xe5b3c,0x1792a,0xe5b3d, +0x2673c,0x00000,0x1792c,0x26740,0x17927,0x00000,0x00000,0x00000, +0x00000,0x17a47,0x17a49,0xe5d37,0x26a27,0x17a48,0x26a25,0x17929, +0x26a26,0x17a46,0x17b2f,0x17b31,0x26c45,0x17b30,0x26c44,0x00000, +0x26e30,0x17b77,0x26e2f,0x17b78,0x26e2d,0x26e2c,0x26e31,0x26e32, +0x26f54,0xe604b,0x26e2e,0x00000,0x00000,0x27054,0x27051,0x27052, +0x27053,0x17d29,0xe6150,0x27140,0x2713f,0x2713e,0x2715f,0xe616c, +0x2722e,0x27179,0x17d3b,0x14b4e,0x15845,0xe393f,0x00000,0xe3940, +0xe3f40,0xe4473,0x16723,0xe497d,0xe497c,0x00000,0xe4f30,0xe4f32, +0xe4f2f,0xe4f31,0x16f41,0x00000,0xe6652,0x25a74,0x00000,0xe5935, +0x1774a,0xe5936,0x26741,0xe5b3f,0x00000,0x00000,0xe5d38,0x00000, +0x00000,0x2717a,0x14b4f,0x14f51,0x1535c,0x1535b,0x00000,0x15848, +0x00000,0x2332c,0x15846,0x2332d,0x15847,0xe6653,0xe3941,0x23962, +0x2395e,0xe3947,0x00000,0x15d53,0x23961,0x23960,0x2395f,0x15d54, +0x23963,0x23964,0x00000,0x00000,0xe3f45,0x24068,0x24066,0x2406a, +0x2406b,0x24071,0xe3f47,0x2406d,0x2406f,0x00000,0x24067,0x24062, +0x00000,0x2406e,0xe3f44,0xe3f46,0x24070,0x24069,0x2406c,0x24063, +0x16249,0x24065,0x24064,0x16248,0x1624a,0xe3f49,0x16726,0x2477b, +0x2477d,0x2477c,0x24823,0x16724,0xe4476,0x2477e,0x2477a,0x24821, +0x24822,0x16725,0x16727,0x24824,0x00000,0x24e4f,0x24e4e,0x00000, +0x24e4c,0x24e4d,0x16b3b,0x16b3d,0x16b3a,0x16b3c,0x25475,0x25476, +0x25471,0xe4f36,0x25472,0x16f43,0x16f48,0x16f42,0x16f49,0x16f44, +0x25473,0x00000,0xe4f33,0x25474,0x25470,0x16f4a,0x16f46,0xe4f35, +0x00000,0x16f45,0x16f47,0xe4f34,0x2546f,0xe5324,0x25a76,0x17252, +0xe5322,0xe5321,0x25a78,0x17254,0x25a7b,0x25a77,0x25a75,0x25a7a, +0x17253,0x25a79,0x00000,0x17251,0xe5325,0xe5659,0x1755e,0x17561, +0x25f6d,0xe565a,0x1755f,0x25f6c,0x1755d,0x17560,0x26370,0x26371, +0x26372,0x1774b,0xe5937,0x26373,0x00000,0x1774c,0x1792f,0x26744, +0x26745,0x26743,0x26742,0x26746,0x1792e,0x26a2b,0x26a29,0x26a2a, +0x26a2c,0x26a28,0x26a2d,0x26c47,0xe5e67,0x26c48,0x26c46,0x17b32, +0x26e33,0x17b79,0x26e34,0x26f56,0x26f55,0xe6222,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x14b50,0x1624b,0xe3f4b,0xe4477,0x16728, +0xe4478,0xe4a21,0xe4a22,0x16b3e,0xe4f37,0xe5327,0x17256,0xe5326, +0x17255,0x00000,0xe6654,0x00000,0xe5938,0x17930,0x17a29,0x17b33, +0x14b51,0x15849,0x16729,0xe4f39,0x26747,0xe272f,0x00000,0x00000, +0x00000,0xe243b,0x00000,0x00000,0x00000,0x00000,0xe2730,0x22526, +0x00000,0xe2733,0x14b52,0x00000,0x14b55,0x14b54,0x14b53,0xe2731, +0x00000,0x22525,0xe2a72,0x2286d,0xe2a70,0x2286f,0x14f52,0xe2a74, +0x00000,0x14f54,0x2286c,0x2286e,0x14f53,0x22871,0x22870,0x22872, +0xe2a73,0xe2a71,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x22d57,0x22d55,0x1535f,0x22d54,0x15364,0x15361,0x1535e,0xe2f31, +0x15365,0xe2f32,0x15360,0x15363,0x00000,0x15362,0x22d56,0xe2f33, +0x1535d,0xe2f30,0x00000,0x00000,0x1584f,0x2332f,0x23335,0x1584c, +0x15853,0xe3425,0x1584e,0x23332,0x23334,0x15851,0x2332e,0x23331, +0x1584d,0x1584a,0x23330,0x15850,0x23333,0x15852,0x1584b,0x00000, +0xe3427,0xe3426,0x00000,0x23966,0x23969,0x15d56,0xe394b,0x15d60, +0x15d5c,0x23967,0xe394a,0xe394e,0x15d64,0x15d5d,0x15d62,0x15d58, +0x00000,0x15d55,0x15d57,0x15d63,0x23968,0x15d5b,0x15d5e,0x15d5a, +0x15d5f,0x2396a,0x15d61,0x15d59,0x23965,0xe394c,0x00000,0x00000, +0xe3f4f,0xe3f50,0xe3f4d,0xe3f4c,0xe3f51,0x24072,0x1624c,0x24074, +0xe3f55,0x1624e,0x16250,0x00000,0x24073,0x1624d,0x16251,0xe3f56, +0x1624f,0x00000,0xe3f54,0xe3f57,0x1672f,0x24829,0x16737,0x24826, +0xe447d,0x16738,0x1672d,0xe4479,0x24827,0xe447c,0xe447a,0x16732, +0xe447b,0x24828,0x1672b,0x1672a,0xe447e,0x16735,0x16734,0x16733, +0x16731,0x16736,0x24825,0x1672c,0x1672e,0x16730,0x00000,0x00000, +0x16b40,0x16b43,0xe4a24,0x16b47,0x16b41,0x16b46,0x16b44,0xe4a27, +0x16b3f,0xe4a26,0x16b45,0x16b42,0x00000,0x00000,0x00000,0x2547a, +0x16f4d,0x16f4b,0xe4f3c,0x2547b,0x00000,0x16f4e,0x16f4c,0x25479, +0x25478,0xe4f3b,0x1725a,0x25477,0x17258,0x17257,0x25a7c,0x16f4f, +0x17259,0x25a7d,0x1725c,0x25a7e,0x1725b,0x17563,0x25f6f,0x17562, +0x17567,0x17565,0x17566,0x1774e,0x17564,0x25f6e,0x25b21,0x1774d, +0x1774f,0xe593a,0x17931,0x17932,0x00000,0x26a2e,0x00000,0x17c4a, +0x17c49,0x14b57,0xe225e,0xe225d,0x22275,0x15854,0xe243c,0x22272, +0x22273,0x22271,0xe243d,0x22274,0xe6655,0x00000,0x2252a,0x22527, +0x2252c,0x22528,0x14b58,0x14b5b,0xe2735,0x22529,0x14b5a,0x2252b, +0xe2739,0xe2734,0x14b59,0xe3951,0x00000,0xe2a77,0x00000,0x22875, +0x22877,0x14f57,0x22873,0x22876,0x22874,0x14f55,0x14f58,0xe2a75, +0x14f56,0xe2a78,0x00000,0x00000,0xe2f35,0x22d59,0x22d5d,0x22d5a, +0xe2f38,0x15368,0xe2f34,0x15369,0xe2f3e,0x22d5c,0xe2f37,0x22d5e, +0x22d60,0xe2f3c,0x15366,0x22d5f,0x00000,0xe2f3b,0x15367,0x00000, +0x00000,0x00000,0x00000,0x00000,0x23971,0x22d5b,0x23336,0x2333f, +0x2333d,0x23338,0x23339,0x2333e,0x23340,0x15856,0xe3429,0x2333b, +0x23337,0x15855,0x15857,0x2333a,0x23341,0x2333c,0x00000,0x00000, +0x15d65,0x23974,0x2396c,0x23972,0x23973,0x15d66,0xe394f,0x2396b, +0x2396d,0x22d58,0x2396f,0x23970,0x2396e,0x16253,0xe636c,0xe3952, +0x00000,0x2407b,0x25b22,0x2407c,0x24079,0x15d67,0x16255,0x24078, +0x2407e,0x2407d,0x16252,0x24123,0x24077,0x24122,0x24075,0x24121, +0x2407a,0x16254,0xe3f59,0x24830,0xe4523,0x2482b,0x24831,0x2482c, +0x2482a,0x2482d,0x16739,0xe4524,0x2482f,0xe4525,0x2482e,0x1673a, +0x16b49,0x16b48,0x24e56,0x24e59,0x24e51,0x24e55,0x16b4a,0x24e54, +0x24e52,0x24e58,0x24e53,0x24e50,0x24e57,0xe4a2a,0x25523,0x16f52, +0x26374,0x2547e,0x25521,0x2547d,0x24076,0x16f51,0x25524,0x2547c, +0x16f50,0x16f53,0x25522,0x25b23,0x1725d,0x25b24,0x25b25,0xe532b, +0x25f70,0x17568,0x26375,0x26376,0xe593c,0xe593b,0x26377,0x26749, +0x26748,0x26a30,0x00000,0x26a2f,0x26c4a,0x26c4b,0x26c49,0x26e35, +0x17b7a,0x14b5c,0x1536b,0x1536a,0x1585a,0x15859,0x23343,0x23344, +0x23342,0xe342a,0x15858,0x23978,0xe3955,0x23979,0x23975,0x15d68, +0x23976,0xe3954,0x23977,0x00000,0xe6657,0x00000,0x00000,0x24126, +0x24128,0x24124,0x24127,0x16256,0x24125,0x16257,0x00000,0xe4528, +0x24279,0x1673d,0x1673c,0xe4527,0x1673b,0x00000,0x24832,0x24833, +0x00000,0x00000,0x24e5b,0x24e5d,0x16b4e,0x16b4b,0xe4a2c,0x16b4d, +0x16b4c,0x24e5c,0x24e5a,0xe4a2b,0xe4a2d,0x00000,0x00000,0x00000, +0x2552b,0x25528,0x25529,0x16f57,0x2552a,0x25525,0x25526,0x16f54, +0xe4f3f,0x16f55,0x25527,0x16f56,0xe4f40,0x25b29,0xe532d,0x25b2a, +0x25b27,0x25b28,0x1725e,0x25b26,0x00000,0xe532c,0xe532f,0x00000, +0x00000,0x25f74,0x25f71,0x25f73,0x1756b,0x25f77,0x1756a,0x25f75, +0x25f78,0x25f76,0x25f72,0x17569,0x00000,0x26379,0x00000,0x2637a, +0x26378,0xe593d,0x2637c,0x17750,0x17751,0x2674b,0x17934,0x2637b, +0x2674a,0x17933,0x26a33,0x26a34,0x17a4a,0x26a32,0x00000,0x26a31, +0x00000,0x26c4c,0x17b34,0xe5e68,0x26f57,0x27056,0x27055,0xe607e, +0x17c6e,0x17d2a,0x27057,0x27160,0xe616d,0x17d3c,0x14b5d,0x14f59, +0x00000,0x1673e,0x00000,0x17a4b,0x14b5e,0x1536c,0x15d69,0x16258, +0x17752,0x14f5a,0x00000,0x22d62,0x22d61,0x23345,0xe3430,0x1585d, +0x1585b,0x1585f,0x23347,0xe342d,0x1585e,0x1585c,0xe342f,0xe342e, +0xe3431,0x00000,0x23346,0x15d6c,0x23a21,0xe3958,0x15d6b,0x15d6d, +0x23a26,0x15d6f,0x23a23,0x23a24,0x2397a,0x15d6e,0x23a27,0x00000, +0xe3957,0x2397c,0xe3956,0x2397d,0x2397b,0x15d6a,0xe3959,0x23a25, +0x2397e,0x23a22,0x00000,0x00000,0x00000,0x24134,0xe3f5d,0x24133, +0x24131,0x24129,0x24138,0x2412c,0x24136,0x2413d,0x24135,0x16260, +0xe3f66,0x1625c,0x2412a,0xe3f60,0x24130,0x1625e,0xe3f68,0x2412f, +0x1625f,0x16261,0x24132,0xe3f69,0x16259,0x1625a,0x2413e,0x2413c, +0xe3f62,0x2413b,0x2412d,0xe3f65,0x24139,0x00000,0x1625d,0x00000, +0xe3f5e,0xe6659,0xe3f63,0x1625b,0x2413a,0x2412b,0x2412e,0x24137, +0x00000,0x00000,0x00000,0xe6658,0x00000,0x24f22,0x2483d,0xe452e, +0x24836,0x24849,0x24852,0x24839,0x16749,0xe452b,0x24846,0x1673f, +0x16741,0x1674d,0x24837,0xe4537,0xe452f,0x16742,0x16744,0x1674e, +0x16743,0xe4539,0x00000,0x00000,0xe4538,0x1674c,0x2483f,0x00000, +0x24834,0x1674a,0x2483e,0x16746,0x24850,0x1674b,0x2484e,0x24842, +0x2484c,0x16748,0x24835,0x2484f,0x2484a,0xe452a,0x24851,0x16740, +0x00000,0xe452d,0x1674f,0x16745,0xe4531,0xe4529,0x2483b,0xe4534, +0x24843,0x24847,0xe4533,0x2484b,0x16747,0x2483a,0x24838,0x24844, +0x00000,0x00000,0xe4532,0xe4535,0x24841,0x24840,0xe4536,0x24845, +0x24848,0x00000,0x2484d,0xe665a,0x00000,0x00000,0x24e60,0x00000, +0x16b4f,0x24e6a,0x24e62,0x16b55,0x16b59,0x24e73,0x24e7b,0x24e6c, +0x16b51,0xe4a34,0x24e70,0x2483c,0xe4a35,0x16b52,0x24e77,0x24e7c, +0x24e74,0xe4a2f,0x24e76,0x24f21,0x24e78,0x24e66,0x24e6f,0xe4530, +0xe4a38,0x16b5a,0xe4a33,0x16b56,0x24e64,0x24e71,0x16b54,0x24e6b, +0x16b53,0x24e79,0x24e68,0x24e61,0x16b57,0x24e7e,0xe4a39,0x00000, +0x24e63,0x24e75,0x24e72,0x24e6d,0x24e5f,0x24e5e,0x24e67,0x24e7a, +0x16b58,0x24e7d,0x24e65,0x24e69,0x16b50,0xe4a32,0xe4a37,0x00000, +0xe672a,0xe4a31,0x16f63,0x16f5e,0x2554d,0x25549,0x25531,0x16f5a, +0xe4f42,0xe4f50,0x00000,0x16f59,0x16f5f,0x00000,0xe4f43,0xe4f41, +0x2552f,0x16f5d,0x2553b,0x2552d,0x2552e,0x16f58,0x2554c,0x16f61, +0x2553e,0x25543,0x2553d,0x25b3c,0x25539,0x25541,0x2553f,0x25532, +0x2552c,0x25547,0x16f60,0x25548,0xe4f48,0x25542,0xe4f49,0x25537, +0x25535,0x25530,0xe4f4b,0xe4f4e,0xe4f44,0x25538,0x25545,0x25534, +0x25544,0x2554a,0xe4f51,0x00000,0x16f5c,0xe4f45,0x25540,0x25546, +0x2553c,0x25536,0x16f5b,0xe4f52,0x00000,0xe4f4c,0x24e6e,0x2553a, +0x16f62,0x25533,0x00000,0xe4f4d,0xe665b,0xe665c,0xe4a30,0x25b41, +0x17261,0x25b40,0x25b3e,0x25b50,0x17265,0xe5335,0x25b4d,0x25b45, +0x25b4f,0x25b37,0x25b43,0xe533d,0x17267,0xe533e,0x25b2f,0xe5338, +0x25b2d,0x25b4e,0xe5332,0x25b4c,0x25b4b,0x25b3b,0x25b3a,0x25b30, +0x17269,0x00000,0x25b36,0x25b3f,0x25b4a,0x1726c,0x25b51,0xe5336, +0x17573,0x1726e,0x17268,0x25b34,0xe5337,0x25b3d,0x25b2c,0x25b2e, +0x1725f,0x1726b,0x17264,0x25b35,0x25b44,0x2554b,0x1726a,0x25b2b, +0x1756e,0x25b46,0x25b49,0x17266,0xe533b,0x25b39,0x1726d,0x17263, +0xe533c,0xe5339,0xe533a,0x17262,0x25b42,0x25b48,0x17260,0x00000, +0x25b32,0x25b47,0x00000,0x00000,0x25b33,0x00000,0x00000,0xe665d, +0x00000,0x00000,0xe665e,0x00000,0x00000,0xe5331,0x25b38,0x25f7e, +0xe5665,0x26025,0x17570,0x17572,0x2602b,0x1756c,0x26039,0x26031, +0x26026,0x26027,0x26030,0xe5666,0x17579,0x2602f,0x25f7d,0x2602e, +0x26022,0x2603a,0x17578,0x17576,0x26023,0xe565d,0x26036,0xe5667, +0x26028,0x26035,0xe5664,0x26037,0x25f7c,0x17571,0xe565b,0x26038, +0xe5668,0xe565e,0x2602c,0xe566b,0x17575,0x26029,0xe5661,0x00000, +0x17577,0x26032,0xe5662,0xe5663,0xe565f,0x1756f,0x26024,0x26033, +0xe565c,0x2602d,0x25b31,0x26034,0x26021,0xe5660,0x17574,0xe566a, +0x2642f,0x00000,0x1756d,0x25f7a,0x00000,0x00000,0xe665f,0x00000, +0x2642c,0x26425,0x17754,0xe5943,0x2637e,0x26430,0x26427,0x2602a, +0xe5940,0x26432,0x26421,0xe5942,0x17753,0x2642b,0x17755,0x1775d, +0x1775b,0x2642d,0x1775c,0x26423,0xe5949,0x26424,0x26429,0x2642e, +0xe593e,0x25f79,0x17756,0x26437,0x26434,0x26761,0x2642a,0x26426, +0x26435,0x26756,0x26428,0x00000,0x17759,0xe5944,0x17758,0x25f7b, +0x1775a,0x26431,0x26433,0x17757,0x26436,0x2637d,0x00000,0x26422, +0xe5946,0x00000,0x00000,0xe5945,0xe6661,0xe6662,0xe6660,0x00000, +0x2675f,0xe5b50,0x2674f,0x17938,0x2675d,0xe5b44,0xe5b45,0x2674d, +0x17939,0x00000,0x26758,0xe5b43,0x26754,0x1793e,0x2675e,0x2674e, +0x26751,0x17936,0x26760,0xe5b48,0x26759,0x2675c,0x1793c,0x17941, +0x1793f,0x26755,0x26750,0xe5b4d,0x1793a,0x1793b,0x2674c,0x17937, +0xe5b4f,0x17935,0x1793d,0x2675b,0x17940,0xe5b4a,0x26757,0x26762, +0x17942,0xe5b41,0xe5b42,0xe5b4e,0x26753,0xe5b47,0x2675a,0xe6665, +0x00000,0xe6663,0xe6664,0xe5d41,0xe5e6a,0x26a41,0x26a50,0x26a43, +0x26a4a,0x26752,0x26a48,0x26a37,0x26a4e,0x17a4e,0x26a3b,0x26a4d, +0x26a42,0x00000,0xe5d43,0x17a4d,0xe5d3c,0xe5d3f,0x26a52,0x26a44, +0xe5d3e,0x26a49,0x26a4c,0x26a35,0x26a4f,0x26a40,0x26a45,0x26a39, +0x26a3d,0x26a51,0x26a47,0x26a36,0x26a3a,0x26a3c,0x26a46,0xe5d3d, +0x17a4c,0x26a3f,0xe5d44,0xe5d45,0xe5d47,0x00000,0xe5d42,0xe5d3a, +0x26a38,0x00000,0xe6666,0xe6667,0xe6668,0x00000,0x00000,0xe5d46, +0x26a3e,0x26c50,0x26c54,0x17b3b,0x26c56,0xe5e6d,0x17b35,0x00000, +0x26c52,0x26c58,0x17b3a,0x17b36,0x00000,0x17b37,0x26c4f,0x26c55, +0x17b39,0x26c53,0x17b38,0x26c4e,0x26a4b,0x26c51,0x00000,0x26c4d, +0x26c57,0x00000,0xe5f69,0xe5f6e,0x17b7b,0x26e3c,0x26e3f,0x26e3b, +0x26e3d,0x26e3e,0x26e38,0x26e39,0x26e36,0xe5f6a,0xe5f6c,0x26e3a, +0x26e37,0x17b7c,0x17b7d,0x00000,0xe5f6b,0x26f59,0xe6052,0x26f5b, +0xe6431,0x00000,0xe6055,0xe6054,0xe6056,0x26f5a,0x26f5c,0xe604f, +0x17c4c,0xe6053,0x26f58,0x17c4b,0x17c4d,0xe6057,0xe666a,0xe6669, +0x27059,0x2705a,0x17c6f,0x27058,0xe6122,0x27142,0x27141,0x27143, +0x17d2c,0x27144,0x17d2b,0x27145,0x27161,0x27164,0x27163,0x17d35, +0x27162,0x00000,0xe616f,0xe6223,0x17d3f,0x17d3d,0x17d3e,0x17d44, +0x27230,0x27231,0x2722f,0x27237,0xe6236,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +/* 0x9500 */ +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x14f5b, +0x00000,0xe6323,0x23a28,0x2413f,0x2554e,0x26763,0x00000,0x00000, +0x14f5c,0xe2f40,0x1536d,0x15860,0x00000,0xe3432,0x23a29,0xe395c, +0x23a2a,0x15d70,0x00000,0x16264,0x24141,0x24140,0x16268,0x16263, +0x24142,0x16265,0x16267,0x16266,0x16262,0xe3f6c,0x00000,0xe666b, +0x16750,0xe453c,0xe453a,0x24856,0x24854,0x00000,0x24855,0x24853, +0x00000,0x16b5b,0xe4a3d,0x16b5e,0x16b60,0x16b5f,0x00000,0xe4a3e, +0x16b5c,0x16b5d,0x00000,0x25550,0x2554f,0x16f64,0x25551,0xe4f53, +0x25552,0x16f65,0xe4f55,0xe4f56,0x00000,0x25b59,0x25b57,0x26040, +0xe5342,0x25b55,0x25b56,0x1726f,0x25b52,0x25b5a,0x25b54,0x25b58, +0x2603c,0xe5344,0xe5340,0x2603e,0xe566d,0x2603f,0x1757e,0x2603b, +0x1757d,0x2603d,0x1757a,0x1757b,0x1757c,0x25b53,0xe666c,0x00000, +0x17760,0x2643a,0x26438,0x26439,0x1775e,0x17761,0x1775f,0xe594b, +0xe594a,0x00000,0x26764,0x26765,0x17943,0xe5b53,0x26a53,0x26a55, +0x26a54,0x17a4f,0x17b3c,0x26c5b,0x26c5a,0x26c59,0x00000,0xe666d, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +/* 0x9600 */ +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x14f5d,0xe2143,0x22169,0x00000, +0x22278,0x1486a,0x22276,0x22279,0x22277,0x00000,0xe273b,0xe273a, +0x2252e,0xe273f,0x14b62,0xe273c,0x14b63,0x22530,0x14b60,0x2252f, +0x2252d,0x14b61,0x14b5f,0xe273d,0xe273e,0x00000,0x00000,0xe2a79, +0x00000,0x22878,0x2287b,0x14f60,0x2287a,0x22879,0xe2a7c,0x14f5f, +0x14f5e,0xe2a7b,0x14f62,0x2287c,0x14f61,0x00000,0x00000,0x00000, +0x00000,0x00000,0x22d67,0x1536f,0x15370,0x15371,0x22d68,0x22d64, +0x1536e,0x22d65,0x00000,0x22d66,0x22d63,0x00000,0xe3436,0x00000, +0x15867,0xe3434,0xe395e,0x15864,0x23348,0x15865,0x15868,0x23349, +0xe3433,0x15863,0x15861,0x15862,0x15866,0x00000,0x00000,0x00000, +0x00000,0x00000,0x15d71,0x23a2d,0x15d79,0x23a2c,0xe3961,0x23a2f, +0x15d75,0x23a2e,0x16270,0x15d73,0x15d76,0x15d72,0x15d77,0x15d78, +0x15d74,0xe3965,0x00000,0xe3f71,0x23a2b,0x1626c,0x24144,0xe3f72, +0x24148,0xe3f73,0xe3f75,0x24147,0x16271,0x1626d,0x1626e,0x24143, +0x24145,0x24146,0x16269,0x1626b,0xe3f70,0x1626f,0x1626a,0xe4540, +0x00000,0x24859,0x24857,0x24858,0x16752,0x16753,0xe4542,0x2485a, +0x16751,0x16b61,0x00000,0x16b63,0x16b62,0xe4a45,0x24f23,0xe4a46, +0xe4a44,0x24f24,0x25554,0xe4f5a,0x25553,0xe4f5b,0x00000,0x17270, +0x17271,0x25b5b,0x17272,0xe5348,0x26043,0xe5670,0x26041,0xe566f, +0x26042,0x17621,0xe5671,0x2643b,0x17944,0xe5d49,0xe2a7d,0xe5349, +0x17622,0x14f63,0xe6325,0x15869,0x2334a,0xe3439,0x00000,0x23a30, +0x15d7a,0x16272,0x24149,0x2414b,0x16274,0x16273,0x16275,0x16276, +0x2414a,0x16756,0x16757,0x16755,0x16b64,0x16754,0x2485b,0x00000, +0xe4a47,0xe4a49,0x16b65,0x25555,0x25b5c,0x17273,0x17623,0x2643c, +0x26440,0x17764,0x2643d,0x17765,0x17763,0x26441,0x17766,0x2643f, +0x00000,0x26766,0x17762,0x17945,0xe5e70,0x2705b,0xe6125,0xe622f, +0x14f64,0x15d7c,0x15d7b,0x00000,0xe3f7e,0xe3f7c,0xe3f7b,0x16277, +0x2414d,0x2414c,0x16278,0x00000,0xe4546,0x2485f,0x1675b,0x16758, +0x2485e,0x1675a,0x2485c,0x16759,0xe4547,0x2485d,0x00000,0x24f25, +0x16b66,0x00000,0x25558,0x00000,0x16f66,0x25556,0x16f67,0x16f68, +0x25557,0x16f69,0xe4f60,0x25b5d,0xe5350,0x17277,0x17274,0x17279, +0x25b5f,0x17275,0x25b5e,0x17278,0xe534d,0xe534c,0x17276,0xe5351, +0x26046,0x26048,0xe5674,0xe5675,0x17624,0x26047,0x17625,0x26045, +0x26044,0x00000,0x26443,0x26442,0x17767,0x26444,0x2676b,0x17947, +0x2676a,0x26767,0x17946,0x26768,0x26769,0x00000,0x26a56,0x26a57, +0x17a50,0xe5d4f,0x17b3f,0xe5d4c,0xe5d4e,0x26c5c,0xe5e72,0xe5e71, +0x17b3d,0x17b3e,0x26c5d,0xe666e,0xe5f71,0x17b7e,0x17c21,0x26e40, +0xe5f72,0xe6059,0x17c70,0x2705d,0x17c72,0xe6126,0x2705c,0x2705e, +0x17c71,0x27146,0x00000,0x2717b,0x00000,0xe666f,0x00000,0x00000, +0xe6245,0xe2a7e,0x14f65,0x00000,0x00000,0xe4549,0x1675c,0x00000, +0x24f26,0xe4a4c,0x25559,0x1727a,0x1727b,0xe594f,0x14f66,0xe4021, +0x16f6a,0x17948,0x15372,0xe2b21,0xe4a4e,0x00000,0x1727c,0xe5e73, +0x17c4e,0x15373,0x23a31,0x00000,0x2414e,0xe4024,0x24150,0xe4022, +0x2414f,0x00000,0x24863,0x24860,0x1675d,0x00000,0x1675e,0x24861, +0x24862,0xe454b,0x24f28,0x24f2d,0x16b67,0x24f27,0x24f29,0x24f30, +0x24f2b,0x24f2f,0x24f2c,0x24f2a,0x24f2e,0x16b68,0x00000,0xe4f62, +0x2555c,0xe4f63,0x2555a,0x16f6c,0xe4f64,0x16f6b,0x2555b,0x16f6d, +0x00000,0x00000,0x00000,0xe5353,0x25b62,0x00000,0x00000,0x25b61, +0x1727d,0x25b60,0x26049,0xe567a,0x2604b,0x2604d,0x2604c,0xe567b, +0x17626,0x2604a,0x2644b,0x17768,0x26449,0x2644c,0x17769,0x00000, +0x26447,0xe5950,0x2644a,0x26448,0x26445,0x1776a,0x26446,0x00000, +0x00000,0xe5b5f,0xe5b5d,0x2676c,0xe5b5e,0xe5b60,0x2676e,0x2676d, +0xe5d50,0x26a58,0xe5d51,0x26a59,0x00000,0xe5e75,0xe5e74,0x26c5e, +0xe5f73,0x17c23,0x00000,0x17c22,0x26f5d,0x26f5e,0x17c73,0x2705f, +0xe6128,0x17d36,0xe623b,0x15374,0x16279,0x24f32,0x24f31,0x2555e, +0x2555d,0x00000,0xe5355,0x17627,0x2604f,0x2604e,0x2644f,0x2644d, +0x26450,0x2644e,0xe5951,0x00000,0x17949,0x2676f,0x26770,0x26771, +0x00000,0x26c5f,0xe5e76,0x26e41,0xe6129,0x27060,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x15375,0xe454f,0xe4f65, +0x25b63,0x26050,0xe5b61,0x15376,0x00000,0xe4550,0x16b69,0x00000, +0x25b64,0x1776b,0x26451,0x1794a,0xe5d53,0x26a5a,0x26a5b,0x17b40, +0x26f5f,0x15377,0x15e21,0x15e22,0x23a32,0x1627a,0x1627b,0x24151, +0x1627c,0x00000,0x16762,0xe4552,0x16764,0x24865,0x24866,0x24864, +0x1675f,0x16760,0x16763,0x16761,0xe4a54,0xe4a55,0x24f33,0x16b6a, +0x16b6b,0xe4a52,0xe4a56,0x25565,0x16f70,0x25560,0x2555f,0xe4f69, +0x25564,0x16f6e,0xe4f67,0xe636e,0x17326,0x00000,0x25561,0x25566, +0x25563,0x25562,0xe4f66,0x16f6f,0x00000,0x17324,0xe535c,0x25b66, +0x1727e,0xe5359,0x25b67,0xe535a,0xe5228,0x25b65,0xe5358,0x17323, +0x17321,0x17325,0xe535d,0x17322,0xe535b,0xe535f,0x00000,0xe595b, +0xe5726,0x26051,0xe637b,0x26056,0x26052,0x26055,0x17628,0xe5728, +0x25e41,0x26054,0x26053,0xe5959,0x1776e,0x1776c,0x1776f,0x1776d, +0x26452,0x26453,0x26454,0x17770,0xe5956,0xe5958,0xe5b65,0x26775, +0x1794c,0x26773,0x00000,0x1794d,0x26772,0x26774,0x1794b,0x26a5f, +0x26a5c,0xe642a,0x26a5d,0x26a5e,0x26c60,0x17b42,0xe5e78,0x17b41, +0xe5e77,0x26e43,0x26e42,0x17c24,0xe605d,0xe605e,0xe605c,0x17c4f, +0x17c74,0x17d2d,0x27147,0x2717c,0x2717d,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x15378,0x24152,0x00000,0x00000,0x24867,0x24f34,0x24f35,0x16b6c, +0x00000,0x16b6d,0x25567,0x16f71,0x00000,0xe5361,0x17629,0xe572a, +0x26455,0xe595c,0x17771,0x26778,0x1794e,0x26777,0x26779,0x26776, +0x26c63,0x26a60,0x26a61,0xe5d56,0x17a51,0x00000,0x26c62,0xe5e7b, +0xe5e79,0x26c61,0xe5e7a,0x26e44,0x2717e,0xe6225,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x15379,0xe5e7c,0xe6226,0x00000,0x1537a, +0x00000,0xe3967,0x1586a,0x2334b,0xe6670,0x23a33,0xe3968,0x1627d, +0x00000,0x16322,0x1627e,0x24153,0xe455b,0x16324,0x00000,0x16321, +0xe402b,0xe455c,0x16323,0xe4554,0x16766,0xe4559,0x24868,0xe4557, +0xe4a5d,0x24869,0x25569,0x00000,0x16765,0x16767,0x16768,0xe4558, +0x24f37,0xe4a5e,0x24f36,0x16b6e,0x00000,0x16b6f,0xe4a5b,0x24f38, +0x25568,0x16b71,0x16f72,0x00000,0x16b70,0x00000,0xe667a,0x00000, +0x17327,0x2556a,0x16f74,0x16f73,0x2556b,0x2556e,0x2556c,0x2556d, +0x16f75,0xe4f6b,0x1732c,0x1732a,0xe5365,0xe5366,0x17329,0x25b69, +0xe5364,0x1732b,0xe5362,0xe5363,0x25b68,0x26057,0x00000,0x25b6a, +0x17328,0x25b6b,0x2605a,0x26058,0x26059,0x2605e,0x17775,0x2605d, +0x26060,0x2605f,0x2605c,0x2605b,0x00000,0x1762a,0xe5962,0x00000, +0xe5961,0xe5966,0x26458,0xe5965,0x26457,0x17774,0x17772,0x17773, +0xe5963,0x26456,0xe6671,0x2677c,0xe5b69,0x1794f,0x00000,0x2677b, +0x2677a,0x17950,0x00000,0x26a66,0x26a65,0xe5d58,0x26a63,0xe5e7e, +0x26a62,0x17a53,0x17a52,0x26a67,0x26e45,0x17c25,0x26c65,0x17b43, +0x26c64,0x26a64,0xe5f78,0x26e46,0x17c50,0xe612a,0x17d2e,0x27148, +0x00000,0x27221,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x1537b,0x23a34, +0x26061,0x1537c,0xe455f,0x00000,0x24f3a,0x24f39,0x25b6c,0x00000, +0xe5368,0x26063,0xe5730,0x26062,0xe5967,0x17776,0x2677d,0x2677e, +0x17a54,0xe5f21,0xe6060,0x27222,0x1586b,0x16326,0x16325,0x2486a, +0x2486c,0x1676a,0x2486b,0x16769,0x1676b,0x2486d,0xe4a63,0xe4a62, +0xe4a66,0x24f3c,0x24f3e,0x24f3d,0xe4a61,0x24f40,0xe4a60,0xe4a6c, +0xe4a64,0x16b72,0x24f3f,0x24f3b,0xe4a6a,0x00000,0x00000,0x24f41, +0xe4f73,0x25575,0xe4f6d,0x25578,0x2557a,0x25570,0x25574,0x25571, +0x16f77,0x16f7a,0x16f7c,0x25572,0x25573,0x16f7b,0x25576,0x25579, +0x25577,0x16f7d,0xe4f6e,0x16f79,0x2556f,0x16f76,0xe4f72,0x16f78, +0xe4f74,0xe5370,0x1732e,0x25b72,0x25b70,0x25b6f,0xe5371,0x25b75, +0xe536b,0x25b74,0x25b73,0xe536c,0x25b6e,0x1732d,0x25b6d,0xe536a, +0x25b71,0x1732f,0x00000,0xe5734,0x26066,0xe5737,0x2606a,0x26067, +0x26069,0x26068,0x26065,0x2606b,0x2606e,0x2606c,0x2606d,0x1762c, +0xe5733,0x1762b,0x26064,0x2606f,0x2645d,0x26460,0x26462,0x26461, +0xe596a,0x2645b,0x2645f,0x2645a,0xe596b,0x2645c,0x17777,0x26459, +0xe596d,0x2645e,0x00000,0x00000,0x2682d,0x26822,0x17951,0xe5b6f, +0xe5b6d,0x17952,0x26821,0x26826,0x2682c,0x26824,0x2682b,0xe5b6c, +0x26828,0xe5b6e,0x26827,0x2682a,0x26825,0x26823,0xe5b6b,0x26829, +0x00000,0x26a6e,0x26a6c,0x17a55,0x26a6b,0x26a71,0x26a6f,0xe5d5a, +0x17a56,0x26a6a,0x26a68,0x00000,0x26a69,0x17a58,0x26a6d,0x17a57, +0x26a70,0x26c66,0x26c6c,0xe5f24,0xe5f22,0x26c67,0x17b47,0x26c6d, +0x17b46,0x26c6b,0x26c6a,0x17b45,0x26c69,0x17b44,0x26c68,0x00000, +0x26e4c,0x26e4e,0x26e4d,0x00000,0x26e4a,0x17c27,0x26e47,0x26e4b, +0x26e50,0xe5f79,0x26e4f,0x26e48,0x26e49,0x17c26,0x26f60,0x17c53, +0xe6062,0x26f61,0x17c51,0x17c52,0xe6061,0x00000,0x27061,0x17c75, +0x27165,0xe6172,0x17d37,0xe6173,0x27223,0x17d38,0x27224,0x27225, +0x27233,0x27232,0x17d47,0x2723b,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x1586c,0xe402f,0x00000,0x2486f,0x00000,0x2486e,0x00000,0x16b73, +0x16b74,0x24f42,0x00000,0x2557b,0x25b78,0xe4f77,0xe4f76,0x16f7e, +0x17330,0x25b76,0x00000,0x25b79,0x17331,0xe573a,0x26070,0x25b77, +0x26463,0x17778,0x2682e,0x00000,0xe5d61,0x00000,0x26a74,0x26a72, +0xe5d60,0xe5d5e,0x26a73,0x00000,0x00000,0x26c6e,0xe5f25,0x17b48, +0x26e51,0x17c56,0x17c28,0x17c54,0x17c55,0x27062,0x17d2f,0xe6174, +0x1586d,0xe6334,0xe4a6e,0x00000,0x26464,0xe5f7b,0xe6063,0x2334c, +0xe4032,0x1676c,0xe4561,0x24f43,0xe4a6f,0xe4a73,0x16b75,0x24f44, +0xe4a71,0xe4a70,0xe4a72,0x2557d,0x2557c,0x17333,0x17021,0x17022, +0x00000,0x25622,0x25621,0x2557e,0xe4f79,0xe5375,0x25b7a,0x25b7d, +0xe5374,0x25b7c,0x25b7b,0x17332,0x26074,0x26072,0x26071,0x00000, +0xe573b,0x26073,0xe573c,0x17779,0x26466,0x26467,0x1777a,0xe596f, +0x26465,0xe5b71,0x26830,0x2682f,0x26832,0x17953,0x26831,0x00000, +0x26a75,0x26a77,0x26a76,0x00000,0xe5f27,0x26c6f,0x26c72,0x26c70, +0x26c71,0x26e52,0x17c29,0x00000,0x00000,0xe6672,0x26f62,0x26f63, +0x26f64,0xe612c,0x17c76,0x17d30,0x27226,0x1586e,0xe4a75,0x17023, +0x17334,0x26468,0xe5d62,0x26e53,0xe612e,0xe6433,0x27166,0x2334d, +0xe6228,0x17d48,0x1586f,0x25b7e,0xe573e,0x26469,0x00000,0x26833, +0xe5d63,0x00000,0x26c73,0x26e54,0x15870,0xe4562,0x24f45,0x24f46, +0xe4a78,0x16b76,0x16b77,0x25624,0x17025,0x17024,0x25623,0x00000, +0x26075,0xe573f,0x2646a,0x2646c,0x2646b,0x1777d,0x1777c,0x1777b, +0xe5d64,0x17b4a,0x26c74,0xe5f28,0x17b49,0x26e56,0x26e55,0xe612f, +0x17c77,0x27063,0x15e23,0x24870,0x00000,0xe4563,0x00000,0x24f49, +0x24f47,0x24f48,0x00000,0xe4f7e,0x2562d,0x00000,0x25628,0x25625, +0x2562c,0xe4f7c,0x00000,0xe4f7b,0x2562e,0x00000,0x00000,0x17027, +0x2562b,0x25627,0xe4f7d,0x00000,0x25626,0x2562a,0x25629,0x17026, +0x00000,0x00000,0x25c2b,0x25c26,0x25c24,0x25c2d,0x25c25,0x00000, +0x25c21,0x00000,0x25c27,0xe5378,0xe537a,0x25c22,0x2607e,0x25c23, +0x25c2e,0xe5423,0x00000,0xe537c,0xe5421,0x00000,0xe5425,0xe537d, +0x25c2a,0x17335,0x25c29,0x25c28,0xe5379,0x25c2c,0x00000,0x00000, +0xe6673,0xe5744,0x26076,0x26079,0x00000,0xe5745,0x26078,0xe5740, +0x26122,0x2607b,0x26121,0xe5742,0x2607d,0x2607c,0x2607a,0x00000, +0x26077,0x00000,0x1762f,0x1762e,0x00000,0x17630,0x1762d,0x26123, +0x00000,0x00000,0x00000,0x00000,0x00000,0x26472,0x26475,0x00000, +0x26473,0x26477,0x00000,0xe5974,0x00000,0x26478,0x00000,0x26470, +0x17824,0x26471,0xe5973,0x2646f,0x26476,0xe5b74,0x2646e,0x2646d, +0x17823,0x17821,0x1777e,0xe5976,0xe5975,0xe5743,0x00000,0x00000, +0x00000,0x00000,0xe5971,0x26474,0x2683c,0x26842,0x17956,0x2683d, +0x00000,0x26840,0x26844,0x17957,0x2683f,0x00000,0x26837,0xe5b75, +0x26836,0x26843,0x2683a,0xe5b77,0x26838,0x26841,0x26839,0x17955, +0x17954,0xe5b79,0x26834,0x26835,0x2683e,0x00000,0xe5b7a,0x00000, +0x2683b,0x00000,0x00000,0x00000,0x00000,0x00000,0xe5d6f,0x26a7a, +0x26a7d,0xe5d71,0x00000,0xe5d67,0xe5d69,0x17822,0xe5d6a,0xe5d74, +0xe5d75,0x00000,0xe5d6e,0x00000,0xe5d68,0x26a7b,0x26b23,0x26b21, +0x26a79,0x26b26,0xe5d66,0x26a78,0xe5d76,0x17a5a,0x26b22,0x00000, +0xe5d73,0x00000,0x26a7c,0x17a59,0x26b25,0xe5d72,0x00000,0x26b24, +0x00000,0x00000,0x00000,0xe5d70,0x26c77,0x26c76,0x00000,0xe5f2c, +0x00000,0x26c7d,0x00000,0x26c79,0x26c7c,0x17b4c,0x00000,0xe642f, +0x26c7a,0x26c7b,0x00000,0x26c75,0x26c78,0x17b4b,0xe5f2a,0x00000, +0x00000,0x17c2b,0x26e61,0x26e5c,0x26e60,0xe6025,0x26e63,0x26e5f, +0xe5f7e,0x26e5b,0xe6023,0x17c2d,0x26e5e,0x26e62,0x17c2c,0x26e59, +0x26a7e,0x26e5d,0x00000,0x00000,0x26e5a,0xe6022,0x26e57,0x00000, +0x26e58,0x17c2a,0x26f68,0x26f6a,0x26f6d,0x26f69,0x26f6e,0xe6065, +0x26f67,0xe6066,0x26f65,0xe6068,0x17c57,0x26f6b,0x17c59,0x17c58, +0x26f66,0x26f6c,0x00000,0x00000,0x00000,0xe6132,0x27068,0x17c78, +0x27069,0xe6133,0x27067,0x27064,0x00000,0xe6134,0x27066,0x27065, +0x27149,0x00000,0x00000,0x00000,0xe6159,0x2714b,0x2714a,0xe615b, +0x00000,0x27169,0x00000,0x27168,0x27167,0x2716a,0xe6175,0x17d40, +0x17d41,0x27238,0x2723c,0xe6241,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x15e24,0x24154,0x24873, +0xe4564,0x1676d,0x24871,0xe4566,0xe2f42,0x24872,0xe4568,0xe4567, +0x00000,0x24f4a,0x24f4b,0x16b7a,0x16b78,0x24f4c,0x16b79,0x25633, +0xe5027,0x25636,0x25630,0x25637,0x2562f,0x25631,0xe502a,0x25632, +0x25635,0xe5024,0xe502b,0x1702a,0x2563a,0x25639,0x17028,0x25634, +0x25638,0x17029,0xe542d,0x00000,0xe5025,0xe5022,0x00000,0xe542a, +0x25c38,0x00000,0x1733a,0xe542c,0x25c33,0x17336,0xe5436,0x25c30, +0x25c36,0x25c39,0xe5433,0x1733b,0x00000,0x25c35,0x25c32,0x25c3a, +0x25c31,0xe5437,0x25c37,0x17337,0xe5429,0x25c2f,0x17338,0xe5435, +0x17339,0x25c34,0xe5432,0x00000,0x00000,0x26135,0x26128,0x26129, +0x2612c,0x2612a,0x00000,0x26124,0x00000,0xe574d,0x26127,0x26131, +0x2612b,0xe5748,0x00000,0x17631,0x00000,0x26133,0x26130,0x17632, +0x26132,0x26125,0x2612e,0x2612f,0xe574a,0x2612d,0x00000,0x00000, +0x00000,0xe6675,0x2647c,0x2647e,0x26523,0xe5979,0xe597b,0x2647b, +0xe597d,0x17825,0x26525,0x2647a,0x26526,0xe597e,0x26522,0x26524, +0x26528,0x26521,0x26529,0x2647d,0x26479,0x17826,0xe5a22,0x26527, +0x17827,0x17959,0x00000,0xe597a,0x00000,0x00000,0xe5b7d,0x26126, +0x2685e,0x26855,0x1795b,0x26851,0x1795c,0xe5c27,0xe5c22,0x2685a, +0x26854,0x2684a,0x1795a,0x26857,0x26852,0x26853,0xe5c25,0x26845, +0x2684c,0x2685b,0xe5b7e,0x26858,0x00000,0x26850,0xe5c26,0x2685c, +0x2684b,0x26846,0x26859,0xe5c24,0x26848,0x26856,0x2684d,0x2685d, +0x26849,0x17958,0x26847,0x2684e,0x2684f,0x00000,0x00000,0x00000, +0x26b2d,0xe5c23,0x26b2b,0x00000,0x26b30,0xe5d79,0x26b3c,0x26b33, +0x26b2c,0x26b28,0x26b35,0x26b2e,0x26b31,0x26b2a,0x26b38,0x26b27, +0x26b2f,0x26b34,0x26b36,0x26b39,0x26b29,0xe5d7a,0x26b3d,0x26b3e, +0x26b37,0x26b3b,0x26b32,0x00000,0x26d2f,0x26d32,0xe5f35,0x17b4d, +0xe5f31,0x26d31,0x26d36,0x26d34,0x17b4e,0x26d2b,0x26d21,0x26c7e, +0x17b50,0x26d2d,0x26d2e,0x26d2a,0x26d22,0xe5f32,0x26d27,0x26b3a, +0x00000,0x26d23,0x17b4f,0x26d29,0xe5f36,0x26d28,0x00000,0x26d24, +0x26d30,0x00000,0x26d25,0x26e68,0x26d33,0x26d35,0x26d2c,0x26d26, +0x26e69,0x26e6b,0x26e65,0x17c2e,0x00000,0x26e72,0x26e70,0x17c2f, +0x26e6f,0x26e6e,0x26e67,0x26e64,0x26e6a,0x26e73,0x26e66,0x26e6c, +0x00000,0x26f77,0x26f7c,0x26f72,0x26f75,0x17c5a,0x26f79,0x00000, +0x27022,0x26e6d,0x00000,0x26f73,0x26f7d,0x27023,0x26f78,0x26f71, +0x26f7b,0x00000,0x26f7a,0x27021,0x26f7e,0x26e71,0x26f76,0x26f70, +0x26f74,0x17c79,0x17c7a,0x26f6f,0xe606c,0x27074,0x2706b,0x27073, +0x27070,0x27071,0x2706a,0x2706d,0x27075,0x2706f,0x2706e,0x2706c, +0xe6135,0x27072,0x00000,0x2714c,0x00000,0x2714d,0xe615d,0x2714f, +0x2714e,0x27151,0x27150,0x2716c,0x2716b,0x27227,0xe6229,0x27228, +0xe6230,0x27234,0x17d45,0x17d49,0xe6238,0x2723d,0x17d4a,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x15e25,0x00000,0x00000, +0x00000,0x17a5b,0x26d37,0xe5f37,0x17c7b,0x17c7c,0x00000,0x15e26, +0x24874,0xe4569,0x1676e,0x2563b,0xe502c,0xe5439,0x25c3c,0x25c3d, +0x25c3b,0x26137,0x26136,0x17633,0x2652b,0x26138,0x2652a,0x00000, +0xe5a24,0x26860,0x1795d,0x1795f,0x2685f,0xe5c29,0x00000,0x1795e, +0xe5e21,0x26b3f,0x26b41,0x26b40,0x26d38,0x17b51,0xe5f3a,0x17c5b, +0x27076,0x27152,0xe6231,0xe623f,0x27241,0x15e27,0xe2547,0x24f4d, +0x00000,0x1702b,0xe502f,0xe502e,0xe543a,0x25c3f,0x25c3e,0xe5750, +0x26139,0xe5a26,0xe5a25,0x00000,0x17960,0x17a5c,0x26e74,0x27239, +0x00000,0x00000,0x00000,0x15e28,0x16b7b,0xe4b22,0x1702c,0x00000, +0x26861,0xe5e22,0x27024,0x16327,0xe396a,0xe543c,0xe543b,0x00000, +0x2613a,0x00000,0xe5a28,0x00000,0x17d31,0x16328,0x1702d,0x17634, +0x27025,0x16329,0xe396b,0x2563c,0x1733d,0x25c40,0x25c41,0xe543d, +0x1733c,0x00000,0x2613b,0x17638,0x17636,0x17637,0x17635,0x2652c, +0x17828,0x00000,0x00000,0xe5c2a,0x26b43,0x26b42,0x26b45,0x26b44, +0x17a5d,0x00000,0x00000,0x26d39,0x00000,0x26d3b,0x26d3a,0x17b52, +0x26e75,0xe6029,0x27026,0x27027,0x17c5c,0x27153,0x2716d,0x17d42, +0x00000,0x24155,0x25c42,0x2613c,0x26862,0x24875,0xe2772,0x2613d, +0x2652e,0x2652d,0xe5a29,0xe5c2d,0xe5c2e,0xe5f3c,0x27028,0x17c7d, +0xe615f,0x27154,0x2716e,0x00000,0x00000,0x00000,0x1676f,0x2563d, +0x2563e,0x00000,0x25c43,0x16770,0xe456a,0x17829,0x2652f,0xe5c30, +0x26d3d,0x17b53,0x26d3e,0x26d3c,0x27029,0xe6160,0x27077,0x00000, +0x16771,0x00000,0x26140,0x2613f,0x2613e,0x26530,0xe5a2b,0xe5a2a, +0x26534,0x26533,0x26532,0x26531,0x1782a,0x26863,0x26b47,0x17a5e, +0x26b46,0x26d3f,0x26e78,0x26e77,0x17c30,0x26e76,0x2702c,0x2702b, +0x2702a,0xe606d,0x00000,0x16b7c,0x00000,0x25c44,0x17639,0x00000, +0x26864,0x26865,0x26e79,0x2702d,0x00000,0xe613b,0x27078,0x27155, +0x27229,0x27243,0x16b7d,0x1763a,0x26535,0x26866,0x26d40,0x2702e, +0xe2370,0x00000,0x1702f,0xe543e,0x26141,0x26536,0x26867,0x26868, +0x26869,0x26b4c,0xe5e24,0x26b48,0x17b54,0x26b4b,0x26b4a,0x17a5f, +0x26b49,0x17a61,0x00000,0x17a60,0x26d42,0x26d41,0x17b55,0x17b56, +0x00000,0xe5f3e,0x17c32,0x26e7a,0x17c31,0x00000,0x27031,0x27032, +0x27030,0x2702f,0x17d21,0x00000,0x27079,0x2707a,0x2707b,0x17c7e, +0x27156,0x27159,0x27158,0x27157,0xe6233,0x00000,0x27242,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x1733e,0xe5755,0x00000, +0x17832,0x26b4d,0x26d43,0xe602b,0x17c33,0x26e7b,0x00000,0xe6242, +0x27244,0x00000,0x00000,0x00000,0x1733f,0xe5e47,0x00000,0x00000, +0x26142,0xe5f3f,0x26e7c,0xe6161,0x2716f,0xe6177}; + +static const int ucs_i_cns11643_table_min = 0x4d00; +static const int ucs_i_cns11643_table_max = 0x4d00 + (sizeof (ucs_i_cns11643_table) / sizeof (unsigned int)); + +static const unsigned int ucs_r_cns11643_table[] = { +/* 0xfe00 */ +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x1212b,0x12136,0x12138,0x00000,0x00000,0x12140,0x12141,0x12144, +0x12145,0x12148,0x12149,0x1214c,0x1214d,0x12150,0x12151,0x12154, +0x12155,0x12158,0x12159,0x1215c,0x1215d,0x00000,0x00000,0x00000, +0x00000,0x12227,0x12228,0x1222b,0x1222c,0x12229,0x1222a,0x00000, +0x1212e,0x1212f,0x12130,0x00000,0x12132,0x12133,0x12134,0x12135, +0x00000,0x1215e,0x1215f,0x12160,0x12161,0x12162,0x12163,0x1222d, +0x1222e,0x1222f,0x1223f,0x12240,0x12241,0x12243,0x12242,0x00000, +0x12262,0x1226c,0x1226d,0x1226e,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +/* 0xff00 */ +0x00000,0x1212a,0x00000,0x1216c,0x12263,0x12268,0x1216d,0x00000, +0x1213e,0x1213f,0x1216e,0x12230,0x12122,0x12231,0x12125,0x1225f, +0x12421,0x12422,0x12423,0x12424,0x12425,0x12426,0x12427,0x12428, +0x12429,0x1242a,0x12128,0x12127,0x12236,0x12238,0x12237,0x12129, +0x12269,0x12441,0x12442,0x12443,0x12444,0x12445,0x12446,0x12447, +0x12448,0x12449,0x1244a,0x1244b,0x1244c,0x1244d,0x1244e,0x1244f, +0x12450,0x12451,0x12452,0x12453,0x12454,0x12455,0x12456,0x12457, +0x12458,0x12459,0x1245a,0x00000,0x12260,0x00000,0x00000,0x12225, +0x00000,0x1245b,0x1245c,0x1245d,0x1245e,0x1245f,0x12460,0x12461, +0x12462,0x12463,0x12464,0x12465,0x12466,0x12467,0x12468,0x12469, +0x1246a,0x1246b,0x1246c,0x1246d,0x1246e,0x1246f,0x12470,0x12471, +0x12472,0x12473,0x12474,0x12142,0x1225e,0x12143,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000,0x00000, +0x12266,0x12267,0x00000,0x00000,0x00000,0x12264}; + +static const int ucs_r_cns11643_table_min = 0xfe00; +static const int ucs_r_cns11643_table_max = 0xfe00 + (sizeof (ucs_r_cns11643_table) / sizeof (unsigned int)); + + +#endif /* UNICODE_TABLE_CNS11643_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp1251.h b/ext/mbstring/libmbfl/filters/unicode_table_cp1251.h new file mode 100644 index 0000000..99ec985 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_cp1251.h @@ -0,0 +1,51 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The authors of this file: PHP3 internationalization team + * You can contact the primary author 金本 茂 <sgk@happysize.co.jp>. + * + */ + +#ifndef UNICODE_TABLE_CP1251_H + +/* cp1251 to Unicode table */ +static const unsigned short cp1251_ucs_table[] = { + 0x0402, 0x0403, 0x201a, 0x0453, 0x201e, 0x2026, 0x2020, 0x2021, + 0x20ac, 0x2030, 0x0409, 0x2039, 0x040a, 0x040c, 0x040b, 0x040f, + 0x0452, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0x003f, 0x2122, 0x0459, 0x203a, 0x045a, 0x045c, 0x045b, 0x045f, + 0x00a0, 0x040e, 0x045e, 0x0408, 0x00a4, 0x0490, 0x00a6, 0x00a7, + 0x0401, 0x00a9, 0x0404, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x0407, + 0x00b0, 0x00b1, 0x0406, 0x0456, 0x0491, 0x00b5, 0x00b6, 0x00b7, + 0x0451, 0x2116, 0x0454, 0x00bb, 0x0458, 0x0405, 0x0455, 0x0457, + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f +}; +static const int cp1251_ucs_table_min = 0x80; +static const int cp1251_ucs_table_len = (sizeof (cp1251_ucs_table) / sizeof (unsigned short)); +static const int cp1251_ucs_table_max = 0x80 + (sizeof (cp1251_ucs_table) / sizeof (unsigned short)); + +#endif /* UNICODE_TABLE_CP1251_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp1252.h b/ext/mbstring/libmbfl/filters/unicode_table_cp1252.h new file mode 100644 index 0000000..8a33920 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_cp1252.h @@ -0,0 +1,40 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The authors of this file: PHP3 internationalization team + * You can contact the primary author 金本 茂 <sgk@happysize.co.jp>. + * + */ + +#ifndef UNICODE_TABLE_CP1252_H +#define UNICODE_TABLE_CP1252_H + +/* Windows CodePage 1252 - it's the same as iso-8859-1 but + * defines extra symbols in the range 0x80-0x9f. + * This table differs from the rest of the unicode tables below + * as it only covers this range, while the rest cover 0xa0 onwards */ + +static const unsigned short cp1252_ucs_table[] = { + 0x20ac,0xfffe,0x201a,0x0192,0x201e,0x2026,0x2020,0x2021, + 0x02c6,0x2030,0x0160,0x2039,0x0152,0xfffe,0x017d,0xfffe, + 0xfffe,0x2018,0x2019,0x201c,0x201d,0x2022,0x2013,0x2014, + 0x02dc,0x2122,0x0161,0x203a,0x0153,0xfffe,0x017e,0x0178 +}; +#endif /* UNICODE_TABLE_CP1252_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp1254.h b/ext/mbstring/libmbfl/filters/unicode_table_cp1254.h new file mode 100644 index 0000000..644053c --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_cp1254.h @@ -0,0 +1,51 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The authors of this file: PHP3 internationalization team + * You can contact the primary author 金本 茂 <sgk@happysize.co.jp>. + * + */ + +#ifndef UNICODE_TABLE_CP1254_H + +/* cp1254 to Unicode table */ +static const unsigned short cp1254_ucs_table[] = { + 0x20ac, 0xfffe, 0x201a, 0x0192, 0x201e, 0x2026, 0x2020, 0x2021, + 0x02c6, 0x2030, 0x0160, 0x2039, 0x0152, 0xfffe, 0xfffe, 0xfffe, + 0xfffe, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0x02dc, 0x2122, 0x0161, 0x203a, 0x0153, 0xfffe, 0xfffe, 0x0178, + 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff +}; +static const int cp1254_ucs_table_min = 0x80; +static const int cp1254_ucs_table_len = (sizeof (cp1254_ucs_table) / sizeof (unsigned short)); +static const int cp1254_ucs_table_max = 0x80 + (sizeof (cp1254_ucs_table) / sizeof (unsigned short)); + +#endif /* UNICODE_TABLE_CP1254_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp850.h b/ext/mbstring/libmbfl/filters/unicode_table_cp850.h new file mode 100644 index 0000000..6c60ae0 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_cp850.h @@ -0,0 +1,52 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Den V. Tsopa <tdv@edisoft.ru> + * Adaption for CP850: D. Giffeler <dg@artegic.de> + * + */ + +#ifndef UNICODE_TABLE_CP850_H +#define UNICODE_TABLE_CP850_H + +/* cp850_DOS to Unicode table */ +static const unsigned short cp850_ucs_table[] = { + 0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7 +, 0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5 +, 0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9 +, 0x00ff, 0x00d6, 0x00dc, 0x00f8, 0x00a3, 0x00d8, 0x00d7, 0x0192 +, 0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba +, 0x00bf, 0x00ae, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb +, 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x00c1, 0x00c2, 0x00c0 +, 0x00a9, 0x2563, 0x2551, 0x2557, 0x255d, 0x00a2, 0x00a5, 0x2510 +, 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x00e3, 0x00c3 +, 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x00a4 +, 0x00f0, 0x00d0, 0x00ca, 0x00cb, 0x00c8, 0x0131, 0x00cd, 0x00ce +, 0x00cf, 0x2518, 0x250c, 0x2588, 0x2584, 0x00a6, 0x00cc, 0x2580 +, 0x00d3, 0x00df, 0x00d4, 0x00d2, 0x00f5, 0x00d5, 0x00b5, 0x00fe +, 0x00de, 0x00da, 0x00db, 0x00d9, 0x00fd, 0x00dd, 0x00af, 0x00b4 +, 0x00ad, 0x00b1, 0x2017, 0x00be, 0x00b6, 0x00a7, 0x00f7, 0x00b8 +, 0x00b0, 0x00a8, 0x00b7, 0x00b9, 0x00b3, 0x00b2, 0x25a0, 0x00a0 +}; +static const int cp850_ucs_table_min = 0x80; +static const int cp850_ucs_table_len = (sizeof (cp850_ucs_table) / sizeof (unsigned short)); +static const int cp850_ucs_table_max = 0x80 + (sizeof (cp850_ucs_table) / sizeof (unsigned short)); + +#endif /* UNICODE_TABLE_CP850_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp866.h b/ext/mbstring/libmbfl/filters/unicode_table_cp866.h new file mode 100644 index 0000000..5674932 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_cp866.h @@ -0,0 +1,51 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The original author of this file: Den V. Tsopa <tdv@edisoft.ru> + * + */ + +#ifndef UNICODE_TABLE_CP866_H +#define UNICODE_TABLE_CP866_H + +/* cp866_DOSCyrillicRussian to Unicode table */ +static const unsigned short cp866_ucs_table[] = { + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, + 0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510, + 0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f, + 0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567, + 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b, + 0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, + 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040e, 0x045e, + 0x00b0, 0x2219, 0x00b7, 0x221a, 0x2116, 0x00a4, 0x25a0, 0x00a0 +}; +static const int cp866_ucs_table_min = 0x80; +static const int cp866_ucs_table_len = (sizeof (cp866_ucs_table) / sizeof (unsigned short)); +static const int cp866_ucs_table_max = 0x80 + (sizeof (cp866_ucs_table) / sizeof (unsigned short)); + +#endif /* UNICODE_TABLE_CP866_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp932_ext.h b/ext/mbstring/libmbfl/filters/unicode_table_cp932_ext.h new file mode 100644 index 0000000..b685713 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_cp932_ext.h @@ -0,0 +1,187 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: Rui Hirokawa <hirokawa@php.net> + * + */ + +#ifndef UNICODE_TABLE_CP932_EXT_H +#define UNICODE_TABLE_CP932_EXT_H + +#ifdef UNICODE_TABLE_CP932_DEF + +const unsigned short cp932ext1_ucs_table[] = { + /* ku 13 */ + 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467, + 0x2468,0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F, + 0x2470,0x2471,0x2472,0x2473,0x2160,0x2161,0x2162,0x2163, + 0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,0x0000,0x3349, + 0x3314,0x3322,0x334D,0x3318,0x3327,0x3303,0x3336,0x3351, + 0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,0x333B,0x339C, + 0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x337B,0x301D, + 0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7, + 0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x2252, + 0x2261,0x222B,0x222E,0x2211,0x221A,0x22A5,0x2220,0x221F, + 0x22BF,0x2235,0x2229,0x222A,0x0000,0x0000 +}; +const int cp932ext1_ucs_table_min = (13 - 1)*94; +const int cp932ext1_ucs_table_max = (13 - 1)*94 + (sizeof (cp932ext1_ucs_table) / sizeof (unsigned short)); + +const unsigned short cp932ext2_ucs_table[] = { + /* ku 89 */ + 0x7E8A,0x891C,0x9348,0x9288,0x84DC,0x4FC9,0x70BB,0x6631, + 0x68C8,0x92F9,0x66FB,0x5F45,0x4E28,0x4EE1,0x4EFC,0x4F00, + 0x4F03,0x4F39,0x4F56,0x4F92,0x4F8A,0x4F9A,0x4F94,0x4FCD, + 0x5040,0x5022,0x4FFF,0x501E,0x5046,0x5070,0x5042,0x5094, + 0x50F4,0x50D8,0x514A,0x5164,0x519D,0x51BE,0x51EC,0x5215, + 0x529C,0x52A6,0x52C0,0x52DB,0x5300,0x5307,0x5324,0x5372, + 0x5393,0x53B2,0x53DD,0xFA0E,0x549C,0x548A,0x54A9,0x54FF, + 0x5586,0x5759,0x5765,0x57AC,0x57C8,0x57C7,0xFA0F,0xFA10, + 0x589E,0x58B2,0x590B,0x5953,0x595B,0x595D,0x5963,0x59A4, + 0x59BA,0x5B56,0x5BC0,0x752F,0x5BD8,0x5BEC,0x5C1E,0x5CA6, + 0x5CBA,0x5CF5,0x5D27,0x5D53,0xFA11,0x5D42,0x5D6D,0x5DB8, + 0x5DB9,0x5DD0,0x5F21,0x5F34,0x5F67,0x5FB7, + + /* ku 90 */ + 0x5FDE,0x605D,0x6085,0x608A,0x60DE,0x60D5,0x6120,0x60F2, + 0x6111,0x6137,0x6130,0x6198,0x6213,0x62A6,0x63F5,0x6460, + 0x649D,0x64CE,0x654E,0x6600,0x6615,0x663B,0x6609,0x662E, + 0x661E,0x6624,0x6665,0x6657,0x6659,0xFA12,0x6673,0x6699, + 0x66A0,0x66B2,0x66BF,0x66FA,0x670E,0xF929,0x6766,0x67BB, + 0x6852,0x67C0,0x6801,0x6844,0x68CF,0xFA13,0x6968,0xFA14, + 0x6998,0x69E2,0x6A30,0x6A6B,0x6A46,0x6A73,0x6A7E,0x6AE2, + 0x6AE4,0x6BD6,0x6C3F,0x6C5C,0x6C86,0x6C6F,0x6CDA,0x6D04, + 0x6D87,0x6D6F,0x6D96,0x6DAC,0x6DCF,0x6DF8,0x6DF2,0x6DFC, + 0x6E39,0x6E5C,0x6E27,0x6E3C,0x6EBF,0x6F88,0x6FB5,0x6FF5, + 0x7005,0x7007,0x7028,0x7085,0x70AB,0x710F,0x7104,0x715C, + 0x7146,0x7147,0xFA15,0x71C1,0x71FE,0x72B1, + + /* ku 91 */ + 0x72BE,0x7324,0xFA16,0x7377,0x73BD,0x73C9,0x73D6,0x73E3, + 0x73D2,0x7407,0x73F5,0x7426,0x742A,0x7429,0x742E,0x7462, + 0x7489,0x749F,0x7501,0x756F,0x7682,0x769C,0x769E,0x769B, + 0x76A6,0xFA17,0x7746,0x52AF,0x7821,0x784E,0x7864,0x787A, + 0x7930,0xFA18,0xFA19,0xFA1A,0x7994,0xFA1B,0x799B,0x7AD1, + 0x7AE7,0xFA1C,0x7AEB,0x7B9E,0xFA1D,0x7D48,0x7D5C,0x7DB7, + 0x7DA0,0x7DD6,0x7E52,0x7F47,0x7FA1,0xFA1E,0x8301,0x8362, + 0x837F,0x83C7,0x83F6,0x8448,0x84B4,0x8553,0x8559,0x856B, + 0xFA1F,0x85B0,0xFA20,0xFA21,0x8807,0x88F5,0x8A12,0x8A37, + 0x8A79,0x8AA7,0x8ABE,0x8ADF,0xFA22,0x8AF6,0x8B53,0x8B7F, + 0x8CF0,0x8CF4,0x8D12,0x8D76,0xFA23,0x8ECF,0xFA24,0xFA25, + 0x9067,0x90DE,0xFA26,0x9115,0x9127,0x91DA, + + /* ku 92 */ + 0x91D7,0x91DE,0x91ED,0x91EE,0x91E4,0x91E5,0x9206,0x9210, + 0x920A,0x923A,0x9240,0x923C,0x924E,0x9259,0x9251,0x9239, + 0x9267,0x92A7,0x9277,0x9278,0x92E7,0x92D7,0x92D9,0x92D0, + 0xFA27,0x92D5,0x92E0,0x92D3,0x9325,0x9321,0x92FB,0xFA28, + 0x931E,0x92FF,0x931D,0x9302,0x9370,0x9357,0x93A4,0x93C6, + 0x93DE,0x93F8,0x9431,0x9445,0x9448,0x9592,0xF9DC,0xFA29, + 0x969D,0x96AF,0x9733,0x973B,0x9743,0x974D,0x974F,0x9751, + 0x9755,0x9857,0x9865,0xFA2A,0xFA2B,0x9927,0xFA2C,0x999E, + 0x9A4E,0x9AD9,0x9ADC,0x9B75,0x9B72,0x9B8F,0x9BB1,0x9BBB, + 0x9C00,0x9D70,0x9D6B,0xFA2D,0x9E19,0x9ED1,0x0000,0x0000, + 0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177, + 0x2178,0x2179,0xFFE2,0xFFE4,0xFF07,0xFF02 +}; +const int cp932ext2_ucs_table_min = (89 - 1)*94; +const int cp932ext2_ucs_table_max = (89 - 1)*94 + (sizeof (cp932ext2_ucs_table) / sizeof (unsigned short)); + +const unsigned short cp932ext3_ucs_table[] = { + /* ku 115 */ + 0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177, + 0x2178,0x2179,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165, + 0x2166,0x2167,0x2168,0x2169,0xFFE2,0xFFE4,0xFF07,0xFF02, + 0x3231,0x2116,0x2121,0x2235,0x7E8A,0x891C,0x9348,0x9288, + 0x84DC,0x4FC9,0x70BB,0x6631,0x68C8,0x92F9,0x66FB,0x5F45, + 0x4E28,0x4EE1,0x4EFC,0x4F00,0x4F03,0x4F39,0x4F56,0x4F92, + 0x4F8A,0x4F9A,0x4F94,0x4FCD,0x5040,0x5022,0x4FFF,0x501E, + 0x5046,0x5070,0x5042,0x5094,0x50F4,0x50D8,0x514A,0x5164, + 0x519D,0x51BE,0x51EC,0x5215,0x529C,0x52A6,0x52C0,0x52DB, + 0x5300,0x5307,0x5324,0x5372,0x5393,0x53B2,0x53DD,0xFA0E, + 0x549C,0x548A,0x54A9,0x54FF,0x5586,0x5759,0x5765,0x57AC, + 0x57C8,0x57C7,0xFA0F,0xFA10,0x589E,0x58B2, + + /* ku 116 */ + 0x590B,0x5953,0x595B,0x595D,0x5963,0x59A4,0x59BA,0x5B56, + 0x5BC0,0x752F,0x5BD8,0x5BEC,0x5C1E,0x5CA6,0x5CBA,0x5CF5, + 0x5D27,0x5D53,0xFA11,0x5D42,0x5D6D,0x5DB8,0x5DB9,0x5DD0, + 0x5F21,0x5F34,0x5F67,0x5FB7,0x5FDE,0x605D,0x6085,0x608A, + 0x60DE,0x60D5,0x6120,0x60F2,0x6111,0x6137,0x6130,0x6198, + 0x6213,0x62A6,0x63F5,0x6460,0x649D,0x64CE,0x654E,0x6600, + 0x6615,0x663B,0x6609,0x662E,0x661E,0x6624,0x6665,0x6657, + 0x6659,0xFA12,0x6673,0x6699,0x66A0,0x66B2,0x66BF,0x66FA, + 0x670E,0xF929,0x6766,0x67BB,0x6852,0x67C0,0x6801,0x6844, + 0x68CF,0xFA13,0x6968,0xFA14,0x6998,0x69E2,0x6A30,0x6A6B, + 0x6A46,0x6A73,0x6A7E,0x6AE2,0x6AE4,0x6BD6,0x6C3F,0x6C5C, + 0x6C86,0x6C6F,0x6CDA,0x6D04,0x6D87,0x6D6F, + + /* ku 117 */ + 0x6D96,0x6DAC,0x6DCF,0x6DF8,0x6DF2,0x6DFC,0x6E39,0x6E5C, + 0x6E27,0x6E3C,0x6EBF,0x6F88,0x6FB5,0x6FF5,0x7005,0x7007, + 0x7028,0x7085,0x70AB,0x710F,0x7104,0x715C,0x7146,0x7147, + 0xFA15,0x71C1,0x71FE,0x72B1,0x72BE,0x7324,0xFA16,0x7377, + 0x73BD,0x73C9,0x73D6,0x73E3,0x73D2,0x7407,0x73F5,0x7426, + 0x742A,0x7429,0x742E,0x7462,0x7489,0x749F,0x7501,0x756F, + 0x7682,0x769C,0x769E,0x769B,0x76A6,0xFA17,0x7746,0x52AF, + 0x7821,0x784E,0x7864,0x787A,0x7930,0xFA18,0xFA19,0xFA1A, + 0x7994,0xFA1B,0x799B,0x7AD1,0x7AE7,0xFA1C,0x7AEB,0x7B9E, + 0xFA1D,0x7D48,0x7D5C,0x7DB7,0x7DA0,0x7DD6,0x7E52,0x7F47, + 0x7FA1,0xFA1E,0x8301,0x8362,0x837F,0x83C7,0x83F6,0x8448, + 0x84B4,0x8553,0x8559,0x856B,0xFA1F,0x85B0, + + /* ku 118 */ + 0xFA20,0xFA21,0x8807,0x88F5,0x8A12,0x8A37,0x8A79,0x8AA7, + 0x8ABE,0x8ADF,0xFA22,0x8AF6,0x8B53,0x8B7F,0x8CF0,0x8CF4, + 0x8D12,0x8D76,0xFA23,0x8ECF,0xFA24,0xFA25,0x9067,0x90DE, + 0xFA26,0x9115,0x9127,0x91DA,0x91D7,0x91DE,0x91ED,0x91EE, + 0x91E4,0x91E5,0x9206,0x9210,0x920A,0x923A,0x9240,0x923C, + 0x924E,0x9259,0x9251,0x9239,0x9267,0x92A7,0x9277,0x9278, + 0x92E7,0x92D7,0x92D9,0x92D0,0xFA27,0x92D5,0x92E0,0x92D3, + 0x9325,0x9321,0x92FB,0xFA28,0x931E,0x92FF,0x931D,0x9302, + 0x9370,0x9357,0x93A4,0x93C6,0x93DE,0x93F8,0x9431,0x9445, + 0x9448,0x9592,0xF9DC,0xFA29,0x969D,0x96AF,0x9733,0x973B, + 0x9743,0x974D,0x974F,0x9751,0x9755,0x9857,0x9865,0xFA2A, + 0xFA2B,0x9927,0xFA2C,0x999E,0x9A4E,0x9AD9, + + /* ku 119 */ + 0x9ADC,0x9B75,0x9B72,0x9B8F,0x9BB1,0x9BBB,0x9C00,0x9D70, + 0x9D6B,0xFA2D,0x9E19,0x9ED1 +}; +const int cp932ext3_ucs_table_min = (115 - 1)*94; +const int cp932ext3_ucs_table_max = (115 - 1)*94 + (sizeof (cp932ext3_ucs_table) / sizeof (unsigned short)); + +#else + +extern const unsigned short cp932ext1_ucs_table[]; +extern const unsigned short cp932ext2_ucs_table[]; +extern const unsigned short cp932ext3_ucs_table[]; + +extern const int cp932ext1_ucs_table_min; +extern const int cp932ext1_ucs_table_max; +extern const int cp932ext2_ucs_table_min; +extern const int cp932ext2_ucs_table_max; +extern const int cp932ext3_ucs_table_min; +extern const int cp932ext3_ucs_table_max; + +#endif + +#endif /* UNICODE_TABLE_CP932_EXT_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_cp936.h b/ext/mbstring/libmbfl/filters/unicode_table_cp936.h new file mode 100644 index 0000000..173c8f4 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_cp936.h @@ -0,0 +1,6552 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: Rui Hirokawa <hirokawa@php.net> + * + */ + +#ifndef UNICODE_TABLE_CP936_H +#define UNICODE_TABLE_CP936_H + +/* + * Unicode table + */ +#ifdef UNICODE_TABLE_CP936_DEF + +const unsigned short cp936_ucs_table[] = { +/* 0x8100 */ +0x4e02,0x4e04,0x4e05,0x4e06,0x4e0f,0x4e12,0x4e17,0x4e1f, +0x4e20,0x4e21,0x4e23,0x4e26,0x4e29,0x4e2e,0x4e2f,0x4e31, +0x4e33,0x4e35,0x4e37,0x4e3c,0x4e40,0x4e41,0x4e42,0x4e44, +0x4e46,0x4e4a,0x4e51,0x4e55,0x4e57,0x4e5a,0x4e5b,0x4e62, +0x4e63,0x4e64,0x4e65,0x4e67,0x4e68,0x4e6a,0x4e6b,0x4e6c, +0x4e6d,0x4e6e,0x4e6f,0x4e72,0x4e74,0x4e75,0x4e76,0x4e77, +0x4e78,0x4e79,0x4e7a,0x4e7b,0x4e7c,0x4e7d,0x4e7f,0x4e80, +0x4e81,0x4e82,0x4e83,0x4e84,0x4e85,0x4e87,0x4e8a,0x0000, +0x4e90,0x4e96,0x4e97,0x4e99,0x4e9c,0x4e9d,0x4e9e,0x4ea3, +0x4eaa,0x4eaf,0x4eb0,0x4eb1,0x4eb4,0x4eb6,0x4eb7,0x4eb8, +0x4eb9,0x4ebc,0x4ebd,0x4ebe,0x4ec8,0x4ecc,0x4ecf,0x4ed0, +0x4ed2,0x4eda,0x4edb,0x4edc,0x4ee0,0x4ee2,0x4ee6,0x4ee7, +0x4ee9,0x4eed,0x4eee,0x4eef,0x4ef1,0x4ef4,0x4ef8,0x4ef9, +0x4efa,0x4efc,0x4efe,0x4f00,0x4f02,0x4f03,0x4f04,0x4f05, +0x4f06,0x4f07,0x4f08,0x4f0b,0x4f0c,0x4f12,0x4f13,0x4f14, +0x4f15,0x4f16,0x4f1c,0x4f1d,0x4f21,0x4f23,0x4f28,0x4f29, +0x4f2c,0x4f2d,0x4f2e,0x4f31,0x4f33,0x4f35,0x4f37,0x4f39, +0x4f3b,0x4f3e,0x4f3f,0x4f40,0x4f41,0x4f42,0x4f44,0x4f45, +0x4f47,0x4f48,0x4f49,0x4f4a,0x4f4b,0x4f4c,0x4f52,0x4f54, +0x4f56,0x4f61,0x4f62,0x4f66,0x4f68,0x4f6a,0x4f6b,0x4f6d, +0x4f6e,0x4f71,0x4f72,0x4f75,0x4f77,0x4f78,0x4f79,0x4f7a, +0x4f7d,0x4f80,0x4f81,0x4f82,0x4f85,0x4f86,0x4f87,0x4f8a, +0x4f8c,0x4f8e,0x4f90,0x4f92,0x4f93,0x4f95,0x4f96,0x4f98, +0x4f99,0x4f9a,0x4f9c,0x4f9e,0x4f9f,0x4fa1,0x4fa2,0x0000, +/* 0x8200 */ +0x4fa4,0x4fab,0x4fad,0x4fb0,0x4fb1,0x4fb2,0x4fb3,0x4fb4, +0x4fb6,0x4fb7,0x4fb8,0x4fb9,0x4fba,0x4fbb,0x4fbc,0x4fbd, +0x4fbe,0x4fc0,0x4fc1,0x4fc2,0x4fc6,0x4fc7,0x4fc8,0x4fc9, +0x4fcb,0x4fcc,0x4fcd,0x4fd2,0x4fd3,0x4fd4,0x4fd5,0x4fd6, +0x4fd9,0x4fdb,0x4fe0,0x4fe2,0x4fe4,0x4fe5,0x4fe7,0x4feb, +0x4fec,0x4ff0,0x4ff2,0x4ff4,0x4ff5,0x4ff6,0x4ff7,0x4ff9, +0x4ffb,0x4ffc,0x4ffd,0x4fff,0x5000,0x5001,0x5002,0x5003, +0x5004,0x5005,0x5006,0x5007,0x5008,0x5009,0x500a,0x0000, +0x500b,0x500e,0x5010,0x5011,0x5013,0x5015,0x5016,0x5017, +0x501b,0x501d,0x501e,0x5020,0x5022,0x5023,0x5024,0x5027, +0x502b,0x502f,0x5030,0x5031,0x5032,0x5033,0x5034,0x5035, +0x5036,0x5037,0x5038,0x5039,0x503b,0x503d,0x503f,0x5040, +0x5041,0x5042,0x5044,0x5045,0x5046,0x5049,0x504a,0x504b, +0x504d,0x5050,0x5051,0x5052,0x5053,0x5054,0x5056,0x5057, +0x5058,0x5059,0x505b,0x505d,0x505e,0x505f,0x5060,0x5061, +0x5062,0x5063,0x5064,0x5066,0x5067,0x5068,0x5069,0x506a, +0x506b,0x506d,0x506e,0x506f,0x5070,0x5071,0x5072,0x5073, +0x5074,0x5075,0x5078,0x5079,0x507a,0x507c,0x507d,0x5081, +0x5082,0x5083,0x5084,0x5086,0x5087,0x5089,0x508a,0x508b, +0x508c,0x508e,0x508f,0x5090,0x5091,0x5092,0x5093,0x5094, +0x5095,0x5096,0x5097,0x5098,0x5099,0x509a,0x509b,0x509c, +0x509d,0x509e,0x509f,0x50a0,0x50a1,0x50a2,0x50a4,0x50a6, +0x50aa,0x50ab,0x50ad,0x50ae,0x50af,0x50b0,0x50b1,0x50b3, +0x50b4,0x50b5,0x50b6,0x50b7,0x50b8,0x50b9,0x50bc,0x0000, +/* 0x8300 */ +0x50bd,0x50be,0x50bf,0x50c0,0x50c1,0x50c2,0x50c3,0x50c4, +0x50c5,0x50c6,0x50c7,0x50c8,0x50c9,0x50ca,0x50cb,0x50cc, +0x50cd,0x50ce,0x50d0,0x50d1,0x50d2,0x50d3,0x50d4,0x50d5, +0x50d7,0x50d8,0x50d9,0x50db,0x50dc,0x50dd,0x50de,0x50df, +0x50e0,0x50e1,0x50e2,0x50e3,0x50e4,0x50e5,0x50e8,0x50e9, +0x50ea,0x50eb,0x50ef,0x50f0,0x50f1,0x50f2,0x50f4,0x50f6, +0x50f7,0x50f8,0x50f9,0x50fa,0x50fc,0x50fd,0x50fe,0x50ff, +0x5100,0x5101,0x5102,0x5103,0x5104,0x5105,0x5108,0x0000, +0x5109,0x510a,0x510c,0x510d,0x510e,0x510f,0x5110,0x5111, +0x5113,0x5114,0x5115,0x5116,0x5117,0x5118,0x5119,0x511a, +0x511b,0x511c,0x511d,0x511e,0x511f,0x5120,0x5122,0x5123, +0x5124,0x5125,0x5126,0x5127,0x5128,0x5129,0x512a,0x512b, +0x512c,0x512d,0x512e,0x512f,0x5130,0x5131,0x5132,0x5133, +0x5134,0x5135,0x5136,0x5137,0x5138,0x5139,0x513a,0x513b, +0x513c,0x513d,0x513e,0x5142,0x5147,0x514a,0x514c,0x514e, +0x514f,0x5150,0x5152,0x5153,0x5157,0x5158,0x5159,0x515b, +0x515d,0x515e,0x515f,0x5160,0x5161,0x5163,0x5164,0x5166, +0x5167,0x5169,0x516a,0x516f,0x5172,0x517a,0x517e,0x517f, +0x5183,0x5184,0x5186,0x5187,0x518a,0x518b,0x518e,0x518f, +0x5190,0x5191,0x5193,0x5194,0x5198,0x519a,0x519d,0x519e, +0x519f,0x51a1,0x51a3,0x51a6,0x51a7,0x51a8,0x51a9,0x51aa, +0x51ad,0x51ae,0x51b4,0x51b8,0x51b9,0x51ba,0x51be,0x51bf, +0x51c1,0x51c2,0x51c3,0x51c5,0x51c8,0x51ca,0x51cd,0x51ce, +0x51d0,0x51d2,0x51d3,0x51d4,0x51d5,0x51d6,0x51d7,0x0000, +/* 0x8400 */ +0x51d8,0x51d9,0x51da,0x51dc,0x51de,0x51df,0x51e2,0x51e3, +0x51e5,0x51e6,0x51e7,0x51e8,0x51e9,0x51ea,0x51ec,0x51ee, +0x51f1,0x51f2,0x51f4,0x51f7,0x51fe,0x5204,0x5205,0x5209, +0x520b,0x520c,0x520f,0x5210,0x5213,0x5214,0x5215,0x521c, +0x521e,0x521f,0x5221,0x5222,0x5223,0x5225,0x5226,0x5227, +0x522a,0x522c,0x522f,0x5231,0x5232,0x5234,0x5235,0x523c, +0x523e,0x5244,0x5245,0x5246,0x5247,0x5248,0x5249,0x524b, +0x524e,0x524f,0x5252,0x5253,0x5255,0x5257,0x5258,0x0000, +0x5259,0x525a,0x525b,0x525d,0x525f,0x5260,0x5262,0x5263, +0x5264,0x5266,0x5268,0x526b,0x526c,0x526d,0x526e,0x5270, +0x5271,0x5273,0x5274,0x5275,0x5276,0x5277,0x5278,0x5279, +0x527a,0x527b,0x527c,0x527e,0x5280,0x5283,0x5284,0x5285, +0x5286,0x5287,0x5289,0x528a,0x528b,0x528c,0x528d,0x528e, +0x528f,0x5291,0x5292,0x5294,0x5295,0x5296,0x5297,0x5298, +0x5299,0x529a,0x529c,0x52a4,0x52a5,0x52a6,0x52a7,0x52ae, +0x52af,0x52b0,0x52b4,0x52b5,0x52b6,0x52b7,0x52b8,0x52b9, +0x52ba,0x52bb,0x52bc,0x52bd,0x52c0,0x52c1,0x52c2,0x52c4, +0x52c5,0x52c6,0x52c8,0x52ca,0x52cc,0x52cd,0x52ce,0x52cf, +0x52d1,0x52d3,0x52d4,0x52d5,0x52d7,0x52d9,0x52da,0x52db, +0x52dc,0x52dd,0x52de,0x52e0,0x52e1,0x52e2,0x52e3,0x52e5, +0x52e6,0x52e7,0x52e8,0x52e9,0x52ea,0x52eb,0x52ec,0x52ed, +0x52ee,0x52ef,0x52f1,0x52f2,0x52f3,0x52f4,0x52f5,0x52f6, +0x52f7,0x52f8,0x52fb,0x52fc,0x52fd,0x5301,0x5302,0x5303, +0x5304,0x5307,0x5309,0x530a,0x530b,0x530c,0x530e,0x0000, +/* 0x8500 */ +0x5311,0x5312,0x5313,0x5314,0x5318,0x531b,0x531c,0x531e, +0x531f,0x5322,0x5324,0x5325,0x5327,0x5328,0x5329,0x532b, +0x532c,0x532d,0x532f,0x5330,0x5331,0x5332,0x5333,0x5334, +0x5335,0x5336,0x5337,0x5338,0x533c,0x533d,0x5340,0x5342, +0x5344,0x5346,0x534b,0x534c,0x534d,0x5350,0x5354,0x5358, +0x5359,0x535b,0x535d,0x5365,0x5368,0x536a,0x536c,0x536d, +0x5372,0x5376,0x5379,0x537b,0x537c,0x537d,0x537e,0x5380, +0x5381,0x5383,0x5387,0x5388,0x538a,0x538e,0x538f,0x0000, +0x5390,0x5391,0x5392,0x5393,0x5394,0x5396,0x5397,0x5399, +0x539b,0x539c,0x539e,0x53a0,0x53a1,0x53a4,0x53a7,0x53aa, +0x53ab,0x53ac,0x53ad,0x53af,0x53b0,0x53b1,0x53b2,0x53b3, +0x53b4,0x53b5,0x53b7,0x53b8,0x53b9,0x53ba,0x53bc,0x53bd, +0x53be,0x53c0,0x53c3,0x53c4,0x53c5,0x53c6,0x53c7,0x53ce, +0x53cf,0x53d0,0x53d2,0x53d3,0x53d5,0x53da,0x53dc,0x53dd, +0x53de,0x53e1,0x53e2,0x53e7,0x53f4,0x53fa,0x53fe,0x53ff, +0x5400,0x5402,0x5405,0x5407,0x540b,0x5414,0x5418,0x5419, +0x541a,0x541c,0x5422,0x5424,0x5425,0x542a,0x5430,0x5433, +0x5436,0x5437,0x543a,0x543d,0x543f,0x5441,0x5442,0x5444, +0x5445,0x5447,0x5449,0x544c,0x544d,0x544e,0x544f,0x5451, +0x545a,0x545d,0x545e,0x545f,0x5460,0x5461,0x5463,0x5465, +0x5467,0x5469,0x546a,0x546b,0x546c,0x546d,0x546e,0x546f, +0x5470,0x5474,0x5479,0x547a,0x547e,0x547f,0x5481,0x5483, +0x5485,0x5487,0x5488,0x5489,0x548a,0x548d,0x5491,0x5493, +0x5497,0x5498,0x549c,0x549e,0x549f,0x54a0,0x54a1,0x0000, +/* 0x8600 */ +0x54a2,0x54a5,0x54ae,0x54b0,0x54b2,0x54b5,0x54b6,0x54b7, +0x54b9,0x54ba,0x54bc,0x54be,0x54c3,0x54c5,0x54ca,0x54cb, +0x54d6,0x54d8,0x54db,0x54e0,0x54e1,0x54e2,0x54e3,0x54e4, +0x54eb,0x54ec,0x54ef,0x54f0,0x54f1,0x54f4,0x54f5,0x54f6, +0x54f7,0x54f8,0x54f9,0x54fb,0x54fe,0x5500,0x5502,0x5503, +0x5504,0x5505,0x5508,0x550a,0x550b,0x550c,0x550d,0x550e, +0x5512,0x5513,0x5515,0x5516,0x5517,0x5518,0x5519,0x551a, +0x551c,0x551d,0x551e,0x551f,0x5521,0x5525,0x5526,0x0000, +0x5528,0x5529,0x552b,0x552d,0x5532,0x5534,0x5535,0x5536, +0x5538,0x5539,0x553a,0x553b,0x553d,0x5540,0x5542,0x5545, +0x5547,0x5548,0x554b,0x554c,0x554d,0x554e,0x554f,0x5551, +0x5552,0x5553,0x5554,0x5557,0x5558,0x5559,0x555a,0x555b, +0x555d,0x555e,0x555f,0x5560,0x5562,0x5563,0x5568,0x5569, +0x556b,0x556f,0x5570,0x5571,0x5572,0x5573,0x5574,0x5579, +0x557a,0x557d,0x557f,0x5585,0x5586,0x558c,0x558d,0x558e, +0x5590,0x5592,0x5593,0x5595,0x5596,0x5597,0x559a,0x559b, +0x559e,0x55a0,0x55a1,0x55a2,0x55a3,0x55a4,0x55a5,0x55a6, +0x55a8,0x55a9,0x55aa,0x55ab,0x55ac,0x55ad,0x55ae,0x55af, +0x55b0,0x55b2,0x55b4,0x55b6,0x55b8,0x55ba,0x55bc,0x55bf, +0x55c0,0x55c1,0x55c2,0x55c3,0x55c6,0x55c7,0x55c8,0x55ca, +0x55cb,0x55ce,0x55cf,0x55d0,0x55d5,0x55d7,0x55d8,0x55d9, +0x55da,0x55db,0x55de,0x55e0,0x55e2,0x55e7,0x55e9,0x55ed, +0x55ee,0x55f0,0x55f1,0x55f4,0x55f6,0x55f8,0x55f9,0x55fa, +0x55fb,0x55fc,0x55ff,0x5602,0x5603,0x5604,0x5605,0x0000, +/* 0x8700 */ +0x5606,0x5607,0x560a,0x560b,0x560d,0x5610,0x5611,0x5612, +0x5613,0x5614,0x5615,0x5616,0x5617,0x5619,0x561a,0x561c, +0x561d,0x5620,0x5621,0x5622,0x5625,0x5626,0x5628,0x5629, +0x562a,0x562b,0x562e,0x562f,0x5630,0x5633,0x5635,0x5637, +0x5638,0x563a,0x563c,0x563d,0x563e,0x5640,0x5641,0x5642, +0x5643,0x5644,0x5645,0x5646,0x5647,0x5648,0x5649,0x564a, +0x564b,0x564f,0x5650,0x5651,0x5652,0x5653,0x5655,0x5656, +0x565a,0x565b,0x565d,0x565e,0x565f,0x5660,0x5661,0x0000, +0x5663,0x5665,0x5666,0x5667,0x566d,0x566e,0x566f,0x5670, +0x5672,0x5673,0x5674,0x5675,0x5677,0x5678,0x5679,0x567a, +0x567d,0x567e,0x567f,0x5680,0x5681,0x5682,0x5683,0x5684, +0x5687,0x5688,0x5689,0x568a,0x568b,0x568c,0x568d,0x5690, +0x5691,0x5692,0x5694,0x5695,0x5696,0x5697,0x5698,0x5699, +0x569a,0x569b,0x569c,0x569d,0x569e,0x569f,0x56a0,0x56a1, +0x56a2,0x56a4,0x56a5,0x56a6,0x56a7,0x56a8,0x56a9,0x56aa, +0x56ab,0x56ac,0x56ad,0x56ae,0x56b0,0x56b1,0x56b2,0x56b3, +0x56b4,0x56b5,0x56b6,0x56b8,0x56b9,0x56ba,0x56bb,0x56bd, +0x56be,0x56bf,0x56c0,0x56c1,0x56c2,0x56c3,0x56c4,0x56c5, +0x56c6,0x56c7,0x56c8,0x56c9,0x56cb,0x56cc,0x56cd,0x56ce, +0x56cf,0x56d0,0x56d1,0x56d2,0x56d3,0x56d5,0x56d6,0x56d8, +0x56d9,0x56dc,0x56e3,0x56e5,0x56e6,0x56e7,0x56e8,0x56e9, +0x56ea,0x56ec,0x56ee,0x56ef,0x56f2,0x56f3,0x56f6,0x56f7, +0x56f8,0x56fb,0x56fc,0x5700,0x5701,0x5702,0x5705,0x5707, +0x570b,0x570c,0x570d,0x570e,0x570f,0x5710,0x5711,0x0000, +/* 0x8800 */ +0x5712,0x5713,0x5714,0x5715,0x5716,0x5717,0x5718,0x5719, +0x571a,0x571b,0x571d,0x571e,0x5720,0x5721,0x5722,0x5724, +0x5725,0x5726,0x5727,0x572b,0x5731,0x5732,0x5734,0x5735, +0x5736,0x5737,0x5738,0x573c,0x573d,0x573f,0x5741,0x5743, +0x5744,0x5745,0x5746,0x5748,0x5749,0x574b,0x5752,0x5753, +0x5754,0x5755,0x5756,0x5758,0x5759,0x5762,0x5763,0x5765, +0x5767,0x576c,0x576e,0x5770,0x5771,0x5772,0x5774,0x5775, +0x5778,0x5779,0x577a,0x577d,0x577e,0x577f,0x5780,0x0000, +0x5781,0x5787,0x5788,0x5789,0x578a,0x578d,0x578e,0x578f, +0x5790,0x5791,0x5794,0x5795,0x5796,0x5797,0x5798,0x5799, +0x579a,0x579c,0x579d,0x579e,0x579f,0x57a5,0x57a8,0x57aa, +0x57ac,0x57af,0x57b0,0x57b1,0x57b3,0x57b5,0x57b6,0x57b7, +0x57b9,0x57ba,0x57bb,0x57bc,0x57bd,0x57be,0x57bf,0x57c0, +0x57c1,0x57c4,0x57c5,0x57c6,0x57c7,0x57c8,0x57c9,0x57ca, +0x57cc,0x57cd,0x57d0,0x57d1,0x57d3,0x57d6,0x57d7,0x57db, +0x57dc,0x57de,0x57e1,0x57e2,0x57e3,0x57e5,0x57e6,0x57e7, +0x57e8,0x57e9,0x57ea,0x57eb,0x57ec,0x57ee,0x57f0,0x57f1, +0x57f2,0x57f3,0x57f5,0x57f6,0x57f7,0x57fb,0x57fc,0x57fe, +0x57ff,0x5801,0x5803,0x5804,0x5805,0x5808,0x5809,0x580a, +0x580c,0x580e,0x580f,0x5810,0x5812,0x5813,0x5814,0x5816, +0x5817,0x5818,0x581a,0x581b,0x581c,0x581d,0x581f,0x5822, +0x5823,0x5825,0x5826,0x5827,0x5828,0x5829,0x582b,0x582c, +0x582d,0x582e,0x582f,0x5831,0x5832,0x5833,0x5834,0x5836, +0x5837,0x5838,0x5839,0x583a,0x583b,0x583c,0x583d,0x0000, +/* 0x8900 */ +0x583e,0x583f,0x5840,0x5841,0x5842,0x5843,0x5845,0x5846, +0x5847,0x5848,0x5849,0x584a,0x584b,0x584e,0x584f,0x5850, +0x5852,0x5853,0x5855,0x5856,0x5857,0x5859,0x585a,0x585b, +0x585c,0x585d,0x585f,0x5860,0x5861,0x5862,0x5863,0x5864, +0x5866,0x5867,0x5868,0x5869,0x586a,0x586d,0x586e,0x586f, +0x5870,0x5871,0x5872,0x5873,0x5874,0x5875,0x5876,0x5877, +0x5878,0x5879,0x587a,0x587b,0x587c,0x587d,0x587f,0x5882, +0x5884,0x5886,0x5887,0x5888,0x588a,0x588b,0x588c,0x0000, +0x588d,0x588e,0x588f,0x5890,0x5891,0x5894,0x5895,0x5896, +0x5897,0x5898,0x589b,0x589c,0x589d,0x58a0,0x58a1,0x58a2, +0x58a3,0x58a4,0x58a5,0x58a6,0x58a7,0x58aa,0x58ab,0x58ac, +0x58ad,0x58ae,0x58af,0x58b0,0x58b1,0x58b2,0x58b3,0x58b4, +0x58b5,0x58b6,0x58b7,0x58b8,0x58b9,0x58ba,0x58bb,0x58bd, +0x58be,0x58bf,0x58c0,0x58c2,0x58c3,0x58c4,0x58c6,0x58c7, +0x58c8,0x58c9,0x58ca,0x58cb,0x58cc,0x58cd,0x58ce,0x58cf, +0x58d0,0x58d2,0x58d3,0x58d4,0x58d6,0x58d7,0x58d8,0x58d9, +0x58da,0x58db,0x58dc,0x58dd,0x58de,0x58df,0x58e0,0x58e1, +0x58e2,0x58e3,0x58e5,0x58e6,0x58e7,0x58e8,0x58e9,0x58ea, +0x58ed,0x58ef,0x58f1,0x58f2,0x58f4,0x58f5,0x58f7,0x58f8, +0x58fa,0x58fb,0x58fc,0x58fd,0x58fe,0x58ff,0x5900,0x5901, +0x5903,0x5905,0x5906,0x5908,0x5909,0x590a,0x590b,0x590c, +0x590e,0x5910,0x5911,0x5912,0x5913,0x5917,0x5918,0x591b, +0x591d,0x591e,0x5920,0x5921,0x5922,0x5923,0x5926,0x5928, +0x592c,0x5930,0x5932,0x5933,0x5935,0x5936,0x593b,0x0000, +/* 0x8a00 */ +0x593d,0x593e,0x593f,0x5940,0x5943,0x5945,0x5946,0x594a, +0x594c,0x594d,0x5950,0x5952,0x5953,0x5959,0x595b,0x595c, +0x595d,0x595e,0x595f,0x5961,0x5963,0x5964,0x5966,0x5967, +0x5968,0x5969,0x596a,0x596b,0x596c,0x596d,0x596e,0x596f, +0x5970,0x5971,0x5972,0x5975,0x5977,0x597a,0x597b,0x597c, +0x597e,0x597f,0x5980,0x5985,0x5989,0x598b,0x598c,0x598e, +0x598f,0x5990,0x5991,0x5994,0x5995,0x5998,0x599a,0x599b, +0x599c,0x599d,0x599f,0x59a0,0x59a1,0x59a2,0x59a6,0x0000, +0x59a7,0x59ac,0x59ad,0x59b0,0x59b1,0x59b3,0x59b4,0x59b5, +0x59b6,0x59b7,0x59b8,0x59ba,0x59bc,0x59bd,0x59bf,0x59c0, +0x59c1,0x59c2,0x59c3,0x59c4,0x59c5,0x59c7,0x59c8,0x59c9, +0x59cc,0x59cd,0x59ce,0x59cf,0x59d5,0x59d6,0x59d9,0x59db, +0x59de,0x59df,0x59e0,0x59e1,0x59e2,0x59e4,0x59e6,0x59e7, +0x59e9,0x59ea,0x59eb,0x59ed,0x59ee,0x59ef,0x59f0,0x59f1, +0x59f2,0x59f3,0x59f4,0x59f5,0x59f6,0x59f7,0x59f8,0x59fa, +0x59fc,0x59fd,0x59fe,0x5a00,0x5a02,0x5a0a,0x5a0b,0x5a0d, +0x5a0e,0x5a0f,0x5a10,0x5a12,0x5a14,0x5a15,0x5a16,0x5a17, +0x5a19,0x5a1a,0x5a1b,0x5a1d,0x5a1e,0x5a21,0x5a22,0x5a24, +0x5a26,0x5a27,0x5a28,0x5a2a,0x5a2b,0x5a2c,0x5a2d,0x5a2e, +0x5a2f,0x5a30,0x5a33,0x5a35,0x5a37,0x5a38,0x5a39,0x5a3a, +0x5a3b,0x5a3d,0x5a3e,0x5a3f,0x5a41,0x5a42,0x5a43,0x5a44, +0x5a45,0x5a47,0x5a48,0x5a4b,0x5a4c,0x5a4d,0x5a4e,0x5a4f, +0x5a50,0x5a51,0x5a52,0x5a53,0x5a54,0x5a56,0x5a57,0x5a58, +0x5a59,0x5a5b,0x5a5c,0x5a5d,0x5a5e,0x5a5f,0x5a60,0x0000, +/* 0x8b00 */ +0x5a61,0x5a63,0x5a64,0x5a65,0x5a66,0x5a68,0x5a69,0x5a6b, +0x5a6c,0x5a6d,0x5a6e,0x5a6f,0x5a70,0x5a71,0x5a72,0x5a73, +0x5a78,0x5a79,0x5a7b,0x5a7c,0x5a7d,0x5a7e,0x5a80,0x5a81, +0x5a82,0x5a83,0x5a84,0x5a85,0x5a86,0x5a87,0x5a88,0x5a89, +0x5a8a,0x5a8b,0x5a8c,0x5a8d,0x5a8e,0x5a8f,0x5a90,0x5a91, +0x5a93,0x5a94,0x5a95,0x5a96,0x5a97,0x5a98,0x5a99,0x5a9c, +0x5a9d,0x5a9e,0x5a9f,0x5aa0,0x5aa1,0x5aa2,0x5aa3,0x5aa4, +0x5aa5,0x5aa6,0x5aa7,0x5aa8,0x5aa9,0x5aab,0x5aac,0x0000, +0x5aad,0x5aae,0x5aaf,0x5ab0,0x5ab1,0x5ab4,0x5ab6,0x5ab7, +0x5ab9,0x5aba,0x5abb,0x5abc,0x5abd,0x5abf,0x5ac0,0x5ac3, +0x5ac4,0x5ac5,0x5ac6,0x5ac7,0x5ac8,0x5aca,0x5acb,0x5acd, +0x5ace,0x5acf,0x5ad0,0x5ad1,0x5ad3,0x5ad5,0x5ad7,0x5ad9, +0x5ada,0x5adb,0x5add,0x5ade,0x5adf,0x5ae2,0x5ae4,0x5ae5, +0x5ae7,0x5ae8,0x5aea,0x5aec,0x5aed,0x5aee,0x5aef,0x5af0, +0x5af2,0x5af3,0x5af4,0x5af5,0x5af6,0x5af7,0x5af8,0x5af9, +0x5afa,0x5afb,0x5afc,0x5afd,0x5afe,0x5aff,0x5b00,0x5b01, +0x5b02,0x5b03,0x5b04,0x5b05,0x5b06,0x5b07,0x5b08,0x5b0a, +0x5b0b,0x5b0c,0x5b0d,0x5b0e,0x5b0f,0x5b10,0x5b11,0x5b12, +0x5b13,0x5b14,0x5b15,0x5b18,0x5b19,0x5b1a,0x5b1b,0x5b1c, +0x5b1d,0x5b1e,0x5b1f,0x5b20,0x5b21,0x5b22,0x5b23,0x5b24, +0x5b25,0x5b26,0x5b27,0x5b28,0x5b29,0x5b2a,0x5b2b,0x5b2c, +0x5b2d,0x5b2e,0x5b2f,0x5b30,0x5b31,0x5b33,0x5b35,0x5b36, +0x5b38,0x5b39,0x5b3a,0x5b3b,0x5b3c,0x5b3d,0x5b3e,0x5b3f, +0x5b41,0x5b42,0x5b43,0x5b44,0x5b45,0x5b46,0x5b47,0x0000, +/* 0x8c00 */ +0x5b48,0x5b49,0x5b4a,0x5b4b,0x5b4c,0x5b4d,0x5b4e,0x5b4f, +0x5b52,0x5b56,0x5b5e,0x5b60,0x5b61,0x5b67,0x5b68,0x5b6b, +0x5b6d,0x5b6e,0x5b6f,0x5b72,0x5b74,0x5b76,0x5b77,0x5b78, +0x5b79,0x5b7b,0x5b7c,0x5b7e,0x5b7f,0x5b82,0x5b86,0x5b8a, +0x5b8d,0x5b8e,0x5b90,0x5b91,0x5b92,0x5b94,0x5b96,0x5b9f, +0x5ba7,0x5ba8,0x5ba9,0x5bac,0x5bad,0x5bae,0x5baf,0x5bb1, +0x5bb2,0x5bb7,0x5bba,0x5bbb,0x5bbc,0x5bc0,0x5bc1,0x5bc3, +0x5bc8,0x5bc9,0x5bca,0x5bcb,0x5bcd,0x5bce,0x5bcf,0x0000, +0x5bd1,0x5bd4,0x5bd5,0x5bd6,0x5bd7,0x5bd8,0x5bd9,0x5bda, +0x5bdb,0x5bdc,0x5be0,0x5be2,0x5be3,0x5be6,0x5be7,0x5be9, +0x5bea,0x5beb,0x5bec,0x5bed,0x5bef,0x5bf1,0x5bf2,0x5bf3, +0x5bf4,0x5bf5,0x5bf6,0x5bf7,0x5bfd,0x5bfe,0x5c00,0x5c02, +0x5c03,0x5c05,0x5c07,0x5c08,0x5c0b,0x5c0c,0x5c0d,0x5c0e, +0x5c10,0x5c12,0x5c13,0x5c17,0x5c19,0x5c1b,0x5c1e,0x5c1f, +0x5c20,0x5c21,0x5c23,0x5c26,0x5c28,0x5c29,0x5c2a,0x5c2b, +0x5c2d,0x5c2e,0x5c2f,0x5c30,0x5c32,0x5c33,0x5c35,0x5c36, +0x5c37,0x5c43,0x5c44,0x5c46,0x5c47,0x5c4c,0x5c4d,0x5c52, +0x5c53,0x5c54,0x5c56,0x5c57,0x5c58,0x5c5a,0x5c5b,0x5c5c, +0x5c5d,0x5c5f,0x5c62,0x5c64,0x5c67,0x5c68,0x5c69,0x5c6a, +0x5c6b,0x5c6c,0x5c6d,0x5c70,0x5c72,0x5c73,0x5c74,0x5c75, +0x5c76,0x5c77,0x5c78,0x5c7b,0x5c7c,0x5c7d,0x5c7e,0x5c80, +0x5c83,0x5c84,0x5c85,0x5c86,0x5c87,0x5c89,0x5c8a,0x5c8b, +0x5c8e,0x5c8f,0x5c92,0x5c93,0x5c95,0x5c9d,0x5c9e,0x5c9f, +0x5ca0,0x5ca1,0x5ca4,0x5ca5,0x5ca6,0x5ca7,0x5ca8,0x0000, +/* 0x8d00 */ +0x5caa,0x5cae,0x5caf,0x5cb0,0x5cb2,0x5cb4,0x5cb6,0x5cb9, +0x5cba,0x5cbb,0x5cbc,0x5cbe,0x5cc0,0x5cc2,0x5cc3,0x5cc5, +0x5cc6,0x5cc7,0x5cc8,0x5cc9,0x5cca,0x5ccc,0x5ccd,0x5cce, +0x5ccf,0x5cd0,0x5cd1,0x5cd3,0x5cd4,0x5cd5,0x5cd6,0x5cd7, +0x5cd8,0x5cda,0x5cdb,0x5cdc,0x5cdd,0x5cde,0x5cdf,0x5ce0, +0x5ce2,0x5ce3,0x5ce7,0x5ce9,0x5ceb,0x5cec,0x5cee,0x5cef, +0x5cf1,0x5cf2,0x5cf3,0x5cf4,0x5cf5,0x5cf6,0x5cf7,0x5cf8, +0x5cf9,0x5cfa,0x5cfc,0x5cfd,0x5cfe,0x5cff,0x5d00,0x0000, +0x5d01,0x5d04,0x5d05,0x5d08,0x5d09,0x5d0a,0x5d0b,0x5d0c, +0x5d0d,0x5d0f,0x5d10,0x5d11,0x5d12,0x5d13,0x5d15,0x5d17, +0x5d18,0x5d19,0x5d1a,0x5d1c,0x5d1d,0x5d1f,0x5d20,0x5d21, +0x5d22,0x5d23,0x5d25,0x5d28,0x5d2a,0x5d2b,0x5d2c,0x5d2f, +0x5d30,0x5d31,0x5d32,0x5d33,0x5d35,0x5d36,0x5d37,0x5d38, +0x5d39,0x5d3a,0x5d3b,0x5d3c,0x5d3f,0x5d40,0x5d41,0x5d42, +0x5d43,0x5d44,0x5d45,0x5d46,0x5d48,0x5d49,0x5d4d,0x5d4e, +0x5d4f,0x5d50,0x5d51,0x5d52,0x5d53,0x5d54,0x5d55,0x5d56, +0x5d57,0x5d59,0x5d5a,0x5d5c,0x5d5e,0x5d5f,0x5d60,0x5d61, +0x5d62,0x5d63,0x5d64,0x5d65,0x5d66,0x5d67,0x5d68,0x5d6a, +0x5d6d,0x5d6e,0x5d70,0x5d71,0x5d72,0x5d73,0x5d75,0x5d76, +0x5d77,0x5d78,0x5d79,0x5d7a,0x5d7b,0x5d7c,0x5d7d,0x5d7e, +0x5d7f,0x5d80,0x5d81,0x5d83,0x5d84,0x5d85,0x5d86,0x5d87, +0x5d88,0x5d89,0x5d8a,0x5d8b,0x5d8c,0x5d8d,0x5d8e,0x5d8f, +0x5d90,0x5d91,0x5d92,0x5d93,0x5d94,0x5d95,0x5d96,0x5d97, +0x5d98,0x5d9a,0x5d9b,0x5d9c,0x5d9e,0x5d9f,0x5da0,0x0000, +/* 0x8e00 */ +0x5da1,0x5da2,0x5da3,0x5da4,0x5da5,0x5da6,0x5da7,0x5da8, +0x5da9,0x5daa,0x5dab,0x5dac,0x5dad,0x5dae,0x5daf,0x5db0, +0x5db1,0x5db2,0x5db3,0x5db4,0x5db5,0x5db6,0x5db8,0x5db9, +0x5dba,0x5dbb,0x5dbc,0x5dbd,0x5dbe,0x5dbf,0x5dc0,0x5dc1, +0x5dc2,0x5dc3,0x5dc4,0x5dc6,0x5dc7,0x5dc8,0x5dc9,0x5dca, +0x5dcb,0x5dcc,0x5dce,0x5dcf,0x5dd0,0x5dd1,0x5dd2,0x5dd3, +0x5dd4,0x5dd5,0x5dd6,0x5dd7,0x5dd8,0x5dd9,0x5dda,0x5ddc, +0x5ddf,0x5de0,0x5de3,0x5de4,0x5dea,0x5dec,0x5ded,0x0000, +0x5df0,0x5df5,0x5df6,0x5df8,0x5df9,0x5dfa,0x5dfb,0x5dfc, +0x5dff,0x5e00,0x5e04,0x5e07,0x5e09,0x5e0a,0x5e0b,0x5e0d, +0x5e0e,0x5e12,0x5e13,0x5e17,0x5e1e,0x5e1f,0x5e20,0x5e21, +0x5e22,0x5e23,0x5e24,0x5e25,0x5e28,0x5e29,0x5e2a,0x5e2b, +0x5e2c,0x5e2f,0x5e30,0x5e32,0x5e33,0x5e34,0x5e35,0x5e36, +0x5e39,0x5e3a,0x5e3e,0x5e3f,0x5e40,0x5e41,0x5e43,0x5e46, +0x5e47,0x5e48,0x5e49,0x5e4a,0x5e4b,0x5e4d,0x5e4e,0x5e4f, +0x5e50,0x5e51,0x5e52,0x5e53,0x5e56,0x5e57,0x5e58,0x5e59, +0x5e5a,0x5e5c,0x5e5d,0x5e5f,0x5e60,0x5e63,0x5e64,0x5e65, +0x5e66,0x5e67,0x5e68,0x5e69,0x5e6a,0x5e6b,0x5e6c,0x5e6d, +0x5e6e,0x5e6f,0x5e70,0x5e71,0x5e75,0x5e77,0x5e79,0x5e7e, +0x5e81,0x5e82,0x5e83,0x5e85,0x5e88,0x5e89,0x5e8c,0x5e8d, +0x5e8e,0x5e92,0x5e98,0x5e9b,0x5e9d,0x5ea1,0x5ea2,0x5ea3, +0x5ea4,0x5ea8,0x5ea9,0x5eaa,0x5eab,0x5eac,0x5eae,0x5eaf, +0x5eb0,0x5eb1,0x5eb2,0x5eb4,0x5eba,0x5ebb,0x5ebc,0x5ebd, +0x5ebf,0x5ec0,0x5ec1,0x5ec2,0x5ec3,0x5ec4,0x5ec5,0x0000, +/* 0x8f00 */ +0x5ec6,0x5ec7,0x5ec8,0x5ecb,0x5ecc,0x5ecd,0x5ece,0x5ecf, +0x5ed0,0x5ed4,0x5ed5,0x5ed7,0x5ed8,0x5ed9,0x5eda,0x5edc, +0x5edd,0x5ede,0x5edf,0x5ee0,0x5ee1,0x5ee2,0x5ee3,0x5ee4, +0x5ee5,0x5ee6,0x5ee7,0x5ee9,0x5eeb,0x5eec,0x5eed,0x5eee, +0x5eef,0x5ef0,0x5ef1,0x5ef2,0x5ef3,0x5ef5,0x5ef8,0x5ef9, +0x5efb,0x5efc,0x5efd,0x5f05,0x5f06,0x5f07,0x5f09,0x5f0c, +0x5f0d,0x5f0e,0x5f10,0x5f12,0x5f14,0x5f16,0x5f19,0x5f1a, +0x5f1c,0x5f1d,0x5f1e,0x5f21,0x5f22,0x5f23,0x5f24,0x0000, +0x5f28,0x5f2b,0x5f2c,0x5f2e,0x5f30,0x5f32,0x5f33,0x5f34, +0x5f35,0x5f36,0x5f37,0x5f38,0x5f3b,0x5f3d,0x5f3e,0x5f3f, +0x5f41,0x5f42,0x5f43,0x5f44,0x5f45,0x5f46,0x5f47,0x5f48, +0x5f49,0x5f4a,0x5f4b,0x5f4c,0x5f4d,0x5f4e,0x5f4f,0x5f51, +0x5f54,0x5f59,0x5f5a,0x5f5b,0x5f5c,0x5f5e,0x5f5f,0x5f60, +0x5f63,0x5f65,0x5f67,0x5f68,0x5f6b,0x5f6e,0x5f6f,0x5f72, +0x5f74,0x5f75,0x5f76,0x5f78,0x5f7a,0x5f7d,0x5f7e,0x5f7f, +0x5f83,0x5f86,0x5f8d,0x5f8e,0x5f8f,0x5f91,0x5f93,0x5f94, +0x5f96,0x5f9a,0x5f9b,0x5f9d,0x5f9e,0x5f9f,0x5fa0,0x5fa2, +0x5fa3,0x5fa4,0x5fa5,0x5fa6,0x5fa7,0x5fa9,0x5fab,0x5fac, +0x5faf,0x5fb0,0x5fb1,0x5fb2,0x5fb3,0x5fb4,0x5fb6,0x5fb8, +0x5fb9,0x5fba,0x5fbb,0x5fbe,0x5fbf,0x5fc0,0x5fc1,0x5fc2, +0x5fc7,0x5fc8,0x5fca,0x5fcb,0x5fce,0x5fd3,0x5fd4,0x5fd5, +0x5fda,0x5fdb,0x5fdc,0x5fde,0x5fdf,0x5fe2,0x5fe3,0x5fe5, +0x5fe6,0x5fe8,0x5fe9,0x5fec,0x5fef,0x5ff0,0x5ff2,0x5ff3, +0x5ff4,0x5ff6,0x5ff7,0x5ff9,0x5ffa,0x5ffc,0x6007,0x0000, +/* 0x9000 */ +0x6008,0x6009,0x600b,0x600c,0x6010,0x6011,0x6013,0x6017, +0x6018,0x601a,0x601e,0x601f,0x6022,0x6023,0x6024,0x602c, +0x602d,0x602e,0x6030,0x6031,0x6032,0x6033,0x6034,0x6036, +0x6037,0x6038,0x6039,0x603a,0x603d,0x603e,0x6040,0x6044, +0x6045,0x6046,0x6047,0x6048,0x6049,0x604a,0x604c,0x604e, +0x604f,0x6051,0x6053,0x6054,0x6056,0x6057,0x6058,0x605b, +0x605c,0x605e,0x605f,0x6060,0x6061,0x6065,0x6066,0x606e, +0x6071,0x6072,0x6074,0x6075,0x6077,0x607e,0x6080,0x0000, +0x6081,0x6082,0x6085,0x6086,0x6087,0x6088,0x608a,0x608b, +0x608e,0x608f,0x6090,0x6091,0x6093,0x6095,0x6097,0x6098, +0x6099,0x609c,0x609e,0x60a1,0x60a2,0x60a4,0x60a5,0x60a7, +0x60a9,0x60aa,0x60ae,0x60b0,0x60b3,0x60b5,0x60b6,0x60b7, +0x60b9,0x60ba,0x60bd,0x60be,0x60bf,0x60c0,0x60c1,0x60c2, +0x60c3,0x60c4,0x60c7,0x60c8,0x60c9,0x60cc,0x60cd,0x60ce, +0x60cf,0x60d0,0x60d2,0x60d3,0x60d4,0x60d6,0x60d7,0x60d9, +0x60db,0x60de,0x60e1,0x60e2,0x60e3,0x60e4,0x60e5,0x60ea, +0x60f1,0x60f2,0x60f5,0x60f7,0x60f8,0x60fb,0x60fc,0x60fd, +0x60fe,0x60ff,0x6102,0x6103,0x6104,0x6105,0x6107,0x610a, +0x610b,0x610c,0x6110,0x6111,0x6112,0x6113,0x6114,0x6116, +0x6117,0x6118,0x6119,0x611b,0x611c,0x611d,0x611e,0x6121, +0x6122,0x6125,0x6128,0x6129,0x612a,0x612c,0x612d,0x612e, +0x612f,0x6130,0x6131,0x6132,0x6133,0x6134,0x6135,0x6136, +0x6137,0x6138,0x6139,0x613a,0x613b,0x613c,0x613d,0x613e, +0x6140,0x6141,0x6142,0x6143,0x6144,0x6145,0x6146,0x0000, +/* 0x9100 */ +0x6147,0x6149,0x614b,0x614d,0x614f,0x6150,0x6152,0x6153, +0x6154,0x6156,0x6157,0x6158,0x6159,0x615a,0x615b,0x615c, +0x615e,0x615f,0x6160,0x6161,0x6163,0x6164,0x6165,0x6166, +0x6169,0x616a,0x616b,0x616c,0x616d,0x616e,0x616f,0x6171, +0x6172,0x6173,0x6174,0x6176,0x6178,0x6179,0x617a,0x617b, +0x617c,0x617d,0x617e,0x617f,0x6180,0x6181,0x6182,0x6183, +0x6184,0x6185,0x6186,0x6187,0x6188,0x6189,0x618a,0x618c, +0x618d,0x618f,0x6190,0x6191,0x6192,0x6193,0x6195,0x0000, +0x6196,0x6197,0x6198,0x6199,0x619a,0x619b,0x619c,0x619e, +0x619f,0x61a0,0x61a1,0x61a2,0x61a3,0x61a4,0x61a5,0x61a6, +0x61aa,0x61ab,0x61ad,0x61ae,0x61af,0x61b0,0x61b1,0x61b2, +0x61b3,0x61b4,0x61b5,0x61b6,0x61b8,0x61b9,0x61ba,0x61bb, +0x61bc,0x61bd,0x61bf,0x61c0,0x61c1,0x61c3,0x61c4,0x61c5, +0x61c6,0x61c7,0x61c9,0x61cc,0x61cd,0x61ce,0x61cf,0x61d0, +0x61d3,0x61d5,0x61d6,0x61d7,0x61d8,0x61d9,0x61da,0x61db, +0x61dc,0x61dd,0x61de,0x61df,0x61e0,0x61e1,0x61e2,0x61e3, +0x61e4,0x61e5,0x61e7,0x61e8,0x61e9,0x61ea,0x61eb,0x61ec, +0x61ed,0x61ee,0x61ef,0x61f0,0x61f1,0x61f2,0x61f3,0x61f4, +0x61f6,0x61f7,0x61f8,0x61f9,0x61fa,0x61fb,0x61fc,0x61fd, +0x61fe,0x6200,0x6201,0x6202,0x6203,0x6204,0x6205,0x6207, +0x6209,0x6213,0x6214,0x6219,0x621c,0x621d,0x621e,0x6220, +0x6223,0x6226,0x6227,0x6228,0x6229,0x622b,0x622d,0x622f, +0x6230,0x6231,0x6232,0x6235,0x6236,0x6238,0x6239,0x623a, +0x623b,0x623c,0x6242,0x6244,0x6245,0x6246,0x624a,0x0000, +/* 0x9200 */ +0x624f,0x6250,0x6255,0x6256,0x6257,0x6259,0x625a,0x625c, +0x625d,0x625e,0x625f,0x6260,0x6261,0x6262,0x6264,0x6265, +0x6268,0x6271,0x6272,0x6274,0x6275,0x6277,0x6278,0x627a, +0x627b,0x627d,0x6281,0x6282,0x6283,0x6285,0x6286,0x6287, +0x6288,0x628b,0x628c,0x628d,0x628e,0x628f,0x6290,0x6294, +0x6299,0x629c,0x629d,0x629e,0x62a3,0x62a6,0x62a7,0x62a9, +0x62aa,0x62ad,0x62ae,0x62af,0x62b0,0x62b2,0x62b3,0x62b4, +0x62b6,0x62b7,0x62b8,0x62ba,0x62be,0x62c0,0x62c1,0x0000, +0x62c3,0x62cb,0x62cf,0x62d1,0x62d5,0x62dd,0x62de,0x62e0, +0x62e1,0x62e4,0x62ea,0x62eb,0x62f0,0x62f2,0x62f5,0x62f8, +0x62f9,0x62fa,0x62fb,0x6300,0x6303,0x6304,0x6305,0x6306, +0x630a,0x630b,0x630c,0x630d,0x630f,0x6310,0x6312,0x6313, +0x6314,0x6315,0x6317,0x6318,0x6319,0x631c,0x6326,0x6327, +0x6329,0x632c,0x632d,0x632e,0x6330,0x6331,0x6333,0x6334, +0x6335,0x6336,0x6337,0x6338,0x633b,0x633c,0x633e,0x633f, +0x6340,0x6341,0x6344,0x6347,0x6348,0x634a,0x6351,0x6352, +0x6353,0x6354,0x6356,0x6357,0x6358,0x6359,0x635a,0x635b, +0x635c,0x635d,0x6360,0x6364,0x6365,0x6366,0x6368,0x636a, +0x636b,0x636c,0x636f,0x6370,0x6372,0x6373,0x6374,0x6375, +0x6378,0x6379,0x637c,0x637d,0x637e,0x637f,0x6381,0x6383, +0x6384,0x6385,0x6386,0x638b,0x638d,0x6391,0x6393,0x6394, +0x6395,0x6397,0x6399,0x639a,0x639b,0x639c,0x639d,0x639e, +0x639f,0x63a1,0x63a4,0x63a6,0x63ab,0x63af,0x63b1,0x63b2, +0x63b5,0x63b6,0x63b9,0x63bb,0x63bd,0x63bf,0x63c0,0x0000, +/* 0x9300 */ +0x63c1,0x63c2,0x63c3,0x63c5,0x63c7,0x63c8,0x63ca,0x63cb, +0x63cc,0x63d1,0x63d3,0x63d4,0x63d5,0x63d7,0x63d8,0x63d9, +0x63da,0x63db,0x63dc,0x63dd,0x63df,0x63e2,0x63e4,0x63e5, +0x63e6,0x63e7,0x63e8,0x63eb,0x63ec,0x63ee,0x63ef,0x63f0, +0x63f1,0x63f3,0x63f5,0x63f7,0x63f9,0x63fa,0x63fb,0x63fc, +0x63fe,0x6403,0x6404,0x6406,0x6407,0x6408,0x6409,0x640a, +0x640d,0x640e,0x6411,0x6412,0x6415,0x6416,0x6417,0x6418, +0x6419,0x641a,0x641d,0x641f,0x6422,0x6423,0x6424,0x0000, +0x6425,0x6427,0x6428,0x6429,0x642b,0x642e,0x642f,0x6430, +0x6431,0x6432,0x6433,0x6435,0x6436,0x6437,0x6438,0x6439, +0x643b,0x643c,0x643e,0x6440,0x6442,0x6443,0x6449,0x644b, +0x644c,0x644d,0x644e,0x644f,0x6450,0x6451,0x6453,0x6455, +0x6456,0x6457,0x6459,0x645a,0x645b,0x645c,0x645d,0x645f, +0x6460,0x6461,0x6462,0x6463,0x6464,0x6465,0x6466,0x6468, +0x646a,0x646b,0x646c,0x646e,0x646f,0x6470,0x6471,0x6472, +0x6473,0x6474,0x6475,0x6476,0x6477,0x647b,0x647c,0x647d, +0x647e,0x647f,0x6480,0x6481,0x6483,0x6486,0x6488,0x6489, +0x648a,0x648b,0x648c,0x648d,0x648e,0x648f,0x6490,0x6493, +0x6494,0x6497,0x6498,0x649a,0x649b,0x649c,0x649d,0x649f, +0x64a0,0x64a1,0x64a2,0x64a3,0x64a5,0x64a6,0x64a7,0x64a8, +0x64aa,0x64ab,0x64af,0x64b1,0x64b2,0x64b3,0x64b4,0x64b6, +0x64b9,0x64bb,0x64bd,0x64be,0x64bf,0x64c1,0x64c3,0x64c4, +0x64c6,0x64c7,0x64c8,0x64c9,0x64ca,0x64cb,0x64cc,0x64cf, +0x64d1,0x64d3,0x64d4,0x64d5,0x64d6,0x64d9,0x64da,0x0000, +/* 0x9400 */ +0x64db,0x64dc,0x64dd,0x64df,0x64e0,0x64e1,0x64e3,0x64e5, +0x64e7,0x64e8,0x64e9,0x64ea,0x64eb,0x64ec,0x64ed,0x64ee, +0x64ef,0x64f0,0x64f1,0x64f2,0x64f3,0x64f4,0x64f5,0x64f6, +0x64f7,0x64f8,0x64f9,0x64fa,0x64fb,0x64fc,0x64fd,0x64fe, +0x64ff,0x6501,0x6502,0x6503,0x6504,0x6505,0x6506,0x6507, +0x6508,0x650a,0x650b,0x650c,0x650d,0x650e,0x650f,0x6510, +0x6511,0x6513,0x6514,0x6515,0x6516,0x6517,0x6519,0x651a, +0x651b,0x651c,0x651d,0x651e,0x651f,0x6520,0x6521,0x0000, +0x6522,0x6523,0x6524,0x6526,0x6527,0x6528,0x6529,0x652a, +0x652c,0x652d,0x6530,0x6531,0x6532,0x6533,0x6537,0x653a, +0x653c,0x653d,0x6540,0x6541,0x6542,0x6543,0x6544,0x6546, +0x6547,0x654a,0x654b,0x654d,0x654e,0x6550,0x6552,0x6553, +0x6554,0x6557,0x6558,0x655a,0x655c,0x655f,0x6560,0x6561, +0x6564,0x6565,0x6567,0x6568,0x6569,0x656a,0x656d,0x656e, +0x656f,0x6571,0x6573,0x6575,0x6576,0x6578,0x6579,0x657a, +0x657b,0x657c,0x657d,0x657e,0x657f,0x6580,0x6581,0x6582, +0x6583,0x6584,0x6585,0x6586,0x6588,0x6589,0x658a,0x658d, +0x658e,0x658f,0x6592,0x6594,0x6595,0x6596,0x6598,0x659a, +0x659d,0x659e,0x65a0,0x65a2,0x65a3,0x65a6,0x65a8,0x65aa, +0x65ac,0x65ae,0x65b1,0x65b2,0x65b3,0x65b4,0x65b5,0x65b6, +0x65b7,0x65b8,0x65ba,0x65bb,0x65be,0x65bf,0x65c0,0x65c2, +0x65c7,0x65c8,0x65c9,0x65ca,0x65cd,0x65d0,0x65d1,0x65d3, +0x65d4,0x65d5,0x65d8,0x65d9,0x65da,0x65db,0x65dc,0x65dd, +0x65de,0x65df,0x65e1,0x65e3,0x65e4,0x65ea,0x65eb,0x0000, +/* 0x9500 */ +0x65f2,0x65f3,0x65f4,0x65f5,0x65f8,0x65f9,0x65fb,0x65fc, +0x65fd,0x65fe,0x65ff,0x6601,0x6604,0x6605,0x6607,0x6608, +0x6609,0x660b,0x660d,0x6610,0x6611,0x6612,0x6616,0x6617, +0x6618,0x661a,0x661b,0x661c,0x661e,0x6621,0x6622,0x6623, +0x6624,0x6626,0x6629,0x662a,0x662b,0x662c,0x662e,0x6630, +0x6632,0x6633,0x6637,0x6638,0x6639,0x663a,0x663b,0x663d, +0x663f,0x6640,0x6642,0x6644,0x6645,0x6646,0x6647,0x6648, +0x6649,0x664a,0x664d,0x664e,0x6650,0x6651,0x6658,0x0000, +0x6659,0x665b,0x665c,0x665d,0x665e,0x6660,0x6662,0x6663, +0x6665,0x6667,0x6669,0x666a,0x666b,0x666c,0x666d,0x6671, +0x6672,0x6673,0x6675,0x6678,0x6679,0x667b,0x667c,0x667d, +0x667f,0x6680,0x6681,0x6683,0x6685,0x6686,0x6688,0x6689, +0x668a,0x668b,0x668d,0x668e,0x668f,0x6690,0x6692,0x6693, +0x6694,0x6695,0x6698,0x6699,0x669a,0x669b,0x669c,0x669e, +0x669f,0x66a0,0x66a1,0x66a2,0x66a3,0x66a4,0x66a5,0x66a6, +0x66a9,0x66aa,0x66ab,0x66ac,0x66ad,0x66af,0x66b0,0x66b1, +0x66b2,0x66b3,0x66b5,0x66b6,0x66b7,0x66b8,0x66ba,0x66bb, +0x66bc,0x66bd,0x66bf,0x66c0,0x66c1,0x66c2,0x66c3,0x66c4, +0x66c5,0x66c6,0x66c7,0x66c8,0x66c9,0x66ca,0x66cb,0x66cc, +0x66cd,0x66ce,0x66cf,0x66d0,0x66d1,0x66d2,0x66d3,0x66d4, +0x66d5,0x66d6,0x66d7,0x66d8,0x66da,0x66de,0x66df,0x66e0, +0x66e1,0x66e2,0x66e3,0x66e4,0x66e5,0x66e7,0x66e8,0x66ea, +0x66eb,0x66ec,0x66ed,0x66ee,0x66ef,0x66f1,0x66f5,0x66f6, +0x66f8,0x66fa,0x66fb,0x66fd,0x6701,0x6702,0x6703,0x0000, +/* 0x9600 */ +0x6704,0x6705,0x6706,0x6707,0x670c,0x670e,0x670f,0x6711, +0x6712,0x6713,0x6716,0x6718,0x6719,0x671a,0x671c,0x671e, +0x6720,0x6721,0x6722,0x6723,0x6724,0x6725,0x6727,0x6729, +0x672e,0x6730,0x6732,0x6733,0x6736,0x6737,0x6738,0x6739, +0x673b,0x673c,0x673e,0x673f,0x6741,0x6744,0x6745,0x6747, +0x674a,0x674b,0x674d,0x6752,0x6754,0x6755,0x6757,0x6758, +0x6759,0x675a,0x675b,0x675d,0x6762,0x6763,0x6764,0x6766, +0x6767,0x676b,0x676c,0x676e,0x6771,0x6774,0x6776,0x0000, +0x6778,0x6779,0x677a,0x677b,0x677d,0x6780,0x6782,0x6783, +0x6785,0x6786,0x6788,0x678a,0x678c,0x678d,0x678e,0x678f, +0x6791,0x6792,0x6793,0x6794,0x6796,0x6799,0x679b,0x679f, +0x67a0,0x67a1,0x67a4,0x67a6,0x67a9,0x67ac,0x67ae,0x67b1, +0x67b2,0x67b4,0x67b9,0x67ba,0x67bb,0x67bc,0x67bd,0x67be, +0x67bf,0x67c0,0x67c2,0x67c5,0x67c6,0x67c7,0x67c8,0x67c9, +0x67ca,0x67cb,0x67cc,0x67cd,0x67ce,0x67d5,0x67d6,0x67d7, +0x67db,0x67df,0x67e1,0x67e3,0x67e4,0x67e6,0x67e7,0x67e8, +0x67ea,0x67eb,0x67ed,0x67ee,0x67f2,0x67f5,0x67f6,0x67f7, +0x67f8,0x67f9,0x67fa,0x67fb,0x67fc,0x67fe,0x6801,0x6802, +0x6803,0x6804,0x6806,0x680d,0x6810,0x6812,0x6814,0x6815, +0x6818,0x6819,0x681a,0x681b,0x681c,0x681e,0x681f,0x6820, +0x6822,0x6823,0x6824,0x6825,0x6826,0x6827,0x6828,0x682b, +0x682c,0x682d,0x682e,0x682f,0x6830,0x6831,0x6834,0x6835, +0x6836,0x683a,0x683b,0x683f,0x6847,0x684b,0x684d,0x684f, +0x6852,0x6856,0x6857,0x6858,0x6859,0x685a,0x685b,0x0000, +/* 0x9700 */ +0x685c,0x685d,0x685e,0x685f,0x686a,0x686c,0x686d,0x686e, +0x686f,0x6870,0x6871,0x6872,0x6873,0x6875,0x6878,0x6879, +0x687a,0x687b,0x687c,0x687d,0x687e,0x687f,0x6880,0x6882, +0x6884,0x6887,0x6888,0x6889,0x688a,0x688b,0x688c,0x688d, +0x688e,0x6890,0x6891,0x6892,0x6894,0x6895,0x6896,0x6898, +0x6899,0x689a,0x689b,0x689c,0x689d,0x689e,0x689f,0x68a0, +0x68a1,0x68a3,0x68a4,0x68a5,0x68a9,0x68aa,0x68ab,0x68ac, +0x68ae,0x68b1,0x68b2,0x68b4,0x68b6,0x68b7,0x68b8,0x0000, +0x68b9,0x68ba,0x68bb,0x68bc,0x68bd,0x68be,0x68bf,0x68c1, +0x68c3,0x68c4,0x68c5,0x68c6,0x68c7,0x68c8,0x68ca,0x68cc, +0x68ce,0x68cf,0x68d0,0x68d1,0x68d3,0x68d4,0x68d6,0x68d7, +0x68d9,0x68db,0x68dc,0x68dd,0x68de,0x68df,0x68e1,0x68e2, +0x68e4,0x68e5,0x68e6,0x68e7,0x68e8,0x68e9,0x68ea,0x68eb, +0x68ec,0x68ed,0x68ef,0x68f2,0x68f3,0x68f4,0x68f6,0x68f7, +0x68f8,0x68fb,0x68fd,0x68fe,0x68ff,0x6900,0x6902,0x6903, +0x6904,0x6906,0x6907,0x6908,0x6909,0x690a,0x690c,0x690f, +0x6911,0x6913,0x6914,0x6915,0x6916,0x6917,0x6918,0x6919, +0x691a,0x691b,0x691c,0x691d,0x691e,0x6921,0x6922,0x6923, +0x6925,0x6926,0x6927,0x6928,0x6929,0x692a,0x692b,0x692c, +0x692e,0x692f,0x6931,0x6932,0x6933,0x6935,0x6936,0x6937, +0x6938,0x693a,0x693b,0x693c,0x693e,0x6940,0x6941,0x6943, +0x6944,0x6945,0x6946,0x6947,0x6948,0x6949,0x694a,0x694b, +0x694c,0x694d,0x694e,0x694f,0x6950,0x6951,0x6952,0x6953, +0x6955,0x6956,0x6958,0x6959,0x695b,0x695c,0x695f,0x0000, +/* 0x9800 */ +0x6961,0x6962,0x6964,0x6965,0x6967,0x6968,0x6969,0x696a, +0x696c,0x696d,0x696f,0x6970,0x6972,0x6973,0x6974,0x6975, +0x6976,0x697a,0x697b,0x697d,0x697e,0x697f,0x6981,0x6983, +0x6985,0x698a,0x698b,0x698c,0x698e,0x698f,0x6990,0x6991, +0x6992,0x6993,0x6996,0x6997,0x6999,0x699a,0x699d,0x699e, +0x699f,0x69a0,0x69a1,0x69a2,0x69a3,0x69a4,0x69a5,0x69a6, +0x69a9,0x69aa,0x69ac,0x69ae,0x69af,0x69b0,0x69b2,0x69b3, +0x69b5,0x69b6,0x69b8,0x69b9,0x69ba,0x69bc,0x69bd,0x0000, +0x69be,0x69bf,0x69c0,0x69c2,0x69c3,0x69c4,0x69c5,0x69c6, +0x69c7,0x69c8,0x69c9,0x69cb,0x69cd,0x69cf,0x69d1,0x69d2, +0x69d3,0x69d5,0x69d6,0x69d7,0x69d8,0x69d9,0x69da,0x69dc, +0x69dd,0x69de,0x69e1,0x69e2,0x69e3,0x69e4,0x69e5,0x69e6, +0x69e7,0x69e8,0x69e9,0x69ea,0x69eb,0x69ec,0x69ee,0x69ef, +0x69f0,0x69f1,0x69f3,0x69f4,0x69f5,0x69f6,0x69f7,0x69f8, +0x69f9,0x69fa,0x69fb,0x69fc,0x69fe,0x6a00,0x6a01,0x6a02, +0x6a03,0x6a04,0x6a05,0x6a06,0x6a07,0x6a08,0x6a09,0x6a0b, +0x6a0c,0x6a0d,0x6a0e,0x6a0f,0x6a10,0x6a11,0x6a12,0x6a13, +0x6a14,0x6a15,0x6a16,0x6a19,0x6a1a,0x6a1b,0x6a1c,0x6a1d, +0x6a1e,0x6a20,0x6a22,0x6a23,0x6a24,0x6a25,0x6a26,0x6a27, +0x6a29,0x6a2b,0x6a2c,0x6a2d,0x6a2e,0x6a30,0x6a32,0x6a33, +0x6a34,0x6a36,0x6a37,0x6a38,0x6a39,0x6a3a,0x6a3b,0x6a3c, +0x6a3f,0x6a40,0x6a41,0x6a42,0x6a43,0x6a45,0x6a46,0x6a48, +0x6a49,0x6a4a,0x6a4b,0x6a4c,0x6a4d,0x6a4e,0x6a4f,0x6a51, +0x6a52,0x6a53,0x6a54,0x6a55,0x6a56,0x6a57,0x6a5a,0x0000, +/* 0x9900 */ +0x6a5c,0x6a5d,0x6a5e,0x6a5f,0x6a60,0x6a62,0x6a63,0x6a64, +0x6a66,0x6a67,0x6a68,0x6a69,0x6a6a,0x6a6b,0x6a6c,0x6a6d, +0x6a6e,0x6a6f,0x6a70,0x6a72,0x6a73,0x6a74,0x6a75,0x6a76, +0x6a77,0x6a78,0x6a7a,0x6a7b,0x6a7d,0x6a7e,0x6a7f,0x6a81, +0x6a82,0x6a83,0x6a85,0x6a86,0x6a87,0x6a88,0x6a89,0x6a8a, +0x6a8b,0x6a8c,0x6a8d,0x6a8f,0x6a92,0x6a93,0x6a94,0x6a95, +0x6a96,0x6a98,0x6a99,0x6a9a,0x6a9b,0x6a9c,0x6a9d,0x6a9e, +0x6a9f,0x6aa1,0x6aa2,0x6aa3,0x6aa4,0x6aa5,0x6aa6,0x0000, +0x6aa7,0x6aa8,0x6aaa,0x6aad,0x6aae,0x6aaf,0x6ab0,0x6ab1, +0x6ab2,0x6ab3,0x6ab4,0x6ab5,0x6ab6,0x6ab7,0x6ab8,0x6ab9, +0x6aba,0x6abb,0x6abc,0x6abd,0x6abe,0x6abf,0x6ac0,0x6ac1, +0x6ac2,0x6ac3,0x6ac4,0x6ac5,0x6ac6,0x6ac7,0x6ac8,0x6ac9, +0x6aca,0x6acb,0x6acc,0x6acd,0x6ace,0x6acf,0x6ad0,0x6ad1, +0x6ad2,0x6ad3,0x6ad4,0x6ad5,0x6ad6,0x6ad7,0x6ad8,0x6ad9, +0x6ada,0x6adb,0x6adc,0x6add,0x6ade,0x6adf,0x6ae0,0x6ae1, +0x6ae2,0x6ae3,0x6ae4,0x6ae5,0x6ae6,0x6ae7,0x6ae8,0x6ae9, +0x6aea,0x6aeb,0x6aec,0x6aed,0x6aee,0x6aef,0x6af0,0x6af1, +0x6af2,0x6af3,0x6af4,0x6af5,0x6af6,0x6af7,0x6af8,0x6af9, +0x6afa,0x6afb,0x6afc,0x6afd,0x6afe,0x6aff,0x6b00,0x6b01, +0x6b02,0x6b03,0x6b04,0x6b05,0x6b06,0x6b07,0x6b08,0x6b09, +0x6b0a,0x6b0b,0x6b0c,0x6b0d,0x6b0e,0x6b0f,0x6b10,0x6b11, +0x6b12,0x6b13,0x6b14,0x6b15,0x6b16,0x6b17,0x6b18,0x6b19, +0x6b1a,0x6b1b,0x6b1c,0x6b1d,0x6b1e,0x6b1f,0x6b25,0x6b26, +0x6b28,0x6b29,0x6b2a,0x6b2b,0x6b2c,0x6b2d,0x6b2e,0x0000, +/* 0x9a00 */ +0x6b2f,0x6b30,0x6b31,0x6b33,0x6b34,0x6b35,0x6b36,0x6b38, +0x6b3b,0x6b3c,0x6b3d,0x6b3f,0x6b40,0x6b41,0x6b42,0x6b44, +0x6b45,0x6b48,0x6b4a,0x6b4b,0x6b4d,0x6b4e,0x6b4f,0x6b50, +0x6b51,0x6b52,0x6b53,0x6b54,0x6b55,0x6b56,0x6b57,0x6b58, +0x6b5a,0x6b5b,0x6b5c,0x6b5d,0x6b5e,0x6b5f,0x6b60,0x6b61, +0x6b68,0x6b69,0x6b6b,0x6b6c,0x6b6d,0x6b6e,0x6b6f,0x6b70, +0x6b71,0x6b72,0x6b73,0x6b74,0x6b75,0x6b76,0x6b77,0x6b78, +0x6b7a,0x6b7d,0x6b7e,0x6b7f,0x6b80,0x6b85,0x6b88,0x0000, +0x6b8c,0x6b8e,0x6b8f,0x6b90,0x6b91,0x6b94,0x6b95,0x6b97, +0x6b98,0x6b99,0x6b9c,0x6b9d,0x6b9e,0x6b9f,0x6ba0,0x6ba2, +0x6ba3,0x6ba4,0x6ba5,0x6ba6,0x6ba7,0x6ba8,0x6ba9,0x6bab, +0x6bac,0x6bad,0x6bae,0x6baf,0x6bb0,0x6bb1,0x6bb2,0x6bb6, +0x6bb8,0x6bb9,0x6bba,0x6bbb,0x6bbc,0x6bbd,0x6bbe,0x6bc0, +0x6bc3,0x6bc4,0x6bc6,0x6bc7,0x6bc8,0x6bc9,0x6bca,0x6bcc, +0x6bce,0x6bd0,0x6bd1,0x6bd8,0x6bda,0x6bdc,0x6bdd,0x6bde, +0x6bdf,0x6be0,0x6be2,0x6be3,0x6be4,0x6be5,0x6be6,0x6be7, +0x6be8,0x6be9,0x6bec,0x6bed,0x6bee,0x6bf0,0x6bf1,0x6bf2, +0x6bf4,0x6bf6,0x6bf7,0x6bf8,0x6bfa,0x6bfb,0x6bfc,0x6bfe, +0x6bff,0x6c00,0x6c01,0x6c02,0x6c03,0x6c04,0x6c08,0x6c09, +0x6c0a,0x6c0b,0x6c0c,0x6c0e,0x6c12,0x6c17,0x6c1c,0x6c1d, +0x6c1e,0x6c20,0x6c23,0x6c25,0x6c2b,0x6c2c,0x6c2d,0x6c31, +0x6c33,0x6c36,0x6c37,0x6c39,0x6c3a,0x6c3b,0x6c3c,0x6c3e, +0x6c3f,0x6c43,0x6c44,0x6c45,0x6c48,0x6c4b,0x6c4c,0x6c4d, +0x6c4e,0x6c4f,0x6c51,0x6c52,0x6c53,0x6c56,0x6c58,0x0000, +/* 0x9b00 */ +0x6c59,0x6c5a,0x6c62,0x6c63,0x6c65,0x6c66,0x6c67,0x6c6b, +0x6c6c,0x6c6d,0x6c6e,0x6c6f,0x6c71,0x6c73,0x6c75,0x6c77, +0x6c78,0x6c7a,0x6c7b,0x6c7c,0x6c7f,0x6c80,0x6c84,0x6c87, +0x6c8a,0x6c8b,0x6c8d,0x6c8e,0x6c91,0x6c92,0x6c95,0x6c96, +0x6c97,0x6c98,0x6c9a,0x6c9c,0x6c9d,0x6c9e,0x6ca0,0x6ca2, +0x6ca8,0x6cac,0x6caf,0x6cb0,0x6cb4,0x6cb5,0x6cb6,0x6cb7, +0x6cba,0x6cc0,0x6cc1,0x6cc2,0x6cc3,0x6cc6,0x6cc7,0x6cc8, +0x6ccb,0x6ccd,0x6cce,0x6ccf,0x6cd1,0x6cd2,0x6cd8,0x0000, +0x6cd9,0x6cda,0x6cdc,0x6cdd,0x6cdf,0x6ce4,0x6ce6,0x6ce7, +0x6ce9,0x6cec,0x6ced,0x6cf2,0x6cf4,0x6cf9,0x6cff,0x6d00, +0x6d02,0x6d03,0x6d05,0x6d06,0x6d08,0x6d09,0x6d0a,0x6d0d, +0x6d0f,0x6d10,0x6d11,0x6d13,0x6d14,0x6d15,0x6d16,0x6d18, +0x6d1c,0x6d1d,0x6d1f,0x6d20,0x6d21,0x6d22,0x6d23,0x6d24, +0x6d26,0x6d28,0x6d29,0x6d2c,0x6d2d,0x6d2f,0x6d30,0x6d34, +0x6d36,0x6d37,0x6d38,0x6d3a,0x6d3f,0x6d40,0x6d42,0x6d44, +0x6d49,0x6d4c,0x6d50,0x6d55,0x6d56,0x6d57,0x6d58,0x6d5b, +0x6d5d,0x6d5f,0x6d61,0x6d62,0x6d64,0x6d65,0x6d67,0x6d68, +0x6d6b,0x6d6c,0x6d6d,0x6d70,0x6d71,0x6d72,0x6d73,0x6d75, +0x6d76,0x6d79,0x6d7a,0x6d7b,0x6d7d,0x6d7e,0x6d7f,0x6d80, +0x6d81,0x6d83,0x6d84,0x6d86,0x6d87,0x6d8a,0x6d8b,0x6d8d, +0x6d8f,0x6d90,0x6d92,0x6d96,0x6d97,0x6d98,0x6d99,0x6d9a, +0x6d9c,0x6da2,0x6da5,0x6dac,0x6dad,0x6db0,0x6db1,0x6db3, +0x6db4,0x6db6,0x6db7,0x6db9,0x6dba,0x6dbb,0x6dbc,0x6dbd, +0x6dbe,0x6dc1,0x6dc2,0x6dc3,0x6dc8,0x6dc9,0x6dca,0x0000, +/* 0x9c00 */ +0x6dcd,0x6dce,0x6dcf,0x6dd0,0x6dd2,0x6dd3,0x6dd4,0x6dd5, +0x6dd7,0x6dda,0x6ddb,0x6ddc,0x6ddf,0x6de2,0x6de3,0x6de5, +0x6de7,0x6de8,0x6de9,0x6dea,0x6ded,0x6def,0x6df0,0x6df2, +0x6df4,0x6df5,0x6df6,0x6df8,0x6dfa,0x6dfd,0x6dfe,0x6dff, +0x6e00,0x6e01,0x6e02,0x6e03,0x6e04,0x6e06,0x6e07,0x6e08, +0x6e09,0x6e0b,0x6e0f,0x6e12,0x6e13,0x6e15,0x6e18,0x6e19, +0x6e1b,0x6e1c,0x6e1e,0x6e1f,0x6e22,0x6e26,0x6e27,0x6e28, +0x6e2a,0x6e2c,0x6e2e,0x6e30,0x6e31,0x6e33,0x6e35,0x0000, +0x6e36,0x6e37,0x6e39,0x6e3b,0x6e3c,0x6e3d,0x6e3e,0x6e3f, +0x6e40,0x6e41,0x6e42,0x6e45,0x6e46,0x6e47,0x6e48,0x6e49, +0x6e4a,0x6e4b,0x6e4c,0x6e4f,0x6e50,0x6e51,0x6e52,0x6e55, +0x6e57,0x6e59,0x6e5a,0x6e5c,0x6e5d,0x6e5e,0x6e60,0x6e61, +0x6e62,0x6e63,0x6e64,0x6e65,0x6e66,0x6e67,0x6e68,0x6e69, +0x6e6a,0x6e6c,0x6e6d,0x6e6f,0x6e70,0x6e71,0x6e72,0x6e73, +0x6e74,0x6e75,0x6e76,0x6e77,0x6e78,0x6e79,0x6e7a,0x6e7b, +0x6e7c,0x6e7d,0x6e80,0x6e81,0x6e82,0x6e84,0x6e87,0x6e88, +0x6e8a,0x6e8b,0x6e8c,0x6e8d,0x6e8e,0x6e91,0x6e92,0x6e93, +0x6e94,0x6e95,0x6e96,0x6e97,0x6e99,0x6e9a,0x6e9b,0x6e9d, +0x6e9e,0x6ea0,0x6ea1,0x6ea3,0x6ea4,0x6ea6,0x6ea8,0x6ea9, +0x6eab,0x6eac,0x6ead,0x6eae,0x6eb0,0x6eb3,0x6eb5,0x6eb8, +0x6eb9,0x6ebc,0x6ebe,0x6ebf,0x6ec0,0x6ec3,0x6ec4,0x6ec5, +0x6ec6,0x6ec8,0x6ec9,0x6eca,0x6ecc,0x6ecd,0x6ece,0x6ed0, +0x6ed2,0x6ed6,0x6ed8,0x6ed9,0x6edb,0x6edc,0x6edd,0x6ee3, +0x6ee7,0x6eea,0x6eeb,0x6eec,0x6eed,0x6eee,0x6eef,0x0000, +/* 0x9d00 */ +0x6ef0,0x6ef1,0x6ef2,0x6ef3,0x6ef5,0x6ef6,0x6ef7,0x6ef8, +0x6efa,0x6efb,0x6efc,0x6efd,0x6efe,0x6eff,0x6f00,0x6f01, +0x6f03,0x6f04,0x6f05,0x6f07,0x6f08,0x6f0a,0x6f0b,0x6f0c, +0x6f0d,0x6f0e,0x6f10,0x6f11,0x6f12,0x6f16,0x6f17,0x6f18, +0x6f19,0x6f1a,0x6f1b,0x6f1c,0x6f1d,0x6f1e,0x6f1f,0x6f21, +0x6f22,0x6f23,0x6f25,0x6f26,0x6f27,0x6f28,0x6f2c,0x6f2e, +0x6f30,0x6f32,0x6f34,0x6f35,0x6f37,0x6f38,0x6f39,0x6f3a, +0x6f3b,0x6f3c,0x6f3d,0x6f3f,0x6f40,0x6f41,0x6f42,0x0000, +0x6f43,0x6f44,0x6f45,0x6f48,0x6f49,0x6f4a,0x6f4c,0x6f4e, +0x6f4f,0x6f50,0x6f51,0x6f52,0x6f53,0x6f54,0x6f55,0x6f56, +0x6f57,0x6f59,0x6f5a,0x6f5b,0x6f5d,0x6f5f,0x6f60,0x6f61, +0x6f63,0x6f64,0x6f65,0x6f67,0x6f68,0x6f69,0x6f6a,0x6f6b, +0x6f6c,0x6f6f,0x6f70,0x6f71,0x6f73,0x6f75,0x6f76,0x6f77, +0x6f79,0x6f7b,0x6f7d,0x6f7e,0x6f7f,0x6f80,0x6f81,0x6f82, +0x6f83,0x6f85,0x6f86,0x6f87,0x6f8a,0x6f8b,0x6f8f,0x6f90, +0x6f91,0x6f92,0x6f93,0x6f94,0x6f95,0x6f96,0x6f97,0x6f98, +0x6f99,0x6f9a,0x6f9b,0x6f9d,0x6f9e,0x6f9f,0x6fa0,0x6fa2, +0x6fa3,0x6fa4,0x6fa5,0x6fa6,0x6fa8,0x6fa9,0x6faa,0x6fab, +0x6fac,0x6fad,0x6fae,0x6faf,0x6fb0,0x6fb1,0x6fb2,0x6fb4, +0x6fb5,0x6fb7,0x6fb8,0x6fba,0x6fbb,0x6fbc,0x6fbd,0x6fbe, +0x6fbf,0x6fc1,0x6fc3,0x6fc4,0x6fc5,0x6fc6,0x6fc7,0x6fc8, +0x6fca,0x6fcb,0x6fcc,0x6fcd,0x6fce,0x6fcf,0x6fd0,0x6fd3, +0x6fd4,0x6fd5,0x6fd6,0x6fd7,0x6fd8,0x6fd9,0x6fda,0x6fdb, +0x6fdc,0x6fdd,0x6fdf,0x6fe2,0x6fe3,0x6fe4,0x6fe5,0x0000, +/* 0x9e00 */ +0x6fe6,0x6fe7,0x6fe8,0x6fe9,0x6fea,0x6feb,0x6fec,0x6fed, +0x6ff0,0x6ff1,0x6ff2,0x6ff3,0x6ff4,0x6ff5,0x6ff6,0x6ff7, +0x6ff8,0x6ff9,0x6ffa,0x6ffb,0x6ffc,0x6ffd,0x6ffe,0x6fff, +0x7000,0x7001,0x7002,0x7003,0x7004,0x7005,0x7006,0x7007, +0x7008,0x7009,0x700a,0x700b,0x700c,0x700d,0x700e,0x700f, +0x7010,0x7012,0x7013,0x7014,0x7015,0x7016,0x7017,0x7018, +0x7019,0x701c,0x701d,0x701e,0x701f,0x7020,0x7021,0x7022, +0x7024,0x7025,0x7026,0x7027,0x7028,0x7029,0x702a,0x0000, +0x702b,0x702c,0x702d,0x702e,0x702f,0x7030,0x7031,0x7032, +0x7033,0x7034,0x7036,0x7037,0x7038,0x703a,0x703b,0x703c, +0x703d,0x703e,0x703f,0x7040,0x7041,0x7042,0x7043,0x7044, +0x7045,0x7046,0x7047,0x7048,0x7049,0x704a,0x704b,0x704d, +0x704e,0x7050,0x7051,0x7052,0x7053,0x7054,0x7055,0x7056, +0x7057,0x7058,0x7059,0x705a,0x705b,0x705c,0x705d,0x705f, +0x7060,0x7061,0x7062,0x7063,0x7064,0x7065,0x7066,0x7067, +0x7068,0x7069,0x706a,0x706e,0x7071,0x7072,0x7073,0x7074, +0x7077,0x7079,0x707a,0x707b,0x707d,0x7081,0x7082,0x7083, +0x7084,0x7086,0x7087,0x7088,0x708b,0x708c,0x708d,0x708f, +0x7090,0x7091,0x7093,0x7097,0x7098,0x709a,0x709b,0x709e, +0x709f,0x70a0,0x70a1,0x70a2,0x70a3,0x70a4,0x70a5,0x70a6, +0x70a7,0x70a8,0x70a9,0x70aa,0x70b0,0x70b2,0x70b4,0x70b5, +0x70b6,0x70ba,0x70be,0x70bf,0x70c4,0x70c5,0x70c6,0x70c7, +0x70c9,0x70cb,0x70cc,0x70cd,0x70ce,0x70cf,0x70d0,0x70d1, +0x70d2,0x70d3,0x70d4,0x70d5,0x70d6,0x70d7,0x70da,0x0000, +/* 0x9f00 */ +0x70dc,0x70dd,0x70de,0x70e0,0x70e1,0x70e2,0x70e3,0x70e5, +0x70ea,0x70ee,0x70f0,0x70f1,0x70f2,0x70f3,0x70f4,0x70f5, +0x70f6,0x70f8,0x70fa,0x70fb,0x70fc,0x70fe,0x70ff,0x7100, +0x7101,0x7102,0x7103,0x7104,0x7105,0x7106,0x7107,0x7108, +0x710b,0x710c,0x710d,0x710e,0x710f,0x7111,0x7112,0x7114, +0x7117,0x711b,0x711c,0x711d,0x711e,0x711f,0x7120,0x7121, +0x7122,0x7123,0x7124,0x7125,0x7127,0x7128,0x7129,0x712a, +0x712b,0x712c,0x712d,0x712e,0x7132,0x7133,0x7134,0x0000, +0x7135,0x7137,0x7138,0x7139,0x713a,0x713b,0x713c,0x713d, +0x713e,0x713f,0x7140,0x7141,0x7142,0x7143,0x7144,0x7146, +0x7147,0x7148,0x7149,0x714b,0x714d,0x714f,0x7150,0x7151, +0x7152,0x7153,0x7154,0x7155,0x7156,0x7157,0x7158,0x7159, +0x715a,0x715b,0x715d,0x715f,0x7160,0x7161,0x7162,0x7163, +0x7165,0x7169,0x716a,0x716b,0x716c,0x716d,0x716f,0x7170, +0x7171,0x7174,0x7175,0x7176,0x7177,0x7179,0x717b,0x717c, +0x717e,0x717f,0x7180,0x7181,0x7182,0x7183,0x7185,0x7186, +0x7187,0x7188,0x7189,0x718b,0x718c,0x718d,0x718e,0x7190, +0x7191,0x7192,0x7193,0x7195,0x7196,0x7197,0x719a,0x719b, +0x719c,0x719d,0x719e,0x71a1,0x71a2,0x71a3,0x71a4,0x71a5, +0x71a6,0x71a7,0x71a9,0x71aa,0x71ab,0x71ad,0x71ae,0x71af, +0x71b0,0x71b1,0x71b2,0x71b4,0x71b6,0x71b7,0x71b8,0x71ba, +0x71bb,0x71bc,0x71bd,0x71be,0x71bf,0x71c0,0x71c1,0x71c2, +0x71c4,0x71c5,0x71c6,0x71c7,0x71c8,0x71c9,0x71ca,0x71cb, +0x71cc,0x71cd,0x71cf,0x71d0,0x71d1,0x71d2,0x71d3,0x0000, +/* 0xa000 */ +0x71d6,0x71d7,0x71d8,0x71d9,0x71da,0x71db,0x71dc,0x71dd, +0x71de,0x71df,0x71e1,0x71e2,0x71e3,0x71e4,0x71e6,0x71e8, +0x71e9,0x71ea,0x71eb,0x71ec,0x71ed,0x71ef,0x71f0,0x71f1, +0x71f2,0x71f3,0x71f4,0x71f5,0x71f6,0x71f7,0x71f8,0x71fa, +0x71fb,0x71fc,0x71fd,0x71fe,0x71ff,0x7200,0x7201,0x7202, +0x7203,0x7204,0x7205,0x7207,0x7208,0x7209,0x720a,0x720b, +0x720c,0x720d,0x720e,0x720f,0x7210,0x7211,0x7212,0x7213, +0x7214,0x7215,0x7216,0x7217,0x7218,0x7219,0x721a,0x0000, +0x721b,0x721c,0x721e,0x721f,0x7220,0x7221,0x7222,0x7223, +0x7224,0x7225,0x7226,0x7227,0x7229,0x722b,0x722d,0x722e, +0x722f,0x7232,0x7233,0x7234,0x723a,0x723c,0x723e,0x7240, +0x7241,0x7242,0x7243,0x7244,0x7245,0x7246,0x7249,0x724a, +0x724b,0x724e,0x724f,0x7250,0x7251,0x7253,0x7254,0x7255, +0x7257,0x7258,0x725a,0x725c,0x725e,0x7260,0x7263,0x7264, +0x7265,0x7268,0x726a,0x726b,0x726c,0x726d,0x7270,0x7271, +0x7273,0x7274,0x7276,0x7277,0x7278,0x727b,0x727c,0x727d, +0x7282,0x7283,0x7285,0x7286,0x7287,0x7288,0x7289,0x728c, +0x728e,0x7290,0x7291,0x7293,0x7294,0x7295,0x7296,0x7297, +0x7298,0x7299,0x729a,0x729b,0x729c,0x729d,0x729e,0x72a0, +0x72a1,0x72a2,0x72a3,0x72a4,0x72a5,0x72a6,0x72a7,0x72a8, +0x72a9,0x72aa,0x72ab,0x72ae,0x72b1,0x72b2,0x72b3,0x72b5, +0x72ba,0x72bb,0x72bc,0x72bd,0x72be,0x72bf,0x72c0,0x72c5, +0x72c6,0x72c7,0x72c9,0x72ca,0x72cb,0x72cc,0x72cf,0x72d1, +0x72d3,0x72d4,0x72d5,0x72d6,0x72d8,0x72da,0x72db,0x0000, +/* 0xa100 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x3000,0x3001,0x3002,0x00b7,0x02c9,0x02c7,0x00a8, +0x3003,0x3005,0x2014,0xff5e,0x2016,0x2026,0x2018,0x2019, +0x201c,0x201d,0x3014,0x3015,0x3008,0x3009,0x300a,0x300b, +0x300c,0x300d,0x300e,0x300f,0x3016,0x3017,0x3010,0x3011, +0x00b1,0x00d7,0x00f7,0x2236,0x2227,0x2228,0x2211,0x220f, +0x222a,0x2229,0x2208,0x2237,0x221a,0x22a5,0x2225,0x2220, +0x2312,0x2299,0x222b,0x222e,0x2261,0x224c,0x2248,0x223d, +0x221d,0x2260,0x226e,0x226f,0x2264,0x2265,0x221e,0x2235, +0x2234,0x2642,0x2640,0x00b0,0x2032,0x2033,0x2103,0xff04, +0x00a4,0xffe0,0xffe1,0x2030,0x00a7,0x2116,0x2606,0x2605, +0x25cb,0x25cf,0x25ce,0x25c7,0x25c6,0x25a1,0x25a0,0x25b3, +0x25b2,0x203b,0x2192,0x2190,0x2191,0x2193,0x3013,0x0000, +/* 0xa200 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176, +0x2177,0x2178,0x2179,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x2488,0x2489,0x248a,0x248b,0x248c,0x248d,0x248e, +0x248f,0x2490,0x2491,0x2492,0x2493,0x2494,0x2495,0x2496, +0x2497,0x2498,0x2499,0x249a,0x249b,0x2474,0x2475,0x2476, +0x2477,0x2478,0x2479,0x247a,0x247b,0x247c,0x247d,0x247e, +0x247f,0x2480,0x2481,0x2482,0x2483,0x2484,0x2485,0x2486, +0x2487,0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466, +0x2467,0x2468,0x2469,0x20ac,0x0000,0x3220,0x3221,0x3222, +0x3223,0x3224,0x3225,0x3226,0x3227,0x3228,0x3229,0x0000, +0x0000,0x2160,0x2161,0x2162,0x2163,0x2164,0x2165,0x2166, +0x2167,0x2168,0x2169,0x216a,0x216b,0x0000,0x0000,0x0000, +/* 0xa300 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xff01,0xff02,0xff03,0xffe5,0xff05,0xff06,0xff07, +0xff08,0xff09,0xff0a,0xff0b,0xff0c,0xff0d,0xff0e,0xff0f, +0xff10,0xff11,0xff12,0xff13,0xff14,0xff15,0xff16,0xff17, +0xff18,0xff19,0xff1a,0xff1b,0xff1c,0xff1d,0xff1e,0xff1f, +0xff20,0xff21,0xff22,0xff23,0xff24,0xff25,0xff26,0xff27, +0xff28,0xff29,0xff2a,0xff2b,0xff2c,0xff2d,0xff2e,0xff2f, +0xff30,0xff31,0xff32,0xff33,0xff34,0xff35,0xff36,0xff37, +0xff38,0xff39,0xff3a,0xff3b,0xff3c,0xff3d,0xff3e,0xff3f, +0xff40,0xff41,0xff42,0xff43,0xff44,0xff45,0xff46,0xff47, +0xff48,0xff49,0xff4a,0xff4b,0xff4c,0xff4d,0xff4e,0xff4f, +0xff50,0xff51,0xff52,0xff53,0xff54,0xff55,0xff56,0xff57, +0xff58,0xff59,0xff5a,0xff5b,0xff5c,0xff5d,0xffe3,0x0000, +/* 0xa400 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x3041,0x3042,0x3043,0x3044,0x3045,0x3046,0x3047, +0x3048,0x3049,0x304a,0x304b,0x304c,0x304d,0x304e,0x304f, +0x3050,0x3051,0x3052,0x3053,0x3054,0x3055,0x3056,0x3057, +0x3058,0x3059,0x305a,0x305b,0x305c,0x305d,0x305e,0x305f, +0x3060,0x3061,0x3062,0x3063,0x3064,0x3065,0x3066,0x3067, +0x3068,0x3069,0x306a,0x306b,0x306c,0x306d,0x306e,0x306f, +0x3070,0x3071,0x3072,0x3073,0x3074,0x3075,0x3076,0x3077, +0x3078,0x3079,0x307a,0x307b,0x307c,0x307d,0x307e,0x307f, +0x3080,0x3081,0x3082,0x3083,0x3084,0x3085,0x3086,0x3087, +0x3088,0x3089,0x308a,0x308b,0x308c,0x308d,0x308e,0x308f, +0x3090,0x3091,0x3092,0x3093,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xa500 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x30a1,0x30a2,0x30a3,0x30a4,0x30a5,0x30a6,0x30a7, +0x30a8,0x30a9,0x30aa,0x30ab,0x30ac,0x30ad,0x30ae,0x30af, +0x30b0,0x30b1,0x30b2,0x30b3,0x30b4,0x30b5,0x30b6,0x30b7, +0x30b8,0x30b9,0x30ba,0x30bb,0x30bc,0x30bd,0x30be,0x30bf, +0x30c0,0x30c1,0x30c2,0x30c3,0x30c4,0x30c5,0x30c6,0x30c7, +0x30c8,0x30c9,0x30ca,0x30cb,0x30cc,0x30cd,0x30ce,0x30cf, +0x30d0,0x30d1,0x30d2,0x30d3,0x30d4,0x30d5,0x30d6,0x30d7, +0x30d8,0x30d9,0x30da,0x30db,0x30dc,0x30dd,0x30de,0x30df, +0x30e0,0x30e1,0x30e2,0x30e3,0x30e4,0x30e5,0x30e6,0x30e7, +0x30e8,0x30e9,0x30ea,0x30eb,0x30ec,0x30ed,0x30ee,0x30ef, +0x30f0,0x30f1,0x30f2,0x30f3,0x30f4,0x30f5,0x30f6,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xa600 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397, +0x0398,0x0399,0x039a,0x039b,0x039c,0x039d,0x039e,0x039f, +0x03a0,0x03a1,0x03a3,0x03a4,0x03a5,0x03a6,0x03a7,0x03a8, +0x03a9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x03b1,0x03b2,0x03b3,0x03b4,0x03b5,0x03b6,0x03b7, +0x03b8,0x03b9,0x03ba,0x03bb,0x03bc,0x03bd,0x03be,0x03bf, +0x03c0,0x03c1,0x03c3,0x03c4,0x03c5,0x03c6,0x03c7,0x03c8, +0x03c9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xfe35,0xfe36,0xfe39,0xfe3a,0xfe3f,0xfe40,0xfe3d,0xfe3e, +0xfe41,0xfe42,0xfe43,0xfe44,0x0000,0x0000,0xfe3b,0xfe3c, +0xfe37,0xfe38,0xfe31,0x0000,0xfe33,0xfe34,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xa700 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0401, +0x0416,0x0417,0x0418,0x0419,0x041a,0x041b,0x041c,0x041d, +0x041e,0x041f,0x0420,0x0421,0x0422,0x0423,0x0424,0x0425, +0x0426,0x0427,0x0428,0x0429,0x042a,0x042b,0x042c,0x042d, +0x042e,0x042f,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0451, +0x0436,0x0437,0x0438,0x0439,0x043a,0x043b,0x043c,0x043d, +0x043e,0x043f,0x0440,0x0441,0x0442,0x0443,0x0444,0x0445, +0x0446,0x0447,0x0448,0x0449,0x044a,0x044b,0x044c,0x044d, +0x044e,0x044f,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xa800 */ +0x02ca,0x02cb,0x02d9,0x2013,0x2015,0x2025,0x2035,0x2105, +0x2109,0x2196,0x2197,0x2198,0x2199,0x2215,0x221f,0x2223, +0x2252,0x2266,0x2267,0x22bf,0x2550,0x2551,0x2552,0x2553, +0x2554,0x2555,0x2556,0x2557,0x2558,0x2559,0x255a,0x255b, +0x255c,0x255d,0x255e,0x255f,0x2560,0x2561,0x2562,0x2563, +0x2564,0x2565,0x2566,0x2567,0x2568,0x2569,0x256a,0x256b, +0x256c,0x256d,0x256e,0x256f,0x2570,0x2571,0x2572,0x2573, +0x2581,0x2582,0x2583,0x2584,0x2585,0x2586,0x2587,0x0000, +0x2588,0x2589,0x258a,0x258b,0x258c,0x258d,0x258e,0x258f, +0x2593,0x2594,0x2595,0x25bc,0x25bd,0x25e2,0x25e3,0x25e4, +0x25e5,0x2609,0x2295,0x3012,0x301d,0x301e,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0101,0x00e1,0x01ce,0x00e0,0x0113,0x00e9,0x011b, +0x00e8,0x012b,0x00ed,0x01d0,0x00ec,0x014d,0x00f3,0x01d2, +0x00f2,0x016b,0x00fa,0x01d4,0x00f9,0x01d6,0x01d8,0x01da, +0x01dc,0x00fc,0x00ea,0x0251,0x0000,0x0144,0x0148,0x01f9, +0x0261,0x0000,0x0000,0x0000,0x0000,0x3105,0x3106,0x3107, +0x3108,0x3109,0x310a,0x310b,0x310c,0x310d,0x310e,0x310f, +0x3110,0x3111,0x3112,0x3113,0x3114,0x3115,0x3116,0x3117, +0x3118,0x3119,0x311a,0x311b,0x311c,0x311d,0x311e,0x311f, +0x3120,0x3121,0x3122,0x3123,0x3124,0x3125,0x3126,0x3127, +0x3128,0x3129,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xa900 */ +0x3021,0x3022,0x3023,0x3024,0x3025,0x3026,0x3027,0x3028, +0x3029,0x32a3,0x338e,0x338f,0x339c,0x339d,0x339e,0x33a1, +0x33c4,0x33ce,0x33d1,0x33d2,0x33d5,0xfe30,0xffe2,0xffe4, +0x0000,0x2121,0x3231,0x0000,0x2010,0x0000,0x0000,0x0000, +0x30fc,0x309b,0x309c,0x30fd,0x30fe,0x3006,0x309d,0x309e, +0xfe49,0xfe4a,0xfe4b,0xfe4c,0xfe4d,0xfe4e,0xfe4f,0xfe50, +0xfe51,0xfe52,0xfe54,0xfe55,0xfe56,0xfe57,0xfe59,0xfe5a, +0xfe5b,0xfe5c,0xfe5d,0xfe5e,0xfe5f,0xfe60,0xfe61,0x0000, +0xfe62,0xfe63,0xfe64,0xfe65,0xfe66,0xfe68,0xfe69,0xfe6a, +0xfe6b,0x303e,0x2ff0,0x2ff1,0x2ff2,0x2ff3,0x2ff4,0x2ff5, +0x2ff6,0x2ff7,0x2ff8,0x2ff9,0x2ffa,0x2ffb,0x3007,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x2500,0x2501,0x2502,0x2503, +0x2504,0x2505,0x2506,0x2507,0x2508,0x2509,0x250a,0x250b, +0x250c,0x250d,0x250e,0x250f,0x2510,0x2511,0x2512,0x2513, +0x2514,0x2515,0x2516,0x2517,0x2518,0x2519,0x251a,0x251b, +0x251c,0x251d,0x251e,0x251f,0x2520,0x2521,0x2522,0x2523, +0x2524,0x2525,0x2526,0x2527,0x2528,0x2529,0x252a,0x252b, +0x252c,0x252d,0x252e,0x252f,0x2530,0x2531,0x2532,0x2533, +0x2534,0x2535,0x2536,0x2537,0x2538,0x2539,0x253a,0x253b, +0x253c,0x253d,0x253e,0x253f,0x2540,0x2541,0x2542,0x2543, +0x2544,0x2545,0x2546,0x2547,0x2548,0x2549,0x254a,0x254b, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xaa00 */ +0x72dc,0x72dd,0x72df,0x72e2,0x72e3,0x72e4,0x72e5,0x72e6, +0x72e7,0x72ea,0x72eb,0x72f5,0x72f6,0x72f9,0x72fd,0x72fe, +0x72ff,0x7300,0x7302,0x7304,0x7305,0x7306,0x7307,0x7308, +0x7309,0x730b,0x730c,0x730d,0x730f,0x7310,0x7311,0x7312, +0x7314,0x7318,0x7319,0x731a,0x731f,0x7320,0x7323,0x7324, +0x7326,0x7327,0x7328,0x732d,0x732f,0x7330,0x7332,0x7333, +0x7335,0x7336,0x733a,0x733b,0x733c,0x733d,0x7340,0x7341, +0x7342,0x7343,0x7344,0x7345,0x7346,0x7347,0x7348,0x0000, +0x7349,0x734a,0x734b,0x734c,0x734e,0x734f,0x7351,0x7353, +0x7354,0x7355,0x7356,0x7358,0x7359,0x735a,0x735b,0x735c, +0x735d,0x735e,0x735f,0x7361,0x7362,0x7363,0x7364,0x7365, +0x7366,0x7367,0x7368,0x7369,0x736a,0x736b,0x736e,0x7370, +0x7371,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xab00 */ +0x7372,0x7373,0x7374,0x7375,0x7376,0x7377,0x7378,0x7379, +0x737a,0x737b,0x737c,0x737d,0x737f,0x7380,0x7381,0x7382, +0x7383,0x7385,0x7386,0x7388,0x738a,0x738c,0x738d,0x738f, +0x7390,0x7392,0x7393,0x7394,0x7395,0x7397,0x7398,0x7399, +0x739a,0x739c,0x739d,0x739e,0x73a0,0x73a1,0x73a3,0x73a4, +0x73a5,0x73a6,0x73a7,0x73a8,0x73aa,0x73ac,0x73ad,0x73b1, +0x73b4,0x73b5,0x73b6,0x73b8,0x73b9,0x73bc,0x73bd,0x73be, +0x73bf,0x73c1,0x73c3,0x73c4,0x73c5,0x73c6,0x73c7,0x0000, +0x73cb,0x73cc,0x73ce,0x73d2,0x73d3,0x73d4,0x73d5,0x73d6, +0x73d7,0x73d8,0x73da,0x73db,0x73dc,0x73dd,0x73df,0x73e1, +0x73e2,0x73e3,0x73e4,0x73e6,0x73e8,0x73ea,0x73eb,0x73ec, +0x73ee,0x73ef,0x73f0,0x73f1,0x73f3,0x73f4,0x73f5,0x73f6, +0x73f7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xac00 */ +0x73f8,0x73f9,0x73fa,0x73fb,0x73fc,0x73fd,0x73fe,0x73ff, +0x7400,0x7401,0x7402,0x7404,0x7407,0x7408,0x740b,0x740c, +0x740d,0x740e,0x7411,0x7412,0x7413,0x7414,0x7415,0x7416, +0x7417,0x7418,0x7419,0x741c,0x741d,0x741e,0x741f,0x7420, +0x7421,0x7423,0x7424,0x7427,0x7429,0x742b,0x742d,0x742f, +0x7431,0x7432,0x7437,0x7438,0x7439,0x743a,0x743b,0x743d, +0x743e,0x743f,0x7440,0x7442,0x7443,0x7444,0x7445,0x7446, +0x7447,0x7448,0x7449,0x744a,0x744b,0x744c,0x744d,0x0000, +0x744e,0x744f,0x7450,0x7451,0x7452,0x7453,0x7454,0x7456, +0x7458,0x745d,0x7460,0x7461,0x7462,0x7463,0x7464,0x7465, +0x7466,0x7467,0x7468,0x7469,0x746a,0x746b,0x746c,0x746e, +0x746f,0x7471,0x7472,0x7473,0x7474,0x7475,0x7478,0x7479, +0x747a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xad00 */ +0x747b,0x747c,0x747d,0x747f,0x7482,0x7484,0x7485,0x7486, +0x7488,0x7489,0x748a,0x748c,0x748d,0x748f,0x7491,0x7492, +0x7493,0x7494,0x7495,0x7496,0x7497,0x7498,0x7499,0x749a, +0x749b,0x749d,0x749f,0x74a0,0x74a1,0x74a2,0x74a3,0x74a4, +0x74a5,0x74a6,0x74aa,0x74ab,0x74ac,0x74ad,0x74ae,0x74af, +0x74b0,0x74b1,0x74b2,0x74b3,0x74b4,0x74b5,0x74b6,0x74b7, +0x74b8,0x74b9,0x74bb,0x74bc,0x74bd,0x74be,0x74bf,0x74c0, +0x74c1,0x74c2,0x74c3,0x74c4,0x74c5,0x74c6,0x74c7,0x0000, +0x74c8,0x74c9,0x74ca,0x74cb,0x74cc,0x74cd,0x74ce,0x74cf, +0x74d0,0x74d1,0x74d3,0x74d4,0x74d5,0x74d6,0x74d7,0x74d8, +0x74d9,0x74da,0x74db,0x74dd,0x74df,0x74e1,0x74e5,0x74e7, +0x74e8,0x74e9,0x74ea,0x74eb,0x74ec,0x74ed,0x74f0,0x74f1, +0x74f2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xae00 */ +0x74f3,0x74f5,0x74f8,0x74f9,0x74fa,0x74fb,0x74fc,0x74fd, +0x74fe,0x7500,0x7501,0x7502,0x7503,0x7505,0x7506,0x7507, +0x7508,0x7509,0x750a,0x750b,0x750c,0x750e,0x7510,0x7512, +0x7514,0x7515,0x7516,0x7517,0x751b,0x751d,0x751e,0x7520, +0x7521,0x7522,0x7523,0x7524,0x7526,0x7527,0x752a,0x752e, +0x7534,0x7536,0x7539,0x753c,0x753d,0x753f,0x7541,0x7542, +0x7543,0x7544,0x7546,0x7547,0x7549,0x754a,0x754d,0x7550, +0x7551,0x7552,0x7553,0x7555,0x7556,0x7557,0x7558,0x0000, +0x755d,0x755e,0x755f,0x7560,0x7561,0x7562,0x7563,0x7564, +0x7567,0x7568,0x7569,0x756b,0x756c,0x756d,0x756e,0x756f, +0x7570,0x7571,0x7573,0x7575,0x7576,0x7577,0x757a,0x757b, +0x757c,0x757d,0x757e,0x7580,0x7581,0x7582,0x7584,0x7585, +0x7587,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xaf00 */ +0x7588,0x7589,0x758a,0x758c,0x758d,0x758e,0x7590,0x7593, +0x7595,0x7598,0x759b,0x759c,0x759e,0x75a2,0x75a6,0x75a7, +0x75a8,0x75a9,0x75aa,0x75ad,0x75b6,0x75b7,0x75ba,0x75bb, +0x75bf,0x75c0,0x75c1,0x75c6,0x75cb,0x75cc,0x75ce,0x75cf, +0x75d0,0x75d1,0x75d3,0x75d7,0x75d9,0x75da,0x75dc,0x75dd, +0x75df,0x75e0,0x75e1,0x75e5,0x75e9,0x75ec,0x75ed,0x75ee, +0x75ef,0x75f2,0x75f3,0x75f5,0x75f6,0x75f7,0x75f8,0x75fa, +0x75fb,0x75fd,0x75fe,0x7602,0x7604,0x7606,0x7607,0x0000, +0x7608,0x7609,0x760b,0x760d,0x760e,0x760f,0x7611,0x7612, +0x7613,0x7614,0x7616,0x761a,0x761c,0x761d,0x761e,0x7621, +0x7623,0x7627,0x7628,0x762c,0x762e,0x762f,0x7631,0x7632, +0x7636,0x7637,0x7639,0x763a,0x763b,0x763d,0x7641,0x7642, +0x7644,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xb000 */ +0x7645,0x7646,0x7647,0x7648,0x7649,0x764a,0x764b,0x764e, +0x764f,0x7650,0x7651,0x7652,0x7653,0x7655,0x7657,0x7658, +0x7659,0x765a,0x765b,0x765d,0x765f,0x7660,0x7661,0x7662, +0x7664,0x7665,0x7666,0x7667,0x7668,0x7669,0x766a,0x766c, +0x766d,0x766e,0x7670,0x7671,0x7672,0x7673,0x7674,0x7675, +0x7676,0x7677,0x7679,0x767a,0x767c,0x767f,0x7680,0x7681, +0x7683,0x7685,0x7689,0x768a,0x768c,0x768d,0x768f,0x7690, +0x7692,0x7694,0x7695,0x7697,0x7698,0x769a,0x769b,0x0000, +0x769c,0x769d,0x769e,0x769f,0x76a0,0x76a1,0x76a2,0x76a3, +0x76a5,0x76a6,0x76a7,0x76a8,0x76a9,0x76aa,0x76ab,0x76ac, +0x76ad,0x76af,0x76b0,0x76b3,0x76b5,0x76b6,0x76b7,0x76b8, +0x76b9,0x76ba,0x76bb,0x76bc,0x76bd,0x76be,0x76c0,0x76c1, +0x76c3,0x554a,0x963f,0x57c3,0x6328,0x54ce,0x5509,0x54c0, +0x7691,0x764c,0x853c,0x77ee,0x827e,0x788d,0x7231,0x9698, +0x978d,0x6c28,0x5b89,0x4ffa,0x6309,0x6697,0x5cb8,0x80fa, +0x6848,0x80ae,0x6602,0x76ce,0x51f9,0x6556,0x71ac,0x7ff1, +0x8884,0x50b2,0x5965,0x61ca,0x6fb3,0x82ad,0x634c,0x6252, +0x53ed,0x5427,0x7b06,0x516b,0x75a4,0x5df4,0x62d4,0x8dcb, +0x9776,0x628a,0x8019,0x575d,0x9738,0x7f62,0x7238,0x767d, +0x67cf,0x767e,0x6446,0x4f70,0x8d25,0x62dc,0x7a17,0x6591, +0x73ed,0x642c,0x6273,0x822c,0x9881,0x677f,0x7248,0x626e, +0x62cc,0x4f34,0x74e3,0x534a,0x529e,0x7eca,0x90a6,0x5e2e, +0x6886,0x699c,0x8180,0x7ed1,0x68d2,0x78c5,0x868c,0x9551, +0x508d,0x8c24,0x82de,0x80de,0x5305,0x8912,0x5265,0x0000, +/* 0xb100 */ +0x76c4,0x76c7,0x76c9,0x76cb,0x76cc,0x76d3,0x76d5,0x76d9, +0x76da,0x76dc,0x76dd,0x76de,0x76e0,0x76e1,0x76e2,0x76e3, +0x76e4,0x76e6,0x76e7,0x76e8,0x76e9,0x76ea,0x76eb,0x76ec, +0x76ed,0x76f0,0x76f3,0x76f5,0x76f6,0x76f7,0x76fa,0x76fb, +0x76fd,0x76ff,0x7700,0x7702,0x7703,0x7705,0x7706,0x770a, +0x770c,0x770e,0x770f,0x7710,0x7711,0x7712,0x7713,0x7714, +0x7715,0x7716,0x7717,0x7718,0x771b,0x771c,0x771d,0x771e, +0x7721,0x7723,0x7724,0x7725,0x7727,0x772a,0x772b,0x0000, +0x772c,0x772e,0x7730,0x7731,0x7732,0x7733,0x7734,0x7739, +0x773b,0x773d,0x773e,0x773f,0x7742,0x7744,0x7745,0x7746, +0x7748,0x7749,0x774a,0x774b,0x774c,0x774d,0x774e,0x774f, +0x7752,0x7753,0x7754,0x7755,0x7756,0x7757,0x7758,0x7759, +0x775c,0x8584,0x96f9,0x4fdd,0x5821,0x9971,0x5b9d,0x62b1, +0x62a5,0x66b4,0x8c79,0x9c8d,0x7206,0x676f,0x7891,0x60b2, +0x5351,0x5317,0x8f88,0x80cc,0x8d1d,0x94a1,0x500d,0x72c8, +0x5907,0x60eb,0x7119,0x88ab,0x5954,0x82ef,0x672c,0x7b28, +0x5d29,0x7ef7,0x752d,0x6cf5,0x8e66,0x8ff8,0x903c,0x9f3b, +0x6bd4,0x9119,0x7b14,0x5f7c,0x78a7,0x84d6,0x853d,0x6bd5, +0x6bd9,0x6bd6,0x5e01,0x5e87,0x75f9,0x95ed,0x655d,0x5f0a, +0x5fc5,0x8f9f,0x58c1,0x81c2,0x907f,0x965b,0x97ad,0x8fb9, +0x7f16,0x8d2c,0x6241,0x4fbf,0x53d8,0x535e,0x8fa8,0x8fa9, +0x8fab,0x904d,0x6807,0x5f6a,0x8198,0x8868,0x9cd6,0x618b, +0x522b,0x762a,0x5f6c,0x658c,0x6fd2,0x6ee8,0x5bbe,0x6448, +0x5175,0x51b0,0x67c4,0x4e19,0x79c9,0x997c,0x70b3,0x0000, +/* 0xb200 */ +0x775d,0x775e,0x775f,0x7760,0x7764,0x7767,0x7769,0x776a, +0x776d,0x776e,0x776f,0x7770,0x7771,0x7772,0x7773,0x7774, +0x7775,0x7776,0x7777,0x7778,0x777a,0x777b,0x777c,0x7781, +0x7782,0x7783,0x7786,0x7787,0x7788,0x7789,0x778a,0x778b, +0x778f,0x7790,0x7793,0x7794,0x7795,0x7796,0x7797,0x7798, +0x7799,0x779a,0x779b,0x779c,0x779d,0x779e,0x77a1,0x77a3, +0x77a4,0x77a6,0x77a8,0x77ab,0x77ad,0x77ae,0x77af,0x77b1, +0x77b2,0x77b4,0x77b6,0x77b7,0x77b8,0x77b9,0x77ba,0x0000, +0x77bc,0x77be,0x77c0,0x77c1,0x77c2,0x77c3,0x77c4,0x77c5, +0x77c6,0x77c7,0x77c8,0x77c9,0x77ca,0x77cb,0x77cc,0x77ce, +0x77cf,0x77d0,0x77d1,0x77d2,0x77d3,0x77d4,0x77d5,0x77d6, +0x77d8,0x77d9,0x77da,0x77dd,0x77de,0x77df,0x77e0,0x77e1, +0x77e4,0x75c5,0x5e76,0x73bb,0x83e0,0x64ad,0x62e8,0x94b5, +0x6ce2,0x535a,0x52c3,0x640f,0x94c2,0x7b94,0x4f2f,0x5e1b, +0x8236,0x8116,0x818a,0x6e24,0x6cca,0x9a73,0x6355,0x535c, +0x54fa,0x8865,0x57e0,0x4e0d,0x5e03,0x6b65,0x7c3f,0x90e8, +0x6016,0x64e6,0x731c,0x88c1,0x6750,0x624d,0x8d22,0x776c, +0x8e29,0x91c7,0x5f69,0x83dc,0x8521,0x9910,0x53c2,0x8695, +0x6b8b,0x60ed,0x60e8,0x707f,0x82cd,0x8231,0x4ed3,0x6ca7, +0x85cf,0x64cd,0x7cd9,0x69fd,0x66f9,0x8349,0x5395,0x7b56, +0x4fa7,0x518c,0x6d4b,0x5c42,0x8e6d,0x63d2,0x53c9,0x832c, +0x8336,0x67e5,0x78b4,0x643d,0x5bdf,0x5c94,0x5dee,0x8be7, +0x62c6,0x67f4,0x8c7a,0x6400,0x63ba,0x8749,0x998b,0x8c17, +0x7f20,0x94f2,0x4ea7,0x9610,0x98a4,0x660c,0x7316,0x0000, +/* 0xb300 */ +0x77e6,0x77e8,0x77ea,0x77ef,0x77f0,0x77f1,0x77f2,0x77f4, +0x77f5,0x77f7,0x77f9,0x77fa,0x77fb,0x77fc,0x7803,0x7804, +0x7805,0x7806,0x7807,0x7808,0x780a,0x780b,0x780e,0x780f, +0x7810,0x7813,0x7815,0x7819,0x781b,0x781e,0x7820,0x7821, +0x7822,0x7824,0x7828,0x782a,0x782b,0x782e,0x782f,0x7831, +0x7832,0x7833,0x7835,0x7836,0x783d,0x783f,0x7841,0x7842, +0x7843,0x7844,0x7846,0x7848,0x7849,0x784a,0x784b,0x784d, +0x784f,0x7851,0x7853,0x7854,0x7858,0x7859,0x785a,0x0000, +0x785b,0x785c,0x785e,0x785f,0x7860,0x7861,0x7862,0x7863, +0x7864,0x7865,0x7866,0x7867,0x7868,0x7869,0x786f,0x7870, +0x7871,0x7872,0x7873,0x7874,0x7875,0x7876,0x7878,0x7879, +0x787a,0x787b,0x787d,0x787e,0x787f,0x7880,0x7881,0x7882, +0x7883,0x573a,0x5c1d,0x5e38,0x957f,0x507f,0x80a0,0x5382, +0x655e,0x7545,0x5531,0x5021,0x8d85,0x6284,0x949e,0x671d, +0x5632,0x6f6e,0x5de2,0x5435,0x7092,0x8f66,0x626f,0x64a4, +0x63a3,0x5f7b,0x6f88,0x90f4,0x81e3,0x8fb0,0x5c18,0x6668, +0x5ff1,0x6c89,0x9648,0x8d81,0x886c,0x6491,0x79f0,0x57ce, +0x6a59,0x6210,0x5448,0x4e58,0x7a0b,0x60e9,0x6f84,0x8bda, +0x627f,0x901e,0x9a8b,0x79e4,0x5403,0x75f4,0x6301,0x5319, +0x6c60,0x8fdf,0x5f1b,0x9a70,0x803b,0x9f7f,0x4f88,0x5c3a, +0x8d64,0x7fc5,0x65a5,0x70bd,0x5145,0x51b2,0x866b,0x5d07, +0x5ba0,0x62bd,0x916c,0x7574,0x8e0c,0x7a20,0x6101,0x7b79, +0x4ec7,0x7ef8,0x7785,0x4e11,0x81ed,0x521d,0x51fa,0x6a71, +0x53a8,0x8e87,0x9504,0x96cf,0x6ec1,0x9664,0x695a,0x0000, +/* 0xb400 */ +0x7884,0x7885,0x7886,0x7888,0x788a,0x788b,0x788f,0x7890, +0x7892,0x7894,0x7895,0x7896,0x7899,0x789d,0x789e,0x78a0, +0x78a2,0x78a4,0x78a6,0x78a8,0x78a9,0x78aa,0x78ab,0x78ac, +0x78ad,0x78ae,0x78af,0x78b5,0x78b6,0x78b7,0x78b8,0x78ba, +0x78bb,0x78bc,0x78bd,0x78bf,0x78c0,0x78c2,0x78c3,0x78c4, +0x78c6,0x78c7,0x78c8,0x78cc,0x78cd,0x78ce,0x78cf,0x78d1, +0x78d2,0x78d3,0x78d6,0x78d7,0x78d8,0x78da,0x78db,0x78dc, +0x78dd,0x78de,0x78df,0x78e0,0x78e1,0x78e2,0x78e3,0x0000, +0x78e4,0x78e5,0x78e6,0x78e7,0x78e9,0x78ea,0x78eb,0x78ed, +0x78ee,0x78ef,0x78f0,0x78f1,0x78f3,0x78f5,0x78f6,0x78f8, +0x78f9,0x78fb,0x78fc,0x78fd,0x78fe,0x78ff,0x7900,0x7902, +0x7903,0x7904,0x7906,0x7907,0x7908,0x7909,0x790a,0x790b, +0x790c,0x7840,0x50a8,0x77d7,0x6410,0x89e6,0x5904,0x63e3, +0x5ddd,0x7a7f,0x693d,0x4f20,0x8239,0x5598,0x4e32,0x75ae, +0x7a97,0x5e62,0x5e8a,0x95ef,0x521b,0x5439,0x708a,0x6376, +0x9524,0x5782,0x6625,0x693f,0x9187,0x5507,0x6df3,0x7eaf, +0x8822,0x6233,0x7ef0,0x75b5,0x8328,0x78c1,0x96cc,0x8f9e, +0x6148,0x74f7,0x8bcd,0x6b64,0x523a,0x8d50,0x6b21,0x806a, +0x8471,0x56f1,0x5306,0x4ece,0x4e1b,0x51d1,0x7c97,0x918b, +0x7c07,0x4fc3,0x8e7f,0x7be1,0x7a9c,0x6467,0x5d14,0x50ac, +0x8106,0x7601,0x7cb9,0x6dec,0x7fe0,0x6751,0x5b58,0x5bf8, +0x78cb,0x64ae,0x6413,0x63aa,0x632b,0x9519,0x642d,0x8fbe, +0x7b54,0x7629,0x6253,0x5927,0x5446,0x6b79,0x50a3,0x6234, +0x5e26,0x6b86,0x4ee3,0x8d37,0x888b,0x5f85,0x902e,0x0000, +/* 0xb500 */ +0x790d,0x790e,0x790f,0x7910,0x7911,0x7912,0x7914,0x7915, +0x7916,0x7917,0x7918,0x7919,0x791a,0x791b,0x791c,0x791d, +0x791f,0x7920,0x7921,0x7922,0x7923,0x7925,0x7926,0x7927, +0x7928,0x7929,0x792a,0x792b,0x792c,0x792d,0x792e,0x792f, +0x7930,0x7931,0x7932,0x7933,0x7935,0x7936,0x7937,0x7938, +0x7939,0x793d,0x793f,0x7942,0x7943,0x7944,0x7945,0x7947, +0x794a,0x794b,0x794c,0x794d,0x794e,0x794f,0x7950,0x7951, +0x7952,0x7954,0x7955,0x7958,0x7959,0x7961,0x7963,0x0000, +0x7964,0x7966,0x7969,0x796a,0x796b,0x796c,0x796e,0x7970, +0x7971,0x7972,0x7973,0x7974,0x7975,0x7976,0x7979,0x797b, +0x797c,0x797d,0x797e,0x797f,0x7982,0x7983,0x7986,0x7987, +0x7988,0x7989,0x798b,0x798c,0x798d,0x798e,0x7990,0x7991, +0x7992,0x6020,0x803d,0x62c5,0x4e39,0x5355,0x90f8,0x63b8, +0x80c6,0x65e6,0x6c2e,0x4f46,0x60ee,0x6de1,0x8bde,0x5f39, +0x86cb,0x5f53,0x6321,0x515a,0x8361,0x6863,0x5200,0x6363, +0x8e48,0x5012,0x5c9b,0x7977,0x5bfc,0x5230,0x7a3b,0x60bc, +0x9053,0x76d7,0x5fb7,0x5f97,0x7684,0x8e6c,0x706f,0x767b, +0x7b49,0x77aa,0x51f3,0x9093,0x5824,0x4f4e,0x6ef4,0x8fea, +0x654c,0x7b1b,0x72c4,0x6da4,0x7fdf,0x5ae1,0x62b5,0x5e95, +0x5730,0x8482,0x7b2c,0x5e1d,0x5f1f,0x9012,0x7f14,0x98a0, +0x6382,0x6ec7,0x7898,0x70b9,0x5178,0x975b,0x57ab,0x7535, +0x4f43,0x7538,0x5e97,0x60e6,0x5960,0x6dc0,0x6bbf,0x7889, +0x53fc,0x96d5,0x51cb,0x5201,0x6389,0x540a,0x9493,0x8c03, +0x8dcc,0x7239,0x789f,0x8776,0x8fed,0x8c0d,0x53e0,0x0000, +/* 0xb600 */ +0x7993,0x7994,0x7995,0x7996,0x7997,0x7998,0x7999,0x799b, +0x799c,0x799d,0x799e,0x799f,0x79a0,0x79a1,0x79a2,0x79a3, +0x79a4,0x79a5,0x79a6,0x79a8,0x79a9,0x79aa,0x79ab,0x79ac, +0x79ad,0x79ae,0x79af,0x79b0,0x79b1,0x79b2,0x79b4,0x79b5, +0x79b6,0x79b7,0x79b8,0x79bc,0x79bf,0x79c2,0x79c4,0x79c5, +0x79c7,0x79c8,0x79ca,0x79cc,0x79ce,0x79cf,0x79d0,0x79d3, +0x79d4,0x79d6,0x79d7,0x79d9,0x79da,0x79db,0x79dc,0x79dd, +0x79de,0x79e0,0x79e1,0x79e2,0x79e5,0x79e8,0x79ea,0x0000, +0x79ec,0x79ee,0x79f1,0x79f2,0x79f3,0x79f4,0x79f5,0x79f6, +0x79f7,0x79f9,0x79fa,0x79fc,0x79fe,0x79ff,0x7a01,0x7a04, +0x7a05,0x7a07,0x7a08,0x7a09,0x7a0a,0x7a0c,0x7a0f,0x7a10, +0x7a11,0x7a12,0x7a13,0x7a15,0x7a16,0x7a18,0x7a19,0x7a1b, +0x7a1c,0x4e01,0x76ef,0x53ee,0x9489,0x9876,0x9f0e,0x952d, +0x5b9a,0x8ba2,0x4e22,0x4e1c,0x51ac,0x8463,0x61c2,0x52a8, +0x680b,0x4f97,0x606b,0x51bb,0x6d1e,0x515c,0x6296,0x6597, +0x9661,0x8c46,0x9017,0x75d8,0x90fd,0x7763,0x6bd2,0x728a, +0x72ec,0x8bfb,0x5835,0x7779,0x8d4c,0x675c,0x9540,0x809a, +0x5ea6,0x6e21,0x5992,0x7aef,0x77ed,0x953b,0x6bb5,0x65ad, +0x7f0e,0x5806,0x5151,0x961f,0x5bf9,0x58a9,0x5428,0x8e72, +0x6566,0x987f,0x56e4,0x949d,0x76fe,0x9041,0x6387,0x54c6, +0x591a,0x593a,0x579b,0x8eb2,0x6735,0x8dfa,0x8235,0x5241, +0x60f0,0x5815,0x86fe,0x5ce8,0x9e45,0x4fc4,0x989d,0x8bb9, +0x5a25,0x6076,0x5384,0x627c,0x904f,0x9102,0x997f,0x6069, +0x800c,0x513f,0x8033,0x5c14,0x9975,0x6d31,0x4e8c,0x0000, +/* 0xb700 */ +0x7a1d,0x7a1f,0x7a21,0x7a22,0x7a24,0x7a25,0x7a26,0x7a27, +0x7a28,0x7a29,0x7a2a,0x7a2b,0x7a2c,0x7a2d,0x7a2e,0x7a2f, +0x7a30,0x7a31,0x7a32,0x7a34,0x7a35,0x7a36,0x7a38,0x7a3a, +0x7a3e,0x7a40,0x7a41,0x7a42,0x7a43,0x7a44,0x7a45,0x7a47, +0x7a48,0x7a49,0x7a4a,0x7a4b,0x7a4c,0x7a4d,0x7a4e,0x7a4f, +0x7a50,0x7a52,0x7a53,0x7a54,0x7a55,0x7a56,0x7a58,0x7a59, +0x7a5a,0x7a5b,0x7a5c,0x7a5d,0x7a5e,0x7a5f,0x7a60,0x7a61, +0x7a62,0x7a63,0x7a64,0x7a65,0x7a66,0x7a67,0x7a68,0x0000, +0x7a69,0x7a6a,0x7a6b,0x7a6c,0x7a6d,0x7a6e,0x7a6f,0x7a71, +0x7a72,0x7a73,0x7a75,0x7a7b,0x7a7c,0x7a7d,0x7a7e,0x7a82, +0x7a85,0x7a87,0x7a89,0x7a8a,0x7a8b,0x7a8c,0x7a8e,0x7a8f, +0x7a90,0x7a93,0x7a94,0x7a99,0x7a9a,0x7a9b,0x7a9e,0x7aa1, +0x7aa2,0x8d30,0x53d1,0x7f5a,0x7b4f,0x4f10,0x4e4f,0x9600, +0x6cd5,0x73d0,0x85e9,0x5e06,0x756a,0x7ffb,0x6a0a,0x77fe, +0x9492,0x7e41,0x51e1,0x70e6,0x53cd,0x8fd4,0x8303,0x8d29, +0x72af,0x996d,0x6cdb,0x574a,0x82b3,0x65b9,0x80aa,0x623f, +0x9632,0x59a8,0x4eff,0x8bbf,0x7eba,0x653e,0x83f2,0x975e, +0x5561,0x98de,0x80a5,0x532a,0x8bfd,0x5420,0x80ba,0x5e9f, +0x6cb8,0x8d39,0x82ac,0x915a,0x5429,0x6c1b,0x5206,0x7eb7, +0x575f,0x711a,0x6c7e,0x7c89,0x594b,0x4efd,0x5fff,0x6124, +0x7caa,0x4e30,0x5c01,0x67ab,0x8702,0x5cf0,0x950b,0x98ce, +0x75af,0x70fd,0x9022,0x51af,0x7f1d,0x8bbd,0x5949,0x51e4, +0x4f5b,0x5426,0x592b,0x6577,0x80a4,0x5b75,0x6276,0x62c2, +0x8f90,0x5e45,0x6c1f,0x7b26,0x4f0f,0x4fd8,0x670d,0x0000, +/* 0xb800 */ +0x7aa3,0x7aa4,0x7aa7,0x7aa9,0x7aaa,0x7aab,0x7aae,0x7aaf, +0x7ab0,0x7ab1,0x7ab2,0x7ab4,0x7ab5,0x7ab6,0x7ab7,0x7ab8, +0x7ab9,0x7aba,0x7abb,0x7abc,0x7abd,0x7abe,0x7ac0,0x7ac1, +0x7ac2,0x7ac3,0x7ac4,0x7ac5,0x7ac6,0x7ac7,0x7ac8,0x7ac9, +0x7aca,0x7acc,0x7acd,0x7ace,0x7acf,0x7ad0,0x7ad1,0x7ad2, +0x7ad3,0x7ad4,0x7ad5,0x7ad7,0x7ad8,0x7ada,0x7adb,0x7adc, +0x7add,0x7ae1,0x7ae2,0x7ae4,0x7ae7,0x7ae8,0x7ae9,0x7aea, +0x7aeb,0x7aec,0x7aee,0x7af0,0x7af1,0x7af2,0x7af3,0x0000, +0x7af4,0x7af5,0x7af6,0x7af7,0x7af8,0x7afb,0x7afc,0x7afe, +0x7b00,0x7b01,0x7b02,0x7b05,0x7b07,0x7b09,0x7b0c,0x7b0d, +0x7b0e,0x7b10,0x7b12,0x7b13,0x7b16,0x7b17,0x7b18,0x7b1a, +0x7b1c,0x7b1d,0x7b1f,0x7b21,0x7b22,0x7b23,0x7b27,0x7b29, +0x7b2d,0x6d6e,0x6daa,0x798f,0x88b1,0x5f17,0x752b,0x629a, +0x8f85,0x4fef,0x91dc,0x65a7,0x812f,0x8151,0x5e9c,0x8150, +0x8d74,0x526f,0x8986,0x8d4b,0x590d,0x5085,0x4ed8,0x961c, +0x7236,0x8179,0x8d1f,0x5bcc,0x8ba3,0x9644,0x5987,0x7f1a, +0x5490,0x5676,0x560e,0x8be5,0x6539,0x6982,0x9499,0x76d6, +0x6e89,0x5e72,0x7518,0x6746,0x67d1,0x7aff,0x809d,0x8d76, +0x611f,0x79c6,0x6562,0x8d63,0x5188,0x521a,0x94a2,0x7f38, +0x809b,0x7eb2,0x5c97,0x6e2f,0x6760,0x7bd9,0x768b,0x9ad8, +0x818f,0x7f94,0x7cd5,0x641e,0x9550,0x7a3f,0x544a,0x54e5, +0x6b4c,0x6401,0x6208,0x9e3d,0x80f3,0x7599,0x5272,0x9769, +0x845b,0x683c,0x86e4,0x9601,0x9694,0x94ec,0x4e2a,0x5404, +0x7ed9,0x6839,0x8ddf,0x8015,0x66f4,0x5e9a,0x7fb9,0x0000, +/* 0xb900 */ +0x7b2f,0x7b30,0x7b32,0x7b34,0x7b35,0x7b36,0x7b37,0x7b39, +0x7b3b,0x7b3d,0x7b3f,0x7b40,0x7b41,0x7b42,0x7b43,0x7b44, +0x7b46,0x7b48,0x7b4a,0x7b4d,0x7b4e,0x7b53,0x7b55,0x7b57, +0x7b59,0x7b5c,0x7b5e,0x7b5f,0x7b61,0x7b63,0x7b64,0x7b65, +0x7b66,0x7b67,0x7b68,0x7b69,0x7b6a,0x7b6b,0x7b6c,0x7b6d, +0x7b6f,0x7b70,0x7b73,0x7b74,0x7b76,0x7b78,0x7b7a,0x7b7c, +0x7b7d,0x7b7f,0x7b81,0x7b82,0x7b83,0x7b84,0x7b86,0x7b87, +0x7b88,0x7b89,0x7b8a,0x7b8b,0x7b8c,0x7b8e,0x7b8f,0x0000, +0x7b91,0x7b92,0x7b93,0x7b96,0x7b98,0x7b99,0x7b9a,0x7b9b, +0x7b9e,0x7b9f,0x7ba0,0x7ba3,0x7ba4,0x7ba5,0x7bae,0x7baf, +0x7bb0,0x7bb2,0x7bb3,0x7bb5,0x7bb6,0x7bb7,0x7bb9,0x7bba, +0x7bbb,0x7bbc,0x7bbd,0x7bbe,0x7bbf,0x7bc0,0x7bc2,0x7bc3, +0x7bc4,0x57c2,0x803f,0x6897,0x5de5,0x653b,0x529f,0x606d, +0x9f9a,0x4f9b,0x8eac,0x516c,0x5bab,0x5f13,0x5de9,0x6c5e, +0x62f1,0x8d21,0x5171,0x94a9,0x52fe,0x6c9f,0x82df,0x72d7, +0x57a2,0x6784,0x8d2d,0x591f,0x8f9c,0x83c7,0x5495,0x7b8d, +0x4f30,0x6cbd,0x5b64,0x59d1,0x9f13,0x53e4,0x86ca,0x9aa8, +0x8c37,0x80a1,0x6545,0x987e,0x56fa,0x96c7,0x522e,0x74dc, +0x5250,0x5be1,0x6302,0x8902,0x4e56,0x62d0,0x602a,0x68fa, +0x5173,0x5b98,0x51a0,0x89c2,0x7ba1,0x9986,0x7f50,0x60ef, +0x704c,0x8d2f,0x5149,0x5e7f,0x901b,0x7470,0x89c4,0x572d, +0x7845,0x5f52,0x9f9f,0x95fa,0x8f68,0x9b3c,0x8be1,0x7678, +0x6842,0x67dc,0x8dea,0x8d35,0x523d,0x8f8a,0x6eda,0x68cd, +0x9505,0x90ed,0x56fd,0x679c,0x88f9,0x8fc7,0x54c8,0x0000, +/* 0xba00 */ +0x7bc5,0x7bc8,0x7bc9,0x7bca,0x7bcb,0x7bcd,0x7bce,0x7bcf, +0x7bd0,0x7bd2,0x7bd4,0x7bd5,0x7bd6,0x7bd7,0x7bd8,0x7bdb, +0x7bdc,0x7bde,0x7bdf,0x7be0,0x7be2,0x7be3,0x7be4,0x7be7, +0x7be8,0x7be9,0x7beb,0x7bec,0x7bed,0x7bef,0x7bf0,0x7bf2, +0x7bf3,0x7bf4,0x7bf5,0x7bf6,0x7bf8,0x7bf9,0x7bfa,0x7bfb, +0x7bfd,0x7bff,0x7c00,0x7c01,0x7c02,0x7c03,0x7c04,0x7c05, +0x7c06,0x7c08,0x7c09,0x7c0a,0x7c0d,0x7c0e,0x7c10,0x7c11, +0x7c12,0x7c13,0x7c14,0x7c15,0x7c17,0x7c18,0x7c19,0x0000, +0x7c1a,0x7c1b,0x7c1c,0x7c1d,0x7c1e,0x7c20,0x7c21,0x7c22, +0x7c23,0x7c24,0x7c25,0x7c28,0x7c29,0x7c2b,0x7c2c,0x7c2d, +0x7c2e,0x7c2f,0x7c30,0x7c31,0x7c32,0x7c33,0x7c34,0x7c35, +0x7c36,0x7c37,0x7c39,0x7c3a,0x7c3b,0x7c3c,0x7c3d,0x7c3e, +0x7c42,0x9ab8,0x5b69,0x6d77,0x6c26,0x4ea5,0x5bb3,0x9a87, +0x9163,0x61a8,0x90af,0x97e9,0x542b,0x6db5,0x5bd2,0x51fd, +0x558a,0x7f55,0x7ff0,0x64bc,0x634d,0x65f1,0x61be,0x608d, +0x710a,0x6c57,0x6c49,0x592f,0x676d,0x822a,0x58d5,0x568e, +0x8c6a,0x6beb,0x90dd,0x597d,0x8017,0x53f7,0x6d69,0x5475, +0x559d,0x8377,0x83cf,0x6838,0x79be,0x548c,0x4f55,0x5408, +0x76d2,0x8c89,0x9602,0x6cb3,0x6db8,0x8d6b,0x8910,0x9e64, +0x8d3a,0x563f,0x9ed1,0x75d5,0x5f88,0x72e0,0x6068,0x54fc, +0x4ea8,0x6a2a,0x8861,0x6052,0x8f70,0x54c4,0x70d8,0x8679, +0x9e3f,0x6d2a,0x5b8f,0x5f18,0x7ea2,0x5589,0x4faf,0x7334, +0x543c,0x539a,0x5019,0x540e,0x547c,0x4e4e,0x5ffd,0x745a, +0x58f6,0x846b,0x80e1,0x8774,0x72d0,0x7cca,0x6e56,0x0000, +/* 0xbb00 */ +0x7c43,0x7c44,0x7c45,0x7c46,0x7c47,0x7c48,0x7c49,0x7c4a, +0x7c4b,0x7c4c,0x7c4e,0x7c4f,0x7c50,0x7c51,0x7c52,0x7c53, +0x7c54,0x7c55,0x7c56,0x7c57,0x7c58,0x7c59,0x7c5a,0x7c5b, +0x7c5c,0x7c5d,0x7c5e,0x7c5f,0x7c60,0x7c61,0x7c62,0x7c63, +0x7c64,0x7c65,0x7c66,0x7c67,0x7c68,0x7c69,0x7c6a,0x7c6b, +0x7c6c,0x7c6d,0x7c6e,0x7c6f,0x7c70,0x7c71,0x7c72,0x7c75, +0x7c76,0x7c77,0x7c78,0x7c79,0x7c7a,0x7c7e,0x7c7f,0x7c80, +0x7c81,0x7c82,0x7c83,0x7c84,0x7c85,0x7c86,0x7c87,0x0000, +0x7c88,0x7c8a,0x7c8b,0x7c8c,0x7c8d,0x7c8e,0x7c8f,0x7c90, +0x7c93,0x7c94,0x7c96,0x7c99,0x7c9a,0x7c9b,0x7ca0,0x7ca1, +0x7ca3,0x7ca6,0x7ca7,0x7ca8,0x7ca9,0x7cab,0x7cac,0x7cad, +0x7caf,0x7cb0,0x7cb4,0x7cb5,0x7cb6,0x7cb7,0x7cb8,0x7cba, +0x7cbb,0x5f27,0x864e,0x552c,0x62a4,0x4e92,0x6caa,0x6237, +0x82b1,0x54d7,0x534e,0x733e,0x6ed1,0x753b,0x5212,0x5316, +0x8bdd,0x69d0,0x5f8a,0x6000,0x6dee,0x574f,0x6b22,0x73af, +0x6853,0x8fd8,0x7f13,0x6362,0x60a3,0x5524,0x75ea,0x8c62, +0x7115,0x6da3,0x5ba6,0x5e7b,0x8352,0x614c,0x9ec4,0x78fa, +0x8757,0x7c27,0x7687,0x51f0,0x60f6,0x714c,0x6643,0x5e4c, +0x604d,0x8c0e,0x7070,0x6325,0x8f89,0x5fbd,0x6062,0x86d4, +0x56de,0x6bc1,0x6094,0x6167,0x5349,0x60e0,0x6666,0x8d3f, +0x79fd,0x4f1a,0x70e9,0x6c47,0x8bb3,0x8bf2,0x7ed8,0x8364, +0x660f,0x5a5a,0x9b42,0x6d51,0x6df7,0x8c41,0x6d3b,0x4f19, +0x706b,0x83b7,0x6216,0x60d1,0x970d,0x8d27,0x7978,0x51fb, +0x573e,0x57fa,0x673a,0x7578,0x7a3d,0x79ef,0x7b95,0x0000, +/* 0xbc00 */ +0x7cbf,0x7cc0,0x7cc2,0x7cc3,0x7cc4,0x7cc6,0x7cc9,0x7ccb, +0x7cce,0x7ccf,0x7cd0,0x7cd1,0x7cd2,0x7cd3,0x7cd4,0x7cd8, +0x7cda,0x7cdb,0x7cdd,0x7cde,0x7ce1,0x7ce2,0x7ce3,0x7ce4, +0x7ce5,0x7ce6,0x7ce7,0x7ce9,0x7cea,0x7ceb,0x7cec,0x7ced, +0x7cee,0x7cf0,0x7cf1,0x7cf2,0x7cf3,0x7cf4,0x7cf5,0x7cf6, +0x7cf7,0x7cf9,0x7cfa,0x7cfc,0x7cfd,0x7cfe,0x7cff,0x7d00, +0x7d01,0x7d02,0x7d03,0x7d04,0x7d05,0x7d06,0x7d07,0x7d08, +0x7d09,0x7d0b,0x7d0c,0x7d0d,0x7d0e,0x7d0f,0x7d10,0x0000, +0x7d11,0x7d12,0x7d13,0x7d14,0x7d15,0x7d16,0x7d17,0x7d18, +0x7d19,0x7d1a,0x7d1b,0x7d1c,0x7d1d,0x7d1e,0x7d1f,0x7d21, +0x7d23,0x7d24,0x7d25,0x7d26,0x7d28,0x7d29,0x7d2a,0x7d2c, +0x7d2d,0x7d2e,0x7d30,0x7d31,0x7d32,0x7d33,0x7d34,0x7d35, +0x7d36,0x808c,0x9965,0x8ff9,0x6fc0,0x8ba5,0x9e21,0x59ec, +0x7ee9,0x7f09,0x5409,0x6781,0x68d8,0x8f91,0x7c4d,0x96c6, +0x53ca,0x6025,0x75be,0x6c72,0x5373,0x5ac9,0x7ea7,0x6324, +0x51e0,0x810a,0x5df1,0x84df,0x6280,0x5180,0x5b63,0x4f0e, +0x796d,0x5242,0x60b8,0x6d4e,0x5bc4,0x5bc2,0x8ba1,0x8bb0, +0x65e2,0x5fcc,0x9645,0x5993,0x7ee7,0x7eaa,0x5609,0x67b7, +0x5939,0x4f73,0x5bb6,0x52a0,0x835a,0x988a,0x8d3e,0x7532, +0x94be,0x5047,0x7a3c,0x4ef7,0x67b6,0x9a7e,0x5ac1,0x6b7c, +0x76d1,0x575a,0x5c16,0x7b3a,0x95f4,0x714e,0x517c,0x80a9, +0x8270,0x5978,0x7f04,0x8327,0x68c0,0x67ec,0x78b1,0x7877, +0x62e3,0x6361,0x7b80,0x4fed,0x526a,0x51cf,0x8350,0x69db, +0x9274,0x8df5,0x8d31,0x89c1,0x952e,0x7bad,0x4ef6,0x0000, +/* 0xbd00 */ +0x7d37,0x7d38,0x7d39,0x7d3a,0x7d3b,0x7d3c,0x7d3d,0x7d3e, +0x7d3f,0x7d40,0x7d41,0x7d42,0x7d43,0x7d44,0x7d45,0x7d46, +0x7d47,0x7d48,0x7d49,0x7d4a,0x7d4b,0x7d4c,0x7d4d,0x7d4e, +0x7d4f,0x7d50,0x7d51,0x7d52,0x7d53,0x7d54,0x7d55,0x7d56, +0x7d57,0x7d58,0x7d59,0x7d5a,0x7d5b,0x7d5c,0x7d5d,0x7d5e, +0x7d5f,0x7d60,0x7d61,0x7d62,0x7d63,0x7d64,0x7d65,0x7d66, +0x7d67,0x7d68,0x7d69,0x7d6a,0x7d6b,0x7d6c,0x7d6d,0x7d6f, +0x7d70,0x7d71,0x7d72,0x7d73,0x7d74,0x7d75,0x7d76,0x0000, +0x7d78,0x7d79,0x7d7a,0x7d7b,0x7d7c,0x7d7d,0x7d7e,0x7d7f, +0x7d80,0x7d81,0x7d82,0x7d83,0x7d84,0x7d85,0x7d86,0x7d87, +0x7d88,0x7d89,0x7d8a,0x7d8b,0x7d8c,0x7d8d,0x7d8e,0x7d8f, +0x7d90,0x7d91,0x7d92,0x7d93,0x7d94,0x7d95,0x7d96,0x7d97, +0x7d98,0x5065,0x8230,0x5251,0x996f,0x6e10,0x6e85,0x6da7, +0x5efa,0x50f5,0x59dc,0x5c06,0x6d46,0x6c5f,0x7586,0x848b, +0x6868,0x5956,0x8bb2,0x5320,0x9171,0x964d,0x8549,0x6912, +0x7901,0x7126,0x80f6,0x4ea4,0x90ca,0x6d47,0x9a84,0x5a07, +0x56bc,0x6405,0x94f0,0x77eb,0x4fa5,0x811a,0x72e1,0x89d2, +0x997a,0x7f34,0x7ede,0x527f,0x6559,0x9175,0x8f7f,0x8f83, +0x53eb,0x7a96,0x63ed,0x63a5,0x7686,0x79f8,0x8857,0x9636, +0x622a,0x52ab,0x8282,0x6854,0x6770,0x6377,0x776b,0x7aed, +0x6d01,0x7ed3,0x89e3,0x59d0,0x6212,0x85c9,0x82a5,0x754c, +0x501f,0x4ecb,0x75a5,0x8beb,0x5c4a,0x5dfe,0x7b4b,0x65a4, +0x91d1,0x4eca,0x6d25,0x895f,0x7d27,0x9526,0x4ec5,0x8c28, +0x8fdb,0x9773,0x664b,0x7981,0x8fd1,0x70ec,0x6d78,0x0000, +/* 0xbe00 */ +0x7d99,0x7d9a,0x7d9b,0x7d9c,0x7d9d,0x7d9e,0x7d9f,0x7da0, +0x7da1,0x7da2,0x7da3,0x7da4,0x7da5,0x7da7,0x7da8,0x7da9, +0x7daa,0x7dab,0x7dac,0x7dad,0x7daf,0x7db0,0x7db1,0x7db2, +0x7db3,0x7db4,0x7db5,0x7db6,0x7db7,0x7db8,0x7db9,0x7dba, +0x7dbb,0x7dbc,0x7dbd,0x7dbe,0x7dbf,0x7dc0,0x7dc1,0x7dc2, +0x7dc3,0x7dc4,0x7dc5,0x7dc6,0x7dc7,0x7dc8,0x7dc9,0x7dca, +0x7dcb,0x7dcc,0x7dcd,0x7dce,0x7dcf,0x7dd0,0x7dd1,0x7dd2, +0x7dd3,0x7dd4,0x7dd5,0x7dd6,0x7dd7,0x7dd8,0x7dd9,0x0000, +0x7dda,0x7ddb,0x7ddc,0x7ddd,0x7dde,0x7ddf,0x7de0,0x7de1, +0x7de2,0x7de3,0x7de4,0x7de5,0x7de6,0x7de7,0x7de8,0x7de9, +0x7dea,0x7deb,0x7dec,0x7ded,0x7dee,0x7def,0x7df0,0x7df1, +0x7df2,0x7df3,0x7df4,0x7df5,0x7df6,0x7df7,0x7df8,0x7df9, +0x7dfa,0x5c3d,0x52b2,0x8346,0x5162,0x830e,0x775b,0x6676, +0x9cb8,0x4eac,0x60ca,0x7cbe,0x7cb3,0x7ecf,0x4e95,0x8b66, +0x666f,0x9888,0x9759,0x5883,0x656c,0x955c,0x5f84,0x75c9, +0x9756,0x7adf,0x7ade,0x51c0,0x70af,0x7a98,0x63ea,0x7a76, +0x7ea0,0x7396,0x97ed,0x4e45,0x7078,0x4e5d,0x9152,0x53a9, +0x6551,0x65e7,0x81fc,0x8205,0x548e,0x5c31,0x759a,0x97a0, +0x62d8,0x72d9,0x75bd,0x5c45,0x9a79,0x83ca,0x5c40,0x5480, +0x77e9,0x4e3e,0x6cae,0x805a,0x62d2,0x636e,0x5de8,0x5177, +0x8ddd,0x8e1e,0x952f,0x4ff1,0x53e5,0x60e7,0x70ac,0x5267, +0x6350,0x9e43,0x5a1f,0x5026,0x7737,0x5377,0x7ee2,0x6485, +0x652b,0x6289,0x6398,0x5014,0x7235,0x89c9,0x51b3,0x8bc0, +0x7edd,0x5747,0x83cc,0x94a7,0x519b,0x541b,0x5cfb,0x0000, +/* 0xbf00 */ +0x7dfb,0x7dfc,0x7dfd,0x7dfe,0x7dff,0x7e00,0x7e01,0x7e02, +0x7e03,0x7e04,0x7e05,0x7e06,0x7e07,0x7e08,0x7e09,0x7e0a, +0x7e0b,0x7e0c,0x7e0d,0x7e0e,0x7e0f,0x7e10,0x7e11,0x7e12, +0x7e13,0x7e14,0x7e15,0x7e16,0x7e17,0x7e18,0x7e19,0x7e1a, +0x7e1b,0x7e1c,0x7e1d,0x7e1e,0x7e1f,0x7e20,0x7e21,0x7e22, +0x7e23,0x7e24,0x7e25,0x7e26,0x7e27,0x7e28,0x7e29,0x7e2a, +0x7e2b,0x7e2c,0x7e2d,0x7e2e,0x7e2f,0x7e30,0x7e31,0x7e32, +0x7e33,0x7e34,0x7e35,0x7e36,0x7e37,0x7e38,0x7e39,0x0000, +0x7e3a,0x7e3c,0x7e3d,0x7e3e,0x7e3f,0x7e40,0x7e42,0x7e43, +0x7e44,0x7e45,0x7e46,0x7e48,0x7e49,0x7e4a,0x7e4b,0x7e4c, +0x7e4d,0x7e4e,0x7e4f,0x7e50,0x7e51,0x7e52,0x7e53,0x7e54, +0x7e55,0x7e56,0x7e57,0x7e58,0x7e59,0x7e5a,0x7e5b,0x7e5c, +0x7e5d,0x4fca,0x7ae3,0x6d5a,0x90e1,0x9a8f,0x5580,0x5496, +0x5361,0x54af,0x5f00,0x63e9,0x6977,0x51ef,0x6168,0x520a, +0x582a,0x52d8,0x574e,0x780d,0x770b,0x5eb7,0x6177,0x7ce0, +0x625b,0x6297,0x4ea2,0x7095,0x8003,0x62f7,0x70e4,0x9760, +0x5777,0x82db,0x67ef,0x68f5,0x78d5,0x9897,0x79d1,0x58f3, +0x54b3,0x53ef,0x6e34,0x514b,0x523b,0x5ba2,0x8bfe,0x80af, +0x5543,0x57a6,0x6073,0x5751,0x542d,0x7a7a,0x6050,0x5b54, +0x63a7,0x62a0,0x53e3,0x6263,0x5bc7,0x67af,0x54ed,0x7a9f, +0x82e6,0x9177,0x5e93,0x88e4,0x5938,0x57ae,0x630e,0x8de8, +0x80ef,0x5757,0x7b77,0x4fa9,0x5feb,0x5bbd,0x6b3e,0x5321, +0x7b50,0x72c2,0x6846,0x77ff,0x7736,0x65f7,0x51b5,0x4e8f, +0x76d4,0x5cbf,0x7aa5,0x8475,0x594e,0x9b41,0x5080,0x0000, +/* 0xc000 */ +0x7e5e,0x7e5f,0x7e60,0x7e61,0x7e62,0x7e63,0x7e64,0x7e65, +0x7e66,0x7e67,0x7e68,0x7e69,0x7e6a,0x7e6b,0x7e6c,0x7e6d, +0x7e6e,0x7e6f,0x7e70,0x7e71,0x7e72,0x7e73,0x7e74,0x7e75, +0x7e76,0x7e77,0x7e78,0x7e79,0x7e7a,0x7e7b,0x7e7c,0x7e7d, +0x7e7e,0x7e7f,0x7e80,0x7e81,0x7e83,0x7e84,0x7e85,0x7e86, +0x7e87,0x7e88,0x7e89,0x7e8a,0x7e8b,0x7e8c,0x7e8d,0x7e8e, +0x7e8f,0x7e90,0x7e91,0x7e92,0x7e93,0x7e94,0x7e95,0x7e96, +0x7e97,0x7e98,0x7e99,0x7e9a,0x7e9c,0x7e9d,0x7e9e,0x0000, +0x7eae,0x7eb4,0x7ebb,0x7ebc,0x7ed6,0x7ee4,0x7eec,0x7ef9, +0x7f0a,0x7f10,0x7f1e,0x7f37,0x7f39,0x7f3b,0x7f3c,0x7f3d, +0x7f3e,0x7f3f,0x7f40,0x7f41,0x7f43,0x7f46,0x7f47,0x7f48, +0x7f49,0x7f4a,0x7f4b,0x7f4c,0x7f4d,0x7f4e,0x7f4f,0x7f52, +0x7f53,0x9988,0x6127,0x6e83,0x5764,0x6606,0x6346,0x56f0, +0x62ec,0x6269,0x5ed3,0x9614,0x5783,0x62c9,0x5587,0x8721, +0x814a,0x8fa3,0x5566,0x83b1,0x6765,0x8d56,0x84dd,0x5a6a, +0x680f,0x62e6,0x7bee,0x9611,0x5170,0x6f9c,0x8c30,0x63fd, +0x89c8,0x61d2,0x7f06,0x70c2,0x6ee5,0x7405,0x6994,0x72fc, +0x5eca,0x90ce,0x6717,0x6d6a,0x635e,0x52b3,0x7262,0x8001, +0x4f6c,0x59e5,0x916a,0x70d9,0x6d9d,0x52d2,0x4e50,0x96f7, +0x956d,0x857e,0x78ca,0x7d2f,0x5121,0x5792,0x64c2,0x808b, +0x7c7b,0x6cea,0x68f1,0x695e,0x51b7,0x5398,0x68a8,0x7281, +0x9ece,0x7bf1,0x72f8,0x79bb,0x6f13,0x7406,0x674e,0x91cc, +0x9ca4,0x793c,0x8389,0x8354,0x540f,0x6817,0x4e3d,0x5389, +0x52b1,0x783e,0x5386,0x5229,0x5088,0x4f8b,0x4fd0,0x0000, +/* 0xc100 */ +0x7f56,0x7f59,0x7f5b,0x7f5c,0x7f5d,0x7f5e,0x7f60,0x7f63, +0x7f64,0x7f65,0x7f66,0x7f67,0x7f6b,0x7f6c,0x7f6d,0x7f6f, +0x7f70,0x7f73,0x7f75,0x7f76,0x7f77,0x7f78,0x7f7a,0x7f7b, +0x7f7c,0x7f7d,0x7f7f,0x7f80,0x7f82,0x7f83,0x7f84,0x7f85, +0x7f86,0x7f87,0x7f88,0x7f89,0x7f8b,0x7f8d,0x7f8f,0x7f90, +0x7f91,0x7f92,0x7f93,0x7f95,0x7f96,0x7f97,0x7f98,0x7f99, +0x7f9b,0x7f9c,0x7fa0,0x7fa2,0x7fa3,0x7fa5,0x7fa6,0x7fa8, +0x7fa9,0x7faa,0x7fab,0x7fac,0x7fad,0x7fae,0x7fb1,0x0000, +0x7fb3,0x7fb4,0x7fb5,0x7fb6,0x7fb7,0x7fba,0x7fbb,0x7fbe, +0x7fc0,0x7fc2,0x7fc3,0x7fc4,0x7fc6,0x7fc7,0x7fc8,0x7fc9, +0x7fcb,0x7fcd,0x7fcf,0x7fd0,0x7fd1,0x7fd2,0x7fd3,0x7fd6, +0x7fd7,0x7fd9,0x7fda,0x7fdb,0x7fdc,0x7fdd,0x7fde,0x7fe2, +0x7fe3,0x75e2,0x7acb,0x7c92,0x6ca5,0x96b6,0x529b,0x7483, +0x54e9,0x4fe9,0x8054,0x83b2,0x8fde,0x9570,0x5ec9,0x601c, +0x6d9f,0x5e18,0x655b,0x8138,0x94fe,0x604b,0x70bc,0x7ec3, +0x7cae,0x51c9,0x6881,0x7cb1,0x826f,0x4e24,0x8f86,0x91cf, +0x667e,0x4eae,0x8c05,0x64a9,0x804a,0x50da,0x7597,0x71ce, +0x5be5,0x8fbd,0x6f66,0x4e86,0x6482,0x9563,0x5ed6,0x6599, +0x5217,0x88c2,0x70c8,0x52a3,0x730e,0x7433,0x6797,0x78f7, +0x9716,0x4e34,0x90bb,0x9cde,0x6dcb,0x51db,0x8d41,0x541d, +0x62ce,0x73b2,0x83f1,0x96f6,0x9f84,0x94c3,0x4f36,0x7f9a, +0x51cc,0x7075,0x9675,0x5cad,0x9886,0x53e6,0x4ee4,0x6e9c, +0x7409,0x69b4,0x786b,0x998f,0x7559,0x5218,0x7624,0x6d41, +0x67f3,0x516d,0x9f99,0x804b,0x5499,0x7b3c,0x7abf,0x0000, +/* 0xc200 */ +0x7fe4,0x7fe7,0x7fe8,0x7fea,0x7feb,0x7fec,0x7fed,0x7fef, +0x7ff2,0x7ff4,0x7ff5,0x7ff6,0x7ff7,0x7ff8,0x7ff9,0x7ffa, +0x7ffd,0x7ffe,0x7fff,0x8002,0x8007,0x8008,0x8009,0x800a, +0x800e,0x800f,0x8011,0x8013,0x801a,0x801b,0x801d,0x801e, +0x801f,0x8021,0x8023,0x8024,0x802b,0x802c,0x802d,0x802e, +0x802f,0x8030,0x8032,0x8034,0x8039,0x803a,0x803c,0x803e, +0x8040,0x8041,0x8044,0x8045,0x8047,0x8048,0x8049,0x804e, +0x804f,0x8050,0x8051,0x8053,0x8055,0x8056,0x8057,0x0000, +0x8059,0x805b,0x805c,0x805d,0x805e,0x805f,0x8060,0x8061, +0x8062,0x8063,0x8064,0x8065,0x8066,0x8067,0x8068,0x806b, +0x806c,0x806d,0x806e,0x806f,0x8070,0x8072,0x8073,0x8074, +0x8075,0x8076,0x8077,0x8078,0x8079,0x807a,0x807b,0x807c, +0x807d,0x9686,0x5784,0x62e2,0x9647,0x697c,0x5a04,0x6402, +0x7bd3,0x6f0f,0x964b,0x82a6,0x5362,0x9885,0x5e90,0x7089, +0x63b3,0x5364,0x864f,0x9c81,0x9e93,0x788c,0x9732,0x8def, +0x8d42,0x9e7f,0x6f5e,0x7984,0x5f55,0x9646,0x622e,0x9a74, +0x5415,0x94dd,0x4fa3,0x65c5,0x5c65,0x5c61,0x7f15,0x8651, +0x6c2f,0x5f8b,0x7387,0x6ee4,0x7eff,0x5ce6,0x631b,0x5b6a, +0x6ee6,0x5375,0x4e71,0x63a0,0x7565,0x62a1,0x8f6e,0x4f26, +0x4ed1,0x6ca6,0x7eb6,0x8bba,0x841d,0x87ba,0x7f57,0x903b, +0x9523,0x7ba9,0x9aa1,0x88f8,0x843d,0x6d1b,0x9a86,0x7edc, +0x5988,0x9ebb,0x739b,0x7801,0x8682,0x9a6c,0x9a82,0x561b, +0x5417,0x57cb,0x4e70,0x9ea6,0x5356,0x8fc8,0x8109,0x7792, +0x9992,0x86ee,0x6ee1,0x8513,0x66fc,0x6162,0x6f2b,0x0000, +/* 0xc300 */ +0x807e,0x8081,0x8082,0x8085,0x8088,0x808a,0x808d,0x808e, +0x808f,0x8090,0x8091,0x8092,0x8094,0x8095,0x8097,0x8099, +0x809e,0x80a3,0x80a6,0x80a7,0x80a8,0x80ac,0x80b0,0x80b3, +0x80b5,0x80b6,0x80b8,0x80b9,0x80bb,0x80c5,0x80c7,0x80c8, +0x80c9,0x80ca,0x80cb,0x80cf,0x80d0,0x80d1,0x80d2,0x80d3, +0x80d4,0x80d5,0x80d8,0x80df,0x80e0,0x80e2,0x80e3,0x80e6, +0x80ee,0x80f5,0x80f7,0x80f9,0x80fb,0x80fe,0x80ff,0x8100, +0x8101,0x8103,0x8104,0x8105,0x8107,0x8108,0x810b,0x0000, +0x810c,0x8115,0x8117,0x8119,0x811b,0x811c,0x811d,0x811f, +0x8120,0x8121,0x8122,0x8123,0x8124,0x8125,0x8126,0x8127, +0x8128,0x8129,0x812a,0x812b,0x812d,0x812e,0x8130,0x8133, +0x8134,0x8135,0x8137,0x8139,0x813a,0x813b,0x813c,0x813d, +0x813f,0x8c29,0x8292,0x832b,0x76f2,0x6c13,0x5fd9,0x83bd, +0x732b,0x8305,0x951a,0x6bdb,0x77db,0x94c6,0x536f,0x8302, +0x5192,0x5e3d,0x8c8c,0x8d38,0x4e48,0x73ab,0x679a,0x6885, +0x9176,0x9709,0x7164,0x6ca1,0x7709,0x5a92,0x9541,0x6bcf, +0x7f8e,0x6627,0x5bd0,0x59b9,0x5a9a,0x95e8,0x95f7,0x4eec, +0x840c,0x8499,0x6aac,0x76df,0x9530,0x731b,0x68a6,0x5b5f, +0x772f,0x919a,0x9761,0x7cdc,0x8ff7,0x8c1c,0x5f25,0x7c73, +0x79d8,0x89c5,0x6ccc,0x871c,0x5bc6,0x5e42,0x68c9,0x7720, +0x7ef5,0x5195,0x514d,0x52c9,0x5a29,0x7f05,0x9762,0x82d7, +0x63cf,0x7784,0x85d0,0x79d2,0x6e3a,0x5e99,0x5999,0x8511, +0x706d,0x6c11,0x62bf,0x76bf,0x654f,0x60af,0x95fd,0x660e, +0x879f,0x9e23,0x94ed,0x540d,0x547d,0x8c2c,0x6478,0x0000, +/* 0xc400 */ +0x8140,0x8141,0x8142,0x8143,0x8144,0x8145,0x8147,0x8149, +0x814d,0x814e,0x814f,0x8152,0x8156,0x8157,0x8158,0x815b, +0x815c,0x815d,0x815e,0x815f,0x8161,0x8162,0x8163,0x8164, +0x8166,0x8168,0x816a,0x816b,0x816c,0x816f,0x8172,0x8173, +0x8175,0x8176,0x8177,0x8178,0x8181,0x8183,0x8184,0x8185, +0x8186,0x8187,0x8189,0x818b,0x818c,0x818d,0x818e,0x8190, +0x8192,0x8193,0x8194,0x8195,0x8196,0x8197,0x8199,0x819a, +0x819e,0x819f,0x81a0,0x81a1,0x81a2,0x81a4,0x81a5,0x0000, +0x81a7,0x81a9,0x81ab,0x81ac,0x81ad,0x81ae,0x81af,0x81b0, +0x81b1,0x81b2,0x81b4,0x81b5,0x81b6,0x81b7,0x81b8,0x81b9, +0x81bc,0x81bd,0x81be,0x81bf,0x81c4,0x81c5,0x81c7,0x81c8, +0x81c9,0x81cb,0x81cd,0x81ce,0x81cf,0x81d0,0x81d1,0x81d2, +0x81d3,0x6479,0x8611,0x6a21,0x819c,0x78e8,0x6469,0x9b54, +0x62b9,0x672b,0x83ab,0x58a8,0x9ed8,0x6cab,0x6f20,0x5bde, +0x964c,0x8c0b,0x725f,0x67d0,0x62c7,0x7261,0x4ea9,0x59c6, +0x6bcd,0x5893,0x66ae,0x5e55,0x52df,0x6155,0x6728,0x76ee, +0x7766,0x7267,0x7a46,0x62ff,0x54ea,0x5450,0x94a0,0x90a3, +0x5a1c,0x7eb3,0x6c16,0x4e43,0x5976,0x8010,0x5948,0x5357, +0x7537,0x96be,0x56ca,0x6320,0x8111,0x607c,0x95f9,0x6dd6, +0x5462,0x9981,0x5185,0x5ae9,0x80fd,0x59ae,0x9713,0x502a, +0x6ce5,0x5c3c,0x62df,0x4f60,0x533f,0x817b,0x9006,0x6eba, +0x852b,0x62c8,0x5e74,0x78be,0x64b5,0x637b,0x5ff5,0x5a18, +0x917f,0x9e1f,0x5c3f,0x634f,0x8042,0x5b7d,0x556e,0x954a, +0x954d,0x6d85,0x60a8,0x67e0,0x72de,0x51dd,0x5b81,0x0000, +/* 0xc500 */ +0x81d4,0x81d5,0x81d6,0x81d7,0x81d8,0x81d9,0x81da,0x81db, +0x81dc,0x81dd,0x81de,0x81df,0x81e0,0x81e1,0x81e2,0x81e4, +0x81e5,0x81e6,0x81e8,0x81e9,0x81eb,0x81ee,0x81ef,0x81f0, +0x81f1,0x81f2,0x81f5,0x81f6,0x81f7,0x81f8,0x81f9,0x81fa, +0x81fd,0x81ff,0x8203,0x8207,0x8208,0x8209,0x820a,0x820b, +0x820e,0x820f,0x8211,0x8213,0x8215,0x8216,0x8217,0x8218, +0x8219,0x821a,0x821d,0x8220,0x8224,0x8225,0x8226,0x8227, +0x8229,0x822e,0x8232,0x823a,0x823c,0x823d,0x823f,0x0000, +0x8240,0x8241,0x8242,0x8243,0x8245,0x8246,0x8248,0x824a, +0x824c,0x824d,0x824e,0x8250,0x8251,0x8252,0x8253,0x8254, +0x8255,0x8256,0x8257,0x8259,0x825b,0x825c,0x825d,0x825e, +0x8260,0x8261,0x8262,0x8263,0x8264,0x8265,0x8266,0x8267, +0x8269,0x62e7,0x6cde,0x725b,0x626d,0x94ae,0x7ebd,0x8113, +0x6d53,0x519c,0x5f04,0x5974,0x52aa,0x6012,0x5973,0x6696, +0x8650,0x759f,0x632a,0x61e6,0x7cef,0x8bfa,0x54e6,0x6b27, +0x9e25,0x6bb4,0x85d5,0x5455,0x5076,0x6ca4,0x556a,0x8db4, +0x722c,0x5e15,0x6015,0x7436,0x62cd,0x6392,0x724c,0x5f98, +0x6e43,0x6d3e,0x6500,0x6f58,0x76d8,0x78d0,0x76fc,0x7554, +0x5224,0x53db,0x4e53,0x5e9e,0x65c1,0x802a,0x80d6,0x629b, +0x5486,0x5228,0x70ae,0x888d,0x8dd1,0x6ce1,0x5478,0x80da, +0x57f9,0x88f4,0x8d54,0x966a,0x914d,0x4f69,0x6c9b,0x55b7, +0x76c6,0x7830,0x62a8,0x70f9,0x6f8e,0x5f6d,0x84ec,0x68da, +0x787c,0x7bf7,0x81a8,0x670b,0x9e4f,0x6367,0x78b0,0x576f, +0x7812,0x9739,0x6279,0x62ab,0x5288,0x7435,0x6bd7,0x0000, +/* 0xc600 */ +0x826a,0x826b,0x826c,0x826d,0x8271,0x8275,0x8276,0x8277, +0x8278,0x827b,0x827c,0x8280,0x8281,0x8283,0x8285,0x8286, +0x8287,0x8289,0x828c,0x8290,0x8293,0x8294,0x8295,0x8296, +0x829a,0x829b,0x829e,0x82a0,0x82a2,0x82a3,0x82a7,0x82b2, +0x82b5,0x82b6,0x82ba,0x82bb,0x82bc,0x82bf,0x82c0,0x82c2, +0x82c3,0x82c5,0x82c6,0x82c9,0x82d0,0x82d6,0x82d9,0x82da, +0x82dd,0x82e2,0x82e7,0x82e8,0x82e9,0x82ea,0x82ec,0x82ed, +0x82ee,0x82f0,0x82f2,0x82f3,0x82f5,0x82f6,0x82f8,0x0000, +0x82fa,0x82fc,0x82fd,0x82fe,0x82ff,0x8300,0x830a,0x830b, +0x830d,0x8310,0x8312,0x8313,0x8316,0x8318,0x8319,0x831d, +0x831e,0x831f,0x8320,0x8321,0x8322,0x8323,0x8324,0x8325, +0x8326,0x8329,0x832a,0x832e,0x8330,0x8332,0x8337,0x833b, +0x833d,0x5564,0x813e,0x75b2,0x76ae,0x5339,0x75de,0x50fb, +0x5c41,0x8b6c,0x7bc7,0x504f,0x7247,0x9a97,0x98d8,0x6f02, +0x74e2,0x7968,0x6487,0x77a5,0x62fc,0x9891,0x8d2b,0x54c1, +0x8058,0x4e52,0x576a,0x82f9,0x840d,0x5e73,0x51ed,0x74f6, +0x8bc4,0x5c4f,0x5761,0x6cfc,0x9887,0x5a46,0x7834,0x9b44, +0x8feb,0x7c95,0x5256,0x6251,0x94fa,0x4ec6,0x8386,0x8461, +0x83e9,0x84b2,0x57d4,0x6734,0x5703,0x666e,0x6d66,0x8c31, +0x66dd,0x7011,0x671f,0x6b3a,0x6816,0x621a,0x59bb,0x4e03, +0x51c4,0x6f06,0x67d2,0x6c8f,0x5176,0x68cb,0x5947,0x6b67, +0x7566,0x5d0e,0x8110,0x9f50,0x65d7,0x7948,0x7941,0x9a91, +0x8d77,0x5c82,0x4e5e,0x4f01,0x542f,0x5951,0x780c,0x5668, +0x6c14,0x8fc4,0x5f03,0x6c7d,0x6ce3,0x8bab,0x6390,0x0000, +/* 0xc700 */ +0x833e,0x833f,0x8341,0x8342,0x8344,0x8345,0x8348,0x834a, +0x834b,0x834c,0x834d,0x834e,0x8353,0x8355,0x8356,0x8357, +0x8358,0x8359,0x835d,0x8362,0x8370,0x8371,0x8372,0x8373, +0x8374,0x8375,0x8376,0x8379,0x837a,0x837e,0x837f,0x8380, +0x8381,0x8382,0x8383,0x8384,0x8387,0x8388,0x838a,0x838b, +0x838c,0x838d,0x838f,0x8390,0x8391,0x8394,0x8395,0x8396, +0x8397,0x8399,0x839a,0x839d,0x839f,0x83a1,0x83a2,0x83a3, +0x83a4,0x83a5,0x83a6,0x83a7,0x83ac,0x83ad,0x83ae,0x0000, +0x83af,0x83b5,0x83bb,0x83be,0x83bf,0x83c2,0x83c3,0x83c4, +0x83c6,0x83c8,0x83c9,0x83cb,0x83cd,0x83ce,0x83d0,0x83d1, +0x83d2,0x83d3,0x83d5,0x83d7,0x83d9,0x83da,0x83db,0x83de, +0x83e2,0x83e3,0x83e4,0x83e6,0x83e7,0x83e8,0x83eb,0x83ec, +0x83ed,0x6070,0x6d3d,0x7275,0x6266,0x948e,0x94c5,0x5343, +0x8fc1,0x7b7e,0x4edf,0x8c26,0x4e7e,0x9ed4,0x94b1,0x94b3, +0x524d,0x6f5c,0x9063,0x6d45,0x8c34,0x5811,0x5d4c,0x6b20, +0x6b49,0x67aa,0x545b,0x8154,0x7f8c,0x5899,0x8537,0x5f3a, +0x62a2,0x6a47,0x9539,0x6572,0x6084,0x6865,0x77a7,0x4e54, +0x4fa8,0x5de7,0x9798,0x64ac,0x7fd8,0x5ced,0x4fcf,0x7a8d, +0x5207,0x8304,0x4e14,0x602f,0x7a83,0x94a6,0x4fb5,0x4eb2, +0x79e6,0x7434,0x52e4,0x82b9,0x64d2,0x79bd,0x5bdd,0x6c81, +0x9752,0x8f7b,0x6c22,0x503e,0x537f,0x6e05,0x64ce,0x6674, +0x6c30,0x60c5,0x9877,0x8bf7,0x5e86,0x743c,0x7a77,0x79cb, +0x4e18,0x90b1,0x7403,0x6c42,0x56da,0x914b,0x6cc5,0x8d8b, +0x533a,0x86c6,0x66f2,0x8eaf,0x5c48,0x9a71,0x6e20,0x0000, +/* 0xc800 */ +0x83ee,0x83ef,0x83f3,0x83f4,0x83f5,0x83f6,0x83f7,0x83fa, +0x83fb,0x83fc,0x83fe,0x83ff,0x8400,0x8402,0x8405,0x8407, +0x8408,0x8409,0x840a,0x8410,0x8412,0x8413,0x8414,0x8415, +0x8416,0x8417,0x8419,0x841a,0x841b,0x841e,0x841f,0x8420, +0x8421,0x8422,0x8423,0x8429,0x842a,0x842b,0x842c,0x842d, +0x842e,0x842f,0x8430,0x8432,0x8433,0x8434,0x8435,0x8436, +0x8437,0x8439,0x843a,0x843b,0x843e,0x843f,0x8440,0x8441, +0x8442,0x8443,0x8444,0x8445,0x8447,0x8448,0x8449,0x0000, +0x844a,0x844b,0x844c,0x844d,0x844e,0x844f,0x8450,0x8452, +0x8453,0x8454,0x8455,0x8456,0x8458,0x845d,0x845e,0x845f, +0x8460,0x8462,0x8464,0x8465,0x8466,0x8467,0x8468,0x846a, +0x846e,0x846f,0x8470,0x8472,0x8474,0x8477,0x8479,0x847b, +0x847c,0x53d6,0x5a36,0x9f8b,0x8da3,0x53bb,0x5708,0x98a7, +0x6743,0x919b,0x6cc9,0x5168,0x75ca,0x62f3,0x72ac,0x5238, +0x529d,0x7f3a,0x7094,0x7638,0x5374,0x9e4a,0x69b7,0x786e, +0x96c0,0x88d9,0x7fa4,0x7136,0x71c3,0x5189,0x67d3,0x74e4, +0x58e4,0x6518,0x56b7,0x8ba9,0x9976,0x6270,0x7ed5,0x60f9, +0x70ed,0x58ec,0x4ec1,0x4eba,0x5fcd,0x97e7,0x4efb,0x8ba4, +0x5203,0x598a,0x7eab,0x6254,0x4ecd,0x65e5,0x620e,0x8338, +0x84c9,0x8363,0x878d,0x7194,0x6eb6,0x5bb9,0x7ed2,0x5197, +0x63c9,0x67d4,0x8089,0x8339,0x8815,0x5112,0x5b7a,0x5982, +0x8fb1,0x4e73,0x6c5d,0x5165,0x8925,0x8f6f,0x962e,0x854a, +0x745e,0x9510,0x95f0,0x6da6,0x82e5,0x5f31,0x6492,0x6d12, +0x8428,0x816e,0x9cc3,0x585e,0x8d5b,0x4e09,0x53c1,0x0000, +/* 0xc900 */ +0x847d,0x847e,0x847f,0x8480,0x8481,0x8483,0x8484,0x8485, +0x8486,0x848a,0x848d,0x848f,0x8490,0x8491,0x8492,0x8493, +0x8494,0x8495,0x8496,0x8498,0x849a,0x849b,0x849d,0x849e, +0x849f,0x84a0,0x84a2,0x84a3,0x84a4,0x84a5,0x84a6,0x84a7, +0x84a8,0x84a9,0x84aa,0x84ab,0x84ac,0x84ad,0x84ae,0x84b0, +0x84b1,0x84b3,0x84b5,0x84b6,0x84b7,0x84bb,0x84bc,0x84be, +0x84c0,0x84c2,0x84c3,0x84c5,0x84c6,0x84c7,0x84c8,0x84cb, +0x84cc,0x84ce,0x84cf,0x84d2,0x84d4,0x84d5,0x84d7,0x0000, +0x84d8,0x84d9,0x84da,0x84db,0x84dc,0x84de,0x84e1,0x84e2, +0x84e4,0x84e7,0x84e8,0x84e9,0x84ea,0x84eb,0x84ed,0x84ee, +0x84ef,0x84f1,0x84f2,0x84f3,0x84f4,0x84f5,0x84f6,0x84f7, +0x84f8,0x84f9,0x84fa,0x84fb,0x84fd,0x84fe,0x8500,0x8501, +0x8502,0x4f1e,0x6563,0x6851,0x55d3,0x4e27,0x6414,0x9a9a, +0x626b,0x5ac2,0x745f,0x8272,0x6da9,0x68ee,0x50e7,0x838e, +0x7802,0x6740,0x5239,0x6c99,0x7eb1,0x50bb,0x5565,0x715e, +0x7b5b,0x6652,0x73ca,0x82eb,0x6749,0x5c71,0x5220,0x717d, +0x886b,0x95ea,0x9655,0x64c5,0x8d61,0x81b3,0x5584,0x6c55, +0x6247,0x7f2e,0x5892,0x4f24,0x5546,0x8d4f,0x664c,0x4e0a, +0x5c1a,0x88f3,0x68a2,0x634e,0x7a0d,0x70e7,0x828d,0x52fa, +0x97f6,0x5c11,0x54e8,0x90b5,0x7ecd,0x5962,0x8d4a,0x86c7, +0x820c,0x820d,0x8d66,0x6444,0x5c04,0x6151,0x6d89,0x793e, +0x8bbe,0x7837,0x7533,0x547b,0x4f38,0x8eab,0x6df1,0x5a20, +0x7ec5,0x795e,0x6c88,0x5ba1,0x5a76,0x751a,0x80be,0x614e, +0x6e17,0x58f0,0x751f,0x7525,0x7272,0x5347,0x7ef3,0x0000, +/* 0xca00 */ +0x8503,0x8504,0x8505,0x8506,0x8507,0x8508,0x8509,0x850a, +0x850b,0x850d,0x850e,0x850f,0x8510,0x8512,0x8514,0x8515, +0x8516,0x8518,0x8519,0x851b,0x851c,0x851d,0x851e,0x8520, +0x8522,0x8523,0x8524,0x8525,0x8526,0x8527,0x8528,0x8529, +0x852a,0x852d,0x852e,0x852f,0x8530,0x8531,0x8532,0x8533, +0x8534,0x8535,0x8536,0x853e,0x853f,0x8540,0x8541,0x8542, +0x8544,0x8545,0x8546,0x8547,0x854b,0x854c,0x854d,0x854e, +0x854f,0x8550,0x8551,0x8552,0x8553,0x8554,0x8555,0x0000, +0x8557,0x8558,0x855a,0x855b,0x855c,0x855d,0x855f,0x8560, +0x8561,0x8562,0x8563,0x8565,0x8566,0x8567,0x8569,0x856a, +0x856b,0x856c,0x856d,0x856e,0x856f,0x8570,0x8571,0x8573, +0x8575,0x8576,0x8577,0x8578,0x857c,0x857d,0x857f,0x8580, +0x8581,0x7701,0x76db,0x5269,0x80dc,0x5723,0x5e08,0x5931, +0x72ee,0x65bd,0x6e7f,0x8bd7,0x5c38,0x8671,0x5341,0x77f3, +0x62fe,0x65f6,0x4ec0,0x98df,0x8680,0x5b9e,0x8bc6,0x53f2, +0x77e2,0x4f7f,0x5c4e,0x9a76,0x59cb,0x5f0f,0x793a,0x58eb, +0x4e16,0x67ff,0x4e8b,0x62ed,0x8a93,0x901d,0x52bf,0x662f, +0x55dc,0x566c,0x9002,0x4ed5,0x4f8d,0x91ca,0x9970,0x6c0f, +0x5e02,0x6043,0x5ba4,0x89c6,0x8bd5,0x6536,0x624b,0x9996, +0x5b88,0x5bff,0x6388,0x552e,0x53d7,0x7626,0x517d,0x852c, +0x67a2,0x68b3,0x6b8a,0x6292,0x8f93,0x53d4,0x8212,0x6dd1, +0x758f,0x4e66,0x8d4e,0x5b70,0x719f,0x85af,0x6691,0x66d9, +0x7f72,0x8700,0x9ecd,0x9f20,0x5c5e,0x672f,0x8ff0,0x6811, +0x675f,0x620d,0x7ad6,0x5885,0x5eb6,0x6570,0x6f31,0x0000, +/* 0xcb00 */ +0x8582,0x8583,0x8586,0x8588,0x8589,0x858a,0x858b,0x858c, +0x858d,0x858e,0x8590,0x8591,0x8592,0x8593,0x8594,0x8595, +0x8596,0x8597,0x8598,0x8599,0x859a,0x859d,0x859e,0x859f, +0x85a0,0x85a1,0x85a2,0x85a3,0x85a5,0x85a6,0x85a7,0x85a9, +0x85ab,0x85ac,0x85ad,0x85b1,0x85b2,0x85b3,0x85b4,0x85b5, +0x85b6,0x85b8,0x85ba,0x85bb,0x85bc,0x85bd,0x85be,0x85bf, +0x85c0,0x85c2,0x85c3,0x85c4,0x85c5,0x85c6,0x85c7,0x85c8, +0x85ca,0x85cb,0x85cc,0x85cd,0x85ce,0x85d1,0x85d2,0x0000, +0x85d4,0x85d6,0x85d7,0x85d8,0x85d9,0x85da,0x85db,0x85dd, +0x85de,0x85df,0x85e0,0x85e1,0x85e2,0x85e3,0x85e5,0x85e6, +0x85e7,0x85e8,0x85ea,0x85eb,0x85ec,0x85ed,0x85ee,0x85ef, +0x85f0,0x85f1,0x85f2,0x85f3,0x85f4,0x85f5,0x85f6,0x85f7, +0x85f8,0x6055,0x5237,0x800d,0x6454,0x8870,0x7529,0x5e05, +0x6813,0x62f4,0x971c,0x53cc,0x723d,0x8c01,0x6c34,0x7761, +0x7a0e,0x542e,0x77ac,0x987a,0x821c,0x8bf4,0x7855,0x6714, +0x70c1,0x65af,0x6495,0x5636,0x601d,0x79c1,0x53f8,0x4e1d, +0x6b7b,0x8086,0x5bfa,0x55e3,0x56db,0x4f3a,0x4f3c,0x9972, +0x5df3,0x677e,0x8038,0x6002,0x9882,0x9001,0x5b8b,0x8bbc, +0x8bf5,0x641c,0x8258,0x64de,0x55fd,0x82cf,0x9165,0x4fd7, +0x7d20,0x901f,0x7c9f,0x50f3,0x5851,0x6eaf,0x5bbf,0x8bc9, +0x8083,0x9178,0x849c,0x7b97,0x867d,0x968b,0x968f,0x7ee5, +0x9ad3,0x788e,0x5c81,0x7a57,0x9042,0x96a7,0x795f,0x5b59, +0x635f,0x7b0b,0x84d1,0x68ad,0x5506,0x7f29,0x7410,0x7d22, +0x9501,0x6240,0x584c,0x4ed6,0x5b83,0x5979,0x5854,0x0000, +/* 0xcc00 */ +0x85f9,0x85fa,0x85fc,0x85fd,0x85fe,0x8600,0x8601,0x8602, +0x8603,0x8604,0x8606,0x8607,0x8608,0x8609,0x860a,0x860b, +0x860c,0x860d,0x860e,0x860f,0x8610,0x8612,0x8613,0x8614, +0x8615,0x8617,0x8618,0x8619,0x861a,0x861b,0x861c,0x861d, +0x861e,0x861f,0x8620,0x8621,0x8622,0x8623,0x8624,0x8625, +0x8626,0x8628,0x862a,0x862b,0x862c,0x862d,0x862e,0x862f, +0x8630,0x8631,0x8632,0x8633,0x8634,0x8635,0x8636,0x8637, +0x8639,0x863a,0x863b,0x863d,0x863e,0x863f,0x8640,0x0000, +0x8641,0x8642,0x8643,0x8644,0x8645,0x8646,0x8647,0x8648, +0x8649,0x864a,0x864b,0x864c,0x8652,0x8653,0x8655,0x8656, +0x8657,0x8658,0x8659,0x865b,0x865c,0x865d,0x865f,0x8660, +0x8661,0x8663,0x8664,0x8665,0x8666,0x8667,0x8668,0x8669, +0x866a,0x736d,0x631e,0x8e4b,0x8e0f,0x80ce,0x82d4,0x62ac, +0x53f0,0x6cf0,0x915e,0x592a,0x6001,0x6c70,0x574d,0x644a, +0x8d2a,0x762b,0x6ee9,0x575b,0x6a80,0x75f0,0x6f6d,0x8c2d, +0x8c08,0x5766,0x6bef,0x8892,0x78b3,0x63a2,0x53f9,0x70ad, +0x6c64,0x5858,0x642a,0x5802,0x68e0,0x819b,0x5510,0x7cd6, +0x5018,0x8eba,0x6dcc,0x8d9f,0x70eb,0x638f,0x6d9b,0x6ed4, +0x7ee6,0x8404,0x6843,0x9003,0x6dd8,0x9676,0x8ba8,0x5957, +0x7279,0x85e4,0x817e,0x75bc,0x8a8a,0x68af,0x5254,0x8e22, +0x9511,0x63d0,0x9898,0x8e44,0x557c,0x4f53,0x66ff,0x568f, +0x60d5,0x6d95,0x5243,0x5c49,0x5929,0x6dfb,0x586b,0x7530, +0x751c,0x606c,0x8214,0x8146,0x6311,0x6761,0x8fe2,0x773a, +0x8df3,0x8d34,0x94c1,0x5e16,0x5385,0x542c,0x70c3,0x0000, +/* 0xcd00 */ +0x866d,0x866f,0x8670,0x8672,0x8673,0x8674,0x8675,0x8676, +0x8677,0x8678,0x8683,0x8684,0x8685,0x8686,0x8687,0x8688, +0x8689,0x868e,0x868f,0x8690,0x8691,0x8692,0x8694,0x8696, +0x8697,0x8698,0x8699,0x869a,0x869b,0x869e,0x869f,0x86a0, +0x86a1,0x86a2,0x86a5,0x86a6,0x86ab,0x86ad,0x86ae,0x86b2, +0x86b3,0x86b7,0x86b8,0x86b9,0x86bb,0x86bc,0x86bd,0x86be, +0x86bf,0x86c1,0x86c2,0x86c3,0x86c5,0x86c8,0x86cc,0x86cd, +0x86d2,0x86d3,0x86d5,0x86d6,0x86d7,0x86da,0x86dc,0x0000, +0x86dd,0x86e0,0x86e1,0x86e2,0x86e3,0x86e5,0x86e6,0x86e7, +0x86e8,0x86ea,0x86eb,0x86ec,0x86ef,0x86f5,0x86f6,0x86f7, +0x86fa,0x86fb,0x86fc,0x86fd,0x86ff,0x8701,0x8704,0x8705, +0x8706,0x870b,0x870c,0x870e,0x870f,0x8710,0x8711,0x8714, +0x8716,0x6c40,0x5ef7,0x505c,0x4ead,0x5ead,0x633a,0x8247, +0x901a,0x6850,0x916e,0x77b3,0x540c,0x94dc,0x5f64,0x7ae5, +0x6876,0x6345,0x7b52,0x7edf,0x75db,0x5077,0x6295,0x5934, +0x900f,0x51f8,0x79c3,0x7a81,0x56fe,0x5f92,0x9014,0x6d82, +0x5c60,0x571f,0x5410,0x5154,0x6e4d,0x56e2,0x63a8,0x9893, +0x817f,0x8715,0x892a,0x9000,0x541e,0x5c6f,0x81c0,0x62d6, +0x6258,0x8131,0x9e35,0x9640,0x9a6e,0x9a7c,0x692d,0x59a5, +0x62d3,0x553e,0x6316,0x54c7,0x86d9,0x6d3c,0x5a03,0x74e6, +0x889c,0x6b6a,0x5916,0x8c4c,0x5f2f,0x6e7e,0x73a9,0x987d, +0x4e38,0x70f7,0x5b8c,0x7897,0x633d,0x665a,0x7696,0x60cb, +0x5b9b,0x5a49,0x4e07,0x8155,0x6c6a,0x738b,0x4ea1,0x6789, +0x7f51,0x5f80,0x65fa,0x671b,0x5fd8,0x5984,0x5a01,0x0000, +/* 0xce00 */ +0x8719,0x871b,0x871d,0x871f,0x8720,0x8724,0x8726,0x8727, +0x8728,0x872a,0x872b,0x872c,0x872d,0x872f,0x8730,0x8732, +0x8733,0x8735,0x8736,0x8738,0x8739,0x873a,0x873c,0x873d, +0x8740,0x8741,0x8742,0x8743,0x8744,0x8745,0x8746,0x874a, +0x874b,0x874d,0x874f,0x8750,0x8751,0x8752,0x8754,0x8755, +0x8756,0x8758,0x875a,0x875b,0x875c,0x875d,0x875e,0x875f, +0x8761,0x8762,0x8766,0x8767,0x8768,0x8769,0x876a,0x876b, +0x876c,0x876d,0x876f,0x8771,0x8772,0x8773,0x8775,0x0000, +0x8777,0x8778,0x8779,0x877a,0x877f,0x8780,0x8781,0x8784, +0x8786,0x8787,0x8789,0x878a,0x878c,0x878e,0x878f,0x8790, +0x8791,0x8792,0x8794,0x8795,0x8796,0x8798,0x8799,0x879a, +0x879b,0x879c,0x879d,0x879e,0x87a0,0x87a1,0x87a2,0x87a3, +0x87a4,0x5dcd,0x5fae,0x5371,0x97e6,0x8fdd,0x6845,0x56f4, +0x552f,0x60df,0x4e3a,0x6f4d,0x7ef4,0x82c7,0x840e,0x59d4, +0x4f1f,0x4f2a,0x5c3e,0x7eac,0x672a,0x851a,0x5473,0x754f, +0x80c3,0x5582,0x9b4f,0x4f4d,0x6e2d,0x8c13,0x5c09,0x6170, +0x536b,0x761f,0x6e29,0x868a,0x6587,0x95fb,0x7eb9,0x543b, +0x7a33,0x7d0a,0x95ee,0x55e1,0x7fc1,0x74ee,0x631d,0x8717, +0x6da1,0x7a9d,0x6211,0x65a1,0x5367,0x63e1,0x6c83,0x5deb, +0x545c,0x94a8,0x4e4c,0x6c61,0x8bec,0x5c4b,0x65e0,0x829c, +0x68a7,0x543e,0x5434,0x6bcb,0x6b66,0x4e94,0x6342,0x5348, +0x821e,0x4f0d,0x4fae,0x575e,0x620a,0x96fe,0x6664,0x7269, +0x52ff,0x52a1,0x609f,0x8bef,0x6614,0x7199,0x6790,0x897f, +0x7852,0x77fd,0x6670,0x563b,0x5438,0x9521,0x727a,0x0000, +/* 0xcf00 */ +0x87a5,0x87a6,0x87a7,0x87a9,0x87aa,0x87ae,0x87b0,0x87b1, +0x87b2,0x87b4,0x87b6,0x87b7,0x87b8,0x87b9,0x87bb,0x87bc, +0x87be,0x87bf,0x87c1,0x87c2,0x87c3,0x87c4,0x87c5,0x87c7, +0x87c8,0x87c9,0x87cc,0x87cd,0x87ce,0x87cf,0x87d0,0x87d4, +0x87d5,0x87d6,0x87d7,0x87d8,0x87d9,0x87da,0x87dc,0x87dd, +0x87de,0x87df,0x87e1,0x87e2,0x87e3,0x87e4,0x87e6,0x87e7, +0x87e8,0x87e9,0x87eb,0x87ec,0x87ed,0x87ef,0x87f0,0x87f1, +0x87f2,0x87f3,0x87f4,0x87f5,0x87f6,0x87f7,0x87f8,0x0000, +0x87fa,0x87fb,0x87fc,0x87fd,0x87ff,0x8800,0x8801,0x8802, +0x8804,0x8805,0x8806,0x8807,0x8808,0x8809,0x880b,0x880c, +0x880d,0x880e,0x880f,0x8810,0x8811,0x8812,0x8814,0x8817, +0x8818,0x8819,0x881a,0x881c,0x881d,0x881e,0x881f,0x8820, +0x8823,0x7a00,0x606f,0x5e0c,0x6089,0x819d,0x5915,0x60dc, +0x7184,0x70ef,0x6eaa,0x6c50,0x7280,0x6a84,0x88ad,0x5e2d, +0x4e60,0x5ab3,0x559c,0x94e3,0x6d17,0x7cfb,0x9699,0x620f, +0x7ec6,0x778e,0x867e,0x5323,0x971e,0x8f96,0x6687,0x5ce1, +0x4fa0,0x72ed,0x4e0b,0x53a6,0x590f,0x5413,0x6380,0x9528, +0x5148,0x4ed9,0x9c9c,0x7ea4,0x54b8,0x8d24,0x8854,0x8237, +0x95f2,0x6d8e,0x5f26,0x5acc,0x663e,0x9669,0x73b0,0x732e, +0x53bf,0x817a,0x9985,0x7fa1,0x5baa,0x9677,0x9650,0x7ebf, +0x76f8,0x53a2,0x9576,0x9999,0x7bb1,0x8944,0x6e58,0x4e61, +0x7fd4,0x7965,0x8be6,0x60f3,0x54cd,0x4eab,0x9879,0x5df7, +0x6a61,0x50cf,0x5411,0x8c61,0x8427,0x785d,0x9704,0x524a, +0x54ee,0x56a3,0x9500,0x6d88,0x5bb5,0x6dc6,0x6653,0x0000, +/* 0xd000 */ +0x8824,0x8825,0x8826,0x8827,0x8828,0x8829,0x882a,0x882b, +0x882c,0x882d,0x882e,0x882f,0x8830,0x8831,0x8833,0x8834, +0x8835,0x8836,0x8837,0x8838,0x883a,0x883b,0x883d,0x883e, +0x883f,0x8841,0x8842,0x8843,0x8846,0x8847,0x8848,0x8849, +0x884a,0x884b,0x884e,0x884f,0x8850,0x8851,0x8852,0x8853, +0x8855,0x8856,0x8858,0x885a,0x885b,0x885c,0x885d,0x885e, +0x885f,0x8860,0x8866,0x8867,0x886a,0x886d,0x886f,0x8871, +0x8873,0x8874,0x8875,0x8876,0x8878,0x8879,0x887a,0x0000, +0x887b,0x887c,0x8880,0x8883,0x8886,0x8887,0x8889,0x888a, +0x888c,0x888e,0x888f,0x8890,0x8891,0x8893,0x8894,0x8895, +0x8897,0x8898,0x8899,0x889a,0x889b,0x889d,0x889e,0x889f, +0x88a0,0x88a1,0x88a3,0x88a5,0x88a6,0x88a7,0x88a8,0x88a9, +0x88aa,0x5c0f,0x5b5d,0x6821,0x8096,0x5578,0x7b11,0x6548, +0x6954,0x4e9b,0x6b47,0x874e,0x978b,0x534f,0x631f,0x643a, +0x90aa,0x659c,0x80c1,0x8c10,0x5199,0x68b0,0x5378,0x87f9, +0x61c8,0x6cc4,0x6cfb,0x8c22,0x5c51,0x85aa,0x82af,0x950c, +0x6b23,0x8f9b,0x65b0,0x5ffb,0x5fc3,0x4fe1,0x8845,0x661f, +0x8165,0x7329,0x60fa,0x5174,0x5211,0x578b,0x5f62,0x90a2, +0x884c,0x9192,0x5e78,0x674f,0x6027,0x59d3,0x5144,0x51f6, +0x80f8,0x5308,0x6c79,0x96c4,0x718a,0x4f11,0x4fee,0x7f9e, +0x673d,0x55c5,0x9508,0x79c0,0x8896,0x7ee3,0x589f,0x620c, +0x9700,0x865a,0x5618,0x987b,0x5f90,0x8bb8,0x84c4,0x9157, +0x53d9,0x65ed,0x5e8f,0x755c,0x6064,0x7d6e,0x5a7f,0x7eea, +0x7eed,0x8f69,0x55a7,0x5ba3,0x60ac,0x65cb,0x7384,0x0000, +/* 0xd100 */ +0x88ac,0x88ae,0x88af,0x88b0,0x88b2,0x88b3,0x88b4,0x88b5, +0x88b6,0x88b8,0x88b9,0x88ba,0x88bb,0x88bd,0x88be,0x88bf, +0x88c0,0x88c3,0x88c4,0x88c7,0x88c8,0x88ca,0x88cb,0x88cc, +0x88cd,0x88cf,0x88d0,0x88d1,0x88d3,0x88d6,0x88d7,0x88da, +0x88db,0x88dc,0x88dd,0x88de,0x88e0,0x88e1,0x88e6,0x88e7, +0x88e9,0x88ea,0x88eb,0x88ec,0x88ed,0x88ee,0x88ef,0x88f2, +0x88f5,0x88f6,0x88f7,0x88fa,0x88fb,0x88fd,0x88ff,0x8900, +0x8901,0x8903,0x8904,0x8905,0x8906,0x8907,0x8908,0x0000, +0x8909,0x890b,0x890c,0x890d,0x890e,0x890f,0x8911,0x8914, +0x8915,0x8916,0x8917,0x8918,0x891c,0x891d,0x891e,0x891f, +0x8920,0x8922,0x8923,0x8924,0x8926,0x8927,0x8928,0x8929, +0x892c,0x892d,0x892e,0x892f,0x8931,0x8932,0x8933,0x8935, +0x8937,0x9009,0x7663,0x7729,0x7eda,0x9774,0x859b,0x5b66, +0x7a74,0x96ea,0x8840,0x52cb,0x718f,0x5faa,0x65ec,0x8be2, +0x5bfb,0x9a6f,0x5de1,0x6b89,0x6c5b,0x8bad,0x8baf,0x900a, +0x8fc5,0x538b,0x62bc,0x9e26,0x9e2d,0x5440,0x4e2b,0x82bd, +0x7259,0x869c,0x5d16,0x8859,0x6daf,0x96c5,0x54d1,0x4e9a, +0x8bb6,0x7109,0x54bd,0x9609,0x70df,0x6df9,0x76d0,0x4e25, +0x7814,0x8712,0x5ca9,0x5ef6,0x8a00,0x989c,0x960e,0x708e, +0x6cbf,0x5944,0x63a9,0x773c,0x884d,0x6f14,0x8273,0x5830, +0x71d5,0x538c,0x781a,0x96c1,0x5501,0x5f66,0x7130,0x5bb4, +0x8c1a,0x9a8c,0x6b83,0x592e,0x9e2f,0x79e7,0x6768,0x626c, +0x4f6f,0x75a1,0x7f8a,0x6d0b,0x9633,0x6c27,0x4ef0,0x75d2, +0x517b,0x6837,0x6f3e,0x9080,0x8170,0x5996,0x7476,0x0000, +/* 0xd200 */ +0x8938,0x8939,0x893a,0x893b,0x893c,0x893d,0x893e,0x893f, +0x8940,0x8942,0x8943,0x8945,0x8946,0x8947,0x8948,0x8949, +0x894a,0x894b,0x894c,0x894d,0x894e,0x894f,0x8950,0x8951, +0x8952,0x8953,0x8954,0x8955,0x8956,0x8957,0x8958,0x8959, +0x895a,0x895b,0x895c,0x895d,0x8960,0x8961,0x8962,0x8963, +0x8964,0x8965,0x8967,0x8968,0x8969,0x896a,0x896b,0x896c, +0x896d,0x896e,0x896f,0x8970,0x8971,0x8972,0x8973,0x8974, +0x8975,0x8976,0x8977,0x8978,0x8979,0x897a,0x897c,0x0000, +0x897d,0x897e,0x8980,0x8982,0x8984,0x8985,0x8987,0x8988, +0x8989,0x898a,0x898b,0x898c,0x898d,0x898e,0x898f,0x8990, +0x8991,0x8992,0x8993,0x8994,0x8995,0x8996,0x8997,0x8998, +0x8999,0x899a,0x899b,0x899c,0x899d,0x899e,0x899f,0x89a0, +0x89a1,0x6447,0x5c27,0x9065,0x7a91,0x8c23,0x59da,0x54ac, +0x8200,0x836f,0x8981,0x8000,0x6930,0x564e,0x8036,0x7237, +0x91ce,0x51b6,0x4e5f,0x9875,0x6396,0x4e1a,0x53f6,0x66f3, +0x814b,0x591c,0x6db2,0x4e00,0x58f9,0x533b,0x63d6,0x94f1, +0x4f9d,0x4f0a,0x8863,0x9890,0x5937,0x9057,0x79fb,0x4eea, +0x80f0,0x7591,0x6c82,0x5b9c,0x59e8,0x5f5d,0x6905,0x8681, +0x501a,0x5df2,0x4e59,0x77e3,0x4ee5,0x827a,0x6291,0x6613, +0x9091,0x5c79,0x4ebf,0x5f79,0x81c6,0x9038,0x8084,0x75ab, +0x4ea6,0x88d4,0x610f,0x6bc5,0x5fc6,0x4e49,0x76ca,0x6ea2, +0x8be3,0x8bae,0x8c0a,0x8bd1,0x5f02,0x7ffc,0x7fcc,0x7ece, +0x8335,0x836b,0x56e0,0x6bb7,0x97f3,0x9634,0x59fb,0x541f, +0x94f6,0x6deb,0x5bc5,0x996e,0x5c39,0x5f15,0x9690,0x0000, +/* 0xd300 */ +0x89a2,0x89a3,0x89a4,0x89a5,0x89a6,0x89a7,0x89a8,0x89a9, +0x89aa,0x89ab,0x89ac,0x89ad,0x89ae,0x89af,0x89b0,0x89b1, +0x89b2,0x89b3,0x89b4,0x89b5,0x89b6,0x89b7,0x89b8,0x89b9, +0x89ba,0x89bb,0x89bc,0x89bd,0x89be,0x89bf,0x89c0,0x89c3, +0x89cd,0x89d3,0x89d4,0x89d5,0x89d7,0x89d8,0x89d9,0x89db, +0x89dd,0x89df,0x89e0,0x89e1,0x89e2,0x89e4,0x89e7,0x89e8, +0x89e9,0x89ea,0x89ec,0x89ed,0x89ee,0x89f0,0x89f1,0x89f2, +0x89f4,0x89f5,0x89f6,0x89f7,0x89f8,0x89f9,0x89fa,0x0000, +0x89fb,0x89fc,0x89fd,0x89fe,0x89ff,0x8a01,0x8a02,0x8a03, +0x8a04,0x8a05,0x8a06,0x8a08,0x8a09,0x8a0a,0x8a0b,0x8a0c, +0x8a0d,0x8a0e,0x8a0f,0x8a10,0x8a11,0x8a12,0x8a13,0x8a14, +0x8a15,0x8a16,0x8a17,0x8a18,0x8a19,0x8a1a,0x8a1b,0x8a1c, +0x8a1d,0x5370,0x82f1,0x6a31,0x5a74,0x9e70,0x5e94,0x7f28, +0x83b9,0x8424,0x8425,0x8367,0x8747,0x8fce,0x8d62,0x76c8, +0x5f71,0x9896,0x786c,0x6620,0x54df,0x62e5,0x4f63,0x81c3, +0x75c8,0x5eb8,0x96cd,0x8e0a,0x86f9,0x548f,0x6cf3,0x6d8c, +0x6c38,0x607f,0x52c7,0x7528,0x5e7d,0x4f18,0x60a0,0x5fe7, +0x5c24,0x7531,0x90ae,0x94c0,0x72b9,0x6cb9,0x6e38,0x9149, +0x6709,0x53cb,0x53f3,0x4f51,0x91c9,0x8bf1,0x53c8,0x5e7c, +0x8fc2,0x6de4,0x4e8e,0x76c2,0x6986,0x865e,0x611a,0x8206, +0x4f59,0x4fde,0x903e,0x9c7c,0x6109,0x6e1d,0x6e14,0x9685, +0x4e88,0x5a31,0x96e8,0x4e0e,0x5c7f,0x79b9,0x5b87,0x8bed, +0x7fbd,0x7389,0x57df,0x828b,0x90c1,0x5401,0x9047,0x55bb, +0x5cea,0x5fa1,0x6108,0x6b32,0x72f1,0x80b2,0x8a89,0x0000, +/* 0xd400 */ +0x8a1e,0x8a1f,0x8a20,0x8a21,0x8a22,0x8a23,0x8a24,0x8a25, +0x8a26,0x8a27,0x8a28,0x8a29,0x8a2a,0x8a2b,0x8a2c,0x8a2d, +0x8a2e,0x8a2f,0x8a30,0x8a31,0x8a32,0x8a33,0x8a34,0x8a35, +0x8a36,0x8a37,0x8a38,0x8a39,0x8a3a,0x8a3b,0x8a3c,0x8a3d, +0x8a3f,0x8a40,0x8a41,0x8a42,0x8a43,0x8a44,0x8a45,0x8a46, +0x8a47,0x8a49,0x8a4a,0x8a4b,0x8a4c,0x8a4d,0x8a4e,0x8a4f, +0x8a50,0x8a51,0x8a52,0x8a53,0x8a54,0x8a55,0x8a56,0x8a57, +0x8a58,0x8a59,0x8a5a,0x8a5b,0x8a5c,0x8a5d,0x8a5e,0x0000, +0x8a5f,0x8a60,0x8a61,0x8a62,0x8a63,0x8a64,0x8a65,0x8a66, +0x8a67,0x8a68,0x8a69,0x8a6a,0x8a6b,0x8a6c,0x8a6d,0x8a6e, +0x8a6f,0x8a70,0x8a71,0x8a72,0x8a73,0x8a74,0x8a75,0x8a76, +0x8a77,0x8a78,0x8a7a,0x8a7b,0x8a7c,0x8a7d,0x8a7e,0x8a7f, +0x8a80,0x6d74,0x5bd3,0x88d5,0x9884,0x8c6b,0x9a6d,0x9e33, +0x6e0a,0x51a4,0x5143,0x57a3,0x8881,0x539f,0x63f4,0x8f95, +0x56ed,0x5458,0x5706,0x733f,0x6e90,0x7f18,0x8fdc,0x82d1, +0x613f,0x6028,0x9662,0x66f0,0x7ea6,0x8d8a,0x8dc3,0x94a5, +0x5cb3,0x7ca4,0x6708,0x60a6,0x9605,0x8018,0x4e91,0x90e7, +0x5300,0x9668,0x5141,0x8fd0,0x8574,0x915d,0x6655,0x97f5, +0x5b55,0x531d,0x7838,0x6742,0x683d,0x54c9,0x707e,0x5bb0, +0x8f7d,0x518d,0x5728,0x54b1,0x6512,0x6682,0x8d5e,0x8d43, +0x810f,0x846c,0x906d,0x7cdf,0x51ff,0x85fb,0x67a3,0x65e9, +0x6fa1,0x86a4,0x8e81,0x566a,0x9020,0x7682,0x7076,0x71e5, +0x8d23,0x62e9,0x5219,0x6cfd,0x8d3c,0x600e,0x589e,0x618e, +0x66fe,0x8d60,0x624e,0x55b3,0x6e23,0x672d,0x8f67,0x0000, +/* 0xd500 */ +0x8a81,0x8a82,0x8a83,0x8a84,0x8a85,0x8a86,0x8a87,0x8a88, +0x8a8b,0x8a8c,0x8a8d,0x8a8e,0x8a8f,0x8a90,0x8a91,0x8a92, +0x8a94,0x8a95,0x8a96,0x8a97,0x8a98,0x8a99,0x8a9a,0x8a9b, +0x8a9c,0x8a9d,0x8a9e,0x8a9f,0x8aa0,0x8aa1,0x8aa2,0x8aa3, +0x8aa4,0x8aa5,0x8aa6,0x8aa7,0x8aa8,0x8aa9,0x8aaa,0x8aab, +0x8aac,0x8aad,0x8aae,0x8aaf,0x8ab0,0x8ab1,0x8ab2,0x8ab3, +0x8ab4,0x8ab5,0x8ab6,0x8ab7,0x8ab8,0x8ab9,0x8aba,0x8abb, +0x8abc,0x8abd,0x8abe,0x8abf,0x8ac0,0x8ac1,0x8ac2,0x0000, +0x8ac3,0x8ac4,0x8ac5,0x8ac6,0x8ac7,0x8ac8,0x8ac9,0x8aca, +0x8acb,0x8acc,0x8acd,0x8ace,0x8acf,0x8ad0,0x8ad1,0x8ad2, +0x8ad3,0x8ad4,0x8ad5,0x8ad6,0x8ad7,0x8ad8,0x8ad9,0x8ada, +0x8adb,0x8adc,0x8add,0x8ade,0x8adf,0x8ae0,0x8ae1,0x8ae2, +0x8ae3,0x94e1,0x95f8,0x7728,0x6805,0x69a8,0x548b,0x4e4d, +0x70b8,0x8bc8,0x6458,0x658b,0x5b85,0x7a84,0x503a,0x5be8, +0x77bb,0x6be1,0x8a79,0x7c98,0x6cbe,0x76cf,0x65a9,0x8f97, +0x5d2d,0x5c55,0x8638,0x6808,0x5360,0x6218,0x7ad9,0x6e5b, +0x7efd,0x6a1f,0x7ae0,0x5f70,0x6f33,0x5f20,0x638c,0x6da8, +0x6756,0x4e08,0x5e10,0x8d26,0x4ed7,0x80c0,0x7634,0x969c, +0x62db,0x662d,0x627e,0x6cbc,0x8d75,0x7167,0x7f69,0x5146, +0x8087,0x53ec,0x906e,0x6298,0x54f2,0x86f0,0x8f99,0x8005, +0x9517,0x8517,0x8fd9,0x6d59,0x73cd,0x659f,0x771f,0x7504, +0x7827,0x81fb,0x8d1e,0x9488,0x4fa6,0x6795,0x75b9,0x8bca, +0x9707,0x632f,0x9547,0x9635,0x84b8,0x6323,0x7741,0x5f81, +0x72f0,0x4e89,0x6014,0x6574,0x62ef,0x6b63,0x653f,0x0000, +/* 0xd600 */ +0x8ae4,0x8ae5,0x8ae6,0x8ae7,0x8ae8,0x8ae9,0x8aea,0x8aeb, +0x8aec,0x8aed,0x8aee,0x8aef,0x8af0,0x8af1,0x8af2,0x8af3, +0x8af4,0x8af5,0x8af6,0x8af7,0x8af8,0x8af9,0x8afa,0x8afb, +0x8afc,0x8afd,0x8afe,0x8aff,0x8b00,0x8b01,0x8b02,0x8b03, +0x8b04,0x8b05,0x8b06,0x8b08,0x8b09,0x8b0a,0x8b0b,0x8b0c, +0x8b0d,0x8b0e,0x8b0f,0x8b10,0x8b11,0x8b12,0x8b13,0x8b14, +0x8b15,0x8b16,0x8b17,0x8b18,0x8b19,0x8b1a,0x8b1b,0x8b1c, +0x8b1d,0x8b1e,0x8b1f,0x8b20,0x8b21,0x8b22,0x8b23,0x0000, +0x8b24,0x8b25,0x8b27,0x8b28,0x8b29,0x8b2a,0x8b2b,0x8b2c, +0x8b2d,0x8b2e,0x8b2f,0x8b30,0x8b31,0x8b32,0x8b33,0x8b34, +0x8b35,0x8b36,0x8b37,0x8b38,0x8b39,0x8b3a,0x8b3b,0x8b3c, +0x8b3d,0x8b3e,0x8b3f,0x8b40,0x8b41,0x8b42,0x8b43,0x8b44, +0x8b45,0x5e27,0x75c7,0x90d1,0x8bc1,0x829d,0x679d,0x652f, +0x5431,0x8718,0x77e5,0x80a2,0x8102,0x6c41,0x4e4b,0x7ec7, +0x804c,0x76f4,0x690d,0x6b96,0x6267,0x503c,0x4f84,0x5740, +0x6307,0x6b62,0x8dbe,0x53ea,0x65e8,0x7eb8,0x5fd7,0x631a, +0x63b7,0x81f3,0x81f4,0x7f6e,0x5e1c,0x5cd9,0x5236,0x667a, +0x79e9,0x7a1a,0x8d28,0x7099,0x75d4,0x6ede,0x6cbb,0x7a92, +0x4e2d,0x76c5,0x5fe0,0x949f,0x8877,0x7ec8,0x79cd,0x80bf, +0x91cd,0x4ef2,0x4f17,0x821f,0x5468,0x5dde,0x6d32,0x8bcc, +0x7ca5,0x8f74,0x8098,0x5e1a,0x5492,0x76b1,0x5b99,0x663c, +0x9aa4,0x73e0,0x682a,0x86db,0x6731,0x732a,0x8bf8,0x8bdb, +0x9010,0x7af9,0x70db,0x716e,0x62c4,0x77a9,0x5631,0x4e3b, +0x8457,0x67f1,0x52a9,0x86c0,0x8d2e,0x94f8,0x7b51,0x0000, +/* 0xd700 */ +0x8b46,0x8b47,0x8b48,0x8b49,0x8b4a,0x8b4b,0x8b4c,0x8b4d, +0x8b4e,0x8b4f,0x8b50,0x8b51,0x8b52,0x8b53,0x8b54,0x8b55, +0x8b56,0x8b57,0x8b58,0x8b59,0x8b5a,0x8b5b,0x8b5c,0x8b5d, +0x8b5e,0x8b5f,0x8b60,0x8b61,0x8b62,0x8b63,0x8b64,0x8b65, +0x8b67,0x8b68,0x8b69,0x8b6a,0x8b6b,0x8b6d,0x8b6e,0x8b6f, +0x8b70,0x8b71,0x8b72,0x8b73,0x8b74,0x8b75,0x8b76,0x8b77, +0x8b78,0x8b79,0x8b7a,0x8b7b,0x8b7c,0x8b7d,0x8b7e,0x8b7f, +0x8b80,0x8b81,0x8b82,0x8b83,0x8b84,0x8b85,0x8b86,0x0000, +0x8b87,0x8b88,0x8b89,0x8b8a,0x8b8b,0x8b8c,0x8b8d,0x8b8e, +0x8b8f,0x8b90,0x8b91,0x8b92,0x8b93,0x8b94,0x8b95,0x8b96, +0x8b97,0x8b98,0x8b99,0x8b9a,0x8b9b,0x8b9c,0x8b9d,0x8b9e, +0x8b9f,0x8bac,0x8bb1,0x8bbb,0x8bc7,0x8bd0,0x8bea,0x8c09, +0x8c1e,0x4f4f,0x6ce8,0x795d,0x9a7b,0x6293,0x722a,0x62fd, +0x4e13,0x7816,0x8f6c,0x64b0,0x8d5a,0x7bc6,0x6869,0x5e84, +0x88c5,0x5986,0x649e,0x58ee,0x72b6,0x690e,0x9525,0x8ffd, +0x8d58,0x5760,0x7f00,0x8c06,0x51c6,0x6349,0x62d9,0x5353, +0x684c,0x7422,0x8301,0x914c,0x5544,0x7740,0x707c,0x6d4a, +0x5179,0x54a8,0x8d44,0x59ff,0x6ecb,0x6dc4,0x5b5c,0x7d2b, +0x4ed4,0x7c7d,0x6ed3,0x5b50,0x81ea,0x6e0d,0x5b57,0x9b03, +0x68d5,0x8e2a,0x5b97,0x7efc,0x603b,0x7eb5,0x90b9,0x8d70, +0x594f,0x63cd,0x79df,0x8db3,0x5352,0x65cf,0x7956,0x8bc5, +0x963b,0x7ec4,0x94bb,0x7e82,0x5634,0x9189,0x6700,0x7f6a, +0x5c0a,0x9075,0x6628,0x5de6,0x4f50,0x67de,0x505a,0x4f5c, +0x5750,0x5ea7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xd800 */ +0x8c38,0x8c39,0x8c3a,0x8c3b,0x8c3c,0x8c3d,0x8c3e,0x8c3f, +0x8c40,0x8c42,0x8c43,0x8c44,0x8c45,0x8c48,0x8c4a,0x8c4b, +0x8c4d,0x8c4e,0x8c4f,0x8c50,0x8c51,0x8c52,0x8c53,0x8c54, +0x8c56,0x8c57,0x8c58,0x8c59,0x8c5b,0x8c5c,0x8c5d,0x8c5e, +0x8c5f,0x8c60,0x8c63,0x8c64,0x8c65,0x8c66,0x8c67,0x8c68, +0x8c69,0x8c6c,0x8c6d,0x8c6e,0x8c6f,0x8c70,0x8c71,0x8c72, +0x8c74,0x8c75,0x8c76,0x8c77,0x8c7b,0x8c7c,0x8c7d,0x8c7e, +0x8c7f,0x8c80,0x8c81,0x8c83,0x8c84,0x8c86,0x8c87,0x0000, +0x8c88,0x8c8b,0x8c8d,0x8c8e,0x8c8f,0x8c90,0x8c91,0x8c92, +0x8c93,0x8c95,0x8c96,0x8c97,0x8c99,0x8c9a,0x8c9b,0x8c9c, +0x8c9d,0x8c9e,0x8c9f,0x8ca0,0x8ca1,0x8ca2,0x8ca3,0x8ca4, +0x8ca5,0x8ca6,0x8ca7,0x8ca8,0x8ca9,0x8caa,0x8cab,0x8cac, +0x8cad,0x4e8d,0x4e0c,0x5140,0x4e10,0x5eff,0x5345,0x4e15, +0x4e98,0x4e1e,0x9b32,0x5b6c,0x5669,0x4e28,0x79ba,0x4e3f, +0x5315,0x4e47,0x592d,0x723b,0x536e,0x6c10,0x56df,0x80e4, +0x9997,0x6bd3,0x777e,0x9f17,0x4e36,0x4e9f,0x9f10,0x4e5c, +0x4e69,0x4e93,0x8288,0x5b5b,0x556c,0x560f,0x4ec4,0x538d, +0x539d,0x53a3,0x53a5,0x53ae,0x9765,0x8d5d,0x531a,0x53f5, +0x5326,0x532e,0x533e,0x8d5c,0x5366,0x5363,0x5202,0x5208, +0x520e,0x522d,0x5233,0x523f,0x5240,0x524c,0x525e,0x5261, +0x525c,0x84af,0x527d,0x5282,0x5281,0x5290,0x5293,0x5182, +0x7f54,0x4ebb,0x4ec3,0x4ec9,0x4ec2,0x4ee8,0x4ee1,0x4eeb, +0x4ede,0x4f1b,0x4ef3,0x4f22,0x4f64,0x4ef5,0x4f25,0x4f27, +0x4f09,0x4f2b,0x4f5e,0x4f67,0x6538,0x4f5a,0x4f5d,0x0000, +/* 0xd900 */ +0x8cae,0x8caf,0x8cb0,0x8cb1,0x8cb2,0x8cb3,0x8cb4,0x8cb5, +0x8cb6,0x8cb7,0x8cb8,0x8cb9,0x8cba,0x8cbb,0x8cbc,0x8cbd, +0x8cbe,0x8cbf,0x8cc0,0x8cc1,0x8cc2,0x8cc3,0x8cc4,0x8cc5, +0x8cc6,0x8cc7,0x8cc8,0x8cc9,0x8cca,0x8ccb,0x8ccc,0x8ccd, +0x8cce,0x8ccf,0x8cd0,0x8cd1,0x8cd2,0x8cd3,0x8cd4,0x8cd5, +0x8cd6,0x8cd7,0x8cd8,0x8cd9,0x8cda,0x8cdb,0x8cdc,0x8cdd, +0x8cde,0x8cdf,0x8ce0,0x8ce1,0x8ce2,0x8ce3,0x8ce4,0x8ce5, +0x8ce6,0x8ce7,0x8ce8,0x8ce9,0x8cea,0x8ceb,0x8cec,0x0000, +0x8ced,0x8cee,0x8cef,0x8cf0,0x8cf1,0x8cf2,0x8cf3,0x8cf4, +0x8cf5,0x8cf6,0x8cf7,0x8cf8,0x8cf9,0x8cfa,0x8cfb,0x8cfc, +0x8cfd,0x8cfe,0x8cff,0x8d00,0x8d01,0x8d02,0x8d03,0x8d04, +0x8d05,0x8d06,0x8d07,0x8d08,0x8d09,0x8d0a,0x8d0b,0x8d0c, +0x8d0d,0x4f5f,0x4f57,0x4f32,0x4f3d,0x4f76,0x4f74,0x4f91, +0x4f89,0x4f83,0x4f8f,0x4f7e,0x4f7b,0x4faa,0x4f7c,0x4fac, +0x4f94,0x4fe6,0x4fe8,0x4fea,0x4fc5,0x4fda,0x4fe3,0x4fdc, +0x4fd1,0x4fdf,0x4ff8,0x5029,0x504c,0x4ff3,0x502c,0x500f, +0x502e,0x502d,0x4ffe,0x501c,0x500c,0x5025,0x5028,0x507e, +0x5043,0x5055,0x5048,0x504e,0x506c,0x507b,0x50a5,0x50a7, +0x50a9,0x50ba,0x50d6,0x5106,0x50ed,0x50ec,0x50e6,0x50ee, +0x5107,0x510b,0x4edd,0x6c3d,0x4f58,0x4f65,0x4fce,0x9fa0, +0x6c46,0x7c74,0x516e,0x5dfd,0x9ec9,0x9998,0x5181,0x5914, +0x52f9,0x530d,0x8a07,0x5310,0x51eb,0x5919,0x5155,0x4ea0, +0x5156,0x4eb3,0x886e,0x88a4,0x4eb5,0x8114,0x88d2,0x7980, +0x5b34,0x8803,0x7fb8,0x51ab,0x51b1,0x51bd,0x51bc,0x0000, +/* 0xda00 */ +0x8d0e,0x8d0f,0x8d10,0x8d11,0x8d12,0x8d13,0x8d14,0x8d15, +0x8d16,0x8d17,0x8d18,0x8d19,0x8d1a,0x8d1b,0x8d1c,0x8d20, +0x8d51,0x8d52,0x8d57,0x8d5f,0x8d65,0x8d68,0x8d69,0x8d6a, +0x8d6c,0x8d6e,0x8d6f,0x8d71,0x8d72,0x8d78,0x8d79,0x8d7a, +0x8d7b,0x8d7c,0x8d7d,0x8d7e,0x8d7f,0x8d80,0x8d82,0x8d83, +0x8d86,0x8d87,0x8d88,0x8d89,0x8d8c,0x8d8d,0x8d8e,0x8d8f, +0x8d90,0x8d92,0x8d93,0x8d95,0x8d96,0x8d97,0x8d98,0x8d99, +0x8d9a,0x8d9b,0x8d9c,0x8d9d,0x8d9e,0x8da0,0x8da1,0x0000, +0x8da2,0x8da4,0x8da5,0x8da6,0x8da7,0x8da8,0x8da9,0x8daa, +0x8dab,0x8dac,0x8dad,0x8dae,0x8daf,0x8db0,0x8db2,0x8db6, +0x8db7,0x8db9,0x8dbb,0x8dbd,0x8dc0,0x8dc1,0x8dc2,0x8dc5, +0x8dc7,0x8dc8,0x8dc9,0x8dca,0x8dcd,0x8dd0,0x8dd2,0x8dd3, +0x8dd4,0x51c7,0x5196,0x51a2,0x51a5,0x8ba0,0x8ba6,0x8ba7, +0x8baa,0x8bb4,0x8bb5,0x8bb7,0x8bc2,0x8bc3,0x8bcb,0x8bcf, +0x8bce,0x8bd2,0x8bd3,0x8bd4,0x8bd6,0x8bd8,0x8bd9,0x8bdc, +0x8bdf,0x8be0,0x8be4,0x8be8,0x8be9,0x8bee,0x8bf0,0x8bf3, +0x8bf6,0x8bf9,0x8bfc,0x8bff,0x8c00,0x8c02,0x8c04,0x8c07, +0x8c0c,0x8c0f,0x8c11,0x8c12,0x8c14,0x8c15,0x8c16,0x8c19, +0x8c1b,0x8c18,0x8c1d,0x8c1f,0x8c20,0x8c21,0x8c25,0x8c27, +0x8c2a,0x8c2b,0x8c2e,0x8c2f,0x8c32,0x8c33,0x8c35,0x8c36, +0x5369,0x537a,0x961d,0x9622,0x9621,0x9631,0x962a,0x963d, +0x963c,0x9642,0x9649,0x9654,0x965f,0x9667,0x966c,0x9672, +0x9674,0x9688,0x968d,0x9697,0x96b0,0x9097,0x909b,0x909d, +0x9099,0x90ac,0x90a1,0x90b4,0x90b3,0x90b6,0x90ba,0x0000, +/* 0xdb00 */ +0x8dd5,0x8dd8,0x8dd9,0x8ddc,0x8de0,0x8de1,0x8de2,0x8de5, +0x8de6,0x8de7,0x8de9,0x8ded,0x8dee,0x8df0,0x8df1,0x8df2, +0x8df4,0x8df6,0x8dfc,0x8dfe,0x8dff,0x8e00,0x8e01,0x8e02, +0x8e03,0x8e04,0x8e06,0x8e07,0x8e08,0x8e0b,0x8e0d,0x8e0e, +0x8e10,0x8e11,0x8e12,0x8e13,0x8e15,0x8e16,0x8e17,0x8e18, +0x8e19,0x8e1a,0x8e1b,0x8e1c,0x8e20,0x8e21,0x8e24,0x8e25, +0x8e26,0x8e27,0x8e28,0x8e2b,0x8e2d,0x8e30,0x8e32,0x8e33, +0x8e34,0x8e36,0x8e37,0x8e38,0x8e3b,0x8e3c,0x8e3e,0x0000, +0x8e3f,0x8e43,0x8e45,0x8e46,0x8e4c,0x8e4d,0x8e4e,0x8e4f, +0x8e50,0x8e53,0x8e54,0x8e55,0x8e56,0x8e57,0x8e58,0x8e5a, +0x8e5b,0x8e5c,0x8e5d,0x8e5e,0x8e5f,0x8e60,0x8e61,0x8e62, +0x8e63,0x8e64,0x8e65,0x8e67,0x8e68,0x8e6a,0x8e6b,0x8e6e, +0x8e71,0x90b8,0x90b0,0x90cf,0x90c5,0x90be,0x90d0,0x90c4, +0x90c7,0x90d3,0x90e6,0x90e2,0x90dc,0x90d7,0x90db,0x90eb, +0x90ef,0x90fe,0x9104,0x9122,0x911e,0x9123,0x9131,0x912f, +0x9139,0x9143,0x9146,0x520d,0x5942,0x52a2,0x52ac,0x52ad, +0x52be,0x54ff,0x52d0,0x52d6,0x52f0,0x53df,0x71ee,0x77cd, +0x5ef4,0x51f5,0x51fc,0x9b2f,0x53b6,0x5f01,0x755a,0x5def, +0x574c,0x57a9,0x57a1,0x587e,0x58bc,0x58c5,0x58d1,0x5729, +0x572c,0x572a,0x5733,0x5739,0x572e,0x572f,0x575c,0x573b, +0x5742,0x5769,0x5785,0x576b,0x5786,0x577c,0x577b,0x5768, +0x576d,0x5776,0x5773,0x57ad,0x57a4,0x578c,0x57b2,0x57cf, +0x57a7,0x57b4,0x5793,0x57a0,0x57d5,0x57d8,0x57da,0x57d9, +0x57d2,0x57b8,0x57f4,0x57ef,0x57f8,0x57e4,0x57dd,0x0000, +/* 0xdc00 */ +0x8e73,0x8e75,0x8e77,0x8e78,0x8e79,0x8e7a,0x8e7b,0x8e7d, +0x8e7e,0x8e80,0x8e82,0x8e83,0x8e84,0x8e86,0x8e88,0x8e89, +0x8e8a,0x8e8b,0x8e8c,0x8e8d,0x8e8e,0x8e91,0x8e92,0x8e93, +0x8e95,0x8e96,0x8e97,0x8e98,0x8e99,0x8e9a,0x8e9b,0x8e9d, +0x8e9f,0x8ea0,0x8ea1,0x8ea2,0x8ea3,0x8ea4,0x8ea5,0x8ea6, +0x8ea7,0x8ea8,0x8ea9,0x8eaa,0x8ead,0x8eae,0x8eb0,0x8eb1, +0x8eb3,0x8eb4,0x8eb5,0x8eb6,0x8eb7,0x8eb8,0x8eb9,0x8ebb, +0x8ebc,0x8ebd,0x8ebe,0x8ebf,0x8ec0,0x8ec1,0x8ec2,0x0000, +0x8ec3,0x8ec4,0x8ec5,0x8ec6,0x8ec7,0x8ec8,0x8ec9,0x8eca, +0x8ecb,0x8ecc,0x8ecd,0x8ecf,0x8ed0,0x8ed1,0x8ed2,0x8ed3, +0x8ed4,0x8ed5,0x8ed6,0x8ed7,0x8ed8,0x8ed9,0x8eda,0x8edb, +0x8edc,0x8edd,0x8ede,0x8edf,0x8ee0,0x8ee1,0x8ee2,0x8ee3, +0x8ee4,0x580b,0x580d,0x57fd,0x57ed,0x5800,0x581e,0x5819, +0x5844,0x5820,0x5865,0x586c,0x5881,0x5889,0x589a,0x5880, +0x99a8,0x9f19,0x61ff,0x8279,0x827d,0x827f,0x828f,0x828a, +0x82a8,0x8284,0x828e,0x8291,0x8297,0x8299,0x82ab,0x82b8, +0x82be,0x82b0,0x82c8,0x82ca,0x82e3,0x8298,0x82b7,0x82ae, +0x82cb,0x82cc,0x82c1,0x82a9,0x82b4,0x82a1,0x82aa,0x829f, +0x82c4,0x82ce,0x82a4,0x82e1,0x8309,0x82f7,0x82e4,0x830f, +0x8307,0x82dc,0x82f4,0x82d2,0x82d8,0x830c,0x82fb,0x82d3, +0x8311,0x831a,0x8306,0x8314,0x8315,0x82e0,0x82d5,0x831c, +0x8351,0x835b,0x835c,0x8308,0x8392,0x833c,0x8334,0x8331, +0x839b,0x835e,0x832f,0x834f,0x8347,0x8343,0x835f,0x8340, +0x8317,0x8360,0x832d,0x833a,0x8333,0x8366,0x8365,0x0000, +/* 0xdd00 */ +0x8ee5,0x8ee6,0x8ee7,0x8ee8,0x8ee9,0x8eea,0x8eeb,0x8eec, +0x8eed,0x8eee,0x8eef,0x8ef0,0x8ef1,0x8ef2,0x8ef3,0x8ef4, +0x8ef5,0x8ef6,0x8ef7,0x8ef8,0x8ef9,0x8efa,0x8efb,0x8efc, +0x8efd,0x8efe,0x8eff,0x8f00,0x8f01,0x8f02,0x8f03,0x8f04, +0x8f05,0x8f06,0x8f07,0x8f08,0x8f09,0x8f0a,0x8f0b,0x8f0c, +0x8f0d,0x8f0e,0x8f0f,0x8f10,0x8f11,0x8f12,0x8f13,0x8f14, +0x8f15,0x8f16,0x8f17,0x8f18,0x8f19,0x8f1a,0x8f1b,0x8f1c, +0x8f1d,0x8f1e,0x8f1f,0x8f20,0x8f21,0x8f22,0x8f23,0x0000, +0x8f24,0x8f25,0x8f26,0x8f27,0x8f28,0x8f29,0x8f2a,0x8f2b, +0x8f2c,0x8f2d,0x8f2e,0x8f2f,0x8f30,0x8f31,0x8f32,0x8f33, +0x8f34,0x8f35,0x8f36,0x8f37,0x8f38,0x8f39,0x8f3a,0x8f3b, +0x8f3c,0x8f3d,0x8f3e,0x8f3f,0x8f40,0x8f41,0x8f42,0x8f43, +0x8f44,0x8368,0x831b,0x8369,0x836c,0x836a,0x836d,0x836e, +0x83b0,0x8378,0x83b3,0x83b4,0x83a0,0x83aa,0x8393,0x839c, +0x8385,0x837c,0x83b6,0x83a9,0x837d,0x83b8,0x837b,0x8398, +0x839e,0x83a8,0x83ba,0x83bc,0x83c1,0x8401,0x83e5,0x83d8, +0x5807,0x8418,0x840b,0x83dd,0x83fd,0x83d6,0x841c,0x8438, +0x8411,0x8406,0x83d4,0x83df,0x840f,0x8403,0x83f8,0x83f9, +0x83ea,0x83c5,0x83c0,0x8426,0x83f0,0x83e1,0x845c,0x8451, +0x845a,0x8459,0x8473,0x8487,0x8488,0x847a,0x8489,0x8478, +0x843c,0x8446,0x8469,0x8476,0x848c,0x848e,0x8431,0x846d, +0x84c1,0x84cd,0x84d0,0x84e6,0x84bd,0x84d3,0x84ca,0x84bf, +0x84ba,0x84e0,0x84a1,0x84b9,0x84b4,0x8497,0x84e5,0x84e3, +0x850c,0x750d,0x8538,0x84f0,0x8539,0x851f,0x853a,0x0000, +/* 0xde00 */ +0x8f45,0x8f46,0x8f47,0x8f48,0x8f49,0x8f4a,0x8f4b,0x8f4c, +0x8f4d,0x8f4e,0x8f4f,0x8f50,0x8f51,0x8f52,0x8f53,0x8f54, +0x8f55,0x8f56,0x8f57,0x8f58,0x8f59,0x8f5a,0x8f5b,0x8f5c, +0x8f5d,0x8f5e,0x8f5f,0x8f60,0x8f61,0x8f62,0x8f63,0x8f64, +0x8f65,0x8f6a,0x8f80,0x8f8c,0x8f92,0x8f9d,0x8fa0,0x8fa1, +0x8fa2,0x8fa4,0x8fa5,0x8fa6,0x8fa7,0x8faa,0x8fac,0x8fad, +0x8fae,0x8faf,0x8fb2,0x8fb3,0x8fb4,0x8fb5,0x8fb7,0x8fb8, +0x8fba,0x8fbb,0x8fbc,0x8fbf,0x8fc0,0x8fc3,0x8fc6,0x0000, +0x8fc9,0x8fca,0x8fcb,0x8fcc,0x8fcd,0x8fcf,0x8fd2,0x8fd6, +0x8fd7,0x8fda,0x8fe0,0x8fe1,0x8fe3,0x8fe7,0x8fec,0x8fef, +0x8ff1,0x8ff2,0x8ff4,0x8ff5,0x8ff6,0x8ffa,0x8ffb,0x8ffc, +0x8ffe,0x8fff,0x9007,0x9008,0x900c,0x900e,0x9013,0x9015, +0x9018,0x8556,0x853b,0x84ff,0x84fc,0x8559,0x8548,0x8568, +0x8564,0x855e,0x857a,0x77a2,0x8543,0x8572,0x857b,0x85a4, +0x85a8,0x8587,0x858f,0x8579,0x85ae,0x859c,0x8585,0x85b9, +0x85b7,0x85b0,0x85d3,0x85c1,0x85dc,0x85ff,0x8627,0x8605, +0x8629,0x8616,0x863c,0x5efe,0x5f08,0x593c,0x5941,0x8037, +0x5955,0x595a,0x5958,0x530f,0x5c22,0x5c25,0x5c2c,0x5c34, +0x624c,0x626a,0x629f,0x62bb,0x62ca,0x62da,0x62d7,0x62ee, +0x6322,0x62f6,0x6339,0x634b,0x6343,0x63ad,0x63f6,0x6371, +0x637a,0x638e,0x63b4,0x636d,0x63ac,0x638a,0x6369,0x63ae, +0x63bc,0x63f2,0x63f8,0x63e0,0x63ff,0x63c4,0x63de,0x63ce, +0x6452,0x63c6,0x63be,0x6445,0x6441,0x640b,0x641b,0x6420, +0x640c,0x6426,0x6421,0x645e,0x6484,0x646d,0x6496,0x0000, +/* 0xdf00 */ +0x9019,0x901c,0x9023,0x9024,0x9025,0x9027,0x9028,0x9029, +0x902a,0x902b,0x902c,0x9030,0x9031,0x9032,0x9033,0x9034, +0x9037,0x9039,0x903a,0x903d,0x903f,0x9040,0x9043,0x9045, +0x9046,0x9048,0x9049,0x904a,0x904b,0x904c,0x904e,0x9054, +0x9055,0x9056,0x9059,0x905a,0x905c,0x905d,0x905e,0x905f, +0x9060,0x9061,0x9064,0x9066,0x9067,0x9069,0x906a,0x906b, +0x906c,0x906f,0x9070,0x9071,0x9072,0x9073,0x9076,0x9077, +0x9078,0x9079,0x907a,0x907b,0x907c,0x907e,0x9081,0x0000, +0x9084,0x9085,0x9086,0x9087,0x9089,0x908a,0x908c,0x908d, +0x908e,0x908f,0x9090,0x9092,0x9094,0x9096,0x9098,0x909a, +0x909c,0x909e,0x909f,0x90a0,0x90a4,0x90a5,0x90a7,0x90a8, +0x90a9,0x90ab,0x90ad,0x90b2,0x90b7,0x90bc,0x90bd,0x90bf, +0x90c0,0x647a,0x64b7,0x64b8,0x6499,0x64ba,0x64c0,0x64d0, +0x64d7,0x64e4,0x64e2,0x6509,0x6525,0x652e,0x5f0b,0x5fd2, +0x7519,0x5f11,0x535f,0x53f1,0x53fd,0x53e9,0x53e8,0x53fb, +0x5412,0x5416,0x5406,0x544b,0x5452,0x5453,0x5454,0x5456, +0x5443,0x5421,0x5457,0x5459,0x5423,0x5432,0x5482,0x5494, +0x5477,0x5471,0x5464,0x549a,0x549b,0x5484,0x5476,0x5466, +0x549d,0x54d0,0x54ad,0x54c2,0x54b4,0x54d2,0x54a7,0x54a6, +0x54d3,0x54d4,0x5472,0x54a3,0x54d5,0x54bb,0x54bf,0x54cc, +0x54d9,0x54da,0x54dc,0x54a9,0x54aa,0x54a4,0x54dd,0x54cf, +0x54de,0x551b,0x54e7,0x5520,0x54fd,0x5514,0x54f3,0x5522, +0x5523,0x550f,0x5511,0x5527,0x552a,0x5567,0x558f,0x55b5, +0x5549,0x556d,0x5541,0x5555,0x553f,0x5550,0x553c,0x0000, +/* 0xe000 */ +0x90c2,0x90c3,0x90c6,0x90c8,0x90c9,0x90cb,0x90cc,0x90cd, +0x90d2,0x90d4,0x90d5,0x90d6,0x90d8,0x90d9,0x90da,0x90de, +0x90df,0x90e0,0x90e3,0x90e4,0x90e5,0x90e9,0x90ea,0x90ec, +0x90ee,0x90f0,0x90f1,0x90f2,0x90f3,0x90f5,0x90f6,0x90f7, +0x90f9,0x90fa,0x90fb,0x90fc,0x90ff,0x9100,0x9101,0x9103, +0x9105,0x9106,0x9107,0x9108,0x9109,0x910a,0x910b,0x910c, +0x910d,0x910e,0x910f,0x9110,0x9111,0x9112,0x9113,0x9114, +0x9115,0x9116,0x9117,0x9118,0x911a,0x911b,0x911c,0x0000, +0x911d,0x911f,0x9120,0x9121,0x9124,0x9125,0x9126,0x9127, +0x9128,0x9129,0x912a,0x912b,0x912c,0x912d,0x912e,0x9130, +0x9132,0x9133,0x9134,0x9135,0x9136,0x9137,0x9138,0x913a, +0x913b,0x913c,0x913d,0x913e,0x913f,0x9140,0x9141,0x9142, +0x9144,0x5537,0x5556,0x5575,0x5576,0x5577,0x5533,0x5530, +0x555c,0x558b,0x55d2,0x5583,0x55b1,0x55b9,0x5588,0x5581, +0x559f,0x557e,0x55d6,0x5591,0x557b,0x55df,0x55bd,0x55be, +0x5594,0x5599,0x55ea,0x55f7,0x55c9,0x561f,0x55d1,0x55eb, +0x55ec,0x55d4,0x55e6,0x55dd,0x55c4,0x55ef,0x55e5,0x55f2, +0x55f3,0x55cc,0x55cd,0x55e8,0x55f5,0x55e4,0x8f94,0x561e, +0x5608,0x560c,0x5601,0x5624,0x5623,0x55fe,0x5600,0x5627, +0x562d,0x5658,0x5639,0x5657,0x562c,0x564d,0x5662,0x5659, +0x565c,0x564c,0x5654,0x5686,0x5664,0x5671,0x566b,0x567b, +0x567c,0x5685,0x5693,0x56af,0x56d4,0x56d7,0x56dd,0x56e1, +0x56f5,0x56eb,0x56f9,0x56ff,0x5704,0x570a,0x5709,0x571c, +0x5e0f,0x5e19,0x5e14,0x5e11,0x5e31,0x5e3b,0x5e3c,0x0000, +/* 0xe100 */ +0x9145,0x9147,0x9148,0x9151,0x9153,0x9154,0x9155,0x9156, +0x9158,0x9159,0x915b,0x915c,0x915f,0x9160,0x9166,0x9167, +0x9168,0x916b,0x916d,0x9173,0x917a,0x917b,0x917c,0x9180, +0x9181,0x9182,0x9183,0x9184,0x9186,0x9188,0x918a,0x918e, +0x918f,0x9193,0x9194,0x9195,0x9196,0x9197,0x9198,0x9199, +0x919c,0x919d,0x919e,0x919f,0x91a0,0x91a1,0x91a4,0x91a5, +0x91a6,0x91a7,0x91a8,0x91a9,0x91ab,0x91ac,0x91b0,0x91b1, +0x91b2,0x91b3,0x91b6,0x91b7,0x91b8,0x91b9,0x91bb,0x0000, +0x91bc,0x91bd,0x91be,0x91bf,0x91c0,0x91c1,0x91c2,0x91c3, +0x91c4,0x91c5,0x91c6,0x91c8,0x91cb,0x91d0,0x91d2,0x91d3, +0x91d4,0x91d5,0x91d6,0x91d7,0x91d8,0x91d9,0x91da,0x91db, +0x91dd,0x91de,0x91df,0x91e0,0x91e1,0x91e2,0x91e3,0x91e4, +0x91e5,0x5e37,0x5e44,0x5e54,0x5e5b,0x5e5e,0x5e61,0x5c8c, +0x5c7a,0x5c8d,0x5c90,0x5c96,0x5c88,0x5c98,0x5c99,0x5c91, +0x5c9a,0x5c9c,0x5cb5,0x5ca2,0x5cbd,0x5cac,0x5cab,0x5cb1, +0x5ca3,0x5cc1,0x5cb7,0x5cc4,0x5cd2,0x5ce4,0x5ccb,0x5ce5, +0x5d02,0x5d03,0x5d27,0x5d26,0x5d2e,0x5d24,0x5d1e,0x5d06, +0x5d1b,0x5d58,0x5d3e,0x5d34,0x5d3d,0x5d6c,0x5d5b,0x5d6f, +0x5d5d,0x5d6b,0x5d4b,0x5d4a,0x5d69,0x5d74,0x5d82,0x5d99, +0x5d9d,0x8c73,0x5db7,0x5dc5,0x5f73,0x5f77,0x5f82,0x5f87, +0x5f89,0x5f8c,0x5f95,0x5f99,0x5f9c,0x5fa8,0x5fad,0x5fb5, +0x5fbc,0x8862,0x5f61,0x72ad,0x72b0,0x72b4,0x72b7,0x72b8, +0x72c3,0x72c1,0x72ce,0x72cd,0x72d2,0x72e8,0x72ef,0x72e9, +0x72f2,0x72f4,0x72f7,0x7301,0x72f3,0x7303,0x72fa,0x0000, +/* 0xe200 */ +0x91e6,0x91e7,0x91e8,0x91e9,0x91ea,0x91eb,0x91ec,0x91ed, +0x91ee,0x91ef,0x91f0,0x91f1,0x91f2,0x91f3,0x91f4,0x91f5, +0x91f6,0x91f7,0x91f8,0x91f9,0x91fa,0x91fb,0x91fc,0x91fd, +0x91fe,0x91ff,0x9200,0x9201,0x9202,0x9203,0x9204,0x9205, +0x9206,0x9207,0x9208,0x9209,0x920a,0x920b,0x920c,0x920d, +0x920e,0x920f,0x9210,0x9211,0x9212,0x9213,0x9214,0x9215, +0x9216,0x9217,0x9218,0x9219,0x921a,0x921b,0x921c,0x921d, +0x921e,0x921f,0x9220,0x9221,0x9222,0x9223,0x9224,0x0000, +0x9225,0x9226,0x9227,0x9228,0x9229,0x922a,0x922b,0x922c, +0x922d,0x922e,0x922f,0x9230,0x9231,0x9232,0x9233,0x9234, +0x9235,0x9236,0x9237,0x9238,0x9239,0x923a,0x923b,0x923c, +0x923d,0x923e,0x923f,0x9240,0x9241,0x9242,0x9243,0x9244, +0x9245,0x72fb,0x7317,0x7313,0x7321,0x730a,0x731e,0x731d, +0x7315,0x7322,0x7339,0x7325,0x732c,0x7338,0x7331,0x7350, +0x734d,0x7357,0x7360,0x736c,0x736f,0x737e,0x821b,0x5925, +0x98e7,0x5924,0x5902,0x9963,0x9967,0x9968,0x9969,0x996a, +0x996b,0x996c,0x9974,0x9977,0x997d,0x9980,0x9984,0x9987, +0x998a,0x998d,0x9990,0x9991,0x9993,0x9994,0x9995,0x5e80, +0x5e91,0x5e8b,0x5e96,0x5ea5,0x5ea0,0x5eb9,0x5eb5,0x5ebe, +0x5eb3,0x8d53,0x5ed2,0x5ed1,0x5edb,0x5ee8,0x5eea,0x81ba, +0x5fc4,0x5fc9,0x5fd6,0x5fcf,0x6003,0x5fee,0x6004,0x5fe1, +0x5fe4,0x5ffe,0x6005,0x6006,0x5fea,0x5fed,0x5ff8,0x6019, +0x6035,0x6026,0x601b,0x600f,0x600d,0x6029,0x602b,0x600a, +0x603f,0x6021,0x6078,0x6079,0x607b,0x607a,0x6042,0x0000, +/* 0xe300 */ +0x9246,0x9247,0x9248,0x9249,0x924a,0x924b,0x924c,0x924d, +0x924e,0x924f,0x9250,0x9251,0x9252,0x9253,0x9254,0x9255, +0x9256,0x9257,0x9258,0x9259,0x925a,0x925b,0x925c,0x925d, +0x925e,0x925f,0x9260,0x9261,0x9262,0x9263,0x9264,0x9265, +0x9266,0x9267,0x9268,0x9269,0x926a,0x926b,0x926c,0x926d, +0x926e,0x926f,0x9270,0x9271,0x9272,0x9273,0x9275,0x9276, +0x9277,0x9278,0x9279,0x927a,0x927b,0x927c,0x927d,0x927e, +0x927f,0x9280,0x9281,0x9282,0x9283,0x9284,0x9285,0x0000, +0x9286,0x9287,0x9288,0x9289,0x928a,0x928b,0x928c,0x928d, +0x928f,0x9290,0x9291,0x9292,0x9293,0x9294,0x9295,0x9296, +0x9297,0x9298,0x9299,0x929a,0x929b,0x929c,0x929d,0x929e, +0x929f,0x92a0,0x92a1,0x92a2,0x92a3,0x92a4,0x92a5,0x92a6, +0x92a7,0x606a,0x607d,0x6096,0x609a,0x60ad,0x609d,0x6083, +0x6092,0x608c,0x609b,0x60ec,0x60bb,0x60b1,0x60dd,0x60d8, +0x60c6,0x60da,0x60b4,0x6120,0x6126,0x6115,0x6123,0x60f4, +0x6100,0x610e,0x612b,0x614a,0x6175,0x61ac,0x6194,0x61a7, +0x61b7,0x61d4,0x61f5,0x5fdd,0x96b3,0x95e9,0x95eb,0x95f1, +0x95f3,0x95f5,0x95f6,0x95fc,0x95fe,0x9603,0x9604,0x9606, +0x9608,0x960a,0x960b,0x960c,0x960d,0x960f,0x9612,0x9615, +0x9616,0x9617,0x9619,0x961a,0x4e2c,0x723f,0x6215,0x6c35, +0x6c54,0x6c5c,0x6c4a,0x6ca3,0x6c85,0x6c90,0x6c94,0x6c8c, +0x6c68,0x6c69,0x6c74,0x6c76,0x6c86,0x6ca9,0x6cd0,0x6cd4, +0x6cad,0x6cf7,0x6cf8,0x6cf1,0x6cd7,0x6cb2,0x6ce0,0x6cd6, +0x6cfa,0x6ceb,0x6cee,0x6cb1,0x6cd3,0x6cef,0x6cfe,0x0000, +/* 0xe400 */ +0x92a8,0x92a9,0x92aa,0x92ab,0x92ac,0x92ad,0x92af,0x92b0, +0x92b1,0x92b2,0x92b3,0x92b4,0x92b5,0x92b6,0x92b7,0x92b8, +0x92b9,0x92ba,0x92bb,0x92bc,0x92bd,0x92be,0x92bf,0x92c0, +0x92c1,0x92c2,0x92c3,0x92c4,0x92c5,0x92c6,0x92c7,0x92c9, +0x92ca,0x92cb,0x92cc,0x92cd,0x92ce,0x92cf,0x92d0,0x92d1, +0x92d2,0x92d3,0x92d4,0x92d5,0x92d6,0x92d7,0x92d8,0x92d9, +0x92da,0x92db,0x92dc,0x92dd,0x92de,0x92df,0x92e0,0x92e1, +0x92e2,0x92e3,0x92e4,0x92e5,0x92e6,0x92e7,0x92e8,0x0000, +0x92e9,0x92ea,0x92eb,0x92ec,0x92ed,0x92ee,0x92ef,0x92f0, +0x92f1,0x92f2,0x92f3,0x92f4,0x92f5,0x92f6,0x92f7,0x92f8, +0x92f9,0x92fa,0x92fb,0x92fc,0x92fd,0x92fe,0x92ff,0x9300, +0x9301,0x9302,0x9303,0x9304,0x9305,0x9306,0x9307,0x9308, +0x9309,0x6d39,0x6d27,0x6d0c,0x6d43,0x6d48,0x6d07,0x6d04, +0x6d19,0x6d0e,0x6d2b,0x6d4d,0x6d2e,0x6d35,0x6d1a,0x6d4f, +0x6d52,0x6d54,0x6d33,0x6d91,0x6d6f,0x6d9e,0x6da0,0x6d5e, +0x6d93,0x6d94,0x6d5c,0x6d60,0x6d7c,0x6d63,0x6e1a,0x6dc7, +0x6dc5,0x6dde,0x6e0e,0x6dbf,0x6de0,0x6e11,0x6de6,0x6ddd, +0x6dd9,0x6e16,0x6dab,0x6e0c,0x6dae,0x6e2b,0x6e6e,0x6e4e, +0x6e6b,0x6eb2,0x6e5f,0x6e86,0x6e53,0x6e54,0x6e32,0x6e25, +0x6e44,0x6edf,0x6eb1,0x6e98,0x6ee0,0x6f2d,0x6ee2,0x6ea5, +0x6ea7,0x6ebd,0x6ebb,0x6eb7,0x6ed7,0x6eb4,0x6ecf,0x6e8f, +0x6ec2,0x6e9f,0x6f62,0x6f46,0x6f47,0x6f24,0x6f15,0x6ef9, +0x6f2f,0x6f36,0x6f4b,0x6f74,0x6f2a,0x6f09,0x6f29,0x6f89, +0x6f8d,0x6f8c,0x6f78,0x6f72,0x6f7c,0x6f7a,0x6fd1,0x0000, +/* 0xe500 */ +0x930a,0x930b,0x930c,0x930d,0x930e,0x930f,0x9310,0x9311, +0x9312,0x9313,0x9314,0x9315,0x9316,0x9317,0x9318,0x9319, +0x931a,0x931b,0x931c,0x931d,0x931e,0x931f,0x9320,0x9321, +0x9322,0x9323,0x9324,0x9325,0x9326,0x9327,0x9328,0x9329, +0x932a,0x932b,0x932c,0x932d,0x932e,0x932f,0x9330,0x9331, +0x9332,0x9333,0x9334,0x9335,0x9336,0x9337,0x9338,0x9339, +0x933a,0x933b,0x933c,0x933d,0x933f,0x9340,0x9341,0x9342, +0x9343,0x9344,0x9345,0x9346,0x9347,0x9348,0x9349,0x0000, +0x934a,0x934b,0x934c,0x934d,0x934e,0x934f,0x9350,0x9351, +0x9352,0x9353,0x9354,0x9355,0x9356,0x9357,0x9358,0x9359, +0x935a,0x935b,0x935c,0x935d,0x935e,0x935f,0x9360,0x9361, +0x9362,0x9363,0x9364,0x9365,0x9366,0x9367,0x9368,0x9369, +0x936b,0x6fc9,0x6fa7,0x6fb9,0x6fb6,0x6fc2,0x6fe1,0x6fee, +0x6fde,0x6fe0,0x6fef,0x701a,0x7023,0x701b,0x7039,0x7035, +0x704f,0x705e,0x5b80,0x5b84,0x5b95,0x5b93,0x5ba5,0x5bb8, +0x752f,0x9a9e,0x6434,0x5be4,0x5bee,0x8930,0x5bf0,0x8e47, +0x8b07,0x8fb6,0x8fd3,0x8fd5,0x8fe5,0x8fee,0x8fe4,0x8fe9, +0x8fe6,0x8ff3,0x8fe8,0x9005,0x9004,0x900b,0x9026,0x9011, +0x900d,0x9016,0x9021,0x9035,0x9036,0x902d,0x902f,0x9044, +0x9051,0x9052,0x9050,0x9068,0x9058,0x9062,0x905b,0x66b9, +0x9074,0x907d,0x9082,0x9088,0x9083,0x908b,0x5f50,0x5f57, +0x5f56,0x5f58,0x5c3b,0x54ab,0x5c50,0x5c59,0x5b71,0x5c63, +0x5c66,0x7fbc,0x5f2a,0x5f29,0x5f2d,0x8274,0x5f3c,0x9b3b, +0x5c6e,0x5981,0x5983,0x598d,0x59a9,0x59aa,0x59a3,0x0000, +/* 0xe600 */ +0x936c,0x936d,0x936e,0x936f,0x9370,0x9371,0x9372,0x9373, +0x9374,0x9375,0x9376,0x9377,0x9378,0x9379,0x937a,0x937b, +0x937c,0x937d,0x937e,0x937f,0x9380,0x9381,0x9382,0x9383, +0x9384,0x9385,0x9386,0x9387,0x9388,0x9389,0x938a,0x938b, +0x938c,0x938d,0x938e,0x9390,0x9391,0x9392,0x9393,0x9394, +0x9395,0x9396,0x9397,0x9398,0x9399,0x939a,0x939b,0x939c, +0x939d,0x939e,0x939f,0x93a0,0x93a1,0x93a2,0x93a3,0x93a4, +0x93a5,0x93a6,0x93a7,0x93a8,0x93a9,0x93aa,0x93ab,0x0000, +0x93ac,0x93ad,0x93ae,0x93af,0x93b0,0x93b1,0x93b2,0x93b3, +0x93b4,0x93b5,0x93b6,0x93b7,0x93b8,0x93b9,0x93ba,0x93bb, +0x93bc,0x93bd,0x93be,0x93bf,0x93c0,0x93c1,0x93c2,0x93c3, +0x93c4,0x93c5,0x93c6,0x93c7,0x93c8,0x93c9,0x93cb,0x93cc, +0x93cd,0x5997,0x59ca,0x59ab,0x599e,0x59a4,0x59d2,0x59b2, +0x59af,0x59d7,0x59be,0x5a05,0x5a06,0x59dd,0x5a08,0x59e3, +0x59d8,0x59f9,0x5a0c,0x5a09,0x5a32,0x5a34,0x5a11,0x5a23, +0x5a13,0x5a40,0x5a67,0x5a4a,0x5a55,0x5a3c,0x5a62,0x5a75, +0x80ec,0x5aaa,0x5a9b,0x5a77,0x5a7a,0x5abe,0x5aeb,0x5ab2, +0x5ad2,0x5ad4,0x5ab8,0x5ae0,0x5ae3,0x5af1,0x5ad6,0x5ae6, +0x5ad8,0x5adc,0x5b09,0x5b17,0x5b16,0x5b32,0x5b37,0x5b40, +0x5c15,0x5c1c,0x5b5a,0x5b65,0x5b73,0x5b51,0x5b53,0x5b62, +0x9a75,0x9a77,0x9a78,0x9a7a,0x9a7f,0x9a7d,0x9a80,0x9a81, +0x9a85,0x9a88,0x9a8a,0x9a90,0x9a92,0x9a93,0x9a96,0x9a98, +0x9a9b,0x9a9c,0x9a9d,0x9a9f,0x9aa0,0x9aa2,0x9aa3,0x9aa5, +0x9aa7,0x7e9f,0x7ea1,0x7ea3,0x7ea5,0x7ea8,0x7ea9,0x0000, +/* 0xe700 */ +0x93ce,0x93cf,0x93d0,0x93d1,0x93d2,0x93d3,0x93d4,0x93d5, +0x93d7,0x93d8,0x93d9,0x93da,0x93db,0x93dc,0x93dd,0x93de, +0x93df,0x93e0,0x93e1,0x93e2,0x93e3,0x93e4,0x93e5,0x93e6, +0x93e7,0x93e8,0x93e9,0x93ea,0x93eb,0x93ec,0x93ed,0x93ee, +0x93ef,0x93f0,0x93f1,0x93f2,0x93f3,0x93f4,0x93f5,0x93f6, +0x93f7,0x93f8,0x93f9,0x93fa,0x93fb,0x93fc,0x93fd,0x93fe, +0x93ff,0x9400,0x9401,0x9402,0x9403,0x9404,0x9405,0x9406, +0x9407,0x9408,0x9409,0x940a,0x940b,0x940c,0x940d,0x0000, +0x940e,0x940f,0x9410,0x9411,0x9412,0x9413,0x9414,0x9415, +0x9416,0x9417,0x9418,0x9419,0x941a,0x941b,0x941c,0x941d, +0x941e,0x941f,0x9420,0x9421,0x9422,0x9423,0x9424,0x9425, +0x9426,0x9427,0x9428,0x9429,0x942a,0x942b,0x942c,0x942d, +0x942e,0x7ead,0x7eb0,0x7ebe,0x7ec0,0x7ec1,0x7ec2,0x7ec9, +0x7ecb,0x7ecc,0x7ed0,0x7ed4,0x7ed7,0x7edb,0x7ee0,0x7ee1, +0x7ee8,0x7eeb,0x7eee,0x7eef,0x7ef1,0x7ef2,0x7f0d,0x7ef6, +0x7efa,0x7efb,0x7efe,0x7f01,0x7f02,0x7f03,0x7f07,0x7f08, +0x7f0b,0x7f0c,0x7f0f,0x7f11,0x7f12,0x7f17,0x7f19,0x7f1c, +0x7f1b,0x7f1f,0x7f21,0x7f22,0x7f23,0x7f24,0x7f25,0x7f26, +0x7f27,0x7f2a,0x7f2b,0x7f2c,0x7f2d,0x7f2f,0x7f30,0x7f31, +0x7f32,0x7f33,0x7f35,0x5e7a,0x757f,0x5ddb,0x753e,0x9095, +0x738e,0x7391,0x73ae,0x73a2,0x739f,0x73cf,0x73c2,0x73d1, +0x73b7,0x73b3,0x73c0,0x73c9,0x73c8,0x73e5,0x73d9,0x987c, +0x740a,0x73e9,0x73e7,0x73de,0x73ba,0x73f2,0x740f,0x742a, +0x745b,0x7426,0x7425,0x7428,0x7430,0x742e,0x742c,0x0000, +/* 0xe800 */ +0x942f,0x9430,0x9431,0x9432,0x9433,0x9434,0x9435,0x9436, +0x9437,0x9438,0x9439,0x943a,0x943b,0x943c,0x943d,0x943f, +0x9440,0x9441,0x9442,0x9443,0x9444,0x9445,0x9446,0x9447, +0x9448,0x9449,0x944a,0x944b,0x944c,0x944d,0x944e,0x944f, +0x9450,0x9451,0x9452,0x9453,0x9454,0x9455,0x9456,0x9457, +0x9458,0x9459,0x945a,0x945b,0x945c,0x945d,0x945e,0x945f, +0x9460,0x9461,0x9462,0x9463,0x9464,0x9465,0x9466,0x9467, +0x9468,0x9469,0x946a,0x946c,0x946d,0x946e,0x946f,0x0000, +0x9470,0x9471,0x9472,0x9473,0x9474,0x9475,0x9476,0x9477, +0x9478,0x9479,0x947a,0x947b,0x947c,0x947d,0x947e,0x947f, +0x9480,0x9481,0x9482,0x9483,0x9484,0x9491,0x9496,0x9498, +0x94c7,0x94cf,0x94d3,0x94d4,0x94da,0x94e6,0x94fb,0x951c, +0x9520,0x741b,0x741a,0x7441,0x745c,0x7457,0x7455,0x7459, +0x7477,0x746d,0x747e,0x749c,0x748e,0x7480,0x7481,0x7487, +0x748b,0x749e,0x74a8,0x74a9,0x7490,0x74a7,0x74d2,0x74ba, +0x97ea,0x97eb,0x97ec,0x674c,0x6753,0x675e,0x6748,0x6769, +0x67a5,0x6787,0x676a,0x6773,0x6798,0x67a7,0x6775,0x67a8, +0x679e,0x67ad,0x678b,0x6777,0x677c,0x67f0,0x6809,0x67d8, +0x680a,0x67e9,0x67b0,0x680c,0x67d9,0x67b5,0x67da,0x67b3, +0x67dd,0x6800,0x67c3,0x67b8,0x67e2,0x680e,0x67c1,0x67fd, +0x6832,0x6833,0x6860,0x6861,0x684e,0x6862,0x6844,0x6864, +0x6883,0x681d,0x6855,0x6866,0x6841,0x6867,0x6840,0x683e, +0x684a,0x6849,0x6829,0x68b5,0x688f,0x6874,0x6877,0x6893, +0x686b,0x68c2,0x696e,0x68fc,0x691f,0x6920,0x68f9,0x0000, +/* 0xe900 */ +0x9527,0x9533,0x953d,0x9543,0x9548,0x954b,0x9555,0x955a, +0x9560,0x956e,0x9574,0x9575,0x9577,0x9578,0x9579,0x957a, +0x957b,0x957c,0x957d,0x957e,0x9580,0x9581,0x9582,0x9583, +0x9584,0x9585,0x9586,0x9587,0x9588,0x9589,0x958a,0x958b, +0x958c,0x958d,0x958e,0x958f,0x9590,0x9591,0x9592,0x9593, +0x9594,0x9595,0x9596,0x9597,0x9598,0x9599,0x959a,0x959b, +0x959c,0x959d,0x959e,0x959f,0x95a0,0x95a1,0x95a2,0x95a3, +0x95a4,0x95a5,0x95a6,0x95a7,0x95a8,0x95a9,0x95aa,0x0000, +0x95ab,0x95ac,0x95ad,0x95ae,0x95af,0x95b0,0x95b1,0x95b2, +0x95b3,0x95b4,0x95b5,0x95b6,0x95b7,0x95b8,0x95b9,0x95ba, +0x95bb,0x95bc,0x95bd,0x95be,0x95bf,0x95c0,0x95c1,0x95c2, +0x95c3,0x95c4,0x95c5,0x95c6,0x95c7,0x95c8,0x95c9,0x95ca, +0x95cb,0x6924,0x68f0,0x690b,0x6901,0x6957,0x68e3,0x6910, +0x6971,0x6939,0x6960,0x6942,0x695d,0x6984,0x696b,0x6980, +0x6998,0x6978,0x6934,0x69cc,0x6987,0x6988,0x69ce,0x6989, +0x6966,0x6963,0x6979,0x699b,0x69a7,0x69bb,0x69ab,0x69ad, +0x69d4,0x69b1,0x69c1,0x69ca,0x69df,0x6995,0x69e0,0x698d, +0x69ff,0x6a2f,0x69ed,0x6a17,0x6a18,0x6a65,0x69f2,0x6a44, +0x6a3e,0x6aa0,0x6a50,0x6a5b,0x6a35,0x6a8e,0x6a79,0x6a3d, +0x6a28,0x6a58,0x6a7c,0x6a91,0x6a90,0x6aa9,0x6a97,0x6aab, +0x7337,0x7352,0x6b81,0x6b82,0x6b87,0x6b84,0x6b92,0x6b93, +0x6b8d,0x6b9a,0x6b9b,0x6ba1,0x6baa,0x8f6b,0x8f6d,0x8f71, +0x8f72,0x8f73,0x8f75,0x8f76,0x8f78,0x8f77,0x8f79,0x8f7a, +0x8f7c,0x8f7e,0x8f81,0x8f82,0x8f84,0x8f87,0x8f8b,0x0000, +/* 0xea00 */ +0x95cc,0x95cd,0x95ce,0x95cf,0x95d0,0x95d1,0x95d2,0x95d3, +0x95d4,0x95d5,0x95d6,0x95d7,0x95d8,0x95d9,0x95da,0x95db, +0x95dc,0x95dd,0x95de,0x95df,0x95e0,0x95e1,0x95e2,0x95e3, +0x95e4,0x95e5,0x95e6,0x95e7,0x95ec,0x95ff,0x9607,0x9613, +0x9618,0x961b,0x961e,0x9620,0x9623,0x9624,0x9625,0x9626, +0x9627,0x9628,0x9629,0x962b,0x962c,0x962d,0x962f,0x9630, +0x9637,0x9638,0x9639,0x963a,0x963e,0x9641,0x9643,0x964a, +0x964e,0x964f,0x9651,0x9652,0x9653,0x9656,0x9657,0x0000, +0x9658,0x9659,0x965a,0x965c,0x965d,0x965e,0x9660,0x9663, +0x9665,0x9666,0x966b,0x966d,0x966e,0x966f,0x9670,0x9671, +0x9673,0x9678,0x9679,0x967a,0x967b,0x967c,0x967d,0x967e, +0x967f,0x9680,0x9681,0x9682,0x9683,0x9684,0x9687,0x9689, +0x968a,0x8f8d,0x8f8e,0x8f8f,0x8f98,0x8f9a,0x8ece,0x620b, +0x6217,0x621b,0x621f,0x6222,0x6221,0x6225,0x6224,0x622c, +0x81e7,0x74ef,0x74f4,0x74ff,0x750f,0x7511,0x7513,0x6534, +0x65ee,0x65ef,0x65f0,0x660a,0x6619,0x6772,0x6603,0x6615, +0x6600,0x7085,0x66f7,0x661d,0x6634,0x6631,0x6636,0x6635, +0x8006,0x665f,0x6654,0x6641,0x664f,0x6656,0x6661,0x6657, +0x6677,0x6684,0x668c,0x66a7,0x669d,0x66be,0x66db,0x66dc, +0x66e6,0x66e9,0x8d32,0x8d33,0x8d36,0x8d3b,0x8d3d,0x8d40, +0x8d45,0x8d46,0x8d48,0x8d49,0x8d47,0x8d4d,0x8d55,0x8d59, +0x89c7,0x89ca,0x89cb,0x89cc,0x89ce,0x89cf,0x89d0,0x89d1, +0x726e,0x729f,0x725d,0x7266,0x726f,0x727e,0x727f,0x7284, +0x728b,0x728d,0x728f,0x7292,0x6308,0x6332,0x63b0,0x0000, +/* 0xeb00 */ +0x968c,0x968e,0x9691,0x9692,0x9693,0x9695,0x9696,0x969a, +0x969b,0x969d,0x969e,0x969f,0x96a0,0x96a1,0x96a2,0x96a3, +0x96a4,0x96a5,0x96a6,0x96a8,0x96a9,0x96aa,0x96ab,0x96ac, +0x96ad,0x96ae,0x96af,0x96b1,0x96b2,0x96b4,0x96b5,0x96b7, +0x96b8,0x96ba,0x96bb,0x96bf,0x96c2,0x96c3,0x96c8,0x96ca, +0x96cb,0x96d0,0x96d1,0x96d3,0x96d4,0x96d6,0x96d7,0x96d8, +0x96d9,0x96da,0x96db,0x96dc,0x96dd,0x96de,0x96df,0x96e1, +0x96e2,0x96e3,0x96e4,0x96e5,0x96e6,0x96e7,0x96eb,0x0000, +0x96ec,0x96ed,0x96ee,0x96f0,0x96f1,0x96f2,0x96f4,0x96f5, +0x96f8,0x96fa,0x96fb,0x96fc,0x96fd,0x96ff,0x9702,0x9703, +0x9705,0x970a,0x970b,0x970c,0x9710,0x9711,0x9712,0x9714, +0x9715,0x9717,0x9718,0x9719,0x971a,0x971b,0x971d,0x971f, +0x9720,0x643f,0x64d8,0x8004,0x6bea,0x6bf3,0x6bfd,0x6bf5, +0x6bf9,0x6c05,0x6c07,0x6c06,0x6c0d,0x6c15,0x6c18,0x6c19, +0x6c1a,0x6c21,0x6c29,0x6c24,0x6c2a,0x6c32,0x6535,0x6555, +0x656b,0x724d,0x7252,0x7256,0x7230,0x8662,0x5216,0x809f, +0x809c,0x8093,0x80bc,0x670a,0x80bd,0x80b1,0x80ab,0x80ad, +0x80b4,0x80b7,0x80e7,0x80e8,0x80e9,0x80ea,0x80db,0x80c2, +0x80c4,0x80d9,0x80cd,0x80d7,0x6710,0x80dd,0x80eb,0x80f1, +0x80f4,0x80ed,0x810d,0x810e,0x80f2,0x80fc,0x6715,0x8112, +0x8c5a,0x8136,0x811e,0x812c,0x8118,0x8132,0x8148,0x814c, +0x8153,0x8174,0x8159,0x815a,0x8171,0x8160,0x8169,0x817c, +0x817d,0x816d,0x8167,0x584d,0x5ab5,0x8188,0x8182,0x8191, +0x6ed5,0x81a3,0x81aa,0x81cc,0x6726,0x81ca,0x81bb,0x0000, +/* 0xec00 */ +0x9721,0x9722,0x9723,0x9724,0x9725,0x9726,0x9727,0x9728, +0x9729,0x972b,0x972c,0x972e,0x972f,0x9731,0x9733,0x9734, +0x9735,0x9736,0x9737,0x973a,0x973b,0x973c,0x973d,0x973f, +0x9740,0x9741,0x9742,0x9743,0x9744,0x9745,0x9746,0x9747, +0x9748,0x9749,0x974a,0x974b,0x974c,0x974d,0x974e,0x974f, +0x9750,0x9751,0x9754,0x9755,0x9757,0x9758,0x975a,0x975c, +0x975d,0x975f,0x9763,0x9764,0x9766,0x9767,0x9768,0x976a, +0x976b,0x976c,0x976d,0x976e,0x976f,0x9770,0x9771,0x0000, +0x9772,0x9775,0x9777,0x9778,0x9779,0x977a,0x977b,0x977d, +0x977e,0x977f,0x9780,0x9781,0x9782,0x9783,0x9784,0x9786, +0x9787,0x9788,0x9789,0x978a,0x978c,0x978e,0x978f,0x9790, +0x9793,0x9795,0x9796,0x9797,0x9799,0x979a,0x979b,0x979c, +0x979d,0x81c1,0x81a6,0x6b24,0x6b37,0x6b39,0x6b43,0x6b46, +0x6b59,0x98d1,0x98d2,0x98d3,0x98d5,0x98d9,0x98da,0x6bb3, +0x5f40,0x6bc2,0x89f3,0x6590,0x9f51,0x6593,0x65bc,0x65c6, +0x65c4,0x65c3,0x65cc,0x65ce,0x65d2,0x65d6,0x7080,0x709c, +0x7096,0x709d,0x70bb,0x70c0,0x70b7,0x70ab,0x70b1,0x70e8, +0x70ca,0x7110,0x7113,0x7116,0x712f,0x7131,0x7173,0x715c, +0x7168,0x7145,0x7172,0x714a,0x7178,0x717a,0x7198,0x71b3, +0x71b5,0x71a8,0x71a0,0x71e0,0x71d4,0x71e7,0x71f9,0x721d, +0x7228,0x706c,0x7118,0x7166,0x71b9,0x623e,0x623d,0x6243, +0x6248,0x6249,0x793b,0x7940,0x7946,0x7949,0x795b,0x795c, +0x7953,0x795a,0x7962,0x7957,0x7960,0x796f,0x7967,0x797a, +0x7985,0x798a,0x799a,0x79a7,0x79b3,0x5fd1,0x5fd0,0x0000, +/* 0xed00 */ +0x979e,0x979f,0x97a1,0x97a2,0x97a4,0x97a5,0x97a6,0x97a7, +0x97a8,0x97a9,0x97aa,0x97ac,0x97ae,0x97b0,0x97b1,0x97b3, +0x97b5,0x97b6,0x97b7,0x97b8,0x97b9,0x97ba,0x97bb,0x97bc, +0x97bd,0x97be,0x97bf,0x97c0,0x97c1,0x97c2,0x97c3,0x97c4, +0x97c5,0x97c6,0x97c7,0x97c8,0x97c9,0x97ca,0x97cb,0x97cc, +0x97cd,0x97ce,0x97cf,0x97d0,0x97d1,0x97d2,0x97d3,0x97d4, +0x97d5,0x97d6,0x97d7,0x97d8,0x97d9,0x97da,0x97db,0x97dc, +0x97dd,0x97de,0x97df,0x97e0,0x97e1,0x97e2,0x97e3,0x0000, +0x97e4,0x97e5,0x97e8,0x97ee,0x97ef,0x97f0,0x97f1,0x97f2, +0x97f4,0x97f7,0x97f8,0x97f9,0x97fa,0x97fb,0x97fc,0x97fd, +0x97fe,0x97ff,0x9800,0x9801,0x9802,0x9803,0x9804,0x9805, +0x9806,0x9807,0x9808,0x9809,0x980a,0x980b,0x980c,0x980d, +0x980e,0x603c,0x605d,0x605a,0x6067,0x6041,0x6059,0x6063, +0x60ab,0x6106,0x610d,0x615d,0x61a9,0x619d,0x61cb,0x61d1, +0x6206,0x8080,0x807f,0x6c93,0x6cf6,0x6dfc,0x77f6,0x77f8, +0x7800,0x7809,0x7817,0x7818,0x7811,0x65ab,0x782d,0x781c, +0x781d,0x7839,0x783a,0x783b,0x781f,0x783c,0x7825,0x782c, +0x7823,0x7829,0x784e,0x786d,0x7856,0x7857,0x7826,0x7850, +0x7847,0x784c,0x786a,0x789b,0x7893,0x789a,0x7887,0x789c, +0x78a1,0x78a3,0x78b2,0x78b9,0x78a5,0x78d4,0x78d9,0x78c9, +0x78ec,0x78f2,0x7905,0x78f4,0x7913,0x7924,0x791e,0x7934, +0x9f9b,0x9ef9,0x9efb,0x9efc,0x76f1,0x7704,0x770d,0x76f9, +0x7707,0x7708,0x771a,0x7722,0x7719,0x772d,0x7726,0x7735, +0x7738,0x7750,0x7751,0x7747,0x7743,0x775a,0x7768,0x0000, +/* 0xee00 */ +0x980f,0x9810,0x9811,0x9812,0x9813,0x9814,0x9815,0x9816, +0x9817,0x9818,0x9819,0x981a,0x981b,0x981c,0x981d,0x981e, +0x981f,0x9820,0x9821,0x9822,0x9823,0x9824,0x9825,0x9826, +0x9827,0x9828,0x9829,0x982a,0x982b,0x982c,0x982d,0x982e, +0x982f,0x9830,0x9831,0x9832,0x9833,0x9834,0x9835,0x9836, +0x9837,0x9838,0x9839,0x983a,0x983b,0x983c,0x983d,0x983e, +0x983f,0x9840,0x9841,0x9842,0x9843,0x9844,0x9845,0x9846, +0x9847,0x9848,0x9849,0x984a,0x984b,0x984c,0x984d,0x0000, +0x984e,0x984f,0x9850,0x9851,0x9852,0x9853,0x9854,0x9855, +0x9856,0x9857,0x9858,0x9859,0x985a,0x985b,0x985c,0x985d, +0x985e,0x985f,0x9860,0x9861,0x9862,0x9863,0x9864,0x9865, +0x9866,0x9867,0x9868,0x9869,0x986a,0x986b,0x986c,0x986d, +0x986e,0x7762,0x7765,0x777f,0x778d,0x777d,0x7780,0x778c, +0x7791,0x779f,0x77a0,0x77b0,0x77b5,0x77bd,0x753a,0x7540, +0x754e,0x754b,0x7548,0x755b,0x7572,0x7579,0x7583,0x7f58, +0x7f61,0x7f5f,0x8a48,0x7f68,0x7f74,0x7f71,0x7f79,0x7f81, +0x7f7e,0x76cd,0x76e5,0x8832,0x9485,0x9486,0x9487,0x948b, +0x948a,0x948c,0x948d,0x948f,0x9490,0x9494,0x9497,0x9495, +0x949a,0x949b,0x949c,0x94a3,0x94a4,0x94ab,0x94aa,0x94ad, +0x94ac,0x94af,0x94b0,0x94b2,0x94b4,0x94b6,0x94b7,0x94b8, +0x94b9,0x94ba,0x94bc,0x94bd,0x94bf,0x94c4,0x94c8,0x94c9, +0x94ca,0x94cb,0x94cc,0x94cd,0x94ce,0x94d0,0x94d1,0x94d2, +0x94d5,0x94d6,0x94d7,0x94d9,0x94d8,0x94db,0x94de,0x94df, +0x94e0,0x94e2,0x94e4,0x94e5,0x94e7,0x94e8,0x94ea,0x0000, +/* 0xef00 */ +0x986f,0x9870,0x9871,0x9872,0x9873,0x9874,0x988b,0x988e, +0x9892,0x9895,0x9899,0x98a3,0x98a8,0x98a9,0x98aa,0x98ab, +0x98ac,0x98ad,0x98ae,0x98af,0x98b0,0x98b1,0x98b2,0x98b3, +0x98b4,0x98b5,0x98b6,0x98b7,0x98b8,0x98b9,0x98ba,0x98bb, +0x98bc,0x98bd,0x98be,0x98bf,0x98c0,0x98c1,0x98c2,0x98c3, +0x98c4,0x98c5,0x98c6,0x98c7,0x98c8,0x98c9,0x98ca,0x98cb, +0x98cc,0x98cd,0x98cf,0x98d0,0x98d4,0x98d6,0x98d7,0x98db, +0x98dc,0x98dd,0x98e0,0x98e1,0x98e2,0x98e3,0x98e4,0x0000, +0x98e5,0x98e6,0x98e9,0x98ea,0x98eb,0x98ec,0x98ed,0x98ee, +0x98ef,0x98f0,0x98f1,0x98f2,0x98f3,0x98f4,0x98f5,0x98f6, +0x98f7,0x98f8,0x98f9,0x98fa,0x98fb,0x98fc,0x98fd,0x98fe, +0x98ff,0x9900,0x9901,0x9902,0x9903,0x9904,0x9905,0x9906, +0x9907,0x94e9,0x94eb,0x94ee,0x94ef,0x94f3,0x94f4,0x94f5, +0x94f7,0x94f9,0x94fc,0x94fd,0x94ff,0x9503,0x9502,0x9506, +0x9507,0x9509,0x950a,0x950d,0x950e,0x950f,0x9512,0x9513, +0x9514,0x9515,0x9516,0x9518,0x951b,0x951d,0x951e,0x951f, +0x9522,0x952a,0x952b,0x9529,0x952c,0x9531,0x9532,0x9534, +0x9536,0x9537,0x9538,0x953c,0x953e,0x953f,0x9542,0x9535, +0x9544,0x9545,0x9546,0x9549,0x954c,0x954e,0x954f,0x9552, +0x9553,0x9554,0x9556,0x9557,0x9558,0x9559,0x955b,0x955e, +0x955f,0x955d,0x9561,0x9562,0x9564,0x9565,0x9566,0x9567, +0x9568,0x9569,0x956a,0x956b,0x956c,0x956f,0x9571,0x9572, +0x9573,0x953a,0x77e7,0x77ec,0x96c9,0x79d5,0x79ed,0x79e3, +0x79eb,0x7a06,0x5d47,0x7a03,0x7a02,0x7a1e,0x7a14,0x0000, +/* 0xf000 */ +0x9908,0x9909,0x990a,0x990b,0x990c,0x990e,0x990f,0x9911, +0x9912,0x9913,0x9914,0x9915,0x9916,0x9917,0x9918,0x9919, +0x991a,0x991b,0x991c,0x991d,0x991e,0x991f,0x9920,0x9921, +0x9922,0x9923,0x9924,0x9925,0x9926,0x9927,0x9928,0x9929, +0x992a,0x992b,0x992c,0x992d,0x992f,0x9930,0x9931,0x9932, +0x9933,0x9934,0x9935,0x9936,0x9937,0x9938,0x9939,0x993a, +0x993b,0x993c,0x993d,0x993e,0x993f,0x9940,0x9941,0x9942, +0x9943,0x9944,0x9945,0x9946,0x9947,0x9948,0x9949,0x0000, +0x994a,0x994b,0x994c,0x994d,0x994e,0x994f,0x9950,0x9951, +0x9952,0x9953,0x9956,0x9957,0x9958,0x9959,0x995a,0x995b, +0x995c,0x995d,0x995e,0x995f,0x9960,0x9961,0x9962,0x9964, +0x9966,0x9973,0x9978,0x9979,0x997b,0x997e,0x9982,0x9983, +0x9989,0x7a39,0x7a37,0x7a51,0x9ecf,0x99a5,0x7a70,0x7688, +0x768e,0x7693,0x7699,0x76a4,0x74de,0x74e0,0x752c,0x9e20, +0x9e22,0x9e28,0x9e29,0x9e2a,0x9e2b,0x9e2c,0x9e32,0x9e31, +0x9e36,0x9e38,0x9e37,0x9e39,0x9e3a,0x9e3e,0x9e41,0x9e42, +0x9e44,0x9e46,0x9e47,0x9e48,0x9e49,0x9e4b,0x9e4c,0x9e4e, +0x9e51,0x9e55,0x9e57,0x9e5a,0x9e5b,0x9e5c,0x9e5e,0x9e63, +0x9e66,0x9e67,0x9e68,0x9e69,0x9e6a,0x9e6b,0x9e6c,0x9e71, +0x9e6d,0x9e73,0x7592,0x7594,0x7596,0x75a0,0x759d,0x75ac, +0x75a3,0x75b3,0x75b4,0x75b8,0x75c4,0x75b1,0x75b0,0x75c3, +0x75c2,0x75d6,0x75cd,0x75e3,0x75e8,0x75e6,0x75e4,0x75eb, +0x75e7,0x7603,0x75f1,0x75fc,0x75ff,0x7610,0x7600,0x7605, +0x760c,0x7617,0x760a,0x7625,0x7618,0x7615,0x7619,0x0000, +/* 0xf100 */ +0x998c,0x998e,0x999a,0x999b,0x999c,0x999d,0x999e,0x999f, +0x99a0,0x99a1,0x99a2,0x99a3,0x99a4,0x99a6,0x99a7,0x99a9, +0x99aa,0x99ab,0x99ac,0x99ad,0x99ae,0x99af,0x99b0,0x99b1, +0x99b2,0x99b3,0x99b4,0x99b5,0x99b6,0x99b7,0x99b8,0x99b9, +0x99ba,0x99bb,0x99bc,0x99bd,0x99be,0x99bf,0x99c0,0x99c1, +0x99c2,0x99c3,0x99c4,0x99c5,0x99c6,0x99c7,0x99c8,0x99c9, +0x99ca,0x99cb,0x99cc,0x99cd,0x99ce,0x99cf,0x99d0,0x99d1, +0x99d2,0x99d3,0x99d4,0x99d5,0x99d6,0x99d7,0x99d8,0x0000, +0x99d9,0x99da,0x99db,0x99dc,0x99dd,0x99de,0x99df,0x99e0, +0x99e1,0x99e2,0x99e3,0x99e4,0x99e5,0x99e6,0x99e7,0x99e8, +0x99e9,0x99ea,0x99eb,0x99ec,0x99ed,0x99ee,0x99ef,0x99f0, +0x99f1,0x99f2,0x99f3,0x99f4,0x99f5,0x99f6,0x99f7,0x99f8, +0x99f9,0x761b,0x763c,0x7622,0x7620,0x7640,0x762d,0x7630, +0x763f,0x7635,0x7643,0x763e,0x7633,0x764d,0x765e,0x7654, +0x765c,0x7656,0x766b,0x766f,0x7fca,0x7ae6,0x7a78,0x7a79, +0x7a80,0x7a86,0x7a88,0x7a95,0x7aa6,0x7aa0,0x7aac,0x7aa8, +0x7aad,0x7ab3,0x8864,0x8869,0x8872,0x887d,0x887f,0x8882, +0x88a2,0x88c6,0x88b7,0x88bc,0x88c9,0x88e2,0x88ce,0x88e3, +0x88e5,0x88f1,0x891a,0x88fc,0x88e8,0x88fe,0x88f0,0x8921, +0x8919,0x8913,0x891b,0x890a,0x8934,0x892b,0x8936,0x8941, +0x8966,0x897b,0x758b,0x80e5,0x76b2,0x76b4,0x77dc,0x8012, +0x8014,0x8016,0x801c,0x8020,0x8022,0x8025,0x8026,0x8027, +0x8029,0x8028,0x8031,0x800b,0x8035,0x8043,0x8046,0x804d, +0x8052,0x8069,0x8071,0x8983,0x9878,0x9880,0x9883,0x0000, +/* 0xf200 */ +0x99fa,0x99fb,0x99fc,0x99fd,0x99fe,0x99ff,0x9a00,0x9a01, +0x9a02,0x9a03,0x9a04,0x9a05,0x9a06,0x9a07,0x9a08,0x9a09, +0x9a0a,0x9a0b,0x9a0c,0x9a0d,0x9a0e,0x9a0f,0x9a10,0x9a11, +0x9a12,0x9a13,0x9a14,0x9a15,0x9a16,0x9a17,0x9a18,0x9a19, +0x9a1a,0x9a1b,0x9a1c,0x9a1d,0x9a1e,0x9a1f,0x9a20,0x9a21, +0x9a22,0x9a23,0x9a24,0x9a25,0x9a26,0x9a27,0x9a28,0x9a29, +0x9a2a,0x9a2b,0x9a2c,0x9a2d,0x9a2e,0x9a2f,0x9a30,0x9a31, +0x9a32,0x9a33,0x9a34,0x9a35,0x9a36,0x9a37,0x9a38,0x0000, +0x9a39,0x9a3a,0x9a3b,0x9a3c,0x9a3d,0x9a3e,0x9a3f,0x9a40, +0x9a41,0x9a42,0x9a43,0x9a44,0x9a45,0x9a46,0x9a47,0x9a48, +0x9a49,0x9a4a,0x9a4b,0x9a4c,0x9a4d,0x9a4e,0x9a4f,0x9a50, +0x9a51,0x9a52,0x9a53,0x9a54,0x9a55,0x9a56,0x9a57,0x9a58, +0x9a59,0x9889,0x988c,0x988d,0x988f,0x9894,0x989a,0x989b, +0x989e,0x989f,0x98a1,0x98a2,0x98a5,0x98a6,0x864d,0x8654, +0x866c,0x866e,0x867f,0x867a,0x867c,0x867b,0x86a8,0x868d, +0x868b,0x86ac,0x869d,0x86a7,0x86a3,0x86aa,0x8693,0x86a9, +0x86b6,0x86c4,0x86b5,0x86ce,0x86b0,0x86ba,0x86b1,0x86af, +0x86c9,0x86cf,0x86b4,0x86e9,0x86f1,0x86f2,0x86ed,0x86f3, +0x86d0,0x8713,0x86de,0x86f4,0x86df,0x86d8,0x86d1,0x8703, +0x8707,0x86f8,0x8708,0x870a,0x870d,0x8709,0x8723,0x873b, +0x871e,0x8725,0x872e,0x871a,0x873e,0x8748,0x8734,0x8731, +0x8729,0x8737,0x873f,0x8782,0x8722,0x877d,0x877e,0x877b, +0x8760,0x8770,0x874c,0x876e,0x878b,0x8753,0x8763,0x877c, +0x8764,0x8759,0x8765,0x8793,0x87af,0x87a8,0x87d2,0x0000, +/* 0xf300 */ +0x9a5a,0x9a5b,0x9a5c,0x9a5d,0x9a5e,0x9a5f,0x9a60,0x9a61, +0x9a62,0x9a63,0x9a64,0x9a65,0x9a66,0x9a67,0x9a68,0x9a69, +0x9a6a,0x9a6b,0x9a72,0x9a83,0x9a89,0x9a8d,0x9a8e,0x9a94, +0x9a95,0x9a99,0x9aa6,0x9aa9,0x9aaa,0x9aab,0x9aac,0x9aad, +0x9aae,0x9aaf,0x9ab2,0x9ab3,0x9ab4,0x9ab5,0x9ab9,0x9abb, +0x9abd,0x9abe,0x9abf,0x9ac3,0x9ac4,0x9ac6,0x9ac7,0x9ac8, +0x9ac9,0x9aca,0x9acd,0x9ace,0x9acf,0x9ad0,0x9ad2,0x9ad4, +0x9ad5,0x9ad6,0x9ad7,0x9ad9,0x9ada,0x9adb,0x9adc,0x0000, +0x9add,0x9ade,0x9ae0,0x9ae2,0x9ae3,0x9ae4,0x9ae5,0x9ae7, +0x9ae8,0x9ae9,0x9aea,0x9aec,0x9aee,0x9af0,0x9af1,0x9af2, +0x9af3,0x9af4,0x9af5,0x9af6,0x9af7,0x9af8,0x9afa,0x9afc, +0x9afd,0x9afe,0x9aff,0x9b00,0x9b01,0x9b02,0x9b04,0x9b05, +0x9b06,0x87c6,0x8788,0x8785,0x87ad,0x8797,0x8783,0x87ab, +0x87e5,0x87ac,0x87b5,0x87b3,0x87cb,0x87d3,0x87bd,0x87d1, +0x87c0,0x87ca,0x87db,0x87ea,0x87e0,0x87ee,0x8816,0x8813, +0x87fe,0x880a,0x881b,0x8821,0x8839,0x883c,0x7f36,0x7f42, +0x7f44,0x7f45,0x8210,0x7afa,0x7afd,0x7b08,0x7b03,0x7b04, +0x7b15,0x7b0a,0x7b2b,0x7b0f,0x7b47,0x7b38,0x7b2a,0x7b19, +0x7b2e,0x7b31,0x7b20,0x7b25,0x7b24,0x7b33,0x7b3e,0x7b1e, +0x7b58,0x7b5a,0x7b45,0x7b75,0x7b4c,0x7b5d,0x7b60,0x7b6e, +0x7b7b,0x7b62,0x7b72,0x7b71,0x7b90,0x7ba6,0x7ba7,0x7bb8, +0x7bac,0x7b9d,0x7ba8,0x7b85,0x7baa,0x7b9c,0x7ba2,0x7bab, +0x7bb4,0x7bd1,0x7bc1,0x7bcc,0x7bdd,0x7bda,0x7be5,0x7be6, +0x7bea,0x7c0c,0x7bfe,0x7bfc,0x7c0f,0x7c16,0x7c0b,0x0000, +/* 0xf400 */ +0x9b07,0x9b09,0x9b0a,0x9b0b,0x9b0c,0x9b0d,0x9b0e,0x9b10, +0x9b11,0x9b12,0x9b14,0x9b15,0x9b16,0x9b17,0x9b18,0x9b19, +0x9b1a,0x9b1b,0x9b1c,0x9b1d,0x9b1e,0x9b20,0x9b21,0x9b22, +0x9b24,0x9b25,0x9b26,0x9b27,0x9b28,0x9b29,0x9b2a,0x9b2b, +0x9b2c,0x9b2d,0x9b2e,0x9b30,0x9b31,0x9b33,0x9b34,0x9b35, +0x9b36,0x9b37,0x9b38,0x9b39,0x9b3a,0x9b3d,0x9b3e,0x9b3f, +0x9b40,0x9b46,0x9b4a,0x9b4b,0x9b4c,0x9b4e,0x9b50,0x9b52, +0x9b53,0x9b55,0x9b56,0x9b57,0x9b58,0x9b59,0x9b5a,0x0000, +0x9b5b,0x9b5c,0x9b5d,0x9b5e,0x9b5f,0x9b60,0x9b61,0x9b62, +0x9b63,0x9b64,0x9b65,0x9b66,0x9b67,0x9b68,0x9b69,0x9b6a, +0x9b6b,0x9b6c,0x9b6d,0x9b6e,0x9b6f,0x9b70,0x9b71,0x9b72, +0x9b73,0x9b74,0x9b75,0x9b76,0x9b77,0x9b78,0x9b79,0x9b7a, +0x9b7b,0x7c1f,0x7c2a,0x7c26,0x7c38,0x7c41,0x7c40,0x81fe, +0x8201,0x8202,0x8204,0x81ec,0x8844,0x8221,0x8222,0x8223, +0x822d,0x822f,0x8228,0x822b,0x8238,0x823b,0x8233,0x8234, +0x823e,0x8244,0x8249,0x824b,0x824f,0x825a,0x825f,0x8268, +0x887e,0x8885,0x8888,0x88d8,0x88df,0x895e,0x7f9d,0x7f9f, +0x7fa7,0x7faf,0x7fb0,0x7fb2,0x7c7c,0x6549,0x7c91,0x7c9d, +0x7c9c,0x7c9e,0x7ca2,0x7cb2,0x7cbc,0x7cbd,0x7cc1,0x7cc7, +0x7ccc,0x7ccd,0x7cc8,0x7cc5,0x7cd7,0x7ce8,0x826e,0x66a8, +0x7fbf,0x7fce,0x7fd5,0x7fe5,0x7fe1,0x7fe6,0x7fe9,0x7fee, +0x7ff3,0x7cf8,0x7d77,0x7da6,0x7dae,0x7e47,0x7e9b,0x9eb8, +0x9eb4,0x8d73,0x8d84,0x8d94,0x8d91,0x8db1,0x8d67,0x8d6d, +0x8c47,0x8c49,0x914a,0x9150,0x914e,0x914f,0x9164,0x0000, +/* 0xf500 */ +0x9b7c,0x9b7d,0x9b7e,0x9b7f,0x9b80,0x9b81,0x9b82,0x9b83, +0x9b84,0x9b85,0x9b86,0x9b87,0x9b88,0x9b89,0x9b8a,0x9b8b, +0x9b8c,0x9b8d,0x9b8e,0x9b8f,0x9b90,0x9b91,0x9b92,0x9b93, +0x9b94,0x9b95,0x9b96,0x9b97,0x9b98,0x9b99,0x9b9a,0x9b9b, +0x9b9c,0x9b9d,0x9b9e,0x9b9f,0x9ba0,0x9ba1,0x9ba2,0x9ba3, +0x9ba4,0x9ba5,0x9ba6,0x9ba7,0x9ba8,0x9ba9,0x9baa,0x9bab, +0x9bac,0x9bad,0x9bae,0x9baf,0x9bb0,0x9bb1,0x9bb2,0x9bb3, +0x9bb4,0x9bb5,0x9bb6,0x9bb7,0x9bb8,0x9bb9,0x9bba,0x0000, +0x9bbb,0x9bbc,0x9bbd,0x9bbe,0x9bbf,0x9bc0,0x9bc1,0x9bc2, +0x9bc3,0x9bc4,0x9bc5,0x9bc6,0x9bc7,0x9bc8,0x9bc9,0x9bca, +0x9bcb,0x9bcc,0x9bcd,0x9bce,0x9bcf,0x9bd0,0x9bd1,0x9bd2, +0x9bd3,0x9bd4,0x9bd5,0x9bd6,0x9bd7,0x9bd8,0x9bd9,0x9bda, +0x9bdb,0x9162,0x9161,0x9170,0x9169,0x916f,0x917d,0x917e, +0x9172,0x9174,0x9179,0x918c,0x9185,0x9190,0x918d,0x9191, +0x91a2,0x91a3,0x91aa,0x91ad,0x91ae,0x91af,0x91b5,0x91b4, +0x91ba,0x8c55,0x9e7e,0x8db8,0x8deb,0x8e05,0x8e59,0x8e69, +0x8db5,0x8dbf,0x8dbc,0x8dba,0x8dc4,0x8dd6,0x8dd7,0x8dda, +0x8dde,0x8dce,0x8dcf,0x8ddb,0x8dc6,0x8dec,0x8df7,0x8df8, +0x8de3,0x8df9,0x8dfb,0x8de4,0x8e09,0x8dfd,0x8e14,0x8e1d, +0x8e1f,0x8e2c,0x8e2e,0x8e23,0x8e2f,0x8e3a,0x8e40,0x8e39, +0x8e35,0x8e3d,0x8e31,0x8e49,0x8e41,0x8e42,0x8e51,0x8e52, +0x8e4a,0x8e70,0x8e76,0x8e7c,0x8e6f,0x8e74,0x8e85,0x8e8f, +0x8e94,0x8e90,0x8e9c,0x8e9e,0x8c78,0x8c82,0x8c8a,0x8c85, +0x8c98,0x8c94,0x659b,0x89d6,0x89de,0x89da,0x89dc,0x0000, +/* 0xf600 */ +0x9bdc,0x9bdd,0x9bde,0x9bdf,0x9be0,0x9be1,0x9be2,0x9be3, +0x9be4,0x9be5,0x9be6,0x9be7,0x9be8,0x9be9,0x9bea,0x9beb, +0x9bec,0x9bed,0x9bee,0x9bef,0x9bf0,0x9bf1,0x9bf2,0x9bf3, +0x9bf4,0x9bf5,0x9bf6,0x9bf7,0x9bf8,0x9bf9,0x9bfa,0x9bfb, +0x9bfc,0x9bfd,0x9bfe,0x9bff,0x9c00,0x9c01,0x9c02,0x9c03, +0x9c04,0x9c05,0x9c06,0x9c07,0x9c08,0x9c09,0x9c0a,0x9c0b, +0x9c0c,0x9c0d,0x9c0e,0x9c0f,0x9c10,0x9c11,0x9c12,0x9c13, +0x9c14,0x9c15,0x9c16,0x9c17,0x9c18,0x9c19,0x9c1a,0x0000, +0x9c1b,0x9c1c,0x9c1d,0x9c1e,0x9c1f,0x9c20,0x9c21,0x9c22, +0x9c23,0x9c24,0x9c25,0x9c26,0x9c27,0x9c28,0x9c29,0x9c2a, +0x9c2b,0x9c2c,0x9c2d,0x9c2e,0x9c2f,0x9c30,0x9c31,0x9c32, +0x9c33,0x9c34,0x9c35,0x9c36,0x9c37,0x9c38,0x9c39,0x9c3a, +0x9c3b,0x89e5,0x89eb,0x89ef,0x8a3e,0x8b26,0x9753,0x96e9, +0x96f3,0x96ef,0x9706,0x9701,0x9708,0x970f,0x970e,0x972a, +0x972d,0x9730,0x973e,0x9f80,0x9f83,0x9f85,0x9f86,0x9f87, +0x9f88,0x9f89,0x9f8a,0x9f8c,0x9efe,0x9f0b,0x9f0d,0x96b9, +0x96bc,0x96bd,0x96ce,0x96d2,0x77bf,0x96e0,0x928e,0x92ae, +0x92c8,0x933e,0x936a,0x93ca,0x938f,0x943e,0x946b,0x9c7f, +0x9c82,0x9c85,0x9c86,0x9c87,0x9c88,0x7a23,0x9c8b,0x9c8e, +0x9c90,0x9c91,0x9c92,0x9c94,0x9c95,0x9c9a,0x9c9b,0x9c9e, +0x9c9f,0x9ca0,0x9ca1,0x9ca2,0x9ca3,0x9ca5,0x9ca6,0x9ca7, +0x9ca8,0x9ca9,0x9cab,0x9cad,0x9cae,0x9cb0,0x9cb1,0x9cb2, +0x9cb3,0x9cb4,0x9cb5,0x9cb6,0x9cb7,0x9cba,0x9cbb,0x9cbc, +0x9cbd,0x9cc4,0x9cc5,0x9cc6,0x9cc7,0x9cca,0x9ccb,0x0000, +/* 0xf700 */ +0x9c3c,0x9c3d,0x9c3e,0x9c3f,0x9c40,0x9c41,0x9c42,0x9c43, +0x9c44,0x9c45,0x9c46,0x9c47,0x9c48,0x9c49,0x9c4a,0x9c4b, +0x9c4c,0x9c4d,0x9c4e,0x9c4f,0x9c50,0x9c51,0x9c52,0x9c53, +0x9c54,0x9c55,0x9c56,0x9c57,0x9c58,0x9c59,0x9c5a,0x9c5b, +0x9c5c,0x9c5d,0x9c5e,0x9c5f,0x9c60,0x9c61,0x9c62,0x9c63, +0x9c64,0x9c65,0x9c66,0x9c67,0x9c68,0x9c69,0x9c6a,0x9c6b, +0x9c6c,0x9c6d,0x9c6e,0x9c6f,0x9c70,0x9c71,0x9c72,0x9c73, +0x9c74,0x9c75,0x9c76,0x9c77,0x9c78,0x9c79,0x9c7a,0x0000, +0x9c7b,0x9c7d,0x9c7e,0x9c80,0x9c83,0x9c84,0x9c89,0x9c8a, +0x9c8c,0x9c8f,0x9c93,0x9c96,0x9c97,0x9c98,0x9c99,0x9c9d, +0x9caa,0x9cac,0x9caf,0x9cb9,0x9cbe,0x9cbf,0x9cc0,0x9cc1, +0x9cc2,0x9cc8,0x9cc9,0x9cd1,0x9cd2,0x9cda,0x9cdb,0x9ce0, +0x9ce1,0x9ccc,0x9ccd,0x9cce,0x9ccf,0x9cd0,0x9cd3,0x9cd4, +0x9cd5,0x9cd7,0x9cd8,0x9cd9,0x9cdc,0x9cdd,0x9cdf,0x9ce2, +0x977c,0x9785,0x9791,0x9792,0x9794,0x97af,0x97ab,0x97a3, +0x97b2,0x97b4,0x9ab1,0x9ab0,0x9ab7,0x9e58,0x9ab6,0x9aba, +0x9abc,0x9ac1,0x9ac0,0x9ac5,0x9ac2,0x9acb,0x9acc,0x9ad1, +0x9b45,0x9b43,0x9b47,0x9b49,0x9b48,0x9b4d,0x9b51,0x98e8, +0x990d,0x992e,0x9955,0x9954,0x9adf,0x9ae1,0x9ae6,0x9aef, +0x9aeb,0x9afb,0x9aed,0x9af9,0x9b08,0x9b0f,0x9b13,0x9b1f, +0x9b23,0x9ebd,0x9ebe,0x7e3b,0x9e82,0x9e87,0x9e88,0x9e8b, +0x9e92,0x93d6,0x9e9d,0x9e9f,0x9edb,0x9edc,0x9edd,0x9ee0, +0x9edf,0x9ee2,0x9ee9,0x9ee7,0x9ee5,0x9eea,0x9eef,0x9f22, +0x9f2c,0x9f2f,0x9f39,0x9f37,0x9f3d,0x9f3e,0x9f44,0x0000, +/* 0xf800 */ +0x9ce3,0x9ce4,0x9ce5,0x9ce6,0x9ce7,0x9ce8,0x9ce9,0x9cea, +0x9ceb,0x9cec,0x9ced,0x9cee,0x9cef,0x9cf0,0x9cf1,0x9cf2, +0x9cf3,0x9cf4,0x9cf5,0x9cf6,0x9cf7,0x9cf8,0x9cf9,0x9cfa, +0x9cfb,0x9cfc,0x9cfd,0x9cfe,0x9cff,0x9d00,0x9d01,0x9d02, +0x9d03,0x9d04,0x9d05,0x9d06,0x9d07,0x9d08,0x9d09,0x9d0a, +0x9d0b,0x9d0c,0x9d0d,0x9d0e,0x9d0f,0x9d10,0x9d11,0x9d12, +0x9d13,0x9d14,0x9d15,0x9d16,0x9d17,0x9d18,0x9d19,0x9d1a, +0x9d1b,0x9d1c,0x9d1d,0x9d1e,0x9d1f,0x9d20,0x9d21,0x0000, +0x9d22,0x9d23,0x9d24,0x9d25,0x9d26,0x9d27,0x9d28,0x9d29, +0x9d2a,0x9d2b,0x9d2c,0x9d2d,0x9d2e,0x9d2f,0x9d30,0x9d31, +0x9d32,0x9d33,0x9d34,0x9d35,0x9d36,0x9d37,0x9d38,0x9d39, +0x9d3a,0x9d3b,0x9d3c,0x9d3d,0x9d3e,0x9d3f,0x9d40,0x9d41, +0x9d42,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xf900 */ +0x9d43,0x9d44,0x9d45,0x9d46,0x9d47,0x9d48,0x9d49,0x9d4a, +0x9d4b,0x9d4c,0x9d4d,0x9d4e,0x9d4f,0x9d50,0x9d51,0x9d52, +0x9d53,0x9d54,0x9d55,0x9d56,0x9d57,0x9d58,0x9d59,0x9d5a, +0x9d5b,0x9d5c,0x9d5d,0x9d5e,0x9d5f,0x9d60,0x9d61,0x9d62, +0x9d63,0x9d64,0x9d65,0x9d66,0x9d67,0x9d68,0x9d69,0x9d6a, +0x9d6b,0x9d6c,0x9d6d,0x9d6e,0x9d6f,0x9d70,0x9d71,0x9d72, +0x9d73,0x9d74,0x9d75,0x9d76,0x9d77,0x9d78,0x9d79,0x9d7a, +0x9d7b,0x9d7c,0x9d7d,0x9d7e,0x9d7f,0x9d80,0x9d81,0x0000, +0x9d82,0x9d83,0x9d84,0x9d85,0x9d86,0x9d87,0x9d88,0x9d89, +0x9d8a,0x9d8b,0x9d8c,0x9d8d,0x9d8e,0x9d8f,0x9d90,0x9d91, +0x9d92,0x9d93,0x9d94,0x9d95,0x9d96,0x9d97,0x9d98,0x9d99, +0x9d9a,0x9d9b,0x9d9c,0x9d9d,0x9d9e,0x9d9f,0x9da0,0x9da1, +0x9da2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xfa00 */ +0x9da3,0x9da4,0x9da5,0x9da6,0x9da7,0x9da8,0x9da9,0x9daa, +0x9dab,0x9dac,0x9dad,0x9dae,0x9daf,0x9db0,0x9db1,0x9db2, +0x9db3,0x9db4,0x9db5,0x9db6,0x9db7,0x9db8,0x9db9,0x9dba, +0x9dbb,0x9dbc,0x9dbd,0x9dbe,0x9dbf,0x9dc0,0x9dc1,0x9dc2, +0x9dc3,0x9dc4,0x9dc5,0x9dc6,0x9dc7,0x9dc8,0x9dc9,0x9dca, +0x9dcb,0x9dcc,0x9dcd,0x9dce,0x9dcf,0x9dd0,0x9dd1,0x9dd2, +0x9dd3,0x9dd4,0x9dd5,0x9dd6,0x9dd7,0x9dd8,0x9dd9,0x9dda, +0x9ddb,0x9ddc,0x9ddd,0x9dde,0x9ddf,0x9de0,0x9de1,0x0000, +0x9de2,0x9de3,0x9de4,0x9de5,0x9de6,0x9de7,0x9de8,0x9de9, +0x9dea,0x9deb,0x9dec,0x9ded,0x9dee,0x9def,0x9df0,0x9df1, +0x9df2,0x9df3,0x9df4,0x9df5,0x9df6,0x9df7,0x9df8,0x9df9, +0x9dfa,0x9dfb,0x9dfc,0x9dfd,0x9dfe,0x9dff,0x9e00,0x9e01, +0x9e02,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xfb00 */ +0x9e03,0x9e04,0x9e05,0x9e06,0x9e07,0x9e08,0x9e09,0x9e0a, +0x9e0b,0x9e0c,0x9e0d,0x9e0e,0x9e0f,0x9e10,0x9e11,0x9e12, +0x9e13,0x9e14,0x9e15,0x9e16,0x9e17,0x9e18,0x9e19,0x9e1a, +0x9e1b,0x9e1c,0x9e1d,0x9e1e,0x9e24,0x9e27,0x9e2e,0x9e30, +0x9e34,0x9e3b,0x9e3c,0x9e40,0x9e4d,0x9e50,0x9e52,0x9e53, +0x9e54,0x9e56,0x9e59,0x9e5d,0x9e5f,0x9e60,0x9e61,0x9e62, +0x9e65,0x9e6e,0x9e6f,0x9e72,0x9e74,0x9e75,0x9e76,0x9e77, +0x9e78,0x9e79,0x9e7a,0x9e7b,0x9e7c,0x9e7d,0x9e80,0x0000, +0x9e81,0x9e83,0x9e84,0x9e85,0x9e86,0x9e89,0x9e8a,0x9e8c, +0x9e8d,0x9e8e,0x9e8f,0x9e90,0x9e91,0x9e94,0x9e95,0x9e96, +0x9e97,0x9e98,0x9e99,0x9e9a,0x9e9b,0x9e9c,0x9e9e,0x9ea0, +0x9ea1,0x9ea2,0x9ea3,0x9ea4,0x9ea5,0x9ea7,0x9ea8,0x9ea9, +0x9eaa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xfc00 */ +0x9eab,0x9eac,0x9ead,0x9eae,0x9eaf,0x9eb0,0x9eb1,0x9eb2, +0x9eb3,0x9eb5,0x9eb6,0x9eb7,0x9eb9,0x9eba,0x9ebc,0x9ebf, +0x9ec0,0x9ec1,0x9ec2,0x9ec3,0x9ec5,0x9ec6,0x9ec7,0x9ec8, +0x9eca,0x9ecb,0x9ecc,0x9ed0,0x9ed2,0x9ed3,0x9ed5,0x9ed6, +0x9ed7,0x9ed9,0x9eda,0x9ede,0x9ee1,0x9ee3,0x9ee4,0x9ee6, +0x9ee8,0x9eeb,0x9eec,0x9eed,0x9eee,0x9ef0,0x9ef1,0x9ef2, +0x9ef3,0x9ef4,0x9ef5,0x9ef6,0x9ef7,0x9ef8,0x9efa,0x9efd, +0x9eff,0x9f00,0x9f01,0x9f02,0x9f03,0x9f04,0x9f05,0x0000, +0x9f06,0x9f07,0x9f08,0x9f09,0x9f0a,0x9f0c,0x9f0f,0x9f11, +0x9f12,0x9f14,0x9f15,0x9f16,0x9f18,0x9f1a,0x9f1b,0x9f1c, +0x9f1d,0x9f1e,0x9f1f,0x9f21,0x9f23,0x9f24,0x9f25,0x9f26, +0x9f27,0x9f28,0x9f29,0x9f2a,0x9f2b,0x9f2d,0x9f2e,0x9f30, +0x9f31,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xfd00 */ +0x9f32,0x9f33,0x9f34,0x9f35,0x9f36,0x9f38,0x9f3a,0x9f3c, +0x9f3f,0x9f40,0x9f41,0x9f42,0x9f43,0x9f45,0x9f46,0x9f47, +0x9f48,0x9f49,0x9f4a,0x9f4b,0x9f4c,0x9f4d,0x9f4e,0x9f4f, +0x9f52,0x9f53,0x9f54,0x9f55,0x9f56,0x9f57,0x9f58,0x9f59, +0x9f5a,0x9f5b,0x9f5c,0x9f5d,0x9f5e,0x9f5f,0x9f60,0x9f61, +0x9f62,0x9f63,0x9f64,0x9f65,0x9f66,0x9f67,0x9f68,0x9f69, +0x9f6a,0x9f6b,0x9f6c,0x9f6d,0x9f6e,0x9f6f,0x9f70,0x9f71, +0x9f72,0x9f73,0x9f74,0x9f75,0x9f76,0x9f77,0x9f78,0x0000, +0x9f79,0x9f7a,0x9f7b,0x9f7c,0x9f7d,0x9f7e,0x9f81,0x9f82, +0x9f8d,0x9f8e,0x9f8f,0x9f90,0x9f91,0x9f92,0x9f93,0x9f94, +0x9f95,0x9f96,0x9f97,0x9f98,0x9f9c,0x9f9d,0x9f9e,0x9fa1, +0x9fa2,0x9fa3,0x9fa4,0x9fa5,0xf92c,0xf979,0xf995,0xf9e7, +0xf9f1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0xfe00 */ +0xfa0c,0xfa0d,0xfa0e,0xfa0f,0xfa11,0xfa13,0xfa14,0xfa18, +0xfa1f,0xfa20,0xfa21,0xfa23,0xfa24,0xfa27,0xfa28,0xfa29, +0x2e81,0x0000,0x0000,0x0000,0x2e84,0x3473,0x3447,0x2e88, +0x2e8b,0x0000,0x359e,0x361a,0x360e,0x2e8c,0x2e97,0x396e, +0x3918,0x0000,0x39cf,0x39df,0x3a73,0x39d0,0x0000,0x0000, +0x3b4e,0x3c6e,0x3ce0,0x2ea7,0x0000,0x0000,0x2eaa,0x4056, +0x415f,0x2eae,0x4337,0x2eb3,0x2eb6,0x2eb7,0x0000,0x43b1, +0x43ac,0x2ebb,0x43dd,0x44d6,0x4661,0x464c,0x0000,0x0000, +0x4723,0x4729,0x477c,0x478d,0x2eca,0x4947,0x497a,0x497d, +0x4982,0x4983,0x4985,0x4986,0x499f,0x499b,0x49b7,0x49b6, +0x0000,0x0000,0x4ca3,0x4c9f,0x4ca0,0x4ca1,0x4c77,0x4ca2, +0x4d13,0x4d14,0x4d15,0x4d16,0x4d17,0x4d18,0x4d19,0x4dae, +}; + +const int cp936_ucs_table_size = (sizeof(cp936_ucs_table)/sizeof(unsigned short)); + + +/* UCS -> CP936 */ +const unsigned short ucs_a1_cp936_table[] = { +0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, +0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f, +0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, +0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f, +0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, +0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f, +0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, +0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f, +0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, +0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f, +0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, +0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f, +0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, +0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f, +0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, +0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa1e8,0x0000,0x0000,0xa1ec, +0xa1a7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa1e3,0xa1c0,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1a4, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1c1, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa8a4,0xa8a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa8a8,0xa8a6,0xa8ba,0x0000,0xa8ac,0xa8aa,0x0000,0x0000, +0x0000,0x0000,0xa8b0,0xa8ae,0x0000,0x0000,0x0000,0xa1c2, +0x0000,0xa8b4,0xa8b2,0x0000,0xa8b9,0x0000,0x0000,0x0000, +/* 0x0100 */ +0x0000,0xa8a1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xa8a5,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xa8a7,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xa8a9,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa8bd,0x0000,0x0000,0x0000, +0xa8be,0x0000,0x0000,0x0000,0x0000,0xa8ad,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xa8b1,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8a3,0x0000, +0xa8ab,0x0000,0xa8af,0x0000,0xa8b3,0x0000,0xa8b5,0x0000, +0xa8b6,0x0000,0xa8b7,0x0000,0xa8b8,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa8bf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x0200 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa8bb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa8c0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1a6, +0x0000,0xa1a5,0xa840,0xa841,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa842,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x0300 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa6a1,0xa6a2,0xa6a3,0xa6a4,0xa6a5,0xa6a6,0xa6a7, +0xa6a8,0xa6a9,0xa6aa,0xa6ab,0xa6ac,0xa6ad,0xa6ae,0xa6af, +0xa6b0,0xa6b1,0x0000,0xa6b2,0xa6b3,0xa6b4,0xa6b5,0xa6b6, +0xa6b7,0xa6b8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa6c1,0xa6c2,0xa6c3,0xa6c4,0xa6c5,0xa6c6,0xa6c7, +0xa6c8,0xa6c9,0xa6ca,0xa6cb,0xa6cc,0xa6cd,0xa6ce,0xa6cf, +0xa6d0,0xa6d1,0x0000,0xa6d2,0xa6d3,0xa6d4,0xa6d5,0xa6d6, +0xa6d7,0xa6d8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x0400 */ +0x0000,0xa7a7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa7a1,0xa7a2,0xa7a3,0xa7a4,0xa7a5,0xa7a6,0xa7a8,0xa7a9, +0xa7aa,0xa7ab,0xa7ac,0xa7ad,0xa7ae,0xa7af,0xa7b0,0xa7b1, +0xa7b2,0xa7b3,0xa7b4,0xa7b5,0xa7b6,0xa7b7,0xa7b8,0xa7b9, +0xa7ba,0xa7bb,0xa7bc,0xa7bd,0xa7be,0xa7bf,0xa7c0,0xa7c1, +0xa7d1,0xa7d2,0xa7d3,0xa7d4,0xa7d5,0xa7d6,0xa7d8,0xa7d9, +0xa7da,0xa7db,0xa7dc,0xa7dd,0xa7de,0xa7df,0xa7e0,0xa7e1, +0xa7e2,0xa7e3,0xa7e4,0xa7e5,0xa7e6,0xa7e7,0xa7e8,0xa7e9, +0xa7ea,0xa7eb,0xa7ec,0xa7ed,0xa7ee,0xa7ef,0xa7f0,0xa7f1, +0x0000,0xa7d7}; + +const int ucs_a1_cp936_table_min = 0x0000; +const int ucs_a1_cp936_table_max = 0x0000 + (sizeof (ucs_a1_cp936_table) / sizeof (unsigned short)); + +/* 0x2000 */ +const unsigned short ucs_a2_cp936_table[] = { +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa95c,0x0000,0x0000,0xa843,0xa1aa,0xa844,0xa1ac,0x0000, +0xa1ae,0xa1af,0x0000,0x0000,0xa1b0,0xa1b1,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xa845,0xa1ad,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa1eb,0x0000,0xa1e4,0xa1e5,0x0000,0xa846,0x0000,0x0000, +0x0000,0x0000,0x0000,0xa1f9,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0080,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x2100 */ +0x0000,0x0000,0x0000,0xa1e6,0x0000,0xa847,0x0000,0x0000, +0x0000,0xa848,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1ed,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa959,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa2f1,0xa2f2,0xa2f3,0xa2f4,0xa2f5,0xa2f6,0xa2f7,0xa2f8, +0xa2f9,0xa2fa,0xa2fb,0xa2fc,0x0000,0x0000,0x0000,0x0000, +0xa2a1,0xa2a2,0xa2a3,0xa2a4,0xa2a5,0xa2a6,0xa2a7,0xa2a8, +0xa2a9,0xa2aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa1fb,0xa1fc,0xa1fa,0xa1fd,0x0000,0x0000,0xa849,0xa84a, +0xa84b,0xa84c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x2200 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa1ca,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1c7, +0x0000,0xa1c6,0x0000,0x0000,0x0000,0xa84d,0x0000,0x0000, +0x0000,0x0000,0xa1cc,0x0000,0x0000,0xa1d8,0xa1de,0xa84e, +0xa1cf,0x0000,0x0000,0xa84f,0x0000,0xa1ce,0x0000,0xa1c4, +0xa1c5,0xa1c9,0xa1c8,0xa1d2,0x0000,0x0000,0xa1d3,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa1e0,0xa1df,0xa1c3,0xa1cb, +0x0000,0x0000,0x0000,0x0000,0x0000,0xa1d7,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa1d6,0x0000,0x0000,0x0000,0xa1d5,0x0000,0x0000,0x0000, +0x0000,0x0000,0xa850,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa1d9,0xa1d4,0x0000,0x0000,0xa1dc,0xa1dd,0xa851,0xa852, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1da,0xa1db, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xa892,0x0000,0x0000, +0x0000,0xa1d1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xa1cd,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa853, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x2300 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xa1d0,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x2400 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa2d9,0xa2da,0xa2db,0xa2dc,0xa2dd,0xa2de,0xa2df,0xa2e0, +0xa2e1,0xa2e2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa2c5,0xa2c6,0xa2c7,0xa2c8, +0xa2c9,0xa2ca,0xa2cb,0xa2cc,0xa2cd,0xa2ce,0xa2cf,0xa2d0, +0xa2d1,0xa2d2,0xa2d3,0xa2d4,0xa2d5,0xa2d6,0xa2d7,0xa2d8, +0xa2b1,0xa2b2,0xa2b3,0xa2b4,0xa2b5,0xa2b6,0xa2b7,0xa2b8, +0xa2b9,0xa2ba,0xa2bb,0xa2bc,0xa2bd,0xa2be,0xa2bf,0xa2c0, +0xa2c1,0xa2c2,0xa2c3,0xa2c4,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x2500 */ +0xa9a4,0xa9a5,0xa9a6,0xa9a7,0xa9a8,0xa9a9,0xa9aa,0xa9ab, +0xa9ac,0xa9ad,0xa9ae,0xa9af,0xa9b0,0xa9b1,0xa9b2,0xa9b3, +0xa9b4,0xa9b5,0xa9b6,0xa9b7,0xa9b8,0xa9b9,0xa9ba,0xa9bb, +0xa9bc,0xa9bd,0xa9be,0xa9bf,0xa9c0,0xa9c1,0xa9c2,0xa9c3, +0xa9c4,0xa9c5,0xa9c6,0xa9c7,0xa9c8,0xa9c9,0xa9ca,0xa9cb, +0xa9cc,0xa9cd,0xa9ce,0xa9cf,0xa9d0,0xa9d1,0xa9d2,0xa9d3, +0xa9d4,0xa9d5,0xa9d6,0xa9d7,0xa9d8,0xa9d9,0xa9da,0xa9db, +0xa9dc,0xa9dd,0xa9de,0xa9df,0xa9e0,0xa9e1,0xa9e2,0xa9e3, +0xa9e4,0xa9e5,0xa9e6,0xa9e7,0xa9e8,0xa9e9,0xa9ea,0xa9eb, +0xa9ec,0xa9ed,0xa9ee,0xa9ef,0x0000,0x0000,0x0000,0x0000, +0xa854,0xa855,0xa856,0xa857,0xa858,0xa859,0xa85a,0xa85b, +0xa85c,0xa85d,0xa85e,0xa85f,0xa860,0xa861,0xa862,0xa863, +0xa864,0xa865,0xa866,0xa867,0xa868,0xa869,0xa86a,0xa86b, +0xa86c,0xa86d,0xa86e,0xa86f,0xa870,0xa871,0xa872,0xa873, +0xa874,0xa875,0xa876,0xa877,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa878,0xa879,0xa87a,0xa87b,0xa87c,0xa87d,0xa87e, +0xa880,0xa881,0xa882,0xa883,0xa884,0xa885,0xa886,0xa887, +0x0000,0x0000,0x0000,0xa888,0xa889,0xa88a,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa1f6,0xa1f5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xa1f8,0xa1f7,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa88b,0xa88c,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1f4,0xa1f3, +0x0000,0x0000,0x0000,0xa1f0,0x0000,0x0000,0xa1f2,0xa1f1, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xa88d,0xa88e,0xa88f,0xa890,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x2600 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0xa1ef,0xa1ee,0x0000, +0x0000,0xa891,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa1e2,0x0000,0xa1e1,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 +}; +const int ucs_a2_cp936_table_min = 0x2000; +const int ucs_a2_cp936_table_max = 0x2000 + (sizeof (ucs_a2_cp936_table) / sizeof (unsigned short)); + +const unsigned short ucs_a3_cp936_table[] = { +/* 0x2f00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa98a,0xa98b,0xa98c,0xa98d,0xa98e,0xa98f,0xa990,0xa991, +0xa992,0xa993,0xa994,0xa995,0x0000,0x0000,0x0000,0x0000, +/* 0x3000 */ +0xa1a1,0xa1a2,0xa1a3,0xa1a8,0x0000,0xa1a9,0xa965,0xa996, +0xa1b4,0xa1b5,0xa1b6,0xa1b7,0xa1b8,0xa1b9,0xa1ba,0xa1bb, +0xa1be,0xa1bf,0xa893,0xa1fe,0xa1b2,0xa1b3,0xa1bc,0xa1bd, +0x0000,0x0000,0x0000,0x0000,0x0000,0xa894,0xa895,0x0000, +0x0000,0xa940,0xa941,0xa942,0xa943,0xa944,0xa945,0xa946, +0xa947,0xa948,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa989,0x0000, +0x0000,0xa4a1,0xa4a2,0xa4a3,0xa4a4,0xa4a5,0xa4a6,0xa4a7, +0xa4a8,0xa4a9,0xa4aa,0xa4ab,0xa4ac,0xa4ad,0xa4ae,0xa4af, +0xa4b0,0xa4b1,0xa4b2,0xa4b3,0xa4b4,0xa4b5,0xa4b6,0xa4b7, +0xa4b8,0xa4b9,0xa4ba,0xa4bb,0xa4bc,0xa4bd,0xa4be,0xa4bf, +0xa4c0,0xa4c1,0xa4c2,0xa4c3,0xa4c4,0xa4c5,0xa4c6,0xa4c7, +0xa4c8,0xa4c9,0xa4ca,0xa4cb,0xa4cc,0xa4cd,0xa4ce,0xa4cf, +0xa4d0,0xa4d1,0xa4d2,0xa4d3,0xa4d4,0xa4d5,0xa4d6,0xa4d7, +0xa4d8,0xa4d9,0xa4da,0xa4db,0xa4dc,0xa4dd,0xa4de,0xa4df, +0xa4e0,0xa4e1,0xa4e2,0xa4e3,0xa4e4,0xa4e5,0xa4e6,0xa4e7, +0xa4e8,0xa4e9,0xa4ea,0xa4eb,0xa4ec,0xa4ed,0xa4ee,0xa4ef, +0xa4f0,0xa4f1,0xa4f2,0xa4f3,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xa961,0xa962,0xa966,0xa967,0x0000, +0x0000,0xa5a1,0xa5a2,0xa5a3,0xa5a4,0xa5a5,0xa5a6,0xa5a7, +0xa5a8,0xa5a9,0xa5aa,0xa5ab,0xa5ac,0xa5ad,0xa5ae,0xa5af, +0xa5b0,0xa5b1,0xa5b2,0xa5b3,0xa5b4,0xa5b5,0xa5b6,0xa5b7, +0xa5b8,0xa5b9,0xa5ba,0xa5bb,0xa5bc,0xa5bd,0xa5be,0xa5bf, +0xa5c0,0xa5c1,0xa5c2,0xa5c3,0xa5c4,0xa5c5,0xa5c6,0xa5c7, +0xa5c8,0xa5c9,0xa5ca,0xa5cb,0xa5cc,0xa5cd,0xa5ce,0xa5cf, +0xa5d0,0xa5d1,0xa5d2,0xa5d3,0xa5d4,0xa5d5,0xa5d6,0xa5d7, +0xa5d8,0xa5d9,0xa5da,0xa5db,0xa5dc,0xa5dd,0xa5de,0xa5df, +0xa5e0,0xa5e1,0xa5e2,0xa5e3,0xa5e4,0xa5e5,0xa5e6,0xa5e7, +0xa5e8,0xa5e9,0xa5ea,0xa5eb,0xa5ec,0xa5ed,0xa5ee,0xa5ef, +0xa5f0,0xa5f1,0xa5f2,0xa5f3,0xa5f4,0xa5f5,0xa5f6,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa960,0xa963,0xa964,0x0000, +/* 0x3100 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0xa8c5,0xa8c6,0xa8c7, +0xa8c8,0xa8c9,0xa8ca,0xa8cb,0xa8cc,0xa8cd,0xa8ce,0xa8cf, +0xa8d0,0xa8d1,0xa8d2,0xa8d3,0xa8d4,0xa8d5,0xa8d6,0xa8d7, +0xa8d8,0xa8d9,0xa8da,0xa8db,0xa8dc,0xa8dd,0xa8de,0xa8df, +0xa8e0,0xa8e1,0xa8e2,0xa8e3,0xa8e4,0xa8e5,0xa8e6,0xa8e7, +0xa8e8,0xa8e9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x3200 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa2e5,0xa2e6,0xa2e7,0xa2e8,0xa2e9,0xa2ea,0xa2eb,0xa2ec, +0xa2ed,0xa2ee,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa95a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xa949,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x3300 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa94a,0xa94b, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa94c,0xa94d,0xa94e,0x0000, +0x0000,0xa94f,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa950,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa951,0x0000, +0x0000,0xa952,0xa953,0x0000,0x0000,0xa954,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 +}; + +const int ucs_a3_cp936_table_min = 0x2f00; +const int ucs_a3_cp936_table_max = 0x2f00 + (sizeof (ucs_a3_cp936_table) / sizeof (unsigned short)); + +/* 4d00h CJK Unified Ideographs (+ Extension A) */ +const unsigned short ucs_i_cp936_table[] = { +/* 0x4d00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xfe98,0xfe99,0xfe9a,0xfe9b,0xfe9c, +0xfe9d,0xfe9e,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfe9f,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd2bb,0xb6a1,0x8140,0xc6df,0x8141,0x8142,0x8143,0xcdf2, +0xd5c9,0xc8fd,0xc9cf,0xcfc2,0xd8a2,0xb2bb,0xd3eb,0x8144, +0xd8a4,0xb3f3,0x8145,0xd7a8,0xc7d2,0xd8a7,0xcac0,0x8146, +0xc7f0,0xb1fb,0xd2b5,0xb4d4,0xb6ab,0xcbbf,0xd8a9,0x8147, +0x8148,0x8149,0xb6aa,0x814a,0xc1bd,0xd1cf,0x814b,0xc9a5, +0xd8ad,0x814c,0xb8f6,0xd1be,0xe3dc,0xd6d0,0x814d,0x814e, +0xb7e1,0x814f,0xb4ae,0x8150,0xc1d9,0x8151,0xd8bc,0x8152, +0xcde8,0xb5a4,0xceaa,0xd6f7,0x8153,0xc0f6,0xbed9,0xd8af, +0x8154,0x8155,0x8156,0xc4cb,0x8157,0xbec3,0x8158,0xd8b1, +0xc3b4,0xd2e5,0x8159,0xd6ae,0xceda,0xd5a7,0xbaf5,0xb7a6, +0xc0d6,0x815a,0xc6b9,0xc5d2,0xc7c7,0x815b,0xb9d4,0x815c, +0xb3cb,0xd2d2,0x815d,0x815e,0xd8bf,0xbec5,0xc6f2,0xd2b2, +0xcfb0,0xcfe7,0x815f,0x8160,0x8161,0x8162,0xcae9,0x8163, +0x8164,0xd8c0,0x8165,0x8166,0x8167,0x8168,0x8169,0x816a, +0xc2f2,0xc2d2,0x816b,0xc8e9,0x816c,0x816d,0x816e,0x816f, +0x8170,0x8171,0x8172,0x8173,0x8174,0x8175,0xc7ac,0x8176, +0x8177,0x8178,0x8179,0x817a,0x817b,0x817c,0xc1cb,0x817d, +0xd3e8,0xd5f9,0x817e,0xcac2,0xb6fe,0xd8a1,0xd3da,0xbff7, +0x8180,0xd4c6,0xbba5,0xd8c1,0xcee5,0xbeae,0x8181,0x8182, +0xd8a8,0x8183,0xd1c7,0xd0a9,0x8184,0x8185,0x8186,0xd8bd, +0xd9ef,0xcdf6,0xbfba,0x8187,0xbdbb,0xbaa5,0xd2e0,0xb2fa, +0xbae0,0xc4b6,0x8188,0xcfed,0xbea9,0xcda4,0xc1c1,0x8189, +0x818a,0x818b,0xc7d7,0xd9f1,0x818c,0xd9f4,0x818d,0x818e, +0x818f,0x8190,0xc8cb,0xd8e9,0x8191,0x8192,0x8193,0xd2da, +0xcab2,0xc8ca,0xd8ec,0xd8ea,0xd8c6,0xbdf6,0xc6cd,0xb3f0, +0x8194,0xd8eb,0xbdf1,0xbde9,0x8195,0xc8d4,0xb4d3,0x8196, +0x8197,0xc2d8,0x8198,0xb2d6,0xd7d0,0xcacb,0xcbfb,0xd5cc, +0xb8b6,0xcfc9,0x8199,0x819a,0x819b,0xd9da,0xd8f0,0xc7aa, +0x819c,0xd8ee,0x819d,0xb4fa,0xc1ee,0xd2d4,0x819e,0x819f, +0xd8ed,0x81a0,0xd2c7,0xd8ef,0xc3c7,0x81a1,0x81a2,0x81a3, +0xd1f6,0x81a4,0xd6d9,0xd8f2,0x81a5,0xd8f5,0xbcfe,0xbcdb, +0x81a6,0x81a7,0x81a8,0xc8ce,0x81a9,0xb7dd,0x81aa,0xb7c2, +0x81ab,0xc6f3,0x81ac,0x81ad,0x81ae,0x81af,0x81b0,0x81b1, +0x81b2,0xd8f8,0xd2c1,0x81b3,0x81b4,0xcee9,0xbcbf,0xb7fc, +0xb7a5,0xd0dd,0x81b5,0x81b6,0x81b7,0x81b8,0x81b9,0xd6da, +0xd3c5,0xbbef,0xbbe1,0xd8f1,0x81ba,0x81bb,0xc9a1,0xceb0, +0xb4ab,0x81bc,0xd8f3,0x81bd,0xc9cb,0xd8f6,0xc2d7,0xd8f7, +0x81be,0x81bf,0xceb1,0xd8f9,0x81c0,0x81c1,0x81c2,0xb2ae, +0xb9c0,0x81c3,0xd9a3,0x81c4,0xb0e9,0x81c5,0xc1e6,0x81c6, +0xc9ec,0x81c7,0xcbc5,0x81c8,0xcbc6,0xd9a4,0x81c9,0x81ca, +0x81cb,0x81cc,0x81cd,0xb5e8,0x81ce,0x81cf,0xb5ab,0x81d0, +0x81d1,0x81d2,0x81d3,0x81d4,0x81d5,0xcebb,0xb5cd,0xd7a1, +0xd7f4,0xd3d3,0x81d6,0xcce5,0x81d7,0xbace,0x81d8,0xd9a2, +0xd9dc,0xd3e0,0xd8fd,0xb7f0,0xd7f7,0xd8fe,0xd8fa,0xd9a1, +0xc4e3,0x81d9,0x81da,0xd3b6,0xd8f4,0xd9dd,0x81db,0xd8fb, +0x81dc,0xc5e5,0x81dd,0x81de,0xc0d0,0x81df,0x81e0,0xd1f0, +0xb0db,0x81e1,0x81e2,0xbcd1,0xd9a6,0x81e3,0xd9a5,0x81e4, +0x81e5,0x81e6,0x81e7,0xd9ac,0xd9ae,0x81e8,0xd9ab,0xcab9, +0x81e9,0x81ea,0x81eb,0xd9a9,0xd6b6,0x81ec,0x81ed,0x81ee, +0xb3de,0xd9a8,0x81ef,0xc0fd,0x81f0,0xcacc,0x81f1,0xd9aa, +0x81f2,0xd9a7,0x81f3,0x81f4,0xd9b0,0x81f5,0x81f6,0xb6b1, +0x81f7,0x81f8,0x81f9,0xb9a9,0x81fa,0xd2c0,0x81fb,0x81fc, +0xcfc0,0x81fd,0x81fe,0xc2c2,0x8240,0xbdc4,0xd5ec,0xb2e0, +0xc7c8,0xbfeb,0xd9ad,0x8241,0xd9af,0x8242,0xceea,0xbaee, +0x8243,0x8244,0x8245,0x8246,0x8247,0xc7d6,0x8248,0x8249, +0x824a,0x824b,0x824c,0x824d,0x824e,0x824f,0x8250,0xb1e3, +0x8251,0x8252,0x8253,0xb4d9,0xb6ed,0xd9b4,0x8254,0x8255, +0x8256,0x8257,0xbfa1,0x8258,0x8259,0x825a,0xd9de,0xc7ce, +0xc0fe,0xd9b8,0x825b,0x825c,0x825d,0x825e,0x825f,0xcbd7, +0xb7fd,0x8260,0xd9b5,0x8261,0xd9b7,0xb1a3,0xd3e1,0xd9b9, +0x8262,0xd0c5,0x8263,0xd9b6,0x8264,0x8265,0xd9b1,0x8266, +0xd9b2,0xc1a9,0xd9b3,0x8267,0x8268,0xbcf3,0xd0de,0xb8a9, +0x8269,0xbee3,0x826a,0xd9bd,0x826b,0x826c,0x826d,0x826e, +0xd9ba,0x826f,0xb0b3,0x8270,0x8271,0x8272,0xd9c2,0x8273, +0x8274,0x8275,0x8276,0x8277,0x8278,0x8279,0x827a,0x827b, +0x827c,0x827d,0x827e,0x8280,0xd9c4,0xb1b6,0x8281,0xd9bf, +0x8282,0x8283,0xb5b9,0x8284,0xbef3,0x8285,0x8286,0x8287, +0xccc8,0xbaf2,0xd2d0,0x8288,0xd9c3,0x8289,0x828a,0xbde8, +0x828b,0xb3ab,0x828c,0x828d,0x828e,0xd9c5,0xbeeb,0x828f, +0xd9c6,0xd9bb,0xc4df,0x8290,0xd9be,0xd9c1,0xd9c0,0x8291, +0x8292,0x8293,0x8294,0x8295,0x8296,0x8297,0x8298,0x8299, +0x829a,0x829b,0xd5ae,0x829c,0xd6b5,0x829d,0xc7e3,0x829e, +0x829f,0x82a0,0x82a1,0xd9c8,0x82a2,0x82a3,0x82a4,0xbcd9, +0xd9ca,0x82a5,0x82a6,0x82a7,0xd9bc,0x82a8,0xd9cb,0xc6ab, +0x82a9,0x82aa,0x82ab,0x82ac,0x82ad,0xd9c9,0x82ae,0x82af, +0x82b0,0x82b1,0xd7f6,0x82b2,0xcda3,0x82b3,0x82b4,0x82b5, +0x82b6,0x82b7,0x82b8,0x82b9,0x82ba,0xbda1,0x82bb,0x82bc, +0x82bd,0x82be,0x82bf,0x82c0,0xd9cc,0x82c1,0x82c2,0x82c3, +0x82c4,0x82c5,0x82c6,0x82c7,0x82c8,0x82c9,0xc5bc,0xcdb5, +0x82ca,0x82cb,0x82cc,0xd9cd,0x82cd,0x82ce,0xd9c7,0xb3a5, +0xbffe,0x82cf,0x82d0,0x82d1,0x82d2,0xb8b5,0x82d3,0x82d4, +0xc0fc,0x82d5,0x82d6,0x82d7,0x82d8,0xb0f8,0x82d9,0x82da, +0x82db,0x82dc,0x82dd,0x82de,0x82df,0x82e0,0x82e1,0x82e2, +0x82e3,0x82e4,0x82e5,0x82e6,0x82e7,0x82e8,0x82e9,0x82ea, +0x82eb,0x82ec,0x82ed,0xb4f6,0x82ee,0xd9ce,0x82ef,0xd9cf, +0xb4a2,0xd9d0,0x82f0,0x82f1,0xb4df,0x82f2,0x82f3,0x82f4, +0x82f5,0x82f6,0xb0c1,0x82f7,0x82f8,0x82f9,0x82fa,0x82fb, +0x82fc,0x82fd,0xd9d1,0xc9b5,0x82fe,0x8340,0x8341,0x8342, +0x8343,0x8344,0x8345,0x8346,0x8347,0x8348,0x8349,0x834a, +0x834b,0x834c,0x834d,0x834e,0x834f,0x8350,0x8351,0xcff1, +0x8352,0x8353,0x8354,0x8355,0x8356,0x8357,0xd9d2,0x8358, +0x8359,0x835a,0xc1c5,0x835b,0x835c,0x835d,0x835e,0x835f, +0x8360,0x8361,0x8362,0x8363,0x8364,0x8365,0xd9d6,0xc9ae, +0x8366,0x8367,0x8368,0x8369,0xd9d5,0xd9d4,0xd9d7,0x836a, +0x836b,0x836c,0x836d,0xcbdb,0x836e,0xbda9,0x836f,0x8370, +0x8371,0x8372,0x8373,0xc6a7,0x8374,0x8375,0x8376,0x8377, +0x8378,0x8379,0x837a,0x837b,0x837c,0x837d,0xd9d3,0xd9d8, +0x837e,0x8380,0x8381,0xd9d9,0x8382,0x8383,0x8384,0x8385, +0x8386,0x8387,0xc8e5,0x8388,0x8389,0x838a,0x838b,0x838c, +0x838d,0x838e,0x838f,0x8390,0x8391,0x8392,0x8393,0x8394, +0x8395,0xc0dc,0x8396,0x8397,0x8398,0x8399,0x839a,0x839b, +0x839c,0x839d,0x839e,0x839f,0x83a0,0x83a1,0x83a2,0x83a3, +0x83a4,0x83a5,0x83a6,0x83a7,0x83a8,0x83a9,0x83aa,0x83ab, +0x83ac,0x83ad,0x83ae,0x83af,0x83b0,0x83b1,0x83b2,0xb6f9, +0xd8a3,0xd4ca,0x83b3,0xd4aa,0xd0d6,0xb3e4,0xd5d7,0x83b4, +0xcfc8,0xb9e2,0x83b5,0xbfcb,0x83b6,0xc3e2,0x83b7,0x83b8, +0x83b9,0xb6d2,0x83ba,0x83bb,0xcdc3,0xd9ee,0xd9f0,0x83bc, +0x83bd,0x83be,0xb5b3,0x83bf,0xb6b5,0x83c0,0x83c1,0x83c2, +0x83c3,0x83c4,0xbea4,0x83c5,0x83c6,0xc8eb,0x83c7,0x83c8, +0xc8ab,0x83c9,0x83ca,0xb0cb,0xb9ab,0xc1f9,0xd9e2,0x83cb, +0xc0bc,0xb9b2,0x83cc,0xb9d8,0xd0cb,0xb1f8,0xc6e4,0xbedf, +0xb5e4,0xd7c8,0x83cd,0xd1f8,0xbce6,0xcade,0x83ce,0x83cf, +0xbcbd,0xd9e6,0xd8e7,0x83d0,0x83d1,0xc4da,0x83d2,0x83d3, +0xb8d4,0xc8bd,0x83d4,0x83d5,0xb2e1,0xd4d9,0x83d6,0x83d7, +0x83d8,0x83d9,0xc3b0,0x83da,0x83db,0xc3e1,0xdaa2,0xc8df, +0x83dc,0xd0b4,0x83dd,0xbefc,0xc5a9,0x83de,0x83df,0x83e0, +0xb9da,0x83e1,0xdaa3,0x83e2,0xd4a9,0xdaa4,0x83e3,0x83e4, +0x83e5,0x83e6,0x83e7,0xd9fb,0xb6ac,0x83e8,0x83e9,0xb7eb, +0xb1f9,0xd9fc,0xb3e5,0xbef6,0x83ea,0xbff6,0xd2b1,0xc0e4, +0x83eb,0x83ec,0x83ed,0xb6b3,0xd9fe,0xd9fd,0x83ee,0x83ef, +0xbebb,0x83f0,0x83f1,0x83f2,0xc6e0,0x83f3,0xd7bc,0xdaa1, +0x83f4,0xc1b9,0x83f5,0xb5f2,0xc1e8,0x83f6,0x83f7,0xbcf5, +0x83f8,0xb4d5,0x83f9,0x83fa,0x83fb,0x83fc,0x83fd,0x83fe, +0x8440,0x8441,0x8442,0xc1dd,0x8443,0xc4fd,0x8444,0x8445, +0xbcb8,0xb7b2,0x8446,0x8447,0xb7ef,0x8448,0x8449,0x844a, +0x844b,0x844c,0x844d,0xd9ec,0x844e,0xc6be,0x844f,0xbfad, +0xbbcb,0x8450,0x8451,0xb5ca,0x8452,0xdbc9,0xd0d7,0x8453, +0xcdb9,0xb0bc,0xb3f6,0xbbf7,0xdbca,0xbaaf,0x8454,0xd4e4, +0xb5b6,0xb5f3,0xd8d6,0xc8d0,0x8455,0x8456,0xb7d6,0xc7d0, +0xd8d7,0x8457,0xbfaf,0x8458,0x8459,0xdbbb,0xd8d8,0x845a, +0x845b,0xd0cc,0xbbae,0x845c,0x845d,0x845e,0xebbe,0xc1d0, +0xc1f5,0xd4f2,0xb8d5,0xb4b4,0x845f,0xb3f5,0x8460,0x8461, +0xc9be,0x8462,0x8463,0x8464,0xc5d0,0x8465,0x8466,0x8467, +0xc5d9,0xc0fb,0x8468,0xb1f0,0x8469,0xd8d9,0xb9ce,0x846a, +0xb5bd,0x846b,0x846c,0xd8da,0x846d,0x846e,0xd6c6,0xcba2, +0xc8af,0xc9b2,0xb4cc,0xbfcc,0x846f,0xb9f4,0x8470,0xd8db, +0xd8dc,0xb6e7,0xbcc1,0xccea,0x8471,0x8472,0x8473,0x8474, +0x8475,0x8476,0xcff7,0x8477,0xd8dd,0xc7b0,0x8478,0x8479, +0xb9d0,0xbda3,0x847a,0x847b,0xccde,0x847c,0xc6ca,0x847d, +0x847e,0x8480,0x8481,0x8482,0xd8e0,0x8483,0xd8de,0x8484, +0x8485,0xd8df,0x8486,0x8487,0x8488,0xb0fe,0x8489,0xbee7, +0x848a,0xcaa3,0xbcf4,0x848b,0x848c,0x848d,0x848e,0xb8b1, +0x848f,0x8490,0xb8ee,0x8491,0x8492,0x8493,0x8494,0x8495, +0x8496,0x8497,0x8498,0x8499,0x849a,0xd8e2,0x849b,0xbdcb, +0x849c,0xd8e4,0xd8e3,0x849d,0x849e,0x849f,0x84a0,0x84a1, +0xc5fc,0x84a2,0x84a3,0x84a4,0x84a5,0x84a6,0x84a7,0x84a8, +0xd8e5,0x84a9,0x84aa,0xd8e6,0x84ab,0x84ac,0x84ad,0x84ae, +0x84af,0x84b0,0x84b1,0xc1a6,0x84b2,0xc8b0,0xb0ec,0xb9a6, +0xbcd3,0xcef1,0xdbbd,0xc1d3,0x84b3,0x84b4,0x84b5,0x84b6, +0xb6af,0xd6fa,0xc5ac,0xbdd9,0xdbbe,0xdbbf,0x84b7,0x84b8, +0x84b9,0xc0f8,0xbea2,0xc0cd,0x84ba,0x84bb,0x84bc,0x84bd, +0x84be,0x84bf,0x84c0,0x84c1,0x84c2,0x84c3,0xdbc0,0xcac6, +0x84c4,0x84c5,0x84c6,0xb2aa,0x84c7,0x84c8,0x84c9,0xd3c2, +0x84ca,0xc3e3,0x84cb,0xd1ab,0x84cc,0x84cd,0x84ce,0x84cf, +0xdbc2,0x84d0,0xc0d5,0x84d1,0x84d2,0x84d3,0xdbc3,0x84d4, +0xbfb1,0x84d5,0x84d6,0x84d7,0x84d8,0x84d9,0x84da,0xc4bc, +0x84db,0x84dc,0x84dd,0x84de,0xc7da,0x84df,0x84e0,0x84e1, +0x84e2,0x84e3,0x84e4,0x84e5,0x84e6,0x84e7,0x84e8,0x84e9, +0xdbc4,0x84ea,0x84eb,0x84ec,0x84ed,0x84ee,0x84ef,0x84f0, +0x84f1,0xd9e8,0xc9d7,0x84f2,0x84f3,0x84f4,0xb9b4,0xcef0, +0xd4c8,0x84f5,0x84f6,0x84f7,0x84f8,0xb0fc,0xb4d2,0x84f9, +0xd0d9,0x84fa,0x84fb,0x84fc,0x84fd,0xd9e9,0x84fe,0xdecb, +0xd9eb,0x8540,0x8541,0x8542,0x8543,0xd8b0,0xbbaf,0xb1b1, +0x8544,0xb3d7,0xd8ce,0x8545,0x8546,0xd4d1,0x8547,0x8548, +0xbdb3,0xbfef,0x8549,0xcfbb,0x854a,0x854b,0xd8d0,0x854c, +0x854d,0x854e,0xb7cb,0x854f,0x8550,0x8551,0xd8d1,0x8552, +0x8553,0x8554,0x8555,0x8556,0x8557,0x8558,0x8559,0x855a, +0x855b,0xc6a5,0xc7f8,0xd2bd,0x855c,0x855d,0xd8d2,0xc4e4, +0x855e,0xcaae,0x855f,0xc7a7,0x8560,0xd8a6,0x8561,0xc9fd, +0xcee7,0xbbdc,0xb0eb,0x8562,0x8563,0x8564,0xbbaa,0xd0ad, +0x8565,0xb1b0,0xd7e4,0xd7bf,0x8566,0xb5a5,0xc2f4,0xc4cf, +0x8567,0x8568,0xb2a9,0x8569,0xb2b7,0x856a,0xb1e5,0xdfb2, +0xd5bc,0xbfa8,0xc2ac,0xd8d5,0xc2b1,0x856b,0xd8d4,0xced4, +0x856c,0xdae0,0x856d,0xcec0,0x856e,0x856f,0xd8b4,0xc3ae, +0xd3a1,0xcea3,0x8570,0xbcb4,0xc8b4,0xc2d1,0x8571,0xbeed, +0xd0b6,0x8572,0xdae1,0x8573,0x8574,0x8575,0x8576,0xc7e4, +0x8577,0x8578,0xb3a7,0x8579,0xb6f2,0xccfc,0xc0fa,0x857a, +0x857b,0xc0f7,0x857c,0xd1b9,0xd1e1,0xd8c7,0x857d,0x857e, +0x8580,0x8581,0x8582,0x8583,0x8584,0xb2de,0x8585,0x8586, +0xc0e5,0x8587,0xbaf1,0x8588,0x8589,0xd8c8,0x858a,0xd4ad, +0x858b,0x858c,0xcfe1,0xd8c9,0x858d,0xd8ca,0xcfc3,0x858e, +0xb3f8,0xbec7,0x858f,0x8590,0x8591,0x8592,0xd8cb,0x8593, +0x8594,0x8595,0x8596,0x8597,0x8598,0x8599,0xdbcc,0x859a, +0x859b,0x859c,0x859d,0xc8a5,0x859e,0x859f,0x85a0,0xcfd8, +0x85a1,0xc8fe,0xb2ce,0x85a2,0x85a3,0x85a4,0x85a5,0x85a6, +0xd3d6,0xb2e6,0xbcb0,0xd3d1,0xcbab,0xb7b4,0x85a7,0x85a8, +0x85a9,0xb7a2,0x85aa,0x85ab,0xcae5,0x85ac,0xc8a1,0xcadc, +0xb1e4,0xd0f0,0x85ad,0xc5d1,0x85ae,0x85af,0x85b0,0xdbc5, +0xb5fe,0x85b1,0x85b2,0xbfda,0xb9c5,0xbee4,0xc1ed,0x85b3, +0xdfb6,0xdfb5,0xd6bb,0xbdd0,0xd5d9,0xb0c8,0xb6a3,0xbfc9, +0xcca8,0xdfb3,0xcab7,0xd3d2,0x85b4,0xd8cf,0xd2b6,0xbac5, +0xcbbe,0xccbe,0x85b5,0xdfb7,0xb5f0,0xdfb4,0x85b6,0x85b7, +0x85b8,0xd3f5,0x85b9,0xb3d4,0xb8f7,0x85ba,0xdfba,0x85bb, +0xbacf,0xbcaa,0xb5f5,0x85bc,0xcdac,0xc3fb,0xbaf3,0xc0f4, +0xcdc2,0xcff2,0xdfb8,0xcfc5,0x85bd,0xc2c0,0xdfb9,0xc2f0, +0x85be,0x85bf,0x85c0,0xbefd,0x85c1,0xc1df,0xcdcc,0xd2f7, +0xb7cd,0xdfc1,0x85c2,0xdfc4,0x85c3,0x85c4,0xb7f1,0xb0c9, +0xb6d6,0xb7d4,0x85c5,0xbaac,0xccfd,0xbfd4,0xcbb1,0xc6f4, +0x85c6,0xd6a8,0xdfc5,0x85c7,0xcee2,0xb3b3,0x85c8,0x85c9, +0xcefc,0xb4b5,0x85ca,0xcec7,0xbaf0,0x85cb,0xcee1,0x85cc, +0xd1bd,0x85cd,0x85ce,0xdfc0,0x85cf,0x85d0,0xb4f4,0x85d1, +0xb3ca,0x85d2,0xb8e6,0xdfbb,0x85d3,0x85d4,0x85d5,0x85d6, +0xc4c5,0x85d7,0xdfbc,0xdfbd,0xdfbe,0xc5bb,0xdfbf,0xdfc2, +0xd4b1,0xdfc3,0x85d8,0xc7ba,0xced8,0x85d9,0x85da,0x85db, +0x85dc,0x85dd,0xc4d8,0x85de,0xdfca,0x85df,0xdfcf,0x85e0, +0xd6dc,0x85e1,0x85e2,0x85e3,0x85e4,0x85e5,0x85e6,0x85e7, +0x85e8,0xdfc9,0xdfda,0xceb6,0x85e9,0xbac7,0xdfce,0xdfc8, +0xc5de,0x85ea,0x85eb,0xc9eb,0xbaf4,0xc3fc,0x85ec,0x85ed, +0xbed7,0x85ee,0xdfc6,0x85ef,0xdfcd,0x85f0,0xc5d8,0x85f1, +0x85f2,0x85f3,0x85f4,0xd5a6,0xbacd,0x85f5,0xbecc,0xd3bd, +0xb8c0,0x85f6,0xd6e4,0x85f7,0xdfc7,0xb9be,0xbfa7,0x85f8, +0x85f9,0xc1fc,0xdfcb,0xdfcc,0x85fa,0xdfd0,0x85fb,0x85fc, +0x85fd,0x85fe,0x8640,0xdfdb,0xdfe5,0x8641,0xdfd7,0xdfd6, +0xd7c9,0xdfe3,0xdfe4,0xe5eb,0xd2a7,0xdfd2,0x8642,0xbfa9, +0x8643,0xd4db,0x8644,0xbfc8,0xdfd4,0x8645,0x8646,0x8647, +0xcfcc,0x8648,0x8649,0xdfdd,0x864a,0xd1ca,0x864b,0xdfde, +0xb0a7,0xc6b7,0xdfd3,0x864c,0xbae5,0x864d,0xb6df,0xcddb, +0xb9fe,0xd4d5,0x864e,0x864f,0xdfdf,0xcfec,0xb0a5,0xdfe7, +0xdfd1,0xd1c6,0xdfd5,0xdfd8,0xdfd9,0xdfdc,0x8650,0xbba9, +0x8651,0xdfe0,0xdfe1,0x8652,0xdfe2,0xdfe6,0xdfe8,0xd3b4, +0x8653,0x8654,0x8655,0x8656,0x8657,0xb8e7,0xc5b6,0xdfea, +0xc9da,0xc1a8,0xc4c4,0x8658,0x8659,0xbfde,0xcff8,0x865a, +0x865b,0x865c,0xd5dc,0xdfee,0x865d,0x865e,0x865f,0x8660, +0x8661,0x8662,0xb2b8,0x8663,0xbadf,0xdfec,0x8664,0xdbc1, +0x8665,0xd1e4,0x8666,0x8667,0x8668,0x8669,0xcbf4,0xb4bd, +0x866a,0xb0a6,0x866b,0x866c,0x866d,0x866e,0x866f,0xdff1, +0xccc6,0xdff2,0x8670,0x8671,0xdfed,0x8672,0x8673,0x8674, +0x8675,0x8676,0x8677,0xdfe9,0x8678,0x8679,0x867a,0x867b, +0xdfeb,0x867c,0xdfef,0xdff0,0xbbbd,0x867d,0x867e,0xdff3, +0x8680,0x8681,0xdff4,0x8682,0xbba3,0x8683,0xcadb,0xcea8, +0xe0a7,0xb3aa,0x8684,0xe0a6,0x8685,0x8686,0x8687,0xe0a1, +0x8688,0x8689,0x868a,0x868b,0xdffe,0x868c,0xcdd9,0xdffc, +0x868d,0xdffa,0x868e,0xbfd0,0xd7c4,0x868f,0xc9cc,0x8690, +0x8691,0xdff8,0xb0a1,0x8692,0x8693,0x8694,0x8695,0x8696, +0xdffd,0x8697,0x8698,0x8699,0x869a,0xdffb,0xe0a2,0x869b, +0x869c,0x869d,0x869e,0x869f,0xe0a8,0x86a0,0x86a1,0x86a2, +0x86a3,0xb7c8,0x86a4,0x86a5,0xc6a1,0xc9b6,0xc0b2,0xdff5, +0x86a6,0x86a7,0xc5be,0x86a8,0xd8c4,0xdff9,0xc4f6,0x86a9, +0x86aa,0x86ab,0x86ac,0x86ad,0x86ae,0xe0a3,0xe0a4,0xe0a5, +0xd0a5,0x86af,0x86b0,0xe0b4,0xcce4,0x86b1,0xe0b1,0x86b2, +0xbfa6,0xe0af,0xceb9,0xe0ab,0xc9c6,0x86b3,0x86b4,0xc0ae, +0xe0ae,0xbaed,0xbab0,0xe0a9,0x86b5,0x86b6,0x86b7,0xdff6, +0x86b8,0xe0b3,0x86b9,0x86ba,0xe0b8,0x86bb,0x86bc,0x86bd, +0xb4ad,0xe0b9,0x86be,0x86bf,0xcfb2,0xbac8,0x86c0,0xe0b0, +0x86c1,0x86c2,0x86c3,0x86c4,0x86c5,0x86c6,0x86c7,0xd0fa, +0x86c8,0x86c9,0x86ca,0x86cb,0x86cc,0x86cd,0x86ce,0x86cf, +0x86d0,0xe0ac,0x86d1,0xd4fb,0x86d2,0xdff7,0x86d3,0xc5e7, +0x86d4,0xe0ad,0x86d5,0xd3f7,0x86d6,0xe0b6,0xe0b7,0x86d7, +0x86d8,0x86d9,0x86da,0x86db,0xe0c4,0xd0e1,0x86dc,0x86dd, +0x86de,0xe0bc,0x86df,0x86e0,0xe0c9,0xe0ca,0x86e1,0x86e2, +0x86e3,0xe0be,0xe0aa,0xc9a4,0xe0c1,0x86e4,0xe0b2,0x86e5, +0x86e6,0x86e7,0x86e8,0x86e9,0xcac8,0xe0c3,0x86ea,0xe0b5, +0x86eb,0xcecb,0x86ec,0xcbc3,0xe0cd,0xe0c6,0xe0c2,0x86ed, +0xe0cb,0x86ee,0xe0ba,0xe0bf,0xe0c0,0x86ef,0x86f0,0xe0c5, +0x86f1,0x86f2,0xe0c7,0xe0c8,0x86f3,0xe0cc,0x86f4,0xe0bb, +0x86f5,0x86f6,0x86f7,0x86f8,0x86f9,0xcbd4,0xe0d5,0x86fa, +0xe0d6,0xe0d2,0x86fb,0x86fc,0x86fd,0x86fe,0x8740,0x8741, +0xe0d0,0xbcce,0x8742,0x8743,0xe0d1,0x8744,0xb8c2,0xd8c5, +0x8745,0x8746,0x8747,0x8748,0x8749,0x874a,0x874b,0x874c, +0xd0ea,0x874d,0x874e,0xc2ef,0x874f,0x8750,0xe0cf,0xe0bd, +0x8751,0x8752,0x8753,0xe0d4,0xe0d3,0x8754,0x8755,0xe0d7, +0x8756,0x8757,0x8758,0x8759,0xe0dc,0xe0d8,0x875a,0x875b, +0x875c,0xd6f6,0xb3b0,0x875d,0xd7ec,0x875e,0xcbbb,0x875f, +0x8760,0xe0da,0x8761,0xcefb,0x8762,0x8763,0x8764,0xbad9, +0x8765,0x8766,0x8767,0x8768,0x8769,0x876a,0x876b,0x876c, +0x876d,0x876e,0x876f,0x8770,0xe0e1,0xe0dd,0xd2ad,0x8771, +0x8772,0x8773,0x8774,0x8775,0xe0e2,0x8776,0x8777,0xe0db, +0xe0d9,0xe0df,0x8778,0x8779,0xe0e0,0x877a,0x877b,0x877c, +0x877d,0x877e,0xe0de,0x8780,0xe0e4,0x8781,0x8782,0x8783, +0xc6f7,0xd8ac,0xd4eb,0xe0e6,0xcac9,0x8784,0x8785,0x8786, +0x8787,0xe0e5,0x8788,0x8789,0x878a,0x878b,0xb8c1,0x878c, +0x878d,0x878e,0x878f,0xe0e7,0xe0e8,0x8790,0x8791,0x8792, +0x8793,0x8794,0x8795,0x8796,0x8797,0xe0e9,0xe0e3,0x8798, +0x8799,0x879a,0x879b,0x879c,0x879d,0x879e,0xbabf,0xcce7, +0x879f,0x87a0,0x87a1,0xe0ea,0x87a2,0x87a3,0x87a4,0x87a5, +0x87a6,0x87a7,0x87a8,0x87a9,0x87aa,0x87ab,0x87ac,0x87ad, +0x87ae,0x87af,0x87b0,0xcff9,0x87b1,0x87b2,0x87b3,0x87b4, +0x87b5,0x87b6,0x87b7,0x87b8,0x87b9,0x87ba,0x87bb,0xe0eb, +0x87bc,0x87bd,0x87be,0x87bf,0x87c0,0x87c1,0x87c2,0xc8c2, +0x87c3,0x87c4,0x87c5,0x87c6,0xbdc0,0x87c7,0x87c8,0x87c9, +0x87ca,0x87cb,0x87cc,0x87cd,0x87ce,0x87cf,0x87d0,0x87d1, +0x87d2,0x87d3,0xc4d2,0x87d4,0x87d5,0x87d6,0x87d7,0x87d8, +0x87d9,0x87da,0x87db,0x87dc,0xe0ec,0x87dd,0x87de,0xe0ed, +0x87df,0x87e0,0xc7f4,0xcbc4,0x87e1,0xe0ee,0xbbd8,0xd8b6, +0xd2f2,0xe0ef,0xcdc5,0x87e2,0xb6da,0x87e3,0x87e4,0x87e5, +0x87e6,0x87e7,0x87e8,0xe0f1,0x87e9,0xd4b0,0x87ea,0x87eb, +0xc0a7,0xb4d1,0x87ec,0x87ed,0xcea7,0xe0f0,0x87ee,0x87ef, +0x87f0,0xe0f2,0xb9cc,0x87f1,0x87f2,0xb9fa,0xcdbc,0xe0f3, +0x87f3,0x87f4,0x87f5,0xc6d4,0xe0f4,0x87f6,0xd4b2,0x87f7, +0xc8a6,0xe0f6,0xe0f5,0x87f8,0x87f9,0x87fa,0x87fb,0x87fc, +0x87fd,0x87fe,0x8840,0x8841,0x8842,0x8843,0x8844,0x8845, +0x8846,0x8847,0x8848,0x8849,0xe0f7,0x884a,0x884b,0xcdc1, +0x884c,0x884d,0x884e,0xcaa5,0x884f,0x8850,0x8851,0x8852, +0xd4da,0xdbd7,0xdbd9,0x8853,0xdbd8,0xb9e7,0xdbdc,0xdbdd, +0xb5d8,0x8854,0x8855,0xdbda,0x8856,0x8857,0x8858,0x8859, +0x885a,0xdbdb,0xb3a1,0xdbdf,0x885b,0x885c,0xbbf8,0x885d, +0xd6b7,0x885e,0xdbe0,0x885f,0x8860,0x8861,0x8862,0xbef9, +0x8863,0x8864,0xb7bb,0x8865,0xdbd0,0xccae,0xbfb2,0xbbb5, +0xd7f8,0xbfd3,0x8866,0x8867,0x8868,0x8869,0x886a,0xbfe9, +0x886b,0x886c,0xbce1,0xccb3,0xdbde,0xb0d3,0xceeb,0xb7d8, +0xd7b9,0xc6c2,0x886d,0x886e,0xc0a4,0x886f,0xccb9,0x8870, +0xdbe7,0xdbe1,0xc6ba,0xdbe3,0x8871,0xdbe8,0x8872,0xc5f7, +0x8873,0x8874,0x8875,0xdbea,0x8876,0x8877,0xdbe9,0xbfc0, +0x8878,0x8879,0x887a,0xdbe6,0xdbe5,0x887b,0x887c,0x887d, +0x887e,0x8880,0xb4b9,0xc0ac,0xc2a2,0xdbe2,0xdbe4,0x8881, +0x8882,0x8883,0x8884,0xd0cd,0xdbed,0x8885,0x8886,0x8887, +0x8888,0x8889,0xc0dd,0xdbf2,0x888a,0x888b,0x888c,0x888d, +0x888e,0x888f,0x8890,0xb6e2,0x8891,0x8892,0x8893,0x8894, +0xdbf3,0xdbd2,0xb9b8,0xd4ab,0xdbec,0x8895,0xbfd1,0xdbf0, +0x8896,0xdbd1,0x8897,0xb5e6,0x8898,0xdbeb,0xbfe5,0x8899, +0x889a,0x889b,0xdbee,0x889c,0xdbf1,0x889d,0x889e,0x889f, +0xdbf9,0x88a0,0x88a1,0x88a2,0x88a3,0x88a4,0x88a5,0x88a6, +0x88a7,0x88a8,0xb9a1,0xb0a3,0x88a9,0x88aa,0x88ab,0x88ac, +0x88ad,0x88ae,0x88af,0xc2f1,0x88b0,0x88b1,0xb3c7,0xdbef, +0x88b2,0x88b3,0xdbf8,0x88b4,0xc6d2,0xdbf4,0x88b5,0x88b6, +0xdbf5,0xdbf7,0xdbf6,0x88b7,0x88b8,0xdbfe,0x88b9,0xd3f2, +0xb2ba,0x88ba,0x88bb,0x88bc,0xdbfd,0x88bd,0x88be,0x88bf, +0x88c0,0x88c1,0x88c2,0x88c3,0x88c4,0xdca4,0x88c5,0xdbfb, +0x88c6,0x88c7,0x88c8,0x88c9,0xdbfa,0x88ca,0x88cb,0x88cc, +0xdbfc,0xc5e0,0xbbf9,0x88cd,0x88ce,0xdca3,0x88cf,0x88d0, +0xdca5,0x88d1,0xccc3,0x88d2,0x88d3,0x88d4,0xb6d1,0xddc0, +0x88d5,0x88d6,0x88d7,0xdca1,0x88d8,0xdca2,0x88d9,0x88da, +0x88db,0xc7b5,0x88dc,0x88dd,0x88de,0xb6e9,0x88df,0x88e0, +0x88e1,0xdca7,0x88e2,0x88e3,0x88e4,0x88e5,0xdca6,0x88e6, +0xdca9,0xb1a4,0x88e7,0x88e8,0xb5cc,0x88e9,0x88ea,0x88eb, +0x88ec,0x88ed,0xbfb0,0x88ee,0x88ef,0x88f0,0x88f1,0x88f2, +0xd1df,0x88f3,0x88f4,0x88f5,0x88f6,0xb6c2,0x88f7,0x88f8, +0x88f9,0x88fa,0x88fb,0x88fc,0x88fd,0x88fe,0x8940,0x8941, +0x8942,0x8943,0x8944,0x8945,0xdca8,0x8946,0x8947,0x8948, +0x8949,0x894a,0x894b,0x894c,0xcbfa,0xebf3,0x894d,0x894e, +0x894f,0xcbdc,0x8950,0x8951,0xcbfe,0x8952,0x8953,0x8954, +0xccc1,0x8955,0x8956,0x8957,0x8958,0x8959,0xc8fb,0x895a, +0x895b,0x895c,0x895d,0x895e,0x895f,0xdcaa,0x8960,0x8961, +0x8962,0x8963,0x8964,0xccee,0xdcab,0x8965,0x8966,0x8967, +0x8968,0x8969,0x896a,0x896b,0x896c,0x896d,0x896e,0x896f, +0x8970,0x8971,0x8972,0x8973,0x8974,0x8975,0xdbd3,0x8976, +0xdcaf,0xdcac,0x8977,0xbeb3,0x8978,0xcafb,0x8979,0x897a, +0x897b,0xdcad,0x897c,0x897d,0x897e,0x8980,0x8981,0x8982, +0x8983,0x8984,0xc9ca,0xc4b9,0x8985,0x8986,0x8987,0x8988, +0x8989,0xc7bd,0xdcae,0x898a,0x898b,0x898c,0xd4f6,0xd0e6, +0x898d,0x898e,0x898f,0x8990,0x8991,0x8992,0x8993,0x8994, +0xc4ab,0xb6d5,0x8995,0x8996,0x8997,0x8998,0x8999,0x899a, +0x899b,0x899c,0x899d,0x899e,0x899f,0x89a0,0x89a1,0x89a2, +0x89a3,0x89a4,0x89a5,0x89a6,0xdbd4,0x89a7,0x89a8,0x89a9, +0x89aa,0xb1da,0x89ab,0x89ac,0x89ad,0xdbd5,0x89ae,0x89af, +0x89b0,0x89b1,0x89b2,0x89b3,0x89b4,0x89b5,0x89b6,0x89b7, +0x89b8,0xdbd6,0x89b9,0x89ba,0x89bb,0xbabe,0x89bc,0x89bd, +0x89be,0x89bf,0x89c0,0x89c1,0x89c2,0x89c3,0x89c4,0x89c5, +0x89c6,0x89c7,0x89c8,0x89c9,0xc8c0,0x89ca,0x89cb,0x89cc, +0x89cd,0x89ce,0x89cf,0xcabf,0xc8c9,0x89d0,0xd7b3,0x89d1, +0xc9f9,0x89d2,0x89d3,0xbfc7,0x89d4,0x89d5,0xbaf8,0x89d6, +0x89d7,0xd2bc,0x89d8,0x89d9,0x89da,0x89db,0x89dc,0x89dd, +0x89de,0x89df,0xe2ba,0x89e0,0xb4a6,0x89e1,0x89e2,0xb1b8, +0x89e3,0x89e4,0x89e5,0x89e6,0x89e7,0xb8b4,0x89e8,0xcfc4, +0x89e9,0x89ea,0x89eb,0x89ec,0xd9e7,0xcfa6,0xcde2,0x89ed, +0x89ee,0xd9ed,0xb6e0,0x89ef,0xd2b9,0x89f0,0x89f1,0xb9bb, +0x89f2,0x89f3,0x89f4,0x89f5,0xe2b9,0xe2b7,0x89f6,0xb4f3, +0x89f7,0xccec,0xccab,0xb7f2,0x89f8,0xd8b2,0xd1eb,0xbabb, +0x89f9,0xcaa7,0x89fa,0x89fb,0xcdb7,0x89fc,0x89fd,0xd2c4, +0xbfe4,0xbcd0,0xb6e1,0x89fe,0xdec5,0x8a40,0x8a41,0x8a42, +0x8a43,0xdec6,0xdbbc,0x8a44,0xd1d9,0x8a45,0x8a46,0xc6e6, +0xc4ce,0xb7ee,0x8a47,0xb7dc,0x8a48,0x8a49,0xbffc,0xd7e0, +0x8a4a,0xc6f5,0x8a4b,0x8a4c,0xb1bc,0xdec8,0xbdb1,0xccd7, +0xdeca,0x8a4d,0xdec9,0x8a4e,0x8a4f,0x8a50,0x8a51,0x8a52, +0xb5ec,0x8a53,0xc9dd,0x8a54,0x8a55,0xb0c2,0x8a56,0x8a57, +0x8a58,0x8a59,0x8a5a,0x8a5b,0x8a5c,0x8a5d,0x8a5e,0x8a5f, +0x8a60,0x8a61,0x8a62,0xc5ae,0xc5ab,0x8a63,0xc4cc,0x8a64, +0xbce9,0xcbfd,0x8a65,0x8a66,0x8a67,0xbac3,0x8a68,0x8a69, +0x8a6a,0xe5f9,0xc8e7,0xe5fa,0xcdfd,0x8a6b,0xd7b1,0xb8be, +0xc2e8,0x8a6c,0xc8d1,0x8a6d,0x8a6e,0xe5fb,0x8a6f,0x8a70, +0x8a71,0x8a72,0xb6ca,0xbccb,0x8a73,0x8a74,0xd1fd,0xe6a1, +0x8a75,0xc3ee,0x8a76,0x8a77,0x8a78,0x8a79,0xe6a4,0x8a7a, +0x8a7b,0x8a7c,0x8a7d,0xe5fe,0xe6a5,0xcdd7,0x8a7e,0x8a80, +0xb7c1,0xe5fc,0xe5fd,0xe6a3,0x8a81,0x8a82,0xc4dd,0xe6a8, +0x8a83,0x8a84,0xe6a7,0x8a85,0x8a86,0x8a87,0x8a88,0x8a89, +0x8a8a,0xc3c3,0x8a8b,0xc6de,0x8a8c,0x8a8d,0xe6aa,0x8a8e, +0x8a8f,0x8a90,0x8a91,0x8a92,0x8a93,0x8a94,0xc4b7,0x8a95, +0x8a96,0x8a97,0xe6a2,0xcabc,0x8a98,0x8a99,0x8a9a,0x8a9b, +0xbde3,0xb9c3,0xe6a6,0xd0d5,0xceaf,0x8a9c,0x8a9d,0xe6a9, +0xe6b0,0x8a9e,0xd2a6,0x8a9f,0xbdaa,0xe6ad,0x8aa0,0x8aa1, +0x8aa2,0x8aa3,0x8aa4,0xe6af,0x8aa5,0xc0d1,0x8aa6,0x8aa7, +0xd2cc,0x8aa8,0x8aa9,0x8aaa,0xbca7,0x8aab,0x8aac,0x8aad, +0x8aae,0x8aaf,0x8ab0,0x8ab1,0x8ab2,0x8ab3,0x8ab4,0x8ab5, +0x8ab6,0xe6b1,0x8ab7,0xd2f6,0x8ab8,0x8ab9,0x8aba,0xd7cb, +0x8abb,0xcdfe,0x8abc,0xcdde,0xc2a6,0xe6ab,0xe6ac,0xbdbf, +0xe6ae,0xe6b3,0x8abd,0x8abe,0xe6b2,0x8abf,0x8ac0,0x8ac1, +0x8ac2,0xe6b6,0x8ac3,0xe6b8,0x8ac4,0x8ac5,0x8ac6,0x8ac7, +0xc4ef,0x8ac8,0x8ac9,0x8aca,0xc4c8,0x8acb,0x8acc,0xbeea, +0xc9ef,0x8acd,0x8ace,0xe6b7,0x8acf,0xb6f0,0x8ad0,0x8ad1, +0x8ad2,0xc3e4,0x8ad3,0x8ad4,0x8ad5,0x8ad6,0x8ad7,0x8ad8, +0x8ad9,0xd3e9,0xe6b4,0x8ada,0xe6b5,0x8adb,0xc8a2,0x8adc, +0x8add,0x8ade,0x8adf,0x8ae0,0xe6bd,0x8ae1,0x8ae2,0x8ae3, +0xe6b9,0x8ae4,0x8ae5,0x8ae6,0x8ae7,0x8ae8,0xc6c5,0x8ae9, +0x8aea,0xcdf1,0xe6bb,0x8aeb,0x8aec,0x8aed,0x8aee,0x8aef, +0x8af0,0x8af1,0x8af2,0x8af3,0x8af4,0xe6bc,0x8af5,0x8af6, +0x8af7,0x8af8,0xbbe9,0x8af9,0x8afa,0x8afb,0x8afc,0x8afd, +0x8afe,0x8b40,0xe6be,0x8b41,0x8b42,0x8b43,0x8b44,0xe6ba, +0x8b45,0x8b46,0xc0b7,0x8b47,0x8b48,0x8b49,0x8b4a,0x8b4b, +0x8b4c,0x8b4d,0x8b4e,0x8b4f,0xd3a4,0xe6bf,0xc9f4,0xe6c3, +0x8b50,0x8b51,0xe6c4,0x8b52,0x8b53,0x8b54,0x8b55,0xd0f6, +0x8b56,0x8b57,0x8b58,0x8b59,0x8b5a,0x8b5b,0x8b5c,0x8b5d, +0x8b5e,0x8b5f,0x8b60,0x8b61,0x8b62,0x8b63,0x8b64,0x8b65, +0x8b66,0x8b67,0xc3bd,0x8b68,0x8b69,0x8b6a,0x8b6b,0x8b6c, +0x8b6d,0x8b6e,0xc3c4,0xe6c2,0x8b6f,0x8b70,0x8b71,0x8b72, +0x8b73,0x8b74,0x8b75,0x8b76,0x8b77,0x8b78,0x8b79,0x8b7a, +0x8b7b,0x8b7c,0xe6c1,0x8b7d,0x8b7e,0x8b80,0x8b81,0x8b82, +0x8b83,0x8b84,0xe6c7,0xcfb1,0x8b85,0xebf4,0x8b86,0x8b87, +0xe6ca,0x8b88,0x8b89,0x8b8a,0x8b8b,0x8b8c,0xe6c5,0x8b8d, +0x8b8e,0xbcde,0xc9a9,0x8b8f,0x8b90,0x8b91,0x8b92,0x8b93, +0x8b94,0xbcb5,0x8b95,0x8b96,0xcfd3,0x8b97,0x8b98,0x8b99, +0x8b9a,0x8b9b,0xe6c8,0x8b9c,0xe6c9,0x8b9d,0xe6ce,0x8b9e, +0xe6d0,0x8b9f,0x8ba0,0x8ba1,0xe6d1,0x8ba2,0x8ba3,0x8ba4, +0xe6cb,0xb5d5,0x8ba5,0xe6cc,0x8ba6,0x8ba7,0xe6cf,0x8ba8, +0x8ba9,0xc4db,0x8baa,0xe6c6,0x8bab,0x8bac,0x8bad,0x8bae, +0x8baf,0xe6cd,0x8bb0,0x8bb1,0x8bb2,0x8bb3,0x8bb4,0x8bb5, +0x8bb6,0x8bb7,0x8bb8,0x8bb9,0x8bba,0x8bbb,0x8bbc,0x8bbd, +0x8bbe,0x8bbf,0x8bc0,0x8bc1,0x8bc2,0x8bc3,0x8bc4,0x8bc5, +0x8bc6,0xe6d2,0x8bc7,0x8bc8,0x8bc9,0x8bca,0x8bcb,0x8bcc, +0x8bcd,0x8bce,0x8bcf,0x8bd0,0x8bd1,0x8bd2,0xe6d4,0xe6d3, +0x8bd3,0x8bd4,0x8bd5,0x8bd6,0x8bd7,0x8bd8,0x8bd9,0x8bda, +0x8bdb,0x8bdc,0x8bdd,0x8bde,0x8bdf,0x8be0,0x8be1,0x8be2, +0x8be3,0x8be4,0x8be5,0x8be6,0x8be7,0x8be8,0x8be9,0x8bea, +0x8beb,0x8bec,0xe6d5,0x8bed,0xd9f8,0x8bee,0x8bef,0xe6d6, +0x8bf0,0x8bf1,0x8bf2,0x8bf3,0x8bf4,0x8bf5,0x8bf6,0x8bf7, +0xe6d7,0x8bf8,0x8bf9,0x8bfa,0x8bfb,0x8bfc,0x8bfd,0x8bfe, +0x8c40,0x8c41,0x8c42,0x8c43,0x8c44,0x8c45,0x8c46,0x8c47, +0xd7d3,0xe6dd,0x8c48,0xe6de,0xbfd7,0xd4d0,0x8c49,0xd7d6, +0xb4e6,0xcbef,0xe6da,0xd8c3,0xd7ce,0xd0a2,0x8c4a,0xc3cf, +0x8c4b,0x8c4c,0xe6df,0xbcbe,0xb9c2,0xe6db,0xd1a7,0x8c4d, +0x8c4e,0xbaa2,0xc2cf,0x8c4f,0xd8ab,0x8c50,0x8c51,0x8c52, +0xcaeb,0xe5ee,0x8c53,0xe6dc,0x8c54,0xb7f5,0x8c55,0x8c56, +0x8c57,0x8c58,0xc8e6,0x8c59,0x8c5a,0xc4f5,0x8c5b,0x8c5c, +0xe5b2,0xc4fe,0x8c5d,0xcbfc,0xe5b3,0xd5ac,0x8c5e,0xd3ee, +0xcad8,0xb0b2,0x8c5f,0xcbce,0xcdea,0x8c60,0x8c61,0xbaea, +0x8c62,0x8c63,0x8c64,0xe5b5,0x8c65,0xe5b4,0x8c66,0xd7da, +0xb9d9,0xd6e6,0xb6a8,0xcdf0,0xd2cb,0xb1a6,0xcab5,0x8c67, +0xb3e8,0xc9f3,0xbfcd,0xd0fb,0xcad2,0xe5b6,0xbbc2,0x8c68, +0x8c69,0x8c6a,0xcfdc,0xb9ac,0x8c6b,0x8c6c,0x8c6d,0x8c6e, +0xd4d7,0x8c6f,0x8c70,0xbaa6,0xd1e7,0xcffc,0xbcd2,0x8c71, +0xe5b7,0xc8dd,0x8c72,0x8c73,0x8c74,0xbfed,0xb1f6,0xcbde, +0x8c75,0x8c76,0xbcc5,0x8c77,0xbcc4,0xd2fa,0xc3dc,0xbfdc, +0x8c78,0x8c79,0x8c7a,0x8c7b,0xb8bb,0x8c7c,0x8c7d,0x8c7e, +0xc3c2,0x8c80,0xbaae,0xd4a2,0x8c81,0x8c82,0x8c83,0x8c84, +0x8c85,0x8c86,0x8c87,0x8c88,0x8c89,0xc7de,0xc4af,0xb2ec, +0x8c8a,0xb9d1,0x8c8b,0x8c8c,0xe5bb,0xc1c8,0x8c8d,0x8c8e, +0xd5af,0x8c8f,0x8c90,0x8c91,0x8c92,0x8c93,0xe5bc,0x8c94, +0xe5be,0x8c95,0x8c96,0x8c97,0x8c98,0x8c99,0x8c9a,0x8c9b, +0xb4e7,0xb6d4,0xcbc2,0xd1b0,0xb5bc,0x8c9c,0x8c9d,0xcad9, +0x8c9e,0xb7e2,0x8c9f,0x8ca0,0xc9e4,0x8ca1,0xbdab,0x8ca2, +0x8ca3,0xcebe,0xd7f0,0x8ca4,0x8ca5,0x8ca6,0x8ca7,0xd0a1, +0x8ca8,0xc9d9,0x8ca9,0x8caa,0xb6fb,0xe6d8,0xbce2,0x8cab, +0xb3be,0x8cac,0xc9d0,0x8cad,0xe6d9,0xb3a2,0x8cae,0x8caf, +0x8cb0,0x8cb1,0xdecc,0x8cb2,0xd3c8,0xdecd,0x8cb3,0xd2a2, +0x8cb4,0x8cb5,0x8cb6,0x8cb7,0xdece,0x8cb8,0x8cb9,0x8cba, +0x8cbb,0xbecd,0x8cbc,0x8cbd,0xdecf,0x8cbe,0x8cbf,0x8cc0, +0xcaac,0xd2fc,0xb3df,0xe5ea,0xc4e1,0xbea1,0xceb2,0xc4f2, +0xbed6,0xc6a8,0xb2e3,0x8cc1,0x8cc2,0xbed3,0x8cc3,0x8cc4, +0xc7fc,0xcceb,0xbdec,0xcedd,0x8cc5,0x8cc6,0xcaba,0xc6c1, +0xe5ec,0xd0bc,0x8cc7,0x8cc8,0x8cc9,0xd5b9,0x8cca,0x8ccb, +0x8ccc,0xe5ed,0x8ccd,0x8cce,0x8ccf,0x8cd0,0xcaf4,0x8cd1, +0xcdc0,0xc2c5,0x8cd2,0xe5ef,0x8cd3,0xc2c4,0xe5f0,0x8cd4, +0x8cd5,0x8cd6,0x8cd7,0x8cd8,0x8cd9,0x8cda,0xe5f8,0xcdcd, +0x8cdb,0xc9bd,0x8cdc,0x8cdd,0x8cde,0x8cdf,0x8ce0,0x8ce1, +0x8ce2,0xd2d9,0xe1a8,0x8ce3,0x8ce4,0x8ce5,0x8ce6,0xd3ec, +0x8ce7,0xcbea,0xc6f1,0x8ce8,0x8ce9,0x8cea,0x8ceb,0x8cec, +0xe1ac,0x8ced,0x8cee,0x8cef,0xe1a7,0xe1a9,0x8cf0,0x8cf1, +0xe1aa,0xe1af,0x8cf2,0x8cf3,0xb2ed,0x8cf4,0xe1ab,0xb8da, +0xe1ad,0xe1ae,0xe1b0,0xb5ba,0xe1b1,0x8cf5,0x8cf6,0x8cf7, +0x8cf8,0x8cf9,0xe1b3,0xe1b8,0x8cfa,0x8cfb,0x8cfc,0x8cfd, +0x8cfe,0xd1d2,0x8d40,0xe1b6,0xe1b5,0xc1eb,0x8d41,0x8d42, +0x8d43,0xe1b7,0x8d44,0xd4c0,0x8d45,0xe1b2,0x8d46,0xe1ba, +0xb0b6,0x8d47,0x8d48,0x8d49,0x8d4a,0xe1b4,0x8d4b,0xbff9, +0x8d4c,0xe1b9,0x8d4d,0x8d4e,0xe1bb,0x8d4f,0x8d50,0x8d51, +0x8d52,0x8d53,0x8d54,0xe1be,0x8d55,0x8d56,0x8d57,0x8d58, +0x8d59,0x8d5a,0xe1bc,0x8d5b,0x8d5c,0x8d5d,0x8d5e,0x8d5f, +0x8d60,0xd6c5,0x8d61,0x8d62,0x8d63,0x8d64,0x8d65,0x8d66, +0x8d67,0xcfbf,0x8d68,0x8d69,0xe1bd,0xe1bf,0xc2cd,0x8d6a, +0xb6eb,0x8d6b,0xd3f8,0x8d6c,0x8d6d,0xc7cd,0x8d6e,0x8d6f, +0xb7e5,0x8d70,0x8d71,0x8d72,0x8d73,0x8d74,0x8d75,0x8d76, +0x8d77,0x8d78,0x8d79,0xbefe,0x8d7a,0x8d7b,0x8d7c,0x8d7d, +0x8d7e,0x8d80,0xe1c0,0xe1c1,0x8d81,0x8d82,0xe1c7,0xb3e7, +0x8d83,0x8d84,0x8d85,0x8d86,0x8d87,0x8d88,0xc6e9,0x8d89, +0x8d8a,0x8d8b,0x8d8c,0x8d8d,0xb4de,0x8d8e,0xd1c2,0x8d8f, +0x8d90,0x8d91,0x8d92,0xe1c8,0x8d93,0x8d94,0xe1c6,0x8d95, +0x8d96,0x8d97,0x8d98,0x8d99,0xe1c5,0x8d9a,0xe1c3,0xe1c2, +0x8d9b,0xb1c0,0x8d9c,0x8d9d,0x8d9e,0xd5b8,0xe1c4,0x8d9f, +0x8da0,0x8da1,0x8da2,0x8da3,0xe1cb,0x8da4,0x8da5,0x8da6, +0x8da7,0x8da8,0x8da9,0x8daa,0x8dab,0xe1cc,0xe1ca,0x8dac, +0x8dad,0x8dae,0x8daf,0x8db0,0x8db1,0x8db2,0x8db3,0xeffa, +0x8db4,0x8db5,0xe1d3,0xe1d2,0xc7b6,0x8db6,0x8db7,0x8db8, +0x8db9,0x8dba,0x8dbb,0x8dbc,0x8dbd,0x8dbe,0x8dbf,0x8dc0, +0xe1c9,0x8dc1,0x8dc2,0xe1ce,0x8dc3,0xe1d0,0x8dc4,0x8dc5, +0x8dc6,0x8dc7,0x8dc8,0x8dc9,0x8dca,0x8dcb,0x8dcc,0x8dcd, +0x8dce,0xe1d4,0x8dcf,0xe1d1,0xe1cd,0x8dd0,0x8dd1,0xe1cf, +0x8dd2,0x8dd3,0x8dd4,0x8dd5,0xe1d5,0x8dd6,0x8dd7,0x8dd8, +0x8dd9,0x8dda,0x8ddb,0x8ddc,0x8ddd,0x8dde,0x8ddf,0x8de0, +0x8de1,0x8de2,0xe1d6,0x8de3,0x8de4,0x8de5,0x8de6,0x8de7, +0x8de8,0x8de9,0x8dea,0x8deb,0x8dec,0x8ded,0x8dee,0x8def, +0x8df0,0x8df1,0x8df2,0x8df3,0x8df4,0x8df5,0x8df6,0x8df7, +0x8df8,0xe1d7,0x8df9,0x8dfa,0x8dfb,0xe1d8,0x8dfc,0x8dfd, +0x8dfe,0x8e40,0x8e41,0x8e42,0x8e43,0x8e44,0x8e45,0x8e46, +0x8e47,0x8e48,0x8e49,0x8e4a,0x8e4b,0x8e4c,0x8e4d,0x8e4e, +0x8e4f,0x8e50,0x8e51,0x8e52,0x8e53,0x8e54,0x8e55,0xe1da, +0x8e56,0x8e57,0x8e58,0x8e59,0x8e5a,0x8e5b,0x8e5c,0x8e5d, +0x8e5e,0x8e5f,0x8e60,0x8e61,0x8e62,0xe1db,0x8e63,0x8e64, +0x8e65,0x8e66,0x8e67,0x8e68,0x8e69,0xcea1,0x8e6a,0x8e6b, +0x8e6c,0x8e6d,0x8e6e,0x8e6f,0x8e70,0x8e71,0x8e72,0x8e73, +0x8e74,0x8e75,0x8e76,0xe7dd,0x8e77,0xb4a8,0xd6dd,0x8e78, +0x8e79,0xd1b2,0xb3b2,0x8e7a,0x8e7b,0xb9a4,0xd7f3,0xc7c9, +0xbede,0xb9ae,0x8e7c,0xced7,0x8e7d,0x8e7e,0xb2ee,0xdbcf, +0x8e80,0xbcba,0xd2d1,0xcbc8,0xb0cd,0x8e81,0x8e82,0xcfef, +0x8e83,0x8e84,0x8e85,0x8e86,0x8e87,0xd9e3,0xbded,0x8e88, +0x8e89,0xb1d2,0xcad0,0xb2bc,0x8e8a,0xcba7,0xb7ab,0x8e8b, +0xcaa6,0x8e8c,0x8e8d,0x8e8e,0xcfa3,0x8e8f,0x8e90,0xe0f8, +0xd5ca,0xe0fb,0x8e91,0x8e92,0xe0fa,0xc5c1,0xccfb,0x8e93, +0xc1b1,0xe0f9,0xd6e3,0xb2af,0xd6c4,0xb5db,0x8e94,0x8e95, +0x8e96,0x8e97,0x8e98,0x8e99,0x8e9a,0x8e9b,0xb4f8,0xd6a1, +0x8e9c,0x8e9d,0x8e9e,0x8e9f,0x8ea0,0xcfaf,0xb0ef,0x8ea1, +0x8ea2,0xe0fc,0x8ea3,0x8ea4,0x8ea5,0x8ea6,0x8ea7,0xe1a1, +0xb3a3,0x8ea8,0x8ea9,0xe0fd,0xe0fe,0xc3b1,0x8eaa,0x8eab, +0x8eac,0x8ead,0xc3dd,0x8eae,0xe1a2,0xb7f9,0x8eaf,0x8eb0, +0x8eb1,0x8eb2,0x8eb3,0x8eb4,0xbbcf,0x8eb5,0x8eb6,0x8eb7, +0x8eb8,0x8eb9,0x8eba,0x8ebb,0xe1a3,0xc4bb,0x8ebc,0x8ebd, +0x8ebe,0x8ebf,0x8ec0,0xe1a4,0x8ec1,0x8ec2,0xe1a5,0x8ec3, +0x8ec4,0xe1a6,0xb4b1,0x8ec5,0x8ec6,0x8ec7,0x8ec8,0x8ec9, +0x8eca,0x8ecb,0x8ecc,0x8ecd,0x8ece,0x8ecf,0x8ed0,0x8ed1, +0x8ed2,0x8ed3,0xb8c9,0xc6bd,0xc4ea,0x8ed4,0xb2a2,0x8ed5, +0xd0d2,0x8ed6,0xe7db,0xbbc3,0xd3d7,0xd3c4,0x8ed7,0xb9e3, +0xe2cf,0x8ed8,0x8ed9,0x8eda,0xd7af,0x8edb,0xc7ec,0xb1d3, +0x8edc,0x8edd,0xb4b2,0xe2d1,0x8ede,0x8edf,0x8ee0,0xd0f2, +0xc2ae,0xe2d0,0x8ee1,0xbfe2,0xd3a6,0xb5d7,0xe2d2,0xb5ea, +0x8ee2,0xc3ed,0xb8fd,0x8ee3,0xb8ae,0x8ee4,0xc5d3,0xb7cf, +0xe2d4,0x8ee5,0x8ee6,0x8ee7,0x8ee8,0xe2d3,0xb6c8,0xd7f9, +0x8ee9,0x8eea,0x8eeb,0x8eec,0x8eed,0xcda5,0x8eee,0x8eef, +0x8ef0,0x8ef1,0x8ef2,0xe2d8,0x8ef3,0xe2d6,0xcafc,0xbfb5, +0xd3b9,0xe2d5,0x8ef4,0x8ef5,0x8ef6,0x8ef7,0xe2d7,0x8ef8, +0x8ef9,0x8efa,0x8efb,0x8efc,0x8efd,0x8efe,0x8f40,0x8f41, +0x8f42,0xc1ae,0xc0c8,0x8f43,0x8f44,0x8f45,0x8f46,0x8f47, +0x8f48,0xe2db,0xe2da,0xc0aa,0x8f49,0x8f4a,0xc1ce,0x8f4b, +0x8f4c,0x8f4d,0x8f4e,0xe2dc,0x8f4f,0x8f50,0x8f51,0x8f52, +0x8f53,0x8f54,0x8f55,0x8f56,0x8f57,0x8f58,0x8f59,0x8f5a, +0xe2dd,0x8f5b,0xe2de,0x8f5c,0x8f5d,0x8f5e,0x8f5f,0x8f60, +0x8f61,0x8f62,0x8f63,0x8f64,0xdbc8,0x8f65,0xd1d3,0xcda2, +0x8f66,0x8f67,0xbda8,0x8f68,0x8f69,0x8f6a,0xdec3,0xd8a5, +0xbfaa,0xdbcd,0xd2ec,0xc6fa,0xc5aa,0x8f6b,0x8f6c,0x8f6d, +0xdec4,0x8f6e,0xb1d7,0xdfae,0x8f6f,0x8f70,0x8f71,0xcabd, +0x8f72,0xdfb1,0x8f73,0xb9ad,0x8f74,0xd2fd,0x8f75,0xb8a5, +0xbaeb,0x8f76,0x8f77,0xb3da,0x8f78,0x8f79,0x8f7a,0xb5dc, +0xd5c5,0x8f7b,0x8f7c,0x8f7d,0x8f7e,0xc3d6,0xcfd2,0xbba1, +0x8f80,0xe5f3,0xe5f2,0x8f81,0x8f82,0xe5f4,0x8f83,0xcde4, +0x8f84,0xc8f5,0x8f85,0x8f86,0x8f87,0x8f88,0x8f89,0x8f8a, +0x8f8b,0xb5af,0xc7bf,0x8f8c,0xe5f6,0x8f8d,0x8f8e,0x8f8f, +0xecb0,0x8f90,0x8f91,0x8f92,0x8f93,0x8f94,0x8f95,0x8f96, +0x8f97,0x8f98,0x8f99,0x8f9a,0x8f9b,0x8f9c,0x8f9d,0x8f9e, +0xe5e6,0x8f9f,0xb9e9,0xb5b1,0x8fa0,0xc2bc,0xe5e8,0xe5e7, +0xe5e9,0x8fa1,0x8fa2,0x8fa3,0x8fa4,0xd2cd,0x8fa5,0x8fa6, +0x8fa7,0xe1ea,0xd0ce,0x8fa8,0xcdae,0x8fa9,0xd1e5,0x8faa, +0x8fab,0xb2ca,0xb1eb,0x8fac,0xb1f2,0xc5ed,0x8fad,0x8fae, +0xd5c3,0xd3b0,0x8faf,0xe1dc,0x8fb0,0x8fb1,0x8fb2,0xe1dd, +0x8fb3,0xd2db,0x8fb4,0xb3b9,0xb1cb,0x8fb5,0x8fb6,0x8fb7, +0xcdf9,0xd5f7,0xe1de,0x8fb8,0xbeb6,0xb4fd,0x8fb9,0xe1df, +0xbadc,0xe1e0,0xbbb2,0xc2c9,0xe1e1,0x8fba,0x8fbb,0x8fbc, +0xd0ec,0x8fbd,0xcdbd,0x8fbe,0x8fbf,0xe1e2,0x8fc0,0xb5c3, +0xc5c7,0xe1e3,0x8fc1,0x8fc2,0xe1e4,0x8fc3,0x8fc4,0x8fc5, +0x8fc6,0xd3f9,0x8fc7,0x8fc8,0x8fc9,0x8fca,0x8fcb,0x8fcc, +0xe1e5,0x8fcd,0xd1ad,0x8fce,0x8fcf,0xe1e6,0xcea2,0x8fd0, +0x8fd1,0x8fd2,0x8fd3,0x8fd4,0x8fd5,0xe1e7,0x8fd6,0xb5c2, +0x8fd7,0x8fd8,0x8fd9,0x8fda,0xe1e8,0xbbd5,0x8fdb,0x8fdc, +0x8fdd,0x8fde,0x8fdf,0xd0c4,0xe2e0,0xb1d8,0xd2e4,0x8fe0, +0x8fe1,0xe2e1,0x8fe2,0x8fe3,0xbcc9,0xc8cc,0x8fe4,0xe2e3, +0xecfe,0xecfd,0xdfaf,0x8fe5,0x8fe6,0x8fe7,0xe2e2,0xd6be, +0xcdfc,0xc3a6,0x8fe8,0x8fe9,0x8fea,0xe3c3,0x8feb,0x8fec, +0xd6d2,0xe2e7,0x8fed,0x8fee,0xe2e8,0x8fef,0x8ff0,0xd3c7, +0x8ff1,0x8ff2,0xe2ec,0xbfec,0x8ff3,0xe2ed,0xe2e5,0x8ff4, +0x8ff5,0xb3c0,0x8ff6,0x8ff7,0x8ff8,0xc4ee,0x8ff9,0x8ffa, +0xe2ee,0x8ffb,0x8ffc,0xd0c3,0x8ffd,0xbaf6,0xe2e9,0xb7de, +0xbbb3,0xccac,0xcbcb,0xe2e4,0xe2e6,0xe2ea,0xe2eb,0x8ffe, +0x9040,0x9041,0xe2f7,0x9042,0x9043,0xe2f4,0xd4f5,0xe2f3, +0x9044,0x9045,0xc5ad,0x9046,0xd5fa,0xc5c2,0xb2c0,0x9047, +0x9048,0xe2ef,0x9049,0xe2f2,0xc1af,0xcbbc,0x904a,0x904b, +0xb5a1,0xe2f9,0x904c,0x904d,0x904e,0xbcb1,0xe2f1,0xd0d4, +0xd4b9,0xe2f5,0xb9d6,0xe2f6,0x904f,0x9050,0x9051,0xc7d3, +0x9052,0x9053,0x9054,0x9055,0x9056,0xe2f0,0x9057,0x9058, +0x9059,0x905a,0x905b,0xd7dc,0xeda1,0x905c,0x905d,0xe2f8, +0x905e,0xeda5,0xe2fe,0xcad1,0x905f,0x9060,0x9061,0x9062, +0x9063,0x9064,0x9065,0xc1b5,0x9066,0xbbd0,0x9067,0x9068, +0xbfd6,0x9069,0xbae3,0x906a,0x906b,0xcba1,0x906c,0x906d, +0x906e,0xeda6,0xeda3,0x906f,0x9070,0xeda2,0x9071,0x9072, +0x9073,0x9074,0xbbd6,0xeda7,0xd0f4,0x9075,0x9076,0xeda4, +0xbade,0xb6f7,0xe3a1,0xb6b2,0xccf1,0xb9a7,0x9077,0xcfa2, +0xc7a1,0x9078,0x9079,0xbfd2,0x907a,0x907b,0xb6f1,0x907c, +0xe2fa,0xe2fb,0xe2fd,0xe2fc,0xc4d5,0xe3a2,0x907d,0xd3c1, +0x907e,0x9080,0x9081,0xe3a7,0xc7c4,0x9082,0x9083,0x9084, +0x9085,0xcfa4,0x9086,0x9087,0xe3a9,0xbab7,0x9088,0x9089, +0x908a,0x908b,0xe3a8,0x908c,0xbbda,0x908d,0xe3a3,0x908e, +0x908f,0x9090,0xe3a4,0xe3aa,0x9091,0xe3a6,0x9092,0xcef2, +0xd3c6,0x9093,0x9094,0xbbbc,0x9095,0x9096,0xd4c3,0x9097, +0xc4fa,0x9098,0x9099,0xeda8,0xd0fc,0xe3a5,0x909a,0xc3f5, +0x909b,0xe3ad,0xb1af,0x909c,0xe3b2,0x909d,0x909e,0x909f, +0xbcc2,0x90a0,0x90a1,0xe3ac,0xb5bf,0x90a2,0x90a3,0x90a4, +0x90a5,0x90a6,0x90a7,0x90a8,0x90a9,0xc7e9,0xe3b0,0x90aa, +0x90ab,0x90ac,0xbeaa,0xcdef,0x90ad,0x90ae,0x90af,0x90b0, +0x90b1,0xbbf3,0x90b2,0x90b3,0x90b4,0xcce8,0x90b5,0x90b6, +0xe3af,0x90b7,0xe3b1,0x90b8,0xcfa7,0xe3ae,0x90b9,0xcea9, +0xbbdd,0x90ba,0x90bb,0x90bc,0x90bd,0x90be,0xb5eb,0xbee5, +0xb2d2,0xb3cd,0x90bf,0xb1b9,0xe3ab,0xb2d1,0xb5ac,0xb9df, +0xb6e8,0x90c0,0x90c1,0xcfeb,0xe3b7,0x90c2,0xbbcc,0x90c3, +0x90c4,0xc8c7,0xd0ca,0x90c5,0x90c6,0x90c7,0x90c8,0x90c9, +0xe3b8,0xb3ee,0x90ca,0x90cb,0x90cc,0x90cd,0xeda9,0x90ce, +0xd3fa,0xd3e4,0x90cf,0x90d0,0x90d1,0xedaa,0xe3b9,0xd2e2, +0x90d2,0x90d3,0x90d4,0x90d5,0x90d6,0xe3b5,0x90d7,0x90d8, +0x90d9,0x90da,0xd3de,0x90db,0x90dc,0x90dd,0x90de,0xb8d0, +0xe3b3,0x90df,0x90e0,0xe3b6,0xb7df,0x90e1,0xe3b4,0xc0a2, +0x90e2,0x90e3,0x90e4,0xe3ba,0x90e5,0x90e6,0x90e7,0x90e8, +0x90e9,0x90ea,0x90eb,0x90ec,0x90ed,0x90ee,0x90ef,0x90f0, +0x90f1,0x90f2,0x90f3,0x90f4,0x90f5,0x90f6,0x90f7,0xd4b8, +0x90f8,0x90f9,0x90fa,0x90fb,0x90fc,0x90fd,0x90fe,0x9140, +0xb4c8,0x9141,0xe3bb,0x9142,0xbbc5,0x9143,0xc9f7,0x9144, +0x9145,0xc9e5,0x9146,0x9147,0x9148,0xc4bd,0x9149,0x914a, +0x914b,0x914c,0x914d,0x914e,0x914f,0xedab,0x9150,0x9151, +0x9152,0x9153,0xc2fd,0x9154,0x9155,0x9156,0x9157,0xbbdb, +0xbfae,0x9158,0x9159,0x915a,0x915b,0x915c,0x915d,0x915e, +0xcebf,0x915f,0x9160,0x9161,0x9162,0xe3bc,0x9163,0xbfb6, +0x9164,0x9165,0x9166,0x9167,0x9168,0x9169,0x916a,0x916b, +0x916c,0x916d,0x916e,0x916f,0x9170,0x9171,0x9172,0x9173, +0x9174,0x9175,0x9176,0xb1ef,0x9177,0x9178,0xd4f7,0x9179, +0x917a,0x917b,0x917c,0x917d,0xe3be,0x917e,0x9180,0x9181, +0x9182,0x9183,0x9184,0x9185,0x9186,0xedad,0x9187,0x9188, +0x9189,0x918a,0x918b,0x918c,0x918d,0x918e,0x918f,0xe3bf, +0xbaa9,0xedac,0x9190,0x9191,0xe3bd,0x9192,0x9193,0x9194, +0x9195,0x9196,0x9197,0x9198,0x9199,0x919a,0x919b,0xe3c0, +0x919c,0x919d,0x919e,0x919f,0x91a0,0x91a1,0xbab6,0x91a2, +0x91a3,0x91a4,0xb6ae,0x91a5,0x91a6,0x91a7,0x91a8,0x91a9, +0xd0b8,0x91aa,0xb0c3,0xedae,0x91ab,0x91ac,0x91ad,0x91ae, +0x91af,0xedaf,0xc0c1,0x91b0,0xe3c1,0x91b1,0x91b2,0x91b3, +0x91b4,0x91b5,0x91b6,0x91b7,0x91b8,0x91b9,0x91ba,0x91bb, +0x91bc,0x91bd,0x91be,0x91bf,0x91c0,0x91c1,0xc5b3,0x91c2, +0x91c3,0x91c4,0x91c5,0x91c6,0x91c7,0x91c8,0x91c9,0x91ca, +0x91cb,0x91cc,0x91cd,0x91ce,0x91cf,0xe3c2,0x91d0,0x91d1, +0x91d2,0x91d3,0x91d4,0x91d5,0x91d6,0x91d7,0x91d8,0xdcb2, +0x91d9,0x91da,0x91db,0x91dc,0x91dd,0x91de,0xedb0,0x91df, +0xb8ea,0x91e0,0xceec,0xeaa7,0xd0e7,0xcaf9,0xc8d6,0xcfb7, +0xb3c9,0xced2,0xbde4,0x91e1,0x91e2,0xe3de,0xbbf2,0xeaa8, +0xd5bd,0x91e3,0xc6dd,0xeaa9,0x91e4,0x91e5,0x91e6,0xeaaa, +0x91e7,0xeaac,0xeaab,0x91e8,0xeaae,0xeaad,0x91e9,0x91ea, +0x91eb,0x91ec,0xbdd8,0x91ed,0xeaaf,0x91ee,0xc2be,0x91ef, +0x91f0,0x91f1,0x91f2,0xb4c1,0xb4f7,0x91f3,0x91f4,0xbba7, +0x91f5,0x91f6,0x91f7,0x91f8,0x91f9,0xece6,0xece5,0xb7bf, +0xcbf9,0xb1e2,0x91fa,0xece7,0x91fb,0x91fc,0x91fd,0xc9c8, +0xece8,0xece9,0x91fe,0xcad6,0xded0,0xb2c5,0xd4fa,0x9240, +0x9241,0xc6cb,0xb0c7,0xb4f2,0xc8d3,0x9242,0x9243,0x9244, +0xcdd0,0x9245,0x9246,0xbfb8,0x9247,0x9248,0x9249,0x924a, +0x924b,0x924c,0x924d,0xbfdb,0x924e,0x924f,0xc7a4,0xd6b4, +0x9250,0xc0a9,0xded1,0xc9a8,0xd1ef,0xc5a4,0xb0e7,0xb3b6, +0xc8c5,0x9251,0x9252,0xb0e2,0x9253,0x9254,0xb7f6,0x9255, +0x9256,0xc5fa,0x9257,0x9258,0xb6f3,0x9259,0xd5d2,0xb3d0, +0xbcbc,0x925a,0x925b,0x925c,0xb3ad,0x925d,0x925e,0x925f, +0x9260,0xbef1,0xb0d1,0x9261,0x9262,0x9263,0x9264,0x9265, +0x9266,0xd2d6,0xcae3,0xd7a5,0x9267,0xcdb6,0xb6b6,0xbfb9, +0xd5db,0x9268,0xb8a7,0xc5d7,0x9269,0x926a,0x926b,0xded2, +0xbfd9,0xc2d5,0xc7c0,0x926c,0xbba4,0xb1a8,0x926d,0x926e, +0xc5ea,0x926f,0x9270,0xc5fb,0xcca7,0x9271,0x9272,0x9273, +0x9274,0xb1a7,0x9275,0x9276,0x9277,0xb5d6,0x9278,0x9279, +0x927a,0xc4a8,0x927b,0xded3,0xd1ba,0xb3e9,0x927c,0xc3f2, +0x927d,0x927e,0xb7f7,0x9280,0xd6f4,0xb5a3,0xb2f0,0xc4b4, +0xc4e9,0xc0ad,0xded4,0x9281,0xb0e8,0xc5c4,0xc1e0,0x9282, +0xb9d5,0x9283,0xbedc,0xcdd8,0xb0ce,0x9284,0xcdcf,0xded6, +0xbed0,0xd7be,0xded5,0xd5d0,0xb0dd,0x9285,0x9286,0xc4e2, +0x9287,0x9288,0xc2a3,0xbcf0,0x9289,0xd3b5,0xc0b9,0xc5a1, +0xb2a6,0xd4f1,0x928a,0x928b,0xc0a8,0xcac3,0xded7,0xd5fc, +0x928c,0xb9b0,0x928d,0xc8ad,0xcba9,0x928e,0xded9,0xbfbd, +0x928f,0x9290,0x9291,0x9292,0xc6b4,0xd7a7,0xcab0,0xc4c3, +0x9293,0xb3d6,0xb9d2,0x9294,0x9295,0x9296,0x9297,0xd6b8, +0xeafc,0xb0b4,0x9298,0x9299,0x929a,0x929b,0xbfe6,0x929c, +0x929d,0xccf4,0x929e,0x929f,0x92a0,0x92a1,0xcdda,0x92a2, +0x92a3,0x92a4,0xd6bf,0xc2ce,0x92a5,0xcece,0xcca2,0xd0ae, +0xc4d3,0xb5b2,0xded8,0xd5f5,0xbcb7,0xbbd3,0x92a6,0x92a7, +0xb0a4,0x92a8,0xc5b2,0xb4ec,0x92a9,0x92aa,0x92ab,0xd5f1, +0x92ac,0x92ad,0xeafd,0x92ae,0x92af,0x92b0,0x92b1,0x92b2, +0x92b3,0xdeda,0xcda6,0x92b4,0x92b5,0xcdec,0x92b6,0x92b7, +0x92b8,0x92b9,0xcee6,0xdedc,0x92ba,0xcdb1,0xc0a6,0x92bb, +0x92bc,0xd7bd,0x92bd,0xdedb,0xb0c6,0xbab4,0xc9d3,0xc4f3, +0xbee8,0x92be,0x92bf,0x92c0,0x92c1,0xb2b6,0x92c2,0x92c3, +0x92c4,0x92c5,0x92c6,0x92c7,0x92c8,0x92c9,0xc0cc,0xcbf0, +0x92ca,0xbcf1,0xbbbb,0xb5b7,0x92cb,0x92cc,0x92cd,0xc5f5, +0x92ce,0xdee6,0x92cf,0x92d0,0x92d1,0xdee3,0xbedd,0x92d2, +0x92d3,0xdedf,0x92d4,0x92d5,0x92d6,0x92d7,0xb4b7,0xbddd, +0x92d8,0x92d9,0xdee0,0xc4ed,0x92da,0x92db,0x92dc,0x92dd, +0xcfc6,0x92de,0xb5e0,0x92df,0x92e0,0x92e1,0x92e2,0xb6de, +0xcada,0xb5f4,0xdee5,0x92e3,0xd5c6,0x92e4,0xdee1,0xcccd, +0xc6fe,0x92e5,0xc5c5,0x92e6,0x92e7,0x92e8,0xd2b4,0x92e9, +0xbef2,0x92ea,0x92eb,0x92ec,0x92ed,0x92ee,0x92ef,0x92f0, +0xc2d3,0x92f1,0xccbd,0xb3b8,0x92f2,0xbdd3,0x92f3,0xbfd8, +0xcdc6,0xd1da,0xb4eb,0x92f4,0xdee4,0xdedd,0xdee7,0x92f5, +0xeafe,0x92f6,0x92f7,0xc2b0,0xdee2,0x92f8,0x92f9,0xd6c0, +0xb5a7,0x92fa,0xb2f4,0x92fb,0xdee8,0x92fc,0xdef2,0x92fd, +0x92fe,0x9340,0x9341,0x9342,0xdeed,0x9343,0xdef1,0x9344, +0x9345,0xc8e0,0x9346,0x9347,0x9348,0xd7e1,0xdeef,0xc3e8, +0xcce1,0x9349,0xb2e5,0x934a,0x934b,0x934c,0xd2be,0x934d, +0x934e,0x934f,0x9350,0x9351,0x9352,0x9353,0xdeee,0x9354, +0xdeeb,0xced5,0x9355,0xb4a7,0x9356,0x9357,0x9358,0x9359, +0x935a,0xbfab,0xbebe,0x935b,0x935c,0xbdd2,0x935d,0x935e, +0x935f,0x9360,0xdee9,0x9361,0xd4ae,0x9362,0xdede,0x9363, +0xdeea,0x9364,0x9365,0x9366,0x9367,0xc0bf,0x9368,0xdeec, +0xb2f3,0xb8e9,0xc2a7,0x9369,0x936a,0xbdc1,0x936b,0x936c, +0x936d,0x936e,0x936f,0xdef5,0xdef8,0x9370,0x9371,0xb2ab, +0xb4a4,0x9372,0x9373,0xb4ea,0xc9a6,0x9374,0x9375,0x9376, +0x9377,0x9378,0x9379,0xdef6,0xcbd1,0x937a,0xb8e3,0x937b, +0xdef7,0xdefa,0x937c,0x937d,0x937e,0x9380,0xdef9,0x9381, +0x9382,0x9383,0xccc2,0x9384,0xb0e1,0xb4ee,0x9385,0x9386, +0x9387,0x9388,0x9389,0x938a,0xe5ba,0x938b,0x938c,0x938d, +0x938e,0x938f,0xd0af,0x9390,0x9391,0xb2eb,0x9392,0xeba1, +0x9393,0xdef4,0x9394,0x9395,0xc9e3,0xdef3,0xb0da,0xd2a1, +0xb1f7,0x9396,0xccaf,0x9397,0x9398,0x9399,0x939a,0x939b, +0x939c,0x939d,0xdef0,0x939e,0xcba4,0x939f,0x93a0,0x93a1, +0xd5aa,0x93a2,0x93a3,0x93a4,0x93a5,0x93a6,0xdefb,0x93a7, +0x93a8,0x93a9,0x93aa,0x93ab,0x93ac,0x93ad,0x93ae,0xb4dd, +0x93af,0xc4a6,0x93b0,0x93b1,0x93b2,0xdefd,0x93b3,0x93b4, +0x93b5,0x93b6,0x93b7,0x93b8,0x93b9,0x93ba,0x93bb,0x93bc, +0xc3fe,0xc4a1,0xdfa1,0x93bd,0x93be,0x93bf,0x93c0,0x93c1, +0x93c2,0x93c3,0xc1cc,0x93c4,0xdefc,0xbeef,0x93c5,0xc6b2, +0x93c6,0x93c7,0x93c8,0x93c9,0x93ca,0x93cb,0x93cc,0x93cd, +0x93ce,0xb3c5,0xc8f6,0x93cf,0x93d0,0xcbba,0xdefe,0x93d1, +0x93d2,0xdfa4,0x93d3,0x93d4,0x93d5,0x93d6,0xd7b2,0x93d7, +0x93d8,0x93d9,0x93da,0x93db,0xb3b7,0x93dc,0x93dd,0x93de, +0x93df,0xc1c3,0x93e0,0x93e1,0xc7cb,0xb2a5,0xb4e9,0x93e2, +0xd7ab,0x93e3,0x93e4,0x93e5,0x93e6,0xc4ec,0x93e7,0xdfa2, +0xdfa3,0x93e8,0xdfa5,0x93e9,0xbab3,0x93ea,0x93eb,0x93ec, +0xdfa6,0x93ed,0xc0de,0x93ee,0x93ef,0xc9c3,0x93f0,0x93f1, +0x93f2,0x93f3,0x93f4,0x93f5,0x93f6,0xb2d9,0xc7e6,0x93f7, +0xdfa7,0x93f8,0xc7dc,0x93f9,0x93fa,0x93fb,0x93fc,0xdfa8, +0xeba2,0x93fd,0x93fe,0x9440,0x9441,0x9442,0xcbd3,0x9443, +0x9444,0x9445,0xdfaa,0x9446,0xdfa9,0x9447,0xb2c1,0x9448, +0x9449,0x944a,0x944b,0x944c,0x944d,0x944e,0x944f,0x9450, +0x9451,0x9452,0x9453,0x9454,0x9455,0x9456,0x9457,0x9458, +0x9459,0x945a,0x945b,0x945c,0x945d,0x945e,0x945f,0x9460, +0xc5ca,0x9461,0x9462,0x9463,0x9464,0x9465,0x9466,0x9467, +0x9468,0xdfab,0x9469,0x946a,0x946b,0x946c,0x946d,0x946e, +0x946f,0x9470,0xd4dc,0x9471,0x9472,0x9473,0x9474,0x9475, +0xc8c1,0x9476,0x9477,0x9478,0x9479,0x947a,0x947b,0x947c, +0x947d,0x947e,0x9480,0x9481,0x9482,0xdfac,0x9483,0x9484, +0x9485,0x9486,0x9487,0xbef0,0x9488,0x9489,0xdfad,0xd6a7, +0x948a,0x948b,0x948c,0x948d,0xeab7,0xebb6,0xcad5,0x948e, +0xd8fc,0xb8c4,0x948f,0xb9a5,0x9490,0x9491,0xb7c5,0xd5fe, +0x9492,0x9493,0x9494,0x9495,0x9496,0xb9ca,0x9497,0x9498, +0xd0a7,0xf4cd,0x9499,0x949a,0xb5d0,0x949b,0x949c,0xc3f4, +0x949d,0xbec8,0x949e,0x949f,0x94a0,0xebb7,0xb0bd,0x94a1, +0x94a2,0xbdcc,0x94a3,0xc1b2,0x94a4,0xb1d6,0xb3a8,0x94a5, +0x94a6,0x94a7,0xb8d2,0xc9a2,0x94a8,0x94a9,0xb6d8,0x94aa, +0x94ab,0x94ac,0x94ad,0xebb8,0xbeb4,0x94ae,0x94af,0x94b0, +0xcafd,0x94b1,0xc7c3,0x94b2,0xd5fb,0x94b3,0x94b4,0xb7f3, +0x94b5,0x94b6,0x94b7,0x94b8,0x94b9,0x94ba,0x94bb,0x94bc, +0x94bd,0x94be,0x94bf,0x94c0,0x94c1,0x94c2,0x94c3,0xcec4, +0x94c4,0x94c5,0x94c6,0xd5ab,0xb1f3,0x94c7,0x94c8,0x94c9, +0xecb3,0xb0df,0x94ca,0xecb5,0x94cb,0x94cc,0x94cd,0xb6b7, +0x94ce,0xc1cf,0x94cf,0xf5fa,0xd0b1,0x94d0,0x94d1,0xd5e5, +0x94d2,0xced3,0x94d3,0x94d4,0xbdef,0xb3e2,0x94d5,0xb8ab, +0x94d6,0xd5b6,0x94d7,0xedbd,0x94d8,0xb6cf,0x94d9,0xcbb9, +0xd0c2,0x94da,0x94db,0x94dc,0x94dd,0x94de,0x94df,0x94e0, +0x94e1,0xb7bd,0x94e2,0x94e3,0xecb6,0xcaa9,0x94e4,0x94e5, +0x94e6,0xc5d4,0x94e7,0xecb9,0xecb8,0xc2c3,0xecb7,0x94e8, +0x94e9,0x94ea,0x94eb,0xd0fd,0xecba,0x94ec,0xecbb,0xd7e5, +0x94ed,0x94ee,0xecbc,0x94ef,0x94f0,0x94f1,0xecbd,0xc6ec, +0x94f2,0x94f3,0x94f4,0x94f5,0x94f6,0x94f7,0x94f8,0x94f9, +0xcede,0x94fa,0xbcc8,0x94fb,0x94fc,0xc8d5,0xb5a9,0xbec9, +0xd6bc,0xd4e7,0x94fd,0x94fe,0xd1ae,0xd0f1,0xeab8,0xeab9, +0xeaba,0xbab5,0x9540,0x9541,0x9542,0x9543,0xcab1,0xbff5, +0x9544,0x9545,0xcdfa,0x9546,0x9547,0x9548,0x9549,0x954a, +0xeac0,0x954b,0xb0ba,0xeabe,0x954c,0x954d,0xc0a5,0x954e, +0x954f,0x9550,0xeabb,0x9551,0xb2fd,0x9552,0xc3f7,0xbbe8, +0x9553,0x9554,0x9555,0xd2d7,0xcef4,0xeabf,0x9556,0x9557, +0x9558,0xeabc,0x9559,0x955a,0x955b,0xeac3,0x955c,0xd0c7, +0xd3b3,0x955d,0x955e,0x955f,0x9560,0xb4ba,0x9561,0xc3c1, +0xd7f2,0x9562,0x9563,0x9564,0x9565,0xd5d1,0x9566,0xcac7, +0x9567,0xeac5,0x9568,0x9569,0xeac4,0xeac7,0xeac6,0x956a, +0x956b,0x956c,0x956d,0x956e,0xd6e7,0x956f,0xcfd4,0x9570, +0x9571,0xeacb,0x9572,0xbbce,0x9573,0x9574,0x9575,0x9576, +0x9577,0x9578,0x9579,0xbdfa,0xc9ce,0x957a,0x957b,0xeacc, +0x957c,0x957d,0xc9b9,0xcffe,0xeaca,0xd4ce,0xeacd,0xeacf, +0x957e,0x9580,0xcded,0x9581,0x9582,0x9583,0x9584,0xeac9, +0x9585,0xeace,0x9586,0x9587,0xceee,0x9588,0xbbde,0x9589, +0xb3bf,0x958a,0x958b,0x958c,0x958d,0x958e,0xc6d5,0xbeb0, +0xcefa,0x958f,0x9590,0x9591,0xc7e7,0x9592,0xbea7,0xead0, +0x9593,0x9594,0xd6c7,0x9595,0x9596,0x9597,0xc1c0,0x9598, +0x9599,0x959a,0xd4dd,0x959b,0xead1,0x959c,0x959d,0xcfbe, +0x959e,0x959f,0x95a0,0x95a1,0xead2,0x95a2,0x95a3,0x95a4, +0x95a5,0xcaee,0x95a6,0x95a7,0x95a8,0x95a9,0xc5af,0xb0b5, +0x95aa,0x95ab,0x95ac,0x95ad,0x95ae,0xead4,0x95af,0x95b0, +0x95b1,0x95b2,0x95b3,0x95b4,0x95b5,0x95b6,0x95b7,0xead3, +0xf4df,0x95b8,0x95b9,0x95ba,0x95bb,0x95bc,0xc4ba,0x95bd, +0x95be,0x95bf,0x95c0,0x95c1,0xb1a9,0x95c2,0x95c3,0x95c4, +0x95c5,0xe5df,0x95c6,0x95c7,0x95c8,0x95c9,0xead5,0x95ca, +0x95cb,0x95cc,0x95cd,0x95ce,0x95cf,0x95d0,0x95d1,0x95d2, +0x95d3,0x95d4,0x95d5,0x95d6,0x95d7,0x95d8,0x95d9,0x95da, +0x95db,0x95dc,0x95dd,0x95de,0x95df,0x95e0,0x95e1,0x95e2, +0x95e3,0xcaef,0x95e4,0xead6,0xead7,0xc6d8,0x95e5,0x95e6, +0x95e7,0x95e8,0x95e9,0x95ea,0x95eb,0x95ec,0xead8,0x95ed, +0x95ee,0xead9,0x95ef,0x95f0,0x95f1,0x95f2,0x95f3,0x95f4, +0xd4bb,0x95f5,0xc7fa,0xd2b7,0xb8fc,0x95f6,0x95f7,0xeac2, +0x95f8,0xb2dc,0x95f9,0x95fa,0xc2fc,0x95fb,0xd4f8,0xcce6, +0xd7ee,0x95fc,0x95fd,0x95fe,0x9640,0x9641,0x9642,0x9643, +0xd4c2,0xd3d0,0xebc3,0xc5f3,0x9644,0xb7fe,0x9645,0x9646, +0xebd4,0x9647,0x9648,0x9649,0xcbb7,0xebde,0x964a,0xc0ca, +0x964b,0x964c,0x964d,0xcdfb,0x964e,0xb3af,0x964f,0xc6da, +0x9650,0x9651,0x9652,0x9653,0x9654,0x9655,0xebfc,0x9656, +0xc4be,0x9657,0xceb4,0xc4a9,0xb1be,0xd4fd,0x9658,0xcaf5, +0x9659,0xd6ec,0x965a,0x965b,0xc6d3,0xb6e4,0x965c,0x965d, +0x965e,0x965f,0xbbfa,0x9660,0x9661,0xd0e0,0x9662,0x9663, +0xc9b1,0x9664,0xd4d3,0xc8a8,0x9665,0x9666,0xb8cb,0x9667, +0xe8be,0xc9bc,0x9668,0x9669,0xe8bb,0x966a,0xc0ee,0xd0d3, +0xb2c4,0xb4e5,0x966b,0xe8bc,0x966c,0x966d,0xd5c8,0x966e, +0x966f,0x9670,0x9671,0x9672,0xb6c5,0x9673,0xe8bd,0xcaf8, +0xb8dc,0xccf5,0x9674,0x9675,0x9676,0xc0b4,0x9677,0x9678, +0xd1ee,0xe8bf,0xe8c2,0x9679,0x967a,0xbabc,0x967b,0xb1ad, +0xbddc,0x967c,0xeabd,0xe8c3,0x967d,0xe8c6,0x967e,0xe8cb, +0x9680,0x9681,0x9682,0x9683,0xe8cc,0x9684,0xcbc9,0xb0e5, +0x9685,0xbcab,0x9686,0x9687,0xb9b9,0x9688,0x9689,0xe8c1, +0x968a,0xcdf7,0x968b,0xe8ca,0x968c,0x968d,0x968e,0x968f, +0xcef6,0x9690,0x9691,0x9692,0x9693,0xd5ed,0x9694,0xc1d6, +0xe8c4,0x9695,0xc3b6,0x9696,0xb9fb,0xd6a6,0xe8c8,0x9697, +0x9698,0x9699,0xcae0,0xd4e6,0x969a,0xe8c0,0x969b,0xe8c5, +0xe8c7,0x969c,0xc7b9,0xb7e3,0x969d,0xe8c9,0x969e,0xbfdd, +0xe8d2,0x969f,0x96a0,0xe8d7,0x96a1,0xe8d5,0xbcdc,0xbccf, +0xe8db,0x96a2,0x96a3,0x96a4,0x96a5,0x96a6,0x96a7,0x96a8, +0x96a9,0xe8de,0x96aa,0xe8da,0xb1fa,0x96ab,0x96ac,0x96ad, +0x96ae,0x96af,0x96b0,0x96b1,0x96b2,0x96b3,0x96b4,0xb0d8, +0xc4b3,0xb8cc,0xc6e2,0xc8be,0xc8e1,0x96b5,0x96b6,0x96b7, +0xe8cf,0xe8d4,0xe8d6,0x96b8,0xb9f1,0xe8d8,0xd7f5,0x96b9, +0xc4fb,0x96ba,0xe8dc,0x96bb,0x96bc,0xb2e9,0x96bd,0x96be, +0x96bf,0xe8d1,0x96c0,0x96c1,0xbced,0x96c2,0x96c3,0xbfc2, +0xe8cd,0xd6f9,0x96c4,0xc1f8,0xb2f1,0x96c5,0x96c6,0x96c7, +0x96c8,0x96c9,0x96ca,0x96cb,0x96cc,0xe8df,0x96cd,0xcac1, +0xe8d9,0x96ce,0x96cf,0x96d0,0x96d1,0xd5a4,0x96d2,0xb1ea, +0xd5bb,0xe8ce,0xe8d0,0xb6b0,0xe8d3,0x96d3,0xe8dd,0xc0b8, +0x96d4,0xcaf7,0x96d5,0xcba8,0x96d6,0x96d7,0xc6dc,0xc0f5, +0x96d8,0x96d9,0x96da,0x96db,0x96dc,0xe8e9,0x96dd,0x96de, +0x96df,0xd0a3,0x96e0,0x96e1,0x96e2,0x96e3,0x96e4,0x96e5, +0x96e6,0xe8f2,0xd6ea,0x96e7,0x96e8,0x96e9,0x96ea,0x96eb, +0x96ec,0x96ed,0xe8e0,0xe8e1,0x96ee,0x96ef,0x96f0,0xd1f9, +0xbacb,0xb8f9,0x96f1,0x96f2,0xb8f1,0xd4d4,0xe8ef,0x96f3, +0xe8ee,0xe8ec,0xb9f0,0xccd2,0xe8e6,0xcea6,0xbff2,0x96f4, +0xb0b8,0xe8f1,0xe8f0,0x96f5,0xd7c0,0x96f6,0xe8e4,0x96f7, +0xcda9,0xc9a3,0x96f8,0xbbb8,0xbddb,0xe8ea,0x96f9,0x96fa, +0x96fb,0x96fc,0x96fd,0x96fe,0x9740,0x9741,0x9742,0x9743, +0xe8e2,0xe8e3,0xe8e5,0xb5b5,0xe8e7,0xc7c5,0xe8eb,0xe8ed, +0xbdb0,0xd7ae,0x9744,0xe8f8,0x9745,0x9746,0x9747,0x9748, +0x9749,0x974a,0x974b,0x974c,0xe8f5,0x974d,0xcdb0,0xe8f6, +0x974e,0x974f,0x9750,0x9751,0x9752,0x9753,0x9754,0x9755, +0x9756,0xc1ba,0x9757,0xe8e8,0x9758,0xc3b7,0xb0f0,0x9759, +0x975a,0x975b,0x975c,0x975d,0x975e,0x975f,0x9760,0xe8f4, +0x9761,0x9762,0x9763,0xe8f7,0x9764,0x9765,0x9766,0xb9a3, +0x9767,0x9768,0x9769,0x976a,0x976b,0x976c,0x976d,0x976e, +0x976f,0x9770,0xc9d2,0x9771,0x9772,0x9773,0xc3ce,0xcee0, +0xc0e6,0x9774,0x9775,0x9776,0x9777,0xcbf3,0x9778,0xccdd, +0xd0b5,0x9779,0x977a,0xcae1,0x977b,0xe8f3,0x977c,0x977d, +0x977e,0x9780,0x9781,0x9782,0x9783,0x9784,0x9785,0x9786, +0xbcec,0x9787,0xe8f9,0x9788,0x9789,0x978a,0x978b,0x978c, +0x978d,0xc3de,0x978e,0xc6e5,0x978f,0xb9f7,0x9790,0x9791, +0x9792,0x9793,0xb0f4,0x9794,0x9795,0xd7d8,0x9796,0x9797, +0xbcac,0x9798,0xc5ef,0x9799,0x979a,0x979b,0x979c,0x979d, +0xccc4,0x979e,0x979f,0xe9a6,0x97a0,0x97a1,0x97a2,0x97a3, +0x97a4,0x97a5,0x97a6,0x97a7,0x97a8,0x97a9,0xc9ad,0x97aa, +0xe9a2,0xc0e2,0x97ab,0x97ac,0x97ad,0xbfc3,0x97ae,0x97af, +0x97b0,0xe8fe,0xb9d7,0x97b1,0xe8fb,0x97b2,0x97b3,0x97b4, +0x97b5,0xe9a4,0x97b6,0x97b7,0x97b8,0xd2ce,0x97b9,0x97ba, +0x97bb,0x97bc,0x97bd,0xe9a3,0x97be,0xd6b2,0xd7b5,0x97bf, +0xe9a7,0x97c0,0xbdb7,0x97c1,0x97c2,0x97c3,0x97c4,0x97c5, +0x97c6,0x97c7,0x97c8,0x97c9,0x97ca,0x97cb,0x97cc,0xe8fc, +0xe8fd,0x97cd,0x97ce,0x97cf,0xe9a1,0x97d0,0x97d1,0x97d2, +0x97d3,0x97d4,0x97d5,0x97d6,0x97d7,0xcdd6,0x97d8,0x97d9, +0xd2ac,0x97da,0x97db,0x97dc,0xe9b2,0x97dd,0x97de,0x97df, +0x97e0,0xe9a9,0x97e1,0x97e2,0x97e3,0xb4aa,0x97e4,0xb4bb, +0x97e5,0x97e6,0xe9ab,0x97e7,0x97e8,0x97e9,0x97ea,0x97eb, +0x97ec,0x97ed,0x97ee,0x97ef,0x97f0,0x97f1,0x97f2,0x97f3, +0x97f4,0x97f5,0x97f6,0x97f7,0xd0a8,0x97f8,0x97f9,0xe9a5, +0x97fa,0x97fb,0xb3fe,0x97fc,0x97fd,0xe9ac,0xc0e3,0x97fe, +0xe9aa,0x9840,0x9841,0xe9b9,0x9842,0x9843,0xe9b8,0x9844, +0x9845,0x9846,0x9847,0xe9ae,0x9848,0x9849,0xe8fa,0x984a, +0x984b,0xe9a8,0x984c,0x984d,0x984e,0x984f,0x9850,0xbfac, +0xe9b1,0xe9ba,0x9851,0x9852,0xc2a5,0x9853,0x9854,0x9855, +0xe9af,0x9856,0xb8c5,0x9857,0xe9ad,0x9858,0xd3dc,0xe9b4, +0xe9b5,0xe9b7,0x9859,0x985a,0x985b,0xe9c7,0x985c,0x985d, +0x985e,0x985f,0x9860,0x9861,0xc0c6,0xe9c5,0x9862,0x9863, +0xe9b0,0x9864,0x9865,0xe9bb,0xb0f1,0x9866,0x9867,0x9868, +0x9869,0x986a,0x986b,0x986c,0x986d,0x986e,0x986f,0xe9bc, +0xd5a5,0x9870,0x9871,0xe9be,0x9872,0xe9bf,0x9873,0x9874, +0x9875,0xe9c1,0x9876,0x9877,0xc1f1,0x9878,0x9879,0xc8b6, +0x987a,0x987b,0x987c,0xe9bd,0x987d,0x987e,0x9880,0x9881, +0x9882,0xe9c2,0x9883,0x9884,0x9885,0x9886,0x9887,0x9888, +0x9889,0x988a,0xe9c3,0x988b,0xe9b3,0x988c,0xe9b6,0x988d, +0xbbb1,0x988e,0x988f,0x9890,0xe9c0,0x9891,0x9892,0x9893, +0x9894,0x9895,0x9896,0xbcf7,0x9897,0x9898,0x9899,0xe9c4, +0xe9c6,0x989a,0x989b,0x989c,0x989d,0x989e,0x989f,0x98a0, +0x98a1,0x98a2,0x98a3,0x98a4,0x98a5,0xe9ca,0x98a6,0x98a7, +0x98a8,0x98a9,0xe9ce,0x98aa,0x98ab,0x98ac,0x98ad,0x98ae, +0x98af,0x98b0,0x98b1,0x98b2,0x98b3,0xb2db,0x98b4,0xe9c8, +0x98b5,0x98b6,0x98b7,0x98b8,0x98b9,0x98ba,0x98bb,0x98bc, +0x98bd,0x98be,0xb7ae,0x98bf,0x98c0,0x98c1,0x98c2,0x98c3, +0x98c4,0x98c5,0x98c6,0x98c7,0x98c8,0x98c9,0x98ca,0xe9cb, +0xe9cc,0x98cb,0x98cc,0x98cd,0x98ce,0x98cf,0x98d0,0xd5c1, +0x98d1,0xc4a3,0x98d2,0x98d3,0x98d4,0x98d5,0x98d6,0x98d7, +0xe9d8,0x98d8,0xbae1,0x98d9,0x98da,0x98db,0x98dc,0xe9c9, +0x98dd,0xd3a3,0x98de,0x98df,0x98e0,0xe9d4,0x98e1,0x98e2, +0x98e3,0x98e4,0x98e5,0x98e6,0x98e7,0xe9d7,0xe9d0,0x98e8, +0x98e9,0x98ea,0x98eb,0x98ec,0xe9cf,0x98ed,0x98ee,0xc7c1, +0x98ef,0x98f0,0x98f1,0x98f2,0x98f3,0x98f4,0x98f5,0x98f6, +0xe9d2,0x98f7,0x98f8,0x98f9,0x98fa,0x98fb,0x98fc,0x98fd, +0xe9d9,0xb3c8,0x98fe,0xe9d3,0x9940,0x9941,0x9942,0x9943, +0x9944,0xcff0,0x9945,0x9946,0x9947,0xe9cd,0x9948,0x9949, +0x994a,0x994b,0x994c,0x994d,0x994e,0x994f,0x9950,0x9951, +0x9952,0xb3f7,0x9953,0x9954,0x9955,0x9956,0x9957,0x9958, +0x9959,0xe9d6,0x995a,0x995b,0xe9da,0x995c,0x995d,0x995e, +0xccb4,0x995f,0x9960,0x9961,0xcfad,0x9962,0x9963,0x9964, +0x9965,0x9966,0x9967,0x9968,0x9969,0x996a,0xe9d5,0x996b, +0xe9dc,0xe9db,0x996c,0x996d,0x996e,0x996f,0x9970,0xe9de, +0x9971,0x9972,0x9973,0x9974,0x9975,0x9976,0x9977,0x9978, +0xe9d1,0x9979,0x997a,0x997b,0x997c,0x997d,0x997e,0x9980, +0x9981,0xe9dd,0x9982,0xe9df,0xc3ca,0x9983,0x9984,0x9985, +0x9986,0x9987,0x9988,0x9989,0x998a,0x998b,0x998c,0x998d, +0x998e,0x998f,0x9990,0x9991,0x9992,0x9993,0x9994,0x9995, +0x9996,0x9997,0x9998,0x9999,0x999a,0x999b,0x999c,0x999d, +0x999e,0x999f,0x99a0,0x99a1,0x99a2,0x99a3,0x99a4,0x99a5, +0x99a6,0x99a7,0x99a8,0x99a9,0x99aa,0x99ab,0x99ac,0x99ad, +0x99ae,0x99af,0x99b0,0x99b1,0x99b2,0x99b3,0x99b4,0x99b5, +0x99b6,0x99b7,0x99b8,0x99b9,0x99ba,0x99bb,0x99bc,0x99bd, +0x99be,0x99bf,0x99c0,0x99c1,0x99c2,0x99c3,0x99c4,0x99c5, +0x99c6,0x99c7,0x99c8,0x99c9,0x99ca,0x99cb,0x99cc,0x99cd, +0x99ce,0x99cf,0x99d0,0x99d1,0x99d2,0x99d3,0x99d4,0x99d5, +0x99d6,0x99d7,0x99d8,0x99d9,0x99da,0x99db,0x99dc,0x99dd, +0x99de,0x99df,0x99e0,0x99e1,0x99e2,0x99e3,0x99e4,0x99e5, +0x99e6,0x99e7,0x99e8,0x99e9,0x99ea,0x99eb,0x99ec,0x99ed, +0x99ee,0x99ef,0x99f0,0x99f1,0x99f2,0x99f3,0x99f4,0x99f5, +0xc7b7,0xb4ce,0xbbb6,0xd0c0,0xeca3,0x99f6,0x99f7,0xc5b7, +0x99f8,0x99f9,0x99fa,0x99fb,0x99fc,0x99fd,0x99fe,0x9a40, +0x9a41,0x9a42,0xd3fb,0x9a43,0x9a44,0x9a45,0x9a46,0xeca4, +0x9a47,0xeca5,0xc6db,0x9a48,0x9a49,0x9a4a,0xbfee,0x9a4b, +0x9a4c,0x9a4d,0x9a4e,0xeca6,0x9a4f,0x9a50,0xeca7,0xd0aa, +0x9a51,0xc7b8,0x9a52,0x9a53,0xb8e8,0x9a54,0x9a55,0x9a56, +0x9a57,0x9a58,0x9a59,0x9a5a,0x9a5b,0x9a5c,0x9a5d,0x9a5e, +0x9a5f,0xeca8,0x9a60,0x9a61,0x9a62,0x9a63,0x9a64,0x9a65, +0x9a66,0x9a67,0xd6b9,0xd5fd,0xb4cb,0xb2bd,0xcee4,0xc6e7, +0x9a68,0x9a69,0xcde1,0x9a6a,0x9a6b,0x9a6c,0x9a6d,0x9a6e, +0x9a6f,0x9a70,0x9a71,0x9a72,0x9a73,0x9a74,0x9a75,0x9a76, +0x9a77,0xb4f5,0x9a78,0xcbc0,0xbcdf,0x9a79,0x9a7a,0x9a7b, +0x9a7c,0xe9e2,0xe9e3,0xd1ea,0xe9e5,0x9a7d,0xb4f9,0xe9e4, +0x9a7e,0xd1b3,0xcae2,0xb2d0,0x9a80,0xe9e8,0x9a81,0x9a82, +0x9a83,0x9a84,0xe9e6,0xe9e7,0x9a85,0x9a86,0xd6b3,0x9a87, +0x9a88,0x9a89,0xe9e9,0xe9ea,0x9a8a,0x9a8b,0x9a8c,0x9a8d, +0x9a8e,0xe9eb,0x9a8f,0x9a90,0x9a91,0x9a92,0x9a93,0x9a94, +0x9a95,0x9a96,0xe9ec,0x9a97,0x9a98,0x9a99,0x9a9a,0x9a9b, +0x9a9c,0x9a9d,0x9a9e,0xecaf,0xc5b9,0xb6ce,0x9a9f,0xd2f3, +0x9aa0,0x9aa1,0x9aa2,0x9aa3,0x9aa4,0x9aa5,0x9aa6,0xb5ee, +0x9aa7,0xbbd9,0xecb1,0x9aa8,0x9aa9,0xd2e3,0x9aaa,0x9aab, +0x9aac,0x9aad,0x9aae,0xcee3,0x9aaf,0xc4b8,0x9ab0,0xc3bf, +0x9ab1,0x9ab2,0xb6be,0xd8b9,0xb1c8,0xb1cf,0xb1d1,0xc5fe, +0x9ab3,0xb1d0,0x9ab4,0xc3ab,0x9ab5,0x9ab6,0x9ab7,0x9ab8, +0x9ab9,0xd5b1,0x9aba,0x9abb,0x9abc,0x9abd,0x9abe,0x9abf, +0x9ac0,0x9ac1,0xeba4,0xbac1,0x9ac2,0x9ac3,0x9ac4,0xccba, +0x9ac5,0x9ac6,0x9ac7,0xeba5,0x9ac8,0xeba7,0x9ac9,0x9aca, +0x9acb,0xeba8,0x9acc,0x9acd,0x9ace,0xeba6,0x9acf,0x9ad0, +0x9ad1,0x9ad2,0x9ad3,0x9ad4,0x9ad5,0xeba9,0xebab,0xebaa, +0x9ad6,0x9ad7,0x9ad8,0x9ad9,0x9ada,0xebac,0x9adb,0xcacf, +0xd8b5,0xc3f1,0x9adc,0xc3a5,0xc6f8,0xebad,0xc4ca,0x9add, +0xebae,0xebaf,0xebb0,0xb7d5,0x9ade,0x9adf,0x9ae0,0xb7fa, +0x9ae1,0xebb1,0xc7e2,0x9ae2,0xebb3,0x9ae3,0xbaa4,0xd1f5, +0xb0b1,0xebb2,0xebb4,0x9ae4,0x9ae5,0x9ae6,0xb5aa,0xc2c8, +0xc7e8,0x9ae7,0xebb5,0x9ae8,0xcbae,0xe3df,0x9ae9,0x9aea, +0xd3c0,0x9aeb,0x9aec,0x9aed,0x9aee,0xd9db,0x9aef,0x9af0, +0xcda1,0xd6ad,0xc7f3,0x9af1,0x9af2,0x9af3,0xd9e0,0xbbe3, +0x9af4,0xbaba,0xe3e2,0x9af5,0x9af6,0x9af7,0x9af8,0x9af9, +0xcfab,0x9afa,0x9afb,0x9afc,0xe3e0,0xc9c7,0x9afd,0xbab9, +0x9afe,0x9b40,0x9b41,0xd1b4,0xe3e1,0xc8ea,0xb9af,0xbdad, +0xb3d8,0xcedb,0x9b42,0x9b43,0xccc0,0x9b44,0x9b45,0x9b46, +0xe3e8,0xe3e9,0xcdf4,0x9b47,0x9b48,0x9b49,0x9b4a,0x9b4b, +0xccad,0x9b4c,0xbcb3,0x9b4d,0xe3ea,0x9b4e,0xe3eb,0x9b4f, +0x9b50,0xd0da,0x9b51,0x9b52,0x9b53,0xc6fb,0xb7da,0x9b54, +0x9b55,0xc7df,0xd2ca,0xced6,0x9b56,0xe3e4,0xe3ec,0x9b57, +0xc9f2,0xb3c1,0x9b58,0x9b59,0xe3e7,0x9b5a,0x9b5b,0xc6e3, +0xe3e5,0x9b5c,0x9b5d,0xedb3,0xe3e6,0x9b5e,0x9b5f,0x9b60, +0x9b61,0xc9b3,0x9b62,0xc5e6,0x9b63,0x9b64,0x9b65,0xb9b5, +0x9b66,0xc3bb,0x9b67,0xe3e3,0xc5bd,0xc1a4,0xc2d9,0xb2d7, +0x9b68,0xe3ed,0xbba6,0xc4ad,0x9b69,0xe3f0,0xbeda,0x9b6a, +0x9b6b,0xe3fb,0xe3f5,0xbad3,0x9b6c,0x9b6d,0x9b6e,0x9b6f, +0xb7d0,0xd3cd,0x9b70,0xd6ce,0xd5d3,0xb9c1,0xd5b4,0xd1d8, +0x9b71,0x9b72,0x9b73,0x9b74,0xd0b9,0xc7f6,0x9b75,0x9b76, +0x9b77,0xc8aa,0xb2b4,0x9b78,0xc3da,0x9b79,0x9b7a,0x9b7b, +0xe3ee,0x9b7c,0x9b7d,0xe3fc,0xe3ef,0xb7a8,0xe3f7,0xe3f4, +0x9b7e,0x9b80,0x9b81,0xb7ba,0x9b82,0x9b83,0xc5a2,0x9b84, +0xe3f6,0xc5dd,0xb2a8,0xc6fc,0x9b85,0xc4e0,0x9b86,0x9b87, +0xd7a2,0x9b88,0xc0e1,0xe3f9,0x9b89,0x9b8a,0xe3fa,0xe3fd, +0xcca9,0xe3f3,0x9b8b,0xd3be,0x9b8c,0xb1c3,0xedb4,0xe3f1, +0xe3f2,0x9b8d,0xe3f8,0xd0ba,0xc6c3,0xd4f3,0xe3fe,0x9b8e, +0x9b8f,0xbde0,0x9b90,0x9b91,0xe4a7,0x9b92,0x9b93,0xe4a6, +0x9b94,0x9b95,0x9b96,0xd1f3,0xe4a3,0x9b97,0xe4a9,0x9b98, +0x9b99,0x9b9a,0xc8f7,0x9b9b,0x9b9c,0x9b9d,0x9b9e,0xcfb4, +0x9b9f,0xe4a8,0xe4ae,0xc2e5,0x9ba0,0x9ba1,0xb6b4,0x9ba2, +0x9ba3,0x9ba4,0x9ba5,0x9ba6,0x9ba7,0xbdf2,0x9ba8,0xe4a2, +0x9ba9,0x9baa,0xbae9,0xe4aa,0x9bab,0x9bac,0xe4ac,0x9bad, +0x9bae,0xb6fd,0xd6de,0xe4b2,0x9baf,0xe4ad,0x9bb0,0x9bb1, +0x9bb2,0xe4a1,0x9bb3,0xbbee,0xcddd,0xc7a2,0xc5c9,0x9bb4, +0x9bb5,0xc1f7,0x9bb6,0xe4a4,0x9bb7,0xc7b3,0xbdac,0xbdbd, +0xe4a5,0x9bb8,0xd7c7,0xb2e2,0x9bb9,0xe4ab,0xbcc3,0xe4af, +0x9bba,0xbbeb,0xe4b0,0xc5a8,0xe4b1,0x9bbb,0x9bbc,0x9bbd, +0x9bbe,0xd5e3,0xbfa3,0x9bbf,0xe4ba,0x9bc0,0xe4b7,0x9bc1, +0xe4bb,0x9bc2,0x9bc3,0xe4bd,0x9bc4,0x9bc5,0xc6d6,0x9bc6, +0x9bc7,0xbac6,0xc0cb,0x9bc8,0x9bc9,0x9bca,0xb8a1,0xe4b4, +0x9bcb,0x9bcc,0x9bcd,0x9bce,0xd4a1,0x9bcf,0x9bd0,0xbaa3, +0xbdfe,0x9bd1,0x9bd2,0x9bd3,0xe4bc,0x9bd4,0x9bd5,0x9bd6, +0x9bd7,0x9bd8,0xcdbf,0x9bd9,0x9bda,0xc4f9,0x9bdb,0x9bdc, +0xcffb,0xc9e6,0x9bdd,0x9bde,0xd3bf,0x9bdf,0xcfd1,0x9be0, +0x9be1,0xe4b3,0x9be2,0xe4b8,0xe4b9,0xcce9,0x9be3,0x9be4, +0x9be5,0x9be6,0x9be7,0xccce,0x9be8,0xc0d4,0xe4b5,0xc1b0, +0xe4b6,0xced0,0x9be9,0xbbc1,0xb5d3,0x9bea,0xc8f3,0xbda7, +0xd5c7,0xc9ac,0xb8a2,0xe4ca,0x9beb,0x9bec,0xe4cc,0xd1c4, +0x9bed,0x9bee,0xd2ba,0x9bef,0x9bf0,0xbaad,0x9bf1,0x9bf2, +0xbad4,0x9bf3,0x9bf4,0x9bf5,0x9bf6,0x9bf7,0x9bf8,0xe4c3, +0xb5ed,0x9bf9,0x9bfa,0x9bfb,0xd7cd,0xe4c0,0xcffd,0xe4bf, +0x9bfc,0x9bfd,0x9bfe,0xc1dc,0xccca,0x9c40,0x9c41,0x9c42, +0x9c43,0xcae7,0x9c44,0x9c45,0x9c46,0x9c47,0xc4d7,0x9c48, +0xccd4,0xe4c8,0x9c49,0x9c4a,0x9c4b,0xe4c7,0xe4c1,0x9c4c, +0xe4c4,0xb5ad,0x9c4d,0x9c4e,0xd3d9,0x9c4f,0xe4c6,0x9c50, +0x9c51,0x9c52,0x9c53,0xd2f9,0xb4e3,0x9c54,0xbbb4,0x9c55, +0x9c56,0xc9ee,0x9c57,0xb4be,0x9c58,0x9c59,0x9c5a,0xbbec, +0x9c5b,0xd1cd,0x9c5c,0xcced,0xedb5,0x9c5d,0x9c5e,0x9c5f, +0x9c60,0x9c61,0x9c62,0x9c63,0x9c64,0xc7e5,0x9c65,0x9c66, +0x9c67,0x9c68,0xd4a8,0x9c69,0xe4cb,0xd7d5,0xe4c2,0x9c6a, +0xbda5,0xe4c5,0x9c6b,0x9c6c,0xd3e6,0x9c6d,0xe4c9,0xc9f8, +0x9c6e,0x9c6f,0xe4be,0x9c70,0x9c71,0xd3e5,0x9c72,0x9c73, +0xc7fe,0xb6c9,0x9c74,0xd4fc,0xb2b3,0xe4d7,0x9c75,0x9c76, +0x9c77,0xcec2,0x9c78,0xe4cd,0x9c79,0xcebc,0x9c7a,0xb8db, +0x9c7b,0x9c7c,0xe4d6,0x9c7d,0xbfca,0x9c7e,0x9c80,0x9c81, +0xd3ce,0x9c82,0xc3ec,0x9c83,0x9c84,0x9c85,0x9c86,0x9c87, +0x9c88,0x9c89,0x9c8a,0xc5c8,0xe4d8,0x9c8b,0x9c8c,0x9c8d, +0x9c8e,0x9c8f,0x9c90,0x9c91,0x9c92,0xcdc4,0xe4cf,0x9c93, +0x9c94,0x9c95,0x9c96,0xe4d4,0xe4d5,0x9c97,0xbafe,0x9c98, +0xcfe6,0x9c99,0x9c9a,0xd5bf,0x9c9b,0x9c9c,0x9c9d,0xe4d2, +0x9c9e,0x9c9f,0x9ca0,0x9ca1,0x9ca2,0x9ca3,0x9ca4,0x9ca5, +0x9ca6,0x9ca7,0x9ca8,0xe4d0,0x9ca9,0x9caa,0xe4ce,0x9cab, +0x9cac,0x9cad,0x9cae,0x9caf,0x9cb0,0x9cb1,0x9cb2,0x9cb3, +0x9cb4,0x9cb5,0x9cb6,0x9cb7,0x9cb8,0x9cb9,0xcde5,0xcaaa, +0x9cba,0x9cbb,0x9cbc,0xc0a3,0x9cbd,0xbda6,0xe4d3,0x9cbe, +0x9cbf,0xb8c8,0x9cc0,0x9cc1,0x9cc2,0x9cc3,0x9cc4,0xe4e7, +0xd4b4,0x9cc5,0x9cc6,0x9cc7,0x9cc8,0x9cc9,0x9cca,0x9ccb, +0xe4db,0x9ccc,0x9ccd,0x9cce,0xc1ef,0x9ccf,0x9cd0,0xe4e9, +0x9cd1,0x9cd2,0xd2e7,0x9cd3,0x9cd4,0xe4df,0x9cd5,0xe4e0, +0x9cd6,0x9cd7,0xcfaa,0x9cd8,0x9cd9,0x9cda,0x9cdb,0xcbdd, +0x9cdc,0xe4da,0xe4d1,0x9cdd,0xe4e5,0x9cde,0xc8dc,0xe4e3, +0x9cdf,0x9ce0,0xc4e7,0xe4e2,0x9ce1,0xe4e1,0x9ce2,0x9ce3, +0x9ce4,0xb3fc,0xe4e8,0x9ce5,0x9ce6,0x9ce7,0x9ce8,0xb5e1, +0x9ce9,0x9cea,0x9ceb,0xd7cc,0x9cec,0x9ced,0x9cee,0xe4e6, +0x9cef,0xbbac,0x9cf0,0xd7d2,0xcccf,0xebf8,0x9cf1,0xe4e4, +0x9cf2,0x9cf3,0xb9f6,0x9cf4,0x9cf5,0x9cf6,0xd6cd,0xe4d9, +0xe4dc,0xc2fa,0xe4de,0x9cf7,0xc2cb,0xc0c4,0xc2d0,0x9cf8, +0xb1f5,0xccb2,0x9cf9,0x9cfa,0x9cfb,0x9cfc,0x9cfd,0x9cfe, +0x9d40,0x9d41,0x9d42,0x9d43,0xb5ce,0x9d44,0x9d45,0x9d46, +0x9d47,0xe4ef,0x9d48,0x9d49,0x9d4a,0x9d4b,0x9d4c,0x9d4d, +0x9d4e,0x9d4f,0xc6af,0x9d50,0x9d51,0x9d52,0xc6e1,0x9d53, +0x9d54,0xe4f5,0x9d55,0x9d56,0x9d57,0x9d58,0x9d59,0xc2a9, +0x9d5a,0x9d5b,0x9d5c,0xc0ec,0xd1dd,0xe4ee,0x9d5d,0x9d5e, +0x9d5f,0x9d60,0x9d61,0x9d62,0x9d63,0x9d64,0x9d65,0x9d66, +0xc4ae,0x9d67,0x9d68,0x9d69,0xe4ed,0x9d6a,0x9d6b,0x9d6c, +0x9d6d,0xe4f6,0xe4f4,0xc2fe,0x9d6e,0xe4dd,0x9d6f,0xe4f0, +0x9d70,0xcafe,0x9d71,0xd5c4,0x9d72,0x9d73,0xe4f1,0x9d74, +0x9d75,0x9d76,0x9d77,0x9d78,0x9d79,0x9d7a,0xd1fa,0x9d7b, +0x9d7c,0x9d7d,0x9d7e,0x9d80,0x9d81,0x9d82,0xe4eb,0xe4ec, +0x9d83,0x9d84,0x9d85,0xe4f2,0x9d86,0xceab,0x9d87,0x9d88, +0x9d89,0x9d8a,0x9d8b,0x9d8c,0x9d8d,0x9d8e,0x9d8f,0x9d90, +0xc5cb,0x9d91,0x9d92,0x9d93,0xc7b1,0x9d94,0xc2ba,0x9d95, +0x9d96,0x9d97,0xe4ea,0x9d98,0x9d99,0x9d9a,0xc1ca,0x9d9b, +0x9d9c,0x9d9d,0x9d9e,0x9d9f,0x9da0,0xccb6,0xb3b1,0x9da1, +0x9da2,0x9da3,0xe4fb,0x9da4,0xe4f3,0x9da5,0x9da6,0x9da7, +0xe4fa,0x9da8,0xe4fd,0x9da9,0xe4fc,0x9daa,0x9dab,0x9dac, +0x9dad,0x9dae,0x9daf,0x9db0,0xb3ce,0x9db1,0x9db2,0x9db3, +0xb3ba,0xe4f7,0x9db4,0x9db5,0xe4f9,0xe4f8,0xc5ec,0x9db6, +0x9db7,0x9db8,0x9db9,0x9dba,0x9dbb,0x9dbc,0x9dbd,0x9dbe, +0x9dbf,0x9dc0,0x9dc1,0x9dc2,0xc0bd,0x9dc3,0x9dc4,0x9dc5, +0x9dc6,0xd4e8,0x9dc7,0x9dc8,0x9dc9,0x9dca,0x9dcb,0xe5a2, +0x9dcc,0x9dcd,0x9dce,0x9dcf,0x9dd0,0x9dd1,0x9dd2,0x9dd3, +0x9dd4,0x9dd5,0x9dd6,0xb0c4,0x9dd7,0x9dd8,0xe5a4,0x9dd9, +0x9dda,0xe5a3,0x9ddb,0x9ddc,0x9ddd,0x9dde,0x9ddf,0x9de0, +0xbca4,0x9de1,0xe5a5,0x9de2,0x9de3,0x9de4,0x9de5,0x9de6, +0x9de7,0xe5a1,0x9de8,0x9de9,0x9dea,0x9deb,0x9dec,0x9ded, +0x9dee,0xe4fe,0xb1f4,0x9def,0x9df0,0x9df1,0x9df2,0x9df3, +0x9df4,0x9df5,0x9df6,0x9df7,0x9df8,0x9df9,0xe5a8,0x9dfa, +0xe5a9,0xe5a6,0x9dfb,0x9dfc,0x9dfd,0x9dfe,0x9e40,0x9e41, +0x9e42,0x9e43,0x9e44,0x9e45,0x9e46,0x9e47,0xe5a7,0xe5aa, +0x9e48,0x9e49,0x9e4a,0x9e4b,0x9e4c,0x9e4d,0x9e4e,0x9e4f, +0x9e50,0x9e51,0x9e52,0x9e53,0x9e54,0x9e55,0x9e56,0x9e57, +0x9e58,0x9e59,0x9e5a,0x9e5b,0x9e5c,0x9e5d,0x9e5e,0x9e5f, +0x9e60,0x9e61,0x9e62,0x9e63,0x9e64,0x9e65,0x9e66,0x9e67, +0x9e68,0xc6d9,0x9e69,0x9e6a,0x9e6b,0x9e6c,0x9e6d,0x9e6e, +0x9e6f,0x9e70,0xe5ab,0xe5ad,0x9e71,0x9e72,0x9e73,0x9e74, +0x9e75,0x9e76,0x9e77,0xe5ac,0x9e78,0x9e79,0x9e7a,0x9e7b, +0x9e7c,0x9e7d,0x9e7e,0x9e80,0x9e81,0x9e82,0x9e83,0x9e84, +0x9e85,0x9e86,0x9e87,0x9e88,0x9e89,0xe5af,0x9e8a,0x9e8b, +0x9e8c,0xe5ae,0x9e8d,0x9e8e,0x9e8f,0x9e90,0x9e91,0x9e92, +0x9e93,0x9e94,0x9e95,0x9e96,0x9e97,0x9e98,0x9e99,0x9e9a, +0x9e9b,0x9e9c,0x9e9d,0x9e9e,0xb9e0,0x9e9f,0x9ea0,0xe5b0, +0x9ea1,0x9ea2,0x9ea3,0x9ea4,0x9ea5,0x9ea6,0x9ea7,0x9ea8, +0x9ea9,0x9eaa,0x9eab,0x9eac,0x9ead,0x9eae,0xe5b1,0x9eaf, +0x9eb0,0x9eb1,0x9eb2,0x9eb3,0x9eb4,0x9eb5,0x9eb6,0x9eb7, +0x9eb8,0x9eb9,0x9eba,0xbbf0,0xece1,0xc3f0,0x9ebb,0xb5c6, +0xbbd2,0x9ebc,0x9ebd,0x9ebe,0x9ebf,0xc1e9,0xd4ee,0x9ec0, +0xbec4,0x9ec1,0x9ec2,0x9ec3,0xd7c6,0x9ec4,0xd4d6,0xb2d3, +0xecbe,0x9ec5,0x9ec6,0x9ec7,0x9ec8,0xeac1,0x9ec9,0x9eca, +0x9ecb,0xc2af,0xb4b6,0x9ecc,0x9ecd,0x9ece,0xd1d7,0x9ecf, +0x9ed0,0x9ed1,0xb3b4,0x9ed2,0xc8b2,0xbfbb,0xecc0,0x9ed3, +0x9ed4,0xd6cb,0x9ed5,0x9ed6,0xecbf,0xecc1,0x9ed7,0x9ed8, +0x9ed9,0x9eda,0x9edb,0x9edc,0x9edd,0x9ede,0x9edf,0x9ee0, +0x9ee1,0x9ee2,0x9ee3,0xecc5,0xbee6,0xccbf,0xc5da,0xbebc, +0x9ee4,0xecc6,0x9ee5,0xb1fe,0x9ee6,0x9ee7,0x9ee8,0xecc4, +0xd5a8,0xb5e3,0x9ee9,0xecc2,0xc1b6,0xb3e3,0x9eea,0x9eeb, +0xecc3,0xcbb8,0xc0c3,0xccfe,0x9eec,0x9eed,0x9eee,0x9eef, +0xc1d2,0x9ef0,0xecc8,0x9ef1,0x9ef2,0x9ef3,0x9ef4,0x9ef5, +0x9ef6,0x9ef7,0x9ef8,0x9ef9,0x9efa,0x9efb,0x9efc,0x9efd, +0xbae6,0xc0d3,0x9efe,0xd6f2,0x9f40,0x9f41,0x9f42,0xd1cc, +0x9f43,0x9f44,0x9f45,0x9f46,0xbfbe,0x9f47,0xb7b3,0xc9d5, +0xecc7,0xbbe2,0x9f48,0xcccc,0xbdfd,0xc8c8,0x9f49,0xcfa9, +0x9f4a,0x9f4b,0x9f4c,0x9f4d,0x9f4e,0x9f4f,0x9f50,0xcde9, +0x9f51,0xc5eb,0x9f52,0x9f53,0x9f54,0xb7e9,0x9f55,0x9f56, +0x9f57,0x9f58,0x9f59,0x9f5a,0x9f5b,0x9f5c,0x9f5d,0x9f5e, +0x9f5f,0xd1c9,0xbab8,0x9f60,0x9f61,0x9f62,0x9f63,0x9f64, +0xecc9,0x9f65,0x9f66,0xecca,0x9f67,0xbbc0,0xeccb,0x9f68, +0xece2,0xb1ba,0xb7d9,0x9f69,0x9f6a,0x9f6b,0x9f6c,0x9f6d, +0x9f6e,0x9f6f,0x9f70,0x9f71,0x9f72,0x9f73,0xbdb9,0x9f74, +0x9f75,0x9f76,0x9f77,0x9f78,0x9f79,0x9f7a,0x9f7b,0xeccc, +0xd1e6,0xeccd,0x9f7c,0x9f7d,0x9f7e,0x9f80,0xc8bb,0x9f81, +0x9f82,0x9f83,0x9f84,0x9f85,0x9f86,0x9f87,0x9f88,0x9f89, +0x9f8a,0x9f8b,0x9f8c,0x9f8d,0x9f8e,0xecd1,0x9f8f,0x9f90, +0x9f91,0x9f92,0xecd3,0x9f93,0xbbcd,0x9f94,0xbce5,0x9f95, +0x9f96,0x9f97,0x9f98,0x9f99,0x9f9a,0x9f9b,0x9f9c,0x9f9d, +0x9f9e,0x9f9f,0x9fa0,0x9fa1,0xeccf,0x9fa2,0xc9b7,0x9fa3, +0x9fa4,0x9fa5,0x9fa6,0x9fa7,0xc3ba,0x9fa8,0xece3,0xd5d5, +0xecd0,0x9fa9,0x9faa,0x9fab,0x9fac,0x9fad,0xd6f3,0x9fae, +0x9faf,0x9fb0,0xecd2,0xecce,0x9fb1,0x9fb2,0x9fb3,0x9fb4, +0xecd4,0x9fb5,0xecd5,0x9fb6,0x9fb7,0xc9bf,0x9fb8,0x9fb9, +0x9fba,0x9fbb,0x9fbc,0x9fbd,0xcfa8,0x9fbe,0x9fbf,0x9fc0, +0x9fc1,0x9fc2,0xd0dc,0x9fc3,0x9fc4,0x9fc5,0x9fc6,0xd1ac, +0x9fc7,0x9fc8,0x9fc9,0x9fca,0xc8db,0x9fcb,0x9fcc,0x9fcd, +0xecd6,0xcef5,0x9fce,0x9fcf,0x9fd0,0x9fd1,0x9fd2,0xcaec, +0xecda,0x9fd3,0x9fd4,0x9fd5,0x9fd6,0x9fd7,0x9fd8,0x9fd9, +0xecd9,0x9fda,0x9fdb,0x9fdc,0xb0be,0x9fdd,0x9fde,0x9fdf, +0x9fe0,0x9fe1,0x9fe2,0xecd7,0x9fe3,0xecd8,0x9fe4,0x9fe5, +0x9fe6,0xece4,0x9fe7,0x9fe8,0x9fe9,0x9fea,0x9feb,0x9fec, +0x9fed,0x9fee,0x9fef,0xc8bc,0x9ff0,0x9ff1,0x9ff2,0x9ff3, +0x9ff4,0x9ff5,0x9ff6,0x9ff7,0x9ff8,0x9ff9,0xc1c7,0x9ffa, +0x9ffb,0x9ffc,0x9ffd,0x9ffe,0xecdc,0xd1e0,0xa040,0xa041, +0xa042,0xa043,0xa044,0xa045,0xa046,0xa047,0xa048,0xa049, +0xecdb,0xa04a,0xa04b,0xa04c,0xa04d,0xd4ef,0xa04e,0xecdd, +0xa04f,0xa050,0xa051,0xa052,0xa053,0xa054,0xdbc6,0xa055, +0xa056,0xa057,0xa058,0xa059,0xa05a,0xa05b,0xa05c,0xa05d, +0xa05e,0xecde,0xa05f,0xa060,0xa061,0xa062,0xa063,0xa064, +0xa065,0xa066,0xa067,0xa068,0xa069,0xa06a,0xb1ac,0xa06b, +0xa06c,0xa06d,0xa06e,0xa06f,0xa070,0xa071,0xa072,0xa073, +0xa074,0xa075,0xa076,0xa077,0xa078,0xa079,0xa07a,0xa07b, +0xa07c,0xa07d,0xa07e,0xa080,0xa081,0xecdf,0xa082,0xa083, +0xa084,0xa085,0xa086,0xa087,0xa088,0xa089,0xa08a,0xa08b, +0xece0,0xa08c,0xd7a6,0xa08d,0xc5c0,0xa08e,0xa08f,0xa090, +0xebbc,0xb0ae,0xa091,0xa092,0xa093,0xbef4,0xb8b8,0xd2af, +0xb0d6,0xb5f9,0xa094,0xd8b3,0xa095,0xcbac,0xa096,0xe3dd, +0xa097,0xa098,0xa099,0xa09a,0xa09b,0xa09c,0xa09d,0xc6ac, +0xb0e6,0xa09e,0xa09f,0xa0a0,0xc5c6,0xebb9,0xa0a1,0xa0a2, +0xa0a3,0xa0a4,0xebba,0xa0a5,0xa0a6,0xa0a7,0xebbb,0xa0a8, +0xa0a9,0xd1c0,0xa0aa,0xc5a3,0xa0ab,0xeaf2,0xa0ac,0xc4b2, +0xa0ad,0xc4b5,0xc0ce,0xa0ae,0xa0af,0xa0b0,0xeaf3,0xc4c1, +0xa0b1,0xceef,0xa0b2,0xa0b3,0xa0b4,0xa0b5,0xeaf0,0xeaf4, +0xa0b6,0xa0b7,0xc9fc,0xa0b8,0xa0b9,0xc7a3,0xa0ba,0xa0bb, +0xa0bc,0xccd8,0xcefe,0xa0bd,0xa0be,0xa0bf,0xeaf5,0xeaf6, +0xcfac,0xc0e7,0xa0c0,0xa0c1,0xeaf7,0xa0c2,0xa0c3,0xa0c4, +0xa0c5,0xa0c6,0xb6bf,0xeaf8,0xa0c7,0xeaf9,0xa0c8,0xeafa, +0xa0c9,0xa0ca,0xeafb,0xa0cb,0xa0cc,0xa0cd,0xa0ce,0xa0cf, +0xa0d0,0xa0d1,0xa0d2,0xa0d3,0xa0d4,0xa0d5,0xa0d6,0xeaf1, +0xa0d7,0xa0d8,0xa0d9,0xa0da,0xa0db,0xa0dc,0xa0dd,0xa0de, +0xa0df,0xa0e0,0xa0e1,0xa0e2,0xc8ae,0xe1eb,0xa0e3,0xb7b8, +0xe1ec,0xa0e4,0xa0e5,0xa0e6,0xe1ed,0xa0e7,0xd7b4,0xe1ee, +0xe1ef,0xd3cc,0xa0e8,0xa0e9,0xa0ea,0xa0eb,0xa0ec,0xa0ed, +0xa0ee,0xe1f1,0xbff1,0xe1f0,0xb5d2,0xa0ef,0xa0f0,0xa0f1, +0xb1b7,0xa0f2,0xa0f3,0xa0f4,0xa0f5,0xe1f3,0xe1f2,0xa0f6, +0xbafc,0xa0f7,0xe1f4,0xa0f8,0xa0f9,0xa0fa,0xa0fb,0xb9b7, +0xa0fc,0xbed1,0xa0fd,0xa0fe,0xaa40,0xaa41,0xc4fc,0xaa42, +0xbadd,0xbdc6,0xaa43,0xaa44,0xaa45,0xaa46,0xaa47,0xaa48, +0xe1f5,0xe1f7,0xaa49,0xaa4a,0xb6c0,0xcfc1,0xcaa8,0xe1f6, +0xd5f8,0xd3fc,0xe1f8,0xe1fc,0xe1f9,0xaa4b,0xaa4c,0xe1fa, +0xc0ea,0xaa4d,0xe1fe,0xe2a1,0xc0c7,0xaa4e,0xaa4f,0xaa50, +0xaa51,0xe1fb,0xaa52,0xe1fd,0xaa53,0xaa54,0xaa55,0xaa56, +0xaa57,0xaa58,0xe2a5,0xaa59,0xaa5a,0xaa5b,0xc1d4,0xaa5c, +0xaa5d,0xaa5e,0xaa5f,0xe2a3,0xaa60,0xe2a8,0xb2fe,0xe2a2, +0xaa61,0xaa62,0xaa63,0xc3cd,0xb2c2,0xe2a7,0xe2a6,0xaa64, +0xaa65,0xe2a4,0xe2a9,0xaa66,0xaa67,0xe2ab,0xaa68,0xaa69, +0xaa6a,0xd0c9,0xd6ed,0xc3a8,0xe2ac,0xaa6b,0xcfd7,0xaa6c, +0xaa6d,0xe2ae,0xaa6e,0xaa6f,0xbaef,0xaa70,0xaa71,0xe9e0, +0xe2ad,0xe2aa,0xaa72,0xaa73,0xaa74,0xaa75,0xbbab,0xd4b3, +0xaa76,0xaa77,0xaa78,0xaa79,0xaa7a,0xaa7b,0xaa7c,0xaa7d, +0xaa7e,0xaa80,0xaa81,0xaa82,0xaa83,0xe2b0,0xaa84,0xaa85, +0xe2af,0xaa86,0xe9e1,0xaa87,0xaa88,0xaa89,0xaa8a,0xe2b1, +0xaa8b,0xaa8c,0xaa8d,0xaa8e,0xaa8f,0xaa90,0xaa91,0xaa92, +0xe2b2,0xaa93,0xaa94,0xaa95,0xaa96,0xaa97,0xaa98,0xaa99, +0xaa9a,0xaa9b,0xaa9c,0xaa9d,0xe2b3,0xcca1,0xaa9e,0xe2b4, +0xaa9f,0xaaa0,0xab40,0xab41,0xab42,0xab43,0xab44,0xab45, +0xab46,0xab47,0xab48,0xab49,0xab4a,0xab4b,0xe2b5,0xab4c, +0xab4d,0xab4e,0xab4f,0xab50,0xd0fe,0xab51,0xab52,0xc2ca, +0xab53,0xd3f1,0xab54,0xcdf5,0xab55,0xab56,0xe7e0,0xab57, +0xab58,0xe7e1,0xab59,0xab5a,0xab5b,0xab5c,0xbec1,0xab5d, +0xab5e,0xab5f,0xab60,0xc2ea,0xab61,0xab62,0xab63,0xe7e4, +0xab64,0xab65,0xe7e3,0xab66,0xab67,0xab68,0xab69,0xab6a, +0xab6b,0xcde6,0xab6c,0xc3b5,0xab6d,0xab6e,0xe7e2,0xbbb7, +0xcfd6,0xab6f,0xc1e1,0xe7e9,0xab70,0xab71,0xab72,0xe7e8, +0xab73,0xab74,0xe7f4,0xb2a3,0xab75,0xab76,0xab77,0xab78, +0xe7ea,0xab79,0xe7e6,0xab7a,0xab7b,0xab7c,0xab7d,0xab7e, +0xe7ec,0xe7eb,0xc9ba,0xab80,0xab81,0xd5e4,0xab82,0xe7e5, +0xb7a9,0xe7e7,0xab83,0xab84,0xab85,0xab86,0xab87,0xab88, +0xab89,0xe7ee,0xab8a,0xab8b,0xab8c,0xab8d,0xe7f3,0xab8e, +0xd6e9,0xab8f,0xab90,0xab91,0xab92,0xe7ed,0xab93,0xe7f2, +0xab94,0xe7f1,0xab95,0xab96,0xab97,0xb0e0,0xab98,0xab99, +0xab9a,0xab9b,0xe7f5,0xab9c,0xab9d,0xab9e,0xab9f,0xaba0, +0xac40,0xac41,0xac42,0xac43,0xac44,0xac45,0xac46,0xac47, +0xac48,0xac49,0xac4a,0xc7f2,0xac4b,0xc0c5,0xc0ed,0xac4c, +0xac4d,0xc1f0,0xe7f0,0xac4e,0xac4f,0xac50,0xac51,0xe7f6, +0xcbf6,0xac52,0xac53,0xac54,0xac55,0xac56,0xac57,0xac58, +0xac59,0xac5a,0xe8a2,0xe8a1,0xac5b,0xac5c,0xac5d,0xac5e, +0xac5f,0xac60,0xd7c1,0xac61,0xac62,0xe7fa,0xe7f9,0xac63, +0xe7fb,0xac64,0xe7f7,0xac65,0xe7fe,0xac66,0xe7fd,0xac67, +0xe7fc,0xac68,0xac69,0xc1d5,0xc7d9,0xc5fd,0xc5c3,0xac6a, +0xac6b,0xac6c,0xac6d,0xac6e,0xc7ed,0xac6f,0xac70,0xac71, +0xac72,0xe8a3,0xac73,0xac74,0xac75,0xac76,0xac77,0xac78, +0xac79,0xac7a,0xac7b,0xac7c,0xac7d,0xac7e,0xac80,0xac81, +0xac82,0xac83,0xac84,0xac85,0xac86,0xe8a6,0xac87,0xe8a5, +0xac88,0xe8a7,0xbaf7,0xe7f8,0xe8a4,0xac89,0xc8f0,0xc9aa, +0xac8a,0xac8b,0xac8c,0xac8d,0xac8e,0xac8f,0xac90,0xac91, +0xac92,0xac93,0xac94,0xac95,0xac96,0xe8a9,0xac97,0xac98, +0xb9e5,0xac99,0xac9a,0xac9b,0xac9c,0xac9d,0xd1fe,0xe8a8, +0xac9e,0xac9f,0xaca0,0xad40,0xad41,0xad42,0xe8aa,0xad43, +0xe8ad,0xe8ae,0xad44,0xc1a7,0xad45,0xad46,0xad47,0xe8af, +0xad48,0xad49,0xad4a,0xe8b0,0xad4b,0xad4c,0xe8ac,0xad4d, +0xe8b4,0xad4e,0xad4f,0xad50,0xad51,0xad52,0xad53,0xad54, +0xad55,0xad56,0xad57,0xad58,0xe8ab,0xad59,0xe8b1,0xad5a, +0xad5b,0xad5c,0xad5d,0xad5e,0xad5f,0xad60,0xad61,0xe8b5, +0xe8b2,0xe8b3,0xad62,0xad63,0xad64,0xad65,0xad66,0xad67, +0xad68,0xad69,0xad6a,0xad6b,0xad6c,0xad6d,0xad6e,0xad6f, +0xad70,0xad71,0xe8b7,0xad72,0xad73,0xad74,0xad75,0xad76, +0xad77,0xad78,0xad79,0xad7a,0xad7b,0xad7c,0xad7d,0xad7e, +0xad80,0xad81,0xad82,0xad83,0xad84,0xad85,0xad86,0xad87, +0xad88,0xad89,0xe8b6,0xad8a,0xad8b,0xad8c,0xad8d,0xad8e, +0xad8f,0xad90,0xad91,0xad92,0xb9cf,0xad93,0xf0ac,0xad94, +0xf0ad,0xad95,0xc6b0,0xb0ea,0xc8bf,0xad96,0xcddf,0xad97, +0xad98,0xad99,0xad9a,0xad9b,0xad9c,0xad9d,0xcecd,0xeab1, +0xad9e,0xad9f,0xada0,0xae40,0xeab2,0xae41,0xc6bf,0xb4c9, +0xae42,0xae43,0xae44,0xae45,0xae46,0xae47,0xae48,0xeab3, +0xae49,0xae4a,0xae4b,0xae4c,0xd5e7,0xae4d,0xae4e,0xae4f, +0xae50,0xae51,0xae52,0xae53,0xae54,0xddf9,0xae55,0xeab4, +0xae56,0xeab5,0xae57,0xeab6,0xae58,0xae59,0xae5a,0xae5b, +0xb8ca,0xdfb0,0xc9f5,0xae5c,0xccf0,0xae5d,0xae5e,0xc9fa, +0xae5f,0xae60,0xae61,0xae62,0xae63,0xc9fb,0xae64,0xae65, +0xd3c3,0xcba6,0xae66,0xb8a6,0xf0ae,0xb1c2,0xae67,0xe5b8, +0xccef,0xd3c9,0xbcd7,0xc9ea,0xae68,0xb5e7,0xae69,0xc4d0, +0xb5e9,0xae6a,0xeeae,0xbbad,0xae6b,0xae6c,0xe7de,0xae6d, +0xeeaf,0xae6e,0xae6f,0xae70,0xae71,0xb3a9,0xae72,0xae73, +0xeeb2,0xae74,0xae75,0xeeb1,0xbde7,0xae76,0xeeb0,0xceb7, +0xae77,0xae78,0xae79,0xae7a,0xc5cf,0xae7b,0xae7c,0xae7d, +0xae7e,0xc1f4,0xdbce,0xeeb3,0xd0f3,0xae80,0xae81,0xae82, +0xae83,0xae84,0xae85,0xae86,0xae87,0xc2d4,0xc6e8,0xae88, +0xae89,0xae8a,0xb7ac,0xae8b,0xae8c,0xae8d,0xae8e,0xae8f, +0xae90,0xae91,0xeeb4,0xae92,0xb3eb,0xae93,0xae94,0xae95, +0xbbfb,0xeeb5,0xae96,0xae97,0xae98,0xae99,0xae9a,0xe7dc, +0xae9b,0xae9c,0xae9d,0xeeb6,0xae9e,0xae9f,0xbdae,0xaea0, +0xaf40,0xaf41,0xaf42,0xf1e2,0xaf43,0xaf44,0xaf45,0xcae8, +0xaf46,0xd2c9,0xf0da,0xaf47,0xf0db,0xaf48,0xf0dc,0xc1c6, +0xaf49,0xb8ed,0xbece,0xaf4a,0xaf4b,0xf0de,0xaf4c,0xc5b1, +0xf0dd,0xd1f1,0xaf4d,0xf0e0,0xb0cc,0xbdea,0xaf4e,0xaf4f, +0xaf50,0xaf51,0xaf52,0xd2df,0xf0df,0xaf53,0xb4af,0xb7e8, +0xf0e6,0xf0e5,0xc6a3,0xf0e1,0xf0e2,0xb4c3,0xaf54,0xaf55, +0xf0e3,0xd5ee,0xaf56,0xaf57,0xccdb,0xbed2,0xbcb2,0xaf58, +0xaf59,0xaf5a,0xf0e8,0xf0e7,0xf0e4,0xb2a1,0xaf5b,0xd6a2, +0xd3b8,0xbeb7,0xc8ac,0xaf5c,0xaf5d,0xf0ea,0xaf5e,0xaf5f, +0xaf60,0xaf61,0xd1f7,0xaf62,0xd6cc,0xbadb,0xf0e9,0xaf63, +0xb6bb,0xaf64,0xaf65,0xcdb4,0xaf66,0xaf67,0xc6a6,0xaf68, +0xaf69,0xaf6a,0xc1a1,0xf0eb,0xf0ee,0xaf6b,0xf0ed,0xf0f0, +0xf0ec,0xaf6c,0xbbbe,0xf0ef,0xaf6d,0xaf6e,0xaf6f,0xaf70, +0xccb5,0xf0f2,0xaf71,0xaf72,0xb3d5,0xaf73,0xaf74,0xaf75, +0xaf76,0xb1d4,0xaf77,0xaf78,0xf0f3,0xaf79,0xaf7a,0xf0f4, +0xf0f6,0xb4e1,0xaf7b,0xf0f1,0xaf7c,0xf0f7,0xaf7d,0xaf7e, +0xaf80,0xaf81,0xf0fa,0xaf82,0xf0f8,0xaf83,0xaf84,0xaf85, +0xf0f5,0xaf86,0xaf87,0xaf88,0xaf89,0xf0fd,0xaf8a,0xf0f9, +0xf0fc,0xf0fe,0xaf8b,0xf1a1,0xaf8c,0xaf8d,0xaf8e,0xcec1, +0xf1a4,0xaf8f,0xf1a3,0xaf90,0xc1f6,0xf0fb,0xcadd,0xaf91, +0xaf92,0xb4f1,0xb1f1,0xccb1,0xaf93,0xf1a6,0xaf94,0xaf95, +0xf1a7,0xaf96,0xaf97,0xf1ac,0xd5ce,0xf1a9,0xaf98,0xaf99, +0xc8b3,0xaf9a,0xaf9b,0xaf9c,0xf1a2,0xaf9d,0xf1ab,0xf1a8, +0xf1a5,0xaf9e,0xaf9f,0xf1aa,0xafa0,0xb040,0xb041,0xb042, +0xb043,0xb044,0xb045,0xb046,0xb0a9,0xf1ad,0xb047,0xb048, +0xb049,0xb04a,0xb04b,0xb04c,0xf1af,0xb04d,0xf1b1,0xb04e, +0xb04f,0xb050,0xb051,0xb052,0xf1b0,0xb053,0xf1ae,0xb054, +0xb055,0xb056,0xb057,0xd1a2,0xb058,0xb059,0xb05a,0xb05b, +0xb05c,0xb05d,0xb05e,0xf1b2,0xb05f,0xb060,0xb061,0xf1b3, +0xb062,0xb063,0xb064,0xb065,0xb066,0xb067,0xb068,0xb069, +0xb9ef,0xb06a,0xb06b,0xb5c7,0xb06c,0xb0d7,0xb0d9,0xb06d, +0xb06e,0xb06f,0xd4ed,0xb070,0xb5c4,0xb071,0xbdd4,0xbbca, +0xf0a7,0xb072,0xb073,0xb8de,0xb074,0xb075,0xf0a8,0xb076, +0xb077,0xb0a8,0xb078,0xf0a9,0xb079,0xb07a,0xcdee,0xb07b, +0xb07c,0xf0aa,0xb07d,0xb07e,0xb080,0xb081,0xb082,0xb083, +0xb084,0xb085,0xb086,0xb087,0xf0ab,0xb088,0xb089,0xb08a, +0xb08b,0xb08c,0xb08d,0xb08e,0xb08f,0xb090,0xc6a4,0xb091, +0xb092,0xd6e5,0xf1e4,0xb093,0xf1e5,0xb094,0xb095,0xb096, +0xb097,0xb098,0xb099,0xb09a,0xb09b,0xb09c,0xb09d,0xc3f3, +0xb09e,0xb09f,0xd3db,0xb0a0,0xb140,0xd6d1,0xc5e8,0xb141, +0xd3af,0xb142,0xd2e6,0xb143,0xb144,0xeec1,0xb0bb,0xd5b5, +0xd1ce,0xbce0,0xbad0,0xb145,0xbff8,0xb146,0xb8c7,0xb5c1, +0xc5cc,0xb147,0xb148,0xcaa2,0xb149,0xb14a,0xb14b,0xc3cb, +0xb14c,0xb14d,0xb14e,0xb14f,0xb150,0xeec2,0xb151,0xb152, +0xb153,0xb154,0xb155,0xb156,0xb157,0xb158,0xc4bf,0xb6a2, +0xb159,0xedec,0xc3a4,0xb15a,0xd6b1,0xb15b,0xb15c,0xb15d, +0xcfe0,0xedef,0xb15e,0xb15f,0xc5ce,0xb160,0xb6dc,0xb161, +0xb162,0xcaa1,0xb163,0xb164,0xeded,0xb165,0xb166,0xedf0, +0xedf1,0xc3bc,0xb167,0xbfb4,0xb168,0xedee,0xb169,0xb16a, +0xb16b,0xb16c,0xb16d,0xb16e,0xb16f,0xb170,0xb171,0xb172, +0xb173,0xedf4,0xedf2,0xb174,0xb175,0xb176,0xb177,0xd5e6, +0xc3df,0xb178,0xedf3,0xb179,0xb17a,0xb17b,0xedf6,0xb17c, +0xd5a3,0xd1a3,0xb17d,0xb17e,0xb180,0xedf5,0xb181,0xc3d0, +0xb182,0xb183,0xb184,0xb185,0xb186,0xedf7,0xbff4,0xbeec, +0xedf8,0xb187,0xccf7,0xb188,0xd1db,0xb189,0xb18a,0xb18b, +0xd7c5,0xd5f6,0xb18c,0xedfc,0xb18d,0xb18e,0xb18f,0xedfb, +0xb190,0xb191,0xb192,0xb193,0xb194,0xb195,0xb196,0xb197, +0xedf9,0xedfa,0xb198,0xb199,0xb19a,0xb19b,0xb19c,0xb19d, +0xb19e,0xb19f,0xedfd,0xbea6,0xb1a0,0xb240,0xb241,0xb242, +0xb243,0xcbaf,0xeea1,0xb6bd,0xb244,0xeea2,0xc4c0,0xb245, +0xedfe,0xb246,0xb247,0xbdde,0xb2c7,0xb248,0xb249,0xb24a, +0xb24b,0xb24c,0xb24d,0xb24e,0xb24f,0xb250,0xb251,0xb252, +0xb253,0xb6c3,0xb254,0xb255,0xb256,0xeea5,0xd8ba,0xeea3, +0xeea6,0xb257,0xb258,0xb259,0xc3e9,0xb3f2,0xb25a,0xb25b, +0xb25c,0xb25d,0xb25e,0xb25f,0xeea7,0xeea4,0xcfb9,0xb260, +0xb261,0xeea8,0xc2f7,0xb262,0xb263,0xb264,0xb265,0xb266, +0xb267,0xb268,0xb269,0xb26a,0xb26b,0xb26c,0xb26d,0xeea9, +0xeeaa,0xb26e,0xdeab,0xb26f,0xb270,0xc6b3,0xb271,0xc7c6, +0xb272,0xd6f5,0xb5c9,0xb273,0xcbb2,0xb274,0xb275,0xb276, +0xeeab,0xb277,0xb278,0xcdab,0xb279,0xeeac,0xb27a,0xb27b, +0xb27c,0xb27d,0xb27e,0xd5b0,0xb280,0xeead,0xb281,0xf6c4, +0xb282,0xb283,0xb284,0xb285,0xb286,0xb287,0xb288,0xb289, +0xb28a,0xb28b,0xb28c,0xb28d,0xb28e,0xdbc7,0xb28f,0xb290, +0xb291,0xb292,0xb293,0xb294,0xb295,0xb296,0xb297,0xb4a3, +0xb298,0xb299,0xb29a,0xc3ac,0xf1e6,0xb29b,0xb29c,0xb29d, +0xb29e,0xb29f,0xcab8,0xd2d3,0xb2a0,0xd6aa,0xb340,0xeff2, +0xb341,0xbed8,0xb342,0xbdc3,0xeff3,0xb6cc,0xb0ab,0xb343, +0xb344,0xb345,0xb346,0xcaaf,0xb347,0xb348,0xedb6,0xb349, +0xedb7,0xb34a,0xb34b,0xb34c,0xb34d,0xcef9,0xb7af,0xbff3, +0xedb8,0xc2eb,0xc9b0,0xb34e,0xb34f,0xb350,0xb351,0xb352, +0xb353,0xedb9,0xb354,0xb355,0xc6f6,0xbfb3,0xb356,0xb357, +0xb358,0xedbc,0xc5f8,0xb359,0xd1d0,0xb35a,0xd7a9,0xedba, +0xedbb,0xb35b,0xd1e2,0xb35c,0xedbf,0xedc0,0xb35d,0xedc4, +0xb35e,0xb35f,0xb360,0xedc8,0xb361,0xedc6,0xedce,0xd5e8, +0xb362,0xedc9,0xb363,0xb364,0xedc7,0xedbe,0xb365,0xb366, +0xc5e9,0xb367,0xb368,0xb369,0xc6c6,0xb36a,0xb36b,0xc9e9, +0xd4d2,0xedc1,0xedc2,0xedc3,0xedc5,0xb36c,0xc0f9,0xb36d, +0xb4a1,0xb36e,0xb36f,0xb370,0xb371,0xb9e8,0xb372,0xedd0, +0xb373,0xb374,0xb375,0xb376,0xedd1,0xb377,0xedca,0xb378, +0xedcf,0xb379,0xcef8,0xb37a,0xb37b,0xcbb6,0xedcc,0xedcd, +0xb37c,0xb37d,0xb37e,0xb380,0xb381,0xcff5,0xb382,0xb383, +0xb384,0xb385,0xb386,0xb387,0xb388,0xb389,0xb38a,0xb38b, +0xb38c,0xb38d,0xedd2,0xc1f2,0xd3b2,0xedcb,0xc8b7,0xb38e, +0xb38f,0xb390,0xb391,0xb392,0xb393,0xb394,0xb395,0xbcef, +0xb396,0xb397,0xb398,0xb399,0xc5f0,0xb39a,0xb39b,0xb39c, +0xb39d,0xb39e,0xb39f,0xb3a0,0xb440,0xb441,0xb442,0xedd6, +0xb443,0xb5ef,0xb444,0xb445,0xc2b5,0xb0ad,0xcbe9,0xb446, +0xb447,0xb1ae,0xb448,0xedd4,0xb449,0xb44a,0xb44b,0xcdeb, +0xb5e2,0xb44c,0xedd5,0xedd3,0xedd7,0xb44d,0xb44e,0xb5fa, +0xb44f,0xedd8,0xb450,0xedd9,0xb451,0xeddc,0xb452,0xb1cc, +0xb453,0xb454,0xb455,0xb456,0xb457,0xb458,0xb459,0xb45a, +0xc5f6,0xbcee,0xedda,0xccbc,0xb2ea,0xb45b,0xb45c,0xb45d, +0xb45e,0xeddb,0xb45f,0xb460,0xb461,0xb462,0xc4eb,0xb463, +0xb464,0xb4c5,0xb465,0xb466,0xb467,0xb0f5,0xb468,0xb469, +0xb46a,0xeddf,0xc0da,0xb4e8,0xb46b,0xb46c,0xb46d,0xb46e, +0xc5cd,0xb46f,0xb470,0xb471,0xeddd,0xbfc4,0xb472,0xb473, +0xb474,0xedde,0xb475,0xb476,0xb477,0xb478,0xb479,0xb47a, +0xb47b,0xb47c,0xb47d,0xb47e,0xb480,0xb481,0xb482,0xb483, +0xc4a5,0xb484,0xb485,0xb486,0xede0,0xb487,0xb488,0xb489, +0xb48a,0xb48b,0xede1,0xb48c,0xede3,0xb48d,0xb48e,0xc1d7, +0xb48f,0xb490,0xbbc7,0xb491,0xb492,0xb493,0xb494,0xb495, +0xb496,0xbdb8,0xb497,0xb498,0xb499,0xede2,0xb49a,0xb49b, +0xb49c,0xb49d,0xb49e,0xb49f,0xb4a0,0xb540,0xb541,0xb542, +0xb543,0xb544,0xb545,0xede4,0xb546,0xb547,0xb548,0xb549, +0xb54a,0xb54b,0xb54c,0xb54d,0xb54e,0xb54f,0xede6,0xb550, +0xb551,0xb552,0xb553,0xb554,0xede5,0xb555,0xb556,0xb557, +0xb558,0xb559,0xb55a,0xb55b,0xb55c,0xb55d,0xb55e,0xb55f, +0xb560,0xb561,0xb562,0xb563,0xede7,0xb564,0xb565,0xb566, +0xb567,0xb568,0xcabe,0xecea,0xc0f1,0xb569,0xc9e7,0xb56a, +0xeceb,0xc6ee,0xb56b,0xb56c,0xb56d,0xb56e,0xecec,0xb56f, +0xc6ed,0xeced,0xb570,0xb571,0xb572,0xb573,0xb574,0xb575, +0xb576,0xb577,0xb578,0xecf0,0xb579,0xb57a,0xd7e6,0xecf3, +0xb57b,0xb57c,0xecf1,0xecee,0xecef,0xd7a3,0xc9f1,0xcbee, +0xecf4,0xb57d,0xecf2,0xb57e,0xb580,0xcfe9,0xb581,0xecf6, +0xc6b1,0xb582,0xb583,0xb584,0xb585,0xbcc0,0xb586,0xecf5, +0xb587,0xb588,0xb589,0xb58a,0xb58b,0xb58c,0xb58d,0xb5bb, +0xbbf6,0xb58e,0xecf7,0xb58f,0xb590,0xb591,0xb592,0xb593, +0xd9f7,0xbdfb,0xb594,0xb595,0xc2bb,0xecf8,0xb596,0xb597, +0xb598,0xb599,0xecf9,0xb59a,0xb59b,0xb59c,0xb59d,0xb8a3, +0xb59e,0xb59f,0xb5a0,0xb640,0xb641,0xb642,0xb643,0xb644, +0xb645,0xb646,0xecfa,0xb647,0xb648,0xb649,0xb64a,0xb64b, +0xb64c,0xb64d,0xb64e,0xb64f,0xb650,0xb651,0xb652,0xecfb, +0xb653,0xb654,0xb655,0xb656,0xb657,0xb658,0xb659,0xb65a, +0xb65b,0xb65c,0xb65d,0xecfc,0xb65e,0xb65f,0xb660,0xb661, +0xb662,0xd3ed,0xd8ae,0xc0eb,0xb663,0xc7dd,0xbacc,0xb664, +0xd0e3,0xcbbd,0xb665,0xcdba,0xb666,0xb667,0xb8d1,0xb668, +0xb669,0xb1fc,0xb66a,0xc7ef,0xb66b,0xd6d6,0xb66c,0xb66d, +0xb66e,0xbfc6,0xc3eb,0xb66f,0xb670,0xeff5,0xb671,0xb672, +0xc3d8,0xb673,0xb674,0xb675,0xb676,0xb677,0xb678,0xd7e2, +0xb679,0xb67a,0xb67b,0xeff7,0xb3d3,0xb67c,0xc7d8,0xd1ed, +0xb67d,0xd6c8,0xb67e,0xeff8,0xb680,0xeff6,0xb681,0xbbfd, +0xb3c6,0xb682,0xb683,0xb684,0xb685,0xb686,0xb687,0xb688, +0xbdd5,0xb689,0xb68a,0xd2c6,0xb68b,0xbbe0,0xb68c,0xb68d, +0xcfa1,0xb68e,0xeffc,0xeffb,0xb68f,0xb690,0xeff9,0xb691, +0xb692,0xb693,0xb694,0xb3cc,0xb695,0xc9d4,0xcbb0,0xb696, +0xb697,0xb698,0xb699,0xb69a,0xeffe,0xb69b,0xb69c,0xb0de, +0xb69d,0xb69e,0xd6c9,0xb69f,0xb6a0,0xb740,0xeffd,0xb741, +0xb3ed,0xb742,0xb743,0xf6d5,0xb744,0xb745,0xb746,0xb747, +0xb748,0xb749,0xb74a,0xb74b,0xb74c,0xb74d,0xb74e,0xb74f, +0xb750,0xb751,0xb752,0xcec8,0xb753,0xb754,0xb755,0xf0a2, +0xb756,0xf0a1,0xb757,0xb5be,0xbcda,0xbbfc,0xb758,0xb8e5, +0xb759,0xb75a,0xb75b,0xb75c,0xb75d,0xb75e,0xc4c2,0xb75f, +0xb760,0xb761,0xb762,0xb763,0xb764,0xb765,0xb766,0xb767, +0xb768,0xf0a3,0xb769,0xb76a,0xb76b,0xb76c,0xb76d,0xcbeb, +0xb76e,0xb76f,0xb770,0xb771,0xb772,0xb773,0xb774,0xb775, +0xb776,0xb777,0xb778,0xb779,0xb77a,0xb77b,0xb77c,0xb77d, +0xb77e,0xb780,0xb781,0xb782,0xb783,0xb784,0xb785,0xb786, +0xf0a6,0xb787,0xb788,0xb789,0xd1a8,0xb78a,0xbebf,0xc7ee, +0xf1b6,0xf1b7,0xbfd5,0xb78b,0xb78c,0xb78d,0xb78e,0xb4a9, +0xf1b8,0xcdbb,0xb78f,0xc7d4,0xd5ad,0xb790,0xf1b9,0xb791, +0xf1ba,0xb792,0xb793,0xb794,0xb795,0xc7cf,0xb796,0xb797, +0xb798,0xd2a4,0xd6cf,0xb799,0xb79a,0xf1bb,0xbdd1,0xb4b0, +0xbebd,0xb79b,0xb79c,0xb79d,0xb4dc,0xced1,0xb79e,0xbfdf, +0xf1bd,0xb79f,0xb7a0,0xb840,0xb841,0xbffa,0xf1bc,0xb842, +0xf1bf,0xb843,0xb844,0xb845,0xf1be,0xf1c0,0xb846,0xb847, +0xb848,0xb849,0xb84a,0xf1c1,0xb84b,0xb84c,0xb84d,0xb84e, +0xb84f,0xb850,0xb851,0xb852,0xb853,0xb854,0xb855,0xc1fe, +0xb856,0xb857,0xb858,0xb859,0xb85a,0xb85b,0xb85c,0xb85d, +0xb85e,0xb85f,0xb860,0xc1a2,0xb861,0xb862,0xb863,0xb864, +0xb865,0xb866,0xb867,0xb868,0xb869,0xb86a,0xcafa,0xb86b, +0xb86c,0xd5be,0xb86d,0xb86e,0xb86f,0xb870,0xbeba,0xbeb9, +0xd5c2,0xb871,0xb872,0xbfa2,0xb873,0xcdaf,0xf1b5,0xb874, +0xb875,0xb876,0xb877,0xb878,0xb879,0xbddf,0xb87a,0xb6cb, +0xb87b,0xb87c,0xb87d,0xb87e,0xb880,0xb881,0xb882,0xb883, +0xb884,0xd6f1,0xf3c3,0xb885,0xb886,0xf3c4,0xb887,0xb8cd, +0xb888,0xb889,0xb88a,0xf3c6,0xf3c7,0xb88b,0xb0ca,0xb88c, +0xf3c5,0xb88d,0xf3c9,0xcbf1,0xb88e,0xb88f,0xb890,0xf3cb, +0xb891,0xd0a6,0xb892,0xb893,0xb1ca,0xf3c8,0xb894,0xb895, +0xb896,0xf3cf,0xb897,0xb5d1,0xb898,0xb899,0xf3d7,0xb89a, +0xf3d2,0xb89b,0xb89c,0xb89d,0xf3d4,0xf3d3,0xb7fb,0xb89e, +0xb1bf,0xb89f,0xf3ce,0xf3ca,0xb5da,0xb8a0,0xf3d0,0xb940, +0xb941,0xf3d1,0xb942,0xf3d5,0xb943,0xb944,0xb945,0xb946, +0xf3cd,0xb947,0xbce3,0xb948,0xc1fd,0xb949,0xf3d6,0xb94a, +0xb94b,0xb94c,0xb94d,0xb94e,0xb94f,0xf3da,0xb950,0xf3cc, +0xb951,0xb5c8,0xb952,0xbdee,0xf3dc,0xb953,0xb954,0xb7a4, +0xbff0,0xd6fe,0xcdb2,0xb955,0xb4f0,0xb956,0xb2df,0xb957, +0xf3d8,0xb958,0xf3d9,0xc9b8,0xb959,0xf3dd,0xb95a,0xb95b, +0xf3de,0xb95c,0xf3e1,0xb95d,0xb95e,0xb95f,0xb960,0xb961, +0xb962,0xb963,0xb964,0xb965,0xb966,0xb967,0xf3df,0xb968, +0xb969,0xf3e3,0xf3e2,0xb96a,0xb96b,0xf3db,0xb96c,0xbfea, +0xb96d,0xb3ef,0xb96e,0xf3e0,0xb96f,0xb970,0xc7a9,0xb971, +0xbcf2,0xb972,0xb973,0xb974,0xb975,0xf3eb,0xb976,0xb977, +0xb978,0xb979,0xb97a,0xb97b,0xb97c,0xb9bf,0xb97d,0xb97e, +0xf3e4,0xb980,0xb981,0xb982,0xb2ad,0xbbfe,0xb983,0xcbe3, +0xb984,0xb985,0xb986,0xb987,0xf3ed,0xf3e9,0xb988,0xb989, +0xb98a,0xb9dc,0xf3ee,0xb98b,0xb98c,0xb98d,0xf3e5,0xf3e6, +0xf3ea,0xc2e1,0xf3ec,0xf3ef,0xf3e8,0xbcfd,0xb98e,0xb98f, +0xb990,0xcfe4,0xb991,0xb992,0xf3f0,0xb993,0xb994,0xb995, +0xf3e7,0xb996,0xb997,0xb998,0xb999,0xb99a,0xb99b,0xb99c, +0xb99d,0xf3f2,0xb99e,0xb99f,0xb9a0,0xba40,0xd7ad,0xc6aa, +0xba41,0xba42,0xba43,0xba44,0xf3f3,0xba45,0xba46,0xba47, +0xba48,0xf3f1,0xba49,0xc2a8,0xba4a,0xba4b,0xba4c,0xba4d, +0xba4e,0xb8dd,0xf3f5,0xba4f,0xba50,0xf3f4,0xba51,0xba52, +0xba53,0xb4db,0xba54,0xba55,0xba56,0xf3f6,0xf3f7,0xba57, +0xba58,0xba59,0xf3f8,0xba5a,0xba5b,0xba5c,0xc0ba,0xba5d, +0xba5e,0xc0e9,0xba5f,0xba60,0xba61,0xba62,0xba63,0xc5f1, +0xba64,0xba65,0xba66,0xba67,0xf3fb,0xba68,0xf3fa,0xba69, +0xba6a,0xba6b,0xba6c,0xba6d,0xba6e,0xba6f,0xba70,0xb4d8, +0xba71,0xba72,0xba73,0xf3fe,0xf3f9,0xba74,0xba75,0xf3fc, +0xba76,0xba77,0xba78,0xba79,0xba7a,0xba7b,0xf3fd,0xba7c, +0xba7d,0xba7e,0xba80,0xba81,0xba82,0xba83,0xba84,0xf4a1, +0xba85,0xba86,0xba87,0xba88,0xba89,0xba8a,0xf4a3,0xbbc9, +0xba8b,0xba8c,0xf4a2,0xba8d,0xba8e,0xba8f,0xba90,0xba91, +0xba92,0xba93,0xba94,0xba95,0xba96,0xba97,0xba98,0xba99, +0xf4a4,0xba9a,0xba9b,0xba9c,0xba9d,0xba9e,0xba9f,0xb2be, +0xf4a6,0xf4a5,0xbaa0,0xbb40,0xbb41,0xbb42,0xbb43,0xbb44, +0xbb45,0xbb46,0xbb47,0xbb48,0xbb49,0xbcae,0xbb4a,0xbb4b, +0xbb4c,0xbb4d,0xbb4e,0xbb4f,0xbb50,0xbb51,0xbb52,0xbb53, +0xbb54,0xbb55,0xbb56,0xbb57,0xbb58,0xbb59,0xbb5a,0xbb5b, +0xbb5c,0xbb5d,0xbb5e,0xbb5f,0xbb60,0xbb61,0xbb62,0xbb63, +0xbb64,0xbb65,0xbb66,0xbb67,0xbb68,0xbb69,0xbb6a,0xbb6b, +0xbb6c,0xbb6d,0xbb6e,0xc3d7,0xd9e1,0xbb6f,0xbb70,0xbb71, +0xbb72,0xbb73,0xbb74,0xc0e0,0xf4cc,0xd7d1,0xbb75,0xbb76, +0xbb77,0xbb78,0xbb79,0xbb7a,0xbb7b,0xbb7c,0xbb7d,0xbb7e, +0xbb80,0xb7db,0xbb81,0xbb82,0xbb83,0xbb84,0xbb85,0xbb86, +0xbb87,0xf4ce,0xc1a3,0xbb88,0xbb89,0xc6c9,0xbb8a,0xb4d6, +0xd5b3,0xbb8b,0xbb8c,0xbb8d,0xf4d0,0xf4cf,0xf4d1,0xcbda, +0xbb8e,0xbb8f,0xf4d2,0xbb90,0xd4c1,0xd6e0,0xbb91,0xbb92, +0xbb93,0xbb94,0xb7e0,0xbb95,0xbb96,0xbb97,0xc1b8,0xbb98, +0xbb99,0xc1bb,0xf4d3,0xbeac,0xbb9a,0xbb9b,0xbb9c,0xbb9d, +0xbb9e,0xb4e2,0xbb9f,0xbba0,0xf4d4,0xf4d5,0xbeab,0xbc40, +0xbc41,0xf4d6,0xbc42,0xbc43,0xbc44,0xf4db,0xbc45,0xf4d7, +0xf4da,0xbc46,0xbafd,0xbc47,0xf4d8,0xf4d9,0xbc48,0xbc49, +0xbc4a,0xbc4b,0xbc4c,0xbc4d,0xbc4e,0xb8e2,0xccc7,0xf4dc, +0xbc4f,0xb2da,0xbc50,0xbc51,0xc3d3,0xbc52,0xbc53,0xd4e3, +0xbfb7,0xbc54,0xbc55,0xbc56,0xbc57,0xbc58,0xbc59,0xbc5a, +0xf4dd,0xbc5b,0xbc5c,0xbc5d,0xbc5e,0xbc5f,0xbc60,0xc5b4, +0xbc61,0xbc62,0xbc63,0xbc64,0xbc65,0xbc66,0xbc67,0xbc68, +0xf4e9,0xbc69,0xbc6a,0xcfb5,0xbc6b,0xbc6c,0xbc6d,0xbc6e, +0xbc6f,0xbc70,0xbc71,0xbc72,0xbc73,0xbc74,0xbc75,0xbc76, +0xbc77,0xbc78,0xcec9,0xbc79,0xbc7a,0xbc7b,0xbc7c,0xbc7d, +0xbc7e,0xbc80,0xbc81,0xbc82,0xbc83,0xbc84,0xbc85,0xbc86, +0xbc87,0xbc88,0xbc89,0xbc8a,0xbc8b,0xbc8c,0xbc8d,0xbc8e, +0xcbd8,0xbc8f,0xcbf7,0xbc90,0xbc91,0xbc92,0xbc93,0xbdf4, +0xbc94,0xbc95,0xbc96,0xd7cf,0xbc97,0xbc98,0xbc99,0xc0db, +0xbc9a,0xbc9b,0xbc9c,0xbc9d,0xbc9e,0xbc9f,0xbca0,0xbd40, +0xbd41,0xbd42,0xbd43,0xbd44,0xbd45,0xbd46,0xbd47,0xbd48, +0xbd49,0xbd4a,0xbd4b,0xbd4c,0xbd4d,0xbd4e,0xbd4f,0xbd50, +0xbd51,0xbd52,0xbd53,0xbd54,0xbd55,0xbd56,0xbd57,0xbd58, +0xbd59,0xbd5a,0xbd5b,0xbd5c,0xbd5d,0xbd5e,0xbd5f,0xbd60, +0xbd61,0xbd62,0xbd63,0xbd64,0xbd65,0xbd66,0xbd67,0xbd68, +0xbd69,0xbd6a,0xbd6b,0xbd6c,0xbd6d,0xbd6e,0xbd6f,0xbd70, +0xbd71,0xbd72,0xbd73,0xbd74,0xbd75,0xbd76,0xd0f5,0xbd77, +0xbd78,0xbd79,0xbd7a,0xbd7b,0xbd7c,0xbd7d,0xbd7e,0xf4ea, +0xbd80,0xbd81,0xbd82,0xbd83,0xbd84,0xbd85,0xbd86,0xbd87, +0xbd88,0xbd89,0xbd8a,0xbd8b,0xbd8c,0xbd8d,0xbd8e,0xbd8f, +0xbd90,0xbd91,0xbd92,0xbd93,0xbd94,0xbd95,0xbd96,0xbd97, +0xbd98,0xbd99,0xbd9a,0xbd9b,0xbd9c,0xbd9d,0xbd9e,0xbd9f, +0xbda0,0xbe40,0xbe41,0xbe42,0xbe43,0xbe44,0xbe45,0xbe46, +0xbe47,0xbe48,0xbe49,0xbe4a,0xbe4b,0xbe4c,0xf4eb,0xbe4d, +0xbe4e,0xbe4f,0xbe50,0xbe51,0xbe52,0xbe53,0xf4ec,0xbe54, +0xbe55,0xbe56,0xbe57,0xbe58,0xbe59,0xbe5a,0xbe5b,0xbe5c, +0xbe5d,0xbe5e,0xbe5f,0xbe60,0xbe61,0xbe62,0xbe63,0xbe64, +0xbe65,0xbe66,0xbe67,0xbe68,0xbe69,0xbe6a,0xbe6b,0xbe6c, +0xbe6d,0xbe6e,0xbe6f,0xbe70,0xbe71,0xbe72,0xbe73,0xbe74, +0xbe75,0xbe76,0xbe77,0xbe78,0xbe79,0xbe7a,0xbe7b,0xbe7c, +0xbe7d,0xbe7e,0xbe80,0xbe81,0xbe82,0xbe83,0xbe84,0xbe85, +0xbe86,0xbe87,0xbe88,0xbe89,0xbe8a,0xbe8b,0xbe8c,0xbe8d, +0xbe8e,0xbe8f,0xbe90,0xbe91,0xbe92,0xbe93,0xbe94,0xbe95, +0xbe96,0xbe97,0xbe98,0xbe99,0xbe9a,0xbe9b,0xbe9c,0xbe9d, +0xbe9e,0xbe9f,0xbea0,0xbf40,0xbf41,0xbf42,0xbf43,0xbf44, +0xbf45,0xbf46,0xbf47,0xbf48,0xbf49,0xbf4a,0xbf4b,0xbf4c, +0xbf4d,0xbf4e,0xbf4f,0xbf50,0xbf51,0xbf52,0xbf53,0xbf54, +0xbf55,0xbf56,0xbf57,0xbf58,0xbf59,0xbf5a,0xbf5b,0xbf5c, +0xbf5d,0xbf5e,0xbf5f,0xbf60,0xbf61,0xbf62,0xbf63,0xbf64, +0xbf65,0xbf66,0xbf67,0xbf68,0xbf69,0xbf6a,0xbf6b,0xbf6c, +0xbf6d,0xbf6e,0xbf6f,0xbf70,0xbf71,0xbf72,0xbf73,0xbf74, +0xbf75,0xbf76,0xbf77,0xbf78,0xbf79,0xbf7a,0xbf7b,0xbf7c, +0xbf7d,0xbf7e,0xbf80,0xf7e3,0xbf81,0xbf82,0xbf83,0xbf84, +0xbf85,0xb7b1,0xbf86,0xbf87,0xbf88,0xbf89,0xbf8a,0xf4ed, +0xbf8b,0xbf8c,0xbf8d,0xbf8e,0xbf8f,0xbf90,0xbf91,0xbf92, +0xbf93,0xbf94,0xbf95,0xbf96,0xbf97,0xbf98,0xbf99,0xbf9a, +0xbf9b,0xbf9c,0xbf9d,0xbf9e,0xbf9f,0xbfa0,0xc040,0xc041, +0xc042,0xc043,0xc044,0xc045,0xc046,0xc047,0xc048,0xc049, +0xc04a,0xc04b,0xc04c,0xc04d,0xc04e,0xc04f,0xc050,0xc051, +0xc052,0xc053,0xc054,0xc055,0xc056,0xc057,0xc058,0xc059, +0xc05a,0xc05b,0xc05c,0xc05d,0xc05e,0xc05f,0xc060,0xc061, +0xc062,0xc063,0xd7eb,0xc064,0xc065,0xc066,0xc067,0xc068, +0xc069,0xc06a,0xc06b,0xc06c,0xc06d,0xc06e,0xc06f,0xc070, +0xc071,0xc072,0xc073,0xc074,0xc075,0xc076,0xc077,0xc078, +0xc079,0xc07a,0xc07b,0xf4ee,0xc07c,0xc07d,0xc07e,0xe6f9, +0xbec0,0xe6fa,0xbaec,0xe6fb,0xcfcb,0xe6fc,0xd4bc,0xbcb6, +0xe6fd,0xe6fe,0xbccd,0xc8d2,0xceb3,0xe7a1,0xc080,0xb4bf, +0xe7a2,0xc9b4,0xb8d9,0xc4c9,0xc081,0xd7dd,0xc2da,0xb7d7, +0xd6bd,0xcec6,0xb7c4,0xc082,0xc083,0xc5a6,0xe7a3,0xcfdf, +0xe7a4,0xe7a5,0xe7a6,0xc1b7,0xd7e9,0xc9f0,0xcfb8,0xd6af, +0xd6d5,0xe7a7,0xb0ed,0xe7a8,0xe7a9,0xc9dc,0xd2ef,0xbead, +0xe7aa,0xb0f3,0xc8de,0xbde1,0xe7ab,0xc8c6,0xc084,0xe7ac, +0xbbe6,0xb8f8,0xd1a4,0xe7ad,0xc2e7,0xbef8,0xbdca,0xcdb3, +0xe7ae,0xe7af,0xbeee,0xd0e5,0xc085,0xcbe7,0xccd0,0xbccc, +0xe7b0,0xbca8,0xd0f7,0xe7b1,0xc086,0xd0f8,0xe7b2,0xe7b3, +0xb4c2,0xe7b4,0xe7b5,0xc9fe,0xceac,0xc3e0,0xe7b7,0xb1c1, +0xb3f1,0xc087,0xe7b8,0xe7b9,0xd7db,0xd5c0,0xe7ba,0xc2cc, +0xd7ba,0xe7bb,0xe7bc,0xe7bd,0xbcea,0xc3e5,0xc0c2,0xe7be, +0xe7bf,0xbca9,0xc088,0xe7c0,0xe7c1,0xe7b6,0xb6d0,0xe7c2, +0xc089,0xe7c3,0xe7c4,0xbbba,0xb5de,0xc2c6,0xb1e0,0xe7c5, +0xd4b5,0xe7c6,0xb8bf,0xe7c8,0xe7c7,0xb7ec,0xc08a,0xe7c9, +0xb2f8,0xe7ca,0xe7cb,0xe7cc,0xe7cd,0xe7ce,0xe7cf,0xe7d0, +0xd3a7,0xcbf5,0xe7d1,0xe7d2,0xe7d3,0xe7d4,0xc9c9,0xe7d5, +0xe7d6,0xe7d7,0xe7d8,0xe7d9,0xbdc9,0xe7da,0xf3be,0xc08b, +0xb8d7,0xc08c,0xc8b1,0xc08d,0xc08e,0xc08f,0xc090,0xc091, +0xc092,0xc093,0xf3bf,0xc094,0xf3c0,0xf3c1,0xc095,0xc096, +0xc097,0xc098,0xc099,0xc09a,0xc09b,0xc09c,0xc09d,0xc09e, +0xb9de,0xcdf8,0xc09f,0xc0a0,0xd8e8,0xbab1,0xc140,0xc2de, +0xeeb7,0xc141,0xb7a3,0xc142,0xc143,0xc144,0xc145,0xeeb9, +0xc146,0xeeb8,0xb0d5,0xc147,0xc148,0xc149,0xc14a,0xc14b, +0xeebb,0xd5d6,0xd7ef,0xc14c,0xc14d,0xc14e,0xd6c3,0xc14f, +0xc150,0xeebd,0xcaf0,0xc151,0xeebc,0xc152,0xc153,0xc154, +0xc155,0xeebe,0xc156,0xc157,0xc158,0xc159,0xeec0,0xc15a, +0xc15b,0xeebf,0xc15c,0xc15d,0xc15e,0xc15f,0xc160,0xc161, +0xc162,0xc163,0xd1f2,0xc164,0xc7bc,0xc165,0xc3c0,0xc166, +0xc167,0xc168,0xc169,0xc16a,0xb8e1,0xc16b,0xc16c,0xc16d, +0xc16e,0xc16f,0xc1e7,0xc170,0xc171,0xf4c6,0xd0df,0xf4c7, +0xc172,0xcfdb,0xc173,0xc174,0xc8ba,0xc175,0xc176,0xf4c8, +0xc177,0xc178,0xc179,0xc17a,0xc17b,0xc17c,0xc17d,0xf4c9, +0xf4ca,0xc17e,0xf4cb,0xc180,0xc181,0xc182,0xc183,0xc184, +0xd9fa,0xb8fe,0xc185,0xc186,0xe5f1,0xd3f0,0xc187,0xf4e0, +0xc188,0xcecc,0xc189,0xc18a,0xc18b,0xb3e1,0xc18c,0xc18d, +0xc18e,0xc18f,0xf1b4,0xc190,0xd2ee,0xc191,0xf4e1,0xc192, +0xc193,0xc194,0xc195,0xc196,0xcfe8,0xf4e2,0xc197,0xc198, +0xc7cc,0xc199,0xc19a,0xc19b,0xc19c,0xc19d,0xc19e,0xb5d4, +0xb4e4,0xf4e4,0xc19f,0xc1a0,0xc240,0xf4e3,0xf4e5,0xc241, +0xc242,0xf4e6,0xc243,0xc244,0xc245,0xc246,0xf4e7,0xc247, +0xbab2,0xb0bf,0xc248,0xf4e8,0xc249,0xc24a,0xc24b,0xc24c, +0xc24d,0xc24e,0xc24f,0xb7ad,0xd2ed,0xc250,0xc251,0xc252, +0xd2ab,0xc0cf,0xc253,0xbfbc,0xeba3,0xd5df,0xeac8,0xc254, +0xc255,0xc256,0xc257,0xf1f3,0xb6f8,0xcba3,0xc258,0xc259, +0xc4cd,0xc25a,0xf1e7,0xc25b,0xf1e8,0xb8fb,0xf1e9,0xbac4, +0xd4c5,0xb0d2,0xc25c,0xc25d,0xf1ea,0xc25e,0xc25f,0xc260, +0xf1eb,0xc261,0xf1ec,0xc262,0xc263,0xf1ed,0xf1ee,0xf1ef, +0xf1f1,0xf1f0,0xc5d5,0xc264,0xc265,0xc266,0xc267,0xc268, +0xc269,0xf1f2,0xc26a,0xb6fa,0xc26b,0xf1f4,0xd2ae,0xdec7, +0xcbca,0xc26c,0xc26d,0xb3dc,0xc26e,0xb5a2,0xc26f,0xb9a2, +0xc270,0xc271,0xc4f4,0xf1f5,0xc272,0xc273,0xf1f6,0xc274, +0xc275,0xc276,0xc1c4,0xc1fb,0xd6b0,0xf1f7,0xc277,0xc278, +0xc279,0xc27a,0xf1f8,0xc27b,0xc1aa,0xc27c,0xc27d,0xc27e, +0xc6b8,0xc280,0xbedb,0xc281,0xc282,0xc283,0xc284,0xc285, +0xc286,0xc287,0xc288,0xc289,0xc28a,0xc28b,0xc28c,0xc28d, +0xc28e,0xf1f9,0xb4cf,0xc28f,0xc290,0xc291,0xc292,0xc293, +0xc294,0xf1fa,0xc295,0xc296,0xc297,0xc298,0xc299,0xc29a, +0xc29b,0xc29c,0xc29d,0xc29e,0xc29f,0xc2a0,0xc340,0xedb2, +0xedb1,0xc341,0xc342,0xcbe0,0xd2de,0xc343,0xcbc1,0xd5d8, +0xc344,0xc8e2,0xc345,0xc0df,0xbca1,0xc346,0xc347,0xc348, +0xc349,0xc34a,0xc34b,0xebc1,0xc34c,0xc34d,0xd0a4,0xc34e, +0xd6e2,0xc34f,0xb6c7,0xb8d8,0xebc0,0xb8ce,0xc350,0xebbf, +0xb3a6,0xb9c9,0xd6ab,0xc351,0xb7f4,0xb7ca,0xc352,0xc353, +0xc354,0xbce7,0xb7be,0xebc6,0xc355,0xebc7,0xb0b9,0xbfcf, +0xc356,0xebc5,0xd3fd,0xc357,0xebc8,0xc358,0xc359,0xebc9, +0xc35a,0xc35b,0xb7ce,0xc35c,0xebc2,0xebc4,0xc9f6,0xd6d7, +0xd5cd,0xd0b2,0xebcf,0xceb8,0xebd0,0xc35d,0xb5a8,0xc35e, +0xc35f,0xc360,0xc361,0xc362,0xb1b3,0xebd2,0xcca5,0xc363, +0xc364,0xc365,0xc366,0xc367,0xc368,0xc369,0xc5d6,0xebd3, +0xc36a,0xebd1,0xc5df,0xebce,0xcaa4,0xebd5,0xb0fb,0xc36b, +0xc36c,0xbafa,0xc36d,0xc36e,0xd8b7,0xf1e3,0xc36f,0xebca, +0xebcb,0xebcc,0xebcd,0xebd6,0xe6c0,0xebd9,0xc370,0xbfe8, +0xd2c8,0xebd7,0xebdc,0xb8ec,0xebd8,0xc371,0xbdba,0xc372, +0xd0d8,0xc373,0xb0b7,0xc374,0xebdd,0xc4dc,0xc375,0xc376, +0xc377,0xc378,0xd6ac,0xc379,0xc37a,0xc37b,0xb4e0,0xc37c, +0xc37d,0xc2f6,0xbcb9,0xc37e,0xc380,0xebda,0xebdb,0xd4e0, +0xc6ea,0xc4d4,0xebdf,0xc5a7,0xd9f5,0xc381,0xb2b1,0xc382, +0xebe4,0xc383,0xbdc5,0xc384,0xc385,0xc386,0xebe2,0xc387, +0xc388,0xc389,0xc38a,0xc38b,0xc38c,0xc38d,0xc38e,0xc38f, +0xc390,0xc391,0xc392,0xc393,0xebe3,0xc394,0xc395,0xb8ac, +0xc396,0xcdd1,0xebe5,0xc397,0xc398,0xc399,0xebe1,0xc39a, +0xc1b3,0xc39b,0xc39c,0xc39d,0xc39e,0xc39f,0xc6a2,0xc3a0, +0xc440,0xc441,0xc442,0xc443,0xc444,0xc445,0xccf3,0xc446, +0xebe6,0xc447,0xc0b0,0xd2b8,0xebe7,0xc448,0xc449,0xc44a, +0xb8af,0xb8ad,0xc44b,0xebe8,0xc7bb,0xcdf3,0xc44c,0xc44d, +0xc44e,0xebea,0xebeb,0xc44f,0xc450,0xc451,0xc452,0xc453, +0xebed,0xc454,0xc455,0xc456,0xc457,0xd0c8,0xc458,0xebf2, +0xc459,0xebee,0xc45a,0xc45b,0xc45c,0xebf1,0xc8f9,0xc45d, +0xd1fc,0xebec,0xc45e,0xc45f,0xebe9,0xc460,0xc461,0xc462, +0xc463,0xb8b9,0xcfd9,0xc4e5,0xebef,0xebf0,0xccda,0xcdc8, +0xb0f2,0xc464,0xebf6,0xc465,0xc466,0xc467,0xc468,0xc469, +0xebf5,0xc46a,0xb2b2,0xc46b,0xc46c,0xc46d,0xc46e,0xb8e0, +0xc46f,0xebf7,0xc470,0xc471,0xc472,0xc473,0xc474,0xc475, +0xb1ec,0xc476,0xc477,0xccc5,0xc4a4,0xcfa5,0xc478,0xc479, +0xc47a,0xc47b,0xc47c,0xebf9,0xc47d,0xc47e,0xeca2,0xc480, +0xc5f2,0xc481,0xebfa,0xc482,0xc483,0xc484,0xc485,0xc486, +0xc487,0xc488,0xc489,0xc9c5,0xc48a,0xc48b,0xc48c,0xc48d, +0xc48e,0xc48f,0xe2df,0xebfe,0xc490,0xc491,0xc492,0xc493, +0xcdce,0xeca1,0xb1db,0xd3b7,0xc494,0xc495,0xd2dc,0xc496, +0xc497,0xc498,0xebfd,0xc499,0xebfb,0xc49a,0xc49b,0xc49c, +0xc49d,0xc49e,0xc49f,0xc4a0,0xc540,0xc541,0xc542,0xc543, +0xc544,0xc545,0xc546,0xc547,0xc548,0xc549,0xc54a,0xc54b, +0xc54c,0xc54d,0xc54e,0xb3bc,0xc54f,0xc550,0xc551,0xeab0, +0xc552,0xc553,0xd7d4,0xc554,0xf4ab,0xb3f4,0xc555,0xc556, +0xc557,0xc558,0xc559,0xd6c1,0xd6c2,0xc55a,0xc55b,0xc55c, +0xc55d,0xc55e,0xc55f,0xd5e9,0xbeca,0xc560,0xf4a7,0xc561, +0xd2a8,0xf4a8,0xf4a9,0xc562,0xf4aa,0xbecb,0xd3df,0xc563, +0xc564,0xc565,0xc566,0xc567,0xc9e0,0xc9e1,0xc568,0xc569, +0xf3c2,0xc56a,0xcae6,0xc56b,0xccf2,0xc56c,0xc56d,0xc56e, +0xc56f,0xc570,0xc571,0xe2b6,0xcbb4,0xc572,0xcee8,0xd6db, +0xc573,0xf4ad,0xf4ae,0xf4af,0xc574,0xc575,0xc576,0xc577, +0xf4b2,0xc578,0xbabd,0xf4b3,0xb0e3,0xf4b0,0xc579,0xf4b1, +0xbda2,0xb2d5,0xc57a,0xf4b6,0xf4b7,0xb6e6,0xb2b0,0xcfcf, +0xf4b4,0xb4ac,0xc57b,0xf4b5,0xc57c,0xc57d,0xf4b8,0xc57e, +0xc580,0xc581,0xc582,0xc583,0xf4b9,0xc584,0xc585,0xcda7, +0xc586,0xf4ba,0xc587,0xf4bb,0xc588,0xc589,0xc58a,0xf4bc, +0xc58b,0xc58c,0xc58d,0xc58e,0xc58f,0xc590,0xc591,0xc592, +0xcbd2,0xc593,0xf4bd,0xc594,0xc595,0xc596,0xc597,0xf4be, +0xc598,0xc599,0xc59a,0xc59b,0xc59c,0xc59d,0xc59e,0xc59f, +0xf4bf,0xc5a0,0xc640,0xc641,0xc642,0xc643,0xf4de,0xc1bc, +0xbce8,0xc644,0xc9ab,0xd1de,0xe5f5,0xc645,0xc646,0xc647, +0xc648,0xdcb3,0xd2d5,0xc649,0xc64a,0xdcb4,0xb0ac,0xdcb5, +0xc64b,0xc64c,0xbdda,0xc64d,0xdcb9,0xc64e,0xc64f,0xc650, +0xd8c2,0xc651,0xdcb7,0xd3f3,0xc652,0xc9d6,0xdcba,0xdcb6, +0xc653,0xdcbb,0xc3a2,0xc654,0xc655,0xc656,0xc657,0xdcbc, +0xdcc5,0xdcbd,0xc658,0xc659,0xcedf,0xd6a5,0xc65a,0xdccf, +0xc65b,0xdccd,0xc65c,0xc65d,0xdcd2,0xbde6,0xc2ab,0xc65e, +0xdcb8,0xdccb,0xdcce,0xdcbe,0xb7d2,0xb0c5,0xdcc7,0xd0be, +0xdcc1,0xbba8,0xc65f,0xb7bc,0xdccc,0xc660,0xc661,0xdcc6, +0xdcbf,0xc7db,0xc662,0xc663,0xc664,0xd1bf,0xdcc0,0xc665, +0xc666,0xdcca,0xc667,0xc668,0xdcd0,0xc669,0xc66a,0xcead, +0xdcc2,0xc66b,0xdcc3,0xdcc8,0xdcc9,0xb2d4,0xdcd1,0xcbd5, +0xc66c,0xd4b7,0xdcdb,0xdcdf,0xcca6,0xdce6,0xc66d,0xc3e7, +0xdcdc,0xc66e,0xc66f,0xbfc1,0xdcd9,0xc670,0xb0fa,0xb9b6, +0xdce5,0xdcd3,0xc671,0xdcc4,0xdcd6,0xc8f4,0xbfe0,0xc672, +0xc673,0xc674,0xc675,0xc9bb,0xc676,0xc677,0xc678,0xb1bd, +0xc679,0xd3a2,0xc67a,0xc67b,0xdcda,0xc67c,0xc67d,0xdcd5, +0xc67e,0xc6bb,0xc680,0xdcde,0xc681,0xc682,0xc683,0xc684, +0xc685,0xd7c2,0xc3af,0xb7b6,0xc7d1,0xc3a9,0xdce2,0xdcd8, +0xdceb,0xdcd4,0xc686,0xc687,0xdcdd,0xc688,0xbea5,0xdcd7, +0xc689,0xdce0,0xc68a,0xc68b,0xdce3,0xdce4,0xc68c,0xdcf8, +0xc68d,0xc68e,0xdce1,0xdda2,0xdce7,0xc68f,0xc690,0xc691, +0xc692,0xc693,0xc694,0xc695,0xc696,0xc697,0xc698,0xbceb, +0xb4c4,0xc699,0xc69a,0xc3a3,0xb2e7,0xdcfa,0xc69b,0xdcf2, +0xc69c,0xdcef,0xc69d,0xdcfc,0xdcee,0xd2f0,0xb2e8,0xc69e, +0xc8d7,0xc8e3,0xdcfb,0xc69f,0xdced,0xc6a0,0xc740,0xc741, +0xdcf7,0xc742,0xc743,0xdcf5,0xc744,0xc745,0xbea3,0xdcf4, +0xc746,0xb2dd,0xc747,0xc748,0xc749,0xc74a,0xc74b,0xdcf3, +0xbcf6,0xdce8,0xbbc4,0xc74c,0xc0f3,0xc74d,0xc74e,0xc74f, +0xc750,0xc751,0xbcd4,0xdce9,0xdcea,0xc752,0xdcf1,0xdcf6, +0xdcf9,0xb5b4,0xc753,0xc8d9,0xbbe7,0xdcfe,0xdcfd,0xd3ab, +0xdda1,0xdda3,0xdda5,0xd2f1,0xdda4,0xdda6,0xdda7,0xd2a9, +0xc754,0xc755,0xc756,0xc757,0xc758,0xc759,0xc75a,0xbac9, +0xdda9,0xc75b,0xc75c,0xddb6,0xddb1,0xddb4,0xc75d,0xc75e, +0xc75f,0xc760,0xc761,0xc762,0xc763,0xddb0,0xc6ce,0xc764, +0xc765,0xc0f2,0xc766,0xc767,0xc768,0xc769,0xc9af,0xc76a, +0xc76b,0xc76c,0xdcec,0xddae,0xc76d,0xc76e,0xc76f,0xc770, +0xddb7,0xc771,0xc772,0xdcf0,0xddaf,0xc773,0xddb8,0xc774, +0xddac,0xc775,0xc776,0xc777,0xc778,0xc779,0xc77a,0xc77b, +0xddb9,0xddb3,0xddad,0xc4aa,0xc77c,0xc77d,0xc77e,0xc780, +0xdda8,0xc0b3,0xc1ab,0xddaa,0xddab,0xc781,0xddb2,0xbbf1, +0xddb5,0xd3a8,0xddba,0xc782,0xddbb,0xc3a7,0xc783,0xc784, +0xddd2,0xddbc,0xc785,0xc786,0xc787,0xddd1,0xc788,0xb9bd, +0xc789,0xc78a,0xbed5,0xc78b,0xbefa,0xc78c,0xc78d,0xbaca, +0xc78e,0xc78f,0xc790,0xc791,0xddca,0xc792,0xddc5,0xc793, +0xddbf,0xc794,0xc795,0xc796,0xb2cb,0xddc3,0xc797,0xddcb, +0xb2a4,0xddd5,0xc798,0xc799,0xc79a,0xddbe,0xc79b,0xc79c, +0xc79d,0xc6d0,0xddd0,0xc79e,0xc79f,0xc7a0,0xc840,0xc841, +0xddd4,0xc1e2,0xb7c6,0xc842,0xc843,0xc844,0xc845,0xc846, +0xddce,0xddcf,0xc847,0xc848,0xc849,0xddc4,0xc84a,0xc84b, +0xc84c,0xddbd,0xc84d,0xddcd,0xccd1,0xc84e,0xddc9,0xc84f, +0xc850,0xc851,0xc852,0xddc2,0xc3c8,0xc6bc,0xceae,0xddcc, +0xc853,0xddc8,0xc854,0xc855,0xc856,0xc857,0xc858,0xc859, +0xddc1,0xc85a,0xc85b,0xc85c,0xddc6,0xc2dc,0xc85d,0xc85e, +0xc85f,0xc860,0xc861,0xc862,0xd3a9,0xd3aa,0xddd3,0xcff4, +0xc8f8,0xc863,0xc864,0xc865,0xc866,0xc867,0xc868,0xc869, +0xc86a,0xdde6,0xc86b,0xc86c,0xc86d,0xc86e,0xc86f,0xc870, +0xddc7,0xc871,0xc872,0xc873,0xdde0,0xc2e4,0xc874,0xc875, +0xc876,0xc877,0xc878,0xc879,0xc87a,0xc87b,0xdde1,0xc87c, +0xc87d,0xc87e,0xc880,0xc881,0xc882,0xc883,0xc884,0xc885, +0xc886,0xddd7,0xc887,0xc888,0xc889,0xc88a,0xc88b,0xd6f8, +0xc88c,0xddd9,0xddd8,0xb8f0,0xddd6,0xc88d,0xc88e,0xc88f, +0xc890,0xc6cf,0xc891,0xb6ad,0xc892,0xc893,0xc894,0xc895, +0xc896,0xdde2,0xc897,0xbaf9,0xd4e1,0xdde7,0xc898,0xc899, +0xc89a,0xb4d0,0xc89b,0xddda,0xc89c,0xbffb,0xdde3,0xc89d, +0xdddf,0xc89e,0xdddd,0xc89f,0xc8a0,0xc940,0xc941,0xc942, +0xc943,0xc944,0xb5d9,0xc945,0xc946,0xc947,0xc948,0xdddb, +0xdddc,0xddde,0xc949,0xbdaf,0xdde4,0xc94a,0xdde5,0xc94b, +0xc94c,0xc94d,0xc94e,0xc94f,0xc950,0xc951,0xc952,0xddf5, +0xc953,0xc3c9,0xc954,0xc955,0xcbe2,0xc956,0xc957,0xc958, +0xc959,0xddf2,0xc95a,0xc95b,0xc95c,0xc95d,0xc95e,0xc95f, +0xc960,0xc961,0xc962,0xc963,0xc964,0xc965,0xc966,0xd8e1, +0xc967,0xc968,0xc6d1,0xc969,0xddf4,0xc96a,0xc96b,0xc96c, +0xd5f4,0xddf3,0xddf0,0xc96d,0xc96e,0xddec,0xc96f,0xddef, +0xc970,0xdde8,0xc971,0xc972,0xd0ee,0xc973,0xc974,0xc975, +0xc976,0xc8d8,0xddee,0xc977,0xc978,0xdde9,0xc979,0xc97a, +0xddea,0xcbf2,0xc97b,0xdded,0xc97c,0xc97d,0xb1cd,0xc97e, +0xc980,0xc981,0xc982,0xc983,0xc984,0xc0b6,0xc985,0xbcbb, +0xddf1,0xc986,0xc987,0xddf7,0xc988,0xddf6,0xddeb,0xc989, +0xc98a,0xc98b,0xc98c,0xc98d,0xc5ee,0xc98e,0xc98f,0xc990, +0xddfb,0xc991,0xc992,0xc993,0xc994,0xc995,0xc996,0xc997, +0xc998,0xc999,0xc99a,0xc99b,0xdea4,0xc99c,0xc99d,0xdea3, +0xc99e,0xc99f,0xc9a0,0xca40,0xca41,0xca42,0xca43,0xca44, +0xca45,0xca46,0xca47,0xca48,0xddf8,0xca49,0xca4a,0xca4b, +0xca4c,0xc3ef,0xca4d,0xc2fb,0xca4e,0xca4f,0xca50,0xd5e1, +0xca51,0xca52,0xceb5,0xca53,0xca54,0xca55,0xca56,0xddfd, +0xca57,0xb2cc,0xca58,0xca59,0xca5a,0xca5b,0xca5c,0xca5d, +0xca5e,0xca5f,0xca60,0xc4e8,0xcadf,0xca61,0xca62,0xca63, +0xca64,0xca65,0xca66,0xca67,0xca68,0xca69,0xca6a,0xc7be, +0xddfa,0xddfc,0xddfe,0xdea2,0xb0aa,0xb1ce,0xca6b,0xca6c, +0xca6d,0xca6e,0xca6f,0xdeac,0xca70,0xca71,0xca72,0xca73, +0xdea6,0xbdb6,0xc8ef,0xca74,0xca75,0xca76,0xca77,0xca78, +0xca79,0xca7a,0xca7b,0xca7c,0xca7d,0xca7e,0xdea1,0xca80, +0xca81,0xdea5,0xca82,0xca83,0xca84,0xca85,0xdea9,0xca86, +0xca87,0xca88,0xca89,0xca8a,0xdea8,0xca8b,0xca8c,0xca8d, +0xdea7,0xca8e,0xca8f,0xca90,0xca91,0xca92,0xca93,0xca94, +0xca95,0xca96,0xdead,0xca97,0xd4cc,0xca98,0xca99,0xca9a, +0xca9b,0xdeb3,0xdeaa,0xdeae,0xca9c,0xca9d,0xc0d9,0xca9e, +0xca9f,0xcaa0,0xcb40,0xcb41,0xb1a1,0xdeb6,0xcb42,0xdeb1, +0xcb43,0xcb44,0xcb45,0xcb46,0xcb47,0xcb48,0xcb49,0xdeb2, +0xcb4a,0xcb4b,0xcb4c,0xcb4d,0xcb4e,0xcb4f,0xcb50,0xcb51, +0xcb52,0xcb53,0xcb54,0xd1a6,0xdeb5,0xcb55,0xcb56,0xcb57, +0xcb58,0xcb59,0xcb5a,0xcb5b,0xdeaf,0xcb5c,0xcb5d,0xcb5e, +0xdeb0,0xcb5f,0xd0bd,0xcb60,0xcb61,0xcb62,0xdeb4,0xcaed, +0xdeb9,0xcb63,0xcb64,0xcb65,0xcb66,0xcb67,0xcb68,0xdeb8, +0xcb69,0xdeb7,0xcb6a,0xcb6b,0xcb6c,0xcb6d,0xcb6e,0xcb6f, +0xcb70,0xdebb,0xcb71,0xcb72,0xcb73,0xcb74,0xcb75,0xcb76, +0xcb77,0xbde5,0xcb78,0xcb79,0xcb7a,0xcb7b,0xcb7c,0xb2d8, +0xc3ea,0xcb7d,0xcb7e,0xdeba,0xcb80,0xc5ba,0xcb81,0xcb82, +0xcb83,0xcb84,0xcb85,0xcb86,0xdebc,0xcb87,0xcb88,0xcb89, +0xcb8a,0xcb8b,0xcb8c,0xcb8d,0xccd9,0xcb8e,0xcb8f,0xcb90, +0xcb91,0xb7aa,0xcb92,0xcb93,0xcb94,0xcb95,0xcb96,0xcb97, +0xcb98,0xcb99,0xcb9a,0xcb9b,0xcb9c,0xcb9d,0xcb9e,0xcb9f, +0xcba0,0xcc40,0xcc41,0xd4e5,0xcc42,0xcc43,0xcc44,0xdebd, +0xcc45,0xcc46,0xcc47,0xcc48,0xcc49,0xdebf,0xcc4a,0xcc4b, +0xcc4c,0xcc4d,0xcc4e,0xcc4f,0xcc50,0xcc51,0xcc52,0xcc53, +0xcc54,0xc4a2,0xcc55,0xcc56,0xcc57,0xcc58,0xdec1,0xcc59, +0xcc5a,0xcc5b,0xcc5c,0xcc5d,0xcc5e,0xcc5f,0xcc60,0xcc61, +0xcc62,0xcc63,0xcc64,0xcc65,0xcc66,0xcc67,0xcc68,0xdebe, +0xcc69,0xdec0,0xcc6a,0xcc6b,0xcc6c,0xcc6d,0xcc6e,0xcc6f, +0xcc70,0xcc71,0xcc72,0xcc73,0xcc74,0xcc75,0xcc76,0xcc77, +0xd5ba,0xcc78,0xcc79,0xcc7a,0xdec2,0xcc7b,0xcc7c,0xcc7d, +0xcc7e,0xcc80,0xcc81,0xcc82,0xcc83,0xcc84,0xcc85,0xcc86, +0xcc87,0xcc88,0xcc89,0xcc8a,0xcc8b,0xf2ae,0xbba2,0xc2b2, +0xc5b0,0xc2c7,0xcc8c,0xcc8d,0xf2af,0xcc8e,0xcc8f,0xcc90, +0xcc91,0xcc92,0xd0e9,0xcc93,0xcc94,0xcc95,0xd3dd,0xcc96, +0xcc97,0xcc98,0xebbd,0xcc99,0xcc9a,0xcc9b,0xcc9c,0xcc9d, +0xcc9e,0xcc9f,0xcca0,0xb3e6,0xf2b0,0xcd40,0xf2b1,0xcd41, +0xcd42,0xcaad,0xcd43,0xcd44,0xcd45,0xcd46,0xcd47,0xcd48, +0xcd49,0xbae7,0xf2b3,0xf2b5,0xf2b4,0xcbe4,0xcfba,0xf2b2, +0xcab4,0xd2cf,0xc2ec,0xcd4a,0xcd4b,0xcd4c,0xcd4d,0xcd4e, +0xcd4f,0xcd50,0xcec3,0xf2b8,0xb0f6,0xf2b7,0xcd51,0xcd52, +0xcd53,0xcd54,0xcd55,0xf2be,0xcd56,0xb2cf,0xcd57,0xcd58, +0xcd59,0xcd5a,0xcd5b,0xcd5c,0xd1c1,0xf2ba,0xcd5d,0xcd5e, +0xcd5f,0xcd60,0xcd61,0xf2bc,0xd4e9,0xcd62,0xcd63,0xf2bb, +0xf2b6,0xf2bf,0xf2bd,0xcd64,0xf2b9,0xcd65,0xcd66,0xf2c7, +0xf2c4,0xf2c6,0xcd67,0xcd68,0xf2ca,0xf2c2,0xf2c0,0xcd69, +0xcd6a,0xcd6b,0xf2c5,0xcd6c,0xcd6d,0xcd6e,0xcd6f,0xcd70, +0xd6fb,0xcd71,0xcd72,0xcd73,0xf2c1,0xcd74,0xc7f9,0xc9df, +0xcd75,0xf2c8,0xb9c6,0xb5b0,0xcd76,0xcd77,0xf2c3,0xf2c9, +0xf2d0,0xf2d6,0xcd78,0xcd79,0xbbd7,0xcd7a,0xcd7b,0xcd7c, +0xf2d5,0xcddc,0xcd7d,0xd6eb,0xcd7e,0xcd80,0xf2d2,0xf2d4, +0xcd81,0xcd82,0xcd83,0xcd84,0xb8f2,0xcd85,0xcd86,0xcd87, +0xcd88,0xf2cb,0xcd89,0xcd8a,0xcd8b,0xf2ce,0xc2f9,0xcd8c, +0xd5dd,0xf2cc,0xf2cd,0xf2cf,0xf2d3,0xcd8d,0xcd8e,0xcd8f, +0xf2d9,0xd3bc,0xcd90,0xcd91,0xcd92,0xcd93,0xb6ea,0xcd94, +0xcaf1,0xcd95,0xb7e4,0xf2d7,0xcd96,0xcd97,0xcd98,0xf2d8, +0xf2da,0xf2dd,0xf2db,0xcd99,0xcd9a,0xf2dc,0xcd9b,0xcd9c, +0xcd9d,0xcd9e,0xd1d1,0xf2d1,0xcd9f,0xcdc9,0xcda0,0xcecf, +0xd6a9,0xce40,0xf2e3,0xce41,0xc3db,0xce42,0xf2e0,0xce43, +0xce44,0xc0af,0xf2ec,0xf2de,0xce45,0xf2e1,0xce46,0xce47, +0xce48,0xf2e8,0xce49,0xce4a,0xce4b,0xce4c,0xf2e2,0xce4d, +0xce4e,0xf2e7,0xce4f,0xce50,0xf2e6,0xce51,0xce52,0xf2e9, +0xce53,0xce54,0xce55,0xf2df,0xce56,0xce57,0xf2e4,0xf2ea, +0xce58,0xce59,0xce5a,0xce5b,0xce5c,0xce5d,0xce5e,0xd3ac, +0xf2e5,0xb2f5,0xce5f,0xce60,0xf2f2,0xce61,0xd0ab,0xce62, +0xce63,0xce64,0xce65,0xf2f5,0xce66,0xce67,0xce68,0xbbc8, +0xce69,0xf2f9,0xce6a,0xce6b,0xce6c,0xce6d,0xce6e,0xce6f, +0xf2f0,0xce70,0xce71,0xf2f6,0xf2f8,0xf2fa,0xce72,0xce73, +0xce74,0xce75,0xce76,0xce77,0xce78,0xce79,0xf2f3,0xce7a, +0xf2f1,0xce7b,0xce7c,0xce7d,0xbafb,0xce7e,0xb5fb,0xce80, +0xce81,0xce82,0xce83,0xf2ef,0xf2f7,0xf2ed,0xf2ee,0xce84, +0xce85,0xce86,0xf2eb,0xf3a6,0xce87,0xf3a3,0xce88,0xce89, +0xf3a2,0xce8a,0xce8b,0xf2f4,0xce8c,0xc8da,0xce8d,0xce8e, +0xce8f,0xce90,0xce91,0xf2fb,0xce92,0xce93,0xce94,0xf3a5, +0xce95,0xce96,0xce97,0xce98,0xce99,0xce9a,0xce9b,0xc3f8, +0xce9c,0xce9d,0xce9e,0xce9f,0xcea0,0xcf40,0xcf41,0xcf42, +0xf2fd,0xcf43,0xcf44,0xf3a7,0xf3a9,0xf3a4,0xcf45,0xf2fc, +0xcf46,0xcf47,0xcf48,0xf3ab,0xcf49,0xf3aa,0xcf4a,0xcf4b, +0xcf4c,0xcf4d,0xc2dd,0xcf4e,0xcf4f,0xf3ae,0xcf50,0xcf51, +0xf3b0,0xcf52,0xcf53,0xcf54,0xcf55,0xcf56,0xf3a1,0xcf57, +0xcf58,0xcf59,0xf3b1,0xf3ac,0xcf5a,0xcf5b,0xcf5c,0xcf5d, +0xcf5e,0xf3af,0xf2fe,0xf3ad,0xcf5f,0xcf60,0xcf61,0xcf62, +0xcf63,0xcf64,0xcf65,0xf3b2,0xcf66,0xcf67,0xcf68,0xcf69, +0xf3b4,0xcf6a,0xcf6b,0xcf6c,0xcf6d,0xf3a8,0xcf6e,0xcf6f, +0xcf70,0xcf71,0xf3b3,0xcf72,0xcf73,0xcf74,0xf3b5,0xcf75, +0xcf76,0xcf77,0xcf78,0xcf79,0xcf7a,0xcf7b,0xcf7c,0xcf7d, +0xcf7e,0xd0b7,0xcf80,0xcf81,0xcf82,0xcf83,0xf3b8,0xcf84, +0xcf85,0xcf86,0xcf87,0xd9f9,0xcf88,0xcf89,0xcf8a,0xcf8b, +0xcf8c,0xcf8d,0xf3b9,0xcf8e,0xcf8f,0xcf90,0xcf91,0xcf92, +0xcf93,0xcf94,0xcf95,0xf3b7,0xcf96,0xc8e4,0xf3b6,0xcf97, +0xcf98,0xcf99,0xcf9a,0xf3ba,0xcf9b,0xcf9c,0xcf9d,0xcf9e, +0xcf9f,0xf3bb,0xb4c0,0xcfa0,0xd040,0xd041,0xd042,0xd043, +0xd044,0xd045,0xd046,0xd047,0xd048,0xd049,0xd04a,0xd04b, +0xd04c,0xd04d,0xeec3,0xd04e,0xd04f,0xd050,0xd051,0xd052, +0xd053,0xf3bc,0xd054,0xd055,0xf3bd,0xd056,0xd057,0xd058, +0xd1aa,0xd059,0xd05a,0xd05b,0xf4ac,0xd0c6,0xd05c,0xd05d, +0xd05e,0xd05f,0xd060,0xd061,0xd0d0,0xd1dc,0xd062,0xd063, +0xd064,0xd065,0xd066,0xd067,0xcfce,0xd068,0xd069,0xbdd6, +0xd06a,0xd1c3,0xd06b,0xd06c,0xd06d,0xd06e,0xd06f,0xd070, +0xd071,0xbae2,0xe1e9,0xd2c2,0xf1c2,0xb2b9,0xd072,0xd073, +0xb1ed,0xf1c3,0xd074,0xc9c0,0xb3c4,0xd075,0xd9f2,0xd076, +0xcba5,0xd077,0xf1c4,0xd078,0xd079,0xd07a,0xd07b,0xd6d4, +0xd07c,0xd07d,0xd07e,0xd080,0xd081,0xf1c5,0xf4c0,0xf1c6, +0xd082,0xd4ac,0xf1c7,0xd083,0xb0c0,0xf4c1,0xd084,0xd085, +0xf4c2,0xd086,0xd087,0xb4fc,0xd088,0xc5db,0xd089,0xd08a, +0xd08b,0xd08c,0xccbb,0xd08d,0xd08e,0xd08f,0xd0e4,0xd090, +0xd091,0xd092,0xd093,0xd094,0xcde0,0xd095,0xd096,0xd097, +0xd098,0xd099,0xf1c8,0xd09a,0xd9f3,0xd09b,0xd09c,0xd09d, +0xd09e,0xd09f,0xd0a0,0xb1bb,0xd140,0xcfae,0xd141,0xd142, +0xd143,0xb8a4,0xd144,0xd145,0xd146,0xd147,0xd148,0xf1ca, +0xd149,0xd14a,0xd14b,0xd14c,0xf1cb,0xd14d,0xd14e,0xd14f, +0xd150,0xb2c3,0xc1d1,0xd151,0xd152,0xd7b0,0xf1c9,0xd153, +0xd154,0xf1cc,0xd155,0xd156,0xd157,0xd158,0xf1ce,0xd159, +0xd15a,0xd15b,0xd9f6,0xd15c,0xd2e1,0xd4a3,0xd15d,0xd15e, +0xf4c3,0xc8b9,0xd15f,0xd160,0xd161,0xd162,0xd163,0xf4c4, +0xd164,0xd165,0xf1cd,0xf1cf,0xbfe3,0xf1d0,0xd166,0xd167, +0xf1d4,0xd168,0xd169,0xd16a,0xd16b,0xd16c,0xd16d,0xd16e, +0xf1d6,0xf1d1,0xd16f,0xc9d1,0xc5e1,0xd170,0xd171,0xd172, +0xc2e3,0xb9fc,0xd173,0xd174,0xf1d3,0xd175,0xf1d5,0xd176, +0xd177,0xd178,0xb9d3,0xd179,0xd17a,0xd17b,0xd17c,0xd17d, +0xd17e,0xd180,0xf1db,0xd181,0xd182,0xd183,0xd184,0xd185, +0xbad6,0xd186,0xb0fd,0xf1d9,0xd187,0xd188,0xd189,0xd18a, +0xd18b,0xf1d8,0xf1d2,0xf1da,0xd18c,0xd18d,0xd18e,0xd18f, +0xd190,0xf1d7,0xd191,0xd192,0xd193,0xc8ec,0xd194,0xd195, +0xd196,0xd197,0xcdca,0xf1dd,0xd198,0xd199,0xd19a,0xd19b, +0xe5bd,0xd19c,0xd19d,0xd19e,0xf1dc,0xd19f,0xf1de,0xd1a0, +0xd240,0xd241,0xd242,0xd243,0xd244,0xd245,0xd246,0xd247, +0xd248,0xf1df,0xd249,0xd24a,0xcfe5,0xd24b,0xd24c,0xd24d, +0xd24e,0xd24f,0xd250,0xd251,0xd252,0xd253,0xd254,0xd255, +0xd256,0xd257,0xd258,0xd259,0xd25a,0xd25b,0xd25c,0xd25d, +0xd25e,0xd25f,0xd260,0xd261,0xd262,0xd263,0xf4c5,0xbdf3, +0xd264,0xd265,0xd266,0xd267,0xd268,0xd269,0xf1e0,0xd26a, +0xd26b,0xd26c,0xd26d,0xd26e,0xd26f,0xd270,0xd271,0xd272, +0xd273,0xd274,0xd275,0xd276,0xd277,0xd278,0xd279,0xd27a, +0xd27b,0xd27c,0xd27d,0xf1e1,0xd27e,0xd280,0xd281,0xcef7, +0xd282,0xd2aa,0xd283,0xf1fb,0xd284,0xd285,0xb8b2,0xd286, +0xd287,0xd288,0xd289,0xd28a,0xd28b,0xd28c,0xd28d,0xd28e, +0xd28f,0xd290,0xd291,0xd292,0xd293,0xd294,0xd295,0xd296, +0xd297,0xd298,0xd299,0xd29a,0xd29b,0xd29c,0xd29d,0xd29e, +0xd29f,0xd2a0,0xd340,0xd341,0xd342,0xd343,0xd344,0xd345, +0xd346,0xd347,0xd348,0xd349,0xd34a,0xd34b,0xd34c,0xd34d, +0xd34e,0xd34f,0xd350,0xd351,0xd352,0xd353,0xd354,0xd355, +0xd356,0xd357,0xd358,0xd359,0xd35a,0xd35b,0xd35c,0xd35d, +0xd35e,0xbcfb,0xb9db,0xd35f,0xb9e6,0xc3d9,0xcad3,0xeae8, +0xc0c0,0xbef5,0xeae9,0xeaea,0xeaeb,0xd360,0xeaec,0xeaed, +0xeaee,0xeaef,0xbdc7,0xd361,0xd362,0xd363,0xf5fb,0xd364, +0xd365,0xd366,0xf5fd,0xd367,0xf5fe,0xd368,0xf5fc,0xd369, +0xd36a,0xd36b,0xd36c,0xbde2,0xd36d,0xf6a1,0xb4a5,0xd36e, +0xd36f,0xd370,0xd371,0xf6a2,0xd372,0xd373,0xd374,0xf6a3, +0xd375,0xd376,0xd377,0xecb2,0xd378,0xd379,0xd37a,0xd37b, +0xd37c,0xd37d,0xd37e,0xd380,0xd381,0xd382,0xd383,0xd384, +0xd1d4,0xd385,0xd386,0xd387,0xd388,0xd389,0xd38a,0xd9ea, +0xd38b,0xd38c,0xd38d,0xd38e,0xd38f,0xd390,0xd391,0xd392, +0xd393,0xd394,0xd395,0xd396,0xd397,0xd398,0xd399,0xd39a, +0xd39b,0xd39c,0xd39d,0xd39e,0xd39f,0xd3a0,0xd440,0xd441, +0xd442,0xd443,0xd444,0xd445,0xd446,0xd447,0xd448,0xd449, +0xd44a,0xd44b,0xd44c,0xd44d,0xd44e,0xd44f,0xd450,0xd451, +0xd452,0xd453,0xd454,0xd455,0xd456,0xd457,0xd458,0xd459, +0xd45a,0xd45b,0xd45c,0xd45d,0xd45e,0xd45f,0xf6a4,0xd460, +0xd461,0xd462,0xd463,0xd464,0xd465,0xd466,0xd467,0xd468, +0xeeba,0xd469,0xd46a,0xd46b,0xd46c,0xd46d,0xd46e,0xd46f, +0xd470,0xd471,0xd472,0xd473,0xd474,0xd475,0xd476,0xd477, +0xd478,0xd479,0xd47a,0xd47b,0xd47c,0xd47d,0xd47e,0xd480, +0xd481,0xd482,0xd483,0xd484,0xd485,0xd486,0xd487,0xd488, +0xd489,0xd48a,0xd48b,0xd48c,0xd48d,0xd48e,0xd48f,0xd490, +0xd491,0xd492,0xd493,0xd494,0xd495,0xd496,0xd497,0xd498, +0xd499,0xd5b2,0xd49a,0xd49b,0xd49c,0xd49d,0xd49e,0xd49f, +0xd4a0,0xd540,0xd541,0xd542,0xd543,0xd544,0xd545,0xd546, +0xd547,0xd3fe,0xccdc,0xd548,0xd549,0xd54a,0xd54b,0xd54c, +0xd54d,0xd54e,0xd54f,0xcac4,0xd550,0xd551,0xd552,0xd553, +0xd554,0xd555,0xd556,0xd557,0xd558,0xd559,0xd55a,0xd55b, +0xd55c,0xd55d,0xd55e,0xd55f,0xd560,0xd561,0xd562,0xd563, +0xd564,0xd565,0xd566,0xd567,0xd568,0xd569,0xd56a,0xd56b, +0xd56c,0xd56d,0xd56e,0xd56f,0xd570,0xd571,0xd572,0xd573, +0xd574,0xd575,0xd576,0xd577,0xd578,0xd579,0xd57a,0xd57b, +0xd57c,0xd57d,0xd57e,0xd580,0xd581,0xd582,0xd583,0xd584, +0xd585,0xd586,0xd587,0xd588,0xd589,0xd58a,0xd58b,0xd58c, +0xd58d,0xd58e,0xd58f,0xd590,0xd591,0xd592,0xd593,0xd594, +0xd595,0xd596,0xd597,0xd598,0xd599,0xd59a,0xd59b,0xd59c, +0xd59d,0xd59e,0xd59f,0xd5a0,0xd640,0xd641,0xd642,0xd643, +0xd644,0xd645,0xd646,0xd647,0xd648,0xd649,0xd64a,0xd64b, +0xd64c,0xd64d,0xd64e,0xd64f,0xd650,0xd651,0xd652,0xd653, +0xd654,0xd655,0xd656,0xd657,0xd658,0xd659,0xd65a,0xd65b, +0xd65c,0xd65d,0xd65e,0xd65f,0xd660,0xd661,0xd662,0xe5c0, +0xd663,0xd664,0xd665,0xd666,0xd667,0xd668,0xd669,0xd66a, +0xd66b,0xd66c,0xd66d,0xd66e,0xd66f,0xd670,0xd671,0xd672, +0xd673,0xd674,0xd675,0xd676,0xd677,0xd678,0xd679,0xd67a, +0xd67b,0xd67c,0xd67d,0xd67e,0xd680,0xd681,0xf6a5,0xd682, +0xd683,0xd684,0xd685,0xd686,0xd687,0xd688,0xd689,0xd68a, +0xd68b,0xd68c,0xd68d,0xd68e,0xd68f,0xd690,0xd691,0xd692, +0xd693,0xd694,0xd695,0xd696,0xd697,0xd698,0xd699,0xd69a, +0xd69b,0xd69c,0xd69d,0xd69e,0xd69f,0xd6a0,0xd740,0xd741, +0xd742,0xd743,0xd744,0xd745,0xd746,0xd747,0xd748,0xd749, +0xd74a,0xd74b,0xd74c,0xd74d,0xd74e,0xd74f,0xd750,0xd751, +0xd752,0xd753,0xd754,0xd755,0xd756,0xd757,0xd758,0xd759, +0xd75a,0xd75b,0xd75c,0xd75d,0xd75e,0xd75f,0xbeaf,0xd760, +0xd761,0xd762,0xd763,0xd764,0xc6a9,0xd765,0xd766,0xd767, +0xd768,0xd769,0xd76a,0xd76b,0xd76c,0xd76d,0xd76e,0xd76f, +0xd770,0xd771,0xd772,0xd773,0xd774,0xd775,0xd776,0xd777, +0xd778,0xd779,0xd77a,0xd77b,0xd77c,0xd77d,0xd77e,0xd780, +0xd781,0xd782,0xd783,0xd784,0xd785,0xd786,0xd787,0xd788, +0xd789,0xd78a,0xd78b,0xd78c,0xd78d,0xd78e,0xd78f,0xd790, +0xd791,0xd792,0xd793,0xd794,0xd795,0xd796,0xd797,0xd798, +0xdaa5,0xbcc6,0xb6a9,0xb8bc,0xc8cf,0xbca5,0xdaa6,0xdaa7, +0xccd6,0xc8c3,0xdaa8,0xc6fd,0xd799,0xd1b5,0xd2e9,0xd1b6, +0xbcc7,0xd79a,0xbdb2,0xbbe4,0xdaa9,0xdaaa,0xd1c8,0xdaab, +0xd0ed,0xb6ef,0xc2db,0xd79b,0xcbcf,0xb7ed,0xc9e8,0xb7c3, +0xbef7,0xd6a4,0xdaac,0xdaad,0xc6c0,0xd7e7,0xcab6,0xd79c, +0xd5a9,0xcbdf,0xd5ef,0xdaae,0xd6df,0xb4ca,0xdab0,0xdaaf, +0xd79d,0xd2eb,0xdab1,0xdab2,0xdab3,0xcad4,0xdab4,0xcaab, +0xdab5,0xdab6,0xb3cf,0xd6ef,0xdab7,0xbbb0,0xb5ae,0xdab8, +0xdab9,0xb9ee,0xd1af,0xd2e8,0xdaba,0xb8c3,0xcfea,0xb2ef, +0xdabb,0xdabc,0xd79e,0xbdeb,0xcedc,0xd3ef,0xdabd,0xcef3, +0xdabe,0xd3d5,0xbbe5,0xdabf,0xcbb5,0xcbd0,0xdac0,0xc7eb, +0xd6ee,0xdac1,0xc5b5,0xb6c1,0xdac2,0xb7cc,0xbfce,0xdac3, +0xdac4,0xcbad,0xdac5,0xb5f7,0xdac6,0xc1c2,0xd7bb,0xdac7, +0xccb8,0xd79f,0xd2ea,0xc4b1,0xdac8,0xb5fd,0xbbd1,0xdac9, +0xd0b3,0xdaca,0xdacb,0xcebd,0xdacc,0xdacd,0xdace,0xb2f7, +0xdad1,0xdacf,0xd1e8,0xdad0,0xc3d5,0xdad2,0xd7a0,0xdad3, +0xdad4,0xdad5,0xd0bb,0xd2a5,0xb0f9,0xdad6,0xc7ab,0xdad7, +0xbdf7,0xc3a1,0xdad8,0xdad9,0xc3fd,0xccb7,0xdada,0xdadb, +0xc0be,0xc6d7,0xdadc,0xdadd,0xc7b4,0xdade,0xdadf,0xb9c8, +0xd840,0xd841,0xd842,0xd843,0xd844,0xd845,0xd846,0xd847, +0xd848,0xbbed,0xd849,0xd84a,0xd84b,0xd84c,0xb6b9,0xf4f8, +0xd84d,0xf4f9,0xd84e,0xd84f,0xcde3,0xd850,0xd851,0xd852, +0xd853,0xd854,0xd855,0xd856,0xd857,0xf5b9,0xd858,0xd859, +0xd85a,0xd85b,0xebe0,0xd85c,0xd85d,0xd85e,0xd85f,0xd860, +0xd861,0xcff3,0xbbbf,0xd862,0xd863,0xd864,0xd865,0xd866, +0xd867,0xd868,0xbac0,0xd4a5,0xd869,0xd86a,0xd86b,0xd86c, +0xd86d,0xd86e,0xd86f,0xe1d9,0xd870,0xd871,0xd872,0xd873, +0xf5f4,0xb1aa,0xb2f2,0xd874,0xd875,0xd876,0xd877,0xd878, +0xd879,0xd87a,0xf5f5,0xd87b,0xd87c,0xf5f7,0xd87d,0xd87e, +0xd880,0xbad1,0xf5f6,0xd881,0xc3b2,0xd882,0xd883,0xd884, +0xd885,0xd886,0xd887,0xd888,0xf5f9,0xd889,0xd88a,0xd88b, +0xf5f8,0xd88c,0xd88d,0xd88e,0xd88f,0xd890,0xd891,0xd892, +0xd893,0xd894,0xd895,0xd896,0xd897,0xd898,0xd899,0xd89a, +0xd89b,0xd89c,0xd89d,0xd89e,0xd89f,0xd8a0,0xd940,0xd941, +0xd942,0xd943,0xd944,0xd945,0xd946,0xd947,0xd948,0xd949, +0xd94a,0xd94b,0xd94c,0xd94d,0xd94e,0xd94f,0xd950,0xd951, +0xd952,0xd953,0xd954,0xd955,0xd956,0xd957,0xd958,0xd959, +0xd95a,0xd95b,0xd95c,0xd95d,0xd95e,0xd95f,0xd960,0xd961, +0xd962,0xd963,0xd964,0xd965,0xd966,0xd967,0xd968,0xd969, +0xd96a,0xd96b,0xd96c,0xd96d,0xd96e,0xd96f,0xd970,0xd971, +0xd972,0xd973,0xd974,0xd975,0xd976,0xd977,0xd978,0xd979, +0xd97a,0xd97b,0xd97c,0xd97d,0xd97e,0xd980,0xd981,0xd982, +0xd983,0xd984,0xd985,0xd986,0xd987,0xd988,0xd989,0xd98a, +0xd98b,0xd98c,0xd98d,0xd98e,0xd98f,0xd990,0xd991,0xd992, +0xd993,0xd994,0xd995,0xd996,0xd997,0xd998,0xd999,0xd99a, +0xd99b,0xd99c,0xd99d,0xd99e,0xd99f,0xd9a0,0xda40,0xda41, +0xda42,0xda43,0xda44,0xda45,0xda46,0xda47,0xda48,0xda49, +0xda4a,0xda4b,0xda4c,0xda4d,0xda4e,0xb1b4,0xd5ea,0xb8ba, +0xda4f,0xb9b1,0xb2c6,0xd4f0,0xcfcd,0xb0dc,0xd5cb,0xbbf5, +0xd6ca,0xb7b7,0xccb0,0xc6b6,0xb1e1,0xb9ba,0xd6fc,0xb9e1, +0xb7a1,0xbcfa,0xeada,0xeadb,0xccf9,0xb9f3,0xeadc,0xb4fb, +0xc3b3,0xb7d1,0xbad8,0xeadd,0xd4f4,0xeade,0xbcd6,0xbbdf, +0xeadf,0xc1de,0xc2b8,0xd4df,0xd7ca,0xeae0,0xeae1,0xeae4, +0xeae2,0xeae3,0xc9de,0xb8b3,0xb6c4,0xeae5,0xcaea,0xc9cd, +0xb4cd,0xda50,0xda51,0xe2d9,0xc5e2,0xeae6,0xc0b5,0xda52, +0xd7b8,0xeae7,0xd7ac,0xc8fc,0xd8d3,0xd8cd,0xd4de,0xda53, +0xd4f9,0xc9c4,0xd3ae,0xb8d3,0xb3e0,0xda54,0xc9e2,0xf4f6, +0xda55,0xda56,0xda57,0xbad5,0xda58,0xf4f7,0xda59,0xda5a, +0xd7df,0xda5b,0xda5c,0xf4f1,0xb8b0,0xd5d4,0xb8cf,0xc6f0, +0xda5d,0xda5e,0xda5f,0xda60,0xda61,0xda62,0xda63,0xda64, +0xda65,0xb3c3,0xda66,0xda67,0xf4f2,0xb3ac,0xda68,0xda69, +0xda6a,0xda6b,0xd4bd,0xc7f7,0xda6c,0xda6d,0xda6e,0xda6f, +0xda70,0xf4f4,0xda71,0xda72,0xf4f3,0xda73,0xda74,0xda75, +0xda76,0xda77,0xda78,0xda79,0xda7a,0xda7b,0xda7c,0xcccb, +0xda7d,0xda7e,0xda80,0xc8a4,0xda81,0xda82,0xda83,0xda84, +0xda85,0xda86,0xda87,0xda88,0xda89,0xda8a,0xda8b,0xda8c, +0xda8d,0xf4f5,0xda8e,0xd7e3,0xc5bf,0xf5c0,0xda8f,0xda90, +0xf5bb,0xda91,0xf5c3,0xda92,0xf5c2,0xda93,0xd6ba,0xf5c1, +0xda94,0xda95,0xda96,0xd4be,0xf5c4,0xda97,0xf5cc,0xda98, +0xda99,0xda9a,0xda9b,0xb0cf,0xb5f8,0xda9c,0xf5c9,0xf5ca, +0xda9d,0xc5dc,0xda9e,0xda9f,0xdaa0,0xdb40,0xf5c5,0xf5c6, +0xdb41,0xdb42,0xf5c7,0xf5cb,0xdb43,0xbee0,0xf5c8,0xb8fa, +0xdb44,0xdb45,0xdb46,0xf5d0,0xf5d3,0xdb47,0xdb48,0xdb49, +0xbfe7,0xdb4a,0xb9f2,0xf5bc,0xf5cd,0xdb4b,0xdb4c,0xc2b7, +0xdb4d,0xdb4e,0xdb4f,0xccf8,0xdb50,0xbcf9,0xdb51,0xf5ce, +0xf5cf,0xf5d1,0xb6e5,0xf5d2,0xdb52,0xf5d5,0xdb53,0xdb54, +0xdb55,0xdb56,0xdb57,0xdb58,0xdb59,0xf5bd,0xdb5a,0xdb5b, +0xdb5c,0xf5d4,0xd3bb,0xdb5d,0xb3ec,0xdb5e,0xdb5f,0xcca4, +0xdb60,0xdb61,0xdb62,0xdb63,0xf5d6,0xdb64,0xdb65,0xdb66, +0xdb67,0xdb68,0xdb69,0xdb6a,0xdb6b,0xf5d7,0xbee1,0xf5d8, +0xdb6c,0xdb6d,0xccdf,0xf5db,0xdb6e,0xdb6f,0xdb70,0xdb71, +0xdb72,0xb2c8,0xd7d9,0xdb73,0xf5d9,0xdb74,0xf5da,0xf5dc, +0xdb75,0xf5e2,0xdb76,0xdb77,0xdb78,0xf5e0,0xdb79,0xdb7a, +0xdb7b,0xf5df,0xf5dd,0xdb7c,0xdb7d,0xf5e1,0xdb7e,0xdb80, +0xf5de,0xf5e4,0xf5e5,0xdb81,0xcce3,0xdb82,0xdb83,0xe5bf, +0xb5b8,0xf5e3,0xf5e8,0xcca3,0xdb84,0xdb85,0xdb86,0xdb87, +0xdb88,0xf5e6,0xf5e7,0xdb89,0xdb8a,0xdb8b,0xdb8c,0xdb8d, +0xdb8e,0xf5be,0xdb8f,0xdb90,0xdb91,0xdb92,0xdb93,0xdb94, +0xdb95,0xdb96,0xdb97,0xdb98,0xdb99,0xdb9a,0xb1c4,0xdb9b, +0xdb9c,0xf5bf,0xdb9d,0xdb9e,0xb5c5,0xb2e4,0xdb9f,0xf5ec, +0xf5e9,0xdba0,0xb6d7,0xdc40,0xf5ed,0xdc41,0xf5ea,0xdc42, +0xdc43,0xdc44,0xdc45,0xdc46,0xf5eb,0xdc47,0xdc48,0xb4da, +0xdc49,0xd4ea,0xdc4a,0xdc4b,0xdc4c,0xf5ee,0xdc4d,0xb3f9, +0xdc4e,0xdc4f,0xdc50,0xdc51,0xdc52,0xdc53,0xdc54,0xf5ef, +0xf5f1,0xdc55,0xdc56,0xdc57,0xf5f0,0xdc58,0xdc59,0xdc5a, +0xdc5b,0xdc5c,0xdc5d,0xdc5e,0xf5f2,0xdc5f,0xf5f3,0xdc60, +0xdc61,0xdc62,0xdc63,0xdc64,0xdc65,0xdc66,0xdc67,0xdc68, +0xdc69,0xdc6a,0xdc6b,0xc9ed,0xb9aa,0xdc6c,0xdc6d,0xc7fb, +0xdc6e,0xdc6f,0xb6e3,0xdc70,0xdc71,0xdc72,0xdc73,0xdc74, +0xdc75,0xdc76,0xccc9,0xdc77,0xdc78,0xdc79,0xdc7a,0xdc7b, +0xdc7c,0xdc7d,0xdc7e,0xdc80,0xdc81,0xdc82,0xdc83,0xdc84, +0xdc85,0xdc86,0xdc87,0xdc88,0xdc89,0xdc8a,0xeaa6,0xdc8b, +0xdc8c,0xdc8d,0xdc8e,0xdc8f,0xdc90,0xdc91,0xdc92,0xdc93, +0xdc94,0xdc95,0xdc96,0xdc97,0xdc98,0xdc99,0xdc9a,0xdc9b, +0xdc9c,0xdc9d,0xdc9e,0xdc9f,0xdca0,0xdd40,0xdd41,0xdd42, +0xdd43,0xdd44,0xdd45,0xdd46,0xdd47,0xdd48,0xdd49,0xdd4a, +0xdd4b,0xdd4c,0xdd4d,0xdd4e,0xdd4f,0xdd50,0xdd51,0xdd52, +0xdd53,0xdd54,0xdd55,0xdd56,0xdd57,0xdd58,0xdd59,0xdd5a, +0xdd5b,0xdd5c,0xdd5d,0xdd5e,0xdd5f,0xdd60,0xdd61,0xdd62, +0xdd63,0xdd64,0xdd65,0xdd66,0xdd67,0xdd68,0xdd69,0xdd6a, +0xdd6b,0xdd6c,0xdd6d,0xdd6e,0xdd6f,0xdd70,0xdd71,0xdd72, +0xdd73,0xdd74,0xdd75,0xdd76,0xdd77,0xdd78,0xdd79,0xdd7a, +0xdd7b,0xdd7c,0xdd7d,0xdd7e,0xdd80,0xdd81,0xdd82,0xdd83, +0xdd84,0xdd85,0xdd86,0xdd87,0xdd88,0xdd89,0xdd8a,0xdd8b, +0xdd8c,0xdd8d,0xdd8e,0xdd8f,0xdd90,0xdd91,0xdd92,0xdd93, +0xdd94,0xdd95,0xdd96,0xdd97,0xdd98,0xdd99,0xdd9a,0xdd9b, +0xdd9c,0xdd9d,0xdd9e,0xdd9f,0xdda0,0xde40,0xde41,0xde42, +0xde43,0xde44,0xde45,0xde46,0xde47,0xde48,0xde49,0xde4a, +0xde4b,0xde4c,0xde4d,0xde4e,0xde4f,0xde50,0xde51,0xde52, +0xde53,0xde54,0xde55,0xde56,0xde57,0xde58,0xde59,0xde5a, +0xde5b,0xde5c,0xde5d,0xde5e,0xde5f,0xde60,0xb3b5,0xd4fe, +0xb9ec,0xd0f9,0xde61,0xe9ed,0xd7aa,0xe9ee,0xc2d6,0xc8ed, +0xbae4,0xe9ef,0xe9f0,0xe9f1,0xd6e1,0xe9f2,0xe9f3,0xe9f5, +0xe9f4,0xe9f6,0xe9f7,0xc7e1,0xe9f8,0xd4d8,0xe9f9,0xbdce, +0xde62,0xe9fa,0xe9fb,0xbdcf,0xe9fc,0xb8a8,0xc1be,0xe9fd, +0xb1b2,0xbbd4,0xb9f5,0xe9fe,0xde63,0xeaa1,0xeaa2,0xeaa3, +0xb7f8,0xbcad,0xde64,0xcae4,0xe0ce,0xd4af,0xcfbd,0xd5b7, +0xeaa4,0xd5de,0xeaa5,0xd0c1,0xb9bc,0xde65,0xb4c7,0xb1d9, +0xde66,0xde67,0xde68,0xc0b1,0xde69,0xde6a,0xde6b,0xde6c, +0xb1e6,0xb1e7,0xde6d,0xb1e8,0xde6e,0xde6f,0xde70,0xde71, +0xb3bd,0xc8e8,0xde72,0xde73,0xde74,0xde75,0xe5c1,0xde76, +0xde77,0xb1df,0xde78,0xde79,0xde7a,0xc1c9,0xb4ef,0xde7b, +0xde7c,0xc7a8,0xd3d8,0xde7d,0xc6f9,0xd1b8,0xde7e,0xb9fd, +0xc2f5,0xde80,0xde81,0xde82,0xde83,0xde84,0xd3ad,0xde85, +0xd4cb,0xbdfc,0xde86,0xe5c2,0xb7b5,0xe5c3,0xde87,0xde88, +0xbbb9,0xd5e2,0xde89,0xbdf8,0xd4b6,0xcea5,0xc1ac,0xb3d9, +0xde8a,0xde8b,0xccf6,0xde8c,0xe5c6,0xe5c4,0xe5c8,0xde8d, +0xe5ca,0xe5c7,0xb5cf,0xc6c8,0xde8e,0xb5fc,0xe5c5,0xde8f, +0xcaf6,0xde90,0xde91,0xe5c9,0xde92,0xde93,0xde94,0xc3d4, +0xb1c5,0xbca3,0xde95,0xde96,0xde97,0xd7b7,0xde98,0xde99, +0xcdcb,0xcbcd,0xcaca,0xccd3,0xe5cc,0xe5cb,0xc4e6,0xde9a, +0xde9b,0xd1a1,0xd1b7,0xe5cd,0xde9c,0xe5d0,0xde9d,0xcdb8, +0xd6f0,0xe5cf,0xb5dd,0xde9e,0xcdbe,0xde9f,0xe5d1,0xb6ba, +0xdea0,0xdf40,0xcda8,0xb9e4,0xdf41,0xcac5,0xb3d1,0xcbd9, +0xd4ec,0xe5d2,0xb7ea,0xdf42,0xdf43,0xdf44,0xe5ce,0xdf45, +0xdf46,0xdf47,0xdf48,0xdf49,0xdf4a,0xe5d5,0xb4fe,0xe5d6, +0xdf4b,0xdf4c,0xdf4d,0xdf4e,0xdf4f,0xe5d3,0xe5d4,0xdf50, +0xd2dd,0xdf51,0xdf52,0xc2df,0xb1c6,0xdf53,0xd3e2,0xdf54, +0xdf55,0xb6dd,0xcbec,0xdf56,0xe5d7,0xdf57,0xdf58,0xd3f6, +0xdf59,0xdf5a,0xdf5b,0xdf5c,0xdf5d,0xb1e9,0xdf5e,0xb6f4, +0xe5da,0xe5d8,0xe5d9,0xb5c0,0xdf5f,0xdf60,0xdf61,0xd2c5, +0xe5dc,0xdf62,0xdf63,0xe5de,0xdf64,0xdf65,0xdf66,0xdf67, +0xdf68,0xdf69,0xe5dd,0xc7b2,0xdf6a,0xd2a3,0xdf6b,0xdf6c, +0xe5db,0xdf6d,0xdf6e,0xdf6f,0xdf70,0xd4e2,0xd5da,0xdf71, +0xdf72,0xdf73,0xdf74,0xdf75,0xe5e0,0xd7f1,0xdf76,0xdf77, +0xdf78,0xdf79,0xdf7a,0xdf7b,0xdf7c,0xe5e1,0xdf7d,0xb1dc, +0xd1fb,0xdf7e,0xe5e2,0xe5e4,0xdf80,0xdf81,0xdf82,0xdf83, +0xe5e3,0xdf84,0xdf85,0xe5e5,0xdf86,0xdf87,0xdf88,0xdf89, +0xdf8a,0xd2d8,0xdf8b,0xb5cb,0xdf8c,0xe7df,0xdf8d,0xdaf5, +0xdf8e,0xdaf8,0xdf8f,0xdaf6,0xdf90,0xdaf7,0xdf91,0xdf92, +0xdf93,0xdafa,0xd0cf,0xc4c7,0xdf94,0xdf95,0xb0ee,0xdf96, +0xdf97,0xdf98,0xd0b0,0xdf99,0xdaf9,0xdf9a,0xd3ca,0xbaaa, +0xdba2,0xc7f1,0xdf9b,0xdafc,0xdafb,0xc9db,0xdafd,0xdf9c, +0xdba1,0xd7de,0xdafe,0xc1da,0xdf9d,0xdf9e,0xdba5,0xdf9f, +0xdfa0,0xd3f4,0xe040,0xe041,0xdba7,0xdba4,0xe042,0xdba8, +0xe043,0xe044,0xbdbc,0xe045,0xe046,0xe047,0xc0c9,0xdba3, +0xdba6,0xd6a3,0xe048,0xdba9,0xe049,0xe04a,0xe04b,0xdbad, +0xe04c,0xe04d,0xe04e,0xdbae,0xdbac,0xbac2,0xe04f,0xe050, +0xe051,0xbfa4,0xdbab,0xe052,0xe053,0xe054,0xdbaa,0xd4c7, +0xb2bf,0xe055,0xe056,0xdbaf,0xe057,0xb9f9,0xe058,0xdbb0, +0xe059,0xe05a,0xe05b,0xe05c,0xb3bb,0xe05d,0xe05e,0xe05f, +0xb5a6,0xe060,0xe061,0xe062,0xe063,0xb6bc,0xdbb1,0xe064, +0xe065,0xe066,0xb6f5,0xe067,0xdbb2,0xe068,0xe069,0xe06a, +0xe06b,0xe06c,0xe06d,0xe06e,0xe06f,0xe070,0xe071,0xe072, +0xe073,0xe074,0xe075,0xe076,0xe077,0xe078,0xe079,0xe07a, +0xe07b,0xb1c9,0xe07c,0xe07d,0xe07e,0xe080,0xdbb4,0xe081, +0xe082,0xe083,0xdbb3,0xdbb5,0xe084,0xe085,0xe086,0xe087, +0xe088,0xe089,0xe08a,0xe08b,0xe08c,0xe08d,0xe08e,0xdbb7, +0xe08f,0xdbb6,0xe090,0xe091,0xe092,0xe093,0xe094,0xe095, +0xe096,0xdbb8,0xe097,0xe098,0xe099,0xe09a,0xe09b,0xe09c, +0xe09d,0xe09e,0xe09f,0xdbb9,0xe0a0,0xe140,0xdbba,0xe141, +0xe142,0xd3cf,0xf4fa,0xc7f5,0xd7c3,0xc5e4,0xf4fc,0xf4fd, +0xf4fb,0xe143,0xbec6,0xe144,0xe145,0xe146,0xe147,0xd0ef, +0xe148,0xe149,0xb7d3,0xe14a,0xe14b,0xd4cd,0xccaa,0xe14c, +0xe14d,0xf5a2,0xf5a1,0xbaa8,0xf4fe,0xcbd6,0xe14e,0xe14f, +0xe150,0xf5a4,0xc0d2,0xe151,0xb3ea,0xe152,0xcdaa,0xf5a5, +0xf5a3,0xbdb4,0xf5a8,0xe153,0xf5a9,0xbdcd,0xc3b8,0xbfe1, +0xcbe1,0xf5aa,0xe154,0xe155,0xe156,0xf5a6,0xf5a7,0xc4f0, +0xe157,0xe158,0xe159,0xe15a,0xe15b,0xf5ac,0xe15c,0xb4bc, +0xe15d,0xd7ed,0xe15e,0xb4d7,0xf5ab,0xf5ae,0xe15f,0xe160, +0xf5ad,0xf5af,0xd0d1,0xe161,0xe162,0xe163,0xe164,0xe165, +0xe166,0xe167,0xc3d1,0xc8a9,0xe168,0xe169,0xe16a,0xe16b, +0xe16c,0xe16d,0xf5b0,0xf5b1,0xe16e,0xe16f,0xe170,0xe171, +0xe172,0xe173,0xf5b2,0xe174,0xe175,0xf5b3,0xf5b4,0xf5b5, +0xe176,0xe177,0xe178,0xe179,0xf5b7,0xf5b6,0xe17a,0xe17b, +0xe17c,0xe17d,0xf5b8,0xe17e,0xe180,0xe181,0xe182,0xe183, +0xe184,0xe185,0xe186,0xe187,0xe188,0xe189,0xe18a,0xb2c9, +0xe18b,0xd3d4,0xcacd,0xe18c,0xc0ef,0xd6d8,0xd2b0,0xc1bf, +0xe18d,0xbdf0,0xe18e,0xe18f,0xe190,0xe191,0xe192,0xe193, +0xe194,0xe195,0xe196,0xe197,0xb8aa,0xe198,0xe199,0xe19a, +0xe19b,0xe19c,0xe19d,0xe19e,0xe19f,0xe1a0,0xe240,0xe241, +0xe242,0xe243,0xe244,0xe245,0xe246,0xe247,0xe248,0xe249, +0xe24a,0xe24b,0xe24c,0xe24d,0xe24e,0xe24f,0xe250,0xe251, +0xe252,0xe253,0xe254,0xe255,0xe256,0xe257,0xe258,0xe259, +0xe25a,0xe25b,0xe25c,0xe25d,0xe25e,0xe25f,0xe260,0xe261, +0xe262,0xe263,0xe264,0xe265,0xe266,0xe267,0xe268,0xe269, +0xe26a,0xe26b,0xe26c,0xe26d,0xe26e,0xe26f,0xe270,0xe271, +0xe272,0xe273,0xe274,0xe275,0xe276,0xe277,0xe278,0xe279, +0xe27a,0xe27b,0xe27c,0xe27d,0xe27e,0xe280,0xe281,0xe282, +0xe283,0xe284,0xe285,0xe286,0xe287,0xe288,0xe289,0xe28a, +0xe28b,0xe28c,0xe28d,0xe28e,0xe28f,0xe290,0xe291,0xe292, +0xe293,0xe294,0xe295,0xe296,0xe297,0xe298,0xe299,0xe29a, +0xe29b,0xe29c,0xe29d,0xe29e,0xe29f,0xe2a0,0xe340,0xe341, +0xe342,0xe343,0xe344,0xe345,0xe346,0xe347,0xe348,0xe349, +0xe34a,0xe34b,0xe34c,0xe34d,0xe34e,0xe34f,0xe350,0xe351, +0xe352,0xe353,0xe354,0xe355,0xe356,0xe357,0xe358,0xe359, +0xe35a,0xe35b,0xe35c,0xe35d,0xe35e,0xe35f,0xe360,0xe361, +0xe362,0xe363,0xe364,0xe365,0xe366,0xe367,0xe368,0xe369, +0xe36a,0xe36b,0xe36c,0xe36d,0xbcf8,0xe36e,0xe36f,0xe370, +0xe371,0xe372,0xe373,0xe374,0xe375,0xe376,0xe377,0xe378, +0xe379,0xe37a,0xe37b,0xe37c,0xe37d,0xe37e,0xe380,0xe381, +0xe382,0xe383,0xe384,0xe385,0xe386,0xe387,0xf6c6,0xe388, +0xe389,0xe38a,0xe38b,0xe38c,0xe38d,0xe38e,0xe38f,0xe390, +0xe391,0xe392,0xe393,0xe394,0xe395,0xe396,0xe397,0xe398, +0xe399,0xe39a,0xe39b,0xe39c,0xe39d,0xe39e,0xe39f,0xe3a0, +0xe440,0xe441,0xe442,0xe443,0xe444,0xe445,0xf6c7,0xe446, +0xe447,0xe448,0xe449,0xe44a,0xe44b,0xe44c,0xe44d,0xe44e, +0xe44f,0xe450,0xe451,0xe452,0xe453,0xe454,0xe455,0xe456, +0xe457,0xe458,0xe459,0xe45a,0xe45b,0xe45c,0xe45d,0xe45e, +0xf6c8,0xe45f,0xe460,0xe461,0xe462,0xe463,0xe464,0xe465, +0xe466,0xe467,0xe468,0xe469,0xe46a,0xe46b,0xe46c,0xe46d, +0xe46e,0xe46f,0xe470,0xe471,0xe472,0xe473,0xe474,0xe475, +0xe476,0xe477,0xe478,0xe479,0xe47a,0xe47b,0xe47c,0xe47d, +0xe47e,0xe480,0xe481,0xe482,0xe483,0xe484,0xe485,0xe486, +0xe487,0xe488,0xe489,0xe48a,0xe48b,0xe48c,0xe48d,0xe48e, +0xe48f,0xe490,0xe491,0xe492,0xe493,0xe494,0xe495,0xe496, +0xe497,0xe498,0xe499,0xe49a,0xe49b,0xe49c,0xe49d,0xe49e, +0xe49f,0xe4a0,0xe540,0xe541,0xe542,0xe543,0xe544,0xe545, +0xe546,0xe547,0xe548,0xe549,0xe54a,0xe54b,0xe54c,0xe54d, +0xe54e,0xe54f,0xe550,0xe551,0xe552,0xe553,0xe554,0xe555, +0xe556,0xe557,0xe558,0xe559,0xe55a,0xe55b,0xe55c,0xe55d, +0xe55e,0xe55f,0xe560,0xe561,0xe562,0xe563,0xe564,0xe565, +0xe566,0xe567,0xe568,0xe569,0xe56a,0xe56b,0xe56c,0xe56d, +0xe56e,0xe56f,0xe570,0xe571,0xe572,0xe573,0xf6c9,0xe574, +0xe575,0xe576,0xe577,0xe578,0xe579,0xe57a,0xe57b,0xe57c, +0xe57d,0xe57e,0xe580,0xe581,0xe582,0xe583,0xe584,0xe585, +0xe586,0xe587,0xe588,0xe589,0xe58a,0xe58b,0xe58c,0xe58d, +0xe58e,0xe58f,0xe590,0xe591,0xe592,0xe593,0xe594,0xe595, +0xe596,0xe597,0xe598,0xe599,0xe59a,0xe59b,0xe59c,0xe59d, +0xe59e,0xe59f,0xf6ca,0xe5a0,0xe640,0xe641,0xe642,0xe643, +0xe644,0xe645,0xe646,0xe647,0xe648,0xe649,0xe64a,0xe64b, +0xe64c,0xe64d,0xe64e,0xe64f,0xe650,0xe651,0xe652,0xe653, +0xe654,0xe655,0xe656,0xe657,0xe658,0xe659,0xe65a,0xe65b, +0xe65c,0xe65d,0xe65e,0xe65f,0xe660,0xe661,0xe662,0xf6cc, +0xe663,0xe664,0xe665,0xe666,0xe667,0xe668,0xe669,0xe66a, +0xe66b,0xe66c,0xe66d,0xe66e,0xe66f,0xe670,0xe671,0xe672, +0xe673,0xe674,0xe675,0xe676,0xe677,0xe678,0xe679,0xe67a, +0xe67b,0xe67c,0xe67d,0xe67e,0xe680,0xe681,0xe682,0xe683, +0xe684,0xe685,0xe686,0xe687,0xe688,0xe689,0xe68a,0xe68b, +0xe68c,0xe68d,0xe68e,0xe68f,0xe690,0xe691,0xe692,0xe693, +0xe694,0xe695,0xe696,0xe697,0xe698,0xe699,0xe69a,0xe69b, +0xe69c,0xe69d,0xf6cb,0xe69e,0xe69f,0xe6a0,0xe740,0xe741, +0xe742,0xe743,0xe744,0xe745,0xe746,0xe747,0xf7e9,0xe748, +0xe749,0xe74a,0xe74b,0xe74c,0xe74d,0xe74e,0xe74f,0xe750, +0xe751,0xe752,0xe753,0xe754,0xe755,0xe756,0xe757,0xe758, +0xe759,0xe75a,0xe75b,0xe75c,0xe75d,0xe75e,0xe75f,0xe760, +0xe761,0xe762,0xe763,0xe764,0xe765,0xe766,0xe767,0xe768, +0xe769,0xe76a,0xe76b,0xe76c,0xe76d,0xe76e,0xe76f,0xe770, +0xe771,0xe772,0xe773,0xe774,0xe775,0xe776,0xe777,0xe778, +0xe779,0xe77a,0xe77b,0xe77c,0xe77d,0xe77e,0xe780,0xe781, +0xe782,0xe783,0xe784,0xe785,0xe786,0xe787,0xe788,0xe789, +0xe78a,0xe78b,0xe78c,0xe78d,0xe78e,0xe78f,0xe790,0xe791, +0xe792,0xe793,0xe794,0xe795,0xe796,0xe797,0xe798,0xe799, +0xe79a,0xe79b,0xe79c,0xe79d,0xe79e,0xe79f,0xe7a0,0xe840, +0xe841,0xe842,0xe843,0xe844,0xe845,0xe846,0xe847,0xe848, +0xe849,0xe84a,0xe84b,0xe84c,0xe84d,0xe84e,0xf6cd,0xe84f, +0xe850,0xe851,0xe852,0xe853,0xe854,0xe855,0xe856,0xe857, +0xe858,0xe859,0xe85a,0xe85b,0xe85c,0xe85d,0xe85e,0xe85f, +0xe860,0xe861,0xe862,0xe863,0xe864,0xe865,0xe866,0xe867, +0xe868,0xe869,0xe86a,0xe86b,0xe86c,0xe86d,0xe86e,0xe86f, +0xe870,0xe871,0xe872,0xe873,0xe874,0xe875,0xe876,0xe877, +0xe878,0xe879,0xe87a,0xf6ce,0xe87b,0xe87c,0xe87d,0xe87e, +0xe880,0xe881,0xe882,0xe883,0xe884,0xe885,0xe886,0xe887, +0xe888,0xe889,0xe88a,0xe88b,0xe88c,0xe88d,0xe88e,0xe88f, +0xe890,0xe891,0xe892,0xe893,0xe894,0xeec4,0xeec5,0xeec6, +0xd5eb,0xb6a4,0xeec8,0xeec7,0xeec9,0xeeca,0xc7a5,0xeecb, +0xeecc,0xe895,0xb7b0,0xb5f6,0xeecd,0xeecf,0xe896,0xeece, +0xe897,0xb8c6,0xeed0,0xeed1,0xeed2,0xb6db,0xb3ae,0xd6d3, +0xc4c6,0xb1b5,0xb8d6,0xeed3,0xeed4,0xd4bf,0xc7d5,0xbefb, +0xced9,0xb9b3,0xeed6,0xeed5,0xeed8,0xeed7,0xc5a5,0xeed9, +0xeeda,0xc7ae,0xeedb,0xc7af,0xeedc,0xb2a7,0xeedd,0xeede, +0xeedf,0xeee0,0xeee1,0xd7ea,0xeee2,0xeee3,0xbcd8,0xeee4, +0xd3cb,0xccfa,0xb2ac,0xc1e5,0xeee5,0xc7a6,0xc3ad,0xe898, +0xeee6,0xeee7,0xeee8,0xeee9,0xeeea,0xeeeb,0xeeec,0xe899, +0xeeed,0xeeee,0xeeef,0xe89a,0xe89b,0xeef0,0xeef1,0xeef2, +0xeef4,0xeef3,0xe89c,0xeef5,0xcdad,0xc2c1,0xeef6,0xeef7, +0xeef8,0xd5a1,0xeef9,0xcfb3,0xeefa,0xeefb,0xe89d,0xeefc, +0xeefd,0xefa1,0xeefe,0xefa2,0xb8f5,0xc3fa,0xefa3,0xefa4, +0xbdc2,0xd2bf,0xb2f9,0xefa5,0xefa6,0xefa7,0xd2f8,0xefa8, +0xd6fd,0xefa9,0xc6cc,0xe89e,0xefaa,0xefab,0xc1b4,0xefac, +0xcffa,0xcbf8,0xefae,0xefad,0xb3fa,0xb9f8,0xefaf,0xefb0, +0xd0e2,0xefb1,0xefb2,0xb7e6,0xd0bf,0xefb3,0xefb4,0xefb5, +0xc8f1,0xcce0,0xefb6,0xefb7,0xefb8,0xefb9,0xefba,0xd5e0, +0xefbb,0xb4ed,0xc3aa,0xefbc,0xe89f,0xefbd,0xefbe,0xefbf, +0xe8a0,0xcefd,0xefc0,0xc2e0,0xb4b8,0xd7b6,0xbdf5,0xe940, +0xcfc7,0xefc3,0xefc1,0xefc2,0xefc4,0xb6a7,0xbcfc,0xbee2, +0xc3cc,0xefc5,0xefc6,0xe941,0xefc7,0xefcf,0xefc8,0xefc9, +0xefca,0xc7c2,0xeff1,0xb6cd,0xefcb,0xe942,0xefcc,0xefcd, +0xb6c6,0xc3be,0xefce,0xe943,0xefd0,0xefd1,0xefd2,0xd5f2, +0xe944,0xefd3,0xc4f7,0xe945,0xefd4,0xc4f8,0xefd5,0xefd6, +0xb8e4,0xb0f7,0xefd7,0xefd8,0xefd9,0xe946,0xefda,0xefdb, +0xefdc,0xefdd,0xe947,0xefde,0xbeb5,0xefe1,0xefdf,0xefe0, +0xe948,0xefe2,0xefe3,0xc1cd,0xefe4,0xefe5,0xefe6,0xefe7, +0xefe8,0xefe9,0xefea,0xefeb,0xefec,0xc0d8,0xe949,0xefed, +0xc1ad,0xefee,0xefef,0xeff0,0xe94a,0xe94b,0xcfe2,0xe94c, +0xe94d,0xe94e,0xe94f,0xe950,0xe951,0xe952,0xe953,0xb3a4, +0xe954,0xe955,0xe956,0xe957,0xe958,0xe959,0xe95a,0xe95b, +0xe95c,0xe95d,0xe95e,0xe95f,0xe960,0xe961,0xe962,0xe963, +0xe964,0xe965,0xe966,0xe967,0xe968,0xe969,0xe96a,0xe96b, +0xe96c,0xe96d,0xe96e,0xe96f,0xe970,0xe971,0xe972,0xe973, +0xe974,0xe975,0xe976,0xe977,0xe978,0xe979,0xe97a,0xe97b, +0xe97c,0xe97d,0xe97e,0xe980,0xe981,0xe982,0xe983,0xe984, +0xe985,0xe986,0xe987,0xe988,0xe989,0xe98a,0xe98b,0xe98c, +0xe98d,0xe98e,0xe98f,0xe990,0xe991,0xe992,0xe993,0xe994, +0xe995,0xe996,0xe997,0xe998,0xe999,0xe99a,0xe99b,0xe99c, +0xe99d,0xe99e,0xe99f,0xe9a0,0xea40,0xea41,0xea42,0xea43, +0xea44,0xea45,0xea46,0xea47,0xea48,0xea49,0xea4a,0xea4b, +0xea4c,0xea4d,0xea4e,0xea4f,0xea50,0xea51,0xea52,0xea53, +0xea54,0xea55,0xea56,0xea57,0xea58,0xea59,0xea5a,0xea5b, +0xc3c5,0xe3c5,0xc9c1,0xe3c6,0xea5c,0xb1d5,0xceca,0xb4b3, +0xc8f2,0xe3c7,0xcfd0,0xe3c8,0xbce4,0xe3c9,0xe3ca,0xc3c6, +0xd5a2,0xc4d6,0xb9eb,0xcec5,0xe3cb,0xc3f6,0xe3cc,0xea5d, +0xb7a7,0xb8f3,0xbad2,0xe3cd,0xe3ce,0xd4c4,0xe3cf,0xea5e, +0xe3d0,0xd1cb,0xe3d1,0xe3d2,0xe3d3,0xe3d4,0xd1d6,0xe3d5, +0xb2fb,0xc0bb,0xe3d6,0xea5f,0xc0ab,0xe3d7,0xe3d8,0xe3d9, +0xea60,0xe3da,0xe3db,0xea61,0xb8b7,0xdae2,0xea62,0xb6d3, +0xea63,0xdae4,0xdae3,0xea64,0xea65,0xea66,0xea67,0xea68, +0xea69,0xea6a,0xdae6,0xea6b,0xea6c,0xea6d,0xc8ee,0xea6e, +0xea6f,0xdae5,0xb7c0,0xd1f4,0xd2f5,0xd5f3,0xbdd7,0xea70, +0xea71,0xea72,0xea73,0xd7e8,0xdae8,0xdae7,0xea74,0xb0a2, +0xcdd3,0xea75,0xdae9,0xea76,0xb8bd,0xbcca,0xc2bd,0xc2a4, +0xb3c2,0xdaea,0xea77,0xc2aa,0xc4b0,0xbdb5,0xea78,0xea79, +0xcfde,0xea7a,0xea7b,0xea7c,0xdaeb,0xc9c2,0xea7d,0xea7e, +0xea80,0xea81,0xea82,0xb1dd,0xea83,0xea84,0xea85,0xdaec, +0xea86,0xb6b8,0xd4ba,0xea87,0xb3fd,0xea88,0xea89,0xdaed, +0xd4c9,0xcfd5,0xc5e3,0xea8a,0xdaee,0xea8b,0xea8c,0xea8d, +0xea8e,0xea8f,0xdaef,0xea90,0xdaf0,0xc1ea,0xccd5,0xcfdd, +0xea91,0xea92,0xea93,0xea94,0xea95,0xea96,0xea97,0xea98, +0xea99,0xea9a,0xea9b,0xea9c,0xea9d,0xd3e7,0xc2a1,0xea9e, +0xdaf1,0xea9f,0xeaa0,0xcbe5,0xeb40,0xdaf2,0xeb41,0xcbe6, +0xd2fe,0xeb42,0xeb43,0xeb44,0xb8f4,0xeb45,0xeb46,0xdaf3, +0xb0af,0xcfb6,0xeb47,0xeb48,0xd5cf,0xeb49,0xeb4a,0xeb4b, +0xeb4c,0xeb4d,0xeb4e,0xeb4f,0xeb50,0xeb51,0xeb52,0xcbed, +0xeb53,0xeb54,0xeb55,0xeb56,0xeb57,0xeb58,0xeb59,0xeb5a, +0xdaf4,0xeb5b,0xeb5c,0xe3c4,0xeb5d,0xeb5e,0xc1a5,0xeb5f, +0xeb60,0xf6bf,0xeb61,0xeb62,0xf6c0,0xf6c1,0xc4d1,0xeb63, +0xc8b8,0xd1e3,0xeb64,0xeb65,0xd0db,0xd1c5,0xbcaf,0xb9cd, +0xeb66,0xeff4,0xeb67,0xeb68,0xb4c6,0xd3ba,0xf6c2,0xb3fb, +0xeb69,0xeb6a,0xf6c3,0xeb6b,0xeb6c,0xb5f1,0xeb6d,0xeb6e, +0xeb6f,0xeb70,0xeb71,0xeb72,0xeb73,0xeb74,0xeb75,0xeb76, +0xf6c5,0xeb77,0xeb78,0xeb79,0xeb7a,0xeb7b,0xeb7c,0xeb7d, +0xd3ea,0xf6a7,0xd1a9,0xeb7e,0xeb80,0xeb81,0xeb82,0xf6a9, +0xeb83,0xeb84,0xeb85,0xf6a8,0xeb86,0xeb87,0xc1e3,0xc0d7, +0xeb88,0xb1a2,0xeb89,0xeb8a,0xeb8b,0xeb8c,0xceed,0xeb8d, +0xd0e8,0xf6ab,0xeb8e,0xeb8f,0xcff6,0xeb90,0xf6aa,0xd5f0, +0xf6ac,0xc3b9,0xeb91,0xeb92,0xeb93,0xbbf4,0xf6ae,0xf6ad, +0xeb94,0xeb95,0xeb96,0xc4de,0xeb97,0xeb98,0xc1d8,0xeb99, +0xeb9a,0xeb9b,0xeb9c,0xeb9d,0xcbaa,0xeb9e,0xcfbc,0xeb9f, +0xeba0,0xec40,0xec41,0xec42,0xec43,0xec44,0xec45,0xec46, +0xec47,0xec48,0xf6af,0xec49,0xec4a,0xf6b0,0xec4b,0xec4c, +0xf6b1,0xec4d,0xc2b6,0xec4e,0xec4f,0xec50,0xec51,0xec52, +0xb0d4,0xc5f9,0xec53,0xec54,0xec55,0xec56,0xf6b2,0xec57, +0xec58,0xec59,0xec5a,0xec5b,0xec5c,0xec5d,0xec5e,0xec5f, +0xec60,0xec61,0xec62,0xec63,0xec64,0xec65,0xec66,0xec67, +0xec68,0xec69,0xc7e0,0xf6a6,0xec6a,0xec6b,0xbeb8,0xec6c, +0xec6d,0xbeb2,0xec6e,0xb5e5,0xec6f,0xec70,0xb7c7,0xec71, +0xbfbf,0xc3d2,0xc3e6,0xec72,0xec73,0xd8cc,0xec74,0xec75, +0xec76,0xb8ef,0xec77,0xec78,0xec79,0xec7a,0xec7b,0xec7c, +0xec7d,0xec7e,0xec80,0xbdf9,0xd1a5,0xec81,0xb0d0,0xec82, +0xec83,0xec84,0xec85,0xec86,0xf7b0,0xec87,0xec88,0xec89, +0xec8a,0xec8b,0xec8c,0xec8d,0xec8e,0xf7b1,0xec8f,0xec90, +0xec91,0xec92,0xec93,0xd0ac,0xec94,0xb0b0,0xec95,0xec96, +0xec97,0xf7b2,0xf7b3,0xec98,0xf7b4,0xec99,0xec9a,0xec9b, +0xc7ca,0xec9c,0xec9d,0xec9e,0xec9f,0xeca0,0xed40,0xed41, +0xbecf,0xed42,0xed43,0xf7b7,0xed44,0xed45,0xed46,0xed47, +0xed48,0xed49,0xed4a,0xf7b6,0xed4b,0xb1de,0xed4c,0xf7b5, +0xed4d,0xed4e,0xf7b8,0xed4f,0xf7b9,0xed50,0xed51,0xed52, +0xed53,0xed54,0xed55,0xed56,0xed57,0xed58,0xed59,0xed5a, +0xed5b,0xed5c,0xed5d,0xed5e,0xed5f,0xed60,0xed61,0xed62, +0xed63,0xed64,0xed65,0xed66,0xed67,0xed68,0xed69,0xed6a, +0xed6b,0xed6c,0xed6d,0xed6e,0xed6f,0xed70,0xed71,0xed72, +0xed73,0xed74,0xed75,0xed76,0xed77,0xed78,0xed79,0xed7a, +0xed7b,0xed7c,0xed7d,0xed7e,0xed80,0xed81,0xcea4,0xc8cd, +0xed82,0xbaab,0xe8b8,0xe8b9,0xe8ba,0xbec2,0xed83,0xed84, +0xed85,0xed86,0xed87,0xd2f4,0xed88,0xd4cf,0xc9d8,0xed89, +0xed8a,0xed8b,0xed8c,0xed8d,0xed8e,0xed8f,0xed90,0xed91, +0xed92,0xed93,0xed94,0xed95,0xed96,0xed97,0xed98,0xed99, +0xed9a,0xed9b,0xed9c,0xed9d,0xed9e,0xed9f,0xeda0,0xee40, +0xee41,0xee42,0xee43,0xee44,0xee45,0xee46,0xee47,0xee48, +0xee49,0xee4a,0xee4b,0xee4c,0xee4d,0xee4e,0xee4f,0xee50, +0xee51,0xee52,0xee53,0xee54,0xee55,0xee56,0xee57,0xee58, +0xee59,0xee5a,0xee5b,0xee5c,0xee5d,0xee5e,0xee5f,0xee60, +0xee61,0xee62,0xee63,0xee64,0xee65,0xee66,0xee67,0xee68, +0xee69,0xee6a,0xee6b,0xee6c,0xee6d,0xee6e,0xee6f,0xee70, +0xee71,0xee72,0xee73,0xee74,0xee75,0xee76,0xee77,0xee78, +0xee79,0xee7a,0xee7b,0xee7c,0xee7d,0xee7e,0xee80,0xee81, +0xee82,0xee83,0xee84,0xee85,0xee86,0xee87,0xee88,0xee89, +0xee8a,0xee8b,0xee8c,0xee8d,0xee8e,0xee8f,0xee90,0xee91, +0xee92,0xee93,0xee94,0xee95,0xee96,0xee97,0xee98,0xee99, +0xee9a,0xee9b,0xee9c,0xee9d,0xee9e,0xee9f,0xeea0,0xef40, +0xef41,0xef42,0xef43,0xef44,0xef45,0xd2b3,0xb6a5,0xc7ea, +0xf1fc,0xcfee,0xcbb3,0xd0eb,0xe7ef,0xcde7,0xb9cb,0xb6d9, +0xf1fd,0xb0e4,0xcbcc,0xf1fe,0xd4a4,0xc2ad,0xc1ec,0xc6c4, +0xbeb1,0xf2a1,0xbcd5,0xef46,0xf2a2,0xf2a3,0xef47,0xf2a4, +0xd2c3,0xc6b5,0xef48,0xcdc7,0xf2a5,0xef49,0xd3b1,0xbfc5, +0xcce2,0xef4a,0xf2a6,0xf2a7,0xd1d5,0xb6ee,0xf2a8,0xf2a9, +0xb5df,0xf2aa,0xf2ab,0xef4b,0xb2fc,0xf2ac,0xf2ad,0xc8a7, +0xef4c,0xef4d,0xef4e,0xef4f,0xef50,0xef51,0xef52,0xef53, +0xef54,0xef55,0xef56,0xef57,0xef58,0xef59,0xef5a,0xef5b, +0xef5c,0xef5d,0xef5e,0xef5f,0xef60,0xef61,0xef62,0xef63, +0xef64,0xef65,0xef66,0xef67,0xef68,0xef69,0xef6a,0xef6b, +0xef6c,0xef6d,0xef6e,0xef6f,0xef70,0xef71,0xb7e7,0xef72, +0xef73,0xeca9,0xecaa,0xecab,0xef74,0xecac,0xef75,0xef76, +0xc6ae,0xecad,0xecae,0xef77,0xef78,0xef79,0xb7c9,0xcab3, +0xef7a,0xef7b,0xef7c,0xef7d,0xef7e,0xef80,0xef81,0xe2b8, +0xf7cf,0xef82,0xef83,0xef84,0xef85,0xef86,0xef87,0xef88, +0xef89,0xef8a,0xef8b,0xef8c,0xef8d,0xef8e,0xef8f,0xef90, +0xef91,0xef92,0xef93,0xef94,0xef95,0xef96,0xef97,0xef98, +0xef99,0xef9a,0xef9b,0xef9c,0xef9d,0xef9e,0xef9f,0xefa0, +0xf040,0xf041,0xf042,0xf043,0xf044,0xf7d0,0xf045,0xf046, +0xb2cd,0xf047,0xf048,0xf049,0xf04a,0xf04b,0xf04c,0xf04d, +0xf04e,0xf04f,0xf050,0xf051,0xf052,0xf053,0xf054,0xf055, +0xf056,0xf057,0xf058,0xf059,0xf05a,0xf05b,0xf05c,0xf05d, +0xf05e,0xf05f,0xf060,0xf061,0xf062,0xf063,0xf7d1,0xf064, +0xf065,0xf066,0xf067,0xf068,0xf069,0xf06a,0xf06b,0xf06c, +0xf06d,0xf06e,0xf06f,0xf070,0xf071,0xf072,0xf073,0xf074, +0xf075,0xf076,0xf077,0xf078,0xf079,0xf07a,0xf07b,0xf07c, +0xf07d,0xf07e,0xf080,0xf081,0xf082,0xf083,0xf084,0xf085, +0xf086,0xf087,0xf088,0xf089,0xf7d3,0xf7d2,0xf08a,0xf08b, +0xf08c,0xf08d,0xf08e,0xf08f,0xf090,0xf091,0xf092,0xf093, +0xf094,0xf095,0xf096,0xe2bb,0xf097,0xbca2,0xf098,0xe2bc, +0xe2bd,0xe2be,0xe2bf,0xe2c0,0xe2c1,0xb7b9,0xd2fb,0xbda4, +0xcace,0xb1a5,0xcbc7,0xf099,0xe2c2,0xb6fc,0xc8c4,0xe2c3, +0xf09a,0xf09b,0xbdc8,0xf09c,0xb1fd,0xe2c4,0xf09d,0xb6f6, +0xe2c5,0xc4d9,0xf09e,0xf09f,0xe2c6,0xcfda,0xb9dd,0xe2c7, +0xc0a1,0xf0a0,0xe2c8,0xb2f6,0xf140,0xe2c9,0xf141,0xc1f3, +0xe2ca,0xe2cb,0xc2f8,0xe2cc,0xe2cd,0xe2ce,0xcad7,0xd8b8, +0xd9e5,0xcfe3,0xf142,0xf143,0xf144,0xf145,0xf146,0xf147, +0xf148,0xf149,0xf14a,0xf14b,0xf14c,0xf0a5,0xf14d,0xf14e, +0xdcb0,0xf14f,0xf150,0xf151,0xf152,0xf153,0xf154,0xf155, +0xf156,0xf157,0xf158,0xf159,0xf15a,0xf15b,0xf15c,0xf15d, +0xf15e,0xf15f,0xf160,0xf161,0xf162,0xf163,0xf164,0xf165, +0xf166,0xf167,0xf168,0xf169,0xf16a,0xf16b,0xf16c,0xf16d, +0xf16e,0xf16f,0xf170,0xf171,0xf172,0xf173,0xf174,0xf175, +0xf176,0xf177,0xf178,0xf179,0xf17a,0xf17b,0xf17c,0xf17d, +0xf17e,0xf180,0xf181,0xf182,0xf183,0xf184,0xf185,0xf186, +0xf187,0xf188,0xf189,0xf18a,0xf18b,0xf18c,0xf18d,0xf18e, +0xf18f,0xf190,0xf191,0xf192,0xf193,0xf194,0xf195,0xf196, +0xf197,0xf198,0xf199,0xf19a,0xf19b,0xf19c,0xf19d,0xf19e, +0xf19f,0xf1a0,0xf240,0xf241,0xf242,0xf243,0xf244,0xf245, +0xf246,0xf247,0xf248,0xf249,0xf24a,0xf24b,0xf24c,0xf24d, +0xf24e,0xf24f,0xf250,0xf251,0xf252,0xf253,0xf254,0xf255, +0xf256,0xf257,0xf258,0xf259,0xf25a,0xf25b,0xf25c,0xf25d, +0xf25e,0xf25f,0xf260,0xf261,0xf262,0xf263,0xf264,0xf265, +0xf266,0xf267,0xf268,0xf269,0xf26a,0xf26b,0xf26c,0xf26d, +0xf26e,0xf26f,0xf270,0xf271,0xf272,0xf273,0xf274,0xf275, +0xf276,0xf277,0xf278,0xf279,0xf27a,0xf27b,0xf27c,0xf27d, +0xf27e,0xf280,0xf281,0xf282,0xf283,0xf284,0xf285,0xf286, +0xf287,0xf288,0xf289,0xf28a,0xf28b,0xf28c,0xf28d,0xf28e, +0xf28f,0xf290,0xf291,0xf292,0xf293,0xf294,0xf295,0xf296, +0xf297,0xf298,0xf299,0xf29a,0xf29b,0xf29c,0xf29d,0xf29e, +0xf29f,0xf2a0,0xf340,0xf341,0xf342,0xf343,0xf344,0xf345, +0xf346,0xf347,0xf348,0xf349,0xf34a,0xf34b,0xf34c,0xf34d, +0xf34e,0xf34f,0xf350,0xf351,0xc2ed,0xd4a6,0xcdd4,0xd1b1, +0xb3db,0xc7fd,0xf352,0xb2b5,0xc2bf,0xe6e0,0xcabb,0xe6e1, +0xe6e2,0xbed4,0xe6e3,0xd7a4,0xcdd5,0xe6e5,0xbcdd,0xe6e4, +0xe6e6,0xe6e7,0xc2ee,0xf353,0xbdbe,0xe6e8,0xc2e6,0xbaa7, +0xe6e9,0xf354,0xe6ea,0xb3d2,0xd1e9,0xf355,0xf356,0xbfa5, +0xe6eb,0xc6ef,0xe6ec,0xe6ed,0xf357,0xf358,0xe6ee,0xc6ad, +0xe6ef,0xf359,0xc9a7,0xe6f0,0xe6f1,0xe6f2,0xe5b9,0xe6f3, +0xe6f4,0xc2e2,0xe6f5,0xe6f6,0xd6e8,0xe6f7,0xf35a,0xe6f8, +0xb9c7,0xf35b,0xf35c,0xf35d,0xf35e,0xf35f,0xf360,0xf361, +0xf7bb,0xf7ba,0xf362,0xf363,0xf364,0xf365,0xf7be,0xf7bc, +0xbaa1,0xf366,0xf7bf,0xf367,0xf7c0,0xf368,0xf369,0xf36a, +0xf7c2,0xf7c1,0xf7c4,0xf36b,0xf36c,0xf7c3,0xf36d,0xf36e, +0xf36f,0xf370,0xf371,0xf7c5,0xf7c6,0xf372,0xf373,0xf374, +0xf375,0xf7c7,0xf376,0xcbe8,0xf377,0xf378,0xf379,0xf37a, +0xb8df,0xf37b,0xf37c,0xf37d,0xf37e,0xf380,0xf381,0xf7d4, +0xf382,0xf7d5,0xf383,0xf384,0xf385,0xf386,0xf7d6,0xf387, +0xf388,0xf389,0xf38a,0xf7d8,0xf38b,0xf7da,0xf38c,0xf7d7, +0xf38d,0xf38e,0xf38f,0xf390,0xf391,0xf392,0xf393,0xf394, +0xf395,0xf7db,0xf396,0xf7d9,0xf397,0xf398,0xf399,0xf39a, +0xf39b,0xf39c,0xf39d,0xd7d7,0xf39e,0xf39f,0xf3a0,0xf440, +0xf7dc,0xf441,0xf442,0xf443,0xf444,0xf445,0xf446,0xf7dd, +0xf447,0xf448,0xf449,0xf7de,0xf44a,0xf44b,0xf44c,0xf44d, +0xf44e,0xf44f,0xf450,0xf451,0xf452,0xf453,0xf454,0xf7df, +0xf455,0xf456,0xf457,0xf7e0,0xf458,0xf459,0xf45a,0xf45b, +0xf45c,0xf45d,0xf45e,0xf45f,0xf460,0xf461,0xf462,0xdbcb, +0xf463,0xf464,0xd8aa,0xf465,0xf466,0xf467,0xf468,0xf469, +0xf46a,0xf46b,0xf46c,0xe5f7,0xb9ed,0xf46d,0xf46e,0xf46f, +0xf470,0xbffd,0xbbea,0xf7c9,0xc6c7,0xf7c8,0xf471,0xf7ca, +0xf7cc,0xf7cb,0xf472,0xf473,0xf474,0xf7cd,0xf475,0xceba, +0xf476,0xf7ce,0xf477,0xf478,0xc4a7,0xf479,0xf47a,0xf47b, +0xf47c,0xf47d,0xf47e,0xf480,0xf481,0xf482,0xf483,0xf484, +0xf485,0xf486,0xf487,0xf488,0xf489,0xf48a,0xf48b,0xf48c, +0xf48d,0xf48e,0xf48f,0xf490,0xf491,0xf492,0xf493,0xf494, +0xf495,0xf496,0xf497,0xf498,0xf499,0xf49a,0xf49b,0xf49c, +0xf49d,0xf49e,0xf49f,0xf4a0,0xf540,0xf541,0xf542,0xf543, +0xf544,0xf545,0xf546,0xf547,0xf548,0xf549,0xf54a,0xf54b, +0xf54c,0xf54d,0xf54e,0xf54f,0xf550,0xf551,0xf552,0xf553, +0xf554,0xf555,0xf556,0xf557,0xf558,0xf559,0xf55a,0xf55b, +0xf55c,0xf55d,0xf55e,0xf55f,0xf560,0xf561,0xf562,0xf563, +0xf564,0xf565,0xf566,0xf567,0xf568,0xf569,0xf56a,0xf56b, +0xf56c,0xf56d,0xf56e,0xf56f,0xf570,0xf571,0xf572,0xf573, +0xf574,0xf575,0xf576,0xf577,0xf578,0xf579,0xf57a,0xf57b, +0xf57c,0xf57d,0xf57e,0xf580,0xf581,0xf582,0xf583,0xf584, +0xf585,0xf586,0xf587,0xf588,0xf589,0xf58a,0xf58b,0xf58c, +0xf58d,0xf58e,0xf58f,0xf590,0xf591,0xf592,0xf593,0xf594, +0xf595,0xf596,0xf597,0xf598,0xf599,0xf59a,0xf59b,0xf59c, +0xf59d,0xf59e,0xf59f,0xf5a0,0xf640,0xf641,0xf642,0xf643, +0xf644,0xf645,0xf646,0xf647,0xf648,0xf649,0xf64a,0xf64b, +0xf64c,0xf64d,0xf64e,0xf64f,0xf650,0xf651,0xf652,0xf653, +0xf654,0xf655,0xf656,0xf657,0xf658,0xf659,0xf65a,0xf65b, +0xf65c,0xf65d,0xf65e,0xf65f,0xf660,0xf661,0xf662,0xf663, +0xf664,0xf665,0xf666,0xf667,0xf668,0xf669,0xf66a,0xf66b, +0xf66c,0xf66d,0xf66e,0xf66f,0xf670,0xf671,0xf672,0xf673, +0xf674,0xf675,0xf676,0xf677,0xf678,0xf679,0xf67a,0xf67b, +0xf67c,0xf67d,0xf67e,0xf680,0xf681,0xf682,0xf683,0xf684, +0xf685,0xf686,0xf687,0xf688,0xf689,0xf68a,0xf68b,0xf68c, +0xf68d,0xf68e,0xf68f,0xf690,0xf691,0xf692,0xf693,0xf694, +0xf695,0xf696,0xf697,0xf698,0xf699,0xf69a,0xf69b,0xf69c, +0xf69d,0xf69e,0xf69f,0xf6a0,0xf740,0xf741,0xf742,0xf743, +0xf744,0xf745,0xf746,0xf747,0xf748,0xf749,0xf74a,0xf74b, +0xf74c,0xf74d,0xf74e,0xf74f,0xf750,0xf751,0xf752,0xf753, +0xf754,0xf755,0xf756,0xf757,0xf758,0xf759,0xf75a,0xf75b, +0xf75c,0xf75d,0xf75e,0xf75f,0xf760,0xf761,0xf762,0xf763, +0xf764,0xf765,0xf766,0xf767,0xf768,0xf769,0xf76a,0xf76b, +0xf76c,0xf76d,0xf76e,0xf76f,0xf770,0xf771,0xf772,0xf773, +0xf774,0xf775,0xf776,0xf777,0xf778,0xf779,0xf77a,0xf77b, +0xf77c,0xf77d,0xf77e,0xf780,0xd3e3,0xf781,0xf782,0xf6cf, +0xf783,0xc2b3,0xf6d0,0xf784,0xf785,0xf6d1,0xf6d2,0xf6d3, +0xf6d4,0xf786,0xf787,0xf6d6,0xf788,0xb1ab,0xf6d7,0xf789, +0xf6d8,0xf6d9,0xf6da,0xf78a,0xf6db,0xf6dc,0xf78b,0xf78c, +0xf78d,0xf78e,0xf6dd,0xf6de,0xcfca,0xf78f,0xf6df,0xf6e0, +0xf6e1,0xf6e2,0xf6e3,0xf6e4,0xc0f0,0xf6e5,0xf6e6,0xf6e7, +0xf6e8,0xf6e9,0xf790,0xf6ea,0xf791,0xf6eb,0xf6ec,0xf792, +0xf6ed,0xf6ee,0xf6ef,0xf6f0,0xf6f1,0xf6f2,0xf6f3,0xf6f4, +0xbea8,0xf793,0xf6f5,0xf6f6,0xf6f7,0xf6f8,0xf794,0xf795, +0xf796,0xf797,0xf798,0xc8fa,0xf6f9,0xf6fa,0xf6fb,0xf6fc, +0xf799,0xf79a,0xf6fd,0xf6fe,0xf7a1,0xf7a2,0xf7a3,0xf7a4, +0xf7a5,0xf79b,0xf79c,0xf7a6,0xf7a7,0xf7a8,0xb1ee,0xf7a9, +0xf7aa,0xf7ab,0xf79d,0xf79e,0xf7ac,0xf7ad,0xc1db,0xf7ae, +0xf79f,0xf7a0,0xf7af,0xf840,0xf841,0xf842,0xf843,0xf844, +0xf845,0xf846,0xf847,0xf848,0xf849,0xf84a,0xf84b,0xf84c, +0xf84d,0xf84e,0xf84f,0xf850,0xf851,0xf852,0xf853,0xf854, +0xf855,0xf856,0xf857,0xf858,0xf859,0xf85a,0xf85b,0xf85c, +0xf85d,0xf85e,0xf85f,0xf860,0xf861,0xf862,0xf863,0xf864, +0xf865,0xf866,0xf867,0xf868,0xf869,0xf86a,0xf86b,0xf86c, +0xf86d,0xf86e,0xf86f,0xf870,0xf871,0xf872,0xf873,0xf874, +0xf875,0xf876,0xf877,0xf878,0xf879,0xf87a,0xf87b,0xf87c, +0xf87d,0xf87e,0xf880,0xf881,0xf882,0xf883,0xf884,0xf885, +0xf886,0xf887,0xf888,0xf889,0xf88a,0xf88b,0xf88c,0xf88d, +0xf88e,0xf88f,0xf890,0xf891,0xf892,0xf893,0xf894,0xf895, +0xf896,0xf897,0xf898,0xf899,0xf89a,0xf89b,0xf89c,0xf89d, +0xf89e,0xf89f,0xf8a0,0xf940,0xf941,0xf942,0xf943,0xf944, +0xf945,0xf946,0xf947,0xf948,0xf949,0xf94a,0xf94b,0xf94c, +0xf94d,0xf94e,0xf94f,0xf950,0xf951,0xf952,0xf953,0xf954, +0xf955,0xf956,0xf957,0xf958,0xf959,0xf95a,0xf95b,0xf95c, +0xf95d,0xf95e,0xf95f,0xf960,0xf961,0xf962,0xf963,0xf964, +0xf965,0xf966,0xf967,0xf968,0xf969,0xf96a,0xf96b,0xf96c, +0xf96d,0xf96e,0xf96f,0xf970,0xf971,0xf972,0xf973,0xf974, +0xf975,0xf976,0xf977,0xf978,0xf979,0xf97a,0xf97b,0xf97c, +0xf97d,0xf97e,0xf980,0xf981,0xf982,0xf983,0xf984,0xf985, +0xf986,0xf987,0xf988,0xf989,0xf98a,0xf98b,0xf98c,0xf98d, +0xf98e,0xf98f,0xf990,0xf991,0xf992,0xf993,0xf994,0xf995, +0xf996,0xf997,0xf998,0xf999,0xf99a,0xf99b,0xf99c,0xf99d, +0xf99e,0xf99f,0xf9a0,0xfa40,0xfa41,0xfa42,0xfa43,0xfa44, +0xfa45,0xfa46,0xfa47,0xfa48,0xfa49,0xfa4a,0xfa4b,0xfa4c, +0xfa4d,0xfa4e,0xfa4f,0xfa50,0xfa51,0xfa52,0xfa53,0xfa54, +0xfa55,0xfa56,0xfa57,0xfa58,0xfa59,0xfa5a,0xfa5b,0xfa5c, +0xfa5d,0xfa5e,0xfa5f,0xfa60,0xfa61,0xfa62,0xfa63,0xfa64, +0xfa65,0xfa66,0xfa67,0xfa68,0xfa69,0xfa6a,0xfa6b,0xfa6c, +0xfa6d,0xfa6e,0xfa6f,0xfa70,0xfa71,0xfa72,0xfa73,0xfa74, +0xfa75,0xfa76,0xfa77,0xfa78,0xfa79,0xfa7a,0xfa7b,0xfa7c, +0xfa7d,0xfa7e,0xfa80,0xfa81,0xfa82,0xfa83,0xfa84,0xfa85, +0xfa86,0xfa87,0xfa88,0xfa89,0xfa8a,0xfa8b,0xfa8c,0xfa8d, +0xfa8e,0xfa8f,0xfa90,0xfa91,0xfa92,0xfa93,0xfa94,0xfa95, +0xfa96,0xfa97,0xfa98,0xfa99,0xfa9a,0xfa9b,0xfa9c,0xfa9d, +0xfa9e,0xfa9f,0xfaa0,0xfb40,0xfb41,0xfb42,0xfb43,0xfb44, +0xfb45,0xfb46,0xfb47,0xfb48,0xfb49,0xfb4a,0xfb4b,0xfb4c, +0xfb4d,0xfb4e,0xfb4f,0xfb50,0xfb51,0xfb52,0xfb53,0xfb54, +0xfb55,0xfb56,0xfb57,0xfb58,0xfb59,0xfb5a,0xfb5b,0xc4f1, +0xf0af,0xbca6,0xf0b0,0xc3f9,0xfb5c,0xc5b8,0xd1bb,0xfb5d, +0xf0b1,0xf0b2,0xf0b3,0xf0b4,0xf0b5,0xd1bc,0xfb5e,0xd1ec, +0xfb5f,0xf0b7,0xf0b6,0xd4a7,0xfb60,0xcdd2,0xf0b8,0xf0ba, +0xf0b9,0xf0bb,0xf0bc,0xfb61,0xfb62,0xb8eb,0xf0bd,0xbae8, +0xfb63,0xf0be,0xf0bf,0xbee9,0xf0c0,0xb6ec,0xf0c1,0xf0c2, +0xf0c3,0xf0c4,0xc8b5,0xf0c5,0xf0c6,0xfb64,0xf0c7,0xc5f4, +0xfb65,0xf0c8,0xfb66,0xfb67,0xfb68,0xf0c9,0xfb69,0xf0ca, +0xf7bd,0xfb6a,0xf0cb,0xf0cc,0xf0cd,0xfb6b,0xf0ce,0xfb6c, +0xfb6d,0xfb6e,0xfb6f,0xf0cf,0xbad7,0xfb70,0xf0d0,0xf0d1, +0xf0d2,0xf0d3,0xf0d4,0xf0d5,0xf0d6,0xf0d8,0xfb71,0xfb72, +0xd3a5,0xf0d7,0xfb73,0xf0d9,0xfb74,0xfb75,0xfb76,0xfb77, +0xfb78,0xfb79,0xfb7a,0xfb7b,0xfb7c,0xfb7d,0xf5ba,0xc2b9, +0xfb7e,0xfb80,0xf7e4,0xfb81,0xfb82,0xfb83,0xfb84,0xf7e5, +0xf7e6,0xfb85,0xfb86,0xf7e7,0xfb87,0xfb88,0xfb89,0xfb8a, +0xfb8b,0xfb8c,0xf7e8,0xc2b4,0xfb8d,0xfb8e,0xfb8f,0xfb90, +0xfb91,0xfb92,0xfb93,0xfb94,0xfb95,0xf7ea,0xfb96,0xf7eb, +0xfb97,0xfb98,0xfb99,0xfb9a,0xfb9b,0xfb9c,0xc2f3,0xfb9d, +0xfb9e,0xfb9f,0xfba0,0xfc40,0xfc41,0xfc42,0xfc43,0xfc44, +0xfc45,0xfc46,0xfc47,0xfc48,0xf4f0,0xfc49,0xfc4a,0xfc4b, +0xf4ef,0xfc4c,0xfc4d,0xc2e9,0xfc4e,0xf7e1,0xf7e2,0xfc4f, +0xfc50,0xfc51,0xfc52,0xfc53,0xbbc6,0xfc54,0xfc55,0xfc56, +0xfc57,0xd9e4,0xfc58,0xfc59,0xfc5a,0xcaf2,0xc0e8,0xf0a4, +0xfc5b,0xbada,0xfc5c,0xfc5d,0xc7ad,0xfc5e,0xfc5f,0xfc60, +0xc4ac,0xfc61,0xfc62,0xf7ec,0xf7ed,0xf7ee,0xfc63,0xf7f0, +0xf7ef,0xfc64,0xf7f1,0xfc65,0xfc66,0xf7f4,0xfc67,0xf7f3, +0xfc68,0xf7f2,0xf7f5,0xfc69,0xfc6a,0xfc6b,0xfc6c,0xf7f6, +0xfc6d,0xfc6e,0xfc6f,0xfc70,0xfc71,0xfc72,0xfc73,0xfc74, +0xfc75,0xede9,0xfc76,0xedea,0xedeb,0xfc77,0xf6bc,0xfc78, +0xfc79,0xfc7a,0xfc7b,0xfc7c,0xfc7d,0xfc7e,0xfc80,0xfc81, +0xfc82,0xfc83,0xfc84,0xf6bd,0xfc85,0xf6be,0xb6a6,0xfc86, +0xd8be,0xfc87,0xfc88,0xb9c4,0xfc89,0xfc8a,0xfc8b,0xd8bb, +0xfc8c,0xdcb1,0xfc8d,0xfc8e,0xfc8f,0xfc90,0xfc91,0xfc92, +0xcaf3,0xfc93,0xf7f7,0xfc94,0xfc95,0xfc96,0xfc97,0xfc98, +0xfc99,0xfc9a,0xfc9b,0xfc9c,0xf7f8,0xfc9d,0xfc9e,0xf7f9, +0xfc9f,0xfca0,0xfd40,0xfd41,0xfd42,0xfd43,0xfd44,0xf7fb, +0xfd45,0xf7fa,0xfd46,0xb1c7,0xfd47,0xf7fc,0xf7fd,0xfd48, +0xfd49,0xfd4a,0xfd4b,0xfd4c,0xf7fe,0xfd4d,0xfd4e,0xfd4f, +0xfd50,0xfd51,0xfd52,0xfd53,0xfd54,0xfd55,0xfd56,0xfd57, +0xc6eb,0xecb4,0xfd58,0xfd59,0xfd5a,0xfd5b,0xfd5c,0xfd5d, +0xfd5e,0xfd5f,0xfd60,0xfd61,0xfd62,0xfd63,0xfd64,0xfd65, +0xfd66,0xfd67,0xfd68,0xfd69,0xfd6a,0xfd6b,0xfd6c,0xfd6d, +0xfd6e,0xfd6f,0xfd70,0xfd71,0xfd72,0xfd73,0xfd74,0xfd75, +0xfd76,0xfd77,0xfd78,0xfd79,0xfd7a,0xfd7b,0xfd7c,0xfd7d, +0xfd7e,0xfd80,0xfd81,0xfd82,0xfd83,0xfd84,0xfd85,0xb3dd, +0xf6b3,0xfd86,0xfd87,0xf6b4,0xc1e4,0xf6b5,0xf6b6,0xf6b7, +0xf6b8,0xf6b9,0xf6ba,0xc8a3,0xf6bb,0xfd88,0xfd89,0xfd8a, +0xfd8b,0xfd8c,0xfd8d,0xfd8e,0xfd8f,0xfd90,0xfd91,0xfd92, +0xfd93,0xc1fa,0xb9a8,0xede8,0xfd94,0xfd95,0xfd96,0xb9ea, +0xd9df,0xfd97,0xfd98,0xfd99,0xfd9a,0xfd9b,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 +}; /* 9fffh */ +const int ucs_i_cp936_table_min = 0x4d00; +const int ucs_i_cp936_table_max = 0x4d00 + (sizeof (ucs_i_cp936_table) / sizeof (unsigned short)); + + +/* 0xf900 CJK Compatibility Ideographs (with fallback) */ +static const unsigned short ucs_ci_cp936_table[] = { // 0xf900 - 0xfa2f + +/* F900h */ +0xD84D,0xB8FC,0xDC87,0xD95A,0xBBAC,0xB4AE,0xBEE4,0xFD94, +0xFD94,0xC6F5,0xBDF0,0xC0AE,0xC4CE,0x91D0,0xB05D,0xC15F, +0xCC7D,0xC2DD,0xC2E3,0xDF89,0x98B7,0xC2E5,0xC0D3,0xE7F3, +0xC2E4,0xC0D2,0xF198,0x8179,0xC2D1,0x99DA,0xA080,0xCC6D, +0xFB5B,0x8DB9,0x9E45,0xCB7B,0xD268,0xC0AD,0xC544,0xCF9E, +0xC0C8,0xC0CA,0xC0CB,0xC0C7,0xFD9C,0x81ED,0xC0E4,0x84DA, +0x93EF,0x99A9,0xA074,0xB152,0xC0CF,0xCC4A,0xCC94,0xC2B7, +0xC2B6,0xF494,0xFA98,0xC2B5,0xB593,0xBE47,0xC78A,0xE49B, +0xC2B9,0xD593,0x89C5,0xC5AA,0xBB5C,0xC340,0xC0CE,0xC0DA, +0xD954,0xC0D7,0x89BE,0x8CD2,0x98C7,0x9C49,0xC2A9,0xC0DB, +0xBF7C,0xC2AA,0xC0D5,0xC0DF,0x8443,0xC1E8,0xB6A0,0xBE63, +0xC1E2,0xC1EA,0xD778,0x9282,0x98B7,0xD65A,0xB5A4,0x8C8E, +0xC5AD,0xC2CA,0xAE90,0xB1B1,0xB491,0xB1E3,0x8FCD,0xB2BB, +0xC3DA,0x94B5,0xCBF7,0x85A2,0xC8FB,0xCAA1,0xC87E,0xD566, +0x9AA2,0xB3BD,0xC9F2,0xCAB0,0xC8F4,0xC2D3,0xC2D4,0xC1C1, +0x83C9,0xFD9D,0xC1BA,0xBC5A,0xC1BC,0xD58F,0xC1BF,0x84EE, +0x85CE,0xC5AE,0x8F5D,0xC2C3,0x9E56,0xB55A,0xE982,0xF350, +0xFB90,0xC0E8,0xC1A6,0x95D1,0x9A76,0xDE5D,0xC4EA,0x917A, +0x91D9,0x93D3,0x9D69,0x9F92,0xAD49,0xFD9E,0xBE9A,0xC293, +0xDD82,0xC98F,0xDF42,0xE580,0xC1D0,0xC1D3,0xD1CA,0xC1D2, +0xC1D1,0xD566,0xC1AE,0xC4EE,0xC4ED,0x9A9A,0xBA9F,0xAB43, +0xC1EE,0xE0F2,0x8C8E,0x8E58,0xC1AF,0xC1E1,0xAC93,0xC1E7, +0xF1F6,0xE28F,0xC1E3,0xEC60,0xEE49,0xC0FD,0xB659,0xF5B7, +0xEB60,0x90BA,0xC1CB,0xC1C5,0xE5BC,0xC4F2,0xC1CF,0x98B7, +0xC1C7,0xAF9F,0xDEA4,0xDF7C,0xFD88,0x959E,0xC8EE,0x84A2, +0x9683,0xC1F8,0xC1F7,0xC1EF,0xC1F0,0xC1F4,0xC1F2,0xBC7E, +0xEE90,0xC1F9,0xC2BE,0xEA91,0x8290,0x8D91,0x9C53,0xDD86, +0xC2C9,0x90FC,0xC0F5,0xC2CA,0xC2A1,0xC0FB,0xC0F4,0xC2C4, +0xD2D7,0xC0EE,0xC0E6,0xC4E0,0xC0ED,0xC1A1,0xEEBE,0xFD9F, +0xD165,0xC0EF,0xEB78,0xC4E4,0xC4E7,0xC1DF,0x9FFB,0xAD55, +0xCC41,0xFDA0,0xF75B,0xF7EB,0xC1D6,0xC1DC,0xC552,0xC1A2, +0xF3D2,0xC1A3,0xA0EE,0xD6CB,0xD752,0xCAB2,0xB2E8,0xB4CC, + +/* FA00h */ +0xC7D0,0xB6C8,0xCDD8,0xCCC7,0xD5AC,0xB6B4,0xB1A9,0xDD97, +0xD0D0,0xBDB5,0xD28A,0xC0AA,0xFE40,0xFE41,0xFE42,0xFE43, +0x8956,0xFE44,0xC7E7,0xFE45,0xFE46,0x8444,0xD869,0xD2E6, +0xFE47,0xC9F1,0xCFE9,0xB8A3,0xBEB8,0xBEAB,0xD3F0,0xFE48, +0xFE49,0xFE4A,0xD654,0xFE4B,0xFE4C,0xD2DD,0xB6BC,0xFE4D, +0xFE4E,0xFE4F,0xEF88,0xEF95,0xF05E,0xFA51,0x0000,0x0000, +}; + +const int ucs_ci_cp936_table_min = 0xf900; +const int ucs_ci_cp936_table_max = 0xfa2f; + +/* reduced map for GBK: U+FA0C - U+FA29 */ +const unsigned short ucs_ci_s_cp936_table[] = { + 0xfe40,0xfe41,0xfe42,0xfe43, + 0x0000,0xfe44,0x0000,0xfe45,0xfe46,0x0000,0x0000,0x0000, + 0xfe47,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfe48, + 0xfe49,0xfe4a,0x0000,0xfe4b,0xfe4c,0x0000,0x0000,0xfe4d, + 0xfe4e,0xfe4f}; + + /* FE30h CJK Compatibility Forms */ +const unsigned short ucs_cf_cp936_table[] = { +0xa955,0xa6f2,0x0000,0xa6f4,0xa6f5,0xa6e0,0xa6e1,0xa6f0, +0xa6f1,0xa6e2,0xa6e3,0xa6ee,0xa6ef,0xa6e6,0xa6e7,0xa6e4, +0xa6e5,0xa6e8,0xa6e9,0xa6ea,0xa6eb,0x0000,0x0000,0x0000, +0x0000,0xa968,0xa969,0xa96a,0xa96b,0xa96c,0xa96d,0xa96e}; + +const int ucs_cf_cp936_table_min = 0xfe30; +const int ucs_cf_cp936_table_max = 0xfe30 + (sizeof (ucs_cf_cp936_table) / sizeof (unsigned short)); + + + /* FE50h Small Form Variants */ +const unsigned short ucs_sfv_cp936_table[] = { +0xa96f,0xa970,0xa971,0x0000,0xa972,0xa973,0xa974,0xa975, +0x0000,0xa976,0xa977,0xa978,0xa979,0xa97a,0xa97b,0xa97c, +0xa97d,0xa97e,0xa980,0xa981,0xa982,0xa983,0xa984,0x0000, +0xa985,0xa986,0xa987,0xa988,0x0000,0x0000,0x0000,0x0000}; + +const int ucs_sfv_cp936_table_min = 0xfe50; +const int ucs_sfv_cp936_table_max = 0xfe50 + (sizeof (ucs_sfv_cp936_table) / sizeof (unsigned short)); + + /* FF00h Halfwidth and Fullwidth Forms */ + +/* reduced map: U+FFE0 - U+FFE5 */ +const unsigned short ucs_hff_s_cp936_table[] = { + 0xa1e9,0xa1ea,0xa956,0xa3fe,0xa957,0xa3a4, +}; + +const int ucs_hff_cp936_table_min = 0xff00; +const int ucs_hff_cp936_table_max = 0xffff; + +/* CP936 local */ + +static const unsigned short mbfl_cp936_pua_tbl[][3] = { + {0xe766, 0xe76b, 0xa2ab}, + {0xe76c, 0xe76d, 0xa2e3}, + {0xe76e, 0xe76f, 0xa2ef}, + {0xe770, 0xe771, 0xa2fd}, + {0xe772, 0xe77c, 0xa4f4}, + {0xe77d, 0xe784, 0xa5f7}, + {0xe785, 0xe78c, 0xa6b9}, + {0xe78d, 0xe793, 0xa6d9}, + {0xe794, 0xe795, 0xa6ec}, + {0xe796, 0xe796, 0xa6f3}, + {0xe797, 0xe79f, 0xa6f6}, + {0xe7a0, 0xe7ae, 0xa7c2}, + {0xe7af, 0xe7bb, 0xa7f2}, + {0xe7bc, 0xe7c6, 0xa896}, + {0xe7c7, 0xe7c7, 0xa8bc}, + {0xe7c8, 0xe7c8, 0xa8bf}, + {0xe7c9, 0xe7cc, 0xa8c1}, + {0xe7cd, 0xe7e1, 0xa8ea}, + {0xe7e2, 0xe7e2, 0xa958}, + {0xe7e3, 0xe7e3, 0xa95b}, + {0xe7e4, 0xe7e6, 0xa95d}, + {0xe7e7, 0xe7f3, 0xa989}, + {0xe7f4, 0xe800, 0xa997}, + {0xe801, 0xe80f, 0xa9f0}, + {0xe810, 0xe814, 0xd7fa}, + {0xe815, 0xe843, 0xfe50}, + {0xe844, 0xe864, 0xfe80}, +}; + +static const int mbfl_cp936_pua_tbl_max = sizeof(mbfl_cp936_pua_tbl)/(sizeof(unsigned short)*3); + +#else + +extern const unsigned short cp936_ucs_table[]; +extern const unsigned short ucs_a1_cp936_table[]; +extern const unsigned short ucs_a2_cp936_table[]; +extern const unsigned short ucs_a3_cp936_table[]; +extern const unsigned short ucs_i_cp936_table[]; +extern const unsigned short ucs_cf_cp936_table[]; +extern const unsigned short ucs_sfv_cp936_table[]; + +extern const unsigned short ucs_ci_s_cp936_table[]; +extern const unsigned short ucs_hff_s_cp936_table[]; + +extern const int cp936_ucs_table_size; +extern const int ucs_a1_cp936_table_min; +extern const int ucs_a1_cp936_table_max; +extern const int ucs_a2_cp936_table_min; +extern const int ucs_a2_cp936_table_max; +extern const int ucs_a3_cp936_table_min; +extern const int ucs_a3_cp936_table_max; +extern const int ucs_i_cp936_table_min; +extern const int ucs_i_cp936_table_max; +extern const int ucs_ci_cp936_table_min; +extern const int ucs_ci_cp936_table_max; +extern const int ucs_cf_cp936_table_min; +extern const int ucs_cf_cp936_table_max; +extern const int ucs_sfv_cp936_table_min; +extern const int ucs_sfv_cp936_table_max; +extern const int ucs_hff_cp936_table_min; +extern const int ucs_hff_cp936_table_max; + +#endif + +#endif /* UNICODE_TABLE_CP936_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_gb18030.h b/ext/mbstring/libmbfl/filters/unicode_table_gb18030.h new file mode 100644 index 0000000..7c38045 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_gb18030.h @@ -0,0 +1,233 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: Rui Hirokawa <hirokawa@php.net> + * + */ + +#ifndef UNICODE_TABLE_GB18030_H +#define UNICODE_TABLE_GB18030_H + +static const unsigned short mbfl_gb18030_c_tbl_val[58] = +{ + 0xfe50,0xfe54,0xfe57,0xfe58,0xfe5d,0xfe5e,0xfe6b,0xfe6e, + 0xfe71,0xfe73,0xfe74,0xfe75,0xfe79,0xfe84,0xfe56,0xfe55, + 0xfe5a,0xfe5c,0xfe5b,0xfe60,0xfe5f,0xfe62,0xfe65,0xfe63, + 0xfe64,0xfe68,0xfe69,0xfe6a,0xfe6f,0xfe70,0xfe72,0xfe78, + 0xfe77,0xfe7a,0xfe7b,0xfe7d,0xfe7c,0xfe80,0xfe81,0xfe82, + 0xfe83,0xfe85,0xfe86,0xfe87,0xfe88,0xfe89,0xfe8a,0xfe8b, + 0xfe8d,0xfe8c,0xfe8f,0xfe8e,0xfe96,0xfe93,0xfe94,0xfe95, + 0xfe97,0xfe92, +}; + +static const unsigned short mbfl_gb18030_c_tbl_key[58] = +{ + 0x2e81,0x2e84,0x2e88,0x2e8b,0x2e8c,0x2e97,0x2ea7,0x2eaa, + 0x2eae,0x2eb3,0x2eb6,0x2eb7,0x2ebb,0x2eca,0x3447,0x3473, + 0x359e,0x360e,0x361a,0x3918,0x396e,0x39cf,0x39d0,0x39df, + 0x3a73,0x3b4e,0x3c6e,0x3ce0,0x4056,0x415f,0x4337,0x43ac, + 0x43b1,0x43dd,0x44d6,0x464c,0x4661,0x4723,0x4729,0x477c, + 0x478d,0x4947,0x497a,0x497d,0x4982,0x4983,0x4985,0x4986, + 0x499b,0x499f,0x49b6,0x49b7,0x4c77,0x4c9f,0x4ca0,0x4ca1, + 0x4ca2,0x4ca3, +}; + +static const int mbfl_gb18030_c_tbl_max = sizeof(mbfl_gb18030_c_tbl_key)/sizeof(unsigned short); + +static const unsigned short mbfl_gb18030_pua_tbl[][3] = { + {0xe766, 0xe76b, 0xa2ab}, + {0xe76d, 0xe76d, 0xa2e4}, + {0xe76e, 0xe76f, 0xa2ef}, + {0xe770, 0xe771, 0xa2fd}, + {0xe772, 0xe77c, 0xa4f4}, + {0xe77d, 0xe784, 0xa5f7}, + {0xe785, 0xe78c, 0xa6b9}, + {0xe78d, 0xe793, 0xa6d9}, + {0xe794, 0xe795, 0xa6ec}, + {0xe796, 0xe796, 0xa6f3}, + {0xe797, 0xe79f, 0xa6f6}, + {0xe7a0, 0xe7ae, 0xa7c2}, + {0xe7af, 0xe7bb, 0xa7f2}, + {0xe7bc, 0xe7c6, 0xa896}, + {0xe7c7, 0xe7c7, 0xa8bc}, + {0xe7c9, 0xe7cc, 0xa8c1}, + {0xe7cd, 0xe7e1, 0xa8ea}, + {0xe7e2, 0xe7e2, 0xa958}, + {0xe7e3, 0xe7e3, 0xa95b}, + {0xe7e4, 0xe7e6, 0xa95d}, + {0xe7f4, 0xe800, 0xa997}, + {0xe801, 0xe80f, 0xa9f0}, + {0xe810, 0xe814, 0xd7fa}, + {0xe816, 0xe818, 0xfe51}, + {0xe81e, 0xe81e, 0xfe59}, + {0xe826, 0xe826, 0xfe61}, + {0xe82b, 0xe82c, 0xfe66}, + {0xe831, 0xe832, 0xfe6c}, + {0xe83b, 0xe83b, 0xfe76}, + {0xe843, 0xe843, 0xfe7e}, + {0xe854, 0xe855, 0xfe90}, + {0xe864, 0xe864, 0xfea0}, +}; + +static const int mbfl_gb18030_pua_tbl_max = sizeof(mbfl_gb18030_pua_tbl)/(sizeof(unsigned short)*3); + +static const unsigned short mbfl_gb2uni_tbl[] = { +0x0000, 0x0023, 0x0024, 0x0025, 0x0026, 0x002c, 0x002d, 0x0031, +0x0032, 0x0050, 0x0051, 0x0058, 0x0059, 0x005e, 0x005f, 0x005f, +0x0060, 0x0063, 0x0064, 0x0066, 0x0067, 0x0067, 0x0068, 0x0068, +0x0069, 0x006c, 0x006d, 0x007d, 0x007e, 0x0084, 0x0085, 0x0093, +0x0094, 0x00ab, 0x00ac, 0x00ae, 0x00af, 0x00b2, 0x00b3, 0x00cf, +0x00d0, 0x0131, 0x0132, 0x0132, 0x0133, 0x0133, 0x0134, 0x0134, +0x0135, 0x0135, 0x0136, 0x0136, 0x0137, 0x0137, 0x0138, 0x0138, +0x0139, 0x0154, 0x0155, 0x01ab, 0x01ac, 0x01ba, 0x01bb, 0x021f, +0x0220, 0x0220, 0x0221, 0x022d, 0x022e, 0x02e4, 0x02e5, 0x02e5, +0x02e6, 0x02ec, 0x02ed, 0x02ed, 0x02ee, 0x0324, 0x0325, 0x0332, +0x0333, 0x0333, 0x0334, 0x1ef1, 0x1ef2, 0x1ef3, 0x1ef4, 0x1ef4, +0x1ef5, 0x1ef6, 0x1ef7, 0x1efd, 0x1efe, 0x1f06, 0x1f07, 0x1f07, +0x1f08, 0x1f08, 0x1f09, 0x1f0d, 0x1f0e, 0x1f7d, 0x1f7e, 0x1fd3, +0x1fd4, 0x1fd4, 0x1fd5, 0x1fd7, 0x1fd8, 0x1fe3, 0x1fe4, 0x1fed, +0x1fee, 0x202b, 0x202c, 0x202f, 0x2030, 0x2045, 0x2046, 0x2047, +0x2048, 0x20b5, 0x20b6, 0x20bb, 0x20bc, 0x20bc, 0x20bd, 0x20bf, +0x20c0, 0x20c3, 0x20c4, 0x20c5, 0x20c6, 0x20c7, 0x20c8, 0x20c8, +0x20c9, 0x20c9, 0x20ca, 0x20cb, 0x20cc, 0x20d0, 0x20d1, 0x20d5, +0x20d6, 0x20df, 0x20e0, 0x20e2, 0x20e3, 0x20e7, 0x20e8, 0x20f4, +0x20f5, 0x20f6, 0x20f7, 0x20fc, 0x20fd, 0x2121, 0x2122, 0x2124, +0x2125, 0x212f, 0x2130, 0x2148, 0x2149, 0x219a, 0x219b, 0x22e7, +0x22e8, 0x22f1, 0x22f2, 0x2355, 0x2356, 0x2359, 0x235a, 0x2366, +0x2367, 0x2369, 0x236a, 0x2373, 0x2374, 0x2383, 0x2384, 0x238b, +0x238c, 0x2393, 0x2394, 0x2396, 0x2397, 0x2398, 0x2399, 0x23aa, +0x23ab, 0x23c9, 0x23ca, 0x23cb, 0x23cc, 0x2401, 0x2402, 0x2402, +0x2403, 0x2c40, 0x2c41, 0x2c42, 0x2c43, 0x2c45, 0x2c46, 0x2c47, +0x2c48, 0x2c51, 0x2c52, 0x2c60, 0x2c61, 0x2c62, 0x2c63, 0x2c65, +0x2c66, 0x2c69, 0x2c6a, 0x2c6b, 0x2c6c, 0x2c6e, 0x2c6f, 0x2c7c, +0x2c7d, 0x2da1, 0x2da2, 0x2da5, 0x2da6, 0x2da6, 0x2da7, 0x2dab, +0x2dac, 0x2dad, 0x2dae, 0x2dc1, 0x2dc2, 0x2dc3, 0x2dc4, 0x2dca, +0x2dcb, 0x2dcc, 0x2dcd, 0x2dd1, 0x2dd2, 0x2dd7, 0x2dd8, 0x2ecd, +0x2ece, 0x2ed4, 0x2ed5, 0x2f45, 0x2f46, 0x302f, 0x3030, 0x303b, +0x303c, 0x303d, 0x303e, 0x305f, 0x3060, 0x3068, 0x3069, 0x306a, +0x306b, 0x306c, 0x306d, 0x30dd, 0x30de, 0x3108, 0x3109, 0x3232, +0x3233, 0x32a1, 0x32a2, 0x32ac, 0x32ad, 0x35a9, 0x35aa, 0x35fe, +0x35ff, 0x365e, 0x365f, 0x366c, 0x366d, 0x36ff, 0x3700, 0x37d9, +0x37da, 0x38f8, 0x38f9, 0x3969, 0x396a, 0x3cde, 0x3cdf, 0x3de6, +0x3de7, 0x3fbd, 0x3fbe, 0x4031, 0x4032, 0x4035, 0x4036, 0x4060, +0x4061, 0x4158, 0x4159, 0x42cd, 0x42ce, 0x42e1, 0x42e2, 0x43a2, +0x43a3, 0x43a7, 0x43a8, 0x43f9, 0x43fa, 0x4409, 0x440a, 0x45c2, +0x45c3, 0x45f4, 0x45f5, 0x45f6, 0x45f7, 0x45fa, 0x45fb, 0x45fb, +0x45fc, 0x460f, 0x4610, 0x4612, 0x4613, 0x4628, 0x4629, 0x48e7, +0x48e8, 0x490e, 0x490f, 0x497d, 0x497e, 0x4a11, 0x4a12, 0x4a62, +0x4a63, 0x82bc, 0x82bd, 0x82bd, 0x82be, 0x82be, 0x82bf, 0x82cb, +0x82cc, 0x82cc, 0x82cd, 0x82d1, 0x82d2, 0x82d8, 0x82d9, 0x82dc, +0x82dd, 0x82e0, 0x82e1, 0x82e8, 0x82e9, 0x82ef, 0x82f0, 0x82ff, +0x8300, 0x830d, 0x830e, 0x93d4, 0x93d5, 0x9420, 0x9421, 0x943b, +0x943c, 0x948c, 0x948d, 0x9495, 0x9496, 0x94af, 0x94b0, 0x94b0, +0x94b1, 0x94b1, 0x94b2, 0x94b4, 0x94b5, 0x94ba, 0x94bb, 0x94bb, +0x94bc, 0x94bd, 0x94be, 0x98c3, 0x98c4, 0x98c4, 0x98c5, 0x98c8, +0x98c9, 0x98c9, 0x98ca, 0x98ca, 0x98cb, 0x98cb, 0x98cc, 0x9960, +0x9961, 0x99e1, 0x99e2, 0x99fb, +}; + +static const unsigned short mbfl_uni2gb_tbl[] = { +0x0080, 0x00a3, 0x00a5, 0x00a6, 0x00a9, 0x00af, 0x00b2, 0x00b6, +0x00b8, 0x00d6, 0x00d8, 0x00df, 0x00e2, 0x00e7, 0x00eb, 0x00eb, +0x00ee, 0x00f1, 0x00f4, 0x00f6, 0x00f8, 0x00f8, 0x00fb, 0x00fb, +0x00fd, 0x0100, 0x0102, 0x0112, 0x0114, 0x011a, 0x011c, 0x012a, +0x012c, 0x0143, 0x0145, 0x0147, 0x0149, 0x014c, 0x014e, 0x016a, +0x016c, 0x01cd, 0x01cf, 0x01cf, 0x01d1, 0x01d1, 0x01d3, 0x01d3, +0x01d5, 0x01d5, 0x01d7, 0x01d7, 0x01d9, 0x01d9, 0x01db, 0x01db, +0x01dd, 0x01f8, 0x01fa, 0x0250, 0x0252, 0x0260, 0x0262, 0x02c6, +0x02c8, 0x02c8, 0x02cc, 0x02d8, 0x02da, 0x0390, 0x03a2, 0x03a2, +0x03aa, 0x03b0, 0x03c2, 0x03c2, 0x03ca, 0x0400, 0x0402, 0x040f, +0x0450, 0x0450, 0x0452, 0x200f, 0x2011, 0x2012, 0x2017, 0x2017, +0x201a, 0x201b, 0x201e, 0x2024, 0x2027, 0x202f, 0x2031, 0x2031, +0x2034, 0x2034, 0x2036, 0x203a, 0x203c, 0x20ab, 0x20ad, 0x2102, +0x2104, 0x2104, 0x2106, 0x2108, 0x210a, 0x2115, 0x2117, 0x2120, +0x2122, 0x215f, 0x216c, 0x216f, 0x217a, 0x218f, 0x2194, 0x2195, +0x219a, 0x2207, 0x2209, 0x220e, 0x2210, 0x2210, 0x2212, 0x2214, +0x2216, 0x2219, 0x221b, 0x221c, 0x2221, 0x2222, 0x2224, 0x2224, +0x2226, 0x2226, 0x222c, 0x222d, 0x222f, 0x2233, 0x2238, 0x223c, +0x223e, 0x2247, 0x2249, 0x224b, 0x224d, 0x2251, 0x2253, 0x225f, +0x2262, 0x2263, 0x2268, 0x226d, 0x2270, 0x2294, 0x2296, 0x2298, +0x229a, 0x22a4, 0x22a6, 0x22be, 0x22c0, 0x2311, 0x2313, 0x245f, +0x246a, 0x2473, 0x249c, 0x24ff, 0x254c, 0x254f, 0x2574, 0x2580, +0x2590, 0x2592, 0x2596, 0x259f, 0x25a2, 0x25b1, 0x25b4, 0x25bb, +0x25be, 0x25c5, 0x25c8, 0x25ca, 0x25cc, 0x25cd, 0x25d0, 0x25e1, +0x25e6, 0x2604, 0x2607, 0x2608, 0x260a, 0x263f, 0x2641, 0x2641, +0x2643, 0x2e80, 0x2e82, 0x2e83, 0x2e85, 0x2e87, 0x2e89, 0x2e8a, +0x2e8d, 0x2e96, 0x2e98, 0x2ea6, 0x2ea8, 0x2ea9, 0x2eab, 0x2ead, +0x2eaf, 0x2eb2, 0x2eb4, 0x2eb5, 0x2eb8, 0x2eba, 0x2ebc, 0x2ec9, +0x2ecb, 0x2fef, 0x2ffc, 0x2fff, 0x3004, 0x3004, 0x3018, 0x301c, +0x301f, 0x3020, 0x302a, 0x303d, 0x303f, 0x3040, 0x3094, 0x309a, +0x309f, 0x30a0, 0x30f7, 0x30fb, 0x30ff, 0x3104, 0x312a, 0x321f, +0x322a, 0x3230, 0x3232, 0x32a2, 0x32a4, 0x338d, 0x3390, 0x339b, +0x339f, 0x33a0, 0x33a2, 0x33c3, 0x33c5, 0x33cd, 0x33cf, 0x33d0, +0x33d3, 0x33d4, 0x33d6, 0x3446, 0x3448, 0x3472, 0x3474, 0x359d, +0x359f, 0x360d, 0x360f, 0x3619, 0x361b, 0x3917, 0x3919, 0x396d, +0x396f, 0x39ce, 0x39d1, 0x39de, 0x39e0, 0x3a72, 0x3a74, 0x3b4d, +0x3b4f, 0x3c6d, 0x3c6f, 0x3cdf, 0x3ce1, 0x4055, 0x4057, 0x415e, +0x4160, 0x4336, 0x4338, 0x43ab, 0x43ad, 0x43b0, 0x43b2, 0x43dc, +0x43de, 0x44d5, 0x44d7, 0x464b, 0x464d, 0x4660, 0x4662, 0x4722, +0x4724, 0x4728, 0x472a, 0x477b, 0x477d, 0x478c, 0x478e, 0x4946, +0x4948, 0x4979, 0x497b, 0x497c, 0x497e, 0x4981, 0x4984, 0x4984, +0x4987, 0x499a, 0x499c, 0x499e, 0x49a0, 0x49b5, 0x49b8, 0x4c76, +0x4c78, 0x4c9e, 0x4ca4, 0x4d12, 0x4d1a, 0x4dad, 0x4daf, 0x4dff, +0x9fa6, 0xd7ff, 0xe76c, 0xe76c, 0xe7c8, 0xe7c8, 0xe7e7, 0xe7f3, +0xe815, 0xe815, 0xe819, 0xe81d, 0xe81f, 0xe825, 0xe827, 0xe82a, +0xe82d, 0xe830, 0xe833, 0xe83a, 0xe83c, 0xe842, 0xe844, 0xe853, +0xe856, 0xe863, 0xe865, 0xf92b, 0xf92d, 0xf978, 0xf97a, 0xf994, +0xf996, 0xf9e6, 0xf9e8, 0xf9f0, 0xf9f2, 0xfa0b, 0xfa10, 0xfa10, +0xfa12, 0xfa12, 0xfa15, 0xfa17, 0xfa19, 0xfa1e, 0xfa22, 0xfa22, +0xfa25, 0xfa26, 0xfa2a, 0xfe2f, 0xfe32, 0xfe32, 0xfe45, 0xfe48, +0xfe53, 0xfe53, 0xfe58, 0xfe58, 0xfe67, 0xfe67, 0xfe6c, 0xff00, +0xff5f, 0xffdf, 0xffe6, 0xffff, +}; + +static const unsigned short mbfl_gb_uni_ofst[] = { + 128, 129, 131, 133, 134, 135, 137, 140, + 142, 144, 145, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, + 168, 171, 172, 189, 196, 213, 220, 221, + 285, 286, 287, 291, 293, 295, 297, 298, + 300, 301, 302, 303, 304, 305, 306, 307, + 308, 320, 330, 334, 338, 339, 340, 341, + 342, 343, 347, 348, 349, 354, 355, 359, + 360, 361, 362, 363, 365, 369, 371, 372, + 373, 374, 375, 376, 386, 426, 502, 538, + 553, 556, 558, 560, 562, 564, 565, 567, + 571, 573, 574, 575, 576, 577, 578, 579, + 581, 582, 583, 584, 585, 586, 588, 589, + 590, 602, 606, 625, 627, 636, 637, 720, + 724, 810, 813, 850, 860, 861, 862, 864, + 867, 868, 869, 870, 872, 873, 874, 875, + 876, 877, 878, 879, 880, 882, 883, 884, + 885, 886, 887, 888, 889, 890, 891, 892, + 893, 894, 895, 896, 897, 898, 899, 900, + 901, 902, 903, 905, 907, 908, 909, 911, + 912, 917, 924, 925, 21827, 25775, 25866, 25896, + 25929, 25932, 25933, 25934, 25936, 25938, 25939, 25940, + 25942, 25943, 25944, 25945, 25946, 25947, 25948, 25952, + 25953, 25955, 25956, 25959, 25961, 25964, 25966, 25984, + 25994, 25998, 26012, 26016, 26110, 26116, +}; + +static const int mbfl_gb_uni_max = sizeof(mbfl_gb_uni_ofst)/sizeof(unsigned short); + + +#endif /* UNICODE_TABLE_GB18030_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_10.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_10.h new file mode 100644 index 0000000..2b6b78f --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_10.h @@ -0,0 +1,17 @@ +/* This file is automatically generated. Do not edit! */ +#ifndef UNICODE_TABLE_ISO8859_10_H +static const int iso8859_10_ucs_table[] = { + 0x00a0, 0x0104, 0x0112, 0x0122, 0x012a, 0x0128, 0x0136, 0x00a7, + 0x013b, 0x0110, 0x0160, 0x0166, 0x017d, 0x00ad, 0x016a, 0x014a, + 0x00b0, 0x0105, 0x0113, 0x0123, 0x012b, 0x0129, 0x0137, 0x00b7, + 0x013c, 0x0111, 0x0161, 0x0167, 0x017e, 0x2015, 0x016b, 0x014b, + 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, + 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x00cf, + 0x00d0, 0x0145, 0x014c, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0168, + 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, + 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, + 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x00ef, + 0x00f0, 0x0146, 0x014d, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0169, + 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x0138 +}; +#endif /* UNICODE_TABLE_ISO8859_10_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_13.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_13.h new file mode 100644 index 0000000..5822396 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_13.h @@ -0,0 +1,17 @@ +/* This file is automatically generated. Do not edit! */ +#ifndef UNICODE_TABLE_ISO8859_13_H +static const int iso8859_13_ucs_table[] = { + 0x00a0, 0x201d, 0x00a2, 0x00a3, 0x00a4, 0x201e, 0x00a6, 0x00a7, + 0x00d8, 0x00a9, 0x0156, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00c6, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x201c, 0x00b5, 0x00b6, 0x00b7, + 0x00f8, 0x00b9, 0x0157, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00e6, + 0x0104, 0x012e, 0x0100, 0x0106, 0x00c4, 0x00c5, 0x0118, 0x0112, + 0x010c, 0x00c9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012a, 0x013b, + 0x0160, 0x0143, 0x0145, 0x00d3, 0x014c, 0x00d5, 0x00d6, 0x00d7, + 0x0172, 0x0141, 0x015a, 0x016a, 0x00dc, 0x017b, 0x017d, 0x00df, + 0x0105, 0x012f, 0x0101, 0x0107, 0x00e4, 0x00e5, 0x0119, 0x0113, + 0x010d, 0x00e9, 0x017a, 0x0117, 0x0123, 0x0137, 0x012b, 0x013c, + 0x0161, 0x0144, 0x0146, 0x00f3, 0x014d, 0x00f5, 0x00f6, 0x00f7, + 0x0173, 0x0142, 0x015b, 0x016b, 0x00fc, 0x017c, 0x017e, 0x2019 +}; +#endif /* UNICODE_TABLE_ISO8859_13_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_14.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_14.h new file mode 100644 index 0000000..6bd03b3 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_14.h @@ -0,0 +1,17 @@ +/* This file is automatically generated. Do not edit! */ +#ifndef UNICODE_TABLE_ISO8859_14_H +static const int iso8859_14_ucs_table[] = { + 0x00a0, 0x1e02, 0x1e03, 0x00a3, 0x010a, 0x010b, 0x1e0a, 0x00a7, + 0x1e80, 0x00a9, 0x1e82, 0x1e0b, 0x1ef2, 0x00ad, 0x00ae, 0x0178, + 0x1e1e, 0x1e1f, 0x0120, 0x0121, 0x1e40, 0x1e41, 0x00b6, 0x1e56, + 0x1e81, 0x1e57, 0x1e83, 0x1e60, 0x1ef3, 0x1e84, 0x1e85, 0x1e61, + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + 0x0174, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x1e6a, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x0176, 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + 0x0175, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x1e6b, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x0177, 0x00ff +}; +#endif /* UNICODE_TABLE_ISO8859_14_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_15.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_15.h new file mode 100644 index 0000000..029a2bc --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_15.h @@ -0,0 +1,17 @@ +/* This file is automatically generated. Do not edit! */ +#ifndef UNICODE_TABLE_ISO8859_15_H +static const int iso8859_15_ucs_table[] = { + 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20ac, 0x00a5, 0x0160, 0x00a7, + 0x0161, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x017d, 0x00b5, 0x00b6, 0x00b7, + 0x017e, 0x00b9, 0x00ba, 0x00bb, 0x0152, 0x0153, 0x0178, 0x00bf, + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff +}; +#endif /* UNICODE_TABLE_ISO8859_15_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_16.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_16.h new file mode 100644 index 0000000..555472d --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_16.h @@ -0,0 +1,17 @@ +/* This file is automatically generated. Do not edit! */ +#ifndef UNICODE_TABLEISO8859_16_H +static const int iso8859_16_ucs_table[] = { + 0x00a0, 0x0104, 0x0105, 0x0141, 0x20ac, 0x201e, 0x0160, 0x00a7, + 0x0161, 0x00a9, 0x0218, 0x00ab, 0x0179, 0x00ad, 0x017a, 0x017b, + 0x00b0, 0x00b1, 0x010c, 0x0142, 0x017d, 0x201d, 0x00b6, 0x00b7, + 0x017e, 0x010d, 0x0219, 0x00bb, 0x0152, 0x0153, 0x0178, 0x017c, + 0x00c0, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0106, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + 0x0110, 0x0143, 0x00d2, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x015a, + 0x0170, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0118, 0x021a, 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x0107, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + 0x0111, 0x0144, 0x00f2, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x015b, + 0x0171, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0119, 0x021b, 0x00ff +}; +#endif /* UNICODE_TABLEISO8859_16_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_2.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_2.h new file mode 100644 index 0000000..12bb3cb --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_2.h @@ -0,0 +1,17 @@ +/* This file is automatically generated. Do not edit! */ +#ifndef UNICODE_TABLE_ISO8859_2_H +static const int iso8859_2_ucs_table[] = { + 0x00a0, 0x0104, 0x02d8, 0x0141, 0x00a4, 0x013d, 0x015a, 0x00a7, + 0x00a8, 0x0160, 0x015e, 0x0164, 0x0179, 0x00ad, 0x017d, 0x017b, + 0x00b0, 0x0105, 0x02db, 0x0142, 0x00b4, 0x013e, 0x015b, 0x02c7, + 0x00b8, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c, + 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7, + 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e, + 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7, + 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df, + 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7, + 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f, + 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7, + 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9 +}; +#endif /* UNICODE_TABLE_ISO8859_2_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_3.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_3.h new file mode 100644 index 0000000..f50c348 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_3.h @@ -0,0 +1,17 @@ +/* This file is automatically generated. Do not edit! */ +#ifndef UNICODE_TABLE_ISO8859_3_H +static const int iso8859_3_ucs_table[] = { + 0x00a0, 0x0126, 0x02d8, 0x00a3, 0x00a4, 0x0000, 0x0124, 0x00a7, + 0x00a8, 0x0130, 0x015e, 0x011e, 0x0134, 0x00ad, 0x0000, 0x017b, + 0x00b0, 0x0127, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x0125, 0x00b7, + 0x00b8, 0x0131, 0x015f, 0x011f, 0x0135, 0x00bd, 0x0000, 0x017c, + 0x00c0, 0x00c1, 0x00c2, 0x0000, 0x00c4, 0x010a, 0x0108, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + 0x0000, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x0120, 0x00d6, 0x00d7, + 0x011c, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x016c, 0x015c, 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x0000, 0x00e4, 0x010b, 0x0109, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + 0x0000, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x0121, 0x00f6, 0x00f7, + 0x011d, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x016d, 0x015d, 0x02d9 +}; +#endif /* UNICODE_TABLE_ISO8859_3_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_4.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_4.h new file mode 100644 index 0000000..ff7ecdb --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_4.h @@ -0,0 +1,17 @@ +/* This file is automatically generated. Do not edit! */ +#ifndef UNICODE_TABLE_ISO8859_4_H +static const int iso8859_4_ucs_table[] = { + 0x00a0, 0x0104, 0x0138, 0x0156, 0x00a4, 0x0128, 0x013b, 0x00a7, + 0x00a8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00ad, 0x017d, 0x00af, + 0x00b0, 0x0105, 0x02db, 0x0157, 0x00b4, 0x0129, 0x013c, 0x02c7, + 0x00b8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014a, 0x017e, 0x014b, + 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, + 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x012a, + 0x0110, 0x0145, 0x014c, 0x0136, 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x0168, 0x016a, 0x00df, + 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, + 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x012b, + 0x0111, 0x0146, 0x014d, 0x0137, 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x0169, 0x016b, 0x02d9 +}; +#endif /* UNICODE_TABLE_ISO8859_4_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_5.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_5.h new file mode 100644 index 0000000..411ab84 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_5.h @@ -0,0 +1,17 @@ +/* This file is automatically generated. Do not edit! */ +#ifndef UNICODE_TABLE_ISO8859_5_H +static const int iso8859_5_ucs_table[] = { + 0x00a0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, + 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, + 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, + 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, + 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, + 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, + 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, + 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, + 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, + 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, + 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, + 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x00a7, 0x045e, 0x045f +}; +#endif /* UNICODE_TABLE_ISO8859_5_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_6.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_6.h new file mode 100644 index 0000000..0b3952e --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_6.h @@ -0,0 +1,17 @@ +/* This file is automatically generated. Do not edit! */ +#ifndef UNICODE_TABLE_ISO8859_6_H +static const int iso8859_6_ucs_table[] = { + 0x00a0, 0x0000, 0x0000, 0x0000, 0x00a4, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x060c, 0x00ad, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x061b, 0x0000, 0x0000, 0x0000, 0x061f, + 0x0000, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, + 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, + 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, + 0x0638, 0x0639, 0x063a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, + 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, + 0x0650, 0x0651, 0x0652, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; +#endif /* UNICODE_TABLE_ISO8859_6_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_7.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_7.h new file mode 100644 index 0000000..687f4cb --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_7.h @@ -0,0 +1,17 @@ +/* This file is automatically generated. Do not edit! */ +#ifndef UNICODE_TABLE_ISO8859_7_H +static const int iso8859_7_ucs_table[] = { + 0x00a0, 0x2018, 0x2019, 0x00a3, 0x20ac, 0x20af, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x037a, 0x00ab, 0x00ac, 0x00ad, 0x0000, 0x2015, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x0385, 0x0386, 0x00b7, + 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f, + 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, + 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, + 0x03a0, 0x03a1, 0x0000, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, + 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, + 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, + 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, + 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, + 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x0000 +}; +#endif /* UNICODE_TABLE_ISO8859_7_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_8.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_8.h new file mode 100644 index 0000000..4ec6490 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_8.h @@ -0,0 +1,17 @@ +/* This file is automatically generated. Do not edit! */ +#ifndef UNICODE_TABLE_ISO8859_8_H +static const int iso8859_8_ucs_table[] = { + 0x00a0, 0x0000, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2017, + 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, + 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, + 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, + 0x05e8, 0x05e9, 0x05ea, 0x0000, 0x0000, 0x200e, 0x200f, 0x0000 +}; +#endif /* UNICODE_TABLE_ISO8859_8_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_iso8859_9.h b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_9.h new file mode 100644 index 0000000..12f988a --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_iso8859_9.h @@ -0,0 +1,17 @@ +/* This file is automatically generated. Do not edit! */ +#ifndef UNICODE_TABLE_ISO8859_9_H +static const int iso8859_9_ucs_table[] = { + 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, + 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, + 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, + 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, + 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, + 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, + 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, + 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, + 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, + 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, + 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, + 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff +}; +#endif /* UNICODE_TABLE_ISO8859_9_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_jis.h b/ext/mbstring/libmbfl/filters/unicode_table_jis.h new file mode 100644 index 0000000..9132d4b --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_jis.h @@ -0,0 +1,5872 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The authors of this file: PHP3 internationalization team + * You can contact the primary authors; 金本 茂 <sgk@happysize.co.jp>, + * Tsukada Takuya <tsukada@fminn.nagano.nagano.jp>. + * + */ + +#ifndef UNICODE_TABLE_JIS_H +#define UNICODE_TABLE_JIS_H + +#ifdef UNICODE_TABLE_JIS_DEF + +/* + * Unicode table + */ +const unsigned short jisx0208_ucs_table[] = { + /* ku 1 */ + 0x3000,0x3001,0x3002,0xFF0C,0xFF0E,0x30FB,0xFF1A,0xFF1B, + 0xFF1F,0xFF01,0x309B,0x309C,0x00B4,0xFF40,0x00A8,0xFF3E, + 0xFFE3,0xFF3F,0x30FD,0x30FE,0x309D,0x309E,0x3003,0x4EDD, + 0x3005,0x3006,0x3007,0x30FC,0x2015,0x2010,0xFF0F,0xFF3C, + 0x301C,0x2016,0xFF5C,0x2026,0x2025,0x2018,0x2019,0x201C, + 0x201D,0xFF08,0xFF09,0x3014,0x3015,0xFF3B,0xFF3D,0xFF5B, + 0xFF5D,0x3008,0x3009,0x300A,0x300B,0x300C,0x300D,0x300E, + 0x300F,0x3010,0x3011,0xFF0B,0x2212,0x00B1,0x00D7,0x00F7, + 0xFF1D,0x2260,0xFF1C,0xFF1E,0x2266,0x2267,0x221E,0x2234, + 0x2642,0x2640,0x00B0,0x2032,0x2033,0x2103,0xFFE5,0xFF04, + 0x00A2,0x00A3,0xFF05,0xFF03,0xFF06,0xFF0A,0xFF20,0x00A7, + 0x2606,0x2605,0x25CB,0x25CF,0x25CE,0x25C7, + + /* ku 2 */ + 0x25C6,0x25A1,0x25A0,0x25B3,0x25B2,0x25BD,0x25BC,0x203B, + 0x3012,0x2192,0x2190,0x2191,0x2193,0x3013,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x2208,0x220B,0x2286,0x2287,0x2282,0x2283,0x222A, + 0x2229,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x2227,0x2228,0x00AC,0x21D2,0x21D4,0x2200,0x2203, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x2220,0x22A5,0x2312,0x2202,0x2207, + 0x2261,0x2252,0x226A,0x226B,0x221A,0x223D,0x221D,0x2235, + 0x222B,0x222C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x212B,0x2030,0x266F,0x266D,0x266A,0x2020,0x2021, + 0x00B6,0x0000,0x0000,0x0000,0x0000,0x25EF, + + /* ku 3 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xFF10, + 0xFF11,0xFF12,0xFF13,0xFF14,0xFF15,0xFF16,0xFF17,0xFF18, + 0xFF19,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,0xFF28, + 0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,0xFF30, + 0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38, + 0xFF39,0xFF3A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,0xFF48, + 0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F,0xFF50, + 0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0xFF57,0xFF58, + 0xFF59,0xFF5A,0x0000,0x0000,0x0000,0x0000, + + /* ku 4 */ + 0x3041,0x3042,0x3043,0x3044,0x3045,0x3046,0x3047,0x3048, + 0x3049,0x304A,0x304B,0x304C,0x304D,0x304E,0x304F,0x3050, + 0x3051,0x3052,0x3053,0x3054,0x3055,0x3056,0x3057,0x3058, + 0x3059,0x305A,0x305B,0x305C,0x305D,0x305E,0x305F,0x3060, + 0x3061,0x3062,0x3063,0x3064,0x3065,0x3066,0x3067,0x3068, + 0x3069,0x306A,0x306B,0x306C,0x306D,0x306E,0x306F,0x3070, + 0x3071,0x3072,0x3073,0x3074,0x3075,0x3076,0x3077,0x3078, + 0x3079,0x307A,0x307B,0x307C,0x307D,0x307E,0x307F,0x3080, + 0x3081,0x3082,0x3083,0x3084,0x3085,0x3086,0x3087,0x3088, + 0x3089,0x308A,0x308B,0x308C,0x308D,0x308E,0x308F,0x3090, + 0x3091,0x3092,0x3093,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 5 */ + 0x30A1,0x30A2,0x30A3,0x30A4,0x30A5,0x30A6,0x30A7,0x30A8, + 0x30A9,0x30AA,0x30AB,0x30AC,0x30AD,0x30AE,0x30AF,0x30B0, + 0x30B1,0x30B2,0x30B3,0x30B4,0x30B5,0x30B6,0x30B7,0x30B8, + 0x30B9,0x30BA,0x30BB,0x30BC,0x30BD,0x30BE,0x30BF,0x30C0, + 0x30C1,0x30C2,0x30C3,0x30C4,0x30C5,0x30C6,0x30C7,0x30C8, + 0x30C9,0x30CA,0x30CB,0x30CC,0x30CD,0x30CE,0x30CF,0x30D0, + 0x30D1,0x30D2,0x30D3,0x30D4,0x30D5,0x30D6,0x30D7,0x30D8, + 0x30D9,0x30DA,0x30DB,0x30DC,0x30DD,0x30DE,0x30DF,0x30E0, + 0x30E1,0x30E2,0x30E3,0x30E4,0x30E5,0x30E6,0x30E7,0x30E8, + 0x30E9,0x30EA,0x30EB,0x30EC,0x30ED,0x30EE,0x30EF,0x30F0, + 0x30F1,0x30F2,0x30F3,0x30F4,0x30F5,0x30F6,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 6 */ + 0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,0x0398, + 0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F,0x03A0, + 0x03A1,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7,0x03A8,0x03A9, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x03B1,0x03B2,0x03B3,0x03B4,0x03B5,0x03B6,0x03B7,0x03B8, + 0x03B9,0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF,0x03C0, + 0x03C1,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,0x03C9, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 7 */ + 0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0401,0x0416, + 0x0417,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E, + 0x041F,0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426, + 0x0427,0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E, + 0x042F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0451,0x0436, + 0x0437,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E, + 0x043F,0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446, + 0x0447,0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E, + 0x044F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 8 */ + 0x2500,0x2502,0x250C,0x2510,0x2518,0x2514,0x251C,0x252C, + 0x2524,0x2534,0x253C,0x2501,0x2503,0x250F,0x2513,0x251B, + 0x2517,0x2523,0x2533,0x252B,0x253B,0x254B,0x2520,0x252F, + 0x2528,0x2537,0x253F,0x251D,0x2530,0x2525,0x2538,0x2542, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 9 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 10 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 11 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 12 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 13 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 14 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 15 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 16 */ + 0x4E9C,0x5516,0x5A03,0x963F,0x54C0,0x611B,0x6328,0x59F6, + 0x9022,0x8475,0x831C,0x7A50,0x60AA,0x63E1,0x6E25,0x65ED, + 0x8466,0x82A6,0x9BF5,0x6893,0x5727,0x65A1,0x6271,0x5B9B, + 0x59D0,0x867B,0x98F4,0x7D62,0x7DBE,0x9B8E,0x6216,0x7C9F, + 0x88B7,0x5B89,0x5EB5,0x6309,0x6697,0x6848,0x95C7,0x978D, + 0x674F,0x4EE5,0x4F0A,0x4F4D,0x4F9D,0x5049,0x56F2,0x5937, + 0x59D4,0x5A01,0x5C09,0x60DF,0x610F,0x6170,0x6613,0x6905, + 0x70BA,0x754F,0x7570,0x79FB,0x7DAD,0x7DEF,0x80C3,0x840E, + 0x8863,0x8B02,0x9055,0x907A,0x533B,0x4E95,0x4EA5,0x57DF, + 0x80B2,0x90C1,0x78EF,0x4E00,0x58F1,0x6EA2,0x9038,0x7A32, + 0x8328,0x828B,0x9C2F,0x5141,0x5370,0x54BD,0x54E1,0x56E0, + 0x59FB,0x5F15,0x98F2,0x6DEB,0x80E4,0x852D, + + /* ku 17 */ + 0x9662,0x9670,0x96A0,0x97FB,0x540B,0x53F3,0x5B87,0x70CF, + 0x7FBD,0x8FC2,0x96E8,0x536F,0x9D5C,0x7ABA,0x4E11,0x7893, + 0x81FC,0x6E26,0x5618,0x5504,0x6B1D,0x851A,0x9C3B,0x59E5, + 0x53A9,0x6D66,0x74DC,0x958F,0x5642,0x4E91,0x904B,0x96F2, + 0x834F,0x990C,0x53E1,0x55B6,0x5B30,0x5F71,0x6620,0x66F3, + 0x6804,0x6C38,0x6CF3,0x6D29,0x745B,0x76C8,0x7A4E,0x9834, + 0x82F1,0x885B,0x8A60,0x92ED,0x6DB2,0x75AB,0x76CA,0x99C5, + 0x60A6,0x8B01,0x8D8A,0x95B2,0x698E,0x53AD,0x5186,0x5712, + 0x5830,0x5944,0x5BB4,0x5EF6,0x6028,0x63A9,0x63F4,0x6CBF, + 0x6F14,0x708E,0x7114,0x7159,0x71D5,0x733F,0x7E01,0x8276, + 0x82D1,0x8597,0x9060,0x925B,0x9D1B,0x5869,0x65BC,0x6C5A, + 0x7525,0x51F9,0x592E,0x5965,0x5F80,0x5FDC, + + /* ku 18 */ + 0x62BC,0x65FA,0x6A2A,0x6B27,0x6BB4,0x738B,0x7FC1,0x8956, + 0x9D2C,0x9D0E,0x9EC4,0x5CA1,0x6C96,0x837B,0x5104,0x5C4B, + 0x61B6,0x81C6,0x6876,0x7261,0x4E59,0x4FFA,0x5378,0x6069, + 0x6E29,0x7A4F,0x97F3,0x4E0B,0x5316,0x4EEE,0x4F55,0x4F3D, + 0x4FA1,0x4F73,0x52A0,0x53EF,0x5609,0x590F,0x5AC1,0x5BB6, + 0x5BE1,0x79D1,0x6687,0x679C,0x67B6,0x6B4C,0x6CB3,0x706B, + 0x73C2,0x798D,0x79BE,0x7A3C,0x7B87,0x82B1,0x82DB,0x8304, + 0x8377,0x83EF,0x83D3,0x8766,0x8AB2,0x5629,0x8CA8,0x8FE6, + 0x904E,0x971E,0x868A,0x4FC4,0x5CE8,0x6211,0x7259,0x753B, + 0x81E5,0x82BD,0x86FE,0x8CC0,0x96C5,0x9913,0x99D5,0x4ECB, + 0x4F1A,0x89E3,0x56DE,0x584A,0x58CA,0x5EFB,0x5FEB,0x602A, + 0x6094,0x6062,0x61D0,0x6212,0x62D0,0x6539, + + /* ku 19 */ + 0x9B41,0x6666,0x68B0,0x6D77,0x7070,0x754C,0x7686,0x7D75, + 0x82A5,0x87F9,0x958B,0x968E,0x8C9D,0x51F1,0x52BE,0x5916, + 0x54B3,0x5BB3,0x5D16,0x6168,0x6982,0x6DAF,0x788D,0x84CB, + 0x8857,0x8A72,0x93A7,0x9AB8,0x6D6C,0x99A8,0x86D9,0x57A3, + 0x67FF,0x86CE,0x920E,0x5283,0x5687,0x5404,0x5ED3,0x62E1, + 0x64B9,0x683C,0x6838,0x6BBB,0x7372,0x78BA,0x7A6B,0x899A, + 0x89D2,0x8D6B,0x8F03,0x90ED,0x95A3,0x9694,0x9769,0x5B66, + 0x5CB3,0x697D,0x984D,0x984E,0x639B,0x7B20,0x6A2B,0x6A7F, + 0x68B6,0x9C0D,0x6F5F,0x5272,0x559D,0x6070,0x62EC,0x6D3B, + 0x6E07,0x6ED1,0x845B,0x8910,0x8F44,0x4E14,0x9C39,0x53F6, + 0x691B,0x6A3A,0x9784,0x682A,0x515C,0x7AC3,0x84B2,0x91DC, + 0x938C,0x565B,0x9D28,0x6822,0x8305,0x8431, + + /* ku 20 */ + 0x7CA5,0x5208,0x82C5,0x74E6,0x4E7E,0x4F83,0x51A0,0x5BD2, + 0x520A,0x52D8,0x52E7,0x5DFB,0x559A,0x582A,0x59E6,0x5B8C, + 0x5B98,0x5BDB,0x5E72,0x5E79,0x60A3,0x611F,0x6163,0x61BE, + 0x63DB,0x6562,0x67D1,0x6853,0x68FA,0x6B3E,0x6B53,0x6C57, + 0x6F22,0x6F97,0x6F45,0x74B0,0x7518,0x76E3,0x770B,0x7AFF, + 0x7BA1,0x7C21,0x7DE9,0x7F36,0x7FF0,0x809D,0x8266,0x839E, + 0x89B3,0x8ACC,0x8CAB,0x9084,0x9451,0x9593,0x9591,0x95A2, + 0x9665,0x97D3,0x9928,0x8218,0x4E38,0x542B,0x5CB8,0x5DCC, + 0x73A9,0x764C,0x773C,0x5CA9,0x7FEB,0x8D0B,0x96C1,0x9811, + 0x9854,0x9858,0x4F01,0x4F0E,0x5371,0x559C,0x5668,0x57FA, + 0x5947,0x5B09,0x5BC4,0x5C90,0x5E0C,0x5E7E,0x5FCC,0x63EE, + 0x673A,0x65D7,0x65E2,0x671F,0x68CB,0x68C4, + + /* ku 21 */ + 0x6A5F,0x5E30,0x6BC5,0x6C17,0x6C7D,0x757F,0x7948,0x5B63, + 0x7A00,0x7D00,0x5FBD,0x898F,0x8A18,0x8CB4,0x8D77,0x8ECC, + 0x8F1D,0x98E2,0x9A0E,0x9B3C,0x4E80,0x507D,0x5100,0x5993, + 0x5B9C,0x622F,0x6280,0x64EC,0x6B3A,0x72A0,0x7591,0x7947, + 0x7FA9,0x87FB,0x8ABC,0x8B70,0x63AC,0x83CA,0x97A0,0x5409, + 0x5403,0x55AB,0x6854,0x6A58,0x8A70,0x7827,0x6775,0x9ECD, + 0x5374,0x5BA2,0x811A,0x8650,0x9006,0x4E18,0x4E45,0x4EC7, + 0x4F11,0x53CA,0x5438,0x5BAE,0x5F13,0x6025,0x6551,0x673D, + 0x6C42,0x6C72,0x6CE3,0x7078,0x7403,0x7A76,0x7AAE,0x7B08, + 0x7D1A,0x7CFE,0x7D66,0x65E7,0x725B,0x53BB,0x5C45,0x5DE8, + 0x62D2,0x62E0,0x6319,0x6E20,0x865A,0x8A31,0x8DDD,0x92F8, + 0x6F01,0x79A6,0x9B5A,0x4EA8,0x4EAB,0x4EAC, + + /* ku 22 */ + 0x4F9B,0x4FA0,0x50D1,0x5147,0x7AF6,0x5171,0x51F6,0x5354, + 0x5321,0x537F,0x53EB,0x55AC,0x5883,0x5CE1,0x5F37,0x5F4A, + 0x602F,0x6050,0x606D,0x631F,0x6559,0x6A4B,0x6CC1,0x72C2, + 0x72ED,0x77EF,0x80F8,0x8105,0x8208,0x854E,0x90F7,0x93E1, + 0x97FF,0x9957,0x9A5A,0x4EF0,0x51DD,0x5C2D,0x6681,0x696D, + 0x5C40,0x66F2,0x6975,0x7389,0x6850,0x7C81,0x50C5,0x52E4, + 0x5747,0x5DFE,0x9326,0x65A4,0x6B23,0x6B3D,0x7434,0x7981, + 0x79BD,0x7B4B,0x7DCA,0x82B9,0x83CC,0x887F,0x895F,0x8B39, + 0x8FD1,0x91D1,0x541F,0x9280,0x4E5D,0x5036,0x53E5,0x533A, + 0x72D7,0x7396,0x77E9,0x82E6,0x8EAF,0x99C6,0x99C8,0x99D2, + 0x5177,0x611A,0x865E,0x55B0,0x7A7A,0x5076,0x5BD3,0x9047, + 0x9685,0x4E32,0x6ADB,0x91E7,0x5C51,0x5C48, + + /* ku 23 */ + 0x6398,0x7A9F,0x6C93,0x9774,0x8F61,0x7AAA,0x718A,0x9688, + 0x7C82,0x6817,0x7E70,0x6851,0x936C,0x52F2,0x541B,0x85AB, + 0x8A13,0x7FA4,0x8ECD,0x90E1,0x5366,0x8888,0x7941,0x4FC2, + 0x50BE,0x5211,0x5144,0x5553,0x572D,0x73EA,0x578B,0x5951, + 0x5F62,0x5F84,0x6075,0x6176,0x6167,0x61A9,0x63B2,0x643A, + 0x656C,0x666F,0x6842,0x6E13,0x7566,0x7A3D,0x7CFB,0x7D4C, + 0x7D99,0x7E4B,0x7F6B,0x830E,0x834A,0x86CD,0x8A08,0x8A63, + 0x8B66,0x8EFD,0x981A,0x9D8F,0x82B8,0x8FCE,0x9BE8,0x5287, + 0x621F,0x6483,0x6FC0,0x9699,0x6841,0x5091,0x6B20,0x6C7A, + 0x6F54,0x7A74,0x7D50,0x8840,0x8A23,0x6708,0x4EF6,0x5039, + 0x5026,0x5065,0x517C,0x5238,0x5263,0x55A7,0x570F,0x5805, + 0x5ACC,0x5EFA,0x61B2,0x61F8,0x62F3,0x6372, + + /* ku 24 */ + 0x691C,0x6A29,0x727D,0x72AC,0x732E,0x7814,0x786F,0x7D79, + 0x770C,0x80A9,0x898B,0x8B19,0x8CE2,0x8ED2,0x9063,0x9375, + 0x967A,0x9855,0x9A13,0x9E78,0x5143,0x539F,0x53B3,0x5E7B, + 0x5F26,0x6E1B,0x6E90,0x7384,0x73FE,0x7D43,0x8237,0x8A00, + 0x8AFA,0x9650,0x4E4E,0x500B,0x53E4,0x547C,0x56FA,0x59D1, + 0x5B64,0x5DF1,0x5EAB,0x5F27,0x6238,0x6545,0x67AF,0x6E56, + 0x72D0,0x7CCA,0x88B4,0x80A1,0x80E1,0x83F0,0x864E,0x8A87, + 0x8DE8,0x9237,0x96C7,0x9867,0x9F13,0x4E94,0x4E92,0x4F0D, + 0x5348,0x5449,0x543E,0x5A2F,0x5F8C,0x5FA1,0x609F,0x68A7, + 0x6A8E,0x745A,0x7881,0x8A9E,0x8AA4,0x8B77,0x9190,0x4E5E, + 0x9BC9,0x4EA4,0x4F7C,0x4FAF,0x5019,0x5016,0x5149,0x516C, + 0x529F,0x52B9,0x52FE,0x539A,0x53E3,0x5411, + + /* ku 25 */ + 0x540E,0x5589,0x5751,0x57A2,0x597D,0x5B54,0x5B5D,0x5B8F, + 0x5DE5,0x5DE7,0x5DF7,0x5E78,0x5E83,0x5E9A,0x5EB7,0x5F18, + 0x6052,0x614C,0x6297,0x62D8,0x63A7,0x653B,0x6602,0x6643, + 0x66F4,0x676D,0x6821,0x6897,0x69CB,0x6C5F,0x6D2A,0x6D69, + 0x6E2F,0x6E9D,0x7532,0x7687,0x786C,0x7A3F,0x7CE0,0x7D05, + 0x7D18,0x7D5E,0x7DB1,0x8015,0x8003,0x80AF,0x80B1,0x8154, + 0x818F,0x822A,0x8352,0x884C,0x8861,0x8B1B,0x8CA2,0x8CFC, + 0x90CA,0x9175,0x9271,0x783F,0x92FC,0x95A4,0x964D,0x9805, + 0x9999,0x9AD8,0x9D3B,0x525B,0x52AB,0x53F7,0x5408,0x58D5, + 0x62F7,0x6FE0,0x8C6A,0x8F5F,0x9EB9,0x514B,0x523B,0x544A, + 0x56FD,0x7A40,0x9177,0x9D60,0x9ED2,0x7344,0x6F09,0x8170, + 0x7511,0x5FFD,0x60DA,0x9AA8,0x72DB,0x8FBC, + + /* ku 26 */ + 0x6B64,0x9803,0x4ECA,0x56F0,0x5764,0x58BE,0x5A5A,0x6068, + 0x61C7,0x660F,0x6606,0x6839,0x68B1,0x6DF7,0x75D5,0x7D3A, + 0x826E,0x9B42,0x4E9B,0x4F50,0x53C9,0x5506,0x5D6F,0x5DE6, + 0x5DEE,0x67FB,0x6C99,0x7473,0x7802,0x8A50,0x9396,0x88DF, + 0x5750,0x5EA7,0x632B,0x50B5,0x50AC,0x518D,0x6700,0x54C9, + 0x585E,0x59BB,0x5BB0,0x5F69,0x624D,0x63A1,0x683D,0x6B73, + 0x6E08,0x707D,0x91C7,0x7280,0x7815,0x7826,0x796D,0x658E, + 0x7D30,0x83DC,0x88C1,0x8F09,0x969B,0x5264,0x5728,0x6750, + 0x7F6A,0x8CA1,0x51B4,0x5742,0x962A,0x583A,0x698A,0x80B4, + 0x54B2,0x5D0E,0x57FC,0x7895,0x9DFA,0x4F5C,0x524A,0x548B, + 0x643E,0x6628,0x6714,0x67F5,0x7A84,0x7B56,0x7D22,0x932F, + 0x685C,0x9BAD,0x7B39,0x5319,0x518A,0x5237, + + /* ku 27 */ + 0x5BDF,0x62F6,0x64AE,0x64E6,0x672D,0x6BBA,0x85A9,0x96D1, + 0x7690,0x9BD6,0x634C,0x9306,0x9BAB,0x76BF,0x6652,0x4E09, + 0x5098,0x53C2,0x5C71,0x60E8,0x6492,0x6563,0x685F,0x71E6, + 0x73CA,0x7523,0x7B97,0x7E82,0x8695,0x8B83,0x8CDB,0x9178, + 0x9910,0x65AC,0x66AB,0x6B8B,0x4ED5,0x4ED4,0x4F3A,0x4F7F, + 0x523A,0x53F8,0x53F2,0x55E3,0x56DB,0x58EB,0x59CB,0x59C9, + 0x59FF,0x5B50,0x5C4D,0x5E02,0x5E2B,0x5FD7,0x601D,0x6307, + 0x652F,0x5B5C,0x65AF,0x65BD,0x65E8,0x679D,0x6B62,0x6B7B, + 0x6C0F,0x7345,0x7949,0x79C1,0x7CF8,0x7D19,0x7D2B,0x80A2, + 0x8102,0x81F3,0x8996,0x8A5E,0x8A69,0x8A66,0x8A8C,0x8AEE, + 0x8CC7,0x8CDC,0x96CC,0x98FC,0x6B6F,0x4E8B,0x4F3C,0x4F8D, + 0x5150,0x5B57,0x5BFA,0x6148,0x6301,0x6642, + + /* ku 28 */ + 0x6B21,0x6ECB,0x6CBB,0x723E,0x74BD,0x75D4,0x78C1,0x793A, + 0x800C,0x8033,0x81EA,0x8494,0x8F9E,0x6C50,0x9E7F,0x5F0F, + 0x8B58,0x9D2B,0x7AFA,0x8EF8,0x5B8D,0x96EB,0x4E03,0x53F1, + 0x57F7,0x5931,0x5AC9,0x5BA4,0x6089,0x6E7F,0x6F06,0x75BE, + 0x8CEA,0x5B9F,0x8500,0x7BE0,0x5072,0x67F4,0x829D,0x5C61, + 0x854A,0x7E1E,0x820E,0x5199,0x5C04,0x6368,0x8D66,0x659C, + 0x716E,0x793E,0x7D17,0x8005,0x8B1D,0x8ECA,0x906E,0x86C7, + 0x90AA,0x501F,0x52FA,0x5C3A,0x6753,0x707C,0x7235,0x914C, + 0x91C8,0x932B,0x82E5,0x5BC2,0x5F31,0x60F9,0x4E3B,0x53D6, + 0x5B88,0x624B,0x6731,0x6B8A,0x72E9,0x73E0,0x7A2E,0x816B, + 0x8DA3,0x9152,0x9996,0x5112,0x53D7,0x546A,0x5BFF,0x6388, + 0x6A39,0x7DAC,0x9700,0x56DA,0x53CE,0x5468, + + /* ku 29 */ + 0x5B97,0x5C31,0x5DDE,0x4FEE,0x6101,0x62FE,0x6D32,0x79C0, + 0x79CB,0x7D42,0x7E4D,0x7FD2,0x81ED,0x821F,0x8490,0x8846, + 0x8972,0x8B90,0x8E74,0x8F2F,0x9031,0x914B,0x916C,0x96C6, + 0x919C,0x4EC0,0x4F4F,0x5145,0x5341,0x5F93,0x620E,0x67D4, + 0x6C41,0x6E0B,0x7363,0x7E26,0x91CD,0x9283,0x53D4,0x5919, + 0x5BBF,0x6DD1,0x795D,0x7E2E,0x7C9B,0x587E,0x719F,0x51FA, + 0x8853,0x8FF0,0x4FCA,0x5CFB,0x6625,0x77AC,0x7AE3,0x821C, + 0x99FF,0x51C6,0x5FAA,0x65EC,0x696F,0x6B89,0x6DF3,0x6E96, + 0x6F64,0x76FE,0x7D14,0x5DE1,0x9075,0x9187,0x9806,0x51E6, + 0x521D,0x6240,0x6691,0x66D9,0x6E1A,0x5EB6,0x7DD2,0x7F72, + 0x66F8,0x85AF,0x85F7,0x8AF8,0x52A9,0x53D9,0x5973,0x5E8F, + 0x5F90,0x6055,0x92E4,0x9664,0x50B7,0x511F, + + /* ku 30 */ + 0x52DD,0x5320,0x5347,0x53EC,0x54E8,0x5546,0x5531,0x5617, + 0x5968,0x59BE,0x5A3C,0x5BB5,0x5C06,0x5C0F,0x5C11,0x5C1A, + 0x5E84,0x5E8A,0x5EE0,0x5F70,0x627F,0x6284,0x62DB,0x638C, + 0x6377,0x6607,0x660C,0x662D,0x6676,0x677E,0x68A2,0x6A1F, + 0x6A35,0x6CBC,0x6D88,0x6E09,0x6E58,0x713C,0x7126,0x7167, + 0x75C7,0x7701,0x785D,0x7901,0x7965,0x79F0,0x7AE0,0x7B11, + 0x7CA7,0x7D39,0x8096,0x83D6,0x848B,0x8549,0x885D,0x88F3, + 0x8A1F,0x8A3C,0x8A54,0x8A73,0x8C61,0x8CDE,0x91A4,0x9266, + 0x937E,0x9418,0x969C,0x9798,0x4E0A,0x4E08,0x4E1E,0x4E57, + 0x5197,0x5270,0x57CE,0x5834,0x58CC,0x5B22,0x5E38,0x60C5, + 0x64FE,0x6761,0x6756,0x6D44,0x72B6,0x7573,0x7A63,0x84B8, + 0x8B72,0x91B8,0x9320,0x5631,0x57F4,0x98FE, + + /* ku 31 */ + 0x62ED,0x690D,0x6B96,0x71ED,0x7E54,0x8077,0x8272,0x89E6, + 0x98DF,0x8755,0x8FB1,0x5C3B,0x4F38,0x4FE1,0x4FB5,0x5507, + 0x5A20,0x5BDD,0x5BE9,0x5FC3,0x614E,0x632F,0x65B0,0x664B, + 0x68EE,0x699B,0x6D78,0x6DF1,0x7533,0x75B9,0x771F,0x795E, + 0x79E6,0x7D33,0x81E3,0x82AF,0x85AA,0x89AA,0x8A3A,0x8EAB, + 0x8F9B,0x9032,0x91DD,0x9707,0x4EBA,0x4EC1,0x5203,0x5875, + 0x58EC,0x5C0B,0x751A,0x5C3D,0x814E,0x8A0A,0x8FC5,0x9663, + 0x976D,0x7B25,0x8ACF,0x9808,0x9162,0x56F3,0x53A8,0x9017, + 0x5439,0x5782,0x5E25,0x63A8,0x6C34,0x708A,0x7761,0x7C8B, + 0x7FE0,0x8870,0x9042,0x9154,0x9310,0x9318,0x968F,0x745E, + 0x9AC4,0x5D07,0x5D69,0x6570,0x67A2,0x8DA8,0x96DB,0x636E, + 0x6749,0x6919,0x83C5,0x9817,0x96C0,0x88FE, + + /* ku 32 */ + 0x6F84,0x647A,0x5BF8,0x4E16,0x702C,0x755D,0x662F,0x51C4, + 0x5236,0x52E2,0x59D3,0x5F81,0x6027,0x6210,0x653F,0x6574, + 0x661F,0x6674,0x68F2,0x6816,0x6B63,0x6E05,0x7272,0x751F, + 0x76DB,0x7CBE,0x8056,0x58F0,0x88FD,0x897F,0x8AA0,0x8A93, + 0x8ACB,0x901D,0x9192,0x9752,0x9759,0x6589,0x7A0E,0x8106, + 0x96BB,0x5E2D,0x60DC,0x621A,0x65A5,0x6614,0x6790,0x77F3, + 0x7A4D,0x7C4D,0x7E3E,0x810A,0x8CAC,0x8D64,0x8DE1,0x8E5F, + 0x78A9,0x5207,0x62D9,0x63A5,0x6442,0x6298,0x8A2D,0x7A83, + 0x7BC0,0x8AAC,0x96EA,0x7D76,0x820C,0x8749,0x4ED9,0x5148, + 0x5343,0x5360,0x5BA3,0x5C02,0x5C16,0x5DDD,0x6226,0x6247, + 0x64B0,0x6813,0x6834,0x6CC9,0x6D45,0x6D17,0x67D3,0x6F5C, + 0x714E,0x717D,0x65CB,0x7A7F,0x7BAD,0x7DDA, + + /* ku 33 */ + 0x7E4A,0x7FA8,0x817A,0x821B,0x8239,0x85A6,0x8A6E,0x8CCE, + 0x8DF5,0x9078,0x9077,0x92AD,0x9291,0x9583,0x9BAE,0x524D, + 0x5584,0x6F38,0x7136,0x5168,0x7985,0x7E55,0x81B3,0x7CCE, + 0x564C,0x5851,0x5CA8,0x63AA,0x66FE,0x66FD,0x695A,0x72D9, + 0x758F,0x758E,0x790E,0x7956,0x79DF,0x7C97,0x7D20,0x7D44, + 0x8607,0x8A34,0x963B,0x9061,0x9F20,0x50E7,0x5275,0x53CC, + 0x53E2,0x5009,0x55AA,0x58EE,0x594F,0x723D,0x5B8B,0x5C64, + 0x531D,0x60E3,0x60F3,0x635C,0x6383,0x633F,0x63BB,0x64CD, + 0x65E9,0x66F9,0x5DE3,0x69CD,0x69FD,0x6F15,0x71E5,0x4E89, + 0x75E9,0x76F8,0x7A93,0x7CDF,0x7DCF,0x7D9C,0x8061,0x8349, + 0x8358,0x846C,0x84BC,0x85FB,0x88C5,0x8D70,0x9001,0x906D, + 0x9397,0x971C,0x9A12,0x50CF,0x5897,0x618E, + + /* ku 34 */ + 0x81D3,0x8535,0x8D08,0x9020,0x4FC3,0x5074,0x5247,0x5373, + 0x606F,0x6349,0x675F,0x6E2C,0x8DB3,0x901F,0x4FD7,0x5C5E, + 0x8CCA,0x65CF,0x7D9A,0x5352,0x8896,0x5176,0x63C3,0x5B58, + 0x5B6B,0x5C0A,0x640D,0x6751,0x905C,0x4ED6,0x591A,0x592A, + 0x6C70,0x8A51,0x553E,0x5815,0x59A5,0x60F0,0x6253,0x67C1, + 0x8235,0x6955,0x9640,0x99C4,0x9A28,0x4F53,0x5806,0x5BFE, + 0x8010,0x5CB1,0x5E2F,0x5F85,0x6020,0x614B,0x6234,0x66FF, + 0x6CF0,0x6EDE,0x80CE,0x817F,0x82D4,0x888B,0x8CB8,0x9000, + 0x902E,0x968A,0x9EDB,0x9BDB,0x4EE3,0x53F0,0x5927,0x7B2C, + 0x918D,0x984C,0x9DF9,0x6EDD,0x7027,0x5353,0x5544,0x5B85, + 0x6258,0x629E,0x62D3,0x6CA2,0x6FEF,0x7422,0x8A17,0x9438, + 0x6FC1,0x8AFE,0x8338,0x51E7,0x86F8,0x53EA, + + /* ku 35 */ + 0x53E9,0x4F46,0x9054,0x8FB0,0x596A,0x8131,0x5DFD,0x7AEA, + 0x8FBF,0x68DA,0x8C37,0x72F8,0x9C48,0x6A3D,0x8AB0,0x4E39, + 0x5358,0x5606,0x5766,0x62C5,0x63A2,0x65E6,0x6B4E,0x6DE1, + 0x6E5B,0x70AD,0x77ED,0x7AEF,0x7BAA,0x7DBB,0x803D,0x80C6, + 0x86CB,0x8A95,0x935B,0x56E3,0x58C7,0x5F3E,0x65AD,0x6696, + 0x6A80,0x6BB5,0x7537,0x8AC7,0x5024,0x77E5,0x5730,0x5F1B, + 0x6065,0x667A,0x6C60,0x75F4,0x7A1A,0x7F6E,0x81F4,0x8718, + 0x9045,0x99B3,0x7BC9,0x755C,0x7AF9,0x7B51,0x84C4,0x9010, + 0x79E9,0x7A92,0x8336,0x5AE1,0x7740,0x4E2D,0x4EF2,0x5B99, + 0x5FE0,0x62BD,0x663C,0x67F1,0x6CE8,0x866B,0x8877,0x8A3B, + 0x914E,0x92F3,0x99D0,0x6A17,0x7026,0x732A,0x82E7,0x8457, + 0x8CAF,0x4E01,0x5146,0x51CB,0x558B,0x5BF5, + + /* ku 36 */ + 0x5E16,0x5E33,0x5E81,0x5F14,0x5F35,0x5F6B,0x5FB4,0x61F2, + 0x6311,0x66A2,0x671D,0x6F6E,0x7252,0x753A,0x773A,0x8074, + 0x8139,0x8178,0x8776,0x8ABF,0x8ADC,0x8D85,0x8DF3,0x929A, + 0x9577,0x9802,0x9CE5,0x52C5,0x6357,0x76F4,0x6715,0x6C88, + 0x73CD,0x8CC3,0x93AE,0x9673,0x6D25,0x589C,0x690E,0x69CC, + 0x8FFD,0x939A,0x75DB,0x901A,0x585A,0x6802,0x63B4,0x69FB, + 0x4F43,0x6F2C,0x67D8,0x8FBB,0x8526,0x7DB4,0x9354,0x693F, + 0x6F70,0x576A,0x58F7,0x5B2C,0x7D2C,0x722A,0x540A,0x91E3, + 0x9DB4,0x4EAD,0x4F4E,0x505C,0x5075,0x5243,0x8C9E,0x5448, + 0x5824,0x5B9A,0x5E1D,0x5E95,0x5EAD,0x5EF7,0x5F1F,0x608C, + 0x62B5,0x633A,0x63D0,0x68AF,0x6C40,0x7887,0x798E,0x7A0B, + 0x7DE0,0x8247,0x8A02,0x8AE6,0x8E44,0x9013, + + /* ku 37 */ + 0x90B8,0x912D,0x91D8,0x9F0E,0x6CE5,0x6458,0x64E2,0x6575, + 0x6EF4,0x7684,0x7B1B,0x9069,0x93D1,0x6EBA,0x54F2,0x5FB9, + 0x64A4,0x8F4D,0x8FED,0x9244,0x5178,0x586B,0x5929,0x5C55, + 0x5E97,0x6DFB,0x7E8F,0x751C,0x8CBC,0x8EE2,0x985B,0x70B9, + 0x4F1D,0x6BBF,0x6FB1,0x7530,0x96FB,0x514E,0x5410,0x5835, + 0x5857,0x59AC,0x5C60,0x5F92,0x6597,0x675C,0x6E21,0x767B, + 0x83DF,0x8CED,0x9014,0x90FD,0x934D,0x7825,0x783A,0x52AA, + 0x5EA6,0x571F,0x5974,0x6012,0x5012,0x515A,0x51AC,0x51CD, + 0x5200,0x5510,0x5854,0x5858,0x5957,0x5B95,0x5CF6,0x5D8B, + 0x60BC,0x6295,0x642D,0x6771,0x6843,0x68BC,0x68DF,0x76D7, + 0x6DD8,0x6E6F,0x6D9B,0x706F,0x71C8,0x5F53,0x75D8,0x7977, + 0x7B49,0x7B54,0x7B52,0x7CD6,0x7D71,0x5230, + + /* ku 38 */ + 0x8463,0x8569,0x85E4,0x8A0E,0x8B04,0x8C46,0x8E0F,0x9003, + 0x900F,0x9419,0x9676,0x982D,0x9A30,0x95D8,0x50CD,0x52D5, + 0x540C,0x5802,0x5C0E,0x61A7,0x649E,0x6D1E,0x77B3,0x7AE5, + 0x80F4,0x8404,0x9053,0x9285,0x5CE0,0x9D07,0x533F,0x5F97, + 0x5FB3,0x6D9C,0x7279,0x7763,0x79BF,0x7BE4,0x6BD2,0x72EC, + 0x8AAD,0x6803,0x6A61,0x51F8,0x7A81,0x6934,0x5C4A,0x9CF6, + 0x82EB,0x5BC5,0x9149,0x701E,0x5678,0x5C6F,0x60C7,0x6566, + 0x6C8C,0x8C5A,0x9041,0x9813,0x5451,0x66C7,0x920D,0x5948, + 0x90A3,0x5185,0x4E4D,0x51EA,0x8599,0x8B0E,0x7058,0x637A, + 0x934B,0x6962,0x99B4,0x7E04,0x7577,0x5357,0x6960,0x8EDF, + 0x96E3,0x6C5D,0x4E8C,0x5C3C,0x5F10,0x8FE9,0x5302,0x8CD1, + 0x8089,0x8679,0x5EFF,0x65E5,0x4E73,0x5165, + + /* ku 39 */ + 0x5982,0x5C3F,0x97EE,0x4EFB,0x598A,0x5FCD,0x8A8D,0x6FE1, + 0x79B0,0x7962,0x5BE7,0x8471,0x732B,0x71B1,0x5E74,0x5FF5, + 0x637B,0x649A,0x71C3,0x7C98,0x4E43,0x5EFC,0x4E4B,0x57DC, + 0x56A2,0x60A9,0x6FC3,0x7D0D,0x80FD,0x8133,0x81BF,0x8FB2, + 0x8997,0x86A4,0x5DF4,0x628A,0x64AD,0x8987,0x6777,0x6CE2, + 0x6D3E,0x7436,0x7834,0x5A46,0x7F75,0x82AD,0x99AC,0x4FF3, + 0x5EC3,0x62DD,0x6392,0x6557,0x676F,0x76C3,0x724C,0x80CC, + 0x80BA,0x8F29,0x914D,0x500D,0x57F9,0x5A92,0x6885,0x6973, + 0x7164,0x72FD,0x8CB7,0x58F2,0x8CE0,0x966A,0x9019,0x877F, + 0x79E4,0x77E7,0x8429,0x4F2F,0x5265,0x535A,0x62CD,0x67CF, + 0x6CCA,0x767D,0x7B94,0x7C95,0x8236,0x8584,0x8FEB,0x66DD, + 0x6F20,0x7206,0x7E1B,0x83AB,0x99C1,0x9EA6, + + /* ku 40 */ + 0x51FD,0x7BB1,0x7872,0x7BB8,0x8087,0x7B48,0x6AE8,0x5E61, + 0x808C,0x7551,0x7560,0x516B,0x9262,0x6E8C,0x767A,0x9197, + 0x9AEA,0x4F10,0x7F70,0x629C,0x7B4F,0x95A5,0x9CE9,0x567A, + 0x5859,0x86E4,0x96BC,0x4F34,0x5224,0x534A,0x53CD,0x53DB, + 0x5E06,0x642C,0x6591,0x677F,0x6C3E,0x6C4E,0x7248,0x72AF, + 0x73ED,0x7554,0x7E41,0x822C,0x85E9,0x8CA9,0x7BC4,0x91C6, + 0x7169,0x9812,0x98EF,0x633D,0x6669,0x756A,0x76E4,0x78D0, + 0x8543,0x86EE,0x532A,0x5351,0x5426,0x5983,0x5E87,0x5F7C, + 0x60B2,0x6249,0x6279,0x62AB,0x6590,0x6BD4,0x6CCC,0x75B2, + 0x76AE,0x7891,0x79D8,0x7DCB,0x7F77,0x80A5,0x88AB,0x8AB9, + 0x8CBB,0x907F,0x975E,0x98DB,0x6A0B,0x7C38,0x5099,0x5C3E, + 0x5FAE,0x6787,0x6BD8,0x7435,0x7709,0x7F8E, + + /* ku 41 */ + 0x9F3B,0x67CA,0x7A17,0x5339,0x758B,0x9AED,0x5F66,0x819D, + 0x83F1,0x8098,0x5F3C,0x5FC5,0x7562,0x7B46,0x903C,0x6867, + 0x59EB,0x5A9B,0x7D10,0x767E,0x8B2C,0x4FF5,0x5F6A,0x6A19, + 0x6C37,0x6F02,0x74E2,0x7968,0x8868,0x8A55,0x8C79,0x5EDF, + 0x63CF,0x75C5,0x79D2,0x82D7,0x9328,0x92F2,0x849C,0x86ED, + 0x9C2D,0x54C1,0x5F6C,0x658C,0x6D5C,0x7015,0x8CA7,0x8CD3, + 0x983B,0x654F,0x74F6,0x4E0D,0x4ED8,0x57E0,0x592B,0x5A66, + 0x5BCC,0x51A8,0x5E03,0x5E9C,0x6016,0x6276,0x6577,0x65A7, + 0x666E,0x6D6E,0x7236,0x7B26,0x8150,0x819A,0x8299,0x8B5C, + 0x8CA0,0x8CE6,0x8D74,0x961C,0x9644,0x4FAE,0x64AB,0x6B66, + 0x821E,0x8461,0x856A,0x90E8,0x5C01,0x6953,0x98A8,0x847A, + 0x8557,0x4F0F,0x526F,0x5FA9,0x5E45,0x670D, + + /* ku 42 */ + 0x798F,0x8179,0x8907,0x8986,0x6DF5,0x5F17,0x6255,0x6CB8, + 0x4ECF,0x7269,0x9B92,0x5206,0x543B,0x5674,0x58B3,0x61A4, + 0x626E,0x711A,0x596E,0x7C89,0x7CDE,0x7D1B,0x96F0,0x6587, + 0x805E,0x4E19,0x4F75,0x5175,0x5840,0x5E63,0x5E73,0x5F0A, + 0x67C4,0x4E26,0x853D,0x9589,0x965B,0x7C73,0x9801,0x50FB, + 0x58C1,0x7656,0x78A7,0x5225,0x77A5,0x8511,0x7B86,0x504F, + 0x5909,0x7247,0x7BC7,0x7DE8,0x8FBA,0x8FD4,0x904D,0x4FBF, + 0x52C9,0x5A29,0x5F01,0x97AD,0x4FDD,0x8217,0x92EA,0x5703, + 0x6355,0x6B69,0x752B,0x88DC,0x8F14,0x7A42,0x52DF,0x5893, + 0x6155,0x620A,0x66AE,0x6BCD,0x7C3F,0x83E9,0x5023,0x4FF8, + 0x5305,0x5446,0x5831,0x5949,0x5B9D,0x5CF0,0x5CEF,0x5D29, + 0x5E96,0x62B1,0x6367,0x653E,0x65B9,0x670B, + + /* ku 43 */ + 0x6CD5,0x6CE1,0x70F9,0x7832,0x7E2B,0x80DE,0x82B3,0x840C, + 0x84EC,0x8702,0x8912,0x8A2A,0x8C4A,0x90A6,0x92D2,0x98FD, + 0x9CF3,0x9D6C,0x4E4F,0x4EA1,0x508D,0x5256,0x574A,0x59A8, + 0x5E3D,0x5FD8,0x5FD9,0x623F,0x66B4,0x671B,0x67D0,0x68D2, + 0x5192,0x7D21,0x80AA,0x81A8,0x8B00,0x8C8C,0x8CBF,0x927E, + 0x9632,0x5420,0x982C,0x5317,0x50D5,0x535C,0x58A8,0x64B2, + 0x6734,0x7267,0x7766,0x7A46,0x91E6,0x52C3,0x6CA1,0x6B86, + 0x5800,0x5E4C,0x5954,0x672C,0x7FFB,0x51E1,0x76C6,0x6469, + 0x78E8,0x9B54,0x9EBB,0x57CB,0x59B9,0x6627,0x679A,0x6BCE, + 0x54E9,0x69D9,0x5E55,0x819C,0x6795,0x9BAA,0x67FE,0x9C52, + 0x685D,0x4EA6,0x4FE3,0x53C8,0x62B9,0x672B,0x6CAB,0x8FC4, + 0x4FAD,0x7E6D,0x9EBF,0x4E07,0x6162,0x6E80, + + /* ku 44 */ + 0x6F2B,0x8513,0x5473,0x672A,0x9B45,0x5DF3,0x7B95,0x5CAC, + 0x5BC6,0x871C,0x6E4A,0x84D1,0x7A14,0x8108,0x5999,0x7C8D, + 0x6C11,0x7720,0x52D9,0x5922,0x7121,0x725F,0x77DB,0x9727, + 0x9D61,0x690B,0x5A7F,0x5A18,0x51A5,0x540D,0x547D,0x660E, + 0x76DF,0x8FF7,0x9298,0x9CF4,0x59EA,0x725D,0x6EC5,0x514D, + 0x68C9,0x7DBF,0x7DEC,0x9762,0x9EBA,0x6478,0x6A21,0x8302, + 0x5984,0x5B5F,0x6BDB,0x731B,0x76F2,0x7DB2,0x8017,0x8499, + 0x5132,0x6728,0x9ED9,0x76EE,0x6762,0x52FF,0x9905,0x5C24, + 0x623B,0x7C7E,0x8CB0,0x554F,0x60B6,0x7D0B,0x9580,0x5301, + 0x4E5F,0x51B6,0x591C,0x723A,0x8036,0x91CE,0x5F25,0x77E2, + 0x5384,0x5F79,0x7D04,0x85AC,0x8A33,0x8E8D,0x9756,0x67F3, + 0x85AE,0x9453,0x6109,0x6108,0x6CB9,0x7652, + + /* ku 45 */ + 0x8AED,0x8F38,0x552F,0x4F51,0x512A,0x52C7,0x53CB,0x5BA5, + 0x5E7D,0x60A0,0x6182,0x63D6,0x6709,0x67DA,0x6E67,0x6D8C, + 0x7336,0x7337,0x7531,0x7950,0x88D5,0x8A98,0x904A,0x9091, + 0x90F5,0x96C4,0x878D,0x5915,0x4E88,0x4F59,0x4E0E,0x8A89, + 0x8F3F,0x9810,0x50AD,0x5E7C,0x5996,0x5BB9,0x5EB8,0x63DA, + 0x63FA,0x64C1,0x66DC,0x694A,0x69D8,0x6D0B,0x6EB6,0x7194, + 0x7528,0x7AAF,0x7F8A,0x8000,0x8449,0x84C9,0x8981,0x8B21, + 0x8E0A,0x9065,0x967D,0x990A,0x617E,0x6291,0x6B32,0x6C83, + 0x6D74,0x7FCC,0x7FFC,0x6DC0,0x7F85,0x87BA,0x88F8,0x6765, + 0x83B1,0x983C,0x96F7,0x6D1B,0x7D61,0x843D,0x916A,0x4E71, + 0x5375,0x5D50,0x6B04,0x6FEB,0x85CD,0x862D,0x89A7,0x5229, + 0x540F,0x5C65,0x674E,0x68A8,0x7406,0x7483, + + /* ku 46 */ + 0x75E2,0x88CF,0x88E1,0x91CC,0x96E2,0x9678,0x5F8B,0x7387, + 0x7ACB,0x844E,0x63A0,0x7565,0x5289,0x6D41,0x6E9C,0x7409, + 0x7559,0x786B,0x7C92,0x9686,0x7ADC,0x9F8D,0x4FB6,0x616E, + 0x65C5,0x865C,0x4E86,0x4EAE,0x50DA,0x4E21,0x51CC,0x5BEE, + 0x6599,0x6881,0x6DBC,0x731F,0x7642,0x77AD,0x7A1C,0x7CE7, + 0x826F,0x8AD2,0x907C,0x91CF,0x9675,0x9818,0x529B,0x7DD1, + 0x502B,0x5398,0x6797,0x6DCB,0x71D0,0x7433,0x81E8,0x8F2A, + 0x96A3,0x9C57,0x9E9F,0x7460,0x5841,0x6D99,0x7D2F,0x985E, + 0x4EE4,0x4F36,0x4F8B,0x51B7,0x52B1,0x5DBA,0x601C,0x73B2, + 0x793C,0x82D3,0x9234,0x96B7,0x96F6,0x970A,0x9E97,0x9F62, + 0x66A6,0x6B74,0x5217,0x52A3,0x70C8,0x88C2,0x5EC9,0x604B, + 0x6190,0x6F23,0x7149,0x7C3E,0x7DF4,0x806F, + + /* ku 47 */ + 0x84EE,0x9023,0x932C,0x5442,0x9B6F,0x6AD3,0x7089,0x8CC2, + 0x8DEF,0x9732,0x52B4,0x5A41,0x5ECA,0x5F04,0x6717,0x697C, + 0x6994,0x6D6A,0x6F0F,0x7262,0x72FC,0x7BED,0x8001,0x807E, + 0x874B,0x90CE,0x516D,0x9E93,0x7984,0x808B,0x9332,0x8AD6, + 0x502D,0x548C,0x8A71,0x6B6A,0x8CC4,0x8107,0x60D1,0x67A0, + 0x9DF2,0x4E99,0x4E98,0x9C10,0x8A6B,0x85C1,0x8568,0x6900, + 0x6E7E,0x7897,0x8155,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 48 */ + 0x5F0C,0x4E10,0x4E15,0x4E2A,0x4E31,0x4E36,0x4E3C,0x4E3F, + 0x4E42,0x4E56,0x4E58,0x4E82,0x4E85,0x8C6B,0x4E8A,0x8212, + 0x5F0D,0x4E8E,0x4E9E,0x4E9F,0x4EA0,0x4EA2,0x4EB0,0x4EB3, + 0x4EB6,0x4ECE,0x4ECD,0x4EC4,0x4EC6,0x4EC2,0x4ED7,0x4EDE, + 0x4EED,0x4EDF,0x4EF7,0x4F09,0x4F5A,0x4F30,0x4F5B,0x4F5D, + 0x4F57,0x4F47,0x4F76,0x4F88,0x4F8F,0x4F98,0x4F7B,0x4F69, + 0x4F70,0x4F91,0x4F6F,0x4F86,0x4F96,0x5118,0x4FD4,0x4FDF, + 0x4FCE,0x4FD8,0x4FDB,0x4FD1,0x4FDA,0x4FD0,0x4FE4,0x4FE5, + 0x501A,0x5028,0x5014,0x502A,0x5025,0x5005,0x4F1C,0x4FF6, + 0x5021,0x5029,0x502C,0x4FFE,0x4FEF,0x5011,0x5006,0x5043, + 0x5047,0x6703,0x5055,0x5050,0x5048,0x505A,0x5056,0x506C, + 0x5078,0x5080,0x509A,0x5085,0x50B4,0x50B2, + + /* ku 49 */ + 0x50C9,0x50CA,0x50B3,0x50C2,0x50D6,0x50DE,0x50E5,0x50ED, + 0x50E3,0x50EE,0x50F9,0x50F5,0x5109,0x5101,0x5102,0x5116, + 0x5115,0x5114,0x511A,0x5121,0x513A,0x5137,0x513C,0x513B, + 0x513F,0x5140,0x5152,0x514C,0x5154,0x5162,0x7AF8,0x5169, + 0x516A,0x516E,0x5180,0x5182,0x56D8,0x518C,0x5189,0x518F, + 0x5191,0x5193,0x5195,0x5196,0x51A4,0x51A6,0x51A2,0x51A9, + 0x51AA,0x51AB,0x51B3,0x51B1,0x51B2,0x51B0,0x51B5,0x51BD, + 0x51C5,0x51C9,0x51DB,0x51E0,0x8655,0x51E9,0x51ED,0x51F0, + 0x51F5,0x51FE,0x5204,0x520B,0x5214,0x520E,0x5227,0x522A, + 0x522E,0x5233,0x5239,0x524F,0x5244,0x524B,0x524C,0x525E, + 0x5254,0x526A,0x5274,0x5269,0x5273,0x527F,0x527D,0x528D, + 0x5294,0x5292,0x5271,0x5288,0x5291,0x8FA8, + + /* ku 50 */ + 0x8FA7,0x52AC,0x52AD,0x52BC,0x52B5,0x52C1,0x52CD,0x52D7, + 0x52DE,0x52E3,0x52E6,0x98ED,0x52E0,0x52F3,0x52F5,0x52F8, + 0x52F9,0x5306,0x5308,0x7538,0x530D,0x5310,0x530F,0x5315, + 0x531A,0x5323,0x532F,0x5331,0x5333,0x5338,0x5340,0x5346, + 0x5345,0x4E17,0x5349,0x534D,0x51D6,0x535E,0x5369,0x536E, + 0x5918,0x537B,0x5377,0x5382,0x5396,0x53A0,0x53A6,0x53A5, + 0x53AE,0x53B0,0x53B6,0x53C3,0x7C12,0x96D9,0x53DF,0x66FC, + 0x71EE,0x53EE,0x53E8,0x53ED,0x53FA,0x5401,0x543D,0x5440, + 0x542C,0x542D,0x543C,0x542E,0x5436,0x5429,0x541D,0x544E, + 0x548F,0x5475,0x548E,0x545F,0x5471,0x5477,0x5470,0x5492, + 0x547B,0x5480,0x5476,0x5484,0x5490,0x5486,0x54C7,0x54A2, + 0x54B8,0x54A5,0x54AC,0x54C4,0x54C8,0x54A8, + + /* ku 51 */ + 0x54AB,0x54C2,0x54A4,0x54BE,0x54BC,0x54D8,0x54E5,0x54E6, + 0x550F,0x5514,0x54FD,0x54EE,0x54ED,0x54FA,0x54E2,0x5539, + 0x5540,0x5563,0x554C,0x552E,0x555C,0x5545,0x5556,0x5557, + 0x5538,0x5533,0x555D,0x5599,0x5580,0x54AF,0x558A,0x559F, + 0x557B,0x557E,0x5598,0x559E,0x55AE,0x557C,0x5583,0x55A9, + 0x5587,0x55A8,0x55DA,0x55C5,0x55DF,0x55C4,0x55DC,0x55E4, + 0x55D4,0x5614,0x55F7,0x5616,0x55FE,0x55FD,0x561B,0x55F9, + 0x564E,0x5650,0x71DF,0x5634,0x5636,0x5632,0x5638,0x566B, + 0x5664,0x562F,0x566C,0x566A,0x5686,0x5680,0x568A,0x56A0, + 0x5694,0x568F,0x56A5,0x56AE,0x56B6,0x56B4,0x56C2,0x56BC, + 0x56C1,0x56C3,0x56C0,0x56C8,0x56CE,0x56D1,0x56D3,0x56D7, + 0x56EE,0x56F9,0x5700,0x56FF,0x5704,0x5709, + + /* ku 52 */ + 0x5708,0x570B,0x570D,0x5713,0x5718,0x5716,0x55C7,0x571C, + 0x5726,0x5737,0x5738,0x574E,0x573B,0x5740,0x574F,0x5769, + 0x57C0,0x5788,0x5761,0x577F,0x5789,0x5793,0x57A0,0x57B3, + 0x57A4,0x57AA,0x57B0,0x57C3,0x57C6,0x57D4,0x57D2,0x57D3, + 0x580A,0x57D6,0x57E3,0x580B,0x5819,0x581D,0x5872,0x5821, + 0x5862,0x584B,0x5870,0x6BC0,0x5852,0x583D,0x5879,0x5885, + 0x58B9,0x589F,0x58AB,0x58BA,0x58DE,0x58BB,0x58B8,0x58AE, + 0x58C5,0x58D3,0x58D1,0x58D7,0x58D9,0x58D8,0x58E5,0x58DC, + 0x58E4,0x58DF,0x58EF,0x58FA,0x58F9,0x58FB,0x58FC,0x58FD, + 0x5902,0x590A,0x5910,0x591B,0x68A6,0x5925,0x592C,0x592D, + 0x5932,0x5938,0x593E,0x7AD2,0x5955,0x5950,0x594E,0x595A, + 0x5958,0x5962,0x5960,0x5967,0x596C,0x5969, + + /* ku 53 */ + 0x5978,0x5981,0x599D,0x4F5E,0x4FAB,0x59A3,0x59B2,0x59C6, + 0x59E8,0x59DC,0x598D,0x59D9,0x59DA,0x5A25,0x5A1F,0x5A11, + 0x5A1C,0x5A09,0x5A1A,0x5A40,0x5A6C,0x5A49,0x5A35,0x5A36, + 0x5A62,0x5A6A,0x5A9A,0x5ABC,0x5ABE,0x5ACB,0x5AC2,0x5ABD, + 0x5AE3,0x5AD7,0x5AE6,0x5AE9,0x5AD6,0x5AFA,0x5AFB,0x5B0C, + 0x5B0B,0x5B16,0x5B32,0x5AD0,0x5B2A,0x5B36,0x5B3E,0x5B43, + 0x5B45,0x5B40,0x5B51,0x5B55,0x5B5A,0x5B5B,0x5B65,0x5B69, + 0x5B70,0x5B73,0x5B75,0x5B78,0x6588,0x5B7A,0x5B80,0x5B83, + 0x5BA6,0x5BB8,0x5BC3,0x5BC7,0x5BC9,0x5BD4,0x5BD0,0x5BE4, + 0x5BE6,0x5BE2,0x5BDE,0x5BE5,0x5BEB,0x5BF0,0x5BF6,0x5BF3, + 0x5C05,0x5C07,0x5C08,0x5C0D,0x5C13,0x5C20,0x5C22,0x5C28, + 0x5C38,0x5C39,0x5C41,0x5C46,0x5C4E,0x5C53, + + /* ku 54 */ + 0x5C50,0x5C4F,0x5B71,0x5C6C,0x5C6E,0x4E62,0x5C76,0x5C79, + 0x5C8C,0x5C91,0x5C94,0x599B,0x5CAB,0x5CBB,0x5CB6,0x5CBC, + 0x5CB7,0x5CC5,0x5CBE,0x5CC7,0x5CD9,0x5CE9,0x5CFD,0x5CFA, + 0x5CED,0x5D8C,0x5CEA,0x5D0B,0x5D15,0x5D17,0x5D5C,0x5D1F, + 0x5D1B,0x5D11,0x5D14,0x5D22,0x5D1A,0x5D19,0x5D18,0x5D4C, + 0x5D52,0x5D4E,0x5D4B,0x5D6C,0x5D73,0x5D76,0x5D87,0x5D84, + 0x5D82,0x5DA2,0x5D9D,0x5DAC,0x5DAE,0x5DBD,0x5D90,0x5DB7, + 0x5DBC,0x5DC9,0x5DCD,0x5DD3,0x5DD2,0x5DD6,0x5DDB,0x5DEB, + 0x5DF2,0x5DF5,0x5E0B,0x5E1A,0x5E19,0x5E11,0x5E1B,0x5E36, + 0x5E37,0x5E44,0x5E43,0x5E40,0x5E4E,0x5E57,0x5E54,0x5E5F, + 0x5E62,0x5E64,0x5E47,0x5E75,0x5E76,0x5E7A,0x9EBC,0x5E7F, + 0x5EA0,0x5EC1,0x5EC2,0x5EC8,0x5ED0,0x5ECF, + + /* ku 55 */ + 0x5ED6,0x5EE3,0x5EDD,0x5EDA,0x5EDB,0x5EE2,0x5EE1,0x5EE8, + 0x5EE9,0x5EEC,0x5EF1,0x5EF3,0x5EF0,0x5EF4,0x5EF8,0x5EFE, + 0x5F03,0x5F09,0x5F5D,0x5F5C,0x5F0B,0x5F11,0x5F16,0x5F29, + 0x5F2D,0x5F38,0x5F41,0x5F48,0x5F4C,0x5F4E,0x5F2F,0x5F51, + 0x5F56,0x5F57,0x5F59,0x5F61,0x5F6D,0x5F73,0x5F77,0x5F83, + 0x5F82,0x5F7F,0x5F8A,0x5F88,0x5F91,0x5F87,0x5F9E,0x5F99, + 0x5F98,0x5FA0,0x5FA8,0x5FAD,0x5FBC,0x5FD6,0x5FFB,0x5FE4, + 0x5FF8,0x5FF1,0x5FDD,0x60B3,0x5FFF,0x6021,0x6060,0x6019, + 0x6010,0x6029,0x600E,0x6031,0x601B,0x6015,0x602B,0x6026, + 0x600F,0x603A,0x605A,0x6041,0x606A,0x6077,0x605F,0x604A, + 0x6046,0x604D,0x6063,0x6043,0x6064,0x6042,0x606C,0x606B, + 0x6059,0x6081,0x608D,0x60E7,0x6083,0x609A, + + /* ku 56 */ + 0x6084,0x609B,0x6096,0x6097,0x6092,0x60A7,0x608B,0x60E1, + 0x60B8,0x60E0,0x60D3,0x60B4,0x5FF0,0x60BD,0x60C6,0x60B5, + 0x60D8,0x614D,0x6115,0x6106,0x60F6,0x60F7,0x6100,0x60F4, + 0x60FA,0x6103,0x6121,0x60FB,0x60F1,0x610D,0x610E,0x6147, + 0x613E,0x6128,0x6127,0x614A,0x613F,0x613C,0x612C,0x6134, + 0x613D,0x6142,0x6144,0x6173,0x6177,0x6158,0x6159,0x615A, + 0x616B,0x6174,0x616F,0x6165,0x6171,0x615F,0x615D,0x6153, + 0x6175,0x6199,0x6196,0x6187,0x61AC,0x6194,0x619A,0x618A, + 0x6191,0x61AB,0x61AE,0x61CC,0x61CA,0x61C9,0x61F7,0x61C8, + 0x61C3,0x61C6,0x61BA,0x61CB,0x7F79,0x61CD,0x61E6,0x61E3, + 0x61F6,0x61FA,0x61F4,0x61FF,0x61FD,0x61FC,0x61FE,0x6200, + 0x6208,0x6209,0x620D,0x620C,0x6214,0x621B, + + /* ku 57 */ + 0x621E,0x6221,0x622A,0x622E,0x6230,0x6232,0x6233,0x6241, + 0x624E,0x625E,0x6263,0x625B,0x6260,0x6268,0x627C,0x6282, + 0x6289,0x627E,0x6292,0x6293,0x6296,0x62D4,0x6283,0x6294, + 0x62D7,0x62D1,0x62BB,0x62CF,0x62FF,0x62C6,0x64D4,0x62C8, + 0x62DC,0x62CC,0x62CA,0x62C2,0x62C7,0x629B,0x62C9,0x630C, + 0x62EE,0x62F1,0x6327,0x6302,0x6308,0x62EF,0x62F5,0x6350, + 0x633E,0x634D,0x641C,0x634F,0x6396,0x638E,0x6380,0x63AB, + 0x6376,0x63A3,0x638F,0x6389,0x639F,0x63B5,0x636B,0x6369, + 0x63BE,0x63E9,0x63C0,0x63C6,0x63E3,0x63C9,0x63D2,0x63F6, + 0x63C4,0x6416,0x6434,0x6406,0x6413,0x6426,0x6436,0x651D, + 0x6417,0x6428,0x640F,0x6467,0x646F,0x6476,0x644E,0x652A, + 0x6495,0x6493,0x64A5,0x64A9,0x6488,0x64BC, + + /* ku 58 */ + 0x64DA,0x64D2,0x64C5,0x64C7,0x64BB,0x64D8,0x64C2,0x64F1, + 0x64E7,0x8209,0x64E0,0x64E1,0x62AC,0x64E3,0x64EF,0x652C, + 0x64F6,0x64F4,0x64F2,0x64FA,0x6500,0x64FD,0x6518,0x651C, + 0x6505,0x6524,0x6523,0x652B,0x6534,0x6535,0x6537,0x6536, + 0x6538,0x754B,0x6548,0x6556,0x6555,0x654D,0x6558,0x655E, + 0x655D,0x6572,0x6578,0x6582,0x6583,0x8B8A,0x659B,0x659F, + 0x65AB,0x65B7,0x65C3,0x65C6,0x65C1,0x65C4,0x65CC,0x65D2, + 0x65DB,0x65D9,0x65E0,0x65E1,0x65F1,0x6772,0x660A,0x6603, + 0x65FB,0x6773,0x6635,0x6636,0x6634,0x661C,0x664F,0x6644, + 0x6649,0x6641,0x665E,0x665D,0x6664,0x6667,0x6668,0x665F, + 0x6662,0x6670,0x6683,0x6688,0x668E,0x6689,0x6684,0x6698, + 0x669D,0x66C1,0x66B9,0x66C9,0x66BE,0x66BC, + + /* ku 59 */ + 0x66C4,0x66B8,0x66D6,0x66DA,0x66E0,0x663F,0x66E6,0x66E9, + 0x66F0,0x66F5,0x66F7,0x670F,0x6716,0x671E,0x6726,0x6727, + 0x9738,0x672E,0x673F,0x6736,0x6741,0x6738,0x6737,0x6746, + 0x675E,0x6760,0x6759,0x6763,0x6764,0x6789,0x6770,0x67A9, + 0x677C,0x676A,0x678C,0x678B,0x67A6,0x67A1,0x6785,0x67B7, + 0x67EF,0x67B4,0x67EC,0x67B3,0x67E9,0x67B8,0x67E4,0x67DE, + 0x67DD,0x67E2,0x67EE,0x67B9,0x67CE,0x67C6,0x67E7,0x6A9C, + 0x681E,0x6846,0x6829,0x6840,0x684D,0x6832,0x684E,0x68B3, + 0x682B,0x6859,0x6863,0x6877,0x687F,0x689F,0x688F,0x68AD, + 0x6894,0x689D,0x689B,0x6883,0x6AAE,0x68B9,0x6874,0x68B5, + 0x68A0,0x68BA,0x690F,0x688D,0x687E,0x6901,0x68CA,0x6908, + 0x68D8,0x6922,0x6926,0x68E1,0x690C,0x68CD, + + /* ku 60 */ + 0x68D4,0x68E7,0x68D5,0x6936,0x6912,0x6904,0x68D7,0x68E3, + 0x6925,0x68F9,0x68E0,0x68EF,0x6928,0x692A,0x691A,0x6923, + 0x6921,0x68C6,0x6979,0x6977,0x695C,0x6978,0x696B,0x6954, + 0x697E,0x696E,0x6939,0x6974,0x693D,0x6959,0x6930,0x6961, + 0x695E,0x695D,0x6981,0x696A,0x69B2,0x69AE,0x69D0,0x69BF, + 0x69C1,0x69D3,0x69BE,0x69CE,0x5BE8,0x69CA,0x69DD,0x69BB, + 0x69C3,0x69A7,0x6A2E,0x6991,0x69A0,0x699C,0x6995,0x69B4, + 0x69DE,0x69E8,0x6A02,0x6A1B,0x69FF,0x6B0A,0x69F9,0x69F2, + 0x69E7,0x6A05,0x69B1,0x6A1E,0x69ED,0x6A14,0x69EB,0x6A0A, + 0x6A12,0x6AC1,0x6A23,0x6A13,0x6A44,0x6A0C,0x6A72,0x6A36, + 0x6A78,0x6A47,0x6A62,0x6A59,0x6A66,0x6A48,0x6A38,0x6A22, + 0x6A90,0x6A8D,0x6AA0,0x6A84,0x6AA2,0x6AA3, + + /* ku 61 */ + 0x6A97,0x8617,0x6ABB,0x6AC3,0x6AC2,0x6AB8,0x6AB3,0x6AAC, + 0x6ADE,0x6AD1,0x6ADF,0x6AAA,0x6ADA,0x6AEA,0x6AFB,0x6B05, + 0x8616,0x6AFA,0x6B12,0x6B16,0x9B31,0x6B1F,0x6B38,0x6B37, + 0x76DC,0x6B39,0x98EE,0x6B47,0x6B43,0x6B49,0x6B50,0x6B59, + 0x6B54,0x6B5B,0x6B5F,0x6B61,0x6B78,0x6B79,0x6B7F,0x6B80, + 0x6B84,0x6B83,0x6B8D,0x6B98,0x6B95,0x6B9E,0x6BA4,0x6BAA, + 0x6BAB,0x6BAF,0x6BB2,0x6BB1,0x6BB3,0x6BB7,0x6BBC,0x6BC6, + 0x6BCB,0x6BD3,0x6BDF,0x6BEC,0x6BEB,0x6BF3,0x6BEF,0x9EBE, + 0x6C08,0x6C13,0x6C14,0x6C1B,0x6C24,0x6C23,0x6C5E,0x6C55, + 0x6C62,0x6C6A,0x6C82,0x6C8D,0x6C9A,0x6C81,0x6C9B,0x6C7E, + 0x6C68,0x6C73,0x6C92,0x6C90,0x6CC4,0x6CF1,0x6CD3,0x6CBD, + 0x6CD7,0x6CC5,0x6CDD,0x6CAE,0x6CB1,0x6CBE, + + /* ku 62 */ + 0x6CBA,0x6CDB,0x6CEF,0x6CD9,0x6CEA,0x6D1F,0x884D,0x6D36, + 0x6D2B,0x6D3D,0x6D38,0x6D19,0x6D35,0x6D33,0x6D12,0x6D0C, + 0x6D63,0x6D93,0x6D64,0x6D5A,0x6D79,0x6D59,0x6D8E,0x6D95, + 0x6FE4,0x6D85,0x6DF9,0x6E15,0x6E0A,0x6DB5,0x6DC7,0x6DE6, + 0x6DB8,0x6DC6,0x6DEC,0x6DDE,0x6DCC,0x6DE8,0x6DD2,0x6DC5, + 0x6DFA,0x6DD9,0x6DE4,0x6DD5,0x6DEA,0x6DEE,0x6E2D,0x6E6E, + 0x6E2E,0x6E19,0x6E72,0x6E5F,0x6E3E,0x6E23,0x6E6B,0x6E2B, + 0x6E76,0x6E4D,0x6E1F,0x6E43,0x6E3A,0x6E4E,0x6E24,0x6EFF, + 0x6E1D,0x6E38,0x6E82,0x6EAA,0x6E98,0x6EC9,0x6EB7,0x6ED3, + 0x6EBD,0x6EAF,0x6EC4,0x6EB2,0x6ED4,0x6ED5,0x6E8F,0x6EA5, + 0x6EC2,0x6E9F,0x6F41,0x6F11,0x704C,0x6EEC,0x6EF8,0x6EFE, + 0x6F3F,0x6EF2,0x6F31,0x6EEF,0x6F32,0x6ECC, + + /* ku 63 */ + 0x6F3E,0x6F13,0x6EF7,0x6F86,0x6F7A,0x6F78,0x6F81,0x6F80, + 0x6F6F,0x6F5B,0x6FF3,0x6F6D,0x6F82,0x6F7C,0x6F58,0x6F8E, + 0x6F91,0x6FC2,0x6F66,0x6FB3,0x6FA3,0x6FA1,0x6FA4,0x6FB9, + 0x6FC6,0x6FAA,0x6FDF,0x6FD5,0x6FEC,0x6FD4,0x6FD8,0x6FF1, + 0x6FEE,0x6FDB,0x7009,0x700B,0x6FFA,0x7011,0x7001,0x700F, + 0x6FFE,0x701B,0x701A,0x6F74,0x701D,0x7018,0x701F,0x7030, + 0x703E,0x7032,0x7051,0x7063,0x7099,0x7092,0x70AF,0x70F1, + 0x70AC,0x70B8,0x70B3,0x70AE,0x70DF,0x70CB,0x70DD,0x70D9, + 0x7109,0x70FD,0x711C,0x7119,0x7165,0x7155,0x7188,0x7166, + 0x7162,0x714C,0x7156,0x716C,0x718F,0x71FB,0x7184,0x7195, + 0x71A8,0x71AC,0x71D7,0x71B9,0x71BE,0x71D2,0x71C9,0x71D4, + 0x71CE,0x71E0,0x71EC,0x71E7,0x71F5,0x71FC, + + /* ku 64 */ + 0x71F9,0x71FF,0x720D,0x7210,0x721B,0x7228,0x722D,0x722C, + 0x7230,0x7232,0x723B,0x723C,0x723F,0x7240,0x7246,0x724B, + 0x7258,0x7274,0x727E,0x7282,0x7281,0x7287,0x7292,0x7296, + 0x72A2,0x72A7,0x72B9,0x72B2,0x72C3,0x72C6,0x72C4,0x72CE, + 0x72D2,0x72E2,0x72E0,0x72E1,0x72F9,0x72F7,0x500F,0x7317, + 0x730A,0x731C,0x7316,0x731D,0x7334,0x732F,0x7329,0x7325, + 0x733E,0x734E,0x734F,0x9ED8,0x7357,0x736A,0x7368,0x7370, + 0x7378,0x7375,0x737B,0x737A,0x73C8,0x73B3,0x73CE,0x73BB, + 0x73C0,0x73E5,0x73EE,0x73DE,0x74A2,0x7405,0x746F,0x7425, + 0x73F8,0x7432,0x743A,0x7455,0x743F,0x745F,0x7459,0x7441, + 0x745C,0x7469,0x7470,0x7463,0x746A,0x7476,0x747E,0x748B, + 0x749E,0x74A7,0x74CA,0x74CF,0x74D4,0x73F1, + + /* ku 65 */ + 0x74E0,0x74E3,0x74E7,0x74E9,0x74EE,0x74F2,0x74F0,0x74F1, + 0x74F8,0x74F7,0x7504,0x7503,0x7505,0x750C,0x750E,0x750D, + 0x7515,0x7513,0x751E,0x7526,0x752C,0x753C,0x7544,0x754D, + 0x754A,0x7549,0x755B,0x7546,0x755A,0x7569,0x7564,0x7567, + 0x756B,0x756D,0x7578,0x7576,0x7586,0x7587,0x7574,0x758A, + 0x7589,0x7582,0x7594,0x759A,0x759D,0x75A5,0x75A3,0x75C2, + 0x75B3,0x75C3,0x75B5,0x75BD,0x75B8,0x75BC,0x75B1,0x75CD, + 0x75CA,0x75D2,0x75D9,0x75E3,0x75DE,0x75FE,0x75FF,0x75FC, + 0x7601,0x75F0,0x75FA,0x75F2,0x75F3,0x760B,0x760D,0x7609, + 0x761F,0x7627,0x7620,0x7621,0x7622,0x7624,0x7634,0x7630, + 0x763B,0x7647,0x7648,0x7646,0x765C,0x7658,0x7661,0x7662, + 0x7668,0x7669,0x766A,0x7667,0x766C,0x7670, + + /* ku 66 */ + 0x7672,0x7676,0x7678,0x767C,0x7680,0x7683,0x7688,0x768B, + 0x768E,0x7696,0x7693,0x7699,0x769A,0x76B0,0x76B4,0x76B8, + 0x76B9,0x76BA,0x76C2,0x76CD,0x76D6,0x76D2,0x76DE,0x76E1, + 0x76E5,0x76E7,0x76EA,0x862F,0x76FB,0x7708,0x7707,0x7704, + 0x7729,0x7724,0x771E,0x7725,0x7726,0x771B,0x7737,0x7738, + 0x7747,0x775A,0x7768,0x776B,0x775B,0x7765,0x777F,0x777E, + 0x7779,0x778E,0x778B,0x7791,0x77A0,0x779E,0x77B0,0x77B6, + 0x77B9,0x77BF,0x77BC,0x77BD,0x77BB,0x77C7,0x77CD,0x77D7, + 0x77DA,0x77DC,0x77E3,0x77EE,0x77FC,0x780C,0x7812,0x7926, + 0x7820,0x792A,0x7845,0x788E,0x7874,0x7886,0x787C,0x789A, + 0x788C,0x78A3,0x78B5,0x78AA,0x78AF,0x78D1,0x78C6,0x78CB, + 0x78D4,0x78BE,0x78BC,0x78C5,0x78CA,0x78EC, + + /* ku 67 */ + 0x78E7,0x78DA,0x78FD,0x78F4,0x7907,0x7912,0x7911,0x7919, + 0x792C,0x792B,0x7940,0x7960,0x7957,0x795F,0x795A,0x7955, + 0x7953,0x797A,0x797F,0x798A,0x799D,0x79A7,0x9F4B,0x79AA, + 0x79AE,0x79B3,0x79B9,0x79BA,0x79C9,0x79D5,0x79E7,0x79EC, + 0x79E1,0x79E3,0x7A08,0x7A0D,0x7A18,0x7A19,0x7A20,0x7A1F, + 0x7980,0x7A31,0x7A3B,0x7A3E,0x7A37,0x7A43,0x7A57,0x7A49, + 0x7A61,0x7A62,0x7A69,0x9F9D,0x7A70,0x7A79,0x7A7D,0x7A88, + 0x7A97,0x7A95,0x7A98,0x7A96,0x7AA9,0x7AC8,0x7AB0,0x7AB6, + 0x7AC5,0x7AC4,0x7ABF,0x9083,0x7AC7,0x7ACA,0x7ACD,0x7ACF, + 0x7AD5,0x7AD3,0x7AD9,0x7ADA,0x7ADD,0x7AE1,0x7AE2,0x7AE6, + 0x7AED,0x7AF0,0x7B02,0x7B0F,0x7B0A,0x7B06,0x7B33,0x7B18, + 0x7B19,0x7B1E,0x7B35,0x7B28,0x7B36,0x7B50, + + /* ku 68 */ + 0x7B7A,0x7B04,0x7B4D,0x7B0B,0x7B4C,0x7B45,0x7B75,0x7B65, + 0x7B74,0x7B67,0x7B70,0x7B71,0x7B6C,0x7B6E,0x7B9D,0x7B98, + 0x7B9F,0x7B8D,0x7B9C,0x7B9A,0x7B8B,0x7B92,0x7B8F,0x7B5D, + 0x7B99,0x7BCB,0x7BC1,0x7BCC,0x7BCF,0x7BB4,0x7BC6,0x7BDD, + 0x7BE9,0x7C11,0x7C14,0x7BE6,0x7BE5,0x7C60,0x7C00,0x7C07, + 0x7C13,0x7BF3,0x7BF7,0x7C17,0x7C0D,0x7BF6,0x7C23,0x7C27, + 0x7C2A,0x7C1F,0x7C37,0x7C2B,0x7C3D,0x7C4C,0x7C43,0x7C54, + 0x7C4F,0x7C40,0x7C50,0x7C58,0x7C5F,0x7C64,0x7C56,0x7C65, + 0x7C6C,0x7C75,0x7C83,0x7C90,0x7CA4,0x7CAD,0x7CA2,0x7CAB, + 0x7CA1,0x7CA8,0x7CB3,0x7CB2,0x7CB1,0x7CAE,0x7CB9,0x7CBD, + 0x7CC0,0x7CC5,0x7CC2,0x7CD8,0x7CD2,0x7CDC,0x7CE2,0x9B3B, + 0x7CEF,0x7CF2,0x7CF4,0x7CF6,0x7CFA,0x7D06, + + /* ku 69 */ + 0x7D02,0x7D1C,0x7D15,0x7D0A,0x7D45,0x7D4B,0x7D2E,0x7D32, + 0x7D3F,0x7D35,0x7D46,0x7D73,0x7D56,0x7D4E,0x7D72,0x7D68, + 0x7D6E,0x7D4F,0x7D63,0x7D93,0x7D89,0x7D5B,0x7D8F,0x7D7D, + 0x7D9B,0x7DBA,0x7DAE,0x7DA3,0x7DB5,0x7DC7,0x7DBD,0x7DAB, + 0x7E3D,0x7DA2,0x7DAF,0x7DDC,0x7DB8,0x7D9F,0x7DB0,0x7DD8, + 0x7DDD,0x7DE4,0x7DDE,0x7DFB,0x7DF2,0x7DE1,0x7E05,0x7E0A, + 0x7E23,0x7E21,0x7E12,0x7E31,0x7E1F,0x7E09,0x7E0B,0x7E22, + 0x7E46,0x7E66,0x7E3B,0x7E35,0x7E39,0x7E43,0x7E37,0x7E32, + 0x7E3A,0x7E67,0x7E5D,0x7E56,0x7E5E,0x7E59,0x7E5A,0x7E79, + 0x7E6A,0x7E69,0x7E7C,0x7E7B,0x7E83,0x7DD5,0x7E7D,0x8FAE, + 0x7E7F,0x7E88,0x7E89,0x7E8C,0x7E92,0x7E90,0x7E93,0x7E94, + 0x7E96,0x7E8E,0x7E9B,0x7E9C,0x7F38,0x7F3A, + + /* ku 70 */ + 0x7F45,0x7F4C,0x7F4D,0x7F4E,0x7F50,0x7F51,0x7F55,0x7F54, + 0x7F58,0x7F5F,0x7F60,0x7F68,0x7F69,0x7F67,0x7F78,0x7F82, + 0x7F86,0x7F83,0x7F88,0x7F87,0x7F8C,0x7F94,0x7F9E,0x7F9D, + 0x7F9A,0x7FA3,0x7FAF,0x7FB2,0x7FB9,0x7FAE,0x7FB6,0x7FB8, + 0x8B71,0x7FC5,0x7FC6,0x7FCA,0x7FD5,0x7FD4,0x7FE1,0x7FE6, + 0x7FE9,0x7FF3,0x7FF9,0x98DC,0x8006,0x8004,0x800B,0x8012, + 0x8018,0x8019,0x801C,0x8021,0x8028,0x803F,0x803B,0x804A, + 0x8046,0x8052,0x8058,0x805A,0x805F,0x8062,0x8068,0x8073, + 0x8072,0x8070,0x8076,0x8079,0x807D,0x807F,0x8084,0x8086, + 0x8085,0x809B,0x8093,0x809A,0x80AD,0x5190,0x80AC,0x80DB, + 0x80E5,0x80D9,0x80DD,0x80C4,0x80DA,0x80D6,0x8109,0x80EF, + 0x80F1,0x811B,0x8129,0x8123,0x812F,0x814B, + + /* ku 71 */ + 0x968B,0x8146,0x813E,0x8153,0x8151,0x80FC,0x8171,0x816E, + 0x8165,0x8166,0x8174,0x8183,0x8188,0x818A,0x8180,0x8182, + 0x81A0,0x8195,0x81A4,0x81A3,0x815F,0x8193,0x81A9,0x81B0, + 0x81B5,0x81BE,0x81B8,0x81BD,0x81C0,0x81C2,0x81BA,0x81C9, + 0x81CD,0x81D1,0x81D9,0x81D8,0x81C8,0x81DA,0x81DF,0x81E0, + 0x81E7,0x81FA,0x81FB,0x81FE,0x8201,0x8202,0x8205,0x8207, + 0x820A,0x820D,0x8210,0x8216,0x8229,0x822B,0x8238,0x8233, + 0x8240,0x8259,0x8258,0x825D,0x825A,0x825F,0x8264,0x8262, + 0x8268,0x826A,0x826B,0x822E,0x8271,0x8277,0x8278,0x827E, + 0x828D,0x8292,0x82AB,0x829F,0x82BB,0x82AC,0x82E1,0x82E3, + 0x82DF,0x82D2,0x82F4,0x82F3,0x82FA,0x8393,0x8303,0x82FB, + 0x82F9,0x82DE,0x8306,0x82DC,0x8309,0x82D9, + + /* ku 72 */ + 0x8335,0x8334,0x8316,0x8332,0x8331,0x8340,0x8339,0x8350, + 0x8345,0x832F,0x832B,0x8317,0x8318,0x8385,0x839A,0x83AA, + 0x839F,0x83A2,0x8396,0x8323,0x838E,0x8387,0x838A,0x837C, + 0x83B5,0x8373,0x8375,0x83A0,0x8389,0x83A8,0x83F4,0x8413, + 0x83EB,0x83CE,0x83FD,0x8403,0x83D8,0x840B,0x83C1,0x83F7, + 0x8407,0x83E0,0x83F2,0x840D,0x8422,0x8420,0x83BD,0x8438, + 0x8506,0x83FB,0x846D,0x842A,0x843C,0x855A,0x8484,0x8477, + 0x846B,0x84AD,0x846E,0x8482,0x8469,0x8446,0x842C,0x846F, + 0x8479,0x8435,0x84CA,0x8462,0x84B9,0x84BF,0x849F,0x84D9, + 0x84CD,0x84BB,0x84DA,0x84D0,0x84C1,0x84C6,0x84D6,0x84A1, + 0x8521,0x84FF,0x84F4,0x8517,0x8518,0x852C,0x851F,0x8515, + 0x8514,0x84FC,0x8540,0x8563,0x8558,0x8548, + + /* ku 73 */ + 0x8541,0x8602,0x854B,0x8555,0x8580,0x85A4,0x8588,0x8591, + 0x858A,0x85A8,0x856D,0x8594,0x859B,0x85EA,0x8587,0x859C, + 0x8577,0x857E,0x8590,0x85C9,0x85BA,0x85CF,0x85B9,0x85D0, + 0x85D5,0x85DD,0x85E5,0x85DC,0x85F9,0x860A,0x8613,0x860B, + 0x85FE,0x85FA,0x8606,0x8622,0x861A,0x8630,0x863F,0x864D, + 0x4E55,0x8654,0x865F,0x8667,0x8671,0x8693,0x86A3,0x86A9, + 0x86AA,0x868B,0x868C,0x86B6,0x86AF,0x86C4,0x86C6,0x86B0, + 0x86C9,0x8823,0x86AB,0x86D4,0x86DE,0x86E9,0x86EC,0x86DF, + 0x86DB,0x86EF,0x8712,0x8706,0x8708,0x8700,0x8703,0x86FB, + 0x8711,0x8709,0x870D,0x86F9,0x870A,0x8734,0x873F,0x8737, + 0x873B,0x8725,0x8729,0x871A,0x8760,0x875F,0x8778,0x874C, + 0x874E,0x8774,0x8757,0x8768,0x876E,0x8759, + + /* ku 74 */ + 0x8753,0x8763,0x876A,0x8805,0x87A2,0x879F,0x8782,0x87AF, + 0x87CB,0x87BD,0x87C0,0x87D0,0x96D6,0x87AB,0x87C4,0x87B3, + 0x87C7,0x87C6,0x87BB,0x87EF,0x87F2,0x87E0,0x880F,0x880D, + 0x87FE,0x87F6,0x87F7,0x880E,0x87D2,0x8811,0x8816,0x8815, + 0x8822,0x8821,0x8831,0x8836,0x8839,0x8827,0x883B,0x8844, + 0x8842,0x8852,0x8859,0x885E,0x8862,0x886B,0x8881,0x887E, + 0x889E,0x8875,0x887D,0x88B5,0x8872,0x8882,0x8897,0x8892, + 0x88AE,0x8899,0x88A2,0x888D,0x88A4,0x88B0,0x88BF,0x88B1, + 0x88C3,0x88C4,0x88D4,0x88D8,0x88D9,0x88DD,0x88F9,0x8902, + 0x88FC,0x88F4,0x88E8,0x88F2,0x8904,0x890C,0x890A,0x8913, + 0x8943,0x891E,0x8925,0x892A,0x892B,0x8941,0x8944,0x893B, + 0x8936,0x8938,0x894C,0x891D,0x8960,0x895E, + + /* ku 75 */ + 0x8966,0x8964,0x896D,0x896A,0x896F,0x8974,0x8977,0x897E, + 0x8983,0x8988,0x898A,0x8993,0x8998,0x89A1,0x89A9,0x89A6, + 0x89AC,0x89AF,0x89B2,0x89BA,0x89BD,0x89BF,0x89C0,0x89DA, + 0x89DC,0x89DD,0x89E7,0x89F4,0x89F8,0x8A03,0x8A16,0x8A10, + 0x8A0C,0x8A1B,0x8A1D,0x8A25,0x8A36,0x8A41,0x8A5B,0x8A52, + 0x8A46,0x8A48,0x8A7C,0x8A6D,0x8A6C,0x8A62,0x8A85,0x8A82, + 0x8A84,0x8AA8,0x8AA1,0x8A91,0x8AA5,0x8AA6,0x8A9A,0x8AA3, + 0x8AC4,0x8ACD,0x8AC2,0x8ADA,0x8AEB,0x8AF3,0x8AE7,0x8AE4, + 0x8AF1,0x8B14,0x8AE0,0x8AE2,0x8AF7,0x8ADE,0x8ADB,0x8B0C, + 0x8B07,0x8B1A,0x8AE1,0x8B16,0x8B10,0x8B17,0x8B20,0x8B33, + 0x97AB,0x8B26,0x8B2B,0x8B3E,0x8B28,0x8B41,0x8B4C,0x8B4F, + 0x8B4E,0x8B49,0x8B56,0x8B5B,0x8B5A,0x8B6B, + + /* ku 76 */ + 0x8B5F,0x8B6C,0x8B6F,0x8B74,0x8B7D,0x8B80,0x8B8C,0x8B8E, + 0x8B92,0x8B93,0x8B96,0x8B99,0x8B9A,0x8C3A,0x8C41,0x8C3F, + 0x8C48,0x8C4C,0x8C4E,0x8C50,0x8C55,0x8C62,0x8C6C,0x8C78, + 0x8C7A,0x8C82,0x8C89,0x8C85,0x8C8A,0x8C8D,0x8C8E,0x8C94, + 0x8C7C,0x8C98,0x621D,0x8CAD,0x8CAA,0x8CBD,0x8CB2,0x8CB3, + 0x8CAE,0x8CB6,0x8CC8,0x8CC1,0x8CE4,0x8CE3,0x8CDA,0x8CFD, + 0x8CFA,0x8CFB,0x8D04,0x8D05,0x8D0A,0x8D07,0x8D0F,0x8D0D, + 0x8D10,0x9F4E,0x8D13,0x8CCD,0x8D14,0x8D16,0x8D67,0x8D6D, + 0x8D71,0x8D73,0x8D81,0x8D99,0x8DC2,0x8DBE,0x8DBA,0x8DCF, + 0x8DDA,0x8DD6,0x8DCC,0x8DDB,0x8DCB,0x8DEA,0x8DEB,0x8DDF, + 0x8DE3,0x8DFC,0x8E08,0x8E09,0x8DFF,0x8E1D,0x8E1E,0x8E10, + 0x8E1F,0x8E42,0x8E35,0x8E30,0x8E34,0x8E4A, + + /* ku 77 */ + 0x8E47,0x8E49,0x8E4C,0x8E50,0x8E48,0x8E59,0x8E64,0x8E60, + 0x8E2A,0x8E63,0x8E55,0x8E76,0x8E72,0x8E7C,0x8E81,0x8E87, + 0x8E85,0x8E84,0x8E8B,0x8E8A,0x8E93,0x8E91,0x8E94,0x8E99, + 0x8EAA,0x8EA1,0x8EAC,0x8EB0,0x8EC6,0x8EB1,0x8EBE,0x8EC5, + 0x8EC8,0x8ECB,0x8EDB,0x8EE3,0x8EFC,0x8EFB,0x8EEB,0x8EFE, + 0x8F0A,0x8F05,0x8F15,0x8F12,0x8F19,0x8F13,0x8F1C,0x8F1F, + 0x8F1B,0x8F0C,0x8F26,0x8F33,0x8F3B,0x8F39,0x8F45,0x8F42, + 0x8F3E,0x8F4C,0x8F49,0x8F46,0x8F4E,0x8F57,0x8F5C,0x8F62, + 0x8F63,0x8F64,0x8F9C,0x8F9F,0x8FA3,0x8FAD,0x8FAF,0x8FB7, + 0x8FDA,0x8FE5,0x8FE2,0x8FEA,0x8FEF,0x9087,0x8FF4,0x9005, + 0x8FF9,0x8FFA,0x9011,0x9015,0x9021,0x900D,0x901E,0x9016, + 0x900B,0x9027,0x9036,0x9035,0x9039,0x8FF8, + + /* ku 78 */ + 0x904F,0x9050,0x9051,0x9052,0x900E,0x9049,0x903E,0x9056, + 0x9058,0x905E,0x9068,0x906F,0x9076,0x96A8,0x9072,0x9082, + 0x907D,0x9081,0x9080,0x908A,0x9089,0x908F,0x90A8,0x90AF, + 0x90B1,0x90B5,0x90E2,0x90E4,0x6248,0x90DB,0x9102,0x9112, + 0x9119,0x9132,0x9130,0x914A,0x9156,0x9158,0x9163,0x9165, + 0x9169,0x9173,0x9172,0x918B,0x9189,0x9182,0x91A2,0x91AB, + 0x91AF,0x91AA,0x91B5,0x91B4,0x91BA,0x91C0,0x91C1,0x91C9, + 0x91CB,0x91D0,0x91D6,0x91DF,0x91E1,0x91DB,0x91FC,0x91F5, + 0x91F6,0x921E,0x91FF,0x9214,0x922C,0x9215,0x9211,0x925E, + 0x9257,0x9245,0x9249,0x9264,0x9248,0x9295,0x923F,0x924B, + 0x9250,0x929C,0x9296,0x9293,0x929B,0x925A,0x92CF,0x92B9, + 0x92B7,0x92E9,0x930F,0x92FA,0x9344,0x932E, + + /* ku 79 */ + 0x9319,0x9322,0x931A,0x9323,0x933A,0x9335,0x933B,0x935C, + 0x9360,0x937C,0x936E,0x9356,0x93B0,0x93AC,0x93AD,0x9394, + 0x93B9,0x93D6,0x93D7,0x93E8,0x93E5,0x93D8,0x93C3,0x93DD, + 0x93D0,0x93C8,0x93E4,0x941A,0x9414,0x9413,0x9403,0x9407, + 0x9410,0x9436,0x942B,0x9435,0x9421,0x943A,0x9441,0x9452, + 0x9444,0x945B,0x9460,0x9462,0x945E,0x946A,0x9229,0x9470, + 0x9475,0x9477,0x947D,0x945A,0x947C,0x947E,0x9481,0x947F, + 0x9582,0x9587,0x958A,0x9594,0x9596,0x9598,0x9599,0x95A0, + 0x95A8,0x95A7,0x95AD,0x95BC,0x95BB,0x95B9,0x95BE,0x95CA, + 0x6FF6,0x95C3,0x95CD,0x95CC,0x95D5,0x95D4,0x95D6,0x95DC, + 0x95E1,0x95E5,0x95E2,0x9621,0x9628,0x962E,0x962F,0x9642, + 0x964C,0x964F,0x964B,0x9677,0x965C,0x965E, + + /* ku 80 */ + 0x965D,0x965F,0x9666,0x9672,0x966C,0x968D,0x9698,0x9695, + 0x9697,0x96AA,0x96A7,0x96B1,0x96B2,0x96B0,0x96B4,0x96B6, + 0x96B8,0x96B9,0x96CE,0x96CB,0x96C9,0x96CD,0x894D,0x96DC, + 0x970D,0x96D5,0x96F9,0x9704,0x9706,0x9708,0x9713,0x970E, + 0x9711,0x970F,0x9716,0x9719,0x9724,0x972A,0x9730,0x9739, + 0x973D,0x973E,0x9744,0x9746,0x9748,0x9742,0x9749,0x975C, + 0x9760,0x9764,0x9766,0x9768,0x52D2,0x976B,0x9771,0x9779, + 0x9785,0x977C,0x9781,0x977A,0x9786,0x978B,0x978F,0x9790, + 0x979C,0x97A8,0x97A6,0x97A3,0x97B3,0x97B4,0x97C3,0x97C6, + 0x97C8,0x97CB,0x97DC,0x97ED,0x9F4F,0x97F2,0x7ADF,0x97F6, + 0x97F5,0x980F,0x980C,0x9838,0x9824,0x9821,0x9837,0x983D, + 0x9846,0x984F,0x984B,0x986B,0x986F,0x9870, + + /* ku 81 */ + 0x9871,0x9874,0x9873,0x98AA,0x98AF,0x98B1,0x98B6,0x98C4, + 0x98C3,0x98C6,0x98E9,0x98EB,0x9903,0x9909,0x9912,0x9914, + 0x9918,0x9921,0x991D,0x991E,0x9924,0x9920,0x992C,0x992E, + 0x993D,0x993E,0x9942,0x9949,0x9945,0x9950,0x994B,0x9951, + 0x9952,0x994C,0x9955,0x9997,0x9998,0x99A5,0x99AD,0x99AE, + 0x99BC,0x99DF,0x99DB,0x99DD,0x99D8,0x99D1,0x99ED,0x99EE, + 0x99F1,0x99F2,0x99FB,0x99F8,0x9A01,0x9A0F,0x9A05,0x99E2, + 0x9A19,0x9A2B,0x9A37,0x9A45,0x9A42,0x9A40,0x9A43,0x9A3E, + 0x9A55,0x9A4D,0x9A5B,0x9A57,0x9A5F,0x9A62,0x9A65,0x9A64, + 0x9A69,0x9A6B,0x9A6A,0x9AAD,0x9AB0,0x9ABC,0x9AC0,0x9ACF, + 0x9AD1,0x9AD3,0x9AD4,0x9ADE,0x9ADF,0x9AE2,0x9AE3,0x9AE6, + 0x9AEF,0x9AEB,0x9AEE,0x9AF4,0x9AF1,0x9AF7, + + /* ku 82 */ + 0x9AFB,0x9B06,0x9B18,0x9B1A,0x9B1F,0x9B22,0x9B23,0x9B25, + 0x9B27,0x9B28,0x9B29,0x9B2A,0x9B2E,0x9B2F,0x9B32,0x9B44, + 0x9B43,0x9B4F,0x9B4D,0x9B4E,0x9B51,0x9B58,0x9B74,0x9B93, + 0x9B83,0x9B91,0x9B96,0x9B97,0x9B9F,0x9BA0,0x9BA8,0x9BB4, + 0x9BC0,0x9BCA,0x9BB9,0x9BC6,0x9BCF,0x9BD1,0x9BD2,0x9BE3, + 0x9BE2,0x9BE4,0x9BD4,0x9BE1,0x9C3A,0x9BF2,0x9BF1,0x9BF0, + 0x9C15,0x9C14,0x9C09,0x9C13,0x9C0C,0x9C06,0x9C08,0x9C12, + 0x9C0A,0x9C04,0x9C2E,0x9C1B,0x9C25,0x9C24,0x9C21,0x9C30, + 0x9C47,0x9C32,0x9C46,0x9C3E,0x9C5A,0x9C60,0x9C67,0x9C76, + 0x9C78,0x9CE7,0x9CEC,0x9CF0,0x9D09,0x9D08,0x9CEB,0x9D03, + 0x9D06,0x9D2A,0x9D26,0x9DAF,0x9D23,0x9D1F,0x9D44,0x9D15, + 0x9D12,0x9D41,0x9D3F,0x9D3E,0x9D46,0x9D48, + + /* ku 83 */ + 0x9D5D,0x9D5E,0x9D64,0x9D51,0x9D50,0x9D59,0x9D72,0x9D89, + 0x9D87,0x9DAB,0x9D6F,0x9D7A,0x9D9A,0x9DA4,0x9DA9,0x9DB2, + 0x9DC4,0x9DC1,0x9DBB,0x9DB8,0x9DBA,0x9DC6,0x9DCF,0x9DC2, + 0x9DD9,0x9DD3,0x9DF8,0x9DE6,0x9DED,0x9DEF,0x9DFD,0x9E1A, + 0x9E1B,0x9E1E,0x9E75,0x9E79,0x9E7D,0x9E81,0x9E88,0x9E8B, + 0x9E8C,0x9E92,0x9E95,0x9E91,0x9E9D,0x9EA5,0x9EA9,0x9EB8, + 0x9EAA,0x9EAD,0x9761,0x9ECC,0x9ECE,0x9ECF,0x9ED0,0x9ED4, + 0x9EDC,0x9EDE,0x9EDD,0x9EE0,0x9EE5,0x9EE8,0x9EEF,0x9EF4, + 0x9EF6,0x9EF7,0x9EF9,0x9EFB,0x9EFC,0x9EFD,0x9F07,0x9F08, + 0x76B7,0x9F15,0x9F21,0x9F2C,0x9F3E,0x9F4A,0x9F52,0x9F54, + 0x9F63,0x9F5F,0x9F60,0x9F61,0x9F66,0x9F67,0x9F6C,0x9F6A, + 0x9F77,0x9F72,0x9F76,0x9F95,0x9F9C,0x9FA0, + + /* ku 84 */ + 0x582F,0x69C7,0x9059,0x7464,0x51DC,0x7199 +}; + +const int jisx0208_ucs_table_size = (sizeof (jisx0208_ucs_table) / sizeof (unsigned short)); + +const unsigned short jisx0212_ucs_table[] = { + /* ku 1 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 2 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x02D8,0x02C7, + 0x00B8,0x02D9,0x02DD,0x00AF,0x02DB,0x02DA,0x007E,0x0384, + 0x0385,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x00A1,0x00A6,0x00BF,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x00BA,0x00AA,0x00A9,0x00AE,0x2122,0x00A4, + 0x2116,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 3 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 4 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 5 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 6 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0386,0x0388,0x0389,0x038A,0x03AA,0x0000,0x038C,0x0000, + 0x038E,0x03AB,0x0000,0x038F,0x0000,0x0000,0x0000,0x0000, + 0x03AC,0x03AD,0x03AE,0x03AF,0x03CA,0x0390,0x03CC,0x03C2, + 0x03CD,0x03CB,0x03B0,0x03CE,0x0000,0x0000, + + /* ku 7 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0402,0x0403,0x0404,0x0405,0x0406,0x0407,0x0408, + 0x0409,0x040A,0x040B,0x040C,0x040E,0x040F,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0452,0x0453,0x0454,0x0455,0x0456,0x0457,0x0458, + 0x0459,0x045A,0x045B,0x045C,0x045E,0x045F, + + /* ku 8 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 9 */ + 0x00C6,0x0110,0x0000,0x0126,0x0000,0x0132,0x0000,0x0141, + 0x013F,0x0000,0x014A,0x00D8,0x0152,0x0000,0x0166,0x00DE, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x00E6,0x0111,0x00F0,0x0127,0x0131,0x0133,0x0138,0x0142, + 0x0140,0x0149,0x014B,0x00F8,0x0153,0x00DF,0x0167,0x00FE, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 10 */ + 0x00C1,0x00C0,0x00C4,0x00C2,0x0102,0x01CD,0x0100,0x0104, + 0x00C5,0x00C3,0x0106,0x0108,0x010C,0x00C7,0x010A,0x010E, + 0x00C9,0x00C8,0x00CB,0x00CA,0x011A,0x0116,0x0112,0x0118, + 0x0000,0x011C,0x011E,0x0122,0x0120,0x0124,0x00CD,0x00CC, + 0x00CF,0x00CE,0x01CF,0x0130,0x012A,0x012E,0x0128,0x0134, + 0x0136,0x0139,0x013D,0x013B,0x0143,0x0147,0x0145,0x00D1, + 0x00D3,0x00D2,0x00D6,0x00D4,0x01D1,0x0150,0x014C,0x00D5, + 0x0154,0x0158,0x0156,0x015A,0x015C,0x0160,0x015E,0x0164, + 0x0162,0x00DA,0x00D9,0x00DC,0x00DB,0x016C,0x01D3,0x0170, + 0x016A,0x0172,0x016E,0x0168,0x01D7,0x01DB,0x01D9,0x01D5, + 0x0174,0x00DD,0x0178,0x0176,0x0179,0x017D,0x017B,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 11 */ + 0x00E1,0x00E0,0x00E4,0x00E2,0x0103,0x01CE,0x0101,0x0105, + 0x00E5,0x00E3,0x0107,0x0109,0x010D,0x00E7,0x010B,0x010F, + 0x00E9,0x00E8,0x00EB,0x00EA,0x011B,0x0117,0x0113,0x0119, + 0x01F5,0x011D,0x011F,0x0000,0x0121,0x0125,0x00ED,0x00EC, + 0x00EF,0x00EE,0x01D0,0x0000,0x012B,0x012F,0x0129,0x0135, + 0x0137,0x013A,0x013E,0x013C,0x0144,0x0148,0x0146,0x00F1, + 0x00F3,0x00F2,0x00F6,0x00F4,0x01D2,0x0151,0x014D,0x00F5, + 0x0155,0x0159,0x0157,0x015B,0x015D,0x0161,0x015F,0x0165, + 0x0163,0x00FA,0x00F9,0x00FC,0x00FB,0x016D,0x01D4,0x0171, + 0x016B,0x0173,0x016F,0x0169,0x01D8,0x01DC,0x01DA,0x01D6, + 0x0175,0x00FD,0x00FF,0x0177,0x017A,0x017E,0x017C,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 12 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 13 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 14 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 15 */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* ku 16 */ + 0x4E02,0x4E04,0x4E05,0x4E0C,0x4E12,0x4E1F,0x4E23,0x4E24, + 0x4E28,0x4E2B,0x4E2E,0x4E2F,0x4E30,0x4E35,0x4E40,0x4E41, + 0x4E44,0x4E47,0x4E51,0x4E5A,0x4E5C,0x4E63,0x4E68,0x4E69, + 0x4E74,0x4E75,0x4E79,0x4E7F,0x4E8D,0x4E96,0x4E97,0x4E9D, + 0x4EAF,0x4EB9,0x4EC3,0x4ED0,0x4EDA,0x4EDB,0x4EE0,0x4EE1, + 0x4EE2,0x4EE8,0x4EEF,0x4EF1,0x4EF3,0x4EF5,0x4EFD,0x4EFE, + 0x4EFF,0x4F00,0x4F02,0x4F03,0x4F08,0x4F0B,0x4F0C,0x4F12, + 0x4F15,0x4F16,0x4F17,0x4F19,0x4F2E,0x4F31,0x4F60,0x4F33, + 0x4F35,0x4F37,0x4F39,0x4F3B,0x4F3E,0x4F40,0x4F42,0x4F48, + 0x4F49,0x4F4B,0x4F4C,0x4F52,0x4F54,0x4F56,0x4F58,0x4F5F, + 0x4F63,0x4F6A,0x4F6C,0x4F6E,0x4F71,0x4F77,0x4F78,0x4F79, + 0x4F7A,0x4F7D,0x4F7E,0x4F81,0x4F82,0x4F84, + + /* ku 17 */ + 0x4F85,0x4F89,0x4F8A,0x4F8C,0x4F8E,0x4F90,0x4F92,0x4F93, + 0x4F94,0x4F97,0x4F99,0x4F9A,0x4F9E,0x4F9F,0x4FB2,0x4FB7, + 0x4FB9,0x4FBB,0x4FBC,0x4FBD,0x4FBE,0x4FC0,0x4FC1,0x4FC5, + 0x4FC6,0x4FC8,0x4FC9,0x4FCB,0x4FCC,0x4FCD,0x4FCF,0x4FD2, + 0x4FDC,0x4FE0,0x4FE2,0x4FF0,0x4FF2,0x4FFC,0x4FFD,0x4FFF, + 0x5000,0x5001,0x5004,0x5007,0x500A,0x500C,0x500E,0x5010, + 0x5013,0x5017,0x5018,0x501B,0x501C,0x501D,0x501E,0x5022, + 0x5027,0x502E,0x5030,0x5032,0x5033,0x5035,0x5040,0x5041, + 0x5042,0x5045,0x5046,0x504A,0x504C,0x504E,0x5051,0x5052, + 0x5053,0x5057,0x5059,0x505F,0x5060,0x5062,0x5063,0x5066, + 0x5067,0x506A,0x506D,0x5070,0x5071,0x503B,0x5081,0x5083, + 0x5084,0x5086,0x508A,0x508E,0x508F,0x5090, + + /* ku 18 */ + 0x5092,0x5093,0x5094,0x5096,0x509B,0x509C,0x509E,0x509F, + 0x50A0,0x50A1,0x50A2,0x50AA,0x50AF,0x50B0,0x50B9,0x50BA, + 0x50BD,0x50C0,0x50C3,0x50C4,0x50C7,0x50CC,0x50CE,0x50D0, + 0x50D3,0x50D4,0x50D8,0x50DC,0x50DD,0x50DF,0x50E2,0x50E4, + 0x50E6,0x50E8,0x50E9,0x50EF,0x50F1,0x50F6,0x50FA,0x50FE, + 0x5103,0x5106,0x5107,0x5108,0x510B,0x510C,0x510D,0x510E, + 0x50F2,0x5110,0x5117,0x5119,0x511B,0x511C,0x511D,0x511E, + 0x5123,0x5127,0x5128,0x512C,0x512D,0x512F,0x5131,0x5133, + 0x5134,0x5135,0x5138,0x5139,0x5142,0x514A,0x514F,0x5153, + 0x5155,0x5157,0x5158,0x515F,0x5164,0x5166,0x517E,0x5183, + 0x5184,0x518B,0x518E,0x5198,0x519D,0x51A1,0x51A3,0x51AD, + 0x51B8,0x51BA,0x51BC,0x51BE,0x51BF,0x51C2, + + /* ku 19 */ + 0x51C8,0x51CF,0x51D1,0x51D2,0x51D3,0x51D5,0x51D8,0x51DE, + 0x51E2,0x51E5,0x51EE,0x51F2,0x51F3,0x51F4,0x51F7,0x5201, + 0x5202,0x5205,0x5212,0x5213,0x5215,0x5216,0x5218,0x5222, + 0x5228,0x5231,0x5232,0x5235,0x523C,0x5245,0x5249,0x5255, + 0x5257,0x5258,0x525A,0x525C,0x525F,0x5260,0x5261,0x5266, + 0x526E,0x5277,0x5278,0x5279,0x5280,0x5282,0x5285,0x528A, + 0x528C,0x5293,0x5295,0x5296,0x5297,0x5298,0x529A,0x529C, + 0x52A4,0x52A5,0x52A6,0x52A7,0x52AF,0x52B0,0x52B6,0x52B7, + 0x52B8,0x52BA,0x52BB,0x52BD,0x52C0,0x52C4,0x52C6,0x52C8, + 0x52CC,0x52CF,0x52D1,0x52D4,0x52D6,0x52DB,0x52DC,0x52E1, + 0x52E5,0x52E8,0x52E9,0x52EA,0x52EC,0x52F0,0x52F1,0x52F4, + 0x52F6,0x52F7,0x5300,0x5303,0x530A,0x530B, + + /* ku 20 */ + 0x530C,0x5311,0x5313,0x5318,0x531B,0x531C,0x531E,0x531F, + 0x5325,0x5327,0x5328,0x5329,0x532B,0x532C,0x532D,0x5330, + 0x5332,0x5335,0x533C,0x533D,0x533E,0x5342,0x534C,0x534B, + 0x5359,0x535B,0x5361,0x5363,0x5365,0x536C,0x536D,0x5372, + 0x5379,0x537E,0x5383,0x5387,0x5388,0x538E,0x5393,0x5394, + 0x5399,0x539D,0x53A1,0x53A4,0x53AA,0x53AB,0x53AF,0x53B2, + 0x53B4,0x53B5,0x53B7,0x53B8,0x53BA,0x53BD,0x53C0,0x53C5, + 0x53CF,0x53D2,0x53D3,0x53D5,0x53DA,0x53DD,0x53DE,0x53E0, + 0x53E6,0x53E7,0x53F5,0x5402,0x5413,0x541A,0x5421,0x5427, + 0x5428,0x542A,0x542F,0x5431,0x5434,0x5435,0x5443,0x5444, + 0x5447,0x544D,0x544F,0x545E,0x5462,0x5464,0x5466,0x5467, + 0x5469,0x546B,0x546D,0x546E,0x5474,0x547F, + + /* ku 21 */ + 0x5481,0x5483,0x5485,0x5488,0x5489,0x548D,0x5491,0x5495, + 0x5496,0x549C,0x549F,0x54A1,0x54A6,0x54A7,0x54A9,0x54AA, + 0x54AD,0x54AE,0x54B1,0x54B7,0x54B9,0x54BA,0x54BB,0x54BF, + 0x54C6,0x54CA,0x54CD,0x54CE,0x54E0,0x54EA,0x54EC,0x54EF, + 0x54F6,0x54FC,0x54FE,0x54FF,0x5500,0x5501,0x5505,0x5508, + 0x5509,0x550C,0x550D,0x550E,0x5515,0x552A,0x552B,0x5532, + 0x5535,0x5536,0x553B,0x553C,0x553D,0x5541,0x5547,0x5549, + 0x554A,0x554D,0x5550,0x5551,0x5558,0x555A,0x555B,0x555E, + 0x5560,0x5561,0x5564,0x5566,0x557F,0x5581,0x5582,0x5586, + 0x5588,0x558E,0x558F,0x5591,0x5592,0x5593,0x5594,0x5597, + 0x55A3,0x55A4,0x55AD,0x55B2,0x55BF,0x55C1,0x55C3,0x55C6, + 0x55C9,0x55CB,0x55CC,0x55CE,0x55D1,0x55D2, + + /* ku 22 */ + 0x55D3,0x55D7,0x55D8,0x55DB,0x55DE,0x55E2,0x55E9,0x55F6, + 0x55FF,0x5605,0x5608,0x560A,0x560D,0x560E,0x560F,0x5610, + 0x5611,0x5612,0x5619,0x562C,0x5630,0x5633,0x5635,0x5637, + 0x5639,0x563B,0x563C,0x563D,0x563F,0x5640,0x5641,0x5643, + 0x5644,0x5646,0x5649,0x564B,0x564D,0x564F,0x5654,0x565E, + 0x5660,0x5661,0x5662,0x5663,0x5666,0x5669,0x566D,0x566F, + 0x5671,0x5672,0x5675,0x5684,0x5685,0x5688,0x568B,0x568C, + 0x5695,0x5699,0x569A,0x569D,0x569E,0x569F,0x56A6,0x56A7, + 0x56A8,0x56A9,0x56AB,0x56AC,0x56AD,0x56B1,0x56B3,0x56B7, + 0x56BE,0x56C5,0x56C9,0x56CA,0x56CB,0x56CF,0x56D0,0x56CC, + 0x56CD,0x56D9,0x56DC,0x56DD,0x56DF,0x56E1,0x56E4,0x56E5, + 0x56E6,0x56E7,0x56E8,0x56F1,0x56EB,0x56ED, + + /* ku 23 */ + 0x56F6,0x56F7,0x5701,0x5702,0x5707,0x570A,0x570C,0x5711, + 0x5715,0x571A,0x571B,0x571D,0x5720,0x5722,0x5723,0x5724, + 0x5725,0x5729,0x572A,0x572C,0x572E,0x572F,0x5733,0x5734, + 0x573D,0x573E,0x573F,0x5745,0x5746,0x574C,0x574D,0x5752, + 0x5762,0x5765,0x5767,0x5768,0x576B,0x576D,0x576E,0x576F, + 0x5770,0x5771,0x5773,0x5774,0x5775,0x5777,0x5779,0x577A, + 0x577B,0x577C,0x577E,0x5781,0x5783,0x578C,0x5794,0x5797, + 0x5799,0x579A,0x579C,0x579D,0x579E,0x579F,0x57A1,0x5795, + 0x57A7,0x57A8,0x57A9,0x57AC,0x57B8,0x57BD,0x57C7,0x57C8, + 0x57CC,0x57CF,0x57D5,0x57DD,0x57DE,0x57E4,0x57E6,0x57E7, + 0x57E9,0x57ED,0x57F0,0x57F5,0x57F6,0x57F8,0x57FD,0x57FE, + 0x57FF,0x5803,0x5804,0x5808,0x5809,0x57E1, + + /* ku 24 */ + 0x580C,0x580D,0x581B,0x581E,0x581F,0x5820,0x5826,0x5827, + 0x582D,0x5832,0x5839,0x583F,0x5849,0x584C,0x584D,0x584F, + 0x5850,0x5855,0x585F,0x5861,0x5864,0x5867,0x5868,0x5878, + 0x587C,0x587F,0x5880,0x5881,0x5887,0x5888,0x5889,0x588A, + 0x588C,0x588D,0x588F,0x5890,0x5894,0x5896,0x589D,0x58A0, + 0x58A1,0x58A2,0x58A6,0x58A9,0x58B1,0x58B2,0x58C4,0x58BC, + 0x58C2,0x58C8,0x58CD,0x58CE,0x58D0,0x58D2,0x58D4,0x58D6, + 0x58DA,0x58DD,0x58E1,0x58E2,0x58E9,0x58F3,0x5905,0x5906, + 0x590B,0x590C,0x5912,0x5913,0x5914,0x8641,0x591D,0x5921, + 0x5923,0x5924,0x5928,0x592F,0x5930,0x5933,0x5935,0x5936, + 0x593F,0x5943,0x5946,0x5952,0x5953,0x5959,0x595B,0x595D, + 0x595E,0x595F,0x5961,0x5963,0x596B,0x596D, + + /* ku 25 */ + 0x596F,0x5972,0x5975,0x5976,0x5979,0x597B,0x597C,0x598B, + 0x598C,0x598E,0x5992,0x5995,0x5997,0x599F,0x59A4,0x59A7, + 0x59AD,0x59AE,0x59AF,0x59B0,0x59B3,0x59B7,0x59BA,0x59BC, + 0x59C1,0x59C3,0x59C4,0x59C8,0x59CA,0x59CD,0x59D2,0x59DD, + 0x59DE,0x59DF,0x59E3,0x59E4,0x59E7,0x59EE,0x59EF,0x59F1, + 0x59F2,0x59F4,0x59F7,0x5A00,0x5A04,0x5A0C,0x5A0D,0x5A0E, + 0x5A12,0x5A13,0x5A1E,0x5A23,0x5A24,0x5A27,0x5A28,0x5A2A, + 0x5A2D,0x5A30,0x5A44,0x5A45,0x5A47,0x5A48,0x5A4C,0x5A50, + 0x5A55,0x5A5E,0x5A63,0x5A65,0x5A67,0x5A6D,0x5A77,0x5A7A, + 0x5A7B,0x5A7E,0x5A8B,0x5A90,0x5A93,0x5A96,0x5A99,0x5A9C, + 0x5A9E,0x5A9F,0x5AA0,0x5AA2,0x5AA7,0x5AAC,0x5AB1,0x5AB2, + 0x5AB3,0x5AB5,0x5AB8,0x5ABA,0x5ABB,0x5ABF, + + /* ku 26 */ + 0x5AC4,0x5AC6,0x5AC8,0x5ACF,0x5ADA,0x5ADC,0x5AE0,0x5AE5, + 0x5AEA,0x5AEE,0x5AF5,0x5AF6,0x5AFD,0x5B00,0x5B01,0x5B08, + 0x5B17,0x5B34,0x5B19,0x5B1B,0x5B1D,0x5B21,0x5B25,0x5B2D, + 0x5B38,0x5B41,0x5B4B,0x5B4C,0x5B52,0x5B56,0x5B5E,0x5B68, + 0x5B6E,0x5B6F,0x5B7C,0x5B7D,0x5B7E,0x5B7F,0x5B81,0x5B84, + 0x5B86,0x5B8A,0x5B8E,0x5B90,0x5B91,0x5B93,0x5B94,0x5B96, + 0x5BA8,0x5BA9,0x5BAC,0x5BAD,0x5BAF,0x5BB1,0x5BB2,0x5BB7, + 0x5BBA,0x5BBC,0x5BC0,0x5BC1,0x5BCD,0x5BCF,0x5BD6,0x5BD7, + 0x5BD8,0x5BD9,0x5BDA,0x5BE0,0x5BEF,0x5BF1,0x5BF4,0x5BFD, + 0x5C0C,0x5C17,0x5C1E,0x5C1F,0x5C23,0x5C26,0x5C29,0x5C2B, + 0x5C2C,0x5C2E,0x5C30,0x5C32,0x5C35,0x5C36,0x5C59,0x5C5A, + 0x5C5C,0x5C62,0x5C63,0x5C67,0x5C68,0x5C69, + + /* ku 27 */ + 0x5C6D,0x5C70,0x5C74,0x5C75,0x5C7A,0x5C7B,0x5C7C,0x5C7D, + 0x5C87,0x5C88,0x5C8A,0x5C8F,0x5C92,0x5C9D,0x5C9F,0x5CA0, + 0x5CA2,0x5CA3,0x5CA6,0x5CAA,0x5CB2,0x5CB4,0x5CB5,0x5CBA, + 0x5CC9,0x5CCB,0x5CD2,0x5CDD,0x5CD7,0x5CEE,0x5CF1,0x5CF2, + 0x5CF4,0x5D01,0x5D06,0x5D0D,0x5D12,0x5D2B,0x5D23,0x5D24, + 0x5D26,0x5D27,0x5D31,0x5D34,0x5D39,0x5D3D,0x5D3F,0x5D42, + 0x5D43,0x5D46,0x5D48,0x5D55,0x5D51,0x5D59,0x5D4A,0x5D5F, + 0x5D60,0x5D61,0x5D62,0x5D64,0x5D6A,0x5D6D,0x5D70,0x5D79, + 0x5D7A,0x5D7E,0x5D7F,0x5D81,0x5D83,0x5D88,0x5D8A,0x5D92, + 0x5D93,0x5D94,0x5D95,0x5D99,0x5D9B,0x5D9F,0x5DA0,0x5DA7, + 0x5DAB,0x5DB0,0x5DB4,0x5DB8,0x5DB9,0x5DC3,0x5DC7,0x5DCB, + 0x5DD0,0x5DCE,0x5DD8,0x5DD9,0x5DE0,0x5DE4, + + /* ku 28 */ + 0x5DE9,0x5DF8,0x5DF9,0x5E00,0x5E07,0x5E0D,0x5E12,0x5E14, + 0x5E15,0x5E18,0x5E1F,0x5E20,0x5E2E,0x5E28,0x5E32,0x5E35, + 0x5E3E,0x5E4B,0x5E50,0x5E49,0x5E51,0x5E56,0x5E58,0x5E5B, + 0x5E5C,0x5E5E,0x5E68,0x5E6A,0x5E6B,0x5E6C,0x5E6D,0x5E6E, + 0x5E70,0x5E80,0x5E8B,0x5E8E,0x5EA2,0x5EA4,0x5EA5,0x5EA8, + 0x5EAA,0x5EAC,0x5EB1,0x5EB3,0x5EBD,0x5EBE,0x5EBF,0x5EC6, + 0x5ECC,0x5ECB,0x5ECE,0x5ED1,0x5ED2,0x5ED4,0x5ED5,0x5EDC, + 0x5EDE,0x5EE5,0x5EEB,0x5F02,0x5F06,0x5F07,0x5F08,0x5F0E, + 0x5F19,0x5F1C,0x5F1D,0x5F21,0x5F22,0x5F23,0x5F24,0x5F28, + 0x5F2B,0x5F2C,0x5F2E,0x5F30,0x5F34,0x5F36,0x5F3B,0x5F3D, + 0x5F3F,0x5F40,0x5F44,0x5F45,0x5F47,0x5F4D,0x5F50,0x5F54, + 0x5F58,0x5F5B,0x5F60,0x5F63,0x5F64,0x5F67, + + /* ku 29 */ + 0x5F6F,0x5F72,0x5F74,0x5F75,0x5F78,0x5F7A,0x5F7D,0x5F7E, + 0x5F89,0x5F8D,0x5F8F,0x5F96,0x5F9C,0x5F9D,0x5FA2,0x5FA7, + 0x5FAB,0x5FA4,0x5FAC,0x5FAF,0x5FB0,0x5FB1,0x5FB8,0x5FC4, + 0x5FC7,0x5FC8,0x5FC9,0x5FCB,0x5FD0,0x5FD1,0x5FD2,0x5FD3, + 0x5FD4,0x5FDE,0x5FE1,0x5FE2,0x5FE8,0x5FE9,0x5FEA,0x5FEC, + 0x5FED,0x5FEE,0x5FEF,0x5FF2,0x5FF3,0x5FF6,0x5FFA,0x5FFC, + 0x6007,0x600A,0x600D,0x6013,0x6014,0x6017,0x6018,0x601A, + 0x601F,0x6024,0x602D,0x6033,0x6035,0x6040,0x6047,0x6048, + 0x6049,0x604C,0x6051,0x6054,0x6056,0x6057,0x605D,0x6061, + 0x6067,0x6071,0x607E,0x607F,0x6082,0x6086,0x6088,0x608A, + 0x608E,0x6091,0x6093,0x6095,0x6098,0x609D,0x609E,0x60A2, + 0x60A4,0x60A5,0x60A8,0x60B0,0x60B1,0x60B7, + + /* ku 30 */ + 0x60BB,0x60BE,0x60C2,0x60C4,0x60C8,0x60C9,0x60CA,0x60CB, + 0x60CE,0x60CF,0x60D4,0x60D5,0x60D9,0x60DB,0x60DD,0x60DE, + 0x60E2,0x60E5,0x60F2,0x60F5,0x60F8,0x60FC,0x60FD,0x6102, + 0x6107,0x610A,0x610C,0x6110,0x6111,0x6112,0x6113,0x6114, + 0x6116,0x6117,0x6119,0x611C,0x611E,0x6122,0x612A,0x612B, + 0x6130,0x6131,0x6135,0x6136,0x6137,0x6139,0x6141,0x6145, + 0x6146,0x6149,0x615E,0x6160,0x616C,0x6172,0x6178,0x617B, + 0x617C,0x617F,0x6180,0x6181,0x6183,0x6184,0x618B,0x618D, + 0x6192,0x6193,0x6197,0x6198,0x619C,0x619D,0x619F,0x61A0, + 0x61A5,0x61A8,0x61AA,0x61AD,0x61B8,0x61B9,0x61BC,0x61C0, + 0x61C1,0x61C2,0x61CE,0x61CF,0x61D5,0x61DC,0x61DD,0x61DE, + 0x61DF,0x61E1,0x61E2,0x61E7,0x61E9,0x61E5, + + /* ku 31 */ + 0x61EC,0x61ED,0x61EF,0x6201,0x6203,0x6204,0x6207,0x6213, + 0x6215,0x621C,0x6220,0x6222,0x6223,0x6227,0x6229,0x622B, + 0x6239,0x623D,0x6242,0x6243,0x6244,0x6246,0x624C,0x6250, + 0x6251,0x6252,0x6254,0x6256,0x625A,0x625C,0x6264,0x626D, + 0x626F,0x6273,0x627A,0x627D,0x628D,0x628E,0x628F,0x6290, + 0x62A6,0x62A8,0x62B3,0x62B6,0x62B7,0x62BA,0x62BE,0x62BF, + 0x62C4,0x62CE,0x62D5,0x62D6,0x62DA,0x62EA,0x62F2,0x62F4, + 0x62FC,0x62FD,0x6303,0x6304,0x630A,0x630B,0x630D,0x6310, + 0x6313,0x6316,0x6318,0x6329,0x632A,0x632D,0x6335,0x6336, + 0x6339,0x633C,0x6341,0x6342,0x6343,0x6344,0x6346,0x634A, + 0x634B,0x634E,0x6352,0x6353,0x6354,0x6358,0x635B,0x6365, + 0x6366,0x636C,0x636D,0x6371,0x6374,0x6375, + + /* ku 32 */ + 0x6378,0x637C,0x637D,0x637F,0x6382,0x6384,0x6387,0x638A, + 0x6390,0x6394,0x6395,0x6399,0x639A,0x639E,0x63A4,0x63A6, + 0x63AD,0x63AE,0x63AF,0x63BD,0x63C1,0x63C5,0x63C8,0x63CE, + 0x63D1,0x63D3,0x63D4,0x63D5,0x63DC,0x63E0,0x63E5,0x63EA, + 0x63EC,0x63F2,0x63F3,0x63F5,0x63F8,0x63F9,0x6409,0x640A, + 0x6410,0x6412,0x6414,0x6418,0x641E,0x6420,0x6422,0x6424, + 0x6425,0x6429,0x642A,0x642F,0x6430,0x6435,0x643D,0x643F, + 0x644B,0x644F,0x6451,0x6452,0x6453,0x6454,0x645A,0x645B, + 0x645C,0x645D,0x645F,0x6460,0x6461,0x6463,0x646D,0x6473, + 0x6474,0x647B,0x647D,0x6485,0x6487,0x648F,0x6490,0x6491, + 0x6498,0x6499,0x649B,0x649D,0x649F,0x64A1,0x64A3,0x64A6, + 0x64A8,0x64AC,0x64B3,0x64BD,0x64BE,0x64BF, + + /* ku 33 */ + 0x64C4,0x64C9,0x64CA,0x64CB,0x64CC,0x64CE,0x64D0,0x64D1, + 0x64D5,0x64D7,0x64E4,0x64E5,0x64E9,0x64EA,0x64ED,0x64F0, + 0x64F5,0x64F7,0x64FB,0x64FF,0x6501,0x6504,0x6508,0x6509, + 0x650A,0x650F,0x6513,0x6514,0x6516,0x6519,0x651B,0x651E, + 0x651F,0x6522,0x6526,0x6529,0x652E,0x6531,0x653A,0x653C, + 0x653D,0x6543,0x6547,0x6549,0x6550,0x6552,0x6554,0x655F, + 0x6560,0x6567,0x656B,0x657A,0x657D,0x6581,0x6585,0x658A, + 0x6592,0x6595,0x6598,0x659D,0x65A0,0x65A3,0x65A6,0x65AE, + 0x65B2,0x65B3,0x65B4,0x65BF,0x65C2,0x65C8,0x65C9,0x65CE, + 0x65D0,0x65D4,0x65D6,0x65D8,0x65DF,0x65F0,0x65F2,0x65F4, + 0x65F5,0x65F9,0x65FE,0x65FF,0x6600,0x6604,0x6608,0x6609, + 0x660D,0x6611,0x6612,0x6615,0x6616,0x661D, + + /* ku 34 */ + 0x661E,0x6621,0x6622,0x6623,0x6624,0x6626,0x6629,0x662A, + 0x662B,0x662C,0x662E,0x6630,0x6631,0x6633,0x6639,0x6637, + 0x6640,0x6645,0x6646,0x664A,0x664C,0x6651,0x664E,0x6657, + 0x6658,0x6659,0x665B,0x665C,0x6660,0x6661,0x66FB,0x666A, + 0x666B,0x666C,0x667E,0x6673,0x6675,0x667F,0x6677,0x6678, + 0x6679,0x667B,0x6680,0x667C,0x668B,0x668C,0x668D,0x6690, + 0x6692,0x6699,0x669A,0x669B,0x669C,0x669F,0x66A0,0x66A4, + 0x66AD,0x66B1,0x66B2,0x66B5,0x66BB,0x66BF,0x66C0,0x66C2, + 0x66C3,0x66C8,0x66CC,0x66CE,0x66CF,0x66D4,0x66DB,0x66DF, + 0x66E8,0x66EB,0x66EC,0x66EE,0x66FA,0x6705,0x6707,0x670E, + 0x6713,0x6719,0x671C,0x6720,0x6722,0x6733,0x673E,0x6745, + 0x6747,0x6748,0x674C,0x6754,0x6755,0x675D, + + /* ku 35 */ + 0x6766,0x676C,0x676E,0x6774,0x6776,0x677B,0x6781,0x6784, + 0x678E,0x678F,0x6791,0x6793,0x6796,0x6798,0x6799,0x679B, + 0x67B0,0x67B1,0x67B2,0x67B5,0x67BB,0x67BC,0x67BD,0x67F9, + 0x67C0,0x67C2,0x67C3,0x67C5,0x67C8,0x67C9,0x67D2,0x67D7, + 0x67D9,0x67DC,0x67E1,0x67E6,0x67F0,0x67F2,0x67F6,0x67F7, + 0x6852,0x6814,0x6819,0x681D,0x681F,0x6828,0x6827,0x682C, + 0x682D,0x682F,0x6830,0x6831,0x6833,0x683B,0x683F,0x6844, + 0x6845,0x684A,0x684C,0x6855,0x6857,0x6858,0x685B,0x686B, + 0x686E,0x686F,0x6870,0x6871,0x6872,0x6875,0x6879,0x687A, + 0x687B,0x687C,0x6882,0x6884,0x6886,0x6888,0x6896,0x6898, + 0x689A,0x689C,0x68A1,0x68A3,0x68A5,0x68A9,0x68AA,0x68AE, + 0x68B2,0x68BB,0x68C5,0x68C8,0x68CC,0x68CF, + + /* ku 36 */ + 0x68D0,0x68D1,0x68D3,0x68D6,0x68D9,0x68DC,0x68DD,0x68E5, + 0x68E8,0x68EA,0x68EB,0x68EC,0x68ED,0x68F0,0x68F1,0x68F5, + 0x68F6,0x68FB,0x68FC,0x68FD,0x6906,0x6909,0x690A,0x6910, + 0x6911,0x6913,0x6916,0x6917,0x6931,0x6933,0x6935,0x6938, + 0x693B,0x6942,0x6945,0x6949,0x694E,0x6957,0x695B,0x6963, + 0x6964,0x6965,0x6966,0x6968,0x6969,0x696C,0x6970,0x6971, + 0x6972,0x697A,0x697B,0x697F,0x6980,0x698D,0x6992,0x6996, + 0x6998,0x69A1,0x69A5,0x69A6,0x69A8,0x69AB,0x69AD,0x69AF, + 0x69B7,0x69B8,0x69BA,0x69BC,0x69C5,0x69C8,0x69D1,0x69D6, + 0x69D7,0x69E2,0x69E5,0x69EE,0x69EF,0x69F1,0x69F3,0x69F5, + 0x69FE,0x6A00,0x6A01,0x6A03,0x6A0F,0x6A11,0x6A15,0x6A1A, + 0x6A1D,0x6A20,0x6A24,0x6A28,0x6A30,0x6A32, + + /* ku 37 */ + 0x6A34,0x6A37,0x6A3B,0x6A3E,0x6A3F,0x6A45,0x6A46,0x6A49, + 0x6A4A,0x6A4E,0x6A50,0x6A51,0x6A52,0x6A55,0x6A56,0x6A5B, + 0x6A64,0x6A67,0x6A6A,0x6A71,0x6A73,0x6A7E,0x6A81,0x6A83, + 0x6A86,0x6A87,0x6A89,0x6A8B,0x6A91,0x6A9B,0x6A9D,0x6A9E, + 0x6A9F,0x6AA5,0x6AAB,0x6AAF,0x6AB0,0x6AB1,0x6AB4,0x6ABD, + 0x6ABE,0x6ABF,0x6AC6,0x6AC9,0x6AC8,0x6ACC,0x6AD0,0x6AD4, + 0x6AD5,0x6AD6,0x6ADC,0x6ADD,0x6AE4,0x6AE7,0x6AEC,0x6AF0, + 0x6AF1,0x6AF2,0x6AFC,0x6AFD,0x6B02,0x6B03,0x6B06,0x6B07, + 0x6B09,0x6B0F,0x6B10,0x6B11,0x6B17,0x6B1B,0x6B1E,0x6B24, + 0x6B28,0x6B2B,0x6B2C,0x6B2F,0x6B35,0x6B36,0x6B3B,0x6B3F, + 0x6B46,0x6B4A,0x6B4D,0x6B52,0x6B56,0x6B58,0x6B5D,0x6B60, + 0x6B67,0x6B6B,0x6B6E,0x6B70,0x6B75,0x6B7D, + + /* ku 38 */ + 0x6B7E,0x6B82,0x6B85,0x6B97,0x6B9B,0x6B9F,0x6BA0,0x6BA2, + 0x6BA3,0x6BA8,0x6BA9,0x6BAC,0x6BAD,0x6BAE,0x6BB0,0x6BB8, + 0x6BB9,0x6BBD,0x6BBE,0x6BC3,0x6BC4,0x6BC9,0x6BCC,0x6BD6, + 0x6BDA,0x6BE1,0x6BE3,0x6BE6,0x6BE7,0x6BEE,0x6BF1,0x6BF7, + 0x6BF9,0x6BFF,0x6C02,0x6C04,0x6C05,0x6C09,0x6C0D,0x6C0E, + 0x6C10,0x6C12,0x6C19,0x6C1F,0x6C26,0x6C27,0x6C28,0x6C2C, + 0x6C2E,0x6C33,0x6C35,0x6C36,0x6C3A,0x6C3B,0x6C3F,0x6C4A, + 0x6C4B,0x6C4D,0x6C4F,0x6C52,0x6C54,0x6C59,0x6C5B,0x6C5C, + 0x6C6B,0x6C6D,0x6C6F,0x6C74,0x6C76,0x6C78,0x6C79,0x6C7B, + 0x6C85,0x6C86,0x6C87,0x6C89,0x6C94,0x6C95,0x6C97,0x6C98, + 0x6C9C,0x6C9F,0x6CB0,0x6CB2,0x6CB4,0x6CC2,0x6CC6,0x6CCD, + 0x6CCF,0x6CD0,0x6CD1,0x6CD2,0x6CD4,0x6CD6, + + /* ku 39 */ + 0x6CDA,0x6CDC,0x6CE0,0x6CE7,0x6CE9,0x6CEB,0x6CEC,0x6CEE, + 0x6CF2,0x6CF4,0x6D04,0x6D07,0x6D0A,0x6D0E,0x6D0F,0x6D11, + 0x6D13,0x6D1A,0x6D26,0x6D27,0x6D28,0x6C67,0x6D2E,0x6D2F, + 0x6D31,0x6D39,0x6D3C,0x6D3F,0x6D57,0x6D5E,0x6D5F,0x6D61, + 0x6D65,0x6D67,0x6D6F,0x6D70,0x6D7C,0x6D82,0x6D87,0x6D91, + 0x6D92,0x6D94,0x6D96,0x6D97,0x6D98,0x6DAA,0x6DAC,0x6DB4, + 0x6DB7,0x6DB9,0x6DBD,0x6DBF,0x6DC4,0x6DC8,0x6DCA,0x6DCE, + 0x6DCF,0x6DD6,0x6DDB,0x6DDD,0x6DDF,0x6DE0,0x6DE2,0x6DE5, + 0x6DE9,0x6DEF,0x6DF0,0x6DF4,0x6DF6,0x6DFC,0x6E00,0x6E04, + 0x6E1E,0x6E22,0x6E27,0x6E32,0x6E36,0x6E39,0x6E3B,0x6E3C, + 0x6E44,0x6E45,0x6E48,0x6E49,0x6E4B,0x6E4F,0x6E51,0x6E52, + 0x6E53,0x6E54,0x6E57,0x6E5C,0x6E5D,0x6E5E, + + /* ku 40 */ + 0x6E62,0x6E63,0x6E68,0x6E73,0x6E7B,0x6E7D,0x6E8D,0x6E93, + 0x6E99,0x6EA0,0x6EA7,0x6EAD,0x6EAE,0x6EB1,0x6EB3,0x6EBB, + 0x6EBF,0x6EC0,0x6EC1,0x6EC3,0x6EC7,0x6EC8,0x6ECA,0x6ECD, + 0x6ECE,0x6ECF,0x6EEB,0x6EED,0x6EEE,0x6EF9,0x6EFB,0x6EFD, + 0x6F04,0x6F08,0x6F0A,0x6F0C,0x6F0D,0x6F16,0x6F18,0x6F1A, + 0x6F1B,0x6F26,0x6F29,0x6F2A,0x6F2F,0x6F30,0x6F33,0x6F36, + 0x6F3B,0x6F3C,0x6F2D,0x6F4F,0x6F51,0x6F52,0x6F53,0x6F57, + 0x6F59,0x6F5A,0x6F5D,0x6F5E,0x6F61,0x6F62,0x6F68,0x6F6C, + 0x6F7D,0x6F7E,0x6F83,0x6F87,0x6F88,0x6F8B,0x6F8C,0x6F8D, + 0x6F90,0x6F92,0x6F93,0x6F94,0x6F96,0x6F9A,0x6F9F,0x6FA0, + 0x6FA5,0x6FA6,0x6FA7,0x6FA8,0x6FAE,0x6FAF,0x6FB0,0x6FB5, + 0x6FB6,0x6FBC,0x6FC5,0x6FC7,0x6FC8,0x6FCA, + + /* ku 41 */ + 0x6FDA,0x6FDE,0x6FE8,0x6FE9,0x6FF0,0x6FF5,0x6FF9,0x6FFC, + 0x6FFD,0x7000,0x7005,0x7006,0x7007,0x700D,0x7017,0x7020, + 0x7023,0x702F,0x7034,0x7037,0x7039,0x703C,0x7043,0x7044, + 0x7048,0x7049,0x704A,0x704B,0x7054,0x7055,0x705D,0x705E, + 0x704E,0x7064,0x7065,0x706C,0x706E,0x7075,0x7076,0x707E, + 0x7081,0x7085,0x7086,0x7094,0x7095,0x7096,0x7097,0x7098, + 0x709B,0x70A4,0x70AB,0x70B0,0x70B1,0x70B4,0x70B7,0x70CA, + 0x70D1,0x70D3,0x70D4,0x70D5,0x70D6,0x70D8,0x70DC,0x70E4, + 0x70FA,0x7103,0x7104,0x7105,0x7106,0x7107,0x710B,0x710C, + 0x710F,0x711E,0x7120,0x712B,0x712D,0x712F,0x7130,0x7131, + 0x7138,0x7141,0x7145,0x7146,0x7147,0x714A,0x714B,0x7150, + 0x7152,0x7157,0x715A,0x715C,0x715E,0x7160, + + /* ku 42 */ + 0x7168,0x7179,0x7180,0x7185,0x7187,0x718C,0x7192,0x719A, + 0x719B,0x71A0,0x71A2,0x71AF,0x71B0,0x71B2,0x71B3,0x71BA, + 0x71BF,0x71C0,0x71C1,0x71C4,0x71CB,0x71CC,0x71D3,0x71D6, + 0x71D9,0x71DA,0x71DC,0x71F8,0x71FE,0x7200,0x7207,0x7208, + 0x7209,0x7213,0x7217,0x721A,0x721D,0x721F,0x7224,0x722B, + 0x722F,0x7234,0x7238,0x7239,0x7241,0x7242,0x7243,0x7245, + 0x724E,0x724F,0x7250,0x7253,0x7255,0x7256,0x725A,0x725C, + 0x725E,0x7260,0x7263,0x7268,0x726B,0x726E,0x726F,0x7271, + 0x7277,0x7278,0x727B,0x727C,0x727F,0x7284,0x7289,0x728D, + 0x728E,0x7293,0x729B,0x72A8,0x72AD,0x72AE,0x72B1,0x72B4, + 0x72BE,0x72C1,0x72C7,0x72C9,0x72CC,0x72D5,0x72D6,0x72D8, + 0x72DF,0x72E5,0x72F3,0x72F4,0x72FA,0x72FB, + + /* ku 43 */ + 0x72FE,0x7302,0x7304,0x7305,0x7307,0x730B,0x730D,0x7312, + 0x7313,0x7318,0x7319,0x731E,0x7322,0x7324,0x7327,0x7328, + 0x732C,0x7331,0x7332,0x7335,0x733A,0x733B,0x733D,0x7343, + 0x734D,0x7350,0x7352,0x7356,0x7358,0x735D,0x735E,0x735F, + 0x7360,0x7366,0x7367,0x7369,0x736B,0x736C,0x736E,0x736F, + 0x7371,0x7377,0x7379,0x737C,0x7380,0x7381,0x7383,0x7385, + 0x7386,0x738E,0x7390,0x7393,0x7395,0x7397,0x7398,0x739C, + 0x739E,0x739F,0x73A0,0x73A2,0x73A5,0x73A6,0x73AA,0x73AB, + 0x73AD,0x73B5,0x73B7,0x73B9,0x73BC,0x73BD,0x73BF,0x73C5, + 0x73C6,0x73C9,0x73CB,0x73CC,0x73CF,0x73D2,0x73D3,0x73D6, + 0x73D9,0x73DD,0x73E1,0x73E3,0x73E6,0x73E7,0x73E9,0x73F4, + 0x73F5,0x73F7,0x73F9,0x73FA,0x73FB,0x73FD, + + /* ku 44 */ + 0x73FF,0x7400,0x7401,0x7404,0x7407,0x740A,0x7411,0x741A, + 0x741B,0x7424,0x7426,0x7428,0x7429,0x742A,0x742B,0x742C, + 0x742D,0x742E,0x742F,0x7430,0x7431,0x7439,0x7440,0x7443, + 0x7444,0x7446,0x7447,0x744B,0x744D,0x7451,0x7452,0x7457, + 0x745D,0x7462,0x7466,0x7467,0x7468,0x746B,0x746D,0x746E, + 0x7471,0x7472,0x7480,0x7481,0x7485,0x7486,0x7487,0x7489, + 0x748F,0x7490,0x7491,0x7492,0x7498,0x7499,0x749A,0x749C, + 0x749F,0x74A0,0x74A1,0x74A3,0x74A6,0x74A8,0x74A9,0x74AA, + 0x74AB,0x74AE,0x74AF,0x74B1,0x74B2,0x74B5,0x74B9,0x74BB, + 0x74BF,0x74C8,0x74C9,0x74CC,0x74D0,0x74D3,0x74D8,0x74DA, + 0x74DB,0x74DE,0x74DF,0x74E4,0x74E8,0x74EA,0x74EB,0x74EF, + 0x74F4,0x74FA,0x74FB,0x74FC,0x74FF,0x7506, + + /* ku 45 */ + 0x7512,0x7516,0x7517,0x7520,0x7521,0x7524,0x7527,0x7529, + 0x752A,0x752F,0x7536,0x7539,0x753D,0x753E,0x753F,0x7540, + 0x7543,0x7547,0x7548,0x754E,0x7550,0x7552,0x7557,0x755E, + 0x755F,0x7561,0x756F,0x7571,0x7579,0x757A,0x757B,0x757C, + 0x757D,0x757E,0x7581,0x7585,0x7590,0x7592,0x7593,0x7595, + 0x7599,0x759C,0x75A2,0x75A4,0x75B4,0x75BA,0x75BF,0x75C0, + 0x75C1,0x75C4,0x75C6,0x75CC,0x75CE,0x75CF,0x75D7,0x75DC, + 0x75DF,0x75E0,0x75E1,0x75E4,0x75E7,0x75EC,0x75EE,0x75EF, + 0x75F1,0x75F9,0x7600,0x7602,0x7603,0x7604,0x7607,0x7608, + 0x760A,0x760C,0x760F,0x7612,0x7613,0x7615,0x7616,0x7619, + 0x761B,0x761C,0x761D,0x761E,0x7623,0x7625,0x7626,0x7629, + 0x762D,0x7632,0x7633,0x7635,0x7638,0x7639, + + /* ku 46 */ + 0x763A,0x763C,0x764A,0x7640,0x7641,0x7643,0x7644,0x7645, + 0x7649,0x764B,0x7655,0x7659,0x765F,0x7664,0x7665,0x766D, + 0x766E,0x766F,0x7671,0x7674,0x7681,0x7685,0x768C,0x768D, + 0x7695,0x769B,0x769C,0x769D,0x769F,0x76A0,0x76A2,0x76A3, + 0x76A4,0x76A5,0x76A6,0x76A7,0x76A8,0x76AA,0x76AD,0x76BD, + 0x76C1,0x76C5,0x76C9,0x76CB,0x76CC,0x76CE,0x76D4,0x76D9, + 0x76E0,0x76E6,0x76E8,0x76EC,0x76F0,0x76F1,0x76F6,0x76F9, + 0x76FC,0x7700,0x7706,0x770A,0x770E,0x7712,0x7714,0x7715, + 0x7717,0x7719,0x771A,0x771C,0x7722,0x7728,0x772D,0x772E, + 0x772F,0x7734,0x7735,0x7736,0x7739,0x773D,0x773E,0x7742, + 0x7745,0x7746,0x774A,0x774D,0x774E,0x774F,0x7752,0x7756, + 0x7757,0x775C,0x775E,0x775F,0x7760,0x7762, + + /* ku 47 */ + 0x7764,0x7767,0x776A,0x776C,0x7770,0x7772,0x7773,0x7774, + 0x777A,0x777D,0x7780,0x7784,0x778C,0x778D,0x7794,0x7795, + 0x7796,0x779A,0x779F,0x77A2,0x77A7,0x77AA,0x77AE,0x77AF, + 0x77B1,0x77B5,0x77BE,0x77C3,0x77C9,0x77D1,0x77D2,0x77D5, + 0x77D9,0x77DE,0x77DF,0x77E0,0x77E4,0x77E6,0x77EA,0x77EC, + 0x77F0,0x77F1,0x77F4,0x77F8,0x77FB,0x7805,0x7806,0x7809, + 0x780D,0x780E,0x7811,0x781D,0x7821,0x7822,0x7823,0x782D, + 0x782E,0x7830,0x7835,0x7837,0x7843,0x7844,0x7847,0x7848, + 0x784C,0x784E,0x7852,0x785C,0x785E,0x7860,0x7861,0x7863, + 0x7864,0x7868,0x786A,0x786E,0x787A,0x787E,0x788A,0x788F, + 0x7894,0x7898,0x78A1,0x789D,0x789E,0x789F,0x78A4,0x78A8, + 0x78AC,0x78AD,0x78B0,0x78B1,0x78B2,0x78B3, + + /* ku 48 */ + 0x78BB,0x78BD,0x78BF,0x78C7,0x78C8,0x78C9,0x78CC,0x78CE, + 0x78D2,0x78D3,0x78D5,0x78D6,0x78E4,0x78DB,0x78DF,0x78E0, + 0x78E1,0x78E6,0x78EA,0x78F2,0x78F3,0x7900,0x78F6,0x78F7, + 0x78FA,0x78FB,0x78FF,0x7906,0x790C,0x7910,0x791A,0x791C, + 0x791E,0x791F,0x7920,0x7925,0x7927,0x7929,0x792D,0x7931, + 0x7934,0x7935,0x793B,0x793D,0x793F,0x7944,0x7945,0x7946, + 0x794A,0x794B,0x794F,0x7951,0x7954,0x7958,0x795B,0x795C, + 0x7967,0x7969,0x796B,0x7972,0x7979,0x797B,0x797C,0x797E, + 0x798B,0x798C,0x7991,0x7993,0x7994,0x7995,0x7996,0x7998, + 0x799B,0x799C,0x79A1,0x79A8,0x79A9,0x79AB,0x79AF,0x79B1, + 0x79B4,0x79B8,0x79BB,0x79C2,0x79C4,0x79C7,0x79C8,0x79CA, + 0x79CF,0x79D4,0x79D6,0x79DA,0x79DD,0x79DE, + + /* ku 49 */ + 0x79E0,0x79E2,0x79E5,0x79EA,0x79EB,0x79ED,0x79F1,0x79F8, + 0x79FC,0x7A02,0x7A03,0x7A07,0x7A09,0x7A0A,0x7A0C,0x7A11, + 0x7A15,0x7A1B,0x7A1E,0x7A21,0x7A27,0x7A2B,0x7A2D,0x7A2F, + 0x7A30,0x7A34,0x7A35,0x7A38,0x7A39,0x7A3A,0x7A44,0x7A45, + 0x7A47,0x7A48,0x7A4C,0x7A55,0x7A56,0x7A59,0x7A5C,0x7A5D, + 0x7A5F,0x7A60,0x7A65,0x7A67,0x7A6A,0x7A6D,0x7A75,0x7A78, + 0x7A7E,0x7A80,0x7A82,0x7A85,0x7A86,0x7A8A,0x7A8B,0x7A90, + 0x7A91,0x7A94,0x7A9E,0x7AA0,0x7AA3,0x7AAC,0x7AB3,0x7AB5, + 0x7AB9,0x7ABB,0x7ABC,0x7AC6,0x7AC9,0x7ACC,0x7ACE,0x7AD1, + 0x7ADB,0x7AE8,0x7AE9,0x7AEB,0x7AEC,0x7AF1,0x7AF4,0x7AFB, + 0x7AFD,0x7AFE,0x7B07,0x7B14,0x7B1F,0x7B23,0x7B27,0x7B29, + 0x7B2A,0x7B2B,0x7B2D,0x7B2E,0x7B2F,0x7B30, + + /* ku 50 */ + 0x7B31,0x7B34,0x7B3D,0x7B3F,0x7B40,0x7B41,0x7B47,0x7B4E, + 0x7B55,0x7B60,0x7B64,0x7B66,0x7B69,0x7B6A,0x7B6D,0x7B6F, + 0x7B72,0x7B73,0x7B77,0x7B84,0x7B89,0x7B8E,0x7B90,0x7B91, + 0x7B96,0x7B9B,0x7B9E,0x7BA0,0x7BA5,0x7BAC,0x7BAF,0x7BB0, + 0x7BB2,0x7BB5,0x7BB6,0x7BBA,0x7BBB,0x7BBC,0x7BBD,0x7BC2, + 0x7BC5,0x7BC8,0x7BCA,0x7BD4,0x7BD6,0x7BD7,0x7BD9,0x7BDA, + 0x7BDB,0x7BE8,0x7BEA,0x7BF2,0x7BF4,0x7BF5,0x7BF8,0x7BF9, + 0x7BFA,0x7BFC,0x7BFE,0x7C01,0x7C02,0x7C03,0x7C04,0x7C06, + 0x7C09,0x7C0B,0x7C0C,0x7C0E,0x7C0F,0x7C19,0x7C1B,0x7C20, + 0x7C25,0x7C26,0x7C28,0x7C2C,0x7C31,0x7C33,0x7C34,0x7C36, + 0x7C39,0x7C3A,0x7C46,0x7C4A,0x7C55,0x7C51,0x7C52,0x7C53, + 0x7C59,0x7C5A,0x7C5B,0x7C5C,0x7C5D,0x7C5E, + + /* ku 51 */ + 0x7C61,0x7C63,0x7C67,0x7C69,0x7C6D,0x7C6E,0x7C70,0x7C72, + 0x7C79,0x7C7C,0x7C7D,0x7C86,0x7C87,0x7C8F,0x7C94,0x7C9E, + 0x7CA0,0x7CA6,0x7CB0,0x7CB6,0x7CB7,0x7CBA,0x7CBB,0x7CBC, + 0x7CBF,0x7CC4,0x7CC7,0x7CC8,0x7CC9,0x7CCD,0x7CCF,0x7CD3, + 0x7CD4,0x7CD5,0x7CD7,0x7CD9,0x7CDA,0x7CDD,0x7CE6,0x7CE9, + 0x7CEB,0x7CF5,0x7D03,0x7D07,0x7D08,0x7D09,0x7D0F,0x7D11, + 0x7D12,0x7D13,0x7D16,0x7D1D,0x7D1E,0x7D23,0x7D26,0x7D2A, + 0x7D2D,0x7D31,0x7D3C,0x7D3D,0x7D3E,0x7D40,0x7D41,0x7D47, + 0x7D48,0x7D4D,0x7D51,0x7D53,0x7D57,0x7D59,0x7D5A,0x7D5C, + 0x7D5D,0x7D65,0x7D67,0x7D6A,0x7D70,0x7D78,0x7D7A,0x7D7B, + 0x7D7F,0x7D81,0x7D82,0x7D83,0x7D85,0x7D86,0x7D88,0x7D8B, + 0x7D8C,0x7D8D,0x7D91,0x7D96,0x7D97,0x7D9D, + + /* ku 52 */ + 0x7D9E,0x7DA6,0x7DA7,0x7DAA,0x7DB3,0x7DB6,0x7DB7,0x7DB9, + 0x7DC2,0x7DC3,0x7DC4,0x7DC5,0x7DC6,0x7DCC,0x7DCD,0x7DCE, + 0x7DD7,0x7DD9,0x7E00,0x7DE2,0x7DE5,0x7DE6,0x7DEA,0x7DEB, + 0x7DED,0x7DF1,0x7DF5,0x7DF6,0x7DF9,0x7DFA,0x7E08,0x7E10, + 0x7E11,0x7E15,0x7E17,0x7E1C,0x7E1D,0x7E20,0x7E27,0x7E28, + 0x7E2C,0x7E2D,0x7E2F,0x7E33,0x7E36,0x7E3F,0x7E44,0x7E45, + 0x7E47,0x7E4E,0x7E50,0x7E52,0x7E58,0x7E5F,0x7E61,0x7E62, + 0x7E65,0x7E6B,0x7E6E,0x7E6F,0x7E73,0x7E78,0x7E7E,0x7E81, + 0x7E86,0x7E87,0x7E8A,0x7E8D,0x7E91,0x7E95,0x7E98,0x7E9A, + 0x7E9D,0x7E9E,0x7F3C,0x7F3B,0x7F3D,0x7F3E,0x7F3F,0x7F43, + 0x7F44,0x7F47,0x7F4F,0x7F52,0x7F53,0x7F5B,0x7F5C,0x7F5D, + 0x7F61,0x7F63,0x7F64,0x7F65,0x7F66,0x7F6D, + + /* ku 53 */ + 0x7F71,0x7F7D,0x7F7E,0x7F7F,0x7F80,0x7F8B,0x7F8D,0x7F8F, + 0x7F90,0x7F91,0x7F96,0x7F97,0x7F9C,0x7FA1,0x7FA2,0x7FA6, + 0x7FAA,0x7FAD,0x7FB4,0x7FBC,0x7FBF,0x7FC0,0x7FC3,0x7FC8, + 0x7FCE,0x7FCF,0x7FDB,0x7FDF,0x7FE3,0x7FE5,0x7FE8,0x7FEC, + 0x7FEE,0x7FEF,0x7FF2,0x7FFA,0x7FFD,0x7FFE,0x7FFF,0x8007, + 0x8008,0x800A,0x800D,0x800E,0x800F,0x8011,0x8013,0x8014, + 0x8016,0x801D,0x801E,0x801F,0x8020,0x8024,0x8026,0x802C, + 0x802E,0x8030,0x8034,0x8035,0x8037,0x8039,0x803A,0x803C, + 0x803E,0x8040,0x8044,0x8060,0x8064,0x8066,0x806D,0x8071, + 0x8075,0x8081,0x8088,0x808E,0x809C,0x809E,0x80A6,0x80A7, + 0x80AB,0x80B8,0x80B9,0x80C8,0x80CD,0x80CF,0x80D2,0x80D4, + 0x80D5,0x80D7,0x80D8,0x80E0,0x80ED,0x80EE, + + /* ku 54 */ + 0x80F0,0x80F2,0x80F3,0x80F6,0x80F9,0x80FA,0x80FE,0x8103, + 0x810B,0x8116,0x8117,0x8118,0x811C,0x811E,0x8120,0x8124, + 0x8127,0x812C,0x8130,0x8135,0x813A,0x813C,0x8145,0x8147, + 0x814A,0x814C,0x8152,0x8157,0x8160,0x8161,0x8167,0x8168, + 0x8169,0x816D,0x816F,0x8177,0x8181,0x8190,0x8184,0x8185, + 0x8186,0x818B,0x818E,0x8196,0x8198,0x819B,0x819E,0x81A2, + 0x81AE,0x81B2,0x81B4,0x81BB,0x81CB,0x81C3,0x81C5,0x81CA, + 0x81CE,0x81CF,0x81D5,0x81D7,0x81DB,0x81DD,0x81DE,0x81E1, + 0x81E4,0x81EB,0x81EC,0x81F0,0x81F1,0x81F2,0x81F5,0x81F6, + 0x81F8,0x81F9,0x81FD,0x81FF,0x8200,0x8203,0x820F,0x8213, + 0x8214,0x8219,0x821A,0x821D,0x8221,0x8222,0x8228,0x8232, + 0x8234,0x823A,0x8243,0x8244,0x8245,0x8246, + + /* ku 55 */ + 0x824B,0x824E,0x824F,0x8251,0x8256,0x825C,0x8260,0x8263, + 0x8267,0x826D,0x8274,0x827B,0x827D,0x827F,0x8280,0x8281, + 0x8283,0x8284,0x8287,0x8289,0x828A,0x828E,0x8291,0x8294, + 0x8296,0x8298,0x829A,0x829B,0x82A0,0x82A1,0x82A3,0x82A4, + 0x82A7,0x82A8,0x82A9,0x82AA,0x82AE,0x82B0,0x82B2,0x82B4, + 0x82B7,0x82BA,0x82BC,0x82BE,0x82BF,0x82C6,0x82D0,0x82D5, + 0x82DA,0x82E0,0x82E2,0x82E4,0x82E8,0x82EA,0x82ED,0x82EF, + 0x82F6,0x82F7,0x82FD,0x82FE,0x8300,0x8301,0x8307,0x8308, + 0x830A,0x830B,0x8354,0x831B,0x831D,0x831E,0x831F,0x8321, + 0x8322,0x832C,0x832D,0x832E,0x8330,0x8333,0x8337,0x833A, + 0x833C,0x833D,0x8342,0x8343,0x8344,0x8347,0x834D,0x834E, + 0x8351,0x8355,0x8356,0x8357,0x8370,0x8378, + + /* ku 56 */ + 0x837D,0x837F,0x8380,0x8382,0x8384,0x8386,0x838D,0x8392, + 0x8394,0x8395,0x8398,0x8399,0x839B,0x839C,0x839D,0x83A6, + 0x83A7,0x83A9,0x83AC,0x83BE,0x83BF,0x83C0,0x83C7,0x83C9, + 0x83CF,0x83D0,0x83D1,0x83D4,0x83DD,0x8353,0x83E8,0x83EA, + 0x83F6,0x83F8,0x83F9,0x83FC,0x8401,0x8406,0x840A,0x840F, + 0x8411,0x8415,0x8419,0x83AD,0x842F,0x8439,0x8445,0x8447, + 0x8448,0x844A,0x844D,0x844F,0x8451,0x8452,0x8456,0x8458, + 0x8459,0x845A,0x845C,0x8460,0x8464,0x8465,0x8467,0x846A, + 0x8470,0x8473,0x8474,0x8476,0x8478,0x847C,0x847D,0x8481, + 0x8485,0x8492,0x8493,0x8495,0x849E,0x84A6,0x84A8,0x84A9, + 0x84AA,0x84AF,0x84B1,0x84B4,0x84BA,0x84BD,0x84BE,0x84C0, + 0x84C2,0x84C7,0x84C8,0x84CC,0x84CF,0x84D3, + + /* ku 57 */ + 0x84DC,0x84E7,0x84EA,0x84EF,0x84F0,0x84F1,0x84F2,0x84F7, + 0x8532,0x84FA,0x84FB,0x84FD,0x8502,0x8503,0x8507,0x850C, + 0x850E,0x8510,0x851C,0x851E,0x8522,0x8523,0x8524,0x8525, + 0x8527,0x852A,0x852B,0x852F,0x8533,0x8534,0x8536,0x853F, + 0x8546,0x854F,0x8550,0x8551,0x8552,0x8553,0x8556,0x8559, + 0x855C,0x855D,0x855E,0x855F,0x8560,0x8561,0x8562,0x8564, + 0x856B,0x856F,0x8579,0x857A,0x857B,0x857D,0x857F,0x8581, + 0x8585,0x8586,0x8589,0x858B,0x858C,0x858F,0x8593,0x8598, + 0x859D,0x859F,0x85A0,0x85A2,0x85A5,0x85A7,0x85B4,0x85B6, + 0x85B7,0x85B8,0x85BC,0x85BD,0x85BE,0x85BF,0x85C2,0x85C7, + 0x85CA,0x85CB,0x85CE,0x85AD,0x85D8,0x85DA,0x85DF,0x85E0, + 0x85E6,0x85E8,0x85ED,0x85F3,0x85F6,0x85FC, + + /* ku 58 */ + 0x85FF,0x8600,0x8604,0x8605,0x860D,0x860E,0x8610,0x8611, + 0x8612,0x8618,0x8619,0x861B,0x861E,0x8621,0x8627,0x8629, + 0x8636,0x8638,0x863A,0x863C,0x863D,0x8640,0x8642,0x8646, + 0x8652,0x8653,0x8656,0x8657,0x8658,0x8659,0x865D,0x8660, + 0x8661,0x8662,0x8663,0x8664,0x8669,0x866C,0x866F,0x8675, + 0x8676,0x8677,0x867A,0x868D,0x8691,0x8696,0x8698,0x869A, + 0x869C,0x86A1,0x86A6,0x86A7,0x86A8,0x86AD,0x86B1,0x86B3, + 0x86B4,0x86B5,0x86B7,0x86B8,0x86B9,0x86BF,0x86C0,0x86C1, + 0x86C3,0x86C5,0x86D1,0x86D2,0x86D5,0x86D7,0x86DA,0x86DC, + 0x86E0,0x86E3,0x86E5,0x86E7,0x8688,0x86FA,0x86FC,0x86FD, + 0x8704,0x8705,0x8707,0x870B,0x870E,0x870F,0x8710,0x8713, + 0x8714,0x8719,0x871E,0x871F,0x8721,0x8723, + + /* ku 59 */ + 0x8728,0x872E,0x872F,0x8731,0x8732,0x8739,0x873A,0x873C, + 0x873D,0x873E,0x8740,0x8743,0x8745,0x874D,0x8758,0x875D, + 0x8761,0x8764,0x8765,0x876F,0x8771,0x8772,0x877B,0x8783, + 0x8784,0x8785,0x8786,0x8787,0x8788,0x8789,0x878B,0x878C, + 0x8790,0x8793,0x8795,0x8797,0x8798,0x8799,0x879E,0x87A0, + 0x87A3,0x87A7,0x87AC,0x87AD,0x87AE,0x87B1,0x87B5,0x87BE, + 0x87BF,0x87C1,0x87C8,0x87C9,0x87CA,0x87CE,0x87D5,0x87D6, + 0x87D9,0x87DA,0x87DC,0x87DF,0x87E2,0x87E3,0x87E4,0x87EA, + 0x87EB,0x87ED,0x87F1,0x87F3,0x87F8,0x87FA,0x87FF,0x8801, + 0x8803,0x8806,0x8809,0x880A,0x880B,0x8810,0x8819,0x8812, + 0x8813,0x8814,0x8818,0x881A,0x881B,0x881C,0x881E,0x881F, + 0x8828,0x882D,0x882E,0x8830,0x8832,0x8835, + + /* ku 60 */ + 0x883A,0x883C,0x8841,0x8843,0x8845,0x8848,0x8849,0x884A, + 0x884B,0x884E,0x8851,0x8855,0x8856,0x8858,0x885A,0x885C, + 0x885F,0x8860,0x8864,0x8869,0x8871,0x8879,0x887B,0x8880, + 0x8898,0x889A,0x889B,0x889C,0x889F,0x88A0,0x88A8,0x88AA, + 0x88BA,0x88BD,0x88BE,0x88C0,0x88CA,0x88CB,0x88CC,0x88CD, + 0x88CE,0x88D1,0x88D2,0x88D3,0x88DB,0x88DE,0x88E7,0x88EF, + 0x88F0,0x88F1,0x88F5,0x88F7,0x8901,0x8906,0x890D,0x890E, + 0x890F,0x8915,0x8916,0x8918,0x8919,0x891A,0x891C,0x8920, + 0x8926,0x8927,0x8928,0x8930,0x8931,0x8932,0x8935,0x8939, + 0x893A,0x893E,0x8940,0x8942,0x8945,0x8946,0x8949,0x894F, + 0x8952,0x8957,0x895A,0x895B,0x895C,0x8961,0x8962,0x8963, + 0x896B,0x896E,0x8970,0x8973,0x8975,0x897A, + + /* ku 61 */ + 0x897B,0x897C,0x897D,0x8989,0x898D,0x8990,0x8994,0x8995, + 0x899B,0x899C,0x899F,0x89A0,0x89A5,0x89B0,0x89B4,0x89B5, + 0x89B6,0x89B7,0x89BC,0x89D4,0x89D5,0x89D6,0x89D7,0x89D8, + 0x89E5,0x89E9,0x89EB,0x89ED,0x89F1,0x89F3,0x89F6,0x89F9, + 0x89FD,0x89FF,0x8A04,0x8A05,0x8A07,0x8A0F,0x8A11,0x8A12, + 0x8A14,0x8A15,0x8A1E,0x8A20,0x8A22,0x8A24,0x8A26,0x8A2B, + 0x8A2C,0x8A2F,0x8A35,0x8A37,0x8A3D,0x8A3E,0x8A40,0x8A43, + 0x8A45,0x8A47,0x8A49,0x8A4D,0x8A4E,0x8A53,0x8A56,0x8A57, + 0x8A58,0x8A5C,0x8A5D,0x8A61,0x8A65,0x8A67,0x8A75,0x8A76, + 0x8A77,0x8A79,0x8A7A,0x8A7B,0x8A7E,0x8A7F,0x8A80,0x8A83, + 0x8A86,0x8A8B,0x8A8F,0x8A90,0x8A92,0x8A96,0x8A97,0x8A99, + 0x8A9F,0x8AA7,0x8AA9,0x8AAE,0x8AAF,0x8AB3, + + /* ku 62 */ + 0x8AB6,0x8AB7,0x8ABB,0x8ABE,0x8AC3,0x8AC6,0x8AC8,0x8AC9, + 0x8ACA,0x8AD1,0x8AD3,0x8AD4,0x8AD5,0x8AD7,0x8ADD,0x8ADF, + 0x8AEC,0x8AF0,0x8AF4,0x8AF5,0x8AF6,0x8AFC,0x8AFF,0x8B05, + 0x8B06,0x8B0B,0x8B11,0x8B1C,0x8B1E,0x8B1F,0x8B0A,0x8B2D, + 0x8B30,0x8B37,0x8B3C,0x8B42,0x8B43,0x8B44,0x8B45,0x8B46, + 0x8B48,0x8B52,0x8B53,0x8B54,0x8B59,0x8B4D,0x8B5E,0x8B63, + 0x8B6D,0x8B76,0x8B78,0x8B79,0x8B7C,0x8B7E,0x8B81,0x8B84, + 0x8B85,0x8B8B,0x8B8D,0x8B8F,0x8B94,0x8B95,0x8B9C,0x8B9E, + 0x8B9F,0x8C38,0x8C39,0x8C3D,0x8C3E,0x8C45,0x8C47,0x8C49, + 0x8C4B,0x8C4F,0x8C51,0x8C53,0x8C54,0x8C57,0x8C58,0x8C5B, + 0x8C5D,0x8C59,0x8C63,0x8C64,0x8C66,0x8C68,0x8C69,0x8C6D, + 0x8C73,0x8C75,0x8C76,0x8C7B,0x8C7E,0x8C86, + + /* ku 63 */ + 0x8C87,0x8C8B,0x8C90,0x8C92,0x8C93,0x8C99,0x8C9B,0x8C9C, + 0x8CA4,0x8CB9,0x8CBA,0x8CC5,0x8CC6,0x8CC9,0x8CCB,0x8CCF, + 0x8CD6,0x8CD5,0x8CD9,0x8CDD,0x8CE1,0x8CE8,0x8CEC,0x8CEF, + 0x8CF0,0x8CF2,0x8CF5,0x8CF7,0x8CF8,0x8CFE,0x8CFF,0x8D01, + 0x8D03,0x8D09,0x8D12,0x8D17,0x8D1B,0x8D65,0x8D69,0x8D6C, + 0x8D6E,0x8D7F,0x8D82,0x8D84,0x8D88,0x8D8D,0x8D90,0x8D91, + 0x8D95,0x8D9E,0x8D9F,0x8DA0,0x8DA6,0x8DAB,0x8DAC,0x8DAF, + 0x8DB2,0x8DB5,0x8DB7,0x8DB9,0x8DBB,0x8DC0,0x8DC5,0x8DC6, + 0x8DC7,0x8DC8,0x8DCA,0x8DCE,0x8DD1,0x8DD4,0x8DD5,0x8DD7, + 0x8DD9,0x8DE4,0x8DE5,0x8DE7,0x8DEC,0x8DF0,0x8DBC,0x8DF1, + 0x8DF2,0x8DF4,0x8DFD,0x8E01,0x8E04,0x8E05,0x8E06,0x8E0B, + 0x8E11,0x8E14,0x8E16,0x8E20,0x8E21,0x8E22, + + /* ku 64 */ + 0x8E23,0x8E26,0x8E27,0x8E31,0x8E33,0x8E36,0x8E37,0x8E38, + 0x8E39,0x8E3D,0x8E40,0x8E41,0x8E4B,0x8E4D,0x8E4E,0x8E4F, + 0x8E54,0x8E5B,0x8E5C,0x8E5D,0x8E5E,0x8E61,0x8E62,0x8E69, + 0x8E6C,0x8E6D,0x8E6F,0x8E70,0x8E71,0x8E79,0x8E7A,0x8E7B, + 0x8E82,0x8E83,0x8E89,0x8E90,0x8E92,0x8E95,0x8E9A,0x8E9B, + 0x8E9D,0x8E9E,0x8EA2,0x8EA7,0x8EA9,0x8EAD,0x8EAE,0x8EB3, + 0x8EB5,0x8EBA,0x8EBB,0x8EC0,0x8EC1,0x8EC3,0x8EC4,0x8EC7, + 0x8ECF,0x8ED1,0x8ED4,0x8EDC,0x8EE8,0x8EEE,0x8EF0,0x8EF1, + 0x8EF7,0x8EF9,0x8EFA,0x8EED,0x8F00,0x8F02,0x8F07,0x8F08, + 0x8F0F,0x8F10,0x8F16,0x8F17,0x8F18,0x8F1E,0x8F20,0x8F21, + 0x8F23,0x8F25,0x8F27,0x8F28,0x8F2C,0x8F2D,0x8F2E,0x8F34, + 0x8F35,0x8F36,0x8F37,0x8F3A,0x8F40,0x8F41, + + /* ku 65 */ + 0x8F43,0x8F47,0x8F4F,0x8F51,0x8F52,0x8F53,0x8F54,0x8F55, + 0x8F58,0x8F5D,0x8F5E,0x8F65,0x8F9D,0x8FA0,0x8FA1,0x8FA4, + 0x8FA5,0x8FA6,0x8FB5,0x8FB6,0x8FB8,0x8FBE,0x8FC0,0x8FC1, + 0x8FC6,0x8FCA,0x8FCB,0x8FCD,0x8FD0,0x8FD2,0x8FD3,0x8FD5, + 0x8FE0,0x8FE3,0x8FE4,0x8FE8,0x8FEE,0x8FF1,0x8FF5,0x8FF6, + 0x8FFB,0x8FFE,0x9002,0x9004,0x9008,0x900C,0x9018,0x901B, + 0x9028,0x9029,0x902F,0x902A,0x902C,0x902D,0x9033,0x9034, + 0x9037,0x903F,0x9043,0x9044,0x904C,0x905B,0x905D,0x9062, + 0x9066,0x9067,0x906C,0x9070,0x9074,0x9079,0x9085,0x9088, + 0x908B,0x908C,0x908E,0x9090,0x9095,0x9097,0x9098,0x9099, + 0x909B,0x90A0,0x90A1,0x90A2,0x90A5,0x90B0,0x90B2,0x90B3, + 0x90B4,0x90B6,0x90BD,0x90CC,0x90BE,0x90C3, + + /* ku 66 */ + 0x90C4,0x90C5,0x90C7,0x90C8,0x90D5,0x90D7,0x90D8,0x90D9, + 0x90DC,0x90DD,0x90DF,0x90E5,0x90D2,0x90F6,0x90EB,0x90EF, + 0x90F0,0x90F4,0x90FE,0x90FF,0x9100,0x9104,0x9105,0x9106, + 0x9108,0x910D,0x9110,0x9114,0x9116,0x9117,0x9118,0x911A, + 0x911C,0x911E,0x9120,0x9125,0x9122,0x9123,0x9127,0x9129, + 0x912E,0x912F,0x9131,0x9134,0x9136,0x9137,0x9139,0x913A, + 0x913C,0x913D,0x9143,0x9147,0x9148,0x914F,0x9153,0x9157, + 0x9159,0x915A,0x915B,0x9161,0x9164,0x9167,0x916D,0x9174, + 0x9179,0x917A,0x917B,0x9181,0x9183,0x9185,0x9186,0x918A, + 0x918E,0x9191,0x9193,0x9194,0x9195,0x9198,0x919E,0x91A1, + 0x91A6,0x91A8,0x91AC,0x91AD,0x91AE,0x91B0,0x91B1,0x91B2, + 0x91B3,0x91B6,0x91BB,0x91BC,0x91BD,0x91BF, + + /* ku 67 */ + 0x91C2,0x91C3,0x91C5,0x91D3,0x91D4,0x91D7,0x91D9,0x91DA, + 0x91DE,0x91E4,0x91E5,0x91E9,0x91EA,0x91EC,0x91ED,0x91EE, + 0x91EF,0x91F0,0x91F1,0x91F7,0x91F9,0x91FB,0x91FD,0x9200, + 0x9201,0x9204,0x9205,0x9206,0x9207,0x9209,0x920A,0x920C, + 0x9210,0x9212,0x9213,0x9216,0x9218,0x921C,0x921D,0x9223, + 0x9224,0x9225,0x9226,0x9228,0x922E,0x922F,0x9230,0x9233, + 0x9235,0x9236,0x9238,0x9239,0x923A,0x923C,0x923E,0x9240, + 0x9242,0x9243,0x9246,0x9247,0x924A,0x924D,0x924E,0x924F, + 0x9251,0x9258,0x9259,0x925C,0x925D,0x9260,0x9261,0x9265, + 0x9267,0x9268,0x9269,0x926E,0x926F,0x9270,0x9275,0x9276, + 0x9277,0x9278,0x9279,0x927B,0x927C,0x927D,0x927F,0x9288, + 0x9289,0x928A,0x928D,0x928E,0x9292,0x9297, + + /* ku 68 */ + 0x9299,0x929F,0x92A0,0x92A4,0x92A5,0x92A7,0x92A8,0x92AB, + 0x92AF,0x92B2,0x92B6,0x92B8,0x92BA,0x92BB,0x92BC,0x92BD, + 0x92BF,0x92C0,0x92C1,0x92C2,0x92C3,0x92C5,0x92C6,0x92C7, + 0x92C8,0x92CB,0x92CC,0x92CD,0x92CE,0x92D0,0x92D3,0x92D5, + 0x92D7,0x92D8,0x92D9,0x92DC,0x92DD,0x92DF,0x92E0,0x92E1, + 0x92E3,0x92E5,0x92E7,0x92E8,0x92EC,0x92EE,0x92F0,0x92F9, + 0x92FB,0x92FF,0x9300,0x9302,0x9308,0x930D,0x9311,0x9314, + 0x9315,0x931C,0x931D,0x931E,0x931F,0x9321,0x9324,0x9325, + 0x9327,0x9329,0x932A,0x9333,0x9334,0x9336,0x9337,0x9347, + 0x9348,0x9349,0x9350,0x9351,0x9352,0x9355,0x9357,0x9358, + 0x935A,0x935E,0x9364,0x9365,0x9367,0x9369,0x936A,0x936D, + 0x936F,0x9370,0x9371,0x9373,0x9374,0x9376, + + /* ku 69 */ + 0x937A,0x937D,0x937F,0x9380,0x9381,0x9382,0x9388,0x938A, + 0x938B,0x938D,0x938F,0x9392,0x9395,0x9398,0x939B,0x939E, + 0x93A1,0x93A3,0x93A4,0x93A6,0x93A8,0x93AB,0x93B4,0x93B5, + 0x93B6,0x93BA,0x93A9,0x93C1,0x93C4,0x93C5,0x93C6,0x93C7, + 0x93C9,0x93CA,0x93CB,0x93CC,0x93CD,0x93D3,0x93D9,0x93DC, + 0x93DE,0x93DF,0x93E2,0x93E6,0x93E7,0x93F9,0x93F7,0x93F8, + 0x93FA,0x93FB,0x93FD,0x9401,0x9402,0x9404,0x9408,0x9409, + 0x940D,0x940E,0x940F,0x9415,0x9416,0x9417,0x941F,0x942E, + 0x942F,0x9431,0x9432,0x9433,0x9434,0x943B,0x943F,0x943D, + 0x9443,0x9445,0x9448,0x944A,0x944C,0x9455,0x9459,0x945C, + 0x945F,0x9461,0x9463,0x9468,0x946B,0x946D,0x946E,0x946F, + 0x9471,0x9472,0x9484,0x9483,0x9578,0x9579, + + /* ku 70 */ + 0x957E,0x9584,0x9588,0x958C,0x958D,0x958E,0x959D,0x959E, + 0x959F,0x95A1,0x95A6,0x95A9,0x95AB,0x95AC,0x95B4,0x95B6, + 0x95BA,0x95BD,0x95BF,0x95C6,0x95C8,0x95C9,0x95CB,0x95D0, + 0x95D1,0x95D2,0x95D3,0x95D9,0x95DA,0x95DD,0x95DE,0x95DF, + 0x95E0,0x95E4,0x95E6,0x961D,0x961E,0x9622,0x9624,0x9625, + 0x9626,0x962C,0x9631,0x9633,0x9637,0x9638,0x9639,0x963A, + 0x963C,0x963D,0x9641,0x9652,0x9654,0x9656,0x9657,0x9658, + 0x9661,0x966E,0x9674,0x967B,0x967C,0x967E,0x967F,0x9681, + 0x9682,0x9683,0x9684,0x9689,0x9691,0x9696,0x969A,0x969D, + 0x969F,0x96A4,0x96A5,0x96A6,0x96A9,0x96AE,0x96AF,0x96B3, + 0x96BA,0x96CA,0x96D2,0x5DB2,0x96D8,0x96DA,0x96DD,0x96DE, + 0x96DF,0x96E9,0x96EF,0x96F1,0x96FA,0x9702, + + /* ku 71 */ + 0x9703,0x9705,0x9709,0x971A,0x971B,0x971D,0x9721,0x9722, + 0x9723,0x9728,0x9731,0x9733,0x9741,0x9743,0x974A,0x974E, + 0x974F,0x9755,0x9757,0x9758,0x975A,0x975B,0x9763,0x9767, + 0x976A,0x976E,0x9773,0x9776,0x9777,0x9778,0x977B,0x977D, + 0x977F,0x9780,0x9789,0x9795,0x9796,0x9797,0x9799,0x979A, + 0x979E,0x979F,0x97A2,0x97AC,0x97AE,0x97B1,0x97B2,0x97B5, + 0x97B6,0x97B8,0x97B9,0x97BA,0x97BC,0x97BE,0x97BF,0x97C1, + 0x97C4,0x97C5,0x97C7,0x97C9,0x97CA,0x97CC,0x97CD,0x97CE, + 0x97D0,0x97D1,0x97D4,0x97D7,0x97D8,0x97D9,0x97DD,0x97DE, + 0x97E0,0x97DB,0x97E1,0x97E4,0x97EF,0x97F1,0x97F4,0x97F7, + 0x97F8,0x97FA,0x9807,0x980A,0x9819,0x980D,0x980E,0x9814, + 0x9816,0x981C,0x981E,0x9820,0x9823,0x9826, + + /* ku 72 */ + 0x982B,0x982E,0x982F,0x9830,0x9832,0x9833,0x9835,0x9825, + 0x983E,0x9844,0x9847,0x984A,0x9851,0x9852,0x9853,0x9856, + 0x9857,0x9859,0x985A,0x9862,0x9863,0x9865,0x9866,0x986A, + 0x986C,0x98AB,0x98AD,0x98AE,0x98B0,0x98B4,0x98B7,0x98B8, + 0x98BA,0x98BB,0x98BF,0x98C2,0x98C5,0x98C8,0x98CC,0x98E1, + 0x98E3,0x98E5,0x98E6,0x98E7,0x98EA,0x98F3,0x98F6,0x9902, + 0x9907,0x9908,0x9911,0x9915,0x9916,0x9917,0x991A,0x991B, + 0x991C,0x991F,0x9922,0x9926,0x9927,0x992B,0x9931,0x9932, + 0x9933,0x9934,0x9935,0x9939,0x993A,0x993B,0x993C,0x9940, + 0x9941,0x9946,0x9947,0x9948,0x994D,0x994E,0x9954,0x9958, + 0x9959,0x995B,0x995C,0x995E,0x995F,0x9960,0x999B,0x999D, + 0x999F,0x99A6,0x99B0,0x99B1,0x99B2,0x99B5, + + /* ku 73 */ + 0x99B9,0x99BA,0x99BD,0x99BF,0x99C3,0x99C9,0x99D3,0x99D4, + 0x99D9,0x99DA,0x99DC,0x99DE,0x99E7,0x99EA,0x99EB,0x99EC, + 0x99F0,0x99F4,0x99F5,0x99F9,0x99FD,0x99FE,0x9A02,0x9A03, + 0x9A04,0x9A0B,0x9A0C,0x9A10,0x9A11,0x9A16,0x9A1E,0x9A20, + 0x9A22,0x9A23,0x9A24,0x9A27,0x9A2D,0x9A2E,0x9A33,0x9A35, + 0x9A36,0x9A38,0x9A47,0x9A41,0x9A44,0x9A4A,0x9A4B,0x9A4C, + 0x9A4E,0x9A51,0x9A54,0x9A56,0x9A5D,0x9AAA,0x9AAC,0x9AAE, + 0x9AAF,0x9AB2,0x9AB4,0x9AB5,0x9AB6,0x9AB9,0x9ABB,0x9ABE, + 0x9ABF,0x9AC1,0x9AC3,0x9AC6,0x9AC8,0x9ACE,0x9AD0,0x9AD2, + 0x9AD5,0x9AD6,0x9AD7,0x9ADB,0x9ADC,0x9AE0,0x9AE4,0x9AE5, + 0x9AE7,0x9AE9,0x9AEC,0x9AF2,0x9AF3,0x9AF5,0x9AF9,0x9AFA, + 0x9AFD,0x9AFF,0x9B00,0x9B01,0x9B02,0x9B03, + + /* ku 74 */ + 0x9B04,0x9B05,0x9B08,0x9B09,0x9B0B,0x9B0C,0x9B0D,0x9B0E, + 0x9B10,0x9B12,0x9B16,0x9B19,0x9B1B,0x9B1C,0x9B20,0x9B26, + 0x9B2B,0x9B2D,0x9B33,0x9B34,0x9B35,0x9B37,0x9B39,0x9B3A, + 0x9B3D,0x9B48,0x9B4B,0x9B4C,0x9B55,0x9B56,0x9B57,0x9B5B, + 0x9B5E,0x9B61,0x9B63,0x9B65,0x9B66,0x9B68,0x9B6A,0x9B6B, + 0x9B6C,0x9B6D,0x9B6E,0x9B73,0x9B75,0x9B77,0x9B78,0x9B79, + 0x9B7F,0x9B80,0x9B84,0x9B85,0x9B86,0x9B87,0x9B89,0x9B8A, + 0x9B8B,0x9B8D,0x9B8F,0x9B90,0x9B94,0x9B9A,0x9B9D,0x9B9E, + 0x9BA6,0x9BA7,0x9BA9,0x9BAC,0x9BB0,0x9BB1,0x9BB2,0x9BB7, + 0x9BB8,0x9BBB,0x9BBC,0x9BBE,0x9BBF,0x9BC1,0x9BC7,0x9BC8, + 0x9BCE,0x9BD0,0x9BD7,0x9BD8,0x9BDD,0x9BDF,0x9BE5,0x9BE7, + 0x9BEA,0x9BEB,0x9BEF,0x9BF3,0x9BF7,0x9BF8, + + /* ku 75 */ + 0x9BF9,0x9BFA,0x9BFD,0x9BFF,0x9C00,0x9C02,0x9C0B,0x9C0F, + 0x9C11,0x9C16,0x9C18,0x9C19,0x9C1A,0x9C1C,0x9C1E,0x9C22, + 0x9C23,0x9C26,0x9C27,0x9C28,0x9C29,0x9C2A,0x9C31,0x9C35, + 0x9C36,0x9C37,0x9C3D,0x9C41,0x9C43,0x9C44,0x9C45,0x9C49, + 0x9C4A,0x9C4E,0x9C4F,0x9C50,0x9C53,0x9C54,0x9C56,0x9C58, + 0x9C5B,0x9C5D,0x9C5E,0x9C5F,0x9C63,0x9C69,0x9C6A,0x9C5C, + 0x9C6B,0x9C68,0x9C6E,0x9C70,0x9C72,0x9C75,0x9C77,0x9C7B, + 0x9CE6,0x9CF2,0x9CF7,0x9CF9,0x9D0B,0x9D02,0x9D11,0x9D17, + 0x9D18,0x9D1C,0x9D1D,0x9D1E,0x9D2F,0x9D30,0x9D32,0x9D33, + 0x9D34,0x9D3A,0x9D3C,0x9D45,0x9D3D,0x9D42,0x9D43,0x9D47, + 0x9D4A,0x9D53,0x9D54,0x9D5F,0x9D63,0x9D62,0x9D65,0x9D69, + 0x9D6A,0x9D6B,0x9D70,0x9D76,0x9D77,0x9D7B, + + /* ku 76 */ + 0x9D7C,0x9D7E,0x9D83,0x9D84,0x9D86,0x9D8A,0x9D8D,0x9D8E, + 0x9D92,0x9D93,0x9D95,0x9D96,0x9D97,0x9D98,0x9DA1,0x9DAA, + 0x9DAC,0x9DAE,0x9DB1,0x9DB5,0x9DB9,0x9DBC,0x9DBF,0x9DC3, + 0x9DC7,0x9DC9,0x9DCA,0x9DD4,0x9DD5,0x9DD6,0x9DD7,0x9DDA, + 0x9DDE,0x9DDF,0x9DE0,0x9DE5,0x9DE7,0x9DE9,0x9DEB,0x9DEE, + 0x9DF0,0x9DF3,0x9DF4,0x9DFE,0x9E0A,0x9E02,0x9E07,0x9E0E, + 0x9E10,0x9E11,0x9E12,0x9E15,0x9E16,0x9E19,0x9E1C,0x9E1D, + 0x9E7A,0x9E7B,0x9E7C,0x9E80,0x9E82,0x9E83,0x9E84,0x9E85, + 0x9E87,0x9E8E,0x9E8F,0x9E96,0x9E98,0x9E9B,0x9E9E,0x9EA4, + 0x9EA8,0x9EAC,0x9EAE,0x9EAF,0x9EB0,0x9EB3,0x9EB4,0x9EB5, + 0x9EC6,0x9EC8,0x9ECB,0x9ED5,0x9EDF,0x9EE4,0x9EE7,0x9EEC, + 0x9EED,0x9EEE,0x9EF0,0x9EF1,0x9EF2,0x9EF5, + + /* ku 77 */ + 0x9EF8,0x9EFF,0x9F02,0x9F03,0x9F09,0x9F0F,0x9F10,0x9F11, + 0x9F12,0x9F14,0x9F16,0x9F17,0x9F19,0x9F1A,0x9F1B,0x9F1F, + 0x9F22,0x9F26,0x9F2A,0x9F2B,0x9F2F,0x9F31,0x9F32,0x9F34, + 0x9F37,0x9F39,0x9F3A,0x9F3C,0x9F3D,0x9F3F,0x9F41,0x9F43, + 0x9F44,0x9F45,0x9F46,0x9F47,0x9F53,0x9F55,0x9F56,0x9F57, + 0x9F58,0x9F5A,0x9F5D,0x9F5E,0x9F68,0x9F69,0x9F6D,0x9F6E, + 0x9F6F,0x9F70,0x9F71,0x9F73,0x9F75,0x9F7A,0x9F7D,0x9F8F, + 0x9F90,0x9F91,0x9F92,0x9F94,0x9F96,0x9F97,0x9F9E,0x9FA1, + 0x9FA2,0x9FA3,0x9FA5 +}; + +const int jisx0212_ucs_table_size = (sizeof (jisx0212_ucs_table) / sizeof (unsigned short)); + +const unsigned short ucs_a1_jis_table[] = { + /* 0000h */ + 0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, + 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, + 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, + 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, + 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, + 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, + 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, + 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, + 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, + 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, + 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, + 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, + 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, + 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, + 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, + 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0xA2C2,0x2171,0x2172,0xA2F0,0x0000,0xA2C3,0x2178, + 0x212F,0xA2ED,0xA2EC,0x0000,0x224C,0x0000,0xA2EE,0xA2B4, + 0x216B,0x215E,0x0000,0x0000,0x212D,0x0000,0x2279,0x0000, + 0xA2B1,0x0000,0xA2EB,0x0000,0x0000,0x0000,0x0000,0xA2C4, + 0xAAA2,0xAAA1,0xAAA4,0xAAAA,0xAAA3,0xAAA9,0xA9A1,0xAAAE, + 0xAAB2,0xAAB1,0xAAB4,0xAAB3,0xAAC0,0xAABF,0xAAC2,0xAAC1, + 0x0000,0xAAD0,0xAAD2,0xAAD1,0xAAD4,0xAAD8,0xAAD3,0x215F, + 0xA9AC,0xAAE3,0xAAE2,0xAAE5,0xAAE4,0xAAF2,0xA9B0,0xA9CE, + 0xABA2,0xABA1,0xABA4,0xABAA,0xABA3,0xABA9,0xA9C1,0xABAE, + 0xABB2,0xABB1,0xABB4,0xABB3,0xABC0,0xABBF,0xABC2,0xABC1, + 0xA9C3,0xABD0,0xABD2,0xABD1,0xABD4,0xABD8,0xABD3,0x2160, + 0xA9CC,0xABE3,0xABE2,0xABE5,0xABE4,0xABF2,0xA9D0,0xABF3, + + /* 0100h */ + 0xAAA7,0xABA7,0xAAA5,0xABA5,0xAAA8,0xABA8,0xAAAB,0xABAB, + 0xAAAC,0xABAC,0xAAAF,0xABAF,0xAAAD,0xABAD,0xAAB0,0xABB0, + 0xA9A2,0xA9C2,0xAAB7,0xABB7,0x0000,0x0000,0xAAB6,0xABB6, + 0xAAB8,0xABB8,0xAAB5,0xABB5,0xAABA,0xABBA,0xAABB,0xABBB, + 0xAABD,0xABBD,0xAABC,0x0000,0xAABE,0xABBE,0xA9A4,0xA9C4, + 0xAAC7,0xABC7,0xAAC5,0xABC5,0x0000,0x0000,0xAAC6,0xABC6, + 0xAAC4,0xA9C5,0xA9A6,0xA9C6,0xAAC8,0xABC8,0xAAC9,0xABC9, + 0xA9C7,0xAACA,0xABCA,0xAACC,0xABCC,0xAACB,0xABCB,0xA9A9, + 0xA9C9,0xA9A8,0xA9C8,0xAACD,0xABCD,0xAACF,0xABCF,0xAACE, + 0xABCE,0xA9CA,0xA9AB,0xA9CB,0xAAD7,0xABD7,0x0000,0x0000, + 0xAAD6,0xABD6,0xA9AD,0xA9CD,0xAAD9,0xABD9,0xAADB,0xABDB, + 0xAADA,0xABDA,0xAADC,0xABDC,0xAADD,0xABDD,0xAADF,0xABDF, + 0xAADE,0xABDE,0xAAE1,0xABE1,0xAAE0,0xABE0,0xA9AF,0xA9CF, + 0xAAEC,0xABEC,0xAAE9,0xABE9,0xAAE6,0xABE6,0xAAEB,0xABEB, + 0xAAE8,0xABE8,0xAAEA,0xABEA,0xAAF1,0xABF1,0xAAF4,0xABF4, + 0xAAF3,0xAAF5,0xABF5,0xAAF7,0xABF7,0xAAF6,0xABF6,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0xAAA6,0xABA6,0xAAC3, + 0xABC3,0xAAD5,0xABD5,0xAAE7,0xABE7,0xAAF0,0xABF0,0xAAED, + 0xABED,0xAAEF,0xABEF,0xAAEE,0xABEE,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0xABB9,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 0200h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xA2B0, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0xA2AF,0xA2B2,0xA2B6,0xA2B5,0x0000,0xA2B3,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 0300h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0xA2B8,0xA2B9,0xA6E1,0x0000, + 0xA6E2,0xA6E3,0xA6E4,0x0000,0xA6E7,0x0000,0xA6E9,0xA6EC, + 0xA6F6,0x2621,0x2622,0x2623,0x2624,0x2625,0x2626,0x2627, + 0x2628,0x2629,0x262A,0x262B,0x262C,0x262D,0x262E,0x262F, + 0x2630,0x2631,0x0000,0x2632,0x2633,0x2634,0x2635,0x2636, + 0x2637,0x2638,0xA6E5,0xA6EA,0xA6F1,0xA6F2,0xA6F3,0xA6F4, + 0xA6FB,0x2641,0x2642,0x2643,0x2644,0x2645,0x2646,0x2647, + 0x2648,0x2649,0x264A,0x264B,0x264C,0x264D,0x264E,0x264F, + 0x2650,0x2651,0xA6F8,0x2652,0x2653,0x2654,0x2655,0x2656, + 0x2657,0x2658,0xA6F5,0xA6FA,0xA6F7,0xA6F9,0xA6FC,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 0400h */ + 0x0000,0x2727,0xA7C2,0xA7C3,0xA7C4,0xA7C5,0xA7C6,0xA7C7, + 0xA7C8,0xA7C9,0xA7CA,0xA7CB,0xA7CC,0x0000,0xA7CD,0xA7CE, + 0x2721,0x2722,0x2723,0x2724,0x2725,0x2726,0x2728,0x2729, + 0x272A,0x272B,0x272C,0x272D,0x272E,0x272F,0x2730,0x2731, + 0x2732,0x2733,0x2734,0x2735,0x2736,0x2737,0x2738,0x2739, + 0x273A,0x273B,0x273C,0x273D,0x273E,0x273F,0x2740,0x2741, + 0x2751,0x2752,0x2753,0x2754,0x2755,0x2756,0x2758,0x2759, + 0x275A,0x275B,0x275C,0x275D,0x275E,0x275F,0x2760,0x2761, + 0x2762,0x2763,0x2764,0x2765,0x2766,0x2767,0x2768,0x2769, + 0x276A,0x276B,0x276C,0x276D,0x276E,0x276F,0x2770,0x2771, + 0x0000,0x2757,0xA7F2,0xA7F3,0xA7F4,0xA7F5,0xA7F6,0xA7F7, + 0xA7F8,0xA7F9,0xA7FA,0xA7FB,0xA7FC,0x0000,0xA7FD,0xA7FE +}; +const int ucs_a1_jis_table_min = 0x0000; +const int ucs_a1_jis_table_max = 0x0000 + (sizeof (ucs_a1_jis_table) / sizeof (unsigned short)); + + +const unsigned short ucs_a2_jis_table[] = { + /* 2000h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x213E,0x0000,0x0000,0x0000,0x0000,0x213D,0x2142,0x0000, + 0x2146,0x2147,0x0000,0x0000,0x2148,0x2149,0x0000,0x0000, + 0x2277,0x2278,0x0000,0x0000,0x0000,0x2145,0x2144,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x2273,0x0000,0x216C,0x216D,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x2228,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 2100h */ + 0x0000,0x0000,0x0000,0x216E,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xA2F1,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0xA2EF,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x2272,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x222B,0x222C,0x222A,0x222D,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x224D,0x0000,0x224E,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 2200h */ + 0x224F,0x0000,0x225F,0x2250,0x0000,0x0000,0x0000,0x2260, + 0x223A,0x0000,0x0000,0x223B,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x215D,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x2265,0x0000,0x0000,0x2267,0x2167,0x0000, + 0x225C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x224A, + 0x224B,0x2241,0x2240,0x2269,0x226A,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x2168,0x2268,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x2266,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x2262,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x2162,0x2261,0x0000,0x0000,0x0000,0x0000,0x2165,0x2166, + 0x0000,0x0000,0x2263,0x2264,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x223E,0x223F,0x0000,0x0000,0x223C,0x223D, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x225D,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 2300h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x225E,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 2400h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 2500h */ + 0x2821,0x282C,0x2822,0x282D,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x2823,0x0000,0x0000,0x282E, + 0x2824,0x0000,0x0000,0x282F,0x2826,0x0000,0x0000,0x2831, + 0x2825,0x0000,0x0000,0x2830,0x2827,0x283C,0x0000,0x0000, + 0x2837,0x0000,0x0000,0x2832,0x2829,0x283E,0x0000,0x0000, + 0x2839,0x0000,0x0000,0x2834,0x2828,0x0000,0x0000,0x2838, + 0x283D,0x0000,0x0000,0x2833,0x282A,0x0000,0x0000,0x283A, + 0x283F,0x0000,0x0000,0x2835,0x282B,0x0000,0x0000,0x283B, + 0x0000,0x0000,0x2840,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x2836,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x2223,0x2222,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x2225,0x2224,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x2227,0x2226,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2221,0x217E, + 0x0000,0x0000,0x0000,0x217B,0x0000,0x0000,0x217D,0x217C, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x227E, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 2600h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x217A,0x2179,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x216A,0x0000,0x2169,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x2276,0x0000,0x0000,0x2275,0x0000,0x2274, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 2700h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 2800h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 2900h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 2A00h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 2B00h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 2C00h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 2D00h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 2E00h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 2F00h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 3000h */ + 0x2121,0x2122,0x2123,0x2137,0x0000,0x2139,0x213A,0x213B, + 0x2152,0x2153,0x2154,0x2155,0x2156,0x2157,0x2158,0x2159, + 0x215A,0x215B,0x2229,0x222E,0x214C,0x214D,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x2141,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x2421,0x2422,0x2423,0x2424,0x2425,0x2426,0x2427, + 0x2428,0x2429,0x242A,0x242B,0x242C,0x242D,0x242E,0x242F, + 0x2430,0x2431,0x2432,0x2433,0x2434,0x2435,0x2436,0x2437, + 0x2438,0x2439,0x243A,0x243B,0x243C,0x243D,0x243E,0x243F, + 0x2440,0x2441,0x2442,0x2443,0x2444,0x2445,0x2446,0x2447, + 0x2448,0x2449,0x244A,0x244B,0x244C,0x244D,0x244E,0x244F, + 0x2450,0x2451,0x2452,0x2453,0x2454,0x2455,0x2456,0x2457, + 0x2458,0x2459,0x245A,0x245B,0x245C,0x245D,0x245E,0x245F, + 0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467, + 0x2468,0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F, + 0x2470,0x2471,0x2472,0x2473,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x212B,0x212C,0x2135,0x2136,0x0000, + 0x0000,0x2521,0x2522,0x2523,0x2524,0x2525,0x2526,0x2527, + 0x2528,0x2529,0x252A,0x252B,0x252C,0x252D,0x252E,0x252F, + 0x2530,0x2531,0x2532,0x2533,0x2534,0x2535,0x2536,0x2537, + 0x2538,0x2539,0x253A,0x253B,0x253C,0x253D,0x253E,0x253F, + 0x2540,0x2541,0x2542,0x2543,0x2544,0x2545,0x2546,0x2547, + 0x2548,0x2549,0x254A,0x254B,0x254C,0x254D,0x254E,0x254F, + 0x2550,0x2551,0x2552,0x2553,0x2554,0x2555,0x2556,0x2557, + 0x2558,0x2559,0x255A,0x255B,0x255C,0x255D,0x255E,0x255F, + 0x2560,0x2561,0x2562,0x2563,0x2564,0x2565,0x2566,0x2567, + 0x2568,0x2569,0x256A,0x256B,0x256C,0x256D,0x256E,0x256F, + 0x2570,0x2571,0x2572,0x2573,0x2574,0x2575,0x2576,0x0000, + 0x0000,0x0000,0x0000,0x2126,0x213C,0x2133,0x2134,0x0000 +}; +const int ucs_a2_jis_table_min = 0x2000; +const int ucs_a2_jis_table_max = 0x2000 + (sizeof (ucs_a2_jis_table) / sizeof (unsigned short)); + + +const unsigned short ucs_i_jis_table[] = { + /* 4E00h */ + 0x306C,0x437A,0xB0A1,0x3C37,0xB0A2,0xB0A3,0x0000,0x4B7C, + 0x3E66,0x3B30,0x3E65,0x323C,0xB0A4,0x4954,0x4D3F,0x0000, + 0x5022,0x312F,0xB0A5,0x0000,0x336E,0x5023,0x4024,0x5242, + 0x3556,0x4A3A,0x0000,0x0000,0x0000,0x0000,0x3E67,0xB0A6, + 0x0000,0x4E3E,0x0000,0xB0A7,0xB0A8,0x0000,0x4A42,0x0000, + 0xB0A9,0x0000,0x5024,0xB0AA,0x0000,0x4366,0xB0AB,0xB0AC, + 0xB0AD,0x5025,0x367A,0x0000,0x0000,0xB0AE,0x5026,0x0000, + 0x345D,0x4330,0x0000,0x3C67,0x5027,0x0000,0x0000,0x5028, + 0xB0AF,0xB0B0,0x5029,0x4735,0xB0B1,0x3557,0x0000,0xB0B2, + 0x0000,0x0000,0x0000,0x4737,0x0000,0x4663,0x3843,0x4B33, + 0x0000,0xB0B3,0x0000,0x0000,0x0000,0x6949,0x502A,0x3E68, + 0x502B,0x3235,0xB0B4,0x0000,0xB0B5,0x3665,0x3870,0x4C69, + 0x0000,0x0000,0x5626,0xB0B6,0x0000,0x0000,0x0000,0x0000, + 0xB0B7,0xB0B8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x4D70,0x0000,0x467D,0xB0B9,0xB0BA,0x0000,0x0000, + 0x0000,0xB0BB,0x0000,0x0000,0x0000,0x0000,0x3425,0xB0BC, + 0x3535,0x0000,0x502C,0x0000,0x0000,0x502D,0x4E3B,0x0000, + 0x4D3D,0x4168,0x502F,0x3B76,0x4673,0xB0BD,0x5032,0x0000, + 0x0000,0x313E,0x385F,0x0000,0x385E,0x3066,0xB0BE,0xB0BF, + 0x4F4B,0x4F4A,0x0000,0x3A33,0x3021,0xB0C0,0x5033,0x5034, + 0x5035,0x4B34,0x5036,0x0000,0x3872,0x3067,0x4B72,0x0000, + 0x357C,0x0000,0x0000,0x357D,0x357E,0x4462,0x4E3C,0xB0C1, + 0x5037,0x0000,0x0000,0x5038,0x0000,0x0000,0x5039,0x0000, + 0x0000,0xB0C2,0x3F4D,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x3D3A,0x3F4E,0x503E,0xB0C3,0x503C,0x0000,0x503D,0x3558, + 0x0000,0x0000,0x3A23,0x3270,0x0000,0x503B,0x503A,0x4A29, + 0xB0C4,0x0000,0x0000,0x0000,0x3B46,0x3B45,0x423E,0x503F, + 0x4955,0x4067,0xB0C5,0xB0C6,0x0000,0x2138,0x5040,0x5042, + 0xB0C7,0xB0C8,0xB0C9,0x4265,0x4E61,0x304A,0x0000,0x0000, + 0xB0CA,0x0000,0x0000,0x0000,0x0000,0x5041,0x323E,0xB0CB, + 0x3644,0xB0CC,0x4367,0xB0CD,0x0000,0xB0CE,0x376F,0x5043, + 0x0000,0x0000,0x0000,0x4724,0x0000,0xB0CF,0xB0D0,0xB0D1, + + /* 4F00h */ + 0xB0D2,0x346B,0xB0D3,0xB0D4,0x0000,0x0000,0x0000,0x0000, + 0xB0D5,0x5044,0x304B,0xB0D6,0xB0D7,0x3860,0x346C,0x497A, + 0x4832,0x3559,0xB0D8,0x0000,0x0000,0xB0D9,0xB0DA,0xB0DB, + 0x0000,0xB0DC,0x3271,0x0000,0x5067,0x4541,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB0DD,0x476C, + 0x5046,0xB0DE,0x0000,0xB0E0,0x483C,0xB0E1,0x4E62,0xB0E2, + 0x3F2D,0xB0E3,0x3B47,0xB0E4,0x3B77,0x3240,0xB0E5,0x0000, + 0xB0E6,0x0000,0xB0E7,0x4451,0x0000,0x0000,0x4322,0x504A, + 0xB0E8,0xB0E9,0x0000,0xB0EA,0xB0EB,0x304C,0x4463,0x3D3B, + 0x3A34,0x4D24,0xB0EC,0x424E,0xB0ED,0x323F,0xB0EE,0x5049, + 0xB0EF,0x4D3E,0x5045,0x5047,0x3A6E,0x5048,0x5524,0xB0F0, + 0xB0DF,0x0000,0x0000,0xB0F1,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x5050,0xB0F2,0x0000,0xB0F3,0x0000,0xB0F4,0x5053, + 0x5051,0xB0F5,0x0000,0x3242,0x0000,0x4A3B,0x504B,0xB0F6, + 0xB0F7,0xB0F8,0xB0F9,0x504F,0x3873,0xB0FA,0xB0FB,0x3B48, + 0x0000,0xB0FC,0xB0FD,0x3426,0xB0FE,0xB1A1,0x5054,0x0000, + 0x504C,0xB1A2,0xB1A3,0x4E63,0xB1A4,0x3B78,0xB1A5,0x504D, + 0xB1A6,0x5052,0xB1A7,0xB1A8,0xB1A9,0x0000,0x5055,0xB1AA, + 0x504E,0xB1AB,0xB1AC,0x3621,0x0000,0x304D,0xB1AD,0xB1AE, + 0x3622,0x3241,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x5525,0x0000,0x4B79,0x496E,0x3874, + 0x0000,0x0000,0xB1AF,0x0000,0x0000,0x3F2F,0x4E37,0xB1B0, + 0x0000,0xB1B1,0x0000,0xB1B2,0xB1B3,0xB1B4,0xB1B5,0x4A58, + 0xB1B6,0xB1B7,0x3738,0x4225,0x3264,0xB1B8,0xB1B9,0x0000, + 0xB1BA,0xB1BB,0x3D53,0xB1BC,0xB1BD,0xB1BE,0x5059,0xB1BF, + 0x505E,0x505C,0xB1C0,0x0000,0x5057,0x0000,0x0000,0x422F, + 0x505A,0x0000,0x505D,0x505B,0xB1C1,0x4A5D,0x0000,0x5058, + 0xB1C2,0x3F2E,0xB1C3,0x4B73,0x505F,0x5060,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3D24,0x506D, + 0xB1C4,0x0000,0xB1C5,0x4750,0x0000,0x4936,0x5068,0x0000, + 0x4A70,0x0000,0x3236,0x0000,0xB1C6,0xB1C7,0x506C,0xB1C8, + + /* 5000h */ + 0xB1C9,0xB1CA,0x0000,0x0000,0xB1CB,0x5066,0x506F,0xB1CC, + 0x0000,0x4152,0xB1CD,0x3844,0xB1CE,0x475C,0xB1CF,0x6047, + 0xB1D0,0x506E,0x455D,0xB1D1,0x5063,0x0000,0x3876,0xB1D2, + 0xB1D3,0x3875,0x5061,0xB1D4,0xB1D5,0xB1D6,0xB1D7,0x3C5A, + 0x0000,0x5069,0xB1D8,0x4A6F,0x434D,0x5065,0x3771,0xB1D9, + 0x5062,0x506A,0x5064,0x4E51,0x506B,0x4F41,0xB1DA,0x0000, + 0xB1DB,0x0000,0xB1DC,0xB1DD,0x0000,0xB1DE,0x3666,0x0000, + 0x0000,0x3770,0x0000,0xB1F6,0x0000,0x0000,0x0000,0x0000, + 0xB1DF,0xB1E0,0xB1E1,0x5070,0x0000,0xB1E2,0xB1E3,0x5071, + 0x5075,0x304E,0xB1E4,0x0000,0xB1E5,0x0000,0xB1E6,0x4A50, + 0x5074,0xB1E7,0xB1E8,0xB1E9,0x0000,0x5073,0x5077,0xB1EA, + 0x0000,0xB1EB,0x5076,0x0000,0x4464,0x0000,0x0000,0xB1EC, + 0xB1ED,0x0000,0xB1EE,0xB1EF,0x0000,0x3772,0xB1F0,0xB1F1, + 0x0000,0x0000,0xB1F2,0x0000,0x5078,0xB1F3,0x0000,0x0000, + 0xB1F4,0xB1F5,0x3C45,0x0000,0x4226,0x4465,0x3676,0x0000, + 0x5079,0x0000,0x0000,0x0000,0x0000,0x3536,0x0000,0x0000, + 0x507A,0xB1F7,0x0000,0xB1F8,0xB1F9,0x507C,0xB1FA,0x0000, + 0x0000,0x0000,0xB1FB,0x0000,0x0000,0x4B35,0xB1FC,0xB1FD, + 0xB1FE,0x3766,0xB2A1,0xB2A2,0xB2A3,0x0000,0xB2A4,0x0000, + 0x3B31,0x4877,0x507B,0xB2A5,0xB2A6,0x0000,0xB2A7,0xB2A8, + 0xB2A9,0xB2AA,0xB2AB,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0xB2AC,0x0000,0x3A45,0x4D43,0x0000,0xB2AD, + 0xB2AE,0x0000,0x507E,0x5123,0x507D,0x3A44,0x0000,0x3D7D, + 0x0000,0xB2AF,0xB2B0,0x0000,0x0000,0xB2B1,0x3739,0x0000, + 0xB2B2,0x0000,0x5124,0xB2B3,0xB2B4,0x364F,0x0000,0xB2B5, + 0x0000,0x5121,0x5122,0x0000,0xB2B6,0x462F,0xB2B7,0x417C, + 0xB2B8,0x3623,0x0000,0xB2B9,0xB2BA,0x4B4D,0x5125,0x0000, + 0xB2BB,0x0000,0x4E3D,0x0000,0xB2BC,0xB2BD,0x5126,0xB2BE, + 0x0000,0x0000,0xB2BF,0x5129,0xB2C0,0x5127,0xB2C1,0x414E, + 0xB2C2,0xB2C3,0x0000,0x0000,0x0000,0x5128,0x512A,0xB2C4, + 0x0000,0xB2C5,0xB2D1,0x0000,0x0000,0x512C,0xB2C6,0x0000, + 0x0000,0x512B,0xB2C7,0x4A48,0x0000,0x0000,0xB2C8,0x0000, + + /* 5100h */ + 0x3537,0x512E,0x512F,0xB2C9,0x322F,0x0000,0xB2CA,0xB2CB, + 0xB2CC,0x512D,0x0000,0xB2CD,0xB2CE,0xB2CF,0xB2D0,0x0000, + 0xB2D2,0x0000,0x3C74,0x0000,0x5132,0x5131,0x5130,0xB2D3, + 0x5056,0xB2D4,0x5133,0xB2D5,0xB2D6,0xB2D7,0xB2D8,0x3D7E, + 0x0000,0x5134,0x0000,0xB2D9,0x0000,0x0000,0x0000,0xB2DA, + 0xB2DB,0x0000,0x4D25,0x0000,0xB2DC,0xB2DD,0x0000,0xB2DE, + 0x0000,0xB2DF,0x4C59,0xB2E0,0xB2E1,0xB2E2,0x0000,0x5136, + 0xB2E3,0xB2E4,0x5135,0x5138,0x5137,0x0000,0x0000,0x5139, + 0x513A,0x3074,0xB2E5,0x3835,0x373B,0x3D3C,0x437B,0x3624, + 0x4068,0x3877,0xB2E6,0x396E,0x513C,0x4C48,0x4546,0xB2E7, + 0x3B79,0x0000,0x513B,0xB2E8,0x513D,0xB2E9,0x0000,0xB2EA, + 0xB2EB,0x0000,0x455E,0x0000,0x3375,0x0000,0x0000,0xB2EC, + 0x0000,0x0000,0x513E,0x0000,0xB2ED,0x467E,0xB2EE,0x0000, + 0x4134,0x5140,0x5141,0x482C,0x3878,0x4F3B,0x5142,0x0000, + 0x0000,0x3626,0x0000,0x0000,0x0000,0x4A3C,0x4236,0x3671, + 0x4535,0x0000,0x0000,0x0000,0x3773,0x0000,0xB2EF,0x0000, + 0x5143,0x0000,0x5144,0xB2F0,0xB2F1,0x4662,0x315F,0x0000, + 0x0000,0x5147,0x3A7D,0xB2F2,0x5146,0x3A46,0xB2F3,0x5148, + 0x666E,0x5149,0x4B41,0x514A,0x0000,0x514B,0x514C,0x3E69, + 0xB2F4,0x3C4C,0x0000,0x0000,0x0000,0xB2F5,0x0000,0x0000, + 0x3427,0xB2F6,0x514F,0xB2F7,0x514D,0x4C3D,0x514E,0x0000, + 0x495A,0x5150,0x5151,0x5152,0x455F,0xB2F8,0x0000,0x0000, + 0x5156,0x5154,0x5155,0x5153,0x3A63,0x5157,0x4C6A,0x4E64, + 0xB2F9,0x0000,0xB2FA,0x0000,0xB2FB,0x5158,0xB2FC,0xB2FD, + 0x0000,0x0000,0xB2FE,0x0000,0x4028,0x5159,0x3D5A,0x0000, + 0xB3A1,0x515A,0x0000,0x437C,0x4E3F,0x4560,0x0000,0xB3A2, + 0x0000,0xB3A3,0xB3A4,0xB3A5,0x0000,0xB3A6,0x5245,0x0000, + 0xB3A7,0x0000,0x0000,0x515B,0x7425,0x3645,0xB3A8,0x0000, + 0x515C,0x4B5E,0xB3A9,0x0000,0x0000,0xB3AA,0x3D68,0x427C, + 0x0000,0x515E,0x4664,0x0000,0x0000,0x515F,0xB3AB,0x0000, + 0x5160,0x332E,0xB3AC,0xB3AD,0xB3AE,0x5161,0x3627,0xB3AF, + 0x464C,0x317A,0x3D50,0x0000,0x0000,0x4821,0x5162,0x0000, + + /* 5200h */ + 0x4561,0xB3B0,0xB3B1,0x3F4F,0x5163,0xB3B2,0x4A2C,0x405A, + 0x3422,0x0000,0x3429,0x5164,0x0000,0x0000,0x5166,0x0000, + 0x0000,0x373A,0xB3B3,0xB3B4,0x5165,0xB3B5,0xB3B6,0x4E73, + 0xB3B7,0x0000,0x0000,0x0000,0x0000,0x3D69,0x0000,0x0000, + 0x0000,0x0000,0xB3B8,0x0000,0x483D,0x4A4C,0x0000,0x5167, + 0xB3B9,0x4D78,0x5168,0x0000,0x0000,0x0000,0x5169,0x0000, + 0x457E,0xB3BA,0xB3BB,0x516A,0x0000,0xB3BC,0x4029,0x3A7E, + 0x3774,0x516B,0x3B49,0x396F,0xB3BD,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x4466,0x516D,0xB3BE,0x0000,0x4227, + 0x0000,0xB3BF,0x3A6F,0x516E,0x516F,0x4130,0x0000,0x516C, + 0x0000,0x0000,0x0000,0x0000,0x5171,0xB3C0,0x4B36,0xB3C1, + 0xB3C2,0x0000,0xB3C3,0x3964,0xB3C4,0x0000,0x5170,0xB3C5, + 0xB3C6,0xB3C7,0x0000,0x3775,0x3A5E,0x476D,0xB3C8,0x0000, + 0x0000,0x5174,0x5172,0x0000,0x0000,0x0000,0xB3C9,0x497B, + 0x3E6A,0x517B,0x3364,0x5175,0x5173,0x414F,0x0000,0xB3CA, + 0xB3CB,0xB3CC,0x0000,0x0000,0x0000,0x5177,0x0000,0x5176, + 0xB3CD,0x0000,0xB3CE,0x3344,0x0000,0xB3CF,0x0000,0x3760, + 0x517C,0x4E2D,0xB3D0,0x0000,0xB3D1,0x5178,0x0000,0x0000, + 0x0000,0x517D,0x517A,0xB3D2,0x5179,0xB3D3,0xB3D4,0xB3D5, + 0xB3D6,0x0000,0xB3D7,0x4E4F,0xB3D8,0x0000,0x0000,0x3879, + 0x3243,0x0000,0x0000,0x4E74,0xB3D9,0xB3DA,0xB3DB,0xB3DC, + 0x0000,0x3D75,0x4558,0x3965,0x5222,0x5223,0x0000,0xB3DD, + 0xB3DE,0x4E65,0x0000,0x0000,0x4F2B,0x5225,0xB3DF,0xB3E0, + 0xB3E1,0x387A,0xB3E2,0xB3E3,0x5224,0xB3E4,0x332F,0x0000, + 0xB3E5,0x5226,0x0000,0x4B56,0xB3E6,0x443C,0xB3E7,0x4D26, + 0xB3E8,0x4A59,0x0000,0x0000,0xB3E9,0x5227,0x0000,0xB3EA, + 0x0000,0xB3EB,0x7055,0x0000,0xB3EC,0x4630,0xB3ED,0x5228, + 0x342A,0x4C33,0x0000,0xB3EE,0xB3EF,0x3E21,0x5229,0x4A67, + 0x522D,0xB3F0,0x402A,0x522A,0x3650,0xB3F1,0x522B,0x342B, + 0xB3F2,0xB3F3,0xB3F4,0x0000,0xB3F5,0x0000,0x0000,0x0000, + 0xB3F6,0xB3F7,0x372E,0x522E,0xB3F8,0x522F,0xB3F9,0xB3FA, + 0x5230,0x5231,0x3C5B,0x0000,0x0000,0x0000,0x387B,0x4C5E, + + /* 5300h */ + 0xB3FB,0x4C68,0x4677,0xB3FC,0x0000,0x4A71,0x5232,0x0000, + 0x5233,0x0000,0xB3FD,0xB3FE,0xB4A1,0x5235,0x0000,0x5237, + 0x5236,0xB4A2,0x0000,0xB4A3,0x0000,0x5238,0x323D,0x4B4C, + 0xB4A4,0x3A7C,0x5239,0xB4A5,0xB4A6,0x4159,0xB4A7,0xB4A8, + 0x3E22,0x3629,0x0000,0x523A,0x0000,0xB4A9,0x0000,0xB4AA, + 0xB4AB,0xB4AC,0x485B,0xB4AD,0xB4AE,0xB4AF,0x0000,0x523B, + 0xB4B0,0x523C,0xB4B1,0x523D,0x0000,0xB4B2,0x0000,0x0000, + 0x523E,0x4924,0x3668,0x3065,0xB4B3,0xB4B4,0xB4B5,0x463F, + 0x523F,0x3D3D,0xB4B6,0x4069,0x0000,0x5241,0x5240,0x3E23, + 0x3861,0x5243,0x483E,0xB4B8,0xB4B7,0x5244,0x0000,0x0000, + 0x0000,0x485C,0x4234,0x426E,0x3628,0x0000,0x0000,0x466E, + 0x4331,0xB4B9,0x476E,0xB4BA,0x4B4E,0x0000,0x5246,0x0000, + 0x406A,0xB4BB,0x0000,0xB4BC,0x0000,0xB4BD,0x3735,0x0000, + 0x0000,0x5247,0x0000,0x0000,0xB4BE,0xB4BF,0x5248,0x312C, + 0x3075,0x346D,0xB4C0,0x4228,0x3551,0x4D71,0x0000,0x524B, + 0x3237,0xB4C1,0x0000,0x524A,0x0000,0x0000,0xB4C2,0x362A, + 0x0000,0x0000,0x524C,0xB4C3,0x4C71,0x0000,0x0000,0xB4C4, + 0xB4C5,0x0000,0x0000,0x0000,0x0000,0x0000,0xB4C6,0x0000, + 0x0000,0x0000,0x0000,0xB4C7,0xB4C8,0x0000,0x524D,0x0000, + 0x4E52,0xB4C9,0x387C,0x0000,0x0000,0xB4CA,0x0000,0x3836, + 0x524E,0xB4CB,0x0000,0x0000,0xB4CC,0x5250,0x524F,0x0000, + 0x3F5F,0x3139,0xB4CD,0xB4CE,0x0000,0x315E,0x5251,0xB4CF, + 0x5252,0x0000,0xB4D0,0x3837,0xB4D1,0xB4D2,0x5253,0xB4D3, + 0xB4D4,0x0000,0xB4D5,0x356E,0x0000,0xB4D6,0x0000,0x0000, + 0xB4D7,0x0000,0x3B32,0x5254,0x0000,0xB4D8,0x0000,0x0000, + 0x4B74,0x3A35,0x355A,0x4D27,0x4150,0x483F,0x3C7D,0xB4D9, + 0x0000,0x0000,0xB4DA,0xB4DB,0x3D47,0xB4DC,0x3C68,0x3C75, + 0x0000,0x3D76,0xB4DD,0x4840,0x0000,0xB4DE,0xB4DF,0x5257, + 0xB4E0,0x3143,0x4151,0x387D,0x3845,0x3667,0xB4E1,0xB4E2, + 0x525B,0x4321,0x427E,0x362B,0x3E24,0x525C,0x525A,0x3244, + 0x4266,0x3C38,0x3B4B,0x3126,0x0000,0xB4E3,0x3370,0x3966, + 0x3B4A,0x0000,0x525D,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 5400h */ + 0x0000,0x525E,0xB4E4,0x3549,0x3346,0x0000,0x0000,0x0000, + 0x3967,0x3548,0x445F,0x3125,0x4631,0x4C3E,0x3921,0x4D79, + 0x4547,0x387E,0x0000,0xB4E5,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0xB4E6,0x372F,0x0000,0x5267,0x0000,0x3663, + 0x4B4A,0xB4E7,0x0000,0x0000,0x0000,0x0000,0x485D,0xB4E8, + 0xB4E9,0x5266,0xB4EA,0x345E,0x5261,0x5262,0x5264,0xB4EB, + 0x0000,0xB4EC,0x0000,0x0000,0xB4ED,0xB4EE,0x5265,0x0000, + 0x355B,0x3F61,0x0000,0x4A2D,0x5263,0x525F,0x3863,0x0000, + 0x5260,0x0000,0x4F24,0xB4EF,0xB4F0,0x0000,0x4A72,0xB4F1, + 0x4468,0x3862,0x3970,0x0000,0x0000,0xB4F2,0x5268,0xB4F3, + 0x0000,0x465D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB4F4,0x526C, + 0x0000,0x0000,0xB4F5,0x0000,0xB4F6,0x0000,0xB4F7,0xB4F8, + 0x3C7E,0xB4F9,0x3C76,0xB4FA,0x0000,0xB4FB,0xB4FC,0x0000, + 0x526F,0x526D,0x0000,0x4C23,0xB4FD,0x526A,0x5273,0x526E, + 0x0000,0x0000,0x0000,0x5271,0x3846,0x4C3F,0x0000,0xB4FE, + 0x5272,0xB5A1,0x0000,0xB5A2,0x5274,0xB5A3,0x5276,0x0000, + 0xB5A4,0xB5A5,0x0000,0x3A70,0x4F42,0xB5A6,0x526B,0x5269, + 0x5275,0xB5A7,0x5270,0x0000,0x0000,0xB5A8,0xB5A9,0x0000, + 0x0000,0x0000,0x0000,0x0000,0xB5AA,0x0000,0x0000,0xB5AB, + 0x0000,0xB5AC,0x5278,0x0000,0x5323,0x527A,0xB5AD,0xB5AE, + 0x527E,0xB5AF,0xB5B0,0x5321,0x527B,0xB5B1,0xB5B2,0x533E, + 0x0000,0xB5B3,0x3A69,0x3331,0x0000,0x0000,0x0000,0xB5B4, + 0x5279,0xB5B5,0xB5B6,0xB5B7,0x5325,0x3076,0x5324,0xB5B8, + 0x3025,0x494A,0x5322,0x0000,0x527C,0x0000,0xB5B9,0x5277, + 0x527D,0x3A48,0xB5BA,0x0000,0x0000,0xB5BB,0xB5BC,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x5326,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0xB5BD,0x3077,0x532F,0x0000,0x0000,0x5327,0x5328,0x0000, + 0x3E25,0x4B69,0xB5BE,0x0000,0xB5BF,0x532D,0x532C,0xB5C0, + 0x0000,0x0000,0x452F,0x0000,0x0000,0x0000,0xB5C1,0x0000, + 0x0000,0x0000,0x532E,0x0000,0xB5C2,0x532B,0xB5C3,0xB5C4, + + /* 5500h */ + 0xB5C5,0xB5C6,0x0000,0x0000,0x3134,0xB5C7,0x3A36,0x3F30, + 0xB5C8,0xB5C9,0x0000,0x0000,0xB5CA,0xB5CB,0xB5CC,0x5329, + 0x4562,0x0000,0x0000,0x0000,0x532A,0xB5CD,0x3022,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0xB5CE,0xB5CF,0x0000,0x0000,0x5334,0x4D23, + 0x0000,0x3E27,0xB5D0,0x533A,0x0000,0xB5D1,0xB5D2,0x0000, + 0x5339,0x5330,0x0000,0xB5D3,0xB5D4,0xB5D5,0x4243,0x0000, + 0x5331,0xB5D6,0x0000,0x0000,0x426F,0x5336,0x3E26,0xB5D7, + 0x0000,0xB5D8,0xB5D9,0x0000,0x5333,0xB5DA,0x0000,0x4C64, + 0xB5DB,0xB5DC,0x0000,0x373C,0x0000,0x0000,0x5337,0x5338, + 0xB5DD,0x0000,0xB5DE,0xB5DF,0x5335,0x533B,0xB5E0,0x0000, + 0xB5E1,0xB5E2,0x0000,0x5332,0xB5E3,0x0000,0xB5E4,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x5341,0x5346,0x0000,0x5342,0xB5E5, + 0x533D,0xB5E6,0xB5E7,0x5347,0x4131,0x0000,0xB5E8,0x5349, + 0xB5E9,0x3922,0x533F,0x437D,0x0000,0x0000,0xB5EA,0xB5EB, + 0x0000,0xB5EC,0xB5ED,0xB5EE,0xB5EF,0x0000,0x0000,0xB5F0, + 0x5343,0x533C,0x342D,0x0000,0x346E,0x3365,0x5344,0x5340, + 0x0000,0x0000,0x0000,0xB5F1,0xB5F2,0x0000,0x0000,0x3776, + 0x534A,0x5348,0x4153,0x354A,0x362C,0xB5F3,0x5345,0x0000, + 0x3674,0x0000,0xB5F4,0x0000,0x0000,0x0000,0x3144,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB5F5, + 0x0000,0xB5F6,0x0000,0xB5F7,0x534E,0x534C,0xB5F8,0x5427, + 0x0000,0xB5F9,0x0000,0xB5FA,0xB5FB,0x0000,0xB5FC,0x0000, + 0x0000,0xB5FD,0xB5FE,0xB6A1,0x5351,0x0000,0x0000,0xB6A2, + 0xB6A3,0x0000,0x534B,0xB6A4,0x534F,0x0000,0xB6A5,0x534D, + 0x0000,0x0000,0xB6A6,0x3B4C,0x5350,0x0000,0x0000,0x0000, + 0x0000,0xB6A7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB6A8,0x5353, + 0x0000,0x5358,0x0000,0x0000,0x0000,0x5356,0x5355,0xB6A9, + + /* 5600h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0xB6AA,0x4332,0x0000, + 0xB6AB,0x3245,0xB6AC,0x0000,0x0000,0xB6AD,0xB6AE,0xB6AF, + 0xB6B0,0xB6B1,0xB6B2,0x0000,0x5352,0x0000,0x5354,0x3E28, + 0x3133,0xB6B3,0x0000,0x5357,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x325E,0x0000,0x0000,0xB6B4,0x0000,0x0000,0x5362, + 0xB6B5,0x3E7C,0x535E,0xB6B6,0x535C,0xB6B7,0x535D,0xB6B8, + 0x535F,0xB6B9,0x0000,0xB6BA,0xB6BB,0xB6BC,0x0000,0xB6BD, + 0xB6BE,0xB6BF,0x313D,0xB6C0,0xB6C1,0x0000,0xB6C2,0x0000, + 0x0000,0xB6C3,0x0000,0xB6C4,0x4139,0xB6C5,0x5359,0xB6C6, + 0x535A,0x0000,0x0000,0x0000,0xB6C7,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x337A,0x0000,0x0000,0xB6C8,0x0000, + 0xB6C9,0xB6CA,0xB6CB,0xB6CC,0x5361,0x0000,0xB6CD,0x0000, + 0x346F,0xB6CE,0x5364,0x5360,0x5363,0xB6CF,0x0000,0xB6D0, + 0x0000,0xB6D1,0xB6D2,0x0000,0x4A2E,0xB6D3,0x0000,0x0000, + 0x4655,0x0000,0x4838,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x5366,0x0000,0x0000,0x0000,0xB6D4,0xB6D5,0x5365,0x3345, + 0xB6D6,0x0000,0x5367,0xB6D7,0xB6D8,0x0000,0x0000,0x536A, + 0x0000,0x0000,0x0000,0x0000,0x5369,0xB6D9,0x0000,0x0000, + 0x0000,0xB6DA,0xB6DB,0x0000,0x0000,0xB6DC,0xB6DD,0xB6DE, + 0x5368,0x0000,0x4739,0x0000,0x0000,0x536B,0xB6DF,0xB6E0, + 0xB6E1,0xB6E2,0x0000,0xB6E3,0xB6E4,0xB6E5,0x536C,0x0000, + 0x0000,0xB6E6,0x0000,0xB6E7,0x536E,0x0000,0x536D,0xB6E8, + 0x0000,0x0000,0x0000,0x0000,0x5370,0x0000,0xB6E9,0x0000, + 0x5373,0x5371,0x536F,0x5372,0x0000,0xB6EA,0x0000,0x0000, + 0x5374,0xB6EB,0xB6EC,0xB6ED,0xB6F0,0xB6F1,0x5375,0xB6EE, + 0xB6EF,0x5376,0x0000,0x5377,0x0000,0x0000,0x0000,0x5378, + 0x5145,0xB6F2,0x3C7C,0x3B4D,0xB6F3,0xB6F4,0x3273,0xB6F5, + 0x3078,0xB6F6,0x0000,0x4344,0xB6F7,0xB6F8,0xB6F9,0xB6FA, + 0xB6FB,0x0000,0x0000,0xB6FD,0x0000,0xB6FE,0x5379,0x0000, + 0x3A24,0xB6FC,0x304F,0x3F5E,0x0000,0x0000,0xB7A1,0xB7A2, + 0x0000,0x537A,0x3847,0x0000,0x0000,0x3971,0x0000,0x537C, + + /* 5700h */ + 0x537B,0xB7A3,0xB7A4,0x4A60,0x537D,0x0000,0x0000,0xB7A5, + 0x5421,0x537E,0xB7A6,0x5422,0xB7A7,0x5423,0x0000,0x3777, + 0x0000,0xB7A8,0x3160,0x5424,0x0000,0xB7A9,0x5426,0x0000, + 0x5425,0x0000,0xB7AA,0xB7AB,0x5428,0xB7AC,0x0000,0x455A, + 0xB7AD,0x0000,0xB7AE,0xB7AF,0xB7B0,0xB7B1,0x5429,0x3035, + 0x3A5F,0xB7B2,0xB7B3,0x0000,0xB7B4,0x373D,0xB7B5,0xB7B6, + 0x434F,0x0000,0x0000,0xB7B7,0xB7B8,0x0000,0x0000,0x542A, + 0x542B,0x0000,0x0000,0x542D,0x0000,0xB7B9,0xB7BA,0xB7BB, + 0x542E,0x0000,0x3A64,0x0000,0x0000,0xB7BC,0xB7BD,0x3651, + 0x0000,0x0000,0x4B37,0x0000,0xB7BE,0xB7BF,0x542C,0x542F, + 0x3A41,0x3923,0xB7C0,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x5433,0xB7C1,0x0000,0x3A25,0xB7C2,0x4333,0xB7C3, + 0xB7C4,0x5430,0x445A,0xB7C5,0x0000,0xB7C6,0xB7C7,0xB7C8, + 0xB7C9,0xB7CA,0x0000,0xB7CB,0xB7CC,0xB7CD,0x0000,0xB7CE, + 0x0000,0xB7CF,0xB7D0,0xB7D1,0xB7D2,0x0000,0xB7D3,0x5434, + 0x0000,0xB7D4,0x3F62,0xB7D5,0x0000,0x0000,0x0000,0x0000, + 0x5432,0x5435,0x0000,0x373F,0xB7D6,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x5436,0xB7D7,0xB7E0,0x0000,0xB7D8, + 0x0000,0xB7D9,0xB7DA,0x0000,0xB7DB,0xB7DC,0xB7DD,0xB7DE, + 0x5437,0xB7DF,0x3924,0x3340,0x5439,0x0000,0x0000,0xB7E1, + 0xB7E2,0xB7E3,0x543A,0x0000,0xB7E4,0x0000,0x0000,0x0000, + 0x543B,0x0000,0x0000,0x5438,0x0000,0x0000,0x0000,0x0000, + 0xB7E5,0x0000,0x0000,0x0000,0x0000,0xB7E6,0x0000,0x0000, + 0x5431,0x0000,0x0000,0x543C,0x0000,0x0000,0x543D,0xB7E7, + 0xB7E8,0x0000,0x0000,0x4B64,0xB7E9,0x0000,0x3E6B,0xB7EA, + 0x0000,0x0000,0x543F,0x5440,0x543E,0xB7EB,0x5442,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x4738,0xB7EC,0xB7ED,0x3068, + 0x4956,0xB7FE,0x0000,0x5443,0xB7EE,0x0000,0xB7EF,0xB7F0, + 0x0000,0xB7F1,0x0000,0x0000,0x0000,0xB7F2,0x0000,0x0000, + 0xB7F3,0x0000,0x0000,0x0000,0x3E7D,0xB7F4,0xB7F5,0x3C39, + 0xB7F6,0x475D,0x3470,0x0000,0x3A6B,0xB7F7,0xB7F8,0xB7F9, + + /* 5800h */ + 0x4B59,0x0000,0x4632,0xB7FA,0xB7FB,0x3778,0x424F,0x0000, + 0xB7FC,0xB7FD,0x5441,0x5444,0xB8A1,0xB8A2,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x4244,0x0000,0x0000, + 0x0000,0x5445,0x0000,0xB8A3,0x0000,0x5446,0xB8A4,0xB8A5, + 0xB8A6,0x5448,0x0000,0x0000,0x4469,0x0000,0xB8A7,0xB8A8, + 0x0000,0x0000,0x342E,0x0000,0x0000,0xB8A9,0x0000,0x7421, + 0x3161,0x4A73,0xB8AA,0x0000,0x3E6C,0x4548,0x0000,0x0000, + 0x0000,0xB8AB,0x3A66,0x0000,0x0000,0x544E,0x0000,0xB8AC, + 0x4A3D,0x4E5D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0xB8AD,0x3274,0x544A,0xB8AE,0xB8AF,0x0000,0xB8B0, + 0xB8B1,0x413A,0x544D,0x0000,0x4563,0xB8B2,0x0000,0x4549, + 0x4564,0x4839,0x444D,0x0000,0x0000,0x0000,0x3A49,0xB8B3, + 0x0000,0xB8B4,0x5449,0x0000,0xB8B5,0x0000,0x0000,0xB8B6, + 0xB8B7,0x3176,0x0000,0x4536,0x0000,0x0000,0x0000,0x0000, + 0x544B,0x0000,0x5447,0x0000,0x0000,0x3F50,0x0000,0x0000, + 0xB8B8,0x544F,0x0000,0x0000,0xB8B9,0x0000,0x3D4E,0xB8BA, + 0xB8BB,0xB8BC,0x0000,0x362D,0x0000,0x5450,0x0000,0xB8BD, + 0xB8BE,0xB8BF,0xB8C0,0x0000,0xB8C1,0xB8C2,0x0000,0xB8C3, + 0xB8C4,0x0000,0x0000,0x4A68,0xB8C5,0x0000,0xB8C6,0x417D, + 0x0000,0x0000,0x0000,0x0000,0x4446,0xB8C7,0x0000,0x5452, + 0xB8C8,0xB8C9,0xB8CA,0x0000,0x0000,0x0000,0xB8CB,0x0000, + 0x4B4F,0xB8CC,0x0000,0x5453,0x0000,0x0000,0x5458,0x0000, + 0x0000,0xB8CD,0xB8CE,0x4A2F,0x0000,0x0000,0x0000,0x0000, + 0x5457,0x5451,0x5454,0x5456,0xB8D0,0x0000,0x3A26,0x0000, + 0x0000,0x4A49,0xB8D1,0x0000,0xB8CF,0x5459,0x0000,0x4345, + 0xB8D2,0x0000,0x3275,0x0000,0x3E6D,0xB8D3,0xB8D4,0x0000, + 0xB8D5,0x545B,0xB8D6,0x545A,0xB8D7,0x3968,0xB8D8,0x545C, + 0x545E,0x545D,0xB8D9,0x0000,0x5460,0xB8DA,0x5455,0x5462, + 0x0000,0xB8DB,0xB8DC,0x0000,0x5461,0x545F,0x0000,0x0000, + 0x0000,0xB8DD,0x0000,0x3B4E,0x3F51,0x0000,0x4154,0x5463, + 0x403C,0x306D,0x4764,0xB8DE,0x0000,0x0000,0x0000,0x445B, + 0x0000,0x5465,0x5464,0x5466,0x5467,0x5468,0x0000,0x0000, + + /* 5900h */ + 0x0000,0x0000,0x5469,0x0000,0x0000,0xB8DF,0xB8E0,0x0000, + 0x0000,0x4A51,0x546A,0xB8E1,0xB8E2,0x0000,0x0000,0x3246, + 0x546B,0x0000,0xB8E3,0xB8E4,0xB8E5,0x4D3C,0x3330,0x0000, + 0x5249,0x3D48,0x423F,0x546C,0x4C6B,0xB8E7,0x0000,0x0000, + 0x0000,0xB8E8,0x4C34,0xB8E9,0xB8EA,0x546E,0x0000,0x4267, + 0xB8EB,0x4537,0x4240,0x4957,0x546F,0x5470,0x317B,0xB8EC, + 0xB8ED,0x3C3A,0x5471,0xB8EE,0x0000,0xB8EF,0xB8F0,0x3050, + 0x5472,0x0000,0x0000,0x0000,0x0000,0x0000,0x5473,0xB8F1, + 0x0000,0x0000,0x0000,0xB8F2,0x3162,0x0000,0xB8F3,0x3471, + 0x4660,0x4A74,0x0000,0x0000,0x0000,0x0000,0x5477,0x4155, + 0x5476,0x3740,0xB8F4,0xB8F5,0x4B5B,0x5475,0x0000,0x4565, + 0x5479,0xB8F6,0x5478,0xB8F7,0x0000,0xB8F8,0xB8F9,0xB8FA, + 0x547B,0xB8FB,0x547A,0xB8FC,0x0000,0x317C,0x0000,0x547C, + 0x3E29,0x547E,0x4325,0xB8FD,0x547D,0xB8FE,0x4A33,0xB9A1, + 0x0000,0x0000,0xB9A2,0x3D77,0x455B,0xB9A3,0xB9A4,0x0000, + 0x5521,0xB9A5,0x0000,0xB9A6,0xB9A7,0x3925,0x0000,0x0000, + 0x0000,0x5522,0x4721,0x485E,0x4C51,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x4725,0xB9A8,0xB9A9,0x552B,0xB9AA,0x0000, + 0x0000,0x0000,0xB9AB,0x3538,0x0000,0xB9AC,0x4D45,0xB9AD, + 0x0000,0x4C2F,0x0000,0x562C,0x0000,0x5523,0x0000,0xB9AE, + 0x0000,0x0000,0x0000,0x5526,0xB9AF,0x4245,0x0000,0xB9B0, + 0x4B38,0x0000,0x0000,0x0000,0x454A,0xB9B1,0xB9B2,0xB9B3, + 0xB9B4,0x0000,0x5527,0xB9B5,0x0000,0x0000,0x0000,0xB9B6, + 0x0000,0x4B65,0xB9B7,0x3A4A,0xB9B8,0x0000,0x3E2A,0x0000, + 0x0000,0xB9B9,0x0000,0xB9BA,0xB9BB,0x0000,0x5528,0x0000, + 0xB9BC,0x3B50,0xB9BD,0x3B4F,0x0000,0xB9BE,0x0000,0x0000, + 0x3039,0x3848,0xB9BF,0x402B,0x3051,0x0000,0x0000,0x0000, + 0x0000,0x552C,0x552D,0x0000,0x552A,0xB9C0,0xB9C1,0xB9C2, + 0x0000,0x0000,0x0000,0xB9C3,0xB9C4,0x3138,0x342F,0xB9C5, + 0x5529,0x0000,0x4C45,0x4931,0x0000,0x0000,0xB9C6,0xB9C7, + 0x0000,0xB9C8,0xB9C9,0x0000,0xB9CA,0x0000,0x3028,0xB9CB, + 0x0000,0x0000,0x0000,0x3079,0x0000,0x0000,0x0000,0x3B51, + + /* 5A00h */ + 0xB9CC,0x3052,0x0000,0x3023,0xB9CD,0x0000,0x0000,0x0000, + 0x0000,0x5532,0x0000,0x0000,0xB9CE,0xB9CF,0xB9D0,0x0000, + 0x0000,0x5530,0xB9D1,0xB9D2,0x0000,0x0000,0x0000,0x0000, + 0x4C3C,0x0000,0x5533,0x0000,0x5531,0x0000,0xB9D3,0x552F, + 0x3F31,0x0000,0x0000,0xB9D4,0xB9D5,0x552E,0x0000,0xB9D6, + 0xB9D7,0x4A5A,0xB9D8,0x0000,0x0000,0xB9D9,0x0000,0x3864, + 0xB9DA,0x0000,0x0000,0x0000,0x0000,0x5537,0x5538,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x3E2B,0x0000,0x0000,0x0000, + 0x5534,0x4F2C,0x0000,0x0000,0xB9DB,0xB9DC,0x474C,0xB9DD, + 0xB9DE,0x5536,0x0000,0x0000,0xB9DF,0x0000,0x0000,0x0000, + 0xB9E0,0x0000,0x0000,0x0000,0x0000,0xB9E1,0x0000,0x0000, + 0x0000,0x0000,0x3A27,0x0000,0x0000,0x0000,0xB9E2,0x0000, + 0x0000,0x0000,0x5539,0xB9E3,0x0000,0xB9E4,0x4958,0xB9E5, + 0x0000,0x0000,0x553A,0x0000,0x5535,0xB9E6,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xB9E7, + 0x0000,0x0000,0xB9E8,0xB9E9,0x0000,0x0000,0xB9EA,0x4C3B, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0xB9EB,0x0000,0x0000,0x0000,0x0000, + 0xB9EC,0x0000,0x475E,0xB9ED,0x0000,0x0000,0xB9EE,0x0000, + 0x0000,0xB9EF,0x553B,0x4932,0xB9F0,0x0000,0xB9F1,0xB9F2, + 0xB9F3,0x0000,0xB9F4,0x0000,0x0000,0x0000,0x0000,0xB9F5, + 0x0000,0x0000,0x0000,0x0000,0xB9F6,0x0000,0x0000,0x0000, + 0x0000,0xB9F7,0xB9F8,0xB9F9,0x0000,0xB9FA,0x0000,0x0000, + 0xB9FB,0x0000,0xB9FC,0xB9FD,0x553C,0x5540,0x553D,0xB9FE, + 0x0000,0x3247,0x553F,0x0000,0xBAA1,0x0000,0xBAA2,0x0000, + 0xBAA3,0x3C3B,0x0000,0x553E,0x3779,0x0000,0x0000,0xBAA4, + 0x554C,0x0000,0x0000,0x0000,0x0000,0x0000,0x5545,0x5542, + 0x0000,0x0000,0xBAA5,0x0000,0xBAA6,0x0000,0x0000,0x0000, + 0xBAA7,0x4364,0x0000,0x5541,0x0000,0xBAA8,0x5543,0x0000, + 0x0000,0x5544,0xBAA9,0x0000,0x0000,0x0000,0xBAAA,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0xBAAB,0xBAAC,0x0000, + 0x0000,0x0000,0x5546,0x5547,0x0000,0xBAAD,0x0000,0x0000, + + /* 5B00h */ + 0xBAAE,0xBAAF,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0xBAB0,0x3472,0x0000,0x5549,0x5548,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x554A,0xBAB1, + 0x0000,0xBAB3,0x0000,0xBAB4,0x0000,0xBAB5,0x0000,0x0000, + 0x0000,0xBAB6,0x3E6E,0x0000,0x0000,0xBAB7,0x0000,0x0000, + 0x0000,0x0000,0x554D,0x0000,0x445C,0xBAB8,0x0000,0x0000, + 0x3145,0x0000,0x554B,0x0000,0xBAB2,0x0000,0x554E,0x0000, + 0xBAB9,0x0000,0x0000,0x0000,0x0000,0x0000,0x554F,0x0000, + 0x5552,0xBABA,0x0000,0x5550,0x0000,0x5551,0x0000,0x0000, + 0x0000,0x0000,0x0000,0xBABB,0xBABC,0x0000,0x0000,0x0000, + 0x3B52,0x5553,0xBABD,0x0000,0x3926,0x5554,0xBABE,0x3B7A, + 0x4238,0x0000,0x5555,0x5556,0x3B5A,0x3927,0xBABF,0x4C52, + 0x0000,0x0000,0x0000,0x3528,0x3849,0x5557,0x3358,0x0000, + 0xBAC0,0x5558,0x0000,0x4239,0x0000,0x0000,0xBAC1,0xBAC2, + 0x5559,0x5623,0x0000,0x555A,0x0000,0x555B,0x0000,0x0000, + 0x555C,0x0000,0x555E,0x0000,0xBAC3,0xBAC4,0xBAC5,0xBAC6, + 0x555F,0xBAC7,0x0000,0x5560,0xBAC8,0x4270,0xBAC9,0x3127, + 0x3C69,0x3042,0xBACA,0x4157,0x3430,0x3C35,0xBACB,0x3928, + 0xBACC,0xBACD,0x0000,0xBACE,0xBACF,0x4566,0xBAD0,0x3D21, + 0x3431,0x4368,0x446A,0x3038,0x3539,0x4A75,0x0000,0x3C42, + 0x0000,0x0000,0x3552,0x406B,0x3C3C,0x4D28,0x5561,0x0000, + 0xBAD1,0xBAD2,0x0000,0x0000,0xBAD3,0xBAD4,0x355C,0xBAD5, + 0x3A4B,0xBAD6,0xBAD7,0x3332,0x3163,0x3E2C,0x3248,0xBAD8, + 0x5562,0x4D46,0xBAD9,0x0000,0xBADA,0x0000,0x0000,0x3D49, + 0xBADB,0xBADC,0x3C64,0x5563,0x3473,0x4652,0x4C29,0x5564, + 0x0000,0x5565,0x0000,0x0000,0x4959,0xBADD,0x0000,0xBADE, + 0x5567,0x0000,0x3428,0x3677,0x5566,0x0000,0xBADF,0xBAE0, + 0xBAE1,0xBAE2,0xBAE3,0x3432,0x0000,0x3F32,0x556B,0x3B21, + 0xBAE4,0x3249,0x556A,0x0000,0x5568,0x556C,0x5569,0x472B, + 0x5C4D,0x3F33,0x0000,0x556D,0x0000,0x0000,0x4E40,0xBAE5, + 0x556E,0xBAE6,0x0000,0x5570,0xBAE7,0x437E,0x556F,0x0000, + 0x4023,0x0000,0x3B7B,0x0000,0x0000,0xBAE8,0x4250,0x3C77, + + /* 5C00h */ + 0x0000,0x4975,0x406C,0x0000,0x3C4D,0x5571,0x3E2D,0x5572, + 0x5573,0x3053,0x423A,0x3F52,0xBAE9,0x5574,0x4633,0x3E2E, + 0x0000,0x3E2F,0x0000,0x5575,0x0000,0x0000,0x406D,0xBAEA, + 0x0000,0x0000,0x3E30,0x0000,0x0000,0x0000,0xBAEB,0xBAEC, + 0x5576,0x0000,0x5577,0xBAED,0x4C60,0x0000,0xBAEE,0x0000, + 0x5578,0xBAEF,0x0000,0xBAF0,0xBAF1,0x3646,0xBAF2,0x0000, + 0xBAF3,0x3D22,0xBAF4,0x0000,0x0000,0xBAF5,0xBAF6,0x0000, + 0x5579,0x557A,0x3C5C,0x3F2C,0x4674,0x3F54,0x4878,0x4722, + 0x3649,0x557B,0x0000,0x0000,0x0000,0x356F,0x557C,0x0000, + 0x367E,0x0000,0x464F,0x3230,0x0000,0x3B53,0x557D,0x5622, + 0x5621,0x367D,0x0000,0x557E,0x0000,0x4538,0x0000,0x0000, + 0x0000,0xBAF7,0xBAF8,0x0000,0xBAF9,0x0000,0x4230,0x0000, + 0x454B,0x3C48,0xBAFA,0xBAFB,0x4158,0x4D7A,0x0000,0xBAFC, + 0xBAFD,0xBAFE,0x0000,0x0000,0x5624,0xBBA1,0x5625,0x4656, + 0xBBA2,0x3B33,0x0000,0x0000,0xBBA3,0xBBA4,0x5627,0x0000, + 0x0000,0x5628,0xBBA5,0xBBA6,0xBBA7,0xBBA8,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xBBA9, + 0xBBAA,0x0000,0xBBAB,0x0000,0x5629,0x0000,0x0000,0xBBAC, + 0x3474,0x562A,0xBBAD,0x0000,0x562B,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0xBBAE,0x0000,0xBBAF, + 0xBBB0,0x322C,0xBBB1,0xBBB2,0x0000,0x0000,0xBBB3,0x0000, + 0x413B,0x3464,0xBBB4,0x562D,0x4C28,0x0000,0x0000,0x0000, + 0x0000,0x4252,0xBBB5,0x3359,0xBBB6,0xBBB7,0x562F,0x5631, + 0x345F,0x0000,0xBBB8,0x562E,0x5630,0x0000,0x5633,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x5632,0x0000,0x5634, + 0x0000,0xBBB9,0x0000,0xBBBA,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0xBBBB,0x0000,0x0000,0x0000,0x0000,0xBBBD, + 0x0000,0x5635,0x0000,0x0000,0x0000,0xBBBC,0x0000,0x0000, + 0x463D,0x362E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x3265,0x5636,0x563B,0x0000,0x0000,0x5639,0xBBBE,0x4A77, + 0x4A76,0xBBBF,0xBBC0,0x0000,0xBBC1,0x0000,0x4567,0x0000, + 0x0000,0x0000,0x5638,0x3D54,0x0000,0x5637,0x0000,0x0000, + + /* 5D00h */ + 0x0000,0xBBC2,0x0000,0x0000,0x0000,0x0000,0xBBC3,0x3F72, + 0x0000,0x0000,0x0000,0x563C,0x0000,0xBBC4,0x3A6A,0x0000, + 0x0000,0x5642,0xBBC5,0x0000,0x5643,0x563D,0x3333,0x563E, + 0x5647,0x5646,0x5645,0x5641,0x0000,0x0000,0x0000,0x5640, + 0x0000,0x0000,0x5644,0xBBC7,0xBBC8,0x0000,0xBBC9,0xBBCA, + 0x0000,0x4A78,0x0000,0xBBC6,0x0000,0x0000,0x0000,0x0000, + 0x0000,0xBBCB,0x0000,0x0000,0xBBCC,0x0000,0x0000,0x0000, + 0x0000,0xBBCD,0x0000,0x0000,0x0000,0xBBCE,0x0000,0xBBCF, + 0x0000,0x0000,0xBBD0,0xBBD1,0x0000,0x0000,0xBBD2,0x0000, + 0xBBD3,0x0000,0xBBD7,0x564B,0x5648,0x0000,0x564A,0x0000, + 0x4D72,0xBBD5,0x5649,0x0000,0x0000,0xBBD4,0x0000,0x0000, + 0x0000,0xBBD6,0x0000,0x0000,0x563F,0x0000,0x0000,0xBBD8, + 0xBBD9,0xBBDA,0xBBDB,0x0000,0xBBDC,0x0000,0x0000,0x0000, + 0x0000,0x3F73,0xBBDD,0x0000,0x564C,0xBBDE,0x0000,0x3A37, + 0xBBDF,0x0000,0x0000,0x564D,0x0000,0x0000,0x564E,0x0000, + 0x0000,0xBBE0,0xBBE1,0x0000,0x0000,0x0000,0xBBE2,0xBBE3, + 0x0000,0xBBE4,0x5651,0xBBE5,0x5650,0x0000,0x0000,0x564F, + 0xBBE6,0x0000,0xBBE7,0x4568,0x563A,0x0000,0x0000,0x0000, + 0x5657,0x0000,0xBBE8,0xBBE9,0xBBEA,0xBBEB,0x0000,0x0000, + 0x0000,0xBBEC,0x0000,0xBBED,0x0000,0x5653,0x0000,0xBBEE, + 0xBBEF,0x0000,0x5652,0x0000,0x0000,0x0000,0x0000,0xBBF0, + 0x0000,0x0000,0x0000,0xBBF1,0x5654,0x0000,0x5655,0x0000, + 0xBBF2,0x0000,0xE6F4,0x0000,0xBBF3,0x0000,0x0000,0x5658, + 0xBBF4,0xBBF5,0x4E66,0x0000,0x5659,0x5656,0x0000,0x0000, + 0x0000,0x0000,0x0000,0xBBF6,0x0000,0x0000,0x0000,0xBBF7, + 0x0000,0x565A,0x0000,0xBBF8,0x3460,0x565B,0xBBFA,0x0000, + 0xBBF9,0x0000,0x565D,0x565C,0x0000,0x0000,0x565E,0x0000, + 0xBBFB,0xBBFC,0x0000,0x565F,0x0000,0x406E,0x3D23,0x0000, + 0xBBFD,0x3D64,0x0000,0x4163,0xBBFE,0x3929,0x3A38,0x392A, + 0x3570,0xBCA1,0x0000,0x5660,0x0000,0x0000,0x3A39,0x0000, + 0x0000,0x384A,0x5661,0x4C26,0x4743,0x5662,0x0000,0x392B, + 0xBCA2,0xBCA3,0x0000,0x342C,0x0000,0x4327,0x3652,0x0000, + + /* 5E00h */ + 0xBCA4,0x0000,0x3B54,0x495B,0x0000,0x0000,0x4841,0xBCA5, + 0x0000,0x0000,0x0000,0x5663,0x3475,0xBCA6,0x0000,0x0000, + 0x0000,0x5666,0xBCA7,0x0000,0xBCA8,0xBCA9,0x4421,0x0000, + 0xBCAA,0x5665,0x5664,0x5667,0x0000,0x446B,0x0000,0xBCAB, + 0xBCAC,0x0000,0x0000,0x0000,0x0000,0x3F63,0x0000,0x0000, + 0xBCAE,0x0000,0x0000,0x3B55,0x0000,0x404A,0xBCAD,0x4253, + 0x3522,0x0000,0xBCAF,0x4422,0x0000,0xBCB0,0x5668,0x5669, + 0x3E6F,0x0000,0x0000,0x0000,0x0000,0x4B39,0xBCB1,0x0000, + 0x566C,0x0000,0x0000,0x566B,0x566A,0x497D,0x0000,0x5673, + 0x0000,0xBCB4,0x0000,0xBCB2,0x4B5A,0x0000,0x566D,0x0000, + 0xBCB3,0xBCB5,0x0000,0x0000,0x566F,0x4B6B,0xBCB6,0x566E, + 0xBCB7,0x0000,0x0000,0xBCB8,0xBCB9,0x0000,0xBCBA,0x5670, + 0x0000,0x4828,0x5671,0x4A3E,0x5672,0x0000,0x0000,0x0000, + 0xBCBB,0x0000,0xBCBC,0xBCBD,0xBCBE,0xBCBF,0xBCC0,0x0000, + 0xBCC1,0x0000,0x3433,0x4A3F,0x472F,0x5674,0x5675,0x0000, + 0x392C,0x3434,0x5676,0x3838,0x4D44,0x4D29,0x3476,0x5678, + 0xBCC2,0x4423,0x0000,0x392D,0x3E31,0x0000,0x0000,0x485F, + 0x0000,0x0000,0x3E32,0xBCC3,0x0000,0x0000,0xBCC4,0x3D78, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x446C,0x4A79,0x4539, + 0x0000,0x0000,0x392E,0x0000,0x495C,0x0000,0x0000,0x0000, + 0x5679,0x0000,0xBCC5,0x0000,0xBCC6,0xBCC7,0x4559,0x3A42, + 0xBCC8,0x0000,0xBCC9,0x384B,0xBCCA,0x446D,0x0000,0x0000, + 0x0000,0xBCCB,0x0000,0xBCCC,0x0000,0x3043,0x3D6E,0x392F, + 0x4D47,0x0000,0x0000,0x0000,0x0000,0xBCCD,0xBCCE,0xBCCF, + 0x0000,0x567A,0x567B,0x4751,0x0000,0x0000,0xBCD0,0x0000, + 0x567C,0x4E77,0x4F2D,0xBCD2,0xBCD1,0x0000,0xBCD3,0x567E, + 0x567D,0xBCD4,0xBCD5,0x3347,0xBCD6,0xBCD7,0x5721,0x0000, + 0x0000,0x0000,0x5724,0x5725,0xBCD8,0x5723,0xBCD9,0x4940, + 0x3E33,0x5727,0x5726,0x5722,0x0000,0xBCDA,0x0000,0x0000, + 0x5728,0x5729,0x0000,0xBCDB,0x572A,0x0000,0x0000,0x0000, + 0x572D,0x572B,0x0000,0x572C,0x572E,0x0000,0x3164,0x446E, + 0x572F,0x0000,0x377A,0x3276,0x4736,0x0000,0x5730,0x467B, + + /* 5F00h */ + 0x0000,0x4A5B,0xBCDC,0x5731,0x4F2E,0x0000,0xBCDD,0xBCDE, + 0xBCDF,0x5732,0x4A40,0x5735,0x5021,0x5031,0xBCE0,0x3C30, + 0x4675,0x5736,0x0000,0x355D,0x4424,0x307A,0x5737,0x4A26, + 0x3930,0xBCE1,0x0000,0x4350,0xBCE2,0xBCE3,0x0000,0x446F, + 0x0000,0xBCE4,0xBCE5,0xBCE6,0xBCE7,0x4C6F,0x3839,0x384C, + 0xBCE8,0x5738,0x0000,0xBCE9,0xBCEA,0x5739,0xBCEB,0x573F, + 0xBCEC,0x3C65,0x0000,0x0000,0xBCED,0x4425,0xBCEE,0x362F, + 0x573A,0x0000,0x0000,0xBCEF,0x492B,0xBCF0,0x4346,0xBCF1, + 0xBCF2,0x573B,0x0000,0x0000,0xBCF3,0xBCF4,0x0000,0xBCF5, + 0x573C,0x0000,0x3630,0x0000,0x573D,0xBCF6,0x573E,0x0000, + 0xBCF7,0x5740,0x0000,0x4576,0xBCF8,0x0000,0x5741,0x5742, + 0xBCF9,0x5743,0x0000,0xBCFA,0x5734,0x5733,0x0000,0x0000, + 0xBCFB,0x5744,0x3741,0xBCFC,0xBCFD,0x0000,0x4927,0xBCFE, + 0x0000,0x3A4C,0x4937,0x4426,0x494B,0x5745,0x0000,0xBDA1, + 0x3E34,0x3146,0xBDA2,0x5746,0xBDA3,0xBDA4,0x0000,0x5747, + 0xBDA5,0x4C72,0xBDA6,0x0000,0x4860,0xBDA7,0xBDA8,0x574A, + 0x317D,0x402C,0x5749,0x5748,0x3742,0x4254,0x0000,0x574E, + 0x574C,0xBDA9,0x574B,0x4E27,0x3865,0xBDAA,0x0000,0xBDAB, + 0x3D79,0x574D,0x454C,0x3D3E,0x0000,0x0000,0xBDAC,0x4640, + 0x5751,0x5750,0x0000,0x0000,0xBDAD,0xBDAE,0x574F,0x0000, + 0x5752,0x3866,0xBDAF,0x0000,0xBDB2,0x0000,0x0000,0xBDB0, + 0x5753,0x497C,0x3D5B,0xBDB1,0xBDB3,0x5754,0x4879,0xBDB4, + 0xBDB5,0xBDB6,0x0000,0x4641,0x4427,0x0000,0x0000,0x0000, + 0xBDB7,0x4530,0x0000,0x0000,0x5755,0x352B,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x3F34,0xBDB8,0x492C,0x0000,0xBDB9, + 0xBDBA,0xBDBB,0x0000,0xBDBC,0x3477,0x4726,0x0000,0x0000, + 0xBDBD,0xBDBE,0xBDBF,0xBDC0,0xBDC1,0x0000,0x5756,0x3B56, + 0x4B3A,0x4B3B,0x0000,0x0000,0x317E,0x575B,0xBDC2,0x0000, + 0x4369,0xBDC3,0xBDC4,0x0000,0x5758,0x0000,0x0000,0x0000, + 0xBDC5,0xBDC6,0xBDC7,0x3277,0xBDC8,0xBDC9,0xBDCA,0xBDCB, + 0x582D,0x575A,0xBDCC,0xBDCD,0x0000,0x4730,0xBDCE,0x0000, + 0x5759,0x0000,0xBDCF,0x5757,0xBDD0,0x397A,0x0000,0x575D, + + /* 6000h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xBDD1, + 0x0000,0x0000,0xBDD2,0x0000,0x0000,0xBDD3,0x5763,0x5769, + 0x5761,0x0000,0x455C,0xBDD4,0xBDD5,0x5766,0x495D,0xBDD6, + 0xBDD7,0x5760,0xBDD8,0x5765,0x4E67,0x3B57,0x0000,0xBDD9, + 0x4255,0x575E,0x0000,0x0000,0xBDDA,0x355E,0x5768,0x402D, + 0x3165,0x5762,0x3278,0x5767,0x0000,0xBDDB,0x0000,0x3631, + 0x0000,0x5764,0x0000,0xBDDC,0x0000,0xBDDD,0x0000,0x0000, + 0x0000,0x0000,0x576A,0x0000,0x0000,0x0000,0x0000,0x0000, + 0xBDDE,0x576C,0x5776,0x5774,0x0000,0x0000,0x5771,0xBDDF, + 0xBDE0,0xBDE1,0x5770,0x4E78,0xBDE2,0x5772,0x0000,0x0000, + 0x3632,0xBDE3,0x3931,0x0000,0xBDE4,0x3D7A,0xBDE5,0xBDE6, + 0x0000,0x5779,0x576B,0x0000,0x0000,0xBDE7,0x0000,0x576F, + 0x575F,0xBDE8,0x327A,0x5773,0x5775,0x4351,0x0000,0xBDE9, + 0x3A28,0x3238,0x576D,0x5778,0x5777,0x3633,0x0000,0x4229, + 0x3366,0xBDEA,0x0000,0x0000,0x0000,0x3743,0x0000,0x576E, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xBDEB,0xBDEC, + 0x0000,0x577A,0xBDED,0x577D,0x5821,0x0000,0xBDEE,0x0000, + 0xBDEF,0x3C3D,0xBDF0,0x5827,0x4470,0x577B,0xBDF1,0x0000, + 0x0000,0xBDF2,0x5825,0xBDF3,0x3279,0xBDF4,0x5823,0x5824, + 0xBDF5,0x0000,0x577E,0x5822,0x0000,0xBDF6,0xBDF7,0x3867, + 0x4D2A,0x0000,0xBDF8,0x3435,0xBDF9,0xBDFA,0x3159,0x5826, + 0xBDFB,0x473A,0x302D,0x0000,0x0000,0x0000,0x0000,0x0000, + 0xBDFC,0xBDFD,0x4861,0x575C,0x582C,0x5830,0x4C65,0xBDFE, + 0x5829,0x0000,0x0000,0xBEA1,0x4569,0x582E,0xBEA2,0x0000, + 0x0000,0x0000,0xBEA3,0x0000,0xBEA4,0x3E70,0x582F,0x4657, + 0xBEA5,0xBEA6,0xBEA7,0xBEA8,0x0000,0x0000,0xBEA9,0xBEAA, + 0x0000,0x4F47,0x0000,0x582B,0xBEAB,0xBEAC,0x0000,0x0000, + 0x5831,0xBEAD,0x397B,0xBEAE,0x404B,0xBEAF,0xBEB0,0x3054, + 0x582A,0x5828,0xBEB1,0x415A,0x0000,0xBEB2,0x0000,0x577C, + 0x3B34,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x4246,0x583D,0xBEB3,0x415B,0x5838,0xBEB4,0x5835,0x5836, + 0xBEB5,0x3C66,0x5839,0x583C,0xBEB6,0xBEB7,0x0000,0x0000, + + /* 6100h */ + 0x5837,0x3D25,0xBEB8,0x583A,0x0000,0x0000,0x5834,0xBEB9, + 0x4C7C,0x4C7B,0xBEBA,0x0000,0xBEBB,0x583E,0x583F,0x3055, + 0xBEBC,0xBEBD,0xBEBE,0xBEBF,0xBEC0,0x5833,0xBEC1,0xBEC2, + 0x0000,0xBEC3,0x3672,0x3026,0xBEC4,0x0000,0xBEC5,0x3436, + 0x0000,0x583B,0xBEC6,0x0000,0x0000,0x0000,0x0000,0x5843, + 0x5842,0x0000,0xBEC7,0xBEC8,0x5847,0x0000,0x0000,0x0000, + 0xBEC9,0xBECA,0x0000,0x0000,0x5848,0xBECB,0xBECC,0xBECD, + 0x0000,0xBECE,0x0000,0x0000,0x5846,0x5849,0x5841,0x5845, + 0x0000,0xBECF,0x584A,0x0000,0x584B,0xBED0,0xBED1,0x5840, + 0x3B7C,0xBED2,0x5844,0x4256,0x3932,0x5832,0x3F35,0x0000, + 0x0000,0x0000,0x0000,0x5858,0x0000,0x4A69,0x0000,0x0000, + 0x584E,0x584F,0x5850,0x0000,0x0000,0x5857,0xBED3,0x5856, + 0xBED4,0x0000,0x4B7D,0x3437,0x0000,0x5854,0x0000,0x3745, + 0x3334,0x0000,0x0000,0x5851,0xBED5,0x0000,0x4E38,0x5853, + 0x3056,0x5855,0xBED6,0x584C,0x5852,0x5859,0x3744,0x584D, + 0xBED7,0x0000,0x0000,0xBED8,0xBED9,0x0000,0x4D5D,0xBEDA, + 0xBEDB,0xBEDC,0x4D2B,0xBEDD,0xBEDE,0x0000,0x0000,0x585C, + 0x0000,0x0000,0x5860,0xBEDF,0x0000,0xBEE0,0x417E,0x0000, + 0x4E79,0x5861,0xBEE1,0xBEE2,0x585E,0x0000,0x585B,0xBEE3, + 0xBEE4,0x585A,0x585F,0x0000,0xBEE5,0xBEE6,0x0000,0xBEE7, + 0xBEE8,0x0000,0x0000,0x0000,0x4A30,0xBEE9,0x0000,0x4634, + 0xBEEA,0x3746,0xBEEB,0x5862,0x585D,0xBEEC,0x5863,0x0000, + 0x0000,0x0000,0x377B,0x0000,0x0000,0x0000,0x3231,0x0000, + 0xBEED,0xBEEE,0x586B,0x0000,0xBEEF,0x0000,0x3438,0x0000, + 0xBEF0,0xBEF1,0xBEF2,0x5869,0x0000,0x0000,0x586A,0x3A29, + 0x5868,0x5866,0x5865,0x586C,0x5864,0x586E,0xBEF3,0xBEF4, + 0x327B,0x0000,0x0000,0x0000,0x0000,0xBEF5,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0xBEF6,0xBEF7,0xBEF8,0xBEF9, + 0x0000,0xBEFA,0xBEFB,0x5870,0x0000,0xBEFE,0x586F,0xBEFC, + 0x0000,0xBEFD,0x0000,0x0000,0xBFA1,0xBFA2,0x0000,0xBFA3, + 0x0000,0x0000,0x4428,0x0000,0x5873,0x0000,0x5871,0x5867, + 0x377C,0x0000,0x5872,0x0000,0x5876,0x5875,0x5877,0x5874, + + /* 6200h */ + 0x5878,0xBFA4,0x0000,0xBFA5,0xBFA6,0x0000,0x0000,0xBFA7, + 0x5879,0x587A,0x4A6A,0x0000,0x587C,0x587B,0x3D3F,0x0000, + 0x402E,0x3266,0x327C,0xBFA8,0x587D,0xBFA9,0x303F,0x0000, + 0x0000,0x0000,0x404C,0x587E,0xBFAA,0x6C43,0x5921,0x3761, + 0xBFAB,0x5922,0xBFAC,0xBFAD,0x0000,0x0000,0x406F,0xBFAE, + 0x0000,0xBFAF,0x5923,0xBFB0,0x0000,0x0000,0x5924,0x353A, + 0x5925,0x0000,0x5926,0x5927,0x4257,0x0000,0x0000,0x0000, + 0x384D,0xBFB1,0x0000,0x4C61,0x0000,0xBFB2,0x0000,0x4B3C, + 0x3D6A,0x5928,0xBFB3,0xBFB4,0xBFB5,0x0000,0xBFB6,0x4070, + 0x6E3D,0x4862,0x0000,0x3C6A,0xBFB7,0x3A4D,0x5929,0x0000, + 0xBFB8,0xBFB9,0xBFBA,0x4247,0xBFBB,0x4A27,0xBFBC,0x0000, + 0x4271,0x0000,0xBFBD,0x592C,0xBFBE,0x0000,0x592A,0x0000, + 0x592D,0x0000,0x0000,0x592B,0xBFBF,0x0000,0x0000,0x0000, + 0x592E,0x0000,0x0000,0x0000,0x0000,0xBFC0,0x4A31,0xBFC1, + 0x0000,0x3037,0x0000,0xBFC2,0x0000,0x0000,0x495E,0x0000, + 0x0000,0x4863,0xBFC3,0x0000,0x592F,0xBFC4,0x5932,0x3E35, + 0x353B,0x0000,0x5930,0x5937,0x3E36,0x0000,0x0000,0x0000, + 0x0000,0x5931,0x4744,0x0000,0x0000,0xBFC5,0xBFC6,0xBFC7, + 0xBFC8,0x4D5E,0x5933,0x5934,0x5938,0x456A,0x5935,0x3933, + 0x405E,0x0000,0x0000,0x5946,0x4834,0x0000,0x4272,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xBFC9,0x0000, + 0xBFCA,0x0000,0x0000,0x4864,0x5A2D,0x0000,0x0000,0x0000, + 0x0000,0x4A7A,0x0000,0xBFCB,0x0000,0x4471,0xBFCC,0xBFCD, + 0x0000,0x4B75,0xBFCE,0x593B,0x3221,0x436A,0xBFCF,0xBFD0, + 0x0000,0x0000,0x5944,0x0000,0xBFD1,0x4334,0x593E,0x5945, + 0x5940,0x5947,0x5943,0x0000,0x5942,0x476F,0xBFD2,0x593C, + 0x327D,0x593A,0x3571,0x4273,0x5936,0xBFD3,0xBFD4,0x5939, + 0x3934,0x405B,0xBFD5,0x3E37,0x5941,0x4752,0x0000,0x0000, + 0x3572,0x3348,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0xBFD6,0x0000,0x3367,0x3F21,0x5949,0x594E, + 0x0000,0x594A,0xBFD7,0x377D,0xBFD8,0x594F,0x3B22,0x3969, + 0x0000,0x0000,0x0000,0x0000,0xBFD9,0xBFDA,0x3D26,0x593D, + + /* 6300h */ + 0x0000,0x3B7D,0x594C,0xBFDB,0xBFDC,0x0000,0x0000,0x3B58, + 0x594D,0x3044,0xBFDD,0xBFDE,0x5948,0xBFDF,0x0000,0x0000, + 0xBFE0,0x4429,0x0000,0xBFE1,0x0000,0x0000,0xBFE2,0x0000, + 0xBFE3,0x3573,0x0000,0x0000,0x0000,0x0000,0x0000,0x3634, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x594B, + 0x3027,0xBFE4,0xBFE5,0x3A43,0x0000,0xBFE6,0x0000,0x3F36, + 0x0000,0x0000,0x0000,0x0000,0x0000,0xBFE7,0xBFE8,0x0000, + 0x0000,0xBFE9,0x4472,0x0000,0xBFEA,0x4854,0x5951,0x415E, + 0x0000,0xBFEB,0xBFEC,0xBFED,0xBFEE,0x0000,0xBFEF,0x0000, + 0x0000,0x422A,0xBFF0,0xBFF1,0x3B2B,0x5952,0xBFF2,0x5954, + 0x5950,0x0000,0xBFF3,0xBFF4,0xBFF5,0x4A61,0x0000,0x443D, + 0xBFF6,0x0000,0x0000,0xBFF7,0x415C,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0xBFF8,0xBFF9,0x4A7B, + 0x3C4E,0x5960,0x0000,0x595F,0xBFFA,0xBFFB,0x3F78,0x0000, + 0x0000,0xBFFC,0x377E,0x0000,0xBFFD,0xBFFE,0x5959,0x3E39, + 0xC0A1,0x0000,0x4668,0x4731,0xC0A2,0xC0A3,0x0000,0xC0A4, + 0x5957,0x0000,0xC0A5,0x415D,0xC0A6,0x0000,0x0000,0xC0A7, + 0x3C78,0x595C,0xC0A8,0x0000,0x3E38,0x0000,0x5956,0x595B, + 0xC0A9,0x0000,0x4753,0x0000,0xC0AA,0xC0AB,0x5955,0x0000, + 0x3721,0xC0AC,0xC0AD,0x335D,0x0000,0x0000,0xC0AE,0x595D, + 0x4E2B,0x3A4E,0x4335,0x595A,0xC0AF,0x405C,0xC0B0,0x3935, + 0x3F64,0x3166,0x413C,0x5958,0x3545,0xC0B1,0xC0B2,0xC0B3, + 0x0000,0x0000,0x3747,0x0000,0x444F,0x595E,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x415F,0x0000,0xC0B4,0x5961,0x0000, + 0x5963,0xC0B5,0x0000,0x4237,0x5969,0xC0B6,0x5964,0x0000, + 0xC0B7,0x5966,0x0000,0x0000,0x0000,0x0000,0xC0B8,0x4941, + 0x4473,0xC0B9,0x5967,0xC0BA,0xC0BB,0xC0BC,0x4D2C,0x0000, + 0x0000,0x0000,0x4D48,0x3439,0xC0BD,0x0000,0x0000,0x0000, + 0xC0BE,0x302E,0x0000,0x5965,0x0000,0xC0BF,0x0000,0x0000, + 0x0000,0x5962,0xC0C0,0x0000,0xC0C1,0x0000,0x3478,0x0000, + 0x0000,0x0000,0xC0C2,0xC0C3,0x3167,0xC0C4,0x5968,0x0000, + 0xC0C5,0xC0C6,0x4D49,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 6400h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x596C,0x0000, + 0x0000,0xC0C7,0xC0C8,0x0000,0x0000,0x423B,0x0000,0x5973, + 0xC0C9,0x0000,0xC0CA,0x596D,0xC0CB,0x0000,0x596A,0x5971, + 0xC0CC,0x0000,0x0000,0x0000,0x5953,0x0000,0xC0CD,0x0000, + 0xC0CE,0x0000,0xC0CF,0x0000,0xC0D0,0xC0D1,0x596E,0x0000, + 0x5972,0xC0D2,0xC0D3,0x0000,0x4842,0x456B,0x0000,0xC0D4, + 0xC0D5,0x0000,0x0000,0x0000,0x596B,0xC0D6,0x596F,0x0000, + 0x0000,0x0000,0x3748,0x0000,0x0000,0xC0D7,0x3A71,0xC0D8, + 0x0000,0x0000,0x405D,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0xC0D9,0x0000,0x0000,0x5977,0xC0DA, + 0x0000,0xC0DB,0xC0DC,0xC0DD,0xC0DE,0x0000,0x0000,0x0000, + 0x4526,0x0000,0xC0DF,0xC0E0,0xC0E1,0xC0E2,0x0000,0xC0E3, + 0xC0E4,0xC0E5,0x0000,0xC0E6,0x0000,0x0000,0x0000,0x5974, + 0x0000,0x4B60,0x0000,0x0000,0x0000,0xC0E7,0x0000,0x5975, + 0x0000,0x0000,0x0000,0xC0E8,0xC0E9,0x0000,0x5976,0x0000, + 0x4C4E,0x0000,0x4022,0xC0EA,0x0000,0xC0EB,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x3762,0x0000,0xC0EC,0x0000,0xC0ED, + 0x597D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC0EE, + 0xC0EF,0xC0F0,0x3B35,0x597A,0x0000,0x5979,0x0000,0x0000, + 0xC0F1,0xC0F2,0x4732,0xC0F3,0x0000,0xC0F4,0x4635,0xC0F5, + 0x0000,0xC0F6,0x0000,0xC0F7,0x4531,0x597B,0xC0F8,0x0000, + 0xC0F9,0x597C,0x0000,0x496F,0xC0FA,0x4745,0x3B23,0x0000, + 0x4071,0x0000,0x4B50,0xC0FB,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x3349,0x0000,0x5A25,0x597E,0xC0FC,0xC0FD,0xC0FE, + 0x0000,0x4D4A,0x5A27,0x0000,0xC1A1,0x5A23,0x0000,0x5A24, + 0x0000,0xC1A2,0xC1A3,0xC1A4,0xC1A5,0x4160,0xC1A6,0x0000, + 0xC1A7,0xC1A8,0x5A22,0x0000,0x593F,0xC1A9,0x0000,0xC1AA, + 0x5A26,0x0000,0x5A21,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x5A2B,0x5A2C,0x4527,0x5A2E,0xC1AB,0xC1AC,0x3B24,0x5A29, + 0x0000,0xC1AD,0xC1AE,0x0000,0x353C,0xC1AF,0x0000,0x5A2F, + 0xC1B0,0x5A28,0x5A33,0x0000,0x5A32,0xC1B1,0x5A31,0xC1B2, + 0x0000,0x0000,0x5A34,0xC1B3,0x0000,0x5A36,0x3E71,0xC1B4, + + /* 6500h */ + 0x5A35,0xC1B5,0x0000,0x0000,0xC1B6,0x5A39,0x0000,0x0000, + 0xC1B7,0xC1B8,0xC1B9,0x0000,0x0000,0x0000,0x0000,0xC1BA, + 0x0000,0x0000,0x0000,0xC1BB,0xC1BC,0x0000,0xC1BD,0x0000, + 0x5A37,0xC1BE,0x0000,0xC1BF,0x5A38,0x5970,0xC1C0,0xC1C1, + 0x0000,0x0000,0xC1C2,0x5A3B,0x5A3A,0x0000,0xC1C3,0x0000, + 0x0000,0xC1C4,0x5978,0x5A3C,0x5A30,0x0000,0xC1C5,0x3B59, + 0x0000,0xC1C6,0x0000,0x0000,0x5A3D,0x5A3E,0x5A40,0x5A3F, + 0x5A41,0x327E,0xC1C7,0x3936,0xC1C8,0xC1C9,0x4A7C,0x402F, + 0x0000,0x0000,0x0000,0xC1CA,0x0000,0x384E,0x0000,0xC1CB, + 0x5A43,0xC1CC,0x0000,0x0000,0x0000,0x5A46,0x0000,0x4952, + 0xC1CD,0x355F,0xC1CE,0x0000,0xC1CF,0x5A45,0x5A44,0x4754, + 0x5A47,0x3635,0x0000,0x0000,0x0000,0x5A49,0x5A48,0xC1D0, + 0xC1D1,0x0000,0x343A,0x3B36,0x0000,0x0000,0x4658,0xC1D2, + 0x0000,0x0000,0x0000,0xC1D3,0x3749,0x0000,0x0000,0x0000, + 0x3F74,0x0000,0x5A4A,0x0000,0x4030,0x4528,0x0000,0x495F, + 0x5A4B,0x0000,0xC1D4,0x0000,0x0000,0xC1D5,0x0000,0x0000, + 0x0000,0xC1D6,0x5A4C,0x5A4D,0x0000,0xC1D7,0x0000,0x4A38, + 0x555D,0x4046,0xC1D8,0x0000,0x494C,0x0000,0x3A58,0x0000, + 0x4865,0x4843,0xC1D9,0x0000,0x0000,0xC1DA,0x0000,0x454D, + 0xC1DB,0x4E41,0x0000,0x5A4F,0x3C50,0xC1DC,0x0000,0x5A50, + 0xC1DD,0x3036,0x0000,0xC1DE,0x3654,0x404D,0xC1DF,0x4960, + 0x0000,0x0000,0x0000,0x5A51,0x3B42,0x4347,0xC1E0,0x3B5B, + 0x3F37,0x0000,0xC1E1,0xC1E2,0xC1E3,0x0000,0x0000,0x5A52, + 0x0000,0x4A7D,0x0000,0x0000,0x3177,0x3B5C,0x0000,0xC1E4, + 0x0000,0x5A55,0xC1E5,0x5A53,0x5A56,0x4E39,0x5A54,0x0000, + 0xC1E6,0xC1E7,0x0000,0x407B,0x5A57,0x0000,0xC1E8,0x4232, + 0xC1E9,0x0000,0x5A58,0x0000,0xC1EA,0x0000,0xC1EB,0x347A, + 0xC1EC,0x5A5A,0x0000,0x5A59,0x0000,0x0000,0x0000,0xC1ED, + 0x5A5B,0x5A5C,0x347B,0x0000,0x0000,0x467C,0x4336,0x356C, + 0x3B5D,0x4161,0x0000,0x0000,0x3D5C,0x3030,0x0000,0x0000, + 0xC1EE,0x5A5D,0xC1EF,0x0000,0xC1F0,0xC1F1,0x0000,0x0000, + 0x0000,0xC1F2,0x3222,0x5A61,0x0000,0x0000,0xC1F3,0xC1F4, + + /* 6600h */ + 0xC1F5,0x0000,0x3937,0x5A60,0xC1F6,0x0000,0x3A2B,0x3E3A, + 0xC1F7,0xC1F8,0x5A5F,0x0000,0x3E3B,0xC1F9,0x4C40,0x3A2A, + 0x0000,0xC1FA,0xC1FB,0x3057,0x404E,0xC1FC,0xC1FD,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x5A66,0xC1FE,0xC2A1,0x4031, + 0x3147,0xC2A2,0xC2A3,0xC2A4,0xC2A5,0x3D55,0xC2A6,0x4B66, + 0x3A72,0xC2A7,0xC2A8,0xC2A9,0xC2AA,0x3E3C,0xC2AB,0x4027, + 0xC2AC,0xC2AD,0x0000,0xC2AE,0x5A65,0x5A63,0x5A64,0xC2B0, + 0x0000,0xC2AF,0x0000,0x0000,0x436B,0x0000,0x0000,0x5B26, + 0xC2B1,0x5A6A,0x3B7E,0x3938,0x5A68,0xC2B2,0xC2B3,0x0000, + 0x0000,0x5A69,0xC2B4,0x3F38,0xC2B5,0x0000,0xC2B7,0x5A67, + 0x0000,0xC2B6,0x3B2F,0x0000,0x0000,0x0000,0x0000,0xC2B8, + 0xC2B9,0xC2BA,0x0000,0xC2BB,0xC2BC,0x5A6C,0x5A6B,0x5A70, + 0xC2BD,0xC2BE,0x5A71,0x0000,0x5A6D,0x0000,0x3322,0x5A6E, + 0x5A6F,0x4855,0xC2C0,0xC2C1,0xC2C2,0x0000,0x4961,0x374A, + 0x5A72,0x0000,0x0000,0xC2C4,0x4032,0xC2C5,0x3E3D,0xC2C7, + 0xC2C8,0xC2C9,0x4352,0xC2CA,0xC2CC,0x0000,0xC2C3,0xC2C6, + 0xC2CB,0x3647,0x0000,0x5A73,0x5A77,0x0000,0x0000,0x324B, + 0x5A74,0x5A76,0x0000,0xC2CD,0xC2CE,0xC2CF,0x5A75,0x0000, + 0xC2D0,0x3D6B,0xC2D1,0x0000,0x0000,0x0000,0x4348,0x3045, + 0x5A78,0xC2D2,0xC2D3,0xC2D4,0xC2D5,0x5A79,0x0000,0xC2D6, + 0xC2D7,0x0000,0x442A,0x0000,0xC2D8,0x0000,0x4E71,0x0000, + 0x0000,0x0000,0x0000,0x3B43,0x0000,0xC2D9,0x4A6B,0x0000, + 0x0000,0xC2DA,0xC2DB,0x0000,0x4B3D,0xC2DC,0x0000,0x0000, + 0x5B22,0x5A7B,0x0000,0xC2DD,0x5A7E,0x0000,0x5A7D,0xC2DE, + 0xC2DF,0x5A7A,0xC2E0,0xC2E1,0x5B21,0x0000,0x0000,0x465E, + 0xC2E2,0x5A7C,0x0000,0x0000,0xC2E3,0x0000,0xC2E4,0xC2E5, + 0x0000,0x0000,0x0000,0x0000,0xC2E6,0x0000,0x5B23,0x0000, + 0x0000,0x3D6C,0x5B24,0xC2E7,0x4D4B,0x4778,0x0000,0xC2E8, + 0x5B25,0x0000,0x0000,0x0000,0x0000,0x0000,0x5B27,0x0000, + 0xC2E9,0x5B28,0x0000,0xC2EA,0xC2EB,0x0000,0xC2EC,0x0000, + 0x5B29,0x0000,0x364A,0x3148,0x3939,0x5B2A,0x0000,0x5B2B, + 0x3D71,0x4162,0xC2ED,0xC2BF,0x5258,0x413E,0x413D,0x4258, + + /* 6700h */ + 0x3A47,0x0000,0x0000,0x5072,0x0000,0xC2EE,0x0000,0xC2EF, + 0x376E,0x4D2D,0x0000,0x4A7E,0x0000,0x497E,0xC2F0,0x5B2C, + 0x0000,0x0000,0x0000,0xC2F1,0x3A73,0x443F,0x5B2D,0x4F2F, + 0x0000,0xC2F2,0x0000,0x4B3E,0xC2F3,0x442B,0x5B2E,0x347C, + 0xC2F4,0x0000,0xC2F5,0x0000,0x0000,0x0000,0x5B2F,0x5B30, + 0x4C5A,0x0000,0x4C24,0x4B76,0x4B5C,0x3B25,0x5B32,0x0000, + 0x0000,0x3C6B,0x0000,0xC2F6,0x4B51,0x0000,0x5B34,0x5B37, + 0x5B36,0x0000,0x3479,0x0000,0x0000,0x3560,0xC2F7,0x5B33, + 0x0000,0x5B35,0x0000,0x0000,0x0000,0xC2F8,0x5B38,0xC2F9, + 0xC2FA,0x3F79,0x0000,0x0000,0xC2FB,0x0000,0x4D7B,0x3049, + 0x3A60,0x423C,0x0000,0x3C5D,0xC2FC,0xC2FD,0x3E73,0x0000, + 0x0000,0x5B3B,0x0000,0x0000,0x454E,0xC2FE,0x5B39,0x422B, + 0x5B3A,0x3E72,0x4C5D,0x5B3C,0x5B3D,0x4D68,0xC3A1,0x0000, + 0x0000,0x0000,0x5B42,0x0000,0xC3A2,0x393A,0xC3A3,0x4755, + 0x5B3F,0x456C,0x5A5E,0x5A62,0xC3A4,0x354F,0xC3A5,0x4747, + 0x0000,0x0000,0x0000,0xC3A6,0x5B41,0x0000,0x3E3E,0x4844, + 0x0000,0xC3A7,0x0000,0x0000,0xC3A8,0x5B47,0x0000,0x487A, + 0x0000,0x5B3E,0x0000,0x5B44,0x5B43,0x0000,0xC3A9,0xC3AA, + 0x404F,0xC3AB,0x0000,0xC3AC,0x0000,0x4B6D,0xC3AD,0x4E53, + 0xC3AE,0xC3AF,0x4B67,0xC3B0,0x324C,0x3B5E,0x0000,0x0000, + 0x4F48,0x5B46,0x3F75,0x0000,0x0000,0x0000,0x5B45,0x0000, + 0x0000,0x5B40,0x0000,0x0000,0x0000,0x0000,0x0000,0x384F, + 0xC3B1,0xC3B2,0xC3B3,0x5B4C,0x5B4A,0xC3B4,0x324D,0x5B48, + 0x5B4E,0x5B54,0x0000,0xC3B5,0xC3B6,0xC3B7,0x0000,0x0000, + 0xC3B9,0x4248,0xC3BA,0xC3BB,0x4A41,0xC3BC,0x5B56,0x0000, + 0xC3BD,0xC3BE,0x4922,0x0000,0x0000,0x0000,0x5B55,0x4770, + 0x4B3F,0x343B,0xC3BF,0x4077,0x3D40,0x0000,0x0000,0xC3C0, + 0x4453,0xC3C1,0x4D2E,0x0000,0xC3C2,0x5B51,0x5B50,0x0000, + 0x0000,0xC3C3,0x5B52,0x0000,0x5B4F,0x0000,0xC3C4,0x5B57, + 0x0000,0x5B4D,0x0000,0x0000,0x5B4B,0x0000,0x5B53,0x5B49, + 0xC3C5,0x436C,0xC3C6,0x4C78,0x3C46,0x3A74,0xC3C7,0xC3C8, + 0x0000,0xC3B8,0x0000,0x3A3A,0x0000,0x0000,0x4B6F,0x3341, + + /* 6800h */ + 0x0000,0x0000,0x444E,0x464A,0x3149,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x4072,0xC3CA,0x0000,0x4034,0x372A, + 0x0000,0xC3CB,0x0000,0x0000,0x0000,0xC3CC,0x5B59,0xC3CD, + 0x0000,0x393B,0x337C,0x0000,0x0000,0x0000,0x0000,0xC3CF, + 0xC3CE,0x5B5B,0x3374,0x5B61,0xC3D0,0xC3D1,0x0000,0xC3D2, + 0xC3D3,0xC3D4,0x5B5E,0xC3D5,0x4073,0x0000,0x0000,0x0000, + 0x334B,0x3A2C,0x0000,0xC3D6,0x334A,0x3A4F,0x0000,0xC3D7, + 0x5B5C,0x3765,0x374B,0x456D,0xC3D8,0xC3D9,0x5B5A,0x0000, + 0x3046,0x0000,0xC3DA,0x0000,0xC3DB,0x5B5D,0x5B5F,0x0000, + 0x364D,0x372C,0xC3C9,0x343C,0x354B,0xC3DC,0x0000,0xC3DD, + 0xC3DE,0x5B62,0x0000,0xC3DF,0x3A79,0x4B71,0x0000,0x3B37, + 0x0000,0x0000,0x0000,0x5B63,0x0000,0x0000,0x0000,0x4930, + 0x0000,0x0000,0x0000,0xC3E0,0x0000,0x0000,0xC3E1,0xC3E2, + 0xC3E3,0xC3E4,0xC3E5,0x0000,0x5B6F,0xC3E6,0x3233,0x5B64, + 0x0000,0xC3E7,0xC3E8,0xC3E9,0xC3EA,0x0000,0x5B75,0x5B65, + 0x0000,0x4E42,0xC3EB,0x5B6C,0xC3EC,0x475F,0xC3ED,0x0000, + 0xC3EE,0x0000,0x0000,0x0000,0x0000,0x5B74,0x0000,0x5B67, + 0x0000,0x0000,0x0000,0x3034,0x5B69,0x0000,0xC3EF,0x393C, + 0xC3F0,0x0000,0xC3F1,0x5B6B,0xC3F2,0x5B6A,0x0000,0x5B66, + 0x5B71,0xC3F3,0x3E3F,0xC3F4,0x0000,0xC3F5,0x546D,0x3868, + 0x4D7C,0xC3F6,0xC3F7,0x0000,0x0000,0x5B68,0xC3F8,0x4474, + 0x3323,0x3A2D,0xC3F9,0x5B60,0x0000,0x5B70,0x3361,0x0000, + 0x0000,0x5B6E,0x5B72,0xC3FA,0x456E,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x347E,0xC3FB,0x5C32,0x0000, + 0xC3FC,0x4C49,0x5B77,0x347D,0xC3FD,0x5B7E,0x0000,0xC3FE, + 0xC4A1,0xC4A2,0x4B40,0xC4A3,0x5C21,0x5C23,0xC4A4,0x5C27, + 0x5B79,0xC4A5,0x432A,0x0000,0xC4A6,0xC4A7,0x0000,0x456F, + 0x5C2B,0x5B7C,0x0000,0x5C28,0x0000,0xC4A8,0x0000,0x5C22, + 0xC4A9,0x0000,0xC4AA,0xC4AB,0xC4AC,0xC4AD,0x3F39,0x5C2C, + 0xC4AE,0xC4AF,0x4033,0x0000,0x0000,0xC4B0,0xC4B1,0x0000, + 0x0000,0x5C2A,0x343D,0xC4B2,0xC4B3,0xC4B4,0x0000,0x0000, + + /* 6900h */ + 0x4F50,0x5B76,0x0000,0x0000,0x5C26,0x3058,0xC4B5,0x0000, + 0x5B78,0xC4B6,0xC4B7,0x4C3A,0x5B7D,0x3F22,0x4447,0x5B73, + 0xC4B8,0xC4B9,0x5C25,0xC4BA,0x0000,0x0000,0xC4BB,0xC4BC, + 0x0000,0x3F7A,0x5C2F,0x3371,0x3821,0x0000,0x0000,0x0000, + 0x0000,0x5C31,0x5B7A,0x5C30,0x0000,0x5C29,0x5B7B,0x0000, + 0x5C2D,0x0000,0x5C2E,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x5C3F,0xC4BD,0x0000,0xC4BE,0x464E,0xC4BF,0x5C24,0x0000, + 0xC4C0,0x5C3B,0x0000,0xC4C1,0x0000,0x5C3D,0x0000,0x4458, + 0x0000,0x0000,0xC4C2,0x0000,0x0000,0xC4C3,0x0000,0x0000, + 0x0000,0xC4C4,0x4D4C,0x0000,0x0000,0x0000,0xC4C5,0x0000, + 0x0000,0x0000,0x0000,0x4976,0x5C38,0x424A,0x0000,0xC4C6, + 0x0000,0x5C3E,0x413F,0xC4C7,0x5C35,0x5C42,0x5C41,0x0000, + 0x466F,0x5C40,0x466A,0xC4C8,0xC4C9,0xC4CA,0xC4CB,0x0000, + 0xC4CC,0xC4CD,0x5C44,0x5C37,0xC4CE,0x3648,0x5C3A,0x3D5D, + 0xC4CF,0xC4D0,0xC4D1,0x4760,0x5C3C,0x364B,0x0000,0x5C34, + 0x5C36,0x5C33,0xC4D2,0xC4D3,0x4F30,0x335A,0x5C39,0xC4D4, + 0xC4D5,0x5C43,0x3335,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x3A67,0x0000,0x0000,0xC4D6,0x315D,0x0000, + 0x0000,0x5C54,0xC4D7,0x0000,0x4F31,0x5C57,0xC4D8,0x0000, + 0xC4D9,0x0000,0x0000,0x3F3A,0x5C56,0x0000,0x0000,0x0000, + 0x5C55,0xC4DA,0x0000,0x0000,0x0000,0xC4DB,0xC4DC,0x5C52, + 0xC4DD,0x0000,0x0000,0xC4DE,0x0000,0xC4DF,0x5C46,0xC4E0, + 0x0000,0x5C63,0x5C45,0x0000,0x5C58,0x0000,0x0000,0xC4E1, + 0xC4E2,0x0000,0xC4E3,0x5C50,0xC4E4,0x0000,0x5C4B,0x5C48, + 0x0000,0x5C49,0x0000,0x5C51,0x0000,0xC4E5,0x0000,0x7422, + 0xC4E6,0x0000,0x5C4E,0x393D,0x4448,0x4164,0x5C4C,0x0000, + 0x5C47,0xC4E7,0x0000,0x5C4A,0x0000,0x0000,0xC4E8,0xC4E9, + 0x4D4D,0x4B6A,0x0000,0x0000,0x0000,0x5C4F,0x5C59,0x0000, + 0x0000,0x0000,0xC4EA,0x0000,0x0000,0xC4EB,0x0000,0x5C61, + 0x5C5A,0x0000,0x0000,0x5C67,0x0000,0x5C65,0xC4EC,0xC4ED, + 0x0000,0xC4EE,0x5C60,0xC4EF,0x0000,0xC4F0,0x0000,0x0000, + 0x0000,0x5C5F,0x0000,0x4450,0x0000,0x4165,0xC4F1,0x5C5D, + + /* 6A00h */ + 0xC4F2,0xC4F3,0x5C5B,0xC4F4,0x0000,0x5C62,0x0000,0x0000, + 0x0000,0x0000,0x5C68,0x4875,0x5C6E,0x0000,0x0000,0xC4F5, + 0x0000,0xC4F6,0x5C69,0x5C6C,0x5C66,0xC4F7,0x0000,0x4374, + 0x0000,0x4938,0xC4F8,0x5C5C,0x0000,0xC4F9,0x5C64,0x3E40, + 0xC4FA,0x4C4F,0x5C78,0x5C6B,0xC4FB,0x0000,0x0000,0x0000, + 0xC4FC,0x3822,0x3223,0x335F,0x0000,0x0000,0x5C53,0x0000, + 0xC4FD,0x0000,0xC4FE,0x0000,0xC5A1,0x3E41,0x5C70,0xC5A2, + 0x5C77,0x3C79,0x3372,0xC5A3,0x0000,0x432E,0xC5A4,0xC5A5, + 0x0000,0x0000,0x0000,0x0000,0x5C6D,0xC5A6,0xC5A7,0x5C72, + 0x5C76,0xC5A8,0xC5A9,0x3636,0x0000,0x0000,0xC5AA,0x0000, + 0xC5AB,0xC5AC,0xC5AD,0x0000,0x0000,0xC5AE,0xC5AF,0x0000, + 0x354C,0x5C74,0x0000,0xC5B0,0x0000,0x0000,0x0000,0x3521, + 0x0000,0x464B,0x5C73,0x0000,0xC5B1,0x0000,0x5C75,0xC5B2, + 0x0000,0x0000,0xC5B3,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0xC5B4,0x5C6F,0xC5B5,0x0000,0x0000,0x0000,0x0000, + 0x5C71,0x0000,0x0000,0x0000,0x0000,0x0000,0xC5B6,0x3360, + 0x4349,0xC5B7,0x0000,0xC5B8,0x5C7C,0x0000,0xC5B9,0xC5BA, + 0x0000,0xC5BB,0x0000,0xC5BC,0x0000,0x5C7A,0x3869,0x0000, + 0x5C79,0xC5BD,0x0000,0x0000,0x0000,0x0000,0x0000,0x5D21, + 0x0000,0x0000,0x0000,0xC5BE,0x5B58,0xC5BF,0xC5C0,0xC5C1, + 0x5C7B,0x0000,0x5C7D,0x5C7E,0x0000,0xC5C2,0x0000,0x0000, + 0x0000,0x0000,0x5D2C,0xC5C3,0x5D28,0x0000,0x5B6D,0xC5C4, + 0xC5C5,0xC5C6,0x0000,0x5D27,0xC5C7,0x0000,0x0000,0x0000, + 0x5D26,0x0000,0x0000,0x5D23,0x0000,0xC5C8,0xC5C9,0xC5CA, + 0x0000,0x5C6A,0x5D25,0x5D24,0x0000,0x0000,0xC5CB,0x0000, + 0xC5CD,0xC5CC,0x0000,0x0000,0xC5CE,0x0000,0x0000,0x0000, + 0xC5CF,0x5D2A,0x0000,0x4F26,0xC5D0,0xC5D1,0xC5D2,0x0000, + 0x0000,0x0000,0x5D2D,0x367B,0xC5D3,0xC5D4,0x5D29,0x5D2B, + 0x0000,0x0000,0x0000,0x0000,0xC5D5,0x0000,0x0000,0xC5D6, + 0x4827,0x0000,0x5D2E,0x0000,0xC5D7,0x0000,0x0000,0x0000, + 0xC5D8,0xC5D9,0xC5DA,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x5D32,0x5D2F,0xC5DB,0xC5DC,0x0000,0x0000, + + /* 6B00h */ + 0x0000,0x0000,0xC5DD,0xC5DE,0x4D73,0x5D30,0xC5DF,0xC5E0, + 0x0000,0xC5E1,0x5C5E,0x0000,0x0000,0x0000,0x0000,0xC5E2, + 0xC5E3,0xC5E4,0x5D33,0x0000,0x0000,0x0000,0x5D34,0xC5E5, + 0x0000,0x0000,0x0000,0xC5E6,0x0000,0x3135,0xC5E7,0x5D36, + 0x3767,0x3C21,0x0000,0x3655,0xC5E8,0x0000,0x0000,0x3224, + 0xC5E9,0x0000,0x0000,0xC5EA,0xC5EB,0x0000,0x0000,0xC5EC, + 0x0000,0x0000,0x4D5F,0x0000,0x0000,0xC5ED,0xC5EE,0x5D38, + 0x5D37,0x5D3A,0x353D,0xC5EF,0x0000,0x3656,0x343E,0xC5F0, + 0x0000,0x0000,0x0000,0x5D3D,0x0000,0x0000,0xC5F1,0x5D3C, + 0x0000,0x5D3E,0xC5F2,0x0000,0x324E,0xC5F3,0x4337,0x0000, + 0x5D3F,0x0000,0xC5F4,0x343F,0x5D41,0x0000,0xC5F5,0x0000, + 0xC5F6,0x5D40,0x0000,0x5D42,0x0000,0xC5F7,0x0000,0x5D43, + 0xC5F8,0x5D44,0x3B5F,0x4035,0x3A21,0x0000,0x4970,0xC5F9, + 0x0000,0x4A62,0x4F44,0xC5FA,0x0000,0x0000,0xC5FB,0x3B75, + 0xC5FC,0x0000,0x0000,0x3A50,0x4E72,0xC5FD,0x0000,0x0000, + 0x5D45,0x5D46,0x0000,0x3B60,0x0000,0xC5FE,0xC6A1,0x5D47, + 0x5D48,0x0000,0xC6A2,0x5D4A,0x5D49,0xC6A3,0x4B58,0x0000, + 0x0000,0x3D5E,0x3C6C,0x3B44,0x0000,0x5D4B,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x5D4D,0x3F23,0xC6A4, + 0x5D4C,0x0000,0x0000,0xC6A5,0x0000,0x0000,0x5D4E,0xC6A6, + 0xC6A7,0x0000,0xC6A8,0xC6A9,0x5D4F,0x0000,0x0000,0x0000, + 0xC6AA,0xC6AB,0x5D50,0x5D51,0xC6AC,0xC6AD,0xC6AE,0x5D52, + 0xC6AF,0x5D54,0x5D53,0x5D55,0x3225,0x434A,0x0000,0x5D56, + 0xC6B0,0xC6B1,0x3B26,0x334C,0x5D57,0xC6B2,0xC6B3,0x4542, + 0x544C,0x0000,0x0000,0xC6B4,0xC6B5,0x3523,0x5D58,0x0000, + 0x0000,0xC6B6,0x0000,0x5D59,0xC6B7,0x4A6C,0x4B68,0x0000, + 0x0000,0x0000,0x4647,0x5D5A,0x4866,0x0000,0xC6B8,0x0000, + 0x487B,0x0000,0xC6B9,0x4C53,0x0000,0x0000,0x0000,0x5D5B, + 0x0000,0xC6BA,0x0000,0xC6BB,0x0000,0x0000,0xC6BC,0xC6BD, + 0x0000,0x0000,0x0000,0x5D5D,0x5D5C,0x0000,0xC6BE,0x5D5F, + 0x0000,0xC6BF,0x0000,0x5D5E,0x0000,0x0000,0x0000,0xC6C0, + 0x0000,0xC6C1,0x0000,0x0000,0x0000,0x0000,0x0000,0xC6C2, + + /* 6C00h */ + 0x0000,0x0000,0xC6C3,0x0000,0xC6C4,0xC6C5,0x0000,0x0000, + 0x5D61,0xC6C6,0x0000,0x0000,0x0000,0xC6C7,0xC6C8,0x3B61, + 0xC6C9,0x4C31,0xC6CA,0x5D62,0x5D63,0x0000,0x0000,0x3524, + 0x0000,0xC6CB,0x0000,0x5D64,0x0000,0x0000,0x0000,0xC6CC, + 0x0000,0x0000,0x0000,0x5D66,0x5D65,0x0000,0xC6CD,0xC6CE, + 0xC6CF,0x0000,0x0000,0x0000,0xC6D0,0x0000,0xC6D1,0x0000, + 0x0000,0x0000,0x0000,0xC6D2,0x3F65,0xC6D3,0xC6D4,0x4939, + 0x314A,0x0000,0xC6D5,0xC6D6,0x0000,0x0000,0x4845,0xC6D7, + 0x4475,0x3D41,0x3561,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0xC6D8,0xC6D9,0x0000,0xC6DA,0x4846,0xC6DB, + 0x3C2E,0x0000,0xC6DC,0x0000,0xC6DD,0x5D68,0x0000,0x3440, + 0x0000,0xC6DE,0x3178,0xC6DF,0xC6E0,0x4672,0x5D67,0x393E, + 0x4353,0x0000,0x5D69,0x0000,0x0000,0x0000,0x0000,0xC7B6, + 0x5D71,0x0000,0x5D6A,0xC6E1,0x0000,0xC6E2,0x0000,0xC6E3, + 0x4241,0x0000,0x3562,0x5D72,0xC6E4,0x0000,0xC6E5,0x0000, + 0xC6E6,0xC6E7,0x3768,0xC6E8,0x0000,0x3525,0x5D70,0x0000, + 0x0000,0x5D6E,0x5D6B,0x4D60,0x0000,0xC6E9,0xC6EA,0xC6EB, + 0x4440,0xC6EC,0x0000,0x0000,0x4659,0x5D6C,0x0000,0x0000, + 0x5D74,0x0000,0x5D73,0x3723,0xC6ED,0xC6EE,0x322D,0xC6EF, + 0xC6F0,0x3A3B,0x5D6D,0x5D6F,0xC6F1,0x0000,0x0000,0xC6F2, + 0x0000,0x4B57,0x4274,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x4B77,0x0000,0x0000,0x5D7C,0x0000, + 0xC6F3,0x5D7D,0xC6F4,0x324F,0xC6F5,0x0000,0x0000,0x0000, + 0x4A28,0x4C7D,0x5E21,0x3C23,0x3E42,0x5D78,0x5D7E,0x3168, + 0x0000,0x3637,0xC6F6,0x0000,0x5D75,0x5D7A,0xC6F7,0x0000, + 0x0000,0x4074,0x4771,0x0000,0x4867,0xC6F8,0x0000,0xC6F9, + 0xC6FA,0xC6FB,0xC6FC,0x5D77,0xC6FD,0x4B21,0xC6FE,0x5D79, + 0x0000,0x5E24,0xC7A1,0x5E22,0xC7A2,0x5D7B,0x0000,0x0000, + 0xC7A3,0x4B22,0x4748,0x3563,0x0000,0x4525,0x0000,0xC7A4, + 0x436D,0xC7A5,0x5E25,0xC7A6,0xC7A7,0x0000,0xC7A8,0x5E23, + 0x4259,0x5D76,0xC7A9,0x314B,0xC7AA,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 6D00h */ + 0x0000,0x0000,0x0000,0x0000,0xC7AB,0x0000,0x0000,0xC7AC, + 0x0000,0x0000,0xC7AD,0x4D4E,0x5E30,0x0000,0xC7AE,0xC7AF, + 0x0000,0xC7B0,0x5E2F,0xC7B1,0x0000,0x0000,0x0000,0x4076, + 0x0000,0x5E2C,0xC7B2,0x4D6C,0x0000,0x0000,0x4636,0x5E26, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x4445,0xC7B3,0xC7B4, + 0xC7B5,0x314C,0x393F,0x5E29,0x0000,0x0000,0xC7B7,0xC7B8, + 0x0000,0xC7B9,0x3D27,0x5E2E,0x0000,0x5E2D,0x5E28,0x0000, + 0x5E2B,0xC7BA,0x0000,0x3368,0xC7BB,0x5E2A,0x4749,0xC7BC, + 0x0000,0x4E2E,0x0000,0x0000,0x3E74,0x4075,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC7BD, + 0x0000,0x5E36,0x5E34,0x0000,0x494D,0x0000,0xC7BE,0xC7BF, + 0x0000,0xC7C0,0x0000,0x5E31,0x5E33,0xC7C1,0x313A,0xC7C2, + 0x0000,0x3940,0x4F32,0x0000,0x333D,0x0000,0x4962,0xC7C3, + 0xC7C4,0x0000,0x0000,0x0000,0x4D61,0x0000,0x0000,0x3324, + 0x3F3B,0x5E35,0x0000,0x0000,0xC7C5,0x0000,0x0000,0x0000, + 0x0000,0x0000,0xC7C6,0x0000,0x0000,0x5E3A,0x0000,0xC7C7, + 0x3E43,0x0000,0x0000,0x0000,0x4D30,0x0000,0x5E37,0x0000, + 0x0000,0xC7C8,0xC7C9,0x5E32,0xC7CA,0x5E38,0xC7CB,0xC7CC, + 0xC7CD,0x4E5E,0x0000,0x4573,0x4642,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0xC7CE,0x0000,0xC7CF,0x0000,0x0000,0x3336, + 0x0000,0x0000,0x3155,0x0000,0xC7D0,0x5E3E,0x0000,0xC7D1, + 0x5E41,0xC7D2,0x0000,0x0000,0x4E43,0xC7D3,0x0000,0xC7D4, + 0x4D64,0x0000,0x0000,0x0000,0xC7D5,0x5E48,0x5E42,0x5E3F, + 0xC7D6,0x0000,0xC7D7,0x4E54,0x5E45,0x0000,0xC7D8,0xC7D9, + 0x0000,0x3D4A,0x5E47,0x0000,0x0000,0x5E4C,0xC7DA,0x0000, + 0x4571,0x5E4A,0x0000,0xC7DB,0x0000,0xC7DC,0x5E44,0xC7DD, + 0xC7DE,0x4338,0xC7DF,0x0000,0x5E4B,0xC7E0,0x5E40,0x0000, + 0x5E46,0xC7E1,0x5E4D,0x307C,0x5E43,0x0000,0x5E4E,0xC7E2, + 0xC7E3,0x3F3C,0x0000,0x3D5F,0xC7E4,0x4A25,0xC7E5,0x3A2E, + 0x0000,0x5E3B,0x5E49,0x453A,0xC7E6,0x0000,0x0000,0x0000, + + /* 6E00h */ + 0xC7E7,0x0000,0x0000,0x0000,0xC7E8,0x4036,0x0000,0x3369, + 0x3A51,0x3E44,0x5E3D,0x3D42,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x374C,0x0000,0x5E3C,0x0000,0x0000, + 0x0000,0x5E52,0x3D6D,0x383A,0x0000,0x5E61,0xC7E9,0x5E5B, + 0x3574,0x454F,0xC7EA,0x5E56,0x5E5F,0x302F,0x3132,0xC7EB, + 0x0000,0x3239,0x0000,0x5E58,0x422C,0x5E4F,0x5E51,0x3941, + 0x0000,0x0000,0xC7EC,0x0000,0x0000,0x0000,0xC7ED,0x0000, + 0x5E62,0xC7EE,0x5E5D,0xC7EF,0xC7F0,0x0000,0x5E55,0x0000, + 0x0000,0x0000,0x0000,0x5E5C,0xC7F1,0xC7F2,0x0000,0x0000, + 0xC7F3,0xC7F4,0x4C2B,0xC7F5,0x0000,0x5E5A,0x5E5E,0xC7F6, + 0x0000,0xC7F7,0xC7F8,0xC7F9,0xC7FA,0x0000,0x3850,0xC7FB, + 0x3E45,0x0000,0x0000,0x4339,0xC7FC,0xC7FD,0xC7FE,0x5E54, + 0x0000,0x0000,0xC8A1,0xC8A2,0x0000,0x0000,0x0000,0x4D2F, + 0xC8A3,0x0000,0x0000,0x5E57,0x0000,0x0000,0x5E50,0x4572, + 0x0000,0x0000,0x5E53,0xC8A4,0x0000,0x0000,0x5E59,0x0000, + 0x0000,0x0000,0x0000,0xC8A5,0x0000,0xC8A6,0x4F51,0x3C3E, + 0x4B7E,0x0000,0x5E63,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x482E,0xC8A7,0x0000,0x5E6F, + 0x383B,0x0000,0x0000,0xC8A8,0x0000,0x0000,0x3D60,0x0000, + 0x5E65,0xC8A9,0x0000,0x0000,0x4E2F,0x3942,0x0000,0x5E72, + 0xC8AA,0x0000,0x306E,0x0000,0x0000,0x5E70,0x0000,0xC8AB, + 0x0000,0x0000,0x5E64,0x0000,0x0000,0xC8AC,0xC8AD,0x5E6A, + 0x0000,0xC8AE,0x5E6C,0xC8AF,0x0000,0x0000,0x4D4F,0x5E67, + 0x0000,0x0000,0x452E,0xC8B0,0x0000,0x5E69,0x0000,0xC8B1, + 0xC8B2,0xC8B3,0x5E71,0xC8B4,0x5E6B,0x4C47,0x0000,0xC8B5, + 0xC8B6,0x5E66,0xC8B7,0x3C22,0x5E7E,0xC8B8,0xC8B9,0xC8BA, + 0x0000,0x336A,0x0000,0x5E68,0x5E6D,0x5E6E,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x426C,0x425A,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0xC8BB,0x5E76,0xC8BC,0xC8BD,0x5E7C, + 0x0000,0x0000,0x5E7A,0x0000,0x4529,0x0000,0x0000,0x5F23, + 0x5E77,0xC8BE,0x0000,0xC8BF,0x0000,0xC8C0,0x5E78,0x5E60, + + /* 6F00h */ + 0x0000,0x3579,0x493A,0x0000,0xC8C1,0x0000,0x3C3F,0x0000, + 0xC8C2,0x3977,0xC8C3,0x0000,0xC8C4,0xC8C5,0x0000,0x4F33, + 0x0000,0x5E74,0x0000,0x5F22,0x3169,0x4166,0xC8C6,0x0000, + 0xC8C7,0x0000,0xC8C8,0xC8C9,0x0000,0x0000,0x0000,0x0000, + 0x4779,0x0000,0x3441,0x4E7A,0x0000,0x0000,0xC8CA,0x0000, + 0x0000,0xC8CB,0xC8CC,0x4C21,0x4452,0xC8D3,0x0000,0xC8CD, + 0xC8CE,0x5E7B,0x5E7D,0xC8CF,0x0000,0x0000,0xC8D0,0x0000, + 0x4132,0x0000,0x0000,0xC8D1,0xC8D2,0x0000,0x5F21,0x5E79, + 0x0000,0x5E73,0x0000,0x0000,0x0000,0x3443,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xC8D4, + 0x0000,0xC8D5,0xC8D6,0xC8D7,0x3769,0x0000,0x0000,0xC8D8, + 0x5F2F,0xC8D9,0xC8DA,0x5F2A,0x4078,0xC8DB,0xC8DC,0x3363, + 0x0000,0xC8DD,0xC8DE,0x0000,0x3D61,0x0000,0x5F33,0x0000, + 0xC8DF,0x0000,0x0000,0x0000,0xC8E0,0x5F2C,0x442C,0x5F29, + 0x4459,0x0000,0x0000,0x0000,0x5F4C,0x0000,0x0000,0x0000, + 0x5F26,0x0000,0x5F25,0x0000,0x5F2E,0xC8E1,0xC8E2,0x0000, + 0x5F28,0x5F27,0x5F2D,0xC8E3,0x4021,0x0000,0x5F24,0xC8E4, + 0xC8E5,0x0000,0x0000,0xC8E6,0xC8E7,0xC8E8,0x5F30,0x0000, + 0xC8E9,0x5F31,0xC8EA,0xC8EB,0xC8EC,0x0000,0xC8ED,0x3442, + 0x0000,0x0000,0xC8EE,0x0000,0x0000,0x0000,0x0000,0xC8EF, + 0xC8F0,0x5F36,0x0000,0x5F35,0x5F37,0xC8F1,0xC8F2,0xC8F3, + 0xC8F4,0x0000,0x5F3A,0x0000,0x0000,0x0000,0xC8F5,0xC8F6, + 0xC8F7,0x4543,0x0000,0x5F34,0x0000,0xC8F8,0xC8F9,0x0000, + 0x0000,0x5F38,0x0000,0x0000,0xC8FA,0x0000,0x0000,0x0000, + 0x3763,0x4279,0x5F32,0x473B,0x0000,0xC8FB,0x5F39,0xC8FC, + 0xC8FD,0x0000,0xC8FE,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x5F3E,0x5F3C,0x0000,0x0000, + 0x5F3F,0x0000,0xC9A1,0x5F42,0x0000,0x0000,0xC9A2,0x5F3B, + 0x396A,0x4728,0x0000,0x0000,0x5E39,0x0000,0x0000,0x0000, + 0xC9A3,0xC9A4,0x0000,0x4D74,0x5F3D,0x0000,0x5F41,0x4275, + 0xC9A5,0x5F40,0x0000,0x5F2B,0x0000,0xC9A6,0x6F69,0x0000, + 0x0000,0xC9A7,0x5F45,0x0000,0xC9A8,0xC9A9,0x5F49,0x0000, + + /* 7000h */ + 0xC9AA,0x5F47,0x0000,0x0000,0x0000,0xC9AB,0xC9AC,0xC9AD, + 0x0000,0x5F43,0x0000,0x5F44,0x0000,0xC9AE,0x0000,0x5F48, + 0x0000,0x5F46,0x0000,0x0000,0x0000,0x494E,0x0000,0xC9AF, + 0x5F4E,0x0000,0x5F4B,0x5F4A,0x0000,0x5F4D,0x4654,0x5F4F, + 0xC9B0,0x0000,0x0000,0xC9B1,0x0000,0x0000,0x4375,0x426D, + 0x0000,0x0000,0x0000,0x0000,0x4025,0x0000,0x0000,0xC9B2, + 0x5F50,0x0000,0x5F52,0x0000,0xC9B3,0x0000,0x0000,0xC9B4, + 0x0000,0xC9B5,0x0000,0x0000,0xC9B6,0x0000,0x5F51,0x0000, + 0x0000,0x0000,0x0000,0xC9B7,0xC9B8,0x0000,0x0000,0x0000, + 0xC9B9,0xC9BA,0xC9BB,0xC9BC,0x5E75,0x0000,0xC9C1,0x0000, + 0x0000,0x5F53,0x0000,0x0000,0xC9BD,0xC9BE,0x0000,0x0000, + 0x4667,0x0000,0x0000,0x0000,0x0000,0xC9BF,0xC9C0,0x0000, + 0x0000,0x0000,0x0000,0x5F54,0xC9C2,0xC9C3,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x3250,0xC9C4,0x0000,0xC9C5,0x4574, + 0x3325,0x0000,0x0000,0x0000,0x0000,0xC9C6,0xC9C7,0x0000, + 0x3564,0x0000,0x0000,0x0000,0x3C5E,0x3A52,0xC9C8,0x0000, + 0x0000,0xC9C9,0x0000,0x0000,0x0000,0xC9CA,0xC9CB,0x0000, + 0x0000,0x4F27,0x3F66,0x0000,0x0000,0x0000,0x316A,0x0000, + 0x0000,0x0000,0x5F56,0x0000,0xC9CC,0xC9CD,0xC9CE,0xC9CF, + 0xC9D0,0x5F55,0x0000,0xC9D1,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0xC9D2,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0xC9D3,0x5F59,0x433A,0x5F5C,0x5F57, + 0xC9D4,0xC9D5,0x0000,0x5F5B,0xC9D6,0x0000,0x0000,0xC9D7, + 0x5F5A,0x4540,0x3059,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x4E75,0x0000,0xC9D8,0x5F5E,0x0000,0x0000,0x0000,0x3128, + 0x0000,0xC9D9,0x0000,0xC9DA,0xC9DB,0xC9DC,0xC9DD,0x0000, + 0xC9DE,0x5F60,0x0000,0x0000,0xC9DF,0x5F5F,0x0000,0x5F5D, + 0x0000,0x0000,0x0000,0x0000,0xC9E0,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x5F58,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x4B23,0xC9E1,0x0000,0x0000,0x5F62,0x0000,0x0000, + + /* 7100h */ + 0x0000,0x0000,0x0000,0xC9E2,0xC9E3,0xC9E4,0xC9E5,0xC9E6, + 0x0000,0x5F61,0x0000,0xC9E7,0xC9E8,0x0000,0x0000,0xC9E9, + 0x0000,0x0000,0x0000,0x0000,0x316B,0x0000,0x0000,0x0000, + 0x0000,0x5F64,0x4A32,0x0000,0x5F63,0x0000,0xC9EA,0x0000, + 0xC9EB,0x4C35,0x0000,0x0000,0x0000,0x0000,0x3E47,0x0000, + 0x0000,0x0000,0x0000,0xC9EC,0x0000,0xC9ED,0x0000,0xC9EE, + 0xC9EF,0xC9F0,0x0000,0x0000,0x0000,0x0000,0x4133,0x0000, + 0xC9F1,0x0000,0x0000,0x0000,0x3E46,0x0000,0x0000,0x0000, + 0x0000,0xC9F2,0x0000,0x0000,0x0000,0xC9F3,0xC9F4,0xC9F5, + 0x0000,0x4E7B,0xC9F6,0xC9F7,0x5F6A,0x0000,0x4079,0x0000, + 0xC9F8,0x0000,0xC9F9,0x0000,0x0000,0x5F66,0x5F6B,0xC9FA, + 0x0000,0x316C,0xC9FB,0x0000,0xC9FC,0x0000,0xC9FD,0x0000, + 0xC9FE,0x0000,0x5F69,0x0000,0x4761,0x5F65,0x5F68,0x3E48, + 0xCAA1,0x4851,0x0000,0x0000,0x5F6C,0x0000,0x3C51,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0xCAA2,0x0000,0x0000,0x0000,0x407A,0x0000,0x0000, + 0xCAA3,0x0000,0x0000,0x0000,0x5F6F,0xCAA4,0x0000,0xCAA5, + 0x5F67,0x0000,0x3727,0x0000,0xCAA6,0x0000,0x0000,0x5F6D, + 0x0000,0x0000,0xCAA7,0x0000,0x4D50,0x5F70,0x0000,0x0000, + 0x0000,0x7426,0xCAA8,0xCAA9,0x0000,0x0000,0x0000,0x3D4F, + 0xCAAA,0x0000,0xCAAB,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x5F71,0x0000,0x0000,0x0000,0x5F72,0x0000,0x0000,0xCAAC, + 0xCAAD,0x472E,0xCAAE,0xCAAF,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x5F74,0xCAB0,0x0000,0x0000,0x0000,0x5F75,0xCAB1, + 0xCAB2,0xCAB3,0x0000,0x4733,0xCAB4,0x0000,0x0000,0x0000, + 0x4575,0x5F77,0x0000,0xCAB5,0xCAB6,0x0000,0x5F79,0x0000, + 0x4E55,0x0000,0x5F76,0xCAB7,0x5F78,0x316D,0xCAB8,0x5F73, + 0x0000,0xCAB9,0xCABA,0x0000,0xCABB,0x0000,0x0000,0x535B, + 0x5F7A,0x0000,0x0000,0x0000,0x0000,0x4167,0x3B38,0x5F7C, + 0x0000,0x0000,0x0000,0x0000,0x5F7B,0x3F24,0x5259,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x5F7D,0x0000,0x0000, + 0xCABC,0x6021,0x0000,0x5F6E,0x5F7E,0x0000,0xCABD,0x6022, + + /* 7200h */ + 0xCABE,0x0000,0x0000,0x0000,0x0000,0x0000,0x477A,0xCABF, + 0xCAC0,0xCAC1,0x0000,0x0000,0x0000,0x6023,0x0000,0x0000, + 0x6024,0x0000,0x0000,0xCAC2,0x0000,0x0000,0x0000,0xCAC3, + 0x0000,0x0000,0xCAC4,0x6025,0x0000,0xCAC5,0x0000,0xCAC6, + 0x0000,0x0000,0x0000,0x0000,0xCAC7,0x0000,0x0000,0x0000, + 0x6026,0x0000,0x445E,0xCAC8,0x6028,0x6027,0x0000,0xCAC9, + 0x6029,0x0000,0x602A,0x0000,0xCACA,0x3C5F,0x4963,0x0000, + 0xCACB,0xCACC,0x4C6C,0x602B,0x602C,0x4156,0x3C24,0x602D, + 0x602E,0xCACD,0xCACE,0xCACF,0x0000,0xCAD0,0x602F,0x4A52, + 0x4847,0x0000,0x0000,0x6030,0x4757,0x0000,0xCAD1,0xCAD2, + 0xCAD3,0x0000,0x442D,0xCAD4,0x0000,0xCAD5,0xCAD6,0x0000, + 0x6031,0x3267,0xCAD7,0x356D,0xCAD8,0x4C46,0xCAD9,0x4C36, + 0xCADA,0x3234,0x4F34,0xCADB,0x0000,0x0000,0x0000,0x4B52, + 0xCADC,0x4A2A,0x0000,0xCADD,0x0000,0x0000,0xCADE,0xCADF, + 0x0000,0xCAE0,0x4037,0x0000,0x6032,0x0000,0x0000,0xCAE1, + 0xCAE2,0x4643,0x0000,0xCAE3,0xCAE4,0x3823,0x6033,0xCAE5, + 0x3A54,0x6035,0x6034,0x0000,0xCAE6,0x0000,0x0000,0x6036, + 0x0000,0xCAE7,0x0000,0x0000,0x0000,0xCAE8,0xCAE9,0x0000, + 0x0000,0x0000,0x6037,0xCAEA,0x0000,0x0000,0x6038,0x0000, + 0x0000,0x0000,0x0000,0xCAEB,0x0000,0x0000,0x0000,0x0000, + 0x353E,0x0000,0x6039,0x0000,0x0000,0x0000,0x0000,0x603A, + 0xCAEC,0x0000,0x0000,0x0000,0x3824,0xCAED,0xCAEE,0x4848, + 0x0000,0xCAEF,0x603C,0x0000,0xCAF0,0x0000,0x3E75,0x0000, + 0x0000,0x603B,0x0000,0x0000,0x0000,0x0000,0xCAF1,0x0000, + 0x0000,0xCAF2,0x3638,0x603D,0x603F,0x0000,0x603E,0xCAF3, + 0x0000,0xCAF4,0x0000,0x0000,0xCAF5,0x0000,0x6040,0x0000, + 0x3851,0x0000,0x6041,0x0000,0x0000,0xCAF6,0xCAF7,0x3669, + 0xCAF8,0x4140,0x0000,0x397D,0x0000,0x0000,0x0000,0xCAF9, + 0x6043,0x6044,0x6042,0x0000,0x0000,0xCAFA,0x0000,0x0000, + 0x0000,0x3C6D,0x0000,0x0000,0x4648,0x3639,0x0000,0x0000, + 0x0000,0x0000,0x0000,0xCAFB,0xCAFC,0x0000,0x0000,0x6046, + 0x432C,0x6045,0xCAFD,0xCAFE,0x4F35,0x4762,0xCBA1,0x0000, + + /* 7300h */ + 0x0000,0x0000,0xCBA2,0x0000,0xCBA3,0xCBA4,0x0000,0xCBA5, + 0x0000,0x0000,0x6049,0xCBA6,0x0000,0xCBA7,0x0000,0x0000, + 0x0000,0x0000,0xCBA8,0xCBA9,0x0000,0x0000,0x604B,0x6048, + 0xCBAA,0xCBAB,0x0000,0x4C54,0x604A,0x604C,0xCBAC,0x4E44, + 0x0000,0x0000,0xCBAD,0x0000,0xCBAE,0x6050,0x0000,0xCBAF, + 0xCBB0,0x604F,0x4376,0x472D,0xCBB1,0x0000,0x3825,0x604E, + 0x0000,0xCBB2,0xCBB3,0x0000,0x604D,0xCBB4,0x4D31,0x4D32, + 0x0000,0x0000,0xCBB5,0xCBB6,0x0000,0xCBB7,0x6051,0x316E, + 0x0000,0x0000,0x0000,0xCBB8,0x3976,0x3B62,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0xCBB9,0x6052,0x6053, + 0xCBBA,0x0000,0xCBBB,0x0000,0x0000,0x0000,0xCBBC,0x6055, + 0xCBBD,0x0000,0x0000,0x0000,0x0000,0xCBBE,0xCBBF,0xCBC0, + 0xCBC1,0x0000,0x0000,0x3D43,0x0000,0x0000,0xCBC2,0xCBC3, + 0x6057,0xCBC4,0x6056,0xCBC5,0xCBC6,0x0000,0xCBC7,0xCBC8, + 0x6058,0xCBC9,0x334D,0x0000,0x0000,0x605A,0x0000,0xCBCA, + 0x6059,0xCBCB,0x605C,0x605B,0xCBCC,0x0000,0x0000,0x0000, + 0xCBCD,0xCBCE,0x0000,0xCBCF,0x383C,0xCBD0,0xCBD1,0x4E28, + 0x0000,0x364C,0x0000,0x3226,0x0000,0x0000,0xCBD2,0x0000, + 0xCBD3,0x0000,0x0000,0xCBD4,0x0000,0xCBD5,0x366A,0xCBD6, + 0xCBD7,0x0000,0x0000,0x0000,0xCBD8,0x0000,0xCBD9,0xCBDA, + 0xCBDB,0x0000,0xCBDC,0x0000,0x0000,0xCBDD,0xCBDE,0x0000, + 0x0000,0x3461,0xCBDF,0xCBE0,0x0000,0xCBE1,0x0000,0x0000, + 0x0000,0x0000,0x4E68,0x605E,0x0000,0xCBE2,0x0000,0xCBE3, + 0x0000,0xCBE4,0x0000,0x6060,0xCBE5,0xCBE6,0x0000,0xCBE7, + 0x6061,0x0000,0x3251,0x0000,0x0000,0xCBE8,0xCBE9,0x0000, + 0x605D,0xCBEA,0x3B39,0xCBEB,0xCBEC,0x4441,0x605F,0xCBED, + 0x0000,0x0000,0xCBEE,0xCBEF,0x0000,0x0000,0xCBF0,0x0000, + 0x0000,0xCBF1,0x0000,0x0000,0x0000,0xCBF2,0x6064,0x0000, + 0x3C6E,0xCBF3,0x0000,0xCBF4,0x0000,0x6062,0xCBF5,0xCBF6, + 0x0000,0xCBF7,0x373E,0x0000,0x0000,0x4849,0x6063,0x0000, + 0x0000,0x607E,0x0000,0x0000,0xCBF8,0xCBF9,0x0000,0xCBFA, + 0x6069,0xCBFB,0xCBFC,0xCBFD,0x0000,0xCBFE,0x383D,0xCCA1, + + /* 7400h */ + 0xCCA2,0xCCA3,0x0000,0x3565,0xCCA4,0x6066,0x4D7D,0xCCA5, + 0x0000,0x4E30,0xCCA6,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0xCCA7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0xCCA8,0xCCA9,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x4276,0x0000,0xCCAA,0x6068,0xCCAB,0x0000, + 0xCCAC,0xCCAD,0xCCAE,0xCCAF,0xCCB0,0xCCB1,0xCCB2,0xCCB3, + 0xCCB4,0xCCB5,0x606A,0x4E56,0x3657,0x487C,0x474A,0x0000, + 0x0000,0xCCB6,0x606B,0x0000,0x0000,0x0000,0x0000,0x606D, + 0xCCB7,0x6070,0x0000,0xCCB8,0xCCB9,0x0000,0xCCBA,0xCCBB, + 0x0000,0x0000,0x0000,0xCCBC,0x0000,0xCCBD,0x0000,0x0000, + 0x0000,0xCCBE,0xCCBF,0x0000,0x0000,0x606C,0x0000,0xCCC0, + 0x0000,0x606F,0x386A,0x314D,0x6071,0xCCC1,0x3F70,0x606E, + 0x4E5C,0x0000,0xCCC2,0x6074,0x7424,0x0000,0xCCC3,0xCCC4, + 0xCCC5,0x6072,0x6075,0xCCC6,0x0000,0xCCC7,0xCCC8,0x6067, + 0x6073,0xCCC9,0xCCCA,0x3A3C,0x0000,0x0000,0x6076,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6077,0x0000, + 0xCCCB,0xCCCC,0x0000,0x4D7E,0x0000,0xCCCD,0xCCCE,0xCCCF, + 0x0000,0xCCD0,0x0000,0x6078,0x0000,0x0000,0x0000,0xCCD1, + 0xCCD2,0xCCD3,0xCCD4,0x0000,0x0000,0x0000,0x0000,0x0000, + 0xCCD5,0xCCD6,0xCCD7,0x0000,0xCCD8,0x0000,0x6079,0xCCD9, + 0xCCDA,0xCCDB,0x6065,0xCCDC,0x0000,0x0000,0xCCDD,0x607A, + 0xCCDE,0xCCDF,0xCCE0,0xCCE1,0x0000,0x0000,0xCCE2,0xCCE3, + 0x3444,0xCCE4,0xCCE5,0x0000,0x0000,0xCCE6,0x0000,0x0000, + 0x0000,0xCCE7,0x0000,0xCCE8,0x0000,0x3C25,0x0000,0xCCE9, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0xCCEA,0xCCEB,0x607B,0x0000,0xCCEC,0x0000,0x0000,0x607C, + 0xCCED,0x0000,0x0000,0xCCEE,0x607D,0x0000,0x0000,0x0000, + 0xCCEF,0x0000,0xCCF0,0xCCF1,0x313B,0x0000,0xCCF2,0xCCF3, + 0x6121,0x0000,0x493B,0x6122,0xCCF4,0x0000,0x3424,0x6123, + 0xCCF5,0x6124,0xCCF6,0xCCF7,0x0000,0x0000,0x6125,0xCCF8, + 0x6127,0x6128,0x6126,0x0000,0xCCF9,0x0000,0x4953,0x612A, + 0x6129,0x0000,0xCCFA,0xCCFB,0xCCFC,0x0000,0x0000,0xCCFD, + + /* 7500h */ + 0x0000,0x0000,0x0000,0x612C,0x612B,0x612D,0xCCFE,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x612E,0x6130,0x612F,0x0000, + 0x0000,0x3979,0xCDA1,0x6132,0x0000,0x6131,0xCDA2,0xCDA3, + 0x3445,0x0000,0x3F53,0x0000,0x453C,0x0000,0x6133,0x4038, + 0xCDA4,0xCDA5,0x0000,0x3B3A,0xCDA6,0x3179,0x6134,0xCDA7, + 0x4D51,0xCDA8,0xCDA9,0x4A63,0x6135,0x0000,0x0000,0xCDAA, + 0x4544,0x4D33,0x3943,0x3F3D,0x0000,0x0000,0xCDAB,0x434B, + 0x5234,0xCDAC,0x442E,0x3268,0x6136,0xCDAD,0xCDAE,0xCDAF, + 0xCDB0,0x0000,0x0000,0xCDB1,0x6137,0x0000,0x613C,0xCDB2, + 0xCDB3,0x613A,0x6139,0x5A42,0x3326,0x6138,0xCDB4,0x305A, + 0xCDB5,0x482A,0xCDB6,0x0000,0x484A,0x0000,0x0000,0xCDB7, + 0x0000,0x4E31,0x613D,0x613B,0x435C,0x4026,0xCDB8,0xCDB9, + 0x482B,0xCDBA,0x492D,0x0000,0x613F,0x4E2C,0x374D,0x6140, + 0x0000,0x613E,0x4856,0x6141,0x0000,0x6142,0x0000,0xCDBB, + 0x305B,0xCDBC,0x0000,0x3E76,0x6147,0x0000,0x6144,0x466D, + 0x6143,0xCDBD,0xCDBE,0xCDBF,0xCDC0,0xCDC1,0xCDC2,0x3526, + 0x0000,0xCDC3,0x614A,0x0000,0x0000,0xCDC4,0x6145,0x6146, + 0x0000,0x6149,0x6148,0x4925,0x0000,0x0000,0x4142,0x4141, + 0xCDC5,0x353F,0xCDC6,0xCDC7,0x614B,0xCDC8,0x0000,0x0000, + 0x0000,0xCDC9,0x614C,0x0000,0xCDCA,0x614D,0x0000,0x0000, + 0x0000,0x0000,0xCDCB,0x614F,0xCDCC,0x614E,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x3156,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x6157,0x4868,0x6151,0xCDCD,0x6153,0x0000,0x0000, + 0x6155,0x3F3E,0xCDCE,0x0000,0x6156,0x6154,0x3C40,0xCDCF, + 0xCDD0,0xCDD1,0x6150,0x6152,0xCDD2,0x4942,0xCDD3,0x3E49, + 0x0000,0x0000,0x6159,0x0000,0xCDD4,0x6158,0xCDD5,0xCDD6, + 0x0000,0x0000,0x615A,0x0000,0x3C26,0x3A2F,0x0000,0xCDD7, + 0x4577,0x615B,0x0000,0x444B,0xCDD8,0x0000,0x615D,0xCDD9, + 0xCDDA,0xCDDB,0x4E21,0x615C,0xCDDC,0x0000,0x0000,0xCDDD, + 0x0000,0x4169,0x0000,0x0000,0xCDDE,0x0000,0xCDDF,0xCDE0, + 0x6162,0xCDE1,0x6164,0x6165,0x4354,0x0000,0x0000,0x0000, + 0x0000,0xCDE2,0x6163,0x0000,0x6160,0x0000,0x615E,0x615F, + + /* 7600h */ + 0xCDE3,0x6161,0xCDE4,0xCDE5,0xCDE6,0x0000,0x0000,0xCDE7, + 0xCDE8,0x6168,0xCDE9,0x6166,0xCDEA,0x6167,0x0000,0xCDEB, + 0x0000,0x0000,0xCDEC,0xCDED,0x0000,0xCDEE,0xCDEF,0x0000, + 0x0000,0xCDF0,0x0000,0xCDF1,0xCDF2,0xCDF3,0xCDF4,0x6169, + 0x616B,0x616C,0x616D,0xCDF5,0x616E,0xCDF6,0xCDF7,0x616A, + 0x0000,0xCDF8,0x0000,0x0000,0x0000,0xCDF9,0x0000,0x0000, + 0x6170,0x0000,0xCDFA,0xCDFB,0x616F,0xCDFC,0x0000,0x0000, + 0xCDFD,0xCDFE,0xCEA1,0x6171,0xCEA2,0x0000,0x0000,0x0000, + 0xCEA4,0xCEA5,0x4E45,0xCEA6,0xCEA7,0xCEA8,0x6174,0x6172, + 0x6173,0xCEA9,0xCEA3,0xCEAA,0x3462,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x4C7E,0x0000,0x0000,0xCEAB,0x4A4A,0x0000, + 0x6176,0xCEAC,0x0000,0x0000,0x6175,0x0000,0x0000,0xCEAD, + 0x0000,0x6177,0x6178,0x0000,0xCEAE,0xCEAF,0x0000,0x617C, + 0x6179,0x617A,0x617B,0x0000,0x617D,0xCEB0,0xCEB1,0xCEB2, + 0x617E,0xCEB3,0x6221,0x0000,0xCEB4,0x0000,0x6222,0x0000, + 0x6223,0x0000,0x482F,0x4550,0x6224,0x4772,0x4934,0x0000, + 0x6225,0xCEB5,0x0000,0x6226,0x452A,0xCEB6,0x3327,0x3944, + 0x6227,0x0000,0x0000,0x6228,0xCEB7,0xCEB8,0x6229,0x0000, + 0x3B29,0x0000,0x0000,0x622B,0x0000,0xCEB9,0x622A,0x0000, + 0x0000,0x622C,0x622D,0xCEBA,0xCEBB,0xCEBC,0x0000,0xCEBD, + 0xCEBE,0x0000,0xCEBF,0xCEC0,0xCEC1,0xCEC2,0xCEC3,0xCEC4, + 0xCEC5,0x0000,0xCEC6,0x0000,0x0000,0xCEC7,0x4869,0x0000, + 0x622E,0x0000,0x0000,0x0000,0x622F,0x0000,0x0000,0x7369, + 0x6230,0x6231,0x6232,0x0000,0x0000,0xCEC8,0x0000,0x3B2E, + 0x0000,0xCEC9,0x6233,0x4756,0x0000,0xCECA,0x4B5F,0x0000, + 0x314E,0xCECB,0x3157,0xCECC,0xCECD,0x6234,0xCECE,0x0000, + 0x0000,0x0000,0x6236,0x0000,0xCECF,0x0000,0x6235,0x4570, + 0x0000,0xCED0,0x0000,0x4039,0x5D39,0x0000,0x6237,0x4C41, + 0xCED1,0x6238,0x0000,0x3446,0x4857,0x6239,0xCED2,0x623A, + 0xCED3,0x0000,0x623B,0x0000,0xCED4,0x0000,0x4C5C,0x0000, + 0xCED5,0xCED6,0x4C55,0x0000,0x443E,0x0000,0xCED7,0x0000, + 0x416A,0xCED8,0x0000,0x623D,0xCED9,0x0000,0x3D62,0x0000, + + /* 7700h */ + 0xCEDA,0x3E4A,0x0000,0x0000,0x6240,0x0000,0xCEDB,0x623F, + 0x623E,0x487D,0xCEDC,0x3447,0x3829,0x0000,0xCEDD,0x0000, + 0x0000,0x0000,0xCEDE,0x0000,0xCEDF,0xCEE0,0x0000,0xCEE1, + 0x0000,0xCEE2,0xCEE3,0x6246,0xCEE4,0x0000,0x6243,0x3F3F, + 0x4C32,0x0000,0xCEE5,0x0000,0x6242,0x6244,0x6245,0x0000, + 0xCEE6,0x6241,0x0000,0x0000,0x0000,0xCEE7,0xCEE8,0xCEE9, + 0x0000,0x0000,0x0000,0x0000,0xCEEA,0xCEEB,0xCEEC,0x6247, + 0x6248,0xCEED,0x442F,0x0000,0x3463,0xCEEE,0xCEEF,0x0000, + 0x4365,0x0000,0xCEF0,0x0000,0x0000,0xCEF1,0xCEF2,0x6249, + 0x0000,0x0000,0xCEF3,0x0000,0x0000,0xCEF4,0xCEF5,0xCEF6, + 0x0000,0x0000,0xCEF7,0x0000,0x0000,0x0000,0xCEF8,0xCEF9, + 0x0000,0x0000,0x624A,0x624D,0xCEFA,0x0000,0xCEFB,0xCEFC, + 0xCEFD,0x3F67,0xCEFE,0x4644,0xCFA1,0x624E,0x4B53,0xCFA2, + 0x624B,0x0000,0xCFA3,0x624C,0xCFA4,0x0000,0x0000,0x0000, + 0xCFA5,0x0000,0xCFA6,0xCFA7,0xCFA8,0x0000,0x0000,0x0000, + 0x0000,0x6251,0xCFA9,0x0000,0x0000,0xCFAA,0x6250,0x624F, + 0xCFAB,0x0000,0x0000,0x0000,0xCFAC,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x6253,0xCFAD,0xCFAE,0x6252,0x0000, + 0x0000,0x6254,0x0000,0x0000,0xCFAF,0xCFB0,0xCFB1,0x0000, + 0x0000,0x0000,0xCFB2,0x0000,0x0000,0x0000,0x6256,0xCFB3, + 0x6255,0x0000,0xCFB4,0x0000,0x0000,0x4A4D,0x0000,0xCFB5, + 0x0000,0x0000,0xCFB6,0x0000,0x3D56,0x4E46,0xCFB7,0xCFB8, + 0x6257,0xCFB9,0x0000,0x4637,0x0000,0xCFBA,0x6258,0x0000, + 0x0000,0x6259,0x0000,0x625D,0x625B,0x625C,0xCFBB,0x625A, + 0x0000,0x0000,0x0000,0xCFBC,0x0000,0x0000,0x0000,0x625E, + 0x0000,0xCFBD,0x0000,0x0000,0x0000,0x625F,0x0000,0x0000, + 0x0000,0xCFBE,0xCFBF,0x0000,0x0000,0xCFC0,0x0000,0x6260, + 0x0000,0xCFC1,0x6261,0x4C37,0x6262,0x0000,0xCFC2,0xCFC3, + 0xCFC4,0x0000,0x4C70,0x6263,0xCFC5,0x434E,0xCFC6,0x476A, + 0x0000,0x366B,0xCFC7,0x0000,0xCFC8,0x433B,0x6264,0x363A, + 0xCFC9,0xCFCA,0x0000,0x4050,0xCFCB,0x0000,0x0000,0x0000, + 0xCFCC,0x0000,0x0000,0xCFCD,0x6265,0x0000,0x0000,0x0000, + + /* 7800h */ + 0x0000,0x0000,0x3A3D,0x0000,0x0000,0xCFCE,0xCFCF,0x0000, + 0x0000,0xCFD0,0x0000,0x0000,0x6266,0xCFD1,0xCFD2,0x0000, + 0x0000,0xCFD3,0x6267,0x0000,0x3826,0x3A55,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0xCFD4,0x0000,0x0000, + 0x6269,0xCFD5,0xCFD6,0xCFD7,0x0000,0x4556,0x3A56,0x354E, + 0x0000,0x0000,0x0000,0x0000,0x0000,0xCFD8,0xCFD9,0x0000, + 0xCFDA,0x0000,0x4B24,0x0000,0x474B,0xCFDB,0x0000,0xCFDC, + 0x0000,0x0000,0x4557,0x0000,0x0000,0x0000,0x0000,0x395C, + 0x0000,0x0000,0x0000,0xCFDD,0xCFDE,0x626B,0x0000,0xCFDF, + 0xCFE0,0x0000,0x0000,0x0000,0xCFE1,0x0000,0xCFE2,0x0000, + 0x0000,0x0000,0xCFE3,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0xCFE4,0x3E4B,0xCFE5,0x0000, + 0xCFE6,0xCFE7,0x0000,0xCFE8,0xCFE9,0x0000,0x0000,0x0000, + 0xCFEA,0x0000,0xCFEB,0x4E32,0x3945,0x0000,0xCFEC,0x3827, + 0x0000,0x0000,0x4823,0x0000,0x626D,0x0000,0x0000,0x0000, + 0x0000,0x0000,0xCFED,0x0000,0x626F,0x0000,0xCFEE,0x0000, + 0x0000,0x386B,0x0000,0x0000,0x0000,0x0000,0x626E,0x4476, + 0x0000,0x0000,0xCFEF,0x0000,0x6271,0x3337,0x626C,0xCFF0, + 0x0000,0x486A,0x0000,0x3130,0xCFF1,0x3A6C,0x0000,0x4F52, + 0xCFF2,0x0000,0x6270,0x0000,0x0000,0xCFF4,0xCFF5,0xCFF6, + 0x0000,0xCFF3,0x0000,0x6272,0xCFF7,0x0000,0x0000,0x4A4B, + 0xCFF8,0x4059,0x6274,0x0000,0xCFF9,0xCFFA,0x0000,0x6275, + 0xCFFB,0xCFFC,0xCFFD,0xCFFE,0x0000,0x6273,0x0000,0x0000, + 0x0000,0x0000,0x334E,0xD0A1,0x627B,0xD0A2,0x627A,0xD0A3, + 0x0000,0x3C27,0x0000,0x0000,0x0000,0x627C,0x6277,0xD0A4, + 0xD0A5,0xD0A6,0x627D,0x6278,0xD0A7,0x0000,0xD0A8,0x0000, + 0x4858,0x6276,0xD0A9,0xD0AA,0x6279,0xD0AB,0xD0AC,0x0000, + 0x0000,0x0000,0x6322,0xD0AE,0x0000,0x0000,0x0000,0xD0AF, + 0xD0B0,0xD0B1,0x0000,0x0000,0xD0AD,0x0000,0xD0B2,0x6321, + 0x4B61,0x0000,0xD0B3,0x0000,0x627E,0x0000,0x0000,0x306B, + 0x0000,0x0000,0xD0B4,0xD0B5,0x6324,0x0000,0xD0B7,0xD0B8, + 0x0000,0x0000,0xD0B9,0xD0BA,0x0000,0x6323,0x0000,0xD0BB, + + /* 7900h */ + 0xD0B6,0x3E4C,0x0000,0x0000,0x0000,0x0000,0xD0BC,0x6325, + 0x0000,0x0000,0x0000,0x0000,0xD0BD,0x0000,0x4143,0x0000, + 0xD0BE,0x6327,0x6326,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x6328,0xD0BF,0x0000,0xD0C0,0x0000,0xD0C1,0xD0C2, + 0xD0C3,0x0000,0x0000,0x0000,0x0000,0xD0C4,0x6268,0xD0C5, + 0x0000,0xD0C6,0x626A,0x632A,0x6329,0xD0C7,0x0000,0x0000, + 0x0000,0xD0C8,0x0000,0x0000,0xD0C9,0xD0CA,0x0000,0x0000, + 0x0000,0x0000,0x3C28,0xD0CB,0x4E69,0xD0CC,0x3C52,0xD0CD, + 0x632B,0x3737,0x0000,0x0000,0xD0CE,0xD0CF,0xD0D0,0x3540, + 0x3527,0x3B63,0xD0D1,0xD0D2,0x0000,0x0000,0x0000,0xD0D3, + 0x4D34,0xD0D4,0x0000,0x6331,0xD0D5,0x6330,0x4144,0x632D, + 0xD0D6,0x0000,0x632F,0xD0D7,0xD0D8,0x3D4B,0x3F40,0x632E, + 0x632C,0x0000,0x472A,0x0000,0x0000,0x3E4D,0x0000,0xD0D9, + 0x493C,0xD0DA,0x0000,0xD0DB,0x0000,0x3A57,0x0000,0x0000, + 0x0000,0x0000,0xD0DC,0x0000,0x0000,0x0000,0x0000,0x4578, + 0x0000,0xD0DD,0x6332,0xD0DE,0xD0DF,0x0000,0xD0E0,0x6333, + 0x6349,0x3658,0x0000,0x0000,0x4F3D,0x4135,0x0000,0x0000, + 0x0000,0x0000,0x6334,0xD0E1,0xD0E2,0x3252,0x4477,0x4A21, + 0x0000,0xD0E3,0x0000,0xD0E4,0xD0E5,0xD0E6,0xD0E7,0x0000, + 0xD0E8,0x0000,0x0000,0xD0E9,0xD0EA,0x6335,0x0000,0x0000, + 0x0000,0xD0EB,0x0000,0x0000,0x0000,0x0000,0x357A,0x6336, + 0xD0EC,0xD0ED,0x6338,0xD0EE,0x0000,0x0000,0x6339,0xD0EF, + 0x4729,0xD0F0,0x0000,0x633A,0xD0F1,0x0000,0x0000,0x0000, + 0xD0F2,0x633B,0x633C,0xD0F3,0x0000,0x3659,0x3253,0x4645, + 0x3D28,0x3B64,0xD0F4,0x0000,0xD0F5,0x0000,0x0000,0xD0F6, + 0xD0F7,0x633D,0xD0F8,0x3D29,0x0000,0x0000,0x0000,0xD0F9, + 0x0000,0x324A,0x4943,0x0000,0xD0FA,0x633E,0xD0FB,0x0000, + 0x486B,0x0000,0xD0FC,0x0000,0x0000,0xD0FD,0xD0FE,0x4145, + 0xD1A1,0x6341,0xD1A2,0x6342,0x4769,0xD1A3,0x3F41,0x633F, + 0x0000,0x4361,0xD1A4,0xD1A5,0x6340,0xD1A6,0x0000,0x0000, + 0x3E4E,0xD1A7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0xD1A8,0x0000,0x0000,0x305C,0xD1A9,0x0000,0x0000,0x0000, + + /* 7A00h */ + 0x3529,0x0000,0xD1AA,0xD1AB,0x0000,0x0000,0x0000,0xD1AC, + 0x6343,0xD1AD,0xD1AE,0x4478,0xD1AF,0x6344,0x4047,0x0000, + 0x0000,0xD1B0,0x0000,0x0000,0x4C2D,0xD1B1,0x0000,0x4923, + 0x6345,0x6346,0x4355,0xD1B2,0x4E47,0x0000,0xD1B3,0x6348, + 0x6347,0xD1B4,0x0000,0x0000,0x0000,0x0000,0x0000,0xD1B5, + 0x0000,0x0000,0x0000,0xD1B6,0x0000,0xD1B7,0x3C6F,0xD1B8, + 0xD1B9,0x634A,0x3070,0x0000,0xD1BA,0xD1BB,0x0000,0x634D, + 0xD1BC,0xD1BD,0xD1BE,0x634B,0x3254,0x374E,0x634C,0x3946, + 0x3972,0x0000,0x4A66,0x634E,0xD1BF,0xD1C0,0x4B54,0xD1C1, + 0xD1C2,0x6350,0x0000,0x0000,0xD1C3,0x4051,0x314F,0x323A, + 0x302C,0x0000,0x0000,0x0000,0x0000,0xD1C4,0xD1C5,0x634F, + 0x0000,0xD1C6,0x0000,0x0000,0xD1C7,0xD1C8,0x0000,0xD1C9, + 0xD1CA,0x6351,0x6352,0x3E77,0x0000,0xD1CB,0x0000,0xD1CC, + 0x0000,0x6353,0xD1CD,0x334F,0x0000,0xD1CE,0x0000,0x0000, + 0x6355,0x0000,0x0000,0x0000,0x376A,0xD1CF,0x3566,0x0000, + 0xD1D0,0x6356,0x3675,0x0000,0x0000,0x6357,0xD1D1,0x407C, + 0xD1D2,0x464D,0xD1D3,0x4060,0x3A75,0xD1D4,0xD1D5,0x0000, + 0x6358,0x0000,0xD1D6,0xD1D7,0x0000,0x0000,0x0000,0x0000, + 0xD1D8,0xD1D9,0x4362,0x416B,0xD1DA,0x635A,0x635C,0x6359, + 0x635B,0x0000,0x0000,0x0000,0x0000,0x0000,0xD1DB,0x3722, + 0xD1DC,0x0000,0x0000,0xD1DD,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x635D,0x3726,0x0000,0xD1DE,0x0000,0x3567,0x4D52, + 0x635F,0x0000,0x0000,0xD1DF,0x0000,0xD1E0,0x6360,0x0000, + 0x0000,0xD1E1,0x312E,0xD1E2,0xD1E3,0x0000,0x0000,0x6363, + 0x0000,0x0000,0x0000,0x3376,0x6362,0x6361,0xD1E4,0x6365, + 0x635E,0xD1E5,0x6366,0x4E29,0xD1E6,0x6367,0xD1E7,0x6368, + 0x0000,0xD1E8,0x5474,0x636A,0x0000,0x6369,0x0000,0x0000, + 0x0000,0x636B,0x636C,0xD1E9,0x4E35,0x636D,0x0000,0x706F, + 0x3E4F,0x636E,0x636F,0x3D57,0x0000,0x4638,0x6370,0x0000, + 0xD1EA,0xD1EB,0x4328,0xD1EC,0xD1ED,0x6371,0x0000,0x433C, + 0x6372,0xD1EE,0x0000,0x0000,0xD1EF,0x0000,0x3625,0x0000, + 0x513F,0x435D,0x3C33,0xD1F0,0x0000,0xD1F1,0xD1F2,0x3448, + + /* 7B00h */ + 0x0000,0x0000,0x6373,0x0000,0x6422,0x0000,0x6376,0xD1F3, + 0x3568,0x0000,0x6375,0x6424,0x0000,0x0000,0x0000,0x6374, + 0x0000,0x3E50,0x0000,0x0000,0xD1F4,0x0000,0x0000,0x0000, + 0x6378,0x6379,0x0000,0x452B,0x0000,0x0000,0x637A,0xD1F5, + 0x335E,0x0000,0x0000,0xD1F6,0x0000,0x3F5A,0x4964,0xD1F7, + 0x637C,0xD1F8,0xD1F9,0xD1FA,0x4268,0xD1FB,0xD1FC,0xD1FD, + 0xD1FE,0xD2A1,0x0000,0x6377,0xD2A2,0x637B,0x637D,0x0000, + 0x0000,0x3A7B,0x0000,0x0000,0x0000,0xD2A3,0x0000,0xD2A4, + 0xD2A5,0xD2A6,0x0000,0x0000,0x0000,0x6426,0x492E,0xD2A7, + 0x4826,0x4579,0x0000,0x365A,0x6425,0x6423,0xD2A8,0x4835, + 0x637E,0x435E,0x457B,0x0000,0x457A,0xD2A9,0x3A76,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x6438,0x0000,0x0000, + 0xD2AA,0x0000,0x0000,0x0000,0xD2AB,0x6428,0xD2AC,0x642A, + 0x0000,0xD2AD,0xD2AE,0x0000,0x642D,0xD2AF,0x642E,0xD2B0, + 0x642B,0x642C,0xD2B1,0xD2B2,0x6429,0x6427,0x0000,0xD2B3, + 0x0000,0x0000,0x6421,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0xD2B4,0x0000,0x4A4F,0x3255, + 0x0000,0xD2B5,0x0000,0x6435,0x0000,0x6432,0xD2B6,0x6437, + 0xD2B7,0xD2B8,0x6436,0x0000,0x4773,0x4C27,0xD2B9,0x3B3B, + 0x6430,0x6439,0x6434,0xD2BA,0x6433,0x642F,0xD2BB,0x6431, + 0xD2BC,0x3449,0x0000,0x0000,0x0000,0xD2BD,0x0000,0x0000, + 0x0000,0x0000,0x433D,0x0000,0xD2BE,0x407D,0x0000,0xD2BF, + 0xD2C0,0x4822,0xD2C1,0x0000,0x643E,0xD2C2,0xD2C3,0x0000, + 0x4824,0x0000,0xD2C4,0xD2C5,0xD2C6,0xD2C7,0x0000,0x0000, + 0x4061,0x643B,0xD2C8,0x0000,0x484F,0xD2C9,0x643F,0x4A53, + 0xD2CA,0x435B,0xD2CB,0x643A,0x643C,0x0000,0x0000,0x643D, + 0x0000,0x0000,0x0000,0x0000,0xD2CC,0x0000,0xD2CD,0xD2CE, + 0x0000,0xD2CF,0xD2D0,0xD2D1,0x0000,0x6440,0x0000,0x0000, + 0x3C44,0x0000,0x0000,0x0000,0x4646,0x6445,0x6444,0x0000, + 0xD2D2,0x6441,0xD2D3,0x0000,0x0000,0x4F36,0x0000,0x0000, + 0x0000,0x0000,0xD2D4,0x644A,0xD2D5,0xD2D6,0x644E,0x644B, + 0xD2D7,0xD2D8,0xD2D9,0x0000,0xD2DA,0x0000,0xD2DB,0x0000, + + /* 7C00h */ + 0x6447,0xD2DC,0xD2DD,0xD2DE,0xD2DF,0x0000,0xD2E0,0x6448, + 0x0000,0xD2E1,0x0000,0xD2E2,0xD2E3,0x644D,0xD2E4,0xD2E5, + 0x0000,0x6442,0x5255,0x6449,0x6443,0x0000,0x0000,0x644C, + 0x0000,0xD2E6,0x0000,0xD2E7,0x0000,0x0000,0x0000,0x6452, + 0xD2E8,0x344A,0x0000,0x644F,0x0000,0xD2E9,0xD2EA,0x6450, + 0xD2EB,0x0000,0x6451,0x6454,0xD2EC,0x0000,0x0000,0x0000, + 0x0000,0xD2ED,0x0000,0xD2EE,0xD2EF,0x0000,0xD2F0,0x6453, + 0x4876,0xD2F1,0xD2F2,0x0000,0x0000,0x6455,0x4E7C,0x4A6D, + 0x645A,0x0000,0x0000,0x6457,0x0000,0x0000,0xD2F3,0x0000, + 0x0000,0x0000,0xD2F4,0x0000,0x6456,0x4052,0x0000,0x6459, + 0x645B,0xD2F6,0xD2F7,0xD2F8,0x6458,0xD2F5,0x645F,0x0000, + 0x645C,0xD2F9,0xD2FA,0xD2FB,0xD2FC,0xD2FD,0xD2FE,0x645D, + 0x6446,0xD3A1,0x0000,0xD3A2,0x645E,0x6460,0x0000,0xD3A3, + 0x0000,0xD3A4,0x0000,0x0000,0x6461,0xD3A5,0xD3A6,0x0000, + 0xD3A7,0x0000,0xD3A8,0x4A46,0x0000,0x6462,0x0000,0x0000, + 0x0000,0xD3A9,0x0000,0x0000,0xD3AA,0xD3AB,0x4C62,0x0000, + 0x0000,0x364E,0x3729,0x6463,0x0000,0x0000,0xD3AC,0xD3AD, + 0x0000,0x4A34,0x0000,0x3F68,0x0000,0x4C30,0x0000,0xD3AE, + 0x6464,0x0000,0x4E33,0x0000,0xD3AF,0x4774,0x0000,0x4146, + 0x4734,0x0000,0x0000,0x3D4D,0x0000,0x0000,0xD3B0,0x3040, + 0xD3B1,0x6469,0x6467,0x0000,0x6465,0x3421,0xD3B2,0x3E51, + 0x646A,0x0000,0x0000,0x6468,0x0000,0x6466,0x646E,0x0000, + 0xD3B3,0x646D,0x646C,0x646B,0x0000,0x0000,0xD3B4,0xD3B5, + 0x0000,0x646F,0xD3B6,0xD3B7,0xD3B8,0x6470,0x403A,0xD3B9, + 0x6471,0x0000,0x6473,0x0000,0xD3BA,0x6472,0x0000,0xD3BB, + 0xD3BC,0xD3BD,0x3852,0x0000,0x0000,0xD3BE,0x4138,0xD3BF, + 0x0000,0x0000,0x6475,0xD3C0,0xD3C1,0xD3C2,0x457C,0xD3C3, + 0x6474,0xD3C4,0xD3C5,0x0000,0x6476,0xD3C6,0x4A35,0x416C, + 0x3947,0x0000,0x6477,0x0000,0x0000,0x0000,0xD3C7,0x4E48, + 0x0000,0xD3C8,0x0000,0xD3C9,0x0000,0x0000,0x0000,0x6479, + 0x0000,0x0000,0x647A,0x0000,0x647B,0xD3CA,0x647C,0x0000, + 0x3B65,0x0000,0x647D,0x374F,0x0000,0x0000,0x356A,0x0000, + + /* 7D00h */ + 0x352A,0x0000,0x6521,0xD3CB,0x4C73,0x3948,0x647E,0xD3CC, + 0xD3CD,0xD3CE,0x6524,0x4C66,0x0000,0x473C,0x0000,0xD3CF, + 0x4933,0xD3D0,0xD3D1,0xD3D2,0x3D63,0x6523,0xD3D3,0x3C53, + 0x3949,0x3B66,0x3569,0x4A36,0x6522,0xD3D4,0xD3D5,0x0000, + 0x4147,0x4B42,0x3A77,0xD3D6,0x0000,0x0000,0xD3D7,0x0000, + 0x0000,0x0000,0xD3D8,0x3B67,0x445D,0xD3D9,0x6527,0x4E5F, + 0x3A59,0xD3DA,0x6528,0x3F42,0x0000,0x652A,0x0000,0x0000, + 0x0000,0x3E52,0x3A30,0x0000,0xD3DB,0xD3DC,0xD3DD,0x6529, + 0xD3DE,0xD3DF,0x3D2A,0x383E,0x4148,0x6525,0x652B,0xD3E0, + 0xD3E1,0x0000,0x0000,0x6526,0x3750,0xD3E2,0x652E,0x6532, + 0x376B,0xD3E3,0x0000,0xD3E4,0x0000,0x0000,0x652D,0xD3E5, + 0x0000,0xD3E6,0xD3E7,0x6536,0xD3E8,0xD3E9,0x394A,0x0000, + 0x0000,0x4D6D,0x303C,0x6533,0x0000,0xD3EA,0x356B,0xD3EB, + 0x6530,0x0000,0xD3EC,0x0000,0x0000,0x0000,0x6531,0x0000, + 0xD3ED,0x457D,0x652F,0x652C,0x0000,0x3328,0x4064,0x0000, + 0xD3EE,0x3828,0xD3EF,0xD3F0,0x0000,0x6538,0x0000,0xD3F1, + 0x0000,0xD3F2,0xD3F3,0xD3F4,0x0000,0xD3F5,0xD3F6,0x0000, + 0xD3F7,0x6535,0x0000,0xD3F8,0xD3F9,0xD3FA,0x0000,0x6537, + 0x0000,0xD3FB,0x0000,0x6534,0x0000,0x0000,0xD3FC,0xD3FD, + 0x0000,0x3751,0x4233,0x6539,0x416E,0xD3FE,0xD4A1,0x6546, + 0x0000,0x0000,0x6542,0x653C,0x0000,0x0000,0xD4A2,0xD4A3, + 0x0000,0x0000,0xD4A4,0x6540,0x3C7A,0x305D,0x653B,0x6543, + 0x6547,0x394B,0x4C56,0xD4A5,0x4456,0x653D,0xD4A6,0xD4A7, + 0x6545,0xD4A8,0x653A,0x433E,0x0000,0x653F,0x303D,0x4C4A, + 0x0000,0x0000,0xD4A9,0xD4AA,0xD4AB,0xD4AC,0xD4AD,0x653E, + 0x0000,0x0000,0x365B,0x486C,0xD4AE,0xD4AF,0xD4B0,0x416D, + 0x0000,0x4E50,0x3D6F,0x0000,0x0000,0x656E,0x0000,0xD4B1, + 0x6548,0xD4B2,0x407E,0x0000,0x6544,0x6549,0x654B,0x0000, + 0x4479,0x654E,0xD4B4,0x0000,0x654A,0xD4B5,0xD4B6,0x0000, + 0x4A54,0x344B,0xD4B7,0xD4B8,0x4C4B,0xD4B9,0x0000,0x305E, + 0x0000,0xD4BA,0x654D,0x0000,0x4E7D,0xD4BB,0xD4BC,0x0000, + 0x0000,0xD4BD,0xD4BE,0x654C,0x0000,0x0000,0x0000,0x0000, + + /* 7E00h */ + 0xD4B3,0x316F,0x0000,0x0000,0x466C,0x654F,0x0000,0x0000, + 0xD4BF,0x6556,0x6550,0x6557,0x0000,0x0000,0x0000,0x0000, + 0xD4C0,0xD4C1,0x6553,0x0000,0x0000,0xD4C2,0x0000,0xD4C3, + 0x0000,0x0000,0x0000,0x477B,0xD4C4,0xD4C5,0x3C4A,0x6555, + 0xD4C6,0x6552,0x6558,0x6551,0x0000,0x0000,0x3D44,0xD4C7, + 0xD4C8,0x0000,0x0000,0x4B25,0xD4C9,0xD4CA,0x3D4C,0xD4CB, + 0x0000,0x6554,0x6560,0xD4CC,0x0000,0x655C,0xD4CD,0x655F, + 0x0000,0x655D,0x6561,0x655B,0x0000,0x6541,0x4053,0xD4CE, + 0x0000,0x484B,0x0000,0x655E,0xD4CF,0xD4D0,0x6559,0xD4D1, + 0x0000,0x0000,0x4121,0x3752,0x0000,0x3D2B,0xD4D2,0x0000, + 0xD4D3,0x0000,0xD4D4,0x0000,0x3F25,0x4136,0x6564,0x0000, + 0xD4D5,0x6566,0x6567,0x0000,0x0000,0x6563,0x6565,0xD4D6, + 0x0000,0xD4D7,0xD4D8,0x0000,0x0000,0xD4D9,0x655A,0x6562, + 0x0000,0x656A,0x6569,0xD4DA,0x0000,0x4B7A,0xD4DB,0xD4DC, + 0x372B,0x0000,0x0000,0xD4DD,0x0000,0x0000,0x0000,0x0000, + 0xD4DE,0x6568,0x0000,0x656C,0x656B,0x656F,0xD4DF,0x6571, + 0x0000,0xD4E0,0x3B3C,0x656D,0x0000,0x0000,0xD4E1,0xD4E2, + 0x6572,0x6573,0xD4E3,0x0000,0x6574,0xD4E4,0x657A,0x453B, + 0x6576,0xD4E5,0x6575,0x6577,0x6578,0xD4E6,0x6579,0x0000, + 0xD4E7,0x0000,0xD4E8,0x657B,0x657C,0xD4E9,0xD4EA,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 7F00h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x344C,0x0000, + 0x657D,0x0000,0x657E,0xD4EC,0xD4EB,0xD4ED,0xD4EE,0xD4EF, + 0x0000,0x0000,0x0000,0xD4F0,0xD4F1,0x6621,0x0000,0xD4F2, + 0x0000,0x0000,0x0000,0x0000,0x6622,0x6623,0x6624,0xD4F3, + 0x6625,0x6626,0xD4F4,0xD4F5,0x6628,0x6627,0x0000,0x0000, + 0x6629,0x0000,0x0000,0xD4F6,0xD4F7,0xD4F8,0x0000,0x662A, + 0x662B,0xD4F9,0x0000,0xD4FA,0xD4FB,0xD4FC,0xD4FD,0x662E, + 0x662C,0x662D,0x3A61,0x3753,0x0000,0xD4FE,0x4356,0x0000, + 0x4833,0xD5A1,0x3D70,0x0000,0x0000,0x474D,0x0000,0x486D, + 0x662F,0x586D,0x0000,0x0000,0x0000,0xD5A2,0xD5A3,0xD5A4, + 0xD5A5,0x0000,0x6630,0x6632,0x0000,0x4D65,0x6631,0x6634, + 0x6633,0x0000,0x4D53,0xD5A6,0x6635,0xD5A7,0x487E,0xD5A8, + 0xD5A9,0xD5AA,0x0000,0x0000,0x6636,0x0000,0xD5AB,0xD5AC, + 0x0000,0x0000,0x6639,0x0000,0xD5AD,0x6638,0x6637,0x0000, + 0x0000,0xD5AE,0xD5AF,0x663A,0x3732,0x0000,0xD5B0,0x0000, + 0x4122,0x3541,0xD5B1,0x0000,0x0000,0xD5B2,0x663E,0x663B, + 0x0000,0x0000,0x663C,0x0000,0xD5B3,0x0000,0x663F,0x0000, + 0x6640,0x663D,0x0000,0x0000,0xD5B4,0x3129,0x0000,0xD5B5, + 0xD5B6,0x3227,0x0000,0xD5B7,0x0000,0x6642,0x6643,0x0000, + 0xD5B8,0x0000,0x6644,0x0000,0x4D62,0x0000,0xD5B9,0xD5BA, + 0x0000,0x0000,0x3D2C,0x0000,0x6646,0x6645,0x0000,0x0000, + 0x0000,0x0000,0x0000,0xD5BB,0x0000,0x0000,0x0000,0xD5BC, + 0x3F69,0x6647,0x0000,0xD5BD,0x0000,0xD5BE,0x6648,0x0000, + 0xD5BF,0x6649,0x0000,0x3465,0xD5C0,0x0000,0xD5C1,0xD5C2, + 0x344D,0x0000,0xD5C3,0x664A,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x664B,0xD5C4,0x4B5D,0x4D63,0xD5C5,0xD5C6,0xD5C7, + + /* 8000h */ + 0x4D54,0x4F37,0x0000,0x394D,0x664E,0x3C54,0x664D,0xD5C8, + 0xD5C9,0x0000,0xD5CA,0x664F,0x3C29,0xD5CB,0xD5CC,0xD5CD, + 0x4251,0xD5CE,0x6650,0xD5CF,0xD5D0,0x394C,0xD5D1,0x4C57, + 0x6651,0x6652,0x0000,0x0000,0x6653,0xD5D2,0xD5D3,0xD5D4, + 0xD5D5,0x6654,0x0000,0x0000,0xD5D6,0x0000,0xD5D7,0x0000, + 0x6655,0x0000,0x0000,0x0000,0xD5D8,0x0000,0xD5D9,0x0000, + 0xD5DA,0x0000,0x0000,0x3C2A,0xD5DB,0xD5DC,0x4C6D,0xD5DD, + 0x0000,0xD5DE,0xD5DF,0x6657,0xD5E0,0x433F,0xD5E1,0x6656, + 0xD5E2,0x0000,0x0000,0x0000,0xD5E3,0x0000,0x6659,0x0000, + 0x0000,0x0000,0x6658,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x665A,0x0000,0x0000,0x0000,0x403B,0x0000, + 0x665B,0x0000,0x665C,0x0000,0x0000,0x0000,0x4A39,0x665D, + 0xD5E4,0x416F,0x665E,0x0000,0xD5E5,0x0000,0xD5E6,0x0000, + 0x665F,0x0000,0x0000,0x0000,0x0000,0xD5E7,0x0000,0x4E7E, + 0x6662,0xD5E8,0x6661,0x6660,0x4430,0xD5E9,0x6663,0x3F26, + 0x0000,0x6664,0x0000,0x0000,0x0000,0x6665,0x4F38,0x6666, + 0x0000,0xD5EA,0x0000,0x0000,0x6667,0x6669,0x6668,0x4825, + 0xD5EB,0x4679,0x0000,0x4F3E,0x4829,0x0000,0xD5EC,0x0000, + 0x0000,0x0000,0x0000,0x666B,0x0000,0x0000,0x3E53,0x0000, + 0x492A,0x0000,0x666C,0x666A,0xD5ED,0x344E,0xD5EE,0x0000, + 0x0000,0x3854,0x3B68,0x0000,0x0000,0x486E,0xD5EF,0xD5F0, + 0x0000,0x382A,0x4B43,0xD5F1,0x666F,0x666D,0x0000,0x394E, + 0x0000,0x394F,0x3069,0x0000,0x3A68,0x0000,0x0000,0x0000, + 0xD5F2,0xD5F3,0x4759,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x305F,0x6674,0x0000,0x4340,0x0000, + 0xD5F4,0x0000,0x0000,0x0000,0x4758,0xD5F5,0x425B,0xD5F6, + 0x0000,0x0000,0xD5F7,0x0000,0xD5F8,0xD5F9,0x6676,0xD5FA, + 0xD5FB,0x6672,0x6675,0x6670,0x0000,0x6673,0x4B26,0x0000, + 0xD5FC,0x3855,0x0000,0x0000,0x307D,0x6671,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0xD5FD,0xD5FE,0x6678, + 0xD6A1,0x6679,0xD6A2,0xD6A3,0x4639,0x0000,0xD6A4,0x0000, + 0x363B,0xD6A5,0xD6A6,0x0000,0x6726,0x473D,0xD6A7,0x0000, + + /* 8100h */ + 0x0000,0x0000,0x3B69,0xD6A8,0x0000,0x363C,0x4048,0x4F46, + 0x4C2E,0x6677,0x4054,0xD6A9,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xD6AA,0xD6AB, + 0xD6AC,0x0000,0x3553,0x667A,0xD6AD,0x0000,0xD6AE,0x0000, + 0xD6AF,0x0000,0x0000,0x667C,0xD6B0,0x0000,0x0000,0xD6B1, + 0x0000,0x667B,0x0000,0x0000,0xD6B2,0x0000,0x0000,0x667D, + 0xD6B3,0x4326,0x0000,0x473E,0x0000,0xD6B4,0x0000,0x0000, + 0x0000,0x4431,0xD6B5,0x0000,0xD6B6,0x0000,0x6723,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0xD6B7,0x6722,0xD6B8, + 0x0000,0x0000,0xD6B9,0x667E,0xD6BA,0x0000,0x3F55,0x0000, + 0x4965,0x6725,0xD6BB,0x6724,0x3950,0x4F53,0x0000,0xD6BC, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6735, + 0xD6BD,0xD6BE,0x0000,0x0000,0x0000,0x6729,0x672A,0xD6BF, + 0xD6C0,0xD6C1,0x0000,0x3C70,0x0000,0xD6C2,0x6728,0xD6C3, + 0x3978,0x6727,0x0000,0x0000,0x672B,0x0000,0x0000,0xD6C4, + 0x4432,0x4A22,0x4123,0x0000,0x0000,0x0000,0x0000,0x425C, + 0x672F,0xD6C5,0x6730,0x672C,0xD6C7,0xD6C8,0xD6C9,0x0000, + 0x672D,0x0000,0x672E,0xD6CA,0x0000,0x0000,0xD6CB,0x3951, + 0xD6C6,0x0000,0x0000,0x6736,0x0000,0x6732,0xD6CC,0x0000, + 0xD6CD,0x0000,0x4966,0xD6CE,0x4B6C,0x4928,0xD6CF,0x0000, + 0x6731,0x0000,0xD6D0,0x6734,0x6733,0x0000,0x0000,0x0000, + 0x4B44,0x6737,0x0000,0x0000,0x0000,0x0000,0xD6D1,0x0000, + 0x6738,0x0000,0xD6D2,0x4137,0xD6D3,0x6739,0x0000,0x0000, + 0x673B,0x0000,0x673F,0xD6D4,0x0000,0x673C,0x673A,0x473F, + 0x673D,0x0000,0x673E,0xD6D6,0x0000,0xD6D7,0x3232,0x0000, + 0x6745,0x6740,0xD6D8,0xD6D5,0x0000,0x6741,0xD6D9,0xD6DA, + 0x0000,0x6742,0x0000,0x4221,0x0000,0xD6DB,0x0000,0xD6DC, + 0x6744,0x6743,0x6746,0xD6DD,0x0000,0xD6DE,0xD6DF,0x6747, + 0x6748,0xD6E0,0x0000,0x3F43,0xD6E1,0x3269,0x0000,0x6749, + 0x4E57,0x0000,0x3C2B,0xD6E2,0xD6E3,0x3D2D,0x0000,0x0000, + 0xD6E4,0xD6E5,0xD6E6,0x3B6A,0x4357,0xD6E7,0xD6E8,0x0000, + 0xD6E9,0xD6EA,0x674A,0x674B,0x3131,0xD6EB,0x674C,0xD6EC, + + /* 8200h */ + 0xD6ED,0x674D,0x674E,0xD6EE,0x0000,0x674F,0x0000,0x6750, + 0x363D,0x5A2A,0x6751,0x0000,0x4065,0x6752,0x3C4B,0xD6EF, + 0x6753,0x0000,0x5030,0xD6F0,0xD6F1,0x0000,0x6754,0x4A5E, + 0x345C,0xD6F2,0xD6F3,0x4124,0x3D58,0xD6F4,0x4971,0x3D2E, + 0x0000,0xD6F5,0xD6F6,0x0000,0x0000,0x0000,0x0000,0x0000, + 0xD6F7,0x6755,0x3952,0x6756,0x484C,0x0000,0x6764,0x0000, + 0x0000,0x0000,0xD6F8,0x6758,0xD6F9,0x4249,0x4775,0x383F, + 0x6757,0x4125,0xD6FA,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x6759,0x0000,0x0000,0xD6FB,0xD6FC,0xD6FD,0xD6FE,0x447A, + 0x0000,0x0000,0x0000,0xD7A1,0x0000,0x0000,0xD7A2,0xD7A3, + 0x0000,0xD7A4,0x0000,0x0000,0x0000,0x0000,0xD7A5,0x0000, + 0x675B,0x675A,0x675D,0x0000,0xD7A6,0x675C,0x0000,0x675E, + 0xD7A7,0x0000,0x6760,0xD7A8,0x675F,0x0000,0x344F,0xD7A9, + 0x6761,0x0000,0x6762,0x6763,0x0000,0xD7AA,0x3A31,0x4E49, + 0x0000,0x6765,0x3F27,0x0000,0xD7AB,0x0000,0x3170,0x6766, + 0x6767,0x0000,0x0000,0xD7AC,0x0000,0xD7AD,0x6768,0xD7AE, + 0xD7AF,0xD7B0,0x0000,0xD7B1,0xD7B2,0x0000,0x0000,0xD7B3, + 0x0000,0xD7B4,0xD7B5,0x3072,0x0000,0x6769,0xD7B6,0x0000, + 0x0000,0xD7B7,0x676A,0x0000,0xD7B8,0x0000,0xD7B9,0x0000, + 0xD7BA,0x4967,0xD7BB,0xD7BC,0x0000,0x3C47,0x0000,0x676C, + 0xD7BD,0xD7BE,0x0000,0xD7BF,0xD7C0,0x3329,0x3032,0xD7C1, + 0xD7C2,0xD7C3,0xD7C4,0x676B,0x676E,0x474E,0xD7C5,0x3F44, + 0xD7C6,0x3256,0xD7C7,0x4B27,0xD7C8,0x0000,0x0000,0xD7C9, + 0x375D,0x365C,0xD7CA,0x676D,0xD7CB,0x326A,0xD7CC,0xD7CD, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x3423,0xD7CE,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0xD7CF,0x3171,0x6772,0x4E6A,0x425D,0xD7D0,0x0000,0x4944, + 0x0000,0x677E,0xD7D1,0x3257,0x677C,0x0000,0x677A,0x6771, + 0xD7D2,0x676F,0xD7D3,0x6770,0xD7D4,0x3C63,0x366C,0x4377, + 0xD7D5,0x0000,0xD7D6,0x4651,0x0000,0xD7D7,0x0000,0xD7D8, + 0x0000,0x3151,0x0000,0x6774,0x6773,0x0000,0xD7D9,0xD7DA, + 0x0000,0x6779,0x6775,0x6778,0x0000,0xD7DB,0xD7DC,0x0000, + + /* 8300h */ + 0xD7DD,0xD7DE,0x4C50,0x6777,0x3258,0x337D,0x677B,0xD7DF, + 0xD7E0,0x677D,0xD7E1,0xD7E2,0x0000,0x0000,0x3754,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6823,0x682C, + 0x682D,0x0000,0x0000,0xD7E4,0x302B,0xD7E5,0xD7E6,0xD7E7, + 0x0000,0xD7E8,0xD7E9,0x6834,0x0000,0x0000,0x0000,0x0000, + 0x3071,0x0000,0x0000,0x682B,0xD7EA,0xD7EB,0xD7EC,0x682A, + 0xD7ED,0x6825,0x6824,0xD7EE,0x6822,0x6821,0x4363,0xD7EF, + 0x427B,0x6827,0xD7F0,0x0000,0xD7F1,0xD7F2,0x0000,0x0000, + 0x6826,0x0000,0xD7F3,0xD7F4,0xD7F5,0x6829,0x0000,0xD7F6, + 0x0000,0x4170,0x3755,0x0000,0x0000,0xD7F7,0xD7F8,0x3141, + 0x6828,0xD7F9,0x3953,0xD8BE,0xD7E3,0xD7FA,0xD7FB,0xD7FC, + 0x4171,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0xD7FD,0x0000,0x0000,0x683A,0x0000,0x683B,0x0000,0x3259, + 0xD7FE,0x0000,0x0000,0x322E,0x6838,0xD8A1,0x0000,0xD8A2, + 0xD8A3,0x0000,0xD8A4,0x0000,0xD8A5,0x682E,0xD8A6,0x6836, + 0x0000,0x683D,0x6837,0x0000,0x0000,0xD8A7,0x6835,0x0000, + 0x0000,0x0000,0xD8A8,0x6776,0xD8A9,0xD8AA,0x6833,0x0000, + 0xD8AB,0xD8AC,0x682F,0xD8AD,0xD8AE,0xD8AF,0x3450,0x6831, + 0x683C,0x0000,0x6832,0x0000,0x0000,0x0000,0xD8B0,0xD8B1, + 0x683E,0xD8B2,0x6830,0x477C,0xD8B3,0xD8CC,0x0000,0x0000, + 0x0000,0x4D69,0x0000,0x0000,0x0000,0x6839,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x684F,0xD8B4,0xD8B5, + 0xD8B6,0x6847,0x0000,0x0000,0x0000,0x3F7B,0x0000,0xD8B7, + 0x0000,0xD8B8,0x3546,0x0000,0x365D,0x0000,0x6842,0xD8B9, + 0xD8BA,0xD8BB,0x0000,0x325B,0xD8BC,0x0000,0x3E54,0x0000, + 0x6845,0x0000,0x0000,0x0000,0x3A5A,0xD8BD,0x0000,0x4551, + 0x684A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0xD8BF,0x4A6E,0xD8C0,0x6841,0x0000,0x0000,0x0000,0x325A, + 0x3856,0x4929,0x684B,0x0000,0x683F,0x0000,0xD8C1,0x6848, + 0xD8C2,0xD8C3,0x0000,0x6852,0xD8C4,0x6843,0x0000,0x0000, + + /* 8400h */ + 0x0000,0xD8C5,0x0000,0x6844,0x463A,0x0000,0xD8C6,0x6849, + 0x0000,0x0000,0xD8C7,0x6846,0x4B28,0x684C,0x3060,0xD8C8, + 0x0000,0xD8C9,0x0000,0x6840,0x0000,0xD8CA,0x0000,0x0000, + 0x0000,0xD8CB,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x684E,0x0000,0x684D,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x476B,0x6854,0x0000,0x685F,0x0000,0x0000,0xD8CD, + 0x0000,0x337E,0x0000,0x0000,0x0000,0x6862,0x0000,0x0000, + 0x6850,0xD8CE,0x0000,0x0000,0x6855,0x4D6E,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0xD8CF,0x685E,0xD8D0, + 0xD8D1,0x4D55,0xD8D2,0x0000,0x0000,0xD8D3,0x4E2A,0xD8D4, + 0x0000,0xD8D5,0xD8D6,0x0000,0x0000,0x0000,0xD8D7,0x4378, + 0xD8D8,0xD8D9,0xD8DA,0x336B,0xD8DB,0x0000,0x0000,0x0000, + 0xD8DC,0x4972,0x6864,0x4621,0xD8DD,0xD8DE,0x3031,0xD8DF, + 0x0000,0x685D,0xD8E0,0x6859,0x4172,0x6853,0x685B,0x6860, + 0xD8E1,0x472C,0x0000,0xD8E2,0xD8E3,0x302A,0xD8E4,0x6858, + 0xD8E5,0x6861,0x4978,0x0000,0xD8E6,0xD8E7,0x0000,0x0000, + 0x0000,0xD8E8,0x685C,0x0000,0x6857,0xD8E9,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x3E55,0x0000,0x0000,0x0000,0x0000, + 0x3D2F,0x0000,0xD8EA,0xD8EB,0x3C2C,0xD8EC,0x0000,0x0000, + 0x0000,0x4C58,0x0000,0x0000,0x4947,0x0000,0xD8ED,0x6867, + 0x0000,0x6870,0x0000,0x0000,0x0000,0x0000,0xD8EE,0x0000, + 0xD8EF,0xD8F0,0xD8F1,0x0000,0x0000,0x685A,0x0000,0xD8F2, + 0x0000,0xD8F3,0x3377,0x0000,0xD8F4,0x0000,0x0000,0x0000, + 0x3E78,0x6865,0xD8F5,0x686A,0x4173,0xD8F6,0xD8F7,0x6866, + 0xD8F8,0x686D,0xD8F9,0x0000,0x435F,0x0000,0x686E,0xD8FA, + 0xD8FB,0x4D56,0x6863,0x3338,0xD8FC,0x6869,0x0000,0xD8FD, + 0x686C,0x4C2C,0x0000,0xD8FE,0x0000,0x0000,0x686F,0x0000, + 0x0000,0x6868,0x686B,0x0000,0xD9A1,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xD9A2, + 0x0000,0x0000,0xD9A3,0x0000,0x4B29,0x0000,0x4F21,0xD9A4, + 0xD9A5,0xD9A6,0xD9A7,0x0000,0x6873,0x0000,0x0000,0xD9A8, + 0x0000,0x0000,0xD9AA,0xD9AB,0x687A,0xD9AC,0x0000,0x6872, + + /* 8500h */ + 0x3C43,0x0000,0xD9AD,0xD9AE,0x0000,0x0000,0x6851,0xD9AF, + 0x0000,0x0000,0x0000,0x0000,0xD9B0,0x0000,0xD9B1,0x0000, + 0xD9B2,0x4A4E,0x0000,0x4C22,0x6879,0x6878,0x0000,0x6874, + 0x6875,0x0000,0x3136,0x0000,0xD9B3,0x0000,0xD9B4,0x6877, + 0x0000,0x6871,0xD9B5,0xD9B6,0xD9B7,0xD9B8,0x4455,0xD9B9, + 0x0000,0x0000,0xD9BA,0xD9BB,0x6876,0x307E,0x0000,0xD9BC, + 0x0000,0x0000,0xD9A9,0xD9BD,0xD9BE,0x4222,0xD9BF,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x4A43,0x0000,0xD9C0, + 0x687B,0x6921,0x0000,0x4859,0x0000,0x0000,0xD9C1,0x0000, + 0x687E,0x3E56,0x3C49,0x6923,0x0000,0x0000,0x363E,0xD9C2, + 0xD9C3,0xD9C4,0xD9C5,0xD9C6,0x0000,0x6924,0xD9C7,0x4979, + 0x687D,0xD9C8,0x6856,0x0000,0xD9C9,0xD9CA,0xD9CB,0xD9CC, + 0xD9CD,0xD9CE,0xD9CF,0x687C,0xD9D0,0x0000,0x0000,0x0000, + 0x4F4F,0x4622,0x4973,0xD9D1,0x0000,0x692B,0x0000,0xD9D2, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6931, + 0x0000,0xD9D3,0xD9D4,0xD9D5,0x0000,0xD9D6,0x6932,0xD9D7, + 0x6925,0xD9D8,0x0000,0x0000,0x4776,0xD9D9,0xD9DA,0x692F, + 0x6927,0xD9DB,0x6929,0xD9DC,0xD9DD,0x0000,0x0000,0xD9DE, + 0x6933,0x6928,0x0000,0xD9DF,0x692C,0x0000,0x0000,0x3172, + 0xD9E0,0x4665,0x0000,0x692D,0x6930,0xD9E1,0x0000,0xD9E2, + 0xD9E3,0x0000,0xD9E4,0x0000,0x6926,0xD9E5,0x4126,0xD9E6, + 0x692A,0x3B27,0x3F45,0x3730,0x4C74,0xD9F4,0x4C79,0x3D72, + 0x0000,0x0000,0x0000,0x0000,0xD9E7,0x0000,0xD9E8,0xD9E9, + 0xD9EA,0x6937,0x6935,0x0000,0xD9EB,0xD9EC,0xD9ED,0xD9EE, + 0x0000,0x4F4E,0xD9EF,0x0000,0x0000,0x0000,0x0000,0xD9F0, + 0x0000,0x6934,0xD9F1,0xD9F2,0x0000,0x4D75,0xD9F3,0x6936, + 0x6938,0x0000,0x0000,0x0000,0x0000,0x6939,0x0000,0x0000, + 0xD9F5,0x0000,0xD9F6,0x0000,0x693C,0x693A,0x0000,0xD9F7, + 0xD9F8,0x0000,0x0000,0x0000,0x4623,0x693B,0xD9F9,0x0000, + 0xD9FA,0x484D,0x692E,0x0000,0x0000,0xD9FB,0x0000,0x0000, + 0x0000,0x0000,0x0000,0xD9FC,0x0000,0x0000,0xD9FD,0x3D73, + 0x0000,0x693D,0x6942,0x4174,0xD9FE,0x0000,0x6941,0xDAA1, + + /* 8600h */ + 0xDAA2,0x0000,0x6922,0x0000,0xDAA3,0xDAA4,0x6943,0x4149, + 0x0000,0x0000,0x693E,0x6940,0x0000,0xDAA5,0xDAA6,0x0000, + 0xDAA7,0xDAA8,0xDAA9,0x693F,0x0000,0x0000,0x5D31,0x5D22, + 0xDAAA,0xDAAB,0x6945,0xDAAC,0x0000,0x0000,0xDAAD,0x0000, + 0x0000,0xDAAE,0x6944,0x0000,0x0000,0x0000,0x0000,0xDAAF, + 0x0000,0xDAB0,0x0000,0x0000,0x0000,0x4D76,0x0000,0x623C, + 0x6946,0x0000,0x0000,0x0000,0x0000,0x0000,0xDAB1,0x0000, + 0xDAB2,0x0000,0xDAB3,0x0000,0xDAB4,0xDAB5,0x0000,0x6947, + 0xDAB6,0xB8E6,0xDAB7,0x0000,0x0000,0x0000,0xDAB8,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x6948,0x3857,0x0000, + 0x3554,0x0000,0xDAB9,0xDABA,0x694A,0x515D,0xDABB,0xDABC, + 0xDABD,0xDABE,0x3575,0x0000,0x4E3A,0xDABF,0x3673,0x694B, + 0xDAC0,0xDAC1,0xDAC2,0xDAC3,0xDAC4,0x0000,0x0000,0x694C, + 0x0000,0xDAC5,0x0000,0x436E,0xDAC6,0x0000,0x0000,0xDAC7, + 0x0000,0x694D,0x0000,0x0000,0x0000,0xDAC8,0xDAC9,0xDACA, + 0x0000,0x467A,0xDACB,0x303A,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0xDAED,0x0000,0x3263,0x6952,0x6953,0xDACC,0x0000,0x0000, + 0x0000,0xDACD,0x0000,0x694E,0x0000,0x3B3D,0xDACE,0x0000, + 0xDACF,0x0000,0xDAD0,0x0000,0xDAD1,0x0000,0x0000,0x0000, + 0x0000,0xDAD2,0x0000,0x694F,0x4742,0x0000,0xDAD3,0xDAD4, + 0xDAD5,0x6950,0x6951,0x695B,0x0000,0xDAD6,0x0000,0x6955, + 0x6958,0xDAD7,0x0000,0xDAD8,0xDAD9,0xDADA,0x6954,0xDADB, + 0xDADC,0xDADD,0x0000,0x0000,0x0000,0x0000,0x0000,0xDADE, + 0xDADF,0xDAE0,0x0000,0xDAE1,0x6956,0xDAE2,0x6957,0x3C58, + 0x0000,0x6959,0x0000,0x4341,0x0000,0x3756,0x3342,0x0000, + 0x0000,0xDAE3,0xDAE4,0x0000,0x695C,0xDAE5,0x0000,0xDAE6, + 0x0000,0x333F,0xDAE7,0x6961,0xDAE8,0x0000,0x695D,0x6960, + 0xDAE9,0x0000,0x0000,0xDAEA,0x483A,0xDAEB,0x0000,0xDAEC, + 0x0000,0x695E,0x0000,0x0000,0x695F,0x4948,0x485A,0x6962, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x427D,0x696C,0xDAEE,0x6968,0xDAEF,0xDAF0,0x326B,0x0000, + + /* 8700h */ + 0x6966,0x0000,0x4B2A,0x6967,0xDAF1,0xDAF2,0x6964,0xDAF3, + 0x6965,0x696A,0x696D,0xDAF4,0x0000,0x696B,0xDAF5,0xDAF6, + 0xDAF7,0x6969,0x6963,0xDAF8,0xDAF9,0x0000,0x0000,0x0000, + 0x4358,0xDAFA,0x6974,0x0000,0x4C2A,0x0000,0xDAFB,0xDAFC, + 0x0000,0xDAFD,0x0000,0xDAFE,0x0000,0x6972,0x0000,0x0000, + 0xDBA1,0x6973,0x0000,0x0000,0x0000,0x0000,0xDBA2,0xDBA3, + 0x0000,0xDBA4,0xDBA5,0x0000,0x696E,0x0000,0x0000,0x6970, + 0x0000,0xDBA6,0xDBA7,0x6971,0xDBA8,0xDBA9,0xDBAA,0x696F, + 0xDBAB,0x0000,0x0000,0xDBAC,0x0000,0xDBAD,0x0000,0x0000, + 0x0000,0x4066,0x0000,0x4F39,0x6978,0xDBAE,0x6979,0x0000, + 0x0000,0x0000,0x0000,0x6A21,0x0000,0x3F2A,0x0000,0x697B, + 0xDBAF,0x697E,0x0000,0x0000,0x0000,0xDBB0,0x0000,0x6976, + 0x6975,0xDBB1,0x0000,0x6A22,0xDBB2,0xDBB3,0x325C,0x0000, + 0x697C,0x0000,0x6A23,0x0000,0x0000,0x0000,0x697D,0xDBB4, + 0x0000,0xDBB5,0xDBB6,0x0000,0x697A,0x0000,0x4433,0x0000, + 0x6977,0x0000,0x0000,0xDBB7,0x0000,0x0000,0x0000,0x4768, + 0x0000,0x0000,0x6A27,0xDBB8,0xDBB9,0xDBBA,0xDBBB,0xDBBC, + 0xDBBD,0xDBBE,0x0000,0xDBBF,0xDBC0,0x4D3B,0x0000,0x0000, + 0xDBC1,0x0000,0x0000,0xDBC2,0x0000,0xDBC3,0x0000,0xDBC4, + 0xDBC5,0xDBC6,0x0000,0x0000,0x0000,0x0000,0xDBC7,0x6A26, + 0xDBC8,0x0000,0x6A25,0xDBC9,0x0000,0x0000,0x0000,0xDBCA, + 0x0000,0x0000,0x0000,0x6A2E,0xDBCB,0xDBCC,0xDBCD,0x6A28, + 0x0000,0xDBCE,0x0000,0x6A30,0x0000,0xDBCF,0x0000,0x0000, + 0x0000,0x0000,0x4D66,0x6A33,0x0000,0x6A2A,0xDBD0,0xDBD1, + 0x6A2B,0xDBD2,0x0000,0x0000,0x6A2F,0x0000,0x6A32,0x6A31, + 0xDBD3,0xDBD4,0xDBD5,0x6A29,0x0000,0x0000,0xDBD6,0x0000, + 0x6A2C,0x0000,0x6A3D,0x0000,0x0000,0xDBD7,0xDBD8,0x0000, + 0x0000,0xDBD9,0xDBDA,0x0000,0xDBDB,0x0000,0x0000,0xDBDC, + 0x6A36,0x0000,0xDBDD,0xDBDE,0xDBDF,0x0000,0x0000,0x0000, + 0x0000,0x0000,0xDBE0,0xDBE1,0x0000,0xDBE2,0x0000,0x6A34, + 0x0000,0xDBE3,0x6A35,0xDBE4,0x0000,0x0000,0x6A3A,0x6A3B, + 0xDBE5,0x332A,0xDBE6,0x3542,0x0000,0x0000,0x6A39,0xDBE7, + + /* 8800h */ + 0x0000,0xDBE8,0x0000,0xDBE9,0x0000,0x6A24,0xDBEA,0x0000, + 0x0000,0xDBEB,0xDBEC,0xDBED,0x0000,0x6A38,0x6A3C,0x6A37, + 0xDBEE,0x6A3E,0xDBF0,0xDBF1,0xDBF2,0x6A40,0x6A3F,0x0000, + 0xDBF3,0xDBEF,0xDBF4,0xDBF5,0xDBF6,0x0000,0xDBF7,0xDBF8, + 0x0000,0x6A42,0x6A41,0x695A,0x0000,0x0000,0x0000,0x6A46, + 0xDBF9,0x0000,0x0000,0x0000,0x0000,0xDBFA,0xDBFB,0x0000, + 0xDBFC,0x6A43,0xDBFD,0x0000,0x0000,0xDBFE,0x6A44,0x0000, + 0x0000,0x6A45,0xDCA1,0x6A47,0xDCA2,0x0000,0x0000,0x0000, + 0x376C,0xDCA3,0x6A49,0xDCA4,0x6A48,0xDCA5,0x3D30,0x0000, + 0xDCA6,0xDCA7,0xDCA8,0xDCA9,0x3954,0x5E27,0xDCAA,0x0000, + 0x0000,0xDCAB,0x6A4A,0x3D51,0x0000,0xDCAC,0xDCAD,0x3339, + 0xDCAE,0x6A4B,0xDCAF,0x3152,0xDCB0,0x3E57,0x6A4C,0xDCB1, + 0xDCB2,0x3955,0x6A4D,0x3061,0xDCB3,0x0000,0x0000,0x0000, + 0x493D,0xDCB4,0x0000,0x6A4E,0x0000,0x0000,0x0000,0x0000, + 0x3F6A,0xDCB5,0x6A55,0x0000,0x0000,0x6A52,0x0000,0x436F, + 0x0000,0xDCB6,0x0000,0xDCB7,0x0000,0x6A53,0x6A50,0x365E, + 0xDCB8,0x6A4F,0x6A56,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x3736,0x0000,0x0000,0x425E,0x0000,0x6A5C,0x0000,0x0000, + 0x0000,0x0000,0x6A58,0x0000,0x0000,0x0000,0x4235,0x6A57, + 0xDCB9,0x6A5A,0xDCBA,0xDCBB,0xDCBC,0x0000,0x6A51,0xDCBD, + 0xDCBE,0x0000,0x6A5B,0x0000,0x6A5D,0x0000,0x0000,0x0000, + 0xDCBF,0x0000,0xDCC0,0x486F,0x0000,0x0000,0x6A59,0x0000, + 0x6A5E,0x6A60,0x0000,0x0000,0x3853,0x6A54,0x0000,0x3041, + 0x0000,0x0000,0xDCC1,0x0000,0x0000,0xDCC2,0xDCC3,0x6A5F, + 0xDCC4,0x3A5B,0x4E76,0x6A61,0x6A62,0x4175,0x0000,0x0000, + 0x0000,0x0000,0xDCC5,0xDCC6,0xDCC7,0xDCC8,0xDCC9,0x4E22, + 0x0000,0xDCCA,0xDCCB,0xDCCC,0x6A63,0x4D35,0x0000,0x0000, + 0x6A64,0x6A65,0x0000,0xDCCD,0x4A64,0x6A66,0xDCCE,0x3A40, + 0x0000,0x4E23,0x0000,0x0000,0x0000,0x0000,0x0000,0xDCCF, + 0x6A6B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xDCD0, + 0xDCD1,0xDCD2,0x6A6C,0x3E58,0x6A6A,0xDCD3,0x0000,0xDCD4, + 0x4D67,0x6A67,0x0000,0x0000,0x6A69,0x403D,0x3F7E,0x0000, + + /* 8900h */ + 0x0000,0xDCD5,0x6A68,0x0000,0x6A6D,0x0000,0xDCD6,0x4A23, + 0x0000,0x0000,0x6A6F,0x0000,0x6A6E,0xDCD7,0xDCD8,0xDCD9, + 0x336C,0x0000,0x4B2B,0x6A70,0x0000,0xDCDA,0xDCDB,0x0000, + 0xDCDC,0xDCDD,0xDCDE,0x0000,0xDCDF,0x6A7C,0x6A72,0x0000, + 0xDCE0,0x0000,0x0000,0x0000,0x0000,0x6A73,0xDCE1,0xDCE2, + 0xDCE3,0x0000,0x6A74,0x6A75,0x0000,0x0000,0x0000,0x0000, + 0xDCE4,0xDCE5,0xDCE6,0x0000,0x0000,0xDCE7,0x6A79,0x0000, + 0x6A7A,0xDCE8,0xDCE9,0x6A78,0x0000,0x0000,0xDCEA,0x0000, + 0xDCEB,0x6A76,0xDCEC,0x6A71,0x6A77,0xDCED,0xDCEE,0x0000, + 0x0000,0xDCEF,0x0000,0x0000,0x6A7B,0x7037,0x0000,0xDCF0, + 0x0000,0x0000,0xDCF1,0x0000,0x0000,0x0000,0x3228,0xDCF2, + 0x0000,0x0000,0xDCF3,0xDCF4,0xDCF5,0x0000,0x6A7E,0x365F, + 0x6A7D,0xDCF6,0xDCF7,0xDCF8,0x6B22,0x0000,0x6B21,0x0000, + 0x0000,0x0000,0x6B24,0xDCF9,0x0000,0x6B23,0xDCFA,0x6B25, + 0xDCFB,0x0000,0x3D31,0xDCFC,0x6B26,0xDCFD,0x0000,0x6B27, + 0x0000,0x0000,0xDCFE,0xDDA1,0xDDA2,0xDDA3,0x6B28,0x403E, + 0x0000,0x4D57,0x0000,0x6B29,0x0000,0x0000,0x4A24,0x4746, + 0x6B2A,0xDDA4,0x6B2B,0x382B,0x0000,0xDDA5,0x0000,0x352C, + 0xDDA6,0x0000,0x0000,0x6B2C,0xDDA7,0xDDA8,0x3B6B,0x4741, + 0x6B2D,0x0000,0x3350,0xDDA9,0xDDAA,0x0000,0x0000,0xDDAB, + 0xDDAC,0x6B2E,0x0000,0x0000,0x0000,0xDDAD,0x6B30,0x4D77, + 0x0000,0x6B2F,0x3F46,0x0000,0x6B31,0x0000,0x0000,0x6B32, + 0xDDAE,0x0000,0x6B33,0x3451,0xDDAF,0xDDB0,0xDDB1,0xDDB2, + 0x0000,0x0000,0x6B34,0x0000,0xDDB3,0x6B35,0x0000,0x6B36, + 0x6B37,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x3351,0x0000,0xDDB4,0xDDB5,0xDDB6,0xDDB7, + 0xDDB8,0x0000,0x6B38,0x0000,0x6B39,0x6B3A,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x3272,0x0000,0xDDB9,0x3F28,0x6B3B, + 0x0000,0xDDBA,0x0000,0xDDBB,0x0000,0xDDBC,0x0000,0x0000, + 0x0000,0xDDBD,0x0000,0xDDBE,0x6B3C,0x0000,0xDDBF,0x0000, + 0x6B3D,0xDDC0,0x0000,0x0000,0x0000,0xDDC1,0x0000,0xDDC2, + + /* 8A00h */ + 0x3840,0x0000,0x447B,0x6B3E,0xDDC3,0xDDC4,0x0000,0xDDC5, + 0x3757,0x0000,0x3F56,0x0000,0x6B41,0x0000,0x4624,0xDDC6, + 0x6B40,0xDDC7,0xDDC8,0x3731,0xDDC9,0xDDCA,0x6B3F,0x4277, + 0x352D,0x0000,0x0000,0x6B42,0x0000,0x6B43,0xDDCB,0x3E59, + 0xDDCC,0x0000,0xDDCD,0x376D,0xDDCE,0x6B44,0xDDCF,0x0000, + 0x0000,0x0000,0x4B2C,0xDDD0,0xDDD1,0x405F,0x0000,0xDDD2, + 0x0000,0x3576,0x0000,0x4C75,0x414A,0xDDD3,0x6B45,0xDDD4, + 0x0000,0x0000,0x3F47,0x4370,0x3E5A,0xDDD5,0xDDD6,0x0000, + 0xDDD7,0x6B46,0x0000,0xDDD8,0x0000,0xDDD9,0x6B49,0xDDDA, + 0x6B4A,0xDDDB,0x0000,0x0000,0x0000,0xDDDC,0xDDDD,0x0000, + 0x3A3E,0x4242,0x6B48,0xDDDE,0x3E5B,0x493E,0xDDDF,0xDDE0, + 0xDDE1,0x0000,0x0000,0x6B47,0xDDE2,0xDDE3,0x3B6C,0x0000, + 0x3153,0xDDE4,0x6B4E,0x3758,0x0000,0xDDE5,0x3B6E,0xDDE6, + 0x0000,0x3B6D,0x0000,0x4F4D,0x6B4D,0x6B4C,0x4127,0x0000, + 0x354D,0x4F43,0x333A,0x3E5C,0x0000,0xDDE7,0xDDE8,0xDDE9, + 0x0000,0xDDEA,0xDDEB,0xDDEC,0x6B4B,0x0000,0xDDED,0xDDEE, + 0xDDEF,0x0000,0x6B50,0xDDF0,0x6B51,0x6B4F,0xDDF1,0x3858, + 0x0000,0x4D40,0x0000,0xDDF2,0x3B6F,0x4727,0x0000,0xDDF3, + 0xDDF4,0x6B54,0xDDF5,0x4040,0x0000,0x4342,0xDDF6,0xDDF7, + 0x4D36,0xDDF8,0x6B57,0x0000,0x0000,0x0000,0x386C,0xDDF9, + 0x403F,0x6B53,0x0000,0x6B58,0x386D,0x6B55,0x6B56,0xDDFA, + 0x6B52,0xDDFB,0x0000,0x0000,0x4062,0x4649,0xDDFC,0xDDFD, + 0x432F,0x0000,0x325D,0xDDFE,0x0000,0x0000,0xDEA1,0xDEA2, + 0x0000,0x4870,0x0000,0xDEA3,0x3543,0x0000,0xDEA4,0x4434, + 0x0000,0x0000,0x6B5B,0xDEA5,0x6B59,0x0000,0xDEA6,0x434C, + 0xDEA7,0xDEA8,0xDEA9,0x4041,0x3452,0x6B5A,0x0000,0x3F5B, + 0x0000,0xDEAA,0x4E4A,0xDEAB,0xDEAC,0xDEAD,0x4F40,0xDEAE, + 0x0000,0x0000,0x6B5C,0x6B67,0x4435,0xDEAF,0x6B66,0xDEB0, + 0x6B63,0x6B6B,0x6B64,0x0000,0x6B60,0x0000,0x447C,0x6B5F, + 0x0000,0x0000,0x0000,0x6B5D,0xDEB1,0x4D21,0x3B70,0x0000, + 0xDEB2,0x6B61,0x0000,0x6B5E,0xDEB3,0xDEB4,0xDEB5,0x6B65, + 0x3D74,0x0000,0x3841,0x0000,0xDEB6,0x0000,0x427A,0xDEB7, + + /* 8B00h */ + 0x4B45,0x315A,0x3062,0x0000,0x4625,0xDEB8,0xDEB9,0x6B69, + 0x0000,0x0000,0xDEBF,0xDEBA,0x6B68,0x0000,0x4666,0x0000, + 0x6B6D,0xDEBB,0x0000,0x0000,0x6B62,0x0000,0x6B6C,0x6B6E, + 0x0000,0x382C,0x6B6A,0x3956,0xDEBC,0x3C55,0xDEBD,0xDEBE, + 0x6B6F,0x4D58,0x0000,0x0000,0x0000,0x0000,0x6B72,0x0000, + 0x6B75,0x0000,0x0000,0x6B73,0x4935,0xDEC0,0x0000,0x0000, + 0xDEC1,0x0000,0x0000,0x6B70,0x0000,0x0000,0x0000,0xDEC2, + 0x0000,0x3660,0x0000,0x0000,0xDEC3,0x0000,0x6B74,0x0000, + 0x0000,0x6B76,0xDEC4,0xDEC5,0xDEC6,0xDEC7,0xDEC8,0x0000, + 0xDEC9,0x6B7A,0x0000,0x0000,0x6B77,0xDECE,0x6B79,0x6B78, + 0x0000,0x0000,0xDECA,0xDECB,0xDECC,0x0000,0x6B7B,0x0000, + 0x3C31,0xDECD,0x6B7D,0x6B7C,0x4968,0x0000,0xDECF,0x6C21, + 0x0000,0x0000,0x0000,0xDED0,0x0000,0x0000,0x3759,0x0000, + 0x0000,0x0000,0x0000,0x6B7E,0x6C22,0xDED1,0x0000,0x6C23, + 0x3544,0x6641,0x3E79,0x0000,0x6C24,0x0000,0xDED2,0x386E, + 0xDED3,0xDED4,0x0000,0x0000,0xDED5,0x6C25,0xDED6,0x0000, + 0x6C26,0xDED7,0x0000,0x3B3E,0xDED8,0xDED9,0x0000,0x0000, + 0x0000,0x0000,0x5A4E,0xDEDA,0x6C27,0xDEDB,0x6C28,0xDEDC, + 0x3D32,0x0000,0x6C29,0x6C2A,0xDEDD,0xDEDE,0x6C2B,0x0000, + 0x0000,0x6C2C,0x6C2D,0x0000,0xDEDF,0x0000,0xDEE0,0xDEE1, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 8C00h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x432B, + 0xDEE2,0xDEE3,0x6C2E,0x0000,0x0000,0xDEE4,0xDEE5,0x6C30, + 0x0000,0x6C2F,0x0000,0x0000,0x0000,0xDEE6,0x4626,0xDEE7, + 0x6C31,0xDEE8,0x4B2D,0xDEE9,0x6C32,0x0000,0x6C33,0xDEEA, + 0x6C34,0xDEEB,0x0000,0xDEEC,0xDEED,0x6C35,0x0000,0xDEEE, + 0xDEEF,0xDEF2,0x465A,0xDEF0,0x0000,0xDEF1,0x0000,0x0000, + 0x0000,0x3E5D,0x6C36,0xDEF3,0xDEF4,0x0000,0xDEF5,0x0000, + 0xDEF6,0xDEF7,0x396B,0x502E,0x6C37,0xDEF8,0x0000,0x0000, + 0x0000,0x0000,0x0000,0xDEF9,0x0000,0xDEFA,0xDEFB,0x0000, + 0x6C38,0x493F,0x6C39,0xDEFC,0x6C41,0x0000,0xDEFD,0x0000, + 0x0000,0x0000,0x6C3A,0x0000,0x0000,0x6C3C,0xDEFE,0xDFA1, + 0x0000,0x6C3B,0x6C3D,0xDFA2,0x4B46,0x6C3E,0x6C3F,0x0000, + 0xDFA3,0x0000,0xDFA4,0xDFA5,0x6C40,0x0000,0x0000,0x0000, + 0x6C42,0xDFA6,0x0000,0xDFA7,0xDFA8,0x332D,0x4467,0x0000, + 0x4969,0x3A62,0x3957,0x0000,0xDFA9,0x0000,0x0000,0x494F, + 0x325F,0x484E,0x6C45,0x3453,0x4055,0x6C44,0x6C49,0x4379, + 0x4C63,0x0000,0x6C47,0x6C48,0x352E,0x0000,0x6C4A,0x4763, + 0x425F,0xDFAA,0xDFAB,0x4871,0x453D,0x6C46,0x0000,0x4B47, + 0x326C,0x6C4C,0x4F28,0x4442,0x4F45,0xDFAC,0xDFAD,0x3B71, + 0x6C4B,0xDFAE,0x4231,0xDFAF,0x0000,0x6C5C,0x4128,0xDFB0, + 0x0000,0x4678,0x0000,0x4950,0x0000,0xDFB2,0xDFB1,0x0000, + 0x0000,0xDFB3,0x6C4F,0x3B3F,0x3B72,0xDFB4,0x3E5E,0x0000, + 0x4765,0xDFB5,0x382D,0x6C4E,0x6C4D,0x0000,0x496A,0x0000, + 0xDFB6,0x0000,0x3C41,0x0000,0xDFB7,0x4552,0x0000,0xDFB8, + 0xDFB9,0x0000,0xDFBA,0x0000,0x0000,0xDFBB,0x0000,0xDFBC, + 0xDFBD,0x0000,0x6C51,0x6C52,0x3958,0x6C50,0xDFBE,0xDFBF, + + /* 8D00h */ + 0x0000,0xDFC0,0x0000,0xDFC1,0x6C53,0x6C54,0x0000,0x6C56, + 0x4223,0xDFC2,0x6C55,0x3466,0x0000,0x6C58,0x0000,0x6C57, + 0x6C59,0x0000,0xDFC3,0x6C5B,0x6C5D,0x0000,0x6C5E,0xDFC4, + 0x0000,0x0000,0x0000,0xDFC5,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x4056,0xDFC6,0x3C4F,0x6C5F, + 0x0000,0xDFC7,0x0000,0x3352,0xDFC8,0x6C60,0xDFC9,0x0000, + 0x4176,0x6C61,0x0000,0x6C62,0x496B,0x0000,0x0000,0x352F, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xDFCA, + 0x0000,0x6C63,0xDFCB,0x0000,0xDFCC,0x4436,0x0000,0x0000, + 0xDFCD,0x0000,0x315B,0x0000,0x0000,0xDFCE,0x0000,0x0000, + 0xDFCF,0xDFD0,0x0000,0x0000,0x0000,0xDFD1,0x0000,0x0000, + 0x0000,0x6C64,0x0000,0x0000,0x0000,0x0000,0xDFD2,0xDFD3, + 0xDFD4,0x0000,0x0000,0x3C71,0x0000,0x0000,0xDFD5,0x0000, + 0x3F76,0x0000,0x0000,0xDFD6,0xDFD7,0x0000,0x0000,0xDFD8, + 0x0000,0x0000,0xDFD9,0x422D,0x0000,0xDFDA,0x0000,0xDFDB, + 0x0000,0xDFDC,0x6C67,0xDFDD,0xDFEF,0x0000,0x6C66,0x0000, + 0xDFDE,0x0000,0x6C65,0x0000,0x0000,0xDFDF,0xDFE0,0xDFE1, + 0xDFE2,0x0000,0xDFE3,0x6C6D,0x6C6B,0x0000,0xDFE4,0x6C68, + 0x0000,0xDFE5,0x0000,0x0000,0xDFE6,0xDFE7,0x6C6A,0xDFE8, + 0x0000,0xDFE9,0x6C69,0x6C6C,0x0000,0x3577,0x0000,0x6C70, + 0x0000,0x4057,0x0000,0x6C71,0xDFEA,0xDFEB,0x0000,0xDFEC, + 0x3859,0x0000,0x6C6E,0x6C6F,0xDFED,0x0000,0x0000,0x4F29, + 0xDFEE,0xDFF0,0xDFF1,0x4437,0xDFF2,0x4129,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x6C72,0xDFF3,0x0000,0x6C75, + + /* 8E00h */ + 0x0000,0xDFF4,0x0000,0x0000,0xDFF5,0xDFF6,0xDFF7,0x0000, + 0x6C73,0x6C74,0x4D59,0xDFF8,0x0000,0x0000,0x0000,0x4627, + 0x6C78,0xDFF9,0x0000,0x0000,0xDFFA,0x0000,0xDFFB,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x6C76,0x6C77,0x6C79, + 0xDFFC,0xDFFD,0xDFFE,0xE0A1,0x0000,0x0000,0xE0A2,0xE0A3, + 0x0000,0x0000,0x6D29,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x6C7C,0xE0A4,0x0000,0xE0A5,0x6C7D,0x6C7B,0xE0A6,0xE0A7, + 0xE0A8,0xE0A9,0x0000,0x0000,0x0000,0xE0AA,0x0000,0x0000, + 0xE0AB,0xE0AC,0x6C7A,0x0000,0x447D,0x0000,0x0000,0x6D21, + 0x6D25,0x6D22,0x6C7E,0xE0AD,0x6D23,0xE0AE,0xE0AF,0xE0B0, + 0x6D24,0x0000,0x0000,0x0000,0xE0B1,0x6D2B,0x0000,0x0000, + 0x0000,0x6D26,0x0000,0xE0B2,0xE0B3,0xE0B4,0xE0B5,0x4058, + 0x6D28,0xE0B6,0xE0B7,0x6D2A,0x6D27,0x0000,0x0000,0x0000, + 0x0000,0xE0B8,0x0000,0x0000,0xE0B9,0xE0BA,0x0000,0xE0BB, + 0xE0BC,0xE0BD,0x6D2D,0x0000,0x3D33,0x0000,0x6D2C,0x0000, + 0x0000,0xE0BE,0xE0BF,0xE0C0,0x6D2E,0x0000,0x0000,0x0000, + 0x0000,0x6D2F,0xE0C1,0xE0C2,0x6D32,0x6D31,0x0000,0x6D30, + 0x0000,0xE0C3,0x6D34,0x6D33,0x0000,0x4C76,0x0000,0x0000, + 0xE0C4,0x6D36,0xE0C5,0x6D35,0x6D37,0xE0C6,0x0000,0x0000, + 0x0000,0x6D38,0xE0C7,0xE0C8,0x0000,0xE0C9,0xE0CA,0x0000, + 0x0000,0x6D3A,0xE0CB,0x0000,0x0000,0x0000,0x0000,0xE0CC, + 0x0000,0xE0CD,0x6D39,0x3F48,0x6D3B,0xE0CE,0xE0CF,0x366D, + 0x6D3C,0x6D3E,0x0000,0xE0D0,0x0000,0xE0D1,0x0000,0x0000, + 0x0000,0x0000,0xE0D2,0xE0D3,0x0000,0x0000,0x6D3F,0x0000, + 0xE0D4,0xE0D5,0x0000,0xE0D6,0xE0D7,0x6D40,0x6D3D,0xE0D8, + 0x6D41,0x0000,0x3C56,0x6D42,0x3530,0x3733,0x0000,0xE0D9, + 0x0000,0xE0DA,0x382E,0x0000,0xE0DB,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x6D43,0xE0DC,0x0000,0x0000,0x4670, + 0x0000,0x0000,0x453E,0x6D44,0x0000,0x0000,0x0000,0x0000, + 0xE0DD,0x0000,0x0000,0x6D47,0x0000,0xE0E4,0xE0DE,0x0000, + 0xE0DF,0xE0E0,0x0000,0x0000,0x0000,0x0000,0x0000,0xE0E1, + 0x3C34,0xE0E2,0xE0E3,0x6D46,0x6D45,0x375A,0x6D48,0x0000, + + /* 8F00h */ + 0xE0E5,0x0000,0xE0E6,0x3353,0x0000,0x6D4A,0x0000,0xE0E7, + 0xE0E8,0x3A5C,0x6D49,0x0000,0x6D52,0x0000,0x0000,0xE0E9, + 0xE0EA,0x0000,0x6D4C,0x6D4E,0x4A65,0x6D4B,0xE0EB,0xE0EC, + 0xE0ED,0x6D4D,0x0000,0x6D51,0x6D4F,0x3531,0xE0EE,0x6D50, + 0xE0EF,0xE0F0,0x0000,0xE0F1,0x0000,0xE0F2,0x6D53,0xE0F3, + 0xE0F4,0x475A,0x4E58,0x0000,0xE0F5,0xE0F6,0xE0F7,0x3D34, + 0x0000,0x0000,0x0000,0x6D54,0xE0F8,0xE0F9,0xE0FA,0xE0FB, + 0x4D22,0x6D56,0xE0FC,0x6D55,0x0000,0x0000,0x6D59,0x4D41, + 0xE0FD,0xE0FE,0x6D58,0xE1A1,0x336D,0x6D57,0x6D5C,0xE1A2, + 0x0000,0x6D5B,0x0000,0x0000,0x6D5A,0x4532,0x6D5D,0xE1A3, + 0x0000,0xE1A4,0xE1A5,0xE1A6,0xE1A7,0xE1A8,0x0000,0x6D5E, + 0xE1A9,0x0000,0x0000,0x0000,0x6D5F,0xE1AA,0xE1AB,0x396C, + 0x0000,0x3725,0x6D60,0x6D61,0x6D62,0xE1AC,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x3F49,0x6D63,0xE1AD,0x3C2D,0x6D64, + 0xE1AE,0xE1AF,0x0000,0x6D65,0xE1B0,0xE1B1,0xE1B2,0x5221, + 0x517E,0x0000,0x0000,0x0000,0x0000,0x6D66,0x6570,0x6D67, + 0x4324,0x3F2B,0x4740,0x0000,0x0000,0xE1B3,0xE1B4,0x6D68, + 0xE1B5,0x0000,0x4A55,0x4454,0x397E,0x0000,0xE1B6,0x4329, + 0xE1B7,0xE1B8,0x312A,0x0000,0x4B78,0x3F57,0xE1B9,0x0000, + 0x0000,0x0000,0xE1BA,0xE1BB,0x0000,0xE1BC,0x375E,0x0000, + 0xE1BD,0x3661,0xE1BE,0xE1BF,0x4A56,0xE1C0,0x0000,0x0000, + 0x0000,0x0000,0x6D69,0x0000,0x0000,0x0000,0x0000,0x0000, + 0xE1C1,0x0000,0x6D6B,0xE1C2,0xE1C3,0x6D6A,0x3260,0x0000, + 0xE1C4,0x4676,0x6D6C,0x4777,0x0000,0x4533,0xE1C5,0x6D6D, + 0x3D52,0xE1C6,0x0000,0x0000,0x6D6F,0xE1C7,0xE1C8,0x4C42, + 0x6D7E,0x6D71,0x6D72,0xE1C9,0x0000,0x4449,0xE1CA,0x0000, + + /* 9000h */ + 0x4260,0x4177,0xE1CB,0x4628,0xE1CC,0x6D70,0x3555,0x0000, + 0xE1CD,0x0000,0x0000,0x6D79,0xE1CE,0x6D76,0x6E25,0x4629, + 0x4360,0x6D73,0x0000,0x447E,0x4553,0x6D74,0x6D78,0x3F60, + 0xE1CF,0x4767,0x444C,0xE1D0,0x0000,0x4042,0x6D77,0x422E, + 0x4224,0x6D75,0x3029,0x4F22,0x0000,0x0000,0x0000,0x6D7A, + 0xE1D1,0xE1D2,0xE1D4,0x0000,0xE1D5,0xE1D6,0x4261,0xE1D3, + 0x0000,0x3D35,0x3F4A,0xE1D7,0xE1D8,0x6D7C,0x6D7B,0xE1D9, + 0x306F,0x6D7D,0x0000,0x0000,0x492F,0x0000,0x6E27,0xE1DA, + 0x0000,0x465B,0x3F6B,0xE1DB,0xE1DC,0x4359,0x0000,0x3678, + 0x0000,0x6E26,0x4D37,0x313F,0xE1DD,0x4A57,0x3261,0x6E21, + 0x6E22,0x6E23,0x6E24,0x463B,0x4323,0x3063,0x6E28,0x0000, + 0x6E29,0x7423,0x0000,0xE1DE,0x423D,0xE1DF,0x6E2A,0x0000, + 0x3173,0x414C,0xE1E0,0x382F,0x0000,0x4D5A,0xE1E1,0xE1E2, + 0x6E2B,0x452C,0x0000,0x0000,0xE1E3,0x4178,0x3C57,0x6E2C, + 0xE1E4,0x0000,0x6E2F,0x0000,0xE1E5,0x3D65,0x6E2D,0x412B, + 0x412A,0xE1E6,0x3064,0x0000,0x4E4B,0x6E31,0x0000,0x4872, + 0x6E33,0x6E32,0x6E30,0x6364,0x3454,0xE1E7,0x0000,0x6D6E, + 0xE1E8,0x6E35,0x6E34,0xE1E9,0xE1EA,0x0000,0xE1EB,0x6E36, + 0xE1EC,0x4D38,0x0000,0x0000,0x0000,0xE1ED,0x0000,0xE1EE, + 0xE1EF,0xE1F0,0x0000,0xE1F1,0x0000,0x0000,0x0000,0x0000, + 0xE1F2,0xE1F3,0xE1F4,0x4661,0x0000,0xE1F5,0x4B2E,0x0000, + 0x6E37,0x0000,0x3C59,0x0000,0x0000,0x0000,0x0000,0x6E38, + 0xE1F6,0x6E39,0xE1F7,0xE1F8,0xE1F9,0x6E3A,0xE1FA,0x0000, + 0x4521,0x0000,0x0000,0x0000,0x0000,0xE1FB,0xE1FD,0x0000, + 0x0000,0x306A,0x0000,0xE1FE,0xE2A1,0xE2A2,0x0000,0xE2A3, + 0xE2A4,0x0000,0x3959,0x0000,0xE1FC,0x0000,0x4F3A,0x0000, + 0x0000,0x0000,0xE2AD,0x0000,0x0000,0xE2A5,0x0000,0xE2A6, + 0xE2A7,0xE2A8,0x0000,0x6E3E,0xE2A9,0xE2AA,0x0000,0xE2AB, + 0x0000,0x3734,0x6E3B,0x0000,0x6E3C,0xE2AC,0x0000,0x0000, + 0x4974,0x0000,0x0000,0xE2AF,0x0000,0x3354,0x0000,0xE2B0, + 0xE2B1,0x0000,0x0000,0x0000,0xE2B2,0x4D39,0xE2AE,0x363F, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x4554,0xE2B3,0xE2B4, + + /* 9100h */ + 0xE2B5,0x0000,0x6E3F,0x0000,0xE2B6,0xE2B7,0xE2B8,0x0000, + 0xE2B9,0x0000,0x0000,0x0000,0x0000,0xE2BA,0x0000,0x0000, + 0xE2BB,0x0000,0x6E40,0x0000,0xE2BC,0x0000,0xE2BD,0xE2BE, + 0xE2BF,0x6E41,0xE2C0,0x0000,0xE2C1,0x0000,0xE2C2,0x0000, + 0xE2C3,0x0000,0xE2C5,0xE2C6,0x0000,0xE2C4,0x0000,0xE2C7, + 0x0000,0xE2C8,0x0000,0x0000,0x0000,0x4522,0xE2C9,0xE2CA, + 0x6E43,0xE2CB,0x6E42,0x0000,0xE2CC,0x0000,0xE2CD,0xE2CE, + 0x0000,0xE2CF,0xE2D0,0x0000,0xE2D1,0xE2D2,0x0000,0x0000, + 0x0000,0x0000,0x0000,0xE2D3,0x0000,0x0000,0x0000,0xE2D4, + 0xE2D5,0x4653,0x6E44,0x3D36,0x3C60,0x475B,0x4371,0xE2D6, + 0x0000,0x0000,0x3C72,0xE2D7,0x3F6C,0x0000,0x6E45,0xE2D8, + 0x6E46,0xE2D9,0xE2DA,0xE2DB,0x0000,0x0000,0x0000,0x0000, + 0x0000,0xE2DC,0x3F5D,0x6E47,0xE2DD,0x6E48,0x0000,0xE2DE, + 0x0000,0x6E49,0x4D6F,0x0000,0x3D37,0xE2DF,0x0000,0x0000, + 0x0000,0x0000,0x6E4B,0x6E4A,0xE2E0,0x395A,0x0000,0x3973, + 0x3B40,0xE2E1,0xE2E2,0xE2E3,0x0000,0x0000,0x0000,0x0000, + 0x0000,0xE2E4,0x6E4E,0xE2E5,0x0000,0xE2E6,0xE2E7,0x3D66, + 0x0000,0x6E4D,0xE2E8,0x6E4C,0x0000,0x4269,0xE2E9,0x0000, + 0x386F,0xE2EA,0x4043,0xE2EB,0xE2EC,0xE2ED,0x0000,0x4830, + 0xE2EE,0x0000,0x0000,0x0000,0x3D39,0x0000,0xE2EF,0x0000, + 0x0000,0xE2F0,0x6E4F,0x0000,0x3E5F,0x0000,0xE2F1,0x0000, + 0xE2F2,0x0000,0x6E52,0x6E50,0xE2F3,0xE2F4,0xE2F5,0x6E51, + 0xE2F6,0xE2F7,0xE2F8,0xE2F9,0x6E54,0x6E53,0xE2FA,0x0000, + 0x3E7A,0x0000,0x6E55,0xE2FB,0xE2FC,0xE2FD,0x0000,0xE2FE, + 0x6E56,0x6E57,0xE3A1,0xE3A2,0x0000,0xE3A3,0x4850,0x3A53, + 0x3C61,0x6E58,0x0000,0x6E59,0x4E24,0x3D45,0x4C6E,0x4E4C, + 0x6E5A,0x3662,0x0000,0xE3A4,0xE3A5,0x0000,0x6E5B,0xE3A6, + 0x4523,0xE3A7,0xE3A8,0x6E5E,0x3378,0x3F4B,0xE3A9,0x6E5C, + 0x0000,0x6E5D,0x0000,0x4460,0xE3AA,0xE3AB,0x4B55,0x367C, + 0x0000,0xE3AC,0xE3AD,0x0000,0xE3AE,0xE3AF,0xE3B0,0xE3B1, + 0xE3B2,0xE3B3,0x0000,0x0000,0x0000,0x6E60,0x6E61,0xE3B4, + 0x0000,0xE3B5,0x0000,0xE3B6,0x6E5F,0xE3B7,0x0000,0x6E63, + + /* 9200h */ + 0xE3B8,0xE3B9,0x0000,0x0000,0xE3BA,0xE3BB,0xE3BC,0xE3BD, + 0x0000,0xE3BE,0xE3BF,0x0000,0xE3C0,0x465F,0x3343,0x0000, + 0xE3C1,0x6E67,0xE3C2,0xE3C3,0x6E64,0x6E66,0xE3C4,0x0000, + 0xE3C5,0x0000,0x0000,0x0000,0xE3C6,0xE3C7,0x6E62,0x0000, + 0x0000,0x0000,0x0000,0xE3C8,0xE3C9,0xE3CA,0xE3CB,0x0000, + 0xE3CC,0x6F4F,0x0000,0x0000,0x6E65,0x0000,0xE3CD,0xE3CE, + 0xE3CF,0x0000,0x0000,0xE3D0,0x4E6B,0xE3D1,0xE3D2,0x385A, + 0xE3D3,0xE3D4,0xE3D5,0x0000,0xE3D6,0x0000,0xE3D7,0x6E6F, + 0xE3D8,0x0000,0xE3D9,0xE3DA,0x4534,0x6E6A,0xE3DB,0xE3DC, + 0x6E6D,0x6E6B,0xE3DD,0x6E70,0x0000,0xE3DE,0xE3DF,0xE3E0, + 0x6E71,0xE3E1,0x0000,0x0000,0x0000,0x0000,0x0000,0x6E69, + 0xE3E2,0xE3E3,0x6E76,0x3174,0xE3E4,0xE3E5,0x6E68,0x0000, + 0xE3E6,0xE3E7,0x482D,0x0000,0x6E6C,0xE3E8,0x3E60,0xE3E9, + 0xE3EA,0xE3EB,0x0000,0x0000,0x0000,0x0000,0xE3EC,0xE3ED, + 0xE3EE,0x395B,0x0000,0x0000,0x0000,0xE3EF,0xE3F0,0xE3F1, + 0xE3F2,0xE3F3,0x0000,0xE3F4,0xE3F5,0xE3F6,0x4B48,0xE3F7, + 0x3664,0x0000,0x0000,0x3D46,0x0000,0x463C,0x0000,0x0000, + 0xE3F8,0xE3F9,0xE3FA,0x0000,0x0000,0xE3FB,0xE3FC,0x0000, + 0x0000,0x412D,0xE3FD,0x6E74,0x0000,0x6E6E,0x6E73,0xE3FE, + 0x4C43,0xE4A1,0x4438,0x6E75,0x6E72,0x0000,0x0000,0xE4A2, + 0xE4A3,0x0000,0x0000,0x0000,0xE4A4,0xE4A5,0x0000,0xE4A6, + 0xE4A7,0x0000,0x0000,0xE4A8,0x0000,0x412C,0x0000,0xE4A9, + 0x0000,0x0000,0xE4AA,0x0000,0x0000,0x0000,0xE4AB,0x6E79, + 0xE4AC,0x6E78,0xE4AD,0xE4AE,0xE4AF,0xE4B0,0x0000,0xE4B1, + 0xE4B2,0xE4B3,0xE4B4,0xE4B5,0x0000,0xE4B6,0xE4B7,0xE4B8, + 0xE4B9,0x0000,0x0000,0xE4BA,0xE4BB,0xE4BC,0xE4BD,0x6E77, + 0xE4BE,0x0000,0x4B2F,0xE4BF,0x0000,0xE4C0,0x0000,0xE4C1, + 0xE4C2,0xE4C3,0x0000,0x0000,0xE4C4,0xE4C5,0x0000,0xE4C6, + 0xE4C7,0xE4C8,0x0000,0xE4C9,0x3D7B,0xE4CA,0x0000,0xE4CB, + 0xE4CC,0x6E7A,0x4A5F,0x0000,0xE4CD,0x3154,0xE4CE,0x0000, + 0xE4CF,0x0000,0x4946,0x4372,0x0000,0x0000,0x0000,0x0000, + 0x3578,0xE4D0,0x6E7C,0xE4D1,0x395D,0x0000,0x0000,0xE4D2, + + /* 9300h */ + 0xE4D3,0x0000,0xE4D4,0x0000,0x0000,0x0000,0x3B2C,0x0000, + 0xE4D5,0x0000,0x0000,0x0000,0x0000,0xE4D6,0x0000,0x6E7B, + 0x3F6D,0xE4D7,0x0000,0x0000,0xE4D8,0xE4D9,0x0000,0x0000, + 0x3F6E,0x6F21,0x6F23,0x0000,0xE4DA,0xE4DB,0xE4DC,0xE4DD, + 0x3E7B,0xE4DE,0x6F22,0x6F24,0xE4DF,0xE4E0,0x3653,0xE4E1, + 0x4945,0xE4E2,0xE4E3,0x3C62,0x4F23,0x0000,0x6E7E,0x3A78, + 0x0000,0x0000,0x4F3F,0xE4E4,0xE4E5,0x6F26,0xE4E6,0xE4E7, + 0x0000,0x0000,0x6F25,0x6F27,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x6E7D,0x0000,0x0000,0xE4E8, + 0xE4E9,0xE4EA,0x0000,0x4669,0x0000,0x4555,0x0000,0x0000, + 0xE4EB,0xE4EC,0xE4ED,0x0000,0x4457,0xE4EE,0x6F2C,0xE4EF, + 0xE4F0,0x0000,0xE4F1,0x4343,0x6F28,0x0000,0xE4F2,0x0000, + 0x6F29,0x0000,0x0000,0x0000,0xE4F3,0xE4F4,0x0000,0xE4F5, + 0x0000,0xE4F6,0xE4F7,0x0000,0x372D,0xE4F8,0x6F2B,0xE4F9, + 0xE4FA,0xE4FB,0x0000,0xE4FC,0xE4FD,0x3830,0xE4FE,0x0000, + 0x0000,0x0000,0xE5A1,0x0000,0x6F2A,0xE5A2,0x3E61,0xE5A3, + 0xE5A4,0xE5A5,0xE5A6,0x0000,0x0000,0x0000,0x0000,0x0000, + 0xE5A7,0x0000,0xE5A8,0xE5A9,0x3379,0xE5AA,0x0000,0xE5AB, + 0x0000,0x0000,0xE5AC,0x0000,0x6F30,0xE5AD,0x3A3F,0x4179, + 0xE5AE,0x0000,0x444A,0xE5AF,0x0000,0x0000,0xE5B0,0x0000, + 0x0000,0xE5B1,0x0000,0xE5B2,0xE5B3,0x0000,0xE5B4,0x333B, + 0xE5B5,0xE5BB,0x0000,0xE5B6,0x6F2E,0x6F2F,0x4443,0x0000, + 0x6F2D,0x0000,0x0000,0x0000,0xE5B7,0xE5B8,0xE5B9,0x0000, + 0x0000,0x6F31,0xE5BA,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0xE5BC,0x0000,0x6F37,0xE5BD,0xE5BE,0xE5BF,0xE5C0, + 0x6F3A,0xE5C1,0xE5C2,0xE5C3,0xE5C4,0xE5C5,0x0000,0x0000, + 0x6F39,0x452D,0x0000,0xE5C6,0x0000,0x0000,0x6F32,0x6F33, + 0x6F36,0xE5C7,0x0000,0x0000,0xE5C8,0x6F38,0xE5C9,0xE5CA, + 0x0000,0x3640,0xE5CB,0x0000,0x6F3B,0x6F35,0xE5CC,0xE5CD, + 0x6F34,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xE5CF, + 0xE5D0,0xE5CE,0xE5D1,0xE5D2,0x0000,0xE5D3,0x0000,0x0000, + + /* 9400h */ + 0x0000,0xE5D4,0xE5D5,0x6F3F,0xE5D6,0x0000,0x0000,0x6F40, + 0xE5D7,0xE5D8,0x0000,0x0000,0x0000,0xE5D9,0xE5DA,0xE5DB, + 0x6F41,0x0000,0x0000,0x6F3E,0x6F3D,0xE5DC,0xE5DD,0xE5DE, + 0x3E62,0x462A,0x6F3C,0x0000,0x0000,0x0000,0x0000,0xE5DF, + 0x0000,0x6F45,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x6F43,0x0000,0x0000,0xE5E0,0xE5E1, + 0x0000,0xE5E2,0xE5E3,0xE5E4,0xE5E5,0x6F44,0x6F42,0x0000, + 0x4278,0x0000,0x6F46,0xE5E6,0x0000,0xE5E8,0x0000,0xE5E7, + 0x0000,0x6F47,0x0000,0xE5E9,0x6F49,0xE5EA,0x0000,0x0000, + 0xE5EB,0x0000,0xE5EC,0x0000,0xE5ED,0x0000,0x0000,0x0000, + 0x0000,0x3455,0x6F48,0x4C7A,0x0000,0xE5EE,0x0000,0x0000, + 0x0000,0xE5EF,0x6F54,0x6F4A,0xE5F0,0x0000,0x6F4D,0xE5F1, + 0x6F4B,0xE5F2,0x6F4C,0xE5F3,0x0000,0x0000,0x0000,0x0000, + 0xE5F4,0x0000,0x6F4E,0xE5F5,0x0000,0xE5F6,0xE5F7,0xE5F8, + 0x6F50,0xE5F9,0xE5FA,0x0000,0x0000,0x6F51,0x0000,0x6F52, + 0x0000,0x0000,0x0000,0x0000,0x6F55,0x6F53,0x6F56,0x6F58, + 0x0000,0x6F57,0x0000,0xE5FC,0xE5FB,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 9500h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4439, + 0xE5FD,0xE5FE,0x0000,0x0000,0x0000,0x0000,0xE6A1,0x0000, + 0x4C67,0x0000,0x6F59,0x412E,0xE6A2,0x0000,0x0000,0x6F5A, + 0xE6A3,0x4A44,0x6F5B,0x332B,0xE6A4,0xE6A5,0xE6A6,0x313C, + 0x0000,0x3457,0x0000,0x3456,0x6F5C,0x0000,0x6F5D,0x0000, + 0x6F5E,0x6F5F,0x0000,0x0000,0x0000,0xE6A7,0xE6A8,0xE6A9, + 0x6F60,0xE6AA,0x3458,0x3355,0x395E,0x4836,0xE6AB,0x6F62, + 0x6F61,0xE6AC,0x0000,0xE6AD,0xE6AE,0x6F63,0x0000,0x0000, + 0x0000,0x0000,0x315C,0x0000,0xE6AF,0x0000,0xE6B0,0x0000, + 0x0000,0x6F66,0xE6B1,0x6F65,0x6F64,0xE6B2,0x6F67,0xE6B3, + 0x0000,0x0000,0x0000,0x6F6A,0x0000,0x0000,0xE6B4,0x3047, + 0xE6B5,0xE6B6,0x6F68,0xE6B7,0x6F6C,0x6F6B,0x0000,0x0000, + 0xE6B8,0xE6B9,0xE6BA,0xE6BB,0x6F6E,0x6F6D,0x6F6F,0x0000, + 0x462E,0xE6BC,0xE6BD,0x0000,0x6F70,0xE6BE,0xE6BF,0xE6C0, + 0xE6C1,0x6F71,0x6F73,0x0000,0xE6C2,0x6F72,0xE6C3,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 9600h */ + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x496C,0xE6C4,0xE6C5,0x0000, + 0x0000,0x6F74,0xE6C6,0x0000,0xE6C7,0xE6C8,0xE6C9,0x0000, + 0x6F75,0x0000,0x3A65,0x0000,0xE6CA,0x0000,0x6F76,0x6F77, + 0x0000,0xE6CB,0x4B49,0xE6CC,0x0000,0x0000,0x0000,0xE6CD, + 0xE6CE,0xE6CF,0xE6D0,0x414B,0xE6D1,0xE6D2,0x0000,0x3024, + 0x424B,0xE6D3,0x6F78,0x0000,0x496D,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x6F7B,0x6F79,0x395F,0x0000,0x6F7A, + 0x3842,0x0000,0xE6D4,0x0000,0xE6D5,0x0000,0xE6D6,0xE6D7, + 0xE6D8,0x0000,0x0000,0x4A45,0x6F7D,0x7021,0x6F7E,0x7022, + 0x0000,0xE6D9,0x3121,0x3F58,0x3D7C,0x3459,0x7023,0x0000, + 0x0000,0x0000,0x4766,0x0000,0x7025,0x0000,0xE6DA,0x0000, + 0x3122,0x0000,0x7024,0x4444,0xE6DB,0x4E4D,0x462B,0x6F7C, + 0x4E26,0x0000,0x3831,0xE6DC,0xE6DD,0x4D5B,0xE6DE,0xE6DF, + 0x0000,0xE6E0,0xE6E1,0xE6E2,0xE6E3,0x3679,0x4E34,0x0000, + 0x3728,0xE6E4,0x4262,0x6721,0x0000,0x7026,0x332C,0x3F6F, + 0x0000,0xE6E5,0x0000,0x0000,0x3356,0x7028,0xE6E6,0x7029, + 0x7027,0x3764,0xE6E7,0x3A5D,0x3E63,0xE6E8,0x0000,0xE6E9, + 0x3123,0x0000,0x0000,0x4E59,0xE6EA,0xE6EB,0xE6EC,0x702B, + 0x6E2E,0xE6ED,0x702A,0x0000,0x0000,0x0000,0xE6EE,0xE6EF, + 0x702E,0x702C,0x702D,0xE6F0,0x702F,0x0000,0x7030,0x4E6C, + 0x7031,0x7032,0xE6F1,0x4049,0x483B,0x0000,0x0000,0x0000, + 0x3F7D,0x3467,0x0000,0x0000,0x4D3A,0x326D,0x3D38,0x385B, + 0x0000,0x7035,0xE6F2,0x7034,0x3B73,0x7036,0x7033,0x0000, + 0x0000,0x3B28,0xE6F3,0x0000,0x0000,0x703A,0x6A2D,0x0000, + 0xE6F5,0x5256,0xE6F6,0x3F77,0x7038,0xE6F7,0xE6F8,0xE6F9, + 0x0000,0x0000,0x4E25,0x4671,0x0000,0x0000,0x0000,0x0000, + 0x312B,0xE6FA,0x4063,0x3C36,0x0000,0x0000,0x0000,0xE6FB, + 0x4A37,0xE6FC,0x3140,0x0000,0x0000,0x0000,0x4E6D,0x4D6B, + 0x0000,0x703B,0xE6FD,0x4545,0x0000,0x0000,0x0000,0x0000, + + /* 9700h */ + 0x3C7B,0x0000,0xE6FE,0xE7A1,0x703C,0xE7A2,0x703D,0x3F4C, + 0x703E,0xE7A3,0x4E6E,0x0000,0x0000,0x7039,0x7040,0x7042, + 0x0000,0x7041,0x0000,0x703F,0x0000,0x0000,0x7043,0x0000, + 0x0000,0x7044,0xE7A4,0xE7A5,0x417A,0xE7A6,0x3262,0x0000, + 0x0000,0xE7A7,0xE7A8,0xE7A9,0x7045,0x0000,0x0000,0x4C38, + 0xE7AA,0x0000,0x7046,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x7047,0xE7AB,0x4F2A,0xE7AC,0x0000,0x0000,0x0000,0x0000, + 0x5B31,0x7048,0x0000,0x0000,0x0000,0x7049,0x704A,0x0000, + 0x0000,0xE7AD,0x704E,0xE7AE,0x704B,0x0000,0x704C,0x0000, + 0x704D,0x704F,0xE7AF,0x0000,0x0000,0x0000,0xE7B0,0xE7B1, + 0x0000,0x0000,0x4044,0x0000,0x0000,0xE7B2,0x4C77,0xE7B3, + 0xE7B4,0x4045,0xE7B5,0xE7B6,0x7050,0x0000,0x4873,0x0000, + 0x7051,0x7353,0x4C4C,0xE7B7,0x7052,0x0000,0x7053,0xE7B8, + 0x7054,0x3357,0xE7B9,0x7056,0x0000,0x3F59,0xE7BA,0x0000, + 0x0000,0x7057,0x0000,0xE7BB,0x3724,0x0000,0xE7BC,0xE7BD, + 0xE7BE,0x7058,0x705C,0xE7BF,0x705A,0xE7C0,0x0000,0xE7C1, + 0xE7C2,0x705B,0x0000,0x0000,0x3373,0x7059,0x705D,0x0000, + 0x0000,0xE7C3,0x0000,0x705E,0x0000,0x3048,0x0000,0x705F, + 0x7060,0x0000,0x0000,0x0000,0x0000,0xE7C4,0xE7C5,0xE7C6, + 0x3E64,0xE7C7,0xE7C8,0x0000,0x7061,0x0000,0xE7C9,0xE7CA, + 0x3547,0x0000,0xE7CB,0x7064,0x0000,0x0000,0x7063,0x0000, + 0x7062,0x0000,0x0000,0x6B71,0xE7CC,0x4A5C,0xE7CD,0x0000, + 0x0000,0xE7CE,0xE7CF,0x7065,0x7066,0xE7D0,0xE7D1,0x0000, + 0xE7D2,0xE7D3,0xE7D4,0x0000,0xE7D5,0x0000,0xE7D6,0xE7D7, + 0x0000,0xE7D8,0x0000,0x7067,0xE7D9,0xE7DA,0x7068,0xE7DB, + 0x7069,0xE7DC,0xE7DD,0x706A,0xE7DE,0xE7DF,0xE7E0,0x0000, + 0xE7E1,0xE7E2,0x0000,0x345A,0xE7E3,0x0000,0x0000,0xE7E4, + 0xE7E5,0xE7E6,0x0000,0xE7EA,0x706B,0xE7E7,0xE7E8,0x0000, + 0xE7E9,0xE7EB,0x0000,0x0000,0xE7EC,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x706C,0x4723,0xE7ED, + 0x0000,0xE7EE,0x706E,0x323B,0xE7EF,0x7071,0x7070,0xE7F0, + 0xE7F1,0x0000,0xE7F2,0x3124,0x0000,0x0000,0x0000,0x3641, + + /* 9800h */ + 0x0000,0x4A47,0x443A,0x3A22,0x0000,0x3960,0x3D67,0xE7F3, + 0x3F5C,0x0000,0xE7F4,0x0000,0x7073,0xE7F6,0xE7F7,0x7072, + 0x4D42,0x3468,0x4852,0x465C,0xE7F8,0x0000,0xE7F9,0x3F7C, + 0x4E4E,0xE7F5,0x375B,0x0000,0xE7FA,0x0000,0xE7FB,0x0000, + 0xE7FC,0x7076,0x0000,0xE7FD,0x7075,0xE8A8,0xE7FE,0x0000, + 0x0000,0x0000,0x0000,0xE8A1,0x4B4B,0x462C,0xE8A2,0xE8A3, + 0xE8A4,0x0000,0xE8A5,0xE8A6,0x3150,0xE8A7,0x0000,0x7077, + 0x7074,0x0000,0x0000,0x4951,0x4D6A,0x7078,0xE8A9,0x0000, + 0x0000,0x0000,0x0000,0x0000,0xE8AA,0x0000,0x7079,0xE8AB, + 0x0000,0x0000,0xE8AC,0x707B,0x426A,0x335B,0x335C,0x707A, + 0x0000,0xE8AD,0xE8AE,0xE8AF,0x3469,0x3832,0xE8B0,0xE8B1, + 0x346A,0xE8B2,0xE8B3,0x453F,0x0000,0x0000,0x4E60,0x0000, + 0x0000,0x0000,0xE8B4,0xE8B5,0x0000,0xE8B6,0xE8B7,0x385C, + 0x0000,0x0000,0xE8B8,0x707C,0xE8B9,0x0000,0x0000,0x707D, + 0x707E,0x7121,0x0000,0x7123,0x7122,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x4977,0x0000,0x7124,0xE8BA,0x0000,0xE8BB,0xE8BC,0x7125, + 0xE8BD,0x7126,0x0000,0x0000,0xE8BE,0x0000,0x7127,0xE8BF, + 0xE8C0,0x0000,0xE8C1,0xE8C2,0x0000,0x0000,0x0000,0xE8C3, + 0x0000,0x0000,0xE8C4,0x7129,0x7128,0xE8C5,0x712A,0x0000, + 0xE8C6,0x0000,0x0000,0x0000,0xE8C7,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x4874,0x664C,0x0000,0x0000,0x3F29, + 0x0000,0xE8C8,0x3532,0xE8C9,0x0000,0xE8CA,0xE8CB,0xE8CC, + 0x0000,0x712B,0xE8CD,0x712C,0x0000,0x522C,0x5D3B,0x4853, + 0x0000,0x0000,0x307B,0xE8CE,0x303B,0x0000,0xE8CF,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x3B74,0x4B30,0x3E7E,0x0000, + + /* 9900h */ + 0x0000,0x0000,0xE8D0,0x712D,0x0000,0x4C5F,0x0000,0xE8D1, + 0xE8D2,0x712E,0x4D5C,0x0000,0x3142,0x0000,0x0000,0x0000, + 0x3B41,0xE8D3,0x712F,0x326E,0x7130,0xE8D4,0xE8D5,0xE8D6, + 0x7131,0x0000,0xE8D7,0xE8D8,0xE8D9,0x7133,0x7134,0xE8DA, + 0x7136,0x7132,0xE8DB,0x0000,0x7135,0x0000,0xE8DC,0xE8DD, + 0x345B,0x0000,0x0000,0xE8DE,0x7137,0x0000,0x7138,0x0000, + 0x0000,0xE8DF,0xE8E0,0xE8E1,0xE8E2,0xE8E3,0x0000,0x0000, + 0x0000,0xE8E4,0xE8E5,0xE8E6,0xE8E7,0x7139,0x713A,0x0000, + 0xE8E8,0xE8E9,0x713B,0x0000,0x0000,0x713D,0xE8EA,0xE8EB, + 0xE8EC,0x713C,0x0000,0x713F,0x7142,0xE8ED,0xE8EE,0x0000, + 0x713E,0x7140,0x7141,0x0000,0xE8EF,0x7143,0x0000,0x3642, + 0xE8F0,0xE8F1,0x0000,0xE8F2,0xE8F3,0x0000,0xE8F4,0xE8F5, + 0xE8F6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3C73,0x7144, + 0x7145,0x3961,0x0000,0xE8F7,0x0000,0xE8F8,0x0000,0xE8F9, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x7146,0xE8FA,0x0000, + 0x333E,0x0000,0x0000,0x0000,0x474F,0x7147,0x7148,0x0000, + 0xE8FB,0xE8FC,0xE8FD,0x435A,0x466B,0xE8FE,0x0000,0x0000, + 0x0000,0xE9A1,0xE9A2,0x0000,0x7149,0xE9A3,0x0000,0xE9A4, + 0x0000,0x477D,0x0000,0xE9A5,0x424C,0x3158,0x366E,0x0000, + 0x366F,0xE9A6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x4373,0x714E,0x3670,0xE9A7,0xE9A8,0x326F,0x0000,0x0000, + 0x714D,0xE9A9,0xE9AA,0x714B,0xE9AB,0x714C,0xE9AC,0x714A, + 0x0000,0x0000,0x7158,0x0000,0x0000,0x0000,0x0000,0xE9AD, + 0x0000,0x0000,0xE9AE,0xE9AF,0xE9B0,0x714F,0x7150,0x0000, + 0xE9B1,0x7151,0x7152,0x0000,0xE9B2,0xE9B3,0x0000,0x0000, + 0x7154,0xE9B4,0x0000,0x7153,0x0000,0xE9B5,0xE9B6,0x3D59, + + /* 9A00h */ + 0x0000,0x7155,0xE9B7,0xE9B8,0xE9B9,0x7157,0x0000,0x0000, + 0x0000,0x0000,0x0000,0xE9BA,0xE9BB,0x0000,0x3533,0x7156, + 0xE9BC,0xE9BD,0x417B,0x3833,0x0000,0x0000,0xE9BE,0x0000, + 0x0000,0x7159,0x0000,0x0000,0x0000,0x0000,0xE9BF,0x0000, + 0xE9C0,0x0000,0xE9C1,0xE9C2,0xE9C3,0x0000,0x0000,0xE9C4, + 0x424D,0x0000,0x0000,0x715A,0x0000,0xE9C5,0xE9C6,0x0000, + 0x462D,0x0000,0x0000,0xE9C7,0x0000,0xE9C8,0xE9C9,0x715B, + 0xE9CA,0x0000,0x0000,0x0000,0x0000,0x0000,0x7160,0x0000, + 0x715E,0xE9CC,0x715D,0x715F,0xE9CD,0x715C,0x0000,0xE9CB, + 0x0000,0x0000,0xE9CE,0xE9CF,0xE9D0,0x7162,0xE9D1,0x0000, + 0x0000,0xE9D2,0x0000,0x0000,0xE9D3,0x7161,0xE9D4,0x7164, + 0x0000,0x0000,0x3643,0x7163,0x0000,0xE9D5,0x0000,0x7165, + 0x0000,0x0000,0x7166,0x0000,0x7168,0x7167,0x0000,0x0000, + 0x0000,0x7169,0x716B,0x716A,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x397C,0x0000,0xE9D6,0x0000,0xE9D7,0x716C,0xE9D8,0xE9D9, + 0x716D,0x0000,0xE9DA,0x0000,0xE9DB,0xE9DC,0xE9DD,0x0000, + 0x333C,0xE9DE,0x0000,0xE9DF,0x716E,0x0000,0xE9E0,0xE9E1, + 0x716F,0xE9E2,0x0000,0xE9E3,0x3F71,0x0000,0xE9E4,0x0000, + 0xE9E5,0x0000,0x0000,0x0000,0x0000,0x0000,0xE9E6,0x7170, + 0xE9E7,0x7171,0xE9E8,0x7172,0x7173,0xE9E9,0xE9EA,0xE9EB, + 0x3962,0x0000,0x0000,0xE9EC,0xE9ED,0x0000,0x7174,0x7175, + 0xE9EE,0x0000,0x7176,0x7177,0xE9EF,0xE9F0,0x7178,0xE9F1, + 0x0000,0xE9F2,0x4831,0x717A,0xE9F3,0x4926,0x717B,0x7179, + 0x0000,0x717D,0xE9F4,0xE9F5,0x717C,0xE9F6,0x0000,0x717E, + 0x0000,0xE9F7,0xE9F8,0x7221,0x0000,0xE9F9,0x0000,0xE9FA, + + /* 9B00h */ + 0xE9FB,0xE9FC,0xE9FD,0xE9FE,0xEAA1,0xEAA2,0x7222,0x0000, + 0xEAA3,0xEAA4,0x0000,0xEAA5,0xEAA6,0xEAA7,0xEAA8,0x0000, + 0xEAA9,0x0000,0xEAAA,0x0000,0x0000,0x0000,0xEAAB,0x0000, + 0x7223,0xEAAC,0x7224,0xEAAD,0xEAAE,0x0000,0x0000,0x7225, + 0xEAAF,0x0000,0x7226,0x7227,0x0000,0x7228,0xEAB0,0x7229, + 0x722A,0x722B,0x722C,0xEAB1,0x0000,0xEAB2,0x722D,0x722E, + 0x0000,0x5D35,0x722F,0xEAB3,0xEAB4,0xEAB5,0x0000,0xEAB6, + 0x0000,0xEAB7,0xEAB8,0x6478,0x3534,0xEAB9,0x0000,0x0000, + 0x0000,0x3321,0x3A32,0x7231,0x7230,0x4C25,0x0000,0x0000, + 0xEABA,0x0000,0x0000,0xEABB,0xEABC,0x7233,0x7234,0x7232, + 0x0000,0x7235,0x0000,0x0000,0x4B62,0xEABD,0xEABE,0xEABF, + 0x7236,0x0000,0x357B,0xEAC0,0x0000,0x0000,0xEAC1,0x0000, + 0x0000,0xEAC2,0x0000,0xEAC3,0x0000,0xEAC4,0xEAC5,0x0000, + 0xEAC6,0x0000,0xEAC7,0xEAC8,0xEAC9,0xEACA,0xEACB,0x4F25, + 0x0000,0x0000,0x0000,0xEACC,0x7237,0xEACD,0x0000,0xEACE, + 0xEACF,0xEAD0,0x0000,0x0000,0x0000,0x0000,0x0000,0xEAD1, + 0xEAD2,0x0000,0x0000,0x7239,0xEAD3,0xEAD4,0xEAD5,0xEAD6, + 0x0000,0xEAD7,0xEAD8,0xEAD9,0x0000,0xEADA,0x303E,0xEADB, + 0xEADC,0x723A,0x4A2B,0x7238,0xEADD,0x0000,0x723B,0x723C, + 0x0000,0x0000,0xEADE,0x0000,0x0000,0xEADF,0xEAE0,0x723D, + 0x723E,0x0000,0x0000,0x0000,0x0000,0x0000,0xEAE1,0xEAE2, + 0x723F,0xEAE3,0x4B6E,0x3B2D,0xEAE4,0x3A7A,0x412F,0x0000, + 0xEAE5,0xEAE6,0xEAE7,0x0000,0x7240,0x0000,0x0000,0xEAE8, + 0xEAE9,0x7243,0x0000,0xEAEA,0xEAEB,0x0000,0xEAEC,0xEAED, + 0x7241,0xEAEE,0x0000,0x0000,0x0000,0x0000,0x7244,0xEAEF, + 0xEAF0,0x3871,0x7242,0x0000,0x0000,0x0000,0xEAF1,0x7245, + 0xEAF2,0x7246,0x7247,0x0000,0x724B,0x0000,0x3B2A,0xEAF3, + 0xEAF4,0x0000,0x0000,0x4264,0x0000,0xEAF5,0x0000,0xEAF6, + 0x0000,0x724C,0x7249,0x7248,0x724A,0xEAF7,0x0000,0xEAF8, + 0x375F,0x0000,0xEAF9,0xEAFA,0x0000,0x0000,0x0000,0xEAFB, + 0x7250,0x724F,0x724E,0xEAFC,0x0000,0x3033,0x0000,0xEAFD, + 0xEAFE,0xEBA1,0xEBA2,0x0000,0x0000,0xEBA3,0x0000,0xEBA4, + + /* 9C00h */ + 0xEBA5,0x0000,0xEBA6,0x0000,0x725A,0x0000,0x7256,0x0000, + 0x7257,0x7253,0x7259,0xEBA7,0x7255,0x3362,0x0000,0xEBA8, + 0x4F4C,0xEBA9,0x7258,0x7254,0x7252,0x7251,0xEBAA,0x0000, + 0xEBAB,0xEBAC,0xEBAD,0x725C,0xEBAE,0x0000,0xEBAF,0x0000, + 0x0000,0x725F,0xEBB0,0xEBB1,0x725E,0x725D,0xEBB2,0xEBB3, + 0xEBB4,0xEBB5,0xEBB6,0x0000,0x0000,0x4949,0x725B,0x3073, + 0x7260,0xEBB7,0x7262,0x0000,0x0000,0xEBB8,0xEBB9,0xEBBA, + 0x0000,0x336F,0x724D,0x3137,0x0000,0xEBBB,0x7264,0x0000, + 0x0000,0xEBBC,0x0000,0xEBBD,0xEBBE,0xEBBF,0x7263,0x7261, + 0x432D,0xEBC0,0xEBC1,0x0000,0x0000,0x0000,0xEBC2,0xEBC3, + 0xEBC4,0x0000,0x4B70,0xEBC5,0xEBC6,0x0000,0xEBC7,0x4E5A, + 0xEBC8,0x0000,0x7265,0xEBC9,0xEBD0,0xEBCA,0xEBCB,0xEBCC, + 0x7266,0x0000,0x0000,0xEBCD,0x0000,0x0000,0x0000,0x7267, + 0xEBD2,0xEBCE,0xEBCF,0xEBD1,0x0000,0x0000,0xEBD3,0x0000, + 0xEBD4,0x0000,0xEBD5,0x0000,0x0000,0xEBD6,0x7268,0xEBD7, + 0x7269,0x0000,0x0000,0xEBD8,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x443B,0xEBD9,0x726A, + 0x0000,0x4837,0x0000,0x726F,0x726B,0x0000,0x0000,0x0000, + 0x726C,0x0000,0xEBDA,0x4B31,0x4C44,0x0000,0x4650,0xEBDB, + 0x0000,0xEBDC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + + /* 9D00h */ + 0x0000,0x0000,0xEBDE,0x7270,0x0000,0x0000,0x7271,0x463E, + 0x726E,0x726D,0x0000,0xEBDD,0x0000,0x0000,0x322A,0x0000, + 0x0000,0xEBDF,0x7279,0x0000,0x0000,0x7278,0x0000,0xEBE0, + 0xEBE1,0x0000,0x0000,0x3175,0xEBE2,0xEBE3,0xEBE4,0x7276, + 0x0000,0x0000,0x0000,0x7275,0x0000,0x0000,0x7273,0x0000, + 0x337B,0x0000,0x7272,0x3C32,0x3229,0x0000,0x0000,0xEBE5, + 0xEBE6,0x0000,0xEBE7,0xEBE8,0xEBE9,0x0000,0x0000,0x0000, + 0x0000,0x0000,0xEBEA,0x3963,0xEBEB,0xEBED,0x727C,0x727B, + 0x0000,0x727A,0xEBEE,0xEBEF,0x7277,0xEBEC,0x727D,0xEBF0, + 0x727E,0x0000,0xEBF1,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x7325,0x7324,0x0000,0xEBF2,0xEBF3,0x0000,0x0000,0x0000, + 0x0000,0x7326,0x0000,0x0000,0x312D,0x7321,0x7322,0xEBF4, + 0x3974,0x4C39,0xEBF6,0xEBF5,0x7323,0xEBF7,0x0000,0x0000, + 0x0000,0xEBF8,0xEBF9,0xEBFA,0x4B32,0x0000,0x0000,0x732B, + 0xEBFB,0x0000,0x7327,0x0000,0x0000,0x0000,0xEBFC,0xEBFD, + 0x0000,0x0000,0x732C,0xEBFE,0xECA1,0x0000,0xECA2,0x0000, + 0x0000,0x0000,0x0000,0xECA3,0xECA4,0x0000,0xECA5,0x7329, + 0x0000,0x7328,0xECA6,0x0000,0x0000,0xECA7,0xECA8,0x375C, + 0x0000,0x0000,0xECA9,0xECAA,0x0000,0xECAB,0xECAC,0xECAD, + 0xECAE,0x0000,0x732D,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0xECAF,0x0000,0x0000,0x732E,0x0000,0x0000,0x0000, + 0x0000,0x732F,0xECB0,0x732A,0xECB1,0x0000,0xECB2,0x7274, + 0x0000,0xECB3,0x7330,0x0000,0x4461,0xECB4,0x0000,0x0000, + 0x7334,0xECB5,0x7335,0x7333,0xECB6,0x0000,0x0000,0xECB7, + 0x0000,0x7332,0x7338,0xECB8,0x7331,0x0000,0x7336,0xECB9, + 0x0000,0xECBA,0xECBB,0x0000,0x0000,0x0000,0x0000,0x7337, + 0x0000,0x0000,0x0000,0x733A,0xECBC,0xECBD,0xECBE,0xECBF, + 0x0000,0x7339,0xECC0,0x0000,0x0000,0x0000,0xECC1,0xECC2, + 0xECC3,0x0000,0x0000,0x0000,0x0000,0xECC4,0x733C,0xECC5, + 0x0000,0xECC6,0x0000,0xECC7,0x0000,0x733D,0xECC8,0x733E, + 0xECC9,0x0000,0x4F49,0xECCA,0xECCB,0x0000,0x0000,0x0000, + 0x733B,0x426B,0x3A6D,0x0000,0x0000,0x733F,0xECCC,0x0000, + + /* 9E00h */ + 0x0000,0x0000,0xECCE,0x0000,0x0000,0x0000,0x0000,0xECCF, + 0x0000,0x0000,0xECCD,0x0000,0x0000,0x0000,0xECD0,0x0000, + 0xECD1,0xECD2,0xECD3,0x0000,0x0000,0xECD4,0xECD5,0x0000, + 0x0000,0xECD6,0x7340,0x7341,0xECD7,0xECD8,0x7342,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x7343,0x0000,0x0000, + 0x3834,0x7344,0xECD9,0xECDA,0xECDB,0x7345,0x0000,0x3C2F, + 0xECDC,0x7346,0xECDD,0xECDE,0xECDF,0xECE0,0x0000,0xECE1, + 0x7347,0x0000,0x0000,0x7348,0x7349,0x0000,0xECE2,0xECE3, + 0x0000,0x734C,0x734A,0x4F3C,0x0000,0x734B,0xECE4,0x4E6F, + 0xECE5,0x0000,0x0000,0xECE6,0x0000,0x734D,0xECE7,0x4E5B, + 0x0000,0x0000,0x0000,0x0000,0xECE8,0x734E,0x477E,0x0000, + 0xECE9,0x734F,0x7351,0x0000,0xECEA,0x7352,0xECEB,0xECEC, + 0xECED,0x0000,0x0000,0xECEE,0xECEF,0xECF0,0x0000,0x0000, + 0x7350,0x396D,0x4C4D,0x4B63,0x5677,0x0000,0x5D60,0x4B7B, + 0x0000,0x0000,0x0000,0x0000,0x322B,0x0000,0xECF1,0x0000, + 0xECF2,0x0000,0x0000,0xECF3,0x7354,0x3550,0x7355,0x7356, + 0x7357,0x0000,0x3975,0x0000,0x7358,0xECF4,0x0000,0x0000, + 0x6054,0x4C5B,0x0000,0x4263,0x7359,0x735B,0x735A,0xECF5, + 0x735C,0x0000,0x0000,0x0000,0xECF6,0x735D,0x0000,0xECF7, + 0x735E,0x0000,0x0000,0x0000,0xECF8,0xECF9,0xECFA,0x735F, + 0xECFB,0xECFC,0xECFD,0x0000,0x7360,0xECFE,0x7361,0x7362, + 0xEDA1,0x7363,0x0000,0x7364,0x7365,0x7366,0x0000,0xEDA2, + + /* 9F00h */ + 0x0000,0x0000,0xEDA3,0xEDA4,0x0000,0x0000,0x0000,0x7367, + 0x7368,0xEDA5,0x0000,0x0000,0x0000,0x0000,0x4524,0xEDA6, + 0xEDA7,0xEDA8,0xEDA9,0x385D,0xEDAA,0x736A,0xEDAB,0xEDAC, + 0x0000,0xEDAD,0xEDAE,0xEDAF,0x0000,0x0000,0x0000,0xEDB0, + 0x414D,0x736B,0xEDB1,0x0000,0x0000,0x0000,0xEDB2,0x0000, + 0x0000,0x0000,0xEDB3,0xEDB4,0x736C,0x0000,0x0000,0xEDB5, + 0x0000,0xEDB6,0xEDB7,0x0000,0xEDB8,0x0000,0x0000,0xEDB9, + 0x0000,0xEDBA,0xEDBB,0x4921,0xEDBC,0xEDBD,0x736D,0xEDBE, + 0x0000,0xEDBF,0x0000,0xEDC0,0xEDC1,0xEDC2,0xEDC3,0xEDC4, + 0x0000,0x0000,0x736E,0x6337,0x0000,0x0000,0x6C5A,0x706D, + 0x0000,0x0000,0x736F,0xEDC5,0x7370,0xEDC6,0xEDC7,0xEDC8, + 0xEDC9,0x0000,0xEDCA,0x0000,0x0000,0xEDCB,0xEDCC,0x7372, + 0x7373,0x7374,0x4E70,0x7371,0x0000,0x0000,0x7375,0x7376, + 0xEDCD,0xEDCE,0x7378,0x0000,0x7377,0xEDCF,0xEDD0,0xEDD1, + 0xEDD2,0xEDD3,0x737A,0xEDD4,0x0000,0xEDD5,0x737B,0x7379, + 0x0000,0x0000,0xEDD6,0x0000,0x0000,0xEDD7,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x4E36,0x0000,0xEDD8, + 0xEDD9,0xEDDA,0xEDDB,0x0000,0xEDDC,0x737C,0xEDDD,0xEDDE, + 0x0000,0x0000,0x0000,0x0000,0x737D,0x6354,0xEDDF,0x0000, + 0x737E,0xEDE0,0xEDE1,0xEDE2,0x0000,0xEDE3,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 +}; +const int ucs_i_jis_table_min = 0x4E00; +const int ucs_i_jis_table_max = 0x4E00 + (sizeof (ucs_i_jis_table) / sizeof (unsigned short)); + + +const unsigned short ucs_r_jis_table[] = { + /* FF00h */ + 0x0000,0x212A,0x0000,0x2174,0x2170,0x2173,0x2175,0x0000, + 0x214A,0x214B,0x2176,0x215C,0x2124,0x0000,0x2125,0x213F, + 0x2330,0x2331,0x2332,0x2333,0x2334,0x2335,0x2336,0x2337, + 0x2338,0x2339,0x2127,0x2128,0x2163,0x2161,0x2164,0x2129, + 0x2177,0x2341,0x2342,0x2343,0x2344,0x2345,0x2346,0x2347, + 0x2348,0x2349,0x234A,0x234B,0x234C,0x234D,0x234E,0x234F, + 0x2350,0x2351,0x2352,0x2353,0x2354,0x2355,0x2356,0x2357, + 0x2358,0x2359,0x235A,0x214E,0x0000,0x214F,0x2130,0x2132, + 0x212E,0x2361,0x2362,0x2363,0x2364,0x2365,0x2366,0x2367, + 0x2368,0x2369,0x236A,0x236B,0x236C,0x236D,0x236E,0x236F, + 0x2370,0x2371,0x2372,0x2373,0x2374,0x2375,0x2376,0x2377, + 0x2378,0x2379,0x237A,0x2150,0x2143,0x2151,0x0000,0x0000, + 0x0000,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, + 0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, + 0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, + 0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, + 0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7, + 0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, + 0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7, + 0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + 0x0000,0x0000,0x0000,0x2131,0x0000,0x216F +}; +int ucs_r_jis_table_min = 0xFF00; +int ucs_r_jis_table_max = 0xFF00 + (sizeof (ucs_r_jis_table) / sizeof (unsigned short)); + +#else + +extern const unsigned short jisx0208_ucs_table[]; +extern const unsigned short jisx0212_ucs_table[]; +extern const unsigned short ucs_a1_jis_table[]; +extern const unsigned short ucs_a2_jis_table[]; +extern const unsigned short ucs_i_jis_table[]; +extern const unsigned short ucs_r_jis_table[]; + +extern const int jisx0208_ucs_table_size; +extern const int jisx0212_ucs_table_size; +extern const int ucs_a1_jis_table_min; +extern const int ucs_a1_jis_table_max; +extern const int ucs_a2_jis_table_min; +extern const int ucs_a2_jis_table_max; +extern const int ucs_i_jis_table_min; +extern const int ucs_i_jis_table_max; +extern int ucs_r_jis_table_min; +extern int ucs_r_jis_table_max; + +#endif + + +#endif /* UNICODE_TABLE_JIS_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_jis2004.h b/ext/mbstring/libmbfl/filters/unicode_table_jis2004.h new file mode 100644 index 0000000..5ae282e --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_jis2004.h @@ -0,0 +1,5067 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: Rui Hirokawa <hirokawa@php.net> + */ + +#ifndef UNICODE_TABLE_JIS2004_H +#define UNICODE_TABLE_JIS2004_H + +/* + * Unicode table + */ + +static const unsigned short jisx0213_ucs_table[] = { // 0x0000 - 0x2C0F + +/* plane 1 ku 1 */ +0x3000,0x3001,0x3002,0xFF0C,0xFF0E,0x30FB,0xFF1A,0xFF1B, +0xFF1F,0xFF01,0x309B,0x309C,0x00B4,0xFF40,0x00A8,0xFF3E, +0xFFE3,0xFF3F,0x30FD,0x30FE,0x309D,0x309E,0x3003,0x4EDD, +0x3005,0x3006,0x3007,0x30FC,0x2014,0x2010,0xFF0F,0xFF3C, +0x301C,0x2016,0xFF5C,0x2026,0x2025,0x2018,0x2019,0x201C, +0x201D,0xFF08,0xFF09,0x3014,0x3015,0xFF3B,0xFF3D,0xFF5B, +0xFF5D,0x3008,0x3009,0x300A,0x300B,0x300C,0x300D,0x300E, +0x300F,0x3010,0x3011,0xFF0B,0x2212,0x00B1,0x00D7,0x00F7, +0xFF1D,0x2260,0xFF1C,0xFF1E,0x2266,0x2267,0x221E,0x2234, +0x2642,0x2640,0x00B0,0x2032,0x2033,0x2103,0xFFE5,0xFF04, +0x00A2,0x00A3,0xFF05,0xFF03,0xFF06,0xFF0A,0xFF20,0x00A7, +0x2606,0x2605,0x25CB,0x25CF,0x25CE,0x25C7, +/* plane 1 ku 2 */ +0x25C6,0x25A1,0x25A0,0x25B3,0x25B2,0x25BD,0x25BC,0x203B, +0x3012,0x2192,0x2190,0x2191,0x2193,0x3013,0xFF07,0xFF02, +0xFF0D,0xFF5E,0x3033,0x3034,0x3035,0x303B,0x303C,0x30FF, +0x309F,0x2208,0x220B,0x2286,0x2287,0x2282,0x2283,0x222A, +0x2229,0x2284,0x2285,0x228A,0x228B,0x2209,0x2205,0x2305, +0x2306,0x2227,0x2228,0x00AC,0x21D2,0x21D4,0x2200,0x2203, +0x2295,0x2296,0x2297,0x2225,0x2226,0xFF5F,0xFF60,0x3018, +0x3019,0x3016,0x3017,0x2220,0x22A5,0x2312,0x2202,0x2207, +0x2261,0x2252,0x226A,0x226B,0x221A,0x223D,0x221D,0x2235, +0x222B,0x222C,0x2262,0x2243,0x2245,0x2248,0x2276,0x2277, +0x2194,0x212B,0x2030,0x266F,0x266D,0x266A,0x2020,0x2021, +0x00B6,0x266E,0x266B,0x266C,0x2669,0x25EF, +/* plane 1 ku 3 */ +0x25B7,0x25B6,0x25C1,0x25C0,0x2197,0x2198,0x2196,0x2199, +0x21C4,0x21E8,0x21E6,0x21E7,0x21E9,0x2934,0x2935,0xFF10, +0xFF11,0xFF12,0xFF13,0xFF14,0xFF15,0xFF16,0xFF17,0xFF18, +0xFF19,0x29BF,0x25C9,0x303D,0xFE46,0xFE45,0x25E6,0x2022, +0xFF21,0xFF22,0xFF23,0xFF24,0xFF25,0xFF26,0xFF27,0xFF28, +0xFF29,0xFF2A,0xFF2B,0xFF2C,0xFF2D,0xFF2E,0xFF2F,0xFF30, +0xFF31,0xFF32,0xFF33,0xFF34,0xFF35,0xFF36,0xFF37,0xFF38, +0xFF39,0xFF3A,0x2213,0x2135,0x210F,0x33CB,0x2113,0x2127, +0xFF41,0xFF42,0xFF43,0xFF44,0xFF45,0xFF46,0xFF47,0xFF48, +0xFF49,0xFF4A,0xFF4B,0xFF4C,0xFF4D,0xFF4E,0xFF4F,0xFF50, +0xFF51,0xFF52,0xFF53,0xFF54,0xFF55,0xFF56,0xFF57,0xFF58, +0xFF59,0xFF5A,0x30A0,0x2013,0x29FA,0x29FB, +/* plane 1 ku 4 */ +0x3041,0x3042,0x3043,0x3044,0x3045,0x3046,0x3047,0x3048, +0x3049,0x304A,0x304B,0x304C,0x304D,0x304E,0x304F,0x3050, +0x3051,0x3052,0x3053,0x3054,0x3055,0x3056,0x3057,0x3058, +0x3059,0x305A,0x305B,0x305C,0x305D,0x305E,0x305F,0x3060, +0x3061,0x3062,0x3063,0x3064,0x3065,0x3066,0x3067,0x3068, +0x3069,0x306A,0x306B,0x306C,0x306D,0x306E,0x306F,0x3070, +0x3071,0x3072,0x3073,0x3074,0x3075,0x3076,0x3077,0x3078, +0x3079,0x307A,0x307B,0x307C,0x307D,0x307E,0x307F,0x3080, +0x3081,0x3082,0x3083,0x3084,0x3085,0x3086,0x3087,0x3088, +0x3089,0x308A,0x308B,0x308C,0x308D,0x308E,0x308F,0x3090, +0x3091,0x3092,0x3093,0x3094,0x3095,0x3096,0x0000,0x304D, +0x304F,0x3051,0x3053,0x0000,0x0000,0x0000, +/* plane 1 ku 5 */ +0x30A1,0x30A2,0x30A3,0x30A4,0x30A5,0x30A6,0x30A7,0x30A8, +0x30A9,0x30AA,0x30AB,0x30AC,0x30AD,0x30AE,0x30AF,0x30B0, +0x30B1,0x30B2,0x30B3,0x30B4,0x30B5,0x30B6,0x30B7,0x30B8, +0x30B9,0x30BA,0x30BB,0x30BC,0x30BD,0x30BE,0x30BF,0x30C0, +0x30C1,0x30C2,0x30C3,0x30C4,0x30C5,0x30C6,0x30C7,0x30C8, +0x30C9,0x30CA,0x30CB,0x30CC,0x30CD,0x30CE,0x30CF,0x30D0, +0x30D1,0x30D2,0x30D3,0x30D4,0x30D5,0x30D6,0x30D7,0x30D8, +0x30D9,0x30DA,0x30DB,0x30DC,0x30DD,0x30DE,0x30DF,0x30E0, +0x30E1,0x30E2,0x30E3,0x30E4,0x30E5,0x30E6,0x30E7,0x30E8, +0x30E9,0x30EA,0x30EB,0x30EC,0x30ED,0x30EE,0x30EF,0x30F0, +0x30F1,0x30F2,0x30F3,0x30F4,0x30F5,0x30F6,0x30AB,0x30AD, +0x30AF,0x30B1,0x30B3,0x30BB,0x30C4,0x30C8, +/* plane 1 ku 6 */ +0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,0x0398, +0x0399,0x039A,0x039B,0x039C,0x039D,0x039E,0x039F,0x03A0, +0x03A1,0x03A3,0x03A4,0x03A5,0x03A6,0x03A7,0x03A8,0x03A9, +0x2664,0x2660,0x2662,0x2666,0x2661,0x2665,0x2667,0x2663, +0x03B1,0x03B2,0x03B3,0x03B4,0x03B5,0x03B6,0x03B7,0x03B8, +0x03B9,0x03BA,0x03BB,0x03BC,0x03BD,0x03BE,0x03BF,0x03C0, +0x03C1,0x03C3,0x03C4,0x03C5,0x03C6,0x03C7,0x03C8,0x03C9, +0x03C2,0x24F5,0x24F6,0x24F7,0x24F8,0x24F9,0x24FA,0x24FB, +0x24FC,0x24FD,0x24FE,0x2616,0x2617,0x3020,0x260E,0x2600, +0x2601,0x2602,0x2603,0x2668,0x25B1,0x31F0,0x31F1,0x31F2, +0x31F3,0x31F4,0x31F5,0x31F6,0x31F7,0x31F8,0x31F9,0x31F7, +0x31FA,0x31FB,0x31FC,0x31FD,0x31FE,0x31FF, +/* plane 1 ku 7 */ +0x0410,0x0411,0x0412,0x0413,0x0414,0x0415,0x0401,0x0416, +0x0417,0x0418,0x0419,0x041A,0x041B,0x041C,0x041D,0x041E, +0x041F,0x0420,0x0421,0x0422,0x0423,0x0424,0x0425,0x0426, +0x0427,0x0428,0x0429,0x042A,0x042B,0x042C,0x042D,0x042E, +0x042F,0x23BE,0x23BF,0x23C0,0x23C1,0x23C2,0x23C3,0x23C4, +0x23C5,0x23C6,0x23C7,0x23C8,0x23C9,0x23CA,0x23CB,0x23CC, +0x0430,0x0431,0x0432,0x0433,0x0434,0x0435,0x0451,0x0436, +0x0437,0x0438,0x0439,0x043A,0x043B,0x043C,0x043D,0x043E, +0x043F,0x0440,0x0441,0x0442,0x0443,0x0444,0x0445,0x0446, +0x0447,0x0448,0x0449,0x044A,0x044B,0x044C,0x044D,0x044E, +0x044F,0x30F7,0x30F8,0x30F9,0x30FA,0x22DA,0x22DB,0x2153, +0x2154,0x2155,0x2713,0x2318,0x2423,0x23CE, +/* plane 1 ku 8 */ +0x2500,0x2502,0x250C,0x2510,0x2518,0x2514,0x251C,0x252C, +0x2524,0x2534,0x253C,0x2501,0x2503,0x250F,0x2513,0x251B, +0x2517,0x2523,0x2533,0x252B,0x253B,0x254B,0x2520,0x252F, +0x2528,0x2537,0x253F,0x251D,0x2530,0x2525,0x2538,0x2542, +0x3251,0x3252,0x3253,0x3254,0x3255,0x3256,0x3257,0x3258, +0x3259,0x325A,0x325B,0x325C,0x325D,0x325E,0x325F,0x32B1, +0x32B2,0x32B3,0x32B4,0x32B5,0x32B6,0x32B7,0x32B8,0x32B9, +0x32BA,0x32BB,0x32BC,0x32BD,0x32BE,0x32BF,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x25D0,0x25D1, +0x25D2,0x25D3,0x203C,0x2047,0x2048,0x2049,0x01CD,0x01CE, +0x01D0,0x1E3E,0x1E3F,0x01F8,0x01F9,0x01D1,0x01D2,0x01D4, +0x01D6,0x01D8,0x01DA,0x01DC,0x0000,0x0000, +/* plane 1 ku 9 */ +0x20AC,0x00A0,0x00A1,0x00A4,0x00A6,0x00A9,0x00AA,0x00AB, +0x00AD,0x00AE,0x00AF,0x00B2,0x00B3,0x00B7,0x00B8,0x00B9, +0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,0x00C0,0x00C1, +0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,0x00C8,0x00C9, +0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,0x00D0,0x00D1, +0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D8,0x00D9,0x00DA, +0x00DB,0x00DC,0x00DD,0x00DE,0x00DF,0x00E0,0x00E1,0x00E2, +0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,0x00E8,0x00E9,0x00EA, +0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,0x00F0,0x00F1,0x00F2, +0x00F3,0x00F4,0x00F5,0x00F6,0x00F8,0x00F9,0x00FA,0x00FB, +0x00FC,0x00FD,0x00FE,0x00FF,0x0100,0x012A,0x016A,0x0112, +0x014C,0x0101,0x012B,0x016B,0x0113,0x014D, +/* plane 1 ku 10 */ +0x0104,0x02D8,0x0141,0x013D,0x015A,0x0160,0x015E,0x0164, +0x0179,0x017D,0x017B,0x0105,0x02DB,0x0142,0x013E,0x015B, +0x02C7,0x0161,0x015F,0x0165,0x017A,0x02DD,0x017E,0x017C, +0x0154,0x0102,0x0139,0x0106,0x010C,0x0118,0x011A,0x010E, +0x0143,0x0147,0x0150,0x0158,0x016E,0x0170,0x0162,0x0155, +0x0103,0x013A,0x0107,0x010D,0x0119,0x011B,0x010F,0x0111, +0x0144,0x0148,0x0151,0x0159,0x016F,0x0171,0x0163,0x02D9, +0x0108,0x011C,0x0124,0x0134,0x015C,0x016C,0x0109,0x011D, +0x0125,0x0135,0x015D,0x016D,0x0271,0x028B,0x027E,0x0283, +0x0292,0x026C,0x026E,0x0279,0x0288,0x0256,0x0273,0x027D, +0x0282,0x0290,0x027B,0x026D,0x025F,0x0272,0x029D,0x028E, +0x0261,0x014B,0x0270,0x0281,0x0127,0x0295, +/* plane 1 ku 11 */ +0x0294,0x0266,0x0298,0x01C2,0x0253,0x0257,0x0284,0x0260, +0x0193,0x0153,0x0152,0x0268,0x0289,0x0258,0x0275,0x0259, +0x025C,0x025E,0x0250,0x026F,0x028A,0x0264,0x028C,0x0254, +0x0251,0x0252,0x028D,0x0265,0x02A2,0x02A1,0x0255,0x0291, +0x027A,0x0267,0x025A,0x00E6,0x01FD,0x1F70,0x1F71,0x0254, +0x0254,0x028C,0x028C,0x0259,0x0259,0x025A,0x025A,0x1F72, +0x1F73,0x0361,0x02C8,0x02CC,0x02D0,0x02D1,0x0306,0x203F, +0x030B,0x0301,0x0304,0x0300,0x030F,0x030C,0x0302,0x02E5, +0x02E6,0x02E7,0x02E8,0x02E9,0x02E9,0x02E5,0x0325,0x032C, +0x0339,0x031C,0x031F,0x0320,0x0308,0x033D,0x0329,0x032F, +0x02DE,0x0324,0x0330,0x033C,0x0334,0x031D,0x031E,0x0318, +0x0319,0x032A,0x033A,0x033B,0x0303,0x031A, +/* plane 1 ku 12 */ +0x2776,0x2777,0x2778,0x2779,0x277A,0x277B,0x277C,0x277D, +0x277E,0x277F,0x24EB,0x24EC,0x24ED,0x24EE,0x24EF,0x24F0, +0x24F1,0x24F2,0x24F3,0x24F4,0x2170,0x2171,0x2172,0x2173, +0x2174,0x2175,0x2176,0x2177,0x2178,0x2179,0x217A,0x217B, +0x24D0,0x24D1,0x24D2,0x24D3,0x24D4,0x24D5,0x24D6,0x24D7, +0x24D8,0x24D9,0x24DA,0x24DB,0x24DC,0x24DD,0x24DE,0x24DF, +0x24E0,0x24E1,0x24E2,0x24E3,0x24E4,0x24E5,0x24E6,0x24E7, +0x24E8,0x24E9,0x32D0,0x32D1,0x32D2,0x32D3,0x32D4,0x32D5, +0x32D6,0x32D7,0x32D8,0x32D9,0x32DA,0x32DB,0x32DC,0x32DD, +0x32DE,0x32DF,0x32E0,0x32E1,0x32E2,0x32E3,0x32FA,0x32E9, +0x32E5,0x32ED,0x32EC,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x2051,0x2042, +/* plane 1 ku 13 */ +0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467, +0x2468,0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F, +0x2470,0x2471,0x2472,0x2473,0x2160,0x2161,0x2162,0x2163, +0x2164,0x2165,0x2166,0x2167,0x2168,0x2169,0x216A,0x3349, +0x3314,0x3322,0x334D,0x3318,0x3327,0x3303,0x3336,0x3351, +0x3357,0x330D,0x3326,0x3323,0x332B,0x334A,0x333B,0x339C, +0x339D,0x339E,0x338E,0x338F,0x33C4,0x33A1,0x216B,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x337B,0x301D, +0x301F,0x2116,0x33CD,0x2121,0x32A4,0x32A5,0x32A6,0x32A7, +0x32A8,0x3231,0x3232,0x3239,0x337E,0x337D,0x337C,0x0000, +0x0000,0x0000,0x222E,0x0000,0x0000,0x0000,0x0000,0x221F, +0x22BF,0x0000,0x0000,0x0000,0x2756,0x261E, +/* plane 1 ku 14 */ +0x4FF1,0x0000,0x3402,0x4E28,0x4E2F,0x4E30,0x4E8D,0x4EE1, +0x4EFD,0x4EFF,0x4F03,0x4F0B,0x4F60,0x4F48,0x4F49,0x4F56, +0x4F5F,0x4F6A,0x4F6C,0x4F7E,0x4F8A,0x4F94,0x4F97,0xFA30, +0x4FC9,0x4FE0,0x5001,0x5002,0x500E,0x5018,0x5027,0x502E, +0x5040,0x503B,0x5041,0x5094,0x50CC,0x50F2,0x50D0,0x50E6, +0xFA31,0x5106,0x5103,0x510B,0x511E,0x5135,0x514A,0xFA32, +0x5155,0x5157,0x34B5,0x519D,0x51C3,0x51CA,0x51DE,0x51E2, +0x51EE,0x5201,0x34DB,0x5213,0x5215,0x5249,0x5257,0x5261, +0x5293,0x52C8,0xFA33,0x52CC,0x52D0,0x52D6,0x52DB,0xFA34, +0x52F0,0x52FB,0x5300,0x5307,0x531C,0xFA35,0x5361,0x5363, +0x537D,0x5393,0x539D,0x53B2,0x5412,0x5427,0x544D,0x549C, +0x546B,0x5474,0x547F,0x5488,0x5496,0x54A1, +/* plane 1 ku 15 */ +0x54A9,0x54C6,0x54FF,0x550E,0x552B,0x5535,0x5550,0x555E, +0x5581,0x5586,0x558E,0xFA36,0x55AD,0x55CE,0xFA37,0x5608, +0x560E,0x563B,0x5649,0x5676,0x5666,0xFA38,0x566F,0x5671, +0x5672,0x5699,0x569E,0x56A9,0x56AC,0x56B3,0x56C9,0x56CA, +0x570A,0x0000,0x5721,0x572F,0x5733,0x5734,0x5770,0x5777, +0x577C,0x579C,0xFA0F,0x0000,0x57B8,0x57C7,0x57C8,0x57CF, +0x57E4,0x57ED,0x57F5,0x57F6,0x57FF,0x5809,0xFA10,0x5861, +0x5864,0xFA39,0x587C,0x5889,0x589E,0xFA3A,0x58A9,0x0000, +0x58D2,0x58CE,0x58D4,0x58DA,0x58E0,0x58E9,0x590C,0x8641, +0x595D,0x596D,0x598B,0x5992,0x59A4,0x59C3,0x59D2,0x59DD, +0x5A13,0x5A23,0x5A67,0x5A6D,0x5A77,0x5A7E,0x5A84,0x5A9E, +0x5AA7,0x5AC4,0x0000,0x5B19,0x5B25,0x525D, +/* plane 1 ku 16 */ +0x4E9C,0x5516,0x5A03,0x963F,0x54C0,0x611B,0x6328,0x59F6, +0x9022,0x8475,0x831C,0x7A50,0x60AA,0x63E1,0x6E25,0x65ED, +0x8466,0x82A6,0x9BF5,0x6893,0x5727,0x65A1,0x6271,0x5B9B, +0x59D0,0x867B,0x98F4,0x7D62,0x7DBE,0x9B8E,0x6216,0x7C9F, +0x88B7,0x5B89,0x5EB5,0x6309,0x6697,0x6848,0x95C7,0x978D, +0x674F,0x4EE5,0x4F0A,0x4F4D,0x4F9D,0x5049,0x56F2,0x5937, +0x59D4,0x5A01,0x5C09,0x60DF,0x610F,0x6170,0x6613,0x6905, +0x70BA,0x754F,0x7570,0x79FB,0x7DAD,0x7DEF,0x80C3,0x840E, +0x8863,0x8B02,0x9055,0x907A,0x533B,0x4E95,0x4EA5,0x57DF, +0x80B2,0x90C1,0x78EF,0x4E00,0x58F1,0x6EA2,0x9038,0x7A32, +0x8328,0x828B,0x9C2F,0x5141,0x5370,0x54BD,0x54E1,0x56E0, +0x59FB,0x5F15,0x98F2,0x6DEB,0x80E4,0x852D, +/* plane 1 ku 17 */ +0x9662,0x9670,0x96A0,0x97FB,0x540B,0x53F3,0x5B87,0x70CF, +0x7FBD,0x8FC2,0x96E8,0x536F,0x9D5C,0x7ABA,0x4E11,0x7893, +0x81FC,0x6E26,0x5618,0x5504,0x6B1D,0x851A,0x9C3B,0x59E5, +0x53A9,0x6D66,0x74DC,0x958F,0x5642,0x4E91,0x904B,0x96F2, +0x834F,0x990C,0x53E1,0x55B6,0x5B30,0x5F71,0x6620,0x66F3, +0x6804,0x6C38,0x6CF3,0x6D29,0x745B,0x76C8,0x7A4E,0x9834, +0x82F1,0x885B,0x8A60,0x92ED,0x6DB2,0x75AB,0x76CA,0x99C5, +0x60A6,0x8B01,0x8D8A,0x95B2,0x698E,0x53AD,0x5186,0x5712, +0x5830,0x5944,0x5BB4,0x5EF6,0x6028,0x63A9,0x63F4,0x6CBF, +0x6F14,0x708E,0x7114,0x7159,0x71D5,0x733F,0x7E01,0x8276, +0x82D1,0x8597,0x9060,0x925B,0x9D1B,0x5869,0x65BC,0x6C5A, +0x7525,0x51F9,0x592E,0x5965,0x5F80,0x5FDC, +/* plane 1 ku 18 */ +0x62BC,0x65FA,0x6A2A,0x6B27,0x6BB4,0x738B,0x7FC1,0x8956, +0x9D2C,0x9D0E,0x9EC4,0x5CA1,0x6C96,0x837B,0x5104,0x5C4B, +0x61B6,0x81C6,0x6876,0x7261,0x4E59,0x4FFA,0x5378,0x6069, +0x6E29,0x7A4F,0x97F3,0x4E0B,0x5316,0x4EEE,0x4F55,0x4F3D, +0x4FA1,0x4F73,0x52A0,0x53EF,0x5609,0x590F,0x5AC1,0x5BB6, +0x5BE1,0x79D1,0x6687,0x679C,0x67B6,0x6B4C,0x6CB3,0x706B, +0x73C2,0x798D,0x79BE,0x7A3C,0x7B87,0x82B1,0x82DB,0x8304, +0x8377,0x83EF,0x83D3,0x8766,0x8AB2,0x5629,0x8CA8,0x8FE6, +0x904E,0x971E,0x868A,0x4FC4,0x5CE8,0x6211,0x7259,0x753B, +0x81E5,0x82BD,0x86FE,0x8CC0,0x96C5,0x9913,0x99D5,0x4ECB, +0x4F1A,0x89E3,0x56DE,0x584A,0x58CA,0x5EFB,0x5FEB,0x602A, +0x6094,0x6062,0x61D0,0x6212,0x62D0,0x6539, +/* plane 1 ku 19 */ +0x9B41,0x6666,0x68B0,0x6D77,0x7070,0x754C,0x7686,0x7D75, +0x82A5,0x87F9,0x958B,0x968E,0x8C9D,0x51F1,0x52BE,0x5916, +0x54B3,0x5BB3,0x5D16,0x6168,0x6982,0x6DAF,0x788D,0x84CB, +0x8857,0x8A72,0x93A7,0x9AB8,0x6D6C,0x99A8,0x86D9,0x57A3, +0x67FF,0x86CE,0x920E,0x5283,0x5687,0x5404,0x5ED3,0x62E1, +0x64B9,0x683C,0x6838,0x6BBB,0x7372,0x78BA,0x7A6B,0x899A, +0x89D2,0x8D6B,0x8F03,0x90ED,0x95A3,0x9694,0x9769,0x5B66, +0x5CB3,0x697D,0x984D,0x984E,0x639B,0x7B20,0x6A2B,0x6A7F, +0x68B6,0x9C0D,0x6F5F,0x5272,0x559D,0x6070,0x62EC,0x6D3B, +0x6E07,0x6ED1,0x845B,0x8910,0x8F44,0x4E14,0x9C39,0x53F6, +0x691B,0x6A3A,0x9784,0x682A,0x515C,0x7AC3,0x84B2,0x91DC, +0x938C,0x565B,0x9D28,0x6822,0x8305,0x8431, +/* plane 1 ku 20 */ +0x7CA5,0x5208,0x82C5,0x74E6,0x4E7E,0x4F83,0x51A0,0x5BD2, +0x520A,0x52D8,0x52E7,0x5DFB,0x559A,0x582A,0x59E6,0x5B8C, +0x5B98,0x5BDB,0x5E72,0x5E79,0x60A3,0x611F,0x6163,0x61BE, +0x63DB,0x6562,0x67D1,0x6853,0x68FA,0x6B3E,0x6B53,0x6C57, +0x6F22,0x6F97,0x6F45,0x74B0,0x7518,0x76E3,0x770B,0x7AFF, +0x7BA1,0x7C21,0x7DE9,0x7F36,0x7FF0,0x809D,0x8266,0x839E, +0x89B3,0x8ACC,0x8CAB,0x9084,0x9451,0x9593,0x9591,0x95A2, +0x9665,0x97D3,0x9928,0x8218,0x4E38,0x542B,0x5CB8,0x5DCC, +0x73A9,0x764C,0x773C,0x5CA9,0x7FEB,0x8D0B,0x96C1,0x9811, +0x9854,0x9858,0x4F01,0x4F0E,0x5371,0x559C,0x5668,0x57FA, +0x5947,0x5B09,0x5BC4,0x5C90,0x5E0C,0x5E7E,0x5FCC,0x63EE, +0x673A,0x65D7,0x65E2,0x671F,0x68CB,0x68C4, +/* plane 1 ku 21 */ +0x6A5F,0x5E30,0x6BC5,0x6C17,0x6C7D,0x757F,0x7948,0x5B63, +0x7A00,0x7D00,0x5FBD,0x898F,0x8A18,0x8CB4,0x8D77,0x8ECC, +0x8F1D,0x98E2,0x9A0E,0x9B3C,0x4E80,0x507D,0x5100,0x5993, +0x5B9C,0x622F,0x6280,0x64EC,0x6B3A,0x72A0,0x7591,0x7947, +0x7FA9,0x87FB,0x8ABC,0x8B70,0x63AC,0x83CA,0x97A0,0x5409, +0x5403,0x55AB,0x6854,0x6A58,0x8A70,0x7827,0x6775,0x9ECD, +0x5374,0x5BA2,0x811A,0x8650,0x9006,0x4E18,0x4E45,0x4EC7, +0x4F11,0x53CA,0x5438,0x5BAE,0x5F13,0x6025,0x6551,0x673D, +0x6C42,0x6C72,0x6CE3,0x7078,0x7403,0x7A76,0x7AAE,0x7B08, +0x7D1A,0x7CFE,0x7D66,0x65E7,0x725B,0x53BB,0x5C45,0x5DE8, +0x62D2,0x62E0,0x6319,0x6E20,0x865A,0x8A31,0x8DDD,0x92F8, +0x6F01,0x79A6,0x9B5A,0x4EA8,0x4EAB,0x4EAC, +/* plane 1 ku 22 */ +0x4F9B,0x4FA0,0x50D1,0x5147,0x7AF6,0x5171,0x51F6,0x5354, +0x5321,0x537F,0x53EB,0x55AC,0x5883,0x5CE1,0x5F37,0x5F4A, +0x602F,0x6050,0x606D,0x631F,0x6559,0x6A4B,0x6CC1,0x72C2, +0x72ED,0x77EF,0x80F8,0x8105,0x8208,0x854E,0x90F7,0x93E1, +0x97FF,0x9957,0x9A5A,0x4EF0,0x51DD,0x5C2D,0x6681,0x696D, +0x5C40,0x66F2,0x6975,0x7389,0x6850,0x7C81,0x50C5,0x52E4, +0x5747,0x5DFE,0x9326,0x65A4,0x6B23,0x6B3D,0x7434,0x7981, +0x79BD,0x7B4B,0x7DCA,0x82B9,0x83CC,0x887F,0x895F,0x8B39, +0x8FD1,0x91D1,0x541F,0x9280,0x4E5D,0x5036,0x53E5,0x533A, +0x72D7,0x7396,0x77E9,0x82E6,0x8EAF,0x99C6,0x99C8,0x99D2, +0x5177,0x611A,0x865E,0x55B0,0x7A7A,0x5076,0x5BD3,0x9047, +0x9685,0x4E32,0x6ADB,0x91E7,0x5C51,0x5C48, +/* plane 1 ku 23 */ +0x6398,0x7A9F,0x6C93,0x9774,0x8F61,0x7AAA,0x718A,0x9688, +0x7C82,0x6817,0x7E70,0x6851,0x936C,0x52F2,0x541B,0x85AB, +0x8A13,0x7FA4,0x8ECD,0x90E1,0x5366,0x8888,0x7941,0x4FC2, +0x50BE,0x5211,0x5144,0x5553,0x572D,0x73EA,0x578B,0x5951, +0x5F62,0x5F84,0x6075,0x6176,0x6167,0x61A9,0x63B2,0x643A, +0x656C,0x666F,0x6842,0x6E13,0x7566,0x7A3D,0x7CFB,0x7D4C, +0x7D99,0x7E4B,0x7F6B,0x830E,0x834A,0x86CD,0x8A08,0x8A63, +0x8B66,0x8EFD,0x981A,0x9D8F,0x82B8,0x8FCE,0x9BE8,0x5287, +0x621F,0x6483,0x6FC0,0x9699,0x6841,0x5091,0x6B20,0x6C7A, +0x6F54,0x7A74,0x7D50,0x8840,0x8A23,0x6708,0x4EF6,0x5039, +0x5026,0x5065,0x517C,0x5238,0x5263,0x55A7,0x570F,0x5805, +0x5ACC,0x5EFA,0x61B2,0x61F8,0x62F3,0x6372, +/* plane 1 ku 24 */ +0x691C,0x6A29,0x727D,0x72AC,0x732E,0x7814,0x786F,0x7D79, +0x770C,0x80A9,0x898B,0x8B19,0x8CE2,0x8ED2,0x9063,0x9375, +0x967A,0x9855,0x9A13,0x9E78,0x5143,0x539F,0x53B3,0x5E7B, +0x5F26,0x6E1B,0x6E90,0x7384,0x73FE,0x7D43,0x8237,0x8A00, +0x8AFA,0x9650,0x4E4E,0x500B,0x53E4,0x547C,0x56FA,0x59D1, +0x5B64,0x5DF1,0x5EAB,0x5F27,0x6238,0x6545,0x67AF,0x6E56, +0x72D0,0x7CCA,0x88B4,0x80A1,0x80E1,0x83F0,0x864E,0x8A87, +0x8DE8,0x9237,0x96C7,0x9867,0x9F13,0x4E94,0x4E92,0x4F0D, +0x5348,0x5449,0x543E,0x5A2F,0x5F8C,0x5FA1,0x609F,0x68A7, +0x6A8E,0x745A,0x7881,0x8A9E,0x8AA4,0x8B77,0x9190,0x4E5E, +0x9BC9,0x4EA4,0x4F7C,0x4FAF,0x5019,0x5016,0x5149,0x516C, +0x529F,0x52B9,0x52FE,0x539A,0x53E3,0x5411, +/* plane 1 ku 25 */ +0x540E,0x5589,0x5751,0x57A2,0x597D,0x5B54,0x5B5D,0x5B8F, +0x5DE5,0x5DE7,0x5DF7,0x5E78,0x5E83,0x5E9A,0x5EB7,0x5F18, +0x6052,0x614C,0x6297,0x62D8,0x63A7,0x653B,0x6602,0x6643, +0x66F4,0x676D,0x6821,0x6897,0x69CB,0x6C5F,0x6D2A,0x6D69, +0x6E2F,0x6E9D,0x7532,0x7687,0x786C,0x7A3F,0x7CE0,0x7D05, +0x7D18,0x7D5E,0x7DB1,0x8015,0x8003,0x80AF,0x80B1,0x8154, +0x818F,0x822A,0x8352,0x884C,0x8861,0x8B1B,0x8CA2,0x8CFC, +0x90CA,0x9175,0x9271,0x783F,0x92FC,0x95A4,0x964D,0x9805, +0x9999,0x9AD8,0x9D3B,0x525B,0x52AB,0x53F7,0x5408,0x58D5, +0x62F7,0x6FE0,0x8C6A,0x8F5F,0x9EB9,0x514B,0x523B,0x544A, +0x56FD,0x7A40,0x9177,0x9D60,0x9ED2,0x7344,0x6F09,0x8170, +0x7511,0x5FFD,0x60DA,0x9AA8,0x72DB,0x8FBC, +/* plane 1 ku 26 */ +0x6B64,0x9803,0x4ECA,0x56F0,0x5764,0x58BE,0x5A5A,0x6068, +0x61C7,0x660F,0x6606,0x6839,0x68B1,0x6DF7,0x75D5,0x7D3A, +0x826E,0x9B42,0x4E9B,0x4F50,0x53C9,0x5506,0x5D6F,0x5DE6, +0x5DEE,0x67FB,0x6C99,0x7473,0x7802,0x8A50,0x9396,0x88DF, +0x5750,0x5EA7,0x632B,0x50B5,0x50AC,0x518D,0x6700,0x54C9, +0x585E,0x59BB,0x5BB0,0x5F69,0x624D,0x63A1,0x683D,0x6B73, +0x6E08,0x707D,0x91C7,0x7280,0x7815,0x7826,0x796D,0x658E, +0x7D30,0x83DC,0x88C1,0x8F09,0x969B,0x5264,0x5728,0x6750, +0x7F6A,0x8CA1,0x51B4,0x5742,0x962A,0x583A,0x698A,0x80B4, +0x54B2,0x5D0E,0x57FC,0x7895,0x9DFA,0x4F5C,0x524A,0x548B, +0x643E,0x6628,0x6714,0x67F5,0x7A84,0x7B56,0x7D22,0x932F, +0x685C,0x9BAD,0x7B39,0x5319,0x518A,0x5237, +/* plane 1 ku 27 */ +0x5BDF,0x62F6,0x64AE,0x64E6,0x672D,0x6BBA,0x85A9,0x96D1, +0x7690,0x9BD6,0x634C,0x9306,0x9BAB,0x76BF,0x6652,0x4E09, +0x5098,0x53C2,0x5C71,0x60E8,0x6492,0x6563,0x685F,0x71E6, +0x73CA,0x7523,0x7B97,0x7E82,0x8695,0x8B83,0x8CDB,0x9178, +0x9910,0x65AC,0x66AB,0x6B8B,0x4ED5,0x4ED4,0x4F3A,0x4F7F, +0x523A,0x53F8,0x53F2,0x55E3,0x56DB,0x58EB,0x59CB,0x59C9, +0x59FF,0x5B50,0x5C4D,0x5E02,0x5E2B,0x5FD7,0x601D,0x6307, +0x652F,0x5B5C,0x65AF,0x65BD,0x65E8,0x679D,0x6B62,0x6B7B, +0x6C0F,0x7345,0x7949,0x79C1,0x7CF8,0x7D19,0x7D2B,0x80A2, +0x8102,0x81F3,0x8996,0x8A5E,0x8A69,0x8A66,0x8A8C,0x8AEE, +0x8CC7,0x8CDC,0x96CC,0x98FC,0x6B6F,0x4E8B,0x4F3C,0x4F8D, +0x5150,0x5B57,0x5BFA,0x6148,0x6301,0x6642, +/* plane 1 ku 28 */ +0x6B21,0x6ECB,0x6CBB,0x723E,0x74BD,0x75D4,0x78C1,0x793A, +0x800C,0x8033,0x81EA,0x8494,0x8F9E,0x6C50,0x9E7F,0x5F0F, +0x8B58,0x9D2B,0x7AFA,0x8EF8,0x5B8D,0x96EB,0x4E03,0x53F1, +0x57F7,0x5931,0x5AC9,0x5BA4,0x6089,0x6E7F,0x6F06,0x75BE, +0x8CEA,0x5B9F,0x8500,0x7BE0,0x5072,0x67F4,0x829D,0x5C61, +0x854A,0x7E1E,0x820E,0x5199,0x5C04,0x6368,0x8D66,0x659C, +0x716E,0x793E,0x7D17,0x8005,0x8B1D,0x8ECA,0x906E,0x86C7, +0x90AA,0x501F,0x52FA,0x5C3A,0x6753,0x707C,0x7235,0x914C, +0x91C8,0x932B,0x82E5,0x5BC2,0x5F31,0x60F9,0x4E3B,0x53D6, +0x5B88,0x624B,0x6731,0x6B8A,0x72E9,0x73E0,0x7A2E,0x816B, +0x8DA3,0x9152,0x9996,0x5112,0x53D7,0x546A,0x5BFF,0x6388, +0x6A39,0x7DAC,0x9700,0x56DA,0x53CE,0x5468, +/* plane 1 ku 29 */ +0x5B97,0x5C31,0x5DDE,0x4FEE,0x6101,0x62FE,0x6D32,0x79C0, +0x79CB,0x7D42,0x7E4D,0x7FD2,0x81ED,0x821F,0x8490,0x8846, +0x8972,0x8B90,0x8E74,0x8F2F,0x9031,0x914B,0x916C,0x96C6, +0x919C,0x4EC0,0x4F4F,0x5145,0x5341,0x5F93,0x620E,0x67D4, +0x6C41,0x6E0B,0x7363,0x7E26,0x91CD,0x9283,0x53D4,0x5919, +0x5BBF,0x6DD1,0x795D,0x7E2E,0x7C9B,0x587E,0x719F,0x51FA, +0x8853,0x8FF0,0x4FCA,0x5CFB,0x6625,0x77AC,0x7AE3,0x821C, +0x99FF,0x51C6,0x5FAA,0x65EC,0x696F,0x6B89,0x6DF3,0x6E96, +0x6F64,0x76FE,0x7D14,0x5DE1,0x9075,0x9187,0x9806,0x51E6, +0x521D,0x6240,0x6691,0x66D9,0x6E1A,0x5EB6,0x7DD2,0x7F72, +0x66F8,0x85AF,0x85F7,0x8AF8,0x52A9,0x53D9,0x5973,0x5E8F, +0x5F90,0x6055,0x92E4,0x9664,0x50B7,0x511F, +/* ku 30 */ +0x52DD,0x5320,0x5347,0x53EC,0x54E8,0x5546,0x5531,0x5617, +0x5968,0x59BE,0x5A3C,0x5BB5,0x5C06,0x5C0F,0x5C11,0x5C1A, +0x5E84,0x5E8A,0x5EE0,0x5F70,0x627F,0x6284,0x62DB,0x638C, +0x6377,0x6607,0x660C,0x662D,0x6676,0x677E,0x68A2,0x6A1F, +0x6A35,0x6CBC,0x6D88,0x6E09,0x6E58,0x713C,0x7126,0x7167, +0x75C7,0x7701,0x785D,0x7901,0x7965,0x79F0,0x7AE0,0x7B11, +0x7CA7,0x7D39,0x8096,0x83D6,0x848B,0x8549,0x885D,0x88F3, +0x8A1F,0x8A3C,0x8A54,0x8A73,0x8C61,0x8CDE,0x91A4,0x9266, +0x937E,0x9418,0x969C,0x9798,0x4E0A,0x4E08,0x4E1E,0x4E57, +0x5197,0x5270,0x57CE,0x5834,0x58CC,0x5B22,0x5E38,0x60C5, +0x64FE,0x6761,0x6756,0x6D44,0x72B6,0x7573,0x7A63,0x84B8, +0x8B72,0x91B8,0x9320,0x5631,0x57F4,0x98FE, +/* ku 31 */ +0x62ED,0x690D,0x6B96,0x71ED,0x7E54,0x8077,0x8272,0x89E6, +0x98DF,0x8755,0x8FB1,0x5C3B,0x4F38,0x4FE1,0x4FB5,0x5507, +0x5A20,0x5BDD,0x5BE9,0x5FC3,0x614E,0x632F,0x65B0,0x664B, +0x68EE,0x699B,0x6D78,0x6DF1,0x7533,0x75B9,0x771F,0x795E, +0x79E6,0x7D33,0x81E3,0x82AF,0x85AA,0x89AA,0x8A3A,0x8EAB, +0x8F9B,0x9032,0x91DD,0x9707,0x4EBA,0x4EC1,0x5203,0x5875, +0x58EC,0x5C0B,0x751A,0x5C3D,0x814E,0x8A0A,0x8FC5,0x9663, +0x976D,0x7B25,0x8ACF,0x9808,0x9162,0x56F3,0x53A8,0x9017, +0x5439,0x5782,0x5E25,0x63A8,0x6C34,0x708A,0x7761,0x7C8B, +0x7FE0,0x8870,0x9042,0x9154,0x9310,0x9318,0x968F,0x745E, +0x9AC4,0x5D07,0x5D69,0x6570,0x67A2,0x8DA8,0x96DB,0x636E, +0x6749,0x6919,0x83C5,0x9817,0x96C0,0x88FE, +/* plane 1 ku 32 */ +0x6F84,0x647A,0x5BF8,0x4E16,0x702C,0x755D,0x662F,0x51C4, +0x5236,0x52E2,0x59D3,0x5F81,0x6027,0x6210,0x653F,0x6574, +0x661F,0x6674,0x68F2,0x6816,0x6B63,0x6E05,0x7272,0x751F, +0x76DB,0x7CBE,0x8056,0x58F0,0x88FD,0x897F,0x8AA0,0x8A93, +0x8ACB,0x901D,0x9192,0x9752,0x9759,0x6589,0x7A0E,0x8106, +0x96BB,0x5E2D,0x60DC,0x621A,0x65A5,0x6614,0x6790,0x77F3, +0x7A4D,0x7C4D,0x7E3E,0x810A,0x8CAC,0x8D64,0x8DE1,0x8E5F, +0x78A9,0x5207,0x62D9,0x63A5,0x6442,0x6298,0x8A2D,0x7A83, +0x7BC0,0x8AAC,0x96EA,0x7D76,0x820C,0x8749,0x4ED9,0x5148, +0x5343,0x5360,0x5BA3,0x5C02,0x5C16,0x5DDD,0x6226,0x6247, +0x64B0,0x6813,0x6834,0x6CC9,0x6D45,0x6D17,0x67D3,0x6F5C, +0x714E,0x717D,0x65CB,0x7A7F,0x7BAD,0x7DDA, +/* plane 1 ku 33 */ +0x7E4A,0x7FA8,0x817A,0x821B,0x8239,0x85A6,0x8A6E,0x8CCE, +0x8DF5,0x9078,0x9077,0x92AD,0x9291,0x9583,0x9BAE,0x524D, +0x5584,0x6F38,0x7136,0x5168,0x7985,0x7E55,0x81B3,0x7CCE, +0x564C,0x5851,0x5CA8,0x63AA,0x66FE,0x66FD,0x695A,0x72D9, +0x758F,0x758E,0x790E,0x7956,0x79DF,0x7C97,0x7D20,0x7D44, +0x8607,0x8A34,0x963B,0x9061,0x9F20,0x50E7,0x5275,0x53CC, +0x53E2,0x5009,0x55AA,0x58EE,0x594F,0x723D,0x5B8B,0x5C64, +0x531D,0x60E3,0x60F3,0x635C,0x6383,0x633F,0x63BB,0x64CD, +0x65E9,0x66F9,0x5DE3,0x69CD,0x69FD,0x6F15,0x71E5,0x4E89, +0x75E9,0x76F8,0x7A93,0x7CDF,0x7DCF,0x7D9C,0x8061,0x8349, +0x8358,0x846C,0x84BC,0x85FB,0x88C5,0x8D70,0x9001,0x906D, +0x9397,0x971C,0x9A12,0x50CF,0x5897,0x618E, +/* plane 1 ku 34 */ +0x81D3,0x8535,0x8D08,0x9020,0x4FC3,0x5074,0x5247,0x5373, +0x606F,0x6349,0x675F,0x6E2C,0x8DB3,0x901F,0x4FD7,0x5C5E, +0x8CCA,0x65CF,0x7D9A,0x5352,0x8896,0x5176,0x63C3,0x5B58, +0x5B6B,0x5C0A,0x640D,0x6751,0x905C,0x4ED6,0x591A,0x592A, +0x6C70,0x8A51,0x553E,0x5815,0x59A5,0x60F0,0x6253,0x67C1, +0x8235,0x6955,0x9640,0x99C4,0x9A28,0x4F53,0x5806,0x5BFE, +0x8010,0x5CB1,0x5E2F,0x5F85,0x6020,0x614B,0x6234,0x66FF, +0x6CF0,0x6EDE,0x80CE,0x817F,0x82D4,0x888B,0x8CB8,0x9000, +0x902E,0x968A,0x9EDB,0x9BDB,0x4EE3,0x53F0,0x5927,0x7B2C, +0x918D,0x984C,0x9DF9,0x6EDD,0x7027,0x5353,0x5544,0x5B85, +0x6258,0x629E,0x62D3,0x6CA2,0x6FEF,0x7422,0x8A17,0x9438, +0x6FC1,0x8AFE,0x8338,0x51E7,0x86F8,0x53EA, +/* plane 1 ku 35 */ +0x53E9,0x4F46,0x9054,0x8FB0,0x596A,0x8131,0x5DFD,0x7AEA, +0x8FBF,0x68DA,0x8C37,0x72F8,0x9C48,0x6A3D,0x8AB0,0x4E39, +0x5358,0x5606,0x5766,0x62C5,0x63A2,0x65E6,0x6B4E,0x6DE1, +0x6E5B,0x70AD,0x77ED,0x7AEF,0x7BAA,0x7DBB,0x803D,0x80C6, +0x86CB,0x8A95,0x935B,0x56E3,0x58C7,0x5F3E,0x65AD,0x6696, +0x6A80,0x6BB5,0x7537,0x8AC7,0x5024,0x77E5,0x5730,0x5F1B, +0x6065,0x667A,0x6C60,0x75F4,0x7A1A,0x7F6E,0x81F4,0x8718, +0x9045,0x99B3,0x7BC9,0x755C,0x7AF9,0x7B51,0x84C4,0x9010, +0x79E9,0x7A92,0x8336,0x5AE1,0x7740,0x4E2D,0x4EF2,0x5B99, +0x5FE0,0x62BD,0x663C,0x67F1,0x6CE8,0x866B,0x8877,0x8A3B, +0x914E,0x92F3,0x99D0,0x6A17,0x7026,0x732A,0x82E7,0x8457, +0x8CAF,0x4E01,0x5146,0x51CB,0x558B,0x5BF5, +/* plane 1 ku 36 */ +0x5E16,0x5E33,0x5E81,0x5F14,0x5F35,0x5F6B,0x5FB4,0x61F2, +0x6311,0x66A2,0x671D,0x6F6E,0x7252,0x753A,0x773A,0x8074, +0x8139,0x8178,0x8776,0x8ABF,0x8ADC,0x8D85,0x8DF3,0x929A, +0x9577,0x9802,0x9CE5,0x52C5,0x6357,0x76F4,0x6715,0x6C88, +0x73CD,0x8CC3,0x93AE,0x9673,0x6D25,0x589C,0x690E,0x69CC, +0x8FFD,0x939A,0x75DB,0x901A,0x585A,0x6802,0x63B4,0x69FB, +0x4F43,0x6F2C,0x67D8,0x8FBB,0x8526,0x7DB4,0x9354,0x693F, +0x6F70,0x576A,0x58F7,0x5B2C,0x7D2C,0x722A,0x540A,0x91E3, +0x9DB4,0x4EAD,0x4F4E,0x505C,0x5075,0x5243,0x8C9E,0x5448, +0x5824,0x5B9A,0x5E1D,0x5E95,0x5EAD,0x5EF7,0x5F1F,0x608C, +0x62B5,0x633A,0x63D0,0x68AF,0x6C40,0x7887,0x798E,0x7A0B, +0x7DE0,0x8247,0x8A02,0x8AE6,0x8E44,0x9013, +/* plane 1 ku 37 */ +0x90B8,0x912D,0x91D8,0x9F0E,0x6CE5,0x6458,0x64E2,0x6575, +0x6EF4,0x7684,0x7B1B,0x9069,0x93D1,0x6EBA,0x54F2,0x5FB9, +0x64A4,0x8F4D,0x8FED,0x9244,0x5178,0x586B,0x5929,0x5C55, +0x5E97,0x6DFB,0x7E8F,0x751C,0x8CBC,0x8EE2,0x985B,0x70B9, +0x4F1D,0x6BBF,0x6FB1,0x7530,0x96FB,0x514E,0x5410,0x5835, +0x5857,0x59AC,0x5C60,0x5F92,0x6597,0x675C,0x6E21,0x767B, +0x83DF,0x8CED,0x9014,0x90FD,0x934D,0x7825,0x783A,0x52AA, +0x5EA6,0x571F,0x5974,0x6012,0x5012,0x515A,0x51AC,0x51CD, +0x5200,0x5510,0x5854,0x5858,0x5957,0x5B95,0x5CF6,0x5D8B, +0x60BC,0x6295,0x642D,0x6771,0x6843,0x68BC,0x68DF,0x76D7, +0x6DD8,0x6E6F,0x6D9B,0x706F,0x71C8,0x5F53,0x75D8,0x7977, +0x7B49,0x7B54,0x7B52,0x7CD6,0x7D71,0x5230, +/* plane 1 ku 38 */ +0x8463,0x8569,0x85E4,0x8A0E,0x8B04,0x8C46,0x8E0F,0x9003, +0x900F,0x9419,0x9676,0x982D,0x9A30,0x95D8,0x50CD,0x52D5, +0x540C,0x5802,0x5C0E,0x61A7,0x649E,0x6D1E,0x77B3,0x7AE5, +0x80F4,0x8404,0x9053,0x9285,0x5CE0,0x9D07,0x533F,0x5F97, +0x5FB3,0x6D9C,0x7279,0x7763,0x79BF,0x7BE4,0x6BD2,0x72EC, +0x8AAD,0x6803,0x6A61,0x51F8,0x7A81,0x6934,0x5C4A,0x9CF6, +0x82EB,0x5BC5,0x9149,0x701E,0x5678,0x5C6F,0x60C7,0x6566, +0x6C8C,0x8C5A,0x9041,0x9813,0x5451,0x66C7,0x920D,0x5948, +0x90A3,0x5185,0x4E4D,0x51EA,0x8599,0x8B0E,0x7058,0x637A, +0x934B,0x6962,0x99B4,0x7E04,0x7577,0x5357,0x6960,0x8EDF, +0x96E3,0x6C5D,0x4E8C,0x5C3C,0x5F10,0x8FE9,0x5302,0x8CD1, +0x8089,0x8679,0x5EFF,0x65E5,0x4E73,0x5165, +/* plane 1 ku 39 */ +0x5982,0x5C3F,0x97EE,0x4EFB,0x598A,0x5FCD,0x8A8D,0x6FE1, +0x79B0,0x7962,0x5BE7,0x8471,0x732B,0x71B1,0x5E74,0x5FF5, +0x637B,0x649A,0x71C3,0x7C98,0x4E43,0x5EFC,0x4E4B,0x57DC, +0x56A2,0x60A9,0x6FC3,0x7D0D,0x80FD,0x8133,0x81BF,0x8FB2, +0x8997,0x86A4,0x5DF4,0x628A,0x64AD,0x8987,0x6777,0x6CE2, +0x6D3E,0x7436,0x7834,0x5A46,0x7F75,0x82AD,0x99AC,0x4FF3, +0x5EC3,0x62DD,0x6392,0x6557,0x676F,0x76C3,0x724C,0x80CC, +0x80BA,0x8F29,0x914D,0x500D,0x57F9,0x5A92,0x6885,0x6973, +0x7164,0x72FD,0x8CB7,0x58F2,0x8CE0,0x966A,0x9019,0x877F, +0x79E4,0x77E7,0x8429,0x4F2F,0x5265,0x535A,0x62CD,0x67CF, +0x6CCA,0x767D,0x7B94,0x7C95,0x8236,0x8584,0x8FEB,0x66DD, +0x6F20,0x7206,0x7E1B,0x83AB,0x99C1,0x9EA6, +/* plane 1 ku 40 */ +0x51FD,0x7BB1,0x7872,0x7BB8,0x8087,0x7B48,0x6AE8,0x5E61, +0x808C,0x7551,0x7560,0x516B,0x9262,0x6E8C,0x767A,0x9197, +0x9AEA,0x4F10,0x7F70,0x629C,0x7B4F,0x95A5,0x9CE9,0x567A, +0x5859,0x86E4,0x96BC,0x4F34,0x5224,0x534A,0x53CD,0x53DB, +0x5E06,0x642C,0x6591,0x677F,0x6C3E,0x6C4E,0x7248,0x72AF, +0x73ED,0x7554,0x7E41,0x822C,0x85E9,0x8CA9,0x7BC4,0x91C6, +0x7169,0x9812,0x98EF,0x633D,0x6669,0x756A,0x76E4,0x78D0, +0x8543,0x86EE,0x532A,0x5351,0x5426,0x5983,0x5E87,0x5F7C, +0x60B2,0x6249,0x6279,0x62AB,0x6590,0x6BD4,0x6CCC,0x75B2, +0x76AE,0x7891,0x79D8,0x7DCB,0x7F77,0x80A5,0x88AB,0x8AB9, +0x8CBB,0x907F,0x975E,0x98DB,0x6A0B,0x7C38,0x5099,0x5C3E, +0x5FAE,0x6787,0x6BD8,0x7435,0x7709,0x7F8E, +/* plane 1 ku 41 */ +0x9F3B,0x67CA,0x7A17,0x5339,0x758B,0x9AED,0x5F66,0x819D, +0x83F1,0x8098,0x5F3C,0x5FC5,0x7562,0x7B46,0x903C,0x6867, +0x59EB,0x5A9B,0x7D10,0x767E,0x8B2C,0x4FF5,0x5F6A,0x6A19, +0x6C37,0x6F02,0x74E2,0x7968,0x8868,0x8A55,0x8C79,0x5EDF, +0x63CF,0x75C5,0x79D2,0x82D7,0x9328,0x92F2,0x849C,0x86ED, +0x9C2D,0x54C1,0x5F6C,0x658C,0x6D5C,0x7015,0x8CA7,0x8CD3, +0x983B,0x654F,0x74F6,0x4E0D,0x4ED8,0x57E0,0x592B,0x5A66, +0x5BCC,0x51A8,0x5E03,0x5E9C,0x6016,0x6276,0x6577,0x65A7, +0x666E,0x6D6E,0x7236,0x7B26,0x8150,0x819A,0x8299,0x8B5C, +0x8CA0,0x8CE6,0x8D74,0x961C,0x9644,0x4FAE,0x64AB,0x6B66, +0x821E,0x8461,0x856A,0x90E8,0x5C01,0x6953,0x98A8,0x847A, +0x8557,0x4F0F,0x526F,0x5FA9,0x5E45,0x670D, +/* plane 1 ku 42 */ +0x798F,0x8179,0x8907,0x8986,0x6DF5,0x5F17,0x6255,0x6CB8, +0x4ECF,0x7269,0x9B92,0x5206,0x543B,0x5674,0x58B3,0x61A4, +0x626E,0x711A,0x596E,0x7C89,0x7CDE,0x7D1B,0x96F0,0x6587, +0x805E,0x4E19,0x4F75,0x5175,0x5840,0x5E63,0x5E73,0x5F0A, +0x67C4,0x4E26,0x853D,0x9589,0x965B,0x7C73,0x9801,0x50FB, +0x58C1,0x7656,0x78A7,0x5225,0x77A5,0x8511,0x7B86,0x504F, +0x5909,0x7247,0x7BC7,0x7DE8,0x8FBA,0x8FD4,0x904D,0x4FBF, +0x52C9,0x5A29,0x5F01,0x97AD,0x4FDD,0x8217,0x92EA,0x5703, +0x6355,0x6B69,0x752B,0x88DC,0x8F14,0x7A42,0x52DF,0x5893, +0x6155,0x620A,0x66AE,0x6BCD,0x7C3F,0x83E9,0x5023,0x4FF8, +0x5305,0x5446,0x5831,0x5949,0x5B9D,0x5CF0,0x5CEF,0x5D29, +0x5E96,0x62B1,0x6367,0x653E,0x65B9,0x670B, +/* plane 1 ku 43 */ +0x6CD5,0x6CE1,0x70F9,0x7832,0x7E2B,0x80DE,0x82B3,0x840C, +0x84EC,0x8702,0x8912,0x8A2A,0x8C4A,0x90A6,0x92D2,0x98FD, +0x9CF3,0x9D6C,0x4E4F,0x4EA1,0x508D,0x5256,0x574A,0x59A8, +0x5E3D,0x5FD8,0x5FD9,0x623F,0x66B4,0x671B,0x67D0,0x68D2, +0x5192,0x7D21,0x80AA,0x81A8,0x8B00,0x8C8C,0x8CBF,0x927E, +0x9632,0x5420,0x982C,0x5317,0x50D5,0x535C,0x58A8,0x64B2, +0x6734,0x7267,0x7766,0x7A46,0x91E6,0x52C3,0x6CA1,0x6B86, +0x5800,0x5E4C,0x5954,0x672C,0x7FFB,0x51E1,0x76C6,0x6469, +0x78E8,0x9B54,0x9EBB,0x57CB,0x59B9,0x6627,0x679A,0x6BCE, +0x54E9,0x69D9,0x5E55,0x819C,0x6795,0x9BAA,0x67FE,0x9C52, +0x685D,0x4EA6,0x4FE3,0x53C8,0x62B9,0x672B,0x6CAB,0x8FC4, +0x4FAD,0x7E6D,0x9EBF,0x4E07,0x6162,0x6E80, +/* plane 1 ku 44 */ +0x6F2B,0x8513,0x5473,0x672A,0x9B45,0x5DF3,0x7B95,0x5CAC, +0x5BC6,0x871C,0x6E4A,0x84D1,0x7A14,0x8108,0x5999,0x7C8D, +0x6C11,0x7720,0x52D9,0x5922,0x7121,0x725F,0x77DB,0x9727, +0x9D61,0x690B,0x5A7F,0x5A18,0x51A5,0x540D,0x547D,0x660E, +0x76DF,0x8FF7,0x9298,0x9CF4,0x59EA,0x725D,0x6EC5,0x514D, +0x68C9,0x7DBF,0x7DEC,0x9762,0x9EBA,0x6478,0x6A21,0x8302, +0x5984,0x5B5F,0x6BDB,0x731B,0x76F2,0x7DB2,0x8017,0x8499, +0x5132,0x6728,0x9ED9,0x76EE,0x6762,0x52FF,0x9905,0x5C24, +0x623B,0x7C7E,0x8CB0,0x554F,0x60B6,0x7D0B,0x9580,0x5301, +0x4E5F,0x51B6,0x591C,0x723A,0x8036,0x91CE,0x5F25,0x77E2, +0x5384,0x5F79,0x7D04,0x85AC,0x8A33,0x8E8D,0x9756,0x67F3, +0x85AE,0x9453,0x6109,0x6108,0x6CB9,0x7652, +/* plane 1 ku 45 */ +0x8AED,0x8F38,0x552F,0x4F51,0x512A,0x52C7,0x53CB,0x5BA5, +0x5E7D,0x60A0,0x6182,0x63D6,0x6709,0x67DA,0x6E67,0x6D8C, +0x7336,0x7337,0x7531,0x7950,0x88D5,0x8A98,0x904A,0x9091, +0x90F5,0x96C4,0x878D,0x5915,0x4E88,0x4F59,0x4E0E,0x8A89, +0x8F3F,0x9810,0x50AD,0x5E7C,0x5996,0x5BB9,0x5EB8,0x63DA, +0x63FA,0x64C1,0x66DC,0x694A,0x69D8,0x6D0B,0x6EB6,0x7194, +0x7528,0x7AAF,0x7F8A,0x8000,0x8449,0x84C9,0x8981,0x8B21, +0x8E0A,0x9065,0x967D,0x990A,0x617E,0x6291,0x6B32,0x6C83, +0x6D74,0x7FCC,0x7FFC,0x6DC0,0x7F85,0x87BA,0x88F8,0x6765, +0x83B1,0x983C,0x96F7,0x6D1B,0x7D61,0x843D,0x916A,0x4E71, +0x5375,0x5D50,0x6B04,0x6FEB,0x85CD,0x862D,0x89A7,0x5229, +0x540F,0x5C65,0x674E,0x68A8,0x7406,0x7483, +/* plane 1 ku 46 */ +0x75E2,0x88CF,0x88E1,0x91CC,0x96E2,0x9678,0x5F8B,0x7387, +0x7ACB,0x844E,0x63A0,0x7565,0x5289,0x6D41,0x6E9C,0x7409, +0x7559,0x786B,0x7C92,0x9686,0x7ADC,0x9F8D,0x4FB6,0x616E, +0x65C5,0x865C,0x4E86,0x4EAE,0x50DA,0x4E21,0x51CC,0x5BEE, +0x6599,0x6881,0x6DBC,0x731F,0x7642,0x77AD,0x7A1C,0x7CE7, +0x826F,0x8AD2,0x907C,0x91CF,0x9675,0x9818,0x529B,0x7DD1, +0x502B,0x5398,0x6797,0x6DCB,0x71D0,0x7433,0x81E8,0x8F2A, +0x96A3,0x9C57,0x9E9F,0x7460,0x5841,0x6D99,0x7D2F,0x985E, +0x4EE4,0x4F36,0x4F8B,0x51B7,0x52B1,0x5DBA,0x601C,0x73B2, +0x793C,0x82D3,0x9234,0x96B7,0x96F6,0x970A,0x9E97,0x9F62, +0x66A6,0x6B74,0x5217,0x52A3,0x70C8,0x88C2,0x5EC9,0x604B, +0x6190,0x6F23,0x7149,0x7C3E,0x7DF4,0x806F, +/* plane 1 ku 47 */ +0x84EE,0x9023,0x932C,0x5442,0x9B6F,0x6AD3,0x7089,0x8CC2, +0x8DEF,0x9732,0x52B4,0x5A41,0x5ECA,0x5F04,0x6717,0x697C, +0x6994,0x6D6A,0x6F0F,0x7262,0x72FC,0x7BED,0x8001,0x807E, +0x874B,0x90CE,0x516D,0x9E93,0x7984,0x808B,0x9332,0x8AD6, +0x502D,0x548C,0x8A71,0x6B6A,0x8CC4,0x8107,0x60D1,0x67A0, +0x9DF2,0x4E99,0x4E98,0x9C10,0x8A6B,0x85C1,0x8568,0x6900, +0x6E7E,0x7897,0x8155,0x0000,0x5B41,0x5B56,0x5B7D,0x5B93, +0x5BD8,0x5BEC,0x5C12,0x5C1E,0x5C23,0x5C2B,0x378D,0x5C62, +0xFA3B,0xFA3C,0x0000,0x5C7A,0x5C8F,0x5C9F,0x5CA3,0x5CAA, +0x5CBA,0x5CCB,0x5CD0,0x5CD2,0x5CF4,0x0000,0x37E2,0x5D0D, +0x5D27,0xFA11,0x5D46,0x5D47,0x5D53,0x5D4A,0x5D6D,0x5D81, +0x5DA0,0x5DA4,0x5DA7,0x5DB8,0x5DCB,0x541E, +/* plane 1 ku 48 */ +0x5F0C,0x4E10,0x4E15,0x4E2A,0x4E31,0x4E36,0x4E3C,0x4E3F, +0x4E42,0x4E56,0x4E58,0x4E82,0x4E85,0x8C6B,0x4E8A,0x8212, +0x5F0D,0x4E8E,0x4E9E,0x4E9F,0x4EA0,0x4EA2,0x4EB0,0x4EB3, +0x4EB6,0x4ECE,0x4ECD,0x4EC4,0x4EC6,0x4EC2,0x4ED7,0x4EDE, +0x4EED,0x4EDF,0x4EF7,0x4F09,0x4F5A,0x4F30,0x4F5B,0x4F5D, +0x4F57,0x4F47,0x4F76,0x4F88,0x4F8F,0x4F98,0x4F7B,0x4F69, +0x4F70,0x4F91,0x4F6F,0x4F86,0x4F96,0x5118,0x4FD4,0x4FDF, +0x4FCE,0x4FD8,0x4FDB,0x4FD1,0x4FDA,0x4FD0,0x4FE4,0x4FE5, +0x501A,0x5028,0x5014,0x502A,0x5025,0x5005,0x4F1C,0x4FF6, +0x5021,0x5029,0x502C,0x4FFE,0x4FEF,0x5011,0x5006,0x5043, +0x5047,0x6703,0x5055,0x5050,0x5048,0x505A,0x5056,0x506C, +0x5078,0x5080,0x509A,0x5085,0x50B4,0x50B2, +/* plane 1 ku 49 */ +0x50C9,0x50CA,0x50B3,0x50C2,0x50D6,0x50DE,0x50E5,0x50ED, +0x50E3,0x50EE,0x50F9,0x50F5,0x5109,0x5101,0x5102,0x5116, +0x5115,0x5114,0x511A,0x5121,0x513A,0x5137,0x513C,0x513B, +0x513F,0x5140,0x5152,0x514C,0x5154,0x5162,0x7AF8,0x5169, +0x516A,0x516E,0x5180,0x5182,0x56D8,0x518C,0x5189,0x518F, +0x5191,0x5193,0x5195,0x5196,0x51A4,0x51A6,0x51A2,0x51A9, +0x51AA,0x51AB,0x51B3,0x51B1,0x51B2,0x51B0,0x51B5,0x51BD, +0x51C5,0x51C9,0x51DB,0x51E0,0x8655,0x51E9,0x51ED,0x51F0, +0x51F5,0x51FE,0x5204,0x520B,0x5214,0x520E,0x5227,0x522A, +0x522E,0x5233,0x5239,0x524F,0x5244,0x524B,0x524C,0x525E, +0x5254,0x526A,0x5274,0x5269,0x5273,0x527F,0x527D,0x528D, +0x5294,0x5292,0x5271,0x5288,0x5291,0x8FA8, +/* plane 1 ku 50 */ +0x8FA7,0x52AC,0x52AD,0x52BC,0x52B5,0x52C1,0x52CD,0x52D7, +0x52DE,0x52E3,0x52E6,0x98ED,0x52E0,0x52F3,0x52F5,0x52F8, +0x52F9,0x5306,0x5308,0x7538,0x530D,0x5310,0x530F,0x5315, +0x531A,0x5323,0x532F,0x5331,0x5333,0x5338,0x5340,0x5346, +0x5345,0x4E17,0x5349,0x534D,0x51D6,0x535E,0x5369,0x536E, +0x5918,0x537B,0x5377,0x5382,0x5396,0x53A0,0x53A6,0x53A5, +0x53AE,0x53B0,0x53B6,0x53C3,0x7C12,0x96D9,0x53DF,0x66FC, +0x71EE,0x53EE,0x53E8,0x53ED,0x53FA,0x5401,0x543D,0x5440, +0x542C,0x542D,0x543C,0x542E,0x5436,0x5429,0x541D,0x544E, +0x548F,0x5475,0x548E,0x545F,0x5471,0x5477,0x5470,0x5492, +0x547B,0x5480,0x5476,0x5484,0x5490,0x5486,0x54C7,0x54A2, +0x54B8,0x54A5,0x54AC,0x54C4,0x54C8,0x54A8, +/* plane 1 ku 51 */ +0x54AB,0x54C2,0x54A4,0x54BE,0x54BC,0x54D8,0x54E5,0x54E6, +0x550F,0x5514,0x54FD,0x54EE,0x54ED,0x54FA,0x54E2,0x5539, +0x5540,0x5563,0x554C,0x552E,0x555C,0x5545,0x5556,0x5557, +0x5538,0x5533,0x555D,0x5599,0x5580,0x54AF,0x558A,0x559F, +0x557B,0x557E,0x5598,0x559E,0x55AE,0x557C,0x5583,0x55A9, +0x5587,0x55A8,0x55DA,0x55C5,0x55DF,0x55C4,0x55DC,0x55E4, +0x55D4,0x5614,0x55F7,0x5616,0x55FE,0x55FD,0x561B,0x55F9, +0x564E,0x5650,0x71DF,0x5634,0x5636,0x5632,0x5638,0x566B, +0x5664,0x562F,0x566C,0x566A,0x5686,0x5680,0x568A,0x56A0, +0x5694,0x568F,0x56A5,0x56AE,0x56B6,0x56B4,0x56C2,0x56BC, +0x56C1,0x56C3,0x56C0,0x56C8,0x56CE,0x56D1,0x56D3,0x56D7, +0x56EE,0x56F9,0x5700,0x56FF,0x5704,0x5709, +/* plane 1 ku 52 */ +0x5708,0x570B,0x570D,0x5713,0x5718,0x5716,0x55C7,0x571C, +0x5726,0x5737,0x5738,0x574E,0x573B,0x5740,0x574F,0x5769, +0x57C0,0x5788,0x5761,0x577F,0x5789,0x5793,0x57A0,0x57B3, +0x57A4,0x57AA,0x57B0,0x57C3,0x57C6,0x57D4,0x57D2,0x57D3, +0x580A,0x57D6,0x57E3,0x580B,0x5819,0x581D,0x5872,0x5821, +0x5862,0x584B,0x5870,0x6BC0,0x5852,0x583D,0x5879,0x5885, +0x58B9,0x589F,0x58AB,0x58BA,0x58DE,0x58BB,0x58B8,0x58AE, +0x58C5,0x58D3,0x58D1,0x58D7,0x58D9,0x58D8,0x58E5,0x58DC, +0x58E4,0x58DF,0x58EF,0x58FA,0x58F9,0x58FB,0x58FC,0x58FD, +0x5902,0x590A,0x5910,0x591B,0x68A6,0x5925,0x592C,0x592D, +0x5932,0x5938,0x593E,0x7AD2,0x5955,0x5950,0x594E,0x595A, +0x5958,0x5962,0x5960,0x5967,0x596C,0x5969, +/* plane 1 ku 53 */ +0x5978,0x5981,0x599D,0x4F5E,0x4FAB,0x59A3,0x59B2,0x59C6, +0x59E8,0x59DC,0x598D,0x59D9,0x59DA,0x5A25,0x5A1F,0x5A11, +0x5A1C,0x5A09,0x5A1A,0x5A40,0x5A6C,0x5A49,0x5A35,0x5A36, +0x5A62,0x5A6A,0x5A9A,0x5ABC,0x5ABE,0x5ACB,0x5AC2,0x5ABD, +0x5AE3,0x5AD7,0x5AE6,0x5AE9,0x5AD6,0x5AFA,0x5AFB,0x5B0C, +0x5B0B,0x5B16,0x5B32,0x5AD0,0x5B2A,0x5B36,0x5B3E,0x5B43, +0x5B45,0x5B40,0x5B51,0x5B55,0x5B5A,0x5B5B,0x5B65,0x5B69, +0x5B70,0x5B73,0x5B75,0x5B78,0x6588,0x5B7A,0x5B80,0x5B83, +0x5BA6,0x5BB8,0x5BC3,0x5BC7,0x5BC9,0x5BD4,0x5BD0,0x5BE4, +0x5BE6,0x5BE2,0x5BDE,0x5BE5,0x5BEB,0x5BF0,0x5BF6,0x5BF3, +0x5C05,0x5C07,0x5C08,0x5C0D,0x5C13,0x5C20,0x5C22,0x5C28, +0x5C38,0x5C39,0x5C41,0x5C46,0x5C4E,0x5C53, +/* plane 1 ku 54 */ +0x5C50,0x5C4F,0x5B71,0x5C6C,0x5C6E,0x4E62,0x5C76,0x5C79, +0x5C8C,0x5C91,0x5C94,0x599B,0x5CAB,0x5CBB,0x5CB6,0x5CBC, +0x5CB7,0x5CC5,0x5CBE,0x5CC7,0x5CD9,0x5CE9,0x5CFD,0x5CFA, +0x5CED,0x5D8C,0x5CEA,0x5D0B,0x5D15,0x5D17,0x5D5C,0x5D1F, +0x5D1B,0x5D11,0x5D14,0x5D22,0x5D1A,0x5D19,0x5D18,0x5D4C, +0x5D52,0x5D4E,0x5D4B,0x5D6C,0x5D73,0x5D76,0x5D87,0x5D84, +0x5D82,0x5DA2,0x5D9D,0x5DAC,0x5DAE,0x5DBD,0x5D90,0x5DB7, +0x5DBC,0x5DC9,0x5DCD,0x5DD3,0x5DD2,0x5DD6,0x5DDB,0x5DEB, +0x5DF2,0x5DF5,0x5E0B,0x5E1A,0x5E19,0x5E11,0x5E1B,0x5E36, +0x5E37,0x5E44,0x5E43,0x5E40,0x5E4E,0x5E57,0x5E54,0x5E5F, +0x5E62,0x5E64,0x5E47,0x5E75,0x5E76,0x5E7A,0x9EBC,0x5E7F, +0x5EA0,0x5EC1,0x5EC2,0x5EC8,0x5ED0,0x5ECF, +/* plane 1 ku 55 */ +0x5ED6,0x5EE3,0x5EDD,0x5EDA,0x5EDB,0x5EE2,0x5EE1,0x5EE8, +0x5EE9,0x5EEC,0x5EF1,0x5EF3,0x5EF0,0x5EF4,0x5EF8,0x5EFE, +0x5F03,0x5F09,0x5F5D,0x5F5C,0x5F0B,0x5F11,0x5F16,0x5F29, +0x5F2D,0x5F38,0x5F41,0x5F48,0x5F4C,0x5F4E,0x5F2F,0x5F51, +0x5F56,0x5F57,0x5F59,0x5F61,0x5F6D,0x5F73,0x5F77,0x5F83, +0x5F82,0x5F7F,0x5F8A,0x5F88,0x5F91,0x5F87,0x5F9E,0x5F99, +0x5F98,0x5FA0,0x5FA8,0x5FAD,0x5FBC,0x5FD6,0x5FFB,0x5FE4, +0x5FF8,0x5FF1,0x5FDD,0x60B3,0x5FFF,0x6021,0x6060,0x6019, +0x6010,0x6029,0x600E,0x6031,0x601B,0x6015,0x602B,0x6026, +0x600F,0x603A,0x605A,0x6041,0x606A,0x6077,0x605F,0x604A, +0x6046,0x604D,0x6063,0x6043,0x6064,0x6042,0x606C,0x606B, +0x6059,0x6081,0x608D,0x60E7,0x6083,0x609A, +/* plane 1 ku 56 */ +0x6084,0x609B,0x6096,0x6097,0x6092,0x60A7,0x608B,0x60E1, +0x60B8,0x60E0,0x60D3,0x60B4,0x5FF0,0x60BD,0x60C6,0x60B5, +0x60D8,0x614D,0x6115,0x6106,0x60F6,0x60F7,0x6100,0x60F4, +0x60FA,0x6103,0x6121,0x60FB,0x60F1,0x610D,0x610E,0x6147, +0x613E,0x6128,0x6127,0x614A,0x613F,0x613C,0x612C,0x6134, +0x613D,0x6142,0x6144,0x6173,0x6177,0x6158,0x6159,0x615A, +0x616B,0x6174,0x616F,0x6165,0x6171,0x615F,0x615D,0x6153, +0x6175,0x6199,0x6196,0x6187,0x61AC,0x6194,0x619A,0x618A, +0x6191,0x61AB,0x61AE,0x61CC,0x61CA,0x61C9,0x61F7,0x61C8, +0x61C3,0x61C6,0x61BA,0x61CB,0x7F79,0x61CD,0x61E6,0x61E3, +0x61F6,0x61FA,0x61F4,0x61FF,0x61FD,0x61FC,0x61FE,0x6200, +0x6208,0x6209,0x620D,0x620C,0x6214,0x621B, +/* plane 1 ku 57 */ +0x621E,0x6221,0x622A,0x622E,0x6230,0x6232,0x6233,0x6241, +0x624E,0x625E,0x6263,0x625B,0x6260,0x6268,0x627C,0x6282, +0x6289,0x627E,0x6292,0x6293,0x6296,0x62D4,0x6283,0x6294, +0x62D7,0x62D1,0x62BB,0x62CF,0x62FF,0x62C6,0x64D4,0x62C8, +0x62DC,0x62CC,0x62CA,0x62C2,0x62C7,0x629B,0x62C9,0x630C, +0x62EE,0x62F1,0x6327,0x6302,0x6308,0x62EF,0x62F5,0x6350, +0x633E,0x634D,0x641C,0x634F,0x6396,0x638E,0x6380,0x63AB, +0x6376,0x63A3,0x638F,0x6389,0x639F,0x63B5,0x636B,0x6369, +0x63BE,0x63E9,0x63C0,0x63C6,0x63E3,0x63C9,0x63D2,0x63F6, +0x63C4,0x6416,0x6434,0x6406,0x6413,0x6426,0x6436,0x651D, +0x6417,0x6428,0x640F,0x6467,0x646F,0x6476,0x644E,0x652A, +0x6495,0x6493,0x64A5,0x64A9,0x6488,0x64BC, +/* plane 1 ku 58 */ +0x64DA,0x64D2,0x64C5,0x64C7,0x64BB,0x64D8,0x64C2,0x64F1, +0x64E7,0x8209,0x64E0,0x64E1,0x62AC,0x64E3,0x64EF,0x652C, +0x64F6,0x64F4,0x64F2,0x64FA,0x6500,0x64FD,0x6518,0x651C, +0x6505,0x6524,0x6523,0x652B,0x6534,0x6535,0x6537,0x6536, +0x6538,0x754B,0x6548,0x6556,0x6555,0x654D,0x6558,0x655E, +0x655D,0x6572,0x6578,0x6582,0x6583,0x8B8A,0x659B,0x659F, +0x65AB,0x65B7,0x65C3,0x65C6,0x65C1,0x65C4,0x65CC,0x65D2, +0x65DB,0x65D9,0x65E0,0x65E1,0x65F1,0x6772,0x660A,0x6603, +0x65FB,0x6773,0x6635,0x6636,0x6634,0x661C,0x664F,0x6644, +0x6649,0x6641,0x665E,0x665D,0x6664,0x6667,0x6668,0x665F, +0x6662,0x6670,0x6683,0x6688,0x668E,0x6689,0x6684,0x6698, +0x669D,0x66C1,0x66B9,0x66C9,0x66BE,0x66BC, +/* plane 1 ku 59 */ +0x66C4,0x66B8,0x66D6,0x66DA,0x66E0,0x663F,0x66E6,0x66E9, +0x66F0,0x66F5,0x66F7,0x670F,0x6716,0x671E,0x6726,0x6727, +0x9738,0x672E,0x673F,0x6736,0x6741,0x6738,0x6737,0x6746, +0x675E,0x6760,0x6759,0x6763,0x6764,0x6789,0x6770,0x67A9, +0x677C,0x676A,0x678C,0x678B,0x67A6,0x67A1,0x6785,0x67B7, +0x67EF,0x67B4,0x67EC,0x67B3,0x67E9,0x67B8,0x67E4,0x67DE, +0x67DD,0x67E2,0x67EE,0x67B9,0x67CE,0x67C6,0x67E7,0x6A9C, +0x681E,0x6846,0x6829,0x6840,0x684D,0x6832,0x684E,0x68B3, +0x682B,0x6859,0x6863,0x6877,0x687F,0x689F,0x688F,0x68AD, +0x6894,0x689D,0x689B,0x6883,0x6AAE,0x68B9,0x6874,0x68B5, +0x68A0,0x68BA,0x690F,0x688D,0x687E,0x6901,0x68CA,0x6908, +0x68D8,0x6922,0x6926,0x68E1,0x690C,0x68CD, +/* plane 1 ku 60 */ +0x68D4,0x68E7,0x68D5,0x6936,0x6912,0x6904,0x68D7,0x68E3, +0x6925,0x68F9,0x68E0,0x68EF,0x6928,0x692A,0x691A,0x6923, +0x6921,0x68C6,0x6979,0x6977,0x695C,0x6978,0x696B,0x6954, +0x697E,0x696E,0x6939,0x6974,0x693D,0x6959,0x6930,0x6961, +0x695E,0x695D,0x6981,0x696A,0x69B2,0x69AE,0x69D0,0x69BF, +0x69C1,0x69D3,0x69BE,0x69CE,0x5BE8,0x69CA,0x69DD,0x69BB, +0x69C3,0x69A7,0x6A2E,0x6991,0x69A0,0x699C,0x6995,0x69B4, +0x69DE,0x69E8,0x6A02,0x6A1B,0x69FF,0x6B0A,0x69F9,0x69F2, +0x69E7,0x6A05,0x69B1,0x6A1E,0x69ED,0x6A14,0x69EB,0x6A0A, +0x6A12,0x6AC1,0x6A23,0x6A13,0x6A44,0x6A0C,0x6A72,0x6A36, +0x6A78,0x6A47,0x6A62,0x6A59,0x6A66,0x6A48,0x6A38,0x6A22, +0x6A90,0x6A8D,0x6AA0,0x6A84,0x6AA2,0x6AA3, +/* plane 1 ku 61 */ +0x6A97,0x8617,0x6ABB,0x6AC3,0x6AC2,0x6AB8,0x6AB3,0x6AAC, +0x6ADE,0x6AD1,0x6ADF,0x6AAA,0x6ADA,0x6AEA,0x6AFB,0x6B05, +0x8616,0x6AFA,0x6B12,0x6B16,0x9B31,0x6B1F,0x6B38,0x6B37, +0x76DC,0x6B39,0x98EE,0x6B47,0x6B43,0x6B49,0x6B50,0x6B59, +0x6B54,0x6B5B,0x6B5F,0x6B61,0x6B78,0x6B79,0x6B7F,0x6B80, +0x6B84,0x6B83,0x6B8D,0x6B98,0x6B95,0x6B9E,0x6BA4,0x6BAA, +0x6BAB,0x6BAF,0x6BB2,0x6BB1,0x6BB3,0x6BB7,0x6BBC,0x6BC6, +0x6BCB,0x6BD3,0x6BDF,0x6BEC,0x6BEB,0x6BF3,0x6BEF,0x9EBE, +0x6C08,0x6C13,0x6C14,0x6C1B,0x6C24,0x6C23,0x6C5E,0x6C55, +0x6C62,0x6C6A,0x6C82,0x6C8D,0x6C9A,0x6C81,0x6C9B,0x6C7E, +0x6C68,0x6C73,0x6C92,0x6C90,0x6CC4,0x6CF1,0x6CD3,0x6CBD, +0x6CD7,0x6CC5,0x6CDD,0x6CAE,0x6CB1,0x6CBE, +/* plane 1 ku 62 */ +0x6CBA,0x6CDB,0x6CEF,0x6CD9,0x6CEA,0x6D1F,0x884D,0x6D36, +0x6D2B,0x6D3D,0x6D38,0x6D19,0x6D35,0x6D33,0x6D12,0x6D0C, +0x6D63,0x6D93,0x6D64,0x6D5A,0x6D79,0x6D59,0x6D8E,0x6D95, +0x6FE4,0x6D85,0x6DF9,0x6E15,0x6E0A,0x6DB5,0x6DC7,0x6DE6, +0x6DB8,0x6DC6,0x6DEC,0x6DDE,0x6DCC,0x6DE8,0x6DD2,0x6DC5, +0x6DFA,0x6DD9,0x6DE4,0x6DD5,0x6DEA,0x6DEE,0x6E2D,0x6E6E, +0x6E2E,0x6E19,0x6E72,0x6E5F,0x6E3E,0x6E23,0x6E6B,0x6E2B, +0x6E76,0x6E4D,0x6E1F,0x6E43,0x6E3A,0x6E4E,0x6E24,0x6EFF, +0x6E1D,0x6E38,0x6E82,0x6EAA,0x6E98,0x6EC9,0x6EB7,0x6ED3, +0x6EBD,0x6EAF,0x6EC4,0x6EB2,0x6ED4,0x6ED5,0x6E8F,0x6EA5, +0x6EC2,0x6E9F,0x6F41,0x6F11,0x704C,0x6EEC,0x6EF8,0x6EFE, +0x6F3F,0x6EF2,0x6F31,0x6EEF,0x6F32,0x6ECC, +/* plane 1 ku 63 */ +0x6F3E,0x6F13,0x6EF7,0x6F86,0x6F7A,0x6F78,0x6F81,0x6F80, +0x6F6F,0x6F5B,0x6FF3,0x6F6D,0x6F82,0x6F7C,0x6F58,0x6F8E, +0x6F91,0x6FC2,0x6F66,0x6FB3,0x6FA3,0x6FA1,0x6FA4,0x6FB9, +0x6FC6,0x6FAA,0x6FDF,0x6FD5,0x6FEC,0x6FD4,0x6FD8,0x6FF1, +0x6FEE,0x6FDB,0x7009,0x700B,0x6FFA,0x7011,0x7001,0x700F, +0x6FFE,0x701B,0x701A,0x6F74,0x701D,0x7018,0x701F,0x7030, +0x703E,0x7032,0x7051,0x7063,0x7099,0x7092,0x70AF,0x70F1, +0x70AC,0x70B8,0x70B3,0x70AE,0x70DF,0x70CB,0x70DD,0x70D9, +0x7109,0x70FD,0x711C,0x7119,0x7165,0x7155,0x7188,0x7166, +0x7162,0x714C,0x7156,0x716C,0x718F,0x71FB,0x7184,0x7195, +0x71A8,0x71AC,0x71D7,0x71B9,0x71BE,0x71D2,0x71C9,0x71D4, +0x71CE,0x71E0,0x71EC,0x71E7,0x71F5,0x71FC, +/* plane 1 ku 64 */ +0x71F9,0x71FF,0x720D,0x7210,0x721B,0x7228,0x722D,0x722C, +0x7230,0x7232,0x723B,0x723C,0x723F,0x7240,0x7246,0x724B, +0x7258,0x7274,0x727E,0x7282,0x7281,0x7287,0x7292,0x7296, +0x72A2,0x72A7,0x72B9,0x72B2,0x72C3,0x72C6,0x72C4,0x72CE, +0x72D2,0x72E2,0x72E0,0x72E1,0x72F9,0x72F7,0x500F,0x7317, +0x730A,0x731C,0x7316,0x731D,0x7334,0x732F,0x7329,0x7325, +0x733E,0x734E,0x734F,0x9ED8,0x7357,0x736A,0x7368,0x7370, +0x7378,0x7375,0x737B,0x737A,0x73C8,0x73B3,0x73CE,0x73BB, +0x73C0,0x73E5,0x73EE,0x73DE,0x74A2,0x7405,0x746F,0x7425, +0x73F8,0x7432,0x743A,0x7455,0x743F,0x745F,0x7459,0x7441, +0x745C,0x7469,0x7470,0x7463,0x746A,0x7476,0x747E,0x748B, +0x749E,0x74A7,0x74CA,0x74CF,0x74D4,0x73F1, +/* plane 1 ku 65 */ +0x74E0,0x74E3,0x74E7,0x74E9,0x74EE,0x74F2,0x74F0,0x74F1, +0x74F8,0x74F7,0x7504,0x7503,0x7505,0x750C,0x750E,0x750D, +0x7515,0x7513,0x751E,0x7526,0x752C,0x753C,0x7544,0x754D, +0x754A,0x7549,0x755B,0x7546,0x755A,0x7569,0x7564,0x7567, +0x756B,0x756D,0x7578,0x7576,0x7586,0x7587,0x7574,0x758A, +0x7589,0x7582,0x7594,0x759A,0x759D,0x75A5,0x75A3,0x75C2, +0x75B3,0x75C3,0x75B5,0x75BD,0x75B8,0x75BC,0x75B1,0x75CD, +0x75CA,0x75D2,0x75D9,0x75E3,0x75DE,0x75FE,0x75FF,0x75FC, +0x7601,0x75F0,0x75FA,0x75F2,0x75F3,0x760B,0x760D,0x7609, +0x761F,0x7627,0x7620,0x7621,0x7622,0x7624,0x7634,0x7630, +0x763B,0x7647,0x7648,0x7646,0x765C,0x7658,0x7661,0x7662, +0x7668,0x7669,0x766A,0x7667,0x766C,0x7670, +/* plane 1 ku 66 */ +0x7672,0x7676,0x7678,0x767C,0x7680,0x7683,0x7688,0x768B, +0x768E,0x7696,0x7693,0x7699,0x769A,0x76B0,0x76B4,0x76B8, +0x76B9,0x76BA,0x76C2,0x76CD,0x76D6,0x76D2,0x76DE,0x76E1, +0x76E5,0x76E7,0x76EA,0x862F,0x76FB,0x7708,0x7707,0x7704, +0x7729,0x7724,0x771E,0x7725,0x7726,0x771B,0x7737,0x7738, +0x7747,0x775A,0x7768,0x776B,0x775B,0x7765,0x777F,0x777E, +0x7779,0x778E,0x778B,0x7791,0x77A0,0x779E,0x77B0,0x77B6, +0x77B9,0x77BF,0x77BC,0x77BD,0x77BB,0x77C7,0x77CD,0x77D7, +0x77DA,0x77DC,0x77E3,0x77EE,0x77FC,0x780C,0x7812,0x7926, +0x7820,0x792A,0x7845,0x788E,0x7874,0x7886,0x787C,0x789A, +0x788C,0x78A3,0x78B5,0x78AA,0x78AF,0x78D1,0x78C6,0x78CB, +0x78D4,0x78BE,0x78BC,0x78C5,0x78CA,0x78EC, +/* plane 1 ku 67 */ +0x78E7,0x78DA,0x78FD,0x78F4,0x7907,0x7912,0x7911,0x7919, +0x792C,0x792B,0x7940,0x7960,0x7957,0x795F,0x795A,0x7955, +0x7953,0x797A,0x797F,0x798A,0x799D,0x79A7,0x9F4B,0x79AA, +0x79AE,0x79B3,0x79B9,0x79BA,0x79C9,0x79D5,0x79E7,0x79EC, +0x79E1,0x79E3,0x7A08,0x7A0D,0x7A18,0x7A19,0x7A20,0x7A1F, +0x7980,0x7A31,0x7A3B,0x7A3E,0x7A37,0x7A43,0x7A57,0x7A49, +0x7A61,0x7A62,0x7A69,0x9F9D,0x7A70,0x7A79,0x7A7D,0x7A88, +0x7A97,0x7A95,0x7A98,0x7A96,0x7AA9,0x7AC8,0x7AB0,0x7AB6, +0x7AC5,0x7AC4,0x7ABF,0x9083,0x7AC7,0x7ACA,0x7ACD,0x7ACF, +0x7AD5,0x7AD3,0x7AD9,0x7ADA,0x7ADD,0x7AE1,0x7AE2,0x7AE6, +0x7AED,0x7AF0,0x7B02,0x7B0F,0x7B0A,0x7B06,0x7B33,0x7B18, +0x7B19,0x7B1E,0x7B35,0x7B28,0x7B36,0x7B50, +/* plane 1 ku 68 */ +0x7B7A,0x7B04,0x7B4D,0x7B0B,0x7B4C,0x7B45,0x7B75,0x7B65, +0x7B74,0x7B67,0x7B70,0x7B71,0x7B6C,0x7B6E,0x7B9D,0x7B98, +0x7B9F,0x7B8D,0x7B9C,0x7B9A,0x7B8B,0x7B92,0x7B8F,0x7B5D, +0x7B99,0x7BCB,0x7BC1,0x7BCC,0x7BCF,0x7BB4,0x7BC6,0x7BDD, +0x7BE9,0x7C11,0x7C14,0x7BE6,0x7BE5,0x7C60,0x7C00,0x7C07, +0x7C13,0x7BF3,0x7BF7,0x7C17,0x7C0D,0x7BF6,0x7C23,0x7C27, +0x7C2A,0x7C1F,0x7C37,0x7C2B,0x7C3D,0x7C4C,0x7C43,0x7C54, +0x7C4F,0x7C40,0x7C50,0x7C58,0x7C5F,0x7C64,0x7C56,0x7C65, +0x7C6C,0x7C75,0x7C83,0x7C90,0x7CA4,0x7CAD,0x7CA2,0x7CAB, +0x7CA1,0x7CA8,0x7CB3,0x7CB2,0x7CB1,0x7CAE,0x7CB9,0x7CBD, +0x7CC0,0x7CC5,0x7CC2,0x7CD8,0x7CD2,0x7CDC,0x7CE2,0x9B3B, +0x7CEF,0x7CF2,0x7CF4,0x7CF6,0x7CFA,0x7D06, +/* plane 1 ku 69 */ +0x7D02,0x7D1C,0x7D15,0x7D0A,0x7D45,0x7D4B,0x7D2E,0x7D32, +0x7D3F,0x7D35,0x7D46,0x7D73,0x7D56,0x7D4E,0x7D72,0x7D68, +0x7D6E,0x7D4F,0x7D63,0x7D93,0x7D89,0x7D5B,0x7D8F,0x7D7D, +0x7D9B,0x7DBA,0x7DAE,0x7DA3,0x7DB5,0x7DC7,0x7DBD,0x7DAB, +0x7E3D,0x7DA2,0x7DAF,0x7DDC,0x7DB8,0x7D9F,0x7DB0,0x7DD8, +0x7DDD,0x7DE4,0x7DDE,0x7DFB,0x7DF2,0x7DE1,0x7E05,0x7E0A, +0x7E23,0x7E21,0x7E12,0x7E31,0x7E1F,0x7E09,0x7E0B,0x7E22, +0x7E46,0x7E66,0x7E3B,0x7E35,0x7E39,0x7E43,0x7E37,0x7E32, +0x7E3A,0x7E67,0x7E5D,0x7E56,0x7E5E,0x7E59,0x7E5A,0x7E79, +0x7E6A,0x7E69,0x7E7C,0x7E7B,0x7E83,0x7DD5,0x7E7D,0x8FAE, +0x7E7F,0x7E88,0x7E89,0x7E8C,0x7E92,0x7E90,0x7E93,0x7E94, +0x7E96,0x7E8E,0x7E9B,0x7E9C,0x7F38,0x7F3A, +/* plane 1 ku 70 */ +0x7F45,0x7F4C,0x7F4D,0x7F4E,0x7F50,0x7F51,0x7F55,0x7F54, +0x7F58,0x7F5F,0x7F60,0x7F68,0x7F69,0x7F67,0x7F78,0x7F82, +0x7F86,0x7F83,0x7F88,0x7F87,0x7F8C,0x7F94,0x7F9E,0x7F9D, +0x7F9A,0x7FA3,0x7FAF,0x7FB2,0x7FB9,0x7FAE,0x7FB6,0x7FB8, +0x8B71,0x7FC5,0x7FC6,0x7FCA,0x7FD5,0x7FD4,0x7FE1,0x7FE6, +0x7FE9,0x7FF3,0x7FF9,0x98DC,0x8006,0x8004,0x800B,0x8012, +0x8018,0x8019,0x801C,0x8021,0x8028,0x803F,0x803B,0x804A, +0x8046,0x8052,0x8058,0x805A,0x805F,0x8062,0x8068,0x8073, +0x8072,0x8070,0x8076,0x8079,0x807D,0x807F,0x8084,0x8086, +0x8085,0x809B,0x8093,0x809A,0x80AD,0x5190,0x80AC,0x80DB, +0x80E5,0x80D9,0x80DD,0x80C4,0x80DA,0x80D6,0x8109,0x80EF, +0x80F1,0x811B,0x8129,0x8123,0x812F,0x814B, +/* plane 1 ku 71 */ +0x968B,0x8146,0x813E,0x8153,0x8151,0x80FC,0x8171,0x816E, +0x8165,0x8166,0x8174,0x8183,0x8188,0x818A,0x8180,0x8182, +0x81A0,0x8195,0x81A4,0x81A3,0x815F,0x8193,0x81A9,0x81B0, +0x81B5,0x81BE,0x81B8,0x81BD,0x81C0,0x81C2,0x81BA,0x81C9, +0x81CD,0x81D1,0x81D9,0x81D8,0x81C8,0x81DA,0x81DF,0x81E0, +0x81E7,0x81FA,0x81FB,0x81FE,0x8201,0x8202,0x8205,0x8207, +0x820A,0x820D,0x8210,0x8216,0x8229,0x822B,0x8238,0x8233, +0x8240,0x8259,0x8258,0x825D,0x825A,0x825F,0x8264,0x8262, +0x8268,0x826A,0x826B,0x822E,0x8271,0x8277,0x8278,0x827E, +0x828D,0x8292,0x82AB,0x829F,0x82BB,0x82AC,0x82E1,0x82E3, +0x82DF,0x82D2,0x82F4,0x82F3,0x82FA,0x8393,0x8303,0x82FB, +0x82F9,0x82DE,0x8306,0x82DC,0x8309,0x82D9, +/* plane 1 ku 72 */ +0x8335,0x8334,0x8316,0x8332,0x8331,0x8340,0x8339,0x8350, +0x8345,0x832F,0x832B,0x8317,0x8318,0x8385,0x839A,0x83AA, +0x839F,0x83A2,0x8396,0x8323,0x838E,0x8387,0x838A,0x837C, +0x83B5,0x8373,0x8375,0x83A0,0x8389,0x83A8,0x83F4,0x8413, +0x83EB,0x83CE,0x83FD,0x8403,0x83D8,0x840B,0x83C1,0x83F7, +0x8407,0x83E0,0x83F2,0x840D,0x8422,0x8420,0x83BD,0x8438, +0x8506,0x83FB,0x846D,0x842A,0x843C,0x855A,0x8484,0x8477, +0x846B,0x84AD,0x846E,0x8482,0x8469,0x8446,0x842C,0x846F, +0x8479,0x8435,0x84CA,0x8462,0x84B9,0x84BF,0x849F,0x84D9, +0x84CD,0x84BB,0x84DA,0x84D0,0x84C1,0x84C6,0x84D6,0x84A1, +0x8521,0x84FF,0x84F4,0x8517,0x8518,0x852C,0x851F,0x8515, +0x8514,0x84FC,0x8540,0x8563,0x8558,0x8548, +/* plane 1 ku 73 */ +0x8541,0x8602,0x854B,0x8555,0x8580,0x85A4,0x8588,0x8591, +0x858A,0x85A8,0x856D,0x8594,0x859B,0x85EA,0x8587,0x859C, +0x8577,0x857E,0x8590,0x85C9,0x85BA,0x85CF,0x85B9,0x85D0, +0x85D5,0x85DD,0x85E5,0x85DC,0x85F9,0x860A,0x8613,0x860B, +0x85FE,0x85FA,0x8606,0x8622,0x861A,0x8630,0x863F,0x864D, +0x4E55,0x8654,0x865F,0x8667,0x8671,0x8693,0x86A3,0x86A9, +0x86AA,0x868B,0x868C,0x86B6,0x86AF,0x86C4,0x86C6,0x86B0, +0x86C9,0x8823,0x86AB,0x86D4,0x86DE,0x86E9,0x86EC,0x86DF, +0x86DB,0x86EF,0x8712,0x8706,0x8708,0x8700,0x8703,0x86FB, +0x8711,0x8709,0x870D,0x86F9,0x870A,0x8734,0x873F,0x8737, +0x873B,0x8725,0x8729,0x871A,0x8760,0x875F,0x8778,0x874C, +0x874E,0x8774,0x8757,0x8768,0x876E,0x8759, +/* plane 1 ku 74 */ +0x8753,0x8763,0x876A,0x8805,0x87A2,0x879F,0x8782,0x87AF, +0x87CB,0x87BD,0x87C0,0x87D0,0x96D6,0x87AB,0x87C4,0x87B3, +0x87C7,0x87C6,0x87BB,0x87EF,0x87F2,0x87E0,0x880F,0x880D, +0x87FE,0x87F6,0x87F7,0x880E,0x87D2,0x8811,0x8816,0x8815, +0x8822,0x8821,0x8831,0x8836,0x8839,0x8827,0x883B,0x8844, +0x8842,0x8852,0x8859,0x885E,0x8862,0x886B,0x8881,0x887E, +0x889E,0x8875,0x887D,0x88B5,0x8872,0x8882,0x8897,0x8892, +0x88AE,0x8899,0x88A2,0x888D,0x88A4,0x88B0,0x88BF,0x88B1, +0x88C3,0x88C4,0x88D4,0x88D8,0x88D9,0x88DD,0x88F9,0x8902, +0x88FC,0x88F4,0x88E8,0x88F2,0x8904,0x890C,0x890A,0x8913, +0x8943,0x891E,0x8925,0x892A,0x892B,0x8941,0x8944,0x893B, +0x8936,0x8938,0x894C,0x891D,0x8960,0x895E, +/* plane 1 ku 75 */ +0x8966,0x8964,0x896D,0x896A,0x896F,0x8974,0x8977,0x897E, +0x8983,0x8988,0x898A,0x8993,0x8998,0x89A1,0x89A9,0x89A6, +0x89AC,0x89AF,0x89B2,0x89BA,0x89BD,0x89BF,0x89C0,0x89DA, +0x89DC,0x89DD,0x89E7,0x89F4,0x89F8,0x8A03,0x8A16,0x8A10, +0x8A0C,0x8A1B,0x8A1D,0x8A25,0x8A36,0x8A41,0x8A5B,0x8A52, +0x8A46,0x8A48,0x8A7C,0x8A6D,0x8A6C,0x8A62,0x8A85,0x8A82, +0x8A84,0x8AA8,0x8AA1,0x8A91,0x8AA5,0x8AA6,0x8A9A,0x8AA3, +0x8AC4,0x8ACD,0x8AC2,0x8ADA,0x8AEB,0x8AF3,0x8AE7,0x8AE4, +0x8AF1,0x8B14,0x8AE0,0x8AE2,0x8AF7,0x8ADE,0x8ADB,0x8B0C, +0x8B07,0x8B1A,0x8AE1,0x8B16,0x8B10,0x8B17,0x8B20,0x8B33, +0x97AB,0x8B26,0x8B2B,0x8B3E,0x8B28,0x8B41,0x8B4C,0x8B4F, +0x8B4E,0x8B49,0x8B56,0x8B5B,0x8B5A,0x8B6B, +/* plane 1 ku 76 */ +0x8B5F,0x8B6C,0x8B6F,0x8B74,0x8B7D,0x8B80,0x8B8C,0x8B8E, +0x8B92,0x8B93,0x8B96,0x8B99,0x8B9A,0x8C3A,0x8C41,0x8C3F, +0x8C48,0x8C4C,0x8C4E,0x8C50,0x8C55,0x8C62,0x8C6C,0x8C78, +0x8C7A,0x8C82,0x8C89,0x8C85,0x8C8A,0x8C8D,0x8C8E,0x8C94, +0x8C7C,0x8C98,0x621D,0x8CAD,0x8CAA,0x8CBD,0x8CB2,0x8CB3, +0x8CAE,0x8CB6,0x8CC8,0x8CC1,0x8CE4,0x8CE3,0x8CDA,0x8CFD, +0x8CFA,0x8CFB,0x8D04,0x8D05,0x8D0A,0x8D07,0x8D0F,0x8D0D, +0x8D10,0x9F4E,0x8D13,0x8CCD,0x8D14,0x8D16,0x8D67,0x8D6D, +0x8D71,0x8D73,0x8D81,0x8D99,0x8DC2,0x8DBE,0x8DBA,0x8DCF, +0x8DDA,0x8DD6,0x8DCC,0x8DDB,0x8DCB,0x8DEA,0x8DEB,0x8DDF, +0x8DE3,0x8DFC,0x8E08,0x8E09,0x8DFF,0x8E1D,0x8E1E,0x8E10, +0x8E1F,0x8E42,0x8E35,0x8E30,0x8E34,0x8E4A, +/* plane 1 ku 77 */ +0x8E47,0x8E49,0x8E4C,0x8E50,0x8E48,0x8E59,0x8E64,0x8E60, +0x8E2A,0x8E63,0x8E55,0x8E76,0x8E72,0x8E7C,0x8E81,0x8E87, +0x8E85,0x8E84,0x8E8B,0x8E8A,0x8E93,0x8E91,0x8E94,0x8E99, +0x8EAA,0x8EA1,0x8EAC,0x8EB0,0x8EC6,0x8EB1,0x8EBE,0x8EC5, +0x8EC8,0x8ECB,0x8EDB,0x8EE3,0x8EFC,0x8EFB,0x8EEB,0x8EFE, +0x8F0A,0x8F05,0x8F15,0x8F12,0x8F19,0x8F13,0x8F1C,0x8F1F, +0x8F1B,0x8F0C,0x8F26,0x8F33,0x8F3B,0x8F39,0x8F45,0x8F42, +0x8F3E,0x8F4C,0x8F49,0x8F46,0x8F4E,0x8F57,0x8F5C,0x8F62, +0x8F63,0x8F64,0x8F9C,0x8F9F,0x8FA3,0x8FAD,0x8FAF,0x8FB7, +0x8FDA,0x8FE5,0x8FE2,0x8FEA,0x8FEF,0x9087,0x8FF4,0x9005, +0x8FF9,0x8FFA,0x9011,0x9015,0x9021,0x900D,0x901E,0x9016, +0x900B,0x9027,0x9036,0x9035,0x9039,0x8FF8, +/* plane 1 ku 78 */ +0x904F,0x9050,0x9051,0x9052,0x900E,0x9049,0x903E,0x9056, +0x9058,0x905E,0x9068,0x906F,0x9076,0x96A8,0x9072,0x9082, +0x907D,0x9081,0x9080,0x908A,0x9089,0x908F,0x90A8,0x90AF, +0x90B1,0x90B5,0x90E2,0x90E4,0x6248,0x90DB,0x9102,0x9112, +0x9119,0x9132,0x9130,0x914A,0x9156,0x9158,0x9163,0x9165, +0x9169,0x9173,0x9172,0x918B,0x9189,0x9182,0x91A2,0x91AB, +0x91AF,0x91AA,0x91B5,0x91B4,0x91BA,0x91C0,0x91C1,0x91C9, +0x91CB,0x91D0,0x91D6,0x91DF,0x91E1,0x91DB,0x91FC,0x91F5, +0x91F6,0x921E,0x91FF,0x9214,0x922C,0x9215,0x9211,0x925E, +0x9257,0x9245,0x9249,0x9264,0x9248,0x9295,0x923F,0x924B, +0x9250,0x929C,0x9296,0x9293,0x929B,0x925A,0x92CF,0x92B9, +0x92B7,0x92E9,0x930F,0x92FA,0x9344,0x932E, +/* plane 1 ku 79 */ +0x9319,0x9322,0x931A,0x9323,0x933A,0x9335,0x933B,0x935C, +0x9360,0x937C,0x936E,0x9356,0x93B0,0x93AC,0x93AD,0x9394, +0x93B9,0x93D6,0x93D7,0x93E8,0x93E5,0x93D8,0x93C3,0x93DD, +0x93D0,0x93C8,0x93E4,0x941A,0x9414,0x9413,0x9403,0x9407, +0x9410,0x9436,0x942B,0x9435,0x9421,0x943A,0x9441,0x9452, +0x9444,0x945B,0x9460,0x9462,0x945E,0x946A,0x9229,0x9470, +0x9475,0x9477,0x947D,0x945A,0x947C,0x947E,0x9481,0x947F, +0x9582,0x9587,0x958A,0x9594,0x9596,0x9598,0x9599,0x95A0, +0x95A8,0x95A7,0x95AD,0x95BC,0x95BB,0x95B9,0x95BE,0x95CA, +0x6FF6,0x95C3,0x95CD,0x95CC,0x95D5,0x95D4,0x95D6,0x95DC, +0x95E1,0x95E5,0x95E2,0x9621,0x9628,0x962E,0x962F,0x9642, +0x964C,0x964F,0x964B,0x9677,0x965C,0x965E, +/* plane 1 ku 80 */ +0x965D,0x965F,0x9666,0x9672,0x966C,0x968D,0x9698,0x9695, +0x9697,0x96AA,0x96A7,0x96B1,0x96B2,0x96B0,0x96B4,0x96B6, +0x96B8,0x96B9,0x96CE,0x96CB,0x96C9,0x96CD,0x894D,0x96DC, +0x970D,0x96D5,0x96F9,0x9704,0x9706,0x9708,0x9713,0x970E, +0x9711,0x970F,0x9716,0x9719,0x9724,0x972A,0x9730,0x9739, +0x973D,0x973E,0x9744,0x9746,0x9748,0x9742,0x9749,0x975C, +0x9760,0x9764,0x9766,0x9768,0x52D2,0x976B,0x9771,0x9779, +0x9785,0x977C,0x9781,0x977A,0x9786,0x978B,0x978F,0x9790, +0x979C,0x97A8,0x97A6,0x97A3,0x97B3,0x97B4,0x97C3,0x97C6, +0x97C8,0x97CB,0x97DC,0x97ED,0x9F4F,0x97F2,0x7ADF,0x97F6, +0x97F5,0x980F,0x980C,0x9838,0x9824,0x9821,0x9837,0x983D, +0x9846,0x984F,0x984B,0x986B,0x986F,0x9870, +/* plane 1 ku 81 */ +0x9871,0x9874,0x9873,0x98AA,0x98AF,0x98B1,0x98B6,0x98C4, +0x98C3,0x98C6,0x98E9,0x98EB,0x9903,0x9909,0x9912,0x9914, +0x9918,0x9921,0x991D,0x991E,0x9924,0x9920,0x992C,0x992E, +0x993D,0x993E,0x9942,0x9949,0x9945,0x9950,0x994B,0x9951, +0x9952,0x994C,0x9955,0x9997,0x9998,0x99A5,0x99AD,0x99AE, +0x99BC,0x99DF,0x99DB,0x99DD,0x99D8,0x99D1,0x99ED,0x99EE, +0x99F1,0x99F2,0x99FB,0x99F8,0x9A01,0x9A0F,0x9A05,0x99E2, +0x9A19,0x9A2B,0x9A37,0x9A45,0x9A42,0x9A40,0x9A43,0x9A3E, +0x9A55,0x9A4D,0x9A5B,0x9A57,0x9A5F,0x9A62,0x9A65,0x9A64, +0x9A69,0x9A6B,0x9A6A,0x9AAD,0x9AB0,0x9ABC,0x9AC0,0x9ACF, +0x9AD1,0x9AD3,0x9AD4,0x9ADE,0x9ADF,0x9AE2,0x9AE3,0x9AE6, +0x9AEF,0x9AEB,0x9AEE,0x9AF4,0x9AF1,0x9AF7, +/* plane 1 ku 82 */ +0x9AFB,0x9B06,0x9B18,0x9B1A,0x9B1F,0x9B22,0x9B23,0x9B25, +0x9B27,0x9B28,0x9B29,0x9B2A,0x9B2E,0x9B2F,0x9B32,0x9B44, +0x9B43,0x9B4F,0x9B4D,0x9B4E,0x9B51,0x9B58,0x9B74,0x9B93, +0x9B83,0x9B91,0x9B96,0x9B97,0x9B9F,0x9BA0,0x9BA8,0x9BB4, +0x9BC0,0x9BCA,0x9BB9,0x9BC6,0x9BCF,0x9BD1,0x9BD2,0x9BE3, +0x9BE2,0x9BE4,0x9BD4,0x9BE1,0x9C3A,0x9BF2,0x9BF1,0x9BF0, +0x9C15,0x9C14,0x9C09,0x9C13,0x9C0C,0x9C06,0x9C08,0x9C12, +0x9C0A,0x9C04,0x9C2E,0x9C1B,0x9C25,0x9C24,0x9C21,0x9C30, +0x9C47,0x9C32,0x9C46,0x9C3E,0x9C5A,0x9C60,0x9C67,0x9C76, +0x9C78,0x9CE7,0x9CEC,0x9CF0,0x9D09,0x9D08,0x9CEB,0x9D03, +0x9D06,0x9D2A,0x9D26,0x9DAF,0x9D23,0x9D1F,0x9D44,0x9D15, +0x9D12,0x9D41,0x9D3F,0x9D3E,0x9D46,0x9D48, +/* plane 1 ku 83 */ +0x9D5D,0x9D5E,0x9D64,0x9D51,0x9D50,0x9D59,0x9D72,0x9D89, +0x9D87,0x9DAB,0x9D6F,0x9D7A,0x9D9A,0x9DA4,0x9DA9,0x9DB2, +0x9DC4,0x9DC1,0x9DBB,0x9DB8,0x9DBA,0x9DC6,0x9DCF,0x9DC2, +0x9DD9,0x9DD3,0x9DF8,0x9DE6,0x9DED,0x9DEF,0x9DFD,0x9E1A, +0x9E1B,0x9E1E,0x9E75,0x9E79,0x9E7D,0x9E81,0x9E88,0x9E8B, +0x9E8C,0x9E92,0x9E95,0x9E91,0x9E9D,0x9EA5,0x9EA9,0x9EB8, +0x9EAA,0x9EAD,0x9761,0x9ECC,0x9ECE,0x9ECF,0x9ED0,0x9ED4, +0x9EDC,0x9EDE,0x9EDD,0x9EE0,0x9EE5,0x9EE8,0x9EEF,0x9EF4, +0x9EF6,0x9EF7,0x9EF9,0x9EFB,0x9EFC,0x9EFD,0x9F07,0x9F08, +0x76B7,0x9F15,0x9F21,0x9F2C,0x9F3E,0x9F4A,0x9F52,0x9F54, +0x9F63,0x9F5F,0x9F60,0x9F61,0x9F66,0x9F67,0x9F6C,0x9F6A, +0x9F77,0x9F72,0x9F76,0x9F95,0x9F9C,0x9FA0, +/* plane 1 ku 84 */ +0x582F,0x69C7,0x9059,0x7464,0x51DC,0x7199,0x5653,0x5DE2, +0x5E14,0x5E18,0x5E58,0x5E5E,0x5EBE,0xF928,0x5ECB,0x5EF9, +0x5F00,0x5F02,0x5F07,0x5F1D,0x5F23,0x5F34,0x5F36,0x5F3D, +0x5F40,0x5F45,0x5F54,0x5F58,0x5F64,0x5F67,0x5F7D,0x5F89, +0x5F9C,0x5FA7,0x5FAF,0x5FB5,0x5FB7,0x5FC9,0x5FDE,0x5FE1, +0x5FE9,0x600D,0x6014,0x6018,0x6033,0x6035,0x6047,0xFA3D, +0x609D,0x609E,0x60CB,0x60D4,0x60D5,0x60DD,0x60F8,0x611C, +0x612B,0x6130,0x6137,0xFA3E,0x618D,0xFA3F,0x61BC,0x61B9, +0xFA40,0x6222,0x623E,0x6243,0x6256,0x625A,0x626F,0x6285, +0x62C4,0x62D6,0x62FC,0x630A,0x6318,0x6339,0x6343,0x6365, +0x637C,0x63E5,0x63ED,0x63F5,0x6410,0x6414,0x6422,0x6479, +0x6451,0x6460,0x646D,0x64CE,0x64BE,0x64BF, +/* plane 1 ku 85 */ +0x64C4,0x64CA,0x64D0,0x64F7,0x64FB,0x6522,0x6529,0xFA41, +0x6567,0x659D,0xFA42,0x6600,0x6609,0x6615,0x661E,0x663A, +0x6622,0x6624,0x662B,0x6630,0x6631,0x6633,0x66FB,0x6648, +0x664C,0x0000,0x6659,0x665A,0x6661,0x6665,0x6673,0x6677, +0x6678,0x668D,0xFA43,0x66A0,0x66B2,0x66BB,0x66C6,0x66C8, +0x3B22,0x66DB,0x66E8,0x66FA,0x6713,0xF929,0x6733,0x6766, +0x6747,0x6748,0x677B,0x6781,0x6793,0x6798,0x679B,0x67BB, +0x67F9,0x67C0,0x67D7,0x67FC,0x6801,0x6852,0x681D,0x682C, +0x6831,0x685B,0x6872,0x6875,0xFA44,0x68A3,0x68A5,0x68B2, +0x68C8,0x68D0,0x68E8,0x68ED,0x68F0,0x68F1,0x68FC,0x690A, +0x6949,0x0000,0x6935,0x6942,0x6957,0x6963,0x6964,0x6968, +0x6980,0xFA14,0x69A5,0x69AD,0x69CF,0x3BB6, +/* plane 1 ku 86 */ +0x3BC3,0x69E2,0x69E9,0x69EA,0x69F5,0x69F6,0x6A0F,0x6A15, +0x0000,0x6A3B,0x6A3E,0x6A45,0x6A50,0x6A56,0x6A5B,0x6A6B, +0x6A73,0x0000,0x6A89,0x6A94,0x6A9D,0x6A9E,0x6AA5,0x6AE4, +0x6AE7,0x3C0F,0xF91D,0x6B1B,0x6B1E,0x6B2C,0x6B35,0x6B46, +0x6B56,0x6B60,0x6B65,0x6B67,0x6B77,0x6B82,0x6BA9,0x6BAD, +0xF970,0x6BCF,0x6BD6,0x6BD7,0x6BFF,0x6C05,0x6C10,0x6C33, +0x6C59,0x6C5C,0x6CAA,0x6C74,0x6C76,0x6C85,0x6C86,0x6C98, +0x6C9C,0x6CFB,0x6CC6,0x6CD4,0x6CE0,0x6CEB,0x6CEE,0x0000, +0x6D04,0x6D0E,0x6D2E,0x6D31,0x6D39,0x6D3F,0x6D58,0x6D65, +0xFA45,0x6D82,0x6D87,0x6D89,0x6D94,0x6DAA,0x6DAC,0x6DBF, +0x6DC4,0x6DD6,0x6DDA,0x6DDB,0x6DDD,0x6DFC,0xFA46,0x6E34, +0x6E44,0x6E5C,0x6E5E,0x6EAB,0x6EB1,0x6EC1, +/* plane 1 ku 87 */ +0x6EC7,0x6ECE,0x6F10,0x6F1A,0xFA47,0x6F2A,0x6F2F,0x6F33, +0x6F51,0x6F59,0x6F5E,0x6F61,0x6F62,0x6F7E,0x6F88,0x6F8C, +0x6F8D,0x6F94,0x6FA0,0x6FA7,0x6FB6,0x6FBC,0x6FC7,0x6FCA, +0x6FF9,0x6FF0,0x6FF5,0x7005,0x7006,0x7028,0x704A,0x705D, +0x705E,0x704E,0x7064,0x7075,0x7085,0x70A4,0x70AB,0x70B7, +0x70D4,0x70D8,0x70E4,0x710F,0x712B,0x711E,0x7120,0x712E, +0x7130,0x7146,0x7147,0x7151,0xFA48,0x7152,0x715C,0x7160, +0x7168,0xFA15,0x7185,0x7187,0x7192,0x71C1,0x71BA,0x71C4, +0x71FE,0x7200,0x7215,0x7255,0x7256,0x3E3F,0x728D,0x729B, +0x72BE,0x72C0,0x72FB,0x0000,0x7327,0x7328,0xFA16,0x7350, +0x7366,0x737C,0x7395,0x739F,0x73A0,0x73A2,0x73A6,0x73AB, +0x73C9,0x73CF,0x73D6,0x73D9,0x73E3,0x73E9, +/* plane 1 ku 88 */ +0x7407,0x740A,0x741A,0x741B,0xFA4A,0x7426,0x7428,0x742A, +0x742B,0x742C,0x742E,0x742F,0x7430,0x7444,0x7446,0x7447, +0x744B,0x7457,0x7462,0x746B,0x746D,0x7486,0x7487,0x7489, +0x7498,0x749C,0x749F,0x74A3,0x7490,0x74A6,0x74A8,0x74A9, +0x74B5,0x74BF,0x74C8,0x74C9,0x74DA,0x74FF,0x7501,0x7517, +0x752F,0x756F,0x7579,0x7592,0x3F72,0x75CE,0x75E4,0x7600, +0x7602,0x7608,0x7615,0x7616,0x7619,0x761E,0x762D,0x7635, +0x7643,0x764B,0x7664,0x7665,0x766D,0x766F,0x7671,0x7681, +0x769B,0x769D,0x769E,0x76A6,0x76AA,0x76B6,0x76C5,0x76CC, +0x76CE,0x76D4,0x76E6,0x76F1,0x76FC,0x770A,0x7719,0x7734, +0x7736,0x7746,0x774D,0x774E,0x775C,0x775F,0x7762,0x777A, +0x7780,0x7794,0x77AA,0x77E0,0x782D,0x0000, +/* plane 1 ku 89 */ +0x7843,0x784E,0x784F,0x7851,0x7868,0x786E,0xFA4B,0x78B0, +0x0000,0x78AD,0x78E4,0x78F2,0x7900,0x78F7,0x791C,0x792E, +0x7931,0x7934,0xFA4C,0xFA4D,0x7945,0x7946,0xFA4E,0xFA4F, +0xFA50,0x795C,0xFA51,0xFA19,0xFA1A,0x7979,0xFA52,0xFA53, +0xFA1B,0x7998,0x79B1,0x79B8,0x79C8,0x79CA,0x0000,0x79D4, +0x79DE,0x79EB,0x79ED,0x7A03,0xFA54,0x7A39,0x7A5D,0x7A6D, +0xFA55,0x7A85,0x7AA0,0x0000,0x7AB3,0x7ABB,0x7ACE,0x7AEB, +0x7AFD,0x7B12,0x7B2D,0x7B3B,0x7B47,0x7B4E,0x7B60,0x7B6D, +0x7B6F,0x7B72,0x7B9E,0xFA56,0x7BD7,0x7BD9,0x7C01,0x7C31, +0x7C1E,0x7C20,0x7C33,0x7C36,0x4264,0x0000,0x7C59,0x7C6D, +0x7C79,0x7C8F,0x7C94,0x7CA0,0x7CBC,0x7CD5,0x7CD9,0x7CDD, +0x7D07,0x7D08,0x7D13,0x7D1D,0x7D23,0x7D31, +/* plane 1 ku 90 */ +0x7D41,0x7D48,0x7D53,0x7D5C,0x7D7A,0x7D83,0x7D8B,0x7DA0, +0x7DA6,0x7DC2,0x7DCC,0x7DD6,0x7DE3,0xFA57,0x7E28,0x7E08, +0x7E11,0x7E15,0xFA59,0x7E47,0x7E52,0x7E61,0x7E8A,0x7E8D, +0x7F47,0xFA5A,0x7F91,0x7F97,0x7FBF,0x7FCE,0x7FDB,0x7FDF, +0x7FEC,0x7FEE,0x7FFA,0xFA5B,0x8014,0x8026,0x8035,0x8037, +0x803C,0x80CA,0x80D7,0x80E0,0x80F3,0x8118,0x814A,0x8160, +0x8167,0x8168,0x816D,0x81BB,0x81CA,0x81CF,0x81D7,0xFA5C, +0x4453,0x445B,0x8260,0x8274,0x0000,0x828E,0x82A1,0x82A3, +0x82A4,0x82A9,0x82AE,0x82B7,0x82BE,0x82BF,0x82C6,0x82D5, +0x82FD,0x82FE,0x8300,0x8301,0x8362,0x8322,0x832D,0x833A, +0x8343,0x8347,0x8351,0x8355,0x837D,0x8386,0x8392,0x8398, +0x83A7,0x83A9,0x83BF,0x83C0,0x83C7,0x83CF, +/* plane 1 ku 91 */ +0x83D1,0x83E1,0x83EA,0x8401,0x8406,0x840A,0xFA5F,0x8448, +0x845F,0x8470,0x8473,0x8485,0x849E,0x84AF,0x84B4,0x84BA, +0x84C0,0x84C2,0x0000,0x8532,0x851E,0x8523,0x852F,0x8559, +0x8564,0xFA1F,0x85AD,0x857A,0x858C,0x858F,0x85A2,0x85B0, +0x85CB,0x85CE,0x85ED,0x8612,0x85FF,0x8604,0x8605,0x8610, +0x0000,0x8618,0x8629,0x8638,0x8657,0x865B,0xF936,0x8662, +0x459D,0x866C,0x8675,0x8698,0x86B8,0x86FA,0x86FC,0x86FD, +0x870B,0x8771,0x8787,0x8788,0x87AC,0x87AD,0x87B5,0x45EA, +0x87D6,0x87EC,0x8806,0x880A,0x8810,0x8814,0x881F,0x8898, +0x88AA,0x88CA,0x88CE,0x0000,0x88F5,0x891C,0xFA60,0x8918, +0x8919,0x891A,0x8927,0x8930,0x8932,0x8939,0x8940,0x8994, +0xFA61,0x89D4,0x89E5,0x89F6,0x8A12,0x8A15, +/* plane 1 ku 92 */ +0x8A22,0x8A37,0x8A47,0x8A4E,0x8A5D,0x8A61,0x8A75,0x8A79, +0x8AA7,0x8AD0,0x8ADF,0x8AF4,0x8AF6,0xFA22,0xFA62,0xFA63, +0x8B46,0x8B54,0x8B59,0x8B69,0x8B9D,0x8C49,0x8C68,0xFA64, +0x8CE1,0x8CF4,0x8CF8,0x8CFE,0xFA65,0x8D12,0x8D1B,0x8DAF, +0x8DCE,0x8DD1,0x8DD7,0x8E20,0x8E23,0x8E3D,0x8E70,0x8E7B, +0x0000,0x8EC0,0x4844,0x8EFA,0x8F1E,0x8F2D,0x8F36,0x8F54, +0x0000,0x8FA6,0x8FB5,0x8FE4,0x8FE8,0x8FEE,0x9008,0x902D, +0xFA67,0x9088,0x9095,0x9097,0x9099,0x909B,0x90A2,0x90B3, +0x90BE,0x90C4,0x90C5,0x90C7,0x90D7,0x90DD,0x90DE,0x90EF, +0x90F4,0xFA26,0x9114,0x9115,0x9116,0x9122,0x9123,0x9127, +0x912F,0x9131,0x9134,0x913D,0x9148,0x915B,0x9183,0x919E, +0x91AC,0x91B1,0x91BC,0x91D7,0x91FB,0x91E4, +/* plane 1 ku 93 */ +0x91E5,0x91ED,0x91F1,0x9207,0x9210,0x9238,0x9239,0x923A, +0x923C,0x9240,0x9243,0x924F,0x9278,0x9288,0x92C2,0x92CB, +0x92CC,0x92D3,0x92E0,0x92FF,0x9304,0x931F,0x9321,0x9325, +0x9348,0x9349,0x934A,0x9364,0x9365,0x936A,0x9370,0x939B, +0x93A3,0x93BA,0x93C6,0x93DE,0x93DF,0x9404,0x93FD,0x9433, +0x944A,0x9463,0x946B,0x9471,0x9472,0x958E,0x959F,0x95A6, +0x95A9,0x95AC,0x95B6,0x95BD,0x95CB,0x95D0,0x95D3,0x49B0, +0x95DA,0x95DE,0x9658,0x9684,0xF9DC,0x969D,0x96A4,0x96A5, +0x96D2,0x96DE,0xFA68,0x96E9,0x96EF,0x9733,0x973B,0x974D, +0x974E,0x974F,0x975A,0x976E,0x9773,0x9795,0x97AE,0x97BA, +0x97C1,0x97C9,0x97DE,0x97DB,0x97F4,0xFA69,0x980A,0x981E, +0x982B,0x9830,0xFA6A,0x9852,0x9853,0x9856, +/* plane 1 ku 94 */ +0x9857,0x9859,0x985A,0xF9D0,0x9865,0x986C,0x98BA,0x98C8, +0x98E7,0x9958,0x999E,0x9A02,0x9A03,0x9A24,0x9A2D,0x9A2E, +0x9A38,0x9A4A,0x9A4E,0x9A52,0x9AB6,0x9AC1,0x9AC3,0x9ACE, +0x9AD6,0x9AF9,0x9B02,0x9B08,0x9B20,0x4C17,0x9B2D,0x9B5E, +0x9B79,0x9B66,0x9B72,0x9B75,0x9B84,0x9B8A,0x9B8F,0x9B9E, +0x9BA7,0x9BC1,0x9BCE,0x9BE5,0x9BF8,0x9BFD,0x9C00,0x9C23, +0x9C41,0x9C4F,0x9C50,0x9C53,0x9C63,0x9C65,0x9C77,0x9D1D, +0x9D1E,0x9D43,0x9D47,0x9D52,0x9D63,0x9D70,0x9D7C,0x9D8A, +0x9D96,0x9DC0,0x9DAC,0x9DBC,0x9DD7,0x0000,0x9DE7,0x9E07, +0x9E15,0x9E7C,0x9E9E,0x9EA4,0x9EAC,0x9EAF,0x9EB4,0x9EB5, +0x9EC3,0x9ED1,0x9F10,0x9F39,0x9F57,0x9F90,0x9F94,0x9F97, +0x9FA2,0x59F8,0x5C5B,0x5E77,0x7626,0x7E6B, +/* plane 2 ku 1 */ +0x0000,0x4E02,0x4E0F,0x4E12,0x4E29,0x4E2B,0x4E2E,0x4E40, +0x4E47,0x4E48,0x0000,0x4E51,0x3406,0x0000,0x4E5A,0x4E69, +0x4E9D,0x342C,0x342E,0x4EB9,0x4EBB,0x0000,0x4EBC,0x4EC3, +0x4EC8,0x4ED0,0x4EEB,0x4EDA,0x4EF1,0x4EF5,0x4F00,0x4F16, +0x4F64,0x4F37,0x4F3E,0x4F54,0x4F58,0x0000,0x4F77,0x4F78, +0x4F7A,0x4F7D,0x4F82,0x4F85,0x4F92,0x4F9A,0x4FE6,0x4FB2, +0x4FBE,0x4FC5,0x4FCB,0x4FCF,0x4FD2,0x346A,0x4FF2,0x5000, +0x5010,0x5013,0x501C,0x501E,0x5022,0x3468,0x5042,0x5046, +0x504E,0x5053,0x5057,0x5063,0x5066,0x506A,0x5070,0x50A3, +0x5088,0x5092,0x5093,0x5095,0x5096,0x509C,0x50AA,0x0000, +0x50B1,0x50BA,0x50BB,0x50C4,0x50C7,0x50F3,0x0000,0x50CE, +0x0000,0x50D4,0x50D9,0x50E1,0x50E9,0x3492, +/* plane 2 ku 8 */ +0x5B96,0x5BAC,0x3761,0x5BC0,0x3762,0x5BCE,0x5BD6,0x376C, +0x376B,0x5BF1,0x5BFD,0x3775,0x5C03,0x5C29,0x5C30,0x0000, +0x5C5F,0x5C63,0x5C67,0x5C68,0x5C69,0x5C70,0x0000,0x0000, +0x5C7C,0x0000,0x0000,0x5C88,0x5C8A,0x37C1,0x0000,0x0000, +0x5CA0,0x5CA2,0x5CA6,0x5CA7,0x0000,0x5CAD,0x5CB5,0x0000, +0x5CC9,0x0000,0x0000,0x5D06,0x5D10,0x5D2B,0x5D1D,0x5D20, +0x5D24,0x5D26,0x5D31,0x5D39,0x5D42,0x37E8,0x5D61,0x5D6A, +0x37F4,0x5D70,0x0000,0x37FD,0x5D88,0x3800,0x5D92,0x5D94, +0x5D97,0x5D99,0x5DB0,0x5DB2,0x5DB4,0x0000,0x5DB9,0x5DD1, +0x5DD7,0x5DD8,0x5DE0,0x0000,0x5DE4,0x5DE9,0x382F,0x5E00, +0x3836,0x5E12,0x5E15,0x3840,0x5E1F,0x5E2E,0x5E3E,0x5E49, +0x385C,0x5E56,0x3861,0x5E6B,0x5E6C,0x5E6D, +/* plane 2 ku 3 */ +0x5108,0x0000,0x5117,0x511B,0x0000,0x5160,0x0000,0x5173, +0x5183,0x518B,0x34BC,0x5198,0x51A3,0x51AD,0x34C7,0x51BC, +0x0000,0x0000,0x51F3,0x51F4,0x5202,0x5212,0x5216,0x0000, +0x5255,0x525C,0x526C,0x5277,0x5284,0x5282,0x0000,0x5298, +0x0000,0x52A4,0x52A6,0x52AF,0x52BA,0x52BB,0x52CA,0x351F, +0x52D1,0x0000,0x52F7,0x530A,0x530B,0x5324,0x5335,0x533E, +0x5342,0x0000,0x0000,0x5367,0x536C,0x537A,0x53A4,0x53B4, +0x0000,0x53B7,0x53C0,0x0000,0x355D,0x355E,0x53D5,0x53DA, +0x3563,0x53F4,0x53F5,0x5455,0x5424,0x5428,0x356E,0x5443, +0x5462,0x5466,0x546C,0x548A,0x548D,0x5495,0x54A0,0x54A6, +0x54AD,0x54AE,0x54B7,0x54BA,0x54BF,0x54C3,0x0000,0x54EC, +0x54EF,0x54F1,0x54F3,0x5500,0x5501,0x5509, +/* plane 2 ku 4 */ +0x553C,0x5541,0x35A6,0x5547,0x554A,0x35A8,0x5560,0x5561, +0x5564,0x0000,0x557D,0x5582,0x5588,0x5591,0x35C5,0x55D2, +0x0000,0x0000,0x55BF,0x55C9,0x55CC,0x55D1,0x55DD,0x35DA, +0x55E2,0x0000,0x55E9,0x5628,0x0000,0x5607,0x5610,0x5630, +0x5637,0x35F4,0x563D,0x563F,0x5640,0x5647,0x565E,0x5660, +0x566D,0x3605,0x5688,0x568C,0x5695,0x569A,0x569D,0x56A8, +0x56AD,0x56B2,0x56C5,0x56CD,0x56DF,0x56E8,0x56F6,0x56F7, +0x0000,0x5715,0x5723,0x0000,0x5729,0x0000,0x5745,0x5746, +0x574C,0x574D,0x0000,0x5768,0x576F,0x5773,0x5774,0x5775, +0x577B,0x0000,0x0000,0x57AC,0x579A,0x579D,0x579E,0x57A8, +0x57D7,0x0000,0x57CC,0x0000,0x0000,0x57DE,0x57E6,0x57F0, +0x364A,0x57F8,0x57FB,0x57FD,0x5804,0x581E, +/* plane 2 ku 5 */ +0x5820,0x5827,0x5832,0x5839,0x0000,0x5849,0x584C,0x5867, +0x588A,0x588B,0x588D,0x588F,0x5890,0x5894,0x589D,0x58AA, +0x58B1,0x0000,0x58C3,0x58CD,0x58E2,0x58F3,0x58F4,0x5905, +0x5906,0x590B,0x590D,0x5914,0x5924,0x0000,0x3691,0x593D, +0x3699,0x5946,0x3696,0x0000,0x595B,0x595F,0x0000,0x5975, +0x5976,0x597C,0x599F,0x59AE,0x59BC,0x59C8,0x59CD,0x59DE, +0x59E3,0x59E4,0x59E7,0x59EE,0x0000,0x0000,0x36CF,0x5A0C, +0x5A0D,0x5A17,0x5A27,0x5A2D,0x5A55,0x5A65,0x5A7A,0x5A8B, +0x5A9C,0x5A9F,0x5AA0,0x5AA2,0x5AB1,0x5AB3,0x5AB5,0x5ABA, +0x5ABF,0x5ADA,0x5ADC,0x5AE0,0x5AE5,0x5AF0,0x5AEE,0x5AF5, +0x5B00,0x5B08,0x5B17,0x5B34,0x5B2D,0x5B4C,0x5B52,0x5B68, +0x5B6F,0x5B7C,0x5B7F,0x5B81,0x5B84,0x0000, +/* plane 2 ku 12 */ +0x5E6E,0x0000,0x5EA5,0x5EAA,0x5EAC,0x5EB9,0x5EBF,0x5EC6, +0x5ED2,0x5ED9,0x0000,0x5EFD,0x5F08,0x5F0E,0x5F1C,0x0000, +0x5F1E,0x5F47,0x5F63,0x5F72,0x5F7E,0x5F8F,0x5FA2,0x5FA4, +0x5FB8,0x5FC4,0x38FA,0x5FC7,0x5FCB,0x5FD2,0x5FD3,0x5FD4, +0x5FE2,0x5FEE,0x5FEF,0x5FF3,0x5FFC,0x3917,0x6017,0x6022, +0x6024,0x391A,0x604C,0x607F,0x608A,0x6095,0x60A8,0x0000, +0x60B0,0x60B1,0x60BE,0x60C8,0x60D9,0x60DB,0x60EE,0x60F2, +0x60F5,0x6110,0x6112,0x6113,0x6119,0x611E,0x613A,0x396F, +0x6141,0x6146,0x6160,0x617C,0x0000,0x6192,0x6193,0x6197, +0x6198,0x61A5,0x61A8,0x61AD,0x0000,0x61D5,0x61DD,0x61DF, +0x61F5,0x0000,0x6215,0x6223,0x6229,0x6246,0x624C,0x6251, +0x6252,0x6261,0x6264,0x627B,0x626D,0x6273, +/* plane 2 ku 13 */ +0x6299,0x62A6,0x62D5,0x0000,0x62FD,0x6303,0x630D,0x6310, +0x0000,0x0000,0x6332,0x6335,0x633B,0x633C,0x6341,0x6344, +0x634E,0x0000,0x6359,0x0000,0x0000,0x636C,0x6384,0x6399, +0x0000,0x6394,0x63BD,0x63F7,0x63D4,0x63D5,0x63DC,0x63E0, +0x63EB,0x63EC,0x63F2,0x6409,0x641E,0x6425,0x6429,0x642F, +0x645A,0x645B,0x645D,0x6473,0x647D,0x6487,0x6491,0x649D, +0x649F,0x64CB,0x64CC,0x64D5,0x64D7,0x0000,0x64E4,0x64E5, +0x64FF,0x6504,0x3A6E,0x650F,0x6514,0x6516,0x3A73,0x651E, +0x6532,0x6544,0x6554,0x656B,0x657A,0x6581,0x6584,0x6585, +0x658A,0x65B2,0x65B5,0x65B8,0x65BF,0x65C2,0x65C9,0x65D4, +0x3AD6,0x65F2,0x65F9,0x65FC,0x6604,0x6608,0x6621,0x662A, +0x6645,0x6651,0x664E,0x3AEA,0x0000,0x6657, +/* plane 2 ku 14 */ +0x665B,0x6663,0x0000,0x0000,0x666A,0x666B,0x666C,0x666D, +0x667B,0x6680,0x6690,0x6692,0x6699,0x3B0E,0x66AD,0x66B1, +0x66B5,0x3B1A,0x66BF,0x3B1C,0x66EC,0x3AD7,0x6701,0x6705, +0x6712,0x0000,0x6719,0x0000,0x0000,0x674C,0x674D,0x6754, +0x675D,0x0000,0x0000,0x0000,0x6774,0x6776,0x0000,0x6792, +0x0000,0x8363,0x6810,0x67B0,0x67B2,0x67C3,0x67C8,0x67D2, +0x67D9,0x67DB,0x67F0,0x67F7,0x0000,0x0000,0x0000,0x6818, +0x681F,0x682D,0x0000,0x6833,0x683B,0x683E,0x6844,0x6845, +0x6849,0x684C,0x6855,0x6857,0x3B77,0x686B,0x686E,0x687A, +0x687C,0x6882,0x6890,0x6896,0x3B6D,0x6898,0x6899,0x689A, +0x689C,0x68AA,0x68AB,0x68B4,0x68BB,0x68FB,0x0000,0x0000, +0xFA13,0x68C3,0x68C5,0x68CC,0x68CF,0x68D6, +/* plane 2 ku 15 */ +0x68D9,0x68E4,0x68E5,0x68EC,0x68F7,0x6903,0x6907,0x3B87, +0x3B88,0x0000,0x693B,0x3B8D,0x6946,0x6969,0x696C,0x6972, +0x697A,0x697F,0x6992,0x3BA4,0x6996,0x6998,0x69A6,0x69B0, +0x69B7,0x69BA,0x69BC,0x69C0,0x69D1,0x69D6,0x0000,0x0000, +0x6A30,0x0000,0x0000,0x69E3,0x69EE,0x69EF,0x69F3,0x3BCD, +0x69F4,0x69FE,0x6A11,0x6A1A,0x6A1D,0x0000,0x6A32,0x6A33, +0x6A34,0x6A3F,0x6A46,0x6A49,0x6A7A,0x6A4E,0x6A52,0x6A64, +0x0000,0x6A7E,0x6A83,0x6A8B,0x3BF0,0x6A91,0x6A9F,0x6AA1, +0x0000,0x6AAB,0x6ABD,0x6AC6,0x6AD4,0x6AD0,0x6ADC,0x6ADD, +0x0000,0x0000,0x6AEC,0x6AF1,0x6AF2,0x6AF3,0x6AFD,0x0000, +0x6B0B,0x6B0F,0x6B10,0x6B11,0x0000,0x6B17,0x3C26,0x6B2F, +0x6B4A,0x6B58,0x6B6C,0x6B75,0x6B7A,0x6B81, +/* plane 2 ku 78 */ +0x6B9B,0x6BAE,0x0000,0x6BBD,0x6BBE,0x6BC7,0x6BC8,0x6BC9, +0x6BDA,0x6BE6,0x6BE7,0x6BEE,0x6BF1,0x6C02,0x6C0A,0x6C0E, +0x6C35,0x6C36,0x6C3A,0x0000,0x6C3F,0x6C4D,0x6C5B,0x6C6D, +0x6C84,0x6C89,0x3CC3,0x6C94,0x6C95,0x6C97,0x6CAD,0x6CC2, +0x6CD0,0x3CD2,0x6CD6,0x6CDA,0x6CDC,0x6CE9,0x6CEC,0x6CED, +0x0000,0x6D00,0x6D0A,0x6D24,0x6D26,0x6D27,0x6C67,0x6D2F, +0x6D3C,0x6D5B,0x6D5E,0x6D60,0x6D70,0x6D80,0x6D81,0x6D8A, +0x6D8D,0x6D91,0x6D98,0x0000,0x6E17,0x0000,0x0000,0x0000, +0x6DAB,0x6DAE,0x6DB4,0x6DC2,0x6D34,0x6DC8,0x6DCE,0x6DCF, +0x6DD0,0x6DDF,0x6DE9,0x6DF6,0x6E36,0x6E1E,0x6E22,0x6E27, +0x3D11,0x6E32,0x6E3C,0x6E48,0x6E49,0x6E4B,0x6E4C,0x6E4F, +0x6E51,0x6E53,0x6E54,0x6E57,0x6E63,0x3D1E, +/* plane 2 ku 79 */ +0x6E93,0x6EA7,0x6EB4,0x6EBF,0x6EC3,0x6ECA,0x6ED9,0x6F35, +0x6EEB,0x6EF9,0x6EFB,0x6F0A,0x6F0C,0x6F18,0x6F25,0x6F36, +0x6F3C,0x0000,0x6F52,0x6F57,0x6F5A,0x6F60,0x6F68,0x6F98, +0x6F7D,0x6F90,0x6F96,0x6FBE,0x6F9F,0x6FA5,0x6FAF,0x3D64, +0x6FB5,0x6FC8,0x6FC9,0x6FDA,0x6FDE,0x6FE9,0x0000,0x6FFC, +0x7000,0x7007,0x700A,0x7023,0x0000,0x7039,0x703A,0x703C, +0x7043,0x7047,0x704B,0x3D9A,0x7054,0x7065,0x7069,0x706C, +0x706E,0x7076,0x707E,0x7081,0x7086,0x7095,0x7097,0x70BB, +0x0000,0x709F,0x70B1,0x0000,0x70EC,0x70CA,0x70D1,0x70D3, +0x70DC,0x7103,0x7104,0x7106,0x7107,0x7108,0x710C,0x3DC0, +0x712F,0x7131,0x7150,0x714A,0x7153,0x715E,0x3DD4,0x7196, +0x7180,0x719B,0x71A0,0x71A2,0x71AE,0x71AF, +/* plane 2 ku 80 */ +0x71B3,0x0000,0x71CB,0x71D3,0x71D9,0x71DC,0x7207,0x3E05, +0xFA49,0x722B,0x7234,0x7238,0x7239,0x4E2C,0x7242,0x7253, +0x7257,0x7263,0x0000,0x726E,0x726F,0x7278,0x727F,0x728E, +0x0000,0x72AD,0x72AE,0x72B0,0x72B1,0x72C1,0x3E60,0x72CC, +0x3E66,0x3E68,0x72F3,0x72FA,0x7307,0x7312,0x7318,0x7319, +0x3E83,0x7339,0x732C,0x7331,0x7333,0x733D,0x7352,0x3E94, +0x736B,0x736C,0x0000,0x736E,0x736F,0x7371,0x7377,0x7381, +0x7385,0x738A,0x7394,0x7398,0x739C,0x739E,0x73A5,0x73A8, +0x73B5,0x73B7,0x73B9,0x73BC,0x73BF,0x73C5,0x73CB,0x73E1, +0x73E7,0x73F9,0x7413,0x73FA,0x7401,0x7424,0x7431,0x7439, +0x7453,0x7440,0x7443,0x744D,0x7452,0x745D,0x7471,0x7481, +0x7485,0x7488,0x0000,0x7492,0x7497,0x7499, +/* plane 2 ku 81 */ +0x74A0,0x74A1,0x74A5,0x74AA,0x74AB,0x74B9,0x74BB,0x74BA, +0x74D6,0x74D8,0x74DE,0x74EF,0x74EB,0x0000,0x74FA,0x0000, +0x7520,0x7524,0x752A,0x3F57,0x0000,0x753D,0x753E,0x7540, +0x7548,0x754E,0x7550,0x7552,0x756C,0x7572,0x7571,0x757A, +0x757D,0x757E,0x7581,0x0000,0x758C,0x3F75,0x75A2,0x3F77, +0x75B0,0x75B7,0x75BF,0x75C0,0x75C6,0x75CF,0x75D3,0x75DD, +0x75DF,0x75E0,0x75E7,0x75EC,0x75EE,0x75F1,0x75F9,0x7603, +0x7618,0x7607,0x760F,0x3FAE,0x0000,0x7613,0x761B,0x761C, +0x0000,0x7625,0x7628,0x763C,0x7633,0x0000,0x3FC9,0x7641, +0x0000,0x7649,0x7655,0x3FD7,0x766E,0x7695,0x769C,0x76A1, +0x76A0,0x76A7,0x76A8,0x76AF,0x0000,0x76C9,0x0000,0x76E8, +0x76EC,0x0000,0x7717,0x771A,0x772D,0x7735, +/* plane 2 ku 82 */ +0x0000,0x4039,0x0000,0x0000,0x7758,0x7760,0x776A,0x0000, +0x7772,0x777C,0x777D,0x0000,0x4058,0x779A,0x779F,0x77A2, +0x77A4,0x77A9,0x77DE,0x77DF,0x77E4,0x77E6,0x77EA,0x77EC, +0x4093,0x77F0,0x77F4,0x77FB,0x0000,0x7805,0x7806,0x7809, +0x780D,0x7819,0x7821,0x782C,0x7847,0x7864,0x786A,0x0000, +0x788A,0x7894,0x78A4,0x789D,0x789E,0x789F,0x78BB,0x78C8, +0x78CC,0x78CE,0x78D5,0x78E0,0x78E1,0x78E6,0x78F9,0x78FA, +0x78FB,0x78FE,0x0000,0x7910,0x791B,0x7930,0x7925,0x793B, +0x794A,0x7958,0x795B,0x4105,0x7967,0x7972,0x7994,0x7995, +0x7996,0x799B,0x79A1,0x79A9,0x79B4,0x79BB,0x79C2,0x79C7, +0x79CC,0x79CD,0x79D6,0x4148,0x0000,0x0000,0x414F,0x7A0A, +0x7A11,0x7A15,0x7A1B,0x7A1E,0x4163,0x7A2D, +/* plane 2 ku 83 */ +0x7A38,0x7A47,0x7A4C,0x7A56,0x7A59,0x7A5C,0x7A5F,0x7A60, +0x7A67,0x7A6A,0x7A75,0x7A78,0x7A82,0x7A8A,0x7A90,0x7AA3, +0x7AAC,0x0000,0x41B4,0x7AB9,0x7ABC,0x7ABE,0x41BF,0x7ACC, +0x7AD1,0x7AE7,0x7AE8,0x7AF4,0x0000,0x0000,0x7B07,0x0000, +0x7B3D,0x7B27,0x7B2A,0x7B2E,0x7B2F,0x7B31,0x41E6,0x41F3, +0x7B7F,0x7B41,0x41EE,0x7B55,0x7B79,0x7B64,0x7B66,0x7B69, +0x7B73,0x0000,0x4207,0x7B90,0x7B91,0x7B9B,0x420E,0x7BAF, +0x7BB5,0x7BBC,0x7BC5,0x7BCA,0x0000,0x0000,0x7BD4,0x7BD6, +0x7BDA,0x7BEA,0x7BF0,0x7C03,0x7C0B,0x7C0E,0x7C0F,0x7C26, +0x7C45,0x7C4A,0x7C51,0x7C57,0x7C5E,0x7C61,0x7C69,0x7C6E, +0x7C6F,0x7C70,0x0000,0x0000,0x0000,0x7CA6,0x0000,0x7CB6, +0x7CB7,0x7CBF,0x0000,0x7CC4,0x0000,0x7CC8, +/* plane 2 ku 84 */ +0x7CCD,0x0000,0x7CD7,0x0000,0x7CE6,0x7CEB,0x0000,0x7CF5, +0x7D03,0x7D09,0x42C6,0x7D12,0x7D1E,0x0000,0x0000,0x7D3D, +0x7D3E,0x7D40,0x7D47,0x0000,0x0000,0x42D6,0x7D59,0x7D5A, +0x7D6A,0x7D70,0x42DD,0x7D7F,0x0000,0x7D86,0x7D88,0x7D8C, +0x7D97,0x0000,0x7D9D,0x7DA7,0x7DAA,0x7DB6,0x7DB7,0x7DC0, +0x7DD7,0x7DD9,0x7DE6,0x7DF1,0x7DF9,0x4302,0x0000,0xFA58, +0x7E10,0x7E17,0x7E1D,0x7E20,0x7E27,0x7E2C,0x7E45,0x7E73, +0x7E75,0x7E7E,0x7E86,0x7E87,0x432B,0x7E91,0x7E98,0x7E9A, +0x4343,0x7F3C,0x7F3B,0x7F3E,0x7F43,0x7F44,0x7F4F,0x34C1, +0x0000,0x7F52,0x0000,0x7F61,0x7F63,0x7F64,0x7F6D,0x7F7D, +0x7F7E,0x0000,0x7F90,0x517B,0x0000,0x7F96,0x7F9C,0x7FAD, +0x0000,0x7FC3,0x7FCF,0x7FE3,0x7FE5,0x7FEF, +/* plane 2 ku 85 */ +0x7FF2,0x8002,0x800A,0x8008,0x800E,0x8011,0x8016,0x8024, +0x802C,0x8030,0x8043,0x8066,0x8071,0x8075,0x807B,0x8099, +0x809C,0x80A4,0x80A7,0x80B8,0x0000,0x80C5,0x80D5,0x80D8, +0x80E6,0x0000,0x810D,0x80F5,0x80FB,0x43EE,0x8135,0x8116, +0x811E,0x43F0,0x8124,0x8127,0x812C,0x0000,0x813D,0x4408, +0x8169,0x4417,0x8181,0x441C,0x8184,0x8185,0x4422,0x8198, +0x81B2,0x81C1,0x81C3,0x81D6,0x81DB,0x0000,0x81E4,0x0000, +0x81EC,0x0000,0x81FD,0x81FF,0x0000,0x8204,0x0000,0x8219, +0x8221,0x8222,0x0000,0x8232,0x8234,0x823C,0x8246,0x8249, +0x8245,0x0000,0x824B,0x4476,0x824F,0x447A,0x8257,0x0000, +0x825C,0x8263,0x0000,0xFA5D,0xFA5E,0x8279,0x4491,0x827D, +0x827F,0x8283,0x828A,0x8293,0x82A7,0x82A8, +/* plane 2 ku 86 */ +0x82B2,0x82B4,0x82BA,0x82BC,0x82E2,0x82E8,0x82F7,0x8307, +0x8308,0x830C,0x8354,0x831B,0x831D,0x8330,0x833C,0x8344, +0x8357,0x44BE,0x837F,0x44D4,0x44B3,0x838D,0x8394,0x8395, +0x839B,0x839D,0x83C9,0x83D0,0x83D4,0x83DD,0x83E5,0x83F9, +0x840F,0x8411,0x8415,0x0000,0x8417,0x8439,0x844A,0x844F, +0x8451,0x8452,0x8459,0x845A,0x845C,0x0000,0x8465,0x8476, +0x8478,0x847C,0x8481,0x450D,0x84DC,0x8497,0x84A6,0x84BE, +0x4508,0x84CE,0x84CF,0x84D3,0x0000,0x84E7,0x84EA,0x84EF, +0x84F0,0x84F1,0x84FA,0x84FD,0x850C,0x851B,0x8524,0x8525, +0x852B,0x8534,0x854F,0x856F,0x4525,0x4543,0x853E,0x8551, +0x8553,0x855E,0x8561,0x8562,0x0000,0x857B,0x857D,0x857F, +0x8581,0x8586,0x8593,0x859D,0x859F,0x0000, +/* plane 2 ku 87 */ +0x0000,0x0000,0x85B7,0x85BC,0x85C7,0x85CA,0x85D8,0x85D9, +0x85DF,0x85E1,0x85E6,0x85F6,0x8600,0x8611,0x861E,0x8621, +0x8624,0x8627,0x0000,0x8639,0x863C,0x0000,0x8640,0xFA20, +0x8653,0x8656,0x866F,0x8677,0x867A,0x8687,0x8689,0x868D, +0x8691,0x869C,0x869D,0x86A8,0xFA21,0x86B1,0x86B3,0x86C1, +0x86C3,0x86D1,0x86D5,0x86D7,0x86E3,0x86E6,0x45B8,0x8705, +0x8707,0x870E,0x8710,0x8713,0x8719,0x871F,0x8721,0x8723, +0x8731,0x873A,0x873E,0x8740,0x8743,0x8751,0x8758,0x8764, +0x8765,0x8772,0x877C,0x0000,0x0000,0x87A7,0x8789,0x878B, +0x8793,0x87A0,0x0000,0x45E5,0x87BE,0x0000,0x87C1,0x87CE, +0x87F5,0x87DF,0x0000,0x87E3,0x87E5,0x87E6,0x87EA,0x87EB, +0x87ED,0x8801,0x8803,0x880B,0x8813,0x8828, +/* plane 2 ku 88 */ +0x882E,0x8832,0x883C,0x460F,0x884A,0x8858,0x885F,0x8864, +0x0000,0x0000,0x8869,0x0000,0x886F,0x88A0,0x88BC,0x88BD, +0x88BE,0x88C0,0x88D2,0x0000,0x88D1,0x88D3,0x88DB,0x88F0, +0x88F1,0x4641,0x8901,0x0000,0x8937,0x0000,0x8942,0x8945, +0x8949,0x0000,0x4665,0x8962,0x8980,0x8989,0x8990,0x899F, +0x89B0,0x89B7,0x89D6,0x89D8,0x89EB,0x46A1,0x89F1,0x89F3, +0x89FD,0x89FF,0x46AF,0x8A11,0x8A14,0x0000,0x8A21,0x8A35, +0x8A3E,0x8A45,0x8A4D,0x8A58,0x8AAE,0x8A90,0x8AB7,0x8ABE, +0x8AD7,0x8AFC,0x0000,0x8B0A,0x8B05,0x8B0D,0x8B1C,0x8B1F, +0x8B2D,0x8B43,0x470C,0x8B51,0x8B5E,0x8B76,0x8B7F,0x8B81, +0x8B8B,0x8B94,0x8B95,0x8B9C,0x8B9E,0x8C39,0x0000,0x8C3D, +0x0000,0x0000,0x8C45,0x8C47,0x8C4F,0x8C54, +/* plane 2 ku 89 */ +0x8C57,0x8C69,0x8C6D,0x8C73,0x0000,0x8C93,0x8C92,0x8C99, +0x4764,0x8C9B,0x8CA4,0x8CD6,0x8CD5,0x8CD9,0x0000,0x8CF0, +0x8CF1,0x0000,0x8D09,0x8D0E,0x8D6C,0x8D84,0x8D95,0x8DA6, +0x0000,0x8DC6,0x8DC8,0x8DD9,0x8DEC,0x8E0C,0x47FD,0x8DFD, +0x8E06,0x0000,0x8E14,0x8E16,0x8E21,0x8E22,0x8E27,0x0000, +0x4816,0x8E36,0x8E39,0x8E4B,0x8E54,0x8E62,0x8E6C,0x8E6D, +0x8E6F,0x8E98,0x8E9E,0x8EAE,0x8EB3,0x8EB5,0x8EB6,0x8EBB, +0x0000,0x8ED1,0x8ED4,0x484E,0x8EF9,0x0000,0x8F00,0x8F08, +0x8F17,0x8F2B,0x8F40,0x8F4A,0x8F58,0x0000,0x8FA4,0x8FB4, +0xFA66,0x8FB6,0x0000,0x8FC1,0x8FC6,0xFA24,0x8FCA,0x8FCD, +0x8FD3,0x8FD5,0x8FE0,0x8FF1,0x8FF5,0x8FFB,0x9002,0x900C, +0x9037,0x0000,0x9043,0x9044,0x905D,0x0000, +/* plane 2 ku 90 */ +0x0000,0x9085,0x908C,0x9090,0x961D,0x90A1,0x48B5,0x90B0, +0x90B6,0x90C3,0x90C8,0x0000,0x90DC,0x90DF,0x0000,0x90F6, +0x90F2,0x9100,0x90EB,0x90FE,0x90FF,0x9104,0x9106,0x9118, +0x911C,0x911E,0x9137,0x9139,0x913A,0x9146,0x9147,0x9157, +0x9159,0x9161,0x9164,0x9174,0x9179,0x9185,0x918E,0x91A8, +0x91AE,0x91B3,0x91B6,0x91C3,0x91C4,0x91DA,0x0000,0x0000, +0x91EC,0x91EE,0x9201,0x920A,0x9216,0x9217,0x0000,0x9233, +0x9242,0x9247,0x924A,0x924E,0x9251,0x9256,0x9259,0x9260, +0x9261,0x9265,0x9267,0x9268,0x0000,0x0000,0x927C,0x927D, +0x927F,0x9289,0x928D,0x9297,0x9299,0x929F,0x92A7,0x92AB, +0x0000,0x0000,0x92B2,0x92BF,0x92C0,0x92C6,0x92CE,0x92D0, +0x92D7,0x92D9,0x92E5,0x92E7,0x9311,0x0000, +/* plane 2 ku 91 */ +0x0000,0x92F7,0x92F9,0x92FB,0x9302,0x930D,0x9315,0x931D, +0x931E,0x9327,0x9329,0x0000,0x0000,0x9347,0x9351,0x9357, +0x935A,0x936B,0x9371,0x9373,0x93A1,0x0000,0x0000,0x9388, +0x938B,0x938F,0x939E,0x93F5,0x0000,0x0000,0x93F1,0x93C1, +0x93C7,0x93DC,0x93E2,0x93E7,0x9409,0x940F,0x9416,0x9417, +0x93FB,0x9432,0x9434,0x943B,0x9445,0x0000,0x0000,0x946D, +0x946F,0x9578,0x9579,0x9586,0x958C,0x958D,0x0000,0x95AB, +0x95B4,0x0000,0x95C8,0x0000,0x0000,0x962C,0x9633,0x9634, +0x0000,0x963C,0x9641,0x9661,0x0000,0x9682,0x0000,0x969A, +0x0000,0x49E7,0x96A9,0x96AF,0x96B3,0x96BA,0x96BD,0x49FA, +0x0000,0x96D8,0x96DA,0x96DD,0x4A04,0x9714,0x9723,0x4A29, +0x9736,0x9741,0x9747,0x9755,0x9757,0x975B, +/* plane 2 ku 92 */ +0x976A,0x0000,0x0000,0x9796,0x979A,0x979E,0x97A2,0x97B1, +0x97B2,0x97BE,0x97CC,0x97D1,0x97D4,0x97D8,0x97D9,0x97E1, +0x97F1,0x9804,0x980D,0x980E,0x9814,0x9816,0x4ABC,0x0000, +0x9823,0x9832,0x9833,0x9825,0x9847,0x9866,0x98AB,0x98AD, +0x98B0,0x0000,0x98B7,0x98B8,0x98BB,0x98BC,0x98BF,0x98C2, +0x98C7,0x98CB,0x98E0,0x0000,0x98E1,0x98E3,0x98E5,0x98EA, +0x98F0,0x98F1,0x98F3,0x9908,0x4B3B,0x0000,0x9916,0x9917, +0x0000,0x991A,0x991B,0x991C,0x0000,0x9931,0x9932,0x9933, +0x993A,0x993B,0x993C,0x9940,0x9941,0x9946,0x994D,0x994E, +0x995C,0x995F,0x9960,0x99A3,0x99A6,0x99B9,0x99BD,0x99BF, +0x99C3,0x99C9,0x99D4,0x99D9,0x99DE,0x0000,0x99F0,0x99F9, +0x99FC,0x9A0A,0x9A11,0x9A16,0x9A1A,0x9A20, +/* plane 2 ku 93 */ +0x9A31,0x9A36,0x9A44,0x9A4C,0x9A58,0x4BC2,0x9AAF,0x4BCA, +0x9AB7,0x4BD2,0x9AB9,0x0000,0x9AC6,0x9AD0,0x9AD2,0x9AD5, +0x4BE8,0x9ADC,0x9AE0,0x9AE5,0x9AE9,0x9B03,0x9B0C,0x9B10, +0x9B12,0x9B16,0x9B1C,0x9B2B,0x9B33,0x9B3D,0x4C20,0x9B4B, +0x9B63,0x9B65,0x9B6B,0x9B6C,0x9B73,0x9B76,0x9B77,0x9BA6, +0x9BAC,0x9BB1,0x0000,0x0000,0x9BB2,0x9BB8,0x9BBE,0x9BC7, +0x9BF3,0x9BD8,0x9BDD,0x9BE7,0x9BEA,0x9BEB,0x9BEF,0x9BEE, +0x0000,0x9BFA,0x0000,0x9BF7,0x0000,0x9C16,0x9C18,0x9C19, +0x9C1A,0x9C1D,0x9C22,0x9C27,0x9C29,0x9C2A,0x0000,0x9C31, +0x9C36,0x9C37,0x9C45,0x9C5C,0x0000,0x9C49,0x9C4A,0x0000, +0x9C54,0x9C58,0x9C5B,0x9C5D,0x9C5F,0x9C69,0x9C6A,0x9C6B, +0x9C6D,0x9C6E,0x9C70,0x9C72,0x9C75,0x9C7A, +/* plane 2 ku 94 */ +0x9CE6,0x9CF2,0x9D0B,0x9D02,0x0000,0x9D11,0x9D17,0x9D18, +0x0000,0x4CC4,0x0000,0x9D32,0x4CD1,0x9D42,0x9D4A,0x9D5F, +0x9D62,0x0000,0x9D69,0x9D6B,0x0000,0x9D73,0x9D76,0x9D77, +0x9D7E,0x9D84,0x9D8D,0x9D99,0x9DA1,0x9DBF,0x9DB5,0x9DB9, +0x9DBD,0x9DC3,0x9DC7,0x9DC9,0x9DD6,0x9DDA,0x9DDF,0x9DE0, +0x9DE3,0x9DF4,0x4D07,0x9E0A,0x9E02,0x9E0D,0x9E19,0x9E1C, +0x9E1D,0x9E7B,0x0000,0x9E80,0x9E85,0x9E9B,0x9EA8,0x0000, +0x9EBD,0x0000,0x9EDF,0x9EE7,0x9EEE,0x9EFF,0x9F02,0x4D77, +0x9F03,0x9F17,0x9F19,0x9F2F,0x9F37,0x9F3A,0x9F3D,0x9F41, +0x9F45,0x9F46,0x9F53,0x9F55,0x9F58,0x0000,0x9F5D,0x0000, +0x9F69,0x0000,0x9F6D,0x9F70,0x9F75,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,}; + +static const int jisx0213_ucs_table_size = (sizeof(jisx0213_ucs_table)/sizeof(unsigned short)); + + +static const unsigned short ucs_a1_jisx0213_table[] = { // 0x0000 - 0x045f + +/* 0000h */ +0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, +0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F, +0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, +0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F, +0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, +0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F, +0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, +0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F, +0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, +0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F, +0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, +0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F, +0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, +0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F, +0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, +0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x2922,0x2923,0x2171,0x2172,0x2924,0x005C,0x2925,0x2178, +0x212F,0x2926,0x2927,0x2928,0x224C,0x2929,0x292A,0x292B, +0x216B,0x215E,0x292C,0x292D,0x212D,0x0000,0x2279,0x292E, +0x292F,0x2930,0x2931,0x2932,0x2933,0x2934,0x2935,0x2936, +0x2937,0x2938,0x2939,0x293A,0x293B,0x293C,0x293D,0x293E, +0x293F,0x2940,0x2941,0x2942,0x2943,0x2944,0x2945,0x2946, +0x2947,0x2948,0x2949,0x294A,0x294B,0x294C,0x294D,0x215F, +0x294E,0x294F,0x2950,0x2951,0x2952,0x2953,0x2954,0x2955, +0x2956,0x2957,0x2958,0x2959,0x295A,0x295B,0x295C,0x295D, +0x295E,0x295F,0x2960,0x2961,0x2962,0x2963,0x2964,0x2965, +0x2966,0x2967,0x2968,0x2969,0x296A,0x296B,0x296C,0x2160, +0x296D,0x296E,0x296F,0x2970,0x2971,0x2972,0x2973,0x2974, + +/* 0100h */ +0x2975,0x297A,0x2A3A,0x2A49,0x2A21,0x2A2C,0x2A3C,0x2A4B, +0x2A59,0x2A5F,0x0000,0x0000,0x2A3D,0x2A4C,0x2A40,0x2A4F, +0x0000,0x2A50,0x2978,0x297D,0x0000,0x0000,0x0000,0x0000, +0x2A3E,0x2A4D,0x2A3F,0x2A4E,0x2A5A,0x2A60,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x2A5B,0x2A61,0x0000,0x2A7D, +0x0000,0x0000,0x2976,0x297B,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x2A5C,0x2A62,0x0000,0x0000, +0x0000,0x2A3B,0x2A4A,0x0000,0x0000,0x2A24,0x2A2F,0x0000, +0x0000,0x2A23,0x2A2E,0x2A41,0x2A51,0x0000,0x0000,0x2A42, +0x2A52,0x0000,0x0000,0x2A7A,0x2979,0x297E,0x0000,0x0000, +0x2A43,0x2A53,0x2B2B,0x2B2A,0x2A39,0x2A48,0x0000,0x0000, +0x2A44,0x2A54,0x2A25,0x2A30,0x2A5D,0x2A63,0x2A27,0x2A33, +0x2A26,0x2A32,0x2A47,0x2A57,0x2A28,0x2A34,0x0000,0x0000, +0x0000,0x0000,0x2977,0x297C,0x2A5E,0x2A64,0x2A45,0x2A55, +0x2A46,0x2A56,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x2A29,0x2A35,0x2A2B,0x2A38,0x2A2A,0x2A37,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x2B29,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x2B24,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x286F,0x2870,0x0000, +0x2871,0x2876,0x2877,0x0000,0x2878,0x0000,0x2879,0x0000, +0x287A,0x0000,0x287B,0x0000,0x287C,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x2874,0x2875,0x0000,0x0000,0x0000,0x2B45,0x0000,0x0000, + +/* 0200h */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x2B33,0x2B39,0x2B3A,0x2B25,0x2B38,0x2B3F,0x2A6E,0x2B26, +0x2B2E,0x2B30,0x2B43,0x0000,0x2B31,0x0000,0x2B32,0x2A75, +0x2B28,0x2A79,0x0000,0x0000,0x2B36,0x2B3C,0x2B22,0x2B42, +0x2B2C,0x0000,0x0000,0x0000,0x2A6A,0x2A74,0x2A6B,0x2B34, +0x2A7B,0x2A65,0x2A76,0x2A6F,0x0000,0x2B2F,0x0000,0x0000, +0x0000,0x2A6C,0x2B41,0x2A73,0x0000,0x2A70,0x2A67,0x0000, +0x0000,0x2A7C,0x2A71,0x2A68,0x2B27,0x0000,0x0000,0x0000, +0x2A6D,0x2B2D,0x2B35,0x2A66,0x2B37,0x2B3B,0x2A78,0x0000, +0x2A72,0x2B40,0x2A69,0x0000,0x2B21,0x2A7E,0x0000,0x0000, +0x2B23,0x0000,0x0000,0x0000,0x0000,0x2A77,0x0000,0x0000, +0x0000,0x2B3E,0x2B3D,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2A31, +0x2B53,0x0000,0x0000,0x0000,0x2B54,0x0000,0x0000,0x0000, +0x2B55,0x2B56,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x2A22,0x2A58,0x0000,0x2A2D,0x0000,0x2A36,0x2B71,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x2B60,0x2B61,0x2B62, +0x2B63,0x2B64,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + +/* 0300h */ +0x2B5C,0x2B5A,0x2B5F,0x2B7D,0x2B5B,0x0000,0x2B57,0x0000, +0x2B6D,0x0000,0x0000,0x2B59,0x2B5E,0x0000,0x0000,0x2B5D, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x2B78,0x2B79,0x2B7E,0x0000,0x2B6A,0x2B76,0x2B77,0x2B6B, +0x2B6C,0x0000,0x0000,0x0000,0x2B72,0x2B67,0x0000,0x0000, +0x0000,0x2B6F,0x2B7A,0x0000,0x2B68,0x0000,0x0000,0x2B70, +0x2B73,0x0000,0x0000,0x0000,0x2B75,0x0000,0x0000,0x0000, +0x0000,0x2B69,0x2B7B,0x2B7C,0x2B74,0x2B6E,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x2B52,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x2621,0x2622,0x2623,0x2624,0x2625,0x2626,0x2627, +0x2628,0x2629,0x262A,0x262B,0x262C,0x262D,0x262E,0x262F, +0x2630,0x2631,0x0000,0x2632,0x2633,0x2634,0x2635,0x2636, +0x2637,0x2638,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x2641,0x2642,0x2643,0x2644,0x2645,0x2646,0x2647, +0x2648,0x2649,0x264A,0x264B,0x264C,0x264D,0x264E,0x264F, +0x2650,0x2651,0x2659,0x2652,0x2653,0x2654,0x2655,0x2656, +0x2657,0x2658,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + +/* 0400h */ +0x0000,0x2727,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x2721,0x2722,0x2723,0x2724,0x2725,0x2726,0x2728,0x2729, +0x272A,0x272B,0x272C,0x272D,0x272E,0x272F,0x2730,0x2731, +0x2732,0x2733,0x2734,0x2735,0x2736,0x2737,0x2738,0x2739, +0x273A,0x273B,0x273C,0x273D,0x273E,0x273F,0x2740,0x2741, +0x2751,0x2752,0x2753,0x2754,0x2755,0x2756,0x2758,0x2759, +0x275A,0x275B,0x275C,0x275D,0x275E,0x275F,0x2760,0x2761, +0x2762,0x2763,0x2764,0x2765,0x2766,0x2767,0x2768,0x2769, +0x276A,0x276B,0x276C,0x276D,0x276E,0x276F,0x2770,0x2771, +0x0000,0x2757,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +}; + +static const int ucs_a1_jisx0213_table_min = 0x0000; +static const int ucs_a1_jisx0213_table_max = 0x0000 + + (sizeof(ucs_a1_jisx0213_table)/sizeof(unsigned short)); + +static const unsigned short ucs_hk_jisx0213_table[] = { // 0x3000 - 0x30ff +/* 3000h */ +0x2121,0x2122,0x2123,0x2137,0x0000,0x2139,0x213A,0x213B, +0x2152,0x2153,0x2154,0x2155,0x2156,0x2157,0x2158,0x2159, +0x215A,0x215B,0x2229,0x222E,0x214C,0x214D,0x225A,0x225B, +0x2258,0x2259,0x0000,0x0000,0x2141,0x2D60,0x0000,0x2D61, +0x2666,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x2233,0x2234,0x2235,0x0000,0x0000, +0x0000,0x0000,0x0000,0x2236,0x2237,0x233C,0x0000,0x0000, +0x0000,0x2421,0x2422,0x2423,0x2424,0x2425,0x2426,0x2427, +0x2428,0x2429,0x242A,0x242B,0x242C,0x242D,0x242E,0x242F, +0x2430,0x2431,0x2432,0x2433,0x2434,0x2435,0x2436,0x2437, +0x2438,0x2439,0x243A,0x243B,0x243C,0x243D,0x243E,0x243F, +0x2440,0x2441,0x2442,0x2443,0x2444,0x2445,0x2446,0x2447, +0x2448,0x2449,0x244A,0x244B,0x244C,0x244D,0x244E,0x244F, +0x2450,0x2451,0x2452,0x2453,0x2454,0x2455,0x2456,0x2457, +0x2458,0x2459,0x245A,0x245B,0x245C,0x245D,0x245E,0x245F, +0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467, +0x2468,0x2469,0x246A,0x246B,0x246C,0x246D,0x246E,0x246F, +0x2470,0x2471,0x2472,0x2473,0x2474,0x2475,0x2476,0x0000, +0x0000,0x0000,0x0000,0x212B,0x212C,0x2135,0x2136,0x2239, +0x237B,0x2521,0x2522,0x2523,0x2524,0x2525,0x2526,0x2527, +0x2528,0x2529,0x252A,0x252B,0x252C,0x252D,0x252E,0x252F, +0x2530,0x2531,0x2532,0x2533,0x2534,0x2535,0x2536,0x2537, +0x2538,0x2539,0x253A,0x253B,0x253C,0x253D,0x253E,0x253F, +0x2540,0x2541,0x2542,0x2543,0x2544,0x2545,0x2546,0x2547, +0x2548,0x2549,0x254A,0x254B,0x254C,0x254D,0x254E,0x254F, +0x2550,0x2551,0x2552,0x2553,0x2554,0x2555,0x2556,0x2557, +0x2558,0x2559,0x255A,0x255B,0x255C,0x255D,0x255E,0x255F, +0x2560,0x2561,0x2562,0x2563,0x2564,0x2565,0x2566,0x2567, +0x2568,0x2569,0x256A,0x256B,0x256C,0x256D,0x256E,0x256F, +0x2570,0x2571,0x2572,0x2573,0x2574,0x2575,0x2576,0x2772, +0x2773,0x2774,0x2775,0x2126,0x213C,0x2133,0x2134,0x2238, +}; + +static const int ucs_hk_jisx0213_min = 0x3000; +static const int ucs_hk_jisx0213_max = 0x30FF; + +static const unsigned short ucs_i_jisx0213_table[] = { // 0x4e00 - 0x9fff + +/* 4E00h */ +0x306C,0x437A,0x7F22,0x3C37,0x0000,0x0000,0x0000,0x4B7C, +0x3E66,0x3B30,0x3E65,0x323C,0x0000,0x4954,0x4D3F,0x7F23, +0x5022,0x312F,0x7F24,0x0000,0x336E,0x5023,0x4024,0x5242, +0x3556,0x4A3A,0x0000,0x0000,0x0000,0x0000,0x3E67,0x0000, +0x0000,0x4E3E,0x0000,0x0000,0x0000,0x0000,0x4A42,0x0000, +0x2E24,0x7F25,0x5024,0x7F26,0x8A2E,0x4366,0x7F27,0x2E25, +0x2E26,0x5025,0x367A,0x0000,0x0000,0x0000,0x5026,0x0000, +0x345D,0x4330,0x0000,0x3C67,0x5027,0x0000,0x0000,0x5028, +0x7F28,0x0000,0x5029,0x4735,0x0000,0x3557,0x0000,0x7F29, +0x7F2A,0x0000,0x0000,0x4737,0x0000,0x4663,0x3843,0x4B33, +0x0000,0x7F2C,0x0000,0x0000,0x0000,0x6949,0x502A,0x3E68, +0x502B,0x3235,0x7F2F,0x0000,0x0000,0x3665,0x3870,0x4C69, +0x0000,0x0000,0x5626,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x7F30,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x4D70,0x0000,0x467D,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3425,0x0000, +0x3535,0x0000,0x502C,0x0000,0x0000,0x502D,0x4E3B,0x0000, +0x4D3D,0x4168,0x502F,0x3B76,0x4673,0x2E27,0x5032,0x0000, +0x0000,0x313E,0x385F,0x0000,0x385E,0x3066,0x0000,0x0000, +0x4F4B,0x4F4A,0x0000,0x3A33,0x3021,0x7F31,0x5033,0x5034, +0x5035,0x4B34,0x5036,0x0000,0x3872,0x3067,0x4B72,0x0000, +0x357C,0x0000,0x0000,0x357D,0x357E,0x4462,0x4E3C,0x0000, +0x5037,0x0000,0x0000,0x5038,0x0000,0x0000,0x5039,0x0000, +0x0000,0x7F34,0x3F4D,0x7F35,0x7F37,0x0000,0x0000,0x0000, +0x3D3A,0x3F4E,0x503E,0x7F38,0x503C,0x0000,0x503D,0x3558, +0x7F39,0x0000,0x3A23,0x3270,0x0000,0x503B,0x503A,0x4A29, +0x7F3A,0x0000,0x0000,0x0000,0x3B46,0x3B45,0x423E,0x503F, +0x4955,0x4067,0x7F3C,0x0000,0x0000,0x2138,0x5040,0x5042, +0x0000,0x2E28,0x0000,0x4265,0x4E61,0x304A,0x0000,0x0000, +0x0000,0x0000,0x0000,0x7F3B,0x0000,0x5041,0x323E,0x0000, +0x3644,0x7F3D,0x4367,0x0000,0x0000,0x7F3E,0x376F,0x5043, +0x0000,0x0000,0x0000,0x4724,0x0000,0x2E29,0x0000,0x2E2A, + +/* 4F00h */ +0x7F3F,0x346B,0x0000,0x2E2B,0x0000,0x0000,0x0000,0x0000, +0x0000,0x5044,0x304B,0x2E2C,0x0000,0x3860,0x346C,0x497A, +0x4832,0x3559,0x0000,0x0000,0x0000,0x0000,0x7F40,0x0000, +0x0000,0x0000,0x3271,0x0000,0x5067,0x4541,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x476C, +0x5046,0x0000,0x0000,0x0000,0x483C,0x0000,0x4E62,0x7F42, +0x3F2D,0x0000,0x3B47,0x0000,0x3B77,0x3240,0x7F43,0x0000, +0x0000,0x0000,0x0000,0x4451,0x0000,0x0000,0x4322,0x504A, +0x2E2E,0x2E2F,0x0000,0x0000,0x0000,0x304C,0x4463,0x3D3B, +0x3A34,0x4D24,0x0000,0x424E,0x7F44,0x323F,0x2E30,0x5049, +0x7F45,0x4D3E,0x5045,0x5047,0x3A6E,0x5048,0x5524,0x2E31, +0x2E2D,0x0000,0x0000,0x0000,0x7F41,0x0000,0x0000,0x0000, +0x0000,0x5050,0x2E32,0x0000,0x2E33,0x0000,0x0000,0x5053, +0x5051,0x0000,0x0000,0x3242,0x0000,0x4A3B,0x504B,0x7F47, +0x7F48,0x0000,0x7F49,0x504F,0x3873,0x7F4A,0x2E34,0x3B48, +0x0000,0x0000,0x7F4B,0x3426,0x0000,0x7F4C,0x5054,0x0000, +0x504C,0x0000,0x2E35,0x4E63,0x0000,0x3B78,0x0000,0x504D, +0x0000,0x5052,0x7F4D,0x0000,0x2E36,0x0000,0x5055,0x2E37, +0x504E,0x0000,0x7F4E,0x3621,0x0000,0x304D,0x0000,0x0000, +0x3622,0x3241,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x5525,0x0000,0x4B79,0x496E,0x3874, +0x0000,0x0000,0x7F50,0x0000,0x0000,0x3F2F,0x4E37,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7F51,0x4A58, +0x0000,0x0000,0x3738,0x4225,0x3264,0x7F52,0x0000,0x0000, +0x0000,0x2E39,0x3D53,0x7F53,0x0000,0x0000,0x5059,0x7F54, +0x505E,0x505C,0x7F55,0x0000,0x5057,0x0000,0x0000,0x422F, +0x505A,0x0000,0x505D,0x505B,0x0000,0x4A5D,0x0000,0x5058, +0x2E3A,0x3F2E,0x0000,0x4B73,0x505F,0x5060,0x7F4F,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3D24,0x506D, +0x0000,0x2E21,0x7F57,0x4750,0x0000,0x4936,0x5068,0x0000, +0x4A70,0x0000,0x3236,0x0000,0x0000,0x0000,0x506C,0x0000, + +/* 5000h */ +0x7F58,0x2E3B,0x2E3C,0x0000,0x0000,0x5066,0x506F,0x0000, +0x0000,0x4152,0x0000,0x3844,0x0000,0x475C,0x2E3D,0x6047, +0x7F59,0x506E,0x455D,0x7F5A,0x5063,0x0000,0x3876,0x0000, +0x2E3E,0x3875,0x5061,0x0000,0x7F5B,0x0000,0x7F5C,0x3C5A, +0x0000,0x5069,0x7F5D,0x4A6F,0x434D,0x5065,0x3771,0x2E3F, +0x5062,0x506A,0x5064,0x4E51,0x506B,0x4F41,0x2E40,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3666,0x0000, +0x0000,0x3770,0x0000,0x2E42,0x0000,0x0000,0x0000,0x0000, +0x2E41,0x2E43,0x7F5F,0x5070,0x0000,0x0000,0x7F60,0x5071, +0x5075,0x304E,0x0000,0x0000,0x0000,0x0000,0x7F61,0x4A50, +0x5074,0x0000,0x0000,0x7F62,0x0000,0x5073,0x5077,0x7F63, +0x0000,0x0000,0x5076,0x0000,0x4464,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x7F64,0x0000,0x3772,0x7F65,0x0000, +0x0000,0x0000,0x7F66,0x0000,0x5078,0x0000,0x0000,0x0000, +0x7F67,0x0000,0x3C45,0x0000,0x4226,0x4465,0x3676,0x0000, +0x5079,0x0000,0x0000,0x0000,0x0000,0x3536,0x0000,0x0000, +0x507A,0x0000,0x0000,0x0000,0x0000,0x507C,0x0000,0x0000, +0x7F69,0x0000,0x0000,0x0000,0x0000,0x4B35,0x0000,0x0000, +0x0000,0x3766,0x7F6A,0x7F6B,0x2E44,0x7F6C,0x7F6D,0x0000, +0x3B31,0x4877,0x507B,0x0000,0x7F6E,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x7F68,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x7F6F,0x0000,0x3A45,0x4D43,0x0000,0x0000, +0x0000,0x7F71,0x507E,0x5123,0x507D,0x3A44,0x0000,0x3D7D, +0x0000,0x0000,0x7F72,0x7F73,0x0000,0x0000,0x3739,0x0000, +0x0000,0x0000,0x5124,0x0000,0x7F74,0x364F,0x0000,0x7F75, +0x0000,0x5121,0x5122,0x0000,0x2E45,0x462F,0x7F78,0x417C, +0x2E47,0x3623,0x0000,0x0000,0x7F7A,0x4B4D,0x5125,0x0000, +0x0000,0x7F7B,0x4E3D,0x0000,0x0000,0x0000,0x5126,0x0000, +0x0000,0x7F7C,0x0000,0x5129,0x0000,0x5127,0x2E48,0x414E, +0x0000,0x7F7D,0x0000,0x0000,0x0000,0x5128,0x512A,0x0000, +0x0000,0x0000,0x2E46,0x7F76,0x0000,0x512C,0x0000,0x0000, +0x0000,0x512B,0x0000,0x4A48,0x0000,0x0000,0x0000,0x0000, + +/* 5100h */ +0x3537,0x512E,0x512F,0x2E4B,0x322F,0x0000,0x2E4A,0x0000, +0x8121,0x512D,0x0000,0x2E4C,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x3C74,0x0000,0x5132,0x5131,0x5130,0x8123, +0x5056,0x0000,0x5133,0x8124,0x0000,0x0000,0x2E4D,0x3D7E, +0x0000,0x5134,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x4D25,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x4C59,0x0000,0x0000,0x2E4E,0x0000,0x5136, +0x0000,0x0000,0x5135,0x5138,0x5137,0x0000,0x0000,0x5139, +0x513A,0x3074,0x0000,0x3835,0x373B,0x3D3C,0x437B,0x3624, +0x4068,0x3877,0x2E4F,0x396E,0x513C,0x4C48,0x4546,0x0000, +0x3B79,0x0000,0x513B,0x0000,0x513D,0x2E51,0x0000,0x2E52, +0x0000,0x0000,0x455E,0x0000,0x3375,0x0000,0x0000,0x0000, +0x8126,0x0000,0x513E,0x0000,0x0000,0x467E,0x0000,0x0000, +0x4134,0x5140,0x5141,0x482C,0x3878,0x4F3B,0x5142,0x0000, +0x0000,0x3626,0x0000,0x8128,0x0000,0x4A3C,0x4236,0x3671, +0x4535,0x0000,0x0000,0x8E74,0x3773,0x0000,0x0000,0x0000, +0x5143,0x0000,0x5144,0x8129,0x0000,0x4662,0x315F,0x0000, +0x0000,0x5147,0x3A7D,0x812A,0x5146,0x3A46,0x0000,0x5148, +0x666E,0x5149,0x4B41,0x514A,0x0000,0x514B,0x514C,0x3E69, +0x812C,0x3C4C,0x0000,0x0000,0x0000,0x2E54,0x0000,0x0000, +0x3427,0x0000,0x514F,0x812D,0x514D,0x4C3D,0x514E,0x0000, +0x495A,0x5150,0x5151,0x5152,0x455F,0x812E,0x0000,0x0000, +0x5156,0x5154,0x5155,0x5153,0x3A63,0x5157,0x4C6A,0x4E64, +0x0000,0x0000,0x0000,0x0000,0x8130,0x5158,0x0000,0x0000, +0x0000,0x0000,0x0000,0x2E55,0x4028,0x5159,0x3D5A,0x0000, +0x0000,0x515A,0x2E56,0x437C,0x4E3F,0x4560,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5245,0x0000, +0x0000,0x0000,0x0000,0x515B,0x7425,0x3645,0x2E57,0x0000, +0x515C,0x4B5E,0x2E58,0x0000,0x0000,0x0000,0x3D68,0x427C, +0x0000,0x515E,0x4664,0x0000,0x0000,0x515F,0x2E59,0x0000, +0x5160,0x332E,0x0000,0x8133,0x8134,0x5161,0x3627,0x0000, +0x464C,0x317A,0x3D50,0x0000,0x0000,0x4821,0x5162,0x0000, + +/* 5200h */ +0x4561,0x2E5A,0x8135,0x3F4F,0x5163,0x0000,0x4A2C,0x405A, +0x3422,0x0000,0x3429,0x5164,0x0000,0x0000,0x5166,0x0000, +0x0000,0x373A,0x8136,0x2E5C,0x5165,0x2E5D,0x8137,0x4E73, +0x0000,0x0000,0x0000,0x0000,0x0000,0x3D69,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x483D,0x4A4C,0x0000,0x5167, +0x0000,0x4D78,0x5168,0x0000,0x0000,0x0000,0x5169,0x0000, +0x457E,0x0000,0x0000,0x516A,0x0000,0x0000,0x4029,0x3A7E, +0x3774,0x516B,0x3B49,0x396F,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x4466,0x516D,0x0000,0x0000,0x4227, +0x0000,0x2E5E,0x3A6F,0x516E,0x516F,0x4130,0x0000,0x516C, +0x0000,0x0000,0x0000,0x0000,0x5171,0x8139,0x4B36,0x2E5F, +0x0000,0x0000,0x0000,0x3964,0x813A,0x2F7E,0x5170,0x0000, +0x0000,0x2E60,0x0000,0x3775,0x3A5E,0x476D,0x0000,0x0000, +0x0000,0x5174,0x5172,0x0000,0x813B,0x0000,0x0000,0x497B, +0x3E6A,0x517B,0x3364,0x5175,0x5173,0x414F,0x0000,0x813C, +0x0000,0x0000,0x0000,0x0000,0x0000,0x5177,0x0000,0x5176, +0x0000,0x0000,0x813E,0x3344,0x813D,0x0000,0x0000,0x3760, +0x517C,0x4E2D,0x0000,0x0000,0x0000,0x5178,0x0000,0x0000, +0x0000,0x517D,0x517A,0x2E61,0x5179,0x0000,0x0000,0x0000, +0x8140,0x0000,0x0000,0x4E4F,0x0000,0x0000,0x0000,0x3879, +0x3243,0x0000,0x0000,0x4E74,0x8142,0x0000,0x8143,0x0000, +0x0000,0x3D75,0x4558,0x3965,0x5222,0x5223,0x0000,0x8144, +0x0000,0x4E65,0x0000,0x0000,0x4F2B,0x5225,0x0000,0x0000, +0x0000,0x387A,0x8145,0x8146,0x5224,0x0000,0x332F,0x0000, +0x0000,0x5226,0x0000,0x4B56,0x0000,0x443C,0x0000,0x4D26, +0x2E62,0x4A59,0x8147,0x0000,0x2E64,0x5227,0x0000,0x0000, +0x2E65,0x8149,0x7055,0x0000,0x0000,0x4630,0x2E66,0x5228, +0x342A,0x4C33,0x0000,0x2E67,0x0000,0x3E21,0x5229,0x4A67, +0x522D,0x0000,0x402A,0x522A,0x3650,0x0000,0x522B,0x342B, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x2E69,0x0000,0x372E,0x522E,0x0000,0x522F,0x0000,0x814B, +0x5230,0x5231,0x3C5B,0x2E6A,0x0000,0x0000,0x387B,0x4C5E, + +/* 5300h */ +0x2E6B,0x4C68,0x4677,0x0000,0x0000,0x4A71,0x5232,0x2E6C, +0x5233,0x0000,0x814C,0x814D,0x0000,0x5235,0x0000,0x5237, +0x5236,0x0000,0x0000,0x0000,0x0000,0x5238,0x323D,0x4B4C, +0x0000,0x3A7C,0x5239,0x0000,0x2E6D,0x4159,0x0000,0x0000, +0x3E22,0x3629,0x0000,0x523A,0x814E,0x0000,0x0000,0x0000, +0x0000,0x0000,0x485B,0x0000,0x0000,0x0000,0x0000,0x523B, +0x0000,0x523C,0x0000,0x523D,0x0000,0x814F,0x0000,0x0000, +0x523E,0x4924,0x3668,0x3065,0x0000,0x0000,0x8150,0x463F, +0x523F,0x3D3D,0x8151,0x4069,0x0000,0x5241,0x5240,0x3E23, +0x3861,0x5243,0x483E,0x0000,0x0000,0x5244,0x0000,0x0000, +0x0000,0x485C,0x4234,0x426E,0x3628,0x0000,0x0000,0x466E, +0x4331,0x0000,0x476E,0x0000,0x4B4E,0x0000,0x5246,0x0000, +0x406A,0x2E6F,0x0000,0x2E70,0x0000,0x0000,0x3735,0x8154, +0x0000,0x5247,0x0000,0x0000,0x8155,0x0000,0x5248,0x312C, +0x3075,0x346D,0x0000,0x4228,0x3551,0x4D71,0x0000,0x524B, +0x3237,0x0000,0x8156,0x524A,0x0000,0x2E71,0x0000,0x362A, +0x0000,0x0000,0x524C,0x0000,0x4C71,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x2E72,0x0000,0x0000,0x524D,0x0000, +0x4E52,0x0000,0x387C,0x0000,0x0000,0x2E73,0x0000,0x3836, +0x524E,0x0000,0x0000,0x0000,0x8157,0x5250,0x524F,0x0000, +0x3F5F,0x3139,0x0000,0x0000,0x0000,0x315E,0x5251,0x0000, +0x5252,0x0000,0x2E74,0x3837,0x8158,0x0000,0x5253,0x815A, +0x0000,0x0000,0x0000,0x356E,0x0000,0x0000,0x0000,0x0000, +0x815B,0x0000,0x3B32,0x5254,0x0000,0x0000,0x0000,0x0000, +0x4B74,0x3A35,0x355A,0x4D27,0x4150,0x483F,0x3C7D,0x0000, +0x0000,0x0000,0x0000,0x0000,0x3D47,0x815F,0x3C68,0x3C75, +0x0000,0x3D76,0x8160,0x4840,0x0000,0x0000,0x0000,0x5257, +0x0000,0x3143,0x4151,0x387D,0x3845,0x3667,0x0000,0x0000, +0x525B,0x4321,0x427E,0x362B,0x3E24,0x525C,0x525A,0x3244, +0x4266,0x3C38,0x3B4B,0x3126,0x8162,0x8163,0x3370,0x3966, +0x3B4A,0x0000,0x525D,0x0000,0x0000,0x0000,0x0000,0x0000, + +/* 5400h */ +0x0000,0x525E,0x0000,0x3549,0x3346,0x0000,0x0000,0x0000, +0x3967,0x3548,0x445F,0x3125,0x4631,0x4C3E,0x3921,0x4D79, +0x4547,0x387E,0x2E75,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x372F,0x0000,0x5267,0x4F7E,0x3663, +0x4B4A,0x0000,0x0000,0x0000,0x8165,0x0000,0x485D,0x2E76, +0x8166,0x5266,0x0000,0x345E,0x5261,0x5262,0x5264,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5265,0x0000, +0x355B,0x3F61,0x0000,0x4A2D,0x5263,0x525F,0x3863,0x0000, +0x5260,0x0000,0x4F24,0x8168,0x0000,0x0000,0x4A72,0x0000, +0x4468,0x3862,0x3970,0x0000,0x0000,0x2E77,0x5268,0x0000, +0x0000,0x465D,0x0000,0x0000,0x0000,0x8164,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x526C, +0x0000,0x0000,0x8169,0x0000,0x0000,0x0000,0x816A,0x0000, +0x3C7E,0x0000,0x3C76,0x2E79,0x816B,0x0000,0x0000,0x0000, +0x526F,0x526D,0x0000,0x4C23,0x2E7A,0x526A,0x5273,0x526E, +0x0000,0x0000,0x0000,0x5271,0x3846,0x4C3F,0x0000,0x2E7B, +0x5272,0x0000,0x0000,0x0000,0x5274,0x0000,0x5276,0x0000, +0x2E7C,0x0000,0x816C,0x3A70,0x4F42,0x816D,0x526B,0x5269, +0x5275,0x0000,0x5270,0x0000,0x0000,0x816E,0x2E7D,0x0000, +0x0000,0x0000,0x0000,0x0000,0x2E78,0x0000,0x0000,0x0000, +0x816F,0x2E7E,0x5278,0x0000,0x5323,0x527A,0x8170,0x0000, +0x527E,0x2F21,0x0000,0x5321,0x527B,0x8171,0x8172,0x533E, +0x0000,0x0000,0x3A69,0x3331,0x0000,0x0000,0x0000,0x8173, +0x5279,0x0000,0x8174,0x0000,0x5325,0x3076,0x5324,0x8175, +0x3025,0x494A,0x5322,0x8176,0x527C,0x0000,0x2F22,0x5277, +0x527D,0x3A48,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x5326,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x3077,0x532F,0x0000,0x0000,0x5327,0x5328,0x0000, +0x3E25,0x4B69,0x0000,0x0000,0x8178,0x532D,0x532C,0x8179, +0x0000,0x817A,0x452F,0x817B,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x532E,0x0000,0x0000,0x532B,0x0000,0x2F23, + +/* 5500h */ +0x817C,0x817D,0x0000,0x0000,0x3134,0x0000,0x3A36,0x3F30, +0x0000,0x817E,0x0000,0x0000,0x0000,0x0000,0x2F24,0x5329, +0x4562,0x0000,0x0000,0x0000,0x532A,0x0000,0x3022,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x2F25,0x0000,0x0000,0x5334,0x4D23, +0x0000,0x3E27,0x0000,0x533A,0x0000,0x2F26,0x0000,0x0000, +0x5339,0x5330,0x0000,0x0000,0x8221,0x0000,0x4243,0x0000, +0x5331,0x8222,0x0000,0x0000,0x426F,0x5336,0x3E26,0x8224, +0x0000,0x0000,0x8225,0x0000,0x5333,0x0000,0x0000,0x4C64, +0x2F27,0x0000,0x0000,0x373C,0x0000,0x0000,0x5337,0x5338, +0x0000,0x0000,0x0000,0x0000,0x5335,0x533B,0x2F28,0x0000, +0x8227,0x8228,0x0000,0x5332,0x8229,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x5341,0x5346,0x822B,0x5342,0x0000, +0x533D,0x2F29,0x822C,0x5347,0x4131,0x0000,0x2F2A,0x5349, +0x822D,0x3922,0x533F,0x437D,0x0000,0x0000,0x2F2B,0x0000, +0x0000,0x822E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x5343,0x533C,0x342D,0x0000,0x346E,0x3365,0x5344,0x5340, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3776, +0x534A,0x5348,0x4153,0x354A,0x362C,0x2F2D,0x5345,0x0000, +0x3674,0x0000,0x0000,0x0000,0x0000,0x0000,0x3144,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8233, +0x0000,0x0000,0x0000,0x0000,0x534E,0x534C,0x0000,0x5427, +0x0000,0x8234,0x0000,0x0000,0x8235,0x0000,0x2F2E,0x0000, +0x0000,0x8236,0x8230,0x0000,0x5351,0x0000,0x0000,0x0000, +0x0000,0x0000,0x534B,0x0000,0x534F,0x8237,0x0000,0x534D, +0x0000,0x0000,0x8239,0x3B4C,0x5350,0x0000,0x0000,0x0000, +0x0000,0x823B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5353, +0x0000,0x5358,0x0000,0x0000,0x0000,0x5356,0x5355,0x0000, + +/* 5600h */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4332,0x823E, +0x2F30,0x3245,0x0000,0x0000,0x0000,0x0000,0x2F31,0x0000, +0x823F,0x0000,0x0000,0x0000,0x5352,0x0000,0x5354,0x3E28, +0x3133,0x0000,0x0000,0x5357,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x823C,0x325E,0x0000,0x0000,0x0000,0x0000,0x0000,0x5362, +0x8240,0x3E7C,0x535E,0x0000,0x535C,0x0000,0x535D,0x8241, +0x535F,0x0000,0x0000,0x2F32,0x0000,0x8243,0x0000,0x8244, +0x8245,0x0000,0x313D,0x0000,0x0000,0x0000,0x0000,0x8246, +0x0000,0x2F33,0x0000,0x0000,0x4139,0x0000,0x5359,0x0000, +0x535A,0x0000,0x0000,0x7427,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x337A,0x0000,0x0000,0x8247,0x0000, +0x8248,0x0000,0x0000,0x0000,0x5361,0x0000,0x2F35,0x0000, +0x346F,0x0000,0x5364,0x5360,0x5363,0x8249,0x0000,0x2F37, +0x0000,0x2F38,0x2F39,0x0000,0x4A2E,0x0000,0x2F34,0x0000, +0x4655,0x0000,0x4838,0x0000,0x0000,0x0000,0x0000,0x0000, +0x5366,0x0000,0x0000,0x0000,0x0000,0x0000,0x5365,0x3345, +0x824B,0x0000,0x5367,0x0000,0x824C,0x0000,0x0000,0x536A, +0x0000,0x0000,0x0000,0x0000,0x5369,0x824D,0x0000,0x0000, +0x0000,0x2F3A,0x824E,0x0000,0x0000,0x824F,0x2F3B,0x0000, +0x5368,0x0000,0x4739,0x0000,0x0000,0x536B,0x0000,0x0000, +0x8250,0x2F3C,0x0000,0x0000,0x2F3D,0x8251,0x536C,0x0000, +0x0000,0x0000,0x8252,0x2F3E,0x536E,0x0000,0x536D,0x0000, +0x0000,0x0000,0x0000,0x0000,0x5370,0x0000,0x0000,0x0000, +0x5373,0x5371,0x536F,0x5372,0x0000,0x8253,0x0000,0x0000, +0x5374,0x2F3F,0x2F40,0x0000,0x0000,0x8254,0x5375,0x0000, +0x0000,0x5376,0x0000,0x5377,0x0000,0x0000,0x0000,0x5378, +0x5145,0x0000,0x3C7C,0x3B4D,0x0000,0x0000,0x3273,0x8255, +0x3078,0x0000,0x0000,0x4344,0x0000,0x0000,0x0000,0x0000, +0x8256,0x0000,0x0000,0x0000,0x0000,0x0000,0x5379,0x0000, +0x3A24,0x0000,0x304F,0x3F5E,0x0000,0x0000,0x8257,0x8258, +0x0000,0x537A,0x3847,0x0000,0x0000,0x3971,0x0000,0x537C, + +/* 5700h */ +0x537B,0x0000,0x0000,0x4A60,0x537D,0x0000,0x0000,0x0000, +0x5421,0x537E,0x2F41,0x5422,0x0000,0x5423,0x0000,0x3777, +0x0000,0x0000,0x3160,0x5424,0x0000,0x825A,0x5426,0x0000, +0x5425,0x0000,0x0000,0x0000,0x5428,0x0000,0x0000,0x455A, +0x0000,0x2F43,0x0000,0x825B,0x0000,0x0000,0x5429,0x3035, +0x3A5F,0x825D,0x0000,0x0000,0x0000,0x373D,0x0000,0x2F44, +0x434F,0x0000,0x0000,0x2F45,0x2F46,0x0000,0x0000,0x542A, +0x542B,0x0000,0x0000,0x542D,0x0000,0x0000,0x0000,0x0000, +0x542E,0x0000,0x3A64,0x0000,0x0000,0x825F,0x8260,0x3651, +0x0000,0x0000,0x4B37,0x0000,0x8261,0x8262,0x542C,0x542F, +0x3A41,0x3923,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x5433,0x0000,0x0000,0x3A25,0x0000,0x4333,0x0000, +0x8264,0x5430,0x445A,0x0000,0x0000,0x0000,0x0000,0x8265, +0x2F47,0x0000,0x0000,0x8266,0x8267,0x8268,0x0000,0x2F48, +0x0000,0x0000,0x0000,0x8269,0x2F49,0x0000,0x0000,0x5434, +0x0000,0x0000,0x3F62,0x0000,0x0000,0x0000,0x0000,0x0000, +0x5432,0x5435,0x0000,0x373F,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x5436,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x826D,0x0000,0x2F4A,0x826E,0x826F,0x0000, +0x5437,0x0000,0x3924,0x3340,0x5439,0x0000,0x0000,0x0000, +0x8270,0x0000,0x543A,0x0000,0x826C,0x0000,0x0000,0x0000, +0x543B,0x0000,0x0000,0x5438,0x0000,0x0000,0x0000,0x0000, +0x2F4D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x5431,0x0000,0x0000,0x543C,0x0000,0x0000,0x543D,0x2F4E, +0x2F4F,0x0000,0x0000,0x4B64,0x8273,0x0000,0x3E6B,0x2F50, +0x0000,0x0000,0x543F,0x5440,0x543E,0x0000,0x5442,0x8271, +0x0000,0x0000,0x0000,0x0000,0x4738,0x0000,0x8276,0x3068, +0x4956,0x0000,0x0000,0x5443,0x2F51,0x0000,0x8277,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x2F52,0x0000,0x0000, +0x8278,0x0000,0x0000,0x0000,0x3E7D,0x2F53,0x2F54,0x3C39, +0x827A,0x475D,0x3470,0x827B,0x3A6B,0x827C,0x0000,0x2F55, + +/* 5800h */ +0x4B59,0x0000,0x4632,0x0000,0x827D,0x3778,0x424F,0x0000, +0x0000,0x2F56,0x5441,0x5444,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x4244,0x0000,0x0000, +0x0000,0x5445,0x0000,0x0000,0x0000,0x5446,0x827E,0x0000, +0x8321,0x5448,0x0000,0x0000,0x4469,0x0000,0x0000,0x8322, +0x0000,0x0000,0x342E,0x0000,0x0000,0x0000,0x0000,0x7421, +0x3161,0x4A73,0x8323,0x0000,0x3E6C,0x4548,0x0000,0x0000, +0x0000,0x8324,0x3A66,0x0000,0x0000,0x544E,0x0000,0x0000, +0x4A3D,0x4E5D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x8326,0x3274,0x544A,0x8327,0x0000,0x0000,0x0000, +0x0000,0x413A,0x544D,0x0000,0x4563,0x0000,0x0000,0x4549, +0x4564,0x4839,0x444D,0x0000,0x0000,0x0000,0x3A49,0x0000, +0x0000,0x2F58,0x5449,0x0000,0x2F59,0x0000,0x0000,0x8328, +0x0000,0x3176,0x0000,0x4536,0x0000,0x0000,0x0000,0x0000, +0x544B,0x0000,0x5447,0x0000,0x0000,0x3F50,0x0000,0x0000, +0x0000,0x544F,0x0000,0x0000,0x2F5B,0x0000,0x3D4E,0x0000, +0x0000,0x0000,0x0000,0x362D,0x0000,0x5450,0x0000,0x0000, +0x0000,0x2F5C,0x8329,0x832A,0x0000,0x832B,0x0000,0x832C, +0x832D,0x0000,0x0000,0x4A68,0x832E,0x0000,0x0000,0x417D, +0x0000,0x0000,0x0000,0x0000,0x4446,0x832F,0x2F5D,0x5452, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x4B4F,0x2F5F,0x8330,0x5453,0x0000,0x0000,0x5458,0x0000, +0x0000,0x8331,0x0000,0x4A2F,0x0000,0x0000,0x0000,0x0000, +0x5457,0x5451,0x5454,0x5456,0x0000,0x0000,0x3A26,0x0000, +0x0000,0x4A49,0x0000,0x8333,0x0000,0x5459,0x0000,0x4345, +0x0000,0x0000,0x3275,0x0000,0x3E6D,0x8334,0x2F62,0x0000, +0x0000,0x545B,0x2F61,0x545A,0x2F63,0x3968,0x0000,0x545C, +0x545E,0x545D,0x2F64,0x0000,0x5460,0x0000,0x5455,0x5462, +0x2F65,0x0000,0x8335,0x0000,0x5461,0x545F,0x0000,0x0000, +0x0000,0x2F66,0x0000,0x3B4E,0x3F51,0x0000,0x4154,0x5463, +0x403C,0x306D,0x4764,0x8336,0x8337,0x0000,0x0000,0x445B, +0x0000,0x5465,0x5464,0x5466,0x5467,0x5468,0x0000,0x0000, + +/* 5900h */ +0x0000,0x0000,0x5469,0x0000,0x0000,0x8338,0x8339,0x0000, +0x0000,0x4A51,0x546A,0x833A,0x2F67,0x833B,0x0000,0x3246, +0x546B,0x0000,0x0000,0x0000,0x833C,0x4D3C,0x3330,0x0000, +0x5249,0x3D48,0x423F,0x546C,0x4C6B,0x0000,0x0000,0x0000, +0x0000,0x0000,0x4C34,0x0000,0x833D,0x546E,0x0000,0x4267, +0x0000,0x4537,0x4240,0x4957,0x546F,0x5470,0x317B,0x0000, +0x0000,0x3C3A,0x5471,0x0000,0x0000,0x0000,0x0000,0x3050, +0x5472,0x0000,0x0000,0x0000,0x0000,0x8340,0x5473,0x0000, +0x0000,0x0000,0x0000,0x0000,0x3162,0x0000,0x8342,0x3471, +0x4660,0x4A74,0x0000,0x0000,0x0000,0x0000,0x5477,0x4155, +0x5476,0x3740,0x0000,0x0000,0x4B5B,0x5475,0x0000,0x4565, +0x5479,0x0000,0x5478,0x8345,0x0000,0x2F69,0x0000,0x8346, +0x547B,0x0000,0x547A,0x0000,0x0000,0x317C,0x0000,0x547C, +0x3E29,0x547E,0x4325,0x0000,0x547D,0x2F6A,0x4A33,0x0000, +0x0000,0x0000,0x0000,0x3D77,0x455B,0x8348,0x8349,0x0000, +0x5521,0x0000,0x0000,0x0000,0x834A,0x3925,0x0000,0x0000, +0x0000,0x5522,0x4721,0x485E,0x4C51,0x0000,0x0000,0x0000, +0x0000,0x0000,0x4725,0x2F6B,0x0000,0x552B,0x0000,0x0000, +0x0000,0x0000,0x2F6C,0x3538,0x0000,0x0000,0x4D45,0x0000, +0x0000,0x4C2F,0x0000,0x562C,0x0000,0x5523,0x0000,0x834B, +0x0000,0x0000,0x0000,0x5526,0x2F6D,0x4245,0x0000,0x0000, +0x4B38,0x0000,0x0000,0x0000,0x454A,0x0000,0x834C,0x0000, +0x0000,0x0000,0x5527,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x4B65,0x0000,0x3A4A,0x834D,0x0000,0x3E2A,0x0000, +0x0000,0x0000,0x0000,0x2F6E,0x0000,0x0000,0x5528,0x0000, +0x834E,0x3B50,0x0000,0x3B4F,0x0000,0x834F,0x0000,0x0000, +0x3039,0x3848,0x2F6F,0x402B,0x3051,0x0000,0x0000,0x0000, +0x0000,0x552C,0x552D,0x0000,0x552A,0x2F70,0x8350,0x0000, +0x0000,0x0000,0x0000,0x8351,0x8352,0x3138,0x342F,0x8353, +0x5529,0x0000,0x4C45,0x4931,0x0000,0x0000,0x8354,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3028,0x0000, +0x7E7A,0x0000,0x0000,0x3079,0x0000,0x0000,0x0000,0x3B51, + +/* 5A00h */ +0x0000,0x3052,0x0000,0x3023,0x0000,0x0000,0x0000,0x0000, +0x0000,0x5532,0x0000,0x0000,0x8358,0x8359,0x0000,0x0000, +0x0000,0x5530,0x0000,0x2F71,0x0000,0x0000,0x0000,0x835A, +0x4C3C,0x0000,0x5533,0x0000,0x5531,0x0000,0x0000,0x552F, +0x3F31,0x0000,0x0000,0x2F72,0x0000,0x552E,0x0000,0x835B, +0x0000,0x4A5A,0x0000,0x0000,0x0000,0x835C,0x0000,0x3864, +0x0000,0x0000,0x0000,0x0000,0x0000,0x5537,0x5538,0x0000, +0x0000,0x0000,0x0000,0x0000,0x3E2B,0x0000,0x0000,0x0000, +0x5534,0x4F2C,0x0000,0x0000,0x0000,0x0000,0x474C,0x0000, +0x0000,0x5536,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x835D,0x0000,0x0000, +0x0000,0x0000,0x3A27,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x5539,0x0000,0x0000,0x835E,0x4958,0x2F73, +0x0000,0x0000,0x553A,0x0000,0x5535,0x2F74,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2F75, +0x0000,0x0000,0x835F,0x0000,0x0000,0x0000,0x2F76,0x4C3B, +0x0000,0x0000,0x0000,0x0000,0x2F77,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x8360,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x475E,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x553B,0x4932,0x8361,0x0000,0x2F78,0x8362, +0x8363,0x0000,0x8364,0x0000,0x0000,0x0000,0x0000,0x2F79, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x8365,0x0000,0x8366,0x0000,0x8367,0x0000,0x0000, +0x0000,0x0000,0x8368,0x0000,0x553C,0x5540,0x553D,0x8369, +0x0000,0x3247,0x553F,0x0000,0x2F7A,0x0000,0x0000,0x0000, +0x0000,0x3C3B,0x0000,0x553E,0x3779,0x0000,0x0000,0x0000, +0x554C,0x0000,0x0000,0x0000,0x0000,0x0000,0x5545,0x5542, +0x0000,0x0000,0x836A,0x0000,0x836B,0x0000,0x0000,0x0000, +0x836C,0x4364,0x0000,0x5541,0x0000,0x836D,0x5543,0x0000, +0x0000,0x5544,0x0000,0x0000,0x0000,0x0000,0x836F,0x0000, +0x836E,0x0000,0x0000,0x0000,0x0000,0x8370,0x0000,0x0000, +0x0000,0x0000,0x5546,0x5547,0x0000,0x0000,0x0000,0x0000, + +/* 5B00h */ +0x8371,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x8372,0x3472,0x0000,0x5549,0x5548,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x554A,0x8373, +0x0000,0x2F7C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x3E6E,0x0000,0x0000,0x2F7D,0x0000,0x0000, +0x0000,0x0000,0x554D,0x0000,0x445C,0x8375,0x0000,0x0000, +0x3145,0x0000,0x554B,0x0000,0x8374,0x0000,0x554E,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x554F,0x0000, +0x5552,0x4F55,0x0000,0x5550,0x0000,0x5551,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x8376,0x0000,0x0000,0x0000, +0x3B52,0x5553,0x8377,0x0000,0x3926,0x5554,0x4F56,0x3B7A, +0x4238,0x0000,0x5555,0x5556,0x3B5A,0x3927,0x0000,0x4C52, +0x0000,0x0000,0x0000,0x3528,0x3849,0x5557,0x3358,0x0000, +0x8378,0x5558,0x0000,0x4239,0x0000,0x0000,0x0000,0x8379, +0x5559,0x5623,0x0000,0x555A,0x0000,0x555B,0x0000,0x0000, +0x555C,0x0000,0x555E,0x0000,0x837A,0x4F57,0x0000,0x837B, +0x555F,0x837C,0x0000,0x5560,0x837D,0x4270,0x0000,0x3127, +0x3C69,0x3042,0x0000,0x4157,0x3430,0x3C35,0x0000,0x3928, +0x0000,0x0000,0x0000,0x4F58,0x0000,0x4566,0x8021,0x3D21, +0x3431,0x4368,0x446A,0x3038,0x3539,0x4A75,0x0000,0x3C42, +0x0000,0x0000,0x3552,0x406B,0x3C3C,0x4D28,0x5561,0x0000, +0x0000,0x0000,0x0000,0x0000,0x8022,0x0000,0x355C,0x0000, +0x3A4B,0x0000,0x0000,0x3332,0x3163,0x3E2C,0x3248,0x0000, +0x5562,0x4D46,0x0000,0x0000,0x0000,0x0000,0x0000,0x3D49, +0x8024,0x0000,0x3C64,0x5563,0x3473,0x4652,0x4C29,0x5564, +0x0000,0x5565,0x0000,0x0000,0x4959,0x0000,0x8026,0x0000, +0x5567,0x0000,0x3428,0x3677,0x5566,0x0000,0x8027,0x0000, +0x4F59,0x0000,0x0000,0x3432,0x0000,0x3F32,0x556B,0x3B21, +0x0000,0x3249,0x556A,0x0000,0x5568,0x556C,0x5569,0x472B, +0x5C4D,0x3F33,0x0000,0x556D,0x4F5A,0x0000,0x4E40,0x0000, +0x556E,0x802A,0x0000,0x5570,0x0000,0x437E,0x556F,0x0000, +0x4023,0x0000,0x3B7B,0x0000,0x0000,0x802B,0x4250,0x3C77, + +/* 5C00h */ +0x0000,0x4975,0x406C,0x802D,0x3C4D,0x5571,0x3E2D,0x5572, +0x5573,0x3053,0x423A,0x3F52,0x0000,0x5574,0x4633,0x3E2E, +0x0000,0x3E2F,0x4F5B,0x5575,0x0000,0x0000,0x406D,0x0000, +0x0000,0x0000,0x3E30,0x0000,0x0000,0x0000,0x4F5C,0x0000, +0x5576,0x0000,0x5577,0x4F5D,0x4C60,0x0000,0x0000,0x0000, +0x5578,0x802E,0x0000,0x4F5E,0x0000,0x3646,0x0000,0x0000, +0x802F,0x3D22,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x5579,0x557A,0x3C5C,0x3F2C,0x4674,0x3F54,0x4878,0x4722, +0x3649,0x557B,0x0000,0x0000,0x0000,0x356F,0x557C,0x0000, +0x367E,0x0000,0x464F,0x3230,0x0000,0x3B53,0x557D,0x5622, +0x5621,0x367D,0x0000,0x557E,0x0000,0x4538,0x0000,0x0000, +0x0000,0x0000,0x0000,0x7E7B,0x0000,0x0000,0x4230,0x8031, +0x454B,0x3C48,0x4F60,0x8032,0x4158,0x4D7A,0x0000,0x8033, +0x8034,0x8035,0x0000,0x0000,0x5624,0x0000,0x5625,0x4656, +0x8036,0x3B33,0x0000,0x0000,0x0000,0x0000,0x5627,0x0000, +0x0000,0x5628,0x4F64,0x0000,0x8039,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x803C,0x0000,0x803D,0x0000,0x5629,0x0000,0x0000,0x4F65, +0x3474,0x562A,0x0000,0x0000,0x562B,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4F66, +0x8041,0x322C,0x8042,0x4F67,0x0000,0x0000,0x8043,0x8044, +0x413B,0x3464,0x4F68,0x562D,0x4C28,0x8046,0x0000,0x0000, +0x0000,0x4252,0x0000,0x3359,0x0000,0x8047,0x562F,0x5631, +0x345F,0x0000,0x4F69,0x562E,0x5630,0x0000,0x5633,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x5632,0x0000,0x5634, +0x0000,0x8049,0x0000,0x4F6A,0x0000,0x0000,0x0000,0x0000, +0x4F6B,0x0000,0x4F6C,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x5635,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x463D,0x362E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x3265,0x5636,0x563B,0x0000,0x0000,0x5639,0x0000,0x4A77, +0x4A76,0x0000,0x0000,0x0000,0x4F6D,0x0000,0x4567,0x0000, +0x0000,0x0000,0x5638,0x3D54,0x0000,0x5637,0x0000,0x0000, + +/* 5D00h */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x804C,0x3F72, +0x0000,0x0000,0x0000,0x563C,0x0000,0x4F70,0x3A6A,0x0000, +0x804D,0x5642,0x0000,0x0000,0x5643,0x563D,0x3333,0x563E, +0x5647,0x5646,0x5645,0x5641,0x0000,0x804F,0x0000,0x5640, +0x8050,0x0000,0x5644,0x0000,0x8051,0x0000,0x8052,0x4F71, +0x0000,0x4A78,0x0000,0x804E,0x0000,0x0000,0x0000,0x0000, +0x0000,0x8053,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x8054,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x8055,0x0000,0x0000,0x0000,0x4F73,0x4F74, +0x0000,0x0000,0x4F76,0x564B,0x5648,0x0000,0x564A,0x0000, +0x4D72,0x0000,0x5649,0x4F75,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x563F,0x0000,0x0000,0x0000, +0x0000,0x8057,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x3F73,0x8058,0x0000,0x564C,0x4F77,0x0000,0x3A37, +0x805A,0x0000,0x0000,0x564D,0x0000,0x0000,0x564E,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x4F78,0x5651,0x0000,0x5650,0x0000,0x0000,0x564F, +0x805D,0x0000,0x0000,0x4568,0x563A,0x0000,0x0000,0x0000, +0x5657,0x0000,0x805F,0x0000,0x8060,0x0000,0x0000,0x8061, +0x0000,0x8062,0x0000,0x0000,0x0000,0x5653,0x0000,0x0000, +0x4F79,0x0000,0x5652,0x0000,0x4F7A,0x0000,0x0000,0x4F7B, +0x0000,0x0000,0x0000,0x0000,0x5654,0x0000,0x5655,0x0000, +0x8063,0x0000,0x8064,0x0000,0x8065,0x0000,0x0000,0x5658, +0x4F7C,0x8067,0x4E66,0x0000,0x5659,0x5656,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x565A,0x0000,0x4F7D,0x3460,0x565B,0x0000,0x0000, +0x0000,0x8068,0x565D,0x565C,0x0000,0x0000,0x565E,0x8069, +0x806A,0x0000,0x0000,0x565F,0x0000,0x406E,0x3D23,0x0000, +0x806B,0x3D64,0x7428,0x4163,0x806D,0x3929,0x3A38,0x392A, +0x3570,0x806E,0x0000,0x5660,0x0000,0x0000,0x3A39,0x0000, +0x0000,0x384A,0x5661,0x4C26,0x4743,0x5662,0x0000,0x392B, +0x0000,0x0000,0x0000,0x342C,0x0000,0x4327,0x3652,0x0000, + +/* 5E00h */ +0x8070,0x0000,0x3B54,0x495B,0x0000,0x0000,0x4841,0x0000, +0x0000,0x0000,0x0000,0x5663,0x3475,0x0000,0x0000,0x0000, +0x0000,0x5666,0x8072,0x0000,0x7429,0x8073,0x4421,0x0000, +0x742A,0x5665,0x5664,0x5667,0x0000,0x446B,0x0000,0x8075, +0x0000,0x0000,0x0000,0x0000,0x0000,0x3F63,0x0000,0x0000, +0x0000,0x0000,0x0000,0x3B55,0x0000,0x404A,0x8076,0x4253, +0x3522,0x0000,0x0000,0x4422,0x0000,0x0000,0x5668,0x5669, +0x3E6F,0x0000,0x0000,0x0000,0x0000,0x4B39,0x8077,0x0000, +0x566C,0x0000,0x0000,0x566B,0x566A,0x497D,0x0000,0x5673, +0x0000,0x8078,0x0000,0x0000,0x4B5A,0x0000,0x566D,0x0000, +0x0000,0x0000,0x0000,0x0000,0x566F,0x4B6B,0x807A,0x566E, +0x742B,0x0000,0x0000,0x0000,0x0000,0x0000,0x742C,0x5670, +0x0000,0x4828,0x5671,0x4A3E,0x5672,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x807C,0x807D,0x807E,0x8421,0x0000, +0x0000,0x0000,0x3433,0x4A3F,0x472F,0x5674,0x5675,0x7E7C, +0x392C,0x3434,0x5676,0x3838,0x4D44,0x4D29,0x3476,0x5678, +0x0000,0x4423,0x0000,0x392D,0x3E31,0x0000,0x0000,0x485F, +0x0000,0x0000,0x3E32,0x0000,0x0000,0x0000,0x0000,0x3D78, +0x0000,0x0000,0x0000,0x0000,0x0000,0x446C,0x4A79,0x4539, +0x0000,0x0000,0x392E,0x0000,0x495C,0x0000,0x0000,0x0000, +0x5679,0x0000,0x0000,0x0000,0x0000,0x8423,0x4559,0x3A42, +0x0000,0x0000,0x8424,0x384B,0x8425,0x446D,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x3043,0x3D6E,0x392F, +0x4D47,0x8426,0x0000,0x0000,0x0000,0x0000,0x742D,0x8427, +0x0000,0x567A,0x567B,0x4751,0x0000,0x0000,0x8428,0x0000, +0x567C,0x4E77,0x4F2D,0x742F,0x0000,0x0000,0x0000,0x567E, +0x567D,0x0000,0x8429,0x3347,0x0000,0x0000,0x5721,0x0000, +0x0000,0x842A,0x5724,0x5725,0x0000,0x5723,0x0000,0x4940, +0x3E33,0x5727,0x5726,0x5722,0x0000,0x0000,0x0000,0x0000, +0x5728,0x5729,0x0000,0x0000,0x572A,0x0000,0x0000,0x0000, +0x572D,0x572B,0x0000,0x572C,0x572E,0x0000,0x3164,0x446E, +0x572F,0x7430,0x377A,0x3276,0x4736,0x842C,0x5730,0x467B, + +/* 5F00h */ +0x7431,0x4A5B,0x7432,0x5731,0x4F2E,0x0000,0x0000,0x7433, +0x842D,0x5732,0x4A40,0x5735,0x5021,0x5031,0x842E,0x3C30, +0x4675,0x5736,0x0000,0x355D,0x4424,0x307A,0x5737,0x4A26, +0x3930,0x0000,0x0000,0x4350,0x842F,0x7434,0x8431,0x446F, +0x0000,0x0000,0x0000,0x7435,0x0000,0x4C6F,0x3839,0x384C, +0x0000,0x5738,0x0000,0x0000,0x0000,0x5739,0x0000,0x573F, +0x0000,0x3C65,0x0000,0x0000,0x7436,0x4425,0x7437,0x362F, +0x573A,0x0000,0x0000,0x0000,0x492B,0x7438,0x4346,0x0000, +0x7439,0x573B,0x0000,0x0000,0x0000,0x743A,0x0000,0x8432, +0x573C,0x0000,0x3630,0x0000,0x573D,0x0000,0x573E,0x0000, +0x0000,0x5740,0x0000,0x4576,0x743B,0x0000,0x5741,0x5742, +0x743C,0x5743,0x0000,0x0000,0x5734,0x5733,0x0000,0x0000, +0x0000,0x5744,0x3741,0x8433,0x743D,0x0000,0x4927,0x743E, +0x0000,0x3A4C,0x4937,0x4426,0x494B,0x5745,0x0000,0x0000, +0x3E34,0x3146,0x8434,0x5746,0x0000,0x0000,0x0000,0x5747, +0x0000,0x4C72,0x0000,0x0000,0x4860,0x743F,0x8435,0x574A, +0x317D,0x402C,0x5749,0x5748,0x3742,0x4254,0x0000,0x574E, +0x574C,0x7440,0x574B,0x4E27,0x3865,0x0000,0x0000,0x8436, +0x3D79,0x574D,0x454C,0x3D3E,0x0000,0x0000,0x0000,0x4640, +0x5751,0x5750,0x0000,0x0000,0x7441,0x0000,0x574F,0x0000, +0x5752,0x3866,0x8437,0x0000,0x8438,0x0000,0x0000,0x7442, +0x5753,0x497C,0x3D5B,0x0000,0x0000,0x5754,0x4879,0x7443, +0x0000,0x0000,0x0000,0x4641,0x4427,0x7444,0x0000,0x7445, +0x8439,0x4530,0x0000,0x0000,0x5755,0x352B,0x0000,0x0000, +0x0000,0x0000,0x0000,0x3F34,0x843A,0x492C,0x0000,0x843C, +0x0000,0x7446,0x0000,0x843D,0x3477,0x4726,0x0000,0x0000, +0x0000,0x0000,0x843E,0x843F,0x8440,0x0000,0x5756,0x3B56, +0x4B3A,0x4B3B,0x0000,0x0000,0x317E,0x575B,0x7447,0x0000, +0x4369,0x7448,0x8441,0x0000,0x5758,0x0000,0x0000,0x0000, +0x0000,0x7449,0x0000,0x3277,0x0000,0x0000,0x8442,0x8443, +0x582D,0x575A,0x0000,0x8444,0x0000,0x4730,0x0000,0x0000, +0x5759,0x0000,0x0000,0x5757,0x8445,0x397A,0x0000,0x575D, + +/* 6000h */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x744A,0x5763,0x5769, +0x5761,0x0000,0x455C,0x0000,0x744B,0x5766,0x495D,0x8447, +0x744C,0x5760,0x0000,0x5765,0x4E67,0x3B57,0x0000,0x0000, +0x4255,0x575E,0x8448,0x0000,0x8449,0x355E,0x5768,0x402D, +0x3165,0x5762,0x3278,0x5767,0x0000,0x0000,0x0000,0x3631, +0x0000,0x5764,0x0000,0x744D,0x0000,0x744E,0x0000,0x0000, +0x0000,0x0000,0x576A,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x576C,0x5776,0x5774,0x0000,0x0000,0x5771,0x744F, +0x0000,0x0000,0x5770,0x4E78,0x844B,0x5772,0x0000,0x0000, +0x3632,0x0000,0x3931,0x0000,0x0000,0x3D7A,0x0000,0x0000, +0x0000,0x5779,0x576B,0x0000,0x0000,0x0000,0x0000,0x576F, +0x575F,0x0000,0x327A,0x5773,0x5775,0x4351,0x0000,0x0000, +0x3A28,0x3238,0x576D,0x5778,0x5777,0x3633,0x0000,0x4229, +0x3366,0x0000,0x0000,0x0000,0x0000,0x3743,0x0000,0x576E, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x844C, +0x0000,0x577A,0x0000,0x577D,0x5821,0x0000,0x0000,0x0000, +0x0000,0x3C3D,0x844D,0x5827,0x4470,0x577B,0x0000,0x0000, +0x0000,0x0000,0x5825,0x0000,0x3279,0x844E,0x5823,0x5824, +0x0000,0x0000,0x577E,0x5822,0x0000,0x7451,0x7452,0x3867, +0x4D2A,0x0000,0x0000,0x3435,0x0000,0x0000,0x3159,0x5826, +0x844F,0x473A,0x302D,0x0000,0x0000,0x0000,0x0000,0x0000, +0x8451,0x8452,0x4861,0x575C,0x582C,0x5830,0x4C65,0x0000, +0x5829,0x0000,0x0000,0x0000,0x4569,0x582E,0x8453,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x3E70,0x582F,0x4657, +0x8454,0x0000,0x0000,0x7453,0x0000,0x0000,0x0000,0x0000, +0x0000,0x4F47,0x0000,0x582B,0x7454,0x7455,0x0000,0x0000, +0x5831,0x8455,0x397B,0x8456,0x404B,0x7456,0x0000,0x3054, +0x582A,0x5828,0x0000,0x415A,0x0000,0x0000,0x0000,0x577C, +0x3B34,0x0000,0x0000,0x0000,0x0000,0x0000,0x8457,0x0000, +0x4246,0x583D,0x8458,0x415B,0x5838,0x8459,0x5835,0x5836, +0x7457,0x3C66,0x5839,0x583C,0x0000,0x0000,0x0000,0x0000, + +/* 6100h */ +0x5837,0x3D25,0x0000,0x583A,0x0000,0x0000,0x5834,0x0000, +0x4C7C,0x4C7B,0x0000,0x0000,0x0000,0x583E,0x583F,0x3055, +0x845A,0x0000,0x845B,0x845C,0x0000,0x5833,0x0000,0x0000, +0x0000,0x845D,0x3672,0x3026,0x7458,0x0000,0x845E,0x3436, +0x0000,0x583B,0x0000,0x0000,0x0000,0x0000,0x0000,0x5843, +0x5842,0x0000,0x0000,0x7459,0x5847,0x0000,0x0000,0x0000, +0x745A,0x0000,0x0000,0x0000,0x5848,0x0000,0x0000,0x745B, +0x0000,0x0000,0x845F,0x0000,0x5846,0x5849,0x5841,0x5845, +0x0000,0x8461,0x584A,0x0000,0x584B,0x0000,0x8462,0x5840, +0x3B7C,0x0000,0x5844,0x4256,0x3932,0x5832,0x3F35,0x0000, +0x0000,0x0000,0x0000,0x5858,0x0000,0x4A69,0x0000,0x0000, +0x584E,0x584F,0x5850,0x0000,0x0000,0x5857,0x0000,0x5856, +0x8463,0x0000,0x4B7D,0x3437,0x0000,0x5854,0x0000,0x3745, +0x3334,0x0000,0x0000,0x5851,0x0000,0x0000,0x4E38,0x5853, +0x3056,0x5855,0x0000,0x584C,0x5852,0x5859,0x3744,0x584D, +0x0000,0x0000,0x0000,0x0000,0x8464,0x0000,0x4D5D,0x0000, +0x0000,0x0000,0x4D2B,0x0000,0x0000,0x0000,0x0000,0x585C, +0x0000,0x0000,0x5860,0x0000,0x0000,0x745D,0x417E,0x0000, +0x4E79,0x5861,0x8466,0x8467,0x585E,0x0000,0x585B,0x8468, +0x8469,0x585A,0x585F,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x4A30,0x846A,0x0000,0x4634, +0x846B,0x3746,0x0000,0x5862,0x585D,0x846C,0x5863,0x0000, +0x0000,0x0000,0x377B,0x0000,0x0000,0x0000,0x3231,0x0000, +0x0000,0x7460,0x586B,0x0000,0x745F,0x0000,0x3438,0x0000, +0x0000,0x0000,0x0000,0x5869,0x0000,0x0000,0x586A,0x3A29, +0x5868,0x5866,0x5865,0x586C,0x5864,0x586E,0x0000,0x0000, +0x327B,0x0000,0x0000,0x0000,0x0000,0x846E,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x846F,0x0000,0x8470, +0x0000,0x0000,0x0000,0x5870,0x0000,0x0000,0x586F,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x4428,0x0000,0x5873,0x8471,0x5871,0x5867, +0x377C,0x0000,0x5872,0x0000,0x5876,0x5875,0x5877,0x5874, + +/* 6200h */ +0x5878,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x5879,0x587A,0x4A6A,0x0000,0x587C,0x587B,0x3D3F,0x0000, +0x402E,0x3266,0x327C,0x0000,0x587D,0x8473,0x303F,0x0000, +0x0000,0x0000,0x404C,0x587E,0x0000,0x6C43,0x5921,0x3761, +0x0000,0x5922,0x7462,0x8474,0x0000,0x0000,0x406F,0x0000, +0x0000,0x8475,0x5923,0x0000,0x0000,0x0000,0x5924,0x353A, +0x5925,0x0000,0x5926,0x5927,0x4257,0x0000,0x0000,0x0000, +0x384D,0x0000,0x0000,0x4C61,0x0000,0x0000,0x7463,0x4B3C, +0x3D6A,0x5928,0x0000,0x7464,0x0000,0x0000,0x8476,0x4070, +0x6E3D,0x4862,0x0000,0x3C6A,0x8477,0x3A4D,0x5929,0x0000, +0x0000,0x8478,0x8479,0x4247,0x0000,0x4A27,0x7465,0x0000, +0x4271,0x0000,0x7466,0x592C,0x0000,0x0000,0x592A,0x0000, +0x592D,0x847A,0x0000,0x592B,0x847B,0x0000,0x0000,0x0000, +0x592E,0x0000,0x0000,0x0000,0x0000,0x847D,0x4A31,0x7467, +0x0000,0x3037,0x0000,0x847E,0x0000,0x0000,0x495E,0x0000, +0x0000,0x4863,0x0000,0x847C,0x592F,0x0000,0x5932,0x3E35, +0x353B,0x0000,0x5930,0x5937,0x3E36,0x7468,0x0000,0x0000, +0x0000,0x5931,0x4744,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x4D5E,0x5933,0x5934,0x5938,0x456A,0x5935,0x3933, +0x405E,0x8521,0x0000,0x5946,0x4834,0x0000,0x4272,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8522,0x0000, +0x0000,0x0000,0x0000,0x4864,0x5A2D,0x0000,0x0000,0x0000, +0x0000,0x4A7A,0x0000,0x0000,0x0000,0x4471,0x0000,0x0000, +0x0000,0x4B75,0x0000,0x593B,0x3221,0x436A,0x0000,0x0000, +0x0000,0x0000,0x5944,0x0000,0x7469,0x4334,0x593E,0x5945, +0x5940,0x5947,0x5943,0x0000,0x5942,0x476F,0x0000,0x593C, +0x327D,0x593A,0x3571,0x4273,0x5936,0x8523,0x746A,0x5939, +0x3934,0x405B,0x0000,0x3E37,0x5941,0x4752,0x0000,0x0000, +0x3572,0x3348,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x3367,0x3F21,0x5949,0x594E, +0x0000,0x594A,0x0000,0x377D,0x0000,0x594F,0x3B22,0x3969, +0x0000,0x0000,0x0000,0x0000,0x746B,0x8525,0x3D26,0x593D, + +/* 6300h */ +0x0000,0x3B7D,0x594C,0x8526,0x0000,0x0000,0x0000,0x3B58, +0x594D,0x3044,0x746C,0x0000,0x5948,0x8527,0x0000,0x0000, +0x8528,0x4429,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x746D,0x3573,0x0000,0x0000,0x0000,0x0000,0x0000,0x3634, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x594B, +0x3027,0x0000,0x0000,0x3A43,0x0000,0x0000,0x0000,0x3F36, +0x0000,0x0000,0x852B,0x0000,0x0000,0x852C,0x0000,0x0000, +0x0000,0x746E,0x4472,0x852D,0x852E,0x4854,0x5951,0x415E, +0x0000,0x852F,0x0000,0x746F,0x8530,0x0000,0x0000,0x0000, +0x0000,0x422A,0x0000,0x0000,0x3B2B,0x5952,0x8531,0x5954, +0x5950,0x0000,0x0000,0x0000,0x0000,0x4A61,0x0000,0x443D, +0x0000,0x8533,0x0000,0x0000,0x415C,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x7470,0x0000,0x4A7B, +0x3C4E,0x5960,0x0000,0x595F,0x8536,0x0000,0x3F78,0x0000, +0x0000,0x0000,0x377E,0x0000,0x0000,0x0000,0x5959,0x3E39, +0x0000,0x0000,0x4668,0x4731,0x7471,0x0000,0x0000,0x0000, +0x5957,0x0000,0x0000,0x415D,0x8537,0x0000,0x0000,0x0000, +0x3C78,0x595C,0x0000,0x0000,0x3E38,0x0000,0x5956,0x595B, +0x0000,0x0000,0x4753,0x0000,0x853A,0x0000,0x5955,0x0000, +0x3721,0x8538,0x0000,0x335D,0x0000,0x0000,0x0000,0x595D, +0x4E2B,0x3A4E,0x4335,0x595A,0x0000,0x405C,0x0000,0x3935, +0x3F64,0x3166,0x413C,0x5958,0x3545,0x0000,0x0000,0x0000, +0x0000,0x0000,0x3747,0x0000,0x444F,0x595E,0x0000,0x0000, +0x0000,0x0000,0x0000,0x415F,0x0000,0x853B,0x5961,0x0000, +0x5963,0x0000,0x0000,0x4237,0x5969,0x0000,0x5964,0x0000, +0x0000,0x5966,0x0000,0x0000,0x0000,0x0000,0x0000,0x4941, +0x4473,0x0000,0x5967,0x0000,0x853D,0x853E,0x4D2C,0x0000, +0x0000,0x0000,0x4D48,0x3439,0x853F,0x0000,0x0000,0x0000, +0x8540,0x302E,0x0000,0x5965,0x0000,0x7472,0x0000,0x0000, +0x0000,0x5962,0x0000,0x8541,0x8542,0x7473,0x3478,0x0000, +0x0000,0x0000,0x8543,0x0000,0x3167,0x7474,0x5968,0x853C, +0x0000,0x0000,0x4D49,0x0000,0x0000,0x0000,0x0000,0x0000, + +/* 6400h */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x596C,0x0000, +0x0000,0x8544,0x0000,0x0000,0x0000,0x423B,0x0000,0x5973, +0x7475,0x0000,0x0000,0x596D,0x7476,0x0000,0x596A,0x5971, +0x0000,0x0000,0x0000,0x0000,0x5953,0x0000,0x8545,0x0000, +0x0000,0x0000,0x7477,0x0000,0x0000,0x8546,0x596E,0x0000, +0x5972,0x8547,0x0000,0x0000,0x4842,0x456B,0x0000,0x8548, +0x0000,0x0000,0x0000,0x0000,0x596B,0x0000,0x596F,0x0000, +0x0000,0x0000,0x3748,0x0000,0x0000,0x0000,0x3A71,0x0000, +0x0000,0x0000,0x405D,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5977,0x0000, +0x0000,0x7479,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x4526,0x0000,0x8549,0x854A,0x0000,0x854B,0x0000,0x0000, +0x747A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5974, +0x0000,0x4B60,0x0000,0x0000,0x0000,0x747B,0x0000,0x5975, +0x0000,0x0000,0x0000,0x854C,0x0000,0x0000,0x5976,0x0000, +0x4C4E,0x7478,0x4022,0x0000,0x0000,0x854D,0x0000,0x0000, +0x0000,0x0000,0x0000,0x3762,0x0000,0x0000,0x0000,0x854E, +0x597D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x854F,0x3B35,0x597A,0x0000,0x5979,0x0000,0x0000, +0x0000,0x0000,0x4732,0x0000,0x0000,0x8550,0x4635,0x8551, +0x0000,0x0000,0x0000,0x0000,0x4531,0x597B,0x0000,0x0000, +0x0000,0x597C,0x0000,0x496F,0x0000,0x4745,0x3B23,0x0000, +0x4071,0x0000,0x4B50,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x3349,0x0000,0x5A25,0x597E,0x0000,0x747D,0x747E, +0x0000,0x4D4A,0x5A27,0x0000,0x7521,0x5A23,0x0000,0x5A24, +0x0000,0x0000,0x7522,0x8552,0x8553,0x4160,0x747C,0x0000, +0x7523,0x0000,0x5A22,0x0000,0x593F,0x8554,0x0000,0x8555, +0x5A26,0x0000,0x5A21,0x0000,0x0000,0x0000,0x0000,0x0000, +0x5A2B,0x5A2C,0x4527,0x5A2E,0x8557,0x8558,0x3B24,0x5A29, +0x0000,0x0000,0x0000,0x0000,0x353C,0x0000,0x0000,0x5A2F, +0x0000,0x5A28,0x5A33,0x0000,0x5A32,0x0000,0x5A31,0x7524, +0x0000,0x0000,0x5A34,0x7525,0x0000,0x5A36,0x3E71,0x8559, + +/* 6500h */ +0x5A35,0x0000,0x0000,0x0000,0x855A,0x5A39,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x855C, +0x0000,0x0000,0x0000,0x0000,0x855D,0x0000,0x855E,0x0000, +0x5A37,0x0000,0x0000,0x0000,0x5A38,0x5970,0x8560,0x0000, +0x0000,0x0000,0x7526,0x5A3B,0x5A3A,0x0000,0x0000,0x0000, +0x0000,0x7527,0x5978,0x5A3C,0x5A30,0x0000,0x0000,0x3B59, +0x0000,0x0000,0x8561,0x0000,0x5A3D,0x5A3E,0x5A40,0x5A3F, +0x5A41,0x327E,0x0000,0x3936,0x0000,0x0000,0x4A7C,0x402F, +0x0000,0x0000,0x0000,0x0000,0x8562,0x384E,0x0000,0x0000, +0x5A43,0x0000,0x0000,0x0000,0x0000,0x5A46,0x0000,0x4952, +0x0000,0x355F,0x0000,0x0000,0x8563,0x5A45,0x5A44,0x4754, +0x5A47,0x3635,0x0000,0x0000,0x0000,0x5A49,0x5A48,0x0000, +0x0000,0x0000,0x343A,0x3B36,0x0000,0x0000,0x4658,0x7529, +0x0000,0x0000,0x0000,0x8564,0x3749,0x0000,0x0000,0x0000, +0x3F74,0x0000,0x5A4A,0x0000,0x4030,0x4528,0x0000,0x495F, +0x5A4B,0x0000,0x8565,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x8566,0x5A4C,0x5A4D,0x8567,0x8568,0x0000,0x4A38, +0x555D,0x4046,0x8569,0x0000,0x494C,0x0000,0x3A58,0x0000, +0x4865,0x4843,0x0000,0x0000,0x0000,0x0000,0x0000,0x454D, +0x0000,0x4E41,0x0000,0x5A4F,0x3C50,0x752A,0x0000,0x5A50, +0x0000,0x3036,0x0000,0x0000,0x3654,0x404D,0x0000,0x4960, +0x0000,0x0000,0x0000,0x5A51,0x3B42,0x4347,0x0000,0x3B5B, +0x3F37,0x0000,0x856A,0x0000,0x0000,0x856B,0x0000,0x5A52, +0x856C,0x4A7D,0x0000,0x0000,0x3177,0x3B5C,0x0000,0x856D, +0x0000,0x5A55,0x856E,0x5A53,0x5A56,0x4E39,0x5A54,0x0000, +0x0000,0x856F,0x0000,0x407B,0x5A57,0x0000,0x0000,0x4232, +0x0000,0x0000,0x5A58,0x0000,0x8570,0x0000,0x0000,0x347A, +0x0000,0x5A5A,0x0000,0x5A59,0x0000,0x0000,0x0000,0x0000, +0x5A5B,0x5A5C,0x347B,0x0000,0x0000,0x467C,0x4336,0x356C, +0x3B5D,0x4161,0x0000,0x0000,0x3D5C,0x3030,0x0000,0x0000, +0x0000,0x5A5D,0x8572,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x8573,0x3222,0x5A61,0x8574,0x0000,0x0000,0x0000, + +/* 6600h */ +0x752C,0x0000,0x3937,0x5A60,0x8575,0x0000,0x3A2B,0x3E3A, +0x8576,0x752D,0x5A5F,0x0000,0x3E3B,0x0000,0x4C40,0x3A2A, +0x0000,0x0000,0x0000,0x3057,0x404E,0x752E,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x5A66,0x0000,0x752F,0x4031, +0x3147,0x8577,0x7531,0x0000,0x7532,0x3D55,0x0000,0x4B66, +0x3A72,0x0000,0x8578,0x7533,0x0000,0x3E3C,0x0000,0x4027, +0x7534,0x7535,0x0000,0x7536,0x5A65,0x5A63,0x5A64,0x0000, +0x0000,0x0000,0x7530,0x0000,0x436B,0x0000,0x0000,0x5B26, +0x0000,0x5A6A,0x3B7E,0x3938,0x5A68,0x8579,0x0000,0x0000, +0x7538,0x5A69,0x0000,0x3F38,0x7539,0x0000,0x857B,0x5A67, +0x0000,0x857A,0x3B2F,0x0000,0x0000,0x0000,0x0000,0x857E, +0x0000,0x753B,0x753C,0x8621,0x0000,0x5A6C,0x5A6B,0x5A70, +0x0000,0x753D,0x5A71,0x8622,0x5A6D,0x753E,0x3322,0x5A6E, +0x5A6F,0x4855,0x8625,0x8626,0x8627,0x8628,0x4961,0x374A, +0x5A72,0x0000,0x0000,0x753F,0x4032,0x0000,0x3E3D,0x7540, +0x7541,0x0000,0x4352,0x8629,0x0000,0x0000,0x0000,0x0000, +0x862A,0x3647,0x0000,0x5A73,0x5A77,0x0000,0x0000,0x324B, +0x5A74,0x5A76,0x0000,0x0000,0x0000,0x7542,0x5A75,0x0000, +0x862B,0x3D6B,0x862C,0x0000,0x0000,0x0000,0x4348,0x3045, +0x5A78,0x862D,0x0000,0x0000,0x0000,0x5A79,0x0000,0x0000, +0x7544,0x0000,0x442A,0x0000,0x0000,0x0000,0x4E71,0x0000, +0x0000,0x0000,0x0000,0x3B43,0x0000,0x862F,0x4A6B,0x0000, +0x0000,0x8630,0x7545,0x0000,0x4B3D,0x8631,0x0000,0x0000, +0x5B22,0x5A7B,0x0000,0x7546,0x5A7E,0x0000,0x5A7D,0x8633, +0x0000,0x5A7A,0x0000,0x0000,0x5B21,0x0000,0x7547,0x465E, +0x7548,0x5A7C,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5B23,0x0000, +0x0000,0x3D6C,0x5B24,0x754A,0x4D4B,0x4778,0x0000,0x0000, +0x5B25,0x0000,0x0000,0x0000,0x0000,0x0000,0x5B27,0x0000, +0x754B,0x5B28,0x0000,0x0000,0x8635,0x0000,0x0000,0x0000, +0x5B29,0x0000,0x364A,0x3148,0x3939,0x5B2A,0x0000,0x5B2B, +0x3D71,0x4162,0x754C,0x7537,0x5258,0x413E,0x413D,0x4258, + +/* 6700h */ +0x3A47,0x8637,0x0000,0x5072,0x0000,0x8638,0x0000,0x0000, +0x376E,0x4D2D,0x0000,0x4A7E,0x0000,0x497E,0x0000,0x5B2C, +0x0000,0x0000,0x8639,0x754D,0x3A73,0x443F,0x5B2D,0x4F2F, +0x0000,0x863B,0x0000,0x4B3E,0x0000,0x442B,0x5B2E,0x347C, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x5B2F,0x5B30, +0x4C5A,0x0000,0x4C24,0x4B76,0x4B5C,0x3B25,0x5B32,0x0000, +0x0000,0x3C6B,0x0000,0x754F,0x4B51,0x0000,0x5B34,0x5B37, +0x5B36,0x0000,0x3479,0x0000,0x0000,0x3560,0x0000,0x5B33, +0x0000,0x5B35,0x0000,0x0000,0x0000,0x0000,0x5B38,0x7551, +0x7552,0x3F79,0x0000,0x0000,0x863E,0x863F,0x4D7B,0x3049, +0x3A60,0x423C,0x0000,0x3C5D,0x8640,0x0000,0x3E73,0x0000, +0x0000,0x5B3B,0x0000,0x0000,0x454E,0x8641,0x5B39,0x422B, +0x5B3A,0x3E72,0x4C5D,0x5B3C,0x5B3D,0x4D68,0x7550,0x0000, +0x0000,0x0000,0x5B42,0x0000,0x0000,0x393A,0x0000,0x4755, +0x5B3F,0x456C,0x5A5E,0x5A62,0x8645,0x354F,0x8646,0x4747, +0x0000,0x0000,0x0000,0x7553,0x5B41,0x0000,0x3E3E,0x4844, +0x0000,0x7554,0x0000,0x0000,0x0000,0x5B47,0x0000,0x487A, +0x0000,0x5B3E,0x0000,0x5B44,0x5B43,0x0000,0x0000,0x0000, +0x404F,0x0000,0x8648,0x7555,0x0000,0x4B6D,0x0000,0x4E53, +0x7556,0x0000,0x4B67,0x7557,0x324C,0x3B5E,0x0000,0x0000, +0x4F48,0x5B46,0x3F75,0x0000,0x0000,0x0000,0x5B45,0x0000, +0x0000,0x5B40,0x0000,0x0000,0x0000,0x0000,0x0000,0x384F, +0x864C,0x0000,0x864D,0x5B4C,0x5B4A,0x0000,0x324D,0x5B48, +0x5B4E,0x5B54,0x0000,0x7558,0x0000,0x0000,0x0000,0x0000, +0x755A,0x4248,0x0000,0x864E,0x4A41,0x0000,0x5B56,0x0000, +0x864F,0x0000,0x4922,0x0000,0x0000,0x0000,0x5B55,0x4770, +0x4B3F,0x343B,0x8650,0x4077,0x3D40,0x0000,0x0000,0x755B, +0x4453,0x8651,0x4D2E,0x8652,0x0000,0x5B51,0x5B50,0x0000, +0x0000,0x0000,0x5B52,0x0000,0x5B4F,0x0000,0x0000,0x5B57, +0x0000,0x5B4D,0x0000,0x0000,0x5B4B,0x0000,0x5B53,0x5B49, +0x8653,0x436C,0x0000,0x4C78,0x3C46,0x3A74,0x0000,0x8654, +0x0000,0x7559,0x0000,0x3A3A,0x755C,0x0000,0x4B6F,0x3341, + +/* 6800h */ +0x0000,0x755D,0x444E,0x464A,0x3149,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x864B,0x0000,0x0000,0x4072,0x0000,0x0000,0x4034,0x372A, +0x8658,0x0000,0x0000,0x0000,0x0000,0x755F,0x5B59,0x8659, +0x0000,0x393B,0x337C,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x5B5B,0x3374,0x5B61,0x7560,0x865A,0x0000,0x0000, +0x0000,0x7561,0x5B5E,0x865C,0x4073,0x0000,0x0000,0x0000, +0x334B,0x3A2C,0x0000,0x865D,0x334A,0x3A4F,0x865E,0x0000, +0x5B5C,0x3765,0x374B,0x456D,0x865F,0x8660,0x5B5A,0x0000, +0x3046,0x8661,0x0000,0x0000,0x8662,0x5B5D,0x5B5F,0x0000, +0x364D,0x372C,0x755E,0x343C,0x354B,0x8663,0x0000,0x8664, +0x0000,0x5B62,0x0000,0x7562,0x3A79,0x4B71,0x0000,0x3B37, +0x0000,0x0000,0x0000,0x5B63,0x0000,0x0000,0x0000,0x4930, +0x0000,0x0000,0x0000,0x8666,0x0000,0x0000,0x8667,0x0000, +0x0000,0x0000,0x7563,0x0000,0x5B6F,0x7564,0x3233,0x5B64, +0x0000,0x0000,0x8668,0x0000,0x8669,0x0000,0x5B75,0x5B65, +0x0000,0x4E42,0x866A,0x5B6C,0x0000,0x475F,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x5B74,0x0000,0x5B67, +0x866B,0x0000,0x0000,0x3034,0x5B69,0x0000,0x866C,0x393C, +0x866E,0x866F,0x8670,0x5B6B,0x8671,0x5B6A,0x0000,0x5B66, +0x5B71,0x0000,0x3E3F,0x7566,0x0000,0x7567,0x546D,0x3868, +0x4D7C,0x0000,0x8672,0x8673,0x0000,0x5B68,0x0000,0x4474, +0x3323,0x3A2D,0x7568,0x5B60,0x8674,0x5B70,0x3361,0x0000, +0x0000,0x5B6E,0x5B72,0x8675,0x456E,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x867A,0x347E,0x867B,0x5C32,0x0000, +0x7569,0x4C49,0x5B77,0x347D,0x867C,0x5B7E,0x0000,0x867D, +0x756A,0x0000,0x4B40,0x0000,0x5C21,0x5C23,0x867E,0x5C27, +0x5B79,0x8721,0x432A,0x0000,0x0000,0x0000,0x0000,0x456F, +0x5C2B,0x5B7C,0x0000,0x5C28,0x8722,0x8723,0x0000,0x5C22, +0x756B,0x0000,0x0000,0x0000,0x8724,0x756C,0x3F39,0x5C2C, +0x756D,0x756E,0x4033,0x0000,0x0000,0x0000,0x0000,0x8725, +0x0000,0x5C2A,0x343D,0x8676,0x756F,0x0000,0x0000,0x0000, + +/* 6900h */ +0x4F50,0x5B76,0x0000,0x8726,0x5C26,0x3058,0x0000,0x8727, +0x5B78,0x0000,0x7570,0x4C3A,0x5B7D,0x3F22,0x4447,0x5B73, +0x0000,0x0000,0x5C25,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x3F7A,0x5C2F,0x3371,0x3821,0x0000,0x0000,0x0000, +0x0000,0x5C31,0x5B7A,0x5C30,0x0000,0x5C29,0x5B7B,0x0000, +0x5C2D,0x0000,0x5C2E,0x0000,0x0000,0x0000,0x0000,0x0000, +0x5C3F,0x0000,0x0000,0x0000,0x464E,0x7573,0x5C24,0x0000, +0x0000,0x5C3B,0x0000,0x872B,0x0000,0x5C3D,0x0000,0x4458, +0x0000,0x0000,0x7574,0x0000,0x0000,0x0000,0x872D,0x0000, +0x0000,0x7571,0x4D4C,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x4976,0x5C38,0x424A,0x0000,0x7575, +0x0000,0x5C3E,0x413F,0x0000,0x5C35,0x5C42,0x5C41,0x0000, +0x466F,0x5C40,0x466A,0x7576,0x7577,0x0000,0x0000,0x0000, +0x7578,0x872E,0x5C44,0x5C37,0x872F,0x3648,0x5C3A,0x3D5D, +0x0000,0x0000,0x8730,0x4760,0x5C3C,0x364B,0x0000,0x5C34, +0x5C36,0x5C33,0x8731,0x0000,0x4F30,0x335A,0x5C39,0x8732, +0x7579,0x5C43,0x3335,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x3A67,0x0000,0x0000,0x0000,0x315D,0x0000, +0x0000,0x5C54,0x8733,0x0000,0x4F31,0x5C57,0x8735,0x0000, +0x8736,0x0000,0x0000,0x3F3A,0x5C56,0x0000,0x0000,0x0000, +0x5C55,0x0000,0x0000,0x0000,0x0000,0x757B,0x8737,0x5C52, +0x0000,0x0000,0x0000,0x0000,0x0000,0x757C,0x5C46,0x0000, +0x8738,0x5C63,0x5C45,0x0000,0x5C58,0x0000,0x0000,0x8739, +0x0000,0x0000,0x873A,0x5C50,0x873B,0x0000,0x5C4B,0x5C48, +0x873C,0x5C49,0x0000,0x5C51,0x0000,0x0000,0x0000,0x7422, +0x0000,0x0000,0x5C4E,0x393D,0x4448,0x4164,0x5C4C,0x757D, +0x5C47,0x873D,0x0000,0x5C4A,0x0000,0x0000,0x873E,0x0000, +0x4D4D,0x4B6A,0x0000,0x0000,0x0000,0x5C4F,0x5C59,0x0000, +0x0000,0x0000,0x7622,0x8744,0x0000,0x0000,0x0000,0x5C61, +0x5C5A,0x7623,0x7624,0x5C67,0x0000,0x5C65,0x8745,0x8746, +0x0000,0x0000,0x5C60,0x8747,0x8749,0x7625,0x7626,0x0000, +0x0000,0x5C5F,0x0000,0x4450,0x0000,0x4165,0x874A,0x5C5D, + +/* 6A00h */ +0x0000,0x0000,0x5C5B,0x0000,0x0000,0x5C62,0x0000,0x0000, +0x0000,0x0000,0x5C68,0x4875,0x5C6E,0x0000,0x0000,0x7627, +0x0000,0x874B,0x5C69,0x5C6C,0x5C66,0x7628,0x0000,0x4374, +0x0000,0x4938,0x874C,0x5C5C,0x0000,0x874D,0x5C64,0x3E40, +0x0000,0x4C4F,0x5C78,0x5C6B,0x0000,0x0000,0x0000,0x0000, +0x0000,0x3822,0x3223,0x335F,0x0000,0x0000,0x5C53,0x0000, +0x8741,0x0000,0x874F,0x8750,0x8751,0x3E41,0x5C70,0x0000, +0x5C77,0x3C79,0x3372,0x762A,0x0000,0x432E,0x762B,0x8752, +0x0000,0x0000,0x0000,0x0000,0x5C6D,0x762C,0x8753,0x5C72, +0x5C76,0x8754,0x0000,0x3636,0x0000,0x0000,0x8756,0x0000, +0x762D,0x0000,0x8757,0x0000,0x0000,0x0000,0x762E,0x0000, +0x354C,0x5C74,0x0000,0x762F,0x0000,0x0000,0x0000,0x3521, +0x0000,0x464B,0x5C73,0x0000,0x8758,0x0000,0x5C75,0x0000, +0x0000,0x0000,0x0000,0x7630,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x5C6F,0x7631,0x0000,0x0000,0x0000,0x0000, +0x5C71,0x0000,0x8755,0x0000,0x0000,0x0000,0x875A,0x3360, +0x4349,0x0000,0x0000,0x875B,0x5C7C,0x0000,0x0000,0x0000, +0x0000,0x7633,0x0000,0x875C,0x0000,0x5C7A,0x3869,0x0000, +0x5C79,0x875E,0x0000,0x0000,0x7634,0x0000,0x0000,0x5D21, +0x0000,0x0000,0x0000,0x0000,0x5B58,0x7635,0x7636,0x875F, +0x5C7B,0x8760,0x5C7D,0x5C7E,0x0000,0x7637,0x0000,0x0000, +0x0000,0x0000,0x5D2C,0x8762,0x5D28,0x0000,0x5B6D,0x0000, +0x0000,0x0000,0x0000,0x5D27,0x0000,0x0000,0x0000,0x0000, +0x5D26,0x0000,0x0000,0x5D23,0x0000,0x8763,0x0000,0x0000, +0x0000,0x5C6A,0x5D25,0x5D24,0x0000,0x0000,0x8764,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x8766,0x5D2A,0x0000,0x4F26,0x8765,0x0000,0x0000,0x0000, +0x0000,0x0000,0x5D2D,0x367B,0x8767,0x8768,0x5D29,0x5D2B, +0x0000,0x0000,0x0000,0x0000,0x7638,0x0000,0x0000,0x7639, +0x4827,0x0000,0x5D2E,0x0000,0x876B,0x0000,0x0000,0x0000, +0x0000,0x876C,0x876D,0x876E,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x5D32,0x5D2F,0x0000,0x876F,0x0000,0x0000, + +/* 6B00h */ +0x0000,0x0000,0x0000,0x0000,0x4D73,0x5D30,0x0000,0x0000, +0x0000,0x0000,0x5C5E,0x8771,0x0000,0x0000,0x0000,0x8772, +0x8773,0x8774,0x5D33,0x0000,0x0000,0x0000,0x5D34,0x8776, +0x0000,0x0000,0x0000,0x763C,0x0000,0x3135,0x763D,0x5D36, +0x3767,0x3C21,0x0000,0x3655,0x0000,0x0000,0x0000,0x3224, +0x0000,0x0000,0x0000,0x0000,0x763E,0x0000,0x0000,0x8778, +0x0000,0x0000,0x4D5F,0x0000,0x0000,0x763F,0x0000,0x5D38, +0x5D37,0x5D3A,0x353D,0x0000,0x0000,0x3656,0x343E,0x0000, +0x0000,0x0000,0x0000,0x5D3D,0x0000,0x0000,0x7640,0x5D3C, +0x0000,0x5D3E,0x8779,0x0000,0x324E,0x0000,0x4337,0x0000, +0x5D3F,0x0000,0x0000,0x343F,0x5D41,0x0000,0x7641,0x0000, +0x877A,0x5D40,0x0000,0x5D42,0x0000,0x0000,0x0000,0x5D43, +0x7642,0x5D44,0x3B5F,0x4035,0x3A21,0x7643,0x4970,0x7644, +0x0000,0x4A62,0x4F44,0x0000,0x877B,0x0000,0x0000,0x3B75, +0x0000,0x0000,0x0000,0x3A50,0x4E72,0x877C,0x0000,0x7645, +0x5D45,0x5D46,0x877D,0x3B60,0x0000,0x0000,0x0000,0x5D47, +0x5D48,0x877E,0x7646,0x5D4A,0x5D49,0x0000,0x4B58,0x0000, +0x0000,0x3D5E,0x3C6C,0x3B44,0x0000,0x5D4B,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x5D4D,0x3F23,0x0000, +0x5D4C,0x0000,0x0000,0x8821,0x0000,0x0000,0x5D4E,0x0000, +0x0000,0x0000,0x0000,0x0000,0x5D4F,0x0000,0x0000,0x0000, +0x0000,0x7647,0x5D50,0x5D51,0x0000,0x7648,0x8822,0x5D52, +0x0000,0x5D54,0x5D53,0x5D55,0x3225,0x434A,0x0000,0x5D56, +0x0000,0x0000,0x3B26,0x334C,0x5D57,0x8824,0x8825,0x4542, +0x544C,0x0000,0x0000,0x0000,0x0000,0x3523,0x5D58,0x8826, +0x8827,0x8828,0x0000,0x5D59,0x0000,0x4A6C,0x4B68,0x764A, +0x0000,0x0000,0x4647,0x5D5A,0x4866,0x0000,0x764B,0x764C, +0x487B,0x0000,0x8829,0x4C53,0x0000,0x0000,0x0000,0x5D5B, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x882A,0x882B, +0x0000,0x0000,0x0000,0x5D5D,0x5D5C,0x0000,0x882C,0x5D5F, +0x0000,0x882D,0x0000,0x5D5E,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x764D, + +/* 6C00h */ +0x0000,0x0000,0x882E,0x0000,0x0000,0x764E,0x0000,0x0000, +0x5D61,0x0000,0x882F,0x0000,0x0000,0x0000,0x8830,0x3B61, +0x764F,0x4C31,0x0000,0x5D62,0x5D63,0x0000,0x0000,0x3524, +0x0000,0x0000,0x0000,0x5D64,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x5D66,0x5D65,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x7650,0x3F65,0x8831,0x8832,0x4939, +0x314A,0x0000,0x8833,0x0000,0x0000,0x0000,0x4845,0x8835, +0x4475,0x3D41,0x3561,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x8836,0x4846,0x0000, +0x3C2E,0x0000,0x0000,0x0000,0x0000,0x5D68,0x0000,0x3440, +0x0000,0x7651,0x3178,0x8837,0x7652,0x4672,0x5D67,0x393E, +0x4353,0x0000,0x5D69,0x0000,0x0000,0x0000,0x0000,0x884F, +0x5D71,0x0000,0x5D6A,0x0000,0x0000,0x8838,0x0000,0x0000, +0x4241,0x0000,0x3562,0x5D72,0x7654,0x0000,0x7655,0x0000, +0x0000,0x0000,0x3768,0x0000,0x0000,0x3525,0x5D70,0x0000, +0x0000,0x5D6E,0x5D6B,0x4D60,0x8839,0x7656,0x7657,0x0000, +0x4440,0x883A,0x0000,0x0000,0x4659,0x5D6C,0x0000,0x0000, +0x5D74,0x0000,0x5D73,0x3723,0x883C,0x883D,0x322D,0x883E, +0x7658,0x3A3B,0x5D6D,0x5D6F,0x7659,0x0000,0x0000,0x0000, +0x0000,0x4B57,0x4274,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x7653,0x4B77,0x0000,0x883F,0x5D7C,0x0000, +0x0000,0x5D7D,0x0000,0x324F,0x0000,0x0000,0x0000,0x0000, +0x4A28,0x4C7D,0x5E21,0x3C23,0x3E42,0x5D78,0x5D7E,0x3168, +0x0000,0x3637,0x8840,0x0000,0x5D75,0x5D7A,0x765B,0x0000, +0x0000,0x4074,0x4771,0x0000,0x4867,0x0000,0x0000,0x0000, +0x8841,0x0000,0x0000,0x5D77,0x765C,0x4B21,0x8843,0x5D79, +0x0000,0x5E24,0x8844,0x5E22,0x8845,0x5D7B,0x0000,0x0000, +0x765D,0x4B22,0x4748,0x3563,0x0000,0x4525,0x0000,0x0000, +0x436D,0x8846,0x5E25,0x765E,0x8847,0x8848,0x765F,0x5E23, +0x4259,0x5D76,0x0000,0x314B,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x765A,0x0000,0x0000,0x0000,0x0000, + +/* 6D00h */ +0x884A,0x0000,0x0000,0x0000,0x7661,0x0000,0x0000,0x0000, +0x0000,0x0000,0x884B,0x4D4E,0x5E30,0x0000,0x7662,0x0000, +0x0000,0x0000,0x5E2F,0x0000,0x0000,0x0000,0x0000,0x4076, +0x0000,0x5E2C,0x0000,0x4D6C,0x0000,0x0000,0x4636,0x5E26, +0x0000,0x0000,0x0000,0x0000,0x884C,0x4445,0x884D,0x884E, +0x0000,0x314C,0x393F,0x5E29,0x0000,0x0000,0x7663,0x8850, +0x0000,0x7664,0x3D27,0x5E2E,0x8865,0x5E2D,0x5E28,0x0000, +0x5E2B,0x7665,0x0000,0x3368,0x8851,0x5E2A,0x4749,0x7666, +0x0000,0x4E2E,0x0000,0x0000,0x3E74,0x4075,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x7667,0x5E36,0x5E34,0x8852,0x494D,0x0000,0x8853,0x0000, +0x8854,0x0000,0x0000,0x5E31,0x5E33,0x7668,0x313A,0x0000, +0x0000,0x3940,0x4F32,0x0000,0x333D,0x0000,0x4962,0x0000, +0x8855,0x0000,0x0000,0x0000,0x4D61,0x0000,0x0000,0x3324, +0x3F3B,0x5E35,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x8856,0x8857,0x766A,0x0000,0x0000,0x5E3A,0x0000,0x766B, +0x3E43,0x766C,0x8858,0x0000,0x4D30,0x8859,0x5E37,0x0000, +0x0000,0x885A,0x0000,0x5E32,0x766D,0x5E38,0x0000,0x0000, +0x885B,0x4E5E,0x0000,0x4573,0x4642,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x766E,0x8861,0x766F,0x0000,0x8862,0x3336, +0x0000,0x0000,0x3155,0x0000,0x8863,0x5E3E,0x0000,0x0000, +0x5E41,0x0000,0x0000,0x0000,0x4E43,0x0000,0x0000,0x7670, +0x4D64,0x0000,0x8864,0x0000,0x7671,0x5E48,0x5E42,0x5E3F, +0x8866,0x0000,0x0000,0x4E54,0x5E45,0x0000,0x8867,0x8868, +0x8869,0x3D4A,0x5E47,0x0000,0x0000,0x5E4C,0x7672,0x0000, +0x4571,0x5E4A,0x7673,0x7674,0x0000,0x7675,0x5E44,0x886A, +0x0000,0x4338,0x0000,0x0000,0x5E4B,0x0000,0x5E40,0x0000, +0x5E46,0x886B,0x5E4D,0x307C,0x5E43,0x0000,0x5E4E,0x0000, +0x0000,0x3F3C,0x0000,0x3D5F,0x0000,0x4A25,0x886C,0x3A2E, +0x0000,0x5E3B,0x5E49,0x453A,0x7676,0x0000,0x0000,0x0000, + +/* 6E00h */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x4036,0x0000,0x3369, +0x3A51,0x3E44,0x5E3D,0x3D42,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x374C,0x0000,0x5E3C,0x0000,0x885D, +0x0000,0x5E52,0x3D6D,0x383A,0x0000,0x5E61,0x886E,0x5E5B, +0x3574,0x454F,0x886F,0x5E56,0x5E5F,0x302F,0x3132,0x8870, +0x0000,0x3239,0x0000,0x5E58,0x422C,0x5E4F,0x5E51,0x3941, +0x0000,0x0000,0x8872,0x0000,0x7678,0x0000,0x886D,0x0000, +0x5E62,0x0000,0x5E5D,0x0000,0x8873,0x0000,0x5E55,0x0000, +0x0000,0x0000,0x0000,0x5E5C,0x7679,0x0000,0x0000,0x0000, +0x8874,0x8875,0x4C2B,0x8876,0x8877,0x5E5A,0x5E5E,0x8878, +0x0000,0x8879,0x0000,0x887A,0x887B,0x0000,0x3850,0x887C, +0x3E45,0x0000,0x0000,0x4339,0x767A,0x0000,0x767B,0x5E54, +0x0000,0x0000,0x0000,0x887D,0x0000,0x0000,0x0000,0x4D2F, +0x0000,0x0000,0x0000,0x5E57,0x0000,0x0000,0x5E50,0x4572, +0x0000,0x0000,0x5E53,0x0000,0x0000,0x0000,0x5E59,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4F51,0x3C3E, +0x4B7E,0x0000,0x5E63,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x482E,0x0000,0x0000,0x5E6F, +0x383B,0x0000,0x0000,0x8921,0x0000,0x0000,0x3D60,0x0000, +0x5E65,0x0000,0x0000,0x0000,0x4E2F,0x3942,0x0000,0x5E72, +0x0000,0x0000,0x306E,0x0000,0x0000,0x5E70,0x0000,0x8922, +0x0000,0x0000,0x5E64,0x767C,0x0000,0x0000,0x0000,0x5E6A, +0x0000,0x767D,0x5E6C,0x0000,0x8923,0x0000,0x4D4F,0x5E67, +0x0000,0x0000,0x452E,0x0000,0x0000,0x5E69,0x0000,0x8924, +0x0000,0x767E,0x5E71,0x8925,0x5E6B,0x4C47,0x0000,0x7721, +0x0000,0x5E66,0x8926,0x3C22,0x5E7E,0x0000,0x7722,0x0000, +0x0000,0x336A,0x0000,0x5E68,0x5E6D,0x5E6E,0x0000,0x0000, +0x0000,0x8927,0x0000,0x0000,0x0000,0x426C,0x425A,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x8929,0x5E76,0x0000,0x0000,0x5E7C, +0x0000,0x0000,0x5E7A,0x0000,0x4529,0x0000,0x0000,0x5F23, +0x5E77,0x892A,0x0000,0x892B,0x0000,0x0000,0x5E78,0x5E60, + +/* 6F00h */ +0x0000,0x3579,0x493A,0x0000,0x0000,0x0000,0x3C3F,0x0000, +0x0000,0x3977,0x892C,0x0000,0x892D,0x0000,0x0000,0x4F33, +0x7723,0x5E74,0x0000,0x5F22,0x3169,0x4166,0x0000,0x0000, +0x892E,0x0000,0x7724,0x0000,0x0000,0x0000,0x0000,0x0000, +0x4779,0x0000,0x3441,0x4E7A,0x0000,0x892F,0x0000,0x0000, +0x0000,0x0000,0x7726,0x4C21,0x4452,0x0000,0x0000,0x7727, +0x0000,0x5E7B,0x5E7D,0x7728,0x0000,0x8928,0x8930,0x0000, +0x4132,0x0000,0x0000,0x0000,0x8931,0x0000,0x5F21,0x5E79, +0x0000,0x5E73,0x0000,0x0000,0x0000,0x3443,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x7729,0x8933,0x0000,0x3769,0x0000,0x0000,0x8934, +0x5F2F,0x772A,0x8935,0x5F2A,0x4078,0x0000,0x772B,0x3363, +0x8936,0x772C,0x772D,0x0000,0x3D61,0x0000,0x5F33,0x0000, +0x8937,0x0000,0x0000,0x0000,0x0000,0x5F2C,0x442C,0x5F29, +0x4459,0x0000,0x0000,0x0000,0x5F4C,0x0000,0x0000,0x0000, +0x5F26,0x0000,0x5F25,0x0000,0x5F2E,0x8939,0x772E,0x0000, +0x5F28,0x5F27,0x5F2D,0x0000,0x4021,0x0000,0x5F24,0x0000, +0x772F,0x0000,0x0000,0x0000,0x7730,0x7731,0x5F30,0x0000, +0x893A,0x5F31,0x0000,0x0000,0x7732,0x0000,0x893B,0x3442, +0x8938,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x893D, +0x7733,0x5F36,0x0000,0x5F35,0x5F37,0x893E,0x0000,0x7734, +0x0000,0x0000,0x5F3A,0x0000,0x0000,0x0000,0x0000,0x893F, +0x0000,0x4543,0x0000,0x5F34,0x0000,0x8941,0x7735,0x0000, +0x0000,0x5F38,0x0000,0x0000,0x7736,0x0000,0x893C,0x0000, +0x3763,0x4279,0x5F32,0x473B,0x0000,0x0000,0x5F39,0x7737, +0x8942,0x8943,0x7738,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x5F3E,0x5F3C,0x0000,0x0000, +0x5F3F,0x0000,0x8944,0x5F42,0x0000,0x0000,0x8945,0x5F3B, +0x396A,0x4728,0x0000,0x0000,0x5E39,0x0000,0x0000,0x0000, +0x0000,0x8946,0x0000,0x4D74,0x5F3D,0x0000,0x5F41,0x4275, +0x773A,0x5F40,0x0000,0x5F2B,0x0000,0x773B,0x6F69,0x0000, +0x0000,0x7739,0x5F45,0x0000,0x8948,0x0000,0x5F49,0x0000, + +/* 7000h */ +0x8949,0x5F47,0x0000,0x0000,0x0000,0x773C,0x773D,0x894A, +0x0000,0x5F43,0x894B,0x5F44,0x0000,0x0000,0x0000,0x5F48, +0x0000,0x5F46,0x0000,0x0000,0x0000,0x494E,0x0000,0x0000, +0x5F4E,0x0000,0x5F4B,0x5F4A,0x0000,0x5F4D,0x4654,0x5F4F, +0x0000,0x0000,0x0000,0x894C,0x0000,0x0000,0x4375,0x426D, +0x773E,0x0000,0x0000,0x0000,0x4025,0x0000,0x0000,0x0000, +0x5F50,0x0000,0x5F52,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x894E,0x894F,0x0000,0x8950,0x0000,0x5F51,0x0000, +0x0000,0x0000,0x0000,0x8951,0x0000,0x0000,0x0000,0x8952, +0x0000,0x0000,0x773F,0x8953,0x5E75,0x0000,0x7742,0x0000, +0x0000,0x5F53,0x0000,0x0000,0x8955,0x0000,0x0000,0x0000, +0x4667,0x0000,0x0000,0x0000,0x0000,0x7740,0x7741,0x0000, +0x0000,0x0000,0x0000,0x5F54,0x7743,0x8956,0x0000,0x0000, +0x0000,0x8957,0x0000,0x3250,0x8958,0x0000,0x8959,0x4574, +0x3325,0x0000,0x0000,0x0000,0x0000,0x7744,0x895A,0x0000, +0x3564,0x0000,0x0000,0x0000,0x3C5E,0x3A52,0x895B,0x0000, +0x0000,0x895C,0x0000,0x0000,0x0000,0x7745,0x895D,0x0000, +0x0000,0x4F27,0x3F66,0x0000,0x0000,0x0000,0x316A,0x0000, +0x0000,0x0000,0x5F56,0x0000,0x0000,0x895E,0x0000,0x895F, +0x0000,0x5F55,0x0000,0x0000,0x0000,0x0000,0x0000,0x8962, +0x0000,0x0000,0x0000,0x0000,0x7746,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x7747,0x5F59,0x433A,0x5F5C,0x5F57, +0x0000,0x8963,0x0000,0x5F5B,0x0000,0x0000,0x0000,0x7748, +0x5F5A,0x4540,0x3059,0x8960,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x4E75,0x0000,0x8966,0x5F5E,0x0000,0x0000,0x0000,0x3128, +0x0000,0x8967,0x0000,0x8968,0x7749,0x0000,0x0000,0x0000, +0x774A,0x5F60,0x0000,0x0000,0x8969,0x5F5F,0x0000,0x5F5D, +0x0000,0x0000,0x0000,0x0000,0x774B,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x8965,0x0000,0x0000,0x0000, +0x0000,0x5F58,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x4B23,0x0000,0x0000,0x0000,0x5F62,0x0000,0x0000, + +/* 7100h */ +0x0000,0x0000,0x0000,0x896A,0x896B,0x0000,0x896C,0x896D, +0x896E,0x5F61,0x0000,0x0000,0x896F,0x0000,0x0000,0x774C, +0x0000,0x0000,0x0000,0x0000,0x316B,0x0000,0x0000,0x0000, +0x0000,0x5F64,0x4A32,0x0000,0x5F63,0x0000,0x774E,0x0000, +0x774F,0x4C35,0x0000,0x0000,0x0000,0x0000,0x3E47,0x0000, +0x0000,0x0000,0x0000,0x774D,0x0000,0x0000,0x7750,0x8971, +0x7751,0x8972,0x0000,0x0000,0x0000,0x0000,0x4133,0x0000, +0x0000,0x0000,0x0000,0x0000,0x3E46,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7752,0x7753, +0x0000,0x4E7B,0x8974,0x0000,0x5F6A,0x0000,0x4079,0x0000, +0x8973,0x7754,0x7756,0x8975,0x0000,0x5F66,0x5F6B,0x0000, +0x0000,0x316C,0x0000,0x0000,0x7757,0x0000,0x8976,0x0000, +0x7758,0x0000,0x5F69,0x0000,0x4761,0x5F65,0x5F68,0x3E48, +0x7759,0x4851,0x0000,0x0000,0x5F6C,0x0000,0x3C51,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x407A,0x0000,0x0000, +0x8979,0x0000,0x0000,0x0000,0x5F6F,0x775B,0x0000,0x775C, +0x5F67,0x0000,0x3727,0x0000,0x0000,0x0000,0x0000,0x5F6D, +0x0000,0x0000,0x775D,0x0000,0x4D50,0x5F70,0x8978,0x0000, +0x0000,0x7426,0x0000,0x897A,0x0000,0x0000,0x0000,0x3D4F, +0x897B,0x0000,0x897C,0x0000,0x0000,0x0000,0x0000,0x0000, +0x5F71,0x0000,0x0000,0x0000,0x5F72,0x0000,0x897D,0x897E, +0x0000,0x472E,0x0000,0x8A21,0x0000,0x0000,0x0000,0x0000, +0x0000,0x5F74,0x775F,0x0000,0x0000,0x0000,0x5F75,0x0000, +0x0000,0x775E,0x0000,0x4733,0x7760,0x0000,0x0000,0x0000, +0x4575,0x5F77,0x0000,0x8A23,0x0000,0x0000,0x5F79,0x0000, +0x4E55,0x0000,0x5F76,0x8A24,0x5F78,0x316D,0x0000,0x5F73, +0x0000,0x8A25,0x0000,0x0000,0x8A26,0x0000,0x0000,0x535B, +0x5F7A,0x0000,0x0000,0x0000,0x0000,0x4167,0x3B38,0x5F7C, +0x0000,0x0000,0x0000,0x0000,0x5F7B,0x3F24,0x5259,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x5F7D,0x0000,0x0000, +0x0000,0x6021,0x0000,0x5F6E,0x5F7E,0x0000,0x7761,0x6022, + +/* 7200h */ +0x7762,0x0000,0x0000,0x0000,0x0000,0x0000,0x477A,0x8A27, +0x0000,0x0000,0x0000,0x0000,0x0000,0x6023,0x0000,0x0000, +0x6024,0x0000,0x0000,0x0000,0x0000,0x7763,0x0000,0x0000, +0x0000,0x0000,0x0000,0x6025,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x6026,0x0000,0x445E,0x8A2A,0x6028,0x6027,0x0000,0x0000, +0x6029,0x0000,0x602A,0x0000,0x8A2B,0x3C5F,0x4963,0x0000, +0x8A2C,0x8A2D,0x4C6C,0x602B,0x602C,0x4156,0x3C24,0x602D, +0x602E,0x0000,0x8A2F,0x0000,0x0000,0x0000,0x602F,0x4A52, +0x4847,0x0000,0x0000,0x6030,0x4757,0x0000,0x0000,0x0000, +0x0000,0x0000,0x442D,0x8A30,0x0000,0x7764,0x7765,0x8A31, +0x6031,0x3267,0x0000,0x356D,0x0000,0x4C46,0x0000,0x4C36, +0x0000,0x3234,0x4F34,0x8A32,0x0000,0x0000,0x0000,0x4B52, +0x0000,0x4A2A,0x0000,0x0000,0x0000,0x0000,0x8A34,0x8A35, +0x0000,0x0000,0x4037,0x0000,0x6032,0x0000,0x0000,0x0000, +0x8A36,0x4643,0x0000,0x0000,0x0000,0x3823,0x6033,0x8A37, +0x3A54,0x6035,0x6034,0x0000,0x0000,0x0000,0x0000,0x6036, +0x0000,0x0000,0x0000,0x0000,0x0000,0x7767,0x8A38,0x0000, +0x0000,0x0000,0x6037,0x0000,0x0000,0x0000,0x6038,0x0000, +0x0000,0x0000,0x0000,0x7768,0x0000,0x0000,0x0000,0x0000, +0x353E,0x0000,0x6039,0x0000,0x0000,0x0000,0x0000,0x603A, +0x0000,0x0000,0x0000,0x0000,0x3824,0x8A3A,0x8A3B,0x4848, +0x8A3C,0x8A3D,0x603C,0x0000,0x0000,0x0000,0x3E75,0x0000, +0x0000,0x603B,0x0000,0x0000,0x0000,0x0000,0x7769,0x0000, +0x776A,0x8A3E,0x3638,0x603D,0x603F,0x0000,0x603E,0x0000, +0x0000,0x0000,0x0000,0x0000,0x8A40,0x0000,0x6040,0x0000, +0x3851,0x0000,0x6041,0x0000,0x0000,0x0000,0x0000,0x3669, +0x0000,0x4140,0x0000,0x397D,0x0000,0x0000,0x0000,0x0000, +0x6043,0x6044,0x6042,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x3C6D,0x0000,0x0000,0x4648,0x3639,0x0000,0x0000, +0x0000,0x0000,0x0000,0x8A43,0x0000,0x0000,0x0000,0x6046, +0x432C,0x6045,0x8A44,0x776B,0x4F35,0x4762,0x0000,0x0000, + +/* 7300h */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8A45, +0x0000,0x0000,0x6049,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x8A46,0x0000,0x0000,0x0000,0x604B,0x6048, +0x8A47,0x8A48,0x0000,0x4C54,0x604A,0x604C,0x0000,0x4E44, +0x0000,0x0000,0x0000,0x0000,0x0000,0x6050,0x0000,0x776D, +0x776E,0x604F,0x4376,0x472D,0x8A4B,0x0000,0x3825,0x604E, +0x0000,0x8A4C,0x0000,0x8A4D,0x604D,0x0000,0x4D31,0x4D32, +0x0000,0x8A4A,0x0000,0x0000,0x0000,0x8A4E,0x6051,0x316E, +0x0000,0x0000,0x0000,0x0000,0x3976,0x3B62,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6052,0x6053, +0x7770,0x0000,0x8A4F,0x0000,0x0000,0x0000,0x0000,0x6055, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x3D43,0x0000,0x0000,0x7771,0x0000, +0x6057,0x0000,0x6056,0x8A51,0x8A52,0x0000,0x8A54,0x8A55, +0x6058,0x8A56,0x334D,0x0000,0x0000,0x605A,0x0000,0x8A57, +0x6059,0x0000,0x605C,0x605B,0x7772,0x0000,0x0000,0x0000, +0x0000,0x8A58,0x0000,0x0000,0x383C,0x8A59,0x0000,0x4E28, +0x0000,0x364C,0x8A5A,0x3226,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x8A5B,0x7773,0x366A,0x0000, +0x8A5C,0x0000,0x0000,0x0000,0x8A5D,0x0000,0x8A5E,0x7774, +0x7775,0x0000,0x7776,0x0000,0x0000,0x8A5F,0x7777,0x0000, +0x8A60,0x3461,0x0000,0x7778,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x4E68,0x605E,0x0000,0x8A61,0x0000,0x8A62, +0x0000,0x8A63,0x0000,0x6060,0x8A64,0x0000,0x0000,0x8A65, +0x6061,0x0000,0x3251,0x0000,0x0000,0x8A66,0x0000,0x0000, +0x605D,0x7779,0x3B39,0x8A67,0x0000,0x4441,0x605F,0x777A, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x777B,0x0000, +0x0000,0x777C,0x0000,0x0000,0x0000,0x0000,0x6064,0x0000, +0x3C6E,0x8A68,0x0000,0x777D,0x0000,0x6062,0x0000,0x8A69, +0x0000,0x777E,0x373E,0x0000,0x0000,0x4849,0x6063,0x0000, +0x0000,0x607E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x6069,0x8A6A,0x8A6C,0x0000,0x0000,0x0000,0x383D,0x0000, + +/* 7400h */ +0x0000,0x8A6D,0x0000,0x3565,0x0000,0x6066,0x4D7D,0x7821, +0x0000,0x4E30,0x7822,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x8A6B,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x7823,0x7824,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x4276,0x0000,0x8A6E,0x6068,0x7826,0x0000, +0x7827,0x0000,0x7828,0x7829,0x782A,0x0000,0x782B,0x782C, +0x782D,0x8A6F,0x606A,0x4E56,0x3657,0x487C,0x474A,0x0000, +0x0000,0x8A70,0x606B,0x0000,0x0000,0x0000,0x0000,0x606D, +0x8A72,0x6070,0x0000,0x8A73,0x782E,0x0000,0x782F,0x7830, +0x0000,0x0000,0x0000,0x7831,0x0000,0x8A74,0x0000,0x0000, +0x0000,0x0000,0x8A75,0x8A71,0x0000,0x606C,0x0000,0x7832, +0x0000,0x606F,0x386A,0x314D,0x6071,0x8A76,0x3F70,0x606E, +0x4E5C,0x0000,0x7833,0x6074,0x7424,0x0000,0x0000,0x0000, +0x0000,0x6072,0x6075,0x7834,0x0000,0x7835,0x0000,0x6067, +0x6073,0x8A77,0x0000,0x3A3C,0x0000,0x0000,0x6076,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6077,0x0000, +0x0000,0x8A78,0x0000,0x4D7E,0x0000,0x8A79,0x7836,0x7837, +0x8A7A,0x7838,0x0000,0x6078,0x0000,0x0000,0x0000,0x0000, +0x783D,0x0000,0x8A7C,0x0000,0x0000,0x0000,0x0000,0x8A7D, +0x7839,0x8A7E,0x0000,0x0000,0x783A,0x0000,0x6079,0x783B, +0x8B21,0x8B22,0x6065,0x783C,0x0000,0x8B23,0x783E,0x607A, +0x783F,0x7840,0x8B24,0x8B25,0x0000,0x0000,0x0000,0x0000, +0x3444,0x0000,0x0000,0x0000,0x0000,0x7841,0x0000,0x0000, +0x0000,0x8B26,0x8B28,0x8B27,0x0000,0x3C25,0x0000,0x7842, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x7843,0x7844,0x607B,0x0000,0x0000,0x0000,0x0000,0x607C, +0x0000,0x0000,0x0000,0x0000,0x607D,0x0000,0x8B29,0x0000, +0x8B2A,0x0000,0x7845,0x0000,0x313B,0x0000,0x8B2B,0x0000, +0x6121,0x0000,0x493B,0x6122,0x0000,0x0000,0x3424,0x6123, +0x0000,0x6124,0x0000,0x8B2D,0x0000,0x0000,0x6125,0x8B2C, +0x6127,0x6128,0x6126,0x0000,0x0000,0x0000,0x4953,0x612A, +0x6129,0x0000,0x8B2F,0x0000,0x0000,0x0000,0x0000,0x7846, + +/* 7500h */ +0x0000,0x7847,0x0000,0x612C,0x612B,0x612D,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x612E,0x6130,0x612F,0x0000, +0x0000,0x3979,0x0000,0x6132,0x0000,0x6131,0x0000,0x7848, +0x3445,0x0000,0x3F53,0x0000,0x453C,0x0000,0x6133,0x4038, +0x8B31,0x0000,0x0000,0x3B3A,0x8B32,0x3179,0x6134,0x0000, +0x4D51,0x0000,0x8B33,0x4A63,0x6135,0x0000,0x0000,0x7849, +0x4544,0x4D33,0x3943,0x3F3D,0x0000,0x0000,0x0000,0x434B, +0x5234,0x0000,0x442E,0x3268,0x6136,0x8B36,0x8B37,0x0000, +0x8B38,0x0000,0x0000,0x0000,0x6137,0x0000,0x613C,0x0000, +0x8B39,0x613A,0x6139,0x5A42,0x3326,0x6138,0x8B3A,0x305A, +0x8B3B,0x482A,0x8B3C,0x0000,0x484A,0x0000,0x0000,0x0000, +0x0000,0x4E31,0x613D,0x613B,0x435C,0x4026,0x0000,0x0000, +0x482B,0x0000,0x492D,0x0000,0x613F,0x4E2C,0x374D,0x6140, +0x0000,0x613E,0x4856,0x6141,0x8B3D,0x6142,0x0000,0x784A, +0x305B,0x8B3F,0x8B3E,0x3E76,0x6147,0x0000,0x6144,0x466D, +0x6143,0x784B,0x8B40,0x0000,0x0000,0x8B41,0x8B42,0x3526, +0x0000,0x8B43,0x614A,0x0000,0x0000,0x0000,0x6145,0x6146, +0x0000,0x6149,0x6148,0x4925,0x8B45,0x0000,0x4142,0x4141, +0x0000,0x353F,0x784C,0x0000,0x614B,0x0000,0x0000,0x0000, +0x0000,0x0000,0x614C,0x0000,0x0000,0x614D,0x0000,0x0000, +0x0000,0x0000,0x8B47,0x614F,0x0000,0x614E,0x0000,0x0000, +0x0000,0x0000,0x0000,0x3156,0x0000,0x0000,0x0000,0x0000, +0x8B49,0x6157,0x4868,0x6151,0x0000,0x6153,0x0000,0x8B4A, +0x6155,0x3F3E,0x0000,0x0000,0x6156,0x6154,0x3C40,0x8B4B, +0x8B4C,0x0000,0x6150,0x6152,0x0000,0x4942,0x8B4D,0x3E49, +0x0000,0x0000,0x6159,0x0000,0x0000,0x6158,0x784E,0x8B4E, +0x0000,0x0000,0x615A,0x8B4F,0x3C26,0x3A2F,0x0000,0x0000, +0x4577,0x615B,0x0000,0x444B,0x0000,0x8B50,0x615D,0x8B51, +0x8B52,0x0000,0x4E21,0x615C,0x784F,0x0000,0x0000,0x8B53, +0x0000,0x4169,0x0000,0x0000,0x8B54,0x0000,0x8B55,0x0000, +0x6162,0x8B56,0x6164,0x6165,0x4354,0x0000,0x0000,0x0000, +0x0000,0x8B57,0x6163,0x0000,0x6160,0x0000,0x615E,0x615F, + +/* 7600h */ +0x7850,0x6161,0x7851,0x8B58,0x0000,0x0000,0x0000,0x8B5A, +0x7852,0x6168,0x0000,0x6166,0x0000,0x6167,0x0000,0x8B5B, +0x0000,0x0000,0x0000,0x8B5E,0x0000,0x7853,0x7854,0x0000, +0x8B59,0x7855,0x0000,0x8B5F,0x8B60,0x0000,0x7856,0x6169, +0x616B,0x616C,0x616D,0x0000,0x616E,0x8B62,0x7E7D,0x616A, +0x8B63,0x0000,0x0000,0x0000,0x0000,0x7857,0x0000,0x0000, +0x6170,0x0000,0x0000,0x8B65,0x616F,0x7858,0x0000,0x0000, +0x0000,0x0000,0x0000,0x6171,0x8B64,0x0000,0x0000,0x0000, +0x0000,0x8B68,0x4E45,0x7859,0x0000,0x0000,0x6174,0x6172, +0x6173,0x8B6A,0x0000,0x785A,0x3462,0x0000,0x0000,0x0000, +0x0000,0x0000,0x4C7E,0x0000,0x0000,0x8B6B,0x4A4A,0x0000, +0x6176,0x0000,0x0000,0x0000,0x6175,0x0000,0x0000,0x0000, +0x0000,0x6177,0x6178,0x0000,0x785B,0x785C,0x0000,0x617C, +0x6179,0x617A,0x617B,0x0000,0x617D,0x785D,0x8B6D,0x785E, +0x617E,0x785F,0x6221,0x0000,0x0000,0x0000,0x6222,0x0000, +0x6223,0x0000,0x482F,0x4550,0x6224,0x4772,0x4934,0x0000, +0x6225,0x7860,0x0000,0x6226,0x452A,0x0000,0x3327,0x3944, +0x6227,0x0000,0x0000,0x6228,0x0000,0x0000,0x6229,0x0000, +0x3B29,0x0000,0x0000,0x622B,0x0000,0x8B6E,0x622A,0x0000, +0x0000,0x622C,0x622D,0x7861,0x8B6F,0x7862,0x7863,0x0000, +0x8B71,0x8B70,0x0000,0x0000,0x0000,0x0000,0x7864,0x8B72, +0x8B73,0x0000,0x7865,0x0000,0x0000,0x0000,0x4869,0x8B74, +0x622E,0x0000,0x0000,0x0000,0x622F,0x0000,0x7866,0x7369, +0x6230,0x6231,0x6232,0x0000,0x0000,0x0000,0x0000,0x3B2E, +0x0000,0x0000,0x6233,0x4756,0x0000,0x7867,0x4B5F,0x0000, +0x314E,0x8B76,0x3157,0x0000,0x7868,0x6234,0x7869,0x0000, +0x0000,0x0000,0x6236,0x0000,0x786A,0x0000,0x6235,0x4570, +0x0000,0x0000,0x0000,0x4039,0x5D39,0x0000,0x6237,0x4C41, +0x0000,0x6238,0x0000,0x3446,0x4857,0x6239,0x786B,0x623A, +0x8B78,0x0000,0x623B,0x0000,0x8B79,0x0000,0x4C5C,0x0000, +0x0000,0x786C,0x4C55,0x0000,0x443E,0x0000,0x0000,0x0000, +0x416A,0x0000,0x0000,0x623D,0x786D,0x0000,0x3D62,0x0000, + +/* 7700h */ +0x0000,0x3E4A,0x0000,0x0000,0x6240,0x0000,0x0000,0x623F, +0x623E,0x487D,0x786E,0x3447,0x3829,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8B7B, +0x0000,0x786F,0x8B7C,0x6246,0x0000,0x0000,0x6243,0x3F3F, +0x4C32,0x0000,0x0000,0x0000,0x6242,0x6244,0x6245,0x0000, +0x0000,0x6241,0x0000,0x0000,0x0000,0x8B7D,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x7870,0x8B7E,0x7871,0x6247, +0x6248,0x0000,0x442F,0x0000,0x3463,0x0000,0x0000,0x0000, +0x4365,0x0000,0x0000,0x0000,0x0000,0x0000,0x7872,0x6249, +0x0000,0x0000,0x0000,0x0000,0x0000,0x7873,0x7874,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x8C25,0x0000,0x624A,0x624D,0x7875,0x0000,0x0000,0x7876, +0x8C26,0x3F67,0x7877,0x4644,0x0000,0x624E,0x4B53,0x0000, +0x624B,0x0000,0x8C27,0x624C,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x8C29,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x6251,0x7878,0x0000,0x8C2A,0x8C2B,0x6250,0x624F, +0x7879,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x6253,0x0000,0x0000,0x6252,0x0000, +0x0000,0x6254,0x0000,0x0000,0x787A,0x0000,0x0000,0x0000, +0x0000,0x0000,0x8C2E,0x0000,0x0000,0x0000,0x6256,0x8C2F, +0x6255,0x0000,0x8C30,0x0000,0x8C31,0x4A4D,0x0000,0x0000, +0x0000,0x8C32,0x787B,0x0000,0x3D56,0x4E46,0x0000,0x0000, +0x6257,0x0000,0x0000,0x4637,0x0000,0x0000,0x6258,0x0000, +0x0000,0x6259,0x0000,0x625D,0x625B,0x625C,0x0000,0x625A, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x625E, +0x0000,0x0000,0x0000,0x0000,0x0000,0x625F,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6260, +0x0000,0x0000,0x6261,0x4C37,0x6262,0x0000,0x8C33,0x8C34, +0x787C,0x0000,0x4C70,0x6263,0x8C35,0x434E,0x8C36,0x476A, +0x0000,0x366B,0x8C37,0x0000,0x8C38,0x433B,0x6264,0x363A, +0x8C3A,0x0000,0x0000,0x4050,0x8C3B,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x8C3C,0x6265,0x0000,0x0000,0x0000, + +/* 7800h */ +0x0000,0x0000,0x3A3D,0x0000,0x0000,0x8C3E,0x8C3F,0x0000, +0x0000,0x8C40,0x0000,0x0000,0x6266,0x8C41,0x0000,0x0000, +0x0000,0x0000,0x6267,0x0000,0x3826,0x3A55,0x0000,0x0000, +0x0000,0x8C42,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x6269,0x8C43,0x0000,0x0000,0x0000,0x4556,0x3A56,0x354E, +0x0000,0x0000,0x0000,0x0000,0x8C44,0x787D,0x0000,0x0000, +0x0000,0x0000,0x4B24,0x0000,0x474B,0x0000,0x0000,0x0000, +0x0000,0x0000,0x4557,0x0000,0x0000,0x0000,0x0000,0x395C, +0x0000,0x0000,0x0000,0x7921,0x0000,0x626B,0x0000,0x8C45, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7922,0x7923, +0x0000,0x7924,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x3E4B,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x8C46,0x0000,0x0000,0x0000, +0x7925,0x0000,0x8C47,0x4E32,0x3945,0x0000,0x7926,0x3827, +0x0000,0x0000,0x4823,0x0000,0x626D,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x626F,0x0000,0x0000,0x0000, +0x0000,0x386B,0x0000,0x0000,0x0000,0x0000,0x626E,0x4476, +0x0000,0x0000,0x8C49,0x0000,0x6271,0x3337,0x626C,0x0000, +0x0000,0x486A,0x0000,0x3130,0x8C4A,0x3A6C,0x0000,0x4F52, +0x0000,0x0000,0x6270,0x0000,0x0000,0x8C4C,0x8C4D,0x8C4E, +0x0000,0x0000,0x0000,0x6272,0x8C4B,0x0000,0x0000,0x4A4B, +0x0000,0x4059,0x6274,0x0000,0x0000,0x792A,0x0000,0x6275, +0x7928,0x0000,0x0000,0x0000,0x0000,0x6273,0x0000,0x0000, +0x0000,0x0000,0x334E,0x8C4F,0x627B,0x0000,0x627A,0x0000, +0x0000,0x3C27,0x0000,0x0000,0x0000,0x627C,0x6277,0x0000, +0x8C50,0x0000,0x627D,0x6278,0x8C51,0x0000,0x8C52,0x0000, +0x4858,0x6276,0x0000,0x0000,0x6279,0x8C53,0x0000,0x0000, +0x0000,0x0000,0x6322,0x0000,0x0000,0x0000,0x0000,0x0000, +0x8C54,0x8C55,0x0000,0x0000,0x792B,0x0000,0x8C56,0x6321, +0x4B61,0x0000,0x0000,0x0000,0x627E,0x0000,0x0000,0x306B, +0x0000,0x0000,0x792C,0x0000,0x6324,0x0000,0x0000,0x792E, +0x0000,0x8C57,0x8C58,0x8C59,0x0000,0x6323,0x8C5A,0x0000, + +/* 7900h */ +0x792D,0x3E4C,0x0000,0x0000,0x0000,0x0000,0x0000,0x6325, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4143,0x0000, +0x8C5C,0x6327,0x6326,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x6328,0x0000,0x8C5D,0x792F,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x8C5F,0x6268,0x0000, +0x0000,0x0000,0x626A,0x632A,0x6329,0x0000,0x7930,0x0000, +0x8C5E,0x7931,0x0000,0x0000,0x7932,0x0000,0x0000,0x0000, +0x0000,0x0000,0x3C28,0x8C60,0x4E69,0x0000,0x3C52,0x0000, +0x632B,0x3737,0x0000,0x0000,0x0000,0x7935,0x7936,0x3540, +0x3527,0x3B63,0x8C61,0x0000,0x0000,0x0000,0x0000,0x0000, +0x4D34,0x0000,0x0000,0x6331,0x0000,0x6330,0x4144,0x632D, +0x8C62,0x0000,0x632F,0x8C63,0x793A,0x3D4B,0x3F40,0x632E, +0x632C,0x0000,0x472A,0x0000,0x0000,0x3E4D,0x0000,0x8C65, +0x493C,0x0000,0x0000,0x0000,0x0000,0x3A57,0x0000,0x0000, +0x0000,0x0000,0x8C66,0x0000,0x0000,0x0000,0x0000,0x4578, +0x0000,0x793E,0x6332,0x0000,0x0000,0x0000,0x0000,0x6333, +0x6349,0x3658,0x0000,0x0000,0x4F3D,0x4135,0x0000,0x0000, +0x0000,0x0000,0x6334,0x0000,0x0000,0x3252,0x4477,0x4A21, +0x0000,0x0000,0x0000,0x0000,0x8C67,0x8C68,0x8C69,0x0000, +0x7942,0x0000,0x0000,0x8C6A,0x0000,0x6335,0x0000,0x0000, +0x0000,0x8C6B,0x0000,0x0000,0x0000,0x0000,0x357A,0x6336, +0x0000,0x8C6C,0x6338,0x0000,0x0000,0x0000,0x6339,0x0000, +0x4729,0x7943,0x0000,0x633A,0x8C6D,0x0000,0x0000,0x0000, +0x7944,0x633B,0x633C,0x8C6E,0x0000,0x3659,0x3253,0x4645, +0x3D28,0x3B64,0x8C6F,0x0000,0x0000,0x0000,0x0000,0x8C70, +0x7945,0x633D,0x7946,0x3D29,0x8C71,0x8C72,0x0000,0x0000, +0x0000,0x324A,0x4943,0x0000,0x7948,0x633E,0x8C73,0x0000, +0x486B,0x0000,0x0000,0x0000,0x0000,0x0000,0x7949,0x4145, +0x0000,0x6341,0x0000,0x6342,0x4769,0x0000,0x3F41,0x633F, +0x0000,0x4361,0x0000,0x794A,0x6340,0x794B,0x0000,0x0000, +0x3E4E,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x305C,0x0000,0x0000,0x0000,0x0000, + +/* 7A00h */ +0x3529,0x0000,0x0000,0x794C,0x0000,0x0000,0x0000,0x0000, +0x6343,0x0000,0x8C78,0x4478,0x0000,0x6344,0x4047,0x0000, +0x0000,0x8C79,0x0000,0x0000,0x4C2D,0x8C7A,0x0000,0x4923, +0x6345,0x6346,0x4355,0x8C7B,0x4E47,0x0000,0x8C7C,0x6348, +0x6347,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x8C7E,0x3C6F,0x0000, +0x0000,0x634A,0x3070,0x0000,0x0000,0x0000,0x0000,0x634D, +0x8D21,0x794E,0x0000,0x634B,0x3254,0x374E,0x634C,0x3946, +0x3972,0x0000,0x4A66,0x634E,0x0000,0x0000,0x4B54,0x8D22, +0x0000,0x6350,0x0000,0x0000,0x8D23,0x4051,0x314F,0x323A, +0x302C,0x0000,0x0000,0x0000,0x0000,0x0000,0x8D24,0x634F, +0x0000,0x8D25,0x0000,0x0000,0x8D26,0x794F,0x0000,0x8D27, +0x8D28,0x6351,0x6352,0x3E77,0x0000,0x0000,0x0000,0x8D29, +0x0000,0x6353,0x8D2A,0x334F,0x0000,0x7950,0x0000,0x0000, +0x6355,0x0000,0x0000,0x0000,0x376A,0x8D2B,0x3566,0x0000, +0x8D2C,0x6356,0x3675,0x0000,0x0000,0x6357,0x0000,0x407C, +0x0000,0x464D,0x8D2D,0x4060,0x3A75,0x7952,0x0000,0x0000, +0x6358,0x0000,0x8D2E,0x0000,0x0000,0x0000,0x0000,0x0000, +0x8D2F,0x0000,0x4362,0x416B,0x0000,0x635A,0x635C,0x6359, +0x635B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3722, +0x7953,0x0000,0x0000,0x8D30,0x0000,0x0000,0x0000,0x0000, +0x0000,0x635D,0x3726,0x0000,0x8D31,0x0000,0x3567,0x4D52, +0x635F,0x0000,0x0000,0x7955,0x0000,0x0000,0x6360,0x0000, +0x0000,0x8D34,0x312E,0x7956,0x8D35,0x0000,0x8D36,0x6363, +0x0000,0x0000,0x0000,0x3376,0x6362,0x6361,0x0000,0x6365, +0x635E,0x0000,0x6366,0x4E29,0x8D38,0x6367,0x7957,0x6368, +0x0000,0x8D39,0x5474,0x636A,0x0000,0x6369,0x0000,0x0000, +0x0000,0x636B,0x636C,0x0000,0x4E35,0x636D,0x0000,0x706F, +0x3E4F,0x636E,0x636F,0x3D57,0x0000,0x4638,0x6370,0x8D3A, +0x8D3B,0x0000,0x4328,0x7958,0x0000,0x6371,0x0000,0x433C, +0x6372,0x0000,0x0000,0x0000,0x8D3C,0x0000,0x3625,0x0000, +0x513F,0x435D,0x3C33,0x0000,0x0000,0x7959,0x0000,0x3448, + +/* 7B00h */ +0x0000,0x0000,0x6373,0x0000,0x6422,0x0000,0x6376,0x8D3F, +0x3568,0x0000,0x6375,0x6424,0x0000,0x0000,0x0000,0x6374, +0x0000,0x3E50,0x795A,0x0000,0x0000,0x0000,0x0000,0x0000, +0x6378,0x6379,0x0000,0x452B,0x0000,0x0000,0x637A,0x0000, +0x335E,0x0000,0x0000,0x0000,0x0000,0x3F5A,0x4964,0x8D42, +0x637C,0x0000,0x8D43,0x0000,0x4268,0x795B,0x8D44,0x8D45, +0x0000,0x8D46,0x0000,0x6377,0x0000,0x637B,0x637D,0x0000, +0x0000,0x3A7B,0x0000,0x795C,0x0000,0x8D41,0x0000,0x0000, +0x0000,0x8D4A,0x0000,0x0000,0x0000,0x6426,0x492E,0x795D, +0x4826,0x4579,0x0000,0x365A,0x6425,0x6423,0x795E,0x4835, +0x637E,0x435E,0x457B,0x0000,0x457A,0x8D4C,0x3A76,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x6438,0x0000,0x0000, +0x795F,0x0000,0x0000,0x0000,0x8D4E,0x6428,0x8D4F,0x642A, +0x0000,0x8D50,0x0000,0x0000,0x642D,0x7960,0x642E,0x7961, +0x642B,0x642C,0x7962,0x8D51,0x6429,0x6427,0x0000,0x0000, +0x0000,0x8D4D,0x6421,0x0000,0x0000,0x0000,0x0000,0x8D49, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4A4F,0x3255, +0x0000,0x0000,0x0000,0x6435,0x0000,0x6432,0x0000,0x6437, +0x8D54,0x8D55,0x6436,0x0000,0x4773,0x4C27,0x0000,0x3B3B, +0x6430,0x6439,0x6434,0x8D56,0x6433,0x642F,0x7963,0x6431, +0x0000,0x3449,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x433D,0x0000,0x0000,0x407D,0x0000,0x8D58, +0x0000,0x4822,0x0000,0x0000,0x643E,0x8D59,0x0000,0x0000, +0x4824,0x0000,0x0000,0x0000,0x8D5A,0x0000,0x0000,0x0000, +0x4061,0x643B,0x0000,0x0000,0x484F,0x8D5B,0x643F,0x4A53, +0x0000,0x435B,0x8D5C,0x643A,0x643C,0x0000,0x0000,0x643D, +0x0000,0x0000,0x0000,0x0000,0x8D5F,0x0000,0x8D60,0x7965, +0x0000,0x7966,0x8D61,0x0000,0x0000,0x6440,0x0000,0x0000, +0x3C44,0x0000,0x0000,0x0000,0x4646,0x6445,0x6444,0x0000, +0x0000,0x6441,0x8D62,0x0000,0x0000,0x4F36,0x0000,0x0000, +0x8D63,0x0000,0x0000,0x644A,0x0000,0x0000,0x644E,0x644B, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + +/* 7C00h */ +0x6447,0x7967,0x0000,0x8D64,0x0000,0x0000,0x0000,0x6448, +0x0000,0x0000,0x0000,0x8D65,0x0000,0x644D,0x8D66,0x8D67, +0x0000,0x6442,0x5255,0x6449,0x6443,0x0000,0x0000,0x644C, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7969,0x6452, +0x796A,0x344A,0x0000,0x644F,0x0000,0x0000,0x8D68,0x6450, +0x0000,0x0000,0x6451,0x6454,0x0000,0x0000,0x0000,0x0000, +0x0000,0x7968,0x0000,0x796B,0x0000,0x0000,0x796C,0x6453, +0x4876,0x0000,0x0000,0x0000,0x0000,0x6455,0x4E7C,0x4A6D, +0x645A,0x0000,0x0000,0x6457,0x0000,0x8D69,0x0000,0x0000, +0x0000,0x0000,0x8D6A,0x0000,0x6456,0x4052,0x0000,0x6459, +0x645B,0x8D6B,0x0000,0x0000,0x6458,0x0000,0x645F,0x8D6C, +0x645C,0x796F,0x0000,0x0000,0x0000,0x0000,0x8D6D,0x645D, +0x6446,0x8D6E,0x0000,0x0000,0x645E,0x6460,0x0000,0x0000, +0x0000,0x8D6F,0x0000,0x0000,0x6461,0x7970,0x8D70,0x8D71, +0x8D72,0x0000,0x0000,0x4A46,0x0000,0x6462,0x0000,0x0000, +0x0000,0x7971,0x0000,0x0000,0x0000,0x0000,0x4C62,0x0000, +0x0000,0x364E,0x3729,0x6463,0x0000,0x0000,0x0000,0x0000, +0x0000,0x4A34,0x0000,0x3F68,0x0000,0x4C30,0x0000,0x7972, +0x6464,0x0000,0x4E33,0x0000,0x7973,0x4774,0x0000,0x4146, +0x4734,0x0000,0x0000,0x3D4D,0x0000,0x0000,0x0000,0x3040, +0x7974,0x6469,0x6467,0x0000,0x6465,0x3421,0x8D76,0x3E51, +0x646A,0x0000,0x0000,0x6468,0x0000,0x6466,0x646E,0x0000, +0x0000,0x646D,0x646C,0x646B,0x0000,0x0000,0x8D78,0x8D79, +0x0000,0x646F,0x0000,0x0000,0x7975,0x6470,0x403A,0x8D7A, +0x6471,0x0000,0x6473,0x0000,0x8D7C,0x6472,0x0000,0x0000, +0x8D7E,0x0000,0x3852,0x0000,0x0000,0x8E21,0x4138,0x0000, +0x0000,0x0000,0x6475,0x0000,0x0000,0x7976,0x457C,0x8E23, +0x6474,0x7977,0x0000,0x0000,0x6476,0x7978,0x4A35,0x416C, +0x3947,0x0000,0x6477,0x0000,0x0000,0x0000,0x8E25,0x4E48, +0x0000,0x0000,0x0000,0x8E26,0x0000,0x0000,0x0000,0x6479, +0x0000,0x0000,0x647A,0x0000,0x647B,0x8E28,0x647C,0x0000, +0x3B65,0x0000,0x647D,0x374F,0x0000,0x0000,0x356A,0x0000, + +/* 7D00h */ +0x352A,0x0000,0x6521,0x8E29,0x4C73,0x3948,0x647E,0x7979, +0x797A,0x8E2A,0x6524,0x4C66,0x0000,0x473C,0x0000,0x0000, +0x4933,0x0000,0x8E2C,0x797B,0x3D63,0x6523,0x0000,0x3C53, +0x3949,0x3B66,0x3569,0x4A36,0x6522,0x797C,0x8E2D,0x0000, +0x4147,0x4B42,0x3A77,0x797D,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x3B67,0x445D,0x0000,0x6527,0x4E5F, +0x3A59,0x797E,0x6528,0x3F42,0x0000,0x652A,0x0000,0x0000, +0x0000,0x3E52,0x3A30,0x0000,0x0000,0x8E30,0x8E31,0x6529, +0x8E32,0x7A21,0x3D2A,0x383E,0x4148,0x6525,0x652B,0x8E33, +0x7A22,0x0000,0x0000,0x6526,0x3750,0x0000,0x652E,0x6532, +0x376B,0x0000,0x0000,0x7A23,0x0000,0x0000,0x652D,0x0000, +0x0000,0x8E37,0x8E38,0x6536,0x7A24,0x0000,0x394A,0x0000, +0x0000,0x4D6D,0x303C,0x6533,0x0000,0x0000,0x356B,0x0000, +0x6530,0x0000,0x8E39,0x0000,0x0000,0x0000,0x6531,0x0000, +0x8E3A,0x457D,0x652F,0x652C,0x0000,0x3328,0x4064,0x0000, +0x0000,0x3828,0x7A25,0x0000,0x0000,0x6538,0x0000,0x8E3C, +0x0000,0x0000,0x0000,0x7A26,0x0000,0x0000,0x8E3E,0x0000, +0x8E3F,0x6535,0x0000,0x7A27,0x8E40,0x0000,0x0000,0x6537, +0x0000,0x0000,0x0000,0x6534,0x0000,0x0000,0x0000,0x8E41, +0x0000,0x3751,0x4233,0x6539,0x416E,0x8E43,0x0000,0x6546, +0x7A28,0x0000,0x6542,0x653C,0x0000,0x0000,0x7A29,0x8E44, +0x0000,0x0000,0x8E45,0x6540,0x3C7A,0x305D,0x653B,0x6543, +0x6547,0x394B,0x4C56,0x0000,0x4456,0x653D,0x8E46,0x8E47, +0x6545,0x0000,0x653A,0x433E,0x0000,0x653F,0x303D,0x4C4A, +0x8E48,0x0000,0x7A2A,0x0000,0x0000,0x0000,0x0000,0x653E, +0x0000,0x0000,0x365B,0x486C,0x7A2B,0x0000,0x0000,0x416D, +0x0000,0x4E50,0x3D6F,0x0000,0x0000,0x656E,0x7A2C,0x8E49, +0x6548,0x8E4A,0x407E,0x0000,0x6544,0x6549,0x654B,0x0000, +0x4479,0x654E,0x0000,0x7A2D,0x654A,0x0000,0x8E4B,0x0000, +0x4A54,0x344B,0x0000,0x0000,0x4C4B,0x0000,0x0000,0x305E, +0x0000,0x8E4C,0x654D,0x0000,0x4E7D,0x0000,0x0000,0x0000, +0x0000,0x8E4D,0x0000,0x654C,0x0000,0x0000,0x0000,0x0000, + +/* 7E00h */ +0x0000,0x316F,0x0000,0x0000,0x466C,0x654F,0x0000,0x0000, +0x7A30,0x6556,0x6550,0x6557,0x0000,0x0000,0x0000,0x0000, +0x8E51,0x7A31,0x6553,0x0000,0x0000,0x7A32,0x0000,0x8E52, +0x0000,0x0000,0x0000,0x477B,0x0000,0x8E53,0x3C4A,0x6555, +0x8E54,0x6552,0x6558,0x6551,0x0000,0x0000,0x3D44,0x8E55, +0x7A2F,0x0000,0x0000,0x4B25,0x8E56,0x0000,0x3D4C,0x0000, +0x0000,0x6554,0x6560,0x0000,0x0000,0x655C,0x0000,0x655F, +0x0000,0x655D,0x6561,0x655B,0x0000,0x6541,0x4053,0x0000, +0x0000,0x484B,0x0000,0x655E,0x0000,0x8E57,0x6559,0x7A34, +0x0000,0x0000,0x4121,0x3752,0x0000,0x3D2B,0x0000,0x0000, +0x0000,0x0000,0x7A35,0x0000,0x3F25,0x4136,0x6564,0x0000, +0x0000,0x6566,0x6567,0x0000,0x0000,0x6563,0x6565,0x0000, +0x0000,0x7A36,0x0000,0x0000,0x0000,0x0000,0x655A,0x6562, +0x0000,0x656A,0x6569,0x7E7E,0x0000,0x4B7A,0x0000,0x0000, +0x372B,0x0000,0x0000,0x8E58,0x0000,0x8E59,0x0000,0x0000, +0x0000,0x6568,0x0000,0x656C,0x656B,0x656F,0x8E5A,0x6571, +0x0000,0x0000,0x3B3C,0x656D,0x0000,0x0000,0x8E5B,0x8E5C, +0x6572,0x6573,0x7A37,0x0000,0x6574,0x7A38,0x657A,0x453B, +0x6576,0x8E5E,0x6575,0x6577,0x6578,0x0000,0x6579,0x0000, +0x8E5F,0x0000,0x8E60,0x657B,0x657C,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + +/* 7F00h */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x344C,0x0000, +0x657D,0x0000,0x657E,0x8E63,0x8E62,0x0000,0x8E64,0x0000, +0x0000,0x0000,0x0000,0x8E65,0x8E66,0x6621,0x0000,0x7A39, +0x0000,0x0000,0x0000,0x0000,0x6622,0x6623,0x6624,0x8E67, +0x6625,0x6626,0x8E6A,0x0000,0x6628,0x6627,0x0000,0x0000, +0x6629,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x662A, +0x662B,0x8E6C,0x0000,0x8E6D,0x8E6E,0x0000,0x0000,0x662E, +0x662C,0x662D,0x3A61,0x3753,0x0000,0x8E6F,0x4356,0x0000, +0x4833,0x0000,0x3D70,0x0000,0x0000,0x474D,0x0000,0x486D, +0x662F,0x586D,0x0000,0x0000,0x0000,0x8E70,0x8E71,0x0000, +0x0000,0x0000,0x6630,0x6632,0x0000,0x4D65,0x6631,0x6634, +0x6633,0x0000,0x4D53,0x0000,0x6635,0x0000,0x487E,0x0000, +0x8E73,0x7A3B,0x0000,0x0000,0x6636,0x0000,0x8E76,0x7A3C, +0x0000,0x0000,0x6639,0x0000,0x8E77,0x6638,0x6637,0x0000, +0x0000,0x0000,0x0000,0x663A,0x3732,0x0000,0x0000,0x0000, +0x4122,0x3541,0x0000,0x0000,0x0000,0x8E78,0x663E,0x663B, +0x0000,0x0000,0x663C,0x0000,0x0000,0x0000,0x663F,0x0000, +0x6640,0x663D,0x0000,0x0000,0x0000,0x3129,0x0000,0x7A3D, +0x0000,0x3227,0x0000,0x8E7A,0x0000,0x6642,0x6643,0x0000, +0x0000,0x0000,0x6644,0x0000,0x4D62,0x0000,0x7A3E,0x8E7B, +0x0000,0x0000,0x3D2C,0x0000,0x6646,0x6645,0x0000,0x0000, +0x0000,0x0000,0x0000,0x7A3F,0x0000,0x0000,0x0000,0x7A40, +0x3F69,0x6647,0x0000,0x8E7C,0x0000,0x8E7D,0x6648,0x0000, +0x0000,0x6649,0x0000,0x3465,0x7A41,0x0000,0x7A42,0x8E7E, +0x344D,0x0000,0x8F21,0x664A,0x0000,0x0000,0x0000,0x0000, +0x0000,0x664B,0x7A43,0x4B5D,0x4D63,0x0000,0x0000,0x0000, + +/* 8000h */ +0x4D54,0x4F37,0x8F22,0x394D,0x664E,0x3C54,0x664D,0x0000, +0x8F24,0x0000,0x8F23,0x664F,0x3C29,0x0000,0x8F25,0x0000, +0x4251,0x8F26,0x6650,0x0000,0x7A45,0x394C,0x8F27,0x4C57, +0x6651,0x6652,0x0000,0x0000,0x6653,0x0000,0x0000,0x0000, +0x0000,0x6654,0x0000,0x0000,0x8F28,0x0000,0x7A46,0x0000, +0x6655,0x0000,0x0000,0x0000,0x8F29,0x0000,0x0000,0x0000, +0x8F2A,0x0000,0x0000,0x3C2A,0x0000,0x7A47,0x4C6D,0x7A48, +0x0000,0x0000,0x0000,0x6657,0x7A49,0x433F,0x0000,0x6656, +0x0000,0x0000,0x0000,0x8F2B,0x0000,0x0000,0x6659,0x0000, +0x0000,0x0000,0x6658,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x665A,0x0000,0x0000,0x0000,0x403B,0x0000, +0x665B,0x0000,0x665C,0x0000,0x0000,0x0000,0x4A39,0x665D, +0x0000,0x416F,0x665E,0x0000,0x0000,0x0000,0x8F2C,0x0000, +0x665F,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4E7E, +0x6662,0x8F2D,0x6661,0x6660,0x4430,0x8F2E,0x6663,0x3F26, +0x0000,0x6664,0x0000,0x8F2F,0x0000,0x6665,0x4F38,0x6666, +0x0000,0x0000,0x0000,0x0000,0x6667,0x6669,0x6668,0x4825, +0x0000,0x4679,0x0000,0x4F3E,0x4829,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x666B,0x0000,0x0000,0x3E53,0x0000, +0x492A,0x8F30,0x666C,0x666A,0x8F31,0x344E,0x0000,0x0000, +0x0000,0x3854,0x3B68,0x0000,0x8F32,0x486E,0x0000,0x8F33, +0x0000,0x382A,0x4B43,0x0000,0x666F,0x666D,0x0000,0x394E, +0x0000,0x394F,0x3069,0x0000,0x3A68,0x0000,0x0000,0x0000, +0x8F34,0x0000,0x4759,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x305F,0x6674,0x8F36,0x4340,0x0000, +0x0000,0x0000,0x7A4A,0x0000,0x4758,0x0000,0x425B,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x8F37,0x6676,0x7A4B, +0x8F38,0x6672,0x6675,0x6670,0x0000,0x6673,0x4B26,0x0000, +0x7A4C,0x3855,0x0000,0x0000,0x307D,0x6671,0x8F39,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6678, +0x0000,0x6679,0x0000,0x7A4D,0x4639,0x8F3C,0x0000,0x0000, +0x363B,0x0000,0x0000,0x8F3D,0x6726,0x473D,0x0000,0x0000, + +/* 8100h */ +0x0000,0x0000,0x3B69,0x0000,0x0000,0x363C,0x4048,0x4F46, +0x4C2E,0x6677,0x4054,0x0000,0x0000,0x8F3B,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8F40,0x0000, +0x7A4E,0x0000,0x3553,0x667A,0x0000,0x0000,0x8F41,0x0000, +0x0000,0x0000,0x0000,0x667C,0x8F43,0x0000,0x0000,0x8F44, +0x0000,0x667B,0x0000,0x0000,0x8F45,0x0000,0x0000,0x667D, +0x0000,0x4326,0x0000,0x473E,0x0000,0x8F3F,0x0000,0x0000, +0x0000,0x4431,0x0000,0x0000,0x0000,0x8F47,0x6723,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6722,0x0000, +0x0000,0x0000,0x7A4F,0x667E,0x0000,0x0000,0x3F55,0x0000, +0x4965,0x6725,0x0000,0x6724,0x3950,0x4F53,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6735, +0x7A50,0x0000,0x0000,0x0000,0x0000,0x6729,0x672A,0x7A51, +0x7A52,0x8F49,0x0000,0x3C70,0x0000,0x7A53,0x6728,0x0000, +0x3978,0x6727,0x0000,0x0000,0x672B,0x0000,0x0000,0x0000, +0x4432,0x4A22,0x4123,0x0000,0x0000,0x0000,0x0000,0x425C, +0x672F,0x8F4B,0x6730,0x672C,0x8F4D,0x8F4E,0x0000,0x0000, +0x672D,0x0000,0x672E,0x0000,0x0000,0x0000,0x0000,0x3951, +0x0000,0x0000,0x0000,0x6736,0x0000,0x6732,0x0000,0x0000, +0x8F50,0x0000,0x4966,0x0000,0x4B6C,0x4928,0x0000,0x0000, +0x6731,0x0000,0x0000,0x6734,0x6733,0x0000,0x0000,0x0000, +0x4B44,0x6737,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x6738,0x0000,0x8F51,0x4137,0x0000,0x6739,0x0000,0x0000, +0x673B,0x0000,0x673F,0x7A54,0x0000,0x673C,0x673A,0x473F, +0x673D,0x8F52,0x673E,0x8F53,0x0000,0x0000,0x3232,0x0000, +0x6745,0x6740,0x7A55,0x0000,0x0000,0x6741,0x0000,0x7A56, +0x0000,0x6742,0x0000,0x4221,0x0000,0x0000,0x8F54,0x7A57, +0x6744,0x6743,0x6746,0x8F55,0x0000,0x0000,0x0000,0x6747, +0x6748,0x0000,0x0000,0x3F43,0x8F57,0x3269,0x0000,0x6749, +0x4E57,0x0000,0x3C2B,0x0000,0x8F59,0x3D2D,0x0000,0x0000, +0x0000,0x0000,0x0000,0x3B6A,0x4357,0x0000,0x0000,0x0000, +0x0000,0x0000,0x674A,0x674B,0x3131,0x8F5B,0x674C,0x8F5C, + +/* 8200h */ +0x0000,0x674D,0x674E,0x0000,0x8F5E,0x674F,0x0000,0x6750, +0x363D,0x5A2A,0x6751,0x0000,0x4065,0x6752,0x3C4B,0x0000, +0x6753,0x0000,0x5030,0x0000,0x0000,0x0000,0x6754,0x4A5E, +0x345C,0x8F60,0x0000,0x4124,0x3D58,0x0000,0x4971,0x3D2E, +0x0000,0x8F61,0x8F62,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x6755,0x3952,0x6756,0x484C,0x0000,0x6764,0x0000, +0x0000,0x0000,0x8F64,0x6758,0x8F65,0x4249,0x4775,0x383F, +0x6757,0x4125,0x0000,0x0000,0x8F66,0x0000,0x0000,0x0000, +0x6759,0x0000,0x0000,0x0000,0x0000,0x8F69,0x8F67,0x447A, +0x0000,0x8F68,0x0000,0x8F6B,0x0000,0x0000,0x0000,0x8F6D, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x8F6F, +0x675B,0x675A,0x675D,0x0000,0x8F71,0x675C,0x0000,0x675E, +0x7A5B,0x0000,0x6760,0x8F72,0x675F,0x0000,0x344F,0x0000, +0x6761,0x0000,0x6762,0x6763,0x0000,0x0000,0x3A31,0x4E49, +0x0000,0x6765,0x3F27,0x0000,0x7A5C,0x0000,0x3170,0x6766, +0x6767,0x8F76,0x0000,0x0000,0x0000,0x8F78,0x6768,0x8F79, +0x0000,0x0000,0x0000,0x8F7A,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x8F7B,0x3072,0x0000,0x6769,0x7A5E,0x0000, +0x0000,0x0000,0x676A,0x8F7C,0x0000,0x0000,0x0000,0x0000, +0x0000,0x4967,0x0000,0x0000,0x0000,0x3C47,0x0000,0x676C, +0x0000,0x7A5F,0x0000,0x7A60,0x7A61,0x3329,0x3032,0x8F7D, +0x8F7E,0x7A62,0x0000,0x676B,0x676E,0x474E,0x7A63,0x3F44, +0x0000,0x3256,0x9021,0x4B27,0x9022,0x0000,0x0000,0x7A64, +0x375D,0x365C,0x9023,0x676D,0x9024,0x326A,0x7A65,0x7A66, +0x0000,0x0000,0x0000,0x0000,0x0000,0x3423,0x7A67,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x3171,0x6772,0x4E6A,0x425D,0x7A68,0x0000,0x4944, +0x0000,0x677E,0x0000,0x3257,0x677C,0x0000,0x677A,0x6771, +0x0000,0x676F,0x9025,0x6770,0x0000,0x3C63,0x366C,0x4377, +0x9026,0x0000,0x0000,0x4651,0x0000,0x0000,0x0000,0x0000, +0x0000,0x3151,0x0000,0x6774,0x6773,0x0000,0x0000,0x9027, +0x0000,0x6779,0x6775,0x6778,0x0000,0x7A69,0x7A6A,0x0000, + +/* 8300h */ +0x7A6B,0x7A6C,0x4C50,0x6777,0x3258,0x337D,0x677B,0x9028, +0x9029,0x677D,0x0000,0x0000,0x902A,0x0000,0x3754,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6823,0x682C, +0x682D,0x0000,0x0000,0x902C,0x302B,0x902D,0x0000,0x0000, +0x0000,0x0000,0x7A6E,0x6834,0x0000,0x0000,0x0000,0x0000, +0x3071,0x0000,0x0000,0x682B,0x0000,0x7A6F,0x0000,0x682A, +0x902E,0x6825,0x6824,0x0000,0x6822,0x6821,0x4363,0x0000, +0x427B,0x6827,0x7A70,0x0000,0x902F,0x0000,0x0000,0x0000, +0x6826,0x0000,0x0000,0x7A71,0x9030,0x6829,0x0000,0x7A72, +0x0000,0x4170,0x3755,0x0000,0x0000,0x0000,0x0000,0x3141, +0x6828,0x7A73,0x3953,0x0000,0x902B,0x7A74,0x0000,0x9031, +0x4171,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x7A6D,0x864A,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x683A,0x0000,0x683B,0x0000,0x3259, +0x0000,0x0000,0x0000,0x322E,0x6838,0x7A75,0x0000,0x9033, +0x0000,0x0000,0x0000,0x0000,0x0000,0x682E,0x7A76,0x6836, +0x0000,0x683D,0x6837,0x0000,0x0000,0x9036,0x6835,0x0000, +0x0000,0x0000,0x7A77,0x6776,0x9037,0x9038,0x6833,0x0000, +0x7A78,0x0000,0x682F,0x9039,0x0000,0x903A,0x3450,0x6831, +0x683C,0x0000,0x6832,0x0000,0x0000,0x0000,0x0000,0x7A79, +0x683E,0x7A7A,0x6830,0x477C,0x0000,0x0000,0x0000,0x0000, +0x0000,0x4D69,0x0000,0x0000,0x0000,0x6839,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x684F,0x0000,0x7A7B, +0x7A7C,0x6847,0x0000,0x0000,0x0000,0x3F7B,0x0000,0x7A7D, +0x0000,0x903B,0x3546,0x0000,0x365D,0x0000,0x6842,0x7A7E, +0x903C,0x7B21,0x0000,0x325B,0x903D,0x0000,0x3E54,0x0000, +0x6845,0x0000,0x0000,0x0000,0x3A5A,0x903E,0x0000,0x4551, +0x684A,0x7B22,0x0000,0x0000,0x0000,0x903F,0x0000,0x0000, +0x0000,0x4A6E,0x7B23,0x6841,0x0000,0x0000,0x0000,0x325A, +0x3856,0x4929,0x684B,0x0000,0x683F,0x0000,0x0000,0x6848, +0x0000,0x9040,0x0000,0x6852,0x0000,0x6843,0x0000,0x0000, + +/* 8400h */ +0x0000,0x7B24,0x0000,0x6844,0x463A,0x0000,0x7B25,0x6849, +0x0000,0x0000,0x7B26,0x6846,0x4B28,0x684C,0x3060,0x9041, +0x0000,0x9042,0x0000,0x6840,0x0000,0x9043,0x0000,0x9045, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x684E,0x0000,0x684D,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x476B,0x6854,0x0000,0x685F,0x0000,0x0000,0x0000, +0x0000,0x337E,0x0000,0x0000,0x0000,0x6862,0x0000,0x0000, +0x6850,0x9046,0x0000,0x0000,0x6855,0x4D6E,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x685E,0x0000, +0x7B28,0x4D55,0x9047,0x0000,0x0000,0x0000,0x4E2A,0x9048, +0x0000,0x9049,0x904A,0x0000,0x0000,0x0000,0x0000,0x4378, +0x0000,0x904B,0x904C,0x336B,0x904D,0x0000,0x0000,0x7B29, +0x0000,0x4972,0x6864,0x4621,0x0000,0x904F,0x3031,0x0000, +0x0000,0x685D,0x0000,0x6859,0x4172,0x6853,0x685B,0x6860, +0x7B2A,0x472C,0x0000,0x7B2B,0x0000,0x302A,0x9050,0x6858, +0x9051,0x6861,0x4978,0x0000,0x9052,0x0000,0x0000,0x0000, +0x0000,0x9053,0x685C,0x0000,0x6857,0x7B2C,0x0000,0x0000, +0x0000,0x0000,0x0000,0x3E55,0x0000,0x0000,0x0000,0x0000, +0x3D2F,0x0000,0x0000,0x0000,0x3C2C,0x0000,0x0000,0x9056, +0x0000,0x4C58,0x0000,0x0000,0x4947,0x0000,0x7B2D,0x6867, +0x0000,0x6870,0x0000,0x0000,0x0000,0x0000,0x9057,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x685A,0x0000,0x7B2E, +0x0000,0x0000,0x3377,0x0000,0x7B2F,0x0000,0x0000,0x0000, +0x3E78,0x6865,0x7B30,0x686A,0x4173,0x0000,0x9058,0x6866, +0x7B31,0x686D,0x7B32,0x0000,0x435F,0x0000,0x686E,0x0000, +0x0000,0x4D56,0x6863,0x3338,0x0000,0x6869,0x905A,0x905B, +0x686C,0x4C2C,0x0000,0x905C,0x0000,0x0000,0x686F,0x0000, +0x0000,0x6868,0x686B,0x0000,0x9055,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x905E, +0x0000,0x0000,0x905F,0x0000,0x4B29,0x0000,0x4F21,0x9060, +0x9061,0x9062,0x0000,0x0000,0x6873,0x0000,0x0000,0x0000, +0x0000,0x0000,0x9063,0x0000,0x687A,0x9064,0x0000,0x6872, + +/* 8500h */ +0x3C43,0x0000,0x0000,0x0000,0x0000,0x0000,0x6851,0x0000, +0x0000,0x0000,0x0000,0x0000,0x9065,0x0000,0x0000,0x0000, +0x0000,0x4A4E,0x0000,0x4C22,0x6879,0x6878,0x0000,0x6874, +0x6875,0x0000,0x3136,0x9066,0x0000,0x0000,0x7B35,0x6877, +0x0000,0x6871,0x0000,0x7B36,0x9067,0x9068,0x4455,0x0000, +0x0000,0x0000,0x0000,0x9069,0x6876,0x307E,0x0000,0x7B37, +0x0000,0x0000,0x7B34,0x0000,0x906A,0x4222,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x4A43,0x906F,0x0000, +0x687B,0x6921,0x0000,0x4859,0x0000,0x0000,0x0000,0x0000, +0x687E,0x3E56,0x3C49,0x6923,0x0000,0x0000,0x363E,0x906B, +0x0000,0x9070,0x0000,0x9071,0x0000,0x6924,0x0000,0x4979, +0x687D,0x7B38,0x6856,0x0000,0x0000,0x0000,0x9072,0x0000, +0x0000,0x9073,0x9074,0x687C,0x7B39,0x0000,0x0000,0x0000, +0x4F4F,0x4622,0x4973,0x0000,0x0000,0x692B,0x0000,0x906C, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6931, +0x0000,0x0000,0x7B3C,0x9076,0x0000,0x9077,0x6932,0x9078, +0x6925,0x9079,0x0000,0x0000,0x4776,0x0000,0x907A,0x692F, +0x6927,0x0000,0x6929,0x0000,0x7B3D,0x0000,0x0000,0x7B3E, +0x6933,0x6928,0x0000,0x907B,0x692C,0x0000,0x0000,0x3172, +0x0000,0x4665,0x0000,0x692D,0x6930,0x907C,0x0000,0x907D, +0x0000,0x0000,0x7B3F,0x0000,0x6926,0x0000,0x4126,0x0000, +0x692A,0x3B27,0x3F45,0x3730,0x4C74,0x7B3B,0x4C79,0x3D72, +0x7B40,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9123, +0x0000,0x6937,0x6935,0x0000,0x9124,0x0000,0x0000,0x0000, +0x0000,0x4F4E,0x0000,0x0000,0x0000,0x0000,0x0000,0x9125, +0x0000,0x6934,0x9126,0x7B41,0x0000,0x4D75,0x7B42,0x6936, +0x6938,0x0000,0x0000,0x0000,0x0000,0x6939,0x0000,0x0000, +0x9127,0x9128,0x0000,0x0000,0x693C,0x693A,0x0000,0x9129, +0x0000,0x912A,0x0000,0x0000,0x4623,0x693B,0x912B,0x0000, +0x0000,0x484D,0x692E,0x0000,0x0000,0x7B43,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x912C,0x3D73, +0x0000,0x693D,0x6942,0x4174,0x0000,0x0000,0x6941,0x7B45, + +/* 8600h */ +0x912D,0x0000,0x6922,0x0000,0x7B46,0x7B47,0x6943,0x4149, +0x0000,0x0000,0x693E,0x6940,0x0000,0x0000,0x0000,0x0000, +0x7B48,0x912E,0x7B44,0x693F,0x0000,0x0000,0x5D31,0x5D22, +0x7B4A,0x0000,0x6945,0x0000,0x0000,0x0000,0x912F,0x0000, +0x0000,0x9130,0x6944,0x0000,0x9131,0x0000,0x0000,0x9132, +0x0000,0x7B4B,0x0000,0x0000,0x0000,0x4D76,0x0000,0x623C, +0x6946,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x7B4C,0x9134,0x0000,0x0000,0x9135,0x0000,0x0000,0x6947, +0x9137,0x2F68,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x6948,0x3857,0x0000, +0x3554,0x0000,0x0000,0x9139,0x694A,0x515D,0x913A,0x7B4D, +0x0000,0x0000,0x3575,0x7B4E,0x4E3A,0x0000,0x3673,0x694B, +0x0000,0x0000,0x7B50,0x0000,0x0000,0x0000,0x0000,0x694C, +0x0000,0x0000,0x0000,0x436E,0x7B52,0x0000,0x0000,0x913B, +0x0000,0x694D,0x0000,0x0000,0x0000,0x7B53,0x0000,0x913C, +0x0000,0x467A,0x913D,0x303A,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x913E, +0x0000,0x913F,0x3263,0x6952,0x6953,0x9140,0x0000,0x0000, +0x0000,0x9141,0x0000,0x694E,0x0000,0x3B3D,0x0000,0x0000, +0x7B54,0x0000,0x0000,0x0000,0x9142,0x9143,0x0000,0x0000, +0x0000,0x0000,0x0000,0x694F,0x4742,0x0000,0x0000,0x0000, +0x9144,0x6950,0x6951,0x695B,0x0000,0x0000,0x0000,0x6955, +0x6958,0x9146,0x0000,0x9147,0x0000,0x0000,0x6954,0x0000, +0x7B55,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x9148,0x0000,0x9149,0x6956,0x0000,0x6957,0x3C58, +0x0000,0x6959,0x0000,0x4341,0x0000,0x3756,0x3342,0x0000, +0x0000,0x914A,0x0000,0x0000,0x695C,0x914B,0x0000,0x914C, +0x0000,0x333F,0x0000,0x6961,0x0000,0x0000,0x695D,0x6960, +0x0000,0x0000,0x0000,0x914D,0x483A,0x0000,0x914E,0x0000, +0x0000,0x695E,0x0000,0x0000,0x695F,0x4948,0x485A,0x6962, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x427D,0x696C,0x7B56,0x6968,0x7B57,0x7B58,0x326B,0x0000, + +/* 8700h */ +0x6966,0x0000,0x4B2A,0x6967,0x0000,0x9150,0x6964,0x9151, +0x6965,0x696A,0x696D,0x7B59,0x0000,0x696B,0x9152,0x0000, +0x9153,0x6969,0x6963,0x9154,0x0000,0x0000,0x0000,0x0000, +0x4358,0x9155,0x6974,0x0000,0x4C2A,0x0000,0x0000,0x9156, +0x0000,0x9157,0x0000,0x9158,0x0000,0x6972,0x0000,0x0000, +0x0000,0x6973,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x9159,0x0000,0x0000,0x696E,0x0000,0x0000,0x6970, +0x0000,0x0000,0x915A,0x6971,0x0000,0x0000,0x915B,0x696F, +0x915C,0x0000,0x0000,0x915D,0x0000,0x0000,0x0000,0x0000, +0x0000,0x4066,0x0000,0x4F39,0x6978,0x0000,0x6979,0x0000, +0x0000,0x915E,0x0000,0x6A21,0x0000,0x3F2A,0x0000,0x697B, +0x915F,0x697E,0x0000,0x0000,0x0000,0x0000,0x0000,0x6976, +0x6975,0x0000,0x0000,0x6A22,0x9160,0x9161,0x325C,0x0000, +0x697C,0x0000,0x6A23,0x0000,0x0000,0x0000,0x697D,0x0000, +0x0000,0x7B5A,0x9162,0x0000,0x697A,0x0000,0x4433,0x0000, +0x6977,0x0000,0x0000,0x0000,0x9163,0x0000,0x0000,0x4768, +0x0000,0x0000,0x6A27,0x0000,0x0000,0x0000,0x0000,0x7B5B, +0x7B5C,0x9167,0x0000,0x9168,0x0000,0x4D3B,0x0000,0x0000, +0x0000,0x0000,0x0000,0x9169,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6A26, +0x916A,0x0000,0x6A25,0x0000,0x0000,0x0000,0x0000,0x9166, +0x0000,0x0000,0x0000,0x6A2E,0x7B5D,0x7B5E,0x0000,0x6A28, +0x0000,0x0000,0x0000,0x6A30,0x0000,0x7B5F,0x0000,0x0000, +0x0000,0x0000,0x4D66,0x6A33,0x0000,0x6A2A,0x916D,0x0000, +0x6A2B,0x916F,0x0000,0x0000,0x6A2F,0x0000,0x6A32,0x6A31, +0x0000,0x0000,0x0000,0x6A29,0x0000,0x0000,0x9170,0x0000, +0x6A2C,0x0000,0x6A3D,0x0000,0x0000,0x0000,0x7B61,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9172, +0x6A36,0x0000,0x0000,0x9174,0x0000,0x9175,0x9176,0x0000, +0x0000,0x0000,0x9177,0x9178,0x7B62,0x9179,0x0000,0x6A34, +0x0000,0x0000,0x6A35,0x0000,0x0000,0x9171,0x6A3A,0x6A3B, +0x0000,0x332A,0x0000,0x3542,0x0000,0x0000,0x6A39,0x0000, + +/* 8800h */ +0x0000,0x917A,0x0000,0x917B,0x0000,0x6A24,0x7B63,0x0000, +0x0000,0x0000,0x7B64,0x917C,0x0000,0x6A38,0x6A3C,0x6A37, +0x7B65,0x6A3E,0x0000,0x917D,0x7B66,0x6A40,0x6A3F,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7B67, +0x0000,0x6A42,0x6A41,0x695A,0x0000,0x0000,0x0000,0x6A46, +0x917E,0x0000,0x0000,0x0000,0x0000,0x0000,0x9221,0x0000, +0x0000,0x6A43,0x9222,0x0000,0x0000,0x0000,0x6A44,0x0000, +0x0000,0x6A45,0x0000,0x6A47,0x9223,0x0000,0x0000,0x0000, +0x376C,0x0000,0x6A49,0x0000,0x6A48,0x0000,0x3D30,0x0000, +0x0000,0x0000,0x9225,0x0000,0x3954,0x5E27,0x0000,0x0000, +0x0000,0x0000,0x6A4A,0x3D51,0x0000,0x0000,0x0000,0x3339, +0x9226,0x6A4B,0x0000,0x3152,0x0000,0x3E57,0x6A4C,0x9227, +0x0000,0x3955,0x6A4D,0x3061,0x9228,0x0000,0x0000,0x0000, +0x493D,0x922B,0x0000,0x6A4E,0x0000,0x0000,0x0000,0x922D, +0x3F6A,0x0000,0x6A55,0x0000,0x0000,0x6A52,0x0000,0x436F, +0x0000,0x0000,0x0000,0x0000,0x0000,0x6A53,0x6A50,0x365E, +0x0000,0x6A4F,0x6A56,0x0000,0x0000,0x0000,0x0000,0x0000, +0x3736,0x0000,0x0000,0x425E,0x0000,0x6A5C,0x0000,0x0000, +0x0000,0x0000,0x6A58,0x0000,0x0000,0x0000,0x4235,0x6A57, +0x7B68,0x6A5A,0x0000,0x0000,0x0000,0x0000,0x6A51,0x0000, +0x922E,0x0000,0x6A5B,0x0000,0x6A5D,0x0000,0x0000,0x0000, +0x0000,0x0000,0x7B69,0x486F,0x0000,0x0000,0x6A59,0x0000, +0x6A5E,0x6A60,0x0000,0x0000,0x3853,0x6A54,0x0000,0x3041, +0x0000,0x0000,0x0000,0x0000,0x922F,0x9230,0x9231,0x6A5F, +0x9232,0x3A5B,0x4E76,0x6A61,0x6A62,0x4175,0x0000,0x0000, +0x0000,0x0000,0x7B6A,0x0000,0x0000,0x0000,0x7B6B,0x4E22, +0x0000,0x9235,0x9233,0x9236,0x6A63,0x4D35,0x0000,0x0000, +0x6A64,0x6A65,0x0000,0x9237,0x4A64,0x6A66,0x0000,0x3A40, +0x0000,0x4E23,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x6A6B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x9238,0x9239,0x6A6C,0x3E58,0x6A6A,0x7B6D,0x0000,0x0000, +0x4D67,0x6A67,0x0000,0x0000,0x6A69,0x403D,0x3F7E,0x0000, + +/* 8900h */ +0x0000,0x923B,0x6A68,0x0000,0x6A6D,0x0000,0x0000,0x4A23, +0x0000,0x0000,0x6A6F,0x0000,0x6A6E,0x0000,0x0000,0x0000, +0x336C,0x0000,0x4B2B,0x6A70,0x0000,0x0000,0x0000,0x0000, +0x7B70,0x7B71,0x7B72,0x0000,0x7B6E,0x6A7C,0x6A72,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x6A73,0x0000,0x7B73, +0x0000,0x0000,0x6A74,0x6A75,0x0000,0x0000,0x0000,0x0000, +0x7B74,0x0000,0x7B75,0x0000,0x0000,0x0000,0x6A79,0x923D, +0x6A7A,0x7B76,0x0000,0x6A78,0x0000,0x0000,0x0000,0x0000, +0x7B77,0x6A76,0x923F,0x6A71,0x6A77,0x9240,0x0000,0x0000, +0x0000,0x9241,0x0000,0x0000,0x6A7B,0x7037,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3228,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6A7E,0x365F, +0x6A7D,0x0000,0x9244,0x0000,0x6B22,0x0000,0x6B21,0x0000, +0x0000,0x0000,0x6B24,0x0000,0x0000,0x6B23,0x0000,0x6B25, +0x0000,0x0000,0x3D31,0x0000,0x6B26,0x0000,0x0000,0x6B27, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6B28,0x403E, +0x9245,0x4D57,0x0000,0x6B29,0x0000,0x0000,0x4A24,0x4746, +0x6B2A,0x9246,0x6B2B,0x382B,0x0000,0x0000,0x0000,0x352C, +0x9247,0x0000,0x0000,0x6B2C,0x7B78,0x0000,0x3B6B,0x4741, +0x6B2D,0x0000,0x3350,0x0000,0x0000,0x0000,0x0000,0x9248, +0x0000,0x6B2E,0x0000,0x0000,0x0000,0x0000,0x6B30,0x4D77, +0x0000,0x6B2F,0x3F46,0x0000,0x6B31,0x0000,0x0000,0x6B32, +0x9249,0x0000,0x6B33,0x3451,0x0000,0x0000,0x0000,0x924A, +0x0000,0x0000,0x6B34,0x0000,0x0000,0x6B35,0x0000,0x6B36, +0x6B37,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x3351,0x0000,0x7B7A,0x0000,0x924B,0x0000, +0x924C,0x0000,0x6B38,0x0000,0x6B39,0x6B3A,0x0000,0x0000, +0x0000,0x0000,0x0000,0x3272,0x0000,0x7B7B,0x3F28,0x6B3B, +0x0000,0x0000,0x0000,0x924D,0x0000,0x0000,0x0000,0x0000, +0x0000,0x924F,0x0000,0x9250,0x6B3C,0x0000,0x7B7C,0x0000, +0x6B3D,0x0000,0x0000,0x0000,0x0000,0x9251,0x0000,0x9252, + +/* 8A00h */ +0x3840,0x0000,0x447B,0x6B3E,0x0000,0x0000,0x0000,0x0000, +0x3757,0x0000,0x3F56,0x0000,0x6B41,0x0000,0x4624,0x0000, +0x6B40,0x9254,0x7B7D,0x3731,0x9255,0x7B7E,0x6B3F,0x4277, +0x352D,0x0000,0x0000,0x6B42,0x0000,0x6B43,0x0000,0x3E59, +0x0000,0x9257,0x7C21,0x376D,0x0000,0x6B44,0x0000,0x0000, +0x0000,0x0000,0x4B2C,0x0000,0x0000,0x405F,0x0000,0x0000, +0x0000,0x3576,0x0000,0x4C75,0x414A,0x9258,0x6B45,0x7C22, +0x0000,0x0000,0x3F47,0x4370,0x3E5A,0x0000,0x9259,0x0000, +0x0000,0x6B46,0x0000,0x0000,0x0000,0x925A,0x6B49,0x7C23, +0x6B4A,0x0000,0x0000,0x0000,0x0000,0x925B,0x7C24,0x0000, +0x3A3E,0x4242,0x6B48,0x0000,0x3E5B,0x493E,0x0000,0x0000, +0x925C,0x0000,0x0000,0x6B47,0x0000,0x7C25,0x3B6C,0x0000, +0x3153,0x7C26,0x6B4E,0x3758,0x0000,0x0000,0x3B6E,0x0000, +0x0000,0x3B6D,0x0000,0x4F4D,0x6B4D,0x6B4C,0x4127,0x0000, +0x354D,0x4F43,0x333A,0x3E5C,0x0000,0x7C27,0x0000,0x0000, +0x0000,0x7C28,0x0000,0x0000,0x6B4B,0x0000,0x0000,0x0000, +0x0000,0x0000,0x6B50,0x0000,0x6B51,0x6B4F,0x0000,0x3858, +0x0000,0x4D40,0x0000,0x0000,0x3B6F,0x4727,0x0000,0x0000, +0x925E,0x6B54,0x0000,0x4040,0x0000,0x4342,0x0000,0x0000, +0x4D36,0x0000,0x6B57,0x0000,0x0000,0x0000,0x386C,0x0000, +0x403F,0x6B53,0x0000,0x6B58,0x386D,0x6B55,0x6B56,0x7C29, +0x6B52,0x0000,0x0000,0x0000,0x4062,0x4649,0x925D,0x0000, +0x432F,0x0000,0x325D,0x0000,0x0000,0x0000,0x0000,0x925F, +0x0000,0x4870,0x0000,0x0000,0x3543,0x0000,0x9260,0x4434, +0x0000,0x0000,0x6B5B,0x0000,0x6B59,0x0000,0x0000,0x434C, +0x0000,0x0000,0x0000,0x4041,0x3452,0x6B5A,0x0000,0x3F5B, +0x7C2A,0x0000,0x4E4A,0x0000,0x0000,0x0000,0x4F40,0x9261, +0x0000,0x0000,0x6B5C,0x6B67,0x4435,0x0000,0x6B66,0x7C2B, +0x6B63,0x6B6B,0x6B64,0x0000,0x6B60,0x0000,0x447C,0x6B5F, +0x0000,0x0000,0x0000,0x6B5D,0x0000,0x4D21,0x3B70,0x0000, +0x0000,0x6B61,0x0000,0x6B5E,0x7C2C,0x0000,0x7C2D,0x6B65, +0x3D74,0x0000,0x3841,0x0000,0x9262,0x0000,0x427A,0x0000, + +/* 8B00h */ +0x4B45,0x315A,0x3062,0x0000,0x4625,0x9265,0x0000,0x6B69, +0x0000,0x0000,0x9264,0x0000,0x6B68,0x9266,0x4666,0x0000, +0x6B6D,0x0000,0x0000,0x0000,0x6B62,0x0000,0x6B6C,0x6B6E, +0x0000,0x382C,0x6B6A,0x3956,0x9267,0x3C55,0x0000,0x9268, +0x6B6F,0x4D58,0x0000,0x0000,0x0000,0x0000,0x6B72,0x0000, +0x6B75,0x0000,0x0000,0x6B73,0x4935,0x9269,0x0000,0x0000, +0x0000,0x0000,0x0000,0x6B70,0x0000,0x0000,0x0000,0x0000, +0x0000,0x3660,0x0000,0x0000,0x0000,0x0000,0x6B74,0x0000, +0x0000,0x6B76,0x0000,0x926A,0x0000,0x0000,0x7C31,0x0000, +0x0000,0x6B7A,0x0000,0x0000,0x6B77,0x0000,0x6B79,0x6B78, +0x0000,0x926C,0x0000,0x0000,0x7C32,0x0000,0x6B7B,0x0000, +0x3C31,0x7C33,0x6B7D,0x6B7C,0x4968,0x0000,0x926D,0x6C21, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3759,0x0000, +0x0000,0x7C34,0x0000,0x6B7E,0x6C22,0x0000,0x0000,0x6C23, +0x3544,0x6641,0x3E79,0x0000,0x6C24,0x0000,0x926E,0x386E, +0x0000,0x0000,0x0000,0x0000,0x0000,0x6C25,0x0000,0x926F, +0x6C26,0x9270,0x0000,0x3B3E,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x5A4E,0x9271,0x6C27,0x0000,0x6C28,0x0000, +0x3D32,0x0000,0x6C29,0x6C2A,0x9272,0x9273,0x6C2B,0x0000, +0x0000,0x6C2C,0x6C2D,0x0000,0x9274,0x7C35,0x9275,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + +/* 8C00h */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x432B, +0x0000,0x9276,0x6C2E,0x0000,0x0000,0x9278,0x0000,0x6C30, +0x0000,0x6C2F,0x0000,0x0000,0x0000,0x927B,0x4626,0x927C, +0x6C31,0x7C36,0x4B2D,0x0000,0x6C32,0x0000,0x6C33,0x927D, +0x6C34,0x0000,0x0000,0x0000,0x927E,0x6C35,0x0000,0x9321, +0x0000,0x0000,0x465A,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x3E5D,0x6C36,0x0000,0x0000,0x0000,0x0000,0x0000, +0x7C37,0x9322,0x396B,0x502E,0x6C37,0x9323,0x0000,0x0000, +0x0000,0x0000,0x0000,0x9324,0x0000,0x0000,0x0000,0x0000, +0x6C38,0x493F,0x6C39,0x0000,0x6C41,0x0000,0x0000,0x0000, +0x0000,0x0000,0x6C3A,0x0000,0x0000,0x6C3C,0x0000,0x0000, +0x0000,0x6C3B,0x6C3D,0x0000,0x4B46,0x6C3E,0x6C3F,0x0000, +0x0000,0x0000,0x9327,0x9326,0x6C40,0x0000,0x0000,0x0000, +0x6C42,0x9328,0x0000,0x932A,0x0000,0x332D,0x4467,0x0000, +0x4969,0x3A62,0x3957,0x0000,0x932B,0x0000,0x0000,0x494F, +0x325F,0x484E,0x6C45,0x3453,0x4055,0x6C44,0x6C49,0x4379, +0x4C63,0x0000,0x6C47,0x6C48,0x352E,0x0000,0x6C4A,0x4763, +0x425F,0x0000,0x0000,0x4871,0x453D,0x6C46,0x0000,0x4B47, +0x326C,0x6C4C,0x4F28,0x4442,0x4F45,0x0000,0x0000,0x3B71, +0x6C4B,0x0000,0x4231,0x0000,0x0000,0x6C5C,0x4128,0x0000, +0x0000,0x4678,0x0000,0x4950,0x0000,0x932D,0x932C,0x0000, +0x0000,0x932E,0x6C4F,0x3B3F,0x3B72,0x0000,0x3E5E,0x0000, +0x4765,0x7C39,0x382D,0x6C4E,0x6C4D,0x0000,0x496A,0x0000, +0x0000,0x0000,0x3C41,0x0000,0x0000,0x4552,0x0000,0x0000, +0x9330,0x9331,0x0000,0x0000,0x7C3A,0x0000,0x0000,0x0000, +0x7C3B,0x0000,0x6C51,0x6C52,0x3958,0x6C50,0x7C3C,0x0000, + +/* 8D00h */ +0x0000,0x0000,0x0000,0x0000,0x6C53,0x6C54,0x0000,0x6C56, +0x4223,0x9333,0x6C55,0x3466,0x0000,0x6C58,0x9334,0x6C57, +0x6C59,0x0000,0x7C3E,0x6C5B,0x6C5D,0x0000,0x6C5E,0x0000, +0x0000,0x0000,0x0000,0x7C3F,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x4056,0x0000,0x3C4F,0x6C5F, +0x0000,0x0000,0x0000,0x3352,0x9335,0x6C60,0x0000,0x0000, +0x4176,0x6C61,0x0000,0x6C62,0x496B,0x0000,0x0000,0x352F, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x6C63,0x0000,0x0000,0x9336,0x4436,0x0000,0x0000, +0x0000,0x0000,0x315B,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x9337,0x0000,0x0000, +0x0000,0x6C64,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x3C71,0x0000,0x0000,0x9338,0x0000, +0x3F76,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7C40, +0x0000,0x0000,0x0000,0x422D,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x6C67,0x0000,0x0000,0x0000,0x6C66,0x0000, +0x0000,0x0000,0x6C65,0x0000,0x0000,0x0000,0x933A,0x0000, +0x933B,0x0000,0x0000,0x6C6D,0x6C6B,0x0000,0x7C41,0x6C68, +0x0000,0x7C42,0x0000,0x0000,0x0000,0x0000,0x6C6A,0x7C43, +0x0000,0x933C,0x6C69,0x6C6C,0x0000,0x3577,0x0000,0x6C70, +0x0000,0x4057,0x0000,0x6C71,0x0000,0x0000,0x0000,0x0000, +0x3859,0x0000,0x6C6E,0x6C6F,0x933D,0x0000,0x0000,0x4F29, +0x0000,0x0000,0x0000,0x4437,0x0000,0x4129,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x6C72,0x9340,0x0000,0x6C75, + +/* 8E00h */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9341,0x0000, +0x6C73,0x6C74,0x4D59,0x0000,0x933E,0x0000,0x0000,0x4627, +0x6C78,0x0000,0x0000,0x0000,0x9343,0x0000,0x9344,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x6C76,0x6C77,0x6C79, +0x7C44,0x9345,0x9346,0x7C45,0x0000,0x0000,0x0000,0x9347, +0x0000,0x0000,0x6D29,0x0000,0x0000,0x0000,0x0000,0x0000, +0x6C7C,0x0000,0x0000,0x0000,0x6C7D,0x6C7B,0x934A,0x0000, +0x0000,0x934B,0x0000,0x0000,0x0000,0x7C46,0x0000,0x0000, +0x0000,0x0000,0x6C7A,0x0000,0x447D,0x0000,0x0000,0x6D21, +0x6D25,0x6D22,0x6C7E,0x934C,0x6D23,0x0000,0x0000,0x0000, +0x6D24,0x0000,0x0000,0x0000,0x934D,0x6D2B,0x0000,0x0000, +0x0000,0x6D26,0x0000,0x0000,0x0000,0x0000,0x0000,0x4058, +0x6D28,0x0000,0x934E,0x6D2A,0x6D27,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x934F,0x9350,0x0000,0x9351, +0x7C47,0x0000,0x6D2D,0x0000,0x3D33,0x0000,0x6D2C,0x0000, +0x0000,0x0000,0x0000,0x7C48,0x6D2E,0x0000,0x0000,0x0000, +0x0000,0x6D2F,0x0000,0x0000,0x6D32,0x6D31,0x0000,0x6D30, +0x0000,0x0000,0x6D34,0x6D33,0x0000,0x4C76,0x0000,0x0000, +0x0000,0x6D36,0x0000,0x6D35,0x6D37,0x0000,0x0000,0x0000, +0x9352,0x6D38,0x0000,0x0000,0x0000,0x0000,0x9353,0x0000, +0x0000,0x6D3A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x6D39,0x3F48,0x6D3B,0x0000,0x9354,0x366D, +0x6D3C,0x6D3E,0x0000,0x9355,0x0000,0x9356,0x9357,0x0000, +0x0000,0x0000,0x0000,0x9358,0x0000,0x0000,0x6D3F,0x0000, +0x7C4A,0x0000,0x0000,0x0000,0x0000,0x6D40,0x6D3D,0x0000, +0x6D41,0x0000,0x3C56,0x6D42,0x3530,0x3733,0x0000,0x0000, +0x0000,0x935A,0x382E,0x0000,0x935B,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x6D43,0x0000,0x0000,0x0000,0x4670, +0x0000,0x0000,0x453E,0x6D44,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x6D47,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x3C34,0x935D,0x7C4C,0x6D46,0x6D45,0x375A,0x6D48,0x0000, + +/* 8F00h */ +0x935F,0x0000,0x0000,0x3353,0x0000,0x6D4A,0x0000,0x0000, +0x9360,0x3A5C,0x6D49,0x0000,0x6D52,0x0000,0x0000,0x0000, +0x0000,0x0000,0x6D4C,0x6D4E,0x4A65,0x6D4B,0x0000,0x9361, +0x0000,0x6D4D,0x0000,0x6D51,0x6D4F,0x3531,0x7C4D,0x6D50, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6D53,0x0000, +0x0000,0x475A,0x4E58,0x9362,0x0000,0x7C4E,0x0000,0x3D34, +0x0000,0x0000,0x0000,0x6D54,0x0000,0x0000,0x7C4F,0x0000, +0x4D22,0x6D56,0x0000,0x6D55,0x0000,0x0000,0x6D59,0x4D41, +0x9363,0x0000,0x6D58,0x0000,0x336D,0x6D57,0x6D5C,0x0000, +0x0000,0x6D5B,0x9364,0x0000,0x6D5A,0x4532,0x6D5D,0x0000, +0x0000,0x0000,0x0000,0x0000,0x7C50,0x0000,0x0000,0x6D5E, +0x9365,0x0000,0x0000,0x0000,0x6D5F,0x0000,0x0000,0x396C, +0x0000,0x3725,0x6D60,0x6D61,0x6D62,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x3F49,0x6D63,0x0000,0x3C2D,0x6D64, +0x0000,0x0000,0x0000,0x6D65,0x9367,0x0000,0x7C52,0x5221, +0x517E,0x0000,0x0000,0x0000,0x0000,0x6D66,0x6570,0x6D67, +0x4324,0x3F2B,0x4740,0x0000,0x9368,0x7C53,0x936A,0x6D68, +0x0000,0x0000,0x4A55,0x4454,0x397E,0x0000,0x0000,0x4329, +0x0000,0x936C,0x312A,0x0000,0x4B78,0x3F57,0x936D,0x0000, +0x0000,0x0000,0x936F,0x0000,0x0000,0x9370,0x375E,0x0000, +0x0000,0x3661,0x0000,0x9371,0x4A56,0x9372,0x0000,0x0000, +0x0000,0x0000,0x6D69,0x0000,0x0000,0x0000,0x0000,0x0000, +0x9373,0x0000,0x6D6B,0x0000,0x7C54,0x6D6A,0x3260,0x0000, +0x7C55,0x4676,0x6D6C,0x4777,0x0000,0x4533,0x7C56,0x6D6D, +0x3D52,0x9374,0x0000,0x0000,0x6D6F,0x9375,0x0000,0x4C42, +0x6D7E,0x6D71,0x6D72,0x9376,0x0000,0x4449,0x0000,0x0000, + +/* 9000h */ +0x4260,0x4177,0x9377,0x4628,0x0000,0x6D70,0x3555,0x0000, +0x7C57,0x0000,0x0000,0x6D79,0x9378,0x6D76,0x6E25,0x4629, +0x4360,0x6D73,0x0000,0x447E,0x4553,0x6D74,0x6D78,0x3F60, +0x0000,0x4767,0x444C,0x0000,0x0000,0x4042,0x6D77,0x422E, +0x4224,0x6D75,0x3029,0x4F22,0x0000,0x0000,0x0000,0x6D7A, +0x0000,0x0000,0x0000,0x0000,0x0000,0x7C58,0x4261,0x0000, +0x0000,0x3D35,0x3F4A,0x0000,0x0000,0x6D7C,0x6D7B,0x9379, +0x306F,0x6D7D,0x0000,0x0000,0x492F,0x0000,0x6E27,0x0000, +0x0000,0x465B,0x3F6B,0x937B,0x937C,0x4359,0x0000,0x3678, +0x0000,0x6E26,0x4D37,0x313F,0x0000,0x4A57,0x3261,0x6E21, +0x6E22,0x6E23,0x6E24,0x463B,0x4323,0x3063,0x6E28,0x0000, +0x6E29,0x7423,0x0000,0x0000,0x423D,0x937D,0x6E2A,0x0000, +0x3173,0x414C,0x0000,0x382F,0x0000,0x4D5A,0x0000,0x0000, +0x6E2B,0x452C,0x0000,0x0000,0x0000,0x4178,0x3C57,0x6E2C, +0x0000,0x0000,0x6E2F,0x0000,0x0000,0x3D65,0x6E2D,0x412B, +0x412A,0x0000,0x3064,0x0000,0x4E4B,0x6E31,0x0000,0x4872, +0x6E33,0x6E32,0x6E30,0x6364,0x3454,0x9422,0x0000,0x6D6E, +0x7C5A,0x6E35,0x6E34,0x0000,0x9423,0x0000,0x0000,0x6E36, +0x9424,0x4D38,0x0000,0x0000,0x0000,0x7C5B,0x0000,0x7C5C, +0x0000,0x7C5D,0x0000,0x7C5E,0x0000,0x0000,0x0000,0x0000, +0x0000,0x9426,0x7C5F,0x4661,0x0000,0x0000,0x4B2E,0x0000, +0x6E37,0x0000,0x3C59,0x0000,0x0000,0x0000,0x0000,0x6E38, +0x9428,0x6E39,0x0000,0x7C60,0x0000,0x6E3A,0x9429,0x0000, +0x4521,0x0000,0x0000,0x0000,0x0000,0x0000,0x7C61,0x0000, +0x0000,0x306A,0x0000,0x942A,0x7C62,0x7C63,0x0000,0x7C64, +0x942B,0x0000,0x3959,0x0000,0x0000,0x0000,0x4F3A,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7C65, +0x0000,0x0000,0x0000,0x6E3E,0x942D,0x7C66,0x7C67,0x942E, +0x0000,0x3734,0x6E3B,0x0000,0x6E3C,0x0000,0x0000,0x0000, +0x4974,0x0000,0x0000,0x9433,0x0000,0x3354,0x0000,0x7C68, +0x0000,0x0000,0x9431,0x0000,0x7C69,0x4D39,0x9430,0x363F, +0x0000,0x0000,0x0000,0x0000,0x0000,0x4554,0x9434,0x9435, + +/* 9100h */ +0x9432,0x0000,0x6E3F,0x0000,0x9436,0x0000,0x9437,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x6E40,0x0000,0x7C6B,0x7C6C,0x7C6D,0x0000, +0x9438,0x6E41,0x0000,0x0000,0x9439,0x0000,0x943A,0x0000, +0x0000,0x0000,0x7C6E,0x7C6F,0x0000,0x0000,0x0000,0x7C70, +0x0000,0x0000,0x0000,0x0000,0x0000,0x4522,0x0000,0x7C71, +0x6E43,0x7C72,0x6E42,0x0000,0x7C73,0x0000,0x0000,0x943B, +0x0000,0x943C,0x943D,0x0000,0x0000,0x7C74,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x943E,0x943F, +0x7C75,0x4653,0x6E44,0x3D36,0x3C60,0x475B,0x4371,0x0000, +0x0000,0x0000,0x3C72,0x0000,0x3F6C,0x0000,0x6E45,0x9440, +0x6E46,0x9441,0x0000,0x7C76,0x0000,0x0000,0x0000,0x0000, +0x0000,0x9442,0x3F5D,0x6E47,0x9443,0x6E48,0x0000,0x0000, +0x0000,0x6E49,0x4D6F,0x0000,0x3D37,0x0000,0x0000,0x0000, +0x0000,0x0000,0x6E4B,0x6E4A,0x9444,0x395A,0x0000,0x3973, +0x3B40,0x9445,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x6E4E,0x7C77,0x0000,0x9446,0x0000,0x3D66, +0x0000,0x6E4D,0x0000,0x6E4C,0x0000,0x4269,0x9447,0x0000, +0x386F,0x0000,0x4043,0x0000,0x0000,0x0000,0x0000,0x4830, +0x0000,0x0000,0x0000,0x0000,0x3D39,0x0000,0x7C78,0x0000, +0x0000,0x0000,0x6E4F,0x0000,0x3E5F,0x0000,0x0000,0x0000, +0x9448,0x0000,0x6E52,0x6E50,0x7C79,0x0000,0x9449,0x6E51, +0x0000,0x7C7A,0x0000,0x944A,0x6E54,0x6E53,0x944B,0x0000, +0x3E7A,0x0000,0x6E55,0x0000,0x7C7B,0x0000,0x0000,0x0000, +0x6E56,0x6E57,0x0000,0x944C,0x944D,0x0000,0x4850,0x3A53, +0x3C61,0x6E58,0x0000,0x6E59,0x4E24,0x3D45,0x4C6E,0x4E4C, +0x6E5A,0x3662,0x0000,0x0000,0x0000,0x0000,0x6E5B,0x7C7C, +0x4523,0x0000,0x944E,0x6E5E,0x3378,0x3F4B,0x0000,0x6E5C, +0x0000,0x6E5D,0x0000,0x4460,0x7C7E,0x7D21,0x4B55,0x367C, +0x0000,0x0000,0x0000,0x0000,0x9451,0x7D22,0x9452,0x0000, +0x0000,0x7D23,0x0000,0x0000,0x0000,0x6E60,0x6E61,0x0000, +0x0000,0x0000,0x0000,0x7C7D,0x6E5F,0x0000,0x0000,0x6E63, + +/* 9200h */ +0x0000,0x9453,0x0000,0x0000,0x0000,0x0000,0x0000,0x7D24, +0x0000,0x0000,0x9454,0x0000,0x0000,0x465F,0x3343,0x0000, +0x7D25,0x6E67,0x0000,0x0000,0x6E64,0x6E66,0x9455,0x9456, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x6E62,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x6F4F,0x0000,0x0000,0x6E65,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x9458,0x4E6B,0x0000,0x0000,0x385A, +0x7D26,0x7D27,0x7D28,0x0000,0x7D29,0x0000,0x0000,0x6E6F, +0x7D2A,0x0000,0x9459,0x7D2B,0x4534,0x6E6A,0x0000,0x945A, +0x6E6D,0x6E6B,0x945B,0x6E70,0x0000,0x0000,0x945C,0x7D2C, +0x6E71,0x945D,0x0000,0x0000,0x0000,0x0000,0x945E,0x6E69, +0x0000,0x945F,0x6E76,0x3174,0x0000,0x0000,0x6E68,0x0000, +0x9460,0x9461,0x482D,0x0000,0x6E6C,0x9462,0x3E60,0x9463, +0x9464,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x395B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x7D2D,0x0000,0x0000,0x0000,0x9467,0x9468,0x4B48,0x9469, +0x3664,0x0000,0x0000,0x3D46,0x0000,0x463C,0x0000,0x0000, +0x7D2E,0x946A,0x0000,0x0000,0x0000,0x946B,0x0000,0x0000, +0x0000,0x412D,0x0000,0x6E74,0x0000,0x6E6E,0x6E73,0x946C, +0x4C43,0x946D,0x4438,0x6E75,0x6E72,0x0000,0x0000,0x946E, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x946F, +0x0000,0x0000,0x0000,0x9470,0x0000,0x412C,0x0000,0x0000, +0x0000,0x0000,0x9473,0x0000,0x0000,0x0000,0x0000,0x6E79, +0x0000,0x6E78,0x0000,0x0000,0x0000,0x0000,0x0000,0x9474, +0x9475,0x0000,0x7D2F,0x0000,0x0000,0x0000,0x9476,0x0000, +0x0000,0x0000,0x0000,0x7D30,0x7D31,0x0000,0x9477,0x6E77, +0x9478,0x0000,0x4B2F,0x7D32,0x0000,0x0000,0x0000,0x9479, +0x0000,0x947A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x7D33,0x0000,0x0000,0x0000,0x3D7B,0x947B,0x0000,0x947C, +0x0000,0x6E7A,0x4A5F,0x0000,0x0000,0x3154,0x0000,0x0000, +0x0000,0x0000,0x4946,0x4372,0x0000,0x0000,0x0000,0x9522, +0x3578,0x9523,0x6E7C,0x9524,0x395D,0x0000,0x0000,0x7D34, + +/* 9300h */ +0x0000,0x0000,0x9525,0x0000,0x7D35,0x0000,0x3B2C,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x9526,0x0000,0x6E7B, +0x3F6D,0x947D,0x0000,0x0000,0x0000,0x9527,0x0000,0x0000, +0x3F6E,0x6F21,0x6F23,0x0000,0x0000,0x9528,0x9529,0x7D36, +0x3E7B,0x7D37,0x6F22,0x6F24,0x0000,0x7D38,0x3653,0x952A, +0x4945,0x952B,0x0000,0x3C62,0x4F23,0x0000,0x6E7E,0x3A78, +0x0000,0x0000,0x4F3F,0x0000,0x0000,0x6F26,0x0000,0x0000, +0x0000,0x0000,0x6F25,0x6F27,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x6E7D,0x0000,0x0000,0x952E, +0x7D39,0x7D3A,0x7D3B,0x4669,0x0000,0x4555,0x0000,0x0000, +0x0000,0x952F,0x0000,0x0000,0x4457,0x0000,0x6F2C,0x9530, +0x0000,0x0000,0x9531,0x4343,0x6F28,0x0000,0x0000,0x0000, +0x6F29,0x0000,0x0000,0x0000,0x7D3C,0x7D3D,0x0000,0x0000, +0x0000,0x0000,0x7D3E,0x9532,0x372D,0x0000,0x6F2B,0x0000, +0x7D3F,0x9533,0x0000,0x9534,0x0000,0x3830,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x6F2A,0x0000,0x3E61,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x9538,0x0000,0x0000,0x9539,0x3379,0x0000,0x0000,0x953A, +0x0000,0x0000,0x0000,0x0000,0x6F30,0x0000,0x3A3F,0x4179, +0x0000,0x0000,0x444A,0x7D40,0x0000,0x0000,0x953B,0x0000, +0x0000,0x9535,0x0000,0x7D41,0x0000,0x0000,0x0000,0x333B, +0x0000,0x0000,0x0000,0x0000,0x6F2E,0x6F2F,0x4443,0x0000, +0x6F2D,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x6F31,0x7D42,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x9540,0x0000,0x6F37,0x0000,0x0000,0x7D43,0x9541, +0x6F3A,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x6F39,0x452D,0x0000,0x0000,0x0000,0x0000,0x6F32,0x6F33, +0x6F36,0x0000,0x0000,0x0000,0x9542,0x6F38,0x7D44,0x7D45, +0x0000,0x3640,0x9543,0x0000,0x6F3B,0x6F35,0x0000,0x9544, +0x6F34,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x953F,0x0000,0x0000,0x0000,0x953C,0x0000,0x0000, +0x0000,0x0000,0x0000,0x9549,0x0000,0x7D47,0x0000,0x0000, + +/* 9400h */ +0x0000,0x0000,0x0000,0x6F3F,0x7D46,0x0000,0x0000,0x6F40, +0x0000,0x9545,0x0000,0x0000,0x0000,0x0000,0x0000,0x9546, +0x6F41,0x0000,0x0000,0x6F3E,0x6F3D,0x0000,0x9547,0x9548, +0x3E62,0x462A,0x6F3C,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x6F45,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x6F43,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x954A,0x7D48,0x954B,0x6F44,0x6F42,0x0000, +0x4278,0x0000,0x6F46,0x954C,0x0000,0x0000,0x0000,0x0000, +0x0000,0x6F47,0x0000,0x0000,0x6F49,0x954D,0x0000,0x0000, +0x0000,0x0000,0x7D49,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x3455,0x6F48,0x4C7A,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x6F54,0x6F4A,0x0000,0x0000,0x6F4D,0x0000, +0x6F4B,0x0000,0x6F4C,0x7D4A,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x6F4E,0x7D4B,0x0000,0x9550,0x0000,0x9551, +0x6F50,0x7D4C,0x7D4D,0x0000,0x0000,0x6F51,0x0000,0x6F52, +0x0000,0x0000,0x0000,0x0000,0x6F55,0x6F53,0x6F56,0x6F58, +0x0000,0x6F57,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + +/* 9500h */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x4439, +0x9552,0x9553,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x4C67,0x0000,0x6F59,0x412E,0x0000,0x0000,0x9554,0x6F5A, +0x0000,0x4A44,0x6F5B,0x332B,0x9555,0x9556,0x7D4E,0x313C, +0x0000,0x3457,0x0000,0x3456,0x6F5C,0x0000,0x6F5D,0x0000, +0x6F5E,0x6F5F,0x0000,0x0000,0x0000,0x0000,0x0000,0x7D4F, +0x6F60,0x0000,0x3458,0x3355,0x395E,0x4836,0x7D50,0x6F62, +0x6F61,0x7D51,0x0000,0x9558,0x7D52,0x6F63,0x0000,0x0000, +0x0000,0x0000,0x315C,0x0000,0x9559,0x0000,0x7D53,0x0000, +0x0000,0x6F66,0x0000,0x6F65,0x6F64,0x7D54,0x6F67,0x0000, +0x0000,0x0000,0x0000,0x6F6A,0x0000,0x0000,0x0000,0x3047, +0x955B,0x0000,0x6F68,0x7D55,0x6F6C,0x6F6B,0x0000,0x0000, +0x7D56,0x0000,0x0000,0x7D57,0x6F6E,0x6F6D,0x6F6F,0x0000, +0x462E,0x0000,0x7D59,0x0000,0x6F70,0x0000,0x7D5A,0x0000, +0x0000,0x6F71,0x6F73,0x0000,0x0000,0x6F72,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + +/* 9600h */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x496C,0x9425,0x0000,0x0000, +0x0000,0x6F74,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x6F75,0x0000,0x3A65,0x0000,0x955E,0x0000,0x6F76,0x6F77, +0x0000,0x0000,0x4B49,0x955F,0x9560,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x414B,0x9562,0x0000,0x0000,0x3024, +0x424B,0x9563,0x6F78,0x0000,0x496D,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x6F7B,0x6F79,0x395F,0x0000,0x6F7A, +0x3842,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x7D5B,0x0000,0x0000,0x4A45,0x6F7D,0x7021,0x6F7E,0x7022, +0x0000,0x9564,0x3121,0x3F58,0x3D7C,0x3459,0x7023,0x0000, +0x0000,0x0000,0x4766,0x0000,0x7025,0x0000,0x0000,0x0000, +0x3122,0x0000,0x7024,0x4444,0x0000,0x4E4D,0x462B,0x6F7C, +0x4E26,0x0000,0x3831,0x0000,0x0000,0x4D5B,0x0000,0x0000, +0x0000,0x0000,0x9566,0x0000,0x7D5C,0x3679,0x4E34,0x0000, +0x3728,0x0000,0x4262,0x6721,0x0000,0x7026,0x332C,0x3F6F, +0x0000,0x0000,0x0000,0x0000,0x3356,0x7028,0x0000,0x7029, +0x7027,0x3764,0x9568,0x3A5D,0x3E63,0x7D5E,0x0000,0x0000, +0x3123,0x0000,0x0000,0x4E59,0x7D5F,0x7D60,0x0000,0x702B, +0x6E2E,0x956B,0x702A,0x0000,0x0000,0x0000,0x0000,0x956C, +0x702E,0x702C,0x702D,0x956D,0x702F,0x0000,0x7030,0x4E6C, +0x7031,0x7032,0x956E,0x4049,0x483B,0x956F,0x0000,0x0000, +0x3F7D,0x3467,0x0000,0x0000,0x4D3A,0x326D,0x3D38,0x385B, +0x0000,0x7035,0x0000,0x7034,0x3B73,0x7036,0x7033,0x0000, +0x0000,0x3B28,0x7D61,0x0000,0x0000,0x703A,0x6A2D,0x0000, +0x9572,0x5256,0x9573,0x3F77,0x7038,0x9574,0x7D62,0x0000, +0x0000,0x0000,0x4E25,0x4671,0x0000,0x0000,0x0000,0x0000, +0x312B,0x7D64,0x4063,0x3C36,0x0000,0x0000,0x0000,0x7D65, +0x4A37,0x0000,0x3140,0x0000,0x0000,0x0000,0x4E6D,0x4D6B, +0x0000,0x703B,0x0000,0x4545,0x0000,0x0000,0x0000,0x0000, + +/* 9700h */ +0x3C7B,0x0000,0x0000,0x0000,0x703C,0x0000,0x703D,0x3F4C, +0x703E,0x0000,0x4E6E,0x0000,0x0000,0x7039,0x7040,0x7042, +0x0000,0x7041,0x0000,0x703F,0x9576,0x0000,0x7043,0x0000, +0x0000,0x7044,0x0000,0x0000,0x417A,0x0000,0x3262,0x0000, +0x0000,0x0000,0x0000,0x9577,0x7045,0x0000,0x0000,0x4C38, +0x0000,0x0000,0x7046,0x0000,0x0000,0x0000,0x0000,0x0000, +0x7047,0x0000,0x4F2A,0x7D66,0x0000,0x0000,0x9579,0x0000, +0x5B31,0x7048,0x0000,0x7D67,0x0000,0x7049,0x704A,0x0000, +0x0000,0x957A,0x704E,0x0000,0x704B,0x0000,0x704C,0x957B, +0x704D,0x704F,0x0000,0x0000,0x0000,0x7D68,0x7D69,0x7D6A, +0x0000,0x0000,0x4044,0x0000,0x0000,0x957C,0x4C77,0x957D, +0x0000,0x4045,0x7D6B,0x957E,0x7050,0x0000,0x4873,0x0000, +0x7051,0x7353,0x4C4C,0x0000,0x7052,0x0000,0x7053,0x0000, +0x7054,0x3357,0x9621,0x7056,0x0000,0x3F59,0x7D6C,0x0000, +0x0000,0x7057,0x0000,0x7D6D,0x3724,0x0000,0x0000,0x0000, +0x0000,0x7058,0x705C,0x0000,0x705A,0x0000,0x0000,0x0000, +0x0000,0x705B,0x0000,0x0000,0x3373,0x7059,0x705D,0x0000, +0x0000,0x0000,0x0000,0x705E,0x0000,0x3048,0x0000,0x705F, +0x7060,0x0000,0x0000,0x0000,0x0000,0x7D6E,0x9624,0x0000, +0x3E64,0x0000,0x9625,0x0000,0x7061,0x0000,0x9626,0x0000, +0x3547,0x0000,0x9627,0x7064,0x0000,0x0000,0x7063,0x0000, +0x7062,0x0000,0x0000,0x6B71,0x0000,0x4A5C,0x7D6F,0x0000, +0x0000,0x9628,0x9629,0x7065,0x7066,0x0000,0x0000,0x0000, +0x0000,0x0000,0x7D70,0x0000,0x0000,0x0000,0x962A,0x0000, +0x0000,0x7D71,0x0000,0x7067,0x0000,0x0000,0x7068,0x0000, +0x7069,0x7D72,0x0000,0x706A,0x962B,0x0000,0x0000,0x0000, +0x0000,0x962C,0x0000,0x345A,0x962D,0x0000,0x0000,0x0000, +0x962E,0x962F,0x0000,0x7D74,0x706B,0x0000,0x7D73,0x0000, +0x0000,0x9630,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x706C,0x4723,0x0000, +0x0000,0x9631,0x706E,0x323B,0x7D75,0x7071,0x7070,0x0000, +0x0000,0x0000,0x0000,0x3124,0x0000,0x0000,0x0000,0x3641, + +/* 9800h */ +0x0000,0x4A47,0x443A,0x3A22,0x9632,0x3960,0x3D67,0x0000, +0x3F5C,0x0000,0x7D77,0x0000,0x7073,0x9633,0x9634,0x7072, +0x4D42,0x3468,0x4852,0x465C,0x9635,0x0000,0x9636,0x3F7C, +0x4E4E,0x0000,0x375B,0x0000,0x0000,0x0000,0x7D78,0x0000, +0x0000,0x7076,0x0000,0x9639,0x7075,0x963C,0x0000,0x0000, +0x0000,0x0000,0x0000,0x7D79,0x4B4B,0x462C,0x0000,0x0000, +0x7D7A,0x0000,0x963A,0x963B,0x3150,0x0000,0x0000,0x7077, +0x7074,0x0000,0x0000,0x4951,0x4D6A,0x7078,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7079,0x963D, +0x0000,0x0000,0x0000,0x707B,0x426A,0x335B,0x335C,0x707A, +0x0000,0x0000,0x7D7C,0x7D7D,0x3469,0x3832,0x7D7E,0x7E21, +0x346A,0x7E22,0x7E23,0x453F,0x0000,0x0000,0x4E60,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x7E25,0x963E,0x385C, +0x0000,0x0000,0x0000,0x707C,0x7E26,0x0000,0x0000,0x707D, +0x707E,0x7121,0x0000,0x7123,0x7122,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x4977,0x0000,0x7124,0x963F,0x0000,0x9640,0x0000,0x7125, +0x9641,0x7126,0x0000,0x0000,0x0000,0x0000,0x7127,0x9643, +0x9644,0x0000,0x7E27,0x9645,0x9646,0x0000,0x0000,0x9647, +0x0000,0x0000,0x9648,0x7129,0x7128,0x0000,0x712A,0x9649, +0x7E28,0x0000,0x0000,0x964A,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x4874,0x664C,0x0000,0x0000,0x3F29, +0x964B,0x964D,0x3532,0x964E,0x0000,0x964F,0x0000,0x7E29, +0x0000,0x712B,0x9650,0x712C,0x0000,0x522C,0x5D3B,0x4853, +0x9651,0x9652,0x307B,0x9653,0x303B,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x3B74,0x4B30,0x3E7E,0x0000, + +/* 9900h */ +0x0000,0x0000,0x0000,0x712D,0x0000,0x4C5F,0x0000,0x0000, +0x9654,0x712E,0x4D5C,0x0000,0x3142,0x0000,0x0000,0x0000, +0x3B41,0x0000,0x712F,0x326E,0x7130,0x0000,0x9657,0x9658, +0x7131,0x0000,0x965A,0x965B,0x965C,0x7133,0x7134,0x0000, +0x7136,0x7132,0x0000,0x0000,0x7135,0x0000,0x0000,0x0000, +0x345B,0x0000,0x0000,0x0000,0x7137,0x0000,0x7138,0x0000, +0x0000,0x965E,0x965F,0x9660,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x9661,0x9662,0x9663,0x7139,0x713A,0x0000, +0x9664,0x9665,0x713B,0x0000,0x0000,0x713D,0x9666,0x0000, +0x0000,0x713C,0x0000,0x713F,0x7142,0x9667,0x9668,0x0000, +0x713E,0x7140,0x7141,0x0000,0x0000,0x7143,0x0000,0x3642, +0x7E2A,0x0000,0x0000,0x0000,0x9669,0x0000,0x0000,0x966A, +0x966B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x3C73,0x7144, +0x7145,0x3961,0x0000,0x0000,0x0000,0x0000,0x7E2B,0x0000, +0x0000,0x0000,0x0000,0x966C,0x0000,0x7146,0x966D,0x0000, +0x333E,0x0000,0x0000,0x0000,0x474F,0x7147,0x7148,0x0000, +0x0000,0x0000,0x0000,0x435A,0x466B,0x0000,0x0000,0x0000, +0x0000,0x966E,0x0000,0x0000,0x7149,0x966F,0x0000,0x9670, +0x0000,0x477D,0x0000,0x9671,0x424C,0x3158,0x366E,0x0000, +0x366F,0x9672,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x4373,0x714E,0x3670,0x0000,0x9673,0x326F,0x0000,0x0000, +0x714D,0x9674,0x0000,0x714B,0x0000,0x714C,0x9675,0x714A, +0x0000,0x0000,0x7158,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x714F,0x7150,0x0000, +0x9677,0x7151,0x7152,0x0000,0x0000,0x0000,0x0000,0x0000, +0x7154,0x9678,0x0000,0x7153,0x9679,0x0000,0x0000,0x3D59, + +/* 9A00h */ +0x0000,0x7155,0x7E2C,0x7E2D,0x0000,0x7157,0x0000,0x0000, +0x0000,0x0000,0x967A,0x0000,0x0000,0x0000,0x3533,0x7156, +0x0000,0x967B,0x417B,0x3833,0x0000,0x0000,0x967C,0x0000, +0x0000,0x7159,0x967D,0x0000,0x0000,0x0000,0x0000,0x0000, +0x967E,0x0000,0x0000,0x0000,0x7E2E,0x0000,0x0000,0x0000, +0x424D,0x0000,0x0000,0x715A,0x0000,0x7E2F,0x7E30,0x0000, +0x462D,0x9721,0x0000,0x0000,0x0000,0x0000,0x9722,0x715B, +0x7E31,0x0000,0x0000,0x0000,0x0000,0x0000,0x7160,0x0000, +0x715E,0x0000,0x715D,0x715F,0x9723,0x715C,0x0000,0x0000, +0x0000,0x0000,0x7E32,0x0000,0x9724,0x7162,0x7E33,0x0000, +0x0000,0x0000,0x7E34,0x0000,0x0000,0x7161,0x0000,0x7164, +0x9725,0x0000,0x3643,0x7163,0x0000,0x0000,0x0000,0x7165, +0x0000,0x0000,0x7166,0x0000,0x7168,0x7167,0x0000,0x0000, +0x0000,0x7169,0x716B,0x716A,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x397C,0x0000,0x0000,0x0000,0x0000,0x716C,0x0000,0x9727, +0x716D,0x0000,0x0000,0x0000,0x0000,0x0000,0x7E35,0x9729, +0x333C,0x972B,0x0000,0x0000,0x716E,0x0000,0x0000,0x0000, +0x716F,0x7E36,0x0000,0x7E37,0x3F71,0x0000,0x972D,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7E38,0x7170, +0x972E,0x7171,0x972F,0x7172,0x7173,0x9730,0x7E39,0x0000, +0x3962,0x0000,0x0000,0x0000,0x9732,0x0000,0x7174,0x7175, +0x9733,0x0000,0x7176,0x7177,0x0000,0x9734,0x7178,0x0000, +0x0000,0x9735,0x4831,0x717A,0x0000,0x4926,0x717B,0x7179, +0x0000,0x717D,0x0000,0x0000,0x717C,0x0000,0x0000,0x717E, +0x0000,0x7E3A,0x0000,0x7221,0x0000,0x0000,0x0000,0x0000, + +/* 9B00h */ +0x0000,0x0000,0x7E3B,0x9736,0x0000,0x0000,0x7222,0x0000, +0x7E3C,0x0000,0x0000,0x0000,0x9737,0x0000,0x0000,0x0000, +0x9738,0x0000,0x9739,0x0000,0x0000,0x0000,0x973A,0x0000, +0x7223,0x0000,0x7224,0x0000,0x973B,0x0000,0x0000,0x7225, +0x7E3D,0x0000,0x7226,0x7227,0x0000,0x7228,0x0000,0x7229, +0x722A,0x722B,0x722C,0x973C,0x0000,0x7E3F,0x722D,0x722E, +0x0000,0x5D35,0x722F,0x973D,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x6478,0x3534,0x973E,0x0000,0x0000, +0x0000,0x3321,0x3A32,0x7231,0x7230,0x4C25,0x0000,0x0000, +0x0000,0x0000,0x0000,0x9740,0x0000,0x7233,0x7234,0x7232, +0x0000,0x7235,0x0000,0x0000,0x4B62,0x0000,0x0000,0x0000, +0x7236,0x0000,0x357B,0x0000,0x0000,0x0000,0x7E40,0x0000, +0x0000,0x0000,0x0000,0x9741,0x0000,0x9742,0x7E42,0x0000, +0x0000,0x0000,0x0000,0x9743,0x9744,0x0000,0x0000,0x4F25, +0x0000,0x0000,0x7E43,0x9745,0x7237,0x7E44,0x9746,0x9747, +0x0000,0x7E41,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x7239,0x7E45,0x0000,0x0000,0x0000, +0x0000,0x0000,0x7E46,0x0000,0x0000,0x0000,0x303E,0x7E47, +0x0000,0x723A,0x4A2B,0x7238,0x0000,0x0000,0x723B,0x723C, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7E48,0x723D, +0x723E,0x0000,0x0000,0x0000,0x0000,0x0000,0x9748,0x7E49, +0x723F,0x0000,0x4B6E,0x3B2D,0x9749,0x3A7A,0x412F,0x0000, +0x0000,0x974A,0x974D,0x0000,0x7240,0x0000,0x0000,0x0000, +0x974E,0x7243,0x0000,0x0000,0x0000,0x0000,0x974F,0x0000, +0x7241,0x7E4A,0x0000,0x0000,0x0000,0x0000,0x7244,0x9750, +0x0000,0x3871,0x7242,0x0000,0x0000,0x0000,0x7E4B,0x7245, +0x0000,0x7246,0x7247,0x0000,0x724B,0x0000,0x3B2A,0x0000, +0x9752,0x0000,0x0000,0x4264,0x0000,0x9753,0x0000,0x0000, +0x0000,0x724C,0x7249,0x7248,0x724A,0x7E4C,0x0000,0x9754, +0x375F,0x0000,0x9755,0x9756,0x0000,0x0000,0x9758,0x9757, +0x7250,0x724F,0x724E,0x9751,0x0000,0x3033,0x0000,0x975C, +0x7E4D,0x0000,0x975A,0x0000,0x0000,0x7E4E,0x0000,0x0000, + +/* 9C00h */ +0x7E4F,0x0000,0x0000,0x0000,0x725A,0x0000,0x7256,0x0000, +0x7257,0x7253,0x7259,0x0000,0x7255,0x3362,0x0000,0x0000, +0x4F4C,0x0000,0x7258,0x7254,0x7252,0x7251,0x975E,0x0000, +0x975F,0x9760,0x9761,0x725C,0x0000,0x9762,0x0000,0x0000, +0x0000,0x725F,0x9763,0x7E50,0x725E,0x725D,0x0000,0x9764, +0x0000,0x9765,0x9766,0x0000,0x0000,0x4949,0x725B,0x3073, +0x7260,0x9768,0x7262,0x0000,0x0000,0x0000,0x9769,0x976A, +0x0000,0x336F,0x724D,0x3137,0x0000,0x0000,0x7264,0x0000, +0x0000,0x7E51,0x0000,0x0000,0x0000,0x976B,0x7263,0x7261, +0x432D,0x976E,0x976F,0x0000,0x0000,0x0000,0x0000,0x7E52, +0x7E53,0x0000,0x4B70,0x7E54,0x9771,0x0000,0x0000,0x4E5A, +0x9772,0x0000,0x7265,0x9773,0x976C,0x9774,0x0000,0x9775, +0x7266,0x0000,0x0000,0x7E55,0x0000,0x7E56,0x0000,0x7267, +0x0000,0x9776,0x9777,0x9778,0x0000,0x9779,0x977A,0x0000, +0x977B,0x0000,0x977C,0x0000,0x0000,0x977D,0x7268,0x7E57, +0x7269,0x0000,0x977E,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x443B,0x9821,0x726A, +0x0000,0x4837,0x0000,0x726F,0x726B,0x0000,0x0000,0x0000, +0x726C,0x0000,0x9822,0x4B31,0x4C44,0x0000,0x4650,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, + +/* 9D00h */ +0x0000,0x0000,0x9824,0x7270,0x0000,0x0000,0x7271,0x463E, +0x726E,0x726D,0x0000,0x9823,0x0000,0x0000,0x322A,0x0000, +0x0000,0x9826,0x7279,0x0000,0x0000,0x7278,0x0000,0x9827, +0x9828,0x0000,0x0000,0x3175,0x0000,0x7E58,0x7E59,0x7276, +0x0000,0x0000,0x0000,0x7275,0x0000,0x0000,0x7273,0x0000, +0x337B,0x0000,0x7272,0x3C32,0x3229,0x0000,0x0000,0x0000, +0x0000,0x0000,0x982C,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x3963,0x0000,0x0000,0x727C,0x727B, +0x0000,0x727A,0x982E,0x7E5A,0x7277,0x0000,0x727D,0x7E5B, +0x727E,0x0000,0x982F,0x0000,0x0000,0x0000,0x0000,0x0000, +0x7325,0x7324,0x7E5C,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x7326,0x0000,0x0000,0x312D,0x7321,0x7322,0x9830, +0x3974,0x4C39,0x9831,0x7E5D,0x7323,0x0000,0x0000,0x0000, +0x0000,0x9833,0x0000,0x9834,0x4B32,0x0000,0x0000,0x732B, +0x7E5E,0x0000,0x7327,0x9836,0x0000,0x0000,0x9837,0x9838, +0x0000,0x0000,0x732C,0x0000,0x7E5F,0x0000,0x9839,0x0000, +0x0000,0x0000,0x0000,0x0000,0x983A,0x0000,0x0000,0x7329, +0x0000,0x7328,0x7E60,0x0000,0x0000,0x983B,0x0000,0x375C, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x7E61,0x0000, +0x0000,0x983C,0x732D,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x983D,0x0000,0x0000,0x732E,0x0000,0x0000,0x0000, +0x0000,0x732F,0x0000,0x732A,0x7E63,0x0000,0x0000,0x7274, +0x0000,0x0000,0x7330,0x0000,0x4461,0x983F,0x0000,0x0000, +0x7334,0x9840,0x7335,0x7333,0x7E64,0x9841,0x0000,0x983E, +0x7E62,0x7332,0x7338,0x9842,0x7331,0x0000,0x7336,0x9843, +0x0000,0x9844,0x0000,0x0000,0x0000,0x0000,0x0000,0x7337, +0x0000,0x0000,0x0000,0x733A,0x0000,0x0000,0x9845,0x7E65, +0x0000,0x7339,0x9846,0x0000,0x0000,0x0000,0x0000,0x9847, +0x9848,0x0000,0x0000,0x9849,0x0000,0x0000,0x733C,0x7E67, +0x0000,0x0000,0x0000,0x0000,0x0000,0x733D,0x0000,0x733E, +0x0000,0x0000,0x4F49,0x0000,0x984A,0x0000,0x0000,0x0000, +0x733B,0x426B,0x3A6D,0x0000,0x0000,0x733F,0x0000,0x0000, + +/* 9E00h */ +0x0000,0x0000,0x984D,0x0000,0x0000,0x0000,0x0000,0x7E68, +0x0000,0x0000,0x984C,0x0000,0x0000,0x984E,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x7E69,0x0000,0x0000, +0x0000,0x984F,0x7340,0x7341,0x9850,0x9851,0x7342,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x7343,0x0000,0x0000, +0x3834,0x7344,0x0000,0x9852,0x7E6A,0x7345,0x0000,0x3C2F, +0x9854,0x7346,0x0000,0x0000,0x0000,0x9855,0x0000,0x0000, +0x7347,0x0000,0x0000,0x7348,0x7349,0x0000,0x0000,0x0000, +0x0000,0x734C,0x734A,0x4F3C,0x0000,0x734B,0x0000,0x4E6F, +0x0000,0x0000,0x0000,0x9856,0x0000,0x734D,0x7E6B,0x4E5B, +0x0000,0x0000,0x0000,0x0000,0x7E6C,0x734E,0x477E,0x0000, +0x9857,0x734F,0x7351,0x0000,0x7E6D,0x7352,0x0000,0x7E6E, +0x0000,0x0000,0x0000,0x0000,0x7E6F,0x7E70,0x0000,0x0000, +0x7350,0x396D,0x4C4D,0x4B63,0x5677,0x9859,0x5D60,0x4B7B, +0x0000,0x0000,0x0000,0x7E71,0x322B,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x7354,0x3550,0x7355,0x7356, +0x7357,0x7E72,0x3975,0x0000,0x7358,0x0000,0x0000,0x0000, +0x6054,0x4C5B,0x0000,0x4263,0x7359,0x735B,0x735A,0x985B, +0x735C,0x0000,0x0000,0x0000,0x0000,0x735D,0x0000,0x985C, +0x735E,0x0000,0x0000,0x0000,0x0000,0x0000,0x985D,0x735F, +0x0000,0x0000,0x0000,0x0000,0x7360,0x0000,0x7361,0x7362, +0x0000,0x7363,0x0000,0x7364,0x7365,0x7366,0x0000,0x985E, + +/* 9F00h */ +0x0000,0x0000,0x985F,0x9861,0x0000,0x0000,0x0000,0x7367, +0x7368,0x0000,0x0000,0x0000,0x0000,0x0000,0x4524,0x0000, +0x7E73,0x0000,0x0000,0x385D,0x0000,0x736A,0x0000,0x9862, +0x0000,0x9863,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x414D,0x736B,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x736C,0x0000,0x0000,0x9864, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x9865, +0x0000,0x7E74,0x9866,0x4921,0x0000,0x9867,0x736D,0x0000, +0x0000,0x9868,0x0000,0x0000,0x0000,0x9869,0x986A,0x0000, +0x0000,0x0000,0x736E,0x6337,0x0000,0x0000,0x6C5A,0x706D, +0x0000,0x0000,0x736F,0x986B,0x7370,0x986C,0x0000,0x7E75, +0x986D,0x0000,0x0000,0x0000,0x0000,0x986F,0x0000,0x7372, +0x7373,0x7374,0x4E70,0x7371,0x0000,0x0000,0x7375,0x7376, +0x0000,0x9871,0x7378,0x0000,0x7377,0x9873,0x0000,0x0000, +0x9874,0x0000,0x737A,0x0000,0x0000,0x9875,0x737B,0x7379, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x4E36,0x0000,0x0000, +0x7E76,0x0000,0x0000,0x0000,0x7E77,0x737C,0x0000,0x7E78, +0x0000,0x0000,0x0000,0x0000,0x737D,0x6354,0x0000,0x0000, +0x737E,0x0000,0x7E79,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +}; + +static const int ucs_i_jisx0213_table_min = 0x4E00; +static const int ucs_i_jisx0213_table_max = 0x4E00 + (sizeof(ucs_i_jisx0213_table)/ + sizeof(unsigned short)); + +/* Halfwidth and Fullwidth Forms */ +static const unsigned short ucs_r_jisx0213_table[] = { // 0xff00 - 0xffe5 + +/* FF00h */ +0x0000,0x212A,0x2230,0x2174,0x2170,0x2173,0x2175,0x222F, +0x214A,0x214B,0x2176,0x215C,0x2124,0x2231,0x2125,0x213F, +0x2330,0x2331,0x2332,0x2333,0x2334,0x2335,0x2336,0x2337, +0x2338,0x2339,0x2127,0x2128,0x2163,0x2161,0x2164,0x2129, +0x2177,0x2341,0x2342,0x2343,0x2344,0x2345,0x2346,0x2347, +0x2348,0x2349,0x234A,0x234B,0x234C,0x234D,0x234E,0x234F, +0x2350,0x2351,0x2352,0x2353,0x2354,0x2355,0x2356,0x2357, +0x2358,0x2359,0x235A,0x214E,0x2140,0x214F,0x2130,0x2132, +0x212E,0x2361,0x2362,0x2363,0x2364,0x2365,0x2366,0x2367, +0x2368,0x2369,0x236A,0x236B,0x236C,0x236D,0x236E,0x236F, +0x2370,0x2371,0x2372,0x2373,0x2374,0x2375,0x2376,0x2377, +0x2378,0x2379,0x237A,0x2150,0x2143,0x2151,0x2232,0x2256, +0x2257,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7, +0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF, +0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7, +0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF, +0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7, +0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF, +0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7, +0x00D8,0x00D9,0x00DA,0x00DB,0x00DC,0x00DD,0x00DE,0x00DF, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x2131,0x0000,0x216F,}; + +static const int ucs_r_jisx0213_table_min = 0xFF00; +static const int ucs_r_jisx0213_table_max = 0xFF00 + (sizeof(ucs_r_jisx0213_table)/ + sizeof(unsigned short)); + +/* CJK Compatibility Ideographs : U+F900 - U+FAFF */ +static const unsigned short ucs_r2_jisx0213_table[] = { // 0xfa0f - 0xfa6a +0x2F4B, +0x2F57,0x4F72,0x0000,0x8679,0x757A,0x775A,0x776F,0x0000, +0x0000,0x793C,0x793D,0x7941,0x0000,0x0000,0x0000,0x7B3A, +0x9138,0x9145,0x7C2E,0x0000,0x936E,0x0000,0x7C6A,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x2E38,0x2E49,0x2E50,0x2E63,0x2E68,0x2E6E,0x2F2C,0x2F2F, +0x2F36,0x2F5A,0x2F5E,0x4F61,0x4F62,0x7450,0x745C,0x745E, +0x7461,0x7528,0x752B,0x7543,0x7565,0x7669,0x7677,0x7725, +0x7755,0x8A29,0x7825,0x7927,0x7933,0x7934,0x7937,0x7938, +0x7939,0x793B,0x793F,0x7940,0x794D,0x7951,0x7964,0x7A2E, +0x8E50,0x7A33,0x7A3A,0x7A44,0x7A58,0x8F74,0x8F75,0x7B27, +0x7B6F,0x7B79,0x7C2F,0x7C30,0x7C38,0x7C3D,0x9369,0x7C59, +0x7D63,0x7D76,0x7D7B,}; + +static const int ucs_r2_jisx0213_min = 0xFA0F; +static const int ucs_r2_jisx0213_max = 0xFA6A; + +/* + CJK Compatibility Ideographs: U+F900 - U+FAFF (seperate mapping for U+F9XX) +*/ +static const unsigned short ucs_r2b_jisx0213_cmap_key[] = { + 0xf91d,0xf928,0xf929,0xf936,0xf970,0xf9d0,0xf9dc}; + +static const unsigned short ucs_r2b_jisx0213_cmap_val[] = { + 0x763b,0x742e,0x754e,0x7b4f,0x7649,0x7e24,0x7d5d}; + +static const int ucs_r2b_jisx0213_cmap_len = + sizeof(ucs_r2b_jisx0213_cmap_key)/sizeof(unsigned short); + +/* + U+1E00 - U+4DBF in compresed mapping + + Latin Extended Additional: U+1E00 - U+1EFF + Greek Extended: U+1F00 - U+1FFF + General Punctuation: U+2000 - U+206F + Currency Symbols U+20A0 - U+20CF + Combining Diacritical Marks for Symbols: U+20D0 - 20FF + Number Forms: U+2150 - U+218F + Arrow : U+2190 - U+21FF + Mathematical Operations : U+2200 - U+22FF + Miscellaneous Technical : U+2300 - U+23FF + Enclosed Alphanumerics : U+2460 - U+24FF + Box Drawing: U+2500 - U+257F + Geometric Shapes: U+25A0 - U+25FF + Miscellanuous Symbols : U+2600 - U+26FF + Digbats : U+2700 - U+27BF + Supplemental Arrows-B: U+2900 - U+297F + Miscellaneous Mathematical Symbols-B: U+2980 - U+29FF + CJK Symbols and Punctution: U+3000 - U+303F + Hiragana (*1) : U+3040 - U+309F + Katakana (*1): U+30A0 - U+30FF + CJK Strokes: U+31C0-31EF + Katakana Phonetic Extensions : U+31F0 - U+31FF + CJK Unified Ideographs Extension A: U+3400 - U+4DBF + + *1 U+3000 - U+30FF is also defined in ucs_hk to optimize for speed. + */ +static const unsigned short ucs_c1_jisx0213_tbl[] = { // 0x1e00 - 0x4dff +0x1E3E,0x1E3F,0x1F70,0x1F71,0x1F72,0x1F73,0x2010,0x2010, +0x2013,0x2013,0x2014,0x2014,0x2016,0x2016,0x2018,0x2019, +0x201C,0x201D,0x2020,0x2021,0x2022,0x2022,0x2025,0x2025, +0x2026,0x2026,0x2030,0x2030,0x2032,0x2033,0x203B,0x203B, +0x203C,0x203C,0x203E,0x203E,0x203F,0x203F,0x2042,0x2042, +0x2047,0x2049,0x2051,0x2051,0x20AC,0x20AC,0x2103,0x2103, +0x210F,0x210F,0x2113,0x2113,0x2116,0x2116,0x2121,0x2121, +0x2127,0x2127,0x212B,0x212B,0x2135,0x2135,0x2153,0x2155, +0x2160,0x216A,0x216B,0x216B,0x2170,0x217B,0x2190,0x2191, +0x2192,0x2192,0x2193,0x2193,0x2194,0x2194,0x2196,0x2196, +0x2197,0x2198,0x2199,0x2199,0x21C4,0x21C4,0x21D2,0x21D2, +0x21D4,0x21D4,0x21E6,0x21E7,0x21E8,0x21E8,0x21E9,0x21E9, +0x2200,0x2200,0x2202,0x2202,0x2203,0x2203,0x2205,0x2205, +0x2207,0x2207,0x2208,0x2208,0x2209,0x2209,0x220B,0x220B, +0x2212,0x2212,0x2213,0x2213,0x221A,0x221A,0x221D,0x221D, +0x221E,0x221E,0x221F,0x221F,0x2220,0x2220,0x2225,0x2226, +0x2227,0x2228,0x2229,0x2229,0x222A,0x222A,0x222B,0x222C, +0x222E,0x222E,0x2234,0x2234,0x2235,0x2235,0x223D,0x223D, +0x2243,0x2243,0x2245,0x2245,0x2248,0x2248,0x2252,0x2252, +0x2260,0x2260,0x2261,0x2261,0x2262,0x2262,0x2266,0x2267, +0x226A,0x226B,0x2276,0x2277,0x2282,0x2283,0x2284,0x2285, +0x2286,0x2287,0x228A,0x228B,0x2295,0x2297,0x22A5,0x22A5, +0x22BF,0x22BF,0x22DA,0x22DB,0x2305,0x2306,0x2312,0x2312, +0x2318,0x2318,0x23BE,0x23CC,0x23CE,0x23CE,0x2423,0x2423, +0x2460,0x2473,0x24D0,0x24E9,0x24EB,0x24F4,0x24F5,0x24FE, +0x2500,0x2500,0x2501,0x2501,0x2502,0x2502,0x2503,0x2503, +0x250C,0x250C,0x250F,0x250F,0x2510,0x2510,0x2513,0x2513, +0x2514,0x2514,0x2517,0x2517,0x2518,0x2518,0x251B,0x251B, +0x251C,0x251C,0x251D,0x251D,0x2520,0x2520,0x2523,0x2523, +0x2524,0x2524,0x2525,0x2525,0x2528,0x2528,0x252B,0x252B, +0x252C,0x252C,0x252F,0x252F,0x2530,0x2530,0x2533,0x2533, +0x2534,0x2534,0x2537,0x2537,0x2538,0x2538,0x253B,0x253B, +0x253C,0x253C,0x253F,0x253F,0x2542,0x2542,0x254B,0x254B, +0x25A0,0x25A0,0x25A1,0x25A1,0x25B1,0x25B1,0x25B2,0x25B2, +0x25B3,0x25B3,0x25B6,0x25B6,0x25B7,0x25B7,0x25BC,0x25BC, +0x25BD,0x25BD,0x25C0,0x25C0,0x25C1,0x25C1,0x25C6,0x25C6, +0x25C7,0x25C7,0x25C9,0x25C9,0x25CB,0x25CB,0x25CE,0x25CE, +0x25CF,0x25CF,0x25D0,0x25D3,0x25E6,0x25E6,0x25EF,0x25EF, +0x2600,0x2603,0x2605,0x2605,0x2606,0x2606,0x260E,0x260E, +0x2616,0x2617,0x261E,0x261E,0x2640,0x2640,0x2642,0x2642, +0x2660,0x2660,0x2661,0x2661,0x2662,0x2662,0x2663,0x2663, +0x2664,0x2664,0x2665,0x2665,0x2666,0x2666,0x2667,0x2667, +0x2668,0x2668,0x2669,0x2669,0x266A,0x266A,0x266B,0x266C, +0x266D,0x266D,0x266E,0x266E,0x266F,0x266F,0x2713,0x2713, +0x2756,0x2756,0x2776,0x277F,0x2934,0x2935,0x29BF,0x29BF, +0x29FA,0x29FB,0x3000,0x3002,0x3003,0x3003,0x3005,0x3007, +0x3008,0x3011,0x3012,0x3012,0x3013,0x3013,0x3014,0x3015, +0x3016,0x3017,0x3018,0x3019,0x301C,0x301C,0x301D,0x301D, +0x301F,0x301F,0x3020,0x3020,0x3033,0x3035,0x303B,0x303C, +0x303D,0x303D,0x3041,0x3096,0x309B,0x309C,0x309D,0x309E, +0x309F,0x309F,0x30A0,0x30A0,0x30A1,0x30F6,0x30F7,0x30FA, +0x30FB,0x30FB,0x30FC,0x30FC,0x30FD,0x30FE,0x30FF,0x30FF, +0x31F0,0x31F9,0x31FA,0x31FF,0x3231,0x3232,0x3239,0x3239, +0x3251,0x325F,0x32A4,0x32A8,0x32B1,0x32BF,0x32D0,0x32E3, +0x32E5,0x32E5,0x32E9,0x32E9,0x32EC,0x32EC,0x32ED,0x32ED, +0x32FA,0x32FA,0x3303,0x3303,0x330D,0x330D,0x3314,0x3314, +0x3318,0x3318,0x3322,0x3322,0x3323,0x3323,0x3326,0x3326, +0x3327,0x3327,0x332B,0x332B,0x3336,0x3336,0x333B,0x333B, +0x3349,0x3349,0x334A,0x334A,0x334D,0x334D,0x3351,0x3351, +0x3357,0x3357,0x337B,0x337B,0x337C,0x337C,0x337D,0x337D, +0x337E,0x337E,0x338E,0x338F,0x339C,0x339E,0x33A1,0x33A1, +0x33C4,0x33C4,0x33CB,0x33CB,0x33CD,0x33CD,0x3402,0x3402, +0x3406,0x3406,0x342C,0x342C,0x342E,0x342E,0x3468,0x3468, +0x346A,0x346A,0x3492,0x3492,0x34B5,0x34B5,0x34BC,0x34BC, +0x34C1,0x34C1,0x34C7,0x34C7,0x34DB,0x34DB,0x351F,0x351F, +0x355D,0x355E,0x3563,0x3563,0x356E,0x356E,0x35A6,0x35A6, +0x35A8,0x35A8,0x35C5,0x35C5,0x35DA,0x35DA,0x35F4,0x35F4, +0x3605,0x3605,0x364A,0x364A,0x3691,0x3691,0x3696,0x3696, +0x3699,0x3699,0x36CF,0x36CF,0x3761,0x3761,0x3762,0x3762, +0x376B,0x376B,0x376C,0x376C,0x3775,0x3775,0x378D,0x378D, +0x37C1,0x37C1,0x37E2,0x37E2,0x37E8,0x37E8,0x37F4,0x37F4, +0x37FD,0x37FD,0x3800,0x3800,0x382F,0x382F,0x3836,0x3836, +0x3840,0x3840,0x385C,0x385C,0x3861,0x3861,0x38FA,0x38FA, +0x3917,0x3917,0x391A,0x391A,0x396F,0x396F,0x3A6E,0x3A6E, +0x3A73,0x3A73,0x3AD6,0x3AD6,0x3AD7,0x3AD7,0x3AEA,0x3AEA, +0x3B0E,0x3B0E,0x3B1A,0x3B1A,0x3B1C,0x3B1C,0x3B22,0x3B22, +0x3B6D,0x3B6D,0x3B77,0x3B77,0x3B87,0x3B88,0x3B8D,0x3B8D, +0x3BA4,0x3BA4,0x3BB6,0x3BB6,0x3BC3,0x3BC3,0x3BCD,0x3BCD, +0x3BF0,0x3BF0,0x3C0F,0x3C0F,0x3C26,0x3C26,0x3CC3,0x3CC3, +0x3CD2,0x3CD2,0x3D11,0x3D11,0x3D1E,0x3D1E,0x3D64,0x3D64, +0x3D9A,0x3D9A,0x3DC0,0x3DC0,0x3DD4,0x3DD4,0x3E05,0x3E05, +0x3E3F,0x3E3F,0x3E60,0x3E60,0x3E66,0x3E66,0x3E68,0x3E68, +0x3E83,0x3E83,0x3E94,0x3E94,0x3F57,0x3F57,0x3F72,0x3F72, +0x3F75,0x3F75,0x3F77,0x3F77,0x3FAE,0x3FAE,0x3FC9,0x3FC9, +0x3FD7,0x3FD7,0x4039,0x4039,0x4058,0x4058,0x4093,0x4093, +0x4105,0x4105,0x4148,0x4148,0x414F,0x414F,0x4163,0x4163, +0x41B4,0x41B4,0x41BF,0x41BF,0x41E6,0x41E6,0x41EE,0x41EE, +0x41F3,0x41F3,0x4207,0x4207,0x420E,0x420E,0x4264,0x4264, +0x42C6,0x42C6,0x42D6,0x42D6,0x42DD,0x42DD,0x4302,0x4302, +0x432B,0x432B,0x4343,0x4343,0x43EE,0x43EE,0x43F0,0x43F0, +0x4408,0x4408,0x4417,0x4417,0x441C,0x441C,0x4422,0x4422, +0x4453,0x4453,0x445B,0x445B,0x4476,0x4476,0x447A,0x447A, +0x4491,0x4491,0x44B3,0x44B3,0x44BE,0x44BE,0x44D4,0x44D4, +0x4508,0x4508,0x450D,0x450D,0x4525,0x4525,0x4543,0x4543, +0x459D,0x459D,0x45B8,0x45B8,0x45E5,0x45E5,0x45EA,0x45EA, +0x460F,0x460F,0x4641,0x4641,0x4665,0x4665,0x46A1,0x46A1, +0x46AF,0x46AF,0x470C,0x470C,0x4764,0x4764,0x47FD,0x47FD, +0x4816,0x4816,0x4844,0x4844,0x484E,0x484E,0x48B5,0x48B5, +0x49B0,0x49B0,0x49E7,0x49E7,0x49FA,0x49FA,0x4A04,0x4A04, +0x4A29,0x4A29,0x4ABC,0x4ABC,0x4B3B,0x4B3B,0x4BC2,0x4BC2, +0x4BCA,0x4BCA,0x4BD2,0x4BD2,0x4BE8,0x4BE8,0x4C17,0x4C17, +0x4C20,0x4C20,0x4CC4,0x4CC4,0x4CD1,0x4CD1,0x4D07,0x4D07, +0x4D77,0x4D77,}; + +static const unsigned short ucs_c1_jisx0213_ofst[] = { +0x2872,0x2B46,0x2B50,0x213E,0x237C,0x213D,0x2142,0x2146, +0x2148,0x2277,0x2340,0x2145,0x2144,0x2273,0x216C,0x2228, +0x286B,0x007E,0x2B58,0x2C7E,0x286C,0x2C7D,0x2921,0x216E, +0x235D,0x235F,0x2D62,0x2D64,0x2360,0x2272,0x235C,0x2778, +0x2D35,0x2D57,0x2C35,0x222B,0x222A,0x222D,0x2271,0x2327, +0x2325,0x2328,0x2329,0x224D,0x224E,0x232B,0x232A,0x232D, +0x224F,0x225F,0x2250,0x2247,0x2260,0x223A,0x2246,0x223B, +0x215D,0x235B,0x2265,0x2267,0x2167,0x2D78,0x225C,0x2254, +0x224A,0x2241,0x2240,0x2269,0x2D73,0x2168,0x2268,0x2266, +0x226C,0x226D,0x226E,0x2262,0x2162,0x2261,0x226B,0x2165, +0x2263,0x226F,0x223E,0x2242,0x223C,0x2244,0x2251,0x225D, +0x2D79,0x2776,0x2248,0x225E,0x277C,0x2742,0x277E,0x277D, +0x2D21,0x2C41,0x2C2B,0x265A,0x2821,0x282C,0x2822,0x282D, +0x2823,0x282E,0x2824,0x282F,0x2826,0x2831,0x2825,0x2830, +0x2827,0x283C,0x2837,0x2832,0x2829,0x283E,0x2839,0x2834, +0x2828,0x2838,0x283D,0x2833,0x282A,0x283A,0x283F,0x2835, +0x282B,0x283B,0x2840,0x2836,0x2223,0x2222,0x266D,0x2225, +0x2224,0x2322,0x2321,0x2227,0x2226,0x2324,0x2323,0x2221, +0x217E,0x233B,0x217B,0x217D,0x217C,0x2867,0x233F,0x227E, +0x2668,0x217A,0x2179,0x2667,0x2664,0x2D7E,0x216A,0x2169, +0x263A,0x263D,0x263B,0x2640,0x2639,0x263E,0x263C,0x263F, +0x266C,0x227D,0x2276,0x227B,0x2275,0x227A,0x2274,0x277B, +0x2D7D,0x2C21,0x232E,0x233A,0x237D,0x2121,0x2137,0x2139, +0x2152,0x2229,0x222E,0x214C,0x225A,0x2258,0x2141,0x2D60, +0x2D61,0x2666,0x2233,0x2236,0x233C,0x2421,0x212B,0x2135, +0x2239,0x237B,0x2521,0x2772,0x2126,0x213C,0x2133,0x2238, +0x266E,0x2679,0x2D6A,0x2D6C,0x2841,0x2D65,0x2850,0x2C5B, +0x2C71,0x2C70,0x2C73,0x2C72,0x2C6F,0x2D46,0x2D4A,0x2D41, +0x2D44,0x2D42,0x2D4C,0x2D4B,0x2D45,0x2D4D,0x2D47,0x2D4F, +0x2D40,0x2D4E,0x2D43,0x2D48,0x2D49,0x2D5F,0x2D6F,0x2D6E, +0x2D6D,0x2D53,0x2D50,0x2D56,0x2D55,0x235E,0x2D63,0x2E23, +0x7F2D,0x7F32,0x7F33,0x7F5E,0x7F56,0x7F7E,0x2E53,0x812B, +0x8E68,0x812F,0x2E5B,0x8148,0x815D,0x8161,0x8167,0x8223, +0x8226,0x822F,0x8238,0x8242,0x824A,0x8279,0x833F,0x8343, +0x8341,0x8357,0x8023,0x8025,0x8029,0x8028,0x802C,0x4F5F, +0x803E,0x4F6F,0x8056,0x8059,0x805C,0x805E,0x806F,0x8071, +0x8074,0x8079,0x807B,0x843B,0x8446,0x844A,0x8460,0x855B, +0x855F,0x8571,0x8636,0x857C,0x862E,0x8632,0x8634,0x7549, +0x866D,0x8665,0x8728,0x872C,0x8734,0x757E,0x7621,0x8748, +0x875D,0x763A,0x8777,0x883B,0x8842,0x8871,0x887E,0x8940, +0x8954,0x8970,0x8977,0x8A28,0x7766,0x8A3F,0x8A41,0x8A42, +0x8A49,0x8A50,0x8B34,0x784D,0x8B46,0x8B48,0x8B5C,0x8B67, +0x8B6C,0x8C22,0x8C2D,0x8C39,0x8C64,0x8C74,0x8C77,0x8C7D, +0x8D33,0x8D37,0x8D47,0x8D4B,0x8D48,0x8D53,0x8D57,0x796D, +0x8E2B,0x8E36,0x8E3B,0x8E4E,0x8E5D,0x8E61,0x8F3E,0x8F42, +0x8F48,0x8F4A,0x8F4C,0x8F4F,0x7A59,0x7A5A,0x8F6C,0x8F6E, +0x8F77,0x9035,0x9032,0x9034,0x9059,0x9054,0x906D,0x906E, +0x7B51,0x914F,0x916C,0x7B60,0x9224,0x923A,0x9243,0x924E, +0x9253,0x926B,0x9329,0x933F,0x9349,0x7C4B,0x935C,0x9427, +0x7D58,0x956A,0x9570,0x9575,0x9578,0x9637,0x9655,0x9726, +0x9728,0x972A,0x9731,0x7E3E,0x973F,0x982A,0x982D,0x984B, +0x9860,}; + +static const int ucs_c1_jisx0213_tbl_len = sizeof(ucs_c1_jisx0213_ofst)/sizeof(unsigned short); + +static const int ucs_c1_jisx0213_min = 0x1E00; +static const int ucs_c1_jisx0213_max = 0x4DFF; + +/* CJK Unified ideographs Extension B: U+2XXXX */ +static const unsigned short jisx0213_jis_u5_tbl[] = { +0x000B,0x123D,0x131B,0x146E,0x18BD,0x0B9F,0x16B4,0x1E34, +0x31C4,0x35C4,0x373F,0x3763,0x3CFE,0x47F1,0x548E,0x550E, +0x5771,0x59C4,0x5DA1,0x6AFF,0x6E40,0x70F4,0x7684,0x8277, +0x83CD,0xA190,0x0089,0x00A2,0x00A4,0x01A2,0x0213,0x032B, +0x0381,0x0371,0x1C56,0x1D2D,0x1D45,0x1D78,0x1D62,0x1DA1, +0x1D9C,0x1D92,0x1DB7,0x1DE0,0x1E33,0x1F1E,0x1F76,0x1FFA, +0x03F9,0x044A,0x0509,0x05D6,0x0628,0x074F,0x0807,0x083A, +0x08B9,0x097C,0x099D,0x0AD3,0x0B1D,0x0D45,0x0DE1,0x0E95, +0x0E6D,0x0E64,0x0F5F,0x1201,0x1255,0x127B,0x1274,0x12E4, +0x12D7,0x12FD,0x1336,0x1344,0x13C4,0x146D,0x15D7,0x6C29, +0x1647,0x1706,0x1742,0x19C3,0x217B,0x231E,0x23AD,0x26F3, +0x285B,0x28AB,0x298F,0x2AB8,0x2B4F,0x2B50,0x2B46,0x2C1D, +0x2BA6,0x2C24,0x2DE1,0x31C3,0x31F5,0x31B6,0x3372,0x33D3, +0x33D2,0x33D0,0x33E4,0x33D5,0x33DA,0x33DF,0x344A,0x3451, +0x344B,0x3465,0x34E4,0x355A,0x3594,0x3639,0x3647,0x3638, +0x363A,0x371C,0x370C,0x3764,0x37FF,0x37E7,0x3824,0x383D, +0x3A98,0x3C7F,0x3D00,0x3D40,0x3DFA,0x3DF9,0x3DD3,0x3F7E, +0x4096,0x4103,0x41C6,0x41FE,0x43BC,0x4629,0x46A5,0x4896, +0x4A4D,0x4B56,0x4B6F,0x4C16,0x4D14,0x4E0E,0x4E37,0x4E6A, +0x4E8B,0x504A,0x5055,0x5122,0x51A9,0x51E5,0x51CD,0x521E, +0x524C,0x542E,0x54D9,0x55A7,0x57A9,0x57B4,0x59D4,0x5AE4, +0x5AE3,0x5AF1,0x5BB2,0x5C4B,0x5C64,0x5E2E,0x5E56,0x5E65, +0x5E62,0x5ED8,0x5EC2,0x5EE8,0x5F23,0x5F5C,0x5FE0,0x5FD4, +0x600C,0x5FFB,0x6017,0x6060,0x60ED,0x6270,0x6286,0x634C, +0x3D0E,0x6402,0x667E,0x66B0,0x671D,0x68DD,0x68EA,0x6951, +0x696F,0x69DD,0x6A1E,0x6A58,0x6A8C,0x6AB7,0x6C73,0x6CDD, +0x6E65,0x6F94,0x6FF8,0x6FF6,0x6FF7,0x710D,0x7139,0x73DB, +0x73DA,0x73FE,0x7410,0x7449,0x7615,0x7614,0x7631,0x7693, +0x770E,0x7723,0x7752,0x7985,0x7A84,0x7BB3,0x7BBE,0x7BC7, +0x7CB8,0x7DA0,0x7E10,0x7FB7,0x808A,0x80BB,0x8282,0x82F3, +0x840C,0x8455,0x856B,0x85C8,0x85C9,0x86D7,0x86FA,0x8949, +0x8946,0x896B,0x8987,0x8988,0x89BA,0x89BB,0x8A1E,0x8A29, +0x8A71,0x8A43,0x8A99,0x8ACD,0x8AE4,0x8ADD,0x8BC1,0x8BEF, +0x8D10,0x8D71,0x8DFB,0x8E1F,0x8E36,0x8E89,0x8EEB,0x8F32, +0x8FF8,0x92A0,0x92B1,0x9490,0x95CF,0x967F,0x96F0,0x9719, +0x9750,0x98C6,0x9A72,0x9DDB,0x9E3D,0x9E15,0x9E8A,0x9E49, +0x9EC4,0x9EE9,0x9EDB,0x9FCE,0xA02F,0xA01A,0xA0F9,0xA082, +0x2218,0xA38C,0xA437,0xA5F1,0xA602,0xA61A,0xA6B2,}; + +static const unsigned short jisx0213_jis_u5_key[] = { +0x2E22,0x2F42,0x2F4C,0x2F60,0x2F7B,0x4F54,0x4F63,0x4F6E, +0x753A,0x7572,0x7629,0x7632,0x7660,0x776C,0x787E,0x7929, +0x7947,0x7954,0x796E,0x7A5D,0x7B33,0x7B49,0x7B6C,0x7C49, +0x7C51,0x7E66,0x7F21,0x7F2B,0x7F2E,0x7F36,0x7F46,0x7F70, +0x7F77,0x7F79,0x8030,0x8037,0x8038,0x803A,0x803B,0x803F, +0x8040,0x8045,0x8048,0x804A,0x804B,0x805B,0x8066,0x806C, +0x8122,0x8125,0x8127,0x8131,0x8132,0x8138,0x813F,0x8141, +0x814A,0x8152,0x8153,0x8159,0x815C,0x8177,0x822A,0x8231, +0x8232,0x823A,0x823D,0x8259,0x825C,0x825E,0x8263,0x826A, +0x826B,0x8272,0x8274,0x8275,0x8325,0x8332,0x833E,0x8344, +0x8347,0x8355,0x8356,0x837E,0x8422,0x842B,0x8430,0x8450, +0x8465,0x846D,0x8472,0x8524,0x8529,0x852A,0x8532,0x8534, +0x8535,0x8539,0x8556,0x857D,0x8623,0x8624,0x863A,0x863C, +0x863D,0x8642,0x8643,0x8644,0x8647,0x8649,0x8655,0x8656, +0x8657,0x865B,0x8677,0x8678,0x872A,0x873F,0x8740,0x8742, +0x8743,0x874E,0x8759,0x8761,0x8769,0x876A,0x8770,0x8775, +0x8823,0x8834,0x8849,0x885C,0x885E,0x885F,0x8860,0x8932, +0x8947,0x894D,0x8961,0x8964,0x8A22,0x8A33,0x8A39,0x8A53, +0x8A7B,0x8B2E,0x8B30,0x8B35,0x8B44,0x8B5D,0x8B61,0x8B66, +0x8B69,0x8B75,0x8B77,0x8B7A,0x8C21,0x8C23,0x8C24,0x8C28, +0x8C2C,0x8C3D,0x8C48,0x8C5B,0x8C75,0x8C76,0x8D32,0x8D3D, +0x8D3E,0x8D40,0x8D52,0x8D5D,0x8D5E,0x8D73,0x8D74,0x8D75, +0x8D77,0x8D7B,0x8D7D,0x8E22,0x8E24,0x8E27,0x8E2E,0x8E2F, +0x8E34,0x8E35,0x8E3D,0x8E42,0x8E4F,0x8E69,0x8E6B,0x8E72, +0x8E75,0x8E79,0x8F35,0x8F3A,0x8F46,0x8F56,0x8F58,0x8F5A, +0x8F5D,0x8F5F,0x8F63,0x8F6A,0x8F70,0x8F73,0x9044,0x904E, +0x905D,0x9075,0x907E,0x9121,0x9122,0x9133,0x9136,0x9164, +0x9165,0x916B,0x916E,0x9173,0x9229,0x922A,0x922C,0x9234, +0x923C,0x923E,0x9242,0x9256,0x9263,0x9277,0x9279,0x927A, +0x9325,0x932F,0x9332,0x9339,0x9342,0x9348,0x9359,0x935E, +0x9366,0x936B,0x937A,0x937E,0x9421,0x942C,0x942F,0x944F, +0x9450,0x9457,0x9465,0x9466,0x9471,0x9472,0x947E,0x9521, +0x952C,0x952D,0x9536,0x9537,0x953D,0x953E,0x954E,0x954F, +0x9557,0x955A,0x955C,0x955D,0x9561,0x9565,0x9567,0x9569, +0x9571,0x9622,0x9623,0x9638,0x9642,0x964C,0x9656,0x9659, +0x965D,0x9676,0x972C,0x974B,0x974C,0x9759,0x975B,0x975D, +0x9767,0x976D,0x9770,0x9825,0x9829,0x982B,0x9832,0x9835, +0x9853,0x9858,0x985A,0x986E,0x9870,0x9872,0x9876,}; + +static const unsigned short jisx0213_u5_jis_tbl[] = { +0x2E22,0x7F21,0x7F2B,0x7F2E,0x7F36,0x7F46,0x7F70,0x7F79, +0x7F77,0x8122,0x8125,0x8127,0x8131,0x8132,0x8138,0x813F, +0x8141,0x814A,0x8152,0x8153,0x8159,0x815C,0x4F54,0x8177, +0x822A,0x823A,0x8232,0x8231,0x823D,0x8259,0x2F42,0x825C, +0x8263,0x825E,0x826B,0x826A,0x8272,0x2F4C,0x8274,0x8275, +0x8325,0x8332,0x2F60,0x833E,0x8347,0x4F63,0x8355,0x8356, +0x2F7B,0x837E,0x8030,0x8037,0x8038,0x803B,0x803A,0x8045, +0x8040,0x803F,0x8048,0x804A,0x804B,0x4F6E,0x805B,0x8066, +0x806C,0x8422,0x9853,0x842B,0x8430,0x8450,0x8465,0x846D, +0x8472,0x8524,0x8532,0x8529,0x852A,0x8535,0x8534,0x8539, +0x8556,0x8624,0x857D,0x753A,0x8623,0x863A,0x8642,0x863D, +0x863C,0x8644,0x8647,0x8649,0x8643,0x8655,0x8657,0x8656, +0x865B,0x8677,0x8678,0x872A,0x7572,0x8742,0x873F,0x8743, +0x8740,0x8759,0x874E,0x7629,0x7632,0x8761,0x876A,0x8769, +0x8770,0x8775,0x8823,0x8834,0x7660,0x8849,0x8E75,0x885C, +0x8860,0x885F,0x885E,0x8932,0x8947,0x894D,0x8961,0x8964, +0x8A22,0x8A33,0x8A39,0x776C,0x8A53,0x8A7B,0x8B2E,0x8B30, +0x8B35,0x8B44,0x8B5D,0x8B61,0x8B66,0x8B69,0x8B75,0x8B77, +0x8B7A,0x8C21,0x8C24,0x8C23,0x8C28,0x8C2C,0x8C3D,0x787E, +0x8C48,0x7929,0x8C5B,0x7947,0x8C75,0x8C76,0x7954,0x8D32, +0x8D3E,0x8D3D,0x8D40,0x8D52,0x8D5D,0x8D5E,0x796E,0x8D73, +0x8D74,0x8D77,0x8D75,0x8D7D,0x8D7B,0x8E22,0x8E24,0x8E27, +0x8E2F,0x8E2E,0x8E35,0x8E34,0x8E3D,0x8E42,0x8E4F,0x8E69, +0x8E6B,0x8E72,0x8E79,0x8F35,0x8F3A,0x8F46,0x8F56,0x8F58, +0x8F5A,0x8F5D,0x8F5F,0x8F63,0x8F6A,0x8F70,0x8F73,0x7A5D, +0x8344,0x9044,0x904E,0x7B33,0x905D,0x9075,0x9121,0x9122, +0x907E,0x7B49,0x9133,0x9136,0x9165,0x9164,0x916B,0x916E, +0x9173,0x922A,0x9229,0x922C,0x7B6C,0x9234,0x923C,0x923E, +0x9242,0x9256,0x9263,0x9277,0x9279,0x927A,0x9325,0x932F, +0x9332,0x9339,0x9342,0x9348,0x7C49,0x9359,0x935E,0x7C51, +0x9366,0x936B,0x937A,0x937E,0x9421,0x942C,0x942F,0x9450, +0x944F,0x9457,0x9465,0x9466,0x9471,0x9472,0x947E,0x9521, +0x952D,0x952C,0x9536,0x9537,0x953E,0x953D,0x954E,0x954F, +0x9557,0x955A,0x955C,0x955D,0x9561,0x9565,0x9567,0x9569, +0x9571,0x9622,0x9623,0x9638,0x9642,0x964C,0x9656,0x9659, +0x965D,0x9676,0x972C,0x974B,0x9759,0x974C,0x975D,0x975B, +0x9767,0x9770,0x976D,0x9825,0x982B,0x9829,0x9835,0x9832, +0x7E66,0x9858,0x985A,0x986E,0x9870,0x9872,0x9876,}; + +static const unsigned short jisx0213_u5_jis_key[] = { +0x000B,0x0089,0x00A2,0x00A4,0x01A2,0x0213,0x032B,0x0371, +0x0381,0x03F9,0x044A,0x0509,0x05D6,0x0628,0x074F,0x0807, +0x083A,0x08B9,0x097C,0x099D,0x0AD3,0x0B1D,0x0B9F,0x0D45, +0x0DE1,0x0E64,0x0E6D,0x0E95,0x0F5F,0x1201,0x123D,0x1255, +0x1274,0x127B,0x12D7,0x12E4,0x12FD,0x131B,0x1336,0x1344, +0x13C4,0x146D,0x146E,0x15D7,0x1647,0x16B4,0x1706,0x1742, +0x18BD,0x19C3,0x1C56,0x1D2D,0x1D45,0x1D62,0x1D78,0x1D92, +0x1D9C,0x1DA1,0x1DB7,0x1DE0,0x1E33,0x1E34,0x1F1E,0x1F76, +0x1FFA,0x217B,0x2218,0x231E,0x23AD,0x26F3,0x285B,0x28AB, +0x298F,0x2AB8,0x2B46,0x2B4F,0x2B50,0x2BA6,0x2C1D,0x2C24, +0x2DE1,0x31B6,0x31C3,0x31C4,0x31F5,0x3372,0x33D0,0x33D2, +0x33D3,0x33D5,0x33DA,0x33DF,0x33E4,0x344A,0x344B,0x3451, +0x3465,0x34E4,0x355A,0x3594,0x35C4,0x3638,0x3639,0x363A, +0x3647,0x370C,0x371C,0x373F,0x3763,0x3764,0x37E7,0x37FF, +0x3824,0x383D,0x3A98,0x3C7F,0x3CFE,0x3D00,0x3D0E,0x3D40, +0x3DD3,0x3DF9,0x3DFA,0x3F7E,0x4096,0x4103,0x41C6,0x41FE, +0x43BC,0x4629,0x46A5,0x47F1,0x4896,0x4A4D,0x4B56,0x4B6F, +0x4C16,0x4D14,0x4E0E,0x4E37,0x4E6A,0x4E8B,0x504A,0x5055, +0x5122,0x51A9,0x51CD,0x51E5,0x521E,0x524C,0x542E,0x548E, +0x54D9,0x550E,0x55A7,0x5771,0x57A9,0x57B4,0x59C4,0x59D4, +0x5AE3,0x5AE4,0x5AF1,0x5BB2,0x5C4B,0x5C64,0x5DA1,0x5E2E, +0x5E56,0x5E62,0x5E65,0x5EC2,0x5ED8,0x5EE8,0x5F23,0x5F5C, +0x5FD4,0x5FE0,0x5FFB,0x600C,0x6017,0x6060,0x60ED,0x6270, +0x6286,0x634C,0x6402,0x667E,0x66B0,0x671D,0x68DD,0x68EA, +0x6951,0x696F,0x69DD,0x6A1E,0x6A58,0x6A8C,0x6AB7,0x6AFF, +0x6C29,0x6C73,0x6CDD,0x6E40,0x6E65,0x6F94,0x6FF6,0x6FF7, +0x6FF8,0x70F4,0x710D,0x7139,0x73DA,0x73DB,0x73FE,0x7410, +0x7449,0x7614,0x7615,0x7631,0x7684,0x7693,0x770E,0x7723, +0x7752,0x7985,0x7A84,0x7BB3,0x7BBE,0x7BC7,0x7CB8,0x7DA0, +0x7E10,0x7FB7,0x808A,0x80BB,0x8277,0x8282,0x82F3,0x83CD, +0x840C,0x8455,0x856B,0x85C8,0x85C9,0x86D7,0x86FA,0x8946, +0x8949,0x896B,0x8987,0x8988,0x89BA,0x89BB,0x8A1E,0x8A29, +0x8A43,0x8A71,0x8A99,0x8ACD,0x8ADD,0x8AE4,0x8BC1,0x8BEF, +0x8D10,0x8D71,0x8DFB,0x8E1F,0x8E36,0x8E89,0x8EEB,0x8F32, +0x8FF8,0x92A0,0x92B1,0x9490,0x95CF,0x967F,0x96F0,0x9719, +0x9750,0x98C6,0x9A72,0x9DDB,0x9E15,0x9E3D,0x9E49,0x9E8A, +0x9EC4,0x9EDB,0x9EE9,0x9FCE,0xA01A,0xA02F,0xA082,0xA0F9, +0xA190,0xA38C,0xA437,0xA5F1,0xA602,0xA61A,0xA6B2,}; + +static const int jisx0213_u5_tbl_min = 0x2000B; +static const int jisx0213_u5_tbl_max = 0x2A6B2; +static const int jisx0213_u5_tbl_len = sizeof(jisx0213_u5_jis_key)/sizeof(unsigned short); + +/* combined chars in JIS X 0213 */ +static const unsigned short jisx0213_u2_key[] = { + 0x2477,0x2478,0x2479,0x247A,0x247B,0x2577,0x2578,0x2579, + 0x257A,0x257B,0x257C,0x257D,0x257E,0x2678,0x2B44,0x2B48, + 0x2B49,0x2B4A,0x2B4B,0x2B4C,0x2B4D,0x2B4E,0x2B4F,0x2B65, + 0x2B66}; + +/* combined pairs in Unicode */ +static const unsigned short jisx0213_u2_tbl[] = { + 0x304B,0x309A,0x304D,0x309A,0x304F,0x309A,0x3051,0x309A, + 0x3053,0x309A,0x30AB,0x309A,0x30AD,0x309A,0x30AF,0x309A, + 0x30B1,0x309A,0x30B3,0x309A,0x30BB,0x309A,0x30C4,0x309A, + 0x30C8,0x309A,0x31F7,0x309A,0x00E6,0x0300,0x0254,0x0300, + 0x0254,0x0301,0x028C,0x0300,0x028C,0x0301,0x0259,0x0300, + 0x0259,0x0301,0x025A,0x0300,0x025A,0x0301,0x02E9,0x02E5, + 0x02E5,0x02E9}; + +/* fallback chars for combined chars in Unicode */ +static const unsigned short jisx0213_u2_fb_tbl[] = { + 0x242B,0x242D,0x242F,0x2431,0x2433,0x252B,0x252D,0x252F, + 0x2531,0x2533,0x253B,0x2544,0x2548,0x2675,0x295C,0x2B38, + 0x2B38,0x2B37,0x2B37,0x2B30,0x2B30,0x2B43,0x2B43,0x2B64, + 0x2B60}; + +static const int jisx0213_u2_tbl_len = sizeof(jisx0213_u2_key)/sizeof(unsigned short); + + +static const unsigned short jisx0213_p2_ofst[] = { + 1, 8, 3, 4, 5, 12, 13, 14, 15, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94}; + +static const int jisx0213_p2_ofst_len = + sizeof(jisx0213_p2_ofst)/sizeof(unsigned short); + +static const int uni2jis_tbl_range[][2] = { + {0x0000, 0x045f}, + {0x3000, 0x30ff}, + {0x4e00, 0x9fff}, + {0xff00, 0xffe5}, + {0xfa0f, 0xfa6a}, +}; + +static const unsigned short *uni2jis_tbl[] = { + ucs_a1_jisx0213_table, + ucs_hk_jisx0213_table, + ucs_i_jisx0213_table, + ucs_r_jisx0213_table, + ucs_r2_jisx0213_table, +}; + +static const int uni2jis_tbl_len = sizeof(uni2jis_tbl_range)/(sizeof(int)*2); + +#endif /* UNICODE_TABLE_JIS2004_H */ + diff --git a/ext/mbstring/libmbfl/filters/unicode_table_koi8r.h b/ext/mbstring/libmbfl/filters/unicode_table_koi8r.h new file mode 100644 index 0000000..ad3a68c --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_koi8r.h @@ -0,0 +1,53 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The original author of this file: Den V. Tsopa <tdv@edisoft.ru> + * + */ + +#ifndef UNICODE_TABLE_KOI8R_H +#define UNICODE_TABLE_KOI8R_H + +/* KOI8-R (RFC1489) to Unicode */ +static const unsigned short koi8r_ucs_table[] = { + 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, + 0x252c, 0x2534, 0x253c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590, + 0x2591, 0x2592, 0x2593, 0x2320, 0x25a0, 0x2219, 0x221a, 0x2248, + 0x2264, 0x2265, 0x00a0, 0x2321, 0x00b0, 0x00b2, 0x00b7, 0x00f7, + 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556, + 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d, 0x255e, + 0x255f, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565, + 0x2566, 0x2567, 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x00a9, + 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, + 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, + 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, + 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, + 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, + 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, + 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, + 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a +}; +static const int koi8r_ucs_table_min = 0x80; +static const int koi8r_ucs_table_len = (sizeof (koi8r_ucs_table) / sizeof (unsigned short)); +static const int koi8r_ucs_table_max = 0x80 + (sizeof (koi8r_ucs_table) / sizeof (unsigned short)); + + + +#endif /* UNNICODE_TABLE_KOI8R_H */ diff --git a/ext/mbstring/libmbfl/filters/unicode_table_koi8u.h b/ext/mbstring/libmbfl/filters/unicode_table_koi8u.h new file mode 100644 index 0000000..f3a4e9d --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_koi8u.h @@ -0,0 +1,166 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this part: Maksym Veremeyenko <verem@m1.tv> + * + */ + +#ifndef UNICODE_TABLE_KOI8U_H +#define UNICODE_TABLE_KOI8U_H + +/* KOI8-U (RFC2319) to Unicode */ +static const unsigned short koi8u_ucs_table[] = { + 0x2500, /* BOX DRAWINGS LIGHT HORIZONTAL */ + 0x2502, /* BOX DRAWINGS LIGHT VERTICAL */ + 0x250C, /* BOX DRAWINGS LIGHT DOWN AND RIGHT */ + 0x2510, /* BOX DRAWINGS LIGHT DOWN AND LEFT */ + 0x2514, /* BOX DRAWINGS LIGHT UP AND RIGHT */ + 0x2518, /* BOX DRAWINGS LIGHT UP AND LEFT */ + 0x251C, /* BOX DRAWINGS LIGHT VERTICAL AND RIGHT */ + 0x2524, /* BOX DRAWINGS LIGHT VERTICAL AND LEFT */ + 0x252C, /* BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */ + 0x2534, /* BOX DRAWINGS LIGHT UP AND HORIZONTAL */ + 0x253C, /* BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */ + 0x2580, /* UPPER HALF BLOCK */ + 0x2584, /* LOWER HALF BLOCK */ + 0x2588, /* FULL BLOCK */ + 0x258C, /* LEFT HALF BLOCK */ + 0x2590, /* RIGHT HALF BLOCK */ + 0x2591, /* LIGHT SHADE */ + 0x2592, /* MEDIUM SHADE */ + 0x2593, /* DARK SHADE */ + 0x2320, /* TOP HALF INTEGRAL */ + 0x25A0, /* BLACK SQUARE */ + 0x2219, /* BULLET OPERATOR */ + 0x221A, /* SQUARE ROOT */ + 0x2248, /* ALMOST EQUAL TO */ + 0x2264, /* LESS THAN OR EQUAL TO */ + 0x2265, /* GREATER THAN OR EQUAL TO */ + 0x00A0, /* NO-BREAK SPACE */ + 0x2321, /* BOTTOM HALF INTEGRAL */ + 0x00B0, /* DEGREE SIGN */ + 0x00B2, /* SUPERSCRIPT TWO */ + 0x00B7, /* MIDDLE DOT */ + 0x00F7, /* DIVISION SIGN */ + 0x2550, /* BOX DRAWINGS DOUBLE HORIZONTAL */ + 0x2551, /* BOX DRAWINGS DOUBLE VERTICAL */ + 0x2552, /* BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE */ + 0x0451, /* CYRILLIC SMALL LETTER IO */ + 0x0454, /* CYRILLIC SMALL LETTER UKRAINIAN IE */ + 0x2554, /* BOX DRAWINGS DOUBLE DOWN AND RIGHT */ + 0x0456, /* CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ + 0x0457, /* CYRILLIC SMALL LETTER YI (UKRAINIAN) */ + 0x2557, /* BOX DRAWINGS DOUBLE DOWN AND LEFT */ + 0x2558, /* BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE */ + 0x2559, /* BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE */ + 0x255A, /* BOX DRAWINGS DOUBLE UP AND RIGHT */ + 0x255B, /* BOX DRAWINGS UP SINGLE AND LEFT DOUBLE */ + 0x0491, /* CYRILLIC SMALL LETTER GHE WITH UPTURN */ + 0x255D, /* BOX DRAWINGS DOUBLE UP AND LEFT */ + 0x255E, /* BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE */ + 0x255F, /* BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE */ + 0x2560, /* BOX DRAWINGS DOUBLE VERTICAL AND RIGHT */ + 0x2561, /* BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE */ + 0x0401, /* CYRILLIC CAPITAL LETTER IO */ + 0x0404, /* CYRILLIC CAPITAL LETTER UKRAINIAN IE */ + 0x2563, /* BOX DRAWINGS DOUBLE VERTICAL AND LEFT */ + 0x0406, /* CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ + 0x0407, /* CYRILLIC CAPITAL LETTER YI (UKRAINIAN) */ + 0x2566, /* BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL */ + 0x2567, /* BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE */ + 0x2568, /* BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE */ + 0x2569, /* BOX DRAWINGS DOUBLE UP AND HORIZONTAL */ + 0x256A, /* BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE */ + 0x0490, /* CYRILLIC CAPITAL LETTER GHE WITH UPTURN */ + 0x256C, /* BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL */ + 0x00A9, /* COPYRIGHT SIGN */ + 0x044E, /* CYRILLIC SMALL LETTER YU */ + 0x0430, /* CYRILLIC SMALL LETTER A */ + 0x0431, /* CYRILLIC SMALL LETTER BE */ + 0x0446, /* CYRILLIC SMALL LETTER TSE */ + 0x0434, /* CYRILLIC SMALL LETTER DE */ + 0x0435, /* CYRILLIC SMALL LETTER IE */ + 0x0444, /* CYRILLIC SMALL LETTER EF */ + 0x0433, /* CYRILLIC SMALL LETTER GHE */ + 0x0445, /* CYRILLIC SMALL LETTER KHA */ + 0x0438, /* CYRILLIC SMALL LETTER I */ + 0x0439, /* CYRILLIC SMALL LETTER SHORT I */ + 0x043A, /* CYRILLIC SMALL LETTER KA */ + 0x043B, /* CYRILLIC SMALL LETTER EL */ + 0x043C, /* CYRILLIC SMALL LETTER EM */ + 0x043D, /* CYRILLIC SMALL LETTER EN */ + 0x043E, /* CYRILLIC SMALL LETTER O */ + 0x043F, /* CYRILLIC SMALL LETTER PE */ + 0x044F, /* CYRILLIC SMALL LETTER YA */ + 0x0440, /* CYRILLIC SMALL LETTER ER */ + 0x0441, /* CYRILLIC SMALL LETTER ES */ + 0x0442, /* CYRILLIC SMALL LETTER TE */ + 0x0443, /* CYRILLIC SMALL LETTER U */ + 0x0436, /* CYRILLIC SMALL LETTER ZHE */ + 0x0432, /* CYRILLIC SMALL LETTER VE */ + 0x044C, /* CYRILLIC SMALL LETTER SOFT SIGN */ + 0x044B, /* CYRILLIC SMALL LETTER YERU */ + 0x0437, /* CYRILLIC SMALL LETTER ZE */ + 0x0448, /* CYRILLIC SMALL LETTER SHA */ + 0x044D, /* CYRILLIC SMALL LETTER E */ + 0x0449, /* CYRILLIC SMALL LETTER SHCHA */ + 0x0447, /* CYRILLIC SMALL LETTER CHE */ + 0x044A, /* CYRILLIC SMALL LETTER HARD SIGN */ + 0x042E, /* CYRILLIC CAPITAL LETTER YU */ + 0x0410, /* CYRILLIC CAPITAL LETTER A */ + 0x0411, /* CYRILLIC CAPITAL LETTER BE */ + 0x0426, /* CYRILLIC CAPITAL LETTER TSE */ + 0x0414, /* CYRILLIC CAPITAL LETTER DE */ + 0x0415, /* CYRILLIC CAPITAL LETTER IE */ + 0x0424, /* CYRILLIC CAPITAL LETTER EF */ + 0x0413, /* CYRILLIC CAPITAL LETTER GHE */ + 0x0425, /* CYRILLIC CAPITAL LETTER KHA */ + 0x0418, /* CYRILLIC CAPITAL LETTER I */ + 0x0419, /* CYRILLIC CAPITAL LETTER SHORT I */ + 0x041A, /* CYRILLIC CAPITAL LETTER KA */ + 0x041B, /* CYRILLIC CAPITAL LETTER EL */ + 0x041C, /* CYRILLIC CAPITAL LETTER EM */ + 0x041D, /* CYRILLIC CAPITAL LETTER EN */ + 0x041E, /* CYRILLIC CAPITAL LETTER O */ + 0x041F, /* CYRILLIC CAPITAL LETTER PE */ + 0x042F, /* CYRILLIC CAPITAL LETTER YA */ + 0x0420, /* CYRILLIC CAPITAL LETTER ER */ + 0x0421, /* CYRILLIC CAPITAL LETTER ES */ + 0x0422, /* CYRILLIC CAPITAL LETTER TE */ + 0x0423, /* CYRILLIC CAPITAL LETTER U */ + 0x0416, /* CYRILLIC CAPITAL LETTER ZHE */ + 0x0412, /* CYRILLIC CAPITAL LETTER VE */ + 0x042C, /* CYRILLIC CAPITAL LETTER SOFT SIGN */ + 0x042B, /* CYRILLIC CAPITAL LETTER YERU */ + 0x0417, /* CYRILLIC CAPITAL LETTER ZE */ + 0x0428, /* CYRILLIC CAPITAL LETTER SHA */ + 0x042D, /* CYRILLIC CAPITAL LETTER E */ + 0x0429, /* CYRILLIC CAPITAL LETTER SHCHA */ + 0x0427, /* CYRILLIC CAPITAL LETTER CHE */ + 0x042A /* CYRILLIC CAPITAL LETTER HARD SIGN */ +}; +static const int koi8u_ucs_table_min = 0x80; +static const int koi8u_ucs_table_len = (sizeof (koi8u_ucs_table) / sizeof (unsigned short)); +static const int koi8u_ucs_table_max = 0x80 + (sizeof (koi8u_ucs_table) / sizeof (unsigned short)); + + + +#endif /* UNNICODE_TABLE_KOI8U_H */ + diff --git a/ext/mbstring/libmbfl/filters/unicode_table_uhc.h b/ext/mbstring/libmbfl/filters/unicode_table_uhc.h new file mode 100644 index 0000000..6b98c65 --- /dev/null +++ b/ext/mbstring/libmbfl/filters/unicode_table_uhc.h @@ -0,0 +1,7222 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: Rui Hirokawa <hirokawa@php.net> + * + */ + +#ifndef UNICODE_TABLE_UHC_H +#define UNICODE_TABLE_UHC_H + +/* + * Unicode table + */ +#ifdef UNICODE_TABLE_UHC_DEF + +const unsigned short uhc1_ucs_table[] = { +0xac02,0xac03,0xac05,0xac06,0xac0b,0xac0c,0xac0d,0xac0e, +0xac0f,0xac18,0xac1e,0xac1f,0xac21,0xac22,0xac23,0xac25, +0xac26,0xac27,0xac28,0xac29,0xac2a,0xac2b,0xac2e,0xac32, +0xac33,0xac34,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xac35,0xac36,0xac37,0xac3a,0xac3b,0xac3d,0xac3e,0xac3f, +0xac41,0xac42,0xac43,0xac44,0xac45,0xac46,0xac47,0xac48, +0xac49,0xac4a,0xac4c,0xac4e,0xac4f,0xac50,0xac51,0xac52, +0xac53,0xac55,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xac56,0xac57,0xac59,0xac5a,0xac5b,0xac5d,0xac5e,0xac5f, +0xac60,0xac61,0xac62,0xac63,0xac64,0xac65,0xac66,0xac67, +0xac68,0xac69,0xac6a,0xac6b,0xac6c,0xac6d,0xac6e,0xac6f, +0xac72,0xac73,0xac75,0xac76,0xac79,0xac7b,0xac7c,0xac7d, +0xac7e,0xac7f,0xac82,0xac87,0xac88,0xac8d,0xac8e,0xac8f, +0xac91,0xac92,0xac93,0xac95,0xac96,0xac97,0xac98,0xac99, +0xac9a,0xac9b,0xac9e,0xaca2,0xaca3,0xaca4,0xaca5,0xaca6, +0xaca7,0xacab,0xacad,0xacae,0xacb1,0xacb2,0xacb3,0xacb4, +0xacb5,0xacb6,0xacb7,0xacba,0xacbe,0xacbf,0xacc0,0xacc2, +0xacc3,0xacc5,0xacc6,0xacc7,0xacc9,0xacca,0xaccb,0xaccd, +0xacce,0xaccf,0xacd0,0xacd1,0xacd2,0xacd3,0xacd4,0xacd6, +0xacd8,0xacd9,0xacda,0xacdb,0xacdc,0xacdd,0xacde,0xacdf, +0xace2,0xace3,0xace5,0xace6,0xace9,0xaceb,0xaced,0xacee, +0xacf2,0xacf4,0xacf7,0xacf8,0xacf9,0xacfa,0xacfb,0xacfe, +0xacff,0xad01,0xad02,0xad03,0xad05,0xad07,0xad08,0xad09, +0xad0a,0xad0b,0xad0e,0xad10,0xad12,0xad13,0xad14,0xad15, +0xad16,0xad17,0xad19,0xad1a,0xad1b,0xad1d,0xad1e,0xad1f, +0xad21,0xad22,0xad23,0xad24,0xad25,0xad26,0xad27,0xad28, +0xad2a,0xad2b,0xad2e,0xad2f,0xad30,0xad31,0xad32,0xad33, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad36,0xad37, +0xad39,0xad3a,0xad3b,0xad3d,0xad3e,0xad3f,0xad40,0xad41, +0xad42,0xad43,0xad46,0xad48,0xad4a,0xad4b,0xad4c,0xad4d, +0xad4e,0xad4f,0xad51,0xad52,0xad53,0xad55,0xad56,0xad57, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xad59,0xad5a, +0xad5b,0xad5c,0xad5d,0xad5e,0xad5f,0xad60,0xad62,0xad64, +0xad65,0xad66,0xad67,0xad68,0xad69,0xad6a,0xad6b,0xad6e, +0xad6f,0xad71,0xad72,0xad77,0xad78,0xad79,0xad7a,0xad7e, +0xad80,0xad83,0xad84,0xad85,0xad86,0xad87,0xad8a,0xad8b, +0xad8d,0xad8e,0xad8f,0xad91,0xad92,0xad93,0xad94,0xad95, +0xad96,0xad97,0xad98,0xad99,0xad9a,0xad9b,0xad9e,0xad9f, +0xada0,0xada1,0xada2,0xada3,0xada5,0xada6,0xada7,0xada8, +0xada9,0xadaa,0xadab,0xadac,0xadad,0xadae,0xadaf,0xadb0, +0xadb1,0xadb2,0xadb3,0xadb4,0xadb5,0xadb6,0xadb8,0xadb9, +0xadba,0xadbb,0xadbc,0xadbd,0xadbe,0xadbf,0xadc2,0xadc3, +0xadc5,0xadc6,0xadc7,0xadc9,0xadca,0xadcb,0xadcc,0xadcd, +0xadce,0xadcf,0xadd2,0xadd4,0xadd5,0xadd6,0xadd7,0xadd8, +0xadd9,0xadda,0xaddb,0xaddd,0xadde,0xaddf,0xade1,0xade2, +0xade3,0xade5,0xade6,0xade7,0xade8,0xade9,0xadea,0xadeb, +0xadec,0xaded,0xadee,0xadef,0xadf0,0xadf1,0xadf2,0xadf3, +0xadf4,0xadf5,0xadf6,0xadf7,0xadfa,0xadfb,0xadfd,0xadfe, +0xae02,0xae03,0xae04,0xae05,0xae06,0xae07,0xae0a,0xae0c, +0xae0e,0xae0f,0xae10,0xae11,0xae12,0xae13,0xae15,0xae16, +0xae17,0xae18,0xae19,0xae1a,0xae1b,0xae1c,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xae1d,0xae1e,0xae1f,0xae20, +0xae21,0xae22,0xae23,0xae24,0xae25,0xae26,0xae27,0xae28, +0xae29,0xae2a,0xae2b,0xae2c,0xae2d,0xae2e,0xae2f,0xae32, +0xae33,0xae35,0xae36,0xae39,0xae3b,0xae3c,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xae3d,0xae3e,0xae3f,0xae42, +0xae44,0xae47,0xae48,0xae49,0xae4b,0xae4f,0xae51,0xae52, +0xae53,0xae55,0xae57,0xae58,0xae59,0xae5a,0xae5b,0xae5e, +0xae62,0xae63,0xae64,0xae66,0xae67,0xae6a,0xae6b,0xae6d, +0xae6e,0xae6f,0xae71,0xae72,0xae73,0xae74,0xae75,0xae76, +0xae77,0xae7a,0xae7e,0xae7f,0xae80,0xae81,0xae82,0xae83, +0xae86,0xae87,0xae88,0xae89,0xae8a,0xae8b,0xae8d,0xae8e, +0xae8f,0xae90,0xae91,0xae92,0xae93,0xae94,0xae95,0xae96, +0xae97,0xae98,0xae99,0xae9a,0xae9b,0xae9c,0xae9d,0xae9e, +0xae9f,0xaea0,0xaea1,0xaea2,0xaea3,0xaea4,0xaea5,0xaea6, +0xaea7,0xaea8,0xaea9,0xaeaa,0xaeab,0xaeac,0xaead,0xaeae, +0xaeaf,0xaeb0,0xaeb1,0xaeb2,0xaeb3,0xaeb4,0xaeb5,0xaeb6, +0xaeb7,0xaeb8,0xaeb9,0xaeba,0xaebb,0xaebf,0xaec1,0xaec2, +0xaec3,0xaec5,0xaec6,0xaec7,0xaec8,0xaec9,0xaeca,0xaecb, +0xaece,0xaed2,0xaed3,0xaed4,0xaed5,0xaed6,0xaed7,0xaeda, +0xaedb,0xaedd,0xaede,0xaedf,0xaee0,0xaee1,0xaee2,0xaee3, +0xaee4,0xaee5,0xaee6,0xaee7,0xaee9,0xaeea,0xaeec,0xaeee, +0xaeef,0xaef0,0xaef1,0xaef2,0xaef3,0xaef5,0xaef6,0xaef7, +0xaef9,0xaefa,0xaefb,0xaefd,0xaefe,0xaeff,0xaf00,0xaf01, +0xaf02,0xaf03,0xaf04,0xaf05,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xaf06,0xaf09,0xaf0a,0xaf0b,0xaf0c,0xaf0e, +0xaf0f,0xaf11,0xaf12,0xaf13,0xaf14,0xaf15,0xaf16,0xaf17, +0xaf18,0xaf19,0xaf1a,0xaf1b,0xaf1c,0xaf1d,0xaf1e,0xaf1f, +0xaf20,0xaf21,0xaf22,0xaf23,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xaf24,0xaf25,0xaf26,0xaf27,0xaf28,0xaf29, +0xaf2a,0xaf2b,0xaf2e,0xaf2f,0xaf31,0xaf33,0xaf35,0xaf36, +0xaf37,0xaf38,0xaf39,0xaf3a,0xaf3b,0xaf3e,0xaf40,0xaf44, +0xaf45,0xaf46,0xaf47,0xaf4a,0xaf4b,0xaf4c,0xaf4d,0xaf4e, +0xaf4f,0xaf51,0xaf52,0xaf53,0xaf54,0xaf55,0xaf56,0xaf57, +0xaf58,0xaf59,0xaf5a,0xaf5b,0xaf5e,0xaf5f,0xaf60,0xaf61, +0xaf62,0xaf63,0xaf66,0xaf67,0xaf68,0xaf69,0xaf6a,0xaf6b, +0xaf6c,0xaf6d,0xaf6e,0xaf6f,0xaf70,0xaf71,0xaf72,0xaf73, +0xaf74,0xaf75,0xaf76,0xaf77,0xaf78,0xaf7a,0xaf7b,0xaf7c, +0xaf7d,0xaf7e,0xaf7f,0xaf81,0xaf82,0xaf83,0xaf85,0xaf86, +0xaf87,0xaf89,0xaf8a,0xaf8b,0xaf8c,0xaf8d,0xaf8e,0xaf8f, +0xaf92,0xaf93,0xaf94,0xaf96,0xaf97,0xaf98,0xaf99,0xaf9a, +0xaf9b,0xaf9d,0xaf9e,0xaf9f,0xafa0,0xafa1,0xafa2,0xafa3, +0xafa4,0xafa5,0xafa6,0xafa7,0xafa8,0xafa9,0xafaa,0xafab, +0xafac,0xafad,0xafae,0xafaf,0xafb0,0xafb1,0xafb2,0xafb3, +0xafb4,0xafb5,0xafb6,0xafb7,0xafba,0xafbb,0xafbd,0xafbe, +0xafbf,0xafc1,0xafc2,0xafc3,0xafc4,0xafc5,0xafc6,0xafca, +0xafcc,0xafcf,0xafd0,0xafd1,0xafd2,0xafd3,0xafd5,0xafd6, +0xafd7,0xafd8,0xafd9,0xafda,0xafdb,0xafdd,0xafde,0xafdf, +0xafe0,0xafe1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xafe2,0xafe3,0xafe4,0xafe5,0xafe6,0xafe7,0xafea,0xafeb, +0xafec,0xafed,0xafee,0xafef,0xaff2,0xaff3,0xaff5,0xaff6, +0xaff7,0xaff9,0xaffa,0xaffb,0xaffc,0xaffd,0xaffe,0xafff, +0xb002,0xb003,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xb005,0xb006,0xb007,0xb008,0xb009,0xb00a,0xb00b,0xb00d, +0xb00e,0xb00f,0xb011,0xb012,0xb013,0xb015,0xb016,0xb017, +0xb018,0xb019,0xb01a,0xb01b,0xb01e,0xb01f,0xb020,0xb021, +0xb022,0xb023,0xb024,0xb025,0xb026,0xb027,0xb029,0xb02a, +0xb02b,0xb02c,0xb02d,0xb02e,0xb02f,0xb030,0xb031,0xb032, +0xb033,0xb034,0xb035,0xb036,0xb037,0xb038,0xb039,0xb03a, +0xb03b,0xb03c,0xb03d,0xb03e,0xb03f,0xb040,0xb041,0xb042, +0xb043,0xb046,0xb047,0xb049,0xb04b,0xb04d,0xb04f,0xb050, +0xb051,0xb052,0xb056,0xb058,0xb05a,0xb05b,0xb05c,0xb05e, +0xb05f,0xb060,0xb061,0xb062,0xb063,0xb064,0xb065,0xb066, +0xb067,0xb068,0xb069,0xb06a,0xb06b,0xb06c,0xb06d,0xb06e, +0xb06f,0xb070,0xb071,0xb072,0xb073,0xb074,0xb075,0xb076, +0xb077,0xb078,0xb079,0xb07a,0xb07b,0xb07e,0xb07f,0xb081, +0xb082,0xb083,0xb085,0xb086,0xb087,0xb088,0xb089,0xb08a, +0xb08b,0xb08e,0xb090,0xb092,0xb093,0xb094,0xb095,0xb096, +0xb097,0xb09b,0xb09d,0xb09e,0xb0a3,0xb0a4,0xb0a5,0xb0a6, +0xb0a7,0xb0aa,0xb0b0,0xb0b2,0xb0b6,0xb0b7,0xb0b9,0xb0ba, +0xb0bb,0xb0bd,0xb0be,0xb0bf,0xb0c0,0xb0c1,0xb0c2,0xb0c3, +0xb0c6,0xb0ca,0xb0cb,0xb0cc,0xb0cd,0xb0ce,0xb0cf,0xb0d2, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb0d3,0xb0d5, +0xb0d6,0xb0d7,0xb0d9,0xb0da,0xb0db,0xb0dc,0xb0dd,0xb0de, +0xb0df,0xb0e1,0xb0e2,0xb0e3,0xb0e4,0xb0e6,0xb0e7,0xb0e8, +0xb0e9,0xb0ea,0xb0eb,0xb0ec,0xb0ed,0xb0ee,0xb0ef,0xb0f0, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb0f1,0xb0f2, +0xb0f3,0xb0f4,0xb0f5,0xb0f6,0xb0f7,0xb0f8,0xb0f9,0xb0fa, +0xb0fb,0xb0fc,0xb0fd,0xb0fe,0xb0ff,0xb100,0xb101,0xb102, +0xb103,0xb104,0xb105,0xb106,0xb107,0xb10a,0xb10d,0xb10e, +0xb10f,0xb111,0xb114,0xb115,0xb116,0xb117,0xb11a,0xb11e, +0xb11f,0xb120,0xb121,0xb122,0xb126,0xb127,0xb129,0xb12a, +0xb12b,0xb12d,0xb12e,0xb12f,0xb130,0xb131,0xb132,0xb133, +0xb136,0xb13a,0xb13b,0xb13c,0xb13d,0xb13e,0xb13f,0xb142, +0xb143,0xb145,0xb146,0xb147,0xb149,0xb14a,0xb14b,0xb14c, +0xb14d,0xb14e,0xb14f,0xb152,0xb153,0xb156,0xb157,0xb159, +0xb15a,0xb15b,0xb15d,0xb15e,0xb15f,0xb161,0xb162,0xb163, +0xb164,0xb165,0xb166,0xb167,0xb168,0xb169,0xb16a,0xb16b, +0xb16c,0xb16d,0xb16e,0xb16f,0xb170,0xb171,0xb172,0xb173, +0xb174,0xb175,0xb176,0xb177,0xb17a,0xb17b,0xb17d,0xb17e, +0xb17f,0xb181,0xb183,0xb184,0xb185,0xb186,0xb187,0xb18a, +0xb18c,0xb18e,0xb18f,0xb190,0xb191,0xb195,0xb196,0xb197, +0xb199,0xb19a,0xb19b,0xb19d,0xb19e,0xb19f,0xb1a0,0xb1a1, +0xb1a2,0xb1a3,0xb1a4,0xb1a5,0xb1a6,0xb1a7,0xb1a9,0xb1aa, +0xb1ab,0xb1ac,0xb1ad,0xb1ae,0xb1af,0xb1b0,0xb1b1,0xb1b2, +0xb1b3,0xb1b4,0xb1b5,0xb1b6,0xb1b7,0xb1b8,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xb1b9,0xb1ba,0xb1bb,0xb1bc, +0xb1bd,0xb1be,0xb1bf,0xb1c0,0xb1c1,0xb1c2,0xb1c3,0xb1c4, +0xb1c5,0xb1c6,0xb1c7,0xb1c8,0xb1c9,0xb1ca,0xb1cb,0xb1cd, +0xb1ce,0xb1cf,0xb1d1,0xb1d2,0xb1d3,0xb1d5,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xb1d6,0xb1d7,0xb1d8,0xb1d9, +0xb1da,0xb1db,0xb1de,0xb1e0,0xb1e1,0xb1e2,0xb1e3,0xb1e4, +0xb1e5,0xb1e6,0xb1e7,0xb1ea,0xb1eb,0xb1ed,0xb1ee,0xb1ef, +0xb1f1,0xb1f2,0xb1f3,0xb1f4,0xb1f5,0xb1f6,0xb1f7,0xb1f8, +0xb1fa,0xb1fc,0xb1fe,0xb1ff,0xb200,0xb201,0xb202,0xb203, +0xb206,0xb207,0xb209,0xb20a,0xb20d,0xb20e,0xb20f,0xb210, +0xb211,0xb212,0xb213,0xb216,0xb218,0xb21a,0xb21b,0xb21c, +0xb21d,0xb21e,0xb21f,0xb221,0xb222,0xb223,0xb224,0xb225, +0xb226,0xb227,0xb228,0xb229,0xb22a,0xb22b,0xb22c,0xb22d, +0xb22e,0xb22f,0xb230,0xb231,0xb232,0xb233,0xb235,0xb236, +0xb237,0xb238,0xb239,0xb23a,0xb23b,0xb23d,0xb23e,0xb23f, +0xb240,0xb241,0xb242,0xb243,0xb244,0xb245,0xb246,0xb247, +0xb248,0xb249,0xb24a,0xb24b,0xb24c,0xb24d,0xb24e,0xb24f, +0xb250,0xb251,0xb252,0xb253,0xb254,0xb255,0xb256,0xb257, +0xb259,0xb25a,0xb25b,0xb25d,0xb25e,0xb25f,0xb261,0xb262, +0xb263,0xb264,0xb265,0xb266,0xb267,0xb26a,0xb26b,0xb26c, +0xb26d,0xb26e,0xb26f,0xb270,0xb271,0xb272,0xb273,0xb276, +0xb277,0xb278,0xb279,0xb27a,0xb27b,0xb27d,0xb27e,0xb27f, +0xb280,0xb281,0xb282,0xb283,0xb286,0xb287,0xb288,0xb28a, +0xb28b,0xb28c,0xb28d,0xb28e,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xb28f,0xb292,0xb293,0xb295,0xb296,0xb297, +0xb29b,0xb29c,0xb29d,0xb29e,0xb29f,0xb2a2,0xb2a4,0xb2a7, +0xb2a8,0xb2a9,0xb2ab,0xb2ad,0xb2ae,0xb2af,0xb2b1,0xb2b2, +0xb2b3,0xb2b5,0xb2b6,0xb2b7,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xb2b8,0xb2b9,0xb2ba,0xb2bb,0xb2bc,0xb2bd, +0xb2be,0xb2bf,0xb2c0,0xb2c1,0xb2c2,0xb2c3,0xb2c4,0xb2c5, +0xb2c6,0xb2c7,0xb2ca,0xb2cb,0xb2cd,0xb2ce,0xb2cf,0xb2d1, +0xb2d3,0xb2d4,0xb2d5,0xb2d6,0xb2d7,0xb2da,0xb2dc,0xb2de, +0xb2df,0xb2e0,0xb2e1,0xb2e3,0xb2e7,0xb2e9,0xb2ea,0xb2f0, +0xb2f1,0xb2f2,0xb2f6,0xb2fc,0xb2fd,0xb2fe,0xb302,0xb303, +0xb305,0xb306,0xb307,0xb309,0xb30a,0xb30b,0xb30c,0xb30d, +0xb30e,0xb30f,0xb312,0xb316,0xb317,0xb318,0xb319,0xb31a, +0xb31b,0xb31d,0xb31e,0xb31f,0xb320,0xb321,0xb322,0xb323, +0xb324,0xb325,0xb326,0xb327,0xb328,0xb329,0xb32a,0xb32b, +0xb32c,0xb32d,0xb32e,0xb32f,0xb330,0xb331,0xb332,0xb333, +0xb334,0xb335,0xb336,0xb337,0xb338,0xb339,0xb33a,0xb33b, +0xb33c,0xb33d,0xb33e,0xb33f,0xb340,0xb341,0xb342,0xb343, +0xb344,0xb345,0xb346,0xb347,0xb348,0xb349,0xb34a,0xb34b, +0xb34c,0xb34d,0xb34e,0xb34f,0xb350,0xb351,0xb352,0xb353, +0xb357,0xb359,0xb35a,0xb35d,0xb360,0xb361,0xb362,0xb363, +0xb366,0xb368,0xb36a,0xb36c,0xb36d,0xb36f,0xb372,0xb373, +0xb375,0xb376,0xb377,0xb379,0xb37a,0xb37b,0xb37c,0xb37d, +0xb37e,0xb37f,0xb382,0xb386,0xb387,0xb388,0xb389,0xb38a, +0xb38b,0xb38d,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xb38e,0xb38f,0xb391,0xb392,0xb393,0xb395,0xb396,0xb397, +0xb398,0xb399,0xb39a,0xb39b,0xb39c,0xb39d,0xb39e,0xb39f, +0xb3a2,0xb3a3,0xb3a4,0xb3a5,0xb3a6,0xb3a7,0xb3a9,0xb3aa, +0xb3ab,0xb3ad,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xb3ae,0xb3af,0xb3b0,0xb3b1,0xb3b2,0xb3b3,0xb3b4,0xb3b5, +0xb3b6,0xb3b7,0xb3b8,0xb3b9,0xb3ba,0xb3bb,0xb3bc,0xb3bd, +0xb3be,0xb3bf,0xb3c0,0xb3c1,0xb3c2,0xb3c3,0xb3c6,0xb3c7, +0xb3c9,0xb3ca,0xb3cd,0xb3cf,0xb3d1,0xb3d2,0xb3d3,0xb3d6, +0xb3d8,0xb3da,0xb3dc,0xb3de,0xb3df,0xb3e1,0xb3e2,0xb3e3, +0xb3e5,0xb3e6,0xb3e7,0xb3e9,0xb3ea,0xb3eb,0xb3ec,0xb3ed, +0xb3ee,0xb3ef,0xb3f0,0xb3f1,0xb3f2,0xb3f3,0xb3f4,0xb3f5, +0xb3f6,0xb3f7,0xb3f8,0xb3f9,0xb3fa,0xb3fb,0xb3fd,0xb3fe, +0xb3ff,0xb400,0xb401,0xb402,0xb403,0xb404,0xb405,0xb406, +0xb407,0xb408,0xb409,0xb40a,0xb40b,0xb40c,0xb40d,0xb40e, +0xb40f,0xb411,0xb412,0xb413,0xb414,0xb415,0xb416,0xb417, +0xb419,0xb41a,0xb41b,0xb41d,0xb41e,0xb41f,0xb421,0xb422, +0xb423,0xb424,0xb425,0xb426,0xb427,0xb42a,0xb42c,0xb42d, +0xb42e,0xb42f,0xb430,0xb431,0xb432,0xb433,0xb435,0xb436, +0xb437,0xb438,0xb439,0xb43a,0xb43b,0xb43c,0xb43d,0xb43e, +0xb43f,0xb440,0xb441,0xb442,0xb443,0xb444,0xb445,0xb446, +0xb447,0xb448,0xb449,0xb44a,0xb44b,0xb44c,0xb44d,0xb44e, +0xb44f,0xb452,0xb453,0xb455,0xb456,0xb457,0xb459,0xb45a, +0xb45b,0xb45c,0xb45d,0xb45e,0xb45f,0xb462,0xb464,0xb466, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb467,0xb468, +0xb469,0xb46a,0xb46b,0xb46d,0xb46e,0xb46f,0xb470,0xb471, +0xb472,0xb473,0xb474,0xb475,0xb476,0xb477,0xb478,0xb479, +0xb47a,0xb47b,0xb47c,0xb47d,0xb47e,0xb47f,0xb481,0xb482, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb483,0xb484, +0xb485,0xb486,0xb487,0xb489,0xb48a,0xb48b,0xb48c,0xb48d, +0xb48e,0xb48f,0xb490,0xb491,0xb492,0xb493,0xb494,0xb495, +0xb496,0xb497,0xb498,0xb499,0xb49a,0xb49b,0xb49c,0xb49e, +0xb49f,0xb4a0,0xb4a1,0xb4a2,0xb4a3,0xb4a5,0xb4a6,0xb4a7, +0xb4a9,0xb4aa,0xb4ab,0xb4ad,0xb4ae,0xb4af,0xb4b0,0xb4b1, +0xb4b2,0xb4b3,0xb4b4,0xb4b6,0xb4b8,0xb4ba,0xb4bb,0xb4bc, +0xb4bd,0xb4be,0xb4bf,0xb4c1,0xb4c2,0xb4c3,0xb4c5,0xb4c6, +0xb4c7,0xb4c9,0xb4ca,0xb4cb,0xb4cc,0xb4cd,0xb4ce,0xb4cf, +0xb4d1,0xb4d2,0xb4d3,0xb4d4,0xb4d6,0xb4d7,0xb4d8,0xb4d9, +0xb4da,0xb4db,0xb4de,0xb4df,0xb4e1,0xb4e2,0xb4e5,0xb4e7, +0xb4e8,0xb4e9,0xb4ea,0xb4eb,0xb4ee,0xb4f0,0xb4f2,0xb4f3, +0xb4f4,0xb4f5,0xb4f6,0xb4f7,0xb4f9,0xb4fa,0xb4fb,0xb4fc, +0xb4fd,0xb4fe,0xb4ff,0xb500,0xb501,0xb502,0xb503,0xb504, +0xb505,0xb506,0xb507,0xb508,0xb509,0xb50a,0xb50b,0xb50c, +0xb50d,0xb50e,0xb50f,0xb510,0xb511,0xb512,0xb513,0xb516, +0xb517,0xb519,0xb51a,0xb51d,0xb51e,0xb51f,0xb520,0xb521, +0xb522,0xb523,0xb526,0xb52b,0xb52c,0xb52d,0xb52e,0xb52f, +0xb532,0xb533,0xb535,0xb536,0xb537,0xb539,0xb53a,0xb53b, +0xb53c,0xb53d,0xb53e,0xb53f,0xb542,0xb546,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xb547,0xb548,0xb549,0xb54a, +0xb54e,0xb54f,0xb551,0xb552,0xb553,0xb555,0xb556,0xb557, +0xb558,0xb559,0xb55a,0xb55b,0xb55e,0xb562,0xb563,0xb564, +0xb565,0xb566,0xb567,0xb568,0xb569,0xb56a,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xb56b,0xb56c,0xb56d,0xb56e, +0xb56f,0xb570,0xb571,0xb572,0xb573,0xb574,0xb575,0xb576, +0xb577,0xb578,0xb579,0xb57a,0xb57b,0xb57c,0xb57d,0xb57e, +0xb57f,0xb580,0xb581,0xb582,0xb583,0xb584,0xb585,0xb586, +0xb587,0xb588,0xb589,0xb58a,0xb58b,0xb58c,0xb58d,0xb58e, +0xb58f,0xb590,0xb591,0xb592,0xb593,0xb594,0xb595,0xb596, +0xb597,0xb598,0xb599,0xb59a,0xb59b,0xb59c,0xb59d,0xb59e, +0xb59f,0xb5a2,0xb5a3,0xb5a5,0xb5a6,0xb5a7,0xb5a9,0xb5ac, +0xb5ad,0xb5ae,0xb5af,0xb5b2,0xb5b6,0xb5b7,0xb5b8,0xb5b9, +0xb5ba,0xb5be,0xb5bf,0xb5c1,0xb5c2,0xb5c3,0xb5c5,0xb5c6, +0xb5c7,0xb5c8,0xb5c9,0xb5ca,0xb5cb,0xb5ce,0xb5d2,0xb5d3, +0xb5d4,0xb5d5,0xb5d6,0xb5d7,0xb5d9,0xb5da,0xb5db,0xb5dc, +0xb5dd,0xb5de,0xb5df,0xb5e0,0xb5e1,0xb5e2,0xb5e3,0xb5e4, +0xb5e5,0xb5e6,0xb5e7,0xb5e8,0xb5e9,0xb5ea,0xb5eb,0xb5ed, +0xb5ee,0xb5ef,0xb5f0,0xb5f1,0xb5f2,0xb5f3,0xb5f4,0xb5f5, +0xb5f6,0xb5f7,0xb5f8,0xb5f9,0xb5fa,0xb5fb,0xb5fc,0xb5fd, +0xb5fe,0xb5ff,0xb600,0xb601,0xb602,0xb603,0xb604,0xb605, +0xb606,0xb607,0xb608,0xb609,0xb60a,0xb60b,0xb60c,0xb60d, +0xb60e,0xb60f,0xb612,0xb613,0xb615,0xb616,0xb617,0xb619, +0xb61a,0xb61b,0xb61c,0xb61d,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xb61e,0xb61f,0xb620,0xb621,0xb622,0xb623, +0xb624,0xb626,0xb627,0xb628,0xb629,0xb62a,0xb62b,0xb62d, +0xb62e,0xb62f,0xb630,0xb631,0xb632,0xb633,0xb635,0xb636, +0xb637,0xb638,0xb639,0xb63a,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xb63b,0xb63c,0xb63d,0xb63e,0xb63f,0xb640, +0xb641,0xb642,0xb643,0xb644,0xb645,0xb646,0xb647,0xb649, +0xb64a,0xb64b,0xb64c,0xb64d,0xb64e,0xb64f,0xb650,0xb651, +0xb652,0xb653,0xb654,0xb655,0xb656,0xb657,0xb658,0xb659, +0xb65a,0xb65b,0xb65c,0xb65d,0xb65e,0xb65f,0xb660,0xb661, +0xb662,0xb663,0xb665,0xb666,0xb667,0xb669,0xb66a,0xb66b, +0xb66c,0xb66d,0xb66e,0xb66f,0xb670,0xb671,0xb672,0xb673, +0xb674,0xb675,0xb676,0xb677,0xb678,0xb679,0xb67a,0xb67b, +0xb67c,0xb67d,0xb67e,0xb67f,0xb680,0xb681,0xb682,0xb683, +0xb684,0xb685,0xb686,0xb687,0xb688,0xb689,0xb68a,0xb68b, +0xb68c,0xb68d,0xb68e,0xb68f,0xb690,0xb691,0xb692,0xb693, +0xb694,0xb695,0xb696,0xb697,0xb698,0xb699,0xb69a,0xb69b, +0xb69e,0xb69f,0xb6a1,0xb6a2,0xb6a3,0xb6a5,0xb6a6,0xb6a7, +0xb6a8,0xb6a9,0xb6aa,0xb6ad,0xb6ae,0xb6af,0xb6b0,0xb6b2, +0xb6b3,0xb6b4,0xb6b5,0xb6b6,0xb6b7,0xb6b8,0xb6b9,0xb6ba, +0xb6bb,0xb6bc,0xb6bd,0xb6be,0xb6bf,0xb6c0,0xb6c1,0xb6c2, +0xb6c3,0xb6c4,0xb6c5,0xb6c6,0xb6c7,0xb6c8,0xb6c9,0xb6ca, +0xb6cb,0xb6cc,0xb6cd,0xb6ce,0xb6cf,0xb6d0,0xb6d1,0xb6d2, +0xb6d3,0xb6d5,0xb6d6,0xb6d7,0xb6d8,0xb6d9,0xb6da,0xb6db, +0xb6dc,0xb6dd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xb6de,0xb6df,0xb6e0,0xb6e1,0xb6e2,0xb6e3,0xb6e4,0xb6e5, +0xb6e6,0xb6e7,0xb6e8,0xb6e9,0xb6ea,0xb6eb,0xb6ec,0xb6ed, +0xb6ee,0xb6ef,0xb6f1,0xb6f2,0xb6f3,0xb6f5,0xb6f6,0xb6f7, +0xb6f9,0xb6fa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xb6fb,0xb6fc,0xb6fd,0xb6fe,0xb6ff,0xb702,0xb703,0xb704, +0xb706,0xb707,0xb708,0xb709,0xb70a,0xb70b,0xb70c,0xb70d, +0xb70e,0xb70f,0xb710,0xb711,0xb712,0xb713,0xb714,0xb715, +0xb716,0xb717,0xb718,0xb719,0xb71a,0xb71b,0xb71c,0xb71d, +0xb71e,0xb71f,0xb720,0xb721,0xb722,0xb723,0xb724,0xb725, +0xb726,0xb727,0xb72a,0xb72b,0xb72d,0xb72e,0xb731,0xb732, +0xb733,0xb734,0xb735,0xb736,0xb737,0xb73a,0xb73c,0xb73d, +0xb73e,0xb73f,0xb740,0xb741,0xb742,0xb743,0xb745,0xb746, +0xb747,0xb749,0xb74a,0xb74b,0xb74d,0xb74e,0xb74f,0xb750, +0xb751,0xb752,0xb753,0xb756,0xb757,0xb758,0xb759,0xb75a, +0xb75b,0xb75c,0xb75d,0xb75e,0xb75f,0xb761,0xb762,0xb763, +0xb765,0xb766,0xb767,0xb769,0xb76a,0xb76b,0xb76c,0xb76d, +0xb76e,0xb76f,0xb772,0xb774,0xb776,0xb777,0xb778,0xb779, +0xb77a,0xb77b,0xb77e,0xb77f,0xb781,0xb782,0xb783,0xb785, +0xb786,0xb787,0xb788,0xb789,0xb78a,0xb78b,0xb78e,0xb793, +0xb794,0xb795,0xb79a,0xb79b,0xb79d,0xb79e,0xb79f,0xb7a1, +0xb7a2,0xb7a3,0xb7a4,0xb7a5,0xb7a6,0xb7a7,0xb7aa,0xb7ae, +0xb7af,0xb7b0,0xb7b1,0xb7b2,0xb7b3,0xb7b6,0xb7b7,0xb7b9, +0xb7ba,0xb7bb,0xb7bc,0xb7bd,0xb7be,0xb7bf,0xb7c0,0xb7c1, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb7c2,0xb7c3, +0xb7c4,0xb7c5,0xb7c6,0xb7c8,0xb7ca,0xb7cb,0xb7cc,0xb7cd, +0xb7ce,0xb7cf,0xb7d0,0xb7d1,0xb7d2,0xb7d3,0xb7d4,0xb7d5, +0xb7d6,0xb7d7,0xb7d8,0xb7d9,0xb7da,0xb7db,0xb7dc,0xb7dd, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xb7de,0xb7df, +0xb7e0,0xb7e1,0xb7e2,0xb7e3,0xb7e4,0xb7e5,0xb7e6,0xb7e7, +0xb7e8,0xb7e9,0xb7ea,0xb7eb,0xb7ee,0xb7ef,0xb7f1,0xb7f2, +0xb7f3,0xb7f5,0xb7f6,0xb7f7,0xb7f8,0xb7f9,0xb7fa,0xb7fb, +0xb7fe,0xb802,0xb803,0xb804,0xb805,0xb806,0xb80a,0xb80b, +0xb80d,0xb80e,0xb80f,0xb811,0xb812,0xb813,0xb814,0xb815, +0xb816,0xb817,0xb81a,0xb81c,0xb81e,0xb81f,0xb820,0xb821, +0xb822,0xb823,0xb826,0xb827,0xb829,0xb82a,0xb82b,0xb82d, +0xb82e,0xb82f,0xb830,0xb831,0xb832,0xb833,0xb836,0xb83a, +0xb83b,0xb83c,0xb83d,0xb83e,0xb83f,0xb841,0xb842,0xb843, +0xb845,0xb846,0xb847,0xb848,0xb849,0xb84a,0xb84b,0xb84c, +0xb84d,0xb84e,0xb84f,0xb850,0xb852,0xb854,0xb855,0xb856, +0xb857,0xb858,0xb859,0xb85a,0xb85b,0xb85e,0xb85f,0xb861, +0xb862,0xb863,0xb865,0xb866,0xb867,0xb868,0xb869,0xb86a, +0xb86b,0xb86e,0xb870,0xb872,0xb873,0xb874,0xb875,0xb876, +0xb877,0xb879,0xb87a,0xb87b,0xb87d,0xb87e,0xb87f,0xb880, +0xb881,0xb882,0xb883,0xb884,0xb885,0xb886,0xb887,0xb888, +0xb889,0xb88a,0xb88b,0xb88c,0xb88e,0xb88f,0xb890,0xb891, +0xb892,0xb893,0xb894,0xb895,0xb896,0xb897,0xb898,0xb899, +0xb89a,0xb89b,0xb89c,0xb89d,0xb89e,0xb89f,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xb8a0,0xb8a1,0xb8a2,0xb8a3, +0xb8a4,0xb8a5,0xb8a6,0xb8a7,0xb8a9,0xb8aa,0xb8ab,0xb8ac, +0xb8ad,0xb8ae,0xb8af,0xb8b1,0xb8b2,0xb8b3,0xb8b5,0xb8b6, +0xb8b7,0xb8b9,0xb8ba,0xb8bb,0xb8bc,0xb8bd,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xb8be,0xb8bf,0xb8c2,0xb8c4, +0xb8c6,0xb8c7,0xb8c8,0xb8c9,0xb8ca,0xb8cb,0xb8cd,0xb8ce, +0xb8cf,0xb8d1,0xb8d2,0xb8d3,0xb8d5,0xb8d6,0xb8d7,0xb8d8, +0xb8d9,0xb8da,0xb8db,0xb8dc,0xb8de,0xb8e0,0xb8e2,0xb8e3, +0xb8e4,0xb8e5,0xb8e6,0xb8e7,0xb8ea,0xb8eb,0xb8ed,0xb8ee, +0xb8ef,0xb8f1,0xb8f2,0xb8f3,0xb8f4,0xb8f5,0xb8f6,0xb8f7, +0xb8fa,0xb8fc,0xb8fe,0xb8ff,0xb900,0xb901,0xb902,0xb903, +0xb905,0xb906,0xb907,0xb908,0xb909,0xb90a,0xb90b,0xb90c, +0xb90d,0xb90e,0xb90f,0xb910,0xb911,0xb912,0xb913,0xb914, +0xb915,0xb916,0xb917,0xb919,0xb91a,0xb91b,0xb91c,0xb91d, +0xb91e,0xb91f,0xb921,0xb922,0xb923,0xb924,0xb925,0xb926, +0xb927,0xb928,0xb929,0xb92a,0xb92b,0xb92c,0xb92d,0xb92e, +0xb92f,0xb930,0xb931,0xb932,0xb933,0xb934,0xb935,0xb936, +0xb937,0xb938,0xb939,0xb93a,0xb93b,0xb93e,0xb93f,0xb941, +0xb942,0xb943,0xb945,0xb946,0xb947,0xb948,0xb949,0xb94a, +0xb94b,0xb94d,0xb94e,0xb950,0xb952,0xb953,0xb954,0xb955, +0xb956,0xb957,0xb95a,0xb95b,0xb95d,0xb95e,0xb95f,0xb961, +0xb962,0xb963,0xb964,0xb965,0xb966,0xb967,0xb96a,0xb96c, +0xb96e,0xb96f,0xb970,0xb971,0xb972,0xb973,0xb976,0xb977, +0xb979,0xb97a,0xb97b,0xb97d,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xb97e,0xb97f,0xb980,0xb981,0xb982,0xb983, +0xb986,0xb988,0xb98b,0xb98c,0xb98f,0xb990,0xb991,0xb992, +0xb993,0xb994,0xb995,0xb996,0xb997,0xb998,0xb999,0xb99a, +0xb99b,0xb99c,0xb99d,0xb99e,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xb99f,0xb9a0,0xb9a1,0xb9a2,0xb9a3,0xb9a4, +0xb9a5,0xb9a6,0xb9a7,0xb9a8,0xb9a9,0xb9aa,0xb9ab,0xb9ae, +0xb9af,0xb9b1,0xb9b2,0xb9b3,0xb9b5,0xb9b6,0xb9b7,0xb9b8, +0xb9b9,0xb9ba,0xb9bb,0xb9be,0xb9c0,0xb9c2,0xb9c3,0xb9c4, +0xb9c5,0xb9c6,0xb9c7,0xb9ca,0xb9cb,0xb9cd,0xb9d3,0xb9d4, +0xb9d5,0xb9d6,0xb9d7,0xb9da,0xb9dc,0xb9df,0xb9e0,0xb9e2, +0xb9e6,0xb9e7,0xb9e9,0xb9ea,0xb9eb,0xb9ed,0xb9ee,0xb9ef, +0xb9f0,0xb9f1,0xb9f2,0xb9f3,0xb9f6,0xb9fb,0xb9fc,0xb9fd, +0xb9fe,0xb9ff,0xba02,0xba03,0xba04,0xba05,0xba06,0xba07, +0xba09,0xba0a,0xba0b,0xba0c,0xba0d,0xba0e,0xba0f,0xba10, +0xba11,0xba12,0xba13,0xba14,0xba16,0xba17,0xba18,0xba19, +0xba1a,0xba1b,0xba1c,0xba1d,0xba1e,0xba1f,0xba20,0xba21, +0xba22,0xba23,0xba24,0xba25,0xba26,0xba27,0xba28,0xba29, +0xba2a,0xba2b,0xba2c,0xba2d,0xba2e,0xba2f,0xba30,0xba31, +0xba32,0xba33,0xba34,0xba35,0xba36,0xba37,0xba3a,0xba3b, +0xba3d,0xba3e,0xba3f,0xba41,0xba43,0xba44,0xba45,0xba46, +0xba47,0xba4a,0xba4c,0xba4f,0xba50,0xba51,0xba52,0xba56, +0xba57,0xba59,0xba5a,0xba5b,0xba5d,0xba5e,0xba5f,0xba60, +0xba61,0xba62,0xba63,0xba66,0xba6a,0xba6b,0xba6c,0xba6d, +0xba6e,0xba6f,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xba72,0xba73,0xba75,0xba76,0xba77,0xba79,0xba7a,0xba7b, +0xba7c,0xba7d,0xba7e,0xba7f,0xba80,0xba81,0xba82,0xba86, +0xba88,0xba89,0xba8a,0xba8b,0xba8d,0xba8e,0xba8f,0xba90, +0xba91,0xba92,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xba93,0xba94,0xba95,0xba96,0xba97,0xba98,0xba99,0xba9a, +0xba9b,0xba9c,0xba9d,0xba9e,0xba9f,0xbaa0,0xbaa1,0xbaa2, +0xbaa3,0xbaa4,0xbaa5,0xbaa6,0xbaa7,0xbaaa,0xbaad,0xbaae, +0xbaaf,0xbab1,0xbab3,0xbab4,0xbab5,0xbab6,0xbab7,0xbaba, +0xbabc,0xbabe,0xbabf,0xbac0,0xbac1,0xbac2,0xbac3,0xbac5, +0xbac6,0xbac7,0xbac9,0xbaca,0xbacb,0xbacc,0xbacd,0xbace, +0xbacf,0xbad0,0xbad1,0xbad2,0xbad3,0xbad4,0xbad5,0xbad6, +0xbad7,0xbada,0xbadb,0xbadc,0xbadd,0xbade,0xbadf,0xbae0, +0xbae1,0xbae2,0xbae3,0xbae4,0xbae5,0xbae6,0xbae7,0xbae8, +0xbae9,0xbaea,0xbaeb,0xbaec,0xbaed,0xbaee,0xbaef,0xbaf0, +0xbaf1,0xbaf2,0xbaf3,0xbaf4,0xbaf5,0xbaf6,0xbaf7,0xbaf8, +0xbaf9,0xbafa,0xbafb,0xbafd,0xbafe,0xbaff,0xbb01,0xbb02, +0xbb03,0xbb05,0xbb06,0xbb07,0xbb08,0xbb09,0xbb0a,0xbb0b, +0xbb0c,0xbb0e,0xbb10,0xbb12,0xbb13,0xbb14,0xbb15,0xbb16, +0xbb17,0xbb19,0xbb1a,0xbb1b,0xbb1d,0xbb1e,0xbb1f,0xbb21, +0xbb22,0xbb23,0xbb24,0xbb25,0xbb26,0xbb27,0xbb28,0xbb2a, +0xbb2c,0xbb2d,0xbb2e,0xbb2f,0xbb30,0xbb31,0xbb32,0xbb33, +0xbb37,0xbb39,0xbb3a,0xbb3f,0xbb40,0xbb41,0xbb42,0xbb43, +0xbb46,0xbb48,0xbb4a,0xbb4b,0xbb4c,0xbb4e,0xbb51,0xbb52, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbb53,0xbb55, +0xbb56,0xbb57,0xbb59,0xbb5a,0xbb5b,0xbb5c,0xbb5d,0xbb5e, +0xbb5f,0xbb60,0xbb62,0xbb64,0xbb65,0xbb66,0xbb67,0xbb68, +0xbb69,0xbb6a,0xbb6b,0xbb6d,0xbb6e,0xbb6f,0xbb70,0xbb71, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbb72,0xbb73, +0xbb74,0xbb75,0xbb76,0xbb77,0xbb78,0xbb79,0xbb7a,0xbb7b, +0xbb7c,0xbb7d,0xbb7e,0xbb7f,0xbb80,0xbb81,0xbb82,0xbb83, +0xbb84,0xbb85,0xbb86,0xbb87,0xbb89,0xbb8a,0xbb8b,0xbb8d, +0xbb8e,0xbb8f,0xbb91,0xbb92,0xbb93,0xbb94,0xbb95,0xbb96, +0xbb97,0xbb98,0xbb99,0xbb9a,0xbb9b,0xbb9c,0xbb9d,0xbb9e, +0xbb9f,0xbba0,0xbba1,0xbba2,0xbba3,0xbba5,0xbba6,0xbba7, +0xbba9,0xbbaa,0xbbab,0xbbad,0xbbae,0xbbaf,0xbbb0,0xbbb1, +0xbbb2,0xbbb3,0xbbb5,0xbbb6,0xbbb8,0xbbb9,0xbbba,0xbbbb, +0xbbbc,0xbbbd,0xbbbe,0xbbbf,0xbbc1,0xbbc2,0xbbc3,0xbbc5, +0xbbc6,0xbbc7,0xbbc9,0xbbca,0xbbcb,0xbbcc,0xbbcd,0xbbce, +0xbbcf,0xbbd1,0xbbd2,0xbbd4,0xbbd5,0xbbd6,0xbbd7,0xbbd8, +0xbbd9,0xbbda,0xbbdb,0xbbdc,0xbbdd,0xbbde,0xbbdf,0xbbe0, +0xbbe1,0xbbe2,0xbbe3,0xbbe4,0xbbe5,0xbbe6,0xbbe7,0xbbe8, +0xbbe9,0xbbea,0xbbeb,0xbbec,0xbbed,0xbbee,0xbbef,0xbbf0, +0xbbf1,0xbbf2,0xbbf3,0xbbf4,0xbbf5,0xbbf6,0xbbf7,0xbbfa, +0xbbfb,0xbbfd,0xbbfe,0xbc01,0xbc03,0xbc04,0xbc05,0xbc06, +0xbc07,0xbc0a,0xbc0e,0xbc10,0xbc12,0xbc13,0xbc19,0xbc1a, +0xbc20,0xbc21,0xbc22,0xbc23,0xbc26,0xbc28,0xbc2a,0xbc2b, +0xbc2c,0xbc2e,0xbc2f,0xbc32,0xbc33,0xbc35,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xbc36,0xbc37,0xbc39,0xbc3a, +0xbc3b,0xbc3c,0xbc3d,0xbc3e,0xbc3f,0xbc42,0xbc46,0xbc47, +0xbc48,0xbc4a,0xbc4b,0xbc4e,0xbc4f,0xbc51,0xbc52,0xbc53, +0xbc54,0xbc55,0xbc56,0xbc57,0xbc58,0xbc59,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xbc5a,0xbc5b,0xbc5c,0xbc5e, +0xbc5f,0xbc60,0xbc61,0xbc62,0xbc63,0xbc64,0xbc65,0xbc66, +0xbc67,0xbc68,0xbc69,0xbc6a,0xbc6b,0xbc6c,0xbc6d,0xbc6e, +0xbc6f,0xbc70,0xbc71,0xbc72,0xbc73,0xbc74,0xbc75,0xbc76, +0xbc77,0xbc78,0xbc79,0xbc7a,0xbc7b,0xbc7c,0xbc7d,0xbc7e, +0xbc7f,0xbc80,0xbc81,0xbc82,0xbc83,0xbc86,0xbc87,0xbc89, +0xbc8a,0xbc8d,0xbc8f,0xbc90,0xbc91,0xbc92,0xbc93,0xbc96, +0xbc98,0xbc9b,0xbc9c,0xbc9d,0xbc9e,0xbc9f,0xbca2,0xbca3, +0xbca5,0xbca6,0xbca9,0xbcaa,0xbcab,0xbcac,0xbcad,0xbcae, +0xbcaf,0xbcb2,0xbcb6,0xbcb7,0xbcb8,0xbcb9,0xbcba,0xbcbb, +0xbcbe,0xbcbf,0xbcc1,0xbcc2,0xbcc3,0xbcc5,0xbcc6,0xbcc7, +0xbcc8,0xbcc9,0xbcca,0xbccb,0xbccc,0xbcce,0xbcd2,0xbcd3, +0xbcd4,0xbcd6,0xbcd7,0xbcd9,0xbcda,0xbcdb,0xbcdd,0xbcde, +0xbcdf,0xbce0,0xbce1,0xbce2,0xbce3,0xbce4,0xbce5,0xbce6, +0xbce7,0xbce8,0xbce9,0xbcea,0xbceb,0xbcec,0xbced,0xbcee, +0xbcef,0xbcf0,0xbcf1,0xbcf2,0xbcf3,0xbcf7,0xbcf9,0xbcfa, +0xbcfb,0xbcfd,0xbcfe,0xbcff,0xbd00,0xbd01,0xbd02,0xbd03, +0xbd06,0xbd08,0xbd0a,0xbd0b,0xbd0c,0xbd0d,0xbd0e,0xbd0f, +0xbd11,0xbd12,0xbd13,0xbd15,0xbd16,0xbd17,0xbd18,0xbd19, +0xbd1a,0xbd1b,0xbd1c,0xbd1d,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xbd1e,0xbd1f,0xbd20,0xbd21,0xbd22,0xbd23, +0xbd25,0xbd26,0xbd27,0xbd28,0xbd29,0xbd2a,0xbd2b,0xbd2d, +0xbd2e,0xbd2f,0xbd30,0xbd31,0xbd32,0xbd33,0xbd34,0xbd35, +0xbd36,0xbd37,0xbd38,0xbd39,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xbd3a,0xbd3b,0xbd3c,0xbd3d,0xbd3e,0xbd3f, +0xbd41,0xbd42,0xbd43,0xbd44,0xbd45,0xbd46,0xbd47,0xbd4a, +0xbd4b,0xbd4d,0xbd4e,0xbd4f,0xbd51,0xbd52,0xbd53,0xbd54, +0xbd55,0xbd56,0xbd57,0xbd5a,0xbd5b,0xbd5c,0xbd5d,0xbd5e, +0xbd5f,0xbd60,0xbd61,0xbd62,0xbd63,0xbd65,0xbd66,0xbd67, +0xbd69,0xbd6a,0xbd6b,0xbd6c,0xbd6d,0xbd6e,0xbd6f,0xbd70, +0xbd71,0xbd72,0xbd73,0xbd74,0xbd75,0xbd76,0xbd77,0xbd78, +0xbd79,0xbd7a,0xbd7b,0xbd7c,0xbd7d,0xbd7e,0xbd7f,0xbd82, +0xbd83,0xbd85,0xbd86,0xbd8b,0xbd8c,0xbd8d,0xbd8e,0xbd8f, +0xbd92,0xbd94,0xbd96,0xbd97,0xbd98,0xbd9b,0xbd9d,0xbd9e, +0xbd9f,0xbda0,0xbda1,0xbda2,0xbda3,0xbda5,0xbda6,0xbda7, +0xbda8,0xbda9,0xbdaa,0xbdab,0xbdac,0xbdad,0xbdae,0xbdaf, +0xbdb1,0xbdb2,0xbdb3,0xbdb4,0xbdb5,0xbdb6,0xbdb7,0xbdb9, +0xbdba,0xbdbb,0xbdbc,0xbdbd,0xbdbe,0xbdbf,0xbdc0,0xbdc1, +0xbdc2,0xbdc3,0xbdc4,0xbdc5,0xbdc6,0xbdc7,0xbdc8,0xbdc9, +0xbdca,0xbdcb,0xbdcc,0xbdcd,0xbdce,0xbdcf,0xbdd0,0xbdd1, +0xbdd2,0xbdd3,0xbdd6,0xbdd7,0xbdd9,0xbdda,0xbddb,0xbddd, +0xbdde,0xbddf,0xbde0,0xbde1,0xbde2,0xbde3,0xbde4,0xbde5, +0xbde6,0xbde7,0xbde8,0xbdea,0xbdeb,0xbdec,0xbded,0xbdee, +0xbdef,0xbdf1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xbdf2,0xbdf3,0xbdf5,0xbdf6,0xbdf7,0xbdf9,0xbdfa,0xbdfb, +0xbdfc,0xbdfd,0xbdfe,0xbdff,0xbe01,0xbe02,0xbe04,0xbe06, +0xbe07,0xbe08,0xbe09,0xbe0a,0xbe0b,0xbe0e,0xbe0f,0xbe11, +0xbe12,0xbe13,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xbe15,0xbe16,0xbe17,0xbe18,0xbe19,0xbe1a,0xbe1b,0xbe1e, +0xbe20,0xbe21,0xbe22,0xbe23,0xbe24,0xbe25,0xbe26,0xbe27, +0xbe28,0xbe29,0xbe2a,0xbe2b,0xbe2c,0xbe2d,0xbe2e,0xbe2f, +0xbe30,0xbe31,0xbe32,0xbe33,0xbe34,0xbe35,0xbe36,0xbe37, +0xbe38,0xbe39,0xbe3a,0xbe3b,0xbe3c,0xbe3d,0xbe3e,0xbe3f, +0xbe40,0xbe41,0xbe42,0xbe43,0xbe46,0xbe47,0xbe49,0xbe4a, +0xbe4b,0xbe4d,0xbe4f,0xbe50,0xbe51,0xbe52,0xbe53,0xbe56, +0xbe58,0xbe5c,0xbe5d,0xbe5e,0xbe5f,0xbe62,0xbe63,0xbe65, +0xbe66,0xbe67,0xbe69,0xbe6b,0xbe6c,0xbe6d,0xbe6e,0xbe6f, +0xbe72,0xbe76,0xbe77,0xbe78,0xbe79,0xbe7a,0xbe7e,0xbe7f, +0xbe81,0xbe82,0xbe83,0xbe85,0xbe86,0xbe87,0xbe88,0xbe89, +0xbe8a,0xbe8b,0xbe8e,0xbe92,0xbe93,0xbe94,0xbe95,0xbe96, +0xbe97,0xbe9a,0xbe9b,0xbe9c,0xbe9d,0xbe9e,0xbe9f,0xbea0, +0xbea1,0xbea2,0xbea3,0xbea4,0xbea5,0xbea6,0xbea7,0xbea9, +0xbeaa,0xbeab,0xbeac,0xbead,0xbeae,0xbeaf,0xbeb0,0xbeb1, +0xbeb2,0xbeb3,0xbeb4,0xbeb5,0xbeb6,0xbeb7,0xbeb8,0xbeb9, +0xbeba,0xbebb,0xbebc,0xbebd,0xbebe,0xbebf,0xbec0,0xbec1, +0xbec2,0xbec3,0xbec4,0xbec5,0xbec6,0xbec7,0xbec8,0xbec9, +0xbeca,0xbecb,0xbecc,0xbecd,0xbece,0xbecf,0xbed2,0xbed3, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbed5,0xbed6, +0xbed9,0xbeda,0xbedb,0xbedc,0xbedd,0xbede,0xbedf,0xbee1, +0xbee2,0xbee6,0xbee7,0xbee8,0xbee9,0xbeea,0xbeeb,0xbeed, +0xbeee,0xbeef,0xbef0,0xbef1,0xbef2,0xbef3,0xbef4,0xbef5, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xbef6,0xbef7, +0xbef8,0xbef9,0xbefa,0xbefb,0xbefc,0xbefd,0xbefe,0xbeff, +0xbf00,0xbf02,0xbf03,0xbf04,0xbf05,0xbf06,0xbf07,0xbf0a, +0xbf0b,0xbf0c,0xbf0d,0xbf0e,0xbf0f,0xbf10,0xbf11,0xbf12, +0xbf13,0xbf14,0xbf15,0xbf16,0xbf17,0xbf1a,0xbf1e,0xbf1f, +0xbf20,0xbf21,0xbf22,0xbf23,0xbf24,0xbf25,0xbf26,0xbf27, +0xbf28,0xbf29,0xbf2a,0xbf2b,0xbf2c,0xbf2d,0xbf2e,0xbf2f, +0xbf30,0xbf31,0xbf32,0xbf33,0xbf34,0xbf35,0xbf36,0xbf37, +0xbf38,0xbf39,0xbf3a,0xbf3b,0xbf3c,0xbf3d,0xbf3e,0xbf3f, +0xbf42,0xbf43,0xbf45,0xbf46,0xbf47,0xbf49,0xbf4a,0xbf4b, +0xbf4c,0xbf4d,0xbf4e,0xbf4f,0xbf52,0xbf53,0xbf54,0xbf56, +0xbf57,0xbf58,0xbf59,0xbf5a,0xbf5b,0xbf5c,0xbf5d,0xbf5e, +0xbf5f,0xbf60,0xbf61,0xbf62,0xbf63,0xbf64,0xbf65,0xbf66, +0xbf67,0xbf68,0xbf69,0xbf6a,0xbf6b,0xbf6c,0xbf6d,0xbf6e, +0xbf6f,0xbf70,0xbf71,0xbf72,0xbf73,0xbf74,0xbf75,0xbf76, +0xbf77,0xbf78,0xbf79,0xbf7a,0xbf7b,0xbf7c,0xbf7d,0xbf7e, +0xbf7f,0xbf80,0xbf81,0xbf82,0xbf83,0xbf84,0xbf85,0xbf86, +0xbf87,0xbf88,0xbf89,0xbf8a,0xbf8b,0xbf8c,0xbf8d,0xbf8e, +0xbf8f,0xbf90,0xbf91,0xbf92,0xbf93,0xbf95,0xbf96,0xbf97, +0xbf98,0xbf99,0xbf9a,0xbf9b,0xbf9c,0xbf9d,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xbf9e,0xbf9f,0xbfa0,0xbfa1, +0xbfa2,0xbfa3,0xbfa4,0xbfa5,0xbfa6,0xbfa7,0xbfa8,0xbfa9, +0xbfaa,0xbfab,0xbfac,0xbfad,0xbfae,0xbfaf,0xbfb1,0xbfb2, +0xbfb3,0xbfb4,0xbfb5,0xbfb6,0xbfb7,0xbfb8,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xbfb9,0xbfba,0xbfbb,0xbfbc, +0xbfbd,0xbfbe,0xbfbf,0xbfc0,0xbfc1,0xbfc2,0xbfc3,0xbfc4, +0xbfc6,0xbfc7,0xbfc8,0xbfc9,0xbfca,0xbfcb,0xbfce,0xbfcf, +0xbfd1,0xbfd2,0xbfd3,0xbfd5,0xbfd6,0xbfd7,0xbfd8,0xbfd9, +0xbfda,0xbfdb,0xbfdd,0xbfde,0xbfe0,0xbfe2,0xbfe3,0xbfe4, +0xbfe5,0xbfe6,0xbfe7,0xbfe8,0xbfe9,0xbfea,0xbfeb,0xbfec, +0xbfed,0xbfee,0xbfef,0xbff0,0xbff1,0xbff2,0xbff3,0xbff4, +0xbff5,0xbff6,0xbff7,0xbff8,0xbff9,0xbffa,0xbffb,0xbffc, +0xbffd,0xbffe,0xbfff,0xc000,0xc001,0xc002,0xc003,0xc004, +0xc005,0xc006,0xc007,0xc008,0xc009,0xc00a,0xc00b,0xc00c, +0xc00d,0xc00e,0xc00f,0xc010,0xc011,0xc012,0xc013,0xc014, +0xc015,0xc016,0xc017,0xc018,0xc019,0xc01a,0xc01b,0xc01c, +0xc01d,0xc01e,0xc01f,0xc020,0xc021,0xc022,0xc023,0xc024, +0xc025,0xc026,0xc027,0xc028,0xc029,0xc02a,0xc02b,0xc02c, +0xc02d,0xc02e,0xc02f,0xc030,0xc031,0xc032,0xc033,0xc034, +0xc035,0xc036,0xc037,0xc038,0xc039,0xc03a,0xc03b,0xc03d, +0xc03e,0xc03f,0xc040,0xc041,0xc042,0xc043,0xc044,0xc045, +0xc046,0xc047,0xc048,0xc049,0xc04a,0xc04b,0xc04c,0xc04d, +0xc04e,0xc04f,0xc050,0xc052,0xc053,0xc054,0xc055,0xc056, +0xc057,0xc059,0xc05a,0xc05b,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xc05d,0xc05e,0xc05f,0xc061,0xc062,0xc063, +0xc064,0xc065,0xc066,0xc067,0xc06a,0xc06b,0xc06c,0xc06d, +0xc06e,0xc06f,0xc070,0xc071,0xc072,0xc073,0xc074,0xc075, +0xc076,0xc077,0xc078,0xc079,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xc07a,0xc07b,0xc07c,0xc07d,0xc07e,0xc07f, +0xc080,0xc081,0xc082,0xc083,0xc084,0xc085,0xc086,0xc087, +0xc088,0xc089,0xc08a,0xc08b,0xc08c,0xc08d,0xc08e,0xc08f, +0xc092,0xc093,0xc095,0xc096,0xc097,0xc099,0xc09a,0xc09b, +0xc09c,0xc09d,0xc09e,0xc09f,0xc0a2,0xc0a4,0xc0a6,0xc0a7, +0xc0a8,0xc0a9,0xc0aa,0xc0ab,0xc0ae,0xc0b1,0xc0b2,0xc0b7, +0xc0b8,0xc0b9,0xc0ba,0xc0bb,0xc0be,0xc0c2,0xc0c3,0xc0c4, +0xc0c6,0xc0c7,0xc0ca,0xc0cb,0xc0cd,0xc0ce,0xc0cf,0xc0d1, +0xc0d2,0xc0d3,0xc0d4,0xc0d5,0xc0d6,0xc0d7,0xc0da,0xc0de, +0xc0df,0xc0e0,0xc0e1,0xc0e2,0xc0e3,0xc0e6,0xc0e7,0xc0e9, +0xc0ea,0xc0eb,0xc0ed,0xc0ee,0xc0ef,0xc0f0,0xc0f1,0xc0f2, +0xc0f3,0xc0f6,0xc0f8,0xc0fa,0xc0fb,0xc0fc,0xc0fd,0xc0fe, +0xc0ff,0xc101,0xc102,0xc103,0xc105,0xc106,0xc107,0xc109, +0xc10a,0xc10b,0xc10c,0xc10d,0xc10e,0xc10f,0xc111,0xc112, +0xc113,0xc114,0xc116,0xc117,0xc118,0xc119,0xc11a,0xc11b, +0xc121,0xc122,0xc125,0xc128,0xc129,0xc12a,0xc12b,0xc12e, +0xc132,0xc133,0xc134,0xc135,0xc137,0xc13a,0xc13b,0xc13d, +0xc13e,0xc13f,0xc141,0xc142,0xc143,0xc144,0xc145,0xc146, +0xc147,0xc14a,0xc14e,0xc14f,0xc150,0xc151,0xc152,0xc153, +0xc156,0xc157,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xc159,0xc15a,0xc15b,0xc15d,0xc15e,0xc15f,0xc160,0xc161, +0xc162,0xc163,0xc166,0xc16a,0xc16b,0xc16c,0xc16d,0xc16e, +0xc16f,0xc171,0xc172,0xc173,0xc175,0xc176,0xc177,0xc179, +0xc17a,0xc17b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xc17c,0xc17d,0xc17e,0xc17f,0xc180,0xc181,0xc182,0xc183, +0xc184,0xc186,0xc187,0xc188,0xc189,0xc18a,0xc18b,0xc18f, +0xc191,0xc192,0xc193,0xc195,0xc197,0xc198,0xc199,0xc19a, +0xc19b,0xc19e,0xc1a0,0xc1a2,0xc1a3,0xc1a4,0xc1a6,0xc1a7, +0xc1aa,0xc1ab,0xc1ad,0xc1ae,0xc1af,0xc1b1,0xc1b2,0xc1b3, +0xc1b4,0xc1b5,0xc1b6,0xc1b7,0xc1b8,0xc1b9,0xc1ba,0xc1bb, +0xc1bc,0xc1be,0xc1bf,0xc1c0,0xc1c1,0xc1c2,0xc1c3,0xc1c5, +0xc1c6,0xc1c7,0xc1c9,0xc1ca,0xc1cb,0xc1cd,0xc1ce,0xc1cf, +0xc1d0,0xc1d1,0xc1d2,0xc1d3,0xc1d5,0xc1d6,0xc1d9,0xc1da, +0xc1db,0xc1dc,0xc1dd,0xc1de,0xc1df,0xc1e1,0xc1e2,0xc1e3, +0xc1e5,0xc1e6,0xc1e7,0xc1e9,0xc1ea,0xc1eb,0xc1ec,0xc1ed, +0xc1ee,0xc1ef,0xc1f2,0xc1f4,0xc1f5,0xc1f6,0xc1f7,0xc1f8, +0xc1f9,0xc1fa,0xc1fb,0xc1fe,0xc1ff,0xc201,0xc202,0xc203, +0xc205,0xc206,0xc207,0xc208,0xc209,0xc20a,0xc20b,0xc20e, +0xc210,0xc212,0xc213,0xc214,0xc215,0xc216,0xc217,0xc21a, +0xc21b,0xc21d,0xc21e,0xc221,0xc222,0xc223,0xc224,0xc225, +0xc226,0xc227,0xc22a,0xc22c,0xc22e,0xc230,0xc233,0xc235, +0xc236,0xc237,0xc238,0xc239,0xc23a,0xc23b,0xc23c,0xc23d, +0xc23e,0xc23f,0xc240,0xc241,0xc242,0xc243,0xc244,0xc245, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc246,0xc247, +0xc249,0xc24a,0xc24b,0xc24c,0xc24d,0xc24e,0xc24f,0xc252, +0xc253,0xc255,0xc256,0xc257,0xc259,0xc25a,0xc25b,0xc25c, +0xc25d,0xc25e,0xc25f,0xc261,0xc262,0xc263,0xc264,0xc266, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc267,0xc268, +0xc269,0xc26a,0xc26b,0xc26e,0xc26f,0xc271,0xc272,0xc273, +0xc275,0xc276,0xc277,0xc278,0xc279,0xc27a,0xc27b,0xc27e, +0xc280,0xc282,0xc283,0xc284,0xc285,0xc286,0xc287,0xc28a, +0xc28b,0xc28c,0xc28d,0xc28e,0xc28f,0xc291,0xc292,0xc293, +0xc294,0xc295,0xc296,0xc297,0xc299,0xc29a,0xc29c,0xc29e, +0xc29f,0xc2a0,0xc2a1,0xc2a2,0xc2a3,0xc2a6,0xc2a7,0xc2a9, +0xc2aa,0xc2ab,0xc2ae,0xc2af,0xc2b0,0xc2b1,0xc2b2,0xc2b3, +0xc2b6,0xc2b8,0xc2ba,0xc2bb,0xc2bc,0xc2bd,0xc2be,0xc2bf, +0xc2c0,0xc2c1,0xc2c2,0xc2c3,0xc2c4,0xc2c5,0xc2c6,0xc2c7, +0xc2c8,0xc2c9,0xc2ca,0xc2cb,0xc2cc,0xc2cd,0xc2ce,0xc2cf, +0xc2d0,0xc2d1,0xc2d2,0xc2d3,0xc2d4,0xc2d5,0xc2d6,0xc2d7, +0xc2d8,0xc2d9,0xc2da,0xc2db,0xc2de,0xc2df,0xc2e1,0xc2e2, +0xc2e5,0xc2e6,0xc2e7,0xc2e8,0xc2e9,0xc2ea,0xc2ee,0xc2f0, +0xc2f2,0xc2f3,0xc2f4,0xc2f5,0xc2f7,0xc2fa,0xc2fd,0xc2fe, +0xc2ff,0xc301,0xc302,0xc303,0xc304,0xc305,0xc306,0xc307, +0xc30a,0xc30b,0xc30e,0xc30f,0xc310,0xc311,0xc312,0xc316, +0xc317,0xc319,0xc31a,0xc31b,0xc31d,0xc31e,0xc31f,0xc320, +0xc321,0xc322,0xc323,0xc326,0xc327,0xc32a,0xc32b,0xc32c, +0xc32d,0xc32e,0xc32f,0xc330,0xc331,0xc332,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xc333,0xc334,0xc335,0xc336, +0xc337,0xc338,0xc339,0xc33a,0xc33b,0xc33c,0xc33d,0xc33e, +0xc33f,0xc340,0xc341,0xc342,0xc343,0xc344,0xc346,0xc347, +0xc348,0xc349,0xc34a,0xc34b,0xc34c,0xc34d,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xc34e,0xc34f,0xc350,0xc351, +0xc352,0xc353,0xc354,0xc355,0xc356,0xc357,0xc358,0xc359, +0xc35a,0xc35b,0xc35c,0xc35d,0xc35e,0xc35f,0xc360,0xc361, +0xc362,0xc363,0xc364,0xc365,0xc366,0xc367,0xc36a,0xc36b, +0xc36d,0xc36e,0xc36f,0xc371,0xc373,0xc374,0xc375,0xc376, +0xc377,0xc37a,0xc37b,0xc37e,0xc37f,0xc380,0xc381,0xc382, +0xc383,0xc385,0xc386,0xc387,0xc389,0xc38a,0xc38b,0xc38d, +0xc38e,0xc38f,0xc390,0xc391,0xc392,0xc393,0xc394,0xc395, +0xc396,0xc397,0xc398,0xc399,0xc39a,0xc39b,0xc39c,0xc39d, +0xc39e,0xc39f,0xc3a0,0xc3a1,0xc3a2,0xc3a3,0xc3a4,0xc3a5, +0xc3a6,0xc3a7,0xc3a8,0xc3a9,0xc3aa,0xc3ab,0xc3ac,0xc3ad, +0xc3ae,0xc3af,0xc3b0,0xc3b1,0xc3b2,0xc3b3,0xc3b4,0xc3b5, +0xc3b6,0xc3b7,0xc3b8,0xc3b9,0xc3ba,0xc3bb,0xc3bc,0xc3bd, +0xc3be,0xc3bf,0xc3c1,0xc3c2,0xc3c3,0xc3c4,0xc3c5,0xc3c6, +0xc3c7,0xc3c8,0xc3c9,0xc3ca,0xc3cb,0xc3cc,0xc3cd,0xc3ce, +0xc3cf,0xc3d0,0xc3d1,0xc3d2,0xc3d3,0xc3d4,0xc3d5,0xc3d6, +0xc3d7,0xc3da,0xc3db,0xc3dd,0xc3de,0xc3e1,0xc3e3,0xc3e4, +0xc3e5,0xc3e6,0xc3e7,0xc3ea,0xc3eb,0xc3ec,0xc3ee,0xc3ef, +0xc3f0,0xc3f1,0xc3f2,0xc3f3,0xc3f6,0xc3f7,0xc3f9,0xc3fa, +0xc3fb,0xc3fc,0xc3fd,0xc3fe,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xc3ff,0xc400,0xc401,0xc402,0xc403,0xc404, +0xc405,0xc406,0xc407,0xc409,0xc40a,0xc40b,0xc40c,0xc40d, +0xc40e,0xc40f,0xc411,0xc412,0xc413,0xc414,0xc415,0xc416, +0xc417,0xc418,0xc419,0xc41a,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xc41b,0xc41c,0xc41d,0xc41e,0xc41f,0xc420, +0xc421,0xc422,0xc423,0xc425,0xc426,0xc427,0xc428,0xc429, +0xc42a,0xc42b,0xc42d,0xc42e,0xc42f,0xc431,0xc432,0xc433, +0xc435,0xc436,0xc437,0xc438,0xc439,0xc43a,0xc43b,0xc43e, +0xc43f,0xc440,0xc441,0xc442,0xc443,0xc444,0xc445,0xc446, +0xc447,0xc449,0xc44a,0xc44b,0xc44c,0xc44d,0xc44e,0xc44f, +0xc450,0xc451,0xc452,0xc453,0xc454,0xc455,0xc456,0xc457, +0xc458,0xc459,0xc45a,0xc45b,0xc45c,0xc45d,0xc45e,0xc45f, +0xc460,0xc461,0xc462,0xc463,0xc466,0xc467,0xc469,0xc46a, +0xc46b,0xc46d,0xc46e,0xc46f,0xc470,0xc471,0xc472,0xc473, +0xc476,0xc477,0xc478,0xc47a,0xc47b,0xc47c,0xc47d,0xc47e, +0xc47f,0xc481,0xc482,0xc483,0xc484,0xc485,0xc486,0xc487, +0xc488,0xc489,0xc48a,0xc48b,0xc48c,0xc48d,0xc48e,0xc48f, +0xc490,0xc491,0xc492,0xc493,0xc495,0xc496,0xc497,0xc498, +0xc499,0xc49a,0xc49b,0xc49d,0xc49e,0xc49f,0xc4a0,0xc4a1, +0xc4a2,0xc4a3,0xc4a4,0xc4a5,0xc4a6,0xc4a7,0xc4a8,0xc4a9, +0xc4aa,0xc4ab,0xc4ac,0xc4ad,0xc4ae,0xc4af,0xc4b0,0xc4b1, +0xc4b2,0xc4b3,0xc4b4,0xc4b5,0xc4b6,0xc4b7,0xc4b9,0xc4ba, +0xc4bb,0xc4bd,0xc4be,0xc4bf,0xc4c0,0xc4c1,0xc4c2,0xc4c3, +0xc4c4,0xc4c5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xc4c6,0xc4c7,0xc4c8,0xc4c9,0xc4ca,0xc4cb,0xc4cc,0xc4cd, +0xc4ce,0xc4cf,0xc4d0,0xc4d1,0xc4d2,0xc4d3,0xc4d4,0xc4d5, +0xc4d6,0xc4d7,0xc4d8,0xc4d9,0xc4da,0xc4db,0xc4dc,0xc4dd, +0xc4de,0xc4df,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xc4e0,0xc4e1,0xc4e2,0xc4e3,0xc4e4,0xc4e5,0xc4e6,0xc4e7, +0xc4e8,0xc4ea,0xc4eb,0xc4ec,0xc4ed,0xc4ee,0xc4ef,0xc4f2, +0xc4f3,0xc4f5,0xc4f6,0xc4f7,0xc4f9,0xc4fb,0xc4fc,0xc4fd, +0xc4fe,0xc502,0xc503,0xc504,0xc505,0xc506,0xc507,0xc508, +0xc509,0xc50a,0xc50b,0xc50d,0xc50e,0xc50f,0xc511,0xc512, +0xc513,0xc515,0xc516,0xc517,0xc518,0xc519,0xc51a,0xc51b, +0xc51d,0xc51e,0xc51f,0xc520,0xc521,0xc522,0xc523,0xc524, +0xc525,0xc526,0xc527,0xc52a,0xc52b,0xc52d,0xc52e,0xc52f, +0xc531,0xc532,0xc533,0xc534,0xc535,0xc536,0xc537,0xc53a, +0xc53c,0xc53e,0xc53f,0xc540,0xc541,0xc542,0xc543,0xc546, +0xc547,0xc54b,0xc54f,0xc550,0xc551,0xc552,0xc556,0xc55a, +0xc55b,0xc55c,0xc55f,0xc562,0xc563,0xc565,0xc566,0xc567, +0xc569,0xc56a,0xc56b,0xc56c,0xc56d,0xc56e,0xc56f,0xc572, +0xc576,0xc577,0xc578,0xc579,0xc57a,0xc57b,0xc57e,0xc57f, +0xc581,0xc582,0xc583,0xc585,0xc586,0xc588,0xc589,0xc58a, +0xc58b,0xc58e,0xc590,0xc592,0xc593,0xc594,0xc596,0xc599, +0xc59a,0xc59b,0xc59d,0xc59e,0xc59f,0xc5a1,0xc5a2,0xc5a3, +0xc5a4,0xc5a5,0xc5a6,0xc5a7,0xc5a8,0xc5aa,0xc5ab,0xc5ac, +0xc5ad,0xc5ae,0xc5af,0xc5b0,0xc5b1,0xc5b2,0xc5b3,0xc5b6, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc5b7,0xc5ba, +0xc5bf,0xc5c0,0xc5c1,0xc5c2,0xc5c3,0xc5cb,0xc5cd,0xc5cf, +0xc5d2,0xc5d3,0xc5d5,0xc5d6,0xc5d7,0xc5d9,0xc5da,0xc5db, +0xc5dc,0xc5dd,0xc5de,0xc5df,0xc5e2,0xc5e4,0xc5e6,0xc5e7, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc5e8,0xc5e9, +0xc5ea,0xc5eb,0xc5ef,0xc5f1,0xc5f2,0xc5f3,0xc5f5,0xc5f8, +0xc5f9,0xc5fa,0xc5fb,0xc602,0xc603,0xc604,0xc609,0xc60a, +0xc60b,0xc60d,0xc60e,0xc60f,0xc611,0xc612,0xc613,0xc614, +0xc615,0xc616,0xc617,0xc61a,0xc61d,0xc61e,0xc61f,0xc620, +0xc621,0xc622,0xc623,0xc626,0xc627,0xc629,0xc62a,0xc62b, +0xc62f,0xc631,0xc632,0xc636,0xc638,0xc63a,0xc63c,0xc63d, +0xc63e,0xc63f,0xc642,0xc643,0xc645,0xc646,0xc647,0xc649, +0xc64a,0xc64b,0xc64c,0xc64d,0xc64e,0xc64f,0xc652,0xc656, +0xc657,0xc658,0xc659,0xc65a,0xc65b,0xc65e,0xc65f,0xc661, +0xc662,0xc663,0xc664,0xc665,0xc666,0xc667,0xc668,0xc669, +0xc66a,0xc66b,0xc66d,0xc66e,0xc670,0xc672,0xc673,0xc674, +0xc675,0xc676,0xc677,0xc67a,0xc67b,0xc67d,0xc67e,0xc67f, +0xc681,0xc682,0xc683,0xc684,0xc685,0xc686,0xc687,0xc68a, +0xc68c,0xc68e,0xc68f,0xc690,0xc691,0xc692,0xc693,0xc696, +0xc697,0xc699,0xc69a,0xc69b,0xc69d,0xc69e,0xc69f,0xc6a0, +0xc6a1,0xc6a2,0xc6a3,0xc6a6,0xc6a8,0xc6aa,0xc6ab,0xc6ac, +0xc6ad,0xc6ae,0xc6af,0xc6b2,0xc6b3,0xc6b5,0xc6b6,0xc6b7, +0xc6bb,0xc6bc,0xc6bd,0xc6be,0xc6bf,0xc6c2,0xc6c4,0xc6c6, +0xc6c7,0xc6c8,0xc6c9,0xc6ca,0xc6cb,0xc6ce,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xc6cf,0xc6d1,0xc6d2,0xc6d3, +0xc6d5,0xc6d6,0xc6d7,0xc6d8,0xc6d9,0xc6da,0xc6db,0xc6de, +0xc6df,0xc6e2,0xc6e3,0xc6e4,0xc6e5,0xc6e6,0xc6e7,0xc6ea, +0xc6eb,0xc6ed,0xc6ee,0xc6ef,0xc6f1,0xc6f2,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xc6f3,0xc6f4,0xc6f5,0xc6f6, +0xc6f7,0xc6fa,0xc6fb,0xc6fc,0xc6fe,0xc6ff,0xc700,0xc701, +0xc702,0xc703,0xc706,0xc707,0xc709,0xc70a,0xc70b,0xc70d, +0xc70e,0xc70f,0xc710,0xc711,0xc712,0xc713,0xc716,0xc718, +0xc71a,0xc71b,0xc71c,0xc71d,0xc71e,0xc71f,0xc722,0xc723, +0xc725,0xc726,0xc727,0xc729,0xc72a,0xc72b,0xc72c,0xc72d, +0xc72e,0xc72f,0xc732,0xc734,0xc736,0xc738,0xc739,0xc73a, +0xc73b,0xc73e,0xc73f,0xc741,0xc742,0xc743,0xc745,0xc746, +0xc747,0xc748,0xc749,0xc74b,0xc74e,0xc750,0xc759,0xc75a, +0xc75b,0xc75d,0xc75e,0xc75f,0xc761,0xc762,0xc763,0xc764, +0xc765,0xc766,0xc767,0xc769,0xc76a,0xc76c,0xc76d,0xc76e, +0xc76f,0xc770,0xc771,0xc772,0xc773,0xc776,0xc777,0xc779, +0xc77a,0xc77b,0xc77f,0xc780,0xc781,0xc782,0xc786,0xc78b, +0xc78c,0xc78d,0xc78f,0xc792,0xc793,0xc795,0xc799,0xc79b, +0xc79c,0xc79d,0xc79e,0xc79f,0xc7a2,0xc7a7,0xc7a8,0xc7a9, +0xc7aa,0xc7ab,0xc7ae,0xc7af,0xc7b1,0xc7b2,0xc7b3,0xc7b5, +0xc7b6,0xc7b7,0xc7b8,0xc7b9,0xc7ba,0xc7bb,0xc7be,0xc7c2, +0xc7c3,0xc7c4,0xc7c5,0xc7c6,0xc7c7,0xc7ca,0xc7cb,0xc7cd, +0xc7cf,0xc7d1,0xc7d2,0xc7d3,0xc7d4,0xc7d5,0xc7d6,0xc7d7, +0xc7d9,0xc7da,0xc7db,0xc7dc,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xc7de,0xc7df,0xc7e0,0xc7e1,0xc7e2,0xc7e3, +0xc7e5,0xc7e6,0xc7e7,0xc7e9,0xc7ea,0xc7eb,0xc7ed,0xc7ee, +0xc7ef,0xc7f0,0xc7f1,0xc7f2,0xc7f3,0xc7f4,0xc7f5,0xc7f6, +0xc7f7,0xc7f8,0xc7f9,0xc7fa,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xc7fb,0xc7fc,0xc7fd,0xc7fe,0xc7ff,0xc802, +0xc803,0xc805,0xc806,0xc807,0xc809,0xc80b,0xc80c,0xc80d, +0xc80e,0xc80f,0xc812,0xc814,0xc817,0xc818,0xc819,0xc81a, +0xc81b,0xc81e,0xc81f,0xc821,0xc822,0xc823,0xc825,0xc826, +0xc827,0xc828,0xc829,0xc82a,0xc82b,0xc82e,0xc830,0xc832, +0xc833,0xc834,0xc835,0xc836,0xc837,0xc839,0xc83a,0xc83b, +0xc83d,0xc83e,0xc83f,0xc841,0xc842,0xc843,0xc844,0xc845, +0xc846,0xc847,0xc84a,0xc84b,0xc84e,0xc84f,0xc850,0xc851, +0xc852,0xc853,0xc855,0xc856,0xc857,0xc858,0xc859,0xc85a, +0xc85b,0xc85c,0xc85d,0xc85e,0xc85f,0xc860,0xc861,0xc862, +0xc863,0xc864,0xc865,0xc866,0xc867,0xc868,0xc869,0xc86a, +0xc86b,0xc86c,0xc86d,0xc86e,0xc86f,0xc872,0xc873,0xc875, +0xc876,0xc877,0xc879,0xc87b,0xc87c,0xc87d,0xc87e,0xc87f, +0xc882,0xc884,0xc888,0xc889,0xc88a,0xc88e,0xc88f,0xc890, +0xc891,0xc892,0xc893,0xc895,0xc896,0xc897,0xc898,0xc899, +0xc89a,0xc89b,0xc89c,0xc89e,0xc8a0,0xc8a2,0xc8a3,0xc8a4 +}; + +const int uhc1_ucs_table_size = (sizeof(uhc1_ucs_table)/sizeof(unsigned short)); + +const unsigned short uhc2_ucs_table[] = { +0xc8a5,0xc8a6,0xc8a7,0xc8a9,0xc8aa,0xc8ab,0xc8ac,0xc8ad, +0xc8ae,0xc8af,0xc8b0,0xc8b1,0xc8b2,0xc8b3,0xc8b4,0xc8b5, +0xc8b6,0xc8b7,0xc8b8,0xc8b9,0xc8ba,0xc8bb,0xc8be,0xc8bf, +0xc8c0,0xc8c1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xc8c2,0xc8c3,0xc8c5,0xc8c6,0xc8c7,0xc8c9,0xc8ca,0xc8cb, +0xc8cd,0xc8ce,0xc8cf,0xc8d0,0xc8d1,0xc8d2,0xc8d3,0xc8d6, +0xc8d8,0xc8da,0xc8db,0xc8dc,0xc8dd,0xc8de,0xc8df,0xc8e2, +0xc8e3,0xc8e5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xc8e6,0xc8e7,0xc8e8,0xc8e9,0xc8ea,0xc8eb,0xc8ec,0xc8ed, +0xc8ee,0xc8ef,0xc8f0,0xc8f1,0xc8f2,0xc8f3,0xc8f4,0xc8f6, +0xc8f7,0xc8f8,0xc8f9,0xc8fa,0xc8fb,0xc8fe,0xc8ff,0xc901, +0xc902,0xc903,0xc907,0xc908,0xc909,0xc90a,0xc90b,0xc90e, +0x3000,0x3001,0x3002,0x00b7,0x2025,0x2026,0x00a8,0x3003, +0x00ad,0x2015,0x2225,0xff3c,0x223c,0x2018,0x2019,0x201c, +0x201d,0x3014,0x3015,0x3008,0x3009,0x300a,0x300b,0x300c, +0x300d,0x300e,0x300f,0x3010,0x3011,0x00b1,0x00d7,0x00f7, +0x2260,0x2264,0x2265,0x221e,0x2234,0x00b0,0x2032,0x2033, +0x2103,0x212b,0xffe0,0xffe1,0xffe5,0x2642,0x2640,0x2220, +0x22a5,0x2312,0x2202,0x2207,0x2261,0x2252,0x00a7,0x203b, +0x2606,0x2605,0x25cb,0x25cf,0x25ce,0x25c7,0x25c6,0x25a1, +0x25a0,0x25b3,0x25b2,0x25bd,0x25bc,0x2192,0x2190,0x2191, +0x2193,0x2194,0x3013,0x226a,0x226b,0x221a,0x223d,0x221d, +0x2235,0x222b,0x222c,0x2208,0x220b,0x2286,0x2287,0x2282, +0x2283,0x222a,0x2229,0x2227,0x2228,0xffe2,0xc910,0xc912, +0xc913,0xc914,0xc915,0xc916,0xc917,0xc919,0xc91a,0xc91b, +0xc91c,0xc91d,0xc91e,0xc91f,0xc920,0xc921,0xc922,0xc923, +0xc924,0xc925,0xc926,0xc927,0xc928,0xc929,0xc92a,0xc92b, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc92d,0xc92e, +0xc92f,0xc930,0xc931,0xc932,0xc933,0xc935,0xc936,0xc937, +0xc938,0xc939,0xc93a,0xc93b,0xc93c,0xc93d,0xc93e,0xc93f, +0xc940,0xc941,0xc942,0xc943,0xc944,0xc945,0xc946,0xc947, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xc948,0xc949, +0xc94a,0xc94b,0xc94c,0xc94d,0xc94e,0xc94f,0xc952,0xc953, +0xc955,0xc956,0xc957,0xc959,0xc95a,0xc95b,0xc95c,0xc95d, +0xc95e,0xc95f,0xc962,0xc964,0xc965,0xc966,0xc967,0xc968, +0xc969,0xc96a,0xc96b,0xc96d,0xc96e,0xc96f,0x21d2,0x21d4, +0x2200,0x2203,0x00b4,0xff5e,0x02c7,0x02d8,0x02dd,0x02da, +0x02d9,0x00b8,0x02db,0x00a1,0x00bf,0x02d0,0x222e,0x2211, +0x220f,0x00a4,0x2109,0x2030,0x25c1,0x25c0,0x25b7,0x25b6, +0x2664,0x2660,0x2661,0x2665,0x2667,0x2663,0x2299,0x25c8, +0x25a3,0x25d0,0x25d1,0x2592,0x25a4,0x25a5,0x25a8,0x25a7, +0x25a6,0x25a9,0x2668,0x260f,0x260e,0x261c,0x261e,0x00b6, +0x2020,0x2021,0x2195,0x2197,0x2199,0x2196,0x2198,0x266d, +0x2669,0x266a,0x266c,0x327f,0x321c,0x2116,0x33c7,0x2122, +0x33c2,0x33d8,0x2121,0x20ac,0x00ae,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xc971,0xc972,0xc973,0xc975, +0xc976,0xc977,0xc978,0xc979,0xc97a,0xc97b,0xc97d,0xc97e, +0xc97f,0xc980,0xc981,0xc982,0xc983,0xc984,0xc985,0xc986, +0xc987,0xc98a,0xc98b,0xc98d,0xc98e,0xc98f,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xc991,0xc992,0xc993,0xc994, +0xc995,0xc996,0xc997,0xc99a,0xc99c,0xc99e,0xc99f,0xc9a0, +0xc9a1,0xc9a2,0xc9a3,0xc9a4,0xc9a5,0xc9a6,0xc9a7,0xc9a8, +0xc9a9,0xc9aa,0xc9ab,0xc9ac,0xc9ad,0xc9ae,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xc9af,0xc9b0,0xc9b1,0xc9b2, +0xc9b3,0xc9b4,0xc9b5,0xc9b6,0xc9b7,0xc9b8,0xc9b9,0xc9ba, +0xc9bb,0xc9bc,0xc9bd,0xc9be,0xc9bf,0xc9c2,0xc9c3,0xc9c5, +0xc9c6,0xc9c9,0xc9cb,0xc9cc,0xc9cd,0xc9ce,0xc9cf,0xc9d2, +0xc9d4,0xc9d7,0xc9d8,0xc9db,0xff01,0xff02,0xff03,0xff04, +0xff05,0xff06,0xff07,0xff08,0xff09,0xff0a,0xff0b,0xff0c, +0xff0d,0xff0e,0xff0f,0xff10,0xff11,0xff12,0xff13,0xff14, +0xff15,0xff16,0xff17,0xff18,0xff19,0xff1a,0xff1b,0xff1c, +0xff1d,0xff1e,0xff1f,0xff20,0xff21,0xff22,0xff23,0xff24, +0xff25,0xff26,0xff27,0xff28,0xff29,0xff2a,0xff2b,0xff2c, +0xff2d,0xff2e,0xff2f,0xff30,0xff31,0xff32,0xff33,0xff34, +0xff35,0xff36,0xff37,0xff38,0xff39,0xff3a,0xff3b,0xffe6, +0xff3d,0xff3e,0xff3f,0xff40,0xff41,0xff42,0xff43,0xff44, +0xff45,0xff46,0xff47,0xff48,0xff49,0xff4a,0xff4b,0xff4c, +0xff4d,0xff4e,0xff4f,0xff50,0xff51,0xff52,0xff53,0xff54, +0xff55,0xff56,0xff57,0xff58,0xff59,0xff5a,0xff5b,0xff5c, +0xff5d,0xffe3,0xc9de,0xc9df,0xc9e1,0xc9e3,0xc9e5,0xc9e6, +0xc9e8,0xc9e9,0xc9ea,0xc9eb,0xc9ee,0xc9f2,0xc9f3,0xc9f4, +0xc9f5,0xc9f6,0xc9f7,0xc9fa,0xc9fb,0xc9fd,0xc9fe,0xc9ff, +0xca01,0xca02,0xca03,0xca04,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xca05,0xca06,0xca07,0xca0a,0xca0e,0xca0f, +0xca10,0xca11,0xca12,0xca13,0xca15,0xca16,0xca17,0xca19, +0xca1a,0xca1b,0xca1c,0xca1d,0xca1e,0xca1f,0xca20,0xca21, +0xca22,0xca23,0xca24,0xca25,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xca26,0xca27,0xca28,0xca2a,0xca2b,0xca2c, +0xca2d,0xca2e,0xca2f,0xca30,0xca31,0xca32,0xca33,0xca34, +0xca35,0xca36,0xca37,0xca38,0xca39,0xca3a,0xca3b,0xca3c, +0xca3d,0xca3e,0xca3f,0xca40,0xca41,0xca42,0xca43,0xca44, +0xca45,0xca46,0x3131,0x3132,0x3133,0x3134,0x3135,0x3136, +0x3137,0x3138,0x3139,0x313a,0x313b,0x313c,0x313d,0x313e, +0x313f,0x3140,0x3141,0x3142,0x3143,0x3144,0x3145,0x3146, +0x3147,0x3148,0x3149,0x314a,0x314b,0x314c,0x314d,0x314e, +0x314f,0x3150,0x3151,0x3152,0x3153,0x3154,0x3155,0x3156, +0x3157,0x3158,0x3159,0x315a,0x315b,0x315c,0x315d,0x315e, +0x315f,0x3160,0x3161,0x3162,0x3163,0x3164,0x3165,0x3166, +0x3167,0x3168,0x3169,0x316a,0x316b,0x316c,0x316d,0x316e, +0x316f,0x3170,0x3171,0x3172,0x3173,0x3174,0x3175,0x3176, +0x3177,0x3178,0x3179,0x317a,0x317b,0x317c,0x317d,0x317e, +0x317f,0x3180,0x3181,0x3182,0x3183,0x3184,0x3185,0x3186, +0x3187,0x3188,0x3189,0x318a,0x318b,0x318c,0x318d,0x318e, +0xca47,0xca48,0xca49,0xca4a,0xca4b,0xca4e,0xca4f,0xca51, +0xca52,0xca53,0xca55,0xca56,0xca57,0xca58,0xca59,0xca5a, +0xca5b,0xca5e,0xca62,0xca63,0xca64,0xca65,0xca66,0xca67, +0xca69,0xca6a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xca6b,0xca6c,0xca6d,0xca6e,0xca6f,0xca70,0xca71,0xca72, +0xca73,0xca74,0xca75,0xca76,0xca77,0xca78,0xca79,0xca7a, +0xca7b,0xca7c,0xca7e,0xca7f,0xca80,0xca81,0xca82,0xca83, +0xca85,0xca86,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xca87,0xca88,0xca89,0xca8a,0xca8b,0xca8c,0xca8d,0xca8e, +0xca8f,0xca90,0xca91,0xca92,0xca93,0xca94,0xca95,0xca96, +0xca97,0xca99,0xca9a,0xca9b,0xca9c,0xca9d,0xca9e,0xca9f, +0xcaa0,0xcaa1,0xcaa2,0xcaa3,0xcaa4,0xcaa5,0xcaa6,0xcaa7, +0x2170,0x2171,0x2172,0x2173,0x2174,0x2175,0x2176,0x2177, +0x2178,0x2179,0x0000,0x0000,0x0000,0x0000,0x0000,0x2160, +0x2161,0x2162,0x2163,0x2164,0x2165,0x2166,0x2167,0x2168, +0x2169,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0391,0x0392,0x0393,0x0394,0x0395,0x0396,0x0397,0x0398, +0x0399,0x039a,0x039b,0x039c,0x039d,0x039e,0x039f,0x03a0, +0x03a1,0x03a3,0x03a4,0x03a5,0x03a6,0x03a7,0x03a8,0x03a9, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x03b1,0x03b2,0x03b3,0x03b4,0x03b5,0x03b6,0x03b7,0x03b8, +0x03b9,0x03ba,0x03bb,0x03bc,0x03bd,0x03be,0x03bf,0x03c0, +0x03c1,0x03c3,0x03c4,0x03c5,0x03c6,0x03c7,0x03c8,0x03c9, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcaa8,0xcaa9, +0xcaaa,0xcaab,0xcaac,0xcaad,0xcaae,0xcaaf,0xcab0,0xcab1, +0xcab2,0xcab3,0xcab4,0xcab5,0xcab6,0xcab7,0xcab8,0xcab9, +0xcaba,0xcabb,0xcabe,0xcabf,0xcac1,0xcac2,0xcac3,0xcac5, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcac6,0xcac7, +0xcac8,0xcac9,0xcaca,0xcacb,0xcace,0xcad0,0xcad2,0xcad4, +0xcad5,0xcad6,0xcad7,0xcada,0xcadb,0xcadc,0xcadd,0xcade, +0xcadf,0xcae1,0xcae2,0xcae3,0xcae4,0xcae5,0xcae6,0xcae7, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcae8,0xcae9, +0xcaea,0xcaeb,0xcaed,0xcaee,0xcaef,0xcaf0,0xcaf1,0xcaf2, +0xcaf3,0xcaf5,0xcaf6,0xcaf7,0xcaf8,0xcaf9,0xcafa,0xcafb, +0xcafc,0xcafd,0xcafe,0xcaff,0xcb00,0xcb01,0xcb02,0xcb03, +0xcb04,0xcb05,0xcb06,0xcb07,0xcb09,0xcb0a,0x2500,0x2502, +0x250c,0x2510,0x2518,0x2514,0x251c,0x252c,0x2524,0x2534, +0x253c,0x2501,0x2503,0x250f,0x2513,0x251b,0x2517,0x2523, +0x2533,0x252b,0x253b,0x254b,0x2520,0x252f,0x2528,0x2537, +0x253f,0x251d,0x2530,0x2525,0x2538,0x2542,0x2512,0x2511, +0x251a,0x2519,0x2516,0x2515,0x250e,0x250d,0x251e,0x251f, +0x2521,0x2522,0x2526,0x2527,0x2529,0x252a,0x252d,0x252e, +0x2531,0x2532,0x2535,0x2536,0x2539,0x253a,0x253d,0x253e, +0x2540,0x2541,0x2543,0x2544,0x2545,0x2546,0x2547,0x2548, +0x2549,0x254a,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xcb0b,0xcb0c,0xcb0d,0xcb0e, +0xcb0f,0xcb11,0xcb12,0xcb13,0xcb15,0xcb16,0xcb17,0xcb19, +0xcb1a,0xcb1b,0xcb1c,0xcb1d,0xcb1e,0xcb1f,0xcb22,0xcb23, +0xcb24,0xcb25,0xcb26,0xcb27,0xcb28,0xcb29,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xcb2a,0xcb2b,0xcb2c,0xcb2d, +0xcb2e,0xcb2f,0xcb30,0xcb31,0xcb32,0xcb33,0xcb34,0xcb35, +0xcb36,0xcb37,0xcb38,0xcb39,0xcb3a,0xcb3b,0xcb3c,0xcb3d, +0xcb3e,0xcb3f,0xcb40,0xcb42,0xcb43,0xcb44,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xcb45,0xcb46,0xcb47,0xcb4a, +0xcb4b,0xcb4d,0xcb4e,0xcb4f,0xcb51,0xcb52,0xcb53,0xcb54, +0xcb55,0xcb56,0xcb57,0xcb5a,0xcb5b,0xcb5c,0xcb5e,0xcb5f, +0xcb60,0xcb61,0xcb62,0xcb63,0xcb65,0xcb66,0xcb67,0xcb68, +0xcb69,0xcb6a,0xcb6b,0xcb6c,0x3395,0x3396,0x3397,0x2113, +0x3398,0x33c4,0x33a3,0x33a4,0x33a5,0x33a6,0x3399,0x339a, +0x339b,0x339c,0x339d,0x339e,0x339f,0x33a0,0x33a1,0x33a2, +0x33ca,0x338d,0x338e,0x338f,0x33cf,0x3388,0x3389,0x33c8, +0x33a7,0x33a8,0x33b0,0x33b1,0x33b2,0x33b3,0x33b4,0x33b5, +0x33b6,0x33b7,0x33b8,0x33b9,0x3380,0x3381,0x3382,0x3383, +0x3384,0x33ba,0x33bb,0x33bc,0x33bd,0x33be,0x33bf,0x3390, +0x3391,0x3392,0x3393,0x3394,0x2126,0x33c0,0x33c1,0x338a, +0x338b,0x338c,0x33d6,0x33c5,0x33ad,0x33ae,0x33af,0x33db, +0x33a9,0x33aa,0x33ab,0x33ac,0x33dd,0x33d0,0x33d3,0x33c3, +0x33c9,0x33dc,0x33c6,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xcb6d,0xcb6e,0xcb6f,0xcb70,0xcb71,0xcb72, +0xcb73,0xcb74,0xcb75,0xcb76,0xcb77,0xcb7a,0xcb7b,0xcb7c, +0xcb7d,0xcb7e,0xcb7f,0xcb80,0xcb81,0xcb82,0xcb83,0xcb84, +0xcb85,0xcb86,0xcb87,0xcb88,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xcb89,0xcb8a,0xcb8b,0xcb8c,0xcb8d,0xcb8e, +0xcb8f,0xcb90,0xcb91,0xcb92,0xcb93,0xcb94,0xcb95,0xcb96, +0xcb97,0xcb98,0xcb99,0xcb9a,0xcb9b,0xcb9d,0xcb9e,0xcb9f, +0xcba0,0xcba1,0xcba2,0xcba3,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xcba4,0xcba5,0xcba6,0xcba7,0xcba8,0xcba9, +0xcbaa,0xcbab,0xcbac,0xcbad,0xcbae,0xcbaf,0xcbb0,0xcbb1, +0xcbb2,0xcbb3,0xcbb4,0xcbb5,0xcbb6,0xcbb7,0xcbb9,0xcbba, +0xcbbb,0xcbbc,0xcbbd,0xcbbe,0xcbbf,0xcbc0,0xcbc1,0xcbc2, +0xcbc3,0xcbc4,0x00c6,0x00d0,0x00aa,0x0126,0x0000,0x0132, +0x0000,0x013f,0x0141,0x00d8,0x0152,0x00ba,0x00de,0x0166, +0x014a,0x0000,0x3260,0x3261,0x3262,0x3263,0x3264,0x3265, +0x3266,0x3267,0x3268,0x3269,0x326a,0x326b,0x326c,0x326d, +0x326e,0x326f,0x3270,0x3271,0x3272,0x3273,0x3274,0x3275, +0x3276,0x3277,0x3278,0x3279,0x327a,0x327b,0x24d0,0x24d1, +0x24d2,0x24d3,0x24d4,0x24d5,0x24d6,0x24d7,0x24d8,0x24d9, +0x24da,0x24db,0x24dc,0x24dd,0x24de,0x24df,0x24e0,0x24e1, +0x24e2,0x24e3,0x24e4,0x24e5,0x24e6,0x24e7,0x24e8,0x24e9, +0x2460,0x2461,0x2462,0x2463,0x2464,0x2465,0x2466,0x2467, +0x2468,0x2469,0x246a,0x246b,0x246c,0x246d,0x246e,0x00bd, +0x2153,0x2154,0x00bc,0x00be,0x215b,0x215c,0x215d,0x215e, +0xcbc5,0xcbc6,0xcbc7,0xcbc8,0xcbc9,0xcbca,0xcbcb,0xcbcc, +0xcbcd,0xcbce,0xcbcf,0xcbd0,0xcbd1,0xcbd2,0xcbd3,0xcbd5, +0xcbd6,0xcbd7,0xcbd8,0xcbd9,0xcbda,0xcbdb,0xcbdc,0xcbdd, +0xcbde,0xcbdf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcbe0,0xcbe1,0xcbe2,0xcbe3,0xcbe5,0xcbe6,0xcbe8,0xcbea, +0xcbeb,0xcbec,0xcbed,0xcbee,0xcbef,0xcbf0,0xcbf1,0xcbf2, +0xcbf3,0xcbf4,0xcbf5,0xcbf6,0xcbf7,0xcbf8,0xcbf9,0xcbfa, +0xcbfb,0xcbfc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcbfd,0xcbfe,0xcbff,0xcc00,0xcc01,0xcc02,0xcc03,0xcc04, +0xcc05,0xcc06,0xcc07,0xcc08,0xcc09,0xcc0a,0xcc0b,0xcc0e, +0xcc0f,0xcc11,0xcc12,0xcc13,0xcc15,0xcc16,0xcc17,0xcc18, +0xcc19,0xcc1a,0xcc1b,0xcc1e,0xcc1f,0xcc20,0xcc23,0xcc24, +0x00e6,0x0111,0x00f0,0x0127,0x0131,0x0133,0x0138,0x0140, +0x0142,0x00f8,0x0153,0x00df,0x00fe,0x0167,0x014b,0x0149, +0x3200,0x3201,0x3202,0x3203,0x3204,0x3205,0x3206,0x3207, +0x3208,0x3209,0x320a,0x320b,0x320c,0x320d,0x320e,0x320f, +0x3210,0x3211,0x3212,0x3213,0x3214,0x3215,0x3216,0x3217, +0x3218,0x3219,0x321a,0x321b,0x249c,0x249d,0x249e,0x249f, +0x24a0,0x24a1,0x24a2,0x24a3,0x24a4,0x24a5,0x24a6,0x24a7, +0x24a8,0x24a9,0x24aa,0x24ab,0x24ac,0x24ad,0x24ae,0x24af, +0x24b0,0x24b1,0x24b2,0x24b3,0x24b4,0x24b5,0x2474,0x2475, +0x2476,0x2477,0x2478,0x2479,0x247a,0x247b,0x247c,0x247d, +0x247e,0x247f,0x2480,0x2481,0x2482,0x00b9,0x00b2,0x00b3, +0x2074,0x207f,0x2081,0x2082,0x2083,0x2084,0xcc25,0xcc26, +0xcc2a,0xcc2b,0xcc2d,0xcc2f,0xcc31,0xcc32,0xcc33,0xcc34, +0xcc35,0xcc36,0xcc37,0xcc3a,0xcc3f,0xcc40,0xcc41,0xcc42, +0xcc43,0xcc46,0xcc47,0xcc49,0xcc4a,0xcc4b,0xcc4d,0xcc4e, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcc4f,0xcc50, +0xcc51,0xcc52,0xcc53,0xcc56,0xcc5a,0xcc5b,0xcc5c,0xcc5d, +0xcc5e,0xcc5f,0xcc61,0xcc62,0xcc63,0xcc65,0xcc67,0xcc69, +0xcc6a,0xcc6b,0xcc6c,0xcc6d,0xcc6e,0xcc6f,0xcc71,0xcc72, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcc73,0xcc74, +0xcc76,0xcc77,0xcc78,0xcc79,0xcc7a,0xcc7b,0xcc7c,0xcc7d, +0xcc7e,0xcc7f,0xcc80,0xcc81,0xcc82,0xcc83,0xcc84,0xcc85, +0xcc86,0xcc87,0xcc88,0xcc89,0xcc8a,0xcc8b,0xcc8c,0xcc8d, +0xcc8e,0xcc8f,0xcc90,0xcc91,0xcc92,0xcc93,0x3041,0x3042, +0x3043,0x3044,0x3045,0x3046,0x3047,0x3048,0x3049,0x304a, +0x304b,0x304c,0x304d,0x304e,0x304f,0x3050,0x3051,0x3052, +0x3053,0x3054,0x3055,0x3056,0x3057,0x3058,0x3059,0x305a, +0x305b,0x305c,0x305d,0x305e,0x305f,0x3060,0x3061,0x3062, +0x3063,0x3064,0x3065,0x3066,0x3067,0x3068,0x3069,0x306a, +0x306b,0x306c,0x306d,0x306e,0x306f,0x3070,0x3071,0x3072, +0x3073,0x3074,0x3075,0x3076,0x3077,0x3078,0x3079,0x307a, +0x307b,0x307c,0x307d,0x307e,0x307f,0x3080,0x3081,0x3082, +0x3083,0x3084,0x3085,0x3086,0x3087,0x3088,0x3089,0x308a, +0x308b,0x308c,0x308d,0x308e,0x308f,0x3090,0x3091,0x3092, +0x3093,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xcc94,0xcc95,0xcc96,0xcc97, +0xcc9a,0xcc9b,0xcc9d,0xcc9e,0xcc9f,0xcca1,0xcca2,0xcca3, +0xcca4,0xcca5,0xcca6,0xcca7,0xccaa,0xccae,0xccaf,0xccb0, +0xccb1,0xccb2,0xccb3,0xccb6,0xccb7,0xccb9,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xccba,0xccbb,0xccbd,0xccbe, +0xccbf,0xccc0,0xccc1,0xccc2,0xccc3,0xccc6,0xccc8,0xccca, +0xcccb,0xcccc,0xcccd,0xccce,0xcccf,0xccd1,0xccd2,0xccd3, +0xccd5,0xccd6,0xccd7,0xccd8,0xccd9,0xccda,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xccdb,0xccdc,0xccdd,0xccde, +0xccdf,0xcce0,0xcce1,0xcce2,0xcce3,0xcce5,0xcce6,0xcce7, +0xcce8,0xcce9,0xccea,0xcceb,0xcced,0xccee,0xccef,0xccf1, +0xccf2,0xccf3,0xccf4,0xccf5,0xccf6,0xccf7,0xccf8,0xccf9, +0xccfa,0xccfb,0xccfc,0xccfd,0x30a1,0x30a2,0x30a3,0x30a4, +0x30a5,0x30a6,0x30a7,0x30a8,0x30a9,0x30aa,0x30ab,0x30ac, +0x30ad,0x30ae,0x30af,0x30b0,0x30b1,0x30b2,0x30b3,0x30b4, +0x30b5,0x30b6,0x30b7,0x30b8,0x30b9,0x30ba,0x30bb,0x30bc, +0x30bd,0x30be,0x30bf,0x30c0,0x30c1,0x30c2,0x30c3,0x30c4, +0x30c5,0x30c6,0x30c7,0x30c8,0x30c9,0x30ca,0x30cb,0x30cc, +0x30cd,0x30ce,0x30cf,0x30d0,0x30d1,0x30d2,0x30d3,0x30d4, +0x30d5,0x30d6,0x30d7,0x30d8,0x30d9,0x30da,0x30db,0x30dc, +0x30dd,0x30de,0x30df,0x30e0,0x30e1,0x30e2,0x30e3,0x30e4, +0x30e5,0x30e6,0x30e7,0x30e8,0x30e9,0x30ea,0x30eb,0x30ec, +0x30ed,0x30ee,0x30ef,0x30f0,0x30f1,0x30f2,0x30f3,0x30f4, +0x30f5,0x30f6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xccfe,0xccff,0xcd00,0xcd02,0xcd03,0xcd04, +0xcd05,0xcd06,0xcd07,0xcd0a,0xcd0b,0xcd0d,0xcd0e,0xcd0f, +0xcd11,0xcd12,0xcd13,0xcd14,0xcd15,0xcd16,0xcd17,0xcd1a, +0xcd1c,0xcd1e,0xcd1f,0xcd20,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xcd21,0xcd22,0xcd23,0xcd25,0xcd26,0xcd27, +0xcd29,0xcd2a,0xcd2b,0xcd2d,0xcd2e,0xcd2f,0xcd30,0xcd31, +0xcd32,0xcd33,0xcd34,0xcd35,0xcd36,0xcd37,0xcd38,0xcd3a, +0xcd3b,0xcd3c,0xcd3d,0xcd3e,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xcd3f,0xcd40,0xcd41,0xcd42,0xcd43,0xcd44, +0xcd45,0xcd46,0xcd47,0xcd48,0xcd49,0xcd4a,0xcd4b,0xcd4c, +0xcd4d,0xcd4e,0xcd4f,0xcd50,0xcd51,0xcd52,0xcd53,0xcd54, +0xcd55,0xcd56,0xcd57,0xcd58,0xcd59,0xcd5a,0xcd5b,0xcd5d, +0xcd5e,0xcd5f,0x0410,0x0411,0x0412,0x0413,0x0414,0x0415, +0x0401,0x0416,0x0417,0x0418,0x0419,0x041a,0x041b,0x041c, +0x041d,0x041e,0x041f,0x0420,0x0421,0x0422,0x0423,0x0424, +0x0425,0x0426,0x0427,0x0428,0x0429,0x042a,0x042b,0x042c, +0x042d,0x042e,0x042f,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0430,0x0431,0x0432,0x0433,0x0434,0x0435, +0x0451,0x0436,0x0437,0x0438,0x0439,0x043a,0x043b,0x043c, +0x043d,0x043e,0x043f,0x0440,0x0441,0x0442,0x0443,0x0444, +0x0445,0x0446,0x0447,0x0448,0x0449,0x044a,0x044b,0x044c, +0x044d,0x044e,0x044f,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcd61,0xcd62,0xcd63,0xcd65,0xcd66,0xcd67,0xcd68,0xcd69, +0xcd6a,0xcd6b,0xcd6e,0xcd70,0xcd72,0xcd73,0xcd74,0xcd75, +0xcd76,0xcd77,0xcd79,0xcd7a,0xcd7b,0xcd7c,0xcd7d,0xcd7e, +0xcd7f,0xcd80,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcd81,0xcd82,0xcd83,0xcd84,0xcd85,0xcd86,0xcd87,0xcd89, +0xcd8a,0xcd8b,0xcd8c,0xcd8d,0xcd8e,0xcd8f,0xcd90,0xcd91, +0xcd92,0xcd93,0xcd96,0xcd97,0xcd99,0xcd9a,0xcd9b,0xcd9d, +0xcd9e,0xcd9f,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcda0,0xcda1,0xcda2,0xcda3,0xcda6,0xcda8,0xcdaa,0xcdab, +0xcdac,0xcdad,0xcdae,0xcdaf,0xcdb1,0xcdb2,0xcdb3,0xcdb4, +0xcdb5,0xcdb6,0xcdb7,0xcdb8,0xcdb9,0xcdba,0xcdbb,0xcdbc, +0xcdbd,0xcdbe,0xcdbf,0xcdc0,0xcdc1,0xcdc2,0xcdc3,0xcdc5, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcdc6,0xcdc7, +0xcdc8,0xcdc9,0xcdca,0xcdcb,0xcdcd,0xcdce,0xcdcf,0xcdd1, +0xcdd2,0xcdd3,0xcdd4,0xcdd5,0xcdd6,0xcdd7,0xcdd8,0xcdd9, +0xcdda,0xcddb,0xcddc,0xcddd,0xcdde,0xcddf,0xcde0,0xcde1, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcde2,0xcde3, +0xcde4,0xcde5,0xcde6,0xcde7,0xcde9,0xcdea,0xcdeb,0xcded, +0xcdee,0xcdef,0xcdf1,0xcdf2,0xcdf3,0xcdf4,0xcdf5,0xcdf6, +0xcdf7,0xcdfa,0xcdfc,0xcdfe,0xcdff,0xce00,0xce01,0xce02, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xce03,0xce05, +0xce06,0xce07,0xce09,0xce0a,0xce0b,0xce0d,0xce0e,0xce0f, +0xce10,0xce11,0xce12,0xce13,0xce15,0xce16,0xce17,0xce18, +0xce1a,0xce1b,0xce1c,0xce1d,0xce1e,0xce1f,0xce22,0xce23, +0xce25,0xce26,0xce27,0xce29,0xce2a,0xce2b,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xce2c,0xce2d,0xce2e,0xce2f, +0xce32,0xce34,0xce36,0xce37,0xce38,0xce39,0xce3a,0xce3b, +0xce3c,0xce3d,0xce3e,0xce3f,0xce40,0xce41,0xce42,0xce43, +0xce44,0xce45,0xce46,0xce47,0xce48,0xce49,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xce4a,0xce4b,0xce4c,0xce4d, +0xce4e,0xce4f,0xce50,0xce51,0xce52,0xce53,0xce54,0xce55, +0xce56,0xce57,0xce5a,0xce5b,0xce5d,0xce5e,0xce62,0xce63, +0xce64,0xce65,0xce66,0xce67,0xce6a,0xce6c,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xce6e,0xce6f,0xce70,0xce71, +0xce72,0xce73,0xce76,0xce77,0xce79,0xce7a,0xce7b,0xce7d, +0xce7e,0xce7f,0xce80,0xce81,0xce82,0xce83,0xce86,0xce88, +0xce8a,0xce8b,0xce8c,0xce8d,0xce8e,0xce8f,0xce92,0xce93, +0xce95,0xce96,0xce97,0xce99,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xce9a,0xce9b,0xce9c,0xce9d,0xce9e,0xce9f, +0xcea2,0xcea6,0xcea7,0xcea8,0xcea9,0xceaa,0xceab,0xceae, +0xceaf,0xceb0,0xceb1,0xceb2,0xceb3,0xceb4,0xceb5,0xceb6, +0xceb7,0xceb8,0xceb9,0xceba,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xcebb,0xcebc,0xcebd,0xcebe,0xcebf,0xcec0, +0xcec2,0xcec3,0xcec4,0xcec5,0xcec6,0xcec7,0xcec8,0xcec9, +0xceca,0xcecb,0xcecc,0xcecd,0xcece,0xcecf,0xced0,0xced1, +0xced2,0xced3,0xced4,0xced5,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xced6,0xced7,0xced8,0xced9,0xceda,0xcedb, +0xcedc,0xcedd,0xcede,0xcedf,0xcee0,0xcee1,0xcee2,0xcee3, +0xcee6,0xcee7,0xcee9,0xceea,0xceed,0xceee,0xceef,0xcef0, +0xcef1,0xcef2,0xcef3,0xcef6,0xcefa,0xcefb,0xcefc,0xcefd, +0xcefe,0xceff,0xac00,0xac01,0xac04,0xac07,0xac08,0xac09, +0xac0a,0xac10,0xac11,0xac12,0xac13,0xac14,0xac15,0xac16, +0xac17,0xac19,0xac1a,0xac1b,0xac1c,0xac1d,0xac20,0xac24, +0xac2c,0xac2d,0xac2f,0xac30,0xac31,0xac38,0xac39,0xac3c, +0xac40,0xac4b,0xac4d,0xac54,0xac58,0xac5c,0xac70,0xac71, +0xac74,0xac77,0xac78,0xac7a,0xac80,0xac81,0xac83,0xac84, +0xac85,0xac86,0xac89,0xac8a,0xac8b,0xac8c,0xac90,0xac94, +0xac9c,0xac9d,0xac9f,0xaca0,0xaca1,0xaca8,0xaca9,0xacaa, +0xacac,0xacaf,0xacb0,0xacb8,0xacb9,0xacbb,0xacbc,0xacbd, +0xacc1,0xacc4,0xacc8,0xaccc,0xacd5,0xacd7,0xace0,0xace1, +0xace4,0xace7,0xace8,0xacea,0xacec,0xacef,0xacf0,0xacf1, +0xacf3,0xacf5,0xacf6,0xacfc,0xacfd,0xad00,0xad04,0xad06, +0xcf02,0xcf03,0xcf05,0xcf06,0xcf07,0xcf09,0xcf0a,0xcf0b, +0xcf0c,0xcf0d,0xcf0e,0xcf0f,0xcf12,0xcf14,0xcf16,0xcf17, +0xcf18,0xcf19,0xcf1a,0xcf1b,0xcf1d,0xcf1e,0xcf1f,0xcf21, +0xcf22,0xcf23,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcf25,0xcf26,0xcf27,0xcf28,0xcf29,0xcf2a,0xcf2b,0xcf2e, +0xcf32,0xcf33,0xcf34,0xcf35,0xcf36,0xcf37,0xcf39,0xcf3a, +0xcf3b,0xcf3c,0xcf3d,0xcf3e,0xcf3f,0xcf40,0xcf41,0xcf42, +0xcf43,0xcf44,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcf45,0xcf46,0xcf47,0xcf48,0xcf49,0xcf4a,0xcf4b,0xcf4c, +0xcf4d,0xcf4e,0xcf4f,0xcf50,0xcf51,0xcf52,0xcf53,0xcf56, +0xcf57,0xcf59,0xcf5a,0xcf5b,0xcf5d,0xcf5e,0xcf5f,0xcf60, +0xcf61,0xcf62,0xcf63,0xcf66,0xcf68,0xcf6a,0xcf6b,0xcf6c, +0xad0c,0xad0d,0xad0f,0xad11,0xad18,0xad1c,0xad20,0xad29, +0xad2c,0xad2d,0xad34,0xad35,0xad38,0xad3c,0xad44,0xad45, +0xad47,0xad49,0xad50,0xad54,0xad58,0xad61,0xad63,0xad6c, +0xad6d,0xad70,0xad73,0xad74,0xad75,0xad76,0xad7b,0xad7c, +0xad7d,0xad7f,0xad81,0xad82,0xad88,0xad89,0xad8c,0xad90, +0xad9c,0xad9d,0xada4,0xadb7,0xadc0,0xadc1,0xadc4,0xadc8, +0xadd0,0xadd1,0xadd3,0xaddc,0xade0,0xade4,0xadf8,0xadf9, +0xadfc,0xadff,0xae00,0xae01,0xae08,0xae09,0xae0b,0xae0d, +0xae14,0xae30,0xae31,0xae34,0xae37,0xae38,0xae3a,0xae40, +0xae41,0xae43,0xae45,0xae46,0xae4a,0xae4c,0xae4d,0xae4e, +0xae50,0xae54,0xae56,0xae5c,0xae5d,0xae5f,0xae60,0xae61, +0xae65,0xae68,0xae69,0xae6c,0xae70,0xae78,0xcf6d,0xcf6e, +0xcf6f,0xcf72,0xcf73,0xcf75,0xcf76,0xcf77,0xcf79,0xcf7a, +0xcf7b,0xcf7c,0xcf7d,0xcf7e,0xcf7f,0xcf81,0xcf82,0xcf83, +0xcf84,0xcf86,0xcf87,0xcf88,0xcf89,0xcf8a,0xcf8b,0xcf8d, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcf8e,0xcf8f, +0xcf90,0xcf91,0xcf92,0xcf93,0xcf94,0xcf95,0xcf96,0xcf97, +0xcf98,0xcf99,0xcf9a,0xcf9b,0xcf9c,0xcf9d,0xcf9e,0xcf9f, +0xcfa0,0xcfa2,0xcfa3,0xcfa4,0xcfa5,0xcfa6,0xcfa7,0xcfa9, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfaa,0xcfab, +0xcfac,0xcfad,0xcfae,0xcfaf,0xcfb1,0xcfb2,0xcfb3,0xcfb4, +0xcfb5,0xcfb6,0xcfb7,0xcfb8,0xcfb9,0xcfba,0xcfbb,0xcfbc, +0xcfbd,0xcfbe,0xcfbf,0xcfc0,0xcfc1,0xcfc2,0xcfc3,0xcfc5, +0xcfc6,0xcfc7,0xcfc8,0xcfc9,0xcfca,0xcfcb,0xae79,0xae7b, +0xae7c,0xae7d,0xae84,0xae85,0xae8c,0xaebc,0xaebd,0xaebe, +0xaec0,0xaec4,0xaecc,0xaecd,0xaecf,0xaed0,0xaed1,0xaed8, +0xaed9,0xaedc,0xaee8,0xaeeb,0xaeed,0xaef4,0xaef8,0xaefc, +0xaf07,0xaf08,0xaf0d,0xaf10,0xaf2c,0xaf2d,0xaf30,0xaf32, +0xaf34,0xaf3c,0xaf3d,0xaf3f,0xaf41,0xaf42,0xaf43,0xaf48, +0xaf49,0xaf50,0xaf5c,0xaf5d,0xaf64,0xaf65,0xaf79,0xaf80, +0xaf84,0xaf88,0xaf90,0xaf91,0xaf95,0xaf9c,0xafb8,0xafb9, +0xafbc,0xafc0,0xafc7,0xafc8,0xafc9,0xafcb,0xafcd,0xafce, +0xafd4,0xafdc,0xafe8,0xafe9,0xaff0,0xaff1,0xaff4,0xaff8, +0xb000,0xb001,0xb004,0xb00c,0xb010,0xb014,0xb01c,0xb01d, +0xb028,0xb044,0xb045,0xb048,0xb04a,0xb04c,0xb04e,0xb053, +0xb054,0xb055,0xb057,0xb059,0xcfcc,0xcfcd,0xcfce,0xcfcf, +0xcfd0,0xcfd1,0xcfd2,0xcfd3,0xcfd4,0xcfd5,0xcfd6,0xcfd7, +0xcfd8,0xcfd9,0xcfda,0xcfdb,0xcfdc,0xcfdd,0xcfde,0xcfdf, +0xcfe2,0xcfe3,0xcfe5,0xcfe6,0xcfe7,0xcfe9,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xcfea,0xcfeb,0xcfec,0xcfed, +0xcfee,0xcfef,0xcff2,0xcff4,0xcff6,0xcff7,0xcff8,0xcff9, +0xcffa,0xcffb,0xcffd,0xcffe,0xcfff,0xd001,0xd002,0xd003, +0xd005,0xd006,0xd007,0xd008,0xd009,0xd00a,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd00b,0xd00c,0xd00d,0xd00e, +0xd00f,0xd010,0xd012,0xd013,0xd014,0xd015,0xd016,0xd017, +0xd019,0xd01a,0xd01b,0xd01c,0xd01d,0xd01e,0xd01f,0xd020, +0xd021,0xd022,0xd023,0xd024,0xd025,0xd026,0xd027,0xd028, +0xd029,0xd02a,0xd02b,0xd02c,0xb05d,0xb07c,0xb07d,0xb080, +0xb084,0xb08c,0xb08d,0xb08f,0xb091,0xb098,0xb099,0xb09a, +0xb09c,0xb09f,0xb0a0,0xb0a1,0xb0a2,0xb0a8,0xb0a9,0xb0ab, +0xb0ac,0xb0ad,0xb0ae,0xb0af,0xb0b1,0xb0b3,0xb0b4,0xb0b5, +0xb0b8,0xb0bc,0xb0c4,0xb0c5,0xb0c7,0xb0c8,0xb0c9,0xb0d0, +0xb0d1,0xb0d4,0xb0d8,0xb0e0,0xb0e5,0xb108,0xb109,0xb10b, +0xb10c,0xb110,0xb112,0xb113,0xb118,0xb119,0xb11b,0xb11c, +0xb11d,0xb123,0xb124,0xb125,0xb128,0xb12c,0xb134,0xb135, +0xb137,0xb138,0xb139,0xb140,0xb141,0xb144,0xb148,0xb150, +0xb151,0xb154,0xb155,0xb158,0xb15c,0xb160,0xb178,0xb179, +0xb17c,0xb180,0xb182,0xb188,0xb189,0xb18b,0xb18d,0xb192, +0xb193,0xb194,0xb198,0xb19c,0xb1a8,0xb1cc,0xb1d0,0xb1d4, +0xb1dc,0xb1dd,0xd02e,0xd02f,0xd030,0xd031,0xd032,0xd033, +0xd036,0xd037,0xd039,0xd03a,0xd03b,0xd03d,0xd03e,0xd03f, +0xd040,0xd041,0xd042,0xd043,0xd046,0xd048,0xd04a,0xd04b, +0xd04c,0xd04d,0xd04e,0xd04f,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd051,0xd052,0xd053,0xd055,0xd056,0xd057, +0xd059,0xd05a,0xd05b,0xd05c,0xd05d,0xd05e,0xd05f,0xd061, +0xd062,0xd063,0xd064,0xd065,0xd066,0xd067,0xd068,0xd069, +0xd06a,0xd06b,0xd06e,0xd06f,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd071,0xd072,0xd073,0xd075,0xd076,0xd077, +0xd078,0xd079,0xd07a,0xd07b,0xd07e,0xd07f,0xd080,0xd082, +0xd083,0xd084,0xd085,0xd086,0xd087,0xd088,0xd089,0xd08a, +0xd08b,0xd08c,0xd08d,0xd08e,0xd08f,0xd090,0xd091,0xd092, +0xd093,0xd094,0xb1df,0xb1e8,0xb1e9,0xb1ec,0xb1f0,0xb1f9, +0xb1fb,0xb1fd,0xb204,0xb205,0xb208,0xb20b,0xb20c,0xb214, +0xb215,0xb217,0xb219,0xb220,0xb234,0xb23c,0xb258,0xb25c, +0xb260,0xb268,0xb269,0xb274,0xb275,0xb27c,0xb284,0xb285, +0xb289,0xb290,0xb291,0xb294,0xb298,0xb299,0xb29a,0xb2a0, +0xb2a1,0xb2a3,0xb2a5,0xb2a6,0xb2aa,0xb2ac,0xb2b0,0xb2b4, +0xb2c8,0xb2c9,0xb2cc,0xb2d0,0xb2d2,0xb2d8,0xb2d9,0xb2db, +0xb2dd,0xb2e2,0xb2e4,0xb2e5,0xb2e6,0xb2e8,0xb2eb,0xb2ec, +0xb2ed,0xb2ee,0xb2ef,0xb2f3,0xb2f4,0xb2f5,0xb2f7,0xb2f8, +0xb2f9,0xb2fa,0xb2fb,0xb2ff,0xb300,0xb301,0xb304,0xb308, +0xb310,0xb311,0xb313,0xb314,0xb315,0xb31c,0xb354,0xb355, +0xb356,0xb358,0xb35b,0xb35c,0xb35e,0xb35f,0xb364,0xb365, +0xd095,0xd096,0xd097,0xd098,0xd099,0xd09a,0xd09b,0xd09c, +0xd09d,0xd09e,0xd09f,0xd0a0,0xd0a1,0xd0a2,0xd0a3,0xd0a6, +0xd0a7,0xd0a9,0xd0aa,0xd0ab,0xd0ad,0xd0ae,0xd0af,0xd0b0, +0xd0b1,0xd0b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd0b3,0xd0b6,0xd0b8,0xd0ba,0xd0bb,0xd0bc,0xd0bd,0xd0be, +0xd0bf,0xd0c2,0xd0c3,0xd0c5,0xd0c6,0xd0c7,0xd0ca,0xd0cb, +0xd0cc,0xd0cd,0xd0ce,0xd0cf,0xd0d2,0xd0d6,0xd0d7,0xd0d8, +0xd0d9,0xd0da,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd0db,0xd0de,0xd0df,0xd0e1,0xd0e2,0xd0e3,0xd0e5,0xd0e6, +0xd0e7,0xd0e8,0xd0e9,0xd0ea,0xd0eb,0xd0ee,0xd0f2,0xd0f3, +0xd0f4,0xd0f5,0xd0f6,0xd0f7,0xd0f9,0xd0fa,0xd0fb,0xd0fc, +0xd0fd,0xd0fe,0xd0ff,0xd100,0xd101,0xd102,0xd103,0xd104, +0xb367,0xb369,0xb36b,0xb36e,0xb370,0xb371,0xb374,0xb378, +0xb380,0xb381,0xb383,0xb384,0xb385,0xb38c,0xb390,0xb394, +0xb3a0,0xb3a1,0xb3a8,0xb3ac,0xb3c4,0xb3c5,0xb3c8,0xb3cb, +0xb3cc,0xb3ce,0xb3d0,0xb3d4,0xb3d5,0xb3d7,0xb3d9,0xb3db, +0xb3dd,0xb3e0,0xb3e4,0xb3e8,0xb3fc,0xb410,0xb418,0xb41c, +0xb420,0xb428,0xb429,0xb42b,0xb434,0xb450,0xb451,0xb454, +0xb458,0xb460,0xb461,0xb463,0xb465,0xb46c,0xb480,0xb488, +0xb49d,0xb4a4,0xb4a8,0xb4ac,0xb4b5,0xb4b7,0xb4b9,0xb4c0, +0xb4c4,0xb4c8,0xb4d0,0xb4d5,0xb4dc,0xb4dd,0xb4e0,0xb4e3, +0xb4e4,0xb4e6,0xb4ec,0xb4ed,0xb4ef,0xb4f1,0xb4f8,0xb514, +0xb515,0xb518,0xb51b,0xb51c,0xb524,0xb525,0xb527,0xb528, +0xb529,0xb52a,0xb530,0xb531,0xb534,0xb538,0xd105,0xd106, +0xd107,0xd108,0xd109,0xd10a,0xd10b,0xd10c,0xd10e,0xd10f, +0xd110,0xd111,0xd112,0xd113,0xd114,0xd115,0xd116,0xd117, +0xd118,0xd119,0xd11a,0xd11b,0xd11c,0xd11d,0xd11e,0xd11f, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd120,0xd121, +0xd122,0xd123,0xd124,0xd125,0xd126,0xd127,0xd128,0xd129, +0xd12a,0xd12b,0xd12c,0xd12d,0xd12e,0xd12f,0xd132,0xd133, +0xd135,0xd136,0xd137,0xd139,0xd13b,0xd13c,0xd13d,0xd13e, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd13f,0xd142, +0xd146,0xd147,0xd148,0xd149,0xd14a,0xd14b,0xd14e,0xd14f, +0xd151,0xd152,0xd153,0xd155,0xd156,0xd157,0xd158,0xd159, +0xd15a,0xd15b,0xd15e,0xd160,0xd162,0xd163,0xd164,0xd165, +0xd166,0xd167,0xd169,0xd16a,0xd16b,0xd16d,0xb540,0xb541, +0xb543,0xb544,0xb545,0xb54b,0xb54c,0xb54d,0xb550,0xb554, +0xb55c,0xb55d,0xb55f,0xb560,0xb561,0xb5a0,0xb5a1,0xb5a4, +0xb5a8,0xb5aa,0xb5ab,0xb5b0,0xb5b1,0xb5b3,0xb5b4,0xb5b5, +0xb5bb,0xb5bc,0xb5bd,0xb5c0,0xb5c4,0xb5cc,0xb5cd,0xb5cf, +0xb5d0,0xb5d1,0xb5d8,0xb5ec,0xb610,0xb611,0xb614,0xb618, +0xb625,0xb62c,0xb634,0xb648,0xb664,0xb668,0xb69c,0xb69d, +0xb6a0,0xb6a4,0xb6ab,0xb6ac,0xb6b1,0xb6d4,0xb6f0,0xb6f4, +0xb6f8,0xb700,0xb701,0xb705,0xb728,0xb729,0xb72c,0xb72f, +0xb730,0xb738,0xb739,0xb73b,0xb744,0xb748,0xb74c,0xb754, +0xb755,0xb760,0xb764,0xb768,0xb770,0xb771,0xb773,0xb775, +0xb77c,0xb77d,0xb780,0xb784,0xb78c,0xb78d,0xb78f,0xb790, +0xb791,0xb792,0xb796,0xb797,0xd16e,0xd16f,0xd170,0xd171, +0xd172,0xd173,0xd174,0xd175,0xd176,0xd177,0xd178,0xd179, +0xd17a,0xd17b,0xd17d,0xd17e,0xd17f,0xd180,0xd181,0xd182, +0xd183,0xd185,0xd186,0xd187,0xd189,0xd18a,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd18b,0xd18c,0xd18d,0xd18e, +0xd18f,0xd190,0xd191,0xd192,0xd193,0xd194,0xd195,0xd196, +0xd197,0xd198,0xd199,0xd19a,0xd19b,0xd19c,0xd19d,0xd19e, +0xd19f,0xd1a2,0xd1a3,0xd1a5,0xd1a6,0xd1a7,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd1a9,0xd1aa,0xd1ab,0xd1ac, +0xd1ad,0xd1ae,0xd1af,0xd1b2,0xd1b4,0xd1b6,0xd1b7,0xd1b8, +0xd1b9,0xd1bb,0xd1bd,0xd1be,0xd1bf,0xd1c1,0xd1c2,0xd1c3, +0xd1c4,0xd1c5,0xd1c6,0xd1c7,0xd1c8,0xd1c9,0xd1ca,0xd1cb, +0xd1cc,0xd1cd,0xd1ce,0xd1cf,0xb798,0xb799,0xb79c,0xb7a0, +0xb7a8,0xb7a9,0xb7ab,0xb7ac,0xb7ad,0xb7b4,0xb7b5,0xb7b8, +0xb7c7,0xb7c9,0xb7ec,0xb7ed,0xb7f0,0xb7f4,0xb7fc,0xb7fd, +0xb7ff,0xb800,0xb801,0xb807,0xb808,0xb809,0xb80c,0xb810, +0xb818,0xb819,0xb81b,0xb81d,0xb824,0xb825,0xb828,0xb82c, +0xb834,0xb835,0xb837,0xb838,0xb839,0xb840,0xb844,0xb851, +0xb853,0xb85c,0xb85d,0xb860,0xb864,0xb86c,0xb86d,0xb86f, +0xb871,0xb878,0xb87c,0xb88d,0xb8a8,0xb8b0,0xb8b4,0xb8b8, +0xb8c0,0xb8c1,0xb8c3,0xb8c5,0xb8cc,0xb8d0,0xb8d4,0xb8dd, +0xb8df,0xb8e1,0xb8e8,0xb8e9,0xb8ec,0xb8f0,0xb8f8,0xb8f9, +0xb8fb,0xb8fd,0xb904,0xb918,0xb920,0xb93c,0xb93d,0xb940, +0xb944,0xb94c,0xb94f,0xb951,0xb958,0xb959,0xb95c,0xb960, +0xb968,0xb969,0xd1d0,0xd1d1,0xd1d2,0xd1d3,0xd1d4,0xd1d5, +0xd1d6,0xd1d7,0xd1d9,0xd1da,0xd1db,0xd1dc,0xd1dd,0xd1de, +0xd1df,0xd1e0,0xd1e1,0xd1e2,0xd1e3,0xd1e4,0xd1e5,0xd1e6, +0xd1e7,0xd1e8,0xd1e9,0xd1ea,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd1eb,0xd1ec,0xd1ed,0xd1ee,0xd1ef,0xd1f0, +0xd1f1,0xd1f2,0xd1f3,0xd1f5,0xd1f6,0xd1f7,0xd1f9,0xd1fa, +0xd1fb,0xd1fc,0xd1fd,0xd1fe,0xd1ff,0xd200,0xd201,0xd202, +0xd203,0xd204,0xd205,0xd206,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd208,0xd20a,0xd20b,0xd20c,0xd20d,0xd20e, +0xd20f,0xd211,0xd212,0xd213,0xd214,0xd215,0xd216,0xd217, +0xd218,0xd219,0xd21a,0xd21b,0xd21c,0xd21d,0xd21e,0xd21f, +0xd220,0xd221,0xd222,0xd223,0xd224,0xd225,0xd226,0xd227, +0xd228,0xd229,0xb96b,0xb96d,0xb974,0xb975,0xb978,0xb97c, +0xb984,0xb985,0xb987,0xb989,0xb98a,0xb98d,0xb98e,0xb9ac, +0xb9ad,0xb9b0,0xb9b4,0xb9bc,0xb9bd,0xb9bf,0xb9c1,0xb9c8, +0xb9c9,0xb9cc,0xb9ce,0xb9cf,0xb9d0,0xb9d1,0xb9d2,0xb9d8, +0xb9d9,0xb9db,0xb9dd,0xb9de,0xb9e1,0xb9e3,0xb9e4,0xb9e5, +0xb9e8,0xb9ec,0xb9f4,0xb9f5,0xb9f7,0xb9f8,0xb9f9,0xb9fa, +0xba00,0xba01,0xba08,0xba15,0xba38,0xba39,0xba3c,0xba40, +0xba42,0xba48,0xba49,0xba4b,0xba4d,0xba4e,0xba53,0xba54, +0xba55,0xba58,0xba5c,0xba64,0xba65,0xba67,0xba68,0xba69, +0xba70,0xba71,0xba74,0xba78,0xba83,0xba84,0xba85,0xba87, +0xba8c,0xbaa8,0xbaa9,0xbaab,0xbaac,0xbab0,0xbab2,0xbab8, +0xbab9,0xbabb,0xbabd,0xbac4,0xbac8,0xbad8,0xbad9,0xbafc, +0xd22a,0xd22b,0xd22e,0xd22f,0xd231,0xd232,0xd233,0xd235, +0xd236,0xd237,0xd238,0xd239,0xd23a,0xd23b,0xd23e,0xd240, +0xd242,0xd243,0xd244,0xd245,0xd246,0xd247,0xd249,0xd24a, +0xd24b,0xd24c,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd24d,0xd24e,0xd24f,0xd250,0xd251,0xd252,0xd253,0xd254, +0xd255,0xd256,0xd257,0xd258,0xd259,0xd25a,0xd25b,0xd25d, +0xd25e,0xd25f,0xd260,0xd261,0xd262,0xd263,0xd265,0xd266, +0xd267,0xd268,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd269,0xd26a,0xd26b,0xd26c,0xd26d,0xd26e,0xd26f,0xd270, +0xd271,0xd272,0xd273,0xd274,0xd275,0xd276,0xd277,0xd278, +0xd279,0xd27a,0xd27b,0xd27c,0xd27d,0xd27e,0xd27f,0xd282, +0xd283,0xd285,0xd286,0xd287,0xd289,0xd28a,0xd28b,0xd28c, +0xbb00,0xbb04,0xbb0d,0xbb0f,0xbb11,0xbb18,0xbb1c,0xbb20, +0xbb29,0xbb2b,0xbb34,0xbb35,0xbb36,0xbb38,0xbb3b,0xbb3c, +0xbb3d,0xbb3e,0xbb44,0xbb45,0xbb47,0xbb49,0xbb4d,0xbb4f, +0xbb50,0xbb54,0xbb58,0xbb61,0xbb63,0xbb6c,0xbb88,0xbb8c, +0xbb90,0xbba4,0xbba8,0xbbac,0xbbb4,0xbbb7,0xbbc0,0xbbc4, +0xbbc8,0xbbd0,0xbbd3,0xbbf8,0xbbf9,0xbbfc,0xbbff,0xbc00, +0xbc02,0xbc08,0xbc09,0xbc0b,0xbc0c,0xbc0d,0xbc0f,0xbc11, +0xbc14,0xbc15,0xbc16,0xbc17,0xbc18,0xbc1b,0xbc1c,0xbc1d, +0xbc1e,0xbc1f,0xbc24,0xbc25,0xbc27,0xbc29,0xbc2d,0xbc30, +0xbc31,0xbc34,0xbc38,0xbc40,0xbc41,0xbc43,0xbc44,0xbc45, +0xbc49,0xbc4c,0xbc4d,0xbc50,0xbc5d,0xbc84,0xbc85,0xbc88, +0xbc8b,0xbc8c,0xbc8e,0xbc94,0xbc95,0xbc97,0xd28d,0xd28e, +0xd28f,0xd292,0xd293,0xd294,0xd296,0xd297,0xd298,0xd299, +0xd29a,0xd29b,0xd29d,0xd29e,0xd29f,0xd2a1,0xd2a2,0xd2a3, +0xd2a5,0xd2a6,0xd2a7,0xd2a8,0xd2a9,0xd2aa,0xd2ab,0xd2ad, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd2ae,0xd2af, +0xd2b0,0xd2b2,0xd2b3,0xd2b4,0xd2b5,0xd2b6,0xd2b7,0xd2ba, +0xd2bb,0xd2bd,0xd2be,0xd2c1,0xd2c3,0xd2c4,0xd2c5,0xd2c6, +0xd2c7,0xd2ca,0xd2cc,0xd2cd,0xd2ce,0xd2cf,0xd2d0,0xd2d1, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd2d2,0xd2d3, +0xd2d5,0xd2d6,0xd2d7,0xd2d9,0xd2da,0xd2db,0xd2dd,0xd2de, +0xd2df,0xd2e0,0xd2e1,0xd2e2,0xd2e3,0xd2e6,0xd2e7,0xd2e8, +0xd2e9,0xd2ea,0xd2eb,0xd2ec,0xd2ed,0xd2ee,0xd2ef,0xd2f2, +0xd2f3,0xd2f5,0xd2f6,0xd2f7,0xd2f9,0xd2fa,0xbc99,0xbc9a, +0xbca0,0xbca1,0xbca4,0xbca7,0xbca8,0xbcb0,0xbcb1,0xbcb3, +0xbcb4,0xbcb5,0xbcbc,0xbcbd,0xbcc0,0xbcc4,0xbccd,0xbccf, +0xbcd0,0xbcd1,0xbcd5,0xbcd8,0xbcdc,0xbcf4,0xbcf5,0xbcf6, +0xbcf8,0xbcfc,0xbd04,0xbd05,0xbd07,0xbd09,0xbd10,0xbd14, +0xbd24,0xbd2c,0xbd40,0xbd48,0xbd49,0xbd4c,0xbd50,0xbd58, +0xbd59,0xbd64,0xbd68,0xbd80,0xbd81,0xbd84,0xbd87,0xbd88, +0xbd89,0xbd8a,0xbd90,0xbd91,0xbd93,0xbd95,0xbd99,0xbd9a, +0xbd9c,0xbda4,0xbdb0,0xbdb8,0xbdd4,0xbdd5,0xbdd8,0xbddc, +0xbde9,0xbdf0,0xbdf4,0xbdf8,0xbe00,0xbe03,0xbe05,0xbe0c, +0xbe0d,0xbe10,0xbe14,0xbe1c,0xbe1d,0xbe1f,0xbe44,0xbe45, +0xbe48,0xbe4c,0xbe4e,0xbe54,0xbe55,0xbe57,0xbe59,0xbe5a, +0xbe5b,0xbe60,0xbe61,0xbe64,0xd2fb,0xd2fc,0xd2fd,0xd2fe, +0xd2ff,0xd302,0xd304,0xd306,0xd307,0xd308,0xd309,0xd30a, +0xd30b,0xd30f,0xd311,0xd312,0xd313,0xd315,0xd317,0xd318, +0xd319,0xd31a,0xd31b,0xd31e,0xd322,0xd323,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd324,0xd326,0xd327,0xd32a, +0xd32b,0xd32d,0xd32e,0xd32f,0xd331,0xd332,0xd333,0xd334, +0xd335,0xd336,0xd337,0xd33a,0xd33e,0xd33f,0xd340,0xd341, +0xd342,0xd343,0xd346,0xd347,0xd348,0xd349,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd34a,0xd34b,0xd34c,0xd34d, +0xd34e,0xd34f,0xd350,0xd351,0xd352,0xd353,0xd354,0xd355, +0xd356,0xd357,0xd358,0xd359,0xd35a,0xd35b,0xd35c,0xd35d, +0xd35e,0xd35f,0xd360,0xd361,0xd362,0xd363,0xd364,0xd365, +0xd366,0xd367,0xd368,0xd369,0xbe68,0xbe6a,0xbe70,0xbe71, +0xbe73,0xbe74,0xbe75,0xbe7b,0xbe7c,0xbe7d,0xbe80,0xbe84, +0xbe8c,0xbe8d,0xbe8f,0xbe90,0xbe91,0xbe98,0xbe99,0xbea8, +0xbed0,0xbed1,0xbed4,0xbed7,0xbed8,0xbee0,0xbee3,0xbee4, +0xbee5,0xbeec,0xbf01,0xbf08,0xbf09,0xbf18,0xbf19,0xbf1b, +0xbf1c,0xbf1d,0xbf40,0xbf41,0xbf44,0xbf48,0xbf50,0xbf51, +0xbf55,0xbf94,0xbfb0,0xbfc5,0xbfcc,0xbfcd,0xbfd0,0xbfd4, +0xbfdc,0xbfdf,0xbfe1,0xc03c,0xc051,0xc058,0xc05c,0xc060, +0xc068,0xc069,0xc090,0xc091,0xc094,0xc098,0xc0a0,0xc0a1, +0xc0a3,0xc0a5,0xc0ac,0xc0ad,0xc0af,0xc0b0,0xc0b3,0xc0b4, +0xc0b5,0xc0b6,0xc0bc,0xc0bd,0xc0bf,0xc0c0,0xc0c1,0xc0c5, +0xc0c8,0xc0c9,0xc0cc,0xc0d0,0xc0d8,0xc0d9,0xc0db,0xc0dc, +0xc0dd,0xc0e4,0xd36a,0xd36b,0xd36c,0xd36d,0xd36e,0xd36f, +0xd370,0xd371,0xd372,0xd373,0xd374,0xd375,0xd376,0xd377, +0xd378,0xd379,0xd37a,0xd37b,0xd37e,0xd37f,0xd381,0xd382, +0xd383,0xd385,0xd386,0xd387,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd388,0xd389,0xd38a,0xd38b,0xd38e,0xd392, +0xd393,0xd394,0xd395,0xd396,0xd397,0xd39a,0xd39b,0xd39d, +0xd39e,0xd39f,0xd3a1,0xd3a2,0xd3a3,0xd3a4,0xd3a5,0xd3a6, +0xd3a7,0xd3aa,0xd3ac,0xd3ae,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd3af,0xd3b0,0xd3b1,0xd3b2,0xd3b3,0xd3b5, +0xd3b6,0xd3b7,0xd3b9,0xd3ba,0xd3bb,0xd3bd,0xd3be,0xd3bf, +0xd3c0,0xd3c1,0xd3c2,0xd3c3,0xd3c6,0xd3c7,0xd3ca,0xd3cb, +0xd3cc,0xd3cd,0xd3ce,0xd3cf,0xd3d1,0xd3d2,0xd3d3,0xd3d4, +0xd3d5,0xd3d6,0xc0e5,0xc0e8,0xc0ec,0xc0f4,0xc0f5,0xc0f7, +0xc0f9,0xc100,0xc104,0xc108,0xc110,0xc115,0xc11c,0xc11d, +0xc11e,0xc11f,0xc120,0xc123,0xc124,0xc126,0xc127,0xc12c, +0xc12d,0xc12f,0xc130,0xc131,0xc136,0xc138,0xc139,0xc13c, +0xc140,0xc148,0xc149,0xc14b,0xc14c,0xc14d,0xc154,0xc155, +0xc158,0xc15c,0xc164,0xc165,0xc167,0xc168,0xc169,0xc170, +0xc174,0xc178,0xc185,0xc18c,0xc18d,0xc18e,0xc190,0xc194, +0xc196,0xc19c,0xc19d,0xc19f,0xc1a1,0xc1a5,0xc1a8,0xc1a9, +0xc1ac,0xc1b0,0xc1bd,0xc1c4,0xc1c8,0xc1cc,0xc1d4,0xc1d7, +0xc1d8,0xc1e0,0xc1e4,0xc1e8,0xc1f0,0xc1f1,0xc1f3,0xc1fc, +0xc1fd,0xc200,0xc204,0xc20c,0xc20d,0xc20f,0xc211,0xc218, +0xc219,0xc21c,0xc21f,0xc220,0xc228,0xc229,0xc22b,0xc22d, +0xd3d7,0xd3d9,0xd3da,0xd3db,0xd3dc,0xd3dd,0xd3de,0xd3df, +0xd3e0,0xd3e2,0xd3e4,0xd3e5,0xd3e6,0xd3e7,0xd3e8,0xd3e9, +0xd3ea,0xd3eb,0xd3ee,0xd3ef,0xd3f1,0xd3f2,0xd3f3,0xd3f5, +0xd3f6,0xd3f7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd3f8,0xd3f9,0xd3fa,0xd3fb,0xd3fe,0xd400,0xd402,0xd403, +0xd404,0xd405,0xd406,0xd407,0xd409,0xd40a,0xd40b,0xd40c, +0xd40d,0xd40e,0xd40f,0xd410,0xd411,0xd412,0xd413,0xd414, +0xd415,0xd416,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd417,0xd418,0xd419,0xd41a,0xd41b,0xd41c,0xd41e,0xd41f, +0xd420,0xd421,0xd422,0xd423,0xd424,0xd425,0xd426,0xd427, +0xd428,0xd429,0xd42a,0xd42b,0xd42c,0xd42d,0xd42e,0xd42f, +0xd430,0xd431,0xd432,0xd433,0xd434,0xd435,0xd436,0xd437, +0xc22f,0xc231,0xc232,0xc234,0xc248,0xc250,0xc251,0xc254, +0xc258,0xc260,0xc265,0xc26c,0xc26d,0xc270,0xc274,0xc27c, +0xc27d,0xc27f,0xc281,0xc288,0xc289,0xc290,0xc298,0xc29b, +0xc29d,0xc2a4,0xc2a5,0xc2a8,0xc2ac,0xc2ad,0xc2b4,0xc2b5, +0xc2b7,0xc2b9,0xc2dc,0xc2dd,0xc2e0,0xc2e3,0xc2e4,0xc2eb, +0xc2ec,0xc2ed,0xc2ef,0xc2f1,0xc2f6,0xc2f8,0xc2f9,0xc2fb, +0xc2fc,0xc300,0xc308,0xc309,0xc30c,0xc30d,0xc313,0xc314, +0xc315,0xc318,0xc31c,0xc324,0xc325,0xc328,0xc329,0xc345, +0xc368,0xc369,0xc36c,0xc370,0xc372,0xc378,0xc379,0xc37c, +0xc37d,0xc384,0xc388,0xc38c,0xc3c0,0xc3d8,0xc3d9,0xc3dc, +0xc3df,0xc3e0,0xc3e2,0xc3e8,0xc3e9,0xc3ed,0xc3f4,0xc3f5, +0xc3f8,0xc408,0xc410,0xc424,0xc42c,0xc430,0xd438,0xd439, +0xd43a,0xd43b,0xd43c,0xd43d,0xd43e,0xd43f,0xd441,0xd442, +0xd443,0xd445,0xd446,0xd447,0xd448,0xd449,0xd44a,0xd44b, +0xd44c,0xd44d,0xd44e,0xd44f,0xd450,0xd451,0xd452,0xd453, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd454,0xd455, +0xd456,0xd457,0xd458,0xd459,0xd45a,0xd45b,0xd45d,0xd45e, +0xd45f,0xd461,0xd462,0xd463,0xd465,0xd466,0xd467,0xd468, +0xd469,0xd46a,0xd46b,0xd46c,0xd46e,0xd470,0xd471,0xd472, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd473,0xd474, +0xd475,0xd476,0xd477,0xd47a,0xd47b,0xd47d,0xd47e,0xd481, +0xd483,0xd484,0xd485,0xd486,0xd487,0xd48a,0xd48c,0xd48e, +0xd48f,0xd490,0xd491,0xd492,0xd493,0xd495,0xd496,0xd497, +0xd498,0xd499,0xd49a,0xd49b,0xd49c,0xd49d,0xc434,0xc43c, +0xc43d,0xc448,0xc464,0xc465,0xc468,0xc46c,0xc474,0xc475, +0xc479,0xc480,0xc494,0xc49c,0xc4b8,0xc4bc,0xc4e9,0xc4f0, +0xc4f1,0xc4f4,0xc4f8,0xc4fa,0xc4ff,0xc500,0xc501,0xc50c, +0xc510,0xc514,0xc51c,0xc528,0xc529,0xc52c,0xc530,0xc538, +0xc539,0xc53b,0xc53d,0xc544,0xc545,0xc548,0xc549,0xc54a, +0xc54c,0xc54d,0xc54e,0xc553,0xc554,0xc555,0xc557,0xc558, +0xc559,0xc55d,0xc55e,0xc560,0xc561,0xc564,0xc568,0xc570, +0xc571,0xc573,0xc574,0xc575,0xc57c,0xc57d,0xc580,0xc584, +0xc587,0xc58c,0xc58d,0xc58f,0xc591,0xc595,0xc597,0xc598, +0xc59c,0xc5a0,0xc5a9,0xc5b4,0xc5b5,0xc5b8,0xc5b9,0xc5bb, +0xc5bc,0xc5bd,0xc5be,0xc5c4,0xc5c5,0xc5c6,0xc5c7,0xc5c8, +0xc5c9,0xc5ca,0xc5cc,0xc5ce,0xd49e,0xd49f,0xd4a0,0xd4a1, +0xd4a2,0xd4a3,0xd4a4,0xd4a5,0xd4a6,0xd4a7,0xd4a8,0xd4aa, +0xd4ab,0xd4ac,0xd4ad,0xd4ae,0xd4af,0xd4b0,0xd4b1,0xd4b2, +0xd4b3,0xd4b4,0xd4b5,0xd4b6,0xd4b7,0xd4b8,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd4b9,0xd4ba,0xd4bb,0xd4bc, +0xd4bd,0xd4be,0xd4bf,0xd4c0,0xd4c1,0xd4c2,0xd4c3,0xd4c4, +0xd4c5,0xd4c6,0xd4c7,0xd4c8,0xd4c9,0xd4ca,0xd4cb,0xd4cd, +0xd4ce,0xd4cf,0xd4d1,0xd4d2,0xd4d3,0xd4d5,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd4d6,0xd4d7,0xd4d8,0xd4d9, +0xd4da,0xd4db,0xd4dd,0xd4de,0xd4e0,0xd4e1,0xd4e2,0xd4e3, +0xd4e4,0xd4e5,0xd4e6,0xd4e7,0xd4e9,0xd4ea,0xd4eb,0xd4ed, +0xd4ee,0xd4ef,0xd4f1,0xd4f2,0xd4f3,0xd4f4,0xd4f5,0xd4f6, +0xd4f7,0xd4f9,0xd4fa,0xd4fc,0xc5d0,0xc5d1,0xc5d4,0xc5d8, +0xc5e0,0xc5e1,0xc5e3,0xc5e5,0xc5ec,0xc5ed,0xc5ee,0xc5f0, +0xc5f4,0xc5f6,0xc5f7,0xc5fc,0xc5fd,0xc5fe,0xc5ff,0xc600, +0xc601,0xc605,0xc606,0xc607,0xc608,0xc60c,0xc610,0xc618, +0xc619,0xc61b,0xc61c,0xc624,0xc625,0xc628,0xc62c,0xc62d, +0xc62e,0xc630,0xc633,0xc634,0xc635,0xc637,0xc639,0xc63b, +0xc640,0xc641,0xc644,0xc648,0xc650,0xc651,0xc653,0xc654, +0xc655,0xc65c,0xc65d,0xc660,0xc66c,0xc66f,0xc671,0xc678, +0xc679,0xc67c,0xc680,0xc688,0xc689,0xc68b,0xc68d,0xc694, +0xc695,0xc698,0xc69c,0xc6a4,0xc6a5,0xc6a7,0xc6a9,0xc6b0, +0xc6b1,0xc6b4,0xc6b8,0xc6b9,0xc6ba,0xc6c0,0xc6c1,0xc6c3, +0xc6c5,0xc6cc,0xc6cd,0xc6d0,0xc6d4,0xc6dc,0xc6dd,0xc6e0, +0xc6e1,0xc6e8,0xd4fe,0xd4ff,0xd500,0xd501,0xd502,0xd503, +0xd505,0xd506,0xd507,0xd509,0xd50a,0xd50b,0xd50d,0xd50e, +0xd50f,0xd510,0xd511,0xd512,0xd513,0xd516,0xd518,0xd519, +0xd51a,0xd51b,0xd51c,0xd51d,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd51e,0xd51f,0xd520,0xd521,0xd522,0xd523, +0xd524,0xd525,0xd526,0xd527,0xd528,0xd529,0xd52a,0xd52b, +0xd52c,0xd52d,0xd52e,0xd52f,0xd530,0xd531,0xd532,0xd533, +0xd534,0xd535,0xd536,0xd537,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd538,0xd539,0xd53a,0xd53b,0xd53e,0xd53f, +0xd541,0xd542,0xd543,0xd545,0xd546,0xd547,0xd548,0xd549, +0xd54a,0xd54b,0xd54e,0xd550,0xd552,0xd553,0xd554,0xd555, +0xd556,0xd557,0xd55a,0xd55b,0xd55d,0xd55e,0xd55f,0xd561, +0xd562,0xd563,0xc6e9,0xc6ec,0xc6f0,0xc6f8,0xc6f9,0xc6fd, +0xc704,0xc705,0xc708,0xc70c,0xc714,0xc715,0xc717,0xc719, +0xc720,0xc721,0xc724,0xc728,0xc730,0xc731,0xc733,0xc735, +0xc737,0xc73c,0xc73d,0xc740,0xc744,0xc74a,0xc74c,0xc74d, +0xc74f,0xc751,0xc752,0xc753,0xc754,0xc755,0xc756,0xc757, +0xc758,0xc75c,0xc760,0xc768,0xc76b,0xc774,0xc775,0xc778, +0xc77c,0xc77d,0xc77e,0xc783,0xc784,0xc785,0xc787,0xc788, +0xc789,0xc78a,0xc78e,0xc790,0xc791,0xc794,0xc796,0xc797, +0xc798,0xc79a,0xc7a0,0xc7a1,0xc7a3,0xc7a4,0xc7a5,0xc7a6, +0xc7ac,0xc7ad,0xc7b0,0xc7b4,0xc7bc,0xc7bd,0xc7bf,0xc7c0, +0xc7c1,0xc7c8,0xc7c9,0xc7cc,0xc7ce,0xc7d0,0xc7d8,0xc7dd, +0xc7e4,0xc7e8,0xc7ec,0xc800,0xc801,0xc804,0xc808,0xc80a, +0xd564,0xd566,0xd567,0xd56a,0xd56c,0xd56e,0xd56f,0xd570, +0xd571,0xd572,0xd573,0xd576,0xd577,0xd579,0xd57a,0xd57b, +0xd57d,0xd57e,0xd57f,0xd580,0xd581,0xd582,0xd583,0xd586, +0xd58a,0xd58b,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd58c,0xd58d,0xd58e,0xd58f,0xd591,0xd592,0xd593,0xd594, +0xd595,0xd596,0xd597,0xd598,0xd599,0xd59a,0xd59b,0xd59c, +0xd59d,0xd59e,0xd59f,0xd5a0,0xd5a1,0xd5a2,0xd5a3,0xd5a4, +0xd5a6,0xd5a7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd5a8,0xd5a9,0xd5aa,0xd5ab,0xd5ac,0xd5ad,0xd5ae,0xd5af, +0xd5b0,0xd5b1,0xd5b2,0xd5b3,0xd5b4,0xd5b5,0xd5b6,0xd5b7, +0xd5b8,0xd5b9,0xd5ba,0xd5bb,0xd5bc,0xd5bd,0xd5be,0xd5bf, +0xd5c0,0xd5c1,0xd5c2,0xd5c3,0xd5c4,0xd5c5,0xd5c6,0xd5c7, +0xc810,0xc811,0xc813,0xc815,0xc816,0xc81c,0xc81d,0xc820, +0xc824,0xc82c,0xc82d,0xc82f,0xc831,0xc838,0xc83c,0xc840, +0xc848,0xc849,0xc84c,0xc84d,0xc854,0xc870,0xc871,0xc874, +0xc878,0xc87a,0xc880,0xc881,0xc883,0xc885,0xc886,0xc887, +0xc88b,0xc88c,0xc88d,0xc894,0xc89d,0xc89f,0xc8a1,0xc8a8, +0xc8bc,0xc8bd,0xc8c4,0xc8c8,0xc8cc,0xc8d4,0xc8d5,0xc8d7, +0xc8d9,0xc8e0,0xc8e1,0xc8e4,0xc8f5,0xc8fc,0xc8fd,0xc900, +0xc904,0xc905,0xc906,0xc90c,0xc90d,0xc90f,0xc911,0xc918, +0xc92c,0xc934,0xc950,0xc951,0xc954,0xc958,0xc960,0xc961, +0xc963,0xc96c,0xc970,0xc974,0xc97c,0xc988,0xc989,0xc98c, +0xc990,0xc998,0xc999,0xc99b,0xc99d,0xc9c0,0xc9c1,0xc9c4, +0xc9c7,0xc9c8,0xc9ca,0xc9d0,0xc9d1,0xc9d3,0xd5ca,0xd5cb, +0xd5cd,0xd5ce,0xd5cf,0xd5d1,0xd5d3,0xd5d4,0xd5d5,0xd5d6, +0xd5d7,0xd5da,0xd5dc,0xd5de,0xd5df,0xd5e0,0xd5e1,0xd5e2, +0xd5e3,0xd5e6,0xd5e7,0xd5e9,0xd5ea,0xd5eb,0xd5ed,0xd5ee, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5ef,0xd5f0, +0xd5f1,0xd5f2,0xd5f3,0xd5f6,0xd5f8,0xd5fa,0xd5fb,0xd5fc, +0xd5fd,0xd5fe,0xd5ff,0xd602,0xd603,0xd605,0xd606,0xd607, +0xd609,0xd60a,0xd60b,0xd60c,0xd60d,0xd60e,0xd60f,0xd612, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd616,0xd617, +0xd618,0xd619,0xd61a,0xd61b,0xd61d,0xd61e,0xd61f,0xd621, +0xd622,0xd623,0xd625,0xd626,0xd627,0xd628,0xd629,0xd62a, +0xd62b,0xd62c,0xd62e,0xd62f,0xd630,0xd631,0xd632,0xd633, +0xd634,0xd635,0xd636,0xd637,0xd63a,0xd63b,0xc9d5,0xc9d6, +0xc9d9,0xc9da,0xc9dc,0xc9dd,0xc9e0,0xc9e2,0xc9e4,0xc9e7, +0xc9ec,0xc9ed,0xc9ef,0xc9f0,0xc9f1,0xc9f8,0xc9f9,0xc9fc, +0xca00,0xca08,0xca09,0xca0b,0xca0c,0xca0d,0xca14,0xca18, +0xca29,0xca4c,0xca4d,0xca50,0xca54,0xca5c,0xca5d,0xca5f, +0xca60,0xca61,0xca68,0xca7d,0xca84,0xca98,0xcabc,0xcabd, +0xcac0,0xcac4,0xcacc,0xcacd,0xcacf,0xcad1,0xcad3,0xcad8, +0xcad9,0xcae0,0xcaec,0xcaf4,0xcb08,0xcb10,0xcb14,0xcb18, +0xcb20,0xcb21,0xcb41,0xcb48,0xcb49,0xcb4c,0xcb50,0xcb58, +0xcb59,0xcb5d,0xcb64,0xcb78,0xcb79,0xcb9c,0xcbb8,0xcbd4, +0xcbe4,0xcbe7,0xcbe9,0xcc0c,0xcc0d,0xcc10,0xcc14,0xcc1c, +0xcc1d,0xcc21,0xcc22,0xcc27,0xcc28,0xcc29,0xcc2c,0xcc2e, +0xcc30,0xcc38,0xcc39,0xcc3b,0xd63d,0xd63e,0xd63f,0xd641, +0xd642,0xd643,0xd644,0xd646,0xd647,0xd64a,0xd64c,0xd64e, +0xd64f,0xd650,0xd652,0xd653,0xd656,0xd657,0xd659,0xd65a, +0xd65b,0xd65d,0xd65e,0xd65f,0xd660,0xd661,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd662,0xd663,0xd664,0xd665, +0xd666,0xd668,0xd66a,0xd66b,0xd66c,0xd66d,0xd66e,0xd66f, +0xd672,0xd673,0xd675,0xd676,0xd677,0xd678,0xd679,0xd67a, +0xd67b,0xd67c,0xd67d,0xd67e,0xd67f,0xd680,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd681,0xd682,0xd684,0xd686, +0xd687,0xd688,0xd689,0xd68a,0xd68b,0xd68e,0xd68f,0xd691, +0xd692,0xd693,0xd695,0xd696,0xd697,0xd698,0xd699,0xd69a, +0xd69b,0xd69c,0xd69e,0xd6a0,0xd6a2,0xd6a3,0xd6a4,0xd6a5, +0xd6a6,0xd6a7,0xd6a9,0xd6aa,0xcc3c,0xcc3d,0xcc3e,0xcc44, +0xcc45,0xcc48,0xcc4c,0xcc54,0xcc55,0xcc57,0xcc58,0xcc59, +0xcc60,0xcc64,0xcc66,0xcc68,0xcc70,0xcc75,0xcc98,0xcc99, +0xcc9c,0xcca0,0xcca8,0xcca9,0xccab,0xccac,0xccad,0xccb4, +0xccb5,0xccb8,0xccbc,0xccc4,0xccc5,0xccc7,0xccc9,0xccd0, +0xccd4,0xcce4,0xccec,0xccf0,0xcd01,0xcd08,0xcd09,0xcd0c, +0xcd10,0xcd18,0xcd19,0xcd1b,0xcd1d,0xcd24,0xcd28,0xcd2c, +0xcd39,0xcd5c,0xcd60,0xcd64,0xcd6c,0xcd6d,0xcd6f,0xcd71, +0xcd78,0xcd88,0xcd94,0xcd95,0xcd98,0xcd9c,0xcda4,0xcda5, +0xcda7,0xcda9,0xcdb0,0xcdc4,0xcdcc,0xcdd0,0xcde8,0xcdec, +0xcdf0,0xcdf8,0xcdf9,0xcdfb,0xcdfd,0xce04,0xce08,0xce0c, +0xce14,0xce19,0xce20,0xce21,0xce24,0xce28,0xce30,0xce31, +0xce33,0xce35,0xd6ab,0xd6ad,0xd6ae,0xd6af,0xd6b1,0xd6b2, +0xd6b3,0xd6b4,0xd6b5,0xd6b6,0xd6b7,0xd6b8,0xd6ba,0xd6bc, +0xd6bd,0xd6be,0xd6bf,0xd6c0,0xd6c1,0xd6c2,0xd6c3,0xd6c6, +0xd6c7,0xd6c9,0xd6ca,0xd6cb,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd6cd,0xd6ce,0xd6cf,0xd6d0,0xd6d2,0xd6d3, +0xd6d5,0xd6d6,0xd6d8,0xd6da,0xd6db,0xd6dc,0xd6dd,0xd6de, +0xd6df,0xd6e1,0xd6e2,0xd6e3,0xd6e5,0xd6e6,0xd6e7,0xd6e9, +0xd6ea,0xd6eb,0xd6ec,0xd6ed,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd6ee,0xd6ef,0xd6f1,0xd6f2,0xd6f3,0xd6f4, +0xd6f6,0xd6f7,0xd6f8,0xd6f9,0xd6fa,0xd6fb,0xd6fe,0xd6ff, +0xd701,0xd702,0xd703,0xd705,0xd706,0xd707,0xd708,0xd709, +0xd70a,0xd70b,0xd70c,0xd70d,0xd70e,0xd70f,0xd710,0xd712, +0xd713,0xd714,0xce58,0xce59,0xce5c,0xce5f,0xce60,0xce61, +0xce68,0xce69,0xce6b,0xce6d,0xce74,0xce75,0xce78,0xce7c, +0xce84,0xce85,0xce87,0xce89,0xce90,0xce91,0xce94,0xce98, +0xcea0,0xcea1,0xcea3,0xcea4,0xcea5,0xceac,0xcead,0xcec1, +0xcee4,0xcee5,0xcee8,0xceeb,0xceec,0xcef4,0xcef5,0xcef7, +0xcef8,0xcef9,0xcf00,0xcf01,0xcf04,0xcf08,0xcf10,0xcf11, +0xcf13,0xcf15,0xcf1c,0xcf20,0xcf24,0xcf2c,0xcf2d,0xcf2f, +0xcf30,0xcf31,0xcf38,0xcf54,0xcf55,0xcf58,0xcf5c,0xcf64, +0xcf65,0xcf67,0xcf69,0xcf70,0xcf71,0xcf74,0xcf78,0xcf80, +0xcf85,0xcf8c,0xcfa1,0xcfa8,0xcfb0,0xcfc4,0xcfe0,0xcfe1, +0xcfe4,0xcfe8,0xcff0,0xcff1,0xcff3,0xcff5,0xcffc,0xd000, +0xd004,0xd011,0xd018,0xd02d,0xd034,0xd035,0xd038,0xd03c, +0xd715,0xd716,0xd717,0xd71a,0xd71b,0xd71d,0xd71e,0xd71f, +0xd721,0xd722,0xd723,0xd724,0xd725,0xd726,0xd727,0xd72a, +0xd72c,0xd72e,0xd72f,0xd730,0xd731,0xd732,0xd733,0xd736, +0xd737,0xd739,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd73a,0xd73b,0xd73d,0xd73e,0xd73f,0xd740,0xd741,0xd742, +0xd743,0xd745,0xd746,0xd748,0xd74a,0xd74b,0xd74c,0xd74d, +0xd74e,0xd74f,0xd752,0xd753,0xd755,0xd75a,0xd75b,0xd75c, +0xd75d,0xd75e,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd75f,0xd762,0xd764,0xd766,0xd767,0xd768,0xd76a,0xd76b, +0xd76d,0xd76e,0xd76f,0xd771,0xd772,0xd773,0xd775,0xd776, +0xd777,0xd778,0xd779,0xd77a,0xd77b,0xd77e,0xd77f,0xd780, +0xd782,0xd783,0xd784,0xd785,0xd786,0xd787,0xd78a,0xd78b, +0xd044,0xd045,0xd047,0xd049,0xd050,0xd054,0xd058,0xd060, +0xd06c,0xd06d,0xd070,0xd074,0xd07c,0xd07d,0xd081,0xd0a4, +0xd0a5,0xd0a8,0xd0ac,0xd0b4,0xd0b5,0xd0b7,0xd0b9,0xd0c0, +0xd0c1,0xd0c4,0xd0c8,0xd0c9,0xd0d0,0xd0d1,0xd0d3,0xd0d4, +0xd0d5,0xd0dc,0xd0dd,0xd0e0,0xd0e4,0xd0ec,0xd0ed,0xd0ef, +0xd0f0,0xd0f1,0xd0f8,0xd10d,0xd130,0xd131,0xd134,0xd138, +0xd13a,0xd140,0xd141,0xd143,0xd144,0xd145,0xd14c,0xd14d, +0xd150,0xd154,0xd15c,0xd15d,0xd15f,0xd161,0xd168,0xd16c, +0xd17c,0xd184,0xd188,0xd1a0,0xd1a1,0xd1a4,0xd1a8,0xd1b0, +0xd1b1,0xd1b3,0xd1b5,0xd1ba,0xd1bc,0xd1c0,0xd1d8,0xd1f4, +0xd1f8,0xd207,0xd209,0xd210,0xd22c,0xd22d,0xd230,0xd234, +0xd23c,0xd23d,0xd23f,0xd241,0xd248,0xd25c,0xd78d,0xd78e, +0xd78f,0xd791,0xd792,0xd793,0xd794,0xd795,0xd796,0xd797, +0xd79a,0xd79c,0xd79e,0xd79f,0xd7a0,0xd7a1,0xd7a2,0xd7a3, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd264,0xd280, +0xd281,0xd284,0xd288,0xd290,0xd291,0xd295,0xd29c,0xd2a0, +0xd2a4,0xd2ac,0xd2b1,0xd2b8,0xd2b9,0xd2bc,0xd2bf,0xd2c0, +0xd2c2,0xd2c8,0xd2c9,0xd2cb,0xd2d4,0xd2d8,0xd2dc,0xd2e4, +0xd2e5,0xd2f0,0xd2f1,0xd2f4,0xd2f8,0xd300,0xd301,0xd303, +0xd305,0xd30c,0xd30d,0xd30e,0xd310,0xd314,0xd316,0xd31c, +0xd31d,0xd31f,0xd320,0xd321,0xd325,0xd328,0xd329,0xd32c, +0xd330,0xd338,0xd339,0xd33b,0xd33c,0xd33d,0xd344,0xd345, +0xd37c,0xd37d,0xd380,0xd384,0xd38c,0xd38d,0xd38f,0xd390, +0xd391,0xd398,0xd399,0xd39c,0xd3a0,0xd3a8,0xd3a9,0xd3ab, +0xd3ad,0xd3b4,0xd3b8,0xd3bc,0xd3c4,0xd3c5,0xd3c8,0xd3c9, +0xd3d0,0xd3d8,0xd3e1,0xd3e3,0xd3ec,0xd3ed,0xd3f0,0xd3f4, +0xd3fc,0xd3fd,0xd3ff,0xd401}; + +const int uhc2_ucs_table_size = (sizeof(uhc2_ucs_table)/sizeof(unsigned short)); + +const unsigned short uhc3_ucs_table[] = { +0xd408,0xd41d,0xd440,0xd444,0xd45c,0xd460,0xd464,0xd46d, +0xd46f,0xd478,0xd479,0xd47c,0xd47f,0xd480,0xd482,0xd488, +0xd489,0xd48b,0xd48d,0xd494,0xd4a9,0xd4cc,0xd4d0,0xd4d4, +0xd4dc,0xd4df,0xd4e8,0xd4ec,0xd4f0,0xd4f8,0xd4fb,0xd4fd, +0xd504,0xd508,0xd50c,0xd514,0xd515,0xd517,0xd53c,0xd53d, +0xd540,0xd544,0xd54c,0xd54d,0xd54f,0xd551,0xd558,0xd559, +0xd55c,0xd560,0xd565,0xd568,0xd569,0xd56b,0xd56d,0xd574, +0xd575,0xd578,0xd57c,0xd584,0xd585,0xd587,0xd588,0xd589, +0xd590,0xd5a5,0xd5c8,0xd5c9,0xd5cc,0xd5d0,0xd5d2,0xd5d8, +0xd5d9,0xd5db,0xd5dd,0xd5e4,0xd5e5,0xd5e8,0xd5ec,0xd5f4, +0xd5f5,0xd5f7,0xd5f9,0xd600,0xd601,0xd604,0xd608,0xd610, +0xd611,0xd613,0xd614,0xd615,0xd61c,0xd620,0xd624,0xd62d, +0xd638,0xd639,0xd63c,0xd640,0xd645,0xd648,0xd649,0xd64b, +0xd64d,0xd651,0xd654,0xd655,0xd658,0xd65c,0xd667,0xd669, +0xd670,0xd671,0xd674,0xd683,0xd685,0xd68c,0xd68d,0xd690, +0xd694,0xd69d,0xd69f,0xd6a1,0xd6a8,0xd6ac,0xd6b0,0xd6b9, +0xd6bb,0xd6c4,0xd6c5,0xd6c8,0xd6cc,0xd6d1,0xd6d4,0xd6d7, +0xd6d9,0xd6e0,0xd6e4,0xd6e8,0xd6f0,0xd6f5,0xd6fc,0xd6fd, +0xd700,0xd704,0xd711,0xd718,0xd719,0xd71c,0xd720,0xd728, +0xd729,0xd72b,0xd72d,0xd734,0xd735,0xd738,0xd73c,0xd744, +0xd747,0xd749,0xd750,0xd751,0xd754,0xd756,0xd757,0xd758, +0xd759,0xd760,0xd761,0xd763,0xd765,0xd769,0xd76c,0xd770, +0xd774,0xd77c,0xd77d,0xd781,0xd788,0xd789,0xd78c,0xd790, +0xd798,0xd799,0xd79b,0xd79d,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x4f3d,0x4f73,0x5047,0x50f9,0x52a0,0x53ef, +0x5475,0x54e5,0x5609,0x5ac1,0x5bb6,0x6687,0x67b6,0x67b7, +0x67ef,0x6b4c,0x73c2,0x75c2,0x7a3c,0x82db,0x8304,0x8857, +0x8888,0x8a36,0x8cc8,0x8dcf,0x8efb,0x8fe6,0x99d5,0x523b, +0x5374,0x5404,0x606a,0x6164,0x6bbc,0x73cf,0x811a,0x89ba, +0x89d2,0x95a3,0x4f83,0x520a,0x58be,0x5978,0x59e6,0x5e72, +0x5e79,0x61c7,0x63c0,0x6746,0x67ec,0x687f,0x6f97,0x764e, +0x770b,0x78f5,0x7a08,0x7aff,0x7c21,0x809d,0x826e,0x8271, +0x8aeb,0x9593,0x4e6b,0x559d,0x66f7,0x6e34,0x78a3,0x7aed, +0x845b,0x8910,0x874e,0x97a8,0x52d8,0x574e,0x582a,0x5d4c, +0x611f,0x61be,0x6221,0x6562,0x67d1,0x6a44,0x6e1b,0x7518, +0x75b3,0x76e3,0x77b0,0x7d3a,0x90af,0x9451,0x9452,0x9f95, +0x5323,0x5cac,0x7532,0x80db,0x9240,0x9598,0x525b,0x5808, +0x59dc,0x5ca1,0x5d17,0x5eb7,0x5f3a,0x5f4a,0x6177,0x6c5f, +0x757a,0x7586,0x7ce0,0x7d73,0x7db1,0x7f8c,0x8154,0x8221, +0x8591,0x8941,0x8b1b,0x92fc,0x964d,0x9c47,0x4ecb,0x4ef7, +0x500b,0x51f1,0x584f,0x6137,0x613e,0x6168,0x6539,0x69ea, +0x6f11,0x75a5,0x7686,0x76d6,0x7b87,0x82a5,0x84cb,0xf900, +0x93a7,0x958b,0x5580,0x5ba2,0x5751,0xf901,0x7cb3,0x7fb9, +0x91b5,0x5028,0x53bb,0x5c45,0x5de8,0x62d2,0x636e,0x64da, +0x64e7,0x6e20,0x70ac,0x795b,0x8ddd,0x8e1e,0xf902,0x907d, +0x9245,0x92f8,0x4e7e,0x4ef6,0x5065,0x5dfe,0x5efa,0x6106, +0x6957,0x8171,0x8654,0x8e47,0x9375,0x9a2b,0x4e5e,0x5091, +0x6770,0x6840,0x5109,0x528d,0x5292,0x6aa2,0x77bc,0x9210, +0x9ed4,0x52ab,0x602f,0x8ff2,0x5048,0x61a9,0x63ed,0x64ca, +0x683c,0x6a84,0x6fc0,0x8188,0x89a1,0x9694,0x5805,0x727d, +0x72ac,0x7504,0x7d79,0x7e6d,0x80a9,0x898b,0x8b74,0x9063, +0x9d51,0x6289,0x6c7a,0x6f54,0x7d50,0x7f3a,0x8a23,0x517c, +0x614a,0x7b9d,0x8b19,0x9257,0x938c,0x4eac,0x4fd3,0x501e, +0x50be,0x5106,0x52c1,0x52cd,0x537f,0x5770,0x5883,0x5e9a, +0x5f91,0x6176,0x61ac,0x64ce,0x656c,0x666f,0x66bb,0x66f4, +0x6897,0x6d87,0x7085,0x70f1,0x749f,0x74a5,0x74ca,0x75d9, +0x786c,0x78ec,0x7adf,0x7af6,0x7d45,0x7d93,0x8015,0x803f, +0x811b,0x8396,0x8b66,0x8f15,0x9015,0x93e1,0x9803,0x9838, +0x9a5a,0x9be8,0x4fc2,0x5553,0x583a,0x5951,0x5b63,0x5c46, +0x60b8,0x6212,0x6842,0x68b0,0x68e8,0x6eaa,0x754c,0x7678, +0x78ce,0x7a3d,0x7cfb,0x7e6b,0x7e7c,0x8a08,0x8aa1,0x8c3f, +0x968e,0x9dc4,0x53e4,0x53e9,0x544a,0x5471,0x56fa,0x59d1, +0x5b64,0x5c3b,0x5eab,0x62f7,0x6537,0x6545,0x6572,0x66a0, +0x67af,0x69c1,0x6cbd,0x75fc,0x7690,0x777e,0x7a3f,0x7f94, +0x8003,0x80a1,0x818f,0x82e6,0x82fd,0x83f0,0x85c1,0x8831, +0x88b4,0x8aa5,0xf903,0x8f9c,0x932e,0x96c7,0x9867,0x9ad8, +0x9f13,0x54ed,0x659b,0x66f2,0x688f,0x7a40,0x8c37,0x9d60, +0x56f0,0x5764,0x5d11,0x6606,0x68b1,0x68cd,0x6efe,0x7428, +0x889e,0x9be4,0x6c68,0xf904,0x9aa8,0x4f9b,0x516c,0x5171, +0x529f,0x5b54,0x5de5,0x6050,0x606d,0x62f1,0x63a7,0x653b, +0x73d9,0x7a7a,0x86a3,0x8ca2,0x978f,0x4e32,0x5be1,0x6208, +0x679c,0x74dc,0x79d1,0x83d3,0x8a87,0x8ab2,0x8de8,0x904e, +0x934b,0x9846,0x5ed3,0x69e8,0x85ff,0x90ed,0xf905,0x51a0, +0x5b98,0x5bec,0x6163,0x68fa,0x6b3e,0x704c,0x742f,0x74d8, +0x7ba1,0x7f50,0x83c5,0x89c0,0x8cab,0x95dc,0x9928,0x522e, +0x605d,0x62ec,0x9002,0x4f8a,0x5149,0x5321,0x58d9,0x5ee3, +0x66e0,0x6d38,0x709a,0x72c2,0x73d6,0x7b50,0x80f1,0x945b, +0x5366,0x639b,0x7f6b,0x4e56,0x5080,0x584a,0x58de,0x602a, +0x6127,0x62d0,0x69d0,0x9b41,0x5b8f,0x7d18,0x80b1,0x8f5f, +0x4ea4,0x50d1,0x54ac,0x55ac,0x5b0c,0x5da0,0x5de7,0x652a, +0x654e,0x6821,0x6a4b,0x72e1,0x768e,0x77ef,0x7d5e,0x7ff9, +0x81a0,0x854e,0x86df,0x8f03,0x8f4e,0x90ca,0x9903,0x9a55, +0x9bab,0x4e18,0x4e45,0x4e5d,0x4ec7,0x4ff1,0x5177,0x52fe, +0x5340,0x53e3,0x53e5,0x548e,0x5614,0x5775,0x57a2,0x5bc7, +0x5d87,0x5ed0,0x61fc,0x62d8,0x6551,0x67b8,0x67e9,0x69cb, +0x6b50,0x6bc6,0x6bec,0x6c42,0x6e9d,0x7078,0x72d7,0x7396, +0x7403,0x77bf,0x77e9,0x7a76,0x7d7f,0x8009,0x81fc,0x8205, +0x820a,0x82df,0x8862,0x8b33,0x8cfc,0x8ec0,0x9011,0x90b1, +0x9264,0x92b6,0x99d2,0x9a45,0x9ce9,0x9dd7,0x9f9c,0x570b, +0x5c40,0x83ca,0x97a0,0x97ab,0x9eb4,0x541b,0x7a98,0x7fa4, +0x88d9,0x8ecd,0x90e1,0x5800,0x5c48,0x6398,0x7a9f,0x5bae, +0x5f13,0x7a79,0x7aae,0x828e,0x8eac,0x5026,0x5238,0x52f8, +0x5377,0x5708,0x62f3,0x6372,0x6b0a,0x6dc3,0x7737,0x53a5, +0x7357,0x8568,0x8e76,0x95d5,0x673a,0x6ac3,0x6f70,0x8a6d, +0x8ecc,0x994b,0xf906,0x6677,0x6b78,0x8cb4,0x9b3c,0xf907, +0x53eb,0x572d,0x594e,0x63c6,0x69fb,0x73ea,0x7845,0x7aba, +0x7ac5,0x7cfe,0x8475,0x898f,0x8d73,0x9035,0x95a8,0x52fb, +0x5747,0x7547,0x7b60,0x83cc,0x921e,0xf908,0x6a58,0x514b, +0x524b,0x5287,0x621f,0x68d8,0x6975,0x9699,0x50c5,0x52a4, +0x52e4,0x61c3,0x65a4,0x6839,0x69ff,0x747e,0x7b4b,0x82b9, +0x83eb,0x89b2,0x8b39,0x8fd1,0x9949,0xf909,0x4eca,0x5997, +0x64d2,0x6611,0x6a8e,0x7434,0x7981,0x79bd,0x82a9,0x887e, +0x887f,0x895f,0xf90a,0x9326,0x4f0b,0x53ca,0x6025,0x6271, +0x6c72,0x7d1a,0x7d66,0x4e98,0x5162,0x77dc,0x80af,0x4f01, +0x4f0e,0x5176,0x5180,0x55dc,0x5668,0x573b,0x57fa,0x57fc, +0x5914,0x5947,0x5993,0x5bc4,0x5c90,0x5d0e,0x5df1,0x5e7e, +0x5fcc,0x6280,0x65d7,0x65e3,0x671e,0x671f,0x675e,0x68cb, +0x68c4,0x6a5f,0x6b3a,0x6c23,0x6c7d,0x6c82,0x6dc7,0x7398, +0x7426,0x742a,0x7482,0x74a3,0x7578,0x757f,0x7881,0x78ef, +0x7941,0x7947,0x7948,0x797a,0x7b95,0x7d00,0x7dba,0x7f88, +0x8006,0x802d,0x808c,0x8a18,0x8b4f,0x8c48,0x8d77,0x9321, +0x9324,0x98e2,0x9951,0x9a0e,0x9a0f,0x9a65,0x9e92,0x7dca, +0x4f76,0x5409,0x62ee,0x6854,0x91d1,0x55ab,0x513a,0xf90b, +0xf90c,0x5a1c,0x61e6,0xf90d,0x62cf,0x62ff,0xf90e,0xf90f, +0xf910,0xf911,0xf912,0xf913,0x90a3,0xf914,0xf915,0xf916, +0xf917,0xf918,0x8afe,0xf919,0xf91a,0xf91b,0xf91c,0x6696, +0xf91d,0x7156,0xf91e,0xf91f,0x96e3,0xf920,0x634f,0x637a, +0x5357,0xf921,0x678f,0x6960,0x6e73,0xf922,0x7537,0xf923, +0xf924,0xf925,0x7d0d,0xf926,0xf927,0x8872,0x56ca,0x5a18, +0xf928,0xf929,0xf92a,0xf92b,0xf92c,0x4e43,0xf92d,0x5167, +0x5948,0x67f0,0x8010,0xf92e,0x5973,0x5e74,0x649a,0x79ca, +0x5ff5,0x606c,0x62c8,0x637b,0x5be7,0x5bd7,0x52aa,0xf92f, +0x5974,0x5f29,0x6012,0xf930,0xf931,0xf932,0x7459,0xf933, +0xf934,0xf935,0xf936,0xf937,0xf938,0x99d1,0xf939,0xf93a, +0xf93b,0xf93c,0xf93d,0xf93e,0xf93f,0xf940,0xf941,0xf942, +0xf943,0x6fc3,0xf944,0xf945,0x81bf,0x8fb2,0x60f1,0xf946, +0xf947,0x8166,0xf948,0xf949,0x5c3f,0xf94a,0xf94b,0xf94c, +0xf94d,0xf94e,0xf94f,0xf950,0xf951,0x5ae9,0x8a25,0x677b, +0x7d10,0xf952,0xf953,0xf954,0xf955,0xf956,0xf957,0x80fd, +0xf958,0xf959,0x5c3c,0x6ce5,0x533f,0x6eba,0x591a,0x8336, +0x4e39,0x4eb6,0x4f46,0x55ae,0x5718,0x58c7,0x5f56,0x65b7, +0x65e6,0x6a80,0x6bb5,0x6e4d,0x77ed,0x7aef,0x7c1e,0x7dde, +0x86cb,0x8892,0x9132,0x935b,0x64bb,0x6fbe,0x737a,0x75b8, +0x9054,0x5556,0x574d,0x61ba,0x64d4,0x66c7,0x6de1,0x6e5b, +0x6f6d,0x6fb9,0x75f0,0x8043,0x81bd,0x8541,0x8983,0x8ac7, +0x8b5a,0x931f,0x6c93,0x7553,0x7b54,0x8e0f,0x905d,0x5510, +0x5802,0x5858,0x5e62,0x6207,0x649e,0x68e0,0x7576,0x7cd6, +0x87b3,0x9ee8,0x4ee3,0x5788,0x576e,0x5927,0x5c0d,0x5cb1, +0x5e36,0x5f85,0x6234,0x64e1,0x73b3,0x81fa,0x888b,0x8cb8, +0x968a,0x9edb,0x5b85,0x5fb7,0x60b3,0x5012,0x5200,0x5230, +0x5716,0x5835,0x5857,0x5c0e,0x5c60,0x5cf6,0x5d8b,0x5ea6, +0x5f92,0x60bc,0x6311,0x6389,0x6417,0x6843,0x68f9,0x6ac2, +0x6dd8,0x6e21,0x6ed4,0x6fe4,0x71fe,0x76dc,0x7779,0x79b1, +0x7a3b,0x8404,0x89a9,0x8ced,0x8df3,0x8e48,0x9003,0x9014, +0x9053,0x90fd,0x934d,0x9676,0x97dc,0x6bd2,0x7006,0x7258, +0x72a2,0x7368,0x7763,0x79bf,0x7be4,0x7e9b,0x8b80,0x58a9, +0x60c7,0x6566,0x65fd,0x66be,0x6c8c,0x711e,0x71c9,0x8c5a, +0x9813,0x4e6d,0x7a81,0x4edd,0x51ac,0x51cd,0x52d5,0x540c, +0x61a7,0x6771,0x6850,0x68df,0x6d1e,0x6f7c,0x75bc,0x77b3, +0x7ae5,0x80f4,0x8463,0x9285,0x515c,0x6597,0x675c,0x6793, +0x75d8,0x7ac7,0x8373,0xf95a,0x8c46,0x9017,0x982d,0x5c6f, +0x81c0,0x829a,0x9041,0x906f,0x920d,0x5f97,0x5d9d,0x6a59, +0x71c8,0x767b,0x7b49,0x85e4,0x8b04,0x9127,0x9a30,0x5587, +0x61f6,0xf95b,0x7669,0x7f85,0x863f,0x87ba,0x88f8,0x908f, +0xf95c,0x6d1b,0x70d9,0x73de,0x7d61,0x843d,0xf95d,0x916a, +0x99f1,0xf95e,0x4e82,0x5375,0x6b04,0x6b12,0x703e,0x721b, +0x862d,0x9e1e,0x524c,0x8fa3,0x5d50,0x64e5,0x652c,0x6b16, +0x6feb,0x7c43,0x7e9c,0x85cd,0x8964,0x89bd,0x62c9,0x81d8, +0x881f,0x5eca,0x6717,0x6d6a,0x72fc,0x7405,0x746f,0x8782, +0x90de,0x4f86,0x5d0d,0x5fa0,0x840a,0x51b7,0x63a0,0x7565, +0x4eae,0x5006,0x5169,0x51c9,0x6881,0x6a11,0x7cae,0x7cb1, +0x7ce7,0x826f,0x8ad2,0x8f1b,0x91cf,0x4fb6,0x5137,0x52f5, +0x5442,0x5eec,0x616e,0x623e,0x65c5,0x6ada,0x6ffe,0x792a, +0x85dc,0x8823,0x95ad,0x9a62,0x9a6a,0x9e97,0x9ece,0x529b, +0x66c6,0x6b77,0x701d,0x792b,0x8f62,0x9742,0x6190,0x6200, +0x6523,0x6f23,0x7149,0x7489,0x7df4,0x806f,0x84ee,0x8f26, +0x9023,0x934a,0x51bd,0x5217,0x52a3,0x6d0c,0x70c8,0x88c2, +0x5ec9,0x6582,0x6bae,0x6fc2,0x7c3e,0x7375,0x4ee4,0x4f36, +0x56f9,0xf95f,0x5cba,0x5dba,0x601c,0x73b2,0x7b2d,0x7f9a, +0x7fce,0x8046,0x901e,0x9234,0x96f6,0x9748,0x9818,0x9f61, +0x4f8b,0x6fa7,0x79ae,0x91b4,0x96b7,0x52de,0xf960,0x6488, +0x64c4,0x6ad3,0x6f5e,0x7018,0x7210,0x76e7,0x8001,0x8606, +0x865c,0x8def,0x8f05,0x9732,0x9b6f,0x9dfa,0x9e75,0x788c, +0x797f,0x7da0,0x83c9,0x9304,0x9e7f,0x9e93,0x8ad6,0x58df, +0x5f04,0x6727,0x7027,0x74cf,0x7c60,0x807e,0x5121,0x7028, +0x7262,0x78ca,0x8cc2,0x8cda,0x8cf4,0x96f7,0x4e86,0x50da, +0x5bee,0x5ed6,0x6599,0x71ce,0x7642,0x77ad,0x804a,0x84fc, +0x907c,0x9b27,0x9f8d,0x58d8,0x5a41,0x5c62,0x6a13,0x6dda, +0x6f0f,0x763b,0x7d2f,0x7e37,0x851e,0x8938,0x93e4,0x964b, +0x5289,0x65d2,0x67f3,0x69b4,0x6d41,0x6e9c,0x700f,0x7409, +0x7460,0x7559,0x7624,0x786b,0x8b2c,0x985e,0x516d,0x622e, +0x9678,0x4f96,0x502b,0x5d19,0x6dea,0x7db8,0x8f2a,0x5f8b, +0x6144,0x6817,0xf961,0x9686,0x52d2,0x808b,0x51dc,0x51cc, +0x695e,0x7a1c,0x7dbe,0x83f1,0x9675,0x4fda,0x5229,0x5398, +0x540f,0x550e,0x5c65,0x60a7,0x674e,0x68a8,0x6d6c,0x7281, +0x72f8,0x7406,0x7483,0xf962,0x75e2,0x7c6c,0x7f79,0x7fb8, +0x8389,0x88cf,0x88e1,0x91cc,0x91d0,0x96e2,0x9bc9,0x541d, +0x6f7e,0x71d0,0x7498,0x85fa,0x8eaa,0x96a3,0x9c57,0x9e9f, +0x6797,0x6dcb,0x7433,0x81e8,0x9716,0x782c,0x7acb,0x7b20, +0x7c92,0x6469,0x746a,0x75f2,0x78bc,0x78e8,0x99ac,0x9b54, +0x9ebb,0x5bde,0x5e55,0x6f20,0x819c,0x83ab,0x9088,0x4e07, +0x534d,0x5a29,0x5dd2,0x5f4e,0x6162,0x633d,0x6669,0x66fc, +0x6eff,0x6f2b,0x7063,0x779e,0x842c,0x8513,0x883b,0x8f13, +0x9945,0x9c3b,0x551c,0x62b9,0x672b,0x6cab,0x8309,0x896a, +0x977a,0x4ea1,0x5984,0x5fd8,0x5fd9,0x671b,0x7db2,0x7f54, +0x8292,0x832b,0x83bd,0x8f1e,0x9099,0x57cb,0x59b9,0x5a92, +0x5bd0,0x6627,0x679a,0x6885,0x6bcf,0x7164,0x7f75,0x8cb7, +0x8ce3,0x9081,0x9b45,0x8108,0x8c8a,0x964c,0x9a40,0x9ea5, +0x5b5f,0x6c13,0x731b,0x76f2,0x76df,0x840c,0x51aa,0x8993, +0x514d,0x5195,0x52c9,0x68c9,0x6c94,0x7704,0x7720,0x7dbf, +0x7dec,0x9762,0x9eb5,0x6ec5,0x8511,0x51a5,0x540d,0x547d, +0x660e,0x669d,0x6927,0x6e9f,0x76bf,0x7791,0x8317,0x84c2, +0x879f,0x9169,0x9298,0x9cf4,0x8882,0x4fae,0x5192,0x52df, +0x59c6,0x5e3d,0x6155,0x6478,0x6479,0x66ae,0x67d0,0x6a21, +0x6bcd,0x6bdb,0x725f,0x7261,0x7441,0x7738,0x77db,0x8017, +0x82bc,0x8305,0x8b00,0x8b28,0x8c8c,0x6728,0x6c90,0x7267, +0x76ee,0x7766,0x7a46,0x9da9,0x6b7f,0x6c92,0x5922,0x6726, +0x8499,0x536f,0x5893,0x5999,0x5edf,0x63cf,0x6634,0x6773, +0x6e3a,0x732b,0x7ad7,0x82d7,0x9328,0x52d9,0x5deb,0x61ae, +0x61cb,0x620a,0x62c7,0x64ab,0x65e0,0x6959,0x6b66,0x6bcb, +0x7121,0x73f7,0x755d,0x7e46,0x821e,0x8302,0x856a,0x8aa3, +0x8cbf,0x9727,0x9d61,0x58a8,0x9ed8,0x5011,0x520e,0x543b, +0x554f,0x6587,0x6c76,0x7d0a,0x7d0b,0x805e,0x868a,0x9580, +0x96ef,0x52ff,0x6c95,0x7269,0x5473,0x5a9a,0x5c3e,0x5d4b, +0x5f4c,0x5fae,0x672a,0x68b6,0x6963,0x6e3c,0x6e44,0x7709, +0x7c73,0x7f8e,0x8587,0x8b0e,0x8ff7,0x9761,0x9ef4,0x5cb7, +0x60b6,0x610d,0x61ab,0x654f,0x65fb,0x65fc,0x6c11,0x6cef, +0x739f,0x73c9,0x7de1,0x9594,0x5bc6,0x871c,0x8b10,0x525d, +0x535a,0x62cd,0x640f,0x64b2,0x6734,0x6a38,0x6cca,0x73c0, +0x749e,0x7b94,0x7c95,0x7e1b,0x818a,0x8236,0x8584,0x8feb, +0x96f9,0x99c1,0x4f34,0x534a,0x53cd,0x53db,0x62cc,0x642c, +0x6500,0x6591,0x69c3,0x6cee,0x6f58,0x73ed,0x7554,0x7622, +0x76e4,0x76fc,0x78d0,0x78fb,0x792c,0x7d46,0x822c,0x87e0, +0x8fd4,0x9812,0x98ef,0x52c3,0x62d4,0x64a5,0x6e24,0x6f51, +0x767c,0x8dcb,0x91b1,0x9262,0x9aee,0x9b43,0x5023,0x508d, +0x574a,0x59a8,0x5c28,0x5e47,0x5f77,0x623f,0x653e,0x65b9, +0x65c1,0x6609,0x678b,0x699c,0x6ec2,0x78c5,0x7d21,0x80aa, +0x8180,0x822b,0x82b3,0x84a1,0x868c,0x8a2a,0x8b17,0x90a6, +0x9632,0x9f90,0x500d,0x4ff3,0xf963,0x57f9,0x5f98,0x62dc, +0x6392,0x676f,0x6e43,0x7119,0x76c3,0x80cc,0x80da,0x88f4, +0x88f5,0x8919,0x8ce0,0x8f29,0x914d,0x966a,0x4f2f,0x4f70, +0x5e1b,0x67cf,0x6822,0x767d,0x767e,0x9b44,0x5e61,0x6a0a, +0x7169,0x71d4,0x756a,0xf964,0x7e41,0x8543,0x85e9,0x98dc, +0x4f10,0x7b4f,0x7f70,0x95a5,0x51e1,0x5e06,0x68b5,0x6c3e, +0x6c4e,0x6cdb,0x72af,0x7bc4,0x8303,0x6cd5,0x743a,0x50fb, +0x5288,0x58c1,0x64d8,0x6a97,0x74a7,0x7656,0x78a7,0x8617, +0x95e2,0x9739,0xf965,0x535e,0x5f01,0x8b8a,0x8fa8,0x8faf, +0x908a,0x5225,0x77a5,0x9c49,0x9f08,0x4e19,0x5002,0x5175, +0x5c5b,0x5e77,0x661e,0x663a,0x67c4,0x68c5,0x70b3,0x7501, +0x75c5,0x79c9,0x7add,0x8f27,0x9920,0x9a08,0x4fdd,0x5821, +0x5831,0x5bf6,0x666e,0x6b65,0x6d11,0x6e7a,0x6f7d,0x73e4, +0x752b,0x83e9,0x88dc,0x8913,0x8b5c,0x8f14,0x4f0f,0x50d5, +0x5310,0x535c,0x5b93,0x5fa9,0x670d,0x798f,0x8179,0x832f, +0x8514,0x8907,0x8986,0x8f39,0x8f3b,0x99a5,0x9c12,0x672c, +0x4e76,0x4ff8,0x5949,0x5c01,0x5cef,0x5cf0,0x6367,0x68d2, +0x70fd,0x71a2,0x742b,0x7e2b,0x84ec,0x8702,0x9022,0x92d2, +0x9cf3,0x4e0d,0x4ed8,0x4fef,0x5085,0x5256,0x526f,0x5426, +0x5490,0x57e0,0x592b,0x5a66,0x5b5a,0x5b75,0x5bcc,0x5e9c, +0xf966,0x6276,0x6577,0x65a7,0x6d6e,0x6ea5,0x7236,0x7b26, +0x7c3f,0x7f36,0x8150,0x8151,0x819a,0x8240,0x8299,0x83a9, +0x8a03,0x8ca0,0x8ce6,0x8cfb,0x8d74,0x8dba,0x90e8,0x91dc, +0x961c,0x9644,0x99d9,0x9ce7,0x5317,0x5206,0x5429,0x5674, +0x58b3,0x5954,0x596e,0x5fff,0x61a4,0x626e,0x6610,0x6c7e, +0x711a,0x76c6,0x7c89,0x7cde,0x7d1b,0x82ac,0x8cc1,0x96f0, +0xf967,0x4f5b,0x5f17,0x5f7f,0x62c2,0x5d29,0x670b,0x68da, +0x787c,0x7e43,0x9d6c,0x4e15,0x5099,0x5315,0x532a,0x5351, +0x5983,0x5a62,0x5e87,0x60b2,0x618a,0x6249,0x6279,0x6590, +0x6787,0x69a7,0x6bd4,0x6bd6,0x6bd7,0x6bd8,0x6cb8,0xf968, +0x7435,0x75fa,0x7812,0x7891,0x79d5,0x79d8,0x7c83,0x7dcb, +0x7fe1,0x80a5,0x813e,0x81c2,0x83f2,0x871a,0x88e8,0x8ab9, +0x8b6c,0x8cbb,0x9119,0x975e,0x98db,0x9f3b,0x56ac,0x5b2a, +0x5f6c,0x658c,0x6ab3,0x6baf,0x6d5c,0x6ff1,0x7015,0x725d, +0x73ad,0x8ca7,0x8cd3,0x983b,0x6191,0x6c37,0x8058,0x9a01, +0x4e4d,0x4e8b,0x4e9b,0x4ed5,0x4f3a,0x4f3c,0x4f7f,0x4fdf, +0x50ff,0x53f2,0x53f8,0x5506,0x55e3,0x56db,0x58eb,0x5962, +0x5a11,0x5beb,0x5bfa,0x5c04,0x5df3,0x5e2b,0x5f99,0x601d, +0x6368,0x659c,0x65af,0x67f6,0x67fb,0x68ad,0x6b7b,0x6c99, +0x6cd7,0x6e23,0x7009,0x7345,0x7802,0x793e,0x7940,0x7960, +0x79c1,0x7be9,0x7d17,0x7d72,0x8086,0x820d,0x838e,0x84d1, +0x86c7,0x88df,0x8a50,0x8a5e,0x8b1d,0x8cdc,0x8d66,0x8fad, +0x90aa,0x98fc,0x99df,0x9e9d,0x524a,0xf969,0x6714,0xf96a, +0x5098,0x522a,0x5c71,0x6563,0x6c55,0x73ca,0x7523,0x759d, +0x7b97,0x849c,0x9178,0x9730,0x4e77,0x6492,0x6bba,0x715e, +0x85a9,0x4e09,0xf96b,0x6749,0x68ee,0x6e17,0x829f,0x8518, +0x886b,0x63f7,0x6f81,0x9212,0x98af,0x4e0a,0x50b7,0x50cf, +0x511f,0x5546,0x55aa,0x5617,0x5b40,0x5c19,0x5ce0,0x5e38, +0x5e8a,0x5ea0,0x5ec2,0x60f3,0x6851,0x6a61,0x6e58,0x723d, +0x7240,0x72c0,0x76f8,0x7965,0x7bb1,0x7fd4,0x88f3,0x89f4, +0x8a73,0x8c61,0x8cde,0x971c,0x585e,0x74bd,0x8cfd,0x55c7, +0xf96c,0x7a61,0x7d22,0x8272,0x7272,0x751f,0x7525,0xf96d, +0x7b19,0x5885,0x58fb,0x5dbc,0x5e8f,0x5eb6,0x5f90,0x6055, +0x6292,0x637f,0x654d,0x6691,0x66d9,0x66f8,0x6816,0x68f2, +0x7280,0x745e,0x7b6e,0x7d6e,0x7dd6,0x7f72,0x80e5,0x8212, +0x85af,0x897f,0x8a93,0x901d,0x92e4,0x9ecd,0x9f20,0x5915, +0x596d,0x5e2d,0x60dc,0x6614,0x6673,0x6790,0x6c50,0x6dc5, +0x6f5f,0x77f3,0x78a9,0x84c6,0x91cb,0x932b,0x4ed9,0x50ca, +0x5148,0x5584,0x5b0b,0x5ba3,0x6247,0x657e,0x65cb,0x6e32, +0x717d,0x7401,0x7444,0x7487,0x74bf,0x766c,0x79aa,0x7dda, +0x7e55,0x7fa8,0x817a,0x81b3,0x8239,0x861a,0x87ec,0x8a75, +0x8de3,0x9078,0x9291,0x9425,0x994d,0x9bae,0x5368,0x5c51, +0x6954,0x6cc4,0x6d29,0x6e2b,0x820c,0x859b,0x893b,0x8a2d, +0x8aaa,0x96ea,0x9f67,0x5261,0x66b9,0x6bb2,0x7e96,0x87fe, +0x8d0d,0x9583,0x965d,0x651d,0x6d89,0x71ee,0xf96e,0x57ce, +0x59d3,0x5bac,0x6027,0x60fa,0x6210,0x661f,0x665f,0x7329, +0x73f9,0x76db,0x7701,0x7b6c,0x8056,0x8072,0x8165,0x8aa0, +0x9192,0x4e16,0x52e2,0x6b72,0x6d17,0x7a05,0x7b39,0x7d30, +0xf96f,0x8cb0,0x53ec,0x562f,0x5851,0x5bb5,0x5c0f,0x5c11, +0x5de2,0x6240,0x6383,0x6414,0x662d,0x68b3,0x6cbc,0x6d88, +0x6eaf,0x701f,0x70a4,0x71d2,0x7526,0x758f,0x758e,0x7619, +0x7b11,0x7be0,0x7c2b,0x7d20,0x7d39,0x852c,0x856d,0x8607, +0x8a34,0x900d,0x9061,0x90b5,0x92b7,0x97f6,0x9a37,0x4fd7, +0x5c6c,0x675f,0x6d91,0x7c9f,0x7e8c,0x8b16,0x8d16,0x901f, +0x5b6b,0x5dfd,0x640d,0x84c0,0x905c,0x98e1,0x7387,0x5b8b, +0x609a,0x677e,0x6dde,0x8a1f,0x8aa6,0x9001,0x980c,0x5237, +0xf970,0x7051,0x788e,0x9396,0x8870,0x91d7,0x4fee,0x53d7, +0x55fd,0x56da,0x5782,0x58fd,0x5ac2,0x5b88,0x5cab,0x5cc0, +0x5e25,0x6101,0x620d,0x624b,0x6388,0x641c,0x6536,0x6578, +0x6a39,0x6b8a,0x6c34,0x6d19,0x6f31,0x71e7,0x72e9,0x7378, +0x7407,0x74b2,0x7626,0x7761,0x79c0,0x7a57,0x7aea,0x7cb9, +0x7d8f,0x7dac,0x7e61,0x7f9e,0x8129,0x8331,0x8490,0x84da, +0x85ea,0x8896,0x8ab0,0x8b90,0x8f38,0x9042,0x9083,0x916c, +0x9296,0x92b9,0x968b,0x96a7,0x96a8,0x96d6,0x9700,0x9808, +0x9996,0x9ad3,0x9b1a,0x53d4,0x587e,0x5919,0x5b70,0x5bbf, +0x6dd1,0x6f5a,0x719f,0x7421,0x74b9,0x8085,0x83fd,0x5de1, +0x5f87,0x5faa,0x6042,0x65ec,0x6812,0x696f,0x6a53,0x6b89, +0x6d35,0x6df3,0x73e3,0x76fe,0x77ac,0x7b4d,0x7d14,0x8123, +0x821c,0x8340,0x84f4,0x8563,0x8a62,0x8ac4,0x9187,0x931e, +0x9806,0x99b4,0x620c,0x8853,0x8ff0,0x9265,0x5d07,0x5d27, +0x5d69,0x745f,0x819d,0x8768,0x6fd5,0x62fe,0x7fd2,0x8936, +0x8972,0x4e1e,0x4e58,0x50e7,0x52dd,0x5347,0x627f,0x6607, +0x7e69,0x8805,0x965e,0x4f8d,0x5319,0x5636,0x59cb,0x5aa4, +0x5c38,0x5c4e,0x5c4d,0x5e02,0x5f11,0x6043,0x65bd,0x662f, +0x6642,0x67be,0x67f4,0x731c,0x77e2,0x793a,0x7fc5,0x8494, +0x84cd,0x8996,0x8a66,0x8a69,0x8ae1,0x8c55,0x8c7a,0x57f4, +0x5bd4,0x5f0f,0x606f,0x62ed,0x690d,0x6b96,0x6e5c,0x7184, +0x7bd2,0x8755,0x8b58,0x8efe,0x98df,0x98fe,0x4f38,0x4f81, +0x4fe1,0x547b,0x5a20,0x5bb8,0x613c,0x65b0,0x6668,0x71fc, +0x7533,0x795e,0x7d33,0x814e,0x81e3,0x8398,0x85aa,0x85ce, +0x8703,0x8a0a,0x8eab,0x8f9b,0xf971,0x8fc5,0x5931,0x5ba4, +0x5be6,0x6089,0x5be9,0x5c0b,0x5fc3,0x6c81,0xf972,0x6df1, +0x700b,0x751a,0x82af,0x8af6,0x4ec0,0x5341,0xf973,0x96d9, +0x6c0f,0x4e9e,0x4fc4,0x5152,0x555e,0x5a25,0x5ce8,0x6211, +0x7259,0x82bd,0x83aa,0x86fe,0x8859,0x8a1d,0x963f,0x96c5, +0x9913,0x9d09,0x9d5d,0x580a,0x5cb3,0x5dbd,0x5e44,0x60e1, +0x6115,0x63e1,0x6a02,0x6e25,0x9102,0x9354,0x984e,0x9c10, +0x9f77,0x5b89,0x5cb8,0x6309,0x664f,0x6848,0x773c,0x96c1, +0x978d,0x9854,0x9b9f,0x65a1,0x8b01,0x8ecb,0x95bc,0x5535, +0x5ca9,0x5dd6,0x5eb5,0x6697,0x764c,0x83f4,0x95c7,0x58d3, +0x62bc,0x72ce,0x9d28,0x4ef0,0x592e,0x600f,0x663b,0x6b83, +0x79e7,0x9d26,0x5393,0x54c0,0x57c3,0x5d16,0x611b,0x66d6, +0x6daf,0x788d,0x827e,0x9698,0x9744,0x5384,0x627c,0x6396, +0x6db2,0x7e0a,0x814b,0x984d,0x6afb,0x7f4c,0x9daf,0x9e1a, +0x4e5f,0x503b,0x51b6,0x591c,0x60f9,0x63f6,0x6930,0x723a, +0x8036,0xf974,0x91ce,0x5f31,0xf975,0xf976,0x7d04,0x82e5, +0x846f,0x84bb,0x85e5,0x8e8d,0xf977,0x4f6f,0xf978,0xf979, +0x58e4,0x5b43,0x6059,0x63da,0x6518,0x656d,0x6698,0xf97a, +0x694a,0x6a23,0x6d0b,0x7001,0x716c,0x75d2,0x760d,0x79b3, +0x7a70,0xf97b,0x7f8a,0xf97c,0x8944,0xf97d,0x8b93,0x91c0, +0x967d,0xf97e,0x990a,0x5704,0x5fa1,0x65bc,0x6f01,0x7600, +0x79a6,0x8a9e,0x99ad,0x9b5a,0x9f6c,0x5104,0x61b6,0x6291, +0x6a8d,0x81c6,0x5043,0x5830,0x5f66,0x7109,0x8a00,0x8afa, +0x5b7c,0x8616,0x4ffa,0x513c,0x56b4,0x5944,0x63a9,0x6df9, +0x5daa,0x696d,0x5186,0x4e88,0x4f59,0xf97f,0xf980,0xf981, +0x5982,0xf982,0xf983,0x6b5f,0x6c5d,0xf984,0x74b5,0x7916, +0xf985,0x8207,0x8245,0x8339,0x8f3f,0x8f5d,0xf986,0x9918, +0xf987,0xf988,0xf989,0x4ea6,0xf98a,0x57df,0x5f79,0x6613, +0xf98b,0xf98c,0x75ab,0x7e79,0x8b6f,0xf98d,0x9006,0x9a5b, +0x56a5,0x5827,0x59f8,0x5a1f,0x5bb4,0xf98e,0x5ef6,0xf98f, +0xf990,0x6350,0x633b,0xf991,0x693d,0x6c87,0x6cbf,0x6d8e, +0x6d93,0x6df5,0x6f14,0xf992,0x70df,0x7136,0x7159,0xf993, +0x71c3,0x71d5,0xf994,0x784f,0x786f,0xf995,0x7b75,0x7de3, +0xf996,0x7e2f,0xf997,0x884d,0x8edf,0xf998,0xf999,0xf99a, +0x925b,0xf99b,0x9cf6,0xf99c,0xf99d,0xf99e,0x6085,0x6d85, +0xf99f,0x71b1,0xf9a0,0xf9a1,0x95b1,0x53ad,0xf9a2,0xf9a3, +0xf9a4,0x67d3,0xf9a5,0x708e,0x7130,0x7430,0x8276,0x82d2, +0xf9a6,0x95bb,0x9ae5,0x9e7d,0x66c4,0xf9a7,0x71c1,0x8449, +0xf9a8,0xf9a9,0x584b,0xf9aa,0xf9ab,0x5db8,0x5f71,0xf9ac, +0x6620,0x668e,0x6979,0x69ae,0x6c38,0x6cf3,0x6e36,0x6f41, +0x6fda,0x701b,0x702f,0x7150,0x71df,0x7370,0xf9ad,0x745b, +0xf9ae,0x74d4,0x76c8,0x7a4e,0x7e93,0xf9af,0xf9b0,0x82f1, +0x8a60,0x8fce,0xf9b1,0x9348,0xf9b2,0x9719,0xf9b3,0xf9b4, +0x4e42,0x502a,0xf9b5,0x5208,0x53e1,0x66f3,0x6c6d,0x6fca, +0x730a,0x777f,0x7a62,0x82ae,0x85dd,0x8602,0xf9b6,0x88d4, +0x8a63,0x8b7d,0x8c6b,0xf9b7,0x92b3,0xf9b8,0x9713,0x9810, +0x4e94,0x4f0d,0x4fc9,0x50b2,0x5348,0x543e,0x5433,0x55da, +0x5862,0x58ba,0x5967,0x5a1b,0x5be4,0x609f,0xf9b9,0x61ca, +0x6556,0x65ff,0x6664,0x68a7,0x6c5a,0x6fb3,0x70cf,0x71ac, +0x7352,0x7b7d,0x8708,0x8aa4,0x9c32,0x9f07,0x5c4b,0x6c83, +0x7344,0x7389,0x923a,0x6eab,0x7465,0x761f,0x7a69,0x7e15, +0x860a,0x5140,0x58c5,0x64c1,0x74ee,0x7515,0x7670,0x7fc1, +0x9095,0x96cd,0x9954,0x6e26,0x74e6,0x7aa9,0x7aaa,0x81e5, +0x86d9,0x8778,0x8a1b,0x5a49,0x5b8c,0x5b9b,0x68a1,0x6900, +0x6d63,0x73a9,0x7413,0x742c,0x7897,0x7de9,0x7feb,0x8118, +0x8155,0x839e,0x8c4c,0x962e,0x9811,0x66f0,0x5f80,0x65fa, +0x6789,0x6c6a,0x738b,0x502d,0x5a03,0x6b6a,0x77ee,0x5916, +0x5d6c,0x5dcd,0x7325,0x754f,0xf9ba,0xf9bb,0x50e5,0x51f9, +0x582f,0x592d,0x5996,0x59da,0x5be5,0xf9bc,0xf9bd,0x5da2, +0x62d7,0x6416,0x6493,0x64fe,0xf9be,0x66dc,0xf9bf,0x6a48, +0xf9c0,0x71ff,0x7464,0xf9c1,0x7a88,0x7aaf,0x7e47,0x7e5e, +0x8000,0x8170,0xf9c2,0x87ef,0x8981,0x8b20,0x9059,0xf9c3, +0x9080,0x9952,0x617e,0x6b32,0x6d74,0x7e1f,0x8925,0x8fb1, +0x4fd1,0x50ad,0x5197,0x52c7,0x57c7,0x5889,0x5bb9,0x5eb8, +0x6142,0x6995,0x6d8c,0x6e67,0x6eb6,0x7194,0x7462,0x7528, +0x752c,0x8073,0x8338,0x84c9,0x8e0a,0x9394,0x93de,0xf9c4, +0x4e8e,0x4f51,0x5076,0x512a,0x53c8,0x53cb,0x53f3,0x5b87, +0x5bd3,0x5c24,0x611a,0x6182,0x65f4,0x725b,0x7397,0x7440, +0x76c2,0x7950,0x7991,0x79b9,0x7d06,0x7fbd,0x828b,0x85d5, +0x865e,0x8fc2,0x9047,0x90f5,0x91ea,0x9685,0x96e8,0x96e9, +0x52d6,0x5f67,0x65ed,0x6631,0x682f,0x715c,0x7a36,0x90c1, +0x980a,0x4e91,0xf9c5,0x6a52,0x6b9e,0x6f90,0x7189,0x8018, +0x82b8,0x8553,0x904b,0x9695,0x96f2,0x97fb,0x851a,0x9b31, +0x4e90,0x718a,0x96c4,0x5143,0x539f,0x54e1,0x5713,0x5712, +0x57a3,0x5a9b,0x5ac4,0x5bc3,0x6028,0x613f,0x63f4,0x6c85, +0x6d39,0x6e72,0x6e90,0x7230,0x733f,0x7457,0x82d1,0x8881, +0x8f45,0x9060,0xf9c6,0x9662,0x9858,0x9d1b,0x6708,0x8d8a, +0x925e,0x4f4d,0x5049,0x50de,0x5371,0x570d,0x59d4,0x5a01, +0x5c09,0x6170,0x6690,0x6e2d,0x7232,0x744b,0x7def,0x80c3, +0x840e,0x8466,0x853f,0x875f,0x885b,0x8918,0x8b02,0x9055, +0x97cb,0x9b4f,0x4e73,0x4f91,0x5112,0x516a,0xf9c7,0x552f, +0x55a9,0x5b7a,0x5ba5,0x5e7c,0x5e7d,0x5ebe,0x60a0,0x60df, +0x6108,0x6109,0x63c4,0x6538,0x6709,0xf9c8,0x67d4,0x67da, +0xf9c9,0x6961,0x6962,0x6cb9,0x6d27,0xf9ca,0x6e38,0xf9cb, +0x6fe1,0x7336,0x7337,0xf9cc,0x745c,0x7531,0xf9cd,0x7652, +0xf9ce,0xf9cf,0x7dad,0x81fe,0x8438,0x88d5,0x8a98,0x8adb, +0x8aed,0x8e30,0x8e42,0x904a,0x903e,0x907a,0x9149,0x91c9, +0x936e,0xf9d0,0xf9d1,0x5809,0xf9d2,0x6bd3,0x8089,0x80b2, +0xf9d3,0xf9d4,0x5141,0x596b,0x5c39,0xf9d5,0xf9d6,0x6f64, +0x73a7,0x80e4,0x8d07,0xf9d7,0x9217,0x958f,0xf9d8,0xf9d9, +0xf9da,0xf9db,0x807f,0x620e,0x701c,0x7d68,0x878d,0xf9dc, +0x57a0,0x6069,0x6147,0x6bb7,0x8abe,0x9280,0x96b1,0x4e59, +0x541f,0x6deb,0x852d,0x9670,0x97f3,0x98ee,0x63d6,0x6ce3, +0x9091,0x51dd,0x61c9,0x81ba,0x9df9,0x4f9d,0x501a,0x5100, +0x5b9c,0x610f,0x61ff,0x64ec,0x6905,0x6bc5,0x7591,0x77e3, +0x7fa9,0x8264,0x858f,0x87fb,0x8863,0x8abc,0x8b70,0x91ab, +0x4e8c,0x4ee5,0x4f0a,0xf9dd,0xf9de,0x5937,0x59e8,0xf9df, +0x5df2,0x5f1b,0x5f5b,0x6021,0xf9e0,0xf9e1,0xf9e2,0xf9e3, +0x723e,0x73e5,0xf9e4,0x7570,0x75cd,0xf9e5,0x79fb,0xf9e6, +0x800c,0x8033,0x8084,0x82e1,0x8351,0xf9e7,0xf9e8,0x8cbd, +0x8cb3,0x9087,0xf9e9,0xf9ea,0x98f4,0x990c,0xf9eb,0xf9ec, +0x7037,0x76ca,0x7fca,0x7fcc,0x7ffc,0x8b1a,0x4eba,0x4ec1, +0x5203,0x5370,0xf9ed,0x54bd,0x56e0,0x59fb,0x5bc5,0x5f15, +0x5fcd,0x6e6e,0xf9ee,0xf9ef,0x7d6a,0x8335,0xf9f0,0x8693, +0x8a8d,0xf9f1,0x976d,0x9777,0xf9f2,0xf9f3,0x4e00,0x4f5a, +0x4f7e,0x58f9,0x65e5,0x6ea2,0x9038,0x93b0,0x99b9,0x4efb, +0x58ec,0x598a,0x59d9,0x6041,0xf9f4,0xf9f5,0x7a14,0xf9f6, +0x834f,0x8cc3,0x5165,0x5344,0xf9f7,0xf9f8,0xf9f9,0x4ecd, +0x5269,0x5b55,0x82bf,0x4ed4,0x523a,0x54a8,0x59c9,0x59ff, +0x5b50,0x5b57,0x5b5c,0x6063,0x6148,0x6ecb,0x7099,0x716e, +0x7386,0x74f7,0x75b5,0x78c1,0x7d2b,0x8005,0x81ea,0x8328, +0x8517,0x85c9,0x8aee,0x8cc7,0x96cc,0x4f5c,0x52fa,0x56bc, +0x65ab,0x6628,0x707c,0x70b8,0x7235,0x7dbd,0x828d,0x914c, +0x96c0,0x9d72,0x5b71,0x68e7,0x6b98,0x6f7a,0x76de,0x5c91, +0x66ab,0x6f5b,0x7bb4,0x7c2a,0x8836,0x96dc,0x4e08,0x4ed7, +0x5320,0x5834,0x58bb,0x58ef,0x596c,0x5c07,0x5e33,0x5e84, +0x5f35,0x638c,0x66b2,0x6756,0x6a1f,0x6aa3,0x6b0c,0x6f3f, +0x7246,0xf9fa,0x7350,0x748b,0x7ae0,0x7ca7,0x8178,0x81df, +0x81e7,0x838a,0x846c,0x8523,0x8594,0x85cf,0x88dd,0x8d13, +0x91ac,0x9577,0x969c,0x518d,0x54c9,0x5728,0x5bb0,0x624d, +0x6750,0x683d,0x6893,0x6e3d,0x6ed3,0x707d,0x7e21,0x88c1, +0x8ca1,0x8f09,0x9f4b,0x9f4e,0x722d,0x7b8f,0x8acd,0x931a, +0x4f47,0x4f4e,0x5132,0x5480,0x59d0,0x5e95,0x62b5,0x6775, +0x696e,0x6a17,0x6cae,0x6e1a,0x72d9,0x732a,0x75bd,0x7bb8, +0x7d35,0x82e7,0x83f9,0x8457,0x85f7,0x8a5b,0x8caf,0x8e87, +0x9019,0x90b8,0x96ce,0x9f5f,0x52e3,0x540a,0x5ae1,0x5bc2, +0x6458,0x6575,0x6ef4,0x72c4,0xf9fb,0x7684,0x7a4d,0x7b1b, +0x7c4d,0x7e3e,0x7fdf,0x837b,0x8b2b,0x8cca,0x8d64,0x8de1, +0x8e5f,0x8fea,0x8ff9,0x9069,0x93d1,0x4f43,0x4f7a,0x50b3, +0x5168,0x5178,0x524d,0x526a,0x5861,0x587c,0x5960,0x5c08, +0x5c55,0x5edb,0x609b,0x6230,0x6813,0x6bbf,0x6c08,0x6fb1, +0x714e,0x7420,0x7530,0x7538,0x7551,0x7672,0x7b4c,0x7b8b, +0x7bad,0x7bc6,0x7e8f,0x8a6e,0x8f3e,0x8f49,0x923f,0x9293, +0x9322,0x942b,0x96fb,0x985a,0x986b,0x991e,0x5207,0x622a, +0x6298,0x6d59,0x7664,0x7aca,0x7bc0,0x7d76,0x5360,0x5cbe, +0x5e97,0x6f38,0x70b9,0x7c98,0x9711,0x9b8e,0x9ede,0x63a5, +0x647a,0x8776,0x4e01,0x4e95,0x4ead,0x505c,0x5075,0x5448, +0x59c3,0x5b9a,0x5e40,0x5ead,0x5ef7,0x5f81,0x60c5,0x633a, +0x653f,0x6574,0x65cc,0x6676,0x6678,0x67fe,0x6968,0x6a89, +0x6b63,0x6c40,0x6dc0,0x6de8,0x6e1f,0x6e5e,0x701e,0x70a1, +0x738e,0x73fd,0x753a,0x775b,0x7887,0x798e,0x7a0b,0x7a7d, +0x7cbe,0x7d8e,0x8247,0x8a02,0x8aea,0x8c9e,0x912d,0x914a, +0x91d8,0x9266,0x92cc,0x9320,0x9706,0x9756,0x975c,0x9802, +0x9f0e,0x5236,0x5291,0x557c,0x5824,0x5e1d,0x5f1f,0x608c, +0x63d0,0x68af,0x6fdf,0x796d,0x7b2c,0x81cd,0x85ba,0x88fd, +0x8af8,0x8e44,0x918d,0x9664,0x969b,0x973d,0x984c,0x9f4a, +0x4fce,0x5146,0x51cb,0x52a9,0x5632,0x5f14,0x5f6b,0x63aa, +0x64cd,0x65e9,0x6641,0x66fa,0x66f9,0x671d,0x689d,0x68d7, +0x69fd,0x6f15,0x6f6e,0x7167,0x71e5,0x722a,0x74aa,0x773a, +0x7956,0x795a,0x79df,0x7a20,0x7a95,0x7c97,0x7cdf,0x7d44, +0x7e70,0x8087,0x85fb,0x86a4,0x8a54,0x8abf,0x8d99,0x8e81, +0x9020,0x906d,0x91e3,0x963b,0x96d5,0x9ce5,0x65cf,0x7c07, +0x8db3,0x93c3,0x5b58,0x5c0a,0x5352,0x62d9,0x731d,0x5027, +0x5b97,0x5f9e,0x60b0,0x616b,0x68d5,0x6dd9,0x742e,0x7a2e, +0x7d42,0x7d9c,0x7e31,0x816b,0x8e2a,0x8e35,0x937e,0x9418, +0x4f50,0x5750,0x5de6,0x5ea7,0x632b,0x7f6a,0x4e3b,0x4f4f, +0x4f8f,0x505a,0x59dd,0x80c4,0x546a,0x5468,0x55fe,0x594f, +0x5b99,0x5dde,0x5eda,0x665d,0x6731,0x67f1,0x682a,0x6ce8, +0x6d32,0x6e4a,0x6f8d,0x70b7,0x73e0,0x7587,0x7c4c,0x7d02, +0x7d2c,0x7da2,0x821f,0x86db,0x8a3b,0x8a85,0x8d70,0x8e8a, +0x8f33,0x9031,0x914e,0x9152,0x9444,0x99d0,0x7af9,0x7ca5, +0x4fca,0x5101,0x51c6,0x57c8,0x5bef,0x5cfb,0x6659,0x6a3d, +0x6d5a,0x6e96,0x6fec,0x710c,0x756f,0x7ae3,0x8822,0x9021, +0x9075,0x96cb,0x99ff,0x8301,0x4e2d,0x4ef2,0x8846,0x91cd, +0x537d,0x6adb,0x696b,0x6c41,0x847a,0x589e,0x618e,0x66fe, +0x62ef,0x70dd,0x7511,0x75c7,0x7e52,0x84b8,0x8b49,0x8d08, +0x4e4b,0x53ea,0x54ab,0x5730,0x5740,0x5fd7,0x6301,0x6307, +0x646f,0x652f,0x65e8,0x667a,0x679d,0x67b3,0x6b62,0x6c60, +0x6c9a,0x6f2c,0x77e5,0x7825,0x7949,0x7957,0x7d19,0x80a2, +0x8102,0x81f3,0x829d,0x82b7,0x8718,0x8a8c,0xf9fc,0x8d04, +0x8dbe,0x9072,0x76f4,0x7a19,0x7a37,0x7e54,0x8077,0x5507, +0x55d4,0x5875,0x632f,0x6422,0x6649,0x664b,0x686d,0x699b, +0x6b84,0x6d25,0x6eb1,0x73cd,0x7468,0x74a1,0x755b,0x75b9, +0x76e1,0x771e,0x778b,0x79e6,0x7e09,0x7e1d,0x81fb,0x852f, +0x8897,0x8a3a,0x8cd1,0x8eeb,0x8fb0,0x9032,0x93ad,0x9663, +0x9673,0x9707,0x4f84,0x53f1,0x59ea,0x5ac9,0x5e19,0x684e, +0x74c6,0x75be,0x79e9,0x7a92,0x81a3,0x86ed,0x8cea,0x8dcc, +0x8fed,0x659f,0x6715,0xf9fd,0x57f7,0x6f57,0x7ddd,0x8f2f, +0x93f6,0x96c6,0x5fb5,0x61f2,0x6f84,0x4e14,0x4f98,0x501f, +0x53c9,0x55df,0x5d6f,0x5dee,0x6b21,0x6b64,0x78cb,0x7b9a, +0xf9fe,0x8e49,0x8eca,0x906e,0x6349,0x643e,0x7740,0x7a84, +0x932f,0x947f,0x9f6a,0x64b0,0x6faf,0x71e6,0x74a8,0x74da, +0x7ac4,0x7c12,0x7e82,0x7cb2,0x7e98,0x8b9a,0x8d0a,0x947d, +0x9910,0x994c,0x5239,0x5bdf,0x64e6,0x672d,0x7d2e,0x50ed, +0x53c3,0x5879,0x6158,0x6159,0x61fa,0x65ac,0x7ad9,0x8b92, +0x8b96,0x5009,0x5021,0x5275,0x5531,0x5a3c,0x5ee0,0x5f70, +0x6134,0x655e,0x660c,0x6636,0x66a2,0x69cd,0x6ec4,0x6f32, +0x7316,0x7621,0x7a93,0x8139,0x8259,0x83d6,0x84bc,0x50b5, +0x57f0,0x5bc0,0x5be8,0x5f69,0x63a1,0x7826,0x7db5,0x83dc, +0x8521,0x91c7,0x91f5,0x518a,0x67f5,0x7b56,0x8cac,0x51c4, +0x59bb,0x60bd,0x8655,0x501c,0xf9ff,0x5254,0x5c3a,0x617d, +0x621a,0x62d3,0x64f2,0x65a5,0x6ecc,0x7620,0x810a,0x8e60, +0x965f,0x96bb,0x4edf,0x5343,0x5598,0x5929,0x5ddd,0x64c5, +0x6cc9,0x6dfa,0x7394,0x7a7f,0x821b,0x85a6,0x8ce4,0x8e10, +0x9077,0x91e7,0x95e1,0x9621,0x97c6,0x51f8,0x54f2,0x5586, +0x5fb9,0x64a4,0x6f88,0x7db4,0x8f1f,0x8f4d,0x9435,0x50c9, +0x5c16,0x6cbe,0x6dfb,0x751b,0x77bb,0x7c3d,0x7c64,0x8a79, +0x8ac2,0x581e,0x59be,0x5e16,0x6377,0x7252,0x758a,0x776b, +0x8adc,0x8cbc,0x8f12,0x5ef3,0x6674,0x6df8,0x807d,0x83c1, +0x8acb,0x9751,0x9bd6,0xfa00,0x5243,0x66ff,0x6d95,0x6eef, +0x7de0,0x8ae6,0x902e,0x905e,0x9ad4,0x521d,0x527f,0x54e8, +0x6194,0x6284,0x62db,0x68a2,0x6912,0x695a,0x6a35,0x7092, +0x7126,0x785d,0x7901,0x790e,0x79d2,0x7a0d,0x8096,0x8278, +0x82d5,0x8349,0x8549,0x8c82,0x8d85,0x9162,0x918b,0x91ae, +0x4fc3,0x56d1,0x71ed,0x77d7,0x8700,0x89f8,0x5bf8,0x5fd6, +0x6751,0x90a8,0x53e2,0x585a,0x5bf5,0x60a4,0x6181,0x6460, +0x7e3d,0x8070,0x8525,0x9283,0x64ae,0x50ac,0x5d14,0x6700, +0x589c,0x62bd,0x63a8,0x690e,0x6978,0x6a1e,0x6e6b,0x76ba, +0x79cb,0x82bb,0x8429,0x8acf,0x8da8,0x8ffd,0x9112,0x914b, +0x919c,0x9310,0x9318,0x939a,0x96db,0x9a36,0x9c0d,0x4e11, +0x755c,0x795d,0x7afa,0x7b51,0x7bc9,0x7e2e,0x84c4,0x8e59, +0x8e74,0x8ef8,0x9010,0x6625,0x693f,0x7443,0x51fa,0x672e, +0x9edc,0x5145,0x5fe0,0x6c96,0x87f2,0x885d,0x8877,0x60b4, +0x81b5,0x8403,0x8d05,0x53d6,0x5439,0x5634,0x5a36,0x5c31, +0x708a,0x7fe0,0x805a,0x8106,0x81ed,0x8da3,0x9189,0x9a5f, +0x9df2,0x5074,0x4ec4,0x53a0,0x60fb,0x6e2c,0x5c64,0x4f88, +0x5024,0x55e4,0x5cd9,0x5e5f,0x6065,0x6894,0x6cbb,0x6dc4, +0x71be,0x75d4,0x75f4,0x7661,0x7a1a,0x7a49,0x7dc7,0x7dfb, +0x7f6e,0x81f4,0x86a9,0x8f1c,0x96c9,0x99b3,0x9f52,0x5247, +0x52c5,0x98ed,0x89aa,0x4e03,0x67d2,0x6f06,0x4fb5,0x5be2, +0x6795,0x6c88,0x6d78,0x741b,0x7827,0x91dd,0x937c,0x87c4, +0x79e4,0x7a31,0x5feb,0x4ed6,0x54a4,0x553e,0x58ae,0x59a5, +0x60f0,0x6253,0x62d6,0x6736,0x6955,0x8235,0x9640,0x99b1, +0x99dd,0x502c,0x5353,0x5544,0x577c,0xfa01,0x6258,0xfa02, +0x64e2,0x666b,0x67dd,0x6fc1,0x6fef,0x7422,0x7438,0x8a17, +0x9438,0x5451,0x5606,0x5766,0x5f48,0x619a,0x6b4e,0x7058, +0x70ad,0x7dbb,0x8a95,0x596a,0x812b,0x63a2,0x7708,0x803d, +0x8caa,0x5854,0x642d,0x69bb,0x5b95,0x5e11,0x6e6f,0xfa03, +0x8569,0x514c,0x53f0,0x592a,0x6020,0x614b,0x6b86,0x6c70, +0x6cf0,0x7b1e,0x80ce,0x82d4,0x8dc6,0x90b0,0x98b1,0xfa04, +0x64c7,0x6fa4,0x6491,0x6504,0x514e,0x5410,0x571f,0x8a0e, +0x615f,0x6876,0xfa05,0x75db,0x7b52,0x7d71,0x901a,0x5806, +0x69cc,0x817f,0x892a,0x9000,0x9839,0x5078,0x5957,0x59ac, +0x6295,0x900f,0x9b2a,0x615d,0x7279,0x95d6,0x5761,0x5a46, +0x5df4,0x628a,0x64ad,0x64fa,0x6777,0x6ce2,0x6d3e,0x722c, +0x7436,0x7834,0x7f77,0x82ad,0x8ddb,0x9817,0x5224,0x5742, +0x677f,0x7248,0x74e3,0x8ca9,0x8fa6,0x9211,0x962a,0x516b, +0x53ed,0x634c,0x4f69,0x5504,0x6096,0x6557,0x6c9b,0x6d7f, +0x724c,0x72fd,0x7a17,0x8987,0x8c9d,0x5f6d,0x6f8e,0x70f9, +0x81a8,0x610e,0x4fbf,0x504f,0x6241,0x7247,0x7bc7,0x7de8, +0x7fe9,0x904d,0x97ad,0x9a19,0x8cb6,0x576a,0x5e73,0x67b0, +0x840d,0x8a55,0x5420,0x5b16,0x5e63,0x5ee2,0x5f0a,0x6583, +0x80ba,0x853d,0x9589,0x965b,0x4f48,0x5305,0x530d,0x530f, +0x5486,0x54fa,0x5703,0x5e03,0x6016,0x629b,0x62b1,0x6355, +0xfa06,0x6ce1,0x6d66,0x75b1,0x7832,0x80de,0x812f,0x82de, +0x8461,0x84b2,0x888d,0x8912,0x900b,0x92ea,0x98fd,0x9b91, +0x5e45,0x66b4,0x66dd,0x7011,0x7206,0xfa07,0x4ff5,0x527d, +0x5f6a,0x6153,0x6753,0x6a19,0x6f02,0x74e2,0x7968,0x8868, +0x8c79,0x98c7,0x98c4,0x9a43,0x54c1,0x7a1f,0x6953,0x8af7, +0x8c4a,0x98a8,0x99ae,0x5f7c,0x62ab,0x75b2,0x76ae,0x88ab, +0x907f,0x9642,0x5339,0x5f3c,0x5fc5,0x6ccc,0x73cc,0x7562, +0x758b,0x7b46,0x82fe,0x999d,0x4e4f,0x903c,0x4e0b,0x4f55, +0x53a6,0x590f,0x5ec8,0x6630,0x6cb3,0x7455,0x8377,0x8766, +0x8cc0,0x9050,0x971e,0x9c15,0x58d1,0x5b78,0x8650,0x8b14, +0x9db4,0x5bd2,0x6068,0x608d,0x65f1,0x6c57,0x6f22,0x6fa3, +0x701a,0x7f55,0x7ff0,0x9591,0x9592,0x9650,0x97d3,0x5272, +0x8f44,0x51fd,0x542b,0x54b8,0x5563,0x558a,0x6abb,0x6db5, +0x7dd8,0x8266,0x929c,0x9677,0x9e79,0x5408,0x54c8,0x76d2, +0x86e4,0x95a4,0x95d4,0x965c,0x4ea2,0x4f09,0x59ee,0x5ae6, +0x5df7,0x6052,0x6297,0x676d,0x6841,0x6c86,0x6e2f,0x7f38, +0x809b,0x822a,0xfa08,0xfa09,0x9805,0x4ea5,0x5055,0x54b3, +0x5793,0x595a,0x5b69,0x5bb3,0x61c8,0x6977,0x6d77,0x7023, +0x87f9,0x89e3,0x8a72,0x8ae7,0x9082,0x99ed,0x9ab8,0x52be, +0x6838,0x5016,0x5e78,0x674f,0x8347,0x884c,0x4eab,0x5411, +0x56ae,0x73e6,0x9115,0x97ff,0x9909,0x9957,0x9999,0x5653, +0x589f,0x865b,0x8a31,0x61b2,0x6af6,0x737b,0x8ed2,0x6b47, +0x96aa,0x9a57,0x5955,0x7200,0x8d6b,0x9769,0x4fd4,0x5cf4, +0x5f26,0x61f8,0x665b,0x6ceb,0x70ab,0x7384,0x73b9,0x73fe, +0x7729,0x774d,0x7d43,0x7d62,0x7e23,0x8237,0x8852,0xfa0a, +0x8ce2,0x9249,0x986f,0x5b51,0x7a74,0x8840,0x9801,0x5acc, +0x4fe0,0x5354,0x593e,0x5cfd,0x633e,0x6d79,0x72f9,0x8105, +0x8107,0x83a2,0x92cf,0x9830,0x4ea8,0x5144,0x5211,0x578b, +0x5f62,0x6cc2,0x6ece,0x7005,0x7050,0x70af,0x7192,0x73e9, +0x7469,0x834a,0x87a2,0x8861,0x9008,0x90a2,0x93a3,0x99a8, +0x516e,0x5f57,0x60e0,0x6167,0x66b3,0x8559,0x8e4a,0x91af, +0x978b,0x4e4e,0x4e92,0x547c,0x58d5,0x58fa,0x597d,0x5cb5, +0x5f27,0x6236,0x6248,0x660a,0x6667,0x6beb,0x6d69,0x6dcf, +0x6e56,0x6ef8,0x6f94,0x6fe0,0x6fe9,0x705d,0x72d0,0x7425, +0x745a,0x74e0,0x7693,0x795c,0x7cca,0x7e1e,0x80e1,0x82a6, +0x846b,0x84bf,0x864e,0x865f,0x8774,0x8b77,0x8c6a,0x93ac, +0x9800,0x9865,0x60d1,0x6216,0x9177,0x5a5a,0x660f,0x6df7, +0x6e3e,0x743f,0x9b42,0x5ffd,0x60da,0x7b0f,0x54c4,0x5f18, +0x6c5e,0x6cd3,0x6d2a,0x70d8,0x7d05,0x8679,0x8a0c,0x9d3b, +0x5316,0x548c,0x5b05,0x6a3a,0x706b,0x7575,0x798d,0x79be, +0x82b1,0x83ef,0x8a71,0x8b41,0x8ca8,0x9774,0xfa0b,0x64f4, +0x652b,0x78ba,0x78bb,0x7a6b,0x4e38,0x559a,0x5950,0x5ba6, +0x5e7b,0x60a3,0x63db,0x6b61,0x6665,0x6853,0x6e19,0x7165, +0x74b0,0x7d08,0x9084,0x9a69,0x9c25,0x6d3b,0x6ed1,0x733e, +0x8c41,0x95ca,0x51f0,0x5e4c,0x5fa8,0x604d,0x60f6,0x6130, +0x614c,0x6643,0x6644,0x69a5,0x6cc1,0x6e5f,0x6ec9,0x6f62, +0x714c,0x749c,0x7687,0x7bc1,0x7c27,0x8352,0x8757,0x9051, +0x968d,0x9ec3,0x532f,0x56de,0x5efb,0x5f8a,0x6062,0x6094, +0x61f7,0x6666,0x6703,0x6a9c,0x6dee,0x6fae,0x7070,0x736a, +0x7e6a,0x81be,0x8334,0x86d4,0x8aa8,0x8cc4,0x5283,0x7372, +0x5b96,0x6a6b,0x9404,0x54ee,0x5686,0x5b5d,0x6548,0x6585, +0x66c9,0x689f,0x6d8d,0x6dc6,0x723b,0x80b4,0x9175,0x9a4d, +0x4faf,0x5019,0x539a,0x540e,0x543c,0x5589,0x55c5,0x5e3f, +0x5f8c,0x673d,0x7166,0x73dd,0x9005,0x52db,0x52f3,0x5864, +0x58ce,0x7104,0x718f,0x71fb,0x85b0,0x8a13,0x6688,0x85a8, +0x55a7,0x6684,0x714a,0x8431,0x5349,0x5599,0x6bc1,0x5f59, +0x5fbd,0x63ee,0x6689,0x7147,0x8af1,0x8f1d,0x9ebe,0x4f11, +0x643a,0x70cb,0x7566,0x8667,0x6064,0x8b4e,0x9df8,0x5147, +0x51f6,0x5308,0x6d36,0x80f8,0x9ed1,0x6615,0x6b23,0x7098, +0x75d5,0x5403,0x5c79,0x7d07,0x8a16,0x6b20,0x6b3d,0x6b46, +0x5438,0x6070,0x6d3d,0x7fd5,0x8208,0x50d6,0x51de,0x559c, +0x566b,0x56cd,0x59ec,0x5b09,0x5e0c,0x6199,0x6198,0x6231, +0x665e,0x66e6,0x7199,0x71b9,0x71ba,0x72a7,0x79a7,0x7a00, +0x7fb2,0x8a70}; + +const int uhc3_ucs_table_size = (sizeof(uhc3_ucs_table)/sizeof(unsigned short)); + +/* UCS -> UHC */ +const unsigned short ucs_a1_uhc_table[] = { +0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, +0x0008,0x0009,0x000a,0x000b,0x000c,0x000d,0x000e,0x000f, +0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017, +0x0018,0x0019,0x001a,0x001b,0x001c,0x001d,0x001e,0x001f, +0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027, +0x0028,0x0029,0x002a,0x002b,0x002c,0x002d,0x002e,0x002f, +0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037, +0x0038,0x0039,0x003a,0x003b,0x003c,0x003d,0x003e,0x003f, +0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047, +0x0048,0x0049,0x004a,0x004b,0x004c,0x004d,0x004e,0x004f, +0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057, +0x0058,0x0059,0x005a,0x005b,0x005c,0x005d,0x005e,0x005f, +0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067, +0x0068,0x0069,0x006a,0x006b,0x006c,0x006d,0x006e,0x006f, +0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077, +0x0078,0x0079,0x007a,0x007b,0x007c,0x007d,0x007e,0x007f, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa2ae,0x0000,0x0000,0xa2b4,0x0000,0x0000,0xa1d7, +0xa1a7,0x0000,0xa8a3,0x0000,0x0000,0xa1a9,0xa2e7,0x0000, +0xa1c6,0xa1be,0xa9f7,0xa9f8,0xa2a5,0x0000,0xa2d2,0xa1a4, +0xa2ac,0xa9f6,0xa8ac,0x0000,0xa8f9,0xa8f6,0xa8fa,0xa2af, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8a1,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa8a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1bf, +0xa8aa,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8ad,0xa9ac, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa9a1,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa9a3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa1c0, +0xa9aa,0x0000,0x0000,0x0000,0x0000,0x0000,0xa9ad,0x0000, +/* 0x0100 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa9a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8a4,0xa9a4, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa9a5,0xa8a6,0xa9a6,0x0000,0x0000,0x0000,0x0000, +0xa9a7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8a8, +0xa9a8,0xa8a9,0xa9a9,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa9b0,0xa8af,0xa9af,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xa8ab,0xa9ab,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa8ae,0xa9ae, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x0200 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa2a7, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa2b0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa2a8,0xa2ab,0xa2aa,0xa2ad,0x0000,0xa2a9,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x0300 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa5c1,0xa5c2,0xa5c3,0xa5c4,0xa5c5,0xa5c6,0xa5c7, +0xa5c8,0xa5c9,0xa5ca,0xa5cb,0xa5cc,0xa5cd,0xa5ce,0xa5cf, +0xa5d0,0xa5d1,0x0000,0xa5d2,0xa5d3,0xa5d4,0xa5d5,0xa5d6, +0xa5d7,0xa5d8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa5e1,0xa5e2,0xa5e3,0xa5e4,0xa5e5,0xa5e6,0xa5e7, +0xa5e8,0xa5e9,0xa5ea,0xa5eb,0xa5ec,0xa5ed,0xa5ee,0xa5ef, +0xa5f0,0xa5f1,0x0000,0xa5f2,0xa5f3,0xa5f4,0xa5f5,0xa5f6, +0xa5f7,0xa5f8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x0400 */ +0x0000,0xaca7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xaca1,0xaca2,0xaca3,0xaca4,0xaca5,0xaca6,0xaca8,0xaca9, +0xacaa,0xacab,0xacac,0xacad,0xacae,0xacaf,0xacb0,0xacb1, +0xacb2,0xacb3,0xacb4,0xacb5,0xacb6,0xacb7,0xacb8,0xacb9, +0xacba,0xacbb,0xacbc,0xacbd,0xacbe,0xacbf,0xacc0,0xacc1, +0xacd1,0xacd2,0xacd3,0xacd4,0xacd5,0xacd6,0xacd8,0xacd9, +0xacda,0xacdb,0xacdc,0xacdd,0xacde,0xacdf,0xace0,0xace1, +0xace2,0xace3,0xace4,0xace5,0xace6,0xace7,0xace8,0xace9, +0xacea,0xaceb,0xacec,0xaced,0xacee,0xacef,0xacf0,0xacf1, +0x0000,0xacd7}; + +const int ucs_a1_uhc_table_min = 0x0000; +const int ucs_a1_uhc_table_max = 0x0000 + (sizeof(ucs_a1_uhc_table)/sizeof(unsigned short)); + +const unsigned short ucs_a2_uhc_table[] = { +/* 0x2000 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xa1aa,0x0000,0x0000, +0xa1ae,0xa1af,0x0000,0x0000,0xa1b0,0xa1b1,0x0000,0x0000, +0xa2d3,0xa2d4,0x0000,0x0000,0x0000,0xa1a5,0xa1a6,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa2b6,0x0000,0xa1c7,0xa1c8,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xa1d8,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa9f9,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa9fa, +0x0000,0xa9fb,0xa9fc,0xa9fd,0xa9fe,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa2e6,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x2100 */ +0x0000,0x0000,0x0000,0xa1c9,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa2b5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xa7a4,0x0000,0x0000,0xa2e0,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa2e5,0xa2e2,0x0000,0x0000,0x0000,0xa7d9,0x0000, +0x0000,0x0000,0x0000,0xa1ca,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xa8f7,0xa8f8,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xa8fb,0xa8fc,0xa8fd,0xa8fe,0x0000, +0xa5b0,0xa5b1,0xa5b2,0xa5b3,0xa5b4,0xa5b5,0xa5b6,0xa5b7, +0xa5b8,0xa5b9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa5a1,0xa5a2,0xa5a3,0xa5a4,0xa5a5,0xa5a6,0xa5a7,0xa5a8, +0xa5a9,0xa5aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa1e7,0xa1e8,0xa1e6,0xa1e9,0xa1ea,0xa2d5,0xa2d8,0xa2d6, +0xa2d9,0xa2d7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xa2a1,0x0000,0xa2a2,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa2a3,0x0000,0xa1d3,0xa2a4,0x0000,0x0000,0x0000,0xa1d4, +0xa1f4,0x0000,0x0000,0xa1f5,0x0000,0x0000,0x0000,0xa2b3, +0x0000,0xa2b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xa1ee,0x0000,0x0000,0xa1f0,0xa1c4,0x0000, +0xa1d0,0x0000,0x0000,0x0000,0x0000,0xa1ab,0x0000,0xa1fc, +0xa1fd,0xa1fb,0xa1fa,0xa1f2,0xa1f3,0x0000,0xa2b1,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa1c5,0xa1f1,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa1ad,0xa1ef,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xa1d6,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa1c1,0xa1d5,0x0000,0x0000,0xa1c2,0xa1c3,0x0000,0x0000, +0x0000,0x0000,0xa1ec,0xa1ed,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xa1f8,0xa1f9,0x0000,0x0000,0xa1f6,0xa1f7, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa2c1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xa1d1,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x2300 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xa1d2,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x2400 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa8e7,0xa8e8,0xa8e9,0xa8ea,0xa8eb,0xa8ec,0xa8ed,0xa8ee, +0xa8ef,0xa8f0,0xa8f1,0xa8f2,0xa8f3,0xa8f4,0xa8f5,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa9e7,0xa9e8,0xa9e9,0xa9ea, +0xa9eb,0xa9ec,0xa9ed,0xa9ee,0xa9ef,0xa9f0,0xa9f1,0xa9f2, +0xa9f3,0xa9f4,0xa9f5,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa9cd,0xa9ce,0xa9cf,0xa9d0, +0xa9d1,0xa9d2,0xa9d3,0xa9d4,0xa9d5,0xa9d6,0xa9d7,0xa9d8, +0xa9d9,0xa9da,0xa9db,0xa9dc,0xa9dd,0xa9de,0xa9df,0xa9e0, +0xa9e1,0xa9e2,0xa9e3,0xa9e4,0xa9e5,0xa9e6,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa8cd,0xa8ce,0xa8cf,0xa8d0,0xa8d1,0xa8d2,0xa8d3,0xa8d4, +0xa8d5,0xa8d6,0xa8d7,0xa8d8,0xa8d9,0xa8da,0xa8db,0xa8dc, +0xa8dd,0xa8de,0xa8df,0xa8e0,0xa8e1,0xa8e2,0xa8e3,0xa8e4, +0xa8e5,0xa8e6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa6a1,0xa6ac,0xa6a2,0xa6ad,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa6a3,0xa6c8,0xa6c7,0xa6ae, +0xa6a4,0xa6c2,0xa6c1,0xa6af,0xa6a6,0xa6c6,0xa6c5,0xa6b1, +0xa6a5,0xa6c4,0xa6c3,0xa6b0,0xa6a7,0xa6bc,0xa6c9,0xa6ca, +0xa6b7,0xa6cb,0xa6cc,0xa6b2,0xa6a9,0xa6be,0xa6cd,0xa6ce, +0xa6b9,0xa6cf,0xa6d0,0xa6b4,0xa6a8,0xa6d1,0xa6d2,0xa6b8, +0xa6bd,0xa6d3,0xa6d4,0xa6b3,0xa6aa,0xa6d5,0xa6d6,0xa6ba, +0xa6bf,0xa6d7,0xa6d8,0xa6b5,0xa6ab,0xa6d9,0xa6da,0xa6bb, +0xa6db,0xa6dc,0xa6c0,0xa6dd,0xa6de,0xa6df,0xa6e0,0xa6e1, +0xa6e2,0xa6e3,0xa6e4,0xa6b6,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xa2c6,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa1e1,0xa1e0,0x0000,0xa2c3,0xa2c7,0xa2c8,0xa2cb,0xa2ca, +0xa2c9,0xa2cc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xa1e3,0xa1e2,0x0000,0x0000,0xa2ba,0xa2b9, +0x0000,0x0000,0x0000,0x0000,0xa1e5,0xa1e4,0x0000,0x0000, +0xa2b8,0xa2b7,0x0000,0x0000,0x0000,0x0000,0xa1df,0xa1de, +0xa2c2,0x0000,0x0000,0xa1db,0x0000,0x0000,0xa1dd,0xa1dc, +0xa2c4,0xa2c5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x2600 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0xa1da,0xa1d9,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xa2cf,0xa2ce, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xa2d0,0x0000,0xa2d1,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa1cf,0x0000,0xa1ce,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa2bc,0xa2bd,0x0000,0xa2c0,0xa2bb,0xa2be,0x0000,0xa2bf, +0xa2cd,0xa2db,0xa2dc,0x0000,0xa2dd,0xa2da}; + +const int ucs_a2_uhc_table_min = 0x2000; +const int ucs_a2_uhc_table_max = 0x2000 + (sizeof(ucs_a2_uhc_table)/sizeof(unsigned short)); + +const unsigned short ucs_a3_uhc_table[] = { +/* 0x2f00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa1a1,0xa1a2,0xa1a3,0xa1a8,0x0000,0x0000,0x0000,0x0000, +0xa1b4,0xa1b5,0xa1b6,0xa1b7,0xa1b8,0xa1b9,0xa1ba,0xa1bb, +0xa1bc,0xa1bd,0x0000,0xa1eb,0xa1b2,0xa1b3,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xaaa1,0xaaa2,0xaaa3,0xaaa4,0xaaa5,0xaaa6,0xaaa7, +0xaaa8,0xaaa9,0xaaaa,0xaaab,0xaaac,0xaaad,0xaaae,0xaaaf, +0xaab0,0xaab1,0xaab2,0xaab3,0xaab4,0xaab5,0xaab6,0xaab7, +0xaab8,0xaab9,0xaaba,0xaabb,0xaabc,0xaabd,0xaabe,0xaabf, +0xaac0,0xaac1,0xaac2,0xaac3,0xaac4,0xaac5,0xaac6,0xaac7, +0xaac8,0xaac9,0xaaca,0xaacb,0xaacc,0xaacd,0xaace,0xaacf, +0xaad0,0xaad1,0xaad2,0xaad3,0xaad4,0xaad5,0xaad6,0xaad7, +0xaad8,0xaad9,0xaada,0xaadb,0xaadc,0xaadd,0xaade,0xaadf, +0xaae0,0xaae1,0xaae2,0xaae3,0xaae4,0xaae5,0xaae6,0xaae7, +0xaae8,0xaae9,0xaaea,0xaaeb,0xaaec,0xaaed,0xaaee,0xaaef, +0xaaf0,0xaaf1,0xaaf2,0xaaf3,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xaba1,0xaba2,0xaba3,0xaba4,0xaba5,0xaba6,0xaba7, +0xaba8,0xaba9,0xabaa,0xabab,0xabac,0xabad,0xabae,0xabaf, +0xabb0,0xabb1,0xabb2,0xabb3,0xabb4,0xabb5,0xabb6,0xabb7, +0xabb8,0xabb9,0xabba,0xabbb,0xabbc,0xabbd,0xabbe,0xabbf, +0xabc0,0xabc1,0xabc2,0xabc3,0xabc4,0xabc5,0xabc6,0xabc7, +0xabc8,0xabc9,0xabca,0xabcb,0xabcc,0xabcd,0xabce,0xabcf, +0xabd0,0xabd1,0xabd2,0xabd3,0xabd4,0xabd5,0xabd6,0xabd7, +0xabd8,0xabd9,0xabda,0xabdb,0xabdc,0xabdd,0xabde,0xabdf, +0xabe0,0xabe1,0xabe2,0xabe3,0xabe4,0xabe5,0xabe6,0xabe7, +0xabe8,0xabe9,0xabea,0xabeb,0xabec,0xabed,0xabee,0xabef, +0xabf0,0xabf1,0xabf2,0xabf3,0xabf4,0xabf5,0xabf6,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x3100 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xa4a1,0xa4a2,0xa4a3,0xa4a4,0xa4a5,0xa4a6,0xa4a7, +0xa4a8,0xa4a9,0xa4aa,0xa4ab,0xa4ac,0xa4ad,0xa4ae,0xa4af, +0xa4b0,0xa4b1,0xa4b2,0xa4b3,0xa4b4,0xa4b5,0xa4b6,0xa4b7, +0xa4b8,0xa4b9,0xa4ba,0xa4bb,0xa4bc,0xa4bd,0xa4be,0xa4bf, +0xa4c0,0xa4c1,0xa4c2,0xa4c3,0xa4c4,0xa4c5,0xa4c6,0xa4c7, +0xa4c8,0xa4c9,0xa4ca,0xa4cb,0xa4cc,0xa4cd,0xa4ce,0xa4cf, +0xa4d0,0xa4d1,0xa4d2,0xa4d3,0xa4d4,0xa4d5,0xa4d6,0xa4d7, +0xa4d8,0xa4d9,0xa4da,0xa4db,0xa4dc,0xa4dd,0xa4de,0xa4df, +0xa4e0,0xa4e1,0xa4e2,0xa4e3,0xa4e4,0xa4e5,0xa4e6,0xa4e7, +0xa4e8,0xa4e9,0xa4ea,0xa4eb,0xa4ec,0xa4ed,0xa4ee,0xa4ef, +0xa4f0,0xa4f1,0xa4f2,0xa4f3,0xa4f4,0xa4f5,0xa4f6,0xa4f7, +0xa4f8,0xa4f9,0xa4fa,0xa4fb,0xa4fc,0xa4fd,0xa4fe,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa9b1,0xa9b2,0xa9b3,0xa9b4,0xa9b5,0xa9b6,0xa9b7,0xa9b8, +0xa9b9,0xa9ba,0xa9bb,0xa9bc,0xa9bd,0xa9be,0xa9bf,0xa9c0, +0xa9c1,0xa9c2,0xa9c3,0xa9c4,0xa9c5,0xa9c6,0xa9c7,0xa9c8, +0xa9c9,0xa9ca,0xa9cb,0xa9cc,0xa2df,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa8b1,0xa8b2,0xa8b3,0xa8b4,0xa8b5,0xa8b6,0xa8b7,0xa8b8, +0xa8b9,0xa8ba,0xa8bb,0xa8bc,0xa8bd,0xa8be,0xa8bf,0xa8c0, +0xa8c1,0xa8c2,0xa8c3,0xa8c4,0xa8c5,0xa8c6,0xa8c7,0xa8c8, +0xa8c9,0xa8ca,0xa8cb,0xa8cc,0x0000,0x0000,0x0000,0xa2de, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x3300 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa7c9,0xa7ca,0xa7cb,0xa7cc,0xa7cd,0x0000,0x0000,0x0000, +0xa7ba,0xa7bb,0xa7dc,0xa7dd,0xa7de,0xa7b6,0xa7b7,0xa7b8, +0xa7d4,0xa7d5,0xa7d6,0xa7d7,0xa7d8,0xa7a1,0xa7a2,0xa7a3, +0xa7a5,0xa7ab,0xa7ac,0xa7ad,0xa7ae,0xa7af,0xa7b0,0xa7b1, +0xa7b2,0xa7b3,0xa7b4,0xa7a7,0xa7a8,0xa7a9,0xa7aa,0xa7bd, +0xa7be,0xa7e5,0xa7e6,0xa7e7,0xa7e8,0xa7e1,0xa7e2,0xa7e3, +0xa7bf,0xa7c0,0xa7c1,0xa7c2,0xa7c3,0xa7c4,0xa7c5,0xa7c6, +0xa7c7,0xa7c8,0xa7ce,0xa7cf,0xa7d0,0xa7d1,0xa7d2,0xa7d3, +0xa7da,0xa7db,0xa2e3,0xa7ec,0xa7a6,0xa7e0,0xa7ef,0xa2e1, +0xa7bc,0xa7ed,0xa7b5,0x0000,0x0000,0x0000,0x0000,0xa7b9, +0xa7ea,0x0000,0x0000,0xa7eb,0x0000,0x0000,0xa7df,0x0000, +0xa2e4,0x0000,0x0000,0xa7e4,0xa7ee,0xa7e9}; + +const int ucs_a3_uhc_table_min = 0x2f00; +const int ucs_a3_uhc_table_max = 0x2f00 + (sizeof(ucs_a3_uhc_table)/sizeof(unsigned short)); + +const unsigned short ucs_i_uhc_table[] = { +/* 0x4d00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xece9,0xefcb,0x0000,0xf6d2,0x0000,0x0000,0x0000,0xd8b2, +0xeddb,0xdfb2,0xdfbe,0xf9bb,0x0000,0xdcf4,0x0000,0x0000, +0x0000,0xf5e4,0x0000,0x0000,0xf3a6,0xdde0,0xe1a6,0x0000, +0xcef8,0xdcb0,0x0000,0x0000,0x0000,0x0000,0xe3aa,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf1e9,0x0000,0x0000, +0x0000,0x0000,0xcdfa,0x0000,0x0000,0x0000,0x0000,0x0000, +0xfcaf,0xd3a1,0x0000,0xf1ab,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe7d1,0xd2ac,0x0000,0xcef9,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf1fd,0x0000,0xdebf,0xfbba,0xf9b9, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xced2,0x0000, +0xe3ab,0xebe0,0x0000,0x0000,0x0000,0xcefa,0xcbf7,0xe5a5, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xcae1,0x0000,0xd4cc,0x0000,0x0000, +0x0000,0x0000,0x0000,0xeae1,0x0000,0x0000,0xdce3,0xdfad, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbeb,0x0000, +0x0000,0x0000,0xd5af,0x0000,0x0000,0x0000,0xd6f5,0x0000, +0xe5f8,0x0000,0x0000,0xdec0,0xeca3,0x0000,0xe9cd,0x0000, +0xeaa7,0xe9f6,0xfbbb,0x0000,0xe7e9,0xefcc,0x0000,0x0000, +0xd0e6,0x0000,0x0000,0xdec1,0x0000,0x0000,0xe4ac,0x0000, +0x0000,0xd8cc,0xf9f1,0x0000,0xcedf,0xfaa4,0xe6b2,0x0000, +0xfafb,0x0000,0x0000,0xfabd,0xccc8,0xefcd,0xd5d5,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3a2,0x0000, +0x0000,0x0000,0xecd1,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe4a7,0xecd2,0x0000,0x0000,0xf6b1,0x0000,0x0000,0xcefb, +0x0000,0x0000,0xd0d1,0xcbbf,0x0000,0xeda4,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xeda8,0xdec2,0xf6e2,0xeddc, +0xdcf5,0xe0b9,0x0000,0x0000,0x0000,0xd4ce,0x0000,0xf4b5, +0x0000,0x0000,0x0000,0xd3db,0xd6b5,0xeca4,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe4e6,0x0000,0xf1ea,0x0000,0x0000,0x0000,0xcbec,0xcbc0, +0x0000,0x0000,0x0000,0xecf2,0x0000,0x0000,0x0000,0x0000, +/* 0x4f00 */ +0x0000,0xd0ea,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf9f2,0xeca5,0xd0df,0x0000,0xe7ea,0xd0eb,0xdcd1, +0xdbe9,0xfdcc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdbd7, +0x0000,0x0000,0x0000,0x0000,0xdae1,0x0000,0xd6b6,0x0000, +0xe3df,0x0000,0xdec3,0x0000,0xdec4,0xcaa1,0x0000,0x0000, +0x0000,0x0000,0x0000,0xeeec,0x0000,0x0000,0xd3a3,0xeeb7, +0xf8cf,0x0000,0x0000,0x0000,0x0000,0xeac8,0xeeb8,0xf1ac, +0xf1a5,0xe9ce,0x0000,0x0000,0x0000,0xf9bc,0x0000,0x0000, +0x0000,0xe5f9,0xecea,0xddd6,0xedc2,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf8a5,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5ba, +0xdbd8,0x0000,0x0000,0xcaa2,0x0000,0x0000,0xd1cd,0x0000, +0x0000,0x0000,0xeeed,0x0000,0x0000,0x0000,0xeceb,0xdec5, +0x0000,0xe3e0,0x0000,0xcac9,0xf2e9,0x0000,0xd5ce,0x0000, +0xf6b6,0x0000,0xcec2,0xd6c7,0x0000,0xe3b4,0x0000,0xf1ad, +0x0000,0xeae2,0x0000,0x0000,0x0000,0x0000,0xd7c2,0x0000, +0xf3a7,0x0000,0x0000,0xcdea,0x0000,0xebee,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9b2,0xfda5, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf6d5,0xd5e2,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf8b5, +0x0000,0x0000,0xccf5,0xf5b5,0xe4ad,0x0000,0x0000,0x0000, +0x0000,0xe7eb,0xf1d5,0x0000,0x0000,0x0000,0xf0bb,0x0000, +0x0000,0xe9b5,0x0000,0xccc9,0xfad5,0x0000,0x0000,0xe1d4, +0x0000,0x0000,0xd7d6,0x0000,0x0000,0xdcc1,0x0000,0xdec6, +0xfaef,0xe3e1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe1f3,0xdcf6, +0x0000,0xcefc,0x0000,0xdbc4,0x0000,0xf8f1,0x0000,0x0000, +0xdce4,0x0000,0xe5ef,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x5000 */ +0x0000,0x0000,0xdcb1,0x0000,0x0000,0x0000,0xd5d6,0x0000, +0x0000,0xf3da,0x0000,0xcbc1,0x0000,0xdbc3,0x0000,0x0000, +0x0000,0xd9fa,0xd3ee,0x0000,0x0000,0x0000,0xfab8,0x0000, +0x0000,0xfda6,0xebef,0x0000,0xf4a6,0x0000,0xccca,0xf3a8, +0x0000,0xf3db,0x0000,0xdba7,0xf6b7,0x0000,0xcfe6,0xf0f2, +0xcbda,0x0000,0xe7d2,0xd7c3,0xf6f0,0xe8de,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe5a6,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe5e7,0x0000,0x0000,0x0000,0xcaa3, +0xcca7,0xeac9,0x0000,0x0000,0x0000,0x0000,0x0000,0xf8b6, +0x0000,0x0000,0x0000,0x0000,0x0000,0xfaa5,0x0000,0x0000, +0x0000,0x0000,0xf1ae,0x0000,0xefce,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xcbed,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf6b0,0xefcf,0xe9cf,0x0000, +0xf7de,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xced3,0x0000,0x0000,0x0000,0x0000,0xdcf7,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xdba8,0x0000,0x0000, +0x0000,0xcbf8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xdfa1,0xdde1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf5ca,0xe9b6,0x0000,0x0000, +0x0000,0x0000,0xe7ec,0xeeee,0x0000,0xf3f0,0x0000,0xdfbf, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcccb,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd0c1,0x0000,0x0000, +0x0000,0xf4d2,0xe0ba,0x0000,0x0000,0x0000,0x0000,0xdfc0, +0x0000,0xcee0,0x0000,0x0000,0x0000,0xdcd2,0xfdea,0x0000, +0x0000,0x0000,0xd6f6,0x0000,0x0000,0x0000,0xeaca,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe8e9,0x0000,0xe3ac, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf3d0,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xcaa4,0x0000,0xdbf8,0x0000,0x0000,0x0000,0xdec7, +0xebf0,0xf1d6,0x0000,0x0000,0xe5e2,0x0000,0xcccc,0x0000, +0x0000,0xcbfb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xeae3,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdfc1, +0x0000,0xd6ed,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe9d0,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xeeb9,0x0000,0x0000,0x0000,0x0000,0xd5e3, +0x0000,0x0000,0xd1d3,0x0000,0xe5f0,0x0000,0x0000,0x0000, +0xe8b4,0xebc3,0x0000,0xeaaa,0xfafc,0xf5f6,0xf0bc,0xfdd4, +0xe0bb,0xcec3,0x0000,0xd0ba,0xf7ba,0xd8f3,0xf7cd,0x0000, +0x0000,0x0000,0xe4ae,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd4df,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd0e7,0x0000,0x0000,0xecfd,0x0000,0xd2ae, +0xeeef,0xd5d7,0xeae4,0xf8a2,0xcdeb,0xd7bf,0xfbb1,0x0000, +0x0000,0xcdec,0x0000,0x0000,0x0000,0xdcb2,0xd0ec,0xcefd, +0xeef0,0x0000,0x0000,0x0000,0xccc2,0x0000,0x0000,0x0000, +0xd0ed,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5f7,0x0000, +0x0000,0x0000,0xf3fc,0x0000,0x0000,0xeea2,0x0000,0x0000, +0x0000,0x0000,0xd9b3,0x0000,0x0000,0xd8f4,0x0000,0xe9b7, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xceae,0x0000,0x0000,0x0000,0x0000,0xd9a2,0x0000,0x0000, +0x0000,0x0000,0xd8f1,0x0000,0xd4cf,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5a7,0xd5d2, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd6a9,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf4a2,0x0000,0xf1d7,0x0000, +0x0000,0xd5d8,0x0000,0xf0bd,0xd7d0,0xd4d0,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd7cf,0xebea,0xfdeb,0x0000, +0x0000,0xdbed,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xfcc5,0xcbc2,0x0000,0x0000,0x0000,0x0000,0xfdd5,0x0000, +0xf4c8,0xe8ea,0xf5f3,0x0000,0x0000,0xf9de,0x0000,0x0000, +0xd3ef,0x0000,0x0000,0xecd3,0x0000,0x0000,0xddc2,0xefb7, +0xe7d4,0x0000,0xcaca,0x0000,0x0000,0x0000,0xd9fb,0x0000, +0x0000,0xfafd,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6aa, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf4f8,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf7f7,0xdcac,0x0000,0x0000, +0x0000,0xd7d7,0xdfa2,0x0000,0x0000,0x0000,0xcebe,0x0000, +0xd3f0,0x0000,0x0000,0x0000,0x0000,0x0000,0xf0a4,0xe1ec, +0xcfe7,0xf3cb,0xeda9,0xcabe,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf4ef,0x0000,0x0000,0x0000,0xf6ce, +0x0000,0x0000,0xdefb,0xd0bb,0xd5b7,0xeef1,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf4a8,0x0000,0xdcf8,0x0000, +0x0000,0x0000,0x0000,0xcba7,0x0000,0xdace,0x0000,0x0000, +0x0000,0xe0e6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xeda5,0xeef2,0x0000,0x0000,0x0000,0x0000,0xdcf9, +0x0000,0x0000,0xf9dc,0x0000,0x0000,0xf3dc,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf8f2,0x0000,0xf4f9, +0x0000,0x0000,0x0000,0xfcf1,0x0000,0x0000,0x0000,0xd0bc, +0xdbf9,0xd7b1,0x0000,0x0000,0x0000,0xcbfc,0x0000,0x0000, +0x0000,0xf0a5,0xcbfd,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd5f4,0x0000,0x0000,0x0000,0xcded, +0xcaa5,0x0000,0x0000,0xd6ab,0xd0c2,0x0000,0x0000,0x0000, +0x0000,0xf0be,0xd2bd,0xcca4,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfab6,0x0000, +0x0000,0xcccd,0x0000,0xdafa,0x0000,0xf6cf,0x0000,0xe9b8, +0x0000,0xd8f5,0x0000,0x0000,0x0000,0xccce,0x0000,0x0000, +0x0000,0x0000,0xd7cd,0x0000,0x0000,0xd4d1,0xe9ed,0x0000, +0xcaeb,0xd9e2,0x0000,0xfdb2,0x0000,0xe3ad,0xd6cc,0xd9b4, +0x0000,0x0000,0xe1a7,0xeed3,0xd0c3,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xfdb3,0x0000,0xd5e4,0x0000,0x0000, +0xcfe8,0x0000,0xedc3,0xd0b2,0x0000,0x0000,0xcefe,0xdaa8, +/* 0x5300 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0xf8d0,0x0000,0x0000, +0xfdd6,0x0000,0x0000,0x0000,0x0000,0xf8d1,0x0000,0xf8d2, +0xdcd3,0x0000,0x0000,0x0000,0x0000,0xdde2,0xfbf9,0xddc1, +0x0000,0xe3b5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xeddd,0xcec4,0x0000,0xcba1,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xdde3,0x0000,0x0000,0x0000,0x0000,0xfcdd, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf9af,0x0000,0x0000,0x0000,0x0000,0x0000,0xd2fb, +0xcfa1,0xe4a8,0x0000,0xf4b6,0xecfe,0x0000,0x0000,0xe3ae, +0xe7ed,0xfdc1,0xdae2,0x0000,0x0000,0xd8b3,0x0000,0x0000, +0x0000,0xdde4,0xf0ef,0xf6f1,0xfaf0,0x0000,0x0000,0xd1f5, +0x0000,0x0000,0xdacf,0x0000,0xdcd4,0x0000,0xdca6,0x0000, +0xefbf,0x0000,0x0000,0x0000,0x0000,0x0000,0xcecf,0x0000, +0xe0d9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9d6, +0xecd4,0xeacb,0x0000,0x0000,0xcabf,0xd5b0,0x0000,0xcfe9, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf1ed,0x0000,0xcccf, +0x0000,0x0000,0x0000,0x0000,0xe4f8,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe4ed,0x0000,0x0000,0x0000,0x0000, +0xd7d8,0x0000,0xfda7,0x0000,0x0000,0x0000,0x0000,0xeaab, +0xf6b2,0x0000,0x0000,0x0000,0x0000,0xcff0,0xf9bd,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe6f4,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xcbdb,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf3d1,0x0000,0x0000,0x0000,0x0000, +0xe9d1,0xf3a9,0xd0e0,0xe9d2,0x0000,0xdae3,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe2d2,0x0000,0xf6a2,0xe1f4, +0x0000,0x0000,0x0000,0xdae4,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe7d5,0xf5bf,0xcfa2,0xcdaf,0xcfa3,0x0000,0x0000, +0x0000,0xcdb0,0xf1fe,0xd0a3,0xe1af,0xf8a3,0x0000,0xcaa6, +0xf7bb,0xf2ea,0xdec8,0xe9d3,0x0000,0x0000,0x0000,0x0000, +0xdec9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x5400 */ +0x0000,0x0000,0x0000,0xfdde,0xcac0,0x0000,0x0000,0x0000, +0xf9ea,0xd1ce,0xeed4,0x0000,0xd4d2,0xd9a3,0xfda8,0xd7d9, +0xf7ce,0xfabe,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xcfd6,0x0000,0xd7f0,0x0000,0xebe1, +0xf8c5,0x0000,0x0000,0x0000,0x0000,0x0000,0xdcfa,0x0000, +0x0000,0xddc3,0x0000,0xf9df,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe7ef,0x0000,0x0000,0x0000,0x0000, +0xfde5,0xf6a3,0x0000,0xd9fc,0xfda9,0x0000,0xe7ee,0x0000, +0x0000,0x0000,0xd5e5,0x0000,0x0000,0x0000,0x0000,0x0000, +0xefd0,0x0000,0xcdb1,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf7a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf1b2,0x0000,0xf1b1,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xcdb2,0x0000,0xdaab,0x0000,0xcaa7,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe3e2,0xfbbc,0xd9a4,0x0000,0x0000, +0xeeba,0x0000,0x0000,0x0000,0x0000,0x0000,0xf8d3,0x0000, +0x0000,0x0000,0x0000,0x0000,0xfbfa,0x0000,0xcfa4,0x0000, +0xdcfb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf6e3,0x0000,0x0000,0x0000, +0xedaa,0x0000,0x0000,0xf2a1,0xcee1,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xfaa6,0x0000,0x0000,0x0000,0x0000, +0xf9e0,0x0000,0x0000,0x0000,0x0000,0xecd6,0x0000,0x0000, +0xe4ee,0xf9a1,0x0000,0x0000,0xfbef,0x0000,0x0000,0x0000, +0xf9eb,0xeea3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xeaac,0x0000,0x0000,0x0000,0xcaa8,0x0000,0x0000, +0xf4fa,0x0000,0x0000,0x0000,0x0000,0xcdd6,0xfcf6,0x0000, +0x0000,0x0000,0xf4c9,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf8d4,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x5500 */ +0x0000,0x0000,0x0000,0x0000,0xf8a6,0x0000,0xdeca,0xf2c6, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd7da,0x0000, +0xd3d0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd8c5,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeae6, +0x0000,0xf3dd,0x0000,0x0000,0x0000,0xe4da,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf6e4,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf6f2,0x0000,0xdfc2,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9fd, +0x0000,0x0000,0x0000,0xccf6,0x0000,0x0000,0xd3ba,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4af,0x0000, +0x0000,0x0000,0x0000,0xf9e1,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf0a6,0x0000,0x0000,0x0000, +0xcbd3,0x0000,0x0000,0x0000,0xe0bc,0x0000,0xf4ca,0xd4fa, +0x0000,0xfdaa,0xf9e2,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf4b7,0xfdc2,0xfcb0,0x0000,0xfdec,0xcae2,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfdbd, +0x0000,0xeae7,0xdfc3,0xd1d2,0xcee2,0x0000,0xd3a4,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xfdab,0x0000,0xdfe0, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf2c7,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe7f0,0x0000,0xd0ee,0x0000,0x0000,0xf3aa, +0x0000,0x0000,0x0000,0xdecb,0xf6b8,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe1f5,0xf1b3,0x0000, +/* 0x5600 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf7a3,0x0000, +0x0000,0xcaa9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xcfa5,0x0000,0x0000,0xdfc4, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe1b0, +0x0000,0x0000,0xf0bf,0x0000,0xf6a4,0x0000,0xe3b6,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xfac6,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd0ef,0x0000,0x0000,0xfded,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xddc4,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfcf7,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe6bf,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xdead,0x0000,0xfabf,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe5f1,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xedc4,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd2a5,0x0000,0x0000,0xfdee,0x0000,0x0000, +0x0000,0xf5b6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe1f6,0xdecc,0x0000,0x0000,0xfcde,0x0000, +0xecd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcddd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xd6b7,0xcdb3,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x5700 */ +0x0000,0x0000,0x0000,0xf8d5,0xe5d8,0x0000,0x0000,0x0000, +0xcfea,0x0000,0x0000,0xcfd0,0x0000,0xeacc,0x0000,0x0000, +0x0000,0x0000,0xeaae,0xeaad,0x0000,0x0000,0xd3f1,0x0000, +0xd3a5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf7cf, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xeea4,0x0000,0x0000,0x0000,0x0000,0xd0a4,0x0000,0x0000, +0xf2a2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd0f0,0x0000,0x0000,0x0000,0x0000, +0xf2a3,0x0000,0xf7f8,0x0000,0x0000,0x0000,0x0000,0xd0b3, +0x0000,0x0000,0xdba9,0x0000,0x0000,0xd3bb,0xcaec,0x0000, +0xf1a6,0xcbd5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf7e7,0x0000,0x0000,0xcdde,0x0000,0xf7a4,0x0000, +0x0000,0x0000,0xf8c0,0x0000,0x0000,0x0000,0xd3dd,0x0000, +0xccd0,0x0000,0x0000,0x0000,0x0000,0xcfa6,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf6f3,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe1f7,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd3dc,0x0000,0x0000,0xfafe,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xfaa7,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xebd9,0x0000,0xcfa7,0xeaaf,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe4ef,0x0000,0x0000,0x0000,0xe9b9, +0xf1d8,0x0000,0x0000,0xd8d8,0x0000,0x0000,0xe0f2,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe6b4, +0xdcfc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf3f1,0x0000,0x0000,0x0000,0xe3d0,0x0000,0x0000,0xf2fb, +0x0000,0xdbc6,0xd0f1,0x0000,0xd0f2,0x0000,0x0000,0x0000, +0xcfdc,0x0000,0xd3d1,0x0000,0x0000,0xccb1,0xf7d8,0x0000, +0xcba8,0xebbc,0xe4be,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf4dc,0x0000, +0x0000,0xdcc2,0x0000,0x0000,0xf0a7,0x0000,0x0000,0xe6c0, +0x0000,0x0000,0xcaed,0x0000,0x0000,0x0000,0x0000,0xe8eb, +0xe5e8,0xdcc3,0x0000,0x0000,0xedde,0xd3f2,0x0000,0x0000, +0x0000,0x0000,0xccf7,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xced4,0xe7ab,0x0000,0x0000,0x0000,0xcbc3, +0x0000,0xe1b1,0x0000,0x0000,0xf7b2,0x0000,0x0000,0xd3f3, +0xd3d2,0x0000,0xf5c0,0x0000,0x0000,0x0000,0xdfdd,0x0000, +0x0000,0xeef3,0xe7f1,0x0000,0xfdb4,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf2c8,0x0000,0x0000, +0x0000,0xf3d2,0x0000,0x0000,0xeef4,0x0000,0xe2d3,0x0000, +0x0000,0x0000,0x0000,0xccd1,0x0000,0xdfea,0x0000,0x0000, +0x0000,0xe9ba,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd9d7,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf5cd,0x0000,0xf1f2,0xfac7, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd9f8,0xd4c2,0x0000,0x0000,0x0000,0x0000,0xf6e5,0x0000, +0x0000,0x0000,0x0000,0xddc5,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe7f2,0xeddf,0x0000,0x0000,0xcacb,0x0000, +0x0000,0xdbfa,0x0000,0x0000,0x0000,0xe8b5,0x0000,0xd3a6, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfdb5,0x0000, +0x0000,0xf9c9,0x0000,0xe4e2,0x0000,0xfbbd,0x0000,0x0000, +0xd7a4,0xcec5,0x0000,0x0000,0x0000,0x0000,0xced5,0xd6e6, +0x0000,0x0000,0x0000,0x0000,0xe5bd,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xdecd,0xecf3,0x0000,0x0000,0xede0, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xecec,0xfbbe,0xdfeb,0x0000,0xe1f8,0x0000,0x0000, +/* 0x5900 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf9be, +0x0000,0x0000,0x0000,0x0000,0xd0f3,0xe0aa,0xe8e2,0x0000, +0x0000,0xe2d4,0xd2fd,0x0000,0xe5a8,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd9d3,0x0000,0x0000,0x0000,0x0000,0xd3de, +0x0000,0xf4b8,0xf7bc,0xdcfd,0x0000,0xe8ec,0xe4e7,0x0000, +0x0000,0xe3f7,0x0000,0x0000,0x0000,0x0000,0x0000,0xeca8, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfaf1,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe5f2,0x0000,0x0000,0xd0f4, +0xd2af,0xdce5,0x0000,0x0000,0x0000,0x0000,0xd0a5,0xf1b4, +0xfcb1,0xccf8,0x0000,0x0000,0xddc6,0xfad1,0x0000,0xf7df, +0x0000,0x0000,0xfaa8,0x0000,0x0000,0x0000,0x0000,0x0000, +0xeef5,0x0000,0xdece,0x0000,0x0000,0x0000,0x0000,0xe7f3, +0x0000,0x0000,0xf7ac,0xebc4,0xede1,0xe0ab,0xddc7,0x0000, +0x0000,0x0000,0x0000,0xd2b3,0xd2bf,0x0000,0x0000,0x0000, +0xcacc,0x0000,0x0000,0x0000,0x0000,0xfbbf,0x0000,0x0000, +0x0000,0x0000,0xe5fd,0xdde5,0xd8cd,0x0000,0x0000,0x0000, +0x0000,0x0000,0xecf4,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd0f5,0x0000,0x0000,0xe8ed,0xd0d2, +0x0000,0xd9d8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf6e6,0x0000,0x0000, +0xdbaa,0x0000,0x0000,0x0000,0xf7e0,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xd8d9,0x0000,0xf4a3,0x0000,0x0000,0xf4dd,0x0000, +0x0000,0x0000,0x0000,0xefd1,0x0000,0x0000,0xd9b5,0x0000, +0x0000,0xedab,0x0000,0xe3b7,0x0000,0x0000,0x0000,0x0000, +0xeebb,0xcdb4,0x0000,0xe0f3,0xeacd,0x0000,0x0000,0x0000, +0x0000,0xecf5,0xe8ee,0x0000,0xcba9,0xf1af,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcacd,0x0000, +0xeca9,0x0000,0xf2eb,0x0000,0xfdef,0x0000,0xf9f3,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe6c1,0x0000,0x0000,0xecd8,0x0000,0x0000,0x0000,0xedac, +/* 0x5a00 */ +0x0000,0xeace,0x0000,0xe8df,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xdecf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd2a6,0x0000,0x0000,0xe7f4,0xd1d6,0x0000,0x0000,0xe6c2, +0xe3e3,0x0000,0x0000,0x0000,0x0000,0xe4b0,0x0000,0x0000, +0x0000,0xd8b4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf6a5,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf3de,0x0000,0x0000,0x0000, +0x0000,0xd7a5,0x0000,0x0000,0x0000,0x0000,0xf7e8,0x0000, +0x0000,0xe8c6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xfbe6,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xdde6,0x0000,0x0000,0x0000,0xdcfe,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd8da,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xdaac,0xeab0,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe3b8,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xcaaa,0xe1f9,0x0000,0xeab1,0x0000,0x0000,0x0000, +0x0000,0xf2ec,0x0000,0x0000,0xfaee,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xeed5,0x0000,0x0000,0x0000,0x0000,0xf9f4,0x0000, +0x0000,0xd2ec,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x5b00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0xfbfb,0x0000,0x0000, +0x0000,0xfdf0,0x0000,0xe0bd,0xcee3,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf8c6,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xdeae,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xdfc5,0x0000,0x0000,0xe5be,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xedad,0xfaea,0x0000,0x0000,0xcdee,0xeda6,0x0000,0xedae, +0xf0ed,0x0000,0xdda1,0x0000,0xedaf,0xfcf8,0x0000,0xd8eb, +0x0000,0x0000,0x0000,0xccf9,0xcdb5,0x0000,0x0000,0x0000, +0x0000,0xfaa9,0x0000,0xe1dd,0x0000,0x0000,0x0000,0x0000, +0xe2d5,0xedcf,0x0000,0x0000,0x0000,0xdda2,0x0000,0x0000, +0xf9ca,0x0000,0xeae8,0x0000,0xe5ed,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd3eb,0x0000,0xe9d4, +0xe1fa,0xe4cc,0x0000,0xe1e4,0xe8c7,0x0000,0x0000,0xcedb, +0x0000,0x0000,0x0000,0xdcd5,0x0000,0xf7b5,0xfcf3,0xf0f3, +0xceaf,0xf1b5,0xefd2,0xe8c8,0xebf1,0x0000,0x0000,0x0000, +0x0000,0x0000,0xcbd4,0xe0be,0xe3f8,0xeae9,0xfcb2,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe0f4,0x0000,0xcfe0,0x0000, +0xeea5,0x0000,0x0000,0xfaaa,0xe6c3,0xe1b2,0xcaab,0x0000, +0xe3e4,0xe9bb,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2d6, +0xf3f2,0x0000,0xeed6,0xeab2,0xd0f6,0xecd9,0xdacb,0xcfa8, +0x0000,0x0000,0x0000,0x0000,0xdda3,0x0000,0x0000,0x0000, +0xd8db,0x0000,0xf9ce,0xe9d5,0xe3d1,0x0000,0x0000,0xd2bc, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd8ac,0xf3cc, +0x0000,0xcdfb,0xf6d6,0x0000,0xe7f5,0xe8ef,0xe3f9,0xd2bb, +0xf3f3,0xe3fb,0x0000,0xded0,0xceb0,0x0000,0xd6f7,0xf1d9, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf5c1,0xdcc4,0x0000, +0xf5bb,0x0000,0xded1,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x5c00 */ +0x0000,0xdce6,0x0000,0x0000,0xded2,0x0000,0x0000,0xede2, +0xeef6,0xeacf,0xf0ee,0xe3fc,0x0000,0xd3df,0xd3f4,0xe1b3, +0x0000,0xe1b4,0x0000,0x0000,0x0000,0x0000,0xf4d3,0x0000, +0x0000,0xdfc6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe9d6,0x0000,0x0000,0x0000, +0xdbab,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf6a6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe3b9,0xebc5,0xf4a9,0xcdb6,0xd2f9,0x0000,0xdaad,0xd2e3, +0xcfd1,0x0000,0x0000,0x0000,0x0000,0xcbdc,0xccfa,0x0000, +0xcfdd,0x0000,0x0000,0xe8a9,0x0000,0xe3bb,0xe3ba,0x0000, +0x0000,0xe0da,0x0000,0x0000,0x0000,0xeef7,0x0000,0x0000, +0x0000,0x0000,0x0000,0xdcb3,0x0000,0x0000,0x0000,0x0000, +0xd3f5,0x0000,0xd7a6,0x0000,0xf6b5,0xd7db,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe1d5,0x0000,0x0000,0xd4ea, +0x0000,0xdfa3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xfddf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd0f7,0xedd4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xcbaa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe4db,0x0000,0xe1fb,0xcba2,0x0000,0x0000,0x0000, +0x0000,0xd3e0,0x0000,0xe4bf,0x0000,0xfbc0,0x0000,0xdabe, +0xe4cd,0x0000,0xd6b9,0x0000,0x0000,0x0000,0xefc0,0x0000, +0xe1fc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf6b9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xdfc7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe4b1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdce7, +0xdce8,0x0000,0x0000,0x0000,0xfad6,0x0000,0xd3f6,0x0000, +0x0000,0x0000,0x0000,0xf1da,0x0000,0xfaf2,0x0000,0x0000, +/* 0x5d00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2fd, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd5cf,0xd0f8,0x0000, +0x0000,0xcddf,0x0000,0x0000,0xf5cb,0x0000,0xe4f0,0xcbab, +0x0000,0xd7c4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2fe, +0x0000,0xddda,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xdaae,0xcaee,0x0000,0x0000,0x0000, +0xd5b9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe3a1,0x0000,0x0000,0xe8e3,0x0000,0x0000,0xf3ab, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfa9, +0x0000,0x0000,0x0000,0xd3f7,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd4f1,0x0000,0x0000, +0xcee4,0x0000,0xe8f2,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe5f5,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe7ae,0x0000,0xd6ba,0x0000,0xdfec,0xe4c0,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe8e4,0x0000,0x0000, +0x0000,0x0000,0xd8b5,0x0000,0x0000,0x0000,0xe4dc,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf4b9,0xf1b6,0x0000, +0x0000,0xe2de,0xe1b5,0x0000,0x0000,0xcdef,0xf1a7,0xcee5, +0xcbdd,0x0000,0x0000,0xd9e3,0x0000,0x0000,0xf3ac,0x0000, +0x0000,0xd0f9,0xecab,0xded3,0xf7e9,0x0000,0x0000,0xf9f5, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe1de,0xcbee,0x0000, +/* 0x5e00 */ +0x0000,0x0000,0xe3bc,0xf8d6,0x0000,0x0000,0xdbee,0x0000, +0x0000,0x0000,0x0000,0x0000,0xfdf1,0x0000,0x0000,0x0000, +0x0000,0xf7b6,0x0000,0x0000,0x0000,0x0000,0xf4de,0x0000, +0x0000,0xf2ed,0x0000,0xdbd9,0x0000,0xf0a8,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe1fd,0x0000,0x0000, +0x0000,0x0000,0x0000,0xded4,0x0000,0xe0ac,0x0000,0x0000, +0x0000,0x0000,0x0000,0xede3,0x0000,0x0000,0xd3e1,0x0000, +0xdfc8,0x0000,0x0000,0x0000,0x0000,0xd9b6,0x0000,0xfdac, +0xefd3,0x0000,0x0000,0x0000,0xe4c1,0xf8eb,0x0000,0xdbac, +0x0000,0x0000,0x0000,0x0000,0xfcc6,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd8ad,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf6ba, +0x0000,0xdbdf,0xd3d3,0xf8c7,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xcace,0xf8c1,0xd2b4,0x0000,0x0000,0xdcb4, +0xfab9,0xcacf,0x0000,0xfcb3,0xeaea,0xeaeb,0xd0fa,0x0000, +0x0000,0x0000,0x0000,0x0000,0xede4,0x0000,0x0000,0xdde7, +0x0000,0x0000,0xdfc9,0x0000,0x0000,0x0000,0x0000,0xdfed, +0x0000,0x0000,0x0000,0x0000,0x0000,0xeebc,0x0000,0xefc1, +0x0000,0x0000,0xccd2,0x0000,0xdda4,0x0000,0x0000,0x0000, +0xdfca,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3f8,0xf1a8, +0x0000,0x0000,0x0000,0xcdb7,0x0000,0xefd4,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe4dd,0xdfee,0xcbac, +0xe9bc,0x0000,0x0000,0x0000,0x0000,0x0000,0xeaec,0x0000, +0x0000,0x0000,0xdfcb,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf9bf,0xd6af,0xd5c6,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcfaa,0x0000,0x0000,0xcea9,0x0000,0x0000,0xd6f8,0x0000, +0x0000,0x0000,0xf1b7,0xeef8,0x0000,0x0000,0x0000,0xd9d9, +0xf3df,0x0000,0xf8c8,0xcec6,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd5e6,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf4e6,0x0000,0x0000,0xe6c5,0xefd5, +0x0000,0x0000,0xcbef,0xfcdf,0x0000,0x0000,0x0000,0x0000, +/* 0x5f00 */ +0x0000,0xdca7,0x0000,0x0000,0xd6e7,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf8c9,0x0000,0x0000,0x0000,0x0000,0xe3d2, +0x0000,0xe3bd,0x0000,0xcfe1,0xf0c0,0xecda,0x0000,0xddd7, +0xfbf0,0x0000,0x0000,0xecac,0x0000,0x0000,0x0000,0xf0a9, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfad7,0xfbc1, +0x0000,0xd2c0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe5b0,0x0000,0x0000,0x0000,0xede5,0x0000,0x0000, +0x0000,0x0000,0xcbad,0x0000,0xf9b0,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf7a5,0x0000,0xcbae,0x0000,0xdaaf,0x0000,0xd8b6,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3a7,0xfbb2, +0x0000,0xfdc4,0x0000,0xecad,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xfba1,0x0000,0x0000,0x0000,0xe5e9,0xe9ee, +0x0000,0xf3f4,0xf8f3,0xf0c1,0xdeaf,0xf8b0,0x0000,0x0000, +0xf3e0,0xe7af,0x0000,0x0000,0x0000,0x0000,0x0000,0xdbad, +0x0000,0xe6b5,0x0000,0x0000,0xf9a8,0x0000,0x0000,0xddd8, +0xe8d9,0xefd6,0x0000,0x0000,0x0000,0xd3e2,0x0000,0xe2df, +0x0000,0x0000,0xfce0,0xd7c8,0xfdad,0x0000,0x0000,0x0000, +0xdfef,0xccd3,0xd3f9,0x0000,0x0000,0x0000,0x0000,0xd4f0, +0xdbc7,0xded5,0x0000,0x0000,0x0000,0x0000,0xf0f4,0x0000, +0xd5d0,0xe5d9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xfcc7,0xdcd6,0xe2e0,0x0000,0x0000,0x0000,0xdab0,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf3a3,0x0000,0xd3ec, +0x0000,0xf4cb,0x0000,0x0000,0x0000,0xfdc5,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe3fd,0x0000,0xf9b1,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd0fb,0xecdb,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf5bc,0xf2a4, +0xd8ce,0xd8cf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf5f7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf6e1,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd2b7,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xfbec,0x0000,0xddc8, +/* 0x6000 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4e8, +0x0000,0x0000,0xd2c1,0x0000,0x0000,0x0000,0xf8d7,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd6bb,0xded6,0x0000,0x0000, +0xf7bd,0xecae,0x0000,0x0000,0x0000,0xd0e1,0x0000,0xe0f5, +0xeab3,0x0000,0xced6,0x0000,0x0000,0x0000,0x0000,0xcca5, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xecf6,0xe2e1,0xe3be,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xfcc8,0x0000,0x0000, +0xcdf0,0x0000,0xf9f6,0x0000,0x0000,0xdff0,0x0000,0x0000, +0x0000,0xe5bf,0x0000,0x0000,0x0000,0xcebf,0x0000,0x0000, +0x0000,0x0000,0xfce1,0xedb0,0xfdd1,0xf6bb,0x0000,0x0000, +0xf9cf,0xebda,0xcac1,0x0000,0xd2b8,0xcdf1,0x0000,0xe3d3, +0xfde6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe6ed,0x0000,0x0000, +0x0000,0xe3fa,0x0000,0x0000,0xf0aa,0xf9d0,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xfce2,0x0000,0xf8a7,0x0000, +0x0000,0x0000,0xe1e5,0xeef9,0x0000,0x0000,0x0000,0xe7f6, +0xeaed,0x0000,0x0000,0xfcb4,0xf5c2,0x0000,0x0000,0xd7dc, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf0f5,0x0000,0xdde8,0xd3ed,0xf5fc,0x0000,0xdabf,0x0000, +0xccfb,0x0000,0x0000,0x0000,0xd3fa,0xf4a4,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xefd7,0x0000,0xd4c3, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xfbe3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xfbed,0x0000,0xe0ad,0x0000,0x0000,0xeaee, +0xfbb3,0xe4c2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf6e7,0xd2dd,0x0000,0xdfcc,0x0000,0x0000,0xfcc9,0x0000, +0x0000,0xe5a9,0xe0f6,0xf6b3,0x0000,0x0000,0x0000,0x0000, +/* 0x6100 */ +0x0000,0xe1fe,0x0000,0x0000,0x0000,0x0000,0xcbf0,0x0000, +0xeaef,0xeaf0,0x0000,0x0000,0x0000,0xdac0,0xf8b4,0xebf2, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe4c3,0x0000,0x0000, +0x0000,0x0000,0xe9d7,0xe4f1,0x0000,0x0000,0x0000,0xcaef, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xced7, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xfcca,0x0000,0x0000,0x0000,0xf3e1,0x0000,0x0000,0xcbc4, +0x0000,0x0000,0x0000,0x0000,0xe3e5,0x0000,0xcbc5,0xeab4, +0x0000,0x0000,0xe9bd,0x0000,0xd7c9,0x0000,0x0000,0xebdb, +0xedb1,0x0000,0xccc3,0xf7be,0xfccb,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf8f4,0x0000,0xd9b7,0x0000,0x0000, +0xf3d3,0xf3d4,0x0000,0x0000,0x0000,0xf7e4,0x0000,0xf7d1, +0x0000,0x0000,0xd8b7,0xceb1,0xcac2,0x0000,0x0000,0xfbb4, +0xcbc6,0x0000,0x0000,0xf0f6,0x0000,0x0000,0xd5e7,0x0000, +0xead0,0x0000,0x0000,0x0000,0x0000,0x0000,0xccd4,0xcbaf, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf4aa,0xe9af,0x0000, +0x0000,0xf5c3,0xe9d8,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xdde9,0x0000,0x0000,0x0000,0xf1f3,0x0000, +0xd5fb,0xdebb,0x0000,0x0000,0xf4fb,0x0000,0x0000,0x0000, +0xfdf3,0xfdf2,0xf7a6,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xddc9,0x0000,0x0000,0xd4d3, +0x0000,0xcca8,0x0000,0xdac1,0xccd5,0x0000,0xd9e4,0x0000, +0x0000,0x0000,0xfaca,0x0000,0x0000,0x0000,0xe5e3,0x0000, +0x0000,0x0000,0xd3bc,0x0000,0x0000,0x0000,0xcaf0,0x0000, +0x0000,0x0000,0x0000,0xd0c4,0x0000,0x0000,0x0000,0xcad0, +0xfaab,0xebeb,0xe7f8,0xd9e5,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd1d7,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf3a4,0x0000,0x0000,0x0000,0xd4fb,0xfce3, +0xfad8,0x0000,0xf3d5,0x0000,0xcfab,0x0000,0x0000,0xebf3, +0xd5fc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3d4, +0xcdfc,0x0000,0xd9e6,0x0000,0xe2f9,0xe2a1,0xebd4,0x0000, +0xe0f7,0xe4b2,0xccfc,0x0000,0x0000,0x0000,0xfbe4,0x0000, +0x0000,0x0000,0xf4ab,0x0000,0x0000,0x0000,0x0000,0xd0bd, +0x0000,0xcaf1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xefb8,0x0000,0x0000,0x0000,0xd7c0,0x0000, +0xeefa,0xfdf4,0x0000,0x0000,0xd3e3,0x0000,0xfbc2,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5e8,0xdbae, +0xe1b6,0xf8b7,0x0000,0x0000,0x0000,0x0000,0x0000,0xe0bf, +0xfbc3,0xddea,0x0000,0xe2a2,0x0000,0xeea6,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf6e8,0x0000,0x0000,0x0000,0x0000, +0xf6f5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xddca,0x0000, +0x0000,0xd0e2,0x0000,0x0000,0x0000,0x0000,0xdda6,0x0000, +0x0000,0xddeb,0x0000,0x0000,0xe4f9,0x0000,0x0000,0xe3af, +0xd0fc,0x0000,0x0000,0x0000,0xf4fc,0x0000,0x0000,0x0000, +0x0000,0xccbc,0xf7ea,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe5e4,0xdff1,0x0000,0x0000,0xf7e1,0x0000,0xf9f7, +0xefb9,0x0000,0x0000,0xf8d8,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf9a9,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf8d9,0x0000,0x0000,0x0000,0xeebd,0x0000,0x0000, +0x0000,0xd8c6,0x0000,0x0000,0xe4e3,0xf5ce,0x0000,0x0000, +0x0000,0x0000,0xddd9,0x0000,0x0000,0x0000,0x0000,0xd9e7, +0xd2b9,0xd5c3,0x0000,0x0000,0xdae5,0xdad0,0x0000,0xd1d9, +0xced8,0x0000,0xcbde,0xf4ac,0xdafb,0x0000,0xf6e9,0xe8f3, +0xcfac,0xf0f0,0x0000,0xf4fd,0xdbc8,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xcec0,0xe3d4,0xd1cf,0xf1f5, +0x0000,0xcdf2,0x0000,0xcfeb,0x0000,0x0000,0x0000,0xcdb8, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe3a6,0xd1da, +/* 0x6300 */ +0x0000,0xf2a5,0x0000,0x0000,0x0000,0x0000,0x0000,0xf2a6, +0x0000,0xe4ce,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xd3fb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf1a9,0x0000,0x0000,0x0000,0xf2c9, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xefd8,0xe6c9,0x0000,0xd8b8,0xfaf3,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf3b5,0x0000,0x0000,0xf8a4,0x0000,0x0000,0xd1f3, +0xe6c8,0x0000,0x0000,0x0000,0x0000,0xf8da,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdce9, +0xded7,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbdf,0x0000, +0x0000,0x0000,0xcfec,0x0000,0x0000,0x0000,0x0000,0xf4df, +0x0000,0x0000,0xd1f4,0xd2ba,0x0000,0x0000,0x0000,0xdff2, +0x0000,0x0000,0x0000,0xe1b7,0x0000,0x0000,0x0000,0x0000, +0xe2a3,0xd3fc,0x0000,0x0000,0xede6,0x0000,0x0000,0x0000, +0x0000,0x0000,0xdbc9,0x0000,0x0000,0x0000,0xe4fa,0x0000, +0xcfde,0x0000,0x0000,0xced0,0x0000,0x0000,0x0000,0x0000, +0xd5d3,0xf3f5,0xf7ae,0x0000,0x0000,0xefc8,0x0000,0xcdf3, +0xf5cf,0xe5f3,0xf0c2,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcad1,0x0000,0x0000,0x0000,0xeaf1,0x0000,0xd0a6,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9da, +0xf0ab,0x0000,0x0000,0x0000,0x0000,0x0000,0xebe7,0x0000, +0x0000,0x0000,0xe5c0,0xfcb5,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe4c4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xcca9,0xfdc6,0x0000, +0x0000,0x0000,0x0000,0x0000,0xeab5,0x0000,0xe5aa,0xdfba, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x6400 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe1df,0x0000,0xdad1, +0x0000,0x0000,0x0000,0x0000,0xe1b8,0x0000,0xe8f4,0xd3fd, +0x0000,0x0000,0x0000,0x0000,0xe2a4,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf2ca,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xdae6,0xf7b3,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xfdcd,0x0000,0x0000,0x0000,0xf3b6,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xeed7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf5c4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xd8a4,0x0000,0x0000,0x0000,0x0000,0x0000,0xf2a7, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd9b8,0xd9b9,0xefc9,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd6ce,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf7cb,0xdfae,0xe8f5,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd2b5,0x0000,0x0000,0x0000,0xd3d5,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf4cc,0xdafc,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd9e8,0x0000,0xf7eb,0xf5c9,0x0000, +0xf3bc,0x0000,0xdad2,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd3b5,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe8b6,0x0000,0x0000,0xd6cf,0xf4ba,0x0000,0xf7c9, +0x0000,0x0000,0xccaa,0x0000,0x0000,0xf0c3,0xccd6,0x0000, +0x0000,0x0000,0xd0d3,0x0000,0xd3bd,0x0000,0x0000,0x0000, +0xdbfb,0x0000,0xcbe0,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xd3e4,0xf6f7,0x0000,0x0000,0xd5ba,0xf3cd,0xcbe1, +0x0000,0x0000,0x0000,0x0000,0xebf4,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf4ad,0x0000,0xfcaa,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf7ec,0x0000,0x0000,0x0000,0xe8f6,0x0000, +0xdae7,0x0000,0x0000,0x0000,0xf7cc,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe5c1,0x0000,0x0000,0x0000,0x0000,0xe0ee,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd5fd,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xcee6,0xfcab,0xd5bb,0x0000,0x0000,0xf2a8, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2a5,0xcdb9, +0xeaf2,0xcbc7,0x0000,0xcdf4,0x0000,0x0000,0xdbaf,0xefd9, +0x0000,0x0000,0x0000,0x0000,0x0000,0xcdba,0x0000,0x0000, +0xfcf9,0x0000,0x0000,0x0000,0x0000,0xdff3,0xcee7,0xdac2, +0x0000,0xcfad,0x0000,0x0000,0x0000,0x0000,0xe7f9,0xf8a8, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf3e2,0x0000, +0x0000,0x0000,0xcaf2,0xdfa4,0x0000,0x0000,0xd4c4,0x0000, +0x0000,0x0000,0x0000,0x0000,0xccd7,0xe5c2,0x0000,0x0000, +0x0000,0x0000,0xcdbb,0x0000,0xefda,0xeed8,0x0000,0xdda7, +0xe2a6,0x0000,0x0000,0x0000,0x0000,0x0000,0xe0c0,0x0000, +0x0000,0x0000,0xd6b0,0xf8ca,0x0000,0xfcfa,0x0000,0xd9fe, +0x0000,0x0000,0x0000,0x0000,0xdeb0,0x0000,0x0000,0x0000, +0xddec,0xdae8,0x0000,0x0000,0x0000,0x0000,0x0000,0xd4e0, +0x0000,0xd6f9,0x0000,0xcdd7,0xded8,0x0000,0x0000,0xf2f8, +0x0000,0xe4d6,0x0000,0x0000,0xd0c5,0xf4ae,0x0000,0xdda8, +0x0000,0x0000,0x0000,0xedc5,0xf3d6,0x0000,0x0000,0xded9, +0xe3e6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3a8, +0x0000,0xdbb0,0x0000,0x0000,0xe5da,0xe3bf,0x0000,0x0000, +0x0000,0xdbb1,0x0000,0x0000,0x0000,0xd5e9,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe0c1,0xefdb,0x0000,0x0000,0xf0e9, +0x0000,0x0000,0xd7b2,0x0000,0x0000,0x0000,0x0000,0xd0fd, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd9e9,0x0000,0x0000,0xd0fe,0x0000,0xeced,0xd3a9,0x0000, +0xf2a9,0xf0c4,0x0000,0x0000,0xe2e2,0xe9ef,0x0000,0x0000, +0x0000,0xf9d1,0x0000,0x0000,0xe9d9,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe8da,0xdac3,0xdac4,0xd4c5,0x0000,0xe7fa, +/* 0x6600 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcde0,0xe3b0, +0x0000,0xdbb2,0xfbc4,0x0000,0xf3e3,0x0000,0xd9a5,0xfbe7, +0xddcb,0xd0d4,0x0000,0xe6b6,0xe0ae,0xfdda,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdcb5,0xe0f8, +0xe7b1,0x0000,0x0000,0x0000,0x0000,0xf5f0,0x0000,0xd8dc, +0xedc6,0x0000,0x0000,0x0000,0x0000,0xe1b9,0x0000,0xe3c0, +0xf9c0,0xe9f0,0x0000,0x0000,0xd9db,0x0000,0xf3e4,0x0000, +0x0000,0x0000,0xdcb6,0xe4e9,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf0c5,0xe3c1,0xfccc,0xfccd,0x0000,0x0000,0x0000, +0x0000,0xf2cb,0x0000,0xf2cc,0x0000,0x0000,0x0000,0xe4cf, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf1db,0x0000,0xfad9,0x0000,0xf1b8,0xfdf5,0xe0f9, +0x0000,0x0000,0x0000,0x0000,0xe7fb,0xfcb7,0xfce4,0xfbc5, +0xe3e7,0xd8b9,0x0000,0xf6f8,0x0000,0x0000,0xdcc5,0xccd8, +0x0000,0x0000,0x0000,0xe0af,0xf4e7,0x0000,0xefdc,0xcffc, +0xefdd,0x0000,0xf2aa,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xfdbe,0x0000,0x0000,0xcaac, +0xfdbb,0xfdc7,0x0000,0x0000,0x0000,0x0000,0xe7b2,0x0000, +0xead1,0xdff4,0x0000,0x0000,0x0000,0x0000,0xd1ec,0xe4de, +0xe5c3,0x0000,0x0000,0x0000,0x0000,0xd9a6,0x0000,0x0000, +0xcdbc,0x0000,0xf3e5,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xedd5,0x0000,0x0000,0xd9ba,0x0000, +0x0000,0x0000,0xede7,0xfbb5,0xf8ec,0x0000,0x0000,0x0000, +0x0000,0xe0e7,0x0000,0xccd9,0x0000,0x0000,0xd4c6,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe7a5,0x0000,0xd5f5,0xd3be, +0x0000,0xfcfb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4f2,0x0000, +0x0000,0xdff5,0x0000,0x0000,0xe8f8,0xf8ed,0x0000,0x0000, +0xcec7,0x0000,0x0000,0x0000,0x0000,0x0000,0xfdf6,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe8d8,0x0000,0xcdd8,0xe7d6,0xccda,0x0000,0x0000,0xcae3, +0xdff6,0xf0c7,0xf0c6,0x0000,0xd8ba,0x0000,0xf1f4,0xf4f0, +0xf5cc,0x0000,0x0000,0xfce5,0x0000,0x0000,0x0000,0x0000, +0xeac5,0xeaf3,0x0000,0xdddb,0x0000,0xdcd7,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xdefd,0xf2f9,0x0000,0xd5c7, +0x0000,0x0000,0x0000,0xd8d0,0x0000,0xf0c8,0xd1a1,0xd1a2, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9d4,0xd6e8, +0xd9ca,0x0000,0xdab1,0xd8c7,0xdce2,0xf3ce,0xf5f4,0x0000, +0x0000,0xf1b9,0x0000,0x0000,0xdad3,0x0000,0xf6ea,0x0000, +0x0000,0x0000,0xcff5,0x0000,0x0000,0xfdae,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcad2,0x0000, +0x0000,0xdfb4,0x0000,0x0000,0x0000,0x0000,0xd7dd,0xfaba, +0xeea7,0xf5bd,0x0000,0xf8f5,0x0000,0x0000,0xede8,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd4e1,0x0000,0xd1a3,0xe1d6, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf9f8,0x0000,0xdbca, +0xcbf9,0xd4d4,0x0000,0xd9dc,0x0000,0xeebe,0x0000,0xf7ed, +0x0000,0x0000,0x0000,0xd2ee,0x0000,0x0000,0xe1e6,0xf7f9, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdded, +0x0000,0xe8db,0x0000,0xdbb3,0x0000,0x0000,0x0000,0xd1f7, +0xe0b0,0x0000,0x0000,0xd4e2,0x0000,0xf6d7,0x0000,0xd7f9, +0x0000,0x0000,0xd8dd,0x0000,0xcdfd,0xf2ab,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcdbd, +0xf8c2,0x0000,0x0000,0xf2ac,0x0000,0x0000,0xcaad,0xcaae, +0xcfae,0x0000,0x0000,0x0000,0x0000,0x0000,0xe3c2,0x0000, +0x0000,0x0000,0x0000,0x0000,0xdcb7,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdbda, +0xd9bb,0xcaf3,0xf6d3,0xe6f8,0xeaf5,0x0000,0x0000,0x0000, +0x0000,0x0000,0xeaf6,0x0000,0x0000,0xf6f9,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xcfaf,0x0000,0x0000,0xcad3,0x0000,0x0000,0xcaaf, +0xd2b0,0xf1ba,0x0000,0xd7b3,0xe3c3,0xf3fd,0xdeda,0x0000, +0x0000,0x0000,0x0000,0xdedb,0x0000,0x0000,0xefde,0x0000, +/* 0x6800 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe2e3,0xeefb,0x0000,0x0000,0xdff7,0xd7ca, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xcee8,0xdbdb,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf1bb,0x0000,0x0000,0x0000,0x0000,0xe9f1, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xfab7,0xd0c6,0x0000,0x0000,0xccab,0xeea8,0x0000,0x0000, +0xcbfa,0xf9f9,0xccfd,0xd3fe,0x0000,0x0000,0x0000,0x0000, +0xe4d0,0x0000,0x0000,0x0000,0x0000,0x0000,0xf2ee,0x0000, +0xd4d5,0xdfcd,0x0000,0xfcb8,0xd1d0,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf2cd,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf7d2,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcad4, +0x0000,0xd5d9,0x0000,0x0000,0x0000,0xd8de,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcdd9, +0x0000,0x0000,0x0000,0xeea9,0xf6bc,0x0000,0x0000,0xccdb, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf0c9,0x0000,0xfcfc, +0x0000,0xe8c9,0xf4fe,0x0000,0x0000,0x0000,0x0000,0xe7fc, +0xd7de,0x0000,0x0000,0x0000,0x0000,0xdedc,0x0000,0xf0ac, +0xccfe,0xcde1,0x0000,0xe1ba,0x0000,0xdbef,0xdab2,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd1a5,0xdcb8,0x0000,0x0000, +0x0000,0xd8f6,0x0000,0xd1a4,0x0000,0xcde2,0x0000,0x0000, +0x0000,0x0000,0xdcea,0x0000,0x0000,0xf0f7,0x0000,0xf0ca, +0xd0be,0x0000,0xdddc,0x0000,0x0000,0x0000,0x0000,0xd4d6, +0xd3d6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xedd0, +0xcda1,0x0000,0x0000,0x0000,0x0000,0x0000,0xdfb5,0x0000, +0x0000,0x0000,0xdff8,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xd4a1,0xceb2,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe8ca,0x0000,0x0000,0x0000,0x0000,0xebf5,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe3d5,0xf5d0,0x0000, +0x0000,0x0000,0xf5a1,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9a7, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe5ab,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe6cb,0x0000,0xf5f1, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe5c5,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf9a3,0xe0db,0xf6eb,0x0000,0xcbf1, +0x0000,0xd9ea,0xf5a2,0x0000,0x0000,0x0000,0xd7d1,0x0000, +0xd1f8,0xeaf8,0xeaf9,0xdab3,0x0000,0x0000,0x0000,0x0000, +0xefdf,0x0000,0x0000,0xf1ef,0x0000,0xe5f6,0xeebf,0xe2e4, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd0bf,0x0000,0xfaac, +0xf5d1,0xe7b3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe9be,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf2ce,0xdbb4,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xfcce,0x0000,0xddee, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe7b4,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd7b4,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf7b4,0x0000,0x0000,0x0000,0x0000, +0x0000,0xcdbe,0x0000,0xdae9,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xcfb0,0xf7d9,0xf3e6,0x0000,0x0000, +0xced9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xceaa,0x0000,0xcbc8,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd0a7,0x0000,0xf0cb,0x0000,0xd0c7, +/* 0x6a00 */ +0x0000,0x0000,0xe4c5,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xdbe0,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xd5da,0x0000,0xd7a7,0x0000,0x0000,0x0000,0xeec0, +0x0000,0xf8f6,0x0000,0x0000,0x0000,0x0000,0xf5d2,0xede9, +0x0000,0xd9bc,0x0000,0xe5c6,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf5a3,0x0000,0x0000, +0xdad4,0xe2a7,0xfbfc,0x0000,0x0000,0xf1dc,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xcaf4,0x0000,0x0000,0x0000, +0xe8fa,0x0000,0x0000,0xcee9,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe9f8,0xe2e5,0x0000,0x0000,0x0000,0x0000, +0xd0b9,0xd4f2,0x0000,0x0000,0x0000,0x0000,0x0000,0xd1a6, +0x0000,0xdfce,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xfcf4,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd3aa,0x0000,0x0000,0x0000,0xccac,0x0000,0x0000,0x0000, +0x0000,0xefe0,0x0000,0x0000,0x0000,0xe5e5,0xd0d5,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdbfc, +0x0000,0x0000,0x0000,0x0000,0xfce6,0x0000,0x0000,0x0000, +0x0000,0x0000,0xcbfe,0xedea,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xdeb1,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf9e3,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd4a2,0xcff6,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd6d0,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd5ea,0xf1ee,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfacb,0x0000, +0x0000,0x0000,0x0000,0xe5a1,0x0000,0x0000,0x0000,0x0000, +/* 0x6b00 */ +0x0000,0x0000,0x0000,0x0000,0xd5b1,0x0000,0x0000,0x0000, +0x0000,0x0000,0xcfed,0x0000,0xedeb,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd5b2,0x0000,0x0000,0x0000,0xd5bc,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xfde2,0xf3ad,0x0000,0xfddb,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe9b0,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd1a7,0x0000,0x0000,0xfde3,0xceb3,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfde4,0xface, +0x0000,0x0000,0x0000,0x0000,0xcab0,0x0000,0xf7a7,0x0000, +0xcfb1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe6a2, +0x0000,0xfcb6,0xf2ad,0xefe1,0xf3ae,0xdcc6,0xd9eb,0x0000, +0x0000,0x0000,0xe8e0,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe1a8,0x0000,0x0000,0x0000,0x0000,0xd5f6, +0xcffd,0x0000,0x0000,0xdedd,0x0000,0x0000,0x0000,0xd9d1, +0x0000,0x0000,0x0000,0xe4ea,0xf2cf,0x0000,0xf7bf,0x0000, +0x0000,0xe2e6,0xe2a8,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe3d6,0x0000, +0xedd1,0x0000,0x0000,0x0000,0x0000,0x0000,0xe9f9,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6b1,0xdeb2, +0x0000,0x0000,0xe0e8,0x0000,0x0000,0xd3ab,0x0000,0xebdc, +0x0000,0x0000,0xdfaf,0x0000,0xcac3,0x0000,0x0000,0xeefc, +0x0000,0xfdc3,0x0000,0x0000,0x0000,0xebf6,0xcfb2,0x0000, +0x0000,0x0000,0x0000,0xd9ec,0x0000,0xd9bd,0x0000,0xd8df, +0x0000,0x0000,0xd4b8,0xebbe,0xddef,0x0000,0xddf0,0xddf1, +0xddf2,0x0000,0x0000,0xd9be,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xfbc6,0xcfb3,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x6c00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xeefd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4ab, +0x0000,0xdac5,0x0000,0xd8ec,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd1a8,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe2a9,0x0000,0x0000,0xdebc, +0xe7b5,0x0000,0x0000,0x0000,0x0000,0x0000,0xdbf0,0x0000, +0xefe2,0xf1f0,0xcfb4,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdbf1,0x0000, +0xe0b1,0x0000,0x0000,0x0000,0x0000,0xdfa5,0x0000,0xf9d2, +0x0000,0x0000,0xe7fd,0x0000,0x0000,0xe6a3,0xfbf1,0xcbb0, +0xf2ae,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcde7,0x0000,0xe8dc,0x0000,0x0000,0xe7d7,0x0000,0x0000, +0xf7c0,0x0000,0xd0e3,0x0000,0x0000,0x0000,0xdaa1,0x0000, +0x0000,0x0000,0xccbd,0x0000,0x0000,0xd1a9,0xddcc,0x0000, +0x0000,0xe3fe,0xd1aa,0xe8aa,0x0000,0xeab6,0xf9fa,0xe6cc, +0xf6d8,0x0000,0x0000,0x0000,0xd4c7,0x0000,0x0000,0x0000, +0xd9cb,0x0000,0xd9d2,0xd3cb,0xd8f7,0xdaa9,0xf5f8,0x0000, +0x0000,0xdede,0xf2af,0xf8a9,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd8c8,0x0000,0x0000,0xeec1,0x0000, +0x0000,0x0000,0x0000,0xf9c1,0x0000,0x0000,0x0000,0x0000, +0xddf3,0xeafa,0x0000,0xf6bd,0xe1bb,0xcdbf,0xf4d4,0xe6cd, +0x0000,0xfccf,0xfba2,0x0000,0xe0dc,0x0000,0x0000,0x0000, +0x0000,0xf4bb,0xdad5,0x0000,0xf9b2,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xfbf2,0x0000,0xdbf6,0x0000,0xdedf, +0x0000,0x0000,0x0000,0xdbf2,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf8dc,0xf7ee,0xebe8,0x0000,0xd2fa,0x0000,0x0000, +0xf1bc,0x0000,0x0000,0xfada,0x0000,0x0000,0xdaea,0xdac6, +0xf7c1,0x0000,0x0000,0xe7b6,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x6d00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe5c7,0xd6ac,0x0000,0x0000,0x0000, +0x0000,0xdcc7,0x0000,0x0000,0x0000,0x0000,0x0000,0xe1a9, +0x0000,0xe2aa,0x0000,0xd5a6,0x0000,0x0000,0xd4d7,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf2d0,0x0000,0xeafb, +0x0000,0xe0dd,0xfbf3,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf1bd,0x0000,0x0000,0xe2e7,0xfdd7,0x0000, +0xcec8,0xeab7,0x0000,0xfcc0,0x0000,0xfde7,0xf7ef,0x0000, +0x0000,0xd7b5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xefba,0xf1dd,0x0000,0xdeb3,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe8cb,0x0000,0x0000,0xf8dd,0x0000, +0x0000,0xfbc7,0xd5c8,0x0000,0xd7df,0x0000,0xdda9,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe9b1,0x0000,0x0000,0xfaad, +0xf6d9,0xfaf4,0x0000,0x0000,0x0000,0x0000,0x0000,0xf8aa, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe6ee,0x0000,0xccdc, +0xe1bc,0xe0ef,0x0000,0x0000,0xe9bf,0xfcfd,0xe6ce,0x0000, +0x0000,0xe1d7,0x0000,0xe6cf,0x0000,0xf4f1,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4f3, +0x0000,0x0000,0xe4fb,0x0000,0x0000,0xf9e4,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xefe3,0x0000,0x0000,0xcfee,0xf6be,0xe0b2,0xfcfe,0xd1ab, +0x0000,0x0000,0x0000,0xd7fa,0x0000,0x0000,0x0000,0xfbc8, +0x0000,0xe2d7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd4a3,0xf0f8,0xd7a8,0x0000,0x0000,0x0000,0xe1e7,0x0000, +0x0000,0xd3bf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xefe4,0x0000,0xd7c5,0xebe2,0x0000,0x0000,0xfce7,0x0000, +0x0000,0xe4a2,0x0000,0xe2e8,0x0000,0xe6d0,0x0000,0xfbe8, +0xf4e8,0xe5f4,0xf4bc,0xf4d5,0x0000,0x0000,0x0000,0x0000, +/* 0x6e00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdfb6, +0x0000,0xfcb9,0xeec2,0xcaf5,0x0000,0x0000,0x0000,0xefe5, +0xcbe2,0xd4a4,0x0000,0xdee0,0xdafd,0xe4c6,0xe8be,0x0000, +0x0000,0x0000,0x0000,0xe0de,0xf6b4,0xead2,0x0000,0xf9fb, +0x0000,0x0000,0xe0c2,0x0000,0xcae4,0x0000,0xe7b7,0x0000, +0xeafd,0x0000,0xd9dd,0x0000,0xdab4,0xeeaa,0xfbe9,0x0000, +0x0000,0x0000,0x0000,0xdbcb,0xdab5,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf1be,0x0000,0x0000,0xd3ac,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfbc9,0x0000, +0xdfcf,0x0000,0x0000,0xd3c0,0xe3d7,0x0000,0xefe6,0xfcd0, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe9c0, +0x0000,0x0000,0x0000,0xf5d3,0x0000,0x0000,0xecdc,0xf7b7, +0x0000,0x0000,0xeab8,0xd1f9,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xdcc8,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xeab9,0x0000,0x0000,0x0000,0x0000,0x0000,0xf1de,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd7b6,0xcfb5,0x0000,0xd9a8, +0x0000,0x0000,0xecee,0x0000,0x0000,0xddaa,0x0000,0x0000, +0x0000,0x0000,0xcda2,0xe8ae,0x0000,0x0000,0x0000,0xe1bd, +0x0000,0xf2d1,0x0000,0x0000,0x0000,0x0000,0xe9c1,0x0000, +0x0000,0x0000,0xd2fc,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xdbb5,0x0000,0xf3e7,0xd8fe,0x0000,0x0000, +0x0000,0xfcd1,0x0000,0xedb2,0xf4af,0x0000,0xfba3,0x0000, +0x0000,0xfcc1,0x0000,0xeeab,0xd4a5,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf4f2, +0x0000,0x0000,0x0000,0x0000,0xeed9,0x0000,0x0000,0x0000, +0xfbca,0x0000,0x0000,0x0000,0x0000,0x0000,0xcde3,0xd8bb, +/* 0x6f00 */ +0x0000,0xe5db,0xf8f7,0x0000,0x0000,0x0000,0xf6d4,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd7a9, +0x0000,0xcbc9,0x0000,0x0000,0xe6d1,0xf0cc,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd8ae,0x0000,0xf9d3,0xd5fe,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd8bc,0xf2b0,0x0000,0x0000,0x0000, +0x0000,0xe2ab,0xf3e8,0x0000,0x0000,0x0000,0x0000,0x0000, +0xefc2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xedec, +0x0000,0xe7b8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xdafe,0x0000,0x0000,0xccbe,0x0000,0x0000,0xf2fc, +0xdaeb,0x0000,0xe2d8,0xedd6,0x0000,0x0000,0xd6d1,0xe0b3, +0x0000,0x0000,0xfcd2,0x0000,0xebc8,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd3c1,0xf0cd,0x0000, +0xcff7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xedd2,0x0000,0xd4d8,0xdcc9,0xd7f1,0x0000, +0x0000,0xdfbb,0x0000,0x0000,0xf3a5,0x0000,0x0000,0x0000, +0xf4cd,0x0000,0x0000,0x0000,0x0000,0xf1bf,0xf8b1,0x0000, +0xe9fa,0x0000,0x0000,0x0000,0xfbcb,0x0000,0x0000,0xcad5, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf9d4,0xf7ca,0x0000,0x0000,0xd6c8, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfce8,0xf3bd, +0x0000,0xeefe,0x0000,0xe7fe,0x0000,0x0000,0x0000,0x0000, +0x0000,0xd3c2,0x0000,0x0000,0x0000,0x0000,0xd3b6,0x0000, +0xccad,0xf6fa,0xd6b2,0xd2d8,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe7d8,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe3a5,0x0000,0x0000, +0x0000,0x0000,0xe7b9,0x0000,0x0000,0x0000,0x0000,0xf0ad, +0xfbcc,0xeba1,0x0000,0x0000,0xd4a6,0x0000,0x0000,0x0000, +0x0000,0xfbcd,0x0000,0xd5bd,0xf1df,0x0000,0x0000,0xf6fb, +0x0000,0xdeb4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5eb,0x0000, +/* 0x7000 */ +0x0000,0xe5c8,0x0000,0x0000,0x0000,0xfba4,0xd4b9,0x0000, +0x0000,0xdee1,0x0000,0xe4a3,0x0000,0x0000,0x0000,0xd7b7, +0x0000,0xf8ee,0x0000,0x0000,0x0000,0xdeb5,0x0000,0x0000, +0xd6d2,0x0000,0xf9d5,0xe7ba,0xebd5,0xd5f7,0xefe7,0xe1be, +0x0000,0x0000,0x0000,0xfaae,0x0000,0x0000,0x0000,0xd6e9, +0xd6ee,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe7bb, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeccb, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5b3,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xceb4,0x0000,0x0000,0x0000, +0xfba5,0xe1ee,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf7a8,0x0000,0x0000,0x0000,0x0000,0xfbce,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd8bd,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xfbfd,0x0000,0x0000,0x0000,0x0000, +0xfce9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcfb6,0x0000,0x0000,0x0000,0xedc7,0xeeac,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xccdd,0x0000,0x0000, +0x0000,0x0000,0xf6a7,0x0000,0x0000,0x0000,0xe6fa,0x0000, +0x0000,0x0000,0xf5a4,0x0000,0x0000,0x0000,0x0000,0x0000, +0xfddc,0xedb3,0xcec9,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xefe8,0x0000,0x0000,0xe1bf,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xfadb,0xcbe3,0xf7a9,0x0000,0xfba6, +0x0000,0x0000,0x0000,0xdcb9,0x0000,0x0000,0x0000,0xf1c0, +0xedc8,0xefc3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd6ad,0x0000,0x0000,0xfdce,0x0000,0x0000,0x0000,0xe8a1, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xfbf4,0xd5a7,0x0000,0x0000,0x0000,0xf1f6,0x0000,0xe6d3, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xccde,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf8b2,0x0000,0x0000,0x0000,0xdceb,0x0000,0x0000, +/* 0x7100 */ +0x0000,0x0000,0x0000,0x0000,0xfdb6,0x0000,0x0000,0x0000, +0x0000,0xe5ea,0x0000,0x0000,0xf1e0,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xdbcc,0xddcd,0x0000,0x0000,0x0000,0xd4c8,0x0000, +0x0000,0xd9ed,0x0000,0x0000,0x0000,0x0000,0xf5a5,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe6fb,0x0000,0x0000,0x0000,0x0000,0x0000,0xe6d4,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfdc8, +0x0000,0xd6a1,0xfdbf,0x0000,0xfcd3,0x0000,0xefa1,0x0000, +0xe7bc,0x0000,0x0000,0x0000,0x0000,0x0000,0xd1ee,0x0000, +0x0000,0xe6d5,0x0000,0x0000,0xe9f2,0x0000,0xdfb0,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd8e0,0xfcba,0xfdaf,0xf0ce, +0x0000,0xdbe1,0x0000,0x0000,0xe5c9,0x0000,0xedb4,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe0c3,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe3d8,0x0000,0x0000,0x0000, +0x0000,0xe9fb,0xeaa8,0x0000,0x0000,0x0000,0x0000,0xfdb7, +0x0000,0x0000,0xfba7,0x0000,0xe9c2,0x0000,0x0000,0x0000, +0x0000,0xfdf7,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2d9, +0x0000,0x0000,0xdcec,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe8a2,0x0000,0x0000,0x0000, +0x0000,0xe6f0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xfdf8,0xfdf9,0x0000,0x0000,0x0000,0xf6bf,0x0000, +0x0000,0xe7a7,0x0000,0xe6d7,0x0000,0x0000,0x0000,0x0000, +0xd4f3,0xd4c9,0x0000,0x0000,0x0000,0x0000,0xd6fa,0x0000, +0xd7f2,0x0000,0xe1c0,0x0000,0xdbe2,0xe6d8,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe7bd, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf0cf,0xf3be,0xe2ac, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf5b7,0xe0f0,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xfdb8,0xe3e8,0x0000,0xd4a7,0xe8fc, +0xfad2,0x0000,0x0000,0x0000,0x0000,0x0000,0xf8ef,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd6d3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd5b4,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf0d0,0x0000,0xf7f0,0xeeb3,0x0000,0x0000, +0xeaba,0x0000,0xead3,0x0000,0x0000,0xedc9,0xddab,0x0000, +0x0000,0x0000,0xe5ac,0xfda1,0x0000,0xdfd0,0xecb3,0x0000, +0xdfd1,0x0000,0x0000,0x0000,0x0000,0x0000,0xeded,0xf8b8, +0xf7fa,0x0000,0x0000,0x0000,0xf8ab,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf4e0,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd4ba,0xe4b3,0x0000,0xe9da,0x0000,0xdeb6,0x0000,0xd9bf, +0x0000,0xd9c0,0xd6ef,0x0000,0x0000,0x0000,0x0000,0xd9cc, +0x0000,0xdaaa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xdfe5,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf7e5,0x0000,0x0000,0x0000,0xccb2,0x0000,0x0000, +0xdff9,0xd7e0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd4bb,0x0000,0x0000,0x0000,0x0000,0xfdfa, +0x0000,0x0000,0x0000,0x0000,0xccb3,0x0000,0x0000,0xdbf3, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xdfd2,0x0000,0xceca,0x0000,0xeeda,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4e4,0x0000, +0xfbcf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfb7, +0x0000,0xeec3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xceea,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe2ad,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd7e1,0xfaf5,0x0000,0x0000,0xd5c9,0xf8ac,0x0000,0x0000, +/* 0x7300 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe7d9,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf3e9,0x0000, +0x0000,0x0000,0x0000,0xd8ed,0xe3c4,0xf0f1,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe8e5,0x0000,0x0000, +0x0000,0xe0fa,0xeec4,0xd9de,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeba2,0xeba3, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfcc2,0xeabb, +0x0000,0x0000,0x0000,0x0000,0xe8ab,0xdee2,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xedef,0x0000,0xe8a3,0x0000,0x0000,0x0000,0x0000,0xcff1, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd4bc,0x0000,0xfcea,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe7be,0x0000,0xfcf2,0x0000,0x0000,0xd6b4,0x0000,0x0000, +0xe2ae,0x0000,0xd3b7,0xfacc,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xfadc,0x0000,0xedb5,0xe1e3, +0x0000,0xe8ac,0x0000,0xe8dd,0x0000,0x0000,0xefe9,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf4bd,0x0000,0xcfb8,0xe9db, +0xd1ac,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdac7, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xebc9, +0x0000,0xe8cc,0x0000,0x0000,0x0000,0xdeb7,0x0000,0x0000, +0x0000,0x0000,0xd6bc,0xd3e5,0x0000,0x0000,0x0000,0x0000, +0x0000,0xfadd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xdad6,0x0000,0xcab1,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xdac8,0xdfa6,0x0000,0xf9b3,0xf2d2,0x0000,0xcac4, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcecb,0x0000, +0x0000,0xcdf5,0x0000,0x0000,0x0000,0xfdb0,0xd5a8,0x0000, +0xf1c1,0x0000,0x0000,0xe2e9,0xdcca,0xecb4,0xfac0,0x0000, +0x0000,0xfba8,0xd0a8,0x0000,0x0000,0xdaec,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9ee, +0x0000,0xe0fb,0x0000,0x0000,0x0000,0xefea,0xfade,0x0000, +/* 0x7400 */ +0x0000,0xe0c4,0x0000,0xcfb9,0x0000,0xd5ca,0xd7e2,0xe2af, +0x0000,0xd7b8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe8cd,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf6da,0x0000,0x0000,0x0000,0x0000, +0xefa2,0xe2da,0xf6fc,0x0000,0x0000,0xfbd0,0xd1ad,0x0000, +0xcde4,0x0000,0xd1ae,0xdced,0xe8ce,0x0000,0xf0f9,0xceb5, +0xe6fc,0x0000,0x0000,0xd7fb,0xd0d6,0xddf5,0xf7f1,0x0000, +0xf6fd,0x0000,0xdbf7,0x0000,0x0000,0x0000,0x0000,0xfbea, +0xe9dc,0xd9c1,0x0000,0xf5f2,0xe0c5,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xead4,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf9c2,0x0000,0xeabc, +0x0000,0xd2c5,0xfbd1,0xe7c0,0xeba5,0x0000,0xdffa,0xe3a2, +0xd7b9,0x0000,0xe9c3,0x0000,0xe8fd,0xe8af,0x0000,0x0000, +0xf2d3,0xfba9,0xd8a5,0x0000,0x0000,0x0000,0x0000,0xd5cb, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd0c8,0x0000, +0x0000,0x0000,0xd1af,0xd7e3,0x0000,0x0000,0x0000,0xe0c6, +0x0000,0xd6a2,0x0000,0xedf0,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd7f3,0x0000,0x0000,0x0000,0xfcd4,0x0000,0xdad7,0xccdf, +0x0000,0xf2d4,0x0000,0xd1b0,0x0000,0xcce0,0x0000,0xdbfd, +0xf3bf,0x0000,0xf0d1,0x0000,0x0000,0x0000,0x0000,0x0000, +0xfcbb,0x0000,0xe2b0,0x0000,0x0000,0xe6a5,0x0000,0x0000, +0x0000,0xe2db,0x0000,0x0000,0x0000,0xdfde,0x0000,0xe0c7, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf2ef,0x0000, +0x0000,0x0000,0xcce1,0x0000,0x0000,0x0000,0x0000,0xd6ea, +0x0000,0x0000,0x0000,0x0000,0xe7c2,0x0000,0x0000,0x0000, +0xceb6,0x0000,0xf3c0,0x0000,0xcdfe,0x0000,0x0000,0x0000, +0xfbd2,0x0000,0xf8f8,0xf7fb,0x0000,0x0000,0xe8bf,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe8b7,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xedb6, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x7500 */ +0x0000,0xdcba,0x0000,0x0000,0xccb4,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf1f7,0x0000,0x0000,0x0000,0xe8b8,0x0000,0x0000, +0xcaf6,0x0000,0xe4a4,0xf4d6,0x0000,0x0000,0x0000,0xdfe6, +0x0000,0x0000,0x0000,0xdfa7,0x0000,0xdfe7,0xe1c1,0x0000, +0xe9c4,0x0000,0x0000,0xdccb,0xe9c5,0x0000,0x0000,0x0000, +0xefa3,0xeba6,0xcba3,0xe3e9,0x0000,0x0000,0x0000,0xd1fb, +0xefa4,0x0000,0xefeb,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd0b4, +0x0000,0x0000,0x0000,0x0000,0xcda3,0x0000,0x0000,0xe8e6, +0x0000,0xefa5,0x0000,0xd3cc,0xdaed,0x0000,0x0000,0x0000, +0x0000,0xd7ba,0x0000,0xf2d5,0xf5e5,0xd9ef,0x0000,0x0000, +0x0000,0x0000,0xf9b4,0x0000,0x0000,0xd5d4,0xfdcf,0x0000, +0x0000,0x0000,0xdbe3,0x0000,0x0000,0x0000,0x0000,0xf1e1, +0xecb6,0x0000,0x0000,0x0000,0x0000,0xfbfe,0xd3d7,0x0000, +0xd1b1,0x0000,0xcbb1,0x0000,0x0000,0x0000,0x0000,0xd1b2, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbb2,0xf1c2, +0x0000,0x0000,0xf4e1,0xf9b5,0x0000,0x0000,0xe1c3,0xe1c2, +0x0000,0xebf7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xdfa8,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xcbca,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe6b9,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf8de,0xf9aa,0xcaf7,0x0000,0xedb7,0x0000,0x0000, +0xd3b8,0xf2d6,0x0000,0x0000,0xd4d9,0xeec5,0xf2f0,0x0000, +0x0000,0x0000,0xcab2,0x0000,0x0000,0xdcbb,0x0000,0xf1f8, +0x0000,0x0000,0x0000,0x0000,0x0000,0xecb7,0x0000,0x0000, +0x0000,0x0000,0xe5ca,0x0000,0xf6c0,0xfddd,0x0000,0x0000, +0xd4e3,0xcce2,0x0000,0xf7d4,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd7e5,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd3c3,0x0000,0xd8a6,0x0000,0xf6c1,0x0000,0x0000,0x0000, +0x0000,0x0000,0xddf6,0x0000,0xcdc0,0x0000,0x0000,0x0000, +0xe5dc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe5cb,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe1c4,0x0000,0x0000,0x0000,0x0000,0x0000,0xe8b0, +0xf4b0,0xf3ea,0xdaee,0x0000,0xd7bb,0x0000,0xe2b1,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd7aa,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd6fb,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe4df,0x0000,0xcad6,0x0000, +0x0000,0x0000,0xeba8,0x0000,0x0000,0x0000,0xdbfe,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf6c2,0x0000,0x0000,0xefbb,0x0000,0x0000,0x0000, +0x0000,0xd4fd,0x0000,0x0000,0xe0c8,0x0000,0x0000,0x0000, +0xe8b9,0x0000,0xefa6,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcda4,0x0000,0x0000,0xd4f4,0xdba1,0xdbdc,0xdbdd,0x0000, +0x0000,0x0000,0x0000,0x0000,0xeedc,0x0000,0xcbcb,0xfcd5, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xceeb,0x0000, +0xcdc1,0x0000,0x0000,0xfbd3,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf9ab,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf5d4,0x0000,0x0000,0x0000,0x0000,0xd9a9, +0x0000,0x0000,0xe9dd,0xdbcd,0x0000,0x0000,0xddce,0x0000, +0xe7c3,0x0000,0xeccc,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf9ec,0x0000,0x0000,0x0000,0xcbcc,0x0000, +0x0000,0x0000,0x0000,0xe0fc,0xd4a8,0x0000,0xedd3,0xd8ef, +0x0000,0xf2d7,0x0000,0xcaf8,0xdaef,0x0000,0x0000,0xd6d4, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9cd,0x0000, +0x0000,0x0000,0xd8ee,0x0000,0xf2c1,0x0000,0x0000,0x0000, +0xdfd3,0x0000,0x0000,0x0000,0xdaf0,0x0000,0xe2ea,0x0000, +/* 0x7700 */ +0x0000,0xe0fd,0x0000,0x0000,0xd8f8,0x0000,0x0000,0x0000, +0xf7af,0xdab6,0x0000,0xcad7,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf2d8,0x0000, +0xd8f9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xfadf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfef, +0xd9c2,0x0000,0xf0d2,0x0000,0xe4d1,0x0000,0x0000,0x0000, +0xf3b7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xfae0,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xefec,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe2b2,0x0000,0xd4bd,0x0000,0x0000,0xd9ce,0x0000, +0x0000,0x0000,0x0000,0xf4e2,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xd4a9,0x0000,0x0000,0x0000,0x0000,0xcdc2,0xe7da, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf2d9,0x0000,0x0000,0x0000,0x0000, +0x0000,0xd9aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd8be,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xdcad,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe2eb,0xd6fc,0x0000,0x0000, +0xcaf9,0x0000,0x0000,0xd4da,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf4d7,0xcca1,0x0000,0x0000,0xcfba, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf5b8, +0x0000,0x0000,0x0000,0xd9c3,0xd0e8,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe3c5,0xebf8,0x0000,0xf2b1,0x0000,0x0000, +0x0000,0xcfbb,0x0000,0x0000,0x0000,0xd3ad,0xe8e1,0xceec, +0x0000,0x0000,0x0000,0xe0b4,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x7800 */ +0x0000,0x0000,0xdee3,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xddf7,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf2b2,0xf3f6,0xf6db, +0x0000,0x0000,0x0000,0x0000,0xd7fe,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf8df,0x0000,0xf7f2,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd0a9,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe6da, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf5a6,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd7bc,0xcce3,0x0000,0x0000,0xe6db, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xdddd,0x0000,0x0000,0x0000, +0x0000,0xd1b3,0x0000,0x0000,0x0000,0x0000,0x0000,0xefed, +0x0000,0x0000,0x0000,0x0000,0xd6de,0xe4f4,0xe1ef,0x0000, +0x0000,0xddf8,0x0000,0x0000,0x0000,0x0000,0x0000,0xe8cf, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xcae5,0x0000,0x0000,0x0000,0xdca1, +0x0000,0xe0b5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xfcac,0xfcad,0xd8a7,0x0000,0x0000,0x0000, +0x0000,0xedb8,0x0000,0x0000,0x0000,0xdbb6,0x0000,0x0000, +0x0000,0x0000,0xd6f0,0xf3af,0x0000,0x0000,0xcda5,0x0000, +0xdaf1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd8a8,0x0000,0x0000,0x0000,0xcce4,0x0000,0x0000,0xd1b4, +0x0000,0x0000,0x0000,0x0000,0x0000,0xcad8,0x0000,0x0000, +0x0000,0x0000,0x0000,0xdaf2,0x0000,0x0000,0x0000,0x0000, +/* 0x7900 */ +0x0000,0xf5a7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf5a8,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe6a6,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd5ec,0xd5f8,0xdaf3,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe3c6,0x0000,0x0000,0x0000,0xdee4,0x0000, +0xdee5,0xd1b5,0x0000,0x0000,0x0000,0x0000,0x0000,0xd1b6, +0xd1b7,0xf2b3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe9de,0x0000,0x0000,0x0000,0x0000,0x0000,0xf0d3,0xf2b4, +0x0000,0x0000,0xf0d4,0xcbe4,0xfbd4,0xf5e6,0xe3ea,0x0000, +0xdee6,0x0000,0x0000,0x0000,0x0000,0xdfd4,0x0000,0x0000, +0xf8f9,0x0000,0x0000,0x0000,0x0000,0xf0ae,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd1b8,0x0000,0x0000,0x0000,0x0000,0xd6df, +0x0000,0xd0d7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xfca1,0xefee,0xdcd8, +0x0000,0xe9df,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5dd,0xfdfb, +0x0000,0x0000,0xe0c9,0x0000,0x0000,0x0000,0xd6c9,0x0000, +0x0000,0xd4aa,0x0000,0xe5cc,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe9e0,0x0000,0x0000,0x0000,0xd0d8,0xfca2,0xd4be, +0xe2b3,0xdee7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xdcbc,0xd2b6,0xf5d5,0x0000,0x0000,0x0000,0x0000, +0x0000,0xcea1,0xf5a9,0x0000,0x0000,0xddf9,0x0000,0x0000, +0xddfa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf0d5, +0x0000,0x0000,0x0000,0x0000,0xf6df,0x0000,0xf2da,0xe4eb, +0x0000,0xf2f1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xecb9,0x0000,0x0000,0x0000,0x0000, +0xfdfc,0x0000,0x0000,0x0000,0x0000,0xe1aa,0x0000,0x0000, +0xcad9,0x0000,0x0000,0xefef,0x0000,0xf5aa,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xecf9,0x0000,0x0000,0xf8ad, +0x0000,0xf2c2,0xf6c3,0x0000,0xd7d2,0x0000,0x0000,0xf9a2, +0xf0d6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf0fa,0x0000, +0x0000,0xf6e0,0x0000,0x0000,0x0000,0x0000,0xe9f3,0xf2c3, +0x0000,0x0000,0x0000,0xd4ab,0xcab3,0xcda6,0x0000,0xcdc3, +0xcdda,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9cf,0x0000, +0x0000,0xf6c4,0x0000,0x0000,0x0000,0xeedd,0xe7c4,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2b4, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xdfe2,0xe7db,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe8b1,0x0000,0xfcae,0x0000,0x0000,0x0000,0x0000, +0xe5cd,0x0000,0x0000,0x0000,0xfaeb,0x0000,0xcfbc,0x0000, +0x0000,0xcfe2,0xcdf6,0x0000,0x0000,0xeff0,0x0000,0xf4be, +0x0000,0xd4cd,0x0000,0x0000,0xf3b8,0x0000,0x0000,0x0000, +0xe9a1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf2f2,0xf3eb,0x0000,0xf0d7,0x0000,0x0000, +0xcfd7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfdf, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe8c0,0xe8c1,0x0000,0x0000,0x0000,0xcfe3,0xe9a2, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd0aa,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf3c1,0xd0ab,0x0000,0xd4e4, +0x0000,0x0000,0xefbc,0xd8a1,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9df, +0x0000,0xf3d7,0x0000,0x0000,0x0000,0xdcbd,0x0000,0xcce5, +0xedf1,0x0000,0x0000,0xf1e2,0x0000,0xd4db,0x0000,0x0000, +0x0000,0x0000,0xe2b5,0x0000,0x0000,0xcae6,0x0000,0xd3ae, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcce6,0x0000, +0x0000,0xf1d3,0xf5e7,0x0000,0x0000,0x0000,0x0000,0xcada, +/* 0x7b00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfbee, +0x0000,0xe1c5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xdfe9,0x0000,0xeede,0x0000,0x0000,0xf7c2,0x0000, +0xd8a2,0x0000,0x0000,0x0000,0x0000,0x0000,0xddac,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf0af,0xd6bd,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe1ab,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf9b6,0x0000, +0x0000,0xd4f5,0x0000,0xd0c9,0xefa7,0xe2ec,0x0000,0xdbea, +0xcecc,0xf5e8,0xf7d5,0x0000,0xd3cd,0x0000,0xf3fe,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd0b5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe0fe,0x0000,0xdffb,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe6dd,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe8a4,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbcd, +0x0000,0x0000,0x0000,0xefa8,0x0000,0x0000,0x0000,0xeeb4, +0x0000,0x0000,0x0000,0x0000,0xdad8,0xd1b9,0x0000,0xdfa9, +0x0000,0x0000,0xf3b0,0x0000,0x0000,0xccc4,0x0000,0x0000, +0x0000,0xceb7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xefa9,0x0000,0x0000, +0x0000,0xdfd5,0x0000,0x0000,0xedd7,0x0000,0x0000,0x0000, +0xeec6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xefbd,0xfcd6,0x0000,0x0000,0xdbf4,0x0000,0xefaa,0xf8b9, +0x0000,0xf5e9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe3d9,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe1c6,0x0000,0x0000,0x0000,0xd4bf,0x0000,0x0000,0x0000, +0x0000,0xdee8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x7c00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf0ea, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf3c2,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3af,0x0000, +0x0000,0xcadb,0x0000,0x0000,0x0000,0x0000,0x0000,0xfcd7, +0x0000,0x0000,0xedd8,0xe1c7,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf4d8,0xd6b3,0xddad, +0x0000,0x0000,0x0000,0xd5be,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf1c3,0xeedf,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd6eb,0x0000,0x0000,0x0000,0xf4d9,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd7e6,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xdab7,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xddfb,0x0000,0x0000,0x0000,0x0000, +0x0000,0xddcf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd8a3,0x0000,0x0000,0xdad9,0x0000,0xf0d8, +0xefc4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe1d8, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf1d4,0x0000,0xedf2, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5db,0x0000, +0x0000,0xd5dc,0xf3c4,0xcbd7,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe2b6,0x0000,0x0000,0x0000,0x0000,0xeff1,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xfbd5,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd3d8,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xddd0,0xf0d9, +0xcbb3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5dd, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xcda7,0x0000,0x0000,0xd0ac,0x0000, +0xd1ba,0x0000,0xf1c4,0x0000,0xe5b3,0xfbf5,0xe9e1,0xfde0, +0xfcbc,0x0000,0xdaa2,0xdaa3,0x0000,0xd2a1,0x0000,0x0000, +0xd2ef,0x0000,0x0000,0x0000,0xe2ed,0x0000,0x0000,0xdee9, +0xcedc,0xf2b5,0xd0e4,0xddd1,0x0000,0x0000,0x0000,0x0000, +0xe1c8,0xdbb7,0xdfe3,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xedb9,0xf1c5,0x0000,0xf3cf,0xd7ab, +0xe1ac,0x0000,0x0000,0xe3eb,0x0000,0xeec7,0x0000,0x0000, +0x0000,0xe1c9,0xcafa,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf0fb,0xfae1,0xf0da,0xcce7,0xdaf4,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xccbf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xceed,0x0000, +0x0000,0xd5a9,0xfae2,0x0000,0x0000,0x0000,0xd0e5,0x0000, +0xebd6,0x0000,0xecdf,0x0000,0x0000,0x0000,0xdffc,0x0000, +0x0000,0xf7d6,0xdeea,0xcbb4,0x0000,0x0000,0xefbe,0x0000, +0x0000,0xccb5,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfbd, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeff2,0xe2b7, +0x0000,0x0000,0x0000,0xcce8,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf0fc,0x0000,0x0000,0x0000, +0xd6e0,0x0000,0xf1c6,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe2b8,0xebab,0x0000,0x0000, +0x0000,0xcbb5,0xd8d1,0x0000,0xf4ce,0xf3f7,0x0000,0x0000, +0xd7c6,0x0000,0xd1bb,0xf7aa,0x0000,0xedca,0xd7d3,0xd8fa, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf6c5, +0x0000,0x0000,0xd1cc,0xddfc,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdffd,0x0000, +0xf9e5,0x0000,0xe0ca,0x0000,0x0000,0xf2fd,0xd3b0,0x0000, +0xf4f3,0xdac9,0x0000,0xe6de,0x0000,0x0000,0x0000,0x0000, +0xf8ba,0xe8d0,0x0000,0x0000,0xd8fb,0x0000,0x0000,0xead5, +0x0000,0x0000,0x0000,0x0000,0xd6a3,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf6c6,0x0000,0x0000,0x0000,0x0000, +/* 0x7e00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf2db,0xe4fc,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe8b2,0x0000,0x0000, +0x0000,0x0000,0x0000,0xdada,0x0000,0xf2dc,0xfbd6,0xe9b2, +0x0000,0xeead,0x0000,0xfae3,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xdcee,0x0000,0x0000,0xf5ea,0xe6e0, +0x0000,0xf0fd,0x0000,0x0000,0x0000,0x0000,0x0000,0xd7ac, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf5c5,0xeee0,0x0000, +0x0000,0xdbe5,0x0000,0xddde,0x0000,0x0000,0xd9f0,0xe9a3, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf1f9,0x0000,0xf2c4,0xe0cb,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe9a4,0x0000, +0x0000,0xe2b9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe3b1,0xfceb,0xcda8,0x0000,0xccb6,0x0000,0x0000, +0xf0db,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe6ba,0x0000,0x0000,0xcda9,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf3c3,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe1d9,0x0000,0x0000,0xefab, +0x0000,0x0000,0x0000,0xe7c5,0x0000,0x0000,0xe0e9,0x0000, +0xf3c5,0x0000,0x0000,0xd4c0,0xd5bf,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x7f00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xddae,0x0000, +0xf9fc,0x0000,0xccc0,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe5a2,0x0000,0x0000,0x0000, +0xceb8,0x0000,0x0000,0x0000,0xd8d2,0xf9d6,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf1aa,0xced1,0x0000,0x0000,0xf6c7,0x0000, +0xdbeb,0x0000,0xdffe,0x0000,0x0000,0xd8e1,0x0000,0xf7f3, +0x0000,0xd7e7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd4fe,0x0000,0x0000, +0xd1bc,0x0000,0xe5cf,0x0000,0xcbb6,0x0000,0xdab8,0x0000, +0x0000,0x0000,0x0000,0x0000,0xcdc4,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd6be,0x0000,0x0000,0x0000,0xe2ba,0x0000, +0x0000,0x0000,0x0000,0x0000,0xcfd8,0x0000,0x0000,0x0000, +0xe0cc,0xebf9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xfdfd,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd7e8,0xcbd8,0x0000,0x0000,0x0000,0xe9e2,0x0000,0x0000, +0x0000,0xe8ba,0x0000,0x0000,0x0000,0xe3c7,0x0000,0x0000, +0x0000,0x0000,0xeccd,0x0000,0xecce,0x0000,0xd6bf,0x0000, +0x0000,0x0000,0xe3a7,0x0000,0xdfd6,0xfde8,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeee1, +0xf6a8,0xddfd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf8bb,0x0000,0xe8d1,0x0000,0x0000,0x0000,0x0000, +0xf9d7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xceee,0x0000,0x0000,0xeccf,0x0000,0x0000,0x0000, +0xe9a5,0xd6d5,0x0000,0xcdc5,0x0000,0xedba,0xd1bd,0x0000, +0x0000,0xcfbe,0x0000,0x0000,0xecbb,0x0000,0x0000,0x0000, +0xd2b1,0x0000,0x0000,0x0000,0x0000,0xcce9,0x0000,0xd9c4, +0xe9fc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd1be,0x0000,0x0000, +0x0000,0x0000,0x0000,0xecbc,0x0000,0x0000,0xe5ad,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf7b0,0x0000,0xccea, +0x0000,0x0000,0x0000,0xd3c4,0x0000,0x0000,0xd6c0,0x0000, +0x0000,0x0000,0xd6fd,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe1a1,0x0000, +0xdebd,0x0000,0xf6a9,0x0000,0x0000,0x0000,0xdaa4,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6a4, +0xf5c6,0x0000,0xe1a2,0xe9c6,0x0000,0x0000,0x0000,0xf2c5, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf4e9,0xd6ec,0xebd3, +0x0000,0x0000,0x0000,0x0000,0xecbd,0xe2dc,0xdeeb,0xf0dc, +0x0000,0xebbf,0x0000,0xd7ce,0xd1bf,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf5ab,0x0000, +0x0000,0x0000,0x0000,0xf9fd,0x0000,0xcadc,0x0000,0x0000, +0x0000,0xcdc6,0xf2b6,0x0000,0x0000,0xddfe,0x0000,0x0000, +0x0000,0xccb7,0xdbb8,0x0000,0x0000,0x0000,0x0000,0xd0e9, +0x0000,0xcedd,0xebc0,0x0000,0xfda2,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf8cb,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xead6,0xf1b0,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xdbce,0x0000,0xf7c3,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xdbcf,0xcba4,0x0000,0x0000,0xf8e0,0x0000, +0x0000,0xfbd7,0x0000,0x0000,0xebca,0xe0a1,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xcecd,0x0000,0x0000,0xd4dc,0x0000,0x0000,0x0000, +0xfdd8,0x0000,0x0000,0x0000,0x0000,0xd2f6,0x0000,0x0000, +/* 0x8100 */ +0x0000,0x0000,0xf2b7,0x0000,0x0000,0xfaf6,0xf6aa,0xfaf7, +0xd8e6,0x0000,0xf4b1,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe8d2,0x0000,0xcac5,0xcceb,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe2ee,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe2bb,0x0000,0xf7ad,0x0000,0x0000,0x0000,0xf8e1, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf3ec,0x0000,0x0000,0x0000,0x0000,0xdea1,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe4fd,0x0000,0x0000,0xe3ec,0x0000, +0xddaf,0xddb0,0x0000,0x0000,0xcbb7,0xe8d3,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe1a3,0xd2e0,0x0000, +0x0000,0x0000,0x0000,0xf0fe,0x0000,0x0000,0x0000,0x0000, +0xe9a6,0xcbf2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xedf3,0xdcd9,0xe0cd,0x0000,0x0000,0x0000,0x0000,0xf7da, +0xdbb9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xccae,0x0000,0xdadb,0x0000,0x0000,0x0000,0x0000,0xcdc7, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xddb1,0x0000,0xd8af,0xe3a3,0x0000,0x0000, +0xceef,0x0000,0x0000,0xf2f3,0x0000,0x0000,0x0000,0x0000, +0xf8b3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe0ce,0x0000,0xf5fd,0x0000,0x0000, +0x0000,0x0000,0xebec,0x0000,0x0000,0xd3c5,0xfcec,0xd2db, +0xd4eb,0x0000,0xdea2,0x0000,0x0000,0x0000,0xe5e6,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf0b0,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd5c4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xedf4, +0x0000,0x0000,0x0000,0xe3ed,0x0000,0xe8c2,0x0000,0xedf5, +0xd7fc,0x0000,0xedbb,0x0000,0x0000,0xf6ab,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf2b8,0xf6c8,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd3e6,0xf2dd,0xcfbf,0x0000,0xebac,0x0000, +/* 0x8200 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0xcfc0,0x0000,0xe6a8, +0xfde9,0x0000,0xcfc1,0x0000,0xe0df,0xdeec,0x0000,0x0000, +0x0000,0x0000,0xe0a2,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf4bf,0xe2ef,0x0000,0xd9f1,0xf1c7, +0x0000,0xcbb8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf9fe,0xdbba,0xdaf5,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf6ec,0xdadc,0xfae4, +0x0000,0xe0cf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xddb2,0x0000,0x0000,0x0000,0x0000,0xe6a9,0x0000,0xeff3, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf3ed,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xebfa,0x0000,0xf9e6,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcadd,0xd5de, +0x0000,0xcade,0xdfe4,0x0000,0x0000,0x0000,0xe6fd,0x0000, +0xf5ac,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4f5,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe9e3,0x0000,0xedcb,0xcfe4,0x0000, +0x0000,0x0000,0xd8d3,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xddb3,0xd4ec,0x0000,0x0000,0xf2b9,0x0000,0xdfb7, +0x0000,0x0000,0x0000,0x0000,0x0000,0xcbce,0xfbd8,0x0000, +0x0000,0xd0d9,0x0000,0x0000,0xddd2,0xf7f4,0xe7dc,0xe4a5, +0x0000,0xfca3,0x0000,0xdbbb,0x0000,0x0000,0x0000,0xf2ba, +0xe9fd,0xd0ca,0x0000,0xf5d6,0xd9c5,0xe4b4,0x0000,0xeda7, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xeabd,0xe6fe,0x0000,0xf7c4,0xf5ad,0x0000,0xd9e0, +0x0000,0x0000,0x0000,0xcab4,0x0000,0x0000,0xf8e2,0xcfc2, +0x0000,0xecbe,0x0000,0x0000,0x0000,0xe5b4,0xcdc8,0xeec8, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe7c8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xcdc9,0xf9b7,0x0000, +/* 0x8300 */ +0x0000,0xf1e8,0xd9f2,0xdbf5,0xcab5,0xd9c6,0x0000,0x0000, +0x0000,0xd8c9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9ab, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xedbc,0x0000,0x0000,0xd8d4,0x0000,0x0000,0x0000,0xdcda, +0x0000,0xe2bc,0x0000,0x0000,0xfced,0xece0,0xd2fe,0x0000, +0xe9c7,0xe6aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe2f0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfabb, +0x0000,0xf5ae,0xfbaa,0x0000,0x0000,0x0000,0x0000,0xecfb, +0x0000,0xecbf,0xfcd8,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd4e5,0x0000,0x0000,0x0000,0xf9c3, +0x0000,0x0000,0x0000,0xeee2,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xd7e9,0xedf6,0x0000,0x0000,0x0000,0xdeed,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xccec,0x0000, +0xe3ee,0x0000,0x0000,0x0000,0x0000,0x0000,0xe8d4,0x0000, +0x0000,0x0000,0xfaf8,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xddb4,0xe4b5,0xd8b0,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd8d5,0x0000,0x0000, +0x0000,0xf4ea,0x0000,0x0000,0x0000,0xceb9,0x0000,0x0000, +0x0000,0xd6e1,0xcfd2,0x0000,0xd0b6,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xcea2,0x0000,0x0000,0xf3ee,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf3f8,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xdccc,0x0000,0xd0cb,0x0000,0x0000,0x0000,0xfca4, +0xcdca,0xd7d4,0xdea3,0x0000,0xe4e0,0x0000,0x0000,0x0000, +0x0000,0xeec9,0x0000,0x0000,0x0000,0xe2dd,0x0000,0x0000, +/* 0x8400 */ +0x0000,0x0000,0x0000,0xf5fe,0xd4ac,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd5d1,0x0000,0xd8f0,0xf8c3,0xead7,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf5d7,0x0000,0x0000,0xd8bf,0x0000,0x0000,0x0000, +0x0000,0xfdc0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xebad,0x0000,0x0000,0x0000,0x0000,0xd5aa,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe7a8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeeca, +0x0000,0x0000,0x0000,0xcae7,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf8e3,0x0000,0xd4dd,0x0000,0x0000,0xead8,0x0000, +0x0000,0x0000,0x0000,0xfbd9,0xedf7,0x0000,0x0000,0xe5b5, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd0ad,0x0000,0x0000, +0x0000,0x0000,0xf1f1,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe2bd,0x0000,0x0000,0x0000,0xe3c8,0x0000,0x0000,0x0000, +0x0000,0xd9d5,0x0000,0x0000,0xdfaa,0x0000,0x0000,0x0000, +0x0000,0xdbbc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf8e4,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf1fa,0x0000,0x0000,0xe5b6,0xf3ef,0x0000,0x0000,0xfbda, +0xe1e0,0x0000,0xd9ac,0x0000,0xf5eb,0x0000,0xe0b6,0x0000, +0x0000,0xe9c8,0x0000,0xcbcf,0x0000,0xe3c9,0x0000,0x0000, +0x0000,0xdeee,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe2be,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xdcef,0x0000,0xd6a5,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe2f1,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd6fe,0x0000,0x0000,0x0000, +/* 0x8500 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xd9a1,0x0000,0xd8c0,0xdcdb,0x0000,0x0000,0xedbd, +0xdfb8,0x0000,0xeaa5,0x0000,0x0000,0x0000,0xd7ad,0x0000, +0x0000,0xf3f9,0x0000,0xedf8,0x0000,0xf5c7,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe1ca,0xebe3,0x0000,0xf2de, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf8cc,0x0000,0xead9, +0x0000,0xd3c6,0x0000,0xdbe6,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf5af,0x0000,0x0000,0x0000,0x0000,0xcef0,0x0000, +0x0000,0x0000,0x0000,0xe9fe,0x0000,0x0000,0x0000,0x0000, +0x0000,0xfbb6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe2f2,0x0000,0x0000,0x0000,0x0000, +0xcff2,0xf7b9,0xd9f3,0x0000,0x0000,0xe1cb,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xdadd,0x0000,0x0000,0xdab9, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xebfb, +0x0000,0xcbb9,0x0000,0x0000,0xedf9,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe0e0,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf4c0,0x0000, +0xfdbc,0xdfb1,0xe3ef,0x0000,0x0000,0x0000,0x0000,0xe0a3, +0xfdb9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf0b1,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xcdcb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xedbe,0x0000,0x0000,0x0000,0xd5c0,0xe3f0,0xedfa, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe9e4,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd5ed,0xe7dd,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd4f6,0xe5b7,0x0000,0x0000, +0x0000,0xdbe7,0xe2bf,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeecb, +0x0000,0x0000,0xd7f4,0xf0dd,0x0000,0x0000,0x0000,0xceab, +/* 0x8600 */ +0x0000,0x0000,0xe7de,0x0000,0x0000,0x0000,0xd6d6,0xe1cc, +0x0000,0x0000,0xe8b3,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5ee,0xdca2, +0x0000,0x0000,0xe0d0,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd5b5,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5a1, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfbdb,0x0000, +0xf9cb,0x0000,0x0000,0x0000,0xcbf3,0xf4a5,0x0000,0x0000, +0x0000,0x0000,0x0000,0xfac8,0xd6d7,0x0000,0xe9e5,0xfbdc, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xfdd0, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xfbf6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xdaa5,0x0000,0xdbbd,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xece2,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xcdf7,0xf0de,0x0000,0x0000,0x0000, +0x0000,0xf6c9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdeef, +0x0000,0x0000,0x0000,0xd3b1,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xfcee,0x0000,0x0000,0x0000, +0x0000,0xe8c3,0x0000,0xf1c8,0x0000,0x0000,0x0000,0xcef1, +0x0000,0x0000,0x0000,0x0000,0xf9ed,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf2f4,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4b6,0x0000, +0xf5b9,0x0000,0xdcf0,0xe3f1,0x0000,0x0000,0x0000,0x0000, +0xe8a5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf2bb,0x0000,0xdea4,0x0000,0xdacc,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcae9,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe3da,0x0000,0xfcd9, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeada, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf9c4,0x0000, +0xe3a4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xfbdd,0x0000,0xefca,0x0000, +0xe8c4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd5cc,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xebd7,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9ad, +0x0000,0x0000,0xfbab,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd3d9,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd5a2,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf6de,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xdaf6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe0d1,0x0000,0x0000,0xe9a8, +0x0000,0x0000,0xf5f9,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xfaaf,0x0000,0xebfc,0x0000,0x0000,0xe0ea,0x0000, +/* 0x8800 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0xe3b2,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5c5, +0x0000,0x0000,0xf1e3,0xd5ee,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xcdcc,0x0000,0x0000,0x0000,0x0000,0xedd9,0x0000, +0x0000,0x0000,0x0000,0xd8c1,0x0000,0x0000,0x0000,0x0000, +0xfaec,0x0000,0x0000,0x0000,0x0000,0x0000,0xf1eb,0x0000, +0x0000,0x0000,0x0000,0x0000,0xfabc,0xe6e2,0x0000,0x0000, +0x0000,0x0000,0xfae5,0xe2fa,0x0000,0x0000,0x0000,0xcab6, +0x0000,0xe4b7,0x0000,0xeadb,0x0000,0xf5fa,0x0000,0x0000, +0x0000,0xfbac,0xcfc3,0xebfd,0x0000,0x0000,0x0000,0x0000, +0xf8fa,0x0000,0x0000,0xdfb9,0x0000,0x0000,0x0000,0x0000, +0xe1f1,0x0000,0xd2a4,0x0000,0x0000,0x0000,0x0000,0xf5fb, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd0da,0xd0db, +0x0000,0xeabe,0xd9b1,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcab7,0x0000,0x0000,0xd3e7,0x0000,0xf8e5,0x0000,0x0000, +0x0000,0x0000,0xd3b2,0x0000,0x0000,0x0000,0xe2c0,0xf2df, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcde5,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf9ac,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xcdcd,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xeeae,0xd6ae,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd7ea, +0x0000,0x0000,0x0000,0x0000,0xe7e0,0xebae,0x0000,0x0000, +0x0000,0xcfd9,0x0000,0x0000,0xdccd,0xedfb,0x0000,0xdef0, +0x0000,0xd7eb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xdea5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xdfd7,0xdbd0,0xdbd1,0x0000,0x0000, +0xd5a3,0x0000,0x0000,0x0000,0x0000,0xf0b2,0x0000,0x0000, +/* 0x8900 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdcdc, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcae8,0x0000,0xf8e6,0xdcce,0x0000,0x0000,0x0000,0x0000, +0xeadc,0xdbd2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe9b3,0x0000,0x0000, +0x0000,0x0000,0xf7db,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe3a8,0x0000, +0xd7ae,0x0000,0x0000,0xe0e1,0x0000,0x0000,0x0000,0x0000, +0x0000,0xcbba,0x0000,0x0000,0xe5d1,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd0dc, +0x0000,0x0000,0x0000,0x0000,0xd5c1,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd8ca,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe3a9,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe0a4, +0x0000,0xe9a9,0x0000,0xd3c7,0x0000,0x0000,0xdcdd,0xf8ae, +0x0000,0x0000,0x0000,0xccb8,0x0000,0x0000,0x0000,0xd0ae, +0x0000,0x0000,0x0000,0xd8f2,0x0000,0x0000,0xe3ca,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xccaf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xd4ad,0xf6d1,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd0cc,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xcac6,0x0000,0x0000,0xd5c2,0x0000,0x0000, +0xceba,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xcac7,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xfab0,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xdfd8,0x0000,0x0000,0x0000, +0xf5ba,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe5eb,0x0000,0xeff4,0xddb5,0x0000,0x0000,0x0000,0x0000, +0xcdaa,0x0000,0xe3f2,0x0000,0xfbf7,0x0000,0xf7d0,0x0000, +0x0000,0x0000,0x0000,0xfdba,0x0000,0x0000,0xfde1,0xf6fe, +0xd1c0,0x0000,0x0000,0xe8c5,0x0000,0xe4b8,0x0000,0xe1e8, +0x0000,0x0000,0x0000,0xccc1,0x0000,0xd2ed,0x0000,0x0000, +0x0000,0x0000,0xdbbe,0x0000,0x0000,0xe0e2,0x0000,0x0000, +0x0000,0xfac9,0x0000,0x0000,0xe1cd,0x0000,0xcab8,0x0000, +0x0000,0x0000,0xf2e0,0xf1c9,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xdef1,0x0000,0x0000,0x0000,0xf0df,0xf8c4,0x0000,0x0000, +0x0000,0x0000,0x0000,0xeecc,0x0000,0x0000,0xdef2,0x0000, +0xe7c9,0x0000,0xe2f3,0xe7e1,0x0000,0x0000,0xe3cb,0x0000, +0x0000,0xe3cc,0x0000,0x0000,0x0000,0xcff8,0xefac,0x0000, +0xfdfe,0xfca5,0xfab1,0xdfd9,0x0000,0xe0d2,0x0000,0x0000, +0x0000,0xf4da,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf1ca,0x0000,0xcea3, +0x0000,0x0000,0x0000,0x0000,0xf2bc,0xece3,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe0a5,0x0000,0xf7ab,0x0000,0x0000, +0xebaf,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5de,0x0000, +0xe1a4,0xcdab,0x0000,0xd9f4,0xe8a6,0xcdce,0xe1e9,0x0000, +0xfcef,0x0000,0xe0e3,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe2c1,0x0000,0xcea4,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xdea6,0x0000,0x0000,0xebfe,0x0000,0xebdd,0xf0e0, +0x0000,0x0000,0xf4db,0x0000,0xe2f4,0x0000,0x0000,0xd3c8, +0x0000,0x0000,0x0000,0xf4eb,0x0000,0xeeb5,0x0000,0xf5d8, +0x0000,0x0000,0xd5df,0x0000,0x0000,0x0000,0xd6e5,0x0000, +0x0000,0x0000,0x0000,0xebb0,0xf4e3,0x0000,0x0000,0x0000, +0x0000,0xe3cd,0x0000,0x0000,0x0000,0x0000,0xf4f4,0xfab2, +0x0000,0x0000,0xeff5,0xcadf,0x0000,0xebb1,0xedbf,0x0000, +0x0000,0xfdc9,0x0000,0x0000,0x0000,0x0000,0xe4a6,0xf9a4, +0xf0b3,0x0000,0xe5ec,0x0000,0x0000,0x0000,0xd1e7,0x0000, +0xd9c7,0xe4d7,0xeadd,0x0000,0xd4f7,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdaba,0x0000, +0xdacd,0x0000,0x0000,0x0000,0xf9cc,0x0000,0xe1da,0xdbbf, +0x0000,0xccc5,0xecd0,0xcbbb,0x0000,0xdef3,0x0000,0x0000, +0xe9aa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd9c8,0x0000,0x0000,0xeee3,0xd7bd,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xcfc4,0x0000,0x0000,0x0000,0x0000, +0x0000,0xd0cd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xfca6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf1fb,0x0000,0x0000,0x0000,0x0000,0xfdd2,0xd1c1, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe3db,0x0000,0xd3c9,0x0000,0xdccf,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcced,0x0000, +0x0000,0x0000,0x0000,0x0000,0xdea7,0x0000,0x0000,0xe6bb, +0xeca1,0x0000,0x0000,0x0000,0xccb9,0x0000,0x0000,0xfbde, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe7e2,0x0000,0x0000, +0xd4c1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xdca8,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe2c2,0x0000,0xf3d8,0xe5d3,0x0000,0x0000,0xf3d9,0x0000, +0x0000,0x0000,0xf3c6,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x8c00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcddb, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcdac, +0x0000,0xfcc3,0x0000,0x0000,0x0000,0x0000,0xd4e7,0x0000, +0xd1c2,0x0000,0xf9a5,0x0000,0xe8d5,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe3ce,0x0000,0x0000, +0x0000,0x0000,0xd4ca,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xdfda,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xfbdf,0xe7e3,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf8fb,0xe3cf,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf5b0,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd8e7,0x0000,0xd9c9,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf8af,0xeff6,0x0000, +0xddb6,0xeeaf,0xcdf8,0x0000,0x0000,0x0000,0x0000,0xdeb8, +0xfca7,0xf7fc,0xf7b1,0xcebb,0xf4a1,0x0000,0x0000,0xeecd, +0xe1ae,0x0000,0x0000,0xecc3,0xcffe,0x0000,0xf8bf,0xd8e2, +0xd3e8,0x0000,0x0000,0xdea8,0xf4e4,0xecc2,0x0000,0xd9f5, +0xf9c5,0xddd3,0xd6f1,0xecfc,0xfcf0,0x0000,0x0000,0xedc0, +0xcab9,0x0000,0xeee4,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf2e1,0x0000,0xdeb9,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd6f2,0x0000,0xdef4,0x0000,0xdfdb,0x0000, +0xdbd3,0x0000,0xfae7,0xd8e3,0xf4c1,0x0000,0xddb7,0x0000, +0x0000,0x0000,0xf2f5,0x0000,0x0000,0xd4ae,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd6f3,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xddb8,0xcfc5,0xdfdf,0x0000,0x0000, +/* 0x8d00 */ +0x0000,0x0000,0x0000,0x0000,0xf2be,0xf6a1,0x0000,0xebcb, +0xf1fc,0x0000,0xf3c7,0x0000,0x0000,0xe0eb,0x0000,0x0000, +0x0000,0x0000,0x0000,0xedfc,0x0000,0x0000,0xe1db,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xeee5,0x0000,0xdef5,0x0000, +0x0000,0x0000,0x0000,0xfad3,0x0000,0x0000,0x0000,0x0000, +0xf1cb,0x0000,0x0000,0xd0af,0xddb9,0x0000,0x0000,0xd1c3, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf5b1,0x0000,0x0000, +0x0000,0x0000,0xeac6,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf0e1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf6ac,0x0000,0x0000,0x0000,0x0000, +0xf5d9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf0eb,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xddba,0x0000,0x0000,0x0000,0xf2bf,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf7c5,0x0000, +0x0000,0x0000,0x0000,0xdba2,0xf2f6,0x0000,0x0000,0xcaba, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf7f5,0x0000,0xcbe5,0x0000,0x0000, +0x0000,0xeee6,0x0000,0xe0d3,0x0000,0x0000,0x0000,0x0000, +0xcea5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6d8, +0x0000,0x0000,0x0000,0xd4af,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x8e00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe9c9,0x0000,0x0000,0x0000,0x0000,0xd3ce, +0xf4c2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbe6,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf1a1,0x0000,0x0000,0x0000,0x0000,0x0000, +0xebb2,0x0000,0x0000,0x0000,0x0000,0xf1a2,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xebb3,0x0000,0xf0b4,0x0000,0x0000,0xcbf4, +0xd4b0,0xf3b2,0xfbb7,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf5ec,0x0000,0x0000,0x0000,0x0000,0x0000,0xeee7, +0xf4b2,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf5ed,0x0000,0xcff3,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf0e2,0x0000,0x0000,0x0000,0x0000,0x0000,0xeece, +0x0000,0x0000,0xf1cc,0x0000,0x0000,0xe5b8,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd7f5,0xe3f3,0xcfe5,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcfc6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf3b3,0xe4d8,0xcff9,0xcfda,0x0000,0x0000, +0x0000,0x0000,0xfacd,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe6e3, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf2e2,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf5ee,0x0000,0x0000,0xcabb,0x0000,0x0000,0xe3dc,0x0000, +/* 0x8f00 */ +0x0000,0x0000,0x0000,0xcef2,0x0000,0xd6d9,0x0000,0x0000, +0x0000,0xeeb0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf4e5,0xd8c2,0xdcd0,0xccee,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd5e0,0xf6ca,0xfdca,0xd8d6,0xf4cf, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6a6,0xdcbe, +0x0000,0xdbd4,0xd7c7,0x0000,0x0000,0x0000,0x0000,0xf2fe, +0x0000,0x0000,0x0000,0xf1cd,0x0000,0x0000,0x0000,0x0000, +0xe2c3,0xdcde,0x0000,0xdcdf,0x0000,0x0000,0xefad,0xe6ab, +0x0000,0x0000,0x0000,0x0000,0xf9dd,0xeabf,0x0000,0x0000, +0x0000,0xefae,0x0000,0x0000,0x0000,0xf4d0,0xcef3,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe6ac,0x0000,0xcede, +0x0000,0x0000,0xd5f9,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe3f4,0xcdd0,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd5b8,0x0000,0x0000,0xf7fd,0x0000, +0xdca9,0x0000,0x0000,0x0000,0x0000,0xdef6,0x0000,0xdcaa, +0xf2e3,0xe9b4,0xd2dc,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe9e6,0x0000,0x0000,0xe3f6,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe7ca,0x0000, +0x0000,0xd0ce,0x0000,0x0000,0xdaf7,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcabc,0x0000, +0x0000,0x0000,0xeee8,0xdade,0x0000,0xf2f7,0x0000,0x0000, +0xe2fb,0x0000,0xcca6,0x0000,0x0000,0x0000,0x0000,0xdabb, +0x0000,0xeee9,0x0000,0x0000,0x0000,0xf5da,0x0000,0x0000, +0xf7dc,0xe1ea,0xcec1,0xd4b1,0x0000,0xfdb1,0xe6bd,0x0000, +0xfbad,0x0000,0x0000,0xf8e7,0x0000,0xe1ce,0x0000,0xf7e2, +0xf5ef,0xcfc7,0x0000,0x0000,0xd4b2,0xccef,0x0000,0xd4e8, +0x0000,0xeecf,0xf7d7,0x0000,0x0000,0xe0a6,0xd6c1,0xe1dc, +0xf0e3,0xf1e4,0xdcf1,0xd6a7,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf4f5,0x0000, +0x0000,0xf1ce,0xf2e4,0x0000,0x0000,0xd0b0,0x0000,0x0000, +0xecef,0x0000,0x0000,0x0000,0xf9ba,0x0000,0xebb5,0x0000, +0x0000,0xd4ed,0xe2c4,0x0000,0x0000,0x0000,0x0000,0xe9e7, +0x0000,0x0000,0xebb4,0xeaa1,0x0000,0xf8bc,0xcea6,0x0000, +0xf9c6,0xfcda,0x0000,0xd4b3,0xd3b9,0xeade,0x0000,0x0000, +0x0000,0xe9ab,0x0000,0x0000,0xe1e1,0xd3cf,0xf4f6,0x0000, +0xeac0,0xe1cf,0x0000,0xccba,0x0000,0x0000,0x0000,0x0000, +0x0000,0xeeea,0x0000,0x0000,0x0000,0xf0e4,0xf3b4,0xd4ee, +0x0000,0x0000,0xf2c0,0x0000,0x0000,0xf1e5,0x0000,0xf4c3, +0xe0d4,0x0000,0xebb6,0x0000,0xd7a1,0xcbe8,0x0000,0xf9ad, +0xe9ad,0xd8e4,0xfab3,0xe2c5,0xfcbd,0x0000,0x0000,0xecc4, +0xd8b1,0x0000,0xdcab,0x0000,0x0000,0x0000,0x0000,0xd5a4, +0x0000,0xebe9,0x0000,0x0000,0x0000,0xe8bb,0x0000,0x0000, +0x0000,0xd8d7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xfbae,0xd1e1,0x0000,0x0000,0xdbc0,0x0000, +0xf5be,0x0000,0xdef7,0x0000,0x0000,0x0000,0x0000,0xcafb, +0xf7c6,0xcfc8,0x0000,0x0000,0x0000,0xe1d0,0x0000,0x0000, +0xeed0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe9f4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xcef4,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd5cd,0x0000, +0x0000,0xcfdb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xddbb,0x0000,0x0000,0x0000,0x0000,0xceac,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe9e8,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd4b4,0x0000,0x0000, +/* 0x9100 */ +0x0000,0x0000,0xe4c7,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf5db,0x0000,0x0000,0xfac1,0x0000,0x0000, +0x0000,0xdea9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd4f8, +0x0000,0x0000,0x0000,0x0000,0x0000,0xeff7,0x0000,0x0000, +0x0000,0x0000,0xd3b3,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xebb7,0xeff8,0xf5dc,0xedcc,0xdbd5,0xf1cf,0x0000, +0x0000,0x0000,0xf1d0,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf5b2,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xd9ae,0xd5ac,0x0000,0xe2c6,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xfda3,0x0000,0xfbe5, +0xdfab,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2f5, +0x0000,0xf6ad,0x0000,0xf5b3,0x0000,0xf0b5,0x0000,0x0000, +0x0000,0x0000,0xe1a5,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf5dd,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xeca2,0xedfd,0x0000,0xf5b4,0xfbb8, +0x0000,0xdba3,0x0000,0x0000,0xd6ca,0xcbd9,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe5d4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf3fa, +0x0000,0xebb8,0x0000,0xe0b7,0xd7ec,0xf1ec,0xe5af,0xd5e1, +0xd7ed,0xd1d1,0x0000,0x0000,0x0000,0x0000,0x0000,0xe1f2, +0xeff9,0x0000,0x0000,0x0000,0xddbc,0xf6dc,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf0e5,0x0000,0x0000,0x0000,0xf4c4, +0x0000,0x0000,0xe9e9,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf3fb,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x9200 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd4ef,0x0000,0x0000, +0xcca2,0xf7fe,0xdfbc,0x0000,0x0000,0x0000,0x0000,0xebcd, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd0b7,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd6c2,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe8ad,0x0000,0x0000,0x0000,0x0000,0xefaf, +0xcba5,0x0000,0x0000,0x0000,0x0000,0xcbe9,0x0000,0x0000, +0x0000,0xfae8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xccc6, +0x0000,0x0000,0x0000,0xe6e7,0x0000,0x0000,0xeac7,0x0000, +0x0000,0x0000,0xdba4,0x0000,0xcfc9,0xe2fc,0xeffa,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xebde,0x0000,0x0000,0xf5c8,0x0000,0xd4de,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe0d5,0x0000,0xefb0,0x0000,0x0000,0xe2c7,0x0000, +0xd9af,0x0000,0x0000,0x0000,0xf9e7,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe7e5,0x0000,0x0000,0xcfca,0xe1d1, +0x0000,0xe2c8,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xeffb,0x0000,0x0000,0xfaf9, +0x0000,0x0000,0xdcf2,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe0a7,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf8e8,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcbea,0x0000,0x0000,0x0000,0xcbbc,0x0000,0x0000,0x0000, +/* 0x9300 */ +0x0000,0x0000,0x0000,0x0000,0xd6e2,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf5de,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf5df,0x0000,0xeeb6,0x0000,0x0000,0x0000,0xe2f6,0xd3ca, +0xeffc,0xd1c4,0xefb1,0x0000,0xd1c5,0x0000,0xd0de,0x0000, +0xd9e1,0x0000,0x0000,0xe0b8,0x0000,0x0000,0xcdd1,0xf3b9, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe7cc,0x0000,0xd6a8,0xcea7,0x0000,0xd4b5,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe4c8,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd3b4,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xebb9,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xcbf5,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf6dd,0x0000,0xf1a3,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xccc7,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe9ca,0x0000,0xe1f0,0x0000, +0x0000,0x0000,0xf5e0,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xfbaf,0x0000,0x0000,0x0000,0xcbd1, +0x0000,0x0000,0x0000,0x0000,0xfbe0,0xf2e5,0x0000,0x0000, +0xecf0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf0ec,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xeeeb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe9cb,0x0000, +0x0000,0xccf0,0x0000,0x0000,0xd7af,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf3a1,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x9400 */ +0x0000,0x0000,0x0000,0x0000,0xfcf5,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf1a4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe0d6,0x0000,0x0000, +0x0000,0x0000,0x0000,0xefb2,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf4d1,0x0000,0x0000, +0xf7a1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf1d1,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xcafc,0xcafd,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xcece,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf3c8,0x0000,0xf3ba, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x9500 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xedfe, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xdaa6,0x0000,0x0000,0xe0ec,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf8cd,0x0000,0xcbd2,0x0000,0x0000,0x0000,0xebce, +0x0000,0xf9d8,0xf9d9,0xcae0,0xdaca,0x0000,0x0000,0x0000, +0xcba6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xcac8,0xf9ee,0xdbec,0x0000,0x0000, +0xd0b1,0x0000,0x0000,0x0000,0x0000,0xd5ef,0x0000,0x0000, +0x0000,0xe6f3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe7a2,0xe4d9,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4e1, +0x0000,0x0000,0xfcc4,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf9ef,0xcff4,0xf7e6,0x0000, +0x0000,0x0000,0x0000,0x0000,0xcebc,0x0000,0x0000,0x0000, +0x0000,0xf4c5,0xdca3,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x9600 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xddbd,0x0000,0x0000,0x0000, +0x0000,0xf4c6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf8a1,0x0000,0x0000,0x0000,0xe8d6,0x0000, +0x0000,0x0000,0xdbc1,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf0e6,0x0000,0x0000,0x0000,0xe4b9, +0xf6ed,0x0000,0xf9ae,0x0000,0xddbe,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd7b0,0xd8e8,0xcbbd,0x0000,0x0000, +0xf9da,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf8ce,0xf9f0,0xe0ed,0xe3b3,0xf4b3, +0x0000,0x0000,0xeac2,0xf2e6,0xf0b6,0x0000,0x0000,0x0000, +0x0000,0x0000,0xdbd6,0x0000,0x0000,0x0000,0x0000,0x0000, +0xebe4,0x0000,0x0000,0xf2e7,0x0000,0xd7d5,0xd4b6,0xf9e8, +0xd7c1,0x0000,0x0000,0x0000,0x0000,0xe5d5,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe9ea,0xd7cc,0x0000, +0x0000,0x0000,0xd3e9,0xe2c9,0x0000,0xfcdb,0xcdad,0x0000, +0x0000,0x0000,0x0000,0x0000,0xccb0,0xeaa2,0x0000,0x0000, +0xe4f6,0xd0c0,0x0000,0xf0b7,0xeea1,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd7f6,0x0000,0x0000,0x0000,0xe2ca, +0xe2cb,0x0000,0xfacf,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xebdf,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6cb, +0x0000,0x0000,0x0000,0xf4b4,0x0000,0x0000,0x0000,0x0000, +0xedcd,0xe4d2,0x0000,0x0000,0xeaa9,0xe4ba,0xf3a2,0xcdd2, +0x0000,0xf6cb,0x0000,0xf1e6,0xedc1,0xe8bc,0xeed1,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf0e7,0xe2cc,0x0000, +0x0000,0xe4aa,0x0000,0xf5e1,0xedda,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd7ee,0xd1f1,0x0000,0x0000,0x0000,0x0000, +0xe9eb,0xe9ec,0xe0e4,0x0000,0x0000,0x0000,0x0000,0xdaa7, +0xddd4,0x0000,0xeaa3,0x0000,0x0000,0x0000,0xd6c3,0xd6f4, +0x0000,0xdadf,0x0000,0xefb3,0x0000,0x0000,0x0000,0x0000, +0xe2cd,0x0000,0x0000,0x0000,0x0000,0x0000,0xeffd,0xf2e8, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xefc5,0x0000,0xe7e7,0x0000,0x0000,0xd7fd,0x0000, +0x0000,0xe7ce,0x0000,0x0000,0xdfdc,0x0000,0xf9c7,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd9f6, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xdfac,0x0000,0xd6da,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xdca4,0x0000,0x0000,0x0000,0xf0b8,0x0000,0x0000, +0x0000,0x0000,0xd5fa,0x0000,0xe4f7,0x0000,0x0000,0x0000, +0xd6c4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf4ec,0x0000,0x0000,0x0000,0x0000,0xeffe,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf0a1,0x0000,0xdeaa,0x0000, +0x0000,0xdabc,0xd8fc,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xfad4,0x0000,0x0000,0x0000,0xece5,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xfca8,0x0000,0x0000,0xece6, +0x0000,0x0000,0xd8cb,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xfbb9,0x0000,0xe4d3,0x0000,0xcdf9, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcfd3,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcaea,0x0000,0x0000,0xcfd4,0x0000,0xf8bd,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf4c7,0x0000, +0x0000,0x0000,0x0000,0xeadf,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xf9db,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd4b7,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xebe5,0x0000,0x0000,0xe1d2,0x0000, +0x0000,0x0000,0x0000,0xeaa4,0x0000,0x0000,0x0000,0xfac2, +0xfbe1,0xfaed,0xf0a2,0xccf1,0x0000,0xfaa3,0xe2f7,0x0000, +0xe2ce,0x0000,0xe9f5,0x0000,0xe1eb,0x0000,0x0000,0x0000, +0xe7e8,0xe8d7,0xdaf8,0xd4cb,0x0000,0x0000,0x0000,0xf7f6, +0xd6c5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd4e9,0x0000,0x0000, +0xfafa,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xccf2,0xf7dd,0x0000,0xdeba,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcea8,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf0b9,0xe4fe,0xe4c9,0x0000, +0x0000,0x0000,0x0000,0x0000,0xe4d4,0x0000,0x0000,0x0000, +0xeac3,0x0000,0xefb4,0x0000,0x0000,0x0000,0xd7be,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xfbe2,0x0000,0xcdd3, +0x0000,0x0000,0x0000,0xefb5,0x0000,0x0000,0x0000,0xfae9, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf9a6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdfbd, +0x0000,0xf7c7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xf8fd,0x0000,0x0000,0xf8fc, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xdeab,0xdbe8,0x0000,0x0000,0xe3dd, +0x0000,0xe1e2,0xd1c6,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf6d0,0xebe6,0xdaf9, +0x0000,0x0000,0x0000,0x0000,0xecc7,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xdef8,0xf8e9,0xe3de,0x0000, +/* 0x9900 */ +0x0000,0x0000,0x0000,0xcef5,0x0000,0x0000,0x0000,0x0000, +0x0000,0xfac3,0xe5d7,0x0000,0xecc8,0x0000,0x0000,0x0000, +0xf3c9,0x0000,0x0000,0xe4bb,0x0000,0x0000,0x0000,0x0000, +0xe6ae,0x0000,0x0000,0x0000,0x0000,0x0000,0xefb6,0x0000, +0xdcbf,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcebd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd8c3,0x0000,0x0000, +0x0000,0xd0cf,0x0000,0xcffa,0xf3ca,0xe0d7,0x0000,0x0000, +0x0000,0xd1c7,0xe9ae,0x0000,0xe8bd,0x0000,0x0000,0xfac4, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe2cf,0x0000, +0x0000,0xfac5,0x0000,0x0000,0x0000,0xf9b8,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xdce0,0x0000,0x0000, +0xfbb0,0x0000,0x0000,0x0000,0xd8a9,0xe5df,0xf9a7,0x0000, +0x0000,0xf6ee,0x0000,0xf6cc,0xe2f8,0x0000,0x0000,0x0000, +0x0000,0xecf1,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xdae0,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xf1d2,0xd2cc,0xcfcb,0x0000,0x0000,0xcabd,0x0000,0x0000, +0x0000,0xddbf,0x0000,0x0000,0x0000,0xf6ef,0x0000,0xdef9, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xfab4,0x0000,0x0000, +0x0000,0xd5ad,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf1e7, +/* 0x9a00 */ +0x0000,0xdebe,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xdcc0,0x0000,0x0000,0x0000,0x0000,0x0000,0xd1c8,0xd1c9, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xf8be,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xcbf6,0x0000,0x0000,0x0000,0x0000, +0xd4f9,0x0000,0x0000,0x0000,0x0000,0x0000,0xf5e2,0xe1d3, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd8e9,0x0000,0x0000,0xf8fe,0x0000,0xcfcc,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xfda4,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xcef6,0x0000,0xfad0, +0x0000,0x0000,0xccf3,0xe6be,0x0000,0x0000,0x0000,0xf6ae, +0x0000,0x0000,0xd5f0,0x0000,0x0000,0xd1ca,0x0000,0x0000, +0x0000,0xfcbe,0xd5f1,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcde9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xfab5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xe2d0,0xf4f7,0x0000,0x0000,0x0000, +0xcdd4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe7a3,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xdba5,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x9b00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe2d1,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd7a2, +0x0000,0x0000,0xf7e3,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xeaa6,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xd0a1,0x0000,0x0000,0x0000, +0x0000,0xceda,0xfbeb,0xdba6,0xdbde,0xd8e5,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeae0, +0x0000,0x0000,0x0000,0x0000,0xd8aa,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe5e0,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd6db, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xefc6,0x0000, +0x0000,0xf8ea,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4d5, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xcef7,0x0000,0x0000,0xe0d8,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xd7ef,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xf4ed,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xcde6,0x0000,0x0000,0x0000, +0xccf4,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x9c00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf5e3,0x0000,0x0000, +0xe4ca,0x0000,0xdce1,0x0000,0x0000,0xf9c8,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xfcbf,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe8a7,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd8c4,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcbbe, +0x0000,0xdcae,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xd7f7, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xf0e8,0x0000,0xddc0, +0x0000,0xcfcd,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xdcf3,0xd9b0,0x0000,0xe6e9,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x9d00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xe4bc,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xeac4,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4ec,0x0000, +0xe4e5,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xfbf8,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xccbb,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe4bd,0x0000,0x0000, +0xcddc,0xd9f7,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xdddf,0x0000,0x0000,0x0000, +0x0000,0x0000,0xedce,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0xd9d0,0x0000,0x0000,0x0000,0x0000,0x0000,0xe5a3, +0x0000,0x0000,0x0000,0x0000,0xf9cd,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xcdae,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xcfce, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf6af,0x0000,0x0000,0x0000,0x0000,0x0000, +0xfdd3,0xebed,0xd6dc,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x9e00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xe5a4,0x0000,0x0000,0x0000,0xd5b6,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd6dd,0x0000,0x0000, +0x0000,0xf9e9,0x0000,0x0000,0x0000,0xe7a4,0x0000,0xd6e3, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xd1cb,0xd6e4,0x0000,0x0000,0x0000,0xd5f2, +0x0000,0x0000,0x0000,0x0000,0x0000,0xdefa,0x0000,0xd7f8, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd8ea,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xcfd5,0xd8fd,0x0000,0x0000, +0x0000,0x0000,0x0000,0xd8ab,0x0000,0x0000,0xfdcb,0x0000, +0x0000,0x0000,0x0000,0xfcdc,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xe0a8,0xd5f3,0x0000, +0x0000,0xfdd9,0x0000,0x0000,0xcca3,0x0000,0x0000,0x0000, +0xd9f9,0x0000,0x0000,0xd3ea,0xf5f5,0x0000,0xefc7,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xd3da,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xdabd,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +/* 0x9f00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe8a8, +0xdcaf,0x0000,0x0000,0x0000,0x0000,0x0000,0xf0a3,0x0000, +0x0000,0x0000,0x0000,0xcdd5,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xe0a9,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0xdeac,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0xf0ba,0xeeb1,0x0000,0x0000,0xeeb2,0x0000, +0x0000,0x0000,0xf6cd,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xeed2, +0x0000,0xd6c6,0x0000,0x0000,0x0000,0x0000,0x0000,0xe0e5, +0x0000,0x0000,0xf3bb,0x0000,0xe5e1,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0xe4cb, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0xd7a3,0x0000,0x0000, +0xdbc2,0x0000,0x0000,0x0000,0x0000,0xcafe,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0xcfcf}; + +const int ucs_i_uhc_table_min = 0x4d00; +const int ucs_i_uhc_table_max = 0x4d00 + (sizeof(ucs_i_uhc_table)/sizeof(unsigned short)); + +const unsigned short ucs_s_uhc_table[] = { +/* 0xab00 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xb0a1,0xb0a2,0x8141,0x8142,0xb0a3,0x8143,0x8144,0xb0a4, +0xb0a5,0xb0a6,0xb0a7,0x8145,0x8146,0x8147,0x8148,0x8149, +0xb0a8,0xb0a9,0xb0aa,0xb0ab,0xb0ac,0xb0ad,0xb0ae,0xb0af, +0x814a,0xb0b0,0xb0b1,0xb0b2,0xb0b3,0xb0b4,0x814b,0x814c, +0xb0b5,0x814d,0x814e,0x814f,0xb0b6,0x8150,0x8151,0x8152, +0x8153,0x8154,0x8155,0x8156,0xb0b7,0xb0b8,0x8157,0xb0b9, +0xb0ba,0xb0bb,0x8158,0x8159,0x815a,0x8161,0x8162,0x8163, +0xb0bc,0xb0bd,0x8164,0x8165,0xb0be,0x8166,0x8167,0x8168, +0xb0bf,0x8169,0x816a,0x816b,0x816c,0x816d,0x816e,0x816f, +0x8170,0x8171,0x8172,0xb0c0,0x8173,0xb0c1,0x8174,0x8175, +0x8176,0x8177,0x8178,0x8179,0xb0c2,0x817a,0x8181,0x8182, +0xb0c3,0x8183,0x8184,0x8185,0xb0c4,0x8186,0x8187,0x8188, +0x8189,0x818a,0x818b,0x818c,0x818d,0x818e,0x818f,0x8190, +0x8191,0x8192,0x8193,0x8194,0x8195,0x8196,0x8197,0x8198, +0xb0c5,0xb0c6,0x8199,0x819a,0xb0c7,0x819b,0x819c,0xb0c8, +0xb0c9,0x819d,0xb0ca,0x819e,0x819f,0x81a0,0x81a1,0x81a2, +0xb0cb,0xb0cc,0x81a3,0xb0cd,0xb0ce,0xb0cf,0xb0d0,0x81a4, +0x81a5,0xb0d1,0xb0d2,0xb0d3,0xb0d4,0x81a6,0x81a7,0x81a8, +0xb0d5,0x81a9,0x81aa,0x81ab,0xb0d6,0x81ac,0x81ad,0x81ae, +0x81af,0x81b0,0x81b1,0x81b2,0xb0d7,0xb0d8,0x81b3,0xb0d9, +0xb0da,0xb0db,0x81b4,0x81b5,0x81b6,0x81b7,0x81b8,0x81b9, +0xb0dc,0xb0dd,0xb0de,0x81ba,0xb0df,0x81bb,0x81bc,0xb0e0, +0xb0e1,0x81bd,0x81be,0x81bf,0x81c0,0x81c1,0x81c2,0x81c3, +0xb0e2,0xb0e3,0x81c4,0xb0e4,0xb0e5,0xb0e6,0x81c5,0x81c6, +0x81c7,0xb0e7,0x81c8,0x81c9,0xb0e8,0x81ca,0x81cb,0x81cc, +0xb0e9,0x81cd,0x81ce,0x81cf,0xb0ea,0x81d0,0x81d1,0x81d2, +0x81d3,0x81d4,0x81d5,0x81d6,0x81d7,0xb0eb,0x81d8,0xb0ec, +0x81d9,0x81da,0x81db,0x81dc,0x81dd,0x81de,0x81df,0x81e0, +0xb0ed,0xb0ee,0x81e1,0x81e2,0xb0ef,0x81e3,0x81e4,0xb0f0, +0xb0f1,0x81e5,0xb0f2,0x81e6,0xb0f3,0x81e7,0x81e8,0xb0f4, +0xb0f5,0xb0f6,0x81e9,0xb0f7,0x81ea,0xb0f8,0xb0f9,0x81eb, +0x81ec,0x81ed,0x81ee,0x81ef,0xb0fa,0xb0fb,0x81f0,0x81f1, +/* 0xad00 */ +0xb0fc,0x81f2,0x81f3,0x81f4,0xb0fd,0x81f5,0xb0fe,0x81f6, +0x81f7,0x81f8,0x81f9,0x81fa,0xb1a1,0xb1a2,0x81fb,0xb1a3, +0x81fc,0xb1a4,0x81fd,0x81fe,0x8241,0x8242,0x8243,0x8244, +0xb1a5,0x8245,0x8246,0x8247,0xb1a6,0x8248,0x8249,0x824a, +0xb1a7,0x824b,0x824c,0x824d,0x824e,0x824f,0x8250,0x8251, +0x8252,0xb1a8,0x8253,0x8254,0xb1a9,0xb1aa,0x8255,0x8256, +0x8257,0x8258,0x8259,0x825a,0xb1ab,0xb1ac,0x8261,0x8262, +0xb1ad,0x8263,0x8264,0x8265,0xb1ae,0x8266,0x8267,0x8268, +0x8269,0x826a,0x826b,0x826c,0xb1af,0xb1b0,0x826d,0xb1b1, +0x826e,0xb1b2,0x826f,0x8270,0x8271,0x8272,0x8273,0x8274, +0xb1b3,0x8275,0x8276,0x8277,0xb1b4,0x8278,0x8279,0x827a, +0xb1b5,0x8281,0x8282,0x8283,0x8284,0x8285,0x8286,0x8287, +0x8288,0xb1b6,0x8289,0xb1b7,0x828a,0x828b,0x828c,0x828d, +0x828e,0x828f,0x8290,0x8291,0xb1b8,0xb1b9,0x8292,0x8293, +0xb1ba,0x8294,0x8295,0xb1bb,0xb1bc,0xb1bd,0xb1be,0x8296, +0x8297,0x8298,0x8299,0xb1bf,0xb1c0,0xb1c1,0x829a,0xb1c2, +0x829b,0xb1c3,0xb1c4,0x829c,0x829d,0x829e,0x829f,0x82a0, +0xb1c5,0xb1c6,0x82a1,0x82a2,0xb1c7,0x82a3,0x82a4,0x82a5, +0xb1c8,0x82a6,0x82a7,0x82a8,0x82a9,0x82aa,0x82ab,0x82ac, +0x82ad,0x82ae,0x82af,0x82b0,0xb1c9,0xb1ca,0x82b1,0x82b2, +0x82b3,0x82b4,0x82b5,0x82b6,0xb1cb,0x82b7,0x82b8,0x82b9, +0x82ba,0x82bb,0x82bc,0x82bd,0x82be,0x82bf,0x82c0,0x82c1, +0x82c2,0x82c3,0x82c4,0x82c5,0x82c6,0x82c7,0x82c8,0xb1cc, +0x82c9,0x82ca,0x82cb,0x82cc,0x82cd,0x82ce,0x82cf,0x82d0, +0xb1cd,0xb1ce,0x82d1,0x82d2,0xb1cf,0x82d3,0x82d4,0x82d5, +0xb1d0,0x82d6,0x82d7,0x82d8,0x82d9,0x82da,0x82db,0x82dc, +0xb1d1,0xb1d2,0x82dd,0xb1d3,0x82de,0x82df,0x82e0,0x82e1, +0x82e2,0x82e3,0x82e4,0x82e5,0xb1d4,0x82e6,0x82e7,0x82e8, +0xb1d5,0x82e9,0x82ea,0x82eb,0xb1d6,0x82ec,0x82ed,0x82ee, +0x82ef,0x82f0,0x82f1,0x82f2,0x82f3,0x82f4,0x82f5,0x82f6, +0x82f7,0x82f8,0x82f9,0x82fa,0x82fb,0x82fc,0x82fd,0x82fe, +0xb1d7,0xb1d8,0x8341,0x8342,0xb1d9,0x8343,0x8344,0xb1da, +/* 0xae00 */ +0xb1db,0xb1dc,0x8345,0x8346,0x8347,0x8348,0x8349,0x834a, +0xb1dd,0xb1de,0x834b,0xb1df,0x834c,0xb1e0,0x834d,0x834e, +0x834f,0x8350,0x8351,0x8352,0xb1e1,0x8353,0x8354,0x8355, +0x8356,0x8357,0x8358,0x8359,0x835a,0x8361,0x8362,0x8363, +0x8364,0x8365,0x8366,0x8367,0x8368,0x8369,0x836a,0x836b, +0x836c,0x836d,0x836e,0x836f,0x8370,0x8371,0x8372,0x8373, +0xb1e2,0xb1e3,0x8374,0x8375,0xb1e4,0x8376,0x8377,0xb1e5, +0xb1e6,0x8378,0xb1e7,0x8379,0x837a,0x8381,0x8382,0x8383, +0xb1e8,0xb1e9,0x8384,0xb1ea,0x8385,0xb1eb,0xb1ec,0x8386, +0x8387,0x8388,0xb1ed,0x8389,0xb1ee,0xb1ef,0xb1f0,0x838a, +0xb1f1,0x838b,0x838c,0x838d,0xb1f2,0x838e,0xb1f3,0x838f, +0x8390,0x8391,0x8392,0x8393,0xb1f4,0xb1f5,0x8394,0xb1f6, +0xb1f7,0xb1f8,0x8395,0x8396,0x8397,0xb1f9,0x8398,0x8399, +0xb1fa,0xb1fb,0x839a,0x839b,0xb1fc,0x839c,0x839d,0x839e, +0xb1fd,0x839f,0x83a0,0x83a1,0x83a2,0x83a3,0x83a4,0x83a5, +0xb1fe,0xb2a1,0x83a6,0xb2a2,0xb2a3,0xb2a4,0x83a7,0x83a8, +0x83a9,0x83aa,0x83ab,0x83ac,0xb2a5,0xb2a6,0x83ad,0x83ae, +0x83af,0x83b0,0x83b1,0x83b2,0xb2a7,0x83b3,0x83b4,0x83b5, +0x83b6,0x83b7,0x83b8,0x83b9,0x83ba,0x83bb,0x83bc,0x83bd, +0x83be,0x83bf,0x83c0,0x83c1,0x83c2,0x83c3,0x83c4,0x83c5, +0x83c6,0x83c7,0x83c8,0x83c9,0x83ca,0x83cb,0x83cc,0x83cd, +0x83ce,0x83cf,0x83d0,0x83d1,0x83d2,0x83d3,0x83d4,0x83d5, +0x83d6,0x83d7,0x83d8,0x83d9,0x83da,0x83db,0x83dc,0x83dd, +0x83de,0x83df,0x83e0,0x83e1,0xb2a8,0xb2a9,0xb2aa,0x83e2, +0xb2ab,0x83e3,0x83e4,0x83e5,0xb2ac,0x83e6,0x83e7,0x83e8, +0x83e9,0x83ea,0x83eb,0x83ec,0xb2ad,0xb2ae,0x83ed,0xb2af, +0xb2b0,0xb2b1,0x83ee,0x83ef,0x83f0,0x83f1,0x83f2,0x83f3, +0xb2b2,0xb2b3,0x83f4,0x83f5,0xb2b4,0x83f6,0x83f7,0x83f8, +0x83f9,0x83fa,0x83fb,0x83fc,0x83fd,0x83fe,0x8441,0x8442, +0xb2b5,0x8443,0x8444,0xb2b6,0x8445,0xb2b7,0x8446,0x8447, +0x8448,0x8449,0x844a,0x844b,0xb2b8,0x844c,0x844d,0x844e, +0xb2b9,0x844f,0x8450,0x8451,0xb2ba,0x8452,0x8453,0x8454, +/* 0xaf00 */ +0x8455,0x8456,0x8457,0x8458,0x8459,0x845a,0x8461,0xb2bb, +0xb2bc,0x8462,0x8463,0x8464,0x8465,0xb2bd,0x8466,0x8467, +0xb2be,0x8468,0x8469,0x846a,0x846b,0x846c,0x846d,0x846e, +0x846f,0x8470,0x8471,0x8472,0x8473,0x8474,0x8475,0x8476, +0x8477,0x8478,0x8479,0x847a,0x8481,0x8482,0x8483,0x8484, +0x8485,0x8486,0x8487,0x8488,0xb2bf,0xb2c0,0x8489,0x848a, +0xb2c1,0x848b,0xb2c2,0x848c,0xb2c3,0x848d,0x848e,0x848f, +0x8490,0x8491,0x8492,0x8493,0xb2c4,0xb2c5,0x8494,0xb2c6, +0x8495,0xb2c7,0xb2c8,0xb2c9,0x8496,0x8497,0x8498,0x8499, +0xb2ca,0xb2cb,0x849a,0x849b,0x849c,0x849d,0x849e,0x849f, +0xb2cc,0x84a0,0x84a1,0x84a2,0x84a3,0x84a4,0x84a5,0x84a6, +0x84a7,0x84a8,0x84a9,0x84aa,0xb2cd,0xb2ce,0x84ab,0x84ac, +0x84ad,0x84ae,0x84af,0x84b0,0xb2cf,0xb2d0,0x84b1,0x84b2, +0x84b3,0x84b4,0x84b5,0x84b6,0x84b7,0x84b8,0x84b9,0x84ba, +0x84bb,0x84bc,0x84bd,0x84be,0x84bf,0x84c0,0x84c1,0x84c2, +0x84c3,0xb2d1,0x84c4,0x84c5,0x84c6,0x84c7,0x84c8,0x84c9, +0xb2d2,0x84ca,0x84cb,0x84cc,0xb2d3,0x84cd,0x84ce,0x84cf, +0xb2d4,0x84d0,0x84d1,0x84d2,0x84d3,0x84d4,0x84d5,0x84d6, +0xb2d5,0xb2d6,0x84d7,0x84d8,0x84d9,0xb2d7,0x84da,0x84db, +0x84dc,0x84dd,0x84de,0x84df,0xb2d8,0x84e0,0x84e1,0x84e2, +0x84e3,0x84e4,0x84e5,0x84e6,0x84e7,0x84e8,0x84e9,0x84ea, +0x84eb,0x84ec,0x84ed,0x84ee,0x84ef,0x84f0,0x84f1,0x84f2, +0x84f3,0x84f4,0x84f5,0x84f6,0x84f7,0x84f8,0x84f9,0x84fa, +0xb2d9,0xb2da,0x84fb,0x84fc,0xb2db,0x84fd,0x84fe,0x8541, +0xb2dc,0x8542,0x8543,0x8544,0x8545,0x8546,0x8547,0xb2dd, +0xb2de,0xb2df,0x8548,0xb2e0,0x8549,0xb2e1,0xb2e2,0x854a, +0x854b,0x854c,0x854d,0x854e,0xb2e3,0x854f,0x8550,0x8551, +0x8552,0x8553,0x8554,0x8555,0xb2e4,0x8556,0x8557,0x8558, +0x8559,0x855a,0x8561,0x8562,0x8563,0x8564,0x8565,0x8566, +0xb2e5,0xb2e6,0x8567,0x8568,0x8569,0x856a,0x856b,0x856c, +0xb2e7,0xb2e8,0x856d,0x856e,0xb2e9,0x856f,0x8570,0x8571, +0xb2ea,0x8572,0x8573,0x8574,0x8575,0x8576,0x8577,0x8578, +/* 0xb000 */ +0xb2eb,0xb2ec,0x8579,0x857a,0xb2ed,0x8581,0x8582,0x8583, +0x8584,0x8585,0x8586,0x8587,0xb2ee,0x8588,0x8589,0x858a, +0xb2ef,0x858b,0x858c,0x858d,0xb2f0,0x858e,0x858f,0x8590, +0x8591,0x8592,0x8593,0x8594,0xb2f1,0xb2f2,0x8595,0x8596, +0x8597,0x8598,0x8599,0x859a,0x859b,0x859c,0x859d,0x859e, +0xb2f3,0x859f,0x85a0,0x85a1,0x85a2,0x85a3,0x85a4,0x85a5, +0x85a6,0x85a7,0x85a8,0x85a9,0x85aa,0x85ab,0x85ac,0x85ad, +0x85ae,0x85af,0x85b0,0x85b1,0x85b2,0x85b3,0x85b4,0x85b5, +0x85b6,0x85b7,0x85b8,0x85b9,0xb2f4,0xb2f5,0x85ba,0x85bb, +0xb2f6,0x85bc,0xb2f7,0x85bd,0xb2f8,0x85be,0xb2f9,0x85bf, +0x85c0,0x85c1,0x85c2,0xb2fa,0xb2fb,0xb2fc,0x85c3,0xb2fd, +0x85c4,0xb2fe,0x85c5,0x85c6,0x85c7,0xb3a1,0x85c8,0x85c9, +0x85ca,0x85cb,0x85cc,0x85cd,0x85ce,0x85cf,0x85d0,0x85d1, +0x85d2,0x85d3,0x85d4,0x85d5,0x85d6,0x85d7,0x85d8,0x85d9, +0x85da,0x85db,0x85dc,0x85dd,0x85de,0x85df,0x85e0,0x85e1, +0x85e2,0x85e3,0x85e4,0x85e5,0xb3a2,0xb3a3,0x85e6,0x85e7, +0xb3a4,0x85e8,0x85e9,0x85ea,0xb3a5,0x85eb,0x85ec,0x85ed, +0x85ee,0x85ef,0x85f0,0x85f1,0xb3a6,0xb3a7,0x85f2,0xb3a8, +0x85f3,0xb3a9,0x85f4,0x85f5,0x85f6,0x85f7,0x85f8,0x85f9, +0xb3aa,0xb3ab,0xb3ac,0x85fa,0xb3ad,0x85fb,0x85fc,0xb3ae, +0xb3af,0xb3b0,0xb3b1,0x85fd,0x85fe,0x8641,0x8642,0x8643, +0xb3b2,0xb3b3,0x8644,0xb3b4,0xb3b5,0xb3b6,0xb3b7,0xb3b8, +0x8645,0xb3b9,0x8646,0xb3ba,0xb3bb,0xb3bc,0x8647,0x8648, +0xb3bd,0x8649,0x864a,0x864b,0xb3be,0x864c,0x864d,0x864e, +0x864f,0x8650,0x8651,0x8652,0xb3bf,0xb3c0,0x8653,0xb3c1, +0xb3c2,0xb3c3,0x8654,0x8655,0x8656,0x8657,0x8658,0x8659, +0xb3c4,0xb3c5,0x865a,0x8661,0xb3c6,0x8662,0x8663,0x8664, +0xb3c7,0x8665,0x8666,0x8667,0x8668,0x8669,0x866a,0x866b, +0xb3c8,0x866c,0x866d,0x866e,0x866f,0xb3c9,0x8670,0x8671, +0x8672,0x8673,0x8674,0x8675,0x8676,0x8677,0x8678,0x8679, +0x867a,0x8681,0x8682,0x8683,0x8684,0x8685,0x8686,0x8687, +0x8688,0x8689,0x868a,0x868b,0x868c,0x868d,0x868e,0x868f, +/* 0xb100 */ +0x8690,0x8691,0x8692,0x8693,0x8694,0x8695,0x8696,0x8697, +0xb3ca,0xb3cb,0x8698,0xb3cc,0xb3cd,0x8699,0x869a,0x869b, +0xb3ce,0x869c,0xb3cf,0xb3d0,0x869d,0x869e,0x869f,0x86a0, +0xb3d1,0xb3d2,0x86a1,0xb3d3,0xb3d4,0xb3d5,0x86a2,0x86a3, +0x86a4,0x86a5,0x86a6,0xb3d6,0xb3d7,0xb3d8,0x86a7,0x86a8, +0xb3d9,0x86a9,0x86aa,0x86ab,0xb3da,0x86ac,0x86ad,0x86ae, +0x86af,0x86b0,0x86b1,0x86b2,0xb3db,0xb3dc,0x86b3,0xb3dd, +0xb3de,0xb3df,0x86b4,0x86b5,0x86b6,0x86b7,0x86b8,0x86b9, +0xb3e0,0xb3e1,0x86ba,0x86bb,0xb3e2,0x86bc,0x86bd,0x86be, +0xb3e3,0x86bf,0x86c0,0x86c1,0x86c2,0x86c3,0x86c4,0x86c5, +0xb3e4,0xb3e5,0x86c6,0x86c7,0xb3e6,0xb3e7,0x86c8,0x86c9, +0xb3e8,0x86ca,0x86cb,0x86cc,0xb3e9,0x86cd,0x86ce,0x86cf, +0xb3ea,0x86d0,0x86d1,0x86d2,0x86d3,0x86d4,0x86d5,0x86d6, +0x86d7,0x86d8,0x86d9,0x86da,0x86db,0x86dc,0x86dd,0x86de, +0x86df,0x86e0,0x86e1,0x86e2,0x86e3,0x86e4,0x86e5,0x86e6, +0xb3eb,0xb3ec,0x86e7,0x86e8,0xb3ed,0x86e9,0x86ea,0x86eb, +0xb3ee,0x86ec,0xb3ef,0x86ed,0x86ee,0x86ef,0x86f0,0x86f1, +0xb3f0,0xb3f1,0x86f2,0xb3f2,0x86f3,0xb3f3,0x86f4,0x86f5, +0x86f6,0x86f7,0xb3f4,0xb3f5,0xb3f6,0x86f8,0x86f9,0x86fa, +0xb3f7,0x86fb,0x86fc,0x86fd,0xb3f8,0x86fe,0x8741,0x8742, +0x8743,0x8744,0x8745,0x8746,0x8747,0x8748,0x8749,0x874a, +0xb3f9,0x874b,0x874c,0x874d,0x874e,0x874f,0x8750,0x8751, +0x8752,0x8753,0x8754,0x8755,0x8756,0x8757,0x8758,0x8759, +0x875a,0x8761,0x8762,0x8763,0x8764,0x8765,0x8766,0x8767, +0x8768,0x8769,0x876a,0x876b,0x876c,0x876d,0x876e,0x876f, +0x8770,0x8771,0x8772,0x8773,0xb3fa,0x8774,0x8775,0x8776, +0xb3fb,0x8777,0x8778,0x8779,0xb3fc,0x877a,0x8781,0x8782, +0x8783,0x8784,0x8785,0x8786,0xb3fd,0xb3fe,0x8787,0xb4a1, +0x8788,0x8789,0x878a,0x878b,0x878c,0x878d,0x878e,0x878f, +0xb4a2,0xb4a3,0x8790,0x8791,0xb4a4,0x8792,0x8793,0x8794, +0xb4a5,0x8795,0x8796,0x8797,0x8798,0x8799,0x879a,0x879b, +0x879c,0xb4a6,0x879d,0xb4a7,0x879e,0xb4a8,0x879f,0x87a0, +/* 0xb200 */ +0x87a1,0x87a2,0x87a3,0x87a4,0xb4a9,0xb4aa,0x87a5,0x87a6, +0xb4ab,0x87a7,0x87a8,0xb4ac,0xb4ad,0x87a9,0x87aa,0x87ab, +0x87ac,0x87ad,0x87ae,0x87af,0xb4ae,0xb4af,0x87b0,0xb4b0, +0x87b1,0xb4b1,0x87b2,0x87b3,0x87b4,0x87b5,0x87b6,0x87b7, +0xb4b2,0x87b8,0x87b9,0x87ba,0x87bb,0x87bc,0x87bd,0x87be, +0x87bf,0x87c0,0x87c1,0x87c2,0x87c3,0x87c4,0x87c5,0x87c6, +0x87c7,0x87c8,0x87c9,0x87ca,0xb4b3,0x87cb,0x87cc,0x87cd, +0x87ce,0x87cf,0x87d0,0x87d1,0xb4b4,0x87d2,0x87d3,0x87d4, +0x87d5,0x87d6,0x87d7,0x87d8,0x87d9,0x87da,0x87db,0x87dc, +0x87dd,0x87de,0x87df,0x87e0,0x87e1,0x87e2,0x87e3,0x87e4, +0x87e5,0x87e6,0x87e7,0x87e8,0x87e9,0x87ea,0x87eb,0x87ec, +0xb4b5,0x87ed,0x87ee,0x87ef,0xb4b6,0x87f0,0x87f1,0x87f2, +0xb4b7,0x87f3,0x87f4,0x87f5,0x87f6,0x87f7,0x87f8,0x87f9, +0xb4b8,0xb4b9,0x87fa,0x87fb,0x87fc,0x87fd,0x87fe,0x8841, +0x8842,0x8843,0x8844,0x8845,0xb4ba,0xb4bb,0x8846,0x8847, +0x8848,0x8849,0x884a,0x884b,0xb4bc,0x884c,0x884d,0x884e, +0x884f,0x8850,0x8851,0x8852,0xb4bd,0xb4be,0x8853,0x8854, +0x8855,0xb4bf,0x8856,0x8857,0x8858,0x8859,0x885a,0x8861, +0xb4c0,0xb4c1,0x8862,0x8863,0xb4c2,0x8864,0x8865,0x8866, +0xb4c3,0xb4c4,0xb4c5,0x8867,0x8868,0x8869,0x886a,0x886b, +0xb4c6,0xb4c7,0x886c,0xb4c8,0x886d,0xb4c9,0xb4ca,0x886e, +0x886f,0x8870,0xb4cb,0x8871,0xb4cc,0x8872,0x8873,0x8874, +0xb4cd,0x8875,0x8876,0x8877,0xb4ce,0x8878,0x8879,0x887a, +0x8881,0x8882,0x8883,0x8884,0x8885,0x8886,0x8887,0x8888, +0x8889,0x888a,0x888b,0x888c,0x888d,0x888e,0x888f,0x8890, +0xb4cf,0xb4d0,0x8891,0x8892,0xb4d1,0x8893,0x8894,0x8895, +0xb4d2,0x8896,0xb4d3,0x8897,0x8898,0x8899,0x889a,0x889b, +0xb4d4,0xb4d5,0x889c,0xb4d6,0x889d,0xb4d7,0x889e,0x889f, +0x88a0,0x88a1,0xb4d8,0x88a2,0xb4d9,0xb4da,0xb4db,0x88a3, +0xb4dc,0x88a4,0x88a5,0xb4dd,0xb4de,0xb4df,0xb4e0,0xb4e1, +0x88a6,0x88a7,0x88a8,0xb4e2,0xb4e3,0xb4e4,0x88a9,0xb4e5, +0xb4e6,0xb4e7,0xb4e8,0xb4e9,0x88aa,0x88ab,0x88ac,0xb4ea, +/* 0xb300 */ +0xb4eb,0xb4ec,0x88ad,0x88ae,0xb4ed,0x88af,0x88b0,0x88b1, +0xb4ee,0x88b2,0x88b3,0x88b4,0x88b5,0x88b6,0x88b7,0x88b8, +0xb4ef,0xb4f0,0x88b9,0xb4f1,0xb4f2,0xb4f3,0x88ba,0x88bb, +0x88bc,0x88bd,0x88be,0x88bf,0xb4f4,0x88c0,0x88c1,0x88c2, +0x88c3,0x88c4,0x88c5,0x88c6,0x88c7,0x88c8,0x88c9,0x88ca, +0x88cb,0x88cc,0x88cd,0x88ce,0x88cf,0x88d0,0x88d1,0x88d2, +0x88d3,0x88d4,0x88d5,0x88d6,0x88d7,0x88d8,0x88d9,0x88da, +0x88db,0x88dc,0x88dd,0x88de,0x88df,0x88e0,0x88e1,0x88e2, +0x88e3,0x88e4,0x88e5,0x88e6,0x88e7,0x88e8,0x88e9,0x88ea, +0x88eb,0x88ec,0x88ed,0x88ee,0x88ef,0x88f0,0x88f1,0x88f2, +0x88f3,0x88f4,0x88f5,0x88f6,0xb4f5,0xb4f6,0xb4f7,0x88f7, +0xb4f8,0x88f8,0x88f9,0xb4f9,0xb4fa,0x88fa,0xb4fb,0xb4fc, +0x88fb,0x88fc,0x88fd,0x88fe,0xb4fd,0xb4fe,0x8941,0xb5a1, +0x8942,0xb5a2,0x8943,0xb5a3,0x8944,0x8945,0xb5a4,0x8946, +0xb5a5,0xb5a6,0x8947,0x8948,0xb5a7,0x8949,0x894a,0x894b, +0xb5a8,0x894c,0x894d,0x894e,0x894f,0x8950,0x8951,0x8952, +0xb5a9,0xb5aa,0x8953,0xb5ab,0xb5ac,0xb5ad,0x8954,0x8955, +0x8956,0x8957,0x8958,0x8959,0xb5ae,0x895a,0x8961,0x8962, +0xb5af,0x8963,0x8964,0x8965,0xb5b0,0x8966,0x8967,0x8968, +0x8969,0x896a,0x896b,0x896c,0x896d,0x896e,0x896f,0x8970, +0xb5b1,0xb5b2,0x8971,0x8972,0x8973,0x8974,0x8975,0x8976, +0xb5b3,0x8977,0x8978,0x8979,0xb5b4,0x897a,0x8981,0x8982, +0x8983,0x8984,0x8985,0x8986,0x8987,0x8988,0x8989,0x898a, +0x898b,0x898c,0x898d,0x898e,0x898f,0x8990,0x8991,0x8992, +0x8993,0x8994,0x8995,0x8996,0xb5b5,0xb5b6,0x8997,0x8998, +0xb5b7,0x8999,0x899a,0xb5b8,0xb5b9,0x899b,0xb5ba,0x899c, +0xb5bb,0x899d,0x899e,0x899f,0xb5bc,0xb5bd,0x89a0,0xb5be, +0x89a1,0xb5bf,0x89a2,0xb5c0,0x89a3,0xb5c1,0x89a4,0x89a5, +0xb5c2,0x89a6,0x89a7,0x89a8,0xb5c3,0x89a9,0x89aa,0x89ab, +0xb5c4,0x89ac,0x89ad,0x89ae,0x89af,0x89b0,0x89b1,0x89b2, +0x89b3,0x89b4,0x89b5,0x89b6,0x89b7,0x89b8,0x89b9,0x89ba, +0x89bb,0x89bc,0x89bd,0x89be,0xb5c5,0x89bf,0x89c0,0x89c1, +/* 0xb400 */ +0x89c2,0x89c3,0x89c4,0x89c5,0x89c6,0x89c7,0x89c8,0x89c9, +0x89ca,0x89cb,0x89cc,0x89cd,0x89ce,0x89cf,0x89d0,0x89d1, +0xb5c6,0x89d2,0x89d3,0x89d4,0x89d5,0x89d6,0x89d7,0x89d8, +0xb5c7,0x89d9,0x89da,0x89db,0xb5c8,0x89dc,0x89dd,0x89de, +0xb5c9,0x89df,0x89e0,0x89e1,0x89e2,0x89e3,0x89e4,0x89e5, +0xb5ca,0xb5cb,0x89e6,0xb5cc,0x89e7,0x89e8,0x89e9,0x89ea, +0x89eb,0x89ec,0x89ed,0x89ee,0xb5cd,0x89ef,0x89f0,0x89f1, +0x89f2,0x89f3,0x89f4,0x89f5,0x89f6,0x89f7,0x89f8,0x89f9, +0x89fa,0x89fb,0x89fc,0x89fd,0x89fe,0x8a41,0x8a42,0x8a43, +0x8a44,0x8a45,0x8a46,0x8a47,0x8a48,0x8a49,0x8a4a,0x8a4b, +0xb5ce,0xb5cf,0x8a4c,0x8a4d,0xb5d0,0x8a4e,0x8a4f,0x8a50, +0xb5d1,0x8a51,0x8a52,0x8a53,0x8a54,0x8a55,0x8a56,0x8a57, +0xb5d2,0xb5d3,0x8a58,0xb5d4,0x8a59,0xb5d5,0x8a5a,0x8a61, +0x8a62,0x8a63,0x8a64,0x8a65,0xb5d6,0x8a66,0x8a67,0x8a68, +0x8a69,0x8a6a,0x8a6b,0x8a6c,0x8a6d,0x8a6e,0x8a6f,0x8a70, +0x8a71,0x8a72,0x8a73,0x8a74,0x8a75,0x8a76,0x8a77,0x8a78, +0xb5d7,0x8a79,0x8a7a,0x8a81,0x8a82,0x8a83,0x8a84,0x8a85, +0xb5d8,0x8a86,0x8a87,0x8a88,0x8a89,0x8a8a,0x8a8b,0x8a8c, +0x8a8d,0x8a8e,0x8a8f,0x8a90,0x8a91,0x8a92,0x8a93,0x8a94, +0x8a95,0x8a96,0x8a97,0x8a98,0x8a99,0xb5d9,0x8a9a,0x8a9b, +0x8a9c,0x8a9d,0x8a9e,0x8a9f,0xb5da,0x8aa0,0x8aa1,0x8aa2, +0xb5db,0x8aa3,0x8aa4,0x8aa5,0xb5dc,0x8aa6,0x8aa7,0x8aa8, +0x8aa9,0x8aaa,0x8aab,0x8aac,0x8aad,0xb5dd,0x8aae,0xb5de, +0x8aaf,0xb5df,0x8ab0,0x8ab1,0x8ab2,0x8ab3,0x8ab4,0x8ab5, +0xb5e0,0x8ab6,0x8ab7,0x8ab8,0xb5e1,0x8ab9,0x8aba,0x8abb, +0xb5e2,0x8abc,0x8abd,0x8abe,0x8abf,0x8ac0,0x8ac1,0x8ac2, +0xb5e3,0x8ac3,0x8ac4,0x8ac5,0x8ac6,0xb5e4,0x8ac7,0x8ac8, +0x8ac9,0x8aca,0x8acb,0x8acc,0xb5e5,0xb5e6,0x8acd,0x8ace, +0xb5e7,0x8acf,0x8ad0,0xb5e8,0xb5e9,0x8ad1,0xb5ea,0x8ad2, +0x8ad3,0x8ad4,0x8ad5,0x8ad6,0xb5eb,0xb5ec,0x8ad7,0xb5ed, +0x8ad8,0xb5ee,0x8ad9,0x8ada,0x8adb,0x8adc,0x8add,0x8ade, +0xb5ef,0x8adf,0x8ae0,0x8ae1,0x8ae2,0x8ae3,0x8ae4,0x8ae5, +/* 0xb500 */ +0x8ae6,0x8ae7,0x8ae8,0x8ae9,0x8aea,0x8aeb,0x8aec,0x8aed, +0x8aee,0x8aef,0x8af0,0x8af1,0x8af2,0x8af3,0x8af4,0x8af5, +0x8af6,0x8af7,0x8af8,0x8af9,0xb5f0,0xb5f1,0x8afa,0x8afb, +0xb5f2,0x8afc,0x8afd,0xb5f3,0xb5f4,0x8afe,0x8b41,0x8b42, +0x8b43,0x8b44,0x8b45,0x8b46,0xb5f5,0xb5f6,0x8b47,0xb5f7, +0xb5f8,0xb5f9,0xb5fa,0x8b48,0x8b49,0x8b4a,0x8b4b,0x8b4c, +0xb5fb,0xb5fc,0x8b4d,0x8b4e,0xb5fd,0x8b4f,0x8b50,0x8b51, +0xb5fe,0x8b52,0x8b53,0x8b54,0x8b55,0x8b56,0x8b57,0x8b58, +0xb6a1,0xb6a2,0x8b59,0xb6a3,0xb6a4,0xb6a5,0x8b5a,0x8b61, +0x8b62,0x8b63,0x8b64,0xb6a6,0xb6a7,0xb6a8,0x8b65,0x8b66, +0xb6a9,0x8b67,0x8b68,0x8b69,0xb6aa,0x8b6a,0x8b6b,0x8b6c, +0x8b6d,0x8b6e,0x8b6f,0x8b70,0xb6ab,0xb6ac,0x8b71,0xb6ad, +0xb6ae,0xb6af,0x8b72,0x8b73,0x8b74,0x8b75,0x8b76,0x8b77, +0x8b78,0x8b79,0x8b7a,0x8b81,0x8b82,0x8b83,0x8b84,0x8b85, +0x8b86,0x8b87,0x8b88,0x8b89,0x8b8a,0x8b8b,0x8b8c,0x8b8d, +0x8b8e,0x8b8f,0x8b90,0x8b91,0x8b92,0x8b93,0x8b94,0x8b95, +0x8b96,0x8b97,0x8b98,0x8b99,0x8b9a,0x8b9b,0x8b9c,0x8b9d, +0x8b9e,0x8b9f,0x8ba0,0x8ba1,0x8ba2,0x8ba3,0x8ba4,0x8ba5, +0x8ba6,0x8ba7,0x8ba8,0x8ba9,0x8baa,0x8bab,0x8bac,0x8bad, +0x8bae,0x8baf,0x8bb0,0x8bb1,0x8bb2,0x8bb3,0x8bb4,0x8bb5, +0xb6b0,0xb6b1,0x8bb6,0x8bb7,0xb6b2,0x8bb8,0x8bb9,0x8bba, +0xb6b3,0x8bbb,0xb6b4,0xb6b5,0x8bbc,0x8bbd,0x8bbe,0x8bbf, +0xb6b6,0xb6b7,0x8bc0,0xb6b8,0xb6b9,0xb6ba,0x8bc1,0x8bc2, +0x8bc3,0x8bc4,0x8bc5,0xb6bb,0xb6bc,0xb6bd,0x8bc6,0x8bc7, +0xb6be,0x8bc8,0x8bc9,0x8bca,0xb6bf,0x8bcb,0x8bcc,0x8bcd, +0x8bce,0x8bcf,0x8bd0,0x8bd1,0xb6c0,0xb6c1,0x8bd2,0xb6c2, +0xb6c3,0xb6c4,0x8bd3,0x8bd4,0x8bd5,0x8bd6,0x8bd7,0x8bd8, +0xb6c5,0x8bd9,0x8bda,0x8bdb,0x8bdc,0x8bdd,0x8bde,0x8bdf, +0x8be0,0x8be1,0x8be2,0x8be3,0x8be4,0x8be5,0x8be6,0x8be7, +0x8be8,0x8be9,0x8bea,0x8beb,0xb6c6,0x8bec,0x8bed,0x8bee, +0x8bef,0x8bf0,0x8bf1,0x8bf2,0x8bf3,0x8bf4,0x8bf5,0x8bf6, +0x8bf7,0x8bf8,0x8bf9,0x8bfa,0x8bfb,0x8bfc,0x8bfd,0x8bfe, +/* 0xb600 */ +0x8c41,0x8c42,0x8c43,0x8c44,0x8c45,0x8c46,0x8c47,0x8c48, +0x8c49,0x8c4a,0x8c4b,0x8c4c,0x8c4d,0x8c4e,0x8c4f,0x8c50, +0xb6c7,0xb6c8,0x8c51,0x8c52,0xb6c9,0x8c53,0x8c54,0x8c55, +0xb6ca,0x8c56,0x8c57,0x8c58,0x8c59,0x8c5a,0x8c61,0x8c62, +0x8c63,0x8c64,0x8c65,0x8c66,0x8c67,0xb6cb,0x8c68,0x8c69, +0x8c6a,0x8c6b,0x8c6c,0x8c6d,0xb6cc,0x8c6e,0x8c6f,0x8c70, +0x8c71,0x8c72,0x8c73,0x8c74,0xb6cd,0x8c75,0x8c76,0x8c77, +0x8c78,0x8c79,0x8c7a,0x8c81,0x8c82,0x8c83,0x8c84,0x8c85, +0x8c86,0x8c87,0x8c88,0x8c89,0x8c8a,0x8c8b,0x8c8c,0x8c8d, +0xb6ce,0x8c8e,0x8c8f,0x8c90,0x8c91,0x8c92,0x8c93,0x8c94, +0x8c95,0x8c96,0x8c97,0x8c98,0x8c99,0x8c9a,0x8c9b,0x8c9c, +0x8c9d,0x8c9e,0x8c9f,0x8ca0,0x8ca1,0x8ca2,0x8ca3,0x8ca4, +0x8ca5,0x8ca6,0x8ca7,0x8ca8,0xb6cf,0x8ca9,0x8caa,0x8cab, +0xb6d0,0x8cac,0x8cad,0x8cae,0x8caf,0x8cb0,0x8cb1,0x8cb2, +0x8cb3,0x8cb4,0x8cb5,0x8cb6,0x8cb7,0x8cb8,0x8cb9,0x8cba, +0x8cbb,0x8cbc,0x8cbd,0x8cbe,0x8cbf,0x8cc0,0x8cc1,0x8cc2, +0x8cc3,0x8cc4,0x8cc5,0x8cc6,0x8cc7,0x8cc8,0x8cc9,0x8cca, +0x8ccb,0x8ccc,0x8ccd,0x8cce,0x8ccf,0x8cd0,0x8cd1,0x8cd2, +0x8cd3,0x8cd4,0x8cd5,0x8cd6,0x8cd7,0x8cd8,0x8cd9,0x8cda, +0x8cdb,0x8cdc,0x8cdd,0x8cde,0xb6d1,0xb6d2,0x8cdf,0x8ce0, +0xb6d3,0x8ce1,0x8ce2,0x8ce3,0xb6d4,0x8ce4,0x8ce5,0x8ce6, +0x8ce7,0x8ce8,0x8ce9,0xb6d5,0xb6d6,0x8cea,0x8ceb,0x8cec, +0x8ced,0xb6d7,0x8cee,0x8cef,0x8cf0,0x8cf1,0x8cf2,0x8cf3, +0x8cf4,0x8cf5,0x8cf6,0x8cf7,0x8cf8,0x8cf9,0x8cfa,0x8cfb, +0x8cfc,0x8cfd,0x8cfe,0x8d41,0x8d42,0x8d43,0x8d44,0x8d45, +0x8d46,0x8d47,0x8d48,0x8d49,0x8d4a,0x8d4b,0x8d4c,0x8d4d, +0x8d4e,0x8d4f,0x8d50,0x8d51,0xb6d8,0x8d52,0x8d53,0x8d54, +0x8d55,0x8d56,0x8d57,0x8d58,0x8d59,0x8d5a,0x8d61,0x8d62, +0x8d63,0x8d64,0x8d65,0x8d66,0x8d67,0x8d68,0x8d69,0x8d6a, +0x8d6b,0x8d6c,0x8d6d,0x8d6e,0x8d6f,0x8d70,0x8d71,0x8d72, +0xb6d9,0x8d73,0x8d74,0x8d75,0xb6da,0x8d76,0x8d77,0x8d78, +0xb6db,0x8d79,0x8d7a,0x8d81,0x8d82,0x8d83,0x8d84,0x8d85, +/* 0xb700 */ +0xb6dc,0xb6dd,0x8d86,0x8d87,0x8d88,0xb6de,0x8d89,0x8d8a, +0x8d8b,0x8d8c,0x8d8d,0x8d8e,0x8d8f,0x8d90,0x8d91,0x8d92, +0x8d93,0x8d94,0x8d95,0x8d96,0x8d97,0x8d98,0x8d99,0x8d9a, +0x8d9b,0x8d9c,0x8d9d,0x8d9e,0x8d9f,0x8da0,0x8da1,0x8da2, +0x8da3,0x8da4,0x8da5,0x8da6,0x8da7,0x8da8,0x8da9,0x8daa, +0xb6df,0xb6e0,0x8dab,0x8dac,0xb6e1,0x8dad,0x8dae,0xb6e2, +0xb6e3,0x8daf,0x8db0,0x8db1,0x8db2,0x8db3,0x8db4,0x8db5, +0xb6e4,0xb6e5,0x8db6,0xb6e6,0x8db7,0x8db8,0x8db9,0x8dba, +0x8dbb,0x8dbc,0x8dbd,0x8dbe,0xb6e7,0x8dbf,0x8dc0,0x8dc1, +0xb6e8,0x8dc2,0x8dc3,0x8dc4,0xb6e9,0x8dc5,0x8dc6,0x8dc7, +0x8dc8,0x8dc9,0x8dca,0x8dcb,0xb6ea,0xb6eb,0x8dcc,0x8dcd, +0x8dce,0x8dcf,0x8dd0,0x8dd1,0x8dd2,0x8dd3,0x8dd4,0x8dd5, +0xb6ec,0x8dd6,0x8dd7,0x8dd8,0xb6ed,0x8dd9,0x8dda,0x8ddb, +0xb6ee,0x8ddc,0x8ddd,0x8dde,0x8ddf,0x8de0,0x8de1,0x8de2, +0xb6ef,0xb6f0,0x8de3,0xb6f1,0x8de4,0xb6f2,0x8de5,0x8de6, +0x8de7,0x8de8,0x8de9,0x8dea,0xb6f3,0xb6f4,0x8deb,0x8dec, +0xb6f5,0x8ded,0x8dee,0x8def,0xb6f6,0x8df0,0x8df1,0x8df2, +0x8df3,0x8df4,0x8df5,0x8df6,0xb6f7,0xb6f8,0x8df7,0xb6f9, +0xb6fa,0xb6fb,0xb6fc,0x8df8,0x8df9,0x8dfa,0xb6fd,0xb6fe, +0xb7a1,0xb7a2,0x8dfb,0x8dfc,0xb7a3,0x8dfd,0x8dfe,0x8e41, +0xb7a4,0x8e42,0x8e43,0x8e44,0x8e45,0x8e46,0x8e47,0x8e48, +0xb7a5,0xb7a6,0x8e49,0xb7a7,0xb7a8,0xb7a9,0x8e4a,0x8e4b, +0x8e4c,0x8e4d,0x8e4e,0x8e4f,0xb7aa,0xb7ab,0x8e50,0x8e51, +0xb7ac,0x8e52,0x8e53,0x8e54,0x8e55,0x8e56,0x8e57,0x8e58, +0x8e59,0x8e5a,0x8e61,0x8e62,0x8e63,0x8e64,0x8e65,0xb7ad, +0x8e66,0xb7ae,0x8e67,0x8e68,0x8e69,0x8e6a,0x8e6b,0x8e6c, +0x8e6d,0x8e6e,0x8e6f,0x8e70,0x8e71,0x8e72,0x8e73,0x8e74, +0x8e75,0x8e76,0x8e77,0x8e78,0x8e79,0x8e7a,0x8e81,0x8e82, +0x8e83,0x8e84,0x8e85,0x8e86,0x8e87,0x8e88,0x8e89,0x8e8a, +0x8e8b,0x8e8c,0x8e8d,0x8e8e,0xb7af,0xb7b0,0x8e8f,0x8e90, +0xb7b1,0x8e91,0x8e92,0x8e93,0xb7b2,0x8e94,0x8e95,0x8e96, +0x8e97,0x8e98,0x8e99,0x8e9a,0xb7b3,0xb7b4,0x8e9b,0xb7b5, +/* 0xb800 */ +0xb7b6,0xb7b7,0x8e9c,0x8e9d,0x8e9e,0x8e9f,0x8ea0,0xb7b8, +0xb7b9,0xb7ba,0x8ea1,0x8ea2,0xb7bb,0x8ea3,0x8ea4,0x8ea5, +0xb7bc,0x8ea6,0x8ea7,0x8ea8,0x8ea9,0x8eaa,0x8eab,0x8eac, +0xb7bd,0xb7be,0x8ead,0xb7bf,0x8eae,0xb7c0,0x8eaf,0x8eb0, +0x8eb1,0x8eb2,0x8eb3,0x8eb4,0xb7c1,0xb7c2,0x8eb5,0x8eb6, +0xb7c3,0x8eb7,0x8eb8,0x8eb9,0xb7c4,0x8eba,0x8ebb,0x8ebc, +0x8ebd,0x8ebe,0x8ebf,0x8ec0,0xb7c5,0xb7c6,0x8ec1,0xb7c7, +0xb7c8,0xb7c9,0x8ec2,0x8ec3,0x8ec4,0x8ec5,0x8ec6,0x8ec7, +0xb7ca,0x8ec8,0x8ec9,0x8eca,0xb7cb,0x8ecb,0x8ecc,0x8ecd, +0x8ece,0x8ecf,0x8ed0,0x8ed1,0x8ed2,0x8ed3,0x8ed4,0x8ed5, +0x8ed6,0xb7cc,0x8ed7,0xb7cd,0x8ed8,0x8ed9,0x8eda,0x8edb, +0x8edc,0x8edd,0x8ede,0x8edf,0xb7ce,0xb7cf,0x8ee0,0x8ee1, +0xb7d0,0x8ee2,0x8ee3,0x8ee4,0xb7d1,0x8ee5,0x8ee6,0x8ee7, +0x8ee8,0x8ee9,0x8eea,0x8eeb,0xb7d2,0xb7d3,0x8eec,0xb7d4, +0x8eed,0xb7d5,0x8eee,0x8eef,0x8ef0,0x8ef1,0x8ef2,0x8ef3, +0xb7d6,0x8ef4,0x8ef5,0x8ef6,0xb7d7,0x8ef7,0x8ef8,0x8ef9, +0x8efa,0x8efb,0x8efc,0x8efd,0x8efe,0x8f41,0x8f42,0x8f43, +0x8f44,0x8f45,0x8f46,0x8f47,0x8f48,0xb7d8,0x8f49,0x8f4a, +0x8f4b,0x8f4c,0x8f4d,0x8f4e,0x8f4f,0x8f50,0x8f51,0x8f52, +0x8f53,0x8f54,0x8f55,0x8f56,0x8f57,0x8f58,0x8f59,0x8f5a, +0x8f61,0x8f62,0x8f63,0x8f64,0x8f65,0x8f66,0x8f67,0x8f68, +0xb7d9,0x8f69,0x8f6a,0x8f6b,0x8f6c,0x8f6d,0x8f6e,0x8f6f, +0xb7da,0x8f70,0x8f71,0x8f72,0xb7db,0x8f73,0x8f74,0x8f75, +0xb7dc,0x8f76,0x8f77,0x8f78,0x8f79,0x8f7a,0x8f81,0x8f82, +0xb7dd,0xb7de,0x8f83,0xb7df,0x8f84,0xb7e0,0x8f85,0x8f86, +0x8f87,0x8f88,0x8f89,0x8f8a,0xb7e1,0x8f8b,0x8f8c,0x8f8d, +0xb7e2,0x8f8e,0x8f8f,0x8f90,0xb7e3,0x8f91,0x8f92,0x8f93, +0x8f94,0x8f95,0x8f96,0x8f97,0x8f98,0xb7e4,0x8f99,0xb7e5, +0x8f9a,0xb7e6,0x8f9b,0x8f9c,0x8f9d,0x8f9e,0x8f9f,0x8fa0, +0xb7e7,0xb7e8,0x8fa1,0x8fa2,0xb7e9,0x8fa3,0x8fa4,0x8fa5, +0xb7ea,0x8fa6,0x8fa7,0x8fa8,0x8fa9,0x8faa,0x8fab,0x8fac, +0xb7eb,0xb7ec,0x8fad,0xb7ed,0x8fae,0xb7ee,0x8faf,0x8fb0, +/* 0xb900 */ +0x8fb1,0x8fb2,0x8fb3,0x8fb4,0xb7ef,0x8fb5,0x8fb6,0x8fb7, +0x8fb8,0x8fb9,0x8fba,0x8fbb,0x8fbc,0x8fbd,0x8fbe,0x8fbf, +0x8fc0,0x8fc1,0x8fc2,0x8fc3,0x8fc4,0x8fc5,0x8fc6,0x8fc7, +0xb7f0,0x8fc8,0x8fc9,0x8fca,0x8fcb,0x8fcc,0x8fcd,0x8fce, +0xb7f1,0x8fcf,0x8fd0,0x8fd1,0x8fd2,0x8fd3,0x8fd4,0x8fd5, +0x8fd6,0x8fd7,0x8fd8,0x8fd9,0x8fda,0x8fdb,0x8fdc,0x8fdd, +0x8fde,0x8fdf,0x8fe0,0x8fe1,0x8fe2,0x8fe3,0x8fe4,0x8fe5, +0x8fe6,0x8fe7,0x8fe8,0x8fe9,0xb7f2,0xb7f3,0x8fea,0x8feb, +0xb7f4,0x8fec,0x8fed,0x8fee,0xb7f5,0x8fef,0x8ff0,0x8ff1, +0x8ff2,0x8ff3,0x8ff4,0x8ff5,0xb7f6,0x8ff6,0x8ff7,0xb7f7, +0x8ff8,0xb7f8,0x8ff9,0x8ffa,0x8ffb,0x8ffc,0x8ffd,0x8ffe, +0xb7f9,0xb7fa,0x9041,0x9042,0xb7fb,0x9043,0x9044,0x9045, +0xb7fc,0x9046,0x9047,0x9048,0x9049,0x904a,0x904b,0x904c, +0xb7fd,0xb7fe,0x904d,0xb8a1,0x904e,0xb8a2,0x904f,0x9050, +0x9051,0x9052,0x9053,0x9054,0xb8a3,0xb8a4,0x9055,0x9056, +0xb8a5,0x9057,0x9058,0x9059,0xb8a6,0x905a,0x9061,0x9062, +0x9063,0x9064,0x9065,0x9066,0xb8a7,0xb8a8,0x9067,0xb8a9, +0x9068,0xb8aa,0xb8ab,0x9069,0x906a,0xb8ac,0xb8ad,0x906b, +0x906c,0x906d,0x906e,0x906f,0x9070,0x9071,0x9072,0x9073, +0x9074,0x9075,0x9076,0x9077,0x9078,0x9079,0x907a,0x9081, +0x9082,0x9083,0x9084,0x9085,0x9086,0x9087,0x9088,0x9089, +0x908a,0x908b,0x908c,0x908d,0xb8ae,0xb8af,0x908e,0x908f, +0xb8b0,0x9090,0x9091,0x9092,0xb8b1,0x9093,0x9094,0x9095, +0x9096,0x9097,0x9098,0x9099,0xb8b2,0xb8b3,0x909a,0xb8b4, +0x909b,0xb8b5,0x909c,0x909d,0x909e,0x909f,0x90a0,0x90a1, +0xb8b6,0xb8b7,0x90a2,0x90a3,0xb8b8,0x90a4,0xb8b9,0xb8ba, +0xb8bb,0xb8bc,0xb8bd,0x90a5,0x90a6,0x90a7,0x90a8,0x90a9, +0xb8be,0xb8bf,0x90aa,0xb8c0,0x90ab,0xb8c1,0xb8c2,0x90ac, +0x90ad,0xb8c3,0x90ae,0xb8c4,0xb8c5,0xb8c6,0x90af,0x90b0, +0xb8c7,0x90b1,0x90b2,0x90b3,0xb8c8,0x90b4,0x90b5,0x90b6, +0x90b7,0x90b8,0x90b9,0x90ba,0xb8c9,0xb8ca,0x90bb,0xb8cb, +0xb8cc,0xb8cd,0xb8ce,0x90bc,0x90bd,0x90be,0x90bf,0x90c0, +/* 0xba00 */ +0xb8cf,0xb8d0,0x90c1,0x90c2,0x90c3,0x90c4,0x90c5,0x90c6, +0xb8d1,0x90c7,0x90c8,0x90c9,0x90ca,0x90cb,0x90cc,0x90cd, +0x90ce,0x90cf,0x90d0,0x90d1,0x90d2,0xb8d2,0x90d3,0x90d4, +0x90d5,0x90d6,0x90d7,0x90d8,0x90d9,0x90da,0x90db,0x90dc, +0x90dd,0x90de,0x90df,0x90e0,0x90e1,0x90e2,0x90e3,0x90e4, +0x90e5,0x90e6,0x90e7,0x90e8,0x90e9,0x90ea,0x90eb,0x90ec, +0x90ed,0x90ee,0x90ef,0x90f0,0x90f1,0x90f2,0x90f3,0x90f4, +0xb8d3,0xb8d4,0x90f5,0x90f6,0xb8d5,0x90f7,0x90f8,0x90f9, +0xb8d6,0x90fa,0xb8d7,0x90fb,0x90fc,0x90fd,0x90fe,0x9141, +0xb8d8,0xb8d9,0x9142,0xb8da,0x9143,0xb8db,0xb8dc,0x9144, +0x9145,0x9146,0x9147,0xb8dd,0xb8de,0xb8df,0x9148,0x9149, +0xb8e0,0x914a,0x914b,0x914c,0xb8e1,0x914d,0x914e,0x914f, +0x9150,0x9151,0x9152,0x9153,0xb8e2,0xb8e3,0x9154,0xb8e4, +0xb8e5,0xb8e6,0x9155,0x9156,0x9157,0x9158,0x9159,0x915a, +0xb8e7,0xb8e8,0x9161,0x9162,0xb8e9,0x9163,0x9164,0x9165, +0xb8ea,0x9166,0x9167,0x9168,0x9169,0x916a,0x916b,0x916c, +0x916d,0x916e,0x916f,0xb8eb,0xb8ec,0xb8ed,0x9170,0xb8ee, +0x9171,0x9172,0x9173,0x9174,0xb8ef,0x9175,0x9176,0x9177, +0x9178,0x9179,0x917a,0x9181,0x9182,0x9183,0x9184,0x9185, +0x9186,0x9187,0x9188,0x9189,0x918a,0x918b,0x918c,0x918d, +0x918e,0x918f,0x9190,0x9191,0x9192,0x9193,0x9194,0x9195, +0xb8f0,0xb8f1,0x9196,0xb8f2,0xb8f3,0x9197,0x9198,0x9199, +0xb8f4,0x919a,0xb8f5,0x919b,0x919c,0x919d,0x919e,0x919f, +0xb8f6,0xb8f7,0x91a0,0xb8f8,0x91a1,0xb8f9,0x91a2,0x91a3, +0x91a4,0x91a5,0x91a6,0x91a7,0xb8fa,0x91a8,0x91a9,0x91aa, +0xb8fb,0x91ab,0x91ac,0x91ad,0x91ae,0x91af,0x91b0,0x91b1, +0x91b2,0x91b3,0x91b4,0x91b5,0x91b6,0x91b7,0x91b8,0x91b9, +0xb8fc,0xb8fd,0x91ba,0x91bb,0x91bc,0x91bd,0x91be,0x91bf, +0x91c0,0x91c1,0x91c2,0x91c3,0x91c4,0x91c5,0x91c6,0x91c7, +0x91c8,0x91c9,0x91ca,0x91cb,0x91cc,0x91cd,0x91ce,0x91cf, +0x91d0,0x91d1,0x91d2,0x91d3,0x91d4,0x91d5,0x91d6,0x91d7, +0x91d8,0x91d9,0x91da,0x91db,0xb8fe,0x91dc,0x91dd,0x91de, +/* 0xbb00 */ +0xb9a1,0x91df,0x91e0,0x91e1,0xb9a2,0x91e2,0x91e3,0x91e4, +0x91e5,0x91e6,0x91e7,0x91e8,0x91e9,0xb9a3,0x91ea,0xb9a4, +0x91eb,0xb9a5,0x91ec,0x91ed,0x91ee,0x91ef,0x91f0,0x91f1, +0xb9a6,0x91f2,0x91f3,0x91f4,0xb9a7,0x91f5,0x91f6,0x91f7, +0xb9a8,0x91f8,0x91f9,0x91fa,0x91fb,0x91fc,0x91fd,0x91fe, +0x9241,0xb9a9,0x9242,0xb9aa,0x9243,0x9244,0x9245,0x9246, +0x9247,0x9248,0x9249,0x924a,0xb9ab,0xb9ac,0xb9ad,0x924b, +0xb9ae,0x924c,0x924d,0xb9af,0xb9b0,0xb9b1,0xb9b2,0x924e, +0x924f,0x9250,0x9251,0x9252,0xb9b3,0xb9b4,0x9253,0xb9b5, +0x9254,0xb9b6,0x9255,0x9256,0x9257,0xb9b7,0x9258,0xb9b8, +0xb9b9,0x9259,0x925a,0x9261,0xb9ba,0x9262,0x9263,0x9264, +0xb9bb,0x9265,0x9266,0x9267,0x9268,0x9269,0x926a,0x926b, +0x926c,0xb9bc,0x926d,0xb9bd,0x926e,0x926f,0x9270,0x9271, +0x9272,0x9273,0x9274,0x9275,0xb9be,0x9276,0x9277,0x9278, +0x9279,0x927a,0x9281,0x9282,0x9283,0x9284,0x9285,0x9286, +0x9287,0x9288,0x9289,0x928a,0x928b,0x928c,0x928d,0x928e, +0x928f,0x9290,0x9291,0x9292,0x9293,0x9294,0x9295,0x9296, +0xb9bf,0x9297,0x9298,0x9299,0xb9c0,0x929a,0x929b,0x929c, +0xb9c1,0x929d,0x929e,0x929f,0x92a0,0x92a1,0x92a2,0x92a3, +0x92a4,0x92a5,0x92a6,0x92a7,0x92a8,0x92a9,0x92aa,0x92ab, +0x92ac,0x92ad,0x92ae,0x92af,0xb9c2,0x92b0,0x92b1,0x92b2, +0xb9c3,0x92b3,0x92b4,0x92b5,0xb9c4,0x92b6,0x92b7,0x92b8, +0x92b9,0x92ba,0x92bb,0x92bc,0xb9c5,0x92bd,0x92be,0xb9c6, +0x92bf,0x92c0,0x92c1,0x92c2,0x92c3,0x92c4,0x92c5,0x92c6, +0xb9c7,0x92c7,0x92c8,0x92c9,0xb9c8,0x92ca,0x92cb,0x92cc, +0xb9c9,0x92cd,0x92ce,0x92cf,0x92d0,0x92d1,0x92d2,0x92d3, +0xb9ca,0x92d4,0x92d5,0xb9cb,0x92d6,0x92d7,0x92d8,0x92d9, +0x92da,0x92db,0x92dc,0x92dd,0x92de,0x92df,0x92e0,0x92e1, +0x92e2,0x92e3,0x92e4,0x92e5,0x92e6,0x92e7,0x92e8,0x92e9, +0x92ea,0x92eb,0x92ec,0x92ed,0x92ee,0x92ef,0x92f0,0x92f1, +0x92f2,0x92f3,0x92f4,0x92f5,0x92f6,0x92f7,0x92f8,0x92f9, +0xb9cc,0xb9cd,0x92fa,0x92fb,0xb9ce,0x92fc,0x92fd,0xb9cf, +/* 0xbc00 */ +0xb9d0,0x92fe,0xb9d1,0x9341,0x9342,0x9343,0x9344,0x9345, +0xb9d2,0xb9d3,0x9346,0xb9d4,0xb9d5,0xb9d6,0x9347,0xb9d7, +0x9348,0xb9d8,0x9349,0x934a,0xb9d9,0xb9da,0xb9db,0xb9dc, +0xb9dd,0x934b,0x934c,0xb9de,0xb9df,0xb9e0,0xb9e1,0xb9e2, +0x934d,0x934e,0x934f,0x9350,0xb9e3,0xb9e4,0x9351,0xb9e5, +0x9352,0xb9e6,0x9353,0x9354,0x9355,0xb9e7,0x9356,0x9357, +0xb9e8,0xb9e9,0x9358,0x9359,0xb9ea,0x935a,0x9361,0x9362, +0xb9eb,0x9363,0x9364,0x9365,0x9366,0x9367,0x9368,0x9369, +0xb9ec,0xb9ed,0x936a,0xb9ee,0xb9ef,0xb9f0,0x936b,0x936c, +0x936d,0xb9f1,0x936e,0x936f,0xb9f2,0xb9f3,0x9370,0x9371, +0xb9f4,0x9372,0x9373,0x9374,0x9375,0x9376,0x9377,0x9378, +0x9379,0x937a,0x9381,0x9382,0x9383,0xb9f5,0x9384,0x9385, +0x9386,0x9387,0x9388,0x9389,0x938a,0x938b,0x938c,0x938d, +0x938e,0x938f,0x9390,0x9391,0x9392,0x9393,0x9394,0x9395, +0x9396,0x9397,0x9398,0x9399,0x939a,0x939b,0x939c,0x939d, +0x939e,0x939f,0x93a0,0x93a1,0x93a2,0x93a3,0x93a4,0x93a5, +0x93a6,0x93a7,0x93a8,0x93a9,0xb9f6,0xb9f7,0x93aa,0x93ab, +0xb9f8,0x93ac,0x93ad,0xb9f9,0xb9fa,0x93ae,0xb9fb,0x93af, +0x93b0,0x93b1,0x93b2,0x93b3,0xb9fc,0xb9fd,0x93b4,0xb9fe, +0x93b5,0xbaa1,0xbaa2,0x93b6,0x93b7,0x93b8,0x93b9,0x93ba, +0xbaa3,0xbaa4,0x93bb,0x93bc,0xbaa5,0x93bd,0x93be,0xbaa6, +0xbaa7,0x93bf,0x93c0,0x93c1,0x93c2,0x93c3,0x93c4,0x93c5, +0xbaa8,0xbaa9,0x93c6,0xbaaa,0xbaab,0xbaac,0x93c7,0x93c8, +0x93c9,0x93ca,0x93cb,0x93cc,0xbaad,0xbaae,0x93cd,0x93ce, +0xbaaf,0x93cf,0x93d0,0x93d1,0xbab0,0x93d2,0x93d3,0x93d4, +0x93d5,0x93d6,0x93d7,0x93d8,0x93d9,0xbab1,0x93da,0xbab2, +0xbab3,0xbab4,0x93db,0x93dc,0x93dd,0xbab5,0x93de,0x93df, +0xbab6,0x93e0,0x93e1,0x93e2,0xbab7,0x93e3,0x93e4,0x93e5, +0x93e6,0x93e7,0x93e8,0x93e9,0x93ea,0x93eb,0x93ec,0x93ed, +0x93ee,0x93ef,0x93f0,0x93f1,0x93f2,0x93f3,0x93f4,0x93f5, +0x93f6,0x93f7,0x93f8,0x93f9,0xbab8,0xbab9,0xbaba,0x93fa, +0xbabb,0x93fb,0x93fc,0x93fd,0xbabc,0x93fe,0x9441,0x9442, +/* 0xbd00 */ +0x9443,0x9444,0x9445,0x9446,0xbabd,0xbabe,0x9447,0xbabf, +0x9448,0xbac0,0x9449,0x944a,0x944b,0x944c,0x944d,0x944e, +0xbac1,0x944f,0x9450,0x9451,0xbac2,0x9452,0x9453,0x9454, +0x9455,0x9456,0x9457,0x9458,0x9459,0x945a,0x9461,0x9462, +0x9463,0x9464,0x9465,0x9466,0xbac3,0x9467,0x9468,0x9469, +0x946a,0x946b,0x946c,0x946d,0xbac4,0x946e,0x946f,0x9470, +0x9471,0x9472,0x9473,0x9474,0x9475,0x9476,0x9477,0x9478, +0x9479,0x947a,0x9481,0x9482,0x9483,0x9484,0x9485,0x9486, +0xbac5,0x9487,0x9488,0x9489,0x948a,0x948b,0x948c,0x948d, +0xbac6,0xbac7,0x948e,0x948f,0xbac8,0x9490,0x9491,0x9492, +0xbac9,0x9493,0x9494,0x9495,0x9496,0x9497,0x9498,0x9499, +0xbaca,0xbacb,0x949a,0x949b,0x949c,0x949d,0x949e,0x949f, +0x94a0,0x94a1,0x94a2,0x94a3,0xbacc,0x94a4,0x94a5,0x94a6, +0xbacd,0x94a7,0x94a8,0x94a9,0x94aa,0x94ab,0x94ac,0x94ad, +0x94ae,0x94af,0x94b0,0x94b1,0x94b2,0x94b3,0x94b4,0x94b5, +0x94b6,0x94b7,0x94b8,0x94b9,0x94ba,0x94bb,0x94bc,0x94bd, +0xbace,0xbacf,0x94be,0x94bf,0xbad0,0x94c0,0x94c1,0xbad1, +0xbad2,0xbad3,0xbad4,0x94c2,0x94c3,0x94c4,0x94c5,0x94c6, +0xbad5,0xbad6,0x94c7,0xbad7,0x94c8,0xbad8,0x94c9,0x94ca, +0x94cb,0xbad9,0xbada,0x94cc,0xbadb,0x94cd,0x94ce,0x94cf, +0x94d0,0x94d1,0x94d2,0x94d3,0xbadc,0x94d4,0x94d5,0x94d6, +0x94d7,0x94d8,0x94d9,0x94da,0x94db,0x94dc,0x94dd,0x94de, +0xbadd,0x94df,0x94e0,0x94e1,0x94e2,0x94e3,0x94e4,0x94e5, +0xbade,0x94e6,0x94e7,0x94e8,0x94e9,0x94ea,0x94eb,0x94ec, +0x94ed,0x94ee,0x94ef,0x94f0,0x94f1,0x94f2,0x94f3,0x94f4, +0x94f5,0x94f6,0x94f7,0x94f8,0x94f9,0x94fa,0x94fb,0x94fc, +0x94fd,0x94fe,0x9541,0x9542,0xbadf,0xbae0,0x9543,0x9544, +0xbae1,0x9545,0x9546,0x9547,0xbae2,0x9548,0x9549,0x954a, +0x954b,0x954c,0x954d,0x954e,0x954f,0x9550,0x9551,0x9552, +0x9553,0xbae3,0x9554,0x9555,0x9556,0x9557,0x9558,0x9559, +0xbae4,0x955a,0x9561,0x9562,0xbae5,0x9563,0x9564,0x9565, +0xbae6,0x9566,0x9567,0x9568,0x9569,0x956a,0x956b,0x956c, +/* 0xbe00 */ +0xbae7,0x956d,0x956e,0xbae8,0x956f,0xbae9,0x9570,0x9571, +0x9572,0x9573,0x9574,0x9575,0xbaea,0xbaeb,0x9576,0x9577, +0xbaec,0x9578,0x9579,0x957a,0xbaed,0x9581,0x9582,0x9583, +0x9584,0x9585,0x9586,0x9587,0xbaee,0xbaef,0x9588,0xbaf0, +0x9589,0x958a,0x958b,0x958c,0x958d,0x958e,0x958f,0x9590, +0x9591,0x9592,0x9593,0x9594,0x9595,0x9596,0x9597,0x9598, +0x9599,0x959a,0x959b,0x959c,0x959d,0x959e,0x959f,0x95a0, +0x95a1,0x95a2,0x95a3,0x95a4,0x95a5,0x95a6,0x95a7,0x95a8, +0x95a9,0x95aa,0x95ab,0x95ac,0xbaf1,0xbaf2,0x95ad,0x95ae, +0xbaf3,0x95af,0x95b0,0x95b1,0xbaf4,0x95b2,0xbaf5,0x95b3, +0x95b4,0x95b5,0x95b6,0x95b7,0xbaf6,0xbaf7,0x95b8,0xbaf8, +0x95b9,0xbaf9,0xbafa,0xbafb,0x95ba,0x95bb,0x95bc,0x95bd, +0xbafc,0xbafd,0x95be,0x95bf,0xbafe,0x95c0,0x95c1,0x95c2, +0xbba1,0x95c3,0xbba2,0x95c4,0x95c5,0x95c6,0x95c7,0x95c8, +0xbba3,0xbba4,0x95c9,0xbba5,0xbba6,0xbba7,0x95ca,0x95cb, +0x95cc,0x95cd,0x95ce,0xbba8,0xbba9,0xbbaa,0x95cf,0x95d0, +0xbbab,0x95d1,0x95d2,0x95d3,0xbbac,0x95d4,0x95d5,0x95d6, +0x95d7,0x95d8,0x95d9,0x95da,0xbbad,0xbbae,0x95db,0xbbaf, +0xbbb0,0xbbb1,0x95dc,0x95dd,0x95de,0x95df,0x95e0,0x95e1, +0xbbb2,0xbbb3,0x95e2,0x95e3,0x95e4,0x95e5,0x95e6,0x95e7, +0x95e8,0x95e9,0x95ea,0x95eb,0x95ec,0x95ed,0x95ee,0x95ef, +0xbbb4,0x95f0,0x95f1,0x95f2,0x95f3,0x95f4,0x95f5,0x95f6, +0x95f7,0x95f8,0x95f9,0x95fa,0x95fb,0x95fc,0x95fd,0x95fe, +0x9641,0x9642,0x9643,0x9644,0x9645,0x9646,0x9647,0x9648, +0x9649,0x964a,0x964b,0x964c,0x964d,0x964e,0x964f,0x9650, +0x9651,0x9652,0x9653,0x9654,0x9655,0x9656,0x9657,0x9658, +0xbbb5,0xbbb6,0x9659,0x965a,0xbbb7,0x9661,0x9662,0xbbb8, +0xbbb9,0x9663,0x9664,0x9665,0x9666,0x9667,0x9668,0x9669, +0xbbba,0x966a,0x966b,0xbbbb,0xbbbc,0xbbbd,0x966c,0x966d, +0x966e,0x966f,0x9670,0x9671,0xbbbe,0x9672,0x9673,0x9674, +0x9675,0x9676,0x9677,0x9678,0x9679,0x967a,0x9681,0x9682, +0x9683,0x9684,0x9685,0x9686,0x9687,0x9688,0x9689,0x968a, +/* 0xbf00 */ +0x968b,0xbbbf,0x968c,0x968d,0x968e,0x968f,0x9690,0x9691, +0xbbc0,0xbbc1,0x9692,0x9693,0x9694,0x9695,0x9696,0x9697, +0x9698,0x9699,0x969a,0x969b,0x969c,0x969d,0x969e,0x969f, +0xbbc2,0xbbc3,0x96a0,0xbbc4,0xbbc5,0xbbc6,0x96a1,0x96a2, +0x96a3,0x96a4,0x96a5,0x96a6,0x96a7,0x96a8,0x96a9,0x96aa, +0x96ab,0x96ac,0x96ad,0x96ae,0x96af,0x96b0,0x96b1,0x96b2, +0x96b3,0x96b4,0x96b5,0x96b6,0x96b7,0x96b8,0x96b9,0x96ba, +0x96bb,0x96bc,0x96bd,0x96be,0x96bf,0x96c0,0x96c1,0x96c2, +0xbbc7,0xbbc8,0x96c3,0x96c4,0xbbc9,0x96c5,0x96c6,0x96c7, +0xbbca,0x96c8,0x96c9,0x96ca,0x96cb,0x96cc,0x96cd,0x96ce, +0xbbcb,0xbbcc,0x96cf,0x96d0,0x96d1,0xbbcd,0x96d2,0x96d3, +0x96d4,0x96d5,0x96d6,0x96d7,0x96d8,0x96d9,0x96da,0x96db, +0x96dc,0x96dd,0x96de,0x96df,0x96e0,0x96e1,0x96e2,0x96e3, +0x96e4,0x96e5,0x96e6,0x96e7,0x96e8,0x96e9,0x96ea,0x96eb, +0x96ec,0x96ed,0x96ee,0x96ef,0x96f0,0x96f1,0x96f2,0x96f3, +0x96f4,0x96f5,0x96f6,0x96f7,0x96f8,0x96f9,0x96fa,0x96fb, +0x96fc,0x96fd,0x96fe,0x9741,0x9742,0x9743,0x9744,0x9745, +0x9746,0x9747,0x9748,0x9749,0x974a,0x974b,0x974c,0x974d, +0x974e,0x974f,0x9750,0x9751,0xbbce,0x9752,0x9753,0x9754, +0x9755,0x9756,0x9757,0x9758,0x9759,0x975a,0x9761,0x9762, +0x9763,0x9764,0x9765,0x9766,0x9767,0x9768,0x9769,0x976a, +0x976b,0x976c,0x976d,0x976e,0x976f,0x9770,0x9771,0x9772, +0xbbcf,0x9773,0x9774,0x9775,0x9776,0x9777,0x9778,0x9779, +0x977a,0x9781,0x9782,0x9783,0x9784,0x9785,0x9786,0x9787, +0x9788,0x9789,0x978a,0x978b,0x978c,0xbbd0,0x978d,0x978e, +0x978f,0x9790,0x9791,0x9792,0xbbd1,0xbbd2,0x9793,0x9794, +0xbbd3,0x9795,0x9796,0x9797,0xbbd4,0x9798,0x9799,0x979a, +0x979b,0x979c,0x979d,0x979e,0xbbd5,0x979f,0x97a0,0xbbd6, +0x97a1,0xbbd7,0x97a2,0x97a3,0x97a4,0x97a5,0x97a6,0x97a7, +0x97a8,0x97a9,0x97aa,0x97ab,0x97ac,0x97ad,0x97ae,0x97af, +0x97b0,0x97b1,0x97b2,0x97b3,0x97b4,0x97b5,0x97b6,0x97b7, +0x97b8,0x97b9,0x97ba,0x97bb,0x97bc,0x97bd,0x97be,0x97bf, +/* 0xc000 */ +0x97c0,0x97c1,0x97c2,0x97c3,0x97c4,0x97c5,0x97c6,0x97c7, +0x97c8,0x97c9,0x97ca,0x97cb,0x97cc,0x97cd,0x97ce,0x97cf, +0x97d0,0x97d1,0x97d2,0x97d3,0x97d4,0x97d5,0x97d6,0x97d7, +0x97d8,0x97d9,0x97da,0x97db,0x97dc,0x97dd,0x97de,0x97df, +0x97e0,0x97e1,0x97e2,0x97e3,0x97e4,0x97e5,0x97e6,0x97e7, +0x97e8,0x97e9,0x97ea,0x97eb,0x97ec,0x97ed,0x97ee,0x97ef, +0x97f0,0x97f1,0x97f2,0x97f3,0x97f4,0x97f5,0x97f6,0x97f7, +0x97f8,0x97f9,0x97fa,0x97fb,0xbbd8,0x97fc,0x97fd,0x97fe, +0x9841,0x9842,0x9843,0x9844,0x9845,0x9846,0x9847,0x9848, +0x9849,0x984a,0x984b,0x984c,0x984d,0x984e,0x984f,0x9850, +0x9851,0xbbd9,0x9852,0x9853,0x9854,0x9855,0x9856,0x9857, +0xbbda,0x9858,0x9859,0x985a,0xbbdb,0x9861,0x9862,0x9863, +0xbbdc,0x9864,0x9865,0x9866,0x9867,0x9868,0x9869,0x986a, +0xbbdd,0xbbde,0x986b,0x986c,0x986d,0x986e,0x986f,0x9870, +0x9871,0x9872,0x9873,0x9874,0x9875,0x9876,0x9877,0x9878, +0x9879,0x987a,0x9881,0x9882,0x9883,0x9884,0x9885,0x9886, +0x9887,0x9888,0x9889,0x988a,0x988b,0x988c,0x988d,0x988e, +0x988f,0x9890,0x9891,0x9892,0x9893,0x9894,0x9895,0x9896, +0xbbdf,0xbbe0,0x9897,0x9898,0xbbe1,0x9899,0x989a,0x989b, +0xbbe2,0x989c,0x989d,0x989e,0x989f,0x98a0,0x98a1,0x98a2, +0xbbe3,0xbbe4,0x98a3,0xbbe5,0x98a4,0xbbe6,0x98a5,0x98a6, +0x98a7,0x98a8,0x98a9,0x98aa,0xbbe7,0xbbe8,0x98ab,0xbbe9, +0xbbea,0x98ac,0x98ad,0xbbeb,0xbbec,0xbbed,0xbbee,0x98ae, +0x98af,0x98b0,0x98b1,0x98b2,0xbbef,0xbbf0,0x98b3,0xbbf1, +0xbbf2,0xbbf3,0x98b4,0x98b5,0x98b6,0xbbf4,0x98b7,0x98b8, +0xbbf5,0xbbf6,0x98b9,0x98ba,0xbbf7,0x98bb,0x98bc,0x98bd, +0xbbf8,0x98be,0x98bf,0x98c0,0x98c1,0x98c2,0x98c3,0x98c4, +0xbbf9,0xbbfa,0x98c5,0xbbfb,0xbbfc,0xbbfd,0x98c6,0x98c7, +0x98c8,0x98c9,0x98ca,0x98cb,0xbbfe,0xbca1,0x98cc,0x98cd, +0xbca2,0x98ce,0x98cf,0x98d0,0xbca3,0x98d1,0x98d2,0x98d3, +0x98d4,0x98d5,0x98d6,0x98d7,0xbca4,0xbca5,0x98d8,0xbca6, +0x98d9,0xbca7,0x98da,0x98db,0x98dc,0x98dd,0x98de,0x98df, +/* 0xc100 */ +0xbca8,0x98e0,0x98e1,0x98e2,0xbca9,0x98e3,0x98e4,0x98e5, +0xbcaa,0x98e6,0x98e7,0x98e8,0x98e9,0x98ea,0x98eb,0x98ec, +0xbcab,0x98ed,0x98ee,0x98ef,0x98f0,0xbcac,0x98f1,0x98f2, +0x98f3,0x98f4,0x98f5,0x98f6,0xbcad,0xbcae,0xbcaf,0xbcb0, +0xbcb1,0x98f7,0x98f8,0xbcb2,0xbcb3,0x98f9,0xbcb4,0xbcb5, +0x98fa,0x98fb,0x98fc,0x98fd,0xbcb6,0xbcb7,0x98fe,0xbcb8, +0xbcb9,0xbcba,0x9941,0x9942,0x9943,0x9944,0xbcbb,0x9945, +0xbcbc,0xbcbd,0x9946,0x9947,0xbcbe,0x9948,0x9949,0x994a, +0xbcbf,0x994b,0x994c,0x994d,0x994e,0x994f,0x9950,0x9951, +0xbcc0,0xbcc1,0x9952,0xbcc2,0xbcc3,0xbcc4,0x9953,0x9954, +0x9955,0x9956,0x9957,0x9958,0xbcc5,0xbcc6,0x9959,0x995a, +0xbcc7,0x9961,0x9962,0x9963,0xbcc8,0x9964,0x9965,0x9966, +0x9967,0x9968,0x9969,0x996a,0xbcc9,0xbcca,0x996b,0xbccb, +0xbccc,0xbccd,0x996c,0x996d,0x996e,0x996f,0x9970,0x9971, +0xbcce,0x9972,0x9973,0x9974,0xbccf,0x9975,0x9976,0x9977, +0xbcd0,0x9978,0x9979,0x997a,0x9981,0x9982,0x9983,0x9984, +0x9985,0x9986,0x9987,0x9988,0x9989,0xbcd1,0x998a,0x998b, +0x998c,0x998d,0x998e,0x998f,0xbcd2,0xbcd3,0xbcd4,0x9990, +0xbcd5,0x9991,0x9992,0x9993,0xbcd6,0x9994,0xbcd7,0x9995, +0x9996,0x9997,0x9998,0x9999,0xbcd8,0xbcd9,0x999a,0xbcda, +0x999b,0xbcdb,0x999c,0x999d,0x999e,0xbcdc,0x999f,0x99a0, +0xbcdd,0xbcde,0x99a1,0x99a2,0xbcdf,0x99a3,0x99a4,0x99a5, +0xbce0,0x99a6,0x99a7,0x99a8,0x99a9,0x99aa,0x99ab,0x99ac, +0x99ad,0x99ae,0x99af,0x99b0,0x99b1,0xbce1,0x99b2,0x99b3, +0x99b4,0x99b5,0x99b6,0x99b7,0xbce2,0x99b8,0x99b9,0x99ba, +0xbce3,0x99bb,0x99bc,0x99bd,0xbce4,0x99be,0x99bf,0x99c0, +0x99c1,0x99c2,0x99c3,0x99c4,0xbce5,0x99c5,0x99c6,0xbce6, +0xbce7,0x99c7,0x99c8,0x99c9,0x99ca,0x99cb,0x99cc,0x99cd, +0xbce8,0x99ce,0x99cf,0x99d0,0xbce9,0x99d1,0x99d2,0x99d3, +0xbcea,0x99d4,0x99d5,0x99d6,0x99d7,0x99d8,0x99d9,0x99da, +0xbceb,0xbcec,0x99db,0xbced,0x99dc,0x99dd,0x99de,0x99df, +0x99e0,0x99e1,0x99e2,0x99e3,0xbcee,0xbcef,0x99e4,0x99e5, +/* 0xc200 */ +0xbcf0,0x99e6,0x99e7,0x99e8,0xbcf1,0x99e9,0x99ea,0x99eb, +0x99ec,0x99ed,0x99ee,0x99ef,0xbcf2,0xbcf3,0x99f0,0xbcf4, +0x99f1,0xbcf5,0x99f2,0x99f3,0x99f4,0x99f5,0x99f6,0x99f7, +0xbcf6,0xbcf7,0x99f8,0x99f9,0xbcf8,0x99fa,0x99fb,0xbcf9, +0xbcfa,0x99fc,0x99fd,0x99fe,0x9a41,0x9a42,0x9a43,0x9a44, +0xbcfb,0xbcfc,0x9a45,0xbcfd,0x9a46,0xbcfe,0x9a47,0xbda1, +0x9a48,0xbda2,0xbda3,0x9a49,0xbda4,0x9a4a,0x9a4b,0x9a4c, +0x9a4d,0x9a4e,0x9a4f,0x9a50,0x9a51,0x9a52,0x9a53,0x9a54, +0x9a55,0x9a56,0x9a57,0x9a58,0x9a59,0x9a5a,0x9a61,0x9a62, +0xbda5,0x9a63,0x9a64,0x9a65,0x9a66,0x9a67,0x9a68,0x9a69, +0xbda6,0xbda7,0x9a6a,0x9a6b,0xbda8,0x9a6c,0x9a6d,0x9a6e, +0xbda9,0x9a6f,0x9a70,0x9a71,0x9a72,0x9a73,0x9a74,0x9a75, +0xbdaa,0x9a76,0x9a77,0x9a78,0x9a79,0xbdab,0x9a7a,0x9a81, +0x9a82,0x9a83,0x9a84,0x9a85,0xbdac,0xbdad,0x9a86,0x9a87, +0xbdae,0x9a88,0x9a89,0x9a8a,0xbdaf,0x9a8b,0x9a8c,0x9a8d, +0x9a8e,0x9a8f,0x9a90,0x9a91,0xbdb0,0xbdb1,0x9a92,0xbdb2, +0x9a93,0xbdb3,0x9a94,0x9a95,0x9a96,0x9a97,0x9a98,0x9a99, +0xbdb4,0xbdb5,0x9a9a,0x9a9b,0x9a9c,0x9a9d,0x9a9e,0x9a9f, +0xbdb6,0x9aa0,0x9aa1,0x9aa2,0x9aa3,0x9aa4,0x9aa5,0x9aa6, +0xbdb7,0x9aa7,0x9aa8,0xbdb8,0x9aa9,0xbdb9,0x9aaa,0x9aab, +0x9aac,0x9aad,0x9aae,0x9aaf,0xbdba,0xbdbb,0x9ab0,0x9ab1, +0xbdbc,0x9ab2,0x9ab3,0x9ab4,0xbdbd,0xbdbe,0x9ab5,0x9ab6, +0x9ab7,0x9ab8,0x9ab9,0x9aba,0xbdbf,0xbdc0,0x9abb,0xbdc1, +0x9abc,0xbdc2,0x9abd,0x9abe,0x9abf,0x9ac0,0x9ac1,0x9ac2, +0x9ac3,0x9ac4,0x9ac5,0x9ac6,0x9ac7,0x9ac8,0x9ac9,0x9aca, +0x9acb,0x9acc,0x9acd,0x9ace,0x9acf,0x9ad0,0x9ad1,0x9ad2, +0x9ad3,0x9ad4,0x9ad5,0x9ad6,0x9ad7,0x9ad8,0x9ad9,0x9ada, +0x9adb,0x9adc,0x9add,0x9ade,0xbdc3,0xbdc4,0x9adf,0x9ae0, +0xbdc5,0x9ae1,0x9ae2,0xbdc6,0xbdc7,0x9ae3,0x9ae4,0x9ae5, +0x9ae6,0x9ae7,0x9ae8,0xbdc8,0xbdc9,0xbdca,0x9ae9,0xbdcb, +0x9aea,0xbdcc,0x9aeb,0x9aec,0x9aed,0x9aee,0xbdcd,0x9aef, +0xbdce,0xbdcf,0x9af0,0xbdd0,0xbdd1,0x9af1,0x9af2,0x9af3, +/* 0xc300 */ +0xbdd2,0x9af4,0x9af5,0x9af6,0x9af7,0x9af8,0x9af9,0x9afa, +0xbdd3,0xbdd4,0x9afb,0x9afc,0xbdd5,0xbdd6,0x9afd,0x9afe, +0x9b41,0x9b42,0x9b43,0xbdd7,0xbdd8,0xbdd9,0x9b44,0x9b45, +0xbdda,0x9b46,0x9b47,0x9b48,0xbddb,0x9b49,0x9b4a,0x9b4b, +0x9b4c,0x9b4d,0x9b4e,0x9b4f,0xbddc,0xbddd,0x9b50,0x9b51, +0xbdde,0xbddf,0x9b52,0x9b53,0x9b54,0x9b55,0x9b56,0x9b57, +0x9b58,0x9b59,0x9b5a,0x9b61,0x9b62,0x9b63,0x9b64,0x9b65, +0x9b66,0x9b67,0x9b68,0x9b69,0x9b6a,0x9b6b,0x9b6c,0x9b6d, +0x9b6e,0x9b6f,0x9b70,0x9b71,0x9b72,0xbde0,0x9b73,0x9b74, +0x9b75,0x9b76,0x9b77,0x9b78,0x9b79,0x9b7a,0x9b81,0x9b82, +0x9b83,0x9b84,0x9b85,0x9b86,0x9b87,0x9b88,0x9b89,0x9b8a, +0x9b8b,0x9b8c,0x9b8d,0x9b8e,0x9b8f,0x9b90,0x9b91,0x9b92, +0x9b93,0x9b94,0x9b95,0x9b96,0x9b97,0x9b98,0x9b99,0x9b9a, +0xbde1,0xbde2,0x9b9b,0x9b9c,0xbde3,0x9b9d,0x9b9e,0x9b9f, +0xbde4,0x9ba0,0xbde5,0x9ba1,0x9ba2,0x9ba3,0x9ba4,0x9ba5, +0xbde6,0xbde7,0x9ba6,0x9ba7,0xbde8,0xbde9,0x9ba8,0x9ba9, +0x9baa,0x9bab,0x9bac,0x9bad,0xbdea,0x9bae,0x9baf,0x9bb0, +0xbdeb,0x9bb1,0x9bb2,0x9bb3,0xbdec,0x9bb4,0x9bb5,0x9bb6, +0x9bb7,0x9bb8,0x9bb9,0x9bba,0x9bbb,0x9bbc,0x9bbd,0x9bbe, +0x9bbf,0x9bc0,0x9bc1,0x9bc2,0x9bc3,0x9bc4,0x9bc5,0x9bc6, +0x9bc7,0x9bc8,0x9bc9,0x9bca,0x9bcb,0x9bcc,0x9bcd,0x9bce, +0x9bcf,0x9bd0,0x9bd1,0x9bd2,0x9bd3,0x9bd4,0x9bd5,0x9bd6, +0x9bd7,0x9bd8,0x9bd9,0x9bda,0x9bdb,0x9bdc,0x9bdd,0x9bde, +0x9bdf,0x9be0,0x9be1,0x9be2,0x9be3,0x9be4,0x9be5,0x9be6, +0xbded,0x9be7,0x9be8,0x9be9,0x9bea,0x9beb,0x9bec,0x9bed, +0x9bee,0x9bef,0x9bf0,0x9bf1,0x9bf2,0x9bf3,0x9bf4,0x9bf5, +0x9bf6,0x9bf7,0x9bf8,0x9bf9,0x9bfa,0x9bfb,0x9bfc,0x9bfd, +0xbdee,0xbdef,0x9bfe,0x9c41,0xbdf0,0x9c42,0x9c43,0xbdf1, +0xbdf2,0x9c44,0xbdf3,0x9c45,0x9c46,0x9c47,0x9c48,0x9c49, +0xbdf4,0xbdf5,0x9c4a,0x9c4b,0x9c4c,0xbdf6,0x9c4d,0x9c4e, +0x9c4f,0x9c50,0x9c51,0x9c52,0xbdf7,0xbdf8,0x9c53,0x9c54, +0xbdf9,0x9c55,0x9c56,0x9c57,0x9c58,0x9c59,0x9c5a,0x9c61, +/* 0xc400 */ +0x9c62,0x9c63,0x9c64,0x9c65,0x9c66,0x9c67,0x9c68,0x9c69, +0xbdfa,0x9c6a,0x9c6b,0x9c6c,0x9c6d,0x9c6e,0x9c6f,0x9c70, +0xbdfb,0x9c71,0x9c72,0x9c73,0x9c74,0x9c75,0x9c76,0x9c77, +0x9c78,0x9c79,0x9c7a,0x9c81,0x9c82,0x9c83,0x9c84,0x9c85, +0x9c86,0x9c87,0x9c88,0x9c89,0xbdfc,0x9c8a,0x9c8b,0x9c8c, +0x9c8d,0x9c8e,0x9c8f,0x9c90,0xbdfd,0x9c91,0x9c92,0x9c93, +0xbdfe,0x9c94,0x9c95,0x9c96,0xbea1,0x9c97,0x9c98,0x9c99, +0x9c9a,0x9c9b,0x9c9c,0x9c9d,0xbea2,0xbea3,0x9c9e,0x9c9f, +0x9ca0,0x9ca1,0x9ca2,0x9ca3,0x9ca4,0x9ca5,0x9ca6,0x9ca7, +0xbea4,0x9ca8,0x9ca9,0x9caa,0x9cab,0x9cac,0x9cad,0x9cae, +0x9caf,0x9cb0,0x9cb1,0x9cb2,0x9cb3,0x9cb4,0x9cb5,0x9cb6, +0x9cb7,0x9cb8,0x9cb9,0x9cba,0x9cbb,0x9cbc,0x9cbd,0x9cbe, +0x9cbf,0x9cc0,0x9cc1,0x9cc2,0xbea5,0xbea6,0x9cc3,0x9cc4, +0xbea7,0x9cc5,0x9cc6,0x9cc7,0xbea8,0x9cc8,0x9cc9,0x9cca, +0x9ccb,0x9ccc,0x9ccd,0x9cce,0xbea9,0xbeaa,0x9ccf,0x9cd0, +0x9cd1,0xbeab,0x9cd2,0x9cd3,0x9cd4,0x9cd5,0x9cd6,0x9cd7, +0xbeac,0x9cd8,0x9cd9,0x9cda,0x9cdb,0x9cdc,0x9cdd,0x9cde, +0x9cdf,0x9ce0,0x9ce1,0x9ce2,0x9ce3,0x9ce4,0x9ce5,0x9ce6, +0x9ce7,0x9ce8,0x9ce9,0x9cea,0xbead,0x9ceb,0x9cec,0x9ced, +0x9cee,0x9cef,0x9cf0,0x9cf1,0xbeae,0x9cf2,0x9cf3,0x9cf4, +0x9cf5,0x9cf6,0x9cf7,0x9cf8,0x9cf9,0x9cfa,0x9cfb,0x9cfc, +0x9cfd,0x9cfe,0x9d41,0x9d42,0x9d43,0x9d44,0x9d45,0x9d46, +0x9d47,0x9d48,0x9d49,0x9d4a,0x9d4b,0x9d4c,0x9d4d,0x9d4e, +0xbeaf,0x9d4f,0x9d50,0x9d51,0xbeb0,0x9d52,0x9d53,0x9d54, +0x9d55,0x9d56,0x9d57,0x9d58,0x9d59,0x9d5a,0x9d61,0x9d62, +0x9d63,0x9d64,0x9d65,0x9d66,0x9d67,0x9d68,0x9d69,0x9d6a, +0x9d6b,0x9d6c,0x9d6d,0x9d6e,0x9d6f,0x9d70,0x9d71,0x9d72, +0x9d73,0x9d74,0x9d75,0x9d76,0x9d77,0x9d78,0x9d79,0x9d7a, +0x9d81,0x9d82,0x9d83,0x9d84,0x9d85,0x9d86,0x9d87,0x9d88, +0x9d89,0xbeb1,0x9d8a,0x9d8b,0x9d8c,0x9d8d,0x9d8e,0x9d8f, +0xbeb2,0xbeb3,0x9d90,0x9d91,0xbeb4,0x9d92,0x9d93,0x9d94, +0xbeb5,0x9d95,0xbeb6,0x9d96,0x9d97,0x9d98,0x9d99,0xbeb7, +/* 0xc500 */ +0xbeb8,0xbeb9,0x9d9a,0x9d9b,0x9d9c,0x9d9d,0x9d9e,0x9d9f, +0x9da0,0x9da1,0x9da2,0x9da3,0xbeba,0x9da4,0x9da5,0x9da6, +0xbebb,0x9da7,0x9da8,0x9da9,0xbebc,0x9daa,0x9dab,0x9dac, +0x9dad,0x9dae,0x9daf,0x9db0,0xbebd,0x9db1,0x9db2,0x9db3, +0x9db4,0x9db5,0x9db6,0x9db7,0x9db8,0x9db9,0x9dba,0x9dbb, +0xbebe,0xbebf,0x9dbc,0x9dbd,0xbec0,0x9dbe,0x9dbf,0x9dc0, +0xbec1,0x9dc1,0x9dc2,0x9dc3,0x9dc4,0x9dc5,0x9dc6,0x9dc7, +0xbec2,0xbec3,0x9dc8,0xbec4,0x9dc9,0xbec5,0x9dca,0x9dcb, +0x9dcc,0x9dcd,0x9dce,0x9dcf,0xbec6,0xbec7,0x9dd0,0x9dd1, +0xbec8,0xbec9,0xbeca,0x9dd2,0xbecb,0xbecc,0xbecd,0x9dd3, +0x9dd4,0x9dd5,0x9dd6,0xbece,0xbecf,0xbed0,0x9dd7,0xbed1, +0xbed2,0xbed3,0x9dd8,0x9dd9,0x9dda,0xbed4,0xbed5,0x9ddb, +0xbed6,0xbed7,0x9ddc,0x9ddd,0xbed8,0x9dde,0x9ddf,0x9de0, +0xbed9,0x9de1,0x9de2,0x9de3,0x9de4,0x9de5,0x9de6,0x9de7, +0xbeda,0xbedb,0x9de8,0xbedc,0xbedd,0xbede,0x9de9,0x9dea, +0x9deb,0x9dec,0x9ded,0x9dee,0xbedf,0xbee0,0x9def,0x9df0, +0xbee1,0x9df1,0x9df2,0x9df3,0xbee2,0x9df4,0x9df5,0xbee3, +0x9df6,0x9df7,0x9df8,0x9df9,0xbee4,0xbee5,0x9dfa,0xbee6, +0x9dfb,0xbee7,0x9dfc,0x9dfd,0x9dfe,0xbee8,0x9e41,0xbee9, +0xbeea,0x9e42,0x9e43,0x9e44,0xbeeb,0x9e45,0x9e46,0x9e47, +0xbeec,0x9e48,0x9e49,0x9e4a,0x9e4b,0x9e4c,0x9e4d,0x9e4e, +0x9e4f,0xbeed,0x9e50,0x9e51,0x9e52,0x9e53,0x9e54,0x9e55, +0x9e56,0x9e57,0x9e58,0x9e59,0xbeee,0xbeef,0x9e5a,0x9e61, +0xbef0,0xbef1,0x9e62,0xbef2,0xbef3,0xbef4,0xbef5,0x9e63, +0x9e64,0x9e65,0x9e66,0x9e67,0xbef6,0xbef7,0xbef8,0xbef9, +0xbefa,0xbefb,0xbefc,0x9e68,0xbefd,0x9e69,0xbefe,0x9e6a, +0xbfa1,0xbfa2,0x9e6b,0x9e6c,0xbfa3,0x9e6d,0x9e6e,0x9e6f, +0xbfa4,0x9e70,0x9e71,0x9e72,0x9e73,0x9e74,0x9e75,0x9e76, +0xbfa5,0xbfa6,0x9e77,0xbfa7,0x9e78,0xbfa8,0x9e79,0x9e7a, +0x9e81,0x9e82,0x9e83,0x9e84,0xbfa9,0xbfaa,0xbfab,0x9e85, +0xbfac,0x9e86,0x9e87,0x9e88,0xbfad,0x9e89,0xbfae,0xbfaf, +0x9e8a,0x9e8b,0x9e8c,0x9e8d,0xbfb0,0xbfb1,0xbfb2,0xbfb3, +/* 0xc600 */ +0xbfb4,0xbfb5,0x9e8e,0x9e8f,0x9e90,0xbfb6,0xbfb7,0xbfb8, +0xbfb9,0x9e91,0x9e92,0x9e93,0xbfba,0x9e94,0x9e95,0x9e96, +0xbfbb,0x9e97,0x9e98,0x9e99,0x9e9a,0x9e9b,0x9e9c,0x9e9d, +0xbfbc,0xbfbd,0x9e9e,0xbfbe,0xbfbf,0x9e9f,0x9ea0,0x9ea1, +0x9ea2,0x9ea3,0x9ea4,0x9ea5,0xbfc0,0xbfc1,0x9ea6,0x9ea7, +0xbfc2,0x9ea8,0x9ea9,0x9eaa,0xbfc3,0xbfc4,0xbfc5,0x9eab, +0xbfc6,0x9eac,0x9ead,0xbfc7,0xbfc8,0xbfc9,0x9eae,0xbfca, +0x9eaf,0xbfcb,0x9eb0,0xbfcc,0x9eb1,0x9eb2,0x9eb3,0x9eb4, +0xbfcd,0xbfce,0x9eb5,0x9eb6,0xbfcf,0x9eb7,0x9eb8,0x9eb9, +0xbfd0,0x9eba,0x9ebb,0x9ebc,0x9ebd,0x9ebe,0x9ebf,0x9ec0, +0xbfd1,0xbfd2,0x9ec1,0xbfd3,0xbfd4,0xbfd5,0x9ec2,0x9ec3, +0x9ec4,0x9ec5,0x9ec6,0x9ec7,0xbfd6,0xbfd7,0x9ec8,0x9ec9, +0xbfd8,0x9eca,0x9ecb,0x9ecc,0x9ecd,0x9ece,0x9ecf,0x9ed0, +0x9ed1,0x9ed2,0x9ed3,0x9ed4,0xbfd9,0x9ed5,0x9ed6,0xbfda, +0x9ed7,0xbfdb,0x9ed8,0x9ed9,0x9eda,0x9edb,0x9edc,0x9edd, +0xbfdc,0xbfdd,0x9ede,0x9edf,0xbfde,0x9ee0,0x9ee1,0x9ee2, +0xbfdf,0x9ee3,0x9ee4,0x9ee5,0x9ee6,0x9ee7,0x9ee8,0x9ee9, +0xbfe0,0xbfe1,0x9eea,0xbfe2,0x9eeb,0xbfe3,0x9eec,0x9eed, +0x9eee,0x9eef,0x9ef0,0x9ef1,0xbfe4,0xbfe5,0x9ef2,0x9ef3, +0xbfe6,0x9ef4,0x9ef5,0x9ef6,0xbfe7,0x9ef7,0x9ef8,0x9ef9, +0x9efa,0x9efb,0x9efc,0x9efd,0xbfe8,0xbfe9,0x9efe,0xbfea, +0x9f41,0xbfeb,0x9f42,0x9f43,0x9f44,0x9f45,0x9f46,0x9f47, +0xbfec,0xbfed,0x9f48,0x9f49,0xbfee,0x9f4a,0x9f4b,0x9f4c, +0xbfef,0xbff0,0xbff1,0x9f4d,0x9f4e,0x9f4f,0x9f50,0x9f51, +0xbff2,0xbff3,0x9f52,0xbff4,0x9f53,0xbff5,0x9f54,0x9f55, +0x9f56,0x9f57,0x9f58,0x9f59,0xbff6,0xbff7,0x9f5a,0x9f61, +0xbff8,0x9f62,0x9f63,0x9f64,0xbff9,0x9f65,0x9f66,0x9f67, +0x9f68,0x9f69,0x9f6a,0x9f6b,0xbffa,0xbffb,0x9f6c,0x9f6d, +0xbffc,0xbffd,0x9f6e,0x9f6f,0x9f70,0x9f71,0x9f72,0x9f73, +0xbffe,0xc0a1,0x9f74,0x9f75,0xc0a2,0x9f76,0x9f77,0x9f78, +0xc0a3,0x9f79,0x9f7a,0x9f81,0x9f82,0x9f83,0x9f84,0x9f85, +0xc0a4,0xc0a5,0x9f86,0x9f87,0x9f88,0xc0a6,0x9f89,0x9f8a, +/* 0xc700 */ +0x9f8b,0x9f8c,0x9f8d,0x9f8e,0xc0a7,0xc0a8,0x9f8f,0x9f90, +0xc0a9,0x9f91,0x9f92,0x9f93,0xc0aa,0x9f94,0x9f95,0x9f96, +0x9f97,0x9f98,0x9f99,0x9f9a,0xc0ab,0xc0ac,0x9f9b,0xc0ad, +0x9f9c,0xc0ae,0x9f9d,0x9f9e,0x9f9f,0x9fa0,0x9fa1,0x9fa2, +0xc0af,0xc0b0,0x9fa3,0x9fa4,0xc0b1,0x9fa5,0x9fa6,0x9fa7, +0xc0b2,0x9fa8,0x9fa9,0x9faa,0x9fab,0x9fac,0x9fad,0x9fae, +0xc0b3,0xc0b4,0x9faf,0xc0b5,0x9fb0,0xc0b6,0x9fb1,0xc0b7, +0x9fb2,0x9fb3,0x9fb4,0x9fb5,0xc0b8,0xc0b9,0x9fb6,0x9fb7, +0xc0ba,0x9fb8,0x9fb9,0x9fba,0xc0bb,0x9fbb,0x9fbc,0x9fbd, +0x9fbe,0x9fbf,0xc0bc,0x9fc0,0xc0bd,0xc0be,0x9fc1,0xc0bf, +0x9fc2,0xc0c0,0xc0c1,0xc0c2,0xc0c3,0xc0c4,0xc0c5,0xc0c6, +0xc0c7,0x9fc3,0x9fc4,0x9fc5,0xc0c8,0x9fc6,0x9fc7,0x9fc8, +0xc0c9,0x9fc9,0x9fca,0x9fcb,0x9fcc,0x9fcd,0x9fce,0x9fcf, +0xc0ca,0x9fd0,0x9fd1,0xc0cb,0x9fd2,0x9fd3,0x9fd4,0x9fd5, +0x9fd6,0x9fd7,0x9fd8,0x9fd9,0xc0cc,0xc0cd,0x9fda,0x9fdb, +0xc0ce,0x9fdc,0x9fdd,0x9fde,0xc0cf,0xc0d0,0xc0d1,0x9fdf, +0x9fe0,0x9fe1,0x9fe2,0xc0d2,0xc0d3,0xc0d4,0x9fe3,0xc0d5, +0xc0d6,0xc0d7,0xc0d8,0x9fe4,0x9fe5,0x9fe6,0xc0d9,0x9fe7, +0xc0da,0xc0db,0x9fe8,0x9fe9,0xc0dc,0x9fea,0xc0dd,0xc0de, +0xc0df,0x9feb,0xc0e0,0x9fec,0x9fed,0x9fee,0x9fef,0x9ff0, +0xc0e1,0xc0e2,0x9ff1,0xc0e3,0xc0e4,0xc0e5,0xc0e6,0x9ff2, +0x9ff3,0x9ff4,0x9ff5,0x9ff6,0xc0e7,0xc0e8,0x9ff7,0x9ff8, +0xc0e9,0x9ff9,0x9ffa,0x9ffb,0xc0ea,0x9ffc,0x9ffd,0x9ffe, +0xa041,0xa042,0xa043,0xa044,0xc0eb,0xc0ec,0xa045,0xc0ed, +0xc0ee,0xc0ef,0xa046,0xa047,0xa048,0xa049,0xa04a,0xa04b, +0xc0f0,0xc0f1,0xa04c,0xa04d,0xc0f2,0xa04e,0xc0f3,0xa04f, +0xc0f4,0xa050,0xa051,0xa052,0xa053,0xa054,0xa055,0xa056, +0xc0f5,0xa057,0xa058,0xa059,0xa05a,0xc0f6,0xa061,0xa062, +0xa063,0xa064,0xa065,0xa066,0xc0f7,0xa067,0xa068,0xa069, +0xc0f8,0xa06a,0xa06b,0xa06c,0xc0f9,0xa06d,0xa06e,0xa06f, +0xa070,0xa071,0xa072,0xa073,0xa074,0xa075,0xa076,0xa077, +0xa078,0xa079,0xa07a,0xa081,0xa082,0xa083,0xa084,0xa085, +/* 0xc800 */ +0xc0fa,0xc0fb,0xa086,0xa087,0xc0fc,0xa088,0xa089,0xa08a, +0xc0fd,0xa08b,0xc0fe,0xa08c,0xa08d,0xa08e,0xa08f,0xa090, +0xc1a1,0xc1a2,0xa091,0xc1a3,0xa092,0xc1a4,0xc1a5,0xa093, +0xa094,0xa095,0xa096,0xa097,0xc1a6,0xc1a7,0xa098,0xa099, +0xc1a8,0xa09a,0xa09b,0xa09c,0xc1a9,0xa09d,0xa09e,0xa09f, +0xa0a0,0xa0a1,0xa0a2,0xa0a3,0xc1aa,0xc1ab,0xa0a4,0xc1ac, +0xa0a5,0xc1ad,0xa0a6,0xa0a7,0xa0a8,0xa0a9,0xa0aa,0xa0ab, +0xc1ae,0xa0ac,0xa0ad,0xa0ae,0xc1af,0xa0af,0xa0b0,0xa0b1, +0xc1b0,0xa0b2,0xa0b3,0xa0b4,0xa0b5,0xa0b6,0xa0b7,0xa0b8, +0xc1b1,0xc1b2,0xa0b9,0xa0ba,0xc1b3,0xc1b4,0xa0bb,0xa0bc, +0xa0bd,0xa0be,0xa0bf,0xa0c0,0xc1b5,0xa0c1,0xa0c2,0xa0c3, +0xa0c4,0xa0c5,0xa0c6,0xa0c7,0xa0c8,0xa0c9,0xa0ca,0xa0cb, +0xa0cc,0xa0cd,0xa0ce,0xa0cf,0xa0d0,0xa0d1,0xa0d2,0xa0d3, +0xa0d4,0xa0d5,0xa0d6,0xa0d7,0xa0d8,0xa0d9,0xa0da,0xa0db, +0xc1b6,0xc1b7,0xa0dc,0xa0dd,0xc1b8,0xa0de,0xa0df,0xa0e0, +0xc1b9,0xa0e1,0xc1ba,0xa0e2,0xa0e3,0xa0e4,0xa0e5,0xa0e6, +0xc1bb,0xc1bc,0xa0e7,0xc1bd,0xa0e8,0xc1be,0xc1bf,0xc1c0, +0xa0e9,0xa0ea,0xa0eb,0xc1c1,0xc1c2,0xc1c3,0xa0ec,0xa0ed, +0xa0ee,0xa0ef,0xa0f0,0xa0f1,0xc1c4,0xa0f2,0xa0f3,0xa0f4, +0xa0f5,0xa0f6,0xa0f7,0xa0f8,0xa0f9,0xc1c5,0xa0fa,0xc1c6, +0xa0fb,0xc1c7,0xa0fc,0xa0fd,0xa0fe,0xa141,0xa142,0xa143, +0xc1c8,0xa144,0xa145,0xa146,0xa147,0xa148,0xa149,0xa14a, +0xa14b,0xa14c,0xa14d,0xa14e,0xa14f,0xa150,0xa151,0xa152, +0xa153,0xa154,0xa155,0xa156,0xc1c9,0xc1ca,0xa157,0xa158, +0xa159,0xa15a,0xa161,0xa162,0xc1cb,0xa163,0xa164,0xa165, +0xc1cc,0xa166,0xa167,0xa168,0xc1cd,0xa169,0xa16a,0xa16b, +0xa16c,0xa16d,0xa16e,0xa16f,0xc1ce,0xc1cf,0xa170,0xc1d0, +0xa171,0xc1d1,0xa172,0xa173,0xa174,0xa175,0xa176,0xa177, +0xc1d2,0xc1d3,0xa178,0xa179,0xc1d4,0xa17a,0xa181,0xa182, +0xa183,0xa184,0xa185,0xa186,0xa187,0xa188,0xa189,0xa18a, +0xa18b,0xa18c,0xa18d,0xa18e,0xa18f,0xc1d5,0xa190,0xa191, +0xa192,0xa193,0xa194,0xa195,0xc1d6,0xc1d7,0xa196,0xa197, +/* 0xc900 */ +0xc1d8,0xa198,0xa199,0xa19a,0xc1d9,0xc1da,0xc1db,0xa19b, +0xa19c,0xa19d,0xa19e,0xa19f,0xc1dc,0xc1dd,0xa1a0,0xc1de, +0xa241,0xc1df,0xa242,0xa243,0xa244,0xa245,0xa246,0xa247, +0xc1e0,0xa248,0xa249,0xa24a,0xa24b,0xa24c,0xa24d,0xa24e, +0xa24f,0xa250,0xa251,0xa252,0xa253,0xa254,0xa255,0xa256, +0xa257,0xa258,0xa259,0xa25a,0xc1e1,0xa261,0xa262,0xa263, +0xa264,0xa265,0xa266,0xa267,0xc1e2,0xa268,0xa269,0xa26a, +0xa26b,0xa26c,0xa26d,0xa26e,0xa26f,0xa270,0xa271,0xa272, +0xa273,0xa274,0xa275,0xa276,0xa277,0xa278,0xa279,0xa27a, +0xa281,0xa282,0xa283,0xa284,0xa285,0xa286,0xa287,0xa288, +0xc1e3,0xc1e4,0xa289,0xa28a,0xc1e5,0xa28b,0xa28c,0xa28d, +0xc1e6,0xa28e,0xa28f,0xa290,0xa291,0xa292,0xa293,0xa294, +0xc1e7,0xc1e8,0xa295,0xc1e9,0xa296,0xa297,0xa298,0xa299, +0xa29a,0xa29b,0xa29c,0xa29d,0xc1ea,0xa29e,0xa29f,0xa2a0, +0xc1eb,0xa341,0xa342,0xa343,0xc1ec,0xa344,0xa345,0xa346, +0xa347,0xa348,0xa349,0xa34a,0xc1ed,0xa34b,0xa34c,0xa34d, +0xa34e,0xa34f,0xa350,0xa351,0xa352,0xa353,0xa354,0xa355, +0xc1ee,0xc1ef,0xa356,0xa357,0xc1f0,0xa358,0xa359,0xa35a, +0xc1f1,0xa361,0xa362,0xa363,0xa364,0xa365,0xa366,0xa367, +0xc1f2,0xc1f3,0xa368,0xc1f4,0xa369,0xc1f5,0xa36a,0xa36b, +0xa36c,0xa36d,0xa36e,0xa36f,0xa370,0xa371,0xa372,0xa373, +0xa374,0xa375,0xa376,0xa377,0xa378,0xa379,0xa37a,0xa381, +0xa382,0xa383,0xa384,0xa385,0xa386,0xa387,0xa388,0xa389, +0xa38a,0xa38b,0xa38c,0xa38d,0xa38e,0xa38f,0xa390,0xa391, +0xc1f6,0xc1f7,0xa392,0xa393,0xc1f8,0xa394,0xa395,0xc1f9, +0xc1fa,0xa396,0xc1fb,0xa397,0xa398,0xa399,0xa39a,0xa39b, +0xc1fc,0xc1fd,0xa39c,0xc1fe,0xa39d,0xc2a1,0xc2a2,0xa39e, +0xa39f,0xc2a3,0xc2a4,0xa3a0,0xc2a5,0xc2a6,0xa441,0xa442, +0xc2a7,0xa443,0xc2a8,0xa444,0xc2a9,0xa445,0xa446,0xc2aa, +0xa447,0xa448,0xa449,0xa44a,0xc2ab,0xc2ac,0xa44b,0xc2ad, +0xc2ae,0xc2af,0xa44c,0xa44d,0xa44e,0xa44f,0xa450,0xa451, +0xc2b0,0xc2b1,0xa452,0xa453,0xc2b2,0xa454,0xa455,0xa456, +/* 0xca00 */ +0xc2b3,0xa457,0xa458,0xa459,0xa45a,0xa461,0xa462,0xa463, +0xc2b4,0xc2b5,0xa464,0xc2b6,0xc2b7,0xc2b8,0xa465,0xa466, +0xa467,0xa468,0xa469,0xa46a,0xc2b9,0xa46b,0xa46c,0xa46d, +0xc2ba,0xa46e,0xa46f,0xa470,0xa471,0xa472,0xa473,0xa474, +0xa475,0xa476,0xa477,0xa478,0xa479,0xa47a,0xa481,0xa482, +0xa483,0xc2bb,0xa484,0xa485,0xa486,0xa487,0xa488,0xa489, +0xa48a,0xa48b,0xa48c,0xa48d,0xa48e,0xa48f,0xa490,0xa491, +0xa492,0xa493,0xa494,0xa495,0xa496,0xa497,0xa498,0xa499, +0xa49a,0xa49b,0xa49c,0xa49d,0xa49e,0xa49f,0xa4a0,0xa541, +0xa542,0xa543,0xa544,0xa545,0xc2bc,0xc2bd,0xa546,0xa547, +0xc2be,0xa548,0xa549,0xa54a,0xc2bf,0xa54b,0xa54c,0xa54d, +0xa54e,0xa54f,0xa550,0xa551,0xc2c0,0xc2c1,0xa552,0xc2c2, +0xc2c3,0xc2c4,0xa553,0xa554,0xa555,0xa556,0xa557,0xa558, +0xc2c5,0xa559,0xa55a,0xa561,0xa562,0xa563,0xa564,0xa565, +0xa566,0xa567,0xa568,0xa569,0xa56a,0xa56b,0xa56c,0xa56d, +0xa56e,0xa56f,0xa570,0xa571,0xa572,0xc2c6,0xa573,0xa574, +0xa575,0xa576,0xa577,0xa578,0xc2c7,0xa579,0xa57a,0xa581, +0xa582,0xa583,0xa584,0xa585,0xa586,0xa587,0xa588,0xa589, +0xa58a,0xa58b,0xa58c,0xa58d,0xa58e,0xa58f,0xa590,0xa591, +0xc2c8,0xa592,0xa593,0xa594,0xa595,0xa596,0xa597,0xa598, +0xa599,0xa59a,0xa59b,0xa59c,0xa59d,0xa59e,0xa59f,0xa5a0, +0xa641,0xa642,0xa643,0xa644,0xa645,0xa646,0xa647,0xa648, +0xa649,0xa64a,0xa64b,0xa64c,0xa64d,0xa64e,0xa64f,0xa650, +0xa651,0xa652,0xa653,0xa654,0xc2c9,0xc2ca,0xa655,0xa656, +0xc2cb,0xa657,0xa658,0xa659,0xc2cc,0xa65a,0xa661,0xa662, +0xa663,0xa664,0xa665,0xa666,0xc2cd,0xc2ce,0xa667,0xc2cf, +0xa668,0xc2d0,0xa669,0xc2d1,0xa66a,0xa66b,0xa66c,0xa66d, +0xc2d2,0xc2d3,0xa66e,0xa66f,0xa670,0xa671,0xa672,0xa673, +0xc2d4,0xa674,0xa675,0xa676,0xa677,0xa678,0xa679,0xa67a, +0xa681,0xa682,0xa683,0xa684,0xc2d5,0xa685,0xa686,0xa687, +0xa688,0xa689,0xa68a,0xa68b,0xc2d6,0xa68c,0xa68d,0xa68e, +0xa68f,0xa690,0xa691,0xa692,0xa693,0xa694,0xa695,0xa696, +/* 0xcb00 */ +0xa697,0xa698,0xa699,0xa69a,0xa69b,0xa69c,0xa69d,0xa69e, +0xc2d7,0xa69f,0xa6a0,0xa741,0xa742,0xa743,0xa744,0xa745, +0xc2d8,0xa746,0xa747,0xa748,0xc2d9,0xa749,0xa74a,0xa74b, +0xc2da,0xa74c,0xa74d,0xa74e,0xa74f,0xa750,0xa751,0xa752, +0xc2db,0xc2dc,0xa753,0xa754,0xa755,0xa756,0xa757,0xa758, +0xa759,0xa75a,0xa761,0xa762,0xa763,0xa764,0xa765,0xa766, +0xa767,0xa768,0xa769,0xa76a,0xa76b,0xa76c,0xa76d,0xa76e, +0xa76f,0xa770,0xa771,0xa772,0xa773,0xa774,0xa775,0xa776, +0xa777,0xc2dd,0xa778,0xa779,0xa77a,0xa781,0xa782,0xa783, +0xc2de,0xc2df,0xa784,0xa785,0xc2e0,0xa786,0xa787,0xa788, +0xc2e1,0xa789,0xa78a,0xa78b,0xa78c,0xa78d,0xa78e,0xa78f, +0xc2e2,0xc2e3,0xa790,0xa791,0xa792,0xc2e4,0xa793,0xa794, +0xa795,0xa796,0xa797,0xa798,0xc2e5,0xa799,0xa79a,0xa79b, +0xa79c,0xa79d,0xa79e,0xa79f,0xa7a0,0xa841,0xa842,0xa843, +0xa844,0xa845,0xa846,0xa847,0xa848,0xa849,0xa84a,0xa84b, +0xc2e6,0xc2e7,0xa84c,0xa84d,0xa84e,0xa84f,0xa850,0xa851, +0xa852,0xa853,0xa854,0xa855,0xa856,0xa857,0xa858,0xa859, +0xa85a,0xa861,0xa862,0xa863,0xa864,0xa865,0xa866,0xa867, +0xa868,0xa869,0xa86a,0xa86b,0xa86c,0xa86d,0xa86e,0xa86f, +0xa870,0xa871,0xa872,0xa873,0xc2e8,0xa874,0xa875,0xa876, +0xa877,0xa878,0xa879,0xa87a,0xa881,0xa882,0xa883,0xa884, +0xa885,0xa886,0xa887,0xa888,0xa889,0xa88a,0xa88b,0xa88c, +0xa88d,0xa88e,0xa88f,0xa890,0xa891,0xa892,0xa893,0xa894, +0xc2e9,0xa895,0xa896,0xa897,0xa898,0xa899,0xa89a,0xa89b, +0xa89c,0xa89d,0xa89e,0xa89f,0xa8a0,0xa941,0xa942,0xa943, +0xa944,0xa945,0xa946,0xa947,0xa948,0xa949,0xa94a,0xa94b, +0xa94c,0xa94d,0xa94e,0xa94f,0xc2ea,0xa950,0xa951,0xa952, +0xa953,0xa954,0xa955,0xa956,0xa957,0xa958,0xa959,0xa95a, +0xa961,0xa962,0xa963,0xa964,0xc2eb,0xa965,0xa966,0xc2ec, +0xa967,0xc2ed,0xa968,0xa969,0xa96a,0xa96b,0xa96c,0xa96d, +0xa96e,0xa96f,0xa970,0xa971,0xa972,0xa973,0xa974,0xa975, +0xa976,0xa977,0xa978,0xa979,0xa97a,0xa981,0xa982,0xa983, +/* 0xcc00 */ +0xa984,0xa985,0xa986,0xa987,0xa988,0xa989,0xa98a,0xa98b, +0xa98c,0xa98d,0xa98e,0xa98f,0xc2ee,0xc2ef,0xa990,0xa991, +0xc2f0,0xa992,0xa993,0xa994,0xc2f1,0xa995,0xa996,0xa997, +0xa998,0xa999,0xa99a,0xa99b,0xc2f2,0xc2f3,0xa99c,0xa99d, +0xa99e,0xc2f4,0xc2f5,0xa99f,0xa9a0,0xaa41,0xaa42,0xc2f6, +0xc2f7,0xc2f8,0xaa43,0xaa44,0xc2f9,0xaa45,0xc2fa,0xaa46, +0xc2fb,0xaa47,0xaa48,0xaa49,0xaa4a,0xaa4b,0xaa4c,0xaa4d, +0xc2fc,0xc2fd,0xaa4e,0xc2fe,0xc3a1,0xc3a2,0xc3a3,0xaa4f, +0xaa50,0xaa51,0xaa52,0xaa53,0xc3a4,0xc3a5,0xaa54,0xaa55, +0xc3a6,0xaa56,0xaa57,0xaa58,0xc3a7,0xaa59,0xaa5a,0xaa61, +0xaa62,0xaa63,0xaa64,0xaa65,0xc3a8,0xc3a9,0xaa66,0xc3aa, +0xc3ab,0xc3ac,0xaa67,0xaa68,0xaa69,0xaa6a,0xaa6b,0xaa6c, +0xc3ad,0xaa6d,0xaa6e,0xaa6f,0xc3ae,0xaa70,0xc3af,0xaa71, +0xc3b0,0xaa72,0xaa73,0xaa74,0xaa75,0xaa76,0xaa77,0xaa78, +0xc3b1,0xaa79,0xaa7a,0xaa81,0xaa82,0xc3b2,0xaa83,0xaa84, +0xaa85,0xaa86,0xaa87,0xaa88,0xaa89,0xaa8a,0xaa8b,0xaa8c, +0xaa8d,0xaa8e,0xaa8f,0xaa90,0xaa91,0xaa92,0xaa93,0xaa94, +0xaa95,0xaa96,0xaa97,0xaa98,0xaa99,0xaa9a,0xaa9b,0xaa9c, +0xaa9d,0xaa9e,0xaa9f,0xaaa0,0xab41,0xab42,0xab43,0xab44, +0xc3b3,0xc3b4,0xab45,0xab46,0xc3b5,0xab47,0xab48,0xab49, +0xc3b6,0xab4a,0xab4b,0xab4c,0xab4d,0xab4e,0xab4f,0xab50, +0xc3b7,0xc3b8,0xab51,0xc3b9,0xc3ba,0xc3bb,0xab52,0xab53, +0xab54,0xab55,0xab56,0xab57,0xc3bc,0xc3bd,0xab58,0xab59, +0xc3be,0xab5a,0xab61,0xab62,0xc3bf,0xab63,0xab64,0xab65, +0xab66,0xab67,0xab68,0xab69,0xc3c0,0xc3c1,0xab6a,0xc3c2, +0xab6b,0xc3c3,0xab6c,0xab6d,0xab6e,0xab6f,0xab70,0xab71, +0xc3c4,0xab72,0xab73,0xab74,0xc3c5,0xab75,0xab76,0xab77, +0xab78,0xab79,0xab7a,0xab81,0xab82,0xab83,0xab84,0xab85, +0xab86,0xab87,0xab88,0xab89,0xc3c6,0xab8a,0xab8b,0xab8c, +0xab8d,0xab8e,0xab8f,0xab90,0xc3c7,0xab91,0xab92,0xab93, +0xc3c8,0xab94,0xab95,0xab96,0xab97,0xab98,0xab99,0xab9a, +0xab9b,0xab9c,0xab9d,0xab9e,0xab9f,0xaba0,0xac41,0xac42, +/* 0xcd00 */ +0xac43,0xc3c9,0xac44,0xac45,0xac46,0xac47,0xac48,0xac49, +0xc3ca,0xc3cb,0xac4a,0xac4b,0xc3cc,0xac4c,0xac4d,0xac4e, +0xc3cd,0xac4f,0xac50,0xac51,0xac52,0xac53,0xac54,0xac55, +0xc3ce,0xc3cf,0xac56,0xc3d0,0xac57,0xc3d1,0xac58,0xac59, +0xac5a,0xac61,0xac62,0xac63,0xc3d2,0xac64,0xac65,0xac66, +0xc3d3,0xac67,0xac68,0xac69,0xc3d4,0xac6a,0xac6b,0xac6c, +0xac6d,0xac6e,0xac6f,0xac70,0xac71,0xac72,0xac73,0xac74, +0xac75,0xc3d5,0xac76,0xac77,0xac78,0xac79,0xac7a,0xac81, +0xac82,0xac83,0xac84,0xac85,0xac86,0xac87,0xac88,0xac89, +0xac8a,0xac8b,0xac8c,0xac8d,0xac8e,0xac8f,0xac90,0xac91, +0xac92,0xac93,0xac94,0xac95,0xac96,0xac97,0xac98,0xac99, +0xac9a,0xac9b,0xac9c,0xac9d,0xc3d6,0xac9e,0xac9f,0xaca0, +0xc3d7,0xad41,0xad42,0xad43,0xc3d8,0xad44,0xad45,0xad46, +0xad47,0xad48,0xad49,0xad4a,0xc3d9,0xc3da,0xad4b,0xc3db, +0xad4c,0xc3dc,0xad4d,0xad4e,0xad4f,0xad50,0xad51,0xad52, +0xc3dd,0xad53,0xad54,0xad55,0xad56,0xad57,0xad58,0xad59, +0xad5a,0xad61,0xad62,0xad63,0xad64,0xad65,0xad66,0xad67, +0xc3de,0xad68,0xad69,0xad6a,0xad6b,0xad6c,0xad6d,0xad6e, +0xad6f,0xad70,0xad71,0xad72,0xc3df,0xc3e0,0xad73,0xad74, +0xc3e1,0xad75,0xad76,0xad77,0xc3e2,0xad78,0xad79,0xad7a, +0xad81,0xad82,0xad83,0xad84,0xc3e3,0xc3e4,0xad85,0xc3e5, +0xad86,0xc3e6,0xad87,0xad88,0xad89,0xad8a,0xad8b,0xad8c, +0xc3e7,0xad8d,0xad8e,0xad8f,0xad90,0xad91,0xad92,0xad93, +0xad94,0xad95,0xad96,0xad97,0xad98,0xad99,0xad9a,0xad9b, +0xad9c,0xad9d,0xad9e,0xad9f,0xc3e8,0xada0,0xae41,0xae42, +0xae43,0xae44,0xae45,0xae46,0xc3e9,0xae47,0xae48,0xae49, +0xc3ea,0xae4a,0xae4b,0xae4c,0xae4d,0xae4e,0xae4f,0xae50, +0xae51,0xae52,0xae53,0xae54,0xae55,0xae56,0xae57,0xae58, +0xae59,0xae5a,0xae61,0xae62,0xae63,0xae64,0xae65,0xae66, +0xc3eb,0xae67,0xae68,0xae69,0xc3ec,0xae6a,0xae6b,0xae6c, +0xc3ed,0xae6d,0xae6e,0xae6f,0xae70,0xae71,0xae72,0xae73, +0xc3ee,0xc3ef,0xae74,0xc3f0,0xae75,0xc3f1,0xae76,0xae77, +/* 0xce00 */ +0xae78,0xae79,0xae7a,0xae81,0xc3f2,0xae82,0xae83,0xae84, +0xc3f3,0xae85,0xae86,0xae87,0xc3f4,0xae88,0xae89,0xae8a, +0xae8b,0xae8c,0xae8d,0xae8e,0xc3f5,0xae8f,0xae90,0xae91, +0xae92,0xc3f6,0xae93,0xae94,0xae95,0xae96,0xae97,0xae98, +0xc3f7,0xc3f8,0xae99,0xae9a,0xc3f9,0xae9b,0xae9c,0xae9d, +0xc3fa,0xae9e,0xae9f,0xaea0,0xaf41,0xaf42,0xaf43,0xaf44, +0xc3fb,0xc3fc,0xaf45,0xc3fd,0xaf46,0xc3fe,0xaf47,0xaf48, +0xaf49,0xaf4a,0xaf4b,0xaf4c,0xaf4d,0xaf4e,0xaf4f,0xaf50, +0xaf51,0xaf52,0xaf53,0xaf54,0xaf55,0xaf56,0xaf57,0xaf58, +0xaf59,0xaf5a,0xaf61,0xaf62,0xaf63,0xaf64,0xaf65,0xaf66, +0xaf67,0xaf68,0xaf69,0xaf6a,0xaf6b,0xaf6c,0xaf6d,0xaf6e, +0xc4a1,0xc4a2,0xaf6f,0xaf70,0xc4a3,0xaf71,0xaf72,0xc4a4, +0xc4a5,0xc4a6,0xaf73,0xaf74,0xaf75,0xaf76,0xaf77,0xaf78, +0xc4a7,0xc4a8,0xaf79,0xc4a9,0xaf7a,0xc4aa,0xaf81,0xaf82, +0xaf83,0xaf84,0xaf85,0xaf86,0xc4ab,0xc4ac,0xaf87,0xaf88, +0xc4ad,0xaf89,0xaf8a,0xaf8b,0xc4ae,0xaf8c,0xaf8d,0xaf8e, +0xaf8f,0xaf90,0xaf91,0xaf92,0xc4af,0xc4b0,0xaf93,0xc4b1, +0xaf94,0xc4b2,0xaf95,0xaf96,0xaf97,0xaf98,0xaf99,0xaf9a, +0xc4b3,0xc4b4,0xaf9b,0xaf9c,0xc4b5,0xaf9d,0xaf9e,0xaf9f, +0xc4b6,0xafa0,0xb041,0xb042,0xb043,0xb044,0xb045,0xb046, +0xc4b7,0xc4b8,0xb047,0xc4b9,0xc4ba,0xc4bb,0xb048,0xb049, +0xb04a,0xb04b,0xb04c,0xb04d,0xc4bc,0xc4bd,0xb04e,0xb04f, +0xb050,0xb051,0xb052,0xb053,0xb054,0xb055,0xb056,0xb057, +0xb058,0xb059,0xb05a,0xb061,0xb062,0xb063,0xb064,0xb065, +0xb066,0xc4be,0xb067,0xb068,0xb069,0xb06a,0xb06b,0xb06c, +0xb06d,0xb06e,0xb06f,0xb070,0xb071,0xb072,0xb073,0xb074, +0xb075,0xb076,0xb077,0xb078,0xb079,0xb07a,0xb081,0xb082, +0xb083,0xb084,0xb085,0xb086,0xb087,0xb088,0xb089,0xb08a, +0xb08b,0xb08c,0xb08d,0xb08e,0xc4bf,0xc4c0,0xb08f,0xb090, +0xc4c1,0xb091,0xb092,0xc4c2,0xc4c3,0xb093,0xb094,0xb095, +0xb096,0xb097,0xb098,0xb099,0xc4c4,0xc4c5,0xb09a,0xc4c6, +0xc4c7,0xc4c8,0xb09b,0xb09c,0xb09d,0xb09e,0xb09f,0xb0a0, +/* 0xcf00 */ +0xc4c9,0xc4ca,0xb141,0xb142,0xc4cb,0xb143,0xb144,0xb145, +0xc4cc,0xb146,0xb147,0xb148,0xb149,0xb14a,0xb14b,0xb14c, +0xc4cd,0xc4ce,0xb14d,0xc4cf,0xb14e,0xc4d0,0xb14f,0xb150, +0xb151,0xb152,0xb153,0xb154,0xc4d1,0xb155,0xb156,0xb157, +0xc4d2,0xb158,0xb159,0xb15a,0xc4d3,0xb161,0xb162,0xb163, +0xb164,0xb165,0xb166,0xb167,0xc4d4,0xc4d5,0xb168,0xc4d6, +0xc4d7,0xc4d8,0xb169,0xb16a,0xb16b,0xb16c,0xb16d,0xb16e, +0xc4d9,0xb16f,0xb170,0xb171,0xb172,0xb173,0xb174,0xb175, +0xb176,0xb177,0xb178,0xb179,0xb17a,0xb181,0xb182,0xb183, +0xb184,0xb185,0xb186,0xb187,0xb188,0xb189,0xb18a,0xb18b, +0xb18c,0xb18d,0xb18e,0xb18f,0xc4da,0xc4db,0xb190,0xb191, +0xc4dc,0xb192,0xb193,0xb194,0xc4dd,0xb195,0xb196,0xb197, +0xb198,0xb199,0xb19a,0xb19b,0xc4de,0xc4df,0xb19c,0xc4e0, +0xb19d,0xc4e1,0xb19e,0xb19f,0xb1a0,0xb241,0xb242,0xb243, +0xc4e2,0xc4e3,0xb244,0xb245,0xc4e4,0xb246,0xb247,0xb248, +0xc4e5,0xb249,0xb24a,0xb24b,0xb24c,0xb24d,0xb24e,0xb24f, +0xc4e6,0xb250,0xb251,0xb252,0xb253,0xc4e7,0xb254,0xb255, +0xb256,0xb257,0xb258,0xb259,0xc4e8,0xb25a,0xb261,0xb262, +0xb263,0xb264,0xb265,0xb266,0xb267,0xb268,0xb269,0xb26a, +0xb26b,0xb26c,0xb26d,0xb26e,0xb26f,0xb270,0xb271,0xb272, +0xb273,0xc4e9,0xb274,0xb275,0xb276,0xb277,0xb278,0xb279, +0xc4ea,0xb27a,0xb281,0xb282,0xb283,0xb284,0xb285,0xb286, +0xc4eb,0xb287,0xb288,0xb289,0xb28a,0xb28b,0xb28c,0xb28d, +0xb28e,0xb28f,0xb290,0xb291,0xb292,0xb293,0xb294,0xb295, +0xb296,0xb297,0xb298,0xb299,0xc4ec,0xb29a,0xb29b,0xb29c, +0xb29d,0xb29e,0xb29f,0xb2a0,0xb341,0xb342,0xb343,0xb344, +0xb345,0xb346,0xb347,0xb348,0xb349,0xb34a,0xb34b,0xb34c, +0xb34d,0xb34e,0xb34f,0xb350,0xb351,0xb352,0xb353,0xb354, +0xc4ed,0xc4ee,0xb355,0xb356,0xc4ef,0xb357,0xb358,0xb359, +0xc4f0,0xb35a,0xb361,0xb362,0xb363,0xb364,0xb365,0xb366, +0xc4f1,0xc4f2,0xb367,0xc4f3,0xb368,0xc4f4,0xb369,0xb36a, +0xb36b,0xb36c,0xb36d,0xb36e,0xc4f5,0xb36f,0xb370,0xb371, +/* 0xd000 */ +0xc4f6,0xb372,0xb373,0xb374,0xc4f7,0xb375,0xb376,0xb377, +0xb378,0xb379,0xb37a,0xb381,0xb382,0xb383,0xb384,0xb385, +0xb386,0xc4f8,0xb387,0xb388,0xb389,0xb38a,0xb38b,0xb38c, +0xc4f9,0xb38d,0xb38e,0xb38f,0xb390,0xb391,0xb392,0xb393, +0xb394,0xb395,0xb396,0xb397,0xb398,0xb399,0xb39a,0xb39b, +0xb39c,0xb39d,0xb39e,0xb39f,0xb3a0,0xc4fa,0xb441,0xb442, +0xb443,0xb444,0xb445,0xb446,0xc4fb,0xc4fc,0xb447,0xb448, +0xc4fd,0xb449,0xb44a,0xb44b,0xc4fe,0xb44c,0xb44d,0xb44e, +0xb44f,0xb450,0xb451,0xb452,0xc5a1,0xc5a2,0xb453,0xc5a3, +0xb454,0xc5a4,0xb455,0xb456,0xb457,0xb458,0xb459,0xb45a, +0xc5a5,0xb461,0xb462,0xb463,0xc5a6,0xb464,0xb465,0xb466, +0xc5a7,0xb467,0xb468,0xb469,0xb46a,0xb46b,0xb46c,0xb46d, +0xc5a8,0xb46e,0xb46f,0xb470,0xb471,0xb472,0xb473,0xb474, +0xb475,0xb476,0xb477,0xb478,0xc5a9,0xc5aa,0xb479,0xb47a, +0xc5ab,0xb481,0xb482,0xb483,0xc5ac,0xb484,0xb485,0xb486, +0xb487,0xb488,0xb489,0xb48a,0xc5ad,0xc5ae,0xb48b,0xb48c, +0xb48d,0xc5af,0xb48e,0xb48f,0xb490,0xb491,0xb492,0xb493, +0xb494,0xb495,0xb496,0xb497,0xb498,0xb499,0xb49a,0xb49b, +0xb49c,0xb49d,0xb49e,0xb49f,0xb4a0,0xb541,0xb542,0xb543, +0xb544,0xb545,0xb546,0xb547,0xb548,0xb549,0xb54a,0xb54b, +0xb54c,0xb54d,0xb54e,0xb54f,0xc5b0,0xc5b1,0xb550,0xb551, +0xc5b2,0xb552,0xb553,0xb554,0xc5b3,0xb555,0xb556,0xb557, +0xb558,0xb559,0xb55a,0xb561,0xc5b4,0xc5b5,0xb562,0xc5b6, +0xb563,0xc5b7,0xb564,0xb565,0xb566,0xb567,0xb568,0xb569, +0xc5b8,0xc5b9,0xb56a,0xb56b,0xc5ba,0xb56c,0xb56d,0xb56e, +0xc5bb,0xc5bc,0xb56f,0xb570,0xb571,0xb572,0xb573,0xb574, +0xc5bd,0xc5be,0xb575,0xc5bf,0xc5c0,0xc5c1,0xb576,0xb577, +0xb578,0xb579,0xb57a,0xb581,0xc5c2,0xc5c3,0xb582,0xb583, +0xc5c4,0xb584,0xb585,0xb586,0xc5c5,0xb587,0xb588,0xb589, +0xb58a,0xb58b,0xb58c,0xb58d,0xc5c6,0xc5c7,0xb58e,0xc5c8, +0xc5c9,0xc5ca,0xb58f,0xb590,0xb591,0xb592,0xb593,0xb594, +0xc5cb,0xb595,0xb596,0xb597,0xb598,0xb599,0xb59a,0xb59b, +/* 0xd100 */ +0xb59c,0xb59d,0xb59e,0xb59f,0xb5a0,0xb641,0xb642,0xb643, +0xb644,0xb645,0xb646,0xb647,0xb648,0xc5cc,0xb649,0xb64a, +0xb64b,0xb64c,0xb64d,0xb64e,0xb64f,0xb650,0xb651,0xb652, +0xb653,0xb654,0xb655,0xb656,0xb657,0xb658,0xb659,0xb65a, +0xb661,0xb662,0xb663,0xb664,0xb665,0xb666,0xb667,0xb668, +0xb669,0xb66a,0xb66b,0xb66c,0xb66d,0xb66e,0xb66f,0xb670, +0xc5cd,0xc5ce,0xb671,0xb672,0xc5cf,0xb673,0xb674,0xb675, +0xc5d0,0xb676,0xc5d1,0xb677,0xb678,0xb679,0xb67a,0xb681, +0xc5d2,0xc5d3,0xb682,0xc5d4,0xc5d5,0xc5d6,0xb683,0xb684, +0xb685,0xb686,0xb687,0xb688,0xc5d7,0xc5d8,0xb689,0xb68a, +0xc5d9,0xb68b,0xb68c,0xb68d,0xc5da,0xb68e,0xb68f,0xb690, +0xb691,0xb692,0xb693,0xb694,0xc5db,0xc5dc,0xb695,0xc5dd, +0xb696,0xc5de,0xb697,0xb698,0xb699,0xb69a,0xb69b,0xb69c, +0xc5df,0xb69d,0xb69e,0xb69f,0xc5e0,0xb6a0,0xb741,0xb742, +0xb743,0xb744,0xb745,0xb746,0xb747,0xb748,0xb749,0xb74a, +0xb74b,0xb74c,0xb74d,0xb74e,0xc5e1,0xb74f,0xb750,0xb751, +0xb752,0xb753,0xb754,0xb755,0xc5e2,0xb756,0xb757,0xb758, +0xc5e3,0xb759,0xb75a,0xb761,0xb762,0xb763,0xb764,0xb765, +0xb766,0xb767,0xb768,0xb769,0xb76a,0xb76b,0xb76c,0xb76d, +0xb76e,0xb76f,0xb770,0xb771,0xb772,0xb773,0xb774,0xb775, +0xc5e4,0xc5e5,0xb776,0xb777,0xc5e6,0xb778,0xb779,0xb77a, +0xc5e7,0xb781,0xb782,0xb783,0xb784,0xb785,0xb786,0xb787, +0xc5e8,0xc5e9,0xb788,0xc5ea,0xb789,0xc5eb,0xb78a,0xb78b, +0xb78c,0xb78d,0xc5ec,0xb78e,0xc5ed,0xb78f,0xb790,0xb791, +0xc5ee,0xb792,0xb793,0xb794,0xb795,0xb796,0xb797,0xb798, +0xb799,0xb79a,0xb79b,0xb79c,0xb79d,0xb79e,0xb79f,0xb7a0, +0xb841,0xb842,0xb843,0xb844,0xb845,0xb846,0xb847,0xb848, +0xc5ef,0xb849,0xb84a,0xb84b,0xb84c,0xb84d,0xb84e,0xb84f, +0xb850,0xb851,0xb852,0xb853,0xb854,0xb855,0xb856,0xb857, +0xb858,0xb859,0xb85a,0xb861,0xb862,0xb863,0xb864,0xb865, +0xb866,0xb867,0xb868,0xb869,0xc5f0,0xb86a,0xb86b,0xb86c, +0xc5f1,0xb86d,0xb86e,0xb86f,0xb870,0xb871,0xb872,0xb873, +/* 0xd200 */ +0xb874,0xb875,0xb876,0xb877,0xb878,0xb879,0xb87a,0xc5f2, +0xb881,0xc5f3,0xb882,0xb883,0xb884,0xb885,0xb886,0xb887, +0xc5f4,0xb888,0xb889,0xb88a,0xb88b,0xb88c,0xb88d,0xb88e, +0xb88f,0xb890,0xb891,0xb892,0xb893,0xb894,0xb895,0xb896, +0xb897,0xb898,0xb899,0xb89a,0xb89b,0xb89c,0xb89d,0xb89e, +0xb89f,0xb8a0,0xb941,0xb942,0xc5f5,0xc5f6,0xb943,0xb944, +0xc5f7,0xb945,0xb946,0xb947,0xc5f8,0xb948,0xb949,0xb94a, +0xb94b,0xb94c,0xb94d,0xb94e,0xc5f9,0xc5fa,0xb94f,0xc5fb, +0xb950,0xc5fc,0xb951,0xb952,0xb953,0xb954,0xb955,0xb956, +0xc5fd,0xb957,0xb958,0xb959,0xb95a,0xb961,0xb962,0xb963, +0xb964,0xb965,0xb966,0xb967,0xb968,0xb969,0xb96a,0xb96b, +0xb96c,0xb96d,0xb96e,0xb96f,0xc5fe,0xb970,0xb971,0xb972, +0xb973,0xb974,0xb975,0xb976,0xc6a1,0xb977,0xb978,0xb979, +0xb97a,0xb981,0xb982,0xb983,0xb984,0xb985,0xb986,0xb987, +0xb988,0xb989,0xb98a,0xb98b,0xb98c,0xb98d,0xb98e,0xb98f, +0xb990,0xb991,0xb992,0xb993,0xb994,0xb995,0xb996,0xb997, +0xc6a2,0xc6a3,0xb998,0xb999,0xc6a4,0xb99a,0xb99b,0xb99c, +0xc6a5,0xb99d,0xb99e,0xb99f,0xb9a0,0xba41,0xba42,0xba43, +0xc6a6,0xc6a7,0xba44,0xba45,0xba46,0xc6a8,0xba47,0xba48, +0xba49,0xba4a,0xba4b,0xba4c,0xc6a9,0xba4d,0xba4e,0xba4f, +0xc6aa,0xba50,0xba51,0xba52,0xc6ab,0xba53,0xba54,0xba55, +0xba56,0xba57,0xba58,0xba59,0xc6ac,0xba5a,0xba61,0xba62, +0xba63,0xc6ad,0xba64,0xba65,0xba66,0xba67,0xba68,0xba69, +0xc6ae,0xc6af,0xba6a,0xba6b,0xc6b0,0xba6c,0xba6d,0xc6b1, +0xc6b2,0xba6e,0xc6b3,0xba6f,0xba70,0xba71,0xba72,0xba73, +0xc6b4,0xc6b5,0xba74,0xc6b6,0xba75,0xba76,0xba77,0xba78, +0xba79,0xba7a,0xba81,0xba82,0xc6b7,0xba83,0xba84,0xba85, +0xc6b8,0xba86,0xba87,0xba88,0xc6b9,0xba89,0xba8a,0xba8b, +0xba8c,0xba8d,0xba8e,0xba8f,0xc6ba,0xc6bb,0xba90,0xba91, +0xba92,0xba93,0xba94,0xba95,0xba96,0xba97,0xba98,0xba99, +0xc6bc,0xc6bd,0xba9a,0xba9b,0xc6be,0xba9c,0xba9d,0xba9e, +0xc6bf,0xba9f,0xbaa0,0xbb41,0xbb42,0xbb43,0xbb44,0xbb45, +/* 0xd300 */ +0xc6c0,0xc6c1,0xbb46,0xc6c2,0xbb47,0xc6c3,0xbb48,0xbb49, +0xbb4a,0xbb4b,0xbb4c,0xbb4d,0xc6c4,0xc6c5,0xc6c6,0xbb4e, +0xc6c7,0xbb4f,0xbb50,0xbb51,0xc6c8,0xbb52,0xc6c9,0xbb53, +0xbb54,0xbb55,0xbb56,0xbb57,0xc6ca,0xc6cb,0xbb58,0xc6cc, +0xc6cd,0xc6ce,0xbb59,0xbb5a,0xbb61,0xc6cf,0xbb62,0xbb63, +0xc6d0,0xc6d1,0xbb64,0xbb65,0xc6d2,0xbb66,0xbb67,0xbb68, +0xc6d3,0xbb69,0xbb6a,0xbb6b,0xbb6c,0xbb6d,0xbb6e,0xbb6f, +0xc6d4,0xc6d5,0xbb70,0xc6d6,0xc6d7,0xc6d8,0xbb71,0xbb72, +0xbb73,0xbb74,0xbb75,0xbb76,0xc6d9,0xc6da,0xbb77,0xbb78, +0xbb79,0xbb7a,0xbb81,0xbb82,0xbb83,0xbb84,0xbb85,0xbb86, +0xbb87,0xbb88,0xbb89,0xbb8a,0xbb8b,0xbb8c,0xbb8d,0xbb8e, +0xbb8f,0xbb90,0xbb91,0xbb92,0xbb93,0xbb94,0xbb95,0xbb96, +0xbb97,0xbb98,0xbb99,0xbb9a,0xbb9b,0xbb9c,0xbb9d,0xbb9e, +0xbb9f,0xbba0,0xbc41,0xbc42,0xbc43,0xbc44,0xbc45,0xbc46, +0xbc47,0xbc48,0xbc49,0xbc4a,0xbc4b,0xbc4c,0xbc4d,0xbc4e, +0xbc4f,0xbc50,0xbc51,0xbc52,0xc6db,0xc6dc,0xbc53,0xbc54, +0xc6dd,0xbc55,0xbc56,0xbc57,0xc6de,0xbc58,0xbc59,0xbc5a, +0xbc61,0xbc62,0xbc63,0xbc64,0xc6df,0xc6e0,0xbc65,0xc6e1, +0xc6e2,0xc6e3,0xbc66,0xbc67,0xbc68,0xbc69,0xbc6a,0xbc6b, +0xc6e4,0xc6e5,0xbc6c,0xbc6d,0xc6e6,0xbc6e,0xbc6f,0xbc70, +0xc6e7,0xbc71,0xbc72,0xbc73,0xbc74,0xbc75,0xbc76,0xbc77, +0xc6e8,0xc6e9,0xbc78,0xc6ea,0xbc79,0xc6eb,0xbc7a,0xbc81, +0xbc82,0xbc83,0xbc84,0xbc85,0xc6ec,0xbc86,0xbc87,0xbc88, +0xc6ed,0xbc89,0xbc8a,0xbc8b,0xc6ee,0xbc8c,0xbc8d,0xbc8e, +0xbc8f,0xbc90,0xbc91,0xbc92,0xc6ef,0xc6f0,0xbc93,0xbc94, +0xc6f1,0xc6f2,0xbc95,0xbc96,0xbc97,0xbc98,0xbc99,0xbc9a, +0xc6f3,0xbc9b,0xbc9c,0xbc9d,0xbc9e,0xbc9f,0xbca0,0xbd41, +0xc6f4,0xbd42,0xbd43,0xbd44,0xbd45,0xbd46,0xbd47,0xbd48, +0xbd49,0xc6f5,0xbd4a,0xc6f6,0xbd4b,0xbd4c,0xbd4d,0xbd4e, +0xbd4f,0xbd50,0xbd51,0xbd52,0xc6f7,0xc6f8,0xbd53,0xbd54, +0xc6f9,0xbd55,0xbd56,0xbd57,0xc6fa,0xbd58,0xbd59,0xbd5a, +0xbd61,0xbd62,0xbd63,0xbd64,0xc6fb,0xc6fc,0xbd65,0xc6fd, +/* 0xd400 */ +0xbd66,0xc6fe,0xbd67,0xbd68,0xbd69,0xbd6a,0xbd6b,0xbd6c, +0xc7a1,0xbd6d,0xbd6e,0xbd6f,0xbd70,0xbd71,0xbd72,0xbd73, +0xbd74,0xbd75,0xbd76,0xbd77,0xbd78,0xbd79,0xbd7a,0xbd81, +0xbd82,0xbd83,0xbd84,0xbd85,0xbd86,0xc7a2,0xbd87,0xbd88, +0xbd89,0xbd8a,0xbd8b,0xbd8c,0xbd8d,0xbd8e,0xbd8f,0xbd90, +0xbd91,0xbd92,0xbd93,0xbd94,0xbd95,0xbd96,0xbd97,0xbd98, +0xbd99,0xbd9a,0xbd9b,0xbd9c,0xbd9d,0xbd9e,0xbd9f,0xbda0, +0xbe41,0xbe42,0xbe43,0xbe44,0xbe45,0xbe46,0xbe47,0xbe48, +0xc7a3,0xbe49,0xbe4a,0xbe4b,0xc7a4,0xbe4c,0xbe4d,0xbe4e, +0xbe4f,0xbe50,0xbe51,0xbe52,0xbe53,0xbe54,0xbe55,0xbe56, +0xbe57,0xbe58,0xbe59,0xbe5a,0xbe61,0xbe62,0xbe63,0xbe64, +0xbe65,0xbe66,0xbe67,0xbe68,0xc7a5,0xbe69,0xbe6a,0xbe6b, +0xc7a6,0xbe6c,0xbe6d,0xbe6e,0xc7a7,0xbe6f,0xbe70,0xbe71, +0xbe72,0xbe73,0xbe74,0xbe75,0xbe76,0xc7a8,0xbe77,0xc7a9, +0xbe78,0xbe79,0xbe7a,0xbe81,0xbe82,0xbe83,0xbe84,0xbe85, +0xc7aa,0xc7ab,0xbe86,0xbe87,0xc7ac,0xbe88,0xbe89,0xc7ad, +0xc7ae,0xbe8a,0xc7af,0xbe8b,0xbe8c,0xbe8d,0xbe8e,0xbe8f, +0xc7b0,0xc7b1,0xbe90,0xc7b2,0xbe91,0xc7b3,0xbe92,0xbe93, +0xbe94,0xbe95,0xbe96,0xbe97,0xc7b4,0xbe98,0xbe99,0xbe9a, +0xbe9b,0xbe9c,0xbe9d,0xbe9e,0xbe9f,0xbea0,0xbf41,0xbf42, +0xbf43,0xbf44,0xbf45,0xbf46,0xbf47,0xbf48,0xbf49,0xbf4a, +0xbf4b,0xc7b5,0xbf4c,0xbf4d,0xbf4e,0xbf4f,0xbf50,0xbf51, +0xbf52,0xbf53,0xbf54,0xbf55,0xbf56,0xbf57,0xbf58,0xbf59, +0xbf5a,0xbf61,0xbf62,0xbf63,0xbf64,0xbf65,0xbf66,0xbf67, +0xbf68,0xbf69,0xbf6a,0xbf6b,0xbf6c,0xbf6d,0xbf6e,0xbf6f, +0xbf70,0xbf71,0xbf72,0xbf73,0xc7b6,0xbf74,0xbf75,0xbf76, +0xc7b7,0xbf77,0xbf78,0xbf79,0xc7b8,0xbf7a,0xbf81,0xbf82, +0xbf83,0xbf84,0xbf85,0xbf86,0xc7b9,0xbf87,0xbf88,0xc7ba, +0xbf89,0xbf8a,0xbf8b,0xbf8c,0xbf8d,0xbf8e,0xbf8f,0xbf90, +0xc7bb,0xbf91,0xbf92,0xbf93,0xc7bc,0xbf94,0xbf95,0xbf96, +0xc7bd,0xbf97,0xbf98,0xbf99,0xbf9a,0xbf9b,0xbf9c,0xbf9d, +0xc7be,0xbf9e,0xbf9f,0xc7bf,0xbfa0,0xc7c0,0xc041,0xc042, +/* 0xd500 */ +0xc043,0xc044,0xc045,0xc046,0xc7c1,0xc047,0xc048,0xc049, +0xc7c2,0xc04a,0xc04b,0xc04c,0xc7c3,0xc04d,0xc04e,0xc04f, +0xc050,0xc051,0xc052,0xc053,0xc7c4,0xc7c5,0xc054,0xc7c6, +0xc055,0xc056,0xc057,0xc058,0xc059,0xc05a,0xc061,0xc062, +0xc063,0xc064,0xc065,0xc066,0xc067,0xc068,0xc069,0xc06a, +0xc06b,0xc06c,0xc06d,0xc06e,0xc06f,0xc070,0xc071,0xc072, +0xc073,0xc074,0xc075,0xc076,0xc077,0xc078,0xc079,0xc07a, +0xc081,0xc082,0xc083,0xc084,0xc7c7,0xc7c8,0xc085,0xc086, +0xc7c9,0xc087,0xc088,0xc089,0xc7ca,0xc08a,0xc08b,0xc08c, +0xc08d,0xc08e,0xc08f,0xc090,0xc7cb,0xc7cc,0xc091,0xc7cd, +0xc092,0xc7ce,0xc093,0xc094,0xc095,0xc096,0xc097,0xc098, +0xc7cf,0xc7d0,0xc099,0xc09a,0xc7d1,0xc09b,0xc09c,0xc09d, +0xc7d2,0xc09e,0xc09f,0xc0a0,0xc141,0xc7d3,0xc142,0xc143, +0xc7d4,0xc7d5,0xc144,0xc7d6,0xc145,0xc7d7,0xc146,0xc147, +0xc148,0xc149,0xc14a,0xc14b,0xc7d8,0xc7d9,0xc14c,0xc14d, +0xc7da,0xc14e,0xc14f,0xc150,0xc7db,0xc151,0xc152,0xc153, +0xc154,0xc155,0xc156,0xc157,0xc7dc,0xc7dd,0xc158,0xc7de, +0xc7df,0xc7e0,0xc159,0xc15a,0xc161,0xc162,0xc163,0xc164, +0xc7e1,0xc165,0xc166,0xc167,0xc168,0xc169,0xc16a,0xc16b, +0xc16c,0xc16d,0xc16e,0xc16f,0xc170,0xc171,0xc172,0xc173, +0xc174,0xc175,0xc176,0xc177,0xc178,0xc7e2,0xc179,0xc17a, +0xc181,0xc182,0xc183,0xc184,0xc185,0xc186,0xc187,0xc188, +0xc189,0xc18a,0xc18b,0xc18c,0xc18d,0xc18e,0xc18f,0xc190, +0xc191,0xc192,0xc193,0xc194,0xc195,0xc196,0xc197,0xc198, +0xc199,0xc19a,0xc19b,0xc19c,0xc19d,0xc19e,0xc19f,0xc1a0, +0xc7e3,0xc7e4,0xc241,0xc242,0xc7e5,0xc243,0xc244,0xc245, +0xc7e6,0xc246,0xc7e7,0xc247,0xc248,0xc249,0xc24a,0xc24b, +0xc7e8,0xc7e9,0xc24c,0xc7ea,0xc24d,0xc7eb,0xc24e,0xc24f, +0xc250,0xc251,0xc252,0xc253,0xc7ec,0xc7ed,0xc254,0xc255, +0xc7ee,0xc256,0xc257,0xc258,0xc7ef,0xc259,0xc25a,0xc261, +0xc262,0xc263,0xc264,0xc265,0xc7f0,0xc7f1,0xc266,0xc7f2, +0xc267,0xc7f3,0xc268,0xc269,0xc26a,0xc26b,0xc26c,0xc26d, +/* 0xd600 */ +0xc7f4,0xc7f5,0xc26e,0xc26f,0xc7f6,0xc270,0xc271,0xc272, +0xc7f7,0xc273,0xc274,0xc275,0xc276,0xc277,0xc278,0xc279, +0xc7f8,0xc7f9,0xc27a,0xc7fa,0xc7fb,0xc7fc,0xc281,0xc282, +0xc283,0xc284,0xc285,0xc286,0xc7fd,0xc287,0xc288,0xc289, +0xc7fe,0xc28a,0xc28b,0xc28c,0xc8a1,0xc28d,0xc28e,0xc28f, +0xc290,0xc291,0xc292,0xc293,0xc294,0xc8a2,0xc295,0xc296, +0xc297,0xc298,0xc299,0xc29a,0xc29b,0xc29c,0xc29d,0xc29e, +0xc8a3,0xc8a4,0xc29f,0xc2a0,0xc8a5,0xc341,0xc342,0xc343, +0xc8a6,0xc344,0xc345,0xc346,0xc347,0xc8a7,0xc348,0xc349, +0xc8a8,0xc8a9,0xc34a,0xc8aa,0xc34b,0xc8ab,0xc34c,0xc34d, +0xc34e,0xc8ac,0xc34f,0xc350,0xc8ad,0xc8ae,0xc351,0xc352, +0xc8af,0xc353,0xc354,0xc355,0xc8b0,0xc356,0xc357,0xc358, +0xc359,0xc35a,0xc361,0xc362,0xc363,0xc364,0xc365,0xc8b1, +0xc366,0xc8b2,0xc367,0xc368,0xc369,0xc36a,0xc36b,0xc36c, +0xc8b3,0xc8b4,0xc36d,0xc36e,0xc8b5,0xc36f,0xc370,0xc371, +0xc372,0xc373,0xc374,0xc375,0xc376,0xc377,0xc378,0xc379, +0xc37a,0xc381,0xc382,0xc8b6,0xc383,0xc8b7,0xc384,0xc385, +0xc386,0xc387,0xc388,0xc389,0xc8b8,0xc8b9,0xc38a,0xc38b, +0xc8ba,0xc38c,0xc38d,0xc38e,0xc8bb,0xc38f,0xc390,0xc391, +0xc392,0xc393,0xc394,0xc395,0xc396,0xc8bc,0xc397,0xc8bd, +0xc398,0xc8be,0xc399,0xc39a,0xc39b,0xc39c,0xc39d,0xc39e, +0xc8bf,0xc39f,0xc3a0,0xc441,0xc8c0,0xc442,0xc443,0xc444, +0xc8c1,0xc445,0xc446,0xc447,0xc448,0xc449,0xc44a,0xc44b, +0xc44c,0xc8c2,0xc44d,0xc8c3,0xc44e,0xc44f,0xc450,0xc451, +0xc452,0xc453,0xc454,0xc455,0xc8c4,0xc8c5,0xc456,0xc457, +0xc8c6,0xc458,0xc459,0xc45a,0xc8c7,0xc461,0xc462,0xc463, +0xc464,0xc8c8,0xc465,0xc466,0xc8c9,0xc467,0xc468,0xc8ca, +0xc469,0xc8cb,0xc46a,0xc46b,0xc46c,0xc46d,0xc46e,0xc46f, +0xc8cc,0xc470,0xc471,0xc472,0xc8cd,0xc473,0xc474,0xc475, +0xc8ce,0xc476,0xc477,0xc478,0xc479,0xc47a,0xc481,0xc482, +0xc8cf,0xc483,0xc484,0xc485,0xc486,0xc8d0,0xc487,0xc488, +0xc489,0xc48a,0xc48b,0xc48c,0xc8d1,0xc8d2,0xc48d,0xc48e, +/* 0xd700 */ +0xc8d3,0xc48f,0xc490,0xc491,0xc8d4,0xc492,0xc493,0xc494, +0xc495,0xc496,0xc497,0xc498,0xc499,0xc49a,0xc49b,0xc49c, +0xc49d,0xc8d5,0xc49e,0xc49f,0xc4a0,0xc541,0xc542,0xc543, +0xc8d6,0xc8d7,0xc544,0xc545,0xc8d8,0xc546,0xc547,0xc548, +0xc8d9,0xc549,0xc54a,0xc54b,0xc54c,0xc54d,0xc54e,0xc54f, +0xc8da,0xc8db,0xc550,0xc8dc,0xc551,0xc8dd,0xc552,0xc553, +0xc554,0xc555,0xc556,0xc557,0xc8de,0xc8df,0xc558,0xc559, +0xc8e0,0xc55a,0xc561,0xc562,0xc8e1,0xc563,0xc564,0xc565, +0xc566,0xc567,0xc568,0xc569,0xc8e2,0xc56a,0xc56b,0xc8e3, +0xc56c,0xc8e4,0xc56d,0xc56e,0xc56f,0xc570,0xc571,0xc572, +0xc8e5,0xc8e6,0xc573,0xc574,0xc8e7,0xc575,0xc8e8,0xc8e9, +0xc8ea,0xc8eb,0xc576,0xc577,0xc578,0xc579,0xc57a,0xc581, +0xc8ec,0xc8ed,0xc582,0xc8ee,0xc583,0xc8ef,0xc584,0xc585, +0xc586,0xc8f0,0xc587,0xc588,0xc8f1,0xc589,0xc58a,0xc58b, +0xc8f2,0xc58c,0xc58d,0xc58e,0xc8f3,0xc58f,0xc590,0xc591, +0xc592,0xc593,0xc594,0xc595,0xc8f4,0xc8f5,0xc596,0xc597, +0xc598,0xc8f6,0xc599,0xc59a,0xc59b,0xc59c,0xc59d,0xc59e, +0xc8f7,0xc8f8,0xc59f,0xc5a0,0xc8f9,0xc641,0xc642,0xc643, +0xc8fa,0xc644,0xc645,0xc646,0xc647,0xc648,0xc649,0xc64a, +0xc8fb,0xc8fc,0xc64b,0xc8fd,0xc64c,0xc8fe,0xc64d,0xc64e, +0xc64f,0xc650,0xc651,0xc652}; + + +const int ucs_s_uhc_table_min = 0xab00; +const int ucs_s_uhc_table_max = 0xab00 + (sizeof(ucs_s_uhc_table)/sizeof(unsigned short)); + +const unsigned short ucs_r1_uhc_table[] = { +/* 0xf800 */ +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xcbd0,0xcbd6,0xcbe7,0xcdcf,0xcde8,0xcead,0xcffb,0xd0a2, +0xd0b8,0xd0d0,0xd0dd,0xd1d4,0xd1d5,0xd1d8,0xd1db,0xd1dc, +0xd1dd,0xd1de,0xd1df,0xd1e0,0xd1e2,0xd1e3,0xd1e4,0xd1e5, +0xd1e6,0xd1e8,0xd1e9,0xd1ea,0xd1eb,0xd1ed,0xd1ef,0xd1f0, +0xd1f2,0xd1f6,0xd1fa,0xd1fc,0xd1fd,0xd1fe,0xd2a2,0xd2a3, +0xd2a7,0xd2a8,0xd2a9,0xd2aa,0xd2ab,0xd2ad,0xd2b2,0xd2be, +0xd2c2,0xd2c3,0xd2c4,0xd2c6,0xd2c7,0xd2c8,0xd2c9,0xd2ca, +0xd2cb,0xd2cd,0xd2ce,0xd2cf,0xd2d0,0xd2d1,0xd2d2,0xd2d3, +0xd2d4,0xd2d5,0xd2d6,0xd2d7,0xd2d9,0xd2da,0xd2de,0xd2df, +0xd2e1,0xd2e2,0xd2e4,0xd2e5,0xd2e6,0xd2e7,0xd2e8,0xd2e9, +0xd2ea,0xd2eb,0xd2f0,0xd2f1,0xd2f2,0xd2f3,0xd2f4,0xd2f5, +0xd2f7,0xd2f8,0xd4e6,0xd4fc,0xd5a5,0xd5ab,0xd5ae,0xd6b8, +0xd6cd,0xd7cb,0xd7e4,0xdbc5,0xdbe4,0xdca5,0xdda5,0xddd5, +0xddf4,0xdefc,0xdefe,0xdfb3,0xdfe1,0xdfe8,0xe0f1,0xe1ad, +0xe1ed,0xe3f5,0xe4a1,0xe4a9,0xe5ae,0xe5b1,0xe5b2,0xe5b9, +0xe5bb,0xe5bc,0xe5c4,0xe5ce,0xe5d0,0xe5d2,0xe5d6,0xe5fa, +0xe5fb,0xe5fc,0xe5fe,0xe6a1,0xe6a4,0xe6a7,0xe6ad,0xe6af, +0xe6b0,0xe6b1,0xe6b3,0xe6b7,0xe6b8,0xe6bc,0xe6c4,0xe6c6, +0xe6c7,0xe6ca,0xe6d2,0xe6d6,0xe6d9,0xe6dc,0xe6df,0xe6e1, +0xe6e4,0xe6e5,0xe6e6,0xe6e8,0xe6ea,0xe6eb,0xe6ec,0xe6ef, +0xe6f1,0xe6f2,0xe6f5,0xe6f6,0xe6f7,0xe6f9,0xe7a1,0xe7a6, +0xe7a9,0xe7aa,0xe7ac,0xe7ad,0xe7b0,0xe7bf,0xe7c1,0xe7c6, +0xe7c7,0xe7cb,0xe7cd,0xe7cf,0xe7d0,0xe7d3,0xe7df,0xe7e4, +0xe7e6,0xe7f7,0xe8e7,0xe8e8,0xe8f0,0xe8f1,0xe8f7,0xe8f9, +0xe8fb,0xe8fe,0xe9a7,0xe9ac,0xe9cc,0xe9f7,0xeac1,0xeae5, +0xeaf4,0xeaf7,0xeafc,0xeafe,0xeba4,0xeba7,0xeba9,0xebaa, +0xebba,0xebbb,0xebbd,0xebc1,0xebc2,0xebc6,0xebc7,0xebcc, +0xebcf,0xebd0,0xebd1,0xebd2,0xebd8,0xeca6,0xeca7,0xecaa, +0xecaf,0xecb0,0xecb1,0xecb2,0xecb5,0xecb8,0xecba,0xecc0, +0xecc1,0xecc5,0xecc6,0xecc9,0xecca,0xecd5,0xecdd,0xecde, +0xece1,0xece4,0xece7,0xece8,0xecf7,0xecf8,0xecfa,0xeda1, +0xeda2,0xeda3,0xedee,0xeedb,0xf2bd,0xf2fa,0xf3b1,0xf4a7, +0xf4ee,0xf6f4,0xf6f6,0xf7b8,0xf7c8,0xf7d3,0xf8db,0xf8f0, +0xfaa1,0xfaa2,0xfae6,0xfca9}; + +const int ucs_r1_uhc_table_min = 0xf800; +const int ucs_r1_uhc_table_max = 0xf800 + (sizeof(ucs_r1_uhc_table)/sizeof(unsigned short)); + +const unsigned short ucs_r2_uhc_table[] = { +/* 0xff00 */ +0x0000,0xa3a1,0xa3a2,0xa3a3,0xa3a4,0xa3a5,0xa3a6,0xa3a7, +0xa3a8,0xa3a9,0xa3aa,0xa3ab,0xa3ac,0xa3ad,0xa3ae,0xa3af, +0xa3b0,0xa3b1,0xa3b2,0xa3b3,0xa3b4,0xa3b5,0xa3b6,0xa3b7, +0xa3b8,0xa3b9,0xa3ba,0xa3bb,0xa3bc,0xa3bd,0xa3be,0xa3bf, +0xa3c0,0xa3c1,0xa3c2,0xa3c3,0xa3c4,0xa3c5,0xa3c6,0xa3c7, +0xa3c8,0xa3c9,0xa3ca,0xa3cb,0xa3cc,0xa3cd,0xa3ce,0xa3cf, +0xa3d0,0xa3d1,0xa3d2,0xa3d3,0xa3d4,0xa3d5,0xa3d6,0xa3d7, +0xa3d8,0xa3d9,0xa3da,0xa3db,0xa1ac,0xa3dd,0xa3de,0xa3df, +0xa3e0,0xa3e1,0xa3e2,0xa3e3,0xa3e4,0xa3e5,0xa3e6,0xa3e7, +0xa3e8,0xa3e9,0xa3ea,0xa3eb,0xa3ec,0xa3ed,0xa3ee,0xa3ef, +0xa3f0,0xa3f1,0xa3f2,0xa3f3,0xa3f4,0xa3f5,0xa3f6,0xa3f7, +0xa3f8,0xa3f9,0xa3fa,0xa3fb,0xa3fc,0xa3fd,0xa2a6,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, +0xa1cb,0xa1cc,0xa1fe,0xa3fe,0x0000,0xa1cd,0xa3dc}; + +const int ucs_r2_uhc_table_min = 0xff00; +const int ucs_r2_uhc_table_max = 0xff00 + (sizeof (ucs_r2_uhc_table) / sizeof (unsigned short)); + +#else + +extern const unsigned short uhc1_ucs_table[]; +extern const unsigned short uhc2_ucs_table[]; +extern const unsigned short uhc3_ucs_table[]; +extern const unsigned short ucs_a1_uhc_table[]; +extern const unsigned short ucs_a2_uhc_table[]; +extern const unsigned short ucs_a3_uhc_table[]; +extern const unsigned short ucs_i_uhc_table[]; +extern const unsigned short ucs_s_uhc_table[]; +extern const unsigned short ucs_r1_uhc_table[]; +extern const unsigned short ucs_r2_uhc_table[]; + +extern const int uhc1_ucs_table_size; +extern const int uhc2_ucs_table_size; +extern const int uhc3_ucs_table_size; +extern const int ucs_a1_uhc_table_min; +extern const int ucs_a1_uhc_table_max; +extern const int ucs_a2_uhc_table_min; +extern const int ucs_a2_uhc_table_max; +extern const int ucs_a3_uhc_table_min; +extern const int ucs_a3_uhc_table_max; +extern const int ucs_i_uhc_table_min; +extern const int ucs_i_uhc_table_max; +extern const int ucs_s_uhc_table_min; +extern const int ucs_s_uhc_table_max; +extern const int ucs_r1_uhc_table_min; +extern const int ucs_r1_uhc_table_max; +extern const int ucs_r2_uhc_table_min; +extern const int ucs_r2_uhc_table_max; + + + + +#endif + + + +#endif /* UNICODE_TABLE_UHC_H */ diff --git a/ext/mbstring/libmbfl/mbfl/Makefile.am b/ext/mbstring/libmbfl/mbfl/Makefile.am new file mode 100644 index 0000000..6774d88 --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/Makefile.am @@ -0,0 +1,48 @@ +EXTRA_DIST=mk_eaw_tbl.awk +lib_LTLIBRARIES=libmbfl.la +libmbfl_la_SOURCES=mbfilter.c \ + mbfl_string.c \ + mbfl_language.c \ + mbfl_encoding.c \ + mbfl_convert.c \ + mbfl_ident.c \ + mbfl_memory_device.c \ + mbfl_allocators.c \ + mbfl_filter_output.c \ + mbfilter_pass.c \ + mbfilter_wchar.c \ + mbfilter_8bit.c \ + eaw_table.h +libmbfl_filters_la=../filters/libmbfl_filters.la +libmbfl_nls_la=../nls/libmbfl_nls.la +libmbfl_la_LIBADD=$(libmbfl_filters_la) $(libmbfl_nls_la) +libmbfl_la_LDFLAGS=-version-info $(SHLIB_VERSION) +libmbfl_includedir=$(includedir)/mbfl +libmbfl_include_HEADERS=mbfilter.h \ + mbfl_consts.h \ + mbfl_encoding.h \ + mbfl_language.h \ + mbfl_string.h \ + mbfl_convert.h \ + mbfl_ident.h \ + mbfl_memory_device.h \ + mbfl_allocators.h \ + mbfl_defs.h \ + mbfl_filter_output.h \ + mbfilter_pass.h \ + mbfilter_wchar.h \ + mbfilter_8bit.h + +mbfilter.c: eaw_table.h + +eaw_table.h: mk_eaw_tbl.awk + $(AWK) -v TABLE_NAME=mbfl_eaw_table -f mk_eaw_tbl.awk EastAsianWidth.txt > $@ + +EastAsianWidth.txt: + $(FETCH_VIA_FTP) ftp://ftp.unicode.org/Public/UNIDATA/EastAsianWidth.txt + +$(libmbfl_filters_la): + $(MAKE) -C `dirname $(libmbfl_filters_la)` + +$(libmbfl_nls_la): + $(MAKE) -C `dirname $(libmbfl_nls_la)` diff --git a/ext/mbstring/libmbfl/mbfl/eaw_table.h b/ext/mbstring/libmbfl/mbfl/eaw_table.h new file mode 100644 index 0000000..af310ea --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/eaw_table.h @@ -0,0 +1,44 @@ +static const struct { + int begin; + int end; +} mbfl_eaw_table[] = { + { 0x1100, 0x115f }, + { 0x11a3, 0x11a7 }, + { 0x11fa, 0x11ff }, + { 0x2329, 0x232a }, + { 0x2e80, 0x2e99 }, + { 0x2e9b, 0x2ef3 }, + { 0x2f00, 0x2fd5 }, + { 0x2ff0, 0x2ffb }, + { 0x3000, 0x303e }, + { 0x3041, 0x3096 }, + { 0x3099, 0x30ff }, + { 0x3105, 0x312d }, + { 0x3131, 0x318e }, + { 0x3190, 0x31ba }, + { 0x31c0, 0x31e3 }, + { 0x31f0, 0x321e }, + { 0x3220, 0x3247 }, + { 0x3250, 0x32fe }, + { 0x3300, 0x4dbf }, + { 0x4e00, 0xa48c }, + { 0xa490, 0xa4c6 }, + { 0xa960, 0xa97c }, + { 0xac00, 0xd7a3 }, + { 0xd7b0, 0xd7c6 }, + { 0xd7cb, 0xd7fb }, + { 0xf900, 0xfaff }, + { 0xfe10, 0xfe19 }, + { 0xfe30, 0xfe52 }, + { 0xfe54, 0xfe66 }, + { 0xfe68, 0xfe6b }, + { 0xff01, 0xff60 }, + { 0xffe0, 0xffe6 }, + { 0x1b000, 0x1b001 }, + { 0x1f200, 0x1f202 }, + { 0x1f210, 0x1f23a }, + { 0x1f240, 0x1f248 }, + { 0x1f250, 0x1f251 }, + { 0x20000, 0x2fffd }, + { 0x30000, 0x3fffd } +}; diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter.c b/ext/mbstring/libmbfl/mbfl/mbfilter.c new file mode 100644 index 0000000..b3759f9 --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfilter.c @@ -0,0 +1,3112 @@ +/* + * charset=UTF-8 + * vim600: encoding=utf-8 + */ + +/* + * "streamable kanji code filter and converter" + * + * Copyright (c) 1998,1999,2000,2001 HappySize, Inc. All rights reserved. + * + * This software is released under the GNU Lesser General Public License. + * (Version 2.1, February 1999) + * Please read the following detail of the licence (in japanese). + * + * ◆使用許諾æ¡ä»¶â—† + * + * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã«ã‚ˆã£ã¦é–‹ç™ºã•れã¾ã—ãŸã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒ + * ピーサイズã¯ã€è‘—作権法ãŠã‚ˆã³ä¸‡å›½è‘—作権æ¡ç´„ã®å®šã‚ã«ã‚ˆã‚Šã€ã“ã®ã‚½ãƒ•トウェアã«é–¢ + * ã™ã‚‹ã™ã¹ã¦ã®æ¨©åˆ©ã‚’ç•™ä¿ã™ã‚‹æ¨©åˆ©ã‚’æŒã¡ã€ã“ã“ã«è¡Œä½¿ã—ã¾ã™ã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイ + * ズã¯ä»¥ä¸‹ã«æ˜Žè¨˜ã—ãŸæ¡ä»¶ã«å¾“ã£ã¦ã€ã“ã®ã‚½ãƒ•トウェアを使用ã™ã‚‹æŽ’ä»–çš„ã§ã¯ãªã„権利 + * ã‚’ãŠå®¢æ§˜ã«è¨±è«¾ã—ã¾ã™ã€‚何人ãŸã‚Šã¨ã‚‚ã€ä»¥ä¸‹ã®æ¡ä»¶ã«åã—ã¦ã“ã®ã‚½ãƒ•トウェアを使用 + * ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 + * + * ã“ã®ã‚½ãƒ•トウェアを「GNU Lesser General Public License (Version 2.1, February + * 1999)ã€ã«ç¤ºã•ã‚ŒãŸæ¡ä»¶ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚’ã€å…¨ã¦ã®æ–¹ã«è¨±è«¾ã—ã¾ã™ã€‚「GNU Lesser + * General Public Licenseã€ã‚’満ãŸã•ãªã„使用ã«ã¯ã€æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã‹ã‚‰æ›¸é¢ + * ã«ã‚ˆã‚‹è¨±è«¾ã‚’å¾—ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ + * + * 「GNU Lesser General Public Licenseã€ã®å…¨æ–‡ã¯ä»¥ä¸‹ã®ã‚¦ã‚§ãƒ–ページã‹ã‚‰å–å¾—ã§ã + * ã¾ã™ã€‚「GNU Lesser General Public Licenseã€ã¨ã¯ã€ã“れã¾ã§Library General + * Public Licenseã¨å‘¼ã°ã‚Œã¦ã„ãŸã‚‚ã®ã§ã™ã€‚ + * http://www.gnu.org/ --- GNUウェブサイト + * http://www.gnu.org/copyleft/lesser.html --- ãƒ©ã‚¤ã‚»ãƒ³ã‚¹æ–‡é¢ + * ã“ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã®å†…容ãŒã‚ã‹ã‚‰ãªã„æ–¹ã€å®ˆã‚Œãªã„æ–¹ã«ã¯ä½¿ç”¨ã‚’許諾ã—ã¾ã›ã‚“。 + * + * ã—ã‹ã—ãªãŒã‚‰ã€å½“社ã¨GNUプãƒã‚¸ã‚§ã‚¯ãƒˆã¨ã®ç‰¹å®šã®é–¢ä¿‚を示唆ã¾ãŸã¯ä¸»å¼µã™ã‚‹ã‚‚ã®ã§ + * ã¯ã‚りã¾ã›ã‚“。 + * + * â—†ä¿è¨¼å†…容◆ + * + * ã“ã®ã‚½ãƒ•トウェアã¯ã€æœŸå¾…ã•れãŸå‹•作・機能・性能をæŒã¤ã“ã¨ã‚’目標ã¨ã—ã¦è¨è¨ˆã•れ + * 開発ã•れã¦ã„ã¾ã™ãŒã€ã“れをä¿è¨¼ã™ã‚‹ã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“。ã“ã®ã‚½ãƒ•トウェアã¯ã€Œã“ + * ã®ã¾ã¾ã€ã®çŠ¶æ…‹ã§æä¾›ã•れã¦ãŠã‚Šã€ãŸã¨ãˆã°ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®æœ‰ç”¨æ€§ãªã„ã—特定㮠+ * 目的ã«åˆè‡´ã™ã‚‹ã“ã¨ã¨ã„ã£ãŸã€ä½•らã‹ã®ä¿è¨¼å†…容ãŒã€æ˜Žç¤ºã•れãŸã‚Šæš—é»™ã«ç¤ºã•れã¦ã„ + * ã‚‹å ´åˆã§ã‚ã£ã¦ã‚‚ã€ãã®ä¿è¨¼ã¯ç„¡åйã§ã™ã€‚ã“ã®ã‚½ãƒ•トウェアを使用ã—ãŸçµæžœãªã„ã—使 + * 用ã—ãªã‹ã£ãŸçµæžœã«ã‚ˆã£ã¦ã€ç›´æŽ¥ã‚ã‚‹ã„ã¯é–“接ã«å—ã‘ãŸèº«ä½“çš„ãªå‚·å®³ã€è²¡ç”£ä¸Šã®æå®³ + * ã€ãƒ‡ãƒ¼ã‚¿ã®æå¤±ã‚ã‚‹ã„ã¯ãã®ä»–ã®å…¨ã¦ã®æå®³ã«ã¤ã„ã¦ã¯ã€ãã®æå®³ã®å¯èƒ½æ€§ãŒä½¿ç”¨è€… + * ã€å½“社ã‚ã‚‹ã„ã¯ç¬¬ä¸‰è€…ã«ã‚ˆã£ã¦è¦å‘Šã•れã¦ã„ãŸå ´åˆã§ã‚ã£ã¦ã‚‚ã€å½“社ã¯ãã®æå®³ã®è³ + * 償ãŠã‚ˆã³è£œå¡«ã‚’行ã„ã¾ã›ã‚“。ã“ã®è¦å®šã¯ä»–ã®å…¨ã¦ã®ã€æ›¸é¢ä¸Šã¾ãŸã¯æ›¸é¢ã«ç„¡ã„ä¿è¨¼ãƒ» + * 契約・è¦å®šã«å„ªå…ˆã—ã¾ã™ã€‚ + * + * ◆著作権者ã®é€£çµ¡å…ˆãŠã‚ˆã³ä½¿ç”¨æ¡ä»¶ã«ã¤ã„ã¦ã®å•ã„åˆã‚ã›å…ˆâ—† + * + * 〒102-0073 + * æ±äº¬éƒ½åƒä»£ç”°åŒºä¹æ®µåŒ—1-13-5日本地所第一ビル4F + * æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズ + * Phone: 03-3512-3655, Fax: 03-3512-3656 + * Email: sales@happysize.co.jp + * Web: http://happysize.com/ + * + * ◆著者◆ + * + * 金本 茂 <sgk@happysize.co.jp> + * + * ◆履æ´â—† + * + * 1998/11/10 sgk implementation in C++ + * 1999/4/25 sgk Cã§æ›¸ããªãŠã—。 + * 1999/4/26 sgk 入力フィルタを実装。漢å—コードを推定ã—ãªãŒã‚‰ãƒ•ã‚£ãƒ«ã‚¿ã‚’è¿½åŠ ã€‚ + * 1999/6/?? Unicodeサãƒãƒ¼ãƒˆã€‚ + * 1999/6/22 sgk ライセンスをLGPLã«å¤‰æ›´ã€‚ + * + */ + +/* + * Unicode support + * + * Portions copyright (c) 1999,2000,2001 by the PHP3 internationalization team. + * All rights reserved. + * + */ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <stddef.h> + +#ifdef HAVE_STRING_H +#include <string.h> +#endif + +#ifdef HAVE_STRINGS_H +#include <strings.h> +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#include "mbfilter.h" +#include "mbfl_filter_output.h" +#include "mbfilter_pass.h" +#include "filters/mbfilter_tl_jisx0201_jisx0208.h" + +#include "eaw_table.h" + +/* hex character table "0123456789ABCDEF" */ +static char mbfl_hexchar_table[] = { + 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46 +}; + + + +/* + * encoding filter + */ +#define CK(statement) do { if ((statement) < 0) return (-1); } while (0) + + +/* + * buffering converter + */ +mbfl_buffer_converter * +mbfl_buffer_converter_new( + enum mbfl_no_encoding from, + enum mbfl_no_encoding to, + int buf_initsz) +{ + const mbfl_encoding *_from = mbfl_no2encoding(from); + const mbfl_encoding *_to = mbfl_no2encoding(to); + + return mbfl_buffer_converter_new2(_from ? _from: &mbfl_encoding_pass, _to ? _to: &mbfl_encoding_pass, buf_initsz); +} + +mbfl_buffer_converter * +mbfl_buffer_converter_new2( + const mbfl_encoding *from, + const mbfl_encoding *to, + int buf_initsz) +{ + mbfl_buffer_converter *convd; + + /* allocate */ + convd = (mbfl_buffer_converter*)mbfl_malloc(sizeof (mbfl_buffer_converter)); + if (convd == NULL) { + return NULL; + } + + /* initialize */ + convd->from = from; + convd->to = to; + + /* create convert filter */ + convd->filter1 = NULL; + convd->filter2 = NULL; + if (mbfl_convert_filter_get_vtbl(convd->from->no_encoding, convd->to->no_encoding) != NULL) { + convd->filter1 = mbfl_convert_filter_new(convd->from->no_encoding, convd->to->no_encoding, mbfl_memory_device_output, NULL, &convd->device); + } else { + convd->filter2 = mbfl_convert_filter_new(mbfl_no_encoding_wchar, convd->to->no_encoding, mbfl_memory_device_output, NULL, &convd->device); + if (convd->filter2 != NULL) { + convd->filter1 = mbfl_convert_filter_new(convd->from->no_encoding, + mbfl_no_encoding_wchar, + (int (*)(int, void*))convd->filter2->filter_function, + (int (*)(void*))convd->filter2->filter_flush, + convd->filter2); + if (convd->filter1 == NULL) { + mbfl_convert_filter_delete(convd->filter2); + } + } + } + if (convd->filter1 == NULL) { + return NULL; + } + + mbfl_memory_device_init(&convd->device, buf_initsz, buf_initsz/4); + + return convd; +} + + +void +mbfl_buffer_converter_delete(mbfl_buffer_converter *convd) +{ + if (convd != NULL) { + if (convd->filter1) { + mbfl_convert_filter_delete(convd->filter1); + } + if (convd->filter2) { + mbfl_convert_filter_delete(convd->filter2); + } + mbfl_memory_device_clear(&convd->device); + mbfl_free((void*)convd); + } +} + +void +mbfl_buffer_converter_reset(mbfl_buffer_converter *convd) +{ + mbfl_memory_device_reset(&convd->device); +} + +int +mbfl_buffer_converter_illegal_mode(mbfl_buffer_converter *convd, int mode) +{ + if (convd != NULL) { + if (convd->filter2 != NULL) { + convd->filter2->illegal_mode = mode; + } else if (convd->filter1 != NULL) { + convd->filter1->illegal_mode = mode; + } else { + return 0; + } + } + + return 1; +} + +int +mbfl_buffer_converter_illegal_substchar(mbfl_buffer_converter *convd, int substchar) +{ + if (convd != NULL) { + if (convd->filter2 != NULL) { + convd->filter2->illegal_substchar = substchar; + } else if (convd->filter1 != NULL) { + convd->filter1->illegal_substchar = substchar; + } else { + return 0; + } + } + + return 1; +} + +int +mbfl_buffer_converter_strncat(mbfl_buffer_converter *convd, const unsigned char *p, int n) +{ + mbfl_convert_filter *filter; + int (*filter_function)(int c, mbfl_convert_filter *filter); + + if (convd != NULL && p != NULL) { + filter = convd->filter1; + if (filter != NULL) { + filter_function = filter->filter_function; + while (n > 0) { + if ((*filter_function)(*p++, filter) < 0) { + break; + } + n--; + } + } + } + + return n; +} + +int +mbfl_buffer_converter_feed(mbfl_buffer_converter *convd, mbfl_string *string) +{ + return mbfl_buffer_converter_feed2(convd, string, NULL); +} + +int +mbfl_buffer_converter_feed2(mbfl_buffer_converter *convd, mbfl_string *string, int *loc) +{ + int n; + unsigned char *p; + mbfl_convert_filter *filter; + int (*filter_function)(int c, mbfl_convert_filter *filter); + + if (convd == NULL || string == NULL) { + return -1; + } + mbfl_memory_device_realloc(&convd->device, convd->device.pos + string->len, string->len/4); + /* feed data */ + n = string->len; + p = string->val; + + filter = convd->filter1; + if (filter != NULL) { + filter_function = filter->filter_function; + while (n > 0) { + if ((*filter_function)(*p++, filter) < 0) { + if (loc) { + *loc = p - string->val; + } + return -1; + } + n--; + } + } + if (loc) { + *loc = p - string->val; + } + return 0; +} + + +int +mbfl_buffer_converter_flush(mbfl_buffer_converter *convd) +{ + if (convd == NULL) { + return -1; + } + + if (convd->filter1 != NULL) { + mbfl_convert_filter_flush(convd->filter1); + } + if (convd->filter2 != NULL) { + mbfl_convert_filter_flush(convd->filter2); + } + + return 0; +} + +mbfl_string * +mbfl_buffer_converter_getbuffer(mbfl_buffer_converter *convd, mbfl_string *result) +{ + if (convd != NULL && result != NULL && convd->device.buffer != NULL) { + result->no_encoding = convd->to->no_encoding; + result->val = convd->device.buffer; + result->len = convd->device.pos; + } else { + result = NULL; + } + + return result; +} + +mbfl_string * +mbfl_buffer_converter_result(mbfl_buffer_converter *convd, mbfl_string *result) +{ + if (convd == NULL || result == NULL) { + return NULL; + } + result->no_encoding = convd->to->no_encoding; + return mbfl_memory_device_result(&convd->device, result); +} + +mbfl_string * +mbfl_buffer_converter_feed_result(mbfl_buffer_converter *convd, mbfl_string *string, + mbfl_string *result) +{ + if (convd == NULL || string == NULL || result == NULL) { + return NULL; + } + mbfl_buffer_converter_feed(convd, string); + if (convd->filter1 != NULL) { + mbfl_convert_filter_flush(convd->filter1); + } + if (convd->filter2 != NULL) { + mbfl_convert_filter_flush(convd->filter2); + } + result->no_encoding = convd->to->no_encoding; + return mbfl_memory_device_result(&convd->device, result); +} + +int mbfl_buffer_illegalchars(mbfl_buffer_converter *convd) +{ + int num_illegalchars = 0; + + if (convd == NULL) { + return 0; + } + + if (convd->filter1 != NULL) { + num_illegalchars += convd->filter1->num_illegalchar; + } + + if (convd->filter2 != NULL) { + num_illegalchars += convd->filter2->num_illegalchar; + } + + return (num_illegalchars); +} + +/* + * encoding detector + */ +mbfl_encoding_detector * +mbfl_encoding_detector_new(enum mbfl_no_encoding *elist, int elistsz, int strict) +{ + mbfl_encoding_detector *identd; + + int i, num; + mbfl_identify_filter *filter; + + if (elist == NULL || elistsz <= 0) { + return NULL; + } + + /* allocate */ + identd = (mbfl_encoding_detector*)mbfl_malloc(sizeof(mbfl_encoding_detector)); + if (identd == NULL) { + return NULL; + } + identd->filter_list = (mbfl_identify_filter **)mbfl_calloc(elistsz, sizeof(mbfl_identify_filter *)); + if (identd->filter_list == NULL) { + mbfl_free(identd); + return NULL; + } + + /* create filters */ + i = 0; + num = 0; + while (i < elistsz) { + filter = mbfl_identify_filter_new(elist[i]); + if (filter != NULL) { + identd->filter_list[num] = filter; + num++; + } + i++; + } + identd->filter_list_size = num; + + /* set strict flag */ + identd->strict = strict; + + return identd; +} + +mbfl_encoding_detector * +mbfl_encoding_detector_new2(const mbfl_encoding **elist, int elistsz, int strict) +{ + mbfl_encoding_detector *identd; + + int i, num; + mbfl_identify_filter *filter; + + if (elist == NULL || elistsz <= 0) { + return NULL; + } + + /* allocate */ + identd = (mbfl_encoding_detector*)mbfl_malloc(sizeof(mbfl_encoding_detector)); + if (identd == NULL) { + return NULL; + } + identd->filter_list = (mbfl_identify_filter **)mbfl_calloc(elistsz, sizeof(mbfl_identify_filter *)); + if (identd->filter_list == NULL) { + mbfl_free(identd); + return NULL; + } + + /* create filters */ + i = 0; + num = 0; + while (i < elistsz) { + filter = mbfl_identify_filter_new2(elist[i]); + if (filter != NULL) { + identd->filter_list[num] = filter; + num++; + } + i++; + } + identd->filter_list_size = num; + + /* set strict flag */ + identd->strict = strict; + + return identd; +} + + +void +mbfl_encoding_detector_delete(mbfl_encoding_detector *identd) +{ + int i; + + if (identd != NULL) { + if (identd->filter_list != NULL) { + i = identd->filter_list_size; + while (i > 0) { + i--; + mbfl_identify_filter_delete(identd->filter_list[i]); + } + mbfl_free((void *)identd->filter_list); + } + mbfl_free((void *)identd); + } +} + +int +mbfl_encoding_detector_feed(mbfl_encoding_detector *identd, mbfl_string *string) +{ + int i, n, num, bad, res; + unsigned char *p; + mbfl_identify_filter *filter; + + res = 0; + /* feed data */ + if (identd != NULL && string != NULL && string->val != NULL) { + num = identd->filter_list_size; + n = string->len; + p = string->val; + bad = 0; + while (n > 0) { + for (i = 0; i < num; i++) { + filter = identd->filter_list[i]; + if (!filter->flag) { + (*filter->filter_function)(*p, filter); + if (filter->flag) { + bad++; + } + } + } + if ((num - 1) <= bad) { + res = 1; + break; + } + p++; + n--; + } + } + + return res; +} + +const mbfl_encoding *mbfl_encoding_detector_judge2(mbfl_encoding_detector *identd) +{ + mbfl_identify_filter *filter; + const mbfl_encoding *encoding = NULL; + int n; + + /* judge */ + if (identd != NULL) { + n = identd->filter_list_size - 1; + while (n >= 0) { + filter = identd->filter_list[n]; + if (!filter->flag) { + if (!identd->strict || !filter->status) { + encoding = filter->encoding; + } + } + n--; + } + + /* fallback judge */ + if (!encoding) { + n = identd->filter_list_size - 1; + while (n >= 0) { + filter = identd->filter_list[n]; + if (!filter->flag) { + encoding = filter->encoding; + } + n--; + } + } + } + + return encoding; +} + +enum mbfl_no_encoding mbfl_encoding_detector_judge(mbfl_encoding_detector *identd) +{ + const mbfl_encoding *encoding = mbfl_encoding_detector_judge2(identd); + return !encoding ? mbfl_no_encoding_invalid: encoding->no_encoding; +} + + +/* + * encoding converter + */ +mbfl_string * +mbfl_convert_encoding( + mbfl_string *string, + mbfl_string *result, + enum mbfl_no_encoding toenc) +{ + int n; + unsigned char *p; + const mbfl_encoding *encoding; + mbfl_memory_device device; + mbfl_convert_filter *filter1; + mbfl_convert_filter *filter2; + + /* initialize */ + encoding = mbfl_no2encoding(toenc); + if (encoding == NULL || string == NULL || result == NULL) { + return NULL; + } + + filter1 = NULL; + filter2 = NULL; + if (mbfl_convert_filter_get_vtbl(string->no_encoding, toenc) != NULL) { + filter1 = mbfl_convert_filter_new(string->no_encoding, toenc, mbfl_memory_device_output, 0, &device); + } else { + filter2 = mbfl_convert_filter_new(mbfl_no_encoding_wchar, toenc, mbfl_memory_device_output, 0, &device); + if (filter2 != NULL) { + filter1 = mbfl_convert_filter_new(string->no_encoding, mbfl_no_encoding_wchar, (int (*)(int, void*))filter2->filter_function, NULL, filter2); + if (filter1 == NULL) { + mbfl_convert_filter_delete(filter2); + } + } + } + if (filter1 == NULL) { + return NULL; + } + + if (filter2 != NULL) { + filter2->illegal_mode = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR; + filter2->illegal_substchar = 0x3f; /* '?' */ + } + + mbfl_memory_device_init(&device, string->len, (string->len >> 2) + 8); + + /* feed data */ + n = string->len; + p = string->val; + if (p != NULL) { + while (n > 0) { + if ((*filter1->filter_function)(*p++, filter1) < 0) { + break; + } + n--; + } + } + + mbfl_convert_filter_flush(filter1); + mbfl_convert_filter_delete(filter1); + if (filter2 != NULL) { + mbfl_convert_filter_flush(filter2); + mbfl_convert_filter_delete(filter2); + } + + return mbfl_memory_device_result(&device, result); +} + + +/* + * identify encoding + */ +const mbfl_encoding * +mbfl_identify_encoding(mbfl_string *string, enum mbfl_no_encoding *elist, int elistsz, int strict) +{ + int i, n, num, bad; + unsigned char *p; + mbfl_identify_filter *flist, *filter; + const mbfl_encoding *encoding; + + /* flist is an array of mbfl_identify_filter instances */ + flist = (mbfl_identify_filter *)mbfl_calloc(elistsz, sizeof(mbfl_identify_filter)); + if (flist == NULL) { + return NULL; + } + + num = 0; + if (elist != NULL) { + for (i = 0; i < elistsz; i++) { + if (!mbfl_identify_filter_init(&flist[num], elist[i])) { + num++; + } + } + } + + /* feed data */ + n = string->len; + p = string->val; + + if (p != NULL) { + bad = 0; + while (n > 0) { + for (i = 0; i < num; i++) { + filter = &flist[i]; + if (!filter->flag) { + (*filter->filter_function)(*p, filter); + if (filter->flag) { + bad++; + } + } + } + if ((num - 1) <= bad && !strict) { + break; + } + p++; + n--; + } + } + + /* judge */ + encoding = NULL; + + for (i = 0; i < num; i++) { + filter = &flist[i]; + if (!filter->flag) { + if (strict && filter->status) { + continue; + } + encoding = filter->encoding; + break; + } + } + + /* fall-back judge */ + if (!encoding) { + for (i = 0; i < num; i++) { + filter = &flist[i]; + if (!filter->flag && (!strict || !filter->status)) { + encoding = filter->encoding; + break; + } + } + } + + /* cleanup */ + /* dtors should be called in reverse order */ + i = num; while (--i >= 0) { + mbfl_identify_filter_cleanup(&flist[i]); + } + + mbfl_free((void *)flist); + + return encoding; +} + +const mbfl_encoding * +mbfl_identify_encoding2(mbfl_string *string, const mbfl_encoding **elist, int elistsz, int strict) +{ + int i, n, num, bad; + unsigned char *p; + mbfl_identify_filter *flist, *filter; + const mbfl_encoding *encoding; + + /* flist is an array of mbfl_identify_filter instances */ + flist = (mbfl_identify_filter *)mbfl_calloc(elistsz, sizeof(mbfl_identify_filter)); + if (flist == NULL) { + return NULL; + } + + num = 0; + if (elist != NULL) { + for (i = 0; i < elistsz; i++) { + if (!mbfl_identify_filter_init2(&flist[num], elist[i])) { + num++; + } + } + } + + /* feed data */ + n = string->len; + p = string->val; + + if (p != NULL) { + bad = 0; + while (n > 0) { + for (i = 0; i < num; i++) { + filter = &flist[i]; + if (!filter->flag) { + (*filter->filter_function)(*p, filter); + if (filter->flag) { + bad++; + } + } + } + if ((num - 1) <= bad && !strict) { + break; + } + p++; + n--; + } + } + + /* judge */ + encoding = NULL; + + for (i = 0; i < num; i++) { + filter = &flist[i]; + if (!filter->flag) { + if (strict && filter->status) { + continue; + } + encoding = filter->encoding; + break; + } + } + + /* fall-back judge */ + if (!encoding) { + for (i = 0; i < num; i++) { + filter = &flist[i]; + if (!filter->flag && (!strict || !filter->status)) { + encoding = filter->encoding; + break; + } + } + } + + /* cleanup */ + /* dtors should be called in reverse order */ + i = num; while (--i >= 0) { + mbfl_identify_filter_cleanup(&flist[i]); + } + + mbfl_free((void *)flist); + + return encoding; +} + +/* + * strlen + */ +static int +filter_count_output(int c, void *data) +{ + (*(int *)data)++; + return c; +} + +int +mbfl_strlen(mbfl_string *string) +{ + int len, n, m, k; + unsigned char *p; + const unsigned char *mbtab; + const mbfl_encoding *encoding; + + encoding = mbfl_no2encoding(string->no_encoding); + if (encoding == NULL || string == NULL) { + return -1; + } + + len = 0; + if (encoding->flag & MBFL_ENCTYPE_SBCS) { + len = string->len; + } else if (encoding->flag & (MBFL_ENCTYPE_WCS2BE | MBFL_ENCTYPE_WCS2LE)) { + len = string->len/2; + } else if (encoding->flag & (MBFL_ENCTYPE_WCS4BE | MBFL_ENCTYPE_WCS4LE)) { + len = string->len/4; + } else if (encoding->mblen_table != NULL) { + mbtab = encoding->mblen_table; + n = 0; + p = string->val; + k = string->len; + /* count */ + if (p != NULL) { + while (n < k) { + m = mbtab[*p]; + n += m; + p += m; + len++; + }; + } + } else { + /* wchar filter */ + mbfl_convert_filter *filter = mbfl_convert_filter_new( + string->no_encoding, + mbfl_no_encoding_wchar, + filter_count_output, 0, &len); + if (filter == NULL) { + return -1; + } + /* count */ + n = string->len; + p = string->val; + if (p != NULL) { + while (n > 0) { + (*filter->filter_function)(*p++, filter); + n--; + } + } + mbfl_convert_filter_delete(filter); + } + + return len; +} + + +/* + * strpos + */ +struct collector_strpos_data { + mbfl_convert_filter *next_filter; + mbfl_wchar_device needle; + int needle_len; + int start; + int output; + int found_pos; + int needle_pos; + int matched_pos; +}; + +static int +collector_strpos(int c, void* data) +{ + int *p, *h, *m, n; + struct collector_strpos_data *pc = (struct collector_strpos_data*)data; + + if (pc->output >= pc->start) { + if (c == (int)pc->needle.buffer[pc->needle_pos]) { + if (pc->needle_pos == 0) { + pc->found_pos = pc->output; /* found position */ + } + pc->needle_pos++; /* needle pointer */ + if (pc->needle_pos >= pc->needle_len) { + pc->matched_pos = pc->found_pos; /* matched position */ + pc->needle_pos--; + goto retry; + } + } else if (pc->needle_pos != 0) { +retry: + h = (int *)pc->needle.buffer; + h++; + for (;;) { + pc->found_pos++; + p = h; + m = (int *)pc->needle.buffer; + n = pc->needle_pos - 1; + while (n > 0 && *p == *m) { + n--; + p++; + m++; + } + if (n <= 0) { + if (*m != c) { + pc->needle_pos = 0; + } + break; + } else { + h++; + pc->needle_pos--; + } + } + } + } + + pc->output++; + return c; +} + +/* + * oddlen + */ +int +mbfl_oddlen(mbfl_string *string) +{ + int len, n, m, k; + unsigned char *p; + const unsigned char *mbtab; + const mbfl_encoding *encoding; + + + if (string == NULL) { + return -1; + } + encoding = mbfl_no2encoding(string->no_encoding); + if (encoding == NULL) { + return -1; + } + + len = 0; + if (encoding->flag & MBFL_ENCTYPE_SBCS) { + return 0; + } else if (encoding->flag & (MBFL_ENCTYPE_WCS2BE | MBFL_ENCTYPE_WCS2LE)) { + return len % 2; + } else if (encoding->flag & (MBFL_ENCTYPE_WCS4BE | MBFL_ENCTYPE_WCS4LE)) { + return len % 4; + } else if (encoding->mblen_table != NULL) { + mbtab = encoding->mblen_table; + n = 0; + p = string->val; + k = string->len; + /* count */ + if (p != NULL) { + while (n < k) { + m = mbtab[*p]; + n += m; + p += m; + }; + } + return n-k; + } else { + /* how can i do ? */ + return 0; + } + /* NOT REACHED */ +} + +int +mbfl_strpos( + mbfl_string *haystack, + mbfl_string *needle, + int offset, + int reverse) +{ + int result; + mbfl_string _haystack_u8, _needle_u8; + const mbfl_string *haystack_u8, *needle_u8; + const unsigned char *u8_tbl; + + if (haystack == NULL || haystack->val == NULL || needle == NULL || needle->val == NULL) { + return -8; + } + + { + const mbfl_encoding *u8_enc; + u8_enc = mbfl_no2encoding(mbfl_no_encoding_utf8); + if (u8_enc == NULL || u8_enc->mblen_table == NULL) { + return -8; + } + u8_tbl = u8_enc->mblen_table; + } + + if (haystack->no_encoding != mbfl_no_encoding_utf8) { + mbfl_string_init(&_haystack_u8); + haystack_u8 = mbfl_convert_encoding(haystack, &_haystack_u8, mbfl_no_encoding_utf8); + if (haystack_u8 == NULL) { + result = -4; + goto out; + } + } else { + haystack_u8 = haystack; + } + + if (needle->no_encoding != mbfl_no_encoding_utf8) { + mbfl_string_init(&_needle_u8); + needle_u8 = mbfl_convert_encoding(needle, &_needle_u8, mbfl_no_encoding_utf8); + if (needle_u8 == NULL) { + result = -4; + goto out; + } + } else { + needle_u8 = needle; + } + + if (needle_u8->len < 1) { + result = -8; + goto out; + } + + result = -1; + if (haystack_u8->len < needle_u8->len) { + goto out; + } + + if (!reverse) { + unsigned int jtbl[1 << (sizeof(unsigned char) * 8)]; + unsigned int needle_u8_len = needle_u8->len; + unsigned int i; + const unsigned char *p, *q, *e; + const unsigned char *haystack_u8_val = haystack_u8->val, + *needle_u8_val = needle_u8->val; + for (i = 0; i < sizeof(jtbl) / sizeof(*jtbl); ++i) { + jtbl[i] = needle_u8_len + 1; + } + for (i = 0; i < needle_u8_len - 1; ++i) { + jtbl[needle_u8_val[i]] = needle_u8_len - i; + } + e = haystack_u8_val + haystack_u8->len; + p = haystack_u8_val; + while (--offset >= 0) { + if (p >= e) { + result = -16; + goto out; + } + p += u8_tbl[*p]; + } + p += needle_u8_len; + if (p > e) { + goto out; + } + while (p <= e) { + const unsigned char *pv = p; + q = needle_u8_val + needle_u8_len; + for (;;) { + if (q == needle_u8_val) { + result = 0; + while (p > haystack_u8_val) { + unsigned char c = *--p; + if (c < 0x80) { + ++result; + } else if ((c & 0xc0) != 0x80) { + ++result; + } + } + goto out; + } + if (*--q != *--p) { + break; + } + } + p += jtbl[*p]; + if (p <= pv) { + p = pv + 1; + } + } + } else { + unsigned int jtbl[1 << (sizeof(unsigned char) * 8)]; + unsigned int needle_u8_len = needle_u8->len, needle_len = 0; + unsigned int i; + const unsigned char *p, *e, *q, *qe; + const unsigned char *haystack_u8_val = haystack_u8->val, + *needle_u8_val = needle_u8->val; + for (i = 0; i < sizeof(jtbl) / sizeof(*jtbl); ++i) { + jtbl[i] = needle_u8_len; + } + for (i = needle_u8_len - 1; i > 0; --i) { + unsigned char c = needle_u8_val[i]; + jtbl[c] = i; + if (c < 0x80) { + ++needle_len; + } else if ((c & 0xc0) != 0x80) { + ++needle_len; + } + } + { + unsigned char c = needle_u8_val[0]; + if (c < 0x80) { + ++needle_len; + } else if ((c & 0xc0) != 0x80) { + ++needle_len; + } + } + e = haystack_u8_val; + p = e + haystack_u8->len; + qe = needle_u8_val + needle_u8_len; + if (offset < 0) { + if (-offset > needle_len) { + offset += needle_len; + while (offset < 0) { + unsigned char c; + if (p <= e) { + result = -16; + goto out; + } + c = *(--p); + if (c < 0x80) { + ++offset; + } else if ((c & 0xc0) != 0x80) { + ++offset; + } + } + } + } else { + const unsigned char *ee = haystack_u8_val + haystack_u8->len; + while (--offset >= 0) { + if (e >= ee) { + result = -16; + goto out; + } + e += u8_tbl[*e]; + } + } + if (p < e + needle_u8_len) { + goto out; + } + p -= needle_u8_len; + while (p >= e) { + const unsigned char *pv = p; + q = needle_u8_val; + for (;;) { + if (q == qe) { + result = 0; + p -= needle_u8_len; + while (p > haystack_u8_val) { + unsigned char c = *--p; + if (c < 0x80) { + ++result; + } else if ((c & 0xc0) != 0x80) { + ++result; + } + } + goto out; + } + if (*q != *p) { + break; + } + ++p, ++q; + } + p -= jtbl[*p]; + if (p >= pv) { + p = pv - 1; + } + } + } +out: + if (haystack_u8 == &_haystack_u8) { + mbfl_string_clear(&_haystack_u8); + } + if (needle_u8 == &_needle_u8) { + mbfl_string_clear(&_needle_u8); + } + return result; +} + +/* + * substr_count + */ + +int +mbfl_substr_count( + mbfl_string *haystack, + mbfl_string *needle + ) +{ + int n, result = 0; + unsigned char *p; + mbfl_convert_filter *filter; + struct collector_strpos_data pc; + + if (haystack == NULL || needle == NULL) { + return -8; + } + /* needle is converted into wchar */ + mbfl_wchar_device_init(&pc.needle); + filter = mbfl_convert_filter_new( + needle->no_encoding, + mbfl_no_encoding_wchar, + mbfl_wchar_device_output, 0, &pc.needle); + if (filter == NULL) { + return -4; + } + p = needle->val; + n = needle->len; + if (p != NULL) { + while (n > 0) { + if ((*filter->filter_function)(*p++, filter) < 0) { + break; + } + n--; + } + } + mbfl_convert_filter_flush(filter); + mbfl_convert_filter_delete(filter); + pc.needle_len = pc.needle.pos; + if (pc.needle.buffer == NULL) { + return -4; + } + if (pc.needle_len <= 0) { + mbfl_wchar_device_clear(&pc.needle); + return -2; + } + /* initialize filter and collector data */ + filter = mbfl_convert_filter_new( + haystack->no_encoding, + mbfl_no_encoding_wchar, + collector_strpos, 0, &pc); + if (filter == NULL) { + mbfl_wchar_device_clear(&pc.needle); + return -4; + } + pc.start = 0; + pc.output = 0; + pc.needle_pos = 0; + pc.found_pos = 0; + pc.matched_pos = -1; + + /* feed data */ + p = haystack->val; + n = haystack->len; + if (p != NULL) { + while (n > 0) { + if ((*filter->filter_function)(*p++, filter) < 0) { + pc.matched_pos = -4; + break; + } + if (pc.matched_pos >= 0) { + ++result; + pc.matched_pos = -1; + pc.needle_pos = 0; + } + n--; + } + } + mbfl_convert_filter_flush(filter); + mbfl_convert_filter_delete(filter); + mbfl_wchar_device_clear(&pc.needle); + + return result; +} + +/* + * substr + */ +struct collector_substr_data { + mbfl_convert_filter *next_filter; + int start; + int stop; + int output; +}; + +static int +collector_substr(int c, void* data) +{ + struct collector_substr_data *pc = (struct collector_substr_data*)data; + + if (pc->output >= pc->stop) { + return -1; + } + + if (pc->output >= pc->start) { + (*pc->next_filter->filter_function)(c, pc->next_filter); + } + + pc->output++; + + return c; +} + +mbfl_string * +mbfl_substr( + mbfl_string *string, + mbfl_string *result, + int from, + int length) +{ + const mbfl_encoding *encoding; + int n, m, k, len, start, end; + unsigned char *p, *w; + const unsigned char *mbtab; + + encoding = mbfl_no2encoding(string->no_encoding); + if (encoding == NULL || string == NULL || result == NULL) { + return NULL; + } + mbfl_string_init(result); + result->no_language = string->no_language; + result->no_encoding = string->no_encoding; + + if ((encoding->flag & (MBFL_ENCTYPE_SBCS | MBFL_ENCTYPE_WCS2BE | MBFL_ENCTYPE_WCS2LE | MBFL_ENCTYPE_WCS4BE | MBFL_ENCTYPE_WCS4LE)) || + encoding->mblen_table != NULL) { + len = string->len; + start = from; + end = from + length; + if (encoding->flag & (MBFL_ENCTYPE_WCS2BE | MBFL_ENCTYPE_WCS2LE)) { + start *= 2; + end = start + length*2; + } else if (encoding->flag & (MBFL_ENCTYPE_WCS4BE | MBFL_ENCTYPE_WCS4LE)) { + start *= 4; + end = start + length*4; + } else if (encoding->mblen_table != NULL) { + mbtab = encoding->mblen_table; + start = 0; + end = 0; + n = 0; + k = 0; + p = string->val; + if (p != NULL) { + /* search start position */ + while (k <= from) { + start = n; + if (n >= len) { + break; + } + m = mbtab[*p]; + n += m; + p += m; + k++; + } + /* detect end position */ + k = 0; + end = start; + while (k < length) { + end = n; + if (n >= len) { + break; + } + m = mbtab[*p]; + n += m; + p += m; + k++; + } + } + } + + if (start > len) { + start = len; + } + if (start < 0) { + start = 0; + } + if (end > len) { + end = len; + } + if (end < 0) { + end = 0; + } + if (start > end) { + start = end; + } + + /* allocate memory and copy */ + n = end - start; + result->len = 0; + result->val = w = (unsigned char*)mbfl_malloc((n + 8)*sizeof(unsigned char)); + if (w != NULL) { + p = string->val; + if (p != NULL) { + p += start; + result->len = n; + while (n > 0) { + *w++ = *p++; + n--; + } + } + *w++ = '\0'; + *w++ = '\0'; + *w++ = '\0'; + *w = '\0'; + } else { + result = NULL; + } + } else { + mbfl_memory_device device; + struct collector_substr_data pc; + mbfl_convert_filter *decoder; + mbfl_convert_filter *encoder; + + mbfl_memory_device_init(&device, length + 1, 0); + mbfl_string_init(result); + result->no_language = string->no_language; + result->no_encoding = string->no_encoding; + /* output code filter */ + decoder = mbfl_convert_filter_new( + mbfl_no_encoding_wchar, + string->no_encoding, + mbfl_memory_device_output, 0, &device); + /* wchar filter */ + encoder = mbfl_convert_filter_new( + string->no_encoding, + mbfl_no_encoding_wchar, + collector_substr, 0, &pc); + if (decoder == NULL || encoder == NULL) { + mbfl_convert_filter_delete(encoder); + mbfl_convert_filter_delete(decoder); + return NULL; + } + pc.next_filter = decoder; + pc.start = from; + pc.stop = from + length; + pc.output = 0; + + /* feed data */ + p = string->val; + n = string->len; + if (p != NULL) { + while (n > 0) { + if ((*encoder->filter_function)(*p++, encoder) < 0) { + break; + } + n--; + } + } + + mbfl_convert_filter_flush(encoder); + mbfl_convert_filter_flush(decoder); + result = mbfl_memory_device_result(&device, result); + mbfl_convert_filter_delete(encoder); + mbfl_convert_filter_delete(decoder); + } + + return result; +} + +/* + * strcut + */ +mbfl_string * +mbfl_strcut( + mbfl_string *string, + mbfl_string *result, + int from, + int length) +{ + const mbfl_encoding *encoding; + mbfl_memory_device device; + + /* validate the parameters */ + if (string == NULL || string->val == NULL || result == NULL) { + return NULL; + } + + if (from < 0 || length < 0) { + return NULL; + } + + if (from >= string->len) { + from = string->len; + } + + encoding = mbfl_no2encoding(string->no_encoding); + if (encoding == NULL) { + return NULL; + } + + mbfl_string_init(result); + result->no_language = string->no_language; + result->no_encoding = string->no_encoding; + + if ((encoding->flag & (MBFL_ENCTYPE_SBCS + | MBFL_ENCTYPE_WCS2BE + | MBFL_ENCTYPE_WCS2LE + | MBFL_ENCTYPE_WCS4BE + | MBFL_ENCTYPE_WCS4LE)) + || encoding->mblen_table != NULL) { + const unsigned char *start = NULL; + const unsigned char *end = NULL; + unsigned char *w; + unsigned int sz; + + if (encoding->flag & (MBFL_ENCTYPE_WCS2BE | MBFL_ENCTYPE_WCS2LE)) { + from &= -2; + + if (from + length >= string->len) { + length = string->len - from; + } + + start = string->val + from; + end = start + (length & -2); + } else if (encoding->flag & (MBFL_ENCTYPE_WCS4BE | MBFL_ENCTYPE_WCS4LE)) { + from &= -4; + + if (from + length >= string->len) { + length = string->len - from; + } + + start = string->val + from; + end = start + (length & -4); + } else if ((encoding->flag & MBFL_ENCTYPE_SBCS)) { + if (from + length >= string->len) { + length = string->len - from; + } + + start = string->val + from; + end = start + length; + } else if (encoding->mblen_table != NULL) { + const unsigned char *mbtab = encoding->mblen_table; + const unsigned char *p, *q; + int m; + + /* search start position */ + for (m = 0, p = string->val, q = p + from; + p < q; p += (m = mbtab[*p])); + + if (p > q) { + p -= m; + } + + start = p; + + /* search end position */ + if ((start - string->val) + length >= (int)string->len) { + end = string->val + string->len; + } else { + for (q = p + length; p < q; p += (m = mbtab[*p])); + + if (p > q) { + p -= m; + } + end = p; + } + } else { + /* never reached */ + return NULL; + } + + /* allocate memory and copy string */ + sz = end - start; + if ((w = (unsigned char*)mbfl_calloc(sz + 8, + sizeof(unsigned char))) == NULL) { + return NULL; + } + + memcpy(w, start, sz); + w[sz] = '\0'; + w[sz + 1] = '\0'; + w[sz + 2] = '\0'; + w[sz + 3] = '\0'; + + result->val = w; + result->len = sz; + } else { + mbfl_convert_filter *encoder = NULL; + mbfl_convert_filter *decoder = NULL; + const unsigned char *p, *q, *r; + struct { + mbfl_convert_filter encoder; + mbfl_convert_filter decoder; + const unsigned char *p; + int pos; + } bk, _bk; + + /* output code filter */ + if (!(decoder = mbfl_convert_filter_new( + mbfl_no_encoding_wchar, + string->no_encoding, + mbfl_memory_device_output, 0, &device))) { + return NULL; + } + + /* wchar filter */ + if (!(encoder = mbfl_convert_filter_new( + string->no_encoding, + mbfl_no_encoding_wchar, + mbfl_filter_output_null, + NULL, NULL))) { + mbfl_convert_filter_delete(decoder); + return NULL; + } + + mbfl_memory_device_init(&device, length + 8, 0); + + p = string->val; + + /* search start position */ + for (q = string->val + from; p < q; p++) { + (*encoder->filter_function)(*p, encoder); + } + + /* switch the drain direction */ + encoder->output_function = (int(*)(int,void *))decoder->filter_function; + encoder->flush_function = (int(*)(void *))decoder->filter_flush; + encoder->data = decoder; + + q = string->val + string->len; + + /* save the encoder, decoder state and the pointer */ + mbfl_convert_filter_copy(decoder, &_bk.decoder); + mbfl_convert_filter_copy(encoder, &_bk.encoder); + _bk.p = p; + _bk.pos = device.pos; + + if (length > q - p) { + length = q - p; + } + + if (length >= 20) { + /* output a little shorter than "length" */ + /* XXX: the constant "20" was determined purely on the heuristics. */ + for (r = p + length - 20; p < r; p++) { + (*encoder->filter_function)(*p, encoder); + } + + /* if the offset of the resulting string exceeds the length, + * then restore the state */ + if (device.pos > length) { + p = _bk.p; + device.pos = _bk.pos; + decoder->filter_dtor(decoder); + encoder->filter_dtor(encoder); + mbfl_convert_filter_copy(&_bk.decoder, decoder); + mbfl_convert_filter_copy(&_bk.encoder, encoder); + bk = _bk; + } else { + /* save the encoder, decoder state and the pointer */ + mbfl_convert_filter_copy(decoder, &bk.decoder); + mbfl_convert_filter_copy(encoder, &bk.encoder); + bk.p = p; + bk.pos = device.pos; + + /* flush the stream */ + (*encoder->filter_flush)(encoder); + + /* if the offset of the resulting string exceeds the length, + * then restore the state */ + if (device.pos > length) { + bk.decoder.filter_dtor(&bk.decoder); + bk.encoder.filter_dtor(&bk.encoder); + + p = _bk.p; + device.pos = _bk.pos; + decoder->filter_dtor(decoder); + encoder->filter_dtor(encoder); + mbfl_convert_filter_copy(&_bk.decoder, decoder); + mbfl_convert_filter_copy(&_bk.encoder, encoder); + bk = _bk; + } else { + _bk.decoder.filter_dtor(&_bk.decoder); + _bk.encoder.filter_dtor(&_bk.encoder); + + p = bk.p; + device.pos = bk.pos; + decoder->filter_dtor(decoder); + encoder->filter_dtor(encoder); + mbfl_convert_filter_copy(&bk.decoder, decoder); + mbfl_convert_filter_copy(&bk.encoder, encoder); + } + } + } else { + bk = _bk; + } + + /* detect end position */ + while (p < q) { + (*encoder->filter_function)(*p, encoder); + + if (device.pos > length) { + /* restore filter */ + p = bk.p; + device.pos = bk.pos; + decoder->filter_dtor(decoder); + encoder->filter_dtor(encoder); + mbfl_convert_filter_copy(&bk.decoder, decoder); + mbfl_convert_filter_copy(&bk.encoder, encoder); + break; + } + + p++; + + /* backup current state */ + mbfl_convert_filter_copy(decoder, &_bk.decoder); + mbfl_convert_filter_copy(encoder, &_bk.encoder); + _bk.pos = device.pos; + _bk.p = p; + + (*encoder->filter_flush)(encoder); + + if (device.pos > length) { + _bk.decoder.filter_dtor(&_bk.decoder); + _bk.encoder.filter_dtor(&_bk.encoder); + + /* restore filter */ + p = bk.p; + device.pos = bk.pos; + decoder->filter_dtor(decoder); + encoder->filter_dtor(encoder); + mbfl_convert_filter_copy(&bk.decoder, decoder); + mbfl_convert_filter_copy(&bk.encoder, encoder); + break; + } + + bk.decoder.filter_dtor(&bk.decoder); + bk.encoder.filter_dtor(&bk.encoder); + + p = _bk.p; + device.pos = _bk.pos; + decoder->filter_dtor(decoder); + encoder->filter_dtor(encoder); + mbfl_convert_filter_copy(&_bk.decoder, decoder); + mbfl_convert_filter_copy(&_bk.encoder, encoder); + + bk = _bk; + } + + (*encoder->filter_flush)(encoder); + + bk.decoder.filter_dtor(&bk.decoder); + bk.encoder.filter_dtor(&bk.encoder); + + result = mbfl_memory_device_result(&device, result); + + mbfl_convert_filter_delete(encoder); + mbfl_convert_filter_delete(decoder); + } + + return result; +} + + +/* + * strwidth + */ +static int is_fullwidth(int c) +{ + int i; + + if (c < mbfl_eaw_table[0].begin) { + return 0; + } + + for (i = 0; i < sizeof(mbfl_eaw_table) / sizeof(mbfl_eaw_table[0]); i++) { + if (mbfl_eaw_table[i].begin <= c && c <= mbfl_eaw_table[i].end) { + return 1; + } + } + + return 0; +} + +static int +filter_count_width(int c, void* data) +{ + (*(int *)data) += (is_fullwidth(c) ? 2: 1); + return c; +} + +int +mbfl_strwidth(mbfl_string *string) +{ + int len, n; + unsigned char *p; + mbfl_convert_filter *filter; + + len = 0; + if (string->len > 0 && string->val != NULL) { + /* wchar filter */ + filter = mbfl_convert_filter_new( + string->no_encoding, + mbfl_no_encoding_wchar, + filter_count_width, 0, &len); + if (filter == NULL) { + mbfl_convert_filter_delete(filter); + return -1; + } + + /* feed data */ + p = string->val; + n = string->len; + while (n > 0) { + (*filter->filter_function)(*p++, filter); + n--; + } + + mbfl_convert_filter_flush(filter); + mbfl_convert_filter_delete(filter); + } + + return len; +} + + +/* + * strimwidth + */ +struct collector_strimwidth_data { + mbfl_convert_filter *decoder; + mbfl_convert_filter *decoder_backup; + mbfl_memory_device device; + int from; + int width; + int outwidth; + int outchar; + int status; + int endpos; +}; + +static int +collector_strimwidth(int c, void* data) +{ + struct collector_strimwidth_data *pc = (struct collector_strimwidth_data*)data; + + switch (pc->status) { + case 10: + (*pc->decoder->filter_function)(c, pc->decoder); + break; + default: + if (pc->outchar >= pc->from) { + pc->outwidth += (is_fullwidth(c) ? 2: 1); + + if (pc->outwidth > pc->width) { + if (pc->status == 0) { + pc->endpos = pc->device.pos; + mbfl_convert_filter_copy(pc->decoder, pc->decoder_backup); + } + pc->status++; + (*pc->decoder->filter_function)(c, pc->decoder); + c = -1; + } else { + (*pc->decoder->filter_function)(c, pc->decoder); + } + } + pc->outchar++; + break; + } + + return c; +} + +mbfl_string * +mbfl_strimwidth( + mbfl_string *string, + mbfl_string *marker, + mbfl_string *result, + int from, + int width) +{ + struct collector_strimwidth_data pc; + mbfl_convert_filter *encoder; + int n, mkwidth; + unsigned char *p; + + if (string == NULL || result == NULL) { + return NULL; + } + mbfl_string_init(result); + result->no_language = string->no_language; + result->no_encoding = string->no_encoding; + mbfl_memory_device_init(&pc.device, width, 0); + + /* output code filter */ + pc.decoder = mbfl_convert_filter_new( + mbfl_no_encoding_wchar, + string->no_encoding, + mbfl_memory_device_output, 0, &pc.device); + pc.decoder_backup = mbfl_convert_filter_new( + mbfl_no_encoding_wchar, + string->no_encoding, + mbfl_memory_device_output, 0, &pc.device); + /* wchar filter */ + encoder = mbfl_convert_filter_new( + string->no_encoding, + mbfl_no_encoding_wchar, + collector_strimwidth, 0, &pc); + if (pc.decoder == NULL || pc.decoder_backup == NULL || encoder == NULL) { + mbfl_convert_filter_delete(encoder); + mbfl_convert_filter_delete(pc.decoder); + mbfl_convert_filter_delete(pc.decoder_backup); + return NULL; + } + mkwidth = 0; + if (marker) { + mkwidth = mbfl_strwidth(marker); + } + pc.from = from; + pc.width = width - mkwidth; + pc.outwidth = 0; + pc.outchar = 0; + pc.status = 0; + pc.endpos = 0; + + /* feed data */ + p = string->val; + n = string->len; + if (p != NULL) { + while (n > 0) { + n--; + if ((*encoder->filter_function)(*p++, encoder) < 0) { + break; + } + } + mbfl_convert_filter_flush(encoder); + if (pc.status != 0 && mkwidth > 0) { + pc.width += mkwidth; + while (n > 0) { + if ((*encoder->filter_function)(*p++, encoder) < 0) { + break; + } + n--; + } + mbfl_convert_filter_flush(encoder); + if (pc.status != 1) { + pc.status = 10; + pc.device.pos = pc.endpos; + mbfl_convert_filter_copy(pc.decoder_backup, pc.decoder); + mbfl_convert_filter_reset(encoder, marker->no_encoding, mbfl_no_encoding_wchar); + p = marker->val; + n = marker->len; + while (n > 0) { + if ((*encoder->filter_function)(*p++, encoder) < 0) { + break; + } + n--; + } + mbfl_convert_filter_flush(encoder); + } + } else if (pc.status != 0) { + pc.device.pos = pc.endpos; + mbfl_convert_filter_copy(pc.decoder_backup, pc.decoder); + } + mbfl_convert_filter_flush(pc.decoder); + } + result = mbfl_memory_device_result(&pc.device, result); + mbfl_convert_filter_delete(encoder); + mbfl_convert_filter_delete(pc.decoder); + mbfl_convert_filter_delete(pc.decoder_backup); + + return result; +} + +mbfl_string * +mbfl_ja_jp_hantozen( + mbfl_string *string, + mbfl_string *result, + int mode) +{ + int n; + unsigned char *p; + const mbfl_encoding *encoding; + mbfl_memory_device device; + mbfl_convert_filter *decoder = NULL; + mbfl_convert_filter *encoder = NULL; + mbfl_convert_filter *tl_filter = NULL; + mbfl_convert_filter *next_filter = NULL; + mbfl_filt_tl_jisx0201_jisx0208_param *param = NULL; + + /* validate parameters */ + if (string == NULL || result == NULL) { + return NULL; + } + + encoding = mbfl_no2encoding(string->no_encoding); + if (encoding == NULL) { + return NULL; + } + + mbfl_memory_device_init(&device, string->len, 0); + mbfl_string_init(result); + + result->no_language = string->no_language; + result->no_encoding = string->no_encoding; + + decoder = mbfl_convert_filter_new( + mbfl_no_encoding_wchar, + string->no_encoding, + mbfl_memory_device_output, 0, &device); + if (decoder == NULL) { + goto out; + } + next_filter = decoder; + + param = + (mbfl_filt_tl_jisx0201_jisx0208_param *)mbfl_malloc(sizeof(mbfl_filt_tl_jisx0201_jisx0208_param)); + if (param == NULL) { + goto out; + } + + param->mode = mode; + + tl_filter = mbfl_convert_filter_new2( + &vtbl_tl_jisx0201_jisx0208, + (int(*)(int, void*))next_filter->filter_function, + (int(*)(void*))next_filter->filter_flush, + next_filter); + if (tl_filter == NULL) { + mbfl_free(param); + goto out; + } + + tl_filter->opaque = param; + next_filter = tl_filter; + + encoder = mbfl_convert_filter_new( + string->no_encoding, + mbfl_no_encoding_wchar, + (int(*)(int, void*))next_filter->filter_function, + (int(*)(void*))next_filter->filter_flush, + next_filter); + if (encoder == NULL) { + goto out; + } + + /* feed data */ + p = string->val; + n = string->len; + if (p != NULL) { + while (n > 0) { + if ((*encoder->filter_function)(*p++, encoder) < 0) { + break; + } + n--; + } + } + + mbfl_convert_filter_flush(encoder); + result = mbfl_memory_device_result(&device, result); +out: + if (tl_filter != NULL) { + if (tl_filter->opaque != NULL) { + mbfl_free(tl_filter->opaque); + } + mbfl_convert_filter_delete(tl_filter); + } + + if (decoder != NULL) { + mbfl_convert_filter_delete(decoder); + } + + if (encoder != NULL) { + mbfl_convert_filter_delete(encoder); + } + + return result; +} + + +/* + * MIME header encode + */ +struct mime_header_encoder_data { + mbfl_convert_filter *conv1_filter; + mbfl_convert_filter *block_filter; + mbfl_convert_filter *conv2_filter; + mbfl_convert_filter *conv2_filter_backup; + mbfl_convert_filter *encod_filter; + mbfl_convert_filter *encod_filter_backup; + mbfl_memory_device outdev; + mbfl_memory_device tmpdev; + int status1; + int status2; + int prevpos; + int linehead; + int firstindent; + int encnamelen; + int lwsplen; + char encname[128]; + char lwsp[16]; +}; + +static int +mime_header_encoder_block_collector(int c, void *data) +{ + int n; + struct mime_header_encoder_data *pe = (struct mime_header_encoder_data *)data; + + switch (pe->status2) { + case 1: /* encoded word */ + pe->prevpos = pe->outdev.pos; + mbfl_convert_filter_copy(pe->conv2_filter, pe->conv2_filter_backup); + mbfl_convert_filter_copy(pe->encod_filter, pe->encod_filter_backup); + (*pe->conv2_filter->filter_function)(c, pe->conv2_filter); + (*pe->conv2_filter->filter_flush)(pe->conv2_filter); + (*pe->encod_filter->filter_flush)(pe->encod_filter); + n = pe->outdev.pos - pe->linehead + pe->firstindent; + pe->outdev.pos = pe->prevpos; + mbfl_convert_filter_copy(pe->conv2_filter_backup, pe->conv2_filter); + mbfl_convert_filter_copy(pe->encod_filter_backup, pe->encod_filter); + if (n >= 74) { + (*pe->conv2_filter->filter_flush)(pe->conv2_filter); + (*pe->encod_filter->filter_flush)(pe->encod_filter); + mbfl_memory_device_strncat(&pe->outdev, "\x3f\x3d", 2); /* ?= */ + mbfl_memory_device_strncat(&pe->outdev, pe->lwsp, pe->lwsplen); + pe->linehead = pe->outdev.pos; + pe->firstindent = 0; + mbfl_memory_device_strncat(&pe->outdev, pe->encname, pe->encnamelen); + c = (*pe->conv2_filter->filter_function)(c, pe->conv2_filter); + } else { + c = (*pe->conv2_filter->filter_function)(c, pe->conv2_filter); + } + break; + + default: + mbfl_memory_device_strncat(&pe->outdev, pe->encname, pe->encnamelen); + c = (*pe->conv2_filter->filter_function)(c, pe->conv2_filter); + pe->status2 = 1; + break; + } + + return c; +} + +static int +mime_header_encoder_collector(int c, void *data) +{ + static int qp_table[256] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x00 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x00 */ + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20 */ + 0, 0, 0, 0, 0, 0, 0 ,0, 0, 0, 0, 0, 0, 1, 0, 1, /* 0x10 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x40 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /* 0x50 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x60 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /* 0x70 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x80 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x90 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0xA0 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0xB0 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0xC0 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0xD0 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0xE0 */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 /* 0xF0 */ + }; + + int n; + struct mime_header_encoder_data *pe = (struct mime_header_encoder_data *)data; + + switch (pe->status1) { + case 11: /* encoded word */ + (*pe->block_filter->filter_function)(c, pe->block_filter); + break; + + default: /* ASCII */ + if (c <= 0x00ff && !qp_table[(c & 0xff)]) { /* ordinary characters */ + mbfl_memory_device_output(c, &pe->tmpdev); + pe->status1 = 1; + } else if (pe->status1 == 0 && c == 0x20) { /* repeat SPACE */ + mbfl_memory_device_output(c, &pe->tmpdev); + } else { + if (pe->tmpdev.pos < 74 && c == 0x20) { + n = pe->outdev.pos - pe->linehead + pe->tmpdev.pos + pe->firstindent; + if (n > 74) { + mbfl_memory_device_strncat(&pe->outdev, pe->lwsp, pe->lwsplen); /* LWSP */ + pe->linehead = pe->outdev.pos; + pe->firstindent = 0; + } else if (pe->outdev.pos > 0) { + mbfl_memory_device_output(0x20, &pe->outdev); + } + mbfl_memory_device_devcat(&pe->outdev, &pe->tmpdev); + mbfl_memory_device_reset(&pe->tmpdev); + pe->status1 = 0; + } else { + n = pe->outdev.pos - pe->linehead + pe->encnamelen + pe->firstindent; + if (n > 60) { + mbfl_memory_device_strncat(&pe->outdev, pe->lwsp, pe->lwsplen); /* LWSP */ + pe->linehead = pe->outdev.pos; + pe->firstindent = 0; + } else if (pe->outdev.pos > 0) { + mbfl_memory_device_output(0x20, &pe->outdev); + } + mbfl_convert_filter_devcat(pe->block_filter, &pe->tmpdev); + mbfl_memory_device_reset(&pe->tmpdev); + (*pe->block_filter->filter_function)(c, pe->block_filter); + pe->status1 = 11; + } + } + break; + } + + return c; +} + +mbfl_string * +mime_header_encoder_result(struct mime_header_encoder_data *pe, mbfl_string *result) +{ + if (pe->status1 >= 10) { + (*pe->conv2_filter->filter_flush)(pe->conv2_filter); + (*pe->encod_filter->filter_flush)(pe->encod_filter); + mbfl_memory_device_strncat(&pe->outdev, "\x3f\x3d", 2); /* ?= */ + } else if (pe->tmpdev.pos > 0) { + if (pe->outdev.pos > 0) { + if ((pe->outdev.pos - pe->linehead + pe->tmpdev.pos) > 74) { + mbfl_memory_device_strncat(&pe->outdev, pe->lwsp, pe->lwsplen); + } else { + mbfl_memory_device_output(0x20, &pe->outdev); + } + } + mbfl_memory_device_devcat(&pe->outdev, &pe->tmpdev); + } + mbfl_memory_device_reset(&pe->tmpdev); + pe->prevpos = 0; + pe->linehead = 0; + pe->status1 = 0; + pe->status2 = 0; + + return mbfl_memory_device_result(&pe->outdev, result); +} + +struct mime_header_encoder_data* +mime_header_encoder_new( + enum mbfl_no_encoding incode, + enum mbfl_no_encoding outcode, + enum mbfl_no_encoding transenc) +{ + int n; + const char *s; + const mbfl_encoding *outencoding; + struct mime_header_encoder_data *pe; + + /* get output encoding and check MIME charset name */ + outencoding = mbfl_no2encoding(outcode); + if (outencoding == NULL || outencoding->mime_name == NULL || outencoding->mime_name[0] == '\0') { + return NULL; + } + + pe = (struct mime_header_encoder_data*)mbfl_malloc(sizeof(struct mime_header_encoder_data)); + if (pe == NULL) { + return NULL; + } + + mbfl_memory_device_init(&pe->outdev, 0, 0); + mbfl_memory_device_init(&pe->tmpdev, 0, 0); + pe->prevpos = 0; + pe->linehead = 0; + pe->firstindent = 0; + pe->status1 = 0; + pe->status2 = 0; + + /* make the encoding description string exp. "=?ISO-2022-JP?B?" */ + n = 0; + pe->encname[n++] = 0x3d; + pe->encname[n++] = 0x3f; + s = outencoding->mime_name; + while (*s) { + pe->encname[n++] = *s++; + } + pe->encname[n++] = 0x3f; + if (transenc == mbfl_no_encoding_qprint) { + pe->encname[n++] = 0x51; + } else { + pe->encname[n++] = 0x42; + transenc = mbfl_no_encoding_base64; + } + pe->encname[n++] = 0x3f; + pe->encname[n] = '\0'; + pe->encnamelen = n; + + n = 0; + pe->lwsp[n++] = 0x0d; + pe->lwsp[n++] = 0x0a; + pe->lwsp[n++] = 0x20; + pe->lwsp[n] = '\0'; + pe->lwsplen = n; + + /* transfer encode filter */ + pe->encod_filter = mbfl_convert_filter_new(outcode, transenc, mbfl_memory_device_output, 0, &(pe->outdev)); + pe->encod_filter_backup = mbfl_convert_filter_new(outcode, transenc, mbfl_memory_device_output, 0, &(pe->outdev)); + + /* Output code filter */ + pe->conv2_filter = mbfl_convert_filter_new(mbfl_no_encoding_wchar, outcode, mbfl_filter_output_pipe, 0, pe->encod_filter); + pe->conv2_filter_backup = mbfl_convert_filter_new(mbfl_no_encoding_wchar, outcode, mbfl_filter_output_pipe, 0, pe->encod_filter); + + /* encoded block filter */ + pe->block_filter = mbfl_convert_filter_new(mbfl_no_encoding_wchar, mbfl_no_encoding_wchar, mime_header_encoder_block_collector, 0, pe); + + /* Input code filter */ + pe->conv1_filter = mbfl_convert_filter_new(incode, mbfl_no_encoding_wchar, mime_header_encoder_collector, 0, pe); + + if (pe->encod_filter == NULL || + pe->encod_filter_backup == NULL || + pe->conv2_filter == NULL || + pe->conv2_filter_backup == NULL || + pe->conv1_filter == NULL) { + mime_header_encoder_delete(pe); + return NULL; + } + + if (transenc == mbfl_no_encoding_qprint) { + pe->encod_filter->status |= MBFL_QPRINT_STS_MIME_HEADER; + pe->encod_filter_backup->status |= MBFL_QPRINT_STS_MIME_HEADER; + } else { + pe->encod_filter->status |= MBFL_BASE64_STS_MIME_HEADER; + pe->encod_filter_backup->status |= MBFL_BASE64_STS_MIME_HEADER; + } + + return pe; +} + +void +mime_header_encoder_delete(struct mime_header_encoder_data *pe) +{ + if (pe) { + mbfl_convert_filter_delete(pe->conv1_filter); + mbfl_convert_filter_delete(pe->block_filter); + mbfl_convert_filter_delete(pe->conv2_filter); + mbfl_convert_filter_delete(pe->conv2_filter_backup); + mbfl_convert_filter_delete(pe->encod_filter); + mbfl_convert_filter_delete(pe->encod_filter_backup); + mbfl_memory_device_clear(&pe->outdev); + mbfl_memory_device_clear(&pe->tmpdev); + mbfl_free((void*)pe); + } +} + +int +mime_header_encoder_feed(int c, struct mime_header_encoder_data *pe) +{ + return (*pe->conv1_filter->filter_function)(c, pe->conv1_filter); +} + +mbfl_string * +mbfl_mime_header_encode( + mbfl_string *string, + mbfl_string *result, + enum mbfl_no_encoding outcode, + enum mbfl_no_encoding encoding, + const char *linefeed, + int indent) +{ + int n; + unsigned char *p; + struct mime_header_encoder_data *pe; + + mbfl_string_init(result); + result->no_language = string->no_language; + result->no_encoding = mbfl_no_encoding_ascii; + + pe = mime_header_encoder_new(string->no_encoding, outcode, encoding); + if (pe == NULL) { + return NULL; + } + + if (linefeed != NULL) { + n = 0; + while (*linefeed && n < 8) { + pe->lwsp[n++] = *linefeed++; + } + pe->lwsp[n++] = 0x20; + pe->lwsp[n] = '\0'; + pe->lwsplen = n; + } + if (indent > 0 && indent < 74) { + pe->firstindent = indent; + } + + n = string->len; + p = string->val; + while (n > 0) { + (*pe->conv1_filter->filter_function)(*p++, pe->conv1_filter); + n--; + } + + result = mime_header_encoder_result(pe, result); + mime_header_encoder_delete(pe); + + return result; +} + + +/* + * MIME header decode + */ +struct mime_header_decoder_data { + mbfl_convert_filter *deco_filter; + mbfl_convert_filter *conv1_filter; + mbfl_convert_filter *conv2_filter; + mbfl_memory_device outdev; + mbfl_memory_device tmpdev; + int cspos; + int status; + enum mbfl_no_encoding encoding; + enum mbfl_no_encoding incode; + enum mbfl_no_encoding outcode; +}; + +static int +mime_header_decoder_collector(int c, void* data) +{ + const mbfl_encoding *encoding; + struct mime_header_decoder_data *pd = (struct mime_header_decoder_data*)data; + + switch (pd->status) { + case 1: + if (c == 0x3f) { /* ? */ + mbfl_memory_device_output(c, &pd->tmpdev); + pd->cspos = pd->tmpdev.pos; + pd->status = 2; + } else { + mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev); + mbfl_memory_device_reset(&pd->tmpdev); + if (c == 0x3d) { /* = */ + mbfl_memory_device_output(c, &pd->tmpdev); + } else if (c == 0x0d || c == 0x0a) { /* CR or LF */ + pd->status = 9; + } else { + (*pd->conv1_filter->filter_function)(c, pd->conv1_filter); + pd->status = 0; + } + } + break; + case 2: /* store charset string */ + if (c == 0x3f) { /* ? */ + /* identify charset */ + mbfl_memory_device_output('\0', &pd->tmpdev); + encoding = mbfl_name2encoding((const char *)&pd->tmpdev.buffer[pd->cspos]); + if (encoding != NULL) { + pd->incode = encoding->no_encoding; + pd->status = 3; + } + mbfl_memory_device_unput(&pd->tmpdev); + mbfl_memory_device_output(c, &pd->tmpdev); + } else { + mbfl_memory_device_output(c, &pd->tmpdev); + if (pd->tmpdev.pos > 100) { /* too long charset string */ + pd->status = 0; + } else if (c == 0x0d || c == 0x0a) { /* CR or LF */ + mbfl_memory_device_unput(&pd->tmpdev); + pd->status = 9; + } + if (pd->status != 2) { + mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev); + mbfl_memory_device_reset(&pd->tmpdev); + } + } + break; + case 3: /* identify encoding */ + mbfl_memory_device_output(c, &pd->tmpdev); + if (c == 0x42 || c == 0x62) { /* 'B' or 'b' */ + pd->encoding = mbfl_no_encoding_base64; + pd->status = 4; + } else if (c == 0x51 || c == 0x71) { /* 'Q' or 'q' */ + pd->encoding = mbfl_no_encoding_qprint; + pd->status = 4; + } else { + if (c == 0x0d || c == 0x0a) { /* CR or LF */ + mbfl_memory_device_unput(&pd->tmpdev); + pd->status = 9; + } else { + pd->status = 0; + } + mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev); + mbfl_memory_device_reset(&pd->tmpdev); + } + break; + case 4: /* reset filter */ + mbfl_memory_device_output(c, &pd->tmpdev); + if (c == 0x3f) { /* ? */ + /* charset convert filter */ + mbfl_convert_filter_reset(pd->conv1_filter, pd->incode, mbfl_no_encoding_wchar); + /* decode filter */ + mbfl_convert_filter_reset(pd->deco_filter, pd->encoding, mbfl_no_encoding_8bit); + pd->status = 5; + } else { + if (c == 0x0d || c == 0x0a) { /* CR or LF */ + mbfl_memory_device_unput(&pd->tmpdev); + pd->status = 9; + } else { + pd->status = 0; + } + mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev); + } + mbfl_memory_device_reset(&pd->tmpdev); + break; + case 5: /* encoded block */ + if (c == 0x3f) { /* ? */ + pd->status = 6; + } else { + (*pd->deco_filter->filter_function)(c, pd->deco_filter); + } + break; + case 6: /* check end position */ + if (c == 0x3d) { /* = */ + /* flush and reset filter */ + (*pd->deco_filter->filter_flush)(pd->deco_filter); + (*pd->conv1_filter->filter_flush)(pd->conv1_filter); + mbfl_convert_filter_reset(pd->conv1_filter, mbfl_no_encoding_ascii, mbfl_no_encoding_wchar); + pd->status = 7; + } else { + (*pd->deco_filter->filter_function)(0x3f, pd->deco_filter); + if (c != 0x3f) { /* ? */ + (*pd->deco_filter->filter_function)(c, pd->deco_filter); + pd->status = 5; + } + } + break; + case 7: /* after encoded block */ + if (c == 0x0d || c == 0x0a) { /* CR LF */ + pd->status = 8; + } else { + mbfl_memory_device_output(c, &pd->tmpdev); + if (c == 0x3d) { /* = */ + pd->status = 1; + } else if (c != 0x20 && c != 0x09) { /* not space */ + mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev); + mbfl_memory_device_reset(&pd->tmpdev); + pd->status = 0; + } + } + break; + case 8: /* folding */ + case 9: /* folding */ + if (c != 0x0d && c != 0x0a && c != 0x20 && c != 0x09) { + if (c == 0x3d) { /* = */ + if (pd->status == 8) { + mbfl_memory_device_output(0x20, &pd->tmpdev); /* SPACE */ + } else { + (*pd->conv1_filter->filter_function)(0x20, pd->conv1_filter); + } + mbfl_memory_device_output(c, &pd->tmpdev); + pd->status = 1; + } else { + mbfl_memory_device_output(0x20, &pd->tmpdev); + mbfl_memory_device_output(c, &pd->tmpdev); + mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev); + mbfl_memory_device_reset(&pd->tmpdev); + pd->status = 0; + } + } + break; + default: /* non encoded block */ + if (c == 0x0d || c == 0x0a) { /* CR LF */ + pd->status = 9; + } else if (c == 0x3d) { /* = */ + mbfl_memory_device_output(c, &pd->tmpdev); + pd->status = 1; + } else { + (*pd->conv1_filter->filter_function)(c, pd->conv1_filter); + } + break; + } + + return c; +} + +mbfl_string * +mime_header_decoder_result(struct mime_header_decoder_data *pd, mbfl_string *result) +{ + switch (pd->status) { + case 1: + case 2: + case 3: + case 4: + case 7: + case 8: + case 9: + mbfl_convert_filter_devcat(pd->conv1_filter, &pd->tmpdev); + break; + case 5: + case 6: + (*pd->deco_filter->filter_flush)(pd->deco_filter); + (*pd->conv1_filter->filter_flush)(pd->conv1_filter); + break; + } + (*pd->conv2_filter->filter_flush)(pd->conv2_filter); + mbfl_memory_device_reset(&pd->tmpdev); + pd->status = 0; + + return mbfl_memory_device_result(&pd->outdev, result); +} + +struct mime_header_decoder_data* +mime_header_decoder_new(enum mbfl_no_encoding outcode) +{ + struct mime_header_decoder_data *pd; + + pd = (struct mime_header_decoder_data*)mbfl_malloc(sizeof(struct mime_header_decoder_data)); + if (pd == NULL) { + return NULL; + } + + mbfl_memory_device_init(&pd->outdev, 0, 0); + mbfl_memory_device_init(&pd->tmpdev, 0, 0); + pd->cspos = 0; + pd->status = 0; + pd->encoding = mbfl_no_encoding_pass; + pd->incode = mbfl_no_encoding_ascii; + pd->outcode = outcode; + /* charset convert filter */ + pd->conv2_filter = mbfl_convert_filter_new(mbfl_no_encoding_wchar, pd->outcode, mbfl_memory_device_output, 0, &pd->outdev); + pd->conv1_filter = mbfl_convert_filter_new(pd->incode, mbfl_no_encoding_wchar, mbfl_filter_output_pipe, 0, pd->conv2_filter); + /* decode filter */ + pd->deco_filter = mbfl_convert_filter_new(pd->encoding, mbfl_no_encoding_8bit, mbfl_filter_output_pipe, 0, pd->conv1_filter); + + if (pd->conv1_filter == NULL || pd->conv2_filter == NULL || pd->deco_filter == NULL) { + mime_header_decoder_delete(pd); + return NULL; + } + + return pd; +} + +void +mime_header_decoder_delete(struct mime_header_decoder_data *pd) +{ + if (pd) { + mbfl_convert_filter_delete(pd->conv2_filter); + mbfl_convert_filter_delete(pd->conv1_filter); + mbfl_convert_filter_delete(pd->deco_filter); + mbfl_memory_device_clear(&pd->outdev); + mbfl_memory_device_clear(&pd->tmpdev); + mbfl_free((void*)pd); + } +} + +int +mime_header_decoder_feed(int c, struct mime_header_decoder_data *pd) +{ + return mime_header_decoder_collector(c, pd); +} + +mbfl_string * +mbfl_mime_header_decode( + mbfl_string *string, + mbfl_string *result, + enum mbfl_no_encoding outcode) +{ + int n; + unsigned char *p; + struct mime_header_decoder_data *pd; + + mbfl_string_init(result); + result->no_language = string->no_language; + result->no_encoding = outcode; + + pd = mime_header_decoder_new(outcode); + if (pd == NULL) { + return NULL; + } + + /* feed data */ + n = string->len; + p = string->val; + while (n > 0) { + mime_header_decoder_collector(*p++, pd); + n--; + } + + result = mime_header_decoder_result(pd, result); + mime_header_decoder_delete(pd); + + return result; +} + + + +/* + * convert HTML numeric entity + */ +struct collector_htmlnumericentity_data { + mbfl_convert_filter *decoder; + int status; + int cache; + int digit; + int *convmap; + int mapsize; +}; + +static int +collector_encode_htmlnumericentity(int c, void *data) +{ + struct collector_htmlnumericentity_data *pc = (struct collector_htmlnumericentity_data *)data; + int f, n, s, r, d, size, *mapelm; + + size = pc->mapsize; + f = 0; + n = 0; + while (n < size) { + mapelm = &(pc->convmap[n*4]); + if (c >= mapelm[0] && c <= mapelm[1]) { + s = (c + mapelm[2]) & mapelm[3]; + if (s >= 0) { + (*pc->decoder->filter_function)(0x26, pc->decoder); /* '&' */ + (*pc->decoder->filter_function)(0x23, pc->decoder); /* '#' */ + r = 100000000; + s %= r; + while (r > 0) { + d = s/r; + if (d || f) { + f = 1; + s %= r; + (*pc->decoder->filter_function)(mbfl_hexchar_table[d], pc->decoder); + } + r /= 10; + } + if (!f) { + f = 1; + (*pc->decoder->filter_function)(mbfl_hexchar_table[0], pc->decoder); + } + (*pc->decoder->filter_function)(0x3b, pc->decoder); /* ';' */ + } + } + if (f) { + break; + } + n++; + } + if (!f) { + (*pc->decoder->filter_function)(c, pc->decoder); + } + + return c; +} + +static int +collector_decode_htmlnumericentity(int c, void *data) +{ + struct collector_htmlnumericentity_data *pc = (struct collector_htmlnumericentity_data *)data; + int f, n, s, r, d, size, *mapelm; + + switch (pc->status) { + case 1: + if (c == 0x23) { /* '#' */ + pc->status = 2; + } else { + pc->status = 0; + (*pc->decoder->filter_function)(0x26, pc->decoder); /* '&' */ + (*pc->decoder->filter_function)(c, pc->decoder); + } + break; + case 2: + if (c == 0x78) { /* 'x' */ + pc->status = 4; + } else if (c >= 0x30 && c <= 0x39) { /* '0' - '9' */ + pc->cache = c - 0x30; + pc->status = 3; + pc->digit = 1; + } else { + pc->status = 0; + (*pc->decoder->filter_function)(0x26, pc->decoder); /* '&' */ + (*pc->decoder->filter_function)(0x23, pc->decoder); /* '#' */ + (*pc->decoder->filter_function)(c, pc->decoder); + } + break; + case 3: + s = 0; + f = 0; + if (c >= 0x30 && c <= 0x39) { /* '0' - '9' */ + if (pc->digit > 9) { + pc->status = 0; + s = pc->cache; + f = 1; + } else { + s = pc->cache*10 + c - 0x30; + pc->cache = s; + pc->digit++; + } + } else { + pc->status = 0; + s = pc->cache; + f = 1; + n = 0; + size = pc->mapsize; + while (n < size) { + mapelm = &(pc->convmap[n*4]); + d = s - mapelm[2]; + if (d >= mapelm[0] && d <= mapelm[1]) { + f = 0; + (*pc->decoder->filter_function)(d, pc->decoder); + if (c != 0x3b) { /* ';' */ + (*pc->decoder->filter_function)(c, pc->decoder); + } + break; + } + n++; + } + } + if (f) { + (*pc->decoder->filter_function)(0x26, pc->decoder); /* '&' */ + (*pc->decoder->filter_function)(0x23, pc->decoder); /* '#' */ + r = 1; + n = pc->digit; + while (n > 0) { + r *= 10; + n--; + } + s %= r; + r /= 10; + while (r > 0) { + d = s/r; + s %= r; + r /= 10; + (*pc->decoder->filter_function)(mbfl_hexchar_table[d], pc->decoder); + } + (*pc->decoder->filter_function)(c, pc->decoder); + } + break; + case 4: + if (c >= 0x30 && c <= 0x39) { /* '0' - '9' */ + pc->cache = c - 0x30; + pc->status = 5; + pc->digit = 1; + } else if (c >= 0x41 && c <= 0x46) { /* 'A' - 'F' */ + pc->cache = c - 0x41 + 10; + pc->status = 5; + pc->digit = 1; + } else if (c >= 0x61 && c <= 0x66) { /* 'a' - 'f' */ + pc->cache = c - 0x61 + 10; + pc->status = 5; + pc->digit = 1; + } else { + pc->status = 0; + (*pc->decoder->filter_function)(0x26, pc->decoder); /* '&' */ + (*pc->decoder->filter_function)(0x23, pc->decoder); /* '#' */ + (*pc->decoder->filter_function)(0x78, pc->decoder); /* 'x' */ + (*pc->decoder->filter_function)(c, pc->decoder); + } + break; + case 5: + s = 0; + f = 0; + if ((c >= 0x30 && c <= 0x39) || + (c >= 0x41 && c <= 0x46) || + (c >= 0x61 && c <= 0x66)) { /* '0' - '9' or 'a' - 'f' */ + if (pc->digit > 9) { + pc->status = 0; + s = pc->cache; + f = 1; + } else { + if (c >= 0x30 && c <= 0x39) { + s = pc->cache*16 + (c - 0x30); + } else if (c >= 0x41 && c <= 0x46) { + s = pc->cache*16 + (c - 0x41 + 10); + } else { + s = pc->cache*16 + (c - 0x61 + 10); + } + pc->cache = s; + pc->digit++; + } + } else { + pc->status = 0; + s = pc->cache; + f = 1; + n = 0; + size = pc->mapsize; + while (n < size) { + mapelm = &(pc->convmap[n*4]); + d = s - mapelm[2]; + if (d >= mapelm[0] && d <= mapelm[1]) { + f = 0; + (*pc->decoder->filter_function)(d, pc->decoder); + if (c != 0x3b) { /* ';' */ + (*pc->decoder->filter_function)(c, pc->decoder); + } + break; + } + n++; + } + } + if (f) { + (*pc->decoder->filter_function)(0x26, pc->decoder); /* '&' */ + (*pc->decoder->filter_function)(0x23, pc->decoder); /* '#' */ + (*pc->decoder->filter_function)(0x78, pc->decoder); /* 'x' */ + r = 1; + n = pc->digit; + while (n > 0) { + r *= 16; + n--; + } + s %= r; + r /= 16; + while (r > 0) { + d = s/r; + s %= r; + r /= 16; + (*pc->decoder->filter_function)(mbfl_hexchar_table[d], pc->decoder); + } + (*pc->decoder->filter_function)(c, pc->decoder); + } + break; + default: + if (c == 0x26) { /* '&' */ + pc->status = 1; + } else { + (*pc->decoder->filter_function)(c, pc->decoder); + } + break; + } + + return c; +} + +static int +collector_encode_hex_htmlnumericentity(int c, void *data) +{ + struct collector_htmlnumericentity_data *pc = (struct collector_htmlnumericentity_data *)data; + int f, n, s, r, d, size, *mapelm; + + size = pc->mapsize; + f = 0; + n = 0; + while (n < size) { + mapelm = &(pc->convmap[n*4]); + if (c >= mapelm[0] && c <= mapelm[1]) { + s = (c + mapelm[2]) & mapelm[3]; + if (s >= 0) { + (*pc->decoder->filter_function)(0x26, pc->decoder); /* '&' */ + (*pc->decoder->filter_function)(0x23, pc->decoder); /* '#' */ + (*pc->decoder->filter_function)(0x78, pc->decoder); /* 'x' */ + r = 0x1000000; + s %= r; + while (r > 0) { + d = s/r; + if (d || f) { + f = 1; + s %= r; + (*pc->decoder->filter_function)(mbfl_hexchar_table[d], pc->decoder); + } + r /= 16; + } + if (!f) { + f = 1; + (*pc->decoder->filter_function)(mbfl_hexchar_table[0], pc->decoder); + } + (*pc->decoder->filter_function)(0x3b, pc->decoder); /* ';' */ + } + } + if (f) { + break; + } + n++; + } + if (!f) { + (*pc->decoder->filter_function)(c, pc->decoder); + } + + return c; +} + +int mbfl_filt_decode_htmlnumericentity_flush(mbfl_convert_filter *filter) +{ + struct collector_htmlnumericentity_data *pc = (struct collector_htmlnumericentity_data *)filter; + int n, s, r, d; + + if (pc->status) { + switch (pc->status) { + case 1: /* '&' */ + (*pc->decoder->filter_function)(0x26, pc->decoder); /* '&' */ + break; + case 2: /* '#' */ + (*pc->decoder->filter_function)(0x26, pc->decoder); /* '&' */ + (*pc->decoder->filter_function)(0x23, pc->decoder); /* '#' */ + break; + case 3: /* '0'-'9' */ + (*pc->decoder->filter_function)(0x26, pc->decoder); /* '&' */ + (*pc->decoder->filter_function)(0x23, pc->decoder); /* '#' */ + + s = pc->cache; + r = 1; + n = pc->digit; + while (n > 0) { + r *= 10; + n--; + } + s %= r; + r /= 10; + while (r > 0) { + d = s/r; + s %= r; + r /= 10; + (*pc->decoder->filter_function)(mbfl_hexchar_table[d], pc->decoder); + } + + break; + case 4: /* 'x' */ + (*pc->decoder->filter_function)(0x26, pc->decoder); /* '&' */ + (*pc->decoder->filter_function)(0x23, pc->decoder); /* '#' */ + (*pc->decoder->filter_function)(0x78, pc->decoder); /* 'x' */ + break; + case 5: /* '0'-'9','a'-'f' */ + (*pc->decoder->filter_function)(0x26, pc->decoder); /* '&' */ + (*pc->decoder->filter_function)(0x23, pc->decoder); /* '#' */ + (*pc->decoder->filter_function)(0x78, pc->decoder); /* 'x' */ + + s = pc->cache; + r = 1; + n = pc->digit; + while (n > 0) { + r *= 16; + n--; + } + s %= r; + r /= 16; + while (r > 0) { + d = s/r; + s %= r; + r /= 16; + (*pc->decoder->filter_function)(mbfl_hexchar_table[d], pc->decoder); + } + break; + default: + break; + } + } + + pc->status = 0; + pc->cache = 0; + pc->digit = 0; + + return 0; +} + + +mbfl_string * +mbfl_html_numeric_entity( + mbfl_string *string, + mbfl_string *result, + int *convmap, + int mapsize, + int type) +{ + struct collector_htmlnumericentity_data pc; + mbfl_memory_device device; + mbfl_convert_filter *encoder; + int n; + unsigned char *p; + + if (string == NULL || result == NULL) { + return NULL; + } + mbfl_string_init(result); + result->no_language = string->no_language; + result->no_encoding = string->no_encoding; + mbfl_memory_device_init(&device, string->len, 0); + + /* output code filter */ + pc.decoder = mbfl_convert_filter_new( + mbfl_no_encoding_wchar, + string->no_encoding, + mbfl_memory_device_output, 0, &device); + /* wchar filter */ + if (type == 0) { /* decimal output */ + encoder = mbfl_convert_filter_new( + string->no_encoding, + mbfl_no_encoding_wchar, + collector_encode_htmlnumericentity, 0, &pc); + } else if (type == 2) { /* hex output */ + encoder = mbfl_convert_filter_new( + string->no_encoding, + mbfl_no_encoding_wchar, + collector_encode_hex_htmlnumericentity, 0, &pc); + } else { /* type == 1: decimal/hex input */ + encoder = mbfl_convert_filter_new( + string->no_encoding, + mbfl_no_encoding_wchar, + collector_decode_htmlnumericentity, + (int (*)(void*))mbfl_filt_decode_htmlnumericentity_flush, &pc); + } + if (pc.decoder == NULL || encoder == NULL) { + mbfl_convert_filter_delete(encoder); + mbfl_convert_filter_delete(pc.decoder); + return NULL; + } + pc.status = 0; + pc.cache = 0; + pc.digit = 0; + pc.convmap = convmap; + pc.mapsize = mapsize; + + /* feed data */ + p = string->val; + n = string->len; + if (p != NULL) { + while (n > 0) { + if ((*encoder->filter_function)(*p++, encoder) < 0) { + break; + } + n--; + } + } + mbfl_convert_filter_flush(encoder); + mbfl_convert_filter_flush(pc.decoder); + result = mbfl_memory_device_result(&device, result); + mbfl_convert_filter_delete(encoder); + mbfl_convert_filter_delete(pc.decoder); + + return result; +} + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter.h b/ext/mbstring/libmbfl/mbfl/mbfilter.h new file mode 100644 index 0000000..6108f93 --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfilter.h @@ -0,0 +1,290 @@ +/* charset=UTF-8 + * vim: encoding=utf-8: + * */ + +/* + * "streamable kanji code filter and converter" + * + * Copyright (c) 1998,1999,2000,2001 HappySize, Inc. All rights reserved. + * + * This software is released under the GNU Lesser General Public License. + * (Version 2.1, February 1999) + * Please read the following detail of the licence (in japanese). + * + * ◆使用許諾æ¡ä»¶â—† + * + * ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã¯æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã«ã‚ˆã£ã¦é–‹ç™ºã•れã¾ã—ãŸã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒ + * ピーサイズã¯ã€è‘—作権法ãŠã‚ˆã³ä¸‡å›½è‘—作権æ¡ç´„ã®å®šã‚ã«ã‚ˆã‚Šã€ã“ã®ã‚½ãƒ•トウェアã«é–¢ + * ã™ã‚‹ã™ã¹ã¦ã®æ¨©åˆ©ã‚’ç•™ä¿ã™ã‚‹æ¨©åˆ©ã‚’æŒã¡ã€ã“ã“ã«è¡Œä½¿ã—ã¾ã™ã€‚æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイ + * ズã¯ä»¥ä¸‹ã«æ˜Žè¨˜ã—ãŸæ¡ä»¶ã«å¾“ã£ã¦ã€ã“ã®ã‚½ãƒ•トウェアを使用ã™ã‚‹æŽ’ä»–çš„ã§ã¯ãªã„権利 + * ã‚’ãŠå®¢æ§˜ã«è¨±è«¾ã—ã¾ã™ã€‚何人ãŸã‚Šã¨ã‚‚ã€ä»¥ä¸‹ã®æ¡ä»¶ã«åã—ã¦ã“ã®ã‚½ãƒ•トウェアを使用 + * ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 + * + * ã“ã®ã‚½ãƒ•トウェアを「GNU Lesser General Public License (Version 2.1, February + * 1999)ã€ã«ç¤ºã•ã‚ŒãŸæ¡ä»¶ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚’ã€å…¨ã¦ã®æ–¹ã«è¨±è«¾ã—ã¾ã™ã€‚「GNU Lesser + * General Public Licenseã€ã‚’満ãŸã•ãªã„使用ã«ã¯ã€æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズã‹ã‚‰æ›¸é¢ + * ã«ã‚ˆã‚‹è¨±è«¾ã‚’å¾—ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ + * + * 「GNU Lesser General Public Licenseã€ã®å…¨æ–‡ã¯ä»¥ä¸‹ã®ã‚¦ã‚§ãƒ–ページã‹ã‚‰å–å¾—ã§ã + * ã¾ã™ã€‚「GNU Lesser General Public Licenseã€ã¨ã¯ã€ã“れã¾ã§Library General + * Public Licenseã¨å‘¼ã°ã‚Œã¦ã„ãŸã‚‚ã®ã§ã™ã€‚ + * http://www.gnu.org/ --- GNUウェブサイト + * http://www.gnu.org/copyleft/lesser.html --- ãƒ©ã‚¤ã‚»ãƒ³ã‚¹æ–‡é¢ + * ã“ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã®å†…容ãŒã‚ã‹ã‚‰ãªã„æ–¹ã€å®ˆã‚Œãªã„æ–¹ã«ã¯ä½¿ç”¨ã‚’許諾ã—ã¾ã›ã‚“。 + * + * ã—ã‹ã—ãªãŒã‚‰ã€å½“社ã¨GNUプãƒã‚¸ã‚§ã‚¯ãƒˆã¨ã®ç‰¹å®šã®é–¢ä¿‚を示唆ã¾ãŸã¯ä¸»å¼µã™ã‚‹ã‚‚ã®ã§ + * ã¯ã‚りã¾ã›ã‚“。 + * + * â—†ä¿è¨¼å†…容◆ + * + * ã“ã®ã‚½ãƒ•トウェアã¯ã€æœŸå¾…ã•れãŸå‹•作・機能・性能をæŒã¤ã“ã¨ã‚’目標ã¨ã—ã¦è¨è¨ˆã•れ + * 開発ã•れã¦ã„ã¾ã™ãŒã€ã“れをä¿è¨¼ã™ã‚‹ã‚‚ã®ã§ã¯ã‚りã¾ã›ã‚“。ã“ã®ã‚½ãƒ•トウェアã¯ã€Œã“ + * ã®ã¾ã¾ã€ã®çŠ¶æ…‹ã§æä¾›ã•れã¦ãŠã‚Šã€ãŸã¨ãˆã°ã“ã®ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã®æœ‰ç”¨æ€§ãªã„ã—特定㮠+ * 目的ã«åˆè‡´ã™ã‚‹ã“ã¨ã¨ã„ã£ãŸã€ä½•らã‹ã®ä¿è¨¼å†…容ãŒã€æ˜Žç¤ºã•れãŸã‚Šæš—é»™ã«ç¤ºã•れã¦ã„ + * ã‚‹å ´åˆã§ã‚ã£ã¦ã‚‚ã€ãã®ä¿è¨¼ã¯ç„¡åйã§ã™ã€‚ã“ã®ã‚½ãƒ•トウェアを使用ã—ãŸçµæžœãªã„ã—使 + * 用ã—ãªã‹ã£ãŸçµæžœã«ã‚ˆã£ã¦ã€ç›´æŽ¥ã‚ã‚‹ã„ã¯é–“接ã«å—ã‘ãŸèº«ä½“çš„ãªå‚·å®³ã€è²¡ç”£ä¸Šã®æå®³ + * ã€ãƒ‡ãƒ¼ã‚¿ã®æå¤±ã‚ã‚‹ã„ã¯ãã®ä»–ã®å…¨ã¦ã®æå®³ã«ã¤ã„ã¦ã¯ã€ãã®æå®³ã®å¯èƒ½æ€§ãŒä½¿ç”¨è€… + * ã€å½“社ã‚ã‚‹ã„ã¯ç¬¬ä¸‰è€…ã«ã‚ˆã£ã¦è¦å‘Šã•れã¦ã„ãŸå ´åˆã§ã‚ã£ã¦ã‚‚ã€å½“社ã¯ãã®æå®³ã®è³ + * 償ãŠã‚ˆã³è£œå¡«ã‚’行ã„ã¾ã›ã‚“。ã“ã®è¦å®šã¯ä»–ã®å…¨ã¦ã®ã€æ›¸é¢ä¸Šã¾ãŸã¯æ›¸é¢ã«ç„¡ã„ä¿è¨¼ãƒ» + * 契約・è¦å®šã«å„ªå…ˆã—ã¾ã™ã€‚ + * + * ◆著作権者ã®é€£çµ¡å…ˆãŠã‚ˆã³ä½¿ç”¨æ¡ä»¶ã«ã¤ã„ã¦ã®å•ã„åˆã‚ã›å…ˆâ—† + * + * 〒102-0073 + * æ±äº¬éƒ½åƒä»£ç”°åŒºä¹æ®µåŒ—1-13-5日本地所第一ビル4F + * æ ªå¼ä¼šç¤¾ãƒãƒƒãƒ”ーサイズ + * Phone: 03-3512-3655, Fax: 03-3512-3656 + * Email: sales@happysize.co.jp + * Web: http://happysize.com/ + * + * ◆著者◆ + * + * 金本 茂 <sgk@happysize.co.jp> + * + * ◆履æ´â—† + * + * 1998/11/10 sgk implementation in C++ + * 1999/4/25 sgk Cã§æ›¸ããªãŠã—。 + * 1999/4/26 sgk 入力フィルタを実装。漢å—コードを推定ã—ãªãŒã‚‰ãƒ•ã‚£ãƒ«ã‚¿ã‚’è¿½åŠ ã€‚ + * 1999/6/?? Unicodeサãƒãƒ¼ãƒˆã€‚ + * 1999/6/22 sgk ライセンスをLGPLã«å¤‰æ›´ã€‚ + * + */ + +/* + * Unicode support + * + * Portions copyright (c) 1999,2000,2001 by the PHP3 internationalization team. + * All rights reserved. + * + */ + +/* + * + * streamable kanji code filter and converter + * mbfl : Multi Byte FiLter Liblary + * + */ + +#ifndef MBFL_MBFILTER_H +#define MBFL_MBFILTER_H + +#include "mbfl_defs.h" +#include "mbfl_consts.h" +#include "mbfl_allocators.h" +#include "mbfl_encoding.h" +#include "mbfl_language.h" +#include "mbfl_string.h" +#include "mbfl_convert.h" +#include "mbfl_ident.h" + +/* + * version information + */ +#define MBFL_VERSION_MAJOR 1 +#define MBFL_VERSION_MINOR 3 +#define MBFL_VERSION_TEENY 2 + +/* + * convert filter + */ +#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE 0 +#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR 1 +#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG 2 +#define MBFL_OUTPUTFILTER_ILLEGAL_MODE_ENTITY 3 + +/* + * buffering converter + */ +typedef struct _mbfl_buffer_converter mbfl_buffer_converter; + +struct _mbfl_buffer_converter { + mbfl_convert_filter *filter1; + mbfl_convert_filter *filter2; + mbfl_memory_device device; + const mbfl_encoding *from; + const mbfl_encoding *to; +}; + +MBFLAPI extern mbfl_buffer_converter * mbfl_buffer_converter_new(enum mbfl_no_encoding from, enum mbfl_no_encoding to, int buf_initsz); +MBFLAPI extern mbfl_buffer_converter * mbfl_buffer_converter_new2(const mbfl_encoding *from, const mbfl_encoding *to, int buf_initsz); +MBFLAPI extern void mbfl_buffer_converter_delete(mbfl_buffer_converter *convd); +MBFLAPI extern void mbfl_buffer_converter_reset(mbfl_buffer_converter *convd); +MBFLAPI extern int mbfl_buffer_converter_illegal_mode(mbfl_buffer_converter *convd, int mode); +MBFLAPI extern int mbfl_buffer_converter_illegal_substchar(mbfl_buffer_converter *convd, int substchar); +MBFLAPI extern int mbfl_buffer_converter_strncat(mbfl_buffer_converter *convd, const unsigned char *p, int n); +MBFLAPI extern int mbfl_buffer_converter_feed(mbfl_buffer_converter *convd, mbfl_string *string); +MBFLAPI extern int mbfl_buffer_converter_feed2(mbfl_buffer_converter *convd, mbfl_string *string, int *loc); +MBFLAPI extern int mbfl_buffer_converter_flush(mbfl_buffer_converter *convd); +MBFLAPI extern mbfl_string * mbfl_buffer_converter_getbuffer(mbfl_buffer_converter *convd, mbfl_string *result); +MBFLAPI extern mbfl_string * mbfl_buffer_converter_result(mbfl_buffer_converter *convd, mbfl_string *result); +MBFLAPI extern mbfl_string * mbfl_buffer_converter_feed_result(mbfl_buffer_converter *convd, mbfl_string *string, mbfl_string *result); +MBFLAPI extern int mbfl_buffer_illegalchars(mbfl_buffer_converter *convd); + +/* + * encoding detector + */ +typedef struct _mbfl_encoding_detector mbfl_encoding_detector; + +struct _mbfl_encoding_detector { + mbfl_identify_filter **filter_list; + int filter_list_size; + int strict; +}; + +MBFLAPI extern mbfl_encoding_detector * mbfl_encoding_detector_new(enum mbfl_no_encoding *elist, int elistsz, int strict); +MBFLAPI extern mbfl_encoding_detector * mbfl_encoding_detector_new2(const mbfl_encoding **elist, int elistsz, int strict); +MBFLAPI extern void mbfl_encoding_detector_delete(mbfl_encoding_detector *identd); +MBFLAPI extern int mbfl_encoding_detector_feed(mbfl_encoding_detector *identd, mbfl_string *string); +MBFLAPI extern enum mbfl_no_encoding mbfl_encoding_detector_judge(mbfl_encoding_detector *identd); +MBFLAPI extern const mbfl_encoding *mbfl_encoding_detector_judge2(mbfl_encoding_detector *identd); + + +/* + * encoding converter + */ +MBFLAPI extern mbfl_string * +mbfl_convert_encoding(mbfl_string *string, mbfl_string *result, enum mbfl_no_encoding toenc); + + +/* + * identify encoding + */ +MBFLAPI extern const mbfl_encoding * +mbfl_identify_encoding(mbfl_string *string, enum mbfl_no_encoding *elist, int elistsz, int strict); + +MBFLAPI extern const mbfl_encoding * +mbfl_identify_encoding2(mbfl_string *string, const mbfl_encoding **elist, int elistsz, int strict); +/* + * strlen + */ +MBFLAPI extern int +mbfl_strlen(mbfl_string *string); + +/* + * oddlen + */ +MBFLAPI extern int +mbfl_oddlen(mbfl_string *string); + +/* + * strpos + */ +MBFLAPI extern int +mbfl_strpos(mbfl_string *haystack, mbfl_string *needle, int offset, int reverse); + + +/* + * substr_count + */ +MBFLAPI extern int +mbfl_substr_count(mbfl_string *haystack, mbfl_string *needle); + +/* + * substr + */ +MBFLAPI extern mbfl_string * +mbfl_substr(mbfl_string *string, mbfl_string *result, int from, int length); + +/* + * strcut + */ +MBFLAPI extern mbfl_string * +mbfl_strcut(mbfl_string *string, mbfl_string *result, int from, int length); + +/* + * strwidth + */ +MBFLAPI extern int +mbfl_strwidth(mbfl_string *string); + +/* + * strimwidth + */ +MBFLAPI extern mbfl_string * +mbfl_strimwidth(mbfl_string *string, mbfl_string *marker, mbfl_string *result, int from, int width); + +/* + * MIME header encode + */ +struct mime_header_encoder_data; /* forward declaration */ + +MBFLAPI extern struct mime_header_encoder_data * +mime_header_encoder_new( + enum mbfl_no_encoding incode, + enum mbfl_no_encoding outcode, + enum mbfl_no_encoding encoding); + +MBFLAPI extern void +mime_header_encoder_delete(struct mime_header_encoder_data *pe); + +MBFLAPI extern int +mime_header_encoder_feed(int c, struct mime_header_encoder_data *pe); + +MBFLAPI extern mbfl_string * +mime_header_encoder_result(struct mime_header_encoder_data *pe, mbfl_string *result); + +MBFLAPI extern mbfl_string * +mbfl_mime_header_encode( + mbfl_string *string, mbfl_string *result, + enum mbfl_no_encoding outcode, + enum mbfl_no_encoding encoding, + const char *linefeed, + int indent); + +/* + * MIME header decode + */ +struct mime_header_decoder_data; /* forward declaration */ + +MBFLAPI extern struct mime_header_decoder_data * +mime_header_decoder_new(enum mbfl_no_encoding outcode); + +MBFLAPI extern void +mime_header_decoder_delete(struct mime_header_decoder_data *pd); + +MBFLAPI extern int +mime_header_decoder_feed(int c, struct mime_header_decoder_data *pd); + +MBFLAPI extern mbfl_string * +mime_header_decoder_result(struct mime_header_decoder_data *pd, mbfl_string *result); + +MBFLAPI extern mbfl_string * +mbfl_mime_header_decode( + mbfl_string *string, + mbfl_string *result, + enum mbfl_no_encoding outcode); + +/* + * convert HTML numeric entity + */ +MBFLAPI extern mbfl_string * +mbfl_html_numeric_entity(mbfl_string *string, mbfl_string *result, int *convmap, int mapsize, int type); + +/* + * convert of harfwidth and fullwidth for japanese + */ +MBFLAPI extern mbfl_string * +mbfl_ja_jp_hantozen(mbfl_string *string, mbfl_string *result, int mode); + +#endif /* MBFL_MBFILTER_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c b/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c new file mode 100644 index 0000000..9b19479 --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c @@ -0,0 +1,50 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#include "mbfilter.h" + +static const char *mbfl_encoding_8bit_aliases[] = {"binary", NULL}; + +const mbfl_encoding mbfl_encoding_8bit = { + mbfl_no_encoding_8bit, + "8bit", + "8bit", + (const char *(*)[])&mbfl_encoding_8bit_aliases, + NULL, + MBFL_ENCTYPE_SBCS +}; diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h b/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h new file mode 100644 index 0000000..a87c564 --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h @@ -0,0 +1,39 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifndef MBFL_MBFILTER_8BIT_H +#define MBFL_MBFILTER_8BIT_H + +#include "mbfl_defs.h" +#include "mbfilter.h" + +MBFLAPI extern const mbfl_encoding mbfl_encoding_8bit; + +#endif /* MBFL_MBFILTER_8BIT_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_pass.c b/ext/mbstring/libmbfl/mbfl/mbfilter_pass.c new file mode 100644 index 0000000..b6da879 --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfilter_pass.c @@ -0,0 +1,65 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#include "mbfilter.h" +#include "mbfilter_pass.h" + +static const char *mbfl_encoding_pass_aliases[] = {"none", NULL}; + +const mbfl_encoding mbfl_encoding_pass = { + mbfl_no_encoding_pass, + "pass", + NULL, + (const char *(*)[])&mbfl_encoding_pass_aliases, + NULL, + 0 +}; + +const struct mbfl_convert_vtbl vtbl_pass = { + mbfl_no_encoding_pass, + mbfl_no_encoding_pass, + mbfl_filt_conv_common_ctor, + mbfl_filt_conv_common_dtor, + mbfl_filt_conv_pass, + mbfl_filt_conv_common_flush +}; + +int mbfl_filt_conv_pass(int c, mbfl_convert_filter *filter) +{ + return (*filter->output_function)(c, filter->data); +} + diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_pass.h b/ext/mbstring/libmbfl/mbfl/mbfilter_pass.h new file mode 100644 index 0000000..49d169c --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfilter_pass.h @@ -0,0 +1,41 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by moriyoshi koizumi <moriyoshi@php.net> on 4 dec 2002. + * + */ + +#ifndef MBFL_MBFILTER_PASS_H +#define MBFL_MBFILTER_PASS_H + +#include "mbfl_defs.h" +#include "mbfilter.h" + +MBFLAPI extern const mbfl_encoding mbfl_encoding_pass; +MBFLAPI extern const struct mbfl_convert_vtbl vtbl_pass; + +MBFLAPI extern int mbfl_filt_conv_pass(int c, mbfl_convert_filter *filter); + +#endif /* MBFL_MBFILTER_PASS_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_wchar.c b/ext/mbstring/libmbfl/mbfl/mbfilter_wchar.c new file mode 100644 index 0000000..50f7629 --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfilter_wchar.c @@ -0,0 +1,48 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#include "mbfilter.h" + +const mbfl_encoding mbfl_encoding_wchar = { + mbfl_no_encoding_wchar, + "wchar", + NULL, + NULL, + NULL, + MBFL_ENCTYPE_WCS4BE +}; diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_wchar.h b/ext/mbstring/libmbfl/mbfl/mbfilter_wchar.h new file mode 100644 index 0000000..9e9396a --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfilter_wchar.h @@ -0,0 +1,39 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifndef MBFL_MBFILTER_WCHAR_H +#define MBFL_MBFILTER_WCHAR_H + +#include "mbfl_defs.h" +#include "mbfilter.h" + +MBFLAPI extern const mbfl_encoding mbfl_encoding_wchar; + +#endif /* MBFL_MBFILTER_WCHAR_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_allocators.c b/ext/mbstring/libmbfl/mbfl/mbfl_allocators.c new file mode 100644 index 0000000..be9d345 --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfl_allocators.c @@ -0,0 +1,93 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDLIB_H +#include <stdlib.h> +#endif + +#ifdef HAVE_MEMORY_H +#include <memory.h> +#endif + +#ifdef HAVE_STRING_H +#include <string.h> +#endif + +#ifdef HAVE_STRINGS_H +#include <strings.h> +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#include "mbfl_allocators.h" + +static void *__mbfl__malloc(unsigned int); +static void *__mbfl__realloc(void *, unsigned int); +static void *__mbfl__calloc(unsigned int, unsigned int); +static void __mbfl__free(void *); + +static mbfl_allocators default_allocators = { + __mbfl__malloc, + __mbfl__realloc, + __mbfl__calloc, + __mbfl__free, + __mbfl__malloc, + __mbfl__realloc, + __mbfl__free +}; + +mbfl_allocators *__mbfl_allocators = &default_allocators; + +static void *__mbfl__malloc(unsigned int sz) +{ + return malloc(sz); +} + +static void *__mbfl__realloc(void *ptr, unsigned int sz) +{ + return realloc(ptr, sz); +} + +static void *__mbfl__calloc(unsigned int nelems, unsigned int szelem) +{ + return calloc(nelems, szelem); +} + +static void __mbfl__free(void *ptr) +{ + free(ptr); +} + diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_allocators.h b/ext/mbstring/libmbfl/mbfl/mbfl_allocators.h new file mode 100644 index 0000000..a1539f0 --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfl_allocators.h @@ -0,0 +1,56 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.h + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.h is included in this package . + * + */ + +#ifndef MBFL_ALLOCATORS_H +#define MBFL_ALLOCATORS_H + +#include "mbfl_defs.h" + +typedef struct _mbfl_allocators { + void *(*malloc)(unsigned int); + void *(*realloc)(void *, unsigned int); + void *(*calloc)(unsigned int, unsigned int); + void (*free)(void *); + void *(*pmalloc)(unsigned int); + void *(*prealloc)(void *, unsigned int); + void (*pfree)(void *); +} mbfl_allocators; + +MBFLAPI extern mbfl_allocators *__mbfl_allocators; + +#define mbfl_malloc (__mbfl_allocators->malloc) +#define mbfl_realloc (__mbfl_allocators->realloc) +#define mbfl_calloc (__mbfl_allocators->calloc) +#define mbfl_free (__mbfl_allocators->free) +#define mbfl_pmalloc (__mbfl_allocators->pmalloc) +#define mbfl_prealloc (__mbfl_allocators->preallloc) +#define mbfl_pfree (__mbfl_allocators->pfree) + +#endif /* MBFL_ALLOCATORS_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_consts.h b/ext/mbstring/libmbfl/mbfl/mbfl_consts.h new file mode 100644 index 0000000..6a630c8 --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfl_consts.h @@ -0,0 +1,94 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.h + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.h is included in this package . + * + */ + +#ifndef MBFL_CONSTS_H +#define MBFL_CONSTS_H + +#define MBFL_ENCTYPE_SBCS 0x00000001 +#define MBFL_ENCTYPE_MBCS 0x00000002 +#define MBFL_ENCTYPE_WCS2BE 0x00000010 +#define MBFL_ENCTYPE_WCS2LE 0x00000020 +#define MBFL_ENCTYPE_MWC2BE 0x00000040 +#define MBFL_ENCTYPE_MWC2LE 0x00000080 +#define MBFL_ENCTYPE_WCS4BE 0x00000100 +#define MBFL_ENCTYPE_WCS4LE 0x00000200 +#define MBFL_ENCTYPE_MWC4BE 0x00000400 +#define MBFL_ENCTYPE_MWC4LE 0x00000800 +#define MBFL_ENCTYPE_SHFTCODE 0x00001000 +#define MBFL_ENCTYPE_ENC_STRM 0x00002000 +#define MBFL_ENCTYPE_GL_UNSAFE 0x00004000 + +/* wchar plane, special charactor */ +#define MBFL_WCSPLANE_MASK 0xffff +#define MBFL_WCSPLANE_UCS2MAX 0x00010000 +#define MBFL_WCSPLANE_UTF32MAX 0x00110000 +#define MBFL_WCSPLANE_SUPMIN 0x00010000 +#define MBFL_WCSPLANE_SUPMAX 0x00200000 +#define MBFL_WCSPLANE_JIS0213 0x70e00000 /* JIS HEX : 2121h - 7E7Eh */ +#define MBFL_WCSPLANE_JIS0208 0x70e10000 /* JIS HEX : 2121h - 7E7Eh */ +#define MBFL_WCSPLANE_JIS0212 0x70e20000 /* JIS HEX : 2121h - 7E7Eh */ +#define MBFL_WCSPLANE_WINCP932 0x70e30000 /* JIS HEX : 2121h - 9898h */ +#define MBFL_WCSPLANE_8859_1 0x70e40000 /* 00h - FFh */ +#define MBFL_WCSPLANE_8859_2 0x70e50000 /* 00h - FFh */ +#define MBFL_WCSPLANE_8859_3 0x70e60000 /* 00h - FFh */ +#define MBFL_WCSPLANE_8859_4 0x70e70000 /* 00h - FFh */ +#define MBFL_WCSPLANE_8859_5 0x70e80000 /* 00h - FFh */ +#define MBFL_WCSPLANE_8859_6 0x70e90000 /* 00h - FFh */ +#define MBFL_WCSPLANE_8859_7 0x70ea0000 /* 00h - FFh */ +#define MBFL_WCSPLANE_8859_8 0x70eb0000 /* 00h - FFh */ +#define MBFL_WCSPLANE_8859_9 0x70ec0000 /* 00h - FFh */ +#define MBFL_WCSPLANE_8859_10 0x70ed0000 /* 00h - FFh */ +#define MBFL_WCSPLANE_8859_13 0x70ee0000 /* 00h - FFh */ +#define MBFL_WCSPLANE_8859_14 0x70ef0000 /* 00h - FFh */ +#define MBFL_WCSPLANE_8859_15 0x70f00000 /* 00h - FFh */ +#define MBFL_WCSPLANE_KSC5601 0x70f10000 /* 2121h - 7E7Eh */ +#define MBFL_WCSPLANE_GB2312 0x70f20000 /* 2121h - 7E7Eh */ +#define MBFL_WCSPLANE_WINCP936 0x70f30000 /* 2121h - 9898h */ +#define MBFL_WCSPLANE_BIG5 0x70f40000 /* 2121h - 9898h */ +#define MBFL_WCSPLANE_CNS11643 0x70f50000 /* 2121h - 9898h */ +#define MBFL_WCSPLANE_UHC 0x70f60000 /* 8141h - fefeh */ +#define MBFL_WCSPLANE_CP1251 0x70f70000 +#define MBFL_WCSPLANE_CP866 0x70f80000 +#define MBFL_WCSPLANE_KOI8R 0x70f90000 +#define MBFL_WCSPLANE_8859_16 0x70fa0000 /* 00h - FFh */ +#define MBFL_WCSPLANE_ARMSCII8 0x70fb0000 +#define MBFL_WCSPLANE_KOI8U 0x70fc0000 +#define MBFL_WCSPLANE_CP1254 0x70fd0000 /* 00h - FFh */ +#define MBFL_WCSPLANE_CP850 0x70fe0000 /* 00h - FFh */ +#define MBFL_WCSPLANE_GB18030 0x70ff0000 /* a1a1h-e3329a35h */ +#define MBFL_WCSGROUP_MASK 0xffffff +#define MBFL_WCSGROUP_UCS4MAX 0x70000000 +#define MBFL_WCSGROUP_WCHARMAX 0x78000000 +#define MBFL_WCSGROUP_THROUGH 0x78000000 /* 000000h - FFFFFFh */ + +#define MBFL_QPRINT_STS_MIME_HEADER 0x1000000 +#define MBFL_BASE64_STS_MIME_HEADER 0x1000000 + +#endif /* MBFL_CONSTS_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c new file mode 100644 index 0000000..ae8deb2 --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c @@ -0,0 +1,627 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#include "mbfl_encoding.h" +#include "mbfl_allocators.h" +#include "mbfl_filter_output.h" +#include "mbfilter_pass.h" +#include "mbfilter_8bit.h" +#include "mbfilter_wchar.h" + +#include "filters/mbfilter_euc_cn.h" +#include "filters/mbfilter_hz.h" +#include "filters/mbfilter_euc_tw.h" +#include "filters/mbfilter_big5.h" +#include "filters/mbfilter_uhc.h" +#include "filters/mbfilter_euc_kr.h" +#include "filters/mbfilter_iso2022_kr.h" +#include "filters/mbfilter_sjis.h" +#include "filters/mbfilter_sjis_open.h" +#include "filters/mbfilter_sjis_2004.h" +#include "filters/mbfilter_sjis_mobile.h" +#include "filters/mbfilter_sjis_mac.h" +#include "filters/mbfilter_cp51932.h" +#include "filters/mbfilter_jis.h" +#include "filters/mbfilter_iso2022_jp_ms.h" +#include "filters/mbfilter_iso2022jp_2004.h" +#include "filters/mbfilter_iso2022jp_mobile.h" +#include "filters/mbfilter_euc_jp.h" +#include "filters/mbfilter_euc_jp_2004.h" +#include "filters/mbfilter_euc_jp_win.h" +#include "filters/mbfilter_gb18030.h" +#include "filters/mbfilter_ascii.h" +#include "filters/mbfilter_koi8r.h" +#include "filters/mbfilter_koi8u.h" +#include "filters/mbfilter_cp866.h" +#include "filters/mbfilter_cp932.h" +#include "filters/mbfilter_cp936.h" +#include "filters/mbfilter_cp1251.h" +#include "filters/mbfilter_cp1252.h" +#include "filters/mbfilter_cp1254.h" +#include "filters/mbfilter_cp5022x.h" +#include "filters/mbfilter_iso8859_1.h" +#include "filters/mbfilter_iso8859_2.h" +#include "filters/mbfilter_iso8859_3.h" +#include "filters/mbfilter_iso8859_4.h" +#include "filters/mbfilter_iso8859_5.h" +#include "filters/mbfilter_iso8859_6.h" +#include "filters/mbfilter_iso8859_7.h" +#include "filters/mbfilter_iso8859_8.h" +#include "filters/mbfilter_iso8859_9.h" +#include "filters/mbfilter_iso8859_10.h" +#include "filters/mbfilter_iso8859_13.h" +#include "filters/mbfilter_iso8859_14.h" +#include "filters/mbfilter_iso8859_15.h" +#include "filters/mbfilter_base64.h" +#include "filters/mbfilter_qprint.h" +#include "filters/mbfilter_uuencode.h" +#include "filters/mbfilter_7bit.h" +#include "filters/mbfilter_utf7.h" +#include "filters/mbfilter_utf7imap.h" +#include "filters/mbfilter_utf8.h" +#include "filters/mbfilter_utf8_mobile.h" +#include "filters/mbfilter_utf16.h" +#include "filters/mbfilter_utf32.h" +#include "filters/mbfilter_byte2.h" +#include "filters/mbfilter_byte4.h" +#include "filters/mbfilter_ucs4.h" +#include "filters/mbfilter_ucs2.h" +#include "filters/mbfilter_htmlent.h" +#include "filters/mbfilter_armscii8.h" +#include "filters/mbfilter_cp850.h" + +/* hex character table "0123456789ABCDEF" */ +static char mbfl_hexchar_table[] = { + 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46 +}; + +const struct mbfl_convert_vtbl *mbfl_convert_filter_list[] = { + &vtbl_utf8_wchar, + &vtbl_wchar_utf8, + &vtbl_eucjp_wchar, + &vtbl_wchar_eucjp, + &vtbl_sjis_wchar, + &vtbl_wchar_sjis, + &vtbl_sjis_open_wchar, + &vtbl_wchar_sjis_open, + &vtbl_sjis2004_wchar, + &vtbl_wchar_sjis2004, + &vtbl_cp51932_wchar, + &vtbl_wchar_cp51932, + &vtbl_jis_wchar, + &vtbl_wchar_jis, + &vtbl_jis_ms_wchar, + &vtbl_wchar_jis_ms, + &vtbl_2022jp_wchar, + &vtbl_wchar_2022jp, + &vtbl_2022jpms_wchar, + &vtbl_wchar_2022jpms, + &vtbl_2022jp_2004_wchar, + &vtbl_wchar_2022jp_2004, + &vtbl_2022jp_kddi_wchar, + &vtbl_wchar_2022jp_kddi, + &vtbl_eucjpwin_wchar, + &vtbl_wchar_eucjpwin, + &vtbl_eucjp2004_wchar, + &vtbl_wchar_eucjp2004, + &vtbl_cp932_wchar, + &vtbl_wchar_cp932, + &vtbl_sjis_docomo_wchar, + &vtbl_wchar_sjis_docomo, + &vtbl_sjis_kddi_wchar, + &vtbl_wchar_sjis_kddi, + &vtbl_sjis_sb_wchar, + &vtbl_wchar_sjis_sb, + &vtbl_sjis_mac_wchar, + &vtbl_wchar_sjis_mac, + &vtbl_utf8_docomo_wchar, + &vtbl_wchar_utf8_docomo, + &vtbl_utf8_kddi_a_wchar, + &vtbl_wchar_utf8_kddi_a, + &vtbl_utf8_kddi_b_wchar, + &vtbl_wchar_utf8_kddi_b, + &vtbl_utf8_sb_wchar, + &vtbl_wchar_utf8_sb, + &vtbl_euccn_wchar, + &vtbl_wchar_euccn, + &vtbl_cp936_wchar, + &vtbl_wchar_cp936, + &vtbl_gb18030_wchar, + &vtbl_wchar_gb18030, + &vtbl_hz_wchar, + &vtbl_wchar_hz, + &vtbl_euctw_wchar, + &vtbl_wchar_euctw, + &vtbl_big5_wchar, + &vtbl_wchar_big5, + &vtbl_cp950_wchar, + &vtbl_wchar_cp950, + &vtbl_euckr_wchar, + &vtbl_wchar_euckr, + &vtbl_uhc_wchar, + &vtbl_wchar_uhc, + &vtbl_2022kr_wchar, + &vtbl_wchar_2022kr, + &vtbl_cp1251_wchar, + &vtbl_wchar_cp1251, + &vtbl_cp866_wchar, + &vtbl_wchar_cp866, + &vtbl_koi8r_wchar, + &vtbl_wchar_koi8r, + &vtbl_koi8u_wchar, + &vtbl_wchar_koi8u, + &vtbl_cp1252_wchar, + &vtbl_wchar_cp1252, + &vtbl_cp1254_wchar, + &vtbl_wchar_cp1254, + &vtbl_cp50220_wchar, + &vtbl_wchar_cp50220, + &vtbl_cp50220raw_wchar, + &vtbl_wchar_cp50220raw, + &vtbl_cp50221_wchar, + &vtbl_wchar_cp50221, + &vtbl_cp50222_wchar, + &vtbl_wchar_cp50222, + &vtbl_ascii_wchar, + &vtbl_wchar_ascii, + &vtbl_8859_1_wchar, + &vtbl_wchar_8859_1, + &vtbl_8859_2_wchar, + &vtbl_wchar_8859_2, + &vtbl_8859_3_wchar, + &vtbl_wchar_8859_3, + &vtbl_8859_4_wchar, + &vtbl_wchar_8859_4, + &vtbl_8859_5_wchar, + &vtbl_wchar_8859_5, + &vtbl_8859_6_wchar, + &vtbl_wchar_8859_6, + &vtbl_8859_7_wchar, + &vtbl_wchar_8859_7, + &vtbl_8859_8_wchar, + &vtbl_wchar_8859_8, + &vtbl_8859_9_wchar, + &vtbl_wchar_8859_9, + &vtbl_8859_10_wchar, + &vtbl_wchar_8859_10, + &vtbl_8859_13_wchar, + &vtbl_wchar_8859_13, + &vtbl_8859_14_wchar, + &vtbl_wchar_8859_14, + &vtbl_8859_15_wchar, + &vtbl_wchar_8859_15, + &vtbl_8bit_b64, + &vtbl_b64_8bit, + &vtbl_uuencode_8bit, + &vtbl_wchar_html, + &vtbl_html_wchar, + &vtbl_8bit_qprint, + &vtbl_qprint_8bit, + &vtbl_8bit_7bit, + &vtbl_7bit_8bit, + &vtbl_utf7_wchar, + &vtbl_wchar_utf7, + &vtbl_utf7imap_wchar, + &vtbl_wchar_utf7imap, + &vtbl_utf16_wchar, + &vtbl_wchar_utf16, + &vtbl_utf16be_wchar, + &vtbl_wchar_utf16be, + &vtbl_utf16le_wchar, + &vtbl_wchar_utf16le, + &vtbl_utf32_wchar, + &vtbl_wchar_utf32, + &vtbl_utf32be_wchar, + &vtbl_wchar_utf32be, + &vtbl_utf32le_wchar, + &vtbl_wchar_utf32le, + &vtbl_ucs4_wchar, + &vtbl_wchar_ucs4, + &vtbl_ucs4be_wchar, + &vtbl_wchar_ucs4be, + &vtbl_ucs4le_wchar, + &vtbl_wchar_ucs4le, + &vtbl_ucs2_wchar, + &vtbl_wchar_ucs2, + &vtbl_ucs2be_wchar, + &vtbl_wchar_ucs2be, + &vtbl_ucs2le_wchar, + &vtbl_wchar_ucs2le, + &vtbl_byte4be_wchar, + &vtbl_wchar_byte4be, + &vtbl_byte4le_wchar, + &vtbl_wchar_byte4le, + &vtbl_byte2be_wchar, + &vtbl_wchar_byte2be, + &vtbl_byte2le_wchar, + &vtbl_wchar_byte2le, + &vtbl_armscii8_wchar, + &vtbl_wchar_armscii8, + &vtbl_cp850_wchar, + &vtbl_wchar_cp850, + &vtbl_pass, + NULL +}; + +static int +mbfl_convert_filter_common_init( + mbfl_convert_filter *filter, + enum mbfl_no_encoding from, + enum mbfl_no_encoding to, + const struct mbfl_convert_vtbl *vtbl, + int (*output_function)(int, void* ), + int (*flush_function)(void*), + void* data) +{ + /* encoding structure */ + if ((filter->from = mbfl_no2encoding(from)) == NULL) { + return 1; + } + + if ((filter->to = mbfl_no2encoding(to)) == NULL) { + return 1; + } + + if (output_function != NULL) { + filter->output_function = output_function; + } else { + filter->output_function = mbfl_filter_output_null; + } + + filter->flush_function = flush_function; + filter->data = data; + filter->illegal_mode = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR; + filter->illegal_substchar = 0x3f; /* '?' */ + filter->num_illegalchar = 0; + filter->filter_ctor = vtbl->filter_ctor; + filter->filter_dtor = vtbl->filter_dtor; + filter->filter_function = vtbl->filter_function; + filter->filter_flush = vtbl->filter_flush; + filter->filter_copy = vtbl->filter_copy; + + (*filter->filter_ctor)(filter); + + return 0; +} + + +mbfl_convert_filter * +mbfl_convert_filter_new( + enum mbfl_no_encoding from, + enum mbfl_no_encoding to, + int (*output_function)(int, void* ), + int (*flush_function)(void*), + void* data) +{ + mbfl_convert_filter * filter; + const struct mbfl_convert_vtbl *vtbl; + + vtbl = mbfl_convert_filter_get_vtbl(from, to); + + if (vtbl == NULL) { + vtbl = &vtbl_pass; + } + + /* allocate */ + filter = (mbfl_convert_filter *)mbfl_malloc(sizeof(mbfl_convert_filter)); + if (filter == NULL) { + return NULL; + } + + if (mbfl_convert_filter_common_init(filter, from, to, vtbl, + output_function, flush_function, data)) { + mbfl_free(filter); + return NULL; + } + + return filter; +} + +mbfl_convert_filter * +mbfl_convert_filter_new2( + const struct mbfl_convert_vtbl *vtbl, + int (*output_function)(int, void* ), + int (*flush_function)(void*), + void* data) +{ + mbfl_convert_filter * filter; + + if (vtbl == NULL) { + vtbl = &vtbl_pass; + } + + /* allocate */ + filter = (mbfl_convert_filter *)mbfl_malloc(sizeof(mbfl_convert_filter)); + if (filter == NULL) { + return NULL; + } + + if (mbfl_convert_filter_common_init(filter, vtbl->from, vtbl->to, vtbl, + output_function, flush_function, data)) { + mbfl_free(filter); + return NULL; + } + + return filter; +} + +void +mbfl_convert_filter_delete(mbfl_convert_filter *filter) +{ + if (filter) { + (*filter->filter_dtor)(filter); + mbfl_free((void*)filter); + } +} + +int +mbfl_convert_filter_feed(int c, mbfl_convert_filter *filter) +{ + return (*filter->filter_function)(c, filter); +} + +int +mbfl_convert_filter_flush(mbfl_convert_filter *filter) +{ + (*filter->filter_flush)(filter); + return (filter->flush_function ? (*filter->flush_function)(filter->data) : 0); +} + +void mbfl_convert_filter_reset(mbfl_convert_filter *filter, + enum mbfl_no_encoding from, enum mbfl_no_encoding to) +{ + const struct mbfl_convert_vtbl *vtbl; + + /* destruct old filter */ + (*filter->filter_dtor)(filter); + + vtbl = mbfl_convert_filter_get_vtbl(from, to); + + if (vtbl == NULL) { + vtbl = &vtbl_pass; + } + + mbfl_convert_filter_common_init(filter, from, to, vtbl, + filter->output_function, filter->flush_function, filter->data); +} + +void +mbfl_convert_filter_copy( + mbfl_convert_filter *src, + mbfl_convert_filter *dest) +{ + if (src->filter_copy != NULL) { + src->filter_copy(src, dest); + return; + } + + *dest = *src; +} + +int mbfl_convert_filter_devcat(mbfl_convert_filter *filter, mbfl_memory_device *src) +{ + int n; + unsigned char *p; + + p = src->buffer; + n = src->pos; + while (n > 0) { + if ((*filter->filter_function)(*p++, filter) < 0) { + return -1; + } + n--; + } + + return n; +} + +int mbfl_convert_filter_strcat(mbfl_convert_filter *filter, const unsigned char *p) +{ + int c; + + while ((c = *p++) != '\0') { + if ((*filter->filter_function)(c, filter) < 0) { + return -1; + } + } + + return 0; +} + +/* illegal character output function for conv-filter */ +int +mbfl_filt_conv_illegal_output(int c, mbfl_convert_filter *filter) +{ + int mode_backup, ret, n, m, r; + + ret = 0; + mode_backup = filter->illegal_mode; + filter->illegal_mode = MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE; + switch (mode_backup) { + case MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR: + ret = (*filter->filter_function)(filter->illegal_substchar, filter); + break; + case MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG: + if (c >= 0) { + if (c < MBFL_WCSGROUP_UCS4MAX) { /* unicode */ + ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"U+"); + } else { + if (c < MBFL_WCSGROUP_WCHARMAX) { + m = c & ~MBFL_WCSPLANE_MASK; + switch (m) { + case MBFL_WCSPLANE_JIS0208: + ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"JIS+"); + break; + case MBFL_WCSPLANE_JIS0212: + ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"JIS2+"); + break; + case MBFL_WCSPLANE_JIS0213: + ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"JIS3+"); + break; + case MBFL_WCSPLANE_WINCP932: + ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"W932+"); + break; + case MBFL_WCSPLANE_GB18030: + ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"GB+"); + break; + case MBFL_WCSPLANE_8859_1: + ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"I8859_1+"); + break; + default: + ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"?+"); + break; + } + c &= MBFL_WCSPLANE_MASK; + } else { + ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"BAD+"); + c &= MBFL_WCSGROUP_MASK; + } + } + if (ret >= 0) { + m = 0; + r = 28; + while (r >= 0) { + n = (c >> r) & 0xf; + if (n || m) { + m = 1; + ret = (*filter->filter_function)(mbfl_hexchar_table[n], filter); + if (ret < 0) { + break; + } + } + r -= 4; + } + if (m == 0 && ret >= 0) { + ret = (*filter->filter_function)(mbfl_hexchar_table[0], filter); + } + } + } + break; + case MBFL_OUTPUTFILTER_ILLEGAL_MODE_ENTITY: + if (c >= 0) { + if (c < MBFL_WCSGROUP_UCS4MAX) { /* unicode */ + ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)"&#x"); + if (ret < 0) + break; + + m = 0; + r = 28; + while (r >= 0) { + n = (c >> r) & 0xf; + if (n || m) { + m = 1; + ret = (*filter->filter_function)(mbfl_hexchar_table[n], filter); + if (ret < 0) { + break; + } + } + r -= 4; + } + if (ret < 0) { + break; + } + if (m == 0) { + ret = (*filter->filter_function)(mbfl_hexchar_table[0], filter); + } + ret = mbfl_convert_filter_strcat(filter, (const unsigned char *)";"); + } else { + ret = (*filter->filter_function)(filter->illegal_substchar, filter); + } + } + break; + default: + break; + } + filter->illegal_mode = mode_backup; + filter->num_illegalchar++; + + return ret; +} + +const struct mbfl_convert_vtbl * mbfl_convert_filter_get_vtbl(enum mbfl_no_encoding from, enum mbfl_no_encoding to) +{ + const struct mbfl_convert_vtbl *vtbl; + int i; + + if (to == mbfl_no_encoding_base64 || + to == mbfl_no_encoding_qprint || + to == mbfl_no_encoding_7bit) { + from = mbfl_no_encoding_8bit; + } else if (from == mbfl_no_encoding_base64 || + from == mbfl_no_encoding_qprint || + from == mbfl_no_encoding_uuencode) { + to = mbfl_no_encoding_8bit; + } + + i = 0; + while ((vtbl = mbfl_convert_filter_list[i++]) != NULL){ + if (vtbl->from == from && vtbl->to == to) { + return vtbl; + } + } + + return NULL; +} + +/* + * commonly used constructor and destructor + */ +void mbfl_filt_conv_common_ctor(mbfl_convert_filter *filter) +{ + filter->status = 0; + filter->cache = 0; +} + +int mbfl_filt_conv_common_flush(mbfl_convert_filter *filter) +{ + filter->status = 0; + filter->cache = 0; + + if (filter->flush_function != NULL) { + (*filter->flush_function)(filter->data); + } + return 0; +} + +void mbfl_filt_conv_common_dtor(mbfl_convert_filter *filter) +{ + filter->status = 0; + filter->cache = 0; +} + + diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_convert.h b/ext/mbstring/libmbfl/mbfl/mbfl_convert.h new file mode 100644 index 0000000..8b5ba5b --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfl_convert.h @@ -0,0 +1,97 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.h + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.h is included in this package . + * + */ + +#ifndef MBFL_CONVERT_H +#define MBFL_CONVERT_H + +#include "mbfl_defs.h" +#include "mbfl_encoding.h" +#include "mbfl_memory_device.h" + +typedef struct _mbfl_convert_filter mbfl_convert_filter; + +struct _mbfl_convert_filter { + void (*filter_ctor)(mbfl_convert_filter *filter); + void (*filter_dtor)(mbfl_convert_filter *filter); + void (*filter_copy)(mbfl_convert_filter *src, mbfl_convert_filter *dest); + int (*filter_function)(int c, mbfl_convert_filter *filter); + int (*filter_flush)(mbfl_convert_filter *filter); + int (*output_function)(int c, void *data); + int (*flush_function)(void *data); + void *data; + int status; + int cache; + const mbfl_encoding *from; + const mbfl_encoding *to; + int illegal_mode; + int illegal_substchar; + int num_illegalchar; + void *opaque; +}; + +struct mbfl_convert_vtbl { + enum mbfl_no_encoding from; + enum mbfl_no_encoding to; + void (*filter_ctor)(mbfl_convert_filter *filter); + void (*filter_dtor)(mbfl_convert_filter *filter); + int (*filter_function)(int c, mbfl_convert_filter *filter); + int (*filter_flush)(mbfl_convert_filter *filter); + void (*filter_copy)(mbfl_convert_filter *src, mbfl_convert_filter *dest); +}; + +MBFLAPI extern const struct mbfl_convert_vtbl *mbfl_convert_filter_list[]; + +MBFLAPI extern mbfl_convert_filter *mbfl_convert_filter_new( + enum mbfl_no_encoding from, + enum mbfl_no_encoding to, + int (*output_function)(int, void *), + int (*flush_function)(void *), + void *data ); +MBFLAPI extern mbfl_convert_filter *mbfl_convert_filter_new2( + const struct mbfl_convert_vtbl *vtbl, + int (*output_function)(int, void *), + int (*flush_function)(void *), + void *data ); +MBFLAPI extern void mbfl_convert_filter_delete(mbfl_convert_filter *filter); +MBFLAPI extern int mbfl_convert_filter_feed(int c, mbfl_convert_filter *filter); +MBFLAPI extern int mbfl_convert_filter_flush(mbfl_convert_filter *filter); +MBFLAPI extern void mbfl_convert_filter_reset(mbfl_convert_filter *filter, enum mbfl_no_encoding from, enum mbfl_no_encoding to); +MBFLAPI extern void mbfl_convert_filter_copy(mbfl_convert_filter *src, mbfl_convert_filter *dist); +MBFLAPI extern int mbfl_filt_conv_illegal_output(int c, mbfl_convert_filter *filter); +MBFLAPI extern const struct mbfl_convert_vtbl * mbfl_convert_filter_get_vtbl(enum mbfl_no_encoding from, enum mbfl_no_encoding to); + +MBFLAPI extern void mbfl_filt_conv_common_ctor(mbfl_convert_filter *filter); +MBFLAPI extern int mbfl_filt_conv_common_flush(mbfl_convert_filter *filter); +MBFLAPI extern void mbfl_filt_conv_common_dtor(mbfl_convert_filter *filter); + +MBFLAPI extern int mbfl_convert_filter_devcat(mbfl_convert_filter *filter, mbfl_memory_device *src); +MBFLAPI extern int mbfl_convert_filter_strcat(mbfl_convert_filter *filter, const unsigned char *p); + +#endif /* MBFL_CONVERT_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_defs.h b/ext/mbstring/libmbfl/mbfl/mbfl_defs.h new file mode 100644 index 0000000..fcfac2b --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfl_defs.h @@ -0,0 +1,56 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.h + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.h is included in this package . + * + */ + +#ifndef MBFL_DEFS_H +#define MBFL_DEFS_H + +#ifndef NULL +#ifdef __cplusplus +#define NULL (0L) +#else +#define NULL (void *)(0L) +#endif +#endif + +#ifdef WIN32 +#ifdef MBFL_DLL_EXPORT +#define MBFLAPI __declspec(dllexport) +#else +#define MBFLAPI __declspec(dllimport) +#endif /* MBFL_DLL_EXPORT */ +#else +#if defined(__GNUC__) && __GNUC__ >= 4 +#define MBFLAPI __attribute__((visibility("default"))) +#else +#define MBFLAPI +#endif /* defined(__GNUC__) && __GNUC__ >= 4 */ +#endif /* WIN32 */ + +#endif /* MBFL_DEFS_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c new file mode 100644 index 0000000..adf0c3a --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c @@ -0,0 +1,341 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#ifdef HAVE_STRING_H +#include <string.h> +#endif + +#ifdef HAVE_STRINGS_H +#include <strings.h> +#endif + +#include "mbfl_encoding.h" +#include "mbfilter_pass.h" +#include "mbfilter_8bit.h" +#include "mbfilter_wchar.h" + +#include "filters/mbfilter_euc_cn.h" +#include "filters/mbfilter_hz.h" +#include "filters/mbfilter_euc_tw.h" +#include "filters/mbfilter_big5.h" +#include "filters/mbfilter_uhc.h" +#include "filters/mbfilter_euc_kr.h" +#include "filters/mbfilter_iso2022_kr.h" +#include "filters/mbfilter_sjis.h" +#include "filters/mbfilter_sjis_open.h" +#include "filters/mbfilter_sjis_mobile.h" +#include "filters/mbfilter_sjis_mac.h" +#include "filters/mbfilter_sjis_2004.h" +#include "filters/mbfilter_cp51932.h" +#include "filters/mbfilter_jis.h" +#include "filters/mbfilter_iso2022_jp_ms.h" +#include "filters/mbfilter_iso2022jp_2004.h" +#include "filters/mbfilter_iso2022jp_mobile.h" +#include "filters/mbfilter_euc_jp.h" +#include "filters/mbfilter_euc_jp_win.h" +#include "filters/mbfilter_euc_jp_2004.h" +#include "filters/mbfilter_gb18030.h" +#include "filters/mbfilter_ascii.h" +#include "filters/mbfilter_koi8r.h" +#include "filters/mbfilter_koi8u.h" +#include "filters/mbfilter_cp866.h" +#include "filters/mbfilter_cp932.h" +#include "filters/mbfilter_cp936.h" +#include "filters/mbfilter_cp1251.h" +#include "filters/mbfilter_cp1252.h" +#include "filters/mbfilter_cp1254.h" +#include "filters/mbfilter_cp5022x.h" +#include "filters/mbfilter_iso8859_1.h" +#include "filters/mbfilter_iso8859_2.h" +#include "filters/mbfilter_iso8859_3.h" +#include "filters/mbfilter_iso8859_4.h" +#include "filters/mbfilter_iso8859_5.h" +#include "filters/mbfilter_iso8859_6.h" +#include "filters/mbfilter_iso8859_7.h" +#include "filters/mbfilter_iso8859_8.h" +#include "filters/mbfilter_iso8859_9.h" +#include "filters/mbfilter_iso8859_10.h" +#include "filters/mbfilter_iso8859_13.h" +#include "filters/mbfilter_iso8859_14.h" +#include "filters/mbfilter_iso8859_15.h" +#include "filters/mbfilter_iso8859_16.h" +#include "filters/mbfilter_base64.h" +#include "filters/mbfilter_qprint.h" +#include "filters/mbfilter_uuencode.h" +#include "filters/mbfilter_7bit.h" +#include "filters/mbfilter_utf7.h" +#include "filters/mbfilter_utf7imap.h" +#include "filters/mbfilter_utf8.h" +#include "filters/mbfilter_utf8_mobile.h" +#include "filters/mbfilter_utf16.h" +#include "filters/mbfilter_utf32.h" +#include "filters/mbfilter_byte2.h" +#include "filters/mbfilter_byte4.h" +#include "filters/mbfilter_ucs4.h" +#include "filters/mbfilter_ucs2.h" +#include "filters/mbfilter_htmlent.h" +#include "filters/mbfilter_armscii8.h" +#include "filters/mbfilter_cp850.h" + +#ifndef HAVE_STRCASECMP +#ifdef HAVE_STRICMP +#define strcasecmp stricmp +#endif +#endif + + +static const char *mbfl_encoding_auto_aliases[] = {"unknown", NULL}; + +static const mbfl_encoding mbfl_encoding_auto = { + mbfl_no_encoding_auto, + "auto", + NULL, + (const char *(*)[])&mbfl_encoding_auto_aliases, + NULL, + 0 +}; + +static const mbfl_encoding *mbfl_encoding_ptr_list[] = { + &mbfl_encoding_pass, + &mbfl_encoding_auto, + &mbfl_encoding_wchar, + &mbfl_encoding_byte2be, + &mbfl_encoding_byte2le, + &mbfl_encoding_byte4be, + &mbfl_encoding_byte4le, + &mbfl_encoding_base64, + &mbfl_encoding_uuencode, + &mbfl_encoding_html_ent, + &mbfl_encoding_qprint, + &mbfl_encoding_7bit, + &mbfl_encoding_8bit, + &mbfl_encoding_ucs4, + &mbfl_encoding_ucs4be, + &mbfl_encoding_ucs4le, + &mbfl_encoding_ucs2, + &mbfl_encoding_ucs2be, + &mbfl_encoding_ucs2le, + &mbfl_encoding_utf32, + &mbfl_encoding_utf32be, + &mbfl_encoding_utf32le, + &mbfl_encoding_utf16, + &mbfl_encoding_utf16be, + &mbfl_encoding_utf16le, + &mbfl_encoding_utf8, + &mbfl_encoding_utf7, + &mbfl_encoding_utf7imap, + &mbfl_encoding_ascii, + &mbfl_encoding_euc_jp, + &mbfl_encoding_sjis, + &mbfl_encoding_eucjp_win, + &mbfl_encoding_eucjp2004, + &mbfl_encoding_sjis_open, + &mbfl_encoding_sjis_docomo, + &mbfl_encoding_sjis_kddi, + &mbfl_encoding_sjis_sb, + &mbfl_encoding_sjis_mac, + &mbfl_encoding_sjis2004, + &mbfl_encoding_utf8_docomo, + &mbfl_encoding_utf8_kddi_a, + &mbfl_encoding_utf8_kddi_b, + &mbfl_encoding_utf8_sb, + &mbfl_encoding_cp932, + &mbfl_encoding_cp51932, + &mbfl_encoding_jis, + &mbfl_encoding_2022jp, + &mbfl_encoding_2022jpms, + &mbfl_encoding_gb18030, + &mbfl_encoding_cp1252, + &mbfl_encoding_cp1254, + &mbfl_encoding_8859_1, + &mbfl_encoding_8859_2, + &mbfl_encoding_8859_3, + &mbfl_encoding_8859_4, + &mbfl_encoding_8859_5, + &mbfl_encoding_8859_6, + &mbfl_encoding_8859_7, + &mbfl_encoding_8859_8, + &mbfl_encoding_8859_9, + &mbfl_encoding_8859_10, + &mbfl_encoding_8859_13, + &mbfl_encoding_8859_14, + &mbfl_encoding_8859_15, + &mbfl_encoding_8859_16, + &mbfl_encoding_euc_cn, + &mbfl_encoding_cp936, + &mbfl_encoding_hz, + &mbfl_encoding_euc_tw, + &mbfl_encoding_big5, + &mbfl_encoding_cp950, + &mbfl_encoding_euc_kr, + &mbfl_encoding_uhc, + &mbfl_encoding_2022kr, + &mbfl_encoding_cp1251, + &mbfl_encoding_cp866, + &mbfl_encoding_koi8r, + &mbfl_encoding_koi8u, + &mbfl_encoding_armscii8, + &mbfl_encoding_cp850, + &mbfl_encoding_jis_ms, + &mbfl_encoding_2022jp_2004, + &mbfl_encoding_2022jp_kddi, + &mbfl_encoding_cp50220, + &mbfl_encoding_cp50220raw, + &mbfl_encoding_cp50221, + &mbfl_encoding_cp50222, + NULL +}; + +/* encoding resolver */ +const mbfl_encoding * +mbfl_name2encoding(const char *name) +{ + const mbfl_encoding *encoding; + int i, j; + + if (name == NULL) { + return NULL; + } + + i = 0; + while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL){ + if (strcasecmp(encoding->name, name) == 0) { + return encoding; + } + } + + /* serch MIME charset name */ + i = 0; + while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL) { + if (encoding->mime_name != NULL) { + if (strcasecmp(encoding->mime_name, name) == 0) { + return encoding; + } + } + } + + /* serch aliases */ + i = 0; + while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL) { + if (encoding->aliases != NULL) { + j = 0; + while ((*encoding->aliases)[j] != NULL) { + if (strcasecmp((*encoding->aliases)[j], name) == 0) { + return encoding; + } + j++; + } + } + } + + return NULL; +} + +const mbfl_encoding * +mbfl_no2encoding(enum mbfl_no_encoding no_encoding) +{ + const mbfl_encoding *encoding; + int i; + + i = 0; + while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL){ + if (encoding->no_encoding == no_encoding) { + return encoding; + } + } + + return NULL; +} + +enum mbfl_no_encoding +mbfl_name2no_encoding(const char *name) +{ + const mbfl_encoding *encoding; + + encoding = mbfl_name2encoding(name); + if (encoding == NULL) { + return mbfl_no_encoding_invalid; + } else { + return encoding->no_encoding; + } +} + +const char * +mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding) +{ + const mbfl_encoding *encoding; + + encoding = mbfl_no2encoding(no_encoding); + if (encoding == NULL) { + return ""; + } else { + return encoding->name; + } +} + +const mbfl_encoding ** +mbfl_get_supported_encodings(void) +{ + return mbfl_encoding_ptr_list; +} + +const char * +mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding) +{ + const mbfl_encoding *encoding; + + encoding = mbfl_no2encoding(no_encoding); + if (encoding != NULL && encoding->mime_name != NULL && encoding->mime_name[0] != '\0') { + return encoding->mime_name; + } else { + return NULL; + } +} + +int +mbfl_is_support_encoding(const char *name) +{ + const mbfl_encoding *encoding; + + encoding = mbfl_name2encoding(name); + if (encoding == NULL) { + return 0; + } else { + return 1; + } +} diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h new file mode 100644 index 0000000..ca7717c --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h @@ -0,0 +1,152 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.h + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.h is included in this package . + * + */ + +#ifndef MBFL_ENCODING_H +#define MBFL_ENCODING_H + +#include "mbfl_defs.h" + +enum mbfl_no_encoding { + mbfl_no_encoding_invalid = -1, + mbfl_no_encoding_pass, + mbfl_no_encoding_auto, + mbfl_no_encoding_wchar, + mbfl_no_encoding_byte2be, + mbfl_no_encoding_byte2le, + mbfl_no_encoding_byte4be, + mbfl_no_encoding_byte4le, + mbfl_no_encoding_base64, + mbfl_no_encoding_uuencode, + mbfl_no_encoding_html_ent, + mbfl_no_encoding_qprint, + mbfl_no_encoding_7bit, + mbfl_no_encoding_8bit, + mbfl_no_encoding_charset_min, + mbfl_no_encoding_ucs4, + mbfl_no_encoding_ucs4be, + mbfl_no_encoding_ucs4le, + mbfl_no_encoding_ucs2, + mbfl_no_encoding_ucs2be, + mbfl_no_encoding_ucs2le, + mbfl_no_encoding_utf32, + mbfl_no_encoding_utf32be, + mbfl_no_encoding_utf32le, + mbfl_no_encoding_utf16, + mbfl_no_encoding_utf16be, + mbfl_no_encoding_utf16le, + mbfl_no_encoding_utf8, + mbfl_no_encoding_utf8_docomo, + mbfl_no_encoding_utf8_kddi_a, + mbfl_no_encoding_utf8_kddi_b, + mbfl_no_encoding_utf8_sb, + mbfl_no_encoding_utf7, + mbfl_no_encoding_utf7imap, + mbfl_no_encoding_ascii, + mbfl_no_encoding_euc_jp, + mbfl_no_encoding_eucjp2004, + mbfl_no_encoding_sjis, + mbfl_no_encoding_eucjp_win, + mbfl_no_encoding_sjis_open, + mbfl_no_encoding_sjis_docomo, + mbfl_no_encoding_sjis_kddi, + mbfl_no_encoding_sjis_sb, + mbfl_no_encoding_sjis_mac, + mbfl_no_encoding_sjis2004, + mbfl_no_encoding_cp932, + mbfl_no_encoding_cp51932, + mbfl_no_encoding_jis, + mbfl_no_encoding_2022jp, + mbfl_no_encoding_2022jp_2004, + mbfl_no_encoding_2022jp_kddi, + mbfl_no_encoding_2022jpms, + mbfl_no_encoding_gb18030, + mbfl_no_encoding_cp1252, + mbfl_no_encoding_cp1254, + mbfl_no_encoding_8859_1, + mbfl_no_encoding_8859_2, + mbfl_no_encoding_8859_3, + mbfl_no_encoding_8859_4, + mbfl_no_encoding_8859_5, + mbfl_no_encoding_8859_6, + mbfl_no_encoding_8859_7, + mbfl_no_encoding_8859_8, + mbfl_no_encoding_8859_9, + mbfl_no_encoding_8859_10, + mbfl_no_encoding_8859_13, + mbfl_no_encoding_8859_14, + mbfl_no_encoding_8859_15, + mbfl_no_encoding_euc_cn, + mbfl_no_encoding_cp936, + mbfl_no_encoding_euc_tw, + mbfl_no_encoding_big5, + mbfl_no_encoding_cp950, + mbfl_no_encoding_euc_kr, + mbfl_no_encoding_2022kr, + mbfl_no_encoding_uhc, + mbfl_no_encoding_hz, + mbfl_no_encoding_cp1251, + mbfl_no_encoding_cp866, + mbfl_no_encoding_koi8r, + mbfl_no_encoding_koi8u, + mbfl_no_encoding_8859_16, + mbfl_no_encoding_armscii8, + mbfl_no_encoding_cp850, + mbfl_no_encoding_jis_ms, + mbfl_no_encoding_cp50220, + mbfl_no_encoding_cp50220raw, + mbfl_no_encoding_cp50221, + mbfl_no_encoding_cp50222, + mbfl_no_encoding_charset_max +}; + +typedef enum mbfl_no_encoding mbfl_encoding_id; + +/* + * encoding + */ +typedef struct _mbfl_encoding { + enum mbfl_no_encoding no_encoding; + const char *name; + const char *mime_name; + const char *(*aliases)[]; + const unsigned char *mblen_table; + unsigned int flag; +} mbfl_encoding; + +MBFLAPI extern const mbfl_encoding * mbfl_name2encoding(const char *name); +MBFLAPI extern const mbfl_encoding * mbfl_no2encoding(enum mbfl_no_encoding no_encoding); +MBFLAPI extern enum mbfl_no_encoding mbfl_name2no_encoding(const char *name); +MBFLAPI extern const mbfl_encoding ** mbfl_get_supported_encodings(); +MBFLAPI extern const char * mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding); +MBFLAPI extern const char * mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding); +MBFLAPI extern int mbfl_is_support_encoding(const char *name); + + +#endif /* MBFL_ENCODING_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_filter_output.c b/ext/mbstring/libmbfl/mbfl/mbfl_filter_output.c new file mode 100644 index 0000000..341047d --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfl_filter_output.c @@ -0,0 +1,57 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "mbfl_convert.h" +#include "mbfl_filter_output.h" + +int mbfl_filter_output_pipe(int c, void* data) +{ + mbfl_convert_filter *filter = (mbfl_convert_filter*)data; + return (*filter->filter_function)(c, filter); +} + +int mbfl_filter_output_pipe_flush(void *data) +{ + mbfl_convert_filter *filter = (mbfl_convert_filter*)data; + if (filter->filter_flush != NULL) { + return (*filter->filter_flush)(filter); + } + + return 0; +} + +int mbfl_filter_output_null(int c, void* data) +{ + return c; +} diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_filter_output.h b/ext/mbstring/libmbfl/mbfl/mbfl_filter_output.h new file mode 100644 index 0000000..d477653 --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfl_filter_output.h @@ -0,0 +1,38 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.h + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.h is included in this package . + * + */ + +#ifndef MBFL_FILTER_OUTPUT_H +#define MBFL_FILTER_OUTPUT_H + +MBFLAPI extern int mbfl_filter_output_pipe(int c, void* data); +MBFLAPI extern int mbfl_filter_output_pipe_flush(void* data); +MBFLAPI extern int mbfl_filter_output_null(int c, void* data); + +#endif /* MBFL_FILTER_OUTPUT_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_ident.c b/ext/mbstring/libmbfl/mbfl/mbfl_ident.c new file mode 100644 index 0000000..4d6283f --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfl_ident.c @@ -0,0 +1,304 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#include "mbfl_ident.h" +#include "mbfl_allocators.h" +#include "mbfilter_pass.h" +#include "mbfilter_8bit.h" +#include "mbfilter_wchar.h" + +#include "filters/mbfilter_euc_cn.h" +#include "filters/mbfilter_hz.h" +#include "filters/mbfilter_euc_tw.h" +#include "filters/mbfilter_big5.h" +#include "filters/mbfilter_uhc.h" +#include "filters/mbfilter_euc_kr.h" +#include "filters/mbfilter_iso2022_kr.h" +#include "filters/mbfilter_sjis.h" +#include "filters/mbfilter_sjis_open.h" +#include "filters/mbfilter_sjis_mobile.h" +#include "filters/mbfilter_jis.h" +#include "filters/mbfilter_iso2022_jp_ms.h" +#include "filters/mbfilter_iso2022jp_2004.h" +#include "filters/mbfilter_iso2022jp_mobile.h" +#include "filters/mbfilter_euc_jp.h" +#include "filters/mbfilter_euc_jp_win.h" +#include "filters/mbfilter_euc_jp_2004.h" +#include "filters/mbfilter_utf8_mobile.h" +#include "filters/mbfilter_ascii.h" +#include "filters/mbfilter_koi8r.h" +#include "filters/mbfilter_koi8u.h" +#include "filters/mbfilter_cp866.h" +#include "filters/mbfilter_cp932.h" +#include "filters/mbfilter_cp936.h" +#include "filters/mbfilter_cp1251.h" +#include "filters/mbfilter_cp1252.h" +#include "filters/mbfilter_cp1254.h" +#include "filters/mbfilter_cp51932.h" +#include "filters/mbfilter_cp5022x.h" +#include "filters/mbfilter_gb18030.h" +#include "filters/mbfilter_iso8859_1.h" +#include "filters/mbfilter_iso8859_2.h" +#include "filters/mbfilter_iso8859_3.h" +#include "filters/mbfilter_iso8859_4.h" +#include "filters/mbfilter_iso8859_5.h" +#include "filters/mbfilter_iso8859_6.h" +#include "filters/mbfilter_iso8859_7.h" +#include "filters/mbfilter_iso8859_8.h" +#include "filters/mbfilter_iso8859_9.h" +#include "filters/mbfilter_iso8859_10.h" +#include "filters/mbfilter_iso8859_13.h" +#include "filters/mbfilter_iso8859_14.h" +#include "filters/mbfilter_iso8859_15.h" +#include "filters/mbfilter_base64.h" +#include "filters/mbfilter_qprint.h" +#include "filters/mbfilter_uuencode.h" +#include "filters/mbfilter_7bit.h" +#include "filters/mbfilter_utf7.h" +#include "filters/mbfilter_utf7imap.h" +#include "filters/mbfilter_utf8.h" +#include "filters/mbfilter_utf16.h" +#include "filters/mbfilter_utf32.h" +#include "filters/mbfilter_byte2.h" +#include "filters/mbfilter_byte4.h" +#include "filters/mbfilter_ucs4.h" +#include "filters/mbfilter_ucs2.h" +#include "filters/mbfilter_htmlent.h" +#include "filters/mbfilter_armscii8.h" +#include "filters/mbfilter_cp850.h" + +static const struct mbfl_identify_vtbl vtbl_identify_false = { + mbfl_no_encoding_pass, + mbfl_filt_ident_false_ctor, + mbfl_filt_ident_common_dtor, + mbfl_filt_ident_false }; + + +static const struct mbfl_identify_vtbl *mbfl_identify_filter_list[] = { + &vtbl_identify_utf8, + &vtbl_identify_utf7, + &vtbl_identify_ascii, + &vtbl_identify_eucjp, + &vtbl_identify_sjis, + &vtbl_identify_sjis_open, + &vtbl_identify_eucjpwin, + &vtbl_identify_eucjp2004, + &vtbl_identify_cp932, + &vtbl_identify_jis, + &vtbl_identify_2022jp, + &vtbl_identify_2022jpms, + &vtbl_identify_2022jp_2004, + &vtbl_identify_2022jp_kddi, + &vtbl_identify_cp51932, + &vtbl_identify_sjis_docomo, + &vtbl_identify_sjis_kddi, + &vtbl_identify_sjis_sb, + &vtbl_identify_utf8_docomo, + &vtbl_identify_utf8_kddi_a, + &vtbl_identify_utf8_kddi_b, + &vtbl_identify_utf8_sb, + &vtbl_identify_euccn, + &vtbl_identify_cp936, + &vtbl_identify_hz, + &vtbl_identify_euctw, + &vtbl_identify_big5, + &vtbl_identify_cp950, + &vtbl_identify_euckr, + &vtbl_identify_uhc, + &vtbl_identify_2022kr, + &vtbl_identify_cp1251, + &vtbl_identify_cp866, + &vtbl_identify_koi8r, + &vtbl_identify_koi8u, + &vtbl_identify_cp1252, + &vtbl_identify_cp1254, + &vtbl_identify_8859_1, + &vtbl_identify_8859_2, + &vtbl_identify_8859_3, + &vtbl_identify_8859_4, + &vtbl_identify_8859_5, + &vtbl_identify_8859_6, + &vtbl_identify_8859_7, + &vtbl_identify_8859_8, + &vtbl_identify_8859_9, + &vtbl_identify_8859_10, + &vtbl_identify_8859_13, + &vtbl_identify_8859_14, + &vtbl_identify_8859_15, + &vtbl_identify_armscii8, + &vtbl_identify_cp850, + &vtbl_identify_jis_ms, + &vtbl_identify_cp50220, + &vtbl_identify_cp50221, + &vtbl_identify_cp50222, + &vtbl_identify_gb18030, + &vtbl_identify_false, + NULL +}; + + + +/* + * identify filter + */ +const struct mbfl_identify_vtbl * mbfl_identify_filter_get_vtbl(enum mbfl_no_encoding encoding) +{ + const struct mbfl_identify_vtbl * vtbl; + int i; + + i = 0; + while ((vtbl = mbfl_identify_filter_list[i++]) != NULL) { + if (vtbl->encoding == encoding) { + break; + } + } + + return vtbl; +} + +mbfl_identify_filter *mbfl_identify_filter_new(enum mbfl_no_encoding encoding) +{ + mbfl_identify_filter *filter; + + /* allocate */ + filter = (mbfl_identify_filter *)mbfl_malloc(sizeof(mbfl_identify_filter)); + if (filter == NULL) { + return NULL; + } + + if (mbfl_identify_filter_init(filter, encoding)) { + mbfl_free(filter); + return NULL; + } + + return filter; +} + +mbfl_identify_filter *mbfl_identify_filter_new2(const mbfl_encoding *encoding) +{ + mbfl_identify_filter *filter; + + /* allocate */ + filter = (mbfl_identify_filter *)mbfl_malloc(sizeof(mbfl_identify_filter)); + if (filter == NULL) { + return NULL; + } + + if (mbfl_identify_filter_init2(filter, encoding)) { + mbfl_free(filter); + return NULL; + } + + return filter; +} + + +int mbfl_identify_filter_init(mbfl_identify_filter *filter, enum mbfl_no_encoding encoding) +{ + const mbfl_encoding *enc = mbfl_no2encoding(encoding); + return mbfl_identify_filter_init2(filter, enc ? enc: &mbfl_encoding_pass); +} + +int mbfl_identify_filter_init2(mbfl_identify_filter *filter, const mbfl_encoding *encoding) +{ + const struct mbfl_identify_vtbl *vtbl; + + /* encoding structure */ + filter->encoding = encoding; + + filter->status = 0; + filter->flag = 0; + filter->score = 0; + + /* setup the function table */ + vtbl = mbfl_identify_filter_get_vtbl(filter->encoding->no_encoding); + if (vtbl == NULL) { + vtbl = &vtbl_identify_false; + } + filter->filter_ctor = vtbl->filter_ctor; + filter->filter_dtor = vtbl->filter_dtor; + filter->filter_function = vtbl->filter_function; + + /* constructor */ + (*filter->filter_ctor)(filter); + + return 0; +} + +void mbfl_identify_filter_delete(mbfl_identify_filter *filter) +{ + if (filter == NULL) { + return; + } + + mbfl_identify_filter_cleanup(filter); + mbfl_free((void*)filter); +} + +void mbfl_identify_filter_cleanup(mbfl_identify_filter *filter) +{ + (*filter->filter_dtor)(filter); +} + +void mbfl_filt_ident_common_ctor(mbfl_identify_filter *filter) +{ + filter->status = 0; + filter->flag = 0; +} + +void mbfl_filt_ident_common_dtor(mbfl_identify_filter *filter) +{ + filter->status = 0; +} + +int mbfl_filt_ident_false(int c, mbfl_identify_filter *filter) +{ + filter->flag = 1; /* bad */ + return c; +} + +void mbfl_filt_ident_false_ctor(mbfl_identify_filter *filter) +{ + filter->status = 0; + filter->flag = 1; +} + +int mbfl_filt_ident_true(int c, mbfl_identify_filter *filter) +{ + return c; +} diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_ident.h b/ext/mbstring/libmbfl/mbfl/mbfl_ident.h new file mode 100644 index 0000000..12d81cd --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfl_ident.h @@ -0,0 +1,74 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.h + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.h is included in this package . + * + */ + +#ifndef MBFL_IDENT_H +#define MBFL_IDENT_H + +#include "mbfl_defs.h" +#include "mbfl_encoding.h" + +/* + * identify filter + */ +typedef struct _mbfl_identify_filter mbfl_identify_filter; + +struct _mbfl_identify_filter { + void (*filter_ctor)(mbfl_identify_filter *filter); + void (*filter_dtor)(mbfl_identify_filter *filter); + int (*filter_function)(int c, mbfl_identify_filter *filter); + int status; + int flag; + int score; + const mbfl_encoding *encoding; +}; + +struct mbfl_identify_vtbl { + enum mbfl_no_encoding encoding; + void (*filter_ctor)(mbfl_identify_filter *filter); + void (*filter_dtor)(mbfl_identify_filter *filter); + int (*filter_function)(int c, mbfl_identify_filter *filter); +}; + +MBFLAPI extern const struct mbfl_identify_vtbl * mbfl_identify_filter_get_vtbl(enum mbfl_no_encoding encoding); +MBFLAPI extern mbfl_identify_filter * mbfl_identify_filter_new(enum mbfl_no_encoding encoding); +MBFLAPI extern mbfl_identify_filter * mbfl_identify_filter_new2(const mbfl_encoding *encoding); +MBFLAPI extern void mbfl_identify_filter_delete(mbfl_identify_filter *filter); +MBFLAPI extern int mbfl_identify_filter_init(mbfl_identify_filter *filter, enum mbfl_no_encoding encoding); +MBFLAPI extern int mbfl_identify_filter_init2(mbfl_identify_filter *filter, const mbfl_encoding *encoding); +MBFLAPI void mbfl_identify_filter_cleanup(mbfl_identify_filter *filter); + +MBFLAPI extern void mbfl_filt_ident_common_ctor(mbfl_identify_filter *filter); +MBFLAPI extern void mbfl_filt_ident_common_dtor(mbfl_identify_filter *filter); +MBFLAPI extern void mbfl_filt_ident_false_ctor(mbfl_identify_filter *filter); + +MBFLAPI extern int mbfl_filt_ident_false(int c, mbfl_identify_filter *filter); +MBFLAPI extern int mbfl_filt_ident_true(int c, mbfl_identify_filter *filter); + +#endif /* MBFL_IDENT_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_language.c b/ext/mbstring/libmbfl/mbfl/mbfl_language.c new file mode 100644 index 0000000..4dd9726 --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfl_language.c @@ -0,0 +1,171 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#ifdef HAVE_STRING_H +#include <string.h> +#endif + +#ifdef HAVE_STRINGS_H +#include <strings.h> +#endif + +#include "mbfl_encoding.h" +#include "mbfl_language.h" + +#include "nls/nls_ja.h" +#include "nls/nls_kr.h" +#include "nls/nls_zh.h" +#include "nls/nls_uni.h" +#include "nls/nls_de.h" +#include "nls/nls_ru.h" +#include "nls/nls_ua.h" +#include "nls/nls_en.h" +#include "nls/nls_hy.h" +#include "nls/nls_tr.h" +#include "nls/nls_neutral.h" + +#ifndef HAVE_STRCASECMP +#ifdef HAVE_STRICMP +#define strcasecmp stricmp +#endif +#endif + +static const mbfl_language *mbfl_language_ptr_table[] = { + &mbfl_language_uni, + &mbfl_language_japanese, + &mbfl_language_korean, + &mbfl_language_simplified_chinese, + &mbfl_language_traditional_chinese, + &mbfl_language_english, + &mbfl_language_german, + &mbfl_language_russian, + &mbfl_language_ukrainian, + &mbfl_language_armenian, + &mbfl_language_turkish, + &mbfl_language_neutral, + NULL +}; + +/* language resolver */ +const mbfl_language * +mbfl_name2language(const char *name) +{ + const mbfl_language *language; + int i, j; + + if (name == NULL) { + return NULL; + } + + i = 0; + while ((language = mbfl_language_ptr_table[i++]) != NULL){ + if (strcasecmp(language->name, name) == 0) { + return language; + } + } + + i = 0; + while ((language = mbfl_language_ptr_table[i++]) != NULL){ + if (strcasecmp(language->short_name, name) == 0) { + return language; + } + } + + /* serch aliases */ + i = 0; + while ((language = mbfl_language_ptr_table[i++]) != NULL) { + if (language->aliases != NULL) { + j = 0; + while ((*language->aliases)[j] != NULL) { + if (strcasecmp((*language->aliases)[j], name) == 0) { + return language; + } + j++; + } + } + } + + return NULL; +} + +const mbfl_language * +mbfl_no2language(enum mbfl_no_language no_language) +{ + const mbfl_language *language; + int i; + + i = 0; + while ((language = mbfl_language_ptr_table[i++]) != NULL){ + if (language->no_language == no_language) { + return language; + } + } + + return NULL; +} + +enum mbfl_no_language +mbfl_name2no_language(const char *name) +{ + const mbfl_language *language; + + language = mbfl_name2language(name); + if (language == NULL) { + return mbfl_no_language_invalid; + } else { + return language->no_language; + } +} + +const char * +mbfl_no_language2name(enum mbfl_no_language no_language) +{ + const mbfl_language *language; + + language = mbfl_no2language(no_language); + if (language == NULL) { + return ""; + } else { + return language->name; + } +} + diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_language.h b/ext/mbstring/libmbfl/mbfl/mbfl_language.h new file mode 100644 index 0000000..af42a01 --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfl_language.h @@ -0,0 +1,87 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.h + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.h is included in this package . + * + */ + +#ifndef MBFL_LANGUAGE_H +#define MBFL_LANGUAGE_H + +#include "mbfl_defs.h" +#include "mbfl_encoding.h" + +enum mbfl_no_language { + mbfl_no_language_invalid = -1, + mbfl_no_language_neutral, + mbfl_no_language_uni, + mbfl_no_language_min, + mbfl_no_language_catalan, /* ca */ + mbfl_no_language_danish, /* da */ + mbfl_no_language_german, /* de */ + mbfl_no_language_english, /* en */ + mbfl_no_language_estonian, /* et */ + mbfl_no_language_greek, /* el */ + mbfl_no_language_spanish, /* es */ + mbfl_no_language_french, /* fr */ + mbfl_no_language_italian, /* it */ + mbfl_no_language_japanese, /* ja */ + mbfl_no_language_korean, /* ko */ + mbfl_no_language_dutch, /* nl */ + mbfl_no_language_polish, /* pl */ + mbfl_no_language_portuguese, /* pt */ + mbfl_no_language_swedish, /* sv */ + mbfl_no_language_simplified_chinese, /* zh-cn */ + mbfl_no_language_traditional_chinese, /* zh-tw */ + mbfl_no_language_russian, /* ru */ + mbfl_no_language_ukrainian, /* ua */ + mbfl_no_language_armenian, /* hy */ + mbfl_no_language_turkish, /* tr */ + mbfl_no_language_max +}; + +typedef enum mbfl_no_language mbfl_language_id; + +/* + * language + */ +typedef struct _mbfl_language { + enum mbfl_no_language no_language; + const char *name; + const char *short_name; + const char *(*aliases)[]; + enum mbfl_no_encoding mail_charset; + enum mbfl_no_encoding mail_header_encoding; + enum mbfl_no_encoding mail_body_encoding; +} mbfl_language; + +MBFLAPI extern const mbfl_language * mbfl_name2language(const char *name); +MBFLAPI extern const mbfl_language * mbfl_no2language(enum mbfl_no_language no_language); +MBFLAPI extern enum mbfl_no_language mbfl_name2no_language(const char *name); +MBFLAPI extern const char * mbfl_no_language2name(enum mbfl_no_language no_language); + + +#endif /* MBFL_LANGUAGE_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c new file mode 100644 index 0000000..7509ef1 --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c @@ -0,0 +1,350 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#include "mbfl_allocators.h" +#include "mbfl_string.h" +#include "mbfl_memory_device.h" + +/* + * memory device output functions + */ +void +mbfl_memory_device_init(mbfl_memory_device *device, int initsz, int allocsz) +{ + if (device) { + device->length = 0; + device->buffer = (unsigned char *)0; + if (initsz > 0) { + device->buffer = (unsigned char *)mbfl_malloc(initsz*sizeof(unsigned char)); + if (device->buffer != NULL) { + device->length = initsz; + } + } + device->pos= 0; + if (allocsz > MBFL_MEMORY_DEVICE_ALLOC_SIZE) { + device->allocsz = allocsz; + } else { + device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE; + } + } +} + +void +mbfl_memory_device_realloc(mbfl_memory_device *device, int initsz, int allocsz) +{ + unsigned char *tmp; + + if (device) { + if (initsz > device->length) { + tmp = (unsigned char *)mbfl_realloc((void *)device->buffer, initsz*sizeof(unsigned char)); + if (tmp != NULL) { + device->buffer = tmp; + device->length = initsz; + } + } + if (allocsz > MBFL_MEMORY_DEVICE_ALLOC_SIZE) { + device->allocsz = allocsz; + } else { + device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE; + } + } +} + +void +mbfl_memory_device_clear(mbfl_memory_device *device) +{ + if (device) { + if (device->buffer) { + mbfl_free(device->buffer); + } + device->buffer = (unsigned char *)0; + device->length = 0; + device->pos = 0; + } +} + +void +mbfl_memory_device_reset(mbfl_memory_device *device) +{ + if (device) { + device->pos = 0; + } +} + +void +mbfl_memory_device_unput(mbfl_memory_device *device) +{ + if (device->pos > 0) { + device->pos--; + } +} + +mbfl_string * +mbfl_memory_device_result(mbfl_memory_device *device, mbfl_string *result) +{ + if (device && result) { + result->len = device->pos; + mbfl_memory_device_output4('\0', device); + result->val = device->buffer; + device->buffer = (unsigned char *)0; + device->length = 0; + device->pos= 0; + if (result->val == NULL) { + result->len = 0; + result = NULL; + } + } else { + result = NULL; + } + + return result; +} + +int +mbfl_memory_device_output(int c, void *data) +{ + mbfl_memory_device *device = (mbfl_memory_device *)data; + + if (device->pos >= device->length) { + /* reallocate buffer */ + int newlen; + unsigned char *tmp; + + newlen = device->length + device->allocsz; + tmp = (unsigned char *)mbfl_realloc((void *)device->buffer, newlen*sizeof(unsigned char)); + if (tmp == NULL) { + return -1; + } + device->length = newlen; + device->buffer = tmp; + } + + device->buffer[device->pos++] = (unsigned char)c; + return c; +} + +int +mbfl_memory_device_output2(int c, void *data) +{ + mbfl_memory_device *device = (mbfl_memory_device *)data; + + if ((device->pos + 2) >= device->length) { + /* reallocate buffer */ + int newlen; + unsigned char *tmp; + + newlen = device->length + device->allocsz; + tmp = (unsigned char *)mbfl_realloc((void *)device->buffer, newlen*sizeof(unsigned char)); + if (tmp == NULL) { + return -1; + } + device->length = newlen; + device->buffer = tmp; + } + + device->buffer[device->pos++] = (unsigned char)((c >> 8) & 0xff); + device->buffer[device->pos++] = (unsigned char)(c & 0xff); + + return c; +} + +int +mbfl_memory_device_output4(int c, void* data) +{ + mbfl_memory_device *device = (mbfl_memory_device *)data; + + if ((device->pos + 4) >= device->length) { + /* reallocate buffer */ + int newlen; + unsigned char *tmp; + + newlen = device->length + device->allocsz; + tmp = (unsigned char *)mbfl_realloc((void *)device->buffer, newlen*sizeof(unsigned char)); + if (tmp == NULL) { + return -1; + } + device->length = newlen; + device->buffer = tmp; + } + + device->buffer[device->pos++] = (unsigned char)((c >> 24) & 0xff); + device->buffer[device->pos++] = (unsigned char)((c >> 16) & 0xff); + device->buffer[device->pos++] = (unsigned char)((c >> 8) & 0xff); + device->buffer[device->pos++] = (unsigned char)(c & 0xff); + + return c; +} + +int +mbfl_memory_device_strcat(mbfl_memory_device *device, const char *psrc) +{ + int len; + unsigned char *w; + const unsigned char *p; + + len = 0; + p = (const unsigned char*)psrc; + while (*p) { + p++; + len++; + } + + if ((device->pos + len) >= device->length) { + /* reallocate buffer */ + int newlen = device->length + (len + MBFL_MEMORY_DEVICE_ALLOC_SIZE)*sizeof(unsigned char); + unsigned char *tmp = (unsigned char *)mbfl_realloc((void *)device->buffer, newlen*sizeof(unsigned char)); + if (tmp == NULL) { + return -1; + } + device->length = newlen; + device->buffer = tmp; + } + + p = (const unsigned char*)psrc; + w = &device->buffer[device->pos]; + device->pos += len; + while (len > 0) { + *w++ = *p++; + len--; + } + + return len; +} + +int +mbfl_memory_device_strncat(mbfl_memory_device *device, const char *psrc, int len) +{ + unsigned char *w; + + if ((device->pos + len) >= device->length) { + /* reallocate buffer */ + int newlen = device->length + len + MBFL_MEMORY_DEVICE_ALLOC_SIZE; + unsigned char *tmp = (unsigned char *)mbfl_realloc((void *)device->buffer, newlen*sizeof(unsigned char)); + if (tmp == NULL) { + return -1; + } + device->length = newlen; + device->buffer = tmp; + } + + w = &device->buffer[device->pos]; + device->pos += len; + while (len > 0) { + *w++ = *psrc++; + len--; + } + + return len; +} + +int +mbfl_memory_device_devcat(mbfl_memory_device *dest, mbfl_memory_device *src) +{ + int n; + unsigned char *p, *w; + + if ((dest->pos + src->pos) >= dest->length) { + /* reallocate buffer */ + int newlen = dest->length + src->pos + MBFL_MEMORY_DEVICE_ALLOC_SIZE; + unsigned char *tmp = (unsigned char *)mbfl_realloc((void *)dest->buffer, newlen*sizeof(unsigned char)); + if (tmp == NULL) { + return -1; + } + dest->length = newlen; + dest->buffer = tmp; + } + + p = src->buffer; + w = &dest->buffer[dest->pos]; + n = src->pos; + dest->pos += n; + while (n > 0) { + *w++ = *p++; + n--; + } + + return n; +} + +void +mbfl_wchar_device_init(mbfl_wchar_device *device) +{ + if (device) { + device->buffer = (unsigned int *)0; + device->length = 0; + device->pos= 0; + device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE; + } +} + +void +mbfl_wchar_device_clear(mbfl_wchar_device *device) +{ + if (device) { + if (device->buffer) { + mbfl_free(device->buffer); + } + device->buffer = (unsigned int*)0; + device->length = 0; + device->pos = 0; + } +} + +int +mbfl_wchar_device_output(int c, void *data) +{ + mbfl_wchar_device *device = (mbfl_wchar_device *)data; + + if (device->pos >= device->length) { + /* reallocate buffer */ + int newlen; + unsigned int *tmp; + + newlen = device->length + device->allocsz; + tmp = (unsigned int *)mbfl_realloc((void *)device->buffer, newlen*sizeof(int)); + if (tmp == NULL) { + return -1; + } + device->length = newlen; + device->buffer = tmp; + } + + device->buffer[device->pos++] = c; + + return c; +} diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h new file mode 100644 index 0000000..a2c1c40 --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h @@ -0,0 +1,73 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.h + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.h is included in this package . + * + */ + +#ifndef MBFL_MEMORY_DEVICE_H +#define MBFL_MEMORY_DEVICE_H + +#include "mbfl_defs.h" +#include "mbfl_string.h" + +#define MBFL_MEMORY_DEVICE_ALLOC_SIZE 64 + +typedef struct _mbfl_memory_device { + unsigned char *buffer; + int length; + int pos; + int allocsz; +} mbfl_memory_device; + +typedef struct _mbfl_wchar_device { + unsigned int *buffer; + int length; + int pos; + int allocsz; +} mbfl_wchar_device; + +MBFLAPI extern void mbfl_memory_device_init(mbfl_memory_device *device, int initsz, int allocsz); +MBFLAPI extern void mbfl_memory_device_realloc(mbfl_memory_device *device, int initsz, int allocsz); +MBFLAPI extern void mbfl_memory_device_clear(mbfl_memory_device *device); +MBFLAPI extern void mbfl_memory_device_reset(mbfl_memory_device *device); +MBFLAPI extern mbfl_string * mbfl_memory_device_result(mbfl_memory_device *device, mbfl_string *result); +MBFLAPI extern void mbfl_memory_device_unput(mbfl_memory_device *device); +MBFLAPI extern int mbfl_memory_device_output(int c, void *data); +MBFLAPI extern int mbfl_memory_device_output2(int c, void *data); +MBFLAPI extern int mbfl_memory_device_output4(int c, void *data); +MBFLAPI extern int mbfl_memory_device_strcat(mbfl_memory_device *device, const char *psrc); +MBFLAPI extern int mbfl_memory_device_strncat(mbfl_memory_device *device, const char *psrc, int len); +MBFLAPI extern int mbfl_memory_device_devcat(mbfl_memory_device *dest, mbfl_memory_device *src); + +MBFLAPI extern void mbfl_wchar_device_init(mbfl_wchar_device *device); +MBFLAPI extern int mbfl_wchar_device_output(int c, void *data); +MBFLAPI extern void mbfl_wchar_device_clear(mbfl_wchar_device *device); + + + +#endif /* MBFL_MEMORY_DEVICE_H */ + diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_string.c b/ext/mbstring/libmbfl/mbfl/mbfl_string.c new file mode 100644 index 0000000..e0351a4 --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfl_string.c @@ -0,0 +1,79 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.c + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.c is included in this package . + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#include "mbfl_allocators.h" +#include "mbfl_string.h" + +/* + * string object + */ +void +mbfl_string_init(mbfl_string *string) +{ + if (string) { + string->no_language = mbfl_no_language_uni; + string->no_encoding = mbfl_no_encoding_pass; + string->val = (unsigned char*)NULL; + string->len = 0; + } +} + +void +mbfl_string_init_set(mbfl_string *string, mbfl_language_id no_language, mbfl_encoding_id no_encoding) +{ + if (string) { + string->no_language = no_language; + string->no_encoding = no_encoding; + string->val = (unsigned char*)NULL; + string->len = 0; + } +} + +void +mbfl_string_clear(mbfl_string *string) +{ + if (string) { + if (string->val != (unsigned char*)NULL) { + mbfl_free(string->val); + } + string->val = (unsigned char*)NULL; + string->len = 0; + } +} + + diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_string.h b/ext/mbstring/libmbfl/mbfl/mbfl_string.h new file mode 100644 index 0000000..d112131 --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mbfl_string.h @@ -0,0 +1,56 @@ +/* + * "streamable kanji code filter and converter" + * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. + * + * LICENSE NOTICES + * + * This file is part of "streamable kanji code filter and converter", + * which is distributed under the terms of GNU Lesser General Public + * License (version 2) as published by the Free Software Foundation. + * + * 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. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with "streamable kanji code filter and converter"; + * if not, write to the Free Software Foundation, Inc., 59 Temple Place, + * Suite 330, Boston, MA 02111-1307 USA + * + * The author of this file: + * + */ +/* + * The source code included in this files was separated from mbfilter.h + * by Moriyoshi Koizumi <moriyoshi@php.net> on 20 Dec 2002. The file + * mbfilter.h is included in this package . + * + */ + +#ifndef MBFL_STRING_H +#define MBFL_STRING_H + +#include "mbfl_defs.h" +#include "mbfl_encoding.h" +#include "mbfl_language.h" + +/* + * string object + */ +typedef struct _mbfl_string { + enum mbfl_no_language no_language; + enum mbfl_no_encoding no_encoding; + unsigned char *val; + unsigned int len; +} mbfl_string; + +MBFLAPI extern void mbfl_string_init(mbfl_string *string); +MBFLAPI extern void mbfl_string_init_set(mbfl_string *string, mbfl_language_id no_language, mbfl_encoding_id no_encoding); +MBFLAPI extern void mbfl_string_clear(mbfl_string *string); + +#ifndef NULL +#define NULL 0 +#endif + +#endif /* MBFL_STRING_H */ diff --git a/ext/mbstring/libmbfl/mbfl/mk_eaw_tbl.awk b/ext/mbstring/libmbfl/mbfl/mk_eaw_tbl.awk new file mode 100644 index 0000000..02c73f2 --- /dev/null +++ b/ext/mbstring/libmbfl/mbfl/mk_eaw_tbl.awk @@ -0,0 +1,81 @@ +#!/usr/bin/awk -f +# +# $Id$ +# +# Description: a script to generate east asian width table. +# + +BEGIN { + prev = -1 + comma = 0 + ORS = "" + FS = "[;.|# ]" + print "static const struct {\n\tint begin;\n\tint end;\n} " TABLE_NAME "[] = {\n\t" +} + +/^#/ { +} + +/^[0-9a-fA-F]+;/ { + if ($2 == "W" || $2 == "F") { + + v = strtonum( "0x" $1 ) + if (prev < 0) { + first = v + } else if (v - prev > 1) { + if (comma) { + print ",\n\t" + } + printf("{ 0x%04x, 0x%04x }", first, prev) + first = v + comma = 1 + } + prev = v + } else { + if (prev >= 0) { + if (comma) { + print ",\n\t" + } + printf("{ 0x%04x, 0x%04x }", first, prev) + prev = -1 + comma = 1 + } + } +} + +/^[0-9a-fA-F]+\.\./ { + if ($4 == "W" || $4 == "F") { + vs = strtonum( "0x" $1 ) + ve = strtonum( "0x" $3 ) + if (prev < 0) { + first = vs + } else if (vs - prev > 1) { + if (comma) { + print ",\n\t" + } + printf("{ 0x%04x, 0x%04x }", first, prev) + first = vs + comma = 1 + } + prev = ve + } else { + if (prev >= 0) { + if (comma) { + print ",\n\t" + } + printf("{ 0x%04x, 0x%04x }", first, prev) + prev = -1 + comma = 1 + } + } +} + +END { + if (prev >= 0) { + if (comma) { + print ",\n\t" + } + printf("{ 0x%04x, 0x%04x }", first, prev) + } + print "\n};\n" +} diff --git a/ext/mbstring/libmbfl/nls/Makefile.am b/ext/mbstring/libmbfl/nls/Makefile.am new file mode 100644 index 0000000..a9f987b --- /dev/null +++ b/ext/mbstring/libmbfl/nls/Makefile.am @@ -0,0 +1,25 @@ +noinst_LTLIBRARIES=libmbfl_nls.la +INCLUDES=-I../mbfl +libmbfl_nls_la_LDFLAGS=-version-info $(SHLIB_VERSION) +libmbfl_nls_la_SOURCES=nls_ja.c \ + nls_de.c \ + nls_en.c \ + nls_hy.c \ + nls_tr.c \ + nls_kr.c \ + nls_ru.c \ + nls_ua.c \ + nls_zh.c \ + nls_uni.c \ + nls_neutral.c \ + nls_ja.h \ + nls_de.h \ + nls_en.h \ + nls_hy.h \ + nls_tr.h \ + nls_kr.h \ + nls_ru.h \ + nls_ua.h \ + nls_zh.h \ + nls_uni.h \ + nls_neutral.h diff --git a/ext/mbstring/libmbfl/nls/nls_de.c b/ext/mbstring/libmbfl/nls/nls_de.c new file mode 100644 index 0000000..b559e2d --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_de.c @@ -0,0 +1,23 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#include "mbfilter.h" +#include "nls_de.h" + +static const char *mbfl_language_german_aliases[] = {"Deutsch", NULL}; + +const mbfl_language mbfl_language_german = { + mbfl_no_language_german, + "German", + "de", + (const char *(*)[])&mbfl_language_german_aliases, + mbfl_no_encoding_8859_15, + mbfl_no_encoding_qprint, + mbfl_no_encoding_8bit +}; + diff --git a/ext/mbstring/libmbfl/nls/nls_de.h b/ext/mbstring/libmbfl/nls/nls_de.h new file mode 100644 index 0000000..a6c289b --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_de.h @@ -0,0 +1,8 @@ +#ifndef MBFL_NLS_DE_H +#define MBFL_NLS_DE_H + +#include "mbfilter.h" + +extern const mbfl_language mbfl_language_german; + +#endif /* MBFL_NLS_DE_H */ diff --git a/ext/mbstring/libmbfl/nls/nls_en.c b/ext/mbstring/libmbfl/nls/nls_en.c new file mode 100644 index 0000000..0700e4f --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_en.c @@ -0,0 +1,21 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#include "mbfilter.h" +#include "nls_en.h" + +const mbfl_language mbfl_language_english = { + mbfl_no_language_english, + "English", + "en", + NULL, + mbfl_no_encoding_8859_1, + mbfl_no_encoding_qprint, + mbfl_no_encoding_8bit +}; + diff --git a/ext/mbstring/libmbfl/nls/nls_en.h b/ext/mbstring/libmbfl/nls/nls_en.h new file mode 100644 index 0000000..aa9297d --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_en.h @@ -0,0 +1,8 @@ +#ifndef MBFL_NLS_EN_H +#define MBFL_NLS_EN_H + +#include "mbfilter.h" + +extern const mbfl_language mbfl_language_english; + +#endif /* MBFL_NLS_EN_H */ diff --git a/ext/mbstring/libmbfl/nls/nls_hy.c b/ext/mbstring/libmbfl/nls/nls_hy.c new file mode 100644 index 0000000..1c4b383 --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_hy.c @@ -0,0 +1,20 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#include "mbfilter.h" +#include "nls_hy.h" + +const mbfl_language mbfl_language_armenian = { + mbfl_no_language_armenian , + "Armenian", + "hy", + NULL, + mbfl_no_encoding_armscii8, + mbfl_no_encoding_qprint, + mbfl_no_encoding_8bit +}; diff --git a/ext/mbstring/libmbfl/nls/nls_hy.h b/ext/mbstring/libmbfl/nls/nls_hy.h new file mode 100644 index 0000000..39fa246 --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_hy.h @@ -0,0 +1,9 @@ +#ifndef MBFL_NLS_HY_H +#define MBFL_NLS_HY_H + +#include "mbfilter.h" +#include "nls_hy.h" + +extern const mbfl_language mbfl_language_armenian; + +#endif /* MBFL_NLS_HY_H */ diff --git a/ext/mbstring/libmbfl/nls/nls_ja.c b/ext/mbstring/libmbfl/nls/nls_ja.c new file mode 100644 index 0000000..d5541fa --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_ja.c @@ -0,0 +1,20 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#include "mbfilter.h" +#include "nls_ja.h" + +const mbfl_language mbfl_language_japanese = { + mbfl_no_language_japanese, + "Japanese", + "ja", + NULL, + mbfl_no_encoding_2022jp, + mbfl_no_encoding_base64, + mbfl_no_encoding_7bit +}; diff --git a/ext/mbstring/libmbfl/nls/nls_ja.h b/ext/mbstring/libmbfl/nls/nls_ja.h new file mode 100644 index 0000000..bf1c9e9 --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_ja.h @@ -0,0 +1,8 @@ +#ifndef MBFL_NLS_JA_H +#define MBFL_NLS_JA_H + +#include "mbfilter.h" + +extern const mbfl_language mbfl_language_japanese; + +#endif /* MBFL_NLS_JA_H */ diff --git a/ext/mbstring/libmbfl/nls/nls_kr.c b/ext/mbstring/libmbfl/nls/nls_kr.c new file mode 100644 index 0000000..afff43a --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_kr.c @@ -0,0 +1,21 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#include "mbfilter.h" +#include "nls_kr.h" + +const mbfl_language mbfl_language_korean = { + mbfl_no_language_korean, + "Korean", + "ko", + NULL, + mbfl_no_encoding_2022kr, + mbfl_no_encoding_base64, + mbfl_no_encoding_7bit +}; + diff --git a/ext/mbstring/libmbfl/nls/nls_kr.h b/ext/mbstring/libmbfl/nls/nls_kr.h new file mode 100644 index 0000000..1aeb357 --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_kr.h @@ -0,0 +1,8 @@ +#ifndef MBFL_NLS_KR_H +#define MBFL_NLS_KR_H + +#include "mbfilter.h" + +extern const mbfl_language mbfl_language_korean; + +#endif /* MBFL_NLS_KR_H */ diff --git a/ext/mbstring/libmbfl/nls/nls_neutral.c b/ext/mbstring/libmbfl/nls/nls_neutral.c new file mode 100644 index 0000000..87a6a19 --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_neutral.c @@ -0,0 +1,21 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#include "mbfilter.h" +#include "nls_neutral.h" + +const mbfl_language mbfl_language_neutral = { + mbfl_no_language_neutral, + "neutral", + "neutral", + NULL, + mbfl_no_encoding_utf8, + mbfl_no_encoding_base64, + mbfl_no_encoding_base64 +}; + diff --git a/ext/mbstring/libmbfl/nls/nls_neutral.h b/ext/mbstring/libmbfl/nls/nls_neutral.h new file mode 100644 index 0000000..50c6499 --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_neutral.h @@ -0,0 +1,8 @@ +#ifndef MBFL_NLS_NEUTRAL_H +#define MBFL_NLS_NEUTRAL_H + +#include "mbfilter.h" + +extern const mbfl_language mbfl_language_neutral; + +#endif /* MBFL_NLS_NEUTRAL_H */ diff --git a/ext/mbstring/libmbfl/nls/nls_ru.c b/ext/mbstring/libmbfl/nls/nls_ru.c new file mode 100644 index 0000000..7e4cf9c --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_ru.c @@ -0,0 +1,20 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#include "mbfilter.h" +#include "nls_ru.h" + +const mbfl_language mbfl_language_russian = { + mbfl_no_language_russian, + "Russian", + "ru", + NULL, + mbfl_no_encoding_koi8r, + mbfl_no_encoding_qprint, + mbfl_no_encoding_8bit +}; diff --git a/ext/mbstring/libmbfl/nls/nls_ru.h b/ext/mbstring/libmbfl/nls/nls_ru.h new file mode 100644 index 0000000..ba21b9a --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_ru.h @@ -0,0 +1,9 @@ +#ifndef MBFL_NLS_RU_H +#define MBFL_NLS_RU_H + +#include "mbfilter.h" +#include "nls_ru.h" + +extern const mbfl_language mbfl_language_russian; + +#endif /* MBFL_NLS_RU_H */ diff --git a/ext/mbstring/libmbfl/nls/nls_tr.c b/ext/mbstring/libmbfl/nls/nls_tr.c new file mode 100644 index 0000000..c7044ff --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_tr.c @@ -0,0 +1,21 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#include "mbfilter.h" +#include "nls_tr.h" + +const mbfl_language mbfl_language_turkish = { + mbfl_no_language_turkish, + "Turkish", + "tr", + NULL, + mbfl_no_encoding_8859_9, + mbfl_no_encoding_qprint, + mbfl_no_encoding_8bit +}; + diff --git a/ext/mbstring/libmbfl/nls/nls_tr.h b/ext/mbstring/libmbfl/nls/nls_tr.h new file mode 100644 index 0000000..5c17f7d --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_tr.h @@ -0,0 +1,8 @@ +#ifndef MBFL_NLS_TR_H +#define MBFL_NLS_TR_H + +#include "mbfilter.h" + +extern const mbfl_language mbfl_language_turkish; + +#endif /* MBFL_NLS_TR_H */ diff --git a/ext/mbstring/libmbfl/nls/nls_ua.c b/ext/mbstring/libmbfl/nls/nls_ua.c new file mode 100644 index 0000000..85fe9b4 --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_ua.c @@ -0,0 +1,22 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + + +#include "mbfilter.h" +#include "nls_ua.h" + +const mbfl_language mbfl_language_ukrainian = { + mbfl_no_language_ukrainian, + "Ukrainian", + "ua", + NULL, + mbfl_no_encoding_koi8u, + mbfl_no_encoding_qprint, + mbfl_no_encoding_8bit +}; diff --git a/ext/mbstring/libmbfl/nls/nls_ua.h b/ext/mbstring/libmbfl/nls/nls_ua.h new file mode 100644 index 0000000..0efa8d1 --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_ua.h @@ -0,0 +1,9 @@ +#ifndef MBFL_NLS_UA_H +#define MBFL_NLS_UA_H + +#include "mbfilter.h" +#include "nls_ua.h" + +extern const mbfl_language mbfl_language_ukrainian; + +#endif /* MBFL_NLS_UA_H */ diff --git a/ext/mbstring/libmbfl/nls/nls_uni.c b/ext/mbstring/libmbfl/nls/nls_uni.c new file mode 100644 index 0000000..6a01001 --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_uni.c @@ -0,0 +1,23 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#include "mbfilter.h" +#include "nls_uni.h" + +static const char *mbfl_language_uni_aliases[] = {"universal", NULL}; + +const mbfl_language mbfl_language_uni = { + mbfl_no_language_uni, + "uni", + "uni", + (const char *(*)[])&mbfl_language_uni_aliases, + mbfl_no_encoding_utf8, + mbfl_no_encoding_base64, + mbfl_no_encoding_base64 +}; + diff --git a/ext/mbstring/libmbfl/nls/nls_uni.h b/ext/mbstring/libmbfl/nls/nls_uni.h new file mode 100644 index 0000000..1e3f94d --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_uni.h @@ -0,0 +1,8 @@ +#ifndef MBFL_NLS_UNI_H +#define MBFL_NLS_UNI_H + +#include "mbfilter.h" + +extern const mbfl_language mbfl_language_uni; + +#endif /* MBFL_NLS_UNI_H */ diff --git a/ext/mbstring/libmbfl/nls/nls_zh.c b/ext/mbstring/libmbfl/nls/nls_zh.c new file mode 100644 index 0000000..d9a4993 --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_zh.c @@ -0,0 +1,31 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_STDDEF_H +#include <stddef.h> +#endif + +#include "mbfilter.h" +#include "nls_zh.h" + +const mbfl_language mbfl_language_simplified_chinese = { + mbfl_no_language_simplified_chinese, + "Simplified Chinese", + "zh-cn", + NULL, + mbfl_no_encoding_hz, + mbfl_no_encoding_base64, + mbfl_no_encoding_7bit +}; + +const mbfl_language mbfl_language_traditional_chinese = { + mbfl_no_language_traditional_chinese, + "Traditional Chinese", + "zh-tw", + NULL, + mbfl_no_encoding_big5, + mbfl_no_encoding_base64, + mbfl_no_encoding_8bit +}; + diff --git a/ext/mbstring/libmbfl/nls/nls_zh.h b/ext/mbstring/libmbfl/nls/nls_zh.h new file mode 100644 index 0000000..2181602 --- /dev/null +++ b/ext/mbstring/libmbfl/nls/nls_zh.h @@ -0,0 +1,9 @@ +#ifndef MBFL_NLS_ZH_H +#define MBFL_NLS_ZH_H + +#include "mbfilter.h" + +extern const mbfl_language mbfl_language_simplified_chinese; +extern const mbfl_language mbfl_language_traditional_chinese; + +#endif /* MBFL_NLS_ZH_H */ diff --git a/ext/mbstring/libmbfl/tests/Makefile.am b/ext/mbstring/libmbfl/tests/Makefile.am new file mode 100644 index 0000000..8e857bc --- /dev/null +++ b/ext/mbstring/libmbfl/tests/Makefile.am @@ -0,0 +1,10 @@ +SUBDIRS=conv_encoding.tests conv_kana.tests strwidth.tests strcut.tests +noinst_PROGRAMS=conv_encoding conv_kana strwidth strcut +conv_encoding_SOURCES=conv_encoding.c +conv_encoding_LDADD=../mbfl/libmbfl.la +conv_kana_SOURCES=conv_kana.c +conv_kana_LDADD=../mbfl/libmbfl.la +strwidth_SOURCES=strwidth.c +strwidth_LDADD=../mbfl/libmbfl.la +strcut_SOURCES=strcut.c +strcut_LDADD=../mbfl/libmbfl.la diff --git a/ext/mbstring/libmbfl/tests/conv_encoding.c b/ext/mbstring/libmbfl/tests/conv_encoding.c new file mode 100644 index 0000000..9769964 --- /dev/null +++ b/ext/mbstring/libmbfl/tests/conv_encoding.c @@ -0,0 +1,104 @@ +/** + * this is a small sample script to use libmbfl. + * Rui Hirokawa <hirokawa@php.net> + * + * this file is encoded in EUC-JP. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "mbfl/mbfilter.h" + +static void hexdump(const mbfl_string *ptr) +{ + unsigned int i; + + for (i = 0; i < ptr->len; i++) { + printf("%%%02x", ptr->val[i]); + } + + printf(" (%u)\n", ptr->len); +} + +int main(int argc, char **argv) +{ + enum mbfl_no_encoding from_encoding, to_encoding; + enum mbfl_no_language no_language; + mbfl_buffer_converter *convd = NULL; + mbfl_memory_device dev; + mbfl_string string, result, *ret; + int final = 0; + int state = 0; + + if (argc < 4) { + fprintf(stderr, "Usage: %s lang to_encoding from_encoding\n", argv[0]); + return EXIT_FAILURE; + } + + if ((no_language = mbfl_name2no_language(argv[1])) == + mbfl_no_language_invalid) { + printf("Unsupported NLS: %s\n", argv[1]); + return EXIT_FAILURE; + } + + if ((to_encoding = mbfl_name2no_encoding(argv[2])) == + mbfl_no_encoding_invalid) { + printf("Unsupported encoding: %s\n", argv[2]); + return EXIT_FAILURE; + } + + if ((from_encoding = mbfl_name2no_encoding(argv[3])) == + mbfl_no_encoding_invalid) { + printf("Unsupported encoding: %s\n", argv[3]); + return EXIT_FAILURE; + } + + convd = mbfl_buffer_converter_new(from_encoding, to_encoding, 0); + + do { + mbfl_memory_device_init(&dev, 0, 4096); + mbfl_string_init_set(&string, no_language, from_encoding); + + for (;;) { + const int c = fgetc(stdin); + + if (c == EOF) { + final = 1; + break; + } else if (c == 10) { + if (state == 1) { + state = 0; + continue; + } + break; + } else if (c == 13) { + state = 1; + break; + } + + if (dev.pos >= dev.length) { + if (dev.length + dev.allocsz < dev.length) { + printf("Unable to allocate memory\n"); + return EXIT_FAILURE; + } + + mbfl_memory_device_realloc(&dev, dev.length + dev.allocsz, + dev.allocsz); + } + + dev.buffer[dev.pos++] = (unsigned char)c; + } + + mbfl_memory_device_result(&dev, &string); + mbfl_string_init_set(&result, no_language, to_encoding); + ret = mbfl_buffer_converter_feed_result(convd, &string, &result); + hexdump(&result); + mbfl_string_clear(&result); + mbfl_string_clear(&string); + } while (!final); + + mbfl_buffer_converter_delete(convd); + + return EXIT_SUCCESS; +} diff --git a/ext/mbstring/libmbfl/tests/conv_encoding.tests/Makefile.am b/ext/mbstring/libmbfl/tests/conv_encoding.tests/Makefile.am new file mode 100644 index 0000000..6a626bd --- /dev/null +++ b/ext/mbstring/libmbfl/tests/conv_encoding.tests/Makefile.am @@ -0,0 +1,31 @@ +EXTRA_DIST=\ + cp51932_cp50220raw.exp\ + ujis_sjis.exp\ + utf8_sjis.exp\ + yensign.exp +noinst_PROGRAMS=gen_exp +gen_exp_SOURCES=gen_exp.c +CLEANFILES=\ + uni_to_cp932.exp\ + uni_to_cp50220.exp\ + uni_to_cp50222.exp\ + cp932_to_uni.exp + +CP932.TXT: + $(FETCH_VIA_FTP) ftp://unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP932.TXT + +cp932_to_uni.exp: gen_exp CP932.TXT + ./gen_exp from_cp932 > "$@" + +uni_to_cp932.exp: gen_exp CP932.TXT + ./gen_exp to_cp932 > "$@" + +uni_to_cp50220.exp: gen_exp CP932.TXT + ./gen_exp to_cp50220 > "$@" + +uni_to_cp50222.exp: gen_exp CP932.TXT + ./gen_exp to_cp50222 > "$@" + +check-local: uni_to_cp932.exp uni_to_cp50220.exp uni_to_cp50222.exp + +.PHONY: check-local diff --git a/ext/mbstring/libmbfl/tests/conv_encoding.tests/cp51932_cp50220raw.exp b/ext/mbstring/libmbfl/tests/conv_encoding.tests/cp51932_cp50220raw.exp new file mode 100644 index 0000000..0e63ef1 --- /dev/null +++ b/ext/mbstring/libmbfl/tests/conv_encoding.tests/cp51932_cp50220raw.exp @@ -0,0 +1,33 @@ +#!/usr/bin/expect -f +spawn tests/conv_encoding Japanese CP50220raw eucJP-win +set timeout 1 + +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} + +set test "81 - 87ku" +send "\xf5\xba\xf6\xec\xf7\xc9\xf8\xb3\xf9\xa1\xfa\xa1\xfb\xa1\r" +expect { + "%1b%24%42%75%3a%76%6c%77%49%78%33%79%21%7a%21%7b%21%1b%28%42 (20)\r\n" { pass $test } +} + + +set test "kanji + kana" +send "ÆüËÜ¸ì¥Æ¥¹¥È\r" +expect { + "%1b%24%42%46%7c%4b%5c%38%6c%25%46%25%39%25%48%1b%28%42 (18)\r\n" { pass $test } +} + +set test "full-width numerics" +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + "%1b%24%42%23%30%23%31%23%32%23%33%23%34%23%35%23%36%23%37%23%38%23%39%1b%28%42 (26)\r\n" { pass $test } +} + +set test "full-width numerics" +send "Î" +expect { + "%1b%24%42%2d%42%1b%28%42 (8)\r\n" { pass $test } +} + diff --git a/ext/mbstring/libmbfl/tests/conv_encoding.tests/gen_exp.c b/ext/mbstring/libmbfl/tests/conv_encoding.tests/gen_exp.c new file mode 100644 index 0000000..93a0fb3 --- /dev/null +++ b/ext/mbstring/libmbfl/tests/conv_encoding.tests/gen_exp.c @@ -0,0 +1,497 @@ +#include <stdio.h> +#include <stddef.h> +#include <string.h> +#include <stdlib.h> +#include <errno.h> + +struct mappings_entry { + int cp_uni; + int n; + int cp_932[16]; +}; + +struct mappings { + size_t n; + size_t nalloc; + struct mappings_entry *entries; +}; + +static void mappings_init(struct mappings *map) +{ + map->n = 0; + map->nalloc = 0; + map->entries = 0; +} + +static void mappings_destroy(struct mappings *map) +{ + if (map->entries) + free(map->entries); +} + +static int mappings_grow(struct mappings *map) +{ + if (map->n >= map->nalloc) { + struct mappings_entry *new_entries; + size_t n = map->nalloc << 1, a; + if (n == 0) + n = 1; + else if (n <= map->n) + return 2; + a = sizeof(*map->entries) * n; + if (a / n != sizeof(*map->entries)) + return 2; + new_entries = realloc(map->entries, a); + if (!new_entries) + return 2; + map->entries = new_entries; + map->nalloc = n; + } + return 0; +} + +static int mappings_add(struct mappings *map, int cp_uni, int cp_932) +{ + size_t i; + size_t s = 0, e = map->n; + struct mappings_entry *entry; + + for (;;) { + i = (s + e) / 2; + entry = &map->entries[i]; + if (e == i || entry->cp_uni > cp_uni) { + if (e == i) { + int r = mappings_grow(map); + if (r) + return r; + if (map->n > i) { + size_t n = map->n - i, a = sizeof(*map->entries) * n; + if (a / n != sizeof(*map->entries)) + return 2; + memmove(&map->entries[i + 1], &map->entries[i], a); + } + ++map->n; + entry = &map->entries[i]; + entry->cp_uni = cp_uni; + entry->n = 0; + break; + } + e = i; + } else if (entry->cp_uni < cp_uni) { + if (s == i) { + int r = mappings_grow(map); + if (r) + return r; + if (map->n > i + 1) { + size_t n = (map->n - i - 1), a = sizeof(*map->entries) * n; + if (a / n != sizeof(*map->entries)) + return 2; + memmove(&map->entries[i + 2], &map->entries[i + 1], a); + } + ++map->n; + entry = &map->entries[i + 1]; + entry->cp_uni = cp_uni; + entry->n = 0; + break; + } + s = i; + } else { + break; + } + } + if (entry->n >= sizeof(entry->cp_932) / sizeof(*entry->cp_932)) + return 1; + entry->cp_932[entry->n++] = cp_932; + return 0; +} + +struct generator_entry { + const char *name; + const char *prologue; + const char *epilogue; + void(*visitor)(const struct mappings_entry *); +}; + +static int utf32_utf8(char *buf, int k) +{ + int retval = 0; + + if (k < 0x80) { + buf[0] = k; + retval = 1; + } else if (k < 0x800) { + buf[0] = 0xc0 | (k >> 6); + buf[1] = 0x80 | (k & 0x3f); + retval = 2; + } else if (k < 0x10000) { + buf[0] = 0xe0 | (k >> 12); + buf[1] = 0x80 | ((k >> 6) & 0x3f); + buf[2] = 0x80 | (k & 0x3f); + retval = 3; + } else if (k < 0x200000) { + buf[0] = 0xf0 | (k >> 18); + buf[1] = 0x80 | ((k >> 12) & 0x3f); + buf[2] = 0x80 | ((k >> 6) & 0x3f); + buf[3] = 0x80 | (k & 0x3f); + retval = 4; + } else if (k < 0x4000000) { + buf[0] = 0xf8 | (k >> 24); + buf[1] = 0x80 | ((k >> 18) & 0x3f); + buf[2] = 0x80 | ((k >> 12) & 0x3f); + buf[3] = 0x80 | ((k >> 6) & 0x3f); + buf[4] = 0x80 | (k & 0x3f); + retval = 5; + } else { + buf[0] = 0xfc | (k >> 30); + buf[1] = 0x80 | ((k >> 24) & 0x3f); + buf[2] = 0x80 | ((k >> 18) & 0x3f); + buf[3] = 0x80 | ((k >> 12) & 0x3f); + buf[4] = 0x80 | ((k >> 6) & 0x3f); + buf[5] = 0x80 | (k & 0x3f); + retval = 6; + } + buf[retval] = '\0'; + + return retval; +} + +static const char epilogue[] = +"close\n"; + +static const char prologue_to_cp932[] = +"#!/usr/bin/expect -f\n" +"spawn tests/conv_encoding Japanese CP932 UTF-8\n" +"set timeout 1\n" +"\n" +"expect_after {\n" +" \"\\[^\\r\\n\\]*\\r\\n\" { fail $test }\n" +"}\n"; + +static const char prologue_to_cp50220[] = +"#!/usr/bin/expect -f\n" +"spawn tests/conv_encoding Japanese CP50220 UTF-8\n" +"set timeout 1\n" +"\n" +"expect_after {\n" +" \"\\[^\\r\\n\\]*\\r\\n\" { fail $test }\n" +"}\n"; + +static const char prologue_to_cp50222[] = +"#!/usr/bin/expect -f\n" +"spawn tests/conv_encoding Japanese CP50222 UTF-8\n" +"set timeout 1\n" +"\n" +"expect_after {\n" +" \"\\[^\\r\\n\\]*\\r\\n\" { fail $test }\n" +"}\n"; + +static const char prologue_from_cp932[] = +"#!/usr/bin/expect -f\n" +"spawn tests/conv_encoding Japanese UTF-8 CP932\n" +"set timeout 1\n" +"\n" +"expect_after {\n" +" \"\\[^\\r\\n\\]*\\r\\n\" { fail $test }\n" +"}\n"; + +static void to_cp932_visitor(const struct mappings_entry *entry) +{ + char buf_uni[32], buf_cp932[8]; + int i; + + if (entry->cp_uni < 32 || entry->cp_uni == 127) + return; + + i = utf32_utf8(buf_uni, entry->cp_uni); + buf_uni[i * 4] = '\0'; + while (--i >= 0) { + unsigned char c = ((unsigned char *)buf_uni)[i]; + buf_uni[i * 4] = '\\'; + buf_uni[i * 4 + 1] = 'x'; + buf_uni[i * 4 + 2] = "0123456789abcdef"[c >> 4]; + buf_uni[i * 4 + 3] = "0123456789abcdef"[c & 15]; + } + + printf("set test \"U+%06X\"\n" + "send -- \"%s\r\"\n" + "sleep 0.001\n" + "expect {\n", entry->cp_uni, buf_uni); + + for (i = 0; i < entry->n; ++i) { + int len = 0; + const int c = entry->cp_932[i]; + if (c >= 0x100) { + len = 2; + sprintf(buf_cp932, "%%%02x%%%02x", (c >> 8) & 0xff, c & 0xff); + } else { + len = 1; + sprintf(buf_cp932, "%%%02x", c); + } + printf(" \"%s (%d)\\r\\n\" { pass $test }\n", buf_cp932, len); + } + + printf("}\n"); +} + +static void from_cp932_visitor(const struct mappings_entry *entry) +{ + char buf_uni[32], buf_cp932[8]; + int i, len; + + if (entry->cp_uni < 32 || entry->cp_uni == 127) + return; + + len = utf32_utf8(buf_uni, entry->cp_uni); + buf_uni[len * 3] = '\0'; + i = len; + while (--i >= 0) { + unsigned char c = ((unsigned char *)buf_uni)[i]; + buf_uni[i * 3] = '%'; + buf_uni[i * 3 + 1] = "0123456789abcdef"[c >> 4]; + buf_uni[i * 3 + 2] = "0123456789abcdef"[c & 15]; + } + + for (i = 0; i < entry->n; ++i) { + const int c = entry->cp_932[i]; + if (c >= 0x100) + sprintf(buf_cp932, "\\x%02x\\x%02x", (c >> 8) & 0xff, c & 0xff); + else + sprintf(buf_cp932, "\\x%02x", c); + printf("set test \"U+%06X\"\n" + "send -- \"%s\r\"\n" + "sleep 0.001\n" + "expect {\n" + " \"%s (%d)\\r\\n\" { pass $test }\n" + "}\n", + entry->cp_uni, buf_cp932, buf_uni, len); + } +} + +static void to_cp50220_visitor(const struct mappings_entry *entry) +{ + char buf_uni[32], buf_cp50220[32]; + int i; + + if (entry->cp_uni < 32 || entry->cp_uni == 127) + return; + + i = utf32_utf8(buf_uni, entry->cp_uni); + buf_uni[i * 4] = '\0'; + while (--i >= 0) { + unsigned char c = ((unsigned char *)buf_uni)[i]; + buf_uni[i * 4] = '\\'; + buf_uni[i * 4 + 1] = 'x'; + buf_uni[i * 4 + 2] = "0123456789abcdef"[c >> 4]; + buf_uni[i * 4 + 3] = "0123456789abcdef"[c & 15]; + } + + printf("set test \"U+%06X\"\n" + "send -- \"%s\r\"\n" + "sleep 0.001\n" + "expect {\n", entry->cp_uni, buf_uni); + + for (i = 0; i < entry->n; ++i) { + int len = 0; + const int c = entry->cp_932[i]; + if (c >= 0xa1 && c < 0xe0) { + static const int jisx0208_tl_map[] = { + 0x0000, 0x2123, 0x2156, 0x2157, 0x2122, 0x2126, 0x2572, 0x2521, + 0x2523, 0x2525, 0x2527, 0x2529, 0x2563, 0x2565, 0x2567, 0x2543, + 0x213c, 0x2522, 0x2524, 0x2526, 0x2528, 0x252a, 0x252b, 0x252d, + 0x252f, 0x2531, 0x2533, 0x2535, 0x2537, 0x2539, 0x253b, 0x253d, + 0x253f, 0x2541, 0x2544, 0x2546, 0x2548, 0x254a, 0x254b, 0x254c, + 0x254d, 0x254e, 0x254f, 0x2552, 0x2555, 0x2558, 0x255b, 0x255e, + 0x255f, 0x2560, 0x2561, 0x2562, 0x2564, 0x2566, 0x2568, 0x2569, + 0x256a, 0x256b, 0x256c, 0x256d, 0x256f, 0x2573, 0x212b, 0x212c + }; + const int j = jisx0208_tl_map[c - 0xa0]; + len = 8; + sprintf(buf_cp50220, "%%1b%%24%%42%%%02x%%%02x%%1b%%28%%42", j >> 8, j & 0xff); + } else if (c >= 0x100) { + const int j = ((((c & 0xff00) - (c >= 0xe000 ? 0xb000: 0x7000)) << 1) | ((c & 0xff) - (c & 0x80 ? 32: 31))) - ((c & 0xff) >= 159 ? 94: 0x100); + len = 8; + sprintf(buf_cp50220, "%%1b%%24%%42%%%02x%%%02x%%1b%%28%%42", j >> 8, j & 0xff); + } else { + len = 1; + sprintf(buf_cp50220, "%%%02x", c); + } + printf(" \"%s (%d)\\r\\n\" { pass $test }\n", buf_cp50220, len); + } + + printf("}\n"); +} + +static void to_cp50222_visitor(const struct mappings_entry *entry) +{ + char buf_uni[32], buf_cp50220[32]; + int i; + + if (entry->cp_uni < 32 || entry->cp_uni == 127) + return; + + i = utf32_utf8(buf_uni, entry->cp_uni); + buf_uni[i * 4] = '\0'; + while (--i >= 0) { + unsigned char c = ((unsigned char *)buf_uni)[i]; + buf_uni[i * 4] = '\\'; + buf_uni[i * 4 + 1] = 'x'; + buf_uni[i * 4 + 2] = "0123456789abcdef"[c >> 4]; + buf_uni[i * 4 + 3] = "0123456789abcdef"[c & 15]; + } + + printf("set test \"U+%06X\"\n" + "send -- \"%s\r\"\n" + "sleep 0.001\n" + "expect {\n", entry->cp_uni, buf_uni); + + for (i = 0; i < entry->n; ++i) { + int len = 0; + const int c = entry->cp_932[i]; + if (c >= 0xa1 && c < 0xe0) { + len = 3; + sprintf(buf_cp50220, "%%0e%%%02x%%0f", c - 0x80); + } else if (c >= 0x100) { + const int j = ((((c & 0xff00) - (c >= 0xe000 ? 0xb000: 0x7000)) << 1) | ((c & 0xff) - (c & 0x80 ? 32: 31))) - ((c & 0xff) >= 159 ? 94: 0x100); + len = 8; + sprintf(buf_cp50220, "%%1b%%24%%42%%%02x%%%02x%%1b%%28%%42", j >> 8, j & 0xff); + } else { + len = 1; + sprintf(buf_cp50220, "%%%02x", c); + } + printf(" \"%s (%d)\\r\\n\" { pass $test }\n", buf_cp50220, len); + } + + printf("}\n"); +} + + +static struct generator_entry entries[] = { + { "to_cp932", prologue_to_cp932, epilogue, to_cp932_visitor }, + { "to_cp50220", prologue_to_cp50220, epilogue, to_cp50220_visitor }, + { "to_cp50222", prologue_to_cp50222, epilogue, to_cp50222_visitor }, + { "from_cp932", prologue_from_cp932, epilogue, from_cp932_visitor }, + { NULL } +}; + +static const char cp932_txt[] = "CP932.TXT"; + +int main(int argc, char **argv) +{ + int retval = 0; + FILE *fp; + char buf[1024]; + struct generator_entry* gen; + struct mappings map; + + if (argc <= 1) { + fprintf(stderr, "usage: %s generator\n", argv[0]); + return 255; + } + + for (gen = entries;; ++gen) { + if (!gen->name) { + fprintf(stderr, "Unknown generator: %s\n", argv[1]); + return 1; + } + if (strcmp(gen->name, argv[1]) == 0) + break; + } + + fp = fopen(cp932_txt, "r"); + if (!fp) { + fprintf(stderr, "Failed to open %s\n", cp932_txt); + return 2; + } + + mappings_init(&map); + + while (fgets(buf, sizeof(buf), fp)) { + const char *fields[16]; + char *p = buf; + int field = 0; + int cp_932, cp_uni; + for (;;) { + char *q = 0; + int eol = 0; + + if (field >= sizeof(fields) / sizeof(*fields)) { + fprintf(stderr, "Too many fields (incorrect file?)\n"); + retval = 3; + goto out; + } + + for (;;) { + if (*p == '\0' || *p == '#' || *p == 0x0a) { + eol = 1; + break; + } else if (*p != ' ' && *p != '\t') { + break; + } + ++p; + } + + if (eol) + break; + + q = p; + + for (;;) { + if (*p == '\0' || *p == '#' || *p == 0x0a) { + eol = 1; + break; + } else if (*p == ' ' || *p == '\t') { + break; + } + ++p; + } + + *p = '\0'; + fields[field++] = q; + + if (eol) + break; + ++p; + } + if (field == 0 || field == 1) { + continue; + } else if (field != 2) { + fprintf(stderr, "Unexpected field count (expected 2, got %d)\n", field); + retval = 3; + goto out; + } + cp_932 = strtol(fields[0], NULL, 0); + if (errno == ERANGE || errno == EINVAL) { + fprintf(stderr, "Malformed field value: %s\n", fields[0]); + retval = 4; + goto out; + } + cp_uni = strtol(fields[1], NULL, 0); + if (errno == ERANGE || errno == EINVAL) { + fprintf(stderr, "Malformed field value: %s\n", fields[1]); + retval = 4; + goto out; + } + + if (mappings_add(&map, cp_uni, cp_932)) { + fprintf(stderr, "Too many mappings to the same Unicode codepoint (U+%06X)\n", cp_uni); + retval = 4; + goto out; + } + } + + { + size_t i; + printf("%s", gen->prologue); + for (i = 0; i < map.n; ++i) + gen->visitor(&map.entries[i]); + printf("%s", gen->epilogue); + } + +out: + mappings_destroy(&map); + return retval; +} + +/* + * vim: sts=4 sw=4 ts=4 noet + */ diff --git a/ext/mbstring/libmbfl/tests/conv_encoding.tests/ujis_sjis.exp b/ext/mbstring/libmbfl/tests/conv_encoding.tests/ujis_sjis.exp new file mode 100644 index 0000000..882953f --- /dev/null +++ b/ext/mbstring/libmbfl/tests/conv_encoding.tests/ujis_sjis.exp @@ -0,0 +1,35 @@ +#!/usr/bin/expect -f +spawn tests/conv_encoding Japanese Shift_JIS EUC-JP +set timeout 1 + +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} + +set test "basic test" +send "testtest\r" +expect { + "%74%65%73%74%74%65%73%74 (8)\r\n" { pass $test } +} + + +set test "kanji + kana" +send "ÆüËÜ¸ì¥Æ¥¹¥È\r" +expect { + "%93%fa%96%7b%8c%ea%83%65%83%58%83%67 (12)\r\n" { pass $test } +} + +set test "full-width numerics" +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + "%82%4f%82%50%82%51%82%52%82%53%82%54%82%55%82%56%82%57%82%58 (20)\r\n" { pass $test } +} + +set test "full-width numerics" +send "Î" +expect { + "%3f (1)\r\n" { pass $test } +} + +close +# vim: sts=4 ts=4 sw=4 et encoding=EUC-JP diff --git a/ext/mbstring/libmbfl/tests/conv_encoding.tests/utf8_sjis.exp b/ext/mbstring/libmbfl/tests/conv_encoding.tests/utf8_sjis.exp new file mode 100644 index 0000000..e51b5e4 --- /dev/null +++ b/ext/mbstring/libmbfl/tests/conv_encoding.tests/utf8_sjis.exp @@ -0,0 +1,35 @@ +#!/usr/bin/expect -f +spawn tests/conv_encoding Japanese Shift_JIS UTF-8 +set timeout 1 + +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} + +set test "basic test" +send "testtest\r" +expect { + "%74%65%73%74%74%65%73%74 (8)\r\n" { pass $test } +} + + +set test "kanji + kana" +send "日本語テスト\r" +expect { + "%93%fa%96%7b%8c%ea%83%65%83%58%83%67 (12)\r\n" { pass $test } +} + +set test "full-width numerics" +send "ï¼ï¼‘23456789\r" +expect { + "%82%4f%82%50%82%51%82%52%82%53%82%54%82%55%82%56%82%57%82%58 (20)\r\n" { pass $test } +} + +set test "full-width numerics" +send "ãŠ" +expect { + "%3f (1)\r\n" { pass $test } +} + +close +# vim: sts=4 ts=4 sw=4 et encoding=EUC-JP diff --git a/ext/mbstring/libmbfl/tests/conv_encoding.tests/yensign.exp b/ext/mbstring/libmbfl/tests/conv_encoding.tests/yensign.exp new file mode 100644 index 0000000..03f2faf --- /dev/null +++ b/ext/mbstring/libmbfl/tests/conv_encoding.tests/yensign.exp @@ -0,0 +1,99 @@ +#!/usr/bin/expect -f +set timeout 1 + +spawn tests/conv_encoding Japanese CP932 UTF-8 +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +set test "CP932" +send "\xc2\xa5\r" +sleep 0.01 +expect { + "%5c (1)\r\n" { pass $test } +} +close + +spawn tests/conv_encoding Japanese SJIS-open UTF-8 +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +set test "SJIS-open" +send "\xc2\xa5\r" +sleep 0.01 +expect { + "%81%8f (2)\r\n" { pass $test } +} +close + +spawn tests/conv_encoding Japanese eucJP-open UTF-8 +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +set test "eucJP-open" +send "\xc2\xa5\r" +sleep 0.01 +expect { + "%a1%ef (2)\r\n" { pass $test } +} +close + +spawn tests/conv_encoding Japanese CP51932 UTF-8 +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +set test "CP51932" +send "\xc2\xa5\r" +sleep 0.01 +expect { + "%5c (1)\r\n" { pass $test } +} +close + +spawn tests/conv_encoding Japanese ISO-2022-JP-MS UTF-8 +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +set test "ISO-2022-JP-MS" +send "\xc2\xa5\r" +sleep 0.01 +expect { + "%1b%24%42%21%6f%1b%28%42 (8)\r\n" { pass $test } +} +close + +spawn tests/conv_encoding Japanese CP50220 UTF-8 +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +set test "CP50220" +send "\xc2\xa5\r" +sleep 0.01 +expect { + "%1b%28%4a%5c%1b%28%42 (7)\r\n" { pass $test } +} +close + +spawn tests/conv_encoding Japanese CP50221 UTF-8 +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +set test "CP50221" +send "\xc2\xa5\r" +sleep 0.01 +expect { + "%1b%28%4a%5c%1b%28%42 (7)\r\n" { pass $test } +} +close + +spawn tests/conv_encoding Japanese CP50222 UTF-8 +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +set test "CP50222" +send "\xc2\xa5\r" +sleep 0.01 +expect { + "%1b%28%4a%5c%1b%28%42 (7)\r\n" { pass $test } +} +close +# vim: sts=4 ts=4 sw=4 et diff --git a/ext/mbstring/libmbfl/tests/conv_kana.c b/ext/mbstring/libmbfl/tests/conv_kana.c new file mode 100644 index 0000000..c12fdc2 --- /dev/null +++ b/ext/mbstring/libmbfl/tests/conv_kana.c @@ -0,0 +1,147 @@ +/** + * this is a small sample script to use libmbfl. + * Rui Hirokawa <hirokawa@php.net> + * + * this file is encoded in EUC-JP. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "mbfl/mbfilter.h" + +static void hexdump(const mbfl_string *ptr) +{ + unsigned int i; + + for (i = 0; i < ptr->len; i++) { + printf("%%%02x", ptr->val[i]); + } + + printf(" (%u)\n", ptr->len); +} + +int main(int argc, char **argv) +{ + enum mbfl_no_encoding no_enc; + const enum mbfl_no_language no_lang = mbfl_no_language_japanese; + mbfl_memory_device dev; + mbfl_string string, result; + int final = 0; + int state = 0; + int mode = 0; + + if (argc < 3) { + fprintf(stderr, "Usage: %s encoding flags\n", argv[0]); + return EXIT_FAILURE; + } + + if ((no_enc = mbfl_name2no_encoding(argv[1])) == + mbfl_no_encoding_invalid) { + printf("Unsupported encoding: %s\n", argv[1]); + return EXIT_FAILURE; + } + + { + const char *p; + + for (p= argv[2] + strlen(argv[2]); p > argv[2]; ) { + switch (*(--p)) { + case 'A': + mode |= 0x1; + break; + case 'a': + mode |= 0x10; + break; + case 'R': + mode |= 0x2; + break; + case 'r': + mode |= 0x20; + break; + case 'N': + mode |= 0x4; + break; + case 'n': + mode |= 0x40; + break; + case 'S': + mode |= 0x8; + break; + case 's': + mode |= 0x80; + break; + case 'K': + mode |= 0x100; + break; + case 'k': + mode |= 0x1000; + break; + case 'H': + mode |= 0x200; + break; + case 'h': + mode |= 0x2000; + break; + case 'V': + mode |= 0x800; + break; + case 'C': + mode |= 0x10000; + break; + case 'c': + mode |= 0x20000; + break; + case 'M': + mode |= 0x100000; + break; + case 'm': + mode |= 0x200000; + break; + } + } + } + + do { + mbfl_memory_device_init(&dev, 0, 4096); + mbfl_string_init_set(&string, no_lang, no_enc); + + for (;;) { + const int c = fgetc(stdin); + + if (c == EOF) { + final = 1; + break; + } else if (c == 10) { + if (state == 1) { + state = 0; + continue; + } + break; + } else if (c == 13) { + state = 1; + break; + } + + if (dev.pos >= dev.length) { + if (dev.length + dev.allocsz < dev.length) { + printf("Unable to allocate memory\n"); + return EXIT_FAILURE; + } + + mbfl_memory_device_realloc(&dev, dev.length + dev.allocsz, + dev.allocsz); + } + + dev.buffer[dev.pos++] = (unsigned char)c; + } + + mbfl_memory_device_result(&dev, &string); + mbfl_ja_jp_hantozen(&string, &result, mode); + hexdump(&result); + mbfl_string_clear(&result); + mbfl_string_clear(&string); + } while (!final); + + return EXIT_SUCCESS; +} diff --git a/ext/mbstring/libmbfl/tests/conv_kana.tests/Makefile.am b/ext/mbstring/libmbfl/tests/conv_kana.tests/Makefile.am new file mode 100644 index 0000000..37713c3 --- /dev/null +++ b/ext/mbstring/libmbfl/tests/conv_kana.tests/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST=*.exp diff --git a/ext/mbstring/libmbfl/tests/conv_kana.tests/conv_kana.exp b/ext/mbstring/libmbfl/tests/conv_kana.tests/conv_kana.exp new file mode 100644 index 0000000..a6459fe --- /dev/null +++ b/ext/mbstring/libmbfl/tests/conv_kana.tests/conv_kana.exp @@ -0,0 +1,1098 @@ +#!/usr/bin/expect -f + +set timeout 1 + +set test "full-width alphabets to half-width counterparts" +spawn tests/conv_kana EUC-JP "r" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +close + +set test "half-width alphabets to full-width counterparts" +spawn tests/conv_kana EUC-JP "R" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +close + +set test "transliterate half-width alphabets to full-width counterparts and full-width to half-width at a time" +spawn tests/conv_kana EUC-JP "Rr" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +close + +set test "full-width numerics to half-width counterparts" +spawn tests/conv_kana EUC-JP "n" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +close + +set test "full-width numerics to half-width counterparts" +spawn tests/conv_kana EUC-JP "n" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +close + +set test "half-width numerics to full-width counterparts" +spawn tests/conv_kana EUC-JP "N" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +close + +set test "transliterate half-width numerics to full-width counterparts and full-width to half-width at a time" +spawn tests/conv_kana EUC-JP "nN" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%a3%b0%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +close + +set test "full-width alphanumerics to half-width counterparts" +spawn tests/conv_kana EUC-JP "a" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +close + +set test "half-width alphanumerics to full-width counterparts" +spawn tests/conv_kana EUC-JP "A" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +close + +set test "transliterate half-width alphanumerics to full-width counterparts and full-width to half-width at a time" +spawn tests/conv_kana EUC-JP "Aa" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%a3%b0%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +close + +set test "full-width spaces to half-width counterparts" +spawn tests/conv_kana EUC-JP "s" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%20%20 (2)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +close + +set test "half-width spaces to full-width counterparts" +spawn tests/conv_kana EUC-JP "S" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%a1%a1 (4)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +close + +set test "transliterate half-width spaces to full-width counterparts and full-width to half-width at a time" +spawn tests/conv_kana EUC-JP "Ss" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%20%a1%a1 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +close + +set test "full-width katakanas to half-width counterparts" +spawn tests/conv_kana EUC-JP "k" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (90)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%8e%de%a4%ad%8e%de%a4%af%8e%de%a4%b1%8e%de%a4%b3%8e%de%a4%cf%8e%df%a4%d2%8e%df%a4%d5%8e%df%a4%d8%8e%df%a4%db%8e%df (70)\r\n" { pass $test } +} +close + +set test "half-width katakanas to full-width counterparts" +spawn tests/conv_kana EUC-JP "K" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +close + +set test "transliterate half-width katakanas to full-width counterparts and full-width to half-width at a time" +spawn tests/conv_kana EUC-JP "kK" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (90)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%8e%de%a4%ad%8e%de%a4%af%8e%de%a4%b1%8e%de%a4%b3%8e%de%a4%cf%8e%df%a4%d2%8e%df%a4%d5%8e%df%a4%d8%8e%df%a4%db%8e%df (70)\r\n" { pass $test } +} +close + +set test "full-width hiraganas to half-width katakana" +spawn tests/conv_kana EUC-JP "h" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%8e%de%a5%ad%8e%de%a5%af%8e%de%a5%b1%8e%de%a5%b3%8e%de%a5%cf%8e%df%a5%d2%8e%df%a5%d5%8e%df%a5%d8%8e%df%a5%db%8e%df (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (90)\r\n" { pass $test } +} +close + +set test "half-width katakanas to full-width hiragana" +spawn tests/conv_kana EUC-JP "H" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +close + +set test "transliterate half-width katakanas to full-width hiraganas and full-width to half-width at a time" +spawn tests/conv_kana EUC-JP "hH" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%8e%de%a5%ad%8e%de%a5%af%8e%de%a5%b1%8e%de%a5%b3%8e%de%a5%cf%8e%df%a5%d2%8e%df%a5%d5%8e%df%a5%d8%8e%df%a5%db%8e%df (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (90)\r\n" { pass $test } +} +close + +set test "full-width katakanas to full-width hiragana" +spawn tests/conv_kana EUC-JP "c" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +close + +set test "full-width hiraganas to full-width katakana" +spawn tests/conv_kana EUC-JP "C" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +close + +set test "conversion between full-width hiraganas and full-width katakanas, flags for both directions are specified at a time" +spawn tests/conv_kana EUC-JP "Cc" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%8e%b1%8e%b2%8e%b3%8e%b4%8e%b5%8e%b6%8e%de%8e%b7%8e%de%8e%b8%8e%de%8e%b9%8e%de%8e%ba%8e%de%8e%ca%8e%df%8e%cb%8e%df%8e%cc%8e%df%8e%cd%8e%df%8e%ce%8e%df (50)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +close + +set test "half-width katakanas to full-width katakanas, with voiced marks combined" +spawn tests/conv_kana EUC-JP "KV" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd (30)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +close + +set test "half-width katakanas to full-width hiraganas, with voiced marks combined" +spawn tests/conv_kana EUC-JP "HV" +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} +send "£á£â£ã£ä£å£æ£ç£è£é£ê£ë£ì£í£î£ï£ð£ñ£ò£ó£ô£õ£ö£÷£ø£ù£ú\r" +expect { + -ex "%a3%e1%a3%e2%a3%e3%a3%e4%a3%e5%a3%e6%a3%e7%a3%e8%a3%e9%a3%ea%a3%eb%a3%ec%a3%ed%a3%ee%a3%ef%a3%f0%a3%f1%a3%f2%a3%f3%a3%f4%a3%f5%a3%f6%a3%f7%a3%f8%a3%f9%a3%fa (52)\r\n" { pass $test } +} +send "£Á£Â£Ã£Ä£Å£Æ£Ç£È£É£Ê£Ë£Ì£Í£Î£Ï£Ð£Ñ£Ò£Ó£Ô£Õ£Ö£×£Ø£Ù£Ú\r" +expect { + -ex "%a3%c1%a3%c2%a3%c3%a3%c4%a3%c5%a3%c6%a3%c7%a3%c8%a3%c9%a3%ca%a3%cb%a3%cc%a3%cd%a3%ce%a3%cf%a3%d0%a3%d1%a3%d2%a3%d3%a3%d4%a3%d5%a3%d6%a3%d7%a3%d8%a3%d9%a3%da (52)\r\n" { pass $test } +} +send "abcdefghijklmnopqrstuvwxyz\r" +expect { + -ex "%61%62%63%64%65%66%67%68%69%6a%6b%6c%6d%6e%6f%70%71%72%73%74%75%76%77%78%79%7a (26)\r\n" { pass $test } +} +send "ABCDEFGHIJKLMNOPQRSTUVWXYZ\r" +expect { + -ex "%41%42%43%44%45%46%47%48%49%4a%4b%4c%4d%4e%4f%50%51%52%53%54%55%56%57%58%59%5a (26)\r\n" { pass $test } +} +send "0123456789\r" +expect { + -ex "%30%31%32%33%34%35%36%37%38%39 (10)\r\n" { pass $test } +} +send "£°£±£²£³£´£µ£¶£·£¸£¹\r" +expect { + -ex "%a3%b1%a3%b2%a3%b3%a3%b4%a3%b5%a3%b6%a3%b7%a3%b8%a3%b9 (20)\r\n" { pass $test } +} +send "¡¡ \r" +expect { + -ex "%a1%a1%20 (3)\r\n" { pass $test } +} +send "¥¢¥¤¥¦¥¨¥ª¥¬¥®¥°¥²¥´¥Ñ¥Ô¥×¥Ú¥Ý¥«¡«¥¡«¥¯¡«¥±¡«¥³¡«¥Ï¡¬¥Ò¡¬¥Õ¡¬¥Ø¡¬¥Û¡¬\r" +expect { + -ex "%a5%a2%a5%a4%a5%a6%a5%a8%a5%aa%a5%ac%a5%ae%a5%b0%a5%b2%a5%b4%a5%d1%a5%d4%a5%d7%a5%da%a5%dd%a5%ab%a1%ab%a5%ad%a1%ab%a5%af%a1%ab%a5%b1%a1%ab%a5%b3%a1%ab%a5%cf%a1%ac%a5%d2%a1%ac%a5%d5%a1%ac%a5%d8%a1%ac%a5%db%a1%ac (70)\r\n" { pass $test } +} +send "ޱ޲޳޴޵޶ŽÞŽ·ŽÞޏŽÞ޹ŽÞŽºŽÞŽÊŽßŽËŽßŽÌŽßŽÍŽßŽÎŽß\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd (30)\r\n" { pass $test } +} +send "¤¢¤¤¤¦¤¨¤ª¤¬¤®¤°¤²¤´¤Ñ¤Ô¤×¤Ú¤Ý¤«¡«¤¡«¤¯¡«¤±¡«¤³¡«¤Ï¡¬¤Ò¡¬¤Õ¡¬¤Ø¡¬¤Û¡¬\r" +expect { + -ex "%a4%a2%a4%a4%a4%a6%a4%a8%a4%aa%a4%ac%a4%ae%a4%b0%a4%b2%a4%b4%a4%d1%a4%d4%a4%d7%a4%da%a4%dd%a4%ab%a1%ab%a4%ad%a1%ab%a4%af%a1%ab%a4%b1%a1%ab%a4%b3%a1%ab%a4%cf%a1%ac%a4%d2%a1%ac%a4%d5%a1%ac%a4%d8%a1%ac%a4%db%a1%ac (70)\r\n" { pass $test } +} +close + + +# vim: sts=4 ts=4 sw=4 et encoding=EUC-JP diff --git a/ext/mbstring/libmbfl/tests/emoji.c b/ext/mbstring/libmbfl/tests/emoji.c new file mode 100644 index 0000000..4f6a346 --- /dev/null +++ b/ext/mbstring/libmbfl/tests/emoji.c @@ -0,0 +1,119 @@ +/** + * this is a small sample script to use libmbfl. + * Rui Hirokawa <hirokawa@php.net> + * + * this file is encoded in EUC-JP. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "mbfl/mbfilter.h" + +static void hexdump(const mbfl_string *ptr) +{ + unsigned int i; + + for (i = 0; i < ptr->len; i++) { + printf("%%%02x", ptr->val[i]); + } + + printf(" (%u)\n", ptr->len); +} + +//#define TEST_DOCOMO +//#define TEST_KDDI +#define TEST_SOFTBANK + +int main(int argc, char **argv) +{ + enum mbfl_no_encoding from_encoding, to_encoding; + enum mbfl_no_language no_language; + mbfl_buffer_converter *convd = NULL, *convd2 = NULL; + mbfl_memory_device dev, dev2; + mbfl_string string, result, *ret; +#ifdef TEST_DOCOMO + //char str[] = {0xF9,0xD7,0x00}; // U+2122 + //char str[] = {0xF9,0x82,0x00}; // U+1F195 + char str[] = {0xF9,0xD6,0x00}; // U+00A9 +#endif +#ifdef TEST_KDDI + //char str[] = {0xF7,0x6A,0x00};// U+2122 + //char str[] = {0xF7,0xE5,0x00}; // U+1F195 + //char str[] = {0xF3,0xD2,0x00}; // U+1F1E8 U+1F1F3 + char str[] = {0xF7,0x74,0x00}; // U+00A9 +#endif +#ifdef TEST_SOFTBANK + //char str[] = {0xFB,0xD7,0x00};// U+2122 + //char str[] = {0xF7,0xB2,0x00}; // U+1F195 + //char str[] = {0xFB,0xB3,0x00}; // U+1F1E8 U+1F1F3 + char str[] = {0xF7,0xEE,0x00}; // U+00A9 +#endif + int final = 0; + int state = 0; + int i; + + no_language = mbfl_name2no_language("Japanese"); +#ifdef TEST_DOCOMO + from_encoding = mbfl_name2no_encoding("SJIS-win#DOCOMO"); +#endif +#ifdef TEST_KDDI + from_encoding = mbfl_name2no_encoding("SJIS-win#KDDI"); +#endif +#ifdef TEST_SOFTBANK + from_encoding = mbfl_name2no_encoding("SJIS-win#SOFTBANK"); +#endif + to_encoding = mbfl_name2no_encoding("UTF-8"); + + convd = mbfl_buffer_converter_new(from_encoding, to_encoding, 0); + + mbfl_memory_device_init(&dev, 0, 4096); + mbfl_string_init_set(&string, no_language, from_encoding); + mbfl_memory_device_realloc(&dev, dev.length + dev.allocsz, dev.allocsz); + + strcpy(dev.buffer, str); + dev.pos += strlen(str); + + mbfl_memory_device_result(&dev, &string); + mbfl_string_init_set(&result, no_language, to_encoding); + ret = mbfl_buffer_converter_feed_result(convd, &string, &result); + +#if 0 + for (i = 0; i < result.len; i+= 2) { + if (result.val[i] >= 0xD8 && result.val[i] < 0xE0) { // Surrogate pair + int h = (result.val[i] & 0x07)<<8 | result.val[i+1]; + int l = (result.val[i+2] & 0x03)<<8 | result.val[i+3]; + int c = (h<<(2+8)) | l; + printf("U+%x\n",c+0x10000); + i+=2; + } else { + printf("U+%x\n",(result.val[i] << 8) | result.val[i+1]); + } + } + hexdump(&result); +#endif + + +#if 1 + convd2 = mbfl_buffer_converter_new(to_encoding, from_encoding, 0); + mbfl_memory_device_init(&dev2, 0, 4096); + mbfl_string_init_set(&string, no_language, to_encoding); + mbfl_memory_device_realloc(&dev2, dev2.length + dev2.allocsz, dev2.allocsz); + + memcpy(dev2.buffer, result.val, result.len+1); + dev2.pos += strlen(dev2.buffer); + + mbfl_memory_device_result(&dev2, &string); + mbfl_string_init_set(&result, no_language, from_encoding); + ret = mbfl_buffer_converter_feed_result(convd2, &string, &result); + hexdump(&result); + mbfl_buffer_converter_delete(convd2); +#endif + mbfl_string_clear(&result); + mbfl_string_clear(&string); + + mbfl_buffer_converter_delete(convd); + + + return EXIT_SUCCESS; +} diff --git a/ext/mbstring/libmbfl/tests/sample.c b/ext/mbstring/libmbfl/tests/sample.c new file mode 100644 index 0000000..d961964 --- /dev/null +++ b/ext/mbstring/libmbfl/tests/sample.c @@ -0,0 +1,38 @@ +/** + * this is a small sample script to use libmbfl. + * Rui Hirokawa <hirokawa@php.net> + * + * this file is encoded in EUC-JP. + */ + +#include <stdio.h> +#include "../mbfl/mbfilter.h" + +int main() +{ + enum mbfl_no_encoding from_encoding, to_encoding; + enum mbfl_no_language no_language; + mbfl_buffer_converter *convd = NULL; + mbfl_string string, result, *ret; + mbfl_language lang; + unsigned char input[] = "ÆüËܸìʸ»úÎó"; /* EUC-JP kanji string */ + + no_language = mbfl_name2no_language("Japanese"); + from_encoding = mbfl_name2no_encoding("EUC-JP"); + to_encoding = mbfl_name2no_encoding("SJIS"); + + mbfl_string_init(&string); + mbfl_string_init(&result); + + string.no_encoding = from_encoding; + string.no_language = no_language; + string.val = (unsigned char *)input; + string.len = strlen(input); + + convd = mbfl_buffer_converter_new(from_encoding, to_encoding, 0); + ret = mbfl_buffer_converter_feed_result(convd, &string, &result); + mbfl_buffer_converter_delete(convd); + + puts(ret->val); + return 1; +} diff --git a/ext/mbstring/libmbfl/tests/strcut.c b/ext/mbstring/libmbfl/tests/strcut.c new file mode 100644 index 0000000..2d6a873 --- /dev/null +++ b/ext/mbstring/libmbfl/tests/strcut.c @@ -0,0 +1,113 @@ +/** + * this is a small sample script to use libmbfl. + * Rui Hirokawa <hirokawa@php.net> + * + * this file is encoded in EUC-JP. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include "mbfl/mbfilter.h" + +static void hexdump(const mbfl_string *ptr) +{ + unsigned int i; + + for (i = 0; i < ptr->len; i++) { + printf("%%%02x", ptr->val[i]); + } + + printf(" (%u)\n", ptr->len); +} + +int main(int argc, char **argv) +{ + enum mbfl_no_encoding no_encoding; + enum mbfl_no_language no_language; + mbfl_memory_device dev; + mbfl_string string; + int offset, length; + int final = 0; + int state = 0; + + if (argc < 5) { + fprintf(stderr, "Usage: %s lang encoding offset length\n", argv[0]); + return EXIT_FAILURE; + } + + if ((no_language = mbfl_name2no_language(argv[1])) == + mbfl_no_language_invalid) { + printf("Unsupported NLS: %s\n", argv[1]); + return EXIT_FAILURE; + } + + if ((no_encoding = mbfl_name2no_encoding(argv[2])) == + mbfl_no_encoding_invalid) { + printf("Unsupported encoding: %s\n", argv[2]); + return EXIT_FAILURE; + } + + errno = 0; + offset = strtol(argv[3], NULL, 10); + if (errno) { + printf("Invalid offset: %s\n", argv[3]); + return EXIT_FAILURE; + } + + length = strtol(argv[4], NULL, 10); + if (errno) { + printf("Invalid length: %s\n", argv[4]); + return EXIT_FAILURE; + } + + + do { + mbfl_string result; + + mbfl_memory_device_init(&dev, 0, 4096); + mbfl_string_init_set(&string, no_language, no_encoding); + + for (;;) { + const int c = fgetc(stdin); + + if (c == EOF) { + final = 1; + break; + } else if (c == 10) { + if (state == 1) { + state = 0; + continue; + } + break; + } else if (c == 13) { + state = 1; + break; + } + + if (dev.pos >= dev.length) { + if (dev.length + dev.allocsz < dev.length) { + printf("Unable to allocate memory\n"); + return EXIT_FAILURE; + } + + mbfl_memory_device_realloc(&dev, dev.length + dev.allocsz, + dev.allocsz); + } + + dev.buffer[dev.pos++] = (unsigned char)c; + } + + mbfl_memory_device_result(&dev, &string); + if (mbfl_strcut(&string, &result, offset, length)) { + hexdump(&result); + mbfl_string_clear(&result); + } else { + printf("***ERROR***\n"); + } + mbfl_string_clear(&string); + } while (!final); + + return EXIT_SUCCESS; +} diff --git a/ext/mbstring/libmbfl/tests/strcut.tests/Makefile.am b/ext/mbstring/libmbfl/tests/strcut.tests/Makefile.am new file mode 100644 index 0000000..37713c3 --- /dev/null +++ b/ext/mbstring/libmbfl/tests/strcut.tests/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST=*.exp diff --git a/ext/mbstring/libmbfl/tests/strcut.tests/iso2022jp.exp b/ext/mbstring/libmbfl/tests/strcut.tests/iso2022jp.exp new file mode 100644 index 0000000..7e3d0fd --- /dev/null +++ b/ext/mbstring/libmbfl/tests/strcut.tests/iso2022jp.exp @@ -0,0 +1,129 @@ +#!/usr/bin/expect -f +proc begin_strcut_test {_from _length} { + global spawn_id from length + set from $_from + set length $_length + + spawn tests/strcut Japanese "ISO-2022-JP" $_from $_length + set timeout 10 + + expect_after { + "\[^\r\n\]*\r\n" { fail $test } + } +} + +begin_strcut_test -1 2 + +set test "asciish characters ($from, $length)" +send "testtest\r" +expect { + -ex "***ERROR***\r\n" { pass $test } +} + +set test "non-asciish characters ($from, $length)" +send "\x1b\$B%F%9%H%F%9%H\x1b(B\r" +sleep 1 +expect { + -ex "***ERROR***\r\n" { pass $test } +} + +close +begin_strcut_test 2 -1 + +set test "asciish characters ($from, $length)" +send "testtest\r" +expect { + -ex "***ERROR***\r\n" { pass $test } +} + +set test "non-asciish characters ($from, $length)" +send "\x1b\$B%F%9%H%F%9%H\x1b(B\r" +sleep 1 +expect { + -ex "***ERROR***\r\n" { pass $test } +} + +close +begin_strcut_test 3 2 + +set test "asciish characters ($from, $length)" +send "testtest\r" +expect { + -ex "%74%74 (2)\r\n" { pass $test } +} + +set test "non-asciish characters ($from, $length)" +send "\x1b\$B%F%9%H%F%9%H\x1b(B\r" +sleep 1 +expect { + -ex " (0)\r\n" { pass $test } +} + +close +begin_strcut_test 5 8 + +set test "asciish characters ($from, $length)" +send "testtest\r" +expect { + -ex "%65%73%74 (3)\r\n" { pass $test } +} + +set test "non-asciish characters ($from, $length)" +sleep 1 +send "\x1b\$B%F%9%H%F%9%H\x1b(B\r" +sleep 1 +expect { + -ex "%1b%24%42%25%39%1b%28%42 (8)\r\n" { pass $test } +} + +close +begin_strcut_test 1 15 + +set test "asciish characters ($from, $length)" +send "testestestestestes\r" +expect { + "%65%73%74%65%73%74%65%73%74%65%73%74%65%73%74 (15)\r\n" { pass $test } +} + +set test "non-asciish characters ($from, $length)" +send "\x1b\$B%F%9%H%F%9%H\x1b(B\r" +sleep 1 +expect { + -ex "%1b%24%42%25%46%25%39%25%48%25%46%1b%28%42 (14)\r\n" { pass $test } +} +close +begin_strcut_test 8 20 + +set test "non-asciish characters (2) ($from, $length)" +send "\x1b\x24\x42\x25\x46\x1b\x28\x42\x74\x1b\x24\x42\x25\x39\x1b\x28\x42\x74\x1b\x24\x42\x25\x48\x24\x46\x24\x39\x24\x48\x1b\x28\x49\x4a\x5e\x4a\x5e\x4a\x5e\x43\x3d\x44\x1b\x28\x42\x74\x1b\x24\x42\x25\x46\x1b\x28\x42\x74\x1b\x24\x42\x25\x39\x1b\x28\x42\x74\x1b\x24\x42\x25\x48\x1b\x28\x42\x74\x1b\x24\x42\x25\x46\x1b\x28\x42\x74\x1b\x24\x42\x25\x39\x1b\x28\x42\x74\x1b\x24\x42\x25\x48\x1b\x28\x42\x74\x1b\x24\x42\x25\x46\x1b\x28\x42\x74\x1b\x24\x42\x25\x39\x1b\x28\x42\x74\x1b\x24\x42\x25\x48\x1b\x28\x42\x74\r" +sleep 1 +expect { + -ex "%74%1b%24%42%25%39%1b%28%42%74%1b%24%42%25%48%24%46%1b%28%42 (20)\r\n" { + pass $test + } +} + +begin_strcut_test 8 21 + +set test "non-asciish characters (2) ($from, $length)" +send "\x1b\x24\x42\x25\x46\x1b\x28\x42\x74\x1b\x24\x42\x25\x39\x1b\x28\x42\x74\x1b\x24\x42\x25\x48\x24\x46\x24\x39\x24\x48\x1b\x28\x49\x4a\x5e\x4a\x5e\x4a\x5e\x43\x3d\x44\x1b\x28\x42\x74\x1b\x24\x42\x25\x46\x1b\x28\x42\x74\x1b\x24\x42\x25\x39\x1b\x28\x42\x74\x1b\x24\x42\x25\x48\x1b\x28\x42\x74\x1b\x24\x42\x25\x46\x1b\x28\x42\x74\x1b\x24\x42\x25\x39\x1b\x28\x42\x74\x1b\x24\x42\x25\x48\x1b\x28\x42\x74\x1b\x24\x42\x25\x46\x1b\x28\x42\x74\x1b\x24\x42\x25\x39\x1b\x28\x42\x74\x1b\x24\x42\x25\x48\x1b\x28\x42\x74\r" +sleep 1 +expect { + -ex "%74%1b%24%42%25%39%1b%28%42%74%1b%24%42%25%48%24%46%1b%28%42 (20)\r\n" { + pass $test + } +} + +begin_strcut_test 11 17 + +set test "non-asciish characters (2) ($from, $length)" +send "\x1b\x24\x42\x25\x46\x1b\x28\x42\x74\x1b\x24\x42\x25\x39\x1b\x28\x42\x74\x1b\x24\x42\x25\x48\x24\x46\x24\x39\x24\x48\x1b\x28\x49\x4a\x5e\x4a\x5e\x4a\x5e\x43\x3d\x44\x1b\x28\x42\x74\x1b\x24\x42\x25\x46\x1b\x28\x42\x74\x1b\x24\x42\x25\x39\x1b\x28\x42\x74\x1b\x24\x42\x25\x48\x1b\x28\x42\x74\x1b\x24\x42\x25\x46\x1b\x28\x42\x74\x1b\x24\x42\x25\x39\x1b\x28\x42\x74\x1b\x24\x42\x25\x48\x1b\x28\x42\x74\x1b\x24\x42\x25\x46\x1b\x28\x42\x74\x1b\x24\x42\x25\x39\x1b\x28\x42\x74\x1b\x24\x42\x25\x48\x1b\x28\x42\x74\r" +sleep 1 +expect { + -ex "%1b%24%42%25%39%1b%28%42%74%1b%24%42%25%48%1b%28%42 (17)\r\n" { + pass $test + } +} + + +# vim: sts=4 sw=4 ts=4 et diff --git a/ext/mbstring/libmbfl/tests/strcut.tests/ujis.exp b/ext/mbstring/libmbfl/tests/strcut.tests/ujis.exp new file mode 100644 index 0000000..8ad6f95 --- /dev/null +++ b/ext/mbstring/libmbfl/tests/strcut.tests/ujis.exp @@ -0,0 +1,91 @@ +#!/usr/bin/expect -f +proc begin_strcut_test {_from _length} { + global spawn_id from length + set from $_from + set length $_length + + spawn tests/strcut Japanese EUC-JP $_from $_length + set timeout 1 + + expect_after { + "\[^\r\n\]*\r\n" { fail $test } + } +} + +begin_strcut_test -1 2 + +set test "asciish characters ($from, $length)" +send "testtest\r" +expect { + -ex "***ERROR***\r\n" { pass $test } +} + +set test "non-asciish characters ($from, $length)" +send "¥Æ¥¹¥È¥Æ¥¹¥È\r" +expect { + -ex "***ERROR***\r\n" { pass $test } +} + +close +begin_strcut_test 2 -1 + +set test "asciish characters ($from, $length)" +send "testtest\r" +expect { + -ex "***ERROR***\r\n" { pass $test } +} + +set test "non-asciish characters ($from, $length)" +send "¥Æ¥¹¥È¥Æ¥¹¥È\r" +expect { + -ex "***ERROR***\r\n" { pass $test } +} + +close +begin_strcut_test 3 2 + +set test "asciish characters ($from, $length)" +send "testtest\r" +expect { + -ex "%74%74 (2)\r\n" { pass $test } +} + +set test "non-asciish characters ($from, $length)" +send "¥Æ¥¹¥È¥Æ¥¹¥È\r" +expect { + -ex "%a5%b9 (2)\r\n" { pass $test } +} + +close +begin_strcut_test 5 8 + +set test "asciish characters ($from, $length)" +send "testtest\r" +expect { + -ex "%65%73%74 (3)\r\n" { pass $test } +} + +set test "non-asciish characters ($from, $length)" +send "¥Æ¥¹¥È¥Æ¥¹¥È\r" +expect { + -ex "%a5%c8%a5%c6%a5%b9%a5%c8 (8)\r\n" { pass $test } +} + +close +begin_strcut_test 1 15 + +set test "asciish characters ($from, $length)" +send "testestestestestes\r" +expect { + "%65%73%74%65%73%74%65%73%74%65%73%74%65%73%74 (15)\r\n" { pass $test } +} + +set test "non-asciish characters ($from, $length)" +send "¥Æ¥¹¥È¥Æ¥¹¥È\r" +expect { + -ex "%a5%c6%a5%b9%a5%c8%a5%c6%a5%b9%a5%c8 (12)\r\n" { pass $test } +} +close + + +# vim: sts=4 sw=4 ts=4 et encoding=EUC-JP diff --git a/ext/mbstring/libmbfl/tests/strcut.tests/utf8.exp b/ext/mbstring/libmbfl/tests/strcut.tests/utf8.exp new file mode 100644 index 0000000..5104bf1 --- /dev/null +++ b/ext/mbstring/libmbfl/tests/strcut.tests/utf8.exp @@ -0,0 +1,91 @@ +#!/usr/bin/expect -f +proc begin_strcut_test {_from _length} { + global spawn_id from length + set from $_from + set length $_length + + spawn tests/strcut Japanese UTF-8 $_from $_length + set timeout 1 + + expect_after { + "\[^\r\n\]*\r\n" { fail $test } + } +} + +begin_strcut_test -1 2 + +set test "asciish characters ($from, $length)" +send "testtest\r" +expect { + -ex "***ERROR***\r\n" { pass $test } +} + +set test "non-asciish characters ($from, $length)" +send "テストテスト\r" +expect { + -ex "***ERROR***\r\n" { pass $test } +} + +close +begin_strcut_test 2 -1 + +set test "asciish characters ($from, $length)" +send "testtest\r" +expect { + -ex "***ERROR***\r\n" { pass $test } +} + +set test "non-asciish characters ($from, $length)" +send "テストテスト\r" +expect { + -ex "***ERROR***\r\n" { pass $test } +} + +close +begin_strcut_test 3 2 + +set test "asciish characters ($from, $length)" +send "testtest\r" +expect { + -ex "%74%74 (2)\r\n" { pass $test } +} + +set test "non-asciish characters ($from, $length)" +send "テストテスト\r" +expect { + -ex "(0)\r\n" { pass $test } +} + +close +begin_strcut_test 5 8 + +set test "asciish characters ($from, $length)" +send "testtest\r" +expect { + -ex "%65%73%74 (3)\r\n" { pass $test } +} + +set test "non-asciish characters ($from, $length)" +send "テストテスト\r" +expect { + -ex "%e3%82%b9%e3%83%88 (6)\r\n" { pass $test } +} + +close +begin_strcut_test 1 15 + +set test "asciish characters ($from, $length)" +send "testestestestestes\r" +expect { + "%65%73%74%65%73%74%65%73%74%65%73%74%65%73%74 (15)\r\n" { pass $test } +} + +set test "non-asciish characters ($from, $length)" +send "テストテスト\r" +expect { + -ex "%e3%83%86%e3%82%b9%e3%83%88%e3%83%86%e3%82%b9 (15)\r\n" { pass $test } +} +close + + +# vim: sts=4 sw=4 ts=4 et encoding=UTF-8 diff --git a/ext/mbstring/libmbfl/tests/strwidth.c b/ext/mbstring/libmbfl/tests/strwidth.c new file mode 100644 index 0000000..72b4b73 --- /dev/null +++ b/ext/mbstring/libmbfl/tests/strwidth.c @@ -0,0 +1,79 @@ +/** + * this is a small sample script to use libmbfl. + * Rui Hirokawa <hirokawa@php.net> + * + * this file is encoded in EUC-JP. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "mbfl/mbfilter.h" + +int main(int argc, char **argv) +{ + enum mbfl_no_encoding no_encoding; + enum mbfl_no_language no_language; + mbfl_memory_device dev; + mbfl_string string; + int final = 0; + int state = 0; + + if (argc < 3) { + fprintf(stderr, "Usage: %s lang encoding\n", argv[0]); + return EXIT_FAILURE; + } + + if ((no_language = mbfl_name2no_language(argv[1])) == + mbfl_no_language_invalid) { + printf("Unsupported NLS: %s\n", argv[1]); + return EXIT_FAILURE; + } + + if ((no_encoding = mbfl_name2no_encoding(argv[2])) == + mbfl_no_encoding_invalid) { + printf("Unsupported encoding: %s\n", argv[2]); + return EXIT_FAILURE; + } + + do { + mbfl_memory_device_init(&dev, 0, 4096); + mbfl_string_init_set(&string, no_language, no_encoding); + + for (;;) { + const int c = fgetc(stdin); + + if (c == EOF) { + final = 1; + break; + } else if (c == 10) { + if (state == 1) { + state = 0; + continue; + } + break; + } else if (c == 13) { + state = 1; + break; + } + + if (dev.pos >= dev.length) { + if (dev.length + dev.allocsz < dev.length) { + printf("Unable to allocate memory\n"); + return EXIT_FAILURE; + } + + mbfl_memory_device_realloc(&dev, dev.length + dev.allocsz, + dev.allocsz); + } + + dev.buffer[dev.pos++] = (unsigned char)c; + } + + mbfl_memory_device_result(&dev, &string); + printf("%d\n", mbfl_strwidth(&string)); + mbfl_string_clear(&string); + } while (!final); + + return EXIT_SUCCESS; +} diff --git a/ext/mbstring/libmbfl/tests/strwidth.tests/Makefile.am b/ext/mbstring/libmbfl/tests/strwidth.tests/Makefile.am new file mode 100644 index 0000000..37713c3 --- /dev/null +++ b/ext/mbstring/libmbfl/tests/strwidth.tests/Makefile.am @@ -0,0 +1 @@ +EXTRA_DIST=*.exp diff --git a/ext/mbstring/libmbfl/tests/strwidth.tests/strwidth.exp b/ext/mbstring/libmbfl/tests/strwidth.tests/strwidth.exp new file mode 100644 index 0000000..09f518c --- /dev/null +++ b/ext/mbstring/libmbfl/tests/strwidth.tests/strwidth.exp @@ -0,0 +1,47 @@ +#!/usr/bin/expect -f +spawn tests/strwidth Japanese UTF-8 +set timeout 1 + +expect_after { + "\[^\r\n\]*\r\n" { fail $test } +} + +set test "basic test" +send "testtest\r" +expect { + "8\r\n" { pass $test } +} + +set test "CJK kanji" +send "æ¼¢å—\r" +expect { + "4\r\n" { pass $test } +} + +set test "CJK hiragana" +send "ã²ã‚‰ãŒãª\r" +expect { + "8\r\n" { pass $test } +} + +set test "CJK katakana" +send "カタカナ\r" +expect { + "8\r\n" { pass $test } +} + +set test "Fullwidth symbols (1)" +send "〜ï¼â€ï¼ƒï¼„%&’())\r" +expect { + "20\r\n" { pass $test } +} + +set test "Halfwidth symbols assumed to be fullwidth in JISX0208 (2)" +send "â—‹â—â—Ž\r" +expect { + "3\r\n" { pass $test } +} + +close + +# vim: sts=4 sw=4 ts=4 et encoding=UTF-8 diff --git a/ext/mbstring/mb_gpc.c b/ext/mbstring/mb_gpc.c new file mode 100644 index 0000000..5ecc8f3 --- /dev/null +++ b/ext/mbstring/mb_gpc.c @@ -0,0 +1,398 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2013 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Rui Hirokawa <hirokawa@php.net> | + | Moriyoshi Koizumi <moriyoshi@php.net> | + +----------------------------------------------------------------------+ + */ + +/* $Id$ */ + +/* {{{ includes */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "php.h" +#include "php_ini.h" +#include "php_variables.h" +#include "libmbfl/mbfl/mbfilter_pass.h" +#include "mbstring.h" +#include "ext/standard/php_string.h" +#include "ext/standard/php_mail.h" +#include "ext/standard/url.h" +#include "main/php_output.h" +#include "ext/standard/info.h" + +#include "php_variables.h" +#include "php_globals.h" +#include "rfc1867.h" +#include "php_content_types.h" +#include "SAPI.h" +#include "TSRM.h" + +#include "mb_gpc.h" +/* }}} */ + +#if HAVE_MBSTRING + +ZEND_EXTERN_MODULE_GLOBALS(mbstring) + +/* {{{ MBSTRING_API SAPI_TREAT_DATA_FUNC(mbstr_treat_data) + * http input processing */ +MBSTRING_API SAPI_TREAT_DATA_FUNC(mbstr_treat_data) +{ + char *res = NULL, *separator=NULL; + const char *c_var; + zval *array_ptr; + int free_buffer=0; + const mbfl_encoding *detected; + php_mb_encoding_handler_info_t info; + + if (arg != PARSE_STRING) { + char *value = MBSTRG(internal_encoding_name); + _php_mb_ini_mbstring_internal_encoding_set(value, value ? strlen(value): 0 TSRMLS_CC); + } + + if (!MBSTRG(encoding_translation)) { + php_default_treat_data(arg, str, destArray TSRMLS_CC); + return; + } + + switch (arg) { + case PARSE_POST: + case PARSE_GET: + case PARSE_COOKIE: + ALLOC_ZVAL(array_ptr); + array_init(array_ptr); + INIT_PZVAL(array_ptr); + switch (arg) { + case PARSE_POST: + PG(http_globals)[TRACK_VARS_POST] = array_ptr; + break; + case PARSE_GET: + PG(http_globals)[TRACK_VARS_GET] = array_ptr; + break; + case PARSE_COOKIE: + PG(http_globals)[TRACK_VARS_COOKIE] = array_ptr; + break; + } + break; + default: + array_ptr=destArray; + break; + } + + if (arg==PARSE_POST) { + sapi_handle_post(array_ptr TSRMLS_CC); + return; + } + + if (arg == PARSE_GET) { /* GET data */ + c_var = SG(request_info).query_string; + if (c_var && *c_var) { + res = (char *) estrdup(c_var); + free_buffer = 1; + } else { + free_buffer = 0; + } + } else if (arg == PARSE_COOKIE) { /* Cookie data */ + c_var = SG(request_info).cookie_data; + if (c_var && *c_var) { + res = (char *) estrdup(c_var); + free_buffer = 1; + } else { + free_buffer = 0; + } + } else if (arg == PARSE_STRING) { /* String data */ + res = str; + free_buffer = 1; + } + + if (!res) { + return; + } + + switch (arg) { + case PARSE_POST: + case PARSE_GET: + case PARSE_STRING: + separator = (char *) estrdup(PG(arg_separator).input); + break; + case PARSE_COOKIE: + separator = ";\0"; + break; + } + + switch(arg) { + case PARSE_POST: + MBSTRG(http_input_identify_post) = NULL; + break; + case PARSE_GET: + MBSTRG(http_input_identify_get) = NULL; + break; + case PARSE_COOKIE: + MBSTRG(http_input_identify_cookie) = NULL; + break; + case PARSE_STRING: + MBSTRG(http_input_identify_string) = NULL; + break; + } + + info.data_type = arg; + info.separator = separator; + info.report_errors = 0; + info.to_encoding = MBSTRG(internal_encoding); + info.to_language = MBSTRG(language); + info.from_encodings = MBSTRG(http_input_list); + info.num_from_encodings = MBSTRG(http_input_list_size); + info.from_language = MBSTRG(language); + + MBSTRG(illegalchars) = 0; + + detected = _php_mb_encoding_handler_ex(&info, array_ptr, res TSRMLS_CC); + MBSTRG(http_input_identify) = detected; + + if (detected) { + switch(arg){ + case PARSE_POST: + MBSTRG(http_input_identify_post) = detected; + break; + case PARSE_GET: + MBSTRG(http_input_identify_get) = detected; + break; + case PARSE_COOKIE: + MBSTRG(http_input_identify_cookie) = detected; + break; + case PARSE_STRING: + MBSTRG(http_input_identify_string) = detected; + break; + } + } + + if (arg != PARSE_COOKIE) { + efree(separator); + } + + if (free_buffer) { + efree(res); + } +} +/* }}} */ + +/* {{{ mbfl_no_encoding _php_mb_encoding_handler_ex() */ +const mbfl_encoding *_php_mb_encoding_handler_ex(const php_mb_encoding_handler_info_t *info, zval *arg, char *res TSRMLS_DC) +{ + char *var, *val; + const char *s1, *s2; + char *strtok_buf = NULL, **val_list = NULL; + zval *array_ptr = (zval *) arg; + int n, num, *len_list = NULL; + unsigned int val_len, new_val_len; + mbfl_string string, resvar, resval; + const mbfl_encoding *from_encoding = NULL; + mbfl_encoding_detector *identd = NULL; + mbfl_buffer_converter *convd = NULL; + + mbfl_string_init_set(&string, info->to_language, info->to_encoding->no_encoding); + mbfl_string_init_set(&resvar, info->to_language, info->to_encoding->no_encoding); + mbfl_string_init_set(&resval, info->to_language, info->to_encoding->no_encoding); + + if (!res || *res == '\0') { + goto out; + } + + /* count the variables(separators) contained in the "res". + * separator may contain multiple separator chars. + */ + num = 1; + for (s1=res; *s1 != '\0'; s1++) { + for (s2=info->separator; *s2 != '\0'; s2++) { + if (*s1 == *s2) { + num++; + } + } + } + num *= 2; /* need space for variable name and value */ + + val_list = (char **)ecalloc(num, sizeof(char *)); + len_list = (int *)ecalloc(num, sizeof(int)); + + /* split and decode the query */ + n = 0; + strtok_buf = NULL; + var = php_strtok_r(res, info->separator, &strtok_buf); + while (var) { + val = strchr(var, '='); + if (val) { /* have a value */ + len_list[n] = php_url_decode(var, val-var); + val_list[n] = var; + n++; + + *val++ = '\0'; + val_list[n] = val; + len_list[n] = php_url_decode(val, strlen(val)); + } else { + len_list[n] = php_url_decode(var, strlen(var)); + val_list[n] = var; + n++; + + val_list[n] = ""; + len_list[n] = 0; + } + n++; + var = php_strtok_r(NULL, info->separator, &strtok_buf); + } + + if (n > (PG(max_input_vars) * 2)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Input variables exceeded %ld. To increase the limit change max_input_vars in php.ini.", PG(max_input_vars)); + goto out; + } + + num = n; /* make sure to process initilized vars only */ + + /* initialize converter */ + if (info->num_from_encodings <= 0) { + from_encoding = &mbfl_encoding_pass; + } else if (info->num_from_encodings == 1) { + from_encoding = info->from_encodings[0]; + } else { + /* auto detect */ + from_encoding = NULL; + identd = mbfl_encoding_detector_new2(info->from_encodings, info->num_from_encodings, MBSTRG(strict_detection)); + if (identd != NULL) { + n = 0; + while (n < num) { + string.val = (unsigned char *)val_list[n]; + string.len = len_list[n]; + if (mbfl_encoding_detector_feed(identd, &string)) { + break; + } + n++; + } + from_encoding = mbfl_encoding_detector_judge2(identd); + mbfl_encoding_detector_delete(identd); + } + if (!from_encoding) { + if (info->report_errors) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to detect encoding"); + } + from_encoding = &mbfl_encoding_pass; + } + } + + convd = NULL; + if (from_encoding != &mbfl_encoding_pass) { + convd = mbfl_buffer_converter_new2(from_encoding, info->to_encoding, 0); + if (convd != NULL) { + mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode)); + mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar)); + } else { + if (info->report_errors) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create converter"); + } + goto out; + } + } + + /* convert encoding */ + string.no_encoding = from_encoding->no_encoding; + + n = 0; + while (n < num) { + string.val = (unsigned char *)val_list[n]; + string.len = len_list[n]; + if (convd != NULL && mbfl_buffer_converter_feed_result(convd, &string, &resvar) != NULL) { + var = (char *)resvar.val; + } else { + var = val_list[n]; + } + n++; + string.val = (unsigned char *)val_list[n]; + string.len = len_list[n]; + if (convd != NULL && mbfl_buffer_converter_feed_result(convd, &string, &resval) != NULL) { + val = (char *)resval.val; + val_len = resval.len; + } else { + val = val_list[n]; + val_len = len_list[n]; + } + n++; + /* we need val to be emalloc()ed */ + val = estrndup(val, val_len); + if (sapi_module.input_filter(info->data_type, var, &val, val_len, &new_val_len TSRMLS_CC)) { + /* add variable to symbol table */ + php_register_variable_safe(var, val, new_val_len, array_ptr TSRMLS_CC); + } + efree(val); + + if (convd != NULL){ + mbfl_string_clear(&resvar); + mbfl_string_clear(&resval); + } + } + +out: + if (convd != NULL) { + MBSTRG(illegalchars) += mbfl_buffer_illegalchars(convd); + mbfl_buffer_converter_delete(convd); + } + if (val_list != NULL) { + efree((void *)val_list); + } + if (len_list != NULL) { + efree((void *)len_list); + } + + return from_encoding; +} +/* }}} */ + +/* {{{ SAPI_POST_HANDLER_FUNC(php_mb_post_handler) */ +SAPI_POST_HANDLER_FUNC(php_mb_post_handler) +{ + const mbfl_encoding *detected; + php_mb_encoding_handler_info_t info; + + MBSTRG(http_input_identify_post) = NULL; + + info.data_type = PARSE_POST; + info.separator = "&"; + info.report_errors = 0; + info.to_encoding = MBSTRG(internal_encoding); + info.to_language = MBSTRG(language); + info.from_encodings = MBSTRG(http_input_list); + info.num_from_encodings = MBSTRG(http_input_list_size); + info.from_language = MBSTRG(language); + + detected = _php_mb_encoding_handler_ex(&info, arg, SG(request_info).post_data TSRMLS_CC); + + MBSTRG(http_input_identify) = detected; + if (detected) { + MBSTRG(http_input_identify_post) = detected; + } +} +/* }}} */ + +#endif /* HAVE_MBSTRING */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: fdm=marker + * vim: noet sw=4 ts=4 + */ + diff --git a/ext/mbstring/mb_gpc.h b/ext/mbstring/mb_gpc.h new file mode 100644 index 0000000..ab6fcc8 --- /dev/null +++ b/ext/mbstring/mb_gpc.h @@ -0,0 +1,61 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | Copyright (c) 2001 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Rui Hirokawa <hirokawa@php.net> | + | Moriyoshi Koizumi <moriyoshi@php.net> | + +----------------------------------------------------------------------+ + */ + +/* $Id$ */ + +/* {{{ includes */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "php.h" +/* }}} */ + +#if HAVE_MBSTRING +/* {{{ typedefs */ +typedef struct _php_mb_encoding_handler_info_t { + int data_type; + const char *separator; + unsigned int report_errors: 1; + enum mbfl_no_language to_language; + const mbfl_encoding *to_encoding; + enum mbfl_no_language from_language; + const mbfl_encoding **from_encodings; + size_t num_from_encodings; +} php_mb_encoding_handler_info_t; + +/* }}}*/ + +/* {{{ prototypes */ +SAPI_POST_HANDLER_FUNC(php_mb_post_handler); +MBSTRING_API SAPI_TREAT_DATA_FUNC(mbstr_treat_data); + +int _php_mb_enable_encoding_translation(int flag); +const mbfl_encoding *_php_mb_encoding_handler_ex(const php_mb_encoding_handler_info_t *info, zval *arg, char *res TSRMLS_DC); +/* }}} */ +#endif /* HAVE_MBSTRING */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: fdm=marker + * vim: noet sw=4 ts=4 + */ diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c new file mode 100644 index 0000000..a42f2e8 --- /dev/null +++ b/ext/mbstring/mbstring.c @@ -0,0 +1,4754 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2013 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Tsukada Takuya <tsukada@fminn.nagano.nagano.jp> | + | Rui Hirokawa <hirokawa@php.net> | + +----------------------------------------------------------------------+ + */ + +/* $Id$ */ + +/* + * PHP 4 Multibyte String module "mbstring" + * + * History: + * 2000.5.19 Release php-4.0RC2_jstring-1.0 + * 2001.4.1 Release php4_jstring-1.0.91 + * 2001.4.30 Release php4_jstring-1.1 (contribute to The PHP Group) + * 2001.5.1 Renamed from jstring to mbstring (hirokawa@php.net) + */ + +/* + * PHP3 Internationalization support program. + * + * Copyright (c) 1999,2000 by the PHP3 internationalization team. + * All rights reserved. + * + * See README_PHP3-i18n-ja for more detail. + * + * Authors: + * Hironori Sato <satoh@jpnnet.com> + * Shigeru Kanemoto <sgk@happysize.co.jp> + * Tsukada Takuya <tsukada@fminn.nagano.nagano.jp> + * Rui Hirokawa <rui_hirokawa@ybb.ne.jp> + */ + +/* {{{ includes */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "php.h" +#include "php_ini.h" +#include "php_variables.h" +#include "mbstring.h" +#include "ext/standard/php_string.h" +#include "ext/standard/php_mail.h" +#include "ext/standard/exec.h" +#include "ext/standard/php_smart_str.h" +#include "ext/standard/url.h" +#include "main/php_output.h" +#include "ext/standard/info.h" + +#include "libmbfl/mbfl/mbfl_allocators.h" +#include "libmbfl/mbfl/mbfilter_pass.h" + +#include "php_variables.h" +#include "php_globals.h" +#include "rfc1867.h" +#include "php_content_types.h" +#include "SAPI.h" +#include "php_unicode.h" +#include "TSRM.h" + +#include "mb_gpc.h" + +#if HAVE_MBREGEX +#include "php_mbregex.h" +#endif + +#include "zend_multibyte.h" + +#if HAVE_ONIG +#include "php_onig_compat.h" +#include <oniguruma.h> +#undef UChar +#elif HAVE_PCRE || HAVE_BUNDLED_PCRE +#include "ext/pcre/php_pcre.h" +#endif +/* }}} */ + +#if HAVE_MBSTRING + +/* {{{ prototypes */ +ZEND_DECLARE_MODULE_GLOBALS(mbstring) + +static PHP_GINIT_FUNCTION(mbstring); +static PHP_GSHUTDOWN_FUNCTION(mbstring); + +static void php_mb_populate_current_detect_order_list(TSRMLS_D); + +static int php_mb_encoding_translation(TSRMLS_D); + +static void php_mb_gpc_get_detect_order(const zend_encoding ***list, size_t *list_size TSRMLS_DC); + +static void php_mb_gpc_set_input_encoding(const zend_encoding *encoding TSRMLS_DC); + +/* }}} */ + +/* {{{ php_mb_default_identify_list */ +typedef struct _php_mb_nls_ident_list { + enum mbfl_no_language lang; + const enum mbfl_no_encoding *list; + size_t list_size; +} php_mb_nls_ident_list; + +static const enum mbfl_no_encoding php_mb_default_identify_list_ja[] = { + mbfl_no_encoding_ascii, + mbfl_no_encoding_jis, + mbfl_no_encoding_utf8, + mbfl_no_encoding_euc_jp, + mbfl_no_encoding_sjis +}; + +static const enum mbfl_no_encoding php_mb_default_identify_list_cn[] = { + mbfl_no_encoding_ascii, + mbfl_no_encoding_utf8, + mbfl_no_encoding_euc_cn, + mbfl_no_encoding_cp936 +}; + +static const enum mbfl_no_encoding php_mb_default_identify_list_tw_hk[] = { + mbfl_no_encoding_ascii, + mbfl_no_encoding_utf8, + mbfl_no_encoding_euc_tw, + mbfl_no_encoding_big5 +}; + +static const enum mbfl_no_encoding php_mb_default_identify_list_kr[] = { + mbfl_no_encoding_ascii, + mbfl_no_encoding_utf8, + mbfl_no_encoding_euc_kr, + mbfl_no_encoding_uhc +}; + +static const enum mbfl_no_encoding php_mb_default_identify_list_ru[] = { + mbfl_no_encoding_ascii, + mbfl_no_encoding_utf8, + mbfl_no_encoding_koi8r, + mbfl_no_encoding_cp1251, + mbfl_no_encoding_cp866 +}; + +static const enum mbfl_no_encoding php_mb_default_identify_list_hy[] = { + mbfl_no_encoding_ascii, + mbfl_no_encoding_utf8, + mbfl_no_encoding_armscii8 +}; + +static const enum mbfl_no_encoding php_mb_default_identify_list_tr[] = { + mbfl_no_encoding_ascii, + mbfl_no_encoding_utf8, + mbfl_no_encoding_cp1254, + mbfl_no_encoding_8859_9 +}; + +static const enum mbfl_no_encoding php_mb_default_identify_list_ua[] = { + mbfl_no_encoding_ascii, + mbfl_no_encoding_utf8, + mbfl_no_encoding_koi8u +}; + +static const enum mbfl_no_encoding php_mb_default_identify_list_neut[] = { + mbfl_no_encoding_ascii, + mbfl_no_encoding_utf8 +}; + + +static const php_mb_nls_ident_list php_mb_default_identify_list[] = { + { mbfl_no_language_japanese, php_mb_default_identify_list_ja, sizeof(php_mb_default_identify_list_ja) / sizeof(php_mb_default_identify_list_ja[0]) }, + { mbfl_no_language_korean, php_mb_default_identify_list_kr, sizeof(php_mb_default_identify_list_kr) / sizeof(php_mb_default_identify_list_kr[0]) }, + { mbfl_no_language_traditional_chinese, php_mb_default_identify_list_tw_hk, sizeof(php_mb_default_identify_list_tw_hk) / sizeof(php_mb_default_identify_list_tw_hk[0]) }, + { mbfl_no_language_simplified_chinese, php_mb_default_identify_list_cn, sizeof(php_mb_default_identify_list_cn) / sizeof(php_mb_default_identify_list_cn[0]) }, + { mbfl_no_language_russian, php_mb_default_identify_list_ru, sizeof(php_mb_default_identify_list_ru) / sizeof(php_mb_default_identify_list_ru[0]) }, + { mbfl_no_language_armenian, php_mb_default_identify_list_hy, sizeof(php_mb_default_identify_list_hy) / sizeof(php_mb_default_identify_list_hy[0]) }, + { mbfl_no_language_turkish, php_mb_default_identify_list_tr, sizeof(php_mb_default_identify_list_tr) / sizeof(php_mb_default_identify_list_tr[0]) }, + { mbfl_no_language_ukrainian, php_mb_default_identify_list_ua, sizeof(php_mb_default_identify_list_ua) / sizeof(php_mb_default_identify_list_ua[0]) }, + { mbfl_no_language_neutral, php_mb_default_identify_list_neut, sizeof(php_mb_default_identify_list_neut) / sizeof(php_mb_default_identify_list_neut[0]) } +}; + +/* }}} */ + +/* {{{ mb_overload_def mb_ovld[] */ +static const struct mb_overload_def mb_ovld[] = { + {MB_OVERLOAD_MAIL, "mail", "mb_send_mail", "mb_orig_mail"}, + {MB_OVERLOAD_STRING, "strlen", "mb_strlen", "mb_orig_strlen"}, + {MB_OVERLOAD_STRING, "strpos", "mb_strpos", "mb_orig_strpos"}, + {MB_OVERLOAD_STRING, "strrpos", "mb_strrpos", "mb_orig_strrpos"}, + {MB_OVERLOAD_STRING, "stripos", "mb_stripos", "mb_orig_stripos"}, + {MB_OVERLOAD_STRING, "strripos", "mb_strripos", "mb_orig_strripos"}, + {MB_OVERLOAD_STRING, "strstr", "mb_strstr", "mb_orig_strstr"}, + {MB_OVERLOAD_STRING, "strrchr", "mb_strrchr", "mb_orig_strrchr"}, + {MB_OVERLOAD_STRING, "stristr", "mb_stristr", "mb_orig_stristr"}, + {MB_OVERLOAD_STRING, "substr", "mb_substr", "mb_orig_substr"}, + {MB_OVERLOAD_STRING, "strtolower", "mb_strtolower", "mb_orig_strtolower"}, + {MB_OVERLOAD_STRING, "strtoupper", "mb_strtoupper", "mb_orig_strtoupper"}, + {MB_OVERLOAD_STRING, "substr_count", "mb_substr_count", "mb_orig_substr_count"}, +#if HAVE_MBREGEX + {MB_OVERLOAD_REGEX, "ereg", "mb_ereg", "mb_orig_ereg"}, + {MB_OVERLOAD_REGEX, "eregi", "mb_eregi", "mb_orig_eregi"}, + {MB_OVERLOAD_REGEX, "ereg_replace", "mb_ereg_replace", "mb_orig_ereg_replace"}, + {MB_OVERLOAD_REGEX, "eregi_replace", "mb_eregi_replace", "mb_orig_eregi_replace"}, + {MB_OVERLOAD_REGEX, "split", "mb_split", "mb_orig_split"}, +#endif + {0, NULL, NULL, NULL} +}; +/* }}} */ + +/* {{{ arginfo */ +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_language, 0, 0, 0) + ZEND_ARG_INFO(0, language) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_internal_encoding, 0, 0, 0) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_http_input, 0, 0, 0) + ZEND_ARG_INFO(0, type) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_http_output, 0, 0, 0) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_detect_order, 0, 0, 0) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_substitute_character, 0, 0, 0) + ZEND_ARG_INFO(0, substchar) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_preferred_mime_name, 0, 0, 1) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_parse_str, 0, 0, 1) + ZEND_ARG_INFO(0, encoded_string) + ZEND_ARG_INFO(1, result) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_output_handler, 0, 0, 2) + ZEND_ARG_INFO(0, contents) + ZEND_ARG_INFO(0, status) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_strlen, 0, 0, 1) + ZEND_ARG_INFO(0, str) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_strpos, 0, 0, 2) + ZEND_ARG_INFO(0, haystack) + ZEND_ARG_INFO(0, needle) + ZEND_ARG_INFO(0, offset) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_strrpos, 0, 0, 2) + ZEND_ARG_INFO(0, haystack) + ZEND_ARG_INFO(0, needle) + ZEND_ARG_INFO(0, offset) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_stripos, 0, 0, 2) + ZEND_ARG_INFO(0, haystack) + ZEND_ARG_INFO(0, needle) + ZEND_ARG_INFO(0, offset) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_strripos, 0, 0, 2) + ZEND_ARG_INFO(0, haystack) + ZEND_ARG_INFO(0, needle) + ZEND_ARG_INFO(0, offset) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_strstr, 0, 0, 2) + ZEND_ARG_INFO(0, haystack) + ZEND_ARG_INFO(0, needle) + ZEND_ARG_INFO(0, part) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_strrchr, 0, 0, 2) + ZEND_ARG_INFO(0, haystack) + ZEND_ARG_INFO(0, needle) + ZEND_ARG_INFO(0, part) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_stristr, 0, 0, 2) + ZEND_ARG_INFO(0, haystack) + ZEND_ARG_INFO(0, needle) + ZEND_ARG_INFO(0, part) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_strrichr, 0, 0, 2) + ZEND_ARG_INFO(0, haystack) + ZEND_ARG_INFO(0, needle) + ZEND_ARG_INFO(0, part) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_substr_count, 0, 0, 2) + ZEND_ARG_INFO(0, haystack) + ZEND_ARG_INFO(0, needle) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_substr, 0, 0, 2) + ZEND_ARG_INFO(0, str) + ZEND_ARG_INFO(0, start) + ZEND_ARG_INFO(0, length) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_strcut, 0, 0, 2) + ZEND_ARG_INFO(0, str) + ZEND_ARG_INFO(0, start) + ZEND_ARG_INFO(0, length) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_strwidth, 0, 0, 1) + ZEND_ARG_INFO(0, str) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_strimwidth, 0, 0, 3) + ZEND_ARG_INFO(0, str) + ZEND_ARG_INFO(0, start) + ZEND_ARG_INFO(0, width) + ZEND_ARG_INFO(0, trimmarker) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_convert_encoding, 0, 0, 2) + ZEND_ARG_INFO(0, str) + ZEND_ARG_INFO(0, to) + ZEND_ARG_INFO(0, from) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_convert_case, 0, 0, 2) + ZEND_ARG_INFO(0, sourcestring) + ZEND_ARG_INFO(0, mode) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_strtoupper, 0, 0, 1) + ZEND_ARG_INFO(0, sourcestring) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_strtolower, 0, 0, 1) + ZEND_ARG_INFO(0, sourcestring) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_detect_encoding, 0, 0, 1) + ZEND_ARG_INFO(0, str) + ZEND_ARG_INFO(0, encoding_list) + ZEND_ARG_INFO(0, strict) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO(arginfo_mb_list_encodings, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_encoding_aliases, 0, 0, 1) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_encode_mimeheader, 0, 0, 1) + ZEND_ARG_INFO(0, str) + ZEND_ARG_INFO(0, charset) + ZEND_ARG_INFO(0, transfer) + ZEND_ARG_INFO(0, linefeed) + ZEND_ARG_INFO(0, indent) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_decode_mimeheader, 0, 0, 1) + ZEND_ARG_INFO(0, string) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_convert_kana, 0, 0, 1) + ZEND_ARG_INFO(0, str) + ZEND_ARG_INFO(0, option) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_convert_variables, 1, 0, 3) + ZEND_ARG_INFO(0, to) + ZEND_ARG_INFO(0, from) + ZEND_ARG_INFO(1, ...) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_encode_numericentity, 0, 0, 2) + ZEND_ARG_INFO(0, string) + ZEND_ARG_INFO(0, convmap) + ZEND_ARG_INFO(0, encoding) + ZEND_ARG_INFO(0, is_hex) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_decode_numericentity, 0, 0, 2) + ZEND_ARG_INFO(0, string) + ZEND_ARG_INFO(0, convmap) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_send_mail, 0, 0, 3) + ZEND_ARG_INFO(0, to) + ZEND_ARG_INFO(0, subject) + ZEND_ARG_INFO(0, message) + ZEND_ARG_INFO(0, additional_headers) + ZEND_ARG_INFO(0, additional_parameters) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_get_info, 0, 0, 0) + ZEND_ARG_INFO(0, type) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_check_encoding, 0, 0, 0) + ZEND_ARG_INFO(0, var) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_regex_encoding, 0, 0, 0) + ZEND_ARG_INFO(0, encoding) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_ereg, 0, 0, 2) + ZEND_ARG_INFO(0, pattern) + ZEND_ARG_INFO(0, string) + ZEND_ARG_INFO(1, registers) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_eregi, 0, 0, 2) + ZEND_ARG_INFO(0, pattern) + ZEND_ARG_INFO(0, string) + ZEND_ARG_INFO(1, registers) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_ereg_replace, 0, 0, 3) + ZEND_ARG_INFO(0, pattern) + ZEND_ARG_INFO(0, replacement) + ZEND_ARG_INFO(0, string) + ZEND_ARG_INFO(0, option) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_eregi_replace, 0, 0, 3) + ZEND_ARG_INFO(0, pattern) + ZEND_ARG_INFO(0, replacement) + ZEND_ARG_INFO(0, string) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_ereg_replace_callback, 0, 0, 3) + ZEND_ARG_INFO(0, pattern) + ZEND_ARG_INFO(0, callback) + ZEND_ARG_INFO(0, string) + ZEND_ARG_INFO(0, option) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_split, 0, 0, 2) + ZEND_ARG_INFO(0, pattern) + ZEND_ARG_INFO(0, string) + ZEND_ARG_INFO(0, limit) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_ereg_match, 0, 0, 2) + ZEND_ARG_INFO(0, pattern) + ZEND_ARG_INFO(0, string) + ZEND_ARG_INFO(0, option) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_ereg_search, 0, 0, 0) + ZEND_ARG_INFO(0, pattern) + ZEND_ARG_INFO(0, option) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_ereg_search_pos, 0, 0, 0) + ZEND_ARG_INFO(0, pattern) + ZEND_ARG_INFO(0, option) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_ereg_search_regs, 0, 0, 0) + ZEND_ARG_INFO(0, pattern) + ZEND_ARG_INFO(0, option) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_ereg_search_init, 0, 0, 1) + ZEND_ARG_INFO(0, string) + ZEND_ARG_INFO(0, pattern) + ZEND_ARG_INFO(0, option) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO(arginfo_mb_ereg_search_getregs, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO(arginfo_mb_ereg_search_getpos, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_ereg_search_setpos, 0, 0, 1) + ZEND_ARG_INFO(0, position) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_regex_set_options, 0, 0, 0) + ZEND_ARG_INFO(0, options) +ZEND_END_ARG_INFO() +/* }}} */ + +/* {{{ zend_function_entry mbstring_functions[] */ +const zend_function_entry mbstring_functions[] = { + PHP_FE(mb_convert_case, arginfo_mb_convert_case) + PHP_FE(mb_strtoupper, arginfo_mb_strtoupper) + PHP_FE(mb_strtolower, arginfo_mb_strtolower) + PHP_FE(mb_language, arginfo_mb_language) + PHP_FE(mb_internal_encoding, arginfo_mb_internal_encoding) + PHP_FE(mb_http_input, arginfo_mb_http_input) + PHP_FE(mb_http_output, arginfo_mb_http_output) + PHP_FE(mb_detect_order, arginfo_mb_detect_order) + PHP_FE(mb_substitute_character, arginfo_mb_substitute_character) + PHP_FE(mb_parse_str, arginfo_mb_parse_str) + PHP_FE(mb_output_handler, arginfo_mb_output_handler) + PHP_FE(mb_preferred_mime_name, arginfo_mb_preferred_mime_name) + PHP_FE(mb_strlen, arginfo_mb_strlen) + PHP_FE(mb_strpos, arginfo_mb_strpos) + PHP_FE(mb_strrpos, arginfo_mb_strrpos) + PHP_FE(mb_stripos, arginfo_mb_stripos) + PHP_FE(mb_strripos, arginfo_mb_strripos) + PHP_FE(mb_strstr, arginfo_mb_strstr) + PHP_FE(mb_strrchr, arginfo_mb_strrchr) + PHP_FE(mb_stristr, arginfo_mb_stristr) + PHP_FE(mb_strrichr, arginfo_mb_strrichr) + PHP_FE(mb_substr_count, arginfo_mb_substr_count) + PHP_FE(mb_substr, arginfo_mb_substr) + PHP_FE(mb_strcut, arginfo_mb_strcut) + PHP_FE(mb_strwidth, arginfo_mb_strwidth) + PHP_FE(mb_strimwidth, arginfo_mb_strimwidth) + PHP_FE(mb_convert_encoding, arginfo_mb_convert_encoding) + PHP_FE(mb_detect_encoding, arginfo_mb_detect_encoding) + PHP_FE(mb_list_encodings, arginfo_mb_list_encodings) + PHP_FE(mb_encoding_aliases, arginfo_mb_encoding_aliases) + PHP_FE(mb_convert_kana, arginfo_mb_convert_kana) + PHP_FE(mb_encode_mimeheader, arginfo_mb_encode_mimeheader) + PHP_FE(mb_decode_mimeheader, arginfo_mb_decode_mimeheader) + PHP_FE(mb_convert_variables, arginfo_mb_convert_variables) + PHP_FE(mb_encode_numericentity, arginfo_mb_encode_numericentity) + PHP_FE(mb_decode_numericentity, arginfo_mb_decode_numericentity) + PHP_FE(mb_send_mail, arginfo_mb_send_mail) + PHP_FE(mb_get_info, arginfo_mb_get_info) + PHP_FE(mb_check_encoding, arginfo_mb_check_encoding) +#if HAVE_MBREGEX + PHP_MBREGEX_FUNCTION_ENTRIES +#endif + PHP_FE_END +}; +/* }}} */ + +/* {{{ zend_module_entry mbstring_module_entry */ +zend_module_entry mbstring_module_entry = { + STANDARD_MODULE_HEADER, + "mbstring", + mbstring_functions, + PHP_MINIT(mbstring), + PHP_MSHUTDOWN(mbstring), + PHP_RINIT(mbstring), + PHP_RSHUTDOWN(mbstring), + PHP_MINFO(mbstring), + NO_VERSION_YET, + PHP_MODULE_GLOBALS(mbstring), + PHP_GINIT(mbstring), + PHP_GSHUTDOWN(mbstring), + NULL, + STANDARD_MODULE_PROPERTIES_EX +}; +/* }}} */ + +/* {{{ static sapi_post_entry php_post_entries[] */ +static sapi_post_entry php_post_entries[] = { + { DEFAULT_POST_CONTENT_TYPE, sizeof(DEFAULT_POST_CONTENT_TYPE)-1, sapi_read_standard_form_data, php_std_post_handler }, + { MULTIPART_CONTENT_TYPE, sizeof(MULTIPART_CONTENT_TYPE)-1, NULL, rfc1867_post_handler }, + { NULL, 0, NULL, NULL } +}; +/* }}} */ + +#ifdef COMPILE_DL_MBSTRING +ZEND_GET_MODULE(mbstring) +#endif + +/* {{{ allocators */ +static void *_php_mb_allocators_malloc(unsigned int sz) +{ + return emalloc(sz); +} + +static void *_php_mb_allocators_realloc(void *ptr, unsigned int sz) +{ + return erealloc(ptr, sz); +} + +static void *_php_mb_allocators_calloc(unsigned int nelems, unsigned int szelem) +{ + return ecalloc(nelems, szelem); +} + +static void _php_mb_allocators_free(void *ptr) +{ + efree(ptr); +} + +static void *_php_mb_allocators_pmalloc(unsigned int sz) +{ + return pemalloc(sz, 1); +} + +static void *_php_mb_allocators_prealloc(void *ptr, unsigned int sz) +{ + return perealloc(ptr, sz, 1); +} + +static void _php_mb_allocators_pfree(void *ptr) +{ + pefree(ptr, 1); +} + +static mbfl_allocators _php_mb_allocators = { + _php_mb_allocators_malloc, + _php_mb_allocators_realloc, + _php_mb_allocators_calloc, + _php_mb_allocators_free, + _php_mb_allocators_pmalloc, + _php_mb_allocators_prealloc, + _php_mb_allocators_pfree +}; +/* }}} */ + +/* {{{ static sapi_post_entry mbstr_post_entries[] */ +static sapi_post_entry mbstr_post_entries[] = { + { DEFAULT_POST_CONTENT_TYPE, sizeof(DEFAULT_POST_CONTENT_TYPE)-1, sapi_read_standard_form_data, php_mb_post_handler }, + { MULTIPART_CONTENT_TYPE, sizeof(MULTIPART_CONTENT_TYPE)-1, NULL, rfc1867_post_handler }, + { NULL, 0, NULL, NULL } +}; +/* }}} */ + +/* {{{ static int php_mb_parse_encoding_list() + * Return 0 if input contains any illegal encoding, otherwise 1. + * Even if any illegal encoding is detected the result may contain a list + * of parsed encodings. + */ +static int +php_mb_parse_encoding_list(const char *value, size_t value_length, const mbfl_encoding ***return_list, size_t *return_size, int persistent TSRMLS_DC) +{ + int size, bauto, ret = SUCCESS; + size_t n; + char *p, *p1, *p2, *endp, *tmpstr; + const mbfl_encoding **entry, **list; + + list = NULL; + if (value == NULL || value_length <= 0) { + if (return_list) { + *return_list = NULL; + } + if (return_size) { + *return_size = 0; + } + return FAILURE; + } else { + /* copy the value string for work */ + if (value[0]=='"' && value[value_length-1]=='"' && value_length>2) { + tmpstr = (char *)estrndup(value+1, value_length-2); + value_length -= 2; + } + else + tmpstr = (char *)estrndup(value, value_length); + if (tmpstr == NULL) { + return FAILURE; + } + /* count the number of listed encoding names */ + endp = tmpstr + value_length; + n = 1; + p1 = tmpstr; + while ((p2 = php_memnstr(p1, ",", 1, endp)) != NULL) { + p1 = p2 + 1; + n++; + } + size = n + MBSTRG(default_detect_order_list_size); + /* make list */ + list = (const mbfl_encoding **)pecalloc(size, sizeof(mbfl_encoding*), persistent); + if (list != NULL) { + entry = list; + n = 0; + bauto = 0; + p1 = tmpstr; + do { + p2 = p = php_memnstr(p1, ",", 1, endp); + if (p == NULL) { + p = endp; + } + *p = '\0'; + /* trim spaces */ + while (p1 < p && (*p1 == ' ' || *p1 == '\t')) { + p1++; + } + p--; + while (p > p1 && (*p == ' ' || *p == '\t')) { + *p = '\0'; + p--; + } + /* convert to the encoding number and check encoding */ + if (strcasecmp(p1, "auto") == 0) { + if (!bauto) { + const enum mbfl_no_encoding *src = MBSTRG(default_detect_order_list); + const size_t identify_list_size = MBSTRG(default_detect_order_list_size); + size_t i; + bauto = 1; + for (i = 0; i < identify_list_size; i++) { + *entry++ = mbfl_no2encoding(*src++); + n++; + } + } + } else { + const mbfl_encoding *encoding = mbfl_name2encoding(p1); + if (encoding) { + *entry++ = encoding; + n++; + } else { + ret = 0; + } + } + p1 = p2 + 1; + } while (n < size && p2 != NULL); + if (n > 0) { + if (return_list) { + *return_list = list; + } else { + pefree(list, persistent); + } + } else { + pefree(list, persistent); + if (return_list) { + *return_list = NULL; + } + ret = 0; + } + if (return_size) { + *return_size = n; + } + } else { + if (return_list) { + *return_list = NULL; + } + if (return_size) { + *return_size = 0; + } + ret = 0; + } + efree(tmpstr); + } + + return ret; +} +/* }}} */ + +/* {{{ static int php_mb_parse_encoding_array() + * Return 0 if input contains any illegal encoding, otherwise 1. + * Even if any illegal encoding is detected the result may contain a list + * of parsed encodings. + */ +static int +php_mb_parse_encoding_array(zval *array, const mbfl_encoding ***return_list, size_t *return_size, int persistent TSRMLS_DC) +{ + zval **hash_entry; + HashTable *target_hash; + int i, n, size, bauto, ret = SUCCESS; + const mbfl_encoding **list, **entry; + + list = NULL; + if (Z_TYPE_P(array) == IS_ARRAY) { + target_hash = Z_ARRVAL_P(array); + zend_hash_internal_pointer_reset(target_hash); + i = zend_hash_num_elements(target_hash); + size = i + MBSTRG(default_detect_order_list_size); + list = (const mbfl_encoding **)pecalloc(size, sizeof(mbfl_encoding*), persistent); + if (list != NULL) { + entry = list; + bauto = 0; + n = 0; + while (i > 0) { + if (zend_hash_get_current_data(target_hash, (void **) &hash_entry) == FAILURE) { + break; + } + convert_to_string_ex(hash_entry); + if (strcasecmp(Z_STRVAL_PP(hash_entry), "auto") == 0) { + if (!bauto) { + const enum mbfl_no_encoding *src = MBSTRG(default_detect_order_list); + const size_t identify_list_size = MBSTRG(default_detect_order_list_size); + size_t j; + + bauto = 1; + for (j = 0; j < identify_list_size; j++) { + *entry++ = mbfl_no2encoding(*src++); + n++; + } + } + } else { + const mbfl_encoding *encoding = mbfl_name2encoding(Z_STRVAL_PP(hash_entry)); + if (encoding) { + *entry++ = encoding; + n++; + } else { + ret = FAILURE; + } + } + zend_hash_move_forward(target_hash); + i--; + } + if (n > 0) { + if (return_list) { + *return_list = list; + } else { + pefree(list, persistent); + } + } else { + pefree(list, persistent); + if (return_list) { + *return_list = NULL; + } + ret = FAILURE; + } + if (return_size) { + *return_size = n; + } + } else { + if (return_list) { + *return_list = NULL; + } + if (return_size) { + *return_size = 0; + } + ret = FAILURE; + } + } + + return ret; +} +/* }}} */ + +/* {{{ zend_multibyte interface */ +static const zend_encoding* php_mb_zend_encoding_fetcher(const char *encoding_name TSRMLS_DC) +{ + return (const zend_encoding*)mbfl_name2encoding(encoding_name); +} + +static const char *php_mb_zend_encoding_name_getter(const zend_encoding *encoding) +{ + return ((const mbfl_encoding *)encoding)->name; +} + +static int php_mb_zend_encoding_lexer_compatibility_checker(const zend_encoding *_encoding) +{ + const mbfl_encoding *encoding = (const mbfl_encoding*)_encoding; + if (encoding->flag & MBFL_ENCTYPE_SBCS) { + return 1; + } + if ((encoding->flag & (MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE)) == MBFL_ENCTYPE_MBCS) { + return 1; + } + return 0; +} + +static const zend_encoding *php_mb_zend_encoding_detector(const unsigned char *arg_string, size_t arg_length, const zend_encoding **list, size_t list_size TSRMLS_DC) +{ + mbfl_string string; + + if (!list) { + list = (const zend_encoding **)MBSTRG(current_detect_order_list); + list_size = MBSTRG(current_detect_order_list_size); + } + + mbfl_string_init(&string); + string.no_language = MBSTRG(language); + string.val = (unsigned char *)arg_string; + string.len = arg_length; + return (const zend_encoding *) mbfl_identify_encoding2(&string, (const mbfl_encoding **)list, list_size, 0); +} + +static size_t php_mb_zend_encoding_converter(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length, const zend_encoding *encoding_to, const zend_encoding *encoding_from TSRMLS_DC) +{ + mbfl_string string, result; + mbfl_buffer_converter *convd; + int status, loc; + + /* new encoding */ + /* initialize string */ + mbfl_string_init(&string); + mbfl_string_init(&result); + string.no_encoding = ((const mbfl_encoding*)encoding_from)->no_encoding; + string.no_language = MBSTRG(language); + string.val = (unsigned char*)from; + string.len = from_length; + + /* initialize converter */ + convd = mbfl_buffer_converter_new2((const mbfl_encoding *)encoding_from, (const mbfl_encoding *)encoding_to, string.len); + if (convd == NULL) { + return -1; + } + mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode)); + mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar)); + + /* do it */ + status = mbfl_buffer_converter_feed2(convd, &string, &loc); + if (status) { + mbfl_buffer_converter_delete(convd); + return (size_t)-1; + } + + mbfl_buffer_converter_flush(convd); + if (!mbfl_buffer_converter_result(convd, &result)) { + mbfl_buffer_converter_delete(convd); + return (size_t)-1; + } + + *to = result.val; + *to_length = result.len; + + mbfl_buffer_converter_delete(convd); + + return loc; +} + +static int php_mb_zend_encoding_list_parser(const char *encoding_list, size_t encoding_list_len, const zend_encoding ***return_list, size_t *return_size, int persistent TSRMLS_DC) +{ + return php_mb_parse_encoding_list(encoding_list, encoding_list_len, (const mbfl_encoding ***)return_list, return_size, persistent TSRMLS_CC); +} + +static const zend_encoding *php_mb_zend_internal_encoding_getter(TSRMLS_D) +{ + return (const zend_encoding *)MBSTRG(internal_encoding); +} + +static int php_mb_zend_internal_encoding_setter(const zend_encoding *encoding TSRMLS_DC) +{ + MBSTRG(internal_encoding) = (const mbfl_encoding *)encoding; + return SUCCESS; +} + +static zend_multibyte_functions php_mb_zend_multibyte_functions = { + "mbstring", + php_mb_zend_encoding_fetcher, + php_mb_zend_encoding_name_getter, + php_mb_zend_encoding_lexer_compatibility_checker, + php_mb_zend_encoding_detector, + php_mb_zend_encoding_converter, + php_mb_zend_encoding_list_parser, + php_mb_zend_internal_encoding_getter, + php_mb_zend_internal_encoding_setter +}; +/* }}} */ + +static void *_php_mb_compile_regex(const char *pattern TSRMLS_DC); +static int _php_mb_match_regex(void *opaque, const char *str, size_t str_len); +static void _php_mb_free_regex(void *opaque); + +#if HAVE_ONIG +/* {{{ _php_mb_compile_regex */ +static void *_php_mb_compile_regex(const char *pattern TSRMLS_DC) +{ + php_mb_regex_t *retval; + OnigErrorInfo err_info; + int err_code; + + if ((err_code = onig_new(&retval, + (const OnigUChar *)pattern, + (const OnigUChar *)pattern + strlen(pattern), + ONIG_OPTION_IGNORECASE | ONIG_OPTION_DONT_CAPTURE_GROUP, + ONIG_ENCODING_ASCII, &OnigSyntaxPerl, &err_info))) { + OnigUChar err_str[ONIG_MAX_ERROR_MESSAGE_LEN]; + onig_error_code_to_str(err_str, err_code, err_info); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s: %s", pattern, err_str); + retval = NULL; + } + return retval; +} +/* }}} */ + +/* {{{ _php_mb_match_regex */ +static int _php_mb_match_regex(void *opaque, const char *str, size_t str_len) +{ + return onig_search((php_mb_regex_t *)opaque, (const OnigUChar *)str, + (const OnigUChar*)str + str_len, (const OnigUChar *)str, + (const OnigUChar*)str + str_len, NULL, ONIG_OPTION_NONE) >= 0; +} +/* }}} */ + +/* {{{ _php_mb_free_regex */ +static void _php_mb_free_regex(void *opaque) +{ + onig_free((php_mb_regex_t *)opaque); +} +/* }}} */ +#elif HAVE_PCRE || HAVE_BUNDLED_PCRE +/* {{{ _php_mb_compile_regex */ +static void *_php_mb_compile_regex(const char *pattern TSRMLS_DC) +{ + pcre *retval; + const char *err_str; + int err_offset; + + if (!(retval = pcre_compile(pattern, + PCRE_CASELESS, &err_str, &err_offset, NULL))) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s (offset=%d): %s", pattern, err_offset, err_str); + } + return retval; +} +/* }}} */ + +/* {{{ _php_mb_match_regex */ +static int _php_mb_match_regex(void *opaque, const char *str, size_t str_len) +{ + return pcre_exec((pcre *)opaque, NULL, str, (int)str_len, 0, + 0, NULL, 0) >= 0; +} +/* }}} */ + +/* {{{ _php_mb_free_regex */ +static void _php_mb_free_regex(void *opaque) +{ + pcre_free(opaque); +} +/* }}} */ +#endif + +/* {{{ php_mb_nls_get_default_detect_order_list */ +static int php_mb_nls_get_default_detect_order_list(enum mbfl_no_language lang, enum mbfl_no_encoding **plist, size_t *plist_size) +{ + size_t i; + + *plist = (enum mbfl_no_encoding *) php_mb_default_identify_list_neut; + *plist_size = sizeof(php_mb_default_identify_list_neut) / sizeof(php_mb_default_identify_list_neut[0]); + + for (i = 0; i < sizeof(php_mb_default_identify_list) / sizeof(php_mb_default_identify_list[0]); i++) { + if (php_mb_default_identify_list[i].lang == lang) { + *plist = (enum mbfl_no_encoding *)php_mb_default_identify_list[i].list; + *plist_size = php_mb_default_identify_list[i].list_size; + return 1; + } + } + return 0; +} +/* }}} */ + +static char *php_mb_rfc1867_substring_conf(const zend_encoding *encoding, char *start, int len, char quote TSRMLS_DC) +{ + char *result = emalloc(len + 2); + char *resp = result; + int i; + + for (i = 0; i < len && start[i] != quote; ++i) { + if (start[i] == '\\' && (start[i + 1] == '\\' || (quote && start[i + 1] == quote))) { + *resp++ = start[++i]; + } else { + size_t j = php_mb_mbchar_bytes_ex(start+i, (const mbfl_encoding *)encoding); + + while (j-- > 0 && i < len) { + *resp++ = start[i++]; + } + --i; + } + } + + *resp = '\0'; + return result; +} + +static char *php_mb_rfc1867_getword(const zend_encoding *encoding, char **line, char stop TSRMLS_DC) /* {{{ */ +{ + char *pos = *line, quote; + char *res; + + while (*pos && *pos != stop) { + if ((quote = *pos) == '"' || quote == '\'') { + ++pos; + while (*pos && *pos != quote) { + if (*pos == '\\' && pos[1] && pos[1] == quote) { + pos += 2; + } else { + ++pos; + } + } + if (*pos) { + ++pos; + } + } else { + pos += php_mb_mbchar_bytes_ex(pos, (const mbfl_encoding *)encoding); + + } + } + if (*pos == '\0') { + res = estrdup(*line); + *line += strlen(*line); + return res; + } + + res = estrndup(*line, pos - *line); + + while (*pos == stop) { + pos += php_mb_mbchar_bytes_ex(pos, (const mbfl_encoding *)encoding); + } + + *line = pos; + return res; +} +/* }}} */ + +static char *php_mb_rfc1867_getword_conf(const zend_encoding *encoding, char *str TSRMLS_DC) /* {{{ */ +{ + while (*str && isspace(*(unsigned char *)str)) { + ++str; + } + + if (!*str) { + return estrdup(""); + } + + if (*str == '"' || *str == '\'') { + char quote = *str; + + str++; + return php_mb_rfc1867_substring_conf(encoding, str, strlen(str), quote TSRMLS_CC); + } else { + char *strend = str; + + while (*strend && !isspace(*(unsigned char *)strend)) { + ++strend; + } + return php_mb_rfc1867_substring_conf(encoding, str, strend - str, 0 TSRMLS_CC); + } +} +/* }}} */ + +static char *php_mb_rfc1867_basename(const zend_encoding *encoding, char *filename TSRMLS_DC) /* {{{ */ +{ + char *s, *s2; + const size_t filename_len = strlen(filename); + + /* The \ check should technically be needed for win32 systems only where + * it is a valid path separator. However, IE in all it's wisdom always sends + * the full path of the file on the user's filesystem, which means that unless + * the user does basename() they get a bogus file name. Until IE's user base drops + * to nill or problem is fixed this code must remain enabled for all systems. */ + s = php_mb_safe_strrchr_ex(filename, '\\', filename_len, (const mbfl_encoding *)encoding); + s2 = php_mb_safe_strrchr_ex(filename, '/', filename_len, (const mbfl_encoding *)encoding); + + if (s && s2) { + if (s > s2) { + return ++s; + } else { + return ++s2; + } + } else if (s) { + return ++s; + } else if (s2) { + return ++s2; + } else { + return filename; + } +} +/* }}} */ + +/* {{{ php.ini directive handler */ +/* {{{ static PHP_INI_MH(OnUpdate_mbstring_language) */ +static PHP_INI_MH(OnUpdate_mbstring_language) +{ + enum mbfl_no_language no_language; + + no_language = mbfl_name2no_language(new_value); + if (no_language == mbfl_no_language_invalid) { + MBSTRG(language) = mbfl_no_language_neutral; + return FAILURE; + } + MBSTRG(language) = no_language; + php_mb_nls_get_default_detect_order_list(no_language, &MBSTRG(default_detect_order_list), &MBSTRG(default_detect_order_list_size)); + return SUCCESS; +} +/* }}} */ + +/* {{{ static PHP_INI_MH(OnUpdate_mbstring_detect_order) */ +static PHP_INI_MH(OnUpdate_mbstring_detect_order) +{ + const mbfl_encoding **list; + size_t size; + + if (!new_value) { + if (MBSTRG(detect_order_list)) { + pefree(MBSTRG(detect_order_list), 1); + } + MBSTRG(detect_order_list) = NULL; + MBSTRG(detect_order_list_size) = 0; + return SUCCESS; + } + + if (FAILURE == php_mb_parse_encoding_list(new_value, new_value_length, &list, &size, 1 TSRMLS_CC)) { + return FAILURE; + } + + if (MBSTRG(detect_order_list)) { + pefree(MBSTRG(detect_order_list), 1); + } + MBSTRG(detect_order_list) = list; + MBSTRG(detect_order_list_size) = size; + return SUCCESS; +} +/* }}} */ + +/* {{{ static PHP_INI_MH(OnUpdate_mbstring_http_input) */ +static PHP_INI_MH(OnUpdate_mbstring_http_input) +{ + const mbfl_encoding **list; + size_t size; + + if (!new_value) { + if (MBSTRG(http_input_list)) { + pefree(MBSTRG(http_input_list), 1); + } + MBSTRG(http_input_list) = NULL; + MBSTRG(http_input_list_size) = 0; + return SUCCESS; + } + + if (FAILURE == php_mb_parse_encoding_list(new_value, new_value_length, &list, &size, 1 TSRMLS_CC)) { + return FAILURE; + } + + if (MBSTRG(http_input_list)) { + pefree(MBSTRG(http_input_list), 1); + } + MBSTRG(http_input_list) = list; + MBSTRG(http_input_list_size) = size; + + return SUCCESS; +} +/* }}} */ + +/* {{{ static PHP_INI_MH(OnUpdate_mbstring_http_output) */ +static PHP_INI_MH(OnUpdate_mbstring_http_output) +{ + const mbfl_encoding *encoding; + + if (new_value == NULL || new_value_length == 0) { + MBSTRG(http_output_encoding) = &mbfl_encoding_pass; + MBSTRG(current_http_output_encoding) = &mbfl_encoding_pass; + return SUCCESS; + } + + encoding = mbfl_name2encoding(new_value); + if (!encoding) { + MBSTRG(http_output_encoding) = &mbfl_encoding_pass; + MBSTRG(current_http_output_encoding) = &mbfl_encoding_pass; + return FAILURE; + } + + MBSTRG(http_output_encoding) = encoding; + MBSTRG(current_http_output_encoding) = encoding; + return SUCCESS; +} +/* }}} */ + +/* {{{ static _php_mb_ini_mbstring_internal_encoding_set */ +int _php_mb_ini_mbstring_internal_encoding_set(const char *new_value, uint new_value_length TSRMLS_DC) +{ + const mbfl_encoding *encoding; + + if (!new_value || new_value_length == 0 || !(encoding = mbfl_name2encoding(new_value))) { + switch (MBSTRG(language)) { + case mbfl_no_language_uni: + encoding = mbfl_no2encoding(mbfl_no_encoding_utf8); + break; + case mbfl_no_language_japanese: + encoding = mbfl_no2encoding(mbfl_no_encoding_euc_jp); + break; + case mbfl_no_language_korean: + encoding = mbfl_no2encoding(mbfl_no_encoding_euc_kr); + break; + case mbfl_no_language_simplified_chinese: + encoding = mbfl_no2encoding(mbfl_no_encoding_euc_cn); + break; + case mbfl_no_language_traditional_chinese: + encoding = mbfl_no2encoding(mbfl_no_encoding_euc_tw); + break; + case mbfl_no_language_russian: + encoding = mbfl_no2encoding(mbfl_no_encoding_koi8r); + break; + case mbfl_no_language_german: + encoding = mbfl_no2encoding(mbfl_no_encoding_8859_15); + break; + case mbfl_no_language_armenian: + encoding = mbfl_no2encoding(mbfl_no_encoding_armscii8); + break; + case mbfl_no_language_turkish: + encoding = mbfl_no2encoding(mbfl_no_encoding_8859_9); + break; + default: + encoding = mbfl_no2encoding(mbfl_no_encoding_8859_1); + break; + } + } + MBSTRG(internal_encoding) = encoding; + MBSTRG(current_internal_encoding) = encoding; +#if HAVE_MBREGEX + { + const char *enc_name = new_value; + if (FAILURE == php_mb_regex_set_default_mbctype(enc_name TSRMLS_CC)) { + /* falls back to EUC-JP if an unknown encoding name is given */ + enc_name = "EUC-JP"; + php_mb_regex_set_default_mbctype(enc_name TSRMLS_CC); + } + php_mb_regex_set_mbctype(new_value TSRMLS_CC); + } +#endif + return SUCCESS; +} +/* }}} */ + +/* {{{ static PHP_INI_MH(OnUpdate_mbstring_internal_encoding) */ +static PHP_INI_MH(OnUpdate_mbstring_internal_encoding) +{ + if (OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC) == FAILURE) { + return FAILURE; + } + if (stage == PHP_INI_STAGE_STARTUP || stage == PHP_INI_STAGE_SHUTDOWN + || stage == PHP_INI_STAGE_RUNTIME) { + return _php_mb_ini_mbstring_internal_encoding_set(new_value, new_value_length TSRMLS_CC); + } else { + /* the corresponding mbstring globals needs to be set according to the + * ini value in the later stage because it never falls back to the + * default value if 1. no value for mbstring.internal_encoding is given, + * 2. mbstring.language directive is processed in per-dir or runtime + * context and 3. call to the handler for mbstring.language is done + * after mbstring.internal_encoding is handled. */ + return SUCCESS; + } +} +/* }}} */ + +/* {{{ static PHP_INI_MH(OnUpdate_mbstring_substitute_character) */ +static PHP_INI_MH(OnUpdate_mbstring_substitute_character) +{ + int c; + char *endptr = NULL; + + if (new_value != NULL) { + if (strcasecmp("none", new_value) == 0) { + MBSTRG(filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE; + MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE; + } else if (strcasecmp("long", new_value) == 0) { + MBSTRG(filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG; + MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG; + } else if (strcasecmp("entity", new_value) == 0) { + MBSTRG(filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_ENTITY; + MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_ENTITY; + } else { + MBSTRG(filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR; + MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR; + if (new_value_length >0) { + c = strtol(new_value, &endptr, 0); + if (*endptr == '\0') { + MBSTRG(filter_illegal_substchar) = c; + MBSTRG(current_filter_illegal_substchar) = c; + } + } + } + } else { + MBSTRG(filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR; + MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR; + MBSTRG(filter_illegal_substchar) = 0x3f; /* '?' */ + MBSTRG(current_filter_illegal_substchar) = 0x3f; /* '?' */ + } + + return SUCCESS; +} +/* }}} */ + +/* {{{ static PHP_INI_MH(OnUpdate_mbstring_encoding_translation) */ +static PHP_INI_MH(OnUpdate_mbstring_encoding_translation) +{ + if (new_value == NULL) { + return FAILURE; + } + + OnUpdateBool(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); + + if (MBSTRG(encoding_translation)) { + sapi_unregister_post_entry(php_post_entries TSRMLS_CC); + sapi_register_post_entries(mbstr_post_entries TSRMLS_CC); + } else { + sapi_unregister_post_entry(mbstr_post_entries TSRMLS_CC); + sapi_register_post_entries(php_post_entries TSRMLS_CC); + } + + return SUCCESS; +} +/* }}} */ + +/* {{{ static PHP_INI_MH(OnUpdate_mbstring_http_output_conv_mimetypes */ +static PHP_INI_MH(OnUpdate_mbstring_http_output_conv_mimetypes) +{ + zval tmp; + void *re = NULL; + + if (!new_value) { + new_value = entry->orig_value; + new_value_length = entry->orig_value_length; + } + php_trim(new_value, new_value_length, NULL, 0, &tmp, 3 TSRMLS_CC); + + if (Z_STRLEN(tmp) > 0) { + if (!(re = _php_mb_compile_regex(Z_STRVAL(tmp) TSRMLS_CC))) { + zval_dtor(&tmp); + return FAILURE; + } + } + + if (MBSTRG(http_output_conv_mimetypes)) { + _php_mb_free_regex(MBSTRG(http_output_conv_mimetypes)); + } + + MBSTRG(http_output_conv_mimetypes) = re; + + zval_dtor(&tmp); + return SUCCESS; +} +/* }}} */ +/* }}} */ + +/* {{{ php.ini directive registration */ +PHP_INI_BEGIN() + PHP_INI_ENTRY("mbstring.language", "neutral", PHP_INI_ALL, OnUpdate_mbstring_language) + PHP_INI_ENTRY("mbstring.detect_order", NULL, PHP_INI_ALL, OnUpdate_mbstring_detect_order) + PHP_INI_ENTRY("mbstring.http_input", "pass", PHP_INI_ALL, OnUpdate_mbstring_http_input) + PHP_INI_ENTRY("mbstring.http_output", "pass", PHP_INI_ALL, OnUpdate_mbstring_http_output) + STD_PHP_INI_ENTRY("mbstring.internal_encoding", NULL, PHP_INI_ALL, OnUpdate_mbstring_internal_encoding, internal_encoding_name, zend_mbstring_globals, mbstring_globals) + PHP_INI_ENTRY("mbstring.substitute_character", NULL, PHP_INI_ALL, OnUpdate_mbstring_substitute_character) + STD_PHP_INI_ENTRY("mbstring.func_overload", "0", + PHP_INI_SYSTEM, OnUpdateLong, func_overload, zend_mbstring_globals, mbstring_globals) + + STD_PHP_INI_BOOLEAN("mbstring.encoding_translation", "0", + PHP_INI_SYSTEM | PHP_INI_PERDIR, + OnUpdate_mbstring_encoding_translation, + encoding_translation, zend_mbstring_globals, mbstring_globals) + PHP_INI_ENTRY("mbstring.http_output_conv_mimetypes", + "^(text/|application/xhtml\\+xml)", + PHP_INI_ALL, + OnUpdate_mbstring_http_output_conv_mimetypes) + + STD_PHP_INI_BOOLEAN("mbstring.strict_detection", "0", + PHP_INI_ALL, + OnUpdateLong, + strict_detection, zend_mbstring_globals, mbstring_globals) +PHP_INI_END() +/* }}} */ + +/* {{{ module global initialize handler */ +static PHP_GINIT_FUNCTION(mbstring) +{ + mbstring_globals->language = mbfl_no_language_uni; + mbstring_globals->internal_encoding = NULL; + mbstring_globals->current_internal_encoding = mbstring_globals->internal_encoding; + mbstring_globals->http_output_encoding = &mbfl_encoding_pass; + mbstring_globals->current_http_output_encoding = &mbfl_encoding_pass; + mbstring_globals->http_input_identify = NULL; + mbstring_globals->http_input_identify_get = NULL; + mbstring_globals->http_input_identify_post = NULL; + mbstring_globals->http_input_identify_cookie = NULL; + mbstring_globals->http_input_identify_string = NULL; + mbstring_globals->http_input_list = NULL; + mbstring_globals->http_input_list_size = 0; + mbstring_globals->detect_order_list = NULL; + mbstring_globals->detect_order_list_size = 0; + mbstring_globals->current_detect_order_list = NULL; + mbstring_globals->current_detect_order_list_size = 0; + mbstring_globals->default_detect_order_list = (enum mbfl_no_encoding *) php_mb_default_identify_list_neut; + mbstring_globals->default_detect_order_list_size = sizeof(php_mb_default_identify_list_neut) / sizeof(php_mb_default_identify_list_neut[0]); + mbstring_globals->filter_illegal_mode = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR; + mbstring_globals->filter_illegal_substchar = 0x3f; /* '?' */ + mbstring_globals->current_filter_illegal_mode = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR; + mbstring_globals->current_filter_illegal_substchar = 0x3f; /* '?' */ + mbstring_globals->illegalchars = 0; + mbstring_globals->func_overload = 0; + mbstring_globals->encoding_translation = 0; + mbstring_globals->strict_detection = 0; + mbstring_globals->outconv = NULL; + mbstring_globals->http_output_conv_mimetypes = NULL; +#if HAVE_MBREGEX + mbstring_globals->mb_regex_globals = php_mb_regex_globals_alloc(TSRMLS_C); +#endif +} +/* }}} */ + +/* {{{ PHP_GSHUTDOWN_FUNCTION */ +static PHP_GSHUTDOWN_FUNCTION(mbstring) +{ + if (mbstring_globals->http_input_list) { + free(mbstring_globals->http_input_list); + } + if (mbstring_globals->detect_order_list) { + free(mbstring_globals->detect_order_list); + } + if (mbstring_globals->http_output_conv_mimetypes) { + _php_mb_free_regex(mbstring_globals->http_output_conv_mimetypes); + } +#if HAVE_MBREGEX + php_mb_regex_globals_free(mbstring_globals->mb_regex_globals TSRMLS_CC); +#endif +} +/* }}} */ + +/* {{{ PHP_MINIT_FUNCTION(mbstring) */ +PHP_MINIT_FUNCTION(mbstring) +{ + __mbfl_allocators = &_php_mb_allocators; + + REGISTER_INI_ENTRIES(); + + /* This is a global handler. Should not be set in a per-request handler. */ + sapi_register_treat_data(mbstr_treat_data TSRMLS_CC); + + /* Post handlers are stored in the thread-local context. */ + if (MBSTRG(encoding_translation)) { + sapi_register_post_entries(mbstr_post_entries TSRMLS_CC); + } + + REGISTER_LONG_CONSTANT("MB_OVERLOAD_MAIL", MB_OVERLOAD_MAIL, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("MB_OVERLOAD_STRING", MB_OVERLOAD_STRING, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("MB_OVERLOAD_REGEX", MB_OVERLOAD_REGEX, CONST_CS | CONST_PERSISTENT); + + REGISTER_LONG_CONSTANT("MB_CASE_UPPER", PHP_UNICODE_CASE_UPPER, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("MB_CASE_LOWER", PHP_UNICODE_CASE_LOWER, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("MB_CASE_TITLE", PHP_UNICODE_CASE_TITLE, CONST_CS | CONST_PERSISTENT); + +#if HAVE_MBREGEX + PHP_MINIT(mb_regex) (INIT_FUNC_ARGS_PASSTHRU); +#endif + + if (FAILURE == zend_multibyte_set_functions(&php_mb_zend_multibyte_functions TSRMLS_CC)) { + return FAILURE; + } + + php_rfc1867_set_multibyte_callbacks( + php_mb_encoding_translation, + php_mb_gpc_get_detect_order, + php_mb_gpc_set_input_encoding, + php_mb_rfc1867_getword, + php_mb_rfc1867_getword_conf, + php_mb_rfc1867_basename); + + return SUCCESS; +} +/* }}} */ + +/* {{{ PHP_MSHUTDOWN_FUNCTION(mbstring) */ +PHP_MSHUTDOWN_FUNCTION(mbstring) +{ + UNREGISTER_INI_ENTRIES(); + +#if HAVE_MBREGEX + PHP_MSHUTDOWN(mb_regex) (INIT_FUNC_ARGS_PASSTHRU); +#endif + + return SUCCESS; +} +/* }}} */ + +/* {{{ PHP_RINIT_FUNCTION(mbstring) */ +PHP_RINIT_FUNCTION(mbstring) +{ + zend_function *func, *orig; + const struct mb_overload_def *p; + + MBSTRG(current_internal_encoding) = MBSTRG(internal_encoding); + MBSTRG(current_http_output_encoding) = MBSTRG(http_output_encoding); + MBSTRG(current_filter_illegal_mode) = MBSTRG(filter_illegal_mode); + MBSTRG(current_filter_illegal_substchar) = MBSTRG(filter_illegal_substchar); + + MBSTRG(illegalchars) = 0; + + php_mb_populate_current_detect_order_list(TSRMLS_C); + + /* override original function. */ + if (MBSTRG(func_overload)){ + p = &(mb_ovld[0]); + + while (p->type > 0) { + if ((MBSTRG(func_overload) & p->type) == p->type && + zend_hash_find(EG(function_table), p->save_func, + strlen(p->save_func)+1, (void **)&orig) != SUCCESS) { + + zend_hash_find(EG(function_table), p->ovld_func, strlen(p->ovld_func)+1 , (void **)&func); + + if (zend_hash_find(EG(function_table), p->orig_func, strlen(p->orig_func)+1, (void **)&orig) != SUCCESS) { + php_error_docref("ref.mbstring" TSRMLS_CC, E_WARNING, "mbstring couldn't find function %s.", p->orig_func); + return FAILURE; + } else { + zend_hash_add(EG(function_table), p->save_func, strlen(p->save_func)+1, orig, sizeof(zend_function), NULL); + + if (zend_hash_update(EG(function_table), p->orig_func, strlen(p->orig_func)+1, func, sizeof(zend_function), + NULL) == FAILURE) { + php_error_docref("ref.mbstring" TSRMLS_CC, E_WARNING, "mbstring couldn't replace function %s.", p->orig_func); + return FAILURE; + } + } + } + p++; + } + } +#if HAVE_MBREGEX + PHP_RINIT(mb_regex) (INIT_FUNC_ARGS_PASSTHRU); +#endif + zend_multibyte_set_internal_encoding((const zend_encoding *)MBSTRG(internal_encoding) TSRMLS_CC); + + return SUCCESS; +} +/* }}} */ + +/* {{{ PHP_RSHUTDOWN_FUNCTION(mbstring) */ +PHP_RSHUTDOWN_FUNCTION(mbstring) +{ + const struct mb_overload_def *p; + zend_function *orig; + + if (MBSTRG(current_detect_order_list) != NULL) { + efree(MBSTRG(current_detect_order_list)); + MBSTRG(current_detect_order_list) = NULL; + MBSTRG(current_detect_order_list_size) = 0; + } + if (MBSTRG(outconv) != NULL) { + MBSTRG(illegalchars) += mbfl_buffer_illegalchars(MBSTRG(outconv)); + mbfl_buffer_converter_delete(MBSTRG(outconv)); + MBSTRG(outconv) = NULL; + } + + /* clear http input identification. */ + MBSTRG(http_input_identify) = NULL; + MBSTRG(http_input_identify_post) = NULL; + MBSTRG(http_input_identify_get) = NULL; + MBSTRG(http_input_identify_cookie) = NULL; + MBSTRG(http_input_identify_string) = NULL; + + /* clear overloaded function. */ + if (MBSTRG(func_overload)){ + p = &(mb_ovld[0]); + while (p->type > 0) { + if ((MBSTRG(func_overload) & p->type) == p->type && + zend_hash_find(EG(function_table), p->save_func, + strlen(p->save_func)+1, (void **)&orig) == SUCCESS) { + + zend_hash_update(EG(function_table), p->orig_func, strlen(p->orig_func)+1, orig, sizeof(zend_function), NULL); + zend_hash_del(EG(function_table), p->save_func, strlen(p->save_func)+1); + } + p++; + } + } + +#if HAVE_MBREGEX + PHP_RSHUTDOWN(mb_regex) (INIT_FUNC_ARGS_PASSTHRU); +#endif + + return SUCCESS; +} +/* }}} */ + +/* {{{ PHP_MINFO_FUNCTION(mbstring) */ +PHP_MINFO_FUNCTION(mbstring) +{ + php_info_print_table_start(); + php_info_print_table_row(2, "Multibyte Support", "enabled"); + php_info_print_table_row(2, "Multibyte string engine", "libmbfl"); + php_info_print_table_row(2, "HTTP input encoding translation", MBSTRG(encoding_translation) ? "enabled": "disabled"); + { + char tmp[256]; + snprintf(tmp, sizeof(tmp), "%d.%d.%d", MBFL_VERSION_MAJOR, MBFL_VERSION_MINOR, MBFL_VERSION_TEENY); + php_info_print_table_row(2, "libmbfl version", tmp); + } + php_info_print_table_end(); + + php_info_print_table_start(); + php_info_print_table_header(1, "mbstring extension makes use of \"streamable kanji code filter and converter\", which is distributed under the GNU Lesser General Public License version 2.1."); + php_info_print_table_end(); + +#if HAVE_MBREGEX + PHP_MINFO(mb_regex)(ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU); +#endif + + DISPLAY_INI_ENTRIES(); +} +/* }}} */ + +/* {{{ proto string mb_language([string language]) + Sets the current language or Returns the current language as a string */ +PHP_FUNCTION(mb_language) +{ + char *name = NULL; + int name_len = 0; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &name, &name_len) == FAILURE) { + return; + } + if (name == NULL) { + RETVAL_STRING((char *)mbfl_no_language2name(MBSTRG(language)), 1); + } else { + if (FAILURE == zend_alter_ini_entry( + "mbstring.language", sizeof("mbstring.language"), + name, name_len, PHP_INI_USER, PHP_INI_STAGE_RUNTIME)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown language \"%s\"", name); + RETVAL_FALSE; + } else { + RETVAL_TRUE; + } + } +} +/* }}} */ + +/* {{{ proto string mb_internal_encoding([string encoding]) + Sets the current internal encoding or Returns the current internal encoding as a string */ +PHP_FUNCTION(mb_internal_encoding) +{ + const char *name = NULL; + int name_len; + const mbfl_encoding *encoding; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &name, &name_len) == FAILURE) { + RETURN_FALSE; + } + if (name == NULL) { + name = MBSTRG(current_internal_encoding) ? MBSTRG(current_internal_encoding)->name: NULL; + if (name != NULL) { + RETURN_STRING(name, 1); + } else { + RETURN_FALSE; + } + } else { + encoding = mbfl_name2encoding(name); + if (!encoding) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", name); + RETURN_FALSE; + } else { + MBSTRG(current_internal_encoding) = encoding; + RETURN_TRUE; + } + } +} +/* }}} */ + +/* {{{ proto mixed mb_http_input([string type]) + Returns the input encoding */ +PHP_FUNCTION(mb_http_input) +{ + char *typ = NULL; + int typ_len; + int retname; + char *list, *temp; + const mbfl_encoding *result = NULL; + + retname = 1; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &typ, &typ_len) == FAILURE) { + RETURN_FALSE; + } + if (typ == NULL) { + result = MBSTRG(http_input_identify); + } else { + switch (*typ) { + case 'G': + case 'g': + result = MBSTRG(http_input_identify_get); + break; + case 'P': + case 'p': + result = MBSTRG(http_input_identify_post); + break; + case 'C': + case 'c': + result = MBSTRG(http_input_identify_cookie); + break; + case 'S': + case 's': + result = MBSTRG(http_input_identify_string); + break; + case 'I': + case 'i': + { + const mbfl_encoding **entry = MBSTRG(http_input_list); + const size_t n = MBSTRG(http_input_list_size); + size_t i; + array_init(return_value); + for (i = 0; i < n; i++) { + add_next_index_string(return_value, (*entry)->name, 1); + entry++; + } + retname = 0; + } + break; + case 'L': + case 'l': + { + const mbfl_encoding **entry = MBSTRG(http_input_list); + const size_t n = MBSTRG(http_input_list_size); + size_t i; + list = NULL; + for (i = 0; i < n; i++) { + if (list) { + temp = list; + spprintf(&list, 0, "%s,%s", temp, (*entry)->name); + efree(temp); + if (!list) { + break; + } + } else { + list = estrdup((*entry)->name); + } + entry++; + } + } + if (!list) { + RETURN_FALSE; + } + RETVAL_STRING(list, 0); + retname = 0; + break; + default: + result = MBSTRG(http_input_identify); + break; + } + } + + if (retname) { + if (result) { + RETVAL_STRING(result->name, 1); + } else { + RETVAL_FALSE; + } + } +} +/* }}} */ + +/* {{{ proto string mb_http_output([string encoding]) + Sets the current output_encoding or returns the current output_encoding as a string */ +PHP_FUNCTION(mb_http_output) +{ + const char *name = NULL; + int name_len; + const mbfl_encoding *encoding; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", (char **)&name, &name_len) == FAILURE) { + RETURN_FALSE; + } + + if (name == NULL) { + name = MBSTRG(current_http_output_encoding) ? MBSTRG(current_http_output_encoding)->name: NULL; + if (name != NULL) { + RETURN_STRING(name, 1); + } else { + RETURN_FALSE; + } + } else { + encoding = mbfl_name2encoding(name); + if (!encoding) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", name); + RETURN_FALSE; + } else { + MBSTRG(current_http_output_encoding) = encoding; + RETURN_TRUE; + } + } +} +/* }}} */ + +/* {{{ proto bool|array mb_detect_order([mixed encoding-list]) + Sets the current detect_order or Return the current detect_order as a array */ +PHP_FUNCTION(mb_detect_order) +{ + zval **arg1 = NULL; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|Z", &arg1) == FAILURE) { + return; + } + + if (!arg1) { + size_t i; + size_t n = MBSTRG(current_detect_order_list_size); + const mbfl_encoding **entry = MBSTRG(current_detect_order_list); + array_init(return_value); + for (i = 0; i < n; i++) { + add_next_index_string(return_value, (*entry)->name, 1); + entry++; + } + } else { + const mbfl_encoding **list = NULL; + size_t size = 0; + switch (Z_TYPE_PP(arg1)) { + case IS_ARRAY: + if (FAILURE == php_mb_parse_encoding_array(*arg1, &list, &size, 0 TSRMLS_CC)) { + if (list) { + efree(list); + } + RETURN_FALSE; + } + break; + default: + convert_to_string_ex(arg1); + if (FAILURE == php_mb_parse_encoding_list(Z_STRVAL_PP(arg1), Z_STRLEN_PP(arg1), &list, &size, 0 TSRMLS_CC)) { + if (list) { + efree(list); + } + RETURN_FALSE; + } + break; + } + + if (list == NULL) { + RETURN_FALSE; + } + + if (MBSTRG(current_detect_order_list)) { + efree(MBSTRG(current_detect_order_list)); + } + MBSTRG(current_detect_order_list) = list; + MBSTRG(current_detect_order_list_size) = size; + RETURN_TRUE; + } +} +/* }}} */ + +/* {{{ proto mixed mb_substitute_character([mixed substchar]) + Sets the current substitute_character or returns the current substitute_character */ +PHP_FUNCTION(mb_substitute_character) +{ + zval **arg1 = NULL; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|Z", &arg1) == FAILURE) { + return; + } + + if (!arg1) { + if (MBSTRG(current_filter_illegal_mode) == MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + RETURN_STRING("none", 1); + } else if (MBSTRG(current_filter_illegal_mode) == MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG) { + RETURN_STRING("long", 1); + } else if (MBSTRG(current_filter_illegal_mode) == MBFL_OUTPUTFILTER_ILLEGAL_MODE_ENTITY) { + RETURN_STRING("entity", 1); + } else { + RETURN_LONG(MBSTRG(current_filter_illegal_substchar)); + } + } else { + RETVAL_TRUE; + + switch (Z_TYPE_PP(arg1)) { + case IS_STRING: + if (strncasecmp("none", Z_STRVAL_PP(arg1), Z_STRLEN_PP(arg1)) == 0) { + MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE; + } else if (strncasecmp("long", Z_STRVAL_PP(arg1), Z_STRLEN_PP(arg1)) == 0) { + MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG; + } else if (strncasecmp("entity", Z_STRVAL_PP(arg1), Z_STRLEN_PP(arg1)) == 0) { + MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_ENTITY; + } else { + convert_to_long_ex(arg1); + + if (Z_LVAL_PP(arg1) < 0xffff && Z_LVAL_PP(arg1) > 0x0) { + MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR; + MBSTRG(current_filter_illegal_substchar) = Z_LVAL_PP(arg1); + } else { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown character."); + RETURN_FALSE; + } + } + break; + default: + convert_to_long_ex(arg1); + if (Z_LVAL_PP(arg1) < 0xffff && Z_LVAL_PP(arg1) > 0x0) { + MBSTRG(current_filter_illegal_mode) = MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR; + MBSTRG(current_filter_illegal_substchar) = Z_LVAL_PP(arg1); + } else { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown character."); + RETURN_FALSE; + } + break; + } + } +} +/* }}} */ + +/* {{{ proto string mb_preferred_mime_name(string encoding) + Return the preferred MIME name (charset) as a string */ +PHP_FUNCTION(mb_preferred_mime_name) +{ + enum mbfl_no_encoding no_encoding; + char *name = NULL; + int name_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { + return; + } else { + no_encoding = mbfl_name2no_encoding(name); + if (no_encoding == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", name); + RETVAL_FALSE; + } else { + const char *preferred_name = mbfl_no2preferred_mime_name(no_encoding); + if (preferred_name == NULL || *preferred_name == '\0') { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "No MIME preferred name corresponding to \"%s\"", name); + RETVAL_FALSE; + } else { + RETVAL_STRING((char *)preferred_name, 1); + } + } + } +} +/* }}} */ + +#define IS_SJIS1(c) ((((c)>=0x81 && (c)<=0x9f) || ((c)>=0xe0 && (c)<=0xf5)) ? 1 : 0) +#define IS_SJIS2(c) ((((c)>=0x40 && (c)<=0x7e) || ((c)>=0x80 && (c)<=0xfc)) ? 1 : 0) + +/* {{{ proto bool mb_parse_str(string encoded_string [, array result]) + Parses GET/POST/COOKIE data and sets global variables */ +PHP_FUNCTION(mb_parse_str) +{ + zval *track_vars_array = NULL; + char *encstr = NULL; + int encstr_len; + php_mb_encoding_handler_info_t info; + const mbfl_encoding *detected; + + track_vars_array = NULL; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z", &encstr, &encstr_len, &track_vars_array) == FAILURE) { + return; + } + + if (track_vars_array != NULL) { + /* Clear out the array */ + zval_dtor(track_vars_array); + array_init(track_vars_array); + } + + encstr = estrndup(encstr, encstr_len); + + info.data_type = PARSE_STRING; + info.separator = PG(arg_separator).input; + info.report_errors = 1; + info.to_encoding = MBSTRG(current_internal_encoding); + info.to_language = MBSTRG(language); + info.from_encodings = MBSTRG(http_input_list); + info.num_from_encodings = MBSTRG(http_input_list_size); + info.from_language = MBSTRG(language); + + if (track_vars_array != NULL) { + detected = _php_mb_encoding_handler_ex(&info, track_vars_array, encstr TSRMLS_CC); + } else { + zval tmp; + if (!EG(active_symbol_table)) { + zend_rebuild_symbol_table(TSRMLS_C); + } + Z_ARRVAL(tmp) = EG(active_symbol_table); + detected = _php_mb_encoding_handler_ex(&info, &tmp, encstr TSRMLS_CC); + } + + MBSTRG(http_input_identify) = detected; + + RETVAL_BOOL(detected); + + if (encstr != NULL) efree(encstr); +} +/* }}} */ + +/* {{{ proto string mb_output_handler(string contents, int status) + Returns string in output buffer converted to the http_output encoding */ +PHP_FUNCTION(mb_output_handler) +{ + char *arg_string; + int arg_string_len; + long arg_status; + mbfl_string string, result; + const char *charset; + char *p; + const mbfl_encoding *encoding; + int last_feed, len; + unsigned char send_text_mimetype = 0; + char *s, *mimetype = NULL; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl", &arg_string, &arg_string_len, &arg_status) == FAILURE) { + return; + } + + encoding = MBSTRG(current_http_output_encoding); + + /* start phase only */ + if ((arg_status & PHP_OUTPUT_HANDLER_START) != 0) { + /* delete the converter just in case. */ + if (MBSTRG(outconv)) { + MBSTRG(illegalchars) += mbfl_buffer_illegalchars(MBSTRG(outconv)); + mbfl_buffer_converter_delete(MBSTRG(outconv)); + MBSTRG(outconv) = NULL; + } + if (encoding == &mbfl_encoding_pass) { + RETURN_STRINGL(arg_string, arg_string_len, 1); + } + + /* analyze mime type */ + if (SG(sapi_headers).mimetype && + _php_mb_match_regex( + MBSTRG(http_output_conv_mimetypes), + SG(sapi_headers).mimetype, + strlen(SG(sapi_headers).mimetype))) { + if ((s = strchr(SG(sapi_headers).mimetype,';')) == NULL){ + mimetype = estrdup(SG(sapi_headers).mimetype); + } else { + mimetype = estrndup(SG(sapi_headers).mimetype,s-SG(sapi_headers).mimetype); + } + send_text_mimetype = 1; + } else if (SG(sapi_headers).send_default_content_type) { + mimetype = SG(default_mimetype) ? SG(default_mimetype) : SAPI_DEFAULT_MIMETYPE; + } + + /* if content-type is not yet set, set it and activate the converter */ + if (SG(sapi_headers).send_default_content_type || send_text_mimetype) { + charset = encoding->mime_name; + if (charset) { + len = spprintf( &p, 0, "Content-Type: %s; charset=%s", mimetype, charset ); + if (sapi_add_header(p, len, 0) != FAILURE) { + SG(sapi_headers).send_default_content_type = 0; + } + } + /* activate the converter */ + MBSTRG(outconv) = mbfl_buffer_converter_new2(MBSTRG(current_internal_encoding), encoding, 0); + if (send_text_mimetype){ + efree(mimetype); + } + } + } + + /* just return if the converter is not activated. */ + if (MBSTRG(outconv) == NULL) { + RETURN_STRINGL(arg_string, arg_string_len, 1); + } + + /* flag */ + last_feed = ((arg_status & PHP_OUTPUT_HANDLER_END) != 0); + /* mode */ + mbfl_buffer_converter_illegal_mode(MBSTRG(outconv), MBSTRG(current_filter_illegal_mode)); + mbfl_buffer_converter_illegal_substchar(MBSTRG(outconv), MBSTRG(current_filter_illegal_substchar)); + + /* feed the string */ + mbfl_string_init(&string); + string.no_language = MBSTRG(language); + string.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + string.val = (unsigned char *)arg_string; + string.len = arg_string_len; + mbfl_buffer_converter_feed(MBSTRG(outconv), &string); + if (last_feed) { + mbfl_buffer_converter_flush(MBSTRG(outconv)); + } + /* get the converter output, and return it */ + mbfl_buffer_converter_result(MBSTRG(outconv), &result); + RETVAL_STRINGL((char *)result.val, result.len, 0); /* the string is already strdup()'ed */ + + /* delete the converter if it is the last feed. */ + if (last_feed) { + MBSTRG(illegalchars) += mbfl_buffer_illegalchars(MBSTRG(outconv)); + mbfl_buffer_converter_delete(MBSTRG(outconv)); + MBSTRG(outconv) = NULL; + } +} +/* }}} */ + +/* {{{ proto int mb_strlen(string str [, string encoding]) + Get character numbers of a string */ +PHP_FUNCTION(mb_strlen) +{ + int n; + mbfl_string string; + char *enc_name = NULL; + int enc_name_len; + + mbfl_string_init(&string); + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", (char **)&string.val, &string.len, &enc_name, &enc_name_len) == FAILURE) { + RETURN_FALSE; + } + + string.no_language = MBSTRG(language); + if (enc_name == NULL) { + string.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + } else { + string.no_encoding = mbfl_name2no_encoding(enc_name); + if (string.no_encoding == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", enc_name); + RETURN_FALSE; + } + } + + n = mbfl_strlen(&string); + if (n >= 0) { + RETVAL_LONG(n); + } else { + RETVAL_FALSE; + } +} +/* }}} */ + +/* {{{ proto int mb_strpos(string haystack, string needle [, int offset [, string encoding]]) + Find position of first occurrence of a string within another */ +PHP_FUNCTION(mb_strpos) +{ + int n, reverse = 0; + long offset; + mbfl_string haystack, needle; + char *enc_name = NULL; + int enc_name_len; + + mbfl_string_init(&haystack); + mbfl_string_init(&needle); + haystack.no_language = MBSTRG(language); + haystack.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + needle.no_language = MBSTRG(language); + needle.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + offset = 0; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|ls", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &offset, &enc_name, &enc_name_len) == FAILURE) { + RETURN_FALSE; + } + + if (enc_name != NULL) { + haystack.no_encoding = needle.no_encoding = mbfl_name2no_encoding(enc_name); + if (haystack.no_encoding == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", enc_name); + RETURN_FALSE; + } + } + + if (offset < 0 || offset > mbfl_strlen(&haystack)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset not contained in string"); + RETURN_FALSE; + } + if (needle.len == 0) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty delimiter"); + RETURN_FALSE; + } + + n = mbfl_strpos(&haystack, &needle, offset, reverse); + if (n >= 0) { + RETVAL_LONG(n); + } else { + switch (-n) { + case 1: + break; + case 2: + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Needle has not positive length"); + break; + case 4: + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding or conversion error"); + break; + case 8: + php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Argument is empty"); + break; + default: + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown error in mb_strpos"); + break; + } + RETVAL_FALSE; + } +} +/* }}} */ + +/* {{{ proto int mb_strrpos(string haystack, string needle [, int offset [, string encoding]]) + Find position of last occurrence of a string within another */ +PHP_FUNCTION(mb_strrpos) +{ + int n; + mbfl_string haystack, needle; + char *enc_name = NULL; + int enc_name_len; + zval **zoffset = NULL; + long offset = 0, str_flg; + char *enc_name2 = NULL; + int enc_name_len2; + + mbfl_string_init(&haystack); + mbfl_string_init(&needle); + haystack.no_language = MBSTRG(language); + haystack.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + needle.no_language = MBSTRG(language); + needle.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|Zs", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &zoffset, &enc_name, &enc_name_len) == FAILURE) { + RETURN_FALSE; + } + + if (zoffset) { + if (Z_TYPE_PP(zoffset) == IS_STRING) { + enc_name2 = Z_STRVAL_PP(zoffset); + enc_name_len2 = Z_STRLEN_PP(zoffset); + str_flg = 1; + + if (enc_name2 != NULL) { + switch (*enc_name2) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case ' ': + case '-': + case '.': + break; + default : + str_flg = 0; + break; + } + } + + if (str_flg) { + convert_to_long_ex(zoffset); + offset = Z_LVAL_PP(zoffset); + } else { + enc_name = enc_name2; + enc_name_len = enc_name_len2; + } + } else { + convert_to_long_ex(zoffset); + offset = Z_LVAL_PP(zoffset); + } + } + + if (enc_name != NULL) { + haystack.no_encoding = needle.no_encoding = mbfl_name2no_encoding(enc_name); + if (haystack.no_encoding == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", enc_name); + RETURN_FALSE; + } + } + + if (haystack.len <= 0) { + RETURN_FALSE; + } + if (needle.len <= 0) { + RETURN_FALSE; + } + + { + int haystack_char_len = mbfl_strlen(&haystack); + if ((offset > 0 && offset > haystack_char_len) || + (offset < 0 && -offset > haystack_char_len)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is greater than the length of haystack string"); + RETURN_FALSE; + } + } + + n = mbfl_strpos(&haystack, &needle, offset, 1); + if (n >= 0) { + RETVAL_LONG(n); + } else { + RETVAL_FALSE; + } +} +/* }}} */ + +/* {{{ proto int mb_stripos(string haystack, string needle [, int offset [, string encoding]]) + Finds position of first occurrence of a string within another, case insensitive */ +PHP_FUNCTION(mb_stripos) +{ + int n; + long offset; + mbfl_string haystack, needle; + const char *from_encoding = MBSTRG(current_internal_encoding)->mime_name; + int from_encoding_len; + n = -1; + offset = 0; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|ls", (char **)&haystack.val, (int *)&haystack.len, (char **)&needle.val, (int *)&needle.len, &offset, &from_encoding, &from_encoding_len) == FAILURE) { + RETURN_FALSE; + } + if (needle.len == 0) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty delimiter"); + RETURN_FALSE; + } + n = php_mb_stripos(0, (char *)haystack.val, haystack.len, (char *)needle.val, needle.len, offset, from_encoding TSRMLS_CC); + + if (n >= 0) { + RETVAL_LONG(n); + } else { + RETVAL_FALSE; + } +} +/* }}} */ + +/* {{{ proto int mb_strripos(string haystack, string needle [, int offset [, string encoding]]) + Finds position of last occurrence of a string within another, case insensitive */ +PHP_FUNCTION(mb_strripos) +{ + int n; + long offset; + mbfl_string haystack, needle; + const char *from_encoding = MBSTRG(current_internal_encoding)->mime_name; + int from_encoding_len; + n = -1; + offset = 0; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|ls", (char **)&haystack.val, (int *)&haystack.len, (char **)&needle.val, (int *)&needle.len, &offset, &from_encoding, &from_encoding_len) == FAILURE) { + RETURN_FALSE; + } + + n = php_mb_stripos(1, (char *)haystack.val, haystack.len, (char *)needle.val, needle.len, offset, from_encoding TSRMLS_CC); + + if (n >= 0) { + RETVAL_LONG(n); + } else { + RETVAL_FALSE; + } +} +/* }}} */ + +/* {{{ proto string mb_strstr(string haystack, string needle[, bool part[, string encoding]]) + Finds first occurrence of a string within another */ +PHP_FUNCTION(mb_strstr) +{ + int n, len, mblen; + mbfl_string haystack, needle, result, *ret = NULL; + char *enc_name = NULL; + int enc_name_len; + zend_bool part = 0; + + mbfl_string_init(&haystack); + mbfl_string_init(&needle); + haystack.no_language = MBSTRG(language); + haystack.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + needle.no_language = MBSTRG(language); + needle.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|bs", (char **)&haystack.val, (int *)&haystack.len, (char **)&needle.val, (int *)&needle.len, &part, &enc_name, &enc_name_len) == FAILURE) { + RETURN_FALSE; + } + + if (enc_name != NULL) { + haystack.no_encoding = needle.no_encoding = mbfl_name2no_encoding(enc_name); + if (haystack.no_encoding == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", enc_name); + RETURN_FALSE; + } + } + + if (needle.len <= 0) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty delimiter"); + RETURN_FALSE; + } + n = mbfl_strpos(&haystack, &needle, 0, 0); + if (n >= 0) { + mblen = mbfl_strlen(&haystack); + if (part) { + ret = mbfl_substr(&haystack, &result, 0, n); + if (ret != NULL) { + RETVAL_STRINGL((char *)ret->val, ret->len, 0); + } else { + RETVAL_FALSE; + } + } else { + len = (mblen - n); + ret = mbfl_substr(&haystack, &result, n, len); + if (ret != NULL) { + RETVAL_STRINGL((char *)ret->val, ret->len, 0); + } else { + RETVAL_FALSE; + } + } + } else { + RETVAL_FALSE; + } +} +/* }}} */ + +/* {{{ proto string mb_strrchr(string haystack, string needle[, bool part[, string encoding]]) + Finds the last occurrence of a character in a string within another */ +PHP_FUNCTION(mb_strrchr) +{ + int n, len, mblen; + mbfl_string haystack, needle, result, *ret = NULL; + char *enc_name = NULL; + int enc_name_len; + zend_bool part = 0; + + mbfl_string_init(&haystack); + mbfl_string_init(&needle); + haystack.no_language = MBSTRG(language); + haystack.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + needle.no_language = MBSTRG(language); + needle.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|bs", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &part, &enc_name, &enc_name_len) == FAILURE) { + RETURN_FALSE; + } + + if (enc_name != NULL) { + haystack.no_encoding = needle.no_encoding = mbfl_name2no_encoding(enc_name); + if (haystack.no_encoding == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", enc_name); + RETURN_FALSE; + } + } + + if (haystack.len <= 0) { + RETURN_FALSE; + } + if (needle.len <= 0) { + RETURN_FALSE; + } + n = mbfl_strpos(&haystack, &needle, 0, 1); + if (n >= 0) { + mblen = mbfl_strlen(&haystack); + if (part) { + ret = mbfl_substr(&haystack, &result, 0, n); + if (ret != NULL) { + RETVAL_STRINGL((char *)ret->val, ret->len, 0); + } else { + RETVAL_FALSE; + } + } else { + len = (mblen - n); + ret = mbfl_substr(&haystack, &result, n, len); + if (ret != NULL) { + RETVAL_STRINGL((char *)ret->val, ret->len, 0); + } else { + RETVAL_FALSE; + } + } + } else { + RETVAL_FALSE; + } +} +/* }}} */ + +/* {{{ proto string mb_stristr(string haystack, string needle[, bool part[, string encoding]]) + Finds first occurrence of a string within another, case insensitive */ +PHP_FUNCTION(mb_stristr) +{ + zend_bool part = 0; + unsigned int from_encoding_len, len, mblen; + int n; + mbfl_string haystack, needle, result, *ret = NULL; + const char *from_encoding = MBSTRG(current_internal_encoding)->mime_name; + mbfl_string_init(&haystack); + mbfl_string_init(&needle); + haystack.no_language = MBSTRG(language); + haystack.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + needle.no_language = MBSTRG(language); + needle.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|bs", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &part, &from_encoding, &from_encoding_len) == FAILURE) { + RETURN_FALSE; + } + + if (!needle.len) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty delimiter"); + RETURN_FALSE; + } + + haystack.no_encoding = needle.no_encoding = mbfl_name2no_encoding(from_encoding); + if (haystack.no_encoding == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", from_encoding); + RETURN_FALSE; + } + + n = php_mb_stripos(0, (char *)haystack.val, haystack.len, (char *)needle.val, needle.len, 0, from_encoding TSRMLS_CC); + + if (n <0) { + RETURN_FALSE; + } + + mblen = mbfl_strlen(&haystack); + + if (part) { + ret = mbfl_substr(&haystack, &result, 0, n); + if (ret != NULL) { + RETVAL_STRINGL((char *)ret->val, ret->len, 0); + } else { + RETVAL_FALSE; + } + } else { + len = (mblen - n); + ret = mbfl_substr(&haystack, &result, n, len); + if (ret != NULL) { + RETVAL_STRINGL((char *)ret->val, ret->len, 0); + } else { + RETVAL_FALSE; + } + } +} +/* }}} */ + +/* {{{ proto string mb_strrichr(string haystack, string needle[, bool part[, string encoding]]) + Finds the last occurrence of a character in a string within another, case insensitive */ +PHP_FUNCTION(mb_strrichr) +{ + zend_bool part = 0; + int n, from_encoding_len, len, mblen; + mbfl_string haystack, needle, result, *ret = NULL; + const char *from_encoding = MBSTRG(current_internal_encoding)->name; + mbfl_string_init(&haystack); + mbfl_string_init(&needle); + haystack.no_language = MBSTRG(language); + haystack.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + needle.no_language = MBSTRG(language); + needle.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|bs", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &part, &from_encoding, &from_encoding_len) == FAILURE) { + RETURN_FALSE; + } + + haystack.no_encoding = needle.no_encoding = mbfl_name2no_encoding(from_encoding); + if (haystack.no_encoding == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", from_encoding); + RETURN_FALSE; + } + + n = php_mb_stripos(1, (char *)haystack.val, haystack.len, (char *)needle.val, needle.len, 0, from_encoding TSRMLS_CC); + + if (n <0) { + RETURN_FALSE; + } + + mblen = mbfl_strlen(&haystack); + + if (part) { + ret = mbfl_substr(&haystack, &result, 0, n); + if (ret != NULL) { + RETVAL_STRINGL((char *)ret->val, ret->len, 0); + } else { + RETVAL_FALSE; + } + } else { + len = (mblen - n); + ret = mbfl_substr(&haystack, &result, n, len); + if (ret != NULL) { + RETVAL_STRINGL((char *)ret->val, ret->len, 0); + } else { + RETVAL_FALSE; + } + } +} +/* }}} */ + +/* {{{ proto int mb_substr_count(string haystack, string needle [, string encoding]) + Count the number of substring occurrences */ +PHP_FUNCTION(mb_substr_count) +{ + int n; + mbfl_string haystack, needle; + char *enc_name = NULL; + int enc_name_len; + + mbfl_string_init(&haystack); + mbfl_string_init(&needle); + haystack.no_language = MBSTRG(language); + haystack.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + needle.no_language = MBSTRG(language); + needle.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|s", (char **)&haystack.val, &haystack.len, (char **)&needle.val, &needle.len, &enc_name, &enc_name_len) == FAILURE) { + return; + } + + if (enc_name != NULL) { + haystack.no_encoding = needle.no_encoding = mbfl_name2no_encoding(enc_name); + if (haystack.no_encoding == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", enc_name); + RETURN_FALSE; + } + } + + if (needle.len <= 0) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty substring"); + RETURN_FALSE; + } + + n = mbfl_substr_count(&haystack, &needle); + if (n >= 0) { + RETVAL_LONG(n); + } else { + RETVAL_FALSE; + } +} +/* }}} */ + +/* {{{ proto string mb_substr(string str, int start [, int length [, string encoding]]) + Returns part of a string */ +PHP_FUNCTION(mb_substr) +{ + size_t argc = ZEND_NUM_ARGS(); + char *str, *encoding; + long from, len; + int mblen, str_len, encoding_len; + zval **z_len = NULL; + mbfl_string string, result, *ret; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|Zs", &str, &str_len, &from, &z_len, &encoding, &encoding_len) == FAILURE) { + return; + } + + mbfl_string_init(&string); + string.no_language = MBSTRG(language); + string.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + + if (argc == 4) { + string.no_encoding = mbfl_name2no_encoding(encoding); + if (string.no_encoding == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", encoding); + RETURN_FALSE; + } + } + + string.val = (unsigned char *)str; + string.len = str_len; + + if (argc < 3 || Z_TYPE_PP(z_len) == IS_NULL) { + len = str_len; + } else { + convert_to_long_ex(z_len); + len = Z_LVAL_PP(z_len); + } + + /* measures length */ + mblen = 0; + if (from < 0 || len < 0) { + mblen = mbfl_strlen(&string); + } + + /* if "from" position is negative, count start position from the end + * of the string + */ + if (from < 0) { + from = mblen + from; + if (from < 0) { + from = 0; + } + } + + /* if "length" position is negative, set it to the length + * needed to stop that many chars from the end of the string + */ + if (len < 0) { + len = (mblen - from) + len; + if (len < 0) { + len = 0; + } + } + + if (((MBSTRG(func_overload) & MB_OVERLOAD_STRING) == MB_OVERLOAD_STRING) + && (from >= mbfl_strlen(&string))) { + RETURN_FALSE; + } + + ret = mbfl_substr(&string, &result, from, len); + if (NULL == ret) { + RETURN_FALSE; + } + + RETURN_STRINGL((char *)ret->val, ret->len, 0); /* the string is already strdup()'ed */ +} +/* }}} */ + +/* {{{ proto string mb_strcut(string str, int start [, int length [, string encoding]]) + Returns part of a string */ +PHP_FUNCTION(mb_strcut) +{ + size_t argc = ZEND_NUM_ARGS(); + char *encoding; + long from, len; + int encoding_len; + zval **z_len = NULL; + mbfl_string string, result, *ret; + + mbfl_string_init(&string); + string.no_language = MBSTRG(language); + string.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|Zs", (char **)&string.val, (int **)&string.len, &from, &z_len, &encoding, &encoding_len) == FAILURE) { + return; + } + + if (argc == 4) { + string.no_encoding = mbfl_name2no_encoding(encoding); + if (string.no_encoding == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", encoding); + RETURN_FALSE; + } + } + + if (argc < 3 || Z_TYPE_PP(z_len) == IS_NULL) { + len = string.len; + } else { + convert_to_long_ex(z_len); + len = Z_LVAL_PP(z_len); + } + + /* if "from" position is negative, count start position from the end + * of the string + */ + if (from < 0) { + from = string.len + from; + if (from < 0) { + from = 0; + } + } + + /* if "length" position is negative, set it to the length + * needed to stop that many chars from the end of the string + */ + if (len < 0) { + len = (string.len - from) + len; + if (len < 0) { + len = 0; + } + } + + if ((unsigned int)from > string.len) { + RETURN_FALSE; + } + + ret = mbfl_strcut(&string, &result, from, len); + if (ret == NULL) { + RETURN_FALSE; + } + + RETURN_STRINGL((char *)ret->val, ret->len, 0); /* the string is already strdup()'ed */ +} +/* }}} */ + +/* {{{ proto int mb_strwidth(string str [, string encoding]) + Gets terminal width of a string */ +PHP_FUNCTION(mb_strwidth) +{ + int n; + mbfl_string string; + char *enc_name = NULL; + int enc_name_len; + + mbfl_string_init(&string); + + string.no_language = MBSTRG(language); + string.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", (char **)&string.val, &string.len, &enc_name, &enc_name_len) == FAILURE) { + return; + } + + if (enc_name != NULL) { + string.no_encoding = mbfl_name2no_encoding(enc_name); + if (string.no_encoding == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", enc_name); + RETURN_FALSE; + } + } + + n = mbfl_strwidth(&string); + if (n >= 0) { + RETVAL_LONG(n); + } else { + RETVAL_FALSE; + } +} +/* }}} */ + +/* {{{ proto string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]]) + Trim the string in terminal width */ +PHP_FUNCTION(mb_strimwidth) +{ + char *str, *trimmarker, *encoding; + long from, width; + int str_len, trimmarker_len, encoding_len; + mbfl_string string, result, marker, *ret; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sll|ss", &str, &str_len, &from, &width, &trimmarker, &trimmarker_len, &encoding, &encoding_len) == FAILURE) { + return; + } + + mbfl_string_init(&string); + mbfl_string_init(&marker); + string.no_language = MBSTRG(language); + string.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + marker.no_language = MBSTRG(language); + marker.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + marker.val = NULL; + marker.len = 0; + + if (ZEND_NUM_ARGS() == 5) { + string.no_encoding = marker.no_encoding = mbfl_name2no_encoding(encoding); + if (string.no_encoding == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", encoding); + RETURN_FALSE; + } + } + + string.val = (unsigned char *)str; + string.len = str_len; + + if (from < 0 || from > str_len) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Start position is out of range"); + RETURN_FALSE; + } + + if (width < 0) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Width is negative value"); + RETURN_FALSE; + } + + if (ZEND_NUM_ARGS() >= 4) { + marker.val = (unsigned char *)trimmarker; + marker.len = trimmarker_len; + } + + ret = mbfl_strimwidth(&string, &marker, &result, from, width); + + if (ret == NULL) { + RETURN_FALSE; + } + + RETVAL_STRINGL((char *)ret->val, ret->len, 0); /* the string is already strdup()'ed */ +} +/* }}} */ + +/* {{{ MBSTRING_API char *php_mb_convert_encoding() */ +MBSTRING_API char * php_mb_convert_encoding(const char *input, size_t length, const char *_to_encoding, const char *_from_encodings, size_t *output_len TSRMLS_DC) +{ + mbfl_string string, result, *ret; + const mbfl_encoding *from_encoding, *to_encoding; + mbfl_buffer_converter *convd; + size_t size; + const mbfl_encoding **list; + char *output=NULL; + + if (output_len) { + *output_len = 0; + } + if (!input) { + return NULL; + } + /* new encoding */ + if (_to_encoding && strlen(_to_encoding)) { + to_encoding = mbfl_name2encoding(_to_encoding); + if (!to_encoding) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", _to_encoding); + return NULL; + } + } else { + to_encoding = MBSTRG(current_internal_encoding); + } + + /* initialize string */ + mbfl_string_init(&string); + mbfl_string_init(&result); + from_encoding = MBSTRG(current_internal_encoding); + string.no_encoding = from_encoding->no_encoding; + string.no_language = MBSTRG(language); + string.val = (unsigned char *)input; + string.len = length; + + /* pre-conversion encoding */ + if (_from_encodings) { + list = NULL; + size = 0; + php_mb_parse_encoding_list(_from_encodings, strlen(_from_encodings), &list, &size, 0 TSRMLS_CC); + if (size == 1) { + from_encoding = *list; + string.no_encoding = from_encoding->no_encoding; + } else if (size > 1) { + /* auto detect */ + from_encoding = mbfl_identify_encoding2(&string, list, size, MBSTRG(strict_detection)); + if (from_encoding) { + string.no_encoding = from_encoding->no_encoding; + } else { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to detect character encoding"); + from_encoding = &mbfl_encoding_pass; + to_encoding = from_encoding; + string.no_encoding = from_encoding->no_encoding; + } + } else { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal character encoding specified"); + } + if (list != NULL) { + efree((void *)list); + } + } + + /* initialize converter */ + convd = mbfl_buffer_converter_new2(from_encoding, to_encoding, string.len); + if (convd == NULL) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create character encoding converter"); + return NULL; + } + mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode)); + mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar)); + + /* do it */ + ret = mbfl_buffer_converter_feed_result(convd, &string, &result); + if (ret) { + if (output_len) { + *output_len = ret->len; + } + output = (char *)ret->val; + } + + MBSTRG(illegalchars) += mbfl_buffer_illegalchars(convd); + mbfl_buffer_converter_delete(convd); + return output; +} +/* }}} */ + +/* {{{ proto string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding]) + Returns converted string in desired encoding */ +PHP_FUNCTION(mb_convert_encoding) +{ + char *arg_str, *arg_new; + int str_len, new_len; + zval *arg_old; + int i; + size_t size, l, n; + char *_from_encodings = NULL, *ret, *s_free = NULL; + + zval **hash_entry; + HashTable *target_hash; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|z", &arg_str, &str_len, &arg_new, &new_len, &arg_old) == FAILURE) { + return; + } + + if (ZEND_NUM_ARGS() == 3) { + switch (Z_TYPE_P(arg_old)) { + case IS_ARRAY: + target_hash = Z_ARRVAL_P(arg_old); + zend_hash_internal_pointer_reset(target_hash); + i = zend_hash_num_elements(target_hash); + _from_encodings = NULL; + + while (i > 0) { + if (zend_hash_get_current_data(target_hash, (void **) &hash_entry) == FAILURE) { + break; + } + + convert_to_string_ex(hash_entry); + + if ( _from_encodings) { + l = strlen(_from_encodings); + n = strlen(Z_STRVAL_PP(hash_entry)); + _from_encodings = erealloc(_from_encodings, l+n+2); + strcpy(_from_encodings+l, ","); + strcpy(_from_encodings+l+1, Z_STRVAL_PP(hash_entry)); + } else { + _from_encodings = estrdup(Z_STRVAL_PP(hash_entry)); + } + + zend_hash_move_forward(target_hash); + i--; + } + + if (_from_encodings != NULL && !strlen(_from_encodings)) { + efree(_from_encodings); + _from_encodings = NULL; + } + s_free = _from_encodings; + break; + default: + convert_to_string(arg_old); + _from_encodings = Z_STRVAL_P(arg_old); + break; + } + } + + /* new encoding */ + ret = php_mb_convert_encoding(arg_str, str_len, arg_new, _from_encodings, &size TSRMLS_CC); + if (ret != NULL) { + RETVAL_STRINGL(ret, size, 0); /* the string is already strdup()'ed */ + } else { + RETVAL_FALSE; + } + + if ( s_free) { + efree(s_free); + } +} +/* }}} */ + +/* {{{ proto string mb_convert_case(string sourcestring, int mode [, string encoding]) + Returns a case-folded version of sourcestring */ +PHP_FUNCTION(mb_convert_case) +{ + const char *from_encoding = MBSTRG(current_internal_encoding)->mime_name; + char *str; + int str_len, from_encoding_len; + long case_mode = 0; + char *newstr; + size_t ret_len; + + RETVAL_FALSE; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sl|s!", &str, &str_len, + &case_mode, &from_encoding, &from_encoding_len) == FAILURE) + RETURN_FALSE; + + newstr = php_unicode_convert_case(case_mode, str, (size_t) str_len, &ret_len, from_encoding TSRMLS_CC); + + if (newstr) { + RETVAL_STRINGL(newstr, ret_len, 0); + } +} +/* }}} */ + +/* {{{ proto string mb_strtoupper(string sourcestring [, string encoding]) + * Returns a uppercased version of sourcestring + */ +PHP_FUNCTION(mb_strtoupper) +{ + const char *from_encoding = MBSTRG(current_internal_encoding)->mime_name; + char *str; + int str_len, from_encoding_len; + char *newstr; + size_t ret_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!", &str, &str_len, + &from_encoding, &from_encoding_len) == FAILURE) { + return; + } + newstr = php_unicode_convert_case(PHP_UNICODE_CASE_UPPER, str, (size_t) str_len, &ret_len, from_encoding TSRMLS_CC); + + if (newstr) { + RETURN_STRINGL(newstr, ret_len, 0); + } + RETURN_FALSE; +} +/* }}} */ + +/* {{{ proto string mb_strtolower(string sourcestring [, string encoding]) + * Returns a lowercased version of sourcestring + */ +PHP_FUNCTION(mb_strtolower) +{ + const char *from_encoding = MBSTRG(current_internal_encoding)->mime_name; + char *str; + int str_len, from_encoding_len; + char *newstr; + size_t ret_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!", &str, &str_len, + &from_encoding, &from_encoding_len) == FAILURE) { + return; + } + newstr = php_unicode_convert_case(PHP_UNICODE_CASE_LOWER, str, (size_t) str_len, &ret_len, from_encoding TSRMLS_CC); + + if (newstr) { + RETURN_STRINGL(newstr, ret_len, 0); + } + RETURN_FALSE; +} +/* }}} */ + +/* {{{ proto string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]]) + Encodings of the given string is returned (as a string) */ +PHP_FUNCTION(mb_detect_encoding) +{ + char *str; + int str_len; + zend_bool strict=0; + zval *encoding_list; + + mbfl_string string; + const mbfl_encoding *ret; + const mbfl_encoding **elist, **list; + size_t size; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|zb", &str, &str_len, &encoding_list, &strict) == FAILURE) { + return; + } + + /* make encoding list */ + list = NULL; + size = 0; + if (ZEND_NUM_ARGS() >= 2 && !ZVAL_IS_NULL(encoding_list)) { + switch (Z_TYPE_P(encoding_list)) { + case IS_ARRAY: + if (FAILURE == php_mb_parse_encoding_array(encoding_list, &list, &size, 0 TSRMLS_CC)) { + if (list) { + efree(list); + list = NULL; + size = 0; + } + } + break; + default: + convert_to_string(encoding_list); + if (FAILURE == php_mb_parse_encoding_list(Z_STRVAL_P(encoding_list), Z_STRLEN_P(encoding_list), &list, &size, 0 TSRMLS_CC)) { + if (list) { + efree(list); + list = NULL; + size = 0; + } + } + break; + } + if (size <= 0) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal argument"); + } + } + + if (ZEND_NUM_ARGS() < 3) { + strict = (zend_bool)MBSTRG(strict_detection); + } + + if (size > 0 && list != NULL) { + elist = list; + } else { + elist = MBSTRG(current_detect_order_list); + size = MBSTRG(current_detect_order_list_size); + } + + mbfl_string_init(&string); + string.no_language = MBSTRG(language); + string.val = (unsigned char *)str; + string.len = str_len; + ret = mbfl_identify_encoding2(&string, elist, size, strict); + + if (list != NULL) { + efree((void *)list); + } + + if (ret == NULL) { + RETURN_FALSE; + } + + RETVAL_STRING((char *)ret->name, 1); +} +/* }}} */ + +/* {{{ proto mixed mb_list_encodings() + Returns an array of all supported entity encodings */ +PHP_FUNCTION(mb_list_encodings) +{ + const mbfl_encoding **encodings; + const mbfl_encoding *encoding; + int i; + + array_init(return_value); + i = 0; + encodings = mbfl_get_supported_encodings(); + while ((encoding = encodings[i++]) != NULL) { + add_next_index_string(return_value, (char *) encoding->name, 1); + } +} +/* }}} */ + +/* {{{ proto array mb_encoding_aliases(string encoding) + Returns an array of the aliases of a given encoding name */ +PHP_FUNCTION(mb_encoding_aliases) +{ + const mbfl_encoding *encoding; + char *name = NULL; + int name_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == FAILURE) { + RETURN_FALSE; + } + + encoding = mbfl_name2encoding(name); + if (!encoding) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", name); + RETURN_FALSE; + } + + array_init(return_value); + if (encoding->aliases != NULL) { + const char **alias; + for (alias = *encoding->aliases; *alias; ++alias) { + add_next_index_string(return_value, (char *)*alias, 1); + } + } +} +/* }}} */ + +/* {{{ proto string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed [, int indent]]]]) + Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?= */ +PHP_FUNCTION(mb_encode_mimeheader) +{ + enum mbfl_no_encoding charset, transenc; + mbfl_string string, result, *ret; + char *charset_name = NULL; + int charset_name_len; + char *trans_enc_name = NULL; + int trans_enc_name_len; + char *linefeed = "\r\n"; + int linefeed_len; + long indent = 0; + + mbfl_string_init(&string); + string.no_language = MBSTRG(language); + string.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|sssl", (char **)&string.val, &string.len, &charset_name, &charset_name_len, &trans_enc_name, &trans_enc_name_len, &linefeed, &linefeed_len, &indent) == FAILURE) { + return; + } + + charset = mbfl_no_encoding_pass; + transenc = mbfl_no_encoding_base64; + + if (charset_name != NULL) { + charset = mbfl_name2no_encoding(charset_name); + if (charset == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", charset_name); + RETURN_FALSE; + } + } else { + const mbfl_language *lang = mbfl_no2language(MBSTRG(language)); + if (lang != NULL) { + charset = lang->mail_charset; + transenc = lang->mail_header_encoding; + } + } + + if (trans_enc_name != NULL) { + if (*trans_enc_name == 'B' || *trans_enc_name == 'b') { + transenc = mbfl_no_encoding_base64; + } else if (*trans_enc_name == 'Q' || *trans_enc_name == 'q') { + transenc = mbfl_no_encoding_qprint; + } + } + + mbfl_string_init(&result); + ret = mbfl_mime_header_encode(&string, &result, charset, transenc, linefeed, indent); + if (ret != NULL) { + RETVAL_STRINGL((char *)ret->val, ret->len, 0); /* the string is already strdup()'ed */ + } else { + RETVAL_FALSE; + } +} +/* }}} */ + +/* {{{ proto string mb_decode_mimeheader(string string) + Decodes the MIME "encoded-word" in the string */ +PHP_FUNCTION(mb_decode_mimeheader) +{ + mbfl_string string, result, *ret; + + mbfl_string_init(&string); + string.no_language = MBSTRG(language); + string.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", (char **)&string.val, &string.len) == FAILURE) { + return; + } + + mbfl_string_init(&result); + ret = mbfl_mime_header_decode(&string, &result, MBSTRG(current_internal_encoding)->no_encoding); + if (ret != NULL) { + RETVAL_STRINGL((char *)ret->val, ret->len, 0); /* the string is already strdup()'ed */ + } else { + RETVAL_FALSE; + } +} +/* }}} */ + +/* {{{ proto string mb_convert_kana(string str [, string option] [, string encoding]) + Conversion between full-width character and half-width character (Japanese) */ +PHP_FUNCTION(mb_convert_kana) +{ + int opt, i; + mbfl_string string, result, *ret; + char *optstr = NULL; + int optstr_len; + char *encname = NULL; + int encname_len; + + mbfl_string_init(&string); + string.no_language = MBSTRG(language); + string.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ss", (char **)&string.val, &string.len, &optstr, &optstr_len, &encname, &encname_len) == FAILURE) { + return; + } + + /* option */ + if (optstr != NULL) { + char *p = optstr; + int n = optstr_len; + i = 0; + opt = 0; + while (i < n) { + i++; + switch (*p++) { + case 'A': + opt |= 0x1; + break; + case 'a': + opt |= 0x10; + break; + case 'R': + opt |= 0x2; + break; + case 'r': + opt |= 0x20; + break; + case 'N': + opt |= 0x4; + break; + case 'n': + opt |= 0x40; + break; + case 'S': + opt |= 0x8; + break; + case 's': + opt |= 0x80; + break; + case 'K': + opt |= 0x100; + break; + case 'k': + opt |= 0x1000; + break; + case 'H': + opt |= 0x200; + break; + case 'h': + opt |= 0x2000; + break; + case 'V': + opt |= 0x800; + break; + case 'C': + opt |= 0x10000; + break; + case 'c': + opt |= 0x20000; + break; + case 'M': + opt |= 0x100000; + break; + case 'm': + opt |= 0x200000; + break; + } + } + } else { + opt = 0x900; + } + + /* encoding */ + if (encname != NULL) { + string.no_encoding = mbfl_name2no_encoding(encname); + if (string.no_encoding == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", encname); + RETURN_FALSE; + } + } + + ret = mbfl_ja_jp_hantozen(&string, &result, opt); + if (ret != NULL) { + RETVAL_STRINGL((char *)ret->val, ret->len, 0); /* the string is already strdup()'ed */ + } else { + RETVAL_FALSE; + } +} +/* }}} */ + +#define PHP_MBSTR_STACK_BLOCK_SIZE 32 + +/* {{{ proto string mb_convert_variables(string to-encoding, mixed from-encoding, mixed vars [, ...]) + Converts the string resource in variables to desired encoding */ +PHP_FUNCTION(mb_convert_variables) +{ + zval ***args, ***stack, **var, **hash_entry, **zfrom_enc; + HashTable *target_hash; + mbfl_string string, result, *ret; + const mbfl_encoding *from_encoding, *to_encoding; + mbfl_encoding_detector *identd; + mbfl_buffer_converter *convd; + int n, to_enc_len, argc, stack_level, stack_max; + size_t elistsz; + const mbfl_encoding **elist; + char *to_enc; + void *ptmp; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sZ+", &to_enc, &to_enc_len, &zfrom_enc, &args, &argc) == FAILURE) { + return; + } + + /* new encoding */ + to_encoding = mbfl_name2encoding(to_enc); + if (!to_encoding) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", to_enc); + efree(args); + RETURN_FALSE; + } + + /* initialize string */ + mbfl_string_init(&string); + mbfl_string_init(&result); + from_encoding = MBSTRG(current_internal_encoding); + string.no_encoding = from_encoding->no_encoding; + string.no_language = MBSTRG(language); + + /* pre-conversion encoding */ + elist = NULL; + elistsz = 0; + switch (Z_TYPE_PP(zfrom_enc)) { + case IS_ARRAY: + php_mb_parse_encoding_array(*zfrom_enc, &elist, &elistsz, 0 TSRMLS_CC); + break; + default: + convert_to_string_ex(zfrom_enc); + php_mb_parse_encoding_list(Z_STRVAL_PP(zfrom_enc), Z_STRLEN_PP(zfrom_enc), &elist, &elistsz, 0 TSRMLS_CC); + break; + } + if (elistsz <= 0) { + from_encoding = &mbfl_encoding_pass; + } else if (elistsz == 1) { + from_encoding = *elist; + } else { + /* auto detect */ + from_encoding = NULL; + stack_max = PHP_MBSTR_STACK_BLOCK_SIZE; + stack = (zval ***)safe_emalloc(stack_max, sizeof(zval **), 0); + stack_level = 0; + identd = mbfl_encoding_detector_new2(elist, elistsz, MBSTRG(strict_detection)); + if (identd != NULL) { + n = 0; + while (n < argc || stack_level > 0) { + if (stack_level <= 0) { + var = args[n++]; + if (Z_TYPE_PP(var) == IS_ARRAY || Z_TYPE_PP(var) == IS_OBJECT) { + target_hash = HASH_OF(*var); + if (target_hash != NULL) { + zend_hash_internal_pointer_reset(target_hash); + } + } + } else { + stack_level--; + var = stack[stack_level]; + } + if (Z_TYPE_PP(var) == IS_ARRAY || Z_TYPE_PP(var) == IS_OBJECT) { + target_hash = HASH_OF(*var); + if (target_hash != NULL) { + while (zend_hash_get_current_data(target_hash, (void **) &hash_entry) != FAILURE) { + zend_hash_move_forward(target_hash); + if (Z_TYPE_PP(hash_entry) == IS_ARRAY || Z_TYPE_PP(hash_entry) == IS_OBJECT) { + if (stack_level >= stack_max) { + stack_max += PHP_MBSTR_STACK_BLOCK_SIZE; + ptmp = erealloc(stack, sizeof(zval **)*stack_max); + stack = (zval ***)ptmp; + } + stack[stack_level] = var; + stack_level++; + var = hash_entry; + target_hash = HASH_OF(*var); + if (target_hash != NULL) { + zend_hash_internal_pointer_reset(target_hash); + continue; + } + } else if (Z_TYPE_PP(hash_entry) == IS_STRING) { + string.val = (unsigned char *)Z_STRVAL_PP(hash_entry); + string.len = Z_STRLEN_PP(hash_entry); + if (mbfl_encoding_detector_feed(identd, &string)) { + goto detect_end; /* complete detecting */ + } + } + } + } + } else if (Z_TYPE_PP(var) == IS_STRING) { + string.val = (unsigned char *)Z_STRVAL_PP(var); + string.len = Z_STRLEN_PP(var); + if (mbfl_encoding_detector_feed(identd, &string)) { + goto detect_end; /* complete detecting */ + } + } + } +detect_end: + from_encoding = mbfl_encoding_detector_judge2(identd); + mbfl_encoding_detector_delete(identd); + } + efree(stack); + + if (!from_encoding) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to detect encoding"); + from_encoding = &mbfl_encoding_pass; + } + } + if (elist != NULL) { + efree((void *)elist); + } + /* create converter */ + convd = NULL; + if (from_encoding != &mbfl_encoding_pass) { + convd = mbfl_buffer_converter_new2(from_encoding, to_encoding, 0); + if (convd == NULL) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create converter"); + RETURN_FALSE; + } + mbfl_buffer_converter_illegal_mode(convd, MBSTRG(current_filter_illegal_mode)); + mbfl_buffer_converter_illegal_substchar(convd, MBSTRG(current_filter_illegal_substchar)); + } + + /* convert */ + if (convd != NULL) { + stack_max = PHP_MBSTR_STACK_BLOCK_SIZE; + stack = (zval ***)safe_emalloc(stack_max, sizeof(zval **), 0); + stack_level = 0; + n = 0; + while (n < argc || stack_level > 0) { + if (stack_level <= 0) { + var = args[n++]; + if (Z_TYPE_PP(var) == IS_ARRAY || Z_TYPE_PP(var) == IS_OBJECT) { + target_hash = HASH_OF(*var); + if (target_hash != NULL) { + zend_hash_internal_pointer_reset(target_hash); + } + } + } else { + stack_level--; + var = stack[stack_level]; + } + if (Z_TYPE_PP(var) == IS_ARRAY || Z_TYPE_PP(var) == IS_OBJECT) { + target_hash = HASH_OF(*var); + if (target_hash != NULL) { + while (zend_hash_get_current_data(target_hash, (void **) &hash_entry) != FAILURE) { + zend_hash_move_forward(target_hash); + if (Z_TYPE_PP(hash_entry) == IS_ARRAY || Z_TYPE_PP(hash_entry) == IS_OBJECT) { + if (stack_level >= stack_max) { + stack_max += PHP_MBSTR_STACK_BLOCK_SIZE; + ptmp = erealloc(stack, sizeof(zval **)*stack_max); + stack = (zval ***)ptmp; + } + stack[stack_level] = var; + stack_level++; + var = hash_entry; + SEPARATE_ZVAL(hash_entry); + target_hash = HASH_OF(*var); + if (target_hash != NULL) { + zend_hash_internal_pointer_reset(target_hash); + continue; + } + } else if (Z_TYPE_PP(hash_entry) == IS_STRING) { + string.val = (unsigned char *)Z_STRVAL_PP(hash_entry); + string.len = Z_STRLEN_PP(hash_entry); + ret = mbfl_buffer_converter_feed_result(convd, &string, &result); + if (ret != NULL) { + if (Z_REFCOUNT_PP(hash_entry) > 1) { + Z_DELREF_PP(hash_entry); + MAKE_STD_ZVAL(*hash_entry); + } else { + zval_dtor(*hash_entry); + } + ZVAL_STRINGL(*hash_entry, (char *)ret->val, ret->len, 0); + } + } + } + } + } else if (Z_TYPE_PP(var) == IS_STRING) { + string.val = (unsigned char *)Z_STRVAL_PP(var); + string.len = Z_STRLEN_PP(var); + ret = mbfl_buffer_converter_feed_result(convd, &string, &result); + if (ret != NULL) { + zval_dtor(*var); + ZVAL_STRINGL(*var, (char *)ret->val, ret->len, 0); + } + } + } + efree(stack); + + MBSTRG(illegalchars) += mbfl_buffer_illegalchars(convd); + mbfl_buffer_converter_delete(convd); + } + + efree(args); + + if (from_encoding) { + RETURN_STRING(from_encoding->name, 1); + } else { + RETURN_FALSE; + } +} +/* }}} */ + +/* {{{ HTML numeric entity */ +/* {{{ static void php_mb_numericentity_exec() */ +static void +php_mb_numericentity_exec(INTERNAL_FUNCTION_PARAMETERS, int type) +{ + char *str, *encoding; + int str_len, encoding_len; + zval *zconvmap, **hash_entry; + HashTable *target_hash; + size_t argc = ZEND_NUM_ARGS(); + int i, *convmap, *mapelm, mapsize=0; + zend_bool is_hex = 0; + mbfl_string string, result, *ret; + enum mbfl_no_encoding no_encoding; + + if (zend_parse_parameters(argc TSRMLS_CC, "sz|sb", &str, &str_len, &zconvmap, &encoding, &encoding_len, &is_hex) == FAILURE) { + return; + } + + mbfl_string_init(&string); + string.no_language = MBSTRG(language); + string.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + string.val = (unsigned char *)str; + string.len = str_len; + + /* encoding */ + if ((argc == 3 || argc == 4) && encoding_len > 0) { + no_encoding = mbfl_name2no_encoding(encoding); + if (no_encoding == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", encoding); + RETURN_FALSE; + } else { + string.no_encoding = no_encoding; + } + } + + if (argc == 4) { + if (type == 0 && is_hex) { + type = 2; /* output in hex format */ + } + } + + /* conversion map */ + convmap = NULL; + if (Z_TYPE_P(zconvmap) == IS_ARRAY) { + target_hash = Z_ARRVAL_P(zconvmap); + zend_hash_internal_pointer_reset(target_hash); + i = zend_hash_num_elements(target_hash); + if (i > 0) { + convmap = (int *)safe_emalloc(i, sizeof(int), 0); + mapelm = convmap; + mapsize = 0; + while (i > 0) { + if (zend_hash_get_current_data(target_hash, (void **) &hash_entry) == FAILURE) { + break; + } + convert_to_long_ex(hash_entry); + *mapelm++ = Z_LVAL_PP(hash_entry); + mapsize++; + i--; + zend_hash_move_forward(target_hash); + } + } + } + if (convmap == NULL) { + RETURN_FALSE; + } + mapsize /= 4; + + ret = mbfl_html_numeric_entity(&string, &result, convmap, mapsize, type); + if (ret != NULL) { + RETVAL_STRINGL((char *)ret->val, ret->len, 0); + } else { + RETVAL_FALSE; + } + efree((void *)convmap); +} +/* }}} */ + +/* {{{ proto string mb_encode_numericentity(string string, array convmap [, string encoding [, bool is_hex]]) + Converts specified characters to HTML numeric entities */ +PHP_FUNCTION(mb_encode_numericentity) +{ + php_mb_numericentity_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); +} +/* }}} */ + +/* {{{ proto string mb_decode_numericentity(string string, array convmap [, string encoding]) + Converts HTML numeric entities to character code */ +PHP_FUNCTION(mb_decode_numericentity) +{ + php_mb_numericentity_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); +} +/* }}} */ +/* }}} */ + +/* {{{ proto int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]]) + * Sends an email message with MIME scheme + */ + +#define SKIP_LONG_HEADER_SEP_MBSTRING(str, pos) \ + if (str[pos] == '\r' && str[pos + 1] == '\n' && (str[pos + 2] == ' ' || str[pos + 2] == '\t')) { \ + pos += 2; \ + while (str[pos + 1] == ' ' || str[pos + 1] == '\t') { \ + pos++; \ + } \ + continue; \ + } + +#define MAIL_ASCIIZ_CHECK_MBSTRING(str, len) \ + pp = str; \ + ee = pp + len; \ + while ((pp = memchr(pp, '\0', (ee - pp)))) { \ + *pp = ' '; \ + } \ + +#define APPEND_ONE_CHAR(ch) do { \ + if (token.a > 0) { \ + smart_str_appendc(&token, ch); \ + } else {\ + token.len++; \ + } \ +} while (0) + +#define SEPARATE_SMART_STR(str) do {\ + if ((str)->a == 0) { \ + char *tmp_ptr; \ + (str)->a = 1; \ + while ((str)->a < (str)->len) { \ + (str)->a <<= 1; \ + } \ + tmp_ptr = emalloc((str)->a + 1); \ + memcpy(tmp_ptr, (str)->c, (str)->len); \ + (str)->c = tmp_ptr; \ + } \ +} while (0) + +static void my_smart_str_dtor(smart_str *s) +{ + if (s->a > 0) { + smart_str_free(s); + } +} + +static int _php_mbstr_parse_mail_headers(HashTable *ht, const char *str, size_t str_len) +{ + const char *ps; + size_t icnt; + int state = 0; + int crlf_state = -1; + + smart_str token = { 0, 0, 0 }; + smart_str fld_name = { 0, 0, 0 }, fld_val = { 0, 0, 0 }; + + ps = str; + icnt = str_len; + + /* + * C o n t e n t - T y p e : t e x t / h t m l \r\n + * ^ ^^^^^^^^^^^^^^^^^^^^^ ^^^ ^^^^^^^^^^^^^^^^^ ^^^^ + * state 0 1 2 3 + * + * C o n t e n t - T y p e : t e x t / h t m l \r\n + * ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^ + * crlf_state -1 0 1 -1 + * + */ + + while (icnt > 0) { + switch (*ps) { + case ':': + if (crlf_state == 1) { + APPEND_ONE_CHAR('\r'); + } + + if (state == 0 || state == 1) { + fld_name = token; + + state = 2; + } else { + APPEND_ONE_CHAR(*ps); + } + + crlf_state = 0; + break; + + case '\n': + if (crlf_state == -1) { + goto out; + } + crlf_state = -1; + break; + + case '\r': + if (crlf_state == 1) { + APPEND_ONE_CHAR('\r'); + } else { + crlf_state = 1; + } + break; + + case ' ': case '\t': + if (crlf_state == -1) { + if (state == 3) { + /* continuing from the previous line */ + SEPARATE_SMART_STR(&token); + state = 4; + } else { + /* simply skipping this new line */ + state = 5; + } + } else { + if (crlf_state == 1) { + APPEND_ONE_CHAR('\r'); + } + if (state == 1 || state == 3) { + APPEND_ONE_CHAR(*ps); + } + } + crlf_state = 0; + break; + + default: + switch (state) { + case 0: + token.c = (char *)ps; + token.len = 0; + token.a = 0; + state = 1; + break; + + case 2: + if (crlf_state != -1) { + token.c = (char *)ps; + token.len = 0; + token.a = 0; + + state = 3; + break; + } + /* break is missing intentionally */ + + case 3: + if (crlf_state == -1) { + fld_val = token; + + if (fld_name.c != NULL && fld_val.c != NULL) { + char *dummy; + + /* FIXME: some locale free implementation is + * really required here,,, */ + SEPARATE_SMART_STR(&fld_name); + php_strtoupper(fld_name.c, fld_name.len); + + zend_hash_update(ht, (char *)fld_name.c, fld_name.len, &fld_val, sizeof(smart_str), (void **)&dummy); + + my_smart_str_dtor(&fld_name); + } + + memset(&fld_name, 0, sizeof(smart_str)); + memset(&fld_val, 0, sizeof(smart_str)); + + token.c = (char *)ps; + token.len = 0; + token.a = 0; + + state = 1; + } + break; + + case 4: + APPEND_ONE_CHAR(' '); + state = 3; + break; + } + + if (crlf_state == 1) { + APPEND_ONE_CHAR('\r'); + } + + APPEND_ONE_CHAR(*ps); + + crlf_state = 0; + break; + } + ps++, icnt--; + } +out: + if (state == 2) { + token.c = ""; + token.len = 0; + token.a = 0; + + state = 3; + } + if (state == 3) { + fld_val = token; + + if (fld_name.c != NULL && fld_val.c != NULL) { + void *dummy; + + /* FIXME: some locale free implementation is + * really required here,,, */ + SEPARATE_SMART_STR(&fld_name); + php_strtoupper(fld_name.c, fld_name.len); + + zend_hash_update(ht, (char *)fld_name.c, fld_name.len, &fld_val, sizeof(smart_str), (void **)&dummy); + + my_smart_str_dtor(&fld_name); + } + } + return state; +} + +PHP_FUNCTION(mb_send_mail) +{ + int n; + char *to = NULL; + int to_len; + char *message = NULL; + int message_len; + char *headers = NULL; + int headers_len; + char *subject = NULL; + int subject_len; + char *extra_cmd = NULL; + int extra_cmd_len; + int i; + char *to_r = NULL; + char *force_extra_parameters = INI_STR("mail.force_extra_parameters"); + struct { + int cnt_type:1; + int cnt_trans_enc:1; + } suppressed_hdrs = { 0, 0 }; + + char *message_buf = NULL, *subject_buf = NULL, *p; + mbfl_string orig_str, conv_str; + mbfl_string *pstr; /* pointer to mbfl string for return value */ + enum mbfl_no_encoding + tran_cs, /* transfar text charset */ + head_enc, /* header transfar encoding */ + body_enc; /* body transfar encoding */ + mbfl_memory_device device; /* automatic allocateable buffer for additional header */ + const mbfl_language *lang; + int err = 0; + HashTable ht_headers; + smart_str *s; + extern void mbfl_memory_device_unput(mbfl_memory_device *device); + char *pp, *ee; + + /* initialize */ + mbfl_memory_device_init(&device, 0, 0); + mbfl_string_init(&orig_str); + mbfl_string_init(&conv_str); + + /* character-set, transfer-encoding */ + tran_cs = mbfl_no_encoding_utf8; + head_enc = mbfl_no_encoding_base64; + body_enc = mbfl_no_encoding_base64; + lang = mbfl_no2language(MBSTRG(language)); + if (lang != NULL) { + tran_cs = lang->mail_charset; + head_enc = lang->mail_header_encoding; + body_enc = lang->mail_body_encoding; + } + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss|ss", &to, &to_len, &subject, &subject_len, &message, &message_len, &headers, &headers_len, &extra_cmd, &extra_cmd_len) == FAILURE) { + return; + } + + /* ASCIIZ check */ + MAIL_ASCIIZ_CHECK_MBSTRING(to, to_len); + MAIL_ASCIIZ_CHECK_MBSTRING(subject, subject_len); + MAIL_ASCIIZ_CHECK_MBSTRING(message, message_len); + if (headers) { + MAIL_ASCIIZ_CHECK_MBSTRING(headers, headers_len); + } + if (extra_cmd) { + MAIL_ASCIIZ_CHECK_MBSTRING(extra_cmd, extra_cmd_len); + } + + zend_hash_init(&ht_headers, 0, NULL, (dtor_func_t) my_smart_str_dtor, 0); + + if (headers != NULL) { + _php_mbstr_parse_mail_headers(&ht_headers, headers, headers_len); + } + + if (zend_hash_find(&ht_headers, "CONTENT-TYPE", sizeof("CONTENT-TYPE") - 1, (void **)&s) == SUCCESS) { + char *tmp; + char *param_name; + char *charset = NULL; + + SEPARATE_SMART_STR(s); + smart_str_0(s); + + p = strchr(s->c, ';'); + + if (p != NULL) { + /* skipping the padded spaces */ + do { + ++p; + } while (*p == ' ' || *p == '\t'); + + if (*p != '\0') { + if ((param_name = php_strtok_r(p, "= ", &tmp)) != NULL) { + if (strcasecmp(param_name, "charset") == 0) { + enum mbfl_no_encoding _tran_cs = tran_cs; + + charset = php_strtok_r(NULL, "= \"", &tmp); + if (charset != NULL) { + _tran_cs = mbfl_name2no_encoding(charset); + } + + if (_tran_cs == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported charset \"%s\" - will be regarded as ascii", charset); + _tran_cs = mbfl_no_encoding_ascii; + } + tran_cs = _tran_cs; + } + } + } + } + suppressed_hdrs.cnt_type = 1; + } + + if (zend_hash_find(&ht_headers, "CONTENT-TRANSFER-ENCODING", sizeof("CONTENT-TRANSFER-ENCODING") - 1, (void **)&s) == SUCCESS) { + enum mbfl_no_encoding _body_enc; + SEPARATE_SMART_STR(s); + smart_str_0(s); + + _body_enc = mbfl_name2no_encoding(s->c); + switch (_body_enc) { + case mbfl_no_encoding_base64: + case mbfl_no_encoding_7bit: + case mbfl_no_encoding_8bit: + body_enc = _body_enc; + break; + + default: + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported transfer encoding \"%s\" - will be regarded as 8bit", s->c); + body_enc = mbfl_no_encoding_8bit; + break; + } + suppressed_hdrs.cnt_trans_enc = 1; + } + + /* To: */ + if (to != NULL) { + if (to_len > 0) { + to_r = estrndup(to, to_len); + for (; to_len; to_len--) { + if (!isspace((unsigned char) to_r[to_len - 1])) { + break; + } + to_r[to_len - 1] = '\0'; + } + for (i = 0; to_r[i]; i++) { + if (iscntrl((unsigned char) to_r[i])) { + /* According to RFC 822, section 3.1.1 long headers may be separated into + * parts using CRLF followed at least one linear-white-space character ('\t' or ' '). + * To prevent these separators from being replaced with a space, we use the + * SKIP_LONG_HEADER_SEP_MBSTRING to skip over them. + */ + SKIP_LONG_HEADER_SEP_MBSTRING(to_r, i); + to_r[i] = ' '; + } + } + } else { + to_r = to; + } + } else { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing To: field"); + err = 1; + } + + /* Subject: */ + if (subject != NULL && subject_len >= 0) { + orig_str.no_language = MBSTRG(language); + orig_str.val = (unsigned char *)subject; + orig_str.len = subject_len; + orig_str.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + if (orig_str.no_encoding == mbfl_no_encoding_invalid || orig_str.no_encoding == mbfl_no_encoding_pass) { + const mbfl_encoding *encoding = mbfl_identify_encoding2(&orig_str, MBSTRG(current_detect_order_list), MBSTRG(current_detect_order_list_size), MBSTRG(strict_detection)); + orig_str.no_encoding = encoding ? encoding->no_encoding: mbfl_no_encoding_invalid; + } + pstr = mbfl_mime_header_encode(&orig_str, &conv_str, tran_cs, head_enc, "\n", sizeof("Subject: [PHP-jp nnnnnnnn]")); + if (pstr != NULL) { + subject_buf = subject = (char *)pstr->val; + } + } else { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing Subject: field"); + err = 1; + } + + /* message body */ + if (message != NULL) { + orig_str.no_language = MBSTRG(language); + orig_str.val = (unsigned char *)message; + orig_str.len = (unsigned int)message_len; + orig_str.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + + if (orig_str.no_encoding == mbfl_no_encoding_invalid || orig_str.no_encoding == mbfl_no_encoding_pass) { + const mbfl_encoding *encoding = mbfl_identify_encoding2(&orig_str, MBSTRG(current_detect_order_list), MBSTRG(current_detect_order_list_size), MBSTRG(strict_detection)); + orig_str.no_encoding = encoding ? encoding->no_encoding: mbfl_no_encoding_invalid; + } + + pstr = NULL; + { + mbfl_string tmpstr; + + if (mbfl_convert_encoding(&orig_str, &tmpstr, tran_cs) != NULL) { + tmpstr.no_encoding=mbfl_no_encoding_8bit; + pstr = mbfl_convert_encoding(&tmpstr, &conv_str, body_enc); + efree(tmpstr.val); + } + } + if (pstr != NULL) { + message_buf = message = (char *)pstr->val; + } + } else { + /* this is not really an error, so it is allowed. */ + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty message body"); + message = NULL; + } + + /* other headers */ +#define PHP_MBSTR_MAIL_MIME_HEADER1 "MIME-Version: 1.0" +#define PHP_MBSTR_MAIL_MIME_HEADER2 "Content-Type: text/plain" +#define PHP_MBSTR_MAIL_MIME_HEADER3 "; charset=" +#define PHP_MBSTR_MAIL_MIME_HEADER4 "Content-Transfer-Encoding: " + if (headers != NULL) { + p = headers; + n = headers_len; + mbfl_memory_device_strncat(&device, p, n); + if (n > 0 && p[n - 1] != '\n') { + mbfl_memory_device_strncat(&device, "\n", 1); + } + } + + if (!zend_hash_exists(&ht_headers, "MIME-VERSION", sizeof("MIME-VERSION") - 1)) { + mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER1, sizeof(PHP_MBSTR_MAIL_MIME_HEADER1) - 1); + mbfl_memory_device_strncat(&device, "\n", 1); + } + + if (!suppressed_hdrs.cnt_type) { + mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER2, sizeof(PHP_MBSTR_MAIL_MIME_HEADER2) - 1); + + p = (char *)mbfl_no2preferred_mime_name(tran_cs); + if (p != NULL) { + mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER3, sizeof(PHP_MBSTR_MAIL_MIME_HEADER3) - 1); + mbfl_memory_device_strcat(&device, p); + } + mbfl_memory_device_strncat(&device, "\n", 1); + } + if (!suppressed_hdrs.cnt_trans_enc) { + mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER4, sizeof(PHP_MBSTR_MAIL_MIME_HEADER4) - 1); + p = (char *)mbfl_no2preferred_mime_name(body_enc); + if (p == NULL) { + p = "7bit"; + } + mbfl_memory_device_strcat(&device, p); + mbfl_memory_device_strncat(&device, "\n", 1); + } + + mbfl_memory_device_unput(&device); + mbfl_memory_device_output('\0', &device); + headers = (char *)device.buffer; + + if (force_extra_parameters) { + extra_cmd = php_escape_shell_cmd(force_extra_parameters); + } else if (extra_cmd) { + extra_cmd = php_escape_shell_cmd(extra_cmd); + } + + if (!err && php_mail(to_r, subject, message, headers, extra_cmd TSRMLS_CC)) { + RETVAL_TRUE; + } else { + RETVAL_FALSE; + } + + if (extra_cmd) { + efree(extra_cmd); + } + if (to_r != to) { + efree(to_r); + } + if (subject_buf) { + efree((void *)subject_buf); + } + if (message_buf) { + efree((void *)message_buf); + } + mbfl_memory_device_clear(&device); + zend_hash_destroy(&ht_headers); +} + +#undef SKIP_LONG_HEADER_SEP_MBSTRING +#undef MAIL_ASCIIZ_CHECK_MBSTRING +#undef APPEND_ONE_CHAR +#undef SEPARATE_SMART_STR +#undef PHP_MBSTR_MAIL_MIME_HEADER1 +#undef PHP_MBSTR_MAIL_MIME_HEADER2 +#undef PHP_MBSTR_MAIL_MIME_HEADER3 +#undef PHP_MBSTR_MAIL_MIME_HEADER4 +/* }}} */ + +/* {{{ proto mixed mb_get_info([string type]) + Returns the current settings of mbstring */ +PHP_FUNCTION(mb_get_info) +{ + char *typ = NULL; + int typ_len; + size_t n; + char *name; + const struct mb_overload_def *over_func; + zval *row1, *row2; + const mbfl_language *lang = mbfl_no2language(MBSTRG(language)); + const mbfl_encoding **entry; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &typ, &typ_len) == FAILURE) { + RETURN_FALSE; + } + + if (!typ || !strcasecmp("all", typ)) { + array_init(return_value); + if (MBSTRG(current_internal_encoding)) { + add_assoc_string(return_value, "internal_encoding", (char *)MBSTRG(current_internal_encoding)->name, 1); + } + if (MBSTRG(http_input_identify)) { + add_assoc_string(return_value, "http_input", (char *)MBSTRG(http_input_identify)->name, 1); + } + if (MBSTRG(current_http_output_encoding)) { + add_assoc_string(return_value, "http_output", (char *)MBSTRG(current_http_output_encoding)->name, 1); + } + if ((name = (char *)zend_ini_string("mbstring.http_output_conv_mimetypes", sizeof("mbstring.http_output_conv_mimetypes"), 0)) != NULL) { + add_assoc_string(return_value, "http_output_conv_mimetypes", name, 1); + } + add_assoc_long(return_value, "func_overload", MBSTRG(func_overload)); + if (MBSTRG(func_overload)){ + over_func = &(mb_ovld[0]); + MAKE_STD_ZVAL(row1); + array_init(row1); + while (over_func->type > 0) { + if ((MBSTRG(func_overload) & over_func->type) == over_func->type ) { + add_assoc_string(row1, over_func->orig_func, over_func->ovld_func, 1); + } + over_func++; + } + add_assoc_zval(return_value, "func_overload_list", row1); + } else { + add_assoc_string(return_value, "func_overload_list", "no overload", 1); + } + if (lang != NULL) { + if ((name = (char *)mbfl_no_encoding2name(lang->mail_charset)) != NULL) { + add_assoc_string(return_value, "mail_charset", name, 1); + } + if ((name = (char *)mbfl_no_encoding2name(lang->mail_header_encoding)) != NULL) { + add_assoc_string(return_value, "mail_header_encoding", name, 1); + } + if ((name = (char *)mbfl_no_encoding2name(lang->mail_body_encoding)) != NULL) { + add_assoc_string(return_value, "mail_body_encoding", name, 1); + } + } + add_assoc_long(return_value, "illegal_chars", MBSTRG(illegalchars)); + if (MBSTRG(encoding_translation)) { + add_assoc_string(return_value, "encoding_translation", "On", 1); + } else { + add_assoc_string(return_value, "encoding_translation", "Off", 1); + } + if ((name = (char *)mbfl_no_language2name(MBSTRG(language))) != NULL) { + add_assoc_string(return_value, "language", name, 1); + } + n = MBSTRG(current_detect_order_list_size); + entry = MBSTRG(current_detect_order_list); + if (n > 0) { + size_t i; + MAKE_STD_ZVAL(row2); + array_init(row2); + for (i = 0; i < n; i++) { + add_next_index_string(row2, (*entry)->name, 1); + entry++; + } + add_assoc_zval(return_value, "detect_order", row2); + } + if (MBSTRG(current_filter_illegal_mode) == MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + add_assoc_string(return_value, "substitute_character", "none", 1); + } else if (MBSTRG(current_filter_illegal_mode) == MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG) { + add_assoc_string(return_value, "substitute_character", "long", 1); + } else if (MBSTRG(current_filter_illegal_mode) == MBFL_OUTPUTFILTER_ILLEGAL_MODE_ENTITY) { + add_assoc_string(return_value, "substitute_character", "entity", 1); + } else { + add_assoc_long(return_value, "substitute_character", MBSTRG(current_filter_illegal_substchar)); + } + if (MBSTRG(strict_detection)) { + add_assoc_string(return_value, "strict_detection", "On", 1); + } else { + add_assoc_string(return_value, "strict_detection", "Off", 1); + } + } else if (!strcasecmp("internal_encoding", typ)) { + if (MBSTRG(current_internal_encoding)) { + RETVAL_STRING((char *)MBSTRG(current_internal_encoding)->name, 1); + } + } else if (!strcasecmp("http_input", typ)) { + if (MBSTRG(http_input_identify)) { + RETVAL_STRING((char *)MBSTRG(http_input_identify)->name, 1); + } + } else if (!strcasecmp("http_output", typ)) { + if (MBSTRG(current_http_output_encoding)) { + RETVAL_STRING((char *)MBSTRG(current_http_output_encoding)->name, 1); + } + } else if (!strcasecmp("http_output_conv_mimetypes", typ)) { + if ((name = (char *)zend_ini_string("mbstring.http_output_conv_mimetypes", sizeof("mbstring.http_output_conv_mimetypes"), 0)) != NULL) { + RETVAL_STRING(name, 1); + } + } else if (!strcasecmp("func_overload", typ)) { + RETVAL_LONG(MBSTRG(func_overload)); + } else if (!strcasecmp("func_overload_list", typ)) { + if (MBSTRG(func_overload)){ + over_func = &(mb_ovld[0]); + array_init(return_value); + while (over_func->type > 0) { + if ((MBSTRG(func_overload) & over_func->type) == over_func->type ) { + add_assoc_string(return_value, over_func->orig_func, over_func->ovld_func, 1); + } + over_func++; + } + } else { + RETVAL_STRING("no overload", 1); + } + } else if (!strcasecmp("mail_charset", typ)) { + if (lang != NULL && (name = (char *)mbfl_no_encoding2name(lang->mail_charset)) != NULL) { + RETVAL_STRING(name, 1); + } + } else if (!strcasecmp("mail_header_encoding", typ)) { + if (lang != NULL && (name = (char *)mbfl_no_encoding2name(lang->mail_header_encoding)) != NULL) { + RETVAL_STRING(name, 1); + } + } else if (!strcasecmp("mail_body_encoding", typ)) { + if (lang != NULL && (name = (char *)mbfl_no_encoding2name(lang->mail_body_encoding)) != NULL) { + RETVAL_STRING(name, 1); + } + } else if (!strcasecmp("illegal_chars", typ)) { + RETVAL_LONG(MBSTRG(illegalchars)); + } else if (!strcasecmp("encoding_translation", typ)) { + if (MBSTRG(encoding_translation)) { + RETVAL_STRING("On", 1); + } else { + RETVAL_STRING("Off", 1); + } + } else if (!strcasecmp("language", typ)) { + if ((name = (char *)mbfl_no_language2name(MBSTRG(language))) != NULL) { + RETVAL_STRING(name, 1); + } + } else if (!strcasecmp("detect_order", typ)) { + n = MBSTRG(current_detect_order_list_size); + entry = MBSTRG(current_detect_order_list); + if (n > 0) { + size_t i; + array_init(return_value); + for (i = 0; i < n; i++) { + add_next_index_string(return_value, (*entry)->name, 1); + entry++; + } + } + } else if (!strcasecmp("substitute_character", typ)) { + if (MBSTRG(current_filter_illegal_mode) == MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE) { + RETVAL_STRING("none", 1); + } else if (MBSTRG(current_filter_illegal_mode) == MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG) { + RETVAL_STRING("long", 1); + } else if (MBSTRG(current_filter_illegal_mode) == MBFL_OUTPUTFILTER_ILLEGAL_MODE_ENTITY) { + RETVAL_STRING("entity", 1); + } else { + RETVAL_LONG(MBSTRG(current_filter_illegal_substchar)); + } + } else if (!strcasecmp("strict_detection", typ)) { + if (MBSTRG(strict_detection)) { + RETVAL_STRING("On", 1); + } else { + RETVAL_STRING("Off", 1); + } + } else { + RETURN_FALSE; + } +} +/* }}} */ + +/* {{{ proto bool mb_check_encoding([string var[, string encoding]]) + Check if the string is valid for the specified encoding */ +PHP_FUNCTION(mb_check_encoding) +{ + char *var = NULL; + int var_len; + char *enc = NULL; + int enc_len; + mbfl_buffer_converter *convd; + const mbfl_encoding *encoding = MBSTRG(current_internal_encoding); + mbfl_string string, result, *ret = NULL; + long illegalchars = 0; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ss", &var, &var_len, &enc, &enc_len) == FAILURE) { + RETURN_FALSE; + } + + if (var == NULL) { + RETURN_BOOL(MBSTRG(illegalchars) == 0); + } + + if (enc != NULL) { + encoding = mbfl_name2encoding(enc); + if (!encoding || encoding == &mbfl_encoding_pass) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid encoding \"%s\"", enc); + RETURN_FALSE; + } + } + + convd = mbfl_buffer_converter_new2(encoding, encoding, 0); + if (convd == NULL) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to create converter"); + RETURN_FALSE; + } + mbfl_buffer_converter_illegal_mode(convd, MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE); + mbfl_buffer_converter_illegal_substchar(convd, 0); + + /* initialize string */ + mbfl_string_init_set(&string, mbfl_no_language_neutral, encoding->no_encoding); + mbfl_string_init(&result); + + string.val = (unsigned char *)var; + string.len = var_len; + ret = mbfl_buffer_converter_feed_result(convd, &string, &result); + illegalchars = mbfl_buffer_illegalchars(convd); + mbfl_buffer_converter_delete(convd); + + RETVAL_FALSE; + if (ret != NULL) { + if (illegalchars == 0 && string.len == result.len && memcmp(string.val, result.val, string.len) == 0) { + RETVAL_TRUE; + } + mbfl_string_clear(&result); + } +} +/* }}} */ + + +/* {{{ php_mb_populate_current_detect_order_list */ +static void php_mb_populate_current_detect_order_list(TSRMLS_D) +{ + const mbfl_encoding **entry = 0; + size_t nentries; + + if (MBSTRG(current_detect_order_list)) { + return; + } + + if (MBSTRG(detect_order_list) && MBSTRG(detect_order_list_size)) { + nentries = MBSTRG(detect_order_list_size); + entry = (const mbfl_encoding **)safe_emalloc(nentries, sizeof(mbfl_encoding*), 0); + memcpy(entry, MBSTRG(detect_order_list), sizeof(mbfl_encoding*) * nentries); + } else { + const enum mbfl_no_encoding *src = MBSTRG(default_detect_order_list); + size_t i; + nentries = MBSTRG(default_detect_order_list_size); + entry = (const mbfl_encoding **)safe_emalloc(nentries, sizeof(mbfl_encoding*), 0); + for (i = 0; i < nentries; i++) { + entry[i] = mbfl_no2encoding(src[i]); + } + } + MBSTRG(current_detect_order_list) = entry; + MBSTRG(current_detect_order_list_size) = nentries; +} + +/* {{{ static int php_mb_encoding_translation() */ +static int php_mb_encoding_translation(TSRMLS_D) +{ + return MBSTRG(encoding_translation); +} +/* }}} */ + +/* {{{ MBSTRING_API size_t php_mb_mbchar_bytes_ex() */ +MBSTRING_API size_t php_mb_mbchar_bytes_ex(const char *s, const mbfl_encoding *enc) +{ + if (enc != NULL) { + if (enc->flag & MBFL_ENCTYPE_MBCS) { + if (enc->mblen_table != NULL) { + if (s != NULL) return enc->mblen_table[*(unsigned char *)s]; + } + } else if (enc->flag & (MBFL_ENCTYPE_WCS2BE | MBFL_ENCTYPE_WCS2LE)) { + return 2; + } else if (enc->flag & (MBFL_ENCTYPE_WCS4BE | MBFL_ENCTYPE_WCS4LE)) { + return 4; + } + } + return 1; +} +/* }}} */ + +/* {{{ MBSTRING_API size_t php_mb_mbchar_bytes() */ +MBSTRING_API size_t php_mb_mbchar_bytes(const char *s TSRMLS_DC) +{ + return php_mb_mbchar_bytes_ex(s, MBSTRG(internal_encoding)); +} +/* }}} */ + +/* {{{ MBSTRING_API char *php_mb_safe_strrchr_ex() */ +MBSTRING_API char *php_mb_safe_strrchr_ex(const char *s, unsigned int c, size_t nbytes, const mbfl_encoding *enc) +{ + register const char *p = s; + char *last=NULL; + + if (nbytes == (size_t)-1) { + size_t nb = 0; + + while (*p != '\0') { + if (nb == 0) { + if ((unsigned char)*p == (unsigned char)c) { + last = (char *)p; + } + nb = php_mb_mbchar_bytes_ex(p, enc); + if (nb == 0) { + return NULL; /* something is going wrong! */ + } + } + --nb; + ++p; + } + } else { + register size_t bcnt = nbytes; + register size_t nbytes_char; + while (bcnt > 0) { + if ((unsigned char)*p == (unsigned char)c) { + last = (char *)p; + } + nbytes_char = php_mb_mbchar_bytes_ex(p, enc); + if (bcnt < nbytes_char) { + return NULL; + } + p += nbytes_char; + bcnt -= nbytes_char; + } + } + return last; +} +/* }}} */ + +/* {{{ MBSTRING_API char *php_mb_safe_strrchr() */ +MBSTRING_API char *php_mb_safe_strrchr(const char *s, unsigned int c, size_t nbytes TSRMLS_DC) +{ + return php_mb_safe_strrchr_ex(s, c, nbytes, MBSTRG(internal_encoding)); +} +/* }}} */ + +/* {{{ MBSTRING_API int php_mb_stripos() + */ +MBSTRING_API int php_mb_stripos(int mode, const char *old_haystack, unsigned int old_haystack_len, const char *old_needle, unsigned int old_needle_len, long offset, const char *from_encoding TSRMLS_DC) +{ + int n; + mbfl_string haystack, needle; + n = -1; + + mbfl_string_init(&haystack); + mbfl_string_init(&needle); + haystack.no_language = MBSTRG(language); + haystack.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + needle.no_language = MBSTRG(language); + needle.no_encoding = MBSTRG(current_internal_encoding)->no_encoding; + + do { + size_t len = 0; + haystack.val = (unsigned char *)php_unicode_convert_case(PHP_UNICODE_CASE_UPPER, (char *)old_haystack, old_haystack_len, &len, from_encoding TSRMLS_CC); + haystack.len = len; + + if (!haystack.val) { + break; + } + + if (haystack.len <= 0) { + break; + } + + needle.val = (unsigned char *)php_unicode_convert_case(PHP_UNICODE_CASE_UPPER, (char *)old_needle, old_needle_len, &len, from_encoding TSRMLS_CC); + needle.len = len; + + if (!needle.val) { + break; + } + + if (needle.len <= 0) { + break; + } + + haystack.no_encoding = needle.no_encoding = mbfl_name2no_encoding(from_encoding); + if (haystack.no_encoding == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", from_encoding); + break; + } + + { + int haystack_char_len = mbfl_strlen(&haystack); + + if (mode) { + if ((offset > 0 && offset > haystack_char_len) || + (offset < 0 && -offset > haystack_char_len)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset is greater than the length of haystack string"); + break; + } + } else { + if (offset < 0 || offset > haystack_char_len) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset not contained in string"); + break; + } + } + } + + n = mbfl_strpos(&haystack, &needle, offset, mode); + } while(0); + + if (haystack.val) { + efree(haystack.val); + } + + if (needle.val) { + efree(needle.val); + } + + return n; +} +/* }}} */ + +static void php_mb_gpc_get_detect_order(const zend_encoding ***list, size_t *list_size TSRMLS_DC) /* {{{ */ +{ + *list = (const zend_encoding **)MBSTRG(http_input_list); + *list_size = MBSTRG(http_input_list_size); +} +/* }}} */ + +static void php_mb_gpc_set_input_encoding(const zend_encoding *encoding TSRMLS_DC) /* {{{ */ +{ + MBSTRG(http_input_identify) = (const mbfl_encoding*)encoding; +} +/* }}} */ + +#endif /* HAVE_MBSTRING */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: fdm=marker + * vim: noet sw=4 ts=4 + */ diff --git a/ext/mbstring/mbstring.dsp b/ext/mbstring/mbstring.dsp new file mode 100644 index 0000000..2e050c6 --- /dev/null +++ b/ext/mbstring/mbstring.dsp @@ -0,0 +1,1112 @@ +# Microsoft Developer Studio Project File - Name="mbstring" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=mbstring - Win32 Debug_TS MBSTRING
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "mbstring.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "mbstring.mak" CFG="mbstring - Win32 Debug_TS MBSTRING"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "mbstring - Win32 Release_TS MBSTRING" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "mbstring - Win32 Debug_TS MBSTRING" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "mbstring___Win32_Release_TS_MBSTRING"
+# PROP BASE Intermediate_Dir "mbstring___Win32_Release_TS_MBSTRING"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release_TS"
+# PROP Intermediate_Dir "Release_TS"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=0 /D "_MBCS" /D "_USRDLL" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_MBSTRING" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D MBSTRING_EXPORTS=1 /D HAVE_MBSTRING=1 /D HAVE_MBREGEX=1 /D HAVE_MBSTR_CN=1 /D HAVE_MBSTR_JA=1 /D HAVE_MBSTR_KR=1 /D HAVE_MBSTR_RU=1 /D HAVE_MBSTR_TW=1 /FR /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "libmbfl" /I "libmbfl\mbfl" /D ZEND_DEBUG=0 /D "MBSTRING_EXPORTS" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_MBSTRING" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MBSTRING=1 /D HAVE_MBSTR_CN=1 /D HAVE_MBSTR_JA=1 /D HAVE_MBSTR_KR=1 /D HAVE_MBSTR_RU=1 /D HAVE_MBSTR_TW=1 /D MBFL_DLL_EXPORT=1 /D NOT_RUBY=1 /D "LIBMBFL_EXPORTS" /D "HAVE_STRICMP" /D "HAVE_CONFIG_H" /D "HAVE_STDLIB_H" /FR /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_mbstring.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
+# ADD LINK32 php5ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_mbstring.dll" /libpath:"..\..\Release_TS" /libpath:"..\..\Release_TS_Inline"
+
+!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "mbstring___Win32_Debug_TS_MBSTRING"
+# PROP BASE Intermediate_Dir "mbstring___Win32_Debug_TS_MBSTRING"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug_TS"
+# PROP Intermediate_Dir "Debug_TS"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /D ZEND_DEBUG=1 /D "MBSTRING_EXPORTS" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_MBSTRING" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D MBSTRING_EXPORTS=1 /D HAVE_MBSTRING=1 /D HAVE_MBREGEX=1 /D HAVE_MBSTR_CN=1 /D HAVE_MBSTR_JA=1 /D HAVE_MBSTR_KR=1 /D HAVE_MBSTR_RU=1 /D HAVE_MBSTR_TW=1 /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "libmbfl" /I "libmbfl\mbfl" /I "oniguruma" /D ZEND_DEBUG=1 /D MBSTRING_EXPORTS=1 /D HAVE_STDLIB_H=1 /D HAVE_STRING_H=1 /D "MBSTRING_EXPORTS" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "COMPILE_DL_MBSTRING" /D ZTS=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D HAVE_MBSTRING=1 /D HAVE_MBSTR_CN=1 /D HAVE_MBSTR_JA=1 /D HAVE_MBSTR_KR=1 /D HAVE_MBSTR_RU=1 /D HAVE_MBSTR_TW=1 /D MBFL_DLL_EXPORT=1 /D NOT_RUBY=1 /D "LIBMBFL_EXPORTS" /D "HAVE_STRICMP" /D "HAVE_CONFIG_H" /D "HAVE_STDLIB_H" /FR /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_mbstring.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
+# ADD LINK32 php5ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_mbstring.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
+
+!ENDIF
+
+# Begin Target
+
+# Name "mbstring - Win32 Release_TS MBSTRING"
+# Name "mbstring - Win32 Debug_TS MBSTRING"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\mb_gpc.c
+
+!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
+
+# PROP Intermediate_Dir "Release_TS"
+
+!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
+
+# PROP Intermediate_Dir "Debug_TS"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\mbstring.c
+
+!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
+
+# PROP Intermediate_Dir "Release_TS"
+
+!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
+
+# PROP Intermediate_Dir "Debug_TS"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\php_mbregex.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\php_unicode.c
+
+!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
+
+# PROP Intermediate_Dir "Release_TS"
+
+!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
+
+# PROP Intermediate_Dir "Debug_TS"
+
+!ENDIF
+
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\mb_gpc.h
+
+!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
+
+# PROP Intermediate_Dir "Release_TS"
+
+!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
+
+# PROP Intermediate_Dir "Debug_TS"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\mbstring.h
+
+!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
+
+# PROP Intermediate_Dir "Release_TS"
+
+!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
+
+# PROP Intermediate_Dir "Debug_TS"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\php_mbregex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\php_unicode.h
+
+!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
+
+# PROP Intermediate_Dir "Release_TS"
+
+!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
+
+# PROP Intermediate_Dir "Debug_TS"
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\unicode_data.h
+
+!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
+
+# PROP Intermediate_Dir "Release_TS"
+
+!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
+
+# PROP Intermediate_Dir "Debug_TS"
+
+!ENDIF
+
+# End Source File
+# End Group
+# Begin Group "libmbfl"
+
+# PROP Default_Filter ""
+# Begin Group "Source Files No. 1"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\html_entities.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfilter.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_7bit.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfilter_8bit.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_ascii.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_base64.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_big5.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_byte2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_byte4.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_cp1251.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_cp1252.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_cp866.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_cp932.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_cp936.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_euc_cn.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_euc_jp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_euc_jp_win.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_euc_kr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_euc_tw.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_htmlent.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_hz.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso2022_kr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_1.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_10.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_13.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_14.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_15.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_3.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_4.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_5.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_6.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_7.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_8.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_9.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_jis.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_koi8r.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_koi8u.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_armscii8.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_cp850.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfilter_pass.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_qprint.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_sjis.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_ucs2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_ucs4.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_uhc.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_utf16.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_utf32.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_utf7.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_utf7imap.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_utf8.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_uuencode.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfilter_wchar.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfl_allocators.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfl_convert.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfl_encoding.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfl_filter_output.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfl_ident.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfl_language.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfl_memory_device.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfl_string.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\nls\nls_de.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\nls\nls_en.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\nls\nls_ja.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\nls\nls_kr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\nls\nls_neutral.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\nls\nls_ru.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\nls\nls_uni.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\nls\nls_zh.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\nls\nls_hy.c
+# End Source File
+# End Group
+# Begin Group "Header Files No. 1"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\libmbfl\config.h.vc6
+
+!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
+
+# Begin Custom Build
+InputDir=.\libmbfl
+InputPath=.\libmbfl\config.h.vc6
+
+"$(InputDir)\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ copy $(InputDir)\config.h.vc6 "$(InputDir)\config.h"
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
+
+# Begin Custom Build
+InputDir=.\libmbfl
+InputPath=.\libmbfl\config.h.vc6
+
+"$(InputDir)\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ copy $(InputDir)\config.h.vc6 "$(InputDir)\config.h"
+
+# End Custom Build
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\cp932_table.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\html_entities.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfilter.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_7bit.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfilter_8bit.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_ascii.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_base64.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_big5.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_byte2.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_byte4.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_cp1251.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_cp1252.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_cp866.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_cp932.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_cp936.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_euc_cn.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_euc_jp.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_euc_jp_win.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_euc_kr.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_euc_tw.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_htmlent.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_hz.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso2022_kr.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_1.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_10.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_13.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_14.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_15.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_2.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_3.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_4.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_5.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_6.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_7.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_8.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_iso8859_9.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_jis.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_koi8r.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_koi8u.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_armscii8.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_cp850.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfilter_pass.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_qprint.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_sjis.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_ucs2.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_ucs4.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_uhc.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_utf16.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_utf32.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_utf7.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_utf7imap.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_utf8.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\mbfilter_uuencode.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfilter_wchar.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfl_allocators.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfl_consts.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfl_convert.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfl_defs.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfl_encoding.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfl_filter_output.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfl_ident.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfl_language.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfl_memory_device.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\mbfl\mbfl_string.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\nls\nls_de.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\nls\nls_en.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\nls\nls_ja.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\nls\nls_kr.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\nls\nls_neutral.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\nls\nls_ru.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\nls\nls_uni.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\nls\nls_zh.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\nls\nls_hy.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_prop.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_big5.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_cns11643.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_cp1251.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_cp1252.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_cp866.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_cp932_ext.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_cp936.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_iso8859_10.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_iso8859_13.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_iso8859_14.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_iso8859_15.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_iso8859_2.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_iso8859_3.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_iso8859_4.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_iso8859_5.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_iso8859_6.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_iso8859_7.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_iso8859_8.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_iso8859_9.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_jis.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_koi8r.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_koi8u.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_armscii8.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_cp850.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\libmbfl\filters\unicode_table_uhc.h
+# End Source File
+# End Group
+# End Group
+# Begin Group "oniguruma"
+
+# PROP Default_Filter ""
+# Begin Group "Source Files No. 2"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\oniguruma\regcomp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\regerror.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\regexec.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\reggnu.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\regparse.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\regposerr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\ascii.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\utf8.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\euc_jp.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\euc_tw.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\euc_kr.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\sjis.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\iso8859_1.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\iso8859_2.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\iso8859_3.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\iso8859_4.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\iso8859_5.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\iso8859_6.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\iso8859_7.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\iso8859_8.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\iso8859_9.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\iso8859_10.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\iso8859_11.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\iso8859_13.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\iso8859_14.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\iso8859_15.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\iso8859_16.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\koi8.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\koi8_r.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\enc\big5.c
+# End Source File
+# End Group
+# Begin Group "Header Files No. 2"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=.\oniguruma\win32\config.h
+
+!IF "$(CFG)" == "mbstring - Win32 Release_TS MBSTRING"
+
+# Begin Custom Build
+InputDir=.\oniguruma\win32
+InputPath=.\oniguruma\win32\config.h
+
+"$(InputDir)\..\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ copy $(InputDir)\config.h "$(InputDir)\..\config.h"
+
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "mbstring - Win32 Debug_TS MBSTRING"
+
+# Begin Custom Build
+InputDir=.\oniguruma\win32
+InputPath=.\oniguruma\win32\config.h
+
+"$(InputDir)\..\config.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ copy $(InputDir)\config.h "$(InputDir)\..\config.h"
+
+# End Custom Build
+
+!ENDIF
+
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\onigposix.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\oniguruma.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\php_compat.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\regint.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\oniguruma\regparse.h
+# End Source File
+# End Group
+# End Group
+# End Target
+# End Project
diff --git a/ext/mbstring/mbstring.h b/ext/mbstring/mbstring.h new file mode 100644 index 0000000..70f9f48 --- /dev/null +++ b/ext/mbstring/mbstring.h @@ -0,0 +1,223 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2013 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Tsukada Takuya <tsukada@fminn.nagano.nagano.jp> | + +----------------------------------------------------------------------+ + */ + +/* $Id$ */ + +/* + * PHP 4 Multibyte String module "mbstring" (currently only for Japanese) + * + * History: + * 2000.5.19 Release php-4.0RC2_jstring-1.0 + * 2001.4.1 Release php4_jstring-1.0.91 + * 2001.4.30 Release php4-jstring-1.1 (contribute to The PHP Group) + * 2001.5.1 Renamed from jstring to mbstring (hirokawa@php.net) + */ + +/* + * PHP3 Internationalization support program. + * + * Copyright (c) 1999,2000 by the PHP3 internationalization team. + * All rights reserved. + * + * See README_PHP3-i18n-ja for more detail. + * + * Authors: + * Hironori Sato <satoh@jpnnet.com> + * Shigeru Kanemoto <sgk@happysize.co.jp> + * Tsukada Takuya <tsukada@fminn.nagano.nagano.jp> + */ + + +#ifndef _MBSTRING_H +#define _MBSTRING_H + +#ifdef COMPILE_DL_MBSTRING +#undef HAVE_MBSTRING +#define HAVE_MBSTRING 1 +#endif + +#ifdef PHP_WIN32 +# undef MBSTRING_API +# ifdef MBSTRING_EXPORTS +# define MBSTRING_API __declspec(dllexport) +# elif defined(COMPILE_DL_MBSTRING) +# define MBSTRING_API __declspec(dllimport) +# else +# define MBSTRING_API /* nothing special */ +# endif +#elif defined(__GNUC__) && __GNUC__ >= 4 +# undef MBSTRING_API +# define MBSTRING_API __attribute__ ((visibility("default"))) +#else +# undef MBSTRING_API +# define MBSTRING_API /* nothing special */ +#endif + + +#if HAVE_MBSTRING + +#include "libmbfl/mbfl/mbfilter.h" +#include "SAPI.h" + +#define PHP_MBSTRING_API 20021024 + +extern zend_module_entry mbstring_module_entry; +#define mbstring_module_ptr &mbstring_module_entry + +PHP_MINIT_FUNCTION(mbstring); +PHP_MSHUTDOWN_FUNCTION(mbstring); +PHP_RINIT_FUNCTION(mbstring); +PHP_RSHUTDOWN_FUNCTION(mbstring); +PHP_MINFO_FUNCTION(mbstring); + +/* functions in php_unicode.c */ +PHP_FUNCTION(mb_convert_case); +PHP_FUNCTION(mb_strtoupper); +PHP_FUNCTION(mb_strtolower); + +/* php function registration */ +PHP_FUNCTION(mb_language); +PHP_FUNCTION(mb_internal_encoding); +PHP_FUNCTION(mb_http_input); +PHP_FUNCTION(mb_http_output); +PHP_FUNCTION(mb_detect_order); +PHP_FUNCTION(mb_substitute_character); +PHP_FUNCTION(mb_preferred_mime_name); +PHP_FUNCTION(mb_parse_str); +PHP_FUNCTION(mb_output_handler); +PHP_FUNCTION(mb_strlen); +PHP_FUNCTION(mb_strpos); +PHP_FUNCTION(mb_strrpos); +PHP_FUNCTION(mb_stripos); +PHP_FUNCTION(mb_strripos); +PHP_FUNCTION(mb_strstr); +PHP_FUNCTION(mb_strrchr); +PHP_FUNCTION(mb_stristr); +PHP_FUNCTION(mb_strrichr); +PHP_FUNCTION(mb_substr_count); +PHP_FUNCTION(mb_substr); +PHP_FUNCTION(mb_strcut); +PHP_FUNCTION(mb_strwidth); +PHP_FUNCTION(mb_strimwidth); +PHP_FUNCTION(mb_convert_encoding); +PHP_FUNCTION(mb_detect_encoding); +PHP_FUNCTION(mb_list_encodings); +PHP_FUNCTION(mb_encoding_aliases); +PHP_FUNCTION(mb_convert_kana); +PHP_FUNCTION(mb_encode_mimeheader); +PHP_FUNCTION(mb_decode_mimeheader); +PHP_FUNCTION(mb_convert_variables); +PHP_FUNCTION(mb_encode_numericentity); +PHP_FUNCTION(mb_decode_numericentity); +PHP_FUNCTION(mb_send_mail); +PHP_FUNCTION(mb_get_info); +PHP_FUNCTION(mb_check_encoding); + +MBSTRING_API char *php_mb_safe_strrchr_ex(const char *s, unsigned int c, + size_t nbytes, const mbfl_encoding *enc); +MBSTRING_API char *php_mb_safe_strrchr(const char *s, unsigned int c, + size_t nbytes TSRMLS_DC); + +MBSTRING_API char * php_mb_convert_encoding(const char *input, size_t length, + const char *_to_encoding, + const char *_from_encodings, + size_t *output_len TSRMLS_DC); + +MBSTRING_API int php_mb_check_encoding_list(const char *encoding_list TSRMLS_DC); + +MBSTRING_API size_t php_mb_mbchar_bytes_ex(const char *s, const mbfl_encoding *enc); +MBSTRING_API size_t php_mb_mbchar_bytes(const char *s TSRMLS_DC); + +MBSTRING_API int php_mb_encoding_detector_ex(const char *arg_string, int arg_length, + char *arg_list TSRMLS_DC); + +MBSTRING_API int php_mb_encoding_converter_ex(char **str, int *len, const char *encoding_to, + const char *encoding_from TSRMLS_DC); +MBSTRING_API int php_mb_stripos(int mode, const char *old_haystack, unsigned int old_haystack_len, const char *old_needle, unsigned int old_needle_len, long offset, const char *from_encoding TSRMLS_DC); + +/* internal use only */ +int _php_mb_ini_mbstring_internal_encoding_set(const char *new_value, uint new_value_length TSRMLS_DC); + +ZEND_BEGIN_MODULE_GLOBALS(mbstring) + char *internal_encoding_name; + enum mbfl_no_language language; + const mbfl_encoding *internal_encoding; + const mbfl_encoding *current_internal_encoding; + const mbfl_encoding *http_output_encoding; + const mbfl_encoding *current_http_output_encoding; + const mbfl_encoding *http_input_identify; + const mbfl_encoding *http_input_identify_get; + const mbfl_encoding *http_input_identify_post; + const mbfl_encoding *http_input_identify_cookie; + const mbfl_encoding *http_input_identify_string; + const mbfl_encoding **http_input_list; + size_t http_input_list_size; + const mbfl_encoding **detect_order_list; + size_t detect_order_list_size; + const mbfl_encoding **current_detect_order_list; + size_t current_detect_order_list_size; + enum mbfl_no_encoding *default_detect_order_list; + size_t default_detect_order_list_size; + int filter_illegal_mode; + int filter_illegal_substchar; + int current_filter_illegal_mode; + int current_filter_illegal_substchar; + long func_overload; + zend_bool encoding_translation; + long strict_detection; + long illegalchars; + mbfl_buffer_converter *outconv; + void *http_output_conv_mimetypes; +#if HAVE_MBREGEX + struct _zend_mb_regex_globals *mb_regex_globals; +#endif +ZEND_END_MODULE_GLOBALS(mbstring) + +#define MB_OVERLOAD_MAIL 1 +#define MB_OVERLOAD_STRING 2 +#define MB_OVERLOAD_REGEX 4 + +struct mb_overload_def { + int type; + char *orig_func; + char *ovld_func; + char *save_func; +}; + +#ifdef ZTS +#define MBSTRG(v) TSRMG(mbstring_globals_id, zend_mbstring_globals *, v) +#else +#define MBSTRG(v) (mbstring_globals.v) +#endif + +#else /* HAVE_MBSTRING */ + +#define mbstring_module_ptr NULL + +#endif /* HAVE_MBSTRING */ + +#define phpext_mbstring_ptr mbstring_module_ptr + +#endif /* _MBSTRING_H */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/ext/mbstring/oniguruma/AUTHORS b/ext/mbstring/oniguruma/AUTHORS new file mode 100644 index 0000000..93167bd --- /dev/null +++ b/ext/mbstring/oniguruma/AUTHORS @@ -0,0 +1 @@ +sndgk393 AT ybb DOT ne DOT jp (K.Kosako) diff --git a/ext/mbstring/oniguruma/COPYING b/ext/mbstring/oniguruma/COPYING new file mode 100644 index 0000000..4d321bb --- /dev/null +++ b/ext/mbstring/oniguruma/COPYING @@ -0,0 +1,32 @@ +Oniguruma LICENSE +----------------- + +When this software is partly used or it is distributed with Ruby, +this of Ruby follows the license of Ruby. +It follows the BSD license in the case of the one except for it. + +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + */ diff --git a/ext/mbstring/oniguruma/HISTORY b/ext/mbstring/oniguruma/HISTORY new file mode 100644 index 0000000..a1debef --- /dev/null +++ b/ext/mbstring/oniguruma/HISTORY @@ -0,0 +1,1838 @@ +History + +2007/08/16: Version 4.7.1 + +2007/08/16: [test] success in ruby 1.9.0 (2007-04-06) [i686-linux]. +2007/07/04: [spec] (thanks K.Takata) + ONIG_OPTION_SINGLELINE: '$' -> '\Z' (as Perl) +2007/07/04: [dist] (thanks K.Takata) + fix documents API and API.ja. + +2007/06/18: Version 4.7.0 + +2007/06/18: [test] success in ruby 1.9.0 (2007-04-06) [i686-linux]. +2007/06/18: [bug] (thanks KUBO Takehiro) + WORD_ALIGNMENT_SIZE must be sizeof(OnigCodePoint). +2007/06/05: [impl] add #ifndef vsnprintf in regint.h. +2007/06/05: [bug] should check USE_CRNL_AS_LINE_TERMINATOR case + in onig_search(). + +2007/04/12: Version 4.6.2 + +2007/04/09: [impl] change STATE_CHECK_BUFF_MAX_SIZE value from 0x8000 + to 0x4000. +2007/03/26: [impl] add 'void' to function declarations. + +2007/03/06: Version 4.6.1 + +2007/03/06: [test] success in ruby 1.9.0 (2006-10-23) [i686-linux]. +2007/03/06: [bug] add #include <malloc.h> for bcc32. + (In bcc32, alloca() is declared in malloc.h.) +2007/03/06: [impl] remove including version.h of Ruby. +2007/03/02: [bug] invalid optimization for semi-end-buf in onig_search(). + ex. /\n\Z/.match("aaaaaaaaaa\n") +2007/03/02: [impl] move range > start check position in end_buf process. + +2007/02/08: Version 4.6.0 + +2007/02/08: [test] success in ruby 1.9.0 (2006-10-23) [i686-linux]. +2007/01/09: [tune] select_opt_exact_info() didn't work for empty info. + ex. /.a/ make MAP info instead of EXACT info. +2006/12/29: [impl] add print_enc_string() for ONIG_DEBUG mode. +2006/12/22: [spec] should check too short multibyte char in parse_exp(). + add USE_PAD_TO_SHORT_BYTE_CHAR. + ex. /\x00/ in UTF16 should be error. + +2006/11/17: Version 4.5.1 + +2006/11/17: [test] success in ruby 1.9.0 (2006-10-23) [i686-linux]. +2006/11/15: [impl] remove CHECK_INTERRUPT. +2006/11/10: [bug] 0x24, 0x2b, 0x3c, 0x3d, 0x3e, 0x5e, 0x60, 0x7c, 0x7e + should be [:punct:]. +2006/11/08: [impl] rename QUALIFIER -> QUANTIFIER. +2006/11/07: [bug] (thanks Byte) + add 0xa3 <=> 0xb3 to CaseFoldMap[] for KOI8-R. + +2006/11/06: Version 4.5.0 + +2006/11/06: [test] success in ruby 1.9.0 (2006-10-23) [i686-linux]. +2006/11/06: [API] remove ONIGENC_AMBIGUOUS_MATCH_COMPOUND. +2006/11/06: [spec] change ONIG_OPTION_FIND_LONGEST to search all of + the string range. + add USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE. + +2006/10/30: Version 4.4.6 + +2006/10/30: [test] success in ruby 1.9.0 (2006-10-23) [i686-linux]. +2006/10/30: [impl] (thanks K.Takata) + add THREAD_SYSTEM_INIT and THREAD_SYSTEM_END. +2006/10/30: [bug] (thanks Wolfgang Nadasi-Donner) + invalid offset value was used in STATE_CHECK_BUFF_INIT(). + +2006/10/24: Version 4.4.5 + +2006/10/24: [test] success in ruby 1.9.0 (2006-10-23) [i686-linux]. +2006/10/24: [impl] escape -Wall warning. +2006/10/24: [tune] (thanks Kornelius Kalnbach) + String#scan for long string needs long time compare with + old Ruby + by initialization time for combination explosion check + ex. ("test " * 100_000).scan(/\w*\s?/) + change STATE_CHECK_BUFF_MAX_SIZE from 0x8000000 to 0x8000. + reduce initialization area of state_check_buff. +2006/10/16: [bug] (thanks Akinori Musha) + first argument of rb_warn() should be format string. +2006/10/10: [impl] add msa.state_check_buff_size initialization + in onig_search(). +2006/10/10: [bug] should call onig_st_free_table() in + onig_free_shared_cclass_table(). +2006/10/10: [impl] remove OP_WORD_SB and OP_WORD_MB. +2006/09/29: [impl] initialize state_check_buff_size in STATE_CHECK_BUFF_INIT(). + make valgrind happy. +2006/09/22: [impl] convert to ascii for parameter string in + onig_error_code_to_str(). + add enc member into OnigErrorInfo. + +2006/09/19: Version 4.4.4 + +2006/09/19: [test] success in ruby 1.9.0 (2006-08-22) [i686-linux]. +2006/09/19: [impl] (thanks KOYAMA Tetsuji) + HAVE_STDARG_PROTOTYPES was not defined in Mac OS X + by Xcode 2.4(gcc 4.0.1) problem. [php-dev 1312] etc... + +2006/09/15: Version 4.4.3 + +2006/09/15: [test] success in ruby 1.9.0 (2006-08-22) [i686-linux]. +2006/09/15: [bug] (thanks Allan Odgaard) + out of range access in bm_search_notrev(). + (p < s) + +2006/09/08: Version 4.4.2 + +2006/09/08: [test] success in ruby 1.9.0 (2006-08-22) [i686-linux]. +2006/09/08: [bug] (thanks K.Takata) + out of range access in bm_search_notrev(). +2006/09/04: [spec] (thanks K.Takata) + allow look-behind in negative look-behind. + ex. /(?<!(?<=a)b|c)d/ + +2006/08/29: Version 4.4.1 + +2006/08/29: [test] success in ruby 1.9.0 (2006-08-22) [i686-linux]. +2006/08/29: [dist] (thanks Seiji Masugata) + add configure option --enable-combination-explosion-check + +2006/08/25: Version 4.4.0 + +2006/08/25: [test] success in ruby 1.9.0 (2006-08-22) [i686-linux]. +2006/08/25: [impl] add_state_check_num() should be enclosed in + ifdef USE_COMBINATION_EXPLOSION_CHECK. +2006/08/23: [spec] config USE_COMBINATION_EXPLOSION_CHECK is enabled + in Ruby mode only. +2006/08/22: [impl] remove last line comma in enum OpCode. +2006/08/22: [impl] remove OP_STATE_CHECK_ANYCHAR_STAR_PEEK_NEXT and + OP_STATE_CHECK_ANYCHAR_ML_STAR_PEEK_NEXT. +2006/08/22: [impl] remove OP_BACKREF3. + +2006/08/21: Version 4.3.1 + +2006/08/21: [test] success in ruby 1.9.0 (2006-07-28) [i686-linux]. +2006/08/21: [impl] change stack type values + and re-define STK_MASK_TO_VOID_TARGET etc... +2006/08/21: [impl] set repeat_range[].upper to 0x7fffffff as infinite. +2006/08/21: [impl] add STATE_CHECK_BUFF_MALLOC_THRESHOLD_SIZE. +2006/08/21: [impl] reduce (?:a*){n,m}, (?:a+){n,m} => (?:a*){n,n}, (?:a+){n,n} +2006/09/21: [impl] reduce (a*){n,m}, (a+){n,m} => (a*){n,n}, (a+){n,n} + if backreference is not used. +2006/08/17: [bug] should check scan_env.num_call > 0 for backrefed pattern + in combination explosion check. + +2006/08/17: Version 4.3.0 + +2006/08/17: [test] success in ruby 1.9.0 (2006-07-28) [i686-linux]. +2006/08/17: [new] add config USE_COMBINATION_EXPLOSION_CHECK. + check /(.+)*/, /(\s*foo\s*)*/ etc... + [API] add num_comb_exp_check member in regex_t. + [dist] change LTVERSION value to "1:0:0" in configure.in. +2006/08/15: [bug] OP_REPEAT_INC process in match_at(). + should check repeat-count >= range-upper and + range-upper may be infinite. + +2006/08/11: Version 4.2.3 + +2006/08/11: [test] success in ruby 1.9.0 (2006-07-28) [i686-linux]. +2006/08/10: [impl] remove double call in set_qualifier(). +2006/08/10: [impl] remove by_number member in QualifierNode. +2006/08/09: [impl] remove a comma at the end of enum ReduceType + for escape warning on Mac OS X. +2006/08/07: [impl] remove warning in regcomp.c. +2006/08/07: [spec] move definition of USE_BACKREF_AT_LEVEL into NOT_RUBY. + +2006/08/03: Version 4.2.2 + +2006/08/03: [test] success in ruby 1.9.0 (2006-07-28) [i686-linux]. +2006/08/03: [bug] (thanks Hiroyuki Yamamoto) + segmentation fault in regexec(). (POSIX API) +2006/08/02: [bug] combination of \G in look-ahead/look-behind and other + anchors(\A, \z, \Z) cause invalid result. + ex. /(?!\G)a\z/.match("ba") + start arg. of MATCH_ARG_INIT() should be original + arg. of onig_search(). + +2006/07/31: Version 4.2.1 + +2006/07/31: [test] success in ruby 1.9.0 (2006-07-28) [i686-linux]. +2006/07/31: [bug] (thanks Kimura Minoru) + re-implement bm_search_notrev(). +2006/07/31: [impl] bm_search_notrev() refactoring. +2006/07/31: [bug] (thanks Kimura Minoru) + fix incomplete multibyte string in exact info. +2006/07/31: [impl] (thanks Seiji Masugata) + remove cast in va_init_list() for Intel C Compiler. + +2006/07/18: Version 4.2.0 + +2006/07/18: [test] success in ruby 1.9.0 (2006-03-01) [i686-linux]. +2006/07/18: [new] (thanks Wolfgang Nadasi-Donner) + add back reference with nest level. + \k<name+n>, \k<name-n> +2006/07/11: [impl] change long to unsigned long for ONIG_OPTION_XXX + and ONIG_SYN_XXX number literals. + +2006/07/03: Version 4.1.2 + +2006/07/03: [test] success in ruby 1.9.0 (2006-03-01) [i686-linux]. +2006/07/03: [spec] (thanks Wolfgang Nadasi-Donner) + allow \G in look-behind. + add ANCHOR_BEGIN_POSITION flag in setup_tree(). +2006/06/12: [impl] (thanks matz) + fix cast from char* to const char* + in onig_snprintf_with_pattern(). + fix cast from char* to const char* + for PopularQStr[] and ReduceQStr[]. + +2006/05/22: Version 4.1.1 + +2006/05/22: [test] success in ruby 1.9.0 (2006-03-01) [i686-linux]. +2006/05/22: [impl] add position string argument to STACK_BASE_CHECK(). +2006/05/22: [bug] (thanks NARUSE, Yui) + add STK_NULL_CHECK_END to IS_TO_VOID_TARGET(). + ex. core dump in + /(?<pare>\(([^\(\)]++|\g<pare>)*+\))/.match('((a))') + +2006/05/15: Version 4.1.0 + +2006/05/15: [test] success in ruby 1.9.0 (2006-03-01) [i686-linux]. +2006/05/15: [impl] thread atomic changes for onig_end() and + onig_free_node_list(). +2006/05/15: [test] success in ruby 1.9.0 (2006-03-01) [i686-linux]. +2005/05/15: [dist] update API, API.ja, FAQ, FAQ.ja. +2006/05/15: [spec] remove onig_recompile(), onig_recompile_deluxe() + and re_recompile_pattern(). + add config USE_RECOMPILE_API. +2006/05/15: [impl] improved thread safe implementation of onig_search() + and onig_match(). + +2006/05/11: Version 4.0.4 + +2006/05/11: [test] success in ruby 1.9.0 (2006-03-01) [i686-linux]. +2006/05/11: [bug] (thanks Yuji Kaneda) + dead-lock in onig_end(). +2006/05/11: [dist] update index.html. + +2006/05/08: Version 4.0.3 + +2006/05/08: [test] success in ruby 1.9.0 (2006-03-01) [i686-linux]. +2006/05/08: [bug] (thanks Allan Odgaard) + Segmentation fault in backward search. + ex. /^\t.*$/ +2006/04/18: [dist] update index.html. +2006/04/05: [dist] update index.html. +2006/03/24: [dist] update doc/RE, doc/RE.ja. + +2006/03/23: Version 4.0.2 + +2006/03/22: [test] success in ruby 1.9.0 (2006-03-01) [i686-linux]. +2006/03/22: [impl] add both of ONIG_OPTION_DONT_CAPTURE_GROUP + and ONIG_OPTION_CAPTURE_GROUP check. +2006/03/22: [spec] add error code ONIGERR_INVALID_COMBINATION_OF_OPTIONS. +2006/03/22: [impl] remove USE_NAMED_GROUP condition from + ONIG_OPTION_DONT_CAPTURE_GROUP check in parse_effect(). +2006/03/22: [new] add API onig_noname_group_capture_is_active(). +2006/03/01: [spec] rename regex object type from regex_t to OnigRegexType. + add typedef OnigRegexType regex_t + unless ONIG_ESCAPE_REGEX_T_COLLISION is defined. +2006/02/27: [spec] change ONIG_MAX_MULTI_BYTE_RANGES_NUM from 1000 + to 10000. (for docdiff program) +2006/02/17: [dist] change COPYING year 2005 -> 2006. + +2006/02/07: Version 4.0.1 + +2006/02/07: [test] success in ruby 1.9.0 (2005-11-28) [i686-linux]. +2006/02/07: [bug] memory leaks in onig_free_shared_cclass_table(). +2006/02/03: [ruby] add -m 0644 option to install command in "make 19". +2006/02/03: [impl] rename ANCHOR_ANYCHAR_STAR_PL to ANCHOR_ANYCHAR_STAR_ML. + change from IS_POSIXLINE() to IS_MULTILINE() + for ANCHOR_ANYCHAR_START/_ML decision + in optimize_node_left(). +2006/01/26: [dist] update index.html for Oniguruma 2.5.3. +2006/01/25: [dist] update URL in index.html. + +2006/01/24: Version 4.0.0 + +2006/01/24: [test] success in ruby 1.9.0 (2005-11-28) [i386-cygwin]. +2006/01/24: [test] success in ruby 1.9.0 (2005-11-28) [i686-linux]. +2006/01/24: [dist] remove warnings from sample/encode.c. +2006/01/24: [dist] change install description in README(.ja). +2006/01/24: [dist] remove re.c.XXX.patch from distribution and CVS. +2006/01/24: [dist] --- support shared library --- + use GNU libtool/automake. + change configure.in and add Makefile.am, sample/Makefile.am. + add AUTHORS file. +2006/01/24: [dist] test programs return exit code -1 when test fails. +2006/01/24: [bug] (thanks KIMURA Koichi) + invalid syntax definition in ONIG_SYNTAX_GREP. + ONIG_SYN_OP_BRACE_INTERVAL + -> ONIG_SYN_OP_ESC_BRACE_INTERVAL +2006/01/23: [dist] fix configure.in for onig-config. +2006/01/19: [new] add new config USE_UNICODE_ALL_LINE_TERMINATORS. + (U+000d, U+0085, U+2028, U+2029) +2005/12/29: [dist] change pmatch array size to 25 in testconv.rb. +2005/12/26: [dist] fix name in test.rb. +2005/12/26: [dist] update index.html for 2.5.1. + +2005/11/29: Version 3.9.1 + +2005/11/29: [test] success in ruby 1.9.0 (2005-11-28) [i686-linux]. +2005/11/24: [test] success in ruby 1.9.0 (2005-08-09) [i686-linux]. +2005/11/21: [test] success in ruby 1.9.0 (2005-11-20) [i386-cygwin]. +2005/11/21: [bug] (thanks Allan Odgaard) + utf-8 character comments in extended mode leads + invalid result. + ex. /(?x)(?<= # <any-utf-8 multibyte char>o\n~) / + fix onigenc_unicode_is_code_ctype() and + utf8_is_code_ctype(). +2005/11/20: [bug] (thanks MATSUMOTO Satoshi) (thanks Isao Sonobe) + begin-line anchor and BM search optimization leads + invalid result in UTF-16/32. + fix in set_optimize_exact_info(). + +2005/11/20: Version 3.9.0 + +2005/11/20: [test] success in ruby 1.9.0 (2005-11-20) [i386-cygwin]. +2005/11/20: [test] success in ruby 1.9.0 (2005-10-18) [i386-cygwin]. +2005/11/20: [new] add new config USE_CRNL_AS_LINE_TERMINATOR. + (!!! NO SUPPORT experimental option !!!) +2005/11/15: [bug] (thanks Allan Odgaard) + tok->escape was not cleared in fetch_token_in_cc(). + ex. [\s&&[^\n]] makes wrong result. +2005/10/18: [impl] (thanks nobu) + change sjis_mbc_enc_len() + and node_new_cclass_by_codepoint_range() scope to static. +2005/09/05: [dist] remove link to MultiFind. +2005/09/01: [dist] add link to yagrep. + +2005/08/23: Version 3.8.9 + +2005/08/23: [test] success in ruby 1.9.0 (2005-08-09) [i686-linux]. +2005/08/23: [inst] fix Makefile.in for make ctest/ptest. + +2005/08/23: Version 3.8.8 + +2005/08/23: [test] success in ruby 1.9.0 (2005-08-09) [i686-linux]. +2005/08/23: [impl] split is_code_in_cc() from onig_is_code_in_cc(). +2005/08/23: [impl] should check DATA_ENSURE() at OP_CCLASS_NODE in match_at(). +2005/08/23: [impl] (thanks akr) + add ONIG_OPTION_MAXBIT for escape conflict with + Ruby's option. +2005/08/22: [impl] escape GCC 4.0 warnings for testc.c. +2005/08/22: [bug] (thanks nobu, matz) [ruby-dev:26840] + UTF-8 0xFE, 0xFF handling bug in code_is_in_cclass_node(). + abort on /\S*/ =~ "\xfe" +2005/08/22: [impl] escape GCC 4.0 warnings for sample/*.c. +2005/08/22: [impl] fix testconvu.rb. +2005/08/22: [impl] escape GCC 4.0 warnings. + +2005/08/09: Version 3.8.7 + +2005/08/09: [test] success in ruby 1.9.0 (2005-08-09) [i686-linux]. +2005/08/09: [bug] (thanks Allan Odgaard) + should not call enc_len() for s == range + in onig_search(). +2005/08/01: [dist] add mkdir $prefix, mkdir $exec_prefix to make install. + +2005/07/27: Version 3.8.6 + +2005/07/27: [test] success in ruby 1.9.0 (2005-07-26) [i686-linux]. +2005/07/27: [impl] update onig-config.in. +2005/07/26: [new] (thanks Yen-Ju Chen) + add Oniguruma configuration check program. + (onig-config.in) + +2005/07/14: Version 3.8.5 + +2005/07/14: [test] success in ruby 1.9.0 (2005-07-14) [i686-linux]. +2005/07/11: [test] success in ruby 1.9.0 (2005-07-04) [i686-linux]. +2005/07/11: [bug] (thanks nobu) [ruby-dev:26505] + invalid handling for /\c\x/ and /\C-\x/. + fix fetch_escaped_value(). +2005/07/05: [impl] (thanks Alexey Zakhlestine) + escape GCC 4.0 warnings. + +2005/07/01: Version 3.8.4 + +2005/07/01: [test] success in ruby 1.9.0 (2005-07-01) [i686-linux]. +2005/06/30: [test] success in ruby 1.9.0 (2005-06-28) [i686-linux]. +2005/06/30: [dist] add GB 18030 test to sample/encode.c. +2005/06/30: [impl] escape warning of gb18030_left_adjust_char_head(). +2005/06/30: [new] (contributed by KUBO Takehiro) + add new character encoding ONIG_ENCODING_GB18030. +2005/06/30: [bug] invalid ctype check for multibyte encodings. + ("graph", "print") + fix onigenc_mb2/4_is_code_ctype(), + eucjp_is_code_ctype() and sjis_is_code_ctype(). +2005/06/30: [bug] invalid conversion from code point to mbc in + onigenc_mb4_code_to_mbc(). + +2005/06/28: Version 3.8.3 + +2005/06/28: [test] success in ruby 1.9.0 (2005-06-28) [i686-linux]. +2005/06/27: [test] success in ruby 1.9.0 (2005-05-31) [i686-linux]. +2005/06/27: [bug] (thanks Wolfgang Nadasi-Donner) + invalid check for never ending recursion. + lower zero quantifier should be treated as + a non-recursive call alternative. + ex. /(?<bal>[^()]*(\(\g<bal>\)[^()]*)*)/ +2005/06/15: [impl] add divide_ambig_string_node_sub(). +2005/06/15: [dist] add a test to sample/encode.c. +2005/06/10: [new] add ONIG_SYNTAX_PERL_NG. (Perl + named group) + +2005/06/01: Version 3.8.2 + +2005/06/01: [test] success in ruby 1.9.0 (2005-05-31) [i686-linux]. +2005/05/31: [dist] add doc/FAQ and doc/FAQ.ja. +2005/05/31: [impl] minor change in node_new(). +2005/05/30: [test] success in ruby 1.9.0 (2005-05-11) [i686-linux]. +2005/05/30: [bug] (thanks Allan Odgaard) + FreeNodeList null check should be on thread-atomic + in node_new(). + +2005/05/11: Version 3.8.1 + +2005/05/11: [test] success in ruby 1.9.0 (2005-05-11) [i386-mswin32]. +2005/05/11: [dist] update win32/Makefile (make 19). +2005/05/11: [test] success in ruby 1.9.0 (2005-05-11) [i686-linux]. +2005/05/06: [test] success in ruby 1.9.0 (2005-05-06) [i686-linux]. +2005/05/06: [impl] (thanks nobu) [ruby-core:4815] + add #ifdef USE_VARIABLE_META_CHARS to goto label. +2005/04/25: [test] success in ruby 1.9.0 (2005-04-25) [i686-linux]. +2005/04/25: [impl] change DEFAULT_WARN_FUNCTION and DEFAULT_VERB_WARN_FUNCTION + to onig_rb_warn() and onig_rb_warning(). + +2005/04/15: Version 3.8.0 + +2005/04/15: [test] success in ruby 1.9.0 (2005-04-14) [i686-linux]. +2005/04/01: [test] success in ruby 1.9.0 (2005-03-24) [i686-linux]. +2005/04/01: [impl] (thanks Joe Orton) + (thanks Moriyoshi Koizumi) + many const-ification to many *.[ch] files. + +2005/03/25: Version 3.7.2 + +2005/03/25: [test] success in ruby 1.9.0 (2005-03-24) [i686-linux]. +2005/03/23: [test] success in ruby 1.9.0 (2005-03-20) [i686-linux]. +2005/03/23: [test] success in ruby 1.9.0 (2005-03-08) [i686-linux]. +2005/03/23: [new] add ONIG_SYNTAX_ASIS. +2005/03/23: [new] add ONIG_SYN_OP2_INEFFECTIVE_ESCAPE. +2005/03/09: [spec] rename MBCTYPE_XXX to RE_MBCTYPE_XXX. (GNU API) +2005/03/08: [test] success in ruby 1.9.0 (2005-03-08) [i686-linux]. +2005/03/08: [impl] (thanks matz) [ruby-dev:25783] + should not allocate memory for key data in st.c. + move st_*_strend() functions from st.c. fixed some + potential memory leaks. + (imported from Ruby 1.9 2005-03-08) + +2005/03/07: Version 3.7.1 + +2005/03/07: [test] success in ruby 1.9.0 (2005-03-07) [i686-linux]. +2005/03/07: [impl] (thanks Rui Hirokawa) + add ONIG_ESCAPE_UCHAR_COLLISION. + rename UChar to OnigUChar in oniguruma.h. +2005/03/07: [impl] remove declarations for Ruby in oniggnu.h. +2005/03/05: [bug] ANCHOR_ANYCHAR_STAR didn't work in onig_search(). +2005/03/01: [dist] remove oniggnu.h from MANIFEST-RUBY. + remove oniggnu.h from make 19. +2005/03/01: [bug] (thanks matz) [ruby-dev:25778] + uninitialized member (OptEnv.backrefed_status) + was used. + +2005/02/19: Version 3.7.0 + +2005/02/19: [test] success in ruby 1.9.0 (2005-02-19) [i386-cygwin]. +2005/02/19: [new] (thanks Minero Aoki) + add onig_region_set(). +2005/02/19: [API] change onig_region_init() to extern. +2005/02/19: [dist] remove reggnu.c from MANIFEST-RUBY. + remove reggnu.c from make 19. +2005/02/19: [dist] update doc/API and doc/API.ja. +2005/02/19: [test] success in ruby 1.9.0 (2005-02-19) [i386-cygwin]. +2005/02/19: [impl] (thanks Alexey Zakhlestine) + change UChar* to const UChar* in oniguruma.h, + regenc.h and regparse.h. +2005/02/13: [impl] change UChar* to const UChar* in oniguruma.h and + onigposix.h and st.h. +2005/02/12: [test] success in ruby 1.9.0 (2005-02-11) [i386-cygwin]. +2005/02/12: [bug] (thanks nobu) [ruby-dev:25676] + type_cclass_hash() fix overrun. +2005/02/09: [test] success in ruby 1.9.0 (2005-02-09) [i686-linux]. +2005/02/09: [spec] add RE_OPTION_FIND_NOT_EMPTY etc.. to oniggnu.h. +2005/02/09: [dist] remove hash.c.patch. +2005/02/07: [impl] remove re_mbctab, mbctab_ascii etc... + (USE_COMPATIBILITY_FOR_RUBY_EXTENSION_LIBRARY) + +2005/02/04: Version 3.6.0 + +2005/02/04: [test] success in ruby 1.9.0 (2005-02-04) [i686-linux]. +2005/02/01: [bug] add key_free() call to st_free_table(). +2005/02/01: [new] add onig_get_default_ambig_flag() and + onig_set_default_ambig_flag(). +2005/02/01: [dist] update MANIFEST-RUBY. +2005/01/31: [test] success in ruby 1.9.0 (2005-01-29) [i686-linux]. +2005/01/31: [spec] remove ONIGENC_AMBIGUOUS_MATCH_COMPOUND + from ONIGENC_AMBIGUOUS_MATCH_DEFAULT. +2005/01/31: [dist] update Makefile.in (make 19). +2005/01/29: [memo] (thanks Kazuo Saito) + Oniguruma 3.5.4 was merged to Ruby 1.9.0. +2005/01/28: [impl] (thanks UK-taniyama) + add extern "C" { } directive to oniguruma.h, oniggnu.h + and onigposix.h for C++. +2005/01/25: [impl] remove nested function call for xxx_code_to_mbclen(). + (euc_kr.c, euc_tw.c, big5.c) + +2005/01/19: Version 3.5.4 + +2005/01/19: [test] success in ruby 1.9.0 (2005-01-05) [i686-linux]. +2005/01/19: [bug] (thanks Isao Sonobe) + callback function argument name_end of onig_foreach_name() + was wrong. + name key of name table should be null terminated for + character encoding length. + add strdup_with_null(), rename onig_strdup() to k_strdup(). + use e->name_len in i_names(). +2005/01/17: [impl] (thanks UK-taniyama) + add HAVE_SYS_TYPES_H to config.h.in. + +2005/01/13: Version 3.5.3 + +2005/01/13: [test] success in ruby 1.9.0 (2005-01-05) [i686-linux]. +2005/01/13: [bug] ignore case match bug. + ex. /s+/iu.match("SSSSS") ==> [4..5] + fix OP_EXACT1_IC, OP_EXACTN_IC process. +2005/01/13: [bug] (thanks Isao Sonobe) + ignore case match bug. + ex. /is/iu.match("ss") fail. + fix str_lower_case_match() etc. + +2005/01/05: Version 3.5.2 + +2005/01/05: [test] success in ruby 1.9.0 (2005-01-05) [i686-linux]. +2005/01/05: [test] success in ruby 1.9.0 (2004-12-16) [i686-linux]. +2005/01/05: [bug] (thanks Isao Sonobe) + ignore case match bug. + ex. /s+/iu.match("sssss") ==> [4..5] + fix OP_EXACT1_IC, OP_EXACTN_IC process. +2005/01/05: [bug] (thanks Isao Sonobe) + group name table should be renumbered. + add onig_renumber_name_table(). +2004/12/24: [dist] remove file onigcmpt200.h. + +2004/12/17: Version 3.5.1 + +2004/12/17: [dist] add INSTALL-RUBY to archive. +2004/12/16: [test] success in ruby 1.9.0 (2004-12-16) [i686-linux]. +2004/12/16: [dist] update hash.c.patch. +2004/12/15: [bug] (thanks matz) + char > 127 should be casted to unsigned char. (utf8.c) +2004/12/13: [impl] add HAVE_PROTOTYPES and HAVE_STDARG_PROTOTYPES definition + to oniguruma.h in the case __cplusplus. +2004/12/06: [dist] update doc/RE and doc/RE.ja. +2004/12/03: [impl] (thanks nobu) + st.h fix prototype for C++. + +2004/12/03: Version 3.5.0 + +2004/12/02: [test] success in ruby 1.9.0 (2004-12-02) [i686-linux]. +2004/12/01: [test] success in ruby 1.9.0 (2004-12-01) [i386-mswin32]. +2004/12/01: [dist] add make targets 19 and 19up to win32/Makefile. +2004/12/01: [test] success in ruby 1.9.0 (2004-12-01) [i386-cygwin]. +2004/12/01: [test] success in ruby 1.9.0 (2004-12-01) [i686-linux]. +2004/12/01: [impl] double cast for escape warning in Cygwin. + (HashDataType* )((void* )(&e)) in regparse.c +2004/12/01: [test] success in ruby 1.9.0 (2004-11-30) [i686-linux]. +2004/12/01: [tune] change implementation of clear_opt_map_info(). + (which was 10-16% cost in gprof result for my test program) +2004/12/01: [dist] remove regex.c from distribution files. +2004/11/30: [memo] remove targets 16 and 18 from Makefile.in. +2004/11/30: [test] success in ruby 1.9.0 (2004-11-30) [i686-linux]. +2004/11/30: [inst] add "cp -p st.[ch] st.[ch].ruby_orig" to "make 19". +2004/11/30: [tune] map_position_value() return 20 if code is 0 + and minimum enclen > 1. +2004/11/30: [test] success in ruby 1.9.0 (2004-11-29) [i686-linux]. +2004/11/30: [impl] minor changes for multi-thread in regexec.c and regcomp.c. +2004/11/30: [impl] change THREAD_PASS_LIMIT_COUNT value from 10 to 8. +2004/11/30: [impl] add THREAD_ATOMIC_XXX to FreeNodeList access in regparse.c +2004/11/29: [impl] add USE_MULTI_THREAD_SYSTEM. +2004/11/29: [memo] add hash.c.patch to CVS. +2004/11/29: [dist] change mail address to 'sndgk393 AT ...' +2004/11/29: [dist] add -s option (silent mode) to test.rb. +2004/11/29: [tune] change THRESHOLD_RANGE_NUM_FOR_SHARE_CCLASS value + from 20 to 8. +2004/11/29: [inst] add make target "19up". +2004/11/29: [dist] change Oniguruma Home Page URL. +2004/11/29: [impl] remove onig_is_in_code_range_array(). +2004/11/29: [dist] fix doc/RE and RE.ja (character types). +2004/11/26: [dist] fix win32/Makefile. +2004/11/26: [dist] fix doc/RE and RE.ja (multibyte character types). +2004/11/26: [impl] add onig_free_shared_cclass_table(). +2004/11/26: [impl] move definition USE_UNICODE_FULL_RANGE_CTYPE to regenc.h. +2004/11/26: [impl] add opcode OP_CCLASS_NODE. +2004/11/26: [impl] move definition of CClassNode to regint.h. +2004/11/26: [impl] add type PointerType in regint.h. +2004/11/25: [impl] remove ONIGENC_CTYPE_MOD_NOT. +2004/11/25: [impl] rename onig_node_new_cclass_by_codepoint_range to + node_new_cclass_by_codepoint_range. +2004/11/25: [impl] remove get_type_cc_node method from OnigEncodingType. +2004/11/25: [impl] move implementation of shared char-class from enc/*.c + to regparse.c. +2004/11/25: [dist] add hash.c.patch for Ruby 1.9 hash.c change. +2004/11/22: [impl] change utf8_get_type_node(). +2004/11/22: [impl] add ONIGENC_CTYPE_MOD_NOT. +2004/11/22: [bug] (thanks MIYAMUKO Katsuyuki) + ruby make test fail in HP-UX B.11.23 ia64. + should use tok->u.code instead of tok->u.c in + the case of TK_CODE_POINT. +2004/11/19: [bug] (thanks Yoshida Masato) + invalid multibyte code causes segmentation fault. + ex. /[\xFF-\xFF]/u +2004/11/19: [bug] (thanks Yoshida Masato) + illegal check in char-class range in UTF-8. + ex. s = "[\xC2\xA0-\xC3\xBE]" + p(Regexp.new(s, nil, "u") =~ "\xC3\xBE") +2004/11/18: [impl] add onig_node_new_cclass_by_codepoint_range(). +2004/11/18: [impl] remove OnigCodePointRange type. (use OnigCodePoint[].) +2004/11/17: [bug] (thanks nobu) + abort in "a".gsub(/a\Z/, "") + fix ONIGENC_STEP_BACK() argument in onig_search(). +2004/11/16: [impl] add key2 member to st_table_entry in st.[ch]. + change API of st for non-null terminated string key. +2004/11/16: [impl] add get_type_cc_node method to OnigEncodingType. +2004/11/15: [impl] add st.h and st.c from Ruby 1.9. + use st-hash always. +2004/11/12: [impl] change menber 'not' of CClassNode to 'flags'. + add flags FLAG_CCLASS_NOT and FLAG_CCLASS_SHARE. +2004/11/12: [impl] add onig_is_in_code_range_array() to enc/unicode.c. +2004/11/12: [impl] fix CRWord in enc/unicode.c and MBWord in enc/utf8.c. +2004/11/11: [bug] fix enc/utf8.c. + size 0 array initializer was compile error in VC++. +2004/11/09: [inst] (thanks Hiroki YAGITA) + change installed file mode to 0644. +2004/11/09: [bug] (thanks UK-taniyama) + wrong definitions GET_RELADDR_INC(), GET_ABSADDR_INC() + etc... (NOT PLATFORM_UNALIGNED_WORD_ACCESS) +2004/11/09: [impl] type cast in regexec() for remove compile time warning. + (WIN32, regposix.c) +2004/11/08: [spec] fix Unicode character types. + 0x00ad (soft hyphen) should be [:cntrl:] and [:space:] type. + [0x0009..0x000d], 0x0085 should be [:print:] type. + 0x00ad should not be [:punct:] type. +2004/11/08: [inst] fix Makefile.in. (for make ctest/ptest/testcu) +2004/11/06: [impl] (thanks Kazuo Saito) + too many alternatives pattern causes core dump. + change implementation of onig_node_free(). +2004/11/05: [spec] rename ONIGERR_END_PATTERN_AT_BACKSLASH to + ONIGERR_END_PATTERN_AT_ESCAPE. +2004/11/05: [impl] (thanks matz) + escape compile time warnings for x86-64 Linux. + StackIndex type int -> long +2004/11/05: [memo] (thanks Kazuo Saito) + Oniguruma 3.4.0 was merged to Ruby 1.9.0. + +2004/10/30: Version 3.4.0 + +2004/10/30: [test] success in ruby 1.9.0 (2004-09-24) [i686-linux]. +2004/10/30: [new] add hexadecimal digit char type. (\h, \H) + syntax: ONIG_SYN_OP2_ESC_H_XDIGIT +2004/10/30: [bug] (thanks Guy Decoux) + reluctant infinite repeat bug. + ex. /^[a-z]{2,}?$/.match("aaa") fail. + fix OP_REPEAT_INC_NG process in match_at(). + +2004/10/18: Version 3.3.1 + +2004/10/18: [test] success in ruby 1.9.0 (2004-09-24) [i686-linux]. +2004/10/18: [impl] (thanks Imai Yasumasa) + enclose #include <sys/types.h> by #ifndef __BORLANDC__. +2004/10/18: [bug] (thanks Imai Yasumasa) + memory acess violation in select_opt_exact_info(). +2004/09/25: [dist] fix doc/API and doc/API.ja. +2004/09/25: [bug] fix OP_SEMI_END_BUF process in match_at() for + the case USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE + is not defined. + +2004/09/17: Version 3.3.0 + +2004/09/17: [dist] add COPYING to program source files. +2004/09/17: [test] success in ruby 1.9.0 (2004-07-23) [i686-linux]. +2004/09/17: [bug] (thanks Isao Sonobe) + memory access violations in xxx_mbc_enc_len(), + and xxx_mbc_to_normalize() and + xxx_left_adjust_char_head(). + add string range check in match_at() and onig_search(). +2004/09/08: [dist] change mail address format.(kosako AT sofnec ...) + +2004/09/04: Version 3.2.9 + +2004/09/04: [test] success in ruby 1.9.0 (2004-07-23) [i686-linux]. +2004/09/04: [bug] (thanks Bob Kerstetter and Richard Koch) + search fail in ignore case mode. + fix str_lower_case_match(). +2004/09/04: [inst] (thanks Isao Sonobe) + clear sample directory in 'make clean'. +2004/09/04: [bug] fix ONIGENC_AMBIGUOUS_MATCH_COMPOUND/ASCII/NONASCII + meanings in XXXXX_mbc_to_normalize() and + XXXXX_is_mbc_ambiguous(). +2004/08/28: [bug] fix ONIGENC_AMBIGUOUS_MATCH_COMPOUND/ASCII/NONASCII + meanings in iso_8859_XX_mbc_to_normalize() and + iso_8859_XX_is_mbc_ambiguous(). + +2004/08/24: Version 3.2.8 + +2004/08/24: [test] success in ruby 1.9.0 (2004-07-23) [i686-linux]. +2004/08/24: [spec] add ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY. + /a{n}?/ == /(?:a{n})?/ +2004/08/24: [dist] fix doc/RE and doc/RE.ja. +2004/08/24: [bug] (thanks starfish) + memory leak in set_optimize_exact_info(). + +2004/08/21: Version 3.2.7 + +2004/08/21: [test] success in ruby 1.8.2 (2004-07-28) [i686-linux]. + (1.8.2 preview2) +2004/08/21: [test] success in ruby 1.9.0 (2004-07-23) [i686-linux]. +2004/08/21: [bug] (thanks Isao Sonobe) (thanks kage) + memory access violation in bm_search_notrev(). + (forgotten to merge from 2.X) + +2004/07/24: Version 3.2.6 + +2004/07/24: [test] success in ruby 1.9.0 (2004-07-23) [i686-linux]. +2004/07/24: [test] success in ruby 1.8.2 (2004-07-16) [i686-linux]. +2004/07/24: [bug] fix warnings for regexec.c. (gcc 2.91.66) +2004/07/24: [memo] change version control system from Subversion + to CVS 1.11.17. +2004/07/20: [bug] (thanks Isao Sonobe) + illegal result in negative character class in ignore case + mode. fix pair-ambig-codes process in parse_exp(). + ex. /[^a]/i.match("A") +2004/07/20: [bug] (thanks Isao Sonobe) + undefined bytecode error happens in UTF-16BE etc.. + compile_length_cclass_node() was not consistent with + compile_cclass_node(). + +2004/07/01: Version 3.2.5 + +2004/07/01: [test] success in ruby 1.8.2 (2004-06-23) [i686-linux]. +2004/07/01: [new] add onig_get_syntax_{op,op2,behavior,options}. +2004/07/01: [bug] (thanks Isao Sonobe) + invalid result in onig_capture_tree_traverse(). + fix make_capture_history_tree(). + +2004/06/29: Version 3.2.4 + +2004/06/29: [test] success in ruby 1.8.2 (2004-06-23) [i686-linux]. +2004/06/29: [new] (thanks Isao Sonobe) + add onig_number_of_captures(). + +2004/06/25: Version 3.2.3 + +2004/06/25: [test] success in ruby 1.8.2 (2004-06-23) [i686-linux]. +2004/06/25: [bug] (thanks Isao Sonobe) + invalid result in onig_capture_tree_traverse(). + fix make_capture_history_tree(). + +2004/06/24: Version 3.2.2 + +2004/06/24: [test] success in ruby 1.8.0 (2003-08-08) [i386-cygwin]. +2004/06/24: [test] success in ruby 1.8.0 (2003-08-08) [i386-mswin32]. +2004/06/24: [test] success in ruby 1.8.2 (2004-06-23) [i686-linux]. +2004/06/24: [new] (thanks Isao Sonobe) + add onig_number_of_capture_histories(). +2004/06/24: [bug] (thanks Isao Sonobe) + invalid char position match in UTF-16 and UTF-32. + add onigenc_always_false_is_allowed_reverse_match(). + +2004/06/17: Version 3.2.1 + +2004/06/17: [test] success in ruby 1.8.0 (2003-08-08) [i386-cygwin]. +2004/06/17: [test] success in ruby 1.8.0 (2003-08-08) [i386-mswin32]. +2004/06/17: [test] success in ruby 1.8.2 (2004-05-18) [i686-linux]. +2004/06/17: [impl] should not use OP_REPEAT for (...)? even if target size + is long. +2004/06/17: [bug] (thanks nobu) [ruby-dev:23703] + should use STACK_AT() instead of stkp in OP_REPEAT_INC. + add IN_VAR_REPEAT flag in setup_tree(). +2004/06/16: [impl] change select_opt_exact_info() to use ByteValTable[]. +2004/06/16: [impl] change map_position_value() table values. +2004/06/14: [impl] (thanks John Carter) + RelAddrType, AbsAddrType and LengthType change + from short int to int type for the very long string match. +2004/06/14: [bug] (thanks Greg A. Woods) + fix nmatch argument of regexec() is smaller than + reg->num_mem + 1 case. (POSIX API) +2004/06/14: [spec] (thanks Greg A. Woods) + set pmatch to NULL if nmatch is 0 in regexec(). (POSIX API) + +2004/06/10: Version 3.2.0 + +2004/06/10: [test] success in ruby 1.8.0 (2003-08-08) [i386-cygwin]. +2004/06/10: [test] success in ruby 1.9.0 (2004-05-27) [i386-mswin32]. +2004/06/10: [test] success in ruby 1.8.2 (2004-05-18) [i686-linux]. +2004/06/10: [dist] add README.ja. +2004/06/10: [new] add onig_copy_encoding(). +2004/06/10: [API] add encoding argument to onig_set_meta_char(). + add meta_char_table member to OnigEncodingType. +2004/06/08: [dist] add doc/API.ja. +2004/06/07: [API] add num_of_elements member to OnigCompileInfo. +2004/05/29: [memo] (thanks Kazuo Saito) + Oniguruma 3.1.0 was merged to Ruby 1.9.0. +2004/05/26: [impl] rename NST_SIMPLE_REPEAT to NST_STOP_BT_SIMPLE_REPEAT. +2004/05/26: [impl] doesn't need to check that target's simple repeat-ness + for EFFECT_MEMORY type node in setup_tree(). + +2004/05/25: Version 3.1.0 + +2004/05/25: [test] success in ruby 1.8.0 (2003-08-08) [i386-mswin32]. +2004/05/25: [test] success in ruby 1.8.0 (2003-08-08) [i386-cygwin]. +2004/05/25: [test] success in ruby 1.9.0 (2004-05-23) [i686-linux]. +2004/05/25: [test] success in ruby 1.8.2 (2004-05-18) [i686-linux]. +2004/05/25: [bug] (thanks Masahiro Sakai) [ruby-dev:23560] + ruby -ruri -ve 'URI::ABS_URI =~ + "http://example.org/Andr\xC3\xA9"' + nested STK_REPEAT type stack can't backtrack repeat_stk[]. + add OP_REPEAT_INC_SG and OP_REPEAT_INC_NG_SG. +2004/05/25: [new] support UTF-32LE. (ONIG_ENCODING_UTF32_LE) +2004/05/25: [new] support UTF-32BE. (ONIG_ENCODING_UTF32_BE) +2004/05/24: [impl] divide enc/utf16.c to utf16_be.c and utf16_le.c. +2004/05/24: [impl] add enc/unicode.c. +2004/05/24: [API] change calling sequences of onig_new_deluxe() and + onig_recompile_deluxe(). + define OnigCompileInfo type. +2004/05/21: [impl] perform ensure process for rb_trap_exec() in match_at(). + add onig_exec_trap() and CHECK_INTERRUPT_IN_MATCH_AT. +2004/05/21: [impl] add regex status check to onig_match(). +2004/05/21: [new] add onig_get_capture_tree() and + onig_capture_tree_traverse(). +2004/05/20: [spec] (thanks Isao Sonobe) + capture history return capture data tree. + (see sample/listcap.c) +2004/05/19: [bug] (thanks Simon Strandgaard) + Control-C does not work in matching process on Ruby. + add calling of CHECK_INTERRUPT into match_at(). + ex. /<(?:[^">]+|"[^"]*")+>/.match('<META http-equiv= \ + "Content-Type content="text/html; charset=iso-8859-1">') +2004/05/19: [bug] (thanks Simon Strandgaard) + define virtual codepoint values for invalid encoding + byte 0xfe and 0xff in UTF-8. + ex. /\w+/u.match("%a\xffb\xfec%") ==> "a" +2004/05/19: [spec] (thanks Simon Strandgaard) + too big backref number should be treated as a sequence of + an octal char and number digits. + ex. /b\3777\c/.match("b\3777\c") +2004/05/17: [spec] rename encoding names "UTF-16 BE" and "UTF-16 LE" + to "UTF-16BE" and "UTF-16LE". +2004/05/17: [impl] move ismbchar() and mbclen() from oniguruma.h to oniggnu.h. +2004/05/17: [impl] rename onigenc_single_byte_is_allowed_reverse_match() to + onigenc_always_true_is_allowed_reverse_match(). + +2004/05/14: Version 3.0.0 + +2004/05/14: [test] success in ruby 1.8.0 (2003-08-08) [i386-cygwin]. +2004/05/14: [test] success in ruby 1.9.0 (2004-05-14) [i686-linux]. +2004/05/14: [test] success in ruby 1.8.0 (2003-08-08) [i386-mswin32]. + (* need to edit parse.y: + register int c; ---> int c; in yylex()) +2004/05/14: [impl] add regext.c. +2004/05/14: [spec] KOI8 is not included in library archive by default setup. +2004/05/14: [impl] implementation changes are completed for all encoding files. +2004/05/12: [impl] add divide_ambig_string_node(). + ambiguous string is divided and normalized before + optimization and compilation process. +2004/05/11: [dist] remove INSTALL-RUBY from distribution. +2004/04/28: [memo] (thanks Kazuo Saito) + Oniguruma 2.2.8 was merged to Ruby 1.9.0. +2004/04/26: [spec] change value DEFAULT_MATCH_STACK_LIMIT_SIZE = 0 : unlimited +2004/04/26: [new] add onig_get_match_stack_limit_size() and + onig_set_match_stack_limit_size(). +2004/04/26: [bug] add error check to re.c.181.patch and re.c.168.patch. +2004/04/23: [impl] remove ctype_support_level from OnigEncodingType. +2004/04/22: [spec] allow the range from single byte char to multibyte char in + character class for implementation reason. + ex. /[a-\xbb\xcc]/ in EUC-JP encoding. +2004/04/21: [impl] remove max_enc_len_by_first_byte() from OnigEncodingType. +2004/04/20: [new] add onig_copyright(). +2004/04/20: [impl] add regversion.c. +2004/04/15: [new] add onig_get_ambig_flag(). +2004/04/14: [bug] (thanks Isao Sonobe) + undefined bytecode error happens if ONIG_OPTION_FIND_LONGEST + is setted. + should finish matching process if find-condition + is fail at OP_END in match_at(). +2004/04/12: [impl] add ambig_flag to regex_t. +2004/04/09: [impl] move onig_set_meta_char() to regsyntax.c. +2004/04/09: [bug] (thanks HIROSE Masaaki) fix onig_version(). +2004/04/08: [impl] add regsyntax.c. +2004/04/07: [new] support UTF-16 LE. (ONIG_ENCODING_UTF16_LE) +2004/04/05: [impl] add ONIGENC_CTYPE_NEWLINE. +2004/04/05: [memo] (thanks Kazuo Saito) + Oniguruma 2.2.6 was merged to Ruby 1.9.0. +2004/04/02: [memo] Version 2.2.6 was released. +2004/03/26: [new] support UTF-16 BE. (ONIG_ENCODING_UTF16_BE) +2004/03/25: [spec] support non 8-bit encodings. +2004/03/16: [memo] 2.X branch for 8-bit encodings only. + +2004/03/16: Version 2.2.5 + +2004/03/16: [test] success in ruby 1.8.0 (2003-08-08) [i386-mswin32]. +2004/03/16: [test] success in ruby 1.9.0 (2004-02-24) [i686-linux]. +2004/03/16: [impl] add property name to error message of + ONIGERR_INVALID_CHAR_PROPERTY_NAME. +2004/03/16: [spec] allow prefix 'Is' for \p{...} in ONIG_SYNTAX_PERL. + add syntax op. ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS. +2004/03/15: [dist] add sample/syntax.c. +2004/03/15: [spec] support NOT op. in char property. \p{^...}, \P{^...}. + add syntax op. ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT. +2004/03/15: [spec] rename ONIG_SYN_OP2_ESC_P_CHAR_PROPERTY to + ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY. +2004/03/10: [impl] move ONIGERR_XXX from regenc.h to oniguruma.h, + rename ONIGERR_XXX to ONIGENCERR_XXX in regenc.h. +2004/03/08: [impl] (thanks eban) + replace defined(__CYGWIN__) to defined(__GNUC__). +2004/03/08: [bug] (thanks eban) [ruby-dev:23172] + need to separate initialization for bcc32. +2004/03/06: [memo] (thanks Kazuo Saito) + Oniguruma 2.2.4 was merged to Ruby 1.9.0. +2004/03/05: [API] change second argument type of onig_set_meta_char() + from unsigned int to OnigCodePoint. +2004/03/05: [dist] (thanks Kazuo Saito) + add MANIFEST-RUBY. + +2004/03/04: Version 2.2.4 + +2004/03/04: [impl] (thanks Moriyoshi Koizumi) + fix many warnings in Win32 VC++ with /W3 option. + +2004/03/02: Version 2.2.3 + +2004/03/02: [bug] (thanks Isao Sonobe) + return invalid capture region value if capture history + is used. (OP_MEMORY_END_PUSH_REC bug) + ex. /\g<p>(?@<p>\(\g<s>\)){0}(?<s>(?:\g<p>)*|){0}/ + .match("((())())") +2004/03/02: [impl] (thanks Kazuo Saito) + add :nodoc: to onig_stat_print() for RDoc. +2004/03/02: [impl] don't use ONIG_SOURCE_IS_WRAPPED. + +2004/02/27: Version 2.2.2 + +2004/02/27: [impl] fix the position of onig_stat_print(). +2004/02/27: [impl] define ONIG_RUBY_DEFINE_GLOBAL_FUNCTION() in regint.h + for ignored by RDoc. + +2004/02/26: Version 2.2.1 + +2004/02/26: [bug] [bugs.php.net:#26677] (thanks behrens) + invalid definition at onig_error_code_to_str() + in the case of NOT HAVE_STDARG_PROTOTYPES. + +2004/02/25: Version 2.2.0 + +2004/02/25: [test] success in ruby 1.8.0 (2003-08-08) [i386-mswin32]. +2004/02/24: [test] success in ruby 1.9.0 (2004-02-24) [i686-linux]. +2004/02/24: [bug] undefined IS_BLANK() and IS_GRAPH() was used in + onigenc_is_code_ctype() in the case of Ruby M17N. +2004/02/24: [new] support ISO-8859-16. (ONIG_ENCODING_ISO_8859_16) +2004/02/24: [bug] should not fold match for 0xdf in iso8859_6.c. +2004/02/24: [new] support ISO-8859-14. (ONIG_ENCODING_ISO_8859_14) +2004/02/23: [new] support ISO-8859-13. (ONIG_ENCODING_ISO_8859_13) +2004/02/23: [new] support ISO-8859-10. (ONIG_ENCODING_ISO_8859_10) +2004/02/20: [bug] fix iso_8859_4_mbc_is_case_ambig(). +2004/02/20: [new] support ISO-8859-9. (ONIG_ENCODING_ISO_8859_9) +2004/02/19: [bug] correct ctype tables for ISO-8859-3, ISO-8859-4, + ISO-8859-6, ISO-8859-7, ISO-8859-8, KOI8_R. +2004/02/18: [bug] wrong replaced name OnigSyntaxGnuOnigex. +2004/02/17: [spec] check capture status for empty infinite loop. + [ruby-dev:20224] etc... + ex. /(?:\1a|())*/.match("a"), + /(?:()|()|()|(x)|()|())*\2b\5/.match("b") + add USE_INFINITE_REPEAT_MONOMANIAC_MEM_STATUS_CHECK. + add OP_NULL_CHECK_END_MEMST, OP_NULL_CHECK_END_MEMST_PUSH. + add stack type STK_NULL_CHECK_END. +2004/02/13: [impl] add OnigEncodingEUC_CN to enc/euc_kr.c. +2004/02/13: [bug] (thanks Simon Strandgaard) + parsing of nested repeat was invalid. + ex. /ab{2,3}*/ was /(?:a(?:b{2,3}))*/, + should be /a(?:b{2,3}*)/ +2004/02/12: [bug] (thanks Simon Strandgaard) + OP_REPEAT_INC_NG process in match_at() is wrong. + ex. bad match /a.{0,2}?a/ =~ "0aXXXa0" +2004/02/12: [bug] (thanks Simon Strandgaard) + wrong fetch after (?x) option. ex. "(?x)\ta .\n+b" +2004/02/12: [bug] (thanks Simon Strandgaard) + [\^] is not a empty char class. +2004/02/09: [new] add onig_set_syntax_op(), onig_set_syntax_op2(), + onig_set_syntax_behavior(), onig_set_syntax_options(). +2004/02/06: [dist] add a new target 'site' to Makefile.in. +2004/02/06: [dist] add index.html. +2004/02/03: [bug] oniggnu.h was not installed by 'make install'. + +2004/02/02: Version 2.1.0 + +2004/02/02: [test] success in ruby 1.9.0 (2004-02-02) [i686-linux]. +2004/02/02: [test] success in ruby 1.8.0 (2003-08-08) [i386-cygwin]. +2004/02/02: [test] success in ruby 1.8.0 (2003-08-08) [i386-mswin32]. +2004/02/02: [new] support ISO-8859-11. (ONIG_ENCODING_ISO_8859_11) +2004/02/02: [new] support ISO-8859-5. (ONIG_ENCODING_ISO_8859_5) +2004/02/02: [impl] should check single byte encoding or not in and_cclass() + and or_cclass(). +2004/01/30: [dist] add oniggnu.h. +2004/01/30: [bug] ISO-8859-7 0xb7 (middle dot) is Punct type. +2004/01/30: [new] support ISO-8859-8. (ONIG_ENCODING_ISO_8859_8) +2004/01/29: [new] support ISO-8859-7. (ONIG_ENCODING_ISO_8859_7) +2004/01/29: [new] support ISO-8859-6. (ONIG_ENCODING_ISO_8859_6) +2004/01/28: [new] support KOI8-R. (ONIG_ENCODING_KOI8_R) +2004/01/28: [new] support KOI8. (ONIG_ENCODING_KOI8) +2004/01/27: [dist] rename enc/isotable.c to enc/mktable.c. +2004/01/27: [new] support ISO-8859-4. (ONIG_ENCODING_ISO_8859_4) +2004/01/26: [new] support ISO-8859-3. (ONIG_ENCODING_ISO_8859_3) +2004/01/26: [bug] EncISO_8859_{1,15}_CtypeTable[256] was wrong. + (0x80 - 0xff is not ASCII) +2004/01/23: [new] support ISO-8859-2. (ONIG_ENCODING_ISO_8859_2) +2004/01/23: [dist] add enc/isotable.c. +2004/01/22: [new] support EUC-TW. (ONIG_ENCODING_EUC_TW) +2004/01/22: [bug] definition of GET_ALIGNMENT_PAD_SIZE() and + ALIGNMENT_RIGHT() was wrong. + type casting should be unsigned int, not int. +2004/01/22: [impl] add defined(__x86_64) || defined(__x86_64__) + to unaligned word access condition. (AMD64 ?) +2004/01/21: [dist] rename enc/eucjp.c to enc/euc_jp.c. +2004/01/21: [new] support EUC-KR. (ONIG_ENCODING_EUC_KR) +2004/01/20: [test] success in ruby 1.8.0 (2003-08-08) [i386-cygwin]. +2004/01/20: [dist] change Makefile.in. +2004/01/20: [spec] add \p{...}, \P{...} in char class. +2004/01/20: [new] character property operators \p{...}, \P{...}. + supported in ONIG_SYNTAX_JAVA and ONIG_SYNTAX_PERL. +2004/01/19: [spec] allow /a{,n}/ as /a{0,n}/. (but don't allow /a{,}/) +2004/01/19: [dist] rename onigcomp200.h to onigcmpt200.h. +2004/01/19: [dist] update re.c.168.patch. svn add re.c.181.patch. +2004/01/16: [dist] update sample/*.c for new API. +2004/01/16: [dist] add onigcomp200.h. (for old API compatibility) +2004/01/16: [dist] update documents API, RE and RE.ja. +2004/01/16: [spec] change prefix REG_ -> ONIG_, regex_ onig_, + ENC_ -> ONIGENC, enc_ -> onigenc_. +2004/01/15: [impl] rename ENC_IS_MBC_E_WORD() to ENC_IS_MBC_WORD(). + rename ENC_CTYPE_SUPPORT_LEVEL_SB_ONLY to + ENC_CTYPE_SUPPORT_LEVEL_SB. +2004/01/14: [impl] rename UNALIGNED_WORD_ACCESS to + PLATFORM_UNALIGNED_WORD_ACCESS. +2004/01/14: [impl] change MATCH_STACK_LIMIT_SIZE value from 200000 to 500000. +2004/01/13: [impl] remove ENC_CODE_TO_MBC_FIRST(enc,code) in regenc.h. + remove code_to_mbc_first member in RegCharEncodingType. +2004/01/13: [impl] remove head byte bitset information in cclass->mbuf. +2003/12/26: [impl] change macro name ismb_xxxx() in enc/*.c for + escape conflict. + +2003/12/24: Version 2.0.0 + +2003/12/24: [spec] ignore case option is effective to numbered char. + ex. /\x61/i =~ "A" +2003/12/24: [test] success in ruby 1.8.1 (2003-12-24) [i686-linux]. +2003/12/24: [test] success in ruby 1.8.0 (2003-08-08) [i386-cygwin]. +2003/12/24: [test] success in ruby 1.8.0 (2003-08-08) [i386-mswin32]. +2003/12/24: [test] success in regex.c compile test on ruby-m17n. + (but can't make miniruby because re.c patch fail.) +2003/12/24: [bug] (thanks H.Miyamoto) /[\W]/ was wrong in 1.9.5. +2003/12/22: [spec] implement fold match on UTF-8 encoding. +2003/12/19: [impl] add ctype_support_level and ctype_add_codes() member to + RegCharEncoding type. +2003/12/19: [impl] add add_ctype_to_cc() in regparse.c. +2003/12/19: [impl] add enc_is_code_ctype() in REG_RUBY_M17N case. +2003/12/19: [impl] change ENC_CODE_TO_MBC() interface. +2003/12/18: [new] implement fold match. (variable number of char + match in ignore case mode.) + ex. German alphabet ess-tsett(U+00DF) match "SS" and "ss". +2003/12/17: [impl] refactoring of encoding system. +2003/12/17: [impl] add enc_init() in regenc.c. +2003/12/17: [new] support Big5. (REG_ENCODING_BIG5) +2003/12/16: [impl] change CodePoint from unsigned int to unsigned long. +2003/12/16: [new] support ISO 8859-15. (REG_ENCODING_ISO_8859_15) +2003/12/16: [impl] change P_() macro definition condition for Win32. +2003/12/16: [dist] add sample/encode.c +2003/12/16: [new] support ISO 8859-1. (REG_ENCODING_ISO_8859_1) +2003/12/15: [impl] rename IS_ENC_XXXX to ENC_IS_XXXX. +2003/12/15: [impl] rename RegDefaultCharEncoding to EncDefaultCharEncoding. +2003/12/15: [impl] divide encoding files. (enc/ascii.c, enc/utf8.c etc...) +2003/12/15: [bug] unexpected infinite loop in regex_snprintf_with_pattern(). + change local var. type char* to UChar*. +2003/12/15: [impl] remove REG_MBLEN_TABLE[]. +2003/12/15: [spec] rename function prefix regex_get_prev_char_head(), + regex_get_left_adjust_char_head() and + regex_get_right_adjust_char_head() to enc_xxxxxx(). +2003/12/15: [impl] rename function prefixes in regenc.h from regex_ to enc_. +2003/12/12: [impl] remove USE_SBMB_CLASS. +2003/12/12: [impl] rename mb -> mbc, mblen() to enc_len(). +2003/12/12: [impl] rename WCINT to CodePoint. +2003/12/11: [impl] delete IS_XXXX() ctype macros from regint.h. +2003/12/11: [impl] add enc->wc_is_ctype() and RegAsciiCtypeTable[256]. +2003/12/11: [impl] remove RegAsciiCaseAmbigTable. +2003/12/10: [impl] use ENC_TO_LOWER() for ignore case comparison. +2003/12/08: [impl] *** re-defined RegCharEncoding in oniguruma.h. *** +2003/12/08: [impl] add USE_POSIX_REGION_OPTION to regint.h. +2003/12/08: [impl] add IS_ENC_WORD() to regenc.h. +2003/12/05: [impl] rename IS_CODE_XXXX() to IS_ENC_XXXX(). +2003/12/05: [impl] delete IS_CODE_WORD() from regenc.h. +2003/12/04: [spec] rename REG_SYN_OP_BACK_REF to REG_SYN_OP_DECIMAL_BACKREF. +2003/12/04: [spec] add (REG_SYN_OP_ESC_W_WORD | REG_SYN_OP_ESC_B_WORD_BOUND | + REG_SYN_OP_ESC_LTGT_WORD_BEGIN_END | REG_SYN_OP_BACK_REF) + to RegSyntaxGrep. +2003/12/04: [spec] remove REG_ENCODING_DEFAULT and REGCODE_DEFAULT. +2003/12/04: [spec] move declarations of regex_get_default_encoding() and + regex_set_default_encoding() from oniguruma.h to regenc.h. +2003/12/03: [new] add regex_get_default_encoding() and + regex_set_default_encoding(). +2003/12/03: [spec] REG_ENCODING_DEFAULT meaning is changed. + (current default value, not initial default value.) +2003/12/03: [spec] REGCODE_XXX is obsoleted. use REG_ENCODING_XXX. +2003/12/02: [memo] alias svnst='svn status | grep -v "^\?"' +2003/12/02: [spec] move regex_set_default_trans_table() declaration + from oniguruma.h to regenc.h. (obsoleted API) +2003/12/02: [impl] move variables RegDefaultCharEncoding, DefaultTransTable and + AmbiguityTable to regenc.c. +2003/12/01: [impl] add regex_continuous_sbmb() to regenc.c. +2003/12/01: [dist] add regenc.h and regenc.c. +2003/11/18: [dist] change testconv.rb. +2003/11/18: [bug] (thanks Masaru Tsuda) + memory leak in parse_subexp(). +2003/11/18: [bug] (thanks Masaru Tsuda) + memory leak in names_clear() and parse_char_class(). +2003/11/17: [bug] memory leak in parse_char_class(). +2003/11/17: [bug] (thanks Masaru Tsuda) + OptExactInfo length should not over OPT_EXACT_MAXLEN. + (concat_opt_exact_info_str()) + +2003/11/12: Version 1.9.5 + +2003/11/12: [test] success in ruby 1.8.0 (2003-08-08) [i386-cygwin]. +2003/11/12: [test] success in ruby 1.8.1 (2003-11-11) [i686-linux]. +2003/11/12: [spec] add definition of REG_INEFFECTIVE_META_CHAR. +2003/11/11: [dist] add a sample program sample/sql.c. +2003/11/11: [new] add variable meta character. + regex_set_meta_char() +2003/11/11: [spec] add syntax op. REG_SYN_OP_VARIABLE_META_CHARS. +2003/11/11: [spec] rename REG_SYN_OP_ESC_CAPITAL_Q_QUOTE to + REG_SYN_OP2_ESC_CAPITAL_Q_QUOTE, + REG_SYN_OP_QMARK_GROUP_EFFECT to + REG_SYN_OP2_QMARK_GROUP_EFFECT. +2003/11/06: [impl] define THREAD_PASS as rb_thread_schedule() in Ruby mode. +2003/11/05: [spec] add syntax behavior REG_SYN_WARN_REDUNDANT_NESTED_REPEAT. +2003/11/05: [spec] rename REG_SYN_WARN_FOR_CC_OP_NOT_ESCAPED to + REG_SYN_WARN_CC_OP_NOT_ESCAPED. +2003/11/04: [new] add regex_set_warn_func() and regex_set_verb_warn_func(). +2003/10/30: [new] add regex_name_to_backref_number(). + (for multiplex definition name, see sample/names.c) +2003/10/30: [spec] add name_end and reg argument to callback function of + regex_foreach_name(). (see sample/names.c) +2003/10/29: [spec] add syntax behavior REG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME. + add error code REGERR_MULTIPLEX_DEFINED_NAME. +2003/10/14: [dist] modify sample/simple.c. +2003/10/03: [bug] (thanks nobu) [ruby-dev:21472] + sub-anchor of optimization map info was wrong + in concat_left_node_opt_info(). + ex. /^(x?y)/ = "xy" fail. + +2003/09/17: Version 1.9.4 + +2003/09/17: [spec] change specification of char-class range in ignore case mode + follows with Ruby 1.8(2003-09-17). + ex. /[H-c]/i ==> (H-Z, 0x5b-0x60, a-c)/i + ==> H-Z, h-z, 0x5b-0x60, a-c, A-C +2003/09/16: [bug] (thanks Guy Decoux) + remove env->option == option check in parse_effect(). + change env->option for dynamic option in parse_exp(). + (ex. bad match /(?i)(?-i)a/ =~ "A") +2003/09/12: [spec] rename REG_SYN_ALLOW_RANGE_OP_IN_CC to + REG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC, + REG_SYN_ESCAPE_IN_CC to REG_SYN_BACKSLASH_ESCAPE_IN_CC. +2003/09/11: [bug] change to IS_SYNTAX_OP2 at REG_SYN_OP2_ESC_GNU_BUF_ANCHOR. +2003/09/09: [spec] rename REG_SYN_OP2_ESC_M_BAR_META to + REG_SYN_OP2_ESC_CAPITAL_M_BAR_META, + REG_SYN_OP_ESC_Q_QUOTE to REG_SYN_OP_ESC_CAPITAL_Q_QUOTE, + REG_SYN_OP_ESC_SUBEXP to REG_SYN_OP_ESC_LPAREN_SUBEXP, + REG_SYN_OP_ESC_BUF_ANCHOR to REG_SYN_OP_ESC_AZ_BUF_ANCHOR, + REG_SYN_OP_ESC_GNU_BUF_ANCHOR to + REG_SYN_OP2_ESC_GNU_BUF_ANCHOR, + REG_SYN_OP_ESC_CONTROL_CHAR to REG_SYN_OP_ESC_CONTROL_CHARS, + REG_SYN_OP_ESC_WORD to REG_SYN_OP_ESC_W_WORD, + REG_SYN_OP_ESC_WORD_BEGIN_END to + REG_SYN_OP_ESC_LTGT_WORD_BEGIN_END, + REG_SYN_OP_ESC_WORD_BOUND to REG_SYN_OP_ESC_B_WORD_BOUND, + REG_SYN_OP_ESC_WHITE_SPACE to REG_SYN_OP_ESC_S_WHITE_SPACE, + REG_SYN_OP_ESC_DIGIT to REG_SYN_OP_ESC_D_DIGIT, + REG_SYN_OP_CC to REG_SYN_OP_BRACKET_CC, + REG_SYN_OP2_CCLASS_SET to REG_SYN_OP2_CCLASS_SET_OP, + REG_SYN_CONTEXT_INDEP_OPS to + REG_SYN_CONTEXT_INDEP_REPEAT_OPS, + REG_SYN_CONTEXT_INVALID_REPEAT_OPS to + REG_SYN_CONTEXT_INVALID_REPEAT_OPS. + add REG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR. +2003/09/08: [spec] rename REG_SYN_OP_ANYCHAR to REG_SYN_OP_DOT_ANYCHAR, + REG_SYN_OP_0INF to REG_SYN_OP_ASTERISK_ZERO_INF, + REG_SYN_OP_ESC_0INF to REG_SYN_OP_ESC_ASTERISK_ZERO_INF, + REG_SYN_OP_1INF to REG_SYN_OP_PLUS_ONE_INF, + REG_SYN_OP_ESC_1INF to REG_SYN_OP_ESC_PLUS_ONE_INF, + REG_SYN_OP_0INF to REG_SYN_OP_QMARK_ZERO_ONE, + REG_SYN_OP_ESC_0INF to REG_SYN_OP_ESC_QMARK_ZERO_ONE, + REG_SYN_OP_INTERVAL to REG_SYN_OP_BRACE_INTERVAL, + REG_SYN_OP_ESC_INTERVAL to REG_SYN_OP_ESC_BRACE_INTERVAL, + REG_SYN_OP_SUBEXP to REG_SYN_OP_LPAREN_SUBEXP, + REG_SYN_OP_ALT to REG_SYN_OP_VBAR_ALT, + REG_SYN_OP_ESC_ALT to REG_SYN_OP_ESC_VBAR_ALT, + REG_SYN_OP_NON_GREEDY to REG_SYN_OP_QMARK_NON_GREEDY, + REG_SYN_OP_SUBEXP_EFFECT to REG_SYN_OP_QMARK_GROUP_EFFECT, + REG_SYN_OP2_POSSESSIVE_{REPEAT,INTERVAL} to + REG_SYN_OP2_PLUS_POSSESSIVE_{REPEAT,INTERVAL}, + REG_SYN_OP2_SUBEXP_CALL to REG_SYN_OP2_ESC_G_SUBEXP_CALL, + REG_SYN_OP2_NAMED_GROUP to REG_SYN_OP2_QMARK_LT_NAMED_GROUP + and REG_SYN_OP2_ESC_K_NAMED_BACKREF. +2003/09/02: [tune] call reduce_nested_qualifier() after disabling capture for + no-name group in noname_disable_map(). + ex. /(a+)*(?<name>...)/ +2003/09/02: [impl] include <stdio.h> is forgotten to erase in regcomp.c. +2003/09/01: [dist] update doc/RE and doc/RE.ja. +2003/08/26: [bug] (thanks Guy Decoux) + should not double free node at the case TK_CC_CC_OPEN + in parse_char_class(). + +2003/08/19: Version 1.9.3 + +2003/08/19: [inst] change re.c.180.patch. +2003/08/19: [impl] rename 'list of captures' to 'capture history'. +2003/08/19: [dist] add doc/RE.ja. (Japanese) +2003/08/19: [new] add regex_copy_syntax(). +2003/08/19: [spec] rename REG_SYN_OP2_ATMARK_LIST_OF_CAPTURES to + REG_SYN_OP2_ATMARK_CAPTURE_HISTORY. +2003/08/18: [spec] (thanks nobu) + don't use IMPORT in oniguruma.h and onigposix.h. +2003/08/18: [impl] (thanks nobu) change error output to stdout in testconv.rb. +2003/08/18: [inst] (thanks nobu) lacked $(srcdir) in Makefile.in. +2003/08/18: [bug] REG_MBLEN_TABLE[SJIS][0xFD-0xFF] should be 1. +2003/08/18: [bug] (thanks nobu) mbctab_sjis[0x80] should be 0. +2003/08/18: [bug] (thanks nobu) + single/multi-byte decision was wrong in parse_char_class(). + add regex_wc2mblen(). + should not set fetched to 1 in TK_RAW_BYTE case. +2003/08/18: [bug] should update BitSet in the case inc_n >= 0 + in add_wc_range_to_buf(). +2003/08/13: [bug] change re.c.180.patch for fix rb_reg_to_s() in re.c. +2003/08/11: [bug] should clear region->list in regex_region_resize(). + +2003/08/08: Version 1.9.2 + +2003/08/08: [test] success in ruby 1.8.0 (2003-08-08) on Windows 2000 + VC++ 6.0 and Cygwin. +2003/08/08: [impl] don't define macro vsnprintf for WIN32 platform, + because definition is added in win32\win32.h. +2003/08/08: [test] success in ruby 1.8.0 and ruby 1.6.8(2003-08-03) on Linux. +2003/08/08: [dist] change re.c.180.patch and re.c.168.patch. +2003/08/08: [new] (thanks akr) + implemented list of captures. (?@...), (?@<name>...) +2003/08/07: [dist] add sample/listcap.c. +2003/08/06: [bug] OP_MEMORY_END_PUSH_REC case in match_at(). + renewal of mem_start_stk[] should be after + STACK_PUSH_MEM_END() call. +2003/07/29: [new] add regex_get_encoding(), regex_get_options() and + regex_get_syntax(). +2003/07/25: [spec] (thanks akr) + change group(...) to shy-group(?:...) if named group is + used in the pattern. + add REG_SYN_CAPTURE_ONLY_NAMED_GROUP. +2003/07/24: [spec] rename REG_OPTION_CAPTURE_ONLY_NAMED_GROUP to + REG_OPTION_DONT_CAPTURE_GROUP. + add REG_OPTION_CAPTURE_GROUP. +2003/07/17: [spec] rename REG_SYN_OP2_NAMED_SUBEXP to REG_SYN_OP2_NAMED_GROUP. +2003/07/17: [spec] add REGERR_EMPTY_GROUP_NAME. +2003/07/17: [spec] rename REGERR_INVALID_SUBEXP_NAME + to REGERR_INVALID_CHAR_IN_GROUP_NAME. +2003/07/17: [spec] restrict usable chars of group name to alphabet, digit, + '_' or multibyte-char in fetch_name(). [ruby-dev:20706] +2003/07/16: [impl] minor change of sample/names.c. +2003/07/14: [impl] rename USE_NAMED_SUBEXP to USE_NAMED_GROUP. +2003/07/14: [bug] add fetch_name() for USE_NAMED_SUBEXP off case. +2003/07/14: [API] add regex_number_of_names(). +2003/07/08: [impl] change error message for undefined group number call. + 'undefined group reference: /(a)\g<2>/' + --> 'undefined group <2> reference: /(a)\g<2>/' +2003/07/08: [dist] modify doc/RE. +2003/07/07: [impl] OP_SET_OPTION is not needed in compiled code. + add IS_DYNAMIC_OPTION() to regint.h. +2003/07/07: [spec] called group should not ignore outside option (?i:...). + ex. /(?i:(?<n>(a)\2)){0}\g<n>/.match("aA") + add opcode OP_BACKREFN_IC and OP_BACKREF_MULTI_IC. + set option status to effect memory in optimize_node_left(). +2003/07/07: [impl] add opcode OP_ANYCHAR_ML, OP_ANYCHAR_ML_STAR and + OP_ANYCHAR_ML_START_PEEK_NEXT. +2003/07/07: [bug] (thanks nobu) REG_MBLEN_TABLE[SJIS][0x80] should be 1. +2003/07/07: [spec] rename REG_SYN_OP_QUOTE to REG_SYN_OP_ESC_Q_QUOTE. + +2003/07/04: Version 1.9.1 + +2003/07/04: [new] add REG_OPTION_CAPTURE_ONLY_NAMED_GROUP. (thanks .NET) +2003/07/04: [spec] check mbuf member in the case of + REG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC in parse_char_class(). +2003/07/04: [spec] typo REG_SYN_WARN_FOR_CC_OP_NOT_ESCAPEED. + should be REG_SYN_WARN_FOR_CC_OP_NOT_ESCAPED. +2003/07/04: [bug] conflict values on REG_SYN_WARN_FOR_CC_OP_NOT_ESCAPEED and + REG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC. (thanks nobu) +2003/07/03: [spec] add REG_SYN_OP_ESC_CONTROL_CHAR flag. +2003/07/03: [spec] remove REG_SYN_OP_ESC_OCTAL3 and REG_SYN_OP_ESC_X_HEX2 + flag from RegSyntaxGnuRegex. +2003/07/03: [spec] remove REG_SYN_OP_NON_GREEDY flag from RegSyntaxGnuRegex. +2003/07/02: [dist] fix doc/RE. +2003/07/01: [impl] add config flag USE_VARIABLE_SYNTAX. + (turn off variable syntax on Ruby) +2003/07/01: [spec] add syntax behavior REG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND. +2003/06/30: [spec] allow different length top-level alternatives + in look-behind. ex. (?<=abc|abcd), (?<!a|bc) +2003/06/26: [spec] add option REG_OPTION_NEGATE_SINGLELINE. +2003/06/26: [spec] should default on REG_OPTION_SINGLELINE + for REG_SYNTAX_PERL and REG_SYNTAX_JAVA. +2003/06/26: [impl] add options member to RegStntaxType. +2003/06/26: [spec] don't change the meaning of '\Z' for REG_OPTION_SINGLELINE. +2003/06/25: [dist] don't use option REG_NEWLINE for sample/posix.c. +2003/06/25: [dist] modify testconv.rb. + should match and convert double quoted string data. + ex. x(/\ca/, "\001", 0, 1) +2003/06/25: [impl] add REG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL and + REG_SYN_OP2_ESC_M_BAR_META. +2003/06/25: [impl] add REG_SYN_OP_ESC_OCTAL3 and REG_SYN_OP_ESC_X_HEX2. +2003/06/24: [impl] add REG_SYN_OP2_ESC_V_VTAB. (\v is VTAB) +2003/06/24: [bug] should invert REG_OPTION_SINGLELINE flag + in REG_SYN_OP2_OPTION_PERL. +2003/06/24: [impl] add REG_SYN_OP2_OPTION_PERL and REG_SYN_OP2_OPTION_RUBY. + meaning of (?m) and (?s) are depend on syntax. + +2003/06/20: Version 1.9.0 + +2003/06/20: [spec] \Q...\E is not effective on REG_SYNTAX_RUBY. (thanks akr) +2003/06/19: [inst] rename regex.h to oniguruma.h. +2003/06/18: [impl] change REG_EXTERN setting condition. (__CYGWIN__) +2003/06/18: [bug] return wrong result UTF-8 case in regex_mb2wc(). +2003/06/18: [impl] add REG_SYN_OP2_POSSESSIVE_INTERVAL. a{n,m}+ +2003/06/18: [new] add REG_SYNTAX_JAVA. +2003/06/18: [spec] add REG_SYN_OP_QUOTE. +2003/06/18: [spec] add op2 member to RegSyntaxType. + rename some REG_SYN_OP_XXX to REG_SYN_OP2. +2003/06/16: [new] Perl-like quotation operator \Q, \E. +2003/06/16: [spec] should not control ignore case mode by escaped char. + ex. /\J/i =~ "j", /[\J]/i =~ "j" (same as Perl) +2003/06/13: [bug] modify onigposix.h. +2003/06/13: [bug] should use -DIMPORT for link with DLL in win32/Makefile. +2003/06/13: [dist] add sample/names.c +2003/06/12: [bug] range should be from - 1 in not_wc_range_buf(). +2003/06/12: [spec] should warn for '-' before '&&' operator in char-class. +2003/06/12: [new] add REG_SYNTAX_PERL. +2003/06/12: [spec] add syntax behavior REG_SYN_WARN_FOR_CC_OP_NOT_ESCAPEED. +2003/06/12: [spec] invalid POSIX bracket should be error. ex. [[:upper :]] +2003/06/11: [new] char-class in char-class (as Java(TM)). +2003/06/11: [spec] change AND operator in char-class from &&[..] to &&. +2003/06/04: [spec] {n,m}+ should not be possessive operator. + ex. a{3}+ should be (?:a{3})+ +2003/06/03: [bug] should compare strings with min-length in is_not_included(). +2003/06/03: [impl] automatic possessivate optimization. a*b ==> (?>a*)b + (thanks Jeffrey E. F. Friedl) +2003/06/02: [impl] remove multibyte-BitSet for OP_CCLASS_MB/OP_CCLASS_MB_NOT. +2003/05/30: [new] char class intersection operator &&[...] like Java(TM). + (thanks akr) +2003/05/30: [bug] should use bbuf_free() for CClassNode in regex_node_free(). +2003/05/29: [bug] wrong usage of syntax REG_SYN_ALLOW_EMPTY_RANGE_IN_CC. + /[d-a]/ should be error. +2003/05/28: [impl] optimize stop-backtrack compiled code. + (/(?>a*)/, /(?>\w+)/ etc...) + add OP_POP opcode. +2003/05/28: [new] possessive repeat operator. (?+, *+, ++, {n,m}+) +2003/05/27: [spec] '-' at beginning of char-class should be warn only if + it is start of range. (ex. /[--a]/) +2003/05/27: [spec] should not warn for right bracket at beginning of pattern. + ex. /]aaa/ +2003/05/27: [spec] change CCEND_ESC_WARN() from VERB_WARNING() to WARNING(). +2003/05/27: [spec] /[]aaa/ should be empty char-class error. + /[]aaa]/ should be warn for 'without backslash'. + (add char_exist_check() in regparse.c) +2003/05/26: [bug] OP_REPEAT in recursive subexp call. + ex. /(?<n>(a|b\g<n>c){3,5})/.match("baaaaca") => "baaaaca" + was wrong result. (should be "aaaa") +2003/05/26: [impl] add num_call member to regex_t. +2003/05/26: [impl] add repeat_range member to regex_t. + (for delete upper,lower members from StackType.u.repeat) +2003/05/26: [bug] change print_names() to external regex_print_names(). +2003/05/26: [tune] change OP_NULL_CHECK_END process in match_at(). +2003/05/26: [spec] change CCEND_ESC_WARN() from WARNING() to VERB_WARNING(). +2003/05/26: [spec] remove POSIXLINE option. (?p:...) + (be made the same as Ruby.) +2003/05/22: [spec] use OP_NULL_CHECK_XXX only if repeat is infinite. + prev. /(?:()|()){0,10}\1\2/ =~ "" ==> FAIL + now /(?:()|()){0,10}\1\2/ =~ "" ==> MATCH + +2003/05/22: [impl] change target_empty setting condition in setup_tree(). +2003/05/19: [impl] avoid zero length repeat optimization. (thanks matz) + /()*/ ==> /()?/, /()+/ ==> /()/ etc... +2003/05/19: [impl] minor changes for gcc -Wall. (-DREG_DEBUG_STATISTICS case) +2003/05/19: [spec] rename regex_foreach_names() to regex_foreach_name(). +2003/05/16: [new] add --with-statistics option to configure. +2003/05/16: [bug] move RegOpInfo[] definition to regint.h. +2003/05/16: [new] add regex_version(). + +2003/05/14: Version 1.8.6 + +2003/05/14: [bug] use _vsnprintf() on Win32. +2003/05/14: [spec] define USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE. + (/\n$/ =~ "\n", /\n\Z/ =~ "\n") [ruby-dev:20125] +2003/05/14: [impl] minor changes for gcc -Wall. +2003/05/14: [impl] add string.h check in AC_CHECK_HEADERS(). +2003/05/13: [impl] minor changes for gcc -Wall. +2003/05/13: [impl] add regex_snprintf_with_pattern(). +2003/05/13: [spec] add warning for char class meta character without escape + in Ruby mode ('[', '-', ']'). +2003/05/13: [impl] define WARNING() and VERB_WARNING() in regint.h. +2003/05/13: [bug] correct is_code_ascii() for /[[:ascii:]]/. +2003/05/12: [dist] add regular expression document (doc/RE). +2003/05/12: [spec] specification of $(END_LINE) was made the same as Ruby 1.8. + [ruby-dev:20130] (thanks matz) +2003/05/12: [memo] shifted to Subversion(version 0.21.0) from CVS. + +2003/03/19: Version 1.8.5 + +2003/03/19: [impl] change REG_EXTERN definition. (thanks nobu) +2003/03/19: [impl] abbreviation for long error_par in regex_error_code_to_str(). +2003/03/18: [dist] change re.c.XXX.patch for GNU regex API changes. +2003/03/18: [spec] change API regex_new(), regex_recompile() and + regex_error_code_to_str(). + change API re_compile_pattern() and re_recompile_pattern(). +2003/03/18: [spec] replace REGERR_END_PATTERN_AT_GROUP_{COMMENT|OPTION} to + REGERR_END_PATTERN_IN_GROUP. +2003/03/17: [impl] should free err_arg. +2003/03/17: [bug] mistake(high -> to) in add_wc_range_to_buf(). +2003/03/17: [spec] add err_arg argument to regex_new() and regex_recompile(). + for detail error message. (thanks akr) + +2003/03/12: Version 1.8.4 + +2003/03/12: [tune] use cached value of effect node in get_min_match_length(). +2003/03/12: [bug] escaped alphabet should be TK_RAW_BYTE + in fetch_token() and fetch_token_in_cc(). +2003/03/12: [spec] change named backref and subexp call format. + backref: \k<name>, call: \g<name> (thanks akr) +2003/03/11: [inst] add regparse.[ch] in win32/Makefile. +2003/03/11: [bug] if UNALIGNED_WORD_ACCESS isn't setted + then compile error in unset_addr_list_fix(). (thanks knu) +2003/03/10: [impl] divide regcomp.c to regcomp.c, regparse.c and regparse.h. +2003/03/10: [bug] should handle multi-byte code name in fetch_name(). +2003/03/10: [spec] remove REGERR_TABLE_FOR_IGNORE_CASE_IS_NOT_SETTED. +2003/03/10: [spec] support POSIX API option REG_NOSUB. + add comp_options member to POSIX API regex_t. + +2003/03/10: Version 1.8.3 + +2003/03/10: [bug] can not compile with Ruby 1.6.8. + (inconsistent st.h with 1.6 and 1.8) + use hash table on Ruby 1.8 only. +2003/03/10: [spec] forbid to use '\' in group name. +2003/03/08: [impl] remove check_backref_number(). +2003/03/08: [bug] called group in 0-repeat should not be eliminated from + compile code. ex. /(?*n)(?<n>){0}/ (thanks akr) + add is_refered member to QualifierNode. +2003/03/07: [impl] use hash table(st.[ch]) for implementation of name table. + (enable on Ruby in default) +2003/03/07: [new] add regex_foreach_names(). +2003/03/06: [impl] add member reg->stack_pop_level. +2003/03/06: [impl] add operator OP_MEMORY_START and member reg->backtrack_mem. +2003/03/06: [bug] if REG_OPTION_FIND_LONGEST or REG_OPTION_NOT_EMPTY, + should handle backtrack of MEM_END. + add OP_MEMORY_END_PUSH and OP_MEMORY_END_PUSH_REC. +2003/03/06: [impl] rename OP_MEMORY_END_PUSH to OP_MEMORY_END_MARK. +2003/03/06: [spec] change error messages. +2003/03/06: [tune] add tiny_pop check in STACK_POP. + +2003/03/05: Version 1.8.2 + +2003/03/05: [impl] use cache info in EFFECT_MEMORY case + in optimize_node_info(). +2003/03/05: [impl] add EFFECT_MEMORY node reference count check + in optimize_node_left(). +2003/03/05: [impl] add min-len, max-len, char-len cache in EffectNode. +2003/03/05: [spec] allow to call in look behind. ex. /(?<=(?*a))/ +2003/03/05: [bug] forgotten N_ANCHOR case in check_backref_number(), + subexp_inf_recursive_check_trav() etc... +2003/03/05: [impl] rename USE_ONIGURUMA_EXTENSION to USE_SBMB_CLASS. +2003/03/04: [impl] add CALL-node info in optimize_node_left(). +2003/03/04: [spec] prohibit left recursion of subexp call. ex. (?<n>|(?*n)a) + add subexp_inf_recursive_check_trav(). +2003/03/04: [spec] rename REG_SYN_STRICT_CHECK_BACKREF_NUMBER + to REG_SYN_STRICT_CHECK_BACKREF +2003/03/03: [bug] /(?<n>a(?*n)|)/ isn't infinite recursion. + fix N_LIST case in subexp_recursive_check(). (thanks akr) +2003/03/03: [bug] /(?<n>|(?*n))+/ segmentation fault. + should re-allocate in unset_addr_list_add(). (thanks akr) + +2003/03/01: Version 1.8.1 + +2003/03/01: [bug] change STACK_GET_MEM_START() and STACK_PUSH_MEM_END(). +2003/03/01: [new] add reg_name_to_group_numbers() to POSIX API. +2003/03/01: [impl] use OP_MEMORY_END_PUSH in callable subexp compiled code + only if subexp is recursive. +2003/03/01: [spec] rename regex_name_to_backrefs() to + regex_name_to_group_numbers(). +2003/02/28: [impl] use function stack_double() instead of macro. +2003/02/28: [new] subexp call. (?*name) (thanks akr) +2003/02/28: [spec] add match stack limit check. (MATCH_STACK_LIMIT_SIZE) +2003/02/28: [impl] check recursive subexp call. +2003/02/28: [impl] add opcode OP_MEMORY_END_PUSH for callable subexp. +2003/02/28: [impl] add opcode OP_CALL, OP_RETURN. + add stack type STK_CALL_FRAME, STK_RETURN, STK_MEM_END. +2003/02/26: [spec] add new syntax behavior REG_SYN_STRICT_CHECK_BACKREF_NUMBER. + if it is setted, then error /(\1)/, /\1(..)/ etc... +2003/02/26: [spec] if backref number is greater than max group number, + then return compile error. (REGERR_INVALID_BACKREF_NUMBER) +2003/02/26: [tune] bad implemented N_ALT case in get_min_match_length(). +2003/02/26: [dist] auto update testc.c and win32/testc.c in dist target. +2003/02/26: [impl] add -win option to testconv.rb. +2003/02/25: [spec] allow to assign same name to different group. + add OP_BACKREF_MULTI. +2003/02/24: [impl] reduce redundant repeat of empty target. + ex. /()*/ ==> /()?/, /()+/ ==> /()/, /(?:)+/ ==> // +2003/02/24: [impl] change condition in regex_is_allow_reverse_match(). +2003/02/24: [impl] convert i(/../, ...) functions in testconv.rb. +2003/02/24: [impl] change name table struct. + +2003/02/22: Version 1.8.0 + +2003/02/22: [new] named subexp, named back reference. (thanks akr) + define: (?<name>...), back-ref: \g<name> +2003/02/22: [impl] use str_node_can_be_split(). +2003/02/21: [dist] add sample/posix.c +2003/02/21: [spec] rename some error code symbols. +2003/02/21: [spec] max number of multibyte ranges(255) is small. + 255 --> 1000. (thanks MoonWolf) +2003/02/20: [new] supported Basic Regular Expression(BRE) in POSIX API. + (REG_EXTENDED option: Extended RE) +2003/02/20: [new] variable syntax. + +2003/02/12: Version 1.7.2 + +2003/02/12: [bug] mismatch /\?a/i.match('?A'). + check raw value in scan_make_node() and scan_backslash(). + (thanks Nobu) +2003/02/12: [impl] rename 'max_mem' to 'num_mem' in regex_t. +2003/02/12: [impl] rename 'code' to 'enc' in regex_t. +2003/02/12: [spec] remove transtable argument in regex_new and regex_recompile. + remove transtable member in regex_t. +2003/02/10: [inst] change backup file suffix name from '.orig' to '.ruby_orig'. + (win32/Makefile) +2003/02/10: [spec] number check in scan_char_class() ignore-case mode. + ex. /[\x58-\x64]/i +2003/02/10: [impl] don't use OP_MEMORY_END_PUSH (and STK_MEM_END). +2003/02/10: [impl] lift up head_exact value from child qualifier node to parent. +2003/02/10: [tune] change stack type values. +2003/02/10: [dist] add HISTORY. +2003/02/08: [tune] change stack type values. +2003/02/08: [tune] add STACK_BASE_CHECK(). +2003/02/08: [tune] add STACK_PUSH_ENSURED(). +2003/02/08: [dist] change contents of doc/API. +2003/02/07: [inst] change backup file suffix name from '.orig' to '.ruby_orig'. +2003/02/07: [spec] range in char-class should be same spec. with Ruby + in ignore-case mode. (ex. /[A-c]/i == /[a-c]/i) + (thanks MoonWolf) +2003/02/07: [spec] [!--] should be allowed. (thanks MoonWolf) +2003/02/07: [dist] refresh re.c.180.patch for re.c (2003-02-06). + +2003/02/07: Version 1.7.1 + +2003/02/07: [impl] check first byte of string in ignore-case mode. + (get_head_exact_node()) +2003/02/07: [impl] remove redundant statements in setup_tree(). +2003/02/06: [new] create Win32 DLL. +2003/02/06: [impl] use P_() macro for function prototype. +2003/02/06: [impl] add HAVE_PROTOTYPE, HAVE_STDARG_PROTOTYPES in + configure.in and config.h.in. +2003/02/06: [spec] /[0-9-a]/ is allowed as usual char '-' and 'a' in Ruby. + add USE_BETTER_COMPATIBILITY_FOR_ORIGINAL_REGEX in + regint.h. (thanks MoonWolf) +2003/02/06: [spec] rename REG_MBCTYPE_XXXX to REG_ENCODING_XXXX in onigposix.h. +2003/02/05: [spec] rename MBCTYPE_XXXX to REG_MBCTYPE_XXXX in onigposix.h. +2003/02/05: [spec] add POSIX API error REG_EONIG_THREAD to onigposix.h. +2003/02/05: [dist] add .cvsignore file. + +2003/02/04: Version 1.7 + +2003/02/04: [bug] typo miss in regex_region_copy(). +2003/02/04: [impl] change THREAD_PASS macro. (regint.h) +2003/02/04: [dist] add API document file doc/API. +2003/02/04: [tune] if sub_anchor has ANCHOR_BEGIN_LINE then + set REG_OPTIMIZE_EXACT_BM in set_optimize_exact_info(). +2003/02/04: [spec] reimplement regex_clone() and it is obsoleted. +2003/02/04: [bug] add REGERR_OVER_THREAD_PASS_LIMIT_COUNT + to regerror.c regposix.c. +2003/02/03: [bug] Hankaku-Kana may be second byte in Shift_JIS + regex_is_allow_reverse_match(). +2003/02/03: [impl] add optimization type REG_OPTIMIZE_EXACT_BM_NOT_REV. + remove exact_allow_reverse_match member in regex_t. +2003/02/03: [impl] add exact_allow_reverse_match member in regex_t. +2003/02/03: [impl] compile-search conflict in regex_search() is handled. +2003/02/01: [tune] decrease regex_region_clear() calling from regex_search(). +2003/02/01: [tune] remove region argument from match_at(). +2003/01/31: [tune] don't use strlen() in regexec() and regcomp(). +2003/01/31: [tune] decrease regex_reduce_chain() calling in regex_search(). +2003/01/31: [bug] STRING_CMP() in regexec.c was wrong in ignore-case. +2003/01/31: [impl] convert to lower-case char at string compile time. + change SBTRANSCMP() in regexec.c. +2003/01/31: [impl] rename TTRANS() to TOLOWER(). +2003/01/30: [bug] .c.o --> .c.obj in win32\Makefile. +2003/01/30: [impl] add -DNOT_RUBY to Makefile.in. + NOT_RUBY is refered in regint.h for escape double + including config.h. +2003/01/30: [impl] when string hasn't case ambiguity, don't compile + to ignore case opcode. +2003/01/29: [impl] add SJIS, UTF-8 test_sb() test. +2003/01/29: [dist] add INSTALL-RUBY file. +2003/01/28: [test] success in Cygwin, Ruby 1.8.0 (2003-01-27). +2003/01/24: [inst] add rback target to Makefile.in. +2003/01/24: [impl] change SBCMP() -> IS_NEWLINE() in match_at(). +2003/01/23: [impl] add encoding arg to scan_xxxx_number(). +2003/01/23: [impl] rename WCInt to WCINT. +2003/01/22: [bug] POSIX API regexec() was not thread safe. + remove region member from POSIX regex_t. + [new] add search time option REG_OPTION_POSIX_REGION. + (region argument is treated as regmatch_t[] type) + speed up regexec(). +2003/01/22: [memo] start CVS entry in my box. + +2003/01/21: Version 1.6 + +2003/01/21: [test] Mac OS X 10.1, Ruby 1.8.0 (2003-01-20) +2003/01/20: [impl] add UTF-8 check to test.rb. (thanks UENO Katsuhiro) +2003/01/18: [impl] change REGION_NOTPOS to REG_REGION_NOTPOS in regex.h. +2003/01/17: [dist] add sample/simple.c. +2003/01/17: [inst] add configure option --with-rubydir. +2003/01/17: [bug] bad implemeted POSIX API options. + default: /./ not match "\n", anchor not match "\n" + REG_NEWLINE: /./ not match "\n", anchor match "\n" +2003/01/16: [impl] rewrite POSIX API regexec() for speed up. +2003/01/16: [impl] add region member to POSIX regex_t struct. +2003/01/16: [inst] rename library file from 'libregex.a' to 'libonig.a'. +2003/01/15: [dist] add testc.c to distribution file. +2003/01/15: [test] success in 'make rtest/ctest/ptest' on Windows 2000. +2003/01/15: [bug] change '/' to \' in win32/Makefile. +2003/01/14: [test] success in Ruby make test on Windows 2000. + VC++6.0, Ruby 1.6.8 (2003-01-12) +2003/01/14: [inst] change Makefile.in and win32/Makefile. +2003/01/11: [inst] changes for Win32 platform. (regint.h, reggnu.c, regcomp.c) +2003/01/11: [dist] add win32 directory. (config.h, Makefile, testc.c) +2003/01/10: [inst] add onigposix.h to install target. (Makefile.in) +2003/01/10: [bug] lacked a comma in ESTRING[]. (regposerr.c) +2003/01/10: [bug] local variable name was wrong. buf -> tbuf (regerror()) +2003/01/10: [spec] remove REG_RUBY_M17N case from onigposix.h and regposix.c. + +2003/01/09: Version 1.5 + +2003/01/09: [inst] replace Ruby re.c.XXX.patch files. (166 -> 168, 172 -> 180) +2003/01/09: [new] implement POSIX API. (thanks knu) + (onigposix.h, regposix.c, regposerr.c) +2003/01/08: [spec] remove REGERR_END_PATTERN_AFTER_BACKSLASH in regex.h. +2003/01/08: [spec] region arg can be NULL in regex_search() and regex_match(). + +2003/01/08: Version 1.4 + +2003/01/08: [inst] add test program converter (test.rb -> testc.c). +2003/01/08: [bug] move GET_WCINT() from regcomp.c to regint.h. +2003/01/07: [inst] add new test script (test.rb). +2002/12/30: [bug] wrong merge in multibyte mode (alt_merge_opt_exact_info()). +2002/12/28: [inst] add rtest target to Makefile.in. +2002/12/28: [bug] /\xfe/.match("\xfe") mismatch in multibyte mode. + add "raw" flag arg to concat_opt_exact_info_str(). +2002/12/25: [bug] check condition was wrong in alt_merge_opt_map_info(). +2002/12/25: [impl] add threshold_len check in regex_search(). +2002/12/23: [bug] prec-read in alternative (/a|(?=z).f/.match("zf") => nil) +2002/12/23: [bug] \G in alternative (/a|\Gz/.match("bza") => "z"). + add start member in MatchArg. (regexec.c) +2002/12/21: [impl] **** rewrite all optimization process. **** +2002/12/16: [impl] remove node subtype EFFECT_EMPTY. +2002/12/12: [impl] reconstruct node types. (regcomp.c) +2002/12/11: [impl] add regerror.c +2002/12/10: [bug] [ruby-dev:19042] (thanks Nobu) + anchor(\G etc...) influenced outside of "|". (/a|\Gb/) +2002/11/30: [bug] [ruby-dev:18966] (thanks Nobu) + char-class(\S, [^\s] etc...) optimize map-info was wrong. +2002/11/29: [bug] infinite loop on NULL-pointer str search (regex_search()). + (thanks matz) +2002/11/29: [bug] change static -> extern (regex_chain_reduce()). +2002/11/29: [bug] change encoding to RegDefaultCharEncoding + in re_recompile_pattern(). (adapt to re.c) +2002/04/24: [spec] USE_ONIGURUMA_EXTENSION is disabled in default. +2002/04/24: [new] add searching time option: REG_OPTION_NOTBOL/NOTEOL. + add searching time option argument to regex_search() and + regex_match(). (prepare for POSIX API) +2002/04/20: [impl] divide regex.c file into regcomp.c, regexec.c, reggnu.c + and regint.h. +2002/04/09: [impl] move IS_MULTILINE() to outside of loop in OP_ANYCHAR_STAR. +2002/04/08: [impl] don't use OP_REPEAT operator for '??'. +2002/04/06: [impl] reduce redundant nested repeat operators(?,*,+,??,*?,+?). + ex. (?:a*)?, (?:a??)* etc.. +2002/04/06: [spec] should not warn for /(?:a?)+?/. +2002/04/04: [spec] should allow fixed length alternative and repeat pattern + in look-behind. ex. /(?<=(a|b){3})/ (thanks Guy Decoux) +2002/04/02: [spec] should warn for /(?:a+)?/ and /(?:a*)??/. (thanks akr) + +2002/04/01: Version 1.3 + +2002/04/01: [dist] add COPYING. +2002/03/30: [spec] warn redundant nested repeat operator + in Ruby verbose mode. ex. (?:a*)? +2002/03/30: [spec] nested repeat operator error check should be + same with GNU regex. (thanks Guy Decoux) +2002/03/30: [new] add \x{hexadecimal-wide-char}. (thanks matz) +2002/03/27: [bug] MBCTYPE_XXX symbol values should be same with GNU regex. +2002/03/27: [impl] add THREAD_ATOMIC to regex_clone(), regex_init(), regex_end(). +2002/03/25: [spec] if encoding is utf-8, allow combination of singlebyte and + multibyte code range in char class. + (cancelled 2002/04/01: for M17N compatibility) +2002/03/25: [dist] description of the license condition is added to README. +2002/03/23: [bug] should set all bits of reg->mem_stats, + if REG_OPTION_FIND_LONGEST or REG_OPTION_NOT_EMPTY. +2002/03/23: [new] add a new option REG_OPTION_NOT_EMPTY. +2002/03/20: [spec] allow incompleted left brace as an usual char. + ex. /{/, /({)/, /a{2,3/ etc... +2002/03/20: [impl] serialize integer in bytecode. + (switch by UNALIGNED_WORD_ACCESS in regex.c) +2002/03/20: [impl] change re_mbcinit() for REG_RUBY_M17N. +2002/03/19: [impl] word alignment of char class multi-byte code ranges. +2002/03/19: [impl] replace OP_EXACTMB4N with OP_EXACTMB3N. +2002/03/19: [bug] OP_CCLASS_MB_NOT process in matchAt() is wrong. +2002/03/19: [new] add re_mbctab[] for Ruby extension library compatibility. +2002/03/19: [spec] allow nested repeat operator, if operator is {n,m} type. +2002/03/19: [new] add REG_IS_PATTERN_ERROR(ecode) in regex.h +2002/03/18: [spec] /[a-b-c]/ should be error. +2002/03/18: [bug] /[\w-a]/ should be error. (thanks Guy Decoux) +2002/03/18: [bug] /[\]/ should be error. (thanks Guy Decoux) +2002/03/18: [bug] /()*/ etc.. should not be error. (thanks Guy Decoux) +2002/03/18: [spec] /a{1}*/ should not be error. (thanks Guy Decoux) +2002/03/18: [bug] ab{2}{3} was interpreded to (?:a(?:b{2})){3} + (thanks Guy Decoux) +2002/03/18: [bug] abort /(?i)*a/ etc... (thanks Guy Decoux) +2002/03/18: [bug] abort /a|*/,/a|{1}/ etc... (thanks Guy Decoux) + +2002/03/13: Version 1.2 + +2002/03/13: [test] success in rubicon/builtin/AllBuiltinTests.rb. + (thanks rubicon) +2002/03/13: [bug] OP_EXACTMBN process in matchAt() is wrong. +2002/03/13: [bug] start argument of BackwardSearchRange() is wrong. +2002/03/12: [spec] change function name style from CamelCase + to underline_separation. (includes API) +2002/03/12: [bug] if pattern has nested null-check, cause infinite loop. + correct STACK_NULL_CHECK() macro. (thanks Guy Decoux) +2002/03/11: [bug] it is wrong that four numbers to continue as + an octal value in scanBackSlash(). ex. /\0111/ + (thanks matz) +2002/03/11: [new] \k (single-byte word char), \K (multi-byte char). +2002/03/09: [inst] add two targets to Makefile.in (166 and 172). +2002/03/09: [spec] decrease REG_MAX_BACKREF_NUM, REG_MAX_REPEAT_NUM + values. +2002/03/08: [spec] allow use of "\A"(begin-buf) in look-behind. +2002/03/08: [impl] add a new opcode OP_PUSH_IF_PEEK_NEXT. +2002/03/08: [impl] add a new opcode OP_ANYCHAR_STAR_PEEK_NEXT. +2002/03/07: [spec] prohibit use of capture group "(...)" + in negative look-behind. +2002/03/07: [inst] add configure.in, config.h.in, Makefile.in. +2002/03/07: [impl] call Init_REGEX_STAT() in RegexInit(). +2002/03/07: [spec] less length string match with negative look-behind. + ex. /(?<!XXX)a/.match("Xa"). (thanks Nobu) +2002/03/06: [impl] expand repeated string, if expanded length <= 100. + ex. /(?:abc){10}/ +2002/03/06: [new] add a symbol REG_TRANSTABLE_USE_DEFAULT in regex.h. +2002/03/06: [impl] rename RegDefaultCharCode to RegDefaultCharEncoding. +2002/03/06: [bug] if pattern has NULL(\000) char, infinite loop happens + in ScanMakeNode(). (beware of strchr(). thanks Nobu) +2002/03/06: [bug] range argument of ForwardSearchRange() is wrong. + ex. /\A.a/, /\G.a/ mismatched with "aa". (thanks Nobu) +2002/03/05: [new] add RegexMatch() API. rename regexMatch() to matchAt(). +2002/03/05: [impl] change function definition style. +2002/03/05: [impl] abolish use of macro symbol which name begin with underline. +2002/03/04: [bug] make up a break-statement in compileTree(). + (compile error on Mac OS X 10.1.3) + +2002/03/04: Version 1.1 + +2002/03/04: [impl] replace STK_BOTTOM with STK_ALT. +2002/03/02: [impl] add new opcode OP_FINISH and new stack type + STK_BOTTOM for (little bit) speed up STACK_POP. +2002/03/02: [impl] add new opcode OP_EXACT1_IC, OP_EXACTN_IC + for compile time ignore case check. + remove opcode OP_EXACT1_RAW, OP_EXACTN_RAW. +2002/03/02: [impl] add OpTime info to statistical data. +2002/02/28: [bug] sub_anchor($) in ForwardSearch() and BackwardSearch(). + ex. /$\x0az/.match("\nz") +2002/02/28: [new] look-behind (?<=pattern), (?<!pattern). +2002/02/27: [bug] use StackIndex instead of StackType* for realloc problem. +2002/02/27: [impl] use m17n_codepoint() as mb2wc() in REG_RUBY_M17N. +2002/02/27: [spec] undefined POSIX bracket /[[:xyz:]]/ should be syntax error. +2002/02/26: [bug] ex. /$*/, /[a-]/, /((?i)a)b/ (thanks matz) + +2002/02/25: Version 1.0 (first release) + +-- +[bug: bug fix] +[API: API change/new/delete] +[new: new feature] +[spec: specification change] +[impl: implementation change] +[tune: tune for speed up] +[inst: changes for installation] +[dist: distribution change] +[test: test] +[memo: memo] +-- +<CVS: show all tags> +cvs history -T + +<CVS: add tag> +cvs rtag "VERSION_X_X_X" oniguruma + + +<GNU Autotools: bootstrap> +* write Makefile.am and configure.in. +> aclocal +> libtoolize +> automake --foreign --add-missing +> autoconf +> configure --with-rubydir=... CFLAGS="-O2 -Wall" + + +<GNU libtool: version management> + + VERSION = current:revision:age + + current: interface number (from 0) + revision: implementation number of same interface (from 0) + age: number of supported previous interfaces + (if current only supported then age == 0) + +//END diff --git a/ext/mbstring/oniguruma/README b/ext/mbstring/oniguruma/README new file mode 100644 index 0000000..dff7fba --- /dev/null +++ b/ext/mbstring/oniguruma/README @@ -0,0 +1,189 @@ +README 2007/06/18 + +Oniguruma ---- (C) K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + +http://www.geocities.jp/kosako3/oniguruma/ +http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/oniguruma/ + +Oniguruma is a regular expressions library. +The characteristics of this library is that different character encoding +for every regular expression object can be specified. + +Supported character encodings: + + ASCII, UTF-8, UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE, + EUC-JP, EUC-TW, EUC-KR, EUC-CN, + Shift_JIS, Big5, GB 18030, KOI8-R, KOI8, + ISO-8859-1, ISO-8859-2, ISO-8859-3, ISO-8859-4, ISO-8859-5, + ISO-8859-6, ISO-8859-7, ISO-8859-8, ISO-8859-9, ISO-8859-10, + ISO-8859-11, ISO-8859-13, ISO-8859-14, ISO-8859-15, ISO-8859-16 + +* GB 18030: contributed by KUBO Takehiro +* KOI8 is not included in library archive by default setup. + (need to edit Makefile if you want to use it.) +------------------------------------------------------------ + +Install + + Case 1: Unix and Cygwin platform + + 1. ./configure + 2. make + 3. make install + + * uninstall + + make uninstall + + * test (ASCII/EUC-JP) + + make atest + + * configuration check + + onig-config --cflags + onig-config --libs + onig-config --prefix + onig-config --exec-prefix + + + + Case 2: Win32 platform (VC++) + + 1. copy win32\Makefile Makefile + 2. copy win32\config.h config.h + 3. nmake + + onig_s.lib: static link library + onig.dll: dynamic link library + + * test (ASCII/Shift_JIS) + 4. copy win32\testc.c testc.c + 5. nmake ctest + + + +License + + When this software is partly used or it is distributed with Ruby, + this of Ruby follows the license of Ruby. + It follows the BSD license in the case of the one except for it. + + + +Regular Expressions + + See doc/RE (or doc/RE.ja for Japanese). + + +Usage + + Include oniguruma.h in your program. (Oniguruma API) + See doc/API for Oniguruma API. + + If you want to disable UChar type (== unsigned char) definition + in oniguruma.h, define ONIG_ESCAPE_UCHAR_COLLISION and then + include oniguruma.h. + + If you want to disable regex_t type definition in oniguruma.h, + define ONIG_ESCAPE_REGEX_T_COLLISION and then include oniguruma.h. + + Example of the compiling/linking command line in Unix or Cygwin, + (prefix == /usr/local case) + + cc sample.c -L/usr/local/lib -lonig + + + If you want to use static link library(onig_s.lib) in Win32, + add option -DONIG_EXTERN=extern to C compiler. + + + +Sample Programs + + sample/simple.c example of the minimum (Oniguruma API) + sample/names.c example of the named group callback. + sample/encode.c example of some encodings. + sample/listcap.c example of the capture history. + sample/posix.c POSIX API sample. + sample/sql.c example of the variable meta characters. + (SQL-like pattern matching) + sample/syntax.c Perl, Java and ASIS syntax test. + + +Source Files + + oniguruma.h Oniguruma API header file. (public) + onig-config.in configuration check program template. + + regenc.h character encodings framework header file. + regint.h internal definitions + regparse.h internal definitions for regparse.c and regcomp.c + regcomp.c compiling and optimization functions + regenc.c character encodings framework. + regerror.c error message function + regext.c extended API functions. (deluxe version API) + regexec.c search and match functions + regparse.c parsing functions. + regsyntax.c pattern syntax functions and built-in syntax definitions. + regtrav.c capture history tree data traverse functions. + regversion.c version info function. + st.h hash table functions header file + st.c hash table functions + + oniggnu.h GNU regex API header file. (public) + reggnu.c GNU regex API functions + + onigposix.h POSIX API header file. (public) + regposerr.c POSIX error message function. + regposix.c POSIX API functions. + + enc/mktable.c character type table generator. + enc/ascii.c ASCII encoding. + enc/euc_jp.c EUC-JP encoding. + enc/euc_tw.c EUC-TW encoding. + enc/euc_kr.c EUC-KR, EUC-CN encoding. + enc/sjis.c Shift_JIS encoding. + enc/big5.c Big5 encoding. + enc/gb18030.c GB 18030 encoding (contributed by KUBO Takehiro) + enc/koi8.c KOI8 encoding. + enc/koi8_r.c KOI8-R encoding. + enc/iso8859_1.c ISO-8859-1 encoding. (Latin-1) + enc/iso8859_2.c ISO-8859-2 encoding. (Latin-2) + enc/iso8859_3.c ISO-8859-3 encoding. (Latin-3) + enc/iso8859_4.c ISO-8859-4 encoding. (Latin-4) + enc/iso8859_5.c ISO-8859-5 encoding. (Cyrillic) + enc/iso8859_6.c ISO-8859-6 encoding. (Arabic) + enc/iso8859_7.c ISO-8859-7 encoding. (Greek) + enc/iso8859_8.c ISO-8859-8 encoding. (Hebrew) + enc/iso8859_9.c ISO-8859-9 encoding. (Latin-5 or Turkish) + enc/iso8859_10.c ISO-8859-10 encoding. (Latin-6 or Nordic) + enc/iso8859_11.c ISO-8859-11 encoding. (Thai) + enc/iso8859_13.c ISO-8859-13 encoding. (Latin-7 or Baltic Rim) + enc/iso8859_14.c ISO-8859-14 encoding. (Latin-8 or Celtic) + enc/iso8859_15.c ISO-8859-15 encoding. (Latin-9 or West European with Euro) + enc/iso8859_16.c ISO-8859-16 encoding. + (Latin-10 or South-Eastern European with Euro) + enc/utf8.c UTF-8 encoding. + enc/utf16_be.c UTF-16BE encoding. + enc/utf16_le.c UTF-16LE encoding. + enc/utf32_be.c UTF-32BE encoding. + enc/utf32_le.c UTF-32LE encoding. + enc/unicode.c Unicode information data. + + win32/Makefile Makefile for Win32 (VC++) + win32/config.h config.h for Win32 + + + +API differences with Japanized GNU regex(version 0.12) of Ruby 1.8/1.6 + + + re_compile_fastmap() is removed. + + re_alloc_pattern() is added. + + + +I'm thankful to Akinori MUSHA. + + +Mail Address: K.Kosako <sndgk393 AT ybb DOT ne DOT jp> diff --git a/ext/mbstring/oniguruma/README.ja b/ext/mbstring/oniguruma/README.ja new file mode 100644 index 0000000..2dee793 --- /dev/null +++ b/ext/mbstring/oniguruma/README.ja @@ -0,0 +1,192 @@ +README.ja 2007/06/18 + +µ´¼Ö ---- (C) K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + +http://www.geocities.jp/kosako3/oniguruma/ +http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/oniguruma/ + +µ´¼Ö¤ÏÀµµ¬É½¸½¥é¥¤¥Ö¥é¥ê¤Ç¤¢¤ë¡£ +¤³¤Î¥é¥¤¥Ö¥é¥ê¤ÎÆÃĹ¤Ï¡¢¤½¤ì¤¾¤ì¤ÎÀµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È¤´¤È¤Ë +ʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ò»ØÄê¤Ç¤¤ë¤³¤È¤Ç¤¢¤ë¡£ + +¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤ëʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°: + + ASCII, UTF-8, UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE, + EUC-JP, EUC-TW, EUC-KR, EUC-CN, + Shift_JIS, Big5, GB 18030, KOI8-R, KOI8, + ISO-8859-1, ISO-8859-2, ISO-8859-3, ISO-8859-4, ISO-8859-5, + ISO-8859-6, ISO-8859-7, ISO-8859-8, ISO-8859-9, ISO-8859-10, + ISO-8859-11, ISO-8859-13, ISO-8859-14, ISO-8859-15, ISO-8859-16 + +* GB 18030: µ×ÊÝ·òÍλáÄó¶¡ +* KOI8¤Ï¥Ç¥Õ¥©¥ë¥È¤Î¥»¥Ã¥È¥¢¥Ã¥×¤Ç¤Ï¥é¥¤¥Ö¥é¥ê¤ÎÃæ¤Ë´Þ¤Þ¤ì¤Ê¤¤¡£ + (ɬÍפǤ¢¤ì¤ÐMakefile¤òÊÔ½¸¤¹¤ë¤³¤È) +------------------------------------------------------------ + +¥¤¥ó¥¹¥È¡¼¥ë + + ¥±¡¼¥¹£±: Unix¤ÈCygwin´Ä¶ + + 1. ./configure + 2. make + 3. make install + + ¥¢¥ó¥¤¥ó¥¹¥È¡¼¥ë + + make uninstall + + ưºî¥Æ¥¹¥È (ASCII/EUC-JP) + + make atest + + + ¹½À®³Îǧ + + onig-config --cflags + onig-config --libs + onig-config --prefix + onig-config --exec-prefix + + + + ¥±¡¼¥¹£²: Win32(VC++)´Ä¶ + + 1. copy win32\Makefile Makefile + 2. copy win32\config.h config.h + 3. nmake + + onig_s.lib: static link library + onig.dll: dynamic link library + + * ưºî¥Æ¥¹¥È (ASCII/Shift_JIS) + 4. copy win32\testc.c testc.c + 5. nmake ctest + + +¥é¥¤¥»¥ó¥¹ + + ¤³¤Î¥½¥Õ¥È¥¦¥§¥¢¤¬Ruby¤È°ì½ï¤Ë»ÈÍѤޤ¿¤ÏÇÛÉÛ¤µ¤ì¤ë¾ì¹ç¤Ë¤Ï¡¢ + Ruby¤Î¥é¥¤¥»¥ó¥¹¤Ë½¾¤¦¡£ + ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ë¤Ï¡¢BSD¥é¥¤¥»¥ó¥¹¤Ë½¾¤¦¡£ + + +Àµµ¬É½¸½ + + doc/RE.ja¤ò»²¾È + + +»ÈÍÑÊýË¡ + + »ÈÍѤ¹¤ë¥×¥í¥°¥é¥à¤Ç¡¢oniguruma.h¤ò¥¤¥ó¥¯¥ë¡¼¥É¤¹¤ë(Oniguruma API¤Î¾ì¹ç)¡£ + Oniguruma API¤Ë¤Ä¤¤¤Æ¤Ï¡¢doc/API.ja¤ò»²¾È¡£ + + oniguruma.h¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë·¿Ì¾UChar(== unsigned char)¤ò̵¸ú¤Ë¤·¤¿¤¤¾ì¹ç + ¤Ë¤Ï¡¢ONIG_ESCAPE_UCHAR_COLLISION¤òdefine¤·¤Æ¤«¤éoniguruma.h¤ò¥¤¥ó¥¯¥ë¡¼¥É + ¤¹¤ë¤³¤È¡£¤³¤Î¤È¤¤Ë¤ÏUChar¤ÏÄêµÁ¤µ¤ì¤º¡¢OnigUChar¤È¤¤¤¦Ì¾Á°¤ÎÄêµÁ¤Î¤ß¤¬ + ͸ú¤Ë¤Ê¤ë¡£ + + oniguruma.h¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë·¿Ì¾regex_t¤ò̵¸ú¤Ë¤·¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢ + ONIG_ESCAPE_REGEX_T_COLLISION¤òdefine¤·¤Æ¤«¤éoniguruma.h¤ò¥¤¥ó¥¯¥ë¡¼¥É + ¤¹¤ë¤³¤È¡£¤³¤Î¤È¤¤Ë¤Ïregex_t¤ÏÄêµÁ¤µ¤ì¤º¡¢OnigRegexType, OnigRegex¤È¤¤¤¦ + ̾Á°¤ÎÄêµÁ¤Î¤ß¤¬Í¸ú¤Ë¤Ê¤ë¡£ + + Unix/Cygwin¾å¤Ç¥³¥ó¥Ñ¥¤¥ë¡¢¥ê¥ó¥¯¤¹¤ë¾ì¹ç¤ÎÎã¡§ + (prefix¤¬/usr/local¤Î¤È¤) + cc sample.c -L/usr/local/lib -lonig + + GNU libtool¤ò»ÈÍѤ·¤Æ¤¤¤ë¤Î¤Ç¡¢¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤¬¶¦Í¥é¥¤¥Ö¥é¥ê¤ò¥µ¥Ý¡¼¥È¤·¤Æ + ¤¤¤ì¤Ð¡¢»ÈÍѤǤ¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡£ + ÀÅۥ饤¥Ö¥é¥ê¤È¶¦Í¥é¥¤¥Ö¥é¥ê¤Î¤É¤Á¤é¤ò»ÈÍѤ¹¤ë¤«¤ò»ØÄꤹ¤ëÊýË¡¡¢¼Â¹Ô»þÅÀ¤Ç¤Î + ´Ä¶ÀßÄêÊýË¡¤Ë¤Ä¤Æ¤Ï¡¢¼«Ê¬¤ÇÄ´¤Ù¤Æ²¼¤µ¤¤¡£ + + + Win32¤Ç¥¹¥¿¥Æ¥£¥Ã¥¯¥ê¥ó¥¯¥é¥¤¥Ö¥é¥ê(onig_s.lib)¤ò¥ê¥ó¥¯¤¹¤ë¾ì¹ç¤Ë¤Ï¡¢ + ¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤È¤¤Ë -DONIG_EXTERN=extern ¤ò¥³¥ó¥Ñ¥¤¥ë°ú¿ô¤ËÄɲ乤뤳¤È¡£ + + +»ÈÍÑÎã¥×¥í¥°¥é¥à + + sample/simple.c ºÇ¾®Îã (Oniguruma API) + sample/names.c ̾Á°ÉÕ¤¥°¥ë¡¼¥×¥³¡¼¥ë¥Ð¥Ã¥¯»ÈÍÑÎã + sample/encode.c ´ö¤Ä¤«¤Îʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°»ÈÍÑÎã + sample/listcap.c Êá³ÍÍúÎòµ¡Ç½¤Î»ÈÍÑÎã + sample/posix.c POSIX API»ÈÍÑÎã + sample/sql.c ²ÄÊѥ᥿ʸ»úµ¡Ç½»ÈÍÑÎã (SQL-like ¥Ñ¥¿¡¼¥ó) + sample/syntax.c Perl¡¢Java¡¢ASISʸˡ¤Î¥Æ¥¹¥È + + +¥½¡¼¥¹¥Õ¥¡¥¤¥ë + + oniguruma.h µ´¼ÖAPI¥Ø¥Ã¥À (¸ø³«) + onig-config.in onig-config¥×¥í¥°¥é¥à ¥Æ¥ó¥×¥ì¡¼¥È + + regenc.h ʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°ÏÈÁȤߥإåÀ + regint.h ÆâÉôÀë¸À + regparse.h regparse.c¤Èregcomp.c¤Î¤¿¤á¤ÎÆâÉôÀë¸À + regcomp.c ¥³¥ó¥Ñ¥¤¥ë¡¢ºÇŬ²½´Ø¿ô + regenc.c ʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°ÏÈÁÈ¤ß + regerror.c ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸´Ø¿ô + regext.c ³ÈÄ¥API´Ø¿ô + regexec.c ¸¡º÷¡¢¾È¹ç´Ø¿ô + regparse.c Àµµ¬É½¸½¥Ñ¥¿¡¼¥ó²òÀÏ´Ø¿ô + regsyntax.c Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸˡ´Ø¿ô¡¢Áȹþ¤ßʸˡÄêµÁ + regtrav.c Êá³ÍÍúÎòÌÚ½ä²ó´Ø¿ô + regversion.c ÈǾðÊó´Ø¿ô + st.h ¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë´Ø¿ôÀë¸À + st.c ¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë´Ø¿ô + + oniggnu.h GNU regex API¥Ø¥Ã¥À (¸ø³«) + reggnu.c GNU regex API´Ø¿ô + + onigposix.h POSIX API¥Ø¥Ã¥À (¸ø³«) + regposerr.c POSIX API¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸´Ø¿ô + regposix.c POSIX API´Ø¿ô + + enc/mktable.c ʸ»ú¥¿¥¤¥×¥Æ¡¼¥Ö¥ëÀ¸À®¥×¥í¥°¥é¥à + enc/ascii.c ASCII ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + enc/euc_jp.c EUC-JP ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + enc/euc_tw.c EUC-TW ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + enc/euc_kr.c EUC-KR, EUC-CN ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + enc/sjis.c Shift_JIS ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + enc/big5.c Big5 ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + enc/gb18030.c GB 18030 ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° (µ×ÊÝ·òÍλá Äó¶¡) + enc/koi8.c KOI8 ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + enc/koi8_r.c KOI8-R ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + enc/iso8859_1.c ISO-8859-1 (Latin-1) + enc/iso8859_2.c ISO-8859-2 (Latin-2) + enc/iso8859_3.c ISO-8859-3 (Latin-3) + enc/iso8859_4.c ISO-8859-4 (Latin-4) + enc/iso8859_5.c ISO-8859-5 (Cyrillic) + enc/iso8859_6.c ISO-8859-6 (Arabic) + enc/iso8859_7.c ISO-8859-7 (Greek) + enc/iso8859_8.c ISO-8859-8 (Hebrew) + enc/iso8859_9.c ISO-8859-9 (Latin-5 ¤Þ¤¿¤Ï Turkish) + enc/iso8859_10.c ISO-8859-10 (Latin-6 ¤Þ¤¿¤Ï Nordic) + enc/iso8859_11.c ISO-8859-11 (Thai) + enc/iso8859_13.c ISO-8859-13 (Latin-7 ¤Þ¤¿¤Ï Baltic Rim) + enc/iso8859_14.c ISO-8859-14 (Latin-8 ¤Þ¤¿¤Ï Celtic) + enc/iso8859_15.c ISO-8859-15 (Latin-9 ¤Þ¤¿¤Ï West European with Euro) + enc/iso8859_16.c ISO-8859-16 + (Latin-10 ¤Þ¤¿¤Ï South-Eastern European with Euro) + enc/utf8.c UTF-8 ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + enc/utf16_be.c UTF-16BE ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + enc/utf16_le.c UTF-16LE ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + enc/utf32_be.c UTF-32BE ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + enc/utf32_le.c UTF-32LE ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + enc/unicode.c Unicode¾ðÊó + + win32/Makefile Win32ÍÑ Makefile (for VC++) + win32/config.h Win32ÍÑ config.h + + + +Ruby 1.8/1.6¤ÎÆüËܸ첽GNU regex¤È¤ÎAPI¤Î°ã¤¤ + + + re_compile_fastmap() ¤Ïºï½ü¤µ¤ì¤¿¡£ + + re_alloc_pattern() ¤¬Äɲ䵤줿¡£ + + +I'm thankful to Akinori MUSHA. + + +¥¢¥É¥ì¥¹: K.Kosako <sndgk393 AT ybb DOT ne DOT jp> diff --git a/ext/mbstring/oniguruma/config.h.in b/ext/mbstring/oniguruma/config.h.in new file mode 100644 index 0000000..4a2fc28 --- /dev/null +++ b/ext/mbstring/oniguruma/config.h.in @@ -0,0 +1,108 @@ +/* config.h.in. Generated from configure.in by autoheader. */ + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if using `alloca.c'. */ +#undef C_ALLOCA + +/* Define to 1 if you have `alloca', as a function or macro. */ +#undef HAVE_ALLOCA + +/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix). + */ +#undef HAVE_ALLOCA_H + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define if compilerr supports prototypes */ +#undef HAVE_PROTOTYPES + +/* Define if compiler supports stdarg prototypes */ +#undef HAVE_STDARG_PROTOTYPES + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the <sys/times.h> header file. */ +#undef HAVE_SYS_TIMES_H + +/* Define to 1 if you have the <sys/time.h> header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* The size of a `int', as computed by sizeof. */ +#undef SIZEOF_INT + +/* The size of a `long', as computed by sizeof. */ +#undef SIZEOF_LONG + +/* The size of a `short', as computed by sizeof. */ +#undef SIZEOF_SHORT + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +#undef STACK_DIRECTION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ +#undef TIME_WITH_SYS_TIME + +/* Define if combination explosion check */ +#undef USE_COMBINATION_EXPLOSION_CHECK + +/* Version number of package */ +#undef VERSION + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const diff --git a/ext/mbstring/oniguruma/doc/API b/ext/mbstring/oniguruma/doc/API new file mode 100644 index 0000000..2f66287 --- /dev/null +++ b/ext/mbstring/oniguruma/doc/API @@ -0,0 +1,585 @@ +Oniguruma API Version 4.7.1 2007/07/04 + +#include <oniguruma.h> + + +# int onig_init(void) + + Initialize library. + + You don't have to call it explicitly, because it is called in onig_new(). + + +# int onig_error_code_to_str(UChar* err_buf, int err_code, ...) + + Get error message string. + If this function is used for onig_new(), + don't call this after the pattern argument of onig_new() is freed. + + normal return: error message string length + + arguments + 1 err_buf: error message string buffer. + (required size: ONIG_MAX_ERROR_MESSAGE_LEN) + 2 err_code: error code returned by other API functions. + 3 err_info (optional): error info returned by onig_new(). + + +# void onig_set_warn_func(OnigWarnFunc func) + + Set warning function. + + WARNING: + '[', '-', ']' in character class without escape. + ']' in pattern without escape. + + arguments + 1 func: function pointer. void (*func)(char* warning_message) + + +# void onig_set_verb_warn_func(OnigWarnFunc func) + + Set verbose warning function. + + WARNING: + redundant nested repeat operator. + + arguments + 1 func: function pointer. void (*func)(char* warning_message) + + +# int onig_new(regex_t** reg, const UChar* pattern, const UChar* pattern_end, + OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, + OnigErrorInfo* err_info) + + Create a regex object. + + normal return: ONIG_NORMAL + + arguments + 1 reg: return regex object's address. + 2 pattern: regex pattern string. + 3 pattern_end: terminate address of pattern. (pattern + pattern length) + 4 option: compile time options. + + ONIG_OPTION_NONE no option + ONIG_OPTION_SINGLELINE '^' -> '\A', '$' -> '\Z' + ONIG_OPTION_MULTILINE '.' match with newline + ONIG_OPTION_IGNORECASE ambiguity match on + ONIG_OPTION_EXTEND extended pattern form + ONIG_OPTION_FIND_LONGEST find longest match + ONIG_OPTION_FIND_NOT_EMPTY ignore empty match + ONIG_OPTION_NEGATE_SINGLELINE + clear ONIG_OPTION_SINGLELINE which is enabled on + ONIG_SYNTAX_POSIX_BASIC, ONIG_SYNTAX_POSIX_EXTENDED, + ONIG_SYNTAX_PERL, ONIG_SYNTAX_PERL_NG, ONIG_SYNTAX_JAVA + + ONIG_OPTION_DONT_CAPTURE_GROUP only named group captured. + ONIG_OPTION_CAPTURE_GROUP named and no-named group captured. + + 5 enc: character encoding. + + ONIG_ENCODING_ASCII ASCII + ONIG_ENCODING_ISO_8859_1 ISO 8859-1 + ONIG_ENCODING_ISO_8859_2 ISO 8859-2 + ONIG_ENCODING_ISO_8859_3 ISO 8859-3 + ONIG_ENCODING_ISO_8859_4 ISO 8859-4 + ONIG_ENCODING_ISO_8859_5 ISO 8859-5 + ONIG_ENCODING_ISO_8859_6 ISO 8859-6 + ONIG_ENCODING_ISO_8859_7 ISO 8859-7 + ONIG_ENCODING_ISO_8859_8 ISO 8859-8 + ONIG_ENCODING_ISO_8859_9 ISO 8859-9 + ONIG_ENCODING_ISO_8859_10 ISO 8859-10 + ONIG_ENCODING_ISO_8859_11 ISO 8859-11 + ONIG_ENCODING_ISO_8859_13 ISO 8859-13 + ONIG_ENCODING_ISO_8859_14 ISO 8859-14 + ONIG_ENCODING_ISO_8859_15 ISO 8859-15 + ONIG_ENCODING_ISO_8859_16 ISO 8859-16 + ONIG_ENCODING_UTF8 UTF-8 + ONIG_ENCODING_UTF16_BE UTF-16BE + ONIG_ENCODING_UTF16_LE UTF-16LE + ONIG_ENCODING_UTF32_BE UTF-32BE + ONIG_ENCODING_UTF32_LE UTF-32LE + ONIG_ENCODING_EUC_JP EUC-JP + ONIG_ENCODING_EUC_TW EUC-TW + ONIG_ENCODING_EUC_KR EUC-KR + ONIG_ENCODING_EUC_CN EUC-CN + ONIG_ENCODING_SJIS Shift_JIS + ONIG_ENCODING_KOI8 KOI8 + ONIG_ENCODING_KOI8_R KOI8-R + ONIG_ENCODING_BIG5 Big5 + ONIG_ENCODING_GB18030 GB 18030 + + or any OnigEncodingType data address defined by user. + + 6 syntax: address of pattern syntax definition. + + ONIG_SYNTAX_ASIS plain text + ONIG_SYNTAX_POSIX_BASIC POSIX Basic RE + ONIG_SYNTAX_POSIX_EXTENDED POSIX Extended RE + ONIG_SYNTAX_EMACS Emacs + ONIG_SYNTAX_GREP grep + ONIG_SYNTAX_GNU_REGEX GNU regex + ONIG_SYNTAX_JAVA Java (Sun java.util.regex) + ONIG_SYNTAX_PERL Perl + ONIG_SYNTAX_PERL_NG Perl + named group + ONIG_SYNTAX_RUBY Ruby + ONIG_SYNTAX_DEFAULT default (== Ruby) + onig_set_default_syntax() + + or any OnigSyntaxType data address defined by user. + + 7 err_info: address for return optional error info. + Use this value as 3rd argument of onig_error_code_to_str(). + + + +# int onig_new_deluxe(regex_t** reg, const UChar* pattern, const UChar* pattern_end, + OnigCompileInfo* ci, OnigErrorInfo* einfo) + + Create a regex object. + This function is deluxe version of onig_new(). + + normal return: ONIG_NORMAL + + arguments + 1 reg: return address of regex object. + 2 pattern: regex pattern string. + 3 pattern_end: terminate address of pattern. (pattern + pattern length) + 4 ci: compile time info. + + ci->num_of_elements: number of elements in ci. (current version: 5) + ci->pattern_enc: pattern string character encoding. + ci->target_enc: target string character encoding. + ci->syntax: address of pattern syntax definition. + ci->option: compile time option. + ci->ambig_flag: character matching ambiguity bit flag for + ONIG_OPTION_IGNORECASE mode. + + ONIGENC_AMBIGUOUS_MATCH_NONE: exact + ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE: ignore case for ASCII + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE: ignore case for non-ASCII + ONIGENC_AMBIGUOUS_MATCH_FULL: all ambiguity on + ONIGENC_AMBIGUOUS_MATCH_DEFAULT: (ASCII | NONASCII) + onig_set_default_ambig_flag() + + 5 err_info: address for return optional error info. + Use this value as 3rd argument of onig_error_code_to_str(). + + + Different character encoding combination is allowed for + the following cases only. + + pattern_enc: ASCII, ISO_8859_1 + target_enc: UTF16_BE, UTF16_LE, UTF32_BE, UTF32_LE + + pattern_enc: UTF16_BE/LE + target_enc: UTF16_LE/BE + + pattern_enc: UTF32_BE/LE + target_enc: UTF32_LE/BE + + +# void onig_free(regex_t* reg) + + Free memory used by regex object. + + arguments + 1 reg: regex object. + + +# int onig_search(regex_t* reg, const UChar* str, const UChar* end, const UChar* start, + const UChar* range, OnigRegion* region, OnigOptionType option) + + Search string and return search result and matching region. + + normal return: match position offset (i.e. p - str >= 0) + not found: ONIG_MISMATCH (< 0) + + arguments + 1 reg: regex object + 2 str: target string + 3 end: terminate address of target string + 4 start: search start address of target string + 5 range: search terminate address of target string + in forward search (start <= searched string head < range) + in backward search (range <= searched string head <= start) + 6 region: address for return group match range info (NULL is allowed) + 7 option: search time option + + ONIG_OPTION_NOTBOL string head(str) isn't considered as begin of line + ONIG_OPTION_NOTEOL string end (end) isn't considered as end of line + ONIG_OPTION_POSIX_REGION region argument is regmatch_t[] of POSIX API. + + +# int onig_match(regex_t* reg, const UChar* str, const UChar* end, const UChar* at, + OnigRegion* region, OnigOptionType option) + + Match string and return result and matching region. + + normal return: match length (>= 0) + not match: ONIG_MISMATCH ( < 0) + + arguments + 1 reg: regex object + 2 str: target string + 3 end: terminate address of target string + 4 at: match address of target string + 5 region: address for return group match range info (NULL is allowed) + 6 option: search time option + + ONIG_OPTION_NOTBOL string head(str) isn't considered as begin of line + ONIG_OPTION_NOTEOL string end (end) isn't considered as end of line + ONIG_OPTION_POSIX_REGION region argument is regmatch_t[] type of POSIX API. + + +# OnigRegion* onig_region_new(void) + + Create a region. + + +# void onig_region_free(OnigRegion* region, int free_self) + + Free memory used by region. + + arguments + 1 region: target region + 2 free_self: [1: free all, 0: free memory used in region but not self] + + +# void onig_region_copy(OnigRegion* to, OnigRegion* from) + + Copy contents of region. + + arguments + 1 to: target region + 2 from: source region + + +# void onig_region_clear(OnigRegion* region) + + Clear contents of region. + + arguments + 1 region: target region + + +# int onig_region_resize(OnigRegion* region, int n) + + Resize group range area of region. + + normal return: ONIG_NORMAL + + arguments + 1 region: target region + 2 n: new size + + +# int onig_name_to_group_numbers(regex_t* reg, const UChar* name, const UChar* name_end, + int** num_list) + + Return the group number list of the name. + Named subexp is defined by (?<name>....). + + normal return: number of groups for the name. + (ex. /(?<x>..)(?<x>..)/ ==> 2) + name not found: -1 + + arguments + 1 reg: regex object. + 2 name: group name. + 3 name_end: terminate address of group name. + 4 num_list: return list of group number. + + +# int onig_name_to_backref_number(regex_t* reg, const UChar* name, const UChar* name_end, + OnigRegion *region) + + Return the group number corresponding to the named backref (\k<name>). + If two or more regions for the groups of the name are effective, + the greatest number in it is obtained. + + normal return: group number. + + arguments + 1 reg: regex object. + 2 name: group name. + 3 name_end: terminate address of group name. + 4 region: search/match result region. + + +# int onig_foreach_name(regex_t* reg, + int (*func)(const UChar*, const UChar*, int,int*,regex_t*,void*), + void* arg) + + Iterate function call for all names. + + normal return: 0 + error: func's return value. + + arguments + 1 reg: regex object. + 2 func: callback function. + func(name, name_end, <number of groups>, <group number's list>, + reg, arg); + if func does not return 0, then iteration is stopped. + 3 arg: argument for func. + + +# int onig_number_of_names(regex_t* reg) + + Return the number of names defined in the pattern. + Multiple definitions of one name is counted as one. + + arguments + 1 reg: regex object. + + +# OnigEncoding onig_get_encoding(regex_t* reg) +# OnigOptionType onig_get_options(regex_t* reg) +# OnigAmbigType onig_get_ambig_flag(regex_t* reg) +# OnigSyntaxType* onig_get_syntax(regex_t* reg) + + Return a value of the regex object. + + arguments + 1 reg: regex object. + + +# int onig_number_of_captures(regex_t* reg) + + Return the number of capture group in the pattern. + + arguments + 1 reg: regex object. + + +# int onig_number_of_capture_histories(regex_t* reg) + + Return the number of capture history defined in the pattern. + + You can't use capture history if ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY + is disabled in the pattern syntax.(disabled in the default syntax) + + arguments + 1 reg: regex object. + + + +# OnigCaptureTreeNode* onig_get_capture_tree(OnigRegion* region) + + Return the root node of capture history data tree. + + This value is undefined if matching has faild. + + arguments + 1 region: matching result. + + +# int onig_capture_tree_traverse(OnigRegion* region, int at, + int(*func)(int,int,int,int,int,void*), void* arg) + + Traverse and callback in capture history data tree. + + normal return: 0 + error: callback func's return value. + + arguments + 1 region: match region data. + 2 at: callback position. + + ONIG_TRAVERSE_CALLBACK_AT_FIRST: callback first, then traverse childs. + ONIG_TRAVERSE_CALLBACK_AT_LAST: traverse childs first, then callback. + ONIG_TRAVERSE_CALLBACK_AT_BOTH: callback first, then traverse childs, + and at last callback again. + + 3 func: callback function. + if func does not return 0, then traverse is stopped. + + int func(int group, int beg, int end, int level, int at, + void* arg) + + group: group number + beg: capture start position + end: capture end position + level: nest level (from 0) + at: callback position + ONIG_TRAVERSE_CALLBACK_AT_FIRST + ONIG_TRAVERSE_CALLBACK_AT_LAST + arg: optional callback argument + + 4 arg; optional callback argument. + + +# int onig_noname_group_capture_is_active(regex_t* reg) + + Return noname group capture activity. + + active: 1 + inactive: 0 + + arguments + 1 reg: regex object. + + if option ONIG_OPTION_DONT_CAPTURE_GROUP == ON + --> inactive + + if the regex pattern have named group + and syntax ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP == ON + and option ONIG_OPTION_CAPTURE_GROUP == OFF + --> inactive + + else --> active + + +# UChar* onigenc_get_prev_char_head(OnigEncoding enc, const UChar* start, const UChar* s) + + Return previous character head address. + + arguments + 1 enc: character encoding + 2 start: string address + 3 s: target address of string + + +# UChar* onigenc_get_left_adjust_char_head(OnigEncoding enc, + const UChar* start, const UChar* s) + + Return left-adjusted head address of a character. + + arguments + 1 enc: character encoding + 2 start: string address + 3 s: target address of string + + +# UChar* onigenc_get_right_adjust_char_head(OnigEncoding enc, + const UChar* start, const UChar* s) + + Return right-adjusted head address of a character. + + arguments + 1 enc: character encoding + 2 start: string address + 3 s: target address of string + + +# int onigenc_strlen(OnigEncoding enc, const UChar* s, const UChar* end) +# int onigenc_strlen_null(OnigEncoding enc, const UChar* s) + + Return number of characters in the string. + + +# int onigenc_str_bytelen_null(OnigEncoding enc, const UChar* s) + + Return number of bytes in the string. + + +# int onig_set_default_syntax(OnigSyntaxType* syntax) + + Set default syntax. + + arguments + 1 syntax: address of pattern syntax definition. + + +# void onig_copy_syntax(OnigSyntaxType* to, OnigSyntaxType* from) + + Copy syntax. + + arguments + 1 to: destination address. + 2 from: source address. + + +# unsigned int onig_get_syntax_op(OnigSyntaxType* syntax) +# unsigned int onig_get_syntax_op2(OnigSyntaxType* syntax) +# unsigned int onig_get_syntax_behavior(OnigSyntaxType* syntax) +# OnigOptionType onig_get_syntax_options(OnigSyntaxType* syntax) + +# void onig_set_syntax_op(OnigSyntaxType* syntax, unsigned int op) +# void onig_set_syntax_op2(OnigSyntaxType* syntax, unsigned int op2) +# void onig_set_syntax_behavior(OnigSyntaxType* syntax, unsigned int behavior) +# void onig_set_syntax_options(OnigSyntaxType* syntax, OnigOptionType options) + + Get/Set elements of the syntax. + + arguments + 1 syntax: syntax + 2 op, op2, behavior, options: value of element. + + +# void onig_copy_encoding(OnigEncoding to, OnigOnigEncoding from) + + Copy encoding. + + arguments + 1 to: destination address. + 2 from: source address. + + +# int onig_set_meta_char(OnigEncoding enc, unsigned int what, + OnigCodePoint code) + + Set a variable meta character to the code point value. + Except for an escape character, this meta characters specification + is not work, if ONIG_SYN_OP_VARIABLE_META_CHARACTERS is not effective + by the syntax. (Build-in syntaxes are not effective.) + + normal return: ONIG_NORMAL + + arguments + 1 enc: target encoding + 2 what: specifies which meta character it is. + + ONIG_META_CHAR_ESCAPE + ONIG_META_CHAR_ANYCHAR + ONIG_META_CHAR_ANYTIME + ONIG_META_CHAR_ZERO_OR_ONE_TIME + ONIG_META_CHAR_ONE_OR_MORE_TIME + ONIG_META_CHAR_ANYCHAR_ANYTIME + + 3 code: meta character or ONIG_INEFFECTIVE_META_CHAR. + + +# OnigAmbigType onig_get_default_ambig_flag() + + Get default ambig flag. + + +# int onig_set_default_ambig_flag(OnigAmbigType ambig_flag) + + Set default ambig flag. + + 1 ambig_flag: ambiguity flag + + +# unsigned int onig_get_match_stack_limit_size(void) + + Return the maximum number of stack size. + (default: 0 == unlimited) + + +# int onig_set_match_stack_limit_size(unsigned int size) + + Set the maximum number of stack size. + (size = 0: unlimited) + + normal return: ONIG_NORMAL + + +# int onig_end(void) + + The use of this library is finished. + + normal return: ONIG_NORMAL + + It is not allowed to use regex objects which created + before onig_end() call. + + +# const char* onig_version(void) + + Return version string. (ex. "2.2.8") + +// END diff --git a/ext/mbstring/oniguruma/doc/API.ja b/ext/mbstring/oniguruma/doc/API.ja new file mode 100644 index 0000000..f2a8bd6 --- /dev/null +++ b/ext/mbstring/oniguruma/doc/API.ja @@ -0,0 +1,592 @@ +µ´¼Ö¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹ Version 4.7.1 2007/07/04 + +#include <oniguruma.h> + + +# int onig_init(void) + + ¥é¥¤¥Ö¥é¥ê¤Î½é´ü²½ + + onig_new()¤ÎÃæ¤Ç¸Æ¤Ó½Ð¤µ¤ì¤ë¤Î¤Ç¡¢¤³¤Î´Ø¿ô¤òÌÀ¼¨Åª¤Ë¸Æ¤Ó½Ð¤µ¤Ê¤¯¤Æ¤â¤è¤¤¡£ + + +# int onig_error_code_to_str(UChar* err_buf, int err_code, ...) + + ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤ò¼èÆÀ¤¹¤ë¡£ + + ¤³¤Î´Ø¿ô¤ò¡¢onig_new()¤Î·ë²Ì¤ËÂФ·¤Æ¸Æ¤Ó½Ð¤¹¾ì¹ç¤Ë¤Ï¡¢onig_new()¤Îpattern°ú¿ô¤ò + ¥á¥â¥ê²òÊü¤¹¤ë¤è¤ê¤âÁ°¤Ë¸Æ¤Ó½Ð¤µ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ + + Àµ¾ï½ªÎ»Ìá¤êÃÍ: ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸Ê¸»úÎó¤Î¥Ð¥¤¥ÈĹ + + °ú¿ô + 1 err_buf: ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤ò³ÊǼ¤¹¤ëÎΰè + (ɬÍפʥµ¥¤¥º: ONIG_MAX_ERROR_MESSAGE_LEN) + 2 err_code: ¥¨¥é¡¼¥³¡¼¥É + 3 err_info (optional): onig_new()¤Îerr_info + + +# void onig_set_warn_func(OnigWarnFunc func) + + ·Ù¹ðÄÌÃδؿô¤ò¥»¥Ã¥È¤¹¤ë¡£ + + ·Ù¹ð: + '[', '-', ']' in character class without escape. + ']' in pattern without escape. + + °ú¿ô + 1 func: ·Ù¹ð´Ø¿ô void (*func)(char* warning_message) + + +# void onig_set_verb_warn_func(OnigWarnFunc func) + + ¾ÜºÙ·Ù¹ðÄÌÃδؿô¤ò¥»¥Ã¥È¤¹¤ë¡£ + + ¾ÜºÙ·Ù¹ð: + redundant nested repeat operator. + + °ú¿ô + 1 func: ¾ÜºÙ·Ù¹ð´Ø¿ô void (*func)(char* warning_message) + + +# int onig_new(regex_t** reg, const UChar* pattern, const UChar* pattern_end, + OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, + OnigErrorInfo* err_info) + + Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È(regex)¤òºîÀ®¤¹¤ë¡£ + + Àµ¾ï½ªÎ»Ìá¤êÃÍ: ONIG_NORMAL + + °ú¿ô + 1 reg: ºîÀ®¤µ¤ì¤¿Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤¹¥¢¥É¥ì¥¹ + 2 pattern: Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸ»úÎó + 3 pattern_end: Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸ»úÎó¤Î½ªÃ¼¥¢¥É¥ì¥¹(pattern + pattern length) + 4 option: Àµµ¬É½¸½¥³¥ó¥Ñ¥¤¥ë»þ¥ª¥×¥·¥ç¥ó + + ONIG_OPTION_NONE ¥ª¥×¥·¥ç¥ó¤Ê¤· + ONIG_OPTION_SINGLELINE '^' -> '\A', '$' -> '\Z' + ONIG_OPTION_MULTILINE '.'¤¬²þ¹Ô¤Ë¥Þ¥Ã¥Á¤¹¤ë + ONIG_OPTION_IGNORECASE Û£Ëæ¥Þ¥Ã¥Á ¥ª¥ó + ONIG_OPTION_EXTEND ¥Ñ¥¿¡¼¥ó³ÈÄ¥·Á¼° + ONIG_OPTION_FIND_LONGEST ºÇĹ¥Þ¥Ã¥Á + ONIG_OPTION_FIND_NOT_EMPTY ¶õ¥Þ¥Ã¥Á¤ò̵»ë + ONIG_OPTION_NEGATE_SINGLELINE + ONIG_SYNTAX_POSIX_BASIC, ONIG_SYNTAX_POSIX_EXTENDED, + ONIG_SYNTAX_PERL, ONIG_SYNTAX_PERL_NG, ONIG_SYNTAX_JAVA¤Ç + ¥Ç¥Õ¥©¥ë¥È¤Ç͸ú¤ÊONIG_OPTION_SINGLELINE¤ò¥¯¥ê¥¢¤¹¤ë¡£ + + ONIG_OPTION_DONT_CAPTURE_GROUP ̾Á°ÉÕ¤Êá³Í¼°½¸¹ç¤Î¤ßÊá³Í + ONIG_OPTION_CAPTURE_GROUP ̾Á°Ìµ¤·Êá³Í¼°½¸¹ç¤âÊá³Í + + 5 enc: ʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + + ONIG_ENCODING_ASCII ASCII + ONIG_ENCODING_ISO_8859_1 ISO 8859-1 + ONIG_ENCODING_ISO_8859_2 ISO 8859-2 + ONIG_ENCODING_ISO_8859_3 ISO 8859-3 + ONIG_ENCODING_ISO_8859_4 ISO 8859-4 + ONIG_ENCODING_ISO_8859_5 ISO 8859-5 + ONIG_ENCODING_ISO_8859_6 ISO 8859-6 + ONIG_ENCODING_ISO_8859_7 ISO 8859-7 + ONIG_ENCODING_ISO_8859_8 ISO 8859-8 + ONIG_ENCODING_ISO_8859_9 ISO 8859-9 + ONIG_ENCODING_ISO_8859_10 ISO 8859-10 + ONIG_ENCODING_ISO_8859_11 ISO 8859-11 + ONIG_ENCODING_ISO_8859_13 ISO 8859-13 + ONIG_ENCODING_ISO_8859_14 ISO 8859-14 + ONIG_ENCODING_ISO_8859_15 ISO 8859-15 + ONIG_ENCODING_ISO_8859_16 ISO 8859-16 + ONIG_ENCODING_UTF8 UTF-8 + ONIG_ENCODING_UTF16_BE UTF-16BE + ONIG_ENCODING_UTF16_LE UTF-16LE + ONIG_ENCODING_UTF32_BE UTF-32BE + ONIG_ENCODING_UTF32_LE UTF-32LE + ONIG_ENCODING_EUC_JP EUC-JP + ONIG_ENCODING_EUC_TW EUC-TW + ONIG_ENCODING_EUC_KR EUC-KR + ONIG_ENCODING_EUC_CN EUC-CN + ONIG_ENCODING_SJIS Shift_JIS + ONIG_ENCODING_KOI8 KOI8 + ONIG_ENCODING_KOI8_R KOI8-R + ONIG_ENCODING_BIG5 Big5 + ONIG_ENCODING_GB18030 GB 18030 + + ¤Þ¤¿¤Ï¡¢¥æ¡¼¥¶¤¬ÄêµÁ¤·¤¿OnigEncodingType¥Ç¡¼¥¿¤Î¥¢¥É¥ì¥¹ + + 6 syntax: Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸˡÄêµÁ + + ONIG_SYNTAX_ASIS plain text + ONIG_SYNTAX_POSIX_BASIC POSIX Basic RE + ONIG_SYNTAX_POSIX_EXTENDED POSIX Extended RE + ONIG_SYNTAX_EMACS Emacs + ONIG_SYNTAX_GREP grep + ONIG_SYNTAX_GNU_REGEX GNU regex + ONIG_SYNTAX_JAVA Java (Sun java.util.regex) + ONIG_SYNTAX_PERL Perl + ONIG_SYNTAX_PERL_NG Perl + ̾Á°ÉÕ¤Êá³Í¼°½¸¹ç + ONIG_SYNTAX_RUBY Ruby + ONIG_SYNTAX_DEFAULT default (== Ruby) + onig_set_default_syntax() + + ¤Þ¤¿¤Ï¡¢¥æ¡¼¥¶¤¬ÄêµÁ¤·¤¿OnigSyntaxType¥Ç¡¼¥¿¤Î¥¢¥É¥ì¥¹ + + 7 err_info: ¥¨¥é¡¼¾ðÊó¤òÊÖ¤¹¤¿¤á¤Î¥¢¥É¥ì¥¹ + onig_error_code_to_str()¤Î»°ÈÖÌܤΰú¿ô¤È¤·¤Æ»ÈÍѤ¹¤ë + + +# int onig_new_deluxe(regex_t** reg, const UChar* pattern, const UChar* pattern_end, + OnigCompileInfo* ci, OnigErrorInfo* einfo) + + Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È(regex)¤òºîÀ®¤¹¤ë¡£ + ¤³¤Î´Ø¿ô¤Ï¡¢onig_new()¤Î¥Ç¥é¥Ã¥¯¥¹ÈÇ¡£ + + Àµ¾ï½ªÎ»Ìá¤êÃÍ: ONIG_NORMAL + + °ú¿ô + 1 reg: ºîÀ®¤µ¤ì¤¿Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤¹¥¢¥É¥ì¥¹ + 2 pattern: Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸ»úÎó + 3 pattern_end: Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸ»úÎó¤Î½ªÃ¼¥¢¥É¥ì¥¹(pattern + pattern length) + 4 ci: ¥³¥ó¥Ñ¥¤¥ë¾ðÊó + + ci->num_of_elements: ci¤ÎÍ×ÁÇ¿ô (¸½ºß¤ÎÈǤǤÏ: 5) + ci->pattern_enc: ¥Ñ¥¿¡¼¥óʸ»úÎó¤Îʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + ci->target_enc: ÂоÝʸ»úÎó¤Îʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + ci->syntax: Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸˡÄêµÁ + ci->option: Àµµ¬É½¸½¥³¥ó¥Ñ¥¤¥ë»þ¥ª¥×¥·¥ç¥ó + ci->ambig_flag: ONIG_OPTION_IGNORECASE¥â¡¼¥É¤Ç¤Î + ʸ»úÛ£Ëæ¥Þ¥Ã¥Á»ØÄê¥Ó¥Ã¥È¥Õ¥é¥° + + ONIGENC_AMBIGUOUS_MATCH_NONE: Û£ËæÌµ¤· + ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE: ASCII¤ÎÂçʸ»ú¾®Ê¸»ú + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE: ASCII°Ê³°¤ÎÂçʸ»ú¾®Ê¸»ú + ONIGENC_AMBIGUOUS_MATCH_FULL: Á´¤Æ¤ÎÛ£Ëæ¥Õ¥é¥°Í¸ú + ONIGENC_AMBIGUOUS_MATCH_DEFAULT: (ASCII | NONASCII) + onig_set_default_ambig_flag() + + 5 err_info: ¥¨¥é¡¼¾ðÊó¤òÊÖ¤¹¤¿¤á¤Î¥¢¥É¥ì¥¹ + onig_error_code_to_str()¤Î»°ÈÖÌܤΰú¿ô¤È¤·¤Æ»ÈÍѤ¹¤ë + + + °Û¤Ê¤ëʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ÎÁȤ߹ç¤ï¤»¤Ï¡¢°Ê²¼¤Î¾ì¹ç¤Ë¤Î¤ßµö¤µ¤ì¤ë¡£ + + pattern_enc: ASCII, ISO_8859_1 + target_enc: UTF16_BE, UTF16_LE, UTF32_BE, UTF32_LE + + pattern_enc: UTF16_BE/LE + target_enc: UTF16_LE/BE + + pattern_enc: UTF32_BE/LE + target_enc: UTF32_LE/BE + + +# void onig_free(regex_t* reg) + + Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È¤Î¥á¥â¥ê¤ò²òÊü¤¹¤ë¡£ + + °ú¿ô + 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È + + + +# int onig_search(regex_t* reg, const UChar* str, const UChar* end, const UChar* start, + const UChar* range, OnigRegion* region, OnigOptionType option) + + Àµµ¬É½¸½¤Çʸ»úÎó¤ò¸¡º÷¤·¡¢¸¡º÷·ë²Ì¤È¥Þ¥Ã¥ÁÎΰè¤òÊÖ¤¹¡£ + + Àµ¾ï½ªÎ»Ìá¤êÃÍ: ¥Þ¥Ã¥Á°ÌÃÖ (p - str >= 0) + ¸¡º÷¼ºÇÔ: ONIG_MISMATCH (< 0) + + °ú¿ô + 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È + 2 str: ¸¡º÷ÂоÝʸ»úÎó + 3 end: ¸¡º÷ÂоÝʸ»úÎó¤Î½ªÃ¼¥¢¥É¥ì¥¹ + 4 start: ¸¡º÷ÂоÝʸ»úÎó¤Î¸¡º÷ÀèÆ¬°ÌÃÖ³«»Ï¥¢¥É¥ì¥¹ + 5 range: ¸¡º÷ÂоÝʸ»úÎó¤Î¸¡º÷ÀèÆ¬°ÌÃÖ½ªÃ¼¥¢¥É¥ì¥¹ + Á°Êýõº÷ (start <= õº÷¤µ¤ì¤ëʸ»úÎó¤ÎÀèÆ¬ < range) + ¸åÊýõº÷ (range <= õº÷¤µ¤ì¤ëʸ»úÎó¤ÎÀèÆ¬ <= start) + 6 region: ¥Þ¥Ã¥ÁÎΰè¾ðÊó(region) (NULL¤âµö¤µ¤ì¤ë) + 7 option: ¸¡º÷»þ¥ª¥×¥·¥ç¥ó + + ONIG_OPTION_NOTBOL ʸ»úÎó¤ÎÀèÆ¬(str)¤ò¹ÔƬ¤È´ÇÐö¤µ¤Ê¤¤ + ONIG_OPTION_NOTEOL ʸ»úÎó¤Î½ªÃ¼(end)¤ò¹ÔËö¤È´ÇÐö¤µ¤Ê¤¤ + ONIG_OPTION_POSIX_REGION region°ú¿ô¤òPOSIX API¤Îregmatch_t[]¤Ë¤¹¤ë + + +# int onig_match(regex_t* reg, const UChar* str, const UChar* end, const UChar* at, + OnigRegion* region, OnigOptionType option) + + ʸ»úÎó¤Î»ØÄê°ÌÃ֤ǥޥåÁ¥ó¥°¤ò¹Ô¤¤¡¢·ë²Ì¤È¥Þ¥Ã¥ÁÎΰè¤òÊÖ¤¹¡£ + + Àµ¾ï½ªÎ»Ìá¤êÃÍ: ¥Þ¥Ã¥Á¤·¤¿¥Ð¥¤¥ÈĹ (>= 0) + not match: ONIG_MISMATCH ( < 0) + + °ú¿ô + 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È + 2 str: ¸¡º÷ÂоÝʸ»úÎó + 3 end: ¸¡º÷ÂоÝʸ»úÎó¤Î½ªÃ¼¥¢¥É¥ì¥¹ + 4 at: ¸¡º÷ÂоÝʸ»úÎó¤Î¸¡º÷¥¢¥É¥ì¥¹ + 5 region: ¥Þ¥Ã¥ÁÎΰè¾ðÊó(region) (NULL¤âµö¤µ¤ì¤ë) + 6 option: ¸¡º÷»þ¥ª¥×¥·¥ç¥ó + + ONIG_OPTION_NOTBOL ʸ»úÎó¤ÎÀèÆ¬(str)¤ò¹ÔƬ¤È´ÇÐö¤µ¤Ê¤¤ + ONIG_OPTION_NOTEOL ʸ»úÎó¤Î½ªÃ¼(end)¤ò¹ÔËö¤È´ÇÐö¤µ¤Ê¤¤ + ONIG_OPTION_POSIX_REGION region°ú¿ô¤òPOSIX API¤Îregmatch_t[]¤Ë¤¹¤ë + + +# OnigRegion* onig_region_new(void) + + ¥Þ¥Ã¥ÁÎΰè¾ðÊó(region)¤òºîÀ®¤¹¤ë¡£ + + +# void onig_region_free(OnigRegion* region, int free_self) + + ¥Þ¥Ã¥ÁÎΰè¾ðÊó(region)¤Ç»ÈÍѤµ¤ì¤Æ¤¤¤ë¥á¥â¥ê¤ò²òÊü¤¹¤ë¡£ + + °ú¿ô + 1 region: ¥Þ¥Ã¥ÁÎΰè¾ðÊ󥪥֥¸¥§¥¯¥È + 2 free_self: [1: region¼«¿È¤ò´Þ¤á¤ÆÁ´¤Æ²òÊü, 0: region¼«¿È¤Ï²òÊü¤·¤Ê¤¤] + + +# void onig_region_copy(OnigRegion* to, OnigRegion* from) + + ¥Þ¥Ã¥ÁÎΰè¾ðÊó(region)¤òÊ£À½¤¹¤ë¡£ + + °ú¿ô + 1 to: ÂоÝÎΰè + 2 from: ¸µÎΰè + + +# void onig_region_clear(OnigRegion* region) + + ¥Þ¥Ã¥ÁÎΰè¾ðÊó(region)¤ÎÃæÌ£¤ò¥¯¥ê¥¢¤¹¤ë¡£ + + °ú¿ô + 1 region: ÂоÝÎΰè + + +# int onig_region_resize(OnigRegion* region, int n) + + ¥Þ¥Ã¥ÁÎΰè¾ðÊó(region)¤ÎÊá³Í¼°½¸¹ç(¥°¥ë¡¼¥×)¿ô¤òÊѹ¹¤¹¤ë¡£ + + Àµ¾ï½ªÎ»Ìá¤êÃÍ: ONIG_NORMAL + + °ú¿ô + 1 region: ÂоÝÎΰè + 2 n: ¿·¤·¤¤¥µ¥¤¥º + + +# int onig_name_to_group_numbers(regex_t* reg, const UChar* name, const UChar* name_end, + int** num_list) + + »ØÄꤷ¤¿Ì¾Á°¤ËÂФ¹¤ë̾Á°ÉÕ¤Êá³Í¼°½¸¹ç(¥°¥ë¡¼¥×)¤Î + ¥°¥ë¡¼¥×ÈÖ¹æ¥ê¥¹¥È¤òÊÖ¤¹¡£ + ̾Á°ÉÕ¤Êá³Í¼°½¸¹ç¤Ï¡¢(?<name>....)¤Ë¤è¤Ã¤ÆÄêµÁ¤Ç¤¤ë¡£ + + Àµ¾ï½ªÎ»Ìá¤êÃÍ: »ØÄꤵ¤ì¤¿Ì¾Á°¤ËÂФ¹¤ë¥°¥ë¡¼¥×¿ô + (Îã /(?<x>..)(?<x>..)/ ==> 2) + ̾Á°¤ËÂФ¹¤ë¥°¥ë¡¼¥×¤¬Â¸ºß¤·¤Ê¤¤: -1 + + °ú¿ô + 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È + 2 name: Êá³Í¼°½¸¹ç(¥°¥ë¡¼¥×)̾ + 3 name_end: Êá³Í¼°½¸¹ç(¥°¥ë¡¼¥×)̾¤Î½ªÃ¼¥¢¥É¥ì¥¹ + 4 num_list: ÈÖ¹æ¥ê¥¹¥È¤òÊÖ¤¹¥¢¥É¥ì¥¹ + + +# int onig_name_to_backref_number(regex_t* reg, const UChar* name, const UChar* name_end, + OnigRegion *region) + + »ØÄꤵ¤ì¤¿Ì¾Á°¤Î¸åÊý»²¾È(\k<name>)¤ËÂФ¹¤ëÊá³Í¼°½¸¹ç(¥°¥ë¡¼¥×)¤ÎÈÖ¹æ¤òÊÖ¤¹¡£ + ̾Á°¤ËÂФ·¤Æ¡¢Ê£¿ô¤Î¥Þ¥Ã¥ÁÎΰ褬͸ú¤Ç¤¢¤ì¤Ð¡¢¤½¤ÎÃæ¤ÎºÇÂç¤ÎÈÖ¹æ¤òÊÖ¤¹¡£ + ̾Á°¤ËÂФ¹¤ëÊá³Í¼°½¸¹ç¤¬°ì¸Ä¤·¤«¤Ê¤¤¤È¤¤Ë¤Ï¡¢Âбþ¤¹¤ë¥Þ¥Ã¥ÁÎΰ褬͸ú¤« + ¤É¤¦¤«¤Ë´Ø·¸¤Ê¤¯¡¢¤½¤ÎÈÖ¹æ¤òÊÖ¤¹¡£(½¾¤Ã¤Æ¡¢region¤Ë¤ÏNULL¤òÅϤ·¤Æ¤â¤è¤¤¡£) + + Àµ¾ï½ªÎ»Ìá¤êÃÍ: ÈÖ¹æ + + °ú¿ô + 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È + 2 name: Êá³Í¼°½¸¹ç(¥°¥ë¡¼¥×)̾ + 3 name_end: Êá³Í¼°½¸¹ç(¥°¥ë¡¼¥×)̾¤Î½ªÃ¼¥¢¥É¥ì¥¹ + 4 region: search/match·ë²Ì¤Î¥Þ¥Ã¥ÁÎΰè + + +# int onig_foreach_name(regex_t* reg, + int (*func)(const UChar*, const UChar*, int,int*,regex_t*,void*), + void* arg) + + Á´¤Æ¤Î̾Á°¤ËÂФ·¤Æ¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¸Æ¤Ó½Ð¤·¤ò¼Â¹Ô¤¹¤ë¡£ + + Àµ¾ï½ªÎ»Ìá¤êÃÍ: 0 + ¥¨¥é¡¼: ¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤ÎÌá¤êÃÍ + + °ú¿ô + 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È + 2 func: ¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô + func(name, name_end, <number of groups>, <group number's list>, + reg, arg); + + func¤¬0°Ê³°¤ÎÃͤòÊÖ¤¹¤È¡¢¤½¤ì°Ê¹ß¤Î¥³¡¼¥ë¥Ð¥Ã¥¯¤Ï¹Ô¤Ê¤ï¤º¤Ë + ½ªÎ»¤¹¤ë¡£ + + 3 arg: func¤ËÂФ¹¤ëÄɲðú¿ô + + +# int onig_number_of_names(regex_t* reg) + + ¥Ñ¥¿¡¼¥óÃæ¤ÇÄêµÁ¤µ¤ì¤¿Ì¾Á°¤Î¿ô¤òÊÖ¤¹¡£ + °ì¸Ä¤Î̾Á°¤Î¿½ÅÄêµÁ¤Ï°ì¸Ä¤È´ÇÐö¤¹¡£ + + °ú¿ô + 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È + + +# OnigEncoding onig_get_encoding(regex_t* reg) +# OnigOptionType onig_get_options(regex_t* reg) +# OnigAmbigType onig_get_ambig_flag(regex_t* reg) +# OnigSyntaxType* onig_get_syntax(regex_t* reg) + + Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È¤ËÂФ·¤Æ¡¢Âбþ¤¹¤ëÃͤòÊÖ¤¹¡£ + + °ú¿ô + 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È + + +# int onig_number_of_captures(regex_t* reg) + + ¥Ñ¥¿¡¼¥óÃæ¤ÇÄêµÁ¤µ¤ì¤¿Êá³Í¥°¥ë¡¼¥×¤Î¿ô¤òÊÖ¤¹¡£ + + °ú¿ô + 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È + + +# int onig_number_of_capture_histories(regex_t* reg) + + ¥Ñ¥¿¡¼¥óÃæ¤ÇÄêµÁ¤µ¤ì¤¿Êá³ÍÍúÎò(?@...)¤Î¿ô¤òÊÖ¤¹¡£ + + »ÈÍѤ¹¤ëʸˡ¤ÇÊá³ÍÍúÎòµ¡Ç½¤¬Í¸ú(ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY) + ¤Ç¤Ê¤±¤ì¤Ð¡¢Êá³ÍÍúÎòµ¡Ç½¤Ï»ÈÍѤǤ¤Ê¤¤¡£ + + °ú¿ô + 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È + + +# OnigCaptureTreeNode* onig_get_capture_tree(OnigRegion* region) + + Êá³ÍÍúÎò¥Ç¡¼¥¿¤Î¥ë¡¼¥È¥Î¡¼¥É¤òÊÖ¤¹¡£ + + ¥Þ¥Ã¥Á¤¬¼ºÇÔ¤·¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢¤³¤ÎÃͤÏÉÔÄê¤Ç¤¢¤ë¡£ + + °ú¿ô + 1 region: ¥Þ¥Ã¥ÁÎΰè + + +# int onig_capture_tree_traverse(OnigRegion* region, int at, + int(*func)(int,int,int,int,int,void*), void* arg) + + Êá³ÍÍúÎò¥Ç¡¼¥¿ÌÚ¤ò½ä²ó¤·¤Æ¥³¡¼¥ë¥Ð¥Ã¥¯¤¹¤ë¡£ + + Àµ¾ï½ªÎ»Ìá¤êÃÍ: 0 + ¥¨¥é¡¼: ¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤ÎÌá¤êÃÍ + + °ú¿ô + 1 region: ¥Þ¥Ã¥ÁÎΰè + 2 at: ¥³¡¼¥ë¥Ð¥Ã¥¯¤ò¹Ô¤Ê¤¦¥¿¥¤¥ß¥ó¥° + + ONIG_TRAVERSE_CALLBACK_AT_FIRST: + ºÇ½é¤Ë¥³¡¼¥ë¥Ð¥Ã¥¯¤·¤Æ¡¢»Ò¥Î¡¼¥É¤ò½ä²ó + ONIG_TRAVERSE_CALLBACK_AT_LAST: + »Ò¥Î¡¼¥É¤ò½ä²ó¤·¤Æ¡¢¥³¡¼¥ë¥Ð¥Ã¥¯ + ONIG_TRAVERSE_CALLBACK_AT_BOTH: + ºÇ½é¤Ë¥³¡¼¥ë¥Ð¥Ã¥¯¤·¤Æ¡¢»Ò¥Î¡¼¥É¤ò½ä²ó¡¢ºÇ¸å¤Ë¤â¤¦°ìÅÙ¥³¡¼¥ë¥Ð¥Ã¥¯ + + 3 func: ¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô + func¤¬0°Ê³°¤ÎÃͤòÊÖ¤¹¤È¡¢¤½¤ì°Ê¹ß¤Î½ä²ó¤Ï¹Ô¤Ê¤ï¤º¤Ë + ½ªÎ»¤¹¤ë¡£ + + int func(int group, int beg, int end, int level, int at, + void* arg) + group: ¥°¥ë¡¼¥×ÈÖ¹æ + beg: ¥Þ¥Ã¥Á³«»Ï°ÌÃÖ + end ¥Þ¥Ã¥Á½ªÎ»°ÌÃÖ + level: ¥Í¥¹¥È¥ì¥Ù¥ë (0¤«¤é) + at: ¥³¡¼¥ë¥Ð¥Ã¥¯¤¬¸Æ¤Ó½Ð¤µ¤ì¤¿¥¿¥¤¥ß¥ó¥° + ONIG_TRAVERSE_CALLBACK_AT_FIRST + ONIG_TRAVERSE_CALLBACK_AT_LAST + arg: Äɲðú¿ô + + 4 arg; func¤ËÂФ¹¤ëÄɲðú¿ô + + +# int onig_noname_group_capture_is_active(regex_t* reg) + + ̾Á°¤Ê¤·¼°½¸¹ç¤ÎÊá³Íµ¡Ç½¤¬Í¸ú¤«¤É¤¦¤«¤òÊÖ¤¹¡£ + + ͸ú: 1 + ̵¸ú: 0 + + °ú¿ô + 1 reg: Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È + + + ¥ª¥×¥·¥ç¥ó¤ÎONIG_OPTION_DONT_CAPTURE_GROUP¤¬ON --> ̵¸ú + + ¥Ñ¥¿¡¼¥ó¤¬Ì¾Á°¤Ä¤¼°½¸¹ç¤ò»ÈÍѤ·¤Æ¤¤¤ë + AND »ÈÍÑʸˡ¤Ç¡¢ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP¤¬ON + AND ¥ª¥×¥·¥ç¥ó¤ÎONIG_OPTION_CAPTURE_GROUP¤¬OFF + --> ̵¸ú + + ¾åµ°Ê³°¤Î¾ì¹ç --> ͸ú + + +# UChar* onigenc_get_prev_char_head(OnigEncoding enc, const UChar* start, const UChar* s) + + ʸ»ú°ì¸ÄʬÁ°¤Îʸ»úÎó°ÌÃÖ¤òÊÖ¤¹¡£ + + °ú¿ô + 1 enc: ʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + 2 start: ʸ»úÎó¤ÎÀèÆ¬¥¢¥É¥ì¥¹ + 3 s: ʸ»úÎóÃæ¤Î°ÌÃÖ + + +# UChar* onigenc_get_left_adjust_char_head(OnigEncoding enc, + const UChar* start, const UChar* s) + + ʸ»ú¤ÎÀèÆ¬¥Ð¥¤¥È°ÌÃ֤ˤʤë¤è¤¦¤Ëº¸Â¦¤ËÄ´À°¤·¤¿¥¢¥É¥ì¥¹¤òÊÖ¤¹¡£ + + °ú¿ô + 1 enc: ʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + 2 start: ʸ»úÎó¤ÎÀèÆ¬¥¢¥É¥ì¥¹ + 3 s: ʸ»úÎóÃæ¤Î°ÌÃÖ + + +# UChar* onigenc_get_right_adjust_char_head(OnigEncoding enc, + const UChar* start, const UChar* s) + + ʸ»ú¤ÎÀèÆ¬¥Ð¥¤¥È°ÌÃ֤ˤʤë¤è¤¦¤Ë±¦Â¦¤ËÄ´À°¤·¤¿¥¢¥É¥ì¥¹¤òÊÖ¤¹¡£ + + °ú¿ô + 1 enc: ʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + 2 start: ʸ»úÎó¤ÎÀèÆ¬¥¢¥É¥ì¥¹ + 3 s: ʸ»úÎóÃæ¤Î°ÌÃÖ + + +# int onigenc_strlen(OnigEncoding enc, const UChar* s, const UChar* end) +# int onigenc_strlen_null(OnigEncoding enc, const UChar* s) + + ʸ»úÎó¤Îʸ»ú¿ô¤òÊÖ¤¹¡£ + + +# int onigenc_str_bytelen_null(OnigEncoding enc, const UChar* s) + + ʸ»úÎó¤Î¥Ð¥¤¥È¿ô¤òÊÖ¤¹¡£ + + +# int onig_set_default_syntax(OnigSyntaxType* syntax) + + ¥Ç¥Õ¥©¥ë¥È¤ÎÀµµ¬É½¸½¥Ñ¥¿¡¼¥óʸˡ¤ò¥»¥Ã¥È¤¹¤ë¡£ + + °ú¿ô + 1 syntax: Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸˡ + + +# void onig_copy_syntax(OnigSyntaxType* to, OnigSyntaxType* from) + + Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸˡ¤ò¥³¥Ô¡¼¤¹¤ë¡£ + + °ú¿ô + 1 to: ÂÐ¾Ý + 2 from: ¸µ + + +# unsigned int onig_get_syntax_op(OnigSyntaxType* syntax) +# unsigned int onig_get_syntax_op2(OnigSyntaxType* syntax) +# unsigned int onig_get_syntax_behavior(OnigSyntaxType* syntax) +# OnigOptionType onig_get_syntax_options(OnigSyntaxType* syntax) + +# void onig_set_syntax_op(OnigSyntaxType* syntax, unsigned int op) +# void onig_set_syntax_op2(OnigSyntaxType* syntax, unsigned int op2) +# void onig_set_syntax_behavior(OnigSyntaxType* syntax, unsigned int behavior) +# void onig_set_syntax_options(OnigSyntaxType* syntax, OnigOptionType options) + + Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸˡ¤ÎÍ×ÁǤò»²¾È/¼èÆÀ¤¹¤ë¡£ + + °ú¿ô + 1 syntax: Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸˡ + 2 op, op2, behavior, options: Í×ÁǤÎÃÍ + + +# void onig_copy_encoding(OnigEncoding to, OnigOnigEncoding from) + + ʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ò¥³¥Ô¡¼¤¹¤ë¡£ + + °ú¿ô + 1 to: ÂÐ¾Ý + 2 from: ¸µ + + +# int onig_set_meta_char(OnigEncoding enc, unsigned int what, + OnigCodePoint code) + + ¥á¥¿Ê¸»ú¤ò»ØÄꤷ¤¿¥³¡¼¥É¥Ý¥¤¥ó¥ÈÃͤ˥»¥Ã¥È¤¹¤ë¡£ + ONIG_SYN_OP_VARIABLE_META_CHARACTERS¤¬Àµµ¬É½¸½¥Ñ¥¿¡¼¥óʸˡ¤Ç͸ú¤Ë + ¤Ê¤Ã¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢¥¨¥¹¥±¡¼¥×ʸ»ú¤ò½ü¤¤¤Æ¡¢¤³¤³¤Ç»ØÄꤷ¤¿¥á¥¿Ê¸»ú¤Ï + µ¡Ç½¤·¤Ê¤¤¡£(Áȹþ¤ß¤Îʸˡ¤Ç¤Ï͸ú¤Ë¤·¤Æ¤¤¤Ê¤¤¡£) + + Àµ¾ï½ªÎ»Ìá¤êÃÍ: ONIG_NORMAL + + °ú¿ô + 1 enc: ÂоÝʸ»ú¥¨¥ó¥³¡¼¥Ç¥£¥ó¥° + 2 what: ¥á¥¿Ê¸»úµ¡Ç½¤Î»ØÄê + + ONIG_META_CHAR_ESCAPE + ONIG_META_CHAR_ANYCHAR + ONIG_META_CHAR_ANYTIME + ONIG_META_CHAR_ZERO_OR_ONE_TIME + ONIG_META_CHAR_ONE_OR_MORE_TIME + ONIG_META_CHAR_ANYCHAR_ANYTIME + + 3 code: ¥á¥¿Ê¸»ú¤Î¥³¡¼¥É¥Ý¥¤¥ó¥È ¤Þ¤¿¤Ï ONIG_INEFFECTIVE_META_CHAR. + + +# OnigAmbigType onig_get_default_ambig_flag() + + ¥Ç¥Õ¥©¥ë¥È¤ÎÛ£Ëæ¥Þ¥Ã¥Á¥Õ¥é¥°¤ò¼èÆÀ¤¹¤ë¡£ + + +# int onig_set_default_ambig_flag(OnigAmbigType ambig_flag) + + ¥Ç¥Õ¥©¥ë¥È¤ÎÛ£Ëæ¥Þ¥Ã¥Á¥Õ¥é¥°¤ò¥»¥Ã¥È¤¹¤ë¡£ + + °ú¿ô + 1 ambig_flag: Û£Ëæ¥Þ¥Ã¥Á¥Õ¥é¥° + + +# unsigned int onig_get_match_stack_limit_size(void) + + ¥Þ¥Ã¥Á¥¹¥¿¥Ã¥¯¥µ¥¤¥º¤ÎºÇÂçÃͤòÊÖ¤¹¡£ + (¥Ç¥Õ¥©¥ë¥È: 0 == ̵À©¸Â) + + +# int onig_set_match_stack_limit_size(unsigned int size) + + ¥Þ¥Ã¥Á¥¹¥¿¥Ã¥¯¥µ¥¤¥º¤ÎºÇÂçÃͤò»ØÄꤹ¤ë¡£ + (size = 0: ̵À©¸Â) + + Àµ¾ï½ªÎ»Ìá¤êÃÍ: ONIG_NORMAL + + +# int onig_end(void) + + ¥é¥¤¥Ö¥é¥ê¤Î»ÈÍѤò½ªÎ»¤¹¤ë¡£ + + Àµ¾ï½ªÎ»Ìá¤êÃÍ: ONIG_NORMAL + + onig_init()¤òºÆÅٸƤӽФ·¤Æ¤â¡¢°ÊÁ°¤ËºîÀ®¤·¤¿Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È + ¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï¤Ç¤¤Ê¤¤¡£ + + +# const char* onig_version(void) + + ¥Ð¡¼¥¸¥ç¥óʸ»úÎó¤òÊÖ¤¹¡£(Îã "2.2.8") + +// END diff --git a/ext/mbstring/oniguruma/doc/FAQ b/ext/mbstring/oniguruma/doc/FAQ new file mode 100644 index 0000000..dccf242 --- /dev/null +++ b/ext/mbstring/oniguruma/doc/FAQ @@ -0,0 +1,37 @@ +FAQ 2006/10/30 + +1. Lognest match + + You can execute longest match by using ONIG_OPTION_FIND_LONGEST option + in onig_new(). + + +2. Thread safe + + In order to make thread safe, which of (A) or (B) must be done. + + (A) Oniguruma Layer + + Define the macro below at NOT_RUBY case in oniguruma/regint.h. + + USE_MULTI_THREAD_SYSTEM + THREAD_ATOMIC_START + THREAD_ATOMIC_END + THREAD_PASS + + THREAD_SYSTEM_INIT + THREAD_SYSTEM_END + + + (B) Application Layer + + The plural threads should not do simultaneously that making + new regexp objects or re-compiling objects or freeing objects, + even if these objects are differ. + + +3. Mailing list + + There is no mailing list about Oniguruma. + +// END diff --git a/ext/mbstring/oniguruma/doc/FAQ.ja b/ext/mbstring/oniguruma/doc/FAQ.ja new file mode 100644 index 0000000..5582765 --- /dev/null +++ b/ext/mbstring/oniguruma/doc/FAQ.ja @@ -0,0 +1,122 @@ +FAQ 2006/10/30 + +1. ºÇĹ¥Þ¥Ã¥Á + + onig_new()¤ÎÃæ¤Ç¡¢ONIG_OPTION_FIND_LONGEST¥ª¥×¥·¥ç¥ó + ¤ò»ÈÍѤ¹¤ì¤ÐºÇĹ¥Þ¥Ã¥Á¤Ë¤Ê¤ë¡£ + + +2. ¥¹¥ì¥Ã¥É¥»¡¼¥Õ + + ¥¹¥ì¥Ã¥É¥»¡¼¥Õ¤Ë¤¹¤ë¤Ë¤Ï¡¢°Ê²¼¤Î(A)¤È(B)¤Î¤É¤Á¤é¤«¤ò¹Ô¤Ê¤¨¤Ð + ¤è¤¤¡£ + + (A) Oniguruma Layer + + oniguruma/regint.h¤ÎÃæ¤ÎNOT_RUBY¤ÎÉôʬ¤Î°Ê²¼¤Î¥Þ¥¯¥í¤òÄêµÁ¤¹¤ë¡£ + + USE_MULTI_THREAD_SYSTEM + THREAD_ATOMIC_START + THREAD_ATOMIC_END + THREAD_PASS + + ²¿¤é¤«¤Î½é´ü²½/½ªÎ»½èÍý¤¬É¬ÍפǤ¢¤ì¤Ð¡¢°Ê²¼¤Î¥Þ¥¯¥í¤ËÄêµÁ¤¹¤ë¡£ + THREAD_SYSTEM_INIT + THREAD_SYSTEM_END + + + (B) Application Layer + + Ʊ»þ¤ËÊ£¿ô¤Î¥¹¥ì¥Ã¥É¤¬¡¢Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤¹¤ë¡¢ + ¤Þ¤¿¤Ï²òÊü¤¹¤ë¡¢¤³¤È¤ò¹Ô¤Ê¤Ã¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£ + ¤½¤ì¤é¤Î¥ª¥Ö¥¸¥§¥¯¥È¤¬Á´¤¯Ê̤Τâ¤Î¤Ç¤¢¤Ã¤Æ¤â¡£ + + ¤â¤¦¾¯¤·¾Ü¤·¤¤ÀâÌÀ¤Ï¡¢¤³¤Î¥É¥¥å¥á¥ó¥È¤ÎÃæ¤Î + "¥¹¥ì¥Ã¥É¥»¡¼¥Õ¤Ë´Ø¤¹¤ëÊäÂ"¤Ë½ñ¤¤¤Æ¤ª¤¤¤¿¡£ + + +3. ¥á¡¼¥ê¥ó¥°¥ê¥¹¥È + + µ´¼Ö¤Ë´Ø¤¹¤ë¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤Ï¸ºß¤·¤Ê¤¤¡£ + +//END + + + +¥¹¥ì¥Ã¥É¥»¡¼¥Õ¤Ë´Ø¤¹¤ëÊä + +¥¹¥ì¥Ã¥É¥»¡¼¥Õ¤Ë¤¹¤ë¤Ë¤Ï¡¢¸ÄÊ̤Υ¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÎÃæ¤Ç¹Ô¤¦¤«¡¢ +Oniguruma¥é¥¤¥Ö¥é¥ê¤ÎÃæ¤Ç¹Ô¤¦¤«¡¢¤É¤Á¤é¤«¤òÁª¤Ö¤³¤È¤¬¤Ç¤¤Þ¤¹¡£ +(Oniguruma¤ò»ÈÍѤ¹¤ë¦¤ÇÂн褹¤ë¤«¡¢Oniguruma¤ËÂн褵¤»¤ë¤« +¤É¤Á¤é¤«ÊÒÊý¤Ç¹Ô¤¦É¬Íפ¬¤¢¤ë¤È¤¤¤¦¤³¤È¤Ç¤¹¡£) + +¤³¤ì¤é¤ÎÊýË¡¤Ë¤Ä¤¤¤Æ¡¢°Ê²¼(A)¤È(B)¤ÇÀâÌÀ¤·¤Þ¤¹¡£ + +¥Þ¥ë¥Á¥¹¥ì¥Ã¥ÉAPI¤Ï¡¢¤½¤ì¤¾¤ì¤Î¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Ë¤è¤Ã¤Æ¤â +°Û¤Ê¤ê¤Þ¤¹¤Î¤Ç¡¢°Ê²¼¤ÎÀâÌÀ¤ÎÃæ¤Ç¶ñÂÎŪ¤Ë²¿¤ò¸Æ¤Ö¤Î¤«¤ò +½ñ¤¯¤³¤È¤Ï̵Íý¤Ç¤¹¡£¼ÂºÝ¤Ë»ÈÍѤµ¤ì¤ë¥Þ¥ë¥Á¥¹¥ì¥Ã¥ÉAPI¤Ç¡¢ +Âбþ¤¹¤ëµ¡Ç½¤Î¤â¤Î¤ò»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£ + +(A) Oniguruma¤ÎÃæ¤ÇÂбþ¤¹¤ë¾ì¹ç + +oniguruma/regint.h¤ÎÃæ¤ÎNOT_RUBY¤Ç°Ï¤Þ¤ì¤Æ¤¤¤ëÉôʬ¤ÎÃæ¤Ç +°Ê²¼¤Î¥Þ¥¯¥í¤òÄêµÁ¤·¤ÆºÆ¥³¥ó¥Ñ¥¤¥ë¤·¤Æ¤¯¤À¤µ¤¤¡£ + +USE_MULTI_THREAD_SYSTEM + + ñ¤Ë͸ú¤Ë¤¹¤ì¤Ð¤è¤¤¤Ç¤¹¡£ + +THREAD_ATOMIC_START +THREAD_ATOMIC_END + + THREAD_ATOMIC_START¤«¤éTHREAD_ATOMIC_END¤Ç°Ï¤Þ¤ì¤¿ + ¥×¥í¥°¥é¥à¤Î¥³¡¼¥ÉÉôʬ¤ò¤¢¤ë¥¹¥ì¥Ã¥É¤¬¼Â¹ÔÃæ¤Ë¡¢Â¾¤Î + ¥¹¥ì¥Ã¥É¤Ë¼Â¹Ô¸¢¤¬°Üư¤·¤Ê¤¤¤³¤È¤òÊݾ㤹¤ë¤â¤Î¤ËÄêµÁ + ¤·¤Æ¤¯¤À¤µ¤¤¡£ + (̾Á°¤ÎÄ̤ꡢ°Ï¤Þ¤ì¤¿¥³¡¼¥ÉÉôʬ¤ò¥¹¥ì¥Ã¥É¥¢¥È¥ß¥Ã¥¯¤Ë + ¤¹¤ë¤È¤¤¤¦°ÕÌ£) + +THREAD_PASS + + ¤³¤ì¤ò¼Â¹Ô¤·¤¿¥¹¥ì¥Ã¥É¤«¤é¡¢Â¾¤Î¥¹¥ì¥Ã¥É¤Ë¼Â¹Ô¸¢¤ò°Ñ¾ù + ¤¹¤ë¤â¤Î¤ËÄêµÁ¤ò¤·¤Æ¤¯¤À¤µ¤¤¡£(ºÆ¥¹¥±¥¸¥å¡¼¥ë¤ò¸Æ¤Ó½Ð¤¹ + ¤È¤¤¤¦°ÕÌ£) + Âбþ¤¹¤ëµ¡Ç½¤¬Á´¤¯¤Ê¤±¤ì¤Ð¡¢¶õÄêµÁ¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£ + +(»²¹ÍÎã) +Ruby¤Î¾ì¹ç¤òÎã¤Ë¤¹¤ë¤È¡¢ +Ruby¤Ï¼«Ê¬¼«¿È¤ÇÆÈ¼«¤Î¥¹¥ì¥Ã¥Éµ¡Ç½¤ò¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£ +¤½¤Îµ¡Ç½¤ò»ÈÍѤ¹¤ë¤È¡¢°Ê²¼¤Î¤è¤¦¤ËÄêµÁ¤¹¤ì¤Ð¤è¤¤¤³¤È¤Ë +¤Ê¤ê¤Þ¤¹¡£ + +#define USE_MULTI_THREAD_SYSTEM +#define THREAD_SYSTEM_INIT +#define THREAD_SYSTEM_END +#define THREAD_ATOMIC_START DEFER_INTS +#define THREAD_ATOMIC_END ENABLE_INTS +#define THREAD_PASS rb_thread_schedule() + +Ruby¤Î¾ì¹ç¡¢¥¿¥¤¥Þ³ä¤ê¹þ¤ß¤ò»ÈÍѤ·¤Æ¡¢¥¹¥ì¥Ã¥É¤ÎÀÚ¤êÂØ¤¨¤ò +¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£DEFER_INTS¤Ï³ä¤ê¹þ¤ß¥Ï¥ó¥É¥é¤Î¼Â¹Ô¤ò°ì»þŪ¤Ë +»ß¤á¤ë¤¿¤á¤Î¥Þ¥¯¥í¤Ç¤¹¡£ENABLE_INTS¥Þ¥¯¥í¤Ç³ä¤ê¹þ¤ß¥Ï¥ó¥É¥é +¤Î¼Â¹Ô¤òµö²Ä¤·¤Þ¤¹¡£ +¤³¤ì¤Ë¤è¤Ã¤Æ¡¢THREAD_ATOMIC_START¤«¤éTHREAD_ATOMIC_END +¤Ç°Ï¤Þ¤ì¤¿Éôʬ¤Î¼Â¹ÔÃæ¤Ë¡¢Â¾¤Î¥¹¥ì¥Ã¥É¤Ë¼Â¹Ô¸¢¤¬°Üư¤·¤Þ¤»¤ó¡£ + + +(B) ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÎÃæ¤ÇÂбþ¤¹¤ë¾ì¹ç + +°Ê²¼¤òÊݾ㤹¤ë¤è¤¦¤Ë¡¢¥¹¥ì¥Ã¥É¤Î¼Â¹Ô¤òÀ©¸æ¤·¤Æ¤¯¤À¤µ¤¤¡£ + +Ʊ»þ¤ËÊ£¿ô¤Î¥¹¥ì¥Ã¥É¤¬¡¢Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤¹¤ë¡¢¤Þ¤¿¤Ï²òÊü¤¹¤ë¡¢¤³¤È¤ò +¹Ô¤Ê¤Ã¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¤½¤ì¤é¤Î¥ª¥Ö¥¸¥§¥¯¥È¤¬Á´¤¯Ê̤Τâ¤Î¤Ç¤¢¤Ã¤Æ¤â¡£ + +onig_new(), onig_new_deluxe(), onig_free()¤Î¤É¤ì¤«¤Î¸Æ¤Ó½Ð¤·¤ò¡¢ +Ê£¿ô¤Î¥¹¥ì¥Ã¥É¤¬Æ±»þ¤Ë¼Â¹Ô¤¹¤ë¤³¤È¤òÈò¤±¤Æ¤¯¤À¤µ¤¤¡£Æ±»þ¤Ç¤Ê¤±¤ì¤ÐÊ̤ˤ«¤Þ¤¤¤Þ¤»¤ó¡£ + +¤³¤ì¤Ï²¿¸ÎɬÍפʤΤ«¤È¤¤¤¦¤È¡¢Àµµ¬É½¸½¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤¹¤ë +²áÄø¤Ç¡¢ÆâÉô¤Ç¶¦Ä̤˻²¾È¤¹¤ë¥Æ¡¼¥Ö¥ë¤¬¤¢¤ê¤Þ¤¹¡£ +¤³¤Î¥Æ¡¼¥Ö¥ë¤ËÂФ·¤Æ¤Î¥Ç¡¼¥¿ÅÐÏ¿½èÍý¤¬Ê£¿ô¤Î¥¹¥ì¥Ã¥É¤Ç¾×ÆÍ¤·¤Æ +°Û¾ï¤Ê¾õÂ֤ˤʤé¤Ê¤¤¤¿¤á¤ËɬÍפǤ¹¡£ + +// END diff --git a/ext/mbstring/oniguruma/doc/RE b/ext/mbstring/oniguruma/doc/RE new file mode 100644 index 0000000..5a2783d --- /dev/null +++ b/ext/mbstring/oniguruma/doc/RE @@ -0,0 +1,412 @@ +Oniguruma Regular Expressions Version 4.3.0 2006/08/17 + +syntax: ONIG_SYNTAX_RUBY (default) + + +1. Syntax elements + + \ escape (enable or disable meta character meaning) + | alternation + (...) group + [...] character class + + +2. Characters + + \t horizontal tab (0x09) + \v vertical tab (0x0B) + \n newline (0x0A) + \r return (0x0D) + \b back space (0x08) + \f form feed (0x0C) + \a bell (0x07) + \e escape (0x1B) + \nnn octal char (encoded byte value) + \xHH hexadecimal char (encoded byte value) + \x{7HHHHHHH} wide hexadecimal char (character code point value) + \cx control char (character code point value) + \C-x control char (character code point value) + \M-x meta (x|0x80) (character code point value) + \M-\C-x meta control char (character code point value) + + (* \b is effective in character class [...] only) + + +3. Character types + + . any character (except newline) + + \w word character + + Not Unicode: + alphanumeric, "_" and multibyte char. + + Unicode: + General_Category -- (Letter|Mark|Number|Connector_Punctuation) + + \W non word char + + \s whitespace char + + Not Unicode: + \t, \n, \v, \f, \r, \x20 + + Unicode: + 0009, 000A, 000B, 000C, 000D, 0085(NEL), + General_Category -- Line_Separator + -- Paragraph_Separator + -- Space_Separator + + \S non whitespace char + + \d decimal digit char + + Unicode: General_Category -- Decimal_Number + + \D non decimal digit char + + \h hexadecimal digit char [0-9a-fA-F] + + \H non hexadecimal digit char + + +4. Quantifier + + greedy + + ? 1 or 0 times + * 0 or more times + + 1 or more times + {n,m} at least n but not more than m times + {n,} at least n times + {,n} at least 0 but not more than n times ({0,n}) + {n} n times + + reluctant + + ?? 1 or 0 times + *? 0 or more times + +? 1 or more times + {n,m}? at least n but not more than m times + {n,}? at least n times + {,n}? at least 0 but not more than n times (== {0,n}?) + + possessive (greedy and does not backtrack after repeated) + + ?+ 1 or 0 times + *+ 0 or more times + ++ 1 or more times + + ({n,m}+, {n,}+, {n}+ are possessive op. in ONIG_SYNTAX_JAVA only) + + ex. /a*+/ === /(?>a*)/ + + +5. Anchors + + ^ beginning of the line + $ end of the line + \b word boundary + \B not word boundary + \A beginning of string + \Z end of string, or before newline at the end + \z end of string + \G matching start position (*) + + * Ruby Regexp: + previous end-of-match position + (This specification is not related to this library.) + + +6. Character class + + ^... negative class (lowest precedence operator) + x-y range from x to y + [...] set (character class in character class) + ..&&.. intersection (low precedence at the next of ^) + + ex. [a-w&&[^c-g]z] ==> ([a-w] AND ([^c-g] OR z)) ==> [abh-w] + + * If you want to use '[', '-', ']' as a normal character + in a character class, you should escape these characters by '\'. + + + POSIX bracket ([:xxxxx:], negate [:^xxxxx:]) + + Not Unicode Case: + + alnum alphabet or digit char + alpha alphabet + ascii code value: [0 - 127] + blank \t, \x20 + cntrl + digit 0-9 + graph include all of multibyte encoded characters + lower + print include all of multibyte encoded characters + punct + space \t, \n, \v, \f, \r, \x20 + upper + xdigit 0-9, a-f, A-F + + + Unicode Case: + + alnum Letter | Mark | Decimal_Number + alpha Letter | Mark + ascii 0000 - 007F + blank Space_Separator | 0009 + cntrl Control | Format | Unassigned | Private_Use | Surrogate + digit Decimal_Number + graph [[:^space:]] && ^Control && ^Unassigned && ^Surrogate + lower Lowercase_Letter + print [[:graph:]] | [[:space:]] + punct Connector_Punctuation | Dash_Punctuation | Close_Punctuation | + Final_Punctuation | Initial_Punctuation | Other_Punctuation | + Open_Punctuation + space Space_Separator | Line_Separator | Paragraph_Separator | + 0009 | 000A | 000B | 000C | 000D | 0085 + upper Uppercase_Letter + xdigit 0030 - 0039 | 0041 - 0046 | 0061 - 0066 + (0-9, a-f, A-F) + + +7. Extended groups + + (?#...) comment + + (?imx-imx) option on/off + i: ignore case + m: multi-line (dot(.) match newline) + x: extended form + (?imx-imx:subexp) option on/off for subexp + + (?:subexp) not captured group + (subexp) captured group + + (?=subexp) look-ahead + (?!subexp) negative look-ahead + (?<=subexp) look-behind + (?<!subexp) negative look-behind + + Subexp of look-behind must be fixed character length. + But different character length is allowed in top level + alternatives only. + ex. (?<=a|bc) is OK. (?<=aaa(?:b|cd)) is not allowed. + + In negative-look-behind, captured group isn't allowed, + but shy group(?:) is allowed. + + (?>subexp) atomic group + don't backtrack in subexp. + + (?<name>subexp) define named group + (All characters of the name must be a word character. + And first character must not be a digit or uppper case) + + Not only a name but a number is assigned like a captured + group. + + Assigning the same name as two or more subexps is allowed. + In this case, a subexp call can not be performed although + the back reference is possible. + + +8. Back reference + + \n back reference by group number (n >= 1) + \k<name> back reference by group name + + In the back reference by the multiplex definition name, + a subexp with a large number is referred to preferentially. + (When not matched, a group of the small number is referred to.) + + * Back reference by group number is forbidden if named group is defined + in the pattern and ONIG_OPTION_CAPTURE_GROUP is not setted. + + + back reference with nest level + + (This function is disabled in Ruby 1.9.) + + \k<name+n> n: 0, 1, 2, ... + \k<name-n> n: 0, 1, 2, ... + + Destinate relative nest level from back reference position. + + ex 1. + + /\A(?<a>|.|(?:(?<b>.)\g<a>\k<b+0>))\z/.match("reer") + + ex 2. + + r = Regexp.compile(<<'__REGEXP__'.strip, Regexp::EXTENDED) + (?<element> \g<stag> \g<content>* \g<etag> ){0} + (?<stag> < \g<name> \s* > ){0} + (?<name> [a-zA-Z_:]+ ){0} + (?<content> [^<&]+ (\g<element> | [^<&]+)* ){0} + (?<etag> </ \k<name+1> >){0} + \g<element> + __REGEXP__ + + p r.match('<foo>f<bar>bbb</bar>f</foo>').captures + + + +9. Subexp call ("Tanaka Akira special") + + \g<name> call by group name + \g<n> call by group number (n >= 1) + + * left-most recursive call is not allowed. + ex. (?<name>a|\g<name>b) => error + (?<name>a|b\g<name>c) => OK + + * Call by group number is forbidden if named group is defined in the pattern + and ONIG_OPTION_CAPTURE_GROUP is not setted. + + * If the option status of called group is different from calling position + then the group's option is effective. + + ex. (?-i:\g<name>)(?i:(?<name>a)){0} match to "A" + + +10. Captured group + + Behavior of the no-named group (...) changes with the following conditions. + (But named group is not changed.) + + case 1. /.../ (named group is not used, no option) + + (...) is treated as a captured group. + + case 2. /.../g (named group is not used, 'g' option) + + (...) is treated as a no-captured group (?:...). + + case 3. /..(?<name>..)../ (named group is used, no option) + + (...) is treated as a no-captured group (?:...). + numbered-backref/call is not allowed. + + case 4. /..(?<name>..)../G (named group is used, 'G' option) + + (...) is treated as a captured group. + numbered-backref/call is allowed. + + where + g: ONIG_OPTION_DONT_CAPTURE_GROUP + G: ONIG_OPTION_CAPTURE_GROUP + + ('g' and 'G' options are argued in ruby-dev ML) + + These options are not implemented in Ruby level. + + +----------------------------- +A-1. Syntax depend options + + + ONIG_SYNTAX_RUBY + (?m): dot(.) match newline + + + ONIG_SYNTAX_PERL and ONIG_SYNTAX_JAVA + (?s): dot(.) match newline + (?m): ^ match after newline, $ match before newline + + +A-2. Original extensions + + + hexadecimal digit char type \h, \H + + named group (?<name>...) + + named backref \k<name> + + subexp call \g<name>, \g<group-num> + + +A-3. Lacked features compare with perl 5.8.0 + + + [:word:] + + \N{name} + + \l,\u,\L,\U, \X, \C + + (?{code}) + + (??{code}) + + (?(condition)yes-pat|no-pat) + + * \Q...\E + This is effective on ONIG_SYNTAX_PERL and ONIG_SYNTAX_JAVA. + + * \p{property}, \P{property} + This is effective on ONIG_SYNTAX_PERL and ONIG_SYNTAX_JAVA. + Alnum, Alpha, Blank, Cntrl, Digit, Graph, Lower, + Print, Punct, Space, Upper, XDigit, ASCII are supported. + + Prefix 'Is' of property name is allowed in ONIG_SYNTAX_PERL only. + ex. \p{IsXDigit}. + + Negation operator of property is supported in ONIG_SYNTAX_PERL only. + \p{^...}, \P{^...} + + +A-4. Differences with Japanized GNU regex(version 0.12) of Ruby + + + add hexadecimal digit char type (\h, \H) + + add look-behind + (?<=fixed-char-length-pattern), (?<!fixed-char-length-pattern) + + add possessive quantifier. ?+, *+, ++ + + add operations in character class. [], && + ('[' must be escaped as an usual char in character class.) + + add named group and subexp call. + + octal or hexadecimal number sequence can be treated as + a multibyte code char in character class if multibyte encoding + is specified. + (ex. [\xa1\xa2], [\xa1\xa7-\xa4\xa1]) + + allow the range of single byte char and multibyte char in character + class. + ex. /[a-<<any EUC-JP character>>]/ in EUC-JP encoding. + + effect range of isolated option is to next ')'. + ex. (?:(?i)a|b) is interpreted as (?:(?i:a|b)), not (?:(?i:a)|b). + + isolated option is not transparent to previous pattern. + ex. a(?i)* is a syntax error pattern. + + allowed incompleted left brace as an usual string. + ex. /{/, /({)/, /a{2,3/ etc... + + negative POSIX bracket [:^xxxx:] is supported. + + POSIX bracket [:ascii:] is added. + + repeat of look-ahead is not allowed. + ex. /(?=a)*/, /(?!b){5}/ + + Ignore case option is effective to numbered character. + ex. /\x61/i =~ "A" + + In the range quantifier, the number of the minimum is omissible. + /a{,n}/ == /a{0,n}/ + The simultanious abbreviation of the number of times of the minimum + and the maximum is not allowed. (/a{,}/) + + /a{n}?/ is not a non-greedy operator. + /a{n}?/ == /(?:a{n})?/ + + invalid back reference is checked and cause error. + /\1/, /(a)\2/ + + Zero-length match in infinite repeat stops the repeat, + then changes of the capture group status are checked as stop condition. + /(?:()|())*\1\2/ =~ "" + /(?:\1a|())*/ =~ "a" + + +A-5. Disabled functions by default syntax + + + capture history + + (?@...) and (?@<name>...) + + ex. /(?@a)*/.match("aaa") ==> [<0-1>, <1-2>, <2-3>] + + see sample/listcap.c file. + + +A-6. Problems + + + Invalid encoding byte sequence is not checked in UTF-8. + + * Invalid first byte is treated as a character. + /./u =~ "\xa3" + + * Incomplete byte sequence is not checked. + /\w+/ =~ "a\xf3\x8ec" + +// END diff --git a/ext/mbstring/oniguruma/doc/RE.ja b/ext/mbstring/oniguruma/doc/RE.ja new file mode 100644 index 0000000..5168171 --- /dev/null +++ b/ext/mbstring/oniguruma/doc/RE.ja @@ -0,0 +1,424 @@ +µ´¼Ö Àµµ¬É½¸½ Version 4.3.0 2006/08/17 + +»ÈÍÑʸˡ: ONIG_SYNTAX_RUBY (´ûÄêÃÍ) + + +1. ´ðËÜÍ×ÁÇ + + \ ÂàÈò½¤¾þ (¥¨¥¹¥±¡¼¥×) Àµµ¬É½¸½µ¹æ¤Î͸ú/̵¸ú¤ÎÀ©¸æ + | ÁªÂò»Ò + (...) ¼°½¸¹ç (¥°¥ë¡¼¥×) + [...] ʸ»ú½¸¹ç (ʸ»ú¥¯¥é¥¹) + + +2. ʸ»ú + + \t ¿åÊ¿¥¿¥Ö (0x09) + \v ¿âľ¥¿¥Ö (0x0B) + \n ²þ¹Ô (0x0A) + \r Éüµ¢ (0x0D) + \b ¸åÂà¶õÇò (0x08) + \f ²þÊÇ (0x0C) + \a ¾â (0x07) + \e ÂàÈò½¤¾þ (0x1B) + \nnn Ȭ¿Ê¿ôɽ¸½ É乿²½¥Ð¥¤¥ÈÃÍ(¤Î°ìÉô) + \xHH ½½Ï»¿Ê¿ôɽ¸½ É乿²½¥Ð¥¤¥ÈÃÍ(¤Î°ìÉô) + \x{7HHHHHHH} ³ÈÄ¥½½Ï»¿Ê¿ôɽ¸½ ¥³¡¼¥É¥Ý¥¤¥ó¥ÈÃÍ + \cx À©¸æÊ¸»úɽ¸½ ¥³¡¼¥É¥Ý¥¤¥ó¥ÈÃÍ + \C-x À©¸æÊ¸»úɽ¸½ ¥³¡¼¥É¥Ý¥¤¥ó¥ÈÃÍ + \M-x Ķ (x|0x80) ¥³¡¼¥É¥Ý¥¤¥ó¥ÈÃÍ + \M-\C-x Ķ + À©¸æÊ¸»úɽ¸½ ¥³¡¼¥É¥Ý¥¤¥ó¥ÈÃÍ + + ¢¨ \b¤Ï¡¢Ê¸»ú½¸¹çÆâ¤Ç¤Î¤ß͸ú + + +3. ʸ»ú¼ï + + . Ǥ°Õʸ»ú (²þ¹Ô¤ò½ü¤¯) + + \w ñ¸ì¹½À®Ê¸»ú + + Unicode°Ê³°¤Î¾ì¹ç: + ±Ñ¿ô»ú, "_" ¤ª¤è¤Ó ¿¥Ð¥¤¥Èʸ»ú¡£ + + Unicode¤Î¾ì¹ç: + General_Category -- (Letter|Mark|Number|Connector_Punctuation) + + \W Èóñ¸ì¹½À®Ê¸»ú + + \s ¶õÇòʸ»ú + + Unicode°Ê³°¤Î¾ì¹ç: + \t, \n, \v, \f, \r, \x20 + + Unicode¤Î¾ì¹ç: + 0009, 000A, 000B, 000C, 000D, 0085(NEL), + General_Category -- Line_Separator + -- Paragraph_Separator + -- Space_Separator + + \S Èó¶õÇòʸ»ú + + \d 10¿Ê¿ô»ú + + Unicode¤Î¾ì¹ç: General_Category -- Decimal_Number + + \D Èó10¿Ê¿ô»ú + + \h 16¿Ê¿ô»ú [0-9a-fA-F] + + \H Èó16¿Ê¿ô»ú + + + +4. ÎÌ»ØÄê»Ò + + ÍßÄ¥¤ê + + ? °ì²ó¤Þ¤¿¤ÏÎí²ó + * Îí²ó°Ê¾å + + °ì²ó°Ê¾å + {n,m} n²ó°Ê¾åm²ó°Ê²¼ + {n,} n²ó°Ê¾å + {,n} Îí²ó°Ê¾ån²ó°Ê²¼ ({0,n}) + {n} n²ó + + ̵Íß + + ?? °ì²ó¤Þ¤¿¤ÏÎí²ó + *? Îí²ó°Ê¾å + +? °ì²ó°Ê¾å + {n,m}? n²ó°Ê¾åm²ó°Ê²¼ + {n,}? n²ó°Ê¾å + {,n}? Îí²ó°Ê¾ån²ó°Ê²¼ (== {0,n}?) + + ¶¯Íß (ÍßÄ¥¤ê¤Ç¡¢·«¤êÊÖ¤·¤ËÀ®¸ù¤·¤¿¸å¤Ï²ó¿ô¤ò¸º¤é¤¹¤è¤¦¤Ê¸åÂàºÆ»î¹Ô¤ò¤·¤Ê¤¤) + + ?+ °ì²ó¤Þ¤¿¤ÏÎí²ó + *+ Îí²ó°Ê¾å + ++ °ì²ó°Ê¾å + + ({n,m}+, {n,}+, {n}+ ¤Ï¡¢ONIG_SYNTAX_JAVA¤Ç¤Î¤ß¶¯ÍߤʻØÄê»Ò) + + Îã. /a*+/ === /(?>a*)/ + + +5. ÉÅ + + ^ ¹ÔƬ + $ ¹ÔËö + \b ñ¸ì¶³¦ + \B Èóñ¸ì¶³¦ + \A ʸ»úÎóÀèÆ¬ + \Z ʸ»úÎóËöÈø¡¢¤Þ¤¿¤Ïʸ»úÎóËöÈø¤Î²þ¹Ô¤ÎľÁ° + \z ʸ»úÎóËöÈø + \G ¾È¹ç³«»Ï°ÌÃÖ(*) + + * Ruby Regexp: + Á°²ó¾È¹çÀ®¸ùËöÈø°ÌÃÖ + (¤³¤Î»ÅÍͤÏRuby¤Î¼ÂÁõ¤Ë´Ø¤¹¤ë¤â¤Î¤Ç¤¢¤ê¡¢ + Àµµ¬É½¸½¥é¥¤¥Ö¥é¥ê¤È¤Ï̵´Ø·¸) + + +6. ʸ»ú½¸¹ç + + ^... ÈÝÄê (ºÇÄãÍ¥ÀèÅٱ黻»Ò) + x-y ÈÏ°Ï (x¤«¤éy¤Þ¤Ç) + [...] ½¸¹ç (ʸ»ú½¸¹çÆâʸ»ú½¸¹ç) + ..&&.. Àѱ黻 (^¤Î¼¡¤ËÍ¥ÀèÅÙ¤¬Ä㤤±é»»»Ò) + + Îã. [a-w&&[^c-g]z] ==> ([a-w] and ([^c-g] or z)) ==> [abh-w] + + ¢¨ '[', '-', ']'¤ò¡¢Ê¸»ú½¸¹çÆâ¤ÇÄ̾ïʸ»ú¤Î°ÕÌ£¤Ç»ÈÍѤ·¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢ + ¤³¤ì¤é¤Îʸ»ú¤ò'\'¤ÇÂàÈò½¤¾þ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ + + + POSIX¥Ö¥é¥±¥Ã¥È ([:xxxxx:], ÈÝÄê [:^xxxxx:]) + + Unicode°Ê³°¤Î¾ì¹ç: + + alnum ±Ñ¿ô»ú + alpha ±Ñ»ú + ascii 0 - 127 + blank \t, \x20 + cntrl + digit 0-9 + graph ¿¥Ð¥¤¥Èʸ»úÁ´Éô¤ò´Þ¤à + lower + print ¿¥Ð¥¤¥Èʸ»úÁ´Éô¤ò´Þ¤à + punct + space \t, \n, \v, \f, \r, \x20 + upper + xdigit 0-9, a-f, A-F + + Unicode¤Î¾ì¹ç: + + alnum Letter | Mark | Decimal_Number + alpha Letter | Mark + ascii 0000 - 007F + blank Space_Separator | 0009 + cntrl Control | Format | Unassigned | Private_Use | Surrogate + digit Decimal_Number + graph [[:^space:]] && ^Control && ^Unassigned && ^Surrogate + lower Lowercase_Letter + print [[:graph:]] | [[:space:]] + punct Connector_Punctuation | Dash_Punctuation | Close_Punctuation | + Final_Punctuation | Initial_Punctuation | Other_Punctuation | + Open_Punctuation + space Space_Separator | Line_Separator | Paragraph_Separator | + 0009 | 000A | 000B | 000C | 000D | 0085 + upper Uppercase_Letter + xdigit 0030 - 0039 | 0041 - 0046 | 0061 - 0066 + (0-9, a-f, A-F) + + +7. ³ÈÄ¥¼°½¸¹ç + + (?#...) Ãí¼á + (?imx-imx) ¸ÉΩ¥ª¥×¥·¥ç¥ó + i: Âçʸ»ú¾®Ê¸»ú¾È¹ç + m: Ê£¿ô¹Ô + x: ³ÈÄ¥·Á¼° + (?imx-imx:¼°) ¼°¥ª¥×¥·¥ç¥ó + + (¼°) Êá³Í¼°½¸¹ç + (?:¼°) ÈóÊá³Í¼°½¸¹ç + + (?=¼°) ÀèÆÉ¤ß + (?!¼°) ÈÝÄêÀèÆÉ¤ß + (?<=¼°) Ìá¤êÆÉ¤ß + (?<!¼°) ÈÝÄêÌá¤êÆÉ¤ß + + Ìá¤êÆÉ¤ß¤Î¼°¤Ï¸ÇÄêʸ»úĹ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ + ¤·¤«¤·¡¢ºÇ¾å°Ì¤ÎÁªÂò»Ò¤À¤±¤Ï°Û¤Ê¤Ã¤¿Ê¸»úŤ¬µö¤µ¤ì¤ë¡£ + Îã. (?<=a|bc) ¤Ïµö²Ä. (?<=aaa(?:b|cd)) ¤ÏÉÔµö²Ä + + ÈÝÄêÌá¤êÆÉ¤ß¤Ç¤Ï¡¢Êá³Í¼°½¸¹ç¤Ïµö¤µ¤ì¤Ê¤¤¤¬¡¢ + ÈóÊá³Í¼°½¸¹ç¤Ïµö¤µ¤ì¤ë¡£ + + (?>¼°) ¸¶»ÒŪ¼°½¸¹ç + ¼°Á´ÂΤòÄ̲ᤷ¤¿¤È¤¡¢¼°¤ÎÃæ¤Ç¤Î¸åÂàºÆ»î¹Ô¤ò¹Ô¤Ê¤ï¤Ê¤¤ + + (?<name>¼°) ̾Á°ÉÕ¤Êá³Í¼°½¸¹ç + ¼°½¸¹ç¤Ë̾Á°¤ò³ä¤êÅö¤Æ¤ë(ÄêµÁ¤¹¤ë)¡£ + (̾Á°¤Ïñ¸ì¹½À®Ê¸»ú¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ºÇ½é¤Îʸ»ú¤Ï + ±ÑÂçʸ»ú¤Ç¤¢¤Ã¤Æ¤Ï¤¤¤±¤Ê¤¤¡£) + + ̾Á°¤À¤±¤Ç¤Ê¤¯¡¢Êá³Í¼°½¸¹ç¤ÈƱÍͤËÈÖ¹æ¤â³ä¤êÅö¤Æ¤é¤ì¤ë¡£ + ÈÖ¹æ»ØÄ꤬¶Ø»ß¤µ¤ì¤Æ¤¤¤Ê¤¤¾õÂÖ (10. Êá³Í¼°½¸¹ç ¤ò»²¾È) + ¤Î¤È¤¤Ï¡¢Ì¾Á°¤ò»È¤ï¤Ê¤¤¤ÇÈÖ¹æ¤Ç¤â»²¾È¤Ç¤¤ë¡£ + + Ê£¿ô¤Î¼°½¸¹ç¤ËƱ¤¸Ì¾Á°¤òÍ¿¤¨¤ë¤³¤È¤Ïµö¤µ¤ì¤Æ¤¤¤ë¡£ + ¤³¤Î¾ì¹ç¤Ë¤Ï¡¢¤³¤Î̾Á°¤ò»ÈÍѤ·¤¿¸åÊý»²¾È¤Ï²Äǽ¤Ç¤¢¤ë¤¬¡¢ + Éôʬ¼°¸Æ½Ð¤·¤Ï¤Ç¤¤Ê¤¤¡£ + + +8. ¸åÊý»²¾È + + \n ÈÖ¹æ»ØÄ껲¾È (n >= 1) + \k<name> ̾Á°»ØÄ껲¾È + + ̾Á°»ØÄ껲¾È¤Ç¡¢¤½¤Î̾Á°¤¬Ê£¿ô¤Î¼°½¸¹ç¤Ç¿½ÅÄêµÁ¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢ + ÈÖ¹æ¤ÎÂ礤¤¼°½¸¹ç¤«¤éÍ¥ÀèŪ¤Ë»²¾È¤µ¤ì¤ë¡£ + (¥Þ¥Ã¥Á¤·¤Ê¤¤¤È¤¤Ë¤ÏÈÖ¹æ¤Î¾®¤µ¤¤¼°½¸¹ç¤¬»²¾È¤µ¤ì¤ë) + + ¢¨ ÈÖ¹æ»ØÄ껲¾È¤Ï¡¢Ì¾Á°ÉÕ¤Êá³Í¼°½¸¹ç¤¬ÄêµÁ¤µ¤ì¡¢ + ¤«¤Ä ONIG_OPTION_CAPTURE_GROUP¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢ + ¶Ø»ß¤µ¤ì¤ë¡£(10. Êá³Í¼°½¸¹ç ¤ò»²¾È) + + + ¥Í¥¹¥È¥ì¥Ù¥ëÉÕ¤¸åÊý»²¾È + + ¤³¤Îµ¡Ç½¤Ï¸½ºß¡¢Ruby 1.9¤Ç¤Ï̵¸ú¤Ë¤·¤Æ¤¤¤ë¡£ + + \k<name+n> n: 0, 1, 2, ... + \k<name-n> n: 0, 1, 2, ... + + ¸åÊý»²¾È¤Î°ÌÃÖ¤«¤éÁêÂÐŪ¤ÊÉôʬ¼°¸Æ½Ð¤·¥Í¥¹¥È¥ì¥Ù¥ë¤ò»ØÄꤷ¤Æ¡¢¤½¤Î¥ì¥Ù¥ë¤Ç¤Î + Êá³ÍÃͤò»²¾È¤¹¤ë¡£ + + Îã-1. + + /\A(?<a>|.|(?:(?<b>.)\g<a>\k<b+0>))\z/.match("reer") + + Îã-2. + + r = Regexp.compile(<<'__REGEXP__'.strip, Regexp::EXTENDED) + (?<element> \g<stag> \g<content>* \g<etag> ){0} + (?<stag> < \g<name> \s* > ){0} + (?<name> [a-zA-Z_:]+ ){0} + (?<content> [^<&]+ (\g<element> | [^<&]+)* ){0} + (?<etag> </ \k<name+1> >){0} + \g<element> + __REGEXP__ + + p r.match('<foo>f<bar>bbb</bar>f</foo>').captures + + + +9. Éôʬ¼°¸Æ½Ð¤· ("ÅÄÃæÅ¯¥¹¥Ú¥·¥ã¥ë") + + \g<name> ̾Á°»ØÄê¸Æ½Ð¤· + \g<n> ÈÖ¹æ»ØÄê¸Æ½Ð¤· (n >= 1) + + ¢¨ ºÇº¸°ÌÃ֤ǤκƵ¢¸Æ½Ð¤·¤Ï¶Ø»ß¤µ¤ì¤ë¡£ + Îã. (?<name>a|\g<name>b) => error + (?<name>a|b\g<name>c) => OK + + ¢¨ ÈÖ¹æ»ØÄê¸Æ½Ð¤·¤Ï¡¢Ì¾Á°ÉÕ¤Êá³Í¼°½¸¹ç¤¬ÄêµÁ¤µ¤ì¡¢ + ¤«¤Ä ONIG_OPTION_CAPTURE_GROUP¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢ + ¶Ø»ß¤µ¤ì¤ë¡£ (10. Êá³Í¼°½¸¹ç ¤ò»²¾È) + + ¢¨ ¸Æ¤Ó½Ð¤µ¤ì¤¿¼°½¸¹ç¤Î¥ª¥×¥·¥ç¥ó¾õÂÖ¤¬¸Æ½Ð¤·Â¦¤Î¥ª¥×¥·¥ç¥ó¾õÂ֤ȰۤʤäƤ¤¤ë + ¤È¤¡¢¸Æ¤Ó½Ð¤µ¤ì¤¿Â¦¤Î¥ª¥×¥·¥ç¥ó¾õÂÖ¤¬Í¸ú¤Ç¤¢¤ë¡£ + + Îã. (?-i:\g<name>)(?i:(?<name>a)){0} ¤Ï "A" ¤Ë¾È¹çÀ®¸ù¤¹¤ë¡£ + + +10. Êá³Í¼°½¸¹ç + + Êá³Í¼°½¸¹ç(...)¤Ï¡¢°Ê²¼¤Î¾ò·ï¤Ë±þ¤¸¤Æ¿¶Éñ¤¬ÊѲ½¤¹¤ë¡£ + (̾Á°ÉÕ¤Êá³Í¼°½¸¹ç¤ÏÊѲ½¤·¤Ê¤¤) + + case 1. /.../ (̾Á°ÉÕ¤Êá³Í¼°½¸¹ç¤ÏÉÔ»ÈÍÑ¡¢¥ª¥×¥·¥ç¥ó¤Ê¤·) + + (...) ¤Ï¡¢Êá³Í¼°½¸¹ç¤È¤·¤Æ°·¤ï¤ì¤ë¡£ + + case 2. /.../g (̾Á°ÉÕ¤Êá³Í¼°½¸¹ç¤ÏÉÔ»ÈÍÑ¡¢¥ª¥×¥·¥ç¥ó 'g'¤ò»ØÄê) + + (...) ¤Ï¡¢ÈóÊá³Í¼°½¸¹ç¤È¤·¤Æ°·¤ï¤ì¤ë¡£ + + case 3. /..(?<name>..)../ (̾Á°ÉÕ¤Êá³Í¼°½¸¹ç¤Ï»ÈÍÑ¡¢¥ª¥×¥·¥ç¥ó¤Ê¤·) + + (...) ¤Ï¡¢ÈóÊá³Í¼°½¸¹ç¤È¤·¤Æ°·¤ï¤ì¤ë¡£ + ÈÖ¹æ»ØÄ껲¾È/¸Æ¤Ó½Ð¤·¤ÏÉÔµö²Ä¡£ + + case 4. /..(?<name>..)../G (̾Á°ÉÕ¤Êá³Í¼°½¸¹ç¤Ï»ÈÍÑ¡¢¥ª¥×¥·¥ç¥ó 'G'¤ò»ØÄê) + + (...) ¤Ï¡¢Êá³Í¼°½¸¹ç¤È¤·¤Æ°·¤ï¤ì¤ë¡£ + ÈÖ¹æ»ØÄ껲¾È/¸Æ¤Ó½Ð¤·¤Ïµö²Ä¡£ + + ⤷ + g: ONIG_OPTION_DONT_CAPTURE_GROUP + G: ONIG_OPTION_CAPTURE_GROUP + ('g'¤È'G'¥ª¥×¥·¥ç¥ó¤Ï¡¢ruby-dev ML¤ÇµÄÏÀ¤µ¤ì¤¿¡£) + + ¤³¤ì¤é¤Î¿¶Éñ¤Î°ÕÌ£¤Ï¡¢ + ̾Á°ÉÕ¤Êá³Í¤È̾Á°Ìµ¤·Êá³Í¤òƱ»þ¤Ë»ÈÍѤ¹¤ëɬÁ³À¤Î¤¢¤ë¾ìÌ̤Ͼ¯¤Ê¤¤¤Ç¤¢¤í¤¦ + ¤È¤¤¤¦Íýͳ¤«¤é¹Í¤¨¤é¤ì¤¿¤â¤Î¤Ç¤¢¤ë¡£ + ¤³¤ì¤é¤Î¥ª¥×¥·¥ç¥ó¤Ë¤Ä¤¤¤Æ¤Ï¡¢Ruby¤Ç¤Ï¸½ºß¼ÂÁõ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£ + + +----------------------------- +Êäµ 1. ʸˡ°Í¸¥ª¥×¥·¥ç¥ó + + + ONIG_SYNTAX_RUBY + (?m): ½ª»ßÉäµ¹æ(.)¤Ï²þ¹Ô¤È¾È¹çÀ®¸ù + + + ONIG_SYNTAX_PERL ¤È ONIG_SYNTAX_JAVA + (?s): ½ª»ßÉäµ¹æ(.)¤Ï²þ¹Ô¤È¾È¹çÀ®¸ù + (?m): ^ ¤Ï²þ¹Ô¤Îľ¸å¤Ë¾È¹ç¤¹¤ë¡¢$ ¤Ï²þ¹Ô¤ÎľÁ°¤Ë¾È¹ç¤¹¤ë + + +Êäµ 2. ÆÈ¼«³ÈÄ¥µ¡Ç½ + + + 16¿Ê¿ô¿ô»ú¡¢Èó16¿Ê¿ô»ú \h, \H + + ̾Á°ÉÕ¤Êá³Í¼°½¸¹ç (?<name>...) + + ̾Á°»ØÄê¸åÊý»²¾È \k<name> + + Éôʬ¼°¸Æ½Ð¤· \g<name>, \g<group-num> + + +Êäµ 3. Perl 5.8.0¤ÈÈæ³Ó¤·¤ÆÂ¸ºß¤·¤Ê¤¤µ¡Ç½ + + + [:word:] + + \N{name} + + \l,\u,\L,\U, \X, \C + + (?{code}) + + (??{code}) + + (?(condition)yes-pat|no-pat) + + * \Q...\E + ⤷ONIG_SYNTAX_PERL¤ÈONIG_SYNTAX_JAVA¤Ç¤Ï͸ú + + * \p{property}, \P{property} + ⤷ONIG_SYNTAX_PERL¤ÈONIG_SYNTAX_JAVA¤Ç¤Ï͸ú + Alnum, Alpha, Blank, Cntrl, Digit, Graph, Lower, + Print, Punct, Space, Upper, XDigit, ASCII¤¬»ØÄê¤Ç¤¤ë¡£ + + ÆÃÀ̾¤ÎÁ°¤Ë 'Is'Á°ÃÖ»ì¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï¡¢ONIG_SYNTAX_PERL¤Ç¤Î¤ß + µö¤µ¤ì¤Æ¤¤¤ë¡£ + ex. \p{IsXDigit}. + + ÆÃÀ¤ÎÈÝÄê±é»»»Ò¤Ï¡¢ONIG_SYNTAX_PERL¤Ç¤Î¤ßµö¤µ¤ì¤Æ¤¤¤ë¡£ + \p{^...}, \P{^...} + + +Êäµ 4. Ruby¤ÎÆüËܸ첽 GNU regex(version 0.12)¤È¤Î°ã¤¤ + + + 16¿Ê¿ô»ú¥¿¥¤¥×Äɲà (\h, \H) + + Ìá¤êÆÉ¤ßµ¡Ç½¤òÄɲà + + ¶¯Íߤʷ«¤êÊÖ¤·»ØÄê»Ò¤òÄɲà (?+, *+, ++) + + ʸ»ú½¸¹ç¤ÎÃæ¤Î±é»»»Ò¤òÄɲà ([...], &&) + ('[' ¤Ï¡¢Ê¸»ú½¸¹ç¤ÎÃæ¤ÇÄ̾ï¤Îʸ»ú¤È¤·¤Æ»ÈÍѤ¹¤ë¤È¤¤Ë¤Ï + ÂàÈò½¤¾þ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤) + + ̾Á°ÉÕ¤Êá³Í¼°½¸¹ç¤È¡¢Éôʬ¼°¸Æ½Ð¤·µ¡Ç½Äɲà + + ¿¥Ð¥¤¥Èʸ»ú¥³¡¼¥É¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¤È¤¡¢ + ʸ»ú½¸¹ç¤ÎÃæ¤ÇȬ¿Ê¿ô¤Þ¤¿¤Ï½½Ï»¿Ê¿ôɽ¸½¤ÎϢ³¤Ï¡¢Â¿¥Ð¥¤¥ÈÉä¹ç¤Çɽ¸½¤µ¤ì¤¿ + °ì¸Ä¤Îʸ»ú¤È²ò¼á¤µ¤ì¤ë + (Îã. [\xa1\xa2], [\xa1\xa7-\xa4\xa1]) + + ʸ»ú½¸¹ç¤ÎÃæ¤Ç¡¢°ì¥Ð¥¤¥Èʸ»ú¤È¿¥Ð¥¤¥Èʸ»ú¤ÎÈϰϻØÄê¤Ïµö¤µ¤ì¤ë¡£ + ex. /[a-¤¢]/ + + ¸ÉΩ¥ª¥×¥·¥ç¥ó¤Î͸úÈϰϤϡ¢¤½¤Î¸ÉΩ¥ª¥×¥·¥ç¥ó¤ò´Þ¤ó¤Ç¤¤¤ë¼°½¸¹ç¤Î + ½ª¤ï¤ê¤Þ¤Ç¤Ç¤¢¤ë + Îã. (?:(?i)a|b) ¤Ï (?:(?i:a|b)) ¤È²ò¼á¤µ¤ì¤ë¡¢(?:(?i:a)|b)¤Ç¤Ï¤Ê¤¤ + + ¸ÉΩ¥ª¥×¥·¥ç¥ó¤Ï¤½¤ÎÁ°¤Î¼°¤ËÂФ·¤ÆÆ©²áŪ¤Ç¤Ï¤Ê¤¤ + Îã. /a(?i)*/ ¤Ïʸˡ¥¨¥é¡¼¤È¤Ê¤ë + + ÉÔ´°Á´¤Ê·«¤êÊÖ¤·ÈϰϻØÄê»Ò¤ÏÄ̾ï¤Îʸ»úÎó¤È¤·¤Æµö²Ä¤µ¤ì¤ë + Îã. /{/, /({)/, /a{2,3/ + + ÈÝÄêŪPOSIX¥Ö¥é¥±¥Ã¥È [:^xxxx:] ¤òÄɲà + + POSIX¥Ö¥é¥±¥Ã¥È [:ascii:] ¤òÄɲà + + ÀèÆÉ¤ß¤Î·«¤êÊÖ¤·¤ÏÉÔµö²Ä + Îã. /(?=a)*/, /(?!b){5}/ + + ¿ôÃͤǻØÄꤵ¤ì¤¿Ê¸»ú¤ËÂФ·¤Æ¤â¡¢Âçʸ»ú¾®Ê¸»ú¾È¹ç¥ª¥×¥·¥ç¥ó¤Ï͸ú + Îã. /\x61/i =~ "A" + + ·«¤êÊÖ¤·²ó¿ô»ØÄê¤Ç¡¢ºÇÄã²ó¿ô¤Î¾Êά(0²ó)¤¬¤Ç¤¤ë + /a{,n}/ == /a{0,n}/ + ºÇÄã²ó¿ô¤ÈºÇÂç²ó¿ô¤ÎƱ»þ¾Êά¤Ïµö¤µ¤ì¤Ê¤¤¡£(/a{,}/) + + /a{n}?/¤Ï̵Íߤʱ黻»Ò¤Ç¤Ï¤Ê¤¤¡£ + /a{n}?/ == /(?:a{n})?/ + + ̵¸ú¤Ê¸åÊý»²¾È¤ò¥Á¥§¥Ã¥¯¤·¤Æ¥¨¥é¡¼¤Ë¤¹¤ë¡£ + /\1/, /(a)\2/ + + ̵¸Â·«¤êÊÖ¤·¤ÎÃæ¤Ç¡¢Ä¹¤µÎí¤Ç¤Î¾È¹çÀ®¸ù¤Ï·«¤êÊÖ¤·¤òÃæÃǤµ¤»¤ë¤¬¡¢ + ¤³¤Î¤È¤¡¢ÃæÃǤ¹¤Ù¤¤«¤É¤¦¤«¤ÎȽÄê¤È¤·¤Æ¡¢Êá³Í¼°½¸¹ç¤ÎÊá³Í¾õÂ֤Π+ ÊѲ½¤Þ¤Ç¹Íθ¤·¤Æ¤¤¤ë + /(?:()|())*\1\2/ =~ "" + /(?:\1a|())*/ =~ "a" + + + +Êäµ 5. ¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¤¬¡¢´ûÄêÃͤǤÏ͸ú¤Ë¤·¤Æ¤¤¤Ê¤¤µ¡Ç½ + + + Êá³ÍÍúÎò»²¾È + + (?@...) ¤È (?@<name>...) + + Îã. /(?@a)*/.match("aaa") ==> [<0-1>, <1-2>, <2-3>] + + »ÈÍÑÊýË¡¤Ï¡¢sample/listcap.c¤ò»²¾È + + ͸ú¤Ë¤·¤Æ¤¤¤Ê¤¤Íýͳ¤Ï¡¢¤É¤ÎÄøÅÙÌò¤ËΩ¤Ä¤«¤Ï¤Ã¤¤ê¤·¤Ê¤¤¤¿¤á¡£ + + +Êäµ 6. ÌäÂêÅÀ + + + UTF-8¤Ç¡¢¥Ð¥¤¥ÈÃͤ¬Å¬Àµ¤Ê²Á¤«¤É¤¦¤«¤Î¥Á¥§¥Ã¥¯¤Ï¹Ô¤Ê¤Ã¤Æ¤¤¤Ê¤¤¡£ + + * ÀèÆ¬¥Ð¥¤¥È¤È¤·¤ÆÉÔÀµ¤Ê¥Ð¥¤¥È¤ò°ìʸ»ú¤È¤ß¤Ê¤¹ + /./u =~ "\xa3" + + * ÉÔ´°Á´¤Ê¥Ð¥¤¥È¥·¡¼¥±¥ó¥¹¤Î¥Á¥§¥Ã¥¯¤ò¤·¤Ê¤¤ + /\w+/ =~ "a\xf3\x8ec" + + ¤³¤ì¤òÄ´¤Ù¤ë¤³¤È¤Ï²Äǽ¤Ç¤Ï¤¢¤ë¤¬¡¢ÃÙ¤¯¤Ê¤ë¤Î¤Ç¹Ô¤Ê¤ï¤Ê¤¤¡£ + +½ª¤ê diff --git a/ext/mbstring/oniguruma/enc/ascii.c b/ext/mbstring/oniguruma/enc/ascii.c new file mode 100644 index 0000000..64be21d --- /dev/null +++ b/ext/mbstring/oniguruma/enc/ascii.c @@ -0,0 +1,67 @@ +/********************************************************************** + ascii.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2004 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +static int +ascii_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 128) + return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype); + else + return FALSE; +} + +OnigEncodingType OnigEncodingASCII = { + onigenc_single_byte_mbc_enc_len, + "US-ASCII", /* name */ + 1, /* max byte length */ + 1, /* min byte length */ + ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE, + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + onigenc_single_byte_mbc_to_code, + onigenc_single_byte_code_to_mbclen, + onigenc_single_byte_code_to_mbc, + onigenc_ascii_mbc_to_normalize, + onigenc_ascii_is_mbc_ambiguous, + onigenc_ascii_get_all_pair_ambig_codes, + onigenc_nothing_get_all_comp_ambig_codes, + ascii_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + onigenc_single_byte_left_adjust_char_head, + onigenc_always_true_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/big5.c b/ext/mbstring/oniguruma/enc/big5.c new file mode 100644 index 0000000..8679266 --- /dev/null +++ b/ext/mbstring/oniguruma/enc/big5.c @@ -0,0 +1,168 @@ +/********************************************************************** + big5.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2005 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +static const int EncLen_BIG5[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 +}; + +static int +big5_mbc_enc_len(const UChar* p) +{ + return EncLen_BIG5[*p]; +} + +static OnigCodePoint +big5_mbc_to_code(const UChar* p, const UChar* end) +{ + return onigenc_mbn_mbc_to_code(ONIG_ENCODING_BIG5, p, end); +} + +static int +big5_code_to_mbc(OnigCodePoint code, UChar *buf) +{ + return onigenc_mb2_code_to_mbc(ONIG_ENCODING_BIG5, code, buf); +} + +static int +big5_mbc_to_normalize(OnigAmbigType flag, const UChar** pp, const UChar* end, + UChar* lower) +{ + return onigenc_mbn_mbc_to_normalize(ONIG_ENCODING_BIG5, flag, + pp, end, lower); +} + +static int +big5_is_mbc_ambiguous(OnigAmbigType flag, const UChar** pp, const UChar* end) +{ + return onigenc_mbn_is_mbc_ambiguous(ONIG_ENCODING_BIG5, flag, pp, end); +} + +static int +big5_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + return onigenc_mb2_is_code_ctype(ONIG_ENCODING_BIG5, code, ctype); +} + +static const char BIG5_CAN_BE_TRAIL_TABLE[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 +}; + +#define BIG5_ISMB_FIRST(byte) (EncLen_BIG5[byte] > 1) +#define BIG5_ISMB_TRAIL(byte) BIG5_CAN_BE_TRAIL_TABLE[(byte)] + +static UChar* +big5_left_adjust_char_head(const UChar* start, const UChar* s) +{ + const UChar *p; + int len; + + if (s <= start) return (UChar* )s; + p = s; + + if (BIG5_ISMB_TRAIL(*p)) { + while (p > start) { + if (! BIG5_ISMB_FIRST(*--p)) { + p++; + break; + } + } + } + len = enc_len(ONIG_ENCODING_BIG5, p); + if (p + len > s) return (UChar* )p; + p += len; + return (UChar* )(p + ((s - p) & ~1)); +} + +static int +big5_is_allowed_reverse_match(const UChar* s, const UChar* end) +{ + const UChar c = *s; + + return (BIG5_ISMB_TRAIL(c) ? FALSE : TRUE); +} + +OnigEncodingType OnigEncodingBIG5 = { + big5_mbc_enc_len, + "Big5", /* name */ + 2, /* max enc length */ + 1, /* min enc length */ + ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE, + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + big5_mbc_to_code, + onigenc_mb2_code_to_mbclen, + big5_code_to_mbc, + big5_mbc_to_normalize, + big5_is_mbc_ambiguous, + onigenc_ascii_get_all_pair_ambig_codes, + onigenc_nothing_get_all_comp_ambig_codes, + big5_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + big5_left_adjust_char_head, + big5_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/euc_jp.c b/ext/mbstring/oniguruma/enc/euc_jp.c new file mode 100644 index 0000000..71c81ee --- /dev/null +++ b/ext/mbstring/oniguruma/enc/euc_jp.c @@ -0,0 +1,228 @@ +/********************************************************************** + euc_jp.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2005 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define eucjp_islead(c) ((UChar )((c) - 0xa1) > 0xfe - 0xa1) + +static const int EncLen_EUCJP[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 +}; + +static int +eucjp_mbc_enc_len(const UChar* p) +{ + return EncLen_EUCJP[*p]; +} + +static OnigCodePoint +eucjp_mbc_to_code(const UChar* p, const UChar* end) +{ + int c, i, len; + OnigCodePoint n; + + len = enc_len(ONIG_ENCODING_EUC_JP, p); + n = (OnigCodePoint )*p++; + if (len == 1) return n; + + for (i = 1; i < len; i++) { + if (p >= end) break; + c = *p++; + n <<= 8; n += c; + } + return n; +} + +static int +eucjp_code_to_mbclen(OnigCodePoint code) +{ + if (ONIGENC_IS_CODE_ASCII(code)) return 1; + else if ((code & 0xff0000) != 0) return 3; + else if ((code & 0xff00) != 0) return 2; + else return 0; +} + +#if 0 +static int +eucjp_code_to_mbc_first(OnigCodePoint code) +{ + int first; + + if ((code & 0xff0000) != 0) { + first = (code >> 16) & 0xff; + } + else if ((code & 0xff00) != 0) { + first = (code >> 8) & 0xff; + } + else { + return (int )code; + } + return first; +} +#endif + +static int +eucjp_code_to_mbc(OnigCodePoint code, UChar *buf) +{ + UChar *p = buf; + + if ((code & 0xff0000) != 0) *p++ = (UChar )(((code >> 16) & 0xff)); + if ((code & 0xff00) != 0) *p++ = (UChar )(((code >> 8) & 0xff)); + *p++ = (UChar )(code & 0xff); + +#if 1 + if (enc_len(ONIG_ENCODING_EUC_JP, buf) != (p - buf)) + return ONIGENCERR_INVALID_WIDE_CHAR_VALUE; +#endif + return p - buf; +} + +static int +eucjp_mbc_to_normalize(OnigAmbigType flag, + const UChar** pp, const UChar* end, UChar* lower) +{ + int len; + const UChar* p = *pp; + + if (ONIGENC_IS_MBC_ASCII(p)) { + if ((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0) { + *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + + (*pp)++; + return 1; + } + else { + len = enc_len(ONIG_ENCODING_EUC_JP, p); + if (lower != p) { + int i; + for (i = 0; i < len; i++) { + *lower++ = *p++; + } + } + (*pp) += len; + return len; /* return byte length of converted char to lower */ + } +} + +static int +eucjp_is_mbc_ambiguous(OnigAmbigType flag, const UChar** pp, const UChar* end) +{ + return onigenc_mbn_is_mbc_ambiguous(ONIG_ENCODING_EUC_JP, flag, pp, end); +} + +static int +eucjp_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 128) + return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype); + else { + if ((ctype & (ONIGENC_CTYPE_WORD | + ONIGENC_CTYPE_GRAPH | ONIGENC_CTYPE_PRINT)) != 0) { + return (eucjp_code_to_mbclen(code) > 1 ? TRUE : FALSE); + } + } + + return FALSE; +} + +static UChar* +eucjp_left_adjust_char_head(const UChar* start, const UChar* s) +{ + /* In this encoding + mb-trail bytes doesn't mix with single bytes. + */ + const UChar *p; + int len; + + if (s <= start) return (UChar* )s; + p = s; + + while (!eucjp_islead(*p) && p > start) p--; + len = enc_len(ONIG_ENCODING_EUC_JP, p); + if (p + len > s) return (UChar* )p; + p += len; + return (UChar* )(p + ((s - p) & ~1)); +} + +static int +eucjp_is_allowed_reverse_match(const UChar* s, const UChar* end) +{ + const UChar c = *s; + if (c <= 0x7e || c == 0x8e || c == 0x8f) + return TRUE; + else + return FALSE; +} + +OnigEncodingType OnigEncodingEUC_JP = { + eucjp_mbc_enc_len, + "EUC-JP", /* name */ + 3, /* max enc length */ + 1, /* min enc length */ + ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE, + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + eucjp_mbc_to_code, + eucjp_code_to_mbclen, + eucjp_code_to_mbc, + eucjp_mbc_to_normalize, + eucjp_is_mbc_ambiguous, + onigenc_ascii_get_all_pair_ambig_codes, + onigenc_nothing_get_all_comp_ambig_codes, + eucjp_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + eucjp_left_adjust_char_head, + eucjp_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/euc_kr.c b/ext/mbstring/oniguruma/enc/euc_kr.c new file mode 100644 index 0000000..57bf801 --- /dev/null +++ b/ext/mbstring/oniguruma/enc/euc_kr.c @@ -0,0 +1,173 @@ +/********************************************************************** + euc_kr.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2005 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +static const int EncLen_EUCKR[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 +}; + +static int +euckr_mbc_enc_len(const UChar* p) +{ + return EncLen_EUCKR[*p]; +} + +static OnigCodePoint +euckr_mbc_to_code(const UChar* p, const UChar* end) +{ + return onigenc_mbn_mbc_to_code(ONIG_ENCODING_EUC_KR, p, end); +} + +static int +euckr_code_to_mbc(OnigCodePoint code, UChar *buf) +{ + return onigenc_mb2_code_to_mbc(ONIG_ENCODING_EUC_KR, code, buf); +} + +static int +euckr_mbc_to_normalize(OnigAmbigType flag, const UChar** pp, const UChar* end, + UChar* lower) +{ + return onigenc_mbn_mbc_to_normalize(ONIG_ENCODING_EUC_KR, flag, + pp, end, lower); +} + +static int +euckr_is_mbc_ambiguous(OnigAmbigType flag, const UChar** pp, const UChar* end) +{ + return onigenc_mbn_is_mbc_ambiguous(ONIG_ENCODING_EUC_KR, flag, pp, end); +} + +static int +euckr_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + return onigenc_mb2_is_code_ctype(ONIG_ENCODING_EUC_KR, code, ctype); +} + +#define euckr_islead(c) ((c) < 0xa1 || (c) == 0xff) + +static UChar* +euckr_left_adjust_char_head(const UChar* start, const UChar* s) +{ + /* Assumed in this encoding, + mb-trail bytes don't mix with single bytes. + */ + const UChar *p; + int len; + + if (s <= start) return (UChar* )s; + p = s; + + while (!euckr_islead(*p) && p > start) p--; + len = enc_len(ONIG_ENCODING_EUC_KR, p); + if (p + len > s) return (UChar* )p; + p += len; + return (UChar* )(p + ((s - p) & ~1)); +} + +static int +euckr_is_allowed_reverse_match(const UChar* s, const UChar* end) +{ + const UChar c = *s; + if (c <= 0x7e) return TRUE; + else return FALSE; +} + +OnigEncodingType OnigEncodingEUC_KR = { + euckr_mbc_enc_len, + "EUC-KR", /* name */ + 2, /* max enc length */ + 1, /* min enc length */ + ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE, + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + euckr_mbc_to_code, + onigenc_mb2_code_to_mbclen, + euckr_code_to_mbc, + euckr_mbc_to_normalize, + euckr_is_mbc_ambiguous, + onigenc_ascii_get_all_pair_ambig_codes, + onigenc_nothing_get_all_comp_ambig_codes, + euckr_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + euckr_left_adjust_char_head, + euckr_is_allowed_reverse_match +}; + +/* Same with OnigEncodingEUC_KR except the name */ +OnigEncodingType OnigEncodingEUC_CN = { + euckr_mbc_enc_len, + "EUC-CN", /* name */ + 2, /* max enc length */ + 1, /* min enc length */ + ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE, + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + euckr_mbc_to_code, + onigenc_mb2_code_to_mbclen, + euckr_code_to_mbc, + euckr_mbc_to_normalize, + euckr_is_mbc_ambiguous, + onigenc_ascii_get_all_pair_ambig_codes, + onigenc_nothing_get_all_comp_ambig_codes, + euckr_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + euckr_left_adjust_char_head, + euckr_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/euc_tw.c b/ext/mbstring/oniguruma/enc/euc_tw.c new file mode 100644 index 0000000..6f396e7 --- /dev/null +++ b/ext/mbstring/oniguruma/enc/euc_tw.c @@ -0,0 +1,144 @@ +/********************************************************************** + euc_tw.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2005 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +static const int EncLen_EUCTW[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 +}; + +static int +euctw_mbc_enc_len(const UChar* p) +{ + return EncLen_EUCTW[*p]; +} + +static OnigCodePoint +euctw_mbc_to_code(const UChar* p, const UChar* end) +{ + return onigenc_mbn_mbc_to_code(ONIG_ENCODING_EUC_TW, p, end); +} + +static int +euctw_code_to_mbc(OnigCodePoint code, UChar *buf) +{ + return onigenc_mb4_code_to_mbc(ONIG_ENCODING_EUC_TW, code, buf); +} + +static int +euctw_mbc_to_normalize(OnigAmbigType flag, const UChar** pp, const UChar* end, + UChar* lower) +{ + return onigenc_mbn_mbc_to_normalize(ONIG_ENCODING_EUC_TW, flag, + pp, end, lower); +} + +static int +euctw_is_mbc_ambiguous(OnigAmbigType flag, const UChar** pp, const UChar* end) +{ + return onigenc_mbn_is_mbc_ambiguous(ONIG_ENCODING_EUC_TW, flag, pp, end); +} + +static int +euctw_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + return onigenc_mb4_is_code_ctype(ONIG_ENCODING_EUC_TW, code, ctype); +} + +#define euctw_islead(c) (((c) < 0xa1 && (c) != 0x8e) || (c) == 0xff) + +static UChar* +euctw_left_adjust_char_head(const UChar* start, const UChar* s) +{ + /* Assumed in this encoding, + mb-trail bytes don't mix with single bytes. + */ + const UChar *p; + int len; + + if (s <= start) return (UChar* )s; + p = s; + + while (!euctw_islead(*p) && p > start) p--; + len = enc_len(ONIG_ENCODING_EUC_TW, p); + if (p + len > s) return (UChar* )p; + p += len; + return (UChar* )(p + ((s - p) & ~1)); +} + +static int +euctw_is_allowed_reverse_match(const UChar* s, const UChar* end) +{ + const UChar c = *s; + if (c <= 0x7e) return TRUE; + else return FALSE; +} + +OnigEncodingType OnigEncodingEUC_TW = { + euctw_mbc_enc_len, + "EUC-TW", /* name */ + 4, /* max enc length */ + 1, /* min enc length */ + ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE, + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + euctw_mbc_to_code, + onigenc_mb4_code_to_mbclen, + euctw_code_to_mbc, + euctw_mbc_to_normalize, + euctw_is_mbc_ambiguous, + onigenc_ascii_get_all_pair_ambig_codes, + onigenc_nothing_get_all_comp_ambig_codes, + euctw_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + euctw_left_adjust_char_head, + euctw_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/gb18030.c b/ext/mbstring/oniguruma/enc/gb18030.c new file mode 100644 index 0000000..01995ea --- /dev/null +++ b/ext/mbstring/oniguruma/enc/gb18030.c @@ -0,0 +1,501 @@ +/********************************************************************** + gb18030.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2005 KUBO Takehiro <kubo AT jiubao DOT org> + * K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#if 1 +#define DEBUG_GB18030(arg) +#else +#define DEBUG_GB18030(arg) printf arg +#endif + +enum { + C1, /* one-byte char */ + C2, /* one-byte or second of two-byte char */ + C4, /* one-byte or second or fourth of four-byte char */ + CM /* first of two- or four-byte char or second of two-byte char */ +}; + +static const char GB18030_MAP[] = { + C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, + C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, + C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, C1, + C4, C4, C4, C4, C4, C4, C4, C4, C4, C4, C1, C1, C1, C1, C1, C1, + C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, + C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, + C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, + C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C2, C1, + C2, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, + CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, + CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, + CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, + CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, + CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, + CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, + CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, CM, C1 +}; + +static int +gb18030_mbc_enc_len(const UChar* p) +{ + if (GB18030_MAP[*p] != CM) + return 1; + p++; + if (GB18030_MAP[*p] == C4) + return 4; + if (GB18030_MAP[*p] == C1) + return 1; /* illegal sequence */ + return 2; +} + +static OnigCodePoint +gb18030_mbc_to_code(const UChar* p, const UChar* end) +{ + return onigenc_mbn_mbc_to_code(ONIG_ENCODING_GB18030, p, end); +} + +static int +gb18030_code_to_mbc(OnigCodePoint code, UChar *buf) +{ + return onigenc_mb4_code_to_mbc(ONIG_ENCODING_GB18030, code, buf); +} + +static int +gb18030_mbc_to_normalize(OnigAmbigType flag, const UChar** pp, const UChar* end, + UChar* lower) +{ + return onigenc_mbn_mbc_to_normalize(ONIG_ENCODING_GB18030, flag, + pp, end, lower); +} + +static int +gb18030_is_mbc_ambiguous(OnigAmbigType flag, const UChar** pp, const UChar* end) +{ + return onigenc_mbn_is_mbc_ambiguous(ONIG_ENCODING_GB18030, flag, pp, end); +} + +static int +gb18030_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + return onigenc_mb4_is_code_ctype(ONIG_ENCODING_GB18030, code, ctype); +} + +enum state { + S_START, + S_one_C2, + S_one_C4, + S_one_CM, + + S_odd_CM_one_CX, + S_even_CM_one_CX, + + /* CMC4 : pair of "CM C4" */ + S_one_CMC4, + S_odd_CMC4, + S_one_C4_odd_CMC4, + S_even_CMC4, + S_one_C4_even_CMC4, + + S_odd_CM_odd_CMC4, + S_even_CM_odd_CMC4, + + S_odd_CM_even_CMC4, + S_even_CM_even_CMC4, + + /* C4CM : pair of "C4 CM" */ + S_odd_C4CM, + S_one_CM_odd_C4CM, + S_even_C4CM, + S_one_CM_even_C4CM, + + S_even_CM_odd_C4CM, + S_odd_CM_odd_C4CM, + S_even_CM_even_C4CM, + S_odd_CM_even_C4CM, +}; + +static UChar* +gb18030_left_adjust_char_head(const UChar* start, const UChar* s) +{ + const UChar *p; + enum state state = S_START; + + DEBUG_GB18030(("----------------\n")); + for (p = s; p >= start; p--) { + DEBUG_GB18030(("state %d --(%02x)-->\n", state, *p)); + switch (state) { + case S_START: + switch (GB18030_MAP[*p]) { + case C1: + return (UChar *)s; + case C2: + state = S_one_C2; /* C2 */ + break; + case C4: + state = S_one_C4; /* C4 */ + break; + case CM: + state = S_one_CM; /* CM */ + break; + } + break; + case S_one_C2: /* C2 */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + case C4: + return (UChar *)s; + case CM: + state = S_odd_CM_one_CX; /* CM C2 */ + break; + } + break; + case S_one_C4: /* C4 */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + case C4: + return (UChar *)s; + case CM: + state = S_one_CMC4; + break; + } + break; + case S_one_CM: /* CM */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + return (UChar *)s; + case C4: + state = S_odd_C4CM; + break; + case CM: + state = S_odd_CM_one_CX; /* CM CM */ + break; + } + break; + + case S_odd_CM_one_CX: /* CM C2 */ /* CM CM */ /* CM CM CM C4 */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + case C4: + return (UChar *)(s - 1); + case CM: + state = S_even_CM_one_CX; + break; + } + break; + case S_even_CM_one_CX: /* CM CM C2 */ /* CM CM CM */ /* CM CM C4 */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + case C4: + return (UChar *)s; + case CM: + state = S_odd_CM_one_CX; + break; + } + break; + + case S_one_CMC4: /* CM C4 */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + return (UChar *)(s - 1); + case C4: + state = S_one_C4_odd_CMC4; /* C4 CM C4 */ + break; + case CM: + state = S_even_CM_one_CX; /* CM CM C4 */ + break; + } + break; + case S_odd_CMC4: /* CM C4 CM C4 CM C4 */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + return (UChar *)(s - 1); + case C4: + state = S_one_C4_odd_CMC4; + break; + case CM: + state = S_odd_CM_odd_CMC4; + break; + } + break; + case S_one_C4_odd_CMC4: /* C4 CM C4 */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + case C4: + return (UChar *)(s - 1); + case CM: + state = S_even_CMC4; /* CM C4 CM C4 */ + break; + } + break; + case S_even_CMC4: /* CM C4 CM C4 */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + return (UChar *)(s - 3); + case C4: + state = S_one_C4_even_CMC4; + break; + case CM: + state = S_odd_CM_even_CMC4; + break; + } + break; + case S_one_C4_even_CMC4: /* C4 CM C4 CM C4 */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + case C4: + return (UChar *)(s - 3); + case CM: + state = S_odd_CMC4; + break; + } + break; + + case S_odd_CM_odd_CMC4: /* CM CM C4 CM C4 CM C4 */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + case C4: + return (UChar *)(s - 3); + case CM: + state = S_even_CM_odd_CMC4; + break; + } + break; + case S_even_CM_odd_CMC4: /* CM CM CM C4 CM C4 CM C4 */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + case C4: + return (UChar *)(s - 1); + case CM: + state = S_odd_CM_odd_CMC4; + break; + } + break; + + case S_odd_CM_even_CMC4: /* CM CM C4 CM C4 */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + case C4: + return (UChar *)(s - 1); + case CM: + state = S_even_CM_even_CMC4; + break; + } + break; + case S_even_CM_even_CMC4: /* CM CM CM C4 CM C4 */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + case C4: + return (UChar *)(s - 3); + case CM: + state = S_odd_CM_even_CMC4; + break; + } + break; + + case S_odd_C4CM: /* C4 CM */ /* C4 CM C4 CM C4 CM*/ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + case C4: + return (UChar *)s; + case CM: + state = S_one_CM_odd_C4CM; /* CM C4 CM */ + break; + } + break; + case S_one_CM_odd_C4CM: /* CM C4 CM */ /* CM C4 CM C4 CM C4 CM */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + return (UChar *)(s - 2); /* |CM C4 CM */ + case C4: + state = S_even_C4CM; + break; + case CM: + state = S_even_CM_odd_C4CM; + break; + } + break; + case S_even_C4CM: /* C4 CM C4 CM */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + case C4: + return (UChar *)(s - 2); /* C4|CM C4 CM */ + case CM: + state = S_one_CM_even_C4CM; + break; + } + break; + case S_one_CM_even_C4CM: /* CM C4 CM C4 CM */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + return (UChar *)(s - 0); /*|CM C4 CM C4|CM */ + case C4: + state = S_odd_C4CM; + break; + case CM: + state = S_even_CM_even_C4CM; + break; + } + break; + + case S_even_CM_odd_C4CM: /* CM CM C4 CM */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + case C4: + return (UChar *)(s - 0); /* |CM CM|C4|CM */ + case CM: + state = S_odd_CM_odd_C4CM; + break; + } + break; + case S_odd_CM_odd_C4CM: /* CM CM CM C4 CM */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + case C4: + return (UChar *)(s - 2); /* |CM CM|CM C4 CM */ + case CM: + state = S_even_CM_odd_C4CM; + break; + } + break; + + case S_even_CM_even_C4CM: /* CM CM C4 CM C4 CM */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + case C4: + return (UChar *)(s - 2); /* |CM CM|C4|CM C4 CM */ + case CM: + state = S_odd_CM_even_C4CM; + break; + } + break; + case S_odd_CM_even_C4CM: /* CM CM CM C4 CM C4 CM */ + switch (GB18030_MAP[*p]) { + case C1: + case C2: + case C4: + return (UChar *)(s - 0); /* |CM CM|CM C4 CM C4|CM */ + case CM: + state = S_even_CM_even_C4CM; + break; + } + break; + } + } + + DEBUG_GB18030(("state %d\n", state)); + switch (state) { + case S_START: return (UChar *)(s - 0); + case S_one_C2: return (UChar *)(s - 0); + case S_one_C4: return (UChar *)(s - 0); + case S_one_CM: return (UChar *)(s - 0); + + case S_odd_CM_one_CX: return (UChar *)(s - 1); + case S_even_CM_one_CX: return (UChar *)(s - 0); + + case S_one_CMC4: return (UChar *)(s - 1); + case S_odd_CMC4: return (UChar *)(s - 1); + case S_one_C4_odd_CMC4: return (UChar *)(s - 1); + case S_even_CMC4: return (UChar *)(s - 3); + case S_one_C4_even_CMC4: return (UChar *)(s - 3); + + case S_odd_CM_odd_CMC4: return (UChar *)(s - 3); + case S_even_CM_odd_CMC4: return (UChar *)(s - 1); + + case S_odd_CM_even_CMC4: return (UChar *)(s - 1); + case S_even_CM_even_CMC4: return (UChar *)(s - 3); + + case S_odd_C4CM: return (UChar *)(s - 0); + case S_one_CM_odd_C4CM: return (UChar *)(s - 2); + case S_even_C4CM: return (UChar *)(s - 2); + case S_one_CM_even_C4CM: return (UChar *)(s - 0); + + case S_even_CM_odd_C4CM: return (UChar *)(s - 0); + case S_odd_CM_odd_C4CM: return (UChar *)(s - 2); + case S_even_CM_even_C4CM: return (UChar *)(s - 2); + case S_odd_CM_even_C4CM: return (UChar *)(s - 0); + } + + return (UChar* )s; /* never come here. (escape warning) */ +} + +static int +gb18030_is_allowed_reverse_match(const UChar* s, const UChar* end) +{ + return GB18030_MAP[*s] == C1 ? TRUE : FALSE; +} + +OnigEncodingType OnigEncodingGB18030 = { + gb18030_mbc_enc_len, + "GB18030", /* name */ + 4, /* max enc length */ + 1, /* min enc length */ + ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE, + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + gb18030_mbc_to_code, + onigenc_mb4_code_to_mbclen, + gb18030_code_to_mbc, + gb18030_mbc_to_normalize, + gb18030_is_mbc_ambiguous, + onigenc_ascii_get_all_pair_ambig_codes, + onigenc_nothing_get_all_comp_ambig_codes, + gb18030_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + gb18030_left_adjust_char_head, + gb18030_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/iso8859_1.c b/ext/mbstring/oniguruma/enc/iso8859_1.c new file mode 100644 index 0000000..5646f26 --- /dev/null +++ b/ext/mbstring/oniguruma/enc/iso8859_1.c @@ -0,0 +1,151 @@ +/********************************************************************** + iso8859_1.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define ENC_IS_ISO_8859_1_CTYPE(code,ctype) \ + ((EncISO_8859_1_CtypeTable[code] & ctype) != 0) + +static const unsigned short EncISO_8859_1_CtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x220c, 0x2209, 0x2208, 0x2208, 0x2208, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0284, 0x01a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x10e2, 0x01a0, 0x00a0, 0x01a0, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x10a0, 0x10a0, 0x00a0, 0x10e2, 0x00a0, 0x01a0, + 0x00a0, 0x10a0, 0x10e2, 0x01a0, 0x10a0, 0x10a0, 0x10a0, 0x01a0, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x00a0, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x00a0, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2 +}; + +static int +iso_8859_1_mbc_to_normalize(OnigAmbigType flag, const UChar** pp, const UChar* end, UChar* lower) +{ + const UChar* p = *pp; + + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + *lower = ONIGENC_ISO_8859_1_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + (*pp)++; + return 1; /* return byte length of converted char to lower */ +} + +static int +iso_8859_1_is_mbc_ambiguous(OnigAmbigType flag, + const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + (*pp)++; + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + int v = (EncISO_8859_1_CtypeTable[*p] & + (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER)); + + if ((v | ONIGENC_CTYPE_LOWER) != 0) { + /* 0xdf, 0xaa, 0xb5, 0xba are lower case letter, but can't convert. */ + if (*p == 0xdf || (*p >= 0xaa && *p <= 0xba)) + return FALSE; + else + return TRUE; + } + + return (v != 0 ? TRUE : FALSE); + } + return FALSE; +} + +static int +iso_8859_1_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 256) + return ENC_IS_ISO_8859_1_CTYPE(code, ctype); + else + return FALSE; +} + +OnigEncodingType OnigEncodingISO_8859_1 = { + onigenc_single_byte_mbc_enc_len, + "ISO-8859-1", /* name */ + 1, /* max enc length */ + 1, /* min enc length */ + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + onigenc_single_byte_mbc_to_code, + onigenc_single_byte_code_to_mbclen, + onigenc_single_byte_code_to_mbc, + iso_8859_1_mbc_to_normalize, + iso_8859_1_is_mbc_ambiguous, + onigenc_iso_8859_1_get_all_pair_ambig_codes, + onigenc_ess_tsett_get_all_comp_ambig_codes, + iso_8859_1_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + onigenc_single_byte_left_adjust_char_head, + onigenc_always_true_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/iso8859_10.c b/ext/mbstring/oniguruma/enc/iso8859_10.c new file mode 100644 index 0000000..8081ef8 --- /dev/null +++ b/ext/mbstring/oniguruma/enc/iso8859_10.c @@ -0,0 +1,300 @@ +/********************************************************************** + iso8859_10.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define ENC_ISO_8859_10_TO_LOWER_CASE(c) EncISO_8859_10_ToLowerCaseTable[c] +#define ENC_IS_ISO_8859_10_CTYPE(code,ctype) \ + ((EncISO_8859_10_CtypeTable[code] & ctype) != 0) + +static const UChar EncISO_8859_10_ToLowerCaseTable[256] = { + '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', + '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', + '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', + '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', + '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', + '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', + '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', + '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', + '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', + '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', + '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', + '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', + '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', + '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', + '\240', '\261', '\262', '\263', '\264', '\265', '\266', '\247', + '\270', '\271', '\272', '\273', '\274', '\255', '\276', '\277', + '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', + '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377' +}; + +static const unsigned short EncISO_8859_10_CtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x220c, 0x2209, 0x2208, 0x2208, 0x2208, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0284, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x00a0, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x01a0, 0x14a2, 0x14a2, + 0x00a0, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x01a0, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x01a0, 0x10e2, 0x10e2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2 +}; + +static int +iso_8859_10_mbc_to_normalize(OnigAmbigType flag, + const UChar** pp, const UChar* end, UChar* lower) +{ + const UChar* p = *pp; + + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + *lower = ENC_ISO_8859_10_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + (*pp)++; + return 1; /* return byte length of converted char to lower */ +} + +static int +iso_8859_10_is_mbc_ambiguous(OnigAmbigType flag, + const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + (*pp)++; + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + int v = (EncISO_8859_10_CtypeTable[*p] & + (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER)); + + if ((v | ONIGENC_CTYPE_LOWER) != 0) { + /* 0xdf is lower case letter, but can't convert. */ + if (*p == 0xdf) + return FALSE; + else + return TRUE; + } + + return (v != 0 ? TRUE : FALSE); + } + return FALSE; +} + +static int +iso_8859_10_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 256) + return ENC_IS_ISO_8859_10_CTYPE(code, ctype); + else + return FALSE; +} + +static int +iso_8859_10_get_all_pair_ambig_codes(OnigAmbigType flag, + const OnigPairAmbigCodes** ccs) +{ + static const OnigPairAmbigCodes cc[] = { + { 0xa1, 0xb1 }, + { 0xa2, 0xb2 }, + { 0xa3, 0xb3 }, + { 0xa4, 0xb4 }, + { 0xa5, 0xb5 }, + { 0xa6, 0xb6 }, + { 0xa8, 0xb8 }, + { 0xa9, 0xb9 }, + { 0xaa, 0xba }, + { 0xab, 0xbb }, + { 0xac, 0xbc }, + { 0xae, 0xbe }, + { 0xaf, 0xbf }, + + { 0xb1, 0xa1 }, + { 0xb2, 0xa2 }, + { 0xb3, 0xa3 }, + { 0xb4, 0xa4 }, + { 0xb5, 0xa5 }, + { 0xb6, 0xa6 }, + { 0xb8, 0xa8 }, + { 0xb9, 0xa9 }, + { 0xba, 0xaa }, + { 0xbb, 0xab }, + { 0xbc, 0xac }, + { 0xbe, 0xae }, + { 0xbf, 0xaf }, + + { 0xc0, 0xe0 }, + { 0xc1, 0xe1 }, + { 0xc2, 0xe2 }, + { 0xc3, 0xe3 }, + { 0xc4, 0xe4 }, + { 0xc5, 0xe5 }, + { 0xc6, 0xe6 }, + { 0xc7, 0xe7 }, + { 0xc8, 0xe8 }, + { 0xc9, 0xe9 }, + { 0xca, 0xea }, + { 0xcb, 0xeb }, + { 0xcc, 0xec }, + { 0xcd, 0xed }, + { 0xce, 0xee }, + { 0xcf, 0xef }, + + { 0xd0, 0xf0 }, + { 0xd1, 0xf1 }, + { 0xd2, 0xf2 }, + { 0xd3, 0xf3 }, + { 0xd4, 0xf4 }, + { 0xd5, 0xf5 }, + { 0xd6, 0xf6 }, + { 0xd7, 0xf7 }, + { 0xd8, 0xf8 }, + { 0xd9, 0xf9 }, + { 0xda, 0xfa }, + { 0xdb, 0xfb }, + { 0xdc, 0xfc }, + { 0xdd, 0xfd }, + { 0xde, 0xfe }, + + { 0xe0, 0xc0 }, + { 0xe1, 0xc1 }, + { 0xe2, 0xc2 }, + { 0xe3, 0xc3 }, + { 0xe4, 0xc4 }, + { 0xe5, 0xc5 }, + { 0xe6, 0xc6 }, + { 0xe7, 0xc7 }, + { 0xe8, 0xc8 }, + { 0xe9, 0xc9 }, + { 0xea, 0xca }, + { 0xeb, 0xcb }, + { 0xec, 0xcc }, + { 0xed, 0xcd }, + { 0xee, 0xce }, + { 0xef, 0xcf }, + + { 0xf0, 0xd0 }, + { 0xf1, 0xd1 }, + { 0xf2, 0xd2 }, + { 0xf3, 0xd3 }, + { 0xf4, 0xd4 }, + { 0xf5, 0xd5 }, + { 0xf6, 0xd6 }, + { 0xf7, 0xd7 }, + { 0xf8, 0xd8 }, + { 0xf9, 0xd9 }, + { 0xfa, 0xda }, + { 0xfb, 0xdb }, + { 0xfc, 0xdc }, + { 0xfd, 0xdd }, + { 0xfe, 0xde } + }; + + if (flag == ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) { + *ccs = OnigAsciiPairAmbigCodes; + return 52; + } + if (flag == ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) { + *ccs = cc; + return sizeof(cc) / sizeof(OnigPairAmbigCodes); + } + else + return 0; +} + +OnigEncodingType OnigEncodingISO_8859_10 = { + onigenc_single_byte_mbc_enc_len, + "ISO-8859-10", /* name */ + 1, /* max enc length */ + 1, /* min enc length */ + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + onigenc_single_byte_mbc_to_code, + onigenc_single_byte_code_to_mbclen, + onigenc_single_byte_code_to_mbc, + iso_8859_10_mbc_to_normalize, + iso_8859_10_is_mbc_ambiguous, + iso_8859_10_get_all_pair_ambig_codes, + onigenc_ess_tsett_get_all_comp_ambig_codes, + iso_8859_10_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + onigenc_single_byte_left_adjust_char_head, + onigenc_always_true_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/iso8859_11.c b/ext/mbstring/oniguruma/enc/iso8859_11.c new file mode 100644 index 0000000..de9bb3b --- /dev/null +++ b/ext/mbstring/oniguruma/enc/iso8859_11.c @@ -0,0 +1,105 @@ +/********************************************************************** + iso8859_11.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2004 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define ENC_IS_ISO_8859_11_CTYPE(code,ctype) \ + ((EncISO_8859_11_CtypeTable[code] & ctype) != 0) + +static const unsigned short EncISO_8859_11_CtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x220c, 0x2209, 0x2208, 0x2208, 0x2208, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0284, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, + 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, + 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, + 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, + 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, + 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, + 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, + 0x10a2, 0x10a2, 0x10a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x10a2, + 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, + 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, + 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, + 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +static int +iso_8859_11_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 256) + return ENC_IS_ISO_8859_11_CTYPE(code, ctype); + else + return FALSE; +} + +OnigEncodingType OnigEncodingISO_8859_11 = { + onigenc_single_byte_mbc_enc_len, + "ISO-8859-11", /* name */ + 1, /* max enc length */ + 1, /* min enc length */ + ( ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + onigenc_single_byte_mbc_to_code, + onigenc_single_byte_code_to_mbclen, + onigenc_single_byte_code_to_mbc, + onigenc_ascii_mbc_to_normalize, + onigenc_ascii_is_mbc_ambiguous, + onigenc_ascii_get_all_pair_ambig_codes, + onigenc_nothing_get_all_comp_ambig_codes, + iso_8859_11_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + onigenc_single_byte_left_adjust_char_head, + onigenc_always_true_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/iso8859_13.c b/ext/mbstring/oniguruma/enc/iso8859_13.c new file mode 100644 index 0000000..69316ed --- /dev/null +++ b/ext/mbstring/oniguruma/enc/iso8859_13.c @@ -0,0 +1,268 @@ +/********************************************************************** + iso8859_13.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define ENC_ISO_8859_13_TO_LOWER_CASE(c) EncISO_8859_13_ToLowerCaseTable[c] +#define ENC_IS_ISO_8859_13_CTYPE(code,ctype) \ + ((EncISO_8859_13_CtypeTable[code] & ctype) != 0) + +static const UChar EncISO_8859_13_ToLowerCaseTable[256] = { + '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', + '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', + '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', + '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', + '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', + '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', + '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', + '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', + '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', + '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', + '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', + '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', + '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', + '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', + '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', + '\270', '\251', '\272', '\253', '\254', '\255', '\256', '\277', + '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', + '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\327', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377' +}; + +static const unsigned short EncISO_8859_13_CtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x220c, 0x2209, 0x2208, 0x2208, 0x2208, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0284, 0x01a0, 0x00a0, 0x00a0, 0x00a0, 0x01a0, 0x00a0, 0x00a0, + 0x14a2, 0x00a0, 0x14a2, 0x01a0, 0x00a0, 0x01a0, 0x00a0, 0x14a2, + 0x00a0, 0x00a0, 0x10a0, 0x10a0, 0x01a0, 0x10e2, 0x00a0, 0x01a0, + 0x10e2, 0x10a0, 0x10e2, 0x01a0, 0x10a0, 0x10a0, 0x10a0, 0x10e2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x00a0, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x00a0, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x01a0 +}; + +static int +mbc_to_normalize(OnigAmbigType flag, + const UChar** pp, const UChar* end, UChar* lower) +{ + const UChar* p = *pp; + + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + *lower = ENC_ISO_8859_13_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + (*pp)++; + return 1; /* return byte length of converted char to lower */ +} + +static int +is_mbc_ambiguous(OnigAmbigType flag, const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + (*pp)++; + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + int v = (EncISO_8859_13_CtypeTable[*p] & + (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER)); + + if ((v | ONIGENC_CTYPE_LOWER) != 0) { + /* 0xdf, 0xb5 are lower case letter, but can't convert. */ + if (*p == 0xdf || *p == 0xb5) + return FALSE; + else + return TRUE; + } + + return (v != 0 ? TRUE : FALSE); + } + return FALSE; +} + +static int +is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 256) + return ENC_IS_ISO_8859_13_CTYPE(code, ctype); + else + return FALSE; +} + +static int +get_all_pair_ambig_codes(OnigAmbigType flag, const OnigPairAmbigCodes** ccs) +{ + static const OnigPairAmbigCodes cc[] = { + { 0xc0, 0xe0 }, + { 0xc1, 0xe1 }, + { 0xc2, 0xe2 }, + { 0xc3, 0xe3 }, + { 0xc4, 0xe4 }, + { 0xc5, 0xe5 }, + { 0xc6, 0xe6 }, + { 0xc7, 0xe7 }, + { 0xc8, 0xe8 }, + { 0xc9, 0xe9 }, + { 0xca, 0xea }, + { 0xcb, 0xeb }, + { 0xcc, 0xec }, + { 0xcd, 0xed }, + { 0xce, 0xee }, + { 0xcf, 0xef }, + + { 0xd0, 0xf0 }, + { 0xd1, 0xf1 }, + { 0xd2, 0xf2 }, + { 0xd3, 0xf3 }, + { 0xd4, 0xf4 }, + { 0xd5, 0xf5 }, + { 0xd6, 0xf6 }, + { 0xd8, 0xf8 }, + { 0xd9, 0xf9 }, + { 0xda, 0xfa }, + { 0xdb, 0xfb }, + { 0xdc, 0xfc }, + { 0xdd, 0xfd }, + { 0xde, 0xfe }, + + { 0xe0, 0xc0 }, + { 0xe1, 0xc1 }, + { 0xe2, 0xc2 }, + { 0xe3, 0xc3 }, + { 0xe4, 0xc4 }, + { 0xe5, 0xc5 }, + { 0xe6, 0xc6 }, + { 0xe7, 0xc7 }, + { 0xe8, 0xc8 }, + { 0xe9, 0xc9 }, + { 0xea, 0xca }, + { 0xeb, 0xcb }, + { 0xec, 0xcc }, + { 0xed, 0xcd }, + { 0xee, 0xce }, + { 0xef, 0xcf }, + + { 0xf0, 0xd0 }, + { 0xf1, 0xd1 }, + { 0xf2, 0xd2 }, + { 0xf3, 0xd3 }, + { 0xf4, 0xd4 }, + { 0xf5, 0xd5 }, + { 0xf6, 0xd6 }, + { 0xf8, 0xd8 }, + { 0xf9, 0xd9 }, + { 0xfa, 0xda }, + { 0xfb, 0xdb }, + { 0xfc, 0xdc }, + { 0xfd, 0xdd }, + { 0xfe, 0xde } + }; + + if (flag == ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) { + *ccs = OnigAsciiPairAmbigCodes; + return 52; + } + if (flag == ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) { + *ccs = cc; + return sizeof(cc) / sizeof(OnigPairAmbigCodes); + } + else + return 0; +} + +OnigEncodingType OnigEncodingISO_8859_13 = { + onigenc_single_byte_mbc_enc_len, + "ISO-8859-13", /* name */ + 1, /* max enc length */ + 1, /* min enc length */ + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + onigenc_single_byte_mbc_to_code, + onigenc_single_byte_code_to_mbclen, + onigenc_single_byte_code_to_mbc, + mbc_to_normalize, + is_mbc_ambiguous, + get_all_pair_ambig_codes, + onigenc_ess_tsett_get_all_comp_ambig_codes, + is_code_ctype, + onigenc_not_support_get_ctype_code_range, + onigenc_single_byte_left_adjust_char_head, + onigenc_always_true_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/iso8859_14.c b/ext/mbstring/oniguruma/enc/iso8859_14.c new file mode 100644 index 0000000..44638cf --- /dev/null +++ b/ext/mbstring/oniguruma/enc/iso8859_14.c @@ -0,0 +1,298 @@ +/********************************************************************** + iso8859_14.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define ENC_ISO_8859_14_TO_LOWER_CASE(c) EncISO_8859_14_ToLowerCaseTable[c] +#define ENC_IS_ISO_8859_14_CTYPE(code,ctype) \ + ((EncISO_8859_14_CtypeTable[code] & ctype) != 0) + +static const UChar EncISO_8859_14_ToLowerCaseTable[256] = { + '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', + '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', + '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', + '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', + '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', + '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', + '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', + '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', + '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', + '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', + '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', + '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', + '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', + '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', + '\240', '\242', '\242', '\243', '\245', '\245', '\253', '\247', + '\270', '\251', '\272', '\253', '\274', '\255', '\256', '\377', + '\261', '\261', '\263', '\263', '\265', '\265', '\266', '\271', + '\270', '\271', '\272', '\277', '\274', '\276', '\276', '\277', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377' +}; + +static const unsigned short EncISO_8859_14_CtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x220c, 0x2209, 0x2208, 0x2208, 0x2208, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0284, 0x14a2, 0x10e2, 0x00a0, 0x14a2, 0x10e2, 0x14a2, 0x00a0, + 0x14a2, 0x00a0, 0x14a2, 0x10e2, 0x14a2, 0x01a0, 0x00a0, 0x14a2, + 0x14a2, 0x10e2, 0x14a2, 0x10e2, 0x14a2, 0x10e2, 0x00a0, 0x14a2, + 0x10e2, 0x10e2, 0x10e2, 0x14a2, 0x10e2, 0x14a2, 0x10e2, 0x10e2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2 +}; + +static int +mbc_to_normalize(OnigAmbigType flag, + const UChar** pp, const UChar* end, UChar* lower) +{ + const UChar* p = *pp; + + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + *lower = ENC_ISO_8859_14_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + (*pp)++; + return 1; /* return byte length of converted char to lower */ +} + +static int +is_mbc_ambiguous(OnigAmbigType flag, const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + (*pp)++; + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + int v = (EncISO_8859_14_CtypeTable[*p] & + (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER)); + + if ((v | ONIGENC_CTYPE_LOWER) != 0) { + /* 0xdf is lower case letter, but can't convert. */ + if (*p == 0xdf) + return FALSE; + else + return TRUE; + } + + return (v != 0 ? TRUE : FALSE); + } + return FALSE; +} + +static int +is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 256) + return ENC_IS_ISO_8859_14_CTYPE(code, ctype); + else + return FALSE; +} + +static int +get_all_pair_ambig_codes(OnigAmbigType flag, const OnigPairAmbigCodes** ccs) +{ + static const OnigPairAmbigCodes cc[] = { + { 0xa1, 0xa2 }, + { 0xa2, 0xa1 }, + { 0xa4, 0xa5 }, + { 0xa5, 0xa4 }, + { 0xa6, 0xab }, + { 0xa8, 0xb8 }, + { 0xaa, 0xba }, + { 0xab, 0xa6 }, + { 0xac, 0xbc }, + { 0xaf, 0xff }, + + { 0xb0, 0xb1 }, + { 0xb1, 0xb0 }, + { 0xb2, 0xb3 }, + { 0xb3, 0xb2 }, + { 0xb4, 0xb5 }, + { 0xb5, 0xb4 }, + { 0xb7, 0xb9 }, + { 0xb8, 0xa8 }, + { 0xb9, 0xb7 }, + { 0xba, 0xaa }, + { 0xbb, 0xbf }, + { 0xbc, 0xac }, + { 0xbd, 0xbe }, + { 0xbe, 0xbd }, + { 0xbf, 0xbb }, + + { 0xc0, 0xe0 }, + { 0xc1, 0xe1 }, + { 0xc2, 0xe2 }, + { 0xc3, 0xe3 }, + { 0xc4, 0xe4 }, + { 0xc5, 0xe5 }, + { 0xc6, 0xe6 }, + { 0xc7, 0xe7 }, + { 0xc8, 0xe8 }, + { 0xc9, 0xe9 }, + { 0xca, 0xea }, + { 0xcb, 0xeb }, + { 0xcc, 0xec }, + { 0xcd, 0xed }, + { 0xce, 0xee }, + { 0xcf, 0xef }, + + { 0xd0, 0xf0 }, + { 0xd1, 0xf1 }, + { 0xd2, 0xf2 }, + { 0xd3, 0xf3 }, + { 0xd4, 0xf4 }, + { 0xd5, 0xf5 }, + { 0xd6, 0xf6 }, + { 0xd7, 0xf7 }, + { 0xd8, 0xf8 }, + { 0xd9, 0xf9 }, + { 0xda, 0xfa }, + { 0xdb, 0xfb }, + { 0xdc, 0xfc }, + { 0xdd, 0xfd }, + { 0xde, 0xfe }, + + { 0xe0, 0xc0 }, + { 0xe1, 0xc1 }, + { 0xe2, 0xc2 }, + { 0xe3, 0xc3 }, + { 0xe4, 0xc4 }, + { 0xe5, 0xc5 }, + { 0xe6, 0xc6 }, + { 0xe7, 0xc7 }, + { 0xe8, 0xc8 }, + { 0xe9, 0xc9 }, + { 0xea, 0xca }, + { 0xeb, 0xcb }, + { 0xec, 0xcc }, + { 0xed, 0xcd }, + { 0xee, 0xce }, + { 0xef, 0xcf }, + + { 0xf0, 0xd0 }, + { 0xf1, 0xd1 }, + { 0xf2, 0xd2 }, + { 0xf3, 0xd3 }, + { 0xf4, 0xd4 }, + { 0xf5, 0xd5 }, + { 0xf6, 0xd6 }, + { 0xf7, 0xd7 }, + { 0xf8, 0xd8 }, + { 0xf9, 0xd9 }, + { 0xfa, 0xda }, + { 0xfb, 0xdb }, + { 0xfc, 0xdc }, + { 0xfd, 0xdd }, + { 0xfe, 0xde }, + { 0xff, 0xaf } + }; + + if (flag == ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) { + *ccs = OnigAsciiPairAmbigCodes; + return 52; + } + if (flag == ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) { + *ccs = cc; + return sizeof(cc) / sizeof(OnigPairAmbigCodes); + } + else + return 0; +} + +OnigEncodingType OnigEncodingISO_8859_14 = { + onigenc_single_byte_mbc_enc_len, + "ISO-8859-14", /* name */ + 1, /* max enc length */ + 1, /* min enc length */ + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + onigenc_single_byte_mbc_to_code, + onigenc_single_byte_code_to_mbclen, + onigenc_single_byte_code_to_mbc, + mbc_to_normalize, + is_mbc_ambiguous, + get_all_pair_ambig_codes, + onigenc_ess_tsett_get_all_comp_ambig_codes, + is_code_ctype, + onigenc_not_support_get_ctype_code_range, + onigenc_single_byte_left_adjust_char_head, + onigenc_always_true_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/iso8859_15.c b/ext/mbstring/oniguruma/enc/iso8859_15.c new file mode 100644 index 0000000..f643b89 --- /dev/null +++ b/ext/mbstring/oniguruma/enc/iso8859_15.c @@ -0,0 +1,279 @@ +/********************************************************************** + iso8859_15.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define ENC_ISO_8859_15_TO_LOWER_CASE(c) EncISO_8859_15_ToLowerCaseTable[c] +#define ENC_IS_ISO_8859_15_CTYPE(code,ctype) \ + ((EncISO_8859_15_CtypeTable[code] & ctype) != 0) + +static const UChar EncISO_8859_15_ToLowerCaseTable[256] = { + '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', + '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', + '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', + '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', + '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', + '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', + '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', + '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', + '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', + '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', + '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', + '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', + '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', + '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', + '\240', '\241', '\242', '\243', '\244', '\245', '\250', '\247', + '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257', + '\260', '\261', '\262', '\263', '\270', '\265', '\266', '\267', + '\270', '\271', '\272', '\273', '\275', '\275', '\377', '\277', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\327', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377' +}; + +static const unsigned short EncISO_8859_15_CtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x220c, 0x2209, 0x2208, 0x2208, 0x2208, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0284, 0x01a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x14a2, 0x00a0, + 0x10e2, 0x00a0, 0x10e2, 0x01a0, 0x00a0, 0x01a0, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x10a0, 0x10a0, 0x14a2, 0x10e2, 0x00a0, 0x01a0, + 0x10e2, 0x10a0, 0x10e2, 0x01a0, 0x14a2, 0x10e2, 0x14a2, 0x01a0, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x00a0, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x00a0, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2 +}; + +static int +mbc_to_normalize(OnigAmbigType flag, + const UChar** pp, const UChar* end, UChar* lower) +{ + const UChar* p = *pp; + + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + *lower = ENC_ISO_8859_15_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + (*pp)++; + return 1; /* return byte length of converted char to lower */ +} + +static int +is_mbc_ambiguous(OnigAmbigType flag, const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + (*pp)++; + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + int v = (EncISO_8859_15_CtypeTable[*p] & + (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER)); + + if ((v | ONIGENC_CTYPE_LOWER) != 0) { + /* 0xdf etc.. are lower case letter, but can't convert. */ + if (*p == 0xdf || *p == 0xaa || *p == 0xb5 || *p == 0xba) + return FALSE; + else + return TRUE; + } + + return (v != 0 ? TRUE : FALSE); + } + return FALSE; +} + +static int +is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 256) + return ENC_IS_ISO_8859_15_CTYPE(code, ctype); + else + return FALSE; +} + +static int +get_all_pair_ambig_codes(OnigAmbigType flag, + const OnigPairAmbigCodes** ccs) +{ + static const OnigPairAmbigCodes cc[] = { + { 0xa6, 0xa8 }, + { 0xa8, 0xa6 }, + + { 0xb4, 0xb8 }, + { 0xb8, 0xb4 }, + { 0xbc, 0xbd }, + { 0xbd, 0xbc }, + { 0xbe, 0xff }, + + { 0xc0, 0xe0 }, + { 0xc1, 0xe1 }, + { 0xc2, 0xe2 }, + { 0xc3, 0xe3 }, + { 0xc4, 0xe4 }, + { 0xc5, 0xe5 }, + { 0xc6, 0xe6 }, + { 0xc7, 0xe7 }, + { 0xc8, 0xe8 }, + { 0xc9, 0xe9 }, + { 0xca, 0xea }, + { 0xcb, 0xeb }, + { 0xcc, 0xec }, + { 0xcd, 0xed }, + { 0xce, 0xee }, + { 0xcf, 0xef }, + + { 0xd0, 0xf0 }, + { 0xd1, 0xf1 }, + { 0xd2, 0xf2 }, + { 0xd3, 0xf3 }, + { 0xd4, 0xf4 }, + { 0xd5, 0xf5 }, + { 0xd6, 0xf6 }, + { 0xd8, 0xf8 }, + { 0xd9, 0xf9 }, + { 0xda, 0xfa }, + { 0xdb, 0xfb }, + { 0xdc, 0xfc }, + { 0xdd, 0xfd }, + { 0xde, 0xfe }, + + { 0xe0, 0xc0 }, + { 0xe1, 0xc1 }, + { 0xe2, 0xc2 }, + { 0xe3, 0xc3 }, + { 0xe4, 0xc4 }, + { 0xe5, 0xc5 }, + { 0xe6, 0xc6 }, + { 0xe7, 0xc7 }, + { 0xe8, 0xc8 }, + { 0xe9, 0xc9 }, + { 0xea, 0xca }, + { 0xeb, 0xcb }, + { 0xec, 0xcc }, + { 0xed, 0xcd }, + { 0xee, 0xce }, + { 0xef, 0xcf }, + + { 0xf0, 0xd0 }, + { 0xf1, 0xd1 }, + { 0xf2, 0xd2 }, + { 0xf3, 0xd3 }, + { 0xf4, 0xd4 }, + { 0xf5, 0xd5 }, + { 0xf6, 0xd6 }, + { 0xf8, 0xd8 }, + { 0xf9, 0xd9 }, + { 0xfa, 0xda }, + { 0xfb, 0xdb }, + { 0xfc, 0xdc }, + { 0xfd, 0xdd }, + { 0xfe, 0xde }, + { 0xff, 0xbe } + }; + + if (flag == ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) { + *ccs = OnigAsciiPairAmbigCodes; + return 52; + } + if (flag == ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) { + *ccs = cc; + return sizeof(cc) / sizeof(OnigPairAmbigCodes); + } + else + return 0; +} + +OnigEncodingType OnigEncodingISO_8859_15 = { + onigenc_single_byte_mbc_enc_len, + "ISO-8859-15", /* name */ + 1, /* max enc length */ + 1, /* min enc length */ + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + onigenc_single_byte_mbc_to_code, + onigenc_single_byte_code_to_mbclen, + onigenc_single_byte_code_to_mbc, + mbc_to_normalize, + is_mbc_ambiguous, + get_all_pair_ambig_codes, + onigenc_ess_tsett_get_all_comp_ambig_codes, + is_code_ctype, + onigenc_not_support_get_ctype_code_range, + onigenc_single_byte_left_adjust_char_head, + onigenc_always_true_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/iso8859_16.c b/ext/mbstring/oniguruma/enc/iso8859_16.c new file mode 100644 index 0000000..921ae36 --- /dev/null +++ b/ext/mbstring/oniguruma/enc/iso8859_16.c @@ -0,0 +1,292 @@ +/********************************************************************** + iso8859_16.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define ENC_ISO_8859_16_TO_LOWER_CASE(c) EncISO_8859_16_ToLowerCaseTable[c] +#define ENC_IS_ISO_8859_16_CTYPE(code,ctype) \ + ((EncISO_8859_16_CtypeTable[code] & ctype) != 0) + +static const UChar EncISO_8859_16_ToLowerCaseTable[256] = { + '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', + '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', + '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', + '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', + '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', + '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', + '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', + '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', + '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', + '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', + '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', + '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', + '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', + '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', + '\240', '\242', '\242', '\263', '\245', '\245', '\250', '\247', + '\250', '\251', '\272', '\253', '\256', '\255', '\256', '\277', + '\260', '\261', '\271', '\263', '\270', '\265', '\266', '\267', + '\270', '\271', '\272', '\273', '\275', '\275', '\377', '\277', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377' +}; + +static const unsigned short EncISO_8859_16_CtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x220c, 0x2209, 0x2208, 0x2208, 0x2208, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0284, 0x14a2, 0x10e2, 0x14a2, 0x00a0, 0x01a0, 0x14a2, 0x00a0, + 0x10e2, 0x00a0, 0x14a2, 0x01a0, 0x14a2, 0x01a0, 0x10e2, 0x14a2, + 0x00a0, 0x00a0, 0x14a2, 0x10e2, 0x14a2, 0x01a0, 0x00a0, 0x01a0, + 0x10e2, 0x10e2, 0x10e2, 0x01a0, 0x14a2, 0x10e2, 0x14a2, 0x10e2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2 +}; + +static int +mbc_to_normalize(OnigAmbigType flag, + const UChar** pp, const UChar* end, UChar* lower) +{ + const UChar* p = *pp; + + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + *lower = ENC_ISO_8859_16_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + (*pp)++; + return 1; /* return byte length of converted char to lower */ +} + +static int +is_mbc_ambiguous(OnigAmbigType flag, const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + (*pp)++; + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + int v = (EncISO_8859_16_CtypeTable[*p] & + (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER)); + + if ((v | ONIGENC_CTYPE_LOWER) != 0) { + /* 0xdf is lower case letter, but can't convert. */ + if (*p == 0xdf) + return FALSE; + else + return TRUE; + } + + return (v != 0 ? TRUE : FALSE); + } + return FALSE; +} + +static int +is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 256) + return ENC_IS_ISO_8859_16_CTYPE(code, ctype); + else + return FALSE; +} + +static int +get_all_pair_ambig_codes(OnigAmbigType flag, const OnigPairAmbigCodes** ccs) +{ + static const OnigPairAmbigCodes cc[] = { + { 0xa1, 0xa2 }, + { 0xa2, 0xa1 }, + { 0xa3, 0xb3 }, + { 0xa6, 0xa8 }, + { 0xa8, 0xa6 }, + { 0xaa, 0xba }, + { 0xac, 0xae }, + { 0xae, 0xac }, + { 0xaf, 0xbf }, + + { 0xb2, 0xb9 }, + { 0xb3, 0xa3 }, + { 0xb4, 0xb8 }, + { 0xb8, 0xb4 }, + { 0xb9, 0xb2 }, + { 0xba, 0xaa }, + { 0xbc, 0xbd }, + { 0xbd, 0xbc }, + { 0xbe, 0xff }, + { 0xbf, 0xaf }, + + { 0xc0, 0xe0 }, + { 0xc1, 0xe1 }, + { 0xc2, 0xe2 }, + { 0xc3, 0xe3 }, + { 0xc4, 0xe4 }, + { 0xc5, 0xe5 }, + { 0xc6, 0xe6 }, + { 0xc7, 0xe7 }, + { 0xc8, 0xe8 }, + { 0xc9, 0xe9 }, + { 0xca, 0xea }, + { 0xcb, 0xeb }, + { 0xcc, 0xec }, + { 0xcd, 0xed }, + { 0xce, 0xee }, + { 0xcf, 0xef }, + + { 0xd0, 0xf0 }, + { 0xd1, 0xf1 }, + { 0xd2, 0xf2 }, + { 0xd3, 0xf3 }, + { 0xd4, 0xf4 }, + { 0xd5, 0xf5 }, + { 0xd6, 0xf6 }, + { 0xd7, 0xf7 }, + { 0xd8, 0xf8 }, + { 0xd9, 0xf9 }, + { 0xda, 0xfa }, + { 0xdb, 0xfb }, + { 0xdc, 0xfc }, + { 0xdd, 0xfd }, + { 0xde, 0xfe }, + + { 0xe0, 0xc0 }, + { 0xe1, 0xc1 }, + { 0xe2, 0xc2 }, + { 0xe3, 0xc3 }, + { 0xe4, 0xc4 }, + { 0xe5, 0xc5 }, + { 0xe6, 0xc6 }, + { 0xe7, 0xc7 }, + { 0xe8, 0xc8 }, + { 0xe9, 0xc9 }, + { 0xea, 0xca }, + { 0xeb, 0xcb }, + { 0xec, 0xcc }, + { 0xed, 0xcd }, + { 0xee, 0xce }, + { 0xef, 0xcf }, + + { 0xf0, 0xd0 }, + { 0xf1, 0xd1 }, + { 0xf2, 0xd2 }, + { 0xf3, 0xd3 }, + { 0xf4, 0xd4 }, + { 0xf5, 0xd5 }, + { 0xf6, 0xd6 }, + { 0xf7, 0xd7 }, + { 0xf8, 0xd8 }, + { 0xf9, 0xd9 }, + { 0xfa, 0xda }, + { 0xfb, 0xdb }, + { 0xfc, 0xdc }, + { 0xfd, 0xdd }, + { 0xfe, 0xde }, + { 0xff, 0xbe } + }; + + if (flag == ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) { + *ccs = OnigAsciiPairAmbigCodes; + return 52; + } + if (flag == ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) { + *ccs = cc; + return sizeof(cc) / sizeof(OnigPairAmbigCodes); + } + else + return 0; +} + +OnigEncodingType OnigEncodingISO_8859_16 = { + onigenc_single_byte_mbc_enc_len, + "ISO-8859-16", /* name */ + 1, /* max enc length */ + 1, /* min enc length */ + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + onigenc_single_byte_mbc_to_code, + onigenc_single_byte_code_to_mbclen, + onigenc_single_byte_code_to_mbc, + mbc_to_normalize, + is_mbc_ambiguous, + get_all_pair_ambig_codes, + onigenc_ess_tsett_get_all_comp_ambig_codes, + is_code_ctype, + onigenc_not_support_get_ctype_code_range, + onigenc_single_byte_left_adjust_char_head, + onigenc_always_true_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/iso8859_2.c b/ext/mbstring/oniguruma/enc/iso8859_2.c new file mode 100644 index 0000000..f8cb375 --- /dev/null +++ b/ext/mbstring/oniguruma/enc/iso8859_2.c @@ -0,0 +1,292 @@ +/********************************************************************** + iso8859_2.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define ENC_ISO_8859_2_TO_LOWER_CASE(c) EncISO_8859_2_ToLowerCaseTable[c] +#define ENC_IS_ISO_8859_2_CTYPE(code,ctype) \ + ((EncISO_8859_2_CtypeTable[code] & ctype) != 0) + +static const UChar EncISO_8859_2_ToLowerCaseTable[256] = { + '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', + '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', + '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', + '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', + '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', + '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', + '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', + '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', + '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', + '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', + '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', + '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', + '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', + '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', + '\240', '\261', '\242', '\263', '\244', '\265', '\266', '\247', + '\250', '\271', '\272', '\273', '\274', '\255', '\276', '\277', + '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', + '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\327', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377' +}; + +static const unsigned short EncISO_8859_2_CtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x220c, 0x2209, 0x2208, 0x2208, 0x2208, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0284, 0x14a2, 0x00a0, 0x14a2, 0x00a0, 0x14a2, 0x14a2, 0x00a0, + 0x00a0, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x01a0, 0x14a2, 0x14a2, + 0x00a0, 0x10e2, 0x00a0, 0x10e2, 0x00a0, 0x10e2, 0x10e2, 0x00a0, + 0x00a0, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x00a0, 0x10e2, 0x10e2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x00a0, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x00a0, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x00a0 +}; + +static int +iso_8859_2_mbc_to_normalize(OnigAmbigType flag, + const UChar** pp, const UChar* end, UChar* lower) +{ + const UChar* p = *pp; + + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + *lower = ENC_ISO_8859_2_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + (*pp)++; + return 1; /* return byte length of converted char to lower */ +} + +static int +iso_8859_2_is_mbc_ambiguous(OnigAmbigType flag, + const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + (*pp)++; + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + int v = (EncISO_8859_2_CtypeTable[*p] & + (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER)); + + if ((v | ONIGENC_CTYPE_LOWER) != 0) { + /* 0xdf is lower case letter, but can't convert. */ + if (*p == 0xdf) + return FALSE; + else + return TRUE; + } + + return (v != 0 ? TRUE : FALSE); + } + return FALSE; +} + +static int +iso_8859_2_get_all_pair_ambig_codes(OnigAmbigType flag, + const OnigPairAmbigCodes** ccs) +{ + static const OnigPairAmbigCodes cc[] = { + { 0xa1, 0xb1 }, + { 0xa3, 0xb3 }, + { 0xa5, 0xb5 }, + { 0xa6, 0xb6 }, + { 0xa9, 0xb9 }, + { 0xaa, 0xba }, + { 0xab, 0xbb }, + { 0xac, 0xbc }, + { 0xae, 0xbe }, + { 0xaf, 0xbf }, + + { 0xb1, 0xa1 }, + { 0xb3, 0xa3 }, + { 0xb5, 0xa5 }, + { 0xb6, 0xa6 }, + { 0xb9, 0xa9 }, + { 0xba, 0xaa }, + { 0xbb, 0xab }, + { 0xbc, 0xac }, + { 0xbe, 0xae }, + { 0xbf, 0xaf }, + + { 0xc0, 0xe0 }, + { 0xc1, 0xe1 }, + { 0xc2, 0xe2 }, + { 0xc3, 0xe3 }, + { 0xc4, 0xe4 }, + { 0xc5, 0xe5 }, + { 0xc6, 0xe6 }, + { 0xc7, 0xe7 }, + { 0xc8, 0xe8 }, + { 0xc9, 0xe9 }, + { 0xca, 0xea }, + { 0xcb, 0xeb }, + { 0xcc, 0xec }, + { 0xcd, 0xed }, + { 0xce, 0xee }, + { 0xcf, 0xef }, + + { 0xd0, 0xf0 }, + { 0xd1, 0xf1 }, + { 0xd2, 0xf2 }, + { 0xd3, 0xf3 }, + { 0xd4, 0xf4 }, + { 0xd5, 0xf5 }, + { 0xd6, 0xf6 }, + { 0xd8, 0xf8 }, + { 0xd9, 0xf9 }, + { 0xda, 0xfa }, + { 0xdb, 0xfb }, + { 0xdc, 0xfc }, + { 0xdd, 0xfd }, + { 0xde, 0xfe }, + + { 0xe0, 0xc0 }, + { 0xe1, 0xc1 }, + { 0xe2, 0xc2 }, + { 0xe3, 0xc3 }, + { 0xe4, 0xc4 }, + { 0xe5, 0xc5 }, + { 0xe6, 0xc6 }, + { 0xe7, 0xc7 }, + { 0xe8, 0xc8 }, + { 0xe9, 0xc9 }, + { 0xea, 0xca }, + { 0xeb, 0xcb }, + { 0xec, 0xcc }, + { 0xed, 0xcd }, + { 0xee, 0xce }, + { 0xef, 0xcf }, + + { 0xf0, 0xd0 }, + { 0xf1, 0xd1 }, + { 0xf2, 0xd2 }, + { 0xf3, 0xd3 }, + { 0xf4, 0xd4 }, + { 0xf5, 0xd5 }, + { 0xf6, 0xd6 }, + { 0xf8, 0xd8 }, + { 0xf9, 0xd9 }, + { 0xfa, 0xda }, + { 0xfb, 0xdb }, + { 0xfc, 0xdc }, + { 0xfd, 0xdd }, + { 0xfe, 0xde } + }; + + if (flag == ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) { + *ccs = OnigAsciiPairAmbigCodes; + return 52; + } + if (flag == ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) { + *ccs = cc; + return sizeof(cc) / sizeof(OnigPairAmbigCodes); + } + else + return 0; +} + +static int +iso_8859_2_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 256) + return ENC_IS_ISO_8859_2_CTYPE(code, ctype); + else + return FALSE; +} + +OnigEncodingType OnigEncodingISO_8859_2 = { + onigenc_single_byte_mbc_enc_len, + "ISO-8859-2", /* name */ + 1, /* max enc length */ + 1, /* min enc length */ + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + onigenc_single_byte_mbc_to_code, + onigenc_single_byte_code_to_mbclen, + onigenc_single_byte_code_to_mbc, + iso_8859_2_mbc_to_normalize, + iso_8859_2_is_mbc_ambiguous, + iso_8859_2_get_all_pair_ambig_codes, + onigenc_ess_tsett_get_all_comp_ambig_codes, + iso_8859_2_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + onigenc_single_byte_left_adjust_char_head, + onigenc_always_true_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/iso8859_3.c b/ext/mbstring/oniguruma/enc/iso8859_3.c new file mode 100644 index 0000000..e62d20d --- /dev/null +++ b/ext/mbstring/oniguruma/enc/iso8859_3.c @@ -0,0 +1,281 @@ +/********************************************************************** + iso8859_3.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define ENC_ISO_8859_3_TO_LOWER_CASE(c) EncISO_8859_3_ToLowerCaseTable[c] +#define ENC_IS_ISO_8859_3_CTYPE(code,ctype) \ + ((EncISO_8859_3_CtypeTable[code] & ctype) != 0) + +static const UChar EncISO_8859_3_ToLowerCaseTable[256] = { + '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', + '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', + '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', + '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', + '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', + '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', + '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', + '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', + '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', + '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', + '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', + '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', + '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', + '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', + '\240', '\261', '\242', '\243', '\244', '\245', '\266', '\247', + '\250', '\271', '\272', '\273', '\274', '\255', '\256', '\277', + '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', + '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', + '\340', '\341', '\342', '\303', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\320', '\361', '\362', '\363', '\364', '\365', '\366', '\327', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377' +}; + +static const unsigned short EncISO_8859_3_CtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x220c, 0x2209, 0x2208, 0x2208, 0x2208, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0284, 0x14a2, 0x00a0, 0x00a0, 0x00a0, 0x0000, 0x14a2, 0x00a0, + 0x00a0, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x01a0, 0x0000, 0x14a2, + 0x00a0, 0x10e2, 0x10a0, 0x10a0, 0x00a0, 0x10e2, 0x10e2, 0x01a0, + 0x00a0, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x11a0, 0x0000, 0x10e2, + 0x14a2, 0x14a2, 0x14a2, 0x0000, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x0000, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x00a0, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x0000, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x0000, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x00a0, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x00a0 +}; + +static int +iso_8859_3_mbc_to_normalize(OnigAmbigType flag, + const UChar** pp, const UChar* end, UChar* lower) +{ + const UChar* p = *pp; + + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + *lower = ENC_ISO_8859_3_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + (*pp)++; + return 1; /* return byte length of converted char to lower */ +} + +static int +iso_8859_3_is_mbc_ambiguous(OnigAmbigType flag, + const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + (*pp)++; + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + int v = (EncISO_8859_3_CtypeTable[*p] & + (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER)); + + if ((v | ONIGENC_CTYPE_LOWER) != 0) { + /* 0xdf, 0xaa, 0xb5, 0xba are lower case letter, but can't convert. */ + if (*p == 0xdf || *p == 0xb5) + return FALSE; + else + return TRUE; + } + + return (v != 0 ? TRUE : FALSE); + } + return FALSE; +} + +static int +iso_8859_3_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 256) + return ENC_IS_ISO_8859_3_CTYPE(code, ctype); + else + return FALSE; +} + +static int +iso_8859_3_get_all_pair_ambig_codes(OnigAmbigType flag, + const OnigPairAmbigCodes** ccs) +{ + static const OnigPairAmbigCodes cc[] = { + { 0xa1, 0xb1 }, + { 0xa6, 0xb6 }, + { 0xa9, 0xb9 }, + { 0xaa, 0xba }, + { 0xab, 0xbb }, + { 0xac, 0xbc }, + { 0xaf, 0xbf }, + { 0xb1, 0xa1 }, + { 0xb6, 0xa6 }, + { 0xb9, 0xa9 }, + { 0xba, 0xaa }, + { 0xbb, 0xab }, + { 0xbc, 0xac }, + { 0xbf, 0xaf }, + + { 0xc0, 0xe0 }, + { 0xc1, 0xe1 }, + { 0xc2, 0xe2 }, + { 0xc4, 0xe4 }, + { 0xc5, 0xe5 }, + { 0xc6, 0xe6 }, + { 0xc7, 0xe7 }, + { 0xc8, 0xe8 }, + { 0xc9, 0xe9 }, + { 0xca, 0xea }, + { 0xcb, 0xeb }, + { 0xcc, 0xec }, + { 0xcd, 0xed }, + { 0xce, 0xee }, + { 0xcf, 0xef }, + + { 0xd1, 0xf1 }, + { 0xd2, 0xf2 }, + { 0xd3, 0xf3 }, + { 0xd4, 0xf4 }, + { 0xd5, 0xf5 }, + { 0xd6, 0xf6 }, + { 0xd8, 0xf8 }, + { 0xd9, 0xf9 }, + { 0xda, 0xfa }, + { 0xdb, 0xfb }, + { 0xdc, 0xfc }, + { 0xdd, 0xfd }, + { 0xde, 0xfe }, + + { 0xe0, 0xc0 }, + { 0xe1, 0xc1 }, + { 0xe2, 0xc2 }, + { 0xe4, 0xc4 }, + { 0xe5, 0xc5 }, + { 0xe6, 0xc6 }, + { 0xe7, 0xc7 }, + { 0xe8, 0xc8 }, + { 0xe9, 0xc9 }, + { 0xea, 0xca }, + { 0xeb, 0xcb }, + { 0xec, 0xcc }, + { 0xed, 0xcd }, + { 0xee, 0xce }, + { 0xef, 0xcf }, + + { 0xf1, 0xd1 }, + { 0xf2, 0xd2 }, + { 0xf3, 0xd3 }, + { 0xf4, 0xd4 }, + { 0xf5, 0xd5 }, + { 0xf6, 0xd6 }, + { 0xf8, 0xd8 }, + { 0xf9, 0xd9 }, + { 0xfa, 0xda }, + { 0xfb, 0xdb }, + { 0xfc, 0xdc }, + { 0xfd, 0xdd }, + { 0xfe, 0xde } + }; + + if (flag == ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) { + *ccs = OnigAsciiPairAmbigCodes; + return 52; + } + if (flag == ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) { + *ccs = cc; + return sizeof(cc) / sizeof(OnigPairAmbigCodes); + } + else + return 0; +} + +OnigEncodingType OnigEncodingISO_8859_3 = { + onigenc_single_byte_mbc_enc_len, + "ISO-8859-3", /* name */ + 1, /* max enc length */ + 1, /* min enc length */ + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + onigenc_single_byte_mbc_to_code, + onigenc_single_byte_code_to_mbclen, + onigenc_single_byte_code_to_mbc, + iso_8859_3_mbc_to_normalize, + iso_8859_3_is_mbc_ambiguous, + iso_8859_3_get_all_pair_ambig_codes, + onigenc_ess_tsett_get_all_comp_ambig_codes, + iso_8859_3_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + onigenc_single_byte_left_adjust_char_head, + onigenc_always_true_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/iso8859_4.c b/ext/mbstring/oniguruma/enc/iso8859_4.c new file mode 100644 index 0000000..dd6bd7d --- /dev/null +++ b/ext/mbstring/oniguruma/enc/iso8859_4.c @@ -0,0 +1,290 @@ +/********************************************************************** + iso8859_4.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define ENC_ISO_8859_4_TO_LOWER_CASE(c) EncISO_8859_4_ToLowerCaseTable[c] +#define ENC_IS_ISO_8859_4_CTYPE(code,ctype) \ + ((EncISO_8859_4_CtypeTable[code] & ctype) != 0) + +static const UChar EncISO_8859_4_ToLowerCaseTable[256] = { + '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', + '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', + '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', + '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', + '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', + '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', + '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', + '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', + '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', + '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', + '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', + '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', + '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', + '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', + '\240', '\261', '\242', '\263', '\244', '\265', '\266', '\247', + '\250', '\271', '\272', '\273', '\274', '\255', '\276', '\257', + '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', + '\270', '\271', '\272', '\273', '\274', '\277', '\276', '\277', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\327', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377' +}; + +static const unsigned short EncISO_8859_4_CtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x220c, 0x2209, 0x2208, 0x2208, 0x2208, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0284, 0x14a2, 0x10e2, 0x14a2, 0x00a0, 0x14a2, 0x14a2, 0x00a0, + 0x00a0, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x01a0, 0x14a2, 0x00a0, + 0x00a0, 0x10e2, 0x00a0, 0x10e2, 0x00a0, 0x10e2, 0x10e2, 0x00a0, + 0x00a0, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x14a2, 0x10e2, 0x10e2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x00a0, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x00a0, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x00a0 +}; + +static int +iso_8859_4_mbc_to_normalize(OnigAmbigType flag, + const UChar** pp, const UChar* end, UChar* lower) +{ + const UChar* p = *pp; + + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + *lower = ENC_ISO_8859_4_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + (*pp)++; + return 1; /* return byte length of converted char to lower */ +} + +static int +iso_8859_4_is_mbc_ambiguous(OnigAmbigType flag, + const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + (*pp)++; + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + int v = (EncISO_8859_4_CtypeTable[*p] & + (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER)); + + if ((v | ONIGENC_CTYPE_LOWER) != 0) { + /* 0xdf, 0xaa, 0xb5, 0xba are lower case letter, but can't convert. */ + if (*p == 0xdf || *p == 0xa2) + return FALSE; + else + return TRUE; + } + + return (v != 0 ? TRUE : FALSE); + } + return FALSE; +} + +static int +iso_8859_4_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 256) + return ENC_IS_ISO_8859_4_CTYPE(code, ctype); + else + return FALSE; +} + +static int +iso_8859_4_get_all_pair_ambig_codes(OnigAmbigType flag, + const OnigPairAmbigCodes** ccs) +{ + static const OnigPairAmbigCodes cc[] = { + { 0xa1, 0xb1 }, + { 0xa3, 0xb3 }, + { 0xa5, 0xb5 }, + { 0xa6, 0xb6 }, + { 0xa9, 0xb9 }, + { 0xaa, 0xba }, + { 0xab, 0xbb }, + { 0xac, 0xbc }, + { 0xae, 0xbe }, + + { 0xb1, 0xa1 }, + { 0xb3, 0xa3 }, + { 0xb5, 0xa5 }, + { 0xb6, 0xa6 }, + { 0xb9, 0xa9 }, + { 0xba, 0xaa }, + { 0xbb, 0xab }, + { 0xbc, 0xac }, + { 0xbe, 0xae }, + + { 0xc0, 0xe0 }, + { 0xc1, 0xe1 }, + { 0xc2, 0xe2 }, + { 0xc3, 0xe3 }, + { 0xc4, 0xe4 }, + { 0xc5, 0xe5 }, + { 0xc6, 0xe6 }, + { 0xc7, 0xe7 }, + { 0xc8, 0xe8 }, + { 0xc9, 0xe9 }, + { 0xca, 0xea }, + { 0xcb, 0xeb }, + { 0xcc, 0xec }, + { 0xcd, 0xed }, + { 0xce, 0xee }, + { 0xcf, 0xef }, + + { 0xd0, 0xf0 }, + { 0xd1, 0xf1 }, + { 0xd2, 0xf2 }, + { 0xd3, 0xf3 }, + { 0xd4, 0xf4 }, + { 0xd5, 0xf5 }, + { 0xd6, 0xf6 }, + { 0xd8, 0xf8 }, + { 0xd9, 0xf9 }, + { 0xda, 0xfa }, + { 0xdb, 0xfb }, + { 0xdc, 0xfc }, + { 0xdd, 0xfd }, + { 0xde, 0xfe }, + + { 0xe0, 0xc0 }, + { 0xe1, 0xc1 }, + { 0xe2, 0xc2 }, + { 0xe3, 0xc3 }, + { 0xe4, 0xc4 }, + { 0xe5, 0xc5 }, + { 0xe6, 0xc6 }, + { 0xe7, 0xc7 }, + { 0xe8, 0xc8 }, + { 0xe9, 0xc9 }, + { 0xea, 0xca }, + { 0xeb, 0xcb }, + { 0xec, 0xcc }, + { 0xed, 0xcd }, + { 0xee, 0xce }, + { 0xef, 0xcf }, + + { 0xf0, 0xd0 }, + { 0xf1, 0xd1 }, + { 0xf2, 0xd2 }, + { 0xf3, 0xd3 }, + { 0xf4, 0xd4 }, + { 0xf5, 0xd5 }, + { 0xf6, 0xd6 }, + { 0xf8, 0xd8 }, + { 0xf9, 0xd9 }, + { 0xfa, 0xda }, + { 0xfb, 0xdb }, + { 0xfc, 0xdc }, + { 0xfd, 0xdd }, + { 0xfe, 0xde } + }; + + if (flag == ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) { + *ccs = OnigAsciiPairAmbigCodes; + return 52; + } + if (flag == ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) { + *ccs = cc; + return sizeof(cc) / sizeof(OnigPairAmbigCodes); + } + else + return 0; +} + +OnigEncodingType OnigEncodingISO_8859_4 = { + onigenc_single_byte_mbc_enc_len, + "ISO-8859-4", /* name */ + 1, /* max enc length */ + 1, /* min enc length */ + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + onigenc_single_byte_mbc_to_code, + onigenc_single_byte_code_to_mbclen, + onigenc_single_byte_code_to_mbc, + iso_8859_4_mbc_to_normalize, + iso_8859_4_is_mbc_ambiguous, + iso_8859_4_get_all_pair_ambig_codes, + onigenc_ess_tsett_get_all_comp_ambig_codes, + iso_8859_4_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + onigenc_single_byte_left_adjust_char_head, + onigenc_always_true_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/iso8859_5.c b/ext/mbstring/oniguruma/enc/iso8859_5.c new file mode 100644 index 0000000..87b7fb8 --- /dev/null +++ b/ext/mbstring/oniguruma/enc/iso8859_5.c @@ -0,0 +1,296 @@ +/********************************************************************** + iso8859_5.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2005 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define ENC_ISO_8859_5_TO_LOWER_CASE(c) EncISO_8859_5_ToLowerCaseTable[c] +#define ENC_IS_ISO_8859_5_CTYPE(code,ctype) \ + ((EncISO_8859_5_CtypeTable[code] & ctype) != 0) + +static const UChar EncISO_8859_5_ToLowerCaseTable[256] = { + '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', + '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', + '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', + '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', + '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', + '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', + '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', + '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', + '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', + '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', + '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', + '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', + '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', + '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', + '\240', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\255', '\376', '\377', + '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327', + '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327', + '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377' +}; + +static const unsigned short EncISO_8859_5_CtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x220c, 0x2209, 0x2208, 0x2208, 0x2208, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0284, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x01a0, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x00a0, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x00a0, 0x10e2, 0x10e2 +}; + +static int +iso_8859_5_mbc_to_normalize(OnigAmbigType flag, + const UChar** pp, const UChar* end, UChar* lower) +{ + const UChar* p = *pp; + + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + *lower = ENC_ISO_8859_5_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + + (*pp)++; + return 1; /* return byte length of converted char to lower */ +} + +static int +iso_8859_5_is_mbc_ambiguous(OnigAmbigType flag, + const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + (*pp)++; + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + int v = (EncISO_8859_5_CtypeTable[*p] & + (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER)); + return (v != 0 ? TRUE : FALSE); + } + return FALSE; +} + +static int +iso_8859_5_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 256) + return ENC_IS_ISO_8859_5_CTYPE(code, ctype); + else + return FALSE; +} + +static int +iso_8859_5_get_all_pair_ambig_codes(OnigAmbigType flag, + const OnigPairAmbigCodes** ccs) +{ + static const OnigPairAmbigCodes cc[] = { + { 0xa1, 0xf1 }, + { 0xa2, 0xf2 }, + { 0xa3, 0xf3 }, + { 0xa4, 0xf4 }, + { 0xa5, 0xf5 }, + { 0xa6, 0xf6 }, + { 0xa7, 0xf7 }, + { 0xa8, 0xf8 }, + { 0xa9, 0xf9 }, + { 0xaa, 0xfa }, + { 0xab, 0xfb }, + { 0xac, 0xfc }, + { 0xae, 0xfe }, + { 0xaf, 0xff }, + + { 0xb0, 0xd0 }, + { 0xb1, 0xd1 }, + { 0xb2, 0xd2 }, + { 0xb3, 0xd3 }, + { 0xb4, 0xd4 }, + { 0xb5, 0xd5 }, + { 0xb6, 0xd6 }, + { 0xb7, 0xd7 }, + { 0xb8, 0xd8 }, + { 0xb9, 0xd9 }, + { 0xba, 0xda }, + { 0xbb, 0xdb }, + { 0xbc, 0xdc }, + { 0xbd, 0xdd }, + { 0xbe, 0xdf }, + { 0xbf, 0xdf }, + + { 0xc0, 0xe0 }, + { 0xc1, 0xe1 }, + { 0xc2, 0xe2 }, + { 0xc3, 0xe3 }, + { 0xc4, 0xe4 }, + { 0xc5, 0xe5 }, + { 0xc6, 0xe6 }, + { 0xc7, 0xe7 }, + { 0xc8, 0xe8 }, + { 0xc9, 0xe9 }, + { 0xca, 0xea }, + { 0xcb, 0xeb }, + { 0xcc, 0xec }, + { 0xcd, 0xed }, + { 0xce, 0xee }, + { 0xcf, 0xef }, + + { 0xd0, 0xb0 }, + { 0xd1, 0xb1 }, + { 0xd2, 0xb2 }, + { 0xd3, 0xb3 }, + { 0xd4, 0xb4 }, + { 0xd5, 0xb5 }, + { 0xd6, 0xb6 }, + { 0xd7, 0xb7 }, + { 0xd8, 0xb8 }, + { 0xd9, 0xb9 }, + { 0xda, 0xba }, + { 0xdb, 0xbb }, + { 0xdc, 0xbc }, + { 0xdd, 0xbd }, + { 0xde, 0xbe }, + { 0xdf, 0xbf }, + + { 0xe0, 0xc0 }, + { 0xe1, 0xc1 }, + { 0xe2, 0xc2 }, + { 0xe3, 0xc3 }, + { 0xe4, 0xc4 }, + { 0xe5, 0xc5 }, + { 0xe6, 0xc6 }, + { 0xe7, 0xc7 }, + { 0xe8, 0xc8 }, + { 0xe9, 0xc9 }, + { 0xea, 0xca }, + { 0xeb, 0xcb }, + { 0xec, 0xcc }, + { 0xed, 0xcd }, + { 0xee, 0xce }, + { 0xef, 0xcf }, + + { 0xf1, 0xa1 }, + { 0xf2, 0xa2 }, + { 0xf3, 0xa3 }, + { 0xf4, 0xa4 }, + { 0xf5, 0xa5 }, + { 0xf6, 0xa6 }, + { 0xf7, 0xa7 }, + { 0xf8, 0xa8 }, + { 0xf9, 0xa9 }, + { 0xfa, 0xaa }, + { 0xfb, 0xab }, + { 0xfc, 0xac }, + { 0xfe, 0xae }, + { 0xff, 0xaf } + }; + + if (flag == ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) { + *ccs = OnigAsciiPairAmbigCodes; + return 52; + } + if (flag == ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) { + *ccs = cc; + return sizeof(cc) / sizeof(OnigPairAmbigCodes); + } + else + return 0; +} + +OnigEncodingType OnigEncodingISO_8859_5 = { + onigenc_single_byte_mbc_enc_len, + "ISO-8859-5", /* name */ + 1, /* max enc length */ + 1, /* min enc length */ + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + onigenc_single_byte_mbc_to_code, + onigenc_single_byte_code_to_mbclen, + onigenc_single_byte_code_to_mbc, + iso_8859_5_mbc_to_normalize, + iso_8859_5_is_mbc_ambiguous, + iso_8859_5_get_all_pair_ambig_codes, + onigenc_nothing_get_all_comp_ambig_codes, + iso_8859_5_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + onigenc_single_byte_left_adjust_char_head, + onigenc_always_true_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/iso8859_6.c b/ext/mbstring/oniguruma/enc/iso8859_6.c new file mode 100644 index 0000000..fffcd0e --- /dev/null +++ b/ext/mbstring/oniguruma/enc/iso8859_6.c @@ -0,0 +1,105 @@ +/********************************************************************** + iso8859_6.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2005 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define ENC_IS_ISO_8859_6_CTYPE(code,ctype) \ + ((EncISO_8859_6_CtypeTable[code] & ctype) != 0) + +static const unsigned short EncISO_8859_6_CtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x220c, 0x2209, 0x2208, 0x2208, 0x2208, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0284, 0x0000, 0x0000, 0x0000, 0x00a0, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x01a0, 0x01a0, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x01a0, 0x0000, 0x0000, 0x0000, 0x01a0, + 0x0000, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, + 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, + 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, + 0x10a2, 0x10a2, 0x10a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, + 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, + 0x10a2, 0x10a2, 0x10a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +static int +iso_8859_6_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 256) + return ENC_IS_ISO_8859_6_CTYPE(code, ctype); + else + return FALSE; +} + +OnigEncodingType OnigEncodingISO_8859_6 = { + onigenc_single_byte_mbc_enc_len, + "ISO-8859-6", /* name */ + 1, /* max enc length */ + 1, /* min enc length */ + ( ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + onigenc_single_byte_mbc_to_code, + onigenc_single_byte_code_to_mbclen, + onigenc_single_byte_code_to_mbc, + onigenc_ascii_mbc_to_normalize, + onigenc_ascii_is_mbc_ambiguous, + onigenc_ascii_get_all_pair_ambig_codes, + onigenc_nothing_get_all_comp_ambig_codes, + iso_8859_6_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + onigenc_single_byte_left_adjust_char_head, + onigenc_always_true_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/iso8859_7.c b/ext/mbstring/oniguruma/enc/iso8859_7.c new file mode 100644 index 0000000..e87661d --- /dev/null +++ b/ext/mbstring/oniguruma/enc/iso8859_7.c @@ -0,0 +1,278 @@ +/********************************************************************** + iso8859_7.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2005 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define ENC_ISO_8859_7_TO_LOWER_CASE(c) EncISO_8859_7_ToLowerCaseTable[c] +#define ENC_IS_ISO_8859_7_CTYPE(code,ctype) \ + ((EncISO_8859_7_CtypeTable[code] & ctype) != 0) + +static const UChar EncISO_8859_7_ToLowerCaseTable[256] = { + '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', + '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', + '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', + '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', + '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', + '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', + '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', + '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', + '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', + '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', + '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', + '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', + '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', + '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', + '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', + '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257', + '\260', '\261', '\262', '\263', '\264', '\265', '\334', '\267', + '\335', '\336', '\337', '\273', '\374', '\275', '\375', '\376', + '\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\322', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\334', '\335', '\336', '\337', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377' +}; + +static const unsigned short EncISO_8859_7_CtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x220c, 0x2209, 0x2208, 0x2208, 0x2208, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0284, 0x01a0, 0x01a0, 0x00a0, 0x0000, 0x0000, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x0000, 0x01a0, 0x00a0, 0x01a0, 0x0000, 0x01a0, + 0x00a0, 0x00a0, 0x10a0, 0x10a0, 0x00a0, 0x00a0, 0x14a2, 0x01a0, + 0x14a2, 0x14a2, 0x14a2, 0x01a0, 0x14a2, 0x10a0, 0x14a2, 0x14a2, + 0x10e2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x0000, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x0000 +}; + +static int +iso_8859_7_mbc_to_normalize(OnigAmbigType flag, + const UChar** pp, const UChar* end, UChar* lower) +{ + const UChar* p = *pp; + + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + *lower = ENC_ISO_8859_7_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + (*pp)++; + return 1; /* return byte length of converted char to lower */ +} + +static int +iso_8859_7_is_mbc_ambiguous(OnigAmbigType flag, + const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + (*pp)++; + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + int v = (EncISO_8859_7_CtypeTable[*p] & + (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER)); + + if ((v | ONIGENC_CTYPE_LOWER) != 0) { + if (*p == 0xc0 || *p == 0xe0) + return FALSE; + else + return TRUE; + } + + return (v != 0 ? TRUE : FALSE); + } + return FALSE; +} + +static int +iso_8859_7_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 256) + return ENC_IS_ISO_8859_7_CTYPE(code, ctype); + else + return FALSE; +} + +static int +iso_8859_7_get_all_pair_ambig_codes(OnigAmbigType flag, + const OnigPairAmbigCodes** ccs) +{ + static const OnigPairAmbigCodes cc[] = { + { 0xb6, 0xdc }, + { 0xb8, 0xdd }, + { 0xb9, 0xde }, + { 0xba, 0xdf }, + { 0xbc, 0xfc }, + { 0xbe, 0xfd }, + { 0xbf, 0xfe }, + + { 0xc1, 0xe1 }, + { 0xc2, 0xe2 }, + { 0xc3, 0xe3 }, + { 0xc4, 0xe4 }, + { 0xc5, 0xe5 }, + { 0xc6, 0xe6 }, + { 0xc7, 0xe7 }, + { 0xc8, 0xe8 }, + { 0xc9, 0xe9 }, + { 0xca, 0xea }, + { 0xcb, 0xeb }, + { 0xcc, 0xec }, + { 0xcd, 0xed }, + { 0xce, 0xee }, + { 0xcf, 0xef }, + + { 0xd0, 0xf0 }, + { 0xd1, 0xf1 }, + { 0xd2, 0xf2 }, + { 0xd3, 0xf3 }, + { 0xd4, 0xf4 }, + { 0xd5, 0xf5 }, + { 0xd6, 0xf6 }, + { 0xd7, 0xf7 }, + { 0xd8, 0xf8 }, + { 0xd9, 0xf9 }, + { 0xda, 0xfa }, + { 0xdb, 0xfb }, + { 0xdc, 0xb6 }, + { 0xdd, 0xb8 }, + { 0xde, 0xb9 }, + { 0xdf, 0xba }, + + { 0xe1, 0xc1 }, + { 0xe2, 0xc2 }, + { 0xe3, 0xc3 }, + { 0xe4, 0xc4 }, + { 0xe5, 0xc5 }, + { 0xe6, 0xc6 }, + { 0xe7, 0xc7 }, + { 0xe8, 0xc8 }, + { 0xe9, 0xc9 }, + { 0xea, 0xca }, + { 0xeb, 0xcb }, + { 0xec, 0xcc }, + { 0xed, 0xcd }, + { 0xee, 0xce }, + { 0xef, 0xcf }, + + { 0xf0, 0xd0 }, + { 0xf1, 0xd1 }, + { 0xf2, 0xd2 }, + { 0xf3, 0xd3 }, + { 0xf4, 0xd4 }, + { 0xf5, 0xd5 }, + { 0xf6, 0xd6 }, + { 0xf7, 0xd7 }, + { 0xf8, 0xd8 }, + { 0xf9, 0xd9 }, + { 0xfa, 0xda }, + { 0xfb, 0xdb }, + { 0xfc, 0xbc }, + { 0xfd, 0xbe }, + { 0xfe, 0xbf } + }; + + if (flag == ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) { + *ccs = OnigAsciiPairAmbigCodes; + return 52; + } + if (flag == ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) { + *ccs = cc; + return sizeof(cc) / sizeof(OnigPairAmbigCodes); + } + else + return 0; +} + +OnigEncodingType OnigEncodingISO_8859_7 = { + onigenc_single_byte_mbc_enc_len, + "ISO-8859-7", /* name */ + 1, /* max enc length */ + 1, /* min enc length */ + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + onigenc_single_byte_mbc_to_code, + onigenc_single_byte_code_to_mbclen, + onigenc_single_byte_code_to_mbc, + iso_8859_7_mbc_to_normalize, + iso_8859_7_is_mbc_ambiguous, + iso_8859_7_get_all_pair_ambig_codes, + onigenc_nothing_get_all_comp_ambig_codes, + iso_8859_7_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + onigenc_single_byte_left_adjust_char_head, + onigenc_always_true_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/iso8859_8.c b/ext/mbstring/oniguruma/enc/iso8859_8.c new file mode 100644 index 0000000..e76966c --- /dev/null +++ b/ext/mbstring/oniguruma/enc/iso8859_8.c @@ -0,0 +1,105 @@ +/********************************************************************** + iso8859_8.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2004 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define ENC_IS_ISO_8859_8_CTYPE(code,ctype) \ + ((EncISO_8859_8_CtypeTable[code] & ctype) != 0) + +static const unsigned short EncISO_8859_8_CtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x220c, 0x2209, 0x2208, 0x2208, 0x2208, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0284, 0x0000, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x00a0, 0x01a0, 0x00a0, 0x01a0, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x10a0, 0x10a0, 0x00a0, 0x10e2, 0x00a0, 0x01a0, + 0x00a0, 0x10a0, 0x00a0, 0x01a0, 0x10a0, 0x10a0, 0x10a0, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01a0, + 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, + 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, + 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, 0x10a2, + 0x10a2, 0x10a2, 0x10a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +static int +iso_8859_8_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 256) + return ENC_IS_ISO_8859_8_CTYPE(code, ctype); + else + return FALSE; +} + +OnigEncodingType OnigEncodingISO_8859_8 = { + onigenc_single_byte_mbc_enc_len, + "ISO-8859-8", /* name */ + 1, /* max enc length */ + 1, /* min enc length */ + ( ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + onigenc_single_byte_mbc_to_code, + onigenc_single_byte_code_to_mbclen, + onigenc_single_byte_code_to_mbc, + onigenc_ascii_mbc_to_normalize, + onigenc_ascii_is_mbc_ambiguous, + onigenc_ascii_get_all_pair_ambig_codes, + onigenc_nothing_get_all_comp_ambig_codes, + iso_8859_8_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + onigenc_single_byte_left_adjust_char_head, + onigenc_always_true_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/iso8859_9.c b/ext/mbstring/oniguruma/enc/iso8859_9.c new file mode 100644 index 0000000..16a30c5 --- /dev/null +++ b/ext/mbstring/oniguruma/enc/iso8859_9.c @@ -0,0 +1,270 @@ +/********************************************************************** + iso8859_9.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define ENC_ISO_8859_9_TO_LOWER_CASE(c) EncISO_8859_9_ToLowerCaseTable[c] +#define ENC_IS_ISO_8859_9_CTYPE(code,ctype) \ + ((EncISO_8859_9_CtypeTable[code] & ctype) != 0) + +static const UChar EncISO_8859_9_ToLowerCaseTable[256] = { + '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', + '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', + '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', + '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', + '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', + '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', + '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', + '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', + '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', + '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', + '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', + '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', + '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', + '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', + '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', + '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257', + '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', + '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\327', + '\370', '\371', '\372', '\373', '\374', '\335', '\376', '\337', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377' +}; + +static const unsigned short EncISO_8859_9_CtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x220c, 0x2209, 0x2208, 0x2208, 0x2208, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0284, 0x01a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x10e2, 0x01a0, 0x00a0, 0x01a0, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x10a0, 0x10a0, 0x00a0, 0x10e2, 0x00a0, 0x01a0, + 0x00a0, 0x10a0, 0x10e2, 0x01a0, 0x10a0, 0x10a0, 0x10a0, 0x01a0, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x00a0, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x00a0, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2 +}; + +static int +iso_8859_9_mbc_to_normalize(OnigAmbigType flag, + const UChar** pp, const UChar* end, UChar* lower) +{ + const UChar* p = *pp; + + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + *lower = ENC_ISO_8859_9_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + (*pp)++; + return 1; /* return byte length of converted char to lower */ +} + +static int +iso_8859_9_is_mbc_ambiguous(OnigAmbigType flag, + const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + (*pp)++; + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + int v = (EncISO_8859_9_CtypeTable[*p] & + (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER)); + + if ((v | ONIGENC_CTYPE_LOWER) != 0) { + /* 0xdf etc.. are lower case letter, but can't convert. */ + if (*p == 0xdf || (*p >= 0xaa && *p <= 0xba)) + return FALSE; + else + return TRUE; + } + + return (v != 0 ? TRUE : FALSE); + } + return FALSE; +} + +static int +iso_8859_9_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 256) + return ENC_IS_ISO_8859_9_CTYPE(code, ctype); + else + return FALSE; +} + +static int +iso_8859_9_get_all_pair_ambig_codes(OnigAmbigType flag, + const OnigPairAmbigCodes** ccs) +{ + static const OnigPairAmbigCodes cc[] = { + { 0xc0, 0xe0 }, + { 0xc1, 0xe1 }, + { 0xc2, 0xe2 }, + { 0xc3, 0xe3 }, + { 0xc4, 0xe4 }, + { 0xc5, 0xe5 }, + { 0xc6, 0xe6 }, + { 0xc7, 0xe7 }, + { 0xc8, 0xe8 }, + { 0xc9, 0xe9 }, + { 0xca, 0xea }, + { 0xcb, 0xeb }, + { 0xcc, 0xec }, + { 0xcd, 0xed }, + { 0xce, 0xee }, + { 0xcf, 0xef }, + + { 0xd0, 0xf0 }, + { 0xd1, 0xf1 }, + { 0xd2, 0xf2 }, + { 0xd3, 0xf3 }, + { 0xd4, 0xf4 }, + { 0xd5, 0xf5 }, + { 0xd6, 0xf6 }, + { 0xd8, 0xf8 }, + { 0xd9, 0xf9 }, + { 0xda, 0xfa }, + { 0xdb, 0xfb }, + { 0xdc, 0xfc }, + { 0xdd, 0xfd }, + { 0xde, 0xfe }, + + { 0xe0, 0xc0 }, + { 0xe1, 0xc1 }, + { 0xe2, 0xc2 }, + { 0xe3, 0xc3 }, + { 0xe4, 0xc4 }, + { 0xe5, 0xc5 }, + { 0xe6, 0xc6 }, + { 0xe7, 0xc7 }, + { 0xe8, 0xc8 }, + { 0xe9, 0xc9 }, + { 0xea, 0xca }, + { 0xeb, 0xcb }, + { 0xec, 0xcc }, + { 0xed, 0xcd }, + { 0xee, 0xce }, + { 0xef, 0xcf }, + + { 0xf0, 0xd0 }, + { 0xf1, 0xd1 }, + { 0xf2, 0xd2 }, + { 0xf3, 0xd3 }, + { 0xf4, 0xd4 }, + { 0xf5, 0xd5 }, + { 0xf6, 0xd6 }, + { 0xf8, 0xd8 }, + { 0xf9, 0xd9 }, + { 0xfa, 0xda }, + { 0xfb, 0xdb }, + { 0xfc, 0xdc }, + { 0xfd, 0xdd }, + { 0xfe, 0xde } + }; + + if (flag == ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) { + *ccs = OnigAsciiPairAmbigCodes; + return 52; + } + if (flag == ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) { + *ccs = cc; + return sizeof(cc) / sizeof(OnigPairAmbigCodes); + } + else + return 0; +} + +OnigEncodingType OnigEncodingISO_8859_9 = { + onigenc_single_byte_mbc_enc_len, + "ISO-8859-9", /* name */ + 1, /* max enc length */ + 1, /* min enc length */ + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + onigenc_single_byte_mbc_to_code, + onigenc_single_byte_code_to_mbclen, + onigenc_single_byte_code_to_mbc, + iso_8859_9_mbc_to_normalize, + iso_8859_9_is_mbc_ambiguous, + iso_8859_9_get_all_pair_ambig_codes, + onigenc_ess_tsett_get_all_comp_ambig_codes, + iso_8859_9_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + onigenc_single_byte_left_adjust_char_head, + onigenc_always_true_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/koi8.c b/ext/mbstring/oniguruma/enc/koi8.c new file mode 100644 index 0000000..d7277e8 --- /dev/null +++ b/ext/mbstring/oniguruma/enc/koi8.c @@ -0,0 +1,264 @@ +/********************************************************************** + koi8.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2004 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define ENC_KOI8_TO_LOWER_CASE(c) EncKOI8_ToLowerCaseTable[c] +#define ENC_IS_KOI8_CTYPE(code,ctype) \ + ((EncKOI8_CtypeTable[code] & ctype) != 0) + +static const UChar EncKOI8_ToLowerCaseTable[256] = { + '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', + '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', + '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', + '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', + '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', + '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', + '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', + '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', + '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', + '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', + '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', + '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', + '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', + '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', + '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', + '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257', + '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', + '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', + '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307', + '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317', + '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327', + '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337', + '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307', + '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317', + '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327', + '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337' +}; + +static const unsigned short EncKOI8_CtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x220c, 0x2209, 0x2208, 0x2208, 0x2208, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0284, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2 +}; + +static int +koi8_mbc_to_normalize(OnigAmbigType flag, + const OnigUChar** pp, const OnigUChar* end, OnigUChar* lower) +{ + const OnigUChar* p = *pp; + + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + *lower = ENC_KOI8_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + (*pp)++; + return 1; /* return byte length of converted char to lower */ +} + +static int +koi8_is_mbc_ambiguous(OnigAmbigType flag, const OnigUChar** pp, const OnigUChar* end) +{ + const OnigUChar* p = *pp; + + (*pp)++; + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + int v = (EncKOI8_CtypeTable[*p] & + (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER)); + return (v != 0 ? TRUE : FALSE); + } + return FALSE; +} + + +static int +koi8_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 256) + return ENC_IS_KOI8_CTYPE(code, ctype); + else + return FALSE; +} + +static int +koi8_get_all_pair_ambig_codes(OnigAmbigType flag, + const OnigPairAmbigCodes** ccs) +{ + static const OnigPairAmbigCodes cc[] = { + { 0xc0, 0xe0 }, + { 0xc1, 0xe1 }, + { 0xc2, 0xe2 }, + { 0xc3, 0xe3 }, + { 0xc4, 0xe4 }, + { 0xc5, 0xe5 }, + { 0xc6, 0xe6 }, + { 0xc7, 0xe7 }, + { 0xc8, 0xe8 }, + { 0xc9, 0xe9 }, + { 0xca, 0xea }, + { 0xcb, 0xeb }, + { 0xcc, 0xec }, + { 0xcd, 0xed }, + { 0xce, 0xee }, + { 0xcf, 0xef }, + + { 0xd0, 0xf0 }, + { 0xd1, 0xf1 }, + { 0xd2, 0xf2 }, + { 0xd3, 0xf3 }, + { 0xd4, 0xf4 }, + { 0xd5, 0xf5 }, + { 0xd6, 0xf6 }, + { 0xd7, 0xf7 }, + { 0xd8, 0xf8 }, + { 0xd9, 0xf9 }, + { 0xda, 0xfa }, + { 0xdb, 0xfb }, + { 0xdc, 0xfc }, + { 0xdd, 0xfd }, + { 0xde, 0xfe }, + { 0xdf, 0xff }, + + { 0xe0, 0xc0 }, + { 0xe1, 0xc1 }, + { 0xe2, 0xc2 }, + { 0xe3, 0xc3 }, + { 0xe4, 0xc4 }, + { 0xe5, 0xc5 }, + { 0xe6, 0xc6 }, + { 0xe7, 0xc7 }, + { 0xe8, 0xc8 }, + { 0xe9, 0xc9 }, + { 0xea, 0xca }, + { 0xeb, 0xcb }, + { 0xec, 0xcc }, + { 0xed, 0xcd }, + { 0xee, 0xce }, + { 0xef, 0xcf }, + + { 0xf0, 0xd0 }, + { 0xf1, 0xd1 }, + { 0xf2, 0xd2 }, + { 0xf3, 0xd3 }, + { 0xf4, 0xd4 }, + { 0xf5, 0xd5 }, + { 0xf6, 0xd6 }, + { 0xf7, 0xd7 }, + { 0xf8, 0xd8 }, + { 0xf9, 0xd9 }, + { 0xfa, 0xda }, + { 0xfb, 0xdb }, + { 0xfc, 0xdc }, + { 0xfe, 0xde }, + { 0xff, 0xdf } + }; + + if (flag == ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) { + *ccs = OnigAsciiPairAmbigCodes; + return 52; + } + if (flag == ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) { + *ccs = cc; + return sizeof(cc) / sizeof(OnigPairAmbigCodes); + } + else + return 0; +} + +OnigEncodingType OnigEncodingKOI8 = { + onigenc_single_byte_mbc_enc_len, + "KOI8", /* name */ + 1, /* max enc length */ + 1, /* min enc length */ + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + onigenc_single_byte_mbc_to_code, + onigenc_single_byte_code_to_mbclen, + onigenc_single_byte_code_to_mbc, + koi8_mbc_to_normalize, + koi8_is_mbc_ambiguous, + koi8_get_all_pair_ambig_codes, + onigenc_nothing_get_all_comp_ambig_codes, + koi8_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + onigenc_single_byte_left_adjust_char_head, + onigenc_always_true_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/koi8_r.c b/ext/mbstring/oniguruma/enc/koi8_r.c new file mode 100644 index 0000000..1010f5f --- /dev/null +++ b/ext/mbstring/oniguruma/enc/koi8_r.c @@ -0,0 +1,266 @@ +/********************************************************************** + koi8_r.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define ENC_KOI8_R_TO_LOWER_CASE(c) EncKOI8_R_ToLowerCaseTable[c] +#define ENC_IS_KOI8_R_CTYPE(code,ctype) \ + ((EncKOI8_R_CtypeTable[code] & ctype) != 0) + +static const UChar EncKOI8_R_ToLowerCaseTable[256] = { + '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', + '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', + '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', + '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', + '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', + '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', + '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', + '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', + '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', + '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', + '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', + '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', + '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', + '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', + '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', + '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257', + '\260', '\261', '\262', '\243', '\264', '\265', '\266', '\267', + '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', + '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307', + '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317', + '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327', + '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337', + '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307', + '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317', + '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327', + '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337' +}; + +static const unsigned short EncKOI8_R_CtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x220c, 0x2209, 0x2208, 0x2208, 0x2208, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x0284, 0x00a0, 0x00a0, 0x10a0, 0x01a0, 0x00a0, + 0x00a0, 0x00a0, 0x00a0, 0x10e2, 0x00a0, 0x00a0, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x00a0, 0x14a2, 0x00a0, 0x00a0, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2 +}; + +static int +koi8_r_mbc_to_normalize(OnigAmbigType flag, + const UChar** pp, const UChar* end, UChar* lower) +{ + const UChar* p = *pp; + + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + *lower = ENC_KOI8_R_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + (*pp)++; + return 1; /* return byte length of converted char to lower */ +} + +static int +koi8_r_is_mbc_ambiguous(OnigAmbigType flag, const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + (*pp)++; + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + int v = (EncKOI8_R_CtypeTable[*p] & + (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER)); + return (v != 0 ? TRUE : FALSE); + } + return FALSE; +} + +static int +koi8_r_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 256) + return ENC_IS_KOI8_R_CTYPE(code, ctype); + else + return FALSE; +} + +static int +koi8_r_get_all_pair_ambig_codes(OnigAmbigType flag, + const OnigPairAmbigCodes** ccs) +{ + static const OnigPairAmbigCodes cc[] = { + { 0xa3, 0xb3 }, + { 0xb3, 0xa3 }, + + { 0xc0, 0xe0 }, + { 0xc1, 0xe1 }, + { 0xc2, 0xe2 }, + { 0xc3, 0xe3 }, + { 0xc4, 0xe4 }, + { 0xc5, 0xe5 }, + { 0xc6, 0xe6 }, + { 0xc7, 0xe7 }, + { 0xc8, 0xe8 }, + { 0xc9, 0xe9 }, + { 0xca, 0xea }, + { 0xcb, 0xeb }, + { 0xcc, 0xec }, + { 0xcd, 0xed }, + { 0xce, 0xee }, + { 0xcf, 0xef }, + + { 0xd0, 0xf0 }, + { 0xd1, 0xf1 }, + { 0xd2, 0xf2 }, + { 0xd3, 0xf3 }, + { 0xd4, 0xf4 }, + { 0xd5, 0xf5 }, + { 0xd6, 0xf6 }, + { 0xd7, 0xf7 }, + { 0xd8, 0xf8 }, + { 0xd9, 0xf9 }, + { 0xda, 0xfa }, + { 0xdb, 0xfb }, + { 0xdc, 0xfc }, + { 0xdd, 0xfd }, + { 0xde, 0xfe }, + { 0xdf, 0xff }, + + { 0xe0, 0xc0 }, + { 0xe1, 0xc1 }, + { 0xe2, 0xc2 }, + { 0xe3, 0xc3 }, + { 0xe4, 0xc4 }, + { 0xe5, 0xc5 }, + { 0xe6, 0xc6 }, + { 0xe7, 0xc7 }, + { 0xe8, 0xc8 }, + { 0xe9, 0xc9 }, + { 0xea, 0xca }, + { 0xeb, 0xcb }, + { 0xec, 0xcc }, + { 0xed, 0xcd }, + { 0xee, 0xce }, + { 0xef, 0xcf }, + + { 0xf0, 0xd0 }, + { 0xf1, 0xd1 }, + { 0xf2, 0xd2 }, + { 0xf3, 0xd3 }, + { 0xf4, 0xd4 }, + { 0xf5, 0xd5 }, + { 0xf6, 0xd6 }, + { 0xf7, 0xd7 }, + { 0xf8, 0xd8 }, + { 0xf9, 0xd9 }, + { 0xfa, 0xda }, + { 0xfb, 0xdb }, + { 0xfc, 0xdc }, + { 0xfe, 0xde }, + { 0xff, 0xdf } + }; + + if (flag == ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) { + *ccs = OnigAsciiPairAmbigCodes; + return 52; + } + if (flag == ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) { + *ccs = cc; + return sizeof(cc) / sizeof(OnigPairAmbigCodes); + } + else + return 0; +} + +OnigEncodingType OnigEncodingKOI8_R = { + onigenc_single_byte_mbc_enc_len, + "KOI8-R", /* name */ + 1, /* max enc length */ + 1, /* min enc length */ + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + onigenc_single_byte_mbc_to_code, + onigenc_single_byte_code_to_mbclen, + onigenc_single_byte_code_to_mbc, + koi8_r_mbc_to_normalize, + koi8_r_is_mbc_ambiguous, + koi8_r_get_all_pair_ambig_codes, + onigenc_nothing_get_all_comp_ambig_codes, + koi8_r_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + onigenc_single_byte_left_adjust_char_head, + onigenc_always_true_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/mktable.c b/ext/mbstring/oniguruma/enc/mktable.c new file mode 100644 index 0000000..fcf0574 --- /dev/null +++ b/ext/mbstring/oniguruma/enc/mktable.c @@ -0,0 +1,1115 @@ +/********************************************************************** + mktable.c +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 <stdlib.h> +#include <stdio.h> + +#define NOT_RUBY +#include "regenc.h" + +#define UNICODE_ISO_8859_1 0 +#define ISO_8859_1 1 +#define ISO_8859_2 2 +#define ISO_8859_3 3 +#define ISO_8859_4 4 +#define ISO_8859_5 5 +#define ISO_8859_6 6 +#define ISO_8859_7 7 +#define ISO_8859_8 8 +#define ISO_8859_9 9 +#define ISO_8859_10 10 +#define ISO_8859_11 11 +#define ISO_8859_13 12 +#define ISO_8859_14 13 +#define ISO_8859_15 14 +#define ISO_8859_16 15 +#define KOI8 16 +#define KOI8_R 17 + +typedef struct { + int num; + char* name; +} ENC_INFO; + +static ENC_INFO Info[] = { + { UNICODE_ISO_8859_1, "UNICODE_ISO_8859_1" }, + { ISO_8859_1, "ISO_8859_1" }, + { ISO_8859_2, "ISO_8859_2" }, + { ISO_8859_3, "ISO_8859_3" }, + { ISO_8859_4, "ISO_8859_4" }, + { ISO_8859_5, "ISO_8859_5" }, + { ISO_8859_6, "ISO_8859_6" }, + { ISO_8859_7, "ISO_8859_7" }, + { ISO_8859_8, "ISO_8859_8" }, + { ISO_8859_9, "ISO_8859_9" }, + { ISO_8859_10, "ISO_8859_10" }, + { ISO_8859_11, "ISO_8859_11" }, + { ISO_8859_13, "ISO_8859_13" }, + { ISO_8859_14, "ISO_8859_14" }, + { ISO_8859_15, "ISO_8859_15" }, + { ISO_8859_16, "ISO_8859_16" }, + { KOI8, "KOI8" }, + { KOI8_R, "KOI8_R" } +}; + + +static int IsAlpha(int enc, int c) +{ + if (c >= 0x41 && c <= 0x5a) return 1; + if (c >= 0x61 && c <= 0x7a) return 1; + + switch (enc) { + case UNICODE_ISO_8859_1: + case ISO_8859_1: + case ISO_8859_9: + if (c == 0xaa) return 1; + if (c == 0xb5) return 1; + if (c == 0xba) return 1; + if (c >= 0xc0 && c <= 0xd6) return 1; + if (c >= 0xd8 && c <= 0xf6) return 1; + if (c >= 0xf8 && c <= 0xff) return 1; + break; + + case ISO_8859_2: + if (c == 0xa1 || c == 0xa3) return 1; + if (c == 0xa5 || c == 0xa6) return 1; + if (c >= 0xa9 && c <= 0xac) return 1; + if (c >= 0xae && c <= 0xaf) return 1; + if (c == 0xb1 || c == 0xb3) return 1; + if (c == 0xb5 || c == 0xb6) return 1; + if (c >= 0xb9 && c <= 0xbc) return 1; + if (c >= 0xbe && c <= 0xbf) return 1; + if (c >= 0xc0 && c <= 0xd6) return 1; + if (c >= 0xd8 && c <= 0xf6) return 1; + if (c >= 0xf8 && c <= 0xfe) return 1; + break; + + case ISO_8859_3: + if (c == 0xa1) return 1; + if (c == 0xa6) return 1; + if (c >= 0xa9 && c <= 0xac) return 1; + if (c == 0xaf) return 1; + if (c == 0xb1) return 1; + if (c == 0xb5 || c == 0xb6) return 1; + if (c >= 0xb9 && c <= 0xbc) return 1; + if (c == 0xbf) return 1; + if (c >= 0xc0 && c <= 0xc2) return 1; + if (c >= 0xc4 && c <= 0xcf) return 1; + if (c >= 0xd1 && c <= 0xd6) return 1; + if (c >= 0xd8 && c <= 0xe2) return 1; + if (c >= 0xe4 && c <= 0xef) return 1; + if (c >= 0xf1 && c <= 0xf6) return 1; + if (c >= 0xf8 && c <= 0xfe) return 1; + break; + + case ISO_8859_4: + if (c >= 0xa1 && c <= 0xa3) return 1; + if (c == 0xa5 || c == 0xa6) return 1; + if (c >= 0xa9 && c <= 0xac) return 1; + if (c == 0xae) return 1; + if (c == 0xb1 || c == 0xb3) return 1; + if (c == 0xb5 || c == 0xb6) return 1; + if (c >= 0xb9 && c <= 0xbf) return 1; + if (c >= 0xc0 && c <= 0xd6) return 1; + if (c >= 0xd8 && c <= 0xf6) return 1; + if (c >= 0xf8 && c <= 0xfe) return 1; + break; + + case ISO_8859_5: + if (c >= 0xa1 && c <= 0xcf && c != 0xad) return 1; + if (c >= 0xd0 && c <= 0xff && c != 0xf0 && c != 0xfd) return 1; + break; + + case ISO_8859_6: + if (c >= 0xc1 && c <= 0xda) return 1; + if (c >= 0xe0 && c <= 0xf2) return 1; + break; + + case ISO_8859_7: + if (c == 0xb6) return 1; + if (c >= 0xb8 && c <= 0xba) return 1; + if (c == 0xbc) return 1; + if (c >= 0xbe && c <= 0xbf) return 1; + if (c == 0xc0) return 1; + if (c >= 0xc1 && c <= 0xdb && c != 0xd2) return 1; + if (c >= 0xdc && c <= 0xfe) return 1; + break; + + case ISO_8859_8: + if (c == 0xb5) return 1; + if (c >= 0xe0 && c <= 0xfa) return 1; + break; + + case ISO_8859_10: + if (c >= 0xa1 && c <= 0xa6) return 1; + if (c >= 0xa8 && c <= 0xac) return 1; + if (c == 0xae || c == 0xaf) return 1; + if (c >= 0xb1 && c <= 0xb6) return 1; + if (c >= 0xb8 && c <= 0xbc) return 1; + if (c >= 0xbe && c <= 0xff) return 1; + break; + + case ISO_8859_11: + if (c >= 0xa1 && c <= 0xda) return 1; + if (c >= 0xdf && c <= 0xfb) return 1; + break; + + case ISO_8859_13: + if (c == 0xa8) return 1; + if (c == 0xaa) return 1; + if (c == 0xaf) return 1; + if (c == 0xb5) return 1; + if (c == 0xb8) return 1; + if (c == 0xba) return 1; + if (c >= 0xbf && c <= 0xd6) return 1; + if (c >= 0xd8 && c <= 0xf6) return 1; + if (c >= 0xf8 && c <= 0xfe) return 1; + break; + + case ISO_8859_14: + if (c == 0xa1 || c == 0xa2) return 1; + if (c == 0xa4 || c == 0xa5) return 1; + if (c == 0xa6 || c == 0xa8) return 1; + if (c >= 0xaa && c <= 0xac) return 1; + if (c >= 0xaf && c <= 0xb5) return 1; + if (c >= 0xb7 && c <= 0xff) return 1; + break; + + case ISO_8859_15: + if (c == 0xaa) return 1; + if (c == 0xb5) return 1; + if (c == 0xba) return 1; + if (c >= 0xc0 && c <= 0xd6) return 1; + if (c >= 0xd8 && c <= 0xf6) return 1; + if (c >= 0xf8 && c <= 0xff) return 1; + if (c == 0xa6) return 1; + if (c == 0xa8) return 1; + if (c == 0xb4) return 1; + if (c == 0xb8) return 1; + if (c == 0xbc) return 1; + if (c == 0xbd) return 1; + if (c == 0xbe) return 1; + break; + + case ISO_8859_16: + if (c == 0xa1) return 1; + if (c == 0xa2) return 1; + if (c == 0xa3) return 1; + if (c == 0xa6) return 1; + if (c == 0xa8) return 1; + if (c == 0xaa) return 1; + if (c == 0xac) return 1; + if (c == 0xae) return 1; + if (c == 0xaf) return 1; + if (c == 0xb2) return 1; + if (c == 0xb3) return 1; + if (c == 0xb4) return 1; + if (c >= 0xb8 && c <= 0xba) return 1; + if (c == 0xbc) return 1; + if (c == 0xbd) return 1; + if (c == 0xbe) return 1; + if (c == 0xbf) return 1; + if (c >= 0xc0 && c <= 0xde) return 1; + if (c >= 0xdf && c <= 0xff) return 1; + break; + + case KOI8_R: + if (c == 0xa3 || c == 0xb3) return 1; + /* fall */ + case KOI8: + if (c >= 0xc0 && c <= 0xff) return 1; + break; + + default: + exit(-1); + } + + return 0; +} + +static int IsBlank(int enc, int c) +{ + if (c == 0x09 || c == 0x20) return 1; + + switch (enc) { + case UNICODE_ISO_8859_1: + case ISO_8859_1: + case ISO_8859_2: + case ISO_8859_3: + case ISO_8859_4: + case ISO_8859_5: + case ISO_8859_6: + case ISO_8859_7: + case ISO_8859_8: + case ISO_8859_9: + case ISO_8859_10: + case ISO_8859_11: + case ISO_8859_13: + case ISO_8859_14: + case ISO_8859_15: + case ISO_8859_16: + case KOI8: + if (c == 0xa0) return 1; + break; + + case KOI8_R: + if (c == 0x9a) return 1; + break; + + default: + exit(-1); + } + + return 0; +} + +static int IsCntrl(int enc, int c) +{ + if (c >= 0x00 && c <= 0x1F) return 1; + + switch (enc) { + case UNICODE_ISO_8859_1: + if (c == 0xad) return 1; + /* fall */ + case ISO_8859_1: + case ISO_8859_2: + case ISO_8859_3: + case ISO_8859_4: + case ISO_8859_5: + case ISO_8859_6: + case ISO_8859_7: + case ISO_8859_8: + case ISO_8859_9: + case ISO_8859_10: + case ISO_8859_11: + case ISO_8859_13: + case ISO_8859_14: + case ISO_8859_15: + case ISO_8859_16: + case KOI8: + if (c >= 0x7f && c <= 0x9F) return 1; + break; + + + case KOI8_R: + if (c == 0x7f) return 1; + break; + + default: + exit(-1); + } + + return 0; +} + +static int IsDigit(int enc, int c) +{ + if (c >= 0x30 && c <= 0x39) return 1; + return 0; +} + +static int IsGraph(int enc, int c) +{ + if (c >= 0x21 && c <= 0x7e) return 1; + + switch (enc) { + case UNICODE_ISO_8859_1: + case ISO_8859_1: + case ISO_8859_2: + case ISO_8859_4: + case ISO_8859_5: + case ISO_8859_9: + case ISO_8859_10: + case ISO_8859_13: + case ISO_8859_14: + case ISO_8859_15: + case ISO_8859_16: + if (c >= 0xa1 && c <= 0xff) return 1; + break; + + case ISO_8859_3: + if (c >= 0xa1) { + if (c == 0xa5 || c == 0xae || c == 0xbe || c == 0xc3 || c == 0xd0 || + c == 0xe3 || c == 0xf0) + return 0; + else + return 1; + } + break; + + case ISO_8859_6: + if (c == 0xa4 || c == 0xac || c == 0xad || c == 0xbb || c == 0xbf) + return 1; + if (c >= 0xc1 && c <= 0xda) return 1; + if (c >= 0xe0 && c <= 0xf2) return 1; + break; + + case ISO_8859_7: + if (c >= 0xa1 && c <= 0xfe && + c != 0xa4 && c != 0xa5 && c != 0xaa && + c != 0xae && c != 0xd2) return 1; + break; + + case ISO_8859_8: + if (c >= 0xa2 && c <= 0xfa) { + if (c >= 0xbf && c <= 0xde) return 0; + return 1; + } + break; + + case ISO_8859_11: + if (c >= 0xa1 && c <= 0xda) return 1; + if (c >= 0xdf && c <= 0xfb) return 1; + break; + + case KOI8: + if (c >= 0xc0 && c <= 0xff) return 1; + break; + + case KOI8_R: + if (c >= 0x80 && c <= 0xff && c != 0x9a) return 1; + break; + + default: + exit(-1); + } + + return 0; +} + +static int IsLower(int enc, int c) +{ + if (c >= 0x61 && c <= 0x7a) return 1; + + switch (enc) { + case UNICODE_ISO_8859_1: + case ISO_8859_1: + case ISO_8859_9: + if (c == 0xaa) return 1; + if (c == 0xb5) return 1; + if (c == 0xba) return 1; + if (c >= 0xdf && c <= 0xf6) return 1; + if (c >= 0xf8 && c <= 0xff) return 1; + break; + + case ISO_8859_2: + if (c == 0xb1 || c == 0xb3) return 1; + if (c == 0xb5 || c == 0xb6) return 1; + if (c >= 0xb9 && c <= 0xbc) return 1; + if (c >= 0xbe && c <= 0xbf) return 1; + if (c >= 0xdf && c <= 0xf6) return 1; + if (c >= 0xf8 && c <= 0xfe) return 1; + break; + + case ISO_8859_3: + if (c == 0xb1) return 1; + if (c == 0xb5 || c == 0xb6) return 1; + if (c >= 0xb9 && c <= 0xbc) return 1; + if (c == 0xbf) return 1; + if (c == 0xdf) return 1; + if (c >= 0xe0 && c <= 0xe2) return 1; + if (c >= 0xe4 && c <= 0xef) return 1; + if (c >= 0xf1 && c <= 0xf6) return 1; + if (c >= 0xf8 && c <= 0xfe) return 1; + break; + + case ISO_8859_4: + if (c == 0xa2) return 1; + if (c == 0xb1 || c == 0xb3) return 1; + if (c == 0xb5 || c == 0xb6) return 1; + if (c >= 0xb9 && c <= 0xbc) return 1; + if (c >= 0xbe && c <= 0xbf) return 1; + if (c == 0xdf) return 1; + if (c >= 0xe0 && c <= 0xf6) return 1; + if (c >= 0xf8 && c <= 0xfe) return 1; + break; + + case ISO_8859_5: + if (c >= 0xd0 && c <= 0xff && c != 0xf0 && c != 0xfd) return 1; + break; + + case ISO_8859_6: + break; + + case ISO_8859_7: + if (c == 0xc0) return 1; + if (c >= 0xdc && c <= 0xfe) return 1; + break; + + case ISO_8859_8: + if (c == 0xb5) return 1; + break; + + case ISO_8859_10: + if (c >= 0xb1 && c <= 0xb6) return 1; + if (c >= 0xb8 && c <= 0xbc) return 1; + if (c == 0xbe || c == 0xbf) return 1; + if (c >= 0xdf && c <= 0xff) return 1; + break; + + case ISO_8859_11: + break; + + case ISO_8859_13: + if (c == 0xb5) return 1; + if (c == 0xb8) return 1; + if (c == 0xba) return 1; + if (c == 0xbf) return 1; + if (c >= 0xdf && c <= 0xf6) return 1; + if (c >= 0xf8 && c <= 0xfe) return 1; + break; + + case ISO_8859_14: + if (c == 0xa2) return 1; + if (c == 0xa5) return 1; + if (c == 0xab) return 1; + if (c == 0xb1 || c == 0xb3 || c == 0xb5) return 1; + if (c >= 0xb8 && c <= 0xba) return 1; + if (c == 0xbc) return 1; + if (c == 0xbe || c == 0xbf) return 1; + if (c >= 0xdf && c <= 0xff) return 1; + break; + + case ISO_8859_15: + if (c == 0xaa) return 1; + if (c == 0xb5) return 1; + if (c == 0xba) return 1; + if (c >= 0xdf && c <= 0xf6) return 1; + if (c >= 0xf8 && c <= 0xff) return 1; + if (c == 0xa8) return 1; + if (c == 0xb8) return 1; + if (c == 0xbd) return 1; + break; + + case ISO_8859_16: + if (c == 0xa2) return 1; + if (c == 0xa8) return 1; + if (c == 0xae) return 1; + if (c == 0xb3) return 1; + if (c >= 0xb8 && c <= 0xba) return 1; + if (c == 0xbd) return 1; + if (c == 0xbf) return 1; + if (c >= 0xdf && c <= 0xff) return 1; + break; + + case KOI8_R: + if (c == 0xa3) return 1; + /* fall */ + case KOI8: + if (c >= 0xc0 && c <= 0xdf) return 1; + break; + + default: + exit(-1); + } + + return 0; +} + +static int IsPrint(int enc, int c) +{ + if (c >= 0x20 && c <= 0x7e) return 1; + + switch (enc) { + case UNICODE_ISO_8859_1: + if (c >= 0x09 && c <= 0x0d) return 1; + if (c == 0x85) return 1; + /* fall */ + case ISO_8859_1: + case ISO_8859_2: + case ISO_8859_4: + case ISO_8859_5: + case ISO_8859_9: + case ISO_8859_10: + case ISO_8859_13: + case ISO_8859_14: + case ISO_8859_15: + case ISO_8859_16: + if (c >= 0xa0 && c <= 0xff) return 1; + break; + + case ISO_8859_3: + if (c >= 0xa0) { + if (c == 0xa5 || c == 0xae || c == 0xbe || c == 0xc3 || c == 0xd0 || + c == 0xe3 || c == 0xf0) + return 0; + else + return 1; + } + break; + + case ISO_8859_6: + if (c == 0xa0) return 1; + if (c == 0xa4 || c == 0xac || c == 0xad || c == 0xbb || c == 0xbf) + return 1; + if (c >= 0xc1 && c <= 0xda) return 1; + if (c >= 0xe0 && c <= 0xf2) return 1; + break; + + case ISO_8859_7: + if (c >= 0xa0 && c <= 0xfe && + c != 0xa4 && c != 0xa5 && c != 0xaa && + c != 0xae && c != 0xd2) return 1; + break; + + case ISO_8859_8: + if (c >= 0xa0 && c <= 0xfa) { + if (c >= 0xbf && c <= 0xde) return 0; + if (c == 0xa1) return 0; + return 1; + } + break; + + case ISO_8859_11: + if (c >= 0xa0 && c <= 0xda) return 1; + if (c >= 0xdf && c <= 0xfb) return 1; + break; + + case KOI8: + if (c == 0xa0) return 1; + if (c >= 0xc0 && c <= 0xff) return 1; + break; + + case KOI8_R: + if (c >= 0x80 && c <= 0xff) return 1; + break; + + default: + exit(-1); + } + + return 0; +} + +static int IsPunct(int enc, int c) +{ + if (enc == UNICODE_ISO_8859_1) { + if (c == 0x24 || c == 0x2b || c == 0x5e || c == 0x60 || + c == 0x7c || c == 0x7e) return 1; + if (c >= 0x3c && c <= 0x3e) return 1; + } + + if (c >= 0x21 && c <= 0x2f) return 1; + if (c >= 0x3a && c <= 0x40) return 1; + if (c >= 0x5b && c <= 0x60) return 1; + if (c >= 0x7b && c <= 0x7e) return 1; + + switch (enc) { + case ISO_8859_1: + case ISO_8859_9: + case ISO_8859_15: + if (c == 0xad) return 1; + /* fall */ + case UNICODE_ISO_8859_1: + if (c == 0xa1) return 1; + if (c == 0xab) return 1; + if (c == 0xb7) return 1; + if (c == 0xbb) return 1; + if (c == 0xbf) return 1; + break; + + case ISO_8859_2: + case ISO_8859_4: + case ISO_8859_5: + case ISO_8859_14: + if (c == 0xad) return 1; + break; + + case ISO_8859_3: + case ISO_8859_10: + if (c == 0xad) return 1; + if (c == 0xb7) return 1; + if (c == 0xbd) return 1; + break; + + case ISO_8859_6: + if (c == 0xac) return 1; + if (c == 0xad) return 1; + if (c == 0xbb) return 1; + if (c == 0xbf) return 1; + break; + + case ISO_8859_7: + if (c == 0xa1 || c == 0xa2) return 1; + if (c == 0xab) return 1; + if (c == 0xaf) return 1; + if (c == 0xad) return 1; + if (c == 0xb7 || c == 0xbb) return 1; + break; + + case ISO_8859_8: + if (c == 0xab) return 1; + if (c == 0xad) return 1; + if (c == 0xb7) return 1; + if (c == 0xbb) return 1; + if (c == 0xdf) return 1; + break; + + case ISO_8859_13: + if (c == 0xa1 || c == 0xa5) return 1; + if (c == 0xab || c == 0xad) return 1; + if (c == 0xb4 || c == 0xb7) return 1; + if (c == 0xbb) return 1; + if (c == 0xff) return 1; + break; + + case ISO_8859_16: + if (c == 0xa5) return 1; + if (c == 0xab) return 1; + if (c == 0xad) return 1; + if (c == 0xb5) return 1; + if (c == 0xb7) return 1; + if (c == 0xbb) return 1; + break; + + case KOI8_R: + if (c == 0x9e) return 1; + break; + + case ISO_8859_11: + case KOI8: + break; + + default: + exit(-1); + } + + return 0; +} + +static int IsSpace(int enc, int c) +{ + if (c >= 0x09 && c <= 0x0d) return 1; + if (c == 0x20) return 1; + + switch (enc) { + case UNICODE_ISO_8859_1: + if (c == 0x85) return 1; + /* fall */ + case ISO_8859_1: + case ISO_8859_2: + case ISO_8859_3: + case ISO_8859_4: + case ISO_8859_5: + case ISO_8859_6: + case ISO_8859_7: + case ISO_8859_8: + case ISO_8859_9: + case ISO_8859_10: + case ISO_8859_11: + case ISO_8859_13: + case ISO_8859_14: + case ISO_8859_15: + case ISO_8859_16: + case KOI8: + if (c == 0xa0) return 1; + break; + + case KOI8_R: + if (c == 0x9a) return 1; + break; + + default: + exit(-1); + } + + return 0; +} + +static int IsUpper(int enc, int c) +{ + if (c >= 0x41 && c <= 0x5a) return 1; + + switch (enc) { + case UNICODE_ISO_8859_1: + case ISO_8859_1: + case ISO_8859_9: + if (c >= 0xc0 && c <= 0xd6) return 1; + if (c >= 0xd8 && c <= 0xde) return 1; + break; + + case ISO_8859_2: + if (c == 0xa1 || c == 0xa3) return 1; + if (c == 0xa5 || c == 0xa6) return 1; + if (c >= 0xa9 && c <= 0xac) return 1; + if (c >= 0xae && c <= 0xaf) return 1; + if (c >= 0xc0 && c <= 0xd6) return 1; + if (c >= 0xd8 && c <= 0xde) return 1; + break; + + case ISO_8859_3: + if (c == 0xa1) return 1; + if (c == 0xa6) return 1; + if (c >= 0xa9 && c <= 0xac) return 1; + if (c == 0xaf) return 1; + if (c >= 0xc0 && c <= 0xc2) return 1; + if (c >= 0xc4 && c <= 0xcf) return 1; + if (c >= 0xd1 && c <= 0xd6) return 1; + if (c >= 0xd8 && c <= 0xde) return 1; + break; + + case ISO_8859_4: + if (c == 0xa1 || c == 0xa3) return 1; + if (c == 0xa5 || c == 0xa6) return 1; + if (c >= 0xa9 && c <= 0xac) return 1; + if (c == 0xae) return 1; + if (c == 0xbd) return 1; + if (c >= 0xc0 && c <= 0xd6) return 1; + if (c >= 0xd8 && c <= 0xde) return 1; + break; + + case ISO_8859_5: + if (c >= 0xa1 && c <= 0xcf && c != 0xad) return 1; + break; + + case ISO_8859_6: + break; + + case ISO_8859_7: + if (c == 0xb6) return 1; + if (c >= 0xb8 && c <= 0xba) return 1; + if (c == 0xbc) return 1; + if (c >= 0xbe && c <= 0xbf) return 1; + if (c >= 0xc1 && c <= 0xdb && c != 0xd2) return 1; + break; + + case ISO_8859_8: + case ISO_8859_11: + break; + + case ISO_8859_10: + if (c >= 0xa1 && c <= 0xa6) return 1; + if (c >= 0xa8 && c <= 0xac) return 1; + if (c == 0xae || c == 0xaf) return 1; + if (c >= 0xc0 && c <= 0xde) return 1; + break; + + case ISO_8859_13: + if (c == 0xa8) return 1; + if (c == 0xaa) return 1; + if (c == 0xaf) return 1; + if (c >= 0xc0 && c <= 0xd6) return 1; + if (c >= 0xd8 && c <= 0xde) return 1; + break; + + case ISO_8859_14: + if (c == 0xa1) return 1; + if (c == 0xa4 || c == 0xa6) return 1; + if (c == 0xa8) return 1; + if (c == 0xaa || c == 0xac) return 1; + if (c == 0xaf || c == 0xb0) return 1; + if (c == 0xb2 || c == 0xb4 || c == 0xb7) return 1; + if (c == 0xbb || c == 0xbd) return 1; + if (c >= 0xc0 && c <= 0xde) return 1; + break; + + case ISO_8859_15: + if (c >= 0xc0 && c <= 0xd6) return 1; + if (c >= 0xd8 && c <= 0xde) return 1; + if (c == 0xa6) return 1; + if (c == 0xb4) return 1; + if (c == 0xbc) return 1; + if (c == 0xbe) return 1; + break; + + case ISO_8859_16: + if (c == 0xa1) return 1; + if (c == 0xa3) return 1; + if (c == 0xa6) return 1; + if (c == 0xaa) return 1; + if (c == 0xac) return 1; + if (c == 0xaf) return 1; + if (c == 0xb2) return 1; + if (c == 0xb4) return 1; + if (c == 0xbc) return 1; + if (c == 0xbe) return 1; + if (c >= 0xc0 && c <= 0xde) return 1; + break; + + case KOI8_R: + if (c == 0xb3) return 1; + /* fall */ + case KOI8: + if (c >= 0xe0 && c <= 0xff) return 1; + break; + + default: + exit(-1); + } + + return 0; +} + +static int IsXDigit(int enc, int c) +{ + if (c >= 0x30 && c <= 0x39) return 1; + if (c >= 0x41 && c <= 0x46) return 1; + if (c >= 0x61 && c <= 0x66) return 1; + return 0; +} + +static int IsWord(int enc, int c) +{ + if (c >= 0x30 && c <= 0x39) return 1; + if (c >= 0x41 && c <= 0x5a) return 1; + if (c == 0x5f) return 1; + if (c >= 0x61 && c <= 0x7a) return 1; + + switch (enc) { + case UNICODE_ISO_8859_1: + case ISO_8859_1: + case ISO_8859_9: + if (c == 0xaa) return 1; + if (c >= 0xb2 && c <= 0xb3) return 1; + if (c == 0xb5) return 1; + if (c >= 0xb9 && c <= 0xba) return 1; + if (c >= 0xbc && c <= 0xbe) return 1; + if (c >= 0xc0 && c <= 0xd6) return 1; + if (c >= 0xd8 && c <= 0xf6) return 1; + if (c >= 0xf8 && c <= 0xff) return 1; + break; + + case ISO_8859_2: + if (c == 0xa1 || c == 0xa3) return 1; + if (c == 0xa5 || c == 0xa6) return 1; + if (c >= 0xa9 && c <= 0xac) return 1; + if (c >= 0xae && c <= 0xaf) return 1; + if (c == 0xb1 || c == 0xb3) return 1; + if (c == 0xb5 || c == 0xb6) return 1; + if (c >= 0xb9 && c <= 0xbc) return 1; + if (c >= 0xbe && c <= 0xbf) return 1; + if (c >= 0xc0 && c <= 0xd6) return 1; + if (c >= 0xd8 && c <= 0xf6) return 1; + if (c >= 0xf8 && c <= 0xfe) return 1; + break; + + case ISO_8859_3: + if (c == 0xa1) return 1; + if (c == 0xa6) return 1; + if (c >= 0xa9 && c <= 0xac) return 1; + if (c == 0xaf) return 1; + if (c >= 0xb1 && c <= 0xb3) return 1; + if (c == 0xb5 || c == 0xb6) return 1; + if (c >= 0xb9 && c <= 0xbd) return 1; + if (c == 0xbf) return 1; + if (c >= 0xc0 && c <= 0xc2) return 1; + if (c >= 0xc4 && c <= 0xcf) return 1; + if (c >= 0xd1 && c <= 0xd6) return 1; + if (c >= 0xd8 && c <= 0xe2) return 1; + if (c >= 0xe4 && c <= 0xef) return 1; + if (c >= 0xf1 && c <= 0xf6) return 1; + if (c >= 0xf8 && c <= 0xfe) return 1; + break; + + case ISO_8859_4: + if (c >= 0xa1 && c <= 0xa3) return 1; + if (c == 0xa5 || c == 0xa6) return 1; + if (c >= 0xa9 && c <= 0xac) return 1; + if (c == 0xae) return 1; + if (c == 0xb1 || c == 0xb3) return 1; + if (c == 0xb5 || c == 0xb6) return 1; + if (c >= 0xb9 && c <= 0xbf) return 1; + if (c >= 0xc0 && c <= 0xd6) return 1; + if (c >= 0xd8 && c <= 0xf6) return 1; + if (c >= 0xf8 && c <= 0xfe) return 1; + break; + + case ISO_8859_5: + if (c >= 0xa1 && c <= 0xcf && c != 0xad) return 1; + if (c >= 0xd0 && c <= 0xff && c != 0xf0 && c != 0xfd) return 1; + break; + + case ISO_8859_6: + if (c >= 0xc1 && c <= 0xda) return 1; + if (c >= 0xe0 && c <= 0xea) return 1; + if (c >= 0xeb && c <= 0xf2) return 1; + break; + + case ISO_8859_7: + if (c == 0xb2 || c == 0xb3) return 1; + if (c == 0xb6) return 1; + if (c >= 0xb8 && c <= 0xba) return 1; + if (c >= 0xbc && c <= 0xbf) return 1; + if (c == 0xc0) return 1; + if (c >= 0xc1 && c <= 0xdb && c != 0xd2) return 1; + if (c >= 0xdc && c <= 0xfe) return 1; + break; + + case ISO_8859_8: + if (c == 0xb2 || c == 0xb3 || c == 0xb5 || c == 0xb9) return 1; + if (c >= 0xbc && c <= 0xbe) return 1; + if (c >= 0xe0 && c <= 0xfa) return 1; + break; + + case ISO_8859_10: + if (c >= 0xa1 && c <= 0xff) { + if (c != 0xa7 && c != 0xad && c != 0xb0 && c != 0xb7 && c != 0xbd) + return 1; + } + break; + + case ISO_8859_11: + if (c >= 0xa1 && c <= 0xda) return 1; + if (c >= 0xdf && c <= 0xfb) return 1; + break; + + case ISO_8859_13: + if (c == 0xa8) return 1; + if (c == 0xaa) return 1; + if (c == 0xaf) return 1; + if (c == 0xb2 || c == 0xb3 || c == 0xb5 || c == 0xb9) return 1; + if (c >= 0xbc && c <= 0xbe) return 1; + if (c == 0xb8) return 1; + if (c == 0xba) return 1; + if (c >= 0xbf && c <= 0xd6) return 1; + if (c >= 0xd8 && c <= 0xf6) return 1; + if (c >= 0xf8 && c <= 0xfe) return 1; + break; + + case ISO_8859_14: + if (c >= 0xa1 && c <= 0xff) { + if (c == 0xa3 || c == 0xa7 || c == 0xa9 || c == 0xad || c == 0xae || + c == 0xb6) return 0; + return 1; + } + break; + + case ISO_8859_15: + if (c == 0xaa) return 1; + if (c >= 0xb2 && c <= 0xb3) return 1; + if (c == 0xb5) return 1; + if (c >= 0xb9 && c <= 0xba) return 1; + if (c >= 0xbc && c <= 0xbe) return 1; + if (c >= 0xc0 && c <= 0xd6) return 1; + if (c >= 0xd8 && c <= 0xf6) return 1; + if (c >= 0xf8 && c <= 0xff) return 1; + if (c == 0xa6) return 1; + if (c == 0xa8) return 1; + if (c == 0xb4) return 1; + if (c == 0xb8) return 1; + break; + + case ISO_8859_16: + if (c == 0xa1) return 1; + if (c == 0xa2) return 1; + if (c == 0xa3) return 1; + if (c == 0xa6) return 1; + if (c == 0xa8) return 1; + if (c == 0xaa) return 1; + if (c == 0xac) return 1; + if (c == 0xae) return 1; + if (c == 0xaf) return 1; + if (c == 0xb2) return 1; + if (c == 0xb3) return 1; + if (c == 0xb4) return 1; + if (c >= 0xb8 && c <= 0xba) return 1; + if (c == 0xbc) return 1; + if (c == 0xbd) return 1; + if (c == 0xbe) return 1; + if (c == 0xbf) return 1; + if (c >= 0xc0 && c <= 0xde) return 1; + if (c >= 0xdf && c <= 0xff) return 1; + break; + + case KOI8_R: + if (c == 0x9d) return 1; + if (c == 0xa3 || c == 0xb3) return 1; + /* fall */ + case KOI8: + if (c >= 0xc0 && c <= 0xff) return 1; + break; + + default: + exit(-1); + } + + return 0; +} + +static int IsAscii(int enc, int c) +{ + if (c >= 0x00 && c <= 0x7f) return 1; + return 0; +} + +static int IsNewline(int enc, int c) +{ + if (c == 0x0a) return 1; + return 0; +} + +static int exec(FILE* fp, ENC_INFO* einfo) +{ +#define NCOL 8 + + int c, val, enc; + + enc = einfo->num; + + fprintf(fp, "static unsigned short Enc%s_CtypeTable[256] = {\n", + einfo->name); + + for (c = 0; c < 256; c++) { + val = 0; + if (IsNewline(enc, c)) val |= ONIGENC_CTYPE_NEWLINE; + if (IsAlpha (enc, c)) val |= ONIGENC_CTYPE_ALPHA; + if (IsBlank (enc, c)) val |= ONIGENC_CTYPE_BLANK; + if (IsCntrl (enc, c)) val |= ONIGENC_CTYPE_CNTRL; + if (IsDigit (enc, c)) val |= ONIGENC_CTYPE_DIGIT; + if (IsGraph (enc, c)) val |= ONIGENC_CTYPE_GRAPH; + if (IsLower (enc, c)) val |= ONIGENC_CTYPE_LOWER; + if (IsPrint (enc, c)) val |= ONIGENC_CTYPE_PRINT; + if (IsPunct (enc, c)) val |= ONIGENC_CTYPE_PUNCT; + if (IsSpace (enc, c)) val |= ONIGENC_CTYPE_SPACE; + if (IsUpper (enc, c)) val |= ONIGENC_CTYPE_UPPER; + if (IsXDigit(enc, c)) val |= ONIGENC_CTYPE_XDIGIT; + if (IsWord (enc, c)) val |= ONIGENC_CTYPE_WORD; + if (IsAscii (enc, c)) val |= ONIGENC_CTYPE_ASCII; + + if (c % NCOL == 0) fputs(" ", fp); + fprintf(fp, "0x%04x", val); + if (c != 255) fputs(",", fp); + if (c != 0 && c % NCOL == (NCOL-1)) + fputs("\n", fp); + else + fputs(" ", fp); + } + fprintf(fp, "};\n"); + return 0; +} + +extern int main(int argc, char* argv[]) +{ + int i; + FILE* fp = stdout; + + for (i = 0; i < sizeof(Info)/sizeof(ENC_INFO); i++) { + exec(fp, &Info[i]); + } +} diff --git a/ext/mbstring/oniguruma/enc/sjis.c b/ext/mbstring/oniguruma/enc/sjis.c new file mode 100644 index 0000000..f7d7d52 --- /dev/null +++ b/ext/mbstring/oniguruma/enc/sjis.c @@ -0,0 +1,238 @@ +/********************************************************************** + sjis.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2005 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +static const int EncLen_SJIS[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1 +}; + +static const char SJIS_CAN_BE_TRAIL_TABLE[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 +}; + +#define SJIS_ISMB_FIRST(byte) (EncLen_SJIS[byte] > 1) +#define SJIS_ISMB_TRAIL(byte) SJIS_CAN_BE_TRAIL_TABLE[(byte)] + +static int +sjis_mbc_enc_len(const UChar* p) +{ + return EncLen_SJIS[*p]; +} + +static int +sjis_code_to_mbclen(OnigCodePoint code) +{ + if (code < 256) { + if (EncLen_SJIS[(int )code] == 1) + return 1; + else + return 0; + } + else if (code <= 0xffff) { + return 2; + } + else + return 0; +} + +static OnigCodePoint +sjis_mbc_to_code(const UChar* p, const UChar* end) +{ + int c, i, len; + OnigCodePoint n; + + len = enc_len(ONIG_ENCODING_SJIS, p); + c = *p++; + n = c; + if (len == 1) return n; + + for (i = 1; i < len; i++) { + if (p >= end) break; + c = *p++; + n <<= 8; n += c; + } + return n; +} + +static int +sjis_code_to_mbc(OnigCodePoint code, UChar *buf) +{ + UChar *p = buf; + + if ((code & 0xff00) != 0) *p++ = (UChar )(((code >> 8) & 0xff)); + *p++ = (UChar )(code & 0xff); + +#if 0 + if (enc_len(ONIG_ENCODING_SJIS, buf) != (p - buf)) + return REGERR_INVALID_WIDE_CHAR_VALUE; +#endif + return p - buf; +} + +static int +sjis_mbc_to_normalize(OnigAmbigType flag, + const UChar** pp, const UChar* end, UChar* lower) +{ + const UChar* p = *pp; + + if (ONIGENC_IS_MBC_ASCII(p)) { + if ((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0) { + *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + + (*pp)++; + return 1; + } + else { + int len = enc_len(ONIG_ENCODING_SJIS, p); + + if (lower != p) { + int i; + for (i = 0; i < len; i++) { + *lower++ = *p++; + } + } + (*pp) += len; + return len; /* return byte length of converted char to lower */ + } +} + +static int +sjis_is_mbc_ambiguous(OnigAmbigType flag, const UChar** pp, const UChar* end) +{ + return onigenc_mbn_is_mbc_ambiguous(ONIG_ENCODING_SJIS, flag, pp, end); + +} + +static int +sjis_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 128) + return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype); + else { + if ((ctype & (ONIGENC_CTYPE_WORD | + ONIGENC_CTYPE_GRAPH | ONIGENC_CTYPE_PRINT)) != 0) { + return (sjis_code_to_mbclen(code) > 1 ? TRUE : FALSE); + } + } + + return FALSE; +} + +static UChar* +sjis_left_adjust_char_head(const UChar* start, const UChar* s) +{ + const UChar *p; + int len; + + if (s <= start) return (UChar* )s; + p = s; + + if (SJIS_ISMB_TRAIL(*p)) { + while (p > start) { + if (! SJIS_ISMB_FIRST(*--p)) { + p++; + break; + } + } + } + len = enc_len(ONIG_ENCODING_SJIS, p); + if (p + len > s) return (UChar* )p; + p += len; + return (UChar* )(p + ((s - p) & ~1)); +} + +static int +sjis_is_allowed_reverse_match(const UChar* s, const UChar* end) +{ + const UChar c = *s; + return (SJIS_ISMB_TRAIL(c) ? FALSE : TRUE); +} + +OnigEncodingType OnigEncodingSJIS = { + sjis_mbc_enc_len, + "Shift_JIS", /* name */ + 2, /* max byte length */ + 1, /* min byte length */ + ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE, + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + onigenc_is_mbc_newline_0x0a, + sjis_mbc_to_code, + sjis_code_to_mbclen, + sjis_code_to_mbc, + sjis_mbc_to_normalize, + sjis_is_mbc_ambiguous, + onigenc_ascii_get_all_pair_ambig_codes, + onigenc_nothing_get_all_comp_ambig_codes, + sjis_is_code_ctype, + onigenc_not_support_get_ctype_code_range, + sjis_left_adjust_char_head, + sjis_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/unicode.c b/ext/mbstring/oniguruma/enc/unicode.c new file mode 100644 index 0000000..a8cf539 --- /dev/null +++ b/ext/mbstring/oniguruma/enc/unicode.c @@ -0,0 +1,3403 @@ +/********************************************************************** + unicode.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2004 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + + +const unsigned short OnigEnc_Unicode_ISO_8859_1_CtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x228c, 0x2289, 0x2288, 0x2288, 0x2288, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0288, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0284, 0x01a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x10e2, 0x01a0, 0x00a0, 0x00a8, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x10a0, 0x10a0, 0x00a0, 0x10e2, 0x00a0, 0x01a0, + 0x00a0, 0x10a0, 0x10e2, 0x01a0, 0x10a0, 0x10a0, 0x10a0, 0x01a0, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x00a0, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x00a0, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2 +}; + +static const OnigCodePoint CRAlnum[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 414, +#else + 9, +#endif + 0x0030, 0x0039, + 0x0041, 0x005a, + 0x0061, 0x007a, + 0x00aa, 0x00aa, + 0x00b5, 0x00b5, + 0x00ba, 0x00ba, + 0x00c0, 0x00d6, + 0x00d8, 0x00f6, + 0x00f8, 0x0236 +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x0250, 0x02c1, + 0x02c6, 0x02d1, + 0x02e0, 0x02e4, + 0x02ee, 0x02ee, + 0x0300, 0x0357, + 0x035d, 0x036f, + 0x037a, 0x037a, + 0x0386, 0x0386, + 0x0388, 0x038a, + 0x038c, 0x038c, + 0x038e, 0x03a1, + 0x03a3, 0x03ce, + 0x03d0, 0x03f5, + 0x03f7, 0x03fb, + 0x0400, 0x0481, + 0x0483, 0x0486, + 0x0488, 0x04ce, + 0x04d0, 0x04f5, + 0x04f8, 0x04f9, + 0x0500, 0x050f, + 0x0531, 0x0556, + 0x0559, 0x0559, + 0x0561, 0x0587, + 0x0591, 0x05a1, + 0x05a3, 0x05b9, + 0x05bb, 0x05bd, + 0x05bf, 0x05bf, + 0x05c1, 0x05c2, + 0x05c4, 0x05c4, + 0x05d0, 0x05ea, + 0x05f0, 0x05f2, + 0x0610, 0x0615, + 0x0621, 0x063a, + 0x0640, 0x0658, + 0x0660, 0x0669, + 0x066e, 0x06d3, + 0x06d5, 0x06dc, + 0x06de, 0x06e8, + 0x06ea, 0x06fc, + 0x06ff, 0x06ff, + 0x0710, 0x074a, + 0x074d, 0x074f, + 0x0780, 0x07b1, + 0x0901, 0x0939, + 0x093c, 0x094d, + 0x0950, 0x0954, + 0x0958, 0x0963, + 0x0966, 0x096f, + 0x0981, 0x0983, + 0x0985, 0x098c, + 0x098f, 0x0990, + 0x0993, 0x09a8, + 0x09aa, 0x09b0, + 0x09b2, 0x09b2, + 0x09b6, 0x09b9, + 0x09bc, 0x09c4, + 0x09c7, 0x09c8, + 0x09cb, 0x09cd, + 0x09d7, 0x09d7, + 0x09dc, 0x09dd, + 0x09df, 0x09e3, + 0x09e6, 0x09f1, + 0x0a01, 0x0a03, + 0x0a05, 0x0a0a, + 0x0a0f, 0x0a10, + 0x0a13, 0x0a28, + 0x0a2a, 0x0a30, + 0x0a32, 0x0a33, + 0x0a35, 0x0a36, + 0x0a38, 0x0a39, + 0x0a3c, 0x0a3c, + 0x0a3e, 0x0a42, + 0x0a47, 0x0a48, + 0x0a4b, 0x0a4d, + 0x0a59, 0x0a5c, + 0x0a5e, 0x0a5e, + 0x0a66, 0x0a74, + 0x0a81, 0x0a83, + 0x0a85, 0x0a8d, + 0x0a8f, 0x0a91, + 0x0a93, 0x0aa8, + 0x0aaa, 0x0ab0, + 0x0ab2, 0x0ab3, + 0x0ab5, 0x0ab9, + 0x0abc, 0x0ac5, + 0x0ac7, 0x0ac9, + 0x0acb, 0x0acd, + 0x0ad0, 0x0ad0, + 0x0ae0, 0x0ae3, + 0x0ae6, 0x0aef, + 0x0b01, 0x0b03, + 0x0b05, 0x0b0c, + 0x0b0f, 0x0b10, + 0x0b13, 0x0b28, + 0x0b2a, 0x0b30, + 0x0b32, 0x0b33, + 0x0b35, 0x0b39, + 0x0b3c, 0x0b43, + 0x0b47, 0x0b48, + 0x0b4b, 0x0b4d, + 0x0b56, 0x0b57, + 0x0b5c, 0x0b5d, + 0x0b5f, 0x0b61, + 0x0b66, 0x0b6f, + 0x0b71, 0x0b71, + 0x0b82, 0x0b83, + 0x0b85, 0x0b8a, + 0x0b8e, 0x0b90, + 0x0b92, 0x0b95, + 0x0b99, 0x0b9a, + 0x0b9c, 0x0b9c, + 0x0b9e, 0x0b9f, + 0x0ba3, 0x0ba4, + 0x0ba8, 0x0baa, + 0x0bae, 0x0bb5, + 0x0bb7, 0x0bb9, + 0x0bbe, 0x0bc2, + 0x0bc6, 0x0bc8, + 0x0bca, 0x0bcd, + 0x0bd7, 0x0bd7, + 0x0be7, 0x0bef, + 0x0c01, 0x0c03, + 0x0c05, 0x0c0c, + 0x0c0e, 0x0c10, + 0x0c12, 0x0c28, + 0x0c2a, 0x0c33, + 0x0c35, 0x0c39, + 0x0c3e, 0x0c44, + 0x0c46, 0x0c48, + 0x0c4a, 0x0c4d, + 0x0c55, 0x0c56, + 0x0c60, 0x0c61, + 0x0c66, 0x0c6f, + 0x0c82, 0x0c83, + 0x0c85, 0x0c8c, + 0x0c8e, 0x0c90, + 0x0c92, 0x0ca8, + 0x0caa, 0x0cb3, + 0x0cb5, 0x0cb9, + 0x0cbc, 0x0cc4, + 0x0cc6, 0x0cc8, + 0x0cca, 0x0ccd, + 0x0cd5, 0x0cd6, + 0x0cde, 0x0cde, + 0x0ce0, 0x0ce1, + 0x0ce6, 0x0cef, + 0x0d02, 0x0d03, + 0x0d05, 0x0d0c, + 0x0d0e, 0x0d10, + 0x0d12, 0x0d28, + 0x0d2a, 0x0d39, + 0x0d3e, 0x0d43, + 0x0d46, 0x0d48, + 0x0d4a, 0x0d4d, + 0x0d57, 0x0d57, + 0x0d60, 0x0d61, + 0x0d66, 0x0d6f, + 0x0d82, 0x0d83, + 0x0d85, 0x0d96, + 0x0d9a, 0x0db1, + 0x0db3, 0x0dbb, + 0x0dbd, 0x0dbd, + 0x0dc0, 0x0dc6, + 0x0dca, 0x0dca, + 0x0dcf, 0x0dd4, + 0x0dd6, 0x0dd6, + 0x0dd8, 0x0ddf, + 0x0df2, 0x0df3, + 0x0e01, 0x0e3a, + 0x0e40, 0x0e4e, + 0x0e50, 0x0e59, + 0x0e81, 0x0e82, + 0x0e84, 0x0e84, + 0x0e87, 0x0e88, + 0x0e8a, 0x0e8a, + 0x0e8d, 0x0e8d, + 0x0e94, 0x0e97, + 0x0e99, 0x0e9f, + 0x0ea1, 0x0ea3, + 0x0ea5, 0x0ea5, + 0x0ea7, 0x0ea7, + 0x0eaa, 0x0eab, + 0x0ead, 0x0eb9, + 0x0ebb, 0x0ebd, + 0x0ec0, 0x0ec4, + 0x0ec6, 0x0ec6, + 0x0ec8, 0x0ecd, + 0x0ed0, 0x0ed9, + 0x0edc, 0x0edd, + 0x0f00, 0x0f00, + 0x0f18, 0x0f19, + 0x0f20, 0x0f29, + 0x0f35, 0x0f35, + 0x0f37, 0x0f37, + 0x0f39, 0x0f39, + 0x0f3e, 0x0f47, + 0x0f49, 0x0f6a, + 0x0f71, 0x0f84, + 0x0f86, 0x0f8b, + 0x0f90, 0x0f97, + 0x0f99, 0x0fbc, + 0x0fc6, 0x0fc6, + 0x1000, 0x1021, + 0x1023, 0x1027, + 0x1029, 0x102a, + 0x102c, 0x1032, + 0x1036, 0x1039, + 0x1040, 0x1049, + 0x1050, 0x1059, + 0x10a0, 0x10c5, + 0x10d0, 0x10f8, + 0x1100, 0x1159, + 0x115f, 0x11a2, + 0x11a8, 0x11f9, + 0x1200, 0x1206, + 0x1208, 0x1246, + 0x1248, 0x1248, + 0x124a, 0x124d, + 0x1250, 0x1256, + 0x1258, 0x1258, + 0x125a, 0x125d, + 0x1260, 0x1286, + 0x1288, 0x1288, + 0x128a, 0x128d, + 0x1290, 0x12ae, + 0x12b0, 0x12b0, + 0x12b2, 0x12b5, + 0x12b8, 0x12be, + 0x12c0, 0x12c0, + 0x12c2, 0x12c5, + 0x12c8, 0x12ce, + 0x12d0, 0x12d6, + 0x12d8, 0x12ee, + 0x12f0, 0x130e, + 0x1310, 0x1310, + 0x1312, 0x1315, + 0x1318, 0x131e, + 0x1320, 0x1346, + 0x1348, 0x135a, + 0x1369, 0x1371, + 0x13a0, 0x13f4, + 0x1401, 0x166c, + 0x166f, 0x1676, + 0x1681, 0x169a, + 0x16a0, 0x16ea, + 0x1700, 0x170c, + 0x170e, 0x1714, + 0x1720, 0x1734, + 0x1740, 0x1753, + 0x1760, 0x176c, + 0x176e, 0x1770, + 0x1772, 0x1773, + 0x1780, 0x17b3, + 0x17b6, 0x17d3, + 0x17d7, 0x17d7, + 0x17dc, 0x17dd, + 0x17e0, 0x17e9, + 0x180b, 0x180d, + 0x1810, 0x1819, + 0x1820, 0x1877, + 0x1880, 0x18a9, + 0x1900, 0x191c, + 0x1920, 0x192b, + 0x1930, 0x193b, + 0x1946, 0x196d, + 0x1970, 0x1974, + 0x1d00, 0x1d6b, + 0x1e00, 0x1e9b, + 0x1ea0, 0x1ef9, + 0x1f00, 0x1f15, + 0x1f18, 0x1f1d, + 0x1f20, 0x1f45, + 0x1f48, 0x1f4d, + 0x1f50, 0x1f57, + 0x1f59, 0x1f59, + 0x1f5b, 0x1f5b, + 0x1f5d, 0x1f5d, + 0x1f5f, 0x1f7d, + 0x1f80, 0x1fb4, + 0x1fb6, 0x1fbc, + 0x1fbe, 0x1fbe, + 0x1fc2, 0x1fc4, + 0x1fc6, 0x1fcc, + 0x1fd0, 0x1fd3, + 0x1fd6, 0x1fdb, + 0x1fe0, 0x1fec, + 0x1ff2, 0x1ff4, + 0x1ff6, 0x1ffc, + 0x2071, 0x2071, + 0x207f, 0x207f, + 0x20d0, 0x20ea, + 0x2102, 0x2102, + 0x2107, 0x2107, + 0x210a, 0x2113, + 0x2115, 0x2115, + 0x2119, 0x211d, + 0x2124, 0x2124, + 0x2126, 0x2126, + 0x2128, 0x2128, + 0x212a, 0x212d, + 0x212f, 0x2131, + 0x2133, 0x2139, + 0x213d, 0x213f, + 0x2145, 0x2149, + 0x3005, 0x3006, + 0x302a, 0x302f, + 0x3031, 0x3035, + 0x303b, 0x303c, + 0x3041, 0x3096, + 0x3099, 0x309a, + 0x309d, 0x309f, + 0x30a1, 0x30fa, + 0x30fc, 0x30ff, + 0x3105, 0x312c, + 0x3131, 0x318e, + 0x31a0, 0x31b7, + 0x31f0, 0x31ff, + 0x3400, 0x4db5, + 0x4e00, 0x9fa5, + 0xa000, 0xa48c, + 0xac00, 0xd7a3, + 0xf900, 0xfa2d, + 0xfa30, 0xfa6a, + 0xfb00, 0xfb06, + 0xfb13, 0xfb17, + 0xfb1d, 0xfb28, + 0xfb2a, 0xfb36, + 0xfb38, 0xfb3c, + 0xfb3e, 0xfb3e, + 0xfb40, 0xfb41, + 0xfb43, 0xfb44, + 0xfb46, 0xfbb1, + 0xfbd3, 0xfd3d, + 0xfd50, 0xfd8f, + 0xfd92, 0xfdc7, + 0xfdf0, 0xfdfb, + 0xfe00, 0xfe0f, + 0xfe20, 0xfe23, + 0xfe70, 0xfe74, + 0xfe76, 0xfefc, + 0xff10, 0xff19, + 0xff21, 0xff3a, + 0xff41, 0xff5a, + 0xff66, 0xffbe, + 0xffc2, 0xffc7, + 0xffca, 0xffcf, + 0xffd2, 0xffd7, + 0xffda, 0xffdc, + 0x10000, 0x1000b, + 0x1000d, 0x10026, + 0x10028, 0x1003a, + 0x1003c, 0x1003d, + 0x1003f, 0x1004d, + 0x10050, 0x1005d, + 0x10080, 0x100fa, + 0x10300, 0x1031e, + 0x10330, 0x10349, + 0x10380, 0x1039d, + 0x10400, 0x1049d, + 0x104a0, 0x104a9, + 0x10800, 0x10805, + 0x10808, 0x10808, + 0x1080a, 0x10835, + 0x10837, 0x10838, + 0x1083c, 0x1083c, + 0x1083f, 0x1083f, + 0x1d165, 0x1d169, + 0x1d16d, 0x1d172, + 0x1d17b, 0x1d182, + 0x1d185, 0x1d18b, + 0x1d1aa, 0x1d1ad, + 0x1d400, 0x1d454, + 0x1d456, 0x1d49c, + 0x1d49e, 0x1d49f, + 0x1d4a2, 0x1d4a2, + 0x1d4a5, 0x1d4a6, + 0x1d4a9, 0x1d4ac, + 0x1d4ae, 0x1d4b9, + 0x1d4bb, 0x1d4bb, + 0x1d4bd, 0x1d4c3, + 0x1d4c5, 0x1d505, + 0x1d507, 0x1d50a, + 0x1d50d, 0x1d514, + 0x1d516, 0x1d51c, + 0x1d51e, 0x1d539, + 0x1d53b, 0x1d53e, + 0x1d540, 0x1d544, + 0x1d546, 0x1d546, + 0x1d54a, 0x1d550, + 0x1d552, 0x1d6a3, + 0x1d6a8, 0x1d6c0, + 0x1d6c2, 0x1d6da, + 0x1d6dc, 0x1d6fa, + 0x1d6fc, 0x1d714, + 0x1d716, 0x1d734, + 0x1d736, 0x1d74e, + 0x1d750, 0x1d76e, + 0x1d770, 0x1d788, + 0x1d78a, 0x1d7a8, + 0x1d7aa, 0x1d7c2, + 0x1d7c4, 0x1d7c9, + 0x1d7ce, 0x1d7ff, + 0x20000, 0x2a6d6, + 0x2f800, 0x2fa1d, + 0xe0100, 0xe01ef +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of CRAlnum */ + +static const OnigCodePoint CRAlpha[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 396, +#else + 8, +#endif + 0x0041, 0x005a, + 0x0061, 0x007a, + 0x00aa, 0x00aa, + 0x00b5, 0x00b5, + 0x00ba, 0x00ba, + 0x00c0, 0x00d6, + 0x00d8, 0x00f6, + 0x00f8, 0x0236 +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x0250, 0x02c1, + 0x02c6, 0x02d1, + 0x02e0, 0x02e4, + 0x02ee, 0x02ee, + 0x0300, 0x0357, + 0x035d, 0x036f, + 0x037a, 0x037a, + 0x0386, 0x0386, + 0x0388, 0x038a, + 0x038c, 0x038c, + 0x038e, 0x03a1, + 0x03a3, 0x03ce, + 0x03d0, 0x03f5, + 0x03f7, 0x03fb, + 0x0400, 0x0481, + 0x0483, 0x0486, + 0x0488, 0x04ce, + 0x04d0, 0x04f5, + 0x04f8, 0x04f9, + 0x0500, 0x050f, + 0x0531, 0x0556, + 0x0559, 0x0559, + 0x0561, 0x0587, + 0x0591, 0x05a1, + 0x05a3, 0x05b9, + 0x05bb, 0x05bd, + 0x05bf, 0x05bf, + 0x05c1, 0x05c2, + 0x05c4, 0x05c4, + 0x05d0, 0x05ea, + 0x05f0, 0x05f2, + 0x0610, 0x0615, + 0x0621, 0x063a, + 0x0640, 0x0658, + 0x066e, 0x06d3, + 0x06d5, 0x06dc, + 0x06de, 0x06e8, + 0x06ea, 0x06ef, + 0x06fa, 0x06fc, + 0x06ff, 0x06ff, + 0x0710, 0x074a, + 0x074d, 0x074f, + 0x0780, 0x07b1, + 0x0901, 0x0939, + 0x093c, 0x094d, + 0x0950, 0x0954, + 0x0958, 0x0963, + 0x0981, 0x0983, + 0x0985, 0x098c, + 0x098f, 0x0990, + 0x0993, 0x09a8, + 0x09aa, 0x09b0, + 0x09b2, 0x09b2, + 0x09b6, 0x09b9, + 0x09bc, 0x09c4, + 0x09c7, 0x09c8, + 0x09cb, 0x09cd, + 0x09d7, 0x09d7, + 0x09dc, 0x09dd, + 0x09df, 0x09e3, + 0x09f0, 0x09f1, + 0x0a01, 0x0a03, + 0x0a05, 0x0a0a, + 0x0a0f, 0x0a10, + 0x0a13, 0x0a28, + 0x0a2a, 0x0a30, + 0x0a32, 0x0a33, + 0x0a35, 0x0a36, + 0x0a38, 0x0a39, + 0x0a3c, 0x0a3c, + 0x0a3e, 0x0a42, + 0x0a47, 0x0a48, + 0x0a4b, 0x0a4d, + 0x0a59, 0x0a5c, + 0x0a5e, 0x0a5e, + 0x0a70, 0x0a74, + 0x0a81, 0x0a83, + 0x0a85, 0x0a8d, + 0x0a8f, 0x0a91, + 0x0a93, 0x0aa8, + 0x0aaa, 0x0ab0, + 0x0ab2, 0x0ab3, + 0x0ab5, 0x0ab9, + 0x0abc, 0x0ac5, + 0x0ac7, 0x0ac9, + 0x0acb, 0x0acd, + 0x0ad0, 0x0ad0, + 0x0ae0, 0x0ae3, + 0x0b01, 0x0b03, + 0x0b05, 0x0b0c, + 0x0b0f, 0x0b10, + 0x0b13, 0x0b28, + 0x0b2a, 0x0b30, + 0x0b32, 0x0b33, + 0x0b35, 0x0b39, + 0x0b3c, 0x0b43, + 0x0b47, 0x0b48, + 0x0b4b, 0x0b4d, + 0x0b56, 0x0b57, + 0x0b5c, 0x0b5d, + 0x0b5f, 0x0b61, + 0x0b71, 0x0b71, + 0x0b82, 0x0b83, + 0x0b85, 0x0b8a, + 0x0b8e, 0x0b90, + 0x0b92, 0x0b95, + 0x0b99, 0x0b9a, + 0x0b9c, 0x0b9c, + 0x0b9e, 0x0b9f, + 0x0ba3, 0x0ba4, + 0x0ba8, 0x0baa, + 0x0bae, 0x0bb5, + 0x0bb7, 0x0bb9, + 0x0bbe, 0x0bc2, + 0x0bc6, 0x0bc8, + 0x0bca, 0x0bcd, + 0x0bd7, 0x0bd7, + 0x0c01, 0x0c03, + 0x0c05, 0x0c0c, + 0x0c0e, 0x0c10, + 0x0c12, 0x0c28, + 0x0c2a, 0x0c33, + 0x0c35, 0x0c39, + 0x0c3e, 0x0c44, + 0x0c46, 0x0c48, + 0x0c4a, 0x0c4d, + 0x0c55, 0x0c56, + 0x0c60, 0x0c61, + 0x0c82, 0x0c83, + 0x0c85, 0x0c8c, + 0x0c8e, 0x0c90, + 0x0c92, 0x0ca8, + 0x0caa, 0x0cb3, + 0x0cb5, 0x0cb9, + 0x0cbc, 0x0cc4, + 0x0cc6, 0x0cc8, + 0x0cca, 0x0ccd, + 0x0cd5, 0x0cd6, + 0x0cde, 0x0cde, + 0x0ce0, 0x0ce1, + 0x0d02, 0x0d03, + 0x0d05, 0x0d0c, + 0x0d0e, 0x0d10, + 0x0d12, 0x0d28, + 0x0d2a, 0x0d39, + 0x0d3e, 0x0d43, + 0x0d46, 0x0d48, + 0x0d4a, 0x0d4d, + 0x0d57, 0x0d57, + 0x0d60, 0x0d61, + 0x0d82, 0x0d83, + 0x0d85, 0x0d96, + 0x0d9a, 0x0db1, + 0x0db3, 0x0dbb, + 0x0dbd, 0x0dbd, + 0x0dc0, 0x0dc6, + 0x0dca, 0x0dca, + 0x0dcf, 0x0dd4, + 0x0dd6, 0x0dd6, + 0x0dd8, 0x0ddf, + 0x0df2, 0x0df3, + 0x0e01, 0x0e3a, + 0x0e40, 0x0e4e, + 0x0e81, 0x0e82, + 0x0e84, 0x0e84, + 0x0e87, 0x0e88, + 0x0e8a, 0x0e8a, + 0x0e8d, 0x0e8d, + 0x0e94, 0x0e97, + 0x0e99, 0x0e9f, + 0x0ea1, 0x0ea3, + 0x0ea5, 0x0ea5, + 0x0ea7, 0x0ea7, + 0x0eaa, 0x0eab, + 0x0ead, 0x0eb9, + 0x0ebb, 0x0ebd, + 0x0ec0, 0x0ec4, + 0x0ec6, 0x0ec6, + 0x0ec8, 0x0ecd, + 0x0edc, 0x0edd, + 0x0f00, 0x0f00, + 0x0f18, 0x0f19, + 0x0f35, 0x0f35, + 0x0f37, 0x0f37, + 0x0f39, 0x0f39, + 0x0f3e, 0x0f47, + 0x0f49, 0x0f6a, + 0x0f71, 0x0f84, + 0x0f86, 0x0f8b, + 0x0f90, 0x0f97, + 0x0f99, 0x0fbc, + 0x0fc6, 0x0fc6, + 0x1000, 0x1021, + 0x1023, 0x1027, + 0x1029, 0x102a, + 0x102c, 0x1032, + 0x1036, 0x1039, + 0x1050, 0x1059, + 0x10a0, 0x10c5, + 0x10d0, 0x10f8, + 0x1100, 0x1159, + 0x115f, 0x11a2, + 0x11a8, 0x11f9, + 0x1200, 0x1206, + 0x1208, 0x1246, + 0x1248, 0x1248, + 0x124a, 0x124d, + 0x1250, 0x1256, + 0x1258, 0x1258, + 0x125a, 0x125d, + 0x1260, 0x1286, + 0x1288, 0x1288, + 0x128a, 0x128d, + 0x1290, 0x12ae, + 0x12b0, 0x12b0, + 0x12b2, 0x12b5, + 0x12b8, 0x12be, + 0x12c0, 0x12c0, + 0x12c2, 0x12c5, + 0x12c8, 0x12ce, + 0x12d0, 0x12d6, + 0x12d8, 0x12ee, + 0x12f0, 0x130e, + 0x1310, 0x1310, + 0x1312, 0x1315, + 0x1318, 0x131e, + 0x1320, 0x1346, + 0x1348, 0x135a, + 0x13a0, 0x13f4, + 0x1401, 0x166c, + 0x166f, 0x1676, + 0x1681, 0x169a, + 0x16a0, 0x16ea, + 0x1700, 0x170c, + 0x170e, 0x1714, + 0x1720, 0x1734, + 0x1740, 0x1753, + 0x1760, 0x176c, + 0x176e, 0x1770, + 0x1772, 0x1773, + 0x1780, 0x17b3, + 0x17b6, 0x17d3, + 0x17d7, 0x17d7, + 0x17dc, 0x17dd, + 0x180b, 0x180d, + 0x1820, 0x1877, + 0x1880, 0x18a9, + 0x1900, 0x191c, + 0x1920, 0x192b, + 0x1930, 0x193b, + 0x1950, 0x196d, + 0x1970, 0x1974, + 0x1d00, 0x1d6b, + 0x1e00, 0x1e9b, + 0x1ea0, 0x1ef9, + 0x1f00, 0x1f15, + 0x1f18, 0x1f1d, + 0x1f20, 0x1f45, + 0x1f48, 0x1f4d, + 0x1f50, 0x1f57, + 0x1f59, 0x1f59, + 0x1f5b, 0x1f5b, + 0x1f5d, 0x1f5d, + 0x1f5f, 0x1f7d, + 0x1f80, 0x1fb4, + 0x1fb6, 0x1fbc, + 0x1fbe, 0x1fbe, + 0x1fc2, 0x1fc4, + 0x1fc6, 0x1fcc, + 0x1fd0, 0x1fd3, + 0x1fd6, 0x1fdb, + 0x1fe0, 0x1fec, + 0x1ff2, 0x1ff4, + 0x1ff6, 0x1ffc, + 0x2071, 0x2071, + 0x207f, 0x207f, + 0x20d0, 0x20ea, + 0x2102, 0x2102, + 0x2107, 0x2107, + 0x210a, 0x2113, + 0x2115, 0x2115, + 0x2119, 0x211d, + 0x2124, 0x2124, + 0x2126, 0x2126, + 0x2128, 0x2128, + 0x212a, 0x212d, + 0x212f, 0x2131, + 0x2133, 0x2139, + 0x213d, 0x213f, + 0x2145, 0x2149, + 0x3005, 0x3006, + 0x302a, 0x302f, + 0x3031, 0x3035, + 0x303b, 0x303c, + 0x3041, 0x3096, + 0x3099, 0x309a, + 0x309d, 0x309f, + 0x30a1, 0x30fa, + 0x30fc, 0x30ff, + 0x3105, 0x312c, + 0x3131, 0x318e, + 0x31a0, 0x31b7, + 0x31f0, 0x31ff, + 0x3400, 0x4db5, + 0x4e00, 0x9fa5, + 0xa000, 0xa48c, + 0xac00, 0xd7a3, + 0xf900, 0xfa2d, + 0xfa30, 0xfa6a, + 0xfb00, 0xfb06, + 0xfb13, 0xfb17, + 0xfb1d, 0xfb28, + 0xfb2a, 0xfb36, + 0xfb38, 0xfb3c, + 0xfb3e, 0xfb3e, + 0xfb40, 0xfb41, + 0xfb43, 0xfb44, + 0xfb46, 0xfbb1, + 0xfbd3, 0xfd3d, + 0xfd50, 0xfd8f, + 0xfd92, 0xfdc7, + 0xfdf0, 0xfdfb, + 0xfe00, 0xfe0f, + 0xfe20, 0xfe23, + 0xfe70, 0xfe74, + 0xfe76, 0xfefc, + 0xff21, 0xff3a, + 0xff41, 0xff5a, + 0xff66, 0xffbe, + 0xffc2, 0xffc7, + 0xffca, 0xffcf, + 0xffd2, 0xffd7, + 0xffda, 0xffdc, + 0x10000, 0x1000b, + 0x1000d, 0x10026, + 0x10028, 0x1003a, + 0x1003c, 0x1003d, + 0x1003f, 0x1004d, + 0x10050, 0x1005d, + 0x10080, 0x100fa, + 0x10300, 0x1031e, + 0x10330, 0x10349, + 0x10380, 0x1039d, + 0x10400, 0x1049d, + 0x10800, 0x10805, + 0x10808, 0x10808, + 0x1080a, 0x10835, + 0x10837, 0x10838, + 0x1083c, 0x1083c, + 0x1083f, 0x1083f, + 0x1d165, 0x1d169, + 0x1d16d, 0x1d172, + 0x1d17b, 0x1d182, + 0x1d185, 0x1d18b, + 0x1d1aa, 0x1d1ad, + 0x1d400, 0x1d454, + 0x1d456, 0x1d49c, + 0x1d49e, 0x1d49f, + 0x1d4a2, 0x1d4a2, + 0x1d4a5, 0x1d4a6, + 0x1d4a9, 0x1d4ac, + 0x1d4ae, 0x1d4b9, + 0x1d4bb, 0x1d4bb, + 0x1d4bd, 0x1d4c3, + 0x1d4c5, 0x1d505, + 0x1d507, 0x1d50a, + 0x1d50d, 0x1d514, + 0x1d516, 0x1d51c, + 0x1d51e, 0x1d539, + 0x1d53b, 0x1d53e, + 0x1d540, 0x1d544, + 0x1d546, 0x1d546, + 0x1d54a, 0x1d550, + 0x1d552, 0x1d6a3, + 0x1d6a8, 0x1d6c0, + 0x1d6c2, 0x1d6da, + 0x1d6dc, 0x1d6fa, + 0x1d6fc, 0x1d714, + 0x1d716, 0x1d734, + 0x1d736, 0x1d74e, + 0x1d750, 0x1d76e, + 0x1d770, 0x1d788, + 0x1d78a, 0x1d7a8, + 0x1d7aa, 0x1d7c2, + 0x1d7c4, 0x1d7c9, + 0x20000, 0x2a6d6, + 0x2f800, 0x2fa1d, + 0xe0100, 0xe01ef +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of CRAlpha */ + +static const OnigCodePoint CRBlank[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 9, +#else + 3, +#endif + 0x0009, 0x0009, + 0x0020, 0x0020, + 0x00a0, 0x00a0 +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x1680, 0x1680, + 0x180e, 0x180e, + 0x2000, 0x200a, + 0x202f, 0x202f, + 0x205f, 0x205f, + 0x3000, 0x3000 +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of CRBlank */ + +static const OnigCodePoint CRCntrl[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 19, +#else + 3, +#endif + 0x0000, 0x001f, + 0x007f, 0x009f, + 0x00ad, 0x00ad +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x0600, 0x0603, + 0x06dd, 0x06dd, + 0x070f, 0x070f, + 0x17b4, 0x17b5, + 0x200b, 0x200f, + 0x202a, 0x202e, + 0x2060, 0x2063, + 0x206a, 0x206f, + 0xd800, 0xf8ff, + 0xfeff, 0xfeff, + 0xfff9, 0xfffb, + 0x1d173, 0x1d17a, + 0xe0001, 0xe0001, + 0xe0020, 0xe007f, + 0xf0000, 0xffffd, + 0x100000, 0x10fffd +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of CRCntrl */ + +static const OnigCodePoint CRDigit[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 23, +#else + 1, +#endif + 0x0030, 0x0039 +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x0660, 0x0669, + 0x06f0, 0x06f9, + 0x0966, 0x096f, + 0x09e6, 0x09ef, + 0x0a66, 0x0a6f, + 0x0ae6, 0x0aef, + 0x0b66, 0x0b6f, + 0x0be7, 0x0bef, + 0x0c66, 0x0c6f, + 0x0ce6, 0x0cef, + 0x0d66, 0x0d6f, + 0x0e50, 0x0e59, + 0x0ed0, 0x0ed9, + 0x0f20, 0x0f29, + 0x1040, 0x1049, + 0x1369, 0x1371, + 0x17e0, 0x17e9, + 0x1810, 0x1819, + 0x1946, 0x194f, + 0xff10, 0xff19, + 0x104a0, 0x104a9, + 0x1d7ce, 0x1d7ff +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of CRDigit */ + +static const OnigCodePoint CRGraph[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 405, +#else + 2, +#endif + 0x0021, 0x007e, + 0x00a1, 0x0236 +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x0250, 0x0357, + 0x035d, 0x036f, + 0x0374, 0x0375, + 0x037a, 0x037a, + 0x037e, 0x037e, + 0x0384, 0x038a, + 0x038c, 0x038c, + 0x038e, 0x03a1, + 0x03a3, 0x03ce, + 0x03d0, 0x03fb, + 0x0400, 0x0486, + 0x0488, 0x04ce, + 0x04d0, 0x04f5, + 0x04f8, 0x04f9, + 0x0500, 0x050f, + 0x0531, 0x0556, + 0x0559, 0x055f, + 0x0561, 0x0587, + 0x0589, 0x058a, + 0x0591, 0x05a1, + 0x05a3, 0x05b9, + 0x05bb, 0x05c4, + 0x05d0, 0x05ea, + 0x05f0, 0x05f4, + 0x0600, 0x0603, + 0x060c, 0x0615, + 0x061b, 0x061b, + 0x061f, 0x061f, + 0x0621, 0x063a, + 0x0640, 0x0658, + 0x0660, 0x070d, + 0x070f, 0x074a, + 0x074d, 0x074f, + 0x0780, 0x07b1, + 0x0901, 0x0939, + 0x093c, 0x094d, + 0x0950, 0x0954, + 0x0958, 0x0970, + 0x0981, 0x0983, + 0x0985, 0x098c, + 0x098f, 0x0990, + 0x0993, 0x09a8, + 0x09aa, 0x09b0, + 0x09b2, 0x09b2, + 0x09b6, 0x09b9, + 0x09bc, 0x09c4, + 0x09c7, 0x09c8, + 0x09cb, 0x09cd, + 0x09d7, 0x09d7, + 0x09dc, 0x09dd, + 0x09df, 0x09e3, + 0x09e6, 0x09fa, + 0x0a01, 0x0a03, + 0x0a05, 0x0a0a, + 0x0a0f, 0x0a10, + 0x0a13, 0x0a28, + 0x0a2a, 0x0a30, + 0x0a32, 0x0a33, + 0x0a35, 0x0a36, + 0x0a38, 0x0a39, + 0x0a3c, 0x0a3c, + 0x0a3e, 0x0a42, + 0x0a47, 0x0a48, + 0x0a4b, 0x0a4d, + 0x0a59, 0x0a5c, + 0x0a5e, 0x0a5e, + 0x0a66, 0x0a74, + 0x0a81, 0x0a83, + 0x0a85, 0x0a8d, + 0x0a8f, 0x0a91, + 0x0a93, 0x0aa8, + 0x0aaa, 0x0ab0, + 0x0ab2, 0x0ab3, + 0x0ab5, 0x0ab9, + 0x0abc, 0x0ac5, + 0x0ac7, 0x0ac9, + 0x0acb, 0x0acd, + 0x0ad0, 0x0ad0, + 0x0ae0, 0x0ae3, + 0x0ae6, 0x0aef, + 0x0af1, 0x0af1, + 0x0b01, 0x0b03, + 0x0b05, 0x0b0c, + 0x0b0f, 0x0b10, + 0x0b13, 0x0b28, + 0x0b2a, 0x0b30, + 0x0b32, 0x0b33, + 0x0b35, 0x0b39, + 0x0b3c, 0x0b43, + 0x0b47, 0x0b48, + 0x0b4b, 0x0b4d, + 0x0b56, 0x0b57, + 0x0b5c, 0x0b5d, + 0x0b5f, 0x0b61, + 0x0b66, 0x0b71, + 0x0b82, 0x0b83, + 0x0b85, 0x0b8a, + 0x0b8e, 0x0b90, + 0x0b92, 0x0b95, + 0x0b99, 0x0b9a, + 0x0b9c, 0x0b9c, + 0x0b9e, 0x0b9f, + 0x0ba3, 0x0ba4, + 0x0ba8, 0x0baa, + 0x0bae, 0x0bb5, + 0x0bb7, 0x0bb9, + 0x0bbe, 0x0bc2, + 0x0bc6, 0x0bc8, + 0x0bca, 0x0bcd, + 0x0bd7, 0x0bd7, + 0x0be7, 0x0bfa, + 0x0c01, 0x0c03, + 0x0c05, 0x0c0c, + 0x0c0e, 0x0c10, + 0x0c12, 0x0c28, + 0x0c2a, 0x0c33, + 0x0c35, 0x0c39, + 0x0c3e, 0x0c44, + 0x0c46, 0x0c48, + 0x0c4a, 0x0c4d, + 0x0c55, 0x0c56, + 0x0c60, 0x0c61, + 0x0c66, 0x0c6f, + 0x0c82, 0x0c83, + 0x0c85, 0x0c8c, + 0x0c8e, 0x0c90, + 0x0c92, 0x0ca8, + 0x0caa, 0x0cb3, + 0x0cb5, 0x0cb9, + 0x0cbc, 0x0cc4, + 0x0cc6, 0x0cc8, + 0x0cca, 0x0ccd, + 0x0cd5, 0x0cd6, + 0x0cde, 0x0cde, + 0x0ce0, 0x0ce1, + 0x0ce6, 0x0cef, + 0x0d02, 0x0d03, + 0x0d05, 0x0d0c, + 0x0d0e, 0x0d10, + 0x0d12, 0x0d28, + 0x0d2a, 0x0d39, + 0x0d3e, 0x0d43, + 0x0d46, 0x0d48, + 0x0d4a, 0x0d4d, + 0x0d57, 0x0d57, + 0x0d60, 0x0d61, + 0x0d66, 0x0d6f, + 0x0d82, 0x0d83, + 0x0d85, 0x0d96, + 0x0d9a, 0x0db1, + 0x0db3, 0x0dbb, + 0x0dbd, 0x0dbd, + 0x0dc0, 0x0dc6, + 0x0dca, 0x0dca, + 0x0dcf, 0x0dd4, + 0x0dd6, 0x0dd6, + 0x0dd8, 0x0ddf, + 0x0df2, 0x0df4, + 0x0e01, 0x0e3a, + 0x0e3f, 0x0e5b, + 0x0e81, 0x0e82, + 0x0e84, 0x0e84, + 0x0e87, 0x0e88, + 0x0e8a, 0x0e8a, + 0x0e8d, 0x0e8d, + 0x0e94, 0x0e97, + 0x0e99, 0x0e9f, + 0x0ea1, 0x0ea3, + 0x0ea5, 0x0ea5, + 0x0ea7, 0x0ea7, + 0x0eaa, 0x0eab, + 0x0ead, 0x0eb9, + 0x0ebb, 0x0ebd, + 0x0ec0, 0x0ec4, + 0x0ec6, 0x0ec6, + 0x0ec8, 0x0ecd, + 0x0ed0, 0x0ed9, + 0x0edc, 0x0edd, + 0x0f00, 0x0f47, + 0x0f49, 0x0f6a, + 0x0f71, 0x0f8b, + 0x0f90, 0x0f97, + 0x0f99, 0x0fbc, + 0x0fbe, 0x0fcc, + 0x0fcf, 0x0fcf, + 0x1000, 0x1021, + 0x1023, 0x1027, + 0x1029, 0x102a, + 0x102c, 0x1032, + 0x1036, 0x1039, + 0x1040, 0x1059, + 0x10a0, 0x10c5, + 0x10d0, 0x10f8, + 0x10fb, 0x10fb, + 0x1100, 0x1159, + 0x115f, 0x11a2, + 0x11a8, 0x11f9, + 0x1200, 0x1206, + 0x1208, 0x1246, + 0x1248, 0x1248, + 0x124a, 0x124d, + 0x1250, 0x1256, + 0x1258, 0x1258, + 0x125a, 0x125d, + 0x1260, 0x1286, + 0x1288, 0x1288, + 0x128a, 0x128d, + 0x1290, 0x12ae, + 0x12b0, 0x12b0, + 0x12b2, 0x12b5, + 0x12b8, 0x12be, + 0x12c0, 0x12c0, + 0x12c2, 0x12c5, + 0x12c8, 0x12ce, + 0x12d0, 0x12d6, + 0x12d8, 0x12ee, + 0x12f0, 0x130e, + 0x1310, 0x1310, + 0x1312, 0x1315, + 0x1318, 0x131e, + 0x1320, 0x1346, + 0x1348, 0x135a, + 0x1361, 0x137c, + 0x13a0, 0x13f4, + 0x1401, 0x1676, + 0x1681, 0x169c, + 0x16a0, 0x16f0, + 0x1700, 0x170c, + 0x170e, 0x1714, + 0x1720, 0x1736, + 0x1740, 0x1753, + 0x1760, 0x176c, + 0x176e, 0x1770, + 0x1772, 0x1773, + 0x1780, 0x17dd, + 0x17e0, 0x17e9, + 0x17f0, 0x17f9, + 0x1800, 0x180d, + 0x1810, 0x1819, + 0x1820, 0x1877, + 0x1880, 0x18a9, + 0x1900, 0x191c, + 0x1920, 0x192b, + 0x1930, 0x193b, + 0x1940, 0x1940, + 0x1944, 0x196d, + 0x1970, 0x1974, + 0x19e0, 0x19ff, + 0x1d00, 0x1d6b, + 0x1e00, 0x1e9b, + 0x1ea0, 0x1ef9, + 0x1f00, 0x1f15, + 0x1f18, 0x1f1d, + 0x1f20, 0x1f45, + 0x1f48, 0x1f4d, + 0x1f50, 0x1f57, + 0x1f59, 0x1f59, + 0x1f5b, 0x1f5b, + 0x1f5d, 0x1f5d, + 0x1f5f, 0x1f7d, + 0x1f80, 0x1fb4, + 0x1fb6, 0x1fc4, + 0x1fc6, 0x1fd3, + 0x1fd6, 0x1fdb, + 0x1fdd, 0x1fef, + 0x1ff2, 0x1ff4, + 0x1ff6, 0x1ffe, + 0x200b, 0x2027, + 0x202a, 0x202e, + 0x2030, 0x2054, + 0x2057, 0x2057, + 0x2060, 0x2063, + 0x206a, 0x2071, + 0x2074, 0x208e, + 0x20a0, 0x20b1, + 0x20d0, 0x20ea, + 0x2100, 0x213b, + 0x213d, 0x214b, + 0x2153, 0x2183, + 0x2190, 0x23d0, + 0x2400, 0x2426, + 0x2440, 0x244a, + 0x2460, 0x2617, + 0x2619, 0x267d, + 0x2680, 0x2691, + 0x26a0, 0x26a1, + 0x2701, 0x2704, + 0x2706, 0x2709, + 0x270c, 0x2727, + 0x2729, 0x274b, + 0x274d, 0x274d, + 0x274f, 0x2752, + 0x2756, 0x2756, + 0x2758, 0x275e, + 0x2761, 0x2794, + 0x2798, 0x27af, + 0x27b1, 0x27be, + 0x27d0, 0x27eb, + 0x27f0, 0x2b0d, + 0x2e80, 0x2e99, + 0x2e9b, 0x2ef3, + 0x2f00, 0x2fd5, + 0x2ff0, 0x2ffb, + 0x3001, 0x303f, + 0x3041, 0x3096, + 0x3099, 0x30ff, + 0x3105, 0x312c, + 0x3131, 0x318e, + 0x3190, 0x31b7, + 0x31f0, 0x321e, + 0x3220, 0x3243, + 0x3250, 0x327d, + 0x327f, 0x32fe, + 0x3300, 0x4db5, + 0x4dc0, 0x9fa5, + 0xa000, 0xa48c, + 0xa490, 0xa4c6, + 0xac00, 0xd7a3, + 0xe000, 0xfa2d, + 0xfa30, 0xfa6a, + 0xfb00, 0xfb06, + 0xfb13, 0xfb17, + 0xfb1d, 0xfb36, + 0xfb38, 0xfb3c, + 0xfb3e, 0xfb3e, + 0xfb40, 0xfb41, + 0xfb43, 0xfb44, + 0xfb46, 0xfbb1, + 0xfbd3, 0xfd3f, + 0xfd50, 0xfd8f, + 0xfd92, 0xfdc7, + 0xfdf0, 0xfdfd, + 0xfe00, 0xfe0f, + 0xfe20, 0xfe23, + 0xfe30, 0xfe52, + 0xfe54, 0xfe66, + 0xfe68, 0xfe6b, + 0xfe70, 0xfe74, + 0xfe76, 0xfefc, + 0xfeff, 0xfeff, + 0xff01, 0xffbe, + 0xffc2, 0xffc7, + 0xffca, 0xffcf, + 0xffd2, 0xffd7, + 0xffda, 0xffdc, + 0xffe0, 0xffe6, + 0xffe8, 0xffee, + 0xfff9, 0xfffd, + 0x10000, 0x1000b, + 0x1000d, 0x10026, + 0x10028, 0x1003a, + 0x1003c, 0x1003d, + 0x1003f, 0x1004d, + 0x10050, 0x1005d, + 0x10080, 0x100fa, + 0x10100, 0x10102, + 0x10107, 0x10133, + 0x10137, 0x1013f, + 0x10300, 0x1031e, + 0x10320, 0x10323, + 0x10330, 0x1034a, + 0x10380, 0x1039d, + 0x1039f, 0x1039f, + 0x10400, 0x1049d, + 0x104a0, 0x104a9, + 0x10800, 0x10805, + 0x10808, 0x10808, + 0x1080a, 0x10835, + 0x10837, 0x10838, + 0x1083c, 0x1083c, + 0x1083f, 0x1083f, + 0x1d000, 0x1d0f5, + 0x1d100, 0x1d126, + 0x1d12a, 0x1d1dd, + 0x1d300, 0x1d356, + 0x1d400, 0x1d454, + 0x1d456, 0x1d49c, + 0x1d49e, 0x1d49f, + 0x1d4a2, 0x1d4a2, + 0x1d4a5, 0x1d4a6, + 0x1d4a9, 0x1d4ac, + 0x1d4ae, 0x1d4b9, + 0x1d4bb, 0x1d4bb, + 0x1d4bd, 0x1d4c3, + 0x1d4c5, 0x1d505, + 0x1d507, 0x1d50a, + 0x1d50d, 0x1d514, + 0x1d516, 0x1d51c, + 0x1d51e, 0x1d539, + 0x1d53b, 0x1d53e, + 0x1d540, 0x1d544, + 0x1d546, 0x1d546, + 0x1d54a, 0x1d550, + 0x1d552, 0x1d6a3, + 0x1d6a8, 0x1d7c9, + 0x1d7ce, 0x1d7ff, + 0x20000, 0x2a6d6, + 0x2f800, 0x2fa1d, + 0xe0001, 0xe0001, + 0xe0020, 0xe007f, + 0xe0100, 0xe01ef, + 0xf0000, 0xffffd, + 0x100000, 0x10fffd +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of CRGraph */ + +static const OnigCodePoint CRLower[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 424, +#else + 6, +#endif + 0x0061, 0x007a, + 0x00aa, 0x00aa, + 0x00b5, 0x00b5, + 0x00ba, 0x00ba, + 0x00df, 0x00f6, + 0x00f8, 0x00ff +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x0101, 0x0101, + 0x0103, 0x0103, + 0x0105, 0x0105, + 0x0107, 0x0107, + 0x0109, 0x0109, + 0x010b, 0x010b, + 0x010d, 0x010d, + 0x010f, 0x010f, + 0x0111, 0x0111, + 0x0113, 0x0113, + 0x0115, 0x0115, + 0x0117, 0x0117, + 0x0119, 0x0119, + 0x011b, 0x011b, + 0x011d, 0x011d, + 0x011f, 0x011f, + 0x0121, 0x0121, + 0x0123, 0x0123, + 0x0125, 0x0125, + 0x0127, 0x0127, + 0x0129, 0x0129, + 0x012b, 0x012b, + 0x012d, 0x012d, + 0x012f, 0x012f, + 0x0131, 0x0131, + 0x0133, 0x0133, + 0x0135, 0x0135, + 0x0137, 0x0138, + 0x013a, 0x013a, + 0x013c, 0x013c, + 0x013e, 0x013e, + 0x0140, 0x0140, + 0x0142, 0x0142, + 0x0144, 0x0144, + 0x0146, 0x0146, + 0x0148, 0x0149, + 0x014b, 0x014b, + 0x014d, 0x014d, + 0x014f, 0x014f, + 0x0151, 0x0151, + 0x0153, 0x0153, + 0x0155, 0x0155, + 0x0157, 0x0157, + 0x0159, 0x0159, + 0x015b, 0x015b, + 0x015d, 0x015d, + 0x015f, 0x015f, + 0x0161, 0x0161, + 0x0163, 0x0163, + 0x0165, 0x0165, + 0x0167, 0x0167, + 0x0169, 0x0169, + 0x016b, 0x016b, + 0x016d, 0x016d, + 0x016f, 0x016f, + 0x0171, 0x0171, + 0x0173, 0x0173, + 0x0175, 0x0175, + 0x0177, 0x0177, + 0x017a, 0x017a, + 0x017c, 0x017c, + 0x017e, 0x0180, + 0x0183, 0x0183, + 0x0185, 0x0185, + 0x0188, 0x0188, + 0x018c, 0x018d, + 0x0192, 0x0192, + 0x0195, 0x0195, + 0x0199, 0x019b, + 0x019e, 0x019e, + 0x01a1, 0x01a1, + 0x01a3, 0x01a3, + 0x01a5, 0x01a5, + 0x01a8, 0x01a8, + 0x01aa, 0x01ab, + 0x01ad, 0x01ad, + 0x01b0, 0x01b0, + 0x01b4, 0x01b4, + 0x01b6, 0x01b6, + 0x01b9, 0x01ba, + 0x01bd, 0x01bf, + 0x01c6, 0x01c6, + 0x01c9, 0x01c9, + 0x01cc, 0x01cc, + 0x01ce, 0x01ce, + 0x01d0, 0x01d0, + 0x01d2, 0x01d2, + 0x01d4, 0x01d4, + 0x01d6, 0x01d6, + 0x01d8, 0x01d8, + 0x01da, 0x01da, + 0x01dc, 0x01dd, + 0x01df, 0x01df, + 0x01e1, 0x01e1, + 0x01e3, 0x01e3, + 0x01e5, 0x01e5, + 0x01e7, 0x01e7, + 0x01e9, 0x01e9, + 0x01eb, 0x01eb, + 0x01ed, 0x01ed, + 0x01ef, 0x01f0, + 0x01f3, 0x01f3, + 0x01f5, 0x01f5, + 0x01f9, 0x01f9, + 0x01fb, 0x01fb, + 0x01fd, 0x01fd, + 0x01ff, 0x01ff, + 0x0201, 0x0201, + 0x0203, 0x0203, + 0x0205, 0x0205, + 0x0207, 0x0207, + 0x0209, 0x0209, + 0x020b, 0x020b, + 0x020d, 0x020d, + 0x020f, 0x020f, + 0x0211, 0x0211, + 0x0213, 0x0213, + 0x0215, 0x0215, + 0x0217, 0x0217, + 0x0219, 0x0219, + 0x021b, 0x021b, + 0x021d, 0x021d, + 0x021f, 0x021f, + 0x0221, 0x0221, + 0x0223, 0x0223, + 0x0225, 0x0225, + 0x0227, 0x0227, + 0x0229, 0x0229, + 0x022b, 0x022b, + 0x022d, 0x022d, + 0x022f, 0x022f, + 0x0231, 0x0231, + 0x0233, 0x0236, + 0x0250, 0x02af, + 0x0390, 0x0390, + 0x03ac, 0x03ce, + 0x03d0, 0x03d1, + 0x03d5, 0x03d7, + 0x03d9, 0x03d9, + 0x03db, 0x03db, + 0x03dd, 0x03dd, + 0x03df, 0x03df, + 0x03e1, 0x03e1, + 0x03e3, 0x03e3, + 0x03e5, 0x03e5, + 0x03e7, 0x03e7, + 0x03e9, 0x03e9, + 0x03eb, 0x03eb, + 0x03ed, 0x03ed, + 0x03ef, 0x03f3, + 0x03f5, 0x03f5, + 0x03f8, 0x03f8, + 0x03fb, 0x03fb, + 0x0430, 0x045f, + 0x0461, 0x0461, + 0x0463, 0x0463, + 0x0465, 0x0465, + 0x0467, 0x0467, + 0x0469, 0x0469, + 0x046b, 0x046b, + 0x046d, 0x046d, + 0x046f, 0x046f, + 0x0471, 0x0471, + 0x0473, 0x0473, + 0x0475, 0x0475, + 0x0477, 0x0477, + 0x0479, 0x0479, + 0x047b, 0x047b, + 0x047d, 0x047d, + 0x047f, 0x047f, + 0x0481, 0x0481, + 0x048b, 0x048b, + 0x048d, 0x048d, + 0x048f, 0x048f, + 0x0491, 0x0491, + 0x0493, 0x0493, + 0x0495, 0x0495, + 0x0497, 0x0497, + 0x0499, 0x0499, + 0x049b, 0x049b, + 0x049d, 0x049d, + 0x049f, 0x049f, + 0x04a1, 0x04a1, + 0x04a3, 0x04a3, + 0x04a5, 0x04a5, + 0x04a7, 0x04a7, + 0x04a9, 0x04a9, + 0x04ab, 0x04ab, + 0x04ad, 0x04ad, + 0x04af, 0x04af, + 0x04b1, 0x04b1, + 0x04b3, 0x04b3, + 0x04b5, 0x04b5, + 0x04b7, 0x04b7, + 0x04b9, 0x04b9, + 0x04bb, 0x04bb, + 0x04bd, 0x04bd, + 0x04bf, 0x04bf, + 0x04c2, 0x04c2, + 0x04c4, 0x04c4, + 0x04c6, 0x04c6, + 0x04c8, 0x04c8, + 0x04ca, 0x04ca, + 0x04cc, 0x04cc, + 0x04ce, 0x04ce, + 0x04d1, 0x04d1, + 0x04d3, 0x04d3, + 0x04d5, 0x04d5, + 0x04d7, 0x04d7, + 0x04d9, 0x04d9, + 0x04db, 0x04db, + 0x04dd, 0x04dd, + 0x04df, 0x04df, + 0x04e1, 0x04e1, + 0x04e3, 0x04e3, + 0x04e5, 0x04e5, + 0x04e7, 0x04e7, + 0x04e9, 0x04e9, + 0x04eb, 0x04eb, + 0x04ed, 0x04ed, + 0x04ef, 0x04ef, + 0x04f1, 0x04f1, + 0x04f3, 0x04f3, + 0x04f5, 0x04f5, + 0x04f9, 0x04f9, + 0x0501, 0x0501, + 0x0503, 0x0503, + 0x0505, 0x0505, + 0x0507, 0x0507, + 0x0509, 0x0509, + 0x050b, 0x050b, + 0x050d, 0x050d, + 0x050f, 0x050f, + 0x0561, 0x0587, + 0x1d00, 0x1d2b, + 0x1d62, 0x1d6b, + 0x1e01, 0x1e01, + 0x1e03, 0x1e03, + 0x1e05, 0x1e05, + 0x1e07, 0x1e07, + 0x1e09, 0x1e09, + 0x1e0b, 0x1e0b, + 0x1e0d, 0x1e0d, + 0x1e0f, 0x1e0f, + 0x1e11, 0x1e11, + 0x1e13, 0x1e13, + 0x1e15, 0x1e15, + 0x1e17, 0x1e17, + 0x1e19, 0x1e19, + 0x1e1b, 0x1e1b, + 0x1e1d, 0x1e1d, + 0x1e1f, 0x1e1f, + 0x1e21, 0x1e21, + 0x1e23, 0x1e23, + 0x1e25, 0x1e25, + 0x1e27, 0x1e27, + 0x1e29, 0x1e29, + 0x1e2b, 0x1e2b, + 0x1e2d, 0x1e2d, + 0x1e2f, 0x1e2f, + 0x1e31, 0x1e31, + 0x1e33, 0x1e33, + 0x1e35, 0x1e35, + 0x1e37, 0x1e37, + 0x1e39, 0x1e39, + 0x1e3b, 0x1e3b, + 0x1e3d, 0x1e3d, + 0x1e3f, 0x1e3f, + 0x1e41, 0x1e41, + 0x1e43, 0x1e43, + 0x1e45, 0x1e45, + 0x1e47, 0x1e47, + 0x1e49, 0x1e49, + 0x1e4b, 0x1e4b, + 0x1e4d, 0x1e4d, + 0x1e4f, 0x1e4f, + 0x1e51, 0x1e51, + 0x1e53, 0x1e53, + 0x1e55, 0x1e55, + 0x1e57, 0x1e57, + 0x1e59, 0x1e59, + 0x1e5b, 0x1e5b, + 0x1e5d, 0x1e5d, + 0x1e5f, 0x1e5f, + 0x1e61, 0x1e61, + 0x1e63, 0x1e63, + 0x1e65, 0x1e65, + 0x1e67, 0x1e67, + 0x1e69, 0x1e69, + 0x1e6b, 0x1e6b, + 0x1e6d, 0x1e6d, + 0x1e6f, 0x1e6f, + 0x1e71, 0x1e71, + 0x1e73, 0x1e73, + 0x1e75, 0x1e75, + 0x1e77, 0x1e77, + 0x1e79, 0x1e79, + 0x1e7b, 0x1e7b, + 0x1e7d, 0x1e7d, + 0x1e7f, 0x1e7f, + 0x1e81, 0x1e81, + 0x1e83, 0x1e83, + 0x1e85, 0x1e85, + 0x1e87, 0x1e87, + 0x1e89, 0x1e89, + 0x1e8b, 0x1e8b, + 0x1e8d, 0x1e8d, + 0x1e8f, 0x1e8f, + 0x1e91, 0x1e91, + 0x1e93, 0x1e93, + 0x1e95, 0x1e9b, + 0x1ea1, 0x1ea1, + 0x1ea3, 0x1ea3, + 0x1ea5, 0x1ea5, + 0x1ea7, 0x1ea7, + 0x1ea9, 0x1ea9, + 0x1eab, 0x1eab, + 0x1ead, 0x1ead, + 0x1eaf, 0x1eaf, + 0x1eb1, 0x1eb1, + 0x1eb3, 0x1eb3, + 0x1eb5, 0x1eb5, + 0x1eb7, 0x1eb7, + 0x1eb9, 0x1eb9, + 0x1ebb, 0x1ebb, + 0x1ebd, 0x1ebd, + 0x1ebf, 0x1ebf, + 0x1ec1, 0x1ec1, + 0x1ec3, 0x1ec3, + 0x1ec5, 0x1ec5, + 0x1ec7, 0x1ec7, + 0x1ec9, 0x1ec9, + 0x1ecb, 0x1ecb, + 0x1ecd, 0x1ecd, + 0x1ecf, 0x1ecf, + 0x1ed1, 0x1ed1, + 0x1ed3, 0x1ed3, + 0x1ed5, 0x1ed5, + 0x1ed7, 0x1ed7, + 0x1ed9, 0x1ed9, + 0x1edb, 0x1edb, + 0x1edd, 0x1edd, + 0x1edf, 0x1edf, + 0x1ee1, 0x1ee1, + 0x1ee3, 0x1ee3, + 0x1ee5, 0x1ee5, + 0x1ee7, 0x1ee7, + 0x1ee9, 0x1ee9, + 0x1eeb, 0x1eeb, + 0x1eed, 0x1eed, + 0x1eef, 0x1eef, + 0x1ef1, 0x1ef1, + 0x1ef3, 0x1ef3, + 0x1ef5, 0x1ef5, + 0x1ef7, 0x1ef7, + 0x1ef9, 0x1ef9, + 0x1f00, 0x1f07, + 0x1f10, 0x1f15, + 0x1f20, 0x1f27, + 0x1f30, 0x1f37, + 0x1f40, 0x1f45, + 0x1f50, 0x1f57, + 0x1f60, 0x1f67, + 0x1f70, 0x1f7d, + 0x1f80, 0x1f87, + 0x1f90, 0x1f97, + 0x1fa0, 0x1fa7, + 0x1fb0, 0x1fb4, + 0x1fb6, 0x1fb7, + 0x1fbe, 0x1fbe, + 0x1fc2, 0x1fc4, + 0x1fc6, 0x1fc7, + 0x1fd0, 0x1fd3, + 0x1fd6, 0x1fd7, + 0x1fe0, 0x1fe7, + 0x1ff2, 0x1ff4, + 0x1ff6, 0x1ff7, + 0x2071, 0x2071, + 0x207f, 0x207f, + 0x210a, 0x210a, + 0x210e, 0x210f, + 0x2113, 0x2113, + 0x212f, 0x212f, + 0x2134, 0x2134, + 0x2139, 0x2139, + 0x213d, 0x213d, + 0x2146, 0x2149, + 0xfb00, 0xfb06, + 0xfb13, 0xfb17, + 0xff41, 0xff5a, + 0x10428, 0x1044f, + 0x1d41a, 0x1d433, + 0x1d44e, 0x1d454, + 0x1d456, 0x1d467, + 0x1d482, 0x1d49b, + 0x1d4b6, 0x1d4b9, + 0x1d4bb, 0x1d4bb, + 0x1d4bd, 0x1d4c3, + 0x1d4c5, 0x1d4cf, + 0x1d4ea, 0x1d503, + 0x1d51e, 0x1d537, + 0x1d552, 0x1d56b, + 0x1d586, 0x1d59f, + 0x1d5ba, 0x1d5d3, + 0x1d5ee, 0x1d607, + 0x1d622, 0x1d63b, + 0x1d656, 0x1d66f, + 0x1d68a, 0x1d6a3, + 0x1d6c2, 0x1d6da, + 0x1d6dc, 0x1d6e1, + 0x1d6fc, 0x1d714, + 0x1d716, 0x1d71b, + 0x1d736, 0x1d74e, + 0x1d750, 0x1d755, + 0x1d770, 0x1d788, + 0x1d78a, 0x1d78f, + 0x1d7aa, 0x1d7c2, + 0x1d7c4, 0x1d7c9 +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of CRLower */ + +static const OnigCodePoint CRPrint[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 405, +#else + 4, +#endif + 0x0009, 0x000d, + 0x0020, 0x007e, + 0x0085, 0x0085, + 0x00a0, 0x0236 +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x0250, 0x0357, + 0x035d, 0x036f, + 0x0374, 0x0375, + 0x037a, 0x037a, + 0x037e, 0x037e, + 0x0384, 0x038a, + 0x038c, 0x038c, + 0x038e, 0x03a1, + 0x03a3, 0x03ce, + 0x03d0, 0x03fb, + 0x0400, 0x0486, + 0x0488, 0x04ce, + 0x04d0, 0x04f5, + 0x04f8, 0x04f9, + 0x0500, 0x050f, + 0x0531, 0x0556, + 0x0559, 0x055f, + 0x0561, 0x0587, + 0x0589, 0x058a, + 0x0591, 0x05a1, + 0x05a3, 0x05b9, + 0x05bb, 0x05c4, + 0x05d0, 0x05ea, + 0x05f0, 0x05f4, + 0x0600, 0x0603, + 0x060c, 0x0615, + 0x061b, 0x061b, + 0x061f, 0x061f, + 0x0621, 0x063a, + 0x0640, 0x0658, + 0x0660, 0x070d, + 0x070f, 0x074a, + 0x074d, 0x074f, + 0x0780, 0x07b1, + 0x0901, 0x0939, + 0x093c, 0x094d, + 0x0950, 0x0954, + 0x0958, 0x0970, + 0x0981, 0x0983, + 0x0985, 0x098c, + 0x098f, 0x0990, + 0x0993, 0x09a8, + 0x09aa, 0x09b0, + 0x09b2, 0x09b2, + 0x09b6, 0x09b9, + 0x09bc, 0x09c4, + 0x09c7, 0x09c8, + 0x09cb, 0x09cd, + 0x09d7, 0x09d7, + 0x09dc, 0x09dd, + 0x09df, 0x09e3, + 0x09e6, 0x09fa, + 0x0a01, 0x0a03, + 0x0a05, 0x0a0a, + 0x0a0f, 0x0a10, + 0x0a13, 0x0a28, + 0x0a2a, 0x0a30, + 0x0a32, 0x0a33, + 0x0a35, 0x0a36, + 0x0a38, 0x0a39, + 0x0a3c, 0x0a3c, + 0x0a3e, 0x0a42, + 0x0a47, 0x0a48, + 0x0a4b, 0x0a4d, + 0x0a59, 0x0a5c, + 0x0a5e, 0x0a5e, + 0x0a66, 0x0a74, + 0x0a81, 0x0a83, + 0x0a85, 0x0a8d, + 0x0a8f, 0x0a91, + 0x0a93, 0x0aa8, + 0x0aaa, 0x0ab0, + 0x0ab2, 0x0ab3, + 0x0ab5, 0x0ab9, + 0x0abc, 0x0ac5, + 0x0ac7, 0x0ac9, + 0x0acb, 0x0acd, + 0x0ad0, 0x0ad0, + 0x0ae0, 0x0ae3, + 0x0ae6, 0x0aef, + 0x0af1, 0x0af1, + 0x0b01, 0x0b03, + 0x0b05, 0x0b0c, + 0x0b0f, 0x0b10, + 0x0b13, 0x0b28, + 0x0b2a, 0x0b30, + 0x0b32, 0x0b33, + 0x0b35, 0x0b39, + 0x0b3c, 0x0b43, + 0x0b47, 0x0b48, + 0x0b4b, 0x0b4d, + 0x0b56, 0x0b57, + 0x0b5c, 0x0b5d, + 0x0b5f, 0x0b61, + 0x0b66, 0x0b71, + 0x0b82, 0x0b83, + 0x0b85, 0x0b8a, + 0x0b8e, 0x0b90, + 0x0b92, 0x0b95, + 0x0b99, 0x0b9a, + 0x0b9c, 0x0b9c, + 0x0b9e, 0x0b9f, + 0x0ba3, 0x0ba4, + 0x0ba8, 0x0baa, + 0x0bae, 0x0bb5, + 0x0bb7, 0x0bb9, + 0x0bbe, 0x0bc2, + 0x0bc6, 0x0bc8, + 0x0bca, 0x0bcd, + 0x0bd7, 0x0bd7, + 0x0be7, 0x0bfa, + 0x0c01, 0x0c03, + 0x0c05, 0x0c0c, + 0x0c0e, 0x0c10, + 0x0c12, 0x0c28, + 0x0c2a, 0x0c33, + 0x0c35, 0x0c39, + 0x0c3e, 0x0c44, + 0x0c46, 0x0c48, + 0x0c4a, 0x0c4d, + 0x0c55, 0x0c56, + 0x0c60, 0x0c61, + 0x0c66, 0x0c6f, + 0x0c82, 0x0c83, + 0x0c85, 0x0c8c, + 0x0c8e, 0x0c90, + 0x0c92, 0x0ca8, + 0x0caa, 0x0cb3, + 0x0cb5, 0x0cb9, + 0x0cbc, 0x0cc4, + 0x0cc6, 0x0cc8, + 0x0cca, 0x0ccd, + 0x0cd5, 0x0cd6, + 0x0cde, 0x0cde, + 0x0ce0, 0x0ce1, + 0x0ce6, 0x0cef, + 0x0d02, 0x0d03, + 0x0d05, 0x0d0c, + 0x0d0e, 0x0d10, + 0x0d12, 0x0d28, + 0x0d2a, 0x0d39, + 0x0d3e, 0x0d43, + 0x0d46, 0x0d48, + 0x0d4a, 0x0d4d, + 0x0d57, 0x0d57, + 0x0d60, 0x0d61, + 0x0d66, 0x0d6f, + 0x0d82, 0x0d83, + 0x0d85, 0x0d96, + 0x0d9a, 0x0db1, + 0x0db3, 0x0dbb, + 0x0dbd, 0x0dbd, + 0x0dc0, 0x0dc6, + 0x0dca, 0x0dca, + 0x0dcf, 0x0dd4, + 0x0dd6, 0x0dd6, + 0x0dd8, 0x0ddf, + 0x0df2, 0x0df4, + 0x0e01, 0x0e3a, + 0x0e3f, 0x0e5b, + 0x0e81, 0x0e82, + 0x0e84, 0x0e84, + 0x0e87, 0x0e88, + 0x0e8a, 0x0e8a, + 0x0e8d, 0x0e8d, + 0x0e94, 0x0e97, + 0x0e99, 0x0e9f, + 0x0ea1, 0x0ea3, + 0x0ea5, 0x0ea5, + 0x0ea7, 0x0ea7, + 0x0eaa, 0x0eab, + 0x0ead, 0x0eb9, + 0x0ebb, 0x0ebd, + 0x0ec0, 0x0ec4, + 0x0ec6, 0x0ec6, + 0x0ec8, 0x0ecd, + 0x0ed0, 0x0ed9, + 0x0edc, 0x0edd, + 0x0f00, 0x0f47, + 0x0f49, 0x0f6a, + 0x0f71, 0x0f8b, + 0x0f90, 0x0f97, + 0x0f99, 0x0fbc, + 0x0fbe, 0x0fcc, + 0x0fcf, 0x0fcf, + 0x1000, 0x1021, + 0x1023, 0x1027, + 0x1029, 0x102a, + 0x102c, 0x1032, + 0x1036, 0x1039, + 0x1040, 0x1059, + 0x10a0, 0x10c5, + 0x10d0, 0x10f8, + 0x10fb, 0x10fb, + 0x1100, 0x1159, + 0x115f, 0x11a2, + 0x11a8, 0x11f9, + 0x1200, 0x1206, + 0x1208, 0x1246, + 0x1248, 0x1248, + 0x124a, 0x124d, + 0x1250, 0x1256, + 0x1258, 0x1258, + 0x125a, 0x125d, + 0x1260, 0x1286, + 0x1288, 0x1288, + 0x128a, 0x128d, + 0x1290, 0x12ae, + 0x12b0, 0x12b0, + 0x12b2, 0x12b5, + 0x12b8, 0x12be, + 0x12c0, 0x12c0, + 0x12c2, 0x12c5, + 0x12c8, 0x12ce, + 0x12d0, 0x12d6, + 0x12d8, 0x12ee, + 0x12f0, 0x130e, + 0x1310, 0x1310, + 0x1312, 0x1315, + 0x1318, 0x131e, + 0x1320, 0x1346, + 0x1348, 0x135a, + 0x1361, 0x137c, + 0x13a0, 0x13f4, + 0x1401, 0x1676, + 0x1680, 0x169c, + 0x16a0, 0x16f0, + 0x1700, 0x170c, + 0x170e, 0x1714, + 0x1720, 0x1736, + 0x1740, 0x1753, + 0x1760, 0x176c, + 0x176e, 0x1770, + 0x1772, 0x1773, + 0x1780, 0x17dd, + 0x17e0, 0x17e9, + 0x17f0, 0x17f9, + 0x1800, 0x180e, + 0x1810, 0x1819, + 0x1820, 0x1877, + 0x1880, 0x18a9, + 0x1900, 0x191c, + 0x1920, 0x192b, + 0x1930, 0x193b, + 0x1940, 0x1940, + 0x1944, 0x196d, + 0x1970, 0x1974, + 0x19e0, 0x19ff, + 0x1d00, 0x1d6b, + 0x1e00, 0x1e9b, + 0x1ea0, 0x1ef9, + 0x1f00, 0x1f15, + 0x1f18, 0x1f1d, + 0x1f20, 0x1f45, + 0x1f48, 0x1f4d, + 0x1f50, 0x1f57, + 0x1f59, 0x1f59, + 0x1f5b, 0x1f5b, + 0x1f5d, 0x1f5d, + 0x1f5f, 0x1f7d, + 0x1f80, 0x1fb4, + 0x1fb6, 0x1fc4, + 0x1fc6, 0x1fd3, + 0x1fd6, 0x1fdb, + 0x1fdd, 0x1fef, + 0x1ff2, 0x1ff4, + 0x1ff6, 0x1ffe, + 0x2000, 0x2054, + 0x2057, 0x2057, + 0x205f, 0x2063, + 0x206a, 0x2071, + 0x2074, 0x208e, + 0x20a0, 0x20b1, + 0x20d0, 0x20ea, + 0x2100, 0x213b, + 0x213d, 0x214b, + 0x2153, 0x2183, + 0x2190, 0x23d0, + 0x2400, 0x2426, + 0x2440, 0x244a, + 0x2460, 0x2617, + 0x2619, 0x267d, + 0x2680, 0x2691, + 0x26a0, 0x26a1, + 0x2701, 0x2704, + 0x2706, 0x2709, + 0x270c, 0x2727, + 0x2729, 0x274b, + 0x274d, 0x274d, + 0x274f, 0x2752, + 0x2756, 0x2756, + 0x2758, 0x275e, + 0x2761, 0x2794, + 0x2798, 0x27af, + 0x27b1, 0x27be, + 0x27d0, 0x27eb, + 0x27f0, 0x2b0d, + 0x2e80, 0x2e99, + 0x2e9b, 0x2ef3, + 0x2f00, 0x2fd5, + 0x2ff0, 0x2ffb, + 0x3000, 0x303f, + 0x3041, 0x3096, + 0x3099, 0x30ff, + 0x3105, 0x312c, + 0x3131, 0x318e, + 0x3190, 0x31b7, + 0x31f0, 0x321e, + 0x3220, 0x3243, + 0x3250, 0x327d, + 0x327f, 0x32fe, + 0x3300, 0x4db5, + 0x4dc0, 0x9fa5, + 0xa000, 0xa48c, + 0xa490, 0xa4c6, + 0xac00, 0xd7a3, + 0xe000, 0xfa2d, + 0xfa30, 0xfa6a, + 0xfb00, 0xfb06, + 0xfb13, 0xfb17, + 0xfb1d, 0xfb36, + 0xfb38, 0xfb3c, + 0xfb3e, 0xfb3e, + 0xfb40, 0xfb41, + 0xfb43, 0xfb44, + 0xfb46, 0xfbb1, + 0xfbd3, 0xfd3f, + 0xfd50, 0xfd8f, + 0xfd92, 0xfdc7, + 0xfdf0, 0xfdfd, + 0xfe00, 0xfe0f, + 0xfe20, 0xfe23, + 0xfe30, 0xfe52, + 0xfe54, 0xfe66, + 0xfe68, 0xfe6b, + 0xfe70, 0xfe74, + 0xfe76, 0xfefc, + 0xfeff, 0xfeff, + 0xff01, 0xffbe, + 0xffc2, 0xffc7, + 0xffca, 0xffcf, + 0xffd2, 0xffd7, + 0xffda, 0xffdc, + 0xffe0, 0xffe6, + 0xffe8, 0xffee, + 0xfff9, 0xfffd, + 0x10000, 0x1000b, + 0x1000d, 0x10026, + 0x10028, 0x1003a, + 0x1003c, 0x1003d, + 0x1003f, 0x1004d, + 0x10050, 0x1005d, + 0x10080, 0x100fa, + 0x10100, 0x10102, + 0x10107, 0x10133, + 0x10137, 0x1013f, + 0x10300, 0x1031e, + 0x10320, 0x10323, + 0x10330, 0x1034a, + 0x10380, 0x1039d, + 0x1039f, 0x1039f, + 0x10400, 0x1049d, + 0x104a0, 0x104a9, + 0x10800, 0x10805, + 0x10808, 0x10808, + 0x1080a, 0x10835, + 0x10837, 0x10838, + 0x1083c, 0x1083c, + 0x1083f, 0x1083f, + 0x1d000, 0x1d0f5, + 0x1d100, 0x1d126, + 0x1d12a, 0x1d1dd, + 0x1d300, 0x1d356, + 0x1d400, 0x1d454, + 0x1d456, 0x1d49c, + 0x1d49e, 0x1d49f, + 0x1d4a2, 0x1d4a2, + 0x1d4a5, 0x1d4a6, + 0x1d4a9, 0x1d4ac, + 0x1d4ae, 0x1d4b9, + 0x1d4bb, 0x1d4bb, + 0x1d4bd, 0x1d4c3, + 0x1d4c5, 0x1d505, + 0x1d507, 0x1d50a, + 0x1d50d, 0x1d514, + 0x1d516, 0x1d51c, + 0x1d51e, 0x1d539, + 0x1d53b, 0x1d53e, + 0x1d540, 0x1d544, + 0x1d546, 0x1d546, + 0x1d54a, 0x1d550, + 0x1d552, 0x1d6a3, + 0x1d6a8, 0x1d7c9, + 0x1d7ce, 0x1d7ff, + 0x20000, 0x2a6d6, + 0x2f800, 0x2fa1d, + 0xe0001, 0xe0001, + 0xe0020, 0xe007f, + 0xe0100, 0xe01ef, + 0xf0000, 0xffffd, + 0x100000, 0x10fffd +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of CRPrint */ + +static const OnigCodePoint CRPunct[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 86, +#else + 14, +#endif + 0x0021, 0x0023, + 0x0025, 0x002a, + 0x002c, 0x002f, + 0x003a, 0x003b, + 0x003f, 0x0040, + 0x005b, 0x005d, + 0x005f, 0x005f, + 0x007b, 0x007b, + 0x007d, 0x007d, + 0x00a1, 0x00a1, + 0x00ab, 0x00ab, + 0x00b7, 0x00b7, + 0x00bb, 0x00bb, + 0x00bf, 0x00bf +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x037e, 0x037e, + 0x0387, 0x0387, + 0x055a, 0x055f, + 0x0589, 0x058a, + 0x05be, 0x05be, + 0x05c0, 0x05c0, + 0x05c3, 0x05c3, + 0x05f3, 0x05f4, + 0x060c, 0x060d, + 0x061b, 0x061b, + 0x061f, 0x061f, + 0x066a, 0x066d, + 0x06d4, 0x06d4, + 0x0700, 0x070d, + 0x0964, 0x0965, + 0x0970, 0x0970, + 0x0df4, 0x0df4, + 0x0e4f, 0x0e4f, + 0x0e5a, 0x0e5b, + 0x0f04, 0x0f12, + 0x0f3a, 0x0f3d, + 0x0f85, 0x0f85, + 0x104a, 0x104f, + 0x10fb, 0x10fb, + 0x1361, 0x1368, + 0x166d, 0x166e, + 0x169b, 0x169c, + 0x16eb, 0x16ed, + 0x1735, 0x1736, + 0x17d4, 0x17d6, + 0x17d8, 0x17da, + 0x1800, 0x180a, + 0x1944, 0x1945, + 0x2010, 0x2027, + 0x2030, 0x2043, + 0x2045, 0x2051, + 0x2053, 0x2054, + 0x2057, 0x2057, + 0x207d, 0x207e, + 0x208d, 0x208e, + 0x2329, 0x232a, + 0x23b4, 0x23b6, + 0x2768, 0x2775, + 0x27e6, 0x27eb, + 0x2983, 0x2998, + 0x29d8, 0x29db, + 0x29fc, 0x29fd, + 0x3001, 0x3003, + 0x3008, 0x3011, + 0x3014, 0x301f, + 0x3030, 0x3030, + 0x303d, 0x303d, + 0x30a0, 0x30a0, + 0x30fb, 0x30fb, + 0xfd3e, 0xfd3f, + 0xfe30, 0xfe52, + 0xfe54, 0xfe61, + 0xfe63, 0xfe63, + 0xfe68, 0xfe68, + 0xfe6a, 0xfe6b, + 0xff01, 0xff03, + 0xff05, 0xff0a, + 0xff0c, 0xff0f, + 0xff1a, 0xff1b, + 0xff1f, 0xff20, + 0xff3b, 0xff3d, + 0xff3f, 0xff3f, + 0xff5b, 0xff5b, + 0xff5d, 0xff5d, + 0xff5f, 0xff65, + 0x10100, 0x10101, + 0x1039f, 0x1039f +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of CRPunct */ + +static const OnigCodePoint CRSpace[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 11, +#else + 4, +#endif + 0x0009, 0x000d, + 0x0020, 0x0020, + 0x0085, 0x0085, + 0x00a0, 0x00a0 +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x1680, 0x1680, + 0x180e, 0x180e, + 0x2000, 0x200a, + 0x2028, 0x2029, + 0x202f, 0x202f, + 0x205f, 0x205f, + 0x3000, 0x3000 +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of CRSpace */ + +static const OnigCodePoint CRUpper[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 421, +#else + 3, +#endif + 0x0041, 0x005a, + 0x00c0, 0x00d6, + 0x00d8, 0x00de +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x0100, 0x0100, + 0x0102, 0x0102, + 0x0104, 0x0104, + 0x0106, 0x0106, + 0x0108, 0x0108, + 0x010a, 0x010a, + 0x010c, 0x010c, + 0x010e, 0x010e, + 0x0110, 0x0110, + 0x0112, 0x0112, + 0x0114, 0x0114, + 0x0116, 0x0116, + 0x0118, 0x0118, + 0x011a, 0x011a, + 0x011c, 0x011c, + 0x011e, 0x011e, + 0x0120, 0x0120, + 0x0122, 0x0122, + 0x0124, 0x0124, + 0x0126, 0x0126, + 0x0128, 0x0128, + 0x012a, 0x012a, + 0x012c, 0x012c, + 0x012e, 0x012e, + 0x0130, 0x0130, + 0x0132, 0x0132, + 0x0134, 0x0134, + 0x0136, 0x0136, + 0x0139, 0x0139, + 0x013b, 0x013b, + 0x013d, 0x013d, + 0x013f, 0x013f, + 0x0141, 0x0141, + 0x0143, 0x0143, + 0x0145, 0x0145, + 0x0147, 0x0147, + 0x014a, 0x014a, + 0x014c, 0x014c, + 0x014e, 0x014e, + 0x0150, 0x0150, + 0x0152, 0x0152, + 0x0154, 0x0154, + 0x0156, 0x0156, + 0x0158, 0x0158, + 0x015a, 0x015a, + 0x015c, 0x015c, + 0x015e, 0x015e, + 0x0160, 0x0160, + 0x0162, 0x0162, + 0x0164, 0x0164, + 0x0166, 0x0166, + 0x0168, 0x0168, + 0x016a, 0x016a, + 0x016c, 0x016c, + 0x016e, 0x016e, + 0x0170, 0x0170, + 0x0172, 0x0172, + 0x0174, 0x0174, + 0x0176, 0x0176, + 0x0178, 0x0179, + 0x017b, 0x017b, + 0x017d, 0x017d, + 0x0181, 0x0182, + 0x0184, 0x0184, + 0x0186, 0x0187, + 0x0189, 0x018b, + 0x018e, 0x0191, + 0x0193, 0x0194, + 0x0196, 0x0198, + 0x019c, 0x019d, + 0x019f, 0x01a0, + 0x01a2, 0x01a2, + 0x01a4, 0x01a4, + 0x01a6, 0x01a7, + 0x01a9, 0x01a9, + 0x01ac, 0x01ac, + 0x01ae, 0x01af, + 0x01b1, 0x01b3, + 0x01b5, 0x01b5, + 0x01b7, 0x01b8, + 0x01bc, 0x01bc, + 0x01c4, 0x01c4, + 0x01c7, 0x01c7, + 0x01ca, 0x01ca, + 0x01cd, 0x01cd, + 0x01cf, 0x01cf, + 0x01d1, 0x01d1, + 0x01d3, 0x01d3, + 0x01d5, 0x01d5, + 0x01d7, 0x01d7, + 0x01d9, 0x01d9, + 0x01db, 0x01db, + 0x01de, 0x01de, + 0x01e0, 0x01e0, + 0x01e2, 0x01e2, + 0x01e4, 0x01e4, + 0x01e6, 0x01e6, + 0x01e8, 0x01e8, + 0x01ea, 0x01ea, + 0x01ec, 0x01ec, + 0x01ee, 0x01ee, + 0x01f1, 0x01f1, + 0x01f4, 0x01f4, + 0x01f6, 0x01f8, + 0x01fa, 0x01fa, + 0x01fc, 0x01fc, + 0x01fe, 0x01fe, + 0x0200, 0x0200, + 0x0202, 0x0202, + 0x0204, 0x0204, + 0x0206, 0x0206, + 0x0208, 0x0208, + 0x020a, 0x020a, + 0x020c, 0x020c, + 0x020e, 0x020e, + 0x0210, 0x0210, + 0x0212, 0x0212, + 0x0214, 0x0214, + 0x0216, 0x0216, + 0x0218, 0x0218, + 0x021a, 0x021a, + 0x021c, 0x021c, + 0x021e, 0x021e, + 0x0220, 0x0220, + 0x0222, 0x0222, + 0x0224, 0x0224, + 0x0226, 0x0226, + 0x0228, 0x0228, + 0x022a, 0x022a, + 0x022c, 0x022c, + 0x022e, 0x022e, + 0x0230, 0x0230, + 0x0232, 0x0232, + 0x0386, 0x0386, + 0x0388, 0x038a, + 0x038c, 0x038c, + 0x038e, 0x038f, + 0x0391, 0x03a1, + 0x03a3, 0x03ab, + 0x03d2, 0x03d4, + 0x03d8, 0x03d8, + 0x03da, 0x03da, + 0x03dc, 0x03dc, + 0x03de, 0x03de, + 0x03e0, 0x03e0, + 0x03e2, 0x03e2, + 0x03e4, 0x03e4, + 0x03e6, 0x03e6, + 0x03e8, 0x03e8, + 0x03ea, 0x03ea, + 0x03ec, 0x03ec, + 0x03ee, 0x03ee, + 0x03f4, 0x03f4, + 0x03f7, 0x03f7, + 0x03f9, 0x03fa, + 0x0400, 0x042f, + 0x0460, 0x0460, + 0x0462, 0x0462, + 0x0464, 0x0464, + 0x0466, 0x0466, + 0x0468, 0x0468, + 0x046a, 0x046a, + 0x046c, 0x046c, + 0x046e, 0x046e, + 0x0470, 0x0470, + 0x0472, 0x0472, + 0x0474, 0x0474, + 0x0476, 0x0476, + 0x0478, 0x0478, + 0x047a, 0x047a, + 0x047c, 0x047c, + 0x047e, 0x047e, + 0x0480, 0x0480, + 0x048a, 0x048a, + 0x048c, 0x048c, + 0x048e, 0x048e, + 0x0490, 0x0490, + 0x0492, 0x0492, + 0x0494, 0x0494, + 0x0496, 0x0496, + 0x0498, 0x0498, + 0x049a, 0x049a, + 0x049c, 0x049c, + 0x049e, 0x049e, + 0x04a0, 0x04a0, + 0x04a2, 0x04a2, + 0x04a4, 0x04a4, + 0x04a6, 0x04a6, + 0x04a8, 0x04a8, + 0x04aa, 0x04aa, + 0x04ac, 0x04ac, + 0x04ae, 0x04ae, + 0x04b0, 0x04b0, + 0x04b2, 0x04b2, + 0x04b4, 0x04b4, + 0x04b6, 0x04b6, + 0x04b8, 0x04b8, + 0x04ba, 0x04ba, + 0x04bc, 0x04bc, + 0x04be, 0x04be, + 0x04c0, 0x04c1, + 0x04c3, 0x04c3, + 0x04c5, 0x04c5, + 0x04c7, 0x04c7, + 0x04c9, 0x04c9, + 0x04cb, 0x04cb, + 0x04cd, 0x04cd, + 0x04d0, 0x04d0, + 0x04d2, 0x04d2, + 0x04d4, 0x04d4, + 0x04d6, 0x04d6, + 0x04d8, 0x04d8, + 0x04da, 0x04da, + 0x04dc, 0x04dc, + 0x04de, 0x04de, + 0x04e0, 0x04e0, + 0x04e2, 0x04e2, + 0x04e4, 0x04e4, + 0x04e6, 0x04e6, + 0x04e8, 0x04e8, + 0x04ea, 0x04ea, + 0x04ec, 0x04ec, + 0x04ee, 0x04ee, + 0x04f0, 0x04f0, + 0x04f2, 0x04f2, + 0x04f4, 0x04f4, + 0x04f8, 0x04f8, + 0x0500, 0x0500, + 0x0502, 0x0502, + 0x0504, 0x0504, + 0x0506, 0x0506, + 0x0508, 0x0508, + 0x050a, 0x050a, + 0x050c, 0x050c, + 0x050e, 0x050e, + 0x0531, 0x0556, + 0x10a0, 0x10c5, + 0x1e00, 0x1e00, + 0x1e02, 0x1e02, + 0x1e04, 0x1e04, + 0x1e06, 0x1e06, + 0x1e08, 0x1e08, + 0x1e0a, 0x1e0a, + 0x1e0c, 0x1e0c, + 0x1e0e, 0x1e0e, + 0x1e10, 0x1e10, + 0x1e12, 0x1e12, + 0x1e14, 0x1e14, + 0x1e16, 0x1e16, + 0x1e18, 0x1e18, + 0x1e1a, 0x1e1a, + 0x1e1c, 0x1e1c, + 0x1e1e, 0x1e1e, + 0x1e20, 0x1e20, + 0x1e22, 0x1e22, + 0x1e24, 0x1e24, + 0x1e26, 0x1e26, + 0x1e28, 0x1e28, + 0x1e2a, 0x1e2a, + 0x1e2c, 0x1e2c, + 0x1e2e, 0x1e2e, + 0x1e30, 0x1e30, + 0x1e32, 0x1e32, + 0x1e34, 0x1e34, + 0x1e36, 0x1e36, + 0x1e38, 0x1e38, + 0x1e3a, 0x1e3a, + 0x1e3c, 0x1e3c, + 0x1e3e, 0x1e3e, + 0x1e40, 0x1e40, + 0x1e42, 0x1e42, + 0x1e44, 0x1e44, + 0x1e46, 0x1e46, + 0x1e48, 0x1e48, + 0x1e4a, 0x1e4a, + 0x1e4c, 0x1e4c, + 0x1e4e, 0x1e4e, + 0x1e50, 0x1e50, + 0x1e52, 0x1e52, + 0x1e54, 0x1e54, + 0x1e56, 0x1e56, + 0x1e58, 0x1e58, + 0x1e5a, 0x1e5a, + 0x1e5c, 0x1e5c, + 0x1e5e, 0x1e5e, + 0x1e60, 0x1e60, + 0x1e62, 0x1e62, + 0x1e64, 0x1e64, + 0x1e66, 0x1e66, + 0x1e68, 0x1e68, + 0x1e6a, 0x1e6a, + 0x1e6c, 0x1e6c, + 0x1e6e, 0x1e6e, + 0x1e70, 0x1e70, + 0x1e72, 0x1e72, + 0x1e74, 0x1e74, + 0x1e76, 0x1e76, + 0x1e78, 0x1e78, + 0x1e7a, 0x1e7a, + 0x1e7c, 0x1e7c, + 0x1e7e, 0x1e7e, + 0x1e80, 0x1e80, + 0x1e82, 0x1e82, + 0x1e84, 0x1e84, + 0x1e86, 0x1e86, + 0x1e88, 0x1e88, + 0x1e8a, 0x1e8a, + 0x1e8c, 0x1e8c, + 0x1e8e, 0x1e8e, + 0x1e90, 0x1e90, + 0x1e92, 0x1e92, + 0x1e94, 0x1e94, + 0x1ea0, 0x1ea0, + 0x1ea2, 0x1ea2, + 0x1ea4, 0x1ea4, + 0x1ea6, 0x1ea6, + 0x1ea8, 0x1ea8, + 0x1eaa, 0x1eaa, + 0x1eac, 0x1eac, + 0x1eae, 0x1eae, + 0x1eb0, 0x1eb0, + 0x1eb2, 0x1eb2, + 0x1eb4, 0x1eb4, + 0x1eb6, 0x1eb6, + 0x1eb8, 0x1eb8, + 0x1eba, 0x1eba, + 0x1ebc, 0x1ebc, + 0x1ebe, 0x1ebe, + 0x1ec0, 0x1ec0, + 0x1ec2, 0x1ec2, + 0x1ec4, 0x1ec4, + 0x1ec6, 0x1ec6, + 0x1ec8, 0x1ec8, + 0x1eca, 0x1eca, + 0x1ecc, 0x1ecc, + 0x1ece, 0x1ece, + 0x1ed0, 0x1ed0, + 0x1ed2, 0x1ed2, + 0x1ed4, 0x1ed4, + 0x1ed6, 0x1ed6, + 0x1ed8, 0x1ed8, + 0x1eda, 0x1eda, + 0x1edc, 0x1edc, + 0x1ede, 0x1ede, + 0x1ee0, 0x1ee0, + 0x1ee2, 0x1ee2, + 0x1ee4, 0x1ee4, + 0x1ee6, 0x1ee6, + 0x1ee8, 0x1ee8, + 0x1eea, 0x1eea, + 0x1eec, 0x1eec, + 0x1eee, 0x1eee, + 0x1ef0, 0x1ef0, + 0x1ef2, 0x1ef2, + 0x1ef4, 0x1ef4, + 0x1ef6, 0x1ef6, + 0x1ef8, 0x1ef8, + 0x1f08, 0x1f0f, + 0x1f18, 0x1f1d, + 0x1f28, 0x1f2f, + 0x1f38, 0x1f3f, + 0x1f48, 0x1f4d, + 0x1f59, 0x1f59, + 0x1f5b, 0x1f5b, + 0x1f5d, 0x1f5d, + 0x1f5f, 0x1f5f, + 0x1f68, 0x1f6f, + 0x1fb8, 0x1fbb, + 0x1fc8, 0x1fcb, + 0x1fd8, 0x1fdb, + 0x1fe8, 0x1fec, + 0x1ff8, 0x1ffb, + 0x2102, 0x2102, + 0x2107, 0x2107, + 0x210b, 0x210d, + 0x2110, 0x2112, + 0x2115, 0x2115, + 0x2119, 0x211d, + 0x2124, 0x2124, + 0x2126, 0x2126, + 0x2128, 0x2128, + 0x212a, 0x212d, + 0x2130, 0x2131, + 0x2133, 0x2133, + 0x213e, 0x213f, + 0x2145, 0x2145, + 0xff21, 0xff3a, + 0x10400, 0x10427, + 0x1d400, 0x1d419, + 0x1d434, 0x1d44d, + 0x1d468, 0x1d481, + 0x1d49c, 0x1d49c, + 0x1d49e, 0x1d49f, + 0x1d4a2, 0x1d4a2, + 0x1d4a5, 0x1d4a6, + 0x1d4a9, 0x1d4ac, + 0x1d4ae, 0x1d4b5, + 0x1d4d0, 0x1d4e9, + 0x1d504, 0x1d505, + 0x1d507, 0x1d50a, + 0x1d50d, 0x1d514, + 0x1d516, 0x1d51c, + 0x1d538, 0x1d539, + 0x1d53b, 0x1d53e, + 0x1d540, 0x1d544, + 0x1d546, 0x1d546, + 0x1d54a, 0x1d550, + 0x1d56c, 0x1d585, + 0x1d5a0, 0x1d5b9, + 0x1d5d4, 0x1d5ed, + 0x1d608, 0x1d621, + 0x1d63c, 0x1d655, + 0x1d670, 0x1d689, + 0x1d6a8, 0x1d6c0, + 0x1d6e2, 0x1d6fa, + 0x1d71c, 0x1d734, + 0x1d756, 0x1d76e, + 0x1d790, 0x1d7a8 +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of CRUpper */ + +static const OnigCodePoint CRXDigit[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 3, +#else + 3, +#endif + 0x0030, 0x0039, + 0x0041, 0x0046, + 0x0061, 0x0066 +}; + +static const OnigCodePoint CRASCII[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 1, +#else + 1, +#endif + 0x0000, 0x007f +}; + +static const OnigCodePoint CRWord[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 436, +#else + 12, +#endif + 0x0030, 0x0039, + 0x0041, 0x005a, + 0x005f, 0x005f, + 0x0061, 0x007a, + 0x00aa, 0x00aa, + 0x00b2, 0x00b3, + 0x00b5, 0x00b5, + 0x00b9, 0x00ba, + 0x00bc, 0x00be, + 0x00c0, 0x00d6, + 0x00d8, 0x00f6, +#ifndef USE_UNICODE_FULL_RANGE_CTYPE + 0x00f8, 0x7fffffff +#else /* not USE_UNICODE_FULL_RANGE_CTYPE */ + 0x00f8, 0x0236, + 0x0250, 0x02c1, + 0x02c6, 0x02d1, + 0x02e0, 0x02e4, + 0x02ee, 0x02ee, + 0x0300, 0x0357, + 0x035d, 0x036f, + 0x037a, 0x037a, + 0x0386, 0x0386, + 0x0388, 0x038a, + 0x038c, 0x038c, + 0x038e, 0x03a1, + 0x03a3, 0x03ce, + 0x03d0, 0x03f5, + 0x03f7, 0x03fb, + 0x0400, 0x0481, + 0x0483, 0x0486, + 0x0488, 0x04ce, + 0x04d0, 0x04f5, + 0x04f8, 0x04f9, + 0x0500, 0x050f, + 0x0531, 0x0556, + 0x0559, 0x0559, + 0x0561, 0x0587, + 0x0591, 0x05a1, + 0x05a3, 0x05b9, + 0x05bb, 0x05bd, + 0x05bf, 0x05bf, + 0x05c1, 0x05c2, + 0x05c4, 0x05c4, + 0x05d0, 0x05ea, + 0x05f0, 0x05f2, + 0x0610, 0x0615, + 0x0621, 0x063a, + 0x0640, 0x0658, + 0x0660, 0x0669, + 0x066e, 0x06d3, + 0x06d5, 0x06dc, + 0x06de, 0x06e8, + 0x06ea, 0x06fc, + 0x06ff, 0x06ff, + 0x0710, 0x074a, + 0x074d, 0x074f, + 0x0780, 0x07b1, + 0x0901, 0x0939, + 0x093c, 0x094d, + 0x0950, 0x0954, + 0x0958, 0x0963, + 0x0966, 0x096f, + 0x0981, 0x0983, + 0x0985, 0x098c, + 0x098f, 0x0990, + 0x0993, 0x09a8, + 0x09aa, 0x09b0, + 0x09b2, 0x09b2, + 0x09b6, 0x09b9, + 0x09bc, 0x09c4, + 0x09c7, 0x09c8, + 0x09cb, 0x09cd, + 0x09d7, 0x09d7, + 0x09dc, 0x09dd, + 0x09df, 0x09e3, + 0x09e6, 0x09f1, + 0x09f4, 0x09f9, + 0x0a01, 0x0a03, + 0x0a05, 0x0a0a, + 0x0a0f, 0x0a10, + 0x0a13, 0x0a28, + 0x0a2a, 0x0a30, + 0x0a32, 0x0a33, + 0x0a35, 0x0a36, + 0x0a38, 0x0a39, + 0x0a3c, 0x0a3c, + 0x0a3e, 0x0a42, + 0x0a47, 0x0a48, + 0x0a4b, 0x0a4d, + 0x0a59, 0x0a5c, + 0x0a5e, 0x0a5e, + 0x0a66, 0x0a74, + 0x0a81, 0x0a83, + 0x0a85, 0x0a8d, + 0x0a8f, 0x0a91, + 0x0a93, 0x0aa8, + 0x0aaa, 0x0ab0, + 0x0ab2, 0x0ab3, + 0x0ab5, 0x0ab9, + 0x0abc, 0x0ac5, + 0x0ac7, 0x0ac9, + 0x0acb, 0x0acd, + 0x0ad0, 0x0ad0, + 0x0ae0, 0x0ae3, + 0x0ae6, 0x0aef, + 0x0b01, 0x0b03, + 0x0b05, 0x0b0c, + 0x0b0f, 0x0b10, + 0x0b13, 0x0b28, + 0x0b2a, 0x0b30, + 0x0b32, 0x0b33, + 0x0b35, 0x0b39, + 0x0b3c, 0x0b43, + 0x0b47, 0x0b48, + 0x0b4b, 0x0b4d, + 0x0b56, 0x0b57, + 0x0b5c, 0x0b5d, + 0x0b5f, 0x0b61, + 0x0b66, 0x0b6f, + 0x0b71, 0x0b71, + 0x0b82, 0x0b83, + 0x0b85, 0x0b8a, + 0x0b8e, 0x0b90, + 0x0b92, 0x0b95, + 0x0b99, 0x0b9a, + 0x0b9c, 0x0b9c, + 0x0b9e, 0x0b9f, + 0x0ba3, 0x0ba4, + 0x0ba8, 0x0baa, + 0x0bae, 0x0bb5, + 0x0bb7, 0x0bb9, + 0x0bbe, 0x0bc2, + 0x0bc6, 0x0bc8, + 0x0bca, 0x0bcd, + 0x0bd7, 0x0bd7, + 0x0be7, 0x0bf2, + 0x0c01, 0x0c03, + 0x0c05, 0x0c0c, + 0x0c0e, 0x0c10, + 0x0c12, 0x0c28, + 0x0c2a, 0x0c33, + 0x0c35, 0x0c39, + 0x0c3e, 0x0c44, + 0x0c46, 0x0c48, + 0x0c4a, 0x0c4d, + 0x0c55, 0x0c56, + 0x0c60, 0x0c61, + 0x0c66, 0x0c6f, + 0x0c82, 0x0c83, + 0x0c85, 0x0c8c, + 0x0c8e, 0x0c90, + 0x0c92, 0x0ca8, + 0x0caa, 0x0cb3, + 0x0cb5, 0x0cb9, + 0x0cbc, 0x0cc4, + 0x0cc6, 0x0cc8, + 0x0cca, 0x0ccd, + 0x0cd5, 0x0cd6, + 0x0cde, 0x0cde, + 0x0ce0, 0x0ce1, + 0x0ce6, 0x0cef, + 0x0d02, 0x0d03, + 0x0d05, 0x0d0c, + 0x0d0e, 0x0d10, + 0x0d12, 0x0d28, + 0x0d2a, 0x0d39, + 0x0d3e, 0x0d43, + 0x0d46, 0x0d48, + 0x0d4a, 0x0d4d, + 0x0d57, 0x0d57, + 0x0d60, 0x0d61, + 0x0d66, 0x0d6f, + 0x0d82, 0x0d83, + 0x0d85, 0x0d96, + 0x0d9a, 0x0db1, + 0x0db3, 0x0dbb, + 0x0dbd, 0x0dbd, + 0x0dc0, 0x0dc6, + 0x0dca, 0x0dca, + 0x0dcf, 0x0dd4, + 0x0dd6, 0x0dd6, + 0x0dd8, 0x0ddf, + 0x0df2, 0x0df3, + 0x0e01, 0x0e3a, + 0x0e40, 0x0e4e, + 0x0e50, 0x0e59, + 0x0e81, 0x0e82, + 0x0e84, 0x0e84, + 0x0e87, 0x0e88, + 0x0e8a, 0x0e8a, + 0x0e8d, 0x0e8d, + 0x0e94, 0x0e97, + 0x0e99, 0x0e9f, + 0x0ea1, 0x0ea3, + 0x0ea5, 0x0ea5, + 0x0ea7, 0x0ea7, + 0x0eaa, 0x0eab, + 0x0ead, 0x0eb9, + 0x0ebb, 0x0ebd, + 0x0ec0, 0x0ec4, + 0x0ec6, 0x0ec6, + 0x0ec8, 0x0ecd, + 0x0ed0, 0x0ed9, + 0x0edc, 0x0edd, + 0x0f00, 0x0f00, + 0x0f18, 0x0f19, + 0x0f20, 0x0f33, + 0x0f35, 0x0f35, + 0x0f37, 0x0f37, + 0x0f39, 0x0f39, + 0x0f3e, 0x0f47, + 0x0f49, 0x0f6a, + 0x0f71, 0x0f84, + 0x0f86, 0x0f8b, + 0x0f90, 0x0f97, + 0x0f99, 0x0fbc, + 0x0fc6, 0x0fc6, + 0x1000, 0x1021, + 0x1023, 0x1027, + 0x1029, 0x102a, + 0x102c, 0x1032, + 0x1036, 0x1039, + 0x1040, 0x1049, + 0x1050, 0x1059, + 0x10a0, 0x10c5, + 0x10d0, 0x10f8, + 0x1100, 0x1159, + 0x115f, 0x11a2, + 0x11a8, 0x11f9, + 0x1200, 0x1206, + 0x1208, 0x1246, + 0x1248, 0x1248, + 0x124a, 0x124d, + 0x1250, 0x1256, + 0x1258, 0x1258, + 0x125a, 0x125d, + 0x1260, 0x1286, + 0x1288, 0x1288, + 0x128a, 0x128d, + 0x1290, 0x12ae, + 0x12b0, 0x12b0, + 0x12b2, 0x12b5, + 0x12b8, 0x12be, + 0x12c0, 0x12c0, + 0x12c2, 0x12c5, + 0x12c8, 0x12ce, + 0x12d0, 0x12d6, + 0x12d8, 0x12ee, + 0x12f0, 0x130e, + 0x1310, 0x1310, + 0x1312, 0x1315, + 0x1318, 0x131e, + 0x1320, 0x1346, + 0x1348, 0x135a, + 0x1369, 0x137c, + 0x13a0, 0x13f4, + 0x1401, 0x166c, + 0x166f, 0x1676, + 0x1681, 0x169a, + 0x16a0, 0x16ea, + 0x16ee, 0x16f0, + 0x1700, 0x170c, + 0x170e, 0x1714, + 0x1720, 0x1734, + 0x1740, 0x1753, + 0x1760, 0x176c, + 0x176e, 0x1770, + 0x1772, 0x1773, + 0x1780, 0x17b3, + 0x17b6, 0x17d3, + 0x17d7, 0x17d7, + 0x17dc, 0x17dd, + 0x17e0, 0x17e9, + 0x17f0, 0x17f9, + 0x180b, 0x180d, + 0x1810, 0x1819, + 0x1820, 0x1877, + 0x1880, 0x18a9, + 0x1900, 0x191c, + 0x1920, 0x192b, + 0x1930, 0x193b, + 0x1946, 0x196d, + 0x1970, 0x1974, + 0x1d00, 0x1d6b, + 0x1e00, 0x1e9b, + 0x1ea0, 0x1ef9, + 0x1f00, 0x1f15, + 0x1f18, 0x1f1d, + 0x1f20, 0x1f45, + 0x1f48, 0x1f4d, + 0x1f50, 0x1f57, + 0x1f59, 0x1f59, + 0x1f5b, 0x1f5b, + 0x1f5d, 0x1f5d, + 0x1f5f, 0x1f7d, + 0x1f80, 0x1fb4, + 0x1fb6, 0x1fbc, + 0x1fbe, 0x1fbe, + 0x1fc2, 0x1fc4, + 0x1fc6, 0x1fcc, + 0x1fd0, 0x1fd3, + 0x1fd6, 0x1fdb, + 0x1fe0, 0x1fec, + 0x1ff2, 0x1ff4, + 0x1ff6, 0x1ffc, + 0x203f, 0x2040, + 0x2054, 0x2054, + 0x2070, 0x2071, + 0x2074, 0x2079, + 0x207f, 0x2089, + 0x20d0, 0x20ea, + 0x2102, 0x2102, + 0x2107, 0x2107, + 0x210a, 0x2113, + 0x2115, 0x2115, + 0x2119, 0x211d, + 0x2124, 0x2124, + 0x2126, 0x2126, + 0x2128, 0x2128, + 0x212a, 0x212d, + 0x212f, 0x2131, + 0x2133, 0x2139, + 0x213d, 0x213f, + 0x2145, 0x2149, + 0x2153, 0x2183, + 0x2460, 0x249b, + 0x24ea, 0x24ff, + 0x2776, 0x2793, + 0x3005, 0x3007, + 0x3021, 0x302f, + 0x3031, 0x3035, + 0x3038, 0x303c, + 0x3041, 0x3096, + 0x3099, 0x309a, + 0x309d, 0x309f, + 0x30a1, 0x30ff, + 0x3105, 0x312c, + 0x3131, 0x318e, + 0x3192, 0x3195, + 0x31a0, 0x31b7, + 0x31f0, 0x31ff, + 0x3220, 0x3229, + 0x3251, 0x325f, + 0x3280, 0x3289, + 0x32b1, 0x32bf, + 0x3400, 0x4db5, + 0x4e00, 0x9fa5, + 0xa000, 0xa48c, + 0xac00, 0xd7a3, + 0xf900, 0xfa2d, + 0xfa30, 0xfa6a, + 0xfb00, 0xfb06, + 0xfb13, 0xfb17, + 0xfb1d, 0xfb28, + 0xfb2a, 0xfb36, + 0xfb38, 0xfb3c, + 0xfb3e, 0xfb3e, + 0xfb40, 0xfb41, + 0xfb43, 0xfb44, + 0xfb46, 0xfbb1, + 0xfbd3, 0xfd3d, + 0xfd50, 0xfd8f, + 0xfd92, 0xfdc7, + 0xfdf0, 0xfdfb, + 0xfe00, 0xfe0f, + 0xfe20, 0xfe23, + 0xfe33, 0xfe34, + 0xfe4d, 0xfe4f, + 0xfe70, 0xfe74, + 0xfe76, 0xfefc, + 0xff10, 0xff19, + 0xff21, 0xff3a, + 0xff3f, 0xff3f, + 0xff41, 0xff5a, + 0xff65, 0xffbe, + 0xffc2, 0xffc7, + 0xffca, 0xffcf, + 0xffd2, 0xffd7, + 0xffda, 0xffdc, + 0x10000, 0x1000b, + 0x1000d, 0x10026, + 0x10028, 0x1003a, + 0x1003c, 0x1003d, + 0x1003f, 0x1004d, + 0x10050, 0x1005d, + 0x10080, 0x100fa, + 0x10107, 0x10133, + 0x10300, 0x1031e, + 0x10320, 0x10323, + 0x10330, 0x1034a, + 0x10380, 0x1039d, + 0x10400, 0x1049d, + 0x104a0, 0x104a9, + 0x10800, 0x10805, + 0x10808, 0x10808, + 0x1080a, 0x10835, + 0x10837, 0x10838, + 0x1083c, 0x1083c, + 0x1083f, 0x1083f, + 0x1d165, 0x1d169, + 0x1d16d, 0x1d172, + 0x1d17b, 0x1d182, + 0x1d185, 0x1d18b, + 0x1d1aa, 0x1d1ad, + 0x1d400, 0x1d454, + 0x1d456, 0x1d49c, + 0x1d49e, 0x1d49f, + 0x1d4a2, 0x1d4a2, + 0x1d4a5, 0x1d4a6, + 0x1d4a9, 0x1d4ac, + 0x1d4ae, 0x1d4b9, + 0x1d4bb, 0x1d4bb, + 0x1d4bd, 0x1d4c3, + 0x1d4c5, 0x1d505, + 0x1d507, 0x1d50a, + 0x1d50d, 0x1d514, + 0x1d516, 0x1d51c, + 0x1d51e, 0x1d539, + 0x1d53b, 0x1d53e, + 0x1d540, 0x1d544, + 0x1d546, 0x1d546, + 0x1d54a, 0x1d550, + 0x1d552, 0x1d6a3, + 0x1d6a8, 0x1d6c0, + 0x1d6c2, 0x1d6da, + 0x1d6dc, 0x1d6fa, + 0x1d6fc, 0x1d714, + 0x1d716, 0x1d734, + 0x1d736, 0x1d74e, + 0x1d750, 0x1d76e, + 0x1d770, 0x1d788, + 0x1d78a, 0x1d7a8, + 0x1d7aa, 0x1d7c2, + 0x1d7c4, 0x1d7c9, + 0x1d7ce, 0x1d7ff, + 0x20000, 0x2a6d6, + 0x2f800, 0x2fa1d, + 0xe0100, 0xe01ef +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of CRWord */ + + +extern int +onigenc_unicode_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ + if (code < 256) { + return ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code, ctype); + } + +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + + switch (ctype) { + case ONIGENC_CTYPE_ALPHA: + return onig_is_in_code_range((UChar* )CRAlpha, code); + break; + case ONIGENC_CTYPE_BLANK: + return onig_is_in_code_range((UChar* )CRBlank, code); + break; + case ONIGENC_CTYPE_CNTRL: + return onig_is_in_code_range((UChar* )CRCntrl, code); + break; + case ONIGENC_CTYPE_DIGIT: + return onig_is_in_code_range((UChar* )CRDigit, code); + break; + case ONIGENC_CTYPE_GRAPH: + return onig_is_in_code_range((UChar* )CRGraph, code); + break; + case ONIGENC_CTYPE_LOWER: + return onig_is_in_code_range((UChar* )CRLower, code); + break; + case ONIGENC_CTYPE_PRINT: + return onig_is_in_code_range((UChar* )CRPrint, code); + break; + case ONIGENC_CTYPE_PUNCT: + return onig_is_in_code_range((UChar* )CRPunct, code); + break; + case ONIGENC_CTYPE_SPACE: + return onig_is_in_code_range((UChar* )CRSpace, code); + break; + case ONIGENC_CTYPE_UPPER: + return onig_is_in_code_range((UChar* )CRUpper, code); + break; + case ONIGENC_CTYPE_XDIGIT: + return FALSE; + break; + case ONIGENC_CTYPE_WORD: + return onig_is_in_code_range((UChar* )CRWord, code); + break; + case ONIGENC_CTYPE_ASCII: + return FALSE; + break; + case ONIGENC_CTYPE_ALNUM: + return onig_is_in_code_range((UChar* )CRAlnum, code); + break; + case ONIGENC_CTYPE_NEWLINE: + return FALSE; + break; + + default: + return ONIGENCERR_TYPE_BUG; + break; + } + +#else + + if ((ctype & ONIGENC_CTYPE_WORD) != 0) { + return TRUE; + } + return FALSE; +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +} + +extern int +onigenc_unicode_get_ctype_code_range(int ctype, + const OnigCodePoint* sbr[], const OnigCodePoint* mbr[]) +{ + static const OnigCodePoint EmptyRange[] = { 0 }; + +#define CR_SET(list) do { \ + *mbr = list; \ +} while (0) + + *sbr = EmptyRange; + + switch (ctype) { + case ONIGENC_CTYPE_ALPHA: + CR_SET(CRAlpha); + break; + case ONIGENC_CTYPE_BLANK: + CR_SET(CRBlank); + break; + case ONIGENC_CTYPE_CNTRL: + CR_SET(CRCntrl); + break; + case ONIGENC_CTYPE_DIGIT: + CR_SET(CRDigit); + break; + case ONIGENC_CTYPE_GRAPH: + CR_SET(CRGraph); + break; + case ONIGENC_CTYPE_LOWER: + CR_SET(CRLower); + break; + case ONIGENC_CTYPE_PRINT: + CR_SET(CRPrint); + break; + case ONIGENC_CTYPE_PUNCT: + CR_SET(CRPunct); + break; + case ONIGENC_CTYPE_SPACE: + CR_SET(CRSpace); + break; + case ONIGENC_CTYPE_UPPER: + CR_SET(CRUpper); + break; + case ONIGENC_CTYPE_XDIGIT: + CR_SET(CRXDigit); + break; + case ONIGENC_CTYPE_WORD: + CR_SET(CRWord); + break; + case ONIGENC_CTYPE_ASCII: + CR_SET(CRASCII); + break; + case ONIGENC_CTYPE_ALNUM: + CR_SET(CRAlnum); + break; + + default: + return ONIGENCERR_TYPE_BUG; + break; + } + + return 0; +} diff --git a/ext/mbstring/oniguruma/enc/utf16_be.c b/ext/mbstring/oniguruma/enc/utf16_be.c new file mode 100644 index 0000000..6ab80a6 --- /dev/null +++ b/ext/mbstring/oniguruma/enc/utf16_be.c @@ -0,0 +1,232 @@ +/********************************************************************** + utf16_be.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define UTF16_IS_SURROGATE_FIRST(c) (c >= 0xd8 && c <= 0xdb) +#define UTF16_IS_SURROGATE_SECOND(c) (c >= 0xdc && c <= 0xdf) + +static const int EncLen_UTF16[] = { + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +}; + +static int +utf16be_mbc_enc_len(const UChar* p) +{ + return EncLen_UTF16[*p]; +} + +static int +utf16be_is_mbc_newline(const UChar* p, const UChar* end) +{ + if (p + 1 < end) { + if (*(p+1) == 0x0a && *p == 0x00) + return 1; +#ifdef USE_UNICODE_ALL_LINE_TERMINATORS + if ((*(p+1) == 0x0d || *(p+1) == 0x85) && *p == 0x00) + return 1; + if (*p == 0x20 && (*(p+1) == 0x29 || *(p+1) == 0x28)) + return 1; +#endif + } + return 0; +} + +static OnigCodePoint +utf16be_mbc_to_code(const UChar* p, const UChar* end) +{ + OnigCodePoint code; + + if (UTF16_IS_SURROGATE_FIRST(*p)) { + code = ((((p[0] - 0xd8) << 2) + ((p[1] & 0xc0) >> 6) + 1) << 16) + + ((((p[1] & 0x3f) << 2) + (p[2] - 0xdc)) << 8) + + p[3]; + } + else { + code = p[0] * 256 + p[1]; + } + return code; +} + +static int +utf16be_code_to_mbclen(OnigCodePoint code) +{ + return (code > 0xffff ? 4 : 2); +} + +static int +utf16be_code_to_mbc(OnigCodePoint code, UChar *buf) +{ + UChar* p = buf; + + if (code > 0xffff) { + unsigned int plane, high; + + plane = code >> 16; + *p++ = (plane >> 2) + 0xd8; + high = (code & 0xff00) >> 8; + *p++ = ((plane & 0x03) << 6) + (high >> 2); + *p++ = (high & 0x02) + 0xdc; + *p = (UChar )(code & 0xff); + return 4; + } + else { + *p++ = (UChar )((code & 0xff00) >> 8); + *p++ = (UChar )(code & 0xff); + return 2; + } +} + +static int +utf16be_mbc_to_normalize(OnigAmbigType flag, const UChar** pp, const UChar* end, + UChar* lower) +{ + const UChar* p = *pp; + + if (*p == 0) { + p++; + *lower++ = '\0'; + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + *lower = ONIGENC_ISO_8859_1_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + + (*pp) += 2; + return 2; /* return byte length of converted char to lower */ + } + else { + int len; + len = EncLen_UTF16[*p]; + if (lower != p) { + int i; + for (i = 0; i < len; i++) { + *lower++ = *p++; + } + } + (*pp) += len; + return len; /* return byte length of converted char to lower */ + } +} + +static int +utf16be_is_mbc_ambiguous(OnigAmbigType flag, const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + (*pp) += EncLen_UTF16[*p]; + + if (*p == 0) { + int c, v; + + p++; + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + c = *p; + v = ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(c, + (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER)); + + if ((v | ONIGENC_CTYPE_LOWER) != 0) { + /* 0xaa, 0xb5, 0xba are lower case letter, but can't convert. */ + if (c >= 0xaa && c <= 0xba) + return FALSE; + else + return TRUE; + } + return (v != 0 ? TRUE : FALSE); + } + } + + return FALSE; +} + +static UChar* +utf16be_left_adjust_char_head(const UChar* start, const UChar* s) +{ + if (s <= start) return (UChar* )s; + + if ((s - start) % 2 == 1) { + s--; + } + + if (UTF16_IS_SURROGATE_SECOND(*s) && s > start + 1) + s -= 2; + + return (UChar* )s; +} + +OnigEncodingType OnigEncodingUTF16_BE = { + utf16be_mbc_enc_len, + "UTF-16BE", /* name */ + 4, /* max byte length */ + 2, /* min byte length */ + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + utf16be_is_mbc_newline, + utf16be_mbc_to_code, + utf16be_code_to_mbclen, + utf16be_code_to_mbc, + utf16be_mbc_to_normalize, + utf16be_is_mbc_ambiguous, + onigenc_iso_8859_1_get_all_pair_ambig_codes, + onigenc_ess_tsett_get_all_comp_ambig_codes, + onigenc_unicode_is_code_ctype, + onigenc_unicode_get_ctype_code_range, + utf16be_left_adjust_char_head, + onigenc_always_false_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/utf16_le.c b/ext/mbstring/oniguruma/enc/utf16_le.c new file mode 100644 index 0000000..2248e49 --- /dev/null +++ b/ext/mbstring/oniguruma/enc/utf16_le.c @@ -0,0 +1,230 @@ +/********************************************************************** + utf16_le.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define UTF16_IS_SURROGATE_FIRST(c) (c >= 0xd8 && c <= 0xdb) +#define UTF16_IS_SURROGATE_SECOND(c) (c >= 0xdc && c <= 0xdf) + +static const int EncLen_UTF16[] = { + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +}; + +static int +utf16le_code_to_mbclen(OnigCodePoint code) +{ + return (code > 0xffff ? 4 : 2); +} + +static int +utf16le_mbc_enc_len(const UChar* p) +{ + return EncLen_UTF16[*(p+1)]; +} + +static int +utf16le_is_mbc_newline(const UChar* p, const UChar* end) +{ + if (p + 1 < end) { + if (*p == 0x0a && *(p+1) == 0x00) + return 1; +#ifdef USE_UNICODE_ALL_LINE_TERMINATORS + if ((*p == 0x0d || *p == 0x85) && *(p+1) == 0x00) + return 1; + if (*(p+1) == 0x20 && (*p == 0x29 || *p == 0x28)) + return 1; +#endif + } + return 0; +} + +static OnigCodePoint +utf16le_mbc_to_code(const UChar* p, const UChar* end) +{ + OnigCodePoint code; + UChar c0 = *p; + UChar c1 = *(p+1); + + if (UTF16_IS_SURROGATE_FIRST(c1)) { + code = ((((c1 - 0xd8) << 2) + ((c0 & 0xc0) >> 6) + 1) << 16) + + ((((c0 & 0x3f) << 2) + (p[3] - 0xdc)) << 8) + + p[2]; + } + else { + code = c1 * 256 + p[0]; + } + return code; +} + +static int +utf16le_code_to_mbc(OnigCodePoint code, UChar *buf) +{ + UChar* p = buf; + + if (code > 0xffff) { + unsigned int plane, high; + + plane = code >> 16; + high = (code & 0xff00) >> 8; + + *p++ = ((plane & 0x03) << 6) + (high >> 2); + *p++ = (plane >> 2) + 0xd8; + *p++ = (UChar )(code & 0xff); + *p = (high & 0x02) + 0xdc; + return 4; + } + else { + *p++ = (UChar )(code & 0xff); + *p++ = (UChar )((code & 0xff00) >> 8); + return 2; + } +} + +static int +utf16le_mbc_to_normalize(OnigAmbigType flag, const UChar** pp, const UChar* end, + UChar* lower) +{ + const UChar* p = *pp; + + if (*(p+1) == 0) { + *(lower+1) = '\0'; + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + *lower = ONIGENC_ISO_8859_1_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + (*pp) += 2; + return 2; /* return byte length of converted char to lower */ + } + else { + int len = EncLen_UTF16[*(p+1)]; + if (lower != p) { + int i; + for (i = 0; i < len; i++) { + *lower++ = *p++; + } + } + (*pp) += len; + return len; /* return byte length of converted char to lower */ + } +} + +static int +utf16le_is_mbc_ambiguous(OnigAmbigType flag, const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + (*pp) += EncLen_UTF16[*(p+1)]; + + if (*(p+1) == 0) { + int c, v; + + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + c = *p; + v = ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(c, + (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER)); + if ((v | ONIGENC_CTYPE_LOWER) != 0) { + /* 0xaa, 0xb5, 0xba are lower case letter, but can't convert. */ + if (c >= 0xaa && c <= 0xba) + return FALSE; + else + return TRUE; + } + return (v != 0 ? TRUE : FALSE); + } + } + + return FALSE; +} + +static UChar* +utf16le_left_adjust_char_head(const UChar* start, const UChar* s) +{ + if (s <= start) return (UChar* )s; + + if ((s - start) % 2 == 1) { + s--; + } + + if (UTF16_IS_SURROGATE_SECOND(*(s+1)) && s > start + 1) + s -= 2; + + return (UChar* )s; +} + +OnigEncodingType OnigEncodingUTF16_LE = { + utf16le_mbc_enc_len, + "UTF-16LE", /* name */ + 4, /* max byte length */ + 2, /* min byte length */ + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + utf16le_is_mbc_newline, + utf16le_mbc_to_code, + utf16le_code_to_mbclen, + utf16le_code_to_mbc, + utf16le_mbc_to_normalize, + utf16le_is_mbc_ambiguous, + onigenc_iso_8859_1_get_all_pair_ambig_codes, + onigenc_ess_tsett_get_all_comp_ambig_codes, + onigenc_unicode_is_code_ctype, + onigenc_unicode_get_ctype_code_range, + utf16le_left_adjust_char_head, + onigenc_always_false_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/utf32_be.c b/ext/mbstring/oniguruma/enc/utf32_be.c new file mode 100644 index 0000000..75133ca --- /dev/null +++ b/ext/mbstring/oniguruma/enc/utf32_be.c @@ -0,0 +1,187 @@ +/********************************************************************** + utf32_be.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +static int +utf32be_mbc_enc_len(const UChar* p) +{ + return 4; +} + +static int +utf32be_is_mbc_newline(const UChar* p, const UChar* end) +{ + if (p + 3 < end) { + if (*(p+3) == 0x0a && *(p+2) == 0 && *(p+1) == 0 && *p == 0) + return 1; +#ifdef USE_UNICODE_ALL_LINE_TERMINATORS + if ((*(p+3) == 0x0d || *(p+3) == 0x85) + && *(p+2) == 0 && *(p+1) == 0 && *p == 0x00) + return 1; + if (*(p+2) == 0x20 && (*(p+3) == 0x29 || *(p+3) == 0x28) + && *(p+1) == 0 && *p == 0) + return 1; +#endif + } + return 0; +} + +static OnigCodePoint +utf32be_mbc_to_code(const UChar* p, const UChar* end) +{ + return (OnigCodePoint )(((p[0] * 256 + p[1]) * 256 + p[2]) * 256 + p[3]); +} + +static int +utf32be_code_to_mbclen(OnigCodePoint code) +{ + return 4; +} + +static int +utf32be_code_to_mbc(OnigCodePoint code, UChar *buf) +{ + UChar* p = buf; + + *p++ = (UChar )((code & 0xff000000) >>24); + *p++ = (UChar )((code & 0xff0000) >>16); + *p++ = (UChar )((code & 0xff00) >> 8); + *p++ = (UChar ) (code & 0xff); + return 4; +} + +static int +utf32be_mbc_to_normalize(OnigAmbigType flag, const UChar** pp, const UChar* end, + UChar* lower) +{ + const UChar* p = *pp; + + if (*(p+2) == 0 && *(p+1) == 0 && *p == 0) { + p += 3; + *lower++ = '\0'; + *lower++ = '\0'; + *lower++ = '\0'; + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + *lower = ONIGENC_ISO_8859_1_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + + (*pp) += 4; + return 4; /* return byte length of converted char to lower */ + } + else { + int len = 4; + if (lower != p) { + int i; + for (i = 0; i < len; i++) { + *lower++ = *p++; + } + } + (*pp) += len; + return len; /* return byte length of converted char to lower */ + } +} + +static int +utf32be_is_mbc_ambiguous(OnigAmbigType flag, const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + (*pp) += 4; + + if (*(p+2) == 0 && *(p+1) == 0 && *p == 0) { + int c, v; + + p += 3; + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + c = *p; + v = ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(c, + (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER)); + if ((v | ONIGENC_CTYPE_LOWER) != 0) { + /* 0xaa, 0xb5, 0xba are lower case letter, but can't convert. */ + if (c >= 0xaa && c <= 0xba) + return FALSE; + else + return TRUE; + } + return (v != 0 ? TRUE : FALSE); + } + } + + return FALSE; +} + +static UChar* +utf32be_left_adjust_char_head(const UChar* start, const UChar* s) +{ + int rem; + + if (s <= start) return (UChar* )s; + + rem = (s - start) % 4; + return (UChar* )(s - rem); +} + +OnigEncodingType OnigEncodingUTF32_BE = { + utf32be_mbc_enc_len, + "UTF-32BE", /* name */ + 4, /* max byte length */ + 4, /* min byte length */ + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + utf32be_is_mbc_newline, + utf32be_mbc_to_code, + utf32be_code_to_mbclen, + utf32be_code_to_mbc, + utf32be_mbc_to_normalize, + utf32be_is_mbc_ambiguous, + onigenc_iso_8859_1_get_all_pair_ambig_codes, + onigenc_ess_tsett_get_all_comp_ambig_codes, + onigenc_unicode_is_code_ctype, + onigenc_unicode_get_ctype_code_range, + utf32be_left_adjust_char_head, + onigenc_always_false_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/utf32_le.c b/ext/mbstring/oniguruma/enc/utf32_le.c new file mode 100644 index 0000000..21dca10 --- /dev/null +++ b/ext/mbstring/oniguruma/enc/utf32_le.c @@ -0,0 +1,185 @@ +/********************************************************************** + utf32_le.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +static int +utf32le_mbc_enc_len(const UChar* p) +{ + return 4; +} + +static int +utf32le_is_mbc_newline(const UChar* p, const UChar* end) +{ + if (p + 3 < end) { + if (*p == 0x0a && *(p+1) == 0 && *(p+2) == 0 && *(p+3) == 0) + return 1; +#ifdef USE_UNICODE_ALL_LINE_TERMINATORS + if ((*p == 0x0d || *p == 0x85) && *(p+1) == 0x00 + && (p+2) == 0x00 && *(p+3) == 0x00) + return 1; + if (*(p+1) == 0x20 && (*p == 0x29 || *p == 0x28) + && *(p+2) == 0x00 && *(p+3) == 0x00) + return 1; +#endif + } + return 0; +} + +static OnigCodePoint +utf32le_mbc_to_code(const UChar* p, const UChar* end) +{ + return (OnigCodePoint )(((p[3] * 256 + p[2]) * 256 + p[1]) * 256 + p[0]); +} + +static int +utf32le_code_to_mbclen(OnigCodePoint code) +{ + return 4; +} + +static int +utf32le_code_to_mbc(OnigCodePoint code, UChar *buf) +{ + UChar* p = buf; + + *p++ = (UChar ) (code & 0xff); + *p++ = (UChar )((code & 0xff00) >> 8); + *p++ = (UChar )((code & 0xff0000) >>16); + *p++ = (UChar )((code & 0xff000000) >>24); + return 4; +} + +static int +utf32le_mbc_to_normalize(OnigAmbigType flag, const UChar** pp, const UChar* end, + UChar* lower) +{ + const UChar* p = *pp; + + if (*(p+1) == 0 && *(p+2) == 0 && *(p+3) == 0) { + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + *lower++ = ONIGENC_ISO_8859_1_TO_LOWER_CASE(*p); + } + else { + *lower++ = *p; + } + *lower++ = '\0'; + *lower++ = '\0'; + *lower = '\0'; + + (*pp) += 4; + return 4; /* return byte length of converted char to lower */ + } + else { + int len = 4; + if (lower != p) { + int i; + for (i = 0; i < len; i++) { + *lower++ = *p++; + } + } + (*pp) += len; + return len; /* return byte length of converted char to lower */ + } +} + +static int +utf32le_is_mbc_ambiguous(OnigAmbigType flag, const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + (*pp) += 4; + + if (*(p+1) == 0 && *(p+2) == 0 && *(p+3) == 0) { + int c, v; + + if (((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0 && + ONIGENC_IS_MBC_ASCII(p)) || + ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0 && + !ONIGENC_IS_MBC_ASCII(p))) { + c = *p; + v = ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(c, + (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER)); + if ((v | ONIGENC_CTYPE_LOWER) != 0) { + /* 0xaa, 0xb5, 0xba are lower case letter, but can't convert. */ + if (c >= 0xaa && c <= 0xba) + return FALSE; + else + return TRUE; + } + return (v != 0 ? TRUE : FALSE); + } + } + + return FALSE; +} + +static UChar* +utf32le_left_adjust_char_head(const UChar* start, const UChar* s) +{ + int rem; + + if (s <= start) return (UChar* )s; + + rem = (s - start) % 4; + return (UChar* )(s - rem); +} + +OnigEncodingType OnigEncodingUTF32_LE = { + utf32le_mbc_enc_len, + "UTF-32LE", /* name */ + 4, /* max byte length */ + 4, /* min byte length */ + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + utf32le_is_mbc_newline, + utf32le_mbc_to_code, + utf32le_code_to_mbclen, + utf32le_code_to_mbc, + utf32le_mbc_to_normalize, + utf32le_is_mbc_ambiguous, + onigenc_iso_8859_1_get_all_pair_ambig_codes, + onigenc_ess_tsett_get_all_comp_ambig_codes, + onigenc_unicode_is_code_ctype, + onigenc_unicode_get_ctype_code_range, + utf32le_left_adjust_char_head, + onigenc_always_false_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/enc/utf8.c b/ext/mbstring/oniguruma/enc/utf8.c new file mode 100644 index 0000000..c7481d7 --- /dev/null +++ b/ext/mbstring/oniguruma/enc/utf8.c @@ -0,0 +1,3730 @@ +/********************************************************************** + utf8.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regenc.h" + +#define USE_INVALID_CODE_SCHEME + +#ifdef USE_INVALID_CODE_SCHEME +/* virtual codepoint values for invalid encoding byte 0xfe and 0xff */ +#define INVALID_CODE_FE 0xfffffffe +#define INVALID_CODE_FF 0xffffffff +#define VALID_CODE_LIMIT 0x7fffffff +#endif + +#define utf8_islead(c) ((UChar )((c) & 0xc0) != 0x80) + +static const int EncLen_UTF8[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 1, 1 +}; + +static int +utf8_mbc_enc_len(const UChar* p) +{ + return EncLen_UTF8[*p]; +} + +static int +utf8_is_mbc_newline(const UChar* p, const UChar* end) +{ + if (p < end) { + if (*p == 0x0a) return 1; + +#ifdef USE_UNICODE_ALL_LINE_TERMINATORS + if (*p == 0x0d) return 1; + if (p + 1 < end) { + if (*(p+1) == 0x85 && *p == 0xc2) /* U+0085 */ + return 1; + if (p + 2 < end) { + if ((*(p+2) == 0xa8 || *(p+2) == 0xa9) + && *(p+1) == 0x80 && *p == 0xe2) /* U+2028, U+2029 */ + return 1; + } + } +#endif + } + + return 0; +} + +static OnigCodePoint +utf8_mbc_to_code(const UChar* p, const UChar* end) +{ + int c, len; + OnigCodePoint n; + + len = enc_len(ONIG_ENCODING_UTF8, p); + c = *p++; + if (len > 1) { + len--; + n = c & ((1 << (6 - len)) - 1); + while (len--) { + c = *p++; + n = (n << 6) | (c & ((1 << 6) - 1)); + } + return n; + } + else { +#ifdef USE_INVALID_CODE_SCHEME + if (c > 0xfd) { + return ((c == 0xfe) ? INVALID_CODE_FE : INVALID_CODE_FF); + } +#endif + return (OnigCodePoint )c; + } +} + +static int +utf8_code_to_mbclen(OnigCodePoint code) +{ + if ((code & 0xffffff80) == 0) return 1; + else if ((code & 0xfffff800) == 0) { + if (code <= 0xff && code >= 0xfe) + return 1; + return 2; + } + else if ((code & 0xffff0000) == 0) return 3; + else if ((code & 0xffe00000) == 0) return 4; + else if ((code & 0xfc000000) == 0) return 5; + else if ((code & 0x80000000) == 0) return 6; +#ifdef USE_INVALID_CODE_SCHEME + else if (code == INVALID_CODE_FE) return 1; + else if (code == INVALID_CODE_FF) return 1; +#endif + else + return ONIGENCERR_TOO_BIG_WIDE_CHAR_VALUE; +} + +#if 0 +static int +utf8_code_to_mbc_first(OnigCodePoint code) +{ + if ((code & 0xffffff80) == 0) + return code; + else { + if ((code & 0xfffff800) == 0) + return ((code>>6)& 0x1f) | 0xc0; + else if ((code & 0xffff0000) == 0) + return ((code>>12) & 0x0f) | 0xe0; + else if ((code & 0xffe00000) == 0) + return ((code>>18) & 0x07) | 0xf0; + else if ((code & 0xfc000000) == 0) + return ((code>>24) & 0x03) | 0xf8; + else if ((code & 0x80000000) == 0) + return ((code>>30) & 0x01) | 0xfc; + else { + return ONIGENCERR_TOO_BIG_WIDE_CHAR_VALUE; + } + } +} +#endif + +static int +utf8_code_to_mbc(OnigCodePoint code, UChar *buf) +{ +#define UTF8_TRAILS(code, shift) (UChar )((((code) >> (shift)) & 0x3f) | 0x80) +#define UTF8_TRAIL0(code) (UChar )(((code) & 0x3f) | 0x80) + + if ((code & 0xffffff80) == 0) { + *buf = (UChar )code; + return 1; + } + else { + UChar *p = buf; + + if ((code & 0xfffff800) == 0) { + *p++ = (UChar )(((code>>6)& 0x1f) | 0xc0); + } + else if ((code & 0xffff0000) == 0) { + *p++ = (UChar )(((code>>12) & 0x0f) | 0xe0); + *p++ = UTF8_TRAILS(code, 6); + } + else if ((code & 0xffe00000) == 0) { + *p++ = (UChar )(((code>>18) & 0x07) | 0xf0); + *p++ = UTF8_TRAILS(code, 12); + *p++ = UTF8_TRAILS(code, 6); + } + else if ((code & 0xfc000000) == 0) { + *p++ = (UChar )(((code>>24) & 0x03) | 0xf8); + *p++ = UTF8_TRAILS(code, 18); + *p++ = UTF8_TRAILS(code, 12); + *p++ = UTF8_TRAILS(code, 6); + } + else if ((code & 0x80000000) == 0) { + *p++ = (UChar )(((code>>30) & 0x01) | 0xfc); + *p++ = UTF8_TRAILS(code, 24); + *p++ = UTF8_TRAILS(code, 18); + *p++ = UTF8_TRAILS(code, 12); + *p++ = UTF8_TRAILS(code, 6); + } +#ifdef USE_INVALID_CODE_SCHEME + else if (code == INVALID_CODE_FE) { + *p = 0xfe; + return 1; + } + else if (code == INVALID_CODE_FF) { + *p = 0xff; + return 1; + } +#endif + else { + return ONIGENCERR_TOO_BIG_WIDE_CHAR_VALUE; + } + + *p++ = UTF8_TRAIL0(code); + return p - buf; + } +} + +static int +utf8_mbc_to_normalize(OnigAmbigType flag, const UChar** pp, const UChar* end, UChar* lower) +{ + const UChar* p = *pp; + + if (ONIGENC_IS_MBC_ASCII(p)) { + if ((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0) { + *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + (*pp)++; + return 1; /* return byte length of converted char to lower */ + } + else { + int len; + + if (*p == 195) { /* 195 == '\303' */ + int c = *(p + 1); + if (c >= 128) { + if (c <= (UChar )'\236' && /* upper */ + (flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0) { + if (c != (UChar )'\227') { + *lower++ = *p; + *lower = (UChar )(c + 32); + (*pp) += 2; + return 2; + } + } + } + } + + len = enc_len(ONIG_ENCODING_UTF8, p); + if (lower != p) { + int i; + for (i = 0; i < len; i++) { + *lower++ = *p++; + } + } + (*pp) += len; + return len; /* return byte length of converted char to lower */ + } +} + +static int +utf8_is_mbc_ambiguous(OnigAmbigType flag, const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + if (ONIGENC_IS_MBC_ASCII(p)) { + (*pp)++; + if ((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0) { + return ONIGENC_IS_ASCII_CODE_CASE_AMBIG(*p); + } + } + else { + (*pp) += enc_len(ONIG_ENCODING_UTF8, p); + + if (*p == 195) { /* 195 == '\303' */ + int c = *(p + 1); + if (c >= 128) { + if ((flag & ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) != 0) { + if (c <= (UChar )'\236') { /* upper */ + if (c == (UChar )'\227') return FALSE; + return TRUE; + } + else if (c >= (UChar )'\240' && c <= (UChar )'\276') { /* lower */ + if (c == (UChar )'\267') return FALSE; + return TRUE; + } + } + } + } + } + + return FALSE; +} + + +static const OnigCodePoint EmptyRange[] = { 0 }; + +static const OnigCodePoint SBAlnum[] = { + 3, + 0x0030, 0x0039, + 0x0041, 0x005a, + 0x0061, 0x007a +}; + +static const OnigCodePoint MBAlnum[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 411, +#else + 6, +#endif + 0x00aa, 0x00aa, + 0x00b5, 0x00b5, + 0x00ba, 0x00ba, + 0x00c0, 0x00d6, + 0x00d8, 0x00f6, + 0x00f8, 0x0236 +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x0250, 0x02c1, + 0x02c6, 0x02d1, + 0x02e0, 0x02e4, + 0x02ee, 0x02ee, + 0x0300, 0x0357, + 0x035d, 0x036f, + 0x037a, 0x037a, + 0x0386, 0x0386, + 0x0388, 0x038a, + 0x038c, 0x038c, + 0x038e, 0x03a1, + 0x03a3, 0x03ce, + 0x03d0, 0x03f5, + 0x03f7, 0x03fb, + 0x0400, 0x0481, + 0x0483, 0x0486, + 0x0488, 0x04ce, + 0x04d0, 0x04f5, + 0x04f8, 0x04f9, + 0x0500, 0x050f, + 0x0531, 0x0556, + 0x0559, 0x0559, + 0x0561, 0x0587, + 0x0591, 0x05a1, + 0x05a3, 0x05b9, + 0x05bb, 0x05bd, + 0x05bf, 0x05bf, + 0x05c1, 0x05c2, + 0x05c4, 0x05c4, + 0x05d0, 0x05ea, + 0x05f0, 0x05f2, + 0x0610, 0x0615, + 0x0621, 0x063a, + 0x0640, 0x0658, + 0x0660, 0x0669, + 0x066e, 0x06d3, + 0x06d5, 0x06dc, + 0x06de, 0x06e8, + 0x06ea, 0x06fc, + 0x06ff, 0x06ff, + 0x0710, 0x074a, + 0x074d, 0x074f, + 0x0780, 0x07b1, + 0x0901, 0x0939, + 0x093c, 0x094d, + 0x0950, 0x0954, + 0x0958, 0x0963, + 0x0966, 0x096f, + 0x0981, 0x0983, + 0x0985, 0x098c, + 0x098f, 0x0990, + 0x0993, 0x09a8, + 0x09aa, 0x09b0, + 0x09b2, 0x09b2, + 0x09b6, 0x09b9, + 0x09bc, 0x09c4, + 0x09c7, 0x09c8, + 0x09cb, 0x09cd, + 0x09d7, 0x09d7, + 0x09dc, 0x09dd, + 0x09df, 0x09e3, + 0x09e6, 0x09f1, + 0x0a01, 0x0a03, + 0x0a05, 0x0a0a, + 0x0a0f, 0x0a10, + 0x0a13, 0x0a28, + 0x0a2a, 0x0a30, + 0x0a32, 0x0a33, + 0x0a35, 0x0a36, + 0x0a38, 0x0a39, + 0x0a3c, 0x0a3c, + 0x0a3e, 0x0a42, + 0x0a47, 0x0a48, + 0x0a4b, 0x0a4d, + 0x0a59, 0x0a5c, + 0x0a5e, 0x0a5e, + 0x0a66, 0x0a74, + 0x0a81, 0x0a83, + 0x0a85, 0x0a8d, + 0x0a8f, 0x0a91, + 0x0a93, 0x0aa8, + 0x0aaa, 0x0ab0, + 0x0ab2, 0x0ab3, + 0x0ab5, 0x0ab9, + 0x0abc, 0x0ac5, + 0x0ac7, 0x0ac9, + 0x0acb, 0x0acd, + 0x0ad0, 0x0ad0, + 0x0ae0, 0x0ae3, + 0x0ae6, 0x0aef, + 0x0b01, 0x0b03, + 0x0b05, 0x0b0c, + 0x0b0f, 0x0b10, + 0x0b13, 0x0b28, + 0x0b2a, 0x0b30, + 0x0b32, 0x0b33, + 0x0b35, 0x0b39, + 0x0b3c, 0x0b43, + 0x0b47, 0x0b48, + 0x0b4b, 0x0b4d, + 0x0b56, 0x0b57, + 0x0b5c, 0x0b5d, + 0x0b5f, 0x0b61, + 0x0b66, 0x0b6f, + 0x0b71, 0x0b71, + 0x0b82, 0x0b83, + 0x0b85, 0x0b8a, + 0x0b8e, 0x0b90, + 0x0b92, 0x0b95, + 0x0b99, 0x0b9a, + 0x0b9c, 0x0b9c, + 0x0b9e, 0x0b9f, + 0x0ba3, 0x0ba4, + 0x0ba8, 0x0baa, + 0x0bae, 0x0bb5, + 0x0bb7, 0x0bb9, + 0x0bbe, 0x0bc2, + 0x0bc6, 0x0bc8, + 0x0bca, 0x0bcd, + 0x0bd7, 0x0bd7, + 0x0be7, 0x0bef, + 0x0c01, 0x0c03, + 0x0c05, 0x0c0c, + 0x0c0e, 0x0c10, + 0x0c12, 0x0c28, + 0x0c2a, 0x0c33, + 0x0c35, 0x0c39, + 0x0c3e, 0x0c44, + 0x0c46, 0x0c48, + 0x0c4a, 0x0c4d, + 0x0c55, 0x0c56, + 0x0c60, 0x0c61, + 0x0c66, 0x0c6f, + 0x0c82, 0x0c83, + 0x0c85, 0x0c8c, + 0x0c8e, 0x0c90, + 0x0c92, 0x0ca8, + 0x0caa, 0x0cb3, + 0x0cb5, 0x0cb9, + 0x0cbc, 0x0cc4, + 0x0cc6, 0x0cc8, + 0x0cca, 0x0ccd, + 0x0cd5, 0x0cd6, + 0x0cde, 0x0cde, + 0x0ce0, 0x0ce1, + 0x0ce6, 0x0cef, + 0x0d02, 0x0d03, + 0x0d05, 0x0d0c, + 0x0d0e, 0x0d10, + 0x0d12, 0x0d28, + 0x0d2a, 0x0d39, + 0x0d3e, 0x0d43, + 0x0d46, 0x0d48, + 0x0d4a, 0x0d4d, + 0x0d57, 0x0d57, + 0x0d60, 0x0d61, + 0x0d66, 0x0d6f, + 0x0d82, 0x0d83, + 0x0d85, 0x0d96, + 0x0d9a, 0x0db1, + 0x0db3, 0x0dbb, + 0x0dbd, 0x0dbd, + 0x0dc0, 0x0dc6, + 0x0dca, 0x0dca, + 0x0dcf, 0x0dd4, + 0x0dd6, 0x0dd6, + 0x0dd8, 0x0ddf, + 0x0df2, 0x0df3, + 0x0e01, 0x0e3a, + 0x0e40, 0x0e4e, + 0x0e50, 0x0e59, + 0x0e81, 0x0e82, + 0x0e84, 0x0e84, + 0x0e87, 0x0e88, + 0x0e8a, 0x0e8a, + 0x0e8d, 0x0e8d, + 0x0e94, 0x0e97, + 0x0e99, 0x0e9f, + 0x0ea1, 0x0ea3, + 0x0ea5, 0x0ea5, + 0x0ea7, 0x0ea7, + 0x0eaa, 0x0eab, + 0x0ead, 0x0eb9, + 0x0ebb, 0x0ebd, + 0x0ec0, 0x0ec4, + 0x0ec6, 0x0ec6, + 0x0ec8, 0x0ecd, + 0x0ed0, 0x0ed9, + 0x0edc, 0x0edd, + 0x0f00, 0x0f00, + 0x0f18, 0x0f19, + 0x0f20, 0x0f29, + 0x0f35, 0x0f35, + 0x0f37, 0x0f37, + 0x0f39, 0x0f39, + 0x0f3e, 0x0f47, + 0x0f49, 0x0f6a, + 0x0f71, 0x0f84, + 0x0f86, 0x0f8b, + 0x0f90, 0x0f97, + 0x0f99, 0x0fbc, + 0x0fc6, 0x0fc6, + 0x1000, 0x1021, + 0x1023, 0x1027, + 0x1029, 0x102a, + 0x102c, 0x1032, + 0x1036, 0x1039, + 0x1040, 0x1049, + 0x1050, 0x1059, + 0x10a0, 0x10c5, + 0x10d0, 0x10f8, + 0x1100, 0x1159, + 0x115f, 0x11a2, + 0x11a8, 0x11f9, + 0x1200, 0x1206, + 0x1208, 0x1246, + 0x1248, 0x1248, + 0x124a, 0x124d, + 0x1250, 0x1256, + 0x1258, 0x1258, + 0x125a, 0x125d, + 0x1260, 0x1286, + 0x1288, 0x1288, + 0x128a, 0x128d, + 0x1290, 0x12ae, + 0x12b0, 0x12b0, + 0x12b2, 0x12b5, + 0x12b8, 0x12be, + 0x12c0, 0x12c0, + 0x12c2, 0x12c5, + 0x12c8, 0x12ce, + 0x12d0, 0x12d6, + 0x12d8, 0x12ee, + 0x12f0, 0x130e, + 0x1310, 0x1310, + 0x1312, 0x1315, + 0x1318, 0x131e, + 0x1320, 0x1346, + 0x1348, 0x135a, + 0x1369, 0x1371, + 0x13a0, 0x13f4, + 0x1401, 0x166c, + 0x166f, 0x1676, + 0x1681, 0x169a, + 0x16a0, 0x16ea, + 0x1700, 0x170c, + 0x170e, 0x1714, + 0x1720, 0x1734, + 0x1740, 0x1753, + 0x1760, 0x176c, + 0x176e, 0x1770, + 0x1772, 0x1773, + 0x1780, 0x17b3, + 0x17b6, 0x17d3, + 0x17d7, 0x17d7, + 0x17dc, 0x17dd, + 0x17e0, 0x17e9, + 0x180b, 0x180d, + 0x1810, 0x1819, + 0x1820, 0x1877, + 0x1880, 0x18a9, + 0x1900, 0x191c, + 0x1920, 0x192b, + 0x1930, 0x193b, + 0x1946, 0x196d, + 0x1970, 0x1974, + 0x1d00, 0x1d6b, + 0x1e00, 0x1e9b, + 0x1ea0, 0x1ef9, + 0x1f00, 0x1f15, + 0x1f18, 0x1f1d, + 0x1f20, 0x1f45, + 0x1f48, 0x1f4d, + 0x1f50, 0x1f57, + 0x1f59, 0x1f59, + 0x1f5b, 0x1f5b, + 0x1f5d, 0x1f5d, + 0x1f5f, 0x1f7d, + 0x1f80, 0x1fb4, + 0x1fb6, 0x1fbc, + 0x1fbe, 0x1fbe, + 0x1fc2, 0x1fc4, + 0x1fc6, 0x1fcc, + 0x1fd0, 0x1fd3, + 0x1fd6, 0x1fdb, + 0x1fe0, 0x1fec, + 0x1ff2, 0x1ff4, + 0x1ff6, 0x1ffc, + 0x2071, 0x2071, + 0x207f, 0x207f, + 0x20d0, 0x20ea, + 0x2102, 0x2102, + 0x2107, 0x2107, + 0x210a, 0x2113, + 0x2115, 0x2115, + 0x2119, 0x211d, + 0x2124, 0x2124, + 0x2126, 0x2126, + 0x2128, 0x2128, + 0x212a, 0x212d, + 0x212f, 0x2131, + 0x2133, 0x2139, + 0x213d, 0x213f, + 0x2145, 0x2149, + 0x3005, 0x3006, + 0x302a, 0x302f, + 0x3031, 0x3035, + 0x303b, 0x303c, + 0x3041, 0x3096, + 0x3099, 0x309a, + 0x309d, 0x309f, + 0x30a1, 0x30fa, + 0x30fc, 0x30ff, + 0x3105, 0x312c, + 0x3131, 0x318e, + 0x31a0, 0x31b7, + 0x31f0, 0x31ff, + 0x3400, 0x4db5, + 0x4e00, 0x9fa5, + 0xa000, 0xa48c, + 0xac00, 0xd7a3, + 0xf900, 0xfa2d, + 0xfa30, 0xfa6a, + 0xfb00, 0xfb06, + 0xfb13, 0xfb17, + 0xfb1d, 0xfb28, + 0xfb2a, 0xfb36, + 0xfb38, 0xfb3c, + 0xfb3e, 0xfb3e, + 0xfb40, 0xfb41, + 0xfb43, 0xfb44, + 0xfb46, 0xfbb1, + 0xfbd3, 0xfd3d, + 0xfd50, 0xfd8f, + 0xfd92, 0xfdc7, + 0xfdf0, 0xfdfb, + 0xfe00, 0xfe0f, + 0xfe20, 0xfe23, + 0xfe70, 0xfe74, + 0xfe76, 0xfefc, + 0xff10, 0xff19, + 0xff21, 0xff3a, + 0xff41, 0xff5a, + 0xff66, 0xffbe, + 0xffc2, 0xffc7, + 0xffca, 0xffcf, + 0xffd2, 0xffd7, + 0xffda, 0xffdc, + 0x10000, 0x1000b, + 0x1000d, 0x10026, + 0x10028, 0x1003a, + 0x1003c, 0x1003d, + 0x1003f, 0x1004d, + 0x10050, 0x1005d, + 0x10080, 0x100fa, + 0x10300, 0x1031e, + 0x10330, 0x10349, + 0x10380, 0x1039d, + 0x10400, 0x1049d, + 0x104a0, 0x104a9, + 0x10800, 0x10805, + 0x10808, 0x10808, + 0x1080a, 0x10835, + 0x10837, 0x10838, + 0x1083c, 0x1083c, + 0x1083f, 0x1083f, + 0x1d165, 0x1d169, + 0x1d16d, 0x1d172, + 0x1d17b, 0x1d182, + 0x1d185, 0x1d18b, + 0x1d1aa, 0x1d1ad, + 0x1d400, 0x1d454, + 0x1d456, 0x1d49c, + 0x1d49e, 0x1d49f, + 0x1d4a2, 0x1d4a2, + 0x1d4a5, 0x1d4a6, + 0x1d4a9, 0x1d4ac, + 0x1d4ae, 0x1d4b9, + 0x1d4bb, 0x1d4bb, + 0x1d4bd, 0x1d4c3, + 0x1d4c5, 0x1d505, + 0x1d507, 0x1d50a, + 0x1d50d, 0x1d514, + 0x1d516, 0x1d51c, + 0x1d51e, 0x1d539, + 0x1d53b, 0x1d53e, + 0x1d540, 0x1d544, + 0x1d546, 0x1d546, + 0x1d54a, 0x1d550, + 0x1d552, 0x1d6a3, + 0x1d6a8, 0x1d6c0, + 0x1d6c2, 0x1d6da, + 0x1d6dc, 0x1d6fa, + 0x1d6fc, 0x1d714, + 0x1d716, 0x1d734, + 0x1d736, 0x1d74e, + 0x1d750, 0x1d76e, + 0x1d770, 0x1d788, + 0x1d78a, 0x1d7a8, + 0x1d7aa, 0x1d7c2, + 0x1d7c4, 0x1d7c9, + 0x1d7ce, 0x1d7ff, + 0x20000, 0x2a6d6, + 0x2f800, 0x2fa1d, + 0xe0100, 0xe01ef +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of MBAlnum */ + +static const OnigCodePoint SBAlpha[] = { + 2, + 0x0041, 0x005a, + 0x0061, 0x007a +}; + +static const OnigCodePoint MBAlpha[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 394, +#else + 6, +#endif + 0x00aa, 0x00aa, + 0x00b5, 0x00b5, + 0x00ba, 0x00ba, + 0x00c0, 0x00d6, + 0x00d8, 0x00f6, + 0x00f8, 0x0236 +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x0250, 0x02c1, + 0x02c6, 0x02d1, + 0x02e0, 0x02e4, + 0x02ee, 0x02ee, + 0x0300, 0x0357, + 0x035d, 0x036f, + 0x037a, 0x037a, + 0x0386, 0x0386, + 0x0388, 0x038a, + 0x038c, 0x038c, + 0x038e, 0x03a1, + 0x03a3, 0x03ce, + 0x03d0, 0x03f5, + 0x03f7, 0x03fb, + 0x0400, 0x0481, + 0x0483, 0x0486, + 0x0488, 0x04ce, + 0x04d0, 0x04f5, + 0x04f8, 0x04f9, + 0x0500, 0x050f, + 0x0531, 0x0556, + 0x0559, 0x0559, + 0x0561, 0x0587, + 0x0591, 0x05a1, + 0x05a3, 0x05b9, + 0x05bb, 0x05bd, + 0x05bf, 0x05bf, + 0x05c1, 0x05c2, + 0x05c4, 0x05c4, + 0x05d0, 0x05ea, + 0x05f0, 0x05f2, + 0x0610, 0x0615, + 0x0621, 0x063a, + 0x0640, 0x0658, + 0x066e, 0x06d3, + 0x06d5, 0x06dc, + 0x06de, 0x06e8, + 0x06ea, 0x06ef, + 0x06fa, 0x06fc, + 0x06ff, 0x06ff, + 0x0710, 0x074a, + 0x074d, 0x074f, + 0x0780, 0x07b1, + 0x0901, 0x0939, + 0x093c, 0x094d, + 0x0950, 0x0954, + 0x0958, 0x0963, + 0x0981, 0x0983, + 0x0985, 0x098c, + 0x098f, 0x0990, + 0x0993, 0x09a8, + 0x09aa, 0x09b0, + 0x09b2, 0x09b2, + 0x09b6, 0x09b9, + 0x09bc, 0x09c4, + 0x09c7, 0x09c8, + 0x09cb, 0x09cd, + 0x09d7, 0x09d7, + 0x09dc, 0x09dd, + 0x09df, 0x09e3, + 0x09f0, 0x09f1, + 0x0a01, 0x0a03, + 0x0a05, 0x0a0a, + 0x0a0f, 0x0a10, + 0x0a13, 0x0a28, + 0x0a2a, 0x0a30, + 0x0a32, 0x0a33, + 0x0a35, 0x0a36, + 0x0a38, 0x0a39, + 0x0a3c, 0x0a3c, + 0x0a3e, 0x0a42, + 0x0a47, 0x0a48, + 0x0a4b, 0x0a4d, + 0x0a59, 0x0a5c, + 0x0a5e, 0x0a5e, + 0x0a70, 0x0a74, + 0x0a81, 0x0a83, + 0x0a85, 0x0a8d, + 0x0a8f, 0x0a91, + 0x0a93, 0x0aa8, + 0x0aaa, 0x0ab0, + 0x0ab2, 0x0ab3, + 0x0ab5, 0x0ab9, + 0x0abc, 0x0ac5, + 0x0ac7, 0x0ac9, + 0x0acb, 0x0acd, + 0x0ad0, 0x0ad0, + 0x0ae0, 0x0ae3, + 0x0b01, 0x0b03, + 0x0b05, 0x0b0c, + 0x0b0f, 0x0b10, + 0x0b13, 0x0b28, + 0x0b2a, 0x0b30, + 0x0b32, 0x0b33, + 0x0b35, 0x0b39, + 0x0b3c, 0x0b43, + 0x0b47, 0x0b48, + 0x0b4b, 0x0b4d, + 0x0b56, 0x0b57, + 0x0b5c, 0x0b5d, + 0x0b5f, 0x0b61, + 0x0b71, 0x0b71, + 0x0b82, 0x0b83, + 0x0b85, 0x0b8a, + 0x0b8e, 0x0b90, + 0x0b92, 0x0b95, + 0x0b99, 0x0b9a, + 0x0b9c, 0x0b9c, + 0x0b9e, 0x0b9f, + 0x0ba3, 0x0ba4, + 0x0ba8, 0x0baa, + 0x0bae, 0x0bb5, + 0x0bb7, 0x0bb9, + 0x0bbe, 0x0bc2, + 0x0bc6, 0x0bc8, + 0x0bca, 0x0bcd, + 0x0bd7, 0x0bd7, + 0x0c01, 0x0c03, + 0x0c05, 0x0c0c, + 0x0c0e, 0x0c10, + 0x0c12, 0x0c28, + 0x0c2a, 0x0c33, + 0x0c35, 0x0c39, + 0x0c3e, 0x0c44, + 0x0c46, 0x0c48, + 0x0c4a, 0x0c4d, + 0x0c55, 0x0c56, + 0x0c60, 0x0c61, + 0x0c82, 0x0c83, + 0x0c85, 0x0c8c, + 0x0c8e, 0x0c90, + 0x0c92, 0x0ca8, + 0x0caa, 0x0cb3, + 0x0cb5, 0x0cb9, + 0x0cbc, 0x0cc4, + 0x0cc6, 0x0cc8, + 0x0cca, 0x0ccd, + 0x0cd5, 0x0cd6, + 0x0cde, 0x0cde, + 0x0ce0, 0x0ce1, + 0x0d02, 0x0d03, + 0x0d05, 0x0d0c, + 0x0d0e, 0x0d10, + 0x0d12, 0x0d28, + 0x0d2a, 0x0d39, + 0x0d3e, 0x0d43, + 0x0d46, 0x0d48, + 0x0d4a, 0x0d4d, + 0x0d57, 0x0d57, + 0x0d60, 0x0d61, + 0x0d82, 0x0d83, + 0x0d85, 0x0d96, + 0x0d9a, 0x0db1, + 0x0db3, 0x0dbb, + 0x0dbd, 0x0dbd, + 0x0dc0, 0x0dc6, + 0x0dca, 0x0dca, + 0x0dcf, 0x0dd4, + 0x0dd6, 0x0dd6, + 0x0dd8, 0x0ddf, + 0x0df2, 0x0df3, + 0x0e01, 0x0e3a, + 0x0e40, 0x0e4e, + 0x0e81, 0x0e82, + 0x0e84, 0x0e84, + 0x0e87, 0x0e88, + 0x0e8a, 0x0e8a, + 0x0e8d, 0x0e8d, + 0x0e94, 0x0e97, + 0x0e99, 0x0e9f, + 0x0ea1, 0x0ea3, + 0x0ea5, 0x0ea5, + 0x0ea7, 0x0ea7, + 0x0eaa, 0x0eab, + 0x0ead, 0x0eb9, + 0x0ebb, 0x0ebd, + 0x0ec0, 0x0ec4, + 0x0ec6, 0x0ec6, + 0x0ec8, 0x0ecd, + 0x0edc, 0x0edd, + 0x0f00, 0x0f00, + 0x0f18, 0x0f19, + 0x0f35, 0x0f35, + 0x0f37, 0x0f37, + 0x0f39, 0x0f39, + 0x0f3e, 0x0f47, + 0x0f49, 0x0f6a, + 0x0f71, 0x0f84, + 0x0f86, 0x0f8b, + 0x0f90, 0x0f97, + 0x0f99, 0x0fbc, + 0x0fc6, 0x0fc6, + 0x1000, 0x1021, + 0x1023, 0x1027, + 0x1029, 0x102a, + 0x102c, 0x1032, + 0x1036, 0x1039, + 0x1050, 0x1059, + 0x10a0, 0x10c5, + 0x10d0, 0x10f8, + 0x1100, 0x1159, + 0x115f, 0x11a2, + 0x11a8, 0x11f9, + 0x1200, 0x1206, + 0x1208, 0x1246, + 0x1248, 0x1248, + 0x124a, 0x124d, + 0x1250, 0x1256, + 0x1258, 0x1258, + 0x125a, 0x125d, + 0x1260, 0x1286, + 0x1288, 0x1288, + 0x128a, 0x128d, + 0x1290, 0x12ae, + 0x12b0, 0x12b0, + 0x12b2, 0x12b5, + 0x12b8, 0x12be, + 0x12c0, 0x12c0, + 0x12c2, 0x12c5, + 0x12c8, 0x12ce, + 0x12d0, 0x12d6, + 0x12d8, 0x12ee, + 0x12f0, 0x130e, + 0x1310, 0x1310, + 0x1312, 0x1315, + 0x1318, 0x131e, + 0x1320, 0x1346, + 0x1348, 0x135a, + 0x13a0, 0x13f4, + 0x1401, 0x166c, + 0x166f, 0x1676, + 0x1681, 0x169a, + 0x16a0, 0x16ea, + 0x1700, 0x170c, + 0x170e, 0x1714, + 0x1720, 0x1734, + 0x1740, 0x1753, + 0x1760, 0x176c, + 0x176e, 0x1770, + 0x1772, 0x1773, + 0x1780, 0x17b3, + 0x17b6, 0x17d3, + 0x17d7, 0x17d7, + 0x17dc, 0x17dd, + 0x180b, 0x180d, + 0x1820, 0x1877, + 0x1880, 0x18a9, + 0x1900, 0x191c, + 0x1920, 0x192b, + 0x1930, 0x193b, + 0x1950, 0x196d, + 0x1970, 0x1974, + 0x1d00, 0x1d6b, + 0x1e00, 0x1e9b, + 0x1ea0, 0x1ef9, + 0x1f00, 0x1f15, + 0x1f18, 0x1f1d, + 0x1f20, 0x1f45, + 0x1f48, 0x1f4d, + 0x1f50, 0x1f57, + 0x1f59, 0x1f59, + 0x1f5b, 0x1f5b, + 0x1f5d, 0x1f5d, + 0x1f5f, 0x1f7d, + 0x1f80, 0x1fb4, + 0x1fb6, 0x1fbc, + 0x1fbe, 0x1fbe, + 0x1fc2, 0x1fc4, + 0x1fc6, 0x1fcc, + 0x1fd0, 0x1fd3, + 0x1fd6, 0x1fdb, + 0x1fe0, 0x1fec, + 0x1ff2, 0x1ff4, + 0x1ff6, 0x1ffc, + 0x2071, 0x2071, + 0x207f, 0x207f, + 0x20d0, 0x20ea, + 0x2102, 0x2102, + 0x2107, 0x2107, + 0x210a, 0x2113, + 0x2115, 0x2115, + 0x2119, 0x211d, + 0x2124, 0x2124, + 0x2126, 0x2126, + 0x2128, 0x2128, + 0x212a, 0x212d, + 0x212f, 0x2131, + 0x2133, 0x2139, + 0x213d, 0x213f, + 0x2145, 0x2149, + 0x3005, 0x3006, + 0x302a, 0x302f, + 0x3031, 0x3035, + 0x303b, 0x303c, + 0x3041, 0x3096, + 0x3099, 0x309a, + 0x309d, 0x309f, + 0x30a1, 0x30fa, + 0x30fc, 0x30ff, + 0x3105, 0x312c, + 0x3131, 0x318e, + 0x31a0, 0x31b7, + 0x31f0, 0x31ff, + 0x3400, 0x4db5, + 0x4e00, 0x9fa5, + 0xa000, 0xa48c, + 0xac00, 0xd7a3, + 0xf900, 0xfa2d, + 0xfa30, 0xfa6a, + 0xfb00, 0xfb06, + 0xfb13, 0xfb17, + 0xfb1d, 0xfb28, + 0xfb2a, 0xfb36, + 0xfb38, 0xfb3c, + 0xfb3e, 0xfb3e, + 0xfb40, 0xfb41, + 0xfb43, 0xfb44, + 0xfb46, 0xfbb1, + 0xfbd3, 0xfd3d, + 0xfd50, 0xfd8f, + 0xfd92, 0xfdc7, + 0xfdf0, 0xfdfb, + 0xfe00, 0xfe0f, + 0xfe20, 0xfe23, + 0xfe70, 0xfe74, + 0xfe76, 0xfefc, + 0xff21, 0xff3a, + 0xff41, 0xff5a, + 0xff66, 0xffbe, + 0xffc2, 0xffc7, + 0xffca, 0xffcf, + 0xffd2, 0xffd7, + 0xffda, 0xffdc, + 0x10000, 0x1000b, + 0x1000d, 0x10026, + 0x10028, 0x1003a, + 0x1003c, 0x1003d, + 0x1003f, 0x1004d, + 0x10050, 0x1005d, + 0x10080, 0x100fa, + 0x10300, 0x1031e, + 0x10330, 0x10349, + 0x10380, 0x1039d, + 0x10400, 0x1049d, + 0x10800, 0x10805, + 0x10808, 0x10808, + 0x1080a, 0x10835, + 0x10837, 0x10838, + 0x1083c, 0x1083c, + 0x1083f, 0x1083f, + 0x1d165, 0x1d169, + 0x1d16d, 0x1d172, + 0x1d17b, 0x1d182, + 0x1d185, 0x1d18b, + 0x1d1aa, 0x1d1ad, + 0x1d400, 0x1d454, + 0x1d456, 0x1d49c, + 0x1d49e, 0x1d49f, + 0x1d4a2, 0x1d4a2, + 0x1d4a5, 0x1d4a6, + 0x1d4a9, 0x1d4ac, + 0x1d4ae, 0x1d4b9, + 0x1d4bb, 0x1d4bb, + 0x1d4bd, 0x1d4c3, + 0x1d4c5, 0x1d505, + 0x1d507, 0x1d50a, + 0x1d50d, 0x1d514, + 0x1d516, 0x1d51c, + 0x1d51e, 0x1d539, + 0x1d53b, 0x1d53e, + 0x1d540, 0x1d544, + 0x1d546, 0x1d546, + 0x1d54a, 0x1d550, + 0x1d552, 0x1d6a3, + 0x1d6a8, 0x1d6c0, + 0x1d6c2, 0x1d6da, + 0x1d6dc, 0x1d6fa, + 0x1d6fc, 0x1d714, + 0x1d716, 0x1d734, + 0x1d736, 0x1d74e, + 0x1d750, 0x1d76e, + 0x1d770, 0x1d788, + 0x1d78a, 0x1d7a8, + 0x1d7aa, 0x1d7c2, + 0x1d7c4, 0x1d7c9, + 0x20000, 0x2a6d6, + 0x2f800, 0x2fa1d, + 0xe0100, 0xe01ef +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of MBAlpha */ + +static const OnigCodePoint SBBlank[] = { + 2, + 0x0009, 0x0009, + 0x0020, 0x0020 +}; + +static const OnigCodePoint MBBlank[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 7, +#else + 1, +#endif + 0x00a0, 0x00a0 +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x1680, 0x1680, + 0x180e, 0x180e, + 0x2000, 0x200a, + 0x202f, 0x202f, + 0x205f, 0x205f, + 0x3000, 0x3000 +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of MBBlank */ + +static const OnigCodePoint SBCntrl[] = { + 2, + 0x0000, 0x001f, + 0x007f, 0x007f +}; + +static const OnigCodePoint MBCntrl[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 18, +#else + 2, +#endif + 0x0080, 0x009f, + 0x00ad, 0x00ad +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x0600, 0x0603, + 0x06dd, 0x06dd, + 0x070f, 0x070f, + 0x17b4, 0x17b5, + 0x200b, 0x200f, + 0x202a, 0x202e, + 0x2060, 0x2063, + 0x206a, 0x206f, + 0xd800, 0xf8ff, + 0xfeff, 0xfeff, + 0xfff9, 0xfffb, + 0x1d173, 0x1d17a, + 0xe0001, 0xe0001, + 0xe0020, 0xe007f, + 0xf0000, 0xffffd, + 0x100000, 0x10fffd +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of MBCntrl */ + +static const OnigCodePoint SBDigit[] = { + 1, + 0x0030, 0x0039 +}; + +static const OnigCodePoint MBDigit[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 22, +#else + 0 +#endif +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 0x0660, 0x0669, + 0x06f0, 0x06f9, + 0x0966, 0x096f, + 0x09e6, 0x09ef, + 0x0a66, 0x0a6f, + 0x0ae6, 0x0aef, + 0x0b66, 0x0b6f, + 0x0be7, 0x0bef, + 0x0c66, 0x0c6f, + 0x0ce6, 0x0cef, + 0x0d66, 0x0d6f, + 0x0e50, 0x0e59, + 0x0ed0, 0x0ed9, + 0x0f20, 0x0f29, + 0x1040, 0x1049, + 0x1369, 0x1371, + 0x17e0, 0x17e9, + 0x1810, 0x1819, + 0x1946, 0x194f, + 0xff10, 0xff19, + 0x104a0, 0x104a9, + 0x1d7ce, 0x1d7ff +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of MBDigit */ + +static const OnigCodePoint SBGraph[] = { + 1, + 0x0021, 0x007e +}; + +static const OnigCodePoint MBGraph[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 404, +#else + 1, +#endif + 0x00a1, 0x0236 +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x0250, 0x0357, + 0x035d, 0x036f, + 0x0374, 0x0375, + 0x037a, 0x037a, + 0x037e, 0x037e, + 0x0384, 0x038a, + 0x038c, 0x038c, + 0x038e, 0x03a1, + 0x03a3, 0x03ce, + 0x03d0, 0x03fb, + 0x0400, 0x0486, + 0x0488, 0x04ce, + 0x04d0, 0x04f5, + 0x04f8, 0x04f9, + 0x0500, 0x050f, + 0x0531, 0x0556, + 0x0559, 0x055f, + 0x0561, 0x0587, + 0x0589, 0x058a, + 0x0591, 0x05a1, + 0x05a3, 0x05b9, + 0x05bb, 0x05c4, + 0x05d0, 0x05ea, + 0x05f0, 0x05f4, + 0x0600, 0x0603, + 0x060c, 0x0615, + 0x061b, 0x061b, + 0x061f, 0x061f, + 0x0621, 0x063a, + 0x0640, 0x0658, + 0x0660, 0x070d, + 0x070f, 0x074a, + 0x074d, 0x074f, + 0x0780, 0x07b1, + 0x0901, 0x0939, + 0x093c, 0x094d, + 0x0950, 0x0954, + 0x0958, 0x0970, + 0x0981, 0x0983, + 0x0985, 0x098c, + 0x098f, 0x0990, + 0x0993, 0x09a8, + 0x09aa, 0x09b0, + 0x09b2, 0x09b2, + 0x09b6, 0x09b9, + 0x09bc, 0x09c4, + 0x09c7, 0x09c8, + 0x09cb, 0x09cd, + 0x09d7, 0x09d7, + 0x09dc, 0x09dd, + 0x09df, 0x09e3, + 0x09e6, 0x09fa, + 0x0a01, 0x0a03, + 0x0a05, 0x0a0a, + 0x0a0f, 0x0a10, + 0x0a13, 0x0a28, + 0x0a2a, 0x0a30, + 0x0a32, 0x0a33, + 0x0a35, 0x0a36, + 0x0a38, 0x0a39, + 0x0a3c, 0x0a3c, + 0x0a3e, 0x0a42, + 0x0a47, 0x0a48, + 0x0a4b, 0x0a4d, + 0x0a59, 0x0a5c, + 0x0a5e, 0x0a5e, + 0x0a66, 0x0a74, + 0x0a81, 0x0a83, + 0x0a85, 0x0a8d, + 0x0a8f, 0x0a91, + 0x0a93, 0x0aa8, + 0x0aaa, 0x0ab0, + 0x0ab2, 0x0ab3, + 0x0ab5, 0x0ab9, + 0x0abc, 0x0ac5, + 0x0ac7, 0x0ac9, + 0x0acb, 0x0acd, + 0x0ad0, 0x0ad0, + 0x0ae0, 0x0ae3, + 0x0ae6, 0x0aef, + 0x0af1, 0x0af1, + 0x0b01, 0x0b03, + 0x0b05, 0x0b0c, + 0x0b0f, 0x0b10, + 0x0b13, 0x0b28, + 0x0b2a, 0x0b30, + 0x0b32, 0x0b33, + 0x0b35, 0x0b39, + 0x0b3c, 0x0b43, + 0x0b47, 0x0b48, + 0x0b4b, 0x0b4d, + 0x0b56, 0x0b57, + 0x0b5c, 0x0b5d, + 0x0b5f, 0x0b61, + 0x0b66, 0x0b71, + 0x0b82, 0x0b83, + 0x0b85, 0x0b8a, + 0x0b8e, 0x0b90, + 0x0b92, 0x0b95, + 0x0b99, 0x0b9a, + 0x0b9c, 0x0b9c, + 0x0b9e, 0x0b9f, + 0x0ba3, 0x0ba4, + 0x0ba8, 0x0baa, + 0x0bae, 0x0bb5, + 0x0bb7, 0x0bb9, + 0x0bbe, 0x0bc2, + 0x0bc6, 0x0bc8, + 0x0bca, 0x0bcd, + 0x0bd7, 0x0bd7, + 0x0be7, 0x0bfa, + 0x0c01, 0x0c03, + 0x0c05, 0x0c0c, + 0x0c0e, 0x0c10, + 0x0c12, 0x0c28, + 0x0c2a, 0x0c33, + 0x0c35, 0x0c39, + 0x0c3e, 0x0c44, + 0x0c46, 0x0c48, + 0x0c4a, 0x0c4d, + 0x0c55, 0x0c56, + 0x0c60, 0x0c61, + 0x0c66, 0x0c6f, + 0x0c82, 0x0c83, + 0x0c85, 0x0c8c, + 0x0c8e, 0x0c90, + 0x0c92, 0x0ca8, + 0x0caa, 0x0cb3, + 0x0cb5, 0x0cb9, + 0x0cbc, 0x0cc4, + 0x0cc6, 0x0cc8, + 0x0cca, 0x0ccd, + 0x0cd5, 0x0cd6, + 0x0cde, 0x0cde, + 0x0ce0, 0x0ce1, + 0x0ce6, 0x0cef, + 0x0d02, 0x0d03, + 0x0d05, 0x0d0c, + 0x0d0e, 0x0d10, + 0x0d12, 0x0d28, + 0x0d2a, 0x0d39, + 0x0d3e, 0x0d43, + 0x0d46, 0x0d48, + 0x0d4a, 0x0d4d, + 0x0d57, 0x0d57, + 0x0d60, 0x0d61, + 0x0d66, 0x0d6f, + 0x0d82, 0x0d83, + 0x0d85, 0x0d96, + 0x0d9a, 0x0db1, + 0x0db3, 0x0dbb, + 0x0dbd, 0x0dbd, + 0x0dc0, 0x0dc6, + 0x0dca, 0x0dca, + 0x0dcf, 0x0dd4, + 0x0dd6, 0x0dd6, + 0x0dd8, 0x0ddf, + 0x0df2, 0x0df4, + 0x0e01, 0x0e3a, + 0x0e3f, 0x0e5b, + 0x0e81, 0x0e82, + 0x0e84, 0x0e84, + 0x0e87, 0x0e88, + 0x0e8a, 0x0e8a, + 0x0e8d, 0x0e8d, + 0x0e94, 0x0e97, + 0x0e99, 0x0e9f, + 0x0ea1, 0x0ea3, + 0x0ea5, 0x0ea5, + 0x0ea7, 0x0ea7, + 0x0eaa, 0x0eab, + 0x0ead, 0x0eb9, + 0x0ebb, 0x0ebd, + 0x0ec0, 0x0ec4, + 0x0ec6, 0x0ec6, + 0x0ec8, 0x0ecd, + 0x0ed0, 0x0ed9, + 0x0edc, 0x0edd, + 0x0f00, 0x0f47, + 0x0f49, 0x0f6a, + 0x0f71, 0x0f8b, + 0x0f90, 0x0f97, + 0x0f99, 0x0fbc, + 0x0fbe, 0x0fcc, + 0x0fcf, 0x0fcf, + 0x1000, 0x1021, + 0x1023, 0x1027, + 0x1029, 0x102a, + 0x102c, 0x1032, + 0x1036, 0x1039, + 0x1040, 0x1059, + 0x10a0, 0x10c5, + 0x10d0, 0x10f8, + 0x10fb, 0x10fb, + 0x1100, 0x1159, + 0x115f, 0x11a2, + 0x11a8, 0x11f9, + 0x1200, 0x1206, + 0x1208, 0x1246, + 0x1248, 0x1248, + 0x124a, 0x124d, + 0x1250, 0x1256, + 0x1258, 0x1258, + 0x125a, 0x125d, + 0x1260, 0x1286, + 0x1288, 0x1288, + 0x128a, 0x128d, + 0x1290, 0x12ae, + 0x12b0, 0x12b0, + 0x12b2, 0x12b5, + 0x12b8, 0x12be, + 0x12c0, 0x12c0, + 0x12c2, 0x12c5, + 0x12c8, 0x12ce, + 0x12d0, 0x12d6, + 0x12d8, 0x12ee, + 0x12f0, 0x130e, + 0x1310, 0x1310, + 0x1312, 0x1315, + 0x1318, 0x131e, + 0x1320, 0x1346, + 0x1348, 0x135a, + 0x1361, 0x137c, + 0x13a0, 0x13f4, + 0x1401, 0x1676, + 0x1681, 0x169c, + 0x16a0, 0x16f0, + 0x1700, 0x170c, + 0x170e, 0x1714, + 0x1720, 0x1736, + 0x1740, 0x1753, + 0x1760, 0x176c, + 0x176e, 0x1770, + 0x1772, 0x1773, + 0x1780, 0x17dd, + 0x17e0, 0x17e9, + 0x17f0, 0x17f9, + 0x1800, 0x180d, + 0x1810, 0x1819, + 0x1820, 0x1877, + 0x1880, 0x18a9, + 0x1900, 0x191c, + 0x1920, 0x192b, + 0x1930, 0x193b, + 0x1940, 0x1940, + 0x1944, 0x196d, + 0x1970, 0x1974, + 0x19e0, 0x19ff, + 0x1d00, 0x1d6b, + 0x1e00, 0x1e9b, + 0x1ea0, 0x1ef9, + 0x1f00, 0x1f15, + 0x1f18, 0x1f1d, + 0x1f20, 0x1f45, + 0x1f48, 0x1f4d, + 0x1f50, 0x1f57, + 0x1f59, 0x1f59, + 0x1f5b, 0x1f5b, + 0x1f5d, 0x1f5d, + 0x1f5f, 0x1f7d, + 0x1f80, 0x1fb4, + 0x1fb6, 0x1fc4, + 0x1fc6, 0x1fd3, + 0x1fd6, 0x1fdb, + 0x1fdd, 0x1fef, + 0x1ff2, 0x1ff4, + 0x1ff6, 0x1ffe, + 0x200b, 0x2027, + 0x202a, 0x202e, + 0x2030, 0x2054, + 0x2057, 0x2057, + 0x2060, 0x2063, + 0x206a, 0x2071, + 0x2074, 0x208e, + 0x20a0, 0x20b1, + 0x20d0, 0x20ea, + 0x2100, 0x213b, + 0x213d, 0x214b, + 0x2153, 0x2183, + 0x2190, 0x23d0, + 0x2400, 0x2426, + 0x2440, 0x244a, + 0x2460, 0x2617, + 0x2619, 0x267d, + 0x2680, 0x2691, + 0x26a0, 0x26a1, + 0x2701, 0x2704, + 0x2706, 0x2709, + 0x270c, 0x2727, + 0x2729, 0x274b, + 0x274d, 0x274d, + 0x274f, 0x2752, + 0x2756, 0x2756, + 0x2758, 0x275e, + 0x2761, 0x2794, + 0x2798, 0x27af, + 0x27b1, 0x27be, + 0x27d0, 0x27eb, + 0x27f0, 0x2b0d, + 0x2e80, 0x2e99, + 0x2e9b, 0x2ef3, + 0x2f00, 0x2fd5, + 0x2ff0, 0x2ffb, + 0x3001, 0x303f, + 0x3041, 0x3096, + 0x3099, 0x30ff, + 0x3105, 0x312c, + 0x3131, 0x318e, + 0x3190, 0x31b7, + 0x31f0, 0x321e, + 0x3220, 0x3243, + 0x3250, 0x327d, + 0x327f, 0x32fe, + 0x3300, 0x4db5, + 0x4dc0, 0x9fa5, + 0xa000, 0xa48c, + 0xa490, 0xa4c6, + 0xac00, 0xd7a3, + 0xe000, 0xfa2d, + 0xfa30, 0xfa6a, + 0xfb00, 0xfb06, + 0xfb13, 0xfb17, + 0xfb1d, 0xfb36, + 0xfb38, 0xfb3c, + 0xfb3e, 0xfb3e, + 0xfb40, 0xfb41, + 0xfb43, 0xfb44, + 0xfb46, 0xfbb1, + 0xfbd3, 0xfd3f, + 0xfd50, 0xfd8f, + 0xfd92, 0xfdc7, + 0xfdf0, 0xfdfd, + 0xfe00, 0xfe0f, + 0xfe20, 0xfe23, + 0xfe30, 0xfe52, + 0xfe54, 0xfe66, + 0xfe68, 0xfe6b, + 0xfe70, 0xfe74, + 0xfe76, 0xfefc, + 0xfeff, 0xfeff, + 0xff01, 0xffbe, + 0xffc2, 0xffc7, + 0xffca, 0xffcf, + 0xffd2, 0xffd7, + 0xffda, 0xffdc, + 0xffe0, 0xffe6, + 0xffe8, 0xffee, + 0xfff9, 0xfffd, + 0x10000, 0x1000b, + 0x1000d, 0x10026, + 0x10028, 0x1003a, + 0x1003c, 0x1003d, + 0x1003f, 0x1004d, + 0x10050, 0x1005d, + 0x10080, 0x100fa, + 0x10100, 0x10102, + 0x10107, 0x10133, + 0x10137, 0x1013f, + 0x10300, 0x1031e, + 0x10320, 0x10323, + 0x10330, 0x1034a, + 0x10380, 0x1039d, + 0x1039f, 0x1039f, + 0x10400, 0x1049d, + 0x104a0, 0x104a9, + 0x10800, 0x10805, + 0x10808, 0x10808, + 0x1080a, 0x10835, + 0x10837, 0x10838, + 0x1083c, 0x1083c, + 0x1083f, 0x1083f, + 0x1d000, 0x1d0f5, + 0x1d100, 0x1d126, + 0x1d12a, 0x1d1dd, + 0x1d300, 0x1d356, + 0x1d400, 0x1d454, + 0x1d456, 0x1d49c, + 0x1d49e, 0x1d49f, + 0x1d4a2, 0x1d4a2, + 0x1d4a5, 0x1d4a6, + 0x1d4a9, 0x1d4ac, + 0x1d4ae, 0x1d4b9, + 0x1d4bb, 0x1d4bb, + 0x1d4bd, 0x1d4c3, + 0x1d4c5, 0x1d505, + 0x1d507, 0x1d50a, + 0x1d50d, 0x1d514, + 0x1d516, 0x1d51c, + 0x1d51e, 0x1d539, + 0x1d53b, 0x1d53e, + 0x1d540, 0x1d544, + 0x1d546, 0x1d546, + 0x1d54a, 0x1d550, + 0x1d552, 0x1d6a3, + 0x1d6a8, 0x1d7c9, + 0x1d7ce, 0x1d7ff, + 0x20000, 0x2a6d6, + 0x2f800, 0x2fa1d, + 0xe0001, 0xe0001, + 0xe0020, 0xe007f, + 0xe0100, 0xe01ef, + 0xf0000, 0xffffd, + 0x100000, 0x10fffd +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of MBGraph */ + +static const OnigCodePoint SBLower[] = { + 1, + 0x0061, 0x007a +}; + +static const OnigCodePoint MBLower[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 423, +#else + 5, +#endif + 0x00aa, 0x00aa, + 0x00b5, 0x00b5, + 0x00ba, 0x00ba, + 0x00df, 0x00f6, + 0x00f8, 0x00ff +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x0101, 0x0101, + 0x0103, 0x0103, + 0x0105, 0x0105, + 0x0107, 0x0107, + 0x0109, 0x0109, + 0x010b, 0x010b, + 0x010d, 0x010d, + 0x010f, 0x010f, + 0x0111, 0x0111, + 0x0113, 0x0113, + 0x0115, 0x0115, + 0x0117, 0x0117, + 0x0119, 0x0119, + 0x011b, 0x011b, + 0x011d, 0x011d, + 0x011f, 0x011f, + 0x0121, 0x0121, + 0x0123, 0x0123, + 0x0125, 0x0125, + 0x0127, 0x0127, + 0x0129, 0x0129, + 0x012b, 0x012b, + 0x012d, 0x012d, + 0x012f, 0x012f, + 0x0131, 0x0131, + 0x0133, 0x0133, + 0x0135, 0x0135, + 0x0137, 0x0138, + 0x013a, 0x013a, + 0x013c, 0x013c, + 0x013e, 0x013e, + 0x0140, 0x0140, + 0x0142, 0x0142, + 0x0144, 0x0144, + 0x0146, 0x0146, + 0x0148, 0x0149, + 0x014b, 0x014b, + 0x014d, 0x014d, + 0x014f, 0x014f, + 0x0151, 0x0151, + 0x0153, 0x0153, + 0x0155, 0x0155, + 0x0157, 0x0157, + 0x0159, 0x0159, + 0x015b, 0x015b, + 0x015d, 0x015d, + 0x015f, 0x015f, + 0x0161, 0x0161, + 0x0163, 0x0163, + 0x0165, 0x0165, + 0x0167, 0x0167, + 0x0169, 0x0169, + 0x016b, 0x016b, + 0x016d, 0x016d, + 0x016f, 0x016f, + 0x0171, 0x0171, + 0x0173, 0x0173, + 0x0175, 0x0175, + 0x0177, 0x0177, + 0x017a, 0x017a, + 0x017c, 0x017c, + 0x017e, 0x0180, + 0x0183, 0x0183, + 0x0185, 0x0185, + 0x0188, 0x0188, + 0x018c, 0x018d, + 0x0192, 0x0192, + 0x0195, 0x0195, + 0x0199, 0x019b, + 0x019e, 0x019e, + 0x01a1, 0x01a1, + 0x01a3, 0x01a3, + 0x01a5, 0x01a5, + 0x01a8, 0x01a8, + 0x01aa, 0x01ab, + 0x01ad, 0x01ad, + 0x01b0, 0x01b0, + 0x01b4, 0x01b4, + 0x01b6, 0x01b6, + 0x01b9, 0x01ba, + 0x01bd, 0x01bf, + 0x01c6, 0x01c6, + 0x01c9, 0x01c9, + 0x01cc, 0x01cc, + 0x01ce, 0x01ce, + 0x01d0, 0x01d0, + 0x01d2, 0x01d2, + 0x01d4, 0x01d4, + 0x01d6, 0x01d6, + 0x01d8, 0x01d8, + 0x01da, 0x01da, + 0x01dc, 0x01dd, + 0x01df, 0x01df, + 0x01e1, 0x01e1, + 0x01e3, 0x01e3, + 0x01e5, 0x01e5, + 0x01e7, 0x01e7, + 0x01e9, 0x01e9, + 0x01eb, 0x01eb, + 0x01ed, 0x01ed, + 0x01ef, 0x01f0, + 0x01f3, 0x01f3, + 0x01f5, 0x01f5, + 0x01f9, 0x01f9, + 0x01fb, 0x01fb, + 0x01fd, 0x01fd, + 0x01ff, 0x01ff, + 0x0201, 0x0201, + 0x0203, 0x0203, + 0x0205, 0x0205, + 0x0207, 0x0207, + 0x0209, 0x0209, + 0x020b, 0x020b, + 0x020d, 0x020d, + 0x020f, 0x020f, + 0x0211, 0x0211, + 0x0213, 0x0213, + 0x0215, 0x0215, + 0x0217, 0x0217, + 0x0219, 0x0219, + 0x021b, 0x021b, + 0x021d, 0x021d, + 0x021f, 0x021f, + 0x0221, 0x0221, + 0x0223, 0x0223, + 0x0225, 0x0225, + 0x0227, 0x0227, + 0x0229, 0x0229, + 0x022b, 0x022b, + 0x022d, 0x022d, + 0x022f, 0x022f, + 0x0231, 0x0231, + 0x0233, 0x0236, + 0x0250, 0x02af, + 0x0390, 0x0390, + 0x03ac, 0x03ce, + 0x03d0, 0x03d1, + 0x03d5, 0x03d7, + 0x03d9, 0x03d9, + 0x03db, 0x03db, + 0x03dd, 0x03dd, + 0x03df, 0x03df, + 0x03e1, 0x03e1, + 0x03e3, 0x03e3, + 0x03e5, 0x03e5, + 0x03e7, 0x03e7, + 0x03e9, 0x03e9, + 0x03eb, 0x03eb, + 0x03ed, 0x03ed, + 0x03ef, 0x03f3, + 0x03f5, 0x03f5, + 0x03f8, 0x03f8, + 0x03fb, 0x03fb, + 0x0430, 0x045f, + 0x0461, 0x0461, + 0x0463, 0x0463, + 0x0465, 0x0465, + 0x0467, 0x0467, + 0x0469, 0x0469, + 0x046b, 0x046b, + 0x046d, 0x046d, + 0x046f, 0x046f, + 0x0471, 0x0471, + 0x0473, 0x0473, + 0x0475, 0x0475, + 0x0477, 0x0477, + 0x0479, 0x0479, + 0x047b, 0x047b, + 0x047d, 0x047d, + 0x047f, 0x047f, + 0x0481, 0x0481, + 0x048b, 0x048b, + 0x048d, 0x048d, + 0x048f, 0x048f, + 0x0491, 0x0491, + 0x0493, 0x0493, + 0x0495, 0x0495, + 0x0497, 0x0497, + 0x0499, 0x0499, + 0x049b, 0x049b, + 0x049d, 0x049d, + 0x049f, 0x049f, + 0x04a1, 0x04a1, + 0x04a3, 0x04a3, + 0x04a5, 0x04a5, + 0x04a7, 0x04a7, + 0x04a9, 0x04a9, + 0x04ab, 0x04ab, + 0x04ad, 0x04ad, + 0x04af, 0x04af, + 0x04b1, 0x04b1, + 0x04b3, 0x04b3, + 0x04b5, 0x04b5, + 0x04b7, 0x04b7, + 0x04b9, 0x04b9, + 0x04bb, 0x04bb, + 0x04bd, 0x04bd, + 0x04bf, 0x04bf, + 0x04c2, 0x04c2, + 0x04c4, 0x04c4, + 0x04c6, 0x04c6, + 0x04c8, 0x04c8, + 0x04ca, 0x04ca, + 0x04cc, 0x04cc, + 0x04ce, 0x04ce, + 0x04d1, 0x04d1, + 0x04d3, 0x04d3, + 0x04d5, 0x04d5, + 0x04d7, 0x04d7, + 0x04d9, 0x04d9, + 0x04db, 0x04db, + 0x04dd, 0x04dd, + 0x04df, 0x04df, + 0x04e1, 0x04e1, + 0x04e3, 0x04e3, + 0x04e5, 0x04e5, + 0x04e7, 0x04e7, + 0x04e9, 0x04e9, + 0x04eb, 0x04eb, + 0x04ed, 0x04ed, + 0x04ef, 0x04ef, + 0x04f1, 0x04f1, + 0x04f3, 0x04f3, + 0x04f5, 0x04f5, + 0x04f9, 0x04f9, + 0x0501, 0x0501, + 0x0503, 0x0503, + 0x0505, 0x0505, + 0x0507, 0x0507, + 0x0509, 0x0509, + 0x050b, 0x050b, + 0x050d, 0x050d, + 0x050f, 0x050f, + 0x0561, 0x0587, + 0x1d00, 0x1d2b, + 0x1d62, 0x1d6b, + 0x1e01, 0x1e01, + 0x1e03, 0x1e03, + 0x1e05, 0x1e05, + 0x1e07, 0x1e07, + 0x1e09, 0x1e09, + 0x1e0b, 0x1e0b, + 0x1e0d, 0x1e0d, + 0x1e0f, 0x1e0f, + 0x1e11, 0x1e11, + 0x1e13, 0x1e13, + 0x1e15, 0x1e15, + 0x1e17, 0x1e17, + 0x1e19, 0x1e19, + 0x1e1b, 0x1e1b, + 0x1e1d, 0x1e1d, + 0x1e1f, 0x1e1f, + 0x1e21, 0x1e21, + 0x1e23, 0x1e23, + 0x1e25, 0x1e25, + 0x1e27, 0x1e27, + 0x1e29, 0x1e29, + 0x1e2b, 0x1e2b, + 0x1e2d, 0x1e2d, + 0x1e2f, 0x1e2f, + 0x1e31, 0x1e31, + 0x1e33, 0x1e33, + 0x1e35, 0x1e35, + 0x1e37, 0x1e37, + 0x1e39, 0x1e39, + 0x1e3b, 0x1e3b, + 0x1e3d, 0x1e3d, + 0x1e3f, 0x1e3f, + 0x1e41, 0x1e41, + 0x1e43, 0x1e43, + 0x1e45, 0x1e45, + 0x1e47, 0x1e47, + 0x1e49, 0x1e49, + 0x1e4b, 0x1e4b, + 0x1e4d, 0x1e4d, + 0x1e4f, 0x1e4f, + 0x1e51, 0x1e51, + 0x1e53, 0x1e53, + 0x1e55, 0x1e55, + 0x1e57, 0x1e57, + 0x1e59, 0x1e59, + 0x1e5b, 0x1e5b, + 0x1e5d, 0x1e5d, + 0x1e5f, 0x1e5f, + 0x1e61, 0x1e61, + 0x1e63, 0x1e63, + 0x1e65, 0x1e65, + 0x1e67, 0x1e67, + 0x1e69, 0x1e69, + 0x1e6b, 0x1e6b, + 0x1e6d, 0x1e6d, + 0x1e6f, 0x1e6f, + 0x1e71, 0x1e71, + 0x1e73, 0x1e73, + 0x1e75, 0x1e75, + 0x1e77, 0x1e77, + 0x1e79, 0x1e79, + 0x1e7b, 0x1e7b, + 0x1e7d, 0x1e7d, + 0x1e7f, 0x1e7f, + 0x1e81, 0x1e81, + 0x1e83, 0x1e83, + 0x1e85, 0x1e85, + 0x1e87, 0x1e87, + 0x1e89, 0x1e89, + 0x1e8b, 0x1e8b, + 0x1e8d, 0x1e8d, + 0x1e8f, 0x1e8f, + 0x1e91, 0x1e91, + 0x1e93, 0x1e93, + 0x1e95, 0x1e9b, + 0x1ea1, 0x1ea1, + 0x1ea3, 0x1ea3, + 0x1ea5, 0x1ea5, + 0x1ea7, 0x1ea7, + 0x1ea9, 0x1ea9, + 0x1eab, 0x1eab, + 0x1ead, 0x1ead, + 0x1eaf, 0x1eaf, + 0x1eb1, 0x1eb1, + 0x1eb3, 0x1eb3, + 0x1eb5, 0x1eb5, + 0x1eb7, 0x1eb7, + 0x1eb9, 0x1eb9, + 0x1ebb, 0x1ebb, + 0x1ebd, 0x1ebd, + 0x1ebf, 0x1ebf, + 0x1ec1, 0x1ec1, + 0x1ec3, 0x1ec3, + 0x1ec5, 0x1ec5, + 0x1ec7, 0x1ec7, + 0x1ec9, 0x1ec9, + 0x1ecb, 0x1ecb, + 0x1ecd, 0x1ecd, + 0x1ecf, 0x1ecf, + 0x1ed1, 0x1ed1, + 0x1ed3, 0x1ed3, + 0x1ed5, 0x1ed5, + 0x1ed7, 0x1ed7, + 0x1ed9, 0x1ed9, + 0x1edb, 0x1edb, + 0x1edd, 0x1edd, + 0x1edf, 0x1edf, + 0x1ee1, 0x1ee1, + 0x1ee3, 0x1ee3, + 0x1ee5, 0x1ee5, + 0x1ee7, 0x1ee7, + 0x1ee9, 0x1ee9, + 0x1eeb, 0x1eeb, + 0x1eed, 0x1eed, + 0x1eef, 0x1eef, + 0x1ef1, 0x1ef1, + 0x1ef3, 0x1ef3, + 0x1ef5, 0x1ef5, + 0x1ef7, 0x1ef7, + 0x1ef9, 0x1ef9, + 0x1f00, 0x1f07, + 0x1f10, 0x1f15, + 0x1f20, 0x1f27, + 0x1f30, 0x1f37, + 0x1f40, 0x1f45, + 0x1f50, 0x1f57, + 0x1f60, 0x1f67, + 0x1f70, 0x1f7d, + 0x1f80, 0x1f87, + 0x1f90, 0x1f97, + 0x1fa0, 0x1fa7, + 0x1fb0, 0x1fb4, + 0x1fb6, 0x1fb7, + 0x1fbe, 0x1fbe, + 0x1fc2, 0x1fc4, + 0x1fc6, 0x1fc7, + 0x1fd0, 0x1fd3, + 0x1fd6, 0x1fd7, + 0x1fe0, 0x1fe7, + 0x1ff2, 0x1ff4, + 0x1ff6, 0x1ff7, + 0x2071, 0x2071, + 0x207f, 0x207f, + 0x210a, 0x210a, + 0x210e, 0x210f, + 0x2113, 0x2113, + 0x212f, 0x212f, + 0x2134, 0x2134, + 0x2139, 0x2139, + 0x213d, 0x213d, + 0x2146, 0x2149, + 0xfb00, 0xfb06, + 0xfb13, 0xfb17, + 0xff41, 0xff5a, + 0x10428, 0x1044f, + 0x1d41a, 0x1d433, + 0x1d44e, 0x1d454, + 0x1d456, 0x1d467, + 0x1d482, 0x1d49b, + 0x1d4b6, 0x1d4b9, + 0x1d4bb, 0x1d4bb, + 0x1d4bd, 0x1d4c3, + 0x1d4c5, 0x1d4cf, + 0x1d4ea, 0x1d503, + 0x1d51e, 0x1d537, + 0x1d552, 0x1d56b, + 0x1d586, 0x1d59f, + 0x1d5ba, 0x1d5d3, + 0x1d5ee, 0x1d607, + 0x1d622, 0x1d63b, + 0x1d656, 0x1d66f, + 0x1d68a, 0x1d6a3, + 0x1d6c2, 0x1d6da, + 0x1d6dc, 0x1d6e1, + 0x1d6fc, 0x1d714, + 0x1d716, 0x1d71b, + 0x1d736, 0x1d74e, + 0x1d750, 0x1d755, + 0x1d770, 0x1d788, + 0x1d78a, 0x1d78f, + 0x1d7aa, 0x1d7c2, + 0x1d7c4, 0x1d7c9 +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of MBLower */ + +static const OnigCodePoint SBPrint[] = { + 2, + 0x0009, 0x000d, + 0x0020, 0x007e +}; + +static const OnigCodePoint MBPrint[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 403, +#else + 2, +#endif + 0x0085, 0x0085, + 0x00a0, 0x0236 +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x0250, 0x0357, + 0x035d, 0x036f, + 0x0374, 0x0375, + 0x037a, 0x037a, + 0x037e, 0x037e, + 0x0384, 0x038a, + 0x038c, 0x038c, + 0x038e, 0x03a1, + 0x03a3, 0x03ce, + 0x03d0, 0x03fb, + 0x0400, 0x0486, + 0x0488, 0x04ce, + 0x04d0, 0x04f5, + 0x04f8, 0x04f9, + 0x0500, 0x050f, + 0x0531, 0x0556, + 0x0559, 0x055f, + 0x0561, 0x0587, + 0x0589, 0x058a, + 0x0591, 0x05a1, + 0x05a3, 0x05b9, + 0x05bb, 0x05c4, + 0x05d0, 0x05ea, + 0x05f0, 0x05f4, + 0x0600, 0x0603, + 0x060c, 0x0615, + 0x061b, 0x061b, + 0x061f, 0x061f, + 0x0621, 0x063a, + 0x0640, 0x0658, + 0x0660, 0x070d, + 0x070f, 0x074a, + 0x074d, 0x074f, + 0x0780, 0x07b1, + 0x0901, 0x0939, + 0x093c, 0x094d, + 0x0950, 0x0954, + 0x0958, 0x0970, + 0x0981, 0x0983, + 0x0985, 0x098c, + 0x098f, 0x0990, + 0x0993, 0x09a8, + 0x09aa, 0x09b0, + 0x09b2, 0x09b2, + 0x09b6, 0x09b9, + 0x09bc, 0x09c4, + 0x09c7, 0x09c8, + 0x09cb, 0x09cd, + 0x09d7, 0x09d7, + 0x09dc, 0x09dd, + 0x09df, 0x09e3, + 0x09e6, 0x09fa, + 0x0a01, 0x0a03, + 0x0a05, 0x0a0a, + 0x0a0f, 0x0a10, + 0x0a13, 0x0a28, + 0x0a2a, 0x0a30, + 0x0a32, 0x0a33, + 0x0a35, 0x0a36, + 0x0a38, 0x0a39, + 0x0a3c, 0x0a3c, + 0x0a3e, 0x0a42, + 0x0a47, 0x0a48, + 0x0a4b, 0x0a4d, + 0x0a59, 0x0a5c, + 0x0a5e, 0x0a5e, + 0x0a66, 0x0a74, + 0x0a81, 0x0a83, + 0x0a85, 0x0a8d, + 0x0a8f, 0x0a91, + 0x0a93, 0x0aa8, + 0x0aaa, 0x0ab0, + 0x0ab2, 0x0ab3, + 0x0ab5, 0x0ab9, + 0x0abc, 0x0ac5, + 0x0ac7, 0x0ac9, + 0x0acb, 0x0acd, + 0x0ad0, 0x0ad0, + 0x0ae0, 0x0ae3, + 0x0ae6, 0x0aef, + 0x0af1, 0x0af1, + 0x0b01, 0x0b03, + 0x0b05, 0x0b0c, + 0x0b0f, 0x0b10, + 0x0b13, 0x0b28, + 0x0b2a, 0x0b30, + 0x0b32, 0x0b33, + 0x0b35, 0x0b39, + 0x0b3c, 0x0b43, + 0x0b47, 0x0b48, + 0x0b4b, 0x0b4d, + 0x0b56, 0x0b57, + 0x0b5c, 0x0b5d, + 0x0b5f, 0x0b61, + 0x0b66, 0x0b71, + 0x0b82, 0x0b83, + 0x0b85, 0x0b8a, + 0x0b8e, 0x0b90, + 0x0b92, 0x0b95, + 0x0b99, 0x0b9a, + 0x0b9c, 0x0b9c, + 0x0b9e, 0x0b9f, + 0x0ba3, 0x0ba4, + 0x0ba8, 0x0baa, + 0x0bae, 0x0bb5, + 0x0bb7, 0x0bb9, + 0x0bbe, 0x0bc2, + 0x0bc6, 0x0bc8, + 0x0bca, 0x0bcd, + 0x0bd7, 0x0bd7, + 0x0be7, 0x0bfa, + 0x0c01, 0x0c03, + 0x0c05, 0x0c0c, + 0x0c0e, 0x0c10, + 0x0c12, 0x0c28, + 0x0c2a, 0x0c33, + 0x0c35, 0x0c39, + 0x0c3e, 0x0c44, + 0x0c46, 0x0c48, + 0x0c4a, 0x0c4d, + 0x0c55, 0x0c56, + 0x0c60, 0x0c61, + 0x0c66, 0x0c6f, + 0x0c82, 0x0c83, + 0x0c85, 0x0c8c, + 0x0c8e, 0x0c90, + 0x0c92, 0x0ca8, + 0x0caa, 0x0cb3, + 0x0cb5, 0x0cb9, + 0x0cbc, 0x0cc4, + 0x0cc6, 0x0cc8, + 0x0cca, 0x0ccd, + 0x0cd5, 0x0cd6, + 0x0cde, 0x0cde, + 0x0ce0, 0x0ce1, + 0x0ce6, 0x0cef, + 0x0d02, 0x0d03, + 0x0d05, 0x0d0c, + 0x0d0e, 0x0d10, + 0x0d12, 0x0d28, + 0x0d2a, 0x0d39, + 0x0d3e, 0x0d43, + 0x0d46, 0x0d48, + 0x0d4a, 0x0d4d, + 0x0d57, 0x0d57, + 0x0d60, 0x0d61, + 0x0d66, 0x0d6f, + 0x0d82, 0x0d83, + 0x0d85, 0x0d96, + 0x0d9a, 0x0db1, + 0x0db3, 0x0dbb, + 0x0dbd, 0x0dbd, + 0x0dc0, 0x0dc6, + 0x0dca, 0x0dca, + 0x0dcf, 0x0dd4, + 0x0dd6, 0x0dd6, + 0x0dd8, 0x0ddf, + 0x0df2, 0x0df4, + 0x0e01, 0x0e3a, + 0x0e3f, 0x0e5b, + 0x0e81, 0x0e82, + 0x0e84, 0x0e84, + 0x0e87, 0x0e88, + 0x0e8a, 0x0e8a, + 0x0e8d, 0x0e8d, + 0x0e94, 0x0e97, + 0x0e99, 0x0e9f, + 0x0ea1, 0x0ea3, + 0x0ea5, 0x0ea5, + 0x0ea7, 0x0ea7, + 0x0eaa, 0x0eab, + 0x0ead, 0x0eb9, + 0x0ebb, 0x0ebd, + 0x0ec0, 0x0ec4, + 0x0ec6, 0x0ec6, + 0x0ec8, 0x0ecd, + 0x0ed0, 0x0ed9, + 0x0edc, 0x0edd, + 0x0f00, 0x0f47, + 0x0f49, 0x0f6a, + 0x0f71, 0x0f8b, + 0x0f90, 0x0f97, + 0x0f99, 0x0fbc, + 0x0fbe, 0x0fcc, + 0x0fcf, 0x0fcf, + 0x1000, 0x1021, + 0x1023, 0x1027, + 0x1029, 0x102a, + 0x102c, 0x1032, + 0x1036, 0x1039, + 0x1040, 0x1059, + 0x10a0, 0x10c5, + 0x10d0, 0x10f8, + 0x10fb, 0x10fb, + 0x1100, 0x1159, + 0x115f, 0x11a2, + 0x11a8, 0x11f9, + 0x1200, 0x1206, + 0x1208, 0x1246, + 0x1248, 0x1248, + 0x124a, 0x124d, + 0x1250, 0x1256, + 0x1258, 0x1258, + 0x125a, 0x125d, + 0x1260, 0x1286, + 0x1288, 0x1288, + 0x128a, 0x128d, + 0x1290, 0x12ae, + 0x12b0, 0x12b0, + 0x12b2, 0x12b5, + 0x12b8, 0x12be, + 0x12c0, 0x12c0, + 0x12c2, 0x12c5, + 0x12c8, 0x12ce, + 0x12d0, 0x12d6, + 0x12d8, 0x12ee, + 0x12f0, 0x130e, + 0x1310, 0x1310, + 0x1312, 0x1315, + 0x1318, 0x131e, + 0x1320, 0x1346, + 0x1348, 0x135a, + 0x1361, 0x137c, + 0x13a0, 0x13f4, + 0x1401, 0x1676, + 0x1680, 0x169c, + 0x16a0, 0x16f0, + 0x1700, 0x170c, + 0x170e, 0x1714, + 0x1720, 0x1736, + 0x1740, 0x1753, + 0x1760, 0x176c, + 0x176e, 0x1770, + 0x1772, 0x1773, + 0x1780, 0x17dd, + 0x17e0, 0x17e9, + 0x17f0, 0x17f9, + 0x1800, 0x180e, + 0x1810, 0x1819, + 0x1820, 0x1877, + 0x1880, 0x18a9, + 0x1900, 0x191c, + 0x1920, 0x192b, + 0x1930, 0x193b, + 0x1940, 0x1940, + 0x1944, 0x196d, + 0x1970, 0x1974, + 0x19e0, 0x19ff, + 0x1d00, 0x1d6b, + 0x1e00, 0x1e9b, + 0x1ea0, 0x1ef9, + 0x1f00, 0x1f15, + 0x1f18, 0x1f1d, + 0x1f20, 0x1f45, + 0x1f48, 0x1f4d, + 0x1f50, 0x1f57, + 0x1f59, 0x1f59, + 0x1f5b, 0x1f5b, + 0x1f5d, 0x1f5d, + 0x1f5f, 0x1f7d, + 0x1f80, 0x1fb4, + 0x1fb6, 0x1fc4, + 0x1fc6, 0x1fd3, + 0x1fd6, 0x1fdb, + 0x1fdd, 0x1fef, + 0x1ff2, 0x1ff4, + 0x1ff6, 0x1ffe, + 0x2000, 0x2054, + 0x2057, 0x2057, + 0x205f, 0x2063, + 0x206a, 0x2071, + 0x2074, 0x208e, + 0x20a0, 0x20b1, + 0x20d0, 0x20ea, + 0x2100, 0x213b, + 0x213d, 0x214b, + 0x2153, 0x2183, + 0x2190, 0x23d0, + 0x2400, 0x2426, + 0x2440, 0x244a, + 0x2460, 0x2617, + 0x2619, 0x267d, + 0x2680, 0x2691, + 0x26a0, 0x26a1, + 0x2701, 0x2704, + 0x2706, 0x2709, + 0x270c, 0x2727, + 0x2729, 0x274b, + 0x274d, 0x274d, + 0x274f, 0x2752, + 0x2756, 0x2756, + 0x2758, 0x275e, + 0x2761, 0x2794, + 0x2798, 0x27af, + 0x27b1, 0x27be, + 0x27d0, 0x27eb, + 0x27f0, 0x2b0d, + 0x2e80, 0x2e99, + 0x2e9b, 0x2ef3, + 0x2f00, 0x2fd5, + 0x2ff0, 0x2ffb, + 0x3000, 0x303f, + 0x3041, 0x3096, + 0x3099, 0x30ff, + 0x3105, 0x312c, + 0x3131, 0x318e, + 0x3190, 0x31b7, + 0x31f0, 0x321e, + 0x3220, 0x3243, + 0x3250, 0x327d, + 0x327f, 0x32fe, + 0x3300, 0x4db5, + 0x4dc0, 0x9fa5, + 0xa000, 0xa48c, + 0xa490, 0xa4c6, + 0xac00, 0xd7a3, + 0xe000, 0xfa2d, + 0xfa30, 0xfa6a, + 0xfb00, 0xfb06, + 0xfb13, 0xfb17, + 0xfb1d, 0xfb36, + 0xfb38, 0xfb3c, + 0xfb3e, 0xfb3e, + 0xfb40, 0xfb41, + 0xfb43, 0xfb44, + 0xfb46, 0xfbb1, + 0xfbd3, 0xfd3f, + 0xfd50, 0xfd8f, + 0xfd92, 0xfdc7, + 0xfdf0, 0xfdfd, + 0xfe00, 0xfe0f, + 0xfe20, 0xfe23, + 0xfe30, 0xfe52, + 0xfe54, 0xfe66, + 0xfe68, 0xfe6b, + 0xfe70, 0xfe74, + 0xfe76, 0xfefc, + 0xfeff, 0xfeff, + 0xff01, 0xffbe, + 0xffc2, 0xffc7, + 0xffca, 0xffcf, + 0xffd2, 0xffd7, + 0xffda, 0xffdc, + 0xffe0, 0xffe6, + 0xffe8, 0xffee, + 0xfff9, 0xfffd, + 0x10000, 0x1000b, + 0x1000d, 0x10026, + 0x10028, 0x1003a, + 0x1003c, 0x1003d, + 0x1003f, 0x1004d, + 0x10050, 0x1005d, + 0x10080, 0x100fa, + 0x10100, 0x10102, + 0x10107, 0x10133, + 0x10137, 0x1013f, + 0x10300, 0x1031e, + 0x10320, 0x10323, + 0x10330, 0x1034a, + 0x10380, 0x1039d, + 0x1039f, 0x1039f, + 0x10400, 0x1049d, + 0x104a0, 0x104a9, + 0x10800, 0x10805, + 0x10808, 0x10808, + 0x1080a, 0x10835, + 0x10837, 0x10838, + 0x1083c, 0x1083c, + 0x1083f, 0x1083f, + 0x1d000, 0x1d0f5, + 0x1d100, 0x1d126, + 0x1d12a, 0x1d1dd, + 0x1d300, 0x1d356, + 0x1d400, 0x1d454, + 0x1d456, 0x1d49c, + 0x1d49e, 0x1d49f, + 0x1d4a2, 0x1d4a2, + 0x1d4a5, 0x1d4a6, + 0x1d4a9, 0x1d4ac, + 0x1d4ae, 0x1d4b9, + 0x1d4bb, 0x1d4bb, + 0x1d4bd, 0x1d4c3, + 0x1d4c5, 0x1d505, + 0x1d507, 0x1d50a, + 0x1d50d, 0x1d514, + 0x1d516, 0x1d51c, + 0x1d51e, 0x1d539, + 0x1d53b, 0x1d53e, + 0x1d540, 0x1d544, + 0x1d546, 0x1d546, + 0x1d54a, 0x1d550, + 0x1d552, 0x1d6a3, + 0x1d6a8, 0x1d7c9, + 0x1d7ce, 0x1d7ff, + 0x20000, 0x2a6d6, + 0x2f800, 0x2fa1d, + 0xe0001, 0xe0001, + 0xe0020, 0xe007f, + 0xe0100, 0xe01ef, + 0xf0000, 0xffffd, + 0x100000, 0x10fffd +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of MBPrint */ + +static const OnigCodePoint SBPunct[] = { + 9, + 0x0021, 0x0023, + 0x0025, 0x002a, + 0x002c, 0x002f, + 0x003a, 0x003b, + 0x003f, 0x0040, + 0x005b, 0x005d, + 0x005f, 0x005f, + 0x007b, 0x007b, + 0x007d, 0x007d +}; /* end of SBPunct */ + +static const OnigCodePoint MBPunct[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 77, +#else + 5, +#endif + 0x00a1, 0x00a1, + 0x00ab, 0x00ab, + 0x00b7, 0x00b7, + 0x00bb, 0x00bb, + 0x00bf, 0x00bf +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x037e, 0x037e, + 0x0387, 0x0387, + 0x055a, 0x055f, + 0x0589, 0x058a, + 0x05be, 0x05be, + 0x05c0, 0x05c0, + 0x05c3, 0x05c3, + 0x05f3, 0x05f4, + 0x060c, 0x060d, + 0x061b, 0x061b, + 0x061f, 0x061f, + 0x066a, 0x066d, + 0x06d4, 0x06d4, + 0x0700, 0x070d, + 0x0964, 0x0965, + 0x0970, 0x0970, + 0x0df4, 0x0df4, + 0x0e4f, 0x0e4f, + 0x0e5a, 0x0e5b, + 0x0f04, 0x0f12, + 0x0f3a, 0x0f3d, + 0x0f85, 0x0f85, + 0x104a, 0x104f, + 0x10fb, 0x10fb, + 0x1361, 0x1368, + 0x166d, 0x166e, + 0x169b, 0x169c, + 0x16eb, 0x16ed, + 0x1735, 0x1736, + 0x17d4, 0x17d6, + 0x17d8, 0x17da, + 0x1800, 0x180a, + 0x1944, 0x1945, + 0x2010, 0x2027, + 0x2030, 0x2043, + 0x2045, 0x2051, + 0x2053, 0x2054, + 0x2057, 0x2057, + 0x207d, 0x207e, + 0x208d, 0x208e, + 0x2329, 0x232a, + 0x23b4, 0x23b6, + 0x2768, 0x2775, + 0x27e6, 0x27eb, + 0x2983, 0x2998, + 0x29d8, 0x29db, + 0x29fc, 0x29fd, + 0x3001, 0x3003, + 0x3008, 0x3011, + 0x3014, 0x301f, + 0x3030, 0x3030, + 0x303d, 0x303d, + 0x30a0, 0x30a0, + 0x30fb, 0x30fb, + 0xfd3e, 0xfd3f, + 0xfe30, 0xfe52, + 0xfe54, 0xfe61, + 0xfe63, 0xfe63, + 0xfe68, 0xfe68, + 0xfe6a, 0xfe6b, + 0xff01, 0xff03, + 0xff05, 0xff0a, + 0xff0c, 0xff0f, + 0xff1a, 0xff1b, + 0xff1f, 0xff20, + 0xff3b, 0xff3d, + 0xff3f, 0xff3f, + 0xff5b, 0xff5b, + 0xff5d, 0xff5d, + 0xff5f, 0xff65, + 0x10100, 0x10101, + 0x1039f, 0x1039f +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of MBPunct */ + +static const OnigCodePoint SBSpace[] = { + 2, + 0x0009, 0x000d, + 0x0020, 0x0020 +}; + +static const OnigCodePoint MBSpace[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 9, +#else + 2, +#endif + 0x0085, 0x0085, + 0x00a0, 0x00a0 +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x1680, 0x1680, + 0x180e, 0x180e, + 0x2000, 0x200a, + 0x2028, 0x2029, + 0x202f, 0x202f, + 0x205f, 0x205f, + 0x3000, 0x3000 +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of MBSpace */ + +static const OnigCodePoint SBUpper[] = { + 1, + 0x0041, 0x005a +}; + +static const OnigCodePoint MBUpper[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 420, +#else + 2, +#endif + 0x00c0, 0x00d6, + 0x00d8, 0x00de +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + , + 0x0100, 0x0100, + 0x0102, 0x0102, + 0x0104, 0x0104, + 0x0106, 0x0106, + 0x0108, 0x0108, + 0x010a, 0x010a, + 0x010c, 0x010c, + 0x010e, 0x010e, + 0x0110, 0x0110, + 0x0112, 0x0112, + 0x0114, 0x0114, + 0x0116, 0x0116, + 0x0118, 0x0118, + 0x011a, 0x011a, + 0x011c, 0x011c, + 0x011e, 0x011e, + 0x0120, 0x0120, + 0x0122, 0x0122, + 0x0124, 0x0124, + 0x0126, 0x0126, + 0x0128, 0x0128, + 0x012a, 0x012a, + 0x012c, 0x012c, + 0x012e, 0x012e, + 0x0130, 0x0130, + 0x0132, 0x0132, + 0x0134, 0x0134, + 0x0136, 0x0136, + 0x0139, 0x0139, + 0x013b, 0x013b, + 0x013d, 0x013d, + 0x013f, 0x013f, + 0x0141, 0x0141, + 0x0143, 0x0143, + 0x0145, 0x0145, + 0x0147, 0x0147, + 0x014a, 0x014a, + 0x014c, 0x014c, + 0x014e, 0x014e, + 0x0150, 0x0150, + 0x0152, 0x0152, + 0x0154, 0x0154, + 0x0156, 0x0156, + 0x0158, 0x0158, + 0x015a, 0x015a, + 0x015c, 0x015c, + 0x015e, 0x015e, + 0x0160, 0x0160, + 0x0162, 0x0162, + 0x0164, 0x0164, + 0x0166, 0x0166, + 0x0168, 0x0168, + 0x016a, 0x016a, + 0x016c, 0x016c, + 0x016e, 0x016e, + 0x0170, 0x0170, + 0x0172, 0x0172, + 0x0174, 0x0174, + 0x0176, 0x0176, + 0x0178, 0x0179, + 0x017b, 0x017b, + 0x017d, 0x017d, + 0x0181, 0x0182, + 0x0184, 0x0184, + 0x0186, 0x0187, + 0x0189, 0x018b, + 0x018e, 0x0191, + 0x0193, 0x0194, + 0x0196, 0x0198, + 0x019c, 0x019d, + 0x019f, 0x01a0, + 0x01a2, 0x01a2, + 0x01a4, 0x01a4, + 0x01a6, 0x01a7, + 0x01a9, 0x01a9, + 0x01ac, 0x01ac, + 0x01ae, 0x01af, + 0x01b1, 0x01b3, + 0x01b5, 0x01b5, + 0x01b7, 0x01b8, + 0x01bc, 0x01bc, + 0x01c4, 0x01c4, + 0x01c7, 0x01c7, + 0x01ca, 0x01ca, + 0x01cd, 0x01cd, + 0x01cf, 0x01cf, + 0x01d1, 0x01d1, + 0x01d3, 0x01d3, + 0x01d5, 0x01d5, + 0x01d7, 0x01d7, + 0x01d9, 0x01d9, + 0x01db, 0x01db, + 0x01de, 0x01de, + 0x01e0, 0x01e0, + 0x01e2, 0x01e2, + 0x01e4, 0x01e4, + 0x01e6, 0x01e6, + 0x01e8, 0x01e8, + 0x01ea, 0x01ea, + 0x01ec, 0x01ec, + 0x01ee, 0x01ee, + 0x01f1, 0x01f1, + 0x01f4, 0x01f4, + 0x01f6, 0x01f8, + 0x01fa, 0x01fa, + 0x01fc, 0x01fc, + 0x01fe, 0x01fe, + 0x0200, 0x0200, + 0x0202, 0x0202, + 0x0204, 0x0204, + 0x0206, 0x0206, + 0x0208, 0x0208, + 0x020a, 0x020a, + 0x020c, 0x020c, + 0x020e, 0x020e, + 0x0210, 0x0210, + 0x0212, 0x0212, + 0x0214, 0x0214, + 0x0216, 0x0216, + 0x0218, 0x0218, + 0x021a, 0x021a, + 0x021c, 0x021c, + 0x021e, 0x021e, + 0x0220, 0x0220, + 0x0222, 0x0222, + 0x0224, 0x0224, + 0x0226, 0x0226, + 0x0228, 0x0228, + 0x022a, 0x022a, + 0x022c, 0x022c, + 0x022e, 0x022e, + 0x0230, 0x0230, + 0x0232, 0x0232, + 0x0386, 0x0386, + 0x0388, 0x038a, + 0x038c, 0x038c, + 0x038e, 0x038f, + 0x0391, 0x03a1, + 0x03a3, 0x03ab, + 0x03d2, 0x03d4, + 0x03d8, 0x03d8, + 0x03da, 0x03da, + 0x03dc, 0x03dc, + 0x03de, 0x03de, + 0x03e0, 0x03e0, + 0x03e2, 0x03e2, + 0x03e4, 0x03e4, + 0x03e6, 0x03e6, + 0x03e8, 0x03e8, + 0x03ea, 0x03ea, + 0x03ec, 0x03ec, + 0x03ee, 0x03ee, + 0x03f4, 0x03f4, + 0x03f7, 0x03f7, + 0x03f9, 0x03fa, + 0x0400, 0x042f, + 0x0460, 0x0460, + 0x0462, 0x0462, + 0x0464, 0x0464, + 0x0466, 0x0466, + 0x0468, 0x0468, + 0x046a, 0x046a, + 0x046c, 0x046c, + 0x046e, 0x046e, + 0x0470, 0x0470, + 0x0472, 0x0472, + 0x0474, 0x0474, + 0x0476, 0x0476, + 0x0478, 0x0478, + 0x047a, 0x047a, + 0x047c, 0x047c, + 0x047e, 0x047e, + 0x0480, 0x0480, + 0x048a, 0x048a, + 0x048c, 0x048c, + 0x048e, 0x048e, + 0x0490, 0x0490, + 0x0492, 0x0492, + 0x0494, 0x0494, + 0x0496, 0x0496, + 0x0498, 0x0498, + 0x049a, 0x049a, + 0x049c, 0x049c, + 0x049e, 0x049e, + 0x04a0, 0x04a0, + 0x04a2, 0x04a2, + 0x04a4, 0x04a4, + 0x04a6, 0x04a6, + 0x04a8, 0x04a8, + 0x04aa, 0x04aa, + 0x04ac, 0x04ac, + 0x04ae, 0x04ae, + 0x04b0, 0x04b0, + 0x04b2, 0x04b2, + 0x04b4, 0x04b4, + 0x04b6, 0x04b6, + 0x04b8, 0x04b8, + 0x04ba, 0x04ba, + 0x04bc, 0x04bc, + 0x04be, 0x04be, + 0x04c0, 0x04c1, + 0x04c3, 0x04c3, + 0x04c5, 0x04c5, + 0x04c7, 0x04c7, + 0x04c9, 0x04c9, + 0x04cb, 0x04cb, + 0x04cd, 0x04cd, + 0x04d0, 0x04d0, + 0x04d2, 0x04d2, + 0x04d4, 0x04d4, + 0x04d6, 0x04d6, + 0x04d8, 0x04d8, + 0x04da, 0x04da, + 0x04dc, 0x04dc, + 0x04de, 0x04de, + 0x04e0, 0x04e0, + 0x04e2, 0x04e2, + 0x04e4, 0x04e4, + 0x04e6, 0x04e6, + 0x04e8, 0x04e8, + 0x04ea, 0x04ea, + 0x04ec, 0x04ec, + 0x04ee, 0x04ee, + 0x04f0, 0x04f0, + 0x04f2, 0x04f2, + 0x04f4, 0x04f4, + 0x04f8, 0x04f8, + 0x0500, 0x0500, + 0x0502, 0x0502, + 0x0504, 0x0504, + 0x0506, 0x0506, + 0x0508, 0x0508, + 0x050a, 0x050a, + 0x050c, 0x050c, + 0x050e, 0x050e, + 0x0531, 0x0556, + 0x10a0, 0x10c5, + 0x1e00, 0x1e00, + 0x1e02, 0x1e02, + 0x1e04, 0x1e04, + 0x1e06, 0x1e06, + 0x1e08, 0x1e08, + 0x1e0a, 0x1e0a, + 0x1e0c, 0x1e0c, + 0x1e0e, 0x1e0e, + 0x1e10, 0x1e10, + 0x1e12, 0x1e12, + 0x1e14, 0x1e14, + 0x1e16, 0x1e16, + 0x1e18, 0x1e18, + 0x1e1a, 0x1e1a, + 0x1e1c, 0x1e1c, + 0x1e1e, 0x1e1e, + 0x1e20, 0x1e20, + 0x1e22, 0x1e22, + 0x1e24, 0x1e24, + 0x1e26, 0x1e26, + 0x1e28, 0x1e28, + 0x1e2a, 0x1e2a, + 0x1e2c, 0x1e2c, + 0x1e2e, 0x1e2e, + 0x1e30, 0x1e30, + 0x1e32, 0x1e32, + 0x1e34, 0x1e34, + 0x1e36, 0x1e36, + 0x1e38, 0x1e38, + 0x1e3a, 0x1e3a, + 0x1e3c, 0x1e3c, + 0x1e3e, 0x1e3e, + 0x1e40, 0x1e40, + 0x1e42, 0x1e42, + 0x1e44, 0x1e44, + 0x1e46, 0x1e46, + 0x1e48, 0x1e48, + 0x1e4a, 0x1e4a, + 0x1e4c, 0x1e4c, + 0x1e4e, 0x1e4e, + 0x1e50, 0x1e50, + 0x1e52, 0x1e52, + 0x1e54, 0x1e54, + 0x1e56, 0x1e56, + 0x1e58, 0x1e58, + 0x1e5a, 0x1e5a, + 0x1e5c, 0x1e5c, + 0x1e5e, 0x1e5e, + 0x1e60, 0x1e60, + 0x1e62, 0x1e62, + 0x1e64, 0x1e64, + 0x1e66, 0x1e66, + 0x1e68, 0x1e68, + 0x1e6a, 0x1e6a, + 0x1e6c, 0x1e6c, + 0x1e6e, 0x1e6e, + 0x1e70, 0x1e70, + 0x1e72, 0x1e72, + 0x1e74, 0x1e74, + 0x1e76, 0x1e76, + 0x1e78, 0x1e78, + 0x1e7a, 0x1e7a, + 0x1e7c, 0x1e7c, + 0x1e7e, 0x1e7e, + 0x1e80, 0x1e80, + 0x1e82, 0x1e82, + 0x1e84, 0x1e84, + 0x1e86, 0x1e86, + 0x1e88, 0x1e88, + 0x1e8a, 0x1e8a, + 0x1e8c, 0x1e8c, + 0x1e8e, 0x1e8e, + 0x1e90, 0x1e90, + 0x1e92, 0x1e92, + 0x1e94, 0x1e94, + 0x1ea0, 0x1ea0, + 0x1ea2, 0x1ea2, + 0x1ea4, 0x1ea4, + 0x1ea6, 0x1ea6, + 0x1ea8, 0x1ea8, + 0x1eaa, 0x1eaa, + 0x1eac, 0x1eac, + 0x1eae, 0x1eae, + 0x1eb0, 0x1eb0, + 0x1eb2, 0x1eb2, + 0x1eb4, 0x1eb4, + 0x1eb6, 0x1eb6, + 0x1eb8, 0x1eb8, + 0x1eba, 0x1eba, + 0x1ebc, 0x1ebc, + 0x1ebe, 0x1ebe, + 0x1ec0, 0x1ec0, + 0x1ec2, 0x1ec2, + 0x1ec4, 0x1ec4, + 0x1ec6, 0x1ec6, + 0x1ec8, 0x1ec8, + 0x1eca, 0x1eca, + 0x1ecc, 0x1ecc, + 0x1ece, 0x1ece, + 0x1ed0, 0x1ed0, + 0x1ed2, 0x1ed2, + 0x1ed4, 0x1ed4, + 0x1ed6, 0x1ed6, + 0x1ed8, 0x1ed8, + 0x1eda, 0x1eda, + 0x1edc, 0x1edc, + 0x1ede, 0x1ede, + 0x1ee0, 0x1ee0, + 0x1ee2, 0x1ee2, + 0x1ee4, 0x1ee4, + 0x1ee6, 0x1ee6, + 0x1ee8, 0x1ee8, + 0x1eea, 0x1eea, + 0x1eec, 0x1eec, + 0x1eee, 0x1eee, + 0x1ef0, 0x1ef0, + 0x1ef2, 0x1ef2, + 0x1ef4, 0x1ef4, + 0x1ef6, 0x1ef6, + 0x1ef8, 0x1ef8, + 0x1f08, 0x1f0f, + 0x1f18, 0x1f1d, + 0x1f28, 0x1f2f, + 0x1f38, 0x1f3f, + 0x1f48, 0x1f4d, + 0x1f59, 0x1f59, + 0x1f5b, 0x1f5b, + 0x1f5d, 0x1f5d, + 0x1f5f, 0x1f5f, + 0x1f68, 0x1f6f, + 0x1fb8, 0x1fbb, + 0x1fc8, 0x1fcb, + 0x1fd8, 0x1fdb, + 0x1fe8, 0x1fec, + 0x1ff8, 0x1ffb, + 0x2102, 0x2102, + 0x2107, 0x2107, + 0x210b, 0x210d, + 0x2110, 0x2112, + 0x2115, 0x2115, + 0x2119, 0x211d, + 0x2124, 0x2124, + 0x2126, 0x2126, + 0x2128, 0x2128, + 0x212a, 0x212d, + 0x2130, 0x2131, + 0x2133, 0x2133, + 0x213e, 0x213f, + 0x2145, 0x2145, + 0xff21, 0xff3a, + 0x10400, 0x10427, + 0x1d400, 0x1d419, + 0x1d434, 0x1d44d, + 0x1d468, 0x1d481, + 0x1d49c, 0x1d49c, + 0x1d49e, 0x1d49f, + 0x1d4a2, 0x1d4a2, + 0x1d4a5, 0x1d4a6, + 0x1d4a9, 0x1d4ac, + 0x1d4ae, 0x1d4b5, + 0x1d4d0, 0x1d4e9, + 0x1d504, 0x1d505, + 0x1d507, 0x1d50a, + 0x1d50d, 0x1d514, + 0x1d516, 0x1d51c, + 0x1d538, 0x1d539, + 0x1d53b, 0x1d53e, + 0x1d540, 0x1d544, + 0x1d546, 0x1d546, + 0x1d54a, 0x1d550, + 0x1d56c, 0x1d585, + 0x1d5a0, 0x1d5b9, + 0x1d5d4, 0x1d5ed, + 0x1d608, 0x1d621, + 0x1d63c, 0x1d655, + 0x1d670, 0x1d689, + 0x1d6a8, 0x1d6c0, + 0x1d6e2, 0x1d6fa, + 0x1d71c, 0x1d734, + 0x1d756, 0x1d76e, + 0x1d790, 0x1d7a8 +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of MBUpper */ + +static const OnigCodePoint SBXDigit[] = { + 3, + 0x0030, 0x0039, + 0x0041, 0x0046, + 0x0061, 0x0066 +}; + +static const OnigCodePoint SBASCII[] = { + 1, + 0x0000, 0x007f +}; + +static const OnigCodePoint SBWord[] = { + 4, + 0x0030, 0x0039, + 0x0041, 0x005a, + 0x005f, 0x005f, + 0x0061, 0x007a +}; + +static const OnigCodePoint MBWord[] = { +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + 432, +#else + 8, +#endif + 0x00aa, 0x00aa, + 0x00b2, 0x00b3, + 0x00b5, 0x00b5, + 0x00b9, 0x00ba, + 0x00bc, 0x00be, + 0x00c0, 0x00d6, + 0x00d8, 0x00f6, +#ifndef USE_UNICODE_FULL_RANGE_CTYPE + 0x00f8, 0x7fffffff +#else /* not USE_UNICODE_FULL_RANGE_CTYPE */ + 0x00f8, 0x0236, + 0x0250, 0x02c1, + 0x02c6, 0x02d1, + 0x02e0, 0x02e4, + 0x02ee, 0x02ee, + 0x0300, 0x0357, + 0x035d, 0x036f, + 0x037a, 0x037a, + 0x0386, 0x0386, + 0x0388, 0x038a, + 0x038c, 0x038c, + 0x038e, 0x03a1, + 0x03a3, 0x03ce, + 0x03d0, 0x03f5, + 0x03f7, 0x03fb, + 0x0400, 0x0481, + 0x0483, 0x0486, + 0x0488, 0x04ce, + 0x04d0, 0x04f5, + 0x04f8, 0x04f9, + 0x0500, 0x050f, + 0x0531, 0x0556, + 0x0559, 0x0559, + 0x0561, 0x0587, + 0x0591, 0x05a1, + 0x05a3, 0x05b9, + 0x05bb, 0x05bd, + 0x05bf, 0x05bf, + 0x05c1, 0x05c2, + 0x05c4, 0x05c4, + 0x05d0, 0x05ea, + 0x05f0, 0x05f2, + 0x0610, 0x0615, + 0x0621, 0x063a, + 0x0640, 0x0658, + 0x0660, 0x0669, + 0x066e, 0x06d3, + 0x06d5, 0x06dc, + 0x06de, 0x06e8, + 0x06ea, 0x06fc, + 0x06ff, 0x06ff, + 0x0710, 0x074a, + 0x074d, 0x074f, + 0x0780, 0x07b1, + 0x0901, 0x0939, + 0x093c, 0x094d, + 0x0950, 0x0954, + 0x0958, 0x0963, + 0x0966, 0x096f, + 0x0981, 0x0983, + 0x0985, 0x098c, + 0x098f, 0x0990, + 0x0993, 0x09a8, + 0x09aa, 0x09b0, + 0x09b2, 0x09b2, + 0x09b6, 0x09b9, + 0x09bc, 0x09c4, + 0x09c7, 0x09c8, + 0x09cb, 0x09cd, + 0x09d7, 0x09d7, + 0x09dc, 0x09dd, + 0x09df, 0x09e3, + 0x09e6, 0x09f1, + 0x09f4, 0x09f9, + 0x0a01, 0x0a03, + 0x0a05, 0x0a0a, + 0x0a0f, 0x0a10, + 0x0a13, 0x0a28, + 0x0a2a, 0x0a30, + 0x0a32, 0x0a33, + 0x0a35, 0x0a36, + 0x0a38, 0x0a39, + 0x0a3c, 0x0a3c, + 0x0a3e, 0x0a42, + 0x0a47, 0x0a48, + 0x0a4b, 0x0a4d, + 0x0a59, 0x0a5c, + 0x0a5e, 0x0a5e, + 0x0a66, 0x0a74, + 0x0a81, 0x0a83, + 0x0a85, 0x0a8d, + 0x0a8f, 0x0a91, + 0x0a93, 0x0aa8, + 0x0aaa, 0x0ab0, + 0x0ab2, 0x0ab3, + 0x0ab5, 0x0ab9, + 0x0abc, 0x0ac5, + 0x0ac7, 0x0ac9, + 0x0acb, 0x0acd, + 0x0ad0, 0x0ad0, + 0x0ae0, 0x0ae3, + 0x0ae6, 0x0aef, + 0x0b01, 0x0b03, + 0x0b05, 0x0b0c, + 0x0b0f, 0x0b10, + 0x0b13, 0x0b28, + 0x0b2a, 0x0b30, + 0x0b32, 0x0b33, + 0x0b35, 0x0b39, + 0x0b3c, 0x0b43, + 0x0b47, 0x0b48, + 0x0b4b, 0x0b4d, + 0x0b56, 0x0b57, + 0x0b5c, 0x0b5d, + 0x0b5f, 0x0b61, + 0x0b66, 0x0b6f, + 0x0b71, 0x0b71, + 0x0b82, 0x0b83, + 0x0b85, 0x0b8a, + 0x0b8e, 0x0b90, + 0x0b92, 0x0b95, + 0x0b99, 0x0b9a, + 0x0b9c, 0x0b9c, + 0x0b9e, 0x0b9f, + 0x0ba3, 0x0ba4, + 0x0ba8, 0x0baa, + 0x0bae, 0x0bb5, + 0x0bb7, 0x0bb9, + 0x0bbe, 0x0bc2, + 0x0bc6, 0x0bc8, + 0x0bca, 0x0bcd, + 0x0bd7, 0x0bd7, + 0x0be7, 0x0bf2, + 0x0c01, 0x0c03, + 0x0c05, 0x0c0c, + 0x0c0e, 0x0c10, + 0x0c12, 0x0c28, + 0x0c2a, 0x0c33, + 0x0c35, 0x0c39, + 0x0c3e, 0x0c44, + 0x0c46, 0x0c48, + 0x0c4a, 0x0c4d, + 0x0c55, 0x0c56, + 0x0c60, 0x0c61, + 0x0c66, 0x0c6f, + 0x0c82, 0x0c83, + 0x0c85, 0x0c8c, + 0x0c8e, 0x0c90, + 0x0c92, 0x0ca8, + 0x0caa, 0x0cb3, + 0x0cb5, 0x0cb9, + 0x0cbc, 0x0cc4, + 0x0cc6, 0x0cc8, + 0x0cca, 0x0ccd, + 0x0cd5, 0x0cd6, + 0x0cde, 0x0cde, + 0x0ce0, 0x0ce1, + 0x0ce6, 0x0cef, + 0x0d02, 0x0d03, + 0x0d05, 0x0d0c, + 0x0d0e, 0x0d10, + 0x0d12, 0x0d28, + 0x0d2a, 0x0d39, + 0x0d3e, 0x0d43, + 0x0d46, 0x0d48, + 0x0d4a, 0x0d4d, + 0x0d57, 0x0d57, + 0x0d60, 0x0d61, + 0x0d66, 0x0d6f, + 0x0d82, 0x0d83, + 0x0d85, 0x0d96, + 0x0d9a, 0x0db1, + 0x0db3, 0x0dbb, + 0x0dbd, 0x0dbd, + 0x0dc0, 0x0dc6, + 0x0dca, 0x0dca, + 0x0dcf, 0x0dd4, + 0x0dd6, 0x0dd6, + 0x0dd8, 0x0ddf, + 0x0df2, 0x0df3, + 0x0e01, 0x0e3a, + 0x0e40, 0x0e4e, + 0x0e50, 0x0e59, + 0x0e81, 0x0e82, + 0x0e84, 0x0e84, + 0x0e87, 0x0e88, + 0x0e8a, 0x0e8a, + 0x0e8d, 0x0e8d, + 0x0e94, 0x0e97, + 0x0e99, 0x0e9f, + 0x0ea1, 0x0ea3, + 0x0ea5, 0x0ea5, + 0x0ea7, 0x0ea7, + 0x0eaa, 0x0eab, + 0x0ead, 0x0eb9, + 0x0ebb, 0x0ebd, + 0x0ec0, 0x0ec4, + 0x0ec6, 0x0ec6, + 0x0ec8, 0x0ecd, + 0x0ed0, 0x0ed9, + 0x0edc, 0x0edd, + 0x0f00, 0x0f00, + 0x0f18, 0x0f19, + 0x0f20, 0x0f33, + 0x0f35, 0x0f35, + 0x0f37, 0x0f37, + 0x0f39, 0x0f39, + 0x0f3e, 0x0f47, + 0x0f49, 0x0f6a, + 0x0f71, 0x0f84, + 0x0f86, 0x0f8b, + 0x0f90, 0x0f97, + 0x0f99, 0x0fbc, + 0x0fc6, 0x0fc6, + 0x1000, 0x1021, + 0x1023, 0x1027, + 0x1029, 0x102a, + 0x102c, 0x1032, + 0x1036, 0x1039, + 0x1040, 0x1049, + 0x1050, 0x1059, + 0x10a0, 0x10c5, + 0x10d0, 0x10f8, + 0x1100, 0x1159, + 0x115f, 0x11a2, + 0x11a8, 0x11f9, + 0x1200, 0x1206, + 0x1208, 0x1246, + 0x1248, 0x1248, + 0x124a, 0x124d, + 0x1250, 0x1256, + 0x1258, 0x1258, + 0x125a, 0x125d, + 0x1260, 0x1286, + 0x1288, 0x1288, + 0x128a, 0x128d, + 0x1290, 0x12ae, + 0x12b0, 0x12b0, + 0x12b2, 0x12b5, + 0x12b8, 0x12be, + 0x12c0, 0x12c0, + 0x12c2, 0x12c5, + 0x12c8, 0x12ce, + 0x12d0, 0x12d6, + 0x12d8, 0x12ee, + 0x12f0, 0x130e, + 0x1310, 0x1310, + 0x1312, 0x1315, + 0x1318, 0x131e, + 0x1320, 0x1346, + 0x1348, 0x135a, + 0x1369, 0x137c, + 0x13a0, 0x13f4, + 0x1401, 0x166c, + 0x166f, 0x1676, + 0x1681, 0x169a, + 0x16a0, 0x16ea, + 0x16ee, 0x16f0, + 0x1700, 0x170c, + 0x170e, 0x1714, + 0x1720, 0x1734, + 0x1740, 0x1753, + 0x1760, 0x176c, + 0x176e, 0x1770, + 0x1772, 0x1773, + 0x1780, 0x17b3, + 0x17b6, 0x17d3, + 0x17d7, 0x17d7, + 0x17dc, 0x17dd, + 0x17e0, 0x17e9, + 0x17f0, 0x17f9, + 0x180b, 0x180d, + 0x1810, 0x1819, + 0x1820, 0x1877, + 0x1880, 0x18a9, + 0x1900, 0x191c, + 0x1920, 0x192b, + 0x1930, 0x193b, + 0x1946, 0x196d, + 0x1970, 0x1974, + 0x1d00, 0x1d6b, + 0x1e00, 0x1e9b, + 0x1ea0, 0x1ef9, + 0x1f00, 0x1f15, + 0x1f18, 0x1f1d, + 0x1f20, 0x1f45, + 0x1f48, 0x1f4d, + 0x1f50, 0x1f57, + 0x1f59, 0x1f59, + 0x1f5b, 0x1f5b, + 0x1f5d, 0x1f5d, + 0x1f5f, 0x1f7d, + 0x1f80, 0x1fb4, + 0x1fb6, 0x1fbc, + 0x1fbe, 0x1fbe, + 0x1fc2, 0x1fc4, + 0x1fc6, 0x1fcc, + 0x1fd0, 0x1fd3, + 0x1fd6, 0x1fdb, + 0x1fe0, 0x1fec, + 0x1ff2, 0x1ff4, + 0x1ff6, 0x1ffc, + 0x203f, 0x2040, + 0x2054, 0x2054, + 0x2070, 0x2071, + 0x2074, 0x2079, + 0x207f, 0x2089, + 0x20d0, 0x20ea, + 0x2102, 0x2102, + 0x2107, 0x2107, + 0x210a, 0x2113, + 0x2115, 0x2115, + 0x2119, 0x211d, + 0x2124, 0x2124, + 0x2126, 0x2126, + 0x2128, 0x2128, + 0x212a, 0x212d, + 0x212f, 0x2131, + 0x2133, 0x2139, + 0x213d, 0x213f, + 0x2145, 0x2149, + 0x2153, 0x2183, + 0x2460, 0x249b, + 0x24ea, 0x24ff, + 0x2776, 0x2793, + 0x3005, 0x3007, + 0x3021, 0x302f, + 0x3031, 0x3035, + 0x3038, 0x303c, + 0x3041, 0x3096, + 0x3099, 0x309a, + 0x309d, 0x309f, + 0x30a1, 0x30ff, + 0x3105, 0x312c, + 0x3131, 0x318e, + 0x3192, 0x3195, + 0x31a0, 0x31b7, + 0x31f0, 0x31ff, + 0x3220, 0x3229, + 0x3251, 0x325f, + 0x3280, 0x3289, + 0x32b1, 0x32bf, + 0x3400, 0x4db5, + 0x4e00, 0x9fa5, + 0xa000, 0xa48c, + 0xac00, 0xd7a3, + 0xf900, 0xfa2d, + 0xfa30, 0xfa6a, + 0xfb00, 0xfb06, + 0xfb13, 0xfb17, + 0xfb1d, 0xfb28, + 0xfb2a, 0xfb36, + 0xfb38, 0xfb3c, + 0xfb3e, 0xfb3e, + 0xfb40, 0xfb41, + 0xfb43, 0xfb44, + 0xfb46, 0xfbb1, + 0xfbd3, 0xfd3d, + 0xfd50, 0xfd8f, + 0xfd92, 0xfdc7, + 0xfdf0, 0xfdfb, + 0xfe00, 0xfe0f, + 0xfe20, 0xfe23, + 0xfe33, 0xfe34, + 0xfe4d, 0xfe4f, + 0xfe70, 0xfe74, + 0xfe76, 0xfefc, + 0xff10, 0xff19, + 0xff21, 0xff3a, + 0xff3f, 0xff3f, + 0xff41, 0xff5a, + 0xff65, 0xffbe, + 0xffc2, 0xffc7, + 0xffca, 0xffcf, + 0xffd2, 0xffd7, + 0xffda, 0xffdc, + 0x10000, 0x1000b, + 0x1000d, 0x10026, + 0x10028, 0x1003a, + 0x1003c, 0x1003d, + 0x1003f, 0x1004d, + 0x10050, 0x1005d, + 0x10080, 0x100fa, + 0x10107, 0x10133, + 0x10300, 0x1031e, + 0x10320, 0x10323, + 0x10330, 0x1034a, + 0x10380, 0x1039d, + 0x10400, 0x1049d, + 0x104a0, 0x104a9, + 0x10800, 0x10805, + 0x10808, 0x10808, + 0x1080a, 0x10835, + 0x10837, 0x10838, + 0x1083c, 0x1083c, + 0x1083f, 0x1083f, + 0x1d165, 0x1d169, + 0x1d16d, 0x1d172, + 0x1d17b, 0x1d182, + 0x1d185, 0x1d18b, + 0x1d1aa, 0x1d1ad, + 0x1d400, 0x1d454, + 0x1d456, 0x1d49c, + 0x1d49e, 0x1d49f, + 0x1d4a2, 0x1d4a2, + 0x1d4a5, 0x1d4a6, + 0x1d4a9, 0x1d4ac, + 0x1d4ae, 0x1d4b9, + 0x1d4bb, 0x1d4bb, + 0x1d4bd, 0x1d4c3, + 0x1d4c5, 0x1d505, + 0x1d507, 0x1d50a, + 0x1d50d, 0x1d514, + 0x1d516, 0x1d51c, + 0x1d51e, 0x1d539, + 0x1d53b, 0x1d53e, + 0x1d540, 0x1d544, + 0x1d546, 0x1d546, + 0x1d54a, 0x1d550, + 0x1d552, 0x1d6a3, + 0x1d6a8, 0x1d6c0, + 0x1d6c2, 0x1d6da, + 0x1d6dc, 0x1d6fa, + 0x1d6fc, 0x1d714, + 0x1d716, 0x1d734, + 0x1d736, 0x1d74e, + 0x1d750, 0x1d76e, + 0x1d770, 0x1d788, + 0x1d78a, 0x1d7a8, + 0x1d7aa, 0x1d7c2, + 0x1d7c4, 0x1d7c9, + 0x1d7ce, 0x1d7ff, + 0x20000, 0x2a6d6, + 0x2f800, 0x2fa1d, + 0xe0100, 0xe01ef +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ +}; /* end of MBWord */ + + +static int +utf8_get_ctype_code_range(int ctype, + const OnigCodePoint* sbr[], const OnigCodePoint* mbr[]) +{ +#define CR_SET(sbl,mbl) do { \ + *sbr = sbl; \ + *mbr = mbl; \ +} while (0) + +#define CR_SB_SET(sbl) do { \ + *sbr = sbl; \ + *mbr = EmptyRange; \ +} while (0) + + switch (ctype) { + case ONIGENC_CTYPE_ALPHA: + CR_SET(SBAlpha, MBAlpha); + break; + case ONIGENC_CTYPE_BLANK: + CR_SET(SBBlank, MBBlank); + break; + case ONIGENC_CTYPE_CNTRL: + CR_SET(SBCntrl, MBCntrl); + break; + case ONIGENC_CTYPE_DIGIT: + CR_SET(SBDigit, MBDigit); + break; + case ONIGENC_CTYPE_GRAPH: + CR_SET(SBGraph, MBGraph); + break; + case ONIGENC_CTYPE_LOWER: + CR_SET(SBLower, MBLower); + break; + case ONIGENC_CTYPE_PRINT: + CR_SET(SBPrint, MBPrint); + break; + case ONIGENC_CTYPE_PUNCT: + CR_SET(SBPunct, MBPunct); + break; + case ONIGENC_CTYPE_SPACE: + CR_SET(SBSpace, MBSpace); + break; + case ONIGENC_CTYPE_UPPER: + CR_SET(SBUpper, MBUpper); + break; + case ONIGENC_CTYPE_XDIGIT: + CR_SB_SET(SBXDigit); + break; + case ONIGENC_CTYPE_WORD: + CR_SET(SBWord, MBWord); + break; + case ONIGENC_CTYPE_ASCII: + CR_SB_SET(SBASCII); + break; + case ONIGENC_CTYPE_ALNUM: + CR_SET(SBAlnum, MBAlnum); + break; + + default: + return ONIGENCERR_TYPE_BUG; + break; + } + + return 0; +} + +static int +utf8_is_code_ctype(OnigCodePoint code, unsigned int ctype) +{ +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + const OnigCodePoint *range; +#endif + + if (code < 256) { + return ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code, ctype); + } + +#ifdef USE_UNICODE_FULL_RANGE_CTYPE + + switch (ctype) { + case ONIGENC_CTYPE_ALPHA: + range = MBAlpha; + break; + case ONIGENC_CTYPE_BLANK: + range = MBBlank; + break; + case ONIGENC_CTYPE_CNTRL: + range = MBCntrl; + break; + case ONIGENC_CTYPE_DIGIT: + range = MBDigit; + break; + case ONIGENC_CTYPE_GRAPH: + range = MBGraph; + break; + case ONIGENC_CTYPE_LOWER: + range = MBLower; + break; + case ONIGENC_CTYPE_PRINT: + range = MBPrint; + break; + case ONIGENC_CTYPE_PUNCT: + range = MBPunct; + break; + case ONIGENC_CTYPE_SPACE: + range = MBSpace; + break; + case ONIGENC_CTYPE_UPPER: + range = MBUpper; + break; + case ONIGENC_CTYPE_XDIGIT: + return FALSE; + break; + case ONIGENC_CTYPE_WORD: + range = MBWord; + break; + case ONIGENC_CTYPE_ASCII: + return FALSE; + break; + case ONIGENC_CTYPE_ALNUM: + range = MBAlnum; + break; + case ONIGENC_CTYPE_NEWLINE: + return FALSE; + break; + + default: + return ONIGENCERR_TYPE_BUG; + break; + } + + return onig_is_in_code_range((UChar* )range, code); + +#else + + if ((ctype & ONIGENC_CTYPE_WORD) != 0) { +#ifdef USE_INVALID_CODE_SCHEME + if (code <= VALID_CODE_LIMIT) +#endif + return TRUE; + } +#endif /* USE_UNICODE_FULL_RANGE_CTYPE */ + + return FALSE; +} + +static UChar* +utf8_left_adjust_char_head(const UChar* start, const UChar* s) +{ + const UChar *p; + + if (s <= start) return (UChar* )s; + p = s; + + while (!utf8_islead(*p) && p > start) p--; + return (UChar* )p; +} + +OnigEncodingType OnigEncodingUTF8 = { + utf8_mbc_enc_len, + "UTF-8", /* name */ + 6, /* max byte length */ + 1, /* min byte length */ + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ), + { + (OnigCodePoint )'\\' /* esc */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar '.' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anytime '*' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* zero or one time '?' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* one or more time '+' */ + , (OnigCodePoint )ONIG_INEFFECTIVE_META_CHAR /* anychar anytime */ + }, + utf8_is_mbc_newline, + utf8_mbc_to_code, + utf8_code_to_mbclen, + utf8_code_to_mbc, + utf8_mbc_to_normalize, + utf8_is_mbc_ambiguous, + onigenc_iso_8859_1_get_all_pair_ambig_codes, + onigenc_ess_tsett_get_all_comp_ambig_codes, + utf8_is_code_ctype, + utf8_get_ctype_code_range, + utf8_left_adjust_char_head, + onigenc_always_true_is_allowed_reverse_match +}; diff --git a/ext/mbstring/oniguruma/index.html b/ext/mbstring/oniguruma/index.html new file mode 100755 index 0000000..d55f1cc --- /dev/null +++ b/ext/mbstring/oniguruma/index.html @@ -0,0 +1,187 @@ +<html> +<head> + <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=x-sjis"> + <title>Oniguruma</title> +</head> +<body BGCOLOR="#ffffff" VLINK="#808040" TEXT="#696969"> + +<h1>Oniguruma</h1> (<a href="index_ja.html">Japanese</a>) + +<p> +(c) K.Kosako, updated at: 2007/08/16 +</p> + +<dl> +<font color="orange"> +<dt><b>What's new</b> +</font> +<ul> +<li>2007/08/16: Version 4.7.1 released.</li> +<li>2007/07/14: Version 5.9.0 released.</li> +<li>2007/06/20: Version 2.5.9 released.</li> +<li>2007/06/20: Maintainer of 2.x was changed.</li> +</ul> +</dl> +<hr> + +<p> +Oniguruma is a regular expressions library.<br> +The characteristics of this library is that different character encoding +<br>for every regular expression object can be specified. +<br>(supported APIs: GNU regex, POSIX and Oniguruma native) +</p> + +<dl> +<dt><b>Supported character encodings:</b><br> +ASCII, UTF-8, UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE,<br> +EUC-JP, EUC-TW, EUC-KR, EUC-CN,<br> +Shift_JIS, Big5, GB18030, KOI8-R, CP1251,<br> +ISO-8859-1, ISO-8859-2, ISO-8859-3, ISO-8859-4, ISO-8859-5,<br> +ISO-8859-6, ISO-8859-7, ISO-8859-8, ISO-8859-9, ISO-8859-10,<br> +ISO-8859-11, ISO-8859-13, ISO-8859-14, ISO-8859-15, ISO-8859-16<br> +<font color="orange"> +(GB18030 encoding was contributed by KUBO Takehiro)<br> +(CP1251 encoding was contributed by Byte) +</font> +</p> +</dl> + +<hr> + +<dt><b>License:</b> BSD license. + +<dl> +<dt><b>Platform:</b> +<ul> +<li> Unix (include Mac OS X) +<li> Cygwin +<li> Win32 +</ul> + +<br> + +<dt><b>Download:</b> +<ul> +<li> <a href="archive/onig-5.9.0.tar.gz">Latest release version 5.9.0</a> (2007/07/14) <a href="HISTORY_5X.txt">Change Log</a> +<li> <a href="archive/onig-5.8.0.tar.gz">5.8.0</a> (2007/06/04) +<li> <a href="archive/onig-5.7.0.tar.gz">5.7.0</a> (2007/04/27) +<li> <a href="archive/onig-4.7.1.tar.gz">Latest release version 4.7.1</a> (2007/08/16) <a href="HISTORY_4X.txt">Change Log</a> +<li> <a href="archive/onig-4.7.0.tar.gz">4.7.0</a> (2007/06/18) +<li> <a href="archive/onigd2_5_9.tar.gz">Latest release version 2.5.9</a> (2007/06/20) <a href="HISTORY_2X.txt">Change Log</a> +</ul> + +<br> +<font color="red"> +Maintainer of 2.x was changed to Hannes Wyss <hwyss AT ywesee.com>.<br> +About 2.x, please contact him.<br> +</font> +* 5.x supports Unicode Property/Script.<br> +* 2.x supports Ruby1.6/1.8.<br> + +<br> +<dt><b>Documents:</b> (version 5.9.0) +<ul> + <li> <a href="doc/RE.txt">Regular Expressions</a> + <a href="doc/RE.ja.txt">(Japanese: EUC-JP)</a> + <li> <a href="doc/API.txt">Oniguruma API</a> + <a href="doc/API.ja.txt">(Japanese: EUC-JP)</a> +</ul> + +<br> +<dt><b>Sample Programs:</b> +<ul> + <li><a href="sample/simple.c">example of the minimum</a> + <li><a href="sample/sql.c">example of the variable syntax and meta character (SQL-like pattern match)</a> +</ul> + +<br> +<dt><b>Site Links:</b> +<ul> +<li> <a href="http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/oniguruma/">FreeBSD ports</a> +<li> <a href="http://www.softantenna.com/lib/1953/index.html">SoftAntenna > Lib > Oniguruma</a> (Japanese page) +</ul> + +<br> +<dt><b>Links:</b> +<ul> +<li> <a href="http://homepage3.nifty.com/k-takata/mysoft/bregonig.html">bregonig.dll (Win32)</a> (Japanese page) +<li> <a href="http://www.halbiz.com/osaru/cnregex.html">cnRegex 4D Plugin (Mac OS X)</a> (Japanese page) +<li> <a href="http://kmaebashi.com/">crowbar</a> (Japanese page) +<li> <a href="http://oniguruma5.darwinports.com">Darwin Ports (Mac OS X)</a> +<li> <a href="http://homepage2.nifty.com/Km/onig.htm">Delphi interface (Win32)</a> (Japanese page) +<li> <a href="http://pyxis-project.net/ensemble/">Ensemble (Mac OS X)</a> (Japanese page) +<li> <a href="http://www.srcw.net/FaEdit/">FaEdit (Win32)</a> (Japanese page) +<li> <a href="http://www.tom.sfc.keio.ac.jp/~sakai/d/?date=20050209">GHC patch</a> Masahiro Sakai (Japanese Blog) +<li> <a href="http://www.gyazsquare.com/gyazmail/index.php">GyazMail (Mac OS X)</a> +<li> <a href="http://www5d.biglobe.ne.jp/~f-taste/knt3/jcref3.html">J-cref v3</a> (Japanese page) +<li> <a href="http://www.artman21.net/">Jedit X (Mac OS X)</a> +<li> <a href="http://www.chitora.jp/lhaz.html">Lhaz (Win32)</a> (Japanese page) +<li> <a href="http://limechat.net/">LimeChat</a> (Japanese page) +<li> <a href="http://medb.enhiro.com/">meDB</a> (Japanese page) +<li> <a href="http://monaos.org/">Mona OS</a> +<li> <a href="http://mongoose.jp/">mongoose</a> (Japanese page) +<li> <a href="http://www.irori.org/tool/mregexp.html">mregexp</a> (Japanese page) +<li> <a href="http://ochusha.sourceforge.jp/">Ochusha</a> (Japanese page) +<li> <a href="http://www8.ocn.ne.jp/%7esonoisa/OgreKit/index.html">OgreKit (Mac OS X)</a> Regular Expression Framework for Cocoa (Japanese page) +<li> <a href="http://www.kanetaka.net/4dapi/wiki4d.dll/4dcgi/wiki.cgi?plugins-oniguruma">OnigRegexp</a> (Japanese page) +<li> <a href="http://rubyforge.org/projects/oniguruma">Oniguruma for Ruby</a> +<li> <a href="http://openspace.timedia.co.jp/~yasuyuki/wiliki/wiliki.cgi?Oniguruma-mysqld&l=jp">Oniguruma-mysqld</a> +<li> <a href="http://www.void.in/wiki/OnigPP">OnigPP</a> (Japanese page) +<li> <a href="http://www.kt.rim.or.jp/~kbk/sed/index.html">Onigsed (Win32)</a> (Japanese page) +<li> <a href="http://glozer.net/code.html#oregexp">oregexp</a> Erlang binding +<li> <a href="http://www.kt.rim.or.jp/~kbk/yagrep/index.html">yagrep (Win32)</a> (Japanese page) +<li> <a href="http://www.php.gr.jp/">Japan PHP User Group</a> PHP 5.0 mb_ereg (Japanese page) +<li> <a href="http://yatsu.info/wiki/Pufui/">Pufui (Mac OS X)</a> (Japanese page) +<li> <a href="http://ultrapop.jp/?q2ch">q2ch</a> (Japanese page) +<li> <a href="http://harumune.s56.xrea.com/assari/index.php?RSSTyping">RSSTyping</a> (Japanese page) +<li> <a href="http://tobysoft.net/wiki/index.php?Ruby%2Fruby-win32-oniguruma">ruby-win32-oniguruma</a> (Japanese page) +<li> <a href="http://quux.s74.xrea.com/">SevenFour (Mac OS X)</a> (Japanese page) +<li> <a href="http://storklab.cyber-ninja.jp/">Stork Lab. Products (Mac OS X)</a> (Japanese page) +<li> <a href="http://sourceforge.jp/projects/ttssh2/">TeraTerm (Win32)</a> +<li> <a href="http://www8.ocn.ne.jp/~sonoisa/TiddlyWikiPod/">TiddlyWikiPod (Mac OS X)</a> +<li> <a href="http://www.cyanworks.net/mac.html">TunesTEXT (Mac OS X)</a> +<li> <a href="http://sourceforge.jp/projects/frogger/">XML parser</a> +<li> <a href="http://www.yokkasoft.net/">YokkaSoft (Win32)</a> (Japanese page) +</ul> + +<br> +<dt><b>References:</b> +<ul> +<li> <a href="http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=%C0%B5%B5%AC%C9%BD%B8%BD">Ruby Reference Manual Regexp</a> (Japanese page) +<li> <a href="http://www.perl.com/doc/manual/html/pod/perlre.html">Perl regular expressions</a> +<li> <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html">java.util.regex.Pattern (J2SE 1.4.2)</a> +<li> <a href="http://www.opengroup.org/onlinepubs/007908799/xbd/re.html">The Open Group</a> +<li> <a href="http://regex.info/">Mastering Regular Expressions</a> +<li> <a href="http://www.unicode.org/">Unicode Home Page</a> +<li> <a href="http://www.kt.rim.or.jp/~kbk/regex/regex.html">Regular expressions memo</a> (Japanese page) +<li> <a href="http://www.din.or.jp/~ohzaki/regex.htm">Regular expressions technique</a> (Japanese page) +</ul> + +<br> +</dl> +<p> +and I'm thankful to Akinori MUSHA. +</p> + +<hr> +<dl> +<dt><b>Other Libraries:</b> +<ul> +<li> <a href="http://www.boost.org/libs/regex/doc/">Boost.Regex</a> +<li> <a href="http://arglist.com/regex/">A copy of Henry Spencer's</a> +<li> <a href="http://directory.fsf.org/regex.html">GNU regex</a> +<li> <a href="http://www.pcre.org/">PCRE</a> +<li> <a href="http://re2c.org/">re2c</a> +<li> <a href="http://tiny-rex.sourceforge.net/">T-Rex</a> +<li> <a href="http://laurikari.net/tre/">TRE</a> +<li> <a href="http://jregex.sourceforge.net/">JRegex (Java)</a> +<li> <a href="http://www.cacas.org/java/gnu/regexp/">gnu.regexp for Java</a> +<li> <a href="http://jakarta.apache.org/regexp/index.html">Jakarta Project Regexp</a> +<li> <a href="http://jakarta.apache.org/oro/">Jakarta Project ORO</a> +</ul> +</dl> + +<hr> +<a href="../">Back to Home</a> +</body> +</html> diff --git a/ext/mbstring/oniguruma/onigcmpt200.h b/ext/mbstring/oniguruma/onigcmpt200.h new file mode 100644 index 0000000..d9b1419 --- /dev/null +++ b/ext/mbstring/oniguruma/onigcmpt200.h @@ -0,0 +1,310 @@ +/********************************************************************** + + onigcmpt200.h - Oniguruma (regular expression library) + + Copyright (C) 2004 K.Kosako (kosako@sofnec.co.jp) + +**********************************************************************/ +#ifndef ONIGCMPT200_H +#define ONIGCMPT200_H + +/* constants */ +#define REG_MAX_ERROR_MESSAGE_LEN ONIG_MAX_ERROR_MESSAGE_LEN + +#define RegCharEncoding OnigEncoding + +#define REG_ENCODING_ASCII ONIG_ENCODING_ASCII +#define REG_ENCODING_ISO_8859_1 ONIG_ENCODING_ISO_8859_1 +#define REG_ENCODING_ISO_8859_15 ONIG_ENCODING_ISO_8859_15 +#define REG_ENCODING_UTF8 ONIG_ENCODING_UTF8 +#define REG_ENCODING_EUC_JP ONIG_ENCODING_EUC_JP +#define REG_ENCODING_SJIS ONIG_ENCODING_SJIS +#define REG_ENCODING_BIG5 ONIG_ENCODING_BIG5 +#define REG_ENCODING_UNDEF ONIG_ENCODING_UNDEF + +/* Don't use REGCODE_XXXX. (obsoleted) */ +#define REGCODE_UNDEF REG_ENCODING_UNDEF +#define REGCODE_ASCII REG_ENCODING_ASCII +#define REGCODE_UTF8 REG_ENCODING_UTF8 +#define REGCODE_EUCJP REG_ENCODING_EUC_JP +#define REGCODE_SJIS REG_ENCODING_SJIS + +/* Don't use REGCODE_XXXX. (obsoleted) */ +#define MBCTYPE_ASCII RE_MBCTYPE_ASCII +#define MBCTYPE_EUC RE_MBCTYPE_EUC +#define MBCTYPE_SJIS RE_MBCTYPE_SJIS +#define MBCTYPE_UTF8 RE_MBCTYPE_UTF8 + +typedef unsigned char* RegTransTableType; +#define RegOptionType OnigOptionType +#define RegDistance OnigDistance + +#define REG_OPTION_DEFAULT ONIG_OPTION_DEFAULT + +/* options */ +#define REG_OPTION_NONE ONIG_OPTION_NONE +#define REG_OPTION_SINGLELINE ONIG_OPTION_SINGLELINE +#define REG_OPTION_MULTILINE ONIG_OPTION_MULTILINE +#define REG_OPTION_IGNORECASE ONIG_OPTION_IGNORECASE +#define REG_OPTION_EXTEND ONIG_OPTION_EXTEND +#define REG_OPTION_FIND_LONGEST ONIG_OPTION_FIND_LONGEST +#define REG_OPTION_FIND_NOT_EMPTY ONIG_OPTION_FIND_NOT_EMPTY +#define REG_OPTION_NEGATE_SINGLELINE ONIG_OPTION_NEGATE_SINGLELINE +#define REG_OPTION_DONT_CAPTURE_GROUP ONIG_OPTION_DONT_CAPTURE_GROUP +#define REG_OPTION_CAPTURE_GROUP ONIG_OPTION_CAPTURE_GROUP +#define REG_OPTION_NOTBOL ONIG_OPTION_NOTBOL +#define REG_OPTION_NOTEOL ONIG_OPTION_NOTEOL +#define REG_OPTION_POSIX_REGION ONIG_OPTION_POSIX_REGION + +#define REG_OPTION_ON ONIG_OPTION_ON +#define REG_OPTION_OFF ONIG_OPTION_OFF +#define IS_REG_OPTION_ON ONIG_IS_OPTION_ON + +/* syntax */ +#define RegSyntaxType OnigSyntaxType + +#define RegSyntaxPosixBasic OnigSyntaxPosixBasic +#define RegSyntaxPosixExtended OnigSyntaxPosixExtended +#define RegSyntaxEmacs OnigSyntaxEmacs +#define RegSyntaxGrep OnigSyntaxGrep +#define RegSyntaxGnuRegex OnigSyntaxGnuRegex +#define RegSyntaxJava OnigSyntaxJava +#define RegSyntaxPerl OnigSyntaxPerl +#define RegSyntaxRuby OnigSyntaxRuby + +#define REG_SYNTAX_POSIX_BASIC ONIG_SYNTAX_POSIX_BASIC +#define REG_SYNTAX_POSIX_EXTENDED ONIG_SYNTAX_POSIX_EXTENDED +#define REG_SYNTAX_EMACS ONIG_SYNTAX_EMACS +#define REG_SYNTAX_GREP ONIG_SYNTAX_GREP +#define REG_SYNTAX_GNU_REGEX ONIG_SYNTAX_GNU_REGEX +#define REG_SYNTAX_JAVA ONIG_SYNTAX_JAVA +#define REG_SYNTAX_PERL ONIG_SYNTAX_PERL +#define REG_SYNTAX_RUBY ONIG_SYNTAX_RUBY + +#define REG_SYNTAX_DEFAULT ONIG_SYNTAX_DEFAULT +#define RegDefaultSyntax OnigDefaultSyntax + +/* syntax (operators) */ +#define REG_SYN_OP_VARIABLE_META_CHARACTERS \ + ONIG_SYN_OP_VARIABLE_META_CHARACTERS +#define REG_SYN_OP_DOT_ANYCHAR \ + ONIG_SYN_OP_DOT_ANYCHAR +#define REG_SYN_OP_ASTERISK_ZERO_INF \ + ONIG_SYN_OP_ASTERISK_ZERO_INF +#define REG_SYN_OP_ESC_ASTERISK_ZERO_INF \ + ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF +#define REG_SYN_OP_PLUS_ONE_INF \ + ONIG_SYN_OP_PLUS_ONE_INF +#define REG_SYN_OP_ESC_PLUS_ONE_INF \ + ONIG_SYN_OP_ESC_PLUS_ONE_INF +#define REG_SYN_OP_QMARK_ZERO_ONE \ + ONIG_SYN_OP_QMARK_ZERO_ONE +#define REG_SYN_OP_ESC_QMARK_ZERO_ONE \ + ONIG_SYN_OP_ESC_QMARK_ZERO_ONE +#define REG_SYN_OP_BRACE_INTERVAL \ + ONIG_SYN_OP_BRACE_INTERVAL +#define REG_SYN_OP_ESC_BRACE_INTERVAL \ + ONIG_SYN_OP_ESC_BRACE_INTERVAL +#define REG_SYN_OP_VBAR_ALT \ + ONIG_SYN_OP_VBAR_ALT +#define REG_SYN_OP_ESC_VBAR_ALT \ + ONIG_SYN_OP_ESC_VBAR_ALT +#define REG_SYN_OP_LPAREN_SUBEXP \ + ONIG_SYN_OP_LPAREN_SUBEXP +#define REG_SYN_OP_ESC_LPAREN_SUBEXP \ + ONIG_SYN_OP_ESC_LPAREN_SUBEXP +#define REG_SYN_OP_ESC_AZ_BUF_ANCHOR \ + ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR +#define REG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR \ + ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR +#define REG_SYN_OP_DECIMAL_BACKREF \ + ONIG_SYN_OP_DECIMAL_BACKREF +#define REG_SYN_OP_BRACKET_CC \ + ONIG_SYN_OP_BRACKET_CC +#define REG_SYN_OP_ESC_W_WORD \ + ONIG_SYN_OP_ESC_W_WORD +#define REG_SYN_OP_ESC_LTGT_WORD_BEGIN_END \ + ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END +#define REG_SYN_OP_ESC_B_WORD_BOUND \ + ONIG_SYN_OP_ESC_B_WORD_BOUND +#define REG_SYN_OP_ESC_S_WHITE_SPACE \ + ONIG_SYN_OP_ESC_S_WHITE_SPACE +#define REG_SYN_OP_ESC_D_DIGIT \ + ONIG_SYN_OP_ESC_D_DIGIT +#define REG_SYN_OP_LINE_ANCHOR \ + ONIG_SYN_OP_LINE_ANCHOR +#define REG_SYN_OP_POSIX_BRACKET \ + ONIG_SYN_OP_POSIX_BRACKET +#define REG_SYN_OP_QMARK_NON_GREEDY \ + ONIG_SYN_OP_QMARK_NON_GREEDY +#define REG_SYN_OP_ESC_CONTROL_CHARS \ + ONIG_SYN_OP_ESC_CONTROL_CHARS +#define REG_SYN_OP_ESC_C_CONTROL \ + ONIG_SYN_OP_ESC_C_CONTROL +#define REG_SYN_OP_ESC_OCTAL3 \ + ONIG_SYN_OP_ESC_OCTAL3 +#define REG_SYN_OP_ESC_X_HEX2 \ + ONIG_SYN_OP_ESC_X_HEX2 +#define REG_SYN_OP_ESC_X_BRACE_HEX8 \ + ONIG_SYN_OP_ESC_X_BRACE_HEX8 + +#define REG_SYN_OP2_ESC_CAPITAL_Q_QUOTE \ + ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE +#define REG_SYN_OP2_QMARK_GROUP_EFFECT \ + ONIG_SYN_OP2_QMARK_GROUP_EFFECT +#define REG_SYN_OP2_OPTION_PERL \ + ONIG_SYN_OP2_OPTION_PERL +#define REG_SYN_OP2_OPTION_RUBY \ + ONIG_SYN_OP2_OPTION_RUBY +#define REG_SYN_OP2_PLUS_POSSESSIVE_REPEAT \ + ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT +#define REG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL \ + ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL +#define REG_SYN_OP2_CCLASS_SET_OP \ + ONIG_SYN_OP2_CCLASS_SET_OP +#define REG_SYN_OP2_QMARK_LT_NAMED_GROUP \ + ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP +#define REG_SYN_OP2_ESC_K_NAMED_BACKREF \ + ONIG_SYN_OP2_ESC_K_NAMED_BACKREF +#define REG_SYN_OP2_ESC_G_SUBEXP_CALL \ + ONIG_SYN_OP2_ESC_G_SUBEXP_CALL +#define REG_SYN_OP2_ATMARK_CAPTURE_HISTORY \ + ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY +#define REG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL \ + ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL +#define REG_SYN_OP2_ESC_CAPITAL_M_BAR_META \ + ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META +#define REG_SYN_OP2_ESC_V_VTAB \ + ONIG_SYN_OP2_ESC_V_VTAB +#define REG_SYN_OP2_ESC_U_HEX4 \ + ONIG_SYN_OP2_ESC_U_HEX4 +#define REG_SYN_OP2_ESC_GNU_BUF_ANCHOR \ + ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR + +#define REG_SYN_CONTEXT_INDEP_ANCHORS \ + ONIG_SYN_CONTEXT_INDEP_ANCHORS +#define REG_SYN_CONTEXT_INDEP_REPEAT_OPS \ + ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS +#define REG_SYN_CONTEXT_INVALID_REPEAT_OPS \ + ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS +#define REG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP \ + ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP +#define REG_SYN_ALLOW_INVALID_INTERVAL \ + ONIG_SYN_ALLOW_INVALID_INTERVAL +#define REG_SYN_STRICT_CHECK_BACKREF \ + ONIG_SYN_STRICT_CHECK_BACKREF +#define REG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND \ + ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND +#define REG_SYN_CAPTURE_ONLY_NAMED_GROUP \ + ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP +#define REG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME \ + ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME + +#define REG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC \ + ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC +#define REG_SYN_BACKSLASH_ESCAPE_IN_CC \ + ONIG_SYN_BACKSLASH_ESCAPE_IN_CC +#define REG_SYN_ALLOW_EMPTY_RANGE_IN_CC \ + ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC +#define REG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC \ + ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC +#define REG_SYN_WARN_CC_OP_NOT_ESCAPED \ + ONIG_SYN_WARN_CC_OP_NOT_ESCAPED +#define REG_SYN_WARN_REDUNDANT_NESTED_REPEAT \ + ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT + +/* meta character specifiers (regex_set_meta_char()) */ +#define REG_META_CHAR_ESCAPE ONIG_META_CHAR_ESCAPE +#define REG_META_CHAR_ANYCHAR ONIG_META_CHAR_ANYCHAR +#define REG_META_CHAR_ANYTIME ONIG_META_CHAR_ANYTIME +#define REG_META_CHAR_ZERO_OR_ONE_TIME ONIG_META_CHAR_ZERO_OR_ONE_TIME +#define REG_META_CHAR_ONE_OR_MORE_TIME ONIG_META_CHAR_ONE_OR_MORE_TIME +#define REG_META_CHAR_ANYCHAR_ANYTIME ONIG_META_CHAR_ANYCHAR_ANYTIME + +#define REG_INEFFECTIVE_META_CHAR ONIG_INEFFECTIVE_META_CHAR + +/* error codes */ +#define REG_IS_PATTERN_ERROR ONIG_IS_PATTERN_ERROR +/* normal return */ +#define REG_NORMAL ONIG_NORMAL +#define REG_MISMATCH ONIG_MISMATCH +#define REG_NO_SUPPORT_CONFIG ONIG_NO_SUPPORT_CONFIG +/* internal error */ +#define REGERR_MEMORY ONIGERR_MEMORY +#define REGERR_MATCH_STACK_LIMIT_OVER ONIGERR_MATCH_STACK_LIMIT_OVER +#define REGERR_TYPE_BUG ONIGERR_TYPE_BUG +#define REGERR_PARSER_BUG ONIGERR_PARSER_BUG +#define REGERR_STACK_BUG ONIGERR_STACK_BUG +#define REGERR_UNDEFINED_BYTECODE ONIGERR_UNDEFINED_BYTECODE +#define REGERR_UNEXPECTED_BYTECODE ONIGERR_UNEXPECTED_BYTECODE +#define REGERR_DEFAULT_ENCODING_IS_NOT_SETTED \ + ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED +#define REGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR \ + ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR +/* general error */ +#define REGERR_INVALID_ARGUMENT ONIGERR_INVALID_ARGUMENT +/* errors related to thread */ +#define REGERR_OVER_THREAD_PASS_LIMIT_COUNT \ + ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT + + +/* must be smaller than BIT_STATUS_BITS_NUM (unsigned int * 8) */ +#define REG_MAX_CAPTURE_HISTORY_GROUP ONIG_MAX_CAPTURE_HISTORY_GROUP +#define REG_IS_CAPTURE_HISTORY_GROUP ONIG_IS_CAPTURE_HISTORY_GROUP + +#define REG_REGION_NOTPOS ONIG_REGION_NOTPOS + +#define RegRegion OnigRegion +#define RegErrorInfo OnigErrorInfo +#define RegRepeatRange OnigRepeatRange + +#define RegWarnFunc OnigWarnFunc +#define regex_null_warn onig_null_warn +#define REG_NULL_WARN ONIG_NULL_WARN + +/* regex_t state */ +#define REG_STATE_NORMAL ONIG_STATE_NORMAL +#define REG_STATE_SEARCHING ONIG_STATE_SEARCHING +#define REG_STATE_COMPILING ONIG_STATE_COMPILING +#define REG_STATE_MODIFY ONIG_STATE_MODIFY + +#define REG_STATE ONIG_STATE + +/* Oniguruma Native API */ +#define regex_init onig_init +#define regex_error_code_to_str onig_error_code_to_str +#define regex_set_warn_func onig_set_warn_func +#define regex_set_verb_warn_func onig_set_verb_warn_func +#define regex_new onig_new +#define regex_free onig_free +#define regex_recompile onig_recompile +#define regex_search onig_search +#define regex_match onig_match +#define regex_region_new onig_region_new +#define regex_region_free onig_region_free +#define regex_region_copy onig_region_copy +#define regex_region_clear onig_region_clear +#define regex_region_resize onig_region_resize +#define regex_name_to_group_numbers onig_name_to_group_numbers +#define regex_name_to_backref_number onig_name_to_backref_number +#define regex_foreach_name onig_foreach_name +#define regex_number_of_names onig_number_of_names +#define regex_get_encoding onig_get_encoding +#define regex_get_options onig_get_options +#define regex_get_syntax onig_get_syntax +#define regex_set_default_syntax onig_set_default_syntax +#define regex_copy_syntax onig_copy_syntax +#define regex_set_meta_char onig_set_meta_char +#define regex_end onig_end +#define regex_version onig_version + +/* encoding API */ +#define enc_get_prev_char_head onigenc_get_prev_char_head +#define enc_get_left_adjust_char_head onigenc_get_left_adjust_char_head +#define enc_get_right_adjust_char_head onigenc_get_right_adjust_char_head +/* obsoleted API */ +#define regex_get_prev_char_head onigenc_get_prev_char_head +#define regex_get_left_adjust_char_head onigenc_get_left_adjust_char_head +#define regex_get_right_adjust_char_head onigenc_get_right_adjust_char_head + +#endif /* ONIGCMPT200_H */ diff --git a/ext/mbstring/oniguruma/oniggnu.h b/ext/mbstring/oniguruma/oniggnu.h new file mode 100644 index 0000000..3da9f23 --- /dev/null +++ b/ext/mbstring/oniguruma/oniggnu.h @@ -0,0 +1,85 @@ +#ifndef ONIGGNU_H +#define ONIGGNU_H +/********************************************************************** + oniggnu.h - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2005 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "oniguruma.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define RE_MBCTYPE_ASCII 0 +#define RE_MBCTYPE_EUC 1 +#define RE_MBCTYPE_SJIS 2 +#define RE_MBCTYPE_UTF8 3 + +/* GNU regex options */ +#ifndef RE_NREGS +#define RE_NREGS ONIG_NREGION +#endif + +#define RE_OPTION_IGNORECASE ONIG_OPTION_IGNORECASE +#define RE_OPTION_EXTENDED ONIG_OPTION_EXTEND +#define RE_OPTION_MULTILINE ONIG_OPTION_MULTILINE +#define RE_OPTION_SINGLELINE ONIG_OPTION_SINGLELINE +#define RE_OPTION_LONGEST ONIG_OPTION_FIND_LONGEST +#define RE_OPTION_POSIXLINE (RE_OPTION_MULTILINE|RE_OPTION_SINGLELINE) +#define RE_OPTION_FIND_NOT_EMPTY ONIG_OPTION_FIND_NOT_EMPTY +#define RE_OPTION_NEGATE_SINGLELINE ONIG_OPTION_NEGATE_SINGLELINE +#define RE_OPTION_DONT_CAPTURE_GROUP ONIG_OPTION_DONT_CAPTURE_GROUP +#define RE_OPTION_CAPTURE_GROUP ONIG_OPTION_CAPTURE_GROUP + + +ONIG_EXTERN +void re_mbcinit P_((int)); +ONIG_EXTERN +int re_compile_pattern P_((const char*, int, struct re_pattern_buffer*, char* err_buf)); +ONIG_EXTERN +int re_recompile_pattern P_((const char*, int, struct re_pattern_buffer*, char* err_buf)); +ONIG_EXTERN +void re_free_pattern P_((struct re_pattern_buffer*)); +ONIG_EXTERN +int re_adjust_startpos P_((struct re_pattern_buffer*, const char*, int, int, int)); +ONIG_EXTERN +int re_search P_((struct re_pattern_buffer*, const char*, int, int, int, struct re_registers*)); +ONIG_EXTERN +int re_match P_((struct re_pattern_buffer*, const char *, int, int, struct re_registers*)); +ONIG_EXTERN +void re_set_casetable P_((const char*)); +ONIG_EXTERN +void re_free_registers P_((struct re_registers*)); +ONIG_EXTERN +int re_alloc_pattern P_((struct re_pattern_buffer**)); /* added */ + +#ifdef __cplusplus +} +#endif + +#endif /* ONIGGNU_H */ diff --git a/ext/mbstring/oniguruma/onigposix.h b/ext/mbstring/oniguruma/onigposix.h new file mode 100644 index 0000000..cfeb88a --- /dev/null +++ b/ext/mbstring/oniguruma/onigposix.h @@ -0,0 +1,169 @@ +#ifndef ONIGPOSIX_H +#define ONIGPOSIX_H +/********************************************************************** + onigposix.h - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2005 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 <stdlib.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/* options */ +#define REG_ICASE (1<<0) +#define REG_NEWLINE (1<<1) +#define REG_NOTBOL (1<<2) +#define REG_NOTEOL (1<<3) +#define REG_EXTENDED (1<<4) /* if not setted, Basic Onigular Expression */ +#define REG_NOSUB (1<<5) + +/* POSIX error codes */ +#define REG_NOMATCH 1 +#define REG_BADPAT 2 +#define REG_ECOLLATE 3 +#define REG_ECTYPE 4 +#define REG_EESCAPE 5 +#define REG_ESUBREG 6 +#define REG_EBRACK 7 +#define REG_EPAREN 8 +#define REG_EBRACE 9 +#define REG_BADBR 10 +#define REG_ERANGE 11 +#define REG_ESPACE 12 +#define REG_BADRPT 13 + +/* extended error codes */ +#define REG_EONIG_INTERNAL 14 +#define REG_EONIG_BADWC 15 +#define REG_EONIG_BADARG 16 +#define REG_EONIG_THREAD 17 + +/* character encodings (for reg_set_encoding()) */ +#define REG_POSIX_ENCODING_ASCII 0 +#define REG_POSIX_ENCODING_EUC_JP 1 +#define REG_POSIX_ENCODING_SJIS 2 +#define REG_POSIX_ENCODING_UTF8 3 +#define REG_POSIX_ENCODING_UTF16_BE 4 +#define REG_POSIX_ENCODING_UTF16_LE 5 + + +typedef int regoff_t; + +typedef struct { + regoff_t rm_so; + regoff_t rm_eo; +} regmatch_t; + +/* POSIX regex_t */ +typedef struct { + void* onig; /* Oniguruma regex_t* */ + size_t re_nsub; + int comp_options; +} regex_t; + + +#ifndef P_ +#if defined(__STDC__) || defined(_WIN32) +# define P_(args) args +#else +# define P_(args) () +#endif +#endif + +#ifndef ONIG_EXTERN +#if defined(_WIN32) && !defined(__GNUC__) +#if defined(EXPORT) || defined(RUBY_EXPORT) +#define ONIG_EXTERN extern __declspec(dllexport) +#else +#define ONIG_EXTERN extern __declspec(dllimport) +#endif +#endif +#endif + +#ifndef ONIG_EXTERN +#define ONIG_EXTERN extern +#endif + +#ifndef ONIGURUMA_H +typedef unsigned int OnigOptionType; + +/* syntax */ +typedef struct { + unsigned int op; + unsigned int op2; + unsigned int behavior; + OnigOptionType options; /* default option */ +} OnigSyntaxType; + +ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixBasic; +ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixExtended; +ONIG_EXTERN OnigSyntaxType OnigSyntaxEmacs; +ONIG_EXTERN OnigSyntaxType OnigSyntaxGrep; +ONIG_EXTERN OnigSyntaxType OnigSyntaxGnuRegex; +ONIG_EXTERN OnigSyntaxType OnigSyntaxJava; +ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl; +ONIG_EXTERN OnigSyntaxType OnigSyntaxRuby; + +/* predefined syntaxes (see regsyntax.c) */ +#define ONIG_SYNTAX_POSIX_BASIC (&OnigSyntaxPosixBasic) +#define ONIG_SYNTAX_POSIX_EXTENDED (&OnigSyntaxPosixExtended) +#define ONIG_SYNTAX_EMACS (&OnigSyntaxEmacs) +#define ONIG_SYNTAX_GREP (&OnigSyntaxGrep) +#define ONIG_SYNTAX_GNU_REGEX (&OnigSyntaxGnuRegex) +#define ONIG_SYNTAX_JAVA (&OnigSyntaxJava) +#define ONIG_SYNTAX_PERL (&OnigSyntaxPerl) +#define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby) +/* default syntax */ +#define ONIG_SYNTAX_DEFAULT OnigDefaultSyntax + +ONIG_EXTERN OnigSyntaxType* OnigDefaultSyntax; + +ONIG_EXTERN int onig_set_default_syntax P_((OnigSyntaxType* syntax)); +ONIG_EXTERN void onig_copy_syntax P_((OnigSyntaxType* to, OnigSyntaxType* from)); +ONIG_EXTERN const char* onig_version P_((void)); +ONIG_EXTERN const char* onig_copyright P_((void)); + +#endif /* ONIGURUMA_H */ + + +ONIG_EXTERN int regcomp P_((regex_t* reg, const char* pat, int options)); +ONIG_EXTERN int regexec P_((regex_t* reg, const char* str, size_t nmatch, regmatch_t* matches, int options)); +ONIG_EXTERN void regfree P_((regex_t* reg)); +ONIG_EXTERN size_t regerror P_((int code, const regex_t* reg, char* buf, size_t size)); + +/* extended API */ +ONIG_EXTERN void reg_set_encoding P_((int enc)); +ONIG_EXTERN int reg_name_to_group_numbers P_((regex_t* reg, const unsigned char* name, const unsigned char* name_end, int** nums)); +ONIG_EXTERN int reg_foreach_name P_((regex_t* reg, int (*func)(const unsigned char*, const unsigned char*,int,int*,regex_t*,void*), void* arg)); +ONIG_EXTERN int reg_number_of_names P_((regex_t* reg)); + +#ifdef __cplusplus +} +#endif + +#endif /* ONIGPOSIX_H */ diff --git a/ext/mbstring/oniguruma/oniguruma.h b/ext/mbstring/oniguruma/oniguruma.h new file mode 100644 index 0000000..5196a3d --- /dev/null +++ b/ext/mbstring/oniguruma/oniguruma.h @@ -0,0 +1,905 @@ +#ifndef ONIGURUMA_H +#define ONIGURUMA_H +/********************************************************************** + oniguruma.h - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "../php_onig_compat.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ONIGURUMA +#define ONIGURUMA_VERSION_MAJOR 4 +#define ONIGURUMA_VERSION_MINOR 7 +#define ONIGURUMA_VERSION_TEENY 1 + +#ifdef __cplusplus +# ifndef HAVE_PROTOTYPES +# define HAVE_PROTOTYPES 1 +# endif +# ifndef HAVE_STDARG_PROTOTYPES +# define HAVE_STDARG_PROTOTYPES 1 +# endif +#endif + +/* escape Mac OS X/Xcode 2.4/gcc 4.0.1 problem */ +#if defined(__APPLE__) && defined(__GNUC__) && __GNUC__ >= 4 +# ifndef HAVE_STDARG_PROTOTYPES +# define HAVE_STDARG_PROTOTYPES 1 +# endif +#endif + +#ifndef P_ +#if defined(__STDC__) || defined(_WIN32) +# define P_(args) args +#else +# define P_(args) () +#endif +#endif + +#ifndef PV_ +#ifdef HAVE_STDARG_PROTOTYPES +# define PV_(args) args +#else +# define PV_(args) () +#endif +#endif + +#ifndef ONIG_EXTERN +#if defined(_WIN32) && !defined(__GNUC__) +#if defined(EXPORT) || defined(RUBY_EXPORT) +#define ONIG_EXTERN extern __declspec(dllexport) +#else +#define ONIG_EXTERN extern __declspec(dllimport) +#endif +#endif +#endif + +#ifndef ONIG_EXTERN +#define ONIG_EXTERN extern +#endif + +/* PART: character encoding */ + +#ifndef ONIG_ESCAPE_UCHAR_COLLISION +#define UChar OnigUChar +#endif + +typedef unsigned char OnigUChar; +typedef unsigned long OnigCodePoint; +typedef unsigned int OnigDistance; + +#define ONIG_INFINITE_DISTANCE ~((OnigDistance )0) + +/* ambiguous match flag */ +typedef unsigned int OnigAmbigType; + +ONIG_EXTERN OnigAmbigType OnigDefaultAmbigFlag; + +#define ONIGENC_AMBIGUOUS_MATCH_NONE 0 +#define ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE (1<<0) +#define ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE (1<<1) + +#define ONIGENC_AMBIGUOUS_MATCH_LIMIT (1<<1) + +#define ONIGENC_AMBIGUOUS_MATCH_FULL \ + ( ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE ) +#define ONIGENC_AMBIGUOUS_MATCH_DEFAULT OnigDefaultAmbigFlag + + +#define ONIGENC_MAX_COMP_AMBIG_CODE_LEN 3 +#define ONIGENC_MAX_COMP_AMBIG_CODE_ITEM_NUM 4 + +/* code range */ +#define ONIGENC_CODE_RANGE_NUM(range) ((int )range[0]) +#define ONIGENC_CODE_RANGE_FROM(range,i) range[((i)*2) + 1] +#define ONIGENC_CODE_RANGE_TO(range,i) range[((i)*2) + 2] + +typedef struct { + int len; + OnigCodePoint code[ONIGENC_MAX_COMP_AMBIG_CODE_LEN]; +} OnigCompAmbigCodeItem; + +typedef struct { + int n; + OnigCodePoint code; + OnigCompAmbigCodeItem items[ONIGENC_MAX_COMP_AMBIG_CODE_ITEM_NUM]; +} OnigCompAmbigCodes; + +typedef struct { + OnigCodePoint from; + OnigCodePoint to; +} OnigPairAmbigCodes; + +typedef struct { + OnigCodePoint esc; + OnigCodePoint anychar; + OnigCodePoint anytime; + OnigCodePoint zero_or_one_time; + OnigCodePoint one_or_more_time; + OnigCodePoint anychar_anytime; +} OnigMetaCharTableType; + + +#if defined(RUBY_PLATFORM) && defined(M17N_H) + +#define ONIG_RUBY_M17N +typedef m17n_encoding* OnigEncoding; + +#else + +typedef struct { + int (*mbc_enc_len)(const OnigUChar* p); + const char* name; + int max_enc_len; + int min_enc_len; + OnigAmbigType support_ambig_flag; + OnigMetaCharTableType meta_char_table; + int (*is_mbc_newline)(const OnigUChar* p, const OnigUChar* end); + OnigCodePoint (*mbc_to_code)(const OnigUChar* p, const OnigUChar* end); + int (*code_to_mbclen)(OnigCodePoint code); + int (*code_to_mbc)(OnigCodePoint code, OnigUChar *buf); + int (*mbc_to_normalize)(OnigAmbigType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to); + int (*is_mbc_ambiguous)(OnigAmbigType flag, const OnigUChar** pp, const OnigUChar* end); + int (*get_all_pair_ambig_codes)(OnigAmbigType flag, const OnigPairAmbigCodes** acs); + int (*get_all_comp_ambig_codes)(OnigAmbigType flag, const OnigCompAmbigCodes** acs); + int (*is_code_ctype)(OnigCodePoint code, unsigned int ctype); + int (*get_ctype_code_range)(int ctype, const OnigCodePoint* sb_range[], const OnigCodePoint* mb_range[]); + OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p); + int (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end); +} OnigEncodingType; + +typedef OnigEncodingType* OnigEncoding; + +ONIG_EXTERN OnigEncodingType OnigEncodingASCII; +ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_1; +ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_2; +ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_3; +ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_4; +ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_5; +ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_6; +ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_7; +ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_8; +ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_9; +ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_10; +ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_11; +ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_13; +ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_14; +ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_15; +ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_16; +ONIG_EXTERN OnigEncodingType OnigEncodingUTF8; +ONIG_EXTERN OnigEncodingType OnigEncodingUTF16_BE; +ONIG_EXTERN OnigEncodingType OnigEncodingUTF16_LE; +ONIG_EXTERN OnigEncodingType OnigEncodingUTF32_BE; +ONIG_EXTERN OnigEncodingType OnigEncodingUTF32_LE; +ONIG_EXTERN OnigEncodingType OnigEncodingEUC_JP; +ONIG_EXTERN OnigEncodingType OnigEncodingEUC_TW; +ONIG_EXTERN OnigEncodingType OnigEncodingEUC_KR; +ONIG_EXTERN OnigEncodingType OnigEncodingEUC_CN; +ONIG_EXTERN OnigEncodingType OnigEncodingSJIS; +ONIG_EXTERN OnigEncodingType OnigEncodingKOI8; +ONIG_EXTERN OnigEncodingType OnigEncodingKOI8_R; +ONIG_EXTERN OnigEncodingType OnigEncodingBIG5; +ONIG_EXTERN OnigEncodingType OnigEncodingGB18030; + +#define ONIG_ENCODING_ASCII (&OnigEncodingASCII) +#define ONIG_ENCODING_ISO_8859_1 (&OnigEncodingISO_8859_1) +#define ONIG_ENCODING_ISO_8859_2 (&OnigEncodingISO_8859_2) +#define ONIG_ENCODING_ISO_8859_3 (&OnigEncodingISO_8859_3) +#define ONIG_ENCODING_ISO_8859_4 (&OnigEncodingISO_8859_4) +#define ONIG_ENCODING_ISO_8859_5 (&OnigEncodingISO_8859_5) +#define ONIG_ENCODING_ISO_8859_6 (&OnigEncodingISO_8859_6) +#define ONIG_ENCODING_ISO_8859_7 (&OnigEncodingISO_8859_7) +#define ONIG_ENCODING_ISO_8859_8 (&OnigEncodingISO_8859_8) +#define ONIG_ENCODING_ISO_8859_9 (&OnigEncodingISO_8859_9) +#define ONIG_ENCODING_ISO_8859_10 (&OnigEncodingISO_8859_10) +#define ONIG_ENCODING_ISO_8859_11 (&OnigEncodingISO_8859_11) +#define ONIG_ENCODING_ISO_8859_13 (&OnigEncodingISO_8859_13) +#define ONIG_ENCODING_ISO_8859_14 (&OnigEncodingISO_8859_14) +#define ONIG_ENCODING_ISO_8859_15 (&OnigEncodingISO_8859_15) +#define ONIG_ENCODING_ISO_8859_16 (&OnigEncodingISO_8859_16) +#define ONIG_ENCODING_UTF8 (&OnigEncodingUTF8) +#define ONIG_ENCODING_UTF16_BE (&OnigEncodingUTF16_BE) +#define ONIG_ENCODING_UTF16_LE (&OnigEncodingUTF16_LE) +#define ONIG_ENCODING_UTF32_BE (&OnigEncodingUTF32_BE) +#define ONIG_ENCODING_UTF32_LE (&OnigEncodingUTF32_LE) +#define ONIG_ENCODING_EUC_JP (&OnigEncodingEUC_JP) +#define ONIG_ENCODING_EUC_TW (&OnigEncodingEUC_TW) +#define ONIG_ENCODING_EUC_KR (&OnigEncodingEUC_KR) +#define ONIG_ENCODING_EUC_CN (&OnigEncodingEUC_CN) +#define ONIG_ENCODING_SJIS (&OnigEncodingSJIS) +#define ONIG_ENCODING_KOI8 (&OnigEncodingKOI8) +#define ONIG_ENCODING_KOI8_R (&OnigEncodingKOI8_R) +#define ONIG_ENCODING_BIG5 (&OnigEncodingBIG5) +#define ONIG_ENCODING_GB18030 (&OnigEncodingGB18030) + +#endif /* else RUBY && M17N */ + +#define ONIG_ENCODING_UNDEF ((OnigEncoding )0) + + +/* work size */ +#define ONIGENC_CODE_TO_MBC_MAXLEN 7 +#define ONIGENC_MBC_NORMALIZE_MAXLEN ONIGENC_CODE_TO_MBC_MAXLEN + +/* character types */ +#define ONIGENC_CTYPE_NEWLINE (1<< 0) +#define ONIGENC_CTYPE_ALPHA (1<< 1) +#define ONIGENC_CTYPE_BLANK (1<< 2) +#define ONIGENC_CTYPE_CNTRL (1<< 3) +#define ONIGENC_CTYPE_DIGIT (1<< 4) +#define ONIGENC_CTYPE_GRAPH (1<< 5) +#define ONIGENC_CTYPE_LOWER (1<< 6) +#define ONIGENC_CTYPE_PRINT (1<< 7) +#define ONIGENC_CTYPE_PUNCT (1<< 8) +#define ONIGENC_CTYPE_SPACE (1<< 9) +#define ONIGENC_CTYPE_UPPER (1<<10) +#define ONIGENC_CTYPE_XDIGIT (1<<11) +#define ONIGENC_CTYPE_WORD (1<<12) +#define ONIGENC_CTYPE_ASCII (1<<13) +#define ONIGENC_CTYPE_ALNUM (ONIGENC_CTYPE_ALPHA | ONIGENC_CTYPE_DIGIT) + +#define enc_len(enc,p) ONIGENC_MBC_ENC_LEN(enc, p) + +#define ONIGENC_IS_UNDEF(enc) ((enc) == ONIG_ENCODING_UNDEF) +#define ONIGENC_IS_SINGLEBYTE(enc) (ONIGENC_MBC_MAXLEN(enc) == 1) +#define ONIGENC_IS_MBC_HEAD(enc,p) (ONIGENC_MBC_ENC_LEN(enc,p) != 1) +#define ONIGENC_IS_MBC_ASCII(p) (*(p) < 128) +#define ONIGENC_IS_CODE_ASCII(code) ((code) < 128) +#define ONIGENC_IS_CODE_SB_WORD(enc,code) \ + (ONIGENC_IS_CODE_ASCII(code) && ONIGENC_IS_CODE_WORD(enc,code)) +#define ONIGENC_IS_MBC_WORD(enc,s,end) \ + ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end)) + + +#ifdef ONIG_RUBY_M17N + +#include <ctype.h> /* for isblank(), isgraph() */ + +#define ONIGENC_MBC_TO_NORMALIZE(enc,flag,pp,end,buf) \ + onigenc_mbc_to_normalize(enc,flag,pp,end,buf) +#define ONIGENC_IS_MBC_AMBIGUOUS(enc,flag,pp,end) \ + onigenc_is_mbc_ambiguous(enc,flag,pp,end) + +#define ONIGENC_SUPPORT_AMBIG_FLAG(enc) ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE +#define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) \ + onigenc_is_allowed_reverse_match(enc, s, end) +#define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s) \ + onigenc_get_left_adjust_char_head(enc, start, s) +#define ONIGENC_GET_ALL_PAIR_AMBIG_CODES(enc, ambig_flag, acs) 0 +#define ONIGENC_GET_ALL_COMP_AMBIG_CODES(enc, ambig_flag, acs) 0 +#define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,sbr,mbr) \ + ONIG_NO_SUPPORT_CONFIG +#define ONIGENC_MBC_ENC_LEN(enc,p) m17n_mbclen(enc,(int )(*p)) +#define ONIGENC_MBC_MAXLEN(enc) m17n_mbmaxlen(enc) +#define ONIGENC_MBC_MAXLEN_DIST(enc) \ + (ONIGENC_MBC_MAXLEN(enc) > 0 ? ONIGENC_MBC_MAXLEN(enc) \ + : ONIG_INFINITE_DISTANCE) +#define ONIGENC_MBC_MINLEN(enc) 1 +#define ONIGENC_MBC_TO_CODE(enc,p,e) m17n_codepoint((enc),(p),(e)) +#define ONIGENC_CODE_TO_MBCLEN(enc,code) m17n_codelen((enc),(code)) +#define ONIGENC_CODE_TO_MBC(enc,code,buf) onigenc_code_to_mbc(enc, code, buf) + +#if 0 /* !! not supported !! */ +#define ONIGENC_IS_MBC_NEWLINE(enc,p,end) +#define ONIGENC_STEP_BACK(enc,start,s,n) +#endif + +#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype) \ + onigenc_is_code_ctype(enc,code,ctype) + +#ifdef isblank +# define ONIGENC_IS_CODE_BLANK(enc,code) isblank((int )code) +#else +# define ONIGENC_IS_CODE_BLANK(enc,code) ((code) == ' ' || (code) == '\t') +#endif +#ifdef isgraph +# define ONIGENC_IS_CODE_GRAPH(enc,code) isgraph((int )code) +#else +# define ONIGENC_IS_CODE_GRAPH(enc,code) \ + (isprint((int )code) && !isspace((int )code)) +#endif + +#define ONIGENC_IS_CODE_PRINT(enc,code) m17n_isprint(enc,code) +#define ONIGENC_IS_CODE_ALNUM(enc,code) m17n_isalnum(enc,code) +#define ONIGENC_IS_CODE_ALPHA(enc,code) m17n_isalpha(enc,code) +#define ONIGENC_IS_CODE_LOWER(enc,code) m17n_islower(enc,code) +#define ONIGENC_IS_CODE_UPPER(enc,code) m17n_isupper(enc,code) +#define ONIGENC_IS_CODE_CNTRL(enc,code) m17n_iscntrl(enc,code) +#define ONIGENC_IS_CODE_PUNCT(enc,code) m17n_ispunct(enc,code) +#define ONIGENC_IS_CODE_SPACE(enc,code) m17n_isspace(enc,code) +#define ONIGENC_IS_CODE_DIGIT(enc,code) m17n_isdigit(enc,code) +#define ONIGENC_IS_CODE_XDIGIT(enc,code) m17n_isxdigit(enc,code) +#define ONIGENC_IS_CODE_WORD(enc,code) m17n_iswchar(enc,code) + +ONIG_EXTERN +int onigenc_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, int ctype)); +ONIG_EXTERN +int onigenc_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, OnigUChar *buf)); +ONIG_EXTERN +int onigenc_mbc_to_normalize P_((OnigEncoding enc, OnigAmbigType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* buf)); +ONIG_EXTERN +int onigenc_is_mbc_ambiguous P_((OnigEncoding enc, OnigAmbigType flag, const OnigUChar** pp, const OnigUChar* end)); +ONIG_EXTERN +int onigenc_is_allowed_reverse_match P_((OnigEncoding enc, const OnigUChar* s, const OnigUChar* end)); + +#else /* ONIG_RUBY_M17N */ + +#define ONIGENC_NAME(enc) ((enc)->name) + +#define ONIGENC_MBC_TO_NORMALIZE(enc,flag,pp,end,buf) \ + (enc)->mbc_to_normalize(flag,(const OnigUChar** )pp,end,buf) +#define ONIGENC_IS_MBC_AMBIGUOUS(enc,flag,pp,end) \ + (enc)->is_mbc_ambiguous(flag,(const OnigUChar** )pp,end) +#define ONIGENC_SUPPORT_AMBIG_FLAG(enc) ((enc)->support_ambig_flag) +#define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) \ + (enc)->is_allowed_reverse_match(s,end) +#define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s) \ + (enc)->left_adjust_char_head(start, s) +#define ONIGENC_GET_ALL_PAIR_AMBIG_CODES(enc,ambig_flag,acs) \ + (enc)->get_all_pair_ambig_codes(ambig_flag,acs) +#define ONIGENC_GET_ALL_COMP_AMBIG_CODES(enc,ambig_flag,acs) \ + (enc)->get_all_comp_ambig_codes(ambig_flag,acs) +#define ONIGENC_STEP_BACK(enc,start,s,n) \ + onigenc_step_back((enc),(start),(s),(n)) + +#define ONIGENC_MBC_ENC_LEN(enc,p) (enc)->mbc_enc_len(p) +#define ONIGENC_MBC_MAXLEN(enc) ((enc)->max_enc_len) +#define ONIGENC_MBC_MAXLEN_DIST(enc) ONIGENC_MBC_MAXLEN(enc) +#define ONIGENC_MBC_MINLEN(enc) ((enc)->min_enc_len) +#define ONIGENC_IS_MBC_NEWLINE(enc,p,end) (enc)->is_mbc_newline((p),(end)) +#define ONIGENC_MBC_TO_CODE(enc,p,end) (enc)->mbc_to_code((p),(end)) +#define ONIGENC_CODE_TO_MBCLEN(enc,code) (enc)->code_to_mbclen(code) +#define ONIGENC_CODE_TO_MBC(enc,code,buf) (enc)->code_to_mbc(code,buf) + +#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype) (enc)->is_code_ctype(code,ctype) + +#define ONIGENC_IS_CODE_NEWLINE(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_NEWLINE) +#define ONIGENC_IS_CODE_GRAPH(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_GRAPH) +#define ONIGENC_IS_CODE_PRINT(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PRINT) +#define ONIGENC_IS_CODE_ALNUM(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALNUM) +#define ONIGENC_IS_CODE_ALPHA(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALPHA) +#define ONIGENC_IS_CODE_LOWER(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_LOWER) +#define ONIGENC_IS_CODE_UPPER(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_UPPER) +#define ONIGENC_IS_CODE_CNTRL(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_CNTRL) +#define ONIGENC_IS_CODE_PUNCT(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PUNCT) +#define ONIGENC_IS_CODE_SPACE(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_SPACE) +#define ONIGENC_IS_CODE_BLANK(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_BLANK) +#define ONIGENC_IS_CODE_DIGIT(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT) +#define ONIGENC_IS_CODE_XDIGIT(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_XDIGIT) +#define ONIGENC_IS_CODE_WORD(enc,code) \ + ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD) + +#define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,sbr,mbr) \ + (enc)->get_ctype_code_range(ctype,sbr,mbr) + +ONIG_EXTERN +OnigUChar* onigenc_step_back P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, int n)); + +#endif /* is not ONIG_RUBY_M17N */ + + +/* encoding API */ +ONIG_EXTERN +int onigenc_init P_((void)); +ONIG_EXTERN +int onigenc_set_default_encoding P_((OnigEncoding enc)); +ONIG_EXTERN +OnigEncoding onigenc_get_default_encoding P_((void)); +ONIG_EXTERN +void onigenc_set_default_caseconv_table P_((const OnigUChar* table)); +ONIG_EXTERN +OnigUChar* onigenc_get_right_adjust_char_head_with_prev P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar** prev)); +ONIG_EXTERN +OnigUChar* onigenc_get_prev_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s)); +ONIG_EXTERN +OnigUChar* onigenc_get_left_adjust_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s)); +ONIG_EXTERN +OnigUChar* onigenc_get_right_adjust_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s)); +ONIG_EXTERN +int onigenc_strlen P_((OnigEncoding enc, const OnigUChar* p, const OnigUChar* end)); +ONIG_EXTERN +int onigenc_strlen_null P_((OnigEncoding enc, const OnigUChar* p)); +ONIG_EXTERN +int onigenc_str_bytelen_null P_((OnigEncoding enc, const OnigUChar* p)); + + + +/* PART: regular expression */ + +/* config parameters */ +#define ONIG_NREGION 10 +#define ONIG_MAX_BACKREF_NUM 1000 +#define ONIG_MAX_REPEAT_NUM 100000 +#define ONIG_MAX_MULTI_BYTE_RANGES_NUM 10000 +/* constants */ +#define ONIG_MAX_ERROR_MESSAGE_LEN 90 + +typedef unsigned int OnigOptionType; + +#define ONIG_OPTION_DEFAULT ONIG_OPTION_NONE + +/* options */ +#define ONIG_OPTION_NONE 0U +#define ONIG_OPTION_IGNORECASE 1U +#define ONIG_OPTION_EXTEND (ONIG_OPTION_IGNORECASE << 1) +#define ONIG_OPTION_MULTILINE (ONIG_OPTION_EXTEND << 1) +#define ONIG_OPTION_SINGLELINE (ONIG_OPTION_MULTILINE << 1) +#define ONIG_OPTION_FIND_LONGEST (ONIG_OPTION_SINGLELINE << 1) +#define ONIG_OPTION_FIND_NOT_EMPTY (ONIG_OPTION_FIND_LONGEST << 1) +#define ONIG_OPTION_NEGATE_SINGLELINE (ONIG_OPTION_FIND_NOT_EMPTY << 1) +#define ONIG_OPTION_DONT_CAPTURE_GROUP (ONIG_OPTION_NEGATE_SINGLELINE << 1) +#define ONIG_OPTION_CAPTURE_GROUP (ONIG_OPTION_DONT_CAPTURE_GROUP << 1) +/* options (search time) */ +#define ONIG_OPTION_NOTBOL (ONIG_OPTION_CAPTURE_GROUP << 1) +#define ONIG_OPTION_NOTEOL (ONIG_OPTION_NOTBOL << 1) +#define ONIG_OPTION_POSIX_REGION (ONIG_OPTION_NOTEOL << 1) +#define ONIG_OPTION_MAXBIT ONIG_OPTION_POSIX_REGION /* limit */ + +#define ONIG_OPTION_ON(options,regopt) ((options) |= (regopt)) +#define ONIG_OPTION_OFF(options,regopt) ((options) &= ~(regopt)) +#define ONIG_IS_OPTION_ON(options,option) ((options) & (option)) + +/* syntax */ +typedef struct { + unsigned int op; + unsigned int op2; + unsigned int behavior; + OnigOptionType options; /* default option */ +} OnigSyntaxType; + +ONIG_EXTERN OnigSyntaxType OnigSyntaxASIS; +ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixBasic; +ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixExtended; +ONIG_EXTERN OnigSyntaxType OnigSyntaxEmacs; +ONIG_EXTERN OnigSyntaxType OnigSyntaxGrep; +ONIG_EXTERN OnigSyntaxType OnigSyntaxGnuRegex; +ONIG_EXTERN OnigSyntaxType OnigSyntaxJava; +ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl; +ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl_NG; +ONIG_EXTERN OnigSyntaxType OnigSyntaxRuby; + +/* predefined syntaxes (see regsyntax.c) */ +#define ONIG_SYNTAX_ASIS (&OnigSyntaxASIS) +#define ONIG_SYNTAX_POSIX_BASIC (&OnigSyntaxPosixBasic) +#define ONIG_SYNTAX_POSIX_EXTENDED (&OnigSyntaxPosixExtended) +#define ONIG_SYNTAX_EMACS (&OnigSyntaxEmacs) +#define ONIG_SYNTAX_GREP (&OnigSyntaxGrep) +#define ONIG_SYNTAX_GNU_REGEX (&OnigSyntaxGnuRegex) +#define ONIG_SYNTAX_JAVA (&OnigSyntaxJava) +#define ONIG_SYNTAX_PERL (&OnigSyntaxPerl) +#define ONIG_SYNTAX_PERL_NG (&OnigSyntaxPerl_NG) +#define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby) + +/* default syntax */ +ONIG_EXTERN OnigSyntaxType* OnigDefaultSyntax; +#define ONIG_SYNTAX_DEFAULT OnigDefaultSyntax + +/* syntax (operators) */ +#define ONIG_SYN_OP_VARIABLE_META_CHARACTERS (1U<<0) +#define ONIG_SYN_OP_DOT_ANYCHAR (1U<<1) /* . */ +#define ONIG_SYN_OP_ASTERISK_ZERO_INF (1U<<2) /* * */ +#define ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF (1U<<3) +#define ONIG_SYN_OP_PLUS_ONE_INF (1U<<4) /* + */ +#define ONIG_SYN_OP_ESC_PLUS_ONE_INF (1U<<5) +#define ONIG_SYN_OP_QMARK_ZERO_ONE (1U<<6) /* ? */ +#define ONIG_SYN_OP_ESC_QMARK_ZERO_ONE (1U<<7) +#define ONIG_SYN_OP_BRACE_INTERVAL (1U<<8) /* {lower,upper} */ +#define ONIG_SYN_OP_ESC_BRACE_INTERVAL (1U<<9) /* \{lower,upper\} */ +#define ONIG_SYN_OP_VBAR_ALT (1U<<10) /* | */ +#define ONIG_SYN_OP_ESC_VBAR_ALT (1U<<11) /* \| */ +#define ONIG_SYN_OP_LPAREN_SUBEXP (1U<<12) /* (...) */ +#define ONIG_SYN_OP_ESC_LPAREN_SUBEXP (1U<<13) /* \(...\) */ +#define ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR (1U<<14) /* \A, \Z, \z */ +#define ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR (1U<<15) /* \G */ +#define ONIG_SYN_OP_DECIMAL_BACKREF (1U<<16) /* \num */ +#define ONIG_SYN_OP_BRACKET_CC (1U<<17) /* [...] */ +#define ONIG_SYN_OP_ESC_W_WORD (1U<<18) /* \w, \W */ +#define ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END (1U<<19) /* \<. \> */ +#define ONIG_SYN_OP_ESC_B_WORD_BOUND (1U<<20) /* \b, \B */ +#define ONIG_SYN_OP_ESC_S_WHITE_SPACE (1U<<21) /* \s, \S */ +#define ONIG_SYN_OP_ESC_D_DIGIT (1U<<22) /* \d, \D */ +#define ONIG_SYN_OP_LINE_ANCHOR (1U<<23) /* ^, $ */ +#define ONIG_SYN_OP_POSIX_BRACKET (1U<<24) /* [:xxxx:] */ +#define ONIG_SYN_OP_QMARK_NON_GREEDY (1U<<25) /* ??,*?,+?,{n,m}? */ +#define ONIG_SYN_OP_ESC_CONTROL_CHARS (1U<<26) /* \n,\r,\t,\a ... */ +#define ONIG_SYN_OP_ESC_C_CONTROL (1U<<27) /* \cx */ +#define ONIG_SYN_OP_ESC_OCTAL3 (1U<<28) /* \OOO */ +#define ONIG_SYN_OP_ESC_X_HEX2 (1U<<29) /* \xHH */ +#define ONIG_SYN_OP_ESC_X_BRACE_HEX8 (1U<<30) /* \x{7HHHHHHH} */ + +#define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE (1U<<0) /* \Q...\E */ +#define ONIG_SYN_OP2_QMARK_GROUP_EFFECT (1U<<1) /* (?...) */ +#define ONIG_SYN_OP2_OPTION_PERL (1U<<2) /* (?imsx),(?-imsx) */ +#define ONIG_SYN_OP2_OPTION_RUBY (1U<<3) /* (?imx), (?-imx) */ +#define ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT (1U<<4) /* ?+,*+,++ */ +#define ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL (1U<<5) /* {n,m}+ */ +#define ONIG_SYN_OP2_CCLASS_SET_OP (1U<<6) /* [...&&..[..]..] */ +#define ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP (1U<<7) /* (?<name>...) */ +#define ONIG_SYN_OP2_ESC_K_NAMED_BACKREF (1U<<8) /* \k<name> */ +#define ONIG_SYN_OP2_ESC_G_SUBEXP_CALL (1U<<9) /* \g<name>, \g<n> */ +#define ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY (1U<<10) /* (?@..),(?@<x>..) */ +#define ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL (1U<<11) /* \C-x */ +#define ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META (1U<<12) /* \M-x */ +#define ONIG_SYN_OP2_ESC_V_VTAB (1U<<13) /* \v as VTAB */ +#define ONIG_SYN_OP2_ESC_U_HEX4 (1U<<14) /* \uHHHH */ +#define ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR (1U<<15) /* \`, \' */ +#define ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY (1U<<16) /* \p{...}, \P{...} */ +#define ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT (1U<<17) /* \p{^..}, \P{^..} */ +#define ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS (1U<<18) /* \p{IsXDigit} */ +#define ONIG_SYN_OP2_ESC_H_XDIGIT (1U<<19) /* \h, \H */ +#define ONIG_SYN_OP2_INEFFECTIVE_ESCAPE (1U<<20) /* \ */ + +/* syntax (behavior) */ +#define ONIG_SYN_CONTEXT_INDEP_ANCHORS (1U<<31) /* not implemented */ +#define ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS (1U<<0) /* ?, *, +, {n,m} */ +#define ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS (1U<<1) /* error or ignore */ +#define ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP (1U<<2) /* ...)... */ +#define ONIG_SYN_ALLOW_INVALID_INTERVAL (1U<<3) /* {??? */ +#define ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV (1U<<4) /* {,n} => {0,n} */ +#define ONIG_SYN_STRICT_CHECK_BACKREF (1U<<5) /* /(\1)/,/\1()/ ..*/ +#define ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND (1U<<6) /* (?<=a|bc) */ +#define ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP (1U<<7) /* see doc/RE */ +#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME (1U<<8) /* (?<x>)(?<x>) */ +#define ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY (1U<<9) /* a{n}?=(?:a{n})? */ + +/* syntax (behavior) in char class [...] */ +#define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC (1U<<20) /* [^...] */ +#define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC (1U<<21) /* [..\w..] etc.. */ +#define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC (1U<<22) +#define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC (1U<<23) /* [0-9-a]=[0-9\-a] */ +/* syntax (behavior) warning */ +#define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED (1U<<24) /* [,-,] */ +#define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT (1U<<25) /* (?:a*)+ */ + +/* meta character specifiers (onig_set_meta_char()) */ +#define ONIG_META_CHAR_ESCAPE 0 +#define ONIG_META_CHAR_ANYCHAR 1 +#define ONIG_META_CHAR_ANYTIME 2 +#define ONIG_META_CHAR_ZERO_OR_ONE_TIME 3 +#define ONIG_META_CHAR_ONE_OR_MORE_TIME 4 +#define ONIG_META_CHAR_ANYCHAR_ANYTIME 5 + +#define ONIG_INEFFECTIVE_META_CHAR 0 + +/* error codes */ +#define ONIG_IS_PATTERN_ERROR(ecode) ((ecode) <= -100 && (ecode) > -1000) +/* normal return */ +#define ONIG_NORMAL 0 +#define ONIG_MISMATCH -1 +#define ONIG_NO_SUPPORT_CONFIG -2 + +/* internal error */ +#define ONIGERR_MEMORY -5 +#define ONIGERR_TYPE_BUG -6 +#define ONIGERR_PARSER_BUG -11 +#define ONIGERR_STACK_BUG -12 +#define ONIGERR_UNDEFINED_BYTECODE -13 +#define ONIGERR_UNEXPECTED_BYTECODE -14 +#define ONIGERR_MATCH_STACK_LIMIT_OVER -15 +#define ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED -21 +#define ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR -22 +/* general error */ +#define ONIGERR_INVALID_ARGUMENT -30 +/* syntax error */ +#define ONIGERR_END_PATTERN_AT_LEFT_BRACE -100 +#define ONIGERR_END_PATTERN_AT_LEFT_BRACKET -101 +#define ONIGERR_EMPTY_CHAR_CLASS -102 +#define ONIGERR_PREMATURE_END_OF_CHAR_CLASS -103 +#define ONIGERR_END_PATTERN_AT_ESCAPE -104 +#define ONIGERR_END_PATTERN_AT_META -105 +#define ONIGERR_END_PATTERN_AT_CONTROL -106 +#define ONIGERR_META_CODE_SYNTAX -108 +#define ONIGERR_CONTROL_CODE_SYNTAX -109 +#define ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE -110 +#define ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE -111 +#define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS -112 +#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED -113 +#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID -114 +#define ONIGERR_NESTED_REPEAT_OPERATOR -115 +#define ONIGERR_UNMATCHED_CLOSE_PARENTHESIS -116 +#define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS -117 +#define ONIGERR_END_PATTERN_IN_GROUP -118 +#define ONIGERR_UNDEFINED_GROUP_OPTION -119 +#define ONIGERR_INVALID_POSIX_BRACKET_TYPE -121 +#define ONIGERR_INVALID_LOOK_BEHIND_PATTERN -122 +#define ONIGERR_INVALID_REPEAT_RANGE_PATTERN -123 +/* values error (syntax error) */ +#define ONIGERR_TOO_BIG_NUMBER -200 +#define ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE -201 +#define ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE -202 +#define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS -203 +#define ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE -204 +#define ONIGERR_TOO_MANY_MULTI_BYTE_RANGES -205 +#define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING -206 +#define ONIGERR_TOO_BIG_BACKREF_NUMBER -207 +#define ONIGERR_INVALID_BACKREF -208 +#define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED -209 +#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE -212 +#define ONIGERR_EMPTY_GROUP_NAME -214 +#define ONIGERR_INVALID_GROUP_NAME -215 +#define ONIGERR_INVALID_CHAR_IN_GROUP_NAME -216 +#define ONIGERR_UNDEFINED_NAME_REFERENCE -217 +#define ONIGERR_UNDEFINED_GROUP_REFERENCE -218 +#define ONIGERR_MULTIPLEX_DEFINED_NAME -219 +#define ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL -220 +#define ONIGERR_NEVER_ENDING_RECURSION -221 +#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY -222 +#define ONIGERR_INVALID_CHAR_PROPERTY_NAME -223 +#define ONIGERR_INVALID_WIDE_CHAR_VALUE -400 +#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE -401 +#define ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION -402 +#define ONIGERR_INVALID_COMBINATION_OF_OPTIONS -403 + +/* errors related to thread */ +#define ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT -1001 + + +/* must be smaller than BIT_STATUS_BITS_NUM (unsigned int * 8) */ +#define ONIG_MAX_CAPTURE_HISTORY_GROUP 31 +#define ONIG_IS_CAPTURE_HISTORY_GROUP(r, i) \ + ((i) <= ONIG_MAX_CAPTURE_HISTORY_GROUP && (r)->list && (r)->list[i]) + +typedef struct OnigCaptureTreeNodeStruct { + int group; /* group number */ + int beg; + int end; + int allocated; + int num_childs; + struct OnigCaptureTreeNodeStruct** childs; +} OnigCaptureTreeNode; + +/* match result region type */ +struct re_registers { + int allocated; + int num_regs; + int* beg; + int* end; + /* extended */ + OnigCaptureTreeNode* history_root; /* capture history tree root */ +}; + +/* capture tree traverse */ +#define ONIG_TRAVERSE_CALLBACK_AT_FIRST 1 +#define ONIG_TRAVERSE_CALLBACK_AT_LAST 2 +#define ONIG_TRAVERSE_CALLBACK_AT_BOTH \ + ( ONIG_TRAVERSE_CALLBACK_AT_FIRST | ONIG_TRAVERSE_CALLBACK_AT_LAST ) + + +#define ONIG_REGION_NOTPOS -1 + +typedef struct re_registers OnigRegion; + +typedef struct { + OnigEncoding enc; + OnigUChar* par; + OnigUChar* par_end; +} OnigErrorInfo; + +typedef struct { + int lower; + int upper; +} OnigRepeatRange; + +typedef void (*OnigWarnFunc) P_((const char* s)); +extern void onig_null_warn P_((const char* s)); +#define ONIG_NULL_WARN onig_null_warn + +#define ONIG_CHAR_TABLE_SIZE 256 + +/* regex_t state */ +#define ONIG_STATE_NORMAL 0 +#define ONIG_STATE_SEARCHING 1 +#define ONIG_STATE_COMPILING -1 +#define ONIG_STATE_MODIFY -2 + +#define ONIG_STATE(reg) \ + ((reg)->state > 0 ? ONIG_STATE_SEARCHING : (reg)->state) + +typedef struct re_pattern_buffer { + /* common members of BBuf(bytes-buffer) */ + unsigned char* p; /* compiled pattern */ + unsigned int used; /* used space for p */ + unsigned int alloc; /* allocated space for p */ + + int state; /* normal, searching, compiling */ + int num_mem; /* used memory(...) num counted from 1 */ + int num_repeat; /* OP_REPEAT/OP_REPEAT_NG id-counter */ + int num_null_check; /* OP_NULL_CHECK_START/END id counter */ + int num_comb_exp_check; /* combination explosion check */ + int num_call; /* number of subexp call */ + unsigned int capture_history; /* (?@...) flag (1-31) */ + unsigned int bt_mem_start; /* need backtrack flag */ + unsigned int bt_mem_end; /* need backtrack flag */ + int stack_pop_level; + int repeat_range_alloc; + OnigRepeatRange* repeat_range; + + OnigEncoding enc; + OnigOptionType options; + OnigSyntaxType* syntax; + OnigAmbigType ambig_flag; + void* name_table; + + /* optimization info (string search, char-map and anchors) */ + int optimize; /* optimize flag */ + int threshold_len; /* search str-length for apply optimize */ + int anchor; /* BEGIN_BUF, BEGIN_POS, (SEMI_)END_BUF */ + OnigDistance anchor_dmin; /* (SEMI_)END_BUF anchor distance */ + OnigDistance anchor_dmax; /* (SEMI_)END_BUF anchor distance */ + int sub_anchor; /* start-anchor for exact or map */ + unsigned char *exact; + unsigned char *exact_end; + unsigned char map[ONIG_CHAR_TABLE_SIZE]; /* used as BM skip or char-map */ + int *int_map; /* BM skip for exact_len > 255 */ + int *int_map_backward; /* BM skip for backward search */ + OnigDistance dmin; /* min-distance of exact or map */ + OnigDistance dmax; /* max-distance of exact or map */ + + /* regex_t link chain */ + struct re_pattern_buffer* chain; /* escape compile-conflict */ +} OnigRegexType; + +typedef OnigRegexType* OnigRegex; + +#ifndef ONIG_ESCAPE_REGEX_T_COLLISION + typedef OnigRegexType regex_t; +#endif + + +typedef struct { + int num_of_elements; + OnigEncoding pattern_enc; + OnigEncoding target_enc; + OnigSyntaxType* syntax; + OnigOptionType option; + OnigAmbigType ambig_flag; +} OnigCompileInfo; + +/* Oniguruma Native API */ +ONIG_EXTERN +int onig_init P_((void)); +ONIG_EXTERN +int onig_error_code_to_str PV_((OnigUChar* s, int err_code, ...)); +ONIG_EXTERN +void onig_set_warn_func P_((OnigWarnFunc f)); +ONIG_EXTERN +void onig_set_verb_warn_func P_((OnigWarnFunc f)); +ONIG_EXTERN +int onig_new P_((OnigRegex*, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo)); +ONIG_EXTERN +int onig_new_deluxe P_((OnigRegex* reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo)); +ONIG_EXTERN +void onig_free P_((OnigRegex)); +ONIG_EXTERN +int onig_recompile P_((OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo)); +ONIG_EXTERN +int onig_recompile_deluxe P_((OnigRegex reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo)); +ONIG_EXTERN +int onig_search P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option)); +ONIG_EXTERN +int onig_match P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option)); +ONIG_EXTERN +OnigRegion* onig_region_new P_((void)); +ONIG_EXTERN +void onig_region_init P_((OnigRegion* region)); +ONIG_EXTERN +void onig_region_free P_((OnigRegion* region, int free_self)); +ONIG_EXTERN +void onig_region_copy P_((OnigRegion* to, OnigRegion* from)); +ONIG_EXTERN +void onig_region_clear P_((OnigRegion* region)); +ONIG_EXTERN +int onig_region_resize P_((OnigRegion* region, int n)); +ONIG_EXTERN +int onig_region_set P_((OnigRegion* region, int at, int beg, int end)); +ONIG_EXTERN +int onig_name_to_group_numbers P_((OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, int** nums)); +ONIG_EXTERN +int onig_name_to_backref_number P_((OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, OnigRegion *region)); +ONIG_EXTERN +int onig_foreach_name P_((OnigRegex reg, int (*func)(const OnigUChar*, const OnigUChar*,int,int*,OnigRegex,void*), void* arg)); +ONIG_EXTERN +int onig_number_of_names P_((OnigRegex reg)); +ONIG_EXTERN +int onig_number_of_captures P_((OnigRegex reg)); +ONIG_EXTERN +int onig_number_of_capture_histories P_((OnigRegex reg)); +ONIG_EXTERN +OnigCaptureTreeNode* onig_get_capture_tree P_((OnigRegion* region)); +ONIG_EXTERN +int onig_capture_tree_traverse P_((OnigRegion* region, int at, int(*callback_func)(int,int,int,int,int,void*), void* arg)); +ONIG_EXTERN +int onig_noname_group_capture_is_active P_((OnigRegex reg)); +ONIG_EXTERN +OnigEncoding onig_get_encoding P_((OnigRegex reg)); +ONIG_EXTERN +OnigOptionType onig_get_options P_((OnigRegex reg)); +ONIG_EXTERN +OnigAmbigType onig_get_ambig_flag P_((OnigRegex reg)); +ONIG_EXTERN +OnigSyntaxType* onig_get_syntax P_((OnigRegex reg)); +ONIG_EXTERN +int onig_set_default_syntax P_((OnigSyntaxType* syntax)); +ONIG_EXTERN +void onig_copy_syntax P_((OnigSyntaxType* to, OnigSyntaxType* from)); +ONIG_EXTERN +unsigned int onig_get_syntax_op P_((OnigSyntaxType* syntax)); +ONIG_EXTERN +unsigned int onig_get_syntax_op2 P_((OnigSyntaxType* syntax)); +ONIG_EXTERN +unsigned int onig_get_syntax_behavior P_((OnigSyntaxType* syntax)); +ONIG_EXTERN +OnigOptionType onig_get_syntax_options P_((OnigSyntaxType* syntax)); +ONIG_EXTERN +void onig_set_syntax_op P_((OnigSyntaxType* syntax, unsigned int op)); +ONIG_EXTERN +void onig_set_syntax_op2 P_((OnigSyntaxType* syntax, unsigned int op2)); +ONIG_EXTERN +void onig_set_syntax_behavior P_((OnigSyntaxType* syntax, unsigned int behavior)); +ONIG_EXTERN +void onig_set_syntax_options P_((OnigSyntaxType* syntax, OnigOptionType options)); +ONIG_EXTERN +int onig_set_meta_char P_((OnigEncoding enc, unsigned int what, OnigCodePoint code)); +ONIG_EXTERN +void onig_copy_encoding P_((OnigEncoding to, OnigEncoding from)); +ONIG_EXTERN +OnigAmbigType onig_get_default_ambig_flag P_((void)); +ONIG_EXTERN +int onig_set_default_ambig_flag P_((OnigAmbigType ambig_flag)); +ONIG_EXTERN +unsigned int onig_get_match_stack_limit_size P_((void)); +ONIG_EXTERN +int onig_set_match_stack_limit_size P_((unsigned int size)); +ONIG_EXTERN +int onig_end P_((void)); +ONIG_EXTERN +const char* onig_version P_((void)); +ONIG_EXTERN +const char* onig_copyright P_((void)); + +#ifdef __cplusplus +} +#endif + +#endif /* ONIGURUMA_H */ diff --git a/ext/mbstring/oniguruma/regcomp.c b/ext/mbstring/oniguruma/regcomp.c new file mode 100644 index 0000000..6a0976d --- /dev/null +++ b/ext/mbstring/oniguruma/regcomp.c @@ -0,0 +1,6044 @@ +/********************************************************************** + regcomp.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regparse.h" + +OnigAmbigType OnigDefaultAmbigFlag = + (ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE | + ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE); + +extern OnigAmbigType +onig_get_default_ambig_flag(void) +{ + return OnigDefaultAmbigFlag; +} + +extern int +onig_set_default_ambig_flag(OnigAmbigType ambig_flag) +{ + OnigDefaultAmbigFlag = ambig_flag; + return 0; +} + + +static UChar* +k_strdup(UChar* s, UChar* end) +{ + int len = end - s; + + if (len > 0) { + UChar* r = (UChar* )xmalloc(len + 1); + CHECK_NULL_RETURN(r); + xmemcpy(r, s, len); + r[len] = (UChar )0; + return r; + } + else return NULL; +} + +/* + Caution: node should not be a string node. + (s and end member address break) +*/ +static void +swap_node(Node* a, Node* b) +{ + Node c; + c = *a; *a = *b; *b = c; +} + +static OnigDistance +distance_add(OnigDistance d1, OnigDistance d2) +{ + if (d1 == ONIG_INFINITE_DISTANCE || d2 == ONIG_INFINITE_DISTANCE) + return ONIG_INFINITE_DISTANCE; + else { + if (d1 <= ONIG_INFINITE_DISTANCE - d2) return d1 + d2; + else return ONIG_INFINITE_DISTANCE; + } +} + +static OnigDistance +distance_multiply(OnigDistance d, int m) +{ + if (m == 0) return 0; + + if (d < ONIG_INFINITE_DISTANCE / m) + return d * m; + else + return ONIG_INFINITE_DISTANCE; +} + +static int +bitset_is_empty(BitSetRef bs) +{ + int i; + for (i = 0; i < BITSET_SIZE; i++) { + if (bs[i] != 0) return 0; + } + return 1; +} + +#ifdef ONIG_DEBUG +static int +bitset_on_num(BitSetRef bs) +{ + int i, n; + + n = 0; + for (i = 0; i < SINGLE_BYTE_SIZE; i++) { + if (BITSET_AT(bs, i)) n++; + } + return n; +} +#endif + +extern int +onig_bbuf_init(BBuf* buf, int size) +{ + buf->p = (UChar* )xmalloc(size); + if (IS_NULL(buf->p)) return(ONIGERR_MEMORY); + + buf->alloc = size; + buf->used = 0; + return 0; +} + + +#ifdef USE_SUBEXP_CALL + +static int +unset_addr_list_init(UnsetAddrList* uslist, int size) +{ + UnsetAddr* p; + + p = (UnsetAddr* )xmalloc(sizeof(UnsetAddr)* size); + CHECK_NULL_RETURN_VAL(p, ONIGERR_MEMORY); + uslist->num = 0; + uslist->alloc = size; + uslist->us = p; + return 0; +} + +static void +unset_addr_list_end(UnsetAddrList* uslist) +{ + if (IS_NOT_NULL(uslist->us)) + xfree(uslist->us); +} + +static int +unset_addr_list_add(UnsetAddrList* uslist, int offset, struct _Node* node) +{ + UnsetAddr* p; + int size; + + if (uslist->num >= uslist->alloc) { + size = uslist->alloc * 2; + p = (UnsetAddr* )xrealloc(uslist->us, sizeof(UnsetAddr) * size); + CHECK_NULL_RETURN_VAL(p, ONIGERR_MEMORY); + uslist->alloc = size; + uslist->us = p; + } + + uslist->us[uslist->num].offset = offset; + uslist->us[uslist->num].target = node; + uslist->num++; + return 0; +} +#endif /* USE_SUBEXP_CALL */ + + +static int +add_opcode(regex_t* reg, int opcode) +{ + BBUF_ADD1(reg, opcode); + return 0; +} + +#ifdef USE_COMBINATION_EXPLOSION_CHECK +static int +add_state_check_num(regex_t* reg, int num) +{ + StateCheckNumType n = (StateCheckNumType )num; + + BBUF_ADD(reg, &n, SIZE_STATE_CHECK_NUM); + return 0; +} +#endif + +static int +add_rel_addr(regex_t* reg, int addr) +{ + RelAddrType ra = (RelAddrType )addr; + + BBUF_ADD(reg, &ra, SIZE_RELADDR); + return 0; +} + +static int +add_abs_addr(regex_t* reg, int addr) +{ + AbsAddrType ra = (AbsAddrType )addr; + + BBUF_ADD(reg, &ra, SIZE_ABSADDR); + return 0; +} + +static int +add_length(regex_t* reg, int len) +{ + LengthType l = (LengthType )len; + + BBUF_ADD(reg, &l, SIZE_LENGTH); + return 0; +} + +static int +add_mem_num(regex_t* reg, int num) +{ + MemNumType n = (MemNumType )num; + + BBUF_ADD(reg, &n, SIZE_MEMNUM); + return 0; +} + +static int +add_pointer(regex_t* reg, void* addr) +{ + PointerType ptr = (PointerType )addr; + + BBUF_ADD(reg, &ptr, SIZE_POINTER); + return 0; +} + +static int +add_option(regex_t* reg, OnigOptionType option) +{ + BBUF_ADD(reg, &option, SIZE_OPTION); + return 0; +} + +static int +add_opcode_rel_addr(regex_t* reg, int opcode, int addr) +{ + int r; + + r = add_opcode(reg, opcode); + if (r) return r; + r = add_rel_addr(reg, addr); + return r; +} + +static int +add_bytes(regex_t* reg, UChar* bytes, int len) +{ + BBUF_ADD(reg, bytes, len); + return 0; +} + +static int +add_bitset(regex_t* reg, BitSetRef bs) +{ + BBUF_ADD(reg, bs, SIZE_BITSET); + return 0; +} + +static int +add_opcode_option(regex_t* reg, int opcode, OnigOptionType option) +{ + int r; + + r = add_opcode(reg, opcode); + if (r) return r; + r = add_option(reg, option); + return r; +} + +static int compile_length_tree(Node* node, regex_t* reg); +static int compile_tree(Node* node, regex_t* reg); + + +#define IS_NEED_STR_LEN_OP_EXACT(op) \ + ((op) == OP_EXACTN || (op) == OP_EXACTMB2N ||\ + (op) == OP_EXACTMB3N || (op) == OP_EXACTMBN || (op) == OP_EXACTN_IC) + +static int +select_str_opcode(int mb_len, int str_len, int ignore_case) +{ + int op; + + if (ignore_case) { + switch (str_len) { + case 1: op = OP_EXACT1_IC; break; + default: op = OP_EXACTN_IC; break; + } + } + else { + switch (mb_len) { + case 1: + switch (str_len) { + case 1: op = OP_EXACT1; break; + case 2: op = OP_EXACT2; break; + case 3: op = OP_EXACT3; break; + case 4: op = OP_EXACT4; break; + case 5: op = OP_EXACT5; break; + default: op = OP_EXACTN; break; + } + break; + + case 2: + switch (str_len) { + case 1: op = OP_EXACTMB2N1; break; + case 2: op = OP_EXACTMB2N2; break; + case 3: op = OP_EXACTMB2N3; break; + default: op = OP_EXACTMB2N; break; + } + break; + + case 3: + op = OP_EXACTMB3N; + break; + + default: + op = OP_EXACTMBN; + break; + } + } + return op; +} + +static int +compile_tree_empty_check(Node* node, regex_t* reg, int empty_info) +{ + int r; + int saved_num_null_check = reg->num_null_check; + + if (empty_info != 0) { + r = add_opcode(reg, OP_NULL_CHECK_START); + if (r) return r; + r = add_mem_num(reg, reg->num_null_check); /* NULL CHECK ID */ + if (r) return r; + reg->num_null_check++; + } + + r = compile_tree(node, reg); + if (r) return r; + + if (empty_info != 0) { + if (empty_info == NQ_TARGET_IS_EMPTY) + r = add_opcode(reg, OP_NULL_CHECK_END); + else if (empty_info == NQ_TARGET_IS_EMPTY_MEM) + r = add_opcode(reg, OP_NULL_CHECK_END_MEMST); + else if (empty_info == NQ_TARGET_IS_EMPTY_REC) + r = add_opcode(reg, OP_NULL_CHECK_END_MEMST_PUSH); + + if (r) return r; + r = add_mem_num(reg, saved_num_null_check); /* NULL CHECK ID */ + } + return r; +} + +#ifdef USE_SUBEXP_CALL +static int +compile_call(CallNode* node, regex_t* reg) +{ + int r; + + r = add_opcode(reg, OP_CALL); + if (r) return r; + r = unset_addr_list_add(node->unset_addr_list, BBUF_GET_OFFSET_POS(reg), + node->target); + if (r) return r; + r = add_abs_addr(reg, 0 /*dummy addr.*/); + return r; +} +#endif + +static int +compile_tree_n_times(Node* node, int n, regex_t* reg) +{ + int i, r; + + for (i = 0; i < n; i++) { + r = compile_tree(node, reg); + if (r) return r; + } + return 0; +} + +static int +add_compile_string_length(UChar* s, int mb_len, int str_len, + regex_t* reg, int ignore_case) +{ + int len; + int op = select_str_opcode(mb_len, str_len, ignore_case); + + len = SIZE_OPCODE; + + if (op == OP_EXACTMBN) len += SIZE_LENGTH; + if (IS_NEED_STR_LEN_OP_EXACT(op)) + len += SIZE_LENGTH; + + len += mb_len * str_len; + return len; +} + +static int +add_compile_string(UChar* s, int mb_len, int str_len, + regex_t* reg, int ignore_case) +{ + int op = select_str_opcode(mb_len, str_len, ignore_case); + add_opcode(reg, op); + + if (op == OP_EXACTMBN) + add_length(reg, mb_len); + + if (IS_NEED_STR_LEN_OP_EXACT(op)) { + if (op == OP_EXACTN_IC) + add_length(reg, mb_len * str_len); + else + add_length(reg, str_len); + } + + add_bytes(reg, s, mb_len * str_len); + return 0; +} + + +static int +compile_length_string_node(Node* node, regex_t* reg) +{ + int rlen, r, len, prev_len, slen, ambig; + OnigEncoding enc = reg->enc; + UChar *p, *prev; + StrNode* sn; + + sn = &(NSTRING(node)); + if (sn->end <= sn->s) + return 0; + + ambig = NSTRING_IS_AMBIG(node); + + p = prev = sn->s; + prev_len = enc_len(enc, p); + p += prev_len; + slen = 1; + rlen = 0; + + for (; p < sn->end; ) { + len = enc_len(enc, p); + if (len == prev_len) { + slen++; + } + else { + r = add_compile_string_length(prev, prev_len, slen, reg, ambig); + rlen += r; + prev = p; + slen = 1; + prev_len = len; + } + p += len; + } + r = add_compile_string_length(prev, prev_len, slen, reg, ambig); + rlen += r; + return rlen; +} + +static int +compile_length_string_raw_node(StrNode* sn, regex_t* reg) +{ + if (sn->end <= sn->s) + return 0; + + return add_compile_string_length(sn->s, 1 /* sb */, sn->end - sn->s, reg, 0); +} + +static int +compile_string_node(Node* node, regex_t* reg) +{ + int r, len, prev_len, slen, ambig; + OnigEncoding enc = reg->enc; + UChar *p, *prev, *end; + StrNode* sn; + + sn = &(NSTRING(node)); + if (sn->end <= sn->s) + return 0; + + end = sn->end; + ambig = NSTRING_IS_AMBIG(node); + + p = prev = sn->s; + prev_len = enc_len(enc, p); + p += prev_len; + slen = 1; + + for (; p < end; ) { + len = enc_len(enc, p); + if (len == prev_len) { + slen++; + } + else { + r = add_compile_string(prev, prev_len, slen, reg, ambig); + if (r) return r; + + prev = p; + slen = 1; + prev_len = len; + } + + p += len; + } + return add_compile_string(prev, prev_len, slen, reg, ambig); +} + +static int +compile_string_raw_node(StrNode* sn, regex_t* reg) +{ + if (sn->end <= sn->s) + return 0; + + return add_compile_string(sn->s, 1 /* sb */, sn->end - sn->s, reg, 0); +} + +static int +add_multi_byte_cclass(BBuf* mbuf, regex_t* reg) +{ +#ifdef PLATFORM_UNALIGNED_WORD_ACCESS + add_length(reg, mbuf->used); + return add_bytes(reg, mbuf->p, mbuf->used); +#else + static unsigned char PadBuf[WORD_ALIGNMENT_SIZE]; + + int r, pad_size; + UChar* p = BBUF_GET_ADD_ADDRESS(reg) + SIZE_LENGTH; + + GET_ALIGNMENT_PAD_SIZE(p, pad_size); + add_length(reg, mbuf->used + (WORD_ALIGNMENT_SIZE - 1)); + if (pad_size != 0) add_bytes(reg, PadBuf, pad_size); + + r = add_bytes(reg, mbuf->p, mbuf->used); + + /* padding for return value from compile_length_cclass_node() to be fix. */ + pad_size = (WORD_ALIGNMENT_SIZE - 1) - pad_size; + if (pad_size != 0) add_bytes(reg, PadBuf, pad_size); + return r; +#endif +} + +static int +compile_length_cclass_node(CClassNode* cc, regex_t* reg) +{ + int len; + + if (IS_CCLASS_SHARE(cc)) { + len = SIZE_OPCODE + SIZE_POINTER; + return len; + } + + if (IS_NULL(cc->mbuf)) { + len = SIZE_OPCODE + SIZE_BITSET; + } + else { + if (ONIGENC_MBC_MINLEN(reg->enc) > 1 || bitset_is_empty(cc->bs)) { + len = SIZE_OPCODE; + } + else { + len = SIZE_OPCODE + SIZE_BITSET; + } +#ifdef PLATFORM_UNALIGNED_WORD_ACCESS + len += SIZE_LENGTH + cc->mbuf->used; +#else + len += SIZE_LENGTH + cc->mbuf->used + (WORD_ALIGNMENT_SIZE - 1); +#endif + } + + return len; +} + +static int +compile_cclass_node(CClassNode* cc, regex_t* reg) +{ + int r; + + if (IS_CCLASS_SHARE(cc)) { + add_opcode(reg, OP_CCLASS_NODE); + r = add_pointer(reg, cc); + return r; + } + + if (IS_NULL(cc->mbuf)) { + if (IS_CCLASS_NOT(cc)) + add_opcode(reg, OP_CCLASS_NOT); + else + add_opcode(reg, OP_CCLASS); + + r = add_bitset(reg, cc->bs); + } + else { + if (ONIGENC_MBC_MINLEN(reg->enc) > 1 || bitset_is_empty(cc->bs)) { + if (IS_CCLASS_NOT(cc)) + add_opcode(reg, OP_CCLASS_MB_NOT); + else + add_opcode(reg, OP_CCLASS_MB); + + r = add_multi_byte_cclass(cc->mbuf, reg); + } + else { + if (IS_CCLASS_NOT(cc)) + add_opcode(reg, OP_CCLASS_MIX_NOT); + else + add_opcode(reg, OP_CCLASS_MIX); + + r = add_bitset(reg, cc->bs); + if (r) return r; + r = add_multi_byte_cclass(cc->mbuf, reg); + } + } + + return r; +} + +static int +entry_repeat_range(regex_t* reg, int id, int lower, int upper) +{ +#define REPEAT_RANGE_ALLOC 4 + + OnigRepeatRange* p; + + if (reg->repeat_range_alloc == 0) { + p = (OnigRepeatRange* )xmalloc(sizeof(OnigRepeatRange) * REPEAT_RANGE_ALLOC); + CHECK_NULL_RETURN_VAL(p, ONIGERR_MEMORY); + reg->repeat_range = p; + reg->repeat_range_alloc = REPEAT_RANGE_ALLOC; + } + else if (reg->repeat_range_alloc <= id) { + int n; + n = reg->repeat_range_alloc + REPEAT_RANGE_ALLOC; + p = (OnigRepeatRange* )xrealloc(reg->repeat_range, + sizeof(OnigRepeatRange) * n); + CHECK_NULL_RETURN_VAL(p, ONIGERR_MEMORY); + reg->repeat_range = p; + reg->repeat_range_alloc = n; + } + else { + p = reg->repeat_range; + } + + p[id].lower = lower; + p[id].upper = (IS_REPEAT_INFINITE(upper) ? 0x7fffffff : upper); + return 0; +} + +static int +compile_range_repeat_node(QuantifierNode* qn, int target_len, int empty_info, + regex_t* reg) +{ + int r; + int num_repeat = reg->num_repeat; + + r = add_opcode(reg, qn->greedy ? OP_REPEAT : OP_REPEAT_NG); + if (r) return r; + r = add_mem_num(reg, num_repeat); /* OP_REPEAT ID */ + reg->num_repeat++; + if (r) return r; + r = add_rel_addr(reg, target_len + SIZE_OP_REPEAT_INC); + if (r) return r; + + r = entry_repeat_range(reg, num_repeat, qn->lower, qn->upper); + if (r) return r; + + r = compile_tree_empty_check(qn->target, reg, empty_info); + if (r) return r; + + if ( +#ifdef USE_SUBEXP_CALL + reg->num_call > 0 || +#endif + IS_QUANTIFIER_IN_REPEAT(qn)) { + r = add_opcode(reg, qn->greedy ? OP_REPEAT_INC_SG : OP_REPEAT_INC_NG_SG); + } + else { + r = add_opcode(reg, qn->greedy ? OP_REPEAT_INC : OP_REPEAT_INC_NG); + } + if (r) return r; + r = add_mem_num(reg, num_repeat); /* OP_REPEAT ID */ + return r; +} + +static int +is_anychar_star_quantifier(QuantifierNode* qn) +{ + if (qn->greedy && IS_REPEAT_INFINITE(qn->upper) && + NTYPE(qn->target) == N_ANYCHAR) + return 1; + else + return 0; +} + +#define QUANTIFIER_EXPAND_LIMIT_SIZE 50 +#define CKN_ON (ckn > 0) + +#ifdef USE_COMBINATION_EXPLOSION_CHECK + +static int +compile_length_quantifier_node(QuantifierNode* qn, regex_t* reg) +{ + int len, mod_tlen, cklen; + int ckn; + int infinite = IS_REPEAT_INFINITE(qn->upper); + int empty_info = qn->target_empty_info; + int tlen = compile_length_tree(qn->target, reg); + + if (tlen < 0) return tlen; + + ckn = ((reg->num_comb_exp_check > 0) ? qn->comb_exp_check_num : 0); + + cklen = (CKN_ON ? SIZE_STATE_CHECK_NUM: 0); + + /* anychar repeat */ + if (NTYPE(qn->target) == N_ANYCHAR) { + if (qn->greedy && infinite) { + if (IS_NOT_NULL(qn->next_head_exact) && !CKN_ON) + return SIZE_OP_ANYCHAR_STAR_PEEK_NEXT + tlen * qn->lower + cklen; + else + return SIZE_OP_ANYCHAR_STAR + tlen * qn->lower + cklen; + } + } + + if (empty_info != 0) + mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END); + else + mod_tlen = tlen; + + if (infinite && qn->lower <= 1) { + if (qn->greedy) { + if (qn->lower == 1) + len = SIZE_OP_JUMP; + else + len = 0; + + len += SIZE_OP_PUSH + cklen + mod_tlen + SIZE_OP_JUMP; + } + else { + if (qn->lower == 0) + len = SIZE_OP_JUMP; + else + len = 0; + + len += mod_tlen + SIZE_OP_PUSH + cklen; + } + } + else if (qn->upper == 0) { + if (qn->is_refered != 0) /* /(?<n>..){0}/ */ + len = SIZE_OP_JUMP + tlen; + else + len = 0; + } + else if (qn->upper == 1 && qn->greedy) { + if (qn->lower == 0) { + if (CKN_ON) { + len = SIZE_OP_STATE_CHECK_PUSH + tlen; + } + else { + len = SIZE_OP_PUSH + tlen; + } + } + else { + len = tlen; + } + } + else if (!qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */ + len = SIZE_OP_PUSH + cklen + SIZE_OP_JUMP + tlen; + } + else { + len = SIZE_OP_REPEAT_INC + + mod_tlen + SIZE_OPCODE + SIZE_RELADDR + SIZE_MEMNUM; + if (CKN_ON) + len += SIZE_OP_STATE_CHECK; + } + + return len; +} + +static int +compile_quantifier_node(QuantifierNode* qn, regex_t* reg) +{ + int r, mod_tlen; + int ckn; + int infinite = IS_REPEAT_INFINITE(qn->upper); + int empty_info = qn->target_empty_info; + int tlen = compile_length_tree(qn->target, reg); + + if (tlen < 0) return tlen; + + ckn = ((reg->num_comb_exp_check > 0) ? qn->comb_exp_check_num : 0); + + if (is_anychar_star_quantifier(qn)) { + r = compile_tree_n_times(qn->target, qn->lower, reg); + if (r) return r; + if (IS_NOT_NULL(qn->next_head_exact) && !CKN_ON) { + if (IS_MULTILINE(reg->options)) + r = add_opcode(reg, OP_ANYCHAR_ML_STAR_PEEK_NEXT); + else + r = add_opcode(reg, OP_ANYCHAR_STAR_PEEK_NEXT); + if (r) return r; + if (CKN_ON) { + r = add_state_check_num(reg, ckn); + if (r) return r; + } + + return add_bytes(reg, NSTRING(qn->next_head_exact).s, 1); + } + else { + if (IS_MULTILINE(reg->options)) { + r = add_opcode(reg, (CKN_ON ? + OP_STATE_CHECK_ANYCHAR_ML_STAR + : OP_ANYCHAR_ML_STAR)); + } + else { + r = add_opcode(reg, (CKN_ON ? + OP_STATE_CHECK_ANYCHAR_STAR + : OP_ANYCHAR_STAR)); + } + if (r) return r; + if (CKN_ON) + r = add_state_check_num(reg, ckn); + + return r; + } + } + + if (empty_info != 0) + mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END); + else + mod_tlen = tlen; + + if (infinite && qn->lower <= 1) { + if (qn->greedy) { + if (qn->lower == 1) { + r = add_opcode_rel_addr(reg, OP_JUMP, + (CKN_ON ? SIZE_OP_STATE_CHECK_PUSH : SIZE_OP_PUSH)); + if (r) return r; + } + + if (CKN_ON) { + r = add_opcode(reg, OP_STATE_CHECK_PUSH); + if (r) return r; + r = add_state_check_num(reg, ckn); + if (r) return r; + r = add_rel_addr(reg, mod_tlen + SIZE_OP_JUMP); + } + else { + r = add_opcode_rel_addr(reg, OP_PUSH, mod_tlen + SIZE_OP_JUMP); + } + if (r) return r; + r = compile_tree_empty_check(qn->target, reg, empty_info); + if (r) return r; + r = add_opcode_rel_addr(reg, OP_JUMP, + -(mod_tlen + (int )SIZE_OP_JUMP + + (int )(CKN_ON ? SIZE_OP_STATE_CHECK_PUSH : SIZE_OP_PUSH))); + } + else { + if (qn->lower == 0) { + r = add_opcode_rel_addr(reg, OP_JUMP, mod_tlen); + if (r) return r; + } + r = compile_tree_empty_check(qn->target, reg, empty_info); + if (r) return r; + if (CKN_ON) { + r = add_opcode(reg, OP_STATE_CHECK_PUSH_OR_JUMP); + if (r) return r; + r = add_state_check_num(reg, ckn); + if (r) return r; + r = add_rel_addr(reg, + -(mod_tlen + (int )SIZE_OP_STATE_CHECK_PUSH_OR_JUMP)); + } + else + r = add_opcode_rel_addr(reg, OP_PUSH, -(mod_tlen + (int )SIZE_OP_PUSH)); + } + } + else if (qn->upper == 0) { + if (qn->is_refered != 0) { /* /(?<n>..){0}/ */ + r = add_opcode_rel_addr(reg, OP_JUMP, tlen); + if (r) return r; + r = compile_tree(qn->target, reg); + } + else + r = 0; + } + else if (qn->upper == 1 && qn->greedy) { + if (qn->lower == 0) { + if (CKN_ON) { + r = add_opcode(reg, OP_STATE_CHECK_PUSH); + if (r) return r; + r = add_state_check_num(reg, ckn); + if (r) return r; + r = add_rel_addr(reg, tlen); + } + else { + r = add_opcode_rel_addr(reg, OP_PUSH, tlen); + } + if (r) return r; + } + + r = compile_tree(qn->target, reg); + } + else if (!qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */ + if (CKN_ON) { + r = add_opcode(reg, OP_STATE_CHECK_PUSH); + if (r) return r; + r = add_state_check_num(reg, ckn); + if (r) return r; + r = add_rel_addr(reg, SIZE_OP_JUMP); + } + else { + r = add_opcode_rel_addr(reg, OP_PUSH, SIZE_OP_JUMP); + } + + if (r) return r; + r = add_opcode_rel_addr(reg, OP_JUMP, tlen); + if (r) return r; + r = compile_tree(qn->target, reg); + } + else { + r = compile_range_repeat_node(qn, mod_tlen, empty_info, reg); + if (CKN_ON) { + if (r) return r; + r = add_opcode(reg, OP_STATE_CHECK); + if (r) return r; + r = add_state_check_num(reg, ckn); + } + } + return r; +} + +#else /* USE_COMBINATION_EXPLOSION_CHECK */ + +static int +compile_length_quantifier_node(QuantifierNode* qn, regex_t* reg) +{ + int len, mod_tlen; + int infinite = IS_REPEAT_INFINITE(qn->upper); + int empty_info = qn->target_empty_info; + int tlen = compile_length_tree(qn->target, reg); + + if (tlen < 0) return tlen; + + /* anychar repeat */ + if (NTYPE(qn->target) == N_ANYCHAR) { + if (qn->greedy && infinite) { + if (IS_NOT_NULL(qn->next_head_exact)) + return SIZE_OP_ANYCHAR_STAR_PEEK_NEXT + tlen * qn->lower; + else + return SIZE_OP_ANYCHAR_STAR + tlen * qn->lower; + } + } + + if (empty_info != 0) + mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END); + else + mod_tlen = tlen; + + if (infinite && + (qn->lower <= 1 || tlen * qn->lower <= QUANTIFIER_EXPAND_LIMIT_SIZE)) { + if (qn->lower == 1 && tlen > QUANTIFIER_EXPAND_LIMIT_SIZE) { + len = SIZE_OP_JUMP; + } + else { + len = tlen * qn->lower; + } + + if (qn->greedy) { + if (IS_NOT_NULL(qn->head_exact)) + len += SIZE_OP_PUSH_OR_JUMP_EXACT1 + mod_tlen + SIZE_OP_JUMP; + else if (IS_NOT_NULL(qn->next_head_exact)) + len += SIZE_OP_PUSH_IF_PEEK_NEXT + mod_tlen + SIZE_OP_JUMP; + else + len += SIZE_OP_PUSH + mod_tlen + SIZE_OP_JUMP; + } + else + len += SIZE_OP_JUMP + mod_tlen + SIZE_OP_PUSH; + } + else if (qn->upper == 0 && qn->is_refered != 0) { /* /(?<n>..){0}/ */ + len = SIZE_OP_JUMP + tlen; + } + else if (!infinite && qn->greedy && + (qn->upper == 1 || (tlen + SIZE_OP_PUSH) * qn->upper + <= QUANTIFIER_EXPAND_LIMIT_SIZE)) { + len = tlen * qn->lower; + len += (SIZE_OP_PUSH + tlen) * (qn->upper - qn->lower); + } + else if (!qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */ + len = SIZE_OP_PUSH + SIZE_OP_JUMP + tlen; + } + else { + len = SIZE_OP_REPEAT_INC + + mod_tlen + SIZE_OPCODE + SIZE_RELADDR + SIZE_MEMNUM; + } + + return len; +} + +static int +compile_quantifier_node(QuantifierNode* qn, regex_t* reg) +{ + int i, r, mod_tlen; + int infinite = IS_REPEAT_INFINITE(qn->upper); + int empty_info = qn->target_empty_info; + int tlen = compile_length_tree(qn->target, reg); + + if (tlen < 0) return tlen; + + if (is_anychar_star_quantifier(qn)) { + r = compile_tree_n_times(qn->target, qn->lower, reg); + if (r) return r; + if (IS_NOT_NULL(qn->next_head_exact)) { + if (IS_MULTILINE(reg->options)) + r = add_opcode(reg, OP_ANYCHAR_ML_STAR_PEEK_NEXT); + else + r = add_opcode(reg, OP_ANYCHAR_STAR_PEEK_NEXT); + if (r) return r; + return add_bytes(reg, NSTRING(qn->next_head_exact).s, 1); + } + else { + if (IS_MULTILINE(reg->options)) + return add_opcode(reg, OP_ANYCHAR_ML_STAR); + else + return add_opcode(reg, OP_ANYCHAR_STAR); + } + } + + if (empty_info != 0) + mod_tlen = tlen + (SIZE_OP_NULL_CHECK_START + SIZE_OP_NULL_CHECK_END); + else + mod_tlen = tlen; + + if (infinite && + (qn->lower <= 1 || tlen * qn->lower <= QUANTIFIER_EXPAND_LIMIT_SIZE)) { + if (qn->lower == 1 && tlen > QUANTIFIER_EXPAND_LIMIT_SIZE) { + if (qn->greedy) { + if (IS_NOT_NULL(qn->head_exact)) + r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH_OR_JUMP_EXACT1); + else if (IS_NOT_NULL(qn->next_head_exact)) + r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH_IF_PEEK_NEXT); + else + r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH); + } + else { + r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_JUMP); + } + if (r) return r; + } + else { + r = compile_tree_n_times(qn->target, qn->lower, reg); + if (r) return r; + } + + if (qn->greedy) { + if (IS_NOT_NULL(qn->head_exact)) { + r = add_opcode_rel_addr(reg, OP_PUSH_OR_JUMP_EXACT1, + mod_tlen + SIZE_OP_JUMP); + if (r) return r; + add_bytes(reg, NSTRING(qn->head_exact).s, 1); + r = compile_tree_empty_check(qn->target, reg, empty_info); + if (r) return r; + r = add_opcode_rel_addr(reg, OP_JUMP, + -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_OR_JUMP_EXACT1)); + } + else if (IS_NOT_NULL(qn->next_head_exact)) { + r = add_opcode_rel_addr(reg, OP_PUSH_IF_PEEK_NEXT, + mod_tlen + SIZE_OP_JUMP); + if (r) return r; + add_bytes(reg, NSTRING(qn->next_head_exact).s, 1); + r = compile_tree_empty_check(qn->target, reg, empty_info); + if (r) return r; + r = add_opcode_rel_addr(reg, OP_JUMP, + -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_IF_PEEK_NEXT)); + } + else { + r = add_opcode_rel_addr(reg, OP_PUSH, mod_tlen + SIZE_OP_JUMP); + if (r) return r; + r = compile_tree_empty_check(qn->target, reg, empty_info); + if (r) return r; + r = add_opcode_rel_addr(reg, OP_JUMP, + -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH)); + } + } + else { + r = add_opcode_rel_addr(reg, OP_JUMP, mod_tlen); + if (r) return r; + r = compile_tree_empty_check(qn->target, reg, empty_info); + if (r) return r; + r = add_opcode_rel_addr(reg, OP_PUSH, -(mod_tlen + (int )SIZE_OP_PUSH)); + } + } + else if (qn->upper == 0 && qn->is_refered != 0) { /* /(?<n>..){0}/ */ + r = add_opcode_rel_addr(reg, OP_JUMP, tlen); + if (r) return r; + r = compile_tree(qn->target, reg); + } + else if (!infinite && qn->greedy && + (qn->upper == 1 || (tlen + SIZE_OP_PUSH) * qn->upper + <= QUANTIFIER_EXPAND_LIMIT_SIZE)) { + int n = qn->upper - qn->lower; + + r = compile_tree_n_times(qn->target, qn->lower, reg); + if (r) return r; + + for (i = 0; i < n; i++) { + r = add_opcode_rel_addr(reg, OP_PUSH, + (n - i) * tlen + (n - i - 1) * SIZE_OP_PUSH); + if (r) return r; + r = compile_tree(qn->target, reg); + if (r) return r; + } + } + else if (!qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */ + r = add_opcode_rel_addr(reg, OP_PUSH, SIZE_OP_JUMP); + if (r) return r; + r = add_opcode_rel_addr(reg, OP_JUMP, tlen); + if (r) return r; + r = compile_tree(qn->target, reg); + } + else { + r = compile_range_repeat_node(qn, mod_tlen, empty_info, reg); + } + return r; +} +#endif /* USE_COMBINATION_EXPLOSION_CHECK */ + +static int +compile_length_option_node(EffectNode* node, regex_t* reg) +{ + int tlen; + OnigOptionType prev = reg->options; + + reg->options = node->option; + tlen = compile_length_tree(node->target, reg); + reg->options = prev; + + if (tlen < 0) return tlen; + + if (IS_DYNAMIC_OPTION(prev ^ node->option)) { + return SIZE_OP_SET_OPTION_PUSH + SIZE_OP_SET_OPTION + SIZE_OP_FAIL + + tlen + SIZE_OP_SET_OPTION; + } + else + return tlen; +} + +static int +compile_option_node(EffectNode* node, regex_t* reg) +{ + int r; + OnigOptionType prev = reg->options; + + if (IS_DYNAMIC_OPTION(prev ^ node->option)) { + r = add_opcode_option(reg, OP_SET_OPTION_PUSH, node->option); + if (r) return r; + r = add_opcode_option(reg, OP_SET_OPTION, prev); + if (r) return r; + r = add_opcode(reg, OP_FAIL); + if (r) return r; + } + + reg->options = node->option; + r = compile_tree(node->target, reg); + reg->options = prev; + + if (IS_DYNAMIC_OPTION(prev ^ node->option)) { + if (r) return r; + r = add_opcode_option(reg, OP_SET_OPTION, prev); + } + return r; +} + +static int +compile_length_effect_node(EffectNode* node, regex_t* reg) +{ + int len; + int tlen; + + if (node->type == EFFECT_OPTION) + return compile_length_option_node(node, reg); + + if (node->target) { + tlen = compile_length_tree(node->target, reg); + if (tlen < 0) return tlen; + } + else + tlen = 0; + + switch (node->type) { + case EFFECT_MEMORY: +#ifdef USE_SUBEXP_CALL + if (IS_EFFECT_CALLED(node)) { + len = SIZE_OP_MEMORY_START_PUSH + tlen + + SIZE_OP_CALL + SIZE_OP_JUMP + SIZE_OP_RETURN; + if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum)) + len += (IS_EFFECT_RECURSION(node) + ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH); + else + len += (IS_EFFECT_RECURSION(node) + ? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END); + } + else +#endif + { + if (BIT_STATUS_AT(reg->bt_mem_start, node->regnum)) + len = SIZE_OP_MEMORY_START_PUSH; + else + len = SIZE_OP_MEMORY_START; + + len += tlen + (BIT_STATUS_AT(reg->bt_mem_end, node->regnum) + ? SIZE_OP_MEMORY_END_PUSH : SIZE_OP_MEMORY_END); + } + break; + + case EFFECT_STOP_BACKTRACK: + if (IS_EFFECT_STOP_BT_SIMPLE_REPEAT(node)) { + QuantifierNode* qn = &NQUANTIFIER(node->target); + tlen = compile_length_tree(qn->target, reg); + if (tlen < 0) return tlen; + + len = tlen * qn->lower + + SIZE_OP_PUSH + tlen + SIZE_OP_POP + SIZE_OP_JUMP; + } + else { + len = SIZE_OP_PUSH_STOP_BT + tlen + SIZE_OP_POP_STOP_BT; + } + break; + + default: + return ONIGERR_TYPE_BUG; + break; + } + + return len; +} + +static int get_char_length_tree(Node* node, regex_t* reg, int* len); + +static int +compile_effect_node(EffectNode* node, regex_t* reg) +{ + int r, len; + + if (node->type == EFFECT_OPTION) + return compile_option_node(node, reg); + + switch (node->type) { + case EFFECT_MEMORY: +#ifdef USE_SUBEXP_CALL + if (IS_EFFECT_CALLED(node)) { + r = add_opcode(reg, OP_CALL); + if (r) return r; + node->call_addr = BBUF_GET_OFFSET_POS(reg) + SIZE_ABSADDR + SIZE_OP_JUMP; + node->state |= NST_ADDR_FIXED; + r = add_abs_addr(reg, (int )node->call_addr); + if (r) return r; + len = compile_length_tree(node->target, reg); + len += (SIZE_OP_MEMORY_START_PUSH + SIZE_OP_RETURN); + if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum)) + len += (IS_EFFECT_RECURSION(node) + ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH); + else + len += (IS_EFFECT_RECURSION(node) + ? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END); + + r = add_opcode_rel_addr(reg, OP_JUMP, len); + if (r) return r; + } +#endif + if (BIT_STATUS_AT(reg->bt_mem_start, node->regnum)) + r = add_opcode(reg, OP_MEMORY_START_PUSH); + else + r = add_opcode(reg, OP_MEMORY_START); + if (r) return r; + r = add_mem_num(reg, node->regnum); + if (r) return r; + r = compile_tree(node->target, reg); + if (r) return r; +#ifdef USE_SUBEXP_CALL + if (IS_EFFECT_CALLED(node)) { + if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum)) + r = add_opcode(reg, (IS_EFFECT_RECURSION(node) + ? OP_MEMORY_END_PUSH_REC : OP_MEMORY_END_PUSH)); + else + r = add_opcode(reg, (IS_EFFECT_RECURSION(node) + ? OP_MEMORY_END_REC : OP_MEMORY_END)); + + if (r) return r; + r = add_mem_num(reg, node->regnum); + if (r) return r; + r = add_opcode(reg, OP_RETURN); + } + else +#endif + { + if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum)) + r = add_opcode(reg, OP_MEMORY_END_PUSH); + else + r = add_opcode(reg, OP_MEMORY_END); + if (r) return r; + r = add_mem_num(reg, node->regnum); + } + break; + + case EFFECT_STOP_BACKTRACK: + if (IS_EFFECT_STOP_BT_SIMPLE_REPEAT(node)) { + QuantifierNode* qn = &NQUANTIFIER(node->target); + r = compile_tree_n_times(qn->target, qn->lower, reg); + if (r) return r; + + len = compile_length_tree(qn->target, reg); + if (len < 0) return len; + + r = add_opcode_rel_addr(reg, OP_PUSH, len + SIZE_OP_POP + SIZE_OP_JUMP); + if (r) return r; + r = compile_tree(qn->target, reg); + if (r) return r; + r = add_opcode(reg, OP_POP); + if (r) return r; + r = add_opcode_rel_addr(reg, OP_JUMP, + -((int )SIZE_OP_PUSH + len + (int )SIZE_OP_POP + (int )SIZE_OP_JUMP)); + } + else { + r = add_opcode(reg, OP_PUSH_STOP_BT); + if (r) return r; + r = compile_tree(node->target, reg); + if (r) return r; + r = add_opcode(reg, OP_POP_STOP_BT); + } + break; + + default: + return ONIGERR_TYPE_BUG; + break; + } + + return r; +} + +static int +compile_length_anchor_node(AnchorNode* node, regex_t* reg) +{ + int len; + int tlen = 0; + + if (node->target) { + tlen = compile_length_tree(node->target, reg); + if (tlen < 0) return tlen; + } + + switch (node->type) { + case ANCHOR_PREC_READ: + len = SIZE_OP_PUSH_POS + tlen + SIZE_OP_POP_POS; + break; + case ANCHOR_PREC_READ_NOT: + len = SIZE_OP_PUSH_POS_NOT + tlen + SIZE_OP_FAIL_POS; + break; + case ANCHOR_LOOK_BEHIND: + len = SIZE_OP_LOOK_BEHIND + tlen; + break; + case ANCHOR_LOOK_BEHIND_NOT: + len = SIZE_OP_PUSH_LOOK_BEHIND_NOT + tlen + SIZE_OP_FAIL_LOOK_BEHIND_NOT; + break; + + default: + len = SIZE_OPCODE; + break; + } + + return len; +} + +static int +compile_anchor_node(AnchorNode* node, regex_t* reg) +{ + int r, len; + + switch (node->type) { + case ANCHOR_BEGIN_BUF: r = add_opcode(reg, OP_BEGIN_BUF); break; + case ANCHOR_END_BUF: r = add_opcode(reg, OP_END_BUF); break; + case ANCHOR_BEGIN_LINE: r = add_opcode(reg, OP_BEGIN_LINE); break; + case ANCHOR_END_LINE: r = add_opcode(reg, OP_END_LINE); break; + case ANCHOR_SEMI_END_BUF: r = add_opcode(reg, OP_SEMI_END_BUF); break; + case ANCHOR_BEGIN_POSITION: r = add_opcode(reg, OP_BEGIN_POSITION); break; + + case ANCHOR_WORD_BOUND: r = add_opcode(reg, OP_WORD_BOUND); break; + case ANCHOR_NOT_WORD_BOUND: r = add_opcode(reg, OP_NOT_WORD_BOUND); break; +#ifdef USE_WORD_BEGIN_END + case ANCHOR_WORD_BEGIN: r = add_opcode(reg, OP_WORD_BEGIN); break; + case ANCHOR_WORD_END: r = add_opcode(reg, OP_WORD_END); break; +#endif + + case ANCHOR_PREC_READ: + r = add_opcode(reg, OP_PUSH_POS); + if (r) return r; + r = compile_tree(node->target, reg); + if (r) return r; + r = add_opcode(reg, OP_POP_POS); + break; + + case ANCHOR_PREC_READ_NOT: + len = compile_length_tree(node->target, reg); + if (len < 0) return len; + r = add_opcode_rel_addr(reg, OP_PUSH_POS_NOT, len + SIZE_OP_FAIL_POS); + if (r) return r; + r = compile_tree(node->target, reg); + if (r) return r; + r = add_opcode(reg, OP_FAIL_POS); + break; + + case ANCHOR_LOOK_BEHIND: + { + int n; + r = add_opcode(reg, OP_LOOK_BEHIND); + if (r) return r; + if (node->char_len < 0) { + r = get_char_length_tree(node->target, reg, &n); + if (r) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN; + } + else + n = node->char_len; + r = add_length(reg, n); + if (r) return r; + r = compile_tree(node->target, reg); + } + break; + + case ANCHOR_LOOK_BEHIND_NOT: + { + int n; + len = compile_length_tree(node->target, reg); + r = add_opcode_rel_addr(reg, OP_PUSH_LOOK_BEHIND_NOT, + len + SIZE_OP_FAIL_LOOK_BEHIND_NOT); + if (r) return r; + if (node->char_len < 0) { + r = get_char_length_tree(node->target, reg, &n); + if (r) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN; + } + else + n = node->char_len; + r = add_length(reg, n); + if (r) return r; + r = compile_tree(node->target, reg); + if (r) return r; + r = add_opcode(reg, OP_FAIL_LOOK_BEHIND_NOT); + } + break; + + default: + return ONIGERR_TYPE_BUG; + break; + } + + return r; +} + +static int +compile_length_tree(Node* node, regex_t* reg) +{ + int len, type, r; + + type = NTYPE(node); + switch (type) { + case N_LIST: + len = 0; + do { + r = compile_length_tree(NCONS(node).left, reg); + if (r < 0) return r; + len += r; + } while (IS_NOT_NULL(node = NCONS(node).right)); + r = len; + break; + + case N_ALT: + { + int n; + + n = r = 0; + do { + r += compile_length_tree(NCONS(node).left, reg); + n++; + } while (IS_NOT_NULL(node = NCONS(node).right)); + r += (SIZE_OP_PUSH + SIZE_OP_JUMP) * (n - 1); + } + break; + + case N_STRING: + if (NSTRING_IS_RAW(node)) + r = compile_length_string_raw_node(&(NSTRING(node)), reg); + else + r = compile_length_string_node(node, reg); + break; + + case N_CCLASS: + r = compile_length_cclass_node(&(NCCLASS(node)), reg); + break; + + case N_CTYPE: + case N_ANYCHAR: + r = SIZE_OPCODE; + break; + + case N_BACKREF: + { + BackrefNode* br = &(NBACKREF(node)); + +#ifdef USE_BACKREF_AT_LEVEL + if (IS_BACKREF_NEST_LEVEL(br)) { + r = SIZE_OPCODE + SIZE_OPTION + SIZE_LENGTH + + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num); + } + else +#endif + if (br->back_num == 1) { + r = ((!IS_IGNORECASE(reg->options) && br->back_static[0] <= 2) + ? SIZE_OPCODE : (SIZE_OPCODE + SIZE_MEMNUM)); + } + else { + r = SIZE_OPCODE + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num); + } + } + break; + +#ifdef USE_SUBEXP_CALL + case N_CALL: + r = SIZE_OP_CALL; + break; +#endif + + case N_QUANTIFIER: + r = compile_length_quantifier_node(&(NQUANTIFIER(node)), reg); + break; + + case N_EFFECT: + r = compile_length_effect_node(&NEFFECT(node), reg); + break; + + case N_ANCHOR: + r = compile_length_anchor_node(&(NANCHOR(node)), reg); + break; + + default: + return ONIGERR_TYPE_BUG; + break; + } + + return r; +} + +static int +compile_tree(Node* node, regex_t* reg) +{ + int n, type, len, pos, r = 0; + + type = NTYPE(node); + switch (type) { + case N_LIST: + do { + r = compile_tree(NCONS(node).left, reg); + } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right)); + break; + + case N_ALT: + { + Node* x = node; + len = 0; + do { + len += compile_length_tree(NCONS(x).left, reg); + if (NCONS(x).right != NULL) { + len += SIZE_OP_PUSH + SIZE_OP_JUMP; + } + } while (IS_NOT_NULL(x = NCONS(x).right)); + pos = reg->used + len; /* goal position */ + + do { + len = compile_length_tree(NCONS(node).left, reg); + if (IS_NOT_NULL(NCONS(node).right)) { + r = add_opcode_rel_addr(reg, OP_PUSH, len + SIZE_OP_JUMP); + if (r) break; + } + r = compile_tree(NCONS(node).left, reg); + if (r) break; + if (IS_NOT_NULL(NCONS(node).right)) { + len = pos - (reg->used + SIZE_OP_JUMP); + r = add_opcode_rel_addr(reg, OP_JUMP, len); + if (r) break; + } + } while (IS_NOT_NULL(node = NCONS(node).right)); + } + break; + + case N_STRING: + if (NSTRING_IS_RAW(node)) + r = compile_string_raw_node(&(NSTRING(node)), reg); + else + r = compile_string_node(node, reg); + break; + + case N_CCLASS: + r = compile_cclass_node(&(NCCLASS(node)), reg); + break; + + case N_CTYPE: + { + int op; + + switch (NCTYPE(node).type) { + case CTYPE_WORD: op = OP_WORD; break; + case CTYPE_NOT_WORD: op = OP_NOT_WORD; break; + default: + return ONIGERR_TYPE_BUG; + break; + } + r = add_opcode(reg, op); + } + break; + + case N_ANYCHAR: + if (IS_MULTILINE(reg->options)) + r = add_opcode(reg, OP_ANYCHAR_ML); + else + r = add_opcode(reg, OP_ANYCHAR); + break; + + case N_BACKREF: + { + BackrefNode* br = &(NBACKREF(node)); + +#ifdef USE_BACKREF_AT_LEVEL + if (IS_BACKREF_NEST_LEVEL(br)) { + r = add_opcode(reg, OP_BACKREF_AT_LEVEL); + if (r) return r; + r = add_option(reg, (reg->options & ONIG_OPTION_IGNORECASE)); + if (r) return r; + r = add_length(reg, br->nest_level); + if (r) return r; + + goto add_bacref_mems; + } + else +#endif + if (br->back_num == 1) { + n = br->back_static[0]; + if (IS_IGNORECASE(reg->options)) { + r = add_opcode(reg, OP_BACKREFN_IC); + if (r) return r; + r = add_mem_num(reg, n); + } + else { + switch (n) { + case 1: r = add_opcode(reg, OP_BACKREF1); break; + case 2: r = add_opcode(reg, OP_BACKREF2); break; + default: + r = add_opcode(reg, OP_BACKREFN); + if (r) return r; + r = add_mem_num(reg, n); + break; + } + } + } + else { + int i; + int* p; + + if (IS_IGNORECASE(reg->options)) { + r = add_opcode(reg, OP_BACKREF_MULTI_IC); + } + else { + r = add_opcode(reg, OP_BACKREF_MULTI); + } + if (r) return r; + +#ifdef USE_BACKREF_AT_LEVEL + add_bacref_mems: +#endif + r = add_length(reg, br->back_num); + if (r) return r; + p = BACKREFS_P(br); + for (i = br->back_num - 1; i >= 0; i--) { + r = add_mem_num(reg, p[i]); + if (r) return r; + } + } + } + break; + +#ifdef USE_SUBEXP_CALL + case N_CALL: + r = compile_call(&(NCALL(node)), reg); + break; +#endif + + case N_QUANTIFIER: + r = compile_quantifier_node(&(NQUANTIFIER(node)), reg); + break; + + case N_EFFECT: + r = compile_effect_node(&NEFFECT(node), reg); + break; + + case N_ANCHOR: + r = compile_anchor_node(&(NANCHOR(node)), reg); + break; + + default: +#ifdef ONIG_DEBUG + fprintf(stderr, "compile_tree: undefined node type %d\n", NTYPE(node)); +#endif + break; + } + + return r; +} + +#ifdef USE_NAMED_GROUP + +static int +noname_disable_map(Node** plink, GroupNumRemap* map, int* counter) +{ + int r = 0; + Node* node = *plink; + + switch (NTYPE(node)) { + case N_LIST: + case N_ALT: + do { + r = noname_disable_map(&(NCONS(node).left), map, counter); + } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right)); + break; + + case N_QUANTIFIER: + { + Node** ptarget = &(NQUANTIFIER(node).target); + Node* old = *ptarget; + r = noname_disable_map(ptarget, map, counter); + if (*ptarget != old && NTYPE(*ptarget) == N_QUANTIFIER) { + onig_reduce_nested_quantifier(node, *ptarget); + } + } + break; + + case N_EFFECT: + { + EffectNode* en = &(NEFFECT(node)); + if (en->type == EFFECT_MEMORY) { + if (IS_EFFECT_NAMED_GROUP(en)) { + (*counter)++; + map[en->regnum].new_val = *counter; + en->regnum = *counter; + r = noname_disable_map(&(en->target), map, counter); + } + else { + *plink = en->target; + en->target = NULL_NODE; + onig_node_free(node); + r = noname_disable_map(plink, map, counter); + } + } + else + r = noname_disable_map(&(en->target), map, counter); + } + break; + + default: + break; + } + + return r; +} + +static int +renumber_node_backref(Node* node, GroupNumRemap* map) +{ + int i, pos, n, old_num; + int *backs; + BackrefNode* bn = &(NBACKREF(node)); + + if (! IS_BACKREF_NAME_REF(bn)) + return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED; + + old_num = bn->back_num; + if (IS_NULL(bn->back_dynamic)) + backs = bn->back_static; + else + backs = bn->back_dynamic; + + for (i = 0, pos = 0; i < old_num; i++) { + n = map[backs[i]].new_val; + if (n > 0) { + backs[pos] = n; + pos++; + } + } + + bn->back_num = pos; + return 0; +} + +static int +renumber_by_map(Node* node, GroupNumRemap* map) +{ + int r = 0; + + switch (NTYPE(node)) { + case N_LIST: + case N_ALT: + do { + r = renumber_by_map(NCONS(node).left, map); + } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right)); + break; + case N_QUANTIFIER: + r = renumber_by_map(NQUANTIFIER(node).target, map); + break; + case N_EFFECT: + r = renumber_by_map(NEFFECT(node).target, map); + break; + + case N_BACKREF: + r = renumber_node_backref(node, map); + break; + + default: + break; + } + + return r; +} + +static int +numbered_ref_check(Node* node) +{ + int r = 0; + + switch (NTYPE(node)) { + case N_LIST: + case N_ALT: + do { + r = numbered_ref_check(NCONS(node).left); + } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right)); + break; + case N_QUANTIFIER: + r = numbered_ref_check(NQUANTIFIER(node).target); + break; + case N_EFFECT: + r = numbered_ref_check(NEFFECT(node).target); + break; + + case N_BACKREF: + if (! IS_BACKREF_NAME_REF(&(NBACKREF(node)))) + return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED; + break; + + default: + break; + } + + return r; +} + +static int +disable_noname_group_capture(Node** root, regex_t* reg, ScanEnv* env) +{ + int r, i, pos, counter; + BitStatusType loc; + GroupNumRemap* map; + + map = (GroupNumRemap* )xalloca(sizeof(GroupNumRemap) * (env->num_mem + 1)); + CHECK_NULL_RETURN_VAL(map, ONIGERR_MEMORY); + for (i = 1; i <= env->num_mem; i++) { + map[i].new_val = 0; + } + counter = 0; + r = noname_disable_map(root, map, &counter); + if (r != 0) return r; + + r = renumber_by_map(*root, map); + if (r != 0) return r; + + for (i = 1, pos = 1; i <= env->num_mem; i++) { + if (map[i].new_val > 0) { + SCANENV_MEM_NODES(env)[pos] = SCANENV_MEM_NODES(env)[i]; + pos++; + } + } + + loc = env->capture_history; + BIT_STATUS_CLEAR(env->capture_history); + for (i = 1; i <= ONIG_MAX_CAPTURE_HISTORY_GROUP; i++) { + if (BIT_STATUS_AT(loc, i)) { + BIT_STATUS_ON_AT_SIMPLE(env->capture_history, map[i].new_val); + } + } + + env->num_mem = env->num_named; + reg->num_mem = env->num_named; + + return onig_renumber_name_table(reg, map); +} +#endif /* USE_NAMED_GROUP */ + +#ifdef USE_SUBEXP_CALL +static int +unset_addr_list_fix(UnsetAddrList* uslist, regex_t* reg) +{ + int i, offset; + EffectNode* en; + AbsAddrType addr; + + for (i = 0; i < uslist->num; i++) { + en = &(NEFFECT(uslist->us[i].target)); + if (! IS_EFFECT_ADDR_FIXED(en)) return ONIGERR_PARSER_BUG; + addr = en->call_addr; + offset = uslist->us[i].offset; + + BBUF_WRITE(reg, offset, &addr, SIZE_ABSADDR); + } + return 0; +} +#endif + +#ifdef USE_INFINITE_REPEAT_MONOMANIAC_MEM_STATUS_CHECK +static int +quantifiers_memory_node_info(Node* node) +{ + int r = 0; + + switch (NTYPE(node)) { + case N_LIST: + case N_ALT: + { + int v; + do { + v = quantifiers_memory_node_info(NCONS(node).left); + if (v > r) r = v; + } while (v >= 0 && IS_NOT_NULL(node = NCONS(node).right)); + } + break; + +#ifdef USE_SUBEXP_CALL + case N_CALL: + if (IS_CALL_RECURSION(&NCALL(node))) { + return NQ_TARGET_IS_EMPTY_REC; /* tiny version */ + } + else + r = quantifiers_memory_node_info(NCALL(node).target); + break; +#endif + + case N_QUANTIFIER: + { + QuantifierNode* qn = &(NQUANTIFIER(node)); + if (qn->upper != 0) { + r = quantifiers_memory_node_info(qn->target); + } + } + break; + + case N_EFFECT: + { + EffectNode* en = &(NEFFECT(node)); + switch (en->type) { + case EFFECT_MEMORY: + return NQ_TARGET_IS_EMPTY_MEM; + break; + + case EFFECT_OPTION: + case EFFECT_STOP_BACKTRACK: + r = quantifiers_memory_node_info(en->target); + break; + default: + break; + } + } + break; + + case N_BACKREF: + case N_STRING: + case N_CTYPE: + case N_CCLASS: + case N_ANYCHAR: + case N_ANCHOR: + default: + break; + } + + return r; +} +#endif /* USE_INFINITE_REPEAT_MONOMANIAC_MEM_STATUS_CHECK */ + +static int +get_min_match_length(Node* node, OnigDistance *min, ScanEnv* env) +{ + OnigDistance tmin; + int r = 0; + + *min = 0; + switch (NTYPE(node)) { + case N_BACKREF: + { + int i; + int* backs; + Node** nodes = SCANENV_MEM_NODES(env); + BackrefNode* br = &(NBACKREF(node)); + if (br->state & NST_RECURSION) break; + + backs = BACKREFS_P(br); + if (backs[0] > env->num_mem) return ONIGERR_INVALID_BACKREF; + r = get_min_match_length(nodes[backs[0]], min, env); + if (r != 0) break; + for (i = 1; i < br->back_num; i++) { + if (backs[i] > env->num_mem) return ONIGERR_INVALID_BACKREF; + r = get_min_match_length(nodes[backs[i]], &tmin, env); + if (r != 0) break; + if (*min > tmin) *min = tmin; + } + } + break; + +#ifdef USE_SUBEXP_CALL + case N_CALL: + if (IS_CALL_RECURSION(&NCALL(node))) { + EffectNode* en = &(NEFFECT(NCALL(node).target)); + if (IS_EFFECT_MIN_FIXED(en)) + *min = en->min_len; + } + else + r = get_min_match_length(NCALL(node).target, min, env); + break; +#endif + + case N_LIST: + do { + r = get_min_match_length(NCONS(node).left, &tmin, env); + if (r == 0) *min += tmin; + } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right)); + break; + + case N_ALT: + { + Node *x, *y; + y = node; + do { + x = NCONS(y).left; + r = get_min_match_length(x, &tmin, env); + if (r != 0) break; + if (y == node) *min = tmin; + else if (*min > tmin) *min = tmin; + } while (r == 0 && IS_NOT_NULL(y = NCONS(y).right)); + } + break; + + case N_STRING: + { + StrNode* sn = &(NSTRING(node)); + *min = sn->end - sn->s; + } + break; + + case N_CTYPE: + switch (NCTYPE(node).type) { + case CTYPE_WORD: *min = 1; break; + case CTYPE_NOT_WORD: *min = 1; break; + default: + break; + } + break; + + case N_CCLASS: + case N_ANYCHAR: + *min = 1; + break; + + case N_QUANTIFIER: + { + QuantifierNode* qn = &(NQUANTIFIER(node)); + + if (qn->lower > 0) { + r = get_min_match_length(qn->target, min, env); + if (r == 0) + *min = distance_multiply(*min, qn->lower); + } + } + break; + + case N_EFFECT: + { + EffectNode* en = &(NEFFECT(node)); + switch (en->type) { + case EFFECT_MEMORY: +#ifdef USE_SUBEXP_CALL + if (IS_EFFECT_MIN_FIXED(en)) + *min = en->min_len; + else { + r = get_min_match_length(en->target, min, env); + if (r == 0) { + en->min_len = *min; + SET_EFFECT_STATUS(node, NST_MIN_FIXED); + } + } + break; +#endif + case EFFECT_OPTION: + case EFFECT_STOP_BACKTRACK: + r = get_min_match_length(en->target, min, env); + break; + } + } + break; + + case N_ANCHOR: + default: + break; + } + + return r; +} + +static int +get_max_match_length(Node* node, OnigDistance *max, ScanEnv* env) +{ + OnigDistance tmax; + int r = 0; + + *max = 0; + switch (NTYPE(node)) { + case N_LIST: + do { + r = get_max_match_length(NCONS(node).left, &tmax, env); + if (r == 0) + *max = distance_add(*max, tmax); + } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right)); + break; + + case N_ALT: + do { + r = get_max_match_length(NCONS(node).left, &tmax, env); + if (r == 0 && *max < tmax) *max = tmax; + } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right)); + break; + + case N_STRING: + { + StrNode* sn = &(NSTRING(node)); + *max = sn->end - sn->s; + } + break; + + case N_CTYPE: + switch (NCTYPE(node).type) { + case CTYPE_WORD: + case CTYPE_NOT_WORD: + *max = ONIGENC_MBC_MAXLEN_DIST(env->enc); + break; + + default: + break; + } + break; + + case N_CCLASS: + case N_ANYCHAR: + *max = ONIGENC_MBC_MAXLEN_DIST(env->enc); + break; + + case N_BACKREF: + { + int i; + int* backs; + Node** nodes = SCANENV_MEM_NODES(env); + BackrefNode* br = &(NBACKREF(node)); + if (br->state & NST_RECURSION) { + *max = ONIG_INFINITE_DISTANCE; + break; + } + backs = BACKREFS_P(br); + for (i = 0; i < br->back_num; i++) { + if (backs[i] > env->num_mem) return ONIGERR_INVALID_BACKREF; + r = get_max_match_length(nodes[backs[i]], &tmax, env); + if (r != 0) break; + if (*max < tmax) *max = tmax; + } + } + break; + +#ifdef USE_SUBEXP_CALL + case N_CALL: + if (! IS_CALL_RECURSION(&(NCALL(node)))) + r = get_max_match_length(NCALL(node).target, max, env); + else + *max = ONIG_INFINITE_DISTANCE; + break; +#endif + + case N_QUANTIFIER: + { + QuantifierNode* qn = &(NQUANTIFIER(node)); + + if (qn->upper != 0) { + r = get_max_match_length(qn->target, max, env); + if (r == 0 && *max != 0) { + if (! IS_REPEAT_INFINITE(qn->upper)) + *max = distance_multiply(*max, qn->upper); + else + *max = ONIG_INFINITE_DISTANCE; + } + } + } + break; + + case N_EFFECT: + { + EffectNode* en = &(NEFFECT(node)); + switch (en->type) { + case EFFECT_MEMORY: +#ifdef USE_SUBEXP_CALL + if (IS_EFFECT_MAX_FIXED(en)) + *max = en->max_len; + else { + r = get_max_match_length(en->target, max, env); + if (r == 0) { + en->max_len = *max; + SET_EFFECT_STATUS(node, NST_MAX_FIXED); + } + } + break; +#endif + case EFFECT_OPTION: + case EFFECT_STOP_BACKTRACK: + r = get_max_match_length(en->target, max, env); + break; + } + } + break; + + case N_ANCHOR: + default: + break; + } + + return r; +} + +#define GET_CHAR_LEN_VARLEN -1 +#define GET_CHAR_LEN_TOP_ALT_VARLEN -2 + +/* fixed size pattern node only */ +static int +get_char_length_tree1(Node* node, regex_t* reg, int* len, int level) +{ + int tlen; + int r = 0; + + level++; + *len = 0; + switch (NTYPE(node)) { + case N_LIST: + do { + r = get_char_length_tree1(NCONS(node).left, reg, &tlen, level); + if (r == 0) + *len = distance_add(*len, tlen); + } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right)); + break; + + case N_ALT: + { + int tlen2; + int varlen = 0; + + r = get_char_length_tree1(NCONS(node).left, reg, &tlen, level); + while (r == 0 && IS_NOT_NULL(node = NCONS(node).right)) { + r = get_char_length_tree1(NCONS(node).left, reg, &tlen2, level); + if (r == 0) { + if (tlen != tlen2) + varlen = 1; + } + } + if (r == 0) { + if (varlen != 0) { + if (level == 1) + r = GET_CHAR_LEN_TOP_ALT_VARLEN; + else + r = GET_CHAR_LEN_VARLEN; + } + else + *len = tlen; + } + } + break; + + case N_STRING: + { + StrNode* sn = &(NSTRING(node)); + UChar *s = sn->s; + while (s < sn->end) { + s += enc_len(reg->enc, s); + (*len)++; + } + } + break; + + case N_QUANTIFIER: + { + QuantifierNode* qn = &(NQUANTIFIER(node)); + if (qn->lower == qn->upper) { + r = get_char_length_tree1(qn->target, reg, &tlen, level); + if (r == 0) + *len = distance_multiply(tlen, qn->lower); + } + else + r = GET_CHAR_LEN_VARLEN; + } + break; + +#ifdef USE_SUBEXP_CALL + case N_CALL: + if (! IS_CALL_RECURSION(&(NCALL(node)))) + r = get_char_length_tree1(NCALL(node).target, reg, len, level); + else + r = GET_CHAR_LEN_VARLEN; + break; +#endif + + case N_CTYPE: + switch (NCTYPE(node).type) { + case CTYPE_WORD: + case CTYPE_NOT_WORD: + *len = 1; + break; + } + break; + + case N_CCLASS: + case N_ANYCHAR: + *len = 1; + break; + + case N_EFFECT: + { + EffectNode* en = &(NEFFECT(node)); + switch (en->type) { + case EFFECT_MEMORY: +#ifdef USE_SUBEXP_CALL + if (IS_EFFECT_CLEN_FIXED(en)) + *len = en->char_len; + else { + r = get_char_length_tree1(en->target, reg, len, level); + if (r == 0) { + en->char_len = *len; + SET_EFFECT_STATUS(node, NST_CLEN_FIXED); + } + } + break; +#endif + case EFFECT_OPTION: + case EFFECT_STOP_BACKTRACK: + r = get_char_length_tree1(en->target, reg, len, level); + break; + default: + break; + } + } + break; + + case N_ANCHOR: + break; + + default: + r = GET_CHAR_LEN_VARLEN; + break; + } + + return r; +} + +static int +get_char_length_tree(Node* node, regex_t* reg, int* len) +{ + return get_char_length_tree1(node, reg, len, 0); +} + +/* x is not included y ==> 1 : 0 */ +static int +is_not_included(Node* x, Node* y, regex_t* reg) +{ + int i, len; + OnigCodePoint code; + UChar *p, c; + int ytype; + + retry: + ytype = NTYPE(y); + switch (NTYPE(x)) { + case N_CTYPE: + { + switch (ytype) { + case N_CTYPE: + switch (NCTYPE(x).type) { + case CTYPE_WORD: + if (NCTYPE(y).type == CTYPE_NOT_WORD) + return 1; + else + return 0; + break; + case CTYPE_NOT_WORD: + if (NCTYPE(y).type == CTYPE_WORD) + return 1; + else + return 0; + break; + default: + break; + } + break; + + case N_CCLASS: + swap: + { + Node* tmp; + tmp = x; x = y; y = tmp; + goto retry; + } + break; + + case N_STRING: + goto swap; + break; + + default: + break; + } + } + break; + + case N_CCLASS: + { + CClassNode* xc = &(NCCLASS(x)); + switch (ytype) { + case N_CTYPE: + switch (NCTYPE(y).type) { + case CTYPE_WORD: + if (IS_NULL(xc->mbuf) && !IS_CCLASS_NOT(xc)) { + for (i = 0; i < SINGLE_BYTE_SIZE; i++) { + if (BITSET_AT(xc->bs, i)) { + if (ONIGENC_IS_CODE_SB_WORD(reg->enc, i)) return 0; + } + } + return 1; + } + return 0; + break; + case CTYPE_NOT_WORD: + for (i = 0; i < SINGLE_BYTE_SIZE; i++) { + if (! ONIGENC_IS_CODE_SB_WORD(reg->enc, i)) { + if (!IS_CCLASS_NOT(xc)) { + if (BITSET_AT(xc->bs, i)) + return 0; + } + else { + if (! BITSET_AT(xc->bs, i)) + return 0; + } + } + } + return 1; + break; + + default: + break; + } + break; + + case N_CCLASS: + { + int v; + CClassNode* yc = &(NCCLASS(y)); + + for (i = 0; i < SINGLE_BYTE_SIZE; i++) { + v = BITSET_AT(xc->bs, i); + if ((v != 0 && !IS_CCLASS_NOT(xc)) || + (v == 0 && IS_CCLASS_NOT(xc))) { + v = BITSET_AT(yc->bs, i); + if ((v != 0 && !IS_CCLASS_NOT(yc)) || + (v == 0 && IS_CCLASS_NOT(yc))) + return 0; + } + } + if ((IS_NULL(xc->mbuf) && !IS_CCLASS_NOT(xc)) || + (IS_NULL(yc->mbuf) && !IS_CCLASS_NOT(yc))) + return 1; + return 0; + } + break; + + case N_STRING: + goto swap; + break; + + default: + break; + } + } + break; + + case N_STRING: + { + StrNode* xs = &(NSTRING(x)); + if (NSTRING_LEN(x) == 0) + break; + + c = *(xs->s); + switch (ytype) { + case N_CTYPE: + switch (NCTYPE(y).type) { + case CTYPE_WORD: + return (ONIGENC_IS_MBC_WORD(reg->enc, xs->s, xs->end) ? 0 : 1); + break; + case CTYPE_NOT_WORD: + return (ONIGENC_IS_MBC_WORD(reg->enc, xs->s, xs->end) ? 1 : 0); + break; + default: + break; + } + break; + + case N_CCLASS: + { + CClassNode* cc = &(NCCLASS(y)); + + code = ONIGENC_MBC_TO_CODE(reg->enc, xs->s, + xs->s + ONIGENC_MBC_MAXLEN(reg->enc)); + return (onig_is_code_in_cc(reg->enc, code, cc) != 0 ? 0 : 1); + } + break; + + case N_STRING: + { + UChar *q; + StrNode* ys = &(NSTRING(y)); + len = NSTRING_LEN(x); + if (len > NSTRING_LEN(y)) len = NSTRING_LEN(y); + if (NSTRING_IS_AMBIG(x) || NSTRING_IS_AMBIG(y)) { + /* tiny version */ + return 0; + } + else { + for (i = 0, p = ys->s, q = xs->s; i < len; i++, p++, q++) { + if (*p != *q) return 1; + } + } + } + break; + + default: + break; + } + } + break; + + default: + break; + } + + return 0; +} + +static Node* +get_head_value_node(Node* node, int exact, regex_t* reg) +{ + Node* n = NULL_NODE; + + switch (NTYPE(node)) { + case N_BACKREF: + case N_ALT: + case N_ANYCHAR: +#ifdef USE_SUBEXP_CALL + case N_CALL: +#endif + break; + + case N_CTYPE: + case N_CCLASS: + if (exact == 0) { + n = node; + } + break; + + case N_LIST: + n = get_head_value_node(NCONS(node).left, exact, reg); + break; + + case N_STRING: + { + StrNode* sn = &(NSTRING(node)); + + if (sn->end <= sn->s) + break; + + if (exact != 0 && + !NSTRING_IS_RAW(node) && IS_IGNORECASE(reg->options)) { +#if 0 + UChar* tmp = sn->s; + if (! ONIGENC_IS_MBC_AMBIGUOUS(reg->enc, reg->ambig_flag, + &tmp, sn->end)) + n = node; +#endif + } + else { + n = node; + } + } + break; + + case N_QUANTIFIER: + { + QuantifierNode* qn = &(NQUANTIFIER(node)); + if (qn->lower > 0) { + if (IS_NOT_NULL(qn->head_exact)) + n = qn->head_exact; + else + n = get_head_value_node(qn->target, exact, reg); + } + } + break; + + case N_EFFECT: + { + EffectNode* en = &(NEFFECT(node)); + switch (en->type) { + case EFFECT_OPTION: + { + OnigOptionType options = reg->options; + + reg->options = NEFFECT(node).option; + n = get_head_value_node(NEFFECT(node).target, exact, reg); + reg->options = options; + } + break; + + case EFFECT_MEMORY: + case EFFECT_STOP_BACKTRACK: + n = get_head_value_node(en->target, exact, reg); + break; + } + } + break; + + case N_ANCHOR: + if (NANCHOR(node).type == ANCHOR_PREC_READ) + n = get_head_value_node(NANCHOR(node).target, exact, reg); + break; + + default: + break; + } + + return n; +} + +static int +check_type_tree(Node* node, int type_mask, int effect_mask, int anchor_mask) +{ + int type, r = 0; + + type = NTYPE(node); + if ((type & type_mask) == 0) + return 1; + + switch (type) { + case N_LIST: + case N_ALT: + do { + r = check_type_tree(NCONS(node).left, type_mask, effect_mask, anchor_mask); + } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right)); + break; + + case N_QUANTIFIER: + r = check_type_tree(NQUANTIFIER(node).target, type_mask, effect_mask, + anchor_mask); + break; + + case N_EFFECT: + { + EffectNode* en = &(NEFFECT(node)); + if ((en->type & effect_mask) == 0) + return 1; + + r = check_type_tree(en->target, type_mask, effect_mask, anchor_mask); + } + break; + + case N_ANCHOR: + type = NANCHOR(node).type; + if ((type & anchor_mask) == 0) + return 1; + + if (NANCHOR(node).target) + r = check_type_tree(NANCHOR(node).target, + type_mask, effect_mask, anchor_mask); + break; + + default: + break; + } + return r; +} + +#ifdef USE_SUBEXP_CALL + +#define RECURSION_EXIST 1 +#define RECURSION_INFINITE 2 + +static int +subexp_inf_recursive_check(Node* node, ScanEnv* env, int head) +{ + int type; + int r = 0; + + type = NTYPE(node); + switch (type) { + case N_LIST: + { + Node *x; + OnigDistance min; + int ret; + + x = node; + do { + ret = subexp_inf_recursive_check(NCONS(x).left, env, head); + if (ret < 0 || ret == RECURSION_INFINITE) return ret; + r |= ret; + if (head) { + ret = get_min_match_length(NCONS(x).left, &min, env); + if (ret != 0) return ret; + if (min != 0) head = 0; + } + } while (IS_NOT_NULL(x = NCONS(x).right)); + } + break; + + case N_ALT: + { + int ret; + r = RECURSION_EXIST; + do { + ret = subexp_inf_recursive_check(NCONS(node).left, env, head); + if (ret < 0 || ret == RECURSION_INFINITE) return ret; + r &= ret; + } while (IS_NOT_NULL(node = NCONS(node).right)); + } + break; + + case N_QUANTIFIER: + r = subexp_inf_recursive_check(NQUANTIFIER(node).target, env, head); + if (r == RECURSION_EXIST) { + if (NQUANTIFIER(node).lower == 0) r = 0; + } + break; + + case N_ANCHOR: + { + AnchorNode* an = &(NANCHOR(node)); + switch (an->type) { + case ANCHOR_PREC_READ: + case ANCHOR_PREC_READ_NOT: + case ANCHOR_LOOK_BEHIND: + case ANCHOR_LOOK_BEHIND_NOT: + r = subexp_inf_recursive_check(an->target, env, head); + break; + } + } + break; + + case N_CALL: + r = subexp_inf_recursive_check(NCALL(node).target, env, head); + break; + + case N_EFFECT: + if (IS_EFFECT_MARK2(&(NEFFECT(node)))) + return 0; + else if (IS_EFFECT_MARK1(&(NEFFECT(node)))) + return (head == 0 ? RECURSION_EXIST : RECURSION_INFINITE); + else { + SET_EFFECT_STATUS(node, NST_MARK2); + r = subexp_inf_recursive_check(NEFFECT(node).target, env, head); + CLEAR_EFFECT_STATUS(node, NST_MARK2); + } + break; + + default: + break; + } + + return r; +} + +static int +subexp_inf_recursive_check_trav(Node* node, ScanEnv* env) +{ + int type; + int r = 0; + + type = NTYPE(node); + switch (type) { + case N_LIST: + case N_ALT: + do { + r = subexp_inf_recursive_check_trav(NCONS(node).left, env); + } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right)); + break; + + case N_QUANTIFIER: + r = subexp_inf_recursive_check_trav(NQUANTIFIER(node).target, env); + break; + + case N_ANCHOR: + { + AnchorNode* an = &(NANCHOR(node)); + switch (an->type) { + case ANCHOR_PREC_READ: + case ANCHOR_PREC_READ_NOT: + case ANCHOR_LOOK_BEHIND: + case ANCHOR_LOOK_BEHIND_NOT: + r = subexp_inf_recursive_check_trav(an->target, env); + break; + } + } + break; + + case N_EFFECT: + { + EffectNode* en = &(NEFFECT(node)); + + if (IS_EFFECT_RECURSION(en)) { + SET_EFFECT_STATUS(node, NST_MARK1); + r = subexp_inf_recursive_check(en->target, env, 1); + if (r > 0) return ONIGERR_NEVER_ENDING_RECURSION; + CLEAR_EFFECT_STATUS(node, NST_MARK1); + } + r = subexp_inf_recursive_check_trav(en->target, env); + } + + break; + + default: + break; + } + + return r; +} + +static int +subexp_recursive_check(Node* node) +{ + int type; + int r = 0; + + type = NTYPE(node); + switch (type) { + case N_LIST: + case N_ALT: + do { + r |= subexp_recursive_check(NCONS(node).left); + } while (IS_NOT_NULL(node = NCONS(node).right)); + break; + + case N_QUANTIFIER: + r = subexp_recursive_check(NQUANTIFIER(node).target); + break; + + case N_ANCHOR: + { + AnchorNode* an = &(NANCHOR(node)); + switch (an->type) { + case ANCHOR_PREC_READ: + case ANCHOR_PREC_READ_NOT: + case ANCHOR_LOOK_BEHIND: + case ANCHOR_LOOK_BEHIND_NOT: + r = subexp_recursive_check(an->target); + break; + } + } + break; + + case N_CALL: + r = subexp_recursive_check(NCALL(node).target); + if (r != 0) SET_CALL_RECURSION(node); + break; + + case N_EFFECT: + if (IS_EFFECT_MARK2(&(NEFFECT(node)))) + return 0; + else if (IS_EFFECT_MARK1(&(NEFFECT(node)))) + return 1; /* recursion */ + else { + SET_EFFECT_STATUS(node, NST_MARK2); + r = subexp_recursive_check(NEFFECT(node).target); + CLEAR_EFFECT_STATUS(node, NST_MARK2); + } + break; + + default: + break; + } + + return r; +} + + +static int +subexp_recursive_check_trav(Node* node, ScanEnv* env) +{ +#define FOUND_CALLED_NODE 1 + + int type; + int r = 0; + + type = NTYPE(node); + switch (type) { + case N_LIST: + case N_ALT: + { + int ret; + do { + ret = subexp_recursive_check_trav(NCONS(node).left, env); + if (ret == FOUND_CALLED_NODE) r = FOUND_CALLED_NODE; + else if (ret < 0) return ret; + } while (IS_NOT_NULL(node = NCONS(node).right)); + } + break; + + case N_QUANTIFIER: + r = subexp_recursive_check_trav(NQUANTIFIER(node).target, env); + if (NQUANTIFIER(node).upper == 0) { + if (r == FOUND_CALLED_NODE) + NQUANTIFIER(node).is_refered = 1; + } + break; + + case N_ANCHOR: + { + AnchorNode* an = &(NANCHOR(node)); + switch (an->type) { + case ANCHOR_PREC_READ: + case ANCHOR_PREC_READ_NOT: + case ANCHOR_LOOK_BEHIND: + case ANCHOR_LOOK_BEHIND_NOT: + r = subexp_recursive_check_trav(an->target, env); + break; + } + } + break; + + case N_EFFECT: + { + EffectNode* en = &(NEFFECT(node)); + + if (! IS_EFFECT_RECURSION(en)) { + if (IS_EFFECT_CALLED(en)) { + SET_EFFECT_STATUS(node, NST_MARK1); + r = subexp_recursive_check(en->target); + if (r != 0) SET_EFFECT_STATUS(node, NST_RECURSION); + CLEAR_EFFECT_STATUS(node, NST_MARK1); + } + } + r = subexp_recursive_check_trav(en->target, env); + if (IS_EFFECT_CALLED(en)) + r |= FOUND_CALLED_NODE; + } + break; + + default: + break; + } + + return r; +} + +static int +setup_subexp_call(Node* node, ScanEnv* env) +{ + int type; + int r = 0; + + type = NTYPE(node); + switch (type) { + case N_LIST: + do { + r = setup_subexp_call(NCONS(node).left, env); + } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right)); + break; + + case N_ALT: + do { + r = setup_subexp_call(NCONS(node).left, env); + } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right)); + break; + + case N_QUANTIFIER: + r = setup_subexp_call(NQUANTIFIER(node).target, env); + break; + case N_EFFECT: + r = setup_subexp_call(NEFFECT(node).target, env); + break; + + case N_CALL: + { + int n, num, *refs; + UChar *p; + CallNode* cn = &(NCALL(node)); + Node** nodes = SCANENV_MEM_NODES(env); + +#ifdef USE_NAMED_GROUP + n = onig_name_to_group_numbers(env->reg, cn->name, cn->name_end, &refs); +#else + n = -1; +#endif + if (n <= 0) { + /* name not found, check group number. (?*ddd) */ + p = cn->name; + num = onig_scan_unsigned_number(&p, cn->name_end, env->enc); + if (num <= 0 || p != cn->name_end) { + onig_scan_env_set_error_string(env, + ONIGERR_UNDEFINED_NAME_REFERENCE, cn->name, cn->name_end); + return ONIGERR_UNDEFINED_NAME_REFERENCE; + } +#ifdef USE_NAMED_GROUP + if (env->num_named > 0 && + IS_SYNTAX_BV(env->syntax, ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP) && + !ONIG_IS_OPTION_ON(env->option, ONIG_OPTION_CAPTURE_GROUP)) { + return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED; + } +#endif + if (num > env->num_mem) { + onig_scan_env_set_error_string(env, + ONIGERR_UNDEFINED_GROUP_REFERENCE, cn->name, cn->name_end); + return ONIGERR_UNDEFINED_GROUP_REFERENCE; + } + cn->ref_num = num; + goto set_call_attr; + } + else if (n > 1) { + onig_scan_env_set_error_string(env, + ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL, cn->name, cn->name_end); + return ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL; + } + else { + cn->ref_num = refs[0]; + set_call_attr: + cn->target = nodes[cn->ref_num]; + if (IS_NULL(cn->target)) { + onig_scan_env_set_error_string(env, + ONIGERR_UNDEFINED_NAME_REFERENCE, cn->name, cn->name_end); + return ONIGERR_UNDEFINED_NAME_REFERENCE; + } + SET_EFFECT_STATUS(cn->target, NST_CALLED); + BIT_STATUS_ON_AT(env->bt_mem_start, cn->ref_num); + cn->unset_addr_list = env->unset_addr_list; + } + } + break; + + case N_ANCHOR: + { + AnchorNode* an = &(NANCHOR(node)); + + switch (an->type) { + case ANCHOR_PREC_READ: + case ANCHOR_PREC_READ_NOT: + case ANCHOR_LOOK_BEHIND: + case ANCHOR_LOOK_BEHIND_NOT: + r = setup_subexp_call(an->target, env); + break; + } + } + break; + + default: + break; + } + + return r; +} +#endif + +/* divide different length alternatives in look-behind. + (?<=A|B) ==> (?<=A)|(?<=B) + (?<!A|B) ==> (?<!A)(?<!B) +*/ +static int +divide_look_behind_alternatives(Node* node) +{ + Node tmp_node; + Node *head, *np, *insert_node; + AnchorNode* an = &(NANCHOR(node)); + int anc_type = an->type; + + head = an->target; + np = NCONS(head).left; + tmp_node = *node; *node = *head; *head = tmp_node; + NCONS(node).left = head; + NANCHOR(head).target = np; + + np = node; + while ((np = NCONS(np).right) != NULL_NODE) { + insert_node = onig_node_new_anchor(anc_type); + CHECK_NULL_RETURN_VAL(insert_node, ONIGERR_MEMORY); + NANCHOR(insert_node).target = NCONS(np).left; + NCONS(np).left = insert_node; + } + + if (anc_type == ANCHOR_LOOK_BEHIND_NOT) { + np = node; + do { + np->type = N_LIST; /* alt -> list */ + } while ((np = NCONS(np).right) != NULL_NODE); + } + return 0; +} + +static int +setup_look_behind(Node* node, regex_t* reg, ScanEnv* env) +{ + int r, len; + AnchorNode* an = &(NANCHOR(node)); + + r = get_char_length_tree(an->target, reg, &len); + if (r == 0) + an->char_len = len; + else if (r == GET_CHAR_LEN_VARLEN) + r = ONIGERR_INVALID_LOOK_BEHIND_PATTERN; + else if (r == GET_CHAR_LEN_TOP_ALT_VARLEN) { + if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND)) + r = divide_look_behind_alternatives(node); + else + r = ONIGERR_INVALID_LOOK_BEHIND_PATTERN; + } + + return r; +} + +static int +next_setup(Node* node, Node* next_node, regex_t* reg) +{ + int type; + + retry: + type = NTYPE(node); + if (type == N_QUANTIFIER) { + QuantifierNode* qn = &(NQUANTIFIER(node)); + if (qn->greedy && IS_REPEAT_INFINITE(qn->upper)) { +#ifdef USE_QUANTIFIER_PEEK_NEXT + qn->next_head_exact = get_head_value_node(next_node, 1, reg); +#endif + /* automatic posseivation a*b ==> (?>a*)b */ + if (qn->lower <= 1) { + int ttype = NTYPE(qn->target); + if (IS_NODE_TYPE_SIMPLE(ttype)) { + Node *x, *y; + x = get_head_value_node(qn->target, 0, reg); + if (IS_NOT_NULL(x)) { + y = get_head_value_node(next_node, 0, reg); + if (IS_NOT_NULL(y) && is_not_included(x, y, reg)) { + Node* en = onig_node_new_effect(EFFECT_STOP_BACKTRACK); + CHECK_NULL_RETURN_VAL(en, ONIGERR_MEMORY); + SET_EFFECT_STATUS(en, NST_STOP_BT_SIMPLE_REPEAT); + swap_node(node, en); + NEFFECT(node).target = en; + } + } + } + } + } + } + else if (type == N_EFFECT) { + EffectNode* en = &(NEFFECT(node)); + if (en->type == EFFECT_MEMORY) { + node = en->target; + goto retry; + } + } + return 0; +} + + +static int +divide_ambig_string_node_sub(regex_t* reg, int prev_ambig, + UChar* prev_start, UChar* prev, + UChar* end, Node*** tailp, Node** root) +{ + UChar *tmp, *wp; + Node* snode; + + if (prev_ambig != 0) { + tmp = prev_start; + wp = prev_start; + while (tmp < prev) { + wp += ONIGENC_MBC_TO_NORMALIZE(reg->enc, reg->ambig_flag, + &tmp, end, wp); + } + snode = onig_node_new_str(prev_start, wp); + CHECK_NULL_RETURN_VAL(snode, ONIGERR_MEMORY); + NSTRING_SET_AMBIG(snode); + if (wp != prev) NSTRING_SET_AMBIG_REDUCE(snode); + } + else { + snode = onig_node_new_str(prev_start, prev); + CHECK_NULL_RETURN_VAL(snode, ONIGERR_MEMORY); + } + + if (*tailp == (Node** )0) { + *root = onig_node_new_list(snode, NULL); + CHECK_NULL_RETURN_VAL(*root, ONIGERR_MEMORY); + *tailp = &(NCONS(*root).right); + } + else { + **tailp = onig_node_new_list(snode, NULL); + CHECK_NULL_RETURN_VAL(**tailp, ONIGERR_MEMORY); + *tailp = &(NCONS(**tailp).right); + } + + return 0; +} + +static int +divide_ambig_string_node(Node* node, regex_t* reg) +{ + StrNode* sn = &NSTRING(node); + int ambig, prev_ambig; + UChar *prev, *p, *end, *prev_start, *start, *tmp, *wp; + Node *root = NULL_NODE; + Node **tailp = (Node** )0; + int r; + + start = prev_start = p = sn->s; + end = sn->end; + if (p >= end) return 0; + + prev_ambig = ONIGENC_IS_MBC_AMBIGUOUS(reg->enc, reg->ambig_flag, &p, end); + + while (p < end) { + prev = p; + if (prev_ambig != (ambig = ONIGENC_IS_MBC_AMBIGUOUS(reg->enc, + reg->ambig_flag, &p, end))) { + + r = divide_ambig_string_node_sub(reg, prev_ambig, prev_start, prev, + end, &tailp, &root); + if (r != 0) return r; + + prev_ambig = ambig; + prev_start = prev; + } + } + + if (prev_start == start) { + if (prev_ambig != 0) { + NSTRING_SET_AMBIG(node); + tmp = start; + wp = start; + while (tmp < end) { + wp += ONIGENC_MBC_TO_NORMALIZE(reg->enc, reg->ambig_flag, + &tmp, end, wp); + } + if (wp != sn->end) NSTRING_SET_AMBIG_REDUCE(node); + sn->end = wp; + } + } + else { + r = divide_ambig_string_node_sub(reg, prev_ambig, prev_start, end, + end, &tailp, &root); + if (r != 0) return r; + + swap_node(node, root); + onig_node_str_clear(root); /* should be after swap! */ + onig_node_free(root); /* free original string node */ + } + + return 0; +} + +#ifdef USE_COMBINATION_EXPLOSION_CHECK + +#define CEC_THRES_NUM_BIG_REPEAT 512 +#define CEC_INFINITE_NUM 0x7fffffff + +#define CEC_IN_INFINITE_REPEAT (1<<0) +#define CEC_IN_FINITE_REPEAT (1<<1) +#define CEC_CONT_BIG_REPEAT (1<<2) + +static int +setup_comb_exp_check(Node* node, int state, ScanEnv* env) +{ + int type; + int r = state; + + type = NTYPE(node); + switch (type) { + case N_LIST: + { + Node* prev = NULL_NODE; + do { + r = setup_comb_exp_check(NCONS(node).left, r, env); + prev = NCONS(node).left; + } while (r >= 0 && IS_NOT_NULL(node = NCONS(node).right)); + } + break; + + case N_ALT: + { + int ret; + do { + ret = setup_comb_exp_check(NCONS(node).left, state, env); + r |= ret; + } while (ret >= 0 && IS_NOT_NULL(node = NCONS(node).right)); + } + break; + + case N_QUANTIFIER: + { + int child_state = state; + int add_state = 0; + QuantifierNode* qn = &(NQUANTIFIER(node)); + Node* target = qn->target; + int var_num; + + if (! IS_REPEAT_INFINITE(qn->upper)) { + if (qn->upper > 1) { + /* {0,1}, {1,1} are allowed */ + child_state |= CEC_IN_FINITE_REPEAT; + + /* check (a*){n,m}, (a+){n,m} => (a*){n,n}, (a+){n,n} */ + if (env->backrefed_mem == 0) { + if (NTYPE(qn->target) == N_EFFECT) { + EffectNode* en = &(NEFFECT(qn->target)); + if (en->type == EFFECT_MEMORY) { + if (NTYPE(en->target) == N_QUANTIFIER) { + QuantifierNode* q = &(NQUANTIFIER(en->target)); + if (IS_REPEAT_INFINITE(q->upper) + && q->greedy == qn->greedy) { + qn->upper = (qn->lower == 0 ? 1 : qn->lower); + if (qn->upper == 1) + child_state = state; + } + } + } + } + } + } + } + + if (state & CEC_IN_FINITE_REPEAT) { + qn->comb_exp_check_num = -1; + } + else { + if (IS_REPEAT_INFINITE(qn->upper)) { + var_num = CEC_INFINITE_NUM; + child_state |= CEC_IN_INFINITE_REPEAT; + } + else { + var_num = qn->upper - qn->lower; + } + + if (var_num >= CEC_THRES_NUM_BIG_REPEAT) + add_state |= CEC_CONT_BIG_REPEAT; + + if (((state & CEC_IN_INFINITE_REPEAT) != 0 && var_num != 0) || + ((state & CEC_CONT_BIG_REPEAT) != 0 && + var_num >= CEC_THRES_NUM_BIG_REPEAT)) { + if (qn->comb_exp_check_num == 0) { + env->num_comb_exp_check++; + qn->comb_exp_check_num = env->num_comb_exp_check; + if (env->curr_max_regnum > env->comb_exp_max_regnum) + env->comb_exp_max_regnum = env->curr_max_regnum; + } + } + } + + r = setup_comb_exp_check(target, child_state, env); + r |= add_state; + } + break; + + case N_EFFECT: + { + EffectNode* en = &(NEFFECT(node)); + + switch (en->type) { + case EFFECT_MEMORY: + { + if (env->curr_max_regnum < en->regnum) + env->curr_max_regnum = en->regnum; + + r = setup_comb_exp_check(en->target, state, env); + } + break; + + default: + r = setup_comb_exp_check(en->target, state, env); + break; + } + } + break; + +#ifdef USE_SUBEXP_CALL + case N_CALL: + if (IS_CALL_RECURSION(&(NCALL(node)))) + env->has_recursion = 1; + else + r = setup_comb_exp_check(NCALL(node).target, state, env); + break; +#endif + + default: + break; + } + + return r; +} +#endif + +#define IN_ALT (1<<0) +#define IN_NOT (1<<1) +#define IN_REPEAT (1<<2) +#define IN_VAR_REPEAT (1<<3) + +/* setup_tree does the following work. + 1. check empty loop. (set qn->target_empty_info) + 2. expand ignore-case in char class. + 3. set memory status bit flags. (reg->mem_stats) + 4. set qn->head_exact for [push, exact] -> [push_or_jump_exact1, exact]. + 5. find invalid patterns in look-behind. + 6. expand repeated string. + */ +static int +setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env) +{ + int type; + int r = 0; + + type = NTYPE(node); + switch (type) { + case N_LIST: + { + Node* prev = NULL_NODE; + do { + r = setup_tree(NCONS(node).left, reg, state, env); + if (IS_NOT_NULL(prev) && r == 0) { + r = next_setup(prev, NCONS(node).left, reg); + } + prev = NCONS(node).left; + } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right)); + } + break; + + case N_ALT: + do { + r = setup_tree(NCONS(node).left, reg, (state | IN_ALT), env); + } while (r == 0 && IS_NOT_NULL(node = NCONS(node).right)); + break; + + case N_CCLASS: + break; + + case N_STRING: + if (IS_IGNORECASE(reg->options) && !NSTRING_IS_RAW(node)) { + r = divide_ambig_string_node(node, reg); + } + break; + + case N_CTYPE: + case N_ANYCHAR: + break; + +#ifdef USE_SUBEXP_CALL + case N_CALL: + break; +#endif + + case N_BACKREF: + { + int i; + int* p; + Node** nodes = SCANENV_MEM_NODES(env); + BackrefNode* br = &(NBACKREF(node)); + p = BACKREFS_P(br); + for (i = 0; i < br->back_num; i++) { + if (p[i] > env->num_mem) return ONIGERR_INVALID_BACKREF; + BIT_STATUS_ON_AT(env->backrefed_mem, p[i]); + BIT_STATUS_ON_AT(env->bt_mem_start, p[i]); +#ifdef USE_BACKREF_AT_LEVEL + if (IS_BACKREF_NEST_LEVEL(br)) { + BIT_STATUS_ON_AT(env->bt_mem_end, p[i]); + } +#endif + SET_EFFECT_STATUS(nodes[p[i]], NST_MEM_BACKREFED); + } + } + break; + + case N_QUANTIFIER: + { + OnigDistance d; + QuantifierNode* qn = &(NQUANTIFIER(node)); + Node* target = qn->target; + + if ((state & IN_REPEAT) != 0) { + qn->state |= NST_IN_REPEAT; + } + + if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 1) { + r = get_min_match_length(target, &d, env); + if (r) break; + if (d == 0) { + qn->target_empty_info = NQ_TARGET_IS_EMPTY; +#ifdef USE_INFINITE_REPEAT_MONOMANIAC_MEM_STATUS_CHECK + r = quantifiers_memory_node_info(target); + if (r < 0) break; + if (r > 0) { + qn->target_empty_info = r; + } +#endif +#if 0 + r = get_max_match_length(target, &d, env); + if (r == 0 && d == 0) { + /* ()* ==> ()?, ()+ ==> () */ + qn->upper = 1; + if (qn->lower > 1) qn->lower = 1; + if (NTYPE(target) == N_STRING) { + qn->upper = qn->lower = 0; /* /(?:)+/ ==> // */ + } + } +#endif + } + } + + state |= IN_REPEAT; + if (qn->lower != qn->upper) + state |= IN_VAR_REPEAT; + r = setup_tree(target, reg, state, env); + if (r) break; + + /* expand string */ +#define EXPAND_STRING_MAX_LENGTH 100 + if (NTYPE(target) == N_STRING) { + if (!IS_REPEAT_INFINITE(qn->lower) && qn->lower == qn->upper && + qn->lower > 1 && qn->lower <= EXPAND_STRING_MAX_LENGTH) { + int len = NSTRING_LEN(target); + StrNode* sn = &(NSTRING(target)); + + if (len * qn->lower <= EXPAND_STRING_MAX_LENGTH) { + int i, n = qn->lower; + onig_node_conv_to_str_node(node, NSTRING(target).flag); + for (i = 0; i < n; i++) { + r = onig_node_str_cat(node, sn->s, sn->end); + if (r) break; + } + onig_node_free(target); + break; /* break case N_QUANTIFIER: */ + } + } + } + +#ifdef USE_OP_PUSH_OR_JUMP_EXACT + if (qn->greedy && (qn->target_empty_info != 0)) { + if (NTYPE(target) == N_QUANTIFIER) { + QuantifierNode* tqn = &(NQUANTIFIER(target)); + if (IS_NOT_NULL(tqn->head_exact)) { + qn->head_exact = tqn->head_exact; + tqn->head_exact = NULL; + } + } + else { + qn->head_exact = get_head_value_node(qn->target, 1, reg); + } + } +#endif + } + break; + + case N_EFFECT: + { + EffectNode* en = &(NEFFECT(node)); + + switch (en->type) { + case EFFECT_OPTION: + { + OnigOptionType options = reg->options; + reg->options = NEFFECT(node).option; + r = setup_tree(NEFFECT(node).target, reg, state, env); + reg->options = options; + } + break; + + case EFFECT_MEMORY: + if ((state & (IN_ALT | IN_NOT | IN_VAR_REPEAT)) != 0) { + BIT_STATUS_ON_AT(env->bt_mem_start, en->regnum); + /* SET_EFFECT_STATUS(node, NST_MEM_IN_ALT_NOT); */ + } + r = setup_tree(en->target, reg, state, env); + break; + + case EFFECT_STOP_BACKTRACK: + { + Node* target = en->target; + r = setup_tree(target, reg, state, env); + if (NTYPE(target) == N_QUANTIFIER) { + QuantifierNode* tqn = &(NQUANTIFIER(target)); + if (IS_REPEAT_INFINITE(tqn->upper) && tqn->lower <= 1 && + tqn->greedy != 0) { /* (?>a*), a*+ etc... */ + int qtype = NTYPE(tqn->target); + if (IS_NODE_TYPE_SIMPLE(qtype)) + SET_EFFECT_STATUS(node, NST_STOP_BT_SIMPLE_REPEAT); + } + } + } + break; + } + } + break; + + case N_ANCHOR: + { + AnchorNode* an = &(NANCHOR(node)); + + switch (an->type) { + case ANCHOR_PREC_READ: + r = setup_tree(an->target, reg, state, env); + break; + case ANCHOR_PREC_READ_NOT: + r = setup_tree(an->target, reg, (state | IN_NOT), env); + break; + +/* allowed node types in look-behind */ +#define ALLOWED_TYPE_IN_LB \ + ( N_LIST | N_ALT | N_STRING | N_CCLASS | N_CTYPE | \ + N_ANYCHAR | N_ANCHOR | N_EFFECT | N_QUANTIFIER | N_CALL ) + +#define ALLOWED_EFFECT_IN_LB ( EFFECT_MEMORY ) +#define ALLOWED_EFFECT_IN_LB_NOT 0 + +#define ALLOWED_ANCHOR_IN_LB \ +( ANCHOR_LOOK_BEHIND | ANCHOR_BEGIN_LINE | ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION ) +#define ALLOWED_ANCHOR_IN_LB_NOT \ +( ANCHOR_LOOK_BEHIND | ANCHOR_LOOK_BEHIND_NOT | ANCHOR_BEGIN_LINE | ANCHOR_END_LINE | ANCHOR_BEGIN_BUF | ANCHOR_BEGIN_POSITION ) + + case ANCHOR_LOOK_BEHIND: + { + r = check_type_tree(an->target, ALLOWED_TYPE_IN_LB, + ALLOWED_EFFECT_IN_LB, ALLOWED_ANCHOR_IN_LB); + if (r < 0) return r; + if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN; + r = setup_look_behind(node, reg, env); + if (r != 0) return r; + r = setup_tree(an->target, reg, state, env); + } + break; + + case ANCHOR_LOOK_BEHIND_NOT: + { + r = check_type_tree(an->target, ALLOWED_TYPE_IN_LB, + ALLOWED_EFFECT_IN_LB_NOT, ALLOWED_ANCHOR_IN_LB_NOT); + if (r < 0) return r; + if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN; + r = setup_look_behind(node, reg, env); + if (r != 0) return r; + r = setup_tree(an->target, reg, (state | IN_NOT), env); + } + break; + } + } + break; + + default: + break; + } + + return r; +} + +/* set skip map for Boyer-Moor search */ +static int +set_bm_skip(UChar* s, UChar* end, OnigEncoding enc, + UChar skip[], int** int_skip) +{ + int i, len; + + len = end - s; + if (len < ONIG_CHAR_TABLE_SIZE) { + for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) skip[i] = len; + + for (i = 0; i < len - 1; i++) + skip[s[i]] = len - 1 - i; + } + else { + if (IS_NULL(*int_skip)) { + *int_skip = (int* )xmalloc(sizeof(int) * ONIG_CHAR_TABLE_SIZE); + if (IS_NULL(*int_skip)) return ONIGERR_MEMORY; + } + for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) (*int_skip)[i] = len; + + for (i = 0; i < len - 1; i++) + (*int_skip)[s[i]] = len - 1 - i; + } + return 0; +} + +#define OPT_EXACT_MAXLEN 24 + +typedef struct { + OnigDistance min; /* min byte length */ + OnigDistance max; /* max byte length */ +} MinMaxLen; + +typedef struct { + MinMaxLen mmd; + OnigEncoding enc; + OnigOptionType options; + OnigAmbigType ambig_flag; + ScanEnv* scan_env; +} OptEnv; + +typedef struct { + int left_anchor; + int right_anchor; +} OptAncInfo; + +typedef struct { + MinMaxLen mmd; /* info position */ + OptAncInfo anc; + + int reach_end; + int ignore_case; + int len; + UChar s[OPT_EXACT_MAXLEN]; +} OptExactInfo; + +typedef struct { + MinMaxLen mmd; /* info position */ + OptAncInfo anc; + + int value; /* weighted value */ + UChar map[ONIG_CHAR_TABLE_SIZE]; +} OptMapInfo; + +typedef struct { + MinMaxLen len; + + OptAncInfo anc; + OptExactInfo exb; /* boundary */ + OptExactInfo exm; /* middle */ + OptExactInfo expr; /* prec read (?=...) */ + + OptMapInfo map; /* boundary */ +} NodeOptInfo; + + +static int +map_position_value(OnigEncoding enc, int i) +{ + static const short int ByteValTable[] = { + 5, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10, 1, 1, 10, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 12, 4, 7, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, + 5, 6, 6, 6, 6, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 5, 5, 5, + 5, 6, 6, 6, 6, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 1 + }; + + if (i < sizeof(ByteValTable)/sizeof(ByteValTable[0])) { + if (i == 0 && ONIGENC_MBC_MINLEN(enc) > 1) + return 20; + else + return (int )ByteValTable[i]; + } + else + return 4; /* Take it easy. */ +} + +static int +distance_value(MinMaxLen* mm) +{ + /* 1000 / (min-max-dist + 1) */ + static const short int dist_vals[] = { + 1000, 500, 333, 250, 200, 167, 143, 125, 111, 100, + 91, 83, 77, 71, 67, 63, 59, 56, 53, 50, + 48, 45, 43, 42, 40, 38, 37, 36, 34, 33, + 32, 31, 30, 29, 29, 28, 27, 26, 26, 25, + 24, 24, 23, 23, 22, 22, 21, 21, 20, 20, + 20, 19, 19, 19, 18, 18, 18, 17, 17, 17, + 16, 16, 16, 16, 15, 15, 15, 15, 14, 14, + 14, 14, 14, 14, 13, 13, 13, 13, 13, 13, + 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 10, 10, 10, 10, 10 + }; + + int d; + + if (mm->max == ONIG_INFINITE_DISTANCE) return 0; + + d = mm->max - mm->min; + if (d < sizeof(dist_vals)/sizeof(dist_vals[0])) + /* return dist_vals[d] * 16 / (mm->min + 12); */ + return (int )dist_vals[d]; + else + return 1; +} + +static int +comp_distance_value(MinMaxLen* d1, MinMaxLen* d2, int v1, int v2) +{ + if (v2 <= 0) return -1; + if (v1 <= 0) return 1; + + v1 *= distance_value(d1); + v2 *= distance_value(d2); + + if (v2 > v1) return 1; + if (v2 < v1) return -1; + + if (d2->min < d1->min) return 1; + if (d2->min > d1->min) return -1; + return 0; +} + +static int +is_equal_mml(MinMaxLen* a, MinMaxLen* b) +{ + return (a->min == b->min && a->max == b->max) ? 1 : 0; +} + + +static void +set_mml(MinMaxLen* mml, OnigDistance min, OnigDistance max) +{ + mml->min = min; + mml->max = max; +} + +static void +clear_mml(MinMaxLen* mml) +{ + mml->min = mml->max = 0; +} + +static void +copy_mml(MinMaxLen* to, MinMaxLen* from) +{ + to->min = from->min; + to->max = from->max; +} + +static void +add_mml(MinMaxLen* to, MinMaxLen* from) +{ + to->min = distance_add(to->min, from->min); + to->max = distance_add(to->max, from->max); +} + +#if 0 +static void +add_len_mml(MinMaxLen* to, OnigDistance len) +{ + to->min = distance_add(to->min, len); + to->max = distance_add(to->max, len); +} +#endif + +static void +alt_merge_mml(MinMaxLen* to, MinMaxLen* from) +{ + if (to->min > from->min) to->min = from->min; + if (to->max < from->max) to->max = from->max; +} + +static void +copy_opt_env(OptEnv* to, OptEnv* from) +{ + *to = *from; +} + +static void +clear_opt_anc_info(OptAncInfo* anc) +{ + anc->left_anchor = 0; + anc->right_anchor = 0; +} + +static void +copy_opt_anc_info(OptAncInfo* to, OptAncInfo* from) +{ + *to = *from; +} + +static void +concat_opt_anc_info(OptAncInfo* to, OptAncInfo* left, OptAncInfo* right, + OnigDistance left_len, OnigDistance right_len) +{ + clear_opt_anc_info(to); + + to->left_anchor = left->left_anchor; + if (left_len == 0) { + to->left_anchor |= right->left_anchor; + } + + to->right_anchor = right->right_anchor; + if (right_len == 0) { + to->right_anchor |= left->right_anchor; + } +} + +static int +is_left_anchor(int anc) +{ + if (anc == ANCHOR_END_BUF || anc == ANCHOR_SEMI_END_BUF || + anc == ANCHOR_END_LINE || anc == ANCHOR_PREC_READ || + anc == ANCHOR_PREC_READ_NOT) + return 0; + + return 1; +} + +static int +is_set_opt_anc_info(OptAncInfo* to, int anc) +{ + if ((to->left_anchor & anc) != 0) return 1; + + return ((to->right_anchor & anc) != 0 ? 1 : 0); +} + +static void +add_opt_anc_info(OptAncInfo* to, int anc) +{ + if (is_left_anchor(anc)) + to->left_anchor |= anc; + else + to->right_anchor |= anc; +} + +static void +remove_opt_anc_info(OptAncInfo* to, int anc) +{ + if (is_left_anchor(anc)) + to->left_anchor &= ~anc; + else + to->right_anchor &= ~anc; +} + +static void +alt_merge_opt_anc_info(OptAncInfo* to, OptAncInfo* add) +{ + to->left_anchor &= add->left_anchor; + to->right_anchor &= add->right_anchor; +} + +static int +is_full_opt_exact_info(OptExactInfo* ex) +{ + return (ex->len >= OPT_EXACT_MAXLEN ? 1 : 0); +} + +static void +clear_opt_exact_info(OptExactInfo* ex) +{ + clear_mml(&ex->mmd); + clear_opt_anc_info(&ex->anc); + ex->reach_end = 0; + ex->ignore_case = 0; + ex->len = 0; + ex->s[0] = '\0'; +} + +static void +copy_opt_exact_info(OptExactInfo* to, OptExactInfo* from) +{ + *to = *from; +} + +static void +concat_opt_exact_info(OptExactInfo* to, OptExactInfo* add, OnigEncoding enc) +{ + int i, j, len; + UChar *p, *end; + OptAncInfo tanc; + + if (! to->ignore_case && add->ignore_case) { + if (to->len >= add->len) return ; /* avoid */ + + to->ignore_case = 1; + } + + p = add->s; + end = p + add->len; + for (i = to->len; p < end; ) { + len = enc_len(enc, p); + if (i + len > OPT_EXACT_MAXLEN) break; + for (j = 0; j < len && p < end; j++) + to->s[i++] = *p++; + } + + to->len = i; + to->reach_end = (p == end ? add->reach_end : 0); + + concat_opt_anc_info(&tanc, &to->anc, &add->anc, 1, 1); + if (! to->reach_end) tanc.right_anchor = 0; + copy_opt_anc_info(&to->anc, &tanc); +} + +static void +concat_opt_exact_info_str(OptExactInfo* to, + UChar* s, UChar* end, int raw, OnigEncoding enc) +{ + int i, j, len; + UChar *p; + + for (i = to->len, p = s; p < end && i < OPT_EXACT_MAXLEN; ) { + len = enc_len(enc, p); + if (i + len > OPT_EXACT_MAXLEN) break; + for (j = 0; j < len && p < end; j++) + to->s[i++] = *p++; + } + + to->len = i; +} + +static void +alt_merge_opt_exact_info(OptExactInfo* to, OptExactInfo* add, OptEnv* env) +{ + int i, j, len; + + if (add->len == 0 || to->len == 0) { + clear_opt_exact_info(to); + return ; + } + + if (! is_equal_mml(&to->mmd, &add->mmd)) { + clear_opt_exact_info(to); + return ; + } + + for (i = 0; i < to->len && i < add->len; ) { + if (to->s[i] != add->s[i]) break; + len = enc_len(env->enc, to->s + i); + + for (j = 1; j < len; j++) { + if (to->s[i+j] != add->s[i+j]) break; + } + if (j < len) break; + i += len; + } + + if (! add->reach_end || i < add->len || i < to->len) { + to->reach_end = 0; + } + to->len = i; + to->ignore_case |= add->ignore_case; + + alt_merge_opt_anc_info(&to->anc, &add->anc); + if (! to->reach_end) to->anc.right_anchor = 0; +} + +static void +select_opt_exact_info(OnigEncoding enc, OptExactInfo* now, OptExactInfo* alt) +{ + int v1, v2; + + v1 = now->len; + v2 = alt->len; + + if (v2 == 0) { + return ; + } + else if (v1 == 0) { + copy_opt_exact_info(now, alt); + return ; + } + else if (v1 <= 2 && v2 <= 2) { + /* ByteValTable[x] is big value --> low price */ + v2 = map_position_value(enc, now->s[0]); + v1 = map_position_value(enc, alt->s[0]); + + if (now->len > 1) v1 += 5; + if (alt->len > 1) v2 += 5; + } + + if (now->ignore_case == 0) v1 *= 2; + if (alt->ignore_case == 0) v2 *= 2; + + if (comp_distance_value(&now->mmd, &alt->mmd, v1, v2) > 0) + copy_opt_exact_info(now, alt); +} + +static void +clear_opt_map_info(OptMapInfo* map) +{ + static const OptMapInfo clean_info = { + {0, 0}, {0, 0}, 0, + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + } + }; + + xmemcpy(map, &clean_info, sizeof(OptMapInfo)); +} + +static void +copy_opt_map_info(OptMapInfo* to, OptMapInfo* from) +{ + *to = *from; +} + +static void +add_char_opt_map_info(OptMapInfo* map, UChar c, OnigEncoding enc) +{ + if (map->map[c] == 0) { + map->map[c] = 1; + map->value += map_position_value(enc, c); + } +} + +static int +add_char_amb_opt_map_info(OptMapInfo* map, UChar* p, UChar* end, + OnigEncoding enc, OnigAmbigType ambig_flag) +{ + int i, n, len; + UChar buf[ONIGENC_MBC_NORMALIZE_MAXLEN]; + OnigCodePoint code; + const OnigPairAmbigCodes* pccs; + OnigAmbigType amb; + + add_char_opt_map_info(map, p[0], enc); + code = ONIGENC_MBC_TO_CODE(enc, p, end); + + for (amb = 0x01; amb <= ONIGENC_AMBIGUOUS_MATCH_LIMIT; amb <<= 1) { + if ((amb & ambig_flag) == 0) continue; + + n = ONIGENC_GET_ALL_PAIR_AMBIG_CODES(enc, amb, &pccs); + for (i = 0; i < n; i++) { + if (pccs[i].from == code) { + len = ONIGENC_CODE_TO_MBC(enc, pccs[i].to, buf); + if (len < 0) return len; + add_char_opt_map_info(map, buf[0], enc); + } + } + } + return 0; +} + +static void +select_opt_map_info(OptMapInfo* now, OptMapInfo* alt) +{ + static int z = 1<<15; /* 32768: something big value */ + + int v1, v2; + + if (alt->value == 0) return ; + if (now->value == 0) { + copy_opt_map_info(now, alt); + return ; + } + + v1 = z / now->value; + v2 = z / alt->value; + if (comp_distance_value(&now->mmd, &alt->mmd, v1, v2) > 0) + copy_opt_map_info(now, alt); +} + +static int +comp_opt_exact_or_map_info(OptExactInfo* e, OptMapInfo* m) +{ +#define COMP_EM_BASE 20 + int ve, vm; + + if (m->value <= 0) return -1; + + ve = COMP_EM_BASE * e->len * (e->ignore_case ? 1 : 2); + vm = COMP_EM_BASE * 5 * 2 / m->value; + return comp_distance_value(&e->mmd, &m->mmd, ve, vm); +} + +static void +alt_merge_opt_map_info(OnigEncoding enc, OptMapInfo* to, OptMapInfo* add) +{ + int i, val; + + /* if (! is_equal_mml(&to->mmd, &add->mmd)) return ; */ + if (to->value == 0) return ; + if (add->value == 0 || to->mmd.max < add->mmd.min) { + clear_opt_map_info(to); + return ; + } + + alt_merge_mml(&to->mmd, &add->mmd); + + val = 0; + for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) { + if (add->map[i]) + to->map[i] = 1; + + if (to->map[i]) + val += map_position_value(enc, i); + } + to->value = val; + + alt_merge_opt_anc_info(&to->anc, &add->anc); +} + +static void +set_bound_node_opt_info(NodeOptInfo* opt, MinMaxLen* mmd) +{ + copy_mml(&(opt->exb.mmd), mmd); + copy_mml(&(opt->expr.mmd), mmd); + copy_mml(&(opt->map.mmd), mmd); +} + +static void +clear_node_opt_info(NodeOptInfo* opt) +{ + clear_mml(&opt->len); + clear_opt_anc_info(&opt->anc); + clear_opt_exact_info(&opt->exb); + clear_opt_exact_info(&opt->exm); + clear_opt_exact_info(&opt->expr); + clear_opt_map_info(&opt->map); +} + +static void +copy_node_opt_info(NodeOptInfo* to, NodeOptInfo* from) +{ + *to = *from; +} + +static void +concat_left_node_opt_info(OnigEncoding enc, NodeOptInfo* to, NodeOptInfo* add) +{ + int exb_reach, exm_reach; + OptAncInfo tanc; + + concat_opt_anc_info(&tanc, &to->anc, &add->anc, to->len.max, add->len.max); + copy_opt_anc_info(&to->anc, &tanc); + + if (add->exb.len > 0 && to->len.max == 0) { + concat_opt_anc_info(&tanc, &to->anc, &add->exb.anc, + to->len.max, add->len.max); + copy_opt_anc_info(&add->exb.anc, &tanc); + } + + if (add->map.value > 0 && to->len.max == 0) { + if (add->map.mmd.max == 0) + add->map.anc.left_anchor |= to->anc.left_anchor; + } + + exb_reach = to->exb.reach_end; + exm_reach = to->exm.reach_end; + + if (add->len.max != 0) + to->exb.reach_end = to->exm.reach_end = 0; + + if (add->exb.len > 0) { + if (exb_reach) { + concat_opt_exact_info(&to->exb, &add->exb, enc); + clear_opt_exact_info(&add->exb); + } + else if (exm_reach) { + concat_opt_exact_info(&to->exm, &add->exb, enc); + clear_opt_exact_info(&add->exb); + } + } + select_opt_exact_info(enc, &to->exm, &add->exb); + select_opt_exact_info(enc, &to->exm, &add->exm); + + if (to->expr.len > 0) { + if (add->len.max > 0) { + if (to->expr.len > (int )add->len.max) + to->expr.len = add->len.max; + + if (to->expr.mmd.max == 0) + select_opt_exact_info(enc, &to->exb, &to->expr); + else + select_opt_exact_info(enc, &to->exm, &to->expr); + } + } + else if (add->expr.len > 0) { + copy_opt_exact_info(&to->expr, &add->expr); + } + + select_opt_map_info(&to->map, &add->map); + + add_mml(&to->len, &add->len); +} + +static void +alt_merge_node_opt_info(NodeOptInfo* to, NodeOptInfo* add, OptEnv* env) +{ + alt_merge_opt_anc_info (&to->anc, &add->anc); + alt_merge_opt_exact_info(&to->exb, &add->exb, env); + alt_merge_opt_exact_info(&to->exm, &add->exm, env); + alt_merge_opt_exact_info(&to->expr, &add->expr, env); + alt_merge_opt_map_info(env->enc, &to->map, &add->map); + + alt_merge_mml(&to->len, &add->len); +} + + +#define MAX_NODE_OPT_INFO_REF_COUNT 5 + +static int +optimize_node_left(Node* node, NodeOptInfo* opt, OptEnv* env) +{ + int type; + int r = 0; + + clear_node_opt_info(opt); + set_bound_node_opt_info(opt, &env->mmd); + + type = NTYPE(node); + switch (type) { + case N_LIST: + { + OptEnv nenv; + NodeOptInfo nopt; + Node* nd = node; + + copy_opt_env(&nenv, env); + do { + r = optimize_node_left(NCONS(nd).left, &nopt, &nenv); + if (r == 0) { + add_mml(&nenv.mmd, &nopt.len); + concat_left_node_opt_info(env->enc, opt, &nopt); + } + } while (r == 0 && IS_NOT_NULL(nd = NCONS(nd).right)); + } + break; + + case N_ALT: + { + NodeOptInfo nopt; + Node* nd = node; + + do { + r = optimize_node_left(NCONS(nd).left, &nopt, env); + if (r == 0) { + if (nd == node) copy_node_opt_info(opt, &nopt); + else alt_merge_node_opt_info(opt, &nopt, env); + } + } while ((r == 0) && IS_NOT_NULL(nd = NCONS(nd).right)); + } + break; + + case N_STRING: + { + StrNode* sn = &(NSTRING(node)); + int slen = sn->end - sn->s; + int is_raw = NSTRING_IS_RAW(node); + + if (! NSTRING_IS_AMBIG(node)) { + concat_opt_exact_info_str(&opt->exb, sn->s, sn->end, + NSTRING_IS_RAW(node), env->enc); + if (slen > 0) { + add_char_opt_map_info(&opt->map, *(sn->s), env->enc); + } + set_mml(&opt->len, slen, slen); + } + else { + int n, max; + + concat_opt_exact_info_str(&opt->exb, sn->s, sn->end, + is_raw, env->enc); + opt->exb.ignore_case = 1; + + if (slen > 0) { + r = add_char_amb_opt_map_info(&opt->map, sn->s, sn->end, + env->enc, env->ambig_flag); + if (r != 0) break; + } + + if (NSTRING_IS_AMBIG_REDUCE(node)) { + n = onigenc_strlen(env->enc, sn->s, sn->end); + max = ONIGENC_MBC_MAXLEN_DIST(env->enc) * n; + } + else { + max = slen; + } + set_mml(&opt->len, slen, max); + } + + if (opt->exb.len == slen) + opt->exb.reach_end = 1; + } + break; + + case N_CCLASS: + { + int i, z; + CClassNode* cc = &(NCCLASS(node)); + + /* no need to check ignore case. (setted in setup_tree()) */ + + if (IS_NOT_NULL(cc->mbuf) || IS_CCLASS_NOT(cc)) { + OnigDistance min = ONIGENC_MBC_MINLEN(env->enc); + OnigDistance max = ONIGENC_MBC_MAXLEN_DIST(env->enc); + + set_mml(&opt->len, min, max); + } + else { + for (i = 0; i < SINGLE_BYTE_SIZE; i++) { + z = BITSET_AT(cc->bs, i); + if ((z && !IS_CCLASS_NOT(cc)) || (!z && IS_CCLASS_NOT(cc))) { + add_char_opt_map_info(&opt->map, (UChar )i, env->enc); + } + } + set_mml(&opt->len, 1, 1); + } + } + break; + + case N_CTYPE: + { + int i, min, max; + + max = ONIGENC_MBC_MAXLEN_DIST(env->enc); + + if (max == 1) { + min = 1; + + switch (NCTYPE(node).type) { + case CTYPE_NOT_WORD: + for (i = 0; i < SINGLE_BYTE_SIZE; i++) { + if (! ONIGENC_IS_CODE_WORD(env->enc, i)) { + add_char_opt_map_info(&opt->map, (UChar )i, env->enc); + } + } + break; + + case CTYPE_WORD: + for (i = 0; i < SINGLE_BYTE_SIZE; i++) { + if (ONIGENC_IS_CODE_WORD(env->enc, i)) { + add_char_opt_map_info(&opt->map, (UChar )i, env->enc); + } + } + break; + } + } + else { + min = ONIGENC_MBC_MINLEN(env->enc); + } + set_mml(&opt->len, min, max); + } + break; + + case N_ANYCHAR: + { + OnigDistance min = ONIGENC_MBC_MINLEN(env->enc); + OnigDistance max = ONIGENC_MBC_MAXLEN_DIST(env->enc); + set_mml(&opt->len, min, max); + } + break; + + case N_ANCHOR: + switch (NANCHOR(node).type) { + case ANCHOR_BEGIN_BUF: + case ANCHOR_BEGIN_POSITION: + case ANCHOR_BEGIN_LINE: + case ANCHOR_END_BUF: + case ANCHOR_SEMI_END_BUF: + case ANCHOR_END_LINE: + add_opt_anc_info(&opt->anc, NANCHOR(node).type); + break; + + case ANCHOR_PREC_READ: + { + NodeOptInfo nopt; + + r = optimize_node_left(NANCHOR(node).target, &nopt, env); + if (r == 0) { + if (nopt.exb.len > 0) + copy_opt_exact_info(&opt->expr, &nopt.exb); + else if (nopt.exm.len > 0) + copy_opt_exact_info(&opt->expr, &nopt.exm); + + opt->expr.reach_end = 0; + + if (nopt.map.value > 0) + copy_opt_map_info(&opt->map, &nopt.map); + } + } + break; + + case ANCHOR_PREC_READ_NOT: + case ANCHOR_LOOK_BEHIND: /* Sorry, I can't make use of it. */ + case ANCHOR_LOOK_BEHIND_NOT: + break; + } + break; + + case N_BACKREF: + { + int i; + int* backs; + OnigDistance min, max, tmin, tmax; + Node** nodes = SCANENV_MEM_NODES(env->scan_env); + BackrefNode* br = &(NBACKREF(node)); + + if (br->state & NST_RECURSION) { + set_mml(&opt->len, 0, ONIG_INFINITE_DISTANCE); + break; + } + backs = BACKREFS_P(br); + r = get_min_match_length(nodes[backs[0]], &min, env->scan_env); + if (r != 0) break; + r = get_max_match_length(nodes[backs[0]], &max, env->scan_env); + if (r != 0) break; + for (i = 1; i < br->back_num; i++) { + r = get_min_match_length(nodes[backs[i]], &tmin, env->scan_env); + if (r != 0) break; + r = get_max_match_length(nodes[backs[i]], &tmax, env->scan_env); + if (r != 0) break; + if (min > tmin) min = tmin; + if (max < tmax) max = tmax; + } + if (r == 0) set_mml(&opt->len, min, max); + } + break; + +#ifdef USE_SUBEXP_CALL + case N_CALL: + if (IS_CALL_RECURSION(&(NCALL(node)))) + set_mml(&opt->len, 0, ONIG_INFINITE_DISTANCE); + else { + OnigOptionType save = env->options; + env->options = NEFFECT(NCALL(node).target).option; + r = optimize_node_left(NCALL(node).target, opt, env); + env->options = save; + } + break; +#endif + + case N_QUANTIFIER: + { + int i; + OnigDistance min, max; + NodeOptInfo nopt; + QuantifierNode* qn = &(NQUANTIFIER(node)); + + r = optimize_node_left(qn->target, &nopt, env); + if (r) break; + + if (qn->lower == 0 && IS_REPEAT_INFINITE(qn->upper)) { + if (env->mmd.max == 0 && + NTYPE(qn->target) == N_ANYCHAR && qn->greedy) { + if (IS_MULTILINE(env->options)) + add_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR_ML); + else + add_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR); + } + } + else { + if (qn->lower > 0) { + copy_node_opt_info(opt, &nopt); + if (nopt.exb.len > 0) { + if (nopt.exb.reach_end) { + for (i = 2; i < qn->lower && + ! is_full_opt_exact_info(&opt->exb); i++) { + concat_opt_exact_info(&opt->exb, &nopt.exb, env->enc); + } + if (i < qn->lower) { + opt->exb.reach_end = 0; + } + } + } + + if (qn->lower != qn->upper) { + opt->exb.reach_end = 0; + opt->exm.reach_end = 0; + } + if (qn->lower > 1) + opt->exm.reach_end = 0; + } + } + + min = distance_multiply(nopt.len.min, qn->lower); + if (IS_REPEAT_INFINITE(qn->upper)) + max = (nopt.len.max > 0 ? ONIG_INFINITE_DISTANCE : 0); + else + max = distance_multiply(nopt.len.max, qn->upper); + + set_mml(&opt->len, min, max); + } + break; + + case N_EFFECT: + { + EffectNode* en = &(NEFFECT(node)); + + switch (en->type) { + case EFFECT_OPTION: + { + OnigOptionType save = env->options; + + env->options = en->option; + r = optimize_node_left(en->target, opt, env); + env->options = save; + } + break; + + case EFFECT_MEMORY: +#ifdef USE_SUBEXP_CALL + en->opt_count++; + if (en->opt_count > MAX_NODE_OPT_INFO_REF_COUNT) { + OnigDistance min, max; + + min = 0; + max = ONIG_INFINITE_DISTANCE; + if (IS_EFFECT_MIN_FIXED(en)) min = en->min_len; + if (IS_EFFECT_MAX_FIXED(en)) max = en->max_len; + set_mml(&opt->len, min, max); + } + else +#endif + { + r = optimize_node_left(en->target, opt, env); + + if (is_set_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR_MASK)) { + if (BIT_STATUS_AT(env->scan_env->backrefed_mem, en->regnum)) + remove_opt_anc_info(&opt->anc, ANCHOR_ANYCHAR_STAR_MASK); + } + } + break; + + case EFFECT_STOP_BACKTRACK: + r = optimize_node_left(en->target, opt, env); + break; + } + } + break; + + default: +#ifdef ONIG_DEBUG + fprintf(stderr, "optimize_node_left: undefined node type %d\n", + NTYPE(node)); +#endif + r = ONIGERR_TYPE_BUG; + break; + } + + return r; +} + +static int +set_optimize_exact_info(regex_t* reg, OptExactInfo* e) +{ + int r; + + if (e->len == 0) return 0; + + if (e->ignore_case) { + reg->exact = (UChar* )xmalloc(e->len); + CHECK_NULL_RETURN_VAL(reg->exact, ONIGERR_MEMORY); + xmemcpy(reg->exact, e->s, e->len); + reg->exact_end = reg->exact + e->len; + reg->optimize = ONIG_OPTIMIZE_EXACT_IC; + } + else { + int allow_reverse; + + reg->exact = k_strdup(e->s, e->s + e->len); + CHECK_NULL_RETURN_VAL(reg->exact, ONIGERR_MEMORY); + reg->exact_end = reg->exact + e->len; + + allow_reverse = + ONIGENC_IS_ALLOWED_REVERSE_MATCH(reg->enc, reg->exact, reg->exact_end); + + if (e->len >= 3 || (e->len >= 2 && allow_reverse)) { + r = set_bm_skip(reg->exact, reg->exact_end, reg->enc, + reg->map, &(reg->int_map)); + if (r) return r; + + reg->optimize = (allow_reverse != 0 + ? ONIG_OPTIMIZE_EXACT_BM : ONIG_OPTIMIZE_EXACT_BM_NOT_REV); + } + else { + reg->optimize = ONIG_OPTIMIZE_EXACT; + } + } + + reg->dmin = e->mmd.min; + reg->dmax = e->mmd.max; + + if (reg->dmin != ONIG_INFINITE_DISTANCE) { + reg->threshold_len = reg->dmin + (reg->exact_end - reg->exact); + } + + return 0; +} + +static void +set_optimize_map_info(regex_t* reg, OptMapInfo* m) +{ + int i; + + for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) + reg->map[i] = m->map[i]; + + reg->optimize = ONIG_OPTIMIZE_MAP; + reg->dmin = m->mmd.min; + reg->dmax = m->mmd.max; + + if (reg->dmin != ONIG_INFINITE_DISTANCE) { + reg->threshold_len = reg->dmin + 1; + } +} + +static void +set_sub_anchor(regex_t* reg, OptAncInfo* anc) +{ + reg->sub_anchor |= anc->left_anchor & ANCHOR_BEGIN_LINE; + reg->sub_anchor |= anc->right_anchor & ANCHOR_END_LINE; +} + +#ifdef ONIG_DEBUG +static void print_optimize_info(FILE* f, regex_t* reg); +#endif + +static int +set_optimize_info_from_tree(Node* node, regex_t* reg, ScanEnv* scan_env) +{ + + int r; + NodeOptInfo opt; + OptEnv env; + + env.enc = reg->enc; + env.options = reg->options; + env.ambig_flag = reg->ambig_flag; + env.scan_env = scan_env; + clear_mml(&env.mmd); + + r = optimize_node_left(node, &opt, &env); + if (r) return r; + + reg->anchor = opt.anc.left_anchor & (ANCHOR_BEGIN_BUF | + ANCHOR_BEGIN_POSITION | ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_ML); + + reg->anchor |= opt.anc.right_anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF); + + if (reg->anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF)) { + reg->anchor_dmin = opt.len.min; + reg->anchor_dmax = opt.len.max; + } + + if (opt.exb.len > 0 || opt.exm.len > 0) { + select_opt_exact_info(reg->enc, &opt.exb, &opt.exm); + if (opt.map.value > 0 && + comp_opt_exact_or_map_info(&opt.exb, &opt.map) > 0) { + goto set_map; + } + else { + r = set_optimize_exact_info(reg, &opt.exb); + set_sub_anchor(reg, &opt.exb.anc); + } + } + else if (opt.map.value > 0) { + set_map: + set_optimize_map_info(reg, &opt.map); + set_sub_anchor(reg, &opt.map.anc); + } + else { + reg->sub_anchor |= opt.anc.left_anchor & ANCHOR_BEGIN_LINE; + if (opt.len.max == 0) + reg->sub_anchor |= opt.anc.right_anchor & ANCHOR_END_LINE; + } + +#if defined(ONIG_DEBUG_COMPILE) || defined(ONIG_DEBUG_MATCH) + print_optimize_info(stderr, reg); +#endif + return r; +} + +static void +clear_optimize_info(regex_t* reg) +{ + reg->optimize = ONIG_OPTIMIZE_NONE; + reg->anchor = 0; + reg->anchor_dmin = 0; + reg->anchor_dmax = 0; + reg->sub_anchor = 0; + reg->exact_end = (UChar* )NULL; + reg->threshold_len = 0; + if (IS_NOT_NULL(reg->exact)) { + xfree(reg->exact); + reg->exact = (UChar* )NULL; + } +} + +#ifdef ONIG_DEBUG + +static void print_enc_string(FILE* fp, OnigEncoding enc, + const UChar *s, const UChar *end) +{ + fprintf(fp, "\nPATTERN: /"); + + if (ONIGENC_MBC_MINLEN(enc) > 1) { + const UChar *p; + OnigCodePoint code; + + p = s; + while (p < end) { + code = ONIGENC_MBC_TO_CODE(enc, p, end); + if (code >= 0x80) { + fprintf(fp, " 0x%04x ", (int )code); + } + else { + fputc((int )code, fp); + } + + p += enc_len(enc, p); + } + } + else { + while (s < end) { + fputc((int )*s, fp); + s++; + } + } + + fprintf(fp, "/\n"); +} + +static void +print_distance_range(FILE* f, OnigDistance a, OnigDistance b) +{ + if (a == ONIG_INFINITE_DISTANCE) + fputs("inf", f); + else + fprintf(f, "(%u)", a); + + fputs("-", f); + + if (b == ONIG_INFINITE_DISTANCE) + fputs("inf", f); + else + fprintf(f, "(%u)", b); +} + +static void +print_anchor(FILE* f, int anchor) +{ + int q = 0; + + fprintf(f, "["); + + if (anchor & ANCHOR_BEGIN_BUF) { + fprintf(f, "begin-buf"); + q = 1; + } + if (anchor & ANCHOR_BEGIN_LINE) { + if (q) fprintf(f, ", "); + q = 1; + fprintf(f, "begin-line"); + } + if (anchor & ANCHOR_BEGIN_POSITION) { + if (q) fprintf(f, ", "); + q = 1; + fprintf(f, "begin-pos"); + } + if (anchor & ANCHOR_END_BUF) { + if (q) fprintf(f, ", "); + q = 1; + fprintf(f, "end-buf"); + } + if (anchor & ANCHOR_SEMI_END_BUF) { + if (q) fprintf(f, ", "); + q = 1; + fprintf(f, "semi-end-buf"); + } + if (anchor & ANCHOR_END_LINE) { + if (q) fprintf(f, ", "); + q = 1; + fprintf(f, "end-line"); + } + if (anchor & ANCHOR_ANYCHAR_STAR) { + if (q) fprintf(f, ", "); + q = 1; + fprintf(f, "anychar-star"); + } + if (anchor & ANCHOR_ANYCHAR_STAR_ML) { + if (q) fprintf(f, ", "); + fprintf(f, "anychar-star-pl"); + } + + fprintf(f, "]"); +} + +static void +print_optimize_info(FILE* f, regex_t* reg) +{ + static const char* on[] = { "NONE", "EXACT", "EXACT_BM", "EXACT_BM_NOT_REV", + "EXACT_IC", "MAP" }; + + fprintf(f, "optimize: %s\n", on[reg->optimize]); + fprintf(f, " anchor: "); print_anchor(f, reg->anchor); + if ((reg->anchor & ANCHOR_END_BUF_MASK) != 0) + print_distance_range(f, reg->anchor_dmin, reg->anchor_dmax); + fprintf(f, "\n"); + + if (reg->optimize) { + fprintf(f, " sub anchor: "); print_anchor(f, reg->sub_anchor); + fprintf(f, "\n"); + } + fprintf(f, "\n"); + + if (reg->exact) { + UChar *p; + fprintf(f, "exact: ["); + for (p = reg->exact; p < reg->exact_end; p++) { + fputc(*p, f); + } + fprintf(f, "]: length: %d\n", (reg->exact_end - reg->exact)); + } + else if (reg->optimize & ONIG_OPTIMIZE_MAP) { + int c, i, n = 0; + + for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) + if (reg->map[i]) n++; + + fprintf(f, "map: n=%d\n", n); + if (n > 0) { + c = 0; + fputc('[', f); + for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) { + if (reg->map[i] != 0) { + if (c > 0) fputs(", ", f); + c++; + if (ONIGENC_MBC_MAXLEN(reg->enc) == 1 && + ONIGENC_IS_CODE_PRINT(reg->enc, (OnigCodePoint )i)) + fputc(i, f); + else + fprintf(f, "%d", i); + } + } + fprintf(f, "]\n"); + } + } +} +#endif /* ONIG_DEBUG */ + + +static void +onig_free_body(regex_t* reg) +{ + if (IS_NOT_NULL(reg->p)) xfree(reg->p); + if (IS_NOT_NULL(reg->exact)) xfree(reg->exact); + if (IS_NOT_NULL(reg->int_map)) xfree(reg->int_map); + if (IS_NOT_NULL(reg->int_map_backward)) xfree(reg->int_map_backward); + if (IS_NOT_NULL(reg->repeat_range)) xfree(reg->repeat_range); + if (IS_NOT_NULL(reg->chain)) onig_free(reg->chain); + +#ifdef USE_NAMED_GROUP + onig_names_free(reg); +#endif +} + +extern void +onig_free(regex_t* reg) +{ + if (IS_NOT_NULL(reg)) { + onig_free_body(reg); + xfree(reg); + } +} + +#define REGEX_TRANSFER(to,from) do {\ + (to)->state = ONIG_STATE_MODIFY;\ + onig_free_body(to);\ + xmemcpy(to, from, sizeof(regex_t));\ + xfree(from);\ +} while (0) + +extern void +onig_transfer(regex_t* to, regex_t* from) +{ + THREAD_ATOMIC_START; + REGEX_TRANSFER(to, from); + THREAD_ATOMIC_END; +} + +#define REGEX_CHAIN_HEAD(reg) do {\ + while (IS_NOT_NULL((reg)->chain)) {\ + (reg) = (reg)->chain;\ + }\ +} while (0) + +extern void +onig_chain_link_add(regex_t* to, regex_t* add) +{ + THREAD_ATOMIC_START; + REGEX_CHAIN_HEAD(to); + to->chain = add; + THREAD_ATOMIC_END; +} + +extern void +onig_chain_reduce(regex_t* reg) +{ + regex_t *head, *prev; + + prev = reg; + head = prev->chain; + if (IS_NOT_NULL(head)) { + reg->state = ONIG_STATE_MODIFY; + while (IS_NOT_NULL(head->chain)) { + prev = head; + head = head->chain; + } + prev->chain = (regex_t* )NULL; + REGEX_TRANSFER(reg, head); + } +} + +#if 0 +extern int +onig_clone(regex_t** to, regex_t* from) +{ + int r, size; + regex_t* reg; + +#ifdef USE_MULTI_THREAD_SYSTEM + if (ONIG_STATE(from) >= ONIG_STATE_NORMAL) { + ONIG_STATE_INC(from); + if (IS_NOT_NULL(from->chain) && ONIG_STATE(reg) == ONIG_STATE_NORMAL) { + onig_chain_reduce(from); + ONIG_STATE_INC(from); + } + } + else { + int n = 0; + while (ONIG_STATE(from) < ONIG_STATE_NORMAL) { + if (++n > THREAD_PASS_LIMIT_COUNT) + return ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT; + THREAD_PASS; + } + ONIG_STATE_INC(from); + } +#endif /* USE_MULTI_THREAD_SYSTEM */ + + r = onig_alloc_init(®, ONIG_OPTION_NONE, ONIGENC_AMBIGUOUS_MATCH_DEFAULT, + from->enc, ONIG_SYNTAX_DEFAULT); + if (r != 0) { + ONIG_STATE_DEC(from); + return r; + } + + xmemcpy(reg, from, sizeof(onig_t)); + reg->chain = (regex_t* )NULL; + reg->state = ONIG_STATE_NORMAL; + + if (from->p) { + reg->p = (UChar* )xmalloc(reg->alloc); + if (IS_NULL(reg->p)) goto mem_error; + xmemcpy(reg->p, from->p, reg->alloc); + } + + if (from->exact) { + reg->exact = (UChar* )xmalloc(from->exact_end - from->exact); + if (IS_NULL(reg->exact)) goto mem_error; + reg->exact_end = reg->exact + (from->exact_end - from->exact); + xmemcpy(reg->exact, from->exact, reg->exact_end - reg->exact); + } + + if (from->int_map) { + size = sizeof(int) * ONIG_CHAR_TABLE_SIZE; + reg->int_map = (int* )xmalloc(size); + if (IS_NULL(reg->int_map)) goto mem_error; + xmemcpy(reg->int_map, from->int_map, size); + } + + if (from->int_map_backward) { + size = sizeof(int) * ONIG_CHAR_TABLE_SIZE; + reg->int_map_backward = (int* )xmalloc(size); + if (IS_NULL(reg->int_map_backward)) goto mem_error; + xmemcpy(reg->int_map_backward, from->int_map_backward, size); + } + +#ifdef USE_NAMED_GROUP + reg->name_table = names_clone(from); /* names_clone is not implemented */ +#endif + + ONIG_STATE_DEC(from); + *to = reg; + return 0; + + mem_error: + ONIG_STATE_DEC(from); + return ONIGERR_MEMORY; +} +#endif + +#ifdef ONIG_DEBUG +static void print_compiled_byte_code_list P_((FILE* f, regex_t* reg)); +#endif +#ifdef ONIG_DEBUG_PARSE_TREE +static void print_tree P_((FILE* f, Node* node)); +#endif + +extern int +onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end, + OnigErrorInfo* einfo) +{ +#define COMPILE_INIT_SIZE 20 + + int r, init_size; + Node* root; + ScanEnv scan_env; +#ifdef USE_SUBEXP_CALL + UnsetAddrList uslist; +#endif + + reg->state = ONIG_STATE_COMPILING; + +#ifdef ONIG_DEBUG + print_enc_string(stderr, reg->enc, pattern, pattern_end); +#endif + + if (reg->alloc == 0) { + init_size = (pattern_end - pattern) * 2; + if (init_size <= 0) init_size = COMPILE_INIT_SIZE; + r = BBUF_INIT(reg, init_size); + if (r != 0) goto end; + } + else + reg->used = 0; + + reg->num_mem = 0; + reg->num_repeat = 0; + reg->num_null_check = 0; + reg->repeat_range_alloc = 0; + reg->repeat_range = (OnigRepeatRange* )NULL; +#ifdef USE_COMBINATION_EXPLOSION_CHECK + reg->num_comb_exp_check = 0; +#endif + + r = onig_parse_make_tree(&root, pattern, pattern_end, reg, &scan_env); + if (r != 0) goto err; + +#ifdef USE_NAMED_GROUP + /* mixed use named group and no-named group */ + if (scan_env.num_named > 0 && + IS_SYNTAX_BV(scan_env.syntax, ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP) && + !ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_CAPTURE_GROUP)) { + if (scan_env.num_named != scan_env.num_mem) + r = disable_noname_group_capture(&root, reg, &scan_env); + else + r = numbered_ref_check(root); + + if (r != 0) goto err; + } +#endif + +#ifdef ONIG_DEBUG_PARSE_TREE + print_tree(stderr, root); +#endif + +#ifdef USE_SUBEXP_CALL + if (scan_env.num_call > 0) { + r = unset_addr_list_init(&uslist, scan_env.num_call); + if (r != 0) goto err; + scan_env.unset_addr_list = &uslist; + r = setup_subexp_call(root, &scan_env); + if (r != 0) goto err_unset; + r = subexp_recursive_check_trav(root, &scan_env); + if (r < 0) goto err_unset; + r = subexp_inf_recursive_check_trav(root, &scan_env); + if (r != 0) goto err_unset; + + reg->num_call = scan_env.num_call; + } + else + reg->num_call = 0; +#endif + + r = setup_tree(root, reg, 0, &scan_env); + if (r != 0) goto err_unset; + + reg->capture_history = scan_env.capture_history; + reg->bt_mem_start = scan_env.bt_mem_start; + reg->bt_mem_start |= reg->capture_history; + if (IS_FIND_CONDITION(reg->options)) + BIT_STATUS_ON_ALL(reg->bt_mem_end); + else { + reg->bt_mem_end = scan_env.bt_mem_end; + reg->bt_mem_end |= reg->capture_history; + } + +#ifdef USE_COMBINATION_EXPLOSION_CHECK + if (scan_env.backrefed_mem == 0 +#ifdef USE_SUBEXP_CALL + || scan_env.num_call == 0 +#endif + ) { + setup_comb_exp_check(root, 0, &scan_env); +#ifdef USE_SUBEXP_CALL + if (scan_env.has_recursion != 0) { + scan_env.num_comb_exp_check = 0; + } + else +#endif + if (scan_env.comb_exp_max_regnum > 0) { + int i; + for (i = 1; i <= scan_env.comb_exp_max_regnum; i++) { + if (BIT_STATUS_AT(scan_env.backrefed_mem, i) != 0) { + scan_env.num_comb_exp_check = 0; + break; + } + } + } + } + + reg->num_comb_exp_check = scan_env.num_comb_exp_check; +#endif + + clear_optimize_info(reg); +#ifndef ONIG_DONT_OPTIMIZE + r = set_optimize_info_from_tree(root, reg, &scan_env); + if (r != 0) goto err_unset; +#endif + + if (IS_NOT_NULL(scan_env.mem_nodes_dynamic)) { + xfree(scan_env.mem_nodes_dynamic); + scan_env.mem_nodes_dynamic = (Node** )NULL; + } + + r = compile_tree(root, reg); + if (r == 0) { + r = add_opcode(reg, OP_END); +#ifdef USE_SUBEXP_CALL + if (scan_env.num_call > 0) { + r = unset_addr_list_fix(&uslist, reg); + unset_addr_list_end(&uslist); + if (r) goto err; + } +#endif + + if ((reg->num_repeat != 0) || (reg->bt_mem_end != 0)) + reg->stack_pop_level = STACK_POP_LEVEL_ALL; + else { + if (reg->bt_mem_start != 0) + reg->stack_pop_level = STACK_POP_LEVEL_MEM_START; + else + reg->stack_pop_level = STACK_POP_LEVEL_FREE; + } + } +#ifdef USE_SUBEXP_CALL + else if (scan_env.num_call > 0) { + unset_addr_list_end(&uslist); + } +#endif + onig_node_free(root); + +#ifdef ONIG_DEBUG_COMPILE +#ifdef USE_NAMED_GROUP + onig_print_names(stderr, reg); +#endif + print_compiled_byte_code_list(stderr, reg); +#endif + + end: + reg->state = ONIG_STATE_NORMAL; + return r; + + err_unset: +#ifdef USE_SUBEXP_CALL + if (scan_env.num_call > 0) { + unset_addr_list_end(&uslist); + } +#endif + err: + if (IS_NOT_NULL(scan_env.error)) { + if (IS_NOT_NULL(einfo)) { + einfo->enc = scan_env.enc; + einfo->par = scan_env.error; + einfo->par_end = scan_env.error_end; + } + } + + if (IS_NOT_NULL(root)) onig_node_free(root); + if (IS_NOT_NULL(scan_env.mem_nodes_dynamic)) + xfree(scan_env.mem_nodes_dynamic); + return r; +} + +#ifdef USE_RECOMPILE_API +extern int +onig_recompile(regex_t* reg, const UChar* pattern, const UChar* pattern_end, + OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, + OnigErrorInfo* einfo) +{ + int r; + regex_t *new_reg; + + r = onig_new(&new_reg, pattern, pattern_end, option, enc, syntax, einfo); + if (r) return r; + if (ONIG_STATE(reg) == ONIG_STATE_NORMAL) { + onig_transfer(reg, new_reg); + } + else { + onig_chain_link_add(reg, new_reg); + } + return 0; +} +#endif + +static int onig_inited = 0; + +extern int +onig_alloc_init(regex_t** reg, OnigOptionType option, OnigAmbigType ambig_flag, + OnigEncoding enc, OnigSyntaxType* syntax) +{ + if (! onig_inited) + onig_init(); + + if (ONIGENC_IS_UNDEF(enc)) + return ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED; + + if ((option & (ONIG_OPTION_DONT_CAPTURE_GROUP|ONIG_OPTION_CAPTURE_GROUP)) + == (ONIG_OPTION_DONT_CAPTURE_GROUP|ONIG_OPTION_CAPTURE_GROUP)) { + return ONIGERR_INVALID_COMBINATION_OF_OPTIONS; + } + + *reg = (regex_t* )xmalloc(sizeof(regex_t)); + if (IS_NULL(*reg)) return ONIGERR_MEMORY; + (*reg)->state = ONIG_STATE_MODIFY; + + if ((option & ONIG_OPTION_NEGATE_SINGLELINE) != 0) { + option |= syntax->options; + option &= ~ONIG_OPTION_SINGLELINE; + } + else + option |= syntax->options; + + (*reg)->enc = enc; + (*reg)->options = option; + (*reg)->syntax = syntax; + (*reg)->optimize = 0; + (*reg)->exact = (UChar* )NULL; + (*reg)->int_map = (int* )NULL; + (*reg)->int_map_backward = (int* )NULL; + (*reg)->chain = (regex_t* )NULL; + + (*reg)->p = (UChar* )NULL; + (*reg)->alloc = 0; + (*reg)->used = 0; + (*reg)->name_table = (void* )NULL; + + (*reg)->ambig_flag = ambig_flag; + (*reg)->ambig_flag &= ONIGENC_SUPPORT_AMBIG_FLAG(enc); + + return 0; +} + +extern int +onig_new(regex_t** reg, const UChar* pattern, const UChar* pattern_end, + OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, + OnigErrorInfo* einfo) +{ + int r; + + if (IS_NOT_NULL(einfo)) einfo->par = (UChar* )NULL; + + r = onig_alloc_init(reg, option, ONIGENC_AMBIGUOUS_MATCH_DEFAULT, + enc, syntax); + if (r) return r; + + r = onig_compile(*reg, pattern, pattern_end, einfo); + if (r) { + onig_free(*reg); + *reg = NULL; + } + return r; +} + +extern int +onig_init(void) +{ + if (onig_inited != 0) + return 0; + + onig_inited = 1; + + THREAD_SYSTEM_INIT; + THREAD_ATOMIC_START; + + onigenc_init(); + onigenc_set_default_caseconv_table((UChar* )0); + +#ifdef ONIG_DEBUG_STATISTICS + onig_statistics_init(); +#endif + + THREAD_ATOMIC_END; + return 0; +} + + +extern int +onig_end(void) +{ + extern int onig_free_shared_cclass_table(void); + + THREAD_ATOMIC_START; + +#ifdef ONIG_DEBUG_STATISTICS + onig_print_statistics(stderr); +#endif + +#ifdef USE_SHARED_CCLASS_TABLE + onig_free_shared_cclass_table(); +#endif + +#ifdef USE_RECYCLE_NODE + onig_free_node_list(); +#endif + + onig_inited = 0; + + THREAD_ATOMIC_END; + THREAD_SYSTEM_END; + return 0; +} + + +#ifdef ONIG_DEBUG + +/* arguments type */ +#define ARG_SPECIAL -1 +#define ARG_NON 0 +#define ARG_RELADDR 1 +#define ARG_ABSADDR 2 +#define ARG_LENGTH 3 +#define ARG_MEMNUM 4 +#define ARG_OPTION 5 +#define ARG_STATE_CHECK 6 + +OnigOpInfoType OnigOpInfo[] = { + { OP_FINISH, "finish", ARG_NON }, + { OP_END, "end", ARG_NON }, + { OP_EXACT1, "exact1", ARG_SPECIAL }, + { OP_EXACT2, "exact2", ARG_SPECIAL }, + { OP_EXACT3, "exact3", ARG_SPECIAL }, + { OP_EXACT4, "exact4", ARG_SPECIAL }, + { OP_EXACT5, "exact5", ARG_SPECIAL }, + { OP_EXACTN, "exactn", ARG_SPECIAL }, + { OP_EXACTMB2N1, "exactmb2-n1", ARG_SPECIAL }, + { OP_EXACTMB2N2, "exactmb2-n2", ARG_SPECIAL }, + { OP_EXACTMB2N3, "exactmb2-n3", ARG_SPECIAL }, + { OP_EXACTMB2N, "exactmb2-n", ARG_SPECIAL }, + { OP_EXACTMB3N, "exactmb3n" , ARG_SPECIAL }, + { OP_EXACTMBN, "exactmbn", ARG_SPECIAL }, + { OP_EXACT1_IC, "exact1-ic", ARG_SPECIAL }, + { OP_EXACTN_IC, "exactn-ic", ARG_SPECIAL }, + { OP_CCLASS, "cclass", ARG_SPECIAL }, + { OP_CCLASS_MB, "cclass-mb", ARG_SPECIAL }, + { OP_CCLASS_MIX, "cclass-mix", ARG_SPECIAL }, + { OP_CCLASS_NOT, "cclass-not", ARG_SPECIAL }, + { OP_CCLASS_MB_NOT, "cclass-mb-not", ARG_SPECIAL }, + { OP_CCLASS_MIX_NOT, "cclass-mix-not", ARG_SPECIAL }, + { OP_CCLASS_NODE, "cclass-node", ARG_SPECIAL }, + { OP_ANYCHAR, "anychar", ARG_NON }, + { OP_ANYCHAR_ML, "anychar-ml", ARG_NON }, + { OP_ANYCHAR_STAR, "anychar*", ARG_NON }, + { OP_ANYCHAR_ML_STAR, "anychar-ml*", ARG_NON }, + { OP_ANYCHAR_STAR_PEEK_NEXT, "anychar*-peek-next", ARG_SPECIAL }, + { OP_ANYCHAR_ML_STAR_PEEK_NEXT, "anychar-ml*-peek-next", ARG_SPECIAL }, + { OP_WORD, "word", ARG_NON }, + { OP_NOT_WORD, "not-word", ARG_NON }, + { OP_WORD_BOUND, "word-bound", ARG_NON }, + { OP_NOT_WORD_BOUND, "not-word-bound", ARG_NON }, + { OP_WORD_BEGIN, "word-begin", ARG_NON }, + { OP_WORD_END, "word-end", ARG_NON }, + { OP_BEGIN_BUF, "begin-buf", ARG_NON }, + { OP_END_BUF, "end-buf", ARG_NON }, + { OP_BEGIN_LINE, "begin-line", ARG_NON }, + { OP_END_LINE, "end-line", ARG_NON }, + { OP_SEMI_END_BUF, "semi-end-buf", ARG_NON }, + { OP_BEGIN_POSITION, "begin-position", ARG_NON }, + { OP_BACKREF1, "backref1", ARG_NON }, + { OP_BACKREF2, "backref2", ARG_NON }, + { OP_BACKREFN, "backrefn", ARG_MEMNUM }, + { OP_BACKREFN_IC, "backrefn-ic", ARG_SPECIAL }, + { OP_BACKREF_MULTI, "backref_multi", ARG_SPECIAL }, + { OP_BACKREF_MULTI_IC, "backref_multi-ic", ARG_SPECIAL }, + { OP_BACKREF_AT_LEVEL, "backref_at_level", ARG_SPECIAL }, + { OP_MEMORY_START_PUSH, "mem-start-push", ARG_MEMNUM }, + { OP_MEMORY_START, "mem-start", ARG_MEMNUM }, + { OP_MEMORY_END_PUSH, "mem-end-push", ARG_MEMNUM }, + { OP_MEMORY_END_PUSH_REC, "mem-end-push-rec", ARG_MEMNUM }, + { OP_MEMORY_END, "mem-end", ARG_MEMNUM }, + { OP_MEMORY_END_REC, "mem-end-rec", ARG_MEMNUM }, + { OP_SET_OPTION_PUSH, "set-option-push", ARG_OPTION }, + { OP_SET_OPTION, "set-option", ARG_OPTION }, + { OP_FAIL, "fail", ARG_NON }, + { OP_JUMP, "jump", ARG_RELADDR }, + { OP_PUSH, "push", ARG_RELADDR }, + { OP_POP, "pop", ARG_NON }, + { OP_PUSH_OR_JUMP_EXACT1, "push-or-jump-e1", ARG_SPECIAL }, + { OP_PUSH_IF_PEEK_NEXT, "push-if-peek-next", ARG_SPECIAL }, + { OP_REPEAT, "repeat", ARG_SPECIAL }, + { OP_REPEAT_NG, "repeat-ng", ARG_SPECIAL }, + { OP_REPEAT_INC, "repeat-inc", ARG_MEMNUM }, + { OP_REPEAT_INC_NG, "repeat-inc-ng", ARG_MEMNUM }, + { OP_REPEAT_INC_SG, "repeat-inc-sg", ARG_MEMNUM }, + { OP_REPEAT_INC_NG_SG, "repeat-inc-ng-sg", ARG_MEMNUM }, + { OP_NULL_CHECK_START, "null-check-start", ARG_MEMNUM }, + { OP_NULL_CHECK_END, "null-check-end", ARG_MEMNUM }, + { OP_NULL_CHECK_END_MEMST,"null-check-end-memst", ARG_MEMNUM }, + { OP_NULL_CHECK_END_MEMST_PUSH,"null-check-end-memst-push", ARG_MEMNUM }, + { OP_PUSH_POS, "push-pos", ARG_NON }, + { OP_POP_POS, "pop-pos", ARG_NON }, + { OP_PUSH_POS_NOT, "push-pos-not", ARG_RELADDR }, + { OP_FAIL_POS, "fail-pos", ARG_NON }, + { OP_PUSH_STOP_BT, "push-stop-bt", ARG_NON }, + { OP_POP_STOP_BT, "pop-stop-bt", ARG_NON }, + { OP_LOOK_BEHIND, "look-behind", ARG_SPECIAL }, + { OP_PUSH_LOOK_BEHIND_NOT, "push-look-behind-not", ARG_SPECIAL }, + { OP_FAIL_LOOK_BEHIND_NOT, "fail-look-behind-not", ARG_NON }, + { OP_CALL, "call", ARG_ABSADDR }, + { OP_RETURN, "return", ARG_NON }, + { OP_STATE_CHECK_PUSH, "state-check-push", ARG_SPECIAL }, + { OP_STATE_CHECK_PUSH_OR_JUMP, "state-check-push-or-jump", ARG_SPECIAL }, + { OP_STATE_CHECK, "state-check", ARG_STATE_CHECK }, + { OP_STATE_CHECK_ANYCHAR_STAR, "state-check-anychar*", ARG_STATE_CHECK }, + { OP_STATE_CHECK_ANYCHAR_ML_STAR, + "state-check-anychar-ml*", ARG_STATE_CHECK }, + { -1, "", ARG_NON } +}; + +static char* +op2name(int opcode) +{ + int i; + + for (i = 0; OnigOpInfo[i].opcode >= 0; i++) { + if (opcode == OnigOpInfo[i].opcode) + return OnigOpInfo[i].name; + } + return ""; +} + +static int +op2arg_type(int opcode) +{ + int i; + + for (i = 0; OnigOpInfo[i].opcode >= 0; i++) { + if (opcode == OnigOpInfo[i].opcode) + return OnigOpInfo[i].arg_type; + } + return ARG_SPECIAL; +} + +static void +Indent(FILE* f, int indent) +{ + int i; + for (i = 0; i < indent; i++) putc(' ', f); +} + +static void +p_string(FILE* f, int len, UChar* s) +{ + fputs(":", f); + while (len-- > 0) { fputc(*s++, f); } +} + +static void +p_len_string(FILE* f, LengthType len, int mb_len, UChar* s) +{ + int x = len * mb_len; + + fprintf(f, ":%d:", len); + while (x-- > 0) { fputc(*s++, f); } +} + +extern void +onig_print_compiled_byte_code(FILE* f, UChar* bp, UChar** nextp, + OnigEncoding enc) +{ + int i, n, arg_type; + RelAddrType addr; + LengthType len; + MemNumType mem; + StateCheckNumType scn; + OnigCodePoint code; + UChar *q; + + fprintf(f, "[%s", op2name(*bp)); + arg_type = op2arg_type(*bp); + if (arg_type != ARG_SPECIAL) { + bp++; + switch (arg_type) { + case ARG_NON: + break; + case ARG_RELADDR: + GET_RELADDR_INC(addr, bp); + fprintf(f, ":(%d)", addr); + break; + case ARG_ABSADDR: + GET_ABSADDR_INC(addr, bp); + fprintf(f, ":(%d)", addr); + break; + case ARG_LENGTH: + GET_LENGTH_INC(len, bp); + fprintf(f, ":%d", len); + break; + case ARG_MEMNUM: + mem = *((MemNumType* )bp); + bp += SIZE_MEMNUM; + fprintf(f, ":%d", mem); + break; + case ARG_OPTION: + { + OnigOptionType option = *((OnigOptionType* )bp); + bp += SIZE_OPTION; + fprintf(f, ":%d", option); + } + break; + + case ARG_STATE_CHECK: + scn = *((StateCheckNumType* )bp); + bp += SIZE_STATE_CHECK_NUM; + fprintf(f, ":%d", scn); + break; + } + } + else { + switch (*bp++) { + case OP_EXACT1: + case OP_ANYCHAR_STAR_PEEK_NEXT: + case OP_ANYCHAR_ML_STAR_PEEK_NEXT: + p_string(f, 1, bp++); break; + case OP_EXACT2: + p_string(f, 2, bp); bp += 2; break; + case OP_EXACT3: + p_string(f, 3, bp); bp += 3; break; + case OP_EXACT4: + p_string(f, 4, bp); bp += 4; break; + case OP_EXACT5: + p_string(f, 5, bp); bp += 5; break; + case OP_EXACTN: + GET_LENGTH_INC(len, bp); + p_len_string(f, len, 1, bp); + bp += len; + break; + + case OP_EXACTMB2N1: + p_string(f, 2, bp); bp += 2; break; + case OP_EXACTMB2N2: + p_string(f, 4, bp); bp += 4; break; + case OP_EXACTMB2N3: + p_string(f, 6, bp); bp += 6; break; + case OP_EXACTMB2N: + GET_LENGTH_INC(len, bp); + p_len_string(f, len, 2, bp); + bp += len * 2; + break; + case OP_EXACTMB3N: + GET_LENGTH_INC(len, bp); + p_len_string(f, len, 3, bp); + bp += len * 3; + break; + case OP_EXACTMBN: + { + int mb_len; + + GET_LENGTH_INC(mb_len, bp); + GET_LENGTH_INC(len, bp); + fprintf(f, ":%d:%d:", mb_len, len); + n = len * mb_len; + while (n-- > 0) { fputc(*bp++, f); } + } + break; + + case OP_EXACT1_IC: + len = enc_len(enc, bp); + p_string(f, len, bp); + bp += len; + break; + case OP_EXACTN_IC: + GET_LENGTH_INC(len, bp); + p_len_string(f, len, 1, bp); + bp += len; + break; + + case OP_CCLASS: + n = bitset_on_num((BitSetRef )bp); + bp += SIZE_BITSET; + fprintf(f, ":%d", n); + break; + + case OP_CCLASS_NOT: + n = bitset_on_num((BitSetRef )bp); + bp += SIZE_BITSET; + fprintf(f, ":%d", n); + break; + + case OP_CCLASS_MB: + case OP_CCLASS_MB_NOT: + GET_LENGTH_INC(len, bp); + q = bp; +#ifndef PLATFORM_UNALIGNED_WORD_ACCESS + ALIGNMENT_RIGHT(q); +#endif + GET_CODE_POINT(code, q); + bp += len; + fprintf(f, ":%d:%d", (int )code, len); + break; + + case OP_CCLASS_MIX: + case OP_CCLASS_MIX_NOT: + n = bitset_on_num((BitSetRef )bp); + bp += SIZE_BITSET; + GET_LENGTH_INC(len, bp); + q = bp; +#ifndef PLATFORM_UNALIGNED_WORD_ACCESS + ALIGNMENT_RIGHT(q); +#endif + GET_CODE_POINT(code, q); + bp += len; + fprintf(f, ":%d:%d:%d", n, (int )code, len); + break; + + case OP_CCLASS_NODE: + { + CClassNode *cc; + + GET_POINTER_INC(cc, bp); + n = bitset_on_num(cc->bs); + fprintf(f, ":%u:%d", (unsigned int )cc, n); + } + break; + + case OP_BACKREFN_IC: + mem = *((MemNumType* )bp); + bp += SIZE_MEMNUM; + fprintf(f, ":%d", mem); + break; + + case OP_BACKREF_MULTI_IC: + case OP_BACKREF_MULTI: + fputs(" ", f); + GET_LENGTH_INC(len, bp); + for (i = 0; i < len; i++) { + GET_MEMNUM_INC(mem, bp); + if (i > 0) fputs(", ", f); + fprintf(f, "%d", mem); + } + break; + + case OP_BACKREF_AT_LEVEL: + { + OnigOptionType option; + LengthType level; + + GET_OPTION_INC(option, bp); + fprintf(f, ":%d", option); + GET_LENGTH_INC(level, bp); + fprintf(f, ":%d", level); + + fputs(" ", f); + GET_LENGTH_INC(len, bp); + for (i = 0; i < len; i++) { + GET_MEMNUM_INC(mem, bp); + if (i > 0) fputs(", ", f); + fprintf(f, "%d", mem); + } + } + break; + + case OP_REPEAT: + case OP_REPEAT_NG: + { + mem = *((MemNumType* )bp); + bp += SIZE_MEMNUM; + addr = *((RelAddrType* )bp); + bp += SIZE_RELADDR; + fprintf(f, ":%d:%d", mem, addr); + } + break; + + case OP_PUSH_OR_JUMP_EXACT1: + case OP_PUSH_IF_PEEK_NEXT: + addr = *((RelAddrType* )bp); + bp += SIZE_RELADDR; + fprintf(f, ":(%d)", addr); + p_string(f, 1, bp); + bp += 1; + break; + + case OP_LOOK_BEHIND: + GET_LENGTH_INC(len, bp); + fprintf(f, ":%d", len); + break; + + case OP_PUSH_LOOK_BEHIND_NOT: + GET_RELADDR_INC(addr, bp); + GET_LENGTH_INC(len, bp); + fprintf(f, ":%d:(%d)", len, addr); + break; + + case OP_STATE_CHECK_PUSH: + case OP_STATE_CHECK_PUSH_OR_JUMP: + scn = *((StateCheckNumType* )bp); + bp += SIZE_STATE_CHECK_NUM; + addr = *((RelAddrType* )bp); + bp += SIZE_RELADDR; + fprintf(f, ":%d:(%d)", scn, addr); + break; + + default: + fprintf(stderr, "onig_print_compiled_byte_code: undefined code %d\n", + *--bp); + } + } + fputs("]", f); + if (nextp) *nextp = bp; +} + +static void +print_compiled_byte_code_list(FILE* f, regex_t* reg) +{ + int ncode; + UChar* bp = reg->p; + UChar* end = reg->p + reg->used; + + fprintf(f, "code length: %d\n", reg->used); + + ncode = 0; + while (bp < end) { + ncode++; + if (bp > reg->p) { + if (ncode % 5 == 0) + fprintf(f, "\n"); + else + fputs(" ", f); + } + onig_print_compiled_byte_code(f, bp, &bp, reg->enc); + } + + fprintf(f, "\n"); +} + +static void +print_indent_tree(FILE* f, Node* node, int indent) +{ + int i, type; + int add = 3; + UChar* p; + + Indent(f, indent); + if (IS_NULL(node)) { + fprintf(f, "ERROR: null node!!!\n"); + exit (0); + } + + type = NTYPE(node); + switch (type) { + case N_LIST: + case N_ALT: + if (NTYPE(node) == N_LIST) + fprintf(f, "<list:%x>\n", (int )node); + else + fprintf(f, "<alt:%x>\n", (int )node); + + print_indent_tree(f, NCONS(node).left, indent + add); + while (IS_NOT_NULL(node = NCONS(node).right)) { + if (NTYPE(node) != type) { + fprintf(f, "ERROR: list/alt right is not a cons. %d\n", NTYPE(node)); + exit(0); + } + print_indent_tree(f, NCONS(node).left, indent + add); + } + break; + + case N_STRING: + fprintf(f, "<string%s:%x>", + (NSTRING_IS_RAW(node) ? "-raw" : ""), (int )node); + for (p = NSTRING(node).s; p < NSTRING(node).end; p++) { + if (*p >= 0x20 && *p < 0x7f) + fputc(*p, f); + else { + fprintf(f, " 0x%02x", *p); + } + } + break; + + case N_CCLASS: + fprintf(f, "<cclass:%x>", (int )node); + if (IS_CCLASS_NOT(&NCCLASS(node))) fputs(" not", f); + if (NCCLASS(node).mbuf) { + BBuf* bbuf = NCCLASS(node).mbuf; + for (i = 0; i < bbuf->used; i++) { + if (i > 0) fprintf(f, ","); + fprintf(f, "%0x", bbuf->p[i]); + } + } + break; + + case N_CTYPE: + fprintf(f, "<ctype:%x> ", (int )node); + switch (NCTYPE(node).type) { + case CTYPE_WORD: fputs("word", f); break; + case CTYPE_NOT_WORD: fputs("not word", f); break; + default: + fprintf(f, "ERROR: undefined ctype.\n"); + exit(0); + } + break; + + case N_ANYCHAR: + fprintf(f, "<anychar:%x>", (int )node); + break; + + case N_ANCHOR: + fprintf(f, "<anchor:%x> ", (int )node); + switch (NANCHOR(node).type) { + case ANCHOR_BEGIN_BUF: fputs("begin buf", f); break; + case ANCHOR_END_BUF: fputs("end buf", f); break; + case ANCHOR_BEGIN_LINE: fputs("begin line", f); break; + case ANCHOR_END_LINE: fputs("end line", f); break; + case ANCHOR_SEMI_END_BUF: fputs("semi end buf", f); break; + case ANCHOR_BEGIN_POSITION: fputs("begin position", f); break; + + case ANCHOR_WORD_BOUND: fputs("word bound", f); break; + case ANCHOR_NOT_WORD_BOUND: fputs("not word bound", f); break; +#ifdef USE_WORD_BEGIN_END + case ANCHOR_WORD_BEGIN: fputs("word begin", f); break; + case ANCHOR_WORD_END: fputs("word end", f); break; +#endif + case ANCHOR_PREC_READ: fputs("prec read", f); break; + case ANCHOR_PREC_READ_NOT: fputs("prec read not", f); break; + case ANCHOR_LOOK_BEHIND: fputs("look_behind", f); break; + case ANCHOR_LOOK_BEHIND_NOT: fputs("look_behind_not",f); break; + + default: + fprintf(f, "ERROR: undefined anchor type.\n"); + break; + } + break; + + case N_BACKREF: + { + int* p; + BackrefNode* br = &(NBACKREF(node)); + p = BACKREFS_P(br); + fprintf(f, "<backref:%x>", (int )node); + for (i = 0; i < br->back_num; i++) { + if (i > 0) fputs(", ", f); + fprintf(f, "%d", p[i]); + } + } + break; + +#ifdef USE_SUBEXP_CALL + case N_CALL: + { + CallNode* cn = &(NCALL(node)); + fprintf(f, "<call:%x>", (int )node); + p_string(f, cn->name_end - cn->name, cn->name); + } + break; +#endif + + case N_QUANTIFIER: + fprintf(f, "<quantifier:%x>{%d,%d}%s\n", (int )node, + NQUANTIFIER(node).lower, NQUANTIFIER(node).upper, + (NQUANTIFIER(node).greedy ? "" : "?")); + print_indent_tree(f, NQUANTIFIER(node).target, indent + add); + break; + + case N_EFFECT: + fprintf(f, "<effect:%x> ", (int )node); + switch (NEFFECT(node).type) { + case EFFECT_OPTION: + fprintf(f, "option:%d\n", NEFFECT(node).option); + print_indent_tree(f, NEFFECT(node).target, indent + add); + break; + case EFFECT_MEMORY: + fprintf(f, "memory:%d", NEFFECT(node).regnum); + break; + case EFFECT_STOP_BACKTRACK: + fprintf(f, "stop-bt"); + break; + + default: + break; + } + fprintf(f, "\n"); + print_indent_tree(f, NEFFECT(node).target, indent + add); + break; + + default: + fprintf(f, "print_indent_tree: undefined node type %d\n", NTYPE(node)); + break; + } + + if (type != N_LIST && type != N_ALT && type != N_QUANTIFIER && + type != N_EFFECT) + fprintf(f, "\n"); + fflush(f); +} +#endif /* ONIG_DEBUG */ + +#ifdef ONIG_DEBUG_PARSE_TREE +static void +print_tree(FILE* f, Node* node) +{ + print_indent_tree(f, node, 0); +} +#endif diff --git a/ext/mbstring/oniguruma/regenc.c b/ext/mbstring/oniguruma/regenc.c new file mode 100644 index 0000000..958917e --- /dev/null +++ b/ext/mbstring/oniguruma/regenc.c @@ -0,0 +1,1028 @@ +/********************************************************************** + regenc.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regint.h" + +OnigEncoding OnigEncDefaultCharEncoding = ONIG_ENCODING_INIT_DEFAULT; + +extern int +onigenc_init(void) +{ + return 0; +} + +extern OnigEncoding +onigenc_get_default_encoding(void) +{ + return OnigEncDefaultCharEncoding; +} + +extern int +onigenc_set_default_encoding(OnigEncoding enc) +{ + OnigEncDefaultCharEncoding = enc; + return 0; +} + +extern UChar* +onigenc_get_right_adjust_char_head(OnigEncoding enc, const UChar* start, const UChar* s) +{ + UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s); + if (p < s) { + p += enc_len(enc, p); + } + return p; +} + +extern UChar* +onigenc_get_right_adjust_char_head_with_prev(OnigEncoding enc, + const UChar* start, const UChar* s, const UChar** prev) +{ + UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s); + + if (p < s) { + if (prev) *prev = (const UChar* )p; + p += enc_len(enc, p); + } + else { + if (prev) *prev = (const UChar* )NULL; /* Sorry */ + } + return p; +} + +extern UChar* +onigenc_get_prev_char_head(OnigEncoding enc, const UChar* start, const UChar* s) +{ + if (s <= start) + return (UChar* )NULL; + + return ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s - 1); +} + +extern UChar* +onigenc_step_back(OnigEncoding enc, const UChar* start, const UChar* s, int n) +{ + while (ONIG_IS_NOT_NULL(s) && n-- > 0) { + if (s <= start) + return (UChar* )NULL; + + s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s - 1); + } + return (UChar* )s; +} + +extern UChar* +onigenc_step(OnigEncoding enc, const UChar* p, const UChar* end, int n) +{ + UChar* q = (UChar* )p; + while (n-- > 0) { + q += ONIGENC_MBC_ENC_LEN(enc, q); + } + return (q <= end ? q : NULL); +} + +extern int +onigenc_strlen(OnigEncoding enc, const UChar* p, const UChar* end) +{ + int n = 0; + UChar* q = (UChar* )p; + + while (q < end) { + q += ONIGENC_MBC_ENC_LEN(enc, q); + n++; + } + return n; +} + +extern int +onigenc_strlen_null(OnigEncoding enc, const UChar* s) +{ + int n = 0; + UChar* p = (UChar* )s; + + while (1) { + if (*p == '\0') { + UChar* q; + int len = ONIGENC_MBC_MINLEN(enc); + + if (len == 1) return n; + q = p + 1; + while (len > 1) { + if (*q != '\0') break; + q++; + len--; + } + if (len == 1) return n; + } + p += ONIGENC_MBC_ENC_LEN(enc, p); + n++; + } +} + +extern int +onigenc_str_bytelen_null(OnigEncoding enc, const UChar* s) +{ + UChar* start = (UChar* )s; + UChar* p = (UChar* )s; + + while (1) { + if (*p == '\0') { + UChar* q; + int len = ONIGENC_MBC_MINLEN(enc); + + if (len == 1) return (int )(p - start); + q = p + 1; + while (len > 1) { + if (*q != '\0') break; + q++; + len--; + } + if (len == 1) return (int )(p - start); + } + p += ONIGENC_MBC_ENC_LEN(enc, p); + } +} + +#ifndef ONIG_RUBY_M17N + +#ifndef NOT_RUBY + +#define USE_APPLICATION_TO_LOWER_CASE_TABLE + +const unsigned short OnigEnc_Unicode_ISO_8859_1_CtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x228c, 0x2289, 0x2288, 0x2288, 0x2288, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0288, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, 0x0008, + 0x0284, 0x01a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x10e2, 0x01a0, 0x00a0, 0x00a8, 0x00a0, 0x00a0, + 0x00a0, 0x00a0, 0x10a0, 0x10a0, 0x00a0, 0x10e2, 0x00a0, 0x01a0, + 0x00a0, 0x10a0, 0x10e2, 0x01a0, 0x10a0, 0x10a0, 0x10a0, 0x01a0, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x00a0, + 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x14a2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x00a0, + 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2, 0x10e2 +}; +#endif + +const UChar* OnigEncAsciiToLowerCaseTable = (const UChar* )0; + +#ifndef USE_APPLICATION_TO_LOWER_CASE_TABLE +static const UChar BuiltInAsciiToLowerCaseTable[] = { + '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', + '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', + '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', + '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', + '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', + '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', + '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', + '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', + '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', + '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', + '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', + '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', + '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', + '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', + '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', + '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257', + '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', + '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', + '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307', + '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317', + '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327', + '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377', +}; +#endif /* not USE_APPLICATION_TO_LOWER_CASE_TABLE */ + +#ifdef USE_UPPER_CASE_TABLE +const UChar OnigEncAsciiToUpperCaseTable[256] = { + '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', + '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', + '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', + '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', + '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', + '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', + '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', + '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', + '\100', '\101', '\102', '\103', '\104', '\105', '\106', '\107', + '\110', '\111', '\112', '\113', '\114', '\115', '\116', '\117', + '\120', '\121', '\122', '\123', '\124', '\125', '\126', '\127', + '\130', '\131', '\132', '\133', '\134', '\135', '\136', '\137', + '\140', '\101', '\102', '\103', '\104', '\105', '\106', '\107', + '\110', '\111', '\112', '\113', '\114', '\115', '\116', '\117', + '\120', '\121', '\122', '\123', '\124', '\125', '\126', '\127', + '\130', '\131', '\132', '\173', '\174', '\175', '\176', '\177', + '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', + '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', + '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', + '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', + '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', + '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257', + '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', + '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', + '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307', + '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317', + '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327', + '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377', +}; +#endif + +const unsigned short OnigEncAsciiCtypeTable[256] = { + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x220c, 0x2209, 0x2208, 0x2208, 0x2208, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, 0x2008, + 0x2284, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, 0x38b0, + 0x38b0, 0x38b0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x21a0, + 0x21a0, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x3ca2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, 0x34a2, + 0x34a2, 0x34a2, 0x34a2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x31a0, + 0x21a0, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x38e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, 0x30e2, + 0x30e2, 0x30e2, 0x30e2, 0x21a0, 0x21a0, 0x21a0, 0x21a0, 0x2008, + + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +const UChar OnigEncISO_8859_1_ToLowerCaseTable[256] = { + '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', + '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', + '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', + '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', + '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', + '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', + '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', + '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', + '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137', + '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147', + '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157', + '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167', + '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177', + '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', + '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', + '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', + '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', + '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', + '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257', + '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', + '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\327', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\337', + '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347', + '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357', + '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367', + '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377' +}; + +#ifdef USE_UPPER_CASE_TABLE +const UChar OnigEncISO_8859_1_ToUpperCaseTable[256] = { + '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007', + '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017', + '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027', + '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037', + '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047', + '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057', + '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067', + '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077', + '\100', '\101', '\102', '\103', '\104', '\105', '\106', '\107', + '\110', '\111', '\112', '\113', '\114', '\115', '\116', '\117', + '\120', '\121', '\122', '\123', '\124', '\125', '\126', '\127', + '\130', '\131', '\132', '\133', '\134', '\135', '\136', '\137', + '\140', '\101', '\102', '\103', '\104', '\105', '\106', '\107', + '\110', '\111', '\112', '\113', '\114', '\115', '\116', '\117', + '\120', '\121', '\122', '\123', '\124', '\125', '\126', '\127', + '\130', '\131', '\132', '\173', '\174', '\175', '\176', '\177', + '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207', + '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217', + '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227', + '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237', + '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247', + '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257', + '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267', + '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277', + '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307', + '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317', + '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\327', + '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\337', + '\300', '\301', '\302', '\303', '\304', '\305', '\306', '\307', + '\310', '\311', '\312', '\313', '\314', '\315', '\316', '\317', + '\320', '\321', '\322', '\323', '\324', '\325', '\326', '\367', + '\330', '\331', '\332', '\333', '\334', '\335', '\336', '\377', +}; +#endif + +extern void +onigenc_set_default_caseconv_table(const UChar* table) +{ + if (table == (const UChar* )0) { +#ifndef USE_APPLICATION_TO_LOWER_CASE_TABLE + table = BuiltInAsciiToLowerCaseTable; +#else + return ; +#endif + } + + if (table != OnigEncAsciiToLowerCaseTable) { + OnigEncAsciiToLowerCaseTable = table; + } +} + +extern UChar* +onigenc_get_left_adjust_char_head(OnigEncoding enc, const UChar* start, const UChar* s) +{ + return ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s); +} + +const OnigPairAmbigCodes OnigAsciiPairAmbigCodes[] = { + { 0x41, 0x61 }, + { 0x42, 0x62 }, + { 0x43, 0x63 }, + { 0x44, 0x64 }, + { 0x45, 0x65 }, + { 0x46, 0x66 }, + { 0x47, 0x67 }, + { 0x48, 0x68 }, + { 0x49, 0x69 }, + { 0x4a, 0x6a }, + { 0x4b, 0x6b }, + { 0x4c, 0x6c }, + { 0x4d, 0x6d }, + { 0x4e, 0x6e }, + { 0x4f, 0x6f }, + { 0x50, 0x70 }, + { 0x51, 0x71 }, + { 0x52, 0x72 }, + { 0x53, 0x73 }, + { 0x54, 0x74 }, + { 0x55, 0x75 }, + { 0x56, 0x76 }, + { 0x57, 0x77 }, + { 0x58, 0x78 }, + { 0x59, 0x79 }, + { 0x5a, 0x7a }, + + { 0x61, 0x41 }, + { 0x62, 0x42 }, + { 0x63, 0x43 }, + { 0x64, 0x44 }, + { 0x65, 0x45 }, + { 0x66, 0x46 }, + { 0x67, 0x47 }, + { 0x68, 0x48 }, + { 0x69, 0x49 }, + { 0x6a, 0x4a }, + { 0x6b, 0x4b }, + { 0x6c, 0x4c }, + { 0x6d, 0x4d }, + { 0x6e, 0x4e }, + { 0x6f, 0x4f }, + { 0x70, 0x50 }, + { 0x71, 0x51 }, + { 0x72, 0x52 }, + { 0x73, 0x53 }, + { 0x74, 0x54 }, + { 0x75, 0x55 }, + { 0x76, 0x56 }, + { 0x77, 0x57 }, + { 0x78, 0x58 }, + { 0x79, 0x59 }, + { 0x7a, 0x5a } +}; + +extern int +onigenc_ascii_get_all_pair_ambig_codes(OnigAmbigType flag, + const OnigPairAmbigCodes** ccs) +{ + if (flag == ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) { + *ccs = OnigAsciiPairAmbigCodes; + return (sizeof(OnigAsciiPairAmbigCodes) / sizeof(OnigPairAmbigCodes)); + } + else { + return 0; + } +} + +extern int +onigenc_nothing_get_all_comp_ambig_codes(OnigAmbigType flag, + const OnigCompAmbigCodes** ccs) +{ + return 0; +} + +extern int +onigenc_iso_8859_1_get_all_pair_ambig_codes(OnigAmbigType flag, + const OnigPairAmbigCodes** ccs) +{ + static const OnigPairAmbigCodes cc[] = { + { 0xc0, 0xe0 }, + { 0xc1, 0xe1 }, + { 0xc2, 0xe2 }, + { 0xc3, 0xe3 }, + { 0xc4, 0xe4 }, + { 0xc5, 0xe5 }, + { 0xc6, 0xe6 }, + { 0xc7, 0xe7 }, + { 0xc8, 0xe8 }, + { 0xc9, 0xe9 }, + { 0xca, 0xea }, + { 0xcb, 0xeb }, + { 0xcc, 0xec }, + { 0xcd, 0xed }, + { 0xce, 0xee }, + { 0xcf, 0xef }, + + { 0xd0, 0xf0 }, + { 0xd1, 0xf1 }, + { 0xd2, 0xf2 }, + { 0xd3, 0xf3 }, + { 0xd4, 0xf4 }, + { 0xd5, 0xf5 }, + { 0xd6, 0xf6 }, + { 0xd8, 0xf8 }, + { 0xd9, 0xf9 }, + { 0xda, 0xfa }, + { 0xdb, 0xfb }, + { 0xdc, 0xfc }, + { 0xdd, 0xfd }, + { 0xde, 0xfe }, + + { 0xe0, 0xc0 }, + { 0xe1, 0xc1 }, + { 0xe2, 0xc2 }, + { 0xe3, 0xc3 }, + { 0xe4, 0xc4 }, + { 0xe5, 0xc5 }, + { 0xe6, 0xc6 }, + { 0xe7, 0xc7 }, + { 0xe8, 0xc8 }, + { 0xe9, 0xc9 }, + { 0xea, 0xca }, + { 0xeb, 0xcb }, + { 0xec, 0xcc }, + { 0xed, 0xcd }, + { 0xee, 0xce }, + { 0xef, 0xcf }, + + { 0xf0, 0xd0 }, + { 0xf1, 0xd1 }, + { 0xf2, 0xd2 }, + { 0xf3, 0xd3 }, + { 0xf4, 0xd4 }, + { 0xf5, 0xd5 }, + { 0xf6, 0xd6 }, + { 0xf8, 0xd8 }, + { 0xf9, 0xd9 }, + { 0xfa, 0xda }, + { 0xfb, 0xdb }, + { 0xfc, 0xdc }, + { 0xfd, 0xdd }, + { 0xfe, 0xde } + }; + + if (flag == ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) { + *ccs = OnigAsciiPairAmbigCodes; + return (sizeof(OnigAsciiPairAmbigCodes) / sizeof(OnigPairAmbigCodes)); + } + else if (flag == ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) { + *ccs = cc; + return sizeof(cc) / sizeof(OnigPairAmbigCodes); + } + else + return 0; +} + +extern int +onigenc_ess_tsett_get_all_comp_ambig_codes(OnigAmbigType flag, + const OnigCompAmbigCodes** ccs) +{ + static const OnigCompAmbigCodes folds[] = { + { 2, 0xdf, {{ 2, { 0x53, 0x53 } }, { 2, { 0x73, 0x73} } } } + }; + + if (flag == ONIGENC_AMBIGUOUS_MATCH_NONASCII_CASE) { + *ccs = folds; + return sizeof(folds) / sizeof(OnigCompAmbigCodes); + } + else + return 0; +} + +extern int +onigenc_not_support_get_ctype_code_range(int ctype, + const OnigCodePoint* sbr[], const OnigCodePoint* mbr[]) +{ + return ONIG_NO_SUPPORT_CONFIG; +} + +extern int +onigenc_is_mbc_newline_0x0a(const UChar* p, const UChar* end) +{ + if (p < end) { + if (*p == 0x0a) return 1; + } + return 0; +} + +/* for single byte encodings */ +extern int +onigenc_ascii_mbc_to_normalize(OnigAmbigType flag, const UChar** p, const UChar*end, + UChar* lower) +{ + if ((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0) { + *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(**p); + } + else { + *lower = **p; + } + + (*p)++; + return 1; /* return byte length of converted char to lower */ +} + +extern int +onigenc_ascii_is_mbc_ambiguous(OnigAmbigType flag, + const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + (*pp)++; + if ((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0) { + return ONIGENC_IS_ASCII_CODE_CASE_AMBIG(*p); + } + else { + return FALSE; + } +} + +extern int +onigenc_single_byte_mbc_enc_len(const UChar* p) +{ + return 1; +} + +extern OnigCodePoint +onigenc_single_byte_mbc_to_code(const UChar* p, const UChar* end) +{ + return (OnigCodePoint )(*p); +} + +extern int +onigenc_single_byte_code_to_mbclen(OnigCodePoint code) +{ + return 1; +} + +extern int +onigenc_single_byte_code_to_mbc_first(OnigCodePoint code) +{ + return (code & 0xff); +} + +extern int +onigenc_single_byte_code_to_mbc(OnigCodePoint code, UChar *buf) +{ + *buf = (UChar )(code & 0xff); + return 1; +} + +extern UChar* +onigenc_single_byte_left_adjust_char_head(const UChar* start, const UChar* s) +{ + return (UChar* )s; +} + +extern int +onigenc_always_true_is_allowed_reverse_match(const UChar* s, const UChar* end) +{ + return TRUE; +} + +extern int +onigenc_always_false_is_allowed_reverse_match(const UChar* s, const UChar* end) +{ + return FALSE; +} + +extern OnigCodePoint +onigenc_mbn_mbc_to_code(OnigEncoding enc, const UChar* p, const UChar* end) +{ + int c, i, len; + OnigCodePoint n; + + len = enc_len(enc, p); + n = (OnigCodePoint )(*p++); + if (len == 1) return n; + + for (i = 1; i < len; i++) { + if (p >= end) break; + c = *p++; + n <<= 8; n += c; + } + return n; +} + +extern int +onigenc_mbn_mbc_to_normalize(OnigEncoding enc, OnigAmbigType flag, + const UChar** pp, const UChar* end, UChar* lower) +{ + int len; + const UChar *p = *pp; + + if (ONIGENC_IS_MBC_ASCII(p)) { + if ((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0) { + *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p); + } + else { + *lower = *p; + } + (*pp)++; + return 1; + } + else { + len = enc_len(enc, p); + if (lower != p) { + int i; + for (i = 0; i < len; i++) { + *lower++ = *p++; + } + } + (*pp) += len; + return len; /* return byte length of converted to lower char */ + } +} + +extern int +onigenc_mbn_is_mbc_ambiguous(OnigEncoding enc, OnigAmbigType flag, + const UChar** pp, const UChar* end) +{ + const UChar* p = *pp; + + if (ONIGENC_IS_MBC_ASCII(p)) { + (*pp)++; + if ((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0) { + return ONIGENC_IS_ASCII_CODE_CASE_AMBIG(*p); + } + else { + return FALSE; + } + } + + (*pp) += enc_len(enc, p); + return FALSE; +} + +extern int +onigenc_mb2_code_to_mbclen(OnigCodePoint code) +{ + if ((code & 0xff00) != 0) return 2; + else return 1; +} + +extern int +onigenc_mb4_code_to_mbclen(OnigCodePoint code) +{ + if ((code & 0xff000000) != 0) return 4; + else if ((code & 0xff0000) != 0) return 3; + else if ((code & 0xff00) != 0) return 2; + else return 1; +} + +extern int +onigenc_mb2_code_to_mbc_first(OnigCodePoint code) +{ + int first; + + if ((code & 0xff00) != 0) { + first = (code >> 8) & 0xff; + } + else { + return (int )code; + } + return first; +} + +extern int +onigenc_mb4_code_to_mbc_first(OnigCodePoint code) +{ + int first; + + if ((code & 0xff000000) != 0) { + first = (code >> 24) & 0xff; + } + else if ((code & 0xff0000) != 0) { + first = (code >> 16) & 0xff; + } + else if ((code & 0xff00) != 0) { + first = (code >> 8) & 0xff; + } + else { + return (int )code; + } + return first; +} + +extern int +onigenc_mb2_code_to_mbc(OnigEncoding enc, OnigCodePoint code, UChar *buf) +{ + UChar *p = buf; + + if ((code & 0xff00) != 0) { + *p++ = (UChar )((code >> 8) & 0xff); + } + *p++ = (UChar )(code & 0xff); + +#if 1 + if (enc_len(enc, buf) != (p - buf)) + return ONIGENCERR_INVALID_WIDE_CHAR_VALUE; +#endif + return p - buf; +} + +extern int +onigenc_mb4_code_to_mbc(OnigEncoding enc, OnigCodePoint code, UChar *buf) +{ + UChar *p = buf; + + if ((code & 0xff000000) != 0) { + *p++ = (UChar )((code >> 24) & 0xff); + } + if ((code & 0xff0000) != 0 || p != buf) { + *p++ = (UChar )((code >> 16) & 0xff); + } + if ((code & 0xff00) != 0 || p != buf) { + *p++ = (UChar )((code >> 8) & 0xff); + } + *p++ = (UChar )(code & 0xff); + +#if 1 + if (enc_len(enc, buf) != (p - buf)) + return ONIGENCERR_INVALID_WIDE_CHAR_VALUE; +#endif + return p - buf; +} + +extern int +onigenc_mb2_is_code_ctype(OnigEncoding enc, OnigCodePoint code, + unsigned int ctype) +{ + if (code < 128) + return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype); + else { + if ((ctype & (ONIGENC_CTYPE_WORD | + ONIGENC_CTYPE_GRAPH | ONIGENC_CTYPE_PRINT)) != 0) { + return (ONIGENC_CODE_TO_MBCLEN(enc, code) > 1 ? TRUE : FALSE); + } + } + + return FALSE; +} + +extern int +onigenc_mb4_is_code_ctype(OnigEncoding enc, OnigCodePoint code, + unsigned int ctype) +{ + if (code < 128) + return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype); + else { + if ((ctype & (ONIGENC_CTYPE_WORD | + ONIGENC_CTYPE_GRAPH | ONIGENC_CTYPE_PRINT)) != 0) { + return (ONIGENC_CODE_TO_MBCLEN(enc, code) > 1 ? TRUE : FALSE); + } + } + + return FALSE; +} + +extern int +onigenc_with_ascii_strncmp(OnigEncoding enc, const UChar* p, const UChar* end, + const UChar* sascii /* ascii */, int n) +{ + int x, c; + + while (n-- > 0) { + if (p >= end) return (int )(*sascii); + + c = (int )ONIGENC_MBC_TO_CODE(enc, p, end); + x = *sascii - c; + if (x) return x; + + sascii++; + p += enc_len(enc, p); + } + return 0; +} + +#else /* ONIG_RUBY_M17N */ + +extern int +onigenc_is_code_ctype(OnigEncoding enc, OnigCodePoint code, int ctype) +{ + switch (ctype) { + case ONIGENC_CTYPE_NEWLINE: + if (code == 0x0a) return 1; + break; + + case ONIGENC_CTYPE_ALPHA: + return m17n_isalpha(enc, code); + break; + case ONIGENC_CTYPE_BLANK: + return ONIGENC_IS_CODE_BLANK(enc, (int )(code)); + break; + case ONIGENC_CTYPE_CNTRL: + return m17n_iscntrl(enc, code); + break; + case ONIGENC_CTYPE_DIGIT: + return m17n_isdigit(enc, code); + break; + case ONIGENC_CTYPE_GRAPH: + return ONIGENC_IS_CODE_GRAPH(enc, (int )(code)); + break; + case ONIGENC_CTYPE_LOWER: + return m17n_islower(enc, code); + break; + case ONIGENC_CTYPE_PRINT: + return m17n_isprint(enc, code); + break; + case ONIGENC_CTYPE_PUNCT: + return m17n_ispunct(enc, code); + break; + case ONIGENC_CTYPE_SPACE: + return m17n_isspace(enc, code); + break; + case ONIGENC_CTYPE_UPPER: + return m17n_isupper(enc, code); + break; + case ONIGENC_CTYPE_XDIGIT: + return m17n_isxdigit(enc, code); + break; + case ONIGENC_CTYPE_WORD: + return m17n_iswchar(enc, code); + break; + case ONIGENC_CTYPE_ASCII: + return (code < 128 ? TRUE : FALSE); + break; + case ONIGENC_CTYPE_ALNUM: + return m17n_isalnum(enc, code); + break; + default: + break; + } + + return 0; +} + +extern int +onigenc_code_to_mbc(OnigEncoding enc, OnigCodePoint code, UChar *buf) +{ + int c, len; + + m17n_mbcput(enc, code, buf); + c = m17n_firstbyte(enc, code); + len = enc_len(enc, c); + return len; +} + +extern int +onigenc_mbc_to_lower(OnigEncoding enc, UChar* p, UChar* buf) +{ + unsigned int c, low; + + c = m17n_codepoint(enc, p, p + enc_len(enc, *p)); + low = m17n_tolower(enc, c); + m17n_mbcput(enc, low, buf); + + return m17n_codelen(enc, low); +} + +extern int +onigenc_is_mbc_ambiguous(OnigEncoding enc, OnigAmbigType flag, + UChar** pp, UChar* end) +{ + int len; + unsigned int c; + UChar* p = *pp; + + len = enc_len(enc, *p); + (*pp) += len; + c = m17n_codepoint(enc, p, p + len); + + if ((flag & ONIGENC_AMBIGUOUS_MATCH_ASCII_CASE) != 0) { + if (m17n_isupper(enc, c) || m17n_islower(enc, c)) + return TRUE; + } + + return FALSE; +} + +extern UChar* +onigenc_get_left_adjust_char_head(OnigEncoding enc, UChar* start, UChar* s) +{ + UChar *p; + int len; + + if (s <= start) return s; + p = s; + + while (!m17n_islead(enc, *p) && p > start) p--; + while (p + (len = enc_len(enc, *p)) < s) { + p += len; + } + if (p + len == s) return s; + return p; +} + +extern int +onigenc_is_allowed_reverse_match(OnigEncoding enc, + const UChar* s, const UChar* end) +{ + return ONIGENC_IS_SINGLEBYTE(enc); +} + +extern void +onigenc_set_default_caseconv_table(UChar* table) { } + +#endif /* ONIG_RUBY_M17N */ diff --git a/ext/mbstring/oniguruma/regenc.h b/ext/mbstring/oniguruma/regenc.h new file mode 100644 index 0000000..58ee3e7 --- /dev/null +++ b/ext/mbstring/oniguruma/regenc.h @@ -0,0 +1,147 @@ +#ifndef REGENC_H +#define REGENC_H +/********************************************************************** + regenc.h - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 RUBY_PLATFORM +#include "config.h" +#endif +#include "oniguruma.h" + +#ifndef NULL +#define NULL ((void* )0) +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +/* error codes */ +#define ONIGENCERR_MEMORY -5 +#define ONIGENCERR_TYPE_BUG -6 +#define ONIGENCERR_INVALID_WIDE_CHAR_VALUE -400 +#define ONIGENCERR_TOO_BIG_WIDE_CHAR_VALUE -401 + +#define ONIG_IS_NULL(p) (((void*)(p)) == (void*)0) +#define ONIG_IS_NOT_NULL(p) (((void*)(p)) != (void*)0) +#define ONIG_CHECK_NULL_RETURN(p) if (ONIG_IS_NULL(p)) return NULL +#define ONIG_CHECK_NULL_RETURN_VAL(p,val) if (ONIG_IS_NULL(p)) return (val) + + +#ifdef ONIG_RUBY_M17N + +#define ONIG_ENCODING_INIT_DEFAULT ONIG_ENCODING_UNDEF + +#else /* ONIG_RUBY_M17N */ + +#define USE_UNICODE_FULL_RANGE_CTYPE +/* following must not use with USE_CRNL_AS_LINE_TERMINATOR */ +/* #define USE_UNICODE_ALL_LINE_TERMINATORS */ /* see Unicode.org UTF#18 */ + +#define ONIG_ENCODING_INIT_DEFAULT ONIG_ENCODING_ASCII + +/* for encoding system implementation (internal) */ +ONIG_EXTERN int onigenc_ascii_get_all_pair_ambig_codes P_((OnigAmbigType flag, const OnigPairAmbigCodes** acs)); +ONIG_EXTERN int onigenc_nothing_get_all_comp_ambig_codes P_((OnigAmbigType flag, const OnigCompAmbigCodes** acs)); +ONIG_EXTERN int onigenc_iso_8859_1_get_all_pair_ambig_codes P_((OnigAmbigType flag, const OnigPairAmbigCodes** acs)); +ONIG_EXTERN int onigenc_ess_tsett_get_all_comp_ambig_codes P_((OnigAmbigType flag, const OnigCompAmbigCodes** acs)); +ONIG_EXTERN int onigenc_not_support_get_ctype_code_range P_((int ctype, const OnigCodePoint* sbr[], const OnigCodePoint* mbr[])); +ONIG_EXTERN int onigenc_is_mbc_newline_0x0a P_((const UChar* p, const UChar* end)); + +/* methods for single byte encoding */ +ONIG_EXTERN int onigenc_ascii_mbc_to_normalize P_((OnigAmbigType flag, const UChar** p, const UChar* end, UChar* lower)); +ONIG_EXTERN int onigenc_ascii_is_mbc_ambiguous P_((OnigAmbigType flag, const UChar** p, const UChar* end)); +ONIG_EXTERN int onigenc_single_byte_mbc_enc_len P_((const UChar* p)); +ONIG_EXTERN OnigCodePoint onigenc_single_byte_mbc_to_code P_((const UChar* p, const UChar* end)); +ONIG_EXTERN int onigenc_single_byte_code_to_mbclen P_((OnigCodePoint code)); +ONIG_EXTERN int onigenc_single_byte_code_to_mbc_first P_((OnigCodePoint code)); +ONIG_EXTERN int onigenc_single_byte_code_to_mbc P_((OnigCodePoint code, UChar *buf)); +ONIG_EXTERN UChar* onigenc_single_byte_left_adjust_char_head P_((const UChar* start, const UChar* s)); +ONIG_EXTERN int onigenc_always_true_is_allowed_reverse_match P_((const UChar* s, const UChar* end)); +ONIG_EXTERN int onigenc_always_false_is_allowed_reverse_match P_((const UChar* s, const UChar* end)); + +/* methods for multi byte encoding */ +ONIG_EXTERN OnigCodePoint onigenc_mbn_mbc_to_code P_((OnigEncoding enc, const UChar* p, const UChar* end)); +ONIG_EXTERN int onigenc_mbn_mbc_to_normalize P_((OnigEncoding enc, OnigAmbigType flag, const UChar** p, const UChar* end, UChar* lower)); +ONIG_EXTERN int onigenc_mbn_is_mbc_ambiguous P_((OnigEncoding enc, OnigAmbigType flag, const UChar** p, const UChar* end)); +ONIG_EXTERN int onigenc_mb2_code_to_mbclen P_((OnigCodePoint code)); +ONIG_EXTERN int onigenc_mb2_code_to_mbc_first P_((OnigCodePoint code)); +ONIG_EXTERN int onigenc_mb2_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, UChar *buf)); +ONIG_EXTERN int onigenc_mb2_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, unsigned int ctype)); +ONIG_EXTERN int onigenc_mb4_code_to_mbclen P_((OnigCodePoint code)); +ONIG_EXTERN int onigenc_mb4_code_to_mbc_first P_((OnigCodePoint code)); +ONIG_EXTERN int onigenc_mb4_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, UChar *buf)); +ONIG_EXTERN int onigenc_mb4_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, unsigned int ctype)); + +ONIG_EXTERN int onigenc_get_all_fold_match_code_ss_0xdf P_((OnigCodePoint** codes)); + +/* in enc/unicode.c */ +ONIG_EXTERN int onigenc_unicode_is_code_ctype P_((OnigCodePoint code, unsigned int ctype)); +ONIG_EXTERN int onigenc_unicode_get_ctype_code_range P_((int ctype, const OnigCodePoint* sbr[], const OnigCodePoint* mbr[])); + + +#define ONIGENC_ISO_8859_1_TO_LOWER_CASE(c) \ + OnigEncISO_8859_1_ToLowerCaseTable[c] +#define ONIGENC_ISO_8859_1_TO_UPPER_CASE(c) \ + OnigEncISO_8859_1_ToUpperCaseTable[c] +#define ONIGENC_IS_UNICODE_ISO_8859_1_CTYPE(code,ctype) \ + ((OnigEnc_Unicode_ISO_8859_1_CtypeTable[code] & ctype) != 0) + +ONIG_EXTERN const UChar OnigEncISO_8859_1_ToLowerCaseTable[]; +ONIG_EXTERN const UChar OnigEncISO_8859_1_ToUpperCaseTable[]; +ONIG_EXTERN const unsigned short OnigEnc_Unicode_ISO_8859_1_CtypeTable[]; +ONIG_EXTERN const OnigPairAmbigCodes OnigAsciiPairAmbigCodes[]; + +#endif /* is not ONIG_RUBY_M17N */ + +ONIG_EXTERN int +onigenc_with_ascii_strncmp P_((OnigEncoding enc, const UChar* p, const UChar* end, const UChar* sascii /* ascii */, int n)); +ONIG_EXTERN UChar* +onigenc_step P_((OnigEncoding enc, const UChar* p, const UChar* end, int n)); + +/* defined in regexec.c, but used in enc/xxx.c */ +extern int onig_is_in_code_range P_((const UChar* p, OnigCodePoint code)); + +ONIG_EXTERN OnigEncoding OnigEncDefaultCharEncoding; +ONIG_EXTERN const UChar* OnigEncAsciiToLowerCaseTable; +ONIG_EXTERN const UChar OnigEncAsciiToUpperCaseTable[]; +ONIG_EXTERN const unsigned short OnigEncAsciiCtypeTable[]; + +#define ONIGENC_ASCII_CODE_TO_LOWER_CASE(c) OnigEncAsciiToLowerCaseTable[c] +#define ONIGENC_ASCII_CODE_TO_UPPER_CASE(c) OnigEncAsciiToUpperCaseTable[c] +#define ONIGENC_IS_ASCII_CODE_CTYPE(code,ctype) \ + ((OnigEncAsciiCtypeTable[code] & ctype) != 0) +#define ONIGENC_IS_ASCII_CODE_CASE_AMBIG(code) \ + ONIGENC_IS_ASCII_CODE_CTYPE(code, (ONIGENC_CTYPE_UPPER | ONIGENC_CTYPE_LOWER)) + +#endif /* REGENC_H */ diff --git a/ext/mbstring/oniguruma/regerror.c b/ext/mbstring/oniguruma/regerror.c new file mode 100644 index 0000000..d6ec918 --- /dev/null +++ b/ext/mbstring/oniguruma/regerror.c @@ -0,0 +1,371 @@ +/********************************************************************** + regerror.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regint.h" +#include <stdio.h> /* for vsnprintf() */ + +#ifdef HAVE_STDARG_PROTOTYPES +#include <stdarg.h> +#define va_init_list(a,b) va_start(a,b) +#else +#include <varargs.h> +#define va_init_list(a,b) va_start(a) +#endif + +extern UChar* +onig_error_code_to_format(int code) +{ + char *p; + + if (code >= 0) return (UChar* )0; + + switch (code) { + case ONIG_MISMATCH: + p = "mismatch"; break; + case ONIG_NO_SUPPORT_CONFIG: + p = "no support in this configuration"; break; + case ONIGERR_MEMORY: + p = "fail to memory allocation"; break; + case ONIGERR_MATCH_STACK_LIMIT_OVER: + p = "match-stack limit over"; break; + case ONIGERR_TYPE_BUG: + p = "undefined type (bug)"; break; + case ONIGERR_PARSER_BUG: + p = "internal parser error (bug)"; break; + case ONIGERR_STACK_BUG: + p = "stack error (bug)"; break; + case ONIGERR_UNDEFINED_BYTECODE: + p = "undefined bytecode (bug)"; break; + case ONIGERR_UNEXPECTED_BYTECODE: + p = "unexpected bytecode (bug)"; break; + case ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED: + p = "default multibyte-encoding is not setted"; break; + case ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR: + p = "can't convert to wide-char on specified multibyte-encoding"; break; + case ONIGERR_INVALID_ARGUMENT: + p = "invalid argument"; break; + case ONIGERR_END_PATTERN_AT_LEFT_BRACE: + p = "end pattern at left brace"; break; + case ONIGERR_END_PATTERN_AT_LEFT_BRACKET: + p = "end pattern at left bracket"; break; + case ONIGERR_EMPTY_CHAR_CLASS: + p = "empty char-class"; break; + case ONIGERR_PREMATURE_END_OF_CHAR_CLASS: + p = "premature end of char-class"; break; + case ONIGERR_END_PATTERN_AT_ESCAPE: + p = "end pattern at escape"; break; + case ONIGERR_END_PATTERN_AT_META: + p = "end pattern at meta"; break; + case ONIGERR_END_PATTERN_AT_CONTROL: + p = "end pattern at control"; break; + case ONIGERR_META_CODE_SYNTAX: + p = "illegal meta-code syntax"; break; + case ONIGERR_CONTROL_CODE_SYNTAX: + p = "illegal control-code syntax"; break; + case ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE: + p = "char-class value at end of range"; break; + case ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE: + p = "char-class value at start of range"; break; + case ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS: + p = "unmatched range specifier in char-class"; break; + case ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED: + p = "target of repeat operator is not specified"; break; + case ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID: + p = "target of repeat operator is invalid"; break; + case ONIGERR_NESTED_REPEAT_OPERATOR: + p = "nested repeat operator"; break; + case ONIGERR_UNMATCHED_CLOSE_PARENTHESIS: + p = "unmatched close parenthesis"; break; + case ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS: + p = "end pattern with unmatched parenthesis"; break; + case ONIGERR_END_PATTERN_IN_GROUP: + p = "end pattern in group"; break; + case ONIGERR_UNDEFINED_GROUP_OPTION: + p = "undefined group option"; break; + case ONIGERR_INVALID_POSIX_BRACKET_TYPE: + p = "invalid POSIX bracket type"; break; + case ONIGERR_INVALID_LOOK_BEHIND_PATTERN: + p = "invalid pattern in look-behind"; break; + case ONIGERR_INVALID_REPEAT_RANGE_PATTERN: + p = "invalid repeat range {lower,upper}"; break; + case ONIGERR_TOO_BIG_NUMBER: + p = "too big number"; break; + case ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE: + p = "too big number for repeat range"; break; + case ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE: + p = "upper is smaller than lower in repeat range"; break; + case ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS: + p = "empty range in char class"; break; + case ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE: + p = "mismatch multibyte code length in char-class range"; break; + case ONIGERR_TOO_MANY_MULTI_BYTE_RANGES: + p = "too many multibyte code ranges are specified"; break; + case ONIGERR_TOO_SHORT_MULTI_BYTE_STRING: + p = "too short multibyte code string"; break; + case ONIGERR_TOO_BIG_BACKREF_NUMBER: + p = "too big backref number"; break; + case ONIGERR_INVALID_BACKREF: +#ifdef USE_NAMED_GROUP + p = "invalid backref number/name"; break; +#else + p = "invalid backref number"; break; +#endif + case ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED: + p = "numbered backref/call is not allowed. (use name)"; break; + case ONIGERR_TOO_BIG_WIDE_CHAR_VALUE: + p = "too big wide-char value"; break; + case ONIGERR_TOO_LONG_WIDE_CHAR_VALUE: + p = "too long wide-char value"; break; + case ONIGERR_INVALID_WIDE_CHAR_VALUE: + p = "invalid wide-char value"; break; + case ONIGERR_EMPTY_GROUP_NAME: + p = "group name is empty"; break; + case ONIGERR_INVALID_GROUP_NAME: + p = "invalid group name <%n>"; break; + case ONIGERR_INVALID_CHAR_IN_GROUP_NAME: +#ifdef USE_NAMED_GROUP + p = "invalid char in group name <%n>"; break; +#else + p = "invalid char in group number <%n>"; break; +#endif + case ONIGERR_UNDEFINED_NAME_REFERENCE: + p = "undefined name <%n> reference"; break; + case ONIGERR_UNDEFINED_GROUP_REFERENCE: + p = "undefined group <%n> reference"; break; + case ONIGERR_MULTIPLEX_DEFINED_NAME: + p = "multiplex defined name <%n>"; break; + case ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL: + p = "multiplex definition name <%n> call"; break; + case ONIGERR_NEVER_ENDING_RECURSION: + p = "never ending recursion"; break; + case ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY: + p = "group number is too big for capture history"; break; + case ONIGERR_INVALID_CHAR_PROPERTY_NAME: + p = "invalid character property name {%n}"; break; + case ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION: + p = "not supported encoding combination"; break; + case ONIGERR_INVALID_COMBINATION_OF_OPTIONS: + p = "invalid combination of options"; break; + case ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT: + p = "over thread pass limit count"; break; + + default: + p = "undefined error code"; break; + } + + return (UChar* )p; +} + + +static int to_ascii(OnigEncoding enc, UChar *s, UChar *end, + UChar buf[], int buf_size, int *is_over) +{ + int len; + UChar *p; + OnigCodePoint code; + + if (ONIGENC_MBC_MINLEN(enc) > 1) { + p = s; + len = 0; + while (p < end) { + code = ONIGENC_MBC_TO_CODE(enc, p, end); + if (code >= 0x80) { + if (len + 5 <= buf_size) { + sprintf((char* )(&(buf[len])), "\\%03o", + (unsigned int)(code & 0377)); + len += 5; + } + else { + break; + } + } + else { + buf[len++] = (UChar )code; + } + + p += enc_len(enc, p); + if (len >= buf_size) break; + } + + *is_over = ((p < end) ? 1 : 0); + } + else { + len = MIN((end - s), buf_size); + xmemcpy(buf, s, (size_t )len); + *is_over = ((buf_size < (end - s)) ? 1 : 0); + } + + return len; +} + + +/* for ONIG_MAX_ERROR_MESSAGE_LEN */ +#define MAX_ERROR_PAR_LEN 30 + +extern int +#ifdef HAVE_STDARG_PROTOTYPES +onig_error_code_to_str(UChar* s, int code, ...) +#else +onig_error_code_to_str(s, code, va_alist) + UChar* s; + int code; + va_dcl +#endif +{ + UChar *p, *q; + OnigErrorInfo* einfo; + int len, is_over; + UChar parbuf[MAX_ERROR_PAR_LEN]; + va_list vargs; + + va_init_list(vargs, code); + + switch (code) { + case ONIGERR_UNDEFINED_NAME_REFERENCE: + case ONIGERR_UNDEFINED_GROUP_REFERENCE: + case ONIGERR_MULTIPLEX_DEFINED_NAME: + case ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL: + case ONIGERR_INVALID_GROUP_NAME: + case ONIGERR_INVALID_CHAR_IN_GROUP_NAME: + case ONIGERR_INVALID_CHAR_PROPERTY_NAME: + einfo = va_arg(vargs, OnigErrorInfo*); + len = to_ascii(einfo->enc, einfo->par, einfo->par_end, + parbuf, MAX_ERROR_PAR_LEN - 3, &is_over); + q = onig_error_code_to_format(code); + p = s; + while (*q != '\0') { + if (*q == '%') { + q++; + if (*q == 'n') { /* '%n': name */ + xmemcpy(p, parbuf, len); + p += len; + if (is_over != 0) { + xmemcpy(p, "...", 3); + p += 3; + } + q++; + } + else + goto normal_char; + } + else { + normal_char: + *p++ = *q++; + } + } + *p = '\0'; + len = p - s; + break; + + default: + q = onig_error_code_to_format(code); + len = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, q); + xmemcpy(s, q, len); + s[len] = '\0'; + break; + } + + va_end(vargs); + return len; +} + + +void +#ifdef HAVE_STDARG_PROTOTYPES +onig_snprintf_with_pattern(UChar buf[], int bufsize, OnigEncoding enc, + UChar* pat, UChar* pat_end, const UChar *fmt, ...) +#else +onig_snprintf_with_pattern(buf, bufsize, enc, pat, pat_end, fmt, va_alist) + UChar buf[]; + int bufsize; + OnigEncoding enc; + UChar* pat; + UChar* pat_end; + const UChar *fmt; + va_dcl +#endif +{ + int n, need, len; + UChar *p, *s, *bp; + UChar bs[6]; + va_list args; + + va_init_list(args, fmt); + n = vsnprintf((char* )buf, bufsize, (const char* )fmt, args); + va_end(args); + + need = (pat_end - pat) * 4 + 4; + + if (n + need < bufsize) { + strcat((char* )buf, ": /"); + s = buf + onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, buf); + + p = pat; + while (p < pat_end) { + if (*p == MC_ESC(enc)) { + *s++ = *p++; + len = enc_len(enc, p); + while (len-- > 0) *s++ = *p++; + } + else if (*p == '/') { + *s++ = (unsigned char )MC_ESC(enc); + *s++ = *p++; + } + else if (ONIGENC_IS_MBC_HEAD(enc, p)) { + len = enc_len(enc, p); + if (ONIGENC_MBC_MINLEN(enc) == 1) { + while (len-- > 0) *s++ = *p++; + } + else { /* for UTF16 */ + int blen; + + while (len-- > 0) { + sprintf((char* )bs, "\\%03o", *p++ & 0377); + blen = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, bs); + bp = bs; + while (blen-- > 0) *s++ = *bp++; + } + } + } + else if (!ONIGENC_IS_CODE_PRINT(enc, *p) && + !ONIGENC_IS_CODE_SPACE(enc, *p)) { + sprintf((char* )bs, "\\%03o", *p++ & 0377); + len = onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, bs); + bp = bs; + while (len-- > 0) *s++ = *bp++; + } + else { + *s++ = *p++; + } + } + + *s++ = '/'; + *s = '\0'; + } +} diff --git a/ext/mbstring/oniguruma/regexec.c b/ext/mbstring/oniguruma/regexec.c new file mode 100644 index 0000000..918aa67 --- /dev/null +++ b/ext/mbstring/oniguruma/regexec.c @@ -0,0 +1,3949 @@ +/********************************************************************** + regexec.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regint.h" + +#ifdef USE_CRNL_AS_LINE_TERMINATOR +#define ONIGENC_IS_MBC_CRNL(enc,p,end) \ + (ONIGENC_MBC_TO_CODE(enc,p,end) == 13 && \ + ONIGENC_IS_MBC_NEWLINE(enc,(p+enc_len(enc,p)),end)) +#endif + +#ifdef USE_CAPTURE_HISTORY +static void history_tree_free(OnigCaptureTreeNode* node); + +static void +history_tree_clear(OnigCaptureTreeNode* node) +{ + int i; + + if (IS_NOT_NULL(node)) { + for (i = 0; i < node->num_childs; i++) { + if (IS_NOT_NULL(node->childs[i])) { + history_tree_free(node->childs[i]); + } + } + for (i = 0; i < node->allocated; i++) { + node->childs[i] = (OnigCaptureTreeNode* )0; + } + node->num_childs = 0; + node->beg = ONIG_REGION_NOTPOS; + node->end = ONIG_REGION_NOTPOS; + node->group = -1; + } +} + +static void +history_tree_free(OnigCaptureTreeNode* node) +{ + history_tree_clear(node); + xfree(node); +} + +static void +history_root_free(OnigRegion* r) +{ + if (IS_NOT_NULL(r->history_root)) { + history_tree_free(r->history_root); + r->history_root = (OnigCaptureTreeNode* )0; + } +} + +static OnigCaptureTreeNode* +history_node_new(void) +{ + OnigCaptureTreeNode* node; + + node = (OnigCaptureTreeNode* )xmalloc(sizeof(OnigCaptureTreeNode)); + CHECK_NULL_RETURN(node); + node->childs = (OnigCaptureTreeNode** )0; + node->allocated = 0; + node->num_childs = 0; + node->group = -1; + node->beg = ONIG_REGION_NOTPOS; + node->end = ONIG_REGION_NOTPOS; + + return node; +} + +static int +history_tree_add_child(OnigCaptureTreeNode* parent, OnigCaptureTreeNode* child) +{ +#define HISTORY_TREE_INIT_ALLOC_SIZE 8 + + if (parent->num_childs >= parent->allocated) { + int n, i; + + if (IS_NULL(parent->childs)) { + n = HISTORY_TREE_INIT_ALLOC_SIZE; + parent->childs = + (OnigCaptureTreeNode** )xmalloc(sizeof(OnigCaptureTreeNode*) * n); + } + else { + n = parent->allocated * 2; + parent->childs = + (OnigCaptureTreeNode** )xrealloc(parent->childs, + sizeof(OnigCaptureTreeNode*) * n); + } + CHECK_NULL_RETURN_VAL(parent->childs, ONIGERR_MEMORY); + for (i = parent->allocated; i < n; i++) { + parent->childs[i] = (OnigCaptureTreeNode* )0; + } + parent->allocated = n; + } + + parent->childs[parent->num_childs] = child; + parent->num_childs++; + return 0; +} + +static OnigCaptureTreeNode* +history_tree_clone(OnigCaptureTreeNode* node) +{ + int i; + OnigCaptureTreeNode *clone, *child; + + clone = history_node_new(); + CHECK_NULL_RETURN(clone); + + clone->beg = node->beg; + clone->end = node->end; + for (i = 0; i < node->num_childs; i++) { + child = history_tree_clone(node->childs[i]); + if (IS_NULL(child)) { + history_tree_free(clone); + return (OnigCaptureTreeNode* )0; + } + history_tree_add_child(clone, child); + } + + return clone; +} + +extern OnigCaptureTreeNode* +onig_get_capture_tree(OnigRegion* region) +{ + return region->history_root; +} +#endif /* USE_CAPTURE_HISTORY */ + +extern void +onig_region_clear(OnigRegion* region) +{ + int i; + + for (i = 0; i < region->num_regs; i++) { + region->beg[i] = region->end[i] = ONIG_REGION_NOTPOS; + } +#ifdef USE_CAPTURE_HISTORY + history_root_free(region); +#endif +} + +extern int +onig_region_resize(OnigRegion* region, int n) +{ + region->num_regs = n; + + if (n < ONIG_NREGION) + n = ONIG_NREGION; + + if (region->allocated == 0) { + region->beg = (int* )xmalloc(n * sizeof(int)); + region->end = (int* )xmalloc(n * sizeof(int)); + + if (region->beg == 0 || region->end == 0) + return ONIGERR_MEMORY; + + region->allocated = n; + } + else if (region->allocated < n) { + region->beg = (int* )xrealloc(region->beg, n * sizeof(int)); + region->end = (int* )xrealloc(region->end, n * sizeof(int)); + + if (region->beg == 0 || region->end == 0) + return ONIGERR_MEMORY; + + region->allocated = n; + } + + return 0; +} + +extern int +onig_region_resize_clear(OnigRegion* region, int n) +{ + int r; + + r = onig_region_resize(region, n); + if (r != 0) return r; + onig_region_clear(region); + return 0; +} + +extern int +onig_region_set(OnigRegion* region, int at, int beg, int end) +{ + if (at < 0) return ONIGERR_INVALID_ARGUMENT; + + if (at >= region->allocated) { + int r = onig_region_resize(region, at + 1); + if (r < 0) return r; + } + + region->beg[at] = beg; + region->end[at] = end; + return 0; +} + +extern void +onig_region_init(OnigRegion* region) +{ + region->num_regs = 0; + region->allocated = 0; + region->beg = (int* )0; + region->end = (int* )0; + region->history_root = (OnigCaptureTreeNode* )0; +} + +extern OnigRegion* +onig_region_new(void) +{ + OnigRegion* r; + + r = (OnigRegion* )xmalloc(sizeof(OnigRegion)); + onig_region_init(r); + return r; +} + +extern void +onig_region_free(OnigRegion* r, int free_self) +{ + if (r) { + if (r->allocated > 0) { + if (r->beg) xfree(r->beg); + if (r->end) xfree(r->end); + r->allocated = 0; + } +#ifdef USE_CAPTURE_HISTORY + history_root_free(r); +#endif + if (free_self) xfree(r); + } +} + +extern void +onig_region_copy(OnigRegion* to, OnigRegion* from) +{ +#define RREGC_SIZE (sizeof(int) * from->num_regs) + int i; + + if (to == from) return; + + if (to->allocated == 0) { + if (from->num_regs > 0) { + to->beg = (int* )xmalloc(RREGC_SIZE); + to->end = (int* )xmalloc(RREGC_SIZE); + to->allocated = from->num_regs; + } + } + else if (to->allocated < from->num_regs) { + to->beg = (int* )xrealloc(to->beg, RREGC_SIZE); + to->end = (int* )xrealloc(to->end, RREGC_SIZE); + to->allocated = from->num_regs; + } + + for (i = 0; i < from->num_regs; i++) { + to->beg[i] = from->beg[i]; + to->end[i] = from->end[i]; + } + to->num_regs = from->num_regs; + +#ifdef USE_CAPTURE_HISTORY + history_root_free(to); + + if (IS_NOT_NULL(from->history_root)) { + to->history_root = history_tree_clone(from->history_root); + } +#endif +} + + +/** stack **/ +#define INVALID_STACK_INDEX -1 +typedef long StackIndex; + +typedef struct _StackType { + unsigned int type; + union { + struct { + UChar *pcode; /* byte code position */ + UChar *pstr; /* string position */ + UChar *pstr_prev; /* previous char position of pstr */ +#ifdef USE_COMBINATION_EXPLOSION_CHECK + unsigned int state_check; +#endif + } state; + struct { + int count; /* for OP_REPEAT_INC, OP_REPEAT_INC_NG */ + UChar *pcode; /* byte code position (head of repeated target) */ + int num; /* repeat id */ + } repeat; + struct { + StackIndex si; /* index of stack */ + } repeat_inc; + struct { + int num; /* memory num */ + UChar *pstr; /* start/end position */ + /* Following information is setted, if this stack type is MEM-START */ + StackIndex start; /* prev. info (for backtrack "(...)*" ) */ + StackIndex end; /* prev. info (for backtrack "(...)*" ) */ + } mem; + struct { + int num; /* null check id */ + UChar *pstr; /* start position */ + } null_check; +#ifdef USE_SUBEXP_CALL + struct { + UChar *ret_addr; /* byte code position */ + int num; /* null check id */ + UChar *pstr; /* string position */ + } call_frame; +#endif + } u; +} StackType; + +/* stack type */ +/* used by normal-POP */ +#define STK_ALT 0x0001 +#define STK_LOOK_BEHIND_NOT 0x0002 +#define STK_POS_NOT 0x0003 +/* handled by normal-POP */ +#define STK_MEM_START 0x0100 +#define STK_MEM_END 0x8200 +#define STK_REPEAT_INC 0x0300 +#define STK_STATE_CHECK_MARK 0x1000 +/* avoided by normal-POP */ +#define STK_NULL_CHECK_START 0x3000 +#define STK_NULL_CHECK_END 0x5000 /* for recursive call */ +#define STK_MEM_END_MARK 0x8400 +#define STK_POS 0x0500 /* used when POP-POS */ +#define STK_STOP_BT 0x0600 /* mark for "(?>...)" */ +#define STK_REPEAT 0x0700 +#define STK_CALL_FRAME 0x0800 +#define STK_RETURN 0x0900 +#define STK_VOID 0x0a00 /* for fill a blank */ + +/* stack type check mask */ +#define STK_MASK_POP_USED 0x00ff +#define STK_MASK_TO_VOID_TARGET 0x10ff +#define STK_MASK_MEM_END_OR_MARK 0x8000 /* MEM_END or MEM_END_MARK */ + +typedef struct { + void* stack_p; + int stack_n; + OnigOptionType options; + OnigRegion* region; + const UChar* start; /* search start position (for \G: BEGIN_POSITION) */ +#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE + int best_len; /* for ONIG_OPTION_FIND_LONGEST */ + UChar* best_s; +#endif +#ifdef USE_COMBINATION_EXPLOSION_CHECK + void* state_check_buff; + int state_check_buff_size; +#endif +} MatchArg; + +#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE +#define MATCH_ARG_INIT(msa, arg_option, arg_region, arg_start) do {\ + (msa).stack_p = (void* )0;\ + (msa).options = (arg_option);\ + (msa).region = (arg_region);\ + (msa).start = (arg_start);\ + (msa).best_len = ONIG_MISMATCH;\ +} while (0) +#else +#define MATCH_ARG_INIT(msa, arg_option, arg_region, arg_start) do {\ + (msa).stack_p = (void* )0;\ + (msa).options = (arg_option);\ + (msa).region = (arg_region);\ + (msa).start = (arg_start);\ +} while (0) +#endif + +#ifdef USE_COMBINATION_EXPLOSION_CHECK + +#define STATE_CHECK_BUFF_MALLOC_THRESHOLD_SIZE 16 + +#define STATE_CHECK_BUFF_INIT(msa, str_len, offset, state_num) do { \ + if ((state_num) > 0 && str_len >= STATE_CHECK_STRING_THRESHOLD_LEN) {\ + unsigned int size = (unsigned int )(((str_len) + 1) * (state_num) + 7) >> 3;\ + offset = ((offset) * (state_num)) >> 3;\ + if (size > 0 && offset < size && size < STATE_CHECK_BUFF_MAX_SIZE) {\ + if (size >= STATE_CHECK_BUFF_MALLOC_THRESHOLD_SIZE) \ + (msa).state_check_buff = (void* )xmalloc(size);\ + else \ + (msa).state_check_buff = (void* )xalloca(size);\ + xmemset(((char* )((msa).state_check_buff)+(offset)), 0, \ + (size_t )(size - (offset))); \ + (msa).state_check_buff_size = size;\ + }\ + else {\ + (msa).state_check_buff = (void* )0;\ + (msa).state_check_buff_size = 0;\ + }\ + }\ + else {\ + (msa).state_check_buff = (void* )0;\ + (msa).state_check_buff_size = 0;\ + }\ +} while (0) + +#define MATCH_ARG_FREE(msa) do {\ + if ((msa).stack_p) xfree((msa).stack_p);\ + if ((msa).state_check_buff_size >= STATE_CHECK_BUFF_MALLOC_THRESHOLD_SIZE) { \ + if ((msa).state_check_buff) xfree((msa).state_check_buff);\ + }\ +} while (0); +#else +#define STATE_CHECK_BUFF_INIT(msa, str_len, offset, state_num) +#define MATCH_ARG_FREE(msa) if ((msa).stack_p) xfree((msa).stack_p) +#endif + + + +#define STACK_INIT(alloc_addr, ptr_num, stack_num) do {\ + if (msa->stack_p) {\ + alloc_addr = (char* )xalloca(sizeof(char*) * (ptr_num));\ + stk_alloc = (StackType* )(msa->stack_p);\ + stk_base = stk_alloc;\ + stk = stk_base;\ + stk_end = stk_base + msa->stack_n;\ + }\ + else {\ + alloc_addr = (char* )xalloca(sizeof(char*) * (ptr_num)\ + + sizeof(StackType) * (stack_num));\ + stk_alloc = (StackType* )(alloc_addr + sizeof(char*) * (ptr_num));\ + stk_base = stk_alloc;\ + stk = stk_base;\ + stk_end = stk_base + (stack_num);\ + }\ +} while(0) + +#define STACK_SAVE do{\ + if (stk_base != stk_alloc) {\ + msa->stack_p = stk_base;\ + msa->stack_n = stk_end - stk_base;\ + };\ +} while(0) + +static unsigned int MatchStackLimitSize = DEFAULT_MATCH_STACK_LIMIT_SIZE; + +extern unsigned int +onig_get_match_stack_limit_size(void) +{ + return MatchStackLimitSize; +} + +extern int +onig_set_match_stack_limit_size(unsigned int size) +{ + MatchStackLimitSize = size; + return 0; +} + +static int +stack_double(StackType** arg_stk_base, StackType** arg_stk_end, + StackType** arg_stk, StackType* stk_alloc, MatchArg* msa) +{ + unsigned int n; + StackType *x, *stk_base, *stk_end, *stk; + + stk_base = *arg_stk_base; + stk_end = *arg_stk_end; + stk = *arg_stk; + + n = stk_end - stk_base; + if (stk_base == stk_alloc && IS_NULL(msa->stack_p)) { + x = (StackType* )xmalloc(sizeof(StackType) * n * 2); + if (IS_NULL(x)) { + STACK_SAVE; + return ONIGERR_MEMORY; + } + xmemcpy(x, stk_base, n * sizeof(StackType)); + n *= 2; + } + else { + n *= 2; + if (MatchStackLimitSize != 0 && n > MatchStackLimitSize) { + if ((unsigned int )(stk_end - stk_base) == MatchStackLimitSize) + return ONIGERR_MATCH_STACK_LIMIT_OVER; + else + n = MatchStackLimitSize; + } + x = (StackType* )xrealloc(stk_base, sizeof(StackType) * n); + if (IS_NULL(x)) { + STACK_SAVE; + return ONIGERR_MEMORY; + } + } + *arg_stk = x + (stk - stk_base); + *arg_stk_base = x; + *arg_stk_end = x + n; + return 0; +} + +#define STACK_ENSURE(n) do {\ + if (stk_end - stk < (n)) {\ + int r = stack_double(&stk_base, &stk_end, &stk, stk_alloc, msa);\ + if (r != 0) { STACK_SAVE; return r; } \ + }\ +} while(0) + +#define STACK_AT(index) (stk_base + (index)) +#define GET_STACK_INDEX(stk) ((stk) - stk_base) + +#define STACK_PUSH_TYPE(stack_type) do {\ + STACK_ENSURE(1);\ + stk->type = (stack_type);\ + STACK_INC;\ +} while(0) + +#define IS_TO_VOID_TARGET(stk) (((stk)->type & STK_MASK_TO_VOID_TARGET) != 0) + +#ifdef USE_COMBINATION_EXPLOSION_CHECK +#define STATE_CHECK_POS(s,snum) \ + (((s) - str) * num_comb_exp_check + ((snum) - 1)) +#define STATE_CHECK_VAL(v,snum) do {\ + if (state_check_buff != NULL) {\ + int x = STATE_CHECK_POS(s,snum);\ + (v) = state_check_buff[x/8] & (1<<(x%8));\ + }\ + else (v) = 0;\ +} while(0) + + +#define ELSE_IF_STATE_CHECK_MARK(stk) \ + else if ((stk)->type == STK_STATE_CHECK_MARK) { \ + int x = STATE_CHECK_POS(stk->u.state.pstr, stk->u.state.state_check);\ + state_check_buff[x/8] |= (1<<(x%8)); \ + } + +#define STACK_PUSH(stack_type,pat,s,sprev) do {\ + STACK_ENSURE(1);\ + stk->type = (stack_type);\ + stk->u.state.pcode = (pat);\ + stk->u.state.pstr = (s);\ + stk->u.state.pstr_prev = (sprev);\ + stk->u.state.state_check = 0;\ + STACK_INC;\ +} while(0) + +#define STACK_PUSH_ENSURED(stack_type,pat) do {\ + stk->type = (stack_type);\ + stk->u.state.pcode = (pat);\ + stk->u.state.state_check = 0;\ + STACK_INC;\ +} while(0) + +#define STACK_PUSH_ALT_WITH_STATE_CHECK(pat,s,sprev,snum) do {\ + STACK_ENSURE(1);\ + stk->type = STK_ALT;\ + stk->u.state.pcode = (pat);\ + stk->u.state.pstr = (s);\ + stk->u.state.pstr_prev = (sprev);\ + stk->u.state.state_check = ((state_check_buff != NULL) ? (snum) : 0);\ + STACK_INC;\ +} while(0) + +#define STACK_PUSH_STATE_CHECK(s,snum) do {\ + if (state_check_buff != NULL) {\ + STACK_ENSURE(1);\ + stk->type = STK_STATE_CHECK_MARK;\ + stk->u.state.pstr = (s);\ + stk->u.state.state_check = (snum);\ + STACK_INC;\ + }\ +} while(0) + +#else /* USE_COMBINATION_EXPLOSION_CHECK */ + +#define ELSE_IF_STATE_CHECK_MARK(stk) + +#define STACK_PUSH(stack_type,pat,s,sprev) do {\ + STACK_ENSURE(1);\ + stk->type = (stack_type);\ + stk->u.state.pcode = (pat);\ + stk->u.state.pstr = (s);\ + stk->u.state.pstr_prev = (sprev);\ + STACK_INC;\ +} while(0) + +#define STACK_PUSH_ENSURED(stack_type,pat) do {\ + stk->type = (stack_type);\ + stk->u.state.pcode = (pat);\ + STACK_INC;\ +} while(0) +#endif /* USE_COMBINATION_EXPLOSION_CHECK */ + +#define STACK_PUSH_ALT(pat,s,sprev) STACK_PUSH(STK_ALT,pat,s,sprev) +#define STACK_PUSH_POS(s,sprev) STACK_PUSH(STK_POS,NULL_UCHARP,s,sprev) +#define STACK_PUSH_POS_NOT(pat,s,sprev) STACK_PUSH(STK_POS_NOT,pat,s,sprev) +#define STACK_PUSH_STOP_BT STACK_PUSH_TYPE(STK_STOP_BT) +#define STACK_PUSH_LOOK_BEHIND_NOT(pat,s,sprev) \ + STACK_PUSH(STK_LOOK_BEHIND_NOT,pat,s,sprev) + +#define STACK_PUSH_REPEAT(id, pat) do {\ + STACK_ENSURE(1);\ + stk->type = STK_REPEAT;\ + stk->u.repeat.num = (id);\ + stk->u.repeat.pcode = (pat);\ + stk->u.repeat.count = 0;\ + STACK_INC;\ +} while(0) + +#define STACK_PUSH_REPEAT_INC(sindex) do {\ + STACK_ENSURE(1);\ + stk->type = STK_REPEAT_INC;\ + stk->u.repeat_inc.si = (sindex);\ + STACK_INC;\ +} while(0) + +#define STACK_PUSH_MEM_START(mnum, s) do {\ + STACK_ENSURE(1);\ + stk->type = STK_MEM_START;\ + stk->u.mem.num = (mnum);\ + stk->u.mem.pstr = (s);\ + stk->u.mem.start = mem_start_stk[mnum];\ + stk->u.mem.end = mem_end_stk[mnum];\ + mem_start_stk[mnum] = GET_STACK_INDEX(stk);\ + mem_end_stk[mnum] = INVALID_STACK_INDEX;\ + STACK_INC;\ +} while(0) + +#define STACK_PUSH_MEM_END(mnum, s) do {\ + STACK_ENSURE(1);\ + stk->type = STK_MEM_END;\ + stk->u.mem.num = (mnum);\ + stk->u.mem.pstr = (s);\ + stk->u.mem.start = mem_start_stk[mnum];\ + stk->u.mem.end = mem_end_stk[mnum];\ + mem_end_stk[mnum] = GET_STACK_INDEX(stk);\ + STACK_INC;\ +} while(0) + +#define STACK_PUSH_MEM_END_MARK(mnum) do {\ + STACK_ENSURE(1);\ + stk->type = STK_MEM_END_MARK;\ + stk->u.mem.num = (mnum);\ + STACK_INC;\ +} while(0) + +#define STACK_GET_MEM_START(mnum, k) do {\ + int level = 0;\ + k = stk;\ + while (k > stk_base) {\ + k--;\ + if ((k->type & STK_MASK_MEM_END_OR_MARK) != 0 \ + && k->u.mem.num == (mnum)) {\ + level++;\ + }\ + else if (k->type == STK_MEM_START && k->u.mem.num == (mnum)) {\ + if (level == 0) break;\ + level--;\ + }\ + }\ +} while (0) + +#define STACK_GET_MEM_RANGE(k, mnum, start, end) do {\ + int level = 0;\ + while (k < stk) {\ + if (k->type == STK_MEM_START && k->u.mem.num == (mnum)) {\ + if (level == 0) (start) = k->u.mem.pstr;\ + level++;\ + }\ + else if (k->type == STK_MEM_END && k->u.mem.num == (mnum)) {\ + level--;\ + if (level == 0) {\ + (end) = k->u.mem.pstr;\ + break;\ + }\ + }\ + k++;\ + }\ +} while (0) + +#define STACK_PUSH_NULL_CHECK_START(cnum, s) do {\ + STACK_ENSURE(1);\ + stk->type = STK_NULL_CHECK_START;\ + stk->u.null_check.num = (cnum);\ + stk->u.null_check.pstr = (s);\ + STACK_INC;\ +} while(0) + +#define STACK_PUSH_NULL_CHECK_END(cnum) do {\ + STACK_ENSURE(1);\ + stk->type = STK_NULL_CHECK_END;\ + stk->u.null_check.num = (cnum);\ + STACK_INC;\ +} while(0) + +#define STACK_PUSH_CALL_FRAME(pat) do {\ + STACK_ENSURE(1);\ + stk->type = STK_CALL_FRAME;\ + stk->u.call_frame.ret_addr = (pat);\ + STACK_INC;\ +} while(0) + +#define STACK_PUSH_RETURN do {\ + STACK_ENSURE(1);\ + stk->type = STK_RETURN;\ + STACK_INC;\ +} while(0) + + +#ifdef ONIG_DEBUG +#define STACK_BASE_CHECK(p, at) \ + if ((p) < stk_base) {\ + fprintf(stderr, "at %s\n", at);\ + goto stack_error;\ + } +#else +#define STACK_BASE_CHECK(p, at) +#endif + +#define STACK_POP_ONE do {\ + stk--;\ + STACK_BASE_CHECK(stk, "STACK_POP_ONE"); \ +} while(0) + +#define STACK_POP do {\ + switch (pop_level) {\ + case STACK_POP_LEVEL_FREE:\ + while (1) {\ + stk--;\ + STACK_BASE_CHECK(stk, "STACK_POP"); \ + if ((stk->type & STK_MASK_POP_USED) != 0) break;\ + ELSE_IF_STATE_CHECK_MARK(stk);\ + }\ + break;\ + case STACK_POP_LEVEL_MEM_START:\ + while (1) {\ + stk--;\ + STACK_BASE_CHECK(stk, "STACK_POP 2"); \ + if ((stk->type & STK_MASK_POP_USED) != 0) break;\ + else if (stk->type == STK_MEM_START) {\ + mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\ + mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\ + }\ + ELSE_IF_STATE_CHECK_MARK(stk);\ + }\ + break;\ + default:\ + while (1) {\ + stk--;\ + STACK_BASE_CHECK(stk, "STACK_POP 3"); \ + if ((stk->type & STK_MASK_POP_USED) != 0) break;\ + else if (stk->type == STK_MEM_START) {\ + mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\ + mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\ + }\ + else if (stk->type == STK_REPEAT_INC) {\ + STACK_AT(stk->u.repeat_inc.si)->u.repeat.count--;\ + }\ + else if (stk->type == STK_MEM_END) {\ + mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\ + mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\ + }\ + ELSE_IF_STATE_CHECK_MARK(stk);\ + }\ + break;\ + }\ +} while(0) + +#define STACK_POP_TIL_POS_NOT do {\ + while (1) {\ + stk--;\ + STACK_BASE_CHECK(stk, "STACK_POP_TIL_POS_NOT"); \ + if (stk->type == STK_POS_NOT) break;\ + else if (stk->type == STK_MEM_START) {\ + mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\ + mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\ + }\ + else if (stk->type == STK_REPEAT_INC) {\ + STACK_AT(stk->u.repeat_inc.si)->u.repeat.count--;\ + }\ + else if (stk->type == STK_MEM_END) {\ + mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\ + mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\ + }\ + ELSE_IF_STATE_CHECK_MARK(stk);\ + }\ +} while(0) + +#define STACK_POP_TIL_LOOK_BEHIND_NOT do {\ + while (1) {\ + stk--;\ + STACK_BASE_CHECK(stk, "STACK_POP_TIL_LOOK_BEHIND_NOT"); \ + if (stk->type == STK_LOOK_BEHIND_NOT) break;\ + else if (stk->type == STK_MEM_START) {\ + mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\ + mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\ + }\ + else if (stk->type == STK_REPEAT_INC) {\ + STACK_AT(stk->u.repeat_inc.si)->u.repeat.count--;\ + }\ + else if (stk->type == STK_MEM_END) {\ + mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\ + mem_end_stk[stk->u.mem.num] = stk->u.mem.end;\ + }\ + ELSE_IF_STATE_CHECK_MARK(stk);\ + }\ +} while(0) + +#define STACK_POS_END(k) do {\ + k = stk;\ + while (1) {\ + k--;\ + STACK_BASE_CHECK(k, "STACK_POS_END"); \ + if (IS_TO_VOID_TARGET(k)) {\ + k->type = STK_VOID;\ + }\ + else if (k->type == STK_POS) {\ + k->type = STK_VOID;\ + break;\ + }\ + }\ +} while(0) + +#define STACK_STOP_BT_END do {\ + StackType *k = stk;\ + while (1) {\ + k--;\ + STACK_BASE_CHECK(k, "STACK_STOP_BT_END"); \ + if (IS_TO_VOID_TARGET(k)) {\ + k->type = STK_VOID;\ + }\ + else if (k->type == STK_STOP_BT) {\ + k->type = STK_VOID;\ + break;\ + }\ + }\ +} while(0) + +#define STACK_NULL_CHECK(isnull,id,s) do {\ + StackType* k = stk;\ + while (1) {\ + k--;\ + STACK_BASE_CHECK(k, "STACK_NULL_CHECK"); \ + if (k->type == STK_NULL_CHECK_START) {\ + if (k->u.null_check.num == (id)) {\ + (isnull) = (k->u.null_check.pstr == (s));\ + break;\ + }\ + }\ + }\ +} while(0) + +#define STACK_NULL_CHECK_REC(isnull,id,s) do {\ + int level = 0;\ + StackType* k = stk;\ + while (1) {\ + k--;\ + STACK_BASE_CHECK(k, "STACK_NULL_CHECK_REC"); \ + if (k->type == STK_NULL_CHECK_START) {\ + if (k->u.null_check.num == (id)) {\ + if (level == 0) {\ + (isnull) = (k->u.null_check.pstr == (s));\ + break;\ + }\ + else level--;\ + }\ + }\ + else if (k->type == STK_NULL_CHECK_END) {\ + level++;\ + }\ + }\ +} while(0) + +#define STACK_NULL_CHECK_MEMST(isnull,id,s,reg) do {\ + StackType* k = stk;\ + while (1) {\ + k--;\ + STACK_BASE_CHECK(k, "STACK_NULL_CHECK_MEMST"); \ + if (k->type == STK_NULL_CHECK_START) {\ + if (k->u.null_check.num == (id)) {\ + if (k->u.null_check.pstr != (s)) {\ + (isnull) = 0;\ + break;\ + }\ + else {\ + UChar* endp;\ + (isnull) = 1;\ + while (k < stk) {\ + if (k->type == STK_MEM_START) {\ + if (k->u.mem.end == INVALID_STACK_INDEX) {\ + (isnull) = 0; break;\ + }\ + if (BIT_STATUS_AT(reg->bt_mem_end, k->u.mem.num))\ + endp = STACK_AT(k->u.mem.end)->u.mem.pstr;\ + else\ + endp = (UChar* )k->u.mem.end;\ + if (STACK_AT(k->u.mem.start)->u.mem.pstr != endp) {\ + (isnull) = 0; break;\ + }\ + else if (endp != s) {\ + (isnull) = -1; /* empty, but position changed */ \ + }\ + }\ + k++;\ + }\ + break;\ + }\ + }\ + }\ + }\ +} while(0) + +#define STACK_NULL_CHECK_MEMST_REC(isnull,id,s,reg) do {\ + int level = 0;\ + StackType* k = stk;\ + while (1) {\ + k--;\ + STACK_BASE_CHECK(k, "STACK_NULL_CHECK_MEMST_REC"); \ + if (k->type == STK_NULL_CHECK_START) {\ + if (k->u.null_check.num == (id)) {\ + if (level == 0) {\ + if (k->u.null_check.pstr != (s)) {\ + (isnull) = 0;\ + break;\ + }\ + else {\ + UChar* endp;\ + (isnull) = 1;\ + while (k < stk) {\ + if (k->type == STK_MEM_START) {\ + if (k->u.mem.end == INVALID_STACK_INDEX) {\ + (isnull) = 0; break;\ + }\ + if (BIT_STATUS_AT(reg->bt_mem_end, k->u.mem.num))\ + endp = STACK_AT(k->u.mem.end)->u.mem.pstr;\ + else\ + endp = (UChar* )k->u.mem.end;\ + if (STACK_AT(k->u.mem.start)->u.mem.pstr != endp) {\ + (isnull) = 0; break;\ + }\ + else if (endp != s) {\ + (isnull) = -1; /* empty, but position changed */ \ + }\ + }\ + k++;\ + }\ + break;\ + }\ + }\ + else {\ + level--;\ + }\ + }\ + }\ + else if (k->type == STK_NULL_CHECK_END) {\ + if (k->u.null_check.num == (id)) level++;\ + }\ + }\ +} while(0) + +#define STACK_GET_REPEAT(id, k) do {\ + int level = 0;\ + k = stk;\ + while (1) {\ + k--;\ + STACK_BASE_CHECK(k, "STACK_GET_REPEAT"); \ + if (k->type == STK_REPEAT) {\ + if (level == 0) {\ + if (k->u.repeat.num == (id)) {\ + break;\ + }\ + }\ + }\ + else if (k->type == STK_CALL_FRAME) level--;\ + else if (k->type == STK_RETURN) level++;\ + }\ +} while (0) + +#define STACK_RETURN(addr) do {\ + int level = 0;\ + StackType* k = stk;\ + while (1) {\ + k--;\ + STACK_BASE_CHECK(k, "STACK_RETURN"); \ + if (k->type == STK_CALL_FRAME) {\ + if (level == 0) {\ + (addr) = k->u.call_frame.ret_addr;\ + break;\ + }\ + else level--;\ + }\ + else if (k->type == STK_RETURN)\ + level++;\ + }\ +} while(0) + + +#define STRING_CMP(s1,s2,len) do {\ + while (len-- > 0) {\ + if (*s1++ != *s2++) goto fail;\ + }\ +} while(0) + +#define STRING_CMP_IC(ambig_flag,s1,ps2,len) do {\ + if (string_cmp_ic(encode, ambig_flag, s1, ps2, len) == 0) \ + goto fail; \ +} while(0) + +static int string_cmp_ic(OnigEncoding enc, int ambig_flag, + UChar* s1, UChar** ps2, int mblen) +{ + UChar buf1[ONIGENC_MBC_NORMALIZE_MAXLEN]; + UChar buf2[ONIGENC_MBC_NORMALIZE_MAXLEN]; + UChar *p1, *p2, *end, *s2, *end2; + int len1, len2; + + s2 = *ps2; + end = s1 + mblen; + end2 = s2 + mblen; + while (s1 < end) { + len1 = ONIGENC_MBC_TO_NORMALIZE(enc, ambig_flag, &s1, end, buf1); + len2 = ONIGENC_MBC_TO_NORMALIZE(enc, ambig_flag, &s2, end2, buf2); + if (len1 != len2) return 0; + p1 = buf1; + p2 = buf2; + while (len1-- > 0) { + if (*p1 != *p2) return 0; + p1++; + p2++; + } + } + + *ps2 = s2; + return 1; +} + +#define STRING_CMP_VALUE(s1,s2,len,is_fail) do {\ + is_fail = 0;\ + while (len-- > 0) {\ + if (*s1++ != *s2++) {\ + is_fail = 1; break;\ + }\ + }\ +} while(0) + +#define STRING_CMP_VALUE_IC(ambig_flag,s1,ps2,len,is_fail) do {\ + if (string_cmp_ic(encode, ambig_flag, s1, ps2, len) == 0) \ + is_fail = 1; \ + else \ + is_fail = 0; \ +} while(0) + + +#define ON_STR_BEGIN(s) ((s) == str) +#define ON_STR_END(s) ((s) == end) +#define IS_EMPTY_STR (str == end) + +#define DATA_ENSURE(n) \ + if (s + (n) > end) goto fail + +#define DATA_ENSURE_CHECK(n) (s + (n) <= end) + +#ifdef USE_CAPTURE_HISTORY +static int +make_capture_history_tree(OnigCaptureTreeNode* node, StackType** kp, + StackType* stk_top, UChar* str, regex_t* reg) +{ + int n, r; + OnigCaptureTreeNode* child; + StackType* k = *kp; + + while (k < stk_top) { + if (k->type == STK_MEM_START) { + n = k->u.mem.num; + if (n <= ONIG_MAX_CAPTURE_HISTORY_GROUP && + BIT_STATUS_AT(reg->capture_history, n) != 0) { + child = history_node_new(); + CHECK_NULL_RETURN_VAL(child, ONIGERR_MEMORY); + child->group = n; + child->beg = (int )(k->u.mem.pstr - str); + r = history_tree_add_child(node, child); + if (r != 0) return r; + *kp = (k + 1); + r = make_capture_history_tree(child, kp, stk_top, str, reg); + if (r != 0) return r; + + k = *kp; + child->end = (int )(k->u.mem.pstr - str); + } + } + else if (k->type == STK_MEM_END) { + if (k->u.mem.num == node->group) { + node->end = (int )(k->u.mem.pstr - str); + *kp = k; + return 0; + } + } + k++; + } + + return 1; /* 1: root node ending. */ +} +#endif + +#ifdef USE_BACKREF_AT_LEVEL +static int mem_is_in_memp(int mem, int num, UChar* memp) +{ + int i; + MemNumType m; + + for (i = 0; i < num; i++) { + GET_MEMNUM_INC(m, memp); + if (mem == (int )m) return 1; + } + return 0; +} + +static int backref_match_at_nested_level(regex_t* reg + , StackType* top, StackType* stk_base + , int ignore_case, int ambig_flag + , int nest, int mem_num, UChar* memp, UChar** s, const UChar* send) +{ + UChar *ss, *p, *pstart, *pend = NULL_UCHARP; + int level; + StackType* k; + + level = 0; + k = top; + k--; + while (k >= stk_base) { + if (k->type == STK_CALL_FRAME) { + level--; + } + else if (k->type == STK_RETURN) { + level++; + } + else if (level == nest) { + if (k->type == STK_MEM_START) { + if (mem_is_in_memp(k->u.mem.num, mem_num, memp)) { + pstart = k->u.mem.pstr; + if (pend != NULL_UCHARP) { + if (pend - pstart > send - *s) return 0; /* or goto next_mem; */ + p = pstart; + ss = *s; + + if (ignore_case != 0) { + if (string_cmp_ic(reg->enc, ambig_flag, + pstart, &ss, (int )(pend - pstart)) == 0) + return 0; /* or goto next_mem; */ + } + else { + while (p < pend) { + if (*p++ != *ss++) return 0; /* or goto next_mem; */ + } + } + + *s = ss; + return 1; + } + } + } + else if (k->type == STK_MEM_END) { + if (mem_is_in_memp(k->u.mem.num, mem_num, memp)) { + pend = k->u.mem.pstr; + } + } + } + k--; + } + + return 0; +} +#endif /* USE_BACKREF_AT_LEVEL */ + + +#ifdef RUBY_PLATFORM + +typedef struct { + int state; + regex_t* reg; + MatchArg* msa; + StackType* stk_base; +} TrapEnsureArg; + +static VALUE +trap_ensure(VALUE arg) +{ + TrapEnsureArg* ta = (TrapEnsureArg* )arg; + + if (ta->state == 0) { /* trap_exec() is not normal return */ + ONIG_STATE_DEC_THREAD(ta->reg); + if (! IS_NULL(ta->msa->stack_p) && ta->stk_base != ta->msa->stack_p) + xfree(ta->stk_base); + + MATCH_ARG_FREE(*(ta->msa)); + } + + return Qnil; +} + +static VALUE +trap_exec(VALUE arg) +{ + TrapEnsureArg* ta; + + rb_trap_exec(); + + ta = (TrapEnsureArg* )arg; + ta->state = 1; /* normal return */ + return Qnil; +} + +extern void +onig_exec_trap(regex_t* reg, MatchArg* msa, StackType* stk_base) +{ + VALUE arg; + TrapEnsureArg ta; + + ta.state = 0; + ta.reg = reg; + ta.msa = msa; + ta.stk_base = stk_base; + arg = (VALUE )(&ta); + rb_ensure(trap_exec, arg, trap_ensure, arg); +} + +#define CHECK_INTERRUPT_IN_MATCH_AT do {\ + if (rb_trap_pending) {\ + if (! rb_prohibit_interrupt) {\ + onig_exec_trap(reg, msa, stk_base);\ + }\ + }\ +} while (0) +#else +#define CHECK_INTERRUPT_IN_MATCH_AT +#endif /* RUBY_PLATFORM */ + +#ifdef ONIG_DEBUG_STATISTICS + +#define USE_TIMEOFDAY + +#ifdef USE_TIMEOFDAY +#ifdef HAVE_SYS_TIME_H +#include <sys/time.h> +#endif +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif +static struct timeval ts, te; +#define GETTIME(t) gettimeofday(&(t), (struct timezone* )0) +#define TIMEDIFF(te,ts) (((te).tv_usec - (ts).tv_usec) + \ + (((te).tv_sec - (ts).tv_sec)*1000000)) +#else +#ifdef HAVE_SYS_TIMES_H +#include <sys/times.h> +#endif +static struct tms ts, te; +#define GETTIME(t) times(&(t)) +#define TIMEDIFF(te,ts) ((te).tms_utime - (ts).tms_utime) +#endif + +static int OpCounter[256]; +static int OpPrevCounter[256]; +static unsigned long OpTime[256]; +static int OpCurr = OP_FINISH; +static int OpPrevTarget = OP_FAIL; +static int MaxStackDepth = 0; + +#define STAT_OP_IN(opcode) do {\ + if (opcode == OpPrevTarget) OpPrevCounter[OpCurr]++;\ + OpCurr = opcode;\ + OpCounter[opcode]++;\ + GETTIME(ts);\ +} while (0) + +#define STAT_OP_OUT do {\ + GETTIME(te);\ + OpTime[OpCurr] += TIMEDIFF(te, ts);\ +} while (0) + +#ifdef RUBY_PLATFORM + +/* + * :nodoc: + */ +static VALUE onig_stat_print(void) +{ + onig_print_statistics(stderr); + return Qnil; +} +#endif + +extern void onig_statistics_init(void) +{ + int i; + for (i = 0; i < 256; i++) { + OpCounter[i] = OpPrevCounter[i] = 0; OpTime[i] = 0; + } + MaxStackDepth = 0; + +#ifdef RUBY_PLATFORM + rb_define_global_function("onig_stat_print", onig_stat_print, 0); +#endif +} + +extern void +onig_print_statistics(FILE* f) +{ + int i; + fprintf(f, " count prev time\n"); + for (i = 0; OnigOpInfo[i].opcode >= 0; i++) { + fprintf(f, "%8d: %8d: %10ld: %s\n", + OpCounter[i], OpPrevCounter[i], OpTime[i], OnigOpInfo[i].name); + } + fprintf(f, "\nmax stack depth: %d\n", MaxStackDepth); +} + +#define STACK_INC do {\ + stk++;\ + if (stk - stk_base > MaxStackDepth) \ + MaxStackDepth = stk - stk_base;\ +} while (0) + +#else +#define STACK_INC stk++ + +#define STAT_OP_IN(opcode) +#define STAT_OP_OUT +#endif + +extern int +onig_is_in_code_range(const UChar* p, OnigCodePoint code) +{ + OnigCodePoint n, *data; + OnigCodePoint low, high, x; + + GET_CODE_POINT(n, p); + data = (OnigCodePoint* )p; + data++; + + for (low = 0, high = n; low < high; ) { + x = (low + high) >> 1; + if (code > data[x * 2 + 1]) + low = x + 1; + else + high = x; + } + + return ((low < n && code >= data[low * 2]) ? 1 : 0); +} + +static int +is_code_in_cc(int enclen, OnigCodePoint code, CClassNode* cc) +{ + int found; + + if (enclen > 1 || (code >= SINGLE_BYTE_SIZE)) { + if (IS_NULL(cc->mbuf)) { + found = 0; + } + else { + found = (onig_is_in_code_range(cc->mbuf->p, code) != 0 ? 1 : 0); + } + } + else { + found = (BITSET_AT(cc->bs, code) == 0 ? 0 : 1); + } + + if (IS_CCLASS_NOT(cc)) + return !found; + else + return found; +} + +extern int +onig_is_code_in_cc(OnigEncoding enc, OnigCodePoint code, CClassNode* cc) +{ + int len; + + if (ONIGENC_MBC_MINLEN(enc) > 1) { + len = 2; + } + else { + len = ONIGENC_CODE_TO_MBCLEN(enc, code); + } + return is_code_in_cc(len, code, cc); +} + + +/* matching region of POSIX API */ +typedef int regoff_t; + +typedef struct { + regoff_t rm_so; + regoff_t rm_eo; +} posix_regmatch_t; + +/* match data(str - end) from position (sstart). */ +/* if sstart == str then set sprev to NULL. */ +static int +match_at(regex_t* reg, const UChar* str, const UChar* end, const UChar* sstart, + UChar* sprev, MatchArg* msa) +{ + static UChar FinishCode[] = { OP_FINISH }; + + int i, n, num_mem, best_len, pop_level; + LengthType tlen, tlen2; + MemNumType mem; + RelAddrType addr; + OnigOptionType option = reg->options; + OnigEncoding encode = reg->enc; + OnigAmbigType ambig_flag = reg->ambig_flag; + UChar *s, *q, *sbegin; + UChar *p = reg->p; + char *alloca_base; + StackType *stk_alloc, *stk_base, *stk, *stk_end; + StackType *stkp; /* used as any purpose. */ + StackIndex si; + StackIndex *repeat_stk; + StackIndex *mem_start_stk, *mem_end_stk; +#ifdef USE_COMBINATION_EXPLOSION_CHECK + int scv; + unsigned char* state_check_buff = msa->state_check_buff; + int num_comb_exp_check = reg->num_comb_exp_check; +#endif + n = reg->num_repeat + reg->num_mem * 2; + + STACK_INIT(alloca_base, n, INIT_MATCH_STACK_SIZE); + pop_level = reg->stack_pop_level; + num_mem = reg->num_mem; + repeat_stk = (StackIndex* )alloca_base; + + mem_start_stk = (StackIndex* )(repeat_stk + reg->num_repeat); + mem_end_stk = mem_start_stk + num_mem; + mem_start_stk--; /* for index start from 1, + mem_start_stk[1]..mem_start_stk[num_mem] */ + mem_end_stk--; /* for index start from 1, + mem_end_stk[1]..mem_end_stk[num_mem] */ + for (i = 1; i <= num_mem; i++) { + mem_start_stk[i] = mem_end_stk[i] = INVALID_STACK_INDEX; + } + +#ifdef ONIG_DEBUG_MATCH + fprintf(stderr, "match_at: str: %d, end: %d, start: %d, sprev: %d\n", + (int )str, (int )end, (int )sstart, (int )sprev); + fprintf(stderr, "size: %d, start offset: %d\n", + (int )(end - str), (int )(sstart - str)); +#endif + + STACK_PUSH_ENSURED(STK_ALT, FinishCode); /* bottom stack */ + best_len = ONIG_MISMATCH; + s = (UChar* )sstart; + while (1) { +#ifdef ONIG_DEBUG_MATCH + { + UChar *q, *bp, buf[50]; + int len; + fprintf(stderr, "%4d> \"", (int )(s - str)); + bp = buf; + for (i = 0, q = s; i < 7 && q < end; i++) { + len = enc_len(encode, q); + while (len-- > 0) *bp++ = *q++; + } + if (q < end) { xmemcpy(bp, "...\"", 4); bp += 4; } + else { xmemcpy(bp, "\"", 1); bp += 1; } + *bp = 0; + fputs(buf, stderr); + for (i = 0; i < 20 - (bp - buf); i++) fputc(' ', stderr); + onig_print_compiled_byte_code(stderr, p, NULL, encode); + fprintf(stderr, "\n"); + } +#endif + + sbegin = s; + switch (*p++) { + case OP_END: STAT_OP_IN(OP_END); + n = s - sstart; + if (n > best_len) { + OnigRegion* region; +#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE + if (IS_FIND_LONGEST(option)) { + if (n > msa->best_len) { + msa->best_len = n; + msa->best_s = (UChar* )sstart; + } + else + goto end_best_len; + } +#endif + best_len = n; + region = msa->region; + if (region) { +#ifdef USE_POSIX_REGION_OPTION + if (IS_POSIX_REGION(msa->options)) { + posix_regmatch_t* rmt = (posix_regmatch_t* )region; + + rmt[0].rm_so = sstart - str; + rmt[0].rm_eo = s - str; + for (i = 1; i <= num_mem; i++) { + if (mem_end_stk[i] != INVALID_STACK_INDEX) { + if (BIT_STATUS_AT(reg->bt_mem_start, i)) + rmt[i].rm_so = STACK_AT(mem_start_stk[i])->u.mem.pstr - str; + else + rmt[i].rm_so = (UChar* )((void* )(mem_start_stk[i])) - str; + + rmt[i].rm_eo = (BIT_STATUS_AT(reg->bt_mem_end, i) + ? STACK_AT(mem_end_stk[i])->u.mem.pstr + : (UChar* )((void* )mem_end_stk[i])) - str; + } + else { + rmt[i].rm_so = rmt[i].rm_eo = ONIG_REGION_NOTPOS; + } + } + } + else { +#endif /* USE_POSIX_REGION_OPTION */ + region->beg[0] = sstart - str; + region->end[0] = s - str; + for (i = 1; i <= num_mem; i++) { + if (mem_end_stk[i] != INVALID_STACK_INDEX) { + if (BIT_STATUS_AT(reg->bt_mem_start, i)) + region->beg[i] = STACK_AT(mem_start_stk[i])->u.mem.pstr - str; + else + region->beg[i] = (UChar* )((void* )mem_start_stk[i]) - str; + + region->end[i] = (BIT_STATUS_AT(reg->bt_mem_end, i) + ? STACK_AT(mem_end_stk[i])->u.mem.pstr + : (UChar* )((void* )mem_end_stk[i])) - str; + } + else { + region->beg[i] = region->end[i] = ONIG_REGION_NOTPOS; + } + } + +#ifdef USE_CAPTURE_HISTORY + if (reg->capture_history != 0) { + int r; + OnigCaptureTreeNode* node; + + if (IS_NULL(region->history_root)) { + region->history_root = node = history_node_new(); + CHECK_NULL_RETURN_VAL(node, ONIGERR_MEMORY); + } + else { + node = region->history_root; + history_tree_clear(node); + } + + node->group = 0; + node->beg = sstart - str; + node->end = s - str; + + stkp = stk_base; + r = make_capture_history_tree(region->history_root, &stkp, + stk, (UChar* )str, reg); + if (r < 0) { + best_len = r; /* error code */ + goto finish; + } + } +#endif /* USE_CAPTURE_HISTORY */ +#ifdef USE_POSIX_REGION_OPTION + } /* else IS_POSIX_REGION() */ +#endif + } /* if (region) */ + } /* n > best_len */ + +#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE + end_best_len: +#endif + STAT_OP_OUT; + + if (IS_FIND_CONDITION(option)) { + if (IS_FIND_NOT_EMPTY(option) && s == sstart) { + best_len = ONIG_MISMATCH; + goto fail; /* for retry */ + } + if (IS_FIND_LONGEST(option) && s < end) { + goto fail; /* for retry */ + } + } + + /* default behavior: return first-matching result. */ + goto finish; + break; + + case OP_EXACT1: STAT_OP_IN(OP_EXACT1); +#if 0 + DATA_ENSURE(1); + if (*p != *s) goto fail; + p++; s++; +#endif + if (*p != *s++) goto fail; + DATA_ENSURE(0); + p++; + STAT_OP_OUT; + break; + + case OP_EXACT1_IC: STAT_OP_IN(OP_EXACT1_IC); + { + int len; + UChar *q, *ss, *sp, lowbuf[ONIGENC_MBC_NORMALIZE_MAXLEN]; + + DATA_ENSURE(1); + ss = s; + sp = p; + + len = ONIGENC_MBC_TO_NORMALIZE(encode, ambig_flag, &s, end, lowbuf); + DATA_ENSURE(0); + q = lowbuf; + while (len-- > 0) { + if (*p != *q) { + goto fail; + } + p++; q++; + } + } + STAT_OP_OUT; + break; + + case OP_EXACT2: STAT_OP_IN(OP_EXACT2); + DATA_ENSURE(2); + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + sprev = s; + p++; s++; + STAT_OP_OUT; + continue; + break; + + case OP_EXACT3: STAT_OP_IN(OP_EXACT3); + DATA_ENSURE(3); + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + sprev = s; + p++; s++; + STAT_OP_OUT; + continue; + break; + + case OP_EXACT4: STAT_OP_IN(OP_EXACT4); + DATA_ENSURE(4); + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + sprev = s; + p++; s++; + STAT_OP_OUT; + continue; + break; + + case OP_EXACT5: STAT_OP_IN(OP_EXACT5); + DATA_ENSURE(5); + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + sprev = s; + p++; s++; + STAT_OP_OUT; + continue; + break; + + case OP_EXACTN: STAT_OP_IN(OP_EXACTN); + GET_LENGTH_INC(tlen, p); + DATA_ENSURE(tlen); + while (tlen-- > 0) { + if (*p++ != *s++) goto fail; + } + sprev = s - 1; + STAT_OP_OUT; + continue; + break; + + case OP_EXACTN_IC: STAT_OP_IN(OP_EXACTN_IC); + { + int len; + UChar *ss, *sp, *q, *endp, lowbuf[ONIGENC_MBC_NORMALIZE_MAXLEN]; + + GET_LENGTH_INC(tlen, p); + endp = p + tlen; + + while (p < endp) { + sprev = s; + DATA_ENSURE(1); + ss = s; + sp = p; + + len = ONIGENC_MBC_TO_NORMALIZE(encode, ambig_flag, &s, end, lowbuf); + DATA_ENSURE(0); + q = lowbuf; + while (len-- > 0) { + if (*p != *q) { + goto fail; + } + p++; q++; + } + } + } + + STAT_OP_OUT; + continue; + break; + + case OP_EXACTMB2N1: STAT_OP_IN(OP_EXACTMB2N1); + DATA_ENSURE(2); + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + p++; s++; + STAT_OP_OUT; + break; + + case OP_EXACTMB2N2: STAT_OP_IN(OP_EXACTMB2N2); + DATA_ENSURE(4); + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + p++; s++; + sprev = s; + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + p++; s++; + STAT_OP_OUT; + continue; + break; + + case OP_EXACTMB2N3: STAT_OP_IN(OP_EXACTMB2N3); + DATA_ENSURE(6); + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + p++; s++; + sprev = s; + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + p++; s++; + STAT_OP_OUT; + continue; + break; + + case OP_EXACTMB2N: STAT_OP_IN(OP_EXACTMB2N); + GET_LENGTH_INC(tlen, p); + DATA_ENSURE(tlen * 2); + while (tlen-- > 0) { + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + p++; s++; + } + sprev = s - 2; + STAT_OP_OUT; + continue; + break; + + case OP_EXACTMB3N: STAT_OP_IN(OP_EXACTMB3N); + GET_LENGTH_INC(tlen, p); + DATA_ENSURE(tlen * 3); + while (tlen-- > 0) { + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + p++; s++; + if (*p != *s) goto fail; + p++; s++; + } + sprev = s - 3; + STAT_OP_OUT; + continue; + break; + + case OP_EXACTMBN: STAT_OP_IN(OP_EXACTMBN); + GET_LENGTH_INC(tlen, p); /* mb-len */ + GET_LENGTH_INC(tlen2, p); /* string len */ + tlen2 *= tlen; + DATA_ENSURE(tlen2); + while (tlen2-- > 0) { + if (*p != *s) goto fail; + p++; s++; + } + sprev = s - tlen; + STAT_OP_OUT; + continue; + break; + + case OP_CCLASS: STAT_OP_IN(OP_CCLASS); + DATA_ENSURE(1); + if (BITSET_AT(((BitSetRef )p), *s) == 0) goto fail; + p += SIZE_BITSET; + s += enc_len(encode, s); /* OP_CCLASS can match mb-code. \D, \S */ + STAT_OP_OUT; + break; + + case OP_CCLASS_MB: STAT_OP_IN(OP_CCLASS_MB); + if (! ONIGENC_IS_MBC_HEAD(encode, s)) goto fail; + + cclass_mb: + GET_LENGTH_INC(tlen, p); + { + OnigCodePoint code; + UChar *ss; + int mb_len; + + DATA_ENSURE(1); + mb_len = enc_len(encode, s); + DATA_ENSURE(mb_len); + ss = s; + s += mb_len; + code = ONIGENC_MBC_TO_CODE(encode, ss, s); + +#ifdef PLATFORM_UNALIGNED_WORD_ACCESS + if (! onig_is_in_code_range(p, code)) goto fail; +#else + q = p; + ALIGNMENT_RIGHT(q); + if (! onig_is_in_code_range(q, code)) goto fail; +#endif + } + p += tlen; + STAT_OP_OUT; + break; + + case OP_CCLASS_MIX: STAT_OP_IN(OP_CCLASS_MIX); + DATA_ENSURE(1); + if (ONIGENC_IS_MBC_HEAD(encode, s)) { + p += SIZE_BITSET; + goto cclass_mb; + } + else { + if (BITSET_AT(((BitSetRef )p), *s) == 0) + goto fail; + + p += SIZE_BITSET; + GET_LENGTH_INC(tlen, p); + p += tlen; + s++; + } + STAT_OP_OUT; + break; + + case OP_CCLASS_NOT: STAT_OP_IN(OP_CCLASS_NOT); + DATA_ENSURE(1); + if (BITSET_AT(((BitSetRef )p), *s) != 0) goto fail; + p += SIZE_BITSET; + s += enc_len(encode, s); + STAT_OP_OUT; + break; + + case OP_CCLASS_MB_NOT: STAT_OP_IN(OP_CCLASS_MB_NOT); + DATA_ENSURE(1); + if (! ONIGENC_IS_MBC_HEAD(encode, s)) { + s++; + GET_LENGTH_INC(tlen, p); + p += tlen; + goto cc_mb_not_success; + } + + cclass_mb_not: + GET_LENGTH_INC(tlen, p); + { + OnigCodePoint code; + UChar *ss; + int mb_len = enc_len(encode, s); + + if (s + mb_len > end) { + DATA_ENSURE(1); + s = (UChar* )end; + p += tlen; + goto cc_mb_not_success; + } + + ss = s; + s += mb_len; + code = ONIGENC_MBC_TO_CODE(encode, ss, s); + +#ifdef PLATFORM_UNALIGNED_WORD_ACCESS + if (onig_is_in_code_range(p, code)) goto fail; +#else + q = p; + ALIGNMENT_RIGHT(q); + if (onig_is_in_code_range(q, code)) goto fail; +#endif + } + p += tlen; + + cc_mb_not_success: + STAT_OP_OUT; + break; + + case OP_CCLASS_MIX_NOT: STAT_OP_IN(OP_CCLASS_MIX_NOT); + DATA_ENSURE(1); + if (ONIGENC_IS_MBC_HEAD(encode, s)) { + p += SIZE_BITSET; + goto cclass_mb_not; + } + else { + if (BITSET_AT(((BitSetRef )p), *s) != 0) + goto fail; + + p += SIZE_BITSET; + GET_LENGTH_INC(tlen, p); + p += tlen; + s++; + } + STAT_OP_OUT; + break; + + case OP_CCLASS_NODE: STAT_OP_IN(OP_CCLASS_NODE); + { + OnigCodePoint code; + void *node; + int mb_len; + UChar *ss; + + DATA_ENSURE(1); + GET_POINTER_INC(node, p); + mb_len = enc_len(encode, s); + ss = s; + s += mb_len; + DATA_ENSURE(0); + code = ONIGENC_MBC_TO_CODE(encode, ss, s); + if (is_code_in_cc(mb_len, code, node) == 0) goto fail; + } + STAT_OP_OUT; + break; + + case OP_ANYCHAR: STAT_OP_IN(OP_ANYCHAR); + DATA_ENSURE(1); + n = enc_len(encode, s); + DATA_ENSURE(n); + if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) goto fail; + s += n; + STAT_OP_OUT; + break; + + case OP_ANYCHAR_ML: STAT_OP_IN(OP_ANYCHAR_ML); + DATA_ENSURE(1); + n = enc_len(encode, s); + DATA_ENSURE(n); + s += n; + STAT_OP_OUT; + break; + + case OP_ANYCHAR_STAR: STAT_OP_IN(OP_ANYCHAR_STAR); + while (s < end) { + STACK_PUSH_ALT(p, s, sprev); + n = enc_len(encode, s); + DATA_ENSURE(n); + if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) goto fail; + sprev = s; + s += n; + } + STAT_OP_OUT; + break; + + case OP_ANYCHAR_ML_STAR: STAT_OP_IN(OP_ANYCHAR_ML_STAR); + while (s < end) { + STACK_PUSH_ALT(p, s, sprev); + n = enc_len(encode, s); + if (n > 1) { + DATA_ENSURE(n); + sprev = s; + s += n; + } + else { + sprev = s; + s++; + } + } + STAT_OP_OUT; + break; + + case OP_ANYCHAR_STAR_PEEK_NEXT: STAT_OP_IN(OP_ANYCHAR_STAR_PEEK_NEXT); + while (s < end) { + if (*p == *s) { + STACK_PUSH_ALT(p + 1, s, sprev); + } + n = enc_len(encode, s); + DATA_ENSURE(n); + if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) goto fail; + sprev = s; + s += n; + } + p++; + STAT_OP_OUT; + break; + + case OP_ANYCHAR_ML_STAR_PEEK_NEXT:STAT_OP_IN(OP_ANYCHAR_ML_STAR_PEEK_NEXT); + while (s < end) { + if (*p == *s) { + STACK_PUSH_ALT(p + 1, s, sprev); + } + n = enc_len(encode, s); + if (n >1) { + DATA_ENSURE(n); + sprev = s; + s += n; + } + else { + sprev = s; + s++; + } + } + p++; + STAT_OP_OUT; + break; + +#ifdef USE_COMBINATION_EXPLOSION_CHECK + case OP_STATE_CHECK_ANYCHAR_STAR: STAT_OP_IN(OP_STATE_CHECK_ANYCHAR_STAR); + GET_STATE_CHECK_NUM_INC(mem, p); + while (s < end) { + STATE_CHECK_VAL(scv, mem); + if (scv) goto fail; + + STACK_PUSH_ALT_WITH_STATE_CHECK(p, s, sprev, mem); + n = enc_len(encode, s); + DATA_ENSURE(n); + if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) goto fail; + sprev = s; + s += n; + } + STAT_OP_OUT; + break; + + case OP_STATE_CHECK_ANYCHAR_ML_STAR: + STAT_OP_IN(OP_STATE_CHECK_ANYCHAR_ML_STAR); + + GET_STATE_CHECK_NUM_INC(mem, p); + while (s < end) { + STATE_CHECK_VAL(scv, mem); + if (scv) goto fail; + + STACK_PUSH_ALT_WITH_STATE_CHECK(p, s, sprev, mem); + n = enc_len(encode, s); + if (n > 1) { + DATA_ENSURE(n); + sprev = s; + s += n; + } + else { + sprev = s; + s++; + } + } + STAT_OP_OUT; + break; +#endif /* USE_COMBINATION_EXPLOSION_CHECK */ + + case OP_WORD: STAT_OP_IN(OP_WORD); + DATA_ENSURE(1); + if (! ONIGENC_IS_MBC_WORD(encode, s, end)) + goto fail; + + s += enc_len(encode, s); + STAT_OP_OUT; + break; + + case OP_NOT_WORD: STAT_OP_IN(OP_NOT_WORD); + DATA_ENSURE(1); + if (ONIGENC_IS_MBC_WORD(encode, s, end)) + goto fail; + + s += enc_len(encode, s); + STAT_OP_OUT; + break; + + case OP_WORD_BOUND: STAT_OP_IN(OP_WORD_BOUND); + if (ON_STR_BEGIN(s)) { + DATA_ENSURE(1); + if (! ONIGENC_IS_MBC_WORD(encode, s, end)) + goto fail; + } + else if (ON_STR_END(s)) { + if (! ONIGENC_IS_MBC_WORD(encode, sprev, end)) + goto fail; + } + else { + if (ONIGENC_IS_MBC_WORD(encode, s, end) + == ONIGENC_IS_MBC_WORD(encode, sprev, end)) + goto fail; + } + STAT_OP_OUT; + continue; + break; + + case OP_NOT_WORD_BOUND: STAT_OP_IN(OP_NOT_WORD_BOUND); + if (ON_STR_BEGIN(s)) { + if (DATA_ENSURE_CHECK(1) && ONIGENC_IS_MBC_WORD(encode, s, end)) + goto fail; + } + else if (ON_STR_END(s)) { + if (ONIGENC_IS_MBC_WORD(encode, sprev, end)) + goto fail; + } + else { + if (ONIGENC_IS_MBC_WORD(encode, s, end) + != ONIGENC_IS_MBC_WORD(encode, sprev, end)) + goto fail; + } + STAT_OP_OUT; + continue; + break; + +#ifdef USE_WORD_BEGIN_END + case OP_WORD_BEGIN: STAT_OP_IN(OP_WORD_BEGIN); + if (DATA_ENSURE_CHECK(1) && ONIGENC_IS_MBC_WORD(encode, s, end)) { + if (ON_STR_BEGIN(s) || !ONIGENC_IS_MBC_WORD(encode, sprev, end)) { + STAT_OP_OUT; + continue; + } + } + goto fail; + break; + + case OP_WORD_END: STAT_OP_IN(OP_WORD_END); + if (!ON_STR_BEGIN(s) && ONIGENC_IS_MBC_WORD(encode, sprev, end)) { + if (ON_STR_END(s) || !ONIGENC_IS_MBC_WORD(encode, s, end)) { + STAT_OP_OUT; + continue; + } + } + goto fail; + break; +#endif + + case OP_BEGIN_BUF: STAT_OP_IN(OP_BEGIN_BUF); + if (! ON_STR_BEGIN(s)) goto fail; + + STAT_OP_OUT; + continue; + break; + + case OP_END_BUF: STAT_OP_IN(OP_END_BUF); + if (! ON_STR_END(s)) goto fail; + + STAT_OP_OUT; + continue; + break; + + case OP_BEGIN_LINE: STAT_OP_IN(OP_BEGIN_LINE); + if (ON_STR_BEGIN(s)) { + if (IS_NOTBOL(msa->options)) goto fail; + STAT_OP_OUT; + continue; + } + else if (ONIGENC_IS_MBC_NEWLINE(encode, sprev, end) && !ON_STR_END(s)) { + STAT_OP_OUT; + continue; + } + goto fail; + break; + + case OP_END_LINE: STAT_OP_IN(OP_END_LINE); + if (ON_STR_END(s)) { +#ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE + if (IS_EMPTY_STR || !ONIGENC_IS_MBC_NEWLINE(encode, sprev, end)) { +#endif + if (IS_NOTEOL(msa->options)) goto fail; + STAT_OP_OUT; + continue; +#ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE + } +#endif + } + else if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) { + STAT_OP_OUT; + continue; + } +#ifdef USE_CRNL_AS_LINE_TERMINATOR + else if (ONIGENC_IS_MBC_CRNL(encode, s, end)) { + STAT_OP_OUT; + continue; + } +#endif + goto fail; + break; + + case OP_SEMI_END_BUF: STAT_OP_IN(OP_SEMI_END_BUF); + if (ON_STR_END(s)) { +#ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE + if (IS_EMPTY_STR || !ONIGENC_IS_MBC_NEWLINE(encode, sprev, end)) { +#endif + if (IS_NOTEOL(msa->options)) goto fail; /* Is it needed? */ + STAT_OP_OUT; + continue; +#ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE + } +#endif + } + else if (ONIGENC_IS_MBC_NEWLINE(encode, s, end) && + ON_STR_END(s + enc_len(encode, s))) { + STAT_OP_OUT; + continue; + } +#ifdef USE_CRNL_AS_LINE_TERMINATOR + else if (ONIGENC_IS_MBC_CRNL(encode, s, end)) { + UChar* ss = s + enc_len(encode, s); + if (ON_STR_END(ss + enc_len(encode, ss))) { + STAT_OP_OUT; + continue; + } + } +#endif + goto fail; + break; + + case OP_BEGIN_POSITION: STAT_OP_IN(OP_BEGIN_POSITION); + if (s != msa->start) + goto fail; + + STAT_OP_OUT; + continue; + break; + + case OP_MEMORY_START_PUSH: STAT_OP_IN(OP_MEMORY_START_PUSH); + GET_MEMNUM_INC(mem, p); + STACK_PUSH_MEM_START(mem, s); + STAT_OP_OUT; + continue; + break; + + case OP_MEMORY_START: STAT_OP_IN(OP_MEMORY_START); + GET_MEMNUM_INC(mem, p); + mem_start_stk[mem] = (StackIndex )((void* )s); + STAT_OP_OUT; + continue; + break; + + case OP_MEMORY_END_PUSH: STAT_OP_IN(OP_MEMORY_END_PUSH); + GET_MEMNUM_INC(mem, p); + STACK_PUSH_MEM_END(mem, s); + STAT_OP_OUT; + continue; + break; + + case OP_MEMORY_END: STAT_OP_IN(OP_MEMORY_END); + GET_MEMNUM_INC(mem, p); + mem_end_stk[mem] = (StackIndex )((void* )s); + STAT_OP_OUT; + continue; + break; + +#ifdef USE_SUBEXP_CALL + case OP_MEMORY_END_PUSH_REC: STAT_OP_IN(OP_MEMORY_END_PUSH_REC); + GET_MEMNUM_INC(mem, p); + STACK_GET_MEM_START(mem, stkp); /* should be before push mem-end. */ + STACK_PUSH_MEM_END(mem, s); + mem_start_stk[mem] = GET_STACK_INDEX(stkp); + STAT_OP_OUT; + continue; + break; + + case OP_MEMORY_END_REC: STAT_OP_IN(OP_MEMORY_END_REC); + GET_MEMNUM_INC(mem, p); + mem_end_stk[mem] = (StackIndex )((void* )s); + STACK_GET_MEM_START(mem, stkp); + + if (BIT_STATUS_AT(reg->bt_mem_start, mem)) + mem_start_stk[mem] = GET_STACK_INDEX(stkp); + else + mem_start_stk[mem] = (StackIndex )((void* )stkp->u.mem.pstr); + + STACK_PUSH_MEM_END_MARK(mem); + STAT_OP_OUT; + continue; + break; +#endif + + case OP_BACKREF1: STAT_OP_IN(OP_BACKREF1); + mem = 1; + goto backref; + break; + + case OP_BACKREF2: STAT_OP_IN(OP_BACKREF2); + mem = 2; + goto backref; + break; + + case OP_BACKREFN: STAT_OP_IN(OP_BACKREFN); + GET_MEMNUM_INC(mem, p); + backref: + { + int len; + UChar *pstart, *pend; + + /* if you want to remove following line, + you should check in parse and compile time. */ + if (mem > num_mem) goto fail; + if (mem_end_stk[mem] == INVALID_STACK_INDEX) goto fail; + if (mem_start_stk[mem] == INVALID_STACK_INDEX) goto fail; + + if (BIT_STATUS_AT(reg->bt_mem_start, mem)) + pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr; + else + pstart = (UChar* )((void* )mem_start_stk[mem]); + + pend = (BIT_STATUS_AT(reg->bt_mem_end, mem) + ? STACK_AT(mem_end_stk[mem])->u.mem.pstr + : (UChar* )((void* )mem_end_stk[mem])); + n = pend - pstart; + DATA_ENSURE(n); + sprev = s; + STRING_CMP(pstart, s, n); + while (sprev + (len = enc_len(encode, sprev)) < s) + sprev += len; + + STAT_OP_OUT; + continue; + } + break; + + case OP_BACKREFN_IC: STAT_OP_IN(OP_BACKREFN_IC); + GET_MEMNUM_INC(mem, p); + { + int len; + UChar *pstart, *pend; + + /* if you want to remove following line, + you should check in parse and compile time. */ + if (mem > num_mem) goto fail; + if (mem_end_stk[mem] == INVALID_STACK_INDEX) goto fail; + if (mem_start_stk[mem] == INVALID_STACK_INDEX) goto fail; + + if (BIT_STATUS_AT(reg->bt_mem_start, mem)) + pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr; + else + pstart = (UChar* )((void* )mem_start_stk[mem]); + + pend = (BIT_STATUS_AT(reg->bt_mem_end, mem) + ? STACK_AT(mem_end_stk[mem])->u.mem.pstr + : (UChar* )((void* )mem_end_stk[mem])); + n = pend - pstart; + DATA_ENSURE(n); + sprev = s; + STRING_CMP_IC(ambig_flag, pstart, &s, n); + while (sprev + (len = enc_len(encode, sprev)) < s) + sprev += len; + + STAT_OP_OUT; + continue; + } + break; + + case OP_BACKREF_MULTI: STAT_OP_IN(OP_BACKREF_MULTI); + { + int len, is_fail; + UChar *pstart, *pend, *swork; + + GET_LENGTH_INC(tlen, p); + for (i = 0; i < tlen; i++) { + GET_MEMNUM_INC(mem, p); + + if (mem_end_stk[mem] == INVALID_STACK_INDEX) continue; + if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue; + + if (BIT_STATUS_AT(reg->bt_mem_start, mem)) + pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr; + else + pstart = (UChar* )((void* )mem_start_stk[mem]); + + pend = (BIT_STATUS_AT(reg->bt_mem_end, mem) + ? STACK_AT(mem_end_stk[mem])->u.mem.pstr + : (UChar* )((void* )mem_end_stk[mem])); + n = pend - pstart; + DATA_ENSURE(n); + sprev = s; + swork = s; + STRING_CMP_VALUE(pstart, swork, n, is_fail); + if (is_fail) continue; + s = swork; + while (sprev + (len = enc_len(encode, sprev)) < s) + sprev += len; + + p += (SIZE_MEMNUM * (tlen - i - 1)); + break; /* success */ + } + if (i == tlen) goto fail; + STAT_OP_OUT; + continue; + } + break; + + case OP_BACKREF_MULTI_IC: STAT_OP_IN(OP_BACKREF_MULTI_IC); + { + int len, is_fail; + UChar *pstart, *pend, *swork; + + GET_LENGTH_INC(tlen, p); + for (i = 0; i < tlen; i++) { + GET_MEMNUM_INC(mem, p); + + if (mem_end_stk[mem] == INVALID_STACK_INDEX) continue; + if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue; + + if (BIT_STATUS_AT(reg->bt_mem_start, mem)) + pstart = STACK_AT(mem_start_stk[mem])->u.mem.pstr; + else + pstart = (UChar* )((void* )mem_start_stk[mem]); + + pend = (BIT_STATUS_AT(reg->bt_mem_end, mem) + ? STACK_AT(mem_end_stk[mem])->u.mem.pstr + : (UChar* )((void* )mem_end_stk[mem])); + n = pend - pstart; + DATA_ENSURE(n); + sprev = s; + swork = s; + STRING_CMP_VALUE_IC(ambig_flag, pstart, &swork, n, is_fail); + if (is_fail) continue; + s = swork; + while (sprev + (len = enc_len(encode, sprev)) < s) + sprev += len; + + p += (SIZE_MEMNUM * (tlen - i - 1)); + break; /* success */ + } + if (i == tlen) goto fail; + STAT_OP_OUT; + continue; + } + break; + +#ifdef USE_BACKREF_AT_LEVEL + case OP_BACKREF_AT_LEVEL: + { + int len; + OnigOptionType ic; + LengthType level; + + GET_OPTION_INC(ic, p); + GET_LENGTH_INC(level, p); + GET_LENGTH_INC(tlen, p); + + sprev = s; + if (backref_match_at_nested_level(reg, stk, stk_base, ic, ambig_flag + , (int )level, (int )tlen, p, &s, end)) { + while (sprev + (len = enc_len(encode, sprev)) < s) + sprev += len; + + p += (SIZE_MEMNUM * tlen); + } + else + goto fail; + + STAT_OP_OUT; + continue; + } + + break; +#endif + + case OP_SET_OPTION_PUSH: STAT_OP_IN(OP_SET_OPTION_PUSH); + GET_OPTION_INC(option, p); + STACK_PUSH_ALT(p, s, sprev); + p += SIZE_OP_SET_OPTION + SIZE_OP_FAIL; + STAT_OP_OUT; + continue; + break; + + case OP_SET_OPTION: STAT_OP_IN(OP_SET_OPTION); + GET_OPTION_INC(option, p); + STAT_OP_OUT; + continue; + break; + + case OP_NULL_CHECK_START: STAT_OP_IN(OP_NULL_CHECK_START); + GET_MEMNUM_INC(mem, p); /* mem: null check id */ + STACK_PUSH_NULL_CHECK_START(mem, s); + STAT_OP_OUT; + continue; + break; + + case OP_NULL_CHECK_END: STAT_OP_IN(OP_NULL_CHECK_END); + { + int isnull; + + GET_MEMNUM_INC(mem, p); /* mem: null check id */ + STACK_NULL_CHECK(isnull, mem, s); + if (isnull) { +#ifdef ONIG_DEBUG_MATCH + fprintf(stderr, "NULL_CHECK_END: skip id:%d, s:%d\n", + (int )mem, (int )s); +#endif + null_check_found: + /* empty loop founded, skip next instruction */ + switch (*p++) { + case OP_JUMP: + case OP_PUSH: + p += SIZE_RELADDR; + break; + case OP_REPEAT_INC: + case OP_REPEAT_INC_NG: + case OP_REPEAT_INC_SG: + case OP_REPEAT_INC_NG_SG: + p += SIZE_MEMNUM; + break; + default: + goto unexpected_bytecode_error; + break; + } + } + } + STAT_OP_OUT; + continue; + break; + +#ifdef USE_INFINITE_REPEAT_MONOMANIAC_MEM_STATUS_CHECK + case OP_NULL_CHECK_END_MEMST: STAT_OP_IN(OP_NULL_CHECK_END_MEMST); + { + int isnull; + + GET_MEMNUM_INC(mem, p); /* mem: null check id */ + STACK_NULL_CHECK_MEMST(isnull, mem, s, reg); + if (isnull) { +#ifdef ONIG_DEBUG_MATCH + fprintf(stderr, "NULL_CHECK_END_MEMST: skip id:%d, s:%d\n", + (int )mem, (int )s); +#endif + if (isnull == -1) goto fail; + goto null_check_found; + } + } + STAT_OP_OUT; + continue; + break; +#endif + +#ifdef USE_SUBEXP_CALL + case OP_NULL_CHECK_END_MEMST_PUSH: + STAT_OP_IN(OP_NULL_CHECK_END_MEMST_PUSH); + { + int isnull; + + GET_MEMNUM_INC(mem, p); /* mem: null check id */ +#ifdef USE_INFINITE_REPEAT_MONOMANIAC_MEM_STATUS_CHECK + STACK_NULL_CHECK_MEMST_REC(isnull, mem, s, reg); +#else + STACK_NULL_CHECK_REC(isnull, mem, s); +#endif + if (isnull) { +#ifdef ONIG_DEBUG_MATCH + fprintf(stderr, "NULL_CHECK_END_MEMST_PUSH: skip id:%d, s:%d\n", + (int )mem, (int )s); +#endif + if (isnull == -1) goto fail; + goto null_check_found; + } + else { + STACK_PUSH_NULL_CHECK_END(mem); + } + } + STAT_OP_OUT; + continue; + break; +#endif + + case OP_JUMP: STAT_OP_IN(OP_JUMP); + GET_RELADDR_INC(addr, p); + p += addr; + STAT_OP_OUT; + CHECK_INTERRUPT_IN_MATCH_AT; + continue; + break; + + case OP_PUSH: STAT_OP_IN(OP_PUSH); + GET_RELADDR_INC(addr, p); + STACK_PUSH_ALT(p + addr, s, sprev); + STAT_OP_OUT; + continue; + break; + +#ifdef USE_COMBINATION_EXPLOSION_CHECK + case OP_STATE_CHECK_PUSH: STAT_OP_IN(OP_STATE_CHECK_PUSH); + GET_STATE_CHECK_NUM_INC(mem, p); + STATE_CHECK_VAL(scv, mem); + if (scv) goto fail; + + GET_RELADDR_INC(addr, p); + STACK_PUSH_ALT_WITH_STATE_CHECK(p + addr, s, sprev, mem); + STAT_OP_OUT; + continue; + break; + + case OP_STATE_CHECK_PUSH_OR_JUMP: STAT_OP_IN(OP_STATE_CHECK_PUSH_OR_JUMP); + GET_STATE_CHECK_NUM_INC(mem, p); + GET_RELADDR_INC(addr, p); + STATE_CHECK_VAL(scv, mem); + if (scv) { + p += addr; + } + else { + STACK_PUSH_ALT_WITH_STATE_CHECK(p + addr, s, sprev, mem); + } + STAT_OP_OUT; + continue; + break; + + case OP_STATE_CHECK: STAT_OP_IN(OP_STATE_CHECK); + GET_STATE_CHECK_NUM_INC(mem, p); + STATE_CHECK_VAL(scv, mem); + if (scv) goto fail; + + STACK_PUSH_STATE_CHECK(s, mem); + STAT_OP_OUT; + continue; + break; +#endif /* USE_COMBINATION_EXPLOSION_CHECK */ + + case OP_POP: STAT_OP_IN(OP_POP); + STACK_POP_ONE; + STAT_OP_OUT; + continue; + break; + + case OP_PUSH_OR_JUMP_EXACT1: STAT_OP_IN(OP_PUSH_OR_JUMP_EXACT1); + GET_RELADDR_INC(addr, p); + if (*p == *s && DATA_ENSURE_CHECK(1)) { + p++; + STACK_PUSH_ALT(p + addr, s, sprev); + STAT_OP_OUT; + continue; + } + p += (addr + 1); + STAT_OP_OUT; + continue; + break; + + case OP_PUSH_IF_PEEK_NEXT: STAT_OP_IN(OP_PUSH_IF_PEEK_NEXT); + GET_RELADDR_INC(addr, p); + if (*p == *s) { + p++; + STACK_PUSH_ALT(p + addr, s, sprev); + STAT_OP_OUT; + continue; + } + p++; + STAT_OP_OUT; + continue; + break; + + case OP_REPEAT: STAT_OP_IN(OP_REPEAT); + { + GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */ + GET_RELADDR_INC(addr, p); + + STACK_ENSURE(1); + repeat_stk[mem] = GET_STACK_INDEX(stk); + STACK_PUSH_REPEAT(mem, p); + + if (reg->repeat_range[mem].lower == 0) { + STACK_PUSH_ALT(p + addr, s, sprev); + } + } + STAT_OP_OUT; + continue; + break; + + case OP_REPEAT_NG: STAT_OP_IN(OP_REPEAT_NG); + { + GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */ + GET_RELADDR_INC(addr, p); + + STACK_ENSURE(1); + repeat_stk[mem] = GET_STACK_INDEX(stk); + STACK_PUSH_REPEAT(mem, p); + + if (reg->repeat_range[mem].lower == 0) { + STACK_PUSH_ALT(p, s, sprev); + p += addr; + } + } + STAT_OP_OUT; + continue; + break; + + case OP_REPEAT_INC: STAT_OP_IN(OP_REPEAT_INC); + GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */ + si = repeat_stk[mem]; + stkp = STACK_AT(si); + + repeat_inc: + stkp->u.repeat.count++; + if (stkp->u.repeat.count >= reg->repeat_range[mem].upper) { + /* end of repeat. Nothing to do. */ + } + else if (stkp->u.repeat.count >= reg->repeat_range[mem].lower) { + STACK_PUSH_ALT(p, s, sprev); + p = STACK_AT(si)->u.repeat.pcode; /* Don't use stkp after PUSH. */ + } + else { + p = stkp->u.repeat.pcode; + } + STACK_PUSH_REPEAT_INC(si); + STAT_OP_OUT; + CHECK_INTERRUPT_IN_MATCH_AT; + continue; + break; + + case OP_REPEAT_INC_SG: STAT_OP_IN(OP_REPEAT_INC_SG); + GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */ + STACK_GET_REPEAT(mem, stkp); + si = GET_STACK_INDEX(stkp); + goto repeat_inc; + break; + + case OP_REPEAT_INC_NG: STAT_OP_IN(OP_REPEAT_INC_NG); + GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */ + si = repeat_stk[mem]; + stkp = STACK_AT(si); + + repeat_inc_ng: + stkp->u.repeat.count++; + if (stkp->u.repeat.count < reg->repeat_range[mem].upper) { + if (stkp->u.repeat.count >= reg->repeat_range[mem].lower) { + UChar* pcode = stkp->u.repeat.pcode; + + STACK_PUSH_REPEAT_INC(si); + STACK_PUSH_ALT(pcode, s, sprev); + } + else { + p = stkp->u.repeat.pcode; + STACK_PUSH_REPEAT_INC(si); + } + } + else if (stkp->u.repeat.count == reg->repeat_range[mem].upper) { + STACK_PUSH_REPEAT_INC(si); + } + STAT_OP_OUT; + CHECK_INTERRUPT_IN_MATCH_AT; + continue; + break; + + case OP_REPEAT_INC_NG_SG: STAT_OP_IN(OP_REPEAT_INC_NG_SG); + GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */ + STACK_GET_REPEAT(mem, stkp); + si = GET_STACK_INDEX(stkp); + goto repeat_inc_ng; + break; + + case OP_PUSH_POS: STAT_OP_IN(OP_PUSH_POS); + STACK_PUSH_POS(s, sprev); + STAT_OP_OUT; + continue; + break; + + case OP_POP_POS: STAT_OP_IN(OP_POP_POS); + { + STACK_POS_END(stkp); + s = stkp->u.state.pstr; + sprev = stkp->u.state.pstr_prev; + } + STAT_OP_OUT; + continue; + break; + + case OP_PUSH_POS_NOT: STAT_OP_IN(OP_PUSH_POS_NOT); + GET_RELADDR_INC(addr, p); + STACK_PUSH_POS_NOT(p + addr, s, sprev); + STAT_OP_OUT; + continue; + break; + + case OP_FAIL_POS: STAT_OP_IN(OP_FAIL_POS); + STACK_POP_TIL_POS_NOT; + goto fail; + break; + + case OP_PUSH_STOP_BT: STAT_OP_IN(OP_PUSH_STOP_BT); + STACK_PUSH_STOP_BT; + STAT_OP_OUT; + continue; + break; + + case OP_POP_STOP_BT: STAT_OP_IN(OP_POP_STOP_BT); + STACK_STOP_BT_END; + STAT_OP_OUT; + continue; + break; + + case OP_LOOK_BEHIND: STAT_OP_IN(OP_LOOK_BEHIND); + GET_LENGTH_INC(tlen, p); + s = (UChar* )ONIGENC_STEP_BACK(encode, str, s, (int )tlen); + if (IS_NULL(s)) goto fail; + sprev = (UChar* )onigenc_get_prev_char_head(encode, str, s); + STAT_OP_OUT; + continue; + break; + + case OP_PUSH_LOOK_BEHIND_NOT: STAT_OP_IN(OP_PUSH_LOOK_BEHIND_NOT); + GET_RELADDR_INC(addr, p); + GET_LENGTH_INC(tlen, p); + q = (UChar* )ONIGENC_STEP_BACK(encode, str, s, (int )tlen); + if (IS_NULL(q)) { + /* too short case -> success. ex. /(?<!XXX)a/.match("a") + If you want to change to fail, replace following line. */ + p += addr; + /* goto fail; */ + } + else { + STACK_PUSH_LOOK_BEHIND_NOT(p + addr, s, sprev); + s = q; + sprev = (UChar* )onigenc_get_prev_char_head(encode, str, s); + } + STAT_OP_OUT; + continue; + break; + + case OP_FAIL_LOOK_BEHIND_NOT: STAT_OP_IN(OP_FAIL_LOOK_BEHIND_NOT); + STACK_POP_TIL_LOOK_BEHIND_NOT; + goto fail; + break; + +#ifdef USE_SUBEXP_CALL + case OP_CALL: STAT_OP_IN(OP_CALL); + GET_ABSADDR_INC(addr, p); + STACK_PUSH_CALL_FRAME(p); + p = reg->p + addr; + STAT_OP_OUT; + continue; + break; + + case OP_RETURN: STAT_OP_IN(OP_RETURN); + STACK_RETURN(p); + STACK_PUSH_RETURN; + STAT_OP_OUT; + continue; + break; +#endif + + case OP_FINISH: + goto finish; + break; + + fail: + STAT_OP_OUT; + /* fall */ + case OP_FAIL: STAT_OP_IN(OP_FAIL); + STACK_POP; + p = stk->u.state.pcode; + s = stk->u.state.pstr; + sprev = stk->u.state.pstr_prev; + +#ifdef USE_COMBINATION_EXPLOSION_CHECK + if (stk->u.state.state_check != 0) { + stk->type = STK_STATE_CHECK_MARK; + stk++; + } +#endif + + STAT_OP_OUT; + continue; + break; + + default: + goto bytecode_error; + + } /* end of switch */ + sprev = sbegin; + } /* end of while(1) */ + + finish: + STACK_SAVE; + return best_len; + +#ifdef ONIG_DEBUG + stack_error: + STACK_SAVE; + return ONIGERR_STACK_BUG; +#endif + + bytecode_error: + STACK_SAVE; + return ONIGERR_UNDEFINED_BYTECODE; + + unexpected_bytecode_error: + STACK_SAVE; + return ONIGERR_UNEXPECTED_BYTECODE; +} + + +static UChar* +slow_search(OnigEncoding enc, UChar* target, UChar* target_end, + const UChar* text, const UChar* text_end, UChar* text_range) +{ + UChar *t, *p, *s, *end; + + end = (UChar* )text_end; + end -= target_end - target - 1; + if (end > text_range) + end = text_range; + + s = (UChar* )text; + + while (s < end) { + if (*s == *target) { + p = s + 1; + t = target + 1; + while (t < target_end) { + if (*t != *p++) + break; + t++; + } + if (t == target_end) + return s; + } + s += enc_len(enc, s); + } + + return (UChar* )NULL; +} + +static int +str_lower_case_match(OnigEncoding enc, int ambig_flag, + const UChar* t, const UChar* tend, + const UChar* p, const UChar* end) +{ + int lowlen; + UChar *q, lowbuf[ONIGENC_MBC_NORMALIZE_MAXLEN]; + const UChar* tsave; + const UChar* psave; + + tsave = t; + psave = p; + + while (t < tend) { + lowlen = ONIGENC_MBC_TO_NORMALIZE(enc, ambig_flag, &p, end, lowbuf); + q = lowbuf; + while (lowlen > 0) { + if (*t++ != *q++) { + return 0; + } + lowlen--; + } + } + + return 1; +} + +static UChar* +slow_search_ic(OnigEncoding enc, int ambig_flag, + UChar* target, UChar* target_end, + const UChar* text, const UChar* text_end, UChar* text_range) +{ + UChar *s, *end; + + end = (UChar* )text_end; + end -= target_end - target - 1; + if (end > text_range) + end = text_range; + + s = (UChar* )text; + + while (s < end) { + if (str_lower_case_match(enc, ambig_flag, target, target_end, s, text_end)) + return s; + + s += enc_len(enc, s); + } + + return (UChar* )NULL; +} + +static UChar* +slow_search_backward(OnigEncoding enc, UChar* target, UChar* target_end, + const UChar* text, const UChar* adjust_text, + const UChar* text_end, const UChar* text_start) +{ + UChar *t, *p, *s; + + s = (UChar* )text_end; + s -= (target_end - target); + if (s > text_start) + s = (UChar* )text_start; + else + s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, adjust_text, s); + + while (s >= text) { + if (*s == *target) { + p = s + 1; + t = target + 1; + while (t < target_end) { + if (*t != *p++) + break; + t++; + } + if (t == target_end) + return s; + } + s = (UChar* )onigenc_get_prev_char_head(enc, adjust_text, s); + } + + return (UChar* )NULL; +} + +static UChar* +slow_search_backward_ic(OnigEncoding enc, int ambig_flag, + UChar* target, UChar* target_end, + const UChar* text, const UChar* adjust_text, + const UChar* text_end, const UChar* text_start) +{ + UChar *s; + + s = (UChar* )text_end; + s -= (target_end - target); + if (s > text_start) + s = (UChar* )text_start; + else + s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, adjust_text, s); + + while (s >= text) { + if (str_lower_case_match(enc, ambig_flag, + target, target_end, s, text_end)) + return s; + + s = (UChar* )onigenc_get_prev_char_head(enc, adjust_text, s); + } + + return (UChar* )NULL; +} + +static UChar* +bm_search_notrev(regex_t* reg, const UChar* target, const UChar* target_end, + const UChar* text, const UChar* text_end, + const UChar* text_range) +{ + const UChar *s, *se, *t, *p, *end; + const UChar *tail; + int skip, tlen1; + +#ifdef ONIG_DEBUG_SEARCH + fprintf(stderr, "bm_search_notrev: text: %d, text_end: %d, text_range: %d\n", + (int )text, (int )text_end, (int )text_range); +#endif + + tail = target_end - 1; + tlen1 = tail - target; + end = text_range; + if (end + tlen1 > text_end) + end = text_end - tlen1; + + s = text; + + if (IS_NULL(reg->int_map)) { + while (s < end) { + p = se = s + tlen1; + t = tail; + while (t >= target && *p == *t) { + p--; t--; + } + if (t < target) return (UChar* )s; + + skip = reg->map[*se]; + t = s; + do { + s += enc_len(reg->enc, s); + } while ((s - t) < skip && s < end); + } + } + else { + while (s < end) { + p = se = s + tlen1; + t = tail; + while (t >= target && *p == *t) { + p--; t--; + } + if (t < target) return (UChar* )s; + + skip = reg->int_map[*se]; + t = s; + do { + s += enc_len(reg->enc, s); + } while ((s - t) < skip && s < end); + } + } + + return (UChar* )NULL; +} + +static UChar* +bm_search(regex_t* reg, const UChar* target, const UChar* target_end, + const UChar* text, const UChar* text_end, const UChar* text_range) +{ + const UChar *s, *t, *p, *end; + const UChar *tail; + + end = text_range + (target_end - target) - 1; + if (end > text_end) + end = text_end; + + tail = target_end - 1; + s = text + (target_end - target) - 1; + if (IS_NULL(reg->int_map)) { + while (s < end) { + p = s; + t = tail; + while (t >= target && *p == *t) { + p--; t--; + } + if (t < target) return (UChar* )(p + 1); + s += reg->map[*s]; + } + } + else { /* see int_map[] */ + while (s < end) { + p = s; + t = tail; + while (t >= target && *p == *t) { + p--; t--; + } + if (t < target) return (UChar* )(p + 1); + s += reg->int_map[*s]; + } + } + return (UChar* )NULL; +} + +static int +set_bm_backward_skip(UChar* s, UChar* end, OnigEncoding enc, int** skip) + +{ + int i, len; + + if (IS_NULL(*skip)) { + *skip = (int* )xmalloc(sizeof(int) * ONIG_CHAR_TABLE_SIZE); + if (IS_NULL(*skip)) return ONIGERR_MEMORY; + } + + len = end - s; + for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) + (*skip)[i] = len; + + for (i = len - 1; i > 0; i--) + (*skip)[s[i]] = i; + + return 0; +} + +static UChar* +bm_search_backward(regex_t* reg, const UChar* target, const UChar* target_end, + const UChar* text, const UChar* adjust_text, + const UChar* text_end, const UChar* text_start) +{ + const UChar *s, *t, *p; + + s = text_end - (target_end - target); + if (text_start < s) + s = text_start; + else + s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, adjust_text, s); + + while (s >= text) { + p = s; + t = target; + while (t < target_end && *p == *t) { + p++; t++; + } + if (t == target_end) + return (UChar* )s; + + s -= reg->int_map_backward[*s]; + s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, adjust_text, s); + } + + return (UChar* )NULL; +} + +static UChar* +map_search(OnigEncoding enc, UChar map[], + const UChar* text, const UChar* text_range) +{ + const UChar *s = text; + + while (s < text_range) { + if (map[*s]) return (UChar* )s; + + s += enc_len(enc, s); + } + return (UChar* )NULL; +} + +static UChar* +map_search_backward(OnigEncoding enc, UChar map[], + const UChar* text, const UChar* adjust_text, + const UChar* text_start) +{ + const UChar *s = text_start; + + while (s >= text) { + if (map[*s]) return (UChar* )s; + + s = onigenc_get_prev_char_head(enc, adjust_text, s); + } + return (UChar* )NULL; +} + +extern int +onig_match(regex_t* reg, const UChar* str, const UChar* end, const UChar* at, OnigRegion* region, + OnigOptionType option) +{ + int r; + UChar *prev; + MatchArg msa; + +#if defined(USE_RECOMPILE_API) && defined(USE_MULTI_THREAD_SYSTEM) + start: + THREAD_ATOMIC_START; + if (ONIG_STATE(reg) >= ONIG_STATE_NORMAL) { + ONIG_STATE_INC(reg); + if (IS_NOT_NULL(reg->chain) && ONIG_STATE(reg) == ONIG_STATE_NORMAL) { + onig_chain_reduce(reg); + ONIG_STATE_INC(reg); + } + } + else { + int n; + + THREAD_ATOMIC_END; + n = 0; + while (ONIG_STATE(reg) < ONIG_STATE_NORMAL) { + if (++n > THREAD_PASS_LIMIT_COUNT) + return ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT; + THREAD_PASS; + } + goto start; + } + THREAD_ATOMIC_END; +#endif /* USE_RECOMPILE_API && USE_MULTI_THREAD_SYSTEM */ + + MATCH_ARG_INIT(msa, option, region, at); +#ifdef USE_COMBINATION_EXPLOSION_CHECK + { + int offset = at - str; + STATE_CHECK_BUFF_INIT(msa, end - str, offset, reg->num_comb_exp_check); + } +#endif + + if (region +#ifdef USE_POSIX_REGION_OPTION + && !IS_POSIX_REGION(option) +#endif + ) { + r = onig_region_resize_clear(region, reg->num_mem + 1); + } + else + r = 0; + + if (r == 0) { + prev = (UChar* )onigenc_get_prev_char_head(reg->enc, str, at); + r = match_at(reg, str, end, at, prev, &msa); + } + + MATCH_ARG_FREE(msa); + ONIG_STATE_DEC_THREAD(reg); + return r; +} + +static int +forward_search_range(regex_t* reg, const UChar* str, const UChar* end, UChar* s, + UChar* range, UChar** low, UChar** high, UChar** low_prev) +{ + UChar *p, *pprev = (UChar* )NULL; + +#ifdef ONIG_DEBUG_SEARCH + fprintf(stderr, "forward_search_range: str: %d, end: %d, s: %d, range: %d\n", + (int )str, (int )end, (int )s, (int )range); +#endif + + p = s; + if (reg->dmin > 0) { + if (ONIGENC_IS_SINGLEBYTE(reg->enc)) { + p += reg->dmin; + } + else { + UChar *q = p + reg->dmin; + while (p < q) p += enc_len(reg->enc, p); + } + } + + retry: + switch (reg->optimize) { + case ONIG_OPTIMIZE_EXACT: + p = slow_search(reg->enc, reg->exact, reg->exact_end, p, end, range); + break; + case ONIG_OPTIMIZE_EXACT_IC: + p = slow_search_ic(reg->enc, reg->ambig_flag, + reg->exact, reg->exact_end, p, end, range); + break; + + case ONIG_OPTIMIZE_EXACT_BM: + p = bm_search(reg, reg->exact, reg->exact_end, p, end, range); + break; + + case ONIG_OPTIMIZE_EXACT_BM_NOT_REV: + p = bm_search_notrev(reg, reg->exact, reg->exact_end, p, end, range); + break; + + case ONIG_OPTIMIZE_MAP: + p = map_search(reg->enc, reg->map, p, range); + break; + } + + if (p && p < range) { + if (p - reg->dmin < s) { + retry_gate: + pprev = p; + p += enc_len(reg->enc, p); + goto retry; + } + + if (reg->sub_anchor) { + UChar* prev; + + switch (reg->sub_anchor) { + case ANCHOR_BEGIN_LINE: + if (!ON_STR_BEGIN(p)) { + prev = onigenc_get_prev_char_head(reg->enc, + (pprev ? pprev : str), p); + if (!ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end)) + goto retry_gate; + } + break; + + case ANCHOR_END_LINE: + if (ON_STR_END(p)) { + prev = (UChar* )onigenc_get_prev_char_head(reg->enc, + (pprev ? pprev : str), p); + if (prev && ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end)) + goto retry_gate; + } + else if (! ONIGENC_IS_MBC_NEWLINE(reg->enc, p, end) +#ifdef USE_CRNL_AS_LINE_TERMINATOR + && ! ONIGENC_IS_MBC_CRNL(reg->enc, p, end) +#endif + ) + goto retry_gate; + break; + } + } + + if (reg->dmax == 0) { + *low = p; + if (low_prev) { + if (*low > s) + *low_prev = onigenc_get_prev_char_head(reg->enc, s, p); + else + *low_prev = onigenc_get_prev_char_head(reg->enc, + (pprev ? pprev : str), p); + } + } + else { + if (reg->dmax != ONIG_INFINITE_DISTANCE) { + *low = p - reg->dmax; + if (*low > s) { + *low = onigenc_get_right_adjust_char_head_with_prev(reg->enc, s, + *low, (const UChar** )low_prev); + if (low_prev && IS_NULL(*low_prev)) + *low_prev = onigenc_get_prev_char_head(reg->enc, + (pprev ? pprev : s), *low); + } + else { + if (low_prev) + *low_prev = onigenc_get_prev_char_head(reg->enc, + (pprev ? pprev : str), *low); + } + } + } + /* no needs to adjust *high, *high is used as range check only */ + *high = p - reg->dmin; + +#ifdef ONIG_DEBUG_SEARCH + fprintf(stderr, + "forward_search_range success: low: %d, high: %d, dmin: %d, dmax: %d\n", + (int )(*low - str), (int )(*high - str), reg->dmin, reg->dmax); +#endif + return 1; /* success */ + } + + return 0; /* fail */ +} + +static int set_bm_backward_skip P_((UChar* s, UChar* end, OnigEncoding enc, + int** skip)); + +#define BM_BACKWARD_SEARCH_LENGTH_THRESHOLD 100 + +static int +backward_search_range(regex_t* reg, const UChar* str, const UChar* end, + UChar* s, const UChar* range, UChar* adjrange, + UChar** low, UChar** high) +{ + int r; + UChar *p; + + range += reg->dmin; + p = s; + + retry: + switch (reg->optimize) { + case ONIG_OPTIMIZE_EXACT: + exact_method: + p = slow_search_backward(reg->enc, reg->exact, reg->exact_end, + range, adjrange, end, p); + break; + + case ONIG_OPTIMIZE_EXACT_IC: + p = slow_search_backward_ic(reg->enc, reg->ambig_flag, + reg->exact, reg->exact_end, + range, adjrange, end, p); + break; + + case ONIG_OPTIMIZE_EXACT_BM: + case ONIG_OPTIMIZE_EXACT_BM_NOT_REV: + if (IS_NULL(reg->int_map_backward)) { + if (s - range < BM_BACKWARD_SEARCH_LENGTH_THRESHOLD) + goto exact_method; + + r = set_bm_backward_skip(reg->exact, reg->exact_end, reg->enc, + &(reg->int_map_backward)); + if (r) return r; + } + p = bm_search_backward(reg, reg->exact, reg->exact_end, range, adjrange, + end, p); + break; + + case ONIG_OPTIMIZE_MAP: + p = map_search_backward(reg->enc, reg->map, range, adjrange, p); + break; + } + + if (p) { + if (reg->sub_anchor) { + UChar* prev; + + switch (reg->sub_anchor) { + case ANCHOR_BEGIN_LINE: + if (!ON_STR_BEGIN(p)) { + prev = onigenc_get_prev_char_head(reg->enc, str, p); + if (!ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end)) { + p = prev; + goto retry; + } + } + break; + + case ANCHOR_END_LINE: + if (ON_STR_END(p)) { + prev = onigenc_get_prev_char_head(reg->enc, adjrange, p); + if (IS_NULL(prev)) goto fail; + if (ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end)) { + p = prev; + goto retry; + } + } + else if (! ONIGENC_IS_MBC_NEWLINE(reg->enc, p, end) +#ifdef USE_CRNL_AS_LINE_TERMINATOR + && ! ONIGENC_IS_MBC_CRNL(reg->enc, p, end) +#endif + ) { + p = onigenc_get_prev_char_head(reg->enc, adjrange, p); + if (IS_NULL(p)) goto fail; + goto retry; + } + break; + } + } + + /* no needs to adjust *high, *high is used as range check only */ + if (reg->dmax != ONIG_INFINITE_DISTANCE) { + *low = p - reg->dmax; + *high = p - reg->dmin; + *high = onigenc_get_right_adjust_char_head(reg->enc, adjrange, *high); + } + +#ifdef ONIG_DEBUG_SEARCH + fprintf(stderr, "backward_search_range: low: %d, high: %d\n", + (int )(*low - str), (int )(*high - str)); +#endif + return 1; /* success */ + } + + fail: +#ifdef ONIG_DEBUG_SEARCH + fprintf(stderr, "backward_search_range: fail.\n"); +#endif + return 0; /* fail */ +} + + +extern int +onig_search(regex_t* reg, const UChar* str, const UChar* end, + const UChar* start, const UChar* range, OnigRegion* region, OnigOptionType option) +{ + int r; + UChar *s, *prev; + MatchArg msa; + const UChar *orig_start = start; + +#if defined(USE_RECOMPILE_API) && defined(USE_MULTI_THREAD_SYSTEM) + start: + THREAD_ATOMIC_START; + if (ONIG_STATE(reg) >= ONIG_STATE_NORMAL) { + ONIG_STATE_INC(reg); + if (IS_NOT_NULL(reg->chain) && ONIG_STATE(reg) == ONIG_STATE_NORMAL) { + onig_chain_reduce(reg); + ONIG_STATE_INC(reg); + } + } + else { + int n; + + THREAD_ATOMIC_END; + n = 0; + while (ONIG_STATE(reg) < ONIG_STATE_NORMAL) { + if (++n > THREAD_PASS_LIMIT_COUNT) + return ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT; + THREAD_PASS; + } + goto start; + } + THREAD_ATOMIC_END; +#endif /* USE_RECOMPILE_API && USE_MULTI_THREAD_SYSTEM */ + +#ifdef ONIG_DEBUG_SEARCH + fprintf(stderr, + "onig_search (entry point): str: %d, end: %d, start: %d, range: %d\n", + (int )str, (int )(end - str), (int )(start - str), (int )(range - str)); +#endif + + if (region +#ifdef USE_POSIX_REGION_OPTION + && !IS_POSIX_REGION(option) +#endif + ) { + r = onig_region_resize_clear(region, reg->num_mem + 1); + if (r) goto finish_no_msa; + } + + if (start > end || start < str) goto mismatch_no_msa; + +#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE +#define MATCH_AND_RETURN_CHECK \ + r = match_at(reg, str, end, s, prev, &msa);\ + if (r != ONIG_MISMATCH) {\ + if (r >= 0) {\ + if (! IS_FIND_LONGEST(reg->options)) {\ + goto match;\ + }\ + }\ + else goto finish; /* error */ \ + } +#else +#define MATCH_AND_RETURN_CHECK \ + r = match_at(reg, str, end, s, prev, &msa);\ + if (r != ONIG_MISMATCH) {\ + if (r >= 0) {\ + goto match;\ + }\ + else goto finish; /* error */ \ + } +#endif + + /* anchor optimize: resume search range */ + if (reg->anchor != 0 && str < end) { + UChar *min_semi_end, *max_semi_end; + + if (reg->anchor & ANCHOR_BEGIN_POSITION) { + /* search start-position only */ + begin_position: + if (range > start) + range = start + 1; + else + range = start; + } + else if (reg->anchor & ANCHOR_BEGIN_BUF) { + /* search str-position only */ + if (range > start) { + if (start != str) goto mismatch_no_msa; + range = str + 1; + } + else { + if (range <= str) { + start = str; + range = str; + } + else + goto mismatch_no_msa; + } + } + else if (reg->anchor & ANCHOR_END_BUF) { + min_semi_end = max_semi_end = (UChar* )end; + + end_buf: + if ((OnigDistance )(max_semi_end - str) < reg->anchor_dmin) + goto mismatch_no_msa; + + if (range > start) { + if ((OnigDistance )(min_semi_end - start) > reg->anchor_dmax) { + start = min_semi_end - reg->anchor_dmax; + if (start < end) + start = onigenc_get_right_adjust_char_head(reg->enc, str, start); + else { /* match with empty at end */ + start = onigenc_get_prev_char_head(reg->enc, str, end); + } + } + if ((OnigDistance )(max_semi_end - (range - 1)) < reg->anchor_dmin) { + range = max_semi_end - reg->anchor_dmin + 1; + } + + if (start >= range) goto mismatch_no_msa; + } + else { + if ((OnigDistance )(min_semi_end - range) > reg->anchor_dmax) { + range = min_semi_end - reg->anchor_dmax; + } + if ((OnigDistance )(max_semi_end - start) < reg->anchor_dmin) { + start = max_semi_end - reg->anchor_dmin; + start = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, str, start); + } + if (range > start) goto mismatch_no_msa; + } + } + else if (reg->anchor & ANCHOR_SEMI_END_BUF) { + UChar* pre_end = ONIGENC_STEP_BACK(reg->enc, str, end, 1); + + max_semi_end = (UChar* )end; + if (ONIGENC_IS_MBC_NEWLINE(reg->enc, pre_end, end)) { + min_semi_end = pre_end; + +#ifdef USE_CRNL_AS_LINE_TERMINATOR + pre_end = ONIGENC_STEP_BACK(reg->enc, str, pre_end, 1); + if (IS_NOT_NULL(pre_end) && + ONIGENC_IS_MBC_CRNL(reg->enc, pre_end, end)) { + min_semi_end = pre_end; + } +#endif + if (min_semi_end > str && start <= min_semi_end) { + goto end_buf; + } + } + else { + min_semi_end = (UChar* )end; + goto end_buf; + } + } + else if ((reg->anchor & ANCHOR_ANYCHAR_STAR_ML)) { + goto begin_position; + } + } + else if (str == end) { /* empty string */ + static const UChar* address_for_empty_string = (UChar* )""; + +#ifdef ONIG_DEBUG_SEARCH + fprintf(stderr, "onig_search: empty string.\n"); +#endif + + if (reg->threshold_len == 0) { + start = end = str = address_for_empty_string; + s = (UChar* )start; + prev = (UChar* )NULL; + + MATCH_ARG_INIT(msa, option, region, start); +#ifdef USE_COMBINATION_EXPLOSION_CHECK + msa.state_check_buff = (void* )0; + msa.state_check_buff_size = 0; +#endif + MATCH_AND_RETURN_CHECK; + goto mismatch; + } + goto mismatch_no_msa; + } + +#ifdef ONIG_DEBUG_SEARCH + fprintf(stderr, "onig_search(apply anchor): end: %d, start: %d, range: %d\n", + (int )(end - str), (int )(start - str), (int )(range - str)); +#endif + + MATCH_ARG_INIT(msa, option, region, orig_start); +#ifdef USE_COMBINATION_EXPLOSION_CHECK + { + int offset = (MIN(start, range) - str); + STATE_CHECK_BUFF_INIT(msa, end - str, offset, reg->num_comb_exp_check); + } +#endif + + s = (UChar* )start; + if (range > start) { /* forward search */ + if (s > str) + prev = onigenc_get_prev_char_head(reg->enc, str, s); + else + prev = (UChar* )NULL; + + if (reg->optimize != ONIG_OPTIMIZE_NONE) { + UChar *sch_range, *low, *high, *low_prev; + + sch_range = (UChar* )range; + if (reg->dmax != 0) { + if (reg->dmax == ONIG_INFINITE_DISTANCE) + sch_range = (UChar* )end; + else { + sch_range += reg->dmax; + if (sch_range > end) sch_range = (UChar* )end; + } + } + + if ((end - start) < reg->threshold_len) + goto mismatch; + + if (reg->dmax != ONIG_INFINITE_DISTANCE) { + do { + if (! forward_search_range(reg, str, end, s, sch_range, + &low, &high, &low_prev)) goto mismatch; + if (s < low) { + s = low; + prev = low_prev; + } + while (s <= high) { + MATCH_AND_RETURN_CHECK; + prev = s; + s += enc_len(reg->enc, s); + } + } while (s < range); + goto mismatch; + } + else { /* check only. */ + if (! forward_search_range(reg, str, end, s, sch_range, + &low, &high, (UChar** )NULL)) goto mismatch; + + if ((reg->anchor & ANCHOR_ANYCHAR_STAR) != 0) { + do { + MATCH_AND_RETURN_CHECK; + prev = s; + s += enc_len(reg->enc, s); + + while (!ONIGENC_IS_MBC_NEWLINE(reg->enc, prev, end) && s < range) { + prev = s; + s += enc_len(reg->enc, s); + } + } while (s < range); + goto mismatch; + } + } + } + + do { + MATCH_AND_RETURN_CHECK; + prev = s; + s += enc_len(reg->enc, s); + } while (s < range); + + if (s == range) { /* because empty match with /$/. */ + MATCH_AND_RETURN_CHECK; + } + } + else { /* backward search */ + if (reg->optimize != ONIG_OPTIMIZE_NONE) { + UChar *low, *high, *adjrange, *sch_start; + + if (range < end) + adjrange = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, str, range); + else + adjrange = (UChar* )end; + + if (reg->dmax != ONIG_INFINITE_DISTANCE && + (end - range) >= reg->threshold_len) { + do { + sch_start = s + reg->dmax; + if (sch_start > end) sch_start = (UChar* )end; + if (backward_search_range(reg, str, end, sch_start, range, adjrange, + &low, &high) <= 0) + goto mismatch; + + if (s > high) + s = high; + + while (s >= low) { + prev = onigenc_get_prev_char_head(reg->enc, str, s); + MATCH_AND_RETURN_CHECK; + s = prev; + } + } while (s >= range); + goto mismatch; + } + else { /* check only. */ + if ((end - range) < reg->threshold_len) goto mismatch; + + sch_start = s; + if (reg->dmax != 0) { + if (reg->dmax == ONIG_INFINITE_DISTANCE) + sch_start = (UChar* )end; + else { + sch_start += reg->dmax; + if (sch_start > end) sch_start = (UChar* )end; + else + sch_start = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, + start, sch_start); + } + } + if (backward_search_range(reg, str, end, sch_start, range, adjrange, + &low, &high) <= 0) goto mismatch; + } + } + + do { + prev = onigenc_get_prev_char_head(reg->enc, str, s); + MATCH_AND_RETURN_CHECK; + s = prev; + } while (s >= range); + } + + mismatch: +#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE + if (IS_FIND_LONGEST(reg->options)) { + if (msa.best_len >= 0) { + s = msa.best_s; + goto match; + } + } +#endif + r = ONIG_MISMATCH; + + finish: + MATCH_ARG_FREE(msa); + ONIG_STATE_DEC_THREAD(reg); + + /* If result is mismatch and no FIND_NOT_EMPTY option, + then the region is not setted in match_at(). */ + if (IS_FIND_NOT_EMPTY(reg->options) && region +#ifdef USE_POSIX_REGION_OPTION + && !IS_POSIX_REGION(option) +#endif + ) { + onig_region_clear(region); + } + +#ifdef ONIG_DEBUG + if (r != ONIG_MISMATCH) + fprintf(stderr, "onig_search: error %d\n", r); +#endif + return r; + + mismatch_no_msa: + r = ONIG_MISMATCH; + finish_no_msa: + ONIG_STATE_DEC_THREAD(reg); +#ifdef ONIG_DEBUG + if (r != ONIG_MISMATCH) + fprintf(stderr, "onig_search: error %d\n", r); +#endif + return r; + + match: + ONIG_STATE_DEC_THREAD(reg); + MATCH_ARG_FREE(msa); + return s - str; +} + +extern OnigEncoding +onig_get_encoding(regex_t* reg) +{ + return reg->enc; +} + +extern OnigOptionType +onig_get_options(regex_t* reg) +{ + return reg->options; +} + +extern OnigAmbigType +onig_get_ambig_flag(regex_t* reg) +{ + return reg->ambig_flag; +} + +extern OnigSyntaxType* +onig_get_syntax(regex_t* reg) +{ + return reg->syntax; +} + +extern int +onig_number_of_captures(regex_t* reg) +{ + return reg->num_mem; +} + +extern int +onig_number_of_capture_histories(regex_t* reg) +{ +#ifdef USE_CAPTURE_HISTORY + int i, n; + + n = 0; + for (i = 0; i <= ONIG_MAX_CAPTURE_HISTORY_GROUP; i++) { + if (BIT_STATUS_AT(reg->capture_history, i) != 0) + n++; + } + return n; +#else + return 0; +#endif +} + +extern void +onig_copy_encoding(OnigEncoding to, OnigEncoding from) +{ + *to = *from; +} + diff --git a/ext/mbstring/oniguruma/regext.c b/ext/mbstring/oniguruma/regext.c new file mode 100644 index 0000000..f5ad1f3 --- /dev/null +++ b/ext/mbstring/oniguruma/regext.c @@ -0,0 +1,215 @@ +/********************************************************************** + regext.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regint.h" + +static void +conv_ext0be32(const UChar* s, const UChar* end, UChar* conv) +{ + while (s < end) { + *conv++ = '\0'; + *conv++ = '\0'; + *conv++ = '\0'; + *conv++ = *s++; + } +} + +static void +conv_ext0le32(const UChar* s, const UChar* end, UChar* conv) +{ + while (s < end) { + *conv++ = *s++; + *conv++ = '\0'; + *conv++ = '\0'; + *conv++ = '\0'; + } +} + +static void +conv_ext0be(const UChar* s, const UChar* end, UChar* conv) +{ + while (s < end) { + *conv++ = '\0'; + *conv++ = *s++; + } +} + +static void +conv_ext0le(const UChar* s, const UChar* end, UChar* conv) +{ + while (s < end) { + *conv++ = *s++; + *conv++ = '\0'; + } +} + +static void +conv_swap4bytes(const UChar* s, const UChar* end, UChar* conv) +{ + while (s < end) { + *conv++ = s[3]; + *conv++ = s[2]; + *conv++ = s[1]; + *conv++ = s[0]; + s += 4; + } +} + +static void +conv_swap2bytes(const UChar* s, const UChar* end, UChar* conv) +{ + while (s < end) { + *conv++ = s[1]; + *conv++ = s[0]; + s += 2; + } +} + +static int +conv_encoding(OnigEncoding from, OnigEncoding to, const UChar* s, const UChar* end, + UChar** conv, UChar** conv_end) +{ + int len = end - s; + + if (to == ONIG_ENCODING_UTF16_BE) { + if (from == ONIG_ENCODING_ASCII || from == ONIG_ENCODING_ISO_8859_1) { + *conv = (UChar* )xmalloc(len * 2); + CHECK_NULL_RETURN_VAL(*conv, ONIGERR_MEMORY); + *conv_end = *conv + (len * 2); + conv_ext0be(s, end, *conv); + return 0; + } + else if (from == ONIG_ENCODING_UTF16_LE) { + swap16: + *conv = (UChar* )xmalloc(len); + CHECK_NULL_RETURN_VAL(*conv, ONIGERR_MEMORY); + *conv_end = *conv + len; + conv_swap2bytes(s, end, *conv); + return 0; + } + } + else if (to == ONIG_ENCODING_UTF16_LE) { + if (from == ONIG_ENCODING_ASCII || from == ONIG_ENCODING_ISO_8859_1) { + *conv = (UChar* )xmalloc(len * 2); + CHECK_NULL_RETURN_VAL(*conv, ONIGERR_MEMORY); + *conv_end = *conv + (len * 2); + conv_ext0le(s, end, *conv); + return 0; + } + else if (from == ONIG_ENCODING_UTF16_BE) { + goto swap16; + } + } + if (to == ONIG_ENCODING_UTF32_BE) { + if (from == ONIG_ENCODING_ASCII || from == ONIG_ENCODING_ISO_8859_1) { + *conv = (UChar* )xmalloc(len * 4); + CHECK_NULL_RETURN_VAL(*conv, ONIGERR_MEMORY); + *conv_end = *conv + (len * 4); + conv_ext0be32(s, end, *conv); + return 0; + } + else if (from == ONIG_ENCODING_UTF32_LE) { + swap32: + *conv = (UChar* )xmalloc(len); + CHECK_NULL_RETURN_VAL(*conv, ONIGERR_MEMORY); + *conv_end = *conv + len; + conv_swap4bytes(s, end, *conv); + return 0; + } + } + else if (to == ONIG_ENCODING_UTF32_LE) { + if (from == ONIG_ENCODING_ASCII || from == ONIG_ENCODING_ISO_8859_1) { + *conv = (UChar* )xmalloc(len * 4); + CHECK_NULL_RETURN_VAL(*conv, ONIGERR_MEMORY); + *conv_end = *conv + (len * 4); + conv_ext0le32(s, end, *conv); + return 0; + } + else if (from == ONIG_ENCODING_UTF32_BE) { + goto swap32; + } + } + + return ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION; +} + +extern int +onig_new_deluxe(regex_t** reg, const UChar* pattern, const UChar* pattern_end, + OnigCompileInfo* ci, OnigErrorInfo* einfo) +{ + int r; + UChar *cpat, *cpat_end; + + if (IS_NOT_NULL(einfo)) einfo->par = (UChar* )NULL; + + if (ci->pattern_enc != ci->target_enc) { + r = conv_encoding(ci->pattern_enc, ci->target_enc, pattern, pattern_end, + &cpat, &cpat_end); + if (r) return r; + } + else { + cpat = (UChar* )pattern; + cpat_end = (UChar* )pattern_end; + } + + r = onig_alloc_init(reg, ci->option, ci->ambig_flag, ci->target_enc, + ci->syntax); + if (r) goto err; + + r = onig_compile(*reg, cpat, cpat_end, einfo); + if (r) { + onig_free(*reg); + *reg = NULL; + } + + err: + if (cpat != pattern) xfree(cpat); + + return r; +} + +#ifdef USE_RECOMPILE_API +extern int +onig_recompile_deluxe(regex_t* reg, const UChar* pattern, const UChar* pattern_end, + OnigCompileInfo* ci, OnigErrorInfo* einfo) +{ + int r; + regex_t *new_reg; + + r = onig_new_deluxe(&new_reg, pattern, pattern_end, ci, einfo); + if (r) return r; + if (ONIG_STATE(reg) == ONIG_STATE_NORMAL) { + onig_transfer(reg, new_reg); + } + else { + onig_chain_link_add(reg, new_reg); + } + return 0; +} +#endif diff --git a/ext/mbstring/oniguruma/reggnu.c b/ext/mbstring/oniguruma/reggnu.c new file mode 100644 index 0000000..248957c --- /dev/null +++ b/ext/mbstring/oniguruma/reggnu.c @@ -0,0 +1,175 @@ +/********************************************************************** + reggnu.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regint.h" + +#ifndef ONIGGNU_H +#include "oniggnu.h" +#endif + +extern void +re_free_registers(OnigRegion* r) +{ + /* 0: don't free self */ + onig_region_free(r, 0); +} + +extern int +re_adjust_startpos(regex_t* reg, const char* string, int size, + int startpos, int range) +{ + if (startpos > 0 && ONIGENC_MBC_MAXLEN(reg->enc) != 1 && startpos < size) { + UChar *p; + UChar *s = (UChar* )string + startpos; + + if (range > 0) { + p = onigenc_get_right_adjust_char_head(reg->enc, (UChar* )string, s); + } + else { + p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, (UChar* )string, s); + } + return p - (UChar* )string; + } + + return startpos; +} + +extern int +re_match(regex_t* reg, const char* str, int size, int pos, + struct re_registers* regs) +{ + return onig_match(reg, (UChar* )str, (UChar* )(str + size), + (UChar* )(str + pos), regs, ONIG_OPTION_NONE); +} + +extern int +re_search(regex_t* bufp, const char* string, int size, int startpos, int range, + struct re_registers* regs) +{ + return onig_search(bufp, (UChar* )string, (UChar* )(string + size), + (UChar* )(string + startpos), + (UChar* )(string + startpos + range), + regs, ONIG_OPTION_NONE); +} + +extern int +re_compile_pattern(const char* pattern, int size, regex_t* reg, char* ebuf) +{ + int r; + OnigErrorInfo einfo; + + r = onig_compile(reg, (UChar* )pattern, (UChar* )(pattern + size), &einfo); + if (r != 0) { + if (IS_NOT_NULL(ebuf)) + (void )onig_error_code_to_str((UChar* )ebuf, r, &einfo); + } + + return r; +} + +#ifdef USE_RECOMPILE_API +extern int +re_recompile_pattern(const char* pattern, int size, regex_t* reg, char* ebuf) +{ + int r; + OnigErrorInfo einfo; + OnigEncoding enc; + + /* I think encoding and options should be arguments of this function. + But this is adapted to present re.c. (2002/11/29) + */ + enc = OnigEncDefaultCharEncoding; + + r = onig_recompile(reg, (UChar* )pattern, (UChar* )(pattern + size), + reg->options, enc, OnigDefaultSyntax, &einfo); + if (r != 0) { + if (IS_NOT_NULL(ebuf)) + (void )onig_error_code_to_str((UChar* )ebuf, r, &einfo); + } + return r; +} +#endif + +extern void +re_free_pattern(regex_t* reg) +{ + onig_free(reg); +} + +extern int +re_alloc_pattern(regex_t** reg) +{ + return onig_alloc_init(reg, ONIG_OPTION_DEFAULT, + ONIGENC_AMBIGUOUS_MATCH_DEFAULT, + OnigEncDefaultCharEncoding, + OnigDefaultSyntax); +} + +extern void +re_set_casetable(const char* table) +{ + onigenc_set_default_caseconv_table((UChar* )table); +} + +extern void +#ifdef ONIG_RUBY_M17N +re_mbcinit(OnigEncoding enc) +#else +re_mbcinit(int mb_code) +#endif +{ +#ifdef ONIG_RUBY_M17N + + onigenc_set_default_encoding(enc); + +#else + + OnigEncoding enc; + + switch (mb_code) { + case RE_MBCTYPE_ASCII: + enc = ONIG_ENCODING_ASCII; + break; + case RE_MBCTYPE_EUC: + enc = ONIG_ENCODING_EUC_JP; + break; + case RE_MBCTYPE_SJIS: + enc = ONIG_ENCODING_SJIS; + break; + case RE_MBCTYPE_UTF8: + enc = ONIG_ENCODING_UTF8; + break; + default: + return ; + break; + } + + onigenc_set_default_encoding(enc); +#endif +} diff --git a/ext/mbstring/oniguruma/regint.h b/ext/mbstring/oniguruma/regint.h new file mode 100644 index 0000000..d6819d8 --- /dev/null +++ b/ext/mbstring/oniguruma/regint.h @@ -0,0 +1,830 @@ +#ifndef REGINT_H +#define REGINT_H +/********************************************************************** + regint.h - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + */ + +/* for debug */ +/* #define ONIG_DEBUG_PARSE_TREE */ +/* #define ONIG_DEBUG_COMPILE */ +/* #define ONIG_DEBUG_SEARCH */ +/* #define ONIG_DEBUG_MATCH */ +/* #define ONIG_DONT_OPTIMIZE */ + +/* for byte-code statistical data. */ +/* #define ONIG_DEBUG_STATISTICS */ + +#if defined(ONIG_DEBUG_PARSE_TREE) || defined(ONIG_DEBUG_MATCH) || \ + defined(ONIG_DEBUG_SEARCH) || defined(ONIG_DEBUG_COMPILE) || \ + defined(ONIG_DEBUG_STATISTICS) +#ifndef ONIG_DEBUG +#define ONIG_DEBUG +#endif +#endif + +#if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ + (defined(__ppc__) && defined(__APPLE__)) || \ + defined(__x86_64) || defined(__x86_64__) || \ + defined(__mc68020__) +#define PLATFORM_UNALIGNED_WORD_ACCESS +#endif + +/* config */ +/* spec. config */ +/* #define USE_UNICODE_FULL_RANGE_CTYPE */ /* --> move to regenc.h */ +#define USE_NAMED_GROUP +#define USE_SUBEXP_CALL +#define USE_INFINITE_REPEAT_MONOMANIAC_MEM_STATUS_CHECK /* /(?:()|())*\2/ */ +#define USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE /* /\n$/ =~ "\n" */ +#define USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR +/* #define USE_RECOMPILE_API */ +/* treat \r\n as line terminator. + !!! NO SUPPORT !!! + use this configuration on your own responsibility */ +/* #define USE_CRNL_AS_LINE_TERMINATOR */ + +/* internal config */ +#define USE_RECYCLE_NODE +#define USE_OP_PUSH_OR_JUMP_EXACT +#define USE_QUANTIFIER_PEEK_NEXT +#define USE_ST_HASH_TABLE +#define USE_SHARED_CCLASS_TABLE + +#define INIT_MATCH_STACK_SIZE 160 +#define DEFAULT_MATCH_STACK_LIMIT_SIZE 0 /* unlimited */ + +/* interface to external system */ +#ifdef NOT_RUBY /* given from Makefile */ +#include "config.h" +#define USE_BACKREF_AT_LEVEL +#define USE_CAPTURE_HISTORY +#define USE_VARIABLE_META_CHARS +#define USE_WORD_BEGIN_END /* "\<": word-begin, "\>": word-end */ +#define USE_POSIX_REGION_OPTION /* needed for POSIX API support */ +#define USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE +/* #define USE_COMBINATION_EXPLOSION_CHECK */ /* (X*)* */ +/* #define USE_MULTI_THREAD_SYSTEM */ +#define THREAD_SYSTEM_INIT /* depend on thread system */ +#define THREAD_SYSTEM_END /* depend on thread system */ +#define THREAD_ATOMIC_START /* depend on thread system */ +#define THREAD_ATOMIC_END /* depend on thread system */ +#define THREAD_PASS /* depend on thread system */ +#define xmalloc malloc +#define xrealloc realloc +#define xcalloc calloc +#define xfree free +#else +#include "ruby.h" +#include "rubysig.h" /* for DEFER_INTS, ENABLE_INTS */ + +#define USE_COMBINATION_EXPLOSION_CHECK /* (X*)* */ +#define USE_MULTI_THREAD_SYSTEM +#define THREAD_SYSTEM_INIT +#define THREAD_SYSTEM_END +#define THREAD_ATOMIC_START DEFER_INTS +#define THREAD_ATOMIC_END ENABLE_INTS +#define THREAD_PASS rb_thread_schedule() + +#define DEFAULT_WARN_FUNCTION onig_rb_warn +#define DEFAULT_VERB_WARN_FUNCTION onig_rb_warning + +#endif /* else NOT_RUBY */ + +#define STATE_CHECK_STRING_THRESHOLD_LEN 7 +#define STATE_CHECK_BUFF_MAX_SIZE 0x4000 + +#define THREAD_PASS_LIMIT_COUNT 8 +#define xmemset memset +#define xmemcpy memcpy +#define xmemmove memmove +#if defined(_WIN32) && !defined(__GNUC__) +#define xalloca _alloca +#if _MSC_VER < 1500 +#ifndef vsnprintf +#define vsnprintf _vsnprintf +#endif +#endif +#else +#define xalloca alloca +#endif + +#if defined(USE_RECOMPILE_API) && defined(USE_MULTI_THREAD_SYSTEM) +#define ONIG_STATE_INC(reg) (reg)->state++ +#define ONIG_STATE_DEC(reg) (reg)->state-- + +#define ONIG_STATE_INC_THREAD(reg) do {\ + THREAD_ATOMIC_START;\ + (reg)->state++;\ + THREAD_ATOMIC_END;\ +} while(0) +#define ONIG_STATE_DEC_THREAD(reg) do {\ + THREAD_ATOMIC_START;\ + (reg)->state--;\ + THREAD_ATOMIC_END;\ +} while(0) +#else +#define ONIG_STATE_INC(reg) /* Nothing */ +#define ONIG_STATE_DEC(reg) /* Nothing */ +#define ONIG_STATE_INC_THREAD(reg) /* Nothing */ +#define ONIG_STATE_DEC_THREAD(reg) /* Nothing */ +#endif /* USE_RECOMPILE_API && USE_MULTI_THREAD_SYSTEM */ + + +#define onig_st_is_member st_is_member + +#ifdef NOT_RUBY + +#define st_init_table onig_st_init_table +#define st_init_table_with_size onig_st_init_table_with_size +#define st_init_numtable onig_st_init_numtable +#define st_init_numtable_with_size onig_st_init_numtable_with_size +#define st_init_strtable onig_st_init_strtable +#define st_init_strtable_with_size onig_st_init_strtable_with_size +#define st_init_strend_table_with_size onig_st_init_strend_table_with_size +#define st_delete onig_st_delete +#define st_delete_safe onig_st_delete_safe +#define st_insert onig_st_insert +#define st_insert_strend onig_st_insert_strend +#define st_lookup onig_st_lookup +#define st_lookup_strend onig_st_lookup_strend +#define st_foreach onig_st_foreach +#define st_add_direct onig_st_add_direct +#define st_add_direct_strend onig_st_add_direct_strend +#define st_free_table onig_st_free_table +#define st_cleanup_safe onig_st_cleanup_safe +#define st_copy onig_st_copy +#define st_nothing_key_clone onig_st_nothing_key_clone +#define st_nothing_key_free onig_st_nothing_key_free + +#else /* NOT_RUBY */ + +#define onig_st_init_table st_init_table +#define onig_st_init_table_with_size st_init_table_with_size +#define onig_st_init_numtable st_init_numtable +#define onig_st_init_numtable_with_size st_init_numtable_with_size +#define onig_st_init_strtable st_init_strtable +#define onig_st_init_strtable_with_size st_init_strtable_with_size +#define onig_st_init_strend_table_with_size st_init_strend_table_with_size +#define onig_st_delete st_delete +#define onig_st_delete_safe st_delete_safe +#define onig_st_insert st_insert +#define onig_st_insert_strend st_insert_strend +#define onig_st_lookup st_lookup +#define onig_st_lookup_strend st_lookup_strend +#define onig_st_foreach st_foreach +#define onig_st_add_direct st_add_direct +#define onig_st_add_direct_strend st_add_direct_strend +#define onig_st_free_table st_free_table +#define onig_st_cleanup_safe st_cleanup_safe +#define onig_st_copy st_copy +#define onig_st_nothing_key_clone st_nothing_key_clone +#define onig_st_nothing_key_free st_nothing_key_free + +#endif /* NOT_RUBY */ + + +#ifdef HAVE_STDLIB_H +#include <stdlib.h> +#endif + +#if defined(HAVE_ALLOCA_H) && !defined(__GNUC__) +#include <alloca.h> +#endif + +#ifdef HAVE_STRING_H +# include <string.h> +#else +# include <strings.h> +#endif + +#include <ctype.h> +#ifdef HAVE_SYS_TYPES_H +#ifndef __BORLANDC__ +#include <sys/types.h> +#endif +#endif + +#ifdef __BORLANDC__ +#include <malloc.h> +#endif + +#ifdef ONIG_DEBUG +# include <stdio.h> +#endif + +#include "regenc.h" +#include "oniguruma.h" + +#ifdef MIN +#undef MIN +#endif +#ifdef MAX +#undef MAX +#endif +#define MIN(a,b) (((a)>(b))?(b):(a)) +#define MAX(a,b) (((a)<(b))?(b):(a)) + +#define IS_NULL(p) (((void*)(p)) == (void*)0) +#define IS_NOT_NULL(p) (((void*)(p)) != (void*)0) +#define CHECK_NULL_RETURN(p) if (IS_NULL(p)) return NULL +#define CHECK_NULL_RETURN_VAL(p,val) if (IS_NULL(p)) return (val) +#define NULL_UCHARP ((UChar* )0) + +#ifndef PLATFORM_UNALIGNED_WORD_ACCESS +/* sizeof(OnigCodePoint) */ +#define WORD_ALIGNMENT_SIZE SIZEOF_LONG + +#define GET_ALIGNMENT_PAD_SIZE(addr,pad_size) do {\ + (pad_size) = WORD_ALIGNMENT_SIZE \ + - ((unsigned int )(addr) % WORD_ALIGNMENT_SIZE);\ + if ((pad_size) == WORD_ALIGNMENT_SIZE) (pad_size) = 0;\ +} while (0) + +#define ALIGNMENT_RIGHT(addr) do {\ + (addr) += (WORD_ALIGNMENT_SIZE - 1);\ + (addr) -= ((unsigned int )(addr) % WORD_ALIGNMENT_SIZE);\ +} while (0) + + +#define B_SHIFT 8 +#define B_MASK 0xff + +#define SERIALIZE_2BYTE_INT(i,p) do {\ + *(p) = ((i) >> B_SHIFT) & B_MASK;\ + *((p)+1) = (i) & B_MASK;\ +} while (0) + +#define SERIALIZE_4BYTE_INT(i,p) do {\ + *(p) = ((i) >> B_SHIFT*3) & B_MASK;\ + *((p)+1) = ((i) >> B_SHIFT*2) & B_MASK;\ + *((p)+2) = ((i) >> B_SHIFT ) & B_MASK;\ + *((p)+3) = (i) & B_MASK;\ +} while (0) + +#define SERIALIZE_8BYTE_INT(i,p) do {\ + *(p) = ((i) >> B_SHIFT*7) & B_MASK;\ + *((p)+1) = ((i) >> B_SHIFT*6) & B_MASK;\ + *((p)+2) = ((i) >> B_SHIFT*5) & B_MASK;\ + *((p)+3) = ((i) >> B_SHIFT*4) & B_MASK;\ + *((p)+4) = ((i) >> B_SHIFT*3) & B_MASK;\ + *((p)+5) = ((i) >> B_SHIFT*2) & B_MASK;\ + *((p)+6) = ((i) >> B_SHIFT ) & B_MASK;\ + *((p)+7) = (i) & B_MASK;\ +} while (0) + +#define GET_2BYTE_INT_INC(type,i,p) do {\ + (i) = (type )(((unsigned int )(*(p)) << B_SHIFT) | (unsigned int )((p)[1]));\ + (p) += 2;\ +} while (0) + +#define GET_4BYTE_INT_INC(type,i,p) do {\ + (i) = (type )(((unsigned int )((p)[0]) << B_SHIFT*3) | \ + ((unsigned int )((p)[1]) << B_SHIFT*2) | \ + ((unsigned int )((p)[2]) << B_SHIFT ) | \ + ((unsigned int )((p)[3]) )); \ + (p) += 4;\ +} while (0) + +#define GET_8BYTE_INT_INC(type,i,p) do {\ + (i) = (type )(((unsigned long )((p)[0]) << B_SHIFT*7) | \ + ((unsigned long )((p)[1]) << B_SHIFT*6) | \ + ((unsigned long )((p)[2]) << B_SHIFT*5) | \ + ((unsigned long )((p)[3]) << B_SHIFT*4) | \ + ((unsigned long )((p)[4]) << B_SHIFT*3) | \ + ((unsigned long )((p)[5]) << B_SHIFT*2) | \ + ((unsigned long )((p)[6]) << B_SHIFT ) | \ + ((unsigned long )((p)[7]) )); \ + (p) += 8;\ +} while (0) + +#if SIZEOF_SHORT == 2 +#define GET_SHORT_INC(i,p) GET_2BYTE_INT_INC(short,i,p) +#define SERIALIZE_SHORT(i,p) SERIALIZE_2BYTE_INT(i,p) +#elif SIZEOF_SHORT == 4 +#define GET_SHORT_INC(i,p) GET_4BYTE_INT_INC(short,i,p) +#define SERIALIZE_SHORT(i,p) SERIALIZE_4BYTE_INT(i,p) +#elif SIZEOF_SHORT == 8 +#define GET_SHORT_INC(i,p) GET_8BYTE_INT_INC(short,i,p) +#define SERIALIZE_SHORT(i,p) SERIALIZE_8BYTE_INT(i,p) +#endif + +#if SIZEOF_INT == 2 +#define GET_INT_INC(i,p) GET_2BYTE_INT_INC(int,i,p) +#define GET_UINT_INC(i,p) GET_2BYTE_INT_INC(unsigned,i,p) +#define SERIALIZE_INT(i,p) SERIALIZE_2BYTE_INT(i,p) +#define SERIALIZE_UINT(i,p) SERIALIZE_2BYTE_INT(i,p) +#elif SIZEOF_INT == 4 +#define GET_INT_INC(i,p) GET_4BYTE_INT_INC(int,i,p) +#define GET_UINT_INC(i,p) GET_4BYTE_INT_INC(unsigned,i,p) +#define SERIALIZE_INT(i,p) SERIALIZE_4BYTE_INT(i,p) +#define SERIALIZE_UINT(i,p) SERIALIZE_4BYTE_INT(i,p) +#elif SIZEOF_INT == 8 +#define GET_INT_INC(i,p) GET_8BYTE_INT_INC(int,i,p) +#define GET_UINT_INC(i,p) GET_8BYTE_INT_INC(unsigned,i,p) +#define SERIALIZE_INT(i,p) SERIALIZE_8BYTE_INT(i,p) +#define SERIALIZE_UINT(i,p) SERIALIZE_8BYTE_INT(i,p) +#endif + +#endif /* PLATFORM_UNALIGNED_WORD_ACCESS */ + +/* stack pop level */ +#define STACK_POP_LEVEL_FREE 0 +#define STACK_POP_LEVEL_MEM_START 1 +#define STACK_POP_LEVEL_ALL 2 + +/* optimize flags */ +#define ONIG_OPTIMIZE_NONE 0 +#define ONIG_OPTIMIZE_EXACT 1 /* Slow Search */ +#define ONIG_OPTIMIZE_EXACT_BM 2 /* Boyer Moore Search */ +#define ONIG_OPTIMIZE_EXACT_BM_NOT_REV 3 /* BM (but not simple match) */ +#define ONIG_OPTIMIZE_EXACT_IC 4 /* Slow Search (ignore case) */ +#define ONIG_OPTIMIZE_MAP 5 /* char map */ + +/* bit status */ +typedef unsigned int BitStatusType; + +#define BIT_STATUS_BITS_NUM (sizeof(BitStatusType) * 8) +#define BIT_STATUS_CLEAR(stats) (stats) = 0 +#define BIT_STATUS_ON_ALL(stats) (stats) = ~((BitStatusType )0) +#define BIT_STATUS_AT(stats,n) \ + ((n) < BIT_STATUS_BITS_NUM ? ((stats) & (1 << n)) : ((stats) & 1)) + +#define BIT_STATUS_ON_AT(stats,n) do {\ + if ((n) < BIT_STATUS_BITS_NUM)\ + (stats) |= (1 << (n));\ + else\ + (stats) |= 1;\ +} while (0) + +#define BIT_STATUS_ON_AT_SIMPLE(stats,n) do {\ + if ((n) < BIT_STATUS_BITS_NUM)\ + (stats) |= (1 << (n));\ +} while (0) + + +#define INT_MAX_LIMIT ((1UL << (SIZEOF_INT * 8 - 1)) - 1) + +#define DIGITVAL(code) ((code) - '0') +#define ODIGITVAL(code) DIGITVAL(code) +#define XDIGITVAL(enc,code) \ + (ONIGENC_IS_CODE_DIGIT(enc,code) ? DIGITVAL(code) \ + : (ONIGENC_IS_CODE_UPPER(enc,code) ? (code) - 'A' + 10 : (code) - 'a' + 10)) + +#define IS_SINGLELINE(option) ((option) & ONIG_OPTION_SINGLELINE) +#define IS_MULTILINE(option) ((option) & ONIG_OPTION_MULTILINE) +#define IS_IGNORECASE(option) ((option) & ONIG_OPTION_IGNORECASE) +#define IS_EXTEND(option) ((option) & ONIG_OPTION_EXTEND) +#define IS_FIND_LONGEST(option) ((option) & ONIG_OPTION_FIND_LONGEST) +#define IS_FIND_NOT_EMPTY(option) ((option) & ONIG_OPTION_FIND_NOT_EMPTY) +#define IS_POSIXLINE(option) (IS_SINGLELINE(option) && IS_MULTILINE(option)) +#define IS_FIND_CONDITION(option) ((option) & \ + (ONIG_OPTION_FIND_LONGEST | ONIG_OPTION_FIND_NOT_EMPTY)) +#define IS_NOTBOL(option) ((option) & ONIG_OPTION_NOTBOL) +#define IS_NOTEOL(option) ((option) & ONIG_OPTION_NOTEOL) +#define IS_POSIX_REGION(option) ((option) & ONIG_OPTION_POSIX_REGION) + +/* OP_SET_OPTION is required for these options. +#define IS_DYNAMIC_OPTION(option) \ + (((option) & (ONIG_OPTION_MULTILINE | ONIG_OPTION_IGNORECASE)) != 0) +*/ +/* ignore-case and multibyte status are included in compiled code. */ +#define IS_DYNAMIC_OPTION(option) 0 + +#define REPEAT_INFINITE -1 +#define IS_REPEAT_INFINITE(n) ((n) == REPEAT_INFINITE) + +/* bitset */ +#define BITS_PER_BYTE 8 +#define SINGLE_BYTE_SIZE (1 << BITS_PER_BYTE) +#define BITS_IN_ROOM (sizeof(Bits) * BITS_PER_BYTE) +#define BITSET_SIZE (SINGLE_BYTE_SIZE / BITS_IN_ROOM) + +#ifdef PLATFORM_UNALIGNED_WORD_ACCESS +typedef unsigned int Bits; +#else +typedef unsigned char Bits; +#endif +typedef Bits BitSet[BITSET_SIZE]; +typedef Bits* BitSetRef; + +#define SIZE_BITSET sizeof(BitSet) + +#define BITSET_CLEAR(bs) do {\ + int i;\ + for (i = 0; i < BITSET_SIZE; i++) { (bs)[i] = 0; }\ +} while (0) + +#define BS_ROOM(bs,pos) (bs)[pos / BITS_IN_ROOM] +#define BS_BIT(pos) (1 << (pos % BITS_IN_ROOM)) + +#define BITSET_AT(bs, pos) (BS_ROOM(bs,pos) & BS_BIT(pos)) +#define BITSET_SET_BIT(bs, pos) BS_ROOM(bs,pos) |= BS_BIT(pos) +#define BITSET_CLEAR_BIT(bs, pos) BS_ROOM(bs,pos) &= ~(BS_BIT(pos)) +#define BITSET_INVERT_BIT(bs, pos) BS_ROOM(bs,pos) ^= BS_BIT(pos) + +/* bytes buffer */ +typedef struct _BBuf { + UChar* p; + unsigned int used; + unsigned int alloc; +} BBuf; + +#define BBUF_INIT(buf,size) onig_bbuf_init((BBuf* )(buf), (size)) + +#define BBUF_SIZE_INC(buf,inc) do{\ + (buf)->alloc += (inc);\ + (buf)->p = (UChar* )xrealloc((buf)->p, (buf)->alloc);\ + if (IS_NULL((buf)->p)) return(ONIGERR_MEMORY);\ +} while (0) + +#define BBUF_EXPAND(buf,low) do{\ + do { (buf)->alloc *= 2; } while ((buf)->alloc < (unsigned int )low);\ + (buf)->p = (UChar* )xrealloc((buf)->p, (buf)->alloc);\ + if (IS_NULL((buf)->p)) return(ONIGERR_MEMORY);\ +} while (0) + +#define BBUF_ENSURE_SIZE(buf,size) do{\ + unsigned int new_alloc = (buf)->alloc;\ + while (new_alloc < (unsigned int )(size)) { new_alloc *= 2; }\ + if ((buf)->alloc != new_alloc) {\ + (buf)->p = (UChar* )xrealloc((buf)->p, new_alloc);\ + if (IS_NULL((buf)->p)) return(ONIGERR_MEMORY);\ + (buf)->alloc = new_alloc;\ + }\ +} while (0) + +#define BBUF_WRITE(buf,pos,bytes,n) do{\ + int used = (pos) + (n);\ + if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\ + xmemcpy((buf)->p + (pos), (bytes), (n));\ + if ((buf)->used < (unsigned int )used) (buf)->used = used;\ +} while (0) + +#define BBUF_WRITE1(buf,pos,byte) do{\ + int used = (pos) + 1;\ + if ((buf)->alloc < (unsigned int )used) BBUF_EXPAND((buf),used);\ + (buf)->p[(pos)] = (byte);\ + if ((buf)->used < (unsigned int )used) (buf)->used = used;\ +} while (0) + +#define BBUF_ADD(buf,bytes,n) BBUF_WRITE((buf),(buf)->used,(bytes),(n)) +#define BBUF_ADD1(buf,byte) BBUF_WRITE1((buf),(buf)->used,(byte)) +#define BBUF_GET_ADD_ADDRESS(buf) ((buf)->p + (buf)->used) +#define BBUF_GET_OFFSET_POS(buf) ((buf)->used) + +/* from < to */ +#define BBUF_MOVE_RIGHT(buf,from,to,n) do {\ + if ((unsigned int )((to)+(n)) > (buf)->alloc) BBUF_EXPAND((buf),(to) + (n));\ + xmemmove((buf)->p + (to), (buf)->p + (from), (n));\ + if ((unsigned int )((to)+(n)) > (buf)->used) (buf)->used = (to) + (n);\ +} while (0) + +/* from > to */ +#define BBUF_MOVE_LEFT(buf,from,to,n) do {\ + xmemmove((buf)->p + (to), (buf)->p + (from), (n));\ +} while (0) + +/* from > to */ +#define BBUF_MOVE_LEFT_REDUCE(buf,from,to) do {\ + xmemmove((buf)->p + (to), (buf)->p + (from), (buf)->used - (from));\ + (buf)->used -= (from - to);\ +} while (0) + +#define BBUF_INSERT(buf,pos,bytes,n) do {\ + if (pos >= (buf)->used) {\ + BBUF_WRITE(buf,pos,bytes,n);\ + }\ + else {\ + BBUF_MOVE_RIGHT((buf),(pos),(pos) + (n),((buf)->used - (pos)));\ + xmemcpy((buf)->p + (pos), (bytes), (n));\ + }\ +} while (0) + +#define BBUF_GET_BYTE(buf, pos) (buf)->p[(pos)] + + +#define ANCHOR_BEGIN_BUF (1<<0) +#define ANCHOR_BEGIN_LINE (1<<1) +#define ANCHOR_BEGIN_POSITION (1<<2) +#define ANCHOR_END_BUF (1<<3) +#define ANCHOR_SEMI_END_BUF (1<<4) +#define ANCHOR_END_LINE (1<<5) + +#define ANCHOR_WORD_BOUND (1<<6) +#define ANCHOR_NOT_WORD_BOUND (1<<7) +#define ANCHOR_WORD_BEGIN (1<<8) +#define ANCHOR_WORD_END (1<<9) +#define ANCHOR_PREC_READ (1<<10) +#define ANCHOR_PREC_READ_NOT (1<<11) +#define ANCHOR_LOOK_BEHIND (1<<12) +#define ANCHOR_LOOK_BEHIND_NOT (1<<13) + +#define ANCHOR_ANYCHAR_STAR (1<<14) /* ".*" optimize info */ +#define ANCHOR_ANYCHAR_STAR_ML (1<<15) /* ".*" optimize info (multi-line) */ + +/* operation code */ +enum OpCode { + OP_FINISH = 0, /* matching process terminator (no more alternative) */ + OP_END = 1, /* pattern code terminator (success end) */ + + OP_EXACT1 = 2, /* single byte, N = 1 */ + OP_EXACT2, /* single byte, N = 2 */ + OP_EXACT3, /* single byte, N = 3 */ + OP_EXACT4, /* single byte, N = 4 */ + OP_EXACT5, /* single byte, N = 5 */ + OP_EXACTN, /* single byte */ + OP_EXACTMB2N1, /* mb-length = 2 N = 1 */ + OP_EXACTMB2N2, /* mb-length = 2 N = 2 */ + OP_EXACTMB2N3, /* mb-length = 2 N = 3 */ + OP_EXACTMB2N, /* mb-length = 2 */ + OP_EXACTMB3N, /* mb-length = 3 */ + OP_EXACTMBN, /* other length */ + + OP_EXACT1_IC, /* single byte, N = 1, ignore case */ + OP_EXACTN_IC, /* single byte, ignore case */ + + OP_CCLASS, + OP_CCLASS_MB, + OP_CCLASS_MIX, + OP_CCLASS_NOT, + OP_CCLASS_MB_NOT, + OP_CCLASS_MIX_NOT, + OP_CCLASS_NODE, /* pointer to CClassNode node */ + + OP_ANYCHAR, /* "." */ + OP_ANYCHAR_ML, /* "." multi-line */ + OP_ANYCHAR_STAR, /* ".*" */ + OP_ANYCHAR_ML_STAR, /* ".*" multi-line */ + OP_ANYCHAR_STAR_PEEK_NEXT, + OP_ANYCHAR_ML_STAR_PEEK_NEXT, + + OP_WORD, + OP_NOT_WORD, + OP_WORD_BOUND, + OP_NOT_WORD_BOUND, + OP_WORD_BEGIN, + OP_WORD_END, + + OP_BEGIN_BUF, + OP_END_BUF, + OP_BEGIN_LINE, + OP_END_LINE, + OP_SEMI_END_BUF, + OP_BEGIN_POSITION, + + OP_BACKREF1, + OP_BACKREF2, + OP_BACKREFN, + OP_BACKREFN_IC, + OP_BACKREF_MULTI, + OP_BACKREF_MULTI_IC, + OP_BACKREF_AT_LEVEL, /* \k<xxx+n>, \k<xxx-n> */ + + OP_MEMORY_START, + OP_MEMORY_START_PUSH, /* push back-tracker to stack */ + OP_MEMORY_END_PUSH, /* push back-tracker to stack */ + OP_MEMORY_END_PUSH_REC, /* push back-tracker to stack */ + OP_MEMORY_END, + OP_MEMORY_END_REC, /* push marker to stack */ + + OP_SET_OPTION_PUSH, /* set option and push recover option */ + OP_SET_OPTION, /* set option */ + + OP_FAIL, /* pop stack and move */ + OP_JUMP, + OP_PUSH, + OP_POP, + OP_PUSH_OR_JUMP_EXACT1, /* if match exact then push, else jump. */ + OP_PUSH_IF_PEEK_NEXT, /* if match exact then push, else none. */ + OP_REPEAT, /* {n,m} */ + OP_REPEAT_NG, /* {n,m}? (non greedy) */ + OP_REPEAT_INC, + OP_REPEAT_INC_NG, /* non greedy */ + OP_REPEAT_INC_SG, /* search and get in stack */ + OP_REPEAT_INC_NG_SG, /* search and get in stack (non greedy) */ + OP_NULL_CHECK_START, /* null loop checker start */ + OP_NULL_CHECK_END, /* null loop checker end */ + OP_NULL_CHECK_END_MEMST, /* null loop checker end (with capture status) */ + OP_NULL_CHECK_END_MEMST_PUSH, /* with capture status and push check-end */ + + OP_PUSH_POS, /* (?=...) start */ + OP_POP_POS, /* (?=...) end */ + OP_PUSH_POS_NOT, /* (?!...) start */ + OP_FAIL_POS, /* (?!...) end */ + OP_PUSH_STOP_BT, /* (?>...) start */ + OP_POP_STOP_BT, /* (?>...) end */ + OP_LOOK_BEHIND, /* (?<=...) start (no needs end opcode) */ + OP_PUSH_LOOK_BEHIND_NOT, /* (?<!...) start */ + OP_FAIL_LOOK_BEHIND_NOT, /* (?<!...) end */ + + OP_CALL, /* \g<name> */ + OP_RETURN, + + OP_STATE_CHECK_PUSH, /* combination explosion check and push */ + OP_STATE_CHECK_PUSH_OR_JUMP, /* check ok -> push, else jump */ + OP_STATE_CHECK, /* check only */ + OP_STATE_CHECK_ANYCHAR_STAR, + OP_STATE_CHECK_ANYCHAR_ML_STAR +}; + +typedef int RelAddrType; +typedef int AbsAddrType; +typedef int LengthType; +typedef int RepeatNumType; +typedef short int MemNumType; +typedef short int StateCheckNumType; +typedef void* PointerType; + +#define SIZE_OPCODE 1 +#define SIZE_RELADDR sizeof(RelAddrType) +#define SIZE_ABSADDR sizeof(AbsAddrType) +#define SIZE_LENGTH sizeof(LengthType) +#define SIZE_MEMNUM sizeof(MemNumType) +#define SIZE_STATE_CHECK_NUM sizeof(StateCheckNumType) +#define SIZE_REPEATNUM sizeof(RepeatNumType) +#define SIZE_OPTION sizeof(OnigOptionType) +#define SIZE_CODE_POINT sizeof(OnigCodePoint) +#define SIZE_POINTER sizeof(PointerType) + + +#ifdef PLATFORM_UNALIGNED_WORD_ACCESS + +#define PLATFORM_GET_INC(val,p,type) do{\ + val = *(type* )p;\ + (p) += sizeof(type);\ +} while(0) + +#else + +#define PLATFORM_GET_INC(val,p,type) do{\ + xmemcpy(&val, (p), sizeof(type));\ + (p) += sizeof(type);\ +} while(0) + +#endif /* PLATFORM_UNALIGNED_WORD_ACCESS */ + +#define GET_RELADDR_INC(addr,p) PLATFORM_GET_INC(addr, p, RelAddrType) +#define GET_ABSADDR_INC(addr,p) PLATFORM_GET_INC(addr, p, AbsAddrType) +#define GET_LENGTH_INC(len,p) PLATFORM_GET_INC(len, p, LengthType) +#define GET_MEMNUM_INC(num,p) PLATFORM_GET_INC(num, p, MemNumType) +#define GET_REPEATNUM_INC(num,p) PLATFORM_GET_INC(num, p, RepeatNumType) +#define GET_OPTION_INC(option,p) PLATFORM_GET_INC(option, p, OnigOptionType) +#define GET_POINTER_INC(ptr,p) PLATFORM_GET_INC(ptr, p, PointerType) +#define GET_STATE_CHECK_NUM_INC(num,p) PLATFORM_GET_INC(num, p, StateCheckNumType) + +/* code point's address must be aligned address. */ +#define GET_CODE_POINT(code,p) code = *((OnigCodePoint* )(p)) +#define GET_BYTE_INC(byte,p) do{\ + byte = *(p);\ + (p)++;\ +} while(0) + + +/* op-code + arg size */ +#define SIZE_OP_ANYCHAR_STAR SIZE_OPCODE +#define SIZE_OP_ANYCHAR_STAR_PEEK_NEXT (SIZE_OPCODE + 1) +#define SIZE_OP_JUMP (SIZE_OPCODE + SIZE_RELADDR) +#define SIZE_OP_PUSH (SIZE_OPCODE + SIZE_RELADDR) +#define SIZE_OP_POP SIZE_OPCODE +#define SIZE_OP_PUSH_OR_JUMP_EXACT1 (SIZE_OPCODE + SIZE_RELADDR + 1) +#define SIZE_OP_PUSH_IF_PEEK_NEXT (SIZE_OPCODE + SIZE_RELADDR + 1) +#define SIZE_OP_REPEAT_INC (SIZE_OPCODE + SIZE_MEMNUM) +#define SIZE_OP_REPEAT_INC_NG (SIZE_OPCODE + SIZE_MEMNUM) +#define SIZE_OP_PUSH_POS SIZE_OPCODE +#define SIZE_OP_PUSH_POS_NOT (SIZE_OPCODE + SIZE_RELADDR) +#define SIZE_OP_POP_POS SIZE_OPCODE +#define SIZE_OP_FAIL_POS SIZE_OPCODE +#define SIZE_OP_SET_OPTION (SIZE_OPCODE + SIZE_OPTION) +#define SIZE_OP_SET_OPTION_PUSH (SIZE_OPCODE + SIZE_OPTION) +#define SIZE_OP_FAIL SIZE_OPCODE +#define SIZE_OP_MEMORY_START (SIZE_OPCODE + SIZE_MEMNUM) +#define SIZE_OP_MEMORY_START_PUSH (SIZE_OPCODE + SIZE_MEMNUM) +#define SIZE_OP_MEMORY_END_PUSH (SIZE_OPCODE + SIZE_MEMNUM) +#define SIZE_OP_MEMORY_END_PUSH_REC (SIZE_OPCODE + SIZE_MEMNUM) +#define SIZE_OP_MEMORY_END (SIZE_OPCODE + SIZE_MEMNUM) +#define SIZE_OP_MEMORY_END_REC (SIZE_OPCODE + SIZE_MEMNUM) +#define SIZE_OP_PUSH_STOP_BT SIZE_OPCODE +#define SIZE_OP_POP_STOP_BT SIZE_OPCODE +#define SIZE_OP_NULL_CHECK_START (SIZE_OPCODE + SIZE_MEMNUM) +#define SIZE_OP_NULL_CHECK_END (SIZE_OPCODE + SIZE_MEMNUM) +#define SIZE_OP_LOOK_BEHIND (SIZE_OPCODE + SIZE_LENGTH) +#define SIZE_OP_PUSH_LOOK_BEHIND_NOT (SIZE_OPCODE + SIZE_RELADDR + SIZE_LENGTH) +#define SIZE_OP_FAIL_LOOK_BEHIND_NOT SIZE_OPCODE +#define SIZE_OP_CALL (SIZE_OPCODE + SIZE_ABSADDR) +#define SIZE_OP_RETURN SIZE_OPCODE + +#ifdef USE_COMBINATION_EXPLOSION_CHECK +#define SIZE_OP_STATE_CHECK (SIZE_OPCODE + SIZE_STATE_CHECK_NUM) +#define SIZE_OP_STATE_CHECK_PUSH (SIZE_OPCODE + SIZE_STATE_CHECK_NUM + SIZE_RELADDR) +#define SIZE_OP_STATE_CHECK_PUSH_OR_JUMP (SIZE_OPCODE + SIZE_STATE_CHECK_NUM + SIZE_RELADDR) +#define SIZE_OP_STATE_CHECK_ANYCHAR_STAR (SIZE_OPCODE + SIZE_STATE_CHECK_NUM) +#endif + +#define MC_ESC(enc) (enc)->meta_char_table.esc +#define MC_ANYCHAR(enc) (enc)->meta_char_table.anychar +#define MC_ANYTIME(enc) (enc)->meta_char_table.anytime +#define MC_ZERO_OR_ONE_TIME(enc) (enc)->meta_char_table.zero_or_one_time +#define MC_ONE_OR_MORE_TIME(enc) (enc)->meta_char_table.one_or_more_time +#define MC_ANYCHAR_ANYTIME(enc) (enc)->meta_char_table.anychar_anytime + +#define IS_MC_ESC_CODE(code, enc, syn) \ + ((code) == MC_ESC(enc) && \ + !IS_SYNTAX_OP2((syn), ONIG_SYN_OP2_INEFFECTIVE_ESCAPE)) + + +#define SYN_POSIX_COMMON_OP \ + ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_POSIX_BRACKET | \ + ONIG_SYN_OP_DECIMAL_BACKREF | \ + ONIG_SYN_OP_BRACKET_CC | ONIG_SYN_OP_ASTERISK_ZERO_INF | \ + ONIG_SYN_OP_LINE_ANCHOR | \ + ONIG_SYN_OP_ESC_CONTROL_CHARS ) + +#define SYN_GNU_REGEX_OP \ + ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_BRACKET_CC | \ + ONIG_SYN_OP_POSIX_BRACKET | ONIG_SYN_OP_DECIMAL_BACKREF | \ + ONIG_SYN_OP_BRACE_INTERVAL | ONIG_SYN_OP_LPAREN_SUBEXP | \ + ONIG_SYN_OP_VBAR_ALT | \ + ONIG_SYN_OP_ASTERISK_ZERO_INF | ONIG_SYN_OP_PLUS_ONE_INF | \ + ONIG_SYN_OP_QMARK_ZERO_ONE | \ + ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR | ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR | \ + ONIG_SYN_OP_ESC_W_WORD | \ + ONIG_SYN_OP_ESC_B_WORD_BOUND | ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END | \ + ONIG_SYN_OP_ESC_S_WHITE_SPACE | ONIG_SYN_OP_ESC_D_DIGIT | \ + ONIG_SYN_OP_LINE_ANCHOR ) + +#define SYN_GNU_REGEX_BV \ + ( ONIG_SYN_CONTEXT_INDEP_ANCHORS | ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS | \ + ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS | ONIG_SYN_ALLOW_INVALID_INTERVAL | \ + ONIG_SYN_BACKSLASH_ESCAPE_IN_CC | ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC ) + +/* cclass node */ +#define FLAG_CCLASS_NOT 1 +#define FLAG_CCLASS_SHARE (1<<1) + +#define CCLASS_SET_NOT(cc) (cc)->flags |= FLAG_CCLASS_NOT +#define CCLASS_CLEAR_NOT(cc) (cc)->flags &= ~FLAG_CCLASS_NOT +#define CCLASS_SET_SHARE(cc) (cc)->flags |= FLAG_CCLASS_SHARE +#define IS_CCLASS_NOT(cc) (((cc)->flags & FLAG_CCLASS_NOT) != 0) +#define IS_CCLASS_SHARE(cc) (((cc)->flags & FLAG_CCLASS_SHARE) != 0) + +typedef struct { + int flags; + BitSet bs; + BBuf* mbuf; /* multi-byte info or NULL */ +} CClassNode; + + +#ifdef ONIG_DEBUG + +typedef struct { + short int opcode; + char* name; + short int arg_type; +} OnigOpInfoType; + +extern OnigOpInfoType OnigOpInfo[]; + +extern void onig_print_compiled_byte_code P_((FILE* f, UChar* bp, UChar** nextp, OnigEncoding enc)); + +#ifdef ONIG_DEBUG_STATISTICS +extern void onig_statistics_init P_((void)); +extern void onig_print_statistics P_((FILE* f)); +#endif +#endif + +extern UChar* onig_error_code_to_format P_((int code)); +extern void onig_snprintf_with_pattern PV_((UChar buf[], int bufsize, OnigEncoding enc, UChar* pat, UChar* pat_end, const UChar *fmt, ...)); +extern int onig_bbuf_init P_((BBuf* buf, int size)); +extern int onig_alloc_init P_((regex_t** reg, OnigOptionType option, OnigAmbigType ambig_flag, OnigEncoding enc, OnigSyntaxType* syntax)); +extern int onig_compile P_((regex_t* reg, const UChar* pattern, const UChar* pattern_end, OnigErrorInfo* einfo)); +extern void onig_chain_reduce P_((regex_t* reg)); +extern void onig_chain_link_add P_((regex_t* to, regex_t* add)); +extern void onig_transfer P_((regex_t* to, regex_t* from)); +extern int onig_is_code_in_cc P_((OnigEncoding enc, OnigCodePoint code, CClassNode* cc)); + +#endif /* REGINT_H */ diff --git a/ext/mbstring/oniguruma/regparse.c b/ext/mbstring/oniguruma/regparse.c new file mode 100644 index 0000000..abf2cc1 --- /dev/null +++ b/ext/mbstring/oniguruma/regparse.c @@ -0,0 +1,5290 @@ +/********************************************************************** + regparse.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regparse.h" + +#define WARN_BUFSIZE 256 + +OnigSyntaxType OnigSyntaxRuby = { + (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY | + ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 | + ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS | + ONIG_SYN_OP_ESC_C_CONTROL ) + & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END ) + , ( ONIG_SYN_OP2_QMARK_GROUP_EFFECT | + ONIG_SYN_OP2_OPTION_RUBY | + ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP | ONIG_SYN_OP2_ESC_K_NAMED_BACKREF | + ONIG_SYN_OP2_ESC_G_SUBEXP_CALL | + ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT | + ONIG_SYN_OP2_CCLASS_SET_OP | ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL | + ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META | ONIG_SYN_OP2_ESC_V_VTAB | + ONIG_SYN_OP2_ESC_H_XDIGIT ) + , ( SYN_GNU_REGEX_BV | + ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV | + ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND | + ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP | + ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME | + ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY | + ONIG_SYN_WARN_CC_OP_NOT_ESCAPED | + ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT ) + , ONIG_OPTION_NONE +}; + +OnigSyntaxType* OnigDefaultSyntax = ONIG_SYNTAX_RUBY; + +extern void onig_null_warn(const char* s) { } + +#ifdef RUBY_PLATFORM +extern void +onig_rb_warn(const char* s) +{ + rb_warn("%s", s); +} + +extern void +onig_rb_warning(const char* s) +{ + rb_warning("%s", s); +} +#endif + +#ifdef DEFAULT_WARN_FUNCTION +static OnigWarnFunc onig_warn = (OnigWarnFunc )DEFAULT_WARN_FUNCTION; +#else +static OnigWarnFunc onig_warn = onig_null_warn; +#endif + +#ifdef DEFAULT_VERB_WARN_FUNCTION +static OnigWarnFunc onig_verb_warn = (OnigWarnFunc )DEFAULT_VERB_WARN_FUNCTION; +#else +static OnigWarnFunc onig_verb_warn = onig_null_warn; +#endif + +extern void onig_set_warn_func(OnigWarnFunc f) +{ + onig_warn = f; +} + +extern void onig_set_verb_warn_func(OnigWarnFunc f) +{ + onig_verb_warn = f; +} + +static void +bbuf_free(BBuf* bbuf) +{ + if (IS_NOT_NULL(bbuf)) { + if (IS_NOT_NULL(bbuf->p)) xfree(bbuf->p); + xfree(bbuf); + } +} + +static int +bbuf_clone(BBuf** rto, BBuf* from) +{ + int r; + BBuf *to; + + *rto = to = (BBuf* )xmalloc(sizeof(BBuf)); + CHECK_NULL_RETURN_VAL(to, ONIGERR_MEMORY); + r = BBUF_INIT(to, from->alloc); + if (r != 0) return r; + to->used = from->used; + xmemcpy(to->p, from->p, from->used); + return 0; +} + +#define ONOFF(v,f,negative) (negative) ? ((v) &= ~(f)) : ((v) |= (f)) + +#define MBCODE_START_POS(enc) \ + (OnigCodePoint )(ONIGENC_MBC_MINLEN(enc) > 1 ? 0 : 0x80) + +#define SET_ALL_MULTI_BYTE_RANGE(enc, pbuf) \ + add_code_range_to_buf(pbuf, MBCODE_START_POS(enc), ~((OnigCodePoint )0)) + +#define ADD_ALL_MULTI_BYTE_RANGE(enc, mbuf) do {\ + if (! ONIGENC_IS_SINGLEBYTE(enc)) {\ + r = SET_ALL_MULTI_BYTE_RANGE(enc, &(mbuf));\ + if (r) return r;\ + }\ +} while (0) + + +#define BITSET_IS_EMPTY(bs,empty) do {\ + int i;\ + empty = 1;\ + for (i = 0; i < BITSET_SIZE; i++) {\ + if ((bs)[i] != 0) {\ + empty = 0; break;\ + }\ + }\ +} while (0) + +static void +bitset_set_range(BitSetRef bs, int from, int to) +{ + int i; + for (i = from; i <= to && i < SINGLE_BYTE_SIZE; i++) { + BITSET_SET_BIT(bs, i); + } +} + +#if 0 +static void +bitset_set_all(BitSetRef bs) +{ + int i; + for (i = 0; i < BITSET_SIZE; i++) { + bs[i] = ~((Bits )0); + } +} +#endif + +static void +bitset_invert(BitSetRef bs) +{ + int i; + for (i = 0; i < BITSET_SIZE; i++) { + bs[i] = ~(bs[i]); + } +} + +static void +bitset_invert_to(BitSetRef from, BitSetRef to) +{ + int i; + for (i = 0; i < BITSET_SIZE; i++) { + to[i] = ~(from[i]); + } +} + +static void +bitset_and(BitSetRef dest, BitSetRef bs) +{ + int i; + for (i = 0; i < BITSET_SIZE; i++) { + dest[i] &= bs[i]; + } +} + +static void +bitset_or(BitSetRef dest, BitSetRef bs) +{ + int i; + for (i = 0; i < BITSET_SIZE; i++) { + dest[i] |= bs[i]; + } +} + +static void +bitset_copy(BitSetRef dest, BitSetRef bs) +{ + int i; + for (i = 0; i < BITSET_SIZE; i++) { + dest[i] = bs[i]; + } +} + +extern int +onig_strncmp(const UChar* s1, const UChar* s2, int n) +{ + int x; + + while (n-- > 0) { + x = *s2++ - *s1++; + if (x) return x; + } + return 0; +} + +static void +k_strcpy(UChar* dest, const UChar* src, const UChar* end) +{ + int len = end - src; + if (len > 0) { + xmemcpy(dest, src, len); + dest[len] = (UChar )0; + } +} + +static UChar* +strdup_with_null(OnigEncoding enc, UChar* s, UChar* end) +{ + int slen, term_len, i; + UChar *r; + + slen = end - s; + term_len = ONIGENC_MBC_MINLEN(enc); + + r = (UChar* )xmalloc(slen + term_len); + CHECK_NULL_RETURN(r); + xmemcpy(r, s, slen); + + for (i = 0; i < term_len; i++) + r[slen + i] = (UChar )0; + + return r; +} + + +/* scan pattern methods */ +#define PEND_VALUE 0 + +#define PFETCH_READY UChar* pfetch_prev +#define PEND (p < end ? 0 : 1) +#define PUNFETCH p = pfetch_prev +#define PINC do { \ + pfetch_prev = p; \ + p += ONIGENC_MBC_ENC_LEN(enc, p); \ +} while (0) +#define PFETCH(c) do { \ + c = ONIGENC_MBC_TO_CODE(enc, p, end); \ + pfetch_prev = p; \ + p += ONIGENC_MBC_ENC_LEN(enc, p); \ +} while (0) + +#define PPEEK (p < end ? ONIGENC_MBC_TO_CODE(enc, p, end) : PEND_VALUE) +#define PPEEK_IS(c) (PPEEK == (OnigCodePoint )c) + +static UChar* +k_strcat_capa(UChar* dest, UChar* dest_end, const UChar* src, const UChar* src_end, + int capa) +{ + UChar* r; + + if (dest) + r = (UChar* )xrealloc(dest, capa + 1); + else + r = (UChar* )xmalloc(capa + 1); + + CHECK_NULL_RETURN(r); + k_strcpy(r + (dest_end - dest), src, src_end); + return r; +} + +/* dest on static area */ +static UChar* +strcat_capa_from_static(UChar* dest, UChar* dest_end, + const UChar* src, const UChar* src_end, int capa) +{ + UChar* r; + + r = (UChar* )xmalloc(capa + 1); + CHECK_NULL_RETURN(r); + k_strcpy(r, dest, dest_end); + k_strcpy(r + (dest_end - dest), src, src_end); + return r; +} + +#ifdef USE_NAMED_GROUP + +#define INIT_NAME_BACKREFS_ALLOC_NUM 8 + +typedef struct { + UChar* name; + int name_len; /* byte length */ + int back_num; /* number of backrefs */ + int back_alloc; + int back_ref1; + int* back_refs; +} NameEntry; + +#ifdef USE_ST_HASH_TABLE + +#include "st.h" + +typedef struct { + unsigned char* s; + unsigned char* end; +} st_strend_key; + +static int strend_cmp(st_strend_key*, st_strend_key*); +static int strend_hash(st_strend_key*); + +static struct st_hash_type type_strend_hash = { + strend_cmp, + strend_hash, +}; + +static st_table* +onig_st_init_strend_table_with_size(int size) +{ + return onig_st_init_table_with_size(&type_strend_hash, size); +} + +static int +onig_st_lookup_strend(st_table *table, const UChar* str_key, const UChar* end_key, st_data_t *value) +{ + st_strend_key key; + + key.s = (unsigned char* )str_key; + key.end = (unsigned char* )end_key; + + return onig_st_lookup(table, (st_data_t )(&key), value); +} + +static int +onig_st_insert_strend(st_table *table, const UChar* str_key, const UChar* end_key, st_data_t value) +{ + st_strend_key* key; + int result; + + key = (st_strend_key* )xmalloc(sizeof(st_strend_key)); + key->s = (unsigned char* )str_key; + key->end = (unsigned char* )end_key; + result = onig_st_insert(table, (st_data_t )key, value); + if (result) { + xfree(key); + } + return result; +} + +static int +strend_cmp(st_strend_key* x, st_strend_key* y) +{ + unsigned char *p, *q; + int c; + + if ((x->end - x->s) != (y->end - y->s)) + return 1; + + p = x->s; + q = y->s; + while (p < x->end) { + c = (int )*p - (int )*q; + if (c != 0) return c; + + p++; q++; + } + + return 0; +} + +static int +strend_hash(st_strend_key* x) +{ + int val; + unsigned char *p; + + val = 0; + p = x->s; + while (p < x->end) { + val = val * 997 + (int )*p++; + } + + return val + (val >> 5); +} + +typedef st_table NameTable; +typedef st_data_t HashDataType; /* 1.6 st.h doesn't define st_data_t type */ + +#define NAMEBUF_SIZE 24 +#define NAMEBUF_SIZE_1 25 + +#ifdef ONIG_DEBUG +static int +i_print_name_entry(UChar* key, NameEntry* e, void* arg) +{ + int i; + FILE* fp = (FILE* )arg; + + fprintf(fp, "%s: ", e->name); + if (e->back_num == 0) + fputs("-", fp); + else if (e->back_num == 1) + fprintf(fp, "%d", e->back_ref1); + else { + for (i = 0; i < e->back_num; i++) { + if (i > 0) fprintf(fp, ", "); + fprintf(fp, "%d", e->back_refs[i]); + } + } + fputs("\n", fp); + return ST_CONTINUE; +} + +extern int +onig_print_names(FILE* fp, regex_t* reg) +{ + NameTable* t = (NameTable* )reg->name_table; + + if (IS_NOT_NULL(t)) { + fprintf(fp, "name table\n"); + onig_st_foreach(t, i_print_name_entry, (HashDataType )fp); + fputs("\n", fp); + } + return 0; +} +#endif + +static int +i_free_name_entry(UChar* key, NameEntry* e, void* arg) +{ + xfree(e->name); + if (IS_NOT_NULL(e->back_refs)) xfree(e->back_refs); + xfree(key); + xfree(e); + return ST_DELETE; +} + +static int +names_clear(regex_t* reg) +{ + NameTable* t = (NameTable* )reg->name_table; + + if (IS_NOT_NULL(t)) { + onig_st_foreach(t, i_free_name_entry, 0); + } + return 0; +} + +extern int +onig_names_free(regex_t* reg) +{ + int r; + NameTable* t; + + r = names_clear(reg); + if (r) return r; + + t = (NameTable* )reg->name_table; + if (IS_NOT_NULL(t)) onig_st_free_table(t); + reg->name_table = (void* )NULL; + return 0; +} + +static NameEntry* +name_find(regex_t* reg, const UChar* name, const UChar* name_end) +{ + NameEntry* e; + NameTable* t = (NameTable* )reg->name_table; + + e = (NameEntry* )NULL; + if (IS_NOT_NULL(t)) { + onig_st_lookup_strend(t, name, name_end, (HashDataType* )((void* )(&e))); + } + return e; +} + +typedef struct { + int (*func)(const UChar*, const UChar*,int,int*,regex_t*,void*); + regex_t* reg; + void* arg; + int ret; + OnigEncoding enc; +} INamesArg; + +static int +i_names(UChar* key, NameEntry* e, INamesArg* arg) +{ + int r = (*(arg->func))(e->name, + /*e->name + onigenc_str_bytelen_null(arg->enc, e->name), */ + e->name + e->name_len, + e->back_num, + (e->back_num > 1 ? e->back_refs : &(e->back_ref1)), + arg->reg, arg->arg); + if (r != 0) { + arg->ret = r; + return ST_STOP; + } + return ST_CONTINUE; +} + +extern int +onig_foreach_name(regex_t* reg, + int (*func)(const UChar*, const UChar*,int,int*,regex_t*,void*), + void* arg) +{ + INamesArg narg; + NameTable* t = (NameTable* )reg->name_table; + + narg.ret = 0; + if (IS_NOT_NULL(t)) { + narg.func = func; + narg.reg = reg; + narg.arg = arg; + narg.enc = reg->enc; /* should be pattern encoding. */ + onig_st_foreach(t, i_names, (HashDataType )&narg); + } + return narg.ret; +} + +static int +i_renumber_name(UChar* key, NameEntry* e, GroupNumRemap* map) +{ + int i; + + if (e->back_num > 1) { + for (i = 0; i < e->back_num; i++) { + e->back_refs[i] = map[e->back_refs[i]].new_val; + } + } + else if (e->back_num == 1) { + e->back_ref1 = map[e->back_ref1].new_val; + } + + return ST_CONTINUE; +} + +extern int +onig_renumber_name_table(regex_t* reg, GroupNumRemap* map) +{ + NameTable* t = (NameTable* )reg->name_table; + + if (IS_NOT_NULL(t)) { + onig_st_foreach(t, i_renumber_name, (HashDataType )map); + } + return 0; +} + + +extern int +onig_number_of_names(regex_t* reg) +{ + NameTable* t = (NameTable* )reg->name_table; + + if (IS_NOT_NULL(t)) + return t->num_entries; + else + return 0; +} + +#else /* USE_ST_HASH_TABLE */ + +#define INIT_NAMES_ALLOC_NUM 8 + +typedef struct { + NameEntry* e; + int num; + int alloc; +} NameTable; + + +#ifdef ONIG_DEBUG +extern int +onig_print_names(FILE* fp, regex_t* reg) +{ + int i, j; + NameEntry* e; + NameTable* t = (NameTable* )reg->name_table; + + if (IS_NOT_NULL(t) && t->num > 0) { + fprintf(fp, "name table\n"); + for (i = 0; i < t->num; i++) { + e = &(t->e[i]); + fprintf(fp, "%s: ", e->name); + if (e->back_num == 0) { + fputs("-", fp); + } + else if (e->back_num == 1) { + fprintf(fp, "%d", e->back_ref1); + } + else { + for (j = 0; j < e->back_num; j++) { + if (j > 0) fprintf(fp, ", "); + fprintf(fp, "%d", e->back_refs[j]); + } + } + fputs("\n", fp); + } + fputs("\n", fp); + } + return 0; +} +#endif + +static int +names_clear(regex_t* reg) +{ + int i; + NameEntry* e; + NameTable* t = (NameTable* )reg->name_table; + + if (IS_NOT_NULL(t)) { + for (i = 0; i < t->num; i++) { + e = &(t->e[i]); + if (IS_NOT_NULL(e->name)) { + xfree(e->name); + e->name = NULL; + e->name_len = 0; + e->back_num = 0; + e->back_alloc = 0; + if (IS_NOT_NULL(e->back_refs)) xfree(e->back_refs); + e->back_refs = (int* )NULL; + } + } + if (IS_NOT_NULL(t->e)) { + xfree(t->e); + t->e = NULL; + } + t->num = 0; + } + return 0; +} + +extern int +onig_names_free(regex_t* reg) +{ + int r; + NameTable* t; + + r = names_clear(reg); + if (r) return r; + + t = (NameTable* )reg->name_table; + if (IS_NOT_NULL(t)) xfree(t); + reg->name_table = NULL; + return 0; +} + +static NameEntry* +name_find(regex_t* reg, UChar* name, UChar* name_end) +{ + int i, len; + NameEntry* e; + NameTable* t = (NameTable* )reg->name_table; + + if (IS_NOT_NULL(t)) { + len = name_end - name; + for (i = 0; i < t->num; i++) { + e = &(t->e[i]); + if (len == e->name_len && onig_strncmp(name, e->name, len) == 0) + return e; + } + } + return (NameEntry* )NULL; +} + +extern int +onig_foreach_name(regex_t* reg, + int (*func)(const UChar*, const UChar*,int,int*,regex_t*,void*), + void* arg) +{ + int i, r; + NameEntry* e; + NameTable* t = (NameTable* )reg->name_table; + + if (IS_NOT_NULL(t)) { + for (i = 0; i < t->num; i++) { + e = &(t->e[i]); + r = (*func)(e->name, e->name + e->name_len, e->back_num, + (e->back_num > 1 ? e->back_refs : &(e->back_ref1)), + reg, arg); + if (r != 0) return r; + } + } + return 0; +} + +extern int +onig_number_of_names(regex_t* reg) +{ + NameTable* t = (NameTable* )reg->name_table; + + if (IS_NOT_NULL(t)) + return t->num; + else + return 0; +} + +#endif /* else USE_ST_HASH_TABLE */ + +static int +name_add(regex_t* reg, UChar* name, UChar* name_end, int backref, ScanEnv* env) +{ + int alloc; + NameEntry* e; + NameTable* t = (NameTable* )reg->name_table; + + if (name_end - name <= 0) + return ONIGERR_EMPTY_GROUP_NAME; + + e = name_find(reg, name, name_end); + if (IS_NULL(e)) { +#ifdef USE_ST_HASH_TABLE + if (IS_NULL(t)) { + t = onig_st_init_strend_table_with_size(5); + reg->name_table = (void* )t; + } + e = (NameEntry* )xmalloc(sizeof(NameEntry)); + CHECK_NULL_RETURN_VAL(e, ONIGERR_MEMORY); + + e->name = strdup_with_null(reg->enc, name, name_end); + if (IS_NULL(e->name)) return ONIGERR_MEMORY; + onig_st_insert_strend(t, e->name, (e->name + (name_end - name)), + (HashDataType )e); + + e->name_len = name_end - name; + e->back_num = 0; + e->back_alloc = 0; + e->back_refs = (int* )NULL; + +#else + + if (IS_NULL(t)) { + alloc = INIT_NAMES_ALLOC_NUM; + t = (NameTable* )xmalloc(sizeof(NameTable)); + CHECK_NULL_RETURN_VAL(t, ONIGERR_MEMORY); + t->e = NULL; + t->alloc = 0; + t->num = 0; + + t->e = (NameEntry* )xmalloc(sizeof(NameEntry) * alloc); + if (IS_NULL(t->e)) { + xfree(t); + return ONIGERR_MEMORY; + } + t->alloc = alloc; + reg->name_table = t; + goto clear; + } + else if (t->num == t->alloc) { + int i; + + alloc = t->alloc * 2; + t->e = (NameEntry* )xrealloc(t->e, sizeof(NameEntry) * alloc); + CHECK_NULL_RETURN_VAL(t->e, ONIGERR_MEMORY); + t->alloc = alloc; + + clear: + for (i = t->num; i < t->alloc; i++) { + t->e[i].name = NULL; + t->e[i].name_len = 0; + t->e[i].back_num = 0; + t->e[i].back_alloc = 0; + t->e[i].back_refs = (int* )NULL; + } + } + e = &(t->e[t->num]); + t->num++; + e->name = strdup_with_null(reg->enc, name, name_end); + e->name_len = name_end - name; +#endif + } + + if (e->back_num >= 1 && + ! IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME)) { + onig_scan_env_set_error_string(env, ONIGERR_MULTIPLEX_DEFINED_NAME, + name, name_end); + return ONIGERR_MULTIPLEX_DEFINED_NAME; + } + + e->back_num++; + if (e->back_num == 1) { + e->back_ref1 = backref; + } + else { + if (e->back_num == 2) { + alloc = INIT_NAME_BACKREFS_ALLOC_NUM; + e->back_refs = (int* )xmalloc(sizeof(int) * alloc); + CHECK_NULL_RETURN_VAL(e->back_refs, ONIGERR_MEMORY); + e->back_alloc = alloc; + e->back_refs[0] = e->back_ref1; + e->back_refs[1] = backref; + } + else { + if (e->back_num > e->back_alloc) { + alloc = e->back_alloc * 2; + e->back_refs = (int* )xrealloc(e->back_refs, sizeof(int) * alloc); + CHECK_NULL_RETURN_VAL(e->back_refs, ONIGERR_MEMORY); + e->back_alloc = alloc; + } + e->back_refs[e->back_num - 1] = backref; + } + } + + return 0; +} + +extern int +onig_name_to_group_numbers(regex_t* reg, const UChar* name, + const UChar* name_end, int** nums) +{ + NameEntry* e; + + e = name_find(reg, name, name_end); + if (IS_NULL(e)) return ONIGERR_UNDEFINED_NAME_REFERENCE; + + switch (e->back_num) { + case 0: + break; + case 1: + *nums = &(e->back_ref1); + break; + default: + *nums = e->back_refs; + break; + } + return e->back_num; +} + +extern int +onig_name_to_backref_number(regex_t* reg, const UChar* name, + const UChar* name_end, OnigRegion *region) +{ + int i, n, *nums; + + n = onig_name_to_group_numbers(reg, name, name_end, &nums); + if (n < 0) + return n; + else if (n == 0) + return ONIGERR_PARSER_BUG; + else if (n == 1) + return nums[0]; + else { + if (IS_NOT_NULL(region)) { + for (i = n - 1; i >= 0; i--) { + if (region->beg[nums[i]] != ONIG_REGION_NOTPOS) + return nums[i]; + } + } + return nums[n - 1]; + } +} + +#else /* USE_NAMED_GROUP */ + +extern int +onig_name_to_group_numbers(regex_t* reg, const UChar* name, + const UChar* name_end, int** nums) +{ + return ONIG_NO_SUPPORT_CONFIG; +} + +extern int +onig_name_to_backref_number(regex_t* reg, const UChar* name, + const UChar* name_end, OnigRegion* region) +{ + return ONIG_NO_SUPPORT_CONFIG; +} + +extern int +onig_foreach_name(regex_t* reg, + int (*func)(const UChar*, const UChar*,int,int*,regex_t*,void*), + void* arg) +{ + return ONIG_NO_SUPPORT_CONFIG; +} + +extern int +onig_number_of_names(regex_t* reg) +{ + return 0; +} +#endif /* else USE_NAMED_GROUP */ + +extern int +onig_noname_group_capture_is_active(regex_t* reg) +{ + if (ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_DONT_CAPTURE_GROUP)) + return 0; + +#ifdef USE_NAMED_GROUP + if (onig_number_of_names(reg) > 0 && + IS_SYNTAX_BV(reg->syntax, ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP) && + !ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_CAPTURE_GROUP)) { + return 0; + } +#endif + + return 1; +} + + +#define INIT_SCANENV_MEMNODES_ALLOC_SIZE 16 + +static void +scan_env_clear(ScanEnv* env) +{ + int i; + + BIT_STATUS_CLEAR(env->capture_history); + BIT_STATUS_CLEAR(env->bt_mem_start); + BIT_STATUS_CLEAR(env->bt_mem_end); + BIT_STATUS_CLEAR(env->backrefed_mem); + env->error = (UChar* )NULL; + env->error_end = (UChar* )NULL; + env->num_call = 0; + env->num_mem = 0; +#ifdef USE_NAMED_GROUP + env->num_named = 0; +#endif + env->mem_alloc = 0; + env->mem_nodes_dynamic = (Node** )NULL; + + for (i = 0; i < SCANENV_MEMNODES_SIZE; i++) + env->mem_nodes_static[i] = NULL_NODE; + +#ifdef USE_COMBINATION_EXPLOSION_CHECK + env->num_comb_exp_check = 0; + env->comb_exp_max_regnum = 0; + env->curr_max_regnum = 0; + env->has_recursion = 0; +#endif +} + +static int +scan_env_add_mem_entry(ScanEnv* env) +{ + int i, need, alloc; + Node** p; + + need = env->num_mem + 1; + if (need >= SCANENV_MEMNODES_SIZE) { + if (env->mem_alloc <= need) { + if (IS_NULL(env->mem_nodes_dynamic)) { + alloc = INIT_SCANENV_MEMNODES_ALLOC_SIZE; + p = (Node** )xmalloc(sizeof(Node*) * alloc); + xmemcpy(p, env->mem_nodes_static, + sizeof(Node*) * SCANENV_MEMNODES_SIZE); + } + else { + alloc = env->mem_alloc * 2; + p = (Node** )xrealloc(env->mem_nodes_dynamic, sizeof(Node*) * alloc); + } + CHECK_NULL_RETURN_VAL(p, ONIGERR_MEMORY); + + for (i = env->num_mem + 1; i < alloc; i++) + p[i] = NULL_NODE; + + env->mem_nodes_dynamic = p; + env->mem_alloc = alloc; + } + } + + env->num_mem++; + return env->num_mem; +} + +static int +scan_env_set_mem_node(ScanEnv* env, int num, Node* node) +{ + if (env->num_mem >= num) + SCANENV_MEM_NODES(env)[num] = node; + else + return ONIGERR_PARSER_BUG; + return 0; +} + + +#ifdef USE_RECYCLE_NODE +typedef struct _FreeNode { + struct _FreeNode* next; +} FreeNode; + +static FreeNode* FreeNodeList = (FreeNode* )NULL; +#endif + +extern void +onig_node_free(Node* node) +{ + start: + if (IS_NULL(node)) return ; + + switch (NTYPE(node)) { + case N_STRING: + if (IS_NOT_NULL(NSTRING(node).s) && NSTRING(node).s != NSTRING(node).buf) { + xfree(NSTRING(node).s); + } + break; + + case N_LIST: + case N_ALT: + onig_node_free(NCONS(node).left); + /* onig_node_free(NCONS(node).right); */ + { + Node* next_node = NCONS(node).right; + +#ifdef USE_RECYCLE_NODE + { + FreeNode* n = (FreeNode* )node; + + THREAD_ATOMIC_START; + n->next = FreeNodeList; + FreeNodeList = n; + THREAD_ATOMIC_END; + } +#else + xfree(node); +#endif + + node = next_node; + goto start; + } + break; + + case N_CCLASS: + { + CClassNode* cc = &(NCCLASS(node)); + + if (IS_CCLASS_SHARE(cc)) + return ; + + if (cc->mbuf) + bbuf_free(cc->mbuf); + } + break; + + case N_QUANTIFIER: + if (NQUANTIFIER(node).target) + onig_node_free(NQUANTIFIER(node).target); + break; + + case N_EFFECT: + if (NEFFECT(node).target) + onig_node_free(NEFFECT(node).target); + break; + + case N_BACKREF: + if (IS_NOT_NULL(NBACKREF(node).back_dynamic)) + xfree(NBACKREF(node).back_dynamic); + break; + + case N_ANCHOR: + if (NANCHOR(node).target) + onig_node_free(NANCHOR(node).target); + break; + } + +#ifdef USE_RECYCLE_NODE + { + FreeNode* n = (FreeNode* )node; + + THREAD_ATOMIC_START; + n->next = FreeNodeList; + FreeNodeList = n; + THREAD_ATOMIC_END; + } +#else + xfree(node); +#endif +} + +#ifdef USE_RECYCLE_NODE +extern int +onig_free_node_list(void) +{ + FreeNode* n; + + /* THREAD_ATOMIC_START; */ + while (IS_NOT_NULL(FreeNodeList)) { + n = FreeNodeList; + FreeNodeList = FreeNodeList->next; + xfree(n); + } + /* THREAD_ATOMIC_END; */ + return 0; +} +#endif + +static Node* +node_new(void) +{ + Node* node; + +#ifdef USE_RECYCLE_NODE + THREAD_ATOMIC_START; + if (IS_NOT_NULL(FreeNodeList)) { + node = (Node* )FreeNodeList; + FreeNodeList = FreeNodeList->next; + THREAD_ATOMIC_END; + return node; + } + THREAD_ATOMIC_END; +#endif + + node = (Node* )xmalloc(sizeof(Node)); + return node; +} + + +static void +initialize_cclass(CClassNode* cc) +{ + BITSET_CLEAR(cc->bs); + cc->flags = 0; + cc->mbuf = NULL; +} + +static Node* +node_new_cclass(void) +{ + Node* node = node_new(); + CHECK_NULL_RETURN(node); + node->type = N_CCLASS; + + initialize_cclass(&(NCCLASS(node))); + return node; +} + +static Node* +node_new_cclass_by_codepoint_range(int not, + const OnigCodePoint sbr[], const OnigCodePoint mbr[]) +{ + CClassNode* cc; + int n, i, j; + + Node* node = node_new(); + CHECK_NULL_RETURN(node); + node->type = N_CCLASS; + + cc = &(NCCLASS(node)); + cc->flags = 0; + if (not != 0) CCLASS_SET_NOT(cc); + + BITSET_CLEAR(cc->bs); + if (IS_NOT_NULL(sbr)) { + n = ONIGENC_CODE_RANGE_NUM(sbr); + for (i = 0; i < n; i++) { + for (j = ONIGENC_CODE_RANGE_FROM(sbr, i); + j <= (int )ONIGENC_CODE_RANGE_TO(sbr, i); j++) { + BITSET_SET_BIT(cc->bs, j); + } + } + } + + if (IS_NULL(mbr)) { + is_null: + cc->mbuf = NULL; + } + else { + BBuf* bbuf; + + n = ONIGENC_CODE_RANGE_NUM(mbr); + if (n == 0) goto is_null; + + bbuf = (BBuf* )xmalloc(sizeof(BBuf)); + CHECK_NULL_RETURN_VAL(bbuf, NULL); + bbuf->alloc = n + 1; + bbuf->used = n + 1; + bbuf->p = (UChar* )((void* )mbr); + + cc->mbuf = bbuf; + } + + return node; +} + +static Node* +node_new_ctype(int type) +{ + Node* node = node_new(); + CHECK_NULL_RETURN(node); + node->type = N_CTYPE; + NCTYPE(node).type = type; + return node; +} + +static Node* +node_new_anychar(void) +{ + Node* node = node_new(); + CHECK_NULL_RETURN(node); + node->type = N_ANYCHAR; + return node; +} + +static Node* +node_new_list(Node* left, Node* right) +{ + Node* node = node_new(); + CHECK_NULL_RETURN(node); + node->type = N_LIST; + NCONS(node).left = left; + NCONS(node).right = right; + return node; +} + +extern Node* +onig_node_new_list(Node* left, Node* right) +{ + return node_new_list(left, right); +} + +static Node* +node_new_alt(Node* left, Node* right) +{ + Node* node = node_new(); + CHECK_NULL_RETURN(node); + node->type = N_ALT; + NCONS(node).left = left; + NCONS(node).right = right; + return node; +} + +extern Node* +onig_node_new_anchor(int type) +{ + Node* node = node_new(); + CHECK_NULL_RETURN(node); + node->type = N_ANCHOR; + NANCHOR(node).type = type; + NANCHOR(node).target = NULL; + NANCHOR(node).char_len = -1; + return node; +} + +static Node* +node_new_backref(int back_num, int* backrefs, int by_name, +#ifdef USE_BACKREF_AT_LEVEL + int exist_level, int nest_level, +#endif + ScanEnv* env) +{ + int i; + Node* node = node_new(); + + CHECK_NULL_RETURN(node); + node->type = N_BACKREF; + NBACKREF(node).state = 0; + NBACKREF(node).back_num = back_num; + NBACKREF(node).back_dynamic = (int* )NULL; + if (by_name != 0) + NBACKREF(node).state |= NST_NAME_REF; + +#ifdef USE_BACKREF_AT_LEVEL + if (exist_level != 0) { + NBACKREF(node).state |= NST_NEST_LEVEL; + NBACKREF(node).nest_level = nest_level; + } +#endif + + for (i = 0; i < back_num; i++) { + if (backrefs[i] <= env->num_mem && + IS_NULL(SCANENV_MEM_NODES(env)[backrefs[i]])) { + NBACKREF(node).state |= NST_RECURSION; /* /...(\1).../ */ + break; + } + } + + if (back_num <= NODE_BACKREFS_SIZE) { + for (i = 0; i < back_num; i++) + NBACKREF(node).back_static[i] = backrefs[i]; + } + else { + int* p = (int* )xmalloc(sizeof(int) * back_num); + if (IS_NULL(p)) { + onig_node_free(node); + return NULL; + } + NBACKREF(node).back_dynamic = p; + for (i = 0; i < back_num; i++) + p[i] = backrefs[i]; + } + return node; +} + +#ifdef USE_SUBEXP_CALL +static Node* +node_new_call(UChar* name, UChar* name_end) +{ + Node* node = node_new(); + CHECK_NULL_RETURN(node); + + node->type = N_CALL; + NCALL(node).state = 0; + NCALL(node).ref_num = CALLNODE_REFNUM_UNDEF; + NCALL(node).target = NULL_NODE; + NCALL(node).name = name; + NCALL(node).name_end = name_end; + return node; +} +#endif + +static Node* +node_new_quantifier(int lower, int upper, int by_number) +{ + Node* node = node_new(); + CHECK_NULL_RETURN(node); + node->type = N_QUANTIFIER; + NQUANTIFIER(node).state = 0; + NQUANTIFIER(node).target = NULL; + NQUANTIFIER(node).lower = lower; + NQUANTIFIER(node).upper = upper; + NQUANTIFIER(node).greedy = 1; + NQUANTIFIER(node).target_empty_info = NQ_TARGET_ISNOT_EMPTY; + NQUANTIFIER(node).head_exact = NULL_NODE; + NQUANTIFIER(node).next_head_exact = NULL_NODE; + NQUANTIFIER(node).is_refered = 0; + if (by_number != 0) + NQUANTIFIER(node).state |= NST_BY_NUMBER; + +#ifdef USE_COMBINATION_EXPLOSION_CHECK + NQUANTIFIER(node).comb_exp_check_num = 0; +#endif + + return node; +} + +static Node* +node_new_effect(int type) +{ + Node* node = node_new(); + CHECK_NULL_RETURN(node); + node->type = N_EFFECT; + NEFFECT(node).type = type; + NEFFECT(node).state = 0; + NEFFECT(node).regnum = 0; + NEFFECT(node).option = 0; + NEFFECT(node).target = NULL; + NEFFECT(node).call_addr = -1; + NEFFECT(node).opt_count = 0; + return node; +} + +extern Node* +onig_node_new_effect(int type) +{ + return node_new_effect(type); +} + +static Node* +node_new_effect_memory(OnigOptionType option, int is_named) +{ + Node* node = node_new_effect(EFFECT_MEMORY); + CHECK_NULL_RETURN(node); + if (is_named != 0) + SET_EFFECT_STATUS(node, NST_NAMED_GROUP); + +#ifdef USE_SUBEXP_CALL + NEFFECT(node).option = option; +#endif + return node; +} + +static Node* +node_new_option(OnigOptionType option) +{ + Node* node = node_new_effect(EFFECT_OPTION); + CHECK_NULL_RETURN(node); + NEFFECT(node).option = option; + return node; +} + +extern int +onig_node_str_cat(Node* node, const UChar* s, const UChar* end) +{ + int addlen = end - s; + + if (addlen > 0) { + int len = NSTRING(node).end - NSTRING(node).s; + + if (NSTRING(node).capa > 0 || (len + addlen > NODE_STR_BUF_SIZE - 1)) { + UChar* p; + int capa = len + addlen + NODE_STR_MARGIN; + + if (capa <= NSTRING(node).capa) { + k_strcpy(NSTRING(node).s + len, s, end); + } + else { + if (NSTRING(node).s == NSTRING(node).buf) + p = strcat_capa_from_static(NSTRING(node).s, NSTRING(node).end, + s, end, capa); + else + p = k_strcat_capa(NSTRING(node).s, NSTRING(node).end, s, end, capa); + + CHECK_NULL_RETURN_VAL(p, ONIGERR_MEMORY); + NSTRING(node).s = p; + NSTRING(node).capa = capa; + } + } + else { + k_strcpy(NSTRING(node).s + len, s, end); + } + NSTRING(node).end = NSTRING(node).s + len + addlen; + } + + return 0; +} + +static int +node_str_cat_char(Node* node, UChar c) +{ + UChar s[1]; + + s[0] = c; + return onig_node_str_cat(node, s, s + 1); +} + +extern void +onig_node_conv_to_str_node(Node* node, int flag) +{ + node->type = N_STRING; + + NSTRING(node).flag = flag; + NSTRING(node).capa = 0; + NSTRING(node).s = NSTRING(node).buf; + NSTRING(node).end = NSTRING(node).buf; +} + +extern void +onig_node_str_clear(Node* node) +{ + if (NSTRING(node).capa != 0 && + IS_NOT_NULL(NSTRING(node).s) && NSTRING(node).s != NSTRING(node).buf) { + xfree(NSTRING(node).s); + } + + NSTRING(node).capa = 0; + NSTRING(node).flag = 0; + NSTRING(node).s = NSTRING(node).buf; + NSTRING(node).end = NSTRING(node).buf; +} + +static Node* +node_new_str(const UChar* s, const UChar* end) +{ + Node* node = node_new(); + CHECK_NULL_RETURN(node); + + node->type = N_STRING; + NSTRING(node).capa = 0; + NSTRING(node).flag = 0; + NSTRING(node).s = NSTRING(node).buf; + NSTRING(node).end = NSTRING(node).buf; + if (onig_node_str_cat(node, s, end)) { + onig_node_free(node); + return NULL; + } + return node; +} + +extern Node* +onig_node_new_str(const UChar* s, const UChar* end) +{ + return node_new_str(s, end); +} + +#ifdef NUMBERED_CHAR_IS_NOT_CASE_AMBIG +static Node* +node_new_str_raw(UChar* s, UChar* end) +{ + Node* node = node_new_str(s, end); + NSTRING_SET_RAW(node); + return node; +} +#endif + +static Node* +node_new_empty(void) +{ + return node_new_str(NULL, NULL); +} + +static Node* +node_new_str_char(UChar c) +{ + UChar p[1]; + + p[0] = c; + return node_new_str(p, p + 1); +} + +static Node* +str_node_split_last_char(StrNode* sn, OnigEncoding enc) +{ + const UChar *p; + Node* n = NULL_NODE; + + if (sn->end > sn->s) { + p = onigenc_get_prev_char_head(enc, sn->s, sn->end); + if (p && p > sn->s) { /* can be splitted. */ + n = node_new_str(p, sn->end); + if ((sn->flag & NSTR_RAW) != 0) + NSTRING_SET_RAW(n); + sn->end = (UChar* )p; + } + } + return n; +} + +static int +str_node_can_be_split(StrNode* sn, OnigEncoding enc) +{ + if (sn->end > sn->s) { + return ((enc_len(enc, sn->s) < sn->end - sn->s) ? 1 : 0); + } + return 0; +} + +#ifdef USE_PAD_TO_SHORT_BYTE_CHAR +static int +node_str_head_pad(StrNode* sn, int num, UChar val) +{ + UChar buf[NODE_STR_BUF_SIZE]; + int i, len; + + len = sn->end - sn->s; + onig_strcpy(buf, sn->s, sn->end); + onig_strcpy(&(sn->s[num]), buf, buf + len); + sn->end += num; + + for (i = 0; i < num; i++) { + sn->s[i] = val; + } +} +#endif + +extern int +onig_scan_unsigned_number(UChar** src, const UChar* end, OnigEncoding enc) +{ + unsigned int num, val; + OnigCodePoint c; + UChar* p = *src; + PFETCH_READY; + + num = 0; + while (!PEND) { + PFETCH(c); + if (ONIGENC_IS_CODE_DIGIT(enc, c)) { + val = (unsigned int )DIGITVAL(c); + if ((INT_MAX_LIMIT - val) / 10UL < num) + return -1; /* overflow */ + + num = num * 10 + val; + } + else { + PUNFETCH; + break; + } + } + *src = p; + return num; +} + +static int +scan_unsigned_hexadecimal_number(UChar** src, UChar* end, int maxlen, + OnigEncoding enc) +{ + OnigCodePoint c; + unsigned int num, val; + UChar* p = *src; + PFETCH_READY; + + num = 0; + while (!PEND && maxlen-- != 0) { + PFETCH(c); + if (ONIGENC_IS_CODE_XDIGIT(enc, c)) { + val = (unsigned int )XDIGITVAL(enc,c); + if ((INT_MAX_LIMIT - val) / 16UL < num) + return -1; /* overflow */ + + num = (num << 4) + XDIGITVAL(enc,c); + } + else { + PUNFETCH; + break; + } + } + *src = p; + return num; +} + +static int +scan_unsigned_octal_number(UChar** src, UChar* end, int maxlen, + OnigEncoding enc) +{ + OnigCodePoint c; + unsigned int num, val; + UChar* p = *src; + PFETCH_READY; + + num = 0; + while (!PEND && maxlen-- != 0) { + PFETCH(c); + if (ONIGENC_IS_CODE_DIGIT(enc, c) && c < '8') { + val = ODIGITVAL(c); + if ((INT_MAX_LIMIT - val) / 8UL < num) + return -1; /* overflow */ + + num = (num << 3) + val; + } + else { + PUNFETCH; + break; + } + } + *src = p; + return num; +} + + +#define BBUF_WRITE_CODE_POINT(bbuf,pos,code) \ + BBUF_WRITE(bbuf, pos, &(code), SIZE_CODE_POINT) + +/* data format: + [n][from-1][to-1][from-2][to-2] ... [from-n][to-n] + (all data size is OnigCodePoint) + */ +static int +new_code_range(BBuf** pbuf) +{ +#define INIT_MULTI_BYTE_RANGE_SIZE (SIZE_CODE_POINT * 5) + int r; + OnigCodePoint n; + BBuf* bbuf; + + bbuf = *pbuf = (BBuf* )xmalloc(sizeof(BBuf)); + CHECK_NULL_RETURN_VAL(*pbuf, ONIGERR_MEMORY); + r = BBUF_INIT(*pbuf, INIT_MULTI_BYTE_RANGE_SIZE); + if (r) return r; + + n = 0; + BBUF_WRITE_CODE_POINT(bbuf, 0, n); + return 0; +} + +static int +add_code_range_to_buf(BBuf** pbuf, OnigCodePoint from, OnigCodePoint to) +{ + int r, inc_n, pos; + int low, high, bound, x; + OnigCodePoint n, *data; + BBuf* bbuf; + + if (from > to) { + n = from; from = to; to = n; + } + + if (IS_NULL(*pbuf)) { + r = new_code_range(pbuf); + if (r) return r; + bbuf = *pbuf; + n = 0; + } + else { + bbuf = *pbuf; + GET_CODE_POINT(n, bbuf->p); + } + data = (OnigCodePoint* )(bbuf->p); + data++; + + for (low = 0, bound = n; low < bound; ) { + x = (low + bound) >> 1; + if (from > data[x*2 + 1]) + low = x + 1; + else + bound = x; + } + + for (high = low, bound = n; high < bound; ) { + x = (high + bound) >> 1; + if (to >= data[x*2] - 1) + high = x + 1; + else + bound = x; + } + + inc_n = low + 1 - high; + if (n + inc_n > ONIG_MAX_MULTI_BYTE_RANGES_NUM) + return ONIGERR_TOO_MANY_MULTI_BYTE_RANGES; + + if (inc_n != 1) { + if (from > data[low*2]) + from = data[low*2]; + if (to < data[(high - 1)*2 + 1]) + to = data[(high - 1)*2 + 1]; + } + + if (inc_n != 0 && (OnigCodePoint )high < n) { + int from_pos = SIZE_CODE_POINT * (1 + high * 2); + int to_pos = SIZE_CODE_POINT * (1 + (low + 1) * 2); + int size = (n - high) * 2 * SIZE_CODE_POINT; + + if (inc_n > 0) { + BBUF_MOVE_RIGHT(bbuf, from_pos, to_pos, size); + } + else { + BBUF_MOVE_LEFT_REDUCE(bbuf, from_pos, to_pos); + } + } + + pos = SIZE_CODE_POINT * (1 + low * 2); + BBUF_ENSURE_SIZE(bbuf, pos + SIZE_CODE_POINT * 2); + BBUF_WRITE_CODE_POINT(bbuf, pos, from); + BBUF_WRITE_CODE_POINT(bbuf, pos + SIZE_CODE_POINT, to); + n += inc_n; + BBUF_WRITE_CODE_POINT(bbuf, 0, n); + + return 0; +} + +static int +add_code_range(BBuf** pbuf, ScanEnv* env, OnigCodePoint from, OnigCodePoint to) +{ + if (from > to) { + if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC)) + return 0; + else + return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS; + } + + return add_code_range_to_buf(pbuf, from, to); +} + +static int +not_code_range_buf(OnigEncoding enc, BBuf* bbuf, BBuf** pbuf) +{ + int r, i, n; + OnigCodePoint pre, from, *data, to = 0; + + *pbuf = (BBuf* )NULL; + if (IS_NULL(bbuf)) { + set_all: + return SET_ALL_MULTI_BYTE_RANGE(enc, pbuf); + } + + data = (OnigCodePoint* )(bbuf->p); + GET_CODE_POINT(n, data); + data++; + if (n <= 0) goto set_all; + + r = 0; + pre = MBCODE_START_POS(enc); + for (i = 0; i < n; i++) { + from = data[i*2]; + to = data[i*2+1]; + if (pre <= from - 1) { + r = add_code_range_to_buf(pbuf, pre, from - 1); + if (r != 0) return r; + } + if (to == ~((OnigCodePoint )0)) break; + pre = to + 1; + } + if (to < ~((OnigCodePoint )0)) { + r = add_code_range_to_buf(pbuf, to + 1, ~((OnigCodePoint )0)); + } + return r; +} + +#define SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2) do {\ + BBuf *tbuf; \ + int tnot; \ + tnot = not1; not1 = not2; not2 = tnot; \ + tbuf = bbuf1; bbuf1 = bbuf2; bbuf2 = tbuf; \ +} while (0) + +static int +or_code_range_buf(OnigEncoding enc, BBuf* bbuf1, int not1, + BBuf* bbuf2, int not2, BBuf** pbuf) +{ + int r; + OnigCodePoint i, n1, *data1; + OnigCodePoint from, to; + + *pbuf = (BBuf* )NULL; + if (IS_NULL(bbuf1) && IS_NULL(bbuf2)) { + if (not1 != 0 || not2 != 0) + return SET_ALL_MULTI_BYTE_RANGE(enc, pbuf); + return 0; + } + + r = 0; + if (IS_NULL(bbuf2)) + SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2); + + if (IS_NULL(bbuf1)) { + if (not1 != 0) { + return SET_ALL_MULTI_BYTE_RANGE(enc, pbuf); + } + else { + if (not2 == 0) { + return bbuf_clone(pbuf, bbuf2); + } + else { + return not_code_range_buf(enc, bbuf2, pbuf); + } + } + } + + if (not1 != 0) + SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2); + + data1 = (OnigCodePoint* )(bbuf1->p); + GET_CODE_POINT(n1, data1); + data1++; + + if (not2 == 0 && not1 == 0) { /* 1 OR 2 */ + r = bbuf_clone(pbuf, bbuf2); + } + else if (not1 == 0) { /* 1 OR (not 2) */ + r = not_code_range_buf(enc, bbuf2, pbuf); + } + if (r != 0) return r; + + for (i = 0; i < n1; i++) { + from = data1[i*2]; + to = data1[i*2+1]; + r = add_code_range_to_buf(pbuf, from, to); + if (r != 0) return r; + } + return 0; +} + +static int +and_code_range1(BBuf** pbuf, OnigCodePoint from1, OnigCodePoint to1, + OnigCodePoint* data, int n) +{ + int i, r; + OnigCodePoint from2, to2; + + for (i = 0; i < n; i++) { + from2 = data[i*2]; + to2 = data[i*2+1]; + if (from2 < from1) { + if (to2 < from1) continue; + else { + from1 = to2 + 1; + } + } + else if (from2 <= to1) { + if (to2 < to1) { + if (from1 <= from2 - 1) { + r = add_code_range_to_buf(pbuf, from1, from2-1); + if (r != 0) return r; + } + from1 = to2 + 1; + } + else { + to1 = from2 - 1; + } + } + else { + from1 = from2; + } + if (from1 > to1) break; + } + if (from1 <= to1) { + r = add_code_range_to_buf(pbuf, from1, to1); + if (r != 0) return r; + } + return 0; +} + +static int +and_code_range_buf(BBuf* bbuf1, int not1, BBuf* bbuf2, int not2, BBuf** pbuf) +{ + int r; + OnigCodePoint i, j, n1, n2, *data1, *data2; + OnigCodePoint from, to, from1, to1, from2, to2; + + *pbuf = (BBuf* )NULL; + if (IS_NULL(bbuf1)) { + if (not1 != 0 && IS_NOT_NULL(bbuf2)) /* not1 != 0 -> not2 == 0 */ + return bbuf_clone(pbuf, bbuf2); + return 0; + } + else if (IS_NULL(bbuf2)) { + if (not2 != 0) + return bbuf_clone(pbuf, bbuf1); + return 0; + } + + if (not1 != 0) + SWAP_BBUF_NOT(bbuf1, not1, bbuf2, not2); + + data1 = (OnigCodePoint* )(bbuf1->p); + data2 = (OnigCodePoint* )(bbuf2->p); + GET_CODE_POINT(n1, data1); + GET_CODE_POINT(n2, data2); + data1++; + data2++; + + if (not2 == 0 && not1 == 0) { /* 1 AND 2 */ + for (i = 0; i < n1; i++) { + from1 = data1[i*2]; + to1 = data1[i*2+1]; + for (j = 0; j < n2; j++) { + from2 = data2[j*2]; + to2 = data2[j*2+1]; + if (from2 > to1) break; + if (to2 < from1) continue; + from = MAX(from1, from2); + to = MIN(to1, to2); + r = add_code_range_to_buf(pbuf, from, to); + if (r != 0) return r; + } + } + } + else if (not1 == 0) { /* 1 AND (not 2) */ + for (i = 0; i < n1; i++) { + from1 = data1[i*2]; + to1 = data1[i*2+1]; + r = and_code_range1(pbuf, from1, to1, data2, n2); + if (r != 0) return r; + } + } + + return 0; +} + +static int +and_cclass(CClassNode* dest, CClassNode* cc, OnigEncoding enc) +{ + int r, not1, not2; + BBuf *buf1, *buf2, *pbuf; + BitSetRef bsr1, bsr2; + BitSet bs1, bs2; + + not1 = IS_CCLASS_NOT(dest); + bsr1 = dest->bs; + buf1 = dest->mbuf; + not2 = IS_CCLASS_NOT(cc); + bsr2 = cc->bs; + buf2 = cc->mbuf; + + if (not1 != 0) { + bitset_invert_to(bsr1, bs1); + bsr1 = bs1; + } + if (not2 != 0) { + bitset_invert_to(bsr2, bs2); + bsr2 = bs2; + } + bitset_and(bsr1, bsr2); + if (bsr1 != dest->bs) { + bitset_copy(dest->bs, bsr1); + bsr1 = dest->bs; + } + if (not1 != 0) { + bitset_invert(dest->bs); + } + + if (! ONIGENC_IS_SINGLEBYTE(enc)) { + if (not1 != 0 && not2 != 0) { + r = or_code_range_buf(enc, buf1, 0, buf2, 0, &pbuf); + } + else { + r = and_code_range_buf(buf1, not1, buf2, not2, &pbuf); + if (r == 0 && not1 != 0) { + BBuf *tbuf; + r = not_code_range_buf(enc, pbuf, &tbuf); + if (r != 0) { + bbuf_free(pbuf); + return r; + } + bbuf_free(pbuf); + pbuf = tbuf; + } + } + if (r != 0) return r; + + dest->mbuf = pbuf; + bbuf_free(buf1); + return r; + } + return 0; +} + +static int +or_cclass(CClassNode* dest, CClassNode* cc, OnigEncoding enc) +{ + int r, not1, not2; + BBuf *buf1, *buf2, *pbuf; + BitSetRef bsr1, bsr2; + BitSet bs1, bs2; + + not1 = IS_CCLASS_NOT(dest); + bsr1 = dest->bs; + buf1 = dest->mbuf; + not2 = IS_CCLASS_NOT(cc); + bsr2 = cc->bs; + buf2 = cc->mbuf; + + if (not1 != 0) { + bitset_invert_to(bsr1, bs1); + bsr1 = bs1; + } + if (not2 != 0) { + bitset_invert_to(bsr2, bs2); + bsr2 = bs2; + } + bitset_or(bsr1, bsr2); + if (bsr1 != dest->bs) { + bitset_copy(dest->bs, bsr1); + bsr1 = dest->bs; + } + if (not1 != 0) { + bitset_invert(dest->bs); + } + + if (! ONIGENC_IS_SINGLEBYTE(enc)) { + if (not1 != 0 && not2 != 0) { + r = and_code_range_buf(buf1, 0, buf2, 0, &pbuf); + } + else { + r = or_code_range_buf(enc, buf1, not1, buf2, not2, &pbuf); + if (r == 0 && not1 != 0) { + BBuf *tbuf; + r = not_code_range_buf(enc, pbuf, &tbuf); + if (r != 0) { + bbuf_free(pbuf); + return r; + } + bbuf_free(pbuf); + pbuf = tbuf; + } + } + if (r != 0) return r; + + dest->mbuf = pbuf; + bbuf_free(buf1); + return r; + } + else + return 0; +} + +static int +conv_backslash_value(int c, ScanEnv* env) +{ + if (IS_SYNTAX_OP(env->syntax, ONIG_SYN_OP_ESC_CONTROL_CHARS)) { + switch (c) { + case 'n': return '\n'; + case 't': return '\t'; + case 'r': return '\r'; + case 'f': return '\f'; + case 'a': return '\007'; + case 'b': return '\010'; + case 'e': return '\033'; + case 'v': + if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ESC_V_VTAB)) + return '\v'; + break; + + default: + break; + } + } + return c; +} + +static int +is_invalid_quantifier_target(Node* node) +{ + switch (NTYPE(node)) { + case N_ANCHOR: + return 1; + break; + + case N_EFFECT: + if (NEFFECT(node).type == EFFECT_OPTION) + return is_invalid_quantifier_target(NEFFECT(node).target); + break; + + case N_LIST: /* ex. (?:\G\A)* */ + do { + if (! is_invalid_quantifier_target(NCONS(node).left)) return 0; + } while (IS_NOT_NULL(node = NCONS(node).right)); + return 0; + break; + + case N_ALT: /* ex. (?:abc|\A)* */ + do { + if (is_invalid_quantifier_target(NCONS(node).left)) return 1; + } while (IS_NOT_NULL(node = NCONS(node).right)); + break; + + default: + break; + } + return 0; +} + +/* ?:0, *:1, +:2, ??:3, *?:4, +?:5 */ +static int +popular_quantifier_num(QuantifierNode* qf) +{ + if (qf->greedy) { + if (qf->lower == 0) { + if (qf->upper == 1) return 0; + else if (IS_REPEAT_INFINITE(qf->upper)) return 1; + } + else if (qf->lower == 1) { + if (IS_REPEAT_INFINITE(qf->upper)) return 2; + } + } + else { + if (qf->lower == 0) { + if (qf->upper == 1) return 3; + else if (IS_REPEAT_INFINITE(qf->upper)) return 4; + } + else if (qf->lower == 1) { + if (IS_REPEAT_INFINITE(qf->upper)) return 5; + } + } + return -1; +} + + +enum ReduceType { + RQ_ASIS = 0, /* as is */ + RQ_DEL = 1, /* delete parent */ + RQ_A, /* to '*' */ + RQ_AQ, /* to '*?' */ + RQ_QQ, /* to '??' */ + RQ_P_QQ, /* to '+)??' */ + RQ_PQ_Q /* to '+?)?' */ +}; + +static enum ReduceType ReduceTypeTable[6][6] = { + {RQ_DEL, RQ_A, RQ_A, RQ_QQ, RQ_AQ, RQ_ASIS}, /* '?' */ + {RQ_DEL, RQ_DEL, RQ_DEL, RQ_P_QQ, RQ_P_QQ, RQ_DEL}, /* '*' */ + {RQ_A, RQ_A, RQ_DEL, RQ_ASIS, RQ_P_QQ, RQ_DEL}, /* '+' */ + {RQ_DEL, RQ_AQ, RQ_AQ, RQ_DEL, RQ_AQ, RQ_AQ}, /* '??' */ + {RQ_DEL, RQ_DEL, RQ_DEL, RQ_DEL, RQ_DEL, RQ_DEL}, /* '*?' */ + {RQ_ASIS, RQ_PQ_Q, RQ_DEL, RQ_AQ, RQ_AQ, RQ_DEL} /* '+?' */ +}; + +extern void +onig_reduce_nested_quantifier(Node* pnode, Node* cnode) +{ + int pnum, cnum; + QuantifierNode *p, *c; + + p = &(NQUANTIFIER(pnode)); + c = &(NQUANTIFIER(cnode)); + pnum = popular_quantifier_num(p); + cnum = popular_quantifier_num(c); + + switch(ReduceTypeTable[cnum][pnum]) { + case RQ_DEL: + *p = *c; + break; + case RQ_A: + p->target = c->target; + p->lower = 0; p->upper = REPEAT_INFINITE; p->greedy = 1; + break; + case RQ_AQ: + p->target = c->target; + p->lower = 0; p->upper = REPEAT_INFINITE; p->greedy = 0; + break; + case RQ_QQ: + p->target = c->target; + p->lower = 0; p->upper = 1; p->greedy = 0; + break; + case RQ_P_QQ: + p->target = cnode; + p->lower = 0; p->upper = 1; p->greedy = 0; + c->lower = 1; c->upper = REPEAT_INFINITE; c->greedy = 1; + return ; + break; + case RQ_PQ_Q: + p->target = cnode; + p->lower = 0; p->upper = 1; p->greedy = 1; + c->lower = 1; c->upper = REPEAT_INFINITE; c->greedy = 0; + return ; + break; + case RQ_ASIS: + p->target = cnode; + return ; + break; + } + + c->target = NULL_NODE; + onig_node_free(cnode); +} + + +enum TokenSyms { + TK_EOT = 0, /* end of token */ + TK_RAW_BYTE = 1, + TK_CHAR, + TK_STRING, + TK_CODE_POINT, + TK_ANYCHAR, + TK_CHAR_TYPE, + TK_BACKREF, + TK_CALL, + TK_ANCHOR, + TK_OP_REPEAT, + TK_INTERVAL, + TK_ANYCHAR_ANYTIME, /* SQL '%' == .* */ + TK_ALT, + TK_SUBEXP_OPEN, + TK_SUBEXP_CLOSE, + TK_CC_OPEN, + TK_QUOTE_OPEN, + TK_CHAR_PROPERTY, /* \p{...}, \P{...} */ + /* in cc */ + TK_CC_CLOSE, + TK_CC_RANGE, + TK_POSIX_BRACKET_OPEN, + TK_CC_AND, /* && */ + TK_CC_CC_OPEN /* [ */ +}; + +typedef struct { + enum TokenSyms type; + int escaped; + int base; /* is number: 8, 16 (used in [....]) */ + UChar* backp; + union { + UChar* s; + int c; + OnigCodePoint code; + int anchor; + int subtype; + struct { + int lower; + int upper; + int greedy; + int possessive; + } repeat; + struct { + int num; + int ref1; + int* refs; + int by_name; +#ifdef USE_BACKREF_AT_LEVEL + int exist_level; + int level; /* \k<name+n> */ +#endif + } backref; + struct { + UChar* name; + UChar* name_end; + } call; + struct { + int not; + } prop; + } u; +} OnigToken; + + +static int +fetch_range_quantifier(UChar** src, UChar* end, OnigToken* tok, ScanEnv* env) +{ + int low, up, syn_allow, non_low = 0; + int r = 0; + OnigCodePoint c; + OnigEncoding enc = env->enc; + UChar* p = *src; + PFETCH_READY; + + syn_allow = IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_INVALID_INTERVAL); + + if (PEND) { + if (syn_allow) + return 1; /* "....{" : OK! */ + else + return ONIGERR_END_PATTERN_AT_LEFT_BRACE; /* "....{" syntax error */ + } + + if (! syn_allow) { + c = PPEEK; + if (c == ')' || c == '(' || c == '|') { + return ONIGERR_END_PATTERN_AT_LEFT_BRACE; + } + } + + low = onig_scan_unsigned_number(&p, end, env->enc); + if (low < 0) return ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE; + if (low > ONIG_MAX_REPEAT_NUM) + return ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE; + + if (p == *src) { /* can't read low */ + if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV)) { + /* allow {,n} as {0,n} */ + low = 0; + non_low = 1; + } + else + goto invalid; + } + + if (PEND) goto invalid; + PFETCH(c); + if (c == ',') { + UChar* prev = p; + up = onig_scan_unsigned_number(&p, end, env->enc); + if (up < 0) return ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE; + if (up > ONIG_MAX_REPEAT_NUM) + return ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE; + + if (p == prev) { + if (non_low != 0) + goto invalid; + up = REPEAT_INFINITE; /* {n,} : {n,infinite} */ + } + } + else { + if (non_low != 0) + goto invalid; + + PUNFETCH; + up = low; /* {n} : exact n times */ + r = 2; /* fixed */ + } + + if (PEND) goto invalid; + PFETCH(c); + if (IS_SYNTAX_OP(env->syntax, ONIG_SYN_OP_ESC_BRACE_INTERVAL)) { + if (c != MC_ESC(enc)) goto invalid; + PFETCH(c); + } + if (c != '}') goto invalid; + + if (!IS_REPEAT_INFINITE(up) && low > up) { + return ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE; + } + + tok->type = TK_INTERVAL; + tok->u.repeat.lower = low; + tok->u.repeat.upper = up; + *src = p; + return r; /* 0: normal {n,m}, 2: fixed {n} */ + + invalid: + if (syn_allow) + return 1; /* OK */ + else + return ONIGERR_INVALID_REPEAT_RANGE_PATTERN; +} + +/* \M-, \C-, \c, or \... */ +static int +fetch_escaped_value(UChar** src, UChar* end, ScanEnv* env) +{ + int v; + OnigCodePoint c; + OnigEncoding enc = env->enc; + UChar* p = *src; + PFETCH_READY; + + if (PEND) return ONIGERR_END_PATTERN_AT_ESCAPE; + + PFETCH(c); + switch (c) { + case 'M': + if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META)) { + if (PEND) return ONIGERR_END_PATTERN_AT_META; + PFETCH(c); + if (c != '-') return ONIGERR_META_CODE_SYNTAX; + if (PEND) return ONIGERR_END_PATTERN_AT_META; + PFETCH(c); + if (c == MC_ESC(enc)) { + v = fetch_escaped_value(&p, end, env); + if (v < 0) return v; + c = (OnigCodePoint )v; + } + c = ((c & 0xff) | 0x80); + } + else + goto backslash; + break; + + case 'C': + if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL)) { + if (PEND) return ONIGERR_END_PATTERN_AT_CONTROL; + PFETCH(c); + if (c != '-') return ONIGERR_CONTROL_CODE_SYNTAX; + goto control; + } + else + goto backslash; + + case 'c': + if (IS_SYNTAX_OP(env->syntax, ONIG_SYN_OP_ESC_C_CONTROL)) { + control: + if (PEND) return ONIGERR_END_PATTERN_AT_CONTROL; + PFETCH(c); + if (c == '?') { + c = 0177; + } + else { + if (c == MC_ESC(enc)) { + v = fetch_escaped_value(&p, end, env); + if (v < 0) return v; + c = (OnigCodePoint )v; + } + c &= 0x9f; + } + break; + } + /* fall through */ + + default: + { + backslash: + c = conv_backslash_value(c, env); + } + break; + } + + *src = p; + return c; +} + +static int fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env); + +#ifdef USE_NAMED_GROUP +#ifdef USE_BACKREF_AT_LEVEL +/* + \k<name+n>, \k<name-n> +*/ +static int +fetch_name_with_level(UChar** src, UChar* end, UChar** rname_end + , ScanEnv* env, int* level) +{ + int r, exist_level = 0; + OnigCodePoint c = 0; + OnigCodePoint first_code; + OnigEncoding enc = env->enc; + UChar *name_end; + UChar *p = *src; + PFETCH_READY; + + name_end = end; + r = 0; + if (PEND) { + return ONIGERR_EMPTY_GROUP_NAME; + } + else { + PFETCH(c); + first_code = c; + if (c == '>') + return ONIGERR_EMPTY_GROUP_NAME; + + if (!ONIGENC_IS_CODE_WORD(enc, c)) { + r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME; + } + } + + while (!PEND) { + name_end = p; + PFETCH(c); + if (c == '>' || c == ')' || c == '+' || c == '-') break; + + if (!ONIGENC_IS_CODE_WORD(enc, c)) { + r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME; + } + } + + if (c != '>') { + if (c == '+' || c == '-') { + int num; + int flag = (c == '-' ? -1 : 1); + + PFETCH(c); + if (! ONIGENC_IS_CODE_DIGIT(enc, c)) goto err; + PUNFETCH; + num = onig_scan_unsigned_number(&p, end, enc); + if (num < 0) return ONIGERR_TOO_BIG_NUMBER; + *level = (num * flag); + exist_level = 1; + + PFETCH(c); + if (c == '>') + goto first_check; + } + + err: + r = ONIGERR_INVALID_GROUP_NAME; + name_end = end; + } + else { + first_check: + if (ONIGENC_IS_CODE_ASCII(first_code) && + ONIGENC_IS_CODE_UPPER(enc, first_code)) + r = ONIGERR_INVALID_GROUP_NAME; + } + + if (r == 0) { + *rname_end = name_end; + *src = p; + return (exist_level ? 1 : 0); + } + else { + onig_scan_env_set_error_string(env, r, *src, name_end); + return r; + } +} +#endif /* USE_BACKREF_AT_LEVEL */ + +/* + def: 0 -> define name (don't allow number name) + 1 -> reference name (allow number name) +*/ +static int +fetch_name(UChar** src, UChar* end, UChar** rname_end, ScanEnv* env, int ref) +{ + int r, is_num; + OnigCodePoint c = 0; + OnigCodePoint first_code; + OnigEncoding enc = env->enc; + UChar *name_end; + UChar *p = *src; + PFETCH_READY; + + name_end = end; + r = 0; + is_num = 0; + if (PEND) { + return ONIGERR_EMPTY_GROUP_NAME; + } + else { + PFETCH(c); + first_code = c; + if (c == '>') + return ONIGERR_EMPTY_GROUP_NAME; + + if (ONIGENC_IS_CODE_DIGIT(enc, c)) { + if (ref == 1) + is_num = 1; + else { + r = ONIGERR_INVALID_GROUP_NAME; + } + } + else if (!ONIGENC_IS_CODE_WORD(enc, c)) { + r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME; + } + } + + while (!PEND) { + name_end = p; + PFETCH(c); + if (c == '>' || c == ')') break; + + if (is_num == 1) { + if (! ONIGENC_IS_CODE_DIGIT(enc, c)) { + if (!ONIGENC_IS_CODE_WORD(enc, c)) + r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME; + else + r = ONIGERR_INVALID_GROUP_NAME; + } + } + else { + if (!ONIGENC_IS_CODE_WORD(enc, c)) { + r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME; + } + } + } + + if (c != '>') { + r = ONIGERR_INVALID_GROUP_NAME; + name_end = end; + } + else { + if (ONIGENC_IS_CODE_ASCII(first_code) && + ONIGENC_IS_CODE_UPPER(enc, first_code)) + r = ONIGERR_INVALID_GROUP_NAME; + } + + if (r == 0) { + *rname_end = name_end; + *src = p; + return 0; + } + else { + onig_scan_env_set_error_string(env, r, *src, name_end); + return r; + } +} +#else +static int +fetch_name(UChar** src, UChar* end, UChar** rname_end, ScanEnv* env, int ref) +{ + int r, len; + OnigCodePoint c = 0; + UChar *name_end; + OnigEncoding enc = env->enc; + UChar *p = *src; + PFETCH_READY; + + r = 0; + while (!PEND) { + name_end = p; + if (enc_len(enc, p) > 1) + r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME; + + PFETCH(c); + if (c == '>' || c == ')') break; + if (! ONIGENC_IS_CODE_DIGIT(enc, c)) + r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME; + } + if (c != '>') { + r = ONIGERR_INVALID_GROUP_NAME; + name_end = end; + } + + if (r == 0) { + *rname_end = name_end; + *src = p; + return 0; + } + else { + err: + onig_scan_env_set_error_string(env, r, *src, name_end); + return r; + } +} +#endif + +static void +CC_ESC_WARN(ScanEnv* env, UChar *c) +{ + if (onig_warn == onig_null_warn) return ; + + if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_WARN_CC_OP_NOT_ESCAPED) && + IS_SYNTAX_BV(env->syntax, ONIG_SYN_BACKSLASH_ESCAPE_IN_CC)) { + UChar buf[WARN_BUFSIZE]; + onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc, + env->pattern, env->pattern_end, + (UChar* )"character class has '%s' without escape", c); + (*onig_warn)((char* )buf); + } +} + +static void +CCEND_ESC_WARN(ScanEnv* env, UChar* c) +{ + if (onig_warn == onig_null_warn) return ; + + if (IS_SYNTAX_BV((env)->syntax, ONIG_SYN_WARN_CC_OP_NOT_ESCAPED)) { + UChar buf[WARN_BUFSIZE]; + onig_snprintf_with_pattern(buf, WARN_BUFSIZE, (env)->enc, + (env)->pattern, (env)->pattern_end, + (UChar* )"regular expression has '%s' without escape", c); + (*onig_warn)((char* )buf); + } +} + +static UChar* +find_str_position(OnigCodePoint s[], int n, UChar* from, UChar* to, + UChar **next, OnigEncoding enc) +{ + int i; + OnigCodePoint x; + UChar *q; + UChar *p = from; + + while (p < to) { + x = ONIGENC_MBC_TO_CODE(enc, p, to); + q = p + enc_len(enc, p); + if (x == s[0]) { + for (i = 1; i < n && q < to; i++) { + x = ONIGENC_MBC_TO_CODE(enc, q, to); + if (x != s[i]) break; + q += enc_len(enc, q); + } + if (i >= n) { + if (IS_NOT_NULL(next)) + *next = q; + return p; + } + } + p = q; + } + return NULL_UCHARP; +} + +static int +str_exist_check_with_esc(OnigCodePoint s[], int n, UChar* from, UChar* to, + OnigCodePoint bad, OnigEncoding enc) +{ + int i, in_esc; + OnigCodePoint x; + UChar *q; + UChar *p = from; + + in_esc = 0; + while (p < to) { + if (in_esc) { + in_esc = 0; + p += enc_len(enc, p); + } + else { + x = ONIGENC_MBC_TO_CODE(enc, p, to); + q = p + enc_len(enc, p); + if (x == s[0]) { + for (i = 1; i < n && q < to; i++) { + x = ONIGENC_MBC_TO_CODE(enc, q, to); + if (x != s[i]) break; + q += enc_len(enc, q); + } + if (i >= n) return 1; + p += enc_len(enc, p); + } + else { + x = ONIGENC_MBC_TO_CODE(enc, p, to); + if (x == bad) return 0; + else if (x == MC_ESC(enc)) in_esc = 1; + p = q; + } + } + } + return 0; +} + +static int +fetch_token_in_cc(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env) +{ + int num; + OnigCodePoint c, c2; + OnigSyntaxType* syn = env->syntax; + OnigEncoding enc = env->enc; + UChar* prev; + UChar* p = *src; + PFETCH_READY; + + if (PEND) { + tok->type = TK_EOT; + return tok->type; + } + + PFETCH(c); + tok->type = TK_CHAR; + tok->base = 0; + tok->u.c = c; + tok->escaped = 0; + + if (c == ']') { + tok->type = TK_CC_CLOSE; + } + else if (c == '-') { + tok->type = TK_CC_RANGE; + } + else if (c == MC_ESC(enc)) { + if (! IS_SYNTAX_BV(syn, ONIG_SYN_BACKSLASH_ESCAPE_IN_CC)) + goto end; + + if (PEND) return ONIGERR_END_PATTERN_AT_ESCAPE; + + PFETCH(c); + tok->escaped = 1; + tok->u.c = c; + switch (c) { + case 'w': + tok->type = TK_CHAR_TYPE; + tok->u.subtype = CTYPE_WORD; + break; + case 'W': + tok->type = TK_CHAR_TYPE; + tok->u.subtype = CTYPE_NOT_WORD; + break; + case 'd': + tok->type = TK_CHAR_TYPE; + tok->u.subtype = CTYPE_DIGIT; + break; + case 'D': + tok->type = TK_CHAR_TYPE; + tok->u.subtype = CTYPE_NOT_DIGIT; + break; + case 's': + tok->type = TK_CHAR_TYPE; + tok->u.subtype = CTYPE_WHITE_SPACE; + break; + case 'S': + tok->type = TK_CHAR_TYPE; + tok->u.subtype = CTYPE_NOT_WHITE_SPACE; + break; + case 'h': + if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_H_XDIGIT)) break; + tok->type = TK_CHAR_TYPE; + tok->u.subtype = CTYPE_XDIGIT; + break; + case 'H': + if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_H_XDIGIT)) break; + tok->type = TK_CHAR_TYPE; + tok->u.subtype = CTYPE_NOT_XDIGIT; + break; + + case 'p': + case 'P': + c2 = PPEEK; + if (c2 == '{' && + IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY)) { + PINC; + tok->type = TK_CHAR_PROPERTY; + tok->u.prop.not = (c == 'P' ? 1 : 0); + + if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT)) { + PFETCH(c2); + if (c2 == '^') { + tok->u.prop.not = (tok->u.prop.not == 0 ? 1 : 0); + } + else + PUNFETCH; + } + } + break; + + case 'x': + if (PEND) break; + + prev = p; + if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_BRACE_HEX8)) { + PINC; + num = scan_unsigned_hexadecimal_number(&p, end, 8, enc); + if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE; + if (!PEND) { + c2 = PPEEK; + if (ONIGENC_IS_CODE_XDIGIT(enc, c2)) + return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE; + } + + if (p > prev + enc_len(enc, prev) && !PEND && (PPEEK_IS('}'))) { + PINC; + tok->type = TK_CODE_POINT; + tok->base = 16; + tok->u.code = (OnigCodePoint )num; + } + else { + /* can't read nothing or invalid format */ + p = prev; + } + } + else if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_HEX2)) { + num = scan_unsigned_hexadecimal_number(&p, end, 2, enc); + if (num < 0) return ONIGERR_TOO_BIG_NUMBER; + if (p == prev) { /* can't read nothing. */ + num = 0; /* but, it's not error */ + } + tok->type = TK_RAW_BYTE; + tok->base = 16; + tok->u.c = num; + } + break; + + case 'u': + if (PEND) break; + + prev = p; + if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_U_HEX4)) { + num = scan_unsigned_hexadecimal_number(&p, end, 4, enc); + if (num < 0) return ONIGERR_TOO_BIG_NUMBER; + if (p == prev) { /* can't read nothing. */ + num = 0; /* but, it's not error */ + } + tok->type = TK_CODE_POINT; + tok->base = 16; + tok->u.code = (OnigCodePoint )num; + } + break; + + case '0': + case '1': case '2': case '3': case '4': case '5': case '6': case '7': + if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_OCTAL3)) { + PUNFETCH; + prev = p; + num = scan_unsigned_octal_number(&p, end, 3, enc); + if (num < 0) return ONIGERR_TOO_BIG_NUMBER; + if (p == prev) { /* can't read nothing. */ + num = 0; /* but, it's not error */ + } + tok->type = TK_RAW_BYTE; + tok->base = 8; + tok->u.c = num; + } + break; + + default: + PUNFETCH; + num = fetch_escaped_value(&p, end, env); + if (num < 0) return num; + if (tok->u.c != num) { + tok->u.code = (OnigCodePoint )num; + tok->type = TK_CODE_POINT; + } + break; + } + } + else if (c == '[') { + if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_POSIX_BRACKET) && (PPEEK_IS(':'))) { + OnigCodePoint send[] = { (OnigCodePoint )':', (OnigCodePoint )']' }; + tok->backp = p; /* point at '[' is readed */ + PINC; + if (str_exist_check_with_esc(send, 2, p, end, + (OnigCodePoint )']', enc)) { + tok->type = TK_POSIX_BRACKET_OPEN; + } + else { + PUNFETCH; + goto cc_in_cc; + } + } + else { + cc_in_cc: + if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_CCLASS_SET_OP)) { + tok->type = TK_CC_CC_OPEN; + } + else { + CC_ESC_WARN(env, (UChar* )"["); + } + } + } + else if (c == '&') { + if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_CCLASS_SET_OP) && + !PEND && (PPEEK_IS('&'))) { + PINC; + tok->type = TK_CC_AND; + } + } + + end: + *src = p; + return tok->type; +} + +static int +fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env) +{ + int r, num; + OnigCodePoint c; + OnigEncoding enc = env->enc; + OnigSyntaxType* syn = env->syntax; + UChar* prev; + UChar* p = *src; + PFETCH_READY; + + start: + if (PEND) { + tok->type = TK_EOT; + return tok->type; + } + + tok->type = TK_STRING; + tok->base = 0; + tok->backp = p; + + PFETCH(c); + if (IS_MC_ESC_CODE(c, enc, syn)) { + if (PEND) return ONIGERR_END_PATTERN_AT_ESCAPE; + + tok->backp = p; + PFETCH(c); + + tok->u.c = c; + tok->escaped = 1; + switch (c) { + case '*': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF)) break; + tok->type = TK_OP_REPEAT; + tok->u.repeat.lower = 0; + tok->u.repeat.upper = REPEAT_INFINITE; + goto greedy_check; + break; + + case '+': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_PLUS_ONE_INF)) break; + tok->type = TK_OP_REPEAT; + tok->u.repeat.lower = 1; + tok->u.repeat.upper = REPEAT_INFINITE; + goto greedy_check; + break; + + case '?': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_QMARK_ZERO_ONE)) break; + tok->type = TK_OP_REPEAT; + tok->u.repeat.lower = 0; + tok->u.repeat.upper = 1; + greedy_check: + if (!PEND && PPEEK_IS('?') && + IS_SYNTAX_OP(syn, ONIG_SYN_OP_QMARK_NON_GREEDY)) { + PFETCH(c); + tok->u.repeat.greedy = 0; + tok->u.repeat.possessive = 0; + } + else { + possessive_check: + if (!PEND && PPEEK_IS('+') && + ((IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT) && + tok->type != TK_INTERVAL) || + (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL) && + tok->type == TK_INTERVAL))) { + PFETCH(c); + tok->u.repeat.greedy = 1; + tok->u.repeat.possessive = 1; + } + else { + tok->u.repeat.greedy = 1; + tok->u.repeat.possessive = 0; + } + } + break; + + case '{': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_BRACE_INTERVAL)) break; + r = fetch_range_quantifier(&p, end, tok, env); + if (r < 0) return r; /* error */ + if (r == 0) goto greedy_check; + else if (r == 2) { /* {n} */ + if (IS_SYNTAX_BV(syn, ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY)) + goto possessive_check; + + goto greedy_check; + } + /* r == 1 : normal char */ + break; + + case '|': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_VBAR_ALT)) break; + tok->type = TK_ALT; + break; + + case '(': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_LPAREN_SUBEXP)) break; + tok->type = TK_SUBEXP_OPEN; + break; + + case ')': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_LPAREN_SUBEXP)) break; + tok->type = TK_SUBEXP_CLOSE; + break; + + case 'w': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_W_WORD)) break; + tok->type = TK_CHAR_TYPE; + tok->u.subtype = CTYPE_WORD; + break; + + case 'W': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_W_WORD)) break; + tok->type = TK_CHAR_TYPE; + tok->u.subtype = CTYPE_NOT_WORD; + break; + + case 'b': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_B_WORD_BOUND)) break; + tok->type = TK_ANCHOR; + tok->u.anchor = ANCHOR_WORD_BOUND; + break; + + case 'B': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_B_WORD_BOUND)) break; + tok->type = TK_ANCHOR; + tok->u.anchor = ANCHOR_NOT_WORD_BOUND; + break; + +#ifdef USE_WORD_BEGIN_END + case '<': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END)) break; + tok->type = TK_ANCHOR; + tok->u.anchor = ANCHOR_WORD_BEGIN; + break; + + case '>': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END)) break; + tok->type = TK_ANCHOR; + tok->u.anchor = ANCHOR_WORD_END; + break; +#endif + + case 's': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_S_WHITE_SPACE)) break; + tok->type = TK_CHAR_TYPE; + tok->u.subtype = CTYPE_WHITE_SPACE; + break; + + case 'S': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_S_WHITE_SPACE)) break; + tok->type = TK_CHAR_TYPE; + tok->u.subtype = CTYPE_NOT_WHITE_SPACE; + break; + + case 'd': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_D_DIGIT)) break; + tok->type = TK_CHAR_TYPE; + tok->u.subtype = CTYPE_DIGIT; + break; + + case 'D': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_D_DIGIT)) break; + tok->type = TK_CHAR_TYPE; + tok->u.subtype = CTYPE_NOT_DIGIT; + break; + + case 'h': + if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_H_XDIGIT)) break; + tok->type = TK_CHAR_TYPE; + tok->u.subtype = CTYPE_XDIGIT; + break; + + case 'H': + if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_H_XDIGIT)) break; + tok->type = TK_CHAR_TYPE; + tok->u.subtype = CTYPE_NOT_XDIGIT; + break; + + case 'A': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR)) break; + begin_buf: + tok->type = TK_ANCHOR; + tok->u.subtype = ANCHOR_BEGIN_BUF; + break; + + case 'Z': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR)) break; + tok->type = TK_ANCHOR; + tok->u.subtype = ANCHOR_SEMI_END_BUF; + break; + + case 'z': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR)) break; + end_buf: + tok->type = TK_ANCHOR; + tok->u.subtype = ANCHOR_END_BUF; + break; + + case 'G': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR)) break; + tok->type = TK_ANCHOR; + tok->u.subtype = ANCHOR_BEGIN_POSITION; + break; + + case '`': + if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR)) break; + goto begin_buf; + break; + + case '\'': + if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR)) break; + goto end_buf; + break; + + case 'x': + if (PEND) break; + + prev = p; + if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_BRACE_HEX8)) { + PINC; + num = scan_unsigned_hexadecimal_number(&p, end, 8, enc); + if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE; + if (!PEND) { + if (ONIGENC_IS_CODE_XDIGIT(enc, PPEEK)) + return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE; + } + + if ((p > prev + enc_len(enc, prev)) && !PEND && PPEEK_IS('}')) { + PINC; + tok->type = TK_CODE_POINT; + tok->u.code = (OnigCodePoint )num; + } + else { + /* can't read nothing or invalid format */ + p = prev; + } + } + else if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_X_HEX2)) { + num = scan_unsigned_hexadecimal_number(&p, end, 2, enc); + if (num < 0) return ONIGERR_TOO_BIG_NUMBER; + if (p == prev) { /* can't read nothing. */ + num = 0; /* but, it's not error */ + } + tok->type = TK_RAW_BYTE; + tok->base = 16; + tok->u.c = num; + } + break; + + case 'u': + if (PEND) break; + + prev = p; + if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_U_HEX4)) { + num = scan_unsigned_hexadecimal_number(&p, end, 4, enc); + if (num < 0) return ONIGERR_TOO_BIG_NUMBER; + if (p == prev) { /* can't read nothing. */ + num = 0; /* but, it's not error */ + } + tok->type = TK_CODE_POINT; + tok->base = 16; + tok->u.code = (OnigCodePoint )num; + } + break; + + case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + PUNFETCH; + prev = p; + num = onig_scan_unsigned_number(&p, end, enc); + if (num < 0 || num > ONIG_MAX_BACKREF_NUM) { + goto skip_backref; + } + + if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_DECIMAL_BACKREF) && + (num <= env->num_mem || num <= 9)) { /* This spec. from GNU regex */ + if (IS_SYNTAX_BV(syn, ONIG_SYN_STRICT_CHECK_BACKREF)) { + if (num > env->num_mem || IS_NULL(SCANENV_MEM_NODES(env)[num])) + return ONIGERR_INVALID_BACKREF; + } + + tok->type = TK_BACKREF; + tok->u.backref.num = 1; + tok->u.backref.ref1 = num; + tok->u.backref.by_name = 0; +#ifdef USE_BACKREF_AT_LEVEL + tok->u.backref.exist_level = 0; +#endif + break; + } + + skip_backref: + if (c == '8' || c == '9') { + /* normal char */ + p = prev; PINC; + break; + } + + p = prev; + /* fall through */ + case '0': + if (IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_OCTAL3)) { + prev = p; + num = scan_unsigned_octal_number(&p, end, (c == '0' ? 2:3), enc); + if (num < 0) return ONIGERR_TOO_BIG_NUMBER; + if (p == prev) { /* can't read nothing. */ + num = 0; /* but, it's not error */ + } + tok->type = TK_RAW_BYTE; + tok->base = 8; + tok->u.c = num; + } + else if (c != '0') { + PINC; + } + break; + +#ifdef USE_NAMED_GROUP + case 'k': + if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_K_NAMED_BACKREF)) { + PFETCH(c); + if (c == '<') { + UChar* name_end; + int* backs; + + prev = p; + +#ifdef USE_BACKREF_AT_LEVEL + name_end = NULL_UCHARP; /* no need. escape gcc warning. */ + r = fetch_name_with_level(&p, end, &name_end, env, &tok->u.backref.level); + if (r == 1) tok->u.backref.exist_level = 1; + else tok->u.backref.exist_level = 0; +#else + r = fetch_name(&p, end, &name_end, env, 1); +#endif + if (r < 0) return r; + + num = onig_name_to_group_numbers(env->reg, prev, name_end, &backs); + if (num <= 0) { + onig_scan_env_set_error_string(env, + ONIGERR_UNDEFINED_NAME_REFERENCE, prev, name_end); + return ONIGERR_UNDEFINED_NAME_REFERENCE; + } + if (IS_SYNTAX_BV(syn, ONIG_SYN_STRICT_CHECK_BACKREF)) { + int i; + for (i = 0; i < num; i++) { + if (backs[i] > env->num_mem || + IS_NULL(SCANENV_MEM_NODES(env)[backs[i]])) + return ONIGERR_INVALID_BACKREF; + } + } + + tok->type = TK_BACKREF; + tok->u.backref.by_name = 1; + if (num == 1) { + tok->u.backref.num = 1; + tok->u.backref.ref1 = backs[0]; + } + else { + tok->u.backref.num = num; + tok->u.backref.refs = backs; + } + } + else + PUNFETCH; + } + break; +#endif + +#ifdef USE_SUBEXP_CALL + case 'g': + if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_G_SUBEXP_CALL)) { + PFETCH(c); + if (c == '<') { + UChar* name_end; + + prev = p; + r = fetch_name(&p, end, &name_end, env, 1); + if (r < 0) return r; + + tok->type = TK_CALL; + tok->u.call.name = prev; + tok->u.call.name_end = name_end; + } + else + PUNFETCH; + } + break; +#endif + + case 'Q': + if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE)) { + tok->type = TK_QUOTE_OPEN; + } + break; + + case 'p': + case 'P': + if (PPEEK_IS('{') && + IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY)) { + PINC; + tok->type = TK_CHAR_PROPERTY; + tok->u.prop.not = (c == 'P' ? 1 : 0); + + if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT)) { + PFETCH(c); + if (c == '^') { + tok->u.prop.not = (tok->u.prop.not == 0 ? 1 : 0); + } + else + PUNFETCH; + } + } + break; + + default: + PUNFETCH; + num = fetch_escaped_value(&p, end, env); + if (num < 0) return num; + /* set_raw: */ + if (tok->u.c != num) { + tok->type = TK_CODE_POINT; + tok->u.code = (OnigCodePoint )num; + } + else { /* string */ + p = tok->backp + enc_len(enc, tok->backp); + } + break; + } + } + else { + tok->u.c = c; + tok->escaped = 0; + +#ifdef USE_VARIABLE_META_CHARS + if ((c != ONIG_INEFFECTIVE_META_CHAR) && + IS_SYNTAX_OP(syn, ONIG_SYN_OP_VARIABLE_META_CHARACTERS)) { + if (c == MC_ANYCHAR(enc)) + goto any_char; + else if (c == MC_ANYTIME(enc)) + goto anytime; + else if (c == MC_ZERO_OR_ONE_TIME(enc)) + goto zero_or_one_time; + else if (c == MC_ONE_OR_MORE_TIME(enc)) + goto one_or_more_time; + else if (c == MC_ANYCHAR_ANYTIME(enc)) { + tok->type = TK_ANYCHAR_ANYTIME; + goto out; + } + } +#endif + + switch (c) { + case '.': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_DOT_ANYCHAR)) break; +#ifdef USE_VARIABLE_META_CHARS + any_char: +#endif + tok->type = TK_ANYCHAR; + break; + + case '*': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ASTERISK_ZERO_INF)) break; +#ifdef USE_VARIABLE_META_CHARS + anytime: +#endif + tok->type = TK_OP_REPEAT; + tok->u.repeat.lower = 0; + tok->u.repeat.upper = REPEAT_INFINITE; + goto greedy_check; + break; + + case '+': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_PLUS_ONE_INF)) break; +#ifdef USE_VARIABLE_META_CHARS + one_or_more_time: +#endif + tok->type = TK_OP_REPEAT; + tok->u.repeat.lower = 1; + tok->u.repeat.upper = REPEAT_INFINITE; + goto greedy_check; + break; + + case '?': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_QMARK_ZERO_ONE)) break; +#ifdef USE_VARIABLE_META_CHARS + zero_or_one_time: +#endif + tok->type = TK_OP_REPEAT; + tok->u.repeat.lower = 0; + tok->u.repeat.upper = 1; + goto greedy_check; + break; + + case '{': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_BRACE_INTERVAL)) break; + r = fetch_range_quantifier(&p, end, tok, env); + if (r < 0) return r; /* error */ + if (r == 0) goto greedy_check; + else if (r == 2) { /* {n} */ + if (IS_SYNTAX_BV(syn, ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY)) + goto possessive_check; + + goto greedy_check; + } + /* r == 1 : normal char */ + break; + + case '|': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_VBAR_ALT)) break; + tok->type = TK_ALT; + break; + + case '(': + if (PPEEK_IS('?') && + IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_QMARK_GROUP_EFFECT)) { + PINC; + if (PPEEK_IS('#')) { + PFETCH(c); + while (1) { + if (PEND) return ONIGERR_END_PATTERN_IN_GROUP; + PFETCH(c); + if (c == MC_ESC(enc)) { + if (!PEND) PFETCH(c); + } + else { + if (c == ')') break; + } + } + goto start; + } + PUNFETCH; + } + + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LPAREN_SUBEXP)) break; + tok->type = TK_SUBEXP_OPEN; + break; + + case ')': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LPAREN_SUBEXP)) break; + tok->type = TK_SUBEXP_CLOSE; + break; + + case '^': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LINE_ANCHOR)) break; + tok->type = TK_ANCHOR; + tok->u.subtype = (IS_SINGLELINE(env->option) + ? ANCHOR_BEGIN_BUF : ANCHOR_BEGIN_LINE); + break; + + case '$': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_LINE_ANCHOR)) break; + tok->type = TK_ANCHOR; + tok->u.subtype = (IS_SINGLELINE(env->option) + ? ANCHOR_SEMI_END_BUF : ANCHOR_END_LINE); + break; + + case '[': + if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_BRACKET_CC)) break; + tok->type = TK_CC_OPEN; + break; + + case ']': + if (*src > env->pattern) /* /].../ is allowed. */ + CCEND_ESC_WARN(env, (UChar* )"]"); + break; + + case '#': + if (IS_EXTEND(env->option)) { + while (!PEND) { + PFETCH(c); + if (ONIGENC_IS_CODE_NEWLINE(enc, c)) + break; + } + goto start; + break; + } + break; + + case ' ': case '\t': case '\n': case '\r': case '\f': + if (IS_EXTEND(env->option)) + goto start; + break; + + default: + /* string */ + break; + } + } + +#ifdef USE_VARIABLE_META_CHARS + out: +#endif + *src = p; + return tok->type; +} + +static int +add_ctype_to_cc_by_range(CClassNode* cc, int ctype, int not, OnigEncoding enc, + const OnigCodePoint sbr[], const OnigCodePoint mbr[]) +{ + int i, r; + OnigCodePoint j; + + int nsb = ONIGENC_CODE_RANGE_NUM(sbr); + int nmb = ONIGENC_CODE_RANGE_NUM(mbr); + + if (not == 0) { + for (i = 0; i < nsb; i++) { + for (j = ONIGENC_CODE_RANGE_FROM(sbr, i); + j <= ONIGENC_CODE_RANGE_TO(sbr, i); j++) { + BITSET_SET_BIT(cc->bs, j); + } + } + + for (i = 0; i < nmb; i++) { + r = add_code_range_to_buf(&(cc->mbuf), + ONIGENC_CODE_RANGE_FROM(mbr, i), + ONIGENC_CODE_RANGE_TO(mbr, i)); + if (r != 0) return r; + } + } + else { + OnigCodePoint prev = 0; + + if (ONIGENC_MBC_MINLEN(enc) == 1) { + for (i = 0; i < nsb; i++) { + for (j = prev; + j < ONIGENC_CODE_RANGE_FROM(sbr, i); j++) { + BITSET_SET_BIT(cc->bs, j); + } + prev = ONIGENC_CODE_RANGE_TO(sbr, i) + 1; + } + if (prev < 0x7f) { + for (j = prev; j < 0x7f; j++) { + BITSET_SET_BIT(cc->bs, j); + } + } + + prev = 0x80; + } + + for (i = 0; i < nmb; i++) { + if (prev < ONIGENC_CODE_RANGE_FROM(mbr, i)) { + r = add_code_range_to_buf(&(cc->mbuf), prev, + ONIGENC_CODE_RANGE_FROM(mbr, i) - 1); + if (r != 0) return r; + } + prev = ONIGENC_CODE_RANGE_TO(mbr, i) + 1; + } + if (prev < 0x7fffffff) { + r = add_code_range_to_buf(&(cc->mbuf), prev, 0x7fffffff); + if (r != 0) return r; + } + } + + return 0; +} + +static int +add_ctype_to_cc(CClassNode* cc, int ctype, int not, ScanEnv* env) +{ + int c, r; + const OnigCodePoint *sbr, *mbr; + OnigEncoding enc = env->enc; + + r = ONIGENC_GET_CTYPE_CODE_RANGE(enc, ctype, &sbr, &mbr); + if (r == 0) { + return add_ctype_to_cc_by_range(cc, ctype, not, env->enc, sbr, mbr); + } + else if (r != ONIG_NO_SUPPORT_CONFIG) { + return r; + } + + r = 0; + switch (ctype) { + case ONIGENC_CTYPE_ALPHA: + case ONIGENC_CTYPE_BLANK: + case ONIGENC_CTYPE_CNTRL: + case ONIGENC_CTYPE_DIGIT: + case ONIGENC_CTYPE_LOWER: + case ONIGENC_CTYPE_PUNCT: + case ONIGENC_CTYPE_SPACE: + case ONIGENC_CTYPE_UPPER: + case ONIGENC_CTYPE_XDIGIT: + case ONIGENC_CTYPE_ASCII: + case ONIGENC_CTYPE_ALNUM: + if (not != 0) { + for (c = 0; c < SINGLE_BYTE_SIZE; c++) { + if (! ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype)) + BITSET_SET_BIT(cc->bs, c); + } + ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf); + } + else { + for (c = 0; c < SINGLE_BYTE_SIZE; c++) { + if (ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype)) + BITSET_SET_BIT(cc->bs, c); + } + } + break; + + case ONIGENC_CTYPE_GRAPH: + case ONIGENC_CTYPE_PRINT: + if (not != 0) { + for (c = 0; c < SINGLE_BYTE_SIZE; c++) { + if (! ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype)) + BITSET_SET_BIT(cc->bs, c); + } + } + else { + for (c = 0; c < SINGLE_BYTE_SIZE; c++) { + if (ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype)) + BITSET_SET_BIT(cc->bs, c); + } + ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf); + } + break; + + case ONIGENC_CTYPE_WORD: + if (not == 0) { + for (c = 0; c < SINGLE_BYTE_SIZE; c++) { + if (ONIGENC_IS_CODE_SB_WORD(enc, c)) BITSET_SET_BIT(cc->bs, c); + } + ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf); + } + else { + for (c = 0; c < SINGLE_BYTE_SIZE; c++) { + if ((ONIGENC_CODE_TO_MBCLEN(enc, c) > 0) /* 0: invalid code point */ + && ! ONIGENC_IS_CODE_WORD(enc, c)) + BITSET_SET_BIT(cc->bs, c); + } + } + break; + + default: + return ONIGERR_PARSER_BUG; + break; + } + + return r; +} + +static int +parse_ctype_to_enc_ctype(int pctype, int* not) +{ + int ctype; + + switch (pctype) { + case CTYPE_WORD: + ctype = ONIGENC_CTYPE_WORD; + *not = 0; + break; + case CTYPE_NOT_WORD: + ctype = ONIGENC_CTYPE_WORD; + *not = 1; + break; + case CTYPE_WHITE_SPACE: + ctype = ONIGENC_CTYPE_SPACE; + *not = 0; + break; + case CTYPE_NOT_WHITE_SPACE: + ctype = ONIGENC_CTYPE_SPACE; + *not = 1; + break; + case CTYPE_DIGIT: + ctype = ONIGENC_CTYPE_DIGIT; + *not = 0; + break; + case CTYPE_NOT_DIGIT: + ctype = ONIGENC_CTYPE_DIGIT; + *not = 1; + break; + case CTYPE_XDIGIT: + ctype = ONIGENC_CTYPE_XDIGIT; + *not = 0; + break; + case CTYPE_NOT_XDIGIT: + ctype = ONIGENC_CTYPE_XDIGIT; + *not = 1; + break; + default: + return ONIGERR_PARSER_BUG; + break; + } + return ctype; +} + +typedef struct { + UChar *name; + int ctype; + short int len; +} PosixBracketEntryType; + +static int +parse_posix_bracket(CClassNode* cc, UChar** src, UChar* end, ScanEnv* env) +{ +#define POSIX_BRACKET_CHECK_LIMIT_LENGTH 20 +#define POSIX_BRACKET_NAME_MAX_LEN 6 + + static PosixBracketEntryType PBS[] = { + { (UChar* )"alnum", ONIGENC_CTYPE_ALNUM, 5 }, + { (UChar* )"alpha", ONIGENC_CTYPE_ALPHA, 5 }, + { (UChar* )"blank", ONIGENC_CTYPE_BLANK, 5 }, + { (UChar* )"cntrl", ONIGENC_CTYPE_CNTRL, 5 }, + { (UChar* )"digit", ONIGENC_CTYPE_DIGIT, 5 }, + { (UChar* )"graph", ONIGENC_CTYPE_GRAPH, 5 }, + { (UChar* )"lower", ONIGENC_CTYPE_LOWER, 5 }, + { (UChar* )"print", ONIGENC_CTYPE_PRINT, 5 }, + { (UChar* )"punct", ONIGENC_CTYPE_PUNCT, 5 }, + { (UChar* )"space", ONIGENC_CTYPE_SPACE, 5 }, + { (UChar* )"upper", ONIGENC_CTYPE_UPPER, 5 }, + { (UChar* )"xdigit", ONIGENC_CTYPE_XDIGIT, 6 }, + { (UChar* )"ascii", ONIGENC_CTYPE_ASCII, 5 }, + { (UChar* )NULL, -1, 0 } + }; + + PosixBracketEntryType *pb; + int not, i, r; + OnigCodePoint c; + OnigEncoding enc = env->enc; + UChar *p = *src; + PFETCH_READY; + + if (PPEEK_IS('^')) { + PINC; + not = 1; + } + else + not = 0; + + if (onigenc_strlen(enc, p, end) < POSIX_BRACKET_NAME_MAX_LEN + 2) + goto not_posix_bracket; + + for (pb = PBS; IS_NOT_NULL(pb->name); pb++) { + if (onigenc_with_ascii_strncmp(enc, p, end, pb->name, pb->len) == 0) { + p = (UChar* )onigenc_step(enc, p, end, pb->len); + if (onigenc_with_ascii_strncmp(enc, p, end, (UChar* )":]", 2) != 0) + return ONIGERR_INVALID_POSIX_BRACKET_TYPE; + + r = add_ctype_to_cc(cc, pb->ctype, not, env); + if (r != 0) return r; + + PINC; PINC; + *src = p; + return 0; + } + } + + not_posix_bracket: + c = 0; + i = 0; + while (!PEND && ((c = PPEEK) != ':') && c != ']') { + PINC; + if (++i > POSIX_BRACKET_CHECK_LIMIT_LENGTH) break; + } + if (c == ':' && ! PEND) { + PINC; + if (! PEND) { + PFETCH(c); + if (c == ']') + return ONIGERR_INVALID_POSIX_BRACKET_TYPE; + } + } + + return 1; /* 1: is not POSIX bracket, but no error. */ +} + +static int +property_name_to_ctype(UChar* p, UChar* end, OnigEncoding enc) +{ + static PosixBracketEntryType PBS[] = { + { (UChar* )"Alnum", ONIGENC_CTYPE_ALNUM, 5 }, + { (UChar* )"Alpha", ONIGENC_CTYPE_ALPHA, 5 }, + { (UChar* )"Blank", ONIGENC_CTYPE_BLANK, 5 }, + { (UChar* )"Cntrl", ONIGENC_CTYPE_CNTRL, 5 }, + { (UChar* )"Digit", ONIGENC_CTYPE_DIGIT, 5 }, + { (UChar* )"Graph", ONIGENC_CTYPE_GRAPH, 5 }, + { (UChar* )"Lower", ONIGENC_CTYPE_LOWER, 5 }, + { (UChar* )"Print", ONIGENC_CTYPE_PRINT, 5 }, + { (UChar* )"Punct", ONIGENC_CTYPE_PUNCT, 5 }, + { (UChar* )"Space", ONIGENC_CTYPE_SPACE, 5 }, + { (UChar* )"Upper", ONIGENC_CTYPE_UPPER, 5 }, + { (UChar* )"XDigit", ONIGENC_CTYPE_XDIGIT, 6 }, + { (UChar* )"ASCII", ONIGENC_CTYPE_ASCII, 5 }, + { (UChar* )NULL, -1, 0 } + }; + + PosixBracketEntryType *pb; + int len; + + len = onigenc_strlen(enc, p, end); + for (pb = PBS; IS_NOT_NULL(pb->name); pb++) { + if (len == pb->len && + onigenc_with_ascii_strncmp(enc, p, end, pb->name, pb->len) == 0) + return pb->ctype; + } + + return -1; +} + +static int +fetch_char_property_to_ctype(UChar** src, UChar* end, ScanEnv* env) +{ + int ctype; + OnigCodePoint c; + OnigEncoding enc = env->enc; + UChar *prev, *start, *p = *src; + PFETCH_READY; + + /* 'IsXXXX' => 'XXXX' */ + if (!PEND && + IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS)) { + c = PPEEK; + if (c == 'I') { + PINC; + if (! PEND) { + c = PPEEK; + if (c == 's') + PINC; + else + PUNFETCH; + } + } + } + + start = prev = p; + + while (!PEND) { + prev = p; + PFETCH(c); + if (c == '}') { + ctype = property_name_to_ctype(start, prev, enc); + if (ctype < 0) break; + + *src = p; + return ctype; + } + else if (c == '(' || c == ')' || c == '{' || c == '|') + break; + } + + onig_scan_env_set_error_string(env, ONIGERR_INVALID_CHAR_PROPERTY_NAME, + *src, prev); + return ONIGERR_INVALID_CHAR_PROPERTY_NAME; +} + +static int +parse_char_property(Node** np, OnigToken* tok, UChar** src, UChar* end, + ScanEnv* env) +{ + int r, ctype; + CClassNode* cc; + + ctype = fetch_char_property_to_ctype(src, end, env); + if (ctype < 0) return ctype; + + *np = node_new_cclass(); + CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY); + cc = &(NCCLASS(*np)); + r = add_ctype_to_cc(cc, ctype, 0, env); + if (r != 0) return r; + if (tok->u.prop.not != 0) CCLASS_SET_NOT(cc); + + return 0; +} + + +enum CCSTATE { + CCS_VALUE, + CCS_RANGE, + CCS_COMPLETE, + CCS_START +}; + +enum CCVALTYPE { + CCV_SB, + CCV_CODE_POINT, + CCV_CLASS +}; + +static int +next_state_class(CClassNode* cc, OnigCodePoint* vs, enum CCVALTYPE* type, + enum CCSTATE* state, ScanEnv* env) +{ + int r; + + if (*state == CCS_RANGE) + return ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE; + + if (*state == CCS_VALUE && *type != CCV_CLASS) { + if (*type == CCV_SB) + BITSET_SET_BIT(cc->bs, (int )(*vs)); + else if (*type == CCV_CODE_POINT) { + r = add_code_range(&(cc->mbuf), env, *vs, *vs); + if (r < 0) return r; + } + } + + *state = CCS_VALUE; + *type = CCV_CLASS; + return 0; +} + +static int +next_state_val(CClassNode* cc, OnigCodePoint *vs, OnigCodePoint v, + int* vs_israw, int v_israw, + enum CCVALTYPE intype, enum CCVALTYPE* type, + enum CCSTATE* state, ScanEnv* env) +{ + int r; + + switch (*state) { + case CCS_VALUE: + if (*type == CCV_SB) + BITSET_SET_BIT(cc->bs, (int )(*vs)); + else if (*type == CCV_CODE_POINT) { + r = add_code_range(&(cc->mbuf), env, *vs, *vs); + if (r < 0) return r; + } + break; + + case CCS_RANGE: + if (intype == *type) { + if (intype == CCV_SB) { + if (*vs > 0xff || v > 0xff) + return ONIGERR_INVALID_WIDE_CHAR_VALUE; + + if (*vs > v) { + if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC)) + goto ccs_range_end; + else + return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS; + } + bitset_set_range(cc->bs, (int )*vs, (int )v); + } + else { + r = add_code_range(&(cc->mbuf), env, *vs, v); + if (r < 0) return r; + } + } + else { +#if 0 + if (intype == CCV_CODE_POINT && *type == CCV_SB) { +#endif + if (*vs > v) { + if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC)) + goto ccs_range_end; + else + return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS; + } + bitset_set_range(cc->bs, (int )*vs, (int )(v < 0xff ? v : 0xff)); + r = add_code_range(&(cc->mbuf), env, (OnigCodePoint )*vs, v); + if (r < 0) return r; +#if 0 + } + else + return ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE; +#endif + } + ccs_range_end: + *state = CCS_COMPLETE; + break; + + case CCS_COMPLETE: + case CCS_START: + *state = CCS_VALUE; + break; + + default: + break; + } + + *vs_israw = v_israw; + *vs = v; + *type = intype; + return 0; +} + +static int +code_exist_check(OnigCodePoint c, UChar* from, UChar* end, int ignore_escaped, + OnigEncoding enc) +{ + int in_esc; + OnigCodePoint code; + UChar* p = from; + PFETCH_READY; + + in_esc = 0; + while (! PEND) { + if (ignore_escaped && in_esc) { + in_esc = 0; + } + else { + PFETCH(code); + if (code == c) return 1; + if (code == MC_ESC(enc)) in_esc = 1; + } + } + return 0; +} + +static int +parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end, + ScanEnv* env) +{ + int r, neg, len, fetched, and_start; + OnigCodePoint v, vs; + UChar *p; + Node* node; + CClassNode *cc, *prev_cc; + CClassNode work_cc; + + enum CCSTATE state; + enum CCVALTYPE val_type, in_type; + int val_israw, in_israw; + + prev_cc = (CClassNode* )NULL; + *np = NULL_NODE; + r = fetch_token_in_cc(tok, src, end, env); + if (r == TK_CHAR && tok->u.c == '^' && tok->escaped == 0) { + neg = 1; + r = fetch_token_in_cc(tok, src, end, env); + } + else { + neg = 0; + } + + if (r < 0) return r; + if (r == TK_CC_CLOSE) { + if (! code_exist_check((OnigCodePoint )']', + *src, env->pattern_end, 1, env->enc)) + return ONIGERR_EMPTY_CHAR_CLASS; + + CC_ESC_WARN(env, (UChar* )"]"); + r = tok->type = TK_CHAR; /* allow []...] */ + } + + *np = node = node_new_cclass(); + CHECK_NULL_RETURN_VAL(node, ONIGERR_MEMORY); + cc = &(NCCLASS(node)); + + and_start = 0; + state = CCS_START; + p = *src; + while (r != TK_CC_CLOSE) { + fetched = 0; + switch (r) { + case TK_CHAR: + len = ONIGENC_CODE_TO_MBCLEN(env->enc, tok->u.c); + if (len > 1) { + in_type = CCV_CODE_POINT; + } + else { + sb_char: + in_type = CCV_SB; + } + v = (OnigCodePoint )tok->u.c; + in_israw = 0; + goto val_entry2; + break; + + case TK_RAW_BYTE: + /* tok->base != 0 : octal or hexadec. */ + if (! ONIGENC_IS_SINGLEBYTE(env->enc) && tok->base != 0) { + UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN]; + UChar* bufe = buf + ONIGENC_CODE_TO_MBC_MAXLEN; + UChar* psave = p; + int i, base = tok->base; + + buf[0] = tok->u.c; + for (i = 1; i < ONIGENC_MBC_MAXLEN(env->enc); i++) { + r = fetch_token_in_cc(tok, &p, end, env); + if (r < 0) goto err; + if (r != TK_RAW_BYTE || tok->base != base) { + fetched = 1; + break; + } + buf[i] = tok->u.c; + } + + if (i < ONIGENC_MBC_MINLEN(env->enc)) { + r = ONIGERR_TOO_SHORT_MULTI_BYTE_STRING; + goto err; + } + + len = enc_len(env->enc, buf); + if (i < len) { + r = ONIGERR_TOO_SHORT_MULTI_BYTE_STRING; + goto err; + } + else if (i > len) { /* fetch back */ + p = psave; + for (i = 1; i < len; i++) { + r = fetch_token_in_cc(tok, &p, end, env); + } + fetched = 0; + } + + if (i == 1) { + v = (OnigCodePoint )buf[0]; + goto raw_single; + } + else { + v = ONIGENC_MBC_TO_CODE(env->enc, buf, bufe); + in_type = CCV_CODE_POINT; + } + } + else { + v = (OnigCodePoint )tok->u.c; + raw_single: + in_type = CCV_SB; + } + in_israw = 1; + goto val_entry2; + break; + + case TK_CODE_POINT: + v = tok->u.code; + in_israw = 1; + val_entry: + len = ONIGENC_CODE_TO_MBCLEN(env->enc, v); + if (len < 0) { + r = len; + goto err; + } + in_type = (len == 1 ? CCV_SB : CCV_CODE_POINT); + val_entry2: + r = next_state_val(cc, &vs, v, &val_israw, in_israw, in_type, &val_type, + &state, env); + if (r != 0) goto err; + break; + + case TK_POSIX_BRACKET_OPEN: + r = parse_posix_bracket(cc, &p, end, env); + if (r < 0) goto err; + if (r == 1) { /* is not POSIX bracket */ + CC_ESC_WARN(env, (UChar* )"["); + p = tok->backp; + v = (OnigCodePoint )tok->u.c; + in_israw = 0; + goto val_entry; + } + goto next_class; + break; + + case TK_CHAR_TYPE: + { + int ctype, not; + ctype = parse_ctype_to_enc_ctype(tok->u.subtype, ¬); + r = add_ctype_to_cc(cc, ctype, not, env); + if (r != 0) return r; + } + + next_class: + r = next_state_class(cc, &vs, &val_type, &state, env); + if (r != 0) goto err; + break; + + case TK_CHAR_PROPERTY: + { + int ctype; + + ctype = fetch_char_property_to_ctype(&p, end, env); + if (ctype < 0) return ctype; + r = add_ctype_to_cc(cc, ctype, tok->u.prop.not, env); + if (r != 0) return r; + goto next_class; + } + break; + + case TK_CC_RANGE: + if (state == CCS_VALUE) { + r = fetch_token_in_cc(tok, &p, end, env); + if (r < 0) goto err; + fetched = 1; + if (r == TK_CC_CLOSE) { /* allow [x-] */ + range_end_val: + v = (OnigCodePoint )'-'; + in_israw = 0; + goto val_entry; + } + else if (r == TK_CC_AND) { + CC_ESC_WARN(env, (UChar* )"-"); + goto range_end_val; + } + state = CCS_RANGE; + } + else if (state == CCS_START) { + /* [-xa] is allowed */ + v = (OnigCodePoint )tok->u.c; + in_israw = 0; + + r = fetch_token_in_cc(tok, &p, end, env); + if (r < 0) goto err; + fetched = 1; + /* [--x] or [a&&-x] is warned. */ + if (r == TK_CC_RANGE || and_start != 0) + CC_ESC_WARN(env, (UChar* )"-"); + + goto val_entry; + } + else if (state == CCS_RANGE) { + CC_ESC_WARN(env, (UChar* )"-"); + goto sb_char; /* [!--x] is allowed */ + } + else { /* CCS_COMPLETE */ + r = fetch_token_in_cc(tok, &p, end, env); + if (r < 0) goto err; + fetched = 1; + if (r == TK_CC_CLOSE) goto range_end_val; /* allow [a-b-] */ + else if (r == TK_CC_AND) { + CC_ESC_WARN(env, (UChar* )"-"); + goto range_end_val; + } + + if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC)) { + CC_ESC_WARN(env, (UChar* )"-"); + goto sb_char; /* [0-9-a] is allowed as [0-9\-a] */ + } + r = ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS; + goto err; + } + break; + + case TK_CC_CC_OPEN: /* [ */ + { + Node *anode; + CClassNode* acc; + + r = parse_char_class(&anode, tok, &p, end, env); + if (r != 0) goto cc_open_err; + acc = &(NCCLASS(anode)); + r = or_cclass(cc, acc, env->enc); + + onig_node_free(anode); + cc_open_err: + if (r != 0) goto err; + } + break; + + case TK_CC_AND: /* && */ + { + if (state == CCS_VALUE) { + r = next_state_val(cc, &vs, 0, &val_israw, 0, val_type, + &val_type, &state, env); + if (r != 0) goto err; + } + /* initialize local variables */ + and_start = 1; + state = CCS_START; + + if (IS_NOT_NULL(prev_cc)) { + r = and_cclass(prev_cc, cc, env->enc); + if (r != 0) goto err; + bbuf_free(cc->mbuf); + } + else { + prev_cc = cc; + cc = &work_cc; + } + initialize_cclass(cc); + } + break; + + case TK_EOT: + r = ONIGERR_PREMATURE_END_OF_CHAR_CLASS; + goto err; + break; + default: + r = ONIGERR_PARSER_BUG; + goto err; + break; + } + + if (fetched) + r = tok->type; + else { + r = fetch_token_in_cc(tok, &p, end, env); + if (r < 0) goto err; + } + } + + if (state == CCS_VALUE) { + r = next_state_val(cc, &vs, 0, &val_israw, 0, val_type, + &val_type, &state, env); + if (r != 0) goto err; + } + + if (IS_NOT_NULL(prev_cc)) { + r = and_cclass(prev_cc, cc, env->enc); + if (r != 0) goto err; + bbuf_free(cc->mbuf); + cc = prev_cc; + } + + if (neg != 0) + CCLASS_SET_NOT(cc); + else + CCLASS_CLEAR_NOT(cc); + if (IS_CCLASS_NOT(cc) && + IS_SYNTAX_BV(env->syntax, ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC)) { + int is_empty; + + is_empty = (IS_NULL(cc->mbuf) ? 1 : 0); + if (is_empty != 0) + BITSET_IS_EMPTY(cc->bs, is_empty); + + if (is_empty == 0) { +#define NEWLINE_CODE 0x0a + + if (ONIGENC_IS_CODE_NEWLINE(env->enc, NEWLINE_CODE)) { + if (ONIGENC_CODE_TO_MBCLEN(env->enc, NEWLINE_CODE) == 1) + BITSET_SET_BIT(cc->bs, NEWLINE_CODE); + else + add_code_range(&(cc->mbuf), env, NEWLINE_CODE, NEWLINE_CODE); + } + } + } + *src = p; + return 0; + + err: + if (cc != &(NCCLASS(*np))) + bbuf_free(cc->mbuf); + onig_node_free(*np); + return r; +} + +static int parse_subexp(Node** top, OnigToken* tok, int term, + UChar** src, UChar* end, ScanEnv* env); + +static int +parse_effect(Node** np, OnigToken* tok, int term, UChar** src, UChar* end, + ScanEnv* env) +{ + int r, num; + int list_capture; + Node *target; + OnigOptionType option; + OnigEncoding enc = env->enc; + OnigCodePoint c; + UChar* p = *src; + PFETCH_READY; + + *np = NULL; + if (PEND) return ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS; + + option = env->option; + if (PPEEK_IS('?') && + IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_GROUP_EFFECT)) { + PINC; + if (PEND) return ONIGERR_END_PATTERN_IN_GROUP; + + PFETCH(c); + switch (c) { + case ':': /* (?:...) grouping only */ + group: + r = fetch_token(tok, &p, end, env); + if (r < 0) return r; + r = parse_subexp(np, tok, term, &p, end, env); + if (r < 0) return r; + *src = p; + return 1; /* group */ + break; + + case '=': + *np = onig_node_new_anchor(ANCHOR_PREC_READ); + break; + case '!': /* preceding read */ + *np = onig_node_new_anchor(ANCHOR_PREC_READ_NOT); + break; + case '>': /* (?>...) stop backtrack */ + *np = node_new_effect(EFFECT_STOP_BACKTRACK); + break; + + case '<': /* look behind (?<=...), (?<!...) */ + PFETCH(c); + if (c == '=') + *np = onig_node_new_anchor(ANCHOR_LOOK_BEHIND); + else if (c == '!') + *np = onig_node_new_anchor(ANCHOR_LOOK_BEHIND_NOT); +#ifdef USE_NAMED_GROUP + else if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) { + UChar *name; + UChar *name_end; + + PUNFETCH; + list_capture = 0; + + named_group: + name = p; + r = fetch_name(&p, end, &name_end, env, 0); + if (r < 0) return r; + + num = scan_env_add_mem_entry(env); + if (num < 0) return num; + if (list_capture != 0 && num >= BIT_STATUS_BITS_NUM) + return ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY; + + r = name_add(env->reg, name, name_end, num, env); + if (r != 0) return r; + *np = node_new_effect_memory(env->option, 1); + CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY); + NEFFECT(*np).regnum = num; + if (list_capture != 0) + BIT_STATUS_ON_AT_SIMPLE(env->capture_history, num); + env->num_named++; + } +#endif + else + return ONIGERR_UNDEFINED_GROUP_OPTION; + break; + + case '@': + if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY)) { +#ifdef USE_NAMED_GROUP + if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) { + PFETCH(c); + if (c == '<') { + list_capture = 1; + goto named_group; /* (?@<name>...) */ + } + PUNFETCH; + } +#endif + *np = node_new_effect_memory(env->option, 0); + CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY); + num = scan_env_add_mem_entry(env); + if (num < 0) { + onig_node_free(*np); + return num; + } + else if (num >= BIT_STATUS_BITS_NUM) { + onig_node_free(*np); + return ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY; + } + NEFFECT(*np).regnum = num; + BIT_STATUS_ON_AT_SIMPLE(env->capture_history, num); + } + else { + return ONIGERR_UNDEFINED_GROUP_OPTION; + } + break; + +#ifdef USE_POSIXLINE_OPTION + case 'p': +#endif + case '-': case 'i': case 'm': case 's': case 'x': + { + int neg = 0; + + while (1) { + switch (c) { + case ':': + case ')': + break; + + case '-': neg = 1; break; + case 'x': ONOFF(option, ONIG_OPTION_EXTEND, neg); break; + case 'i': ONOFF(option, ONIG_OPTION_IGNORECASE, neg); break; + case 's': + if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) { + ONOFF(option, ONIG_OPTION_MULTILINE, neg); + } + else + return ONIGERR_UNDEFINED_GROUP_OPTION; + break; + + case 'm': + if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) { + ONOFF(option, ONIG_OPTION_SINGLELINE, (neg == 0 ? 1 : 0)); + } + else if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY)) { + ONOFF(option, ONIG_OPTION_MULTILINE, neg); + } + else + return ONIGERR_UNDEFINED_GROUP_OPTION; + break; +#ifdef USE_POSIXLINE_OPTION + case 'p': + ONOFF(option, ONIG_OPTION_MULTILINE|ONIG_OPTION_SINGLELINE, neg); + break; +#endif + default: + return ONIGERR_UNDEFINED_GROUP_OPTION; + } + + if (c == ')') { + *np = node_new_option(option); + CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY); + *src = p; + return 2; /* option only */ + } + else if (c == ':') { + OnigOptionType prev = env->option; + + env->option = option; + r = fetch_token(tok, &p, end, env); + if (r < 0) return r; + r = parse_subexp(&target, tok, term, &p, end, env); + env->option = prev; + if (r < 0) return r; + *np = node_new_option(option); + CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY); + NEFFECT(*np).target = target; + *src = p; + return 0; + } + + if (PEND) return ONIGERR_END_PATTERN_IN_GROUP; + PFETCH(c); + } + } + break; + + default: + return ONIGERR_UNDEFINED_GROUP_OPTION; + } + } + else { + if (ONIG_IS_OPTION_ON(env->option, ONIG_OPTION_DONT_CAPTURE_GROUP)) + goto group; + + *np = node_new_effect_memory(env->option, 0); + CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY); + num = scan_env_add_mem_entry(env); + if (num < 0) return num; + NEFFECT(*np).regnum = num; + } + + CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY); + r = fetch_token(tok, &p, end, env); + if (r < 0) return r; + r = parse_subexp(&target, tok, term, &p, end, env); + if (r < 0) return r; + + if (NTYPE(*np) == N_ANCHOR) + NANCHOR(*np).target = target; + else { + NEFFECT(*np).target = target; + if (NEFFECT(*np).type == EFFECT_MEMORY) { + /* Don't move this to previous of parse_subexp() */ + r = scan_env_set_mem_node(env, NEFFECT(*np).regnum, *np); + if (r != 0) return r; + } + } + + *src = p; + return 0; +} + +static const char* PopularQStr[] = { + "?", "*", "+", "??", "*?", "+?" +}; + +static const char* ReduceQStr[] = { + "", "", "*", "*?", "??", "+ and ??", "+? and ?" +}; + +static int +set_quantifier(Node* qnode, Node* target, int group, ScanEnv* env) +{ + QuantifierNode* qn; + + qn = &(NQUANTIFIER(qnode)); + if (qn->lower == 1 && qn->upper == 1) { + return 1; + } + + switch (NTYPE(target)) { + case N_STRING: + if (! group) { + StrNode* sn = &(NSTRING(target)); + if (str_node_can_be_split(sn, env->enc)) { + Node* n = str_node_split_last_char(sn, env->enc); + if (IS_NOT_NULL(n)) { + qn->target = n; + return 2; + } + } + } + break; + + case N_QUANTIFIER: + { /* check redundant double repeat. */ + /* verbose warn (?:.?)? etc... but not warn (.?)? etc... */ + QuantifierNode* qnt = &(NQUANTIFIER(target)); + int nestq_num = popular_quantifier_num(qn); + int targetq_num = popular_quantifier_num(qnt); + +#ifdef USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR + if (!IS_QUANTIFIER_BY_NUMBER(qn) && !IS_QUANTIFIER_BY_NUMBER(qnt) && + IS_SYNTAX_BV(env->syntax, ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT)) { + UChar buf[WARN_BUFSIZE]; + + switch(ReduceTypeTable[targetq_num][nestq_num]) { + case RQ_ASIS: + break; + + case RQ_DEL: + if (onig_verb_warn != onig_null_warn) { + onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc, + env->pattern, env->pattern_end, + (UChar* )"redundant nested repeat operator"); + (*onig_verb_warn)((char* )buf); + } + goto warn_exit; + break; + + default: + if (onig_verb_warn != onig_null_warn) { + onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc, + env->pattern, env->pattern_end, + (UChar* )"nested repeat operator %s and %s was replaced with '%s'", + PopularQStr[targetq_num], PopularQStr[nestq_num], + ReduceQStr[ReduceTypeTable[targetq_num][nestq_num]]); + (*onig_verb_warn)((char* )buf); + } + goto warn_exit; + break; + } + } + + warn_exit: +#endif + if (targetq_num >= 0) { + if (nestq_num >= 0) { + onig_reduce_nested_quantifier(qnode, target); + goto q_exit; + } + else if (targetq_num == 1 || targetq_num == 2) { /* * or + */ + /* (?:a*){n,m}, (?:a+){n,m} => (?:a*){n,n}, (?:a+){n,n} */ + if (! IS_REPEAT_INFINITE(qn->upper) && qn->upper > 1 && qn->greedy) { + qn->upper = (qn->lower == 0 ? 1 : qn->lower); + } + } + } + } + break; + + default: + break; + } + + qn->target = target; + q_exit: + return 0; +} + +#ifdef USE_SHARED_CCLASS_TABLE + +#define THRESHOLD_RANGE_NUM_FOR_SHARE_CCLASS 8 + +/* for ctype node hash table */ + +typedef struct { + OnigEncoding enc; + int not; + int type; +} type_cclass_key; + +static int type_cclass_cmp(type_cclass_key* x, type_cclass_key* y) +{ + if (x->type != y->type) return 1; + if (x->enc != y->enc) return 1; + if (x->not != y->not) return 1; + return 0; +} + +static int type_cclass_hash(type_cclass_key* key) +{ + int i, val; + unsigned char *p; + + val = 0; + + p = (unsigned char* )&(key->enc); + for (i = 0; i < sizeof(key->enc); i++) { + val = val * 997 + (int )*p++; + } + + p = (unsigned char* )(&key->type); + for (i = 0; i < sizeof(key->type); i++) { + val = val * 997 + (int )*p++; + } + + val += key->not; + return val + (val >> 5); +} + +static struct st_hash_type type_type_cclass_hash = { + type_cclass_cmp, + type_cclass_hash, +}; + +static st_table* OnigTypeCClassTable; + + +static int +i_free_shared_class(type_cclass_key* key, Node* node, void* arg) +{ + if (IS_NOT_NULL(node)) { + CClassNode* cc = &(NCCLASS(node)); + if (IS_NOT_NULL(cc->mbuf)) xfree(cc->mbuf); + xfree(node); + } + + if (IS_NOT_NULL(key)) xfree(key); + return ST_DELETE; +} + +extern int +onig_free_shared_cclass_table(void) +{ + if (IS_NOT_NULL(OnigTypeCClassTable)) { + onig_st_foreach(OnigTypeCClassTable, i_free_shared_class, 0); + onig_st_free_table(OnigTypeCClassTable); + OnigTypeCClassTable = NULL; + } + + return 0; +} + +#endif /* USE_SHARED_CCLASS_TABLE */ + + +static int +parse_exp(Node** np, OnigToken* tok, int term, + UChar** src, UChar* end, ScanEnv* env) +{ + int r, len, group = 0; + Node* qn; + Node** targetp; + + *np = NULL; + if (tok->type == term) + goto end_of_token; + + switch (tok->type) { + case TK_ALT: + case TK_EOT: + end_of_token: + *np = node_new_empty(); + return tok->type; + break; + + case TK_SUBEXP_OPEN: + r = parse_effect(np, tok, TK_SUBEXP_CLOSE, src, end, env); + if (r < 0) return r; + if (r == 1) group = 1; + else if (r == 2) { /* option only */ + Node* target; + OnigOptionType prev = env->option; + + env->option = NEFFECT(*np).option; + r = fetch_token(tok, src, end, env); + if (r < 0) return r; + r = parse_subexp(&target, tok, term, src, end, env); + env->option = prev; + if (r < 0) return r; + NEFFECT(*np).target = target; + return tok->type; + } + break; + + case TK_SUBEXP_CLOSE: + if (! IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP)) + return ONIGERR_UNMATCHED_CLOSE_PARENTHESIS; + + if (tok->escaped) goto tk_raw_byte; + else goto tk_byte; + break; + + case TK_STRING: + tk_byte: + { + *np = node_new_str(tok->backp, *src); + CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY); + + while (1) { + r = fetch_token(tok, src, end, env); + if (r < 0) return r; + if (r != TK_STRING) break; + + r = onig_node_str_cat(*np, tok->backp, *src); + if (r < 0) return r; + } + + string_end: + targetp = np; + goto repeat; + } + break; + + case TK_RAW_BYTE: + tk_raw_byte: + { + *np = node_new_str_char((UChar )tok->u.c); + CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY); + len = 1; + while (1) { + if (len >= ONIGENC_MBC_MINLEN(env->enc)) { + if (len == enc_len(env->enc, NSTRING(*np).s)) { + r = fetch_token(tok, src, end, env); + goto string_end; + } + } + + r = fetch_token(tok, src, end, env); + if (r < 0) return r; + if (r != TK_RAW_BYTE) { +#ifdef USE_PAD_TO_SHORT_BYTE_CHAR + int rem; + if (len < ONIGENC_MBC_MINLEN(env->enc)) { + rem = ONIGENC_MBC_MINLEN(env->enc) - len; + (void )node_str_head_pad(&NSTRING(*np), rem, (UChar )0); + if (len + rem == enc_len(env->enc, NSTRING(*np).s)) { + goto string_end; + } + } +#endif + return ONIGERR_TOO_SHORT_MULTI_BYTE_STRING; + } + + r = node_str_cat_char(*np, (UChar )tok->u.c); + if (r < 0) return r; + + len++; + } + } + break; + + case TK_CODE_POINT: + { + UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN]; + int num = ONIGENC_CODE_TO_MBC(env->enc, tok->u.code, buf); + if (num < 0) return num; +#ifdef NUMBERED_CHAR_IS_NOT_CASE_AMBIG + *np = node_new_str_raw(buf, buf + num); +#else + *np = node_new_str(buf, buf + num); +#endif + CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY); + } + break; + + case TK_QUOTE_OPEN: + { + OnigCodePoint end_op[2]; + UChar *qstart, *qend, *nextp; + + end_op[0] = (OnigCodePoint )MC_ESC(env->enc); + end_op[1] = (OnigCodePoint )'E'; + qstart = *src; + qend = find_str_position(end_op, 2, qstart, end, &nextp, env->enc); + if (IS_NULL(qend)) { + nextp = qend = end; + } + *np = node_new_str(qstart, qend); + CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY); + *src = nextp; + } + break; + + case TK_CHAR_TYPE: + { + switch (tok->u.subtype) { + case CTYPE_WORD: + case CTYPE_NOT_WORD: + *np = node_new_ctype(tok->u.subtype); + CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY); + break; + + case CTYPE_WHITE_SPACE: + case CTYPE_NOT_WHITE_SPACE: + case CTYPE_DIGIT: + case CTYPE_NOT_DIGIT: + case CTYPE_XDIGIT: + case CTYPE_NOT_XDIGIT: + { + CClassNode* cc; + int ctype, not; + +#ifdef USE_SHARED_CCLASS_TABLE + const OnigCodePoint *sbr, *mbr; + + ctype = parse_ctype_to_enc_ctype(tok->u.subtype, ¬); + r = ONIGENC_GET_CTYPE_CODE_RANGE(env->enc, ctype, &sbr, &mbr); + if (r == 0 && + ONIGENC_CODE_RANGE_NUM(mbr) + >= THRESHOLD_RANGE_NUM_FOR_SHARE_CCLASS) { + type_cclass_key key; + type_cclass_key* new_key; + + key.enc = env->enc; + key.not = not; + key.type = ctype; + + THREAD_ATOMIC_START; + + if (IS_NULL(OnigTypeCClassTable)) { + OnigTypeCClassTable + = onig_st_init_table_with_size(&type_type_cclass_hash, 10); + if (IS_NULL(OnigTypeCClassTable)) { + THREAD_ATOMIC_END; + return ONIGERR_MEMORY; + } + } + else { + if (onig_st_lookup(OnigTypeCClassTable, (st_data_t )&key, + (st_data_t* )np)) { + THREAD_ATOMIC_END; + break; + } + } + + *np = node_new_cclass_by_codepoint_range(not, sbr, mbr); + if (IS_NULL(*np)) { + THREAD_ATOMIC_END; + return ONIGERR_MEMORY; + } + + CCLASS_SET_SHARE(&(NCCLASS(*np))); + new_key = (type_cclass_key* )xmalloc(sizeof(type_cclass_key)); + xmemcpy(new_key, &key, sizeof(type_cclass_key)); + onig_st_add_direct(OnigTypeCClassTable, (st_data_t )new_key, + (st_data_t )*np); + + THREAD_ATOMIC_END; + } + else { +#endif + ctype = parse_ctype_to_enc_ctype(tok->u.subtype, ¬); + *np = node_new_cclass(); + CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY); + cc = &(NCCLASS(*np)); + add_ctype_to_cc(cc, ctype, 0, env); + if (not != 0) CCLASS_SET_NOT(cc); +#ifdef USE_SHARED_CCLASS_TABLE + } +#endif + } + break; + + default: + return ONIGERR_PARSER_BUG; + break; + } + } + break; + + case TK_CHAR_PROPERTY: + r = parse_char_property(np, tok, src, end, env); + if (r != 0) return r; + break; + + case TK_CC_OPEN: + { + CClassNode* cc; + + r = parse_char_class(np, tok, src, end, env); + if (r != 0) return r; + + cc = &(NCCLASS(*np)); + + if (IS_IGNORECASE(env->option)) { + int i, n, in_cc; + const OnigPairAmbigCodes* ccs; + BitSetRef bs = cc->bs; + OnigAmbigType amb; + + for (amb = 0x01; amb <= ONIGENC_AMBIGUOUS_MATCH_LIMIT; amb <<= 1) { + if ((amb & env->ambig_flag) == 0) continue; + + n = ONIGENC_GET_ALL_PAIR_AMBIG_CODES(env->enc, amb, &ccs); + for (i = 0; i < n; i++) { + in_cc = onig_is_code_in_cc(env->enc, ccs[i].from, cc); + + if ((in_cc != 0 && !IS_CCLASS_NOT(cc)) || + (in_cc == 0 && IS_CCLASS_NOT(cc))) { + if (ONIGENC_MBC_MINLEN(env->enc) > 1 || + ccs[i].from >= SINGLE_BYTE_SIZE) { + /* if (cc->not) clear_not_flag_cclass(cc, env->enc); */ + add_code_range(&(cc->mbuf), env, ccs[i].to, ccs[i].to); + } + else { + if (BITSET_AT(bs, ccs[i].from)) { + /* /(?i:[^A-C])/.match("a") ==> fail. */ + BITSET_SET_BIT(bs, ccs[i].to); + } + if (BITSET_AT(bs, ccs[i].to)) { + BITSET_SET_BIT(bs, ccs[i].from); + } + } + } + } + } + } + } + break; + + case TK_ANYCHAR: + *np = node_new_anychar(); + CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY); + break; + + case TK_ANYCHAR_ANYTIME: + *np = node_new_anychar(); + CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY); + qn = node_new_quantifier(0, REPEAT_INFINITE, 0); + CHECK_NULL_RETURN_VAL(qn, ONIGERR_MEMORY); + NQUANTIFIER(qn).target = *np; + *np = qn; + break; + + case TK_BACKREF: + len = tok->u.backref.num; + *np = node_new_backref(len, + (len > 1 ? tok->u.backref.refs : &(tok->u.backref.ref1)), + tok->u.backref.by_name, +#ifdef USE_BACKREF_AT_LEVEL + tok->u.backref.exist_level, + tok->u.backref.level, +#endif + env); + CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY); + break; + +#ifdef USE_SUBEXP_CALL + case TK_CALL: + *np = node_new_call(tok->u.call.name, tok->u.call.name_end); + CHECK_NULL_RETURN_VAL(*np, ONIGERR_MEMORY); + env->num_call++; + break; +#endif + + case TK_ANCHOR: + *np = onig_node_new_anchor(tok->u.anchor); + break; + + case TK_OP_REPEAT: + case TK_INTERVAL: + if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS)) { + if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS)) + return ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED; + else + *np = node_new_empty(); + } + else { + goto tk_byte; + } + break; + + default: + return ONIGERR_PARSER_BUG; + break; + } + + { + targetp = np; + + re_entry: + r = fetch_token(tok, src, end, env); + if (r < 0) return r; + + repeat: + if (r == TK_OP_REPEAT || r == TK_INTERVAL) { + if (is_invalid_quantifier_target(*targetp)) + return ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID; + + qn = node_new_quantifier(tok->u.repeat.lower, tok->u.repeat.upper, + (r == TK_INTERVAL ? 1 : 0)); + CHECK_NULL_RETURN_VAL(qn, ONIGERR_MEMORY); + NQUANTIFIER(qn).greedy = tok->u.repeat.greedy; + r = set_quantifier(qn, *targetp, group, env); + if (r < 0) return r; + + if (tok->u.repeat.possessive != 0) { + Node* en; + en = node_new_effect(EFFECT_STOP_BACKTRACK); + CHECK_NULL_RETURN_VAL(en, ONIGERR_MEMORY); + NEFFECT(en).target = qn; + qn = en; + } + + if (r == 0) { + *targetp = qn; + } + else if (r == 2) { /* split case: /abc+/ */ + Node *tmp; + + *targetp = node_new_list(*targetp, NULL); + CHECK_NULL_RETURN_VAL(*targetp, ONIGERR_MEMORY); + tmp = NCONS(*targetp).right = node_new_list(qn, NULL); + CHECK_NULL_RETURN_VAL(tmp, ONIGERR_MEMORY); + targetp = &(NCONS(tmp).left); + } + goto re_entry; + } + } + + return r; +} + +static int +parse_branch(Node** top, OnigToken* tok, int term, + UChar** src, UChar* end, ScanEnv* env) +{ + int r; + Node *node, **headp; + + *top = NULL; + r = parse_exp(&node, tok, term, src, end, env); + if (r < 0) return r; + + if (r == TK_EOT || r == term || r == TK_ALT) { + *top = node; + } + else { + *top = node_new_list(node, NULL); + headp = &(NCONS(*top).right); + while (r != TK_EOT && r != term && r != TK_ALT) { + r = parse_exp(&node, tok, term, src, end, env); + if (r < 0) return r; + + if (NTYPE(node) == N_LIST) { + *headp = node; + while (IS_NOT_NULL(NCONS(node).right)) node = NCONS(node).right; + headp = &(NCONS(node).right); + } + else { + *headp = node_new_list(node, NULL); + headp = &(NCONS(*headp).right); + } + } + } + + return r; +} + +/* term_tok: TK_EOT or TK_SUBEXP_CLOSE */ +static int +parse_subexp(Node** top, OnigToken* tok, int term, + UChar** src, UChar* end, ScanEnv* env) +{ + int r; + Node *node, **headp; + + *top = NULL; + r = parse_branch(&node, tok, term, src, end, env); + if (r < 0) { + onig_node_free(node); + return r; + } + + if (r == term) { + *top = node; + } + else if (r == TK_ALT) { + *top = node_new_alt(node, NULL); + headp = &(NCONS(*top).right); + while (r == TK_ALT) { + r = fetch_token(tok, src, end, env); + if (r < 0) return r; + r = parse_branch(&node, tok, term, src, end, env); + if (r < 0) return r; + + *headp = node_new_alt(node, NULL); + headp = &(NCONS(*headp).right); + } + + if (tok->type != term) + goto err; + } + else { + err: + if (term == TK_SUBEXP_CLOSE) + return ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS; + else + return ONIGERR_PARSER_BUG; + } + + return r; +} + +static int +parse_regexp(Node** top, UChar** src, UChar* end, ScanEnv* env) +{ + int r; + OnigToken tok; + + r = fetch_token(&tok, src, end, env); + if (r < 0) return r; + r = parse_subexp(top, &tok, TK_EOT, src, end, env); + if (r < 0) return r; + return 0; +} + +extern int +onig_parse_make_tree(Node** root, const UChar* pattern, const UChar* end, regex_t* reg, + ScanEnv* env) +{ + int r; + UChar* p; + +#ifdef USE_NAMED_GROUP + names_clear(reg); +#endif + + scan_env_clear(env); + env->option = reg->options; + env->ambig_flag = reg->ambig_flag; + env->enc = reg->enc; + env->syntax = reg->syntax; + env->pattern = (UChar* )pattern; + env->pattern_end = (UChar* )end; + env->reg = reg; + + *root = NULL; + p = (UChar* )pattern; + r = parse_regexp(root, &p, (UChar* )end, env); + reg->num_mem = env->num_mem; + return r; +} + +extern void +onig_scan_env_set_error_string(ScanEnv* env, int ecode, + UChar* arg, UChar* arg_end) +{ + env->error = arg; + env->error_end = arg_end; +} diff --git a/ext/mbstring/oniguruma/regparse.h b/ext/mbstring/oniguruma/regparse.h new file mode 100644 index 0000000..b25618a --- /dev/null +++ b/ext/mbstring/oniguruma/regparse.h @@ -0,0 +1,328 @@ +#ifndef REGPARSE_H +#define REGPARSE_H +/********************************************************************** + regparse.h - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2007 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regint.h" + +/* node type */ +#define N_STRING (1<< 0) +#define N_CCLASS (1<< 1) +#define N_CTYPE (1<< 2) +#define N_ANYCHAR (1<< 3) +#define N_BACKREF (1<< 4) +#define N_QUANTIFIER (1<< 5) +#define N_EFFECT (1<< 6) +#define N_ANCHOR (1<< 7) +#define N_LIST (1<< 8) +#define N_ALT (1<< 9) +#define N_CALL (1<<10) + +#define IS_NODE_TYPE_SIMPLE(type) \ + (((type) & (N_STRING | N_CCLASS | N_CTYPE | N_ANYCHAR | N_BACKREF)) != 0) + +#define NTYPE(node) ((node)->type) +#define NCONS(node) ((node)->u.cons) +#define NSTRING(node) ((node)->u.str) +#define NCCLASS(node) ((node)->u.cclass) +#define NCTYPE(node) ((node)->u.ctype) +#define NQUANTIFIER(node) ((node)->u.quantifier) +#define NANCHOR(node) ((node)->u.anchor) +#define NBACKREF(node) ((node)->u.backref) +#define NEFFECT(node) ((node)->u.effect) +#define NCALL(node) ((node)->u.call) + +#define CTYPE_WORD (1<<0) +#define CTYPE_NOT_WORD (1<<1) +#define CTYPE_WHITE_SPACE (1<<2) +#define CTYPE_NOT_WHITE_SPACE (1<<3) +#define CTYPE_DIGIT (1<<4) +#define CTYPE_NOT_DIGIT (1<<5) +#define CTYPE_XDIGIT (1<<6) +#define CTYPE_NOT_XDIGIT (1<<7) + +#define ANCHOR_ANYCHAR_STAR_MASK (ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_ML) +#define ANCHOR_END_BUF_MASK (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF) + +#define EFFECT_MEMORY (1<<0) +#define EFFECT_OPTION (1<<1) +#define EFFECT_STOP_BACKTRACK (1<<2) + +#define NODE_STR_MARGIN 16 +#define NODE_STR_BUF_SIZE 24 /* sizeof(CClassNode) - sizeof(int)*4 */ +#define NODE_BACKREFS_SIZE 6 + +#define NSTR_RAW (1<<0) /* by backslashed number */ +#define NSTR_AMBIG (1<<1) +#define NSTR_AMBIG_REDUCE (1<<2) + +#define NSTRING_LEN(node) ((node)->u.str.end - (node)->u.str.s) +#define NSTRING_SET_RAW(node) (node)->u.str.flag |= NSTR_RAW +#define NSTRING_CLEAR_RAW(node) (node)->u.str.flag &= ~NSTR_RAW +#define NSTRING_SET_AMBIG(node) (node)->u.str.flag |= NSTR_AMBIG +#define NSTRING_SET_AMBIG_REDUCE(node) (node)->u.str.flag |= NSTR_AMBIG_REDUCE +#define NSTRING_IS_RAW(node) (((node)->u.str.flag & NSTR_RAW) != 0) +#define NSTRING_IS_AMBIG(node) (((node)->u.str.flag & NSTR_AMBIG) != 0) +#define NSTRING_IS_AMBIG_REDUCE(node) \ + (((node)->u.str.flag & NSTR_AMBIG_REDUCE) != 0) + +#define BACKREFS_P(br) \ + (IS_NOT_NULL((br)->back_dynamic) ? (br)->back_dynamic : (br)->back_static); + +#define NQ_TARGET_ISNOT_EMPTY 0 +#define NQ_TARGET_IS_EMPTY 1 +#define NQ_TARGET_IS_EMPTY_MEM 2 +#define NQ_TARGET_IS_EMPTY_REC 3 + + +typedef struct { + UChar* s; + UChar* end; + unsigned int flag; + int capa; /* (allocated size - 1) or 0: use buf[] */ + UChar buf[NODE_STR_BUF_SIZE]; +} StrNode; + +/* move to regint.h */ +#if 0 +typedef struct { + int flags; + BitSet bs; + BBuf* mbuf; /* multi-byte info or NULL */ +} CClassNode; +#endif + +typedef struct { + int state; + struct _Node* target; + int lower; + int upper; + int greedy; + int target_empty_info; + struct _Node* head_exact; + struct _Node* next_head_exact; + int is_refered; /* include called node. don't eliminate even if {0} */ +#ifdef USE_COMBINATION_EXPLOSION_CHECK + int comb_exp_check_num; /* 1,2,3...: check, 0: no check */ +#endif +} QuantifierNode; + +/* status bits */ +#define NST_MIN_FIXED (1<<0) +#define NST_MAX_FIXED (1<<1) +#define NST_CLEN_FIXED (1<<2) +#define NST_MARK1 (1<<3) +#define NST_MARK2 (1<<4) +#define NST_MEM_BACKREFED (1<<5) +#define NST_STOP_BT_SIMPLE_REPEAT (1<<6) +#define NST_RECURSION (1<<7) +#define NST_CALLED (1<<8) +#define NST_ADDR_FIXED (1<<9) +#define NST_NAMED_GROUP (1<<10) +#define NST_NAME_REF (1<<11) +#define NST_IN_REPEAT (1<<12) /* STK_REPEAT is nested in stack. */ +#define NST_NEST_LEVEL (1<<13) +#define NST_BY_NUMBER (1<<14) /* {n,m} */ + +#define SET_EFFECT_STATUS(node,f) (node)->u.effect.state |= (f) +#define CLEAR_EFFECT_STATUS(node,f) (node)->u.effect.state &= ~(f) + +#define IS_EFFECT_CALLED(en) (((en)->state & NST_CALLED) != 0) +#define IS_EFFECT_ADDR_FIXED(en) (((en)->state & NST_ADDR_FIXED) != 0) +#define IS_EFFECT_RECURSION(en) (((en)->state & NST_RECURSION) != 0) +#define IS_EFFECT_MARK1(en) (((en)->state & NST_MARK1) != 0) +#define IS_EFFECT_MARK2(en) (((en)->state & NST_MARK2) != 0) +#define IS_EFFECT_MIN_FIXED(en) (((en)->state & NST_MIN_FIXED) != 0) +#define IS_EFFECT_MAX_FIXED(en) (((en)->state & NST_MAX_FIXED) != 0) +#define IS_EFFECT_CLEN_FIXED(en) (((en)->state & NST_CLEN_FIXED) != 0) +#define IS_EFFECT_STOP_BT_SIMPLE_REPEAT(en) \ + (((en)->state & NST_STOP_BT_SIMPLE_REPEAT) != 0) +#define IS_EFFECT_NAMED_GROUP(en) (((en)->state & NST_NAMED_GROUP) != 0) + +#define SET_CALL_RECURSION(node) (node)->u.call.state |= NST_RECURSION +#define IS_CALL_RECURSION(cn) (((cn)->state & NST_RECURSION) != 0) +#define IS_CALL_NAME_REF(cn) (((cn)->state & NST_NAME_REF) != 0) +#define IS_BACKREF_NAME_REF(bn) (((bn)->state & NST_NAME_REF) != 0) +#define IS_BACKREF_NEST_LEVEL(bn) (((bn)->state & NST_NEST_LEVEL) != 0) +#define IS_QUANTIFIER_IN_REPEAT(qn) (((qn)->state & NST_IN_REPEAT) != 0) +#define IS_QUANTIFIER_BY_NUMBER(qn) (((qn)->state & NST_BY_NUMBER) != 0) + +typedef struct { + int state; + int type; + int regnum; + OnigOptionType option; + struct _Node* target; + AbsAddrType call_addr; + /* for multiple call reference */ + OnigDistance min_len; /* min length (byte) */ + OnigDistance max_len; /* max length (byte) */ + int char_len; /* character length */ + int opt_count; /* referenced count in optimize_node_left() */ +} EffectNode; + +#define CALLNODE_REFNUM_UNDEF -1 + +#ifdef USE_SUBEXP_CALL + +typedef struct { + int offset; + struct _Node* target; +} UnsetAddr; + +typedef struct { + int num; + int alloc; + UnsetAddr* us; +} UnsetAddrList; + +typedef struct { + int state; + int ref_num; + UChar* name; + UChar* name_end; + struct _Node* target; /* EffectNode : EFFECT_MEMORY */ + UnsetAddrList* unset_addr_list; +} CallNode; + +#endif + +typedef struct { + int state; + int back_num; + int back_static[NODE_BACKREFS_SIZE]; + int* back_dynamic; + int nest_level; +} BackrefNode; + +typedef struct { + int type; + struct _Node* target; + int char_len; +} AnchorNode; + +typedef struct _Node { + int type; + union { + StrNode str; + CClassNode cclass; + QuantifierNode quantifier; + EffectNode effect; +#ifdef USE_SUBEXP_CALL + CallNode call; +#endif + BackrefNode backref; + AnchorNode anchor; + struct { + struct _Node* left; + struct _Node* right; + } cons; + struct { + int type; + } ctype; + } u; +} Node; + +#define NULL_NODE ((Node* )0) + +#define SCANENV_MEMNODES_SIZE 8 +#define SCANENV_MEM_NODES(senv) \ + (IS_NOT_NULL((senv)->mem_nodes_dynamic) ? \ + (senv)->mem_nodes_dynamic : (senv)->mem_nodes_static) + +typedef struct { + OnigOptionType option; + OnigAmbigType ambig_flag; + OnigEncoding enc; + OnigSyntaxType* syntax; + BitStatusType capture_history; + BitStatusType bt_mem_start; + BitStatusType bt_mem_end; + BitStatusType backrefed_mem; + UChar* pattern; + UChar* pattern_end; + UChar* error; + UChar* error_end; + regex_t* reg; /* for reg->names only */ + int num_call; +#ifdef USE_SUBEXP_CALL + UnsetAddrList* unset_addr_list; +#endif + int num_mem; +#ifdef USE_NAMED_GROUP + int num_named; +#endif + int mem_alloc; + Node* mem_nodes_static[SCANENV_MEMNODES_SIZE]; + Node** mem_nodes_dynamic; +#ifdef USE_COMBINATION_EXPLOSION_CHECK + int num_comb_exp_check; + int comb_exp_max_regnum; + int curr_max_regnum; + int has_recursion; +#endif +} ScanEnv; + + +#define IS_SYNTAX_OP(syn, opm) (((syn)->op & (opm)) != 0) +#define IS_SYNTAX_OP2(syn, opm) (((syn)->op2 & (opm)) != 0) +#define IS_SYNTAX_BV(syn, bvm) (((syn)->behavior & (bvm)) != 0) + + +#ifdef USE_NAMED_GROUP +typedef struct { + int new_val; +} GroupNumRemap; + +extern int onig_renumber_name_table P_((regex_t* reg, GroupNumRemap* map)); +#endif + +extern int onig_strncmp P_((const UChar* s1, const UChar* s2, int n)); +extern void onig_scan_env_set_error_string P_((ScanEnv* env, int ecode, UChar* arg, UChar* arg_end)); +extern int onig_scan_unsigned_number P_((UChar** src, const UChar* end, OnigEncoding enc)); +extern void onig_reduce_nested_quantifier P_((Node* pnode, Node* cnode)); +extern void onig_node_conv_to_str_node P_((Node* node, int raw)); +extern int onig_node_str_cat P_((Node* node, const UChar* s, const UChar* end)); +extern void onig_node_free P_((Node* node)); +extern Node* onig_node_new_effect P_((int type)); +extern Node* onig_node_new_anchor P_((int type)); +extern Node* onig_node_new_str P_((const UChar* s, const UChar* end)); +extern Node* onig_node_new_list P_((Node* left, Node* right)); +extern void onig_node_str_clear P_((Node* node)); +extern int onig_free_node_list P_((void)); +extern int onig_names_free P_((regex_t* reg)); +extern int onig_parse_make_tree P_((Node** root, const UChar* pattern, const UChar* end, regex_t* reg, ScanEnv* env)); + +#ifdef ONIG_DEBUG +#ifdef USE_NAMED_GROUP +extern int onig_print_names(FILE*, regex_t*); +#endif +#endif + +#endif /* REGPARSE_H */ diff --git a/ext/mbstring/oniguruma/regposerr.c b/ext/mbstring/oniguruma/regposerr.c new file mode 100644 index 0000000..e54b5c4 --- /dev/null +++ b/ext/mbstring/oniguruma/regposerr.c @@ -0,0 +1,90 @@ +/********************************************************************** + regposerr.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2005 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "config.h" +#include "onigposix.h" + +#ifdef HAVE_STRING_H +# include <string.h> +#else +# include <strings.h> +#endif + +static char* ESTRING[] = { + NULL, + "failed to match", /* REG_NOMATCH */ + "Invalid regular expression", /* REG_BADPAT */ + "invalid collating element referenced", /* REG_ECOLLATE */ + "invalid character class type referenced", /* REG_ECTYPE */ + "bad backslash-escape sequence", /* REG_EESCAPE */ + "invalid back reference number", /* REG_ESUBREG */ + "imbalanced [ and ]", /* REG_EBRACK */ + "imbalanced ( and )", /* REG_EPAREN */ + "imbalanced { and }", /* REG_EBRACE */ + "invalid repeat range {n,m}", /* REG_BADBR */ + "invalid range", /* REG_ERANGE */ + "Out of memory", /* REG_ESPACE */ + "? * + not preceded by valid regular expression", /* REG_BADRPT */ + + /* Extended errors */ + "internal error", /* REG_EONIG_INTERNAL */ + "invalid wide char value", /* REG_EONIG_BADWC */ + "invalid argument", /* REG_EONIG_BADARG */ + "multi-thread error" /* REG_EONIG_THREAD */ +}; + +#include <stdio.h> + + +extern size_t +regerror(int posix_ecode, const regex_t* reg, char* buf, size_t size) +{ + char* s; + char tbuf[35]; + size_t len; + + if (posix_ecode > 0 && posix_ecode < sizeof(ESTRING) / sizeof(ESTRING[0])) { + s = ESTRING[posix_ecode]; + } + else if (posix_ecode == 0) { + s = ""; + } + else { + sprintf(tbuf, "undefined error code (%d)", posix_ecode); + s = tbuf; + } + + len = strlen(s) + 1; /* use strlen() because s is ascii encoding. */ + + if (buf != NULL && size > 0) { + strncpy(buf, s, size - 1); + buf[size - 1] = '\0'; + } + return len; +} diff --git a/ext/mbstring/oniguruma/regposix.c b/ext/mbstring/oniguruma/regposix.c new file mode 100644 index 0000000..a3bacf7 --- /dev/null +++ b/ext/mbstring/oniguruma/regposix.c @@ -0,0 +1,303 @@ +/********************************************************************** + regposix.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + */ + +#define regex_t onig_regex_t +#include "regint.h" +#undef regex_t +#include "onigposix.h" + +#define ONIG_C(reg) ((onig_regex_t* )((reg)->onig)) +#define PONIG_C(reg) ((onig_regex_t** )(&(reg)->onig)) + +/* #define ENC_STRING_LEN(enc,s,len) len = strlen(s) */ +#define ENC_STRING_LEN(enc,s,len) do { \ + if (ONIGENC_MBC_MINLEN(enc) == 1) { \ + UChar* tmps = (UChar* )(s); \ + while (*tmps != 0) tmps++; \ + len = tmps - (UChar* )(s); \ + } \ + else { \ + len = onigenc_str_bytelen_null(enc, (UChar* )s); \ + } \ +} while(0) + +typedef struct { + int onig_err; + int posix_err; +} O2PERR; + +static int +onig2posix_error_code(int code) +{ + static const O2PERR o2p[] = { + { ONIG_MISMATCH, REG_NOMATCH }, + { ONIG_NO_SUPPORT_CONFIG, REG_EONIG_INTERNAL }, + { ONIGERR_MEMORY, REG_ESPACE }, + { ONIGERR_MATCH_STACK_LIMIT_OVER, REG_EONIG_INTERNAL }, + { ONIGERR_TYPE_BUG, REG_EONIG_INTERNAL }, + { ONIGERR_PARSER_BUG, REG_EONIG_INTERNAL }, + { ONIGERR_STACK_BUG, REG_EONIG_INTERNAL }, + { ONIGERR_UNDEFINED_BYTECODE, REG_EONIG_INTERNAL }, + { ONIGERR_UNEXPECTED_BYTECODE, REG_EONIG_INTERNAL }, + { ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED, REG_EONIG_BADARG }, + { ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR, REG_EONIG_BADARG }, + { ONIGERR_INVALID_ARGUMENT, REG_EONIG_BADARG }, + { ONIGERR_END_PATTERN_AT_LEFT_BRACE, REG_EBRACE }, + { ONIGERR_END_PATTERN_AT_LEFT_BRACKET, REG_EBRACK }, + { ONIGERR_EMPTY_CHAR_CLASS, REG_ECTYPE }, + { ONIGERR_PREMATURE_END_OF_CHAR_CLASS, REG_ECTYPE }, + { ONIGERR_END_PATTERN_AT_ESCAPE, REG_EESCAPE }, + { ONIGERR_END_PATTERN_AT_META, REG_EESCAPE }, + { ONIGERR_END_PATTERN_AT_CONTROL, REG_EESCAPE }, + { ONIGERR_META_CODE_SYNTAX, REG_BADPAT }, + { ONIGERR_CONTROL_CODE_SYNTAX, REG_BADPAT }, + { ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE, REG_ECTYPE }, + { ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE, REG_ECTYPE }, + { ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS, REG_ECTYPE }, + { ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED, REG_BADRPT }, + { ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID, REG_BADRPT }, + { ONIGERR_NESTED_REPEAT_OPERATOR, REG_BADRPT }, + { ONIGERR_UNMATCHED_CLOSE_PARENTHESIS, REG_EPAREN }, + { ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS, REG_EPAREN }, + { ONIGERR_END_PATTERN_IN_GROUP, REG_BADPAT }, + { ONIGERR_UNDEFINED_GROUP_OPTION, REG_BADPAT }, + { ONIGERR_INVALID_POSIX_BRACKET_TYPE, REG_BADPAT }, + { ONIGERR_INVALID_LOOK_BEHIND_PATTERN, REG_BADPAT }, + { ONIGERR_INVALID_REPEAT_RANGE_PATTERN, REG_BADPAT }, + { ONIGERR_TOO_BIG_NUMBER, REG_BADPAT }, + { ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE, REG_BADBR }, + { ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE, REG_BADBR }, + { ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS, REG_ECTYPE }, + { ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE, REG_ECTYPE }, + { ONIGERR_TOO_MANY_MULTI_BYTE_RANGES, REG_ECTYPE }, + { ONIGERR_TOO_SHORT_MULTI_BYTE_STRING, REG_BADPAT }, + { ONIGERR_TOO_BIG_BACKREF_NUMBER, REG_ESUBREG }, + { ONIGERR_INVALID_BACKREF, REG_ESUBREG }, + { ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED, REG_BADPAT }, + { ONIGERR_TOO_BIG_WIDE_CHAR_VALUE, REG_EONIG_BADWC }, + { ONIGERR_TOO_LONG_WIDE_CHAR_VALUE, REG_EONIG_BADWC }, + { ONIGERR_INVALID_WIDE_CHAR_VALUE, REG_EONIG_BADWC }, + { ONIGERR_EMPTY_GROUP_NAME, REG_BADPAT }, + { ONIGERR_INVALID_GROUP_NAME, REG_BADPAT }, + { ONIGERR_INVALID_CHAR_IN_GROUP_NAME, REG_BADPAT }, + { ONIGERR_UNDEFINED_NAME_REFERENCE, REG_BADPAT }, + { ONIGERR_UNDEFINED_GROUP_REFERENCE, REG_BADPAT }, + { ONIGERR_MULTIPLEX_DEFINED_NAME, REG_BADPAT }, + { ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL, REG_BADPAT }, + { ONIGERR_NEVER_ENDING_RECURSION, REG_BADPAT }, + { ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY, REG_BADPAT }, + { ONIGERR_INVALID_CHAR_PROPERTY_NAME, REG_BADPAT }, + { ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION, REG_EONIG_BADARG }, + { ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT, REG_EONIG_THREAD } + + }; + + int i; + + if (code >= 0) return 0; + + for (i = 0; i < sizeof(o2p) / sizeof(o2p[0]); i++) { + if (code == o2p[i].onig_err) + return o2p[i].posix_err; + } + + return REG_EONIG_INTERNAL; /* but, unknown error code */ +} + +extern int +regcomp(regex_t* reg, const char* pattern, int posix_options) +{ + int r, len; + OnigSyntaxType* syntax = OnigDefaultSyntax; + OnigOptionType options; + + if ((posix_options & REG_EXTENDED) == 0) + syntax = ONIG_SYNTAX_POSIX_BASIC; + + options = syntax->options; + if ((posix_options & REG_ICASE) != 0) + ONIG_OPTION_ON(options, ONIG_OPTION_IGNORECASE); + if ((posix_options & REG_NEWLINE) != 0) { + ONIG_OPTION_ON( options, ONIG_OPTION_NEGATE_SINGLELINE); + ONIG_OPTION_OFF(options, ONIG_OPTION_SINGLELINE); + } + + reg->comp_options = posix_options; + + ENC_STRING_LEN(OnigEncDefaultCharEncoding, pattern, len); + r = onig_new(PONIG_C(reg), (UChar* )pattern, (UChar* )(pattern + len), + options, OnigEncDefaultCharEncoding, syntax, + (OnigErrorInfo* )NULL); + if (r != ONIG_NORMAL) { + return onig2posix_error_code(r); + } + + reg->re_nsub = ONIG_C(reg)->num_mem; + return 0; +} + +extern int +regexec(regex_t* reg, const char* str, size_t nmatch, + regmatch_t pmatch[], int posix_options) +{ + int r, i, len; + UChar* end; + regmatch_t* pm; + OnigOptionType options; + + options = ONIG_OPTION_POSIX_REGION; + if ((posix_options & REG_NOTBOL) != 0) options |= ONIG_OPTION_NOTBOL; + if ((posix_options & REG_NOTEOL) != 0) options |= ONIG_OPTION_NOTEOL; + + if (nmatch == 0 || (reg->comp_options & REG_NOSUB) != 0) { + pm = (regmatch_t* )NULL; + nmatch = 0; + } + else if ((int )nmatch < ONIG_C(reg)->num_mem + 1) { + pm = (regmatch_t* )xmalloc(sizeof(regmatch_t) + * (ONIG_C(reg)->num_mem + 1)); + if (pm == NULL) + return REG_ESPACE; + } + else { + pm = pmatch; + } + + ENC_STRING_LEN(ONIG_C(reg)->enc, str, len); + end = (UChar* )(str + len); + r = onig_search(ONIG_C(reg), (UChar* )str, end, (UChar* )str, end, + (OnigRegion* )pm, options); + + if (r >= 0) { + r = 0; /* Match */ + if (pm != pmatch && pm != NULL) { + xmemcpy(pmatch, pm, sizeof(regmatch_t) * nmatch); + } + } + else if (r == ONIG_MISMATCH) { + r = REG_NOMATCH; + for (i = 0; i < (int )nmatch; i++) + pmatch[i].rm_so = pmatch[i].rm_eo = ONIG_REGION_NOTPOS; + } + else { + r = onig2posix_error_code(r); + } + + if (pm != pmatch && pm != NULL) + xfree(pm); + +#if 0 + if (reg->re_nsub > nmatch - 1) + reg->re_nsub = (nmatch <= 1 ? 0 : nmatch - 1); +#endif + + return r; +} + +extern void +regfree(regex_t* reg) +{ + onig_free(ONIG_C(reg)); +} + + +extern void +reg_set_encoding(int mb_code) +{ + OnigEncoding enc; + + switch (mb_code) { + case REG_POSIX_ENCODING_ASCII: + enc = ONIG_ENCODING_ASCII; + break; + case REG_POSIX_ENCODING_EUC_JP: + enc = ONIG_ENCODING_EUC_JP; + break; + case REG_POSIX_ENCODING_SJIS: + enc = ONIG_ENCODING_SJIS; + break; + case REG_POSIX_ENCODING_UTF8: + enc = ONIG_ENCODING_UTF8; + break; + case REG_POSIX_ENCODING_UTF16_BE: + enc = ONIG_ENCODING_UTF16_BE; + break; + case REG_POSIX_ENCODING_UTF16_LE: + enc = ONIG_ENCODING_UTF16_LE; + break; + + default: + return ; + break; + } + + onigenc_set_default_encoding(enc); +} + +extern int +reg_name_to_group_numbers(regex_t* reg, + const unsigned char* name, const unsigned char* name_end, int** nums) +{ + return onig_name_to_group_numbers(ONIG_C(reg), name, name_end, nums); +} + +typedef struct { + int (*func)(const unsigned char*, const unsigned char*,int,int*,regex_t*,void*); + regex_t* reg; + void* arg; +} i_wrap; + +static int i_wrapper(const unsigned char* name, const unsigned char* name_end, + int ng, int* gs, + onig_regex_t* reg, void* arg) +{ + i_wrap* warg = (i_wrap* )arg; + + return (*warg->func)(name, name_end, ng, gs, warg->reg, warg->arg); +} + +extern int +reg_foreach_name(regex_t* reg, + int (*func)(const unsigned char*, const unsigned char*,int,int*,regex_t*,void*), + void* arg) +{ + i_wrap warg; + + warg.func = func; + warg.reg = reg; + warg.arg = arg; + + return onig_foreach_name(ONIG_C(reg), i_wrapper, &warg); +} + +extern int +reg_number_of_names(regex_t* reg) +{ + return onig_number_of_names(ONIG_C(reg)); +} diff --git a/ext/mbstring/oniguruma/regsyntax.c b/ext/mbstring/oniguruma/regsyntax.c new file mode 100644 index 0000000..9114e39 --- /dev/null +++ b/ext/mbstring/oniguruma/regsyntax.c @@ -0,0 +1,236 @@ +/********************************************************************** + regsyntax.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regint.h" + +OnigSyntaxType OnigSyntaxASIS = { + 0 + , ONIG_SYN_OP2_INEFFECTIVE_ESCAPE + , 0 + , ONIG_OPTION_NONE +}; + +OnigSyntaxType OnigSyntaxPosixBasic = { + ( SYN_POSIX_COMMON_OP | ONIG_SYN_OP_ESC_LPAREN_SUBEXP | + ONIG_SYN_OP_ESC_BRACE_INTERVAL ) + , 0 + , 0 + , ( ONIG_OPTION_SINGLELINE | ONIG_OPTION_MULTILINE ) +}; + +OnigSyntaxType OnigSyntaxPosixExtended = { + ( SYN_POSIX_COMMON_OP | ONIG_SYN_OP_LPAREN_SUBEXP | + ONIG_SYN_OP_BRACE_INTERVAL | + ONIG_SYN_OP_PLUS_ONE_INF | ONIG_SYN_OP_QMARK_ZERO_ONE | ONIG_SYN_OP_VBAR_ALT ) + , 0 + , ( ONIG_SYN_CONTEXT_INDEP_ANCHORS | + ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS | ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS | + ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP | + ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC ) + , ( ONIG_OPTION_SINGLELINE | ONIG_OPTION_MULTILINE ) +}; + +OnigSyntaxType OnigSyntaxEmacs = { + ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_BRACKET_CC | + ONIG_SYN_OP_ESC_BRACE_INTERVAL | + ONIG_SYN_OP_ESC_LPAREN_SUBEXP | ONIG_SYN_OP_ESC_VBAR_ALT | + ONIG_SYN_OP_ASTERISK_ZERO_INF | ONIG_SYN_OP_PLUS_ONE_INF | + ONIG_SYN_OP_QMARK_ZERO_ONE | ONIG_SYN_OP_DECIMAL_BACKREF | + ONIG_SYN_OP_LINE_ANCHOR | ONIG_SYN_OP_ESC_CONTROL_CHARS ) + , ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR + , ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC + , ONIG_OPTION_NONE +}; + +OnigSyntaxType OnigSyntaxGrep = { + ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_BRACKET_CC | ONIG_SYN_OP_POSIX_BRACKET | + ONIG_SYN_OP_ESC_BRACE_INTERVAL | ONIG_SYN_OP_ESC_LPAREN_SUBEXP | + ONIG_SYN_OP_ESC_VBAR_ALT | + ONIG_SYN_OP_ASTERISK_ZERO_INF | ONIG_SYN_OP_ESC_PLUS_ONE_INF | + ONIG_SYN_OP_ESC_QMARK_ZERO_ONE | ONIG_SYN_OP_LINE_ANCHOR | + ONIG_SYN_OP_ESC_W_WORD | ONIG_SYN_OP_ESC_B_WORD_BOUND | + ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END | ONIG_SYN_OP_DECIMAL_BACKREF ) + , 0 + , ( ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC | ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC ) + , ONIG_OPTION_NONE +}; + +OnigSyntaxType OnigSyntaxGnuRegex = { + SYN_GNU_REGEX_OP + , 0 + , SYN_GNU_REGEX_BV + , ONIG_OPTION_NONE +}; + +OnigSyntaxType OnigSyntaxJava = { + (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY | + ONIG_SYN_OP_ESC_CONTROL_CHARS | ONIG_SYN_OP_ESC_C_CONTROL | + ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 ) + & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END ) + , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE | ONIG_SYN_OP2_QMARK_GROUP_EFFECT | + ONIG_SYN_OP2_OPTION_PERL | ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT | + ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL | ONIG_SYN_OP2_CCLASS_SET_OP | + ONIG_SYN_OP2_ESC_V_VTAB | ONIG_SYN_OP2_ESC_U_HEX4 | + ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY ) + , ( SYN_GNU_REGEX_BV | ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND ) + , ONIG_OPTION_SINGLELINE +}; + +OnigSyntaxType OnigSyntaxPerl = { + (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY | + ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 | + ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS | + ONIG_SYN_OP_ESC_C_CONTROL ) + & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END ) + , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE | + ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL | + ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY | + ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT | + ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS ) + , SYN_GNU_REGEX_BV + , ONIG_OPTION_SINGLELINE +}; + +/* Perl + named group */ +OnigSyntaxType OnigSyntaxPerl_NG = { + (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY | + ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 | + ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS | + ONIG_SYN_OP_ESC_C_CONTROL ) + & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END ) + , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE | + ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL | + ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY | + ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT | + ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS | + ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP | + ONIG_SYN_OP2_ESC_K_NAMED_BACKREF | + ONIG_SYN_OP2_ESC_G_SUBEXP_CALL ) + , ( SYN_GNU_REGEX_BV | + ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP | + ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME ) + , ONIG_OPTION_SINGLELINE +}; + + + +extern int +onig_set_default_syntax(OnigSyntaxType* syntax) +{ + if (IS_NULL(syntax)) + syntax = ONIG_SYNTAX_RUBY; + + OnigDefaultSyntax = syntax; + return 0; +} + +extern void +onig_copy_syntax(OnigSyntaxType* to, OnigSyntaxType* from) +{ + *to = *from; +} + +extern void +onig_set_syntax_op(OnigSyntaxType* syntax, unsigned int op) +{ + syntax->op = op; +} + +extern void +onig_set_syntax_op2(OnigSyntaxType* syntax, unsigned int op2) +{ + syntax->op2 = op2; +} + +extern void +onig_set_syntax_behavior(OnigSyntaxType* syntax, unsigned int behavior) +{ + syntax->behavior = behavior; +} + +extern void +onig_set_syntax_options(OnigSyntaxType* syntax, OnigOptionType options) +{ + syntax->options = options; +} + +extern unsigned int +onig_get_syntax_op(OnigSyntaxType* syntax) +{ + return syntax->op; +} + +extern unsigned int +onig_get_syntax_op2(OnigSyntaxType* syntax) +{ + return syntax->op2; +} + +extern unsigned int +onig_get_syntax_behavior(OnigSyntaxType* syntax) +{ + return syntax->behavior; +} + +extern OnigOptionType +onig_get_syntax_options(OnigSyntaxType* syntax) +{ + return syntax->options; +} + +#ifdef USE_VARIABLE_META_CHARS +extern int onig_set_meta_char(OnigEncoding enc, + unsigned int what, OnigCodePoint code) +{ + switch (what) { + case ONIG_META_CHAR_ESCAPE: + enc->meta_char_table.esc = code; + break; + case ONIG_META_CHAR_ANYCHAR: + enc->meta_char_table.anychar = code; + break; + case ONIG_META_CHAR_ANYTIME: + enc->meta_char_table.anytime = code; + break; + case ONIG_META_CHAR_ZERO_OR_ONE_TIME: + enc->meta_char_table.zero_or_one_time = code; + break; + case ONIG_META_CHAR_ONE_OR_MORE_TIME: + enc->meta_char_table.one_or_more_time = code; + break; + case ONIG_META_CHAR_ANYCHAR_ANYTIME: + enc->meta_char_table.anychar_anytime = code; + break; + default: + return ONIGERR_INVALID_ARGUMENT; + break; + } + return 0; +} +#endif /* USE_VARIABLE_META_CHARS */ diff --git a/ext/mbstring/oniguruma/regtrav.c b/ext/mbstring/oniguruma/regtrav.c new file mode 100644 index 0000000..58a17f5 --- /dev/null +++ b/ext/mbstring/oniguruma/regtrav.c @@ -0,0 +1,76 @@ +/********************************************************************** + regtrav.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2004 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "regint.h" + +#ifdef USE_CAPTURE_HISTORY + +static int +capture_tree_traverse(OnigCaptureTreeNode* node, int at, + int(*callback_func)(int,int,int,int,int,void*), + int level, void* arg) +{ + int r, i; + + if (node == (OnigCaptureTreeNode* )0) + return 0; + + if ((at & ONIG_TRAVERSE_CALLBACK_AT_FIRST) != 0) { + r = (*callback_func)(node->group, node->beg, node->end, + level, ONIG_TRAVERSE_CALLBACK_AT_FIRST, arg); + if (r != 0) return r; + } + + for (i = 0; i < node->num_childs; i++) { + r = capture_tree_traverse(node->childs[i], at, + callback_func, level + 1, arg); + if (r != 0) return r; + } + + if ((at & ONIG_TRAVERSE_CALLBACK_AT_LAST) != 0) { + r = (*callback_func)(node->group, node->beg, node->end, + level, ONIG_TRAVERSE_CALLBACK_AT_LAST, arg); + if (r != 0) return r; + } + + return 0; +} +#endif /* USE_CAPTURE_HISTORY */ + +extern int +onig_capture_tree_traverse(OnigRegion* region, int at, + int(*callback_func)(int,int,int,int,int,void*), void* arg) +{ +#ifdef USE_CAPTURE_HISTORY + return capture_tree_traverse(region->history_root, at, + callback_func, 0, arg); +#else + return ONIG_NO_SUPPORT_CONFIG; +#endif +} diff --git a/ext/mbstring/oniguruma/regversion.c b/ext/mbstring/oniguruma/regversion.c new file mode 100644 index 0000000..5fad0cc --- /dev/null +++ b/ext/mbstring/oniguruma/regversion.c @@ -0,0 +1,55 @@ +/********************************************************************** + regversion.c - Oniguruma (regular expression library) +**********************************************************************/ +/*- + * Copyright (c) 2002-2006 K.Kosako <sndgk393 AT ybb DOT ne DOT jp> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 "oniguruma.h" +#include <stdio.h> + +extern const char* +onig_version(void) +{ + static char s[12]; + + sprintf(s, "%d.%d.%d", + ONIGURUMA_VERSION_MAJOR, + ONIGURUMA_VERSION_MINOR, + ONIGURUMA_VERSION_TEENY); + return s; +} + +extern const char* +onig_copyright(void) +{ + static char s[58]; + + sprintf(s, "Oniguruma %d.%d.%d : Copyright (C) 2002-2006 K.Kosako", + ONIGURUMA_VERSION_MAJOR, + ONIGURUMA_VERSION_MINOR, + ONIGURUMA_VERSION_TEENY); + return s; +} diff --git a/ext/mbstring/oniguruma/st.c b/ext/mbstring/oniguruma/st.c new file mode 100644 index 0000000..2324da2 --- /dev/null +++ b/ext/mbstring/oniguruma/st.c @@ -0,0 +1,589 @@ +/* This is a public domain general purpose hash table package written by Peter Moore @ UCB. */ + +/* static char sccsid[] = "@(#) st.c 5.1 89/12/14 Crucible"; */ + +#include "config.h" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#ifdef _WIN32 +#include <malloc.h> +#endif + +#ifdef NOT_RUBY +#include "regint.h" +#else +#ifdef RUBY_PLATFORM +#define xmalloc ruby_xmalloc +#define xcalloc ruby_xcalloc +#define xrealloc ruby_xrealloc +#define xfree ruby_xfree + +void *xmalloc(long); +void *xcalloc(long, long); +void *xrealloc(void *, long); +void xfree(void *); +#endif +#endif + +#include "st.h" + +typedef struct st_table_entry st_table_entry; + +struct st_table_entry { + unsigned int hash; + st_data_t key; + st_data_t record; + st_table_entry *next; +}; + +#define ST_DEFAULT_MAX_DENSITY 5 +#define ST_DEFAULT_INIT_TABLE_SIZE 11 + + /* + * DEFAULT_MAX_DENSITY is the default for the largest we allow the + * average number of items per bin before increasing the number of + * bins + * + * DEFAULT_INIT_TABLE_SIZE is the default for the number of bins + * allocated initially + * + */ + +static int numcmp(long, long); +static int numhash(long); +static struct st_hash_type type_numhash = { + numcmp, + numhash, +}; + +/* extern int strcmp(const char *, const char *); */ +static int strhash(const char *); +static struct st_hash_type type_strhash = { + strcmp, + strhash, +}; + +static void rehash(st_table *); + +#define alloc(type) (type*)xmalloc((unsigned)sizeof(type)) +#define Calloc(n,s) (char*)xcalloc((n),(s)) + +#define EQUAL(table,x,y) ((x)==(y) || (*table->type->compare)((x),(y)) == 0) + +#define do_hash(key,table) (unsigned int)(*(table)->type->hash)((key)) +#define do_hash_bin(key,table) (do_hash(key, table)%(table)->num_bins) + +/* + * MINSIZE is the minimum size of a dictionary. + */ + +#define MINSIZE 8 + +/* +Table of prime numbers 2^n+a, 2<=n<=30. +*/ +static const long primes[] = { + 8 + 3, + 16 + 3, + 32 + 5, + 64 + 3, + 128 + 3, + 256 + 27, + 512 + 9, + 1024 + 9, + 2048 + 5, + 4096 + 3, + 8192 + 27, + 16384 + 43, + 32768 + 3, + 65536 + 45, + 131072 + 29, + 262144 + 3, + 524288 + 21, + 1048576 + 7, + 2097152 + 17, + 4194304 + 15, + 8388608 + 9, + 16777216 + 43, + 33554432 + 35, + 67108864 + 15, + 134217728 + 29, + 268435456 + 3, + 536870912 + 11, + 1073741824 + 85, + 0 +}; + +static int +new_size(size) + int size; +{ + int i; + +#if 0 + for (i=3; i<31; i++) { + if ((1<<i) > size) return 1<<i; + } + return -1; +#else + int newsize; + + for (i = 0, newsize = MINSIZE; + i < (int )(sizeof(primes)/sizeof(primes[0])); + i++, newsize <<= 1) + { + if (newsize > size) return primes[i]; + } + /* Ran out of polynomials */ + return -1; /* should raise exception */ +#endif +} + +#ifdef HASH_LOG +static int collision = 0; +static int init_st = 0; + +static void +stat_col() +{ + FILE *f = fopen("/tmp/col", "w"); + fprintf(f, "collision: %d\n", collision); + fclose(f); +} +#endif + +st_table* +st_init_table_with_size(type, size) + struct st_hash_type *type; + int size; +{ + st_table *tbl; + +#ifdef HASH_LOG + if (init_st == 0) { + init_st = 1; + atexit(stat_col); + } +#endif + + size = new_size(size); /* round up to prime number */ + + tbl = alloc(st_table); + tbl->type = type; + tbl->num_entries = 0; + tbl->num_bins = size; + tbl->bins = (st_table_entry **)Calloc(size, sizeof(st_table_entry*)); + + return tbl; +} + +st_table* +st_init_table(type) + struct st_hash_type *type; +{ + return st_init_table_with_size(type, 0); +} + +st_table* +st_init_numtable(void) +{ + return st_init_table(&type_numhash); +} + +st_table* +st_init_numtable_with_size(size) + int size; +{ + return st_init_table_with_size(&type_numhash, size); +} + +st_table* +st_init_strtable(void) +{ + return st_init_table(&type_strhash); +} + +st_table* +st_init_strtable_with_size(size) + int size; +{ + return st_init_table_with_size(&type_strhash, size); +} + +void +st_free_table(table) + st_table *table; +{ + register st_table_entry *ptr, *next; + int i; + + for(i = 0; i < table->num_bins; i++) { + ptr = table->bins[i]; + while (ptr != 0) { + next = ptr->next; + free(ptr); + ptr = next; + } + } + free(table->bins); + free(table); +} + +#define PTR_NOT_EQUAL(table, ptr, hash_val, key) \ +((ptr) != 0 && (ptr->hash != (hash_val) || !EQUAL((table), (key), (ptr)->key))) + +#ifdef HASH_LOG +#define COLLISION collision++ +#else +#define COLLISION +#endif + +#define FIND_ENTRY(table, ptr, hash_val, bin_pos) do {\ + bin_pos = hash_val%(table)->num_bins;\ + ptr = (table)->bins[bin_pos];\ + if (PTR_NOT_EQUAL(table, ptr, hash_val, key)) {\ + COLLISION;\ + while (PTR_NOT_EQUAL(table, ptr->next, hash_val, key)) {\ + ptr = ptr->next;\ + }\ + ptr = ptr->next;\ + }\ +} while (0) + +int +st_lookup(table, key, value) + st_table *table; + register st_data_t key; + st_data_t *value; +{ + unsigned int hash_val, bin_pos; + register st_table_entry *ptr; + + hash_val = do_hash(key, table); + FIND_ENTRY(table, ptr, hash_val, bin_pos); + + if (ptr == 0) { + return 0; + } + else { + if (value != 0) *value = ptr->record; + return 1; + } +} + +#define ADD_DIRECT(table, key, value, hash_val, bin_pos)\ +do {\ + st_table_entry *entry;\ + if (table->num_entries/(table->num_bins) > ST_DEFAULT_MAX_DENSITY) {\ + rehash(table);\ + bin_pos = hash_val % table->num_bins;\ + }\ + \ + entry = alloc(st_table_entry);\ + \ + entry->hash = hash_val;\ + entry->key = key;\ + entry->record = value;\ + entry->next = table->bins[bin_pos];\ + table->bins[bin_pos] = entry;\ + table->num_entries++;\ +} while (0) + +int +st_insert(table, key, value) + register st_table *table; + register st_data_t key; + st_data_t value; +{ + unsigned int hash_val, bin_pos; + register st_table_entry *ptr; + + hash_val = do_hash(key, table); + FIND_ENTRY(table, ptr, hash_val, bin_pos); + + if (ptr == 0) { + ADD_DIRECT(table, key, value, hash_val, bin_pos); + return 0; + } + else { + ptr->record = value; + return 1; + } +} + +void +st_add_direct(table, key, value) + st_table *table; + st_data_t key; + st_data_t value; +{ + unsigned int hash_val, bin_pos; + + hash_val = do_hash(key, table); + bin_pos = hash_val % table->num_bins; + ADD_DIRECT(table, key, value, hash_val, bin_pos); +} + +static void +rehash(table) + register st_table *table; +{ + register st_table_entry *ptr, *next, **new_bins; + int i, old_num_bins = table->num_bins, new_num_bins; + unsigned int hash_val; + + new_num_bins = new_size(old_num_bins+1); + new_bins = (st_table_entry**)Calloc(new_num_bins, sizeof(st_table_entry*)); + + for(i = 0; i < old_num_bins; i++) { + ptr = table->bins[i]; + while (ptr != 0) { + next = ptr->next; + hash_val = ptr->hash % new_num_bins; + ptr->next = new_bins[hash_val]; + new_bins[hash_val] = ptr; + ptr = next; + } + } + free(table->bins); + table->num_bins = new_num_bins; + table->bins = new_bins; +} + +st_table* +st_copy(old_table) + st_table *old_table; +{ + st_table *new_table; + st_table_entry *ptr, *entry; + int i, num_bins = old_table->num_bins; + + new_table = alloc(st_table); + if (new_table == 0) { + return 0; + } + + *new_table = *old_table; + new_table->bins = (st_table_entry**) + Calloc((unsigned)num_bins, sizeof(st_table_entry*)); + + if (new_table->bins == 0) { + free(new_table); + return 0; + } + + for(i = 0; i < num_bins; i++) { + new_table->bins[i] = 0; + ptr = old_table->bins[i]; + while (ptr != 0) { + entry = alloc(st_table_entry); + if (entry == 0) { + free(new_table->bins); + free(new_table); + return 0; + } + *entry = *ptr; + entry->next = new_table->bins[i]; + new_table->bins[i] = entry; + ptr = ptr->next; + } + } + return new_table; +} + +int +st_delete(table, key, value) + register st_table *table; + register st_data_t *key; + st_data_t *value; +{ + unsigned int hash_val; + st_table_entry *tmp; + register st_table_entry *ptr; + + hash_val = do_hash_bin(*key, table); + ptr = table->bins[hash_val]; + + if (ptr == 0) { + if (value != 0) *value = 0; + return 0; + } + + if (EQUAL(table, *key, ptr->key)) { + table->bins[hash_val] = ptr->next; + table->num_entries--; + if (value != 0) *value = ptr->record; + *key = ptr->key; + free(ptr); + return 1; + } + + for(; ptr->next != 0; ptr = ptr->next) { + if (EQUAL(table, ptr->next->key, *key)) { + tmp = ptr->next; + ptr->next = ptr->next->next; + table->num_entries--; + if (value != 0) *value = tmp->record; + *key = tmp->key; + free(tmp); + return 1; + } + } + + return 0; +} + +int +st_delete_safe(table, key, value, never) + register st_table *table; + register st_data_t *key; + st_data_t *value; + st_data_t never; +{ + unsigned int hash_val; + register st_table_entry *ptr; + + hash_val = do_hash_bin(*key, table); + ptr = table->bins[hash_val]; + + if (ptr == 0) { + if (value != 0) *value = 0; + return 0; + } + + for(; ptr != 0; ptr = ptr->next) { + if ((ptr->key != never) && EQUAL(table, ptr->key, *key)) { + table->num_entries--; + *key = ptr->key; + if (value != 0) *value = ptr->record; + ptr->key = ptr->record = never; + return 1; + } + } + + return 0; +} + +static int +delete_never(key, value, never) + st_data_t key, value, never; +{ + if (value == never) return ST_DELETE; + return ST_CONTINUE; +} + +void +st_cleanup_safe(table, never) + st_table *table; + st_data_t never; +{ + int num_entries = table->num_entries; + + st_foreach(table, delete_never, never); + table->num_entries = num_entries; +} + +int +st_foreach(table, func, arg) + st_table *table; + int (*func)(); + st_data_t arg; +{ + st_table_entry *ptr, *last, *tmp; + enum st_retval retval; + int i; + + for(i = 0; i < table->num_bins; i++) { + last = 0; + for(ptr = table->bins[i]; ptr != 0;) { + retval = (*func)(ptr->key, ptr->record, arg); + switch (retval) { + case ST_CHECK: /* check if hash is modified during iteration */ + tmp = 0; + if (i < table->num_bins) { + for (tmp = table->bins[i]; tmp; tmp=tmp->next) { + if (tmp == ptr) break; + } + } + if (!tmp) { + /* call func with error notice */ + return 1; + } + /* fall through */ + case ST_CONTINUE: + last = ptr; + ptr = ptr->next; + break; + case ST_STOP: + return 0; + case ST_DELETE: + tmp = ptr; + if (last == 0) { + table->bins[i] = ptr->next; + } + else { + last->next = ptr->next; + } + ptr = ptr->next; + free(tmp); + table->num_entries--; + } + } + } + return 0; +} + +static int +strhash(string) + register const char *string; +{ + register int c; + +#ifdef HASH_ELFHASH + register unsigned int h = 0, g; + + while ((c = *string++) != '\0') { + h = ( h << 4 ) + c; + if ( g = h & 0xF0000000 ) + h ^= g >> 24; + h &= ~g; + } + return h; +#elif HASH_PERL + register int val = 0; + + while ((c = *string++) != '\0') { + val += c; + val += (val << 10); + val ^= (val >> 6); + } + val += (val << 3); + val ^= (val >> 11); + + return val + (val << 15); +#else + register int val = 0; + + while ((c = *string++) != '\0') { + val = val*997 + c; + } + + return val + (val>>5); +#endif +} + +static int +numcmp(x, y) + long x, y; +{ + return x != y; +} + +static int +numhash(n) + long n; +{ + return n; +} diff --git a/ext/mbstring/oniguruma/st.h b/ext/mbstring/oniguruma/st.h new file mode 100644 index 0000000..da65e7f --- /dev/null +++ b/ext/mbstring/oniguruma/st.h @@ -0,0 +1,63 @@ +/* This is a public domain general purpose hash table package written by Peter Moore @ UCB. */ + +/* @(#) st.h 5.1 89/12/14 */ + +#ifndef ST_INCLUDED + +#define ST_INCLUDED + +typedef unsigned long st_data_t; +#define ST_DATA_T_DEFINED + +typedef struct st_table st_table; + +struct st_hash_type { + int (*compare)(); + int (*hash)(); +}; + +struct st_table { + struct st_hash_type *type; + int num_bins; + int num_entries; + struct st_table_entry **bins; +}; + +#define st_is_member(table,key) st_lookup(table,key,(st_data_t *)0) + +enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK}; + +#ifndef _ +# define _(args) args +#endif +#ifndef ANYARGS +# ifdef __cplusplus +# define ANYARGS ... +# else +# define ANYARGS +# endif +#endif + +st_table *st_init_table _((struct st_hash_type *)); +st_table *st_init_table_with_size _((struct st_hash_type *, int)); +st_table *st_init_numtable _((void)); +st_table *st_init_numtable_with_size _((int)); +st_table *st_init_strtable _((void)); +st_table *st_init_strtable_with_size _((int)); +int st_delete _((st_table *, st_data_t *, st_data_t *)); +int st_delete_safe _((st_table *, st_data_t *, st_data_t *, st_data_t)); +int st_insert _((st_table *, st_data_t, st_data_t)); +int st_lookup _((st_table *, st_data_t, st_data_t *)); +int st_foreach _((st_table *, int (*)(ANYARGS), st_data_t)); +void st_add_direct _((st_table *, st_data_t, st_data_t)); +void st_free_table _((st_table *)); +void st_cleanup_safe _((st_table *, st_data_t)); +st_table *st_copy _((st_table *)); + +#define ST_NUMCMP ((int (*)()) 0) +#define ST_NUMHASH ((int (*)()) -2) + +#define st_numcmp ST_NUMCMP +#define st_numhash ST_NUMHASH + +#endif /* ST_INCLUDED */ diff --git a/ext/mbstring/oniguruma/win32/config.h b/ext/mbstring/oniguruma/win32/config.h new file mode 100644 index 0000000..bdbdaf2 --- /dev/null +++ b/ext/mbstring/oniguruma/win32/config.h @@ -0,0 +1,84 @@ +#define STDC_HEADERS 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRING_H 1 +#define HAVE_MEMORY_H 1 +#define HAVE_FLOAT_H 1 +#define HAVE_OFF_T 1 +#define SIZEOF_INT 4 +#define SIZEOF_SHORT 2 +#define SIZEOF_LONG 4 +#define SIZEOF_LONG_LONG 0 +#define SIZEOF___INT64 8 +#define SIZEOF_OFF_T 4 +#define SIZEOF_VOIDP 4 +#define SIZEOF_FLOAT 4 +#define SIZEOF_DOUBLE 8 +#define HAVE_PROTOTYPES 1 +#define TOKEN_PASTE(x,y) x##y +#define HAVE_STDARG_PROTOTYPES 1 +#ifndef NORETURN +#if _MSC_VER > 1100 +#define NORETURN(x) __declspec(noreturn) x +#else +#define NORETURN(x) x +#endif +#endif +#define HAVE_DECL_SYS_NERR 1 +#define STDC_HEADERS 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRING_H 1 +#define HAVE_LIMITS_H 1 +#define HAVE_FCNTL_H 1 +#define HAVE_SYS_UTIME_H 1 +#define HAVE_MEMORY_H 1 +#define uid_t int +#define gid_t int +#define HAVE_STRUCT_STAT_ST_RDEV 1 +#define HAVE_ST_RDEV 1 +#define GETGROUPS_T int +#define RETSIGTYPE void +#define HAVE_ALLOCA 1 +#define HAVE_DUP2 1 +#define HAVE_MEMCMP 1 +#define HAVE_MEMMOVE 1 +#define HAVE_MKDIR 1 +#define HAVE_STRCASECMP 1 +#define HAVE_STRNCASECMP 1 +#define HAVE_STRERROR 1 +#define HAVE_STRFTIME 1 +#define HAVE_STRCHR 1 +#define HAVE_STRSTR 1 +#define HAVE_STRTOD 1 +#define HAVE_STRTOL 1 +#define HAVE_STRTOUL 1 +#define HAVE_FLOCK 1 +#define HAVE_VSNPRINTF 1 +#define HAVE_FINITE 1 +#define HAVE_FMOD 1 +#define HAVE_FREXP 1 +#define HAVE_HYPOT 1 +#define HAVE_MODF 1 +#define HAVE_WAITPID 1 +#define HAVE_CHSIZE 1 +#define HAVE_TIMES 1 +#define HAVE__SETJMP 1 +#define HAVE_TELLDIR 1 +#define HAVE_SEEKDIR 1 +#define HAVE_MKTIME 1 +#define HAVE_COSH 1 +#define HAVE_SINH 1 +#define HAVE_TANH 1 +#define HAVE_EXECVE 1 +#define HAVE_TZNAME 1 +#define HAVE_DAYLIGHT 1 +#define SETPGRP_VOID 1 +#define inline __inline +#define NEED_IO_SEEK_BETWEEN_RW 1 +#define RSHIFT(x,y) ((x)>>(int)y) +#define FILE_COUNT _cnt +#define FILE_READPTR _ptr +#define DEFAULT_KCODE KCODE_NONE +#define DLEXT ".so" +#define DLEXT2 ".dll" diff --git a/ext/mbstring/php_mbregex.c b/ext/mbstring/php_mbregex.c new file mode 100644 index 0000000..145ee0c --- /dev/null +++ b/ext/mbstring/php_mbregex.c @@ -0,0 +1,1470 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2013 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Tsukada Takuya <tsukada@fminn.nagano.nagano.jp> | + +----------------------------------------------------------------------+ + */ + +/* $Id$ */ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "php.h" +#include "php_ini.h" + +#if HAVE_MBREGEX + +#include "ext/standard/php_smart_str.h" +#include "ext/standard/info.h" +#include "php_mbregex.h" +#include "mbstring.h" + +#include "php_onig_compat.h" /* must come prior to the oniguruma header */ +#include <oniguruma.h> +#undef UChar + +ZEND_EXTERN_MODULE_GLOBALS(mbstring) + +struct _zend_mb_regex_globals { + OnigEncoding default_mbctype; + OnigEncoding current_mbctype; + HashTable ht_rc; + zval *search_str; + zval *search_str_val; + unsigned int search_pos; + php_mb_regex_t *search_re; + OnigRegion *search_regs; + OnigOptionType regex_default_options; + OnigSyntaxType *regex_default_syntax; +}; + +#define MBREX(g) (MBSTRG(mb_regex_globals)->g) + +/* {{{ static void php_mb_regex_free_cache() */ +static void php_mb_regex_free_cache(php_mb_regex_t **pre) +{ + onig_free(*pre); +} +/* }}} */ + +/* {{{ _php_mb_regex_globals_ctor */ +static int _php_mb_regex_globals_ctor(zend_mb_regex_globals *pglobals TSRMLS_DC) +{ + pglobals->default_mbctype = ONIG_ENCODING_EUC_JP; + pglobals->current_mbctype = ONIG_ENCODING_EUC_JP; + zend_hash_init(&(pglobals->ht_rc), 0, NULL, (void (*)(void *)) php_mb_regex_free_cache, 1); + pglobals->search_str = (zval*) NULL; + pglobals->search_re = (php_mb_regex_t*)NULL; + pglobals->search_pos = 0; + pglobals->search_regs = (OnigRegion*)NULL; + pglobals->regex_default_options = ONIG_OPTION_MULTILINE | ONIG_OPTION_SINGLELINE; + pglobals->regex_default_syntax = ONIG_SYNTAX_RUBY; + return SUCCESS; +} +/* }}} */ + +/* {{{ _php_mb_regex_globals_dtor */ +static void _php_mb_regex_globals_dtor(zend_mb_regex_globals *pglobals TSRMLS_DC) +{ + zend_hash_destroy(&pglobals->ht_rc); +} +/* }}} */ + +/* {{{ php_mb_regex_globals_alloc */ +zend_mb_regex_globals *php_mb_regex_globals_alloc(TSRMLS_D) +{ + zend_mb_regex_globals *pglobals = pemalloc( + sizeof(zend_mb_regex_globals), 1); + if (!pglobals) { + return NULL; + } + if (SUCCESS != _php_mb_regex_globals_ctor(pglobals TSRMLS_CC)) { + pefree(pglobals, 1); + return NULL; + } + return pglobals; +} +/* }}} */ + +/* {{{ php_mb_regex_globals_free */ +void php_mb_regex_globals_free(zend_mb_regex_globals *pglobals TSRMLS_DC) +{ + if (!pglobals) { + return; + } + _php_mb_regex_globals_dtor(pglobals TSRMLS_CC); + pefree(pglobals, 1); +} +/* }}} */ + +/* {{{ PHP_MINIT_FUNCTION(mb_regex) */ +PHP_MINIT_FUNCTION(mb_regex) +{ + onig_init(); + return SUCCESS; +} +/* }}} */ + +/* {{{ PHP_MSHUTDOWN_FUNCTION(mb_regex) */ +PHP_MSHUTDOWN_FUNCTION(mb_regex) +{ + onig_end(); + return SUCCESS; +} +/* }}} */ + +/* {{{ PHP_RINIT_FUNCTION(mb_regex) */ +PHP_RINIT_FUNCTION(mb_regex) +{ + return MBSTRG(mb_regex_globals) ? SUCCESS: FAILURE; +} +/* }}} */ + +/* {{{ PHP_RSHUTDOWN_FUNCTION(mb_regex) */ +PHP_RSHUTDOWN_FUNCTION(mb_regex) +{ + MBREX(current_mbctype) = MBREX(default_mbctype); + + if (MBREX(search_str) != NULL) { + zval_ptr_dtor(&MBREX(search_str)); + MBREX(search_str) = (zval *)NULL; + } + MBREX(search_pos) = 0; + + if (MBREX(search_regs) != NULL) { + onig_region_free(MBREX(search_regs), 1); + MBREX(search_regs) = (OnigRegion *)NULL; + } + zend_hash_clean(&MBREX(ht_rc)); + + return SUCCESS; +} +/* }}} */ + +/* {{{ PHP_MINFO_FUNCTION(mb_regex) */ +PHP_MINFO_FUNCTION(mb_regex) +{ + char buf[32]; + php_info_print_table_start(); + php_info_print_table_row(2, "Multibyte (japanese) regex support", "enabled"); + snprintf(buf, sizeof(buf), "%d.%d.%d", + ONIGURUMA_VERSION_MAJOR, + ONIGURUMA_VERSION_MINOR, + ONIGURUMA_VERSION_TEENY); +#ifdef PHP_ONIG_BUNDLED +#ifdef USE_COMBINATION_EXPLOSION_CHECK + php_info_print_table_row(2, "Multibyte regex (oniguruma) backtrack check", "On"); +#else /* USE_COMBINATION_EXPLOSION_CHECK */ + php_info_print_table_row(2, "Multibyte regex (oniguruma) backtrack check", "Off"); +#endif /* USE_COMBINATION_EXPLOSION_CHECK */ +#endif /* PHP_BUNDLED_ONIG */ + php_info_print_table_row(2, "Multibyte regex (oniguruma) version", buf); + php_info_print_table_end(); +} +/* }}} */ + +/* + * encoding name resolver + */ + +/* {{{ encoding name map */ +typedef struct _php_mb_regex_enc_name_map_t { + const char *names; + OnigEncoding code; +} php_mb_regex_enc_name_map_t; + +php_mb_regex_enc_name_map_t enc_name_map[] = { +#ifdef ONIG_ENCODING_EUC_JP + { + "EUC-JP\0EUCJP\0X-EUC-JP\0UJIS\0EUCJP\0EUCJP-WIN\0", + ONIG_ENCODING_EUC_JP + }, +#endif +#ifdef ONIG_ENCODING_UTF8 + { + "UTF-8\0UTF8\0", + ONIG_ENCODING_UTF8 + }, +#endif +#ifdef ONIG_ENCODING_UTF16_BE + { + "UTF-16\0UTF-16BE\0", + ONIG_ENCODING_UTF16_BE + }, +#endif +#ifdef ONIG_ENCODING_UTF16_LE + { + "UTF-16LE\0", + ONIG_ENCODING_UTF16_LE + }, +#endif +#ifdef ONIG_ENCODING_UTF32_BE + { + "UCS-4\0UTF-32\0UTF-32BE\0", + ONIG_ENCODING_UTF32_BE + }, +#endif +#ifdef ONIG_ENCODING_UTF32_LE + { + "UCS-4LE\0UTF-32LE\0", + ONIG_ENCODING_UTF32_LE + }, +#endif +#ifdef ONIG_ENCODING_SJIS + { + "SJIS\0CP932\0MS932\0SHIFT_JIS\0SJIS-WIN\0WINDOWS-31J\0", + ONIG_ENCODING_SJIS + }, +#endif +#ifdef ONIG_ENCODING_BIG5 + { + "BIG5\0BIG-5\0BIGFIVE\0CN-BIG5\0BIG-FIVE\0", + ONIG_ENCODING_BIG5 + }, +#endif +#ifdef ONIG_ENCODING_EUC_CN + { + "EUC-CN\0EUCCN\0EUC_CN\0GB-2312\0GB2312\0", + ONIG_ENCODING_EUC_CN + }, +#endif +#ifdef ONIG_ENCODING_EUC_TW + { + "EUC-TW\0EUCTW\0EUC_TW\0", + ONIG_ENCODING_EUC_TW + }, +#endif +#ifdef ONIG_ENCODING_EUC_KR + { + "EUC-KR\0EUCKR\0EUC_KR\0", + ONIG_ENCODING_EUC_KR + }, +#endif +#if defined(ONIG_ENCODING_KOI8) && !PHP_ONIG_BAD_KOI8_ENTRY + { + "KOI8\0KOI-8\0", + ONIG_ENCODING_KOI8 + }, +#endif +#ifdef ONIG_ENCODING_KOI8_R + { + "KOI8R\0KOI8-R\0KOI-8R\0", + ONIG_ENCODING_KOI8_R + }, +#endif +#ifdef ONIG_ENCODING_ISO_8859_1 + { + "ISO-8859-1\0ISO8859-1\0ISO_8859_1\0ISO8859_1\0", + ONIG_ENCODING_ISO_8859_1 + }, +#endif +#ifdef ONIG_ENCODING_ISO_8859_2 + { + "ISO-8859-2\0ISO8859-2\0ISO_8859_2\0ISO8859_2\0", + ONIG_ENCODING_ISO_8859_2 + }, +#endif +#ifdef ONIG_ENCODING_ISO_8859_3 + { + "ISO-8859-3\0ISO8859-3\0ISO_8859_3\0ISO8859_3\0", + ONIG_ENCODING_ISO_8859_3 + }, +#endif +#ifdef ONIG_ENCODING_ISO_8859_4 + { + "ISO-8859-4\0ISO8859-4\0ISO_8859_4\0ISO8859_4\0", + ONIG_ENCODING_ISO_8859_4 + }, +#endif +#ifdef ONIG_ENCODING_ISO_8859_5 + { + "ISO-8859-5\0ISO8859-5\0ISO_8859_5\0ISO8859_5\0", + ONIG_ENCODING_ISO_8859_5 + }, +#endif +#ifdef ONIG_ENCODING_ISO_8859_6 + { + "ISO-8859-6\0ISO8859-6\0ISO_8859_6\0ISO8859_6\0", + ONIG_ENCODING_ISO_8859_6 + }, +#endif +#ifdef ONIG_ENCODING_ISO_8859_7 + { + "ISO-8859-7\0ISO8859-7\0ISO_8859_7\0ISO8859_7\0", + ONIG_ENCODING_ISO_8859_7 + }, +#endif +#ifdef ONIG_ENCODING_ISO_8859_8 + { + "ISO-8859-8\0ISO8859-8\0ISO_8859_8\0ISO8859_8\0", + ONIG_ENCODING_ISO_8859_8 + }, +#endif +#ifdef ONIG_ENCODING_ISO_8859_9 + { + "ISO-8859-9\0ISO8859-9\0ISO_8859_9\0ISO8859_9\0", + ONIG_ENCODING_ISO_8859_9 + }, +#endif +#ifdef ONIG_ENCODING_ISO_8859_10 + { + "ISO-8859-10\0ISO8859-10\0ISO_8859_10\0ISO8859_10\0", + ONIG_ENCODING_ISO_8859_10 + }, +#endif +#ifdef ONIG_ENCODING_ISO_8859_11 + { + "ISO-8859-11\0ISO8859-11\0ISO_8859_11\0ISO8859_11\0", + ONIG_ENCODING_ISO_8859_11 + }, +#endif +#ifdef ONIG_ENCODING_ISO_8859_13 + { + "ISO-8859-13\0ISO8859-13\0ISO_8859_13\0ISO8859_13\0", + ONIG_ENCODING_ISO_8859_13 + }, +#endif +#ifdef ONIG_ENCODING_ISO_8859_14 + { + "ISO-8859-14\0ISO8859-14\0ISO_8859_14\0ISO8859_14\0", + ONIG_ENCODING_ISO_8859_14 + }, +#endif +#ifdef ONIG_ENCODING_ISO_8859_15 + { + "ISO-8859-15\0ISO8859-15\0ISO_8859_15\0ISO8859_15\0", + ONIG_ENCODING_ISO_8859_15 + }, +#endif +#ifdef ONIG_ENCODING_ISO_8859_16 + { + "ISO-8859-16\0ISO8859-16\0ISO_8859_16\0ISO8859_16\0", + ONIG_ENCODING_ISO_8859_16 + }, +#endif +#ifdef ONIG_ENCODING_ASCII + { + "ASCII\0US-ASCII\0US_ASCII\0ISO646\0", + ONIG_ENCODING_ASCII + }, +#endif + { NULL, ONIG_ENCODING_UNDEF } +}; +/* }}} */ + +/* {{{ php_mb_regex_name2mbctype */ +static OnigEncoding _php_mb_regex_name2mbctype(const char *pname) +{ + const char *p; + php_mb_regex_enc_name_map_t *mapping; + + if (pname == NULL || !*pname) { + return ONIG_ENCODING_UNDEF; + } + + for (mapping = enc_name_map; mapping->names != NULL; mapping++) { + for (p = mapping->names; *p != '\0'; p += (strlen(p) + 1)) { + if (strcasecmp(p, pname) == 0) { + return mapping->code; + } + } + } + + return ONIG_ENCODING_UNDEF; +} +/* }}} */ + +/* {{{ php_mb_regex_mbctype2name */ +static const char *_php_mb_regex_mbctype2name(OnigEncoding mbctype) +{ + php_mb_regex_enc_name_map_t *mapping; + + for (mapping = enc_name_map; mapping->names != NULL; mapping++) { + if (mapping->code == mbctype) { + return mapping->names; + } + } + + return NULL; +} +/* }}} */ + +/* {{{ php_mb_regex_set_mbctype */ +int php_mb_regex_set_mbctype(const char *encname TSRMLS_DC) +{ + OnigEncoding mbctype = _php_mb_regex_name2mbctype(encname); + if (mbctype == ONIG_ENCODING_UNDEF) { + return FAILURE; + } + MBREX(current_mbctype) = mbctype; + return SUCCESS; +} +/* }}} */ + +/* {{{ php_mb_regex_set_default_mbctype */ +int php_mb_regex_set_default_mbctype(const char *encname TSRMLS_DC) +{ + OnigEncoding mbctype = _php_mb_regex_name2mbctype(encname); + if (mbctype == ONIG_ENCODING_UNDEF) { + return FAILURE; + } + MBREX(default_mbctype) = mbctype; + return SUCCESS; +} +/* }}} */ + +/* {{{ php_mb_regex_get_mbctype */ +const char *php_mb_regex_get_mbctype(TSRMLS_D) +{ + return _php_mb_regex_mbctype2name(MBREX(current_mbctype)); +} +/* }}} */ + +/* {{{ php_mb_regex_get_default_mbctype */ +const char *php_mb_regex_get_default_mbctype(TSRMLS_D) +{ + return _php_mb_regex_mbctype2name(MBREX(default_mbctype)); +} +/* }}} */ + +/* + * regex cache + */ +/* {{{ php_mbregex_compile_pattern */ +static php_mb_regex_t *php_mbregex_compile_pattern(const char *pattern, int patlen, OnigOptionType options, OnigEncoding enc, OnigSyntaxType *syntax TSRMLS_DC) +{ + int err_code = 0; + int found = 0; + php_mb_regex_t *retval = NULL, **rc = NULL; + OnigErrorInfo err_info; + OnigUChar err_str[ONIG_MAX_ERROR_MESSAGE_LEN]; + + found = zend_hash_find(&MBREX(ht_rc), (char *)pattern, patlen+1, (void **) &rc); + if (found == FAILURE || (*rc)->options != options || (*rc)->enc != enc || (*rc)->syntax != syntax) { + if ((err_code = onig_new(&retval, (OnigUChar *)pattern, (OnigUChar *)(pattern + patlen), options, enc, syntax, &err_info)) != ONIG_NORMAL) { + onig_error_code_to_str(err_str, err_code, err_info); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "mbregex compile err: %s", err_str); + retval = NULL; + goto out; + } + zend_hash_update(&MBREX(ht_rc), (char *) pattern, patlen + 1, (void *) &retval, sizeof(retval), NULL); + } else if (found == SUCCESS) { + retval = *rc; + } +out: + return retval; +} +/* }}} */ + +/* {{{ _php_mb_regex_get_option_string */ +static size_t _php_mb_regex_get_option_string(char *str, size_t len, OnigOptionType option, OnigSyntaxType *syntax) +{ + size_t len_left = len; + size_t len_req = 0; + char *p = str; + char c; + + if ((option & ONIG_OPTION_IGNORECASE) != 0) { + if (len_left > 0) { + --len_left; + *(p++) = 'i'; + } + ++len_req; + } + + if ((option & ONIG_OPTION_EXTEND) != 0) { + if (len_left > 0) { + --len_left; + *(p++) = 'x'; + } + ++len_req; + } + + if ((option & (ONIG_OPTION_MULTILINE | ONIG_OPTION_SINGLELINE)) == + (ONIG_OPTION_MULTILINE | ONIG_OPTION_SINGLELINE)) { + if (len_left > 0) { + --len_left; + *(p++) = 'p'; + } + ++len_req; + } else { + if ((option & ONIG_OPTION_MULTILINE) != 0) { + if (len_left > 0) { + --len_left; + *(p++) = 'm'; + } + ++len_req; + } + + if ((option & ONIG_OPTION_SINGLELINE) != 0) { + if (len_left > 0) { + --len_left; + *(p++) = 's'; + } + ++len_req; + } + } + if ((option & ONIG_OPTION_FIND_LONGEST) != 0) { + if (len_left > 0) { + --len_left; + *(p++) = 'l'; + } + ++len_req; + } + if ((option & ONIG_OPTION_FIND_NOT_EMPTY) != 0) { + if (len_left > 0) { + --len_left; + *(p++) = 'n'; + } + ++len_req; + } + + c = 0; + + if (syntax == ONIG_SYNTAX_JAVA) { + c = 'j'; + } else if (syntax == ONIG_SYNTAX_GNU_REGEX) { + c = 'u'; + } else if (syntax == ONIG_SYNTAX_GREP) { + c = 'g'; + } else if (syntax == ONIG_SYNTAX_EMACS) { + c = 'c'; + } else if (syntax == ONIG_SYNTAX_RUBY) { + c = 'r'; + } else if (syntax == ONIG_SYNTAX_PERL) { + c = 'z'; + } else if (syntax == ONIG_SYNTAX_POSIX_BASIC) { + c = 'b'; + } else if (syntax == ONIG_SYNTAX_POSIX_EXTENDED) { + c = 'd'; + } + + if (c != 0) { + if (len_left > 0) { + --len_left; + *(p++) = c; + } + ++len_req; + } + + + if (len_left > 0) { + --len_left; + *(p++) = '\0'; + } + ++len_req; + if (len < len_req) { + return len_req; + } + + return 0; +} +/* }}} */ + +/* {{{ _php_mb_regex_init_options */ +static void +_php_mb_regex_init_options(const char *parg, int narg, OnigOptionType *option, OnigSyntaxType **syntax, int *eval) +{ + int n; + char c; + int optm = 0; + + *syntax = ONIG_SYNTAX_RUBY; + + if (parg != NULL) { + n = 0; + while(n < narg) { + c = parg[n++]; + switch (c) { + case 'i': + optm |= ONIG_OPTION_IGNORECASE; + break; + case 'x': + optm |= ONIG_OPTION_EXTEND; + break; + case 'm': + optm |= ONIG_OPTION_MULTILINE; + break; + case 's': + optm |= ONIG_OPTION_SINGLELINE; + break; + case 'p': + optm |= ONIG_OPTION_MULTILINE | ONIG_OPTION_SINGLELINE; + break; + case 'l': + optm |= ONIG_OPTION_FIND_LONGEST; + break; + case 'n': + optm |= ONIG_OPTION_FIND_NOT_EMPTY; + break; + case 'j': + *syntax = ONIG_SYNTAX_JAVA; + break; + case 'u': + *syntax = ONIG_SYNTAX_GNU_REGEX; + break; + case 'g': + *syntax = ONIG_SYNTAX_GREP; + break; + case 'c': + *syntax = ONIG_SYNTAX_EMACS; + break; + case 'r': + *syntax = ONIG_SYNTAX_RUBY; + break; + case 'z': + *syntax = ONIG_SYNTAX_PERL; + break; + case 'b': + *syntax = ONIG_SYNTAX_POSIX_BASIC; + break; + case 'd': + *syntax = ONIG_SYNTAX_POSIX_EXTENDED; + break; + case 'e': + if (eval != NULL) *eval = 1; + break; + default: + break; + } + } + if (option != NULL) *option|=optm; + } +} +/* }}} */ + +/* + * php funcions + */ + +/* {{{ proto string mb_regex_encoding([string encoding]) + Returns the current encoding for regex as a string. */ +PHP_FUNCTION(mb_regex_encoding) +{ + size_t argc = ZEND_NUM_ARGS(); + char *encoding; + int encoding_len; + OnigEncoding mbctype; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &encoding, &encoding_len) == FAILURE) { + return; + } + + if (argc == 0) { + const char *retval = _php_mb_regex_mbctype2name(MBREX(current_mbctype)); + + if (retval == NULL) { + RETURN_FALSE; + } + + RETURN_STRING((char *)retval, 1); + } else if (argc == 1) { + mbctype = _php_mb_regex_name2mbctype(encoding); + + if (mbctype == ONIG_ENCODING_UNDEF) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", encoding); + RETURN_FALSE; + } + + MBREX(current_mbctype) = mbctype; + RETURN_TRUE; + } +} +/* }}} */ + +/* {{{ _php_mb_regex_ereg_exec */ +static void _php_mb_regex_ereg_exec(INTERNAL_FUNCTION_PARAMETERS, int icase) +{ + zval **arg_pattern, *array; + char *string; + int string_len; + php_mb_regex_t *re; + OnigRegion *regs = NULL; + int i, match_len, beg, end; + OnigOptionType options; + char *str; + + array = NULL; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Zs|z", &arg_pattern, &string, &string_len, &array) == FAILURE) { + RETURN_FALSE; + } + + options = MBREX(regex_default_options); + if (icase) { + options |= ONIG_OPTION_IGNORECASE; + } + + /* compile the regular expression from the supplied regex */ + if (Z_TYPE_PP(arg_pattern) != IS_STRING) { + /* we convert numbers to integers and treat them as a string */ + if (Z_TYPE_PP(arg_pattern) == IS_DOUBLE) { + convert_to_long_ex(arg_pattern); /* get rid of decimal places */ + } + convert_to_string_ex(arg_pattern); + /* don't bother doing an extended regex with just a number */ + } + + if (!Z_STRVAL_PP(arg_pattern) || Z_STRLEN_PP(arg_pattern) == 0) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "empty pattern"); + RETVAL_FALSE; + goto out; + } + + re = php_mbregex_compile_pattern(Z_STRVAL_PP(arg_pattern), Z_STRLEN_PP(arg_pattern), options, MBREX(current_mbctype), MBREX(regex_default_syntax) TSRMLS_CC); + if (re == NULL) { + RETVAL_FALSE; + goto out; + } + + regs = onig_region_new(); + + /* actually execute the regular expression */ + if (onig_search(re, (OnigUChar *)string, (OnigUChar *)(string + string_len), (OnigUChar *)string, (OnigUChar *)(string + string_len), regs, 0) < 0) { + RETVAL_FALSE; + goto out; + } + + match_len = 1; + str = string; + if (array != NULL) { + match_len = regs->end[0] - regs->beg[0]; + zval_dtor(array); + array_init(array); + for (i = 0; i < regs->num_regs; i++) { + beg = regs->beg[i]; + end = regs->end[i]; + if (beg >= 0 && beg < end && end <= string_len) { + add_index_stringl(array, i, (char *)&str[beg], end - beg, 1); + } else { + add_index_bool(array, i, 0); + } + } + } + + if (match_len == 0) { + match_len = 1; + } + RETVAL_LONG(match_len); +out: + if (regs != NULL) { + onig_region_free(regs, 1); + } +} +/* }}} */ + +/* {{{ proto int mb_ereg(string pattern, string string [, array registers]) + Regular expression match for multibyte string */ +PHP_FUNCTION(mb_ereg) +{ + _php_mb_regex_ereg_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); +} +/* }}} */ + +/* {{{ proto int mb_eregi(string pattern, string string [, array registers]) + Case-insensitive regular expression match for multibyte string */ +PHP_FUNCTION(mb_eregi) +{ + _php_mb_regex_ereg_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); +} +/* }}} */ + +/* {{{ _php_mb_regex_ereg_replace_exec */ +static void _php_mb_regex_ereg_replace_exec(INTERNAL_FUNCTION_PARAMETERS, OnigOptionType options, int is_callable) +{ + zval **arg_pattern_zval; + + char *arg_pattern; + int arg_pattern_len; + + char *replace; + int replace_len; + + zend_fcall_info arg_replace_fci; + zend_fcall_info_cache arg_replace_fci_cache; + + char *string; + int string_len; + + char *p; + php_mb_regex_t *re; + OnigSyntaxType *syntax; + OnigRegion *regs = NULL; + smart_str out_buf = { 0 }; + smart_str eval_buf = { 0 }; + smart_str *pbuf; + int i, err, eval, n; + OnigUChar *pos; + OnigUChar *string_lim; + char *description = NULL; + char pat_buf[2]; + + const mbfl_encoding *enc; + + { + const char *current_enc_name; + current_enc_name = _php_mb_regex_mbctype2name(MBREX(current_mbctype)); + if (current_enc_name == NULL || + (enc = mbfl_name2encoding(current_enc_name)) == NULL) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown error"); + RETURN_FALSE; + } + } + eval = 0; + { + char *option_str = NULL; + int option_str_len = 0; + + if (!is_callable) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Zss|s", + &arg_pattern_zval, + &replace, &replace_len, + &string, &string_len, + &option_str, &option_str_len) == FAILURE) { + RETURN_FALSE; + } + } else { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Zfs|s", + &arg_pattern_zval, + &arg_replace_fci, &arg_replace_fci_cache, + &string, &string_len, + &option_str, &option_str_len) == FAILURE) { + RETURN_FALSE; + } + } + + if (option_str != NULL) { + _php_mb_regex_init_options(option_str, option_str_len, &options, &syntax, &eval); + } else { + options |= MBREX(regex_default_options); + syntax = MBREX(regex_default_syntax); + } + } + if (Z_TYPE_PP(arg_pattern_zval) == IS_STRING) { + arg_pattern = Z_STRVAL_PP(arg_pattern_zval); + arg_pattern_len = Z_STRLEN_PP(arg_pattern_zval); + } else { + /* FIXME: this code is not multibyte aware! */ + convert_to_long_ex(arg_pattern_zval); + pat_buf[0] = (char)Z_LVAL_PP(arg_pattern_zval); + pat_buf[1] = '\0'; + + arg_pattern = pat_buf; + arg_pattern_len = 1; + } + /* create regex pattern buffer */ + re = php_mbregex_compile_pattern(arg_pattern, arg_pattern_len, options, MBREX(current_mbctype), syntax TSRMLS_CC); + if (re == NULL) { + RETURN_FALSE; + } + + if (eval || is_callable) { + pbuf = &eval_buf; + description = zend_make_compiled_string_description("mbregex replace" TSRMLS_CC); + } else { + pbuf = &out_buf; + description = NULL; + } + + if (is_callable) { + if (eval) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Option 'e' cannot be used with replacement callback"); + RETURN_FALSE; + } + } + + /* do the actual work */ + err = 0; + pos = (OnigUChar *)string; + string_lim = (OnigUChar*)(string + string_len); + regs = onig_region_new(); + while (err >= 0) { + err = onig_search(re, (OnigUChar *)string, (OnigUChar *)string_lim, pos, (OnigUChar *)string_lim, regs, 0); + if (err <= -2) { + OnigUChar err_str[ONIG_MAX_ERROR_MESSAGE_LEN]; + onig_error_code_to_str(err_str, err); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "mbregex search failure in php_mbereg_replace_exec(): %s", err_str); + break; + } + if (err >= 0) { +#if moriyoshi_0 + if (regs->beg[0] == regs->end[0]) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty regular expression"); + break; + } +#endif + /* copy the part of the string before the match */ + smart_str_appendl(&out_buf, pos, (size_t)((OnigUChar *)(string + regs->beg[0]) - pos)); + + if (!is_callable) { + /* copy replacement and backrefs */ + i = 0; + p = replace; + while (i < replace_len) { + int fwd = (int) php_mb_mbchar_bytes_ex(p, enc); + n = -1; + if ((replace_len - i) >= 2 && fwd == 1 && + p[0] == '\\' && p[1] >= '0' && p[1] <= '9') { + n = p[1] - '0'; + } + if (n >= 0 && n < regs->num_regs) { + if (regs->beg[n] >= 0 && regs->beg[n] < regs->end[n] && regs->end[n] <= string_len) { + smart_str_appendl(pbuf, string + regs->beg[n], regs->end[n] - regs->beg[n]); + } + p += 2; + i += 2; + } else { + smart_str_appendl(pbuf, p, fwd); + p += fwd; + i += fwd; + } + } + } + + if (eval) { + zval v; + /* null terminate buffer */ + smart_str_0(&eval_buf); + /* do eval */ + if (zend_eval_stringl(eval_buf.c, eval_buf.len, &v, description TSRMLS_CC) == FAILURE) { + efree(description); + php_error_docref(NULL TSRMLS_CC,E_ERROR, "Failed evaluating code: %s%s", PHP_EOL, eval_buf.c); + /* zend_error() does not return in this case */ + } + + /* result of eval */ + convert_to_string(&v); + smart_str_appendl(&out_buf, Z_STRVAL(v), Z_STRLEN(v)); + /* Clean up */ + eval_buf.len = 0; + zval_dtor(&v); + } else if (is_callable) { + zval *retval_ptr; + zval **args[1]; + zval *subpats; + int i; + + MAKE_STD_ZVAL(subpats); + array_init(subpats); + + for (i = 0; i < regs->num_regs; i++) { + add_next_index_stringl(subpats, string + regs->beg[i], regs->end[i] - regs->beg[i], 1); + } + + args[0] = &subpats; + /* null terminate buffer */ + smart_str_0(&eval_buf); + + arg_replace_fci.param_count = 1; + arg_replace_fci.params = args; + arg_replace_fci.retval_ptr_ptr = &retval_ptr; + if (zend_call_function(&arg_replace_fci, &arg_replace_fci_cache TSRMLS_CC) == SUCCESS && arg_replace_fci.retval_ptr_ptr) { + convert_to_string_ex(&retval_ptr); + smart_str_appendl(&out_buf, Z_STRVAL_P(retval_ptr), Z_STRLEN_P(retval_ptr)); + eval_buf.len = 0; + zval_ptr_dtor(&retval_ptr); + } else { + efree(description); + if (!EG(exception)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call custom replacement function"); + } + } + zval_ptr_dtor(&subpats); + } + + n = regs->end[0]; + if ((pos - (OnigUChar *)string) < n) { + pos = (OnigUChar *)string + n; + } else { + if (pos < string_lim) { + smart_str_appendl(&out_buf, pos, 1); + } + pos++; + } + } else { /* nomatch */ + /* stick that last bit of string on our output */ + if (string_lim - pos > 0) { + smart_str_appendl(&out_buf, pos, string_lim - pos); + } + } + onig_region_free(regs, 0); + } + + if (description) { + efree(description); + } + if (regs != NULL) { + onig_region_free(regs, 1); + } + smart_str_free(&eval_buf); + + if (err <= -2) { + smart_str_free(&out_buf); + RETVAL_FALSE; + } else { + smart_str_appendc(&out_buf, '\0'); + RETVAL_STRINGL((char *)out_buf.c, out_buf.len - 1, 0); + } +} +/* }}} */ + +/* {{{ proto string mb_ereg_replace(string pattern, string replacement, string string [, string option]) + Replace regular expression for multibyte string */ +PHP_FUNCTION(mb_ereg_replace) +{ + _php_mb_regex_ereg_replace_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0, 0); +} +/* }}} */ + +/* {{{ proto string mb_eregi_replace(string pattern, string replacement, string string) + Case insensitive replace regular expression for multibyte string */ +PHP_FUNCTION(mb_eregi_replace) +{ + _php_mb_regex_ereg_replace_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, ONIG_OPTION_IGNORECASE, 0); +} +/* }}} */ + +/* {{{ proto string mb_ereg_replace_callback(string pattern, string callback, string string [, string option]) + regular expression for multibyte string using replacement callback */ +PHP_FUNCTION(mb_ereg_replace_callback) +{ + _php_mb_regex_ereg_replace_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0, 1); +} +/* }}} */ + +/* {{{ proto array mb_split(string pattern, string string [, int limit]) + split multibyte string into array by regular expression */ +PHP_FUNCTION(mb_split) +{ + char *arg_pattern; + int arg_pattern_len; + php_mb_regex_t *re; + OnigRegion *regs = NULL; + char *string; + OnigUChar *pos, *chunk_pos; + int string_len; + + int n, err; + long count = -1; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", &arg_pattern, &arg_pattern_len, &string, &string_len, &count) == FAILURE) { + RETURN_FALSE; + } + + if (count > 0) { + count--; + } + + /* create regex pattern buffer */ + if ((re = php_mbregex_compile_pattern(arg_pattern, arg_pattern_len, MBREX(regex_default_options), MBREX(current_mbctype), MBREX(regex_default_syntax) TSRMLS_CC)) == NULL) { + RETURN_FALSE; + } + + array_init(return_value); + + chunk_pos = pos = (OnigUChar *)string; + err = 0; + regs = onig_region_new(); + /* churn through str, generating array entries as we go */ + while (count != 0 && (pos - (OnigUChar *)string) < string_len) { + int beg, end; + err = onig_search(re, (OnigUChar *)string, (OnigUChar *)(string + string_len), pos, (OnigUChar *)(string + string_len), regs, 0); + if (err < 0) { + break; + } + beg = regs->beg[0], end = regs->end[0]; + /* add it to the array */ + if ((pos - (OnigUChar *)string) < end) { + if (beg < string_len && beg >= (chunk_pos - (OnigUChar *)string)) { + add_next_index_stringl(return_value, (char *)chunk_pos, ((OnigUChar *)(string + beg) - chunk_pos), 1); + --count; + } else { + err = -2; + break; + } + /* point at our new starting point */ + chunk_pos = pos = (OnigUChar *)string + end; + } else { + pos++; + } + onig_region_free(regs, 0); + } + + onig_region_free(regs, 1); + + /* see if we encountered an error */ + if (err <= -2) { + OnigUChar err_str[ONIG_MAX_ERROR_MESSAGE_LEN]; + onig_error_code_to_str(err_str, err); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "mbregex search failure in mbsplit(): %s", err_str); + zval_dtor(return_value); + RETURN_FALSE; + } + + /* otherwise we just have one last element to add to the array */ + n = ((OnigUChar *)(string + string_len) - chunk_pos); + if (n > 0) { + add_next_index_stringl(return_value, (char *)chunk_pos, n, 1); + } else { + add_next_index_stringl(return_value, "", 0, 1); + } +} +/* }}} */ + +/* {{{ proto bool mb_ereg_match(string pattern, string string [,string option]) + Regular expression match for multibyte string */ +PHP_FUNCTION(mb_ereg_match) +{ + char *arg_pattern; + int arg_pattern_len; + + char *string; + int string_len; + + php_mb_regex_t *re; + OnigSyntaxType *syntax; + OnigOptionType option = 0; + int err; + + { + char *option_str = NULL; + int option_str_len = 0; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|s", + &arg_pattern, &arg_pattern_len, &string, &string_len, + &option_str, &option_str_len)==FAILURE) { + RETURN_FALSE; + } + + if (option_str != NULL) { + _php_mb_regex_init_options(option_str, option_str_len, &option, &syntax, NULL); + } else { + option |= MBREX(regex_default_options); + syntax = MBREX(regex_default_syntax); + } + } + + if ((re = php_mbregex_compile_pattern(arg_pattern, arg_pattern_len, option, MBREX(current_mbctype), syntax TSRMLS_CC)) == NULL) { + RETURN_FALSE; + } + + /* match */ + err = onig_match(re, (OnigUChar *)string, (OnigUChar *)(string + string_len), (OnigUChar *)string, NULL, 0); + if (err >= 0) { + RETVAL_TRUE; + } else { + RETVAL_FALSE; + } +} +/* }}} */ + +/* regex search */ +/* {{{ _php_mb_regex_ereg_search_exec */ +static void +_php_mb_regex_ereg_search_exec(INTERNAL_FUNCTION_PARAMETERS, int mode) +{ + size_t argc = ZEND_NUM_ARGS(); + char *arg_pattern, *arg_options; + int arg_pattern_len, arg_options_len; + int n, i, err, pos, len, beg, end; + OnigOptionType option; + OnigUChar *str; + OnigSyntaxType *syntax; + + if (zend_parse_parameters(argc TSRMLS_CC, "|ss", &arg_pattern, &arg_pattern_len, &arg_options, &arg_options_len) == FAILURE) { + return; + } + + option = MBREX(regex_default_options); + + if (argc == 2) { + option = 0; + _php_mb_regex_init_options(arg_options, arg_options_len, &option, &syntax, NULL); + } + + if (argc > 0) { + /* create regex pattern buffer */ + if ((MBREX(search_re) = php_mbregex_compile_pattern(arg_pattern, arg_pattern_len, option, MBREX(current_mbctype), MBREX(regex_default_syntax) TSRMLS_CC)) == NULL) { + RETURN_FALSE; + } + } + + pos = MBREX(search_pos); + str = NULL; + len = 0; + if (MBREX(search_str) != NULL && Z_TYPE_P(MBREX(search_str)) == IS_STRING){ + str = (OnigUChar *)Z_STRVAL_P(MBREX(search_str)); + len = Z_STRLEN_P(MBREX(search_str)); + } + + if (MBREX(search_re) == NULL) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "No regex given"); + RETURN_FALSE; + } + + if (str == NULL) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "No string given"); + RETURN_FALSE; + } + + if (MBREX(search_regs)) { + onig_region_free(MBREX(search_regs), 1); + } + MBREX(search_regs) = onig_region_new(); + + err = onig_search(MBREX(search_re), str, str + len, str + pos, str + len, MBREX(search_regs), 0); + if (err == ONIG_MISMATCH) { + MBREX(search_pos) = len; + RETVAL_FALSE; + } else if (err <= -2) { + OnigUChar err_str[ONIG_MAX_ERROR_MESSAGE_LEN]; + onig_error_code_to_str(err_str, err); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "mbregex search failure in mbregex_search(): %s", err_str); + RETVAL_FALSE; + } else { + if (MBREX(search_regs)->beg[0] == MBREX(search_regs)->end[0]) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty regular expression"); + } + switch (mode) { + case 1: + array_init(return_value); + beg = MBREX(search_regs)->beg[0]; + end = MBREX(search_regs)->end[0]; + add_next_index_long(return_value, beg); + add_next_index_long(return_value, end - beg); + break; + case 2: + array_init(return_value); + n = MBREX(search_regs)->num_regs; + for (i = 0; i < n; i++) { + beg = MBREX(search_regs)->beg[i]; + end = MBREX(search_regs)->end[i]; + if (beg >= 0 && beg <= end && end <= len) { + add_index_stringl(return_value, i, (char *)&str[beg], end - beg, 1); + } else { + add_index_bool(return_value, i, 0); + } + } + break; + default: + RETVAL_TRUE; + break; + } + end = MBREX(search_regs)->end[0]; + if (pos < end) { + MBREX(search_pos) = end; + } else { + MBREX(search_pos) = pos + 1; + } + } + + if (err < 0) { + onig_region_free(MBREX(search_regs), 1); + MBREX(search_regs) = (OnigRegion *)NULL; + } +} +/* }}} */ + +/* {{{ proto bool mb_ereg_search([string pattern[, string option]]) + Regular expression search for multibyte string */ +PHP_FUNCTION(mb_ereg_search) +{ + _php_mb_regex_ereg_search_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); +} +/* }}} */ + +/* {{{ proto array mb_ereg_search_pos([string pattern[, string option]]) + Regular expression search for multibyte string */ +PHP_FUNCTION(mb_ereg_search_pos) +{ + _php_mb_regex_ereg_search_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); +} +/* }}} */ + +/* {{{ proto array mb_ereg_search_regs([string pattern[, string option]]) + Regular expression search for multibyte string */ +PHP_FUNCTION(mb_ereg_search_regs) +{ + _php_mb_regex_ereg_search_exec(INTERNAL_FUNCTION_PARAM_PASSTHRU, 2); +} +/* }}} */ + +/* {{{ proto bool mb_ereg_search_init(string string [, string pattern[, string option]]) + Initialize string and regular expression for search. */ +PHP_FUNCTION(mb_ereg_search_init) +{ + size_t argc = ZEND_NUM_ARGS(); + zval *arg_str; + char *arg_pattern = NULL, *arg_options = NULL; + int arg_pattern_len = 0, arg_options_len = 0; + OnigSyntaxType *syntax = NULL; + OnigOptionType option; + + if (zend_parse_parameters(argc TSRMLS_CC, "z|ss", &arg_str, &arg_pattern, &arg_pattern_len, &arg_options, &arg_options_len) == FAILURE) { + return; + } + + if (argc > 1 && arg_pattern_len == 0) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty pattern"); + RETURN_FALSE; + } + + option = MBREX(regex_default_options); + syntax = MBREX(regex_default_syntax); + + if (argc == 3) { + option = 0; + _php_mb_regex_init_options(arg_options, arg_options_len, &option, &syntax, NULL); + } + + if (argc > 1) { + /* create regex pattern buffer */ + if ((MBREX(search_re) = php_mbregex_compile_pattern(arg_pattern, arg_pattern_len, option, MBREX(current_mbctype), syntax TSRMLS_CC)) == NULL) { + RETURN_FALSE; + } + } + + if (MBREX(search_str) != NULL) { + zval_ptr_dtor(&MBREX(search_str)); + MBREX(search_str) = (zval *)NULL; + } + + MBREX(search_str) = arg_str; + Z_ADDREF_P(MBREX(search_str)); + SEPARATE_ZVAL_IF_NOT_REF(&MBREX(search_str)); + + MBREX(search_pos) = 0; + + if (MBREX(search_regs) != NULL) { + onig_region_free(MBREX(search_regs), 1); + MBREX(search_regs) = (OnigRegion *) NULL; + } + + RETURN_TRUE; +} +/* }}} */ + +/* {{{ proto array mb_ereg_search_getregs(void) + Get matched substring of the last time */ +PHP_FUNCTION(mb_ereg_search_getregs) +{ + int n, i, len, beg, end; + OnigUChar *str; + + if (MBREX(search_regs) != NULL && Z_TYPE_P(MBREX(search_str)) == IS_STRING && Z_STRVAL_P(MBREX(search_str)) != NULL) { + array_init(return_value); + + str = (OnigUChar *)Z_STRVAL_P(MBREX(search_str)); + len = Z_STRLEN_P(MBREX(search_str)); + n = MBREX(search_regs)->num_regs; + for (i = 0; i < n; i++) { + beg = MBREX(search_regs)->beg[i]; + end = MBREX(search_regs)->end[i]; + if (beg >= 0 && beg <= end && end <= len) { + add_index_stringl(return_value, i, (char *)&str[beg], end - beg, 1); + } else { + add_index_bool(return_value, i, 0); + } + } + } else { + RETVAL_FALSE; + } +} +/* }}} */ + +/* {{{ proto int mb_ereg_search_getpos(void) + Get search start position */ +PHP_FUNCTION(mb_ereg_search_getpos) +{ + RETVAL_LONG(MBREX(search_pos)); +} +/* }}} */ + +/* {{{ proto bool mb_ereg_search_setpos(int position) + Set search start position */ +PHP_FUNCTION(mb_ereg_search_setpos) +{ + long position; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &position) == FAILURE) { + return; + } + + if (position < 0 || (MBREX(search_str) != NULL && Z_TYPE_P(MBREX(search_str)) == IS_STRING && position >= Z_STRLEN_P(MBREX(search_str)))) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Position is out of range"); + MBREX(search_pos) = 0; + RETURN_FALSE; + } + + MBREX(search_pos) = position; + RETURN_TRUE; +} +/* }}} */ + +/* {{{ php_mb_regex_set_options */ +static void _php_mb_regex_set_options(OnigOptionType options, OnigSyntaxType *syntax, OnigOptionType *prev_options, OnigSyntaxType **prev_syntax TSRMLS_DC) +{ + if (prev_options != NULL) { + *prev_options = MBREX(regex_default_options); + } + if (prev_syntax != NULL) { + *prev_syntax = MBREX(regex_default_syntax); + } + MBREX(regex_default_options) = options; + MBREX(regex_default_syntax) = syntax; +} +/* }}} */ + +/* {{{ proto string mb_regex_set_options([string options]) + Set or get the default options for mbregex functions */ +PHP_FUNCTION(mb_regex_set_options) +{ + OnigOptionType opt; + OnigSyntaxType *syntax; + char *string = NULL; + int string_len; + char buf[16]; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", + &string, &string_len) == FAILURE) { + RETURN_FALSE; + } + if (string != NULL) { + opt = 0; + syntax = NULL; + _php_mb_regex_init_options(string, string_len, &opt, &syntax, NULL); + _php_mb_regex_set_options(opt, syntax, NULL, NULL TSRMLS_CC); + } else { + opt = MBREX(regex_default_options); + syntax = MBREX(regex_default_syntax); + } + _php_mb_regex_get_option_string(buf, sizeof(buf), opt, syntax); + + RETVAL_STRING(buf, 1); +} +/* }}} */ + +#endif /* HAVE_MBREGEX */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: fdm=marker + * vim: noet sw=4 ts=4 + */ diff --git a/ext/mbstring/php_mbregex.h b/ext/mbstring/php_mbregex.h new file mode 100644 index 0000000..d5ae752 --- /dev/null +++ b/ext/mbstring/php_mbregex.h @@ -0,0 +1,109 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2013 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Moriyoshi Koizumi <moriyoshi@php.net> | + +----------------------------------------------------------------------+ + */ + +/* $Id$ */ + +#ifndef _PHP_MBREGEX_H +#define _PHP_MBREGEX_H + +#if HAVE_MBREGEX + +#include "php.h" +#include "zend.h" + +/* {{{ PHP_MBREGEX_FUNCTION_ENTRIES */ +#define PHP_MBREGEX_FUNCTION_ENTRIES \ + PHP_FE(mb_regex_encoding, arginfo_mb_regex_encoding) \ + PHP_FE(mb_regex_set_options, arginfo_mb_regex_set_options) \ + PHP_FE(mb_ereg, arginfo_mb_ereg) \ + PHP_FE(mb_eregi, arginfo_mb_eregi) \ + PHP_FE(mb_ereg_replace, arginfo_mb_ereg_replace) \ + PHP_FE(mb_eregi_replace, arginfo_mb_eregi_replace) \ + PHP_FE(mb_ereg_replace_callback, arginfo_mb_ereg_replace_callback) \ + PHP_FE(mb_split, arginfo_mb_split) \ + PHP_FE(mb_ereg_match, arginfo_mb_ereg_match) \ + PHP_FE(mb_ereg_search, arginfo_mb_ereg_search) \ + PHP_FE(mb_ereg_search_pos, arginfo_mb_ereg_search_pos) \ + PHP_FE(mb_ereg_search_regs, arginfo_mb_ereg_search_regs) \ + PHP_FE(mb_ereg_search_init, arginfo_mb_ereg_search_init) \ + PHP_FE(mb_ereg_search_getregs, arginfo_mb_ereg_search_getregs) \ + PHP_FE(mb_ereg_search_getpos, arginfo_mb_ereg_search_getpos) \ + PHP_FE(mb_ereg_search_setpos, arginfo_mb_ereg_search_setpos) \ + PHP_FALIAS(mbregex_encoding, mb_regex_encoding, arginfo_mb_regex_encoding) \ + PHP_FALIAS(mbereg, mb_ereg, arginfo_mb_ereg) \ + PHP_FALIAS(mberegi, mb_eregi, arginfo_mb_eregi) \ + PHP_FALIAS(mbereg_replace, mb_ereg_replace, arginfo_mb_ereg_replace) \ + PHP_FALIAS(mberegi_replace, mb_eregi_replace, arginfo_mb_eregi_replace) \ + PHP_FALIAS(mbsplit, mb_split, arginfo_mb_split) \ + PHP_FALIAS(mbereg_match, mb_ereg_match, arginfo_mb_ereg_match) \ + PHP_FALIAS(mbereg_search, mb_ereg_search, arginfo_mb_ereg_search) \ + PHP_FALIAS(mbereg_search_pos, mb_ereg_search_pos, arginfo_mb_ereg_search_pos) \ + PHP_FALIAS(mbereg_search_regs, mb_ereg_search_regs, arginfo_mb_ereg_search_regs) \ + PHP_FALIAS(mbereg_search_init, mb_ereg_search_init, arginfo_mb_ereg_search_init) \ + PHP_FALIAS(mbereg_search_getregs, mb_ereg_search_getregs, arginfo_mb_ereg_search_getregs) \ + PHP_FALIAS(mbereg_search_getpos, mb_ereg_search_getpos, arginfo_mb_ereg_search_getpos) \ + PHP_FALIAS(mbereg_search_setpos, mb_ereg_search_setpos, arginfo_mb_ereg_search_setpos) +/* }}} */ + +#define PHP_MBREGEX_MAXCACHE 50 + +PHP_MINIT_FUNCTION(mb_regex); +PHP_MSHUTDOWN_FUNCTION(mb_regex); +PHP_RINIT_FUNCTION(mb_regex); +PHP_RSHUTDOWN_FUNCTION(mb_regex); +PHP_MINFO_FUNCTION(mb_regex); + +typedef struct _zend_mb_regex_globals zend_mb_regex_globals; + +zend_mb_regex_globals *php_mb_regex_globals_alloc(TSRMLS_D); +void php_mb_regex_globals_free(zend_mb_regex_globals *pglobals TSRMLS_DC); +int php_mb_regex_set_mbctype(const char *enc TSRMLS_DC); +int php_mb_regex_set_default_mbctype(const char *encname TSRMLS_DC); +const char *php_mb_regex_get_mbctype(TSRMLS_D); +const char *php_mb_regex_get_default_mbctype(TSRMLS_D); + +PHP_FUNCTION(mb_regex_encoding); +PHP_FUNCTION(mb_ereg); +PHP_FUNCTION(mb_eregi); +PHP_FUNCTION(mb_ereg_replace); +PHP_FUNCTION(mb_eregi_replace); +PHP_FUNCTION(mb_ereg_replace_callback); +PHP_FUNCTION(mb_split); +PHP_FUNCTION(mb_ereg_match); +PHP_FUNCTION(mb_ereg_search); +PHP_FUNCTION(mb_ereg_search_pos); +PHP_FUNCTION(mb_ereg_search_regs); +PHP_FUNCTION(mb_ereg_search_init); +PHP_FUNCTION(mb_ereg_search_getregs); +PHP_FUNCTION(mb_ereg_search_getpos); +PHP_FUNCTION(mb_ereg_search_setpos); +PHP_FUNCTION(mb_regex_set_options); + +#endif /* HAVE_MBREGEX */ + +#endif /* _PHP_MBREGEX_H */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: noet sw=4 ts=4 fdm=marker + * vim<600: noet sw=4 ts=4 + */ + diff --git a/ext/mbstring/php_onig_compat.h b/ext/mbstring/php_onig_compat.h new file mode 100644 index 0000000..c97ba0c --- /dev/null +++ b/ext/mbstring/php_onig_compat.h @@ -0,0 +1,8 @@ +#ifndef _PHP_ONIG_COMPAT_H +#define _PHP_ONIG_COMPAT_H + +#define re_pattern_buffer php_mb_re_pattern_buffer +#define regex_t php_mb_regex_t +#define re_registers php_mb_re_registers + +#endif /* _PHP_ONIG_COMPAT_H */ diff --git a/ext/mbstring/php_unicode.c b/ext/mbstring/php_unicode.c new file mode 100644 index 0000000..9380045 --- /dev/null +++ b/ext/mbstring/php_unicode.c @@ -0,0 +1,347 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2013 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Wez Furlong (wez@thebrainroom.com) | + +----------------------------------------------------------------------+ + + Based on code from ucdata-2.5, which has the following Copyright: + + Copyright 2001 Computing Research Labs, New Mexico State University + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. +*/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "php.h" +#include "php_ini.h" + +#if HAVE_MBSTRING + +/* include case folding data generated from the official UnicodeData.txt file */ +#include "mbstring.h" +#include "php_unicode.h" +#include "unicode_data.h" + +ZEND_EXTERN_MODULE_GLOBALS(mbstring) + +/* + * A simple array of 32-bit masks for lookup. + */ +static unsigned long masks32[32] = { + 0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x00000010, 0x00000020, + 0x00000040, 0x00000080, 0x00000100, 0x00000200, 0x00000400, 0x00000800, + 0x00001000, 0x00002000, 0x00004000, 0x00008000, 0x00010000, 0x00020000, + 0x00040000, 0x00080000, 0x00100000, 0x00200000, 0x00400000, 0x00800000, + 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, 0x20000000, + 0x40000000, 0x80000000 +}; + + +static int prop_lookup(unsigned long code, unsigned long n) +{ + long l, r, m; + + /* + * There is an extra node on the end of the offsets to allow this routine + * to work right. If the index is 0xffff, then there are no nodes for the + * property. + */ + if ((l = _ucprop_offsets[n]) == 0xffff) + return 0; + + /* + * Locate the next offset that is not 0xffff. The sentinel at the end of + * the array is the max index value. + */ + for (m = 1; n + m < _ucprop_size && _ucprop_offsets[n + m] == 0xffff; m++) + ; + + r = _ucprop_offsets[n + m] - 1; + + while (l <= r) { + /* + * Determine a "mid" point and adjust to make sure the mid point is at + * the beginning of a range pair. + */ + m = (l + r) >> 1; + m -= (m & 1); + if (code > _ucprop_ranges[m + 1]) + l = m + 2; + else if (code < _ucprop_ranges[m]) + r = m - 2; + else if (code >= _ucprop_ranges[m] && code <= _ucprop_ranges[m + 1]) + return 1; + } + return 0; + +} + +MBSTRING_API int php_unicode_is_prop(unsigned long code, unsigned long mask1, + unsigned long mask2) +{ + unsigned long i; + + if (mask1 == 0 && mask2 == 0) + return 0; + + for (i = 0; mask1 && i < 32; i++) { + if ((mask1 & masks32[i]) && prop_lookup(code, i)) + return 1; + } + + for (i = 32; mask2 && i < _ucprop_size; i++) { + if ((mask2 & masks32[i & 31]) && prop_lookup(code, i)) + return 1; + } + + return 0; +} + +static unsigned long case_lookup(unsigned long code, long l, long r, int field) +{ + long m; + + /* + * Do the binary search. + */ + while (l <= r) { + /* + * Determine a "mid" point and adjust to make sure the mid point is at + * the beginning of a case mapping triple. + */ + m = (l + r) >> 1; + m -= (m % 3); + if (code > _uccase_map[m]) + l = m + 3; + else if (code < _uccase_map[m]) + r = m - 3; + else if (code == _uccase_map[m]) + return _uccase_map[m + field]; + } + + return code; +} + +MBSTRING_API unsigned long php_turkish_toupper(unsigned long code, long l, long r, int field) +{ + if (code == 0x0069L) { + return 0x0130L; + } + return case_lookup(code, l, r, field); +} + +MBSTRING_API unsigned long php_turkish_tolower(unsigned long code, long l, long r, int field) +{ + if (code == 0x0049L) { + return 0x0131L; + } + return case_lookup(code, l, r, field); +} + +MBSTRING_API unsigned long php_unicode_toupper(unsigned long code, enum mbfl_no_encoding enc TSRMLS_DC) +{ + int field; + long l, r; + + if (php_unicode_is_upper(code)) + return code; + + if (php_unicode_is_lower(code)) { + /* + * The character is lower case. + */ + field = 2; + l = _uccase_len[0]; + r = (l + _uccase_len[1]) - 3; + + if (enc == mbfl_no_encoding_8859_9) { + return php_turkish_toupper(code, l, r, field); + } + + } else { + /* + * The character is title case. + */ + field = 1; + l = _uccase_len[0] + _uccase_len[1]; + r = _uccase_size - 3; + } + return case_lookup(code, l, r, field); +} + +MBSTRING_API unsigned long php_unicode_tolower(unsigned long code, enum mbfl_no_encoding enc TSRMLS_DC) +{ + int field; + long l, r; + + if (php_unicode_is_lower(code)) + return code; + + if (php_unicode_is_upper(code)) { + /* + * The character is upper case. + */ + field = 1; + l = 0; + r = _uccase_len[0] - 3; + + if (enc == mbfl_no_encoding_8859_9) { + return php_turkish_tolower(code, l, r, field); + } + + } else { + /* + * The character is title case. + */ + field = 2; + l = _uccase_len[0] + _uccase_len[1]; + r = _uccase_size - 3; + } + return case_lookup(code, l, r, field); +} + +MBSTRING_API unsigned long php_unicode_totitle(unsigned long code, enum mbfl_no_encoding enc TSRMLS_DC) +{ + int field; + long l, r; + + if (php_unicode_is_title(code)) + return code; + + /* + * The offset will always be the same for converting to title case. + */ + field = 2; + + if (php_unicode_is_upper(code)) { + /* + * The character is upper case. + */ + l = 0; + r = _uccase_len[0] - 3; + } else { + /* + * The character is lower case. + */ + l = _uccase_len[0]; + r = (l + _uccase_len[1]) - 3; + } + return case_lookup(code, l, r, field); + +} + + +#define BE_ARY_TO_UINT32(ptr) (\ + ((unsigned char*)(ptr))[0]<<24 |\ + ((unsigned char*)(ptr))[1]<<16 |\ + ((unsigned char*)(ptr))[2]<< 8 |\ + ((unsigned char*)(ptr))[3] ) + +#define UINT32_TO_BE_ARY(ptr,val) { \ + unsigned int v = val; \ + ((unsigned char*)(ptr))[0] = (v>>24) & 0xff,\ + ((unsigned char*)(ptr))[1] = (v>>16) & 0xff,\ + ((unsigned char*)(ptr))[2] = (v>> 8) & 0xff,\ + ((unsigned char*)(ptr))[3] = (v ) & 0xff;\ +} + +MBSTRING_API char *php_unicode_convert_case(int case_mode, const char *srcstr, size_t srclen, size_t *ret_len, + const char *src_encoding TSRMLS_DC) +{ + char *unicode, *newstr; + size_t unicode_len; + unsigned char *unicode_ptr; + size_t i; + enum mbfl_no_encoding _src_encoding = mbfl_name2no_encoding(src_encoding); + + if (_src_encoding == mbfl_no_encoding_invalid) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown encoding \"%s\"", src_encoding); + return NULL; + } + + unicode = php_mb_convert_encoding(srcstr, srclen, "UCS-4BE", src_encoding, &unicode_len TSRMLS_CC); + if (unicode == NULL) + return NULL; + + unicode_ptr = (unsigned char *)unicode; + + switch(case_mode) { + case PHP_UNICODE_CASE_UPPER: + for (i = 0; i < unicode_len; i+=4) { + UINT32_TO_BE_ARY(&unicode_ptr[i], + php_unicode_toupper(BE_ARY_TO_UINT32(&unicode_ptr[i]), _src_encoding TSRMLS_CC)); + } + break; + + case PHP_UNICODE_CASE_LOWER: + for (i = 0; i < unicode_len; i+=4) { + UINT32_TO_BE_ARY(&unicode_ptr[i], + php_unicode_tolower(BE_ARY_TO_UINT32(&unicode_ptr[i]), _src_encoding TSRMLS_CC)); + } + break; + + case PHP_UNICODE_CASE_TITLE: { + int mode = 0; + + for (i = 0; i < unicode_len; i+=4) { + int res = php_unicode_is_prop( + BE_ARY_TO_UINT32(&unicode_ptr[i]), + UC_MN|UC_ME|UC_CF|UC_LM|UC_SK|UC_LU|UC_LL|UC_LT|UC_PO|UC_OS, 0); + if (mode) { + if (res) { + UINT32_TO_BE_ARY(&unicode_ptr[i], + php_unicode_tolower(BE_ARY_TO_UINT32(&unicode_ptr[i]), _src_encoding TSRMLS_CC)); + } else { + mode = 0; + } + } else { + if (res) { + mode = 1; + UINT32_TO_BE_ARY(&unicode_ptr[i], + php_unicode_totitle(BE_ARY_TO_UINT32(&unicode_ptr[i]), _src_encoding TSRMLS_CC)); + } + } + } + } break; + + } + + newstr = php_mb_convert_encoding(unicode, unicode_len, src_encoding, "UCS-4BE", ret_len TSRMLS_CC); + efree(unicode); + + return newstr; +} + + +#endif /* HAVE_MBSTRING */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: sw=4 ts=4 fdm=marker + * vim<600: sw=4 ts=4 + */ diff --git a/ext/mbstring/php_unicode.h b/ext/mbstring/php_unicode.h new file mode 100644 index 0000000..b1e395c --- /dev/null +++ b/ext/mbstring/php_unicode.h @@ -0,0 +1,201 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2013 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Wez Furlong (wez@thebrainroom.com) | + +----------------------------------------------------------------------+ + + Based on code from ucdata-2.5, which has the following Copyright: + + Copyright 2001 Computing Research Labs, New Mexico State University + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. +*/ + +#ifndef PHP_UNICODE_H +#define PHP_UNICODE_H + +#if HAVE_MBSTRING +/* + * Values that can appear in the `mask1' parameter of the php_unicode_is_prop() + * function. + */ +#define UC_MN 0x00000001 /* Mark, Non-Spacing */ +#define UC_MC 0x00000002 /* Mark, Spacing Combining */ +#define UC_ME 0x00000004 /* Mark, Enclosing */ +#define UC_ND 0x00000008 /* Number, Decimal Digit */ +#define UC_NL 0x00000010 /* Number, Letter */ +#define UC_NO 0x00000020 /* Number, Other */ +#define UC_ZS 0x00000040 /* Separator, Space */ +#define UC_ZL 0x00000080 /* Separator, Line */ +#define UC_ZP 0x00000100 /* Separator, Paragraph */ +#define UC_CC 0x00000200 /* Other, Control */ +#define UC_CF 0x00000400 /* Other, Format */ +#define UC_OS 0x00000800 /* Other, Surrogate */ +#define UC_CO 0x00001000 /* Other, Private Use */ +#define UC_CN 0x00002000 /* Other, Not Assigned */ +#define UC_LU 0x00004000 /* Letter, Uppercase */ +#define UC_LL 0x00008000 /* Letter, Lowercase */ +#define UC_LT 0x00010000 /* Letter, Titlecase */ +#define UC_LM 0x00020000 /* Letter, Modifier */ +#define UC_LO 0x00040000 /* Letter, Other */ +#define UC_PC 0x00080000 /* Punctuation, Connector */ +#define UC_PD 0x00100000 /* Punctuation, Dash */ +#define UC_PS 0x00200000 /* Punctuation, Open */ +#define UC_PE 0x00400000 /* Punctuation, Close */ +#define UC_PO 0x00800000 /* Punctuation, Other */ +#define UC_SM 0x01000000 /* Symbol, Math */ +#define UC_SC 0x02000000 /* Symbol, Currency */ +#define UC_SK 0x04000000 /* Symbol, Modifier */ +#define UC_SO 0x08000000 /* Symbol, Other */ +#define UC_L 0x10000000 /* Left-To-Right */ +#define UC_R 0x20000000 /* Right-To-Left */ +#define UC_EN 0x40000000 /* European Number */ +#define UC_ES 0x80000000 /* European Number Separator */ + +/* + * Values that can appear in the `mask2' parameter of the php_unicode_is_prop() + * function. + */ +#define UC_ET 0x00000001 /* European Number Terminator */ +#define UC_AN 0x00000002 /* Arabic Number */ +#define UC_CS 0x00000004 /* Common Number Separator */ +#define UC_B 0x00000008 /* Block Separator */ +#define UC_S 0x00000010 /* Segment Separator */ +#define UC_WS 0x00000020 /* Whitespace */ +#define UC_ON 0x00000040 /* Other Neutrals */ +/* + * Implementation specific character properties. + */ +#define UC_CM 0x00000080 /* Composite */ +#define UC_NB 0x00000100 /* Non-Breaking */ +#define UC_SY 0x00000200 /* Symmetric */ +#define UC_HD 0x00000400 /* Hex Digit */ +#define UC_QM 0x00000800 /* Quote Mark */ +#define UC_MR 0x00001000 /* Mirroring */ +#define UC_SS 0x00002000 /* Space, other */ + +#define UC_CP 0x00004000 /* Defined */ + +/* + * Added for UnicodeData-2.1.3. + */ +#define UC_PI 0x00008000 /* Punctuation, Initial */ +#define UC_PF 0x00010000 /* Punctuation, Final */ + +MBSTRING_API int php_unicode_is_prop(unsigned long code, unsigned long mask1, + unsigned long mask2); +MBSTRING_API char *php_unicode_convert_case(int case_mode, const char *srcstr, size_t srclen, size_t *retlen, + const char *src_encoding TSRMLS_DC); + +#define PHP_UNICODE_CASE_UPPER 0 +#define PHP_UNICODE_CASE_LOWER 1 +#define PHP_UNICODE_CASE_TITLE 2 + +#define php_unicode_is_alpha(cc) php_unicode_is_prop(cc, UC_LU|UC_LL|UC_LM|UC_LO|UC_LT, 0) +#define php_unicode_is_digit(cc) php_unicode_is_prop(cc, UC_ND, 0) +#define php_unicode_is_alnum(cc) php_unicode_is_prop(cc, UC_LU|UC_LL|UC_LM|UC_LO|UC_LT|UC_ND, 0) +#define php_unicode_is_cntrl(cc) php_unicode_is_prop(cc, UC_CC|UC_CF, 0) +#define php_unicode_is_space(cc) php_unicode_is_prop(cc, UC_ZS|UC_SS, 0) +#define php_unicode_is_blank(cc) php_unicode_is_prop(cc, UC_ZS, 0) +#define php_unicode_is_punct(cc) php_unicode_is_prop(cc, UC_PD|UC_PS|UC_PE|UC_PO, UC_PI|UC_PF) +#define php_unicode_is_graph(cc) php_unicode_is_prop(cc, UC_MN|UC_MC|UC_ME|UC_ND|UC_NL|UC_NO|\ + UC_LU|UC_LL|UC_LT|UC_LM|UC_LO|UC_PC|UC_PD|\ + UC_PS|UC_PE|UC_PO|UC_SM|UC_SM|UC_SC|UC_SK|\ + UC_SO, UC_PI|UC_PF) +#define php_unicode_is_print(cc) php_unicode_is_prop(cc, UC_MN|UC_MC|UC_ME|UC_ND|UC_NL|UC_NO|\ + UC_LU|UC_LL|UC_LT|UC_LM|UC_LO|UC_PC|UC_PD|\ + UC_PS|UC_PE|UC_PO|UC_SM|UC_SM|UC_SC|UC_SK|\ + UC_SO|UC_ZS, UC_PI|UC_PF) +#define php_unicode_is_upper(cc) php_unicode_is_prop(cc, UC_LU, 0) +#define php_unicode_is_lower(cc) php_unicode_is_prop(cc, UC_LL, 0) +#define php_unicode_is_title(cc) php_unicode_is_prop(cc, UC_LT, 0) +#define php_unicode_is_xdigit(cc) php_unicode_is_prop(cc, 0, UC_HD) + +#define php_unicode_is_isocntrl(cc) php_unicode_is_prop(cc, UC_CC, 0) +#define php_unicode_is_fmtcntrl(cc) php_unicode_is_prop(cc, UC_CF, 0) + +#define php_unicode_is_symbol(cc) php_unicode_is_prop(cc, UC_SM|UC_SC|UC_SO|UC_SK, 0) +#define php_unicode_is_number(cc) php_unicode_is_prop(cc, UC_ND|UC_NO|UC_NL, 0) +#define php_unicode_is_nonspacing(cc) php_unicode_is_prop(cc, UC_MN, 0) +#define php_unicode_is_openpunct(cc) php_unicode_is_prop(cc, UC_PS, 0) +#define php_unicode_is_closepunct(cc) php_unicode_is_prop(cc, UC_PE, 0) +#define php_unicode_is_initialpunct(cc) php_unicode_is_prop(cc, 0, UC_PI) +#define php_unicode_is_finalpunct(cc) php_unicode_is_prop(cc, 0, UC_PF) + +#define php_unicode_is_composite(cc) php_unicode_is_prop(cc, 0, UC_CM) +#define php_unicode_is_hex(cc) php_unicode_is_prop(cc, 0, UC_HD) +#define php_unicode_is_quote(cc) php_unicode_is_prop(cc, 0, UC_QM) +#define php_unicode_is_symmetric(cc) php_unicode_is_prop(cc, 0, UC_SY) +#define php_unicode_is_mirroring(cc) php_unicode_is_prop(cc, 0, UC_MR) +#define php_unicode_is_nonbreaking(cc) php_unicode_is_prop(cc, 0, UC_NB) + +/* + * Directionality macros. + */ +#define php_unicode_is_rtl(cc) php_unicode_is_prop(cc, UC_R, 0) +#define php_unicode_is_ltr(cc) php_unicode_is_prop(cc, UC_L, 0) +#define php_unicode_is_strong(cc) php_unicode_is_prop(cc, UC_L|UC_R, 0) +#define php_unicode_is_weak(cc) php_unicode_is_prop(cc, UC_EN|UC_ES, UC_ET|UC_AN|UC_CS) +#define php_unicode_is_neutral(cc) php_unicode_is_prop(cc, 0, UC_B|UC_S|UC_WS|UC_ON) +#define php_unicode_is_separator(cc) php_unicode_is_prop(cc, 0, UC_B|UC_S) + +/* + * Other macros inspired by John Cowan. + */ +#define php_unicode_is_mark(cc) php_unicode_is_prop(cc, UC_MN|UC_MC|UC_ME, 0) +#define php_unicode_is_modif(cc) php_unicode_is_prop(cc, UC_LM, 0) +#define php_unicode_is_letnum(cc) php_unicode_is_prop(cc, UC_NL, 0) +#define php_unicode_is_connect(cc) php_unicode_is_prop(cc, UC_PC, 0) +#define php_unicode_is_dash(cc) php_unicode_is_prop(cc, UC_PD, 0) +#define php_unicode_is_math(cc) php_unicode_is_prop(cc, UC_SM, 0) +#define php_unicode_is_currency(cc) php_unicode_is_prop(cc, UC_SC, 0) +#define php_unicode_is_modifsymbol(cc) php_unicode_is_prop(cc, UC_SK, 0) +#define php_unicode_is_nsmark(cc) php_unicode_is_prop(cc, UC_MN, 0) +#define php_unicode_is_spmark(cc) php_unicode_is_prop(cc, UC_MC, 0) +#define php_unicode_is_enclosing(cc) php_unicode_is_prop(cc, UC_ME, 0) +#define php_unicode_is_private(cc) php_unicode_is_prop(cc, UC_CO, 0) +#define php_unicode_is_surrogate(cc) php_unicode_is_prop(cc, UC_OS, 0) +#define php_unicode_is_lsep(cc) php_unicode_is_prop(cc, UC_ZL, 0) +#define php_unicode_is_psep(cc) php_unicode_is_prop(cc, UC_ZP, 0) + +#define php_unicode_is_identstart(cc) php_unicode_is_prop(cc, UC_LU|UC_LL|UC_LT|UC_LO|UC_NL, 0) +#define php_unicode_is_identpart(cc) php_unicode_is_prop(cc, UC_LU|UC_LL|UC_LT|UC_LO|UC_NL|\ + UC_MN|UC_MC|UC_ND|UC_PC|UC_CF, 0) + +#define php_unicode_is_defined(cc) php_unicode_is_prop(cc, 0, UC_CP) +#define php_unicode_is_undefined(cc) !php_unicode_is_prop(cc, 0, UC_CP) + +/* + * Other miscellaneous character property macros. + */ +#define php_unicode_is_han(cc) (((cc) >= 0x4e00 && (cc) <= 0x9fff) ||\ + ((cc) >= 0xf900 && (cc) <= 0xfaff)) +#define php_unicode_is_hangul(cc) ((cc) >= 0xac00 && (cc) <= 0xd7ff) + + +#endif + + +#endif /* PHP_UNICODE_H */ + + + diff --git a/ext/mbstring/tests/bug20087.phpt b/ext/mbstring/tests/bug20087.phpt new file mode 100644 index 0000000..01bcc90 --- /dev/null +++ b/ext/mbstring/tests/bug20087.phpt @@ -0,0 +1,22 @@ +--TEST-- +Bug #20087 (Assertion failure) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FAIL-- +register_globals calls killed the ability for mb_parse_str() to register into the global scope +--FILE-- +<?php +ini_set('include_path', dirname(__FILE__)); +include_once('common.inc'); +$testmoo = "blah blah"; +var_dump(mb_parse_str("testmoo")); +var_dump($testmoo); +var_dump(mb_parse_str("test=moo")); +var_dump($test); +?> +--EXPECT-- +bool(true) +string(0) "" +bool(true) +string(3) "moo" + diff --git a/ext/mbstring/tests/bug25140.phpt b/ext/mbstring/tests/bug25140.phpt new file mode 100644 index 0000000..0b20912 --- /dev/null +++ b/ext/mbstring/tests/bug25140.phpt @@ -0,0 +1,10 @@ +--TEST-- +Bug #25140 (mb_convert_encoding returns FALSE on an empty string) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +var_dump( mb_convert_encoding( '', 'SJIS', 'EUC-JP' ) ); +?> +--EXPECT-- +string(0) "" diff --git a/ext/mbstring/tests/bug26639.phpt b/ext/mbstring/tests/bug26639.phpt new file mode 100644 index 0000000..a87e912 --- /dev/null +++ b/ext/mbstring/tests/bug26639.phpt @@ -0,0 +1,123 @@ +--TEST-- +Bug #26639 (mb_convert_variables() clutters variables beyond the references) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +$a = "‚ ‚¢‚¤‚¦‚¨"; +$b = $a; +mb_convert_variables("EUC-JP", "Shift_JIS", $b); +debug_zval_dump($a); +debug_zval_dump($b); +unset($a); +unset($b); + +$a = "‚ ‚¢‚¤‚¦‚¨"; +$b = &$a; +mb_convert_variables("EUC-JP", "Shift_JIS", $b); +debug_zval_dump($a); +debug_zval_dump($b); +unset($a); +unset($b); + +$a = "‚ ‚¢‚¤‚¦‚¨"; +$b = array($a); +$c = $b; +mb_convert_variables("EUC-JP", "Shift_JIS", $c); +debug_zval_dump($b); +debug_zval_dump($c); +unset($a); +unset($b); +unset($c); + +$a = "‚ ‚¢‚¤‚¦‚¨"; +$b = array(&$a); +$c = $b; +mb_convert_variables("EUC-JP", "Shift_JIS", $c); +debug_zval_dump($b); +debug_zval_dump($c); +unset($a); +unset($b); +unset($c); + +$a = "‚ ‚¢‚¤‚¦‚¨"; +$b = array($a); +$c = &$b; +mb_convert_variables("EUC-JP", "Shift_JIS", $c); +debug_zval_dump($b); +debug_zval_dump($c); +unset($a); +unset($b); +unset($c); + +$a = "‚ ‚¢‚¤‚¦‚¨"; +$b = array(&$a); +$c = &$b; +mb_convert_variables("EUC-JP", "Shift_JIS", $c); +debug_zval_dump($b); +debug_zval_dump($c); +unset($a); +unset($b); +unset($c); + +$a = array(array("‚ ‚¢‚¤‚¦‚¨")); +$b = $a; +$c = $b; +mb_convert_variables("EUC-JP", "Shift_JIS", $c); +debug_zval_dump($b); +debug_zval_dump($c); +unset($a); +unset($b); +unset($c); +?> +--EXPECT-- +string(10) "‚ ‚¢‚¤‚¦‚¨" refcount(2) +string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(2) +string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(1) +string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(1) +array(1) refcount(2){ + [0]=> + string(10) "‚ ‚¢‚¤‚¦‚¨" refcount(2) +} +array(1) refcount(2){ + [0]=> + string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(1) +} +array(1) refcount(2){ + [0]=> + &string(10) "‚ ‚¢‚¤‚¦‚¨" refcount(2) +} +array(1) refcount(2){ + [0]=> + string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(1) +} +array(1) refcount(1){ + [0]=> + string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(2) +} +array(1) refcount(1){ + [0]=> + string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(2) +} +array(1) refcount(1){ + [0]=> + string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(2) +} +array(1) refcount(1){ + [0]=> + string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(2) +} +array(1) refcount(3){ + [0]=> + array(1) refcount(1){ + [0]=> + string(10) "‚ ‚¢‚¤‚¦‚¨" refcount(1) + } +} +array(1) refcount(2){ + [0]=> + array(1) refcount(1){ + [0]=> + string(10) "¤¢¤¤¤¦¤¨¤ª" refcount(1) + } +} diff --git a/ext/mbstring/tests/bug28220.phpt b/ext/mbstring/tests/bug28220.phpt new file mode 100644 index 0000000..527fdc6 --- /dev/null +++ b/ext/mbstring/tests/bug28220.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug #28220 (mb_strwidth() returns wrong width values for some Hangul characters) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +$coderange = array( + range(0x0000, 0x1fff), + range(0xff60, 0xff9f) +); + + +foreach ($coderange as $r) { + $ng = 0; + foreach ($r as $c) { + if (mb_strwidth(pack('N1', $c), 'UCS-4BE') != 2) { + $ng++; + } + } + echo "$ng\n"; +} +?> +--EXPECT-- +8085 +63 diff --git a/ext/mbstring/tests/bug30549.phpt b/ext/mbstring/tests/bug30549.phpt new file mode 100644 index 0000000..a6007e0 --- /dev/null +++ b/ext/mbstring/tests/bug30549.phpt @@ -0,0 +1,31 @@ +--TEST-- +Bug #30549 (incorrect character translations for some ISO8859 charsets) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +test('ISO-8859-7', array(0xa4 => 0x20ac, 0xa5 => 0x20af, 0xaa => 0x037a)); +test('ISO-8859-8', array(0xaf => 0x00af, 0xfd => 0x200e, 0xfe => 0x200f)); +test('ISO-8859-10', array(0xa4 => 0x012a )); + +function test($enc, $map) { + print "$enc\n"; + + foreach($map as $fromc => $toc) { + $ustr = mb_convert_encoding(pack('C', $fromc), 'UCS-4BE', $enc); + foreach (unpack('Nc', $ustr) as $unic); + printf("0x%04x, 0x%04x\n", $toc, $unic); + } +} +?> +--EXPECT-- +ISO-8859-7 +0x20ac, 0x20ac +0x20af, 0x20af +0x037a, 0x037a +ISO-8859-8 +0x00af, 0x00af +0x200e, 0x200e +0x200f, 0x200f +ISO-8859-10 +0x012a, 0x012a diff --git a/ext/mbstring/tests/bug31911.phpt b/ext/mbstring/tests/bug31911.phpt new file mode 100644 index 0000000..48d4971 --- /dev/null +++ b/ext/mbstring/tests/bug31911.phpt @@ -0,0 +1,13 @@ +--TEST-- +Bug #31911 (mb_decode_mimeheader() is case-sensitive to hex escapes) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +echo mb_decode_mimeheader("Works: =?iso-8859-1?q?=3F=3F=3F?="); +echo "\n"; +echo mb_decode_mimeheader("Fails: =?iso-8859-1?q?=3f=3f=3f?=") +?> +--EXPECT-- +Works: ??? +Fails: ??? diff --git a/ext/mbstring/tests/bug40685.phpt b/ext/mbstring/tests/bug40685.phpt new file mode 100644 index 0000000..1a673e5 --- /dev/null +++ b/ext/mbstring/tests/bug40685.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug #40685 (mb_decode_numericentity() removes '&' in the string) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +$map = array(0, 0x10FFFF, 0, 0xFFFFFF); +var_dump(mb_decode_numericentity('&', $map, 'UTF-8')); +var_dump(mb_decode_numericentity('&&&', $map, 'UTF-8')); +var_dump(mb_decode_numericentity('&#', $map, 'UTF-8')); +var_dump(mb_decode_numericentity('&#x', $map, 'UTF-8')); +var_dump(mb_decode_numericentity('=', $map, 'UTF-8')); +var_dump(mb_decode_numericentity('=', $map, 'UTF-8')); +var_dump(mb_decode_numericentity('=', $map, 'UTF-8')); +var_dump(mb_decode_numericentity('=', $map, 'UTF-8')); +?> +--EXPECTF-- +string(1) "&" +string(3) "&&&" +string(2) "&#" +string(3) "&#x" +string(4) "=" +string(5) "=" +string(1) "=" +string(1) "=" diff --git a/ext/mbstring/tests/bug43301.phpt b/ext/mbstring/tests/bug43301.phpt new file mode 100644 index 0000000..2a5f748 --- /dev/null +++ b/ext/mbstring/tests/bug43301.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #43301 (mb_ereg*_replace() crashes when replacement string is invalid PHP expression and 'e' option is used) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php + +$ptr = 'hello'; + +$txt = <<<doc +hello, I have got a cr*sh on you +doc; + +echo mb_ereg_replace($ptr,'$1',$txt,'e'); + +?> +--EXPECTF-- +Parse error: syntax error, unexpected %s, expecting %s or '$' in %sbug43301.php(%d) : mbregex replace on line %d + +Fatal error: mb_ereg_replace(): Failed evaluating code: +$1 in %sbug43301.php on line %d diff --git a/ext/mbstring/tests/bug43840.phpt b/ext/mbstring/tests/bug43840.phpt new file mode 100644 index 0000000..626cd70 --- /dev/null +++ b/ext/mbstring/tests/bug43840.phpt @@ -0,0 +1,75 @@ +--TEST-- +Test mb_strpos() function : mb_strpos bounds check is byte count rather than a character count +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strpos') or die("skip mb_strpos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strpos(string $haystack, string $needle [, int $offset [, string $encoding]]) + * Description: Find position of first occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + */ + +/* + * mb_strpos bounds check is byte count rather than a character count: + * The multibyte string should be returning the same results as the ASCII string. + * Multibyte string was not returning error message until offset was passed the + * byte count of the string. Should return error message when passed character count. + */ + +$offsets = array(20, 21, 22, 53, 54); +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); +$needle = base64_decode('44CC'); + +foreach($offsets as $i) { + echo "\n-- Offset is $i --\n"; + echo "--Multibyte String:--\n"; + var_dump( mb_strpos($string_mb, $needle, $i, 'UTF-8') ); + echo"--ASCII String:--\n"; + var_dump(mb_strpos(b'This is na English ta', b'a', $i)); +} +?> +--EXPECTF-- +-- Offset is 20 -- +--Multibyte String:-- +int(20) +--ASCII String:-- +int(20) + +-- Offset is 21 -- +--Multibyte String:-- +bool(false) +--ASCII String:-- +bool(false) + +-- Offset is 22 -- +--Multibyte String:-- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) +--ASCII String:-- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) + +-- Offset is 53 -- +--Multibyte String:-- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) +--ASCII String:-- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) + +-- Offset is 54 -- +--Multibyte String:-- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) +--ASCII String:-- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) diff --git a/ext/mbstring/tests/bug43841.phpt b/ext/mbstring/tests/bug43841.phpt new file mode 100644 index 0000000..9f25832 --- /dev/null +++ b/ext/mbstring/tests/bug43841.phpt @@ -0,0 +1,85 @@ +--TEST-- +Test mb_strrpos() function : mb_strrpos offset is byte count for negative values +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrpos') or die("skip mb_strrpos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strrpos(string $haystack, string $needle [, int $offset [, string $encoding]]) + * Description: Find position of last occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test that mb_strrpos offset is byte count for negative values (should be character count) + */ + +$offsets = array(-25, -24, -13, -12); +$string_mb = +base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvv +JfvvJjvvJnjgII='); +$needle = base64_decode('44CC'); + +foreach ($offsets as $i) { + echo "\n-- Offset is $i --\n"; + echo "Multibyte String:\n"; + var_dump( mb_strrpos($string_mb, $needle, $i, 'UTF-8') ); + echo "ASCII String:\n"; + echo "mb_strrpos:\n"; + var_dump(mb_strrpos(b'This is na English ta', b'a', $i)); + echo "strrpos:\n"; + var_dump(strrpos(b'This is na English ta', b'a', $i)); +} +?> + +--EXPECTF-- + +-- Offset is -25 -- +Multibyte String: + +Warning: mb_strrpos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) +ASCII String: +mb_strrpos: + +Warning: mb_strrpos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) +strrpos: + +Warning: strrpos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) + +-- Offset is -24 -- +Multibyte String: + +Warning: mb_strrpos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) +ASCII String: +mb_strrpos: + +Warning: mb_strrpos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) +strrpos: + +Warning: strrpos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) + +-- Offset is -13 -- +Multibyte String: +bool(false) +ASCII String: +mb_strrpos: +bool(false) +strrpos: +bool(false) + +-- Offset is -12 -- +Multibyte String: +int(9) +ASCII String: +mb_strrpos: +int(9) +strrpos: +int(9) diff --git a/ext/mbstring/tests/bug43993.phpt b/ext/mbstring/tests/bug43993.phpt new file mode 100644 index 0000000..662045d --- /dev/null +++ b/ext/mbstring/tests/bug43993.phpt @@ -0,0 +1,26 @@ +--TEST-- +Bug #43993 (mb_substr_count() behaves differently to substr_count() with overlapping needles) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +var_dump(mb_substr_count("abcabcabca", "abcabc")); +var_dump(mb_substr_count("abcabcabca", "abc")); +var_dump(mb_substr_count("abcabcabca", "cab")); +var_dump(mb_substr_count("abcabcabca", "bca")); +var_dump(mb_substr_count("ababababab", "ba")); +var_dump(mb_substr_count("ababababab", "ab")); +var_dump(mb_substr_count("ababababab", "bc")); +var_dump(mb_substr_count("aaaaaaaaaa", "a")); +var_dump(mb_substr_count("aaaaaaaaaa", "b")); +?> +--EXPECT-- +int(1) +int(3) +int(2) +int(3) +int(4) +int(5) +int(0) +int(10) +int(0) diff --git a/ext/mbstring/tests/bug43994.phpt b/ext/mbstring/tests/bug43994.phpt new file mode 100644 index 0000000..8fdb904 --- /dev/null +++ b/ext/mbstring/tests/bug43994.phpt @@ -0,0 +1,129 @@ +--TEST-- +Test mb_ereg() function : mb_ereg 'successfully' matching incorrectly +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_ereg(string $pattern, string $string [, array $registers]) + * Description: Regular expression match for multibyte string + * Source code: ext/mbstring/php_mbregex.c + */ + +/* + * mb_ereg 'successfully' matching incorrectly: + * Bug now seems to be fixed - error message is now generated when an 'empty' + * pattern is supplied to mb_ereg. Similar error message to ereg(). + */ + +$unset_var = 10; +unset ($unset_var); +$inputs = array(NULL, null, false, FALSE, "", '', @$undefined_var, +@$unset_var); + +$iterator = 1; +foreach($inputs as $input) { + if(@is_array($mb_regs)){ + $mb_regs = ''; + } + echo "\n-- Iteration $iterator --\n"; + echo "Without \$regs arg:\n"; + var_dump( mb_ereg($input, 'hello, world') ); + echo "With \$regs arg:\n"; + var_dump(mb_ereg($input, 'hello, world', $mb_regs)); + var_dump($mb_regs); + $iterator++; +}; +?> + +--EXPECTF-- + +-- Iteration 1 -- +Without $regs arg: + +Warning: mb_ereg(): empty pattern in %s on line %d +bool(false) +With $regs arg: + +Warning: mb_ereg(): empty pattern in %s on line %d +bool(false) +NULL + +-- Iteration 2 -- +Without $regs arg: + +Warning: mb_ereg(): empty pattern in %s on line %d +bool(false) +With $regs arg: + +Warning: mb_ereg(): empty pattern in %s on line %d +bool(false) +NULL + +-- Iteration 3 -- +Without $regs arg: + +Warning: mb_ereg(): empty pattern in %s on line %d +bool(false) +With $regs arg: + +Warning: mb_ereg(): empty pattern in %s on line %d +bool(false) +NULL + +-- Iteration 4 -- +Without $regs arg: + +Warning: mb_ereg(): empty pattern in %s on line %d +bool(false) +With $regs arg: + +Warning: mb_ereg(): empty pattern in %s on line %d +bool(false) +NULL + +-- Iteration 5 -- +Without $regs arg: + +Warning: mb_ereg(): empty pattern in %s on line %d +bool(false) +With $regs arg: + +Warning: mb_ereg(): empty pattern in %s on line %d +bool(false) +NULL + +-- Iteration 6 -- +Without $regs arg: + +Warning: mb_ereg(): empty pattern in %s on line %d +bool(false) +With $regs arg: + +Warning: mb_ereg(): empty pattern in %s on line %d +bool(false) +NULL + +-- Iteration 7 -- +Without $regs arg: + +Warning: mb_ereg(): empty pattern in %s on line %d +bool(false) +With $regs arg: + +Warning: mb_ereg(): empty pattern in %s on line %d +bool(false) +NULL + +-- Iteration 8 -- +Without $regs arg: + +Warning: mb_ereg(): empty pattern in %s on line %d +bool(false) +With $regs arg: + +Warning: mb_ereg(): empty pattern in %s on line %d +bool(false) +NULL diff --git a/ext/mbstring/tests/bug43998.phpt b/ext/mbstring/tests/bug43998.phpt new file mode 100644 index 0000000..da5e599 --- /dev/null +++ b/ext/mbstring/tests/bug43998.phpt @@ -0,0 +1,71 @@ +--TEST-- +Test mb_strtolower() function : Two error messages returned for incorrect encoding for mb_strto[upper|lower] +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strtolower') or die("skip mb_strtolower() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strto[lower|upper](string $sourcestring [, string $encoding]) + * Description: Returns a [lower|upper]cased version of $sourcestring + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Two error messages returned for incorrect encoding for mb_strto[upper|lower] + * Bug now appears to be fixed + */ + +$sourcestring = 'Hello, World'; + +$inputs = array(12345, 12.3456789000E-10, true, false, ""); +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_strtolower($sourcestring, $input) ); + var_dump( mb_strtoupper($sourcestring, $input) ); + $iterator++; +}; +?> +--EXPECTF-- + +-- Iteration 1 -- + +Warning: mb_strtolower(): Unknown encoding "12345" in %s on line %d +bool(false) + +Warning: mb_strtoupper(): Unknown encoding "12345" in %s on line %d +bool(false) + +-- Iteration 2 -- + +Warning: mb_strtolower(): Unknown encoding "1.23456789E-9" in %s on line %d +bool(false) + +Warning: mb_strtoupper(): Unknown encoding "1.23456789E-9" in %s on line %d +bool(false) + +-- Iteration 3 -- + +Warning: mb_strtolower(): Unknown encoding "1" in %s on line %d +bool(false) + +Warning: mb_strtoupper(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 4 -- + +Warning: mb_strtolower(): Unknown encoding "" in %s on line %d +bool(false) + +Warning: mb_strtoupper(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 5 -- + +Warning: mb_strtolower(): Unknown encoding "" in %s on line %d +bool(false) + +Warning: mb_strtoupper(): Unknown encoding "" in %s on line %d +bool(false) diff --git a/ext/mbstring/tests/bug45239.phpt b/ext/mbstring/tests/bug45239.phpt new file mode 100644 index 0000000..8d8ef48 --- /dev/null +++ b/ext/mbstring/tests/bug45239.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #45239 (encoding detector hangs with mbstring.strict_detection enabled) +--INI-- +mbstring.strict_detection=1 +mbstring.http_input=UTF-8 +mbstring.internal_encoding=UTF-8 +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +?> +--FILE-- +<?php +mb_internal_encoding("utf-8"); +mb_parse_str("a=%fc", $dummy); +var_dump(mb_http_input()); +?> +--EXPECT-- +string(5) "UTF-8" diff --git a/ext/mbstring/tests/bug45722.phpt b/ext/mbstring/tests/bug45722.phpt new file mode 100644 index 0000000..97f6fe5 --- /dev/null +++ b/ext/mbstring/tests/bug45722.phpt @@ -0,0 +1,10 @@ +--TEST-- +Bug #45722 (mb_check_encoding() crashes) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +var_dump(mb_check_encoding("&\xc2\xb7 TEST TEST TEST TEST TEST TEST", "HTML-ENTITIES")); +?> +--EXPECT-- +bool(false) diff --git a/ext/mbstring/tests/bug45923.phpt b/ext/mbstring/tests/bug45923.phpt new file mode 100644 index 0000000..2d184ab --- /dev/null +++ b/ext/mbstring/tests/bug45923.phpt @@ -0,0 +1,202 @@ +--TEST-- +Bug #45923 (mb_st[r]ripos() offset not handled correctly) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.internal_encoding=UTF-8 +--FILE-- +<?php +var_dump(strpos("abc abc abc", "abc", 0)); +var_dump(strpos("abc abc abc", "abc", 3)); +var_dump(strpos("abc abc abc", "abc", 6)); +var_dump(strpos("abc abc abc", "abc", 9)); +var_dump(strpos("abc abc abc", "abc", 11)); +var_dump(strpos("abc abc abc", "abc", 12)); +var_dump(strpos("abc abc abc", "abc", -1)); +var_dump(strpos("abc abc abc", "abc", -3)); +var_dump(strpos("abc abc abc", "abc", -6)); + +var_dump(mb_strpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 0)); +var_dump(mb_strpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 3)); +var_dump(mb_strpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 6)); +var_dump(mb_strpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 9)); +var_dump(mb_strpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 11)); +var_dump(mb_strpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 12)); +var_dump(mb_strpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -1)); +var_dump(mb_strpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -3)); +var_dump(mb_strpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -6)); + +var_dump(stripos("abc abc abc", "abc", 0)); +var_dump(stripos("abc abc abc", "abc", 3)); +var_dump(stripos("abc abc abc", "abc", 6)); +var_dump(stripos("abc abc abc", "abc", 9)); +var_dump(stripos("abc abc abc", "abc", 11)); +var_dump(stripos("abc abc abc", "abc", 12)); +var_dump(stripos("abc abc abc", "abc", -1)); +var_dump(stripos("abc abc abc", "abc", -3)); +var_dump(stripos("abc abc abc", "abc", -6)); + +var_dump(mb_stripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 0)); +var_dump(mb_stripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 3)); +var_dump(mb_stripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 6)); +var_dump(mb_stripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 9)); +var_dump(mb_stripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 11)); +var_dump(mb_stripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 12)); +var_dump(mb_stripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -1)); +var_dump(mb_stripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -3)); +var_dump(mb_stripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -6)); + +var_dump(strrpos("abc abc abc", "abc", 0)); +var_dump(strrpos("abc abc abc", "abc", 3)); +var_dump(strrpos("abc abc abc", "abc", 6)); +var_dump(strrpos("abc abc abc", "abc", 9)); +var_dump(strrpos("abc abc abc", "abc", 11)); +var_dump(strrpos("abc abc abc", "abc", 12)); +var_dump(strrpos("abc abc abc", "abc", -1)); +var_dump(strrpos("abc abc abc", "abc", -3)); +var_dump(strrpos("abc abc abc", "abc", -6)); + +var_dump(mb_strrpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 0)); +var_dump(mb_strrpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 3)); +var_dump(mb_strrpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 6)); +var_dump(mb_strrpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 9)); +var_dump(mb_strrpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 11)); +var_dump(mb_strrpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 12)); +var_dump(mb_strrpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -1)); +var_dump(mb_strrpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -3)); +var_dump(mb_strrpos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -6)); + +var_dump(strripos("abc abc abc", "abc", 0)); +var_dump(strripos("abc abc abc", "abc", 3)); +var_dump(strripos("abc abc abc", "abc", 6)); +var_dump(strripos("abc abc abc", "abc", 9)); +var_dump(strripos("abc abc abc", "abc", 11)); +var_dump(strripos("abc abc abc", "abc", 12)); +var_dump(strripos("abc abc abc", "abc", -1)); +var_dump(strripos("abc abc abc", "abc", -3)); +var_dump(strripos("abc abc abc", "abc", -6)); + +var_dump(mb_strripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 0)); +var_dump(mb_strripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 3)); +var_dump(mb_strripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 6)); +var_dump(mb_strripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 9)); +var_dump(mb_strripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 11)); +var_dump(mb_strripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", 12)); +var_dump(mb_strripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -1)); +var_dump(mb_strripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -3)); +var_dump(mb_strripos("â—â—‹â—† â—â—‹â—† â—â—‹â—†", "â—â—‹â—†", -6)); + +?> +--EXPECTF-- +int(0) +int(4) +int(8) +bool(false) +bool(false) + +Warning: strpos(): Offset not contained in string in %s on line %d +bool(false) + +Warning: strpos(): Offset not contained in string in %s on line %d +bool(false) + +Warning: strpos(): Offset not contained in string in %s on line %d +bool(false) + +Warning: strpos(): Offset not contained in string in %s on line %d +bool(false) +int(0) +int(4) +int(8) +bool(false) +bool(false) + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) +int(0) +int(4) +int(8) +bool(false) +bool(false) + +Warning: stripos(): Offset not contained in string in %s on line %d +bool(false) + +Warning: stripos(): Offset not contained in string in %s on line %d +bool(false) + +Warning: stripos(): Offset not contained in string in %s on line %d +bool(false) + +Warning: stripos(): Offset not contained in string in %s on line %d +bool(false) +int(0) +int(4) +int(8) +bool(false) +bool(false) + +Warning: mb_stripos(): Offset not contained in string in %s on line %d +bool(false) + +Warning: mb_stripos(): Offset not contained in string in %s on line %d +bool(false) + +Warning: mb_stripos(): Offset not contained in string in %s on line %d +bool(false) + +Warning: mb_stripos(): Offset not contained in string in %s on line %d +bool(false) +int(8) +int(8) +int(8) +bool(false) +bool(false) + +Warning: strrpos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) +int(8) +int(8) +int(4) +int(8) +int(8) +int(8) +bool(false) +bool(false) + +Warning: mb_strrpos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) +int(8) +int(8) +int(4) +int(8) +int(8) +int(8) +bool(false) +bool(false) + +Warning: strripos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) +int(8) +int(8) +int(4) +int(8) +int(8) +int(8) +bool(false) +bool(false) + +Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) +int(8) +int(8) +int(4) diff --git a/ext/mbstring/tests/bug46806.phpt b/ext/mbstring/tests/bug46806.phpt new file mode 100644 index 0000000..eec44b5 --- /dev/null +++ b/ext/mbstring/tests/bug46806.phpt @@ -0,0 +1,16 @@ +--TEST-- +Bug #46806 (mb_wtrimwidth cutting to early) +--CREDITS-- +Sebastian Schürmann +sebs@php.net +Testfest 2009 +--SKIPIF-- +<?php if (!extension_loaded("mbstring")) die("skip mbstring is not available"); ?> +--FILE-- +<?php +echo mb_strimwidth('helloworld', 0, 5, '...', 'UTF-8') . "\n"; +echo mb_strimwidth('hello', 0, 5, '...', 'UTF-8'); +?> +--EXPECT-- +he... +hello diff --git a/ext/mbstring/tests/bug46843.phpt b/ext/mbstring/tests/bug46843.phpt new file mode 100644 index 0000000..136195c --- /dev/null +++ b/ext/mbstring/tests/bug46843.phpt @@ -0,0 +1,12 @@ +--TEST-- +Bug #46843 (CP936 euro symbol is not converted properly) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +var_dump(bin2hex(mb_convert_encoding("\x80", 'UCS-2BE', 'CP936'))); +var_dump(bin2hex(mb_convert_encoding("\x20\xac", 'CP936', 'UCS-2BE'))); +?> +--EXPECT-- +string(4) "20ac" +string(2) "80" diff --git a/ext/mbstring/tests/bug47399.phpt b/ext/mbstring/tests/bug47399.phpt new file mode 100644 index 0000000..3586e5c --- /dev/null +++ b/ext/mbstring/tests/bug47399.phpt @@ -0,0 +1,525 @@ +--TEST-- +Bug #47399 (mb_check_encoding() returns true for some illegal SJIS characters) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +foreach (array("Shift_JIS", "CP932") as $enc) { + for ($a = 0; $a < 256; $a++) { + var_dump(mb_check_encoding("\x81".pack("c", $a), $enc)); + } +} +?> +--EXPECT-- +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(false) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(false) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(true) +bool(false) +bool(false) +bool(false) diff --git a/ext/mbstring/tests/bug48645.phpt b/ext/mbstring/tests/bug48645.phpt new file mode 100644 index 0000000..6185442 --- /dev/null +++ b/ext/mbstring/tests/bug48645.phpt @@ -0,0 +1,162 @@ +--TEST-- +Bug #48645 (mb_convert_encoding() doesn't understand hexadecimal html-entities) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +var_dump(bin2hex(mb_convert_encoding("�", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("	", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("
", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("
", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("
", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("
", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("&#x/;", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("&#x:;", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("&#x@;", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("&#x`;", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("&#xG;", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("&#xg;", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("&#x;", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("�", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("	", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("
", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("
", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("
", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("
", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("&#X/;", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("&#X:;", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("&#X@;", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("&#X`;", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("&#XG;", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("&#Xg;", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("&#X;", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("�", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("	", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("&#/;", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("&#:;", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("&#;", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("�", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("�", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("", "UTF-8", "HTML-ENTITIES"))); +var_dump(bin2hex(mb_convert_encoding("�", "UTF-8", "HTML-ENTITIES"))); +?> +--EXPECT-- +string(2) "00" +string(2) "01" +string(2) "02" +string(2) "03" +string(2) "04" +string(2) "05" +string(2) "06" +string(2) "07" +string(2) "08" +string(2) "09" +string(2) "0a" +string(2) "0b" +string(2) "0c" +string(2) "0d" +string(2) "0e" +string(2) "0f" +string(2) "0a" +string(2) "0b" +string(2) "0c" +string(2) "0d" +string(2) "0e" +string(2) "0f" +string(10) "2623782f3b" +string(10) "2623783a3b" +string(10) "262378403b" +string(10) "262378603b" +string(10) "262378473b" +string(10) "262378673b" +string(8) "2623783b" +string(2) "00" +string(2) "01" +string(2) "02" +string(2) "03" +string(2) "04" +string(2) "05" +string(2) "06" +string(2) "07" +string(2) "08" +string(2) "09" +string(2) "0a" +string(2) "0b" +string(2) "0c" +string(2) "0d" +string(2) "0e" +string(2) "0f" +string(2) "0a" +string(2) "0b" +string(2) "0c" +string(2) "0d" +string(2) "0e" +string(2) "0f" +string(10) "2623582f3b" +string(10) "2623583a3b" +string(10) "262358403b" +string(10) "262358603b" +string(10) "262358473b" +string(10) "262358673b" +string(8) "2623583b" +string(2) "00" +string(2) "01" +string(2) "02" +string(2) "03" +string(2) "04" +string(2) "05" +string(2) "06" +string(2) "07" +string(2) "08" +string(2) "09" +string(8) "26232f3b" +string(8) "26233a3b" +string(6) "26233b" +string(8) "f48fbfbf" +string(20) "2623783131303030303b" +string(8) "f48fbfbf" +string(20) "2623583131303030303b" +string(8) "f48fbfbf" +string(20) "2623313131343131323b" diff --git a/ext/mbstring/tests/bug48697.phpt b/ext/mbstring/tests/bug48697.phpt new file mode 100644 index 0000000..42bbe9f --- /dev/null +++ b/ext/mbstring/tests/bug48697.phpt @@ -0,0 +1,24 @@ +--TEST-- +Bug #48697 (mb_internal_encoding() value gets reset by parse_str() or mb_parse_str() +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +ini_set('mbstring.internal_encoding', 'ISO-8859-15'); +ini_set('mbstring.encoding_translation', true); +var_dump(mb_internal_encoding()); +mb_internal_encoding('UTF-8'); +var_dump(mb_internal_encoding()); +parse_str('a=b'); +var_dump(mb_internal_encoding()); +mb_internal_encoding('UTF-8'); +var_dump(mb_internal_encoding()); +parse_str('a=b'); +var_dump(mb_internal_encoding()); +?> +--EXPECT-- +string(11) "ISO-8859-15" +string(5) "UTF-8" +string(5) "UTF-8" +string(5) "UTF-8" +string(5) "UTF-8" diff --git a/ext/mbstring/tests/bug49354.phpt b/ext/mbstring/tests/bug49354.phpt new file mode 100644 index 0000000..c25b405 --- /dev/null +++ b/ext/mbstring/tests/bug49354.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #49354 (mb_strcut() cuts wrong length when offset is in the middle of a multibyte character) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +$crap = 'AåBäCöDü'; +var_dump(mb_strcut($crap, 0, 100, 'UTF-8')); +var_dump(mb_strcut($crap, 1, 100, 'UTF-8')); +var_dump(mb_strcut($crap, 2, 100, 'UTF-8')); +var_dump(mb_strcut($crap, 3, 100, 'UTF-8')); +var_dump(mb_strcut($crap, 12, 100, 'UTF-8')); +var_dump(mb_strcut($crap, 13, 100, 'UTF-8')); +?> +--EXPECT-- +string(12) "AåBäCöDü" +string(11) "åBäCöDü" +string(11) "åBäCöDü" +string(9) "BäCöDü" +string(0) "" +bool(false) diff --git a/ext/mbstring/tests/bug49528.phpt b/ext/mbstring/tests/bug49528.phpt new file mode 100644 index 0000000..b06c35f --- /dev/null +++ b/ext/mbstring/tests/bug49528.phpt @@ -0,0 +1,20 @@ +--TEST-- +Bug #49528 (UTF-16 strings prefixed by BOM wrongly converted) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +var_dump(bin2hex(mb_convert_encoding("\xff\xfe\x01\x02\x03\x04", "UCS-2BE", "UTF-16"))); +var_dump(bin2hex(mb_convert_encoding("\xfe\xff\x01\x02\x03\x04", "UCS-2BE", "UTF-16"))); +var_dump(bin2hex(mb_convert_encoding("\xff\xfe\xff\xfe\x01\x02\x03\x04", "UCS-2BE", "UTF-16"))); +var_dump(bin2hex(mb_convert_encoding("\xff\xfe\xfe\xff\x01\x02\x03\x04", "UCS-2BE", "UTF-16"))); +var_dump(bin2hex(mb_convert_encoding("\xfe\xff\xff\xfe\x01\x02\x03\x04", "UCS-2BE", "UTF-16"))); +var_dump(bin2hex(mb_convert_encoding("\xfe\xff\xfe\xff\x01\x02\x03\x04", "UCS-2BE", "UTF-16"))); +?> +--EXPECT-- +string(8) "02010403" +string(8) "01020304" +string(12) "feff02010403" +string(12) "fffe02010403" +string(12) "fffe01020304" +string(12) "feff01020304" diff --git a/ext/mbstring/tests/bug49536.phpt b/ext/mbstring/tests/bug49536.phpt new file mode 100644 index 0000000..40328f7 --- /dev/null +++ b/ext/mbstring/tests/bug49536.phpt @@ -0,0 +1,20 @@ +--TEST-- +Bug #49536 (mb_detect_encoding() returns incorrect results when strict_mode is turned on) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +// non-strict mode +var_dump(mb_detect_encoding("A\x81", "SJIS", false)); +// strict mode +var_dump(mb_detect_encoding("A\x81", "SJIS", true)); +// non-strict mode +var_dump(mb_detect_encoding("\xc0\x00", "UTF-8", false)); +// strict mode +var_dump(mb_detect_encoding("\xc0\x00", "UTF-8", true)); +?> +--EXPECT-- +string(4) "SJIS" +bool(false) +bool(false) +bool(false) diff --git a/ext/mbstring/tests/bug52861.phpt b/ext/mbstring/tests/bug52861.phpt new file mode 100644 index 0000000..dc1914d --- /dev/null +++ b/ext/mbstring/tests/bug52861.phpt @@ -0,0 +1,29 @@ +--TEST-- +Bug #52681 (mb_send_mail() appends an extra MIME-Version header) +--SKIPIF-- +<?php +if (substr(PHP_OS, 0, 3) == 'WIN') { + die('skip.. Not valid for Windows'); +} +if (!function_exists("mb_send_mail") || !mb_language("neutral")) { + die("skip mb_send_mail() not available"); +} +?> +--INI-- +sendmail_path=/bin/cat +mail.add_x_header=off +--FILE-- +<?php +$to = 'example@example.com'; +$headers = 'MIME-Version: 2.0'; + +mb_send_mail($to, mb_language(), "test", $headers); +?> +--EXPECTF-- +To: example@example.com +Subject: %s +MIME-Version: 2.0 +Content-Type: text/plain; charset=%s +Content-Transfer-Encoding: %s + +%s diff --git a/ext/mbstring/tests/bug52931.phpt b/ext/mbstring/tests/bug52931.phpt new file mode 100644 index 0000000..52efd03 --- /dev/null +++ b/ext/mbstring/tests/bug52931.phpt @@ -0,0 +1,24 @@ +--TEST-- +Bug #52931 (strripos not overloaded with function overloading enabled) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.func_overload = 7 +mbstring.internal_encoding = utf-8 +--FILE-- +<?php + +$string = '<body>Umlauttest öüä</body>'; + +var_dump(strlen($string)); +var_dump(mb_strlen($string)); + +var_dump(strripos($string, '</body>')); +var_dump(mb_strripos($string, '</body>')); + +?> +--EXPECTF-- +int(27) +int(27) +int(20) +int(20) diff --git a/ext/mbstring/tests/bug52981.phpt b/ext/mbstring/tests/bug52981.phpt new file mode 100644 index 0000000..fe96a56 --- /dev/null +++ b/ext/mbstring/tests/bug52981.phpt @@ -0,0 +1,23 @@ +--TEST--
+Bug #52981 (Unicode properties are outdated (from Unicode 3.2))
+--SKIPIF--
+<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
+--FILE--
+<?php
+function test($str)
+{
+ $upper = mb_strtoupper($str, 'UTF-8');
+ $len = strlen($upper);
+ for ($i = 0; $i < $len; ++$i) echo dechex(ord($upper[$i])) . ' ';
+ echo "\n";
+}
+
+// OK
+test("\xF0\x90\x90\xB8");// U+10438 DESERET SMALL LETTER H (added in 3.1.0, March 2001)
+// not OK
+test("\xE2\xB0\xB0"); // U+2C30 GLAGOLITIC SMALL LETTER AZU (added in 4.1.0, March 2005)
+test("\xD4\xA5"); // U+0525 CYRILLIC SMALL LETTER PE WITH DESCENDER (added in 5.2.0, October 2009)
+--EXPECTF--
+f0 90 90 90
+e2 b0 80
+d4 a4
diff --git a/ext/mbstring/tests/bug54494.phpt b/ext/mbstring/tests/bug54494.phpt new file mode 100644 index 0000000..3d7206c --- /dev/null +++ b/ext/mbstring/tests/bug54494.phpt @@ -0,0 +1,52 @@ +--TEST-- +Bug #54494: mb_substr() mishandles UTF-32LE and UCS-2LE +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php + +//declare(encoding = 'UTF-8'); +mb_internal_encoding('UTF-8'); + +header('Content-Type: text/plain; charset=UTF-32LE'); + +$stringOr = "hällö wörld\n"; + +$mode = "UTF-32LE"; + +echo "$mode:\n"; + +$string = mb_convert_encoding($stringOr, $mode); +$length = mb_strlen($string, $mode); +echo "Length: ", $length, "\n"; + + +for ($i=0; $i < $length; $i++) { + $t = unpack("H*",mb_substr($string, $i, 1, $mode)); + echo $t[1]; +} +echo "\n"; + + +$mode = "UCS-2LE"; + +echo "$mode:\n"; + +$string = mb_convert_encoding($stringOr, $mode); +$length = mb_strlen($string, $mode); +echo "Length: ", $length, "\n"; + + +for ($i=0; $i < $length; $i++) { + $t = unpack("H*",mb_substr($string, $i, 1, $mode)); + echo $t[1]; +} +echo "\n"; +--EXPECT-- +UTF-32LE: +Length: 12 +68000000e40000006c0000006c000000f60000002000000077000000f6000000720000006c000000640000000a000000 +UCS-2LE: +Length: 12 +6800e4006c006c00f60020007700f60072006c0064000a00 + diff --git a/ext/mbstring/tests/bug60306.phpt b/ext/mbstring/tests/bug60306.phpt new file mode 100644 index 0000000..f7969e1 --- /dev/null +++ b/ext/mbstring/tests/bug60306.phpt @@ -0,0 +1,11 @@ +--TEST-- +Bug #60306 (Characters lost while converting from cp936 to utf8) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +$s = "æ´ªä»çŽ•"; +var_dump($s === mb_convert_encoding(mb_convert_encoding($s, "cp936", "utf8"), "utf8", "cp936")); +?> +--EXPECT-- +bool(true) diff --git a/ext/mbstring/tests/bug63447_001.phpt b/ext/mbstring/tests/bug63447_001.phpt new file mode 100644 index 0000000..5130299 --- /dev/null +++ b/ext/mbstring/tests/bug63447_001.phpt @@ -0,0 +1,20 @@ +--TEST-- +Bug #63447 (max_input_vars doesn't filter variables when mbstring.encoding_translation = On) +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +?> +--INI-- +max_input_nesting_level=10 +max_input_vars=5 +mbstring.encoding_translation=1 +--POST-- +a=1&b=2&c=3&d=4&e=5&f=6 +--FILE-- +<?php +var_dump($_POST); +?> +--EXPECT-- +Warning: Unknown: Input variables exceeded 5. To increase the limit change max_input_vars in php.ini. in Unknown on line 0 +array(0) { +} diff --git a/ext/mbstring/tests/bug63447_002.phpt b/ext/mbstring/tests/bug63447_002.phpt new file mode 100644 index 0000000..e51089b --- /dev/null +++ b/ext/mbstring/tests/bug63447_002.phpt @@ -0,0 +1,20 @@ +--TEST-- +Bug #63447 (max_input_vars doesn't filter variables when mbstring.encoding_translation = On) +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +?> +--INI-- +max_input_nesting_level=10 +max_input_vars=4 +mbstring.encoding_translation=1 +--POST-- +a=1&b=2&c=3&d=4&e=5 +--FILE-- +<?php +var_dump($_POST); +?> +--EXPECT-- +Warning: Unknown: Input variables exceeded 4. To increase the limit change max_input_vars in php.ini. in Unknown on line 0 +array(0) { +} diff --git a/ext/mbstring/tests/bug63447_003.phpt b/ext/mbstring/tests/bug63447_003.phpt new file mode 100644 index 0000000..a4a7e14 --- /dev/null +++ b/ext/mbstring/tests/bug63447_003.phpt @@ -0,0 +1,34 @@ +--TEST-- +Bug #63447 (max_input_vars doesn't filter variables when mbstring.encoding_translation = On) +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +?> +--INI-- +max_input_nesting_level=5 +max_input_vars=100 +mbstring.encoding_translation=1 +--POST-- +a=1&b[][][]=2&c[][][][][][]=7 +--FILE-- +<?php +print_r($_POST); +?> +--EXPECT-- +Array +( + [a] => 1 + [b] => Array + ( + [0] => Array + ( + [0] => Array + ( + [0] => 2 + ) + + ) + + ) + +) diff --git a/ext/mbstring/tests/casefold.phpt b/ext/mbstring/tests/casefold.phpt new file mode 100644 index 0000000..977b0bb --- /dev/null +++ b/ext/mbstring/tests/casefold.phpt @@ -0,0 +1,24 @@ +--TEST-- +mb_strtoupper() / mb_strtolower() +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +function_exists('mb_strtolower') and +function_exists('mb_convert_case' ) or die("skip mb_convert_case() is not available"); +?> +--INI-- +output_handler= +--FILE-- +<?php + mb_internal_encoding( 'ISO-8859-1' ); + print mb_strtolower( "ABCDEFGHIJKLMNOPQRSTUVWXYZ\n" ); + print mb_strtoupper( mb_strtolower( "ABCDEFGHIJKLMNOPQRSTUVWXYZ\n" ) ); + print mb_strtoupper( "äëï\n" ); + print mb_convert_case( "äëï\n", MB_CASE_TITLE ); +?> + +--EXPECT-- +abcdefghijklmnopqrstuvwxyz +ABCDEFGHIJKLMNOPQRSTUVWXYZ +ÄËÏ +Äëï diff --git a/ext/mbstring/tests/common.inc b/ext/mbstring/tests/common.inc new file mode 100644 index 0000000..1df6341 --- /dev/null +++ b/ext/mbstring/tests/common.inc @@ -0,0 +1,55 @@ +<?php +/* + * Common definition and Settings + */ + +// Custom Error Hanlder for testing +function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { + global $debug; + + $err_type = array ( + 1 => "Error", // E_ERROR + 2 => "Warning", // E_WARINING + 4 => "Parsing Error", // E_PARSE + 8 => "Notice", // E_NOTICE + 16 => "Core Error", // E_CORE_ERROR + 32 => "Core Warning", // E_CORE_WARNING + 64 => "Compile Error", // E_COMPILE_ERROR + 128 => "Compile Warning", // E_COMPILE_WARNING + 256 => "User Error", // E_USER_ERROR + 512 => "User Warning", // E_USER_WARMING + 1024=> "User Notice", // E_USER_NOTICE + 2048=> "Strict Notice", // E_STRICT + 4096=> "Catchable fatal error", // E_RECOVERABLE_ERROR + ); + + if (!empty($debug)) { + printf("%s: %s (%d)\n", $err_type[$err_no], $err_msg, $linenum); + } + else { + printf("ERR: %s\n",$err_type[$err_no]); + } +} + +set_error_handler('test_error_handler'); + + +// Var def for testing +$t_ary = array( + 's1' => 'ÆüËܸìEUC-JP¤Îʸ»úÎó', + 's2' => 'English Text' + ); + +class tc +{ + public $s1 = 'ÆüËܸìEUC-JP¤Îʸ»úÎó'; + public $s2 = 'English Text'; + + function tc() + { + } +} + +$t_obj = new tc; + +?> diff --git a/ext/mbstring/tests/empty_pattern.phpt b/ext/mbstring/tests/empty_pattern.phpt new file mode 100644 index 0000000..10b0330 --- /dev/null +++ b/ext/mbstring/tests/empty_pattern.phpt @@ -0,0 +1,16 @@ +--TEST-- +Check for empty pattern +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php + +mb_ereg_search_init("","",""); +mb_split("",""); +mb_ereg_search_regs(); + +?> +--EXPECTF-- +Warning: mb_ereg_search_init(): Empty pattern in %s on line %d + +Warning: mb_ereg_search_regs(): No regex given in %s on line %d diff --git a/ext/mbstring/tests/htmlent.phpt b/ext/mbstring/tests/htmlent.phpt new file mode 100644 index 0000000..5af96c7 --- /dev/null +++ b/ext/mbstring/tests/htmlent.phpt @@ -0,0 +1,42 @@ +--TEST-- +HTML input/output +--SKIPIF-- +<?php + ini_set('include_path', dirname(__FILE__)); + extension_loaded('mbstring') or die('skip mbstring not available'); +?> +--INI-- +output_buffering=4096 +output_handler=mb_output_handler +zlib.output_compression= +arg_separator.input=x +error_reporting=0 +mbstring.http_input=HTML-ENTITIES +mbstring.internal_encoding=UTF-8 +mbstring.http_output=HTML-ENTITIES +mbstring.encoding_translation=1 +filter.default=unsafe_raw +--FILE-- +<?php +// enable output encoding through output handler +//ob_start("mb_output_handler"); +// @... are must be decoded on input these are not reencoded on output. +// If you see @AB on output this means input encoding fails. +// If you do not see ä... on output this means output encoding fails. +// Using UTF-8 internally allows to encode/decode ALL characters. +// &128... will stay as they are since their character codes are above 127 +// and they do not have a named entity representaion. +?> +<?php echo mb_http_input('l').'>'.mb_internal_encoding().'>'.mb_http_output();?> + +<?php mb_parse_str("test=&@AB€‚äöü€⟨⟩", $test); +print_r($test); +?> +===DONE=== +--EXPECT-- +HTML-ENTITIES>UTF-8>HTML-ENTITIES +Array +( + [test] => &@AB€‚äöü€⟨⟩ +) +===DONE=== diff --git a/ext/mbstring/tests/illformed_utf_sequences.phpt b/ext/mbstring/tests/illformed_utf_sequences.phpt new file mode 100644 index 0000000..b5b9d94 --- /dev/null +++ b/ext/mbstring/tests/illformed_utf_sequences.phpt @@ -0,0 +1,217 @@ +--TEST-- +Unicode standard conformance test (ill-formed UTF sequences.) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +function chk_enc($str, $n, $enc = "UTF-8", $with_bom = false) { + $src = bin2hex(mb_convert_encoding($str, "UCS-4BE", $enc)); + $dst = str_repeat("0000fffd", $n); + if ($with_bom) { + $dst = "0000feff" . $dst; + } + if ($dst == $src) { + return false; + } else { + return $src; + } +} + +mb_substitute_character(0xfffd); + + +echo "UTF-8 redundancy\n"; +var_dump(chk_enc("\x31\x32\x33", 0)); +var_dump(chk_enc("\x41\x42\x43", 0)); +var_dump(chk_enc("\xc0\xb1\xc0\xb2\xc0\xb3", 6)); +var_dump(chk_enc("\xc1\x81\xc1\x82\xc1\x83", 6)); +var_dump(chk_enc("\xe0\x80\xb1\xe0\x80\xb2\xe0\x80\xb3", 6)); +var_dump(chk_enc("\xe0\x81\x81\xe0\x81\x82\xe0\x81\x83", 6)); +var_dump(chk_enc("\xf0\x80\x80\xb1\xf0\x80\x80\xb2\xf0\x80\x80\xb3", 9)); +var_dump(chk_enc("\xf0\x80\x81\x81\xf0\x80\x81\x82\xf0\x81\x83", 8)); +var_dump(chk_enc("\xf8\x80\x80\x80\xb1\xf8\x80\x80\x80\xb2\xf8\x80\x80\x80\xb3", 15)); +var_dump(chk_enc("\xf8\x80\x80\x81\x81\xf8\x80\x80\x81\x82\xf8\x80\x80\x81\x83", 15)); +var_dump(chk_enc("\xfc\x80\x80\x80\x80\xb1\xfc\x80\x80\x80\x80\xb2\xfc\x80\x80\x80\x80\xb3", 18)); +var_dump(chk_enc("\xfc\x80\x80\x80\x81\x81\xfc\x80\x80\x80\x81\x82\xfc\x80\x80\x80\x81\x83", 18)); + +var_dump(chk_enc("\xc2\xa2\xc2\xa3\xc2\xa5", 0)); +var_dump(chk_enc("\xe0\x82\xa2\xe0\x82\xa3\xe0\x82\xa5", 6)); +var_dump(chk_enc("\xf0\x80\x82\xa2\xf0\x80\x82\xa3\xf0\x80\x82\xa5", 9)); +var_dump(chk_enc("\xf8\x80\x80\x82\xa2\xf8\x80\x80\x82\xa3\xf8\x80\x80\x82\xa5", 15)); +var_dump(chk_enc("\xfc\x80\x80\x80\x82\xa2\xfc\x80\x80\x80\x82\xa3\xfc\x80\x80\x80\x82\xa5", 18)); + +var_dump(chk_enc("\xc1\xbf", 2)); +var_dump(chk_enc("\xc2\x80", 0)); +var_dump(chk_enc("\xdf\xbf", 0)); +var_dump(chk_enc("\xe0\x9f\xff", 2)); +var_dump(chk_enc("\xe0\xa0\x80", 2)); +var_dump(chk_enc("\xef\xbf\xbf", 0)); +var_dump(chk_enc("\xf0\x8f\xbf\xbf", 3)); +var_dump(chk_enc("\xf0\x90\x80\x80", 0)); +var_dump(chk_enc("\xf7\xbf\xbf\xbf", 4)); +var_dump(chk_enc("\xf8\x87\xbf\xbf\xbf", 5)); +var_dump(chk_enc("\xf8\x88\x80\x80\x80", 5)); +var_dump(chk_enc("\xfb\xbf\xbf\xbf\xbf", 5)); +var_dump(chk_enc("\xfc\x83\xbf\xbf\xbf\xbf", 6)); +var_dump(chk_enc("\xfc\x84\x80\x80\x80\x80", 6)); +var_dump(chk_enc("\xfd\xaf\xbf\xbf\xbf\xbf", 6)); +var_dump(chk_enc("\xfd\xbf\xbf\xbf\xbf\xbf", 6)); + +echo "UTF-8 and surrogates area\n"; +$out = ''; +$cnt = 0; +for ($i = 0xd7ff; $i <= 0xe000; ++$i) { + $s = chk_enc(pack('C3', 0xe0 | ($i >> 12), 0x80 | ($i >> 6) & 0x3f, 0x80 | $i & 0x3f), 2); + if ($s === false) { + $cnt++; + } else { + $out .= $s; + } +} +var_dump($cnt); +var_dump($out); + +echo "UTF-32 code range\n"; +var_dump(chk_enc("\x00\x11\x00\x00", 1, "UTF-32BE")); +var_dump(chk_enc("\x00\x10\xff\xff", 0, "UTF-32BE")); +var_dump(chk_enc("\x00\x00\x11\x00", 1, "UTF-32LE")); +var_dump(chk_enc("\xff\xff\x10\x00", 0, "UTF-32LE")); +var_dump(chk_enc("\x00\x11\x00\x00", 1, "UTF-32")); +var_dump(chk_enc("\x00\x10\xff\xff", 0, "UTF-32")); +var_dump(chk_enc("\x00\x00\xfe\xff\x00\x11\x00\x00", 0, "UTF-32")); +var_dump(chk_enc("\x00\x00\xfe\xff\x00\x10\xff\xff", 0, "UTF-32")); +var_dump(chk_enc("\xff\xfe\x00\x00\x00\x00\x11\x00", 0, "UTF-32")); +var_dump(chk_enc("\xff\xfe\x00\x00\xff\xff\x10\x00", 0, "UTF-32")); + +echo "UTF-32 and surrogates area\n"; +$out = ''; +$cnt = 0; +for ($i = 0xd7ff; $i <= 0xe000; ++$i) { + $s = chk_enc(pack('C4', $i >> 24, ($i >> 16) & 0xff, ($i >> 8) & 0xff, $i & 0xff), 1, "UTF-32BE"); + if ($s === false) { + $cnt++; + } else { + $out .= $s; + } +} +var_dump($cnt); +var_dump($out); + +$out = ''; +$cnt = 0; +for ($i = 0xd7ff; $i <= 0xe000; ++$i) { + $s = chk_enc(pack('C4', $i & 0xff, ($i >> 8) & 0xff, ($i >> 16) & 0xff, ($i >> 24) & 0xff), 1, "UTF-32LE"); + if ($s === false) { + $cnt++; + } else { + $out .= $s; + } +} +var_dump($cnt); +var_dump($out); + +$out = ''; +$cnt = 0; +for ($i = 0xd7ff; $i <= 0xe000; ++$i) { + $s = chk_enc(pack('C4', $i >> 24, ($i >> 16) & 0xff, ($i >> 8) & 0xff, $i & 0xff), 1, "UTF-32"); + if ($s === false) { + $cnt++; + } else { + $out .= $s; + } +} +var_dump($cnt); +var_dump($out); + +echo "UTF-32 and surrogates area with BOM\n"; + +$out = ''; +$cnt = 0; +for ($i = 0xd7ff; $i <= 0xe000; ++$i) { + $s = chk_enc("\x00\x00\xfe\xff". pack('C4', $i >> 24, ($i >> 16) & 0xff, ($i >> 8) & 0xff, $i & 0xff), + 1, "UTF-32", true); + if ($s === false) { + $cnt++; + } else { + $out .= $s; + } +} +var_dump($cnt); +var_dump(str_replace("0000feff","",$out)); + +$out = ''; +$cnt = 0; +for ($i = 0xd7ff; $i <= 0xe000; ++$i) { + $s = chk_enc("\xff\xfe\x00\x00". pack('C4', $i & 0xff, ($i >> 8) & 0xff, ($i >> 16) & 0xff, ($i >> 24) & 0xff), + 1, "UTF-32", true); + if ($s === false) { + $cnt++; + } else { + $out .= $s; + } +} +var_dump($cnt); +var_dump(str_replace("0000feff","",$out)); + +?> +--EXPECT-- +UTF-8 redundancy +string(24) "000000310000003200000033" +string(24) "000000410000004200000043" +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +string(24) "000000a2000000a3000000a5" +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +string(8) "00000080" +string(8) "000007ff" +bool(false) +string(8) "00000800" +string(8) "0000ffff" +bool(false) +string(8) "00010000" +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +UTF-8 and surrogates area +int(2048) +string(16) "0000d7ff0000e000" +UTF-32 code range +bool(false) +string(8) "0010ffff" +bool(false) +string(8) "0010ffff" +bool(false) +string(8) "0010ffff" +string(16) "0000feff0000fffd" +string(16) "0000feff0010ffff" +string(16) "0000feff0000fffd" +string(16) "0000feff0010ffff" +UTF-32 and surrogates area +int(2048) +string(16) "0000d7ff0000e000" +int(2048) +string(16) "0000d7ff0000e000" +int(2048) +string(16) "0000d7ff0000e000" +UTF-32 and surrogates area with BOM +int(2048) +string(16) "0000d7ff0000e000" +int(2048) +string(16) "0000d7ff0000e000" diff --git a/ext/mbstring/tests/ini_language.phpt b/ext/mbstring/tests/ini_language.phpt new file mode 100644 index 0000000..1dc9414 --- /dev/null +++ b/ext/mbstring/tests/ini_language.phpt @@ -0,0 +1,15 @@ +--TEST-- +mbstring.language bug +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.internal_encoding=Shift_JIS +mbstring.language=Japanese +--FILE-- +<?php +var_dump(ini_get('mbstring.internal_encoding')); +var_dump(mb_internal_encoding()); +?> +--EXPECT-- +string(9) "Shift_JIS" +string(4) "SJIS" diff --git a/ext/mbstring/tests/mb_convert_encoding.phpt b/ext/mbstring/tests/mb_convert_encoding.phpt new file mode 100644 index 0000000..1bc7c86 --- /dev/null +++ b/ext/mbstring/tests/mb_convert_encoding.phpt @@ -0,0 +1,138 @@ +--TEST-- +mb_convert_encoding() +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +output_handler= +mbstring.language=Japanese +--FILE-- +<?php +// TODO: Add more tests +//$debug = true; // Uncomment this line to view error/warning/notice message in *.out file +ini_set('include_path', dirname(__FILE__)); +include_once('common.inc'); + +// SJIS string (BASE64 encoded) +$sjis = base64_decode('k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg=='); +// JIS string (BASE64 encoded) +$jis = base64_decode('GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg=='); +// EUC-JP string +$euc_jp = 'ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£'; + +// Test with sigle "form encoding" +// Note: For some reason it complains, results are differ. Not reserched. +echo "== BASIC TEST ==\n"; +$s = $sjis; +$s = mb_convert_encoding($s, 'EUC-JP', 'SJIS'); +print("EUC-JP: $s\n"); // EUC-JP + +$s = $jis; +$s = mb_convert_encoding($s, 'EUC-JP', 'JIS'); +print("EUC-JP: $s\n"); // EUC-JP + +$s = $euc_jp; +$s = mb_convert_encoding($s, 'SJIS', 'EUC-JP'); +print("SJIS: ".base64_encode($s)."\n"); // SJIS + +$s = $euc_jp; +$s = mb_convert_encoding($s, 'JIS', 'EUC-JP'); +print("JIS: ".base64_encode($s)."\n"); // JIS + + +// Using Encoding List Array +echo "== STRING ENCODING LIST ==\n"; + +$a = 'JIS,UTF-8,EUC-JP,SJIS'; +$s = $jis; +$s = mb_convert_encoding($s, 'EUC-JP', $a); +print("EUC-JP: $s\n"); // EUC-JP + +$s = $euc_jp; +$s = mb_convert_encoding($s, 'SJIS', $a); +print("SJIS: ".base64_encode($s)."\n"); // SJIS + +$s = $euc_jp; +$s = mb_convert_encoding($s, 'JIS', $a); +print("JIS: ".base64_encode($s)."\n"); // JIS + + +// Using Encoding List Array +echo "== ARRAY ENCODING LIST ==\n"; + +$a = array(0=>'JIS', 1=>'UTF-8', 2=>'EUC-JP', 3=>'SJIS'); +$s = $jis; +$s = mb_convert_encoding($s, 'EUC-JP', $a); +print("EUC-JP: $s\n"); // EUC-JP + +$s = $euc_jp; +$s = mb_convert_encoding($s, 'SJIS', $a); +print("SJIS: ".base64_encode($s)."\n"); // SJIS + +$s = $euc_jp; +$s = mb_convert_encoding($s, 'JIS', $a); +print("JIS: ".base64_encode($s)."\n"); // JIS + + +// Using Detect Order +echo "== DETECT ORDER ==\n"; + +$s = $jis; +$s = mb_convert_encoding($s, 'EUC-JP', 'auto'); +print("EUC-JP: $s\n"); // EUC-JP + +$s = $euc_jp; +$s = mb_convert_encoding($s, 'SJIS', 'auto'); +print("SJIS: ".base64_encode($s)."\n"); // SJIS + +$s = $euc_jp; +$s = mb_convert_encoding($s, 'JIS', 'auto'); +print("JIS: ".base64_encode($s)."\n"); // JIS + + +// Invalid(?) Parameters +echo "== INVALID PARAMETER ==\n"; + +$s = mb_convert_encoding(1234, 'EUC-JP'); +print("INT: $s\n"); // EUC-JP + +$s = mb_convert_encoding('', 'EUC-JP'); +print("EUC-JP: $s\n"); // SJIS + +$s = $euc_jp; +$s = mb_convert_encoding($s, 'BAD'); +print("BAD: $s\n"); // BAD + +$s = $euc_jp; +$s = mb_convert_encoding($s); +print("MP: $s\n"); // Missing parameter + + +?> + +--EXPECT-- +== BASIC TEST == +EUC-JP: ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +EUC-JP: ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg== +JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg== +== STRING ENCODING LIST == +EUC-JP: ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg== +JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg== +== ARRAY ENCODING LIST == +EUC-JP: ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg== +JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg== +== DETECT ORDER == +EUC-JP: ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg== +JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg== +== INVALID PARAMETER == +INT: 1234 +EUC-JP: +ERR: Warning +BAD: +ERR: Warning +MP: + + diff --git a/ext/mbstring/tests/mb_convert_encoding_basic.phpt b/ext/mbstring/tests/mb_convert_encoding_basic.phpt new file mode 100644 index 0000000..0060a71 --- /dev/null +++ b/ext/mbstring/tests/mb_convert_encoding_basic.phpt @@ -0,0 +1,95 @@ +--TEST-- +Test mb_convert_encoding() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_convert_encoding') or die("skip mb_convert_encoding() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_convert_encoding(string $str, string $to_encoding [, mixed $from_encoding]) + * Description: Returns converted string in desired encoding + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test basic functionality of mb_convert_encoding() + */ + +echo "*** Testing mb_convert_encoding() : basic functionality ***\n"; + +//All strings are the same when displayed in their respective encodings +$sjis_string = base64_decode('k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg=='); +$jis_string = base64_decode('GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg=='); +$euc_jp_string = base64_decode('xvzL3LjspcalraW5pcikx6S5oaMwMTIzNKO1o7ajt6O4o7mhow=='); +$utf8_string = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); + +echo "\n-- Convert to JIS --\n"; +echo "JIS encoded string in base64:\n"; +var_dump(base64_encode($jis_string)); +echo "Converted Strings:\n"; +var_dump(base64_encode(mb_convert_encoding($sjis_string, 'JIS', 'SJIS'))); +var_dump(base64_encode(mb_convert_encoding($euc_jp_string, 'JIS', 'EUC-JP'))); +var_dump(base64_encode(mb_convert_encoding($utf8_string, 'JIS', 'UTF-8'))); + +echo "\n-- Convert to EUC-JP --\n"; +echo "EUC-JP encoded string in base64:\n"; +var_dump(base64_encode($euc_jp_string)); +echo "Converted Strings:\n"; +var_dump(base64_encode(mb_convert_encoding($sjis_string, 'EUC-JP', 'SJIS'))); +var_dump(base64_encode(mb_convert_encoding($jis_string, 'EUC-JP', 'JIS'))); +var_dump(base64_encode(mb_convert_encoding($utf8_string, 'EUC-JP', 'UTF-8'))); + +echo "\n-- Convert to SJIS --\n"; +echo "SJIS encoded string in base64:\n"; +var_dump(base64_encode($sjis_string)); +echo "Converted Strings:\n"; +var_dump(base64_encode(mb_convert_encoding($jis_string, 'SJIS', 'JIS'))); +var_dump(base64_encode(mb_convert_encoding($euc_jp_string, 'SJIS', 'EUC-JP'))); +var_dump(base64_encode(mb_convert_encoding($utf8_string, 'SJIS', 'UTF-8'))); + +echo "\n-- Convert to UTF-8 --\n"; +echo "UTF-8 encoded string in base64:\n"; +var_dump(base64_encode($utf8_string)); +echo "Converted Strings:\n"; +var_dump(base64_encode(mb_convert_encoding($sjis_string, 'UTF-8', 'SJIS'))); +var_dump(base64_encode(mb_convert_encoding($jis_string, 'UTF-8', 'JIS'))); +var_dump(base64_encode(mb_convert_encoding($euc_jp_string, 'UTF-8', 'EUC-JP'))); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_convert_encoding() : basic functionality *** + +-- Convert to JIS -- +JIS encoded string in base64: +string(68) "GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==" +Converted Strings: +string(68) "GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==" +string(68) "GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==" +string(68) "GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==" + +-- Convert to EUC-JP -- +EUC-JP encoded string in base64: +string(52) "xvzL3LjspcalraW5pcikx6S5oaMwMTIzNKO1o7ajt6O4o7mhow==" +Converted Strings: +string(52) "xvzL3LjspcalraW5pcikx6S5oaMwMTIzNKO1o7ajt6O4o7mhow==" +string(52) "xvzL3LjspcalraW5pcikx6S5oaMwMTIzNKO1o7ajt6O4o7mhow==" +string(52) "xvzL3LjspcalraW5pcikx6S5oaMwMTIzNKO1o7ajt6O4o7mhow==" + +-- Convert to SJIS -- +SJIS encoded string in base64: +string(52) "k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==" +Converted Strings: +string(52) "k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==" +string(52) "k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==" +string(52) "k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==" + +-- Convert to UTF-8 -- +UTF-8 encoded string in base64: +string(72) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=" +Converted Strings: +string(72) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=" +string(72) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=" +string(72) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=" +Done diff --git a/ext/mbstring/tests/mb_convert_encoding_stateful.phpt b/ext/mbstring/tests/mb_convert_encoding_stateful.phpt new file mode 100644 index 0000000..a8c1e39 --- /dev/null +++ b/ext/mbstring/tests/mb_convert_encoding_stateful.phpt @@ -0,0 +1,37 @@ +--TEST-- +mb_convert_encoding() with stateful encodings +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +output_handler= +mbstring.language=Japanese +--FILE-- +<?php +echo "ISO-2022-JP empty segment\n"; +echo bin2hex(mb_convert_encoding(pack("H*", "1b24401b24402121"), "UTF-8", "ISO-2022-JP")), "\n"; +echo bin2hex(mb_convert_encoding(pack("H*", "1b24421b24422121"), "UTF-8", "ISO-2022-JP")), "\n"; +echo bin2hex(mb_convert_encoding(pack("H*", "1b28421b284261626364"), "UTF-8", "ISO-2022-JP")), "\n"; +echo bin2hex(mb_convert_encoding(pack("H*", "1b284a1b284a61626364"), "UTF-8", "ISO-2022-JP")), "\n"; +echo bin2hex(mb_convert_encoding(pack("H*", "1b24401b284261626364"), "UTF-8", "ISO-2022-JP")), "\n"; +echo bin2hex(mb_convert_encoding(pack("H*", "1b24401b284a61626364"), "UTF-8", "ISO-2022-JP")), "\n"; +echo bin2hex(mb_convert_encoding(pack("H*", "1b24421b284261626364"), "UTF-8", "ISO-2022-JP")), "\n"; +echo bin2hex(mb_convert_encoding(pack("H*", "1b24421b284a61626364"), "UTF-8", "ISO-2022-JP")), "\n"; +echo "ISO-2022-KR empty segment\n"; +echo bin2hex(mb_convert_encoding(pack("H*", "1b2429430e0f61626364"), "UTF-8", "ISO-2022-KR")), "\n"; +echo "HZ empty segment\n"; +echo bin2hex(mb_convert_encoding(pack("H*", "7e7b7e7d61626364"), "UTF-8", "HZ")), "\n"; +?> +--EXPECT-- +ISO-2022-JP empty segment +e38080 +e38080 +61626364 +61626364 +61626364 +61626364 +61626364 +61626364 +ISO-2022-KR empty segment +61626364 +HZ empty segment +61626364 diff --git a/ext/mbstring/tests/mb_convert_encoding_variation1.phpt b/ext/mbstring/tests/mb_convert_encoding_variation1.phpt new file mode 100644 index 0000000..e3f1c83 --- /dev/null +++ b/ext/mbstring/tests/mb_convert_encoding_variation1.phpt @@ -0,0 +1,207 @@ +--TEST-- +Test mb_convert_encoding() function : usage variations - pass different data types as $to_encoding arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_convert_encoding') or die("skip mb_convert_encoding() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_convert_encoding(string $str, string $to_encoding [, mixed $from_encoding]) + * Description: Returns converted string in desired encoding + * Source code: ext/mbstring/mbstring.c + */ + + +/* + * Pass different data types to $to_encoding arg to test behaviour of mb_convert_encoding + */ + +echo "*** Testing mb_convert_encoding() : usage variations ***\n"; + +// Initialise function arguments not being substituted +mb_internal_encoding('utf-8'); +$sourcestring = b'hello, world'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "Class A object"; + } +} + +// heredoc string +$heredoc = <<<EOT +UTF-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $to_encoding argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "UTF-8", + 'UTF-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behaviour of mb_convert_encoding() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump(bin2hex( mb_convert_encoding($sourcestring, $input, 'ISO-8859-1') )); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_convert_encoding() : usage variations *** + +-- Iteration 1 -- + +Warning: mb_convert_encoding(): Unknown encoding "0" in %s on line %d +string(0) "" + +-- Iteration 2 -- + +Warning: mb_convert_encoding(): Unknown encoding "1" in %s on line %d +string(0) "" + +-- Iteration 3 -- + +Warning: mb_convert_encoding(): Unknown encoding "12345" in %s on line %d +string(0) "" + +-- Iteration 4 -- + +Warning: mb_convert_encoding(): Unknown encoding "-2345" in %s on line %d +string(0) "" + +-- Iteration 5 -- + +Warning: mb_convert_encoding(): Unknown encoding "10.5" in %s on line %d +string(0) "" + +-- Iteration 6 -- + +Warning: mb_convert_encoding(): Unknown encoding "-10.5" in %s on line %d +string(0) "" + +-- Iteration 7 -- + +Warning: mb_convert_encoding(): Unknown encoding "123456789000" in %s on line %d +string(0) "" + +-- Iteration 8 -- + +Warning: mb_convert_encoding(): Unknown encoding "1.23456789E-9" in %s on line %d +string(0) "" + +-- Iteration 9 -- + +Warning: mb_convert_encoding(): Unknown encoding "0.5" in %s on line %d +string(0) "" + +-- Iteration 10 -- +string(24) "68656c6c6f2c20776f726c64" + +-- Iteration 11 -- +string(24) "68656c6c6f2c20776f726c64" + +-- Iteration 12 -- + +Warning: mb_convert_encoding(): Unknown encoding "1" in %s on line %d +string(0) "" + +-- Iteration 13 -- +string(24) "68656c6c6f2c20776f726c64" + +-- Iteration 14 -- + +Warning: mb_convert_encoding(): Unknown encoding "1" in %s on line %d +string(0) "" + +-- Iteration 15 -- +string(24) "68656c6c6f2c20776f726c64" + +-- Iteration 16 -- +string(24) "68656c6c6f2c20776f726c64" + +-- Iteration 17 -- +string(24) "68656c6c6f2c20776f726c64" + +-- Iteration 18 -- +string(24) "68656c6c6f2c20776f726c64" + +-- Iteration 19 -- +string(24) "68656c6c6f2c20776f726c64" + +-- Iteration 20 -- +string(24) "68656c6c6f2c20776f726c64" + +-- Iteration 21 -- + +Warning: mb_convert_encoding(): Unknown encoding "Class A object" in %s on line %d +string(0) "" + +-- Iteration 22 -- +string(24) "68656c6c6f2c20776f726c64" + +-- Iteration 23 -- +string(24) "68656c6c6f2c20776f726c64" + +-- Iteration 24 -- + +Warning: mb_convert_encoding() expects parameter 2 to be string, resource given in %s on line %d +string(0) "" +Done + diff --git a/ext/mbstring/tests/mb_convert_kana.phpt b/ext/mbstring/tests/mb_convert_kana.phpt new file mode 100644 index 0000000..b3bffb6 --- /dev/null +++ b/ext/mbstring/tests/mb_convert_kana.phpt @@ -0,0 +1,60 @@ +--TEST-- +Testing mb_convert_kana() function +--SKIPIF-- +<?php +if (!extension_loaded('mbstring')) die('skip mbstring not enabled'); +if (!function_exists("mb_convert_kana")) print "skip mb_convert_kana() not available"; +?> +--FILE-- +<?php +$zenKakuA = 'ァアィイゥウェエォオカガã‚ギク'; +$zenKakuB = 'グケゲコゴサザシジスズセゼソゾタ'; +$zenKakuC = 'ダãƒãƒ‚ッツヅテデトドナニヌãƒãƒŽãƒ'; +$zenKakuD = 'ãƒãƒ‘ヒビピフブプヘベペホボãƒãƒžãƒŸ'; +$zenKakuE = 'ムメモャヤュユョヨラリルレãƒãƒ®ãƒ¯'; +$zenKakuF = 'ヰヱヲンヴヵヶヷヸヹヺ・ーヽヾ'; + +$hanKakuA = 'ï½ ï½¡ï½¢ï½£ï½¤ï½¥ï½¦ï½§ï½¨ï½©ï½ªï½«ï½¬ï½ï½®ï½¯'; +$hanKakuB = 'ーアイウエオカキクケコサシスセソ'; +$hanKakuC = 'ï¾€ï¾ï¾‚テトナニヌネノハヒフï¾ï¾Žï¾'; +$hanKakuD = 'ï¾ï¾‘メモヤユヨラリルレロワï¾ï¾žï¾Ÿ'; + + +echo $zenKakuA . ' => ' . mb_convert_kana($zenKakuA, 'AZKH', 'utf-8'); +echo "\n"; +echo $zenKakuB . ' => ' . mb_convert_kana($zenKakuB, 'azkh', 'utf-8'); +echo "\n"; +echo $zenKakuC . ' => ' . mb_convert_kana($zenKakuC, 'azkh', 'utf-8'); +echo "\n"; +echo $zenKakuD . ' => ' . mb_convert_kana($zenKakuD, 'azkh', 'utf-8'); +echo "\n"; +echo $zenKakuE . ' => ' . mb_convert_kana($zenKakuE, 'azkh', 'utf-8'); +echo "\n"; +echo $zenKakuF . ' => ' . mb_convert_kana($zenKakuF, 'azkh', 'utf-8'); +echo "\n"; +echo "\n"; +echo $hanKakuA . ' => ' . mb_convert_kana($hanKakuA, 'AZKH', 'utf-8'); +echo "\n"; +echo $hanKakuB . ' => ' . mb_convert_kana($hanKakuB, 'AZKH', 'utf-8'); +echo "\n"; +echo $hanKakuC . ' => ' . mb_convert_kana($hanKakuC, 'AZKH', 'utf-8'); +echo "\n"; +echo $hanKakuD . ' => ' . mb_convert_kana($hanKakuD, 'AZKH', 'utf-8'); +?> +--EXPECT-- +ァアィイゥウェエォオカガã‚ギク => ァアィイゥウェエォオカガã‚ギク +グケゲコゴサザシジスズセゼソゾタ => グケゲコゴサザシジスズセゼソゾタ +ダãƒãƒ‚ッツヅテデトドナニヌãƒãƒŽãƒ => ダï¾ï¾ï¾žï½¯ï¾‚ヅテデトドナニヌネノハ +ãƒãƒ‘ヒビピフブプヘベペホボãƒãƒžãƒŸ => バパヒビピフブプï¾ï¾ï¾žï¾ï¾Ÿï¾Žï¾Žï¾žï¾Žï¾Ÿï¾ï¾ +ムメモャヤュユョヨラリルレãƒãƒ®ãƒ¯ => ムメモャヤï½ï¾•ョヨラリルレロワワ +ヰヱヲンヴヵヶヷヸヹヺ・ーヽヾ => イエヲï¾ï½³ï¾žãƒµãƒ¶ãƒ·ãƒ¸ãƒ¹ãƒºï½¥ï½°ãƒ½ãƒ¾ + +ï½ ï½¡ï½¢ï½£ï½¤ï½¥ï½¦ï½§ï½¨ï½©ï½ªï½«ï½¬ï½ï½®ï½¯ => ï½ ã€‚ã€Œã€ã€ãƒ»ãƒ²ã‚¡ã‚£ã‚¥ã‚§ã‚©ãƒ£ãƒ¥ãƒ§ãƒƒ +ーアイウエオカキクケコサシスセソ => ーアイウエオカã‚クケコサシスセソ +ï¾€ï¾ï¾‚テトナニヌネノハヒフï¾ï¾Žï¾ => ã‚¿ãƒãƒ„テトナニヌãƒãƒŽãƒãƒ’フヘホマ +ï¾ï¾‘メモヤユヨラリルレロワï¾ï¾žï¾Ÿ => ミムメモヤユヨラリルレãƒãƒ¯ãƒ³ã‚›ã‚œ + +--CREDITS-- +Jason Easter <easter@phpug-wuerzburg.de> +PHPUG Würzburg <phpug-wuerzburg.de> +Testfest 2009 2009-06-20 diff --git a/ext/mbstring/tests/mb_convert_variables.phpt b/ext/mbstring/tests/mb_convert_variables.phpt new file mode 100644 index 0000000..01ced05 --- /dev/null +++ b/ext/mbstring/tests/mb_convert_variables.phpt @@ -0,0 +1,164 @@ +--TEST-- +mb_convert_variables() +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +output_handler= +mbstring.language=Japanese +--FILE-- +<?php +// TODO: Add more tests +//$debug = true; // Uncomment this line to view error/warning/notice message in *.out file +ini_set('include_path', dirname(__FILE__)); +include_once('common.inc'); + +// SJIS string (BASE64 encoded) +$sjis = base64_decode('k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg=='); +// JIS string (BASE64 encoded) +$jis = base64_decode('GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg=='); +// EUC-JP string +$euc_jp = 'ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£'; + +// Test for single scaler +echo "== SCALER TEST ==\n"; +$s = $sjis; +$encoding = mb_convert_variables('EUC-JP', 'SJIS', $s); +print("$encoding\n"); // SJIS +print("$s\n"); // Converted to EUC-JP + +$s = $jis; +$encoding = mb_convert_variables('EUC-JP', 'JIS', $s); +print("$encoding\n"); // JIS +print("$s\n"); // Converted to EUC-JP + +$s = $euc_jp; +$encoding = mb_convert_variables('SJIS', 'EUC-JP', $s); +print("$encoding\n"); // EUC-JP +print(base64_encode($s)."\n"); // Converted to SJIS (base64 encoded) + +$s = $euc_jp; +$encoding = mb_convert_variables('JIS', 'EUC-JP', $s); +print("$encoding\n"); // EUC-JP +print(base64_encode($s)."\n"); // Converted to JIS (base64 encoded) + +// Test for multiple slcaler +$s1 = $euc_jp; +$s2 = $euc_jp; +$s3 = $euc_jp; +$encoding = mb_convert_variables('EUC-JP', 'auto', $s1, $s2, $s3); +print("$encoding\n"); // EUC-JP +print("$s1$s2$s3\n"); // Converted to EUC-JP + + + +// Note: Mixing encoding in array/object is not supported? +// Test for array +echo "== ARRAY TEST ==\n"; +$a = array($s3, $s2, $s1); +$aa = $a; +$encoding = mb_convert_variables('EUC-JP', 'auto', $aa); +print("$encoding\n"); // EUC-JP +print("{$aa[0]}{$aa[1]}{$aa[2]}\n"); // Converted to EUC-JP + +$a = array($s1, $s2, $s3); +$aa = $a; +$encoding = mb_convert_variables('EUC-JP', 'auto', $aa); +print("$encoding\n"); // EUC-JP +print("{$aa[0]}{$aa[1]}{$aa[2]}\n"); // Converted to EUC-JP + + + +// Test for object +echo "== OBJECT TEST ==\n"; +class foo +{ + public $s1; + public $s2; + public $s3; + + function foo() + { + global $sjis, $jis, $euc_jp; + + $this->s1 = $euc_jp; + $this->s2 = $euc_jp; + $this->s3 = $euc_jp; + } +} + +class bar +{ + public $s1; + public $s2; + public $s3; + + function bar() + { + global $sjis, $jis, $euc_jp; + + $this->s1 = $euc_jp; + $this->s2 = $euc_jp; + $this->s3 = $euc_jp; + } +} + + +$o = new foo; +$oo = $o; +$encoding = mb_convert_variables('EUC-JP', 'auto', $oo); +print("$encoding\n"); // EUC-JP +print("{$oo->s1}{$oo->s2}{$oo->s3}\n"); // Converted to EUC-JP + +$o = new bar; +$oo = $o; +$encoding = mb_convert_variables('EUC-JP', 'auto', $oo); +print("$encoding\n"); // EUC-JP +print("{$oo->s1}{$oo->s2}{$oo->s3}\n"); // Converted to EUC-JP + + +// Test for scaler, array and object +echo "== SCALER, ARRAY AND OBJECT TEST ==\n"; + +$s1 = $euc_jp; +$s2 = $euc_jp; +$s3 = $euc_jp; +$aa = $a; +$oo = $o; + +$encoding = mb_convert_variables('EUC-JP', 'auto', $s1, $s2, $s3, $aa, $oo); +print("$encoding\n"); // EUC-JP +print("$s1$s2$s3\n"); // Converted to EUC-JP +print("{$aa[0]}{$aa[1]}{$aa[2]}\n"); // Converted to EUC-JP +print("{$oo->s1}{$oo->s2}{$oo->s3}\n"); // Converted to EUC-JP + + +?> + +--EXPECT-- +== SCALER TEST == +SJIS +ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +JIS +ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +EUC-JP +k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg== +EUC-JP +GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg== +EUC-JP +ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +== ARRAY TEST == +EUC-JP +ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +EUC-JP +ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +== OBJECT TEST == +EUC-JP +ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +EUC-JP +ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +== SCALER, ARRAY AND OBJECT TEST == +EUC-JP +ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ +ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£ + diff --git a/ext/mbstring/tests/mb_decode_mimeheader_basic.phpt b/ext/mbstring/tests/mb_decode_mimeheader_basic.phpt new file mode 100644 index 0000000..5374c31 --- /dev/null +++ b/ext/mbstring/tests/mb_decode_mimeheader_basic.phpt @@ -0,0 +1,35 @@ +--TEST-- +Test mb_decode_mimeheader() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_decode_mimeheader') or die("skip mb_decode_mimeheader() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_decode_mimeheader(string string) + * Description: Decodes the MIME "encoded-word" in the string + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_decode_mimeheader() : basic functionality ***\n"; +mb_internal_encoding('utf-8'); + +//the following encoded-words are identical and are UTF-8 Japanese. +$a = "=?UTF-8?b?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?="; +$b = mb_decode_mimeheader($a); +var_dump(bin2hex($b)); + +$a = "=?UTF-8?Q?=E6=97=A5=E6=9C=AC=E8=AA=9E=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88?= +=?UTF-8?Q?=E3=81=A7=E3=81=99=E3=80=82?="; +$b = mb_decode_mimeheader($a); +var_dump(bin2hex($b)); + +?> +===DONE=== +--EXPECT-- +*** Testing mb_decode_mimeheader() : basic functionality *** +string(60) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e38082" +string(60) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e38082" +===DONE=== diff --git a/ext/mbstring/tests/mb_decode_mimeheader_error.phpt b/ext/mbstring/tests/mb_decode_mimeheader_error.phpt new file mode 100644 index 0000000..c40cdbd --- /dev/null +++ b/ext/mbstring/tests/mb_decode_mimeheader_error.phpt @@ -0,0 +1,42 @@ +--TEST-- +Test mb_decode_mimeheader() function : error conditions +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_decode_mimeheader') or die("skip mb_decode_mimeheader() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_decode_mimeheader(string string) + * Description: Decodes the MIME "encoded-word" in the string + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_decode_mimeheader() : error conditions ***\n"; + +// Zero arguments +echo "\n-- Testing mb_decode_mimeheader() function with Zero arguments --\n"; +var_dump( mb_decode_mimeheader() ); + +//Test mb_decode_mimeheader with one more than the expected number of arguments +echo "\n-- Testing mb_decode_mimeheader() function with more than expected no. of arguments --\n"; +$string = 'string_val'; +$extra_arg = 10; +var_dump( mb_decode_mimeheader($string, $extra_arg) ); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_decode_mimeheader() : error conditions *** + +-- Testing mb_decode_mimeheader() function with Zero arguments -- + +Warning: mb_decode_mimeheader() expects exactly 1 parameter, 0 given in %s on line %d +NULL + +-- Testing mb_decode_mimeheader() function with more than expected no. of arguments -- + +Warning: mb_decode_mimeheader() expects exactly 1 parameter, 2 given in %s on line %d +NULL +===DONE=== diff --git a/ext/mbstring/tests/mb_decode_mimeheader_variation1.phpt b/ext/mbstring/tests/mb_decode_mimeheader_variation1.phpt new file mode 100644 index 0000000..e07ccad --- /dev/null +++ b/ext/mbstring/tests/mb_decode_mimeheader_variation1.phpt @@ -0,0 +1,206 @@ +--TEST-- +Test mb_decode_mimeheader() function : usage variation +--CREDITS-- +D. Kesley +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_decode_mimeheader') or die("skip mb_decode_mimeheader() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_decode_mimeheader(string string) + * Description: Decodes the MIME "encoded-word" in the string + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_decode_mimeheader() : usage variation ***\n"; + +// Define error handler +function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { + if (error_reporting() != 0) { + // report non-silenced errors + echo "Error: $err_no - $err_msg, $filename($linenum)\n"; + } +} +set_error_handler('test_error_handler'); + +// Initialise function arguments not being substituted (if any) + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// define some classes +class classWithToString +{ + public function __toString() { + return "Class A object"; + } +} + +class classWithoutToString +{ +} + +// heredoc string +$heredoc = <<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// add arrays +$index_array = array (1, 2, 3); +$assoc_array = array ('one' => 1, 'two' => 2); + +//array of values to iterate over +$inputs = array( + + // int data + 'int 0' => 0, + 'int 1' => 1, + 'int 12345' => 12345, + 'int -12345' => -2345, + + // float data + 'float 10.5' => 10.5, + 'float -10.5' => -10.5, + 'float 12.3456789000e10' => 12.3456789000e10, + 'float -12.3456789000e10' => -12.3456789000e10, + 'float .5' => .5, + + // array data + 'empty array' => array(), + 'int indexed array' => $index_array, + 'associative array' => $assoc_array, + 'nested arrays' => array('foo', $index_array, $assoc_array), + + // null data + 'uppercase NULL' => NULL, + 'lowercase null' => null, + + // boolean data + 'lowercase true' => true, + 'lowercase false' =>false, + 'uppercase TRUE' =>TRUE, + 'uppercase FALSE' =>FALSE, + + // empty data + 'empty string DQ' => "", + 'empty string SQ' => '', + + // object data + 'instance of classWithToString' => new classWithToString(), + 'instance of classWithoutToString' => new classWithoutToString(), + + // undefined data + 'undefined var' => @$undefined_var, + + // unset data + 'unset var' => @$unset_var, + + // resource variable + 'resource' => $fp +); + +// loop through each element of the array for string + +foreach($inputs as $key =>$value) { + echo "\n--$key--\n"; + var_dump( mb_decode_mimeheader($value) ); +}; + +fclose($fp); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_decode_mimeheader() : usage variation *** + +--int 0-- +string(1) "0" + +--int 1-- +string(1) "1" + +--int 12345-- +string(5) "12345" + +--int -12345-- +string(5) "-2345" + +--float 10.5-- +string(4) "10.5" + +--float -10.5-- +string(5) "-10.5" + +--float 12.3456789000e10-- +string(12) "123456789000" + +--float -12.3456789000e10-- +string(13) "-123456789000" + +--float .5-- +string(3) "0.5" + +--empty array-- +Error: 2 - mb_decode_mimeheader() expects parameter 1 to be string, array given, %s(%d) +NULL + +--int indexed array-- +Error: 2 - mb_decode_mimeheader() expects parameter 1 to be string, array given, %s(%d) +NULL + +--associative array-- +Error: 2 - mb_decode_mimeheader() expects parameter 1 to be string, array given, %s(%d) +NULL + +--nested arrays-- +Error: 2 - mb_decode_mimeheader() expects parameter 1 to be string, array given, %s(%d) +NULL + +--uppercase NULL-- +string(0) "" + +--lowercase null-- +string(0) "" + +--lowercase true-- +string(1) "1" + +--lowercase false-- +string(0) "" + +--uppercase TRUE-- +string(1) "1" + +--uppercase FALSE-- +string(0) "" + +--empty string DQ-- +string(0) "" + +--empty string SQ-- +string(0) "" + +--instance of classWithToString-- +string(14) "Class A object" + +--instance of classWithoutToString-- +Error: 2 - mb_decode_mimeheader() expects parameter 1 to be string, object given, %s(%d) +NULL + +--undefined var-- +string(0) "" + +--unset var-- +string(0) "" + +--resource-- +Error: 2 - mb_decode_mimeheader() expects parameter 1 to be string, resource given, %s(%d) +NULL +===DONE=== diff --git a/ext/mbstring/tests/mb_decode_mimeheader_variation2.phpt b/ext/mbstring/tests/mb_decode_mimeheader_variation2.phpt new file mode 100644 index 0000000..7527c9a --- /dev/null +++ b/ext/mbstring/tests/mb_decode_mimeheader_variation2.phpt @@ -0,0 +1,51 @@ +--TEST-- +Test mb_decode_mimeheader() function : variation +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_decode_mimeheader') or die("skip mb_decode_mimeheader() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_decode_mimeheader(string string) + * Description: Decodes the MIME "encoded-word" in the string + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_decode_mimeheader() : variation ***\n"; +mb_internal_encoding('utf-8'); + +//all the following are identical, we will convert to utf-8 + +$encoded_words = array( +"=?Shift_JIS?B?k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==?=", +"=?Shift_JIS?Q?=93=FA=96=7B=8C=EA=83e=83L=83X=83g=82=C5=82=B7=81B=30=31=32?= +=?Shift_JIS?Q?=33=34=82T=82U=82V=82W=82X=81B?=", + +"=?ISO-2022-JP?B?GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYbKEI=?= +=?ISO-2022-JP?B?GyRCIzcjOCM5ISMbKEI=?=", +"=?ISO-2022-JP?Q?=1B=24BF=7CK=5C=38l=25F=25-=25=39=25H=24G=24=39=1B=28B?= +=?ISO-2022-JP?Q?=1B=24B!=23=1B=28B=30=31=32=33=34=1B=24B=23=35=1B=28B?= +=?ISO-2022-JP?Q?=1B=24B=23=36=23=37=23=38=23=39!=23=1B=28B?=", + +"=?EUC-JP?B?xvzL3LjspcalraW5pcikx6S5oaMwMTIzNKO1o7ajt6O4o7mhow==?=", +"=?EUC-JP?Q?=C6=FC=CB=DC=B8=EC=A5=C6=A5=AD=A5=B9=A5=C8=A4=C7=A4=B9=A1=A3?= +=?EUC-JP?Q?=30=31=32=33=34=A3=B5=A3=B6=A3=B7=A3=B8=A3=B9=A1=A3?=" + ); + + foreach ($encoded_words as $word) { + var_dump(bin2hex(mb_decode_mimeheader($word))); +} + +?> +===DONE=== +--EXPECT-- +*** Testing mb_decode_mimeheader() : variation *** +string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082" +string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082" +string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082" +string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082" +string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082" +string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082" +===DONE=== diff --git a/ext/mbstring/tests/mb_decode_mimeheader_variation3.phpt b/ext/mbstring/tests/mb_decode_mimeheader_variation3.phpt new file mode 100644 index 0000000..968e76e --- /dev/null +++ b/ext/mbstring/tests/mb_decode_mimeheader_variation3.phpt @@ -0,0 +1,29 @@ +--TEST-- +Test mb_decode_mimeheader() function : variation +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_decode_mimeheader') or die("skip mb_decode_mimeheader() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_decode_mimeheader(string string) + * Description: Decodes the MIME "encoded-word" in the string + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_decode_mimeheader() : variation ***\n"; +mb_internal_encoding('iso-8859-7'); + +//greek in UTF-8 to be converted to iso-8859-7 +$encoded_word = "=?UTF-8?B?zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J?="; +var_dump(bin2hex(mb_decode_mimeheader($encoded_word))); + + +?> +===DONE=== +--EXPECT-- +*** Testing mb_decode_mimeheader() : variation *** +string(48) "e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f3f4f5f6f7f8f9" +===DONE=== diff --git a/ext/mbstring/tests/mb_decode_numericentity.phpt b/ext/mbstring/tests/mb_decode_numericentity.phpt new file mode 100644 index 0000000..6008ef9 --- /dev/null +++ b/ext/mbstring/tests/mb_decode_numericentity.phpt @@ -0,0 +1,21 @@ +--TEST-- +Test mb_decode_numericentity() function : Convert HTML-Entities to UTF-8 +--SKIPIF-- +<?php +if (!extension_loaded('mbstring')) die('skip mbstring not enabled'); +function_exists('mb_encode_mimeheader') or die("skip mb_encode_mimeheader() is not available in this build"); +?> +--FILE-- +<?php +$str1 = '¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'; +$str2 = 'ƒΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρςστυφχψωϑϒϖ•…′″‾⁄℘ℑℜ™ℵ←↑→↓↔↵⇐⇑⇒⇓⇔∀∂∃∅∇∈∉∋∏∑−∗√∝∞∠∧∨∩∪∫∴∼≅≈≠≡≤≥⊂⊃⊄⊆⊇⊕⊗⊥⋅⌈⌉⌊⌋〈〉◊♠♣♥♦'; +$str3 = 'aŒbœcŠdše€fg'; +$convmap = array(0x0, 0x2FFFF, 0, 0xFFFF); +echo mb_decode_numericentity($str1, $convmap, "UTF-8")."\n"; +echo mb_decode_numericentity($str2, $convmap, "UTF-8")."\n"; +echo mb_decode_numericentity($str3, $convmap, "UTF-8")."\n"; +?> +--EXPECT-- +¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖרÙÚÛÜÃÞßà áâãäåæçèéêëìÃîïðñòóôõö÷øùúûüýþÿ +ƒΑΒΓΔΕΖΗΘΙΚΛΜÎΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπÏςστυφχψωϑϒϖ•…′″‾â„℘ℑℜ™ℵâ†â†‘→↓↔↵â‡â‡‘⇒⇓⇔∀∂∃∅∇∈∉∋âˆâˆ‘−∗√âˆâˆžâˆ ∧∨∩∪∫∴∼≅≈≠≡≤≥⊂⊃⊄⊆⊇⊕⊗⊥⋅⌈⌉⌊⌋〈〉◊♠♣♥♦ +aÅ’bÅ“cÅ dÅ¡e€fg diff --git a/ext/mbstring/tests/mb_detect_encoding.phpt b/ext/mbstring/tests/mb_detect_encoding.phpt new file mode 100644 index 0000000..4fd22a6 --- /dev/null +++ b/ext/mbstring/tests/mb_detect_encoding.phpt @@ -0,0 +1,121 @@ +--TEST-- +mb_detect_encoding() +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.language=Japanese +--FILE-- +<?php +// TODO: Add more tests +//$debug = true; // Uncomment this line to view error/warning/notice message in *.out file +ini_set('include_path', dirname(__FILE__)); +include_once('common.inc'); + +// SJIS string (BASE64 encoded) +$sjis = base64_decode('k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg=='); +// JIS string (BASE64 encoded) +$jis = base64_decode('GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg=='); +// EUC-JP string +$euc_jp = 'ÆüËÜ¸ì¥Æ¥¥¹¥È¤Ç¤¹¡£01234£µ£¶£·£¸£¹¡£'; + +// Test with sigle "form encoding" +// Note: For some reason it complains, results are differ. Not reserched. +echo "== BASIC TEST ==\n"; +$s = $sjis; +$s = mb_detect_encoding($s, 'SJIS'); +print("SJIS: $s\n"); + +$s = $jis; +$s = mb_detect_encoding($s, 'JIS'); +print("JIS: $s\n"); + +$s = $euc_jp; +$s = mb_detect_encoding($s, 'UTF-8,EUC-JP,JIS'); +print("EUC-JP: $s\n"); + +$s = $euc_jp; +$s = mb_detect_encoding($s, 'JIS,EUC-JP'); +print("EUC-JP: $s\n"); + + + +// Using Encoding List Array +echo "== ARRAY ENCODING LIST ==\n"; + +$a = array(0=>'UTF-8',1=>'EUC-JP', 2=>'SJIS', 3=>'JIS'); + +// Note: Due to detect order, detected as UTF-8 +$s = $jis; +$s = mb_detect_encoding($s, $a); +print("JIS: $s\n"); + +$s = $euc_jp; +$s = mb_detect_encoding($s, $a); +print("EUC-JP: $s\n"); + +$s = $sjis; +$s = mb_detect_encoding($s, $a); +print("SJIS: $s\n"); + + +// Using Detect Order +echo "== DETECT ORDER ==\n"; + +mb_detect_order('auto'); + + +$s = $jis; +$s = mb_detect_encoding($s); +print("JIS: $s\n"); + +$s = $euc_jp; +$s = mb_detect_encoding($s); +print("EUC-JP: $s\n"); + +$s = $sjis; +$s = mb_detect_encoding($s); +print("SJIS: $s\n"); + + +// Invalid(?) Parameters +echo "== INVALID PARAMETER ==\n"; + +$s = mb_detect_encoding(1234, 'EUC-JP'); +print("INT: $s\n"); // EUC-JP + +$s = mb_detect_encoding('', 'EUC-JP'); +print("EUC-JP: $s\n"); // SJIS + +$s = $euc_jp; +$s = mb_detect_encoding($s, 'BAD'); +print("BAD: $s\n"); // BAD + +$s = $euc_jp; +$s = mb_detect_encoding(); +print("MP: $s\n"); // Missing parameter + + +?> + +--EXPECT-- +== BASIC TEST == +SJIS: SJIS +JIS: JIS +EUC-JP: EUC-JP +EUC-JP: EUC-JP +== ARRAY ENCODING LIST == +JIS: UTF-8 +EUC-JP: EUC-JP +SJIS: SJIS +== DETECT ORDER == +JIS: JIS +EUC-JP: EUC-JP +SJIS: SJIS +== INVALID PARAMETER == +INT: EUC-JP +EUC-JP: EUC-JP +ERR: Warning +BAD: EUC-JP +ERR: Warning +MP: + diff --git a/ext/mbstring/tests/mb_detect_order.phpt b/ext/mbstring/tests/mb_detect_order.phpt new file mode 100644 index 0000000..382691c --- /dev/null +++ b/ext/mbstring/tests/mb_detect_order.phpt @@ -0,0 +1,61 @@ +--TEST-- +mb_detect_order() +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.language=Japanese +--FILE-- +<?php +//$debug = true; +ini_set('include_path', dirname(__FILE__)); +include_once('common.inc'); + + +// Set order to "auto" +$r = mb_detect_order('auto'); +($r === TRUE) ? print "OK_AUTO\n" : print "NG_AUTO\n"; +print implode(', ', mb_detect_order()) . "\n"; + + +// Set order by string +$r = mb_detect_order('SJIS,EUC-JP,JIS,UTF-8'); +($r === TRUE) ? print "OK_STR\n" : print "NG_STR\n"; +print implode(', ', mb_detect_order()) . "\n"; + + +// Set order by array +$a[] = 'ASCII'; +$a[] = 'JIS'; +$a[] = 'EUC-JP'; +$a[] = 'UTF-8'; +$r = mb_detect_order($a); +($r === TRUE) ? print "OK_ARRAY\n" : print "NG_ARRAY\n"; +print implode(', ', mb_detect_order()) . "\n"; + +// Set invalid encoding. Should fail. +print "== INVALID PARAMETER ==\n"; + +$r = mb_detect_order('BAD_NAME'); +($r === FALSE) ? print "OK_BAD_STR\n" : print "NG_BAD_STR\n"; +print implode(', ', mb_detect_order()) . "\n"; + +$a[] = 'BAD_NAME'; +$r = mb_detect_order($a); +($r === FALSE) ? print "OK_BAD_ARRAY\n" : print "NG_BAD_ARRAY\n"; +print implode(', ', mb_detect_order()) . "\n"; + +?> + +--EXPECT-- +OK_AUTO +ASCII, JIS, UTF-8, EUC-JP, SJIS +OK_STR +SJIS, EUC-JP, JIS, UTF-8 +OK_ARRAY +ASCII, JIS, EUC-JP, UTF-8 +== INVALID PARAMETER == +OK_BAD_STR +ASCII, JIS, EUC-JP, UTF-8 +OK_BAD_ARRAY +ASCII, JIS, EUC-JP, UTF-8 + diff --git a/ext/mbstring/tests/mb_encode_mimeheader_basic.phpt b/ext/mbstring/tests/mb_encode_mimeheader_basic.phpt new file mode 100644 index 0000000..0487a19 --- /dev/null +++ b/ext/mbstring/tests/mb_encode_mimeheader_basic.phpt @@ -0,0 +1,74 @@ +--TEST-- +Test mb_encode_mimeheader() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_encode_mimeheader') or die("skip mb_encode_mimeheader() is not available in this build"); +?> + +--FILE-- +<?php +/* Prototype : string mb_encode_mimeheader + * (string $str [, string $charset [, string $transfer-encoding [, string $linefeed [, int $indent]]]]) + * Description: Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?= + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test basic functionality of mb_encode_mimeheader with different strings. + * For the below strings: + * 'English' is ASCII only, 'Japanese' has no ASCII characters and 'Greek' is mixed. + */ + +echo "*** Testing mb_encode_mimeheader() : basic ***\n"; + +$english = array('English' => 'This is an English string. 0123456789'); +$nonEnglish = array('Japanese' => base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC'), + 'Greek' => base64_decode('zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==')); + +foreach ($english as $lang => $input) { + echo "\nLanguage: $lang\n"; + echo "-- Base 64: --\n"; + var_dump(mb_encode_mimeheader($input, 'UTF-8', 'B')); + echo "-- Quoted-Printable --\n"; + var_dump(mb_encode_mimeheader($input, 'UTF-8', 'Q')); +} + +mb_internal_encoding('utf-8'); + +foreach ($nonEnglish as $lang => $input) { + echo "\nLanguage: $lang\n"; + echo "-- Base 64: --\n"; + var_dump(mb_encode_mimeheader($input, 'UTF-8', 'B')); + echo "-- Quoted-Printable --\n"; + var_dump(mb_encode_mimeheader($input, 'UTF-8', 'Q')); +} + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_encode_mimeheader() : basic *** + +Language: English +-- Base 64: -- +string(37) "This is an English string. 0123456789" +-- Quoted-Printable -- +string(37) "This is an English string. 0123456789" + +Language: Japanese +-- Base 64: -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" +-- Quoted-Printable -- +string(117) "=?UTF-8?Q?=E6=97=A5=E6=9C=AC=E8=AA=9E=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88?= + =?UTF-8?Q?=E3=81=A7=E3=81=99=E3=80=82?=" + +Language: Greek +-- Base 64: -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +-- Quoted-Printable -- +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_encode_mimeheader_basic2.phpt b/ext/mbstring/tests/mb_encode_mimeheader_basic2.phpt new file mode 100644 index 0000000..cd52fa5 --- /dev/null +++ b/ext/mbstring/tests/mb_encode_mimeheader_basic2.phpt @@ -0,0 +1,73 @@ +--TEST-- +Test mb_encode_mimeheader() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_encode_mimeheader') or die("skip mb_encode_mimeheader() is not available in this build"); +?> + +--FILE-- +<?php +/* Prototype : string mb_encode_mimeheader(string $str [, string $charset + * [, string $transfer-encoding [, string $linefeed [, int $indent]]]]) + * Description: Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?= + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test mb_encode_header() with different strings + */ + +echo "*** Testing mb_encode_mimeheader() : basic2 ***\n"; + +//All strings are the same when displayed in their respective encodings +$sjis_string = base64_decode('k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg=='); +$jis_string = base64_decode('GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg=='); +$euc_jp_string = base64_decode('xvzL3LjspcalraW5pcikx6S5oaMwMTIzNKO1o7ajt6O4o7mhow=='); + +$inputs = array('SJIS' => $sjis_string, + 'JIS' => $jis_string, + 'EUC_JP' => $euc_jp_string); + +foreach ($inputs as $lang => $input) { + echo "\nLanguage: $lang\n"; + echo "-- Base 64: --\n"; + mb_internal_encoding($lang); + $outEncoding = "UTF-8"; + var_dump(mb_encode_mimeheader($input, $outEncoding, 'B')); + echo "-- Quoted-Printable --\n"; + var_dump(mb_encode_mimeheader($input, $outEncoding, 'Q')); +} + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_encode_mimeheader() : basic2 *** + +Language: SJIS +-- Base 64: -- +string(99) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJc=?= + =?UTF-8?B?77yY77yZ44CC?=" +-- Quoted-Printable -- +string(201) "=?UTF-8?Q?=E6=97=A5=E6=9C=AC=E8=AA=9E=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88?= + =?UTF-8?Q?=E3=81=A7=E3=81=99=E3=80=82=30=31=32=33=34=EF=BC=95=EF=BC=96?= + =?UTF-8?Q?=EF=BC=97=EF=BC=98=EF=BC=99=E3=80=82?=" + +Language: JIS +-- Base 64: -- +string(99) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJc=?= + =?UTF-8?B?77yY77yZ44CC?=" +-- Quoted-Printable -- +string(201) "=?UTF-8?Q?=E6=97=A5=E6=9C=AC=E8=AA=9E=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88?= + =?UTF-8?Q?=E3=81=A7=E3=81=99=E3=80=82=30=31=32=33=34=EF=BC=95=EF=BC=96?= + =?UTF-8?Q?=EF=BC=97=EF=BC=98=EF=BC=99=E3=80=82?=" + +Language: EUC_JP +-- Base 64: -- +string(99) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJc=?= + =?UTF-8?B?77yY77yZ44CC?=" +-- Quoted-Printable -- +string(201) "=?UTF-8?Q?=E6=97=A5=E6=9C=AC=E8=AA=9E=E3=83=86=E3=82=AD=E3=82=B9=E3=83=88?= + =?UTF-8?Q?=E3=81=A7=E3=81=99=E3=80=82=30=31=32=33=34=EF=BC=95=EF=BC=96?= + =?UTF-8?Q?=EF=BC=97=EF=BC=98=EF=BC=99=E3=80=82?=" +Done diff --git a/ext/mbstring/tests/mb_encode_mimeheader_basic3.phpt b/ext/mbstring/tests/mb_encode_mimeheader_basic3.phpt new file mode 100644 index 0000000..b2f0c8b --- /dev/null +++ b/ext/mbstring/tests/mb_encode_mimeheader_basic3.phpt @@ -0,0 +1,69 @@ +--TEST-- +Test mb_encode_mimeheader() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_encode_mimeheader') or die("skip mb_encode_mimeheader() is not available in this build"); +?> + +--FILE-- +<?php +/* Prototype : string mb_encode_mimeheader(string $str [, string $charset + * [, string $transfer-encoding [, string $linefeed [, int $indent]]]]) + * Description: Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?= + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test mb_encode_header() with different strings + */ + +echo "*** Testing mb_encode_mimeheader() : basic2 ***\n"; + +//All strings are the same when displayed in their respective encodings +$sjis_string = base64_decode('k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg=='); +$jis_string = base64_decode('GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg=='); +$euc_jp_string = base64_decode('xvzL3LjspcalraW5pcikx6S5oaMwMTIzNKO1o7ajt6O4o7mhow=='); + +$inputs = array('SJIS' => $sjis_string, + 'JIS' => $jis_string, + 'EUC_JP' => $euc_jp_string); + +foreach ($inputs as $lang => $input) { + echo "\nLanguage: $lang\n"; + echo "-- Base 64: --\n"; + mb_internal_encoding($lang); + $outEncoding = $lang; + var_dump(mb_encode_mimeheader($input, $outEncoding, 'B')); + echo "-- Quoted-Printable --\n"; + var_dump(mb_encode_mimeheader($input, $outEncoding, 'Q')); +} + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_encode_mimeheader() : basic2 *** + +Language: SJIS +-- Base 64: -- +string(68) "=?Shift_JIS?B?k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==?=" +-- Quoted-Printable -- +string(124) "=?Shift_JIS?Q?=93=FA=96=7B=8C=EA=83e=83L=83X=83g=82=C5=82=B7=81B=30=31=32?= + =?Shift_JIS?Q?=33=34=82T=82U=82V=82W=82X=81B?=" + +Language: JIS +-- Base 64: -- +string(115) "=?ISO-2022-JP?B?GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYbKEI=?= + =?ISO-2022-JP?B?GyRCIzcjOCM5ISMbKEI=?=" +-- Quoted-Printable -- +string(209) "=?ISO-2022-JP?Q?=1B=24BF=7CK=5C=38l=25F=25-=25=39=25H=24G=24=39=1B=28B?= + =?ISO-2022-JP?Q?=1B=24B!=23=1B=28B=30=31=32=33=34=1B=24B=23=35=1B=28B?= + =?ISO-2022-JP?Q?=1B=24B=23=36=23=37=23=38=23=39!=23=1B=28B?=" + +Language: EUC_JP +-- Base 64: -- +string(65) "=?EUC-JP?B?xvzL3LjspcalraW5pcikx6S5oaMwMTIzNKO1o7ajt6O4o7mhow==?=" +-- Quoted-Printable -- +string(140) "=?EUC-JP?Q?=C6=FC=CB=DC=B8=EC=A5=C6=A5=AD=A5=B9=A5=C8=A4=C7=A4=B9=A1=A3?= + =?EUC-JP?Q?=30=31=32=33=34=A3=B5=A3=B6=A3=B7=A3=B8=A3=B9=A1=A3?=" +Done diff --git a/ext/mbstring/tests/mb_encode_mimeheader_indent.phpt b/ext/mbstring/tests/mb_encode_mimeheader_indent.phpt new file mode 100644 index 0000000..11fe23f --- /dev/null +++ b/ext/mbstring/tests/mb_encode_mimeheader_indent.phpt @@ -0,0 +1,901 @@ +--TEST-- +Test mb_encode_mimeheader() function : basic functionality, indent +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_encode_mimeheader') or die("skip mb_encode_mimeheader() is not available in this build"); +?> + +--FILE-- +<?php +/* Prototype : string mb_encode_mimeheader + * (string $str [, string $charset [, string $transfer_encoding [, string $linefeed [, int $indent]]]]) + * Description: Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?= + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass different data types to $indent argument to see how mb_encode_mimeheader() behaves + */ + +echo "*** Testing mb_encode_mimeheader() : indent ***\n"; + +mb_internal_encoding('utf-8'); + +// Initialise function arguments not being substituted +$str = base64_decode('zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg=='); +$charset = 'utf-8'; +$linefeed = "\r\n"; + +for ($i = 0; $i < 100; $i++) { + echo "\n-- Iteration $i --\n"; + var_dump( mb_encode_mimeheader($str, $charset, "B", $linefeed, $i)); + var_dump( mb_encode_mimeheader($str, $charset, "Q", $linefeed, $i)); +}; +echo "Done"; +?> +--EXPECT-- +*** Testing mb_encode_mimeheader() : indent *** + +-- Iteration 0 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 1 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 2 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 3 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 4 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrU=?= + =?UTF-8?B?zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9?= + =?UTF-8?Q?=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA?= + =?UTF-8?Q?=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36?= + =?UTF-8?Q?=37=38=39=2E?=" + +-- Iteration 5 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrU=?= + =?UTF-8?B?zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9?= + =?UTF-8?Q?=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA?= + =?UTF-8?Q?=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36?= + =?UTF-8?Q?=37=38=39=2E?=" + +-- Iteration 6 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrU=?= + =?UTF-8?B?zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9?= + =?UTF-8?Q?=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA?= + =?UTF-8?Q?=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36?= + =?UTF-8?Q?=37=38=39=2E?=" + +-- Iteration 7 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrU=?= + =?UTF-8?B?zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1?= + =?UTF-8?Q?=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20?= + =?UTF-8?Q?=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34?= + =?UTF-8?Q?=35=36=37=38=39=2E?=" + +-- Iteration 8 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66?= + =?UTF-8?B?zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1?= + =?UTF-8?Q?=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20?= + =?UTF-8?Q?=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34?= + =?UTF-8?Q?=35=36=37=38=39=2E?=" + +-- Iteration 9 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66?= + =?UTF-8?B?zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1?= + =?UTF-8?Q?=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20?= + =?UTF-8?Q?=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34?= + =?UTF-8?Q?=35=36=37=38=39=2E?=" + +-- Iteration 10 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66?= + =?UTF-8?B?zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1?= + =?UTF-8?Q?=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20?= + =?UTF-8?Q?=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34?= + =?UTF-8?Q?=35=36=37=38=39=2E?=" + +-- Iteration 11 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66?= + =?UTF-8?B?zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1?= + =?UTF-8?Q?=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20?= + =?UTF-8?Q?=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34?= + =?UTF-8?Q?=35=36=37=38=39=2E?=" + +-- Iteration 12 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+M?= + =?UTF-8?B?IM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1?= + =?UTF-8?Q?=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20?= + =?UTF-8?Q?=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34?= + =?UTF-8?Q?=35=36=37=38=39=2E?=" + +-- Iteration 13 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+M?= + =?UTF-8?B?IM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD?= + =?UTF-8?Q?=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C?= + =?UTF-8?Q?=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33?= + =?UTF-8?Q?=34=35=36=37=38=39=2E?=" + +-- Iteration 14 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+M?= + =?UTF-8?B?IM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD?= + =?UTF-8?Q?=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C?= + =?UTF-8?Q?=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33?= + =?UTF-8?Q?=34=35=36=37=38=39=2E?=" + +-- Iteration 15 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+M?= + =?UTF-8?B?IM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD?= + =?UTF-8?Q?=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C?= + =?UTF-8?Q?=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33?= + =?UTF-8?Q?=34=35=36=37=38=39=2E?=" + +-- Iteration 16 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrk=?= + =?UTF-8?B?zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD?= + =?UTF-8?Q?=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C?= + =?UTF-8?Q?=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33?= + =?UTF-8?Q?=34=35=36=37=38=39=2E?=" + +-- Iteration 17 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrk=?= + =?UTF-8?B?zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD?= + =?UTF-8?Q?=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C?= + =?UTF-8?Q?=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33?= + =?UTF-8?Q?=34=35=36=37=38=39=2E?=" + +-- Iteration 18 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrk=?= + =?UTF-8?B?zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD?= + =?UTF-8?Q?=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C?= + =?UTF-8?Q?=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33?= + =?UTF-8?Q?=34=35=36=37=38=39=2E?=" + +-- Iteration 19 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrk=?= + =?UTF-8?B?zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF?= + =?UTF-8?Q?=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA?= + =?UTF-8?Q?=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31?= + =?UTF-8?Q?=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 20 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869?= + =?UTF-8?B?zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF?= + =?UTF-8?Q?=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA?= + =?UTF-8?Q?=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31?= + =?UTF-8?Q?=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 21 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869?= + =?UTF-8?B?zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF?= + =?UTF-8?Q?=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA?= + =?UTF-8?Q?=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31?= + =?UTF-8?Q?=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 22 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869?= + =?UTF-8?B?zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF?= + =?UTF-8?Q?=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA?= + =?UTF-8?Q?=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31?= + =?UTF-8?Q?=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 23 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869?= + =?UTF-8?B?zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF?= + =?UTF-8?Q?=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA?= + =?UTF-8?Q?=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31?= + =?UTF-8?Q?=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 24 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrs=?= + =?UTF-8?B?zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF?= + =?UTF-8?Q?=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA?= + =?UTF-8?Q?=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31?= + =?UTF-8?Q?=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 25 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrs=?= + =?UTF-8?B?zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9?= + =?UTF-8?Q?=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20?= + =?UTF-8?Q?=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 26 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrs=?= + =?UTF-8?B?zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9?= + =?UTF-8?Q?=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20?= + =?UTF-8?Q?=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 27 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrs=?= + =?UTF-8?B?zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9?= + =?UTF-8?Q?=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20?= + =?UTF-8?Q?=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 28 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67?= + =?UTF-8?B?zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9?= + =?UTF-8?Q?=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20?= + =?UTF-8?Q?=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 29 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67?= + =?UTF-8?B?zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9?= + =?UTF-8?Q?=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20?= + =?UTF-8?Q?=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 30 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67?= + =?UTF-8?B?zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9?= + =?UTF-8?Q?=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20?= + =?UTF-8?Q?=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 31 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67?= + =?UTF-8?B?zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20?= + =?UTF-8?Q?=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD?= + =?UTF-8?Q?=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF?= + =?UTF-8?Q?=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 32 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSA=?= + =?UTF-8?B?zrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20?= + =?UTF-8?Q?=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD?= + =?UTF-8?Q?=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF?= + =?UTF-8?Q?=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 33 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSA=?= + =?UTF-8?B?zrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20?= + =?UTF-8?Q?=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD?= + =?UTF-8?Q?=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF?= + =?UTF-8?Q?=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 34 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSA=?= + =?UTF-8?B?zrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20?= + =?UTF-8?Q?=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD?= + =?UTF-8?Q?=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF?= + =?UTF-8?Q?=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 35 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSA=?= + =?UTF-8?B?zrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20?= + =?UTF-8?Q?=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD?= + =?UTF-8?Q?=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF?= + =?UTF-8?Q?=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 36 -- +string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrE=?= + =?UTF-8?B?zrkgzrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4?= + =?UTF-8?B?OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20?= + =?UTF-8?Q?=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD?= + =?UTF-8?Q?=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF?= + =?UTF-8?Q?=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 37 -- +string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrE=?= + =?UTF-8?B?zrkgzrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4?= + =?UTF-8?B?OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C?= + =?UTF-8?Q?=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7?= + =?UTF-8?Q?=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD?= + =?UTF-8?Q?=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 38 -- +string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrE=?= + =?UTF-8?B?zrkgzrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4?= + =?UTF-8?B?OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C?= + =?UTF-8?Q?=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7?= + =?UTF-8?Q?=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD?= + =?UTF-8?Q?=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 39 -- +string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrE=?= + =?UTF-8?B?zrkgzrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEyMzQ1Njc4?= + =?UTF-8?B?OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C?= + =?UTF-8?Q?=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB=CE=B7?= + =?UTF-8?Q?=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5=CE=BD?= + =?UTF-8?Q?=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 40 -- +string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869?= + =?UTF-8?B?zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2?= + =?UTF-8?B?Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84?= + =?UTF-8?Q?=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB?= + =?UTF-8?Q?=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5?= + =?UTF-8?Q?=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 41 -- +string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869?= + =?UTF-8?B?zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2?= + =?UTF-8?B?Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84?= + =?UTF-8?Q?=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB?= + =?UTF-8?Q?=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5?= + =?UTF-8?Q?=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 42 -- +string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869?= + =?UTF-8?B?zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2?= + =?UTF-8?B?Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84?= + =?UTF-8?Q?=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB?= + =?UTF-8?Q?=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5?= + =?UTF-8?Q?=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 43 -- +string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869?= + =?UTF-8?B?zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2?= + =?UTF-8?B?Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84?= + =?UTF-8?Q?=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB?= + =?UTF-8?Q?=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5?= + =?UTF-8?Q?=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 44 -- +string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrU=?= + =?UTF-8?B?zq/Ovc6xzrkgzrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEy?= + =?UTF-8?B?MzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84?= + =?UTF-8?Q?=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB?= + =?UTF-8?Q?=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5?= + =?UTF-8?Q?=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 45 -- +string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrU=?= + =?UTF-8?B?zq/Ovc6xzrkgzrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEy?= + =?UTF-8?B?MzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84?= + =?UTF-8?Q?=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB=CE=BB?= + =?UTF-8?Q?=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC=CE=B5?= + =?UTF-8?Q?=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 46 -- +string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrU=?= + =?UTF-8?B?zq/Ovc6xzrkgzrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEy?= + =?UTF-8?B?MzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85?= + =?UTF-8?Q?=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB?= + =?UTF-8?Q?=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC?= + =?UTF-8?Q?=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 47 -- +string(130) "=?UTF-8?B?zpHPhc+Ez4wgzrU=?= + =?UTF-8?B?zq/Ovc6xzrkgzrXOu867zrfOvc65zrrPjCDOus61zq/OvM61zr3Ovy4gMDEy?= + =?UTF-8?B?MzQ1Njc4OS4=?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85?= + =?UTF-8?Q?=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB?= + =?UTF-8?Q?=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC?= + =?UTF-8?Q?=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 48 -- +string(130) "=?UTF-8?B?zpHPhc+Ez4wg?= + =?UTF-8?B?zrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAw?= + =?UTF-8?B?MTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85?= + =?UTF-8?Q?=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB?= + =?UTF-8?Q?=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC?= + =?UTF-8?Q?=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 49 -- +string(130) "=?UTF-8?B?zpHPhc+Ez4wg?= + =?UTF-8?B?zrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAw?= + =?UTF-8?B?MTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85?= + =?UTF-8?Q?=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB?= + =?UTF-8?Q?=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC?= + =?UTF-8?Q?=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 50 -- +string(130) "=?UTF-8?B?zpHPhc+Ez4wg?= + =?UTF-8?B?zrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAw?= + =?UTF-8?B?MTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85?= + =?UTF-8?Q?=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20=CE=B5=CE=BB?= + =?UTF-8?Q?=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5=CE=AF=CE=BC?= + =?UTF-8?Q?=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38=39=2E?=" + +-- Iteration 51 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 52 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 53 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 54 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 55 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 56 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 57 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 58 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 59 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 60 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 61 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 62 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 63 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 64 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 65 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 66 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 67 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 68 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 69 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 70 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 71 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 72 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 73 -- +string(118) " + =?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(252) " + =?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 74 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 75 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 76 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 77 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 78 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 79 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 80 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 81 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 82 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 83 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 84 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 85 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 86 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 87 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 88 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 89 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 90 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 91 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 92 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 93 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 94 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 95 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 96 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 97 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 98 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" + +-- Iteration 99 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +string(249) "=?UTF-8?Q?=CE=91=CF=85=CF=84=CF=8C=20=CE=B5=CE=AF=CE=BD=CE=B1=CE=B9=20?= + =?UTF-8?Q?=CE=B5=CE=BB=CE=BB=CE=B7=CE=BD=CE=B9=CE=BA=CF=8C=20=CE=BA=CE=B5?= + =?UTF-8?Q?=CE=AF=CE=BC=CE=B5=CE=BD=CE=BF=2E=20=30=31=32=33=34=35=36=37=38?= + =?UTF-8?Q?=39=2E?=" +Done + diff --git a/ext/mbstring/tests/mb_encode_mimeheader_variation1.phpt b/ext/mbstring/tests/mb_encode_mimeheader_variation1.phpt new file mode 100644 index 0000000..7b5bd30 --- /dev/null +++ b/ext/mbstring/tests/mb_encode_mimeheader_variation1.phpt @@ -0,0 +1,184 @@ +--TEST-- +Test mb_encode_mimeheader() function : usage variations - Pass different data types to $str arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_encode_mimeheader') or die("skip mb_encode_mimeheader() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_encode_mimeheader + * (string $str [, string $charset [, string $transfer_encoding [, string $linefeed [, int $indent]]]]) + * Description: Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?= + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass different data types to $str argument to see how mb_encode_mimeheader() behaves + */ + +echo "*** Testing mb_encode_mimeheader() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$charset = 'utf-8'; +$transfer_encoding = 'B'; +$linefeed = "\r\n"; +$indent = 2; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "Class A object"; + } +} + +// heredoc string +$heredoc = <<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $str argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "string", + 'string', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_encode_mimeheader() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_encode_mimeheader($input, $charset, $transfer_encoding, $linefeed, $indent)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_encode_mimeheader() : usage variations *** + +-- Iteration 1 -- +string(1) "0" + +-- Iteration 2 -- +string(1) "1" + +-- Iteration 3 -- +string(5) "12345" + +-- Iteration 4 -- +string(5) "-2345" + +-- Iteration 5 -- +string(4) "10.5" + +-- Iteration 6 -- +string(5) "-10.5" + +-- Iteration 7 -- +string(12) "123456789000" + +-- Iteration 8 -- +string(13) "1.23456789E-9" + +-- Iteration 9 -- +string(3) "0.5" + +-- Iteration 10 -- +string(0) "" + +-- Iteration 11 -- +string(0) "" + +-- Iteration 12 -- +string(1) "1" + +-- Iteration 13 -- +string(0) "" + +-- Iteration 14 -- +string(1) "1" + +-- Iteration 15 -- +string(0) "" + +-- Iteration 16 -- +string(0) "" + +-- Iteration 17 -- +string(0) "" + +-- Iteration 18 -- +string(6) "string" + +-- Iteration 19 -- +string(6) "string" + +-- Iteration 20 -- +string(11) "hello world" + +-- Iteration 21 -- +string(14) "Class A object" + +-- Iteration 22 -- +string(0) "" + +-- Iteration 23 -- +string(0) "" + +-- Iteration 24 -- + +Warning: mb_encode_mimeheader() expects parameter 1 to be string, resource given in %s on line %d +NULL +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_encode_mimeheader_variation2.phpt b/ext/mbstring/tests/mb_encode_mimeheader_variation2.phpt new file mode 100644 index 0000000..e765e94 --- /dev/null +++ b/ext/mbstring/tests/mb_encode_mimeheader_variation2.phpt @@ -0,0 +1,224 @@ +--TEST-- +Test mb_encode_mimeheader() function : usage variations - Pass different data types to $charset arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_encode_mimeheader') or die("skip mb_encode_mimeheader() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_encode_mimeheader + * (string $str [, string $charset [, string $transfer_encoding [, string $linefeed [, int $indent]]]]) + * Description: Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?= + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass different data types to $charset argument to see how mb_encode_mimeheader() behaves + */ + +echo "*** Testing mb_encode_mimeheader() : usage variations ***\n"; + +mb_internal_encoding('utf-8'); + +// Initialise function arguments not being substituted +$str = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC'); +$transfer_encoding = 'B'; +$linefeed = "\r\n"; +$indent = 2; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "UTF-8"; + } +} + +// heredoc string +$heredoc = <<<EOT +utf-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $charset argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "utf-8", + 'utf-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_encode_mimeheader() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_encode_mimeheader($str, $input, $transfer_encoding, $linefeed, $indent)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_encode_mimeheader() : usage variations *** + +-- Iteration 1 -- + +Warning: mb_encode_mimeheader(): Unknown encoding "0" in %s on line %d +bool(false) + +-- Iteration 2 -- + +Warning: mb_encode_mimeheader(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 3 -- + +Warning: mb_encode_mimeheader(): Unknown encoding "12345" in %s on line %d +bool(false) + +-- Iteration 4 -- + +Warning: mb_encode_mimeheader(): Unknown encoding "-2345" in %s on line %d +bool(false) + +-- Iteration 5 -- + +Warning: mb_encode_mimeheader(): Unknown encoding "10.5" in %s on line %d +bool(false) + +-- Iteration 6 -- + +Warning: mb_encode_mimeheader(): Unknown encoding "-10.5" in %s on line %d +bool(false) + +-- Iteration 7 -- + +Warning: mb_encode_mimeheader(): Unknown encoding "123456789000" in %s on line %d +bool(false) + +-- Iteration 8 -- + +Warning: mb_encode_mimeheader(): Unknown encoding "1.23456789E-9" in %s on line %d +bool(false) + +-- Iteration 9 -- + +Warning: mb_encode_mimeheader(): Unknown encoding "0.5" in %s on line %d +bool(false) + +-- Iteration 10 -- + +Warning: mb_encode_mimeheader(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 11 -- + +Warning: mb_encode_mimeheader(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 12 -- + +Warning: mb_encode_mimeheader(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 13 -- + +Warning: mb_encode_mimeheader(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 14 -- + +Warning: mb_encode_mimeheader(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 15 -- + +Warning: mb_encode_mimeheader(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 16 -- + +Warning: mb_encode_mimeheader(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 17 -- + +Warning: mb_encode_mimeheader(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 18 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 19 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 20 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 21 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 22 -- + +Warning: mb_encode_mimeheader(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 23 -- + +Warning: mb_encode_mimeheader(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 24 -- + +Warning: mb_encode_mimeheader() expects parameter 2 to be string, resource given in %s on line %d +NULL +Done diff --git a/ext/mbstring/tests/mb_encode_mimeheader_variation3.phpt b/ext/mbstring/tests/mb_encode_mimeheader_variation3.phpt new file mode 100644 index 0000000..c2976f5 --- /dev/null +++ b/ext/mbstring/tests/mb_encode_mimeheader_variation3.phpt @@ -0,0 +1,186 @@ +--TEST-- +Test mb_encode_mimeheader() function : usage variations - Pass different data types to $transfer_encoding arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_encode_mimeheader') or die("skip mb_encode_mimeheader() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_encode_mimeheader + * (string $str [, string $charset [, string $transfer_encoding [, string $linefeed [, int $indent]]]]) + * Description: Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?= + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass different data types to $transfer_encoding argument to see how mb_encode_mimeheader() behaves + */ + +echo "*** Testing mb_encode_mimeheader() : usage variations ***\n"; + +mb_internal_encoding('utf-8'); + +// Initialise function arguments not being substituted +$str = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC'); +$charset = 'utf-8'; +$linefeed = "\r\n"; +$indent = 2; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "Class A object"; + } +} + +// heredoc string +$heredoc = <<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $transfer_encoding argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "string", + 'string', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_encode_mimeheader() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_encode_mimeheader($str, $charset, $input, $linefeed, $indent)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_encode_mimeheader() : usage variations *** + +-- Iteration 1 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 2 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 3 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 4 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 5 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 6 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 7 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 8 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 9 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 10 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 11 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 12 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 13 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 14 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 15 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 16 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 17 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 18 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 19 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 20 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 21 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 22 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 23 -- +string(52) "=?UTF-8?B?5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC?=" + +-- Iteration 24 -- + +Warning: mb_encode_mimeheader() expects parameter 3 to be string, resource given in %s on line %d +NULL +Done diff --git a/ext/mbstring/tests/mb_encode_mimeheader_variation4.phpt b/ext/mbstring/tests/mb_encode_mimeheader_variation4.phpt new file mode 100644 index 0000000..fe05084 --- /dev/null +++ b/ext/mbstring/tests/mb_encode_mimeheader_variation4.phpt @@ -0,0 +1,187 @@ +--TEST-- +Test mb_encode_mimeheader() function : usage variations - Pass different data types to $linefeed arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_encode_mimeheader') or die("skip mb_encode_mimeheader() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_encode_mimeheader + * (string $str [, string $charset [, string $transfer_encoding [, string $linefeed [, int $indent]]]]) + * Description: Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?= + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass different data types to $linefeed argument to see how mb_encode_mimeheader() behaves + */ + +echo "*** Testing mb_encode_mimeheader() : usage variations ***\n"; +mb_internal_encoding('utf-8'); + + +// Initialise function arguments not being substituted +//longer $str to go over 1 line +$str = base64_decode('zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg=='); +$charset = 'utf-8'; +$transfer_encoding = 'B'; +$indent = 2; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "Class A object"; + } +} + +// heredoc string +$heredoc = <<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $linefeed argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "string", + 'string', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_encode_mimeheader() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_encode_mimeheader($str, $charset, $transfer_encoding, $input, $indent)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_encode_mimeheader() : usage variations *** + +-- Iteration 1 -- +string(114) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=0 =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 2 -- +string(114) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=1 =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 3 -- +string(118) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=12345 =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 4 -- +string(118) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=-2345 =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 5 -- +string(117) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=10.5 =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 6 -- +string(118) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=-10.5 =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 7 -- +string(121) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=12345678 =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 8 -- +string(121) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=1.234567 =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 9 -- +string(116) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=0.5 =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 10 -- +string(113) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 11 -- +string(113) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 12 -- +string(114) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=1 =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 13 -- +string(113) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 14 -- +string(114) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=1 =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 15 -- +string(113) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 16 -- +string(113) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 17 -- +string(113) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 18 -- +string(119) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=string =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 19 -- +string(119) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=string =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 20 -- +string(121) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=hello wo =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 21 -- +string(121) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=Class A =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 22 -- +string(113) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 23 -- +string(113) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 24 -- + +Warning: mb_encode_mimeheader() expects parameter 4 to be string, resource given in %s on line %d +NULL +Done diff --git a/ext/mbstring/tests/mb_encode_mimeheader_variation5.phpt b/ext/mbstring/tests/mb_encode_mimeheader_variation5.phpt new file mode 100644 index 0000000..d57bc10 --- /dev/null +++ b/ext/mbstring/tests/mb_encode_mimeheader_variation5.phpt @@ -0,0 +1,215 @@ +--TEST-- +Test mb_encode_mimeheader() function : usage variations - Pass different data types to $indent arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_encode_mimeheader') or die("skip mb_encode_mimeheader() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_encode_mimeheader + * (string $str [, string $charset [, string $transfer_encoding [, string $linefeed [, int $indent]]]]) + * Description: Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?= + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass different data types to $indent argument to see how mb_encode_mimeheader() behaves + */ + +echo "*** Testing mb_encode_mimeheader() : usage variations ***\n"; + +mb_internal_encoding('utf-8'); + +// Initialise function arguments not being substituted +$str = base64_decode('zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg=='); +$charset = 'utf-8'; +$transfer_encoding = 'B'; +$linefeed = "\r\n"; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "Class A object"; + } +} + +// heredoc string +$heredoc = <<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $indent argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "string", + 'string', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_encode_mimeheader() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_encode_mimeheader($str, $charset, $transfer_encoding, $linefeed, $input)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_encode_mimeheader() : usage variations *** + +-- Iteration 1 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 2 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 3 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 4 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 5 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66?= + =?UTF-8?B?zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 6 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 7 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 8 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 9 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 10 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 11 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 12 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 13 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 14 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 15 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 16 -- + +Warning: mb_encode_mimeheader() expects parameter 5 to be long, string given in %s on line %d +NULL + +-- Iteration 17 -- + +Warning: mb_encode_mimeheader() expects parameter 5 to be long, string given in %s on line %d +NULL + +-- Iteration 18 -- + +Warning: mb_encode_mimeheader() expects parameter 5 to be long, string given in %s on line %d +NULL + +-- Iteration 19 -- + +Warning: mb_encode_mimeheader() expects parameter 5 to be long, string given in %s on line %d +NULL + +-- Iteration 20 -- + +Warning: mb_encode_mimeheader() expects parameter 5 to be long, string given in %s on line %d +NULL + +-- Iteration 21 -- + +Warning: mb_encode_mimeheader() expects parameter 5 to be long, object given in %s on line %d +NULL + +-- Iteration 22 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 23 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 24 -- + +Warning: mb_encode_mimeheader() expects parameter 5 to be long, resource given in %s on line %d +NULL +Done diff --git a/ext/mbstring/tests/mb_encode_mimeheader_variation6.phpt b/ext/mbstring/tests/mb_encode_mimeheader_variation6.phpt new file mode 100644 index 0000000..668ae8b --- /dev/null +++ b/ext/mbstring/tests/mb_encode_mimeheader_variation6.phpt @@ -0,0 +1,53 @@ +--TEST-- +Test mb_encode_mimeheader() function : usage variations - Pass different strings to $linefeed arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_encode_mimeheader') or die("skip mb_encode_mimeheader() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_encode_mimeheader + * (string $str [, string $charset [, string $transfer_encoding [, string $linefeed [, int $indent]]]]) + * Description: Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?= + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass different strings to $linefeed argument + */ + +echo "*** Testing mb_encode_mimeheader() : usage variations ***\n"; + +mb_internal_encoding('utf-8'); + +$linefeeds = array("\r\n", + "\n", + "---"); +$str = base64_decode('zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg=='); + +$iterator = 1; +foreach ($linefeeds as $linefeed) { + echo "\n-- Iteration $iterator --\n"; + var_dump(mb_encode_mimeheader($str, 'utf-8', 'B', $linefeed)); + $iterator++; +} + + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_encode_mimeheader() : usage variations *** + +-- Iteration 1 -- +string(115) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 2 -- +string(114) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?= + =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" + +-- Iteration 3 -- +string(116) "=?UTF-8?B?zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868?=--- =?UTF-8?B?zrXOvc6/LiAwMTIzNDU2Nzg5Lg==?=" +Done diff --git a/ext/mbstring/tests/mb_encode_numericentity.phpt b/ext/mbstring/tests/mb_encode_numericentity.phpt new file mode 100644 index 0000000..dffb419 --- /dev/null +++ b/ext/mbstring/tests/mb_encode_numericentity.phpt @@ -0,0 +1,22 @@ +--TEST-- +Test mb_encode_numericentity() function : Convert UTF-8 to HTML-Entities +--SKIPIF-- +<?php +if (!extension_loaded('mbstring')) die('skip mbstring not enabled'); +function_exists('mb_encode_mimeheader') or die("skip mb_encode_mimeheader() is not available in this build"); +?> +--FILE-- +<?php +$str1 = '¡¢£¤¥¦§¨©ª«¬Â®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖרÙÚÛÜÃÞßà áâãäåæçèéêëìÃîïðñòóôõö÷øùúûüýþÿ'; +$str2 = 'ƒΑΒΓΔΕΖΗΘΙΚΛΜÎΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπÏςστυφχψωϑϒϖ•…′″‾â„℘ℑℜ™ℵâ†â†‘→↓↔↵â‡â‡‘⇒⇓⇔∀∂∃∅∇∈∉∋âˆâˆ‘−∗√âˆâˆžâˆ ∧∨∩∪∫∴∼≅≈≠≡≤≥⊂⊃⊄⊆⊇⊕⊗⊥⋅⌈⌉⌊⌋〈〉◊♠♣♥♦'; +$convmap = array(0x0, 0x2FFFF, 0, 0xFFFF); +echo mb_encode_numericentity($str1, $convmap, "UTF-8")."\n"; +echo mb_encode_numericentity($str2, $convmap, "UTF-8")."\n"; + +$convmap = array(0xFF, 0x2FFFF, 0, 0xFFFF); +echo mb_encode_numericentity('aÅ’bÅ“cÅ dÅ¡e€fg', $convmap, "UTF-8")."\n"; +?> +--EXPECTF-- +¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ +ƒΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρςστυφχψωϑϒϖ•…′″‾⁄℘ℑℜ™ℵ←↑→↓↔↵⇐⇑⇒⇓⇔∀∂∃∅∇∈∉∋∏∑−∗√∝∞∠∧∨∩∪∫∴∼≅≈≠≡≤≥⊂⊃⊄⊆⊇⊕⊗⊥⋅⌈⌉⌊⌋〈〉◊♠♣♥♦ +aŒbœcŠdše€fg diff --git a/ext/mbstring/tests/mb_encoding_aliases.phpt b/ext/mbstring/tests/mb_encoding_aliases.phpt new file mode 100644 index 0000000..8ef2994 --- /dev/null +++ b/ext/mbstring/tests/mb_encoding_aliases.phpt @@ -0,0 +1,45 @@ +--TEST-- +mb_encoding_aliases() +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +mb_encoding_aliases(); +$list = mb_encoding_aliases("ASCII"); +sort($list); +var_dump($list); +var_dump(mb_encoding_aliases("7bit")); +var_dump(mb_encoding_aliases("8bit")); +?> +--EXPECTF-- +Warning: mb_encoding_aliases() expects exactly 1 parameter, 0 given in %s on line 2 +array(11) { + [0]=> + string(14) "ANSI_X3.4-1968" + [1]=> + string(14) "ANSI_X3.4-1986" + [2]=> + string(7) "IBM-367" + [3]=> + string(6) "IBM367" + [4]=> + string(9) "ISO646-US" + [5]=> + string(16) "ISO_646.irv:1991" + [6]=> + string(8) "US-ASCII" + [7]=> + string(5) "cp367" + [8]=> + string(7) "csASCII" + [9]=> + string(8) "iso-ir-6" + [10]=> + string(2) "us" +} +array(0) { +} +array(1) { + [0]=> + string(6) "binary" +} diff --git a/ext/mbstring/tests/mb_ereg-compat-01.phpt b/ext/mbstring/tests/mb_ereg-compat-01.phpt new file mode 100644 index 0000000..0937678 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg-compat-01.phpt @@ -0,0 +1,21 @@ +--TEST-- +mb_ereg() compat test 1 +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build"); +?> +--FILE-- +<?php +/* (counterpart: ext/standard/tests/reg/004.phpt) */ + $a="This is a nice and simple string"; + if (mb_ereg(".*nice and simple.*",$a)) { + echo "ok\n"; + } + if (!mb_ereg(".*doesn't exist.*",$a)) { + echo "ok\n"; + } +?> +--EXPECT-- +ok +ok diff --git a/ext/mbstring/tests/mb_ereg-compat-02.phpt b/ext/mbstring/tests/mb_ereg-compat-02.phpt new file mode 100644 index 0000000..2f40422 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg-compat-02.phpt @@ -0,0 +1,25 @@ +--TEST-- +mb_ereg() compat test 2 +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build"); +?> +--FILE-- +<?php +/* (counterpart: ext/standard/tests/reg/005.phpt) */ + $a="This is a nice and simple string"; + echo mb_ereg(".*(is).*(is).*",$a,$registers); + echo "\n"; + echo $registers[0]; + echo "\n"; + echo $registers[1]; + echo "\n"; + echo $registers[2]; + echo "\n"; +?> +--EXPECT-- +32 +This is a nice and simple string +is +is diff --git a/ext/mbstring/tests/mb_ereg.phpt b/ext/mbstring/tests/mb_ereg.phpt new file mode 100644 index 0000000..8fc5b94 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg.phpt @@ -0,0 +1,46 @@ +--TEST-- +mb_ereg() +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build"); +?> +--INI-- +output_handler= +--FILE-- +<?php + mb_regex_set_options( '' ); + + $encs = array( 'EUC-JP', 'Shift_JIS', 'SJIS', 'UTF-8' ); + + function test_ereg( $test_enc, $pat, $str, $in_enc = 'EUC-JP' ) { + mb_regex_encoding( $test_enc ); + $pat = mb_convert_encoding( $pat, $test_enc, $in_enc ); + $str = mb_convert_encoding( $str, $test_enc, $in_enc ); + printf( "(%d)%s\n", mb_ereg( $pat, $str, $reg ), ( is_array( $reg )? bin2hex(mb_convert_encoding( implode( b' ', $reg ), $in_enc, $test_enc )) : '' ) ); + } + function do_tests( $enc ) { + test_ereg( $enc, b'abc ([a-z]+) ([a-z]+) ([a-z]+)$', b"abc def ghi jkl" ); + $pat = b'([£á-£ú]+) ([ ¤¢-¤«]+)([¤«-¤Ê]+) ([¤ï-¤ó]+)$'; + test_ereg( $enc, $pat, b'£á£â£ã ¤¢¤ª¤¤ ¤«¤³¤Ê ¤ï¤ñ¤ó' ); + test_ereg( $enc, $pat, b'£í£ú£ø£æ£ð ¤¦¤ª¤« ¤¤« ¤ò¤ð' ); + } + + foreach( $encs as $enc ) { + do_tests( $enc ); + } +?> + +--EXPECT-- +(15)6162632064656620676869206a6b6c2064656620676869206a6b6c +(27)a3e1a3e2a3e320a4a2a4aaa4a420a4aba4b3a4ca20a4efa4f1a4f320a3e1a3e2a3e320a4a2a4aaa4a420a4ab20a4b3a4ca20a4efa4f1a4f3 +(27)a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab20a4ada4ab20a4f2a4f020a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab2020a4ada4ab20a4f2a4f0 +(15)6162632064656620676869206a6b6c2064656620676869206a6b6c +(27)a3e1a3e2a3e320a4a2a4aaa4a420a4aba4b3a4ca20a4efa4f1a4f320a3e1a3e2a3e320a4a2a4aaa4a420a4ab20a4b3a4ca20a4efa4f1a4f3 +(27)a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab20a4ada4ab20a4f2a4f020a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab2020a4ada4ab20a4f2a4f0 +(15)6162632064656620676869206a6b6c2064656620676869206a6b6c +(27)a3e1a3e2a3e320a4a2a4aaa4a420a4aba4b3a4ca20a4efa4f1a4f320a3e1a3e2a3e320a4a2a4aaa4a420a4ab20a4b3a4ca20a4efa4f1a4f3 +(27)a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab20a4ada4ab20a4f2a4f020a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab2020a4ada4ab20a4f2a4f0 +(15)6162632064656620676869206a6b6c2064656620676869206a6b6c +(39)a3e1a3e2a3e320a4a2a4aaa4a420a4aba4b3a4ca20a4efa4f1a4f320a3e1a3e2a3e320a4a2a4aaa4a420a4ab20a4b3a4ca20a4efa4f1a4f3 +(39)a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab20a4ada4ab20a4f2a4f020a3eda3faa3f8a3e6a3f020a4a6a4aaa4ab2020a4ada4ab20a4f2a4f0
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_ereg1.phpt b/ext/mbstring/tests/mb_ereg1.phpt new file mode 100644 index 0000000..57884c0 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg1.phpt @@ -0,0 +1,77 @@ +--TEST-- +mb_ereg() and invalid arguments +--SKIPIF-- +<?php if (!function_exists("mb_ereg")) print "skip"; ?> +--FILE-- +<?php + +$a = array( + array(1,2,3), + array("", "", ""), + array(array(), 1, ""), + array(1, array(), ""), + array(1, "", array()), + ); + +foreach ($a as $args) { + var_dump(mb_ereg($args[0], $args[1], $args[2])); + var_dump($args); +} +?> +===DONE=== +--EXPECTF-- +bool(false) +array(3) { + [0]=> + int(1) + [1]=> + int(2) + [2]=> + int(3) +} + +Warning: mb_ereg(): empty pattern in %s on line %d +bool(false) +array(3) { + [0]=> + string(0) "" + [1]=> + string(0) "" + [2]=> + string(0) "" +} + +Notice: Array to string conversion in %s on line %d +bool(false) +array(3) { + [0]=> + array(0) { + } + [1]=> + int(1) + [2]=> + string(0) "" +} + +Warning: mb_ereg() expects parameter 2 to be string, array given in %s on line %d +bool(false) +array(3) { + [0]=> + int(1) + [1]=> + array(0) { + } + [2]=> + string(0) "" +} +bool(false) +array(3) { + [0]=> + int(1) + [1]=> + string(0) "" + [2]=> + array(0) { + } +} +===DONE=== diff --git a/ext/mbstring/tests/mb_ereg2.phpt b/ext/mbstring/tests/mb_ereg2.phpt new file mode 100644 index 0000000..2b79baf --- /dev/null +++ b/ext/mbstring/tests/mb_ereg2.phpt @@ -0,0 +1,41 @@ +--TEST-- +mb_ereg() returning matches +--SKIPIF-- +<?php if (!function_exists("mb_ereg")) print "skip"; ?> +--FILE-- +<?php + +$a = -1; $b = -1; $c = -1; +mbereg($a, $b, $c); +var_dump($a, $b, $c); + +mberegi($a, $b, $c); +var_dump($a, $b, $c); + +mbereg_search_init($a, $b, $c); +var_dump($a, $b, $c); + +echo "Done\n"; +?> +--EXPECTF-- +int(-1) +int(-1) +array(1) { + [0]=> + string(2) "-1" +} +int(-1) +int(-1) +array(1) { + [0]=> + string(2) "-1" +} + +Warning: mbereg_search_init() expects parameter 3 to be string, array given in %s on line %d +int(-1) +int(-1) +array(1) { + [0]=> + string(2) "-1" +} +Done diff --git a/ext/mbstring/tests/mb_ereg3.phpt b/ext/mbstring/tests/mb_ereg3.phpt new file mode 100644 index 0000000..abec3e7 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg3.phpt @@ -0,0 +1,44 @@ +--TEST-- +mb_ereg() returning matches +--SKIPIF-- +<?php +if (!extension_loaded('mbstring')) die('skip mbstring not enabled'); +if (!function_exists("mb_ereg")) print "skip mb_ereg() not available"; +?> +--FILE-- +<?php + +$a = -1; $b = -1; $c = -1; +mbereg($a, $b, $c); +var_dump($a, $b, $c); + +mberegi($a, $b, $c); +var_dump($a, $b, $c); + +mbereg_search_init($a, $b, $c); +var_dump($a, $b, $c); + +echo "Done\n"; +?> +--EXPECTF-- +int(-1) +int(-1) +array(1) { + [0]=> + string(2) "-1" +} +int(-1) +int(-1) +array(1) { + [0]=> + string(2) "-1" +} + +Warning: mbereg_search_init() expects parameter 3 to be %binary_string_optional%, array given in %s on line %d +int(-1) +int(-1) +array(1) { + [0]=> + string(2) "-1" +} +Done diff --git a/ext/mbstring/tests/mb_ereg4.phpt b/ext/mbstring/tests/mb_ereg4.phpt new file mode 100644 index 0000000..8dca435 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg4.phpt @@ -0,0 +1,44 @@ +--TEST-- +mb_ereg() returning matches +--SKIPIF-- +<?php +if (!extension_loaded('mbstring')) die('skip mbstring not enabled'); +if (!function_exists("mb_ereg")) print "skip mb_ereg() not available"; +?> +--FILE-- +<?php + +$a = -1; $b = -1; $c = -1; +mbereg($a, $b, $c); +var_dump($a, $b, $c); + +mberegi($a, $b, $c); +var_dump($a, $b, $c); + +mbereg_search_init($a, $b, $c); +var_dump($a, $b, $c); + +echo "Done\n"; +?> +--EXPECTF-- +int(-1) +int(-1) +array(1) { + [0]=> + string(2) "-1" +} +int(-1) +int(-1) +array(1) { + [0]=> + string(2) "-1" +} + +Warning: mbereg_search_init() expects parameter 3 to be string, array given in %s on line %d +int(-1) +int(-1) +array(1) { + [0]=> + string(2) "-1" +} +Done diff --git a/ext/mbstring/tests/mb_ereg_basic.phpt b/ext/mbstring/tests/mb_ereg_basic.phpt new file mode 100644 index 0000000..db28223 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_basic.phpt @@ -0,0 +1,117 @@ +--TEST-- +Test mb_ereg() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_ereg(string $pattern, string $string [, array $registers]) + * Description: Regular expression match for multibyte string + * Source code: ext/mbstring/php_mbregex.c + */ + +/* + * Test basic functionality of mb_ereg + */ + +echo "*** Testing mb_ereg() : basic functionality ***\n"; + +if(mb_regex_encoding('utf-8') == true) { + echo "Regex encoding set to utf-8\n"; +} else { + echo "Could not set regex encoding to utf-8\n"; +} +$string_ascii = b'This is an English string. 0123456789.'; +$regex_ascii1 = b'(.*is)+.*\.[[:blank:]][0-9]{9}'; +$regex_ascii2 = b'.*is+'; + +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); +$regex_mb1 = base64_decode('KOaXpeacrOiqnikuKj8oWzEtOV0rKQ=='); +$regex_mb2 = base64_decode('5LiW55WM'); + +echo "\n**-- ASCII String --**\n"; +echo "-- Without \$regs argument--\n"; +var_dump(mb_ereg($regex_ascii1, $string_ascii)); +var_dump(mb_ereg($regex_ascii2, $string_ascii)); +echo "--With \$regs argument --\n"; +var_dump(mb_ereg($regex_ascii1, $string_ascii, $regs_ascii1)); +base64_encode_var_dump($regs_ascii1); +var_dump(mb_ereg($regex_ascii2, $string_ascii, $regs_ascii2)); +base64_encode_var_dump($regs_ascii2); + +echo "\n**-- Multibyte String --**\n"; +echo "-- Without \$regs argument --\n"; +var_dump(mb_ereg($regex_mb1, $string_mb)); +var_dump(mb_ereg($regex_mb2, $string_mb)); +echo "-- With \$regs argument --\n"; +var_dump(mb_ereg($regex_mb1, $string_mb, $regs_mb1)); +base64_encode_var_dump($regs_mb1); +var_dump(mb_ereg($regex_mb2, $string_mb, $regs_mb2)); +var_dump($regs_mb2); + +echo "Done"; + +/** + * replicate a var dump of an array but outputted string values are base64 encoded + * + * @param array $regs + */ +function base64_encode_var_dump($regs) { + if ($regs) { + echo "array(" . count($regs) . ") {\n"; + foreach ($regs as $key => $value) { + echo " [$key]=>\n "; + if (is_string($value)) { + var_dump(base64_encode($value)); + } else { + var_dump($value); + } + } + echo "}\n"; + } else { + echo "NULL\n"; + } +} +?> + +--EXPECT-- +*** Testing mb_ereg() : basic functionality *** +Regex encoding set to utf-8 + +**-- ASCII String --** +-- Without $regs argument-- +int(1) +int(1) +--With $regs argument -- +int(36) +array(2) { + [0]=> + string(48) "VGhpcyBpcyBhbiBFbmdsaXNoIHN0cmluZy4gMDEyMzQ1Njc4" + [1]=> + string(24) "VGhpcyBpcyBhbiBFbmdsaXM=" +} +int(17) +array(1) { + [0]=> + string(24) "VGhpcyBpcyBhbiBFbmdsaXM=" +} + +**-- Multibyte String --** +-- Without $regs argument -- +int(1) +bool(false) +-- With $regs argument -- +int(35) +array(3) { + [0]=> + string(48) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzQ=" + [1]=> + string(12) "5pel5pys6Kqe" + [2]=> + string(8) "MTIzNA==" +} +bool(false) +NULL +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_ereg_error.phpt b/ext/mbstring/tests/mb_ereg_error.phpt new file mode 100644 index 0000000..3610aea --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_error.phpt @@ -0,0 +1,49 @@ +--TEST-- +Test mb_ereg() function : error conditions - pass incorrect number of arguments +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_ereg(string $pattern, string $string [, array $registers]) + * Description: Regular expression match for multibyte string + * Source code: ext/mbstring/php_mbregex.c + */ + +/* + * Test behaviour of mb_ereg() when passed an incorrcect number of arguments + */ + +echo "*** Testing mb_ereg() : error conditions ***\n"; + + +//Test mb_ereg with one more than the expected number of arguments +echo "\n-- Testing mb_ereg() function with more than expected no. of arguments --\n"; +$pattern = b'string_val'; +$string = b'string_val'; +$registers = array(1, 2); +$extra_arg = 10; +var_dump( mb_ereg($pattern, $string, $registers, $extra_arg) ); + +// Testing mb_ereg with one less than the expected number of arguments +echo "\n-- Testing mb_ereg() function with less than expected no. of arguments --\n"; +$pattern = b'string_val'; +var_dump( mb_ereg($pattern) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_ereg() : error conditions *** + +-- Testing mb_ereg() function with more than expected no. of arguments -- + +Warning: mb_ereg() expects at most 3 parameters, 4 given in %s on line %d +bool(false) + +-- Testing mb_ereg() function with less than expected no. of arguments -- + +Warning: mb_ereg() expects at least 2 parameters, 1 given in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_ereg_match_basic.phpt b/ext/mbstring/tests/mb_ereg_match_basic.phpt new file mode 100644 index 0000000..56710a9 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_match_basic.phpt @@ -0,0 +1,59 @@ +--TEST-- +Test mb_ereg_match() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_match') or die("skip mb_ereg_match() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : bool mb_ereg_match(string $pattern, string $string [,string $option]) + * Description: Regular expression match for multibyte string + * Source code: ext/mbstring/php_mbregex.c + */ + +/* + * Test basic functionality of mb_ereg_match + */ + +mb_internal_encoding('UTF-8'); +mb_regex_encoding('UTF-8'); + +echo "*** Testing mb_ereg_match() : basic functionality ***\n"; +$string_ascii = b'abc def, 0123456789'; +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); + +//will return true as pattern matches from start of string +echo "\n-- ASCII string 1 --\n"; +var_dump(mb_ereg_match(b'.*def', $string_ascii)); + +//will return false as pattern would match half way through string +echo "\n-- ASCII string 2 --\n"; +var_dump(mb_ereg_match(b'def', $string_ascii)); + +echo "\n-- Multibyte string 1 --\n"; +$regex1 = base64_decode('5pel5pys6KqeKC4qKT9bMS05XSs='); +var_dump(mb_ereg_match($regex1, $string_mb, b'i')); + +echo "\n-- Multibyte string 2 --\n"; +$regex2 = base64_decode('5LiW55WM'); +var_dump(mb_ereg_match($regex2, $string_mb)); + +echo "Done"; +?> +--EXPECTF-- + +*** Testing mb_ereg_match() : basic functionality *** + +-- ASCII string 1 -- +bool(true) + +-- ASCII string 2 -- +bool(false) + +-- Multibyte string 1 -- +bool(true) + +-- Multibyte string 2 -- +bool(false) +Done diff --git a/ext/mbstring/tests/mb_ereg_match_error1.phpt b/ext/mbstring/tests/mb_ereg_match_error1.phpt new file mode 100644 index 0000000..b36c686 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_match_error1.phpt @@ -0,0 +1,58 @@ +--TEST-- +Test mb_ereg_match() function : error conditions - pass function incorrect number of arguments +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_match') or die("skip mb_ereg_match() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : bool mb_ereg_match(string $pattern, string $string [,string $option]) + * Description: Regular expression match for multibyte string + * Source code: ext/mbstring/php_mbregex.c + */ + +/* + * Test mb_ereg_match by passing an incorrect number of arguments + */ + +echo "*** Testing mb_ereg_match() : error conditions ***\n"; + + +//Test mb_ereg_match with one more than the expected number of arguments +echo "\n-- Testing mb_ereg_match() function with more than expected no. of arguments --\n"; +$pattern = b'string_val'; +$string = b'string_val'; +$option = 'string_val'; +$extra_arg = 10; +var_dump( mb_ereg_match($pattern, $string, $option, $extra_arg) ); + +// Testing mb_ereg_match with one less than the expected number of arguments +echo "\n-- Testing mb_ereg_match() function with less than expected no. of arguments --\n"; +$pattern = b'string_val'; +var_dump( mb_ereg_match($pattern) ); + +// Testing mb_ereg_match with zero arguments +echo "\n-- Testing mb_ereg_match() function with zero arguments --\n"; +var_dump( mb_ereg_match() ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_ereg_match() : error conditions *** + +-- Testing mb_ereg_match() function with more than expected no. of arguments -- + +Warning: mb_ereg_match() expects at most 3 parameters, 4 given in %s on line %d +bool(false) + +-- Testing mb_ereg_match() function with less than expected no. of arguments -- + +Warning: mb_ereg_match() expects at least 2 parameters, 1 given in %s on line %d +bool(false) + +-- Testing mb_ereg_match() function with zero arguments -- + +Warning: mb_ereg_match() expects at least 2 parameters, 0 given in %s on line %d +bool(false) +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-01.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-01.phpt new file mode 100644 index 0000000..ad2c6c1 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace-compat-01.phpt @@ -0,0 +1,15 @@ +--TEST-- +mb_ereg_replace() compat test 1 +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +/* (counterpart: ext/standard/tests/reg/001.phpt) */ + $a="abc123"; + echo mb_ereg_replace("123","def",$a); +?> +--EXPECT-- +abcdef diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-02.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-02.phpt new file mode 100644 index 0000000..b5ea121 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace-compat-02.phpt @@ -0,0 +1,15 @@ +--TEST-- +mb_ereg_replace() compat test 2 +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +/* (counterpart: ext/standard/tests/reg/002.phpt) */ + $a="abc123"; + echo mb_ereg_replace("123","",$a); +?> +--EXPECT-- +abc diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-03.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-03.phpt new file mode 100644 index 0000000..c02a346 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace-compat-03.phpt @@ -0,0 +1,15 @@ +--TEST-- +mb_ereg_replace() compat test 3 +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +/* (counterpart: ext/standard/tests/reg/003.phpt) */ + $a="\\'test"; + echo mb_ereg_replace("\\\\'","'",$a); +?> +--EXPECT-- +'test diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-04.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-04.phpt new file mode 100644 index 0000000..94ff320 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace-compat-04.phpt @@ -0,0 +1,15 @@ +--TEST-- +mb_ereg_replace() compat test 4 +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +/* (counterpart: ext/standard/tests/reg/006.phpt) */ + $a="This is a nice and simple string"; + echo mb_ereg_replace("^This","That",$a); +?> +--EXPECT-- +That is a nice and simple string diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-05.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-05.phpt new file mode 100644 index 0000000..f5dae3d --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace-compat-05.phpt @@ -0,0 +1,16 @@ +--TEST-- +mb_ereg_replace() compat test 5 +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +/* (counterpart: ext/standard/tests/reg/007.phpt) */ + $a="abcd"; + $b=mb_ereg_replace("abcd","",$a); + echo "strlen(\$b)=".strlen($b); +?> +--EXPECT-- +strlen($b)=0 diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-06.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-06.phpt new file mode 100644 index 0000000..8c84dc1 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace-compat-06.phpt @@ -0,0 +1,14 @@ +--TEST-- +mb_ereg_replace() compat test 6 +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +/* (counterpart: ext/standard/tests/reg/008.phpt) */ + echo mb_ereg_replace("([a-z]*)([-=+|]*)([0-9]+)","\\3 \\1 \\2\n","abc+-|=123"); +?> +--EXPECT-- +123 abc +-|= diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-07.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-07.phpt new file mode 100644 index 0000000..e390655 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace-compat-07.phpt @@ -0,0 +1,15 @@ +--TEST-- +mb_ereg_replace() compat test 7 +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +/* (counterpart: ext/standard/tests/reg/010.phpt) */ + $a="abc122222222223"; + echo mb_ereg_replace("1(2*)3","\\1def\\1",$a); +?> +--EXPECT-- +abc2222222222def2222222222 diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-08.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-08.phpt new file mode 100644 index 0000000..5ccc9fd --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace-compat-08.phpt @@ -0,0 +1,15 @@ +--TEST-- +mb_ereg_replace() compat test 8 +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +/* (counterpart: ext/standard/tests/reg/011.phpt) */ + $a="abc123"; + echo mb_ereg_replace("123","def\\0ghi",$a); +?> +--EXPECT-- +abcdef123ghi diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-09.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-09.phpt new file mode 100644 index 0000000..bef8be1 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace-compat-09.phpt @@ -0,0 +1,15 @@ +--TEST-- +mb_ereg_replace() compat test 9 +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +/* (counterpart: ext/standard/tests/reg/012.phpt) */ + $a="abc123"; + echo mb_ereg_replace("123",'def\1ghi',$a); +?> +--EXPECT-- +abcdef\1ghi diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-10.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-10.phpt new file mode 100644 index 0000000..ac80a4e --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace-compat-10.phpt @@ -0,0 +1,15 @@ +--TEST-- +mb_ereg_replace() compat test 10 +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +/* (counterpart: ext/standard/tests/reg/013.phpt) */ + $a="abc123"; + echo mb_ereg_replace("123","def\\g\\\\hi\\",$a); +?> +--EXPECT-- +abcdef\g\\hi\ diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-11.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-11.phpt new file mode 100644 index 0000000..7ae3edf --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace-compat-11.phpt @@ -0,0 +1,15 @@ +--TEST-- +mb_ereg_replace() compat test 11 +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +/* (counterpart: ext/standard/tests/reg/014.phpt) */ + $a="a\\2bxc"; + echo mb_ereg_replace("a(.*)b(.*)c","\\1",$a); +?> +--EXPECT-- +\2 diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-12.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-12.phpt new file mode 100644 index 0000000..53bc51e --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace-compat-12.phpt @@ -0,0 +1,14 @@ +--TEST-- +mb_ereg_replace() compat test 12 +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +/* (counterpart: ext/standard/tests/reg/015.phpt) */ + echo mb_ereg_replace("^","z","abc123"); +?> +--EXPECT-- +zabc123 diff --git a/ext/mbstring/tests/mb_ereg_replace-compat-13.phpt b/ext/mbstring/tests/mb_ereg_replace-compat-13.phpt new file mode 100644 index 0000000..2975ab7 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace-compat-13.phpt @@ -0,0 +1,14 @@ +--TEST-- +mb_ereg_replace() compat test 13 +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +/* (counterpart: ext/standard/tests/reg/016.phpt) */ + echo mb_ereg_replace('\?',"abc","?123?"); +?> +--EXPECT-- +abc123abc diff --git a/ext/mbstring/tests/mb_ereg_replace.phpt b/ext/mbstring/tests/mb_ereg_replace.phpt new file mode 100644 index 0000000..9413da8 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace.phpt @@ -0,0 +1,18 @@ +--TEST-- +mb_ereg_replace() +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php + mb_regex_set_options( '' ); + print mb_ereg_replace( ' ', '-', 'a b c d e' )."\n"; + print mb_ereg_replace( '([a-z]+)','[\\1]', 'abc def ghi' ); +?> + +--EXPECT-- +a-b-c-d-e +[abc] [def] [ghi] + diff --git a/ext/mbstring/tests/mb_ereg_replace_basic.phpt b/ext/mbstring/tests/mb_ereg_replace_basic.phpt new file mode 100644 index 0000000..5a07004 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace_basic.phpt @@ -0,0 +1,62 @@ +--TEST-- +Test mb_ereg_replace() function : basic +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_ereg_replace(string $pattern, string $replacement, + * string $string [, string o$ption]) + * Description: Replace regular expression for multibyte string + * Source code: ext/mbstring/php_mbregex.c + */ + +/* + * Test Basic Functionality of mb_ereg_replace() + */ + +echo "*** Testing mb_ereg_replace() : basic functionality ***\n"; + +mb_internal_encoding('UTF-8'); +mb_regex_encoding('UTF-8'); + +$string_ascii = b'abc def'; +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); + +echo "\n-- ASCII string 1 --\n"; +$result_1 = mb_ereg_replace(b'(.*)def', b'\\1 123', $string_ascii); +var_dump(bin2hex($result_1)); + +echo "\n-- ASCII string 2 --\n"; +$result_2 = mb_ereg_replace(b'123', b'abc', $string_ascii); +var_dump(bin2hex($result_2)); + +echo "\n-- Multibyte string 1 --\n"; +$regex1 = base64_decode('KOaXpeacrOiqnikuKj8oWzEtOV0rKQ=='); //Japanese regex in UTF-8 +$result_3 = mb_ereg_replace($regex1, b'\\1_____\\2', $string_mb); +var_dump(bin2hex($result_3)); + +echo "\n-- Multibyte string 2 --\n"; +$regex2 = base64_decode('5LiW55WM'); +$result_4 = mb_ereg_replace($regex2, b'_____', $string_mb); +var_dump(bin2hex($result_4)); + +echo "Done"; +?> +--EXPECT-- +*** Testing mb_ereg_replace() : basic functionality *** + +-- ASCII string 1 -- +string(16) "6162632020313233" + +-- ASCII string 2 -- +string(14) "61626320646566" + +-- Multibyte string 1 -- +string(72) "e697a5e69cace8aa9e5f5f5f5f5f31323334efbc95efbc96efbc97efbc98efbc99e38082" + +-- Multibyte string 2 -- +string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082" +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_ereg_replace_callback.phpt b/ext/mbstring/tests/mb_ereg_replace_callback.phpt new file mode 100644 index 0000000..98a3809 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace_callback.phpt @@ -0,0 +1,15 @@ +--TEST-- +mb_ereg_replace_callback() +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +function_exists('mb_ereg_replace_callback') or die("skip mb_ereg_replace_callback() is not available in this build"); +?> +--FILE-- +<?php +$str = 'abc 123 #",; $foo'; +echo mb_ereg_replace_callback('(\S+)', function($m){return $m[1].'('.strlen($m[1]).')';}, $str); +?> +--EXPECT-- +abc(3) 123(3) #",;(4) $foo(4) + diff --git a/ext/mbstring/tests/mb_ereg_replace_error.phpt b/ext/mbstring/tests/mb_ereg_replace_error.phpt new file mode 100644 index 0000000..9413936 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace_error.phpt @@ -0,0 +1,47 @@ +--TEST-- +Test mb_ereg_replace() function : error conditions +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : proto string mb_ereg_replace(string pattern, string replacement, string string [, string option]) + * Description: Replace regular expression for multibyte string + * Source code: ext/mbstring/php_mbregex.c + * Alias to functions: + */ + +echo "*** Testing mb_ereg_replace() : error conditions ***\n"; + +//Test mb_ereg_replace with one more than the expected number of arguments +echo "\n-- Testing mb_ereg_replace() function with more than expected no. of arguments --\n"; +$pattern = b'[a-k]'; +$replacement = b'1'; +$string = b'string_val'; +$option = ''; +$extra_arg = 10; +var_dump( mb_ereg_replace($pattern, $replacement, $string, $option, $extra_arg) ); + +// Testing mb_ereg_replace with one less than the expected number of arguments +echo "\n-- Testing mb_ereg_replace() function with less than expected no. of arguments --\n"; +$pattern = b'string_val'; +$replacement = b'string_val'; +var_dump( mb_ereg_replace($pattern, $replacement) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_ereg_replace() : error conditions *** + +-- Testing mb_ereg_replace() function with more than expected no. of arguments -- + +Warning: mb_ereg_replace() expects at most 4 parameters, 5 given in %s on line %d +bool(false) + +-- Testing mb_ereg_replace() function with less than expected no. of arguments -- + +Warning: mb_ereg_replace() expects at least 3 parameters, 2 given in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_ereg_replace_variation1.phpt b/ext/mbstring/tests/mb_ereg_replace_variation1.phpt new file mode 100644 index 0000000..3e24979 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace_variation1.phpt @@ -0,0 +1,170 @@ +--TEST-- +Test mb_ereg_replace() function : usage variations - <type here specifics of this variation> +--INI-- +error_reporting=E_ALL & ~E_NOTICE +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : proto string mb_ereg_replace(string pattern, string replacement, string string [, string option]) + * Description: Replace regular expression for multibyte string + * Source code: ext/mbstring/php_mbregex.c + * Alias to functions: + */ + +echo "*** Testing mb_ereg_replace() : usage variations ***\n"; + +// Initialise function arguments not being substituted (if any) +$replacement = 'string_val'; +$string = 'string_val'; +$option = ''; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "UTF-8"; + } +} + +// heredoc string +$heredoc = <<<EOT +UTF-8 +EOT; + +// unexpected values to be passed to $encoding argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "UTF-8", + 'UTF-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + +); + +// loop through each element of the array for pattern + +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_ereg_replace($input, $replacement, $string, $option) ); + $iterator++; +}; + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_ereg_replace() : usage variations *** + +-- Iteration 1 -- +string(10) "string_val" + +-- Iteration 2 -- +string(10) "string_val" + +-- Iteration 3 -- +string(10) "string_val" + +-- Iteration 4 -- +string(10) "string_val" + +-- Iteration 5 -- +string(10) "string_val" + +-- Iteration 6 -- +string(10) "string_val" + +-- Iteration 7 -- +string(10) "string_val" + +-- Iteration 8 -- +string(10) "string_val" + +-- Iteration 9 -- +string(10) "string_val" + +-- Iteration 10 -- +string(10) "string_val" + +-- Iteration 11 -- +string(10) "string_val" + +-- Iteration 12 -- +string(10) "string_val" + +-- Iteration 13 -- +string(10) "string_val" + +-- Iteration 14 -- +string(10) "string_val" + +-- Iteration 15 -- +string(10) "string_val" + +-- Iteration 16 -- +string(120) "string_valsstring_valtstring_valrstring_valistring_valnstring_valgstring_val_string_valvstring_valastring_vallstring_val" + +-- Iteration 17 -- +string(120) "string_valsstring_valtstring_valrstring_valistring_valnstring_valgstring_val_string_valvstring_valastring_vallstring_val" + +-- Iteration 18 -- +string(10) "string_val" + +-- Iteration 19 -- +string(10) "string_val" + +-- Iteration 20 -- +string(10) "string_val" + +-- Iteration 21 -- +string(10) "string_val" + +-- Iteration 22 -- +string(10) "string_val" + +-- Iteration 23 -- +string(10) "string_val" +Done diff --git a/ext/mbstring/tests/mb_ereg_replace_variation2.phpt b/ext/mbstring/tests/mb_ereg_replace_variation2.phpt new file mode 100644 index 0000000..37a89fc --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace_variation2.phpt @@ -0,0 +1,178 @@ +--TEST-- +Test mb_ereg_replace() function : usage variations +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : proto string mb_ereg_replace(string pattern, string replacement, string string [, string option]) + * Description: Replace regular expression for multibyte string + * Source code: ext/mbstring/php_mbregex.c + * Alias to functions: + */ + +echo "*** Testing mb_ereg_replace() : usage variations ***\n"; + +// Initialise function arguments not being substituted (if any) +$pattern = '[a-z]'; +$string = 'string_val'; +$option = ''; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "UTF-8"; + } +} + +// heredoc string +$heredoc = <<<EOT +UTF-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $encoding argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "UTF-8", + 'UTF-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of the array for pattern + +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_ereg_replace($pattern, $input, $string, $option) ); + $iterator++; +}; +fclose($fp); +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_ereg_replace() : usage variations *** + +-- Iteration 1 -- +string(10) "000000_000" + +-- Iteration 2 -- +string(10) "111111_111" + +-- Iteration 3 -- +string(46) "123451234512345123451234512345_123451234512345" + +-- Iteration 4 -- +string(46) "-2345-2345-2345-2345-2345-2345_-2345-2345-2345" + +-- Iteration 5 -- +string(37) "10.510.510.510.510.510.5_10.510.510.5" + +-- Iteration 6 -- +string(46) "-10.5-10.5-10.5-10.5-10.5-10.5_-10.5-10.5-10.5" + +-- Iteration 7 -- +string(109) "123456789000123456789000123456789000123456789000123456789000123456789000_123456789000123456789000123456789000" + +-- Iteration 8 -- +string(118) "1.23456789E-91.23456789E-91.23456789E-91.23456789E-91.23456789E-91.23456789E-9_1.23456789E-91.23456789E-91.23456789E-9" + +-- Iteration 9 -- +string(28) "0.50.50.50.50.50.5_0.50.50.5" + +-- Iteration 10 -- +string(1) "_" + +-- Iteration 11 -- +string(1) "_" + +-- Iteration 12 -- +string(10) "111111_111" + +-- Iteration 13 -- +string(1) "_" + +-- Iteration 14 -- +string(10) "111111_111" + +-- Iteration 15 -- +string(1) "_" + +-- Iteration 16 -- +string(1) "_" + +-- Iteration 17 -- +string(1) "_" + +-- Iteration 18 -- +string(46) "UTF-8UTF-8UTF-8UTF-8UTF-8UTF-8_UTF-8UTF-8UTF-8" + +-- Iteration 19 -- +string(46) "UTF-8UTF-8UTF-8UTF-8UTF-8UTF-8_UTF-8UTF-8UTF-8" + +-- Iteration 20 -- +string(46) "UTF-8UTF-8UTF-8UTF-8UTF-8UTF-8_UTF-8UTF-8UTF-8" + +-- Iteration 21 -- +string(46) "UTF-8UTF-8UTF-8UTF-8UTF-8UTF-8_UTF-8UTF-8UTF-8" + +-- Iteration 22 -- +string(1) "_" + +-- Iteration 23 -- +string(1) "_" + +-- Iteration 24 -- + +Warning: mb_ereg_replace() expects parameter 2 to be string, resource given in %s on line %d +bool(false) +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_ereg_replace_variation3.phpt b/ext/mbstring/tests/mb_ereg_replace_variation3.phpt new file mode 100644 index 0000000..09da6cd --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace_variation3.phpt @@ -0,0 +1,179 @@ +--TEST-- +Test mb_ereg_replace() function : usage variations +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : proto string mb_ereg_replace(string pattern, string replacement, string string [, string option]) + * Description: Replace regular expression for multibyte string + * Source code: ext/mbstring/php_mbregex.c + * Alias to functions: + */ + +echo "*** Testing mb_ereg_replace() : usage variations ***\n"; + +// Initialise function arguments not being substituted (if any) +$pattern = '[a-z]'; +$replacement = 'string_val'; +$option = ''; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "UTF-8"; + } +} + +// heredoc string +$heredoc = <<<EOT +UTF-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $encoding argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "UTF-8", + 'UTF-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of the array for pattern + +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_ereg_replace($pattern, $replacement, $input, $option) ); + $iterator++; +}; + +fclose($fp); +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_ereg_replace() : usage variations *** + +-- Iteration 1 -- +string(1) "0" + +-- Iteration 2 -- +string(1) "1" + +-- Iteration 3 -- +string(5) "12345" + +-- Iteration 4 -- +string(5) "-2345" + +-- Iteration 5 -- +string(4) "10.5" + +-- Iteration 6 -- +string(5) "-10.5" + +-- Iteration 7 -- +string(12) "123456789000" + +-- Iteration 8 -- +string(13) "1.23456789E-9" + +-- Iteration 9 -- +string(3) "0.5" + +-- Iteration 10 -- +string(0) "" + +-- Iteration 11 -- +string(0) "" + +-- Iteration 12 -- +string(1) "1" + +-- Iteration 13 -- +string(0) "" + +-- Iteration 14 -- +string(1) "1" + +-- Iteration 15 -- +string(0) "" + +-- Iteration 16 -- +string(0) "" + +-- Iteration 17 -- +string(0) "" + +-- Iteration 18 -- +string(5) "UTF-8" + +-- Iteration 19 -- +string(5) "UTF-8" + +-- Iteration 20 -- +string(5) "UTF-8" + +-- Iteration 21 -- +string(5) "UTF-8" + +-- Iteration 22 -- +string(0) "" + +-- Iteration 23 -- +string(0) "" + +-- Iteration 24 -- + +Warning: mb_ereg_replace() expects parameter 3 to be string, resource given in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_ereg_replace_variation4.phpt b/ext/mbstring/tests/mb_ereg_replace_variation4.phpt new file mode 100644 index 0000000..05b4f60 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_replace_variation4.phpt @@ -0,0 +1,179 @@ +--TEST-- +Test mb_ereg_replace() function : usage variations +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : proto string mb_ereg_replace(string pattern, string replacement, string string [, string option]) + * Description: Replace regular expression for multibyte string + * Source code: ext/mbstring/php_mbregex.c + * Alias to functions: + */ + +echo "*** Testing mb_ereg_replace() : usage variations ***\n"; + +// Initialise function arguments not being substituted (if any) +$pattern = '[a-k]'; +$replacement = '1'; +$string = 'string_val'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "UTF-8"; + } +} + +// heredoc string +$heredoc = <<<EOT +UTF-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $encoding argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "UTF-8", + 'UTF-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of the array for pattern + +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_ereg_replace($pattern, $replacement, $string, $input) ); + $iterator++; +}; + +fclose($fp); +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_ereg_replace() : usage variations *** + +-- Iteration 1 -- +string(10) "str1n1_v1l" + +-- Iteration 2 -- +string(10) "str1n1_v1l" + +-- Iteration 3 -- +string(10) "str1n1_v1l" + +-- Iteration 4 -- +string(10) "str1n1_v1l" + +-- Iteration 5 -- +string(10) "str1n1_v1l" + +-- Iteration 6 -- +string(10) "str1n1_v1l" + +-- Iteration 7 -- +string(10) "str1n1_v1l" + +-- Iteration 8 -- +string(10) "str1n1_v1l" + +-- Iteration 9 -- +string(10) "str1n1_v1l" + +-- Iteration 10 -- +string(10) "str1n1_v1l" + +-- Iteration 11 -- +string(10) "str1n1_v1l" + +-- Iteration 12 -- +string(10) "str1n1_v1l" + +-- Iteration 13 -- +string(10) "str1n1_v1l" + +-- Iteration 14 -- +string(10) "str1n1_v1l" + +-- Iteration 15 -- +string(10) "str1n1_v1l" + +-- Iteration 16 -- +string(10) "str1n1_v1l" + +-- Iteration 17 -- +string(10) "str1n1_v1l" + +-- Iteration 18 -- +string(10) "str1n1_v1l" + +-- Iteration 19 -- +string(10) "str1n1_v1l" + +-- Iteration 20 -- +string(10) "str1n1_v1l" + +-- Iteration 21 -- +string(10) "str1n1_v1l" + +-- Iteration 22 -- +string(10) "str1n1_v1l" + +-- Iteration 23 -- +string(10) "str1n1_v1l" + +-- Iteration 24 -- + +Warning: mb_ereg_replace() expects parameter 4 to be string, resource given in %s on line %d +bool(false) +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_ereg_search.phpt b/ext/mbstring/tests/mb_ereg_search.phpt new file mode 100644 index 0000000..4df54c4 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_search.phpt @@ -0,0 +1,39 @@ +--TEST-- +Testing mb_ereg_search() function +--SKIPIF-- +<?php +if (!extension_loaded('mbstring')) die('skip mbstring not enabled'); +function_exists('mb_ereg_search') or die("skip mb_ereg_search() is not available in this build"); +?> +--FILE-- +<?php + $str = "ä¸å›½abc + abc ?!?ï¼å—符# china string"; + + $reg = "\w+"; + + mb_regex_encoding("UTF-8"); + + mb_ereg_search_init($str, $reg); + $r = mb_ereg_search(); + + if(!$r) + { + echo "null\n"; + } + else + { + $r = mb_ereg_search_getregs(); //get first result + do + { + var_dump($r[0]); + $r = mb_ereg_search_regs();//get next result + } + while($r); + } +?> +--EXPECT-- +string(9) "ä¸å›½abc" +string(3) "abc" +string(6) "å—符" +string(5) "china" +string(6) "string" diff --git a/ext/mbstring/tests/mb_ereg_search_pos.phpt b/ext/mbstring/tests/mb_ereg_search_pos.phpt new file mode 100644 index 0000000..08fcd7f --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_search_pos.phpt @@ -0,0 +1,31 @@ +--TEST-- +mb_ereg_search_pos() # a test for the basic function of mb_ereg_search_pos +--SKIPIF-- +<?php +if (!extension_loaded('mbstring')) die('skip mbstring not enabled'); +?> +--FILE-- +<?php +mb_regex_encoding('iso-8859-1'); +$test_str = 'Iñtërnâtiônàlizætiøn'; + +if(mb_ereg_search_init($test_str)) +{ + $val=mb_ereg_search_pos("nâtiôn"); + + var_dump($val); + +} +else{ + var_dump("false"); +} +?> +--EXPECT-- +array(2) { + [0]=> + int(5) + [1]=> + int(6) +} + + diff --git a/ext/mbstring/tests/mb_ereg_search_regs.phpt b/ext/mbstring/tests/mb_ereg_search_regs.phpt new file mode 100644 index 0000000..2cc55a7 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_search_regs.phpt @@ -0,0 +1,28 @@ +--TEST-- +Funktionstest mb_ereg_search_regs() +--SKIPIF-- +<?php +if (!extension_loaded('mbstring')) die('skip mbstring not enabled'); +function_exists('mb_ereg_search_regs') or die("skip mb_ereg_search_regs() not available"); +?> +--FILE-- +<?php + // homepage: + + //$mb_str = "ÐлекÑей Федорович Карамазов был ÐлекÑей Федорович Карамазов был kyrillischer string string"; + // = "Lorem ipsum dolor sit amet" + + mb_ereg_search_init("ÐлекÑей Федорович Карамазов был ÐлекÑей Федорович Карамазов был"); + + + + $match= mb_ereg_search_regs("ов"); + var_dump($match); + + +?> +--EXPECT-- +array(1) { + [0]=> + string(4) "ов" +} diff --git a/ext/mbstring/tests/mb_ereg_search_xxx.phpt b/ext/mbstring/tests/mb_ereg_search_xxx.phpt new file mode 100644 index 0000000..c2c0b84 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_search_xxx.phpt @@ -0,0 +1,82 @@ +--TEST-- +mb_ereg_search() stuff +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +function_exists('mb_ereg_search') or die("skip\n"); +?> +--INI-- +output_handler= +--FILE-- +<?php + mb_regex_set_options( '' ); + + $encs = array( 'EUC-JP', 'Shift_JIS', 'SJIS', 'UTF-8' ); + + function test_search( $test_enc, $str, $look_for, $opt, $in_enc = 'EUC-JP' ) { + mb_regex_encoding( $test_enc ); + $str = mb_convert_encoding( $str, $test_enc, $in_enc ); + $look_for = mb_convert_encoding( $look_for, $test_enc, $in_enc ); + mb_ereg_search_init( $str, $look_for, $opt ); + while ( mb_ereg_search_pos() ) { + $regs = mb_ereg_search_getregs(); + array_shift( $regs ); + printf( "(%s) (%d) %s\n", $test_enc, mb_ereg_search_getpos(), mb_convert_encoding( ( is_array( $regs ) ? implode( '-', $regs ): '' ), $in_enc, $test_enc ) ); + } + } + function do_tests( $enc, $opt ) { + test_search( $enc, "¢Ï¡¦ ¡¦¢Ï\n", ' (¡¦?¢Ï¡¦?)[[:space:]]', $opt ); + test_search( $enc, 'abcde abdeabcf anvfabc odu abcd ', '(ab[a-z]+)', $opt ); + } + + foreach( $encs as $enc ) { + do_tests( $enc, '' ); + do_tests( $enc, 'x' ); + } +?> + +--EXPECT-- +(EUC-JP) (10) ¡¦¢Ï +(EUC-JP) (5) abcde +(EUC-JP) (14) abdeabcf +(EUC-JP) (22) abc +(EUC-JP) (31) abcd +(EUC-JP) (5) ¢Ï¡¦ +(EUC-JP) (10) ¡¦¢Ï +(EUC-JP) (5) abcde +(EUC-JP) (14) abdeabcf +(EUC-JP) (22) abc +(EUC-JP) (31) abcd +(Shift_JIS) (10) ¡¦¢Ï +(Shift_JIS) (5) abcde +(Shift_JIS) (14) abdeabcf +(Shift_JIS) (22) abc +(Shift_JIS) (31) abcd +(Shift_JIS) (5) ¢Ï¡¦ +(Shift_JIS) (10) ¡¦¢Ï +(Shift_JIS) (5) abcde +(Shift_JIS) (14) abdeabcf +(Shift_JIS) (22) abc +(Shift_JIS) (31) abcd +(SJIS) (10) ¡¦¢Ï +(SJIS) (5) abcde +(SJIS) (14) abdeabcf +(SJIS) (22) abc +(SJIS) (31) abcd +(SJIS) (5) ¢Ï¡¦ +(SJIS) (10) ¡¦¢Ï +(SJIS) (5) abcde +(SJIS) (14) abdeabcf +(SJIS) (22) abc +(SJIS) (31) abcd +(UTF-8) (14) ¡¦¢Ï +(UTF-8) (5) abcde +(UTF-8) (14) abdeabcf +(UTF-8) (22) abc +(UTF-8) (31) abcd +(UTF-8) (7) ¢Ï¡¦ +(UTF-8) (14) ¡¦¢Ï +(UTF-8) (5) abcde +(UTF-8) (14) abdeabcf +(UTF-8) (22) abc +(UTF-8) (31) abcd diff --git a/ext/mbstring/tests/mb_ereg_variation1.phpt b/ext/mbstring/tests/mb_ereg_variation1.phpt new file mode 100644 index 0000000..1f4419d --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_variation1.phpt @@ -0,0 +1,165 @@ +--TEST-- +Test mb_ereg() function : usage variations - pass different data types to $pattern argument +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_ereg(string $pattern, string $string [, array $registers]) + * Description: Regular expression match for multibyte string + * Source code: ext/mbstring/php_mbregex.c + */ + +/* + * Pass different data types to $pattern argument + */ + +echo "*** Testing mb_ereg() : usage variations ***\n"; + +// Initialise function arguments not being substituted (if any) +$string = 'string value'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "Class A object"; + } +} + +// heredoc string +$heredoc = <<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $pattern argument +$inputs = array( + +// int data +/*1*/ 0, + 1, + 12345, + -2345, + +// float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + +// boolean data +/*10*/ true, + TRUE, + +// string data +/*12*/ "string", + 'string', + $heredoc, + +// object data +/*15*/ new classA(), + +// resource variable +/*16*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_ereg() +$iterator = 1; +foreach($inputs as $input) { + if (@is_array($regs)){ + $regs = null; + } + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_ereg($input, $string, $regs) ); + var_dump($regs); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_ereg() : usage variations *** + +-- Iteration 1 -- +bool(false) +NULL + +-- Iteration 2 -- +bool(false) +NULL + +-- Iteration 3 -- +bool(false) +NULL + +-- Iteration 4 -- +bool(false) +NULL + +-- Iteration 5 -- +bool(false) +NULL + +-- Iteration 6 -- +bool(false) +NULL + +-- Iteration 7 -- +bool(false) +NULL + +-- Iteration 8 -- +bool(false) +NULL + +-- Iteration 9 -- +bool(false) +NULL + +-- Iteration 10 -- +bool(false) +NULL + +-- Iteration 11 -- +bool(false) +NULL + +-- Iteration 12 -- +int(6) +array(1) { + [0]=> + string(6) "string" +} + +-- Iteration 13 -- +int(6) +array(1) { + [0]=> + string(6) "string" +} + +-- Iteration 14 -- +bool(false) +NULL + +-- Iteration 15 -- +bool(false) +NULL + +-- Iteration 16 -- +bool(false) +NULL +Done diff --git a/ext/mbstring/tests/mb_ereg_variation2.phpt b/ext/mbstring/tests/mb_ereg_variation2.phpt new file mode 100644 index 0000000..d85c8bd --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_variation2.phpt @@ -0,0 +1,216 @@ +--TEST-- +Test mb_ereg() function : usage variations - pass different data types to $string arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_ereg(string $pattern, string $string [, array $registers]) + * Description: Regular expression match for multibyte string + * Source code: ext/mbstring/php_mbregex.c + */ + +/* + * Test behaviour of mb_ereg() when passed different data types as $string arg + */ + +echo "*** Testing mb_ereg() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$pattern = 'str'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "Class A object"; + } +} + +// heredoc string +$heredoc = <<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $string argument +$inputs = array( + +// int data +/*1*/ 0, + 1, + 12345, + -2345, + +// float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + +// null data +/*10*/ NULL, + null, + +// boolean data +/*12*/ true, + false, + TRUE, + FALSE, + +// empty data +/*16*/ "", + '', + +// string data +/*18*/ "string", + 'string', + $heredoc, + +// object data +/*21*/ new classA(), + +// undefined data +/*22*/ @$undefined_var, + +// unset data +/*23*/ @$unset_var, + +// resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_ereg() +$iterator = 1; +foreach($inputs as $input) { + if (@is_array($regs)){ + $regs = null; + } + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_ereg($pattern, $input, $regs) ); + var_dump($regs); + $iterator++; +}; + +fclose($fp); + +echo "Done"; + +?> + +--EXPECTF-- +*** Testing mb_ereg() : usage variations *** + +-- Iteration 1 -- +bool(false) +NULL + +-- Iteration 2 -- +bool(false) +NULL + +-- Iteration 3 -- +bool(false) +NULL + +-- Iteration 4 -- +bool(false) +NULL + +-- Iteration 5 -- +bool(false) +NULL + +-- Iteration 6 -- +bool(false) +NULL + +-- Iteration 7 -- +bool(false) +NULL + +-- Iteration 8 -- +bool(false) +NULL + +-- Iteration 9 -- +bool(false) +NULL + +-- Iteration 10 -- +bool(false) +NULL + +-- Iteration 11 -- +bool(false) +NULL + +-- Iteration 12 -- +bool(false) +NULL + +-- Iteration 13 -- +bool(false) +NULL + +-- Iteration 14 -- +bool(false) +NULL + +-- Iteration 15 -- +bool(false) +NULL + +-- Iteration 16 -- +bool(false) +NULL + +-- Iteration 17 -- +bool(false) +NULL + +-- Iteration 18 -- +int(3) +array(1) { + [0]=> + string(3) "str" +} + +-- Iteration 19 -- +int(3) +array(1) { + [0]=> + string(3) "str" +} + +-- Iteration 20 -- +bool(false) +NULL + +-- Iteration 21 -- +bool(false) +NULL + +-- Iteration 22 -- +bool(false) +NULL + +-- Iteration 23 -- +bool(false) +NULL + +-- Iteration 24 -- + +Warning: mb_ereg() expects parameter 2 to be string, resource given in %s on line %d +bool(false) +NULL +Done diff --git a/ext/mbstring/tests/mb_ereg_variation3.phpt b/ext/mbstring/tests/mb_ereg_variation3.phpt new file mode 100644 index 0000000..d30ddc7 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_variation3.phpt @@ -0,0 +1,159 @@ +--TEST-- +Test mb_ereg() function : usage variations - pass different character classes to see they match correctly +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_ereg(string $pattern, string $string [, array $registers]) + * Description: Regular expression match for multibyte string + * Source code: ext/mbstring/php_mbregex.c + */ + +/* + * test that mb_ereg can match correctly when passed different character classes. + */ + +echo "*** Testing mb_ereg() : variation ***\n"; + + +mb_regex_encoding('utf-8'); // have to set otherwise won't match $mb properly +$mb = base64_decode('5pel5pys6Kqe'); +$character_classes = array (b'aB1' => b'[[:alnum:]]+', /*1*/ + b'aBcD' => b'[[:alpha:]]+', + b'ab/=' => b'[[:ascii:]]+', + b" \t" => b'[[:blank:]]+', + b'234' => b'[[:digit:]]+', /*5*/ + "$mb" => b'[[:graph:]]+', + b'fjds' => b'[[:lower:]]+', + b"$mb\t" => b'[[:print:]]+', + b'.!"*@' => b'[[:punct:]]+', + b"\t" => b'[[:space:]]+', /*10*/ + b'IDSJV' => b'[[:upper:]]+', + b'3b5D' => b'[[:xdigit:]]+'); /*12*/ + +$iterator = 1; +foreach($character_classes as $string => $pattern) { + if (is_array(@$regs)) { + $regs = null; + } + // make sure any multibyte output is in base 64 + echo "\n-- Iteration $iterator --\n"; + var_dump(mb_ereg($pattern, $string, $regs)); + base64_encode_var_dump($regs); + $iterator++; +} +/** + * replicate a var dump of an array but outputted string values are base64 encoded + * + * @param array $regs + */ +function base64_encode_var_dump($regs) { + if ($regs) { + echo "array(" . count($regs) . ") {\n"; + foreach ($regs as $key => $value) { + echo " [$key]=>\n "; + if (is_string($value)) { + var_dump(base64_encode($value)); + } else { + var_dump($value); + } + } + echo "}\n"; + } else { + echo "NULL\n"; + } +} + +echo "Done"; +?> + +--EXPECT-- +*** Testing mb_ereg() : variation *** + +-- Iteration 1 -- +int(3) +array(1) { + [0]=> + string(4) "YUIx" +} + +-- Iteration 2 -- +int(4) +array(1) { + [0]=> + string(8) "YUJjRA==" +} + +-- Iteration 3 -- +int(4) +array(1) { + [0]=> + string(8) "YWIvPQ==" +} + +-- Iteration 4 -- +int(2) +array(1) { + [0]=> + string(4) "IAk=" +} + +-- Iteration 5 -- +int(3) +array(1) { + [0]=> + string(4) "MjM0" +} + +-- Iteration 6 -- +int(9) +array(1) { + [0]=> + string(12) "5pel5pys6Kqe" +} + +-- Iteration 7 -- +int(4) +array(1) { + [0]=> + string(8) "Zmpkcw==" +} + +-- Iteration 8 -- +int(10) +array(1) { + [0]=> + string(16) "5pel5pys6KqeCQ==" +} + +-- Iteration 9 -- +int(5) +array(1) { + [0]=> + string(8) "LiEiKkA=" +} + +-- Iteration 10 -- +int(1) +array(1) { + [0]=> + string(4) "CQ==" +} + +-- Iteration 11 -- +int(5) +array(1) { + [0]=> + string(8) "SURTSlY=" +} + +-- Iteration 12 -- +int(4) +array(1) { + [0]=> + string(8) "M2I1RA==" +} +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_ereg_variation4.phpt b/ext/mbstring/tests/mb_ereg_variation4.phpt new file mode 100644 index 0000000..788d4fe --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_variation4.phpt @@ -0,0 +1,149 @@ +--TEST-- +Test mb_ereg() function : usage variations - pass different character classes as pattern for multibyte string +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_ereg(string $pattern, string $string [, array $registers]) + * Description: Regular expression match for multibyte string + * Source code: ext/mbstring/php_mbregex.c + */ + +/* + * Test how character classes match a multibyte string + */ + +echo "*** Testing mb_ereg() : usage variations ***\n"; + +mb_regex_encoding('utf-8'); + +//contains japanese characters, ASCII digits and different, UTF-8 encoded digits +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); + +$character_classes = array (b'[[:alnum:]]+', /*1*/ + b'[[:alpha:]]+', + b'[[:ascii:]]+', + b'[[:blank:]]+', + b'[[:cntrl:]]+',/*5*/ + b'[[:digit:]]+', + b'[[:graph:]]+', + b'[[:lower:]]+', + b'[[:print:]]+', + b'[[:punct:]]+', /*10*/ + b'[[:space:]]+', + b'[[:upper:]]+', + b'[[:xdigit:]]+'); /*13*/ + +$iterator = 1; +foreach ($character_classes as $pattern) { + if (is_array(@$regs)) { + $regs = null; + } + echo "\n-- Iteration $iterator --\n"; + var_dump(mb_ereg($pattern, $string_mb, $regs)); + if ($regs) { + base64_encode_var_dump($regs); + } + $iterator++; +} +/** + * replicate a var dump of an array but outputted string values are base64 encoded + * + * @param array $regs + */ +function base64_encode_var_dump($regs) { + if ($regs) { + echo "array(" . count($regs) . ") {\n"; + foreach ($regs as $key => $value) { + echo " [$key]=>\n "; + if (is_string($value)) { + var_dump(base64_encode($value)); + } else { + var_dump($value); + } + } + echo "}\n"; + } else { + echo "NULL\n"; + } +} +echo "Done"; + +?> +--EXPECTF-- +*** Testing mb_ereg() : usage variations *** + +-- Iteration 1 -- +int(47) +array(1) { + [0]=> + string(64) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZMDEyMzTvvJXvvJbvvJfvvJjvvJk=" +} + +-- Iteration 2 -- +int(27) +array(1) { + [0]=> + string(36) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ" +} + +-- Iteration 3 -- +int(5) +array(1) { + [0]=> + string(8) "MDEyMzQ=" +} + +-- Iteration 4 -- +bool(false) + +-- Iteration 5 -- +bool(false) + +-- Iteration 6 -- +int(20) +array(1) { + [0]=> + string(28) "MDEyMzTvvJXvvJbvvJfvvJjvvJk=" +} + +-- Iteration 7 -- +int(50) +array(1) { + [0]=> + string(68) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=" +} + +-- Iteration 8 -- +bool(false) + +-- Iteration 9 -- +int(50) +array(1) { + [0]=> + string(68) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=" +} + +-- Iteration 10 -- +int(3) +array(1) { + [0]=> + string(4) "44CC" +} + +-- Iteration 11 -- +bool(false) + +-- Iteration 12 -- +bool(false) + +-- Iteration 13 -- +int(5) +array(1) { + [0]=> + string(8) "MDEyMzQ=" +} +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_ereg_variation5.phpt b/ext/mbstring/tests/mb_ereg_variation5.phpt new file mode 100644 index 0000000..1cecb09 --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_variation5.phpt @@ -0,0 +1,82 @@ +--TEST-- +Test mb_ereg() function : usage variations - Test anchors in regex +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_ereg(string $pattern, string $string [, array $registers]) + * Description: Regular expression match for multibyte string + * Source code: ext/mbstring/php_mbregex.c + */ + +/* + * Test mb_ereg with anchors (start and end of string) in $pattern + */ + +echo "*** Testing mb_ereg() : usage variations ***\n"; + +mb_regex_encoding('utf-8'); + +$string_ascii = b'This is an English string. 0123456789.'; +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); + +$regex = b'^.*?[[:blank:]]?[[:punct:][:digit:]]+\.?$'; + +echo "\nASCII String without \$regs arg:\t\t"; +var_dump(mb_ereg($regex, $string_ascii)); +echo "ASCII String with \$regs arg:\n"; +var_dump(mb_ereg($regex, $string_ascii, $regs_ascii)); +base64_encode_var_dump($regs_ascii); + +echo "\nMultibyte String without \$regs arg:\t"; +var_dump(mb_ereg($regex, $string_mb)); +echo "Multubyte String with \$regs arg:\n"; +var_dump(mb_ereg($regex, $string_mb, $regs_mb)); +base64_encode_var_dump($regs_mb); + +echo "Done"; + +/** + * replicate a var dump of an array but outputted string values are base64 encoded + * + * @param array $regs + */ +function base64_encode_var_dump($regs) { + if ($regs) { + echo "array(" . count($regs) . ") {\n"; + foreach ($regs as $key => $value) { + echo " [$key]=>\n "; + if (is_string($value)) { + var_dump(base64_encode($value)); + } else { + var_dump($value); + } + } + echo "}\n"; + } else { + echo "NULL\n"; + } +} +?> +--EXPECTF-- +*** Testing mb_ereg() : usage variations *** + +ASCII String without $regs arg: int(1) +ASCII String with $regs arg: +int(38) +array(1) { + [0]=> + string(52) "VGhpcyBpcyBhbiBFbmdsaXNoIHN0cmluZy4gMDEyMzQ1Njc4OS4=" +} + +Multibyte String without $regs arg: int(1) +Multubyte String with $regs arg: +int(53) +array(1) { + [0]=> + string(72) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=" +} +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_ereg_variation6.phpt b/ext/mbstring/tests/mb_ereg_variation6.phpt new file mode 100644 index 0000000..0d8687b --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_variation6.phpt @@ -0,0 +1,192 @@ +--TEST-- +Test mb_ereg() function : usage variations - match special characters +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_ereg(string $pattern, string $string [, array $registers]) + * Description: Regular expression match for multibyte string + * Source code: ext/mbstring/php_mbregex.c + */ + +/* + * Test how mb_ereg() matches special characters for $pattern + */ + +echo "*** Testing mb_ereg() : usage variations ***\n"; + +if(mb_regex_encoding('utf-8') == true) { + echo "Regex encoding set to utf-8\n"; +} else { + echo "Could not set regex encoding to utf-8\n"; +} + +$regex_char = array ('\w+' => b'\w+', + '\W+' => b'\W+', + '\s+' => b'\s+', + '\S+' => b'\S+', + '\d+' => b'\d+', + '\D+' => b'\D+', + '\b' => b'\b', + '\B' => b'\B'); + +$string_ascii = b'This is an English string. 0123456789.'; +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); + +foreach ($regex_char as $displayChar => $char) { + echo "\n--** Pattern is: $displayChar **--\n"; + if (@$regs_ascii || @$regs_mb) { + $regs_ascii = null; + $regs_mb = null; + } + echo "-- ASCII String: --\n"; + var_dump(mb_ereg($char, $string_ascii, $regs_ascii)); + base64_encode_var_dump($regs_ascii); + + echo "-- Multibyte String: --\n"; + var_dump(mb_ereg($char, $string_mb, $regs_mb)); + base64_encode_var_dump($regs_mb); + +} + +/** + * replicate a var dump of an array but outputted string values are base64 encoded + * + * @param array $regs + */ +function base64_encode_var_dump($regs) { + if ($regs) { + echo "array(" . count($regs) . ") {\n"; + foreach ($regs as $key => $value) { + echo " [$key]=>\n "; + if (is_string($value)) { + var_dump(base64_encode($value)); + } else { + var_dump($value); + } + } + echo "}\n"; + } else { + echo "NULL\n"; + } +} + +echo "Done"; + +?> +--EXPECT-- +*** Testing mb_ereg() : usage variations *** +Regex encoding set to utf-8 + +--** Pattern is: \w+ **-- +-- ASCII String: -- +int(4) +array(1) { + [0]=> + string(8) "VGhpcw==" +} +-- Multibyte String: -- +int(27) +array(1) { + [0]=> + string(36) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ" +} + +--** Pattern is: \W+ **-- +-- ASCII String: -- +int(1) +array(1) { + [0]=> + string(4) "IA==" +} +-- Multibyte String: -- +int(3) +array(1) { + [0]=> + string(4) "44CC" +} + +--** Pattern is: \s+ **-- +-- ASCII String: -- +int(1) +array(1) { + [0]=> + string(4) "IA==" +} +-- Multibyte String: -- +bool(false) +NULL + +--** Pattern is: \S+ **-- +-- ASCII String: -- +int(4) +array(1) { + [0]=> + string(8) "VGhpcw==" +} +-- Multibyte String: -- +int(53) +array(1) { + [0]=> + string(72) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=" +} + +--** Pattern is: \d+ **-- +-- ASCII String: -- +int(10) +array(1) { + [0]=> + string(16) "MDEyMzQ1Njc4OQ==" +} +-- Multibyte String: -- +int(20) +array(1) { + [0]=> + string(28) "MDEyMzTvvJXvvJbvvJfvvJjvvJk=" +} + +--** Pattern is: \D+ **-- +-- ASCII String: -- +int(27) +array(1) { + [0]=> + string(36) "VGhpcyBpcyBhbiBFbmdsaXNoIHN0cmluZy4g" +} +-- Multibyte String: -- +int(30) +array(1) { + [0]=> + string(40) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC" +} + +--** Pattern is: \b **-- +-- ASCII String: -- +int(1) +array(1) { + [0]=> + bool(false) +} +-- Multibyte String: -- +int(1) +array(1) { + [0]=> + bool(false) +} + +--** Pattern is: \B **-- +-- ASCII String: -- +int(1) +array(1) { + [0]=> + bool(false) +} +-- Multibyte String: -- +int(1) +array(1) { + [0]=> + bool(false) +} +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_ereg_variation7.phpt b/ext/mbstring/tests/mb_ereg_variation7.phpt new file mode 100644 index 0000000..170497d --- /dev/null +++ b/ext/mbstring/tests/mb_ereg_variation7.phpt @@ -0,0 +1,94 @@ +--TEST-- +Test mb_ereg() function : usage variations - different regex features in $pattern +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_ereg(string $pattern, string $string [, array $registers]) + * Description: Regular expression match for multibyte string + * Source code: ext/mbstring/php_mbregex.c + */ + +/* + * Testing the following regular expression features match correctly: + * 1. definite quantifiers + * 2. Alternation + * 3. subpatterns in parentheses + */ + +echo "*** Testing mb_ereg() : usage variations ***\n"; + +if(mb_regex_encoding('utf-8') == true) { + echo "Regex encoding set to utf-8\n"; +} else { + echo "Could not set regex encoding to utf-8\n"; +} + +$string_ascii = b'This is an English string. 0123456789.'; +$regex_ascii = b'([A-Z]\w{1,4}is( [aeiou]|h)) ?.*\.\s[0-9]+(5([6-9][79]){2})[[:punct:]]$'; +var_dump(mb_ereg($regex_ascii, $string_ascii, $regs_ascii)); +base64_encode_var_dump($regs_ascii); + +$string_mb = base64_decode('zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg=='); +$regex_mb = base64_decode("W86RLc6pXShcdysgKSvOtVvOsS3PiVxzXSvOui4qKM+MfM6/KS4qXC5cc1swLTldKyg1KFs2LTldWzc5XSl7Mn0pW1s6cHVuY3Q6XV0k"); +var_dump(mb_ereg($regex_mb, $string_mb, $regs_mb)); +base64_encode_var_dump($regs_mb); + +/** + * replicate a var dump of an array but outputted string values are base64 encoded + * + * @param array $regs + */ +function base64_encode_var_dump($regs) { + if ($regs) { + echo "array(" . count($regs) . ") {\n"; + foreach ($regs as $key => $value) { + echo " [$key]=>\n "; + if (is_string($value)) { + var_dump(base64_encode($value)); + } else { + var_dump($value); + } + } + echo "}\n"; + } else { + echo "NULL\n"; + } +} + +echo "Done"; + +?> +--EXPECT-- +*** Testing mb_ereg() : usage variations *** +Regex encoding set to utf-8 +int(38) +array(5) { + [0]=> + string(52) "VGhpcyBpcyBhbiBFbmdsaXNoIHN0cmluZy4gMDEyMzQ1Njc4OS4=" + [1]=> + string(8) "VGhpcyBp" + [2]=> + string(4) "IGk=" + [3]=> + string(8) "NTY3ODk=" + [4]=> + string(4) "ODk=" +} +int(64) +array(5) { + [0]=> + string(88) "zpHPhc+Ez4wgzrXOr869zrHOuSDOtc67zrvOt869zrnOus+MIM66zrXOr868zrXOvc6/LiAwMTIzNDU2Nzg5Lg==" + [1]=> + string(16) "zrXOr869zrHOuSA=" + [2]=> + string(4) "zr8=" + [3]=> + string(8) "NTY3ODk=" + [4]=> + string(4) "ODk=" +} +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_eregi.phpt b/ext/mbstring/tests/mb_eregi.phpt new file mode 100644 index 0000000..ced6fad --- /dev/null +++ b/ext/mbstring/tests/mb_eregi.phpt @@ -0,0 +1,20 @@ +--TEST-- +mb_eregi() and invalid arguments +--SKIPIF-- +<?php +if (!extension_loaded('mbstring')) die('skip mbstring not enabled'); +if (!function_exists("mb_eregi")) print "skip mb_eregi() not available"; +?> +--FILE-- +<?php + +mb_regex_encoding('utf-8'); + +var_dump(mb_eregi('z', 'XYZ')); +var_dump(mb_eregi('xyzp', 'XYZ')); +var_dump(mb_eregi('ö', 'Öäü')); +?> +--EXPECT-- +int(1) +bool(false) +int(1) diff --git a/ext/mbstring/tests/mb_eregi_invalid_arguments.phpt b/ext/mbstring/tests/mb_eregi_invalid_arguments.phpt new file mode 100644 index 0000000..ced6fad --- /dev/null +++ b/ext/mbstring/tests/mb_eregi_invalid_arguments.phpt @@ -0,0 +1,20 @@ +--TEST-- +mb_eregi() and invalid arguments +--SKIPIF-- +<?php +if (!extension_loaded('mbstring')) die('skip mbstring not enabled'); +if (!function_exists("mb_eregi")) print "skip mb_eregi() not available"; +?> +--FILE-- +<?php + +mb_regex_encoding('utf-8'); + +var_dump(mb_eregi('z', 'XYZ')); +var_dump(mb_eregi('xyzp', 'XYZ')); +var_dump(mb_eregi('ö', 'Öäü')); +?> +--EXPECT-- +int(1) +bool(false) +int(1) diff --git a/ext/mbstring/tests/mb_eregi_replace.phpt b/ext/mbstring/tests/mb_eregi_replace.phpt new file mode 100644 index 0000000..22ba0af --- /dev/null +++ b/ext/mbstring/tests/mb_eregi_replace.phpt @@ -0,0 +1,37 @@ +--TEST-- +Testing mb_eregi_replace() function +--SKIPIF-- +<?php +if (!extension_loaded('mbstring')) die('skip mbstring not enabled'); +function_exists('mb_eregi_replace') or die("skip mb_eregi_replace() is not available in this build"); +?> +--FILE-- +<?php +function do_translit($st) { + $replacement = array( + "й"=>"i","ц"=>"c","у"=>"u","к"=>"k","е"=>"e","н"=>"n", + "г"=>"g","ш"=>"sh","щ"=>"sh","з"=>"z","Ñ…"=>"x","ÑŠ"=>"\'", + "Ñ„"=>"f","Ñ‹"=>"i","в"=>"v","а"=>"a","п"=>"p","Ñ€"=>"r", + "о"=>"o","л"=>"l","д"=>"d","ж"=>"zh","Ñ"=>"ie","Ñ‘"=>"e", + "Ñ"=>"ya","ч"=>"ch","Ñ"=>"c","м"=>"m","и"=>"i","Ñ‚"=>"t", + "ÑŒ"=>"\'","б"=>"b","ÑŽ"=>"yu", + "Й"=>"I","Ц"=>"C","У"=>"U","К"=>"K","Е"=>"E","Ð"=>"N", + "Г"=>"G","Ш"=>"SH","Щ"=>"SH","З"=>"Z","Ð¥"=>"X","Ъ"=>"\'", + "Ф"=>"F","Ы"=>"I","Ð’"=>"V","Ð"=>"A","П"=>"P","Ð "=>"R", + "О"=>"O","Л"=>"L","Д"=>"D","Ж"=>"ZH","Ð"=>"IE","Ð"=>"E", + "Я"=>"YA","Ч"=>"CH","С"=>"C","М"=>"M","И"=>"I","Т"=>"T", + "Ь"=>"\'","Б"=>"B","Ю"=>"YU", + ); + + foreach($replacement as $i=>$u) { + $st = mb_eregi_replace($i,$u,$st); + } + return $st; +} + +echo do_translit("Пеар"); +?> +--EXPECT-- +Pear +--CREDITS-- +Testfest Wuerzburg 2009-06-20 (modified by rui 2011-10-15) diff --git a/ext/mbstring/tests/mb_get_info.phpt b/ext/mbstring/tests/mb_get_info.phpt new file mode 100644 index 0000000..a3739e1 --- /dev/null +++ b/ext/mbstring/tests/mb_get_info.phpt @@ -0,0 +1,190 @@ +--TEST-- +Test mb_get_info() function +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip'); ?> +--INI-- +mbstring.encoding_translation=1 +mbstring.language=Korean +mbstring.internal_encoding=UTF-8 +mbstring.http_input=ISO-8859-1 +mbstring.http_output=ISO-8859-15 +mbstring.http_output_conv_mimetypes=abc +mbstring.func_overload=2 +mbstring.detect_order=UTF-8,ISO-8859-15,ISO-8859-1,ASCII +mbstring.substitute_character=123 +mbstring.strict_detection=1 +--FILE-- +<?php +mb_parse_str("abc=def", $dummy); +mb_convert_encoding("\xff\xff", "Shift_JIS", "UCS-2BE"); +$result = mb_get_info(); +var_dump($result); +foreach (array_keys($result) as $key) { + var_dump($result[$key], mb_get_info($key)); +} +?> +--EXPECT-- +array(15) { + ["internal_encoding"]=> + string(5) "UTF-8" + ["http_input"]=> + string(10) "ISO-8859-1" + ["http_output"]=> + string(11) "ISO-8859-15" + ["http_output_conv_mimetypes"]=> + string(3) "abc" + ["func_overload"]=> + int(2) + ["func_overload_list"]=> + array(12) { + ["strlen"]=> + string(9) "mb_strlen" + ["strpos"]=> + string(9) "mb_strpos" + ["strrpos"]=> + string(10) "mb_strrpos" + ["stripos"]=> + string(10) "mb_stripos" + ["strripos"]=> + string(11) "mb_strripos" + ["strstr"]=> + string(9) "mb_strstr" + ["strrchr"]=> + string(10) "mb_strrchr" + ["stristr"]=> + string(10) "mb_stristr" + ["substr"]=> + string(9) "mb_substr" + ["strtolower"]=> + string(13) "mb_strtolower" + ["strtoupper"]=> + string(13) "mb_strtoupper" + ["substr_count"]=> + string(15) "mb_substr_count" + } + ["mail_charset"]=> + string(11) "ISO-2022-KR" + ["mail_header_encoding"]=> + string(6) "BASE64" + ["mail_body_encoding"]=> + string(4) "7bit" + ["illegal_chars"]=> + int(1) + ["encoding_translation"]=> + string(2) "On" + ["language"]=> + string(6) "Korean" + ["detect_order"]=> + array(4) { + [0]=> + string(5) "UTF-8" + [1]=> + string(11) "ISO-8859-15" + [2]=> + string(10) "ISO-8859-1" + [3]=> + string(5) "ASCII" + } + ["substitute_character"]=> + int(123) + ["strict_detection"]=> + string(2) "On" +} +string(5) "UTF-8" +string(5) "UTF-8" +string(10) "ISO-8859-1" +string(10) "ISO-8859-1" +string(11) "ISO-8859-15" +string(11) "ISO-8859-15" +string(3) "abc" +string(3) "abc" +int(2) +int(2) +array(12) { + ["strlen"]=> + string(9) "mb_strlen" + ["strpos"]=> + string(9) "mb_strpos" + ["strrpos"]=> + string(10) "mb_strrpos" + ["stripos"]=> + string(10) "mb_stripos" + ["strripos"]=> + string(11) "mb_strripos" + ["strstr"]=> + string(9) "mb_strstr" + ["strrchr"]=> + string(10) "mb_strrchr" + ["stristr"]=> + string(10) "mb_stristr" + ["substr"]=> + string(9) "mb_substr" + ["strtolower"]=> + string(13) "mb_strtolower" + ["strtoupper"]=> + string(13) "mb_strtoupper" + ["substr_count"]=> + string(15) "mb_substr_count" +} +array(12) { + ["strlen"]=> + string(9) "mb_strlen" + ["strpos"]=> + string(9) "mb_strpos" + ["strrpos"]=> + string(10) "mb_strrpos" + ["stripos"]=> + string(10) "mb_stripos" + ["strripos"]=> + string(11) "mb_strripos" + ["strstr"]=> + string(9) "mb_strstr" + ["strrchr"]=> + string(10) "mb_strrchr" + ["stristr"]=> + string(10) "mb_stristr" + ["substr"]=> + string(9) "mb_substr" + ["strtolower"]=> + string(13) "mb_strtolower" + ["strtoupper"]=> + string(13) "mb_strtoupper" + ["substr_count"]=> + string(15) "mb_substr_count" +} +string(11) "ISO-2022-KR" +string(11) "ISO-2022-KR" +string(6) "BASE64" +string(6) "BASE64" +string(4) "7bit" +string(4) "7bit" +int(1) +int(1) +string(2) "On" +string(2) "On" +string(6) "Korean" +string(6) "Korean" +array(4) { + [0]=> + string(5) "UTF-8" + [1]=> + string(11) "ISO-8859-15" + [2]=> + string(10) "ISO-8859-1" + [3]=> + string(5) "ASCII" +} +array(4) { + [0]=> + string(5) "UTF-8" + [1]=> + string(11) "ISO-8859-15" + [2]=> + string(10) "ISO-8859-1" + [3]=> + string(5) "ASCII" +} +int(123) +int(123) +string(2) "On" +string(2) "On" diff --git a/ext/mbstring/tests/mb_http_input.phpt b/ext/mbstring/tests/mb_http_input.phpt new file mode 100644 index 0000000..6e72c5d --- /dev/null +++ b/ext/mbstring/tests/mb_http_input.phpt @@ -0,0 +1,51 @@ +--TEST-- +mb_http_input() +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +(php_sapi_name()=='cgi') or die("skip sapi is not a cgi version"); +die("skip disabled temporarily"); +?> +--POST-- +a=ÆüËܸì0123456789ÆüËܸ쥫¥¿¥«¥Ê¤Ò¤é¤¬¤Ê +--GET-- +b=ÆüËܸì0123456789ÆüËܸ쥫¥¿¥«¥Ê¤Ò¤é¤¬¤Ê +--FILE-- +<?php +// TODO: This is not a real test.... Need to change so that it does real testing +//$debug = true; +ini_set('include_path', dirname(__FILE__)); +include_once('common.inc'); + +$ini = ini_get('mbstring.http_input'); + +// It must be url encoded.... +// echo vars +echo $_POST['a']."\n"; +echo $_GET['b']."\n"; + +// Get encoding +$enc = mb_http_input('P'); + +// check +if (empty($ini)) { + // Must be pass + if ($enc === 'pass') { + echo "OK\n"; + } + else { + echo "NG\n"; + } +} +else { + // Some encoding + echo "This heppens when php.ini-dist is not used\n"; +} + +?> + +--EXPECT-- +ÆüËܸì0123456789ÆüËܸ쥫¥¿¥«¥Ê¤Ò¤é¤¬¤Ê +ÆüËܸì0123456789ÆüËܸ쥫¥¿¥«¥Ê¤Ò¤é¤¬¤Ê +OK + diff --git a/ext/mbstring/tests/mb_http_output.phpt b/ext/mbstring/tests/mb_http_output.phpt new file mode 100644 index 0000000..7fb3335 --- /dev/null +++ b/ext/mbstring/tests/mb_http_output.phpt @@ -0,0 +1,84 @@ +--TEST-- +mb_http_output() +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +//TODO: Add more encoding. Wrong paramter type test. +//$debug = true; +ini_set('include_path', dirname(__FILE__)); +include_once('common.inc'); + +// Set HTTP output encoding to ASCII +$r = mb_http_output('ASCII'); +($r === TRUE) ? print "OK_ASCII_SET\n" : print "NG_ASCII_SET\n"; +$enc = mb_http_output(); +print "$enc\n"; + +// Set HTTP output encoding to SJIS +$r = mb_http_output('SJIS'); +($r === TRUE) ? print "OK_SJIS_SET\n" : print "NG_SJIS_SET\n"; +$enc = mb_http_output(); +print "$enc\n"; + +// Set HTTP output encoding to JIS +$r = mb_http_output('JIS'); +($r === TRUE) ? print "OK_JIS_SET\n" : print "NG_JIS_SET\n"; +$enc = mb_http_output(); +print "$enc\n"; + +// Set HTTP output encoding to UTF8 +$r = mb_http_output('UTF-8'); +($r === TRUE) ? print "OK_UTF-8_SET\n" : print "NG_UTF-8_SET\n"; +$enc = mb_http_output(); +print "$enc\n"; + +// Set HTTP output encoding to EUC-JP +$r = mb_http_output('EUC-JP'); +($r === TRUE) ? print "OK_EUC-JP_SET\n" : print "NG_EUC-JP_SET\n"; +$enc = mb_http_output(); +print "$enc\n"; + +// Invalid parameters +print "== INVALID PARAMETER ==\n"; + +// Note: Bad string raise Warning. Bad Type raise Notice (Type Conversion) and Warning.... +$r = mb_http_output('BAD_NAME'); +($r === FALSE) ? print "OK_BAD_SET\n" : print "NG_BAD_SET\n"; +$enc = mb_http_output(); +print "$enc\n"; + +$r = mb_http_output($t_ary); +($r === FALSE) ? print "OK_BAD_ARY_SET\n" : print "NG_BAD_ARY_SET\n"; +$enc = mb_http_output(); +print "$enc\n"; + +$r = mb_http_output($t_obj); +($r === FALSE) ? print "OK_BAD_OBJ_SET\n" : print "NG_BAD_OBJ_SET\n"; +$enc = mb_http_output(); +print "$enc\n"; + +?> + +--EXPECT-- +OK_ASCII_SET +ASCII +OK_SJIS_SET +SJIS +OK_JIS_SET +JIS +OK_UTF-8_SET +UTF-8 +OK_EUC-JP_SET +EUC-JP +== INVALID PARAMETER == +ERR: Warning +OK_BAD_SET +EUC-JP +ERR: Warning +OK_BAD_ARY_SET +EUC-JP +ERR: Warning +OK_BAD_OBJ_SET +EUC-JP + diff --git a/ext/mbstring/tests/mb_internal_encoding.phpt b/ext/mbstring/tests/mb_internal_encoding.phpt new file mode 100644 index 0000000..e1b99c3 --- /dev/null +++ b/ext/mbstring/tests/mb_internal_encoding.phpt @@ -0,0 +1,68 @@ +--TEST-- +mb_internal_encoding() +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +// TODO: +//$debug = true; +ini_set('include_path', dirname(__FILE__)); +include_once('common.inc'); + +// EUC-JP +$r = mb_internal_encoding('EUC-JP'); +($r === TRUE) ? print "OK_EUC-JP_SET\n" : print "NG_EUC-JP_SET\n"; +$enc = mb_internal_encoding(); +print "$enc\n"; + +// UTF-8 +$r = mb_internal_encoding('UTF-8'); +($r === TRUE) ? print "OK_UTF-8_SET\n" : print "NG_UTF-8_SET\n"; +$enc = mb_internal_encoding(); +print "$enc\n"; + +// ASCII +$r = mb_internal_encoding('ASCII'); +($r === TRUE) ? print "OK_ASCII_SET\n" : print "NG_ASCII_SET\n"; +$enc = mb_internal_encoding(); +print "$enc\n"; + +// Invalid Parameter +print "== INVALID PARAMETER ==\n"; + +// Note: Other than string type, PHP raises Warning +$r = mb_internal_encoding('BAD'); +($r === FALSE) ? print "OK_BAD_SET\n" : print "NG_BAD_SET\n"; +$enc = mb_internal_encoding(); +print "$enc\n"; + +$r = mb_internal_encoding($t_ary); +($r === FALSE) ? print "OK_BAD_ARY_SET\n" : print "NG_BAD_ARY_SET\n"; +$enc = mb_internal_encoding(); +print "$enc\n"; + +$r = mb_internal_encoding($t_obj); +($r === FALSE) ? print "OK_BAD_OBJ_SET\n" : print "NG_BAD_OBJ_SET\n"; +$enc = mb_internal_encoding(); +print "$enc\n"; + +?> + +--EXPECT-- +OK_EUC-JP_SET +EUC-JP +OK_UTF-8_SET +UTF-8 +OK_ASCII_SET +ASCII +== INVALID PARAMETER == +ERR: Warning +OK_BAD_SET +ASCII +ERR: Warning +OK_BAD_ARY_SET +ASCII +ERR: Warning +OK_BAD_OBJ_SET +ASCII + diff --git a/ext/mbstring/tests/mb_internal_encoding_basic.phpt b/ext/mbstring/tests/mb_internal_encoding_basic.phpt new file mode 100644 index 0000000..a289dcf --- /dev/null +++ b/ext/mbstring/tests/mb_internal_encoding_basic.phpt @@ -0,0 +1,36 @@ +--TEST-- +Test mb_internal_encoding() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_internal_encoding') or die("skip mb_internal_encoding() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_internal_encoding([string $encoding]) + * Description: Sets the current internal encoding or Returns + * the current internal encoding as a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test basic functionality of mb_internal_encoding + */ + +echo "*** Testing mb_internal_encoding() : basic functionality ***\n"; + +var_dump(mb_internal_encoding()); //default internal encoding + +var_dump(mb_internal_encoding('UTF-8')); //change internal encoding to UTF-8 + +var_dump(mb_internal_encoding()); //check internal encoding is now set to UTF-8 + + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_internal_encoding() : basic functionality *** +string(%d) "%s" +bool(true) +string(5) "UTF-8" +Done diff --git a/ext/mbstring/tests/mb_internal_encoding_error1.phpt b/ext/mbstring/tests/mb_internal_encoding_error1.phpt new file mode 100644 index 0000000..61f133a --- /dev/null +++ b/ext/mbstring/tests/mb_internal_encoding_error1.phpt @@ -0,0 +1,36 @@ +--TEST-- +Test mb_internal_encoding() function : error conditions - pass incorrect number of args +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_internal_encoding') or die("skip mb_internal_encoding() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_internal_encoding([string $encoding]) + * Description: Sets the current internal encoding or + * Returns the current internal encoding as a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test mb_internal_encoding with one more than the expected number of arguments + */ + +echo "*** Testing mb_internal_encoding() : error conditions ***\n"; + +echo "\n-- Testing mb_internal_encoding() function with more than expected no. of arguments --\n"; +$encoding = 'string_val'; +$extra_arg = 10; +var_dump( mb_internal_encoding($encoding, $extra_arg) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_internal_encoding() : error conditions *** + +-- Testing mb_internal_encoding() function with more than expected no. of arguments -- + +Warning: mb_internal_encoding() expects at most 1 parameter, 2 given in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_internal_encoding_error2.phpt b/ext/mbstring/tests/mb_internal_encoding_error2.phpt new file mode 100644 index 0000000..d0a1653 --- /dev/null +++ b/ext/mbstring/tests/mb_internal_encoding_error2.phpt @@ -0,0 +1,31 @@ +--TEST-- +Test mb_internal_encoding() function : error conditions - pass an unknown encoding +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_internal_encoding') or die("skip mb_internal_encoding() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_internal_encoding([string $encoding]) + * Description: Sets the current internal encoding or + * Returns the current internal encoding as a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass mb_internal_encoding an unknown encoding + */ + +echo "*** Testing mb_internal_encoding() : error conditions ***\n"; + +var_dump(mb_internal_encoding('unknown-encoding')); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_internal_encoding() : error conditions *** + +Warning: mb_internal_encoding(): Unknown encoding "unknown-encoding" in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_internal_encoding_ini_basic2.phpt b/ext/mbstring/tests/mb_internal_encoding_ini_basic2.phpt new file mode 100644 index 0000000..241e1a6 --- /dev/null +++ b/ext/mbstring/tests/mb_internal_encoding_ini_basic2.phpt @@ -0,0 +1,29 @@ +--TEST-- +Test INI mbstring.internal_encoding basic - encoding when valid specified +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build"); +?> +--INI-- +mbstring.internal_encoding=ISO-8859-7 +--FILE-- +<?php + +echo "*** Testing INI mbstring.internal_encoding : basic functionality ***\n"; + +echo mb_internal_encoding()."\n"; +echo ini_get('mbstring.internal_encoding')."\n"; +mb_internal_encoding('UTF-8'); +echo mb_internal_encoding()."\n"; +echo ini_get('mbstring.internal_encoding')."\n"; + +?> +===DONE=== +--EXPECT-- +*** Testing INI mbstring.internal_encoding : basic functionality *** +ISO-8859-7 +ISO-8859-7 +UTF-8 +ISO-8859-7 +===DONE=== diff --git a/ext/mbstring/tests/mb_internal_encoding_variation1.phpt b/ext/mbstring/tests/mb_internal_encoding_variation1.phpt new file mode 100644 index 0000000..94bb0cf --- /dev/null +++ b/ext/mbstring/tests/mb_internal_encoding_variation1.phpt @@ -0,0 +1,217 @@ +--TEST-- +Test mb_internal_encoding() function : usage variations - Pass different data types as $encoding arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_internal_encoding') or die("skip mb_internal_encoding() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_internal_encoding([string $encoding]) + * Description: Sets the current internal encoding or Returns + * the current internal encoding as a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass different data types as $encoding to mb_internal_encoding() to test behaviour + * Where possible 'UTF-8' has been entered as a string value + */ + +echo "*** Testing mb_internal_encoding() : usage variations ***\n"; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "UTF-8"; + } +} + +// heredoc string +$heredoc = <<<EOT +UTF-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $encoding argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "UTF-8", + 'UTF-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_internal_encoding() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_internal_encoding($input) ); + $iterator++; +}; + +fclose($fp); +echo "Done"; +?> +--EXPECTF-- + +*** Testing mb_internal_encoding() : usage variations *** + +-- Iteration 1 -- + +Warning: mb_internal_encoding(): Unknown encoding "0" in %s on line %d +bool(false) + +-- Iteration 2 -- + +Warning: mb_internal_encoding(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 3 -- + +Warning: mb_internal_encoding(): Unknown encoding "12345" in %s on line %d +bool(false) + +-- Iteration 4 -- + +Warning: mb_internal_encoding(): Unknown encoding "-2345" in %s on line %d +bool(false) + +-- Iteration 5 -- + +Warning: mb_internal_encoding(): Unknown encoding "10.5" in %s on line %d +bool(false) + +-- Iteration 6 -- + +Warning: mb_internal_encoding(): Unknown encoding "-10.5" in %s on line %d +bool(false) + +-- Iteration 7 -- + +Warning: mb_internal_encoding(): Unknown encoding "123456789000" in %s on line %d +bool(false) + +-- Iteration 8 -- + +Warning: mb_internal_encoding(): Unknown encoding "1.23456789E-9" in %s on line %d +bool(false) + +-- Iteration 9 -- + +Warning: mb_internal_encoding(): Unknown encoding "0.5" in %s on line %d +bool(false) + +-- Iteration 10 -- + +Warning: mb_internal_encoding(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 11 -- + +Warning: mb_internal_encoding(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 12 -- + +Warning: mb_internal_encoding(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 13 -- + +Warning: mb_internal_encoding(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 14 -- + +Warning: mb_internal_encoding(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 15 -- + +Warning: mb_internal_encoding(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 16 -- + +Warning: mb_internal_encoding(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 17 -- + +Warning: mb_internal_encoding(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 18 -- +bool(true) + +-- Iteration 19 -- +bool(true) + +-- Iteration 20 -- +bool(true) + +-- Iteration 21 -- +bool(true) + +-- Iteration 22 -- + +Warning: mb_internal_encoding(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 23 -- + +Warning: mb_internal_encoding(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 24 -- + +Warning: mb_internal_encoding() expects parameter 1 to be string, resource given in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_internal_encoding_variation2.phpt b/ext/mbstring/tests/mb_internal_encoding_variation2.phpt new file mode 100644 index 0000000..914041c --- /dev/null +++ b/ext/mbstring/tests/mb_internal_encoding_variation2.phpt @@ -0,0 +1,374 @@ +--TEST-- +Test mb_internal_encoding() function : usage variations - Test different encodings +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_internal_encoding') or die("skip mb_internal_encoding() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_internal_encoding([string $encoding]) + * Description: Sets the current internal encoding or Returns + * the current internal encoding as a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test all listed encoding types from php.net to check all are known to function + * NB: The strings passed are *NOT* necessarily encoded in the encoding passed to the function. + * This test is purely to see whether the function recognises the encoding. + */ + +echo "*** Testing mb_internal_encoding() : usage variations ***\n"; + +$encoding = array('UCS-4', /*1*/ + 'UCS-4BE', + 'UCS-4LE', + 'UCS-2', + 'UCS-2BE', /*5*/ + 'UCS-2LE', + 'UTF-32', + 'UTF-32BE', + 'UTF-32LE', + 'UTF-16', /*10*/ + 'UTF-16BE', + 'UTF-16LE', + 'UTF-7', + 'UTF7-IMAP', + 'UTF-8', /*15*/ + 'ASCII', + 'EUC-JP', + 'SJIS', + 'eucJP-win', + 'SJIS-win', /*20*/ + 'ISO-2022-JP', + 'JIS', + 'ISO-8859-1', + 'ISO-8859-2', + 'ISO-8859-3', /*25*/ + 'ISO-8859-4', + 'ISO-8859-5', + 'ISO-8859-6', + 'ISO-8859-7', + 'ISO-8859-8', /*30*/ + 'ISO-8859-9', + 'ISO-8859-10', + 'ISO-8859-13', + 'ISO-8859-14', + 'ISO-8859-15', /*35*/ + 'byte2be', + 'byte2le', + 'byte4be', + 'byte4le', + 'BASE64', /*40*/ + 'HTML-ENTITIES', + '7bit', + '8bit', + 'EUC-CN', + 'CP936', /*45*/ + 'HZ', + 'EUC-TW', + 'CP950', + 'BIG-5', + 'EUC-KR', /*50*/ + 'UHC', + 'ISO-2022-KR', + 'Windows-1251', + 'Windows-1252', + 'CP866', /*55*/ + 'KOI8-R'); /*56*/ + +$iterator = 1; +foreach($encoding as $enc) { + echo "\n-- Iteration $iterator --\n"; + var_dump(mb_internal_encoding()); + var_dump(mb_internal_encoding($enc)); + var_dump(mb_internal_encoding()); + $iterator++; +} +echo "Done"; +?> +--EXPECTF-- + +*** Testing mb_internal_encoding() : usage variations *** + +-- Iteration 1 -- +string(%d) "%s" +bool(true) +string(5) "UCS-4" + +-- Iteration 2 -- +string(5) "UCS-4" +bool(true) +string(7) "UCS-4BE" + +-- Iteration 3 -- +string(7) "UCS-4BE" +bool(true) +string(7) "UCS-4LE" + +-- Iteration 4 -- +string(7) "UCS-4LE" +bool(true) +string(5) "UCS-2" + +-- Iteration 5 -- +string(5) "UCS-2" +bool(true) +string(7) "UCS-2BE" + +-- Iteration 6 -- +string(7) "UCS-2BE" +bool(true) +string(7) "UCS-2LE" + +-- Iteration 7 -- +string(7) "UCS-2LE" +bool(true) +string(6) "UTF-32" + +-- Iteration 8 -- +string(6) "UTF-32" +bool(true) +string(8) "UTF-32BE" + +-- Iteration 9 -- +string(8) "UTF-32BE" +bool(true) +string(8) "UTF-32LE" + +-- Iteration 10 -- +string(8) "UTF-32LE" +bool(true) +string(6) "UTF-16" + +-- Iteration 11 -- +string(6) "UTF-16" +bool(true) +string(8) "UTF-16BE" + +-- Iteration 12 -- +string(8) "UTF-16BE" +bool(true) +string(8) "UTF-16LE" + +-- Iteration 13 -- +string(8) "UTF-16LE" +bool(true) +string(5) "UTF-7" + +-- Iteration 14 -- +string(5) "UTF-7" +bool(true) +string(9) "UTF7-IMAP" + +-- Iteration 15 -- +string(9) "UTF7-IMAP" +bool(true) +string(5) "UTF-8" + +-- Iteration 16 -- +string(5) "UTF-8" +bool(true) +string(5) "ASCII" + +-- Iteration 17 -- +string(5) "ASCII" +bool(true) +string(6) "EUC-JP" + +-- Iteration 18 -- +string(6) "EUC-JP" +bool(true) +string(4) "SJIS" + +-- Iteration 19 -- +string(4) "SJIS" +bool(true) +string(9) "eucJP-win" + +-- Iteration 20 -- +string(9) "eucJP-win" +bool(true) +string(8) "SJIS-win" + +-- Iteration 21 -- +string(8) "SJIS-win" +bool(true) +string(11) "ISO-2022-JP" + +-- Iteration 22 -- +string(11) "ISO-2022-JP" +bool(true) +string(3) "JIS" + +-- Iteration 23 -- +string(3) "JIS" +bool(true) +string(10) "ISO-8859-1" + +-- Iteration 24 -- +string(10) "ISO-8859-1" +bool(true) +string(10) "ISO-8859-2" + +-- Iteration 25 -- +string(10) "ISO-8859-2" +bool(true) +string(10) "ISO-8859-3" + +-- Iteration 26 -- +string(10) "ISO-8859-3" +bool(true) +string(10) "ISO-8859-4" + +-- Iteration 27 -- +string(10) "ISO-8859-4" +bool(true) +string(10) "ISO-8859-5" + +-- Iteration 28 -- +string(10) "ISO-8859-5" +bool(true) +string(10) "ISO-8859-6" + +-- Iteration 29 -- +string(10) "ISO-8859-6" +bool(true) +string(10) "ISO-8859-7" + +-- Iteration 30 -- +string(10) "ISO-8859-7" +bool(true) +string(10) "ISO-8859-8" + +-- Iteration 31 -- +string(10) "ISO-8859-8" +bool(true) +string(10) "ISO-8859-9" + +-- Iteration 32 -- +string(10) "ISO-8859-9" +bool(true) +string(11) "ISO-8859-10" + +-- Iteration 33 -- +string(11) "ISO-8859-10" +bool(true) +string(11) "ISO-8859-13" + +-- Iteration 34 -- +string(11) "ISO-8859-13" +bool(true) +string(11) "ISO-8859-14" + +-- Iteration 35 -- +string(11) "ISO-8859-14" +bool(true) +string(11) "ISO-8859-15" + +-- Iteration 36 -- +string(11) "ISO-8859-15" +bool(true) +string(7) "byte2be" + +-- Iteration 37 -- +string(7) "byte2be" +bool(true) +string(7) "byte2le" + +-- Iteration 38 -- +string(7) "byte2le" +bool(true) +string(7) "byte4be" + +-- Iteration 39 -- +string(7) "byte4be" +bool(true) +string(7) "byte4le" + +-- Iteration 40 -- +string(7) "byte4le" +bool(true) +string(6) "BASE64" + +-- Iteration 41 -- +string(6) "BASE64" +bool(true) +string(13) "HTML-ENTITIES" + +-- Iteration 42 -- +string(13) "HTML-ENTITIES" +bool(true) +string(4) "7bit" + +-- Iteration 43 -- +string(4) "7bit" +bool(true) +string(4) "8bit" + +-- Iteration 44 -- +string(4) "8bit" +bool(true) +string(6) "EUC-CN" + +-- Iteration 45 -- +string(6) "EUC-CN" +bool(true) +string(5) "CP936" + +-- Iteration 46 -- +string(5) "CP936" +bool(true) +string(2) "HZ" + +-- Iteration 47 -- +string(2) "HZ" +bool(true) +string(6) "EUC-TW" + +-- Iteration 48 -- +string(6) "EUC-TW" +bool(true) +string(5) "CP950" + +-- Iteration 49 -- +string(5) "CP950" +bool(true) +string(5) "BIG-5" + +-- Iteration 50 -- +string(5) "BIG-5" +bool(true) +string(6) "EUC-KR" + +-- Iteration 51 -- +string(6) "EUC-KR" +bool(true) +string(3) "UHC" + +-- Iteration 52 -- +string(3) "UHC" +bool(true) +string(11) "ISO-2022-KR" + +-- Iteration 53 -- +string(11) "ISO-2022-KR" +bool(true) +string(12) "Windows-1251" + +-- Iteration 54 -- +string(12) "Windows-1251" +bool(true) +string(12) "Windows-1252" + +-- Iteration 55 -- +string(12) "Windows-1252" +bool(true) +string(5) "CP866" + +-- Iteration 56 -- +string(5) "CP866" +bool(true) +string(6) "KOI8-R" +Done diff --git a/ext/mbstring/tests/mb_list_encodings.phpt b/ext/mbstring/tests/mb_list_encodings.phpt new file mode 100644 index 0000000..135a9ef --- /dev/null +++ b/ext/mbstring/tests/mb_list_encodings.phpt @@ -0,0 +1,16 @@ +--TEST-- +mb_list_encodings +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +var_dump(in_array("7bit", mb_list_encodings())); +var_dump(in_array("8bit", mb_list_encodings())); +var_dump(in_array("ASCII", mb_list_encodings())); +var_dump(in_array("non-existent", mb_list_encodings())); +?> +--EXPECT-- +bool(true) +bool(true) +bool(true) +bool(false) diff --git a/ext/mbstring/tests/mb_output_handler_euc_jp.phpt b/ext/mbstring/tests/mb_output_handler_euc_jp.phpt new file mode 100644 index 0000000..dff5c97 --- /dev/null +++ b/ext/mbstring/tests/mb_output_handler_euc_jp.phpt @@ -0,0 +1,21 @@ +--TEST-- +mb_output_handler() (EUC-JP) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +// TODO: Do real test + +// EUC-JP +$euc_jp = "¥Æ¥¹¥ÈÍÑÆüËܸìʸ»úÎ󡣤³¤Î¥â¥¸¥å¡¼¥ë¤ÏPHP¤Ë¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤òÄ󶡤·¤Þ¤¹¡£"; +mb_http_output('EUC-JP') or print("mb_http_output() failed\n"); +ob_start('mb_output_handler'); +echo $euc_jp; +$output = ob_get_clean(); + +var_dump( $output ); + +?> + +--EXPECT-- +string(73) "¥Æ¥¹¥ÈÍÑÆüËܸìʸ»úÎ󡣤³¤Î¥â¥¸¥å¡¼¥ë¤ÏPHP¤Ë¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤òÄ󶡤·¤Þ¤¹¡£" diff --git a/ext/mbstring/tests/mb_output_handler_pattern-01.phpt b/ext/mbstring/tests/mb_output_handler_pattern-01.phpt new file mode 100644 index 0000000..62825b6 --- /dev/null +++ b/ext/mbstring/tests/mb_output_handler_pattern-01.phpt @@ -0,0 +1,18 @@ +--TEST-- +mb_output_handler() and mbstring.http_output_conv_mimetypes (1) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.internal_encoding=UTF-8 +--FILE-- +<?php +mb_http_output("EUC-JP"); +header("Content-Type: text/html"); +ob_start(); +ob_start('mb_output_handler'); +echo "テスト"; +ob_end_flush(); +var_dump(bin2hex(ob_get_clean())); +?> +--EXPECT-- +string(12) "a5c6a5b9a5c8" diff --git a/ext/mbstring/tests/mb_output_handler_pattern-02.phpt b/ext/mbstring/tests/mb_output_handler_pattern-02.phpt new file mode 100644 index 0000000..e20b115 --- /dev/null +++ b/ext/mbstring/tests/mb_output_handler_pattern-02.phpt @@ -0,0 +1,18 @@ +--TEST-- +mb_output_handler() and mbstring.http_output_conv_mimetypes (2) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.internal_encoding=UTF-8 +--FILE-- +<?php +mb_http_output("EUC-JP"); +header("Content-Type: text/plain"); +ob_start(); +ob_start('mb_output_handler'); +echo "テスト"; +ob_end_flush(); +var_dump(bin2hex(ob_get_clean())); +?> +--EXPECT-- +string(12) "a5c6a5b9a5c8" diff --git a/ext/mbstring/tests/mb_output_handler_pattern-03.phpt b/ext/mbstring/tests/mb_output_handler_pattern-03.phpt new file mode 100644 index 0000000..c4e9886 --- /dev/null +++ b/ext/mbstring/tests/mb_output_handler_pattern-03.phpt @@ -0,0 +1,18 @@ +--TEST-- +mb_output_handler() and mbstring.http_output_conv_mimetypes (3) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.internal_encoding=UTF-8 +--FILE-- +<?php +mb_http_output("EUC-JP"); +header("Content-Type: application/xhtml+xml"); +ob_start(); +ob_start('mb_output_handler'); +echo "テスト"; +ob_end_flush(); +var_dump(bin2hex(ob_get_clean())); +?> +--EXPECT-- +string(12) "a5c6a5b9a5c8" diff --git a/ext/mbstring/tests/mb_output_handler_pattern-04.phpt b/ext/mbstring/tests/mb_output_handler_pattern-04.phpt new file mode 100644 index 0000000..bf8bd76 --- /dev/null +++ b/ext/mbstring/tests/mb_output_handler_pattern-04.phpt @@ -0,0 +1,18 @@ +--TEST-- +mb_output_handler() and mbstring.http_output_conv_mimetypes (4) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.internal_encoding=UTF-8 +--FILE-- +<?php +mb_http_output("EUC-JP"); +header("Content-Type: application/octet-stream"); +ob_start(); +ob_start('mb_output_handler'); +echo "テスト"; +ob_end_flush(); +var_dump(bin2hex(ob_get_clean())); +?> +--EXPECT-- +string(18) "e38386e382b9e38388" diff --git a/ext/mbstring/tests/mb_output_handler_pattern-05.phpt b/ext/mbstring/tests/mb_output_handler_pattern-05.phpt new file mode 100644 index 0000000..c63724e --- /dev/null +++ b/ext/mbstring/tests/mb_output_handler_pattern-05.phpt @@ -0,0 +1,17 @@ +--TEST-- +mb_output_handler() and mbstring.http_output_conv_mimetypes (5) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.internal_encoding=UTF-8 +--FILE-- +<?php +mb_http_output("EUC-JP"); +ob_start(); +ob_start('mb_output_handler'); +echo "テスト"; +ob_end_flush(); +var_dump(bin2hex(ob_get_clean())); +?> +--EXPECT-- +string(12) "a5c6a5b9a5c8" diff --git a/ext/mbstring/tests/mb_output_handler_pattern-06.phpt b/ext/mbstring/tests/mb_output_handler_pattern-06.phpt new file mode 100644 index 0000000..00cf4af --- /dev/null +++ b/ext/mbstring/tests/mb_output_handler_pattern-06.phpt @@ -0,0 +1,18 @@ +--TEST-- +mb_output_handler() and mbstring.http_output_conv_mimetypes (6) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.internal_encoding=UTF-8 +--FILE-- +<?php +mb_http_output("EUC-JP"); +header("Content-Type: text/html"); +ob_start(); +ob_start('mb_output_handler'); +echo "テスト"; +ob_end_flush(); +var_dump(bin2hex(ob_get_clean())); +?> +--EXPECT-- +string(12) "a5c6a5b9a5c8" diff --git a/ext/mbstring/tests/mb_output_handler_pattern-07.phpt b/ext/mbstring/tests/mb_output_handler_pattern-07.phpt new file mode 100644 index 0000000..3cc9305 --- /dev/null +++ b/ext/mbstring/tests/mb_output_handler_pattern-07.phpt @@ -0,0 +1,19 @@ +--TEST-- +mb_output_handler() and mbstring.http_output_conv_mimetypes (7) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.internal_encoding=UTF-8 +mbstring.http_output_conv_mimetypes=html +--FILE-- +<?php +mb_http_output("EUC-JP"); +header("Content-Type: text/html"); +ob_start(); +ob_start('mb_output_handler'); +echo "テスト"; +ob_end_flush(); +var_dump(bin2hex(ob_get_clean())); +?> +--EXPECT-- +string(12) "a5c6a5b9a5c8" diff --git a/ext/mbstring/tests/mb_output_handler_pattern-08.phpt b/ext/mbstring/tests/mb_output_handler_pattern-08.phpt new file mode 100644 index 0000000..5117dec --- /dev/null +++ b/ext/mbstring/tests/mb_output_handler_pattern-08.phpt @@ -0,0 +1,19 @@ +--TEST-- +mb_output_handler() and mbstring.http_output_conv_mimetypes (8) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.internal_encoding=UTF-8 +mbstring.http_output_conv_mimetypes=html +--FILE-- +<?php +mb_http_output("EUC-JP"); +header("Content-Type: text/plain"); +ob_start(); +ob_start('mb_output_handler'); +echo "テスト"; +ob_end_flush(); +var_dump(bin2hex(ob_get_clean())); +?> +--EXPECT-- +string(18) "e38386e382b9e38388" diff --git a/ext/mbstring/tests/mb_output_handler_pattern-09.phpt b/ext/mbstring/tests/mb_output_handler_pattern-09.phpt new file mode 100644 index 0000000..e119da0 --- /dev/null +++ b/ext/mbstring/tests/mb_output_handler_pattern-09.phpt @@ -0,0 +1,19 @@ +--TEST-- +mb_output_handler() and mbstring.http_output_conv_mimetypes (9) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.internal_encoding=UTF-8 +mbstring.http_output_conv_mimetypes=html +--FILE-- +<?php +mb_http_output("EUC-JP"); +header("Content-Type: application/xhtml+xml"); +ob_start(); +ob_start('mb_output_handler'); +echo "テスト"; +ob_end_flush(); +var_dump(bin2hex(ob_get_clean())); +?> +--EXPECT-- +string(12) "a5c6a5b9a5c8" diff --git a/ext/mbstring/tests/mb_output_handler_pattern-10.phpt b/ext/mbstring/tests/mb_output_handler_pattern-10.phpt new file mode 100644 index 0000000..7aec886 --- /dev/null +++ b/ext/mbstring/tests/mb_output_handler_pattern-10.phpt @@ -0,0 +1,19 @@ +--TEST-- +mb_output_handler() and mbstring.http_output_conv_mimetypes (10) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.internal_encoding=UTF-8 +mbstring.http_output_conv_mimetypes=html +--FILE-- +<?php +mb_http_output("EUC-JP"); +header("Content-Type: application/octet-stream"); +ob_start(); +ob_start('mb_output_handler'); +echo "テスト"; +ob_end_flush(); +var_dump(bin2hex(ob_get_clean())); +?> +--EXPECT-- +string(18) "e38386e382b9e38388" diff --git a/ext/mbstring/tests/mb_output_handler_pattern-11.phpt b/ext/mbstring/tests/mb_output_handler_pattern-11.phpt new file mode 100644 index 0000000..2b16479 --- /dev/null +++ b/ext/mbstring/tests/mb_output_handler_pattern-11.phpt @@ -0,0 +1,17 @@ +--TEST-- +mb_output_handler() and mbstring.http_output_conv_mimetypes (11) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.internal_encoding=UTF-8 +--FILE-- +<?php +mb_http_output("EUC-JP"); +ob_start(); +ob_start('mb_output_handler'); +echo "テスト"; +ob_end_flush(); +var_dump(bin2hex(ob_get_clean())); +?> +--EXPECT-- +string(12) "a5c6a5b9a5c8" diff --git a/ext/mbstring/tests/mb_output_handler_pattern-12.phpt b/ext/mbstring/tests/mb_output_handler_pattern-12.phpt new file mode 100644 index 0000000..d27510b --- /dev/null +++ b/ext/mbstring/tests/mb_output_handler_pattern-12.phpt @@ -0,0 +1,18 @@ +--TEST-- +mb_output_handler() and mbstring.http_output_conv_mimetypes (12) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.internal_encoding=UTF-8 +--FILE-- +<?php +mb_http_output("EUC-JP"); +header("Content-Type: text/html"); +ob_start(); +ob_start('mb_output_handler'); +echo "テスト"; +ob_end_flush(); +var_dump(bin2hex(ob_get_clean())); +?> +--EXPECT-- +string(12) "a5c6a5b9a5c8" diff --git a/ext/mbstring/tests/mb_output_handler_runtime_ini_alteration-01.phpt b/ext/mbstring/tests/mb_output_handler_runtime_ini_alteration-01.phpt new file mode 100644 index 0000000..b7d71f9 --- /dev/null +++ b/ext/mbstring/tests/mb_output_handler_runtime_ini_alteration-01.phpt @@ -0,0 +1,20 @@ +--TEST-- +mb_output_handler() and mbstring.http_output_conv_mimetypes alteration in runtime (1) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.internal_encoding=UTF-8 +mbstring.http_output_conv_mimetypes=plain +--FILE-- +<?php +mb_http_output("EUC-JP"); +ini_set('mbstring.http_output_conv_mimetypes', 'text'); +header("Content-Type: text/html"); +ob_start(); +ob_start('mb_output_handler'); +echo "テスト"; +ob_end_flush(); +var_dump(bin2hex(ob_get_clean())); +?> +--EXPECT-- +string(12) "a5c6a5b9a5c8" diff --git a/ext/mbstring/tests/mb_output_handler_runtime_ini_alteration-02.phpt b/ext/mbstring/tests/mb_output_handler_runtime_ini_alteration-02.phpt new file mode 100644 index 0000000..d8c21f4 --- /dev/null +++ b/ext/mbstring/tests/mb_output_handler_runtime_ini_alteration-02.phpt @@ -0,0 +1,20 @@ +--TEST-- +mb_output_handler() and mbstring.http_output_conv_mimetypes alteration in runtime (2) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.internal_encoding=UTF-8 +mbstring.http_output_conv_mimetypes=html +--FILE-- +<?php +mb_http_output("EUC-JP"); +ini_set('mbstring.http_output_conv_mimetypes', 'application'); +header("Content-Type: text/html"); +ob_start(); +ob_start('mb_output_handler'); +echo "テスト"; +ob_end_flush(); +var_dump(bin2hex(ob_get_clean())); +?> +--EXPECT-- +string(18) "e38386e382b9e38388" diff --git a/ext/mbstring/tests/mb_output_handler_shift_jis.phpt b/ext/mbstring/tests/mb_output_handler_shift_jis.phpt new file mode 100644 index 0000000..d4612d9 --- /dev/null +++ b/ext/mbstring/tests/mb_output_handler_shift_jis.phpt @@ -0,0 +1,16 @@ +--TEST-- +mb_output_handler() (Shift_JIS) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +output_handler=mb_output_handler +mbstring.internal_encoding=Shift_JIS +mbstring.http_output=EUC-JP +--FILE-- +<?php +// Shift_JIS +var_dump("ƒeƒXƒg—p“ú–{Œê•¶Žš—ñB‚±‚̃‚ƒWƒ…[ƒ‹‚ÍPHP‚Ƀ}ƒ‹ƒ`ƒoƒCƒgŠÖ”‚ð’ñ‹Ÿ‚µ‚Ü‚·B"); +?> + +--EXPECT-- +string(73) "¥Æ¥¹¥ÈÍÑÆüËܸìʸ»úÎ󡣤³¤Î¥â¥¸¥å¡¼¥ë¤ÏPHP¤Ë¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤òÄ󶡤·¤Þ¤¹¡£" diff --git a/ext/mbstring/tests/mb_parse_str.phpt b/ext/mbstring/tests/mb_parse_str.phpt new file mode 100644 index 0000000..59d187b --- /dev/null +++ b/ext/mbstring/tests/mb_parse_str.phpt @@ -0,0 +1,81 @@ +--TEST-- +mb_parse_str() +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FAIL-- +register_globals calls killed the ability for mb_parse_str() to register into the global scope +--INI-- +arg_separator.input=& +--FILE-- +<?php +$queries = array( + "foo=abc&bar=def", + "%2bfoo=def&-bar=jkl", + "foo[]=abc&foo[]=def&foo[]=ghi&bar[]=jkl" +); +function test($query) { + $foo = ''; + $bar = ''; + mb_parse_str($query, $array); + var_dump($array); + var_dump($foo); + var_dump($bar); + mb_parse_str($query); + var_dump($foo); + var_dump($bar); +} +foreach ($queries as $query) { + test($query); +} +?> +--EXPECT-- +array(2) { + ["foo"]=> + string(3) "abc" + ["bar"]=> + string(3) "def" +} +string(0) "" +string(0) "" +string(3) "abc" +string(3) "def" +array(2) { + ["+foo"]=> + string(3) "def" + ["-bar"]=> + string(3) "jkl" +} +string(0) "" +string(0) "" +string(0) "" +string(0) "" +array(2) { + ["foo"]=> + array(3) { + [0]=> + string(3) "abc" + [1]=> + string(3) "def" + [2]=> + string(3) "ghi" + } + ["bar"]=> + array(1) { + [0]=> + string(3) "jkl" + } +} +string(0) "" +string(0) "" +array(3) { + [0]=> + string(3) "abc" + [1]=> + string(3) "def" + [2]=> + string(3) "ghi" +} +array(1) { + [0]=> + string(3) "jkl" +} diff --git a/ext/mbstring/tests/mb_parse_str02.phpt b/ext/mbstring/tests/mb_parse_str02.phpt new file mode 100644 index 0000000..f356999 --- /dev/null +++ b/ext/mbstring/tests/mb_parse_str02.phpt @@ -0,0 +1,106 @@ +--TEST-- +mb_parse_str() test 2 +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FAIL-- +register_globals calls killed the ability for mb_parse_str() to register into the global scope +--INI-- +arg_separator.input=&# +--FILE-- +<?php +$queries = array( + "foo=abc#bar=def&fubar=ghi", + "%2bfoo=def&-bar=jkl#+fubar", + " foo[]=abc&foo[]=def#foo[]=ghi#bar[]=#foo[]&fubar[]==" +); +function test($query) { + $foo = ''; + $bar = ''; + $fubar = ''; + mb_parse_str($query, $array); + var_dump($array); + var_dump($foo); + var_dump($bar); + var_dump($fubar); + mb_parse_str($query); + var_dump($foo); + var_dump($bar); + var_dump($fubar); +} +foreach ($queries as $query) { + test($query); +} +?> +--EXPECT-- +array(3) { + ["foo"]=> + string(3) "abc" + ["bar"]=> + string(3) "def" + ["fubar"]=> + string(3) "ghi" +} +string(0) "" +string(0) "" +string(0) "" +string(3) "abc" +string(3) "def" +string(3) "ghi" +array(3) { + ["+foo"]=> + string(3) "def" + ["-bar"]=> + string(3) "jkl" + ["fubar"]=> + string(0) "" +} +string(0) "" +string(0) "" +string(0) "" +string(0) "" +string(0) "" +string(0) "" +array(3) { + ["foo"]=> + array(4) { + [0]=> + string(3) "abc" + [1]=> + string(3) "def" + [2]=> + string(3) "ghi" + [3]=> + string(0) "" + } + ["bar"]=> + array(1) { + [0]=> + string(0) "" + } + ["fubar"]=> + array(1) { + [0]=> + string(1) "=" + } +} +string(0) "" +string(0) "" +string(0) "" +array(4) { + [0]=> + string(3) "abc" + [1]=> + string(3) "def" + [2]=> + string(3) "ghi" + [3]=> + string(0) "" +} +array(1) { + [0]=> + string(0) "" +} +array(1) { + [0]=> + string(1) "=" +} diff --git a/ext/mbstring/tests/mb_preferred_mime_name.phpt b/ext/mbstring/tests/mb_preferred_mime_name.phpt new file mode 100644 index 0000000..9a71ce2 --- /dev/null +++ b/ext/mbstring/tests/mb_preferred_mime_name.phpt @@ -0,0 +1,61 @@ +--TEST-- +mb_preferred_mime_name() +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +// TODO: Add more encoding names + +//$debug=true; +ini_set('include_path', dirname(__FILE__)); +include_once('common.inc'); + + +$str = mb_preferred_mime_name('sjis-win'); +echo "$str\n"; + +$str = mb_preferred_mime_name('SJIS'); +echo "$str\n"; + +$str = mb_preferred_mime_name('EUC-JP'); +echo "$str\n"; + +$str = mb_preferred_mime_name('UTF-8'); +echo "$str\n"; + +$str = mb_preferred_mime_name('ISO-2022-JP'); +echo "$str\n"; + +$str = mb_preferred_mime_name('JIS'); +echo "$str\n"; + +$str = mb_preferred_mime_name('ISO-8859-1'); +echo "$str\n"; + +$str = mb_preferred_mime_name('UCS2'); +echo "$str\n"; + +$str = mb_preferred_mime_name('UCS4'); +echo "$str\n"; + +echo "== INVALID PARAMETER ==\n"; +// Invalid name +$r = mb_preferred_mime_name('BAD_NAME'); +($r === FALSE) ? print("OK_BAD_NAME\n") : print("NG_BAD_NAME\n"); + +?> + +--EXPECT-- +Shift_JIS +Shift_JIS +EUC-JP +UTF-8 +ISO-2022-JP +ISO-2022-JP +ISO-8859-1 +UCS-2 +UCS-4 +== INVALID PARAMETER == +ERR: Warning +OK_BAD_NAME + diff --git a/ext/mbstring/tests/mb_regex_encoding_basic.phpt b/ext/mbstring/tests/mb_regex_encoding_basic.phpt new file mode 100644 index 0000000..a0a41e9 --- /dev/null +++ b/ext/mbstring/tests/mb_regex_encoding_basic.phpt @@ -0,0 +1,35 @@ +--TEST-- +Test mb_regex_encoding() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : proto string mb_regex_encoding([string encoding]) + * Description: Returns the current encoding for regex as a string. + * Source code: ext/mbstring/php_mbregex.c + */ + +/* + * Test Basic functionality of mb_regex_encoding + */ + +echo "*** Testing mb_regex_encoding() : basic functionality ***\n"; + +var_dump(mb_regex_encoding()); + +var_dump(mb_regex_encoding('UTF-8')); + +var_dump(mb_regex_encoding()); + + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_regex_encoding() : basic functionality *** +string(%d) "%s" +bool(true) +string(5) "UTF-8" +Done diff --git a/ext/mbstring/tests/mb_regex_encoding_error1.phpt b/ext/mbstring/tests/mb_regex_encoding_error1.phpt new file mode 100644 index 0000000..4c5456d --- /dev/null +++ b/ext/mbstring/tests/mb_regex_encoding_error1.phpt @@ -0,0 +1,36 @@ +--TEST-- +Test mb_regex_encoding() function : error conditions - pass incorrect number of args +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_regex_encoding([string $encoding]) + * Description: Returns the current encoding for regex as a string. + * Source code: ext/mbstring/php_mbregex.c + */ + +/* + * Test mb_regex_encoding with one more than expected number of arguments + */ + +echo "*** Testing mb_regex_encoding() : error conditions ***\n"; + + +echo "\n-- Testing mb_regex_encoding() function with more than expected no. of arguments --\n"; +$encoding = 'string_val'; +$extra_arg = 10; +var_dump( mb_regex_encoding($encoding, $extra_arg) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_regex_encoding() : error conditions *** + +-- Testing mb_regex_encoding() function with more than expected no. of arguments -- + +Warning: mb_regex_encoding() expects at most 1 parameter, 2 given in %s on line %d +NULL +Done diff --git a/ext/mbstring/tests/mb_regex_encoding_error2.phpt b/ext/mbstring/tests/mb_regex_encoding_error2.phpt new file mode 100644 index 0000000..c752609 --- /dev/null +++ b/ext/mbstring/tests/mb_regex_encoding_error2.phpt @@ -0,0 +1,31 @@ +--TEST-- +Test mb_regex_encoding() function : error conditions - Pass an unknown encoding +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_regex_encoding([string $encoding]) + * Description: Returns the current encoding for regex as a string. + * Source code: ext/mbstring/php_mbregex.c + */ + +/* + * Pass mb_regex_encoding an unknown type of encoding + */ + +echo "*** Testing mb_regex_encoding() : error conditions ***\n"; + +var_dump(mb_regex_encoding('unknown')); + + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_regex_encoding() : error conditions *** + +Warning: mb_regex_encoding(): Unknown encoding "unknown" in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_regex_encoding_variation1.phpt b/ext/mbstring/tests/mb_regex_encoding_variation1.phpt new file mode 100644 index 0000000..09b263d --- /dev/null +++ b/ext/mbstring/tests/mb_regex_encoding_variation1.phpt @@ -0,0 +1,215 @@ +--TEST-- +Test mb_regex_encoding() function : usage variations - Pass different data types as $encoding arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_regex_encoding([string $encoding]) + * Description: Returns the current encoding for regex as a string. + * Source code: ext/mbstring/php_mbregex.c + */ + +/* + * Pass different data types as $encoding argument to mb_regex_encoding() to test behaviour + * Where possible, 'UTF-8' has been entered as a string value + */ + +echo "*** Testing mb_regex_encoding() : usage variations ***\n"; +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "UTF-8"; + } +} + +// heredoc string +$heredoc = <<<EOT +UTF-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $encoding argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "UTF-8", + 'UTF-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_regex_encoding() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_regex_encoding($input) ); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_regex_encoding() : usage variations *** + +-- Iteration 1 -- + +Warning: mb_regex_encoding(): Unknown encoding "0" in %s on line %d +bool(false) + +-- Iteration 2 -- + +Warning: mb_regex_encoding(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 3 -- + +Warning: mb_regex_encoding(): Unknown encoding "12345" in %s on line %d +bool(false) + +-- Iteration 4 -- + +Warning: mb_regex_encoding(): Unknown encoding "-2345" in %s on line %d +bool(false) + +-- Iteration 5 -- + +Warning: mb_regex_encoding(): Unknown encoding "10.5" in %s on line %d +bool(false) + +-- Iteration 6 -- + +Warning: mb_regex_encoding(): Unknown encoding "-10.5" in %s on line %d +bool(false) + +-- Iteration 7 -- + +Warning: mb_regex_encoding(): Unknown encoding "123456789000" in %s on line %d +bool(false) + +-- Iteration 8 -- + +Warning: mb_regex_encoding(): Unknown encoding "1.23456789E-9" in %s on line %d +bool(false) + +-- Iteration 9 -- + +Warning: mb_regex_encoding(): Unknown encoding "0.5" in %s on line %d +bool(false) + +-- Iteration 10 -- + +Warning: mb_regex_encoding(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 11 -- + +Warning: mb_regex_encoding(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 12 -- + +Warning: mb_regex_encoding(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 13 -- + +Warning: mb_regex_encoding(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 14 -- + +Warning: mb_regex_encoding(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 15 -- + +Warning: mb_regex_encoding(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 16 -- + +Warning: mb_regex_encoding(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 17 -- + +Warning: mb_regex_encoding(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 18 -- +bool(true) + +-- Iteration 19 -- +bool(true) + +-- Iteration 20 -- +bool(true) + +-- Iteration 21 -- +bool(true) + +-- Iteration 22 -- + +Warning: mb_regex_encoding(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 23 -- + +Warning: mb_regex_encoding(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 24 -- + +Warning: mb_regex_encoding() expects parameter 1 to be string, resource given in %s on line %d +NULL +Done diff --git a/ext/mbstring/tests/mb_regex_encoding_variation2.phpt b/ext/mbstring/tests/mb_regex_encoding_variation2.phpt new file mode 100644 index 0000000..fc9c600 --- /dev/null +++ b/ext/mbstring/tests/mb_regex_encoding_variation2.phpt @@ -0,0 +1,420 @@ +--TEST-- +Test mb_regex_encoding() function : usage variations - test different encodings +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_regex_encoding') or die("skip mb_regex_encoding() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_regex_encoding([string $encoding]) + * Description: Returns the current encoding for regex as a string. + * Source code: ext/mbstring/php_mbregex.c + */ + +/* + * Test all listed encoding types from php.net to check all are known to function + * NB: The strings passed are *NOT* necessarily encoded in the encoding passed to the function. + * This test is purely to see whether the function recognises the encoding. + */ + +echo "*** Testing mb_regex_encoding() : usage variations ***\n"; + +$encoding = array('UCS-4', /*1*/ + 'UCS-4BE', + 'UCS-4LE', + 'UCS-2', + 'UCS-2BE', /*5*/ + 'UCS-2LE', + 'UTF-32', + 'UTF-32BE', + 'UTF-32LE', + 'UTF-16', /*10*/ + 'UTF-16BE', + 'UTF-16LE', + 'UTF-7', + 'UTF7-IMAP', + 'UTF-8', /*15*/ + 'ASCII', + 'EUC-JP', + 'SJIS', + 'eucJP-win', + 'SJIS-win', /*20*/ + 'ISO-2022-JP', + 'JIS', + 'ISO-8859-1', + 'ISO-8859-2', + 'ISO-8859-3', /*25*/ + 'ISO-8859-4', + 'ISO-8859-5', + 'ISO-8859-6', + 'ISO-8859-7', + 'ISO-8859-8', /*30*/ + 'ISO-8859-9', + 'ISO-8859-10', + 'ISO-8859-13', + 'ISO-8859-14', + 'ISO-8859-15', /*35*/ + 'byte2be', + 'byte2le', + 'byte4be', + 'byte4le', + 'BASE64', /*40*/ + 'HTML-ENTITIES', + '7bit', + '8bit', + 'EUC-CN', + 'CP936', /*45*/ + 'HZ', + 'EUC-TW', + 'CP950', + 'BIG-5', + 'EUC-KR', /*50*/ + 'UHC', + 'ISO-2022-KR', + 'Windows-1251', + 'Windows-1252', + 'CP866', /*55*/ + 'KOI8-R'); /*56*/ + +$iterator = 1; +foreach($encoding as $enc) { + echo "\n-- Iteration $iterator --\n"; + var_dump(mb_regex_encoding()); + var_dump(mb_regex_encoding($enc)); + var_dump(mb_regex_encoding()); + $iterator++; +} +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_regex_encoding() : usage variations *** + +-- Iteration 1 -- +string(%d) "%s" +bool(true) +string(5) "UCS-4" + +-- Iteration 2 -- +string(5) "UCS-4" + +Warning: mb_regex_encoding(): Unknown encoding "UCS-4BE" in %s on line %d +bool(false) +string(5) "UCS-4" + +-- Iteration 3 -- +string(5) "UCS-4" +bool(true) +string(7) "UCS-4LE" + +-- Iteration 4 -- +string(7) "UCS-4LE" + +Warning: mb_regex_encoding(): Unknown encoding "UCS-2" in %s on line %d +bool(false) +string(7) "UCS-4LE" + +-- Iteration 5 -- +string(7) "UCS-4LE" + +Warning: mb_regex_encoding(): Unknown encoding "UCS-2BE" in %s on line %d +bool(false) +string(7) "UCS-4LE" + +-- Iteration 6 -- +string(7) "UCS-4LE" + +Warning: mb_regex_encoding(): Unknown encoding "UCS-2LE" in %s on line %d +bool(false) +string(7) "UCS-4LE" + +-- Iteration 7 -- +string(7) "UCS-4LE" +bool(true) +string(5) "UCS-4" + +-- Iteration 8 -- +string(5) "UCS-4" +bool(true) +string(5) "UCS-4" + +-- Iteration 9 -- +string(5) "UCS-4" +bool(true) +string(7) "UCS-4LE" + +-- Iteration 10 -- +string(7) "UCS-4LE" +bool(true) +string(6) "UTF-16" + +-- Iteration 11 -- +string(6) "UTF-16" +bool(true) +string(6) "UTF-16" + +-- Iteration 12 -- +string(6) "UTF-16" +bool(true) +string(8) "UTF-16LE" + +-- Iteration 13 -- +string(8) "UTF-16LE" + +Warning: mb_regex_encoding(): Unknown encoding "UTF-7" in %s on line %d +bool(false) +string(8) "UTF-16LE" + +-- Iteration 14 -- +string(8) "UTF-16LE" + +Warning: mb_regex_encoding(): Unknown encoding "UTF7-IMAP" in %s on line %d +bool(false) +string(8) "UTF-16LE" + +-- Iteration 15 -- +string(8) "UTF-16LE" +bool(true) +string(5) "UTF-8" + +-- Iteration 16 -- +string(5) "UTF-8" +bool(true) +string(5) "ASCII" + +-- Iteration 17 -- +string(5) "ASCII" +bool(true) +string(6) "EUC-JP" + +-- Iteration 18 -- +string(6) "EUC-JP" +bool(true) +string(4) "SJIS" + +-- Iteration 19 -- +string(4) "SJIS" +bool(true) +string(6) "EUC-JP" + +-- Iteration 20 -- +string(6) "EUC-JP" +bool(true) +string(4) "SJIS" + +-- Iteration 21 -- +string(4) "SJIS" + +Warning: mb_regex_encoding(): Unknown encoding "ISO-2022-JP" in %s on line %d +bool(false) +string(4) "SJIS" + +-- Iteration 22 -- +string(4) "SJIS" + +Warning: mb_regex_encoding(): Unknown encoding "JIS" in %s on line %d +bool(false) +string(4) "SJIS" + +-- Iteration 23 -- +string(4) "SJIS" +bool(true) +string(10) "ISO-8859-1" + +-- Iteration 24 -- +string(10) "ISO-8859-1" +bool(true) +string(10) "ISO-8859-2" + +-- Iteration 25 -- +string(10) "ISO-8859-2" +bool(true) +string(10) "ISO-8859-3" + +-- Iteration 26 -- +string(10) "ISO-8859-3" +bool(true) +string(10) "ISO-8859-4" + +-- Iteration 27 -- +string(10) "ISO-8859-4" +bool(true) +string(10) "ISO-8859-5" + +-- Iteration 28 -- +string(10) "ISO-8859-5" +bool(true) +string(10) "ISO-8859-6" + +-- Iteration 29 -- +string(10) "ISO-8859-6" +bool(true) +string(10) "ISO-8859-7" + +-- Iteration 30 -- +string(10) "ISO-8859-7" +bool(true) +string(10) "ISO-8859-8" + +-- Iteration 31 -- +string(10) "ISO-8859-8" +bool(true) +string(10) "ISO-8859-9" + +-- Iteration 32 -- +string(10) "ISO-8859-9" +bool(true) +string(11) "ISO-8859-10" + +-- Iteration 33 -- +string(11) "ISO-8859-10" +bool(true) +string(11) "ISO-8859-13" + +-- Iteration 34 -- +string(11) "ISO-8859-13" +bool(true) +string(11) "ISO-8859-14" + +-- Iteration 35 -- +string(11) "ISO-8859-14" +bool(true) +string(11) "ISO-8859-15" + +-- Iteration 36 -- +string(11) "ISO-8859-15" + +Warning: mb_regex_encoding(): Unknown encoding "byte2be" in %s on line %d +bool(false) +string(11) "ISO-8859-15" + +-- Iteration 37 -- +string(11) "ISO-8859-15" + +Warning: mb_regex_encoding(): Unknown encoding "byte2le" in %s on line %d +bool(false) +string(11) "ISO-8859-15" + +-- Iteration 38 -- +string(11) "ISO-8859-15" + +Warning: mb_regex_encoding(): Unknown encoding "byte4be" in %s on line %d +bool(false) +string(11) "ISO-8859-15" + +-- Iteration 39 -- +string(11) "ISO-8859-15" + +Warning: mb_regex_encoding(): Unknown encoding "byte4le" in %s on line %d +bool(false) +string(11) "ISO-8859-15" + +-- Iteration 40 -- +string(11) "ISO-8859-15" + +Warning: mb_regex_encoding(): Unknown encoding "BASE64" in %s on line %d +bool(false) +string(11) "ISO-8859-15" + +-- Iteration 41 -- +string(11) "ISO-8859-15" + +Warning: mb_regex_encoding(): Unknown encoding "HTML-ENTITIES" in %s on line %d +bool(false) +string(11) "ISO-8859-15" + +-- Iteration 42 -- +string(11) "ISO-8859-15" + +Warning: mb_regex_encoding(): Unknown encoding "7bit" in %s on line %d +bool(false) +string(11) "ISO-8859-15" + +-- Iteration 43 -- +string(11) "ISO-8859-15" + +Warning: mb_regex_encoding(): Unknown encoding "8bit" in %s on line %d +bool(false) +string(11) "ISO-8859-15" + +-- Iteration 44 -- +string(11) "ISO-8859-15" +bool(true) +string(6) "EUC-CN" + +-- Iteration 45 -- +string(6) "EUC-CN" + +Warning: mb_regex_encoding(): Unknown encoding "CP936" in %s on line %d +bool(false) +string(6) "EUC-CN" + +-- Iteration 46 -- +string(6) "EUC-CN" + +Warning: mb_regex_encoding(): Unknown encoding "HZ" in %s on line %d +bool(false) +string(6) "EUC-CN" + +-- Iteration 47 -- +string(6) "EUC-CN" +bool(true) +string(6) "EUC-TW" + +-- Iteration 48 -- +string(6) "EUC-TW" + +Warning: mb_regex_encoding(): Unknown encoding "CP950" in %s on line %d +bool(false) +string(6) "EUC-TW" + +-- Iteration 49 -- +string(6) "EUC-TW" +bool(true) +string(4) "BIG5" + +-- Iteration 50 -- +string(4) "BIG5" +bool(true) +string(6) "EUC-KR" + +-- Iteration 51 -- +string(6) "EUC-KR" + +Warning: mb_regex_encoding(): Unknown encoding "UHC" in %s on line %d +bool(false) +string(6) "EUC-KR" + +-- Iteration 52 -- +string(6) "EUC-KR" + +Warning: mb_regex_encoding(): Unknown encoding "ISO-2022-KR" in %s on line %d +bool(false) +string(6) "EUC-KR" + +-- Iteration 53 -- +string(6) "EUC-KR" + +Warning: mb_regex_encoding(): Unknown encoding "Windows-1251" in %s on line %d +bool(false) +string(6) "EUC-KR" + +-- Iteration 54 -- +string(6) "EUC-KR" + +Warning: mb_regex_encoding(): Unknown encoding "Windows-1252" in %s on line %d +bool(false) +string(6) "EUC-KR" + +-- Iteration 55 -- +string(6) "EUC-KR" + +Warning: mb_regex_encoding(): Unknown encoding "CP866" in %s on line %d +bool(false) +string(6) "EUC-KR" + +-- Iteration 56 -- +string(6) "EUC-KR" +bool(true) +string(5) "KOI8R" +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_regex_set_options.phpt b/ext/mbstring/tests/mb_regex_set_options.phpt new file mode 100644 index 0000000..88ee9c9 --- /dev/null +++ b/ext/mbstring/tests/mb_regex_set_options.phpt @@ -0,0 +1,18 @@ +--TEST-- +mb_regex_set_options() +--SKIPIF-- +<?php +extension_loaded('mbstring') or die("skip mbstring not available\n"); +function_exists('mb_regex_set_options') or die("skip\n"); +?> +--FILE-- +<?php + mb_regex_set_options( 'x' ); + print mb_ereg_replace(' -', '+', '- - - - -' ); + + mb_regex_set_options( '' ); + print mb_ereg_replace(' -', '+', '- - - - -' ); +?> + +--EXPECT-- ++ + + + +-++++ diff --git a/ext/mbstring/tests/mb_send_mail01.phpt b/ext/mbstring/tests/mb_send_mail01.phpt new file mode 100644 index 0000000..8ed9ea9 --- /dev/null +++ b/ext/mbstring/tests/mb_send_mail01.phpt @@ -0,0 +1,42 @@ +--TEST-- +mb_send_mail() test 1 (lang=neutral) +--SKIPIF-- +<?php +if (substr(PHP_OS, 0, 3) == 'WIN') { + die('skip.. Not valid for Windows'); +} +if (!function_exists("mb_send_mail") || !mb_language("neutral")) { + die("skip mb_send_mail() not available"); +} +?> +--INI-- +sendmail_path=/bin/cat +mail.add_x_header=off +--FILE-- +<?php +$to = 'example@example.com'; + +/* default setting */ +mb_send_mail($to, mb_language(), "test"); + +/* neutral (UTF-8) */ +if (mb_language("neutral")) { + mb_internal_encoding("none"); + mb_send_mail($to, "test ".mb_language(), "test"); +} +?> +--EXPECTF-- +To: example@example.com +Subject: %s +MIME-Version: 1.0 +Content-Type: text/plain; charset=%s +Content-Transfer-Encoding: %s + +%s +To: example@example.com +Subject: test neutral +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: BASE64 + +dGVzdA== diff --git a/ext/mbstring/tests/mb_send_mail02.phpt b/ext/mbstring/tests/mb_send_mail02.phpt new file mode 100644 index 0000000..923f571 --- /dev/null +++ b/ext/mbstring/tests/mb_send_mail02.phpt @@ -0,0 +1,42 @@ +--TEST-- +mb_send_mail() test 2 (lang=Japanese) +--SKIPIF-- +<?php +if (substr(PHP_OS, 0, 3) == 'WIN') { + die('skip.. Not valid for Windows'); +} +if (!function_exists("mb_send_mail") || !mb_language("japanese")) { + die("skip mb_send_mail() not available"); +} +?> +--INI-- +sendmail_path=/bin/cat +mail.add_x_header=off +--FILE-- +<?php +$to = 'example@example.com'; + +/* default setting */ +mb_send_mail($to, mb_language(), "test"); + +/* Japanese (EUC-JP) */ +if (mb_language("japanese")) { + mb_internal_encoding('EUC-JP'); + mb_send_mail($to, "¥Æ¥¹¥È ".mb_language(), "¥Æ¥¹¥È"); +} +?> +--EXPECTF-- +To: example@example.com +Subject: %s +MIME-Version: 1.0 +Content-Type: text/plain; charset=%s +Content-Transfer-Encoding: %s + +%s +To: example@example.com +Subject: =?ISO-2022-JP?B?GyRCJUYlOSVIGyhCIEphcGFuZXNl?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=ISO-2022-JP +Content-Transfer-Encoding: 7bit + +$B%F%9%H(B diff --git a/ext/mbstring/tests/mb_send_mail03.phpt b/ext/mbstring/tests/mb_send_mail03.phpt new file mode 100644 index 0000000..1b16529 --- /dev/null +++ b/ext/mbstring/tests/mb_send_mail03.phpt @@ -0,0 +1,42 @@ +--TEST-- +mb_send_mail() test 3 (lang=English) +--SKIPIF-- +<?php +if (substr(PHP_OS, 0, 3) == 'WIN') { + die('skip.. Not valid for Windows'); +} +if (!function_exists("mb_send_mail") || !mb_language("english")) { + die("skip mb_send_mail() not available"); +} +?> +--INI-- +sendmail_path=/bin/cat +mail.add_x_header=off +--FILE-- +<?php +$to = 'example@example.com'; + +/* default setting */ +mb_send_mail($to, mb_language(), "test"); + +/* English (iso-8859-1) */ +if (mb_language("english")) { + mb_internal_encoding("ISO-8859-1"); + mb_send_mail($to, "test ".mb_language(), "test"); +} +?> +--EXPECTF-- +To: example@example.com +Subject: %s +MIME-Version: 1.0 +Content-Type: text/plain; charset=%s +Content-Transfer-Encoding: %s + +%s +To: example@example.com +Subject: test English +MIME-Version: 1.0 +Content-Type: text/plain; charset=%s-8859-1 +Content-Transfer-Encoding: 8bit + +test diff --git a/ext/mbstring/tests/mb_send_mail04.phpt b/ext/mbstring/tests/mb_send_mail04.phpt new file mode 100644 index 0000000..fbff4cd --- /dev/null +++ b/ext/mbstring/tests/mb_send_mail04.phpt @@ -0,0 +1,42 @@ +--TEST-- +mb_send_mail() test 4 (lang=German) +--SKIPIF-- +<?php +if (substr(PHP_OS, 0, 3) == 'WIN') { + die('skip.. Not valid for Windows'); +} +if (!function_exists("mb_send_mail") || !mb_language("german")) { + die("skip mb_send_mail() not available"); +} +?> +--INI-- +sendmail_path=/bin/cat +mail.add_x_header=off +--FILE-- +<?php +$to = 'example@example.com'; + +/* default setting */ +mb_send_mail($to, mb_language(), "test"); + +/* German (iso-8859-15) */ +if (mb_language("german")) { + mb_internal_encoding("ISO-8859-15"); + mb_send_mail($to, "Pr"."\xfc"."fung ".mb_language(), "Pr"."\xfc"."fung"); +} +?> +--EXPECTF-- +To: example@example.com +Subject: %s +MIME-Version: 1.0 +Content-Type: text/plain; charset=%s +Content-Transfer-Encoding: %s + +%s +To: example@example.com +Subject: =?ISO-8859-15?Q?Pr=FCfung=20German?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=%s-8859-15 +Content-Transfer-Encoding: 8bit + +Prüfung diff --git a/ext/mbstring/tests/mb_send_mail05.phpt b/ext/mbstring/tests/mb_send_mail05.phpt new file mode 100644 index 0000000..aa68ab8 --- /dev/null +++ b/ext/mbstring/tests/mb_send_mail05.phpt @@ -0,0 +1,46 @@ +--TEST-- +mb_send_mail() test 5 (lang=Simplified Chinese) +--SKIPIF-- +<?php +if (substr(PHP_OS, 0, 3) == 'WIN') { + die('skip.. Not valid for Windows'); +} +if (!function_exists("mb_send_mail") || !mb_language("Simplified Chinese")) { + die("skip mb_send_mail() not available"); +} +if (!@mb_internal_encoding('GB2312')) { + die("skip GB2312 encoding is not available on this platform"); +} +?> +--INI-- +sendmail_path=/bin/cat +mail.add_x_header=off +--FILE-- +<?php +$to = 'example@example.com'; + +/* default setting */ +mb_send_mail($to, mb_language(), "test"); + +/* Simplified Chinese (HK-GB-2312) */ +if (mb_language("simplified chinese")) { + mb_internal_encoding('GB2312'); + mb_send_mail($to, "²âÑé ".mb_language(), "²âÑé"); +} +?> +--EXPECTF-- +To: example@example.com +Subject: %s +MIME-Version: 1.0 +Content-Type: text/plain; charset=%s +Content-Transfer-Encoding: %s + +%s +To: example@example.com +Subject: =?HZ-GB-2312?B?fnsyYlFpfn0gU2ltcGxpZmllZCBD?= + =?HZ-GB-2312?B?aGluZXNl?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=HZ-GB-2312 +Content-Transfer-Encoding: 7bit + +~{2bQi~} diff --git a/ext/mbstring/tests/mb_send_mail06.phpt b/ext/mbstring/tests/mb_send_mail06.phpt new file mode 100644 index 0000000..df3f065 --- /dev/null +++ b/ext/mbstring/tests/mb_send_mail06.phpt @@ -0,0 +1,45 @@ +--TEST-- +mb_send_mail() test 6 (lang=Traditional Chinese) +--SKIPIF-- +<?php +if (substr(PHP_OS, 0, 3) == 'WIN') { + die('skip.. Not valid for Windows'); +} +if (!function_exists("mb_send_mail") || !mb_language("Traditional Chinese")) { + die("skip mb_send_mail() not available"); +} +if (!@mb_internal_encoding('BIG5')) { + die("skip BIG5 encoding is not available on this platform"); +} +?> +--INI-- +sendmail_path=/bin/cat +mail.add_x_header=off +--FILE-- +<?php +$to = 'example@example.com'; + +/* default setting */ +mb_send_mail($to, mb_language(), "test"); + +/* Traditional Chinese () */ +if (mb_language("traditional chinese")) { + mb_internal_encoding('BIG5'); + mb_send_mail($to, "´úÅç ".mb_language(), "´úÅç"); +} +?> +--EXPECTF-- +To: example@example.com +Subject: %s +MIME-Version: 1.0 +Content-Type: text/plain; charset=%s +Content-Transfer-Encoding: %s + +%s +To: example@example.com +Subject: =?BIG5?B?tPrF5yBUcmFkaXRpb25hbCBDaGluZXNl?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=BIG5 +Content-Transfer-Encoding: 8bit + +´úÅç diff --git a/ext/mbstring/tests/mb_send_mail07.phpt b/ext/mbstring/tests/mb_send_mail07.phpt new file mode 100644 index 0000000..f62eccb --- /dev/null +++ b/ext/mbstring/tests/mb_send_mail07.phpt @@ -0,0 +1,45 @@ +--TEST-- +mb_send_mail() test 7 (lang=Korean) +--SKIPIF-- +<?php +if (substr(PHP_OS, 0, 3) == 'WIN') { + die('skip.. Not valid for Windows'); +} +if (!function_exists("mb_send_mail") || !mb_language("Korean")) { + die("skip mb_send_mail() not available"); +} +if (!@mb_internal_encoding('ISO-2022-KR')) { + die("skip ISO-2022-KR encoding is not available on this platform"); +} +?> +--INI-- +sendmail_path=/bin/cat +mail.add_x_header=off +--FILE-- +<?php +$to = 'example@example.com'; + +/* default setting */ +mb_send_mail($to, mb_language(), "test"); + +/* Korean */ +if (mb_language("korean")) { + mb_internal_encoding('EUC-KR'); + mb_send_mail($to, "Å×½ºÆ® ".mb_language(), "Å×½ºÆ®"); +} +?> +--EXPECTF-- +To: example@example.com +Subject: %s +MIME-Version: 1.0 +Content-Type: text/plain; charset=%s +Content-Transfer-Encoding: %s + +%s +To: example@example.com +Subject: =?ISO-2022-KR?B?GyQpQw5FVz06Ri4PIEtvcmVhbg8=?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=ISO-2022-KR +Content-Transfer-Encoding: 7bit + +$)CEW=:F. diff --git a/ext/mbstring/tests/mb_split-compat-01.phpt b/ext/mbstring/tests/mb_split-compat-01.phpt new file mode 100644 index 0000000..8dbc82c --- /dev/null +++ b/ext/mbstring/tests/mb_split-compat-01.phpt @@ -0,0 +1,23 @@ +--TEST-- +mb_split() compat test 1 +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_split') or die("skip mb_split() is not available in this build"); +?> +--FILE-- +<?php +/* (counterpart: ext/standard/tests/reg/009.phpt) */ + $a=mb_split("[[:space:]]","this is a +test"); + echo count($a) . "\n"; + for ($i = 0; $i < count($a); $i++) { + echo $a[$i] . "\n"; + } +?> +--EXPECT-- +4 +this +is +a +test diff --git a/ext/mbstring/tests/mb_split.phpt b/ext/mbstring/tests/mb_split.phpt new file mode 100644 index 0000000..c10b0d7 --- /dev/null +++ b/ext/mbstring/tests/mb_split.phpt @@ -0,0 +1,67 @@ +--TEST-- +mb_split() +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +function_exists('mb_split') or die("skip mb_split() is not available in this build"); +?> +--INI-- +mbstring.func_overload=0 +--FILE-- +<?php + mb_regex_set_options( '' ); + mb_regex_encoding( 'EUC-JP' ); + + function verify_split( $spliton, $str, $count = 0 ) + { + $result1 = mb_split( $spliton, $str, $count ); + $result2 = split( $spliton, $str, $count ); + if ( $result1 == $result2 ) { + print "ok\n"; + } else { + print count($result1).'-'.count($result2)."\n"; + } + } + + var_dump( mb_split( b" ", b"a b c d e f g" ) + == mb_split( b"[[:space:]]", b"a\nb\tc\nd e f g" ) ); + + for ( $i = 0; $i < 5; ++$i ) { + verify_split( b" ", b"a\tb\tc\td e\tf g", $i ); + } + + for ( $i = 1; $i < 5; ++$i ) { + verify_split( b"\xa1\xa1+", b"\xa1\xa1\xa1\xa2\xa2\xa1\xa1\xa1\xa1\xa1\xa1\xa2\xa2\xa1\xa1\xa1", $i ); + } +?> + +--EXPECTF-- +bool(true) + +Deprecated: Function split() is deprecated in %s on line %d +ok + +Deprecated: Function split() is deprecated in %s on line %d +ok + +Deprecated: Function split() is deprecated in %s on line %d +ok + +Deprecated: Function split() is deprecated in %s on line %d +ok + +Deprecated: Function split() is deprecated in %s on line %d +ok + +Deprecated: Function split() is deprecated in %s on line %d +ok + +Deprecated: Function split() is deprecated in %s on line %d +2-2 + +Deprecated: Function split() is deprecated in %s on line %d +3-3 + +Deprecated: Function split() is deprecated in %s on line %d +4-4 + diff --git a/ext/mbstring/tests/mb_split_empty_match.phpt b/ext/mbstring/tests/mb_split_empty_match.phpt new file mode 100644 index 0000000..df3a22c --- /dev/null +++ b/ext/mbstring/tests/mb_split_empty_match.phpt @@ -0,0 +1,23 @@ +--TEST-- +mb_split() empty match +-- +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_split') or die("skip mb_split() is not available in this build"); +?> +--FILE-- +<?php +mb_regex_set_options('m'); +var_dump(mb_split('^', "a\nb\nc")); +--EXPECT-- +array(3) { + [0]=> + string(2) "a +" + [1]=> + string(2) "b +" + [2]=> + string(1) "c" +} diff --git a/ext/mbstring/tests/mb_split_error.phpt b/ext/mbstring/tests/mb_split_error.phpt new file mode 100644 index 0000000..b48e215 --- /dev/null +++ b/ext/mbstring/tests/mb_split_error.phpt @@ -0,0 +1,50 @@ +--TEST-- +Test mb_split() function : error conditions +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_split') or die("skip mb_split() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : proto array mb_split(string pattern, string string [, int limit]) + * Description: split multibyte string into array by regular expression + * Source code: ext/mbstring/php_mbregex.c + * Alias to functions: + */ + +/* + * test too few and too many parameters + */ + +echo "*** Testing mb_split() : error conditions ***\n"; + + +//Test mb_split with one more than the expected number of arguments +echo "\n-- Testing mb_split() function with more than expected no. of arguments --\n"; +$pattern = ' '; +$string = 'a b c d e f g'; +$limit = 0; +$extra_arg = 10; +var_dump( mb_split($pattern, $string, $limit, $extra_arg) ); + +// Testing mb_split with one less than the expected number of arguments +echo "\n-- Testing mb_split() function with less than expected no. of arguments --\n"; +$pattern = 'string_val'; +var_dump( mb_split($pattern) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_split() : error conditions *** + +-- Testing mb_split() function with more than expected no. of arguments -- + +Warning: mb_split() expects at most 3 parameters, 4 given in %s on line %d +bool(false) + +-- Testing mb_split() function with less than expected no. of arguments -- + +Warning: mb_split() expects at least 2 parameters, 1 given in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_split_variation1.phpt b/ext/mbstring/tests/mb_split_variation1.phpt new file mode 100644 index 0000000..b508049 --- /dev/null +++ b/ext/mbstring/tests/mb_split_variation1.phpt @@ -0,0 +1,246 @@ +--TEST-- +Test mb_split() function : usage variations - different parameter types for pattern +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_split') or die("skip mb_split() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : proto array mb_split(string pattern, string string [, int limit]) + * Description: split multibyte string into array by regular expression + * Source code: ext/mbstring/php_mbregex.c + * Alias to functions: + */ + +echo "*** Testing mb_split() : usage variations ***\n"; + +// Initialise function arguments not being substituted (if any) +$string = 'a b c d e f g'; +$limit = 10; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "UTF-8"; + } +} + +// heredoc string +$heredoc = <<<EOT +UTF-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $encoding argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "UTF-8", + 'UTF-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of the array for pattern + +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_split($input, $string, $limit) ); + $iterator++; +}; +fclose($fp); +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_split() : usage variations *** + +-- Iteration 1 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 2 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 3 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 4 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 5 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 6 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 7 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 8 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 9 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 10 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 11 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 12 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 13 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 14 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 15 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 16 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 17 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 18 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 19 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 20 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 21 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 22 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 23 -- +array(1) { + [0]=> + string(13) "a b c d e f g" +} + +-- Iteration 24 -- + +Warning: mb_split() expects parameter 1 to be string, resource given in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_split_variation2.phpt b/ext/mbstring/tests/mb_split_variation2.phpt new file mode 100644 index 0000000..a6db2cc --- /dev/null +++ b/ext/mbstring/tests/mb_split_variation2.phpt @@ -0,0 +1,248 @@ +--TEST-- +Test mb_split() function : usage variations - different parameter types for string +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_split') or die("skip mb_split() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : proto array mb_split(string pattern, string string [, int limit]) + * Description: split multibyte string into array by regular expression + * Source code: ext/mbstring/php_mbregex.c + * Alias to functions: + */ + + +echo "*** Testing mb_split() : usage variations ***\n"; + +// Initialise function arguments not being substituted (if any) +$pattern = '[a-z]'; +$limit = 10; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "UTF-8"; + } +} + +// heredoc string +$heredoc = <<<EOT +UTF-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $encoding argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "UTF-8", + 'UTF-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of the array for pattern + +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_split($pattern, $input, $limit) ); + $iterator++; +}; + +fclose($fp); +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_split() : usage variations *** + +-- Iteration 1 -- +array(1) { + [0]=> + string(1) "0" +} + +-- Iteration 2 -- +array(1) { + [0]=> + string(1) "1" +} + +-- Iteration 3 -- +array(1) { + [0]=> + string(5) "12345" +} + +-- Iteration 4 -- +array(1) { + [0]=> + string(5) "-2345" +} + +-- Iteration 5 -- +array(1) { + [0]=> + string(4) "10.5" +} + +-- Iteration 6 -- +array(1) { + [0]=> + string(5) "-10.5" +} + +-- Iteration 7 -- +array(1) { + [0]=> + string(12) "123456789000" +} + +-- Iteration 8 -- +array(1) { + [0]=> + string(13) "1.23456789E-9" +} + +-- Iteration 9 -- +array(1) { + [0]=> + string(3) "0.5" +} + +-- Iteration 10 -- +array(1) { + [0]=> + string(0) "" +} + +-- Iteration 11 -- +array(1) { + [0]=> + string(0) "" +} + +-- Iteration 12 -- +array(1) { + [0]=> + string(1) "1" +} + +-- Iteration 13 -- +array(1) { + [0]=> + string(0) "" +} + +-- Iteration 14 -- +array(1) { + [0]=> + string(1) "1" +} + +-- Iteration 15 -- +array(1) { + [0]=> + string(0) "" +} + +-- Iteration 16 -- +array(1) { + [0]=> + string(0) "" +} + +-- Iteration 17 -- +array(1) { + [0]=> + string(0) "" +} + +-- Iteration 18 -- +array(1) { + [0]=> + string(5) "UTF-8" +} + +-- Iteration 19 -- +array(1) { + [0]=> + string(5) "UTF-8" +} + +-- Iteration 20 -- +array(1) { + [0]=> + string(5) "UTF-8" +} + +-- Iteration 21 -- +array(1) { + [0]=> + string(5) "UTF-8" +} + +-- Iteration 22 -- +array(1) { + [0]=> + string(0) "" +} + +-- Iteration 23 -- +array(1) { + [0]=> + string(0) "" +} + +-- Iteration 24 -- + +Warning: mb_split() expects parameter 2 to be string, resource given in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_split_variation3.phpt b/ext/mbstring/tests/mb_split_variation3.phpt new file mode 100644 index 0000000..5422b16 --- /dev/null +++ b/ext/mbstring/tests/mb_split_variation3.phpt @@ -0,0 +1,331 @@ +--TEST-- +Test mb_split() function : usage variations - different parameter types for limit +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_split') or die("skip mb_split() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : proto array mb_split(string pattern, string string [, int limit]) + * Description: split multibyte string into array by regular expression + * Source code: ext/mbstring/php_mbregex.c + * Alias to functions: + */ + +echo "*** Testing mb_split() : usage variations ***\n"; + +// Initialise function arguments not being substituted (if any) +$pattern = '[a-z]'; +$string = 'string_val'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "UTF-8"; + } +} + +// heredoc string +$heredoc = <<<EOT +UTF-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $encoding argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "UTF-8", + 'UTF-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of the array for pattern + +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_split($pattern, $string, $input) ); + $iterator++; +}; + +fclose($fp); +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_split() : usage variations *** + +-- Iteration 1 -- +array(1) { + [0]=> + string(10) "string_val" +} + +-- Iteration 2 -- +array(1) { + [0]=> + string(10) "string_val" +} + +-- Iteration 3 -- +array(10) { + [0]=> + string(0) "" + [1]=> + string(0) "" + [2]=> + string(0) "" + [3]=> + string(0) "" + [4]=> + string(0) "" + [5]=> + string(0) "" + [6]=> + string(1) "_" + [7]=> + string(0) "" + [8]=> + string(0) "" + [9]=> + string(0) "" +} + +-- Iteration 4 -- +array(10) { + [0]=> + string(0) "" + [1]=> + string(0) "" + [2]=> + string(0) "" + [3]=> + string(0) "" + [4]=> + string(0) "" + [5]=> + string(0) "" + [6]=> + string(1) "_" + [7]=> + string(0) "" + [8]=> + string(0) "" + [9]=> + string(0) "" +} + +-- Iteration 5 -- +array(10) { + [0]=> + string(0) "" + [1]=> + string(0) "" + [2]=> + string(0) "" + [3]=> + string(0) "" + [4]=> + string(0) "" + [5]=> + string(0) "" + [6]=> + string(1) "_" + [7]=> + string(0) "" + [8]=> + string(0) "" + [9]=> + string(0) "" +} + +-- Iteration 6 -- +array(10) { + [0]=> + string(0) "" + [1]=> + string(0) "" + [2]=> + string(0) "" + [3]=> + string(0) "" + [4]=> + string(0) "" + [5]=> + string(0) "" + [6]=> + string(1) "_" + [7]=> + string(0) "" + [8]=> + string(0) "" + [9]=> + string(0) "" +} + +-- Iteration 7 -- +array(10) { + [0]=> + string(0) "" + [1]=> + string(0) "" + [2]=> + string(0) "" + [3]=> + string(0) "" + [4]=> + string(0) "" + [5]=> + string(0) "" + [6]=> + string(1) "_" + [7]=> + string(0) "" + [8]=> + string(0) "" + [9]=> + string(0) "" +} + +-- Iteration 8 -- +array(1) { + [0]=> + string(10) "string_val" +} + +-- Iteration 9 -- +array(1) { + [0]=> + string(10) "string_val" +} + +-- Iteration 10 -- +array(1) { + [0]=> + string(10) "string_val" +} + +-- Iteration 11 -- +array(1) { + [0]=> + string(10) "string_val" +} + +-- Iteration 12 -- +array(1) { + [0]=> + string(10) "string_val" +} + +-- Iteration 13 -- +array(1) { + [0]=> + string(10) "string_val" +} + +-- Iteration 14 -- +array(1) { + [0]=> + string(10) "string_val" +} + +-- Iteration 15 -- +array(1) { + [0]=> + string(10) "string_val" +} + +-- Iteration 16 -- + +Warning: mb_split() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 17 -- + +Warning: mb_split() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 18 -- + +Warning: mb_split() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 19 -- + +Warning: mb_split() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 20 -- + +Warning: mb_split() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 21 -- + +Warning: mb_split() expects parameter 3 to be long, object given in %s on line %d +bool(false) + +-- Iteration 22 -- +array(1) { + [0]=> + string(10) "string_val" +} + +-- Iteration 23 -- +array(1) { + [0]=> + string(10) "string_val" +} + +-- Iteration 24 -- + +Warning: mb_split() expects parameter 3 to be long, resource given in %s on line %d +bool(false) +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_str_functions_opt-parameter.phpt b/ext/mbstring/tests/mb_str_functions_opt-parameter.phpt new file mode 100644 index 0000000..5fb642f --- /dev/null +++ b/ext/mbstring/tests/mb_str_functions_opt-parameter.phpt @@ -0,0 +1,30 @@ +--TEST-- +Optional long parameter might be null +--FILE-- +<?php +echo mb_strpos('abb', 'b', null, 'UTF-8') . "\n"; +echo mb_strrpos('abb', 'b', null, 'UTF-8') . "\n"; +echo mb_stripos('abb', 'B', null, 'UTF-8') . "\n"; +echo mb_strripos('abb', 'B', null, 'UTF-8') . "\n"; +echo mb_strstr('foobarbaz', 'ba', null, 'UTF-8') . "\n"; +echo mb_strrchr('foobarbaz', 'ba', null, 'UTF-8') . "\n"; +echo mb_stristr('foobarbaz', 'BA', null, 'UTF-8') . "\n"; +echo mb_strrichr('foobarbaz', 'BA', null, 'UTF-8') . "\n"; +echo mb_substr('foobarbaz', 6, null, 'UTF-8') . "\n"; +echo mb_strcut('foobarbaz', 6, null, 'UTF-8') . "\n"; +echo mb_strimwidth('foobar', 0, 3, null, 'UTF-8') . "\n"; +?> +==DONE== +--EXPECT-- +1 +2 +1 +2 +barbaz +baz +barbaz +baz +baz +baz +foo +==DONE== diff --git a/ext/mbstring/tests/mb_strcut.phpt b/ext/mbstring/tests/mb_strcut.phpt new file mode 100644 index 0000000..7c78ffe --- /dev/null +++ b/ext/mbstring/tests/mb_strcut.phpt @@ -0,0 +1,34 @@ +--TEST-- +mb_strcut() +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +output_handler= +--FILE-- +<?php +// TODO: Add more encodings +ini_set('include_path', dirname(__FILE__)); +include_once('common.inc'); + +// EUC-JP +$euc_jp = '0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ¤¤¡£'; + +print mb_strcut($euc_jp, 6, 5,'EUC-JP') . "\n"; +print mb_strcut($euc_jp, 0, 100,'EUC-JP') . "\n"; + +$str = mb_strcut($euc_jp, 100, 10,'EUC-JP'); +($str === false) ? print "OK\n" : print "NG: $str\n"; + +$str = mb_strcut($euc_jp, -100, 10,'EUC-JP'); +($str !== "") ? print "OK: $str\n" : print "NG:\n"; + + +?> + +--EXPECT-- +¤Îʸ +0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ¤¤¡£ +OK +OK: 0123¤³¤Îʸ + + diff --git a/ext/mbstring/tests/mb_strcut_missing_boundary_check.phpt b/ext/mbstring/tests/mb_strcut_missing_boundary_check.phpt new file mode 100644 index 0000000..a67b99e --- /dev/null +++ b/ext/mbstring/tests/mb_strcut_missing_boundary_check.phpt @@ -0,0 +1,31 @@ +--TEST-- +mb_strcut() missing boundary check. +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_convert_encoding') or die("skip mb_convert_encoding() is not available in this build"); +?> +--FILE-- +<?php +mb_internal_encoding("UCS-4LE"); +var_dump(bin2hex(mb_strcut("\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x00\x00", 0, 32))); +mb_internal_encoding("UCS-4BE"); +var_dump(bin2hex(mb_strcut("\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63", 0, 32))); +mb_internal_encoding("UCS-2LE"); +var_dump(bin2hex(mb_strcut("\x61\x00\x62\x00\x63\x00", 0, 32))); +mb_internal_encoding("UCS-2BE"); +var_dump(bin2hex(mb_strcut("\x00\x61\x00\x62\x00\x63", 0, 32))); +mb_internal_encoding("UTF-16"); +var_dump(bin2hex(mb_strcut("\x00\x61\x00\x62\x00\x63", 0, 32))); +mb_internal_encoding("UTF-8"); +var_dump(bin2hex(mb_strcut("abc", 0, 32))); +mb_internal_encoding("ISO-8859-1"); +var_dump(bin2hex(mb_strcut("abc", 0, 32))); +--EXPECT-- +string(24) "610000006200000063000000" +string(24) "000000610000006200000063" +string(12) "610062006300" +string(12) "006100620063" +string(12) "006100620063" +string(6) "616263" +string(6) "616263" diff --git a/ext/mbstring/tests/mb_strimwidth.phpt b/ext/mbstring/tests/mb_strimwidth.phpt new file mode 100644 index 0000000..82780d6 --- /dev/null +++ b/ext/mbstring/tests/mb_strimwidth.phpt @@ -0,0 +1,43 @@ +--TEST-- +mb_strimwidth() +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +output_handler= +--FILE-- +<?php +// TODO: Add more encoding +//$debug = true; +ini_set('include_path', dirname(__FILE__)); +include_once('common.inc'); + +// EUC-JP +$euc_jp = '0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ¤¤¡£'; + +print "1: ". mb_strimwidth($euc_jp, 0, 15,'...','EUC-JP') . "\n"; +print "2: ". mb_strimwidth($euc_jp, 0, 100,'...','EUC-JP') . "\n"; +print "3: ". mb_strimwidth($euc_jp, 15, 100,'...','EUC-JP') . "\n"; +// Note: Did not start form -22 offset. Staring from 0. +$str = mb_strimwidth($euc_jp,-22, 100,'...','EUC-JP'); +($str === FALSE) ? print "4 OK\n" : print "NG: $str\n"; + +$str = mb_strimwidth($euc_jp, 100, -10,'...','EUC-JP'); +($str === FALSE) ? print "5 OK\n" : print "NG: $str\n"; + +$str = mb_strimwidth($euc_jp, -100, 10,'...','EUC-JP'); +($str === FALSE) ? print "6 OK\n" : print "NG: $str\n"; + +?> + +--EXPECT-- +1: 0123¤³¤Îʸ»ú... +2: 0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ¤¤¡£ +3: ¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ¤¤¡£ +ERR: Warning +4 OK +ERR: Warning +5 OK +ERR: Warning +6 OK + + diff --git a/ext/mbstring/tests/mb_stripos.phpt b/ext/mbstring/tests/mb_stripos.phpt new file mode 100644 index 0000000..c21cdf3 --- /dev/null +++ b/ext/mbstring/tests/mb_stripos.phpt @@ -0,0 +1,178 @@ +--TEST-- +mb_stripos() +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build"); +?> +--FILE-- +<?php +// TODO: Add more encodings + +//$debug=true; +ini_set('include_path','.'); +include_once('common.inc'); + + +// Test string +$euc_jp = b'0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£0123ÆüËܸì¤ÏÌÌÅݽ¤¤¡£'; + +// EUC-JP - With encoding parameter +mb_internal_encoding('UTF-8') or print("mb_internal_encoding() failed\n"); + +echo "== POSITIVE OFFSET ==\n"; +print mb_stripos($euc_jp,b'ÆüËܸì', 0, 'EUC-JP') . "\n"; +print mb_stripos($euc_jp, b'0', 0, 'EUC-JP') . "\n"; +print mb_stripos($euc_jp, 3, 0, 'EUC-JP') . "\n"; +print mb_stripos($euc_jp, 0, 0, 'EUC-JP') . "\n"; +print mb_stripos($euc_jp,b'ÆüËܸì', 15, 'EUC-JP') . "\n"; +print mb_stripos($euc_jp, b'0', 15, 'EUC-JP') . "\n"; +print mb_stripos($euc_jp, 3, 15, 'EUC-JP') . "\n"; +print mb_stripos($euc_jp, 0, 15, 'EUC-JP') . "\n"; + +// Negative offset +// Note: PHP Warning - offset is negative. +// Note: For offset(-15). It does not return position of latter string. (ie the same result as -50) +echo "== NEGATIVE OFFSET ==\n"; +$r = mb_stripos($euc_jp,b'ÆüËܸì', -15, 'EUC-JP'); +($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n"; +$r = mb_stripos($euc_jp, b'0', -15, 'EUC-JP'); +($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n"; +$r = mb_stripos($euc_jp, 3, -15, 'EUC-JP'); +($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n"; +$r = mb_stripos($euc_jp, 0, -15, 'EUC-JP'); +($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n"; +$r = mb_stripos($euc_jp,b'ÆüËܸì', -50, 'EUC-JP'); +($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n"; +$r = mb_stripos($euc_jp, b'0', -50, 'EUC-JP'); +($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n"; +$r = mb_stripos($euc_jp, 3, -50, 'EUC-JP'); +($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n"; +$r = mb_stripos($euc_jp, 0, -50, 'EUC-JP'); +($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n"; + +// Out of range - should return false +print ("== OUT OF RANGE ==\n"); +$r = mb_stripos($euc_jp,b'ÆüËܸì', 40, 'EUC-JP'); +($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n"; +$r = mb_stripos($euc_jp, b'0', 40, 'EUC-JP'); +($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n"; +$r = mb_stripos($euc_jp, 3, 40, 'EUC-JP'); +($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n"; +$r = mb_stripos($euc_jp, 0, 40, 'EUC-JP'); +($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n"; +// Note: Returned NULL string +// echo gettype($r). ' val '. $r ."\n"; + + +// Non-existent +echo "== NON-EXISTENT ==\n"; +$r = mb_stripos($euc_jp, b'´Ú¹ñ¸ì', 0, 'EUC-JP'); +($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n"; +$r = mb_stripos($euc_jp, b"\n", 0, 'EUC-JP'); +($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n"; + + +// EUC-JP - No encoding parameter +echo "== NO ENCODING PARAMETER ==\n"; +mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n"); + +print mb_stripos($euc_jp,b'ÆüËܸì', 0) . "\n"; +print mb_stripos($euc_jp, b'0', 0) . "\n"; +print mb_stripos($euc_jp, 3, 0) . "\n"; +print mb_stripos($euc_jp, 0, 0) . "\n"; + +$r = mb_stripos($euc_jp,b'´Ú¹ñ¸ì', 0); +($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n"; +$r = mb_stripos($euc_jp,b"\n", 0); +($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n"; + +// EUC-JP - No offset and encoding parameter +echo "== NO OFFSET AND ENCODING PARAMETER ==\n"; +mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n"); + +print mb_stripos($euc_jp,b'ÆüËܸì') . "\n"; +print mb_stripos($euc_jp, b'0') . "\n"; +print mb_stripos($euc_jp, 3) . "\n"; +print mb_stripos($euc_jp, 0) . "\n"; + +$r = mb_stripos($euc_jp,b'´Ú¹ñ¸ì'); +($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n"; +$r = mb_stripos($euc_jp,b"\n"); +($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n"; + + +// Invalid Parameters +echo "== INVALID PARAMETER TEST ==\n"; + +$r = mb_stripos($euc_jp,'','EUC-JP'); +($r === FALSE) ? print("OK_NULL\n") : print("NG_NULL\n"); +$r = mb_stripos($euc_jp, $t_ary, 'EUC-JP'); +($r === FALSE) ? print("OK_ARRAY\n") : print("NG_ARRAY\n"); +$r = mb_stripos($euc_jp, $t_obj, 'EUC-JP'); +($r === FALSE) ? print("OK_OBJECT\n") : print("NG_OBJECT\n"); +$r = mb_stripos($euc_jp, $t_obj, 'BAD_ENCODING'); +($r === FALSE) ? print("OK_BAD_ENCODING\n") : print("NG_BAD_ENCODING\n"); + + +?> + +--EXPECT-- +== POSITIVE OFFSET == +10 +0 +3 +0 +34 +30 +33 +30 +== NEGATIVE OFFSET == +ERR: Warning +OK_NEGATIVE_OFFSET +ERR: Warning +OK_NEGATIVE_OFFSET +ERR: Warning +OK_NEGATIVE_OFFSET +ERR: Warning +OK_NEGATIVE_OFFSET +ERR: Warning +OK_NEGATIVE_OFFSET +ERR: Warning +OK_NEGATIVE_OFFSET +ERR: Warning +OK_NEGATIVE_OFFSET +ERR: Warning +OK_NEGATIVE_OFFSET +== OUT OF RANGE == +OK_OUT_RANGE +OK_OUT_RANGE +OK_OUT_RANGE +OK_OUT_RANGE +== NON-EXISTENT == +OK_STR +OK_NEWLINE +== NO ENCODING PARAMETER == +10 +0 +3 +0 +OK_STR +OK_NEWLINE +== NO OFFSET AND ENCODING PARAMETER == +10 +0 +3 +0 +OK_STR +OK_NEWLINE +== INVALID PARAMETER TEST == +ERR: Warning +OK_NULL +ERR: Warning +OK_ARRAY +ERR: Warning +OK_OBJECT +ERR: Warning +OK_BAD_ENCODING + diff --git a/ext/mbstring/tests/mb_stripos_basic.phpt b/ext/mbstring/tests/mb_stripos_basic.phpt new file mode 100644 index 0000000..bb33bb1 --- /dev/null +++ b/ext/mbstring/tests/mb_stripos_basic.phpt @@ -0,0 +1,158 @@ +--TEST-- +Test mb_stripos() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_stripos(string haystack, string needle [, int offset [, string encoding]]) + * Description: Finds position of first occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +/* + * Test basic functionality of mb_stripos with ASCII and multibyte characters + */ + +echo "*** Testing mb_stripos() : basic functionality***\n"; + +mb_internal_encoding('UTF-8'); + +//ascii strings +$ascii_haystacks = array( + b'abc defabc def', + b'ABC DEFABC DEF', + b'Abc dEFaBC Def', +); + +$ascii_needles = array( + // 4 good ones + b'DE', + b'de', + b'De', + b'dE', + + //flag a swap between good and bad + '!', + + // 4 bad ones + b'df', + b'Df', + b'dF', + b'DF' +); + +//greek strings in UTF-8 +$greek_lower = base64_decode('zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J'); +$greek_upper = base64_decode('zpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6p'); +$greek_mixed = base64_decode('zrHOss6TzpTOlc6WzpfOmM65zrrOu868zr3Ovs6fzqDOoc6jzqTOpc+Gz4fPiM+J'); +$greek_haystacks = array($greek_lower, $greek_upper, $greek_mixed); + +$greek_nlower = base64_decode('zrzOvc6+zr8='); +$greek_nupper = base64_decode('zpzOnc6ezp8='); +$greek_nmixed1 = base64_decode('zpzOnc6+zr8='); +$greek_nmixed2 = base64_decode('zrzOvc6+zp8='); + +$greek_blower = base64_decode('zpzOns6f'); +$greek_bupper = base64_decode('zrzOvs6/'); +$greek_bmixed1 = base64_decode('zpzOvs6/'); +$greek_bmixed2 = base64_decode('zrzOvs6f'); +$greek_needles = array( + // 4 good ones + $greek_nlower, $greek_nupper, $greek_nmixed1, $greek_nmixed2, + + '!', // used to flag a swap between good and bad + + // 4 bad ones + $greek_blower, $greek_bupper, $greek_bmixed1, $greek_bmixed2, +); + +// try the basic options +echo "\n -- ASCII Strings, needle should be found --\n"; +foreach ($ascii_needles as $needle) { + if ($needle == '!') { + echo "\n -- ASCII Strings, needle should not be found --\n"; + } + else { + foreach ($ascii_haystacks as $haystack) { + var_dump(mb_stripos($haystack, $needle)); + } + } +} + +echo "\n -- Greek Strings, needle should be found --\n"; +foreach ($greek_needles as $needle) { + if ($needle == '!') { + echo "\n -- ASCII Strings, needle should not be found --\n"; + } + else { + foreach ($greek_haystacks as $haystack) { + var_dump(mb_stripos($haystack, $needle)); + } + } +} + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_stripos() : basic functionality*** + + -- ASCII Strings, needle should be found -- +int(4) +int(4) +int(4) +int(4) +int(4) +int(4) +int(4) +int(4) +int(4) +int(4) +int(4) +int(4) + + -- ASCII Strings, needle should not be found -- +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) + + -- Greek Strings, needle should be found -- +int(11) +int(11) +int(11) +int(11) +int(11) +int(11) +int(11) +int(11) +int(11) +int(11) +int(11) +int(11) + + -- ASCII Strings, needle should not be found -- +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +Done diff --git a/ext/mbstring/tests/mb_stripos_basic2.phpt b/ext/mbstring/tests/mb_stripos_basic2.phpt new file mode 100644 index 0000000..f9131d9 --- /dev/null +++ b/ext/mbstring/tests/mb_stripos_basic2.phpt @@ -0,0 +1,129 @@ +--TEST-- +Test mb_stripos() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_stripos(string haystack, string needle [, int offset [, string encoding]]) + * Description: Finds position of first occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +/* + * Test basic functionality of mb_stripos with ASCII and multibyte characters + */ + +echo "*** Testing mb_stripos() : basic functionality***\n"; + +mb_internal_encoding('UTF-8'); + +//ascii strings +$ascii_haystacks = array( + b'abc defabc def', + b'ABC DEFABC DEF', + b'Abc dEFaBC Def', +); + +$ascii_needles = array( + // 4 good ones + b'DE', + b'de', + b'De', + b'dE', +); + +//greek strings in UTF-8 +$greek_lower = base64_decode('zrrOu868zr3Ovs6/z4DPgSDOus67zrzOvc6+zr/PgA=='); +$greek_upper = base64_decode('zprOm86czp3Ons6fzqDOoSDOms6bzpzOnc6ezp/OoA=='); +$greek_mixed = base64_decode('zrrOu868zr3Ovs6fzqDOoSDOus67zpzOnc6+zr/OoA=='); +$greek_haystacks = array($greek_lower, $greek_upper, $greek_mixed); + +$greek_nlower = base64_decode('zrzOvc6+zr8='); +$greek_nupper = base64_decode('zpzOnc6ezp8='); +$greek_nmixed1 = base64_decode('zpzOnc6+zr8='); +$greek_nmixed2 = base64_decode('zrzOvc6+zp8='); + +$greek_needles = array( + // 4 good ones + $greek_nlower, $greek_nupper, $greek_nmixed1, $greek_nmixed2, +); + +// try the basic options +echo "\n -- ASCII Strings --\n"; +foreach ($ascii_needles as $needle) { + foreach ($ascii_haystacks as $haystack) { + var_dump(mb_stripos($haystack, $needle)); + var_dump(mb_stripos($haystack, $needle, 6)); + } +} + +echo "\n -- Greek Strings --\n"; +foreach ($greek_needles as $needle) { + foreach ($greek_haystacks as $haystack) { + var_dump(mb_stripos($haystack, $needle)); + var_dump(mb_stripos($haystack, $needle, 4)); + } +} + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_stripos() : basic functionality*** + + -- ASCII Strings -- +int(4) +int(13) +int(4) +int(13) +int(4) +int(13) +int(4) +int(13) +int(4) +int(13) +int(4) +int(13) +int(4) +int(13) +int(4) +int(13) +int(4) +int(13) +int(4) +int(13) +int(4) +int(13) +int(4) +int(13) + + -- Greek Strings -- +int(2) +int(11) +int(2) +int(11) +int(2) +int(11) +int(2) +int(11) +int(2) +int(11) +int(2) +int(11) +int(2) +int(11) +int(2) +int(11) +int(2) +int(11) +int(2) +int(11) +int(2) +int(11) +int(2) +int(11) +Done + diff --git a/ext/mbstring/tests/mb_stripos_error1.phpt b/ext/mbstring/tests/mb_stripos_error1.phpt new file mode 100644 index 0000000..c4ea5d7 --- /dev/null +++ b/ext/mbstring/tests/mb_stripos_error1.phpt @@ -0,0 +1,51 @@ +--TEST-- +Test mb_stripos() function : error conditions - Pass incorrect number of args +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_stripos(string haystack, string needle [, int offset [, string encoding]]) + * Description: Finds position of first occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +/* + * Test how mb_stripos behaves when passed an incorrect number of arguments + */ + +echo "*** Testing mb_stripos() : error conditions ***\n"; + + +//Test mb_stripos with one more than the expected number of arguments +echo "\n-- Testing mb_stripos() function with more than expected no. of arguments --\n"; +$haystack = b'string_val'; +$needle = b'string_val'; +$offset = 10; +$encoding = 'string_val'; +$extra_arg = 10; +var_dump( mb_stripos($haystack, $needle, $offset, $encoding, $extra_arg) ); + +// Testing mb_stripos with one less than the expected number of arguments +echo "\n-- Testing mb_stripos() function with less than expected no. of arguments --\n"; +$haystack = b'string_val'; +var_dump( mb_stripos($haystack) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_stripos() : error conditions *** + +-- Testing mb_stripos() function with more than expected no. of arguments -- + +Warning: mb_stripos() expects at most 4 parameters, 5 given in %s on line %d +bool(false) + +-- Testing mb_stripos() function with less than expected no. of arguments -- + +Warning: mb_stripos() expects at least 2 parameters, 1 given in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_stripos_error2.phpt b/ext/mbstring/tests/mb_stripos_error2.phpt new file mode 100644 index 0000000..c5e5c8d --- /dev/null +++ b/ext/mbstring/tests/mb_stripos_error2.phpt @@ -0,0 +1,35 @@ +--TEST-- +Test mb_stripos() function : error conditions - Pass unknown encoding +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_stripos(string haystack, string needle [, int offset [, string encoding]]) + * Description: Finds position of first occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +/* + * Pass an unknown encoding to mb_stripos() to test behaviour + */ + +echo "*** Testing mb_stripos() : error conditions ***\n"; +$haystack = b'Hello, world'; +$needle = b'world'; +$offset = 2; +$encoding = 'unknown-encoding'; + +var_dump( mb_stripos($haystack, $needle, $offset, $encoding) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_stripos() : error conditions *** + +Warning: mb_stripos(): Unknown encoding "unknown-encoding" in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_stripos_variation1.phpt b/ext/mbstring/tests/mb_stripos_variation1.phpt new file mode 100644 index 0000000..ab7f75e --- /dev/null +++ b/ext/mbstring/tests/mb_stripos_variation1.phpt @@ -0,0 +1,183 @@ +--TEST-- +Test mb_stripos() function : usage variations - pass different data types to $haystack arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_stripos(string haystack, string needle [, int offset [, string encoding]]) + * Description: Finds position of first occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +/* + * Pass mb_stripos different data types as $haystack arg to test behaviour + */ + +echo "*** Testing mb_stripos() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$needle = b'string_val'; +$offset = 0; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "Class A object"; + } +} + +// heredoc string +$heredoc = <<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $haystack argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "string", + 'string', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_stripos() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_stripos($input, $needle, $offset, $encoding)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_stripos() : usage variations *** + +-- Iteration 1 -- +bool(false) + +-- Iteration 2 -- +bool(false) + +-- Iteration 3 -- +bool(false) + +-- Iteration 4 -- +bool(false) + +-- Iteration 5 -- +bool(false) + +-- Iteration 6 -- +bool(false) + +-- Iteration 7 -- +bool(false) + +-- Iteration 8 -- +bool(false) + +-- Iteration 9 -- +bool(false) + +-- Iteration 10 -- +bool(false) + +-- Iteration 11 -- +bool(false) + +-- Iteration 12 -- +bool(false) + +-- Iteration 13 -- +bool(false) + +-- Iteration 14 -- +bool(false) + +-- Iteration 15 -- +bool(false) + +-- Iteration 16 -- +bool(false) + +-- Iteration 17 -- +bool(false) + +-- Iteration 18 -- +bool(false) + +-- Iteration 19 -- +bool(false) + +-- Iteration 20 -- +bool(false) + +-- Iteration 21 -- +bool(false) + +-- Iteration 22 -- +bool(false) + +-- Iteration 23 -- +bool(false) + +-- Iteration 24 -- + +Warning: mb_stripos() expects parameter 1 to be string, resource given in %s on line %d +bool(false) +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_stripos_variation2.phpt b/ext/mbstring/tests/mb_stripos_variation2.phpt new file mode 100644 index 0000000..1b5263a --- /dev/null +++ b/ext/mbstring/tests/mb_stripos_variation2.phpt @@ -0,0 +1,200 @@ +--TEST-- +Test mb_stripos() function : usage variations - pass different data types as $needle arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_stripos(string haystack, string needle [, int offset [, string encoding]]) + * Description: Finds position of first occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +/* + * Pass mb_stripos different data types as $needle arg to test behaviour + */ + +echo "*** Testing mb_stripos() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$haystack = b'string_val'; +$offset = 0; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "Class A object"; + } +} + +// heredoc string +$heredoc = <<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $needle argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ b"string", + b'string', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_stripos() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_stripos($haystack, $input, $offset, $encoding)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_stripos() : usage variations *** + +-- Iteration 1 -- +bool(false) + +-- Iteration 2 -- +bool(false) + +-- Iteration 3 -- +bool(false) + +-- Iteration 4 -- +bool(false) + +-- Iteration 5 -- +bool(false) + +-- Iteration 6 -- +bool(false) + +-- Iteration 7 -- +bool(false) + +-- Iteration 8 -- +bool(false) + +-- Iteration 9 -- +bool(false) + +-- Iteration 10 -- + +Warning: mb_stripos(): Empty delimiter in %s on line %d +bool(false) + +-- Iteration 11 -- + +Warning: mb_stripos(): Empty delimiter in %s on line %d +bool(false) + +-- Iteration 12 -- +bool(false) + +-- Iteration 13 -- + +Warning: mb_stripos(): Empty delimiter in %s on line %d +bool(false) + +-- Iteration 14 -- +bool(false) + +-- Iteration 15 -- + +Warning: mb_stripos(): Empty delimiter in %s on line %d +bool(false) + +-- Iteration 16 -- + +Warning: mb_stripos(): Empty delimiter in %s on line %d +bool(false) + +-- Iteration 17 -- + +Warning: mb_stripos(): Empty delimiter in %s on line %d +bool(false) + +-- Iteration 18 -- +int(0) + +-- Iteration 19 -- +int(0) + +-- Iteration 20 -- +bool(false) + +-- Iteration 21 -- +bool(false) + +-- Iteration 22 -- + +Warning: mb_stripos(): Empty delimiter in %s on line %d +bool(false) + +-- Iteration 23 -- + +Warning: mb_stripos(): Empty delimiter in %s on line %d +bool(false) + +-- Iteration 24 -- + +Warning: mb_stripos() expects parameter 2 to be string, resource given in %s on line %d +bool(false) +Done + diff --git a/ext/mbstring/tests/mb_stripos_variation3.phpt b/ext/mbstring/tests/mb_stripos_variation3.phpt new file mode 100644 index 0000000..41a365a --- /dev/null +++ b/ext/mbstring/tests/mb_stripos_variation3.phpt @@ -0,0 +1,203 @@ +--TEST-- +Test mb_stripos() function : usage variations - pass different data types as $offset arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_stripos(string haystack, string needle [, int offset [, string encoding]]) + * Description: Finds position of first occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +/* + * Pass mb_stripos different data types as $offset arg to test behaviour + */ + +echo "*** Testing mb_stripos() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$needle = b'A'; +$haystack = b'string_val'; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "Class A object"; + } +} + +// heredoc string +$heredoc = <<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $offest argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "string", + 'string', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_stripos() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_stripos($haystack, $needle, $input, $encoding)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_stripos() : usage variations *** + +-- Iteration 1 -- +int(8) + +-- Iteration 2 -- +int(8) + +-- Iteration 3 -- + +Warning: mb_stripos(): Offset not contained in string in %s on line %d +bool(false) + +-- Iteration 4 -- + +Warning: mb_stripos(): Offset not contained in string in %s on line %d +bool(false) + +-- Iteration 5 -- +bool(false) + +-- Iteration 6 -- + +Warning: mb_stripos(): Offset not contained in string in %s on line %d +bool(false) + +-- Iteration 7 -- + +Warning: mb_stripos(): Offset not contained in string in %s on line %d +bool(false) + +-- Iteration 8 -- +int(8) + +-- Iteration 9 -- +int(8) + +-- Iteration 10 -- +int(8) + +-- Iteration 11 -- +int(8) + +-- Iteration 12 -- +int(8) + +-- Iteration 13 -- +int(8) + +-- Iteration 14 -- +int(8) + +-- Iteration 15 -- +int(8) + +-- Iteration 16 -- + +Warning: mb_stripos() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 17 -- + +Warning: mb_stripos() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 18 -- + +Warning: mb_stripos() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 19 -- + +Warning: mb_stripos() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 20 -- + +Warning: mb_stripos() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 21 -- + +Warning: mb_stripos() expects parameter 3 to be long, object given in %s on line %d +bool(false) + +-- Iteration 22 -- +int(8) + +-- Iteration 23 -- +int(8) + +-- Iteration 24 -- + +Warning: mb_stripos() expects parameter 3 to be long, resource given in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_stripos_variation4.phpt b/ext/mbstring/tests/mb_stripos_variation4.phpt new file mode 100644 index 0000000..f330bbd --- /dev/null +++ b/ext/mbstring/tests/mb_stripos_variation4.phpt @@ -0,0 +1,223 @@ +--TEST-- +Test mb_stripos() function : usage variations - pass different data types as $encoding arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_stripos(string haystack, string needle [, int offset [, string encoding]]) + * Description: Finds position of first occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +/* + * Pass mb_stripos different data types as $encoding arg to test behaviour + * Where possible 'UTF-8' has been entered as a string value + */ + +echo "*** Testing mb_stripos() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$haystack = b'string_val'; +$needle = b'VaL'; +$offset = 0; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "UTF-8"; + } +} + +// heredoc string +$heredoc = <<<EOT +UTF-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $input argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "UTF-8", + 'UTF-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_stripos() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_stripos($haystack, $needle, $offset, $input)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_stripos() : usage variations *** + +-- Iteration 1 -- + +Warning: mb_stripos(): Unknown encoding "0" in %s on line %d +bool(false) + +-- Iteration 2 -- + +Warning: mb_stripos(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 3 -- + +Warning: mb_stripos(): Unknown encoding "12345" in %s on line %d +bool(false) + +-- Iteration 4 -- + +Warning: mb_stripos(): Unknown encoding "-2345" in %s on line %d +bool(false) + +-- Iteration 5 -- + +Warning: mb_stripos(): Unknown encoding "10.5" in %s on line %d +bool(false) + +-- Iteration 6 -- + +Warning: mb_stripos(): Unknown encoding "-10.5" in %s on line %d +bool(false) + +-- Iteration 7 -- + +Warning: mb_stripos(): Unknown encoding "123456789000" in %s on line %d +bool(false) + +-- Iteration 8 -- + +Warning: mb_stripos(): Unknown encoding "1.23456789E-9" in %s on line %d +bool(false) + +-- Iteration 9 -- + +Warning: mb_stripos(): Unknown encoding "0.5" in %s on line %d +bool(false) + +-- Iteration 10 -- + +Warning: mb_stripos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 11 -- + +Warning: mb_stripos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 12 -- + +Warning: mb_stripos(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 13 -- + +Warning: mb_stripos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 14 -- + +Warning: mb_stripos(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 15 -- + +Warning: mb_stripos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 16 -- + +Warning: mb_stripos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 17 -- + +Warning: mb_stripos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 18 -- +int(7) + +-- Iteration 19 -- +int(7) + +-- Iteration 20 -- +int(7) + +-- Iteration 21 -- +int(7) + +-- Iteration 22 -- + +Warning: mb_stripos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 23 -- + +Warning: mb_stripos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 24 -- + +Warning: mb_stripos() expects parameter 4 to be string, resource given in %s on line %d +bool(false) +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_stripos_variation5_Bug45923.phpt b/ext/mbstring/tests/mb_stripos_variation5_Bug45923.phpt new file mode 100644 index 0000000..fbe4937 --- /dev/null +++ b/ext/mbstring/tests/mb_stripos_variation5_Bug45923.phpt @@ -0,0 +1,119 @@ +--TEST-- +Test mb_stripos() function : usage variations - Pass different integers as $offset argument +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_stripos') or die("skip mb_stripos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_stripos(string haystack, string needle [, int offset [, string encoding]]) + * Description: Finds position of first occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +/* + * Test how mb_stripos() behaves when passed different integers as $offset argument + * The character length of $string_ascii and $string_mb is the same, + * and the needle appears at the same positions in both strings + */ + +mb_internal_encoding('UTF-8'); + +echo "*** Testing mb_stripos() : usage variations ***\n"; + +$string_ascii = b'+Is an English string'; //21 chars +$needle_ascii = b'G'; + +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); //21 chars +$needle_mb = base64_decode('44CC'); + +/* + * Loop through integers as multiples of ten for $offset argument + * mb_stripos should not be able to accept negative values as $offset. + * 60 is larger than *BYTE* count for $string_mb + */ +for ($i = -10; $i <= 60; $i += 10) { + echo "\n**-- Offset is: $i --**\n"; + echo "-- ASCII String --\n"; + var_dump(mb_stripos($string_ascii, $needle_ascii, $i)); + echo "--Multibyte String --\n"; + var_dump(mb_stripos($string_mb, $needle_mb, $i, 'UTF-8')); +} + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_stripos() : usage variations *** + +**-- Offset is: -10 --** +-- ASCII String -- + +Warning: mb_stripos(): Offset not contained in string in %s on line %d +bool(false) +--Multibyte String -- + +Warning: mb_stripos(): Offset not contained in string in %s on line %d +bool(false) + +**-- Offset is: 0 --** +-- ASCII String -- +int(9) +--Multibyte String -- +int(9) + +**-- Offset is: 10 --** +-- ASCII String -- +int(20) +--Multibyte String -- +int(20) + +**-- Offset is: 20 --** +-- ASCII String -- +int(20) +--Multibyte String -- +int(20) + +**-- Offset is: 30 --** +-- ASCII String -- + +Warning: mb_stripos(): Offset not contained in string in %s on line %d +bool(false) +--Multibyte String -- + +Warning: mb_stripos(): Offset not contained in string in %s on line %d +bool(false) + +**-- Offset is: 40 --** +-- ASCII String -- + +Warning: mb_stripos(): Offset not contained in string in %s on line %d +bool(false) +--Multibyte String -- + +Warning: mb_stripos(): Offset not contained in string in %s on line %d +bool(false) + +**-- Offset is: 50 --** +-- ASCII String -- + +Warning: mb_stripos(): Offset not contained in string in %s on line %d +bool(false) +--Multibyte String -- + +Warning: mb_stripos(): Offset not contained in string in %s on line %d +bool(false) + +**-- Offset is: 60 --** +-- ASCII String -- + +Warning: mb_stripos(): Offset not contained in string in %s on line %d +bool(false) +--Multibyte String -- + +Warning: mb_stripos(): Offset not contained in string in %s on line %d +bool(false) +Done + diff --git a/ext/mbstring/tests/mb_stristr_basic.phpt b/ext/mbstring/tests/mb_stristr_basic.phpt new file mode 100644 index 0000000..9340d35 --- /dev/null +++ b/ext/mbstring/tests/mb_stristr_basic.phpt @@ -0,0 +1,70 @@ +--TEST-- +Test mb_stristr() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_stristr') or die("skip mb_stristr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_stristr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds first occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_stristr() : basic functionality ***\n"; + +mb_internal_encoding('UTF-8'); + +$string_ascii = b'abcdef'; +$needle_ascii_upper = b"BCD"; +$needle_ascii_mixed = b"bCd"; +$needle_ascii_lower = b"bcd"; + +//Greek string in lower case UTF-8 +$string_mb = base64_decode('zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J'); +$needle_mb_upper = base64_decode('zpzOnc6ezp8='); +$needle_mb_lower = base64_decode('zrzOvc6+zr8='); +$needle_mb_mixed = base64_decode('zpzOnc6+zr8='); + +echo "\n-- ASCII string: needle exists --\n"; +var_dump(bin2hex(mb_stristr($string_ascii, $needle_ascii_upper, false, 'ISO-8859-1'))); +var_dump(bin2hex(mb_stristr($string_ascii, $needle_ascii_lower))); +var_dump(bin2hex(mb_stristr($string_ascii, $needle_ascii_mixed, true))); + + +echo "\n-- ASCII string: needle doesn't exist --\n"; +var_dump(mb_stristr($string_ascii, '123')); + +echo "\n-- Multibyte string: needle exists --\n"; +var_dump(bin2hex(mb_stristr($string_mb, $needle_mb_upper))); +var_dump(bin2hex(mb_stristr($string_mb, $needle_mb_lower, false, 'utf-8'))); +var_dump(bin2hex(mb_stristr($string_mb, $needle_mb_mixed, true))); + + +echo "\n-- Multibyte string: needle doesn't exist --\n"; +$needle2 = base64_decode("zrzOvs6/"); +var_dump(mb_stristr($string_mb, $needle2)); + +?> +===DONE=== +--EXPECT-- +*** Testing mb_stristr() : basic functionality *** + +-- ASCII string: needle exists -- +string(10) "6263646566" +string(10) "6263646566" +string(2) "61" + +-- ASCII string: needle doesn't exist -- +bool(false) + +-- Multibyte string: needle exists -- +string(52) "cebccebdcebecebfcf80cf81cf83cf84cf85cf86cf87cf88cf89" +string(52) "cebccebdcebecebfcf80cf81cf83cf84cf85cf86cf87cf88cf89" +string(44) "ceb1ceb2ceb3ceb4ceb5ceb6ceb7ceb8ceb9cebacebb" + +-- Multibyte string: needle doesn't exist -- +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_stristr_error1.phpt b/ext/mbstring/tests/mb_stristr_error1.phpt new file mode 100644 index 0000000..3c766c4 --- /dev/null +++ b/ext/mbstring/tests/mb_stristr_error1.phpt @@ -0,0 +1,47 @@ +--TEST-- +Test mb_stristr() function : error conditions +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_stristr') or die("skip mb_stristr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_stristr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds first occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_stristr() : error conditions ***\n"; + + +//Test mb_stristr with one more than the expected number of arguments +echo "\n-- Testing mb_stristr() function with more than expected no. of arguments --\n"; +$haystack = b'string_val'; +$needle = b'string_val'; +$part = true; +$encoding = 'string_val'; +$extra_arg = 10; +var_dump( mb_stristr($haystack, $needle, $part, $encoding, $extra_arg) ); + +// Testing mb_stristr with one less than the expected number of arguments +echo "\n-- Testing mb_stristr() function with less than expected no. of arguments --\n"; +$haystack = b'string_val'; +var_dump( mb_stristr($haystack) ); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_stristr() : error conditions *** + +-- Testing mb_stristr() function with more than expected no. of arguments -- + +Warning: mb_stristr() expects at most 4 parameters, 5 given in %s on line %d +bool(false) + +-- Testing mb_stristr() function with less than expected no. of arguments -- + +Warning: mb_stristr() expects at least 2 parameters, 1 given in %s on line %d +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_stristr_error2.phpt b/ext/mbstring/tests/mb_stristr_error2.phpt new file mode 100644 index 0000000..73f13dc --- /dev/null +++ b/ext/mbstring/tests/mb_stristr_error2.phpt @@ -0,0 +1,35 @@ +--TEST-- +Test mb_stristr() function : error conditions +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_stristr') or die("skip mb_stristr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_stristr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds first occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_stristr() : error conditions ***\n"; + + +echo "\n-- Testing mb_stristr() with unknown encoding --\n"; +$haystack = b'Hello, world'; +$needle = b'world'; +$encoding = 'unknown-encoding'; +$part = true; +var_dump( mb_stristr($haystack, $needle, $part, $encoding) ); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_stristr() : error conditions *** + +-- Testing mb_stristr() with unknown encoding -- + +Warning: mb_stristr(): Unknown encoding "unknown-encoding" in %s on line %d +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_stristr_variation1.phpt b/ext/mbstring/tests/mb_stristr_variation1.phpt new file mode 100644 index 0000000..fc69bd0 --- /dev/null +++ b/ext/mbstring/tests/mb_stristr_variation1.phpt @@ -0,0 +1,208 @@ +--TEST-- +Test mb_stristr() function : usage variation - various haystacks, needle won't be found +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_stristr') or die("skip mb_stristr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_stristr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds first occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_stristr() : usage variation ***\n"; + +// Define error handler +function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { + if (error_reporting() != 0) { + // report non-silenced errors + echo "Error: $err_no - $err_msg, $filename($linenum)\n"; + } +} +set_error_handler('test_error_handler'); + +// Initialise function arguments not being substituted (if any) +$needle = b'string_val'; +$part = true; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// define some classes +class classWithToString +{ + public function __toString() { + return b"Class A object"; + } +} + +class classWithoutToString +{ +} + +// heredoc string +$heredoc = b<<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// add arrays +$index_array = array (1, 2, 3); +$assoc_array = array ('one' => 1, 'two' => 2); + +//array of values to iterate over +$inputs = array( + + // int data + 'int 0' => 0, + 'int 1' => 1, + 'int 12345' => 12345, + 'int -12345' => -2345, + + // float data + 'float 10.5' => 10.5, + 'float -10.5' => -10.5, + 'float 12.3456789000e10' => 12.3456789000e10, + 'float -12.3456789000e10' => -12.3456789000e10, + 'float .5' => .5, + + // array data + 'empty array' => array(), + 'int indexed array' => $index_array, + 'associative array' => $assoc_array, + 'nested arrays' => array('foo', $index_array, $assoc_array), + + // null data + 'uppercase NULL' => NULL, + 'lowercase null' => null, + + // boolean data + 'lowercase true' => true, + 'lowercase false' =>false, + 'uppercase TRUE' =>TRUE, + 'uppercase FALSE' =>FALSE, + + // empty data + 'empty string DQ' => "", + 'empty string SQ' => '', + + // object data + 'instance of classWithToString' => new classWithToString(), + 'instance of classWithoutToString' => new classWithoutToString(), + + // undefined data + 'undefined var' => @$undefined_var, + + // unset data + 'unset var' => @$unset_var, + + // resource variable + 'resource' => $fp +); + +// loop through each element of the array for haystack + +foreach($inputs as $key =>$value) { + echo "\n--$key--\n"; + var_dump( mb_stristr($value, $needle, $part, $encoding) ); +}; + +fclose($fp); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_stristr() : usage variation *** + +--int 0-- +bool(false) + +--int 1-- +bool(false) + +--int 12345-- +bool(false) + +--int -12345-- +bool(false) + +--float 10.5-- +bool(false) + +--float -10.5-- +bool(false) + +--float 12.3456789000e10-- +bool(false) + +--float -12.3456789000e10-- +bool(false) + +--float .5-- +bool(false) + +--empty array-- +Error: 2 - mb_stristr() expects parameter 1 to be string, array given, %s(%d) +bool(false) + +--int indexed array-- +Error: 2 - mb_stristr() expects parameter 1 to be string, array given, %s(%d) +bool(false) + +--associative array-- +Error: 2 - mb_stristr() expects parameter 1 to be string, array given, %s(%d) +bool(false) + +--nested arrays-- +Error: 2 - mb_stristr() expects parameter 1 to be string, array given, %s(%d) +bool(false) + +--uppercase NULL-- +bool(false) + +--lowercase null-- +bool(false) + +--lowercase true-- +bool(false) + +--lowercase false-- +bool(false) + +--uppercase TRUE-- +bool(false) + +--uppercase FALSE-- +bool(false) + +--empty string DQ-- +bool(false) + +--empty string SQ-- +bool(false) + +--instance of classWithToString-- +bool(false) + +--instance of classWithoutToString-- +Error: 2 - mb_stristr() expects parameter 1 to be string, object given, %s(%d) +bool(false) + +--undefined var-- +bool(false) + +--unset var-- +bool(false) + +--resource-- +Error: 2 - mb_stristr() expects parameter 1 to be string, resource given, %s(%d) +bool(false) +===DONE=== + diff --git a/ext/mbstring/tests/mb_stristr_variation2.phpt b/ext/mbstring/tests/mb_stristr_variation2.phpt new file mode 100644 index 0000000..bfa1835 --- /dev/null +++ b/ext/mbstring/tests/mb_stristr_variation2.phpt @@ -0,0 +1,216 @@ +--TEST-- +Test mb_stristr() function : usage variation - different types of needle. +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_stristr') or die("skip mb_stristr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_stristr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds first occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_stristr() : usage variation ***\n"; + +// Define error handler +function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { + if (error_reporting() != 0) { + // report non-silenced errors + echo "Error: $err_no - $err_msg, $filename($linenum)\n"; + } +} +set_error_handler('test_error_handler'); + +// Initialise function arguments not being substituted (if any) +$haystack = b'string_val'; +$part = true; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// define some classes +class classWithToString +{ + public function __toString() { + return b"Class A object"; + } +} + +class classWithoutToString +{ +} + +// heredoc string +$heredoc = b<<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// add arrays +$index_array = array (1, 2, 3); +$assoc_array = array ('one' => 1, 'two' => 2); + +//array of values to iterate over +$inputs = array( + + // int data + 'int 0' => 0, + 'int 1' => 1, + 'int 12345' => 12345, + 'int -12345' => -2345, + + // float data + 'float 10.5' => 10.5, + 'float -10.5' => -10.5, + 'float 12.3456789000e10' => 12.3456789000e10, + 'float -12.3456789000e10' => -12.3456789000e10, + 'float .5' => .5, + + // array data + 'empty array' => array(), + 'int indexed array' => $index_array, + 'associative array' => $assoc_array, + 'nested arrays' => array('foo', $index_array, $assoc_array), + + // null data + 'uppercase NULL' => NULL, + 'lowercase null' => null, + + // boolean data + 'lowercase true' => true, + 'lowercase false' =>false, + 'uppercase TRUE' =>TRUE, + 'uppercase FALSE' =>FALSE, + + // empty data + 'empty string DQ' => "", + 'empty string SQ' => '', + + // object data + 'instance of classWithToString' => new classWithToString(), + 'instance of classWithoutToString' => new classWithoutToString(), + + // undefined data + 'undefined var' => @$undefined_var, + + // unset data + 'unset var' => @$unset_var, + + // resource variable + 'resource' => $fp +); + +// loop through each element of the array for needle + +foreach($inputs as $key =>$value) { + echo "\n--$key--\n"; + var_dump( mb_stristr($haystack, $value, $part, $encoding) ); +}; + +fclose($fp); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_stristr() : usage variation *** + +--int 0-- +bool(false) + +--int 1-- +bool(false) + +--int 12345-- +bool(false) + +--int -12345-- +bool(false) + +--float 10.5-- +bool(false) + +--float -10.5-- +bool(false) + +--float 12.3456789000e10-- +bool(false) + +--float -12.3456789000e10-- +bool(false) + +--float .5-- +bool(false) + +--empty array-- +Error: 2 - mb_stristr() expects parameter 2 to be string, array given, %s(%d) +bool(false) + +--int indexed array-- +Error: 2 - mb_stristr() expects parameter 2 to be string, array given, %s(%d) +bool(false) + +--associative array-- +Error: 2 - mb_stristr() expects parameter 2 to be string, array given, %s(%d) +bool(false) + +--nested arrays-- +Error: 2 - mb_stristr() expects parameter 2 to be string, array given, %s(%d) +bool(false) + +--uppercase NULL-- +Error: 2 - mb_stristr(): Empty delimiter, %s(%d) +bool(false) + +--lowercase null-- +Error: 2 - mb_stristr(): Empty delimiter, %s(%d) +bool(false) + +--lowercase true-- +bool(false) + +--lowercase false-- +Error: 2 - mb_stristr(): Empty delimiter, %s(%d) +bool(false) + +--uppercase TRUE-- +bool(false) + +--uppercase FALSE-- +Error: 2 - mb_stristr(): Empty delimiter, %s(%d) +bool(false) + +--empty string DQ-- +Error: 2 - mb_stristr(): Empty delimiter, %s(%d) +bool(false) + +--empty string SQ-- +Error: 2 - mb_stristr(): Empty delimiter, %s(%d) +bool(false) + +--instance of classWithToString-- +bool(false) + +--instance of classWithoutToString-- +Error: 2 - mb_stristr() expects parameter 2 to be string, object given, %s(%d) +bool(false) + +--undefined var-- +Error: 2 - mb_stristr(): Empty delimiter, %s(%d) +bool(false) + +--unset var-- +Error: 2 - mb_stristr(): Empty delimiter, %s(%d) +bool(false) + +--resource-- +Error: 2 - mb_stristr() expects parameter 2 to be string, resource given, %s(%d) +bool(false) +===DONE=== + diff --git a/ext/mbstring/tests/mb_stristr_variation3.phpt b/ext/mbstring/tests/mb_stristr_variation3.phpt new file mode 100644 index 0000000..30a7e49 --- /dev/null +++ b/ext/mbstring/tests/mb_stristr_variation3.phpt @@ -0,0 +1,232 @@ +--TEST-- +Test mb_stristr() function : usage variation - different values for part +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_stristr') or die("skip mb_stristr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_stristr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds first occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_stristr() : usage variation ***\n"; + +// Define error handler +function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { + if (error_reporting() != 0) { + // report non-silenced errors + echo "Error: $err_no - $err_msg, $filename($linenum)\n"; + } +} +set_error_handler('test_error_handler'); + +// Initialise function arguments not being substituted (if any) +$haystack = b'string_val'; +$needle = b'_'; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// define some classes +class classWithToString +{ + public function __toString() { + return b"Class A object"; + } +} + +class classWithoutToString +{ +} + +// heredoc string +$heredoc = b<<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// add arrays +$index_array = array (1, 2, 3); +$assoc_array = array ('one' => 1, 'two' => 2); + +//array of values to iterate over +$inputs = array( + + // int data + 'int 0' => 0, + 'int 1' => 1, + 'int 12345' => 12345, + 'int -12345' => -2345, + + // float data + 'float 10.5' => 10.5, + 'float -10.5' => -10.5, + 'float 12.3456789000e10' => 12.3456789000e10, + 'float -12.3456789000e10' => -12.3456789000e10, + 'float .5' => .5, + + // array data + 'empty array' => array(), + 'int indexed array' => $index_array, + 'associative array' => $assoc_array, + 'nested arrays' => array('foo', $index_array, $assoc_array), + + // null data + 'uppercase NULL' => NULL, + 'lowercase null' => null, + + // boolean data + 'lowercase true' => true, + 'lowercase false' =>false, + 'uppercase TRUE' =>TRUE, + 'uppercase FALSE' =>FALSE, + + // empty data + 'empty string DQ' => "", + 'empty string SQ' => '', + + // string data + 'string DQ' => "string", + 'string SQ' => 'string', + 'mixed case string' => "sTrInG", + 'heredoc' => $heredoc, + + // object data + 'instance of classWithToString' => new classWithToString(), + 'instance of classWithoutToString' => new classWithoutToString(), + + // undefined data + 'undefined var' => @$undefined_var, + + // unset data + 'unset var' => @$unset_var, + + // resource variable + 'resource' => $fp +); + +// loop through each element of the array for part + +foreach($inputs as $key =>$value) { + echo "\n--$key--\n"; + $res = mb_stristr($haystack, $needle, $value, $encoding); + if ($res === false) { + var_dump($res); + } + else { + var_dump(bin2hex($res)); + } +}; + +fclose($fp); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_stristr() : usage variation *** + +--int 0-- +string(8) "5f76616c" + +--int 1-- +string(12) "737472696e67" + +--int 12345-- +string(12) "737472696e67" + +--int -12345-- +string(12) "737472696e67" + +--float 10.5-- +string(12) "737472696e67" + +--float -10.5-- +string(12) "737472696e67" + +--float 12.3456789000e10-- +string(12) "737472696e67" + +--float -12.3456789000e10-- +string(12) "737472696e67" + +--float .5-- +string(12) "737472696e67" + +--empty array-- +Error: 2 - mb_stristr() expects parameter 3 to be boolean, array given, %s(%d) +bool(false) + +--int indexed array-- +Error: 2 - mb_stristr() expects parameter 3 to be boolean, array given, %s(%d) +bool(false) + +--associative array-- +Error: 2 - mb_stristr() expects parameter 3 to be boolean, array given, %s(%d) +bool(false) + +--nested arrays-- +Error: 2 - mb_stristr() expects parameter 3 to be boolean, array given, %s(%d) +bool(false) + +--uppercase NULL-- +string(8) "5f76616c" + +--lowercase null-- +string(8) "5f76616c" + +--lowercase true-- +string(12) "737472696e67" + +--lowercase false-- +string(8) "5f76616c" + +--uppercase TRUE-- +string(12) "737472696e67" + +--uppercase FALSE-- +string(8) "5f76616c" + +--empty string DQ-- +string(8) "5f76616c" + +--empty string SQ-- +string(8) "5f76616c" + +--string DQ-- +string(12) "737472696e67" + +--string SQ-- +string(12) "737472696e67" + +--mixed case string-- +string(12) "737472696e67" + +--heredoc-- +string(12) "737472696e67" + +--instance of classWithToString-- +Error: 2 - mb_stristr() expects parameter 3 to be boolean, object given, %s(%d) +bool(false) + +--instance of classWithoutToString-- +Error: 2 - mb_stristr() expects parameter 3 to be boolean, object given, %s(%d) +bool(false) + +--undefined var-- +string(8) "5f76616c" + +--unset var-- +string(8) "5f76616c" + +--resource-- +Error: 2 - mb_stristr() expects parameter 3 to be boolean, resource given, %s(%d) +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_stristr_variation4.phpt b/ext/mbstring/tests/mb_stristr_variation4.phpt new file mode 100644 index 0000000..d547543 --- /dev/null +++ b/ext/mbstring/tests/mb_stristr_variation4.phpt @@ -0,0 +1,227 @@ +--TEST-- +Test mb_stristr() function : usage variation - different encoding types +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_stristr') or die("skip mb_stristr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_stristr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds first occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_stristr() : usage variation ***\n"; + +// Define error handler +function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { + if (error_reporting() != 0) { + // report non-silenced errors + echo "Error: $err_no - $err_msg, $filename($linenum)\n"; + } +} +set_error_handler('test_error_handler'); + +// Initialise function arguments not being substituted (if any) +$haystack = b'string_val'; +$needle = b'_'; +$part = true; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// define some classes +class classWithToString +{ + public function __toString() { + return "invalid"; + } +} + +class classWithoutToString +{ +} + +// heredoc string +$heredoc = <<<EOT +utf-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// add arrays +$index_array = array (1, 2, 3); +$assoc_array = array ('one' => 1, 'two' => 2); + +//array of values to iterate over +$inputs = array( + + // int data + 'int 0' => 0, + 'int 1' => 1, + 'int 12345' => 12345, + 'int -12345' => -2345, + + // float data + 'float 10.5' => 10.5, + 'float -10.5' => -10.5, + 'float 12.3456789000e10' => 12.3456789000e10, + 'float -12.3456789000e10' => -12.3456789000e10, + 'float .5' => .5, + + // array data + 'empty array' => array(), + 'int indexed array' => $index_array, + 'associative array' => $assoc_array, + 'nested arrays' => array('foo', $index_array, $assoc_array), + + // null data + 'uppercase NULL' => NULL, + 'lowercase null' => null, + + // boolean data + 'lowercase true' => true, + 'lowercase false' =>false, + 'uppercase TRUE' =>TRUE, + 'uppercase FALSE' =>FALSE, + + // empty data + 'empty string DQ' => "", + 'empty string SQ' => '', + + // object data + 'instance of classWithToString' => new classWithToString(), + 'instance of classWithoutToString' => new classWithoutToString(), + + // undefined data + 'undefined var' => @$undefined_var, + + // unset data + 'unset var' => @$unset_var, + + // resource variable + 'resource' => $fp +); + +// loop through each element of the array for encoding + +foreach($inputs as $key =>$value) { + echo "\n--$key--\n"; + var_dump( mb_stristr($haystack, $needle, $part, $value) ); +}; + +fclose($fp); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_stristr() : usage variation *** + +--int 0-- +Error: 2 - mb_stristr(): Unknown encoding "0", %s(%d) +bool(false) + +--int 1-- +Error: 2 - mb_stristr(): Unknown encoding "1", %s(%d) +bool(false) + +--int 12345-- +Error: 2 - mb_stristr(): Unknown encoding "12345", %s(%d) +bool(false) + +--int -12345-- +Error: 2 - mb_stristr(): Unknown encoding "-2345", %s(%d) +bool(false) + +--float 10.5-- +Error: 2 - mb_stristr(): Unknown encoding "10.5", %s(%d) +bool(false) + +--float -10.5-- +Error: 2 - mb_stristr(): Unknown encoding "-10.5", %s(%d) +bool(false) + +--float 12.3456789000e10-- +Error: 2 - mb_stristr(): Unknown encoding "123456789000", %s(%d) +bool(false) + +--float -12.3456789000e10-- +Error: 2 - mb_stristr(): Unknown encoding "-123456789000", %s(%d) +bool(false) + +--float .5-- +Error: 2 - mb_stristr(): Unknown encoding "0.5", %s(%d) +bool(false) + +--empty array-- +Error: 2 - mb_stristr() expects parameter 4 to be string, array given, %s(%d) +bool(false) + +--int indexed array-- +Error: 2 - mb_stristr() expects parameter 4 to be string, array given, %s(%d) +bool(false) + +--associative array-- +Error: 2 - mb_stristr() expects parameter 4 to be string, array given, %s(%d) +bool(false) + +--nested arrays-- +Error: 2 - mb_stristr() expects parameter 4 to be string, array given, %s(%d) +bool(false) + +--uppercase NULL-- +Error: 2 - mb_stristr(): Unknown encoding "", %s(%d) +bool(false) + +--lowercase null-- +Error: 2 - mb_stristr(): Unknown encoding "", %s(%d) +bool(false) + +--lowercase true-- +Error: 2 - mb_stristr(): Unknown encoding "1", %s(%d) +bool(false) + +--lowercase false-- +Error: 2 - mb_stristr(): Unknown encoding "", %s(%d) +bool(false) + +--uppercase TRUE-- +Error: 2 - mb_stristr(): Unknown encoding "1", %s(%d) +bool(false) + +--uppercase FALSE-- +Error: 2 - mb_stristr(): Unknown encoding "", %s(%d) +bool(false) + +--empty string DQ-- +Error: 2 - mb_stristr(): Unknown encoding "", %s(%d) +bool(false) + +--empty string SQ-- +Error: 2 - mb_stristr(): Unknown encoding "", %s(%d) +bool(false) + +--instance of classWithToString-- +Error: 2 - mb_stristr(): Unknown encoding "invalid", %s(%d) +bool(false) + +--instance of classWithoutToString-- +Error: 2 - mb_stristr() expects parameter 4 to be string, object given, %s(%d) +bool(false) + +--undefined var-- +Error: 2 - mb_stristr(): Unknown encoding "", %s(%d) +bool(false) + +--unset var-- +Error: 2 - mb_stristr(): Unknown encoding "", %s(%d) +bool(false) + +--resource-- +Error: 2 - mb_stristr() expects parameter 4 to be string, resource given, %s(%d) +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_stristr_variation5.phpt b/ext/mbstring/tests/mb_stristr_variation5.phpt new file mode 100644 index 0000000..5d54820 --- /dev/null +++ b/ext/mbstring/tests/mb_stristr_variation5.phpt @@ -0,0 +1,69 @@ +--TEST-- +Test mb_stristr() function : usage variation - multiple needles +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_stristr') or die("skip mb_stristr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_stristr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds first occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_stristr() : basic functionality ***\n"; + +mb_internal_encoding('UTF-8'); + +//ascii mixed case, multiple needles +$string_ascii = b'abcDef zBcDyx'; +$needle_ascii_upper = b"BCD"; +$needle_ascii_mixed = b"bCd"; +$needle_ascii_lower = b"bcd"; + +//Greek string in mixed case UTF-8 with multiple needles +$string_mb = base64_decode('zrrOu868zr3Ovs6fzqDOoSDOus67zpzOnc6+zr/OoA=='); +$needle_mb_upper = base64_decode('zpzOnc6ezp8='); +$needle_mb_lower = base64_decode('zrzOvc6+zr8='); +$needle_mb_mixed = base64_decode('zpzOnc6+zr8='); + +echo "\n-- ASCII string: needle exists --\n"; +var_dump(bin2hex(mb_stristr($string_ascii, $needle_ascii_upper, false))); +var_dump(bin2hex(mb_stristr($string_ascii, $needle_ascii_upper, true))); +var_dump(bin2hex(mb_stristr($string_ascii, $needle_ascii_lower, false))); +var_dump(bin2hex(mb_stristr($string_ascii, $needle_ascii_lower, true))); +var_dump(bin2hex(mb_stristr($string_ascii, $needle_ascii_mixed, false))); +var_dump(bin2hex(mb_stristr($string_ascii, $needle_ascii_mixed, true))); + + +echo "\n-- Multibyte string: needle exists --\n"; +var_dump(bin2hex(mb_stristr($string_mb, $needle_mb_upper, false))); +var_dump(bin2hex(mb_stristr($string_mb, $needle_mb_upper, true))); +var_dump(bin2hex(mb_stristr($string_mb, $needle_mb_lower, false))); +var_dump(bin2hex(mb_stristr($string_mb, $needle_mb_lower, true))); +var_dump(bin2hex(mb_stristr($string_mb, $needle_mb_mixed, false))); +var_dump(bin2hex(mb_stristr($string_mb, $needle_mb_mixed, true))); + +?> +===DONE=== +--EXPECT-- +*** Testing mb_stristr() : basic functionality *** + +-- ASCII string: needle exists -- +string(24) "6263446566207a4263447978" +string(2) "61" +string(24) "6263446566207a4263447978" +string(2) "61" +string(24) "6263446566207a4263447978" +string(2) "61" + +-- Multibyte string: needle exists -- +string(54) "cebccebdcebece9fcea0cea120cebacebbce9cce9dcebecebfcea0" +string(8) "cebacebb" +string(54) "cebccebdcebece9fcea0cea120cebacebbce9cce9dcebecebfcea0" +string(8) "cebacebb" +string(54) "cebccebdcebece9fcea0cea120cebacebbce9cce9dcebecebfcea0" +string(8) "cebacebb" +===DONE=== diff --git a/ext/mbstring/tests/mb_strlen.phpt b/ext/mbstring/tests/mb_strlen.phpt new file mode 100644 index 0000000..97c09a7 --- /dev/null +++ b/ext/mbstring/tests/mb_strlen.phpt @@ -0,0 +1,101 @@ +--TEST-- +mb_strlen() +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.func_overload=0 +--FILE-- +<?php +// TODO: Add more encodings + +//$debug=true; +ini_set('include_path', dirname(__FILE__)); +include_once('common.inc'); + +// restore detect_order to 'auto' +mb_detect_order('auto'); + +// Test string +$euc_jp = '0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£0123ÆüËܸì¤ÏÌÌÅݽ¤¤¡£'; +$ascii = 'abcdefghijklmnopqrstuvwxyz;]=#0123456789'; + +// ASCII +echo "== ASCII ==\n"; +print mb_strlen($ascii,'ASCII') . "\n"; +print strlen($ascii) . "\n"; + +// EUC-JP +echo "== EUC-JP ==\n"; +print mb_strlen($euc_jp,'EUC-JP') . "\n"; +mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n"); +print strlen($euc_jp) . "\n"; + +// SJIS +echo "== SJIS ==\n"; +$sjis = mb_convert_encoding($euc_jp, 'SJIS','EUC-JP'); +print mb_strlen($sjis,'SJIS') . "\n"; +mb_internal_encoding('SJIS') or print("mb_internal_encoding() failed\n"); +print strlen($sjis) . "\n"; + +// JIS +// Note: either convert_encoding or strlen has problem +echo "== JIS ==\n"; +$jis = mb_convert_encoding($euc_jp, 'JIS','EUC-JP'); +print mb_strlen($jis,'JIS') . "\n"; +mb_internal_encoding('JIS') or print("mb_internal_encoding() failed\n"); +print strlen($jis) . "\n"; + +// UTF-8 +// Note: either convert_encoding or strlen has problem +echo "== UTF-8 ==\n"; +$utf8 = mb_convert_encoding($euc_jp, 'UTF-8','EUC-JP'); +print mb_strlen($utf8,'UTF-8') . "\n"; +mb_internal_encoding('UTF-8') or print("mb_internal_encoding() failed\n"); +print strlen($utf8) . "\n"; + + +// Wrong Parameters +echo "== WRONG PARAMETERS ==\n"; +// Array +// Note: PHP Warning, strlen() expects parameter 1 to be string, array given +$r = strlen($t_ary); +echo $r."\n"; +// Object +// Note: PHP Warning, strlen() expects parameter 1 to be string, object given +$r = strlen($t_obj); +echo $r."\n"; +// Wrong encoding +mb_internal_encoding('EUC-JP'); +$r = mb_strlen($euc_jp, 'BAD_NAME'); +echo $r."\n"; + + + + +?> + +--EXPECT-- +== ASCII == +40 +40 +== EUC-JP == +43 +72 +== SJIS == +43 +72 +== JIS == +43 +90 +== UTF-8 == +43 +101 +== WRONG PARAMETERS == +ERR: Warning + +ERR: Warning + +ERR: Warning + + + diff --git a/ext/mbstring/tests/mb_strlen_basic.phpt b/ext/mbstring/tests/mb_strlen_basic.phpt new file mode 100644 index 0000000..a5dbe51 --- /dev/null +++ b/ext/mbstring/tests/mb_strlen_basic.phpt @@ -0,0 +1,43 @@ +--TEST-- +Test mb_strlen() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strlen') or die("skip mb_strlen() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strlen(string $str [, string $encoding]) + * Description: Get character numbers of a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test basic functionality of mb_strlen() + */ + +echo "*** Testing mb_strlen() : basic functionality***\n"; + +$string_ascii = b'abc def'; +//Japanese string in UTF-8 +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); + +echo "\n-- ASCII String --\n"; +var_dump(mb_strlen($string_ascii)); + +echo "\n-- Multibyte String --\n"; +var_dump(mb_strlen($string_mb, 'UTF-8')); + +echo "\nDone"; +?> + +--EXPECTF-- +*** Testing mb_strlen() : basic functionality*** + +-- ASCII String -- +int(7) + +-- Multibyte String -- +int(21) + +Done diff --git a/ext/mbstring/tests/mb_strlen_error1.phpt b/ext/mbstring/tests/mb_strlen_error1.phpt new file mode 100644 index 0000000..8fcd87e --- /dev/null +++ b/ext/mbstring/tests/mb_strlen_error1.phpt @@ -0,0 +1,46 @@ +--TEST-- +Test mb_strlen() function : error conditions - pass incorrect number of args +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strlen') or die("skip mb_strlen() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strlen(string $str [, string $encoding]) + * Description: Get character numbers of a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass mb_strlen an incorrect number of arguments to test behaviour + */ + +echo "*** Testing mb_strlen() : error conditions ***\n"; + +// Zero arguments +echo "\n-- Testing mb_strlen() function with Zero arguments --\n"; +var_dump( mb_strlen() ); + +//Test mb_strlen with one more than the expected number of arguments +echo "\n-- Testing mb_strlen() function with more than expected no. of arguments --\n"; +$str = 'string_val'; +$encoding = 'string_val'; +$extra_arg = 10; +var_dump( mb_strlen($str, $encoding, $extra_arg) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strlen() : error conditions *** + +-- Testing mb_strlen() function with Zero arguments -- + +Warning: mb_strlen() expects at least 1 parameter, 0 given in %s on line %d +bool(false) + +-- Testing mb_strlen() function with more than expected no. of arguments -- + +Warning: mb_strlen() expects at most 2 parameters, 3 given in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_strlen_error2.phpt b/ext/mbstring/tests/mb_strlen_error2.phpt new file mode 100644 index 0000000..a530a84 --- /dev/null +++ b/ext/mbstring/tests/mb_strlen_error2.phpt @@ -0,0 +1,34 @@ +--TEST-- +Test mb_strlen() function : error conditions - pass an unknown encoding +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strlen') or die("skip mb_strlen() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strlen(string $str [, string $encoding]) + * Description: Get character numbers of a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test mb_strlen when passed an unknown encoding + */ + +echo "*** Testing mb_strlen() : error ***\n"; + +$string = 'abcdef'; + +$encoding = 'unknown-encoding'; + +var_dump(mb_strlen($string, $encoding)); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strlen() : error *** + +Warning: mb_strlen(): Unknown encoding "unknown-encoding" in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_strlen_variation1.phpt b/ext/mbstring/tests/mb_strlen_variation1.phpt new file mode 100644 index 0000000..3c9cfe3 --- /dev/null +++ b/ext/mbstring/tests/mb_strlen_variation1.phpt @@ -0,0 +1,180 @@ +--TEST-- +Test mb_strlen() function : usage variations - Pass different data types as $str arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strlen') or die("skip mb_strlen() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strlen(string $str [, string $encoding]) + * Description: Get character numbers of a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test mb_strlen by passing different data types as $str argument + */ + +echo "*** Testing mb_strlen() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return b"Class A object"; + } +} + +// heredoc string +$heredoc = b<<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $str argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ b"string", + b'string', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_strlen() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_strlen($input, $encoding)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strlen() : usage variations *** + +-- Iteration 1 -- +int(1) + +-- Iteration 2 -- +int(1) + +-- Iteration 3 -- +int(5) + +-- Iteration 4 -- +int(5) + +-- Iteration 5 -- +int(4) + +-- Iteration 6 -- +int(5) + +-- Iteration 7 -- +int(12) + +-- Iteration 8 -- +int(13) + +-- Iteration 9 -- +int(3) + +-- Iteration 10 -- +int(0) + +-- Iteration 11 -- +int(0) + +-- Iteration 12 -- +int(1) + +-- Iteration 13 -- +int(0) + +-- Iteration 14 -- +int(1) + +-- Iteration 15 -- +int(0) + +-- Iteration 16 -- +int(0) + +-- Iteration 17 -- +int(0) + +-- Iteration 18 -- +int(6) + +-- Iteration 19 -- +int(6) + +-- Iteration 20 -- +int(11) + +-- Iteration 21 -- +int(14) + +-- Iteration 22 -- +int(0) + +-- Iteration 23 -- +int(0) + +-- Iteration 24 -- + +Warning: mb_strlen() expects parameter 1 to be string, resource given in %s on line %d +bool(false) +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_strlen_variation2.phpt b/ext/mbstring/tests/mb_strlen_variation2.phpt new file mode 100644 index 0000000..8504bbc --- /dev/null +++ b/ext/mbstring/tests/mb_strlen_variation2.phpt @@ -0,0 +1,220 @@ +--TEST-- +Test mb_strlen() function : usage variations - Pass different data types as $encoding arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strlen') or die("skip mb_strlen() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strlen(string $str [, string $encoding]) + * Description: Get character numbers of a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test mb_strlen() by passing different data types as $encoding argument. + * Where possible 'UTF-8' has been entered as a string value + */ + +echo "*** Testing mb_strlen() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$str = 'string value'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "UTF-8"; + } +} + +// heredoc string +$heredoc = <<<EOT +UTF-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $input argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "UTF-8", + 'UTF-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_strlen() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_strlen($str, $input)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_strlen() : usage variations *** + +-- Iteration 1 -- + +Warning: mb_strlen(): Unknown encoding "0" in %s on line %d +bool(false) + +-- Iteration 2 -- + +Warning: mb_strlen(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 3 -- + +Warning: mb_strlen(): Unknown encoding "12345" in %s on line %d +bool(false) + +-- Iteration 4 -- + +Warning: mb_strlen(): Unknown encoding "-2345" in %s on line %d +bool(false) + +-- Iteration 5 -- + +Warning: mb_strlen(): Unknown encoding "10.5" in %s on line %d +bool(false) + +-- Iteration 6 -- + +Warning: mb_strlen(): Unknown encoding "-10.5" in %s on line %d +bool(false) + +-- Iteration 7 -- + +Warning: mb_strlen(): Unknown encoding "123456789000" in %s on line %d +bool(false) + +-- Iteration 8 -- + +Warning: mb_strlen(): Unknown encoding "1.23456789E-9" in %s on line %d +bool(false) + +-- Iteration 9 -- + +Warning: mb_strlen(): Unknown encoding "0.5" in %s on line %d +bool(false) + +-- Iteration 10 -- + +Warning: mb_strlen(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 11 -- + +Warning: mb_strlen(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 12 -- + +Warning: mb_strlen(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 13 -- + +Warning: mb_strlen(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 14 -- + +Warning: mb_strlen(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 15 -- + +Warning: mb_strlen(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 16 -- + +Warning: mb_strlen(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 17 -- + +Warning: mb_strlen(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 18 -- +int(12) + +-- Iteration 19 -- +int(12) + +-- Iteration 20 -- +int(12) + +-- Iteration 21 -- +int(12) + +-- Iteration 22 -- + +Warning: mb_strlen(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 23 -- + +Warning: mb_strlen(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 24 -- + +Warning: mb_strlen() expects parameter 2 to be string, resource given in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_strlen_variation3.phpt b/ext/mbstring/tests/mb_strlen_variation3.phpt new file mode 100644 index 0000000..efa11ad --- /dev/null +++ b/ext/mbstring/tests/mb_strlen_variation3.phpt @@ -0,0 +1,445 @@ +--TEST-- +Test mb_strlen() function : usage variations - Pass list of encodings +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strlen') or die("skip mb_strlen() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strlen(string $str [, string $encoding]) + * Description: Get character numbers of a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass all encodings listed on php.net to mb_strlen to test that function recognises them + * NB: The strings passed are *NOT* necessarily encoded in the encoding passed to the function. + * This test is purely to see whether the function recognises the encoding. + */ + +echo "*** Testing mb_strlen() : usage variations ***\n"; + +$encoding = array('UCS-4', /*1*/ + 'UCS-4BE', + 'UCS-4LE', + 'UCS-2', + 'UCS-2BE', /*5*/ + 'UCS-2LE', + 'UTF-32', + 'UTF-32BE', + 'UTF-32LE', + 'UTF-16', /*10*/ + 'UTF-16BE', + 'UTF-16LE', + 'UTF-7', + 'UTF7-IMAP', + 'UTF-8', /*15*/ + 'ASCII', + 'EUC-JP', + 'SJIS', + 'eucJP-win', + 'SJIS-win', /*20*/ + 'ISO-2022-JP', + 'JIS', + 'ISO-8859-1', + 'ISO-8859-2', + 'ISO-8859-3', /*25*/ + 'ISO-8859-4', + 'ISO-8859-5', + 'ISO-8859-6', + 'ISO-8859-7', + 'ISO-8859-8', /*30*/ + 'ISO-8859-9', + 'ISO-8859-10', + 'ISO-8859-13', + 'ISO-8859-14', + 'ISO-8859-15', /*35*/ + 'byte2be', + 'byte2le', + 'byte4be', + 'byte4le', + 'BASE64', /*40*/ + 'HTML-ENTITIES', + '7bit', + '8bit', + 'EUC-CN', + 'CP936', /*45*/ + 'HZ', + 'EUC-TW', + 'CP950', + 'BIG-5', + 'EUC-KR', /*50*/ + 'UHC', + 'ISO-2022-KR', + 'Windows-1251', + 'Windows-1252', + 'CP866', /*55*/ + 'KOI8-R'); /*56*/ + + + +$iterator = 1; +$string_ascii = 'abc def'; +$string_mb = base64_decode('44K/44OT44Ol44Os44O844OG44Kj44Oz44Kw44O744Oe44K344O844Oz44O744Kr44Oz44OR44OL44O8'); + +foreach($encoding as $enc) { + echo "\n-- Iteration $iterator: $enc --\n"; + + echo "-- ASCII String --\n"; + if(mb_strlen($string_ascii, $enc)) { + echo "Encoding $enc recognised\n"; + } else { + echo "Encoding $enc not recognised\n"; + } + + echo "-- Multibyte String --\n"; + if(mb_strlen($string_mb, $enc)){ + echo "Encoding $enc recognised\n"; + } else { + echo "Encoding $enc not recognised\n"; + } + $iterator++; +} + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strlen() : usage variations *** + +-- Iteration 1: UCS-4 -- +-- ASCII String -- +Encoding UCS-4 recognised +-- Multibyte String -- +Encoding UCS-4 recognised + +-- Iteration 2: UCS-4BE -- +-- ASCII String -- +Encoding UCS-4BE recognised +-- Multibyte String -- +Encoding UCS-4BE recognised + +-- Iteration 3: UCS-4LE -- +-- ASCII String -- +Encoding UCS-4LE recognised +-- Multibyte String -- +Encoding UCS-4LE recognised + +-- Iteration 4: UCS-2 -- +-- ASCII String -- +Encoding UCS-2 recognised +-- Multibyte String -- +Encoding UCS-2 recognised + +-- Iteration 5: UCS-2BE -- +-- ASCII String -- +Encoding UCS-2BE recognised +-- Multibyte String -- +Encoding UCS-2BE recognised + +-- Iteration 6: UCS-2LE -- +-- ASCII String -- +Encoding UCS-2LE recognised +-- Multibyte String -- +Encoding UCS-2LE recognised + +-- Iteration 7: UTF-32 -- +-- ASCII String -- +Encoding UTF-32 recognised +-- Multibyte String -- +Encoding UTF-32 recognised + +-- Iteration 8: UTF-32BE -- +-- ASCII String -- +Encoding UTF-32BE recognised +-- Multibyte String -- +Encoding UTF-32BE recognised + +-- Iteration 9: UTF-32LE -- +-- ASCII String -- +Encoding UTF-32LE recognised +-- Multibyte String -- +Encoding UTF-32LE recognised + +-- Iteration 10: UTF-16 -- +-- ASCII String -- +Encoding UTF-16 recognised +-- Multibyte String -- +Encoding UTF-16 recognised + +-- Iteration 11: UTF-16BE -- +-- ASCII String -- +Encoding UTF-16BE recognised +-- Multibyte String -- +Encoding UTF-16BE recognised + +-- Iteration 12: UTF-16LE -- +-- ASCII String -- +Encoding UTF-16LE recognised +-- Multibyte String -- +Encoding UTF-16LE recognised + +-- Iteration 13: UTF-7 -- +-- ASCII String -- +Encoding UTF-7 recognised +-- Multibyte String -- +Encoding UTF-7 recognised + +-- Iteration 14: UTF7-IMAP -- +-- ASCII String -- +Encoding UTF7-IMAP recognised +-- Multibyte String -- +Encoding UTF7-IMAP recognised + +-- Iteration 15: UTF-8 -- +-- ASCII String -- +Encoding UTF-8 recognised +-- Multibyte String -- +Encoding UTF-8 recognised + +-- Iteration 16: ASCII -- +-- ASCII String -- +Encoding ASCII recognised +-- Multibyte String -- +Encoding ASCII recognised + +-- Iteration 17: EUC-JP -- +-- ASCII String -- +Encoding EUC-JP recognised +-- Multibyte String -- +Encoding EUC-JP recognised + +-- Iteration 18: SJIS -- +-- ASCII String -- +Encoding SJIS recognised +-- Multibyte String -- +Encoding SJIS recognised + +-- Iteration 19: eucJP-win -- +-- ASCII String -- +Encoding eucJP-win recognised +-- Multibyte String -- +Encoding eucJP-win recognised + +-- Iteration 20: SJIS-win -- +-- ASCII String -- +Encoding SJIS-win recognised +-- Multibyte String -- +Encoding SJIS-win recognised + +-- Iteration 21: ISO-2022-JP -- +-- ASCII String -- +Encoding ISO-2022-JP recognised +-- Multibyte String -- +Encoding ISO-2022-JP recognised + +-- Iteration 22: JIS -- +-- ASCII String -- +Encoding JIS recognised +-- Multibyte String -- +Encoding JIS recognised + +-- Iteration 23: ISO-8859-1 -- +-- ASCII String -- +Encoding ISO-8859-1 recognised +-- Multibyte String -- +Encoding ISO-8859-1 recognised + +-- Iteration 24: ISO-8859-2 -- +-- ASCII String -- +Encoding ISO-8859-2 recognised +-- Multibyte String -- +Encoding ISO-8859-2 recognised + +-- Iteration 25: ISO-8859-3 -- +-- ASCII String -- +Encoding ISO-8859-3 recognised +-- Multibyte String -- +Encoding ISO-8859-3 recognised + +-- Iteration 26: ISO-8859-4 -- +-- ASCII String -- +Encoding ISO-8859-4 recognised +-- Multibyte String -- +Encoding ISO-8859-4 recognised + +-- Iteration 27: ISO-8859-5 -- +-- ASCII String -- +Encoding ISO-8859-5 recognised +-- Multibyte String -- +Encoding ISO-8859-5 recognised + +-- Iteration 28: ISO-8859-6 -- +-- ASCII String -- +Encoding ISO-8859-6 recognised +-- Multibyte String -- +Encoding ISO-8859-6 recognised + +-- Iteration 29: ISO-8859-7 -- +-- ASCII String -- +Encoding ISO-8859-7 recognised +-- Multibyte String -- +Encoding ISO-8859-7 recognised + +-- Iteration 30: ISO-8859-8 -- +-- ASCII String -- +Encoding ISO-8859-8 recognised +-- Multibyte String -- +Encoding ISO-8859-8 recognised + +-- Iteration 31: ISO-8859-9 -- +-- ASCII String -- +Encoding ISO-8859-9 recognised +-- Multibyte String -- +Encoding ISO-8859-9 recognised + +-- Iteration 32: ISO-8859-10 -- +-- ASCII String -- +Encoding ISO-8859-10 recognised +-- Multibyte String -- +Encoding ISO-8859-10 recognised + +-- Iteration 33: ISO-8859-13 -- +-- ASCII String -- +Encoding ISO-8859-13 recognised +-- Multibyte String -- +Encoding ISO-8859-13 recognised + +-- Iteration 34: ISO-8859-14 -- +-- ASCII String -- +Encoding ISO-8859-14 recognised +-- Multibyte String -- +Encoding ISO-8859-14 recognised + +-- Iteration 35: ISO-8859-15 -- +-- ASCII String -- +Encoding ISO-8859-15 recognised +-- Multibyte String -- +Encoding ISO-8859-15 recognised + +-- Iteration 36: byte2be -- +-- ASCII String -- +Encoding byte2be recognised +-- Multibyte String -- +Encoding byte2be recognised + +-- Iteration 37: byte2le -- +-- ASCII String -- +Encoding byte2le recognised +-- Multibyte String -- +Encoding byte2le recognised + +-- Iteration 38: byte4be -- +-- ASCII String -- +Encoding byte4be recognised +-- Multibyte String -- +Encoding byte4be recognised + +-- Iteration 39: byte4le -- +-- ASCII String -- +Encoding byte4le recognised +-- Multibyte String -- +Encoding byte4le recognised + +-- Iteration 40: BASE64 -- +-- ASCII String -- +Encoding BASE64 recognised +-- Multibyte String -- +Encoding BASE64 recognised + +-- Iteration 41: HTML-ENTITIES -- +-- ASCII String -- +Encoding HTML-ENTITIES recognised +-- Multibyte String -- +Encoding HTML-ENTITIES recognised + +-- Iteration 42: 7bit -- +-- ASCII String -- +Encoding 7bit recognised +-- Multibyte String -- +Encoding 7bit recognised + +-- Iteration 43: 8bit -- +-- ASCII String -- +Encoding 8bit recognised +-- Multibyte String -- +Encoding 8bit recognised + +-- Iteration 44: EUC-CN -- +-- ASCII String -- +Encoding EUC-CN recognised +-- Multibyte String -- +Encoding EUC-CN recognised + +-- Iteration 45: CP936 -- +-- ASCII String -- +Encoding CP936 recognised +-- Multibyte String -- +Encoding CP936 recognised + +-- Iteration 46: HZ -- +-- ASCII String -- +Encoding HZ recognised +-- Multibyte String -- +Encoding HZ recognised + +-- Iteration 47: EUC-TW -- +-- ASCII String -- +Encoding EUC-TW recognised +-- Multibyte String -- +Encoding EUC-TW recognised + +-- Iteration 48: CP950 -- +-- ASCII String -- +Encoding CP950 recognised +-- Multibyte String -- +Encoding CP950 recognised + +-- Iteration 49: BIG-5 -- +-- ASCII String -- +Encoding BIG-5 recognised +-- Multibyte String -- +Encoding BIG-5 recognised + +-- Iteration 50: EUC-KR -- +-- ASCII String -- +Encoding EUC-KR recognised +-- Multibyte String -- +Encoding EUC-KR recognised + +-- Iteration 51: UHC -- +-- ASCII String -- +Encoding UHC recognised +-- Multibyte String -- +Encoding UHC recognised + +-- Iteration 52: ISO-2022-KR -- +-- ASCII String -- +Encoding ISO-2022-KR recognised +-- Multibyte String -- +Encoding ISO-2022-KR recognised + +-- Iteration 53: Windows-1251 -- +-- ASCII String -- +Encoding Windows-1251 recognised +-- Multibyte String -- +Encoding Windows-1251 recognised + +-- Iteration 54: Windows-1252 -- +-- ASCII String -- +Encoding Windows-1252 recognised +-- Multibyte String -- +Encoding Windows-1252 recognised + +-- Iteration 55: CP866 -- +-- ASCII String -- +Encoding CP866 recognised +-- Multibyte String -- +Encoding CP866 recognised + +-- Iteration 56: KOI8-R -- +-- ASCII String -- +Encoding KOI8-R recognised +-- Multibyte String -- +Encoding KOI8-R recognised +Done diff --git a/ext/mbstring/tests/mb_strpos.phpt b/ext/mbstring/tests/mb_strpos.phpt new file mode 100644 index 0000000..1d613e9 --- /dev/null +++ b/ext/mbstring/tests/mb_strpos.phpt @@ -0,0 +1,175 @@ +--TEST-- +mb_strpos() +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +// TODO: Add more encodings + +//$debug=true; +ini_set('include_path','.'); +include_once('common.inc'); + + +// Test string +$euc_jp = b'0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£0123ÆüËܸì¤ÏÌÌÅݽ¤¤¡£'; + +// EUC-JP - With encoding parameter +mb_internal_encoding('UTF-8') or print("mb_internal_encoding() failed\n"); + +echo "== POSITIVE OFFSET ==\n"; +print mb_strpos($euc_jp, b'ÆüËܸì', 0, 'EUC-JP') . "\n"; +print mb_strpos($euc_jp, b'0', 0, 'EUC-JP') . "\n"; +print mb_strpos($euc_jp, 3, 0, 'EUC-JP') . "\n"; +print mb_strpos($euc_jp, 0, 0, 'EUC-JP') . "\n"; +print mb_strpos($euc_jp, b'ÆüËܸì', 15, 'EUC-JP') . "\n"; +print mb_strpos($euc_jp, b'0', 15, 'EUC-JP') . "\n"; +print mb_strpos($euc_jp, 3, 15, 'EUC-JP') . "\n"; +print mb_strpos($euc_jp, 0, 15, 'EUC-JP') . "\n"; + +// Negative offset +// Note: PHP Warning - offset is negative. +// Note: For offset(-15). It does not return position of latter string. (ie the same result as -50) +echo "== NEGATIVE OFFSET ==\n"; +$r = mb_strpos($euc_jp, b'ÆüËܸì', -15, 'EUC-JP'); +($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n"; +$r = mb_strpos($euc_jp, b'0', -15, 'EUC-JP'); +($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n"; +$r = mb_strpos($euc_jp, 3, -15, 'EUC-JP'); +($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n"; +$r = mb_strpos($euc_jp, 0, -15, 'EUC-JP'); +($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n"; +$r = mb_strpos($euc_jp, b'ÆüËܸì', -50, 'EUC-JP'); +($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n"; +$r = mb_strpos($euc_jp, b'0', -50, 'EUC-JP'); +($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n"; +$r = mb_strpos($euc_jp, 3, -50, 'EUC-JP'); +($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n"; +$r = mb_strpos($euc_jp, 0, -50, 'EUC-JP'); +($r === FALSE) ? print "OK_NEGATIVE_OFFSET\n" : print "NG_NEGATIVE_OFFSET\n"; + +// Out of range - should return false +print ("== OUT OF RANGE ==\n"); +$r = mb_strpos($euc_jp, b'ÆüËܸì', 40, 'EUC-JP'); +($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n"; +$r = mb_strpos($euc_jp, b'0', 40, 'EUC-JP'); +($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n"; +$r = mb_strpos($euc_jp, 3, 40, 'EUC-JP'); +($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n"; +$r = mb_strpos($euc_jp, 0, 40, 'EUC-JP'); +($r === FALSE) ? print "OK_OUT_RANGE\n" : print "NG_OUT_RANGE\n"; +// Note: Returned NULL string +// echo gettype($r). ' val '. $r ."\n"; + + +// Non-existent +echo "== NON-EXISTENT ==\n"; +$r = mb_strpos($euc_jp, b'´Ú¹ñ¸ì', 0, 'EUC-JP'); +($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n"; +$r = mb_strpos($euc_jp, b"\n", 0, 'EUC-JP'); +($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n"; + + +// EUC-JP - No encoding parameter +echo "== NO ENCODING PARAMETER ==\n"; +mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n"); + +print mb_strpos($euc_jp, b'ÆüËܸì', 0) . "\n"; +print mb_strpos($euc_jp, b'0', 0) . "\n"; +print mb_strpos($euc_jp, 3, 0) . "\n"; +print mb_strpos($euc_jp, 0, 0) . "\n"; + +$r = mb_strpos($euc_jp, b'´Ú¹ñ¸ì', 0); +($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n"; +$r = mb_strpos($euc_jp, b"\n", 0); +($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n"; + +// EUC-JP - No offset and encoding parameter +echo "== NO OFFSET AND ENCODING PARAMETER ==\n"; +mb_internal_encoding('EUC-JP') or print("mb_internal_encoding() failed\n"); + +print mb_strpos($euc_jp, b'ÆüËܸì') . "\n"; +print mb_strpos($euc_jp, b'0') . "\n"; +print mb_strpos($euc_jp, 3) . "\n"; +print mb_strpos($euc_jp, 0) . "\n"; + +$r = mb_strpos($euc_jp, b'´Ú¹ñ¸ì'); +($r === FALSE) ? print "OK_STR\n" : print "NG_STR\n"; +$r = mb_strpos($euc_jp, b"\n"); +($r === FALSE) ? print "OK_NEWLINE\n" : print "NG_NEWLINE\n"; + + +// Invalid Parameters +echo "== INVALID PARAMETER TEST ==\n"; + +$r = mb_strpos($euc_jp,'','EUC-JP'); +($r === FALSE) ? print("OK_NULL\n") : print("NG_NULL\n"); +$r = mb_strpos($euc_jp, $t_ary, 'EUC-JP'); +($r === FALSE) ? print("OK_ARRAY\n") : print("NG_ARRAY\n"); +$r = mb_strpos($euc_jp, $t_obj, 'EUC-JP'); +($r === FALSE) ? print("OK_OBJECT\n") : print("NG_OBJECT\n"); +$r = mb_strpos($euc_jp, $t_obj, 'BAD_ENCODING'); +($r === FALSE) ? print("OK_BAD_ENCODING\n") : print("NG_BAD_ENCODING\n"); + + +?> + +--EXPECT-- +== POSITIVE OFFSET == +10 +0 +3 +0 +34 +30 +33 +30 +== NEGATIVE OFFSET == +ERR: Warning +OK_NEGATIVE_OFFSET +ERR: Warning +OK_NEGATIVE_OFFSET +ERR: Warning +OK_NEGATIVE_OFFSET +ERR: Warning +OK_NEGATIVE_OFFSET +ERR: Warning +OK_NEGATIVE_OFFSET +ERR: Warning +OK_NEGATIVE_OFFSET +ERR: Warning +OK_NEGATIVE_OFFSET +ERR: Warning +OK_NEGATIVE_OFFSET +== OUT OF RANGE == +OK_OUT_RANGE +OK_OUT_RANGE +OK_OUT_RANGE +OK_OUT_RANGE +== NON-EXISTENT == +OK_STR +OK_NEWLINE +== NO ENCODING PARAMETER == +10 +0 +3 +0 +OK_STR +OK_NEWLINE +== NO OFFSET AND ENCODING PARAMETER == +10 +0 +3 +0 +OK_STR +OK_NEWLINE +== INVALID PARAMETER TEST == +ERR: Warning +OK_NULL +ERR: Warning +OK_ARRAY +ERR: Warning +OK_OBJECT +ERR: Warning +OK_BAD_ENCODING + diff --git a/ext/mbstring/tests/mb_strpos_basic.phpt b/ext/mbstring/tests/mb_strpos_basic.phpt new file mode 100644 index 0000000..36641b1 --- /dev/null +++ b/ext/mbstring/tests/mb_strpos_basic.phpt @@ -0,0 +1,57 @@ +--TEST-- +Test mb_strpos() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strpos') or die("skip mb_strpos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strpos(string $haystack, string $needle [, int $offset [, string $encoding]]) + * Description: Find position of first occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test basic functionality of mb_strpos with ASCII and multibyte characters + */ + +echo "*** Testing mb_strpos() : basic functionality***\n"; + +mb_internal_encoding('UTF-8'); + +$string_ascii = b'abc def'; +//Japanese string in UTF-8 +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); + +echo "\n-- ASCII string 1 --\n"; +var_dump(mb_strpos($string_ascii, b'd', 2, 'ISO-8859-1')); + +echo "\n-- ASCII string 2 --\n"; +var_dump(mb_strpos($string_ascii, '123')); + +echo "\n-- Multibyte string 1 --\n"; +$needle1 = base64_decode('5pel5pys6Kqe'); +var_dump(mb_strpos($string_mb, $needle1)); + +echo "\n-- Multibyte string 2 --\n"; +$needle2 = base64_decode("44GT44KT44Gr44Gh44Gv44CB5LiW55WM"); +var_dump(mb_strpos($string_mb, $needle2)); + +echo "Done"; +?> +--EXPECT-- +*** Testing mb_strpos() : basic functionality*** + +-- ASCII string 1 -- +int(4) + +-- ASCII string 2 -- +bool(false) + +-- Multibyte string 1 -- +int(0) + +-- Multibyte string 2 -- +bool(false) +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_strpos_error1.phpt b/ext/mbstring/tests/mb_strpos_error1.phpt new file mode 100644 index 0000000..8f5ba85 --- /dev/null +++ b/ext/mbstring/tests/mb_strpos_error1.phpt @@ -0,0 +1,50 @@ +--TEST-- +Test mb_strpos() function : error conditions - Pass incorrect number of args +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strpos') or die("skip mb_strpos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strpos(string $haystack, string $needle [, int $offset [, string $encoding]]) + * Description: Find position of first occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test how mb_strpos behaves when passed an incorrect number of arguments + */ + +echo "*** Testing mb_strpos() : error conditions ***\n"; + + +//Test mb_strpos with one more than the expected number of arguments +echo "\n-- Testing mb_strpos() function with more than expected no. of arguments --\n"; +$haystack = 'string_val'; +$needle = 'string_val'; +$offset = 10; +$encoding = 'string_val'; +$extra_arg = 10; +var_dump( mb_strpos($haystack, $needle, $offset, $encoding, $extra_arg) ); + +// Testing mb_strpos with one less than the expected number of arguments +echo "\n-- Testing mb_strpos() function with less than expected no. of arguments --\n"; +$haystack = 'string_val'; +var_dump( mb_strpos($haystack) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strpos() : error conditions *** + +-- Testing mb_strpos() function with more than expected no. of arguments -- + +Warning: mb_strpos() expects at most 4 parameters, 5 given in %s on line %d +bool(false) + +-- Testing mb_strpos() function with less than expected no. of arguments -- + +Warning: mb_strpos() expects at least 2 parameters, 1 given in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_strpos_error2.phpt b/ext/mbstring/tests/mb_strpos_error2.phpt new file mode 100644 index 0000000..f75390f --- /dev/null +++ b/ext/mbstring/tests/mb_strpos_error2.phpt @@ -0,0 +1,34 @@ +--TEST-- +Test mb_strpos() function : error conditions - Pass unknown encoding +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strpos') or die("skip mb_strpos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strpos(string $haystack, string $needle [, int $offset [, string $encoding]]) + * Description: Find position of first occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass an unknown encoding to mb_strpos() to test behaviour + */ + +echo "*** Testing mb_strpos() : error conditions ***\n"; +$haystack = 'Hello, world'; +$needle = 'world'; +$offset = 2; +$encoding = 'unknown-encoding'; + +var_dump( mb_strpos($haystack, $needle, $offset, $encoding) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strpos() : error conditions *** + +Warning: mb_strpos(): Unknown encoding "unknown-encoding" in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_strpos_variation1.phpt b/ext/mbstring/tests/mb_strpos_variation1.phpt new file mode 100644 index 0000000..d665f8f --- /dev/null +++ b/ext/mbstring/tests/mb_strpos_variation1.phpt @@ -0,0 +1,182 @@ +--TEST-- +Test mb_strpos() function : usage variations - pass different data types to $haystack arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strpos') or die("skip mb_strpos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strpos(string $haystack, string $needle [, int $offset [, string $encoding]]) + * Description: Find position of first occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass mb_strpos different data types as $haystack arg to test behaviour + */ + +echo "*** Testing mb_strpos() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$needle = 'string_val'; +$offset = 0; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "Class A object"; + } +} + +// heredoc string +$heredoc = <<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $haystack argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "string", + 'string', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_strpos() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_strpos($input, $needle, $offset, $encoding)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strpos() : usage variations *** + +-- Iteration 1 -- +bool(false) + +-- Iteration 2 -- +bool(false) + +-- Iteration 3 -- +bool(false) + +-- Iteration 4 -- +bool(false) + +-- Iteration 5 -- +bool(false) + +-- Iteration 6 -- +bool(false) + +-- Iteration 7 -- +bool(false) + +-- Iteration 8 -- +bool(false) + +-- Iteration 9 -- +bool(false) + +-- Iteration 10 -- +bool(false) + +-- Iteration 11 -- +bool(false) + +-- Iteration 12 -- +bool(false) + +-- Iteration 13 -- +bool(false) + +-- Iteration 14 -- +bool(false) + +-- Iteration 15 -- +bool(false) + +-- Iteration 16 -- +bool(false) + +-- Iteration 17 -- +bool(false) + +-- Iteration 18 -- +bool(false) + +-- Iteration 19 -- +bool(false) + +-- Iteration 20 -- +bool(false) + +-- Iteration 21 -- +bool(false) + +-- Iteration 22 -- +bool(false) + +-- Iteration 23 -- +bool(false) + +-- Iteration 24 -- + +Warning: mb_strpos() expects parameter 1 to be string, resource given in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_strpos_variation2.phpt b/ext/mbstring/tests/mb_strpos_variation2.phpt new file mode 100644 index 0000000..d6feb49 --- /dev/null +++ b/ext/mbstring/tests/mb_strpos_variation2.phpt @@ -0,0 +1,198 @@ +--TEST-- +Test mb_strpos() function : usage variations - pass different data types as $needle arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strpos') or die("skip mb_strpos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strpos(string $haystack, string $needle [, int $offset [, string $encoding]]) + * Description: Find position of first occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass mb_strpos different data types as $needle arg to test behaviour + */ + +echo "*** Testing mb_strpos() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$haystack = b'string_val'; +$offset = 0; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return b"Class A object"; + } +} + +// heredoc string +$heredoc = b<<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $needle argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ b"string", + b'string', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_strpos() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_strpos($haystack, $input, $offset, $encoding)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strpos() : usage variations *** + +-- Iteration 1 -- +bool(false) + +-- Iteration 2 -- +bool(false) + +-- Iteration 3 -- +bool(false) + +-- Iteration 4 -- +bool(false) + +-- Iteration 5 -- +bool(false) + +-- Iteration 6 -- +bool(false) + +-- Iteration 7 -- +bool(false) + +-- Iteration 8 -- +bool(false) + +-- Iteration 9 -- +bool(false) + +-- Iteration 10 -- + +Warning: mb_strpos(): Empty delimiter in %s on line %d +bool(false) + +-- Iteration 11 -- + +Warning: mb_strpos(): Empty delimiter in %s on line %d +bool(false) + +-- Iteration 12 -- +bool(false) + +-- Iteration 13 -- + +Warning: mb_strpos(): Empty delimiter in %s on line %d +bool(false) + +-- Iteration 14 -- +bool(false) + +-- Iteration 15 -- + +Warning: mb_strpos(): Empty delimiter in %s on line %d +bool(false) + +-- Iteration 16 -- + +Warning: mb_strpos(): Empty delimiter in %s on line %d +bool(false) + +-- Iteration 17 -- + +Warning: mb_strpos(): Empty delimiter in %s on line %d +bool(false) + +-- Iteration 18 -- +int(0) + +-- Iteration 19 -- +int(0) + +-- Iteration 20 -- +bool(false) + +-- Iteration 21 -- +bool(false) + +-- Iteration 22 -- + +Warning: mb_strpos(): Empty delimiter in %s on line %d +bool(false) + +-- Iteration 23 -- + +Warning: mb_strpos(): Empty delimiter in %s on line %d +bool(false) + +-- Iteration 24 -- + +Warning: mb_strpos() expects parameter 2 to be string, resource given in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_strpos_variation3.phpt b/ext/mbstring/tests/mb_strpos_variation3.phpt new file mode 100644 index 0000000..65572b5 --- /dev/null +++ b/ext/mbstring/tests/mb_strpos_variation3.phpt @@ -0,0 +1,202 @@ +--TEST-- +Test mb_strpos() function : usage variations - pass different data types as $offset arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strpos') or die("skip mb_strpos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strpos(string $haystack, string $needle [, int $offset [, string $encoding]]) + * Description: Find position of first occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass mb_strpos different data types as $offset arg to test behaviour + */ + +echo "*** Testing mb_strpos() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$needle = b'a'; +$haystack = b'string_val'; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "Class A object"; + } +} + +// heredoc string +$heredoc = <<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $offest argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "string", + 'string', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_strpos() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_strpos($haystack, $needle, $input, $encoding)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strpos() : usage variations *** + +-- Iteration 1 -- +int(8) + +-- Iteration 2 -- +int(8) + +-- Iteration 3 -- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) + +-- Iteration 4 -- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) + +-- Iteration 5 -- +bool(false) + +-- Iteration 6 -- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) + +-- Iteration 7 -- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) + +-- Iteration 8 -- +int(8) + +-- Iteration 9 -- +int(8) + +-- Iteration 10 -- +int(8) + +-- Iteration 11 -- +int(8) + +-- Iteration 12 -- +int(8) + +-- Iteration 13 -- +int(8) + +-- Iteration 14 -- +int(8) + +-- Iteration 15 -- +int(8) + +-- Iteration 16 -- + +Warning: mb_strpos() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 17 -- + +Warning: mb_strpos() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 18 -- + +Warning: mb_strpos() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 19 -- + +Warning: mb_strpos() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 20 -- + +Warning: mb_strpos() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 21 -- + +Warning: mb_strpos() expects parameter 3 to be long, object given in %s on line %d +bool(false) + +-- Iteration 22 -- +int(8) + +-- Iteration 23 -- +int(8) + +-- Iteration 24 -- + +Warning: mb_strpos() expects parameter 3 to be long, resource given in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_strpos_variation4.phpt b/ext/mbstring/tests/mb_strpos_variation4.phpt new file mode 100644 index 0000000..0fca8bb --- /dev/null +++ b/ext/mbstring/tests/mb_strpos_variation4.phpt @@ -0,0 +1,222 @@ +--TEST-- +Test mb_strpos() function : usage variations - pass different data types as $encoding arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strpos') or die("skip mb_strpos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strpos(string $haystack, string $needle [, int $offset [, string $encoding]]) + * Description: Find position of first occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass mb_strpos different data types as $encoding arg to test behaviour + * Where possible 'UTF-8' has been entered as a string value + */ + +echo "*** Testing mb_strpos() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$haystack = b'string_val'; +$needle = b'val'; +$offset = 0; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "UTF-8"; + } +} + +// heredoc string +$heredoc = <<<EOT +UTF-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $input argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "UTF-8", + 'UTF-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_strpos() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_strpos($haystack, $needle, $offset, $input)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_strpos() : usage variations *** + +-- Iteration 1 -- + +Warning: mb_strpos(): Unknown encoding "0" in %s on line %d +bool(false) + +-- Iteration 2 -- + +Warning: mb_strpos(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 3 -- + +Warning: mb_strpos(): Unknown encoding "12345" in %s on line %d +bool(false) + +-- Iteration 4 -- + +Warning: mb_strpos(): Unknown encoding "-2345" in %s on line %d +bool(false) + +-- Iteration 5 -- + +Warning: mb_strpos(): Unknown encoding "10.5" in %s on line %d +bool(false) + +-- Iteration 6 -- + +Warning: mb_strpos(): Unknown encoding "-10.5" in %s on line %d +bool(false) + +-- Iteration 7 -- + +Warning: mb_strpos(): Unknown encoding "123456789000" in %s on line %d +bool(false) + +-- Iteration 8 -- + +Warning: mb_strpos(): Unknown encoding "1.23456789E-9" in %s on line %d +bool(false) + +-- Iteration 9 -- + +Warning: mb_strpos(): Unknown encoding "0.5" in %s on line %d +bool(false) + +-- Iteration 10 -- + +Warning: mb_strpos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 11 -- + +Warning: mb_strpos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 12 -- + +Warning: mb_strpos(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 13 -- + +Warning: mb_strpos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 14 -- + +Warning: mb_strpos(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 15 -- + +Warning: mb_strpos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 16 -- + +Warning: mb_strpos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 17 -- + +Warning: mb_strpos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 18 -- +int(7) + +-- Iteration 19 -- +int(7) + +-- Iteration 20 -- +int(7) + +-- Iteration 21 -- +int(7) + +-- Iteration 22 -- + +Warning: mb_strpos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 23 -- + +Warning: mb_strpos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 24 -- + +Warning: mb_strpos() expects parameter 4 to be string, resource given in %s on line %d +bool(false) +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_strpos_variation5.phpt b/ext/mbstring/tests/mb_strpos_variation5.phpt new file mode 100644 index 0000000..7a9604a --- /dev/null +++ b/ext/mbstring/tests/mb_strpos_variation5.phpt @@ -0,0 +1,117 @@ +--TEST-- +Test mb_strpos() function : usage variations - Pass different integers as $offset argument +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strpos') or die("skip mb_strpos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strpos(string $haystack, string $needle [, int $offset [, string $encoding]]) + * Description: Find position of first occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test how mb_strpos() behaves when passed different integers as $offset argument + * The character length of $string_ascii and $string_mb is the same, + * and the needle appears at the same positions in both strings + */ + +mb_internal_encoding('UTF-8'); + +echo "*** Testing mb_strpos() : usage variations ***\n"; + +$string_ascii = b'+Is an English string'; //21 chars +$needle_ascii = b'g'; + +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); //21 chars +$needle_mb = base64_decode('44CC'); + +/* + * Loop through integers as multiples of ten for $offset argument + * mb_strpos should not be able to accept negative values as $offset. + * 60 is larger than *BYTE* count for $string_mb + */ +for ($i = -10; $i <= 60; $i += 10) { + echo "\n**-- Offset is: $i --**\n"; + echo "-- ASCII String --\n"; + var_dump(mb_strpos($string_ascii, $needle_ascii, $i)); + echo "--Multibyte String --\n"; + var_dump(mb_strpos($string_mb, $needle_mb, $i, 'UTF-8')); +} + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_strpos() : usage variations *** + +**-- Offset is: -10 --** +-- ASCII String -- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) +--Multibyte String -- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) + +**-- Offset is: 0 --** +-- ASCII String -- +int(9) +--Multibyte String -- +int(9) + +**-- Offset is: 10 --** +-- ASCII String -- +int(20) +--Multibyte String -- +int(20) + +**-- Offset is: 20 --** +-- ASCII String -- +int(20) +--Multibyte String -- +int(20) + +**-- Offset is: 30 --** +-- ASCII String -- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) +--Multibyte String -- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) + +**-- Offset is: 40 --** +-- ASCII String -- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) +--Multibyte String -- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) + +**-- Offset is: 50 --** +-- ASCII String -- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) +--Multibyte String -- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) + +**-- Offset is: 60 --** +-- ASCII String -- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) +--Multibyte String -- + +Warning: mb_strpos(): Offset not contained in string in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_strrchr_basic.phpt b/ext/mbstring/tests/mb_strrchr_basic.phpt new file mode 100644 index 0000000..595d808 --- /dev/null +++ b/ext/mbstring/tests/mb_strrchr_basic.phpt @@ -0,0 +1,64 @@ +--TEST-- +Test mb_strrchr() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrchr') or die("skip mb_strrchr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strrchr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds the last occurrence of a character in a string within another + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strrchr() : basic functionality ***\n"; + +mb_internal_encoding('UTF-8'); + +$string_ascii = b'abc def'; +//Japanese string in UTF-8 +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); + +echo "\n-- ASCII string: needle exists --\n"; +var_dump(bin2hex(mb_strrchr($string_ascii, b'd', false, 'ISO-8859-1'))); +var_dump(bin2hex(mb_strrchr($string_ascii, b'd'))); +var_dump(bin2hex(mb_strrchr($string_ascii, b'd', true))); + + +echo "\n-- ASCII string: needle doesn't exist --\n"; +var_dump(mb_strrchr($string_ascii, b'123')); + +echo "\n-- Multibyte string: needle exists --\n"; +$needle1 = base64_decode('5pel5pys6Kqe'); +var_dump(bin2hex(mb_strrchr($string_mb, $needle1))); +var_dump(bin2hex(mb_strrchr($string_mb, $needle1, false, 'utf-8'))); +var_dump(bin2hex(mb_strrchr($string_mb, $needle1, true))); + + +echo "\n-- Multibyte string: needle doesn't exist --\n"; +$needle2 = base64_decode('44GT44KT44Gr44Gh44Gv44CB5LiW55WM'); +var_dump(mb_strrchr($string_mb, $needle2)); + +?> +===DONE=== +--EXPECT-- +*** Testing mb_strrchr() : basic functionality *** + +-- ASCII string: needle exists -- +string(6) "646566" +string(6) "646566" +string(8) "61626320" + +-- ASCII string: needle doesn't exist -- +bool(false) + +-- Multibyte string: needle exists -- +string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082" +string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082" +string(0) "" + +-- Multibyte string: needle doesn't exist -- +bool(false) +===DONE===
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_strrchr_error1.phpt b/ext/mbstring/tests/mb_strrchr_error1.phpt new file mode 100644 index 0000000..5ebb3d0 --- /dev/null +++ b/ext/mbstring/tests/mb_strrchr_error1.phpt @@ -0,0 +1,47 @@ +--TEST-- +Test mb_strrchr() function : error conditions +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrchr') or die("skip mb_strrchr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strrchr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds the last occurrence of a character in a string within another + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strrchr() : error conditions ***\n"; + + +//Test mb_strrchr with one more than the expected number of arguments +echo "\n-- Testing mb_strrchr() function with more than expected no. of arguments --\n"; +$haystack = b'string_val'; +$needle = b'string_val'; +$part = true; +$encoding = 'string_val'; +$extra_arg = 10; +var_dump( mb_strrchr($haystack, $needle, $part, $encoding, $extra_arg) ); + +// Testing mb_strrchr with one less than the expected number of arguments +echo "\n-- Testing mb_strrchr() function with less than expected no. of arguments --\n"; +$haystack = b'string_val'; +var_dump( mb_strrchr($haystack) ); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_strrchr() : error conditions *** + +-- Testing mb_strrchr() function with more than expected no. of arguments -- + +Warning: mb_strrchr() expects at most 4 parameters, 5 given in %s on line %d +bool(false) + +-- Testing mb_strrchr() function with less than expected no. of arguments -- + +Warning: mb_strrchr() expects at least 2 parameters, 1 given in %s on line %d +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strrchr_error2.phpt b/ext/mbstring/tests/mb_strrchr_error2.phpt new file mode 100644 index 0000000..cfbcd66 --- /dev/null +++ b/ext/mbstring/tests/mb_strrchr_error2.phpt @@ -0,0 +1,35 @@ +--TEST-- +Test mb_strrchr() function : error conditions +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrchr') or die("skip mb_strrchr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strrchr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds the last occurrence of a character in a string within another + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strrchr() : error conditions ***\n"; + + +echo "\n-- Testing mb_strrchr() with unknown encoding --\n"; +$haystack = b'Hello, world'; +$needle = b'world'; +$encoding = 'unknown-encoding'; +$part = true; +var_dump( mb_strrchr($haystack, $needle, $part, $encoding) ); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_strrchr() : error conditions *** + +-- Testing mb_strrchr() with unknown encoding -- + +Warning: mb_strrchr(): Unknown encoding "unknown-encoding" in %s on line %d +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strrchr_variation1.phpt b/ext/mbstring/tests/mb_strrchr_variation1.phpt new file mode 100644 index 0000000..18eb52e --- /dev/null +++ b/ext/mbstring/tests/mb_strrchr_variation1.phpt @@ -0,0 +1,207 @@ +--TEST-- +Test mb_strrchr() function : usage variation - various haystacks, needle won't be found +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrchr') or die("skip mb_strrchr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strrchr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds the last occurrence of a character in a string within another + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strrchr() : usage variation ***\n"; + +// Define error handler +function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { + if (error_reporting() != 0) { + // report non-silenced errors + echo "Error: $err_no - $err_msg, $filename($linenum)\n"; + } +} +set_error_handler('test_error_handler'); + +// Initialise function arguments not being substituted (if any) +$needle = b'string_val'; +$part = true; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// define some classes +class classWithToString +{ + public function __toString() { + return b"Class A object"; + } +} + +class classWithoutToString +{ +} + +// heredoc string +$heredoc = b<<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// add arrays +$index_array = array (1, 2, 3); +$assoc_array = array ('one' => 1, 'two' => 2); + +//array of values to iterate over +$inputs = array( + + // int data + 'int 0' => 0, + 'int 1' => 1, + 'int 12345' => 12345, + 'int -12345' => -2345, + + // float data + 'float 10.5' => 10.5, + 'float -10.5' => -10.5, + 'float 12.3456789000e10' => 12.3456789000e10, + 'float -12.3456789000e10' => -12.3456789000e10, + 'float .5' => .5, + + // array data + 'empty array' => array(), + 'int indexed array' => $index_array, + 'associative array' => $assoc_array, + 'nested arrays' => array('foo', $index_array, $assoc_array), + + // null data + 'uppercase NULL' => NULL, + 'lowercase null' => null, + + // boolean data + 'lowercase true' => true, + 'lowercase false' =>false, + 'uppercase TRUE' =>TRUE, + 'uppercase FALSE' =>FALSE, + + // empty data + 'empty string DQ' => "", + 'empty string SQ' => '', + + // object data + 'instance of classWithToString' => new classWithToString(), + 'instance of classWithoutToString' => new classWithoutToString(), + + // undefined data + 'undefined var' => @$undefined_var, + + // unset data + 'unset var' => @$unset_var, + + // resource variable + 'resource' => $fp +); + +// loop through each element of the array for haystack + +foreach($inputs as $key =>$value) { + echo "\n--$key--\n"; + var_dump( mb_strrchr($value, $needle, $part, $encoding) ); +}; + +fclose($fp); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_strrchr() : usage variation *** + +--int 0-- +bool(false) + +--int 1-- +bool(false) + +--int 12345-- +bool(false) + +--int -12345-- +bool(false) + +--float 10.5-- +bool(false) + +--float -10.5-- +bool(false) + +--float 12.3456789000e10-- +bool(false) + +--float -12.3456789000e10-- +bool(false) + +--float .5-- +bool(false) + +--empty array-- +Error: 2 - mb_strrchr() expects parameter 1 to be string, array given, %s(%d) +bool(false) + +--int indexed array-- +Error: 2 - mb_strrchr() expects parameter 1 to be string, array given, %s(%d) +bool(false) + +--associative array-- +Error: 2 - mb_strrchr() expects parameter 1 to be string, array given, %s(%d) +bool(false) + +--nested arrays-- +Error: 2 - mb_strrchr() expects parameter 1 to be string, array given, %s(%d) +bool(false) + +--uppercase NULL-- +bool(false) + +--lowercase null-- +bool(false) + +--lowercase true-- +bool(false) + +--lowercase false-- +bool(false) + +--uppercase TRUE-- +bool(false) + +--uppercase FALSE-- +bool(false) + +--empty string DQ-- +bool(false) + +--empty string SQ-- +bool(false) + +--instance of classWithToString-- +bool(false) + +--instance of classWithoutToString-- +Error: 2 - mb_strrchr() expects parameter 1 to be string, object given, %s(%d) +bool(false) + +--undefined var-- +bool(false) + +--unset var-- +bool(false) + +--resource-- +Error: 2 - mb_strrchr() expects parameter 1 to be string, resource given, %s(%d) +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strrchr_variation2.phpt b/ext/mbstring/tests/mb_strrchr_variation2.phpt new file mode 100644 index 0000000..f9b7107 --- /dev/null +++ b/ext/mbstring/tests/mb_strrchr_variation2.phpt @@ -0,0 +1,207 @@ +--TEST-- +Test mb_strrchr() function : usage variation - different types of needle. +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrchr') or die("skip mb_strrchr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strrchr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds the last occurrence of a character in a string within another + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strrchr() : usage variation ***\n"; + +// Define error handler +function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { + if (error_reporting() != 0) { + // report non-silenced errors + echo "Error: $err_no - $err_msg, $filename($linenum)\n"; + } +} +set_error_handler('test_error_handler'); + +// Initialise function arguments not being substituted (if any) +$haystack = b'string_val'; +$part = true; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// define some classes +class classWithToString +{ + public function __toString() { + return b"Class A object"; + } +} + +class classWithoutToString +{ +} + +// heredoc string +$heredoc = b<<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// add arrays +$index_array = array (1, 2, 3); +$assoc_array = array ('one' => 1, 'two' => 2); + +//array of values to iterate over +$inputs = array( + + // int data + 'int 0' => 0, + 'int 1' => 1, + 'int 12345' => 12345, + 'int -12345' => -2345, + + // float data + 'float 10.5' => 10.5, + 'float -10.5' => -10.5, + 'float 12.3456789000e10' => 12.3456789000e10, + 'float -12.3456789000e10' => -12.3456789000e10, + 'float .5' => .5, + + // array data + 'empty array' => array(), + 'int indexed array' => $index_array, + 'associative array' => $assoc_array, + 'nested arrays' => array('foo', $index_array, $assoc_array), + + // null data + 'uppercase NULL' => NULL, + 'lowercase null' => null, + + // boolean data + 'lowercase true' => true, + 'lowercase false' =>false, + 'uppercase TRUE' =>TRUE, + 'uppercase FALSE' =>FALSE, + + // empty data + 'empty string DQ' => "", + 'empty string SQ' => '', + + // object data + 'instance of classWithToString' => new classWithToString(), + 'instance of classWithoutToString' => new classWithoutToString(), + + // undefined data + 'undefined var' => @$undefined_var, + + // unset data + 'unset var' => @$unset_var, + + // resource variable + 'resource' => $fp +); + +// loop through each element of the array for needle + +foreach($inputs as $key =>$value) { + echo "\n--$key--\n"; + var_dump( mb_strrchr($haystack, $value, $part, $encoding) ); +}; + +fclose($fp); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_strrchr() : usage variation *** + +--int 0-- +bool(false) + +--int 1-- +bool(false) + +--int 12345-- +bool(false) + +--int -12345-- +bool(false) + +--float 10.5-- +bool(false) + +--float -10.5-- +bool(false) + +--float 12.3456789000e10-- +bool(false) + +--float -12.3456789000e10-- +bool(false) + +--float .5-- +bool(false) + +--empty array-- +Error: 2 - mb_strrchr() expects parameter 2 to be string, array given, %s(%d) +bool(false) + +--int indexed array-- +Error: 2 - mb_strrchr() expects parameter 2 to be string, array given, %s(%d) +bool(false) + +--associative array-- +Error: 2 - mb_strrchr() expects parameter 2 to be string, array given, %s(%d) +bool(false) + +--nested arrays-- +Error: 2 - mb_strrchr() expects parameter 2 to be string, array given, %s(%d) +bool(false) + +--uppercase NULL-- +bool(false) + +--lowercase null-- +bool(false) + +--lowercase true-- +bool(false) + +--lowercase false-- +bool(false) + +--uppercase TRUE-- +bool(false) + +--uppercase FALSE-- +bool(false) + +--empty string DQ-- +bool(false) + +--empty string SQ-- +bool(false) + +--instance of classWithToString-- +bool(false) + +--instance of classWithoutToString-- +Error: 2 - mb_strrchr() expects parameter 2 to be string, object given, %s(%d) +bool(false) + +--undefined var-- +bool(false) + +--unset var-- +bool(false) + +--resource-- +Error: 2 - mb_strrchr() expects parameter 2 to be string, resource given, %s(%d) +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strrchr_variation3.phpt b/ext/mbstring/tests/mb_strrchr_variation3.phpt new file mode 100644 index 0000000..4a16f55 --- /dev/null +++ b/ext/mbstring/tests/mb_strrchr_variation3.phpt @@ -0,0 +1,232 @@ +--TEST-- +Test mb_strrchr() function : usage variation - different values for part +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrchr') or die("skip mb_strrchr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strrchr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds the last occurrence of a character in a string within another + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strrchr() : usage variation ***\n"; + +// Define error handler +function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { + if (error_reporting() != 0) { + // report non-silenced errors + echo "Error: $err_no - $err_msg, $filename($linenum)\n"; + } +} +set_error_handler('test_error_handler'); + +// Initialise function arguments not being substituted (if any) +$haystack = b'string_val'; +$needle = b'_'; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// define some classes +class classWithToString +{ + public function __toString() { + return b"Class A object"; + } +} + +class classWithoutToString +{ +} + +// heredoc string +$heredoc = b<<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// add arrays +$index_array = array (1, 2, 3); +$assoc_array = array ('one' => 1, 'two' => 2); + +//array of values to iterate over +$inputs = array( + + // int data + 'int 0' => 0, + 'int 1' => 1, + 'int 12345' => 12345, + 'int -12345' => -2345, + + // float data + 'float 10.5' => 10.5, + 'float -10.5' => -10.5, + 'float 12.3456789000e10' => 12.3456789000e10, + 'float -12.3456789000e10' => -12.3456789000e10, + 'float .5' => .5, + + // array data + 'empty array' => array(), + 'int indexed array' => $index_array, + 'associative array' => $assoc_array, + 'nested arrays' => array('foo', $index_array, $assoc_array), + + // null data + 'uppercase NULL' => NULL, + 'lowercase null' => null, + + // boolean data + 'lowercase true' => true, + 'lowercase false' =>false, + 'uppercase TRUE' =>TRUE, + 'uppercase FALSE' =>FALSE, + + // empty data + 'empty string DQ' => "", + 'empty string SQ' => '', + + // string data + 'string DQ' => "string", + 'string SQ' => 'string', + 'mixed case string' => "sTrInG", + 'heredoc' => $heredoc, + + // object data + 'instance of classWithToString' => new classWithToString(), + 'instance of classWithoutToString' => new classWithoutToString(), + + // undefined data + 'undefined var' => @$undefined_var, + + // unset data + 'unset var' => @$unset_var, + + // resource variable + 'resource' => $fp +); + +// loop through each element of the array for part + +foreach($inputs as $key =>$value) { + echo "\n--$key--\n"; + $res = mb_strrchr($haystack, $needle, $value, $encoding); + if ($res === false) { + var_dump($res); + } + else { + var_dump(bin2hex($res)); + } +}; + +fclose($fp); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_strrchr() : usage variation *** + +--int 0-- +string(8) "5f76616c" + +--int 1-- +string(12) "737472696e67" + +--int 12345-- +string(12) "737472696e67" + +--int -12345-- +string(12) "737472696e67" + +--float 10.5-- +string(12) "737472696e67" + +--float -10.5-- +string(12) "737472696e67" + +--float 12.3456789000e10-- +string(12) "737472696e67" + +--float -12.3456789000e10-- +string(12) "737472696e67" + +--float .5-- +string(12) "737472696e67" + +--empty array-- +Error: 2 - mb_strrchr() expects parameter 3 to be boolean, array given, %s(%d) +bool(false) + +--int indexed array-- +Error: 2 - mb_strrchr() expects parameter 3 to be boolean, array given, %s(%d) +bool(false) + +--associative array-- +Error: 2 - mb_strrchr() expects parameter 3 to be boolean, array given, %s(%d) +bool(false) + +--nested arrays-- +Error: 2 - mb_strrchr() expects parameter 3 to be boolean, array given, %s(%d) +bool(false) + +--uppercase NULL-- +string(8) "5f76616c" + +--lowercase null-- +string(8) "5f76616c" + +--lowercase true-- +string(12) "737472696e67" + +--lowercase false-- +string(8) "5f76616c" + +--uppercase TRUE-- +string(12) "737472696e67" + +--uppercase FALSE-- +string(8) "5f76616c" + +--empty string DQ-- +string(8) "5f76616c" + +--empty string SQ-- +string(8) "5f76616c" + +--string DQ-- +string(12) "737472696e67" + +--string SQ-- +string(12) "737472696e67" + +--mixed case string-- +string(12) "737472696e67" + +--heredoc-- +string(12) "737472696e67" + +--instance of classWithToString-- +Error: 2 - mb_strrchr() expects parameter 3 to be boolean, object given, %s(%d) +bool(false) + +--instance of classWithoutToString-- +Error: 2 - mb_strrchr() expects parameter 3 to be boolean, object given, %s(%d) +bool(false) + +--undefined var-- +string(8) "5f76616c" + +--unset var-- +string(8) "5f76616c" + +--resource-- +Error: 2 - mb_strrchr() expects parameter 3 to be boolean, resource given, %s(%d) +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strrchr_variation4.phpt b/ext/mbstring/tests/mb_strrchr_variation4.phpt new file mode 100644 index 0000000..b9e0147 --- /dev/null +++ b/ext/mbstring/tests/mb_strrchr_variation4.phpt @@ -0,0 +1,227 @@ +--TEST-- +Test mb_strrchr() function : usage variation - different encoding types +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrchr') or die("skip mb_strrchr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strrchr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds the last occurrence of a character in a string within another + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strrchr() : usage variation ***\n"; + +// Define error handler +function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { + if (error_reporting() != 0) { + // report non-silenced errors + echo "Error: $err_no - $err_msg, $filename($linenum)\n"; + } +} +set_error_handler('test_error_handler'); + +// Initialise function arguments not being substituted (if any) +$haystack = b'string_val'; +$needle = b'_'; +$part = true; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// define some classes +class classWithToString +{ + public function __toString() { + return "invalid"; + } +} + +class classWithoutToString +{ +} + +// heredoc string +$heredoc = <<<EOT +invalid +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// add arrays +$index_array = array (1, 2, 3); +$assoc_array = array ('one' => 1, 'two' => 2); + +//array of values to iterate over +$inputs = array( + + // int data + 'int 0' => 0, + 'int 1' => 1, + 'int 12345' => 12345, + 'int -12345' => -2345, + + // float data + 'float 10.5' => 10.5, + 'float -10.5' => -10.5, + 'float 12.3456789000e10' => 12.3456789000e10, + 'float -12.3456789000e10' => -12.3456789000e10, + 'float .5' => .5, + + // array data + 'empty array' => array(), + 'int indexed array' => $index_array, + 'associative array' => $assoc_array, + 'nested arrays' => array('foo', $index_array, $assoc_array), + + // null data + 'uppercase NULL' => NULL, + 'lowercase null' => null, + + // boolean data + 'lowercase true' => true, + 'lowercase false' =>false, + 'uppercase TRUE' =>TRUE, + 'uppercase FALSE' =>FALSE, + + // empty data + 'empty string DQ' => "", + 'empty string SQ' => '', + + // object data + 'instance of classWithToString' => new classWithToString(), + 'instance of classWithoutToString' => new classWithoutToString(), + + // undefined data + 'undefined var' => @$undefined_var, + + // unset data + 'unset var' => @$unset_var, + + // resource variable + 'resource' => $fp +); + +// loop through each element of the array for encoding + +foreach($inputs as $key =>$value) { + echo "\n--$key--\n"; + var_dump( mb_strrchr($haystack, $needle, $part, $value) ); +}; + +fclose($fp); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_strrchr() : usage variation *** + +--int 0-- +Error: 2 - mb_strrchr(): Unknown encoding "0", %s(%d) +bool(false) + +--int 1-- +Error: 2 - mb_strrchr(): Unknown encoding "1", %s(%d) +bool(false) + +--int 12345-- +Error: 2 - mb_strrchr(): Unknown encoding "12345", %s(%d) +bool(false) + +--int -12345-- +Error: 2 - mb_strrchr(): Unknown encoding "-2345", %s(%d) +bool(false) + +--float 10.5-- +Error: 2 - mb_strrchr(): Unknown encoding "10.5", %s(%d) +bool(false) + +--float -10.5-- +Error: 2 - mb_strrchr(): Unknown encoding "-10.5", %s(%d) +bool(false) + +--float 12.3456789000e10-- +Error: 2 - mb_strrchr(): Unknown encoding "123456789000", %s(%d) +bool(false) + +--float -12.3456789000e10-- +Error: 2 - mb_strrchr(): Unknown encoding "-123456789000", %s(%d) +bool(false) + +--float .5-- +Error: 2 - mb_strrchr(): Unknown encoding "0.5", %s(%d) +bool(false) + +--empty array-- +Error: 2 - mb_strrchr() expects parameter 4 to be string, array given, %s(%d) +bool(false) + +--int indexed array-- +Error: 2 - mb_strrchr() expects parameter 4 to be string, array given, %s(%d) +bool(false) + +--associative array-- +Error: 2 - mb_strrchr() expects parameter 4 to be string, array given, %s(%d) +bool(false) + +--nested arrays-- +Error: 2 - mb_strrchr() expects parameter 4 to be string, array given, %s(%d) +bool(false) + +--uppercase NULL-- +Error: 2 - mb_strrchr(): Unknown encoding "", %s(%d) +bool(false) + +--lowercase null-- +Error: 2 - mb_strrchr(): Unknown encoding "", %s(%d) +bool(false) + +--lowercase true-- +Error: 2 - mb_strrchr(): Unknown encoding "1", %s(%d) +bool(false) + +--lowercase false-- +Error: 2 - mb_strrchr(): Unknown encoding "", %s(%d) +bool(false) + +--uppercase TRUE-- +Error: 2 - mb_strrchr(): Unknown encoding "1", %s(%d) +bool(false) + +--uppercase FALSE-- +Error: 2 - mb_strrchr(): Unknown encoding "", %s(%d) +bool(false) + +--empty string DQ-- +Error: 2 - mb_strrchr(): Unknown encoding "", %s(%d) +bool(false) + +--empty string SQ-- +Error: 2 - mb_strrchr(): Unknown encoding "", %s(%d) +bool(false) + +--instance of classWithToString-- +Error: 2 - mb_strrchr(): Unknown encoding "invalid", %s(%d) +bool(false) + +--instance of classWithoutToString-- +Error: 2 - mb_strrchr() expects parameter 4 to be string, object given, %s(%d) +bool(false) + +--undefined var-- +Error: 2 - mb_strrchr(): Unknown encoding "", %s(%d) +bool(false) + +--unset var-- +Error: 2 - mb_strrchr(): Unknown encoding "", %s(%d) +bool(false) + +--resource-- +Error: 2 - mb_strrchr() expects parameter 4 to be string, resource given, %s(%d) +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strrchr_variation5.phpt b/ext/mbstring/tests/mb_strrchr_variation5.phpt new file mode 100644 index 0000000..84a73a2 --- /dev/null +++ b/ext/mbstring/tests/mb_strrchr_variation5.phpt @@ -0,0 +1,59 @@ +--TEST-- +Test mb_strrchr() function : variation - multiple needles +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrchr') or die("skip mb_strrchr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strrchr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds the last occurrence of a character in a string within another + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strrchr() : variation ***\n"; + +mb_internal_encoding('UTF-8'); + +//with repeated needles +$string_ascii = b'abcdef zbcdyx'; +$needle_ascii = b"bcd"; + +//Japanese string in UTF-8 with repeated needles +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OIMzTvvJXvvJbml6XmnKzoqp7jg4bjgq3jgrnjg4g='); +$needle_mb = base64_decode('6Kqe44OG44Kt'); + +echo "-- Ascii data --\n"; +var_dump(bin2hex(mb_strrchr($string_ascii, $needle_ascii, false))); +var_dump(bin2hex(mb_strrchr($string_ascii, $needle_ascii, true))); + +echo "-- mb data in utf-8 --\n"; +$res = mb_strrchr($string_mb, $needle_mb, false); +if ($res !== false) { + var_dump(bin2hex($res)); +} +else { + echo "nothing found!\n"; +} +$res = mb_strrchr($string_mb, $needle_mb, true); +if ($res !== false) { + var_dump(bin2hex($res)); +} +else { + echo "nothing found!\n"; +} + + +?> +===DONE=== +--EXPECT-- +*** Testing mb_strrchr() : variation *** +-- Ascii data -- +string(10) "6263647978" +string(16) "616263646566207a" +-- mb data in utf-8 -- +string(30) "e8aa9ee38386e382ade382b9e38388" +string(70) "e697a5e69cace8aa9ee38386e382ade382b9e383883334efbc95efbc96e697a5e69cac" +===DONE=== diff --git a/ext/mbstring/tests/mb_strrchr_variation6.phpt b/ext/mbstring/tests/mb_strrchr_variation6.phpt new file mode 100644 index 0000000..8600949 --- /dev/null +++ b/ext/mbstring/tests/mb_strrchr_variation6.phpt @@ -0,0 +1,65 @@ +--TEST-- +Test mb_strrchr() function : variation - case sensitivity +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrchr') or die("skip mb_strrchr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strrchr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds the last occurrence of a character in a string within another + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strrchr() : variation ***\n"; + +mb_internal_encoding('UTF-8'); + +//ascii +$string_ascii = b'abcdef'; +$needle_ascii_upper = b"BCD"; +$needle_ascii_mixed = b"bCd"; +$needle_ascii_lower = b"bcd"; + +//Greek string in lower case UTF-8 +$string_mb = base64_decode('zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J'); +$needle_mb_upper = base64_decode('zpzOnc6ezp8='); +$needle_mb_lower = base64_decode('zrzOvc6+zr8='); +$needle_mb_mixed = base64_decode('zpzOnc6+zr8='); + +echo "-- Ascii data --\n"; +// needle should be found +var_dump(bin2hex(mb_strrchr($string_ascii, $needle_ascii_lower))); +// no needle should be found +var_dump(mb_strrchr($string_ascii, $needle_ascii_upper)); +var_dump(mb_strrchr($string_ascii, $needle_ascii_mixed)); + +echo "-- mb data in utf-8 --\n"; +// needle should be found +$res = mb_strrchr($string_mb, $needle_mb_lower, false); +if ($res !== false) { + var_dump(bin2hex($res)); +} +else { + echo "nothing found!\n"; +} +// no needle should be found +var_dump(mb_strrchr($string_mb, $needle_mb_upper)); +var_dump(mb_strrchr($string_mb, $needle_mb_mixed)); + + +?> +===DONE=== +--EXPECT-- +*** Testing mb_strrchr() : variation *** +-- Ascii data -- +string(10) "6263646566" +bool(false) +bool(false) +-- mb data in utf-8 -- +string(52) "cebccebdcebecebfcf80cf81cf83cf84cf85cf86cf87cf88cf89" +bool(false) +bool(false) +===DONE===
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_strrichr_basic.phpt b/ext/mbstring/tests/mb_strrichr_basic.phpt new file mode 100644 index 0000000..5a38e65 --- /dev/null +++ b/ext/mbstring/tests/mb_strrichr_basic.phpt @@ -0,0 +1,70 @@ +--TEST-- +Test mb_strrichr() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrichr') or die("skip mb_strrichr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strrichr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds the last occurrence of a character in a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strrichr() : basic functionality ***\n"; + +mb_internal_encoding('UTF-8'); + +$string_ascii = b'abcdef'; +$needle_ascii_upper = b"BCD"; +$needle_ascii_mixed = b"bCd"; +$needle_ascii_lower = b"bcd"; + +//Greek string in lower case UTF-8 +$string_mb = base64_decode('zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J'); +$needle_mb_upper = base64_decode('zpzOnc6ezp8='); +$needle_mb_lower = base64_decode('zrzOvc6+zr8='); +$needle_mb_mixed = base64_decode('zpzOnc6+zr8='); + +echo "\n-- ASCII string: needle exists --\n"; +var_dump(bin2hex(mb_strrichr($string_ascii, $needle_ascii_upper, false, 'ISO-8859-1'))); +var_dump(bin2hex(mb_strrichr($string_ascii, $needle_ascii_lower))); +var_dump(bin2hex(mb_strrichr($string_ascii, $needle_ascii_mixed, true))); + + +echo "\n-- ASCII string: needle doesn't exist --\n"; +var_dump(mb_strrichr($string_ascii, b'123')); + +echo "\n-- Multibyte string: needle exists --\n"; +var_dump(bin2hex(mb_strrichr($string_mb, $needle_mb_upper))); +var_dump(bin2hex(mb_strrichr($string_mb, $needle_mb_lower, false, 'utf-8'))); +var_dump(bin2hex(mb_strrichr($string_mb, $needle_mb_mixed, true))); + + +echo "\n-- Multibyte string: needle doesn't exist --\n"; +$needle2 = base64_decode('zrzOvs6/'); +var_dump(mb_strrichr($string_mb, $needle2)); + +?> +===DONE=== +--EXPECT-- +*** Testing mb_strrichr() : basic functionality *** + +-- ASCII string: needle exists -- +string(10) "6263646566" +string(10) "6263646566" +string(2) "61" + +-- ASCII string: needle doesn't exist -- +bool(false) + +-- Multibyte string: needle exists -- +string(52) "cebccebdcebecebfcf80cf81cf83cf84cf85cf86cf87cf88cf89" +string(52) "cebccebdcebecebfcf80cf81cf83cf84cf85cf86cf87cf88cf89" +string(44) "ceb1ceb2ceb3ceb4ceb5ceb6ceb7ceb8ceb9cebacebb" + +-- Multibyte string: needle doesn't exist -- +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strrichr_error1.phpt b/ext/mbstring/tests/mb_strrichr_error1.phpt new file mode 100644 index 0000000..2c2ed61 --- /dev/null +++ b/ext/mbstring/tests/mb_strrichr_error1.phpt @@ -0,0 +1,47 @@ +--TEST-- +Test mb_strrichr() function : error conditions +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrichr') or die("skip mb_strrichr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strrichr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds the last occurrence of a character in a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strrichr() : error conditions ***\n"; + + +//Test mb_strrichr with one more than the expected number of arguments +echo "\n-- Testing mb_strrichr() function with more than expected no. of arguments --\n"; +$haystack = b'string_val'; +$needle = b'string_val'; +$part = true; +$encoding = 'string_val'; +$extra_arg = 10; +var_dump( mb_strrichr($haystack, $needle, $part, $encoding, $extra_arg) ); + +// Testing mb_strrichr with one less than the expected number of arguments +echo "\n-- Testing mb_strrichr() function with less than expected no. of arguments --\n"; +$haystack = b'string_val'; +var_dump( mb_strrichr($haystack) ); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_strrichr() : error conditions *** + +-- Testing mb_strrichr() function with more than expected no. of arguments -- + +Warning: mb_strrichr() expects at most 4 parameters, 5 given in %s on line %d +bool(false) + +-- Testing mb_strrichr() function with less than expected no. of arguments -- + +Warning: mb_strrichr() expects at least 2 parameters, 1 given in %s on line %d +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strrichr_error2.phpt b/ext/mbstring/tests/mb_strrichr_error2.phpt new file mode 100644 index 0000000..e8f98ef --- /dev/null +++ b/ext/mbstring/tests/mb_strrichr_error2.phpt @@ -0,0 +1,35 @@ +--TEST-- +Test mb_strrichr() function : error conditions +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrichr') or die("skip mb_strrichr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strrichr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds the last occurrence of a character in a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strrichr() : error conditions ***\n"; + + +echo "\n-- Testing mb_strrichr() with unknown encoding --\n"; +$haystack = b'Hello, world'; +$needle = b'world'; +$encoding = 'unknown-encoding'; +$part = true; +var_dump( mb_strrichr($haystack, $needle, $part, $encoding) ); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_strrichr() : error conditions *** + +-- Testing mb_strrichr() with unknown encoding -- + +Warning: mb_strrichr(): Unknown encoding "unknown-encoding" in %s on line %d +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strrichr_variation1.phpt b/ext/mbstring/tests/mb_strrichr_variation1.phpt new file mode 100644 index 0000000..d826ccf --- /dev/null +++ b/ext/mbstring/tests/mb_strrichr_variation1.phpt @@ -0,0 +1,207 @@ +--TEST-- +Test mb_strrichr() function : usage variation - various haystacks, needle won't be found +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrichr') or die("skip mb_strrichr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strrichr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds the last occurrence of a character in a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strrichr() : usage variation ***\n"; + +// Define error handler +function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { + if (error_reporting() != 0) { + // report non-silenced errors + echo "Error: $err_no - $err_msg, $filename($linenum)\n"; + } +} +set_error_handler('test_error_handler'); + +// Initialise function arguments not being substituted (if any) +$needle = b'string_val'; +$part = true; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// define some classes +class classWithToString +{ + public function __toString() { + return b"Class A object"; + } +} + +class classWithoutToString +{ +} + +// heredoc string +$heredoc = b<<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// add arrays +$index_array = array (1, 2, 3); +$assoc_array = array ('one' => 1, 'two' => 2); + +//array of values to iterate over +$inputs = array( + + // int data + 'int 0' => 0, + 'int 1' => 1, + 'int 12345' => 12345, + 'int -12345' => -2345, + + // float data + 'float 10.5' => 10.5, + 'float -10.5' => -10.5, + 'float 12.3456789000e10' => 12.3456789000e10, + 'float -12.3456789000e10' => -12.3456789000e10, + 'float .5' => .5, + + // array data + 'empty array' => array(), + 'int indexed array' => $index_array, + 'associative array' => $assoc_array, + 'nested arrays' => array('foo', $index_array, $assoc_array), + + // null data + 'uppercase NULL' => NULL, + 'lowercase null' => null, + + // boolean data + 'lowercase true' => true, + 'lowercase false' =>false, + 'uppercase TRUE' =>TRUE, + 'uppercase FALSE' =>FALSE, + + // empty data + 'empty string DQ' => "", + 'empty string SQ' => '', + + // object data + 'instance of classWithToString' => new classWithToString(), + 'instance of classWithoutToString' => new classWithoutToString(), + + // undefined data + 'undefined var' => @$undefined_var, + + // unset data + 'unset var' => @$unset_var, + + // resource variable + 'resource' => $fp +); + +// loop through each element of the array for haystack + +foreach($inputs as $key =>$value) { + echo "\n--$key--\n"; + var_dump( mb_strrichr($value, $needle, $part, $encoding) ); +}; + +fclose($fp); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_strrichr() : usage variation *** + +--int 0-- +bool(false) + +--int 1-- +bool(false) + +--int 12345-- +bool(false) + +--int -12345-- +bool(false) + +--float 10.5-- +bool(false) + +--float -10.5-- +bool(false) + +--float 12.3456789000e10-- +bool(false) + +--float -12.3456789000e10-- +bool(false) + +--float .5-- +bool(false) + +--empty array-- +Error: 2 - mb_strrichr() expects parameter 1 to be string, array given, %s(%d) +bool(false) + +--int indexed array-- +Error: 2 - mb_strrichr() expects parameter 1 to be string, array given, %s(%d) +bool(false) + +--associative array-- +Error: 2 - mb_strrichr() expects parameter 1 to be string, array given, %s(%d) +bool(false) + +--nested arrays-- +Error: 2 - mb_strrichr() expects parameter 1 to be string, array given, %s(%d) +bool(false) + +--uppercase NULL-- +bool(false) + +--lowercase null-- +bool(false) + +--lowercase true-- +bool(false) + +--lowercase false-- +bool(false) + +--uppercase TRUE-- +bool(false) + +--uppercase FALSE-- +bool(false) + +--empty string DQ-- +bool(false) + +--empty string SQ-- +bool(false) + +--instance of classWithToString-- +bool(false) + +--instance of classWithoutToString-- +Error: 2 - mb_strrichr() expects parameter 1 to be string, object given, %s(%d) +bool(false) + +--undefined var-- +bool(false) + +--unset var-- +bool(false) + +--resource-- +Error: 2 - mb_strrichr() expects parameter 1 to be string, resource given, %s(%d) +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strrichr_variation2.phpt b/ext/mbstring/tests/mb_strrichr_variation2.phpt new file mode 100644 index 0000000..1a4a73f --- /dev/null +++ b/ext/mbstring/tests/mb_strrichr_variation2.phpt @@ -0,0 +1,207 @@ +--TEST-- +Test mb_strrichr() function : usage variation - different types of needle. +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrichr') or die("skip mb_strrichr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strrichr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds the last occurrence of a character in a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strrichr() : usage variation ***\n"; + +// Define error handler +function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { + if (error_reporting() != 0) { + // report non-silenced errors + echo "Error: $err_no - $err_msg, $filename($linenum)\n"; + } +} +set_error_handler('test_error_handler'); + +// Initialise function arguments not being substituted (if any) +$haystack = b'string_val'; +$part = true; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// define some classes +class classWithToString +{ + public function __toString() { + return b"Class A object"; + } +} + +class classWithoutToString +{ +} + +// heredoc string +$heredoc = b<<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// add arrays +$index_array = array (1, 2, 3); +$assoc_array = array ('one' => 1, 'two' => 2); + +//array of values to iterate over +$inputs = array( + + // int data + 'int 0' => 0, + 'int 1' => 1, + 'int 12345' => 12345, + 'int -12345' => -2345, + + // float data + 'float 10.5' => 10.5, + 'float -10.5' => -10.5, + 'float 12.3456789000e10' => 12.3456789000e10, + 'float -12.3456789000e10' => -12.3456789000e10, + 'float .5' => .5, + + // array data + 'empty array' => array(), + 'int indexed array' => $index_array, + 'associative array' => $assoc_array, + 'nested arrays' => array('foo', $index_array, $assoc_array), + + // null data + 'uppercase NULL' => NULL, + 'lowercase null' => null, + + // boolean data + 'lowercase true' => true, + 'lowercase false' =>false, + 'uppercase TRUE' =>TRUE, + 'uppercase FALSE' =>FALSE, + + // empty data + 'empty string DQ' => "", + 'empty string SQ' => '', + + // object data + 'instance of classWithToString' => new classWithToString(), + 'instance of classWithoutToString' => new classWithoutToString(), + + // undefined data + 'undefined var' => @$undefined_var, + + // unset data + 'unset var' => @$unset_var, + + // resource variable + 'resource' => $fp +); + +// loop through each element of the array for needle + +foreach($inputs as $key =>$value) { + echo "\n--$key--\n"; + var_dump( mb_strrichr($haystack, $value, $part, $encoding) ); +}; + +fclose($fp); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_strrichr() : usage variation *** + +--int 0-- +bool(false) + +--int 1-- +bool(false) + +--int 12345-- +bool(false) + +--int -12345-- +bool(false) + +--float 10.5-- +bool(false) + +--float -10.5-- +bool(false) + +--float 12.3456789000e10-- +bool(false) + +--float -12.3456789000e10-- +bool(false) + +--float .5-- +bool(false) + +--empty array-- +Error: 2 - mb_strrichr() expects parameter 2 to be string, array given, %s(%d) +bool(false) + +--int indexed array-- +Error: 2 - mb_strrichr() expects parameter 2 to be string, array given, %s(%d) +bool(false) + +--associative array-- +Error: 2 - mb_strrichr() expects parameter 2 to be string, array given, %s(%d) +bool(false) + +--nested arrays-- +Error: 2 - mb_strrichr() expects parameter 2 to be string, array given, %s(%d) +bool(false) + +--uppercase NULL-- +bool(false) + +--lowercase null-- +bool(false) + +--lowercase true-- +bool(false) + +--lowercase false-- +bool(false) + +--uppercase TRUE-- +bool(false) + +--uppercase FALSE-- +bool(false) + +--empty string DQ-- +bool(false) + +--empty string SQ-- +bool(false) + +--instance of classWithToString-- +bool(false) + +--instance of classWithoutToString-- +Error: 2 - mb_strrichr() expects parameter 2 to be string, object given, %s(%d) +bool(false) + +--undefined var-- +bool(false) + +--unset var-- +bool(false) + +--resource-- +Error: 2 - mb_strrichr() expects parameter 2 to be string, resource given, %s(%d) +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strrichr_variation3.phpt b/ext/mbstring/tests/mb_strrichr_variation3.phpt new file mode 100644 index 0000000..68e8083 --- /dev/null +++ b/ext/mbstring/tests/mb_strrichr_variation3.phpt @@ -0,0 +1,232 @@ +--TEST-- +Test mb_strrichr() function : usage variation - different values for part +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrichr') or die("skip mb_strrichr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strrichr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds the last occurrence of a character in a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strrichr() : usage variation ***\n"; + +// Define error handler +function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { + if (error_reporting() != 0) { + // report non-silenced errors + echo "Error: $err_no - $err_msg, $filename($linenum)\n"; + } +} +set_error_handler('test_error_handler'); + +// Initialise function arguments not being substituted (if any) +$haystack = b'string_val'; +$needle = b'_'; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// define some classes +class classWithToString +{ + public function __toString() { + return "Class A object"; + } +} + +class classWithoutToString +{ +} + +// heredoc string +$heredoc = <<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// add arrays +$index_array = array (1, 2, 3); +$assoc_array = array ('one' => 1, 'two' => 2); + +//array of values to iterate over +$inputs = array( + + // int data + 'int 0' => 0, + 'int 1' => 1, + 'int 12345' => 12345, + 'int -12345' => -2345, + + // float data + 'float 10.5' => 10.5, + 'float -10.5' => -10.5, + 'float 12.3456789000e10' => 12.3456789000e10, + 'float -12.3456789000e10' => -12.3456789000e10, + 'float .5' => .5, + + // array data + 'empty array' => array(), + 'int indexed array' => $index_array, + 'associative array' => $assoc_array, + 'nested arrays' => array('foo', $index_array, $assoc_array), + + // null data + 'uppercase NULL' => NULL, + 'lowercase null' => null, + + // boolean data + 'lowercase true' => true, + 'lowercase false' =>false, + 'uppercase TRUE' =>TRUE, + 'uppercase FALSE' =>FALSE, + + // empty data + 'empty string DQ' => "", + 'empty string SQ' => '', + + // string data + 'string DQ' => "string", + 'string SQ' => 'string', + 'mixed case string' => "sTrInG", + 'heredoc' => $heredoc, + + // object data + 'instance of classWithToString' => new classWithToString(), + 'instance of classWithoutToString' => new classWithoutToString(), + + // undefined data + 'undefined var' => @$undefined_var, + + // unset data + 'unset var' => @$unset_var, + + // resource variable + 'resource' => $fp +); + +// loop through each element of the array for part + +foreach($inputs as $key =>$value) { + echo "\n--$key--\n"; + $res = mb_strrichr($haystack, $needle, $value, $encoding); + if ($res === false) { + var_dump($res); + } + else { + var_dump(bin2hex($res)); + } +}; + +fclose($fp); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_strrichr() : usage variation *** + +--int 0-- +string(8) "5f76616c" + +--int 1-- +string(12) "737472696e67" + +--int 12345-- +string(12) "737472696e67" + +--int -12345-- +string(12) "737472696e67" + +--float 10.5-- +string(12) "737472696e67" + +--float -10.5-- +string(12) "737472696e67" + +--float 12.3456789000e10-- +string(12) "737472696e67" + +--float -12.3456789000e10-- +string(12) "737472696e67" + +--float .5-- +string(12) "737472696e67" + +--empty array-- +Error: 2 - mb_strrichr() expects parameter 3 to be boolean, array given, %s(%d) +bool(false) + +--int indexed array-- +Error: 2 - mb_strrichr() expects parameter 3 to be boolean, array given, %s(%d) +bool(false) + +--associative array-- +Error: 2 - mb_strrichr() expects parameter 3 to be boolean, array given, %s(%d) +bool(false) + +--nested arrays-- +Error: 2 - mb_strrichr() expects parameter 3 to be boolean, array given, %s(%d) +bool(false) + +--uppercase NULL-- +string(8) "5f76616c" + +--lowercase null-- +string(8) "5f76616c" + +--lowercase true-- +string(12) "737472696e67" + +--lowercase false-- +string(8) "5f76616c" + +--uppercase TRUE-- +string(12) "737472696e67" + +--uppercase FALSE-- +string(8) "5f76616c" + +--empty string DQ-- +string(8) "5f76616c" + +--empty string SQ-- +string(8) "5f76616c" + +--string DQ-- +string(12) "737472696e67" + +--string SQ-- +string(12) "737472696e67" + +--mixed case string-- +string(12) "737472696e67" + +--heredoc-- +string(12) "737472696e67" + +--instance of classWithToString-- +Error: 2 - mb_strrichr() expects parameter 3 to be boolean, object given, %s(%d) +bool(false) + +--instance of classWithoutToString-- +Error: 2 - mb_strrichr() expects parameter 3 to be boolean, object given, %s(%d) +bool(false) + +--undefined var-- +string(8) "5f76616c" + +--unset var-- +string(8) "5f76616c" + +--resource-- +Error: 2 - mb_strrichr() expects parameter 3 to be boolean, resource given, %s(%d) +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strrichr_variation4.phpt b/ext/mbstring/tests/mb_strrichr_variation4.phpt new file mode 100644 index 0000000..d2e5754 --- /dev/null +++ b/ext/mbstring/tests/mb_strrichr_variation4.phpt @@ -0,0 +1,227 @@ +--TEST-- +Test mb_strrichr() function : usage variation - different encoding types +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrichr') or die("skip mb_strrichr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strrichr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds the last occurrence of a character in a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strrichr() : usage variation ***\n"; + +// Define error handler +function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { + if (error_reporting() != 0) { + // report non-silenced errors + echo "Error: $err_no - $err_msg, $filename($linenum)\n"; + } +} +set_error_handler('test_error_handler'); + +// Initialise function arguments not being substituted (if any) +$haystack = b'string_val'; +$needle = b'_'; +$part = true; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// define some classes +class classWithToString +{ + public function __toString() { + return "invalid"; + } +} + +class classWithoutToString +{ +} + +// heredoc string +$heredoc = <<<EOT +invalid +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// add arrays +$index_array = array (1, 2, 3); +$assoc_array = array ('one' => 1, 'two' => 2); + +//array of values to iterate over +$inputs = array( + + // int data + 'int 0' => 0, + 'int 1' => 1, + 'int 12345' => 12345, + 'int -12345' => -2345, + + // float data + 'float 10.5' => 10.5, + 'float -10.5' => -10.5, + 'float 12.3456789000e10' => 12.3456789000e10, + 'float -12.3456789000e10' => -12.3456789000e10, + 'float .5' => .5, + + // array data + 'empty array' => array(), + 'int indexed array' => $index_array, + 'associative array' => $assoc_array, + 'nested arrays' => array('foo', $index_array, $assoc_array), + + // null data + 'uppercase NULL' => NULL, + 'lowercase null' => null, + + // boolean data + 'lowercase true' => true, + 'lowercase false' =>false, + 'uppercase TRUE' =>TRUE, + 'uppercase FALSE' =>FALSE, + + // empty data + 'empty string DQ' => "", + 'empty string SQ' => '', + + // object data + 'instance of classWithToString' => new classWithToString(), + 'instance of classWithoutToString' => new classWithoutToString(), + + // undefined data + 'undefined var' => @$undefined_var, + + // unset data + 'unset var' => @$unset_var, + + // resource variable + 'resource' => $fp +); + +// loop through each element of the array for encoding + +foreach($inputs as $key =>$value) { + echo "\n--$key--\n"; + var_dump( mb_strrichr($haystack, $needle, $part, $value) ); +}; + +fclose($fp); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_strrichr() : usage variation *** + +--int 0-- +Error: 2 - mb_strrichr(): Unknown encoding "0", %s(%d) +bool(false) + +--int 1-- +Error: 2 - mb_strrichr(): Unknown encoding "1", %s(%d) +bool(false) + +--int 12345-- +Error: 2 - mb_strrichr(): Unknown encoding "12345", %s(%d) +bool(false) + +--int -12345-- +Error: 2 - mb_strrichr(): Unknown encoding "-2345", %s(%d) +bool(false) + +--float 10.5-- +Error: 2 - mb_strrichr(): Unknown encoding "10.5", %s(%d) +bool(false) + +--float -10.5-- +Error: 2 - mb_strrichr(): Unknown encoding "-10.5", %s(%d) +bool(false) + +--float 12.3456789000e10-- +Error: 2 - mb_strrichr(): Unknown encoding "123456789000", %s(%d) +bool(false) + +--float -12.3456789000e10-- +Error: 2 - mb_strrichr(): Unknown encoding "-123456789000", %s(%d) +bool(false) + +--float .5-- +Error: 2 - mb_strrichr(): Unknown encoding "0.5", %s(%d) +bool(false) + +--empty array-- +Error: 2 - mb_strrichr() expects parameter 4 to be string, array given, %s(%d) +bool(false) + +--int indexed array-- +Error: 2 - mb_strrichr() expects parameter 4 to be string, array given, %s(%d) +bool(false) + +--associative array-- +Error: 2 - mb_strrichr() expects parameter 4 to be string, array given, %s(%d) +bool(false) + +--nested arrays-- +Error: 2 - mb_strrichr() expects parameter 4 to be string, array given, %s(%d) +bool(false) + +--uppercase NULL-- +Error: 2 - mb_strrichr(): Unknown encoding "", %s(%d) +bool(false) + +--lowercase null-- +Error: 2 - mb_strrichr(): Unknown encoding "", %s(%d) +bool(false) + +--lowercase true-- +Error: 2 - mb_strrichr(): Unknown encoding "1", %s(%d) +bool(false) + +--lowercase false-- +Error: 2 - mb_strrichr(): Unknown encoding "", %s(%d) +bool(false) + +--uppercase TRUE-- +Error: 2 - mb_strrichr(): Unknown encoding "1", %s(%d) +bool(false) + +--uppercase FALSE-- +Error: 2 - mb_strrichr(): Unknown encoding "", %s(%d) +bool(false) + +--empty string DQ-- +Error: 2 - mb_strrichr(): Unknown encoding "", %s(%d) +bool(false) + +--empty string SQ-- +Error: 2 - mb_strrichr(): Unknown encoding "", %s(%d) +bool(false) + +--instance of classWithToString-- +Error: 2 - mb_strrichr(): Unknown encoding "invalid", %s(%d) +bool(false) + +--instance of classWithoutToString-- +Error: 2 - mb_strrichr() expects parameter 4 to be string, object given, %s(%d) +bool(false) + +--undefined var-- +Error: 2 - mb_strrichr(): Unknown encoding "", %s(%d) +bool(false) + +--unset var-- +Error: 2 - mb_strrichr(): Unknown encoding "", %s(%d) +bool(false) + +--resource-- +Error: 2 - mb_strrichr() expects parameter 4 to be string, resource given, %s(%d) +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strrichr_variation5.phpt b/ext/mbstring/tests/mb_strrichr_variation5.phpt new file mode 100644 index 0000000..417f53f --- /dev/null +++ b/ext/mbstring/tests/mb_strrichr_variation5.phpt @@ -0,0 +1,69 @@ +--TEST-- +Test mb_strrichr() function : usage variation - multiple needles +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrichr') or die("skip mb_strrichr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strrichr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds the last occurrence of a character in a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strrichr() : basic functionality ***\n"; + +mb_internal_encoding('UTF-8'); + +//ascii mixed case, multiple needles +$string_ascii = b'abcDef zBcDyx'; +$needle_ascii_upper = b"BCD"; +$needle_ascii_mixed = b"bCd"; +$needle_ascii_lower = b"bcd"; + +//Greek string in mixed case UTF-8 with multiple needles +$string_mb = base64_decode('zrrOu868zr3Ovs6fzqDOoSDOus67zpzOnc6+zr/OoA=='); +$needle_mb_upper = base64_decode('zpzOnc6ezp8='); +$needle_mb_lower = base64_decode('zrzOvc6+zr8='); +$needle_mb_mixed = base64_decode('zpzOnc6+zr8='); + +echo "\n-- ASCII string: needle exists --\n"; +var_dump(bin2hex(mb_strrichr($string_ascii, $needle_ascii_upper, false))); +var_dump(bin2hex(mb_strrichr($string_ascii, $needle_ascii_upper, true))); +var_dump(bin2hex(mb_strrichr($string_ascii, $needle_ascii_lower, false))); +var_dump(bin2hex(mb_strrichr($string_ascii, $needle_ascii_lower, true))); +var_dump(bin2hex(mb_strrichr($string_ascii, $needle_ascii_mixed, false))); +var_dump(bin2hex(mb_strrichr($string_ascii, $needle_ascii_mixed, true))); + + +echo "\n-- Multibyte string: needle exists --\n"; +var_dump(bin2hex(mb_strrichr($string_mb, $needle_mb_upper, false))); +var_dump(bin2hex(mb_strrichr($string_mb, $needle_mb_upper, true))); +var_dump(bin2hex(mb_strrichr($string_mb, $needle_mb_lower, false))); +var_dump(bin2hex(mb_strrichr($string_mb, $needle_mb_lower, true))); +var_dump(bin2hex(mb_strrichr($string_mb, $needle_mb_mixed, false))); +var_dump(bin2hex(mb_strrichr($string_mb, $needle_mb_mixed, true))); + +?> +===DONE=== +--EXPECT-- +*** Testing mb_strrichr() : basic functionality *** + +-- ASCII string: needle exists -- +string(10) "4263447978" +string(16) "616263446566207a" +string(10) "4263447978" +string(16) "616263446566207a" +string(10) "4263447978" +string(16) "616263446566207a" + +-- Multibyte string: needle exists -- +string(20) "ce9cce9dcebecebfcea0" +string(42) "cebacebbcebccebdcebece9fcea0cea120cebacebb" +string(20) "ce9cce9dcebecebfcea0" +string(42) "cebacebbcebccebdcebece9fcea0cea120cebacebb" +string(20) "ce9cce9dcebecebfcea0" +string(42) "cebacebbcebccebdcebece9fcea0cea120cebacebb" +===DONE===
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_strripos_basic.phpt b/ext/mbstring/tests/mb_strripos_basic.phpt new file mode 100644 index 0000000..32787a6 --- /dev/null +++ b/ext/mbstring/tests/mb_strripos_basic.phpt @@ -0,0 +1,158 @@ +--TEST-- +Test mb_strripos() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strripos') or die("skip mb_strripos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strripos(string haystack, string needle [, int offset [, string encoding]]) + * Description: Finds position of last occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +/* + * Test basic functionality of mb_strripos with ASCII and multibyte characters + */ + +echo "*** Testing mb_strripos() : basic functionality***\n"; + +mb_internal_encoding('UTF-8'); + +//ascii strings +$ascii_haystacks = array( + b'abc defabc def', + b'ABC DEFABC DEF', + b'Abc dEFaBC Def', +); + +$ascii_needles = array( + // 4 good ones + b'DE', + b'de', + b'De', + b'dE', + + //flag a swap between good and bad + '!', + + // 4 bad ones + b'df', + b'Df', + b'dF', + b'DF' +); + +//greek strings in UTF-8 +$greek_lower = base64_decode('zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J'); +$greek_upper = base64_decode('zpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6p'); +$greek_mixed = base64_decode('zrHOss6TzpTOlc6WzpfOmM65zrrOu868zr3Ovs6fzqDOoc6jzqTOpc+Gz4fPiM+J'); +$greek_haystacks = array($greek_lower, $greek_upper, $greek_mixed); + +$greek_nlower = base64_decode('zrzOvc6+zr8='); +$greek_nupper = base64_decode('zpzOnc6ezp8='); +$greek_nmixed1 = base64_decode('zpzOnc6+zr8='); +$greek_nmixed2 = base64_decode('zrzOvc6+zp8='); + +$greek_blower = base64_decode('zpzOns6f'); +$greek_bupper = base64_decode('zrzOvs6/'); +$greek_bmixed1 = base64_decode('zpzOvs6/'); +$greek_bmixed2 = base64_decode('zrzOvs6f'); +$greek_needles = array( + // 4 good ones + $greek_nlower, $greek_nupper, $greek_nmixed1, $greek_nmixed2, + + '!', // used to flag a swap between good and bad + + // 4 bad ones + $greek_blower, $greek_bupper, $greek_bmixed1, $greek_bmixed2, +); + +// try the basic options +echo "\n -- ASCII Strings, needle should be found --\n"; +foreach ($ascii_needles as $needle) { + if ($needle == '!') { + echo "\n -- ASCII Strings, needle should not be found --\n"; + } + else { + foreach ($ascii_haystacks as $haystack) { + var_dump(mb_strripos($haystack, $needle)); + } + } +} + +echo "\n -- Greek Strings, needle should be found --\n"; +foreach ($greek_needles as $needle) { + if ($needle == '!') { + echo "\n -- ASCII Strings, needle should not be found --\n"; + } + else { + foreach ($greek_haystacks as $haystack) { + var_dump(mb_strripos($haystack, $needle)); + } + } +} + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strripos() : basic functionality*** + + -- ASCII Strings, needle should be found -- +int(13) +int(13) +int(13) +int(13) +int(13) +int(13) +int(13) +int(13) +int(13) +int(13) +int(13) +int(13) + + -- ASCII Strings, needle should not be found -- +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) + + -- Greek Strings, needle should be found -- +int(11) +int(11) +int(11) +int(11) +int(11) +int(11) +int(11) +int(11) +int(11) +int(11) +int(11) +int(11) + + -- ASCII Strings, needle should not be found -- +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +bool(false) +Done diff --git a/ext/mbstring/tests/mb_strripos_basic2.phpt b/ext/mbstring/tests/mb_strripos_basic2.phpt new file mode 100644 index 0000000..9d7befc --- /dev/null +++ b/ext/mbstring/tests/mb_strripos_basic2.phpt @@ -0,0 +1,128 @@ +--TEST-- +Test mb_strripos() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strripos') or die("skip mb_strripos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strripos(string haystack, string needle [, int offset [, string encoding]]) + * Description: Finds position of last occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +/* + * Test basic functionality of mb_strripos with ASCII and multibyte characters + */ + +echo "*** Testing mb_strripos() : basic functionality***\n"; + +mb_internal_encoding('UTF-8'); + +//ascii strings +$ascii_haystacks = array( + b'abc defabc def', + b'ABC DEFABC DEF', + b'Abc dEFaBC Def', +); + +$ascii_needles = array( + // 4 good ones + b'DE', + b'de', + b'De', + b'dE', +); + +//greek strings in UTF-8 +$greek_lower = base64_decode('zrrOu868zr3Ovs6/z4DPgSDOus67zrzOvc6+zr/PgA=='); +$greek_upper = base64_decode('zprOm86czp3Ons6fzqDOoSDOms6bzpzOnc6ezp/OoA=='); +$greek_mixed = base64_decode('zrrOu868zr3Ovs6fzqDOoSDOus67zpzOnc6+zr/OoA=='); +$greek_haystacks = array($greek_lower, $greek_upper, $greek_mixed); + +$greek_nlower = base64_decode('zrzOvc6+zr8='); +$greek_nupper = base64_decode('zpzOnc6ezp8='); +$greek_nmixed1 = base64_decode('zpzOnc6+zr8='); +$greek_nmixed2 = base64_decode('zrzOvc6+zp8='); + +$greek_needles = array( + // 4 good ones + $greek_nlower, $greek_nupper, $greek_nmixed1, $greek_nmixed2, +); + +// try the basic options +echo "\n -- ASCII Strings --\n"; +foreach ($ascii_needles as $needle) { + foreach ($ascii_haystacks as $haystack) { + var_dump(mb_strripos($haystack, $needle)); + var_dump(mb_strripos($haystack, $needle, 14)); + } +} + +echo "\n -- Greek Strings --\n"; +foreach ($greek_needles as $needle) { + foreach ($greek_haystacks as $haystack) { + var_dump(mb_strripos($haystack, $needle)); + var_dump(mb_strripos($haystack, $needle, 12)); + } +} + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strripos() : basic functionality*** + + -- ASCII Strings -- +int(13) +bool(false) +int(13) +bool(false) +int(13) +bool(false) +int(13) +bool(false) +int(13) +bool(false) +int(13) +bool(false) +int(13) +bool(false) +int(13) +bool(false) +int(13) +bool(false) +int(13) +bool(false) +int(13) +bool(false) +int(13) +bool(false) + + -- Greek Strings -- +int(11) +bool(false) +int(11) +bool(false) +int(11) +bool(false) +int(11) +bool(false) +int(11) +bool(false) +int(11) +bool(false) +int(11) +bool(false) +int(11) +bool(false) +int(11) +bool(false) +int(11) +bool(false) +int(11) +bool(false) +int(11) +bool(false) +Done diff --git a/ext/mbstring/tests/mb_strripos_error1.phpt b/ext/mbstring/tests/mb_strripos_error1.phpt new file mode 100644 index 0000000..9d114d5 --- /dev/null +++ b/ext/mbstring/tests/mb_strripos_error1.phpt @@ -0,0 +1,51 @@ +--TEST-- +Test mb_strripos() function : error conditions - Pass incorrect number of args +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strripos') or die("skip mb_strripos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strripos(string haystack, string needle [, int offset [, string encoding]]) + * Description: Finds position of last occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +/* + * Test how mb_strripos behaves when passed an incorrect number of arguments + */ + +echo "*** Testing mb_strripos() : error conditions ***\n"; + + +//Test mb_strripos with one more than the expected number of arguments +echo "\n-- Testing mb_strripos() function with more than expected no. of arguments --\n"; +$haystack = b'string_val'; +$needle = b'string_val'; +$offset = 10; +$encoding = 'string_val'; +$extra_arg = 10; +var_dump( mb_strripos($haystack, $needle, $offset, $encoding, $extra_arg) ); + +// Testing mb_strripos with one less than the expected number of arguments +echo "\n-- Testing mb_strripos() function with less than expected no. of arguments --\n"; +$haystack = b'string_val'; +var_dump( mb_strripos($haystack) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strripos() : error conditions *** + +-- Testing mb_strripos() function with more than expected no. of arguments -- + +Warning: mb_strripos() expects at most 4 parameters, 5 given in %s on line %d +bool(false) + +-- Testing mb_strripos() function with less than expected no. of arguments -- + +Warning: mb_strripos() expects at least 2 parameters, 1 given in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_strripos_error2.phpt b/ext/mbstring/tests/mb_strripos_error2.phpt new file mode 100644 index 0000000..4790ffb --- /dev/null +++ b/ext/mbstring/tests/mb_strripos_error2.phpt @@ -0,0 +1,35 @@ +--TEST-- +Test mb_strripos() function : error conditions - Pass unknown encoding +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strripos') or die("skip mb_strripos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strripos(string haystack, string needle [, int offset [, string encoding]]) + * Description: Finds position of last occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +/* + * Pass an unknown encoding to mb_strripos() to test behaviour + */ + +echo "*** Testing mb_strripos() : error conditions ***\n"; +$haystack = b'Hello, world'; +$needle = b'world'; +$offset = 2; +$encoding = 'unknown-encoding'; + +var_dump( mb_strripos($haystack, $needle, $offset, $encoding) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strripos() : error conditions *** + +Warning: mb_strripos(): Unknown encoding "unknown-encoding" in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_strripos_variation1.phpt b/ext/mbstring/tests/mb_strripos_variation1.phpt new file mode 100644 index 0000000..704b501 --- /dev/null +++ b/ext/mbstring/tests/mb_strripos_variation1.phpt @@ -0,0 +1,183 @@ +--TEST-- +Test mb_strripos() function : usage variations - pass different data types to $haystack arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strripos') or die("skip mb_strripos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strripos(string haystack, string needle [, int offset [, string encoding]]) + * Description: Finds position of last occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +/* + * Pass mb_strripos different data types as $haystack arg to test behaviour + */ + +echo "*** Testing mb_strripos() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$needle = b'string_val'; +$offset = 0; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return b"Class A object"; + } +} + +// heredoc string +$heredoc = b<<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $haystack argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "string", + 'string', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_strripos() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_strripos($input, $needle, $offset, $encoding)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strripos() : usage variations *** + +-- Iteration 1 -- +bool(false) + +-- Iteration 2 -- +bool(false) + +-- Iteration 3 -- +bool(false) + +-- Iteration 4 -- +bool(false) + +-- Iteration 5 -- +bool(false) + +-- Iteration 6 -- +bool(false) + +-- Iteration 7 -- +bool(false) + +-- Iteration 8 -- +bool(false) + +-- Iteration 9 -- +bool(false) + +-- Iteration 10 -- +bool(false) + +-- Iteration 11 -- +bool(false) + +-- Iteration 12 -- +bool(false) + +-- Iteration 13 -- +bool(false) + +-- Iteration 14 -- +bool(false) + +-- Iteration 15 -- +bool(false) + +-- Iteration 16 -- +bool(false) + +-- Iteration 17 -- +bool(false) + +-- Iteration 18 -- +bool(false) + +-- Iteration 19 -- +bool(false) + +-- Iteration 20 -- +bool(false) + +-- Iteration 21 -- +bool(false) + +-- Iteration 22 -- +bool(false) + +-- Iteration 23 -- +bool(false) + +-- Iteration 24 -- + +Warning: mb_strripos() expects parameter 1 to be string, resource given in %s on line %d +bool(false) +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_strripos_variation2.phpt b/ext/mbstring/tests/mb_strripos_variation2.phpt new file mode 100644 index 0000000..61196f0 --- /dev/null +++ b/ext/mbstring/tests/mb_strripos_variation2.phpt @@ -0,0 +1,183 @@ +--TEST-- +Test mb_strripos() function : usage variations - pass different data types as $needle arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strripos') or die("skip mb_strripos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strripos(string haystack, string needle [, int offset [, string encoding]]) + * Description: Finds position of last occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +/* + * Pass mb_strripos different data types as $needle arg to test behaviour + */ + +echo "*** Testing mb_strripos() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$haystack = b'string_val'; +$offset = 0; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return b"Class A object"; + } +} + +// heredoc string +$heredoc = b<<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $needle argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ b"string", + b'string', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_strripos() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_strripos($haystack, $input, $offset, $encoding)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strripos() : usage variations *** + +-- Iteration 1 -- +bool(false) + +-- Iteration 2 -- +bool(false) + +-- Iteration 3 -- +bool(false) + +-- Iteration 4 -- +bool(false) + +-- Iteration 5 -- +bool(false) + +-- Iteration 6 -- +bool(false) + +-- Iteration 7 -- +bool(false) + +-- Iteration 8 -- +bool(false) + +-- Iteration 9 -- +bool(false) + +-- Iteration 10 -- +bool(false) + +-- Iteration 11 -- +bool(false) + +-- Iteration 12 -- +bool(false) + +-- Iteration 13 -- +bool(false) + +-- Iteration 14 -- +bool(false) + +-- Iteration 15 -- +bool(false) + +-- Iteration 16 -- +bool(false) + +-- Iteration 17 -- +bool(false) + +-- Iteration 18 -- +int(0) + +-- Iteration 19 -- +int(0) + +-- Iteration 20 -- +bool(false) + +-- Iteration 21 -- +bool(false) + +-- Iteration 22 -- +bool(false) + +-- Iteration 23 -- +bool(false) + +-- Iteration 24 -- + +Warning: mb_strripos() expects parameter 2 to be string, resource given in %s on line %d +bool(false) +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_strripos_variation3_Bug45923.phpt b/ext/mbstring/tests/mb_strripos_variation3_Bug45923.phpt new file mode 100644 index 0000000..c8fb933 --- /dev/null +++ b/ext/mbstring/tests/mb_strripos_variation3_Bug45923.phpt @@ -0,0 +1,206 @@ +--TEST-- +Test mb_strripos() function : usage variations - pass different data types as $offset arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strripos') or die("skip mb_strripos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strripos(string haystack, string needle [, int offset [, string encoding]]) + * Description: Finds position of last occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +/* + * Pass mb_strripos different data types as $offset arg to test behaviour + */ + +echo "*** Testing mb_strripos() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$needle = b'A'; +$haystack = b'string_val'; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return b"Class A object"; + } +} + +// heredoc string +$heredoc = b<<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $offest argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 12.5, + -12.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ b"string", + b'string', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_strripos() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_strripos($haystack, $needle, $input, $encoding)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strripos() : usage variations *** + +-- Iteration 1 -- +int(8) + +-- Iteration 2 -- +int(8) + +-- Iteration 3 -- + +Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) + +-- Iteration 4 -- + +Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) + +-- Iteration 5 -- + +Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) + +-- Iteration 6 -- + +Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) + +-- Iteration 7 -- + +Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) + +-- Iteration 8 -- +int(8) + +-- Iteration 9 -- +int(8) + +-- Iteration 10 -- +int(8) + +-- Iteration 11 -- +int(8) + +-- Iteration 12 -- +int(8) + +-- Iteration 13 -- +int(8) + +-- Iteration 14 -- +int(8) + +-- Iteration 15 -- +int(8) + +-- Iteration 16 -- + +Warning: mb_strripos() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 17 -- + +Warning: mb_strripos() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 18 -- + +Warning: mb_strripos() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 19 -- + +Warning: mb_strripos() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 20 -- + +Warning: mb_strripos() expects parameter 3 to be long, string given in %s on line %d +bool(false) + +-- Iteration 21 -- + +Warning: mb_strripos() expects parameter 3 to be long, object given in %s on line %d +bool(false) + +-- Iteration 22 -- +int(8) + +-- Iteration 23 -- +int(8) + +-- Iteration 24 -- + +Warning: mb_strripos() expects parameter 3 to be long, resource given in %s on line %d +bool(false) +Done + diff --git a/ext/mbstring/tests/mb_strripos_variation4.phpt b/ext/mbstring/tests/mb_strripos_variation4.phpt new file mode 100644 index 0000000..d617872 --- /dev/null +++ b/ext/mbstring/tests/mb_strripos_variation4.phpt @@ -0,0 +1,223 @@ +--TEST-- +Test mb_strripos() function : usage variations - pass different data types as $encoding arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strripos') or die("skip mb_strripos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strripos(string haystack, string needle [, int offset [, string encoding]]) + * Description: Finds position of last occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +/* + * Pass mb_strripos different data types as $encoding arg to test behaviour + * Where possible 'UTF-8' has been entered as a string value + */ + +echo "*** Testing mb_strripos() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$haystack = b'string_val'; +$needle = b'VaL'; +$offset = 0; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "UTF-8"; + } +} + +// heredoc string +$heredoc = <<<EOT +UTF-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $input argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "UTF-8", + 'UTF-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_strripos() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_strripos($haystack, $needle, $offset, $input)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_strripos() : usage variations *** + +-- Iteration 1 -- + +Warning: mb_strripos(): Unknown encoding "0" in %s on line %d +bool(false) + +-- Iteration 2 -- + +Warning: mb_strripos(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 3 -- + +Warning: mb_strripos(): Unknown encoding "12345" in %s on line %d +bool(false) + +-- Iteration 4 -- + +Warning: mb_strripos(): Unknown encoding "-2345" in %s on line %d +bool(false) + +-- Iteration 5 -- + +Warning: mb_strripos(): Unknown encoding "10.5" in %s on line %d +bool(false) + +-- Iteration 6 -- + +Warning: mb_strripos(): Unknown encoding "-10.5" in %s on line %d +bool(false) + +-- Iteration 7 -- + +Warning: mb_strripos(): Unknown encoding "123456789000" in %s on line %d +bool(false) + +-- Iteration 8 -- + +Warning: mb_strripos(): Unknown encoding "1.23456789E-9" in %s on line %d +bool(false) + +-- Iteration 9 -- + +Warning: mb_strripos(): Unknown encoding "0.5" in %s on line %d +bool(false) + +-- Iteration 10 -- + +Warning: mb_strripos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 11 -- + +Warning: mb_strripos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 12 -- + +Warning: mb_strripos(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 13 -- + +Warning: mb_strripos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 14 -- + +Warning: mb_strripos(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 15 -- + +Warning: mb_strripos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 16 -- + +Warning: mb_strripos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 17 -- + +Warning: mb_strripos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 18 -- +int(7) + +-- Iteration 19 -- +int(7) + +-- Iteration 20 -- +int(7) + +-- Iteration 21 -- +int(7) + +-- Iteration 22 -- + +Warning: mb_strripos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 23 -- + +Warning: mb_strripos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 24 -- + +Warning: mb_strripos() expects parameter 4 to be string, resource given in %s on line %d +bool(false) +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_strripos_variation5_Bug45923.phpt b/ext/mbstring/tests/mb_strripos_variation5_Bug45923.phpt new file mode 100644 index 0000000..8bd0e2e --- /dev/null +++ b/ext/mbstring/tests/mb_strripos_variation5_Bug45923.phpt @@ -0,0 +1,115 @@ +--TEST-- +Test mb_strripos() function : usage variations - Pass different integers as $offset argument +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strripos') or die("skip mb_strripos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strripos(string haystack, string needle [, int offset [, string encoding]]) + * Description: Finds position of last occurrence of a string within another, case insensitive + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +/* + * Test how mb_strripos() behaves when passed different integers as $offset argument + * The character length of $string_ascii and $string_mb is the same, + * and the needle appears at the same positions in both strings + */ + +mb_internal_encoding('UTF-8'); + +echo "*** Testing mb_strripos() : usage variations ***\n"; + +$string_ascii = b'+Is an English string'; //21 chars +$needle_ascii = b'G'; + +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); //21 chars +$needle_mb = base64_decode('44CC'); + +/* + * Loop through integers as multiples of ten for $offset argument + * mb_strripos should not be able to accept negative values as $offset. + * 60 is larger than *BYTE* count for $string_mb + */ +for ($i = -10; $i <= 60; $i += 10) { + echo "\n**-- Offset is: $i --**\n"; + echo "-- ASCII String --\n"; + var_dump(mb_strripos($string_ascii, $needle_ascii, $i)); + echo "--Multibyte String --\n"; + var_dump(mb_strripos($string_mb, $needle_mb, $i, 'UTF-8')); +} + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_strripos() : usage variations *** + +**-- Offset is: -10 --** +-- ASCII String -- +int(9) +--Multibyte String -- +int(9) + +**-- Offset is: 0 --** +-- ASCII String -- +int(20) +--Multibyte String -- +int(20) + +**-- Offset is: 10 --** +-- ASCII String -- +int(20) +--Multibyte String -- +int(20) + +**-- Offset is: 20 --** +-- ASCII String -- +int(20) +--Multibyte String -- +int(20) + +**-- Offset is: 30 --** +-- ASCII String -- + +Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) +--Multibyte String -- + +Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) + +**-- Offset is: 40 --** +-- ASCII String -- + +Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) +--Multibyte String -- + +Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) + +**-- Offset is: 50 --** +-- ASCII String -- + +Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) +--Multibyte String -- + +Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) + +**-- Offset is: 60 --** +-- ASCII String -- + +Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) +--Multibyte String -- + +Warning: mb_strripos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) +Done + diff --git a/ext/mbstring/tests/mb_strrpos_basic.phpt b/ext/mbstring/tests/mb_strrpos_basic.phpt new file mode 100644 index 0000000..ec6b86c --- /dev/null +++ b/ext/mbstring/tests/mb_strrpos_basic.phpt @@ -0,0 +1,58 @@ +--TEST-- +Test mb_strrpos() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrpos') or die("skip mb_strrpos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strrpos(string $haystack, string $needle [, int $offset [, string $encoding]]) + * Description: Find position of last occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test basic functionality of mb_strrpos() + */ + +echo "*** Testing mb_strrpos() : basic ***\n"; + +mb_internal_encoding('UTF-8'); + +$string_ascii = b'This is an English string. 0123456789.'; +//Japanese string in UTF-8 +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); + +echo "\n-- ASCII string 1 --\n"; +var_dump(mb_strrpos($string_ascii, b'is', 4, 'ISO-8859-1')); + +echo "\n-- ASCII string 2 --\n"; +var_dump(mb_strrpos($string_ascii, b'hello, world')); + +echo "\n-- Multibyte string 1 --\n"; +$needle1 = base64_decode('44CC'); +var_dump(mb_strrpos($string_mb, $needle1)); + +echo "\n-- Multibyte string 2 --\n"; +$needle2 = base64_decode('44GT44KT44Gr44Gh44Gv44CB5LiW55WM'); +var_dump(mb_strrpos($string_mb, $needle2)); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strrpos() : basic *** + +-- ASCII string 1 -- +int(15) + +-- ASCII string 2 -- +bool(false) + +-- Multibyte string 1 -- +int(20) + +-- Multibyte string 2 -- +bool(false) +Done + diff --git a/ext/mbstring/tests/mb_strrpos_error1.phpt b/ext/mbstring/tests/mb_strrpos_error1.phpt new file mode 100644 index 0000000..15228fe --- /dev/null +++ b/ext/mbstring/tests/mb_strrpos_error1.phpt @@ -0,0 +1,50 @@ +--TEST-- +Test mb_strrpos() function : error conditions - pass incorrect number of args +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrpos') or die("skip mb_strrpos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strrpos(string $haystack, string $needle [, int $offset [, string $encoding]]) + * Description: Find position of last occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass mb_strrpos() an incorrect number of arguments + */ + +echo "*** Testing mb_strrpos() : error conditions ***\n"; + + +//Test mb_strrpos with one more than the expected number of arguments +echo "\n-- Testing mb_strrpos() function with more than expected no. of arguments --\n"; +$haystack = 'string_val'; +$needle = 'string_val'; +$offset = 10; +$encoding = 'string_val'; +$extra_arg = 10; +var_dump( mb_strrpos($haystack, $needle, $offset, $encoding, $extra_arg) ); + +// Testing mb_strrpos with one less than the expected number of arguments +echo "\n-- Testing mb_strrpos() function with less than expected no. of arguments --\n"; +$haystack = 'string_val'; +var_dump( mb_strrpos($haystack) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strrpos() : error conditions *** + +-- Testing mb_strrpos() function with more than expected no. of arguments -- + +Warning: mb_strrpos() expects at most 4 parameters, 5 given in %s on line %d +bool(false) + +-- Testing mb_strrpos() function with less than expected no. of arguments -- + +Warning: mb_strrpos() expects at least 2 parameters, 1 given in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_strrpos_error2.phpt b/ext/mbstring/tests/mb_strrpos_error2.phpt new file mode 100644 index 0000000..fa37195 --- /dev/null +++ b/ext/mbstring/tests/mb_strrpos_error2.phpt @@ -0,0 +1,35 @@ +--TEST-- +Test mb_strrpos() function : error conditions - pass an unknown encoding +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrpos') or die("skip mb_strrpos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strrpos(string $haystack, string $needle [, int $offset [, string $encoding]]) + * Description: Find position of last occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass mb_strrpos() an encoding that doesn't exist + */ + +echo "*** Testing mb_strrpos() : error conditions ***\n"; + +$haystack = 'This is an English string. 0123456789.'; +$needle = '123'; +$offset = 5; +$encoding = 'unknown-encoding'; + +var_dump(mb_strrpos($haystack, $needle , $offset, $encoding)); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strrpos() : error conditions *** + +Warning: mb_strrpos(): Unknown encoding "unknown-encoding" in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_strrpos_variation1.phpt b/ext/mbstring/tests/mb_strrpos_variation1.phpt new file mode 100644 index 0000000..2d2db90 --- /dev/null +++ b/ext/mbstring/tests/mb_strrpos_variation1.phpt @@ -0,0 +1,181 @@ +--TEST-- +Test mb_strrpos() function : usage variations - pass different data types to $haystack arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrpos') or die("skip mb_strrpos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strrpos(string $haystack, string $needle [, int $offset [, string $encoding]]) + * Description: Find position of last occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass mb_strrpos() different data types as $haystack argument to test behaviour + */ + +echo "*** Testing mb_strrpos() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$needle = b'world'; +$offset = 0; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return b"hello, world"; + } +} + +// heredoc string +$heredoc = b<<<EOT +hello, world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $haystack argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ b"hello, world", + b'hello, world', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_strrpos() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_strrpos($input, $needle, $offset, $encoding)); + $iterator++; +}; + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_strrpos() : usage variations *** + +-- Iteration 1 -- +bool(false) + +-- Iteration 2 -- +bool(false) + +-- Iteration 3 -- +bool(false) + +-- Iteration 4 -- +bool(false) + +-- Iteration 5 -- +bool(false) + +-- Iteration 6 -- +bool(false) + +-- Iteration 7 -- +bool(false) + +-- Iteration 8 -- +bool(false) + +-- Iteration 9 -- +bool(false) + +-- Iteration 10 -- +bool(false) + +-- Iteration 11 -- +bool(false) + +-- Iteration 12 -- +bool(false) + +-- Iteration 13 -- +bool(false) + +-- Iteration 14 -- +bool(false) + +-- Iteration 15 -- +bool(false) + +-- Iteration 16 -- +bool(false) + +-- Iteration 17 -- +bool(false) + +-- Iteration 18 -- +int(7) + +-- Iteration 19 -- +int(7) + +-- Iteration 20 -- +int(7) + +-- Iteration 21 -- +int(7) + +-- Iteration 22 -- +bool(false) + +-- Iteration 23 -- +bool(false) + +-- Iteration 24 -- + +Warning: mb_strrpos() expects parameter 1 to be string, resource given in %s on line %d +bool(false) +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_strrpos_variation2.phpt b/ext/mbstring/tests/mb_strrpos_variation2.phpt new file mode 100644 index 0000000..1566b5c --- /dev/null +++ b/ext/mbstring/tests/mb_strrpos_variation2.phpt @@ -0,0 +1,183 @@ +--TEST-- +Test mb_strrpos() function : usage variations - Pass different data types to $needle arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrpos') or die("skip mb_strrpos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strrpos(string $haystack, string $needle [, int $offset [, string $encoding]]) + * Description: Find position of last occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass mb_strrpos() different data types as $needle argument to test behaviour + */ + +echo "*** Testing mb_strrpos() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$haystack = 'hello, world'; +$offset = 0; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "world"; + } +} + +// heredoc string +$heredoc = <<<EOT +world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $needle argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "world", + 'world', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_strrpos() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_strrpos($haystack, $input, $offset, $encoding)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_strrpos() : usage variations *** + +-- Iteration 1 -- +bool(false) + +-- Iteration 2 -- +bool(false) + +-- Iteration 3 -- +bool(false) + +-- Iteration 4 -- +bool(false) + +-- Iteration 5 -- +bool(false) + +-- Iteration 6 -- +bool(false) + +-- Iteration 7 -- +bool(false) + +-- Iteration 8 -- +bool(false) + +-- Iteration 9 -- +bool(false) + +-- Iteration 10 -- +bool(false) + +-- Iteration 11 -- +bool(false) + +-- Iteration 12 -- +bool(false) + +-- Iteration 13 -- +bool(false) + +-- Iteration 14 -- +bool(false) + +-- Iteration 15 -- +bool(false) + +-- Iteration 16 -- +bool(false) + +-- Iteration 17 -- +bool(false) + +-- Iteration 18 -- +int(7) + +-- Iteration 19 -- +int(7) + +-- Iteration 20 -- +int(7) + +-- Iteration 21 -- +int(7) + +-- Iteration 22 -- +bool(false) + +-- Iteration 23 -- +bool(false) + +-- Iteration 24 -- + +Warning: mb_strrpos() expects parameter 2 to be string, resource given in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_strrpos_variation3.phpt b/ext/mbstring/tests/mb_strrpos_variation3.phpt new file mode 100644 index 0000000..95840f9 --- /dev/null +++ b/ext/mbstring/tests/mb_strrpos_variation3.phpt @@ -0,0 +1,153 @@ +--TEST-- +Test mb_strrpos() function : usage variations - Pass different data types as $offset arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrpos') or die("skip mb_strrpos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strrpos(string $haystack, string $needle [, int $offset [, string $encoding]]) + * Description: Find position of last occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass mb_strrpos() different data types as $offset argument to test behaviour + */ + +echo "*** Testing mb_strrpos() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$needle = b'a'; +$haystack = b'string_val'; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return b"7"; + } +} + +// heredoc string +$heredoc = b<<<EOT +hello world +EOT; + +// unexpected values to be passed to $offset argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // object data +/*16*/ new classA(), + + // undefined data +/*17*/ @$undefined_var, + + // unset data +/*18*/ @$unset_var +); + +// loop through each element of $inputs to check the behavior of mb_strrpos() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_strrpos($haystack, $needle, $input, $encoding)); + $iterator++; +}; + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strrpos() : usage variations *** + +-- Iteration 1 -- +int(8) + +-- Iteration 2 -- +int(8) + +-- Iteration 3 -- + +Warning: mb_strrpos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) + +-- Iteration 4 -- + +Warning: mb_strrpos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) + +-- Iteration 5 -- +bool(false) + +-- Iteration 6 -- +bool(false) + +-- Iteration 7 -- + +Warning: mb_strrpos(): Offset is greater than the length of haystack string in %s on line %d +bool(false) + +-- Iteration 8 -- +int(8) + +-- Iteration 9 -- +int(8) + +-- Iteration 10 -- +int(8) + +-- Iteration 11 -- +int(8) + +-- Iteration 12 -- +int(8) + +-- Iteration 13 -- +int(8) + +-- Iteration 14 -- +int(8) + +-- Iteration 15 -- +int(8) + +-- Iteration 16 -- + +Notice: Object of class classA could not be converted to int in %s on line %d +int(8) + +-- Iteration 17 -- +int(8) + +-- Iteration 18 -- +int(8) +Done diff --git a/ext/mbstring/tests/mb_strrpos_variation4.phpt b/ext/mbstring/tests/mb_strrpos_variation4.phpt new file mode 100644 index 0000000..198ce8f --- /dev/null +++ b/ext/mbstring/tests/mb_strrpos_variation4.phpt @@ -0,0 +1,222 @@ +--TEST-- +Test mb_strrpos() function : usage variations - pass different data types as $encoding arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrpos') or die("skip mb_strrpos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strrpos(string $haystack, string $needle [, int $offset [, string $encoding]]) + * Description: Find position of last occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass mb_strrpos() different data types as $encoding argument to test behaviour + * Where possible 'UTF-8' has been entered as a string value + */ + +echo "*** Testing mb_strrpos() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$haystack = b'hello, world'; +$needle = b'world'; +$offset = 0; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "UTF-8"; + } +} + +// heredoc string +$heredoc = <<<EOT +UTF-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $encoding argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "UTF-8", + 'UTF-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_strrpos() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_strrpos($haystack, $needle, $offset, $input)); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_strrpos() : usage variations *** + +-- Iteration 1 -- + +Warning: mb_strrpos(): Unknown encoding "0" in %s on line %d +bool(false) + +-- Iteration 2 -- + +Warning: mb_strrpos(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 3 -- + +Warning: mb_strrpos(): Unknown encoding "12345" in %s on line %d +bool(false) + +-- Iteration 4 -- + +Warning: mb_strrpos(): Unknown encoding "-2345" in %s on line %d +bool(false) + +-- Iteration 5 -- + +Warning: mb_strrpos(): Unknown encoding "10.5" in %s on line %d +bool(false) + +-- Iteration 6 -- + +Warning: mb_strrpos(): Unknown encoding "-10.5" in %s on line %d +bool(false) + +-- Iteration 7 -- + +Warning: mb_strrpos(): Unknown encoding "123456789000" in %s on line %d +bool(false) + +-- Iteration 8 -- + +Warning: mb_strrpos(): Unknown encoding "1.23456789E-9" in %s on line %d +bool(false) + +-- Iteration 9 -- + +Warning: mb_strrpos(): Unknown encoding "0.5" in %s on line %d +bool(false) + +-- Iteration 10 -- + +Warning: mb_strrpos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 11 -- + +Warning: mb_strrpos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 12 -- + +Warning: mb_strrpos(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 13 -- + +Warning: mb_strrpos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 14 -- + +Warning: mb_strrpos(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 15 -- + +Warning: mb_strrpos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 16 -- + +Warning: mb_strrpos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 17 -- + +Warning: mb_strrpos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 18 -- +int(7) + +-- Iteration 19 -- +int(7) + +-- Iteration 20 -- +int(7) + +-- Iteration 21 -- +int(7) + +-- Iteration 22 -- + +Warning: mb_strrpos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 23 -- + +Warning: mb_strrpos(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 24 -- + +Warning: mb_strrpos() expects parameter 4 to be string, resource given in %s on line %d +bool(false) +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_strrpos_variation5.phpt b/ext/mbstring/tests/mb_strrpos_variation5.phpt new file mode 100644 index 0000000..cb50896 --- /dev/null +++ b/ext/mbstring/tests/mb_strrpos_variation5.phpt @@ -0,0 +1,61 @@ +--TEST-- +Test mb_strrpos() function : usage variations - pass encoding as third argument (deprecated behaviour) +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strrpos') or die("skip mb_strrpos() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_strrpos(string $haystack, string $needle [, int $offset [, string $encoding]]) + * Description: Find position of last occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Testing deprecated behaviour where third argument can be $encoding + */ + +echo "*** Testing mb_strrpos() : usage variations ***\n"; + +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); +$needle_mb = base64_decode('44CC'); + +$stringh = <<<END +utf-8 +END; + +$inputs = array('Double Quoted String' => "utf-8", + 'Single Quoted String' => 'utf-8', + 'Heredoc' => $stringh); +foreach ($inputs as $type => $input) { + echo "\n-- $type --\n"; + echo "-- With fourth encoding argument --\n"; + var_dump(mb_strrpos($string_mb, $needle_mb, $input, 'utf-8')); + echo "-- Without fourth encoding argument --\n"; + var_dump(mb_strrpos($string_mb, $needle_mb, $input)); +} + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strrpos() : usage variations *** + +-- Double Quoted String -- +-- With fourth encoding argument -- +int(20) +-- Without fourth encoding argument -- +int(20) + +-- Single Quoted String -- +-- With fourth encoding argument -- +int(20) +-- Without fourth encoding argument -- +int(20) + +-- Heredoc -- +-- With fourth encoding argument -- +int(20) +-- Without fourth encoding argument -- +int(20) +Done diff --git a/ext/mbstring/tests/mb_strstr.phpt b/ext/mbstring/tests/mb_strstr.phpt new file mode 100644 index 0000000..fcf9e85 --- /dev/null +++ b/ext/mbstring/tests/mb_strstr.phpt @@ -0,0 +1,35 @@ +--TEST-- +mb_strstr() +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +mbstring.internal_encoding=UTF-8 +--FILE-- +<?php +function EUC_JP($utf8str) { + return mb_convert_encoding($utf8str, "EUC-JP", "UTF-8"); +} + +function FROM_EUC_JP($eucjpstr) { + return mb_convert_encoding($eucjpstr, "UTF-8", "EUC-JP"); +} + +var_dump(mb_strstr("ã‚ã„ã†ãˆãŠã‹ããã‘ã“", "ãŠã‹ã")); +var_dump(mb_strstr("ã‚ã„ã†ãˆãŠã‹ããã‘ã“", "ãŠã‹ã", false)); +var_dump(mb_strstr("ã‚ã„ã†ãˆãŠã‹ããã‘ã“", "ãŠã‹ã", true)); +var_dump(FROM_EUC_JP(mb_strstr(EUC_JP("ã‚ã„ã†ãˆãŠã‹ããã‘ã“"), EUC_JP("ãŠã‹ã"), false, "EUC-JP"))); +var_dump(FROM_EUC_JP(mb_strstr(EUC_JP("ã‚ã„ã†ãˆãŠã‹ããã‘ã“"), EUC_JP("ãŠã‹ã"), true, "EUC-JP"))); +mb_internal_encoding("EUC-JP"); +var_dump(FROM_EUC_JP(mb_strstr(EUC_JP("ã‚ã„ã†ãˆãŠã‹ããã‘ã“"), EUC_JP("ãŠã‹ã")))); +var_dump(FROM_EUC_JP(mb_strstr(EUC_JP("ã‚ã„ã†ãˆãŠã‹ããã‘ã“"), EUC_JP("ãŠã‹ã"), false))); +var_dump(FROM_EUC_JP(mb_strstr(EUC_JP("ã‚ã„ã†ãˆãŠã‹ããã‘ã“"), EUC_JP("ãŠã‹ã"), true))); +?> +--EXPECT-- +string(18) "ãŠã‹ããã‘ã“" +string(18) "ãŠã‹ããã‘ã“" +string(12) "ã‚ã„ã†ãˆ" +string(18) "ãŠã‹ããã‘ã“" +string(12) "ã‚ã„ã†ãˆ" +string(18) "ãŠã‹ããã‘ã“" +string(18) "ãŠã‹ããã‘ã“" +string(12) "ã‚ã„ã†ãˆ" diff --git a/ext/mbstring/tests/mb_strstr_basic.phpt b/ext/mbstring/tests/mb_strstr_basic.phpt new file mode 100644 index 0000000..efa1105 --- /dev/null +++ b/ext/mbstring/tests/mb_strstr_basic.phpt @@ -0,0 +1,64 @@ +--TEST-- +Test mb_strstr() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strstr') or die("skip mb_strstr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strstr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds first occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strstr() : basic functionality ***\n"; + +mb_internal_encoding('UTF-8'); + +$string_ascii = b'abc def'; +//Japanese string in UTF-8 +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); + +echo "\n-- ASCII string: needle exists --\n"; +var_dump(bin2hex(mb_strstr($string_ascii, b'd', false, 'ISO-8859-1'))); +var_dump(bin2hex(mb_strstr($string_ascii, b'd'))); +var_dump(bin2hex(mb_strstr($string_ascii, b'd', true))); + + +echo "\n-- ASCII string: needle doesn't exist --\n"; +var_dump(mb_strstr($string_ascii, b'123')); + +echo "\n-- Multibyte string: needle exists --\n"; +$needle1 = base64_decode('5pel5pys6Kqe'); +var_dump(bin2hex(mb_strstr($string_mb, $needle1))); +var_dump(bin2hex(mb_strstr($string_mb, $needle1, false, 'utf-8'))); +var_dump(bin2hex(mb_strstr($string_mb, $needle1, true))); + + +echo "\n-- Multibyte string: needle doesn't exist --\n"; +$needle2 = base64_decode('44GT44KT44Gr44Gh44Gv44CB5LiW55WM'); +var_dump(mb_strstr($string_mb, $needle2)); + +?> +===DONE=== +--EXPECT-- +*** Testing mb_strstr() : basic functionality *** + +-- ASCII string: needle exists -- +string(6) "646566" +string(6) "646566" +string(8) "61626320" + +-- ASCII string: needle doesn't exist -- +bool(false) + +-- Multibyte string: needle exists -- +string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082" +string(106) "e697a5e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082" +string(0) "" + +-- Multibyte string: needle doesn't exist -- +bool(false) +===DONE===
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_strstr_error1.phpt b/ext/mbstring/tests/mb_strstr_error1.phpt new file mode 100644 index 0000000..f38d5c9 --- /dev/null +++ b/ext/mbstring/tests/mb_strstr_error1.phpt @@ -0,0 +1,47 @@ +--TEST-- +Test mb_strstr() function : error conditions +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strstr') or die("skip mb_strstr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strstr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds first occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strstr() : error conditions ***\n"; + + +//Test mb_strstr with one more than the expected number of arguments +echo "\n-- Testing mb_strstr() function with more than expected no. of arguments --\n"; +$haystack = b'string_val'; +$needle = b'string_val'; +$part = true; +$encoding = 'string_val'; +$extra_arg = 10; +var_dump( mb_strstr($haystack, $needle, $part, $encoding, $extra_arg) ); + +// Testing mb_strstr with one less than the expected number of arguments +echo "\n-- Testing mb_strstr() function with less than expected no. of arguments --\n"; +$haystack = b'string_val'; +var_dump( mb_strstr($haystack) ); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_strstr() : error conditions *** + +-- Testing mb_strstr() function with more than expected no. of arguments -- + +Warning: mb_strstr() expects at most 4 parameters, 5 given in %s on line %d +bool(false) + +-- Testing mb_strstr() function with less than expected no. of arguments -- + +Warning: mb_strstr() expects at least 2 parameters, 1 given in %s on line %d +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strstr_error2.phpt b/ext/mbstring/tests/mb_strstr_error2.phpt new file mode 100644 index 0000000..163c800 --- /dev/null +++ b/ext/mbstring/tests/mb_strstr_error2.phpt @@ -0,0 +1,35 @@ +--TEST-- +Test mb_strstr() function : error conditions +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strstr') or die("skip mb_strstr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strstr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds first occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strstr() : error conditions ***\n"; + + +echo "\n-- Testing mb_strstr() with unknown encoding --\n"; +$haystack = b'Hello, world'; +$needle = b'world'; +$encoding = 'unknown-encoding'; +$part = true; +var_dump( mb_strstr($haystack, $needle, $part, $encoding) ); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_strstr() : error conditions *** + +-- Testing mb_strstr() with unknown encoding -- + +Warning: mb_strstr(): Unknown encoding "unknown-encoding" in %s on line %d +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strstr_variation1.phpt b/ext/mbstring/tests/mb_strstr_variation1.phpt new file mode 100644 index 0000000..48e7c53 --- /dev/null +++ b/ext/mbstring/tests/mb_strstr_variation1.phpt @@ -0,0 +1,207 @@ +--TEST-- +Test mb_strstr() function : usage variation - various haystacks, needle won't be found +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strstr') or die("skip mb_strstr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strstr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds first occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strstr() : usage variation ***\n"; + +// Define error handler +function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { + if (error_reporting() != 0) { + // report non-silenced errors + echo "Error: $err_no - $err_msg, $filename($linenum)\n"; + } +} +set_error_handler('test_error_handler'); + +// Initialise function arguments not being substituted (if any) +$needle = b'string_val'; +$part = true; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// define some classes +class classWithToString +{ + public function __toString() { + return b"Class A object"; + } +} + +class classWithoutToString +{ +} + +// heredoc string +$heredoc = b<<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// add arrays +$index_array = array (1, 2, 3); +$assoc_array = array ('one' => 1, 'two' => 2); + +//array of values to iterate over +$inputs = array( + + // int data + 'int 0' => 0, + 'int 1' => 1, + 'int 12345' => 12345, + 'int -12345' => -2345, + + // float data + 'float 10.5' => 10.5, + 'float -10.5' => -10.5, + 'float 12.3456789000e10' => 12.3456789000e10, + 'float -12.3456789000e10' => -12.3456789000e10, + 'float .5' => .5, + + // array data + 'empty array' => array(), + 'int indexed array' => $index_array, + 'associative array' => $assoc_array, + 'nested arrays' => array('foo', $index_array, $assoc_array), + + // null data + 'uppercase NULL' => NULL, + 'lowercase null' => null, + + // boolean data + 'lowercase true' => true, + 'lowercase false' =>false, + 'uppercase TRUE' =>TRUE, + 'uppercase FALSE' =>FALSE, + + // empty data + 'empty string DQ' => "", + 'empty string SQ' => '', + + // object data + 'instance of classWithToString' => new classWithToString(), + 'instance of classWithoutToString' => new classWithoutToString(), + + // undefined data + 'undefined var' => @$undefined_var, + + // unset data + 'unset var' => @$unset_var, + + // resource variable + 'resource' => $fp +); + +// loop through each element of the array for haystack + +foreach($inputs as $key =>$value) { + echo "\n--$key--\n"; + var_dump( mb_strstr($value, $needle, $part, $encoding) ); +}; + +fclose($fp); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_strstr() : usage variation *** + +--int 0-- +bool(false) + +--int 1-- +bool(false) + +--int 12345-- +bool(false) + +--int -12345-- +bool(false) + +--float 10.5-- +bool(false) + +--float -10.5-- +bool(false) + +--float 12.3456789000e10-- +bool(false) + +--float -12.3456789000e10-- +bool(false) + +--float .5-- +bool(false) + +--empty array-- +Error: 2 - mb_strstr() expects parameter 1 to be string, array given, %s(%d) +bool(false) + +--int indexed array-- +Error: 2 - mb_strstr() expects parameter 1 to be string, array given, %s(%d) +bool(false) + +--associative array-- +Error: 2 - mb_strstr() expects parameter 1 to be string, array given, %s(%d) +bool(false) + +--nested arrays-- +Error: 2 - mb_strstr() expects parameter 1 to be string, array given, %s(%d) +bool(false) + +--uppercase NULL-- +bool(false) + +--lowercase null-- +bool(false) + +--lowercase true-- +bool(false) + +--lowercase false-- +bool(false) + +--uppercase TRUE-- +bool(false) + +--uppercase FALSE-- +bool(false) + +--empty string DQ-- +bool(false) + +--empty string SQ-- +bool(false) + +--instance of classWithToString-- +bool(false) + +--instance of classWithoutToString-- +Error: 2 - mb_strstr() expects parameter 1 to be string, object given, %s(%d) +bool(false) + +--undefined var-- +bool(false) + +--unset var-- +bool(false) + +--resource-- +Error: 2 - mb_strstr() expects parameter 1 to be string, resource given, %s(%d) +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strstr_variation2.phpt b/ext/mbstring/tests/mb_strstr_variation2.phpt new file mode 100644 index 0000000..f70bb67 --- /dev/null +++ b/ext/mbstring/tests/mb_strstr_variation2.phpt @@ -0,0 +1,215 @@ +--TEST-- +Test mb_strstr() function : usage variation - different types of needle. +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strstr') or die("skip mb_strstr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strstr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds first occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strstr() : usage variation ***\n"; + +// Define error handler +function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { + if (error_reporting() != 0) { + // report non-silenced errors + echo "Error: $err_no - $err_msg, $filename($linenum)\n"; + } +} +set_error_handler('test_error_handler'); + +// Initialise function arguments not being substituted (if any) +$haystack = b'string_val'; +$part = true; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// define some classes +class classWithToString +{ + public function __toString() { + return b"Class A object"; + } +} + +class classWithoutToString +{ +} + +// heredoc string +$heredoc = b<<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// add arrays +$index_array = array (1, 2, 3); +$assoc_array = array ('one' => 1, 'two' => 2); + +//array of values to iterate over +$inputs = array( + + // int data + 'int 0' => 0, + 'int 1' => 1, + 'int 12345' => 12345, + 'int -12345' => -2345, + + // float data + 'float 10.5' => 10.5, + 'float -10.5' => -10.5, + 'float 12.3456789000e10' => 12.3456789000e10, + 'float -12.3456789000e10' => -12.3456789000e10, + 'float .5' => .5, + + // array data + 'empty array' => array(), + 'int indexed array' => $index_array, + 'associative array' => $assoc_array, + 'nested arrays' => array('foo', $index_array, $assoc_array), + + // null data + 'uppercase NULL' => NULL, + 'lowercase null' => null, + + // boolean data + 'lowercase true' => true, + 'lowercase false' =>false, + 'uppercase TRUE' =>TRUE, + 'uppercase FALSE' =>FALSE, + + // empty data + 'empty string DQ' => "", + 'empty string SQ' => '', + + // object data + 'instance of classWithToString' => new classWithToString(), + 'instance of classWithoutToString' => new classWithoutToString(), + + // undefined data + 'undefined var' => @$undefined_var, + + // unset data + 'unset var' => @$unset_var, + + // resource variable + 'resource' => $fp +); + +// loop through each element of the array for needle + +foreach($inputs as $key =>$value) { + echo "\n--$key--\n"; + var_dump( mb_strstr($haystack, $value, $part, $encoding) ); +}; + +fclose($fp); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_strstr() : usage variation *** + +--int 0-- +bool(false) + +--int 1-- +bool(false) + +--int 12345-- +bool(false) + +--int -12345-- +bool(false) + +--float 10.5-- +bool(false) + +--float -10.5-- +bool(false) + +--float 12.3456789000e10-- +bool(false) + +--float -12.3456789000e10-- +bool(false) + +--float .5-- +bool(false) + +--empty array-- +Error: 2 - mb_strstr() expects parameter 2 to be string, array given, %s(%d) +bool(false) + +--int indexed array-- +Error: 2 - mb_strstr() expects parameter 2 to be string, array given, %s(%d) +bool(false) + +--associative array-- +Error: 2 - mb_strstr() expects parameter 2 to be string, array given, %s(%d) +bool(false) + +--nested arrays-- +Error: 2 - mb_strstr() expects parameter 2 to be string, array given, %s(%d) +bool(false) + +--uppercase NULL-- +Error: 2 - mb_strstr(): Empty delimiter, %s(%d) +bool(false) + +--lowercase null-- +Error: 2 - mb_strstr(): Empty delimiter, %s(%d) +bool(false) + +--lowercase true-- +bool(false) + +--lowercase false-- +Error: 2 - mb_strstr(): Empty delimiter, %s(%d) +bool(false) + +--uppercase TRUE-- +bool(false) + +--uppercase FALSE-- +Error: 2 - mb_strstr(): Empty delimiter, %s(%d) +bool(false) + +--empty string DQ-- +Error: 2 - mb_strstr(): Empty delimiter, %s(%d) +bool(false) + +--empty string SQ-- +Error: 2 - mb_strstr(): Empty delimiter, %s(%d) +bool(false) + +--instance of classWithToString-- +bool(false) + +--instance of classWithoutToString-- +Error: 2 - mb_strstr() expects parameter 2 to be string, object given, %s(%d) +bool(false) + +--undefined var-- +Error: 2 - mb_strstr(): Empty delimiter, %s(%d) +bool(false) + +--unset var-- +Error: 2 - mb_strstr(): Empty delimiter, %s(%d) +bool(false) + +--resource-- +Error: 2 - mb_strstr() expects parameter 2 to be string, resource given, %s(%d) +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strstr_variation3.phpt b/ext/mbstring/tests/mb_strstr_variation3.phpt new file mode 100644 index 0000000..55c8f31 --- /dev/null +++ b/ext/mbstring/tests/mb_strstr_variation3.phpt @@ -0,0 +1,232 @@ +--TEST-- +Test mb_strstr() function : usage variation - different values for part +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strstr') or die("skip mb_strstr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strstr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds first occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strstr() : usage variation ***\n"; + +// Define error handler +function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { + if (error_reporting() != 0) { + // report non-silenced errors + echo "Error: $err_no - $err_msg, $filename($linenum)\n"; + } +} +set_error_handler('test_error_handler'); + +// Initialise function arguments not being substituted (if any) +$haystack = b'string_val'; +$needle = b'_'; +$encoding = 'utf-8'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// define some classes +class classWithToString +{ + public function __toString() { + return b"Class A object"; + } +} + +class classWithoutToString +{ +} + +// heredoc string +$heredoc = b<<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// add arrays +$index_array = array (1, 2, 3); +$assoc_array = array ('one' => 1, 'two' => 2); + +//array of values to iterate over +$inputs = array( + + // int data + 'int 0' => 0, + 'int 1' => 1, + 'int 12345' => 12345, + 'int -12345' => -2345, + + // float data + 'float 10.5' => 10.5, + 'float -10.5' => -10.5, + 'float 12.3456789000e10' => 12.3456789000e10, + 'float -12.3456789000e10' => -12.3456789000e10, + 'float .5' => .5, + + // array data + 'empty array' => array(), + 'int indexed array' => $index_array, + 'associative array' => $assoc_array, + 'nested arrays' => array('foo', $index_array, $assoc_array), + + // null data + 'uppercase NULL' => NULL, + 'lowercase null' => null, + + // boolean data + 'lowercase true' => true, + 'lowercase false' =>false, + 'uppercase TRUE' =>TRUE, + 'uppercase FALSE' =>FALSE, + + // empty data + 'empty string DQ' => "", + 'empty string SQ' => '', + + // string data + 'string DQ' => "string", + 'string SQ' => 'string', + 'mixed case string' => "sTrInG", + 'heredoc' => $heredoc, + + // object data + 'instance of classWithToString' => new classWithToString(), + 'instance of classWithoutToString' => new classWithoutToString(), + + // undefined data + 'undefined var' => @$undefined_var, + + // unset data + 'unset var' => @$unset_var, + + // resource variable + 'resource' => $fp +); + +// loop through each element of the array for part + +foreach($inputs as $key =>$value) { + echo "\n--$key--\n"; + $res = mb_strstr($haystack, $needle, $value, $encoding); + if ($res === false) { + var_dump($res); + } + else { + var_dump(bin2hex($res)); + } +}; + +fclose($fp); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_strstr() : usage variation *** + +--int 0-- +string(8) "5f76616c" + +--int 1-- +string(12) "737472696e67" + +--int 12345-- +string(12) "737472696e67" + +--int -12345-- +string(12) "737472696e67" + +--float 10.5-- +string(12) "737472696e67" + +--float -10.5-- +string(12) "737472696e67" + +--float 12.3456789000e10-- +string(12) "737472696e67" + +--float -12.3456789000e10-- +string(12) "737472696e67" + +--float .5-- +string(12) "737472696e67" + +--empty array-- +Error: 2 - mb_strstr() expects parameter 3 to be boolean, array given, %s(%d) +bool(false) + +--int indexed array-- +Error: 2 - mb_strstr() expects parameter 3 to be boolean, array given, %s(%d) +bool(false) + +--associative array-- +Error: 2 - mb_strstr() expects parameter 3 to be boolean, array given, %s(%d) +bool(false) + +--nested arrays-- +Error: 2 - mb_strstr() expects parameter 3 to be boolean, array given, %s(%d) +bool(false) + +--uppercase NULL-- +string(8) "5f76616c" + +--lowercase null-- +string(8) "5f76616c" + +--lowercase true-- +string(12) "737472696e67" + +--lowercase false-- +string(8) "5f76616c" + +--uppercase TRUE-- +string(12) "737472696e67" + +--uppercase FALSE-- +string(8) "5f76616c" + +--empty string DQ-- +string(8) "5f76616c" + +--empty string SQ-- +string(8) "5f76616c" + +--string DQ-- +string(12) "737472696e67" + +--string SQ-- +string(12) "737472696e67" + +--mixed case string-- +string(12) "737472696e67" + +--heredoc-- +string(12) "737472696e67" + +--instance of classWithToString-- +Error: 2 - mb_strstr() expects parameter 3 to be boolean, object given, %s(%d) +bool(false) + +--instance of classWithoutToString-- +Error: 2 - mb_strstr() expects parameter 3 to be boolean, object given, %s(%d) +bool(false) + +--undefined var-- +string(8) "5f76616c" + +--unset var-- +string(8) "5f76616c" + +--resource-- +Error: 2 - mb_strstr() expects parameter 3 to be boolean, resource given, %s(%d) +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strstr_variation4.phpt b/ext/mbstring/tests/mb_strstr_variation4.phpt new file mode 100644 index 0000000..3a208d3 --- /dev/null +++ b/ext/mbstring/tests/mb_strstr_variation4.phpt @@ -0,0 +1,227 @@ +--TEST-- +Test mb_strstr() function : usage variation - different encoding types +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strstr') or die("skip mb_strstr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strstr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds first occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strstr() : usage variation ***\n"; + +// Define error handler +function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { + if (error_reporting() != 0) { + // report non-silenced errors + echo "Error: $err_no - $err_msg, $filename($linenum)\n"; + } +} +set_error_handler('test_error_handler'); + +// Initialise function arguments not being substituted (if any) +$haystack = b'string_val'; +$needle = b'_'; +$part = true; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// define some classes +class classWithToString +{ + public function __toString() { + return "invalid"; + } +} + +class classWithoutToString +{ +} + +// heredoc string +$heredoc = <<<EOT +invalid +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// add arrays +$index_array = array (1, 2, 3); +$assoc_array = array ('one' => 1, 'two' => 2); + +//array of values to iterate over +$inputs = array( + + // int data + 'int 0' => 0, + 'int 1' => 1, + 'int 12345' => 12345, + 'int -12345' => -2345, + + // float data + 'float 10.5' => 10.5, + 'float -10.5' => -10.5, + 'float 12.3456789000e10' => 12.3456789000e10, + 'float -12.3456789000e10' => -12.3456789000e10, + 'float .5' => .5, + + // array data + 'empty array' => array(), + 'int indexed array' => $index_array, + 'associative array' => $assoc_array, + 'nested arrays' => array('foo', $index_array, $assoc_array), + + // null data + 'uppercase NULL' => NULL, + 'lowercase null' => null, + + // boolean data + 'lowercase true' => true, + 'lowercase false' =>false, + 'uppercase TRUE' =>TRUE, + 'uppercase FALSE' =>FALSE, + + // empty data + 'empty string DQ' => "", + 'empty string SQ' => '', + + // object data + 'instance of classWithToString' => new classWithToString(), + 'instance of classWithoutToString' => new classWithoutToString(), + + // undefined data + 'undefined var' => @$undefined_var, + + // unset data + 'unset var' => @$unset_var, + + // resource variable + 'resource' => $fp +); + +// loop through each element of the array for encoding + +foreach($inputs as $key =>$value) { + echo "\n--$key--\n"; + var_dump( mb_strstr($haystack, $needle, $part, $value) ); +}; + +fclose($fp); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_strstr() : usage variation *** + +--int 0-- +Error: 2 - mb_strstr(): Unknown encoding "0", %s(%d) +bool(false) + +--int 1-- +Error: 2 - mb_strstr(): Unknown encoding "1", %s(%d) +bool(false) + +--int 12345-- +Error: 2 - mb_strstr(): Unknown encoding "12345", %s(%d) +bool(false) + +--int -12345-- +Error: 2 - mb_strstr(): Unknown encoding "-2345", %s(%d) +bool(false) + +--float 10.5-- +Error: 2 - mb_strstr(): Unknown encoding "10.5", %s(%d) +bool(false) + +--float -10.5-- +Error: 2 - mb_strstr(): Unknown encoding "-10.5", %s(%d) +bool(false) + +--float 12.3456789000e10-- +Error: 2 - mb_strstr(): Unknown encoding "123456789000", %s(%d) +bool(false) + +--float -12.3456789000e10-- +Error: 2 - mb_strstr(): Unknown encoding "-123456789000", %s(%d) +bool(false) + +--float .5-- +Error: 2 - mb_strstr(): Unknown encoding "0.5", %s(%d) +bool(false) + +--empty array-- +Error: 2 - mb_strstr() expects parameter 4 to be string, array given, %s(%d) +bool(false) + +--int indexed array-- +Error: 2 - mb_strstr() expects parameter 4 to be string, array given, %s(%d) +bool(false) + +--associative array-- +Error: 2 - mb_strstr() expects parameter 4 to be string, array given, %s(%d) +bool(false) + +--nested arrays-- +Error: 2 - mb_strstr() expects parameter 4 to be string, array given, %s(%d) +bool(false) + +--uppercase NULL-- +Error: 2 - mb_strstr(): Unknown encoding "", %s(%d) +bool(false) + +--lowercase null-- +Error: 2 - mb_strstr(): Unknown encoding "", %s(%d) +bool(false) + +--lowercase true-- +Error: 2 - mb_strstr(): Unknown encoding "1", %s(%d) +bool(false) + +--lowercase false-- +Error: 2 - mb_strstr(): Unknown encoding "", %s(%d) +bool(false) + +--uppercase TRUE-- +Error: 2 - mb_strstr(): Unknown encoding "1", %s(%d) +bool(false) + +--uppercase FALSE-- +Error: 2 - mb_strstr(): Unknown encoding "", %s(%d) +bool(false) + +--empty string DQ-- +Error: 2 - mb_strstr(): Unknown encoding "", %s(%d) +bool(false) + +--empty string SQ-- +Error: 2 - mb_strstr(): Unknown encoding "", %s(%d) +bool(false) + +--instance of classWithToString-- +Error: 2 - mb_strstr(): Unknown encoding "invalid", %s(%d) +bool(false) + +--instance of classWithoutToString-- +Error: 2 - mb_strstr() expects parameter 4 to be string, object given, %s(%d) +bool(false) + +--undefined var-- +Error: 2 - mb_strstr(): Unknown encoding "", %s(%d) +bool(false) + +--unset var-- +Error: 2 - mb_strstr(): Unknown encoding "", %s(%d) +bool(false) + +--resource-- +Error: 2 - mb_strstr() expects parameter 4 to be string, resource given, %s(%d) +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strstr_variation5.phpt b/ext/mbstring/tests/mb_strstr_variation5.phpt new file mode 100644 index 0000000..3bfbd61 --- /dev/null +++ b/ext/mbstring/tests/mb_strstr_variation5.phpt @@ -0,0 +1,59 @@ +--TEST-- +Test mb_strstr() function : variation - multiple needles +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strstr') or die("skip mb_strstr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strstr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds first occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strstr() : variation ***\n"; + +mb_internal_encoding('UTF-8'); + +//with repeated needles +$string_ascii = b'abcdef zbcdyx'; +$needle_ascii = b"bcd"; + +//Japanese string in UTF-8 with repeated needles +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OIMzTvvJXvvJbml6XmnKzoqp7jg4bjgq3jgrnjg4g='); +$needle_mb = base64_decode('6Kqe44OG44Kt'); + +echo "-- Ascii data --\n"; +var_dump(bin2hex(mb_strstr($string_ascii, $needle_ascii, false))); +var_dump(bin2hex(mb_strstr($string_ascii, $needle_ascii, true))); + +echo "-- mb data in utf-8 --\n"; +$res = mb_strstr($string_mb, $needle_mb, false); +if ($res !== false) { + var_dump(bin2hex($res)); +} +else { + echo "nothing found!\n"; +} +$res = mb_strstr($string_mb, $needle_mb, true); +if ($res !== false) { + var_dump(bin2hex($res)); +} +else { + echo "nothing found!\n"; +} + + +?> +===DONE=== +--EXPECT-- +*** Testing mb_strstr() : variation *** +-- Ascii data -- +string(24) "6263646566207a6263647978" +string(2) "61" +-- mb data in utf-8 -- +string(88) "e8aa9ee38386e382ade382b9e383883334efbc95efbc96e697a5e69cace8aa9ee38386e382ade382b9e38388" +string(12) "e697a5e69cac" +===DONE=== diff --git a/ext/mbstring/tests/mb_strstr_variation6.phpt b/ext/mbstring/tests/mb_strstr_variation6.phpt new file mode 100644 index 0000000..1242e02 --- /dev/null +++ b/ext/mbstring/tests/mb_strstr_variation6.phpt @@ -0,0 +1,65 @@ +--TEST-- +Test mb_strstr() function : variation - case sensitivity +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strstr') or die("skip mb_strstr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strstr(string haystack, string needle[, bool part[, string encoding]]) + * Description: Finds first occurrence of a string within another + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_strstr() : variation ***\n"; + +mb_internal_encoding('UTF-8'); + +//ascii +$string_ascii = b'abcdef'; +$needle_ascii_upper = b"BCD"; +$needle_ascii_mixed = b"bCd"; +$needle_ascii_lower = b"bcd"; + +//Greek string in lower case UTF-8 +$string_mb = base64_decode('zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J'); +$needle_mb_upper = base64_decode('zpzOnc6ezp8='); +$needle_mb_lower = base64_decode('zrzOvc6+zr8='); +$needle_mb_mixed = base64_decode('zpzOnc6+zr8='); + +echo "-- Ascii data --\n"; +// needle should be found +var_dump(bin2hex(mb_strstr($string_ascii, $needle_ascii_lower))); +// no needle should be found +var_dump(mb_strstr($string_ascii, $needle_ascii_upper)); +var_dump(mb_strstr($string_ascii, $needle_ascii_mixed)); + +echo "-- mb data in utf-8 --\n"; +// needle should be found +$res = mb_strstr($string_mb, $needle_mb_lower, false); +if ($res !== false) { + var_dump(bin2hex($res)); +} +else { + echo "nothing found!\n"; +} +// no needle should be found +var_dump(mb_strstr($string_mb, $needle_mb_upper)); +var_dump(mb_strstr($string_mb, $needle_mb_mixed)); + + +?> +===DONE=== +--EXPECT-- +*** Testing mb_strstr() : variation *** +-- Ascii data -- +string(10) "6263646566" +bool(false) +bool(false) +-- mb data in utf-8 -- +string(52) "cebccebdcebecebfcf80cf81cf83cf84cf85cf86cf87cf88cf89" +bool(false) +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strtolower_basic.phpt b/ext/mbstring/tests/mb_strtolower_basic.phpt new file mode 100644 index 0000000..6d9cba7 --- /dev/null +++ b/ext/mbstring/tests/mb_strtolower_basic.phpt @@ -0,0 +1,58 @@ +--TEST-- +Test mb_strtolower() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strtolower') or die("skip mb_strtolower() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strtolower(string $sourcestring [, string $encoding]) + * Description: Returns a lowercased version of $sourcestring + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test basic functionality of mb_strtolower + */ + +echo "*** Testing mb_strtolower() : basic functionality***\n"; + +$ascii_lower = 'abcdefghijklmnopqrstuvwxyz'; +$ascii_upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; +$greek_lower = base64_decode('zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J'); +$greek_upper = base64_decode('zpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6p'); + +echo "\n-- ASCII String --\n"; +$ascii = mb_strtolower($ascii_upper); +var_dump($ascii); + +if($ascii == $ascii_lower) { + echo "Correctly converted\n"; +} else { + echo "Incorrectly converted\n"; +} + +echo "\n-- Multibyte String --\n"; +$mb = mb_strtolower($greek_upper, 'UTF-8'); +var_dump(base64_encode($mb)); + +if ($mb == $greek_lower) { + echo "Correctly converted\n"; +} else { + echo "Incorreclty converted\n"; +} + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strtolower() : basic functionality*** + +-- ASCII String -- +string(26) "abcdefghijklmnopqrstuvwxyz" +Correctly converted + +-- Multibyte String -- +string(64) "zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J" +Correctly converted +Done diff --git a/ext/mbstring/tests/mb_strtolower_error1.phpt b/ext/mbstring/tests/mb_strtolower_error1.phpt new file mode 100644 index 0000000..20200aa --- /dev/null +++ b/ext/mbstring/tests/mb_strtolower_error1.phpt @@ -0,0 +1,46 @@ +--TEST-- +Test mb_strtolower() function : error conditions - pass incorrect number of arguments +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strtolower') or die("skip mb_strtolower() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strtolower(string $sourcestring [, string $encoding]) + * Description: Returns a lowercased version of $sourcestring + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass an incorrect number of arguments to mb_strtolower() to test behaviour + */ + +echo "*** Testing mb_strtolower() : error conditions***\n"; + +//Test mb_strtolower with one more than the expected number of arguments +echo "\n-- Testing mb_strtolower() function with more than expected no. of arguments --\n"; +$sourcestring = 'string_value'; +$encoding = 'UTF-8'; +$extra_arg = 10; +var_dump( mb_strtolower($sourcestring, $encoding, $extra_arg) ); + +//Test mb_strtolower with zero arguments +echo "\n-- Testing mb_strtolower() function with zero arguments --\n"; +var_dump( mb_strtolower() ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strtolower() : error conditions*** + +-- Testing mb_strtolower() function with more than expected no. of arguments -- + +Warning: mb_strtolower() expects at most 2 parameters, 3 given in %s on line %d +NULL + +-- Testing mb_strtolower() function with zero arguments -- + +Warning: mb_strtolower() expects at least 1 parameter, 0 given in %s on line %d +NULL +Done diff --git a/ext/mbstring/tests/mb_strtolower_error2.phpt b/ext/mbstring/tests/mb_strtolower_error2.phpt new file mode 100644 index 0000000..9a0aed0 --- /dev/null +++ b/ext/mbstring/tests/mb_strtolower_error2.phpt @@ -0,0 +1,32 @@ +--TEST-- +Test mb_strtolower() function : error conditions - pass an unknown encoding +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strtolower') or die("skip mb_strtolower() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strtolower(string $sourcestring [, string $encoding]) + * Description: Returns a lowercased version of $sourcestring + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass an unknown encoding to mb_strtolower() to test behaviour + */ + +echo "*** Testing mb_strtolower() : error conditions***\n"; + +$sourcestring = 'hello, world'; +$encoding = 'unknown-encoding'; + +var_dump( mb_strtolower($sourcestring, $encoding) ); +?> +===DONE=== +--EXPECTF-- +*** Testing mb_strtolower() : error conditions*** + +Warning: mb_strtolower(): Unknown encoding "unknown-encoding" in %s on line %d +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_strtolower_variation1.phpt b/ext/mbstring/tests/mb_strtolower_variation1.phpt new file mode 100644 index 0000000..3b151b9 --- /dev/null +++ b/ext/mbstring/tests/mb_strtolower_variation1.phpt @@ -0,0 +1,178 @@ +--TEST-- +Test mb_strtolower() function : usage variations - pass different data types as $sourcestring arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strtolower') or die("skip mb_strtolower() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strtolower(string $sourcestring [, string $encoding]) + * Description: Returns a lowercased version of $sourcestring + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass different data types to $sourcestring argument to test behaviour of mb_strtolower() + */ + +echo "*** Testing mb_strtolower() : usage variations ***\n"; + + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "Class A object"; + } +} + +// heredoc string +$heredoc = <<<EOT +Hello World +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $sourcestring argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "String", + 'String', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_strtolower() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_strtolower($input) ); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strtolower() : usage variations *** + +-- Iteration 1 -- +string(1) "0" + +-- Iteration 2 -- +string(1) "1" + +-- Iteration 3 -- +string(5) "12345" + +-- Iteration 4 -- +string(5) "-2345" + +-- Iteration 5 -- +string(4) "10.5" + +-- Iteration 6 -- +string(5) "-10.5" + +-- Iteration 7 -- +string(12) "123456789000" + +-- Iteration 8 -- +string(13) "1.23456789e-9" + +-- Iteration 9 -- +string(3) "0.5" + +-- Iteration 10 -- +string(0) "" + +-- Iteration 11 -- +string(0) "" + +-- Iteration 12 -- +string(1) "1" + +-- Iteration 13 -- +string(0) "" + +-- Iteration 14 -- +string(1) "1" + +-- Iteration 15 -- +string(0) "" + +-- Iteration 16 -- +string(0) "" + +-- Iteration 17 -- +string(0) "" + +-- Iteration 18 -- +string(6) "string" + +-- Iteration 19 -- +string(6) "string" + +-- Iteration 20 -- +string(11) "hello world" + +-- Iteration 21 -- +string(14) "class a object" + +-- Iteration 22 -- +string(0) "" + +-- Iteration 23 -- +string(0) "" + +-- Iteration 24 -- + +Warning: mb_strtolower() expects parameter 1 to be string, resource given in %s on line %d +NULL +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_strtolower_variation2.phpt b/ext/mbstring/tests/mb_strtolower_variation2.phpt new file mode 100644 index 0000000..293c955 --- /dev/null +++ b/ext/mbstring/tests/mb_strtolower_variation2.phpt @@ -0,0 +1,225 @@ +--TEST-- +Test mb_strtolower() function : usage variations - pass different data types as $encoding arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strtolower') or die("skip mb_strtolower() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strtolower(string $sourcestring [, string $encoding]) + * Description: Returns a lowercased version of $sourcestring + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass different data types to $encoding argument to test behaviour of mb_strtolower() + * Where possible, 'UTF-8' has been entered as a string value + */ + +echo "*** Testing mb_strtolower() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$sourcestring = b'Hello, World'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "UTF-8"; + } +} + +// heredoc string +$heredoc = <<<EOT +UTF-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $encoding argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "UTF-8", + 'UTF-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_strtolower() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + $res = mb_strtolower($sourcestring, $input); + if ($res === false || $res == NULL) { + var_dump($res); + } + else { + var_dump(bin2hex($res)); + } + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_strtolower() : usage variations *** + +-- Iteration 1 -- + +Warning: mb_strtolower(): Unknown encoding "0" in %s on line %d +bool(false) + +-- Iteration 2 -- + +Warning: mb_strtolower(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 3 -- + +Warning: mb_strtolower(): Unknown encoding "12345" in %s on line %d +bool(false) + +-- Iteration 4 -- + +Warning: mb_strtolower(): Unknown encoding "-2345" in %s on line %d +bool(false) + +-- Iteration 5 -- + +Warning: mb_strtolower(): Unknown encoding "10.5" in %s on line %d +bool(false) + +-- Iteration 6 -- + +Warning: mb_strtolower(): Unknown encoding "-10.5" in %s on line %d +bool(false) + +-- Iteration 7 -- + +Warning: mb_strtolower(): Unknown encoding "123456789000" in %s on line %d +bool(false) + +-- Iteration 8 -- + +Warning: mb_strtolower(): Unknown encoding "1.23456789E-9" in %s on line %d +bool(false) + +-- Iteration 9 -- + +Warning: mb_strtolower(): Unknown encoding "0.5" in %s on line %d +bool(false) + +-- Iteration 10 -- + +Warning: mb_strtolower(): Unknown encoding "(null)" in %s on line %d +bool(false) + +-- Iteration 11 -- + +Warning: mb_strtolower(): Unknown encoding "(null)" in %s on line %d +bool(false) + +-- Iteration 12 -- + +Warning: mb_strtolower(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 13 -- + +Warning: mb_strtolower(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 14 -- + +Warning: mb_strtolower(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 15 -- + +Warning: mb_strtolower(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 16 -- + +Warning: mb_strtolower(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 17 -- + +Warning: mb_strtolower(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 18 -- +string(24) "68656c6c6f2c20776f726c64" + +-- Iteration 19 -- +string(24) "68656c6c6f2c20776f726c64" + +-- Iteration 20 -- +string(24) "68656c6c6f2c20776f726c64" + +-- Iteration 21 -- +string(24) "68656c6c6f2c20776f726c64" + +-- Iteration 22 -- + +Warning: mb_strtolower(): Unknown encoding "(null)" in %s on line %d +bool(false) + +-- Iteration 23 -- + +Warning: mb_strtolower(): Unknown encoding "(null)" in %s on line %d +bool(false) + +-- Iteration 24 -- + +Warning: mb_strtolower() expects parameter 2 to be string, resource given in %s on line %d +NULL +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_strtolower_variation3.phpt b/ext/mbstring/tests/mb_strtolower_variation3.phpt new file mode 100644 index 0000000..08b3467 --- /dev/null +++ b/ext/mbstring/tests/mb_strtolower_variation3.phpt @@ -0,0 +1,57 @@ +--TEST-- +Test mb_strtolower() function : usage variations - pass mixed ASCII and non-ASCII strings +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strtolower') or die("skip mb_strtolower() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strtolower(string $sourcestring [, string $encoding]) + * Description: Returns a lowercased version of $sourcestring + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass a Japanese string and a mixed Japanese and ASCII string to mb_strtolower + * to check correct conversion is occuring (Japanese characters should not be converted). + */ + +echo "*** Testing mb_strtolower() : usage variations ***\n"; + +$string_mixed = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCUEhQLiAwMTIzNO+8le+8lu+8l++8mO+8meOAgg=='); +$string_mixed_lower = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCcGhwLiAwMTIzNO+8le+8lu+8l++8mO+8meOAgg=='); +$string_all_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC'); + +echo "\n-- Mixed string (mulitbyte and ASCII characters) --\n"; +$a = mb_strtolower($string_mixed, 'UTF-8'); +var_dump(base64_encode($a)); +if ($a == $string_mixed_lower) { + echo "Correctly Converted\n"; +} else { + echo "Incorrectly Converted\n"; +} + +echo "\n-- Multibyte Only String--\n"; +$b = mb_strtolower($string_all_mb, 'UTF-8'); +var_dump(base64_encode($b)); +if ($b == $string_all_mb) { // Japanese characters only - should not be any conversion + echo "Correctly Converted\n"; +} else { + echo "Incorrectly Converted\n"; +} + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_strtolower() : usage variations *** + +-- Mixed string (mulitbyte and ASCII characters) -- +string(80) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCcGhwLiAwMTIzNO+8le+8lu+8l++8mO+8meOAgg==" +Correctly Converted + +-- Multibyte Only String-- +string(40) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC" +Correctly Converted +Done diff --git a/ext/mbstring/tests/mb_strtolower_variation4.phpt b/ext/mbstring/tests/mb_strtolower_variation4.phpt new file mode 100644 index 0000000..37357a1 --- /dev/null +++ b/ext/mbstring/tests/mb_strtolower_variation4.phpt @@ -0,0 +1,56 @@ +--TEST-- +Test mb_strtolower() function : usage variations - pass different characters to check conversion is correct +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strtolower') or die("skip mb_strtolower() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strtolower(string $sourcestring [, string $encoding]) + * Description: Returns a lowercased version of $sourcestring + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass accented characters and Russian characters to check case conversion is correct + */ + +echo "*** Testing mb_strtolower() : usage variations ***\n"; + +$uppers = array('Basic Latin' => b'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'Characters With Accents' => base64_decode('w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/DkMORw5LDk8OUw5XDlg=='), + 'Russian' => base64_decode('0JDQkdCS0JPQlNCV0JbQlw==')); +$lowers = array('Basic Latin' => b'abcdefghijklmnopqrstuvwxyz', + 'Characters With Accents' => base64_decode('w6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtg=='), + 'Russian' => base64_decode('0LDQsdCy0LPQtNC10LbQtw==')); + +foreach ($uppers as $lang => $sourcestring) { + echo "\n-- $lang --\n"; + $a = mb_strtolower($sourcestring, 'utf-8'); + var_dump(base64_encode($a)); + if ($a == $lowers[$lang]) { + echo "Correctly Converted\n"; + } else { + echo "Incorrectly Converted\n"; + } +} + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_strtolower() : usage variations *** + +-- Basic Latin -- +string(36) "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo=" +Correctly Converted + +-- Characters With Accents -- +string(64) "w6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtg==" +Correctly Converted + +-- Russian -- +string(24) "0LDQsdCy0LPQtNC10LbQtw==" +Correctly Converted +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_strtoupper_basic.phpt b/ext/mbstring/tests/mb_strtoupper_basic.phpt new file mode 100644 index 0000000..e776469 --- /dev/null +++ b/ext/mbstring/tests/mb_strtoupper_basic.phpt @@ -0,0 +1,60 @@ +--TEST-- +Test mb_strtoupper() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strtoupper') or die("skip mb_strtoupper() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strtoupper(string $sourcestring [, string $encoding] + * Description: Returns a uppercased version of $sourcestring + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test basic functionality of mb_strtoupper + */ + +echo "*** Testing mb_strtoupper() : basic functionality ***\n"; + +mb_internal_encoding('utf-8'); +$ascii_lower = b'abcdefghijklmnopqrstuvwxyz'; +$ascii_upper = b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; +$greek_lower = base64_decode('zrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Dz4TPhc+Gz4fPiM+J'); +$greek_upper = base64_decode('zpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6p'); + +echo "\n-- ASCII String --\n"; +$ascii = mb_strtoupper($ascii_lower); +var_dump(base64_encode($ascii)); + +if($ascii == $ascii_upper) { + echo "Correctly converted\n"; +} else { + echo "Incorrectly converted\n"; +} + +echo "\n-- Multibyte String --\n"; +$mb = mb_strtoupper($greek_lower, 'UTF-8'); +var_dump(base64_encode($mb)); + +if ($mb == $greek_upper) { + echo "Correctly converted\n"; +} else { + echo "Incorreclty converted\n"; +} + +echo "Done"; +?> + +--EXPECT-- +*** Testing mb_strtoupper() : basic functionality *** + +-- ASCII String -- +string(36) "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVo=" +Correctly converted + +-- Multibyte String -- +string(64) "zpHOks6TzpTOlc6WzpfOmM6ZzprOm86czp3Ons6fzqDOoc6jzqTOpc6mzqfOqM6p" +Correctly converted +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_strtoupper_error1.phpt b/ext/mbstring/tests/mb_strtoupper_error1.phpt new file mode 100644 index 0000000..c14d2f1 --- /dev/null +++ b/ext/mbstring/tests/mb_strtoupper_error1.phpt @@ -0,0 +1,47 @@ +--TEST-- +Test mb_strtoupper() function : error conditions - pass incorrect number of args +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strtoupper') or die("skip mb_strtoupper() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strtoupper(string $sourcestring [, string $encoding] + * Description: Returns a uppercased version of $sourcestring + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass an incorrect number of arguments to mb_strtoupper() to test behaviour + */ + +echo "*** Testing mb_strtoupper() : error conditions ***\n"; + +//Test mb_strtoupper with one more than the expected number of arguments +echo "\n-- Testing mb_strtoupper() function with more than expected no. of arguments --\n"; +$sourcestring = 'string_value'; +$encoding = 'UTF-8'; +$extra_arg = 10; +var_dump( mb_strtoupper($sourcestring, $encoding, $extra_arg) ); + +//Test mb_strtoupper with zero arguments +echo "\n-- Testing mb_strtoupper() function with zero arguments --\n"; +var_dump( mb_strtoupper() ); + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_strtoupper() : error conditions *** + +-- Testing mb_strtoupper() function with more than expected no. of arguments -- + +Warning: mb_strtoupper() expects at most 2 parameters, 3 given in %s on line %d +NULL + +-- Testing mb_strtoupper() function with zero arguments -- + +Warning: mb_strtoupper() expects at least 1 parameter, 0 given in %s on line %d +NULL +Done diff --git a/ext/mbstring/tests/mb_strtoupper_error2.phpt b/ext/mbstring/tests/mb_strtoupper_error2.phpt new file mode 100644 index 0000000..cf42926 --- /dev/null +++ b/ext/mbstring/tests/mb_strtoupper_error2.phpt @@ -0,0 +1,34 @@ +--TEST-- +Test mb_strtoupper() function : error conditions - pass an unknown encoding +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strtoupper') or die("skip mb_strtoupper() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strtoupper(string $sourcestring [, string $encoding] + * Description: Returns a uppercased version of $sourcestring + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass an unknown encoding as $encoding argument to check behaviour of mbstrtoupper() + */ + +echo "*** Testing mb_strtoupper() : error conditions ***\n"; + +$sourcestring = 'hello, world'; +$encoding = 'unknown-encoding'; + +var_dump( mb_strtoupper($sourcestring, $encoding) ); + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_strtoupper() : error conditions *** + +Warning: mb_strtoupper(): Unknown encoding "unknown-encoding" in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_strtoupper_variation1.phpt b/ext/mbstring/tests/mb_strtoupper_variation1.phpt new file mode 100644 index 0000000..efe8845 --- /dev/null +++ b/ext/mbstring/tests/mb_strtoupper_variation1.phpt @@ -0,0 +1,181 @@ +--TEST-- +Test mb_strtoupper() function : usage varitations - pass different data types as $sourcestring arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strtoupper') or die("skip mb_strtoupper() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strtoupper(string $sourcestring [, string $encoding] + * Description: Returns a uppercased version of $sourcestring + * Source code: ext/mbstring/mbstring.c + */ + +/* + * + * Pass different data types as $sourcestring argument to mb_strtoupper to test behaviour + */ + +echo "*** Testing mb_strtoupper() : usage variations ***\n"; + +// Initialise function arguments not being substituted + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "Class A object"; + } +} + +// heredoc string +$heredoc = <<<EOT +Hello, World +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $sourcestring argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "String", + 'String', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_strtoupper() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_strtoupper($input) ); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_strtoupper() : usage variations *** + +-- Iteration 1 -- +string(1) "0" + +-- Iteration 2 -- +string(1) "1" + +-- Iteration 3 -- +string(5) "12345" + +-- Iteration 4 -- +string(5) "-2345" + +-- Iteration 5 -- +string(4) "10.5" + +-- Iteration 6 -- +string(5) "-10.5" + +-- Iteration 7 -- +string(12) "123456789000" + +-- Iteration 8 -- +string(13) "1.23456789E-9" + +-- Iteration 9 -- +string(3) "0.5" + +-- Iteration 10 -- +string(0) "" + +-- Iteration 11 -- +string(0) "" + +-- Iteration 12 -- +string(1) "1" + +-- Iteration 13 -- +string(0) "" + +-- Iteration 14 -- +string(1) "1" + +-- Iteration 15 -- +string(0) "" + +-- Iteration 16 -- +string(0) "" + +-- Iteration 17 -- +string(0) "" + +-- Iteration 18 -- +string(6) "STRING" + +-- Iteration 19 -- +string(6) "STRING" + +-- Iteration 20 -- +string(12) "HELLO, WORLD" + +-- Iteration 21 -- +string(14) "CLASS A OBJECT" + +-- Iteration 22 -- +string(0) "" + +-- Iteration 23 -- +string(0) "" + +-- Iteration 24 -- + +Warning: mb_strtoupper() expects parameter 1 to be string, resource given in %s on line %d +NULL +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_strtoupper_variation2.phpt b/ext/mbstring/tests/mb_strtoupper_variation2.phpt new file mode 100644 index 0000000..035cd63 --- /dev/null +++ b/ext/mbstring/tests/mb_strtoupper_variation2.phpt @@ -0,0 +1,226 @@ +--TEST-- +Test mb_strtoupper() function : usage varitations - Pass different data types as $encoding arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strtoupper') or die("skip mb_strtoupper() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strtoupper(string $sourcestring [, string $encoding] + * Description: Returns a uppercased version of $sourcestring + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass different data types as $encoding argument to mb_strtoupper() to test behaviour + * Where possible, 'UTF-8' is entered as string value + */ + +echo "*** Testing mb_strtoupper() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$sourcestring = b'Hello, World'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "UTF-8"; + } +} + +// heredoc string +$heredoc = <<<EOT +UTF-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $encoding argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "UTF-8", + 'UTF-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_strtoupper() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + $res = mb_strtoupper($sourcestring, $input); + if ($res === false || $res == NULL) { + var_dump($res); + } + else { + var_dump(bin2hex($res)); + } + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_strtoupper() : usage variations *** + +-- Iteration 1 -- + +Warning: mb_strtoupper(): Unknown encoding "0" in %s on line %d +bool(false) + +-- Iteration 2 -- + +Warning: mb_strtoupper(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 3 -- + +Warning: mb_strtoupper(): Unknown encoding "12345" in %s on line %d +bool(false) + +-- Iteration 4 -- + +Warning: mb_strtoupper(): Unknown encoding "-2345" in %s on line %d +bool(false) + +-- Iteration 5 -- + +Warning: mb_strtoupper(): Unknown encoding "10.5" in %s on line %d +bool(false) + +-- Iteration 6 -- + +Warning: mb_strtoupper(): Unknown encoding "-10.5" in %s on line %d +bool(false) + +-- Iteration 7 -- + +Warning: mb_strtoupper(): Unknown encoding "123456789000" in %s on line %d +bool(false) + +-- Iteration 8 -- + +Warning: mb_strtoupper(): Unknown encoding "1.23456789E-9" in %s on line %d +bool(false) + +-- Iteration 9 -- + +Warning: mb_strtoupper(): Unknown encoding "0.5" in %s on line %d +bool(false) + +-- Iteration 10 -- + +Warning: mb_strtoupper(): Unknown encoding "(null)" in %s on line %d +bool(false) + +-- Iteration 11 -- + +Warning: mb_strtoupper(): Unknown encoding "(null)" in %s on line %d +bool(false) + +-- Iteration 12 -- + +Warning: mb_strtoupper(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 13 -- + +Warning: mb_strtoupper(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 14 -- + +Warning: mb_strtoupper(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 15 -- + +Warning: mb_strtoupper(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 16 -- + +Warning: mb_strtoupper(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 17 -- + +Warning: mb_strtoupper(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 18 -- +string(24) "48454c4c4f2c20574f524c44" + +-- Iteration 19 -- +string(24) "48454c4c4f2c20574f524c44" + +-- Iteration 20 -- +string(24) "48454c4c4f2c20574f524c44" + +-- Iteration 21 -- +string(24) "48454c4c4f2c20574f524c44" + +-- Iteration 22 -- + +Warning: mb_strtoupper(): Unknown encoding "(null)" in %s on line %d +bool(false) + +-- Iteration 23 -- + +Warning: mb_strtoupper(): Unknown encoding "(null)" in %s on line %d +bool(false) + +-- Iteration 24 -- + +Warning: mb_strtoupper() expects parameter 2 to be string, resource given in %s on line %d +NULL +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_strtoupper_variation3.phpt b/ext/mbstring/tests/mb_strtoupper_variation3.phpt new file mode 100644 index 0000000..a4bf3b1 --- /dev/null +++ b/ext/mbstring/tests/mb_strtoupper_variation3.phpt @@ -0,0 +1,58 @@ +--TEST-- +Test mb_strtoupper() function : usage varitations - pass mixed ASCII and non-ASCII strings +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strtoupper') or die("skip mb_strtoupper() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strtoupper(string $sourcestring [, string $encoding] + * Description: Returns a uppercased version of $sourcestring + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass a Japanese string and a mixed Japanese and ASCII string to mb_strtolower + * to check correct conversion is occuring (Japanese characters should not be converted). + */ + +echo "*** Testing mb_strtoupper() : usage variations ***\n"; + +$string_mixed_upper = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCUEhQLiAwMTIzNO+8le+8lu+8l++8mO+8meOAgg=='); +$string_mixed_lower = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCcGhwLiAwMTIzNO+8le+8lu+8l++8mO+8meOAgg=='); +$string_all_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC'); + + +echo "\n-- Mixed string (mulitbyte and ASCII characters) --\n"; +$a = mb_strtoupper($string_mixed_lower, 'UTF-8'); +var_dump(base64_encode($a)); +if ($a == $string_mixed_upper) { + echo "Correctly Converted\n"; +} else { + echo "Incorrectly Converted\n"; +} + +echo "\n-- Multibyte Only String--\n"; +$b = mb_strtoupper($string_all_mb, 'UTF-8'); +var_dump(base64_encode($b)); +if ($b == $string_all_mb) { // Japanese characters only - should not be any conversion + echo "Correctly Converted\n"; +} else { + echo "Incorrectly Converted\n"; +} + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_strtoupper() : usage variations *** + +-- Mixed string (mulitbyte and ASCII characters) -- +string(80) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCUEhQLiAwMTIzNO+8le+8lu+8l++8mO+8meOAgg==" +Correctly Converted + +-- Multibyte Only String-- +string(40) "5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CC" +Correctly Converted +Done diff --git a/ext/mbstring/tests/mb_strtoupper_variation4.phpt b/ext/mbstring/tests/mb_strtoupper_variation4.phpt new file mode 100644 index 0000000..7d91c8a --- /dev/null +++ b/ext/mbstring/tests/mb_strtoupper_variation4.phpt @@ -0,0 +1,57 @@ +--TEST-- +Test mb_strtoupper() function : usage varitations - Pass different character types to check conversion is correct +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_strtoupper') or die("skip mb_strtoupper() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_strtoupper(string $sourcestring [, string $encoding] + * Description: Returns a uppercased version of $sourcestring + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass characters from different languages to check that mb_strtoupper is + * doing a correct case conversion + */ + +echo "*** Testing mb_strtoupper() : usage variations ***\n"; + +$uppers = array('Basic Latin' => b'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + 'Characters With Accents' => base64_decode('w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/DkMORw5LDk8OUw5XDlg=='), + 'Russian' => base64_decode('0JDQkdCS0JPQlNCV0JbQlw==')); +$lowers = array('Basic Latin' => b'abcdefghijklmnopqrstuvwxyz', + 'Characters With Accents' => base64_decode('w6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtg=='), + 'Russian' => base64_decode('0LDQsdCy0LPQtNC10LbQtw==')); + +foreach ($lowers as $lang => $sourcestring) { + echo "\n-- $lang --\n"; + $a = mb_strtoupper($sourcestring, 'UTF-8'); + var_dump(base64_encode($a)); + if ($a == $uppers[$lang]) { + echo "Correctly Converted\n"; + } else { + echo "Incorrectly Converted\n"; + } +} + +echo "Done"; +?> + +--EXPECTF-- +*** Testing mb_strtoupper() : usage variations *** + +-- Basic Latin -- +string(36) "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVo=" +Correctly Converted + +-- Characters With Accents -- +string(64) "w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/DkMORw5LDk8OUw5XDlg==" +Correctly Converted + +-- Russian -- +string(24) "0JDQkdCS0JPQlNCV0JbQlw==" +Correctly Converted +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_strwidth.phpt b/ext/mbstring/tests/mb_strwidth.phpt new file mode 100644 index 0000000..da439b4 --- /dev/null +++ b/ext/mbstring/tests/mb_strwidth.phpt @@ -0,0 +1,32 @@ +--TEST-- +mb_strwidth() +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +// TODO: Add more encoding, strings..... +//$debug = true; +ini_set('include_path', dirname(__FILE__)); +include_once('common.inc'); + +// EUC-JP +$euc_jp = '0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ¤¤¡£'; + +print "1: ". mb_strwidth($euc_jp, 'EUC-JP') . "\n"; +/* + +print "2: ". mb_strwidth($euc_jp, 'EUC-JP') . "\n"; +print "3: ". mb_strwidth($euc_jp, 'EUC-JP') . "\n"; +// Note: Did not start form -22 offset. Staring from 0. +print "4: ". mb_strwidth($euc_jp, 'EUC-JP') . "\n"; + +$str = mb_strwidth($euc_jp, 100, -10,'...','EUC-JP'); +($str === "") ? print "5 OK\n" : print "NG: $str\n"; + +$str = mb_strwidth($euc_jp, -100, 10,'...','EUC-JP'); +($str !== "") ? print "6 OK: $str\n" : print "NG: $str\n"; +*/ +?> + +--EXPECT-- +1: 68 diff --git a/ext/mbstring/tests/mb_substitute_character.phpt b/ext/mbstring/tests/mb_substitute_character.phpt new file mode 100644 index 0000000..db11988 --- /dev/null +++ b/ext/mbstring/tests/mb_substitute_character.phpt @@ -0,0 +1,45 @@ +--TEST-- +mb_substitute_character() +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +//$debug = true; +ini_set('include_path', dirname(__FILE__)); +include_once('common.inc'); + +// Note: It does not return TRUE/FALSE for setting char + +var_dump(mb_substitute_character(0x3044)); +var_dump(mb_substitute_character()); +var_dump(bin2hex(mb_convert_encoding("\xe2\x99\xa0\xe3\x81\x82", "CP932", "UTF-8"))); + +var_dump(mb_substitute_character('long')); +var_dump(mb_substitute_character()); +var_dump(bin2hex(mb_convert_encoding("\xe2\x99\xa0\xe3\x81\x82", "CP932", "UTF-8"))); + +var_dump(mb_substitute_character('none')); +var_dump(mb_substitute_character()); +var_dump(bin2hex(mb_convert_encoding("\xe2\x99\xa0\xe3\x81\x82", "CP932", "UTF-8"))); + +var_dump(mb_substitute_character('entity')); +var_dump(mb_substitute_character()); +var_dump(bin2hex(mb_convert_encoding("\xe2\x99\xa0\xe3\x81\x82", "CP932", "UTF-8"))); + +var_dump(mb_substitute_character('BAD_NAME')); +?> +--EXPECT-- +bool(true) +int(12356) +string(8) "82a282a0" +bool(true) +string(4) "long" +string(16) "552b3236363082a0" +bool(true) +string(4) "none" +string(4) "82a0" +bool(true) +string(6) "entity" +string(20) "262378323636303b82a0" +ERR: Warning +bool(false) diff --git a/ext/mbstring/tests/mb_substitute_character_basic.phpt b/ext/mbstring/tests/mb_substitute_character_basic.phpt new file mode 100644 index 0000000..30cda8a --- /dev/null +++ b/ext/mbstring/tests/mb_substitute_character_basic.phpt @@ -0,0 +1,43 @@ +--TEST-- +Test mb_substitute_character() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substitute_character') or die("skip mb_substitute_character() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : mixed mb_substitute_character([mixed substchar]) + * Description: Sets the current substitute_character or returns the current substitute_character + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_substitute_character() : basic functionality ***\n"; + + +// Initialise all required variables +var_dump( mb_substitute_character() ); +var_dump( mb_substitute_character(66) ); +var_dump( mb_substitute_character() ); +var_dump( mb_substitute_character(1234) ); +var_dump( mb_substitute_character() ); +var_dump( mb_substitute_character("none") ); +var_dump( mb_substitute_character() ); +var_dump( mb_substitute_character("b") ); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_substitute_character() : basic functionality *** +int(63) +bool(true) +int(66) +bool(true) +int(1234) +bool(true) +string(4) "none" + +Warning: mb_substitute_character(): Unknown character. in %s on line %d +bool(false) +===DONE=== diff --git a/ext/mbstring/tests/mb_substitute_character_error.phpt b/ext/mbstring/tests/mb_substitute_character_error.phpt new file mode 100644 index 0000000..2a816b8 --- /dev/null +++ b/ext/mbstring/tests/mb_substitute_character_error.phpt @@ -0,0 +1,35 @@ +--TEST-- +Test mb_substitute_character() function : error conditions +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substitute_character') or die("skip mb_substitute_character() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : mixed mb_substitute_character([mixed substchar]) + * Description: Sets the current substitute_character or returns the current substitute_character + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_substitute_character() : error conditions ***\n"; + + +//Test mb_substitute_character with one more than the expected number of arguments +echo "\n-- Testing mb_substitute_character() function with more than expected no. of arguments --\n"; +$substchar = 1; +$extra_arg = 10; +var_dump( mb_substitute_character($substchar, $extra_arg) ); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_substitute_character() : error conditions *** + +-- Testing mb_substitute_character() function with more than expected no. of arguments -- + +Warning: mb_substitute_character() expects at most 1 parameter, 2 given in %s on line %d +NULL +===DONE=== + diff --git a/ext/mbstring/tests/mb_substitute_character_variation1.phpt b/ext/mbstring/tests/mb_substitute_character_variation1.phpt new file mode 100644 index 0000000..3458bc2 --- /dev/null +++ b/ext/mbstring/tests/mb_substitute_character_variation1.phpt @@ -0,0 +1,231 @@ +--TEST-- +Test mb_substitute_character() function : usage variation +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substitute_character') or die("skip mb_substitute_character() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : mixed mb_substitute_character([mixed substchar]) + * Description: Sets the current substitute_character or returns the current substitute_character + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_substitute_character() : usage variation ***\n"; + +// Define error handler +function test_error_handler($err_no, $err_msg, $filename, $linenum, $vars) { + if (error_reporting() != 0) { + // report non-silenced errors + echo "Error: $err_no - $err_msg, $filename($linenum)\n"; + } +} +set_error_handler('test_error_handler'); + +// Initialise function arguments not being substituted (if any) + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// define some classes +class classWithToString +{ + public function __toString() { + return "Class A object"; + } +} + +class classWithoutToString +{ +} + +// heredoc string +$heredoc = <<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// add arrays +$index_array = array (1, 2, 3); +$assoc_array = array ('one' => 1, 'two' => 2); + +//array of values to iterate over +$inputs = array( + + // int data + 'int 0' => 0, + 'int 1' => 1, + 'int 12345' => 12345, + 'int -12345' => -2345, + + // float data + 'float 10.5' => 10.5, + 'float -10.5' => -10.5, + 'float 12.3456789000e10' => 12.3456789000e10, + 'float -12.3456789000e10' => -12.3456789000e10, + 'float .5' => .5, + + // array data + 'empty array' => array(), + 'int indexed array' => $index_array, + 'associative array' => $assoc_array, + 'nested arrays' => array('foo', $index_array, $assoc_array), + + // null data + 'uppercase NULL' => NULL, + 'lowercase null' => null, + + // boolean data + 'lowercase true' => true, + 'lowercase false' =>false, + 'uppercase TRUE' =>TRUE, + 'uppercase FALSE' =>FALSE, + + // empty data + 'empty string DQ' => "", + 'empty string SQ' => '', + + // string data + 'string DQ' => "string", + 'string SQ' => 'string', + 'mixed case string' => "sTrInG", + 'heredoc' => $heredoc, + + // object data + 'instance of classWithToString' => new classWithToString(), + 'instance of classWithoutToString' => new classWithoutToString(), + + // undefined data + 'undefined var' => @$undefined_var, + + // unset data + 'unset var' => @$unset_var, +); + +// loop through each element of the array for substchar + +mb_internal_encoding('utf-8'); +foreach($inputs as $key =>$value) { + echo "\n--$key--\n"; + var_dump( mb_substitute_character($value) ); +}; + +fclose($fp); + +?> +===DONE=== +--EXPECTF-- +*** Testing mb_substitute_character() : usage variation *** + +--int 0-- +Error: 2 - mb_substitute_character(): Unknown character., %s(%d) +bool(false) + +--int 1-- +bool(true) + +--int 12345-- +bool(true) + +--int -12345-- +Error: 2 - mb_substitute_character(): Unknown character., %s(%d) +bool(false) + +--float 10.5-- +bool(true) + +--float -10.5-- +Error: 2 - mb_substitute_character(): Unknown character., %s(%d) +bool(false) + +--float 12.3456789000e10-- +Error: 2 - mb_substitute_character(): Unknown character., %s(%d) +bool(false) + +--float -12.3456789000e10-- +Error: 2 - mb_substitute_character(): Unknown character., %s(%d) +bool(false) + +--float .5-- +Error: 2 - mb_substitute_character(): Unknown character., %s(%d) +bool(false) + +--empty array-- +Error: 2 - mb_substitute_character(): Unknown character., %s(%d) +bool(false) + +--int indexed array-- +bool(true) + +--associative array-- +bool(true) + +--nested arrays-- +bool(true) + +--uppercase NULL-- +Error: 2 - mb_substitute_character(): Unknown character., %s(%d) +bool(false) + +--lowercase null-- +Error: 2 - mb_substitute_character(): Unknown character., %s(%d) +bool(false) + +--lowercase true-- +bool(true) + +--lowercase false-- +Error: 2 - mb_substitute_character(): Unknown character., %s(%d) +bool(false) + +--uppercase TRUE-- +bool(true) + +--uppercase FALSE-- +Error: 2 - mb_substitute_character(): Unknown character., %s(%d) +bool(false) + +--empty string DQ-- +bool(true) + +--empty string SQ-- +bool(true) + +--string DQ-- +Error: 2 - mb_substitute_character(): Unknown character., %s(%d) +bool(false) + +--string SQ-- +Error: 2 - mb_substitute_character(): Unknown character., %s(%d) +bool(false) + +--mixed case string-- +Error: 2 - mb_substitute_character(): Unknown character., %s(%d) +bool(false) + +--heredoc-- +Error: 2 - mb_substitute_character(): Unknown character., %s(%d) +bool(false) + +--instance of classWithToString-- +Error: 8 - Object of class classWithToString could not be converted to int, %s(%d) +bool(true) + +--instance of classWithoutToString-- +Error: 8 - Object of class classWithoutToString could not be converted to int, %s(%d) +bool(true) + +--undefined var-- +Error: 2 - mb_substitute_character(): Unknown character., %s(%d) +bool(false) + +--unset var-- +Error: 2 - mb_substitute_character(): Unknown character., %s(%d) +bool(false) +===DONE=== + diff --git a/ext/mbstring/tests/mb_substitute_character_variation2.phpt b/ext/mbstring/tests/mb_substitute_character_variation2.phpt new file mode 100644 index 0000000..202561a --- /dev/null +++ b/ext/mbstring/tests/mb_substitute_character_variation2.phpt @@ -0,0 +1,39 @@ +--TEST-- +Test mb_substitute_character() function : variation unmappable out char for convert encoding +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substitute_character') or die("skip mb_substitute_character() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : mixed mb_substitute_character([mixed substchar]) + * Description: Sets the current substitute_character or returns the current substitute_character + * Source code: ext/mbstring/mbstring.c + * Alias to functions: + */ + +echo "*** Testing mb_substitute_character() : variation ***\n"; +//japenese utf-8 +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI'); + +//output the default which is ? in ISO-8859-1, x3f +var_dump(bin2hex(mb_convert_encoding($string_mb, "ISO-8859-1", "UTF-8"))); + +mb_substitute_character(66); //'B' in ISO-8859-1, x42 +var_dump(bin2hex(mb_convert_encoding($string_mb, "ISO-8859-1", "UTF-8"))); +mb_substitute_character("none"); //no substitution +var_dump(bin2hex(mb_convert_encoding($string_mb, "ISO-8859-1", "UTF-8"))); +mb_substitute_character(280); //not valid in ISO-8859-1 +var_dump(bin2hex(mb_convert_encoding($string_mb, "ISO-8859-1", "UTF-8"))); + + +?> +===DONE=== +--EXPECT-- +*** Testing mb_substitute_character() : variation *** +string(14) "3f3f3f3f3f3f3f" +string(14) "42424242424242" +string(0) "" +string(0) "" +===DONE=== diff --git a/ext/mbstring/tests/mb_substr.phpt b/ext/mbstring/tests/mb_substr.phpt new file mode 100644 index 0000000..d9269c3 --- /dev/null +++ b/ext/mbstring/tests/mb_substr.phpt @@ -0,0 +1,35 @@ +--TEST-- +mb_substr() +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +output_handler= +mbstring.func_overload=0 +--FILE-- +<?php +// TODO: Add more encodings +ini_set('include_path','.'); +include_once('common.inc'); + +// EUC-JP +$euc_jp = b'0123¤³¤Îʸ»úÎó¤ÏÆüËܸì¤Ç¤¹¡£EUC-JP¤ò»È¤Ã¤Æ¤¤¤Þ¤¹¡£ÆüËܸì¤ÏÌÌÅݽ¤¤¡£'; + +print "1: ". bin2hex(mb_substr($euc_jp, 10, 10,'EUC-JP')) . "\n"; +print "2: ". bin2hex(mb_substr($euc_jp, 0, 100,'EUC-JP')) . "\n"; + +$str = mb_substr($euc_jp, 100, 10,'EUC-JP'); +// Note: returns last character +($str === "") ? print "3 OK\n" : print "NG: ".bin2hex($str)."\n"; + +$str = mb_substr($euc_jp, -100, 10,'EUC-JP'); +($str !== "") ? print "4 OK: ".bin2hex($str)."\n" : print "NG: ".bin2hex($str)."\n"; + +?> + +--EXPECT-- +1: c6fccbdcb8eca4c7a4b9a1a34555432d +2: 30313233a4b3a4cecab8bbfacef3a4cfc6fccbdcb8eca4c7a4b9a1a34555432d4a50a4f2bbc8a4c3a4c6a4a4a4dea4b9a1a3c6fccbdcb8eca4cfccccc5ddbdada4a4a1a3 +3 OK +4 OK: 30313233a4b3a4cecab8bbfacef3a4cf + + diff --git a/ext/mbstring/tests/mb_substr_basic.phpt b/ext/mbstring/tests/mb_substr_basic.phpt new file mode 100644 index 0000000..d6d6b75 --- /dev/null +++ b/ext/mbstring/tests/mb_substr_basic.phpt @@ -0,0 +1,57 @@ +--TEST-- +Test mb_substr() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substr') or die("skip mb_substr() is not available in this build"); +?> +--INI-- +mbstring.internal_encoding=ISO-8859-1 +--FILE-- +<?php +/* Prototype : string mb_substr(string $str, int $start [, int $length [, string $encoding]]) + * Description: Returns part of a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test Basic Functionality of mb_substr with ASCII characters and multibyte strings. + */ + +echo "*** Testing mb_substr() : basic functionality ***\n"; + +$string_ascii = 'ABCDEF'; +//Japanese string in UTF-8 +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); + +echo "\n-- ASCII string 1 --\n"; +var_dump(mb_substr($string_ascii, 3)); + +echo "\n-- ASCII string 2 --\n"; +var_dump(mb_substr($string_ascii, 3, 5, 'ISO-8859-1')); + +echo "\n-- Multibyte string 1 --\n"; +$result_1 = mb_substr($string_mb, 2, 7); +var_dump(base64_encode($result_1)); + +echo "\n-- Multibyte string 2 --\n"; +$result_2 = mb_substr($string_mb, 2, 7, 'utf-8'); +var_dump(base64_encode($result_2)); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_substr() : basic functionality *** + +-- ASCII string 1 -- +string(3) "DEF" + +-- ASCII string 2 -- +string(3) "DEF" + +-- Multibyte string 1 -- +string(12) "peacrOiqng==" + +-- Multibyte string 2 -- +string(28) "6Kqe44OG44Kt44K544OI44Gn44GZ" +Done diff --git a/ext/mbstring/tests/mb_substr_count.phpt b/ext/mbstring/tests/mb_substr_count.phpt new file mode 100644 index 0000000..5be5109 --- /dev/null +++ b/ext/mbstring/tests/mb_substr_count.phpt @@ -0,0 +1,44 @@ +--TEST-- +mb_substr_count() +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +output_handler= +--FILE-- +<?php + mb_internal_encoding("EUC-JP"); + var_dump(@mb_substr_count("", "")); + var_dump(@mb_substr_count("¤¢", "")); + var_dump(@mb_substr_count("", "¤¢")); + var_dump(@mb_substr_count("", "¤¢")); + var_dump(@mb_substr_count("", chr(0))); + + $a = str_repeat("abcacba", 100); + var_dump(@mb_substr_count($a, "bca")); + + $a = str_repeat("¤¢¤¤¤¦¤¢¤¦¤¤¤¢", 100); + $b = "¤¤¤¦¤¢"; + var_dump(@mb_substr_count($a, $b)); + + $to_enc = "UTF-8"; + var_dump(@mb_substr_count(mb_convert_encoding($a, $to_enc), + mb_convert_encoding($b, $to_enc), $to_enc)); + + $to_enc = "Shift_JIS"; + var_dump(@mb_substr_count(mb_convert_encoding($a, $to_enc), + mb_convert_encoding($b, $to_enc), $to_enc)); + + $a = str_repeat("abcacbabca", 100); + var_dump(@mb_substr_count($a, "bca")); +?> +--EXPECT-- +bool(false) +bool(false) +int(0) +int(0) +int(0) +int(100) +int(100) +int(100) +int(100) +int(200) diff --git a/ext/mbstring/tests/mb_substr_count_basic.phpt b/ext/mbstring/tests/mb_substr_count_basic.phpt new file mode 100644 index 0000000..c4d1d78 --- /dev/null +++ b/ext/mbstring/tests/mb_substr_count_basic.phpt @@ -0,0 +1,47 @@ +--TEST-- +Test mb_substr_count() function : basic functionality +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substr_count') or die("skip mb_substr_count() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_substr_count(string $haystack, string $needle [, string $encoding]) + * Description: Count the number of substring occurrences + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test Basic functionality of mb_substr_count + */ + +echo "*** Testing mb_substr_count() : basic functionality ***\n"; + +$string_ascii = 'This is an English string. 0123456789.'; + +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); +$needle_mb1 = base64_decode('44CC'); +$needle_mb2 = base64_decode('44GT44KT44Gr44Gh44Gv44CB5LiW55WM'); + +echo "\n-- ASCII String --\n"; +var_dump(mb_substr_count($string_ascii, 'is')); +var_dump(mb_substr_count($string_ascii, 'hello, world')); + +echo "\n-- Multibyte String --\n"; +var_dump(mb_substr_count($string_mb, $needle_mb1)); +var_dump(mb_substr_count($string_mb, $needle_mb2)); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_substr_count() : basic functionality *** + +-- ASCII String -- +int(3) +int(0) + +-- Multibyte String -- +int(2) +int(0) +Done diff --git a/ext/mbstring/tests/mb_substr_count_error1.phpt b/ext/mbstring/tests/mb_substr_count_error1.phpt new file mode 100644 index 0000000..881ca0c --- /dev/null +++ b/ext/mbstring/tests/mb_substr_count_error1.phpt @@ -0,0 +1,49 @@ +--TEST-- +Test mb_substr_count() function : error conditions - pass incorrect number of arguments +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substr_count') or die("skip mb_substr_count() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_substr_count(string $haystack, string $needle [, string $encoding]) + * Description: Count the number of substring occurrences + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass an incorrect number of arguments to mb_substr_count() to test behaviour + */ + +echo "*** Testing mb_substr_count() : error conditions ***\n"; + + +//Test mb_substr_count with one more than the expected number of arguments +echo "\n-- Testing mb_substr_count() function with more than expected no. of arguments --\n"; +$haystack = 'string_val'; +$needle = 'val'; +$encoding = 'utf-8'; +$extra_arg = 10; +var_dump( mb_substr_count($haystack, $needle, $encoding, $extra_arg) ); + +// Testing mb_substr_count with one less than the expected number of arguments +echo "\n-- Testing mb_substr_count() function with less than expected no. of arguments --\n"; +$haystack = 'string_val'; +var_dump( mb_substr_count($haystack) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_substr_count() : error conditions *** + +-- Testing mb_substr_count() function with more than expected no. of arguments -- + +Warning: mb_substr_count() expects at most 3 parameters, 4 given in %s on line %d +NULL + +-- Testing mb_substr_count() function with less than expected no. of arguments -- + +Warning: mb_substr_count() expects at least 2 parameters, 1 given in %s on line %d +NULL +Done diff --git a/ext/mbstring/tests/mb_substr_count_error2.phpt b/ext/mbstring/tests/mb_substr_count_error2.phpt new file mode 100644 index 0000000..aefb2c0 --- /dev/null +++ b/ext/mbstring/tests/mb_substr_count_error2.phpt @@ -0,0 +1,37 @@ +--TEST-- +Test mb_substr_count() function : error conditions - pass unknown encoding +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substr_count') or die("skip mb_substr_count() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_substr_count(string $haystack, string $needle [, string $encoding]) + * Description: Count the number of substring occurrences + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test behaviour of mb_substr_count() function when passed an unknown encoding + */ + +echo "*** Testing mb_substr_count() : error conditions ***\n"; + +$haystack = 'Hello, World!'; +$needle = 'Hello'; +$encoding = 'unknown-encoding'; + +echo "\n-- Testing mb_substr_count() function with an unknown encoding --\n"; +var_dump(mb_substr_count($haystack, $needle, $encoding)); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_substr_count() : error conditions *** + +-- Testing mb_substr_count() function with an unknown encoding -- + +Warning: mb_substr_count(): Unknown encoding "unknown-encoding" in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_substr_count_variation1.phpt b/ext/mbstring/tests/mb_substr_count_variation1.phpt new file mode 100644 index 0000000..cc55135 --- /dev/null +++ b/ext/mbstring/tests/mb_substr_count_variation1.phpt @@ -0,0 +1,182 @@ +--TEST-- +Test mb_substr_count() function : usage variations - Pass different data types as $haystack arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substr_count') or die("skip mb_substr_count() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype :int mb_substr_count(string $haystack, string $needle [, string $encoding]) + * Description: Count the number of substring occurrences + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass different data types as $haystack argument to mb_substr_count() to test behaviour + */ + +echo "*** Testing mb_substr_count() : usage variations ***\n"; + + +// Initialise function arguments not being substituted +$needle = 'world'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "hello, world"; + } +} + +// heredoc string +$heredoc = <<<EOT +hello, world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $haystack argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "hello, world", + 'hello, world', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_substr_count() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_substr_count($input, $needle) ); + $iterator++; +}; + +fclose($fp); + + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_substr_count() : usage variations *** + +-- Iteration 1 -- +int(0) + +-- Iteration 2 -- +int(0) + +-- Iteration 3 -- +int(0) + +-- Iteration 4 -- +int(0) + +-- Iteration 5 -- +int(0) + +-- Iteration 6 -- +int(0) + +-- Iteration 7 -- +int(0) + +-- Iteration 8 -- +int(0) + +-- Iteration 9 -- +int(0) + +-- Iteration 10 -- +int(0) + +-- Iteration 11 -- +int(0) + +-- Iteration 12 -- +int(0) + +-- Iteration 13 -- +int(0) + +-- Iteration 14 -- +int(0) + +-- Iteration 15 -- +int(0) + +-- Iteration 16 -- +int(0) + +-- Iteration 17 -- +int(0) + +-- Iteration 18 -- +int(1) + +-- Iteration 19 -- +int(1) + +-- Iteration 20 -- +int(1) + +-- Iteration 21 -- +int(1) + +-- Iteration 22 -- +int(0) + +-- Iteration 23 -- +int(0) + +-- Iteration 24 -- + +Warning: mb_substr_count() expects parameter 1 to be string, resource given in %s on line %d +NULL +Done diff --git a/ext/mbstring/tests/mb_substr_count_variation2.phpt b/ext/mbstring/tests/mb_substr_count_variation2.phpt new file mode 100644 index 0000000..87b5eed --- /dev/null +++ b/ext/mbstring/tests/mb_substr_count_variation2.phpt @@ -0,0 +1,196 @@ +--TEST-- +Test mb_substr_count() function : usage variations - pass different data types as $needle arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substr_count') or die("skip mb_substr_count() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_substr_count(string $haystack, string $needle [, string $encoding]) + * Description: Count the number of substring occurrences + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass different data types as $needle to mb_substr_count() to test behaviour + */ + +echo "*** Testing mb_substr_count() : usage variations ***\n"; + +// Initialise function arguments not being substituted (if any) +$haystack = 'hello, world'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "world"; + } +} + +// heredoc string +$heredoc = <<<EOT +world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $needle argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "world", + 'world', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_substr_count() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_substr_count($haystack, $input) ); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_substr_count() : usage variations *** + +-- Iteration 1 -- +int(0) + +-- Iteration 2 -- +int(0) + +-- Iteration 3 -- +int(0) + +-- Iteration 4 -- +int(0) + +-- Iteration 5 -- +int(0) + +-- Iteration 6 -- +int(0) + +-- Iteration 7 -- +int(0) + +-- Iteration 8 -- +int(0) + +-- Iteration 9 -- +int(0) + +-- Iteration 10 -- + +Warning: mb_substr_count(): Empty substring in %s on line %d +bool(false) + +-- Iteration 11 -- + +Warning: mb_substr_count(): Empty substring in %s on line %d +bool(false) + +-- Iteration 12 -- +int(0) + +-- Iteration 13 -- + +Warning: mb_substr_count(): Empty substring in %s on line %d +bool(false) + +-- Iteration 14 -- +int(0) + +-- Iteration 15 -- + +Warning: mb_substr_count(): Empty substring in %s on line %d +bool(false) + +-- Iteration 16 -- + +Warning: mb_substr_count(): Empty substring in %s on line %d +bool(false) + +-- Iteration 17 -- + +Warning: mb_substr_count(): Empty substring in %s on line %d +bool(false) + +-- Iteration 18 -- +int(1) + +-- Iteration 19 -- +int(1) + +-- Iteration 20 -- +int(1) + +-- Iteration 21 -- +int(1) + +-- Iteration 22 -- + +Warning: mb_substr_count(): Empty substring in %s on line %d +bool(false) + +-- Iteration 23 -- + +Warning: mb_substr_count(): Empty substring in %s on line %d +bool(false) + +-- Iteration 24 -- + +Warning: mb_substr_count() expects parameter 2 to be string, resource given in %s on line %d +NULL +Done diff --git a/ext/mbstring/tests/mb_substr_count_variation3.phpt b/ext/mbstring/tests/mb_substr_count_variation3.phpt new file mode 100644 index 0000000..65c8769 --- /dev/null +++ b/ext/mbstring/tests/mb_substr_count_variation3.phpt @@ -0,0 +1,220 @@ +--TEST-- +Test mb_substr_count() function :usage variations - pass different data types as $encoding arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substr_count') or die("skip mb_substr_count() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_substr_count(string $haystack, string $needle [, string $encoding]) + * Description: Count the number of substring occurrences + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass different data types as $encoding argument to mb_substr_count() to test behaviour + * Where possible, 'UTF-8' is entered as string value + */ + +echo "*** Testing mb_substr_count() : usage variations ***\n"; + +// Initialise function arguments not being substituted (if any) +$haystack = b'hello, world'; +$needle = b'world'; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "UTF-8"; + } +} + +// heredoc string +$heredoc = <<<EOT +UTF-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $encoding argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "UTF-8", + 'UTF-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_substr_count() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_substr_count($haystack, $needle, $input) ); + $iterator++; +}; + +fclose($fp); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_substr_count() : usage variations *** + +-- Iteration 1 -- + +Warning: mb_substr_count(): Unknown encoding "0" in %s on line %d +bool(false) + +-- Iteration 2 -- + +Warning: mb_substr_count(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 3 -- + +Warning: mb_substr_count(): Unknown encoding "12345" in %s on line %d +bool(false) + +-- Iteration 4 -- + +Warning: mb_substr_count(): Unknown encoding "-2345" in %s on line %d +bool(false) + +-- Iteration 5 -- + +Warning: mb_substr_count(): Unknown encoding "10.5" in %s on line %d +bool(false) + +-- Iteration 6 -- + +Warning: mb_substr_count(): Unknown encoding "-10.5" in %s on line %d +bool(false) + +-- Iteration 7 -- + +Warning: mb_substr_count(): Unknown encoding "123456789000" in %s on line %d +bool(false) + +-- Iteration 8 -- + +Warning: mb_substr_count(): Unknown encoding "1.23456789E-9" in %s on line %d +bool(false) + +-- Iteration 9 -- + +Warning: mb_substr_count(): Unknown encoding "0.5" in %s on line %d +bool(false) + +-- Iteration 10 -- + +Warning: mb_substr_count(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 11 -- + +Warning: mb_substr_count(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 12 -- + +Warning: mb_substr_count(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 13 -- + +Warning: mb_substr_count(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 14 -- + +Warning: mb_substr_count(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 15 -- + +Warning: mb_substr_count(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 16 -- + +Warning: mb_substr_count(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 17 -- + +Warning: mb_substr_count(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 18 -- +int(1) + +-- Iteration 19 -- +int(1) + +-- Iteration 20 -- +int(1) + +-- Iteration 21 -- +int(1) + +-- Iteration 22 -- + +Warning: mb_substr_count(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 23 -- + +Warning: mb_substr_count(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 24 -- + +Warning: mb_substr_count() expects parameter 3 to be string, resource given in %s on line %d +NULL +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_substr_count_variation4.phpt b/ext/mbstring/tests/mb_substr_count_variation4.phpt new file mode 100644 index 0000000..624c95a --- /dev/null +++ b/ext/mbstring/tests/mb_substr_count_variation4.phpt @@ -0,0 +1,44 @@ +--TEST-- +Test mb_substr_count() function : variation - pass a $needle that overlaps in $haystack +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substr_count') or die("skip mb_substr_count() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : int mb_substr_count(string $haystack, string $needle [, string $encoding]) + * Description: Count the number of substring occurrences + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass mb_substr_count() a $needle that overlaps in $haystack and see whether + * it counts only the first occurrence or all other occurrences regardless whether they + * were part of previous match + */ + +echo "*** Testing mb_substr_count() : usage variations ***\n"; + + +echo "\n-- ASCII String --\n"; +$string_ascii = b'abcabcabc'; +var_dump(mb_substr_count($string_ascii, b'abcabc')); //needle overlaps in haystack + +echo "\n-- Multibyte String --\n"; +$string_mb = base64_decode('5pel5pys6Kqe5pel5pys6Kqe5pel5pys6Kqe'); +$needle_mb = base64_decode('5pel5pys6Kqe5pel5pys6Kqe'); +var_dump(mb_substr_count($string_mb, $needle_mb, 'utf-8')); + + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_substr_count() : usage variations *** + +-- ASCII String -- +int(1) + +-- Multibyte String -- +int(1) +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_substr_error1.phpt b/ext/mbstring/tests/mb_substr_error1.phpt new file mode 100644 index 0000000..e48b319 --- /dev/null +++ b/ext/mbstring/tests/mb_substr_error1.phpt @@ -0,0 +1,49 @@ +--TEST-- +Test mb_substr() function : error conditions - Pass incorrect number of args +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substr') or die("skip mb_substr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_substr(string $str, int $start [, int $length [, string $encoding]]) + * Description: Returns part of a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass incorrect number of arguments to mb_substr() to test behaviour + */ + +echo "*** Testing mb_substr() : error conditions ***\n"; + +//Test mb_substr with one more than the expected number of arguments +echo "\n-- Testing mb_substr() function with more than expected no. of arguments --\n"; +$str = 'string_val'; +$start = 10; +$length = 10; +$encoding = 'string_val'; +$extra_arg = 10; +var_dump( mb_substr($str, $start, $length, $encoding, $extra_arg) ); + +// Testing mb_substr with one less than the expected number of arguments +echo "\n-- Testing mb_substr() function with less than expected no. of arguments --\n"; +$str = 'string_val'; +var_dump( mb_substr($str) ); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_substr() : error conditions *** + +-- Testing mb_substr() function with more than expected no. of arguments -- + +Warning: mb_substr() expects at most 4 parameters, 5 given in %s on line %d +NULL + +-- Testing mb_substr() function with less than expected no. of arguments -- + +Warning: mb_substr() expects at least 2 parameters, 1 given in %s on line %d +NULL +Done diff --git a/ext/mbstring/tests/mb_substr_error2.phpt b/ext/mbstring/tests/mb_substr_error2.phpt new file mode 100644 index 0000000..72be974 --- /dev/null +++ b/ext/mbstring/tests/mb_substr_error2.phpt @@ -0,0 +1,35 @@ +--TEST-- +Test mb_substr() function : error conditions - Pass an unknown encoding +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substr') or die("skip mb_substr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_substr(string $str, int $start [, int $length [, string $encoding]]) + * Description: Returns part of a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass an unknown encoding to mb_substr() to test behaviour + */ + +echo "*** Testing mb_substr() : error conditions ***\n"; + +$str = 'Hello, world'; +$start = 1; +$length = 5; +$encoding = 'unknown-encoding'; + +var_dump( mb_substr($str, $start, $length, $encoding)); + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_substr() : error conditions *** + +Warning: mb_substr(): Unknown encoding "unknown-encoding" in %s on line %d +bool(false) +Done diff --git a/ext/mbstring/tests/mb_substr_variation1.phpt b/ext/mbstring/tests/mb_substr_variation1.phpt new file mode 100644 index 0000000..b02daa3 --- /dev/null +++ b/ext/mbstring/tests/mb_substr_variation1.phpt @@ -0,0 +1,181 @@ +--TEST-- +Test mb_substr() function : usage variations - pass unexpected arguments (including strings) in place of $str +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substr') or die("skip mb_substr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_substr(string $str, int $start [, int $length [, string $encoding]]) + * Description: Returns part of a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass different data types as $str to mb_substr() to test behaviour + */ + +echo "*** Testing mb_substr() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$start = 0; +$length = 5; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "Class A object"; + } +} + +// heredoc string +$heredoc = <<<EOT +hello world +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $str argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "string", + 'string', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_substr() +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + var_dump( mb_substr($input, $start, $length)); + $iterator++; +}; + +fclose($fp); +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_substr() : usage variations *** + +-- Iteration 1 -- +string(1) "0" + +-- Iteration 2 -- +string(1) "1" + +-- Iteration 3 -- +string(5) "12345" + +-- Iteration 4 -- +string(5) "-2345" + +-- Iteration 5 -- +string(4) "10.5" + +-- Iteration 6 -- +string(5) "-10.5" + +-- Iteration 7 -- +string(5) "12345" + +-- Iteration 8 -- +string(5) "1.234" + +-- Iteration 9 -- +string(3) "0.5" + +-- Iteration 10 -- +string(0) "" + +-- Iteration 11 -- +string(0) "" + +-- Iteration 12 -- +string(1) "1" + +-- Iteration 13 -- +string(0) "" + +-- Iteration 14 -- +string(1) "1" + +-- Iteration 15 -- +string(0) "" + +-- Iteration 16 -- +string(0) "" + +-- Iteration 17 -- +string(0) "" + +-- Iteration 18 -- +string(5) "strin" + +-- Iteration 19 -- +string(5) "strin" + +-- Iteration 20 -- +string(5) "hello" + +-- Iteration 21 -- +string(5) "Class" + +-- Iteration 22 -- +string(0) "" + +-- Iteration 23 -- +string(0) "" + +-- Iteration 24 -- + +Warning: mb_substr() expects parameter 1 to be string, resource given in %s on line %d +NULL +Done + diff --git a/ext/mbstring/tests/mb_substr_variation2.phpt b/ext/mbstring/tests/mb_substr_variation2.phpt new file mode 100644 index 0000000..7c02601 --- /dev/null +++ b/ext/mbstring/tests/mb_substr_variation2.phpt @@ -0,0 +1,227 @@ +--TEST-- +Test mb_substr() function : usage variations - Pass different data types as $encoding arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substr') or die("skip mb_substr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_substr(string $str, int $start [, int $length [, string $encoding]]) + * Description: Returns part of a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass different data types as $encoding argument to mb_substr() to test behaviour + * Where possible, 'UTF-8' is entered as string value + */ + +echo "*** Testing mb_substr() : usage variations ***\n"; + +// Initialise function arguments not being substituted +$str = b'string_val'; +$start = 1; +$length = 5; + +//get an unset variable +$unset_var = 10; +unset ($unset_var); + +// get a class +class classA +{ + public function __toString() { + return "UTF-8"; + } +} + +// heredoc string +$heredoc = <<<EOT +UTF-8 +EOT; + +// get a resource variable +$fp = fopen(__FILE__, "r"); + +// unexpected values to be passed to $input argument +$inputs = array( + + // int data +/*1*/ 0, + 1, + 12345, + -2345, + + // float data +/*5*/ 10.5, + -10.5, + 12.3456789000e10, + 12.3456789000E-10, + .5, + + // null data +/*10*/ NULL, + null, + + // boolean data +/*12*/ true, + false, + TRUE, + FALSE, + + // empty data +/*16*/ "", + '', + + // string data +/*18*/ "UTF-8", + 'UTF-8', + $heredoc, + + // object data +/*21*/ new classA(), + + // undefined data +/*22*/ @$undefined_var, + + // unset data +/*23*/ @$unset_var, + + // resource variable +/*24*/ $fp +); + +// loop through each element of $inputs to check the behavior of mb_substr +$iterator = 1; +foreach($inputs as $input) { + echo "\n-- Iteration $iterator --\n"; + $res = mb_substr($str, $start, $length, $input); + if ($res === false) { + var_dump($res); + } + else { + var_dump(bin2hex($res)); + } + $iterator++; +}; + +fclose($fp); +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_substr() : usage variations *** + +-- Iteration 1 -- + +Warning: mb_substr(): Unknown encoding "0" in %s on line %d +bool(false) + +-- Iteration 2 -- + +Warning: mb_substr(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 3 -- + +Warning: mb_substr(): Unknown encoding "12345" in %s on line %d +bool(false) + +-- Iteration 4 -- + +Warning: mb_substr(): Unknown encoding "-2345" in %s on line %d +bool(false) + +-- Iteration 5 -- + +Warning: mb_substr(): Unknown encoding "10.5" in %s on line %d +bool(false) + +-- Iteration 6 -- + +Warning: mb_substr(): Unknown encoding "-10.5" in %s on line %d +bool(false) + +-- Iteration 7 -- + +Warning: mb_substr(): Unknown encoding "123456789000" in %s on line %d +bool(false) + +-- Iteration 8 -- + +Warning: mb_substr(): Unknown encoding "1.23456789E-9" in %s on line %d +bool(false) + +-- Iteration 9 -- + +Warning: mb_substr(): Unknown encoding "0.5" in %s on line %d +bool(false) + +-- Iteration 10 -- + +Warning: mb_substr(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 11 -- + +Warning: mb_substr(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 12 -- + +Warning: mb_substr(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 13 -- + +Warning: mb_substr(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 14 -- + +Warning: mb_substr(): Unknown encoding "1" in %s on line %d +bool(false) + +-- Iteration 15 -- + +Warning: mb_substr(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 16 -- + +Warning: mb_substr(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 17 -- + +Warning: mb_substr(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 18 -- +string(10) "7472696e67" + +-- Iteration 19 -- +string(10) "7472696e67" + +-- Iteration 20 -- +string(10) "7472696e67" + +-- Iteration 21 -- +string(10) "7472696e67" + +-- Iteration 22 -- + +Warning: mb_substr(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 23 -- + +Warning: mb_substr(): Unknown encoding "" in %s on line %d +bool(false) + +-- Iteration 24 -- + +Warning: mb_substr() expects parameter 4 to be string, resource given in %s on line %d +string(0) "" +Done + diff --git a/ext/mbstring/tests/mb_substr_variation3.phpt b/ext/mbstring/tests/mb_substr_variation3.phpt new file mode 100644 index 0000000..f0ba2bc --- /dev/null +++ b/ext/mbstring/tests/mb_substr_variation3.phpt @@ -0,0 +1,445 @@ +--TEST-- +Test mb_substr() function : usage variations - test different encodings +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substr') or die("skip mb_substr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_substr(string $str, int $start [, int $length [, string $encoding]]) + * Description: Returns part of a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Pass all encodings listed on php.net to test that function recognises them. + * NB: The strings passed are *NOT* necessarily encoded in the encoding passed to the function. + * This test is purely to see whether the function recognises the encoding. + */ + +echo "*** Testing mb_substr() : usage variations ***\n"; + +$encoding = array('UCS-4', /*1*/ + 'UCS-4BE', + 'UCS-4LE', + 'UCS-2', + 'UCS-2BE', /*5*/ + 'UCS-2LE', + 'UTF-32', + 'UTF-32BE', + 'UTF-32LE', + 'UTF-16', /*10*/ + 'UTF-16BE', + 'UTF-16LE', + 'UTF-7', + 'UTF7-IMAP', + 'UTF-8', /*15*/ + 'ASCII', + 'EUC-JP', + 'SJIS', + 'eucJP-win', + 'SJIS-win', /*20*/ + 'ISO-2022-JP', + 'JIS', + 'ISO-8859-1', + 'ISO-8859-2', + 'ISO-8859-3', /*25*/ + 'ISO-8859-4', + 'ISO-8859-5', + 'ISO-8859-6', + 'ISO-8859-7', + 'ISO-8859-8', /*30*/ + 'ISO-8859-9', + 'ISO-8859-10', + 'ISO-8859-13', + 'ISO-8859-14', + 'ISO-8859-15', /*35*/ + 'byte2be', + 'byte2le', + 'byte4be', + 'byte4le', + 'BASE64', /*40*/ + 'HTML-ENTITIES', + '7bit', + '8bit', + 'EUC-CN', + 'CP936', /*45*/ + 'HZ', + 'EUC-TW', + 'CP950', + 'BIG-5', + 'EUC-KR', /*50*/ + 'UHC', + 'ISO-2022-KR', + 'Windows-1251', + 'Windows-1252', + 'CP866', /*55*/ + 'KOI8-R'); /*56*/ + + + +$iterator = 1; +$string_ascii = 'abc def'; +//Japanese string encoded in UTF-8 +$string_mb = base64_decode('44K/44OT44Ol44Os44O844OG44Kj44Oz44Kw44O744Oe44K344O844Oz44O744Kr44Oz44OR44OL44O8'); + +foreach($encoding as $enc) { + echo "\n-- Iteration $iterator: $enc --\n"; + + echo "-- ASCII String --\n"; + if (mb_substr($string_ascii, 1, 5, $enc)) { + echo "Encoding $enc recognised\n"; + } else { + echo "Encoding $enc not recognised\n"; + } + + echo "-- Multibyte String --\n"; + if (mb_substr($string_mb, 1, 5, $enc)) { + echo "Encoding $enc recognised\n"; + } else { + echo "Encoding $enc not recognised\n"; + } +} + +echo "Done"; +?> +--EXPECTF-- +*** Testing mb_substr() : usage variations *** + +-- Iteration 1: UCS-4 -- +-- ASCII String -- +Encoding UCS-4 recognised +-- Multibyte String -- +Encoding UCS-4 recognised + +-- Iteration 1: UCS-4BE -- +-- ASCII String -- +Encoding UCS-4BE recognised +-- Multibyte String -- +Encoding UCS-4BE recognised + +-- Iteration 1: UCS-4LE -- +-- ASCII String -- +Encoding UCS-4LE recognised +-- Multibyte String -- +Encoding UCS-4LE recognised + +-- Iteration 1: UCS-2 -- +-- ASCII String -- +Encoding UCS-2 recognised +-- Multibyte String -- +Encoding UCS-2 recognised + +-- Iteration 1: UCS-2BE -- +-- ASCII String -- +Encoding UCS-2BE recognised +-- Multibyte String -- +Encoding UCS-2BE recognised + +-- Iteration 1: UCS-2LE -- +-- ASCII String -- +Encoding UCS-2LE recognised +-- Multibyte String -- +Encoding UCS-2LE recognised + +-- Iteration 1: UTF-32 -- +-- ASCII String -- +Encoding UTF-32 recognised +-- Multibyte String -- +Encoding UTF-32 recognised + +-- Iteration 1: UTF-32BE -- +-- ASCII String -- +Encoding UTF-32BE recognised +-- Multibyte String -- +Encoding UTF-32BE recognised + +-- Iteration 1: UTF-32LE -- +-- ASCII String -- +Encoding UTF-32LE recognised +-- Multibyte String -- +Encoding UTF-32LE recognised + +-- Iteration 1: UTF-16 -- +-- ASCII String -- +Encoding UTF-16 recognised +-- Multibyte String -- +Encoding UTF-16 recognised + +-- Iteration 1: UTF-16BE -- +-- ASCII String -- +Encoding UTF-16BE recognised +-- Multibyte String -- +Encoding UTF-16BE recognised + +-- Iteration 1: UTF-16LE -- +-- ASCII String -- +Encoding UTF-16LE recognised +-- Multibyte String -- +Encoding UTF-16LE recognised + +-- Iteration 1: UTF-7 -- +-- ASCII String -- +Encoding UTF-7 recognised +-- Multibyte String -- +Encoding UTF-7 recognised + +-- Iteration 1: UTF7-IMAP -- +-- ASCII String -- +Encoding UTF7-IMAP recognised +-- Multibyte String -- +Encoding UTF7-IMAP recognised + +-- Iteration 1: UTF-8 -- +-- ASCII String -- +Encoding UTF-8 recognised +-- Multibyte String -- +Encoding UTF-8 recognised + +-- Iteration 1: ASCII -- +-- ASCII String -- +Encoding ASCII recognised +-- Multibyte String -- +Encoding ASCII recognised + +-- Iteration 1: EUC-JP -- +-- ASCII String -- +Encoding EUC-JP recognised +-- Multibyte String -- +Encoding EUC-JP recognised + +-- Iteration 1: SJIS -- +-- ASCII String -- +Encoding SJIS recognised +-- Multibyte String -- +Encoding SJIS recognised + +-- Iteration 1: eucJP-win -- +-- ASCII String -- +Encoding eucJP-win recognised +-- Multibyte String -- +Encoding eucJP-win recognised + +-- Iteration 1: SJIS-win -- +-- ASCII String -- +Encoding SJIS-win recognised +-- Multibyte String -- +Encoding SJIS-win recognised + +-- Iteration 1: ISO-2022-JP -- +-- ASCII String -- +Encoding ISO-2022-JP recognised +-- Multibyte String -- +Encoding ISO-2022-JP recognised + +-- Iteration 1: JIS -- +-- ASCII String -- +Encoding JIS recognised +-- Multibyte String -- +Encoding JIS recognised + +-- Iteration 1: ISO-8859-1 -- +-- ASCII String -- +Encoding ISO-8859-1 recognised +-- Multibyte String -- +Encoding ISO-8859-1 recognised + +-- Iteration 1: ISO-8859-2 -- +-- ASCII String -- +Encoding ISO-8859-2 recognised +-- Multibyte String -- +Encoding ISO-8859-2 recognised + +-- Iteration 1: ISO-8859-3 -- +-- ASCII String -- +Encoding ISO-8859-3 recognised +-- Multibyte String -- +Encoding ISO-8859-3 recognised + +-- Iteration 1: ISO-8859-4 -- +-- ASCII String -- +Encoding ISO-8859-4 recognised +-- Multibyte String -- +Encoding ISO-8859-4 recognised + +-- Iteration 1: ISO-8859-5 -- +-- ASCII String -- +Encoding ISO-8859-5 recognised +-- Multibyte String -- +Encoding ISO-8859-5 recognised + +-- Iteration 1: ISO-8859-6 -- +-- ASCII String -- +Encoding ISO-8859-6 recognised +-- Multibyte String -- +Encoding ISO-8859-6 recognised + +-- Iteration 1: ISO-8859-7 -- +-- ASCII String -- +Encoding ISO-8859-7 recognised +-- Multibyte String -- +Encoding ISO-8859-7 recognised + +-- Iteration 1: ISO-8859-8 -- +-- ASCII String -- +Encoding ISO-8859-8 recognised +-- Multibyte String -- +Encoding ISO-8859-8 recognised + +-- Iteration 1: ISO-8859-9 -- +-- ASCII String -- +Encoding ISO-8859-9 recognised +-- Multibyte String -- +Encoding ISO-8859-9 recognised + +-- Iteration 1: ISO-8859-10 -- +-- ASCII String -- +Encoding ISO-8859-10 recognised +-- Multibyte String -- +Encoding ISO-8859-10 recognised + +-- Iteration 1: ISO-8859-13 -- +-- ASCII String -- +Encoding ISO-8859-13 recognised +-- Multibyte String -- +Encoding ISO-8859-13 recognised + +-- Iteration 1: ISO-8859-14 -- +-- ASCII String -- +Encoding ISO-8859-14 recognised +-- Multibyte String -- +Encoding ISO-8859-14 recognised + +-- Iteration 1: ISO-8859-15 -- +-- ASCII String -- +Encoding ISO-8859-15 recognised +-- Multibyte String -- +Encoding ISO-8859-15 recognised + +-- Iteration 1: byte2be -- +-- ASCII String -- +Encoding byte2be recognised +-- Multibyte String -- +Encoding byte2be recognised + +-- Iteration 1: byte2le -- +-- ASCII String -- +Encoding byte2le recognised +-- Multibyte String -- +Encoding byte2le recognised + +-- Iteration 1: byte4be -- +-- ASCII String -- +Encoding byte4be recognised +-- Multibyte String -- +Encoding byte4be recognised + +-- Iteration 1: byte4le -- +-- ASCII String -- +Encoding byte4le recognised +-- Multibyte String -- +Encoding byte4le recognised + +-- Iteration 1: BASE64 -- +-- ASCII String -- +Encoding BASE64 recognised +-- Multibyte String -- +Encoding BASE64 recognised + +-- Iteration 1: HTML-ENTITIES -- +-- ASCII String -- +Encoding HTML-ENTITIES recognised +-- Multibyte String -- +Encoding HTML-ENTITIES recognised + +-- Iteration 1: 7bit -- +-- ASCII String -- +Encoding 7bit recognised +-- Multibyte String -- +Encoding 7bit recognised + +-- Iteration 1: 8bit -- +-- ASCII String -- +Encoding 8bit recognised +-- Multibyte String -- +Encoding 8bit recognised + +-- Iteration 1: EUC-CN -- +-- ASCII String -- +Encoding EUC-CN recognised +-- Multibyte String -- +Encoding EUC-CN recognised + +-- Iteration 1: CP936 -- +-- ASCII String -- +Encoding CP936 recognised +-- Multibyte String -- +Encoding CP936 recognised + +-- Iteration 1: HZ -- +-- ASCII String -- +Encoding HZ recognised +-- Multibyte String -- +Encoding HZ recognised + +-- Iteration 1: EUC-TW -- +-- ASCII String -- +Encoding EUC-TW recognised +-- Multibyte String -- +Encoding EUC-TW recognised + +-- Iteration 1: CP950 -- +-- ASCII String -- +Encoding CP950 recognised +-- Multibyte String -- +Encoding CP950 recognised + +-- Iteration 1: BIG-5 -- +-- ASCII String -- +Encoding BIG-5 recognised +-- Multibyte String -- +Encoding BIG-5 recognised + +-- Iteration 1: EUC-KR -- +-- ASCII String -- +Encoding EUC-KR recognised +-- Multibyte String -- +Encoding EUC-KR recognised + +-- Iteration 1: UHC -- +-- ASCII String -- +Encoding UHC recognised +-- Multibyte String -- +Encoding UHC recognised + +-- Iteration 1: ISO-2022-KR -- +-- ASCII String -- +Encoding ISO-2022-KR recognised +-- Multibyte String -- +Encoding ISO-2022-KR recognised + +-- Iteration 1: Windows-1251 -- +-- ASCII String -- +Encoding Windows-1251 recognised +-- Multibyte String -- +Encoding Windows-1251 recognised + +-- Iteration 1: Windows-1252 -- +-- ASCII String -- +Encoding Windows-1252 recognised +-- Multibyte String -- +Encoding Windows-1252 recognised + +-- Iteration 1: CP866 -- +-- ASCII String -- +Encoding CP866 recognised +-- Multibyte String -- +Encoding CP866 recognised + +-- Iteration 1: KOI8-R -- +-- ASCII String -- +Encoding KOI8-R recognised +-- Multibyte String -- +Encoding KOI8-R recognised +Done diff --git a/ext/mbstring/tests/mb_substr_variation4.phpt b/ext/mbstring/tests/mb_substr_variation4.phpt new file mode 100644 index 0000000..c4a723a --- /dev/null +++ b/ext/mbstring/tests/mb_substr_variation4.phpt @@ -0,0 +1,132 @@ +--TEST-- +Test mb_substr() function : usage variations - pass different integers to $start arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substr') or die("skip mb_substr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_substr(string $str, int $start [, int $length [, string $encoding]]) + * Description: Returns part of a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test how mb_substr() behaves when passed a range of integers as $start argument + */ + +echo "*** Testing mb_substr() : usage variations ***\n"; + +mb_internal_encoding('UTF-8'); + +$string_ascii = b'+Is an English string'; //21 chars + +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); //21 chars + +/* + * Loop through integers as multiples of ten for $offset argument + * 60 is larger than *BYTE* count for $string_mb + */ +for ($i = -60; $i <= 60; $i += 10) { + if (@$a || @$b) { + $a = null; + $b = null; + } + echo "\n**-- Offset is: $i --**\n"; + echo "-- ASCII String --\n"; + $a = mb_substr($string_ascii, $i, 4); + var_dump(base64_encode($a)); + echo "--Multibyte String --\n"; + $b = mb_substr($string_mb, $i, 4, 'UTF-8'); + if (strlen($a) == mb_strlen($b, 'UTF-8')) { // should return same length + var_dump(base64_encode($b)); + } else { + echo "Difference in length of ASCII string and multibyte string\n"; + } + +} + +echo "Done"; +?> +--EXPECT-- +*** Testing mb_substr() : usage variations *** + +**-- Offset is: -60 --** +-- ASCII String -- +string(8) "K0lzIA==" +--Multibyte String -- +string(16) "5pel5pys6Kqe44OG" + +**-- Offset is: -50 --** +-- ASCII String -- +string(8) "K0lzIA==" +--Multibyte String -- +string(16) "5pel5pys6Kqe44OG" + +**-- Offset is: -40 --** +-- ASCII String -- +string(8) "K0lzIA==" +--Multibyte String -- +string(16) "5pel5pys6Kqe44OG" + +**-- Offset is: -30 --** +-- ASCII String -- +string(8) "K0lzIA==" +--Multibyte String -- +string(16) "5pel5pys6Kqe44OG" + +**-- Offset is: -20 --** +-- ASCII String -- +string(8) "SXMgYQ==" +--Multibyte String -- +string(16) "5pys6Kqe44OG44Kt" + +**-- Offset is: -10 --** +-- ASCII String -- +string(8) "aXNoIA==" +--Multibyte String -- +string(8) "MTIzNA==" + +**-- Offset is: 0 --** +-- ASCII String -- +string(8) "K0lzIA==" +--Multibyte String -- +string(16) "5pel5pys6Kqe44OG" + +**-- Offset is: 10 --** +-- ASCII String -- +string(8) "bGlzaA==" +--Multibyte String -- +string(8) "MDEyMw==" + +**-- Offset is: 20 --** +-- ASCII String -- +string(4) "Zw==" +--Multibyte String -- +string(4) "44CC" + +**-- Offset is: 30 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" + +**-- Offset is: 40 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" + +**-- Offset is: 50 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" + +**-- Offset is: 60 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_substr_variation5.phpt b/ext/mbstring/tests/mb_substr_variation5.phpt new file mode 100644 index 0000000..11caa9c --- /dev/null +++ b/ext/mbstring/tests/mb_substr_variation5.phpt @@ -0,0 +1,133 @@ +--TEST-- +Test mb_substr() function : usage variations - pass different integers to $length arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substr') or die("skip mb_substr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_substr(string $str, int $start [, int $length [, string $encoding]]) + * Description: Returns part of a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test how mb_substr() behaves when passed a range of integers as $length argument + */ + +echo "*** Testing mb_substr() : usage variations ***\n"; + +mb_internal_encoding('UTF-8'); + +$string_ascii = b'+Is an English string'; //21 chars + +//Japanese string, 21 characters +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); + +/* + * Loop through integers as multiples of ten for $offset argument + * 60 is larger than *BYTE* count for $string_mb + */ +for ($i = -60; $i <= 60; $i += 10) { + if (@$a || @$b) { + $a = null; + $b = null; + } + echo "\n**-- Offset is: $i --**\n"; + echo "-- ASCII String --\n"; + $a = mb_substr($string_ascii, 1, $i); + var_dump(base64_encode($a)); + echo "--Multibyte String --\n"; + $b = mb_substr($string_mb, 1, $i, 'UTF-8'); + if (strlen($a) == mb_strlen($b, 'UTF-8')) { // should return same length + var_dump(base64_encode($b)); + } else { + echo "Difference in length of ASCII string and multibyte string\n"; + } + +} + +echo "Done"; +?> +--EXPECT-- +*** Testing mb_substr() : usage variations *** + +**-- Offset is: -60 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" + +**-- Offset is: -50 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" + +**-- Offset is: -40 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" + +**-- Offset is: -30 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" + +**-- Offset is: -20 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" + +**-- Offset is: -10 --** +-- ASCII String -- +string(16) "SXMgYW4gRW5nbA==" +--Multibyte String -- +string(40) "5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMA==" + +**-- Offset is: 0 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" + +**-- Offset is: 10 --** +-- ASCII String -- +string(16) "SXMgYW4gRW5nbA==" +--Multibyte String -- +string(40) "5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMA==" + +**-- Offset is: 20 --** +-- ASCII String -- +string(28) "SXMgYW4gRW5nbGlzaCBzdHJpbmc=" +--Multibyte String -- +string(68) "5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=" + +**-- Offset is: 30 --** +-- ASCII String -- +string(28) "SXMgYW4gRW5nbGlzaCBzdHJpbmc=" +--Multibyte String -- +string(68) "5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=" + +**-- Offset is: 40 --** +-- ASCII String -- +string(28) "SXMgYW4gRW5nbGlzaCBzdHJpbmc=" +--Multibyte String -- +string(68) "5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=" + +**-- Offset is: 50 --** +-- ASCII String -- +string(28) "SXMgYW4gRW5nbGlzaCBzdHJpbmc=" +--Multibyte String -- +string(68) "5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=" + +**-- Offset is: 60 --** +-- ASCII String -- +string(28) "SXMgYW4gRW5nbGlzaCBzdHJpbmc=" +--Multibyte String -- +string(68) "5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII=" +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_substr_variation6.phpt b/ext/mbstring/tests/mb_substr_variation6.phpt new file mode 100644 index 0000000..20ee1ec --- /dev/null +++ b/ext/mbstring/tests/mb_substr_variation6.phpt @@ -0,0 +1,137 @@ +--TEST-- +Test mb_substr() function : usage variations - pass different integers to $start arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substr') or die("skip mb_substr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_substr(string $str, int $start [, int $length [, string $encoding]]) + * Description: Returns part of a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test how mb_substr() behaves when passed a range of integers as $start argument + */ + +echo "*** Testing mb_substr() : usage variations ***\n"; + +mb_internal_encoding('UTF-8'); + +$string_ascii = b'+Is an English string'; //21 chars + +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); //21 chars + +/* + * Loop through integers as multiples of ten for $offset argument + * 60 is larger than *BYTE* count for $string_mb + */ +for ($i = -60; $i <= 60; $i += 10) { + if (@$a || @$b) { + $a = null; + $b = null; + } + echo "\n**-- Offset is: $i --**\n"; + echo "-- ASCII String --\n"; + $a = mb_substr($string_ascii, $i, 4); + if ($a !== false) { + var_dump(bin2hex($a)); + } + else { + var_dump($a); + } + echo "--Multibyte String --\n"; + $b = mb_substr($string_mb, $i, 4, 'UTF-8'); + if (strlen($a) == mb_strlen($b, 'UTF-8')) { // should return same length + var_dump(bin2hex($b)); + } else { + echo "Difference in length of ASCII string and multibyte string\n"; + } + +} + +echo "Done"; +?> +--EXPECT-- +*** Testing mb_substr() : usage variations *** + +**-- Offset is: -60 --** +-- ASCII String -- +string(8) "2b497320" +--Multibyte String -- +string(24) "e697a5e69cace8aa9ee38386" + +**-- Offset is: -50 --** +-- ASCII String -- +string(8) "2b497320" +--Multibyte String -- +string(24) "e697a5e69cace8aa9ee38386" + +**-- Offset is: -40 --** +-- ASCII String -- +string(8) "2b497320" +--Multibyte String -- +string(24) "e697a5e69cace8aa9ee38386" + +**-- Offset is: -30 --** +-- ASCII String -- +string(8) "2b497320" +--Multibyte String -- +string(24) "e697a5e69cace8aa9ee38386" + +**-- Offset is: -20 --** +-- ASCII String -- +string(8) "49732061" +--Multibyte String -- +string(24) "e69cace8aa9ee38386e382ad" + +**-- Offset is: -10 --** +-- ASCII String -- +string(8) "69736820" +--Multibyte String -- +string(8) "31323334" + +**-- Offset is: 0 --** +-- ASCII String -- +string(8) "2b497320" +--Multibyte String -- +string(24) "e697a5e69cace8aa9ee38386" + +**-- Offset is: 10 --** +-- ASCII String -- +string(8) "6c697368" +--Multibyte String -- +string(8) "30313233" + +**-- Offset is: 20 --** +-- ASCII String -- +string(2) "67" +--Multibyte String -- +string(6) "e38082" + +**-- Offset is: 30 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" + +**-- Offset is: 40 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" + +**-- Offset is: 50 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" + +**-- Offset is: 60 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/mb_substr_variation7.phpt b/ext/mbstring/tests/mb_substr_variation7.phpt new file mode 100644 index 0000000..4d68097 --- /dev/null +++ b/ext/mbstring/tests/mb_substr_variation7.phpt @@ -0,0 +1,138 @@ +--TEST-- +Test mb_substr() function : usage variations - pass different integers to $length arg +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip'); +function_exists('mb_substr') or die("skip mb_substr() is not available in this build"); +?> +--FILE-- +<?php +/* Prototype : string mb_substr(string $str, int $start [, int $length [, string $encoding]]) + * Description: Returns part of a string + * Source code: ext/mbstring/mbstring.c + */ + +/* + * Test how mb_substr() behaves when passed a range of integers as $length argument + */ + +echo "*** Testing mb_substr() : usage variations ***\n"; + +mb_internal_encoding('UTF-8'); + +$string_ascii = b'+Is an English string'; //21 chars + +//Japanese string, 21 characters +$string_mb = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); + +/* + * Loop through integers as multiples of ten for $offset argument + * 60 is larger than *BYTE* count for $string_mb + */ +for ($i = -60; $i <= 60; $i += 10) { + if (@$a || @$b) { + $a = null; + $b = null; + } + echo "\n**-- Offset is: $i --**\n"; + echo "-- ASCII String --\n"; + $a = mb_substr($string_ascii, 1, $i); + if ($a !== false) { + var_dump(bin2hex($a)); + } + else { + var_dump($a); + } + echo "--Multibyte String --\n"; + $b = mb_substr($string_mb, 1, $i, 'UTF-8'); + if (strlen($a) == mb_strlen($b, 'UTF-8')) { // should return same length + var_dump(bin2hex($b)); + } else { + echo "Difference in length of ASCII string and multibyte string\n"; + } + +} + +echo "Done"; +?> +--EXPECT-- +*** Testing mb_substr() : usage variations *** + +**-- Offset is: -60 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" + +**-- Offset is: -50 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" + +**-- Offset is: -40 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" + +**-- Offset is: -30 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" + +**-- Offset is: -20 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" + +**-- Offset is: -10 --** +-- ASCII String -- +string(20) "497320616e20456e676c" +--Multibyte String -- +string(56) "e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e3808230" + +**-- Offset is: 0 --** +-- ASCII String -- +string(0) "" +--Multibyte String -- +string(0) "" + +**-- Offset is: 10 --** +-- ASCII String -- +string(20) "497320616e20456e676c" +--Multibyte String -- +string(56) "e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e3808230" + +**-- Offset is: 20 --** +-- ASCII String -- +string(40) "497320616e20456e676c69736820737472696e67" +--Multibyte String -- +string(100) "e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082" + +**-- Offset is: 30 --** +-- ASCII String -- +string(40) "497320616e20456e676c69736820737472696e67" +--Multibyte String -- +string(100) "e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082" + +**-- Offset is: 40 --** +-- ASCII String -- +string(40) "497320616e20456e676c69736820737472696e67" +--Multibyte String -- +string(100) "e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082" + +**-- Offset is: 50 --** +-- ASCII String -- +string(40) "497320616e20456e676c69736820737472696e67" +--Multibyte String -- +string(100) "e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082" + +**-- Offset is: 60 --** +-- ASCII String -- +string(40) "497320616e20456e676c69736820737472696e67" +--Multibyte String -- +string(100) "e69cace8aa9ee38386e382ade382b9e38388e381a7e38199e380823031323334efbc95efbc96efbc97efbc98efbc99e38082" +Done
\ No newline at end of file diff --git a/ext/mbstring/tests/overload01.phpt b/ext/mbstring/tests/overload01.phpt new file mode 100644 index 0000000..b0990e8 --- /dev/null +++ b/ext/mbstring/tests/overload01.phpt @@ -0,0 +1,25 @@ +--TEST-- +Function overloading test 1 +--SKIPIF-- +<?php + extension_loaded('mbstring') or die('skip mbstring not available'); + if (!function_exists("mail")) { + die('skip mail() function is not available.'); + } +?> +--INI-- +output_handler= +mbstring.func_overload=7 +mbstring.internal_encoding=EUC-JP +--FILE-- +<?php +echo mb_internal_encoding()."\n"; + +$ngchars = array('ǽ','ɽ','»½','¥½'); +$str = '¸µÏ½ÍÜ»½Ðò¼Òº¾µ½É½¸½Ç½ÎÏɽ¼¨±½ÌÈÄä˽ÎÏŽÉÕ¹½Ê¸·½»ÒͽÃÎñ½Æ¬¥½¥Õ¥¡¡¼'; +var_dump(strlen($str)); +var_dump(mb_strlen($str)); +--EXPECT-- +EUC-JP +int(33) +int(33) diff --git a/ext/mbstring/tests/overload02.phpt b/ext/mbstring/tests/overload02.phpt new file mode 100644 index 0000000..9b5cecd --- /dev/null +++ b/ext/mbstring/tests/overload02.phpt @@ -0,0 +1,36 @@ +--TEST-- +Function overloading test 2 +--SKIPIF-- +<?php + extension_loaded('mbstring') or die('skip mbstring not available'); + if (!function_exists("mail")) { + die('skip mail() function is not available.'); + } + if (!function_exists("mb_ereg_replace")) { + die('skip mb_ereg_replace() function is not available.'); + } +?> +--INI-- +output_handler= +mbstring.func_overload=7 +mbstring.internal_encoding=EUC-JP +--FILE-- +<?php +echo mb_internal_encoding()."\n"; + +$ngchars = array('ǽ','ɽ','»½','¥½'); +$str = '¸µÏ½ÍÜ»½Ðò¼Òº¾µ½É½¸½Ç½ÎÏɽ¼¨±½ÌÈÄä˽ÎÏŽÉÕ¹½Ê¸·½»ÒͽÃÎñ½Æ¬¥½¥Õ¥¡¡¼'; +$converted_str = mb_convert_encoding($str, 'Shift_JIS'); +mb_regex_encoding('Shift_JIS'); +foreach($ngchars as $c) { + $c = mb_convert_encoding($c, 'Shift_JIS'); + $replaced = mb_convert_encoding(ereg_replace($c, '!!', $converted_str), mb_internal_encoding(), 'Shift_JIS'); + var_dump(strpos($replaced, '!!')); +} +?> +--EXPECT-- +EUC-JP +int(10) +int(8) +int(3) +int(29) diff --git a/ext/mbstring/tests/php_gr_jp_10830.phpt b/ext/mbstring/tests/php_gr_jp_10830.phpt new file mode 100644 index 0000000..1cbfc2a --- /dev/null +++ b/ext/mbstring/tests/php_gr_jp_10830.phpt @@ -0,0 +1,20 @@ +--TEST-- +php-users@php.gr.jp #10830 +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +function_exists('mb_ereg') or die("skip mb_ereg() is not available in this build"); +?> +--FILE-- +<?php +$a="aaa\n<>"; + +var_dump( mb_ereg("^[^><]+$",$a) ); +var_dump( ereg("^[^><]+$",$a) ); +?> + +--EXPECTF-- +bool(false) + +Deprecated: Function ereg() is deprecated in %s on line %d +bool(false) diff --git a/ext/mbstring/tests/php_gr_jp_16242.phpt b/ext/mbstring/tests/php_gr_jp_16242.phpt new file mode 100644 index 0000000..f693cf8 --- /dev/null +++ b/ext/mbstring/tests/php_gr_jp_16242.phpt @@ -0,0 +1,21 @@ +--TEST-- +php-users@php.gr.jp #16242 +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +?> +--INI-- +mbstring.language=Japanese +mbstring.internal_encoding=UTF-8 +--FILE-- +<?php + +var_dump(ini_get('mbstring.language')); +var_dump(ini_get('mbstring.internal_encoding')); +var_dump(mb_internal_encoding()); + +?> +--EXPECT-- +string(8) "Japanese" +string(5) "UTF-8" +string(5) "UTF-8" diff --git a/ext/mbstring/tests/php_gr_jp_dev_884-1.phpt b/ext/mbstring/tests/php_gr_jp_dev_884-1.phpt new file mode 100644 index 0000000..64fc054 --- /dev/null +++ b/ext/mbstring/tests/php_gr_jp_dev_884-1.phpt @@ -0,0 +1,19 @@ +--TEST-- +php-dev@php.gr.jp #884 (1) +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +set_time_limit(2); +var_dump(ereg_replace(".*", "b", "a")); +var_dump(preg_replace("/.*/", "b", "a")); +var_dump(mb_ereg_replace(".*", "b", "a")); +?> +--EXPECTF-- +Deprecated: Function ereg_replace() is deprecated in %s on line %d +string(2) "bb" +string(2) "bb" +string(2) "bb" diff --git a/ext/mbstring/tests/php_gr_jp_dev_884-2.phpt b/ext/mbstring/tests/php_gr_jp_dev_884-2.phpt new file mode 100644 index 0000000..937b217 --- /dev/null +++ b/ext/mbstring/tests/php_gr_jp_dev_884-2.phpt @@ -0,0 +1,23 @@ +--TEST-- +php-dev@php.gr.jp #884 (2) +--SKIPIF-- +<?php +extension_loaded('mbstring') or die('skip mbstring not available'); +function_exists('mb_ereg_replace') or die("skip mb_ereg_replace() is not available in this build"); +?> +--FILE-- +<?php +var_dump(mb_ereg_replace("C?$", "Z", "ABC")); +var_dump(ereg_replace("C?$", "Z", "ABC")); +var_dump(mb_ereg_replace("C*$", "Z", "ABC")); +var_dump(ereg_replace("C*$", "Z", "ABC")); +?> +--EXPECTF-- +string(4) "ABZZ" + +Deprecated: Function ereg_replace() is deprecated in %s on line %d +string(4) "ABZZ" +string(4) "ABZZ" + +Deprecated: Function ereg_replace() is deprecated in %s on line %d +string(4) "ABZZ" diff --git a/ext/mbstring/tests/pictogram1.phpt b/ext/mbstring/tests/pictogram1.phpt new file mode 100644 index 0000000..2c96099 --- /dev/null +++ b/ext/mbstring/tests/pictogram1.phpt @@ -0,0 +1,172 @@ +--TEST-- +Emoji (Pictogram characters for cellular phone in Japan) test based on Unicode 6.0 +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +mb_substitute_character(0x3f); + +echo "SJIS-Mobile to Unicode\n"; +var_dump(bin2hex(mb_convert_encoding("\xf8\x9f", "UCS-4BE", "SJIS-Mobile#DOCOMO"))); +var_dump(bin2hex(mb_convert_encoding("\xf6\x60", "UCS-4BE", "SJIS-Mobile#KDDI"))); +var_dump(bin2hex(mb_convert_encoding("\xf9\x8b", "UCS-4BE", "SJIS-Mobile#SOFTBANK"))); + +var_dump(bin2hex(mb_convert_encoding("\xf9\xe6", "UCS-4BE", "SJIS-Mobile#DOCOMO"))); +var_dump(bin2hex(mb_convert_encoding("\xf6\xec", "UCS-4BE", "SJIS-Mobile#KDDI"))); +var_dump(bin2hex(mb_convert_encoding("\xf7\x50", "UCS-4BE", "SJIS-Mobile#SOFTBANK"))); + +var_dump(bin2hex(mb_convert_encoding("\xf9\x85", "UCS-4BE", "SJIS-Mobile#DOCOMO"))); +var_dump(bin2hex(mb_convert_encoding("\xf4\x89", "UCS-4BE", "SJIS-Mobile#KDDI"))); +var_dump(bin2hex(mb_convert_encoding("\xf7\xb0", "UCS-4BE", "SJIS-Mobile#SOFTBANK"))); + +var_dump(bin2hex(mb_convert_encoding("\xf3\xd2", "UCS-4BE", "SJIS-Mobile#KDDI"))); +var_dump(bin2hex(mb_convert_encoding("\xfb\xb3", "UCS-4BE", "SJIS-Mobile#SOFTBANK"))); + +echo "Unicode to SJIS-Mobile\n"; +var_dump(bin2hex(mb_convert_encoding("\x00\x00\x26\x00", "SJIS-Mobile#DOCOMO", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x00\x26\x00", "SJIS-Mobile#KDDI", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x00\x26\x00", "SJIS-Mobile#SOFTBANK", "UCS-4BE"))); + +var_dump(bin2hex(mb_convert_encoding("\x00\x01\xf3\x40", "SJIS-Mobile#DOCOMO", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x01\xf3\x40", "SJIS-Mobile#KDDI", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x01\xf3\x40", "SJIS-Mobile#SOFTBANK", "UCS-4BE"))); + +var_dump(bin2hex(mb_convert_encoding("\x00\x00\x00\x23\x00\x00\x20\xe3", "SJIS-Mobile#DOCOMO", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x00\x00\x23\x00\x00\x20\xe3", "SJIS-Mobile#KDDI", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x00\x00\x23\x00\x00\x20\xe3", "SJIS-Mobile#SOFTBANK", "UCS-4BE"))); + +var_dump(bin2hex(mb_convert_encoding("\x00\x01\xf1\xe8\x00\x01\xf1\xf3", "SJIS-Mobile#DOCOMO", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x01\xf1\xe8\x00\x01\xf1\xf3", "SJIS-Mobile#KDDI", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x01\xf1\xe8\x00\x01\xf1\xf3", "SJIS-Mobile#SOFTBANK", "UCS-4BE"))); + +echo "UTF-8-Mobile to Unicode\n"; +var_dump(bin2hex(mb_convert_encoding("\xee\x98\xbe", "UCS-4BE", "UTF-8-Mobile#DOCOMO"))); +var_dump(bin2hex(mb_convert_encoding("\xee\xbd\xa0", "UCS-4BE", "UTF-8-Mobile#KDDI"))); +var_dump(bin2hex(mb_convert_encoding("\xee\x81\x8a", "UCS-4BE", "UTF-8-Mobile#SOFTBANK"))); + +var_dump(bin2hex(mb_convert_encoding("\xee\x9d\x81", "UCS-4BE", "UTF-8-Mobile#DOCOMO"))); +var_dump(bin2hex(mb_convert_encoding("\xee\xbf\xac", "UCS-4BE", "UTF-8-Mobile#KDDI"))); +var_dump(bin2hex(mb_convert_encoding("\xee\x84\x90", "UCS-4BE", "UTF-8-Mobile#SOFTBANK"))); + +var_dump(bin2hex(mb_convert_encoding("\xee\x9b\xa0", "UCS-4BE", "UTF-8-Mobile#DOCOMO"))); +var_dump(bin2hex(mb_convert_encoding("\xee\xb6\x89", "UCS-4BE", "UTF-8-Mobile#KDDI"))); +var_dump(bin2hex(mb_convert_encoding("\xee\x88\x90", "UCS-4BE", "UTF-8-Mobile#SOFTBANK"))); + +var_dump(bin2hex(mb_convert_encoding("\xee\xb3\x92", "UCS-4BE", "UTF-8-Mobile#KDDI"))); +var_dump(bin2hex(mb_convert_encoding("\xee\x94\x93", "UCS-4BE", "UTF-8-Mobile#SOFTBANK"))); + +echo "Unicode to UTF8-Mobile\n"; +var_dump(bin2hex(mb_convert_encoding("\x00\x00\x26\x00", "UTF-8-Mobile#DOCOMO", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x00\x26\x00", "UTF-8-Mobile#KDDI", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x00\x26\x00", "UTF-8-Mobile#SOFTBANK", "UCS-4BE"))); + +var_dump(bin2hex(mb_convert_encoding("\x00\x01\xf3\x40", "UTF-8-Mobile#DOCOMO", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x01\xf3\x40", "UTF-8-Mobile#KDDI", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x01\xf3\x40", "UTF-8-Mobile#SOFTBANK", "UCS-4BE"))); + +var_dump(bin2hex(mb_convert_encoding("\x00\x00\x00\x23\x00\x00\x20\xe3", "UTF-8-Mobile#DOCOMO", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x00\x00\x23\x00\x00\x20\xe3", "UTF-8-Mobile#KDDI", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x00\x00\x23\x00\x00\x20\xe3", "UTF-8-Mobile#SOFTBANK", "UCS-4BE"))); + +var_dump(bin2hex(mb_convert_encoding("\x00\x01\xf1\xe8\x00\x01\xf1\xf3", "UTF-8-Mobile#DOCOMO", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x01\xf1\xe8\x00\x01\xf1\xf3", "UTF-8-Mobile#KDDI", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x01\xf1\xe8\x00\x01\xf1\xf3", "UTF-8-Mobile#SOFTBANK", "UCS-4BE"))); + +echo "Unicode to ISO-2022-JP-MOBILE#KDDI\n"; +var_dump(bin2hex(mb_convert_encoding("\x00\x00\x26\x00", "ISO-2022-JP-MOBILE#KDDI", "UCS-4BE"))); + +echo "ISO-2022-JP-MOBILE#KDDI to Unicode\n"; +var_dump(bin2hex(mb_convert_encoding("\x1b\x24\x42\x75\x41\x1b\x28\x42", "UCS-4BE", "ISO-2022-JP-MOBILE#KDDI"))); + +echo "SJIS-Mobile to Unicode (Google) \n"; +var_dump(bin2hex(mb_convert_encoding("\xf9\x86", "UCS-4BE", "SJIS-Mobile#DOCOMO"))); +var_dump(bin2hex(mb_convert_encoding("\xf7\x48", "UCS-4BE", "SJIS-Mobile#KDDI"))); +var_dump(bin2hex(mb_convert_encoding("\xfb\xd8", "UCS-4BE", "SJIS-Mobile#SOFTBANK"))); + +echo "Unicode (Google) to SJIS-Mobile\n"; +var_dump(bin2hex(mb_convert_encoding("\x00\x0f\xe8\x2d", "SJIS-Mobile#DOCOMO", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x0f\xe8\x2d", "SJIS-Mobile#KDDI", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x0f\xee\x70", "SJIS-Mobile#SOFTBANK", "UCS-4BE"))); + +echo "UTF-8-Mobile to Unicode (Google) \n"; +var_dump(bin2hex(mb_convert_encoding("\xee\x9b\xa1", "UCS-4BE", "UTF-8-Mobile#DOCOMO"))); +var_dump(bin2hex(mb_convert_encoding("\xef\x81\x88", "UCS-4BE", "UTF-8-Mobile#KDDI"))); +var_dump(bin2hex(mb_convert_encoding("\xee\x94\xb8", "UCS-4BE", "UTF-8-Mobile#SOFTBANK")));// + +echo "Unicode (Google) to UTF-8-Mobile\n"; +var_dump(bin2hex(mb_convert_encoding("\x00\x0f\xe8\x2d", "UTF-8-Mobile#DOCOMO", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x0f\xe8\x2d", "UTF-8-Mobile#KDDI", "UCS-4BE"))); +var_dump(bin2hex(mb_convert_encoding("\x00\x0f\xee\x70", "UTF-8-Mobile#SOFTBANK", "UCS-4BE")));// + +?> +--EXPECT-- +SJIS-Mobile to Unicode +string(8) "00002600" +string(8) "00002600" +string(8) "00002600" +string(8) "0001f340" +string(8) "0001f340" +string(8) "0001f340" +string(16) "00000023000020e3" +string(16) "00000023000020e3" +string(16) "00000023000020e3" +string(16) "0001f1e80001f1f3" +string(16) "0001f1e80001f1f3" +Unicode to SJIS-Mobile +string(4) "f89f" +string(4) "f660" +string(4) "f98b" +string(4) "f9e6" +string(4) "f6ec" +string(4) "f750" +string(4) "f985" +string(4) "f489" +string(4) "f7b0" +string(4) "3f3f" +string(4) "f3d2" +string(4) "fbb3" +UTF-8-Mobile to Unicode +string(8) "00002600" +string(8) "00002600" +string(8) "00002600" +string(8) "0001f340" +string(8) "0001f340" +string(8) "0001f340" +string(16) "00000023000020e3" +string(16) "00000023000020e3" +string(16) "00000023000020e3" +string(16) "0001f1e80001f1f3" +string(16) "0001f1e80001f1f3" +Unicode to UTF8-Mobile +string(6) "ee98be" +string(6) "eebda0" +string(6) "ee818a" +string(6) "ee9d81" +string(6) "eebfac" +string(6) "ee8490" +string(6) "ee9ba0" +string(6) "eeb689" +string(6) "ee8890" +string(16) "f09f87a8f09f87b3" +string(6) "eeb392" +string(6) "ee9493" +Unicode to ISO-2022-JP-MOBILE#KDDI +string(16) "1b244275411b2842" +ISO-2022-JP-MOBILE#KDDI to Unicode +string(8) "00002600" +SJIS-Mobile to Unicode (Google) +string(8) "000fe82d" +string(8) "000fe82d" +string(8) "000fee70" +Unicode (Google) to SJIS-Mobile +string(4) "f986" +string(4) "f748" +string(4) "fbd8" +UTF-8-Mobile to Unicode (Google) +string(8) "000fe82d" +string(8) "000fe82d" +string(8) "000fee70" +Unicode (Google) to UTF-8-Mobile +string(6) "ee9ba1" +string(6) "ef8188" +string(6) "ee94b8" diff --git a/ext/mbstring/tests/simpletest.phpt b/ext/mbstring/tests/simpletest.phpt new file mode 100644 index 0000000..80b2f72 --- /dev/null +++ b/ext/mbstring/tests/simpletest.phpt @@ -0,0 +1,34 @@ +--TEST-- +Simple multi-byte print test (EUC-JP) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--INI-- +output_handler= +--FILE-- +<?php +/* + * Test basic PHP functions to check if it works with multi-byte chars + */ + +// EUC-JP strings +$s1 = "¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤¬»È¤¨¤Þ¤¹¡£"; +$s2 = "¤³¤Îʸ»ú¤¬Ï¢·ë¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¡£"; + +// print directly +echo "echo: ".$s1.$s2."\n"; +print("print: ".$s1.$s2."\n"); +printf("printf: %s%s\n",$s1, $s2); +echo sprintf("sprintf: %s%s\n",$s1, $s2); + +// Assign to var +$s3 = $s1.$s2."\n"; +echo "echo: ".$s3; + +?> +--EXPECT-- +echo: ¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤¬»È¤¨¤Þ¤¹¡£¤³¤Îʸ»ú¤¬Ï¢·ë¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¡£ +print: ¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤¬»È¤¨¤Þ¤¹¡£¤³¤Îʸ»ú¤¬Ï¢·ë¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¡£ +printf: ¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤¬»È¤¨¤Þ¤¹¡£¤³¤Îʸ»ú¤¬Ï¢·ë¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¡£ +sprintf: ¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤¬»È¤¨¤Þ¤¹¡£¤³¤Îʸ»ú¤¬Ï¢·ë¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¡£ +echo: ¥Þ¥ë¥Á¥Ð¥¤¥È´Ø¿ô¤¬»È¤¨¤Þ¤¹¡£¤³¤Îʸ»ú¤¬Ï¢·ë¤µ¤ì¤Æ¤¤¤ë¤Ï¤º¡£ + diff --git a/ext/mbstring/tests/skipif.inc b/ext/mbstring/tests/skipif.inc new file mode 100644 index 0000000..7eec8aa --- /dev/null +++ b/ext/mbstring/tests/skipif.inc @@ -0,0 +1,14 @@ +<?php +// This script prints "skip" if condition does not meet. + +/* +if (!extension_loaded("mbstring") && ini_get("enable_dl")) { + $dlext = (substr(PHP_OS, 0, 3) == "WIN") ? ".dll" : ".so"; + @dl("mbstring$dlext"); +} +*/ + +if (!extension_loaded("mbstring")) { + die("skip\n"); +} +?> diff --git a/ext/mbstring/tests/zend_multibyte-01.phpt b/ext/mbstring/tests/zend_multibyte-01.phpt new file mode 100644 index 0000000..d96e0f0 --- /dev/null +++ b/ext/mbstring/tests/zend_multibyte-01.phpt @@ -0,0 +1,23 @@ +--TEST-- +zend multibyte (1) +--SKIPIF-- +<?php +ini_set("mbstring.script_encoding","SJIS"); +if (ini_set("mbstring.script_encoding","SJIS") != "SJIS") { + die("skip zend-multibyte is not available"); +} +?> +--INI-- +mbstring.script_encoding=Shift_JIS +mbstring.internal_encoding=Shift_JIS +--FILE-- +<?php + function —\Ž\”\($ˆø”) + { + echo $ˆø”; + } + + —\Ž\”\("ƒhƒŒƒ~ƒtƒ@ƒ\"); +?> +--EXPECT-- +ƒhƒŒƒ~ƒtƒ@ƒ\ diff --git a/ext/mbstring/tests/zend_multibyte-02.phpt b/ext/mbstring/tests/zend_multibyte-02.phpt new file mode 100644 index 0000000..c94dee5 --- /dev/null +++ b/ext/mbstring/tests/zend_multibyte-02.phpt @@ -0,0 +1,18 @@ +--TEST-- +zend multibyte (2) +--SKIPIF-- +<?php +ini_set("mbstring.script_encoding","SJIS"); +if (ini_set("mbstring.script_encoding","SJIS") != "SJIS") { + die("skip zend-multibyte is not available"); +} +?> +--INI-- +mbstring.script_encoding=UTF-8 +mbstring.internal_encoding=CP932 +--FILE-- +<?php +var_dump(bin2hex("テスト")); +?> +--EXPECT-- +string(12) "836583588367" diff --git a/ext/mbstring/tests/zend_multibyte-03.phpt b/ext/mbstring/tests/zend_multibyte-03.phpt new file mode 100644 index 0000000..46a262c --- /dev/null +++ b/ext/mbstring/tests/zend_multibyte-03.phpt @@ -0,0 +1,18 @@ +--TEST-- +zend multibyte (3) +--SKIPIF-- +<?php +ini_set("mbstring.script_encoding","SJIS"); +if (ini_set("mbstring.script_encoding","SJIS") != "SJIS") { + die("skip zend-multibyte is not available"); +} +?> +--INI-- +mbstring.script_encoding=UTF-8 +mbstring.internal_encoding=EUC-JP +--FILE-- +<?php +var_dump(bin2hex("テスト")); +?> +--EXPECT-- +string(12) "a5c6a5b9a5c8" diff --git a/ext/mbstring/tests/zend_multibyte-04.phpt b/ext/mbstring/tests/zend_multibyte-04.phpt new file mode 100644 index 0000000..f1295b6 --- /dev/null +++ b/ext/mbstring/tests/zend_multibyte-04.phpt @@ -0,0 +1,18 @@ +--TEST-- +zend multibyte (4) +--SKIPIF-- +<?php +ini_set("mbstring.script_encoding","SJIS"); +if (ini_set("mbstring.script_encoding","SJIS") != "SJIS") { + die("skip zend-multibyte is not available"); +} +?> +--INI-- +mbstring.script_encoding=CP932 +mbstring.internal_encoding=UTF-8 +--FILE-- +<?php +var_dump(bin2hex("ƒeƒXƒg")); +?> +--EXPECT-- +string(18) "e38386e382b9e38388" diff --git a/ext/mbstring/tests/zend_multibyte-05.phpt b/ext/mbstring/tests/zend_multibyte-05.phpt new file mode 100644 index 0000000..0a01c23 --- /dev/null +++ b/ext/mbstring/tests/zend_multibyte-05.phpt @@ -0,0 +1,21 @@ +--TEST-- +zend multibyte (5) +--SKIPIF-- +<?php +ini_set("mbstring.script_encoding","SJIS"); +if (ini_set("mbstring.script_encoding","SJIS") != "SJIS") { + die("skip zend-multibyte is not available"); +} +?> +--INI-- +mbstring.script_encoding=EUC-JP +mbstring.internal_encoding=UTF-8 +--FILE-- +<?php +// forcefully interpret an UTF-8 encoded string as EUC-JP and then convert it +// back to UTF-8. There should be only a pair of consecutive bytes that is +// valid EUC-encoded character "é´»". +var_dump(bin2hex("テスト")); +?> +--EXPECT-- +string(16) "3f3f3fe9b4bb3f3f" diff --git a/ext/mbstring/tests/zend_multibyte-06.phpt b/ext/mbstring/tests/zend_multibyte-06.phpt new file mode 100644 index 0000000..9acd6a9 --- /dev/null +++ b/ext/mbstring/tests/zend_multibyte-06.phpt @@ -0,0 +1,19 @@ +--TEST-- +zend multibyte (6) +--SKIPIF-- +<?php +ini_set("mbstring.script_encoding","SJIS"); +if (ini_set("mbstring.script_encoding","SJIS") != "SJIS") { + die("skip zend-multibyte is not available"); +} +?> +--INI-- +mbstring.script_encoding=EUC-JP +mbstring.internal_encoding=CP932 +--FILE-- +<?php +declare(encoding="UTF-8"); +var_dump(bin2hex("テスト")); +?> +--EXPECT-- +string(12) "836583588367" diff --git a/ext/mbstring/tests/zend_multibyte-07.phpt b/ext/mbstring/tests/zend_multibyte-07.phpt new file mode 100644 index 0000000..30305f5 --- /dev/null +++ b/ext/mbstring/tests/zend_multibyte-07.phpt @@ -0,0 +1,19 @@ +--TEST-- +zend multibyte (7) +--SKIPIF-- +<?php +ini_set("mbstring.script_encoding","SJIS"); +if (ini_set("mbstring.script_encoding","SJIS") != "SJIS") { + die("skip zend-multibyte is not available"); +} +?> +--INI-- +mbstring.script_encoding=ISO-8859-1 +mbstring.internal_encoding=EUC-JP +--FILE-- +<?php +declare(encoding="UTF-8"); +var_dump(bin2hex("テスト")); +?> +--EXPECT-- +string(12) "a5c6a5b9a5c8" diff --git a/ext/mbstring/tests/zend_multibyte-08.phpt b/ext/mbstring/tests/zend_multibyte-08.phpt new file mode 100644 index 0000000..ab27461 --- /dev/null +++ b/ext/mbstring/tests/zend_multibyte-08.phpt @@ -0,0 +1,19 @@ +--TEST-- +zend multibyte (8) +--SKIPIF-- +<?php +ini_set("mbstring.script_encoding","SJIS"); +if (ini_set("mbstring.script_encoding","SJIS") != "SJIS") { + die("skip zend-multibyte is not available"); +} +?> +--INI-- +mbstring.script_encoding=ISO-8859-1 +mbstring.internal_encoding=UTF-8 +--FILE-- +<?php +declare(encoding="CP932"); +var_dump(bin2hex("ƒeƒXƒg")); +?> +--EXPECT-- +string(18) "e38386e382b9e38388" diff --git a/ext/mbstring/tests/zend_multibyte-09.phpt b/ext/mbstring/tests/zend_multibyte-09.phpt new file mode 100644 index 0000000..79ee435 --- /dev/null +++ b/ext/mbstring/tests/zend_multibyte-09.phpt @@ -0,0 +1,22 @@ +--TEST-- +zend multibyte (9) +--SKIPIF-- +<?php +ini_set("mbstring.script_encoding","SJIS"); +if (ini_set("mbstring.script_encoding","SJIS") != "SJIS") { + die("skip zend-multibyte is not available"); +} +?> +--INI-- +mbstring.script_encoding=cp1251 +mbstring.internal_encoding=UTF-8 +--FILE-- +<?php +declare(encoding="EUC-JP"); +// forcefully interpret an UTF-8 encoded string as EUC-JP and then convert it +// back to UTF-8. There should be only a pair of consecutive bytes that is +// valid EUC-encoded character "é´»". +var_dump(bin2hex("テスト")); +?> +--EXPECT-- +string(16) "3f3f3fe9b4bb3f3f" diff --git a/ext/mbstring/tests/zend_multibyte-10.phpt b/ext/mbstring/tests/zend_multibyte-10.phpt new file mode 100644 index 0000000..435c339 --- /dev/null +++ b/ext/mbstring/tests/zend_multibyte-10.phpt @@ -0,0 +1,17 @@ +--TEST-- +zend multibyte (10) +--SKIPIF-- +<?php +ini_set("mbstring.script_encoding","SJIS"); +if (ini_set("mbstring.script_encoding","SJIS") != "SJIS") { + die("skip zend-multibyte is not available"); +} +?> +--FILE-- +<?php +declare(encoding="ISO-8859-15"); +declare(encoding="ISO-8859-1"); +echo "ok\n"; +?> +--EXPECTF-- +ok diff --git a/ext/mbstring/tests/zend_multibyte-11.phpt b/ext/mbstring/tests/zend_multibyte-11.phpt new file mode 100644 index 0000000..b79e433 --- /dev/null +++ b/ext/mbstring/tests/zend_multibyte-11.phpt @@ -0,0 +1,18 @@ +--TEST-- +zend multibyte (11) +--SKIPIF-- +<?php +ini_set("mbstring.script_encoding","SJIS"); +if (ini_set("mbstring.script_encoding","SJIS") != "SJIS") { + die("skip zend-multibyte is not available"); +} +?> +--FILE-- +<?php +declare(encoding="ISO-8859-15") { + declare(encoding="ISO-8859-1"); + echo "ok\n"; +} +?> +--EXPECTF-- +ok diff --git a/ext/mbstring/tests/zend_multibyte-12.phpt b/ext/mbstring/tests/zend_multibyte-12.phpt new file mode 100644 index 0000000..e1c8ce5 --- /dev/null +++ b/ext/mbstring/tests/zend_multibyte-12.phpt @@ -0,0 +1,17 @@ +--TEST-- +zend multibyte (12) +--SKIPIF-- +<?php +ini_set("mbstring.script_encoding","SJIS"); +if (ini_set("mbstring.script_encoding","SJIS") != "SJIS") { + die("skip zend-multibyte is not available"); +} +?> +--FILE-- +<?php +declare(encoding="ISO-8859-15"); +echo 1; +declare(encoding="ISO-8859-1"); +?> +--EXPECTF-- +Fatal error: Encoding declaration pragma must be the very first statement in the script in %s on line 4 diff --git a/ext/mbstring/tests/zend_multibyte-13.phpt b/ext/mbstring/tests/zend_multibyte-13.phpt new file mode 100644 index 0000000..e601a6c --- /dev/null +++ b/ext/mbstring/tests/zend_multibyte-13.phpt @@ -0,0 +1,23 @@ +--TEST-- +zend multibyte (13) +--SKIPIF-- +<?php +ini_set("mbstring.script_encoding","SJIS"); +if (ini_set("mbstring.script_encoding","SJIS") != "SJIS") { + die("skip zend-multibyte is not available"); +} +?> +--INI-- +mbstring.script_encoding=UTF-8 +mbstring.internal_encoding=ISO-8859-1 +--FILE-- +<?php +var_dump(substr(file_get_contents(__FILE__), __COMPILER_HALT_OFFSET__)); +var_dump(bin2hex("äëüáéú")); +__halt_compiler();test +test +--EXPECT-- +string(10) "test +test +" +string(12) "e4ebfce1e9fa" diff --git a/ext/mbstring/tests/zend_multibyte-14.phpt b/ext/mbstring/tests/zend_multibyte-14.phpt new file mode 100644 index 0000000..04bc409 --- /dev/null +++ b/ext/mbstring/tests/zend_multibyte-14.phpt @@ -0,0 +1,23 @@ +--TEST-- +zend multibyte (14) +--SKIPIF-- +<?php +ini_set("mbstring.script_encoding","SJIS"); +if (ini_set("mbstring.script_encoding","SJIS") != "SJIS") { + die("skip zend-multibyte is not available"); +} +?> +--INI-- +mbstring.script_encoding=UTF-8 +mbstring.internal_encoding=UTF-8 +--FILE-- +<?php +var_dump(substr(file_get_contents(__FILE__), __COMPILER_HALT_OFFSET__)); +var_dump(bin2hex("äëüáéú")); +__halt_compiler();test +test +--EXPECT-- +string(10) "test +test +" +string(24) "c3a4c3abc3bcc3a1c3a9c3ba" diff --git a/ext/mbstring/ucgendat/OPENLDAP_LICENSE b/ext/mbstring/ucgendat/OPENLDAP_LICENSE new file mode 100644 index 0000000..6295703 --- /dev/null +++ b/ext/mbstring/ucgendat/OPENLDAP_LICENSE @@ -0,0 +1,47 @@ +The OpenLDAP Public License + Version 2.8, 17 August 2003 + +Redistribution and use of this software and associated documentation +("Software"), with or without modification, are permitted provided +that the following conditions are met: + +1. Redistributions in source form must retain copyright statements + and notices, + +2. Redistributions in binary form must reproduce applicable copyright + statements and notices, this list of conditions, and the following + disclaimer in the documentation and/or other materials provided + with the distribution, and + +3. Redistributions must contain a verbatim copy of this document. + +The OpenLDAP Foundation may revise this license from time to time. +Each revision is distinguished by a version number. You may use +this Software under terms of this license revision or under the +terms of any subsequent revision of the license. + +THIS SOFTWARE IS PROVIDED BY THE OPENLDAP FOUNDATION AND ITS +CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED 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 OPENLDAP FOUNDATION, ITS CONTRIBUTORS, OR THE AUTHOR(S) +OR OWNER(S) OF THE SOFTWARE 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. + +The names of the authors and copyright holders must not be used in +advertising or otherwise to promote the sale, use or other dealing +in this Software without specific, written prior permission. Title +to copyright in this Software shall at all times remain with copyright +holders. + +OpenLDAP is a registered trademark of the OpenLDAP Foundation. + +Copyright 1999-2003 The OpenLDAP Foundation, Redwood City, +California, USA. All Rights Reserved. Permission to copy and +distribute verbatim copies of this document is granted.
\ No newline at end of file diff --git a/ext/mbstring/ucgendat/README b/ext/mbstring/ucgendat/README new file mode 100644 index 0000000..7717bf8 --- /dev/null +++ b/ext/mbstring/ucgendat/README @@ -0,0 +1,9 @@ +This file is not necessary to build PHP. + +It's only necessary to rebuild unicode_data.h from Unicode ucd files. + +Example usage: +./ucgendat UnicodeData-6.0.0d7.txt -x CompositionExclusions-6.0.0d2.txt + + + diff --git a/ext/mbstring/ucgendat/ucgendat.c b/ext/mbstring/ucgendat/ucgendat.c new file mode 100644 index 0000000..6fb1e09 --- /dev/null +++ b/ext/mbstring/ucgendat/ucgendat.c @@ -0,0 +1,1985 @@ +/* Further modified for PHP */ +/* $Id$ */ + +/* $OpenLDAP: pkg/ldap/libraries/liblunicode/ucdata/ucgendat.c,v 1.36.2.4 2007/01/02 21:43:51 kurt Exp $ */ +/* This work is part of OpenLDAP Software <http://www.openldap.org/>. + * + * Copyright 1998-2007 The OpenLDAP Foundation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available at + * <http://www.OpenLDAP.org/license.html>. + */ + +/* Copyright 2001 Computing Research Labs, New Mexico State University + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT + * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +/* orig Id: ucgendat.c,v 1.4 2001/01/02 18:46:20 mleisher Exp $" */ + +#include <stdio.h> +#include <ctype.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#define ac_uint2 unsigned short +#define ac_uint4 unsigned int +#define LDAP_DIRSEP "/" +#define AC_MEMCPY memcpy + +#ifndef HARDCODE_DATA +#define HARDCODE_DATA 1 +#endif + +#undef ishdigit +#define ishdigit(cc) (((cc) >= '0' && (cc) <= '9') ||\ + ((cc) >= 'A' && (cc) <= 'F') ||\ + ((cc) >= 'a' && (cc) <= 'f')) + +/* + * A header written to the output file with the byte-order-mark and the number + * of property nodes. + */ +static ac_uint2 hdr[2] = {0xfeff, 0}; + +#define NUMPROPS 50 +#define NEEDPROPS (NUMPROPS + (4 - (NUMPROPS & 3))) + +typedef struct { + char *name; + int len; +} _prop_t; + +/* + * List of properties expected to be found in the Unicode Character Database + * including some implementation specific properties. + * + * The implementation specific properties are: + * Cm = Composed (can be decomposed) + * Nb = Non-breaking + * Sy = Symmetric (has left and right forms) + * Hd = Hex digit + * Qm = Quote marks + * Mr = Mirroring + * Ss = Space, other + * Cp = Defined character + */ +static _prop_t props[NUMPROPS] = { + {"Mn", 2}, {"Mc", 2}, {"Me", 2}, {"Nd", 2}, {"Nl", 2}, {"No", 2}, + {"Zs", 2}, {"Zl", 2}, {"Zp", 2}, {"Cc", 2}, {"Cf", 2}, {"Cs", 2}, + {"Co", 2}, {"Cn", 2}, {"Lu", 2}, {"Ll", 2}, {"Lt", 2}, {"Lm", 2}, + {"Lo", 2}, {"Pc", 2}, {"Pd", 2}, {"Ps", 2}, {"Pe", 2}, {"Po", 2}, + {"Sm", 2}, {"Sc", 2}, {"Sk", 2}, {"So", 2}, {"L", 1}, {"R", 1}, + {"EN", 2}, {"ES", 2}, {"ET", 2}, {"AN", 2}, {"CS", 2}, {"B", 1}, + {"S", 1}, {"WS", 2}, {"ON", 2}, + {"Cm", 2}, {"Nb", 2}, {"Sy", 2}, {"Hd", 2}, {"Qm", 2}, {"Mr", 2}, + {"Ss", 2}, {"Cp", 2}, {"Pi", 2}, {"Pf", 2}, {"AL", 2} +}; + +typedef struct { + ac_uint4 *ranges; + ac_uint2 used; + ac_uint2 size; +} _ranges_t; + +static _ranges_t proptbl[NUMPROPS]; + +/* + * Make sure this array is sized to be on a 4-byte boundary at compile time. + */ +static ac_uint2 propcnt[NEEDPROPS]; + +/* + * Array used to collect a decomposition before adding it to the decomposition + * table. + */ +static ac_uint4 dectmp[64]; +static ac_uint4 dectmp_size; + +typedef struct { + ac_uint4 code; + ac_uint2 size; + ac_uint2 used; + ac_uint4 *decomp; +} _decomp_t; + +/* + * List of decomposition. Created and expanded in order as the characters are + * encountered. First list contains canonical mappings, second also includes + * compatibility mappings. + */ +static _decomp_t *decomps; +static ac_uint4 decomps_used; +static ac_uint4 decomps_size; + +static _decomp_t *kdecomps; +static ac_uint4 kdecomps_used; +static ac_uint4 kdecomps_size; + +/* + * Composition exclusion table stuff. + */ +#define COMPEX_SET(c) (compexs[(c) >> 5] |= (1 << ((c) & 31))) +#define COMPEX_TEST(c) (compexs[(c) >> 5] & (1 << ((c) & 31))) +static ac_uint4 compexs[8192]; + +/* + * Struct for holding a composition pair, and array of composition pairs + */ +typedef struct { + ac_uint4 comp; + ac_uint4 count; + ac_uint4 code1; + ac_uint4 code2; +} _comp_t; + +#if 0 +static _comp_t *comps; +#endif +static ac_uint4 comps_used; + +/* + * Types and lists for handling lists of case mappings. + */ +typedef struct { + ac_uint4 key; + ac_uint4 other1; + ac_uint4 other2; +} _case_t; + +static _case_t *upper; +static _case_t *lower; +static _case_t *title; +static ac_uint4 upper_used; +static ac_uint4 upper_size; +static ac_uint4 lower_used; +static ac_uint4 lower_size; +static ac_uint4 title_used; +static ac_uint4 title_size; + +/* + * Array used to collect case mappings before adding them to a list. + */ +static ac_uint4 cases[3]; + +/* + * An array to hold ranges for combining classes. + */ +static ac_uint4 *ccl; +static ac_uint4 ccl_used; +static ac_uint4 ccl_size; + +/* + * Structures for handling numbers. + */ +typedef struct { + ac_uint4 code; + ac_uint4 idx; +} _codeidx_t; + +typedef struct { + short numerator; + short denominator; +} _num_t; + +/* + * Arrays to hold the mapping of codes to numbers. + */ +static _codeidx_t *ncodes; +static ac_uint4 ncodes_used; +static ac_uint4 ncodes_size; + +static _num_t *nums; +static ac_uint4 nums_used; +static ac_uint4 nums_size; + +/* + * Array for holding numbers. + */ +static _num_t *nums; +static ac_uint4 nums_used; +static ac_uint4 nums_size; + +static void +add_range(ac_uint4 start, ac_uint4 end, char *p1, char *p2) +{ + int i, j, k, len; + _ranges_t *rlp; + char *name; + + for (k = 0; k < 2; k++) { + if (k == 0) { + name = p1; + len = 2; + } else { + if (p2 == 0) + break; + + name = p2; + len = 1; + } + + for (i = 0; i < NUMPROPS; i++) { + if (props[i].len == len && memcmp(props[i].name, name, len) == 0) + break; + } + + if (i == NUMPROPS) + continue; + + rlp = &proptbl[i]; + + /* + * Resize the range list if necessary. + */ + if (rlp->used == rlp->size) { + if (rlp->size == 0) + rlp->ranges = (ac_uint4 *) + malloc(sizeof(ac_uint4) << 3); + else + rlp->ranges = (ac_uint4 *) + realloc((char *) rlp->ranges, + sizeof(ac_uint4) * (rlp->size + 8)); + rlp->size += 8; + } + + /* + * If this is the first code for this property list, just add it + * and return. + */ + if (rlp->used == 0) { + rlp->ranges[0] = start; + rlp->ranges[1] = end; + rlp->used += 2; + continue; + } + + /* + * Optimize the case of adding the range to the end. + */ + j = rlp->used - 1; + if (start > rlp->ranges[j]) { + j = rlp->used; + rlp->ranges[j++] = start; + rlp->ranges[j++] = end; + rlp->used = j; + continue; + } + + /* + * Need to locate the insertion point. + */ + for (i = 0; + i < rlp->used && start > rlp->ranges[i + 1] + 1; i += 2) ; + + /* + * If the start value lies in the current range, then simply set the + * new end point of the range to the end value passed as a parameter. + */ + if (rlp->ranges[i] <= start && start <= rlp->ranges[i + 1] + 1) { + rlp->ranges[i + 1] = end; + return; + } + + /* + * Shift following values up by two. + */ + for (j = rlp->used; j > i; j -= 2) { + rlp->ranges[j] = rlp->ranges[j - 2]; + rlp->ranges[j + 1] = rlp->ranges[j - 1]; + } + + /* + * Add the new range at the insertion point. + */ + rlp->ranges[i] = start; + rlp->ranges[i + 1] = end; + rlp->used += 2; + } +} + +static void +ordered_range_insert(ac_uint4 c, char *name, int len) +{ + int i, j; + ac_uint4 s, e; + _ranges_t *rlp; + + if (len == 0) + return; + + /* + * Deal with directionality codes introduced in Unicode 3.0. + */ + if ((len == 2 && memcmp(name, "BN", 2) == 0) || + (len == 3 && + (memcmp(name, "NSM", 3) == 0 || memcmp(name, "PDF", 3) == 0 || + memcmp(name, "LRE", 3) == 0 || memcmp(name, "LRO", 3) == 0 || + memcmp(name, "RLE", 3) == 0 || memcmp(name, "RLO", 3) == 0))) { + /* + * Mark all of these as Other Neutral to preserve compatibility with + * older versions. + */ + len = 2; + name = "ON"; + } + + for (i = 0; i < NUMPROPS; i++) { + if (props[i].len == len && memcmp(props[i].name, name, len) == 0) + break; + } + + if (i == NUMPROPS) + return; + + /* + * Have a match, so insert the code in order. + */ + rlp = &proptbl[i]; + + /* + * Resize the range list if necessary. + */ + if (rlp->used == rlp->size) { + if (rlp->size == 0) + rlp->ranges = (ac_uint4 *) + malloc(sizeof(ac_uint4) << 3); + else + rlp->ranges = (ac_uint4 *) + realloc((char *) rlp->ranges, + sizeof(ac_uint4) * (rlp->size + 8)); + rlp->size += 8; + } + + /* + * If this is the first code for this property list, just add it + * and return. + */ + if (rlp->used == 0) { + rlp->ranges[0] = rlp->ranges[1] = c; + rlp->used += 2; + return; + } + + /* + * Optimize the cases of extending the last range and adding new ranges to + * the end. + */ + j = rlp->used - 1; + e = rlp->ranges[j]; + s = rlp->ranges[j - 1]; + + if (c == e + 1) { + /* + * Extend the last range. + */ + rlp->ranges[j] = c; + return; + } + + if (c > e + 1) { + /* + * Start another range on the end. + */ + j = rlp->used; + rlp->ranges[j] = rlp->ranges[j + 1] = c; + rlp->used += 2; + return; + } + + if (c >= s) + /* + * The code is a duplicate of a code in the last range, so just return. + */ + return; + + /* + * The code should be inserted somewhere before the last range in the + * list. Locate the insertion point. + */ + for (i = 0; + i < rlp->used && c > rlp->ranges[i + 1] + 1; i += 2) ; + + s = rlp->ranges[i]; + e = rlp->ranges[i + 1]; + + if (c == e + 1) + /* + * Simply extend the current range. + */ + rlp->ranges[i + 1] = c; + else if (c < s) { + /* + * Add a new entry before the current location. Shift all entries + * before the current one up by one to make room. + */ + for (j = rlp->used; j > i; j -= 2) { + rlp->ranges[j] = rlp->ranges[j - 2]; + rlp->ranges[j + 1] = rlp->ranges[j - 1]; + } + rlp->ranges[i] = rlp->ranges[i + 1] = c; + + rlp->used += 2; + } +} + +static void +add_decomp(ac_uint4 code, short compat) +{ + ac_uint4 i, j, size; + _decomp_t **pdecomps; + ac_uint4 *pdecomps_used; + ac_uint4 *pdecomps_size; + + if (compat) { + pdecomps = &kdecomps; + pdecomps_used = &kdecomps_used; + pdecomps_size = &kdecomps_size; + } else { + pdecomps = &decomps; + pdecomps_used = &decomps_used; + pdecomps_size = &decomps_size; + } + + /* + * Add the code to the composite property. + */ + if (!compat) { + ordered_range_insert(code, "Cm", 2); + } + + /* + * Locate the insertion point for the code. + */ + for (i = 0; i < *pdecomps_used && code > (*pdecomps)[i].code; i++) ; + + /* + * Allocate space for a new decomposition. + */ + if (*pdecomps_used == *pdecomps_size) { + if (*pdecomps_size == 0) + *pdecomps = (_decomp_t *) malloc(sizeof(_decomp_t) << 3); + else + *pdecomps = (_decomp_t *) + realloc((char *) *pdecomps, + sizeof(_decomp_t) * (*pdecomps_size + 8)); + (void) memset((char *) (*pdecomps + *pdecomps_size), '\0', + sizeof(_decomp_t) << 3); + *pdecomps_size += 8; + } + + if (i < *pdecomps_used && code != (*pdecomps)[i].code) { + /* + * Shift the decomps up by one if the codes don't match. + */ + for (j = *pdecomps_used; j > i; j--) + (void) AC_MEMCPY((char *) &(*pdecomps)[j], (char *) &(*pdecomps)[j - 1], + sizeof(_decomp_t)); + } + + /* + * Insert or replace a decomposition. + */ + size = dectmp_size + (4 - (dectmp_size & 3)); + if ((*pdecomps)[i].size < size) { + if ((*pdecomps)[i].size == 0) + (*pdecomps)[i].decomp = (ac_uint4 *) + malloc(sizeof(ac_uint4) * size); + else + (*pdecomps)[i].decomp = (ac_uint4 *) + realloc((char *) (*pdecomps)[i].decomp, + sizeof(ac_uint4) * size); + (*pdecomps)[i].size = size; + } + + if ((*pdecomps)[i].code != code) + (*pdecomps_used)++; + + (*pdecomps)[i].code = code; + (*pdecomps)[i].used = dectmp_size; + (void) AC_MEMCPY((char *) (*pdecomps)[i].decomp, (char *) dectmp, + sizeof(ac_uint4) * dectmp_size); + + /* + * NOTICE: This needs changing later so it is more general than simply + * pairs. This calculation is done here to simplify allocation elsewhere. + */ + if (!compat && dectmp_size == 2) + comps_used++; +} + +static void +add_title(ac_uint4 code) +{ + ac_uint4 i, j; + + /* + * Always map the code to itself. + */ + cases[2] = code; + + if (title_used == title_size) { + if (title_size == 0) + title = (_case_t *) malloc(sizeof(_case_t) << 3); + else + title = (_case_t *) realloc((char *) title, + sizeof(_case_t) * (title_size + 8)); + title_size += 8; + } + + /* + * Locate the insertion point. + */ + for (i = 0; i < title_used && code > title[i].key; i++) ; + + if (i < title_used) { + /* + * Shift the array up by one. + */ + for (j = title_used; j > i; j--) + (void) AC_MEMCPY((char *) &title[j], (char *) &title[j - 1], + sizeof(_case_t)); + } + + title[i].key = cases[2]; /* Title */ + title[i].other1 = cases[0]; /* Upper */ + title[i].other2 = cases[1]; /* Lower */ + + title_used++; +} + +static void +add_upper(ac_uint4 code) +{ + ac_uint4 i, j; + + /* + * Always map the code to itself. + */ + cases[0] = code; + + /* + * If the title case character is not present, then make it the same as + * the upper case. + */ + if (cases[2] == 0) + cases[2] = code; + + if (upper_used == upper_size) { + if (upper_size == 0) + upper = (_case_t *) malloc(sizeof(_case_t) << 3); + else + upper = (_case_t *) realloc((char *) upper, + sizeof(_case_t) * (upper_size + 8)); + upper_size += 8; + } + + /* + * Locate the insertion point. + */ + for (i = 0; i < upper_used && code > upper[i].key; i++) ; + + if (i < upper_used) { + /* + * Shift the array up by one. + */ + for (j = upper_used; j > i; j--) + (void) AC_MEMCPY((char *) &upper[j], (char *) &upper[j - 1], + sizeof(_case_t)); + } + + upper[i].key = cases[0]; /* Upper */ + upper[i].other1 = cases[1]; /* Lower */ + upper[i].other2 = cases[2]; /* Title */ + + upper_used++; +} + +static void +add_lower(ac_uint4 code) +{ + ac_uint4 i, j; + + /* + * Always map the code to itself. + */ + cases[1] = code; + + /* + * If the title case character is empty, then make it the same as the + * upper case. + */ + if (cases[2] == 0) + cases[2] = cases[0]; + + if (lower_used == lower_size) { + if (lower_size == 0) + lower = (_case_t *) malloc(sizeof(_case_t) << 3); + else + lower = (_case_t *) realloc((char *) lower, + sizeof(_case_t) * (lower_size + 8)); + lower_size += 8; + } + + /* + * Locate the insertion point. + */ + for (i = 0; i < lower_used && code > lower[i].key; i++) ; + + if (i < lower_used) { + /* + * Shift the array up by one. + */ + for (j = lower_used; j > i; j--) + (void) AC_MEMCPY((char *) &lower[j], (char *) &lower[j - 1], + sizeof(_case_t)); + } + + lower[i].key = cases[1]; /* Lower */ + lower[i].other1 = cases[0]; /* Upper */ + lower[i].other2 = cases[2]; /* Title */ + + lower_used++; +} + +static void +ordered_ccl_insert(ac_uint4 c, ac_uint4 ccl_code) +{ + ac_uint4 i, j; + + if (ccl_used == ccl_size) { + if (ccl_size == 0) + ccl = (ac_uint4 *) malloc(sizeof(ac_uint4) * 24); + else + ccl = (ac_uint4 *) + realloc((char *) ccl, sizeof(ac_uint4) * (ccl_size + 24)); + ccl_size += 24; + } + + /* + * Optimize adding the first item. + */ + if (ccl_used == 0) { + ccl[0] = ccl[1] = c; + ccl[2] = ccl_code; + ccl_used += 3; + return; + } + + /* + * Handle the special case of extending the range on the end. This + * requires that the combining class codes are the same. + */ + if (ccl_code == ccl[ccl_used - 1] && c == ccl[ccl_used - 2] + 1) { + ccl[ccl_used - 2] = c; + return; + } + + /* + * Handle the special case of adding another range on the end. + */ + if (c > ccl[ccl_used - 2] + 1 || + (c == ccl[ccl_used - 2] + 1 && ccl_code != ccl[ccl_used - 1])) { + ccl[ccl_used++] = c; + ccl[ccl_used++] = c; + ccl[ccl_used++] = ccl_code; + return; + } + + /* + * Locate either the insertion point or range for the code. + */ + for (i = 0; i < ccl_used && c > ccl[i + 1] + 1; i += 3) ; + + if (ccl_code == ccl[i + 2] && c == ccl[i + 1] + 1) { + /* + * Extend an existing range. + */ + ccl[i + 1] = c; + return; + } else if (c < ccl[i]) { + /* + * Start a new range before the current location. + */ + for (j = ccl_used; j > i; j -= 3) { + ccl[j] = ccl[j - 3]; + ccl[j - 1] = ccl[j - 4]; + ccl[j - 2] = ccl[j - 5]; + } + ccl[i] = ccl[i + 1] = c; + ccl[i + 2] = ccl_code; + } +} + +/* + * Adds a number if it does not already exist and returns an index value + * multiplied by 2. + */ +static ac_uint4 +make_number(short num, short denom) +{ + ac_uint4 n; + + /* + * Determine if the number already exists. + */ + for (n = 0; n < nums_used; n++) { + if (nums[n].numerator == num && nums[n].denominator == denom) + return n << 1; + } + + if (nums_used == nums_size) { + if (nums_size == 0) + nums = (_num_t *) malloc(sizeof(_num_t) << 3); + else + nums = (_num_t *) realloc((char *) nums, + sizeof(_num_t) * (nums_size + 8)); + nums_size += 8; + } + + n = nums_used++; + nums[n].numerator = num; + nums[n].denominator = denom; + + return n << 1; +} + +static void +add_number(ac_uint4 code, short num, short denom) +{ + ac_uint4 i, j; + + /* + * Insert the code in order. + */ + for (i = 0; i < ncodes_used && code > ncodes[i].code; i++) ; + + /* + * Handle the case of the codes matching and simply replace the number + * that was there before. + */ + if (i < ncodes_used && code == ncodes[i].code) { + ncodes[i].idx = make_number(num, denom); + return; + } + + /* + * Resize the array if necessary. + */ + if (ncodes_used == ncodes_size) { + if (ncodes_size == 0) + ncodes = (_codeidx_t *) malloc(sizeof(_codeidx_t) << 3); + else + ncodes = (_codeidx_t *) + realloc((char *) ncodes, sizeof(_codeidx_t) * (ncodes_size + 8)); + + ncodes_size += 8; + } + + /* + * Shift things around to insert the code if necessary. + */ + if (i < ncodes_used) { + for (j = ncodes_used; j > i; j--) { + ncodes[j].code = ncodes[j - 1].code; + ncodes[j].idx = ncodes[j - 1].idx; + } + } + ncodes[i].code = code; + ncodes[i].idx = make_number(num, denom); + + ncodes_used++; +} + +/* + * This routine assumes that the line is a valid Unicode Character Database + * entry. + */ +static void +read_cdata(FILE *in) +{ + ac_uint4 i, lineno, skip, code, ccl_code; + short wnum, neg, number[2], compat; + char line[512], *s, *e; + + lineno = skip = 0; + while (fgets(line, sizeof(line), in)) { + if( (s=strchr(line, '\n')) ) *s = '\0'; + lineno++; + + /* + * Skip blank lines and lines that start with a '#'. + */ + if (line[0] == 0 || line[0] == '#') + continue; + + /* + * If lines need to be skipped, do it here. + */ + if (skip) { + skip--; + continue; + } + + /* + * Collect the code. The code can be up to 6 hex digits in length to + * allow surrogates to be specified. + */ + for (s = line, i = code = 0; *s != ';' && i < 6; i++, s++) { + code <<= 4; + if (*s >= '0' && *s <= '9') + code += *s - '0'; + else if (*s >= 'A' && *s <= 'F') + code += (*s - 'A') + 10; + else if (*s >= 'a' && *s <= 'f') + code += (*s - 'a') + 10; + } + + /* + * Handle the following special cases: + * 1. 4E00-9FA5 CJK Ideographs. + * 2. AC00-D7A3 Hangul Syllables. + * 3. D800-DFFF Surrogates. + * 4. E000-F8FF Private Use Area. + * 5. F900-FA2D Han compatibility. + * ...Plus additional ranges in newer Unicode versions... + */ + switch (code) { + case 0x3400: + /* CJK Ideograph Extension A */ + add_range(0x3400, 0x4db5, "Lo", "L"); + + add_range(0x3400, 0x4db5, "Cp", 0); + + skip = 1; + break; + case 0x4e00: + /* + * The Han ideographs. + */ + add_range(0x4e00, 0x9fff, "Lo", "L"); + + /* + * Add the characters to the defined category. + */ + add_range(0x4e00, 0x9fa5, "Cp", 0); + + skip = 1; + break; + case 0xac00: + /* + * The Hangul syllables. + */ + add_range(0xac00, 0xd7a3, "Lo", "L"); + + /* + * Add the characters to the defined category. + */ + add_range(0xac00, 0xd7a3, "Cp", 0); + + skip = 1; + break; + case 0xd800: + /* + * Make a range of all surrogates and assume some default + * properties. + */ + add_range(0x010000, 0x10ffff, "Cs", "L"); + skip = 5; + break; + case 0xe000: + /* + * The Private Use area. Add with a default set of properties. + */ + add_range(0xe000, 0xf8ff, "Co", "L"); + skip = 1; + break; + case 0xf900: + /* + * The CJK compatibility area. + */ + add_range(0xf900, 0xfaff, "Lo", "L"); + + /* + * Add the characters to the defined category. + */ + add_range(0xf900, 0xfaff, "Cp", 0); + + skip = 1; + break; + case 0x20000: + /* CJK Ideograph Extension B */ + add_range(0x20000, 0x2a6d6, "Lo", "L"); + + add_range(0x20000, 0x2a6d6, "Cp", 0); + + skip = 1; + break; + case 0xf0000: + /* Plane 15 private use */ + add_range(0xf0000, 0xffffd, "Co", "L"); + skip = 1; + break; + + case 0x100000: + /* Plane 16 private use */ + add_range(0x100000, 0x10fffd, "Co", "L"); + skip = 1; + break; + } + + if (skip) + continue; + + /* + * Add the code to the defined category. + */ + ordered_range_insert(code, "Cp", 2); + + /* + * Locate the first character property field. + */ + for (i = 0; *s != 0 && i < 2; s++) { + if (*s == ';') + i++; + } + for (e = s; *e && *e != ';'; e++) ; + + ordered_range_insert(code, s, e - s); + + /* + * Locate the combining class code. + */ + for (s = e; *s != 0 && i < 3; s++) { + if (*s == ';') + i++; + } + + /* + * Convert the combining class code from decimal. + */ + for (ccl_code = 0, e = s; *e && *e != ';'; e++) + ccl_code = (ccl_code * 10) + (*e - '0'); + + /* + * Add the code if it not 0. + */ + if (ccl_code != 0) + ordered_ccl_insert(code, ccl_code); + + /* + * Locate the second character property field. + */ + for (s = e; *s != 0 && i < 4; s++) { + if (*s == ';') + i++; + } + for (e = s; *e && *e != ';'; e++) ; + + ordered_range_insert(code, s, e - s); + + /* + * Check for a decomposition. + */ + s = ++e; + if (*s != ';') { + compat = *s == '<'; + if (compat) { + /* + * Skip compatibility formatting tag. + */ + while (*s++ != '>'); + } + /* + * Collect the codes of the decomposition. + */ + for (dectmp_size = 0; *s != ';'; ) { + /* + * Skip all leading non-hex digits. + */ + while (!ishdigit(*s)) + s++; + + for (dectmp[dectmp_size] = 0; ishdigit(*s); s++) { + dectmp[dectmp_size] <<= 4; + if (*s >= '0' && *s <= '9') + dectmp[dectmp_size] += *s - '0'; + else if (*s >= 'A' && *s <= 'F') + dectmp[dectmp_size] += (*s - 'A') + 10; + else if (*s >= 'a' && *s <= 'f') + dectmp[dectmp_size] += (*s - 'a') + 10; + } + dectmp_size++; + } + + /* + * If there are any codes in the temporary decomposition array, + * then add the character with its decomposition. + */ + if (dectmp_size > 0) { + if (!compat) { + add_decomp(code, 0); + } + add_decomp(code, 1); + } + } + + /* + * Skip to the number field. + */ + for (i = 0; i < 3 && *s; s++) { + if (*s == ';') + i++; + } + + /* + * Scan the number in. + */ + number[0] = number[1] = 0; + for (e = s, neg = wnum = 0; *e && *e != ';'; e++) { + if (*e == '-') { + neg = 1; + continue; + } + + if (*e == '/') { + /* + * Move the the denominator of the fraction. + */ + if (neg) + number[wnum] *= -1; + neg = 0; + e++; + wnum++; + } + number[wnum] = (number[wnum] * 10) + (*e - '0'); + } + + if (e > s) { + /* + * Adjust the denominator in case of integers and add the number. + */ + if (wnum == 0) + number[1] = 1; + + add_number(code, number[0], number[1]); + } + + /* + * Skip to the start of the possible case mappings. + */ + for (s = e, i = 0; i < 4 && *s; s++) { + if (*s == ';') + i++; + } + + /* + * Collect the case mappings. + */ + cases[0] = cases[1] = cases[2] = 0; + for (i = 0; i < 3; i++) { + while (ishdigit(*s)) { + cases[i] <<= 4; + if (*s >= '0' && *s <= '9') + cases[i] += *s - '0'; + else if (*s >= 'A' && *s <= 'F') + cases[i] += (*s - 'A') + 10; + else if (*s >= 'a' && *s <= 'f') + cases[i] += (*s - 'a') + 10; + s++; + } + if (*s == ';') + s++; + } + if (cases[0] && cases[1]) + /* + * Add the upper and lower mappings for a title case character. + */ + add_title(code); + else if (cases[1]) + /* + * Add the lower and title case mappings for the upper case + * character. + */ + add_upper(code); + else if (cases[0]) + /* + * Add the upper and title case mappings for the lower case + * character. + */ + add_lower(code); + } +} + +#if 0 + +static _decomp_t * +find_decomp(ac_uint4 code, short compat) +{ + long l, r, m; + _decomp_t *decs; + + l = 0; + r = (compat ? kdecomps_used : decomps_used) - 1; + decs = compat ? kdecomps : decomps; + while (l <= r) { + m = (l + r) >> 1; + if (code > decs[m].code) + l = m + 1; + else if (code < decs[m].code) + r = m - 1; + else + return &decs[m]; + } + return 0; +} + +static void +decomp_it(_decomp_t *d, short compat) +{ + ac_uint4 i; + _decomp_t *dp; + + for (i = 0; i < d->used; i++) { + if ((dp = find_decomp(d->decomp[i], compat)) != 0) + decomp_it(dp, compat); + else + dectmp[dectmp_size++] = d->decomp[i]; + } +} + + +/* + * Expand all decompositions by recursively decomposing each character + * in the decomposition. + */ +static void +expand_decomp(void) +{ + ac_uint4 i; + + for (i = 0; i < decomps_used; i++) { + dectmp_size = 0; + decomp_it(&decomps[i], 0); + if (dectmp_size > 0) + add_decomp(decomps[i].code, 0); + } + + for (i = 0; i < kdecomps_used; i++) { + dectmp_size = 0; + decomp_it(&kdecomps[i], 1); + if (dectmp_size > 0) + add_decomp(kdecomps[i].code, 1); + } +} + +static int +cmpcomps(const void *v_comp1, const void *v_comp2) +{ + const _comp_t *comp1 = v_comp1, *comp2 = v_comp2; + long diff = comp1->code1 - comp2->code1; + + if (!diff) + diff = comp1->code2 - comp2->code2; + return (int) diff; +} + +#endif + +/* + * Load composition exclusion data + */ +static void +read_compexdata(FILE *in) +{ + ac_uint2 i; + ac_uint4 code; + char line[512], *s; + + (void) memset((char *) compexs, 0, sizeof(compexs)); + + while (fgets(line, sizeof(line), in)) { + if( (s=strchr(line, '\n')) ) *s = '\0'; + /* + * Skip blank lines and lines that start with a '#'. + */ + if (line[0] == 0 || line[0] == '#') + continue; + + /* + * Collect the code. Assume max 6 digits + */ + + for (s = line, i = code = 0; *s != '#' && i < 6; i++, s++) { + if (isspace((unsigned char)*s)) break; + code <<= 4; + if (*s >= '0' && *s <= '9') + code += *s - '0'; + else if (*s >= 'A' && *s <= 'F') + code += (*s - 'A') + 10; + else if (*s >= 'a' && *s <= 'f') + code += (*s - 'a') + 10; + } + COMPEX_SET(code); + } +} + +#if 0 + +/* + * Creates array of compositions from decomposition array + */ +static void +create_comps(void) +{ + ac_uint4 i, cu; + + comps = (_comp_t *) malloc(comps_used * sizeof(_comp_t)); + + for (i = cu = 0; i < decomps_used; i++) { + if (decomps[i].used != 2 || COMPEX_TEST(decomps[i].code)) + continue; + comps[cu].comp = decomps[i].code; + comps[cu].count = 2; + comps[cu].code1 = decomps[i].decomp[0]; + comps[cu].code2 = decomps[i].decomp[1]; + cu++; + } + comps_used = cu; + qsort(comps, comps_used, sizeof(_comp_t), cmpcomps); +} + +#endif + +#if HARDCODE_DATA +static void +write_case(FILE *out, _case_t *tab, int num, int first) +{ + int i; + + for (i=0; i<num; i++) { + if (first) first = 0; + else fprintf(out, ","); + fprintf(out, "\n\t0x%08lx, 0x%08lx, 0x%08lx", + (unsigned long) tab[i].key, (unsigned long) tab[i].other1, + (unsigned long) tab[i].other2); + } +} + +#define PREF "static const " + +#endif + +static void +write_cdata(char *opath) +{ + FILE *out; + ac_uint4 bytes; + ac_uint4 i, idx, nprops; +#if !(HARDCODE_DATA) + ac_uint2 casecnt[2]; +#endif + char path[BUFSIZ]; +#if HARDCODE_DATA + int j, k; + + /***************************************************************** + * + * Generate the ctype data. + * + *****************************************************************/ + + /* + * Open the output file. + */ + snprintf(path, sizeof path, "%s" LDAP_DIRSEP "uctable.h", opath); + if ((out = fopen(path, "w")) == 0) + return; +#else + /* + * Open the ctype.dat file. + */ + snprintf(path, sizeof path, "%s" LDAP_DIRSEP "ctype.dat", opath); + if ((out = fopen(path, "wb")) == 0) + return; +#endif + + /* + * Collect the offsets for the properties. The offsets array is + * on a 4-byte boundary to keep things efficient for architectures + * that need such a thing. + */ + for (i = idx = 0; i < NUMPROPS; i++) { + propcnt[i] = (proptbl[i].used != 0) ? idx : 0xffff; + idx += proptbl[i].used; + } + + /* + * Add the sentinel index which is used by the binary search as the upper + * bound for a search. + */ + propcnt[i] = idx; + + /* + * Record the actual number of property lists. This may be different than + * the number of offsets actually written because of aligning on a 4-byte + * boundary. + */ + hdr[1] = NUMPROPS; + + /* + * Calculate the byte count needed and pad the property counts array to a + * 4-byte boundary. + */ + if ((bytes = sizeof(ac_uint2) * (NUMPROPS + 1)) & 3) + bytes += 4 - (bytes & 3); + nprops = bytes / sizeof(ac_uint2); + bytes += sizeof(ac_uint4) * idx; + +#if HARDCODE_DATA + fprintf(out, + "/* This file was generated from a modified version UCData's ucgendat.\n" + " *\n" + " * DO NOT EDIT THIS FILE!\n" + " * \n" + " * Instead, compile ucgendat.c (bundled with PHP in ext/mbstring), download\n" + " * the appropriate UnicodeData-x.x.x.txt and CompositionExclusions-x.x.x.txt\n" + " * files from http://www.unicode.org/Public/ and run this program.\n" + " *\n" + " * More information can be found in the UCData package. Unfortunately,\n" + " * the project's page doesn't seem to be live anymore, so you can use\n" + " * OpenLDAPs modified copy (look in libraries/liblunicode/ucdata) */\n\n"); + + fprintf(out, PREF "unsigned short _ucprop_size = %d;\n\n", NUMPROPS); + + fprintf(out, PREF "unsigned short _ucprop_offsets[] = {"); + + for (i = 0; i<nprops; i++) { + if (i) fprintf(out, ","); + if (!(i&7)) fprintf(out, "\n\t"); + else fprintf(out, " "); + fprintf(out, "0x%04x", propcnt[i]); + } + fprintf(out, "\n};\n\n"); + + fprintf(out, PREF "unsigned int _ucprop_ranges[] = {"); + + k = 0; + for (i = 0; i < NUMPROPS; i++) { + if (proptbl[i].used > 0) { + for (j=0; j<proptbl[i].used; j++) { + if (k) fprintf(out, ","); + if (!(k&3)) fprintf(out,"\n\t"); + else fprintf(out, " "); + k++; + fprintf(out, "0x%08lx", (unsigned long) proptbl[i].ranges[j]); + } + } + } + fprintf(out, "\n};\n\n"); +#else + /* + * Write the header. + */ + fwrite((char *) hdr, sizeof(ac_uint2), 2, out); + + /* + * Write the byte count. + */ + fwrite((char *) &bytes, sizeof(ac_uint4), 1, out); + + /* + * Write the property list counts. + */ + fwrite((char *) propcnt, sizeof(ac_uint2), nprops, out); + + /* + * Write the property lists. + */ + for (i = 0; i < NUMPROPS; i++) { + if (proptbl[i].used > 0) + fwrite((char *) proptbl[i].ranges, sizeof(ac_uint4), + proptbl[i].used, out); + } + + fclose(out); +#endif + + /***************************************************************** + * + * Generate the case mapping data. + * + *****************************************************************/ + +#if HARDCODE_DATA + fprintf(out, PREF "unsigned int _uccase_size = %ld;\n\n", + (long) (upper_used + lower_used + title_used)); + + fprintf(out, + "/* Starting indexes of the case tables\n" + " * UpperIndex = 0\n" + " * LowerIndex = _uccase_len[0]\n" + " * TitleIndex = LowerIndex + _uccase_len[1] */\n\n"); + fprintf(out, PREF "unsigned short _uccase_len[2] = {%ld, %ld};\n\n", + (long) upper_used * 3, (long) lower_used * 3); + fprintf(out, PREF "unsigned int _uccase_map[] = {"); + + if (upper_used > 0) + /* + * Write the upper case table. + */ + write_case(out, upper, upper_used, 1); + + if (lower_used > 0) + /* + * Write the lower case table. + */ + write_case(out, lower, lower_used, !upper_used); + + if (title_used > 0) + /* + * Write the title case table. + */ + write_case(out, title, title_used, !(upper_used||lower_used)); + + if (!(upper_used || lower_used || title_used)) + fprintf(out, "\t0"); + + fprintf(out, "\n};\n\n"); +#else + /* + * Open the case.dat file. + */ + snprintf(path, sizeof path, "%s" LDAP_DIRSEP "case.dat", opath); + if ((out = fopen(path, "wb")) == 0) + return; + + /* + * Write the case mapping tables. + */ + hdr[1] = upper_used + lower_used + title_used; + casecnt[0] = upper_used; + casecnt[1] = lower_used; + + /* + * Write the header. + */ + fwrite((char *) hdr, sizeof(ac_uint2), 2, out); + + /* + * Write the upper and lower case table sizes. + */ + fwrite((char *) casecnt, sizeof(ac_uint2), 2, out); + + if (upper_used > 0) + /* + * Write the upper case table. + */ + fwrite((char *) upper, sizeof(_case_t), upper_used, out); + + if (lower_used > 0) + /* + * Write the lower case table. + */ + fwrite((char *) lower, sizeof(_case_t), lower_used, out); + + if (title_used > 0) + /* + * Write the title case table. + */ + fwrite((char *) title, sizeof(_case_t), title_used, out); + + fclose(out); +#endif + +#if 0 + + /***************************************************************** + * + * Generate the composition data. + * + *****************************************************************/ + + /* + * Create compositions from decomposition data + */ + create_comps(); + +#if HARDCODE_DATA + fprintf(out, PREF "ac_uint4 _uccomp_size = %ld;\n\n", + comps_used * 4L); + + fprintf(out, PREF "ac_uint4 _uccomp_data[] = {"); + + /* + * Now, if comps exist, write them out. + */ + if (comps_used > 0) { + for (i=0; i<comps_used; i++) { + if (i) fprintf(out, ","); + fprintf(out, "\n\t0x%08lx, 0x%08lx, 0x%08lx, 0x%08lx", + (unsigned long) comps[i].comp, (unsigned long) comps[i].count, + (unsigned long) comps[i].code1, (unsigned long) comps[i].code2); + } + } else { + fprintf(out, "\t0"); + } + fprintf(out, "\n};\n\n"); +#else + /* + * Open the comp.dat file. + */ + snprintf(path, sizeof path, "%s" LDAP_DIRSEP "comp.dat", opath); + if ((out = fopen(path, "wb")) == 0) + return; + + /* + * Write the header. + */ + hdr[1] = (ac_uint2) comps_used * 4; + fwrite((char *) hdr, sizeof(ac_uint2), 2, out); + + /* + * Write out the byte count to maintain header size. + */ + bytes = comps_used * sizeof(_comp_t); + fwrite((char *) &bytes, sizeof(ac_uint4), 1, out); + + /* + * Now, if comps exist, write them out. + */ + if (comps_used > 0) + fwrite((char *) comps, sizeof(_comp_t), comps_used, out); + + fclose(out); +#endif + + /***************************************************************** + * + * Generate the decomposition data. + * + *****************************************************************/ + + /* + * Fully expand all decompositions before generating the output file. + */ + expand_decomp(); + +#if HARDCODE_DATA + fprintf(out, PREF "ac_uint4 _ucdcmp_size = %ld;\n\n", + decomps_used * 2L); + + fprintf(out, PREF "ac_uint4 _ucdcmp_nodes[] = {"); + + if (decomps_used) { + /* + * Write the list of decomp nodes. + */ + for (i = idx = 0; i < decomps_used; i++) { + fprintf(out, "\n\t0x%08lx, 0x%08lx,", + (unsigned long) decomps[i].code, (unsigned long) idx); + idx += decomps[i].used; + } + + /* + * Write the sentinel index as the last decomp node. + */ + fprintf(out, "\n\t0x%08lx\n};\n\n", (unsigned long) idx); + + fprintf(out, PREF "ac_uint4 _ucdcmp_decomp[] = {"); + /* + * Write the decompositions themselves. + */ + k = 0; + for (i = 0; i < decomps_used; i++) + for (j=0; j<decomps[i].used; j++) { + if (k) fprintf(out, ","); + if (!(k&3)) fprintf(out,"\n\t"); + else fprintf(out, " "); + k++; + fprintf(out, "0x%08lx", (unsigned long) decomps[i].decomp[j]); + } + fprintf(out, "\n};\n\n"); + } +#else + /* + * Open the decomp.dat file. + */ + snprintf(path, sizeof path, "%s" LDAP_DIRSEP "decomp.dat", opath); + if ((out = fopen(path, "wb")) == 0) + return; + + hdr[1] = decomps_used; + + /* + * Write the header. + */ + fwrite((char *) hdr, sizeof(ac_uint2), 2, out); + + /* + * Write a temporary byte count which will be calculated as the + * decompositions are written out. + */ + bytes = 0; + fwrite((char *) &bytes, sizeof(ac_uint4), 1, out); + + if (decomps_used) { + /* + * Write the list of decomp nodes. + */ + for (i = idx = 0; i < decomps_used; i++) { + fwrite((char *) &decomps[i].code, sizeof(ac_uint4), 1, out); + fwrite((char *) &idx, sizeof(ac_uint4), 1, out); + idx += decomps[i].used; + } + + /* + * Write the sentinel index as the last decomp node. + */ + fwrite((char *) &idx, sizeof(ac_uint4), 1, out); + + /* + * Write the decompositions themselves. + */ + for (i = 0; i < decomps_used; i++) + fwrite((char *) decomps[i].decomp, sizeof(ac_uint4), + decomps[i].used, out); + + /* + * Seek back to the beginning and write the byte count. + */ + bytes = (sizeof(ac_uint4) * idx) + + (sizeof(ac_uint4) * ((hdr[1] << 1) + 1)); + fseek(out, sizeof(ac_uint2) << 1, 0L); + fwrite((char *) &bytes, sizeof(ac_uint4), 1, out); + + fclose(out); + } +#endif + +#ifdef HARDCODE_DATA + fprintf(out, PREF "ac_uint4 _uckdcmp_size = %ld;\n\n", + kdecomps_used * 2L); + + fprintf(out, PREF "ac_uint4 _uckdcmp_nodes[] = {"); + + if (kdecomps_used) { + /* + * Write the list of kdecomp nodes. + */ + for (i = idx = 0; i < kdecomps_used; i++) { + fprintf(out, "\n\t0x%08lx, 0x%08lx,", + (unsigned long) kdecomps[i].code, (unsigned long) idx); + idx += kdecomps[i].used; + } + + /* + * Write the sentinel index as the last decomp node. + */ + fprintf(out, "\n\t0x%08lx\n};\n\n", (unsigned long) idx); + + fprintf(out, PREF "ac_uint4 _uckdcmp_decomp[] = {"); + + /* + * Write the decompositions themselves. + */ + k = 0; + for (i = 0; i < kdecomps_used; i++) + for (j=0; j<kdecomps[i].used; j++) { + if (k) fprintf(out, ","); + if (!(k&3)) fprintf(out,"\n\t"); + else fprintf(out, " "); + k++; + fprintf(out, "0x%08lx", (unsigned long) kdecomps[i].decomp[j]); + } + fprintf(out, "\n};\n\n"); + } +#else + /* + * Open the kdecomp.dat file. + */ + snprintf(path, sizeof path, "%s" LDAP_DIRSEP "kdecomp.dat", opath); + if ((out = fopen(path, "wb")) == 0) + return; + + hdr[1] = kdecomps_used; + + /* + * Write the header. + */ + fwrite((char *) hdr, sizeof(ac_uint2), 2, out); + + /* + * Write a temporary byte count which will be calculated as the + * decompositions are written out. + */ + bytes = 0; + fwrite((char *) &bytes, sizeof(ac_uint4), 1, out); + + if (kdecomps_used) { + /* + * Write the list of kdecomp nodes. + */ + for (i = idx = 0; i < kdecomps_used; i++) { + fwrite((char *) &kdecomps[i].code, sizeof(ac_uint4), 1, out); + fwrite((char *) &idx, sizeof(ac_uint4), 1, out); + idx += kdecomps[i].used; + } + + /* + * Write the sentinel index as the last decomp node. + */ + fwrite((char *) &idx, sizeof(ac_uint4), 1, out); + + /* + * Write the decompositions themselves. + */ + for (i = 0; i < kdecomps_used; i++) + fwrite((char *) kdecomps[i].decomp, sizeof(ac_uint4), + kdecomps[i].used, out); + + /* + * Seek back to the beginning and write the byte count. + */ + bytes = (sizeof(ac_uint4) * idx) + + (sizeof(ac_uint4) * ((hdr[1] << 1) + 1)); + fseek(out, sizeof(ac_uint2) << 1, 0L); + fwrite((char *) &bytes, sizeof(ac_uint4), 1, out); + + fclose(out); + } +#endif + + /***************************************************************** + * + * Generate the combining class data. + * + *****************************************************************/ +#ifdef HARDCODE_DATA + fprintf(out, PREF "ac_uint4 _uccmcl_size = %ld;\n\n", (long) ccl_used); + + fprintf(out, PREF "ac_uint4 _uccmcl_nodes[] = {"); + + if (ccl_used > 0) { + /* + * Write the combining class ranges out. + */ + for (i = 0; i<ccl_used; i++) { + if (i) fprintf(out, ","); + if (!(i&3)) fprintf(out, "\n\t"); + else fprintf(out, " "); + fprintf(out, "0x%08lx", (unsigned long) ccl[i]); + } + } else { + fprintf(out, "\t0"); + } + fprintf(out, "\n};\n\n"); +#else + /* + * Open the cmbcl.dat file. + */ + snprintf(path, sizeof path, "%s" LDAP_DIRSEP "cmbcl.dat", opath); + if ((out = fopen(path, "wb")) == 0) + return; + + /* + * Set the number of ranges used. Each range has a combining class which + * means each entry is a 3-tuple. + */ + hdr[1] = ccl_used / 3; + + /* + * Write the header. + */ + fwrite((char *) hdr, sizeof(ac_uint2), 2, out); + + /* + * Write out the byte count to maintain header size. + */ + bytes = ccl_used * sizeof(ac_uint4); + fwrite((char *) &bytes, sizeof(ac_uint4), 1, out); + + if (ccl_used > 0) + /* + * Write the combining class ranges out. + */ + fwrite((char *) ccl, sizeof(ac_uint4), ccl_used, out); + + fclose(out); +#endif + + /***************************************************************** + * + * Generate the number data. + * + *****************************************************************/ + +#if HARDCODE_DATA + fprintf(out, PREF "ac_uint4 _ucnum_size = %lu;\n\n", + (unsigned long)ncodes_used<<1); + + fprintf(out, PREF "ac_uint4 _ucnum_nodes[] = {"); + + /* + * Now, if number mappings exist, write them out. + */ + if (ncodes_used > 0) { + for (i = 0; i<ncodes_used; i++) { + if (i) fprintf(out, ","); + if (!(i&1)) fprintf(out, "\n\t"); + else fprintf(out, " "); + fprintf(out, "0x%08lx, 0x%08lx", + (unsigned long) ncodes[i].code, (unsigned long) ncodes[i].idx); + } + fprintf(out, "\n};\n\n"); + + fprintf(out, PREF "short _ucnum_vals[] = {"); + for (i = 0; i<nums_used; i++) { + if (i) fprintf(out, ","); + if (!(i&3)) fprintf(out, "\n\t"); + else fprintf(out, " "); + if (nums[i].numerator < 0) { + fprintf(out, "%6d, 0x%04x", + nums[i].numerator, nums[i].denominator); + } else { + fprintf(out, "0x%04x, 0x%04x", + nums[i].numerator, nums[i].denominator); + } + } + fprintf(out, "\n};\n\n"); + } +#else + /* + * Open the num.dat file. + */ + snprintf(path, sizeof path, "%s" LDAP_DIRSEP "num.dat", opath); + if ((out = fopen(path, "wb")) == 0) + return; + + /* + * The count part of the header will be the total number of codes that + * have numbers. + */ + hdr[1] = (ac_uint2) (ncodes_used << 1); + bytes = (ncodes_used * sizeof(_codeidx_t)) + (nums_used * sizeof(_num_t)); + + /* + * Write the header. + */ + fwrite((char *) hdr, sizeof(ac_uint2), 2, out); + + /* + * Write out the byte count to maintain header size. + */ + fwrite((char *) &bytes, sizeof(ac_uint4), 1, out); + + /* + * Now, if number mappings exist, write them out. + */ + if (ncodes_used > 0) { + fwrite((char *) ncodes, sizeof(_codeidx_t), ncodes_used, out); + fwrite((char *) nums, sizeof(_num_t), nums_used, out); + } +#endif + +#endif + + fclose(out); +} + +static void +usage(char *prog) +{ + fprintf(stderr, + "Usage: %s [-o output-directory|-x composition-exclusions]", prog); + fprintf(stderr, " datafile1 datafile2 ...\n\n"); + fprintf(stderr, + "-o output-directory\n\t\tWrite the output files to a different"); + fprintf(stderr, " directory (default: .).\n"); + fprintf(stderr, + "-x composition-exclusion\n\t\tFile of composition codes"); + fprintf(stderr, " that should be excluded.\n"); + exit(1); +} + +int +main(int argc, char *argv[]) +{ + FILE *in; + char *prog, *opath; + + prog = argv[1]; + + opath = 0; + in = stdin; + + argc--; + argv++; + + while (argc > 0) { + if (argv[0][0] == '-') { + switch (argv[0][1]) { + case 'o': + argc--; + argv++; + opath = argv[0]; + break; + case 'x': + argc--; + argv++; + if ((in = fopen(argv[0], "r")) == 0) + fprintf(stderr, + "%s: unable to open composition exclusion file %s\n", + prog, argv[0]); + else { + read_compexdata(in); + fclose(in); + in = 0; + } + break; + default: + usage(prog); + } + } else { + if (in != stdin && in != NULL) + fclose(in); + if ((in = fopen(argv[0], "r")) == 0) + fprintf(stderr, "%s: unable to open ctype file %s\n", + prog, argv[0]); + else { + read_cdata(in); + fclose(in); + in = 0; + } + } + argc--; + argv++; + } + + if (opath == 0) + opath = "."; + write_cdata(opath); + + return 0; +} diff --git a/ext/mbstring/unicode_data.h b/ext/mbstring/unicode_data.h new file mode 100644 index 0000000..1edec4c --- /dev/null +++ b/ext/mbstring/unicode_data.h @@ -0,0 +1,4272 @@ +/* This file was generated from a modified version UCData's ucgendat. + * + * DO NOT EDIT THIS FILE! + * + * Instead, compile ucgendat.c (bundled with PHP in ext/mbstring), download + * the appropriate UnicodeData-x.x.x.txt and CompositionExclusions-x.x.x.txt + * files from http://www.unicode.org/Public/ and run this program. + * + * More information can be found in the UCData package. Unfortunately, + * the project's page doesn't seem to be live anymore, so you can use + * OpenLDAPs modified copy (look in libraries/liblunicode/ucdata) */ + +static const unsigned short _ucprop_size = 50; + +static const unsigned short _ucprop_offsets[] = { + 0x0000, 0x0196, 0x0278, 0x0280, 0x02cc, 0x02e4, 0x0336, 0x0346, + 0x0348, 0x034a, 0x034e, 0x036c, 0x036e, 0xffff, 0x0374, 0x082a, + 0x0cec, 0x0d00, 0x0d62, 0x0fe6, 0x0ff2, 0x1010, 0x10a0, 0x112c, + 0x122c, 0x12b0, 0x12d0, 0x1306, 0x144e, 0x17c0, 0x181e, 0x1834, + 0x1846, 0x1870, 0x187c, 0x1896, 0x18a0, 0x18a6, 0x18b6, 0x1ba6, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1d6a, 0x2152, + 0x2168, 0x217c, 0x21a6, 0x0000 +}; + +static const unsigned int _ucprop_ranges[] = { + 0x00000300, 0x0000036f, 0x00000483, 0x00000487, + 0x00000591, 0x000005bd, 0x000005bf, 0x000005bf, + 0x000005c1, 0x000005c2, 0x000005c4, 0x000005c5, + 0x000005c7, 0x000005c7, 0x00000610, 0x0000061a, + 0x0000064b, 0x0000065f, 0x00000670, 0x00000670, + 0x000006d6, 0x000006dc, 0x000006df, 0x000006e4, + 0x000006e7, 0x000006e8, 0x000006ea, 0x000006ed, + 0x00000711, 0x00000711, 0x00000730, 0x0000074a, + 0x000007a6, 0x000007b0, 0x000007eb, 0x000007f3, + 0x00000816, 0x00000819, 0x0000081b, 0x00000823, + 0x00000825, 0x00000827, 0x00000829, 0x0000082d, + 0x00000859, 0x0000085b, 0x00000900, 0x00000902, + 0x0000093a, 0x0000093a, 0x0000093c, 0x0000093c, + 0x00000941, 0x00000948, 0x0000094d, 0x0000094d, + 0x00000951, 0x00000957, 0x00000962, 0x00000963, + 0x00000981, 0x00000981, 0x000009bc, 0x000009bc, + 0x000009c1, 0x000009c4, 0x000009cd, 0x000009cd, + 0x000009e2, 0x000009e3, 0x00000a01, 0x00000a02, + 0x00000a3c, 0x00000a3c, 0x00000a41, 0x00000a42, + 0x00000a47, 0x00000a48, 0x00000a4b, 0x00000a4d, + 0x00000a51, 0x00000a51, 0x00000a70, 0x00000a71, + 0x00000a75, 0x00000a75, 0x00000a81, 0x00000a82, + 0x00000abc, 0x00000abc, 0x00000ac1, 0x00000ac5, + 0x00000ac7, 0x00000ac8, 0x00000acd, 0x00000acd, + 0x00000ae2, 0x00000ae3, 0x00000b01, 0x00000b01, + 0x00000b3c, 0x00000b3c, 0x00000b3f, 0x00000b3f, + 0x00000b41, 0x00000b44, 0x00000b4d, 0x00000b4d, + 0x00000b56, 0x00000b56, 0x00000b62, 0x00000b63, + 0x00000b82, 0x00000b82, 0x00000bc0, 0x00000bc0, + 0x00000bcd, 0x00000bcd, 0x00000c3e, 0x00000c40, + 0x00000c46, 0x00000c48, 0x00000c4a, 0x00000c4d, + 0x00000c55, 0x00000c56, 0x00000c62, 0x00000c63, + 0x00000cbc, 0x00000cbc, 0x00000cbf, 0x00000cbf, + 0x00000cc6, 0x00000cc6, 0x00000ccc, 0x00000ccd, + 0x00000ce2, 0x00000ce3, 0x00000d41, 0x00000d44, + 0x00000d4d, 0x00000d4d, 0x00000d62, 0x00000d63, + 0x00000dca, 0x00000dca, 0x00000dd2, 0x00000dd4, + 0x00000dd6, 0x00000dd6, 0x00000e31, 0x00000e31, + 0x00000e34, 0x00000e3a, 0x00000e47, 0x00000e4e, + 0x00000eb1, 0x00000eb1, 0x00000eb4, 0x00000eb9, + 0x00000ebb, 0x00000ebc, 0x00000ec8, 0x00000ecd, + 0x00000f18, 0x00000f19, 0x00000f35, 0x00000f35, + 0x00000f37, 0x00000f37, 0x00000f39, 0x00000f39, + 0x00000f71, 0x00000f7e, 0x00000f80, 0x00000f84, + 0x00000f86, 0x00000f87, 0x00000f8d, 0x00000f97, + 0x00000f99, 0x00000fbc, 0x00000fc6, 0x00000fc6, + 0x0000102d, 0x00001030, 0x00001032, 0x00001037, + 0x00001039, 0x0000103a, 0x0000103d, 0x0000103e, + 0x00001058, 0x00001059, 0x0000105e, 0x00001060, + 0x00001071, 0x00001074, 0x00001082, 0x00001082, + 0x00001085, 0x00001086, 0x0000108d, 0x0000108d, + 0x0000109d, 0x0000109d, 0x0000135d, 0x0000135f, + 0x00001712, 0x00001714, 0x00001732, 0x00001734, + 0x00001752, 0x00001753, 0x00001772, 0x00001773, + 0x000017b7, 0x000017bd, 0x000017c6, 0x000017c6, + 0x000017c9, 0x000017d3, 0x000017dd, 0x000017dd, + 0x0000180b, 0x0000180d, 0x000018a9, 0x000018a9, + 0x00001920, 0x00001922, 0x00001927, 0x00001928, + 0x00001932, 0x00001932, 0x00001939, 0x0000193b, + 0x00001a17, 0x00001a18, 0x00001a56, 0x00001a56, + 0x00001a58, 0x00001a5e, 0x00001a60, 0x00001a60, + 0x00001a62, 0x00001a62, 0x00001a65, 0x00001a6c, + 0x00001a73, 0x00001a7c, 0x00001a7f, 0x00001a7f, + 0x00001b00, 0x00001b03, 0x00001b34, 0x00001b34, + 0x00001b36, 0x00001b3a, 0x00001b3c, 0x00001b3c, + 0x00001b42, 0x00001b42, 0x00001b6b, 0x00001b73, + 0x00001b80, 0x00001b81, 0x00001ba2, 0x00001ba5, + 0x00001ba8, 0x00001ba9, 0x00001be6, 0x00001be6, + 0x00001be8, 0x00001be9, 0x00001bed, 0x00001bed, + 0x00001bef, 0x00001bf1, 0x00001c2c, 0x00001c33, + 0x00001c36, 0x00001c37, 0x00001cd0, 0x00001cd2, + 0x00001cd4, 0x00001ce0, 0x00001ce2, 0x00001ce8, + 0x00001ced, 0x00001ced, 0x00001dc0, 0x00001de6, + 0x00001dfc, 0x00001dff, 0x000020d0, 0x000020dc, + 0x000020e1, 0x000020e1, 0x000020e5, 0x000020f0, + 0x00002cef, 0x00002cf1, 0x00002d7f, 0x00002d7f, + 0x00002de0, 0x00002dff, 0x0000302a, 0x0000302f, + 0x00003099, 0x0000309a, 0x0000a66f, 0x0000a66f, + 0x0000a67c, 0x0000a67d, 0x0000a6f0, 0x0000a6f1, + 0x0000a802, 0x0000a802, 0x0000a806, 0x0000a806, + 0x0000a80b, 0x0000a80b, 0x0000a825, 0x0000a826, + 0x0000a8c4, 0x0000a8c4, 0x0000a8e0, 0x0000a8f1, + 0x0000a926, 0x0000a92d, 0x0000a947, 0x0000a951, + 0x0000a980, 0x0000a982, 0x0000a9b3, 0x0000a9b3, + 0x0000a9b6, 0x0000a9b9, 0x0000a9bc, 0x0000a9bc, + 0x0000aa29, 0x0000aa2e, 0x0000aa31, 0x0000aa32, + 0x0000aa35, 0x0000aa36, 0x0000aa43, 0x0000aa43, + 0x0000aa4c, 0x0000aa4c, 0x0000aab0, 0x0000aab0, + 0x0000aab2, 0x0000aab4, 0x0000aab7, 0x0000aab8, + 0x0000aabe, 0x0000aabf, 0x0000aac1, 0x0000aac1, + 0x0000abe5, 0x0000abe5, 0x0000abe8, 0x0000abe8, + 0x0000abed, 0x0000abed, 0x0000fb1e, 0x0000fb1e, + 0x0000fe00, 0x0000fe0f, 0x0000fe20, 0x0000fe26, + 0x000101fd, 0x000101fd, 0x00010a01, 0x00010a03, + 0x00010a05, 0x00010a06, 0x00010a0c, 0x00010a0f, + 0x00010a38, 0x00010a3a, 0x00010a3f, 0x00010a3f, + 0x00011001, 0x00011001, 0x00011038, 0x00011046, + 0x00011080, 0x00011081, 0x000110b3, 0x000110b6, + 0x000110b9, 0x000110ba, 0x0001d167, 0x0001d169, + 0x0001d17b, 0x0001d182, 0x0001d185, 0x0001d18b, + 0x0001d1aa, 0x0001d1ad, 0x0001d242, 0x0001d244, + 0x000e0100, 0x000e01ef, 0x00000903, 0x00000903, + 0x0000093b, 0x0000093b, 0x0000093e, 0x00000940, + 0x00000949, 0x0000094c, 0x0000094e, 0x0000094f, + 0x00000982, 0x00000983, 0x000009be, 0x000009c0, + 0x000009c7, 0x000009c8, 0x000009cb, 0x000009cc, + 0x000009d7, 0x000009d7, 0x00000a03, 0x00000a03, + 0x00000a3e, 0x00000a40, 0x00000a83, 0x00000a83, + 0x00000abe, 0x00000ac0, 0x00000ac9, 0x00000ac9, + 0x00000acb, 0x00000acc, 0x00000b02, 0x00000b03, + 0x00000b3e, 0x00000b3e, 0x00000b40, 0x00000b40, + 0x00000b47, 0x00000b48, 0x00000b4b, 0x00000b4c, + 0x00000b57, 0x00000b57, 0x00000bbe, 0x00000bbf, + 0x00000bc1, 0x00000bc2, 0x00000bc6, 0x00000bc8, + 0x00000bca, 0x00000bcc, 0x00000bd7, 0x00000bd7, + 0x00000c01, 0x00000c03, 0x00000c41, 0x00000c44, + 0x00000c82, 0x00000c83, 0x00000cbe, 0x00000cbe, + 0x00000cc0, 0x00000cc4, 0x00000cc7, 0x00000cc8, + 0x00000cca, 0x00000ccb, 0x00000cd5, 0x00000cd6, + 0x00000d02, 0x00000d03, 0x00000d3e, 0x00000d40, + 0x00000d46, 0x00000d48, 0x00000d4a, 0x00000d4c, + 0x00000d57, 0x00000d57, 0x00000d82, 0x00000d83, + 0x00000dcf, 0x00000dd1, 0x00000dd8, 0x00000ddf, + 0x00000df2, 0x00000df3, 0x00000f3e, 0x00000f3f, + 0x00000f7f, 0x00000f7f, 0x0000102b, 0x0000102c, + 0x00001031, 0x00001031, 0x00001038, 0x00001038, + 0x0000103b, 0x0000103c, 0x00001056, 0x00001057, + 0x00001062, 0x00001064, 0x00001067, 0x0000106d, + 0x00001083, 0x00001084, 0x00001087, 0x0000108c, + 0x0000108f, 0x0000108f, 0x0000109a, 0x0000109c, + 0x000017b6, 0x000017b6, 0x000017be, 0x000017c5, + 0x000017c7, 0x000017c8, 0x00001923, 0x00001926, + 0x00001929, 0x0000192b, 0x00001930, 0x00001931, + 0x00001933, 0x00001938, 0x000019b0, 0x000019c0, + 0x000019c8, 0x000019c9, 0x00001a19, 0x00001a1b, + 0x00001a55, 0x00001a55, 0x00001a57, 0x00001a57, + 0x00001a61, 0x00001a61, 0x00001a63, 0x00001a64, + 0x00001a6d, 0x00001a72, 0x00001b04, 0x00001b04, + 0x00001b35, 0x00001b35, 0x00001b3b, 0x00001b3b, + 0x00001b3d, 0x00001b41, 0x00001b43, 0x00001b44, + 0x00001b82, 0x00001b82, 0x00001ba1, 0x00001ba1, + 0x00001ba6, 0x00001ba7, 0x00001baa, 0x00001baa, + 0x00001be7, 0x00001be7, 0x00001bea, 0x00001bec, + 0x00001bee, 0x00001bee, 0x00001bf2, 0x00001bf3, + 0x00001c24, 0x00001c2b, 0x00001c34, 0x00001c35, + 0x00001ce1, 0x00001ce1, 0x00001cf2, 0x00001cf2, + 0x0000a823, 0x0000a824, 0x0000a827, 0x0000a827, + 0x0000a880, 0x0000a881, 0x0000a8b4, 0x0000a8c3, + 0x0000a952, 0x0000a953, 0x0000a983, 0x0000a983, + 0x0000a9b4, 0x0000a9b5, 0x0000a9ba, 0x0000a9bb, + 0x0000a9bd, 0x0000a9c0, 0x0000aa2f, 0x0000aa30, + 0x0000aa33, 0x0000aa34, 0x0000aa4d, 0x0000aa4d, + 0x0000aa7b, 0x0000aa7b, 0x0000abe3, 0x0000abe4, + 0x0000abe6, 0x0000abe7, 0x0000abe9, 0x0000abea, + 0x0000abec, 0x0000abec, 0x00011000, 0x00011000, + 0x00011002, 0x00011002, 0x00011082, 0x00011082, + 0x000110b0, 0x000110b2, 0x000110b7, 0x000110b8, + 0x0001d165, 0x0001d166, 0x0001d16d, 0x0001d172, + 0x00000488, 0x00000489, 0x000020dd, 0x000020e0, + 0x000020e2, 0x000020e4, 0x0000a670, 0x0000a672, + 0x00000030, 0x00000039, 0x00000660, 0x00000669, + 0x000006f0, 0x000006f9, 0x000007c0, 0x000007c9, + 0x00000966, 0x0000096f, 0x000009e6, 0x000009ef, + 0x00000a66, 0x00000a6f, 0x00000ae6, 0x00000aef, + 0x00000b66, 0x00000b6f, 0x00000be6, 0x00000bef, + 0x00000c66, 0x00000c6f, 0x00000ce6, 0x00000cef, + 0x00000d66, 0x00000d6f, 0x00000e50, 0x00000e59, + 0x00000ed0, 0x00000ed9, 0x00000f20, 0x00000f29, + 0x00001040, 0x00001049, 0x00001090, 0x00001099, + 0x000017e0, 0x000017e9, 0x00001810, 0x00001819, + 0x00001946, 0x0000194f, 0x000019d0, 0x000019d9, + 0x00001a80, 0x00001a89, 0x00001a90, 0x00001a99, + 0x00001b50, 0x00001b59, 0x00001bb0, 0x00001bb9, + 0x00001c40, 0x00001c49, 0x00001c50, 0x00001c59, + 0x0000a620, 0x0000a629, 0x0000a8d0, 0x0000a8d9, + 0x0000a900, 0x0000a909, 0x0000a9d0, 0x0000a9d9, + 0x0000aa50, 0x0000aa59, 0x0000abf0, 0x0000abf9, + 0x0000ff10, 0x0000ff19, 0x000104a0, 0x000104a9, + 0x00011066, 0x0001106f, 0x0001d7ce, 0x0001d7ff, + 0x000016ee, 0x000016f0, 0x00002160, 0x00002182, + 0x00002185, 0x00002188, 0x00003007, 0x00003007, + 0x00003021, 0x00003029, 0x00003038, 0x0000303a, + 0x0000a6e6, 0x0000a6ef, 0x00010140, 0x00010174, + 0x00010341, 0x00010341, 0x0001034a, 0x0001034a, + 0x000103d1, 0x000103d5, 0x00012400, 0x00012462, + 0x000000b2, 0x000000b3, 0x000000b9, 0x000000b9, + 0x000000bc, 0x000000be, 0x000009f4, 0x000009f9, + 0x00000b72, 0x00000b77, 0x00000bf0, 0x00000bf2, + 0x00000c78, 0x00000c7e, 0x00000d70, 0x00000d75, + 0x00000f2a, 0x00000f33, 0x00001369, 0x0000137c, + 0x000017f0, 0x000017f9, 0x000019da, 0x000019da, + 0x00002070, 0x00002070, 0x00002074, 0x00002079, + 0x00002080, 0x00002089, 0x00002150, 0x0000215f, + 0x00002189, 0x00002189, 0x00002460, 0x0000249b, + 0x000024ea, 0x000024ff, 0x00002776, 0x00002793, + 0x00002cfd, 0x00002cfd, 0x00003192, 0x00003195, + 0x00003220, 0x00003229, 0x00003251, 0x0000325f, + 0x00003280, 0x00003289, 0x000032b1, 0x000032bf, + 0x0000a830, 0x0000a835, 0x00010107, 0x00010133, + 0x00010175, 0x00010178, 0x0001018a, 0x0001018a, + 0x00010320, 0x00010323, 0x00010858, 0x0001085f, + 0x00010916, 0x0001091b, 0x00010a40, 0x00010a47, + 0x00010a7d, 0x00010a7e, 0x00010b58, 0x00010b5f, + 0x00010b78, 0x00010b7f, 0x00010e60, 0x00010e7e, + 0x00011052, 0x00011065, 0x0001d360, 0x0001d371, + 0x0001f100, 0x0001f10a, 0x00000020, 0x00000020, + 0x000000a0, 0x000000a0, 0x00001680, 0x00001680, + 0x0000180e, 0x0000180e, 0x00002000, 0x0000200a, + 0x0000202f, 0x0000202f, 0x0000205f, 0x0000205f, + 0x00003000, 0x00003000, 0x00002028, 0x00002028, + 0x00002029, 0x00002029, 0x00000000, 0x0000001f, + 0x0000007f, 0x0000009f, 0x000000ad, 0x000000ad, + 0x00000600, 0x00000603, 0x000006dd, 0x000006dd, + 0x0000070f, 0x0000070f, 0x000017b4, 0x000017b5, + 0x0000200b, 0x0000200f, 0x0000202a, 0x0000202e, + 0x00002060, 0x00002064, 0x0000206a, 0x0000206f, + 0x0000feff, 0x0000feff, 0x0000fff9, 0x0000fffb, + 0x000110bd, 0x000110bd, 0x0001d173, 0x0001d17a, + 0x000e0001, 0x000e0001, 0x000e0020, 0x000e007f, + 0x00010000, 0x0010ffff, 0x0000e000, 0x0000f8ff, + 0x000f0000, 0x000ffffd, 0x00100000, 0x0010fffd, + 0x00000041, 0x0000005a, 0x000000c0, 0x000000d6, + 0x000000d8, 0x000000de, 0x00000100, 0x00000100, + 0x00000102, 0x00000102, 0x00000104, 0x00000104, + 0x00000106, 0x00000106, 0x00000108, 0x00000108, + 0x0000010a, 0x0000010a, 0x0000010c, 0x0000010c, + 0x0000010e, 0x0000010e, 0x00000110, 0x00000110, + 0x00000112, 0x00000112, 0x00000114, 0x00000114, + 0x00000116, 0x00000116, 0x00000118, 0x00000118, + 0x0000011a, 0x0000011a, 0x0000011c, 0x0000011c, + 0x0000011e, 0x0000011e, 0x00000120, 0x00000120, + 0x00000122, 0x00000122, 0x00000124, 0x00000124, + 0x00000126, 0x00000126, 0x00000128, 0x00000128, + 0x0000012a, 0x0000012a, 0x0000012c, 0x0000012c, + 0x0000012e, 0x0000012e, 0x00000130, 0x00000130, + 0x00000132, 0x00000132, 0x00000134, 0x00000134, + 0x00000136, 0x00000136, 0x00000139, 0x00000139, + 0x0000013b, 0x0000013b, 0x0000013d, 0x0000013d, + 0x0000013f, 0x0000013f, 0x00000141, 0x00000141, + 0x00000143, 0x00000143, 0x00000145, 0x00000145, + 0x00000147, 0x00000147, 0x0000014a, 0x0000014a, + 0x0000014c, 0x0000014c, 0x0000014e, 0x0000014e, + 0x00000150, 0x00000150, 0x00000152, 0x00000152, + 0x00000154, 0x00000154, 0x00000156, 0x00000156, + 0x00000158, 0x00000158, 0x0000015a, 0x0000015a, + 0x0000015c, 0x0000015c, 0x0000015e, 0x0000015e, + 0x00000160, 0x00000160, 0x00000162, 0x00000162, + 0x00000164, 0x00000164, 0x00000166, 0x00000166, + 0x00000168, 0x00000168, 0x0000016a, 0x0000016a, + 0x0000016c, 0x0000016c, 0x0000016e, 0x0000016e, + 0x00000170, 0x00000170, 0x00000172, 0x00000172, + 0x00000174, 0x00000174, 0x00000176, 0x00000176, + 0x00000178, 0x00000179, 0x0000017b, 0x0000017b, + 0x0000017d, 0x0000017d, 0x00000181, 0x00000182, + 0x00000184, 0x00000184, 0x00000186, 0x00000187, + 0x00000189, 0x0000018b, 0x0000018e, 0x00000191, + 0x00000193, 0x00000194, 0x00000196, 0x00000198, + 0x0000019c, 0x0000019d, 0x0000019f, 0x000001a0, + 0x000001a2, 0x000001a2, 0x000001a4, 0x000001a4, + 0x000001a6, 0x000001a7, 0x000001a9, 0x000001a9, + 0x000001ac, 0x000001ac, 0x000001ae, 0x000001af, + 0x000001b1, 0x000001b3, 0x000001b5, 0x000001b5, + 0x000001b7, 0x000001b8, 0x000001bc, 0x000001bc, + 0x000001c4, 0x000001c4, 0x000001c7, 0x000001c7, + 0x000001ca, 0x000001ca, 0x000001cd, 0x000001cd, + 0x000001cf, 0x000001cf, 0x000001d1, 0x000001d1, + 0x000001d3, 0x000001d3, 0x000001d5, 0x000001d5, + 0x000001d7, 0x000001d7, 0x000001d9, 0x000001d9, + 0x000001db, 0x000001db, 0x000001de, 0x000001de, + 0x000001e0, 0x000001e0, 0x000001e2, 0x000001e2, + 0x000001e4, 0x000001e4, 0x000001e6, 0x000001e6, + 0x000001e8, 0x000001e8, 0x000001ea, 0x000001ea, + 0x000001ec, 0x000001ec, 0x000001ee, 0x000001ee, + 0x000001f1, 0x000001f1, 0x000001f4, 0x000001f4, + 0x000001f6, 0x000001f8, 0x000001fa, 0x000001fa, + 0x000001fc, 0x000001fc, 0x000001fe, 0x000001fe, + 0x00000200, 0x00000200, 0x00000202, 0x00000202, + 0x00000204, 0x00000204, 0x00000206, 0x00000206, + 0x00000208, 0x00000208, 0x0000020a, 0x0000020a, + 0x0000020c, 0x0000020c, 0x0000020e, 0x0000020e, + 0x00000210, 0x00000210, 0x00000212, 0x00000212, + 0x00000214, 0x00000214, 0x00000216, 0x00000216, + 0x00000218, 0x00000218, 0x0000021a, 0x0000021a, + 0x0000021c, 0x0000021c, 0x0000021e, 0x0000021e, + 0x00000220, 0x00000220, 0x00000222, 0x00000222, + 0x00000224, 0x00000224, 0x00000226, 0x00000226, + 0x00000228, 0x00000228, 0x0000022a, 0x0000022a, + 0x0000022c, 0x0000022c, 0x0000022e, 0x0000022e, + 0x00000230, 0x00000230, 0x00000232, 0x00000232, + 0x0000023a, 0x0000023b, 0x0000023d, 0x0000023e, + 0x00000241, 0x00000241, 0x00000243, 0x00000246, + 0x00000248, 0x00000248, 0x0000024a, 0x0000024a, + 0x0000024c, 0x0000024c, 0x0000024e, 0x0000024e, + 0x00000370, 0x00000370, 0x00000372, 0x00000372, + 0x00000376, 0x00000376, 0x00000386, 0x00000386, + 0x00000388, 0x0000038a, 0x0000038c, 0x0000038c, + 0x0000038e, 0x0000038f, 0x00000391, 0x000003a1, + 0x000003a3, 0x000003ab, 0x000003cf, 0x000003cf, + 0x000003d2, 0x000003d4, 0x000003d8, 0x000003d8, + 0x000003da, 0x000003da, 0x000003dc, 0x000003dc, + 0x000003de, 0x000003de, 0x000003e0, 0x000003e0, + 0x000003e2, 0x000003e2, 0x000003e4, 0x000003e4, + 0x000003e6, 0x000003e6, 0x000003e8, 0x000003e8, + 0x000003ea, 0x000003ea, 0x000003ec, 0x000003ec, + 0x000003ee, 0x000003ee, 0x000003f4, 0x000003f4, + 0x000003f7, 0x000003f7, 0x000003f9, 0x000003fa, + 0x000003fd, 0x0000042f, 0x00000460, 0x00000460, + 0x00000462, 0x00000462, 0x00000464, 0x00000464, + 0x00000466, 0x00000466, 0x00000468, 0x00000468, + 0x0000046a, 0x0000046a, 0x0000046c, 0x0000046c, + 0x0000046e, 0x0000046e, 0x00000470, 0x00000470, + 0x00000472, 0x00000472, 0x00000474, 0x00000474, + 0x00000476, 0x00000476, 0x00000478, 0x00000478, + 0x0000047a, 0x0000047a, 0x0000047c, 0x0000047c, + 0x0000047e, 0x0000047e, 0x00000480, 0x00000480, + 0x0000048a, 0x0000048a, 0x0000048c, 0x0000048c, + 0x0000048e, 0x0000048e, 0x00000490, 0x00000490, + 0x00000492, 0x00000492, 0x00000494, 0x00000494, + 0x00000496, 0x00000496, 0x00000498, 0x00000498, + 0x0000049a, 0x0000049a, 0x0000049c, 0x0000049c, + 0x0000049e, 0x0000049e, 0x000004a0, 0x000004a0, + 0x000004a2, 0x000004a2, 0x000004a4, 0x000004a4, + 0x000004a6, 0x000004a6, 0x000004a8, 0x000004a8, + 0x000004aa, 0x000004aa, 0x000004ac, 0x000004ac, + 0x000004ae, 0x000004ae, 0x000004b0, 0x000004b0, + 0x000004b2, 0x000004b2, 0x000004b4, 0x000004b4, + 0x000004b6, 0x000004b6, 0x000004b8, 0x000004b8, + 0x000004ba, 0x000004ba, 0x000004bc, 0x000004bc, + 0x000004be, 0x000004be, 0x000004c0, 0x000004c1, + 0x000004c3, 0x000004c3, 0x000004c5, 0x000004c5, + 0x000004c7, 0x000004c7, 0x000004c9, 0x000004c9, + 0x000004cb, 0x000004cb, 0x000004cd, 0x000004cd, + 0x000004d0, 0x000004d0, 0x000004d2, 0x000004d2, + 0x000004d4, 0x000004d4, 0x000004d6, 0x000004d6, + 0x000004d8, 0x000004d8, 0x000004da, 0x000004da, + 0x000004dc, 0x000004dc, 0x000004de, 0x000004de, + 0x000004e0, 0x000004e0, 0x000004e2, 0x000004e2, + 0x000004e4, 0x000004e4, 0x000004e6, 0x000004e6, + 0x000004e8, 0x000004e8, 0x000004ea, 0x000004ea, + 0x000004ec, 0x000004ec, 0x000004ee, 0x000004ee, + 0x000004f0, 0x000004f0, 0x000004f2, 0x000004f2, + 0x000004f4, 0x000004f4, 0x000004f6, 0x000004f6, + 0x000004f8, 0x000004f8, 0x000004fa, 0x000004fa, + 0x000004fc, 0x000004fc, 0x000004fe, 0x000004fe, + 0x00000500, 0x00000500, 0x00000502, 0x00000502, + 0x00000504, 0x00000504, 0x00000506, 0x00000506, + 0x00000508, 0x00000508, 0x0000050a, 0x0000050a, + 0x0000050c, 0x0000050c, 0x0000050e, 0x0000050e, + 0x00000510, 0x00000510, 0x00000512, 0x00000512, + 0x00000514, 0x00000514, 0x00000516, 0x00000516, + 0x00000518, 0x00000518, 0x0000051a, 0x0000051a, + 0x0000051c, 0x0000051c, 0x0000051e, 0x0000051e, + 0x00000520, 0x00000520, 0x00000522, 0x00000522, + 0x00000524, 0x00000524, 0x00000526, 0x00000526, + 0x00000531, 0x00000556, 0x000010a0, 0x000010c5, + 0x00001e00, 0x00001e00, 0x00001e02, 0x00001e02, + 0x00001e04, 0x00001e04, 0x00001e06, 0x00001e06, + 0x00001e08, 0x00001e08, 0x00001e0a, 0x00001e0a, + 0x00001e0c, 0x00001e0c, 0x00001e0e, 0x00001e0e, + 0x00001e10, 0x00001e10, 0x00001e12, 0x00001e12, + 0x00001e14, 0x00001e14, 0x00001e16, 0x00001e16, + 0x00001e18, 0x00001e18, 0x00001e1a, 0x00001e1a, + 0x00001e1c, 0x00001e1c, 0x00001e1e, 0x00001e1e, + 0x00001e20, 0x00001e20, 0x00001e22, 0x00001e22, + 0x00001e24, 0x00001e24, 0x00001e26, 0x00001e26, + 0x00001e28, 0x00001e28, 0x00001e2a, 0x00001e2a, + 0x00001e2c, 0x00001e2c, 0x00001e2e, 0x00001e2e, + 0x00001e30, 0x00001e30, 0x00001e32, 0x00001e32, + 0x00001e34, 0x00001e34, 0x00001e36, 0x00001e36, + 0x00001e38, 0x00001e38, 0x00001e3a, 0x00001e3a, + 0x00001e3c, 0x00001e3c, 0x00001e3e, 0x00001e3e, + 0x00001e40, 0x00001e40, 0x00001e42, 0x00001e42, + 0x00001e44, 0x00001e44, 0x00001e46, 0x00001e46, + 0x00001e48, 0x00001e48, 0x00001e4a, 0x00001e4a, + 0x00001e4c, 0x00001e4c, 0x00001e4e, 0x00001e4e, + 0x00001e50, 0x00001e50, 0x00001e52, 0x00001e52, + 0x00001e54, 0x00001e54, 0x00001e56, 0x00001e56, + 0x00001e58, 0x00001e58, 0x00001e5a, 0x00001e5a, + 0x00001e5c, 0x00001e5c, 0x00001e5e, 0x00001e5e, + 0x00001e60, 0x00001e60, 0x00001e62, 0x00001e62, + 0x00001e64, 0x00001e64, 0x00001e66, 0x00001e66, + 0x00001e68, 0x00001e68, 0x00001e6a, 0x00001e6a, + 0x00001e6c, 0x00001e6c, 0x00001e6e, 0x00001e6e, + 0x00001e70, 0x00001e70, 0x00001e72, 0x00001e72, + 0x00001e74, 0x00001e74, 0x00001e76, 0x00001e76, + 0x00001e78, 0x00001e78, 0x00001e7a, 0x00001e7a, + 0x00001e7c, 0x00001e7c, 0x00001e7e, 0x00001e7e, + 0x00001e80, 0x00001e80, 0x00001e82, 0x00001e82, + 0x00001e84, 0x00001e84, 0x00001e86, 0x00001e86, + 0x00001e88, 0x00001e88, 0x00001e8a, 0x00001e8a, + 0x00001e8c, 0x00001e8c, 0x00001e8e, 0x00001e8e, + 0x00001e90, 0x00001e90, 0x00001e92, 0x00001e92, + 0x00001e94, 0x00001e94, 0x00001e9e, 0x00001e9e, + 0x00001ea0, 0x00001ea0, 0x00001ea2, 0x00001ea2, + 0x00001ea4, 0x00001ea4, 0x00001ea6, 0x00001ea6, + 0x00001ea8, 0x00001ea8, 0x00001eaa, 0x00001eaa, + 0x00001eac, 0x00001eac, 0x00001eae, 0x00001eae, + 0x00001eb0, 0x00001eb0, 0x00001eb2, 0x00001eb2, + 0x00001eb4, 0x00001eb4, 0x00001eb6, 0x00001eb6, + 0x00001eb8, 0x00001eb8, 0x00001eba, 0x00001eba, + 0x00001ebc, 0x00001ebc, 0x00001ebe, 0x00001ebe, + 0x00001ec0, 0x00001ec0, 0x00001ec2, 0x00001ec2, + 0x00001ec4, 0x00001ec4, 0x00001ec6, 0x00001ec6, + 0x00001ec8, 0x00001ec8, 0x00001eca, 0x00001eca, + 0x00001ecc, 0x00001ecc, 0x00001ece, 0x00001ece, + 0x00001ed0, 0x00001ed0, 0x00001ed2, 0x00001ed2, + 0x00001ed4, 0x00001ed4, 0x00001ed6, 0x00001ed6, + 0x00001ed8, 0x00001ed8, 0x00001eda, 0x00001eda, + 0x00001edc, 0x00001edc, 0x00001ede, 0x00001ede, + 0x00001ee0, 0x00001ee0, 0x00001ee2, 0x00001ee2, + 0x00001ee4, 0x00001ee4, 0x00001ee6, 0x00001ee6, + 0x00001ee8, 0x00001ee8, 0x00001eea, 0x00001eea, + 0x00001eec, 0x00001eec, 0x00001eee, 0x00001eee, + 0x00001ef0, 0x00001ef0, 0x00001ef2, 0x00001ef2, + 0x00001ef4, 0x00001ef4, 0x00001ef6, 0x00001ef6, + 0x00001ef8, 0x00001ef8, 0x00001efa, 0x00001efa, + 0x00001efc, 0x00001efc, 0x00001efe, 0x00001efe, + 0x00001f08, 0x00001f0f, 0x00001f18, 0x00001f1d, + 0x00001f28, 0x00001f2f, 0x00001f38, 0x00001f3f, + 0x00001f48, 0x00001f4d, 0x00001f59, 0x00001f59, + 0x00001f5b, 0x00001f5b, 0x00001f5d, 0x00001f5d, + 0x00001f5f, 0x00001f5f, 0x00001f68, 0x00001f6f, + 0x00001fb8, 0x00001fbb, 0x00001fc8, 0x00001fcb, + 0x00001fd8, 0x00001fdb, 0x00001fe8, 0x00001fec, + 0x00001ff8, 0x00001ffb, 0x00002102, 0x00002102, + 0x00002107, 0x00002107, 0x0000210b, 0x0000210d, + 0x00002110, 0x00002112, 0x00002115, 0x00002115, + 0x00002119, 0x0000211d, 0x00002124, 0x00002124, + 0x00002126, 0x00002126, 0x00002128, 0x00002128, + 0x0000212a, 0x0000212d, 0x00002130, 0x00002133, + 0x0000213e, 0x0000213f, 0x00002145, 0x00002145, + 0x00002183, 0x00002183, 0x00002c00, 0x00002c2e, + 0x00002c60, 0x00002c60, 0x00002c62, 0x00002c64, + 0x00002c67, 0x00002c67, 0x00002c69, 0x00002c69, + 0x00002c6b, 0x00002c6b, 0x00002c6d, 0x00002c70, + 0x00002c72, 0x00002c72, 0x00002c75, 0x00002c75, + 0x00002c7e, 0x00002c80, 0x00002c82, 0x00002c82, + 0x00002c84, 0x00002c84, 0x00002c86, 0x00002c86, + 0x00002c88, 0x00002c88, 0x00002c8a, 0x00002c8a, + 0x00002c8c, 0x00002c8c, 0x00002c8e, 0x00002c8e, + 0x00002c90, 0x00002c90, 0x00002c92, 0x00002c92, + 0x00002c94, 0x00002c94, 0x00002c96, 0x00002c96, + 0x00002c98, 0x00002c98, 0x00002c9a, 0x00002c9a, + 0x00002c9c, 0x00002c9c, 0x00002c9e, 0x00002c9e, + 0x00002ca0, 0x00002ca0, 0x00002ca2, 0x00002ca2, + 0x00002ca4, 0x00002ca4, 0x00002ca6, 0x00002ca6, + 0x00002ca8, 0x00002ca8, 0x00002caa, 0x00002caa, + 0x00002cac, 0x00002cac, 0x00002cae, 0x00002cae, + 0x00002cb0, 0x00002cb0, 0x00002cb2, 0x00002cb2, + 0x00002cb4, 0x00002cb4, 0x00002cb6, 0x00002cb6, + 0x00002cb8, 0x00002cb8, 0x00002cba, 0x00002cba, + 0x00002cbc, 0x00002cbc, 0x00002cbe, 0x00002cbe, + 0x00002cc0, 0x00002cc0, 0x00002cc2, 0x00002cc2, + 0x00002cc4, 0x00002cc4, 0x00002cc6, 0x00002cc6, + 0x00002cc8, 0x00002cc8, 0x00002cca, 0x00002cca, + 0x00002ccc, 0x00002ccc, 0x00002cce, 0x00002cce, + 0x00002cd0, 0x00002cd0, 0x00002cd2, 0x00002cd2, + 0x00002cd4, 0x00002cd4, 0x00002cd6, 0x00002cd6, + 0x00002cd8, 0x00002cd8, 0x00002cda, 0x00002cda, + 0x00002cdc, 0x00002cdc, 0x00002cde, 0x00002cde, + 0x00002ce0, 0x00002ce0, 0x00002ce2, 0x00002ce2, + 0x00002ceb, 0x00002ceb, 0x00002ced, 0x00002ced, + 0x0000a640, 0x0000a640, 0x0000a642, 0x0000a642, + 0x0000a644, 0x0000a644, 0x0000a646, 0x0000a646, + 0x0000a648, 0x0000a648, 0x0000a64a, 0x0000a64a, + 0x0000a64c, 0x0000a64c, 0x0000a64e, 0x0000a64e, + 0x0000a650, 0x0000a650, 0x0000a652, 0x0000a652, + 0x0000a654, 0x0000a654, 0x0000a656, 0x0000a656, + 0x0000a658, 0x0000a658, 0x0000a65a, 0x0000a65a, + 0x0000a65c, 0x0000a65c, 0x0000a65e, 0x0000a65e, + 0x0000a660, 0x0000a660, 0x0000a662, 0x0000a662, + 0x0000a664, 0x0000a664, 0x0000a666, 0x0000a666, + 0x0000a668, 0x0000a668, 0x0000a66a, 0x0000a66a, + 0x0000a66c, 0x0000a66c, 0x0000a680, 0x0000a680, + 0x0000a682, 0x0000a682, 0x0000a684, 0x0000a684, + 0x0000a686, 0x0000a686, 0x0000a688, 0x0000a688, + 0x0000a68a, 0x0000a68a, 0x0000a68c, 0x0000a68c, + 0x0000a68e, 0x0000a68e, 0x0000a690, 0x0000a690, + 0x0000a692, 0x0000a692, 0x0000a694, 0x0000a694, + 0x0000a696, 0x0000a696, 0x0000a722, 0x0000a722, + 0x0000a724, 0x0000a724, 0x0000a726, 0x0000a726, + 0x0000a728, 0x0000a728, 0x0000a72a, 0x0000a72a, + 0x0000a72c, 0x0000a72c, 0x0000a72e, 0x0000a72e, + 0x0000a732, 0x0000a732, 0x0000a734, 0x0000a734, + 0x0000a736, 0x0000a736, 0x0000a738, 0x0000a738, + 0x0000a73a, 0x0000a73a, 0x0000a73c, 0x0000a73c, + 0x0000a73e, 0x0000a73e, 0x0000a740, 0x0000a740, + 0x0000a742, 0x0000a742, 0x0000a744, 0x0000a744, + 0x0000a746, 0x0000a746, 0x0000a748, 0x0000a748, + 0x0000a74a, 0x0000a74a, 0x0000a74c, 0x0000a74c, + 0x0000a74e, 0x0000a74e, 0x0000a750, 0x0000a750, + 0x0000a752, 0x0000a752, 0x0000a754, 0x0000a754, + 0x0000a756, 0x0000a756, 0x0000a758, 0x0000a758, + 0x0000a75a, 0x0000a75a, 0x0000a75c, 0x0000a75c, + 0x0000a75e, 0x0000a75e, 0x0000a760, 0x0000a760, + 0x0000a762, 0x0000a762, 0x0000a764, 0x0000a764, + 0x0000a766, 0x0000a766, 0x0000a768, 0x0000a768, + 0x0000a76a, 0x0000a76a, 0x0000a76c, 0x0000a76c, + 0x0000a76e, 0x0000a76e, 0x0000a779, 0x0000a779, + 0x0000a77b, 0x0000a77b, 0x0000a77d, 0x0000a77e, + 0x0000a780, 0x0000a780, 0x0000a782, 0x0000a782, + 0x0000a784, 0x0000a784, 0x0000a786, 0x0000a786, + 0x0000a78b, 0x0000a78b, 0x0000a78d, 0x0000a78d, + 0x0000a790, 0x0000a790, 0x0000a7a0, 0x0000a7a0, + 0x0000a7a2, 0x0000a7a2, 0x0000a7a4, 0x0000a7a4, + 0x0000a7a6, 0x0000a7a6, 0x0000a7a8, 0x0000a7a8, + 0x0000ff21, 0x0000ff3a, 0x00010400, 0x00010427, + 0x0001d400, 0x0001d419, 0x0001d434, 0x0001d44d, + 0x0001d468, 0x0001d481, 0x0001d49c, 0x0001d49c, + 0x0001d49e, 0x0001d49f, 0x0001d4a2, 0x0001d4a2, + 0x0001d4a5, 0x0001d4a6, 0x0001d4a9, 0x0001d4ac, + 0x0001d4ae, 0x0001d4b5, 0x0001d4d0, 0x0001d4e9, + 0x0001d504, 0x0001d505, 0x0001d507, 0x0001d50a, + 0x0001d50d, 0x0001d514, 0x0001d516, 0x0001d51c, + 0x0001d538, 0x0001d539, 0x0001d53b, 0x0001d53e, + 0x0001d540, 0x0001d544, 0x0001d546, 0x0001d546, + 0x0001d54a, 0x0001d550, 0x0001d56c, 0x0001d585, + 0x0001d5a0, 0x0001d5b9, 0x0001d5d4, 0x0001d5ed, + 0x0001d608, 0x0001d621, 0x0001d63c, 0x0001d655, + 0x0001d670, 0x0001d689, 0x0001d6a8, 0x0001d6c0, + 0x0001d6e2, 0x0001d6fa, 0x0001d71c, 0x0001d734, + 0x0001d756, 0x0001d76e, 0x0001d790, 0x0001d7a8, + 0x0001d7ca, 0x0001d7ca, 0x00000061, 0x0000007a, + 0x000000aa, 0x000000aa, 0x000000b5, 0x000000b5, + 0x000000ba, 0x000000ba, 0x000000df, 0x000000f6, + 0x000000f8, 0x000000ff, 0x00000101, 0x00000101, + 0x00000103, 0x00000103, 0x00000105, 0x00000105, + 0x00000107, 0x00000107, 0x00000109, 0x00000109, + 0x0000010b, 0x0000010b, 0x0000010d, 0x0000010d, + 0x0000010f, 0x0000010f, 0x00000111, 0x00000111, + 0x00000113, 0x00000113, 0x00000115, 0x00000115, + 0x00000117, 0x00000117, 0x00000119, 0x00000119, + 0x0000011b, 0x0000011b, 0x0000011d, 0x0000011d, + 0x0000011f, 0x0000011f, 0x00000121, 0x00000121, + 0x00000123, 0x00000123, 0x00000125, 0x00000125, + 0x00000127, 0x00000127, 0x00000129, 0x00000129, + 0x0000012b, 0x0000012b, 0x0000012d, 0x0000012d, + 0x0000012f, 0x0000012f, 0x00000131, 0x00000131, + 0x00000133, 0x00000133, 0x00000135, 0x00000135, + 0x00000137, 0x00000138, 0x0000013a, 0x0000013a, + 0x0000013c, 0x0000013c, 0x0000013e, 0x0000013e, + 0x00000140, 0x00000140, 0x00000142, 0x00000142, + 0x00000144, 0x00000144, 0x00000146, 0x00000146, + 0x00000148, 0x00000149, 0x0000014b, 0x0000014b, + 0x0000014d, 0x0000014d, 0x0000014f, 0x0000014f, + 0x00000151, 0x00000151, 0x00000153, 0x00000153, + 0x00000155, 0x00000155, 0x00000157, 0x00000157, + 0x00000159, 0x00000159, 0x0000015b, 0x0000015b, + 0x0000015d, 0x0000015d, 0x0000015f, 0x0000015f, + 0x00000161, 0x00000161, 0x00000163, 0x00000163, + 0x00000165, 0x00000165, 0x00000167, 0x00000167, + 0x00000169, 0x00000169, 0x0000016b, 0x0000016b, + 0x0000016d, 0x0000016d, 0x0000016f, 0x0000016f, + 0x00000171, 0x00000171, 0x00000173, 0x00000173, + 0x00000175, 0x00000175, 0x00000177, 0x00000177, + 0x0000017a, 0x0000017a, 0x0000017c, 0x0000017c, + 0x0000017e, 0x00000180, 0x00000183, 0x00000183, + 0x00000185, 0x00000185, 0x00000188, 0x00000188, + 0x0000018c, 0x0000018d, 0x00000192, 0x00000192, + 0x00000195, 0x00000195, 0x00000199, 0x0000019b, + 0x0000019e, 0x0000019e, 0x000001a1, 0x000001a1, + 0x000001a3, 0x000001a3, 0x000001a5, 0x000001a5, + 0x000001a8, 0x000001a8, 0x000001aa, 0x000001ab, + 0x000001ad, 0x000001ad, 0x000001b0, 0x000001b0, + 0x000001b4, 0x000001b4, 0x000001b6, 0x000001b6, + 0x000001b9, 0x000001ba, 0x000001bd, 0x000001bf, + 0x000001c6, 0x000001c6, 0x000001c9, 0x000001c9, + 0x000001cc, 0x000001cc, 0x000001ce, 0x000001ce, + 0x000001d0, 0x000001d0, 0x000001d2, 0x000001d2, + 0x000001d4, 0x000001d4, 0x000001d6, 0x000001d6, + 0x000001d8, 0x000001d8, 0x000001da, 0x000001da, + 0x000001dc, 0x000001dd, 0x000001df, 0x000001df, + 0x000001e1, 0x000001e1, 0x000001e3, 0x000001e3, + 0x000001e5, 0x000001e5, 0x000001e7, 0x000001e7, + 0x000001e9, 0x000001e9, 0x000001eb, 0x000001eb, + 0x000001ed, 0x000001ed, 0x000001ef, 0x000001f0, + 0x000001f3, 0x000001f3, 0x000001f5, 0x000001f5, + 0x000001f9, 0x000001f9, 0x000001fb, 0x000001fb, + 0x000001fd, 0x000001fd, 0x000001ff, 0x000001ff, + 0x00000201, 0x00000201, 0x00000203, 0x00000203, + 0x00000205, 0x00000205, 0x00000207, 0x00000207, + 0x00000209, 0x00000209, 0x0000020b, 0x0000020b, + 0x0000020d, 0x0000020d, 0x0000020f, 0x0000020f, + 0x00000211, 0x00000211, 0x00000213, 0x00000213, + 0x00000215, 0x00000215, 0x00000217, 0x00000217, + 0x00000219, 0x00000219, 0x0000021b, 0x0000021b, + 0x0000021d, 0x0000021d, 0x0000021f, 0x0000021f, + 0x00000221, 0x00000221, 0x00000223, 0x00000223, + 0x00000225, 0x00000225, 0x00000227, 0x00000227, + 0x00000229, 0x00000229, 0x0000022b, 0x0000022b, + 0x0000022d, 0x0000022d, 0x0000022f, 0x0000022f, + 0x00000231, 0x00000231, 0x00000233, 0x00000239, + 0x0000023c, 0x0000023c, 0x0000023f, 0x00000240, + 0x00000242, 0x00000242, 0x00000247, 0x00000247, + 0x00000249, 0x00000249, 0x0000024b, 0x0000024b, + 0x0000024d, 0x0000024d, 0x0000024f, 0x00000293, + 0x00000295, 0x000002af, 0x00000371, 0x00000371, + 0x00000373, 0x00000373, 0x00000377, 0x00000377, + 0x0000037b, 0x0000037d, 0x00000390, 0x00000390, + 0x000003ac, 0x000003ce, 0x000003d0, 0x000003d1, + 0x000003d5, 0x000003d7, 0x000003d9, 0x000003d9, + 0x000003db, 0x000003db, 0x000003dd, 0x000003dd, + 0x000003df, 0x000003df, 0x000003e1, 0x000003e1, + 0x000003e3, 0x000003e3, 0x000003e5, 0x000003e5, + 0x000003e7, 0x000003e7, 0x000003e9, 0x000003e9, + 0x000003eb, 0x000003eb, 0x000003ed, 0x000003ed, + 0x000003ef, 0x000003f3, 0x000003f5, 0x000003f5, + 0x000003f8, 0x000003f8, 0x000003fb, 0x000003fc, + 0x00000430, 0x0000045f, 0x00000461, 0x00000461, + 0x00000463, 0x00000463, 0x00000465, 0x00000465, + 0x00000467, 0x00000467, 0x00000469, 0x00000469, + 0x0000046b, 0x0000046b, 0x0000046d, 0x0000046d, + 0x0000046f, 0x0000046f, 0x00000471, 0x00000471, + 0x00000473, 0x00000473, 0x00000475, 0x00000475, + 0x00000477, 0x00000477, 0x00000479, 0x00000479, + 0x0000047b, 0x0000047b, 0x0000047d, 0x0000047d, + 0x0000047f, 0x0000047f, 0x00000481, 0x00000481, + 0x0000048b, 0x0000048b, 0x0000048d, 0x0000048d, + 0x0000048f, 0x0000048f, 0x00000491, 0x00000491, + 0x00000493, 0x00000493, 0x00000495, 0x00000495, + 0x00000497, 0x00000497, 0x00000499, 0x00000499, + 0x0000049b, 0x0000049b, 0x0000049d, 0x0000049d, + 0x0000049f, 0x0000049f, 0x000004a1, 0x000004a1, + 0x000004a3, 0x000004a3, 0x000004a5, 0x000004a5, + 0x000004a7, 0x000004a7, 0x000004a9, 0x000004a9, + 0x000004ab, 0x000004ab, 0x000004ad, 0x000004ad, + 0x000004af, 0x000004af, 0x000004b1, 0x000004b1, + 0x000004b3, 0x000004b3, 0x000004b5, 0x000004b5, + 0x000004b7, 0x000004b7, 0x000004b9, 0x000004b9, + 0x000004bb, 0x000004bb, 0x000004bd, 0x000004bd, + 0x000004bf, 0x000004bf, 0x000004c2, 0x000004c2, + 0x000004c4, 0x000004c4, 0x000004c6, 0x000004c6, + 0x000004c8, 0x000004c8, 0x000004ca, 0x000004ca, + 0x000004cc, 0x000004cc, 0x000004ce, 0x000004cf, + 0x000004d1, 0x000004d1, 0x000004d3, 0x000004d3, + 0x000004d5, 0x000004d5, 0x000004d7, 0x000004d7, + 0x000004d9, 0x000004d9, 0x000004db, 0x000004db, + 0x000004dd, 0x000004dd, 0x000004df, 0x000004df, + 0x000004e1, 0x000004e1, 0x000004e3, 0x000004e3, + 0x000004e5, 0x000004e5, 0x000004e7, 0x000004e7, + 0x000004e9, 0x000004e9, 0x000004eb, 0x000004eb, + 0x000004ed, 0x000004ed, 0x000004ef, 0x000004ef, + 0x000004f1, 0x000004f1, 0x000004f3, 0x000004f3, + 0x000004f5, 0x000004f5, 0x000004f7, 0x000004f7, + 0x000004f9, 0x000004f9, 0x000004fb, 0x000004fb, + 0x000004fd, 0x000004fd, 0x000004ff, 0x000004ff, + 0x00000501, 0x00000501, 0x00000503, 0x00000503, + 0x00000505, 0x00000505, 0x00000507, 0x00000507, + 0x00000509, 0x00000509, 0x0000050b, 0x0000050b, + 0x0000050d, 0x0000050d, 0x0000050f, 0x0000050f, + 0x00000511, 0x00000511, 0x00000513, 0x00000513, + 0x00000515, 0x00000515, 0x00000517, 0x00000517, + 0x00000519, 0x00000519, 0x0000051b, 0x0000051b, + 0x0000051d, 0x0000051d, 0x0000051f, 0x0000051f, + 0x00000521, 0x00000521, 0x00000523, 0x00000523, + 0x00000525, 0x00000525, 0x00000527, 0x00000527, + 0x00000561, 0x00000587, 0x00001d00, 0x00001d2b, + 0x00001d62, 0x00001d77, 0x00001d79, 0x00001d9a, + 0x00001e01, 0x00001e01, 0x00001e03, 0x00001e03, + 0x00001e05, 0x00001e05, 0x00001e07, 0x00001e07, + 0x00001e09, 0x00001e09, 0x00001e0b, 0x00001e0b, + 0x00001e0d, 0x00001e0d, 0x00001e0f, 0x00001e0f, + 0x00001e11, 0x00001e11, 0x00001e13, 0x00001e13, + 0x00001e15, 0x00001e15, 0x00001e17, 0x00001e17, + 0x00001e19, 0x00001e19, 0x00001e1b, 0x00001e1b, + 0x00001e1d, 0x00001e1d, 0x00001e1f, 0x00001e1f, + 0x00001e21, 0x00001e21, 0x00001e23, 0x00001e23, + 0x00001e25, 0x00001e25, 0x00001e27, 0x00001e27, + 0x00001e29, 0x00001e29, 0x00001e2b, 0x00001e2b, + 0x00001e2d, 0x00001e2d, 0x00001e2f, 0x00001e2f, + 0x00001e31, 0x00001e31, 0x00001e33, 0x00001e33, + 0x00001e35, 0x00001e35, 0x00001e37, 0x00001e37, + 0x00001e39, 0x00001e39, 0x00001e3b, 0x00001e3b, + 0x00001e3d, 0x00001e3d, 0x00001e3f, 0x00001e3f, + 0x00001e41, 0x00001e41, 0x00001e43, 0x00001e43, + 0x00001e45, 0x00001e45, 0x00001e47, 0x00001e47, + 0x00001e49, 0x00001e49, 0x00001e4b, 0x00001e4b, + 0x00001e4d, 0x00001e4d, 0x00001e4f, 0x00001e4f, + 0x00001e51, 0x00001e51, 0x00001e53, 0x00001e53, + 0x00001e55, 0x00001e55, 0x00001e57, 0x00001e57, + 0x00001e59, 0x00001e59, 0x00001e5b, 0x00001e5b, + 0x00001e5d, 0x00001e5d, 0x00001e5f, 0x00001e5f, + 0x00001e61, 0x00001e61, 0x00001e63, 0x00001e63, + 0x00001e65, 0x00001e65, 0x00001e67, 0x00001e67, + 0x00001e69, 0x00001e69, 0x00001e6b, 0x00001e6b, + 0x00001e6d, 0x00001e6d, 0x00001e6f, 0x00001e6f, + 0x00001e71, 0x00001e71, 0x00001e73, 0x00001e73, + 0x00001e75, 0x00001e75, 0x00001e77, 0x00001e77, + 0x00001e79, 0x00001e79, 0x00001e7b, 0x00001e7b, + 0x00001e7d, 0x00001e7d, 0x00001e7f, 0x00001e7f, + 0x00001e81, 0x00001e81, 0x00001e83, 0x00001e83, + 0x00001e85, 0x00001e85, 0x00001e87, 0x00001e87, + 0x00001e89, 0x00001e89, 0x00001e8b, 0x00001e8b, + 0x00001e8d, 0x00001e8d, 0x00001e8f, 0x00001e8f, + 0x00001e91, 0x00001e91, 0x00001e93, 0x00001e93, + 0x00001e95, 0x00001e9d, 0x00001e9f, 0x00001e9f, + 0x00001ea1, 0x00001ea1, 0x00001ea3, 0x00001ea3, + 0x00001ea5, 0x00001ea5, 0x00001ea7, 0x00001ea7, + 0x00001ea9, 0x00001ea9, 0x00001eab, 0x00001eab, + 0x00001ead, 0x00001ead, 0x00001eaf, 0x00001eaf, + 0x00001eb1, 0x00001eb1, 0x00001eb3, 0x00001eb3, + 0x00001eb5, 0x00001eb5, 0x00001eb7, 0x00001eb7, + 0x00001eb9, 0x00001eb9, 0x00001ebb, 0x00001ebb, + 0x00001ebd, 0x00001ebd, 0x00001ebf, 0x00001ebf, + 0x00001ec1, 0x00001ec1, 0x00001ec3, 0x00001ec3, + 0x00001ec5, 0x00001ec5, 0x00001ec7, 0x00001ec7, + 0x00001ec9, 0x00001ec9, 0x00001ecb, 0x00001ecb, + 0x00001ecd, 0x00001ecd, 0x00001ecf, 0x00001ecf, + 0x00001ed1, 0x00001ed1, 0x00001ed3, 0x00001ed3, + 0x00001ed5, 0x00001ed5, 0x00001ed7, 0x00001ed7, + 0x00001ed9, 0x00001ed9, 0x00001edb, 0x00001edb, + 0x00001edd, 0x00001edd, 0x00001edf, 0x00001edf, + 0x00001ee1, 0x00001ee1, 0x00001ee3, 0x00001ee3, + 0x00001ee5, 0x00001ee5, 0x00001ee7, 0x00001ee7, + 0x00001ee9, 0x00001ee9, 0x00001eeb, 0x00001eeb, + 0x00001eed, 0x00001eed, 0x00001eef, 0x00001eef, + 0x00001ef1, 0x00001ef1, 0x00001ef3, 0x00001ef3, + 0x00001ef5, 0x00001ef5, 0x00001ef7, 0x00001ef7, + 0x00001ef9, 0x00001ef9, 0x00001efb, 0x00001efb, + 0x00001efd, 0x00001efd, 0x00001eff, 0x00001f07, + 0x00001f10, 0x00001f15, 0x00001f20, 0x00001f27, + 0x00001f30, 0x00001f37, 0x00001f40, 0x00001f45, + 0x00001f50, 0x00001f57, 0x00001f60, 0x00001f67, + 0x00001f70, 0x00001f7d, 0x00001f80, 0x00001f87, + 0x00001f90, 0x00001f97, 0x00001fa0, 0x00001fa7, + 0x00001fb0, 0x00001fb4, 0x00001fb6, 0x00001fb7, + 0x00001fbe, 0x00001fbe, 0x00001fc2, 0x00001fc4, + 0x00001fc6, 0x00001fc7, 0x00001fd0, 0x00001fd3, + 0x00001fd6, 0x00001fd7, 0x00001fe0, 0x00001fe7, + 0x00001ff2, 0x00001ff4, 0x00001ff6, 0x00001ff7, + 0x0000210a, 0x0000210a, 0x0000210e, 0x0000210f, + 0x00002113, 0x00002113, 0x0000212f, 0x0000212f, + 0x00002134, 0x00002134, 0x00002139, 0x00002139, + 0x0000213c, 0x0000213d, 0x00002146, 0x00002149, + 0x0000214e, 0x0000214e, 0x00002184, 0x00002184, + 0x00002c30, 0x00002c5e, 0x00002c61, 0x00002c61, + 0x00002c65, 0x00002c66, 0x00002c68, 0x00002c68, + 0x00002c6a, 0x00002c6a, 0x00002c6c, 0x00002c6c, + 0x00002c71, 0x00002c71, 0x00002c73, 0x00002c74, + 0x00002c76, 0x00002c7c, 0x00002c81, 0x00002c81, + 0x00002c83, 0x00002c83, 0x00002c85, 0x00002c85, + 0x00002c87, 0x00002c87, 0x00002c89, 0x00002c89, + 0x00002c8b, 0x00002c8b, 0x00002c8d, 0x00002c8d, + 0x00002c8f, 0x00002c8f, 0x00002c91, 0x00002c91, + 0x00002c93, 0x00002c93, 0x00002c95, 0x00002c95, + 0x00002c97, 0x00002c97, 0x00002c99, 0x00002c99, + 0x00002c9b, 0x00002c9b, 0x00002c9d, 0x00002c9d, + 0x00002c9f, 0x00002c9f, 0x00002ca1, 0x00002ca1, + 0x00002ca3, 0x00002ca3, 0x00002ca5, 0x00002ca5, + 0x00002ca7, 0x00002ca7, 0x00002ca9, 0x00002ca9, + 0x00002cab, 0x00002cab, 0x00002cad, 0x00002cad, + 0x00002caf, 0x00002caf, 0x00002cb1, 0x00002cb1, + 0x00002cb3, 0x00002cb3, 0x00002cb5, 0x00002cb5, + 0x00002cb7, 0x00002cb7, 0x00002cb9, 0x00002cb9, + 0x00002cbb, 0x00002cbb, 0x00002cbd, 0x00002cbd, + 0x00002cbf, 0x00002cbf, 0x00002cc1, 0x00002cc1, + 0x00002cc3, 0x00002cc3, 0x00002cc5, 0x00002cc5, + 0x00002cc7, 0x00002cc7, 0x00002cc9, 0x00002cc9, + 0x00002ccb, 0x00002ccb, 0x00002ccd, 0x00002ccd, + 0x00002ccf, 0x00002ccf, 0x00002cd1, 0x00002cd1, + 0x00002cd3, 0x00002cd3, 0x00002cd5, 0x00002cd5, + 0x00002cd7, 0x00002cd7, 0x00002cd9, 0x00002cd9, + 0x00002cdb, 0x00002cdb, 0x00002cdd, 0x00002cdd, + 0x00002cdf, 0x00002cdf, 0x00002ce1, 0x00002ce1, + 0x00002ce3, 0x00002ce4, 0x00002cec, 0x00002cec, + 0x00002cee, 0x00002cee, 0x00002d00, 0x00002d25, + 0x0000a641, 0x0000a641, 0x0000a643, 0x0000a643, + 0x0000a645, 0x0000a645, 0x0000a647, 0x0000a647, + 0x0000a649, 0x0000a649, 0x0000a64b, 0x0000a64b, + 0x0000a64d, 0x0000a64d, 0x0000a64f, 0x0000a64f, + 0x0000a651, 0x0000a651, 0x0000a653, 0x0000a653, + 0x0000a655, 0x0000a655, 0x0000a657, 0x0000a657, + 0x0000a659, 0x0000a659, 0x0000a65b, 0x0000a65b, + 0x0000a65d, 0x0000a65d, 0x0000a65f, 0x0000a65f, + 0x0000a661, 0x0000a661, 0x0000a663, 0x0000a663, + 0x0000a665, 0x0000a665, 0x0000a667, 0x0000a667, + 0x0000a669, 0x0000a669, 0x0000a66b, 0x0000a66b, + 0x0000a66d, 0x0000a66d, 0x0000a681, 0x0000a681, + 0x0000a683, 0x0000a683, 0x0000a685, 0x0000a685, + 0x0000a687, 0x0000a687, 0x0000a689, 0x0000a689, + 0x0000a68b, 0x0000a68b, 0x0000a68d, 0x0000a68d, + 0x0000a68f, 0x0000a68f, 0x0000a691, 0x0000a691, + 0x0000a693, 0x0000a693, 0x0000a695, 0x0000a695, + 0x0000a697, 0x0000a697, 0x0000a723, 0x0000a723, + 0x0000a725, 0x0000a725, 0x0000a727, 0x0000a727, + 0x0000a729, 0x0000a729, 0x0000a72b, 0x0000a72b, + 0x0000a72d, 0x0000a72d, 0x0000a72f, 0x0000a731, + 0x0000a733, 0x0000a733, 0x0000a735, 0x0000a735, + 0x0000a737, 0x0000a737, 0x0000a739, 0x0000a739, + 0x0000a73b, 0x0000a73b, 0x0000a73d, 0x0000a73d, + 0x0000a73f, 0x0000a73f, 0x0000a741, 0x0000a741, + 0x0000a743, 0x0000a743, 0x0000a745, 0x0000a745, + 0x0000a747, 0x0000a747, 0x0000a749, 0x0000a749, + 0x0000a74b, 0x0000a74b, 0x0000a74d, 0x0000a74d, + 0x0000a74f, 0x0000a74f, 0x0000a751, 0x0000a751, + 0x0000a753, 0x0000a753, 0x0000a755, 0x0000a755, + 0x0000a757, 0x0000a757, 0x0000a759, 0x0000a759, + 0x0000a75b, 0x0000a75b, 0x0000a75d, 0x0000a75d, + 0x0000a75f, 0x0000a75f, 0x0000a761, 0x0000a761, + 0x0000a763, 0x0000a763, 0x0000a765, 0x0000a765, + 0x0000a767, 0x0000a767, 0x0000a769, 0x0000a769, + 0x0000a76b, 0x0000a76b, 0x0000a76d, 0x0000a76d, + 0x0000a76f, 0x0000a76f, 0x0000a771, 0x0000a778, + 0x0000a77a, 0x0000a77a, 0x0000a77c, 0x0000a77c, + 0x0000a77f, 0x0000a77f, 0x0000a781, 0x0000a781, + 0x0000a783, 0x0000a783, 0x0000a785, 0x0000a785, + 0x0000a787, 0x0000a787, 0x0000a78c, 0x0000a78c, + 0x0000a78e, 0x0000a78e, 0x0000a791, 0x0000a791, + 0x0000a7a1, 0x0000a7a1, 0x0000a7a3, 0x0000a7a3, + 0x0000a7a5, 0x0000a7a5, 0x0000a7a7, 0x0000a7a7, + 0x0000a7a9, 0x0000a7a9, 0x0000a7fa, 0x0000a7fa, + 0x0000fb00, 0x0000fb06, 0x0000fb13, 0x0000fb17, + 0x0000ff41, 0x0000ff5a, 0x00010428, 0x0001044f, + 0x0001d41a, 0x0001d433, 0x0001d44e, 0x0001d454, + 0x0001d456, 0x0001d467, 0x0001d482, 0x0001d49b, + 0x0001d4b6, 0x0001d4b9, 0x0001d4bb, 0x0001d4bb, + 0x0001d4bd, 0x0001d4c3, 0x0001d4c5, 0x0001d4cf, + 0x0001d4ea, 0x0001d503, 0x0001d51e, 0x0001d537, + 0x0001d552, 0x0001d56b, 0x0001d586, 0x0001d59f, + 0x0001d5ba, 0x0001d5d3, 0x0001d5ee, 0x0001d607, + 0x0001d622, 0x0001d63b, 0x0001d656, 0x0001d66f, + 0x0001d68a, 0x0001d6a5, 0x0001d6c2, 0x0001d6da, + 0x0001d6dc, 0x0001d6e1, 0x0001d6fc, 0x0001d714, + 0x0001d716, 0x0001d71b, 0x0001d736, 0x0001d74e, + 0x0001d750, 0x0001d755, 0x0001d770, 0x0001d788, + 0x0001d78a, 0x0001d78f, 0x0001d7aa, 0x0001d7c2, + 0x0001d7c4, 0x0001d7c9, 0x0001d7cb, 0x0001d7cb, + 0x000001c5, 0x000001c5, 0x000001c8, 0x000001c8, + 0x000001cb, 0x000001cb, 0x000001f2, 0x000001f2, + 0x00001f88, 0x00001f8f, 0x00001f98, 0x00001f9f, + 0x00001fa8, 0x00001faf, 0x00001fbc, 0x00001fbc, + 0x00001fcc, 0x00001fcc, 0x00001ffc, 0x00001ffc, + 0x000002b0, 0x000002c1, 0x000002c6, 0x000002d1, + 0x000002e0, 0x000002e4, 0x000002ec, 0x000002ec, + 0x000002ee, 0x000002ee, 0x00000374, 0x00000374, + 0x0000037a, 0x0000037a, 0x00000559, 0x00000559, + 0x00000640, 0x00000640, 0x000006e5, 0x000006e6, + 0x000007f4, 0x000007f5, 0x000007fa, 0x000007fa, + 0x0000081a, 0x0000081a, 0x00000824, 0x00000824, + 0x00000828, 0x00000828, 0x00000971, 0x00000971, + 0x00000e46, 0x00000e46, 0x00000ec6, 0x00000ec6, + 0x000010fc, 0x000010fc, 0x000017d7, 0x000017d7, + 0x00001843, 0x00001843, 0x00001aa7, 0x00001aa7, + 0x00001c78, 0x00001c7d, 0x00001d2c, 0x00001d61, + 0x00001d78, 0x00001d78, 0x00001d9b, 0x00001dbf, + 0x00002071, 0x00002071, 0x0000207f, 0x0000207f, + 0x00002090, 0x0000209c, 0x00002c7d, 0x00002c7d, + 0x00002d6f, 0x00002d6f, 0x00002e2f, 0x00002e2f, + 0x00003005, 0x00003005, 0x00003031, 0x00003035, + 0x0000303b, 0x0000303b, 0x0000309d, 0x0000309e, + 0x000030fc, 0x000030fe, 0x0000a015, 0x0000a015, + 0x0000a4f8, 0x0000a4fd, 0x0000a60c, 0x0000a60c, + 0x0000a67f, 0x0000a67f, 0x0000a717, 0x0000a71f, + 0x0000a770, 0x0000a770, 0x0000a788, 0x0000a788, + 0x0000a9cf, 0x0000a9cf, 0x0000aa70, 0x0000aa70, + 0x0000aadd, 0x0000aadd, 0x0000ff70, 0x0000ff70, + 0x0000ff9e, 0x0000ff9f, 0x000001bb, 0x000001bb, + 0x000001c0, 0x000001c3, 0x00000294, 0x00000294, + 0x000005d0, 0x000005ea, 0x000005f0, 0x000005f2, + 0x00000620, 0x0000063f, 0x00000641, 0x0000064a, + 0x0000066e, 0x0000066f, 0x00000671, 0x000006d3, + 0x000006d5, 0x000006d5, 0x000006ee, 0x000006ef, + 0x000006fa, 0x000006fc, 0x000006ff, 0x000006ff, + 0x00000710, 0x00000710, 0x00000712, 0x0000072f, + 0x0000074d, 0x000007a5, 0x000007b1, 0x000007b1, + 0x000007ca, 0x000007ea, 0x00000800, 0x00000815, + 0x00000840, 0x00000858, 0x00000904, 0x00000939, + 0x0000093d, 0x0000093d, 0x00000950, 0x00000950, + 0x00000958, 0x00000961, 0x00000972, 0x00000977, + 0x00000979, 0x0000097f, 0x00000985, 0x0000098c, + 0x0000098f, 0x00000990, 0x00000993, 0x000009a8, + 0x000009aa, 0x000009b0, 0x000009b2, 0x000009b2, + 0x000009b6, 0x000009b9, 0x000009bd, 0x000009bd, + 0x000009ce, 0x000009ce, 0x000009dc, 0x000009dd, + 0x000009df, 0x000009e1, 0x000009f0, 0x000009f1, + 0x00000a05, 0x00000a0a, 0x00000a0f, 0x00000a10, + 0x00000a13, 0x00000a28, 0x00000a2a, 0x00000a30, + 0x00000a32, 0x00000a33, 0x00000a35, 0x00000a36, + 0x00000a38, 0x00000a39, 0x00000a59, 0x00000a5c, + 0x00000a5e, 0x00000a5e, 0x00000a72, 0x00000a74, + 0x00000a85, 0x00000a8d, 0x00000a8f, 0x00000a91, + 0x00000a93, 0x00000aa8, 0x00000aaa, 0x00000ab0, + 0x00000ab2, 0x00000ab3, 0x00000ab5, 0x00000ab9, + 0x00000abd, 0x00000abd, 0x00000ad0, 0x00000ad0, + 0x00000ae0, 0x00000ae1, 0x00000b05, 0x00000b0c, + 0x00000b0f, 0x00000b10, 0x00000b13, 0x00000b28, + 0x00000b2a, 0x00000b30, 0x00000b32, 0x00000b33, + 0x00000b35, 0x00000b39, 0x00000b3d, 0x00000b3d, + 0x00000b5c, 0x00000b5d, 0x00000b5f, 0x00000b61, + 0x00000b71, 0x00000b71, 0x00000b83, 0x00000b83, + 0x00000b85, 0x00000b8a, 0x00000b8e, 0x00000b90, + 0x00000b92, 0x00000b95, 0x00000b99, 0x00000b9a, + 0x00000b9c, 0x00000b9c, 0x00000b9e, 0x00000b9f, + 0x00000ba3, 0x00000ba4, 0x00000ba8, 0x00000baa, + 0x00000bae, 0x00000bb9, 0x00000bd0, 0x00000bd0, + 0x00000c05, 0x00000c0c, 0x00000c0e, 0x00000c10, + 0x00000c12, 0x00000c28, 0x00000c2a, 0x00000c33, + 0x00000c35, 0x00000c39, 0x00000c3d, 0x00000c3d, + 0x00000c58, 0x00000c59, 0x00000c60, 0x00000c61, + 0x00000c85, 0x00000c8c, 0x00000c8e, 0x00000c90, + 0x00000c92, 0x00000ca8, 0x00000caa, 0x00000cb3, + 0x00000cb5, 0x00000cb9, 0x00000cbd, 0x00000cbd, + 0x00000cde, 0x00000cde, 0x00000ce0, 0x00000ce1, + 0x00000cf1, 0x00000cf2, 0x00000d05, 0x00000d0c, + 0x00000d0e, 0x00000d10, 0x00000d12, 0x00000d3a, + 0x00000d3d, 0x00000d3d, 0x00000d4e, 0x00000d4e, + 0x00000d60, 0x00000d61, 0x00000d7a, 0x00000d7f, + 0x00000d85, 0x00000d96, 0x00000d9a, 0x00000db1, + 0x00000db3, 0x00000dbb, 0x00000dbd, 0x00000dbd, + 0x00000dc0, 0x00000dc6, 0x00000e01, 0x00000e30, + 0x00000e32, 0x00000e33, 0x00000e40, 0x00000e45, + 0x00000e81, 0x00000e82, 0x00000e84, 0x00000e84, + 0x00000e87, 0x00000e88, 0x00000e8a, 0x00000e8a, + 0x00000e8d, 0x00000e8d, 0x00000e94, 0x00000e97, + 0x00000e99, 0x00000e9f, 0x00000ea1, 0x00000ea3, + 0x00000ea5, 0x00000ea5, 0x00000ea7, 0x00000ea7, + 0x00000eaa, 0x00000eab, 0x00000ead, 0x00000eb0, + 0x00000eb2, 0x00000eb3, 0x00000ebd, 0x00000ebd, + 0x00000ec0, 0x00000ec4, 0x00000edc, 0x00000edd, + 0x00000f00, 0x00000f00, 0x00000f40, 0x00000f47, + 0x00000f49, 0x00000f6c, 0x00000f88, 0x00000f8c, + 0x00001000, 0x0000102a, 0x0000103f, 0x0000103f, + 0x00001050, 0x00001055, 0x0000105a, 0x0000105d, + 0x00001061, 0x00001061, 0x00001065, 0x00001066, + 0x0000106e, 0x00001070, 0x00001075, 0x00001081, + 0x0000108e, 0x0000108e, 0x000010d0, 0x000010fa, + 0x00001100, 0x00001248, 0x0000124a, 0x0000124d, + 0x00001250, 0x00001256, 0x00001258, 0x00001258, + 0x0000125a, 0x0000125d, 0x00001260, 0x00001288, + 0x0000128a, 0x0000128d, 0x00001290, 0x000012b0, + 0x000012b2, 0x000012b5, 0x000012b8, 0x000012be, + 0x000012c0, 0x000012c0, 0x000012c2, 0x000012c5, + 0x000012c8, 0x000012d6, 0x000012d8, 0x00001310, + 0x00001312, 0x00001315, 0x00001318, 0x0000135a, + 0x00001380, 0x0000138f, 0x000013a0, 0x000013f4, + 0x00001401, 0x0000166c, 0x0000166f, 0x0000167f, + 0x00001681, 0x0000169a, 0x000016a0, 0x000016ea, + 0x00001700, 0x0000170c, 0x0000170e, 0x00001711, + 0x00001720, 0x00001731, 0x00001740, 0x00001751, + 0x00001760, 0x0000176c, 0x0000176e, 0x00001770, + 0x00001780, 0x000017b3, 0x000017dc, 0x000017dc, + 0x00001820, 0x00001842, 0x00001844, 0x00001877, + 0x00001880, 0x000018a8, 0x000018aa, 0x000018aa, + 0x000018b0, 0x000018f5, 0x00001900, 0x0000191c, + 0x00001950, 0x0000196d, 0x00001970, 0x00001974, + 0x00001980, 0x000019ab, 0x000019c1, 0x000019c7, + 0x00001a00, 0x00001a16, 0x00001a20, 0x00001a54, + 0x00001b05, 0x00001b33, 0x00001b45, 0x00001b4b, + 0x00001b83, 0x00001ba0, 0x00001bae, 0x00001baf, + 0x00001bc0, 0x00001be5, 0x00001c00, 0x00001c23, + 0x00001c4d, 0x00001c4f, 0x00001c5a, 0x00001c77, + 0x00001ce9, 0x00001cec, 0x00001cee, 0x00001cf1, + 0x00002135, 0x00002138, 0x00002d30, 0x00002d65, + 0x00002d80, 0x00002d96, 0x00002da0, 0x00002da6, + 0x00002da8, 0x00002dae, 0x00002db0, 0x00002db6, + 0x00002db8, 0x00002dbe, 0x00002dc0, 0x00002dc6, + 0x00002dc8, 0x00002dce, 0x00002dd0, 0x00002dd6, + 0x00002dd8, 0x00002dde, 0x00003006, 0x00003006, + 0x0000303c, 0x0000303c, 0x00003041, 0x00003096, + 0x0000309f, 0x0000309f, 0x000030a1, 0x000030fa, + 0x000030ff, 0x000030ff, 0x00003105, 0x0000312d, + 0x00003131, 0x0000318e, 0x000031a0, 0x000031ba, + 0x000031f0, 0x000031ff, 0x00003400, 0x00004db5, + 0x00004e00, 0x0000a014, 0x0000a016, 0x0000a48c, + 0x0000a4d0, 0x0000a4f7, 0x0000a500, 0x0000a60b, + 0x0000a610, 0x0000a61f, 0x0000a62a, 0x0000a62b, + 0x0000a66e, 0x0000a66e, 0x0000a6a0, 0x0000a6e5, + 0x0000a7fb, 0x0000a801, 0x0000a803, 0x0000a805, + 0x0000a807, 0x0000a80a, 0x0000a80c, 0x0000a822, + 0x0000a840, 0x0000a873, 0x0000a882, 0x0000a8b3, + 0x0000a8f2, 0x0000a8f7, 0x0000a8fb, 0x0000a8fb, + 0x0000a90a, 0x0000a925, 0x0000a930, 0x0000a946, + 0x0000a960, 0x0000a97c, 0x0000a984, 0x0000a9b2, + 0x0000aa00, 0x0000aa28, 0x0000aa40, 0x0000aa42, + 0x0000aa44, 0x0000aa4b, 0x0000aa60, 0x0000aa6f, + 0x0000aa71, 0x0000aa76, 0x0000aa7a, 0x0000aa7a, + 0x0000aa80, 0x0000aaaf, 0x0000aab1, 0x0000aab1, + 0x0000aab5, 0x0000aab6, 0x0000aab9, 0x0000aabd, + 0x0000aac0, 0x0000aac0, 0x0000aac2, 0x0000aac2, + 0x0000aadb, 0x0000aadc, 0x0000ab01, 0x0000ab06, + 0x0000ab09, 0x0000ab0e, 0x0000ab11, 0x0000ab16, + 0x0000ab20, 0x0000ab26, 0x0000ab28, 0x0000ab2e, + 0x0000abc0, 0x0000abe2, 0x0000ac00, 0x0000d7a3, + 0x0000d7b0, 0x0000d7c6, 0x0000d7cb, 0x0000d7fb, + 0x0000f900, 0x0000faff, 0x0000fb1d, 0x0000fb1d, + 0x0000fb1f, 0x0000fb28, 0x0000fb2a, 0x0000fb36, + 0x0000fb38, 0x0000fb3c, 0x0000fb3e, 0x0000fb3e, + 0x0000fb40, 0x0000fb41, 0x0000fb43, 0x0000fb44, + 0x0000fb46, 0x0000fbb1, 0x0000fbd3, 0x0000fd3d, + 0x0000fd50, 0x0000fd8f, 0x0000fd92, 0x0000fdc7, + 0x0000fdf0, 0x0000fdfb, 0x0000fe70, 0x0000fe74, + 0x0000fe76, 0x0000fefc, 0x0000ff66, 0x0000ff6f, + 0x0000ff71, 0x0000ff9d, 0x0000ffa0, 0x0000ffbe, + 0x0000ffc2, 0x0000ffc7, 0x0000ffca, 0x0000ffcf, + 0x0000ffd2, 0x0000ffd7, 0x0000ffda, 0x0000ffdc, + 0x00010000, 0x0001000b, 0x0001000d, 0x00010026, + 0x00010028, 0x0001003a, 0x0001003c, 0x0001003d, + 0x0001003f, 0x0001004d, 0x00010050, 0x0001005d, + 0x00010080, 0x000100fa, 0x00010280, 0x0001029c, + 0x000102a0, 0x000102d0, 0x00010300, 0x0001031e, + 0x00010330, 0x00010340, 0x00010342, 0x00010349, + 0x00010380, 0x0001039d, 0x000103a0, 0x000103c3, + 0x000103c8, 0x000103cf, 0x00010450, 0x0001049d, + 0x00010800, 0x00010805, 0x00010808, 0x00010808, + 0x0001080a, 0x00010835, 0x00010837, 0x00010838, + 0x0001083c, 0x0001083c, 0x0001083f, 0x00010855, + 0x00010900, 0x00010915, 0x00010920, 0x00010939, + 0x00010a00, 0x00010a00, 0x00010a10, 0x00010a13, + 0x00010a15, 0x00010a17, 0x00010a19, 0x00010a33, + 0x00010a60, 0x00010a7c, 0x00010b00, 0x00010b35, + 0x00010b40, 0x00010b55, 0x00010b60, 0x00010b72, + 0x00010c00, 0x00010c48, 0x00011003, 0x00011037, + 0x00011083, 0x000110af, 0x00012000, 0x0001236e, + 0x00013000, 0x0001342e, 0x00016800, 0x00016a38, + 0x0001b000, 0x0001b001, 0x00020000, 0x0002a6d6, + 0x0002a700, 0x0002a700, 0x0002b734, 0x0002b734, + 0x0002b740, 0x0002b740, 0x0002b81d, 0x0002b81d, + 0x0002f800, 0x0002fa1d, 0x0000005f, 0x0000005f, + 0x0000203f, 0x00002040, 0x00002054, 0x00002054, + 0x0000fe33, 0x0000fe34, 0x0000fe4d, 0x0000fe4f, + 0x0000ff3f, 0x0000ff3f, 0x0000002d, 0x0000002d, + 0x0000058a, 0x0000058a, 0x000005be, 0x000005be, + 0x00001400, 0x00001400, 0x00001806, 0x00001806, + 0x00002010, 0x00002015, 0x00002e17, 0x00002e17, + 0x00002e1a, 0x00002e1a, 0x0000301c, 0x0000301c, + 0x00003030, 0x00003030, 0x000030a0, 0x000030a0, + 0x0000fe31, 0x0000fe32, 0x0000fe58, 0x0000fe58, + 0x0000fe63, 0x0000fe63, 0x0000ff0d, 0x0000ff0d, + 0x00000028, 0x00000028, 0x0000005b, 0x0000005b, + 0x0000007b, 0x0000007b, 0x00000f3a, 0x00000f3a, + 0x00000f3c, 0x00000f3c, 0x0000169b, 0x0000169b, + 0x0000201a, 0x0000201a, 0x0000201e, 0x0000201e, + 0x00002045, 0x00002045, 0x0000207d, 0x0000207d, + 0x0000208d, 0x0000208d, 0x00002329, 0x00002329, + 0x00002768, 0x00002768, 0x0000276a, 0x0000276a, + 0x0000276c, 0x0000276c, 0x0000276e, 0x0000276e, + 0x00002770, 0x00002770, 0x00002772, 0x00002772, + 0x00002774, 0x00002774, 0x000027c5, 0x000027c5, + 0x000027e6, 0x000027e6, 0x000027e8, 0x000027e8, + 0x000027ea, 0x000027ea, 0x000027ec, 0x000027ec, + 0x000027ee, 0x000027ee, 0x00002983, 0x00002983, + 0x00002985, 0x00002985, 0x00002987, 0x00002987, + 0x00002989, 0x00002989, 0x0000298b, 0x0000298b, + 0x0000298d, 0x0000298d, 0x0000298f, 0x0000298f, + 0x00002991, 0x00002991, 0x00002993, 0x00002993, + 0x00002995, 0x00002995, 0x00002997, 0x00002997, + 0x000029d8, 0x000029d8, 0x000029da, 0x000029da, + 0x000029fc, 0x000029fc, 0x00002e22, 0x00002e22, + 0x00002e24, 0x00002e24, 0x00002e26, 0x00002e26, + 0x00002e28, 0x00002e28, 0x00003008, 0x00003008, + 0x0000300a, 0x0000300a, 0x0000300c, 0x0000300c, + 0x0000300e, 0x0000300e, 0x00003010, 0x00003010, + 0x00003014, 0x00003014, 0x00003016, 0x00003016, + 0x00003018, 0x00003018, 0x0000301a, 0x0000301a, + 0x0000301d, 0x0000301d, 0x0000fd3e, 0x0000fd3e, + 0x0000fe17, 0x0000fe17, 0x0000fe35, 0x0000fe35, + 0x0000fe37, 0x0000fe37, 0x0000fe39, 0x0000fe39, + 0x0000fe3b, 0x0000fe3b, 0x0000fe3d, 0x0000fe3d, + 0x0000fe3f, 0x0000fe3f, 0x0000fe41, 0x0000fe41, + 0x0000fe43, 0x0000fe43, 0x0000fe47, 0x0000fe47, + 0x0000fe59, 0x0000fe59, 0x0000fe5b, 0x0000fe5b, + 0x0000fe5d, 0x0000fe5d, 0x0000ff08, 0x0000ff08, + 0x0000ff3b, 0x0000ff3b, 0x0000ff5b, 0x0000ff5b, + 0x0000ff5f, 0x0000ff5f, 0x0000ff62, 0x0000ff62, + 0x00000029, 0x00000029, 0x0000005d, 0x0000005d, + 0x0000007d, 0x0000007d, 0x00000f3b, 0x00000f3b, + 0x00000f3d, 0x00000f3d, 0x0000169c, 0x0000169c, + 0x00002046, 0x00002046, 0x0000207e, 0x0000207e, + 0x0000208e, 0x0000208e, 0x0000232a, 0x0000232a, + 0x00002769, 0x00002769, 0x0000276b, 0x0000276b, + 0x0000276d, 0x0000276d, 0x0000276f, 0x0000276f, + 0x00002771, 0x00002771, 0x00002773, 0x00002773, + 0x00002775, 0x00002775, 0x000027c6, 0x000027c6, + 0x000027e7, 0x000027e7, 0x000027e9, 0x000027e9, + 0x000027eb, 0x000027eb, 0x000027ed, 0x000027ed, + 0x000027ef, 0x000027ef, 0x00002984, 0x00002984, + 0x00002986, 0x00002986, 0x00002988, 0x00002988, + 0x0000298a, 0x0000298a, 0x0000298c, 0x0000298c, + 0x0000298e, 0x0000298e, 0x00002990, 0x00002990, + 0x00002992, 0x00002992, 0x00002994, 0x00002994, + 0x00002996, 0x00002996, 0x00002998, 0x00002998, + 0x000029d9, 0x000029d9, 0x000029db, 0x000029db, + 0x000029fd, 0x000029fd, 0x00002e23, 0x00002e23, + 0x00002e25, 0x00002e25, 0x00002e27, 0x00002e27, + 0x00002e29, 0x00002e29, 0x00003009, 0x00003009, + 0x0000300b, 0x0000300b, 0x0000300d, 0x0000300d, + 0x0000300f, 0x0000300f, 0x00003011, 0x00003011, + 0x00003015, 0x00003015, 0x00003017, 0x00003017, + 0x00003019, 0x00003019, 0x0000301b, 0x0000301b, + 0x0000301e, 0x0000301f, 0x0000fd3f, 0x0000fd3f, + 0x0000fe18, 0x0000fe18, 0x0000fe36, 0x0000fe36, + 0x0000fe38, 0x0000fe38, 0x0000fe3a, 0x0000fe3a, + 0x0000fe3c, 0x0000fe3c, 0x0000fe3e, 0x0000fe3e, + 0x0000fe40, 0x0000fe40, 0x0000fe42, 0x0000fe42, + 0x0000fe44, 0x0000fe44, 0x0000fe48, 0x0000fe48, + 0x0000fe5a, 0x0000fe5a, 0x0000fe5c, 0x0000fe5c, + 0x0000fe5e, 0x0000fe5e, 0x0000ff09, 0x0000ff09, + 0x0000ff3d, 0x0000ff3d, 0x0000ff5d, 0x0000ff5d, + 0x0000ff60, 0x0000ff60, 0x0000ff63, 0x0000ff63, + 0x00000021, 0x00000023, 0x00000025, 0x00000027, + 0x0000002a, 0x0000002a, 0x0000002c, 0x0000002c, + 0x0000002e, 0x0000002f, 0x0000003a, 0x0000003b, + 0x0000003f, 0x00000040, 0x0000005c, 0x0000005c, + 0x000000a1, 0x000000a1, 0x000000b7, 0x000000b7, + 0x000000bf, 0x000000bf, 0x0000037e, 0x0000037e, + 0x00000387, 0x00000387, 0x0000055a, 0x0000055f, + 0x00000589, 0x00000589, 0x000005c0, 0x000005c0, + 0x000005c3, 0x000005c3, 0x000005c6, 0x000005c6, + 0x000005f3, 0x000005f4, 0x00000609, 0x0000060a, + 0x0000060c, 0x0000060d, 0x0000061b, 0x0000061b, + 0x0000061e, 0x0000061f, 0x0000066a, 0x0000066d, + 0x000006d4, 0x000006d4, 0x00000700, 0x0000070d, + 0x000007f7, 0x000007f9, 0x00000830, 0x0000083e, + 0x0000085e, 0x0000085e, 0x00000964, 0x00000965, + 0x00000970, 0x00000970, 0x00000df4, 0x00000df4, + 0x00000e4f, 0x00000e4f, 0x00000e5a, 0x00000e5b, + 0x00000f04, 0x00000f12, 0x00000f85, 0x00000f85, + 0x00000fd0, 0x00000fd4, 0x00000fd9, 0x00000fda, + 0x0000104a, 0x0000104f, 0x000010fb, 0x000010fb, + 0x00001361, 0x00001368, 0x0000166d, 0x0000166e, + 0x000016eb, 0x000016ed, 0x00001735, 0x00001736, + 0x000017d4, 0x000017d6, 0x000017d8, 0x000017da, + 0x00001800, 0x00001805, 0x00001807, 0x0000180a, + 0x00001944, 0x00001945, 0x00001a1e, 0x00001a1f, + 0x00001aa0, 0x00001aa6, 0x00001aa8, 0x00001aad, + 0x00001b5a, 0x00001b60, 0x00001bfc, 0x00001bff, + 0x00001c3b, 0x00001c3f, 0x00001c7e, 0x00001c7f, + 0x00001cd3, 0x00001cd3, 0x00002016, 0x00002017, + 0x00002020, 0x00002027, 0x00002030, 0x00002038, + 0x0000203b, 0x0000203e, 0x00002041, 0x00002043, + 0x00002047, 0x00002051, 0x00002053, 0x00002053, + 0x00002055, 0x0000205e, 0x00002cf9, 0x00002cfc, + 0x00002cfe, 0x00002cff, 0x00002d70, 0x00002d70, + 0x00002e00, 0x00002e01, 0x00002e06, 0x00002e08, + 0x00002e0b, 0x00002e0b, 0x00002e0e, 0x00002e16, + 0x00002e18, 0x00002e19, 0x00002e1b, 0x00002e1b, + 0x00002e1e, 0x00002e1f, 0x00002e2a, 0x00002e2e, + 0x00002e30, 0x00002e31, 0x00003001, 0x00003003, + 0x0000303d, 0x0000303d, 0x000030fb, 0x000030fb, + 0x0000a4fe, 0x0000a4ff, 0x0000a60d, 0x0000a60f, + 0x0000a673, 0x0000a673, 0x0000a67e, 0x0000a67e, + 0x0000a6f2, 0x0000a6f7, 0x0000a874, 0x0000a877, + 0x0000a8ce, 0x0000a8cf, 0x0000a8f8, 0x0000a8fa, + 0x0000a92e, 0x0000a92f, 0x0000a95f, 0x0000a95f, + 0x0000a9c1, 0x0000a9cd, 0x0000a9de, 0x0000a9df, + 0x0000aa5c, 0x0000aa5f, 0x0000aade, 0x0000aadf, + 0x0000abeb, 0x0000abeb, 0x0000fe10, 0x0000fe16, + 0x0000fe19, 0x0000fe19, 0x0000fe30, 0x0000fe30, + 0x0000fe45, 0x0000fe46, 0x0000fe49, 0x0000fe4c, + 0x0000fe50, 0x0000fe52, 0x0000fe54, 0x0000fe57, + 0x0000fe5f, 0x0000fe61, 0x0000fe68, 0x0000fe68, + 0x0000fe6a, 0x0000fe6b, 0x0000ff01, 0x0000ff03, + 0x0000ff05, 0x0000ff07, 0x0000ff0a, 0x0000ff0a, + 0x0000ff0c, 0x0000ff0c, 0x0000ff0e, 0x0000ff0f, + 0x0000ff1a, 0x0000ff1b, 0x0000ff1f, 0x0000ff20, + 0x0000ff3c, 0x0000ff3c, 0x0000ff61, 0x0000ff61, + 0x0000ff64, 0x0000ff65, 0x00010100, 0x00010101, + 0x0001039f, 0x0001039f, 0x000103d0, 0x000103d0, + 0x00010857, 0x00010857, 0x0001091f, 0x0001091f, + 0x0001093f, 0x0001093f, 0x00010a50, 0x00010a58, + 0x00010a7f, 0x00010a7f, 0x00010b39, 0x00010b3f, + 0x00011047, 0x0001104d, 0x000110bb, 0x000110bc, + 0x000110be, 0x000110c1, 0x00012470, 0x00012473, + 0x0000002b, 0x0000002b, 0x0000003c, 0x0000003e, + 0x0000007c, 0x0000007c, 0x0000007e, 0x0000007e, + 0x000000ac, 0x000000ac, 0x000000b1, 0x000000b1, + 0x000000d7, 0x000000d7, 0x000000f7, 0x000000f7, + 0x000003f6, 0x000003f6, 0x00000606, 0x00000608, + 0x00002044, 0x00002044, 0x00002052, 0x00002052, + 0x0000207a, 0x0000207c, 0x0000208a, 0x0000208c, + 0x00002118, 0x00002118, 0x00002140, 0x00002144, + 0x0000214b, 0x0000214b, 0x00002190, 0x00002194, + 0x0000219a, 0x0000219b, 0x000021a0, 0x000021a0, + 0x000021a3, 0x000021a3, 0x000021a6, 0x000021a6, + 0x000021ae, 0x000021ae, 0x000021ce, 0x000021cf, + 0x000021d2, 0x000021d2, 0x000021d4, 0x000021d4, + 0x000021f4, 0x000022ff, 0x00002308, 0x0000230b, + 0x00002320, 0x00002321, 0x0000237c, 0x0000237c, + 0x0000239b, 0x000023b3, 0x000023dc, 0x000023e1, + 0x000025b7, 0x000025b7, 0x000025c1, 0x000025c1, + 0x000025f8, 0x000025ff, 0x0000266f, 0x0000266f, + 0x000027c0, 0x000027c4, 0x000027c7, 0x000027ca, + 0x000027cc, 0x000027cc, 0x000027ce, 0x000027e5, + 0x000027f0, 0x000027ff, 0x00002900, 0x00002982, + 0x00002999, 0x000029d7, 0x000029dc, 0x000029fb, + 0x000029fe, 0x00002aff, 0x00002b30, 0x00002b44, + 0x00002b47, 0x00002b4c, 0x0000fb29, 0x0000fb29, + 0x0000fe62, 0x0000fe62, 0x0000fe64, 0x0000fe66, + 0x0000ff0b, 0x0000ff0b, 0x0000ff1c, 0x0000ff1e, + 0x0000ff5c, 0x0000ff5c, 0x0000ff5e, 0x0000ff5e, + 0x0000ffe2, 0x0000ffe2, 0x0000ffe9, 0x0000ffec, + 0x0001d6c1, 0x0001d6c1, 0x0001d6db, 0x0001d6db, + 0x0001d6fb, 0x0001d6fb, 0x0001d715, 0x0001d715, + 0x0001d735, 0x0001d735, 0x0001d74f, 0x0001d74f, + 0x0001d76f, 0x0001d76f, 0x0001d789, 0x0001d789, + 0x0001d7a9, 0x0001d7a9, 0x0001d7c3, 0x0001d7c3, + 0x00000024, 0x00000024, 0x000000a2, 0x000000a5, + 0x0000060b, 0x0000060b, 0x000009f2, 0x000009f3, + 0x000009fb, 0x000009fb, 0x00000af1, 0x00000af1, + 0x00000bf9, 0x00000bf9, 0x00000e3f, 0x00000e3f, + 0x000017db, 0x000017db, 0x000020a0, 0x000020b9, + 0x0000a838, 0x0000a838, 0x0000fdfc, 0x0000fdfc, + 0x0000fe69, 0x0000fe69, 0x0000ff04, 0x0000ff04, + 0x0000ffe0, 0x0000ffe1, 0x0000ffe5, 0x0000ffe6, + 0x0000005e, 0x0000005e, 0x00000060, 0x00000060, + 0x000000a8, 0x000000a8, 0x000000af, 0x000000af, + 0x000000b4, 0x000000b4, 0x000000b8, 0x000000b8, + 0x000002c2, 0x000002c5, 0x000002d2, 0x000002df, + 0x000002e5, 0x000002eb, 0x000002ed, 0x000002ed, + 0x000002ef, 0x000002ff, 0x00000375, 0x00000375, + 0x00000384, 0x00000385, 0x00001fbd, 0x00001fbd, + 0x00001fbf, 0x00001fc1, 0x00001fcd, 0x00001fcf, + 0x00001fdd, 0x00001fdf, 0x00001fed, 0x00001fef, + 0x00001ffd, 0x00001ffe, 0x0000309b, 0x0000309c, + 0x0000a700, 0x0000a716, 0x0000a720, 0x0000a721, + 0x0000a789, 0x0000a78a, 0x0000fbb2, 0x0000fbc1, + 0x0000ff3e, 0x0000ff3e, 0x0000ff40, 0x0000ff40, + 0x0000ffe3, 0x0000ffe3, 0x000000a6, 0x000000a7, + 0x000000a9, 0x000000a9, 0x000000ae, 0x000000ae, + 0x000000b0, 0x000000b0, 0x000000b6, 0x000000b6, + 0x00000482, 0x00000482, 0x0000060e, 0x0000060f, + 0x000006de, 0x000006de, 0x000006e9, 0x000006e9, + 0x000006fd, 0x000006fe, 0x000007f6, 0x000007f6, + 0x000009fa, 0x000009fa, 0x00000b70, 0x00000b70, + 0x00000bf3, 0x00000bf8, 0x00000bfa, 0x00000bfa, + 0x00000c7f, 0x00000c7f, 0x00000d79, 0x00000d79, + 0x00000f01, 0x00000f03, 0x00000f13, 0x00000f17, + 0x00000f1a, 0x00000f1f, 0x00000f34, 0x00000f34, + 0x00000f36, 0x00000f36, 0x00000f38, 0x00000f38, + 0x00000fbe, 0x00000fc5, 0x00000fc7, 0x00000fcc, + 0x00000fce, 0x00000fcf, 0x00000fd5, 0x00000fd8, + 0x0000109e, 0x0000109f, 0x00001360, 0x00001360, + 0x00001390, 0x00001399, 0x00001940, 0x00001940, + 0x000019de, 0x000019ff, 0x00001b61, 0x00001b6a, + 0x00001b74, 0x00001b7c, 0x00002100, 0x00002101, + 0x00002103, 0x00002106, 0x00002108, 0x00002109, + 0x00002114, 0x00002114, 0x00002116, 0x00002117, + 0x0000211e, 0x00002123, 0x00002125, 0x00002125, + 0x00002127, 0x00002127, 0x00002129, 0x00002129, + 0x0000212e, 0x0000212e, 0x0000213a, 0x0000213b, + 0x0000214a, 0x0000214a, 0x0000214c, 0x0000214d, + 0x0000214f, 0x0000214f, 0x00002195, 0x00002199, + 0x0000219c, 0x0000219f, 0x000021a1, 0x000021a2, + 0x000021a4, 0x000021a5, 0x000021a7, 0x000021ad, + 0x000021af, 0x000021cd, 0x000021d0, 0x000021d1, + 0x000021d3, 0x000021d3, 0x000021d5, 0x000021f3, + 0x00002300, 0x00002307, 0x0000230c, 0x0000231f, + 0x00002322, 0x00002328, 0x0000232b, 0x0000237b, + 0x0000237d, 0x0000239a, 0x000023b4, 0x000023db, + 0x000023e2, 0x000023f3, 0x00002400, 0x00002426, + 0x00002440, 0x0000244a, 0x0000249c, 0x000024e9, + 0x00002500, 0x000025b6, 0x000025b8, 0x000025c0, + 0x000025c2, 0x000025f7, 0x00002600, 0x0000266e, + 0x00002670, 0x000026ff, 0x00002701, 0x00002767, + 0x00002794, 0x000027bf, 0x00002800, 0x000028ff, + 0x00002b00, 0x00002b2f, 0x00002b45, 0x00002b46, + 0x00002b50, 0x00002b59, 0x00002ce5, 0x00002cea, + 0x00002e80, 0x00002e99, 0x00002e9b, 0x00002ef3, + 0x00002f00, 0x00002fd5, 0x00002ff0, 0x00002ffb, + 0x00003004, 0x00003004, 0x00003012, 0x00003013, + 0x00003020, 0x00003020, 0x00003036, 0x00003037, + 0x0000303e, 0x0000303f, 0x00003190, 0x00003191, + 0x00003196, 0x0000319f, 0x000031c0, 0x000031e3, + 0x00003200, 0x0000321e, 0x0000322a, 0x00003250, + 0x00003260, 0x0000327f, 0x0000328a, 0x000032b0, + 0x000032c0, 0x000032fe, 0x00003300, 0x000033ff, + 0x00004dc0, 0x00004dff, 0x0000a490, 0x0000a4c6, + 0x0000a828, 0x0000a82b, 0x0000a836, 0x0000a837, + 0x0000a839, 0x0000a839, 0x0000aa77, 0x0000aa79, + 0x0000fdfd, 0x0000fdfd, 0x0000ffe4, 0x0000ffe4, + 0x0000ffe8, 0x0000ffe8, 0x0000ffed, 0x0000ffee, + 0x0000fffc, 0x0000fffd, 0x00010102, 0x00010102, + 0x00010137, 0x0001013f, 0x00010179, 0x00010189, + 0x00010190, 0x0001019b, 0x000101d0, 0x000101fc, + 0x0001d000, 0x0001d0f5, 0x0001d100, 0x0001d126, + 0x0001d129, 0x0001d164, 0x0001d16a, 0x0001d16c, + 0x0001d183, 0x0001d184, 0x0001d18c, 0x0001d1a9, + 0x0001d1ae, 0x0001d1dd, 0x0001d200, 0x0001d241, + 0x0001d245, 0x0001d245, 0x0001d300, 0x0001d356, + 0x0001f000, 0x0001f02b, 0x0001f030, 0x0001f093, + 0x0001f0a0, 0x0001f0ae, 0x0001f0b1, 0x0001f0be, + 0x0001f0c1, 0x0001f0cf, 0x0001f0d1, 0x0001f0df, + 0x0001f110, 0x0001f12e, 0x0001f130, 0x0001f169, + 0x0001f170, 0x0001f19a, 0x0001f1e6, 0x0001f202, + 0x0001f210, 0x0001f23a, 0x0001f240, 0x0001f248, + 0x0001f250, 0x0001f251, 0x0001f300, 0x0001f320, + 0x0001f330, 0x0001f335, 0x0001f337, 0x0001f37c, + 0x0001f380, 0x0001f393, 0x0001f3a0, 0x0001f3c4, + 0x0001f3c6, 0x0001f3ca, 0x0001f3e0, 0x0001f3f0, + 0x0001f400, 0x0001f43e, 0x0001f440, 0x0001f440, + 0x0001f442, 0x0001f4f7, 0x0001f4f9, 0x0001f4fc, + 0x0001f500, 0x0001f53d, 0x0001f550, 0x0001f567, + 0x0001f5fb, 0x0001f5ff, 0x0001f601, 0x0001f610, + 0x0001f612, 0x0001f614, 0x0001f616, 0x0001f616, + 0x0001f618, 0x0001f618, 0x0001f61a, 0x0001f61a, + 0x0001f61c, 0x0001f61e, 0x0001f620, 0x0001f625, + 0x0001f628, 0x0001f62b, 0x0001f62d, 0x0001f62d, + 0x0001f630, 0x0001f633, 0x0001f635, 0x0001f640, + 0x0001f645, 0x0001f64f, 0x0001f680, 0x0001f6c5, + 0x0001f700, 0x0001f773, 0x00000041, 0x0000005a, + 0x00000061, 0x0000007a, 0x000000aa, 0x000000aa, + 0x000000b5, 0x000000b5, 0x000000ba, 0x000000ba, + 0x000000c0, 0x000000d6, 0x000000d8, 0x000000f6, + 0x000000f8, 0x000002b8, 0x000002bb, 0x000002c1, + 0x000002d0, 0x000002d1, 0x000002e0, 0x000002e4, + 0x000002ee, 0x000002ee, 0x00000370, 0x00000373, + 0x00000376, 0x00000377, 0x0000037a, 0x0000037d, + 0x00000386, 0x00000386, 0x00000388, 0x0000038a, + 0x0000038c, 0x0000038c, 0x0000038e, 0x000003a1, + 0x000003a3, 0x000003f5, 0x000003f7, 0x00000482, + 0x0000048a, 0x00000527, 0x00000531, 0x00000556, + 0x00000559, 0x0000055f, 0x00000561, 0x00000587, + 0x00000589, 0x00000589, 0x00000903, 0x00000939, + 0x0000093b, 0x0000093b, 0x0000093d, 0x00000940, + 0x00000949, 0x0000094c, 0x0000094e, 0x00000950, + 0x00000958, 0x00000961, 0x00000964, 0x00000977, + 0x00000979, 0x0000097f, 0x00000982, 0x00000983, + 0x00000985, 0x0000098c, 0x0000098f, 0x00000990, + 0x00000993, 0x000009a8, 0x000009aa, 0x000009b0, + 0x000009b2, 0x000009b2, 0x000009b6, 0x000009b9, + 0x000009bd, 0x000009c0, 0x000009c7, 0x000009c8, + 0x000009cb, 0x000009cc, 0x000009ce, 0x000009ce, + 0x000009d7, 0x000009d7, 0x000009dc, 0x000009dd, + 0x000009df, 0x000009e1, 0x000009e6, 0x000009f1, + 0x000009f4, 0x000009fa, 0x00000a03, 0x00000a03, + 0x00000a05, 0x00000a0a, 0x00000a0f, 0x00000a10, + 0x00000a13, 0x00000a28, 0x00000a2a, 0x00000a30, + 0x00000a32, 0x00000a33, 0x00000a35, 0x00000a36, + 0x00000a38, 0x00000a39, 0x00000a3e, 0x00000a40, + 0x00000a59, 0x00000a5c, 0x00000a5e, 0x00000a5e, + 0x00000a66, 0x00000a6f, 0x00000a72, 0x00000a74, + 0x00000a83, 0x00000a83, 0x00000a85, 0x00000a8d, + 0x00000a8f, 0x00000a91, 0x00000a93, 0x00000aa8, + 0x00000aaa, 0x00000ab0, 0x00000ab2, 0x00000ab3, + 0x00000ab5, 0x00000ab9, 0x00000abd, 0x00000ac0, + 0x00000ac9, 0x00000ac9, 0x00000acb, 0x00000acc, + 0x00000ad0, 0x00000ad0, 0x00000ae0, 0x00000ae1, + 0x00000ae6, 0x00000aef, 0x00000b02, 0x00000b03, + 0x00000b05, 0x00000b0c, 0x00000b0f, 0x00000b10, + 0x00000b13, 0x00000b28, 0x00000b2a, 0x00000b30, + 0x00000b32, 0x00000b33, 0x00000b35, 0x00000b39, + 0x00000b3d, 0x00000b3e, 0x00000b40, 0x00000b40, + 0x00000b47, 0x00000b48, 0x00000b4b, 0x00000b4c, + 0x00000b57, 0x00000b57, 0x00000b5c, 0x00000b5d, + 0x00000b5f, 0x00000b61, 0x00000b66, 0x00000b77, + 0x00000b83, 0x00000b83, 0x00000b85, 0x00000b8a, + 0x00000b8e, 0x00000b90, 0x00000b92, 0x00000b95, + 0x00000b99, 0x00000b9a, 0x00000b9c, 0x00000b9c, + 0x00000b9e, 0x00000b9f, 0x00000ba3, 0x00000ba4, + 0x00000ba8, 0x00000baa, 0x00000bae, 0x00000bb9, + 0x00000bbe, 0x00000bbf, 0x00000bc1, 0x00000bc2, + 0x00000bc6, 0x00000bc8, 0x00000bca, 0x00000bcc, + 0x00000bd0, 0x00000bd0, 0x00000bd7, 0x00000bd7, + 0x00000be6, 0x00000bf2, 0x00000c01, 0x00000c03, + 0x00000c05, 0x00000c0c, 0x00000c0e, 0x00000c10, + 0x00000c12, 0x00000c28, 0x00000c2a, 0x00000c33, + 0x00000c35, 0x00000c39, 0x00000c3d, 0x00000c3d, + 0x00000c41, 0x00000c44, 0x00000c58, 0x00000c59, + 0x00000c60, 0x00000c61, 0x00000c66, 0x00000c6f, + 0x00000c7f, 0x00000c7f, 0x00000c82, 0x00000c83, + 0x00000c85, 0x00000c8c, 0x00000c8e, 0x00000c90, + 0x00000c92, 0x00000ca8, 0x00000caa, 0x00000cb3, + 0x00000cb5, 0x00000cb9, 0x00000cbd, 0x00000cc4, + 0x00000cc6, 0x00000cc8, 0x00000cca, 0x00000ccb, + 0x00000cd5, 0x00000cd6, 0x00000cde, 0x00000cde, + 0x00000ce0, 0x00000ce1, 0x00000ce6, 0x00000cef, + 0x00000cf1, 0x00000cf2, 0x00000d02, 0x00000d03, + 0x00000d05, 0x00000d0c, 0x00000d0e, 0x00000d10, + 0x00000d12, 0x00000d3a, 0x00000d3d, 0x00000d40, + 0x00000d46, 0x00000d48, 0x00000d4a, 0x00000d4c, + 0x00000d4e, 0x00000d4e, 0x00000d57, 0x00000d57, + 0x00000d60, 0x00000d61, 0x00000d66, 0x00000d75, + 0x00000d79, 0x00000d7f, 0x00000d82, 0x00000d83, + 0x00000d85, 0x00000d96, 0x00000d9a, 0x00000db1, + 0x00000db3, 0x00000dbb, 0x00000dbd, 0x00000dbd, + 0x00000dc0, 0x00000dc6, 0x00000dcf, 0x00000dd1, + 0x00000dd8, 0x00000ddf, 0x00000df2, 0x00000df4, + 0x00000e01, 0x00000e30, 0x00000e32, 0x00000e33, + 0x00000e40, 0x00000e46, 0x00000e4f, 0x00000e5b, + 0x00000e81, 0x00000e82, 0x00000e84, 0x00000e84, + 0x00000e87, 0x00000e88, 0x00000e8a, 0x00000e8a, + 0x00000e8d, 0x00000e8d, 0x00000e94, 0x00000e97, + 0x00000e99, 0x00000e9f, 0x00000ea1, 0x00000ea3, + 0x00000ea5, 0x00000ea5, 0x00000ea7, 0x00000ea7, + 0x00000eaa, 0x00000eab, 0x00000ead, 0x00000eb0, + 0x00000eb2, 0x00000eb3, 0x00000ebd, 0x00000ebd, + 0x00000ec0, 0x00000ec4, 0x00000ec6, 0x00000ec6, + 0x00000ed0, 0x00000ed9, 0x00000edc, 0x00000edd, + 0x00000f00, 0x00000f17, 0x00000f1a, 0x00000f34, + 0x00000f36, 0x00000f36, 0x00000f38, 0x00000f38, + 0x00000f3e, 0x00000f47, 0x00000f49, 0x00000f6c, + 0x00000f7f, 0x00000f7f, 0x00000f85, 0x00000f85, + 0x00000f88, 0x00000f8c, 0x00000fbe, 0x00000fc5, + 0x00000fc7, 0x00000fcc, 0x00000fce, 0x00000fda, + 0x00001000, 0x0000102c, 0x00001031, 0x00001031, + 0x00001038, 0x00001038, 0x0000103b, 0x0000103c, + 0x0000103f, 0x00001057, 0x0000105a, 0x0000105d, + 0x00001061, 0x00001070, 0x00001075, 0x00001081, + 0x00001083, 0x00001084, 0x00001087, 0x0000108c, + 0x0000108e, 0x0000109c, 0x0000109e, 0x000010c5, + 0x000010d0, 0x000010fc, 0x00001100, 0x00001248, + 0x0000124a, 0x0000124d, 0x00001250, 0x00001256, + 0x00001258, 0x00001258, 0x0000125a, 0x0000125d, + 0x00001260, 0x00001288, 0x0000128a, 0x0000128d, + 0x00001290, 0x000012b0, 0x000012b2, 0x000012b5, + 0x000012b8, 0x000012be, 0x000012c0, 0x000012c0, + 0x000012c2, 0x000012c5, 0x000012c8, 0x000012d6, + 0x000012d8, 0x00001310, 0x00001312, 0x00001315, + 0x00001318, 0x0000135a, 0x00001360, 0x0000137c, + 0x00001380, 0x0000138f, 0x000013a0, 0x000013f4, + 0x00001401, 0x0000167f, 0x00001681, 0x0000169a, + 0x000016a0, 0x000016f0, 0x00001700, 0x0000170c, + 0x0000170e, 0x00001711, 0x00001720, 0x00001731, + 0x00001735, 0x00001736, 0x00001740, 0x00001751, + 0x00001760, 0x0000176c, 0x0000176e, 0x00001770, + 0x00001780, 0x000017b6, 0x000017be, 0x000017c5, + 0x000017c7, 0x000017c8, 0x000017d4, 0x000017da, + 0x000017dc, 0x000017dc, 0x000017e0, 0x000017e9, + 0x00001810, 0x00001819, 0x00001820, 0x00001877, + 0x00001880, 0x000018a8, 0x000018aa, 0x000018aa, + 0x000018b0, 0x000018f5, 0x00001900, 0x0000191c, + 0x00001923, 0x00001926, 0x00001929, 0x0000192b, + 0x00001930, 0x00001931, 0x00001933, 0x00001938, + 0x00001946, 0x0000196d, 0x00001970, 0x00001974, + 0x00001980, 0x000019ab, 0x000019b0, 0x000019c9, + 0x000019d0, 0x000019da, 0x00001a00, 0x00001a16, + 0x00001a19, 0x00001a1b, 0x00001a1e, 0x00001a55, + 0x00001a57, 0x00001a57, 0x00001a61, 0x00001a61, + 0x00001a63, 0x00001a64, 0x00001a6d, 0x00001a72, + 0x00001a80, 0x00001a89, 0x00001a90, 0x00001a99, + 0x00001aa0, 0x00001aad, 0x00001b04, 0x00001b33, + 0x00001b35, 0x00001b35, 0x00001b3b, 0x00001b3b, + 0x00001b3d, 0x00001b41, 0x00001b43, 0x00001b4b, + 0x00001b50, 0x00001b6a, 0x00001b74, 0x00001b7c, + 0x00001b82, 0x00001ba1, 0x00001ba6, 0x00001ba7, + 0x00001baa, 0x00001baa, 0x00001bae, 0x00001bb9, + 0x00001bc0, 0x00001be5, 0x00001be7, 0x00001be7, + 0x00001bea, 0x00001bec, 0x00001bee, 0x00001bee, + 0x00001bf2, 0x00001bf3, 0x00001bfc, 0x00001c2b, + 0x00001c34, 0x00001c35, 0x00001c3b, 0x00001c49, + 0x00001c4d, 0x00001c7f, 0x00001cd3, 0x00001cd3, + 0x00001ce1, 0x00001ce1, 0x00001ce9, 0x00001cec, + 0x00001cee, 0x00001cf2, 0x00001d00, 0x00001dbf, + 0x00001e00, 0x00001f15, 0x00001f18, 0x00001f1d, + 0x00001f20, 0x00001f45, 0x00001f48, 0x00001f4d, + 0x00001f50, 0x00001f57, 0x00001f59, 0x00001f59, + 0x00001f5b, 0x00001f5b, 0x00001f5d, 0x00001f5d, + 0x00001f5f, 0x00001f7d, 0x00001f80, 0x00001fb4, + 0x00001fb6, 0x00001fbc, 0x00001fbe, 0x00001fbe, + 0x00001fc2, 0x00001fc4, 0x00001fc6, 0x00001fcc, + 0x00001fd0, 0x00001fd3, 0x00001fd6, 0x00001fdb, + 0x00001fe0, 0x00001fec, 0x00001ff2, 0x00001ff4, + 0x00001ff6, 0x00001ffc, 0x0000200e, 0x0000200e, + 0x00002071, 0x00002071, 0x0000207f, 0x0000207f, + 0x00002090, 0x0000209c, 0x00002102, 0x00002102, + 0x00002107, 0x00002107, 0x0000210a, 0x00002113, + 0x00002115, 0x00002115, 0x00002119, 0x0000211d, + 0x00002124, 0x00002124, 0x00002126, 0x00002126, + 0x00002128, 0x00002128, 0x0000212a, 0x0000212d, + 0x0000212f, 0x00002139, 0x0000213c, 0x0000213f, + 0x00002145, 0x00002149, 0x0000214e, 0x0000214f, + 0x00002160, 0x00002188, 0x00002336, 0x0000237a, + 0x00002395, 0x00002395, 0x0000249c, 0x000024e9, + 0x000026ac, 0x000026ac, 0x00002800, 0x000028ff, + 0x00002c00, 0x00002c2e, 0x00002c30, 0x00002c5e, + 0x00002c60, 0x00002ce4, 0x00002ceb, 0x00002cee, + 0x00002d00, 0x00002d25, 0x00002d30, 0x00002d65, + 0x00002d6f, 0x00002d70, 0x00002d80, 0x00002d96, + 0x00002da0, 0x00002da6, 0x00002da8, 0x00002dae, + 0x00002db0, 0x00002db6, 0x00002db8, 0x00002dbe, + 0x00002dc0, 0x00002dc6, 0x00002dc8, 0x00002dce, + 0x00002dd0, 0x00002dd6, 0x00002dd8, 0x00002dde, + 0x00003005, 0x00003007, 0x00003021, 0x00003029, + 0x00003031, 0x00003035, 0x00003038, 0x0000303c, + 0x00003041, 0x00003096, 0x0000309d, 0x0000309f, + 0x000030a1, 0x000030fa, 0x000030fc, 0x000030ff, + 0x00003105, 0x0000312d, 0x00003131, 0x0000318e, + 0x00003190, 0x000031ba, 0x000031f0, 0x0000321c, + 0x00003220, 0x0000324f, 0x00003260, 0x0000327b, + 0x0000327f, 0x000032b0, 0x000032c0, 0x000032cb, + 0x000032d0, 0x000032fe, 0x00003300, 0x00003376, + 0x0000337b, 0x000033dd, 0x000033e0, 0x000033fe, + 0x00003400, 0x00004db5, 0x00004e00, 0x0000a48c, + 0x0000a4d0, 0x0000a60c, 0x0000a610, 0x0000a62b, + 0x0000a640, 0x0000a66e, 0x0000a680, 0x0000a697, + 0x0000a6a0, 0x0000a6ef, 0x0000a6f2, 0x0000a6f7, + 0x0000a722, 0x0000a787, 0x0000a789, 0x0000a78e, + 0x0000a790, 0x0000a791, 0x0000a7a0, 0x0000a7a9, + 0x0000a7fa, 0x0000a801, 0x0000a803, 0x0000a805, + 0x0000a807, 0x0000a80a, 0x0000a80c, 0x0000a824, + 0x0000a827, 0x0000a827, 0x0000a830, 0x0000a837, + 0x0000a840, 0x0000a873, 0x0000a880, 0x0000a8c3, + 0x0000a8ce, 0x0000a8d9, 0x0000a8f2, 0x0000a8fb, + 0x0000a900, 0x0000a925, 0x0000a92e, 0x0000a946, + 0x0000a952, 0x0000a953, 0x0000a95f, 0x0000a97c, + 0x0000a983, 0x0000a9b2, 0x0000a9b4, 0x0000a9b5, + 0x0000a9ba, 0x0000a9bb, 0x0000a9bd, 0x0000a9cd, + 0x0000a9cf, 0x0000a9d9, 0x0000a9de, 0x0000a9df, + 0x0000aa00, 0x0000aa28, 0x0000aa2f, 0x0000aa30, + 0x0000aa33, 0x0000aa34, 0x0000aa40, 0x0000aa42, + 0x0000aa44, 0x0000aa4b, 0x0000aa4d, 0x0000aa4d, + 0x0000aa50, 0x0000aa59, 0x0000aa5c, 0x0000aa7b, + 0x0000aa80, 0x0000aaaf, 0x0000aab1, 0x0000aab1, + 0x0000aab5, 0x0000aab6, 0x0000aab9, 0x0000aabd, + 0x0000aac0, 0x0000aac0, 0x0000aac2, 0x0000aac2, + 0x0000aadb, 0x0000aadf, 0x0000ab01, 0x0000ab06, + 0x0000ab09, 0x0000ab0e, 0x0000ab11, 0x0000ab16, + 0x0000ab20, 0x0000ab26, 0x0000ab28, 0x0000ab2e, + 0x0000abc0, 0x0000abe4, 0x0000abe6, 0x0000abe7, + 0x0000abe9, 0x0000abec, 0x0000abf0, 0x0000abf9, + 0x0000ac00, 0x0000d7a3, 0x0000d7b0, 0x0000d7c6, + 0x0000d7cb, 0x0000d7fb, 0x0000e000, 0x0000fb06, + 0x0000fb13, 0x0000fb17, 0x0000ff21, 0x0000ff3a, + 0x0000ff41, 0x0000ff5a, 0x0000ff66, 0x0000ffbe, + 0x0000ffc2, 0x0000ffc7, 0x0000ffca, 0x0000ffcf, + 0x0000ffd2, 0x0000ffd7, 0x0000ffda, 0x0000ffdc, + 0x00010000, 0x0002a6d6, 0x0002a700, 0x0002a700, + 0x0002b734, 0x0002b734, 0x0002b740, 0x0002b740, + 0x0002b81d, 0x0002b81d, 0x0002f800, 0x0002fa1d, + 0x000f0000, 0x000ffffd, 0x00100000, 0x0010fffd, + 0x000005be, 0x000005be, 0x000005c0, 0x000005c0, + 0x000005c3, 0x000005c3, 0x000005c6, 0x000005c6, + 0x000005d0, 0x000005ea, 0x000005f0, 0x000005f4, + 0x000007c0, 0x000007ea, 0x000007f4, 0x000007f5, + 0x000007fa, 0x000007fa, 0x00000800, 0x00000815, + 0x0000081a, 0x0000081a, 0x00000824, 0x00000824, + 0x00000828, 0x00000828, 0x00000830, 0x0000083e, + 0x00000840, 0x00000858, 0x0000085e, 0x0000085e, + 0x0000200f, 0x0000200f, 0x0000fb1d, 0x0000fb1d, + 0x0000fb1f, 0x0000fb28, 0x0000fb2a, 0x0000fb36, + 0x0000fb38, 0x0000fb3c, 0x0000fb3e, 0x0000fb3e, + 0x0000fb40, 0x0000fb41, 0x0000fb43, 0x0000fb44, + 0x0000fb46, 0x0000fb4f, 0x00010800, 0x00010805, + 0x00010808, 0x00010808, 0x0001080a, 0x00010835, + 0x00010837, 0x00010838, 0x0001083c, 0x0001083c, + 0x0001083f, 0x00010855, 0x00010857, 0x0001085f, + 0x00010900, 0x0001091b, 0x00010920, 0x00010939, + 0x0001093f, 0x0001093f, 0x00010a00, 0x00010a00, + 0x00010a10, 0x00010a13, 0x00010a15, 0x00010a17, + 0x00010a19, 0x00010a33, 0x00010a40, 0x00010a47, + 0x00010a50, 0x00010a58, 0x00010a60, 0x00010a7f, + 0x00010b00, 0x00010b35, 0x00010b40, 0x00010b55, + 0x00010b58, 0x00010b72, 0x00010b78, 0x00010b7f, + 0x00010c00, 0x00010c48, 0x00000030, 0x00000039, + 0x000000b2, 0x000000b3, 0x000000b9, 0x000000b9, + 0x000006f0, 0x000006f9, 0x00002070, 0x00002070, + 0x00002074, 0x00002079, 0x00002080, 0x00002089, + 0x00002488, 0x0000249b, 0x0000ff10, 0x0000ff19, + 0x0001d7ce, 0x0001d7ff, 0x0001f100, 0x0001f10a, + 0x0000002b, 0x0000002b, 0x0000002d, 0x0000002d, + 0x0000207a, 0x0000207b, 0x0000208a, 0x0000208b, + 0x00002212, 0x00002212, 0x0000fb29, 0x0000fb29, + 0x0000fe62, 0x0000fe63, 0x0000ff0b, 0x0000ff0b, + 0x0000ff0d, 0x0000ff0d, 0x00000023, 0x00000025, + 0x000000a2, 0x000000a5, 0x000000b0, 0x000000b1, + 0x00000609, 0x0000060a, 0x0000066a, 0x0000066a, + 0x000009f2, 0x000009f3, 0x000009fb, 0x000009fb, + 0x00000af1, 0x00000af1, 0x00000bf9, 0x00000bf9, + 0x00000e3f, 0x00000e3f, 0x000017db, 0x000017db, + 0x00002030, 0x00002034, 0x000020a0, 0x000020b9, + 0x0000212e, 0x0000212e, 0x00002213, 0x00002213, + 0x0000a838, 0x0000a839, 0x0000fe5f, 0x0000fe5f, + 0x0000fe69, 0x0000fe6a, 0x0000ff03, 0x0000ff05, + 0x0000ffe0, 0x0000ffe1, 0x0000ffe5, 0x0000ffe6, + 0x00000600, 0x00000603, 0x00000660, 0x00000669, + 0x0000066b, 0x0000066c, 0x000006dd, 0x000006dd, + 0x0000070f, 0x0000070f, 0x00010e60, 0x00010e7e, + 0x0000002c, 0x0000002c, 0x0000002e, 0x0000002f, + 0x0000003a, 0x0000003a, 0x000000a0, 0x000000a0, + 0x0000060c, 0x0000060c, 0x0000202f, 0x0000202f, + 0x00002044, 0x00002044, 0x0000fe50, 0x0000fe50, + 0x0000fe52, 0x0000fe52, 0x0000fe55, 0x0000fe55, + 0x0000ff0c, 0x0000ff0c, 0x0000ff0e, 0x0000ff0f, + 0x0000ff1a, 0x0000ff1a, 0x0000000a, 0x0000000a, + 0x0000000d, 0x0000000d, 0x0000001c, 0x0000001e, + 0x00000085, 0x00000085, 0x00002029, 0x00002029, + 0x00000009, 0x00000009, 0x0000000b, 0x0000000b, + 0x0000001f, 0x0000001f, 0x0000000c, 0x0000000c, + 0x00000020, 0x00000020, 0x00001680, 0x00001680, + 0x0000180e, 0x0000180e, 0x00002000, 0x0000200a, + 0x00002028, 0x00002028, 0x0000205f, 0x0000205f, + 0x00003000, 0x00003000, 0x00000000, 0x00000008, + 0x0000000e, 0x0000001b, 0x00000021, 0x00000022, + 0x00000026, 0x0000002a, 0x0000003b, 0x00000040, + 0x0000005b, 0x00000060, 0x0000007b, 0x00000084, + 0x00000086, 0x0000009f, 0x000000a1, 0x000000a1, + 0x000000a6, 0x000000a9, 0x000000ab, 0x000000af, + 0x000000b4, 0x000000b4, 0x000000b6, 0x000000b8, + 0x000000bb, 0x000000bf, 0x000000d7, 0x000000d7, + 0x000000f7, 0x000000f7, 0x000002b9, 0x000002ba, + 0x000002c2, 0x000002cf, 0x000002d2, 0x000002df, + 0x000002e5, 0x000002ed, 0x000002ef, 0x0000036f, + 0x00000374, 0x00000375, 0x0000037e, 0x0000037e, + 0x00000384, 0x00000385, 0x00000387, 0x00000387, + 0x000003f6, 0x000003f6, 0x00000483, 0x00000489, + 0x0000058a, 0x0000058a, 0x00000591, 0x000005bd, + 0x000005bf, 0x000005bf, 0x000005c1, 0x000005c2, + 0x000005c4, 0x000005c5, 0x000005c7, 0x000005c7, + 0x00000606, 0x00000607, 0x0000060e, 0x0000061a, + 0x0000064b, 0x0000065f, 0x00000670, 0x00000670, + 0x000006d6, 0x000006dc, 0x000006de, 0x000006e4, + 0x000006e7, 0x000006ed, 0x00000711, 0x00000711, + 0x00000730, 0x0000074a, 0x000007a6, 0x000007b0, + 0x000007eb, 0x000007f3, 0x000007f6, 0x000007f9, + 0x00000816, 0x00000819, 0x0000081b, 0x00000823, + 0x00000825, 0x00000827, 0x00000829, 0x0000082d, + 0x00000859, 0x0000085b, 0x00000900, 0x00000902, + 0x0000093a, 0x0000093a, 0x0000093c, 0x0000093c, + 0x00000941, 0x00000948, 0x0000094d, 0x0000094d, + 0x00000951, 0x00000957, 0x00000962, 0x00000963, + 0x00000981, 0x00000981, 0x000009bc, 0x000009bc, + 0x000009c1, 0x000009c4, 0x000009cd, 0x000009cd, + 0x000009e2, 0x000009e3, 0x00000a01, 0x00000a02, + 0x00000a3c, 0x00000a3c, 0x00000a41, 0x00000a42, + 0x00000a47, 0x00000a48, 0x00000a4b, 0x00000a4d, + 0x00000a51, 0x00000a51, 0x00000a70, 0x00000a71, + 0x00000a75, 0x00000a75, 0x00000a81, 0x00000a82, + 0x00000abc, 0x00000abc, 0x00000ac1, 0x00000ac5, + 0x00000ac7, 0x00000ac8, 0x00000acd, 0x00000acd, + 0x00000ae2, 0x00000ae3, 0x00000b01, 0x00000b01, + 0x00000b3c, 0x00000b3c, 0x00000b3f, 0x00000b3f, + 0x00000b41, 0x00000b44, 0x00000b4d, 0x00000b4d, + 0x00000b56, 0x00000b56, 0x00000b62, 0x00000b63, + 0x00000b82, 0x00000b82, 0x00000bc0, 0x00000bc0, + 0x00000bcd, 0x00000bcd, 0x00000bf3, 0x00000bf8, + 0x00000bfa, 0x00000bfa, 0x00000c3e, 0x00000c40, + 0x00000c46, 0x00000c48, 0x00000c4a, 0x00000c4d, + 0x00000c55, 0x00000c56, 0x00000c62, 0x00000c63, + 0x00000c78, 0x00000c7e, 0x00000cbc, 0x00000cbc, + 0x00000ccc, 0x00000ccd, 0x00000ce2, 0x00000ce3, + 0x00000d41, 0x00000d44, 0x00000d4d, 0x00000d4d, + 0x00000d62, 0x00000d63, 0x00000dca, 0x00000dca, + 0x00000dd2, 0x00000dd4, 0x00000dd6, 0x00000dd6, + 0x00000e31, 0x00000e31, 0x00000e34, 0x00000e3a, + 0x00000e47, 0x00000e4e, 0x00000eb1, 0x00000eb1, + 0x00000eb4, 0x00000eb9, 0x00000ebb, 0x00000ebc, + 0x00000ec8, 0x00000ecd, 0x00000f18, 0x00000f19, + 0x00000f35, 0x00000f35, 0x00000f37, 0x00000f37, + 0x00000f39, 0x00000f3d, 0x00000f71, 0x00000f7e, + 0x00000f80, 0x00000f84, 0x00000f86, 0x00000f87, + 0x00000f8d, 0x00000f97, 0x00000f99, 0x00000fbc, + 0x00000fc6, 0x00000fc6, 0x0000102d, 0x00001030, + 0x00001032, 0x00001037, 0x00001039, 0x0000103a, + 0x0000103d, 0x0000103e, 0x00001058, 0x00001059, + 0x0000105e, 0x00001060, 0x00001071, 0x00001074, + 0x00001082, 0x00001082, 0x00001085, 0x00001086, + 0x0000108d, 0x0000108d, 0x0000109d, 0x0000109d, + 0x0000135d, 0x0000135f, 0x00001390, 0x00001399, + 0x00001400, 0x00001400, 0x0000169b, 0x0000169c, + 0x00001712, 0x00001714, 0x00001732, 0x00001734, + 0x00001752, 0x00001753, 0x00001772, 0x00001773, + 0x000017b7, 0x000017bd, 0x000017c6, 0x000017c6, + 0x000017c9, 0x000017d3, 0x000017dd, 0x000017dd, + 0x000017f0, 0x000017f9, 0x00001800, 0x0000180d, + 0x000018a9, 0x000018a9, 0x00001920, 0x00001922, + 0x00001927, 0x00001928, 0x00001932, 0x00001932, + 0x00001939, 0x0000193b, 0x00001940, 0x00001940, + 0x00001944, 0x00001945, 0x000019de, 0x000019ff, + 0x00001a17, 0x00001a18, 0x00001a56, 0x00001a56, + 0x00001a58, 0x00001a5e, 0x00001a60, 0x00001a60, + 0x00001a62, 0x00001a62, 0x00001a65, 0x00001a6c, + 0x00001a73, 0x00001a7c, 0x00001a7f, 0x00001a7f, + 0x00001b00, 0x00001b03, 0x00001b34, 0x00001b34, + 0x00001b36, 0x00001b3a, 0x00001b3c, 0x00001b3c, + 0x00001b42, 0x00001b42, 0x00001b6b, 0x00001b73, + 0x00001b80, 0x00001b81, 0x00001ba2, 0x00001ba5, + 0x00001ba8, 0x00001ba9, 0x00001be6, 0x00001be6, + 0x00001be8, 0x00001be9, 0x00001bed, 0x00001bed, + 0x00001bef, 0x00001bf1, 0x00001c2c, 0x00001c33, + 0x00001c36, 0x00001c37, 0x00001cd0, 0x00001cd2, + 0x00001cd4, 0x00001ce0, 0x00001ce2, 0x00001ce8, + 0x00001ced, 0x00001ced, 0x00001dc0, 0x00001de6, + 0x00001dfc, 0x00001dff, 0x00001fbd, 0x00001fbd, + 0x00001fbf, 0x00001fc1, 0x00001fcd, 0x00001fcf, + 0x00001fdd, 0x00001fdf, 0x00001fed, 0x00001fef, + 0x00001ffd, 0x00001ffe, 0x0000200b, 0x0000200d, + 0x00002010, 0x00002027, 0x0000202a, 0x0000202e, + 0x00002035, 0x00002043, 0x00002045, 0x0000205e, + 0x00002060, 0x00002064, 0x0000206a, 0x0000206f, + 0x0000207c, 0x0000207e, 0x0000208c, 0x0000208e, + 0x000020d0, 0x000020f0, 0x00002100, 0x00002101, + 0x00002103, 0x00002106, 0x00002108, 0x00002109, + 0x00002114, 0x00002114, 0x00002116, 0x00002118, + 0x0000211e, 0x00002123, 0x00002125, 0x00002125, + 0x00002127, 0x00002127, 0x00002129, 0x00002129, + 0x0000213a, 0x0000213b, 0x00002140, 0x00002144, + 0x0000214a, 0x0000214d, 0x00002150, 0x0000215f, + 0x00002189, 0x00002189, 0x00002190, 0x00002211, + 0x00002214, 0x00002335, 0x0000237b, 0x00002394, + 0x00002396, 0x000023f3, 0x00002400, 0x00002426, + 0x00002440, 0x0000244a, 0x00002460, 0x00002487, + 0x000024ea, 0x000026ab, 0x000026ad, 0x000026ff, + 0x00002701, 0x000027ca, 0x000027cc, 0x000027cc, + 0x000027ce, 0x000027ff, 0x00002900, 0x00002b4c, + 0x00002b50, 0x00002b59, 0x00002ce5, 0x00002cea, + 0x00002cef, 0x00002cf1, 0x00002cf9, 0x00002cff, + 0x00002d7f, 0x00002d7f, 0x00002de0, 0x00002e31, + 0x00002e80, 0x00002e99, 0x00002e9b, 0x00002ef3, + 0x00002f00, 0x00002fd5, 0x00002ff0, 0x00002ffb, + 0x00003001, 0x00003004, 0x00003008, 0x00003020, + 0x0000302a, 0x00003030, 0x00003036, 0x00003037, + 0x0000303d, 0x0000303f, 0x00003099, 0x0000309c, + 0x000030a0, 0x000030a0, 0x000030fb, 0x000030fb, + 0x000031c0, 0x000031e3, 0x0000321d, 0x0000321e, + 0x00003250, 0x0000325f, 0x0000327c, 0x0000327e, + 0x000032b1, 0x000032bf, 0x000032cc, 0x000032cf, + 0x00003377, 0x0000337a, 0x000033de, 0x000033df, + 0x000033ff, 0x000033ff, 0x00004dc0, 0x00004dff, + 0x0000a490, 0x0000a4c6, 0x0000a60d, 0x0000a60f, + 0x0000a66f, 0x0000a673, 0x0000a67c, 0x0000a67f, + 0x0000a6f0, 0x0000a6f1, 0x0000a700, 0x0000a721, + 0x0000a788, 0x0000a788, 0x0000a802, 0x0000a802, + 0x0000a806, 0x0000a806, 0x0000a80b, 0x0000a80b, + 0x0000a825, 0x0000a826, 0x0000a828, 0x0000a82b, + 0x0000a874, 0x0000a877, 0x0000a8c4, 0x0000a8c4, + 0x0000a8e0, 0x0000a8f1, 0x0000a926, 0x0000a92d, + 0x0000a947, 0x0000a951, 0x0000a980, 0x0000a982, + 0x0000a9b3, 0x0000a9b3, 0x0000a9b6, 0x0000a9b9, + 0x0000a9bc, 0x0000a9bc, 0x0000aa29, 0x0000aa2e, + 0x0000aa31, 0x0000aa32, 0x0000aa35, 0x0000aa36, + 0x0000aa43, 0x0000aa43, 0x0000aa4c, 0x0000aa4c, + 0x0000aab0, 0x0000aab0, 0x0000aab2, 0x0000aab4, + 0x0000aab7, 0x0000aab8, 0x0000aabe, 0x0000aabf, + 0x0000aac1, 0x0000aac1, 0x0000abe5, 0x0000abe5, + 0x0000abe8, 0x0000abe8, 0x0000abed, 0x0000abed, + 0x0000fb1e, 0x0000fb1e, 0x0000fd3e, 0x0000fd3f, + 0x0000fdfd, 0x0000fdfd, 0x0000fe00, 0x0000fe19, + 0x0000fe20, 0x0000fe26, 0x0000fe30, 0x0000fe4f, + 0x0000fe51, 0x0000fe51, 0x0000fe54, 0x0000fe54, + 0x0000fe56, 0x0000fe5e, 0x0000fe60, 0x0000fe61, + 0x0000fe64, 0x0000fe66, 0x0000fe68, 0x0000fe68, + 0x0000fe6b, 0x0000fe6b, 0x0000feff, 0x0000feff, + 0x0000ff01, 0x0000ff02, 0x0000ff06, 0x0000ff0a, + 0x0000ff1b, 0x0000ff20, 0x0000ff3b, 0x0000ff40, + 0x0000ff5b, 0x0000ff65, 0x0000ffe2, 0x0000ffe4, + 0x0000ffe8, 0x0000ffee, 0x0000fff9, 0x0000fffd, + 0x00010101, 0x00010101, 0x00010140, 0x0001018a, + 0x00010190, 0x0001019b, 0x000101fd, 0x000101fd, + 0x0001091f, 0x0001091f, 0x00010a01, 0x00010a03, + 0x00010a05, 0x00010a06, 0x00010a0c, 0x00010a0f, + 0x00010a38, 0x00010a3a, 0x00010a3f, 0x00010a3f, + 0x00010b39, 0x00010b3f, 0x00011001, 0x00011001, + 0x00011038, 0x00011046, 0x00011052, 0x00011065, + 0x00011080, 0x00011081, 0x000110b3, 0x000110b6, + 0x000110b9, 0x000110ba, 0x0001d167, 0x0001d169, + 0x0001d173, 0x0001d182, 0x0001d185, 0x0001d18b, + 0x0001d1aa, 0x0001d1ad, 0x0001d200, 0x0001d245, + 0x0001d300, 0x0001d356, 0x0001d6db, 0x0001d6db, + 0x0001d715, 0x0001d715, 0x0001d74f, 0x0001d74f, + 0x0001d789, 0x0001d789, 0x0001d7c3, 0x0001d7c3, + 0x0001f000, 0x0001f02b, 0x0001f030, 0x0001f093, + 0x0001f0a0, 0x0001f0ae, 0x0001f0b1, 0x0001f0be, + 0x0001f0c1, 0x0001f0cf, 0x0001f0d1, 0x0001f0df, + 0x0001f300, 0x0001f320, 0x0001f330, 0x0001f335, + 0x0001f337, 0x0001f37c, 0x0001f380, 0x0001f393, + 0x0001f3a0, 0x0001f3c4, 0x0001f3c6, 0x0001f3ca, + 0x0001f3e0, 0x0001f3f0, 0x0001f400, 0x0001f43e, + 0x0001f440, 0x0001f440, 0x0001f442, 0x0001f48b, + 0x0001f48d, 0x0001f4f7, 0x0001f4f9, 0x0001f4fc, + 0x0001f500, 0x0001f523, 0x0001f525, 0x0001f53d, + 0x0001f550, 0x0001f567, 0x0001f5fb, 0x0001f5ff, + 0x0001f601, 0x0001f610, 0x0001f612, 0x0001f614, + 0x0001f616, 0x0001f616, 0x0001f618, 0x0001f618, + 0x0001f61a, 0x0001f61a, 0x0001f61c, 0x0001f61e, + 0x0001f620, 0x0001f625, 0x0001f628, 0x0001f62b, + 0x0001f62d, 0x0001f62d, 0x0001f630, 0x0001f633, + 0x0001f635, 0x0001f640, 0x0001f645, 0x0001f64f, + 0x0001f680, 0x0001f6c5, 0x0001f700, 0x0001f773, + 0x000e0001, 0x000e0001, 0x000e0020, 0x000e007f, + 0x000e0100, 0x000e01ef, 0x000000c0, 0x000000c5, + 0x000000c7, 0x000000cf, 0x000000d1, 0x000000d6, + 0x000000d9, 0x000000dd, 0x000000e0, 0x000000e5, + 0x000000e7, 0x000000ef, 0x000000f1, 0x000000f6, + 0x000000f9, 0x000000fd, 0x000000ff, 0x0000010f, + 0x00000112, 0x00000125, 0x00000128, 0x00000130, + 0x00000134, 0x00000137, 0x00000139, 0x0000013e, + 0x00000143, 0x00000148, 0x0000014c, 0x00000151, + 0x00000154, 0x00000165, 0x00000168, 0x0000017e, + 0x000001a0, 0x000001a1, 0x000001af, 0x000001b0, + 0x000001cd, 0x000001dc, 0x000001de, 0x000001e3, + 0x000001e6, 0x000001f0, 0x000001f4, 0x000001f5, + 0x000001f8, 0x0000021b, 0x0000021e, 0x0000021f, + 0x00000226, 0x00000233, 0x00000340, 0x00000341, + 0x00000343, 0x00000344, 0x00000374, 0x00000374, + 0x0000037e, 0x0000037e, 0x00000385, 0x0000038a, + 0x0000038c, 0x0000038c, 0x0000038e, 0x00000390, + 0x000003aa, 0x000003b0, 0x000003ca, 0x000003ce, + 0x000003d3, 0x000003d4, 0x00000400, 0x00000401, + 0x00000403, 0x00000403, 0x00000407, 0x00000407, + 0x0000040c, 0x0000040e, 0x00000419, 0x00000419, + 0x00000439, 0x00000439, 0x00000450, 0x00000451, + 0x00000453, 0x00000453, 0x00000457, 0x00000457, + 0x0000045c, 0x0000045e, 0x00000476, 0x00000477, + 0x000004c1, 0x000004c2, 0x000004d0, 0x000004d3, + 0x000004d6, 0x000004d7, 0x000004da, 0x000004df, + 0x000004e2, 0x000004e7, 0x000004ea, 0x000004f5, + 0x000004f8, 0x000004f9, 0x00000622, 0x00000626, + 0x000006c0, 0x000006c0, 0x000006c2, 0x000006c2, + 0x000006d3, 0x000006d3, 0x00000929, 0x00000929, + 0x00000931, 0x00000931, 0x00000934, 0x00000934, + 0x00000958, 0x0000095f, 0x000009cb, 0x000009cc, + 0x000009dc, 0x000009dd, 0x000009df, 0x000009df, + 0x00000a33, 0x00000a33, 0x00000a36, 0x00000a36, + 0x00000a59, 0x00000a5b, 0x00000a5e, 0x00000a5e, + 0x00000b48, 0x00000b48, 0x00000b4b, 0x00000b4c, + 0x00000b5c, 0x00000b5d, 0x00000b94, 0x00000b94, + 0x00000bca, 0x00000bcc, 0x00000c48, 0x00000c48, + 0x00000cc0, 0x00000cc0, 0x00000cc7, 0x00000cc8, + 0x00000cca, 0x00000ccb, 0x00000d4a, 0x00000d4c, + 0x00000dda, 0x00000dda, 0x00000ddc, 0x00000dde, + 0x00000f43, 0x00000f43, 0x00000f4d, 0x00000f4d, + 0x00000f52, 0x00000f52, 0x00000f57, 0x00000f57, + 0x00000f5c, 0x00000f5c, 0x00000f69, 0x00000f69, + 0x00000f73, 0x00000f73, 0x00000f75, 0x00000f76, + 0x00000f78, 0x00000f78, 0x00000f81, 0x00000f81, + 0x00000f93, 0x00000f93, 0x00000f9d, 0x00000f9d, + 0x00000fa2, 0x00000fa2, 0x00000fa7, 0x00000fa7, + 0x00000fac, 0x00000fac, 0x00000fb9, 0x00000fb9, + 0x00001026, 0x00001026, 0x00001b06, 0x00001b06, + 0x00001b08, 0x00001b08, 0x00001b0a, 0x00001b0a, + 0x00001b0c, 0x00001b0c, 0x00001b0e, 0x00001b0e, + 0x00001b12, 0x00001b12, 0x00001b3b, 0x00001b3b, + 0x00001b3d, 0x00001b3d, 0x00001b40, 0x00001b41, + 0x00001b43, 0x00001b43, 0x00001e00, 0x00001e99, + 0x00001e9b, 0x00001e9b, 0x00001ea0, 0x00001ef9, + 0x00001f00, 0x00001f15, 0x00001f18, 0x00001f1d, + 0x00001f20, 0x00001f45, 0x00001f48, 0x00001f4d, + 0x00001f50, 0x00001f57, 0x00001f59, 0x00001f59, + 0x00001f5b, 0x00001f5b, 0x00001f5d, 0x00001f5d, + 0x00001f5f, 0x00001f7d, 0x00001f80, 0x00001fb4, + 0x00001fb6, 0x00001fbc, 0x00001fbe, 0x00001fbe, + 0x00001fc1, 0x00001fc4, 0x00001fc6, 0x00001fd3, + 0x00001fd6, 0x00001fdb, 0x00001fdd, 0x00001fef, + 0x00001ff2, 0x00001ff4, 0x00001ff6, 0x00001ffd, + 0x00002000, 0x00002001, 0x00002126, 0x00002126, + 0x0000212a, 0x0000212b, 0x0000219a, 0x0000219b, + 0x000021ae, 0x000021ae, 0x000021cd, 0x000021cf, + 0x00002204, 0x00002204, 0x00002209, 0x00002209, + 0x0000220c, 0x0000220c, 0x00002224, 0x00002224, + 0x00002226, 0x00002226, 0x00002241, 0x00002241, + 0x00002244, 0x00002244, 0x00002247, 0x00002247, + 0x00002249, 0x00002249, 0x00002260, 0x00002260, + 0x00002262, 0x00002262, 0x0000226d, 0x00002271, + 0x00002274, 0x00002275, 0x00002278, 0x00002279, + 0x00002280, 0x00002281, 0x00002284, 0x00002285, + 0x00002288, 0x00002289, 0x000022ac, 0x000022af, + 0x000022e0, 0x000022e3, 0x000022ea, 0x000022ed, + 0x00002329, 0x0000232a, 0x00002adc, 0x00002adc, + 0x0000304c, 0x0000304c, 0x0000304e, 0x0000304e, + 0x00003050, 0x00003050, 0x00003052, 0x00003052, + 0x00003054, 0x00003054, 0x00003056, 0x00003056, + 0x00003058, 0x00003058, 0x0000305a, 0x0000305a, + 0x0000305c, 0x0000305c, 0x0000305e, 0x0000305e, + 0x00003060, 0x00003060, 0x00003062, 0x00003062, + 0x00003065, 0x00003065, 0x00003067, 0x00003067, + 0x00003069, 0x00003069, 0x00003070, 0x00003071, + 0x00003073, 0x00003074, 0x00003076, 0x00003077, + 0x00003079, 0x0000307a, 0x0000307c, 0x0000307d, + 0x00003094, 0x00003094, 0x0000309e, 0x0000309e, + 0x000030ac, 0x000030ac, 0x000030ae, 0x000030ae, + 0x000030b0, 0x000030b0, 0x000030b2, 0x000030b2, + 0x000030b4, 0x000030b4, 0x000030b6, 0x000030b6, + 0x000030b8, 0x000030b8, 0x000030ba, 0x000030ba, + 0x000030bc, 0x000030bc, 0x000030be, 0x000030be, + 0x000030c0, 0x000030c0, 0x000030c2, 0x000030c2, + 0x000030c5, 0x000030c5, 0x000030c7, 0x000030c7, + 0x000030c9, 0x000030c9, 0x000030d0, 0x000030d1, + 0x000030d3, 0x000030d4, 0x000030d6, 0x000030d7, + 0x000030d9, 0x000030da, 0x000030dc, 0x000030dd, + 0x000030f4, 0x000030f4, 0x000030f7, 0x000030fa, + 0x000030fe, 0x000030fe, 0x0000f902, 0x0000fa0d, + 0x0000fa10, 0x0000fa10, 0x0000fa12, 0x0000fa12, + 0x0000fa15, 0x0000fa1e, 0x0000fa20, 0x0000fa20, + 0x0000fa22, 0x0000fa22, 0x0000fa25, 0x0000fa26, + 0x0000fa2a, 0x0000fa2d, 0x0000fa30, 0x0000fa6d, + 0x0000fa70, 0x0000fad9, 0x0000fb1d, 0x0000fb1d, + 0x0000fb1f, 0x0000fb1f, 0x0000fb2a, 0x0000fb36, + 0x0000fb38, 0x0000fb3c, 0x0000fb3e, 0x0000fb3e, + 0x0000fb40, 0x0000fb41, 0x0000fb43, 0x0000fb44, + 0x0000fb46, 0x0000fb4e, 0x0001109a, 0x0001109a, + 0x0001109c, 0x0001109c, 0x000110ab, 0x000110ab, + 0x0001d15e, 0x0001d164, 0x0001d1bb, 0x0001d1c0, + 0x0002f800, 0x0002fa1d, 0x00000000, 0x00000377, + 0x0000037a, 0x0000037e, 0x00000384, 0x0000038a, + 0x0000038c, 0x0000038c, 0x0000038e, 0x000003a1, + 0x000003a3, 0x00000527, 0x00000531, 0x00000556, + 0x00000559, 0x0000055f, 0x00000561, 0x00000587, + 0x00000589, 0x0000058a, 0x00000591, 0x000005c7, + 0x000005d0, 0x000005ea, 0x000005f0, 0x000005f4, + 0x00000600, 0x00000603, 0x00000606, 0x0000061b, + 0x0000061e, 0x0000070d, 0x0000070f, 0x0000074a, + 0x0000074d, 0x000007b1, 0x000007c0, 0x000007fa, + 0x00000800, 0x0000082d, 0x00000830, 0x0000083e, + 0x00000840, 0x0000085b, 0x0000085e, 0x0000085e, + 0x00000900, 0x00000977, 0x00000979, 0x0000097f, + 0x00000981, 0x00000983, 0x00000985, 0x0000098c, + 0x0000098f, 0x00000990, 0x00000993, 0x000009a8, + 0x000009aa, 0x000009b0, 0x000009b2, 0x000009b2, + 0x000009b6, 0x000009b9, 0x000009bc, 0x000009c4, + 0x000009c7, 0x000009c8, 0x000009cb, 0x000009ce, + 0x000009d7, 0x000009d7, 0x000009dc, 0x000009dd, + 0x000009df, 0x000009e3, 0x000009e6, 0x000009fb, + 0x00000a01, 0x00000a03, 0x00000a05, 0x00000a0a, + 0x00000a0f, 0x00000a10, 0x00000a13, 0x00000a28, + 0x00000a2a, 0x00000a30, 0x00000a32, 0x00000a33, + 0x00000a35, 0x00000a36, 0x00000a38, 0x00000a39, + 0x00000a3c, 0x00000a3c, 0x00000a3e, 0x00000a42, + 0x00000a47, 0x00000a48, 0x00000a4b, 0x00000a4d, + 0x00000a51, 0x00000a51, 0x00000a59, 0x00000a5c, + 0x00000a5e, 0x00000a5e, 0x00000a66, 0x00000a75, + 0x00000a81, 0x00000a83, 0x00000a85, 0x00000a8d, + 0x00000a8f, 0x00000a91, 0x00000a93, 0x00000aa8, + 0x00000aaa, 0x00000ab0, 0x00000ab2, 0x00000ab3, + 0x00000ab5, 0x00000ab9, 0x00000abc, 0x00000ac5, + 0x00000ac7, 0x00000ac9, 0x00000acb, 0x00000acd, + 0x00000ad0, 0x00000ad0, 0x00000ae0, 0x00000ae3, + 0x00000ae6, 0x00000aef, 0x00000af1, 0x00000af1, + 0x00000b01, 0x00000b03, 0x00000b05, 0x00000b0c, + 0x00000b0f, 0x00000b10, 0x00000b13, 0x00000b28, + 0x00000b2a, 0x00000b30, 0x00000b32, 0x00000b33, + 0x00000b35, 0x00000b39, 0x00000b3c, 0x00000b44, + 0x00000b47, 0x00000b48, 0x00000b4b, 0x00000b4d, + 0x00000b56, 0x00000b57, 0x00000b5c, 0x00000b5d, + 0x00000b5f, 0x00000b63, 0x00000b66, 0x00000b77, + 0x00000b82, 0x00000b83, 0x00000b85, 0x00000b8a, + 0x00000b8e, 0x00000b90, 0x00000b92, 0x00000b95, + 0x00000b99, 0x00000b9a, 0x00000b9c, 0x00000b9c, + 0x00000b9e, 0x00000b9f, 0x00000ba3, 0x00000ba4, + 0x00000ba8, 0x00000baa, 0x00000bae, 0x00000bb9, + 0x00000bbe, 0x00000bc2, 0x00000bc6, 0x00000bc8, + 0x00000bca, 0x00000bcd, 0x00000bd0, 0x00000bd0, + 0x00000bd7, 0x00000bd7, 0x00000be6, 0x00000bfa, + 0x00000c01, 0x00000c03, 0x00000c05, 0x00000c0c, + 0x00000c0e, 0x00000c10, 0x00000c12, 0x00000c28, + 0x00000c2a, 0x00000c33, 0x00000c35, 0x00000c39, + 0x00000c3d, 0x00000c44, 0x00000c46, 0x00000c48, + 0x00000c4a, 0x00000c4d, 0x00000c55, 0x00000c56, + 0x00000c58, 0x00000c59, 0x00000c60, 0x00000c63, + 0x00000c66, 0x00000c6f, 0x00000c78, 0x00000c7f, + 0x00000c82, 0x00000c83, 0x00000c85, 0x00000c8c, + 0x00000c8e, 0x00000c90, 0x00000c92, 0x00000ca8, + 0x00000caa, 0x00000cb3, 0x00000cb5, 0x00000cb9, + 0x00000cbc, 0x00000cc4, 0x00000cc6, 0x00000cc8, + 0x00000cca, 0x00000ccd, 0x00000cd5, 0x00000cd6, + 0x00000cde, 0x00000cde, 0x00000ce0, 0x00000ce3, + 0x00000ce6, 0x00000cef, 0x00000cf1, 0x00000cf2, + 0x00000d02, 0x00000d03, 0x00000d05, 0x00000d0c, + 0x00000d0e, 0x00000d10, 0x00000d12, 0x00000d3a, + 0x00000d3d, 0x00000d44, 0x00000d46, 0x00000d48, + 0x00000d4a, 0x00000d4e, 0x00000d57, 0x00000d57, + 0x00000d60, 0x00000d63, 0x00000d66, 0x00000d75, + 0x00000d79, 0x00000d7f, 0x00000d82, 0x00000d83, + 0x00000d85, 0x00000d96, 0x00000d9a, 0x00000db1, + 0x00000db3, 0x00000dbb, 0x00000dbd, 0x00000dbd, + 0x00000dc0, 0x00000dc6, 0x00000dca, 0x00000dca, + 0x00000dcf, 0x00000dd4, 0x00000dd6, 0x00000dd6, + 0x00000dd8, 0x00000ddf, 0x00000df2, 0x00000df4, + 0x00000e01, 0x00000e3a, 0x00000e3f, 0x00000e5b, + 0x00000e81, 0x00000e82, 0x00000e84, 0x00000e84, + 0x00000e87, 0x00000e88, 0x00000e8a, 0x00000e8a, + 0x00000e8d, 0x00000e8d, 0x00000e94, 0x00000e97, + 0x00000e99, 0x00000e9f, 0x00000ea1, 0x00000ea3, + 0x00000ea5, 0x00000ea5, 0x00000ea7, 0x00000ea7, + 0x00000eaa, 0x00000eab, 0x00000ead, 0x00000eb9, + 0x00000ebb, 0x00000ebd, 0x00000ec0, 0x00000ec4, + 0x00000ec6, 0x00000ec6, 0x00000ec8, 0x00000ecd, + 0x00000ed0, 0x00000ed9, 0x00000edc, 0x00000edd, + 0x00000f00, 0x00000f47, 0x00000f49, 0x00000f6c, + 0x00000f71, 0x00000f97, 0x00000f99, 0x00000fbc, + 0x00000fbe, 0x00000fcc, 0x00000fce, 0x00000fda, + 0x00001000, 0x000010c5, 0x000010d0, 0x000010fc, + 0x00001100, 0x00001248, 0x0000124a, 0x0000124d, + 0x00001250, 0x00001256, 0x00001258, 0x00001258, + 0x0000125a, 0x0000125d, 0x00001260, 0x00001288, + 0x0000128a, 0x0000128d, 0x00001290, 0x000012b0, + 0x000012b2, 0x000012b5, 0x000012b8, 0x000012be, + 0x000012c0, 0x000012c0, 0x000012c2, 0x000012c5, + 0x000012c8, 0x000012d6, 0x000012d8, 0x00001310, + 0x00001312, 0x00001315, 0x00001318, 0x0000135a, + 0x0000135d, 0x0000137c, 0x00001380, 0x00001399, + 0x000013a0, 0x000013f4, 0x00001400, 0x0000169c, + 0x000016a0, 0x000016f0, 0x00001700, 0x0000170c, + 0x0000170e, 0x00001714, 0x00001720, 0x00001736, + 0x00001740, 0x00001753, 0x00001760, 0x0000176c, + 0x0000176e, 0x00001770, 0x00001772, 0x00001773, + 0x00001780, 0x000017dd, 0x000017e0, 0x000017e9, + 0x000017f0, 0x000017f9, 0x00001800, 0x0000180e, + 0x00001810, 0x00001819, 0x00001820, 0x00001877, + 0x00001880, 0x000018aa, 0x000018b0, 0x000018f5, + 0x00001900, 0x0000191c, 0x00001920, 0x0000192b, + 0x00001930, 0x0000193b, 0x00001940, 0x00001940, + 0x00001944, 0x0000196d, 0x00001970, 0x00001974, + 0x00001980, 0x000019ab, 0x000019b0, 0x000019c9, + 0x000019d0, 0x000019da, 0x000019de, 0x00001a1b, + 0x00001a1e, 0x00001a5e, 0x00001a60, 0x00001a7c, + 0x00001a7f, 0x00001a89, 0x00001a90, 0x00001a99, + 0x00001aa0, 0x00001aad, 0x00001b00, 0x00001b4b, + 0x00001b50, 0x00001b7c, 0x00001b80, 0x00001baa, + 0x00001bae, 0x00001bb9, 0x00001bc0, 0x00001bf3, + 0x00001bfc, 0x00001c37, 0x00001c3b, 0x00001c49, + 0x00001c4d, 0x00001c7f, 0x00001cd0, 0x00001cf2, + 0x00001d00, 0x00001de6, 0x00001dfc, 0x00001f15, + 0x00001f18, 0x00001f1d, 0x00001f20, 0x00001f45, + 0x00001f48, 0x00001f4d, 0x00001f50, 0x00001f57, + 0x00001f59, 0x00001f59, 0x00001f5b, 0x00001f5b, + 0x00001f5d, 0x00001f5d, 0x00001f5f, 0x00001f7d, + 0x00001f80, 0x00001fb4, 0x00001fb6, 0x00001fc4, + 0x00001fc6, 0x00001fd3, 0x00001fd6, 0x00001fdb, + 0x00001fdd, 0x00001fef, 0x00001ff2, 0x00001ff4, + 0x00001ff6, 0x00001ffe, 0x00002000, 0x00002064, + 0x0000206a, 0x00002071, 0x00002074, 0x0000208e, + 0x00002090, 0x0000209c, 0x000020a0, 0x000020b9, + 0x000020d0, 0x000020f0, 0x00002100, 0x00002189, + 0x00002190, 0x000023f3, 0x00002400, 0x00002426, + 0x00002440, 0x0000244a, 0x00002460, 0x000026ff, + 0x00002701, 0x000027ca, 0x000027cc, 0x000027cc, + 0x000027ce, 0x00002b4c, 0x00002b50, 0x00002b59, + 0x00002c00, 0x00002c2e, 0x00002c30, 0x00002c5e, + 0x00002c60, 0x00002cf1, 0x00002cf9, 0x00002d25, + 0x00002d30, 0x00002d65, 0x00002d6f, 0x00002d70, + 0x00002d7f, 0x00002d96, 0x00002da0, 0x00002da6, + 0x00002da8, 0x00002dae, 0x00002db0, 0x00002db6, + 0x00002db8, 0x00002dbe, 0x00002dc0, 0x00002dc6, + 0x00002dc8, 0x00002dce, 0x00002dd0, 0x00002dd6, + 0x00002dd8, 0x00002dde, 0x00002de0, 0x00002e31, + 0x00002e80, 0x00002e99, 0x00002e9b, 0x00002ef3, + 0x00002f00, 0x00002fd5, 0x00002ff0, 0x00002ffb, + 0x00003000, 0x0000303f, 0x00003041, 0x00003096, + 0x00003099, 0x000030ff, 0x00003105, 0x0000312d, + 0x00003131, 0x0000318e, 0x00003190, 0x000031ba, + 0x000031c0, 0x000031e3, 0x000031f0, 0x0000321e, + 0x00003220, 0x000032fe, 0x00003300, 0x000033ff, + 0x00003400, 0x00004db5, 0x00004dc0, 0x00004dff, + 0x00004e00, 0x00009fa5, 0x0000a000, 0x0000a48c, + 0x0000a490, 0x0000a4c6, 0x0000a4d0, 0x0000a62b, + 0x0000a640, 0x0000a673, 0x0000a67c, 0x0000a697, + 0x0000a6a0, 0x0000a6f7, 0x0000a700, 0x0000a78e, + 0x0000a790, 0x0000a791, 0x0000a7a0, 0x0000a7a9, + 0x0000a7fa, 0x0000a82b, 0x0000a830, 0x0000a839, + 0x0000a840, 0x0000a877, 0x0000a880, 0x0000a8c4, + 0x0000a8ce, 0x0000a8d9, 0x0000a8e0, 0x0000a8fb, + 0x0000a900, 0x0000a953, 0x0000a95f, 0x0000a97c, + 0x0000a980, 0x0000a9cd, 0x0000a9cf, 0x0000a9d9, + 0x0000a9de, 0x0000a9df, 0x0000aa00, 0x0000aa36, + 0x0000aa40, 0x0000aa4d, 0x0000aa50, 0x0000aa59, + 0x0000aa5c, 0x0000aa7b, 0x0000aa80, 0x0000aac2, + 0x0000aadb, 0x0000aadf, 0x0000ab01, 0x0000ab06, + 0x0000ab09, 0x0000ab0e, 0x0000ab11, 0x0000ab16, + 0x0000ab20, 0x0000ab26, 0x0000ab28, 0x0000ab2e, + 0x0000abc0, 0x0000abed, 0x0000abf0, 0x0000abf9, + 0x0000ac00, 0x0000d7a3, 0x0000d7b0, 0x0000d7c6, + 0x0000d7cb, 0x0000d7fb, 0x0000f900, 0x0000fb06, + 0x0000fb13, 0x0000fb17, 0x0000fb1d, 0x0000fb36, + 0x0000fb38, 0x0000fb3c, 0x0000fb3e, 0x0000fb3e, + 0x0000fb40, 0x0000fb41, 0x0000fb43, 0x0000fb44, + 0x0000fb46, 0x0000fbc1, 0x0000fbd3, 0x0000fd3f, + 0x0000fd50, 0x0000fd8f, 0x0000fd92, 0x0000fdc7, + 0x0000fdf0, 0x0000fdfd, 0x0000fe00, 0x0000fe19, + 0x0000fe20, 0x0000fe26, 0x0000fe30, 0x0000fe52, + 0x0000fe54, 0x0000fe66, 0x0000fe68, 0x0000fe6b, + 0x0000fe70, 0x0000fe74, 0x0000fe76, 0x0000fefc, + 0x0000feff, 0x0000feff, 0x0000ff01, 0x0000ffbe, + 0x0000ffc2, 0x0000ffc7, 0x0000ffca, 0x0000ffcf, + 0x0000ffd2, 0x0000ffd7, 0x0000ffda, 0x0000ffdc, + 0x0000ffe0, 0x0000ffe6, 0x0000ffe8, 0x0000ffee, + 0x0000fff9, 0x0000fffd, 0x00010000, 0x0001000b, + 0x0001000d, 0x00010026, 0x00010028, 0x0001003a, + 0x0001003c, 0x0001003d, 0x0001003f, 0x0001004d, + 0x00010050, 0x0001005d, 0x00010080, 0x000100fa, + 0x00010100, 0x00010102, 0x00010107, 0x00010133, + 0x00010137, 0x0001018a, 0x00010190, 0x0001019b, + 0x000101d0, 0x000101fd, 0x00010280, 0x0001029c, + 0x000102a0, 0x000102d0, 0x00010300, 0x0001031e, + 0x00010320, 0x00010323, 0x00010330, 0x0001034a, + 0x00010380, 0x0001039d, 0x0001039f, 0x000103c3, + 0x000103c8, 0x000103d5, 0x00010400, 0x0001049d, + 0x000104a0, 0x000104a9, 0x00010800, 0x00010805, + 0x00010808, 0x00010808, 0x0001080a, 0x00010835, + 0x00010837, 0x00010838, 0x0001083c, 0x0001083c, + 0x0001083f, 0x00010855, 0x00010857, 0x0001085f, + 0x00010900, 0x0001091b, 0x0001091f, 0x00010939, + 0x0001093f, 0x0001093f, 0x00010a00, 0x00010a03, + 0x00010a05, 0x00010a06, 0x00010a0c, 0x00010a13, + 0x00010a15, 0x00010a17, 0x00010a19, 0x00010a33, + 0x00010a38, 0x00010a3a, 0x00010a3f, 0x00010a47, + 0x00010a50, 0x00010a58, 0x00010a60, 0x00010a7f, + 0x00010b00, 0x00010b35, 0x00010b39, 0x00010b55, + 0x00010b58, 0x00010b72, 0x00010b78, 0x00010b7f, + 0x00010c00, 0x00010c48, 0x00010e60, 0x00010e7e, + 0x00011000, 0x0001104d, 0x00011052, 0x0001106f, + 0x00011080, 0x000110c1, 0x00012000, 0x0001236e, + 0x00012400, 0x00012462, 0x00012470, 0x00012473, + 0x00013000, 0x0001342e, 0x00016800, 0x00016a38, + 0x0001b000, 0x0001b001, 0x0001d000, 0x0001d0f5, + 0x0001d100, 0x0001d126, 0x0001d129, 0x0001d1dd, + 0x0001d200, 0x0001d245, 0x0001d300, 0x0001d356, + 0x0001d360, 0x0001d371, 0x0001d400, 0x0001d454, + 0x0001d456, 0x0001d49c, 0x0001d49e, 0x0001d49f, + 0x0001d4a2, 0x0001d4a2, 0x0001d4a5, 0x0001d4a6, + 0x0001d4a9, 0x0001d4ac, 0x0001d4ae, 0x0001d4b9, + 0x0001d4bb, 0x0001d4bb, 0x0001d4bd, 0x0001d4c3, + 0x0001d4c5, 0x0001d505, 0x0001d507, 0x0001d50a, + 0x0001d50d, 0x0001d514, 0x0001d516, 0x0001d51c, + 0x0001d51e, 0x0001d539, 0x0001d53b, 0x0001d53e, + 0x0001d540, 0x0001d544, 0x0001d546, 0x0001d546, + 0x0001d54a, 0x0001d550, 0x0001d552, 0x0001d6a5, + 0x0001d6a8, 0x0001d7cb, 0x0001d7ce, 0x0001d7ff, + 0x0001f000, 0x0001f02b, 0x0001f030, 0x0001f093, + 0x0001f0a0, 0x0001f0ae, 0x0001f0b1, 0x0001f0be, + 0x0001f0c1, 0x0001f0cf, 0x0001f0d1, 0x0001f0df, + 0x0001f100, 0x0001f10a, 0x0001f110, 0x0001f12e, + 0x0001f130, 0x0001f169, 0x0001f170, 0x0001f19a, + 0x0001f1e6, 0x0001f202, 0x0001f210, 0x0001f23a, + 0x0001f240, 0x0001f248, 0x0001f250, 0x0001f251, + 0x0001f300, 0x0001f320, 0x0001f330, 0x0001f335, + 0x0001f337, 0x0001f37c, 0x0001f380, 0x0001f393, + 0x0001f3a0, 0x0001f3c4, 0x0001f3c6, 0x0001f3ca, + 0x0001f3e0, 0x0001f3f0, 0x0001f400, 0x0001f43e, + 0x0001f440, 0x0001f440, 0x0001f442, 0x0001f4f7, + 0x0001f4f9, 0x0001f4fc, 0x0001f500, 0x0001f53d, + 0x0001f550, 0x0001f567, 0x0001f5fb, 0x0001f5ff, + 0x0001f601, 0x0001f610, 0x0001f612, 0x0001f614, + 0x0001f616, 0x0001f616, 0x0001f618, 0x0001f618, + 0x0001f61a, 0x0001f61a, 0x0001f61c, 0x0001f61e, + 0x0001f620, 0x0001f625, 0x0001f628, 0x0001f62b, + 0x0001f62d, 0x0001f62d, 0x0001f630, 0x0001f633, + 0x0001f635, 0x0001f640, 0x0001f645, 0x0001f64f, + 0x0001f680, 0x0001f6c5, 0x0001f700, 0x0001f773, + 0x00020000, 0x0002a6d6, 0x0002a700, 0x0002a700, + 0x0002b734, 0x0002b734, 0x0002b740, 0x0002b740, + 0x0002b81d, 0x0002b81d, 0x0002f800, 0x0002fa1d, + 0x000e0001, 0x000e0001, 0x000e0020, 0x000e007f, + 0x000e0100, 0x000e01ef, 0x000000ab, 0x000000ab, + 0x00002018, 0x00002018, 0x0000201b, 0x0000201c, + 0x0000201f, 0x0000201f, 0x00002039, 0x00002039, + 0x00002e02, 0x00002e02, 0x00002e04, 0x00002e04, + 0x00002e09, 0x00002e09, 0x00002e0c, 0x00002e0c, + 0x00002e1c, 0x00002e1c, 0x00002e20, 0x00002e20, + 0x000000bb, 0x000000bb, 0x00002019, 0x00002019, + 0x0000201d, 0x0000201d, 0x0000203a, 0x0000203a, + 0x00002e03, 0x00002e03, 0x00002e05, 0x00002e05, + 0x00002e0a, 0x00002e0a, 0x00002e0d, 0x00002e0d, + 0x00002e1d, 0x00002e1d, 0x00002e21, 0x00002e21, + 0x00000608, 0x00000608, 0x0000060b, 0x0000060b, + 0x0000060d, 0x0000060d, 0x0000061b, 0x0000061b, + 0x0000061e, 0x0000064a, 0x0000066d, 0x0000066f, + 0x00000671, 0x000006d5, 0x000006e5, 0x000006e6, + 0x000006ee, 0x000006ef, 0x000006fa, 0x0000070d, + 0x00000710, 0x00000710, 0x00000712, 0x0000072f, + 0x0000074d, 0x000007a5, 0x000007b1, 0x000007b1, + 0x0000fb50, 0x0000fbc1, 0x0000fbd3, 0x0000fd3d, + 0x0000fd50, 0x0000fd8f, 0x0000fd92, 0x0000fdc7, + 0x0000fdf0, 0x0000fdfc, 0x0000fe70, 0x0000fe74, + 0x0000fe76, 0x0000fefc +}; + +static const unsigned int _uccase_size = 2080; + +/* Starting indexes of the case tables + * UpperIndex = 0 + * LowerIndex = _uccase_len[0] + * TitleIndex = LowerIndex + _uccase_len[1] */ + +static const unsigned short _uccase_len[2] = {3102, 3126}; + +static const unsigned int _uccase_map[] = { + 0x00000041, 0x00000061, 0x00000041, + 0x00000042, 0x00000062, 0x00000042, + 0x00000043, 0x00000063, 0x00000043, + 0x00000044, 0x00000064, 0x00000044, + 0x00000045, 0x00000065, 0x00000045, + 0x00000046, 0x00000066, 0x00000046, + 0x00000047, 0x00000067, 0x00000047, + 0x00000048, 0x00000068, 0x00000048, + 0x00000049, 0x00000069, 0x00000049, + 0x0000004a, 0x0000006a, 0x0000004a, + 0x0000004b, 0x0000006b, 0x0000004b, + 0x0000004c, 0x0000006c, 0x0000004c, + 0x0000004d, 0x0000006d, 0x0000004d, + 0x0000004e, 0x0000006e, 0x0000004e, + 0x0000004f, 0x0000006f, 0x0000004f, + 0x00000050, 0x00000070, 0x00000050, + 0x00000051, 0x00000071, 0x00000051, + 0x00000052, 0x00000072, 0x00000052, + 0x00000053, 0x00000073, 0x00000053, + 0x00000054, 0x00000074, 0x00000054, + 0x00000055, 0x00000075, 0x00000055, + 0x00000056, 0x00000076, 0x00000056, + 0x00000057, 0x00000077, 0x00000057, + 0x00000058, 0x00000078, 0x00000058, + 0x00000059, 0x00000079, 0x00000059, + 0x0000005a, 0x0000007a, 0x0000005a, + 0x000000c0, 0x000000e0, 0x000000c0, + 0x000000c1, 0x000000e1, 0x000000c1, + 0x000000c2, 0x000000e2, 0x000000c2, + 0x000000c3, 0x000000e3, 0x000000c3, + 0x000000c4, 0x000000e4, 0x000000c4, + 0x000000c5, 0x000000e5, 0x000000c5, + 0x000000c6, 0x000000e6, 0x000000c6, + 0x000000c7, 0x000000e7, 0x000000c7, + 0x000000c8, 0x000000e8, 0x000000c8, + 0x000000c9, 0x000000e9, 0x000000c9, + 0x000000ca, 0x000000ea, 0x000000ca, + 0x000000cb, 0x000000eb, 0x000000cb, + 0x000000cc, 0x000000ec, 0x000000cc, + 0x000000cd, 0x000000ed, 0x000000cd, + 0x000000ce, 0x000000ee, 0x000000ce, + 0x000000cf, 0x000000ef, 0x000000cf, + 0x000000d0, 0x000000f0, 0x000000d0, + 0x000000d1, 0x000000f1, 0x000000d1, + 0x000000d2, 0x000000f2, 0x000000d2, + 0x000000d3, 0x000000f3, 0x000000d3, + 0x000000d4, 0x000000f4, 0x000000d4, + 0x000000d5, 0x000000f5, 0x000000d5, + 0x000000d6, 0x000000f6, 0x000000d6, + 0x000000d8, 0x000000f8, 0x000000d8, + 0x000000d9, 0x000000f9, 0x000000d9, + 0x000000da, 0x000000fa, 0x000000da, + 0x000000db, 0x000000fb, 0x000000db, + 0x000000dc, 0x000000fc, 0x000000dc, + 0x000000dd, 0x000000fd, 0x000000dd, + 0x000000de, 0x000000fe, 0x000000de, + 0x00000100, 0x00000101, 0x00000100, + 0x00000102, 0x00000103, 0x00000102, + 0x00000104, 0x00000105, 0x00000104, + 0x00000106, 0x00000107, 0x00000106, + 0x00000108, 0x00000109, 0x00000108, + 0x0000010a, 0x0000010b, 0x0000010a, + 0x0000010c, 0x0000010d, 0x0000010c, + 0x0000010e, 0x0000010f, 0x0000010e, + 0x00000110, 0x00000111, 0x00000110, + 0x00000112, 0x00000113, 0x00000112, + 0x00000114, 0x00000115, 0x00000114, + 0x00000116, 0x00000117, 0x00000116, + 0x00000118, 0x00000119, 0x00000118, + 0x0000011a, 0x0000011b, 0x0000011a, + 0x0000011c, 0x0000011d, 0x0000011c, + 0x0000011e, 0x0000011f, 0x0000011e, + 0x00000120, 0x00000121, 0x00000120, + 0x00000122, 0x00000123, 0x00000122, + 0x00000124, 0x00000125, 0x00000124, + 0x00000126, 0x00000127, 0x00000126, + 0x00000128, 0x00000129, 0x00000128, + 0x0000012a, 0x0000012b, 0x0000012a, + 0x0000012c, 0x0000012d, 0x0000012c, + 0x0000012e, 0x0000012f, 0x0000012e, + 0x00000130, 0x00000069, 0x00000130, + 0x00000132, 0x00000133, 0x00000132, + 0x00000134, 0x00000135, 0x00000134, + 0x00000136, 0x00000137, 0x00000136, + 0x00000139, 0x0000013a, 0x00000139, + 0x0000013b, 0x0000013c, 0x0000013b, + 0x0000013d, 0x0000013e, 0x0000013d, + 0x0000013f, 0x00000140, 0x0000013f, + 0x00000141, 0x00000142, 0x00000141, + 0x00000143, 0x00000144, 0x00000143, + 0x00000145, 0x00000146, 0x00000145, + 0x00000147, 0x00000148, 0x00000147, + 0x0000014a, 0x0000014b, 0x0000014a, + 0x0000014c, 0x0000014d, 0x0000014c, + 0x0000014e, 0x0000014f, 0x0000014e, + 0x00000150, 0x00000151, 0x00000150, + 0x00000152, 0x00000153, 0x00000152, + 0x00000154, 0x00000155, 0x00000154, + 0x00000156, 0x00000157, 0x00000156, + 0x00000158, 0x00000159, 0x00000158, + 0x0000015a, 0x0000015b, 0x0000015a, + 0x0000015c, 0x0000015d, 0x0000015c, + 0x0000015e, 0x0000015f, 0x0000015e, + 0x00000160, 0x00000161, 0x00000160, + 0x00000162, 0x00000163, 0x00000162, + 0x00000164, 0x00000165, 0x00000164, + 0x00000166, 0x00000167, 0x00000166, + 0x00000168, 0x00000169, 0x00000168, + 0x0000016a, 0x0000016b, 0x0000016a, + 0x0000016c, 0x0000016d, 0x0000016c, + 0x0000016e, 0x0000016f, 0x0000016e, + 0x00000170, 0x00000171, 0x00000170, + 0x00000172, 0x00000173, 0x00000172, + 0x00000174, 0x00000175, 0x00000174, + 0x00000176, 0x00000177, 0x00000176, + 0x00000178, 0x000000ff, 0x00000178, + 0x00000179, 0x0000017a, 0x00000179, + 0x0000017b, 0x0000017c, 0x0000017b, + 0x0000017d, 0x0000017e, 0x0000017d, + 0x00000181, 0x00000253, 0x00000181, + 0x00000182, 0x00000183, 0x00000182, + 0x00000184, 0x00000185, 0x00000184, + 0x00000186, 0x00000254, 0x00000186, + 0x00000187, 0x00000188, 0x00000187, + 0x00000189, 0x00000256, 0x00000189, + 0x0000018a, 0x00000257, 0x0000018a, + 0x0000018b, 0x0000018c, 0x0000018b, + 0x0000018e, 0x000001dd, 0x0000018e, + 0x0000018f, 0x00000259, 0x0000018f, + 0x00000190, 0x0000025b, 0x00000190, + 0x00000191, 0x00000192, 0x00000191, + 0x00000193, 0x00000260, 0x00000193, + 0x00000194, 0x00000263, 0x00000194, + 0x00000196, 0x00000269, 0x00000196, + 0x00000197, 0x00000268, 0x00000197, + 0x00000198, 0x00000199, 0x00000198, + 0x0000019c, 0x0000026f, 0x0000019c, + 0x0000019d, 0x00000272, 0x0000019d, + 0x0000019f, 0x00000275, 0x0000019f, + 0x000001a0, 0x000001a1, 0x000001a0, + 0x000001a2, 0x000001a3, 0x000001a2, + 0x000001a4, 0x000001a5, 0x000001a4, + 0x000001a6, 0x00000280, 0x000001a6, + 0x000001a7, 0x000001a8, 0x000001a7, + 0x000001a9, 0x00000283, 0x000001a9, + 0x000001ac, 0x000001ad, 0x000001ac, + 0x000001ae, 0x00000288, 0x000001ae, + 0x000001af, 0x000001b0, 0x000001af, + 0x000001b1, 0x0000028a, 0x000001b1, + 0x000001b2, 0x0000028b, 0x000001b2, + 0x000001b3, 0x000001b4, 0x000001b3, + 0x000001b5, 0x000001b6, 0x000001b5, + 0x000001b7, 0x00000292, 0x000001b7, + 0x000001b8, 0x000001b9, 0x000001b8, + 0x000001bc, 0x000001bd, 0x000001bc, + 0x000001c4, 0x000001c6, 0x000001c5, + 0x000001c7, 0x000001c9, 0x000001c8, + 0x000001ca, 0x000001cc, 0x000001cb, + 0x000001cd, 0x000001ce, 0x000001cd, + 0x000001cf, 0x000001d0, 0x000001cf, + 0x000001d1, 0x000001d2, 0x000001d1, + 0x000001d3, 0x000001d4, 0x000001d3, + 0x000001d5, 0x000001d6, 0x000001d5, + 0x000001d7, 0x000001d8, 0x000001d7, + 0x000001d9, 0x000001da, 0x000001d9, + 0x000001db, 0x000001dc, 0x000001db, + 0x000001de, 0x000001df, 0x000001de, + 0x000001e0, 0x000001e1, 0x000001e0, + 0x000001e2, 0x000001e3, 0x000001e2, + 0x000001e4, 0x000001e5, 0x000001e4, + 0x000001e6, 0x000001e7, 0x000001e6, + 0x000001e8, 0x000001e9, 0x000001e8, + 0x000001ea, 0x000001eb, 0x000001ea, + 0x000001ec, 0x000001ed, 0x000001ec, + 0x000001ee, 0x000001ef, 0x000001ee, + 0x000001f1, 0x000001f3, 0x000001f2, + 0x000001f4, 0x000001f5, 0x000001f4, + 0x000001f6, 0x00000195, 0x000001f6, + 0x000001f7, 0x000001bf, 0x000001f7, + 0x000001f8, 0x000001f9, 0x000001f8, + 0x000001fa, 0x000001fb, 0x000001fa, + 0x000001fc, 0x000001fd, 0x000001fc, + 0x000001fe, 0x000001ff, 0x000001fe, + 0x00000200, 0x00000201, 0x00000200, + 0x00000202, 0x00000203, 0x00000202, + 0x00000204, 0x00000205, 0x00000204, + 0x00000206, 0x00000207, 0x00000206, + 0x00000208, 0x00000209, 0x00000208, + 0x0000020a, 0x0000020b, 0x0000020a, + 0x0000020c, 0x0000020d, 0x0000020c, + 0x0000020e, 0x0000020f, 0x0000020e, + 0x00000210, 0x00000211, 0x00000210, + 0x00000212, 0x00000213, 0x00000212, + 0x00000214, 0x00000215, 0x00000214, + 0x00000216, 0x00000217, 0x00000216, + 0x00000218, 0x00000219, 0x00000218, + 0x0000021a, 0x0000021b, 0x0000021a, + 0x0000021c, 0x0000021d, 0x0000021c, + 0x0000021e, 0x0000021f, 0x0000021e, + 0x00000220, 0x0000019e, 0x00000220, + 0x00000222, 0x00000223, 0x00000222, + 0x00000224, 0x00000225, 0x00000224, + 0x00000226, 0x00000227, 0x00000226, + 0x00000228, 0x00000229, 0x00000228, + 0x0000022a, 0x0000022b, 0x0000022a, + 0x0000022c, 0x0000022d, 0x0000022c, + 0x0000022e, 0x0000022f, 0x0000022e, + 0x00000230, 0x00000231, 0x00000230, + 0x00000232, 0x00000233, 0x00000232, + 0x0000023a, 0x00002c65, 0x0000023a, + 0x0000023b, 0x0000023c, 0x0000023b, + 0x0000023d, 0x0000019a, 0x0000023d, + 0x0000023e, 0x00002c66, 0x0000023e, + 0x00000241, 0x00000242, 0x00000241, + 0x00000243, 0x00000180, 0x00000243, + 0x00000244, 0x00000289, 0x00000244, + 0x00000245, 0x0000028c, 0x00000245, + 0x00000246, 0x00000247, 0x00000246, + 0x00000248, 0x00000249, 0x00000248, + 0x0000024a, 0x0000024b, 0x0000024a, + 0x0000024c, 0x0000024d, 0x0000024c, + 0x0000024e, 0x0000024f, 0x0000024e, + 0x00000370, 0x00000371, 0x00000370, + 0x00000372, 0x00000373, 0x00000372, + 0x00000376, 0x00000377, 0x00000376, + 0x00000386, 0x000003ac, 0x00000386, + 0x00000388, 0x000003ad, 0x00000388, + 0x00000389, 0x000003ae, 0x00000389, + 0x0000038a, 0x000003af, 0x0000038a, + 0x0000038c, 0x000003cc, 0x0000038c, + 0x0000038e, 0x000003cd, 0x0000038e, + 0x0000038f, 0x000003ce, 0x0000038f, + 0x00000391, 0x000003b1, 0x00000391, + 0x00000392, 0x000003b2, 0x00000392, + 0x00000393, 0x000003b3, 0x00000393, + 0x00000394, 0x000003b4, 0x00000394, + 0x00000395, 0x000003b5, 0x00000395, + 0x00000396, 0x000003b6, 0x00000396, + 0x00000397, 0x000003b7, 0x00000397, + 0x00000398, 0x000003b8, 0x00000398, + 0x00000399, 0x000003b9, 0x00000399, + 0x0000039a, 0x000003ba, 0x0000039a, + 0x0000039b, 0x000003bb, 0x0000039b, + 0x0000039c, 0x000003bc, 0x0000039c, + 0x0000039d, 0x000003bd, 0x0000039d, + 0x0000039e, 0x000003be, 0x0000039e, + 0x0000039f, 0x000003bf, 0x0000039f, + 0x000003a0, 0x000003c0, 0x000003a0, + 0x000003a1, 0x000003c1, 0x000003a1, + 0x000003a3, 0x000003c3, 0x000003a3, + 0x000003a4, 0x000003c4, 0x000003a4, + 0x000003a5, 0x000003c5, 0x000003a5, + 0x000003a6, 0x000003c6, 0x000003a6, + 0x000003a7, 0x000003c7, 0x000003a7, + 0x000003a8, 0x000003c8, 0x000003a8, + 0x000003a9, 0x000003c9, 0x000003a9, + 0x000003aa, 0x000003ca, 0x000003aa, + 0x000003ab, 0x000003cb, 0x000003ab, + 0x000003cf, 0x000003d7, 0x000003cf, + 0x000003d8, 0x000003d9, 0x000003d8, + 0x000003da, 0x000003db, 0x000003da, + 0x000003dc, 0x000003dd, 0x000003dc, + 0x000003de, 0x000003df, 0x000003de, + 0x000003e0, 0x000003e1, 0x000003e0, + 0x000003e2, 0x000003e3, 0x000003e2, + 0x000003e4, 0x000003e5, 0x000003e4, + 0x000003e6, 0x000003e7, 0x000003e6, + 0x000003e8, 0x000003e9, 0x000003e8, + 0x000003ea, 0x000003eb, 0x000003ea, + 0x000003ec, 0x000003ed, 0x000003ec, + 0x000003ee, 0x000003ef, 0x000003ee, + 0x000003f4, 0x000003b8, 0x000003f4, + 0x000003f7, 0x000003f8, 0x000003f7, + 0x000003f9, 0x000003f2, 0x000003f9, + 0x000003fa, 0x000003fb, 0x000003fa, + 0x000003fd, 0x0000037b, 0x000003fd, + 0x000003fe, 0x0000037c, 0x000003fe, + 0x000003ff, 0x0000037d, 0x000003ff, + 0x00000400, 0x00000450, 0x00000400, + 0x00000401, 0x00000451, 0x00000401, + 0x00000402, 0x00000452, 0x00000402, + 0x00000403, 0x00000453, 0x00000403, + 0x00000404, 0x00000454, 0x00000404, + 0x00000405, 0x00000455, 0x00000405, + 0x00000406, 0x00000456, 0x00000406, + 0x00000407, 0x00000457, 0x00000407, + 0x00000408, 0x00000458, 0x00000408, + 0x00000409, 0x00000459, 0x00000409, + 0x0000040a, 0x0000045a, 0x0000040a, + 0x0000040b, 0x0000045b, 0x0000040b, + 0x0000040c, 0x0000045c, 0x0000040c, + 0x0000040d, 0x0000045d, 0x0000040d, + 0x0000040e, 0x0000045e, 0x0000040e, + 0x0000040f, 0x0000045f, 0x0000040f, + 0x00000410, 0x00000430, 0x00000410, + 0x00000411, 0x00000431, 0x00000411, + 0x00000412, 0x00000432, 0x00000412, + 0x00000413, 0x00000433, 0x00000413, + 0x00000414, 0x00000434, 0x00000414, + 0x00000415, 0x00000435, 0x00000415, + 0x00000416, 0x00000436, 0x00000416, + 0x00000417, 0x00000437, 0x00000417, + 0x00000418, 0x00000438, 0x00000418, + 0x00000419, 0x00000439, 0x00000419, + 0x0000041a, 0x0000043a, 0x0000041a, + 0x0000041b, 0x0000043b, 0x0000041b, + 0x0000041c, 0x0000043c, 0x0000041c, + 0x0000041d, 0x0000043d, 0x0000041d, + 0x0000041e, 0x0000043e, 0x0000041e, + 0x0000041f, 0x0000043f, 0x0000041f, + 0x00000420, 0x00000440, 0x00000420, + 0x00000421, 0x00000441, 0x00000421, + 0x00000422, 0x00000442, 0x00000422, + 0x00000423, 0x00000443, 0x00000423, + 0x00000424, 0x00000444, 0x00000424, + 0x00000425, 0x00000445, 0x00000425, + 0x00000426, 0x00000446, 0x00000426, + 0x00000427, 0x00000447, 0x00000427, + 0x00000428, 0x00000448, 0x00000428, + 0x00000429, 0x00000449, 0x00000429, + 0x0000042a, 0x0000044a, 0x0000042a, + 0x0000042b, 0x0000044b, 0x0000042b, + 0x0000042c, 0x0000044c, 0x0000042c, + 0x0000042d, 0x0000044d, 0x0000042d, + 0x0000042e, 0x0000044e, 0x0000042e, + 0x0000042f, 0x0000044f, 0x0000042f, + 0x00000460, 0x00000461, 0x00000460, + 0x00000462, 0x00000463, 0x00000462, + 0x00000464, 0x00000465, 0x00000464, + 0x00000466, 0x00000467, 0x00000466, + 0x00000468, 0x00000469, 0x00000468, + 0x0000046a, 0x0000046b, 0x0000046a, + 0x0000046c, 0x0000046d, 0x0000046c, + 0x0000046e, 0x0000046f, 0x0000046e, + 0x00000470, 0x00000471, 0x00000470, + 0x00000472, 0x00000473, 0x00000472, + 0x00000474, 0x00000475, 0x00000474, + 0x00000476, 0x00000477, 0x00000476, + 0x00000478, 0x00000479, 0x00000478, + 0x0000047a, 0x0000047b, 0x0000047a, + 0x0000047c, 0x0000047d, 0x0000047c, + 0x0000047e, 0x0000047f, 0x0000047e, + 0x00000480, 0x00000481, 0x00000480, + 0x0000048a, 0x0000048b, 0x0000048a, + 0x0000048c, 0x0000048d, 0x0000048c, + 0x0000048e, 0x0000048f, 0x0000048e, + 0x00000490, 0x00000491, 0x00000490, + 0x00000492, 0x00000493, 0x00000492, + 0x00000494, 0x00000495, 0x00000494, + 0x00000496, 0x00000497, 0x00000496, + 0x00000498, 0x00000499, 0x00000498, + 0x0000049a, 0x0000049b, 0x0000049a, + 0x0000049c, 0x0000049d, 0x0000049c, + 0x0000049e, 0x0000049f, 0x0000049e, + 0x000004a0, 0x000004a1, 0x000004a0, + 0x000004a2, 0x000004a3, 0x000004a2, + 0x000004a4, 0x000004a5, 0x000004a4, + 0x000004a6, 0x000004a7, 0x000004a6, + 0x000004a8, 0x000004a9, 0x000004a8, + 0x000004aa, 0x000004ab, 0x000004aa, + 0x000004ac, 0x000004ad, 0x000004ac, + 0x000004ae, 0x000004af, 0x000004ae, + 0x000004b0, 0x000004b1, 0x000004b0, + 0x000004b2, 0x000004b3, 0x000004b2, + 0x000004b4, 0x000004b5, 0x000004b4, + 0x000004b6, 0x000004b7, 0x000004b6, + 0x000004b8, 0x000004b9, 0x000004b8, + 0x000004ba, 0x000004bb, 0x000004ba, + 0x000004bc, 0x000004bd, 0x000004bc, + 0x000004be, 0x000004bf, 0x000004be, + 0x000004c0, 0x000004cf, 0x000004c0, + 0x000004c1, 0x000004c2, 0x000004c1, + 0x000004c3, 0x000004c4, 0x000004c3, + 0x000004c5, 0x000004c6, 0x000004c5, + 0x000004c7, 0x000004c8, 0x000004c7, + 0x000004c9, 0x000004ca, 0x000004c9, + 0x000004cb, 0x000004cc, 0x000004cb, + 0x000004cd, 0x000004ce, 0x000004cd, + 0x000004d0, 0x000004d1, 0x000004d0, + 0x000004d2, 0x000004d3, 0x000004d2, + 0x000004d4, 0x000004d5, 0x000004d4, + 0x000004d6, 0x000004d7, 0x000004d6, + 0x000004d8, 0x000004d9, 0x000004d8, + 0x000004da, 0x000004db, 0x000004da, + 0x000004dc, 0x000004dd, 0x000004dc, + 0x000004de, 0x000004df, 0x000004de, + 0x000004e0, 0x000004e1, 0x000004e0, + 0x000004e2, 0x000004e3, 0x000004e2, + 0x000004e4, 0x000004e5, 0x000004e4, + 0x000004e6, 0x000004e7, 0x000004e6, + 0x000004e8, 0x000004e9, 0x000004e8, + 0x000004ea, 0x000004eb, 0x000004ea, + 0x000004ec, 0x000004ed, 0x000004ec, + 0x000004ee, 0x000004ef, 0x000004ee, + 0x000004f0, 0x000004f1, 0x000004f0, + 0x000004f2, 0x000004f3, 0x000004f2, + 0x000004f4, 0x000004f5, 0x000004f4, + 0x000004f6, 0x000004f7, 0x000004f6, + 0x000004f8, 0x000004f9, 0x000004f8, + 0x000004fa, 0x000004fb, 0x000004fa, + 0x000004fc, 0x000004fd, 0x000004fc, + 0x000004fe, 0x000004ff, 0x000004fe, + 0x00000500, 0x00000501, 0x00000500, + 0x00000502, 0x00000503, 0x00000502, + 0x00000504, 0x00000505, 0x00000504, + 0x00000506, 0x00000507, 0x00000506, + 0x00000508, 0x00000509, 0x00000508, + 0x0000050a, 0x0000050b, 0x0000050a, + 0x0000050c, 0x0000050d, 0x0000050c, + 0x0000050e, 0x0000050f, 0x0000050e, + 0x00000510, 0x00000511, 0x00000510, + 0x00000512, 0x00000513, 0x00000512, + 0x00000514, 0x00000515, 0x00000514, + 0x00000516, 0x00000517, 0x00000516, + 0x00000518, 0x00000519, 0x00000518, + 0x0000051a, 0x0000051b, 0x0000051a, + 0x0000051c, 0x0000051d, 0x0000051c, + 0x0000051e, 0x0000051f, 0x0000051e, + 0x00000520, 0x00000521, 0x00000520, + 0x00000522, 0x00000523, 0x00000522, + 0x00000524, 0x00000525, 0x00000524, + 0x00000526, 0x00000527, 0x00000526, + 0x00000531, 0x00000561, 0x00000531, + 0x00000532, 0x00000562, 0x00000532, + 0x00000533, 0x00000563, 0x00000533, + 0x00000534, 0x00000564, 0x00000534, + 0x00000535, 0x00000565, 0x00000535, + 0x00000536, 0x00000566, 0x00000536, + 0x00000537, 0x00000567, 0x00000537, + 0x00000538, 0x00000568, 0x00000538, + 0x00000539, 0x00000569, 0x00000539, + 0x0000053a, 0x0000056a, 0x0000053a, + 0x0000053b, 0x0000056b, 0x0000053b, + 0x0000053c, 0x0000056c, 0x0000053c, + 0x0000053d, 0x0000056d, 0x0000053d, + 0x0000053e, 0x0000056e, 0x0000053e, + 0x0000053f, 0x0000056f, 0x0000053f, + 0x00000540, 0x00000570, 0x00000540, + 0x00000541, 0x00000571, 0x00000541, + 0x00000542, 0x00000572, 0x00000542, + 0x00000543, 0x00000573, 0x00000543, + 0x00000544, 0x00000574, 0x00000544, + 0x00000545, 0x00000575, 0x00000545, + 0x00000546, 0x00000576, 0x00000546, + 0x00000547, 0x00000577, 0x00000547, + 0x00000548, 0x00000578, 0x00000548, + 0x00000549, 0x00000579, 0x00000549, + 0x0000054a, 0x0000057a, 0x0000054a, + 0x0000054b, 0x0000057b, 0x0000054b, + 0x0000054c, 0x0000057c, 0x0000054c, + 0x0000054d, 0x0000057d, 0x0000054d, + 0x0000054e, 0x0000057e, 0x0000054e, + 0x0000054f, 0x0000057f, 0x0000054f, + 0x00000550, 0x00000580, 0x00000550, + 0x00000551, 0x00000581, 0x00000551, + 0x00000552, 0x00000582, 0x00000552, + 0x00000553, 0x00000583, 0x00000553, + 0x00000554, 0x00000584, 0x00000554, + 0x00000555, 0x00000585, 0x00000555, + 0x00000556, 0x00000586, 0x00000556, + 0x000010a0, 0x00002d00, 0x000010a0, + 0x000010a1, 0x00002d01, 0x000010a1, + 0x000010a2, 0x00002d02, 0x000010a2, + 0x000010a3, 0x00002d03, 0x000010a3, + 0x000010a4, 0x00002d04, 0x000010a4, + 0x000010a5, 0x00002d05, 0x000010a5, + 0x000010a6, 0x00002d06, 0x000010a6, + 0x000010a7, 0x00002d07, 0x000010a7, + 0x000010a8, 0x00002d08, 0x000010a8, + 0x000010a9, 0x00002d09, 0x000010a9, + 0x000010aa, 0x00002d0a, 0x000010aa, + 0x000010ab, 0x00002d0b, 0x000010ab, + 0x000010ac, 0x00002d0c, 0x000010ac, + 0x000010ad, 0x00002d0d, 0x000010ad, + 0x000010ae, 0x00002d0e, 0x000010ae, + 0x000010af, 0x00002d0f, 0x000010af, + 0x000010b0, 0x00002d10, 0x000010b0, + 0x000010b1, 0x00002d11, 0x000010b1, + 0x000010b2, 0x00002d12, 0x000010b2, + 0x000010b3, 0x00002d13, 0x000010b3, + 0x000010b4, 0x00002d14, 0x000010b4, + 0x000010b5, 0x00002d15, 0x000010b5, + 0x000010b6, 0x00002d16, 0x000010b6, + 0x000010b7, 0x00002d17, 0x000010b7, + 0x000010b8, 0x00002d18, 0x000010b8, + 0x000010b9, 0x00002d19, 0x000010b9, + 0x000010ba, 0x00002d1a, 0x000010ba, + 0x000010bb, 0x00002d1b, 0x000010bb, + 0x000010bc, 0x00002d1c, 0x000010bc, + 0x000010bd, 0x00002d1d, 0x000010bd, + 0x000010be, 0x00002d1e, 0x000010be, + 0x000010bf, 0x00002d1f, 0x000010bf, + 0x000010c0, 0x00002d20, 0x000010c0, + 0x000010c1, 0x00002d21, 0x000010c1, + 0x000010c2, 0x00002d22, 0x000010c2, + 0x000010c3, 0x00002d23, 0x000010c3, + 0x000010c4, 0x00002d24, 0x000010c4, + 0x000010c5, 0x00002d25, 0x000010c5, + 0x00001e00, 0x00001e01, 0x00001e00, + 0x00001e02, 0x00001e03, 0x00001e02, + 0x00001e04, 0x00001e05, 0x00001e04, + 0x00001e06, 0x00001e07, 0x00001e06, + 0x00001e08, 0x00001e09, 0x00001e08, + 0x00001e0a, 0x00001e0b, 0x00001e0a, + 0x00001e0c, 0x00001e0d, 0x00001e0c, + 0x00001e0e, 0x00001e0f, 0x00001e0e, + 0x00001e10, 0x00001e11, 0x00001e10, + 0x00001e12, 0x00001e13, 0x00001e12, + 0x00001e14, 0x00001e15, 0x00001e14, + 0x00001e16, 0x00001e17, 0x00001e16, + 0x00001e18, 0x00001e19, 0x00001e18, + 0x00001e1a, 0x00001e1b, 0x00001e1a, + 0x00001e1c, 0x00001e1d, 0x00001e1c, + 0x00001e1e, 0x00001e1f, 0x00001e1e, + 0x00001e20, 0x00001e21, 0x00001e20, + 0x00001e22, 0x00001e23, 0x00001e22, + 0x00001e24, 0x00001e25, 0x00001e24, + 0x00001e26, 0x00001e27, 0x00001e26, + 0x00001e28, 0x00001e29, 0x00001e28, + 0x00001e2a, 0x00001e2b, 0x00001e2a, + 0x00001e2c, 0x00001e2d, 0x00001e2c, + 0x00001e2e, 0x00001e2f, 0x00001e2e, + 0x00001e30, 0x00001e31, 0x00001e30, + 0x00001e32, 0x00001e33, 0x00001e32, + 0x00001e34, 0x00001e35, 0x00001e34, + 0x00001e36, 0x00001e37, 0x00001e36, + 0x00001e38, 0x00001e39, 0x00001e38, + 0x00001e3a, 0x00001e3b, 0x00001e3a, + 0x00001e3c, 0x00001e3d, 0x00001e3c, + 0x00001e3e, 0x00001e3f, 0x00001e3e, + 0x00001e40, 0x00001e41, 0x00001e40, + 0x00001e42, 0x00001e43, 0x00001e42, + 0x00001e44, 0x00001e45, 0x00001e44, + 0x00001e46, 0x00001e47, 0x00001e46, + 0x00001e48, 0x00001e49, 0x00001e48, + 0x00001e4a, 0x00001e4b, 0x00001e4a, + 0x00001e4c, 0x00001e4d, 0x00001e4c, + 0x00001e4e, 0x00001e4f, 0x00001e4e, + 0x00001e50, 0x00001e51, 0x00001e50, + 0x00001e52, 0x00001e53, 0x00001e52, + 0x00001e54, 0x00001e55, 0x00001e54, + 0x00001e56, 0x00001e57, 0x00001e56, + 0x00001e58, 0x00001e59, 0x00001e58, + 0x00001e5a, 0x00001e5b, 0x00001e5a, + 0x00001e5c, 0x00001e5d, 0x00001e5c, + 0x00001e5e, 0x00001e5f, 0x00001e5e, + 0x00001e60, 0x00001e61, 0x00001e60, + 0x00001e62, 0x00001e63, 0x00001e62, + 0x00001e64, 0x00001e65, 0x00001e64, + 0x00001e66, 0x00001e67, 0x00001e66, + 0x00001e68, 0x00001e69, 0x00001e68, + 0x00001e6a, 0x00001e6b, 0x00001e6a, + 0x00001e6c, 0x00001e6d, 0x00001e6c, + 0x00001e6e, 0x00001e6f, 0x00001e6e, + 0x00001e70, 0x00001e71, 0x00001e70, + 0x00001e72, 0x00001e73, 0x00001e72, + 0x00001e74, 0x00001e75, 0x00001e74, + 0x00001e76, 0x00001e77, 0x00001e76, + 0x00001e78, 0x00001e79, 0x00001e78, + 0x00001e7a, 0x00001e7b, 0x00001e7a, + 0x00001e7c, 0x00001e7d, 0x00001e7c, + 0x00001e7e, 0x00001e7f, 0x00001e7e, + 0x00001e80, 0x00001e81, 0x00001e80, + 0x00001e82, 0x00001e83, 0x00001e82, + 0x00001e84, 0x00001e85, 0x00001e84, + 0x00001e86, 0x00001e87, 0x00001e86, + 0x00001e88, 0x00001e89, 0x00001e88, + 0x00001e8a, 0x00001e8b, 0x00001e8a, + 0x00001e8c, 0x00001e8d, 0x00001e8c, + 0x00001e8e, 0x00001e8f, 0x00001e8e, + 0x00001e90, 0x00001e91, 0x00001e90, + 0x00001e92, 0x00001e93, 0x00001e92, + 0x00001e94, 0x00001e95, 0x00001e94, + 0x00001e9e, 0x000000df, 0x00001e9e, + 0x00001ea0, 0x00001ea1, 0x00001ea0, + 0x00001ea2, 0x00001ea3, 0x00001ea2, + 0x00001ea4, 0x00001ea5, 0x00001ea4, + 0x00001ea6, 0x00001ea7, 0x00001ea6, + 0x00001ea8, 0x00001ea9, 0x00001ea8, + 0x00001eaa, 0x00001eab, 0x00001eaa, + 0x00001eac, 0x00001ead, 0x00001eac, + 0x00001eae, 0x00001eaf, 0x00001eae, + 0x00001eb0, 0x00001eb1, 0x00001eb0, + 0x00001eb2, 0x00001eb3, 0x00001eb2, + 0x00001eb4, 0x00001eb5, 0x00001eb4, + 0x00001eb6, 0x00001eb7, 0x00001eb6, + 0x00001eb8, 0x00001eb9, 0x00001eb8, + 0x00001eba, 0x00001ebb, 0x00001eba, + 0x00001ebc, 0x00001ebd, 0x00001ebc, + 0x00001ebe, 0x00001ebf, 0x00001ebe, + 0x00001ec0, 0x00001ec1, 0x00001ec0, + 0x00001ec2, 0x00001ec3, 0x00001ec2, + 0x00001ec4, 0x00001ec5, 0x00001ec4, + 0x00001ec6, 0x00001ec7, 0x00001ec6, + 0x00001ec8, 0x00001ec9, 0x00001ec8, + 0x00001eca, 0x00001ecb, 0x00001eca, + 0x00001ecc, 0x00001ecd, 0x00001ecc, + 0x00001ece, 0x00001ecf, 0x00001ece, + 0x00001ed0, 0x00001ed1, 0x00001ed0, + 0x00001ed2, 0x00001ed3, 0x00001ed2, + 0x00001ed4, 0x00001ed5, 0x00001ed4, + 0x00001ed6, 0x00001ed7, 0x00001ed6, + 0x00001ed8, 0x00001ed9, 0x00001ed8, + 0x00001eda, 0x00001edb, 0x00001eda, + 0x00001edc, 0x00001edd, 0x00001edc, + 0x00001ede, 0x00001edf, 0x00001ede, + 0x00001ee0, 0x00001ee1, 0x00001ee0, + 0x00001ee2, 0x00001ee3, 0x00001ee2, + 0x00001ee4, 0x00001ee5, 0x00001ee4, + 0x00001ee6, 0x00001ee7, 0x00001ee6, + 0x00001ee8, 0x00001ee9, 0x00001ee8, + 0x00001eea, 0x00001eeb, 0x00001eea, + 0x00001eec, 0x00001eed, 0x00001eec, + 0x00001eee, 0x00001eef, 0x00001eee, + 0x00001ef0, 0x00001ef1, 0x00001ef0, + 0x00001ef2, 0x00001ef3, 0x00001ef2, + 0x00001ef4, 0x00001ef5, 0x00001ef4, + 0x00001ef6, 0x00001ef7, 0x00001ef6, + 0x00001ef8, 0x00001ef9, 0x00001ef8, + 0x00001efa, 0x00001efb, 0x00001efa, + 0x00001efc, 0x00001efd, 0x00001efc, + 0x00001efe, 0x00001eff, 0x00001efe, + 0x00001f08, 0x00001f00, 0x00001f08, + 0x00001f09, 0x00001f01, 0x00001f09, + 0x00001f0a, 0x00001f02, 0x00001f0a, + 0x00001f0b, 0x00001f03, 0x00001f0b, + 0x00001f0c, 0x00001f04, 0x00001f0c, + 0x00001f0d, 0x00001f05, 0x00001f0d, + 0x00001f0e, 0x00001f06, 0x00001f0e, + 0x00001f0f, 0x00001f07, 0x00001f0f, + 0x00001f18, 0x00001f10, 0x00001f18, + 0x00001f19, 0x00001f11, 0x00001f19, + 0x00001f1a, 0x00001f12, 0x00001f1a, + 0x00001f1b, 0x00001f13, 0x00001f1b, + 0x00001f1c, 0x00001f14, 0x00001f1c, + 0x00001f1d, 0x00001f15, 0x00001f1d, + 0x00001f28, 0x00001f20, 0x00001f28, + 0x00001f29, 0x00001f21, 0x00001f29, + 0x00001f2a, 0x00001f22, 0x00001f2a, + 0x00001f2b, 0x00001f23, 0x00001f2b, + 0x00001f2c, 0x00001f24, 0x00001f2c, + 0x00001f2d, 0x00001f25, 0x00001f2d, + 0x00001f2e, 0x00001f26, 0x00001f2e, + 0x00001f2f, 0x00001f27, 0x00001f2f, + 0x00001f38, 0x00001f30, 0x00001f38, + 0x00001f39, 0x00001f31, 0x00001f39, + 0x00001f3a, 0x00001f32, 0x00001f3a, + 0x00001f3b, 0x00001f33, 0x00001f3b, + 0x00001f3c, 0x00001f34, 0x00001f3c, + 0x00001f3d, 0x00001f35, 0x00001f3d, + 0x00001f3e, 0x00001f36, 0x00001f3e, + 0x00001f3f, 0x00001f37, 0x00001f3f, + 0x00001f48, 0x00001f40, 0x00001f48, + 0x00001f49, 0x00001f41, 0x00001f49, + 0x00001f4a, 0x00001f42, 0x00001f4a, + 0x00001f4b, 0x00001f43, 0x00001f4b, + 0x00001f4c, 0x00001f44, 0x00001f4c, + 0x00001f4d, 0x00001f45, 0x00001f4d, + 0x00001f59, 0x00001f51, 0x00001f59, + 0x00001f5b, 0x00001f53, 0x00001f5b, + 0x00001f5d, 0x00001f55, 0x00001f5d, + 0x00001f5f, 0x00001f57, 0x00001f5f, + 0x00001f68, 0x00001f60, 0x00001f68, + 0x00001f69, 0x00001f61, 0x00001f69, + 0x00001f6a, 0x00001f62, 0x00001f6a, + 0x00001f6b, 0x00001f63, 0x00001f6b, + 0x00001f6c, 0x00001f64, 0x00001f6c, + 0x00001f6d, 0x00001f65, 0x00001f6d, + 0x00001f6e, 0x00001f66, 0x00001f6e, + 0x00001f6f, 0x00001f67, 0x00001f6f, + 0x00001f88, 0x00001f80, 0x00001f88, + 0x00001f89, 0x00001f81, 0x00001f89, + 0x00001f8a, 0x00001f82, 0x00001f8a, + 0x00001f8b, 0x00001f83, 0x00001f8b, + 0x00001f8c, 0x00001f84, 0x00001f8c, + 0x00001f8d, 0x00001f85, 0x00001f8d, + 0x00001f8e, 0x00001f86, 0x00001f8e, + 0x00001f8f, 0x00001f87, 0x00001f8f, + 0x00001f98, 0x00001f90, 0x00001f98, + 0x00001f99, 0x00001f91, 0x00001f99, + 0x00001f9a, 0x00001f92, 0x00001f9a, + 0x00001f9b, 0x00001f93, 0x00001f9b, + 0x00001f9c, 0x00001f94, 0x00001f9c, + 0x00001f9d, 0x00001f95, 0x00001f9d, + 0x00001f9e, 0x00001f96, 0x00001f9e, + 0x00001f9f, 0x00001f97, 0x00001f9f, + 0x00001fa8, 0x00001fa0, 0x00001fa8, + 0x00001fa9, 0x00001fa1, 0x00001fa9, + 0x00001faa, 0x00001fa2, 0x00001faa, + 0x00001fab, 0x00001fa3, 0x00001fab, + 0x00001fac, 0x00001fa4, 0x00001fac, + 0x00001fad, 0x00001fa5, 0x00001fad, + 0x00001fae, 0x00001fa6, 0x00001fae, + 0x00001faf, 0x00001fa7, 0x00001faf, + 0x00001fb8, 0x00001fb0, 0x00001fb8, + 0x00001fb9, 0x00001fb1, 0x00001fb9, + 0x00001fba, 0x00001f70, 0x00001fba, + 0x00001fbb, 0x00001f71, 0x00001fbb, + 0x00001fbc, 0x00001fb3, 0x00001fbc, + 0x00001fc8, 0x00001f72, 0x00001fc8, + 0x00001fc9, 0x00001f73, 0x00001fc9, + 0x00001fca, 0x00001f74, 0x00001fca, + 0x00001fcb, 0x00001f75, 0x00001fcb, + 0x00001fcc, 0x00001fc3, 0x00001fcc, + 0x00001fd8, 0x00001fd0, 0x00001fd8, + 0x00001fd9, 0x00001fd1, 0x00001fd9, + 0x00001fda, 0x00001f76, 0x00001fda, + 0x00001fdb, 0x00001f77, 0x00001fdb, + 0x00001fe8, 0x00001fe0, 0x00001fe8, + 0x00001fe9, 0x00001fe1, 0x00001fe9, + 0x00001fea, 0x00001f7a, 0x00001fea, + 0x00001feb, 0x00001f7b, 0x00001feb, + 0x00001fec, 0x00001fe5, 0x00001fec, + 0x00001ff8, 0x00001f78, 0x00001ff8, + 0x00001ff9, 0x00001f79, 0x00001ff9, + 0x00001ffa, 0x00001f7c, 0x00001ffa, + 0x00001ffb, 0x00001f7d, 0x00001ffb, + 0x00001ffc, 0x00001ff3, 0x00001ffc, + 0x00002126, 0x000003c9, 0x00002126, + 0x0000212a, 0x0000006b, 0x0000212a, + 0x0000212b, 0x000000e5, 0x0000212b, + 0x00002132, 0x0000214e, 0x00002132, + 0x00002160, 0x00002170, 0x00002160, + 0x00002161, 0x00002171, 0x00002161, + 0x00002162, 0x00002172, 0x00002162, + 0x00002163, 0x00002173, 0x00002163, + 0x00002164, 0x00002174, 0x00002164, + 0x00002165, 0x00002175, 0x00002165, + 0x00002166, 0x00002176, 0x00002166, + 0x00002167, 0x00002177, 0x00002167, + 0x00002168, 0x00002178, 0x00002168, + 0x00002169, 0x00002179, 0x00002169, + 0x0000216a, 0x0000217a, 0x0000216a, + 0x0000216b, 0x0000217b, 0x0000216b, + 0x0000216c, 0x0000217c, 0x0000216c, + 0x0000216d, 0x0000217d, 0x0000216d, + 0x0000216e, 0x0000217e, 0x0000216e, + 0x0000216f, 0x0000217f, 0x0000216f, + 0x00002183, 0x00002184, 0x00002183, + 0x000024b6, 0x000024d0, 0x000024b6, + 0x000024b7, 0x000024d1, 0x000024b7, + 0x000024b8, 0x000024d2, 0x000024b8, + 0x000024b9, 0x000024d3, 0x000024b9, + 0x000024ba, 0x000024d4, 0x000024ba, + 0x000024bb, 0x000024d5, 0x000024bb, + 0x000024bc, 0x000024d6, 0x000024bc, + 0x000024bd, 0x000024d7, 0x000024bd, + 0x000024be, 0x000024d8, 0x000024be, + 0x000024bf, 0x000024d9, 0x000024bf, + 0x000024c0, 0x000024da, 0x000024c0, + 0x000024c1, 0x000024db, 0x000024c1, + 0x000024c2, 0x000024dc, 0x000024c2, + 0x000024c3, 0x000024dd, 0x000024c3, + 0x000024c4, 0x000024de, 0x000024c4, + 0x000024c5, 0x000024df, 0x000024c5, + 0x000024c6, 0x000024e0, 0x000024c6, + 0x000024c7, 0x000024e1, 0x000024c7, + 0x000024c8, 0x000024e2, 0x000024c8, + 0x000024c9, 0x000024e3, 0x000024c9, + 0x000024ca, 0x000024e4, 0x000024ca, + 0x000024cb, 0x000024e5, 0x000024cb, + 0x000024cc, 0x000024e6, 0x000024cc, + 0x000024cd, 0x000024e7, 0x000024cd, + 0x000024ce, 0x000024e8, 0x000024ce, + 0x000024cf, 0x000024e9, 0x000024cf, + 0x00002c00, 0x00002c30, 0x00002c00, + 0x00002c01, 0x00002c31, 0x00002c01, + 0x00002c02, 0x00002c32, 0x00002c02, + 0x00002c03, 0x00002c33, 0x00002c03, + 0x00002c04, 0x00002c34, 0x00002c04, + 0x00002c05, 0x00002c35, 0x00002c05, + 0x00002c06, 0x00002c36, 0x00002c06, + 0x00002c07, 0x00002c37, 0x00002c07, + 0x00002c08, 0x00002c38, 0x00002c08, + 0x00002c09, 0x00002c39, 0x00002c09, + 0x00002c0a, 0x00002c3a, 0x00002c0a, + 0x00002c0b, 0x00002c3b, 0x00002c0b, + 0x00002c0c, 0x00002c3c, 0x00002c0c, + 0x00002c0d, 0x00002c3d, 0x00002c0d, + 0x00002c0e, 0x00002c3e, 0x00002c0e, + 0x00002c0f, 0x00002c3f, 0x00002c0f, + 0x00002c10, 0x00002c40, 0x00002c10, + 0x00002c11, 0x00002c41, 0x00002c11, + 0x00002c12, 0x00002c42, 0x00002c12, + 0x00002c13, 0x00002c43, 0x00002c13, + 0x00002c14, 0x00002c44, 0x00002c14, + 0x00002c15, 0x00002c45, 0x00002c15, + 0x00002c16, 0x00002c46, 0x00002c16, + 0x00002c17, 0x00002c47, 0x00002c17, + 0x00002c18, 0x00002c48, 0x00002c18, + 0x00002c19, 0x00002c49, 0x00002c19, + 0x00002c1a, 0x00002c4a, 0x00002c1a, + 0x00002c1b, 0x00002c4b, 0x00002c1b, + 0x00002c1c, 0x00002c4c, 0x00002c1c, + 0x00002c1d, 0x00002c4d, 0x00002c1d, + 0x00002c1e, 0x00002c4e, 0x00002c1e, + 0x00002c1f, 0x00002c4f, 0x00002c1f, + 0x00002c20, 0x00002c50, 0x00002c20, + 0x00002c21, 0x00002c51, 0x00002c21, + 0x00002c22, 0x00002c52, 0x00002c22, + 0x00002c23, 0x00002c53, 0x00002c23, + 0x00002c24, 0x00002c54, 0x00002c24, + 0x00002c25, 0x00002c55, 0x00002c25, + 0x00002c26, 0x00002c56, 0x00002c26, + 0x00002c27, 0x00002c57, 0x00002c27, + 0x00002c28, 0x00002c58, 0x00002c28, + 0x00002c29, 0x00002c59, 0x00002c29, + 0x00002c2a, 0x00002c5a, 0x00002c2a, + 0x00002c2b, 0x00002c5b, 0x00002c2b, + 0x00002c2c, 0x00002c5c, 0x00002c2c, + 0x00002c2d, 0x00002c5d, 0x00002c2d, + 0x00002c2e, 0x00002c5e, 0x00002c2e, + 0x00002c60, 0x00002c61, 0x00002c60, + 0x00002c62, 0x0000026b, 0x00002c62, + 0x00002c63, 0x00001d7d, 0x00002c63, + 0x00002c64, 0x0000027d, 0x00002c64, + 0x00002c67, 0x00002c68, 0x00002c67, + 0x00002c69, 0x00002c6a, 0x00002c69, + 0x00002c6b, 0x00002c6c, 0x00002c6b, + 0x00002c6d, 0x00000251, 0x00002c6d, + 0x00002c6e, 0x00000271, 0x00002c6e, + 0x00002c6f, 0x00000250, 0x00002c6f, + 0x00002c70, 0x00000252, 0x00002c70, + 0x00002c72, 0x00002c73, 0x00002c72, + 0x00002c75, 0x00002c76, 0x00002c75, + 0x00002c7e, 0x0000023f, 0x00002c7e, + 0x00002c7f, 0x00000240, 0x00002c7f, + 0x00002c80, 0x00002c81, 0x00002c80, + 0x00002c82, 0x00002c83, 0x00002c82, + 0x00002c84, 0x00002c85, 0x00002c84, + 0x00002c86, 0x00002c87, 0x00002c86, + 0x00002c88, 0x00002c89, 0x00002c88, + 0x00002c8a, 0x00002c8b, 0x00002c8a, + 0x00002c8c, 0x00002c8d, 0x00002c8c, + 0x00002c8e, 0x00002c8f, 0x00002c8e, + 0x00002c90, 0x00002c91, 0x00002c90, + 0x00002c92, 0x00002c93, 0x00002c92, + 0x00002c94, 0x00002c95, 0x00002c94, + 0x00002c96, 0x00002c97, 0x00002c96, + 0x00002c98, 0x00002c99, 0x00002c98, + 0x00002c9a, 0x00002c9b, 0x00002c9a, + 0x00002c9c, 0x00002c9d, 0x00002c9c, + 0x00002c9e, 0x00002c9f, 0x00002c9e, + 0x00002ca0, 0x00002ca1, 0x00002ca0, + 0x00002ca2, 0x00002ca3, 0x00002ca2, + 0x00002ca4, 0x00002ca5, 0x00002ca4, + 0x00002ca6, 0x00002ca7, 0x00002ca6, + 0x00002ca8, 0x00002ca9, 0x00002ca8, + 0x00002caa, 0x00002cab, 0x00002caa, + 0x00002cac, 0x00002cad, 0x00002cac, + 0x00002cae, 0x00002caf, 0x00002cae, + 0x00002cb0, 0x00002cb1, 0x00002cb0, + 0x00002cb2, 0x00002cb3, 0x00002cb2, + 0x00002cb4, 0x00002cb5, 0x00002cb4, + 0x00002cb6, 0x00002cb7, 0x00002cb6, + 0x00002cb8, 0x00002cb9, 0x00002cb8, + 0x00002cba, 0x00002cbb, 0x00002cba, + 0x00002cbc, 0x00002cbd, 0x00002cbc, + 0x00002cbe, 0x00002cbf, 0x00002cbe, + 0x00002cc0, 0x00002cc1, 0x00002cc0, + 0x00002cc2, 0x00002cc3, 0x00002cc2, + 0x00002cc4, 0x00002cc5, 0x00002cc4, + 0x00002cc6, 0x00002cc7, 0x00002cc6, + 0x00002cc8, 0x00002cc9, 0x00002cc8, + 0x00002cca, 0x00002ccb, 0x00002cca, + 0x00002ccc, 0x00002ccd, 0x00002ccc, + 0x00002cce, 0x00002ccf, 0x00002cce, + 0x00002cd0, 0x00002cd1, 0x00002cd0, + 0x00002cd2, 0x00002cd3, 0x00002cd2, + 0x00002cd4, 0x00002cd5, 0x00002cd4, + 0x00002cd6, 0x00002cd7, 0x00002cd6, + 0x00002cd8, 0x00002cd9, 0x00002cd8, + 0x00002cda, 0x00002cdb, 0x00002cda, + 0x00002cdc, 0x00002cdd, 0x00002cdc, + 0x00002cde, 0x00002cdf, 0x00002cde, + 0x00002ce0, 0x00002ce1, 0x00002ce0, + 0x00002ce2, 0x00002ce3, 0x00002ce2, + 0x00002ceb, 0x00002cec, 0x00002ceb, + 0x00002ced, 0x00002cee, 0x00002ced, + 0x0000a640, 0x0000a641, 0x0000a640, + 0x0000a642, 0x0000a643, 0x0000a642, + 0x0000a644, 0x0000a645, 0x0000a644, + 0x0000a646, 0x0000a647, 0x0000a646, + 0x0000a648, 0x0000a649, 0x0000a648, + 0x0000a64a, 0x0000a64b, 0x0000a64a, + 0x0000a64c, 0x0000a64d, 0x0000a64c, + 0x0000a64e, 0x0000a64f, 0x0000a64e, + 0x0000a650, 0x0000a651, 0x0000a650, + 0x0000a652, 0x0000a653, 0x0000a652, + 0x0000a654, 0x0000a655, 0x0000a654, + 0x0000a656, 0x0000a657, 0x0000a656, + 0x0000a658, 0x0000a659, 0x0000a658, + 0x0000a65a, 0x0000a65b, 0x0000a65a, + 0x0000a65c, 0x0000a65d, 0x0000a65c, + 0x0000a65e, 0x0000a65f, 0x0000a65e, + 0x0000a660, 0x0000a661, 0x0000a660, + 0x0000a662, 0x0000a663, 0x0000a662, + 0x0000a664, 0x0000a665, 0x0000a664, + 0x0000a666, 0x0000a667, 0x0000a666, + 0x0000a668, 0x0000a669, 0x0000a668, + 0x0000a66a, 0x0000a66b, 0x0000a66a, + 0x0000a66c, 0x0000a66d, 0x0000a66c, + 0x0000a680, 0x0000a681, 0x0000a680, + 0x0000a682, 0x0000a683, 0x0000a682, + 0x0000a684, 0x0000a685, 0x0000a684, + 0x0000a686, 0x0000a687, 0x0000a686, + 0x0000a688, 0x0000a689, 0x0000a688, + 0x0000a68a, 0x0000a68b, 0x0000a68a, + 0x0000a68c, 0x0000a68d, 0x0000a68c, + 0x0000a68e, 0x0000a68f, 0x0000a68e, + 0x0000a690, 0x0000a691, 0x0000a690, + 0x0000a692, 0x0000a693, 0x0000a692, + 0x0000a694, 0x0000a695, 0x0000a694, + 0x0000a696, 0x0000a697, 0x0000a696, + 0x0000a722, 0x0000a723, 0x0000a722, + 0x0000a724, 0x0000a725, 0x0000a724, + 0x0000a726, 0x0000a727, 0x0000a726, + 0x0000a728, 0x0000a729, 0x0000a728, + 0x0000a72a, 0x0000a72b, 0x0000a72a, + 0x0000a72c, 0x0000a72d, 0x0000a72c, + 0x0000a72e, 0x0000a72f, 0x0000a72e, + 0x0000a732, 0x0000a733, 0x0000a732, + 0x0000a734, 0x0000a735, 0x0000a734, + 0x0000a736, 0x0000a737, 0x0000a736, + 0x0000a738, 0x0000a739, 0x0000a738, + 0x0000a73a, 0x0000a73b, 0x0000a73a, + 0x0000a73c, 0x0000a73d, 0x0000a73c, + 0x0000a73e, 0x0000a73f, 0x0000a73e, + 0x0000a740, 0x0000a741, 0x0000a740, + 0x0000a742, 0x0000a743, 0x0000a742, + 0x0000a744, 0x0000a745, 0x0000a744, + 0x0000a746, 0x0000a747, 0x0000a746, + 0x0000a748, 0x0000a749, 0x0000a748, + 0x0000a74a, 0x0000a74b, 0x0000a74a, + 0x0000a74c, 0x0000a74d, 0x0000a74c, + 0x0000a74e, 0x0000a74f, 0x0000a74e, + 0x0000a750, 0x0000a751, 0x0000a750, + 0x0000a752, 0x0000a753, 0x0000a752, + 0x0000a754, 0x0000a755, 0x0000a754, + 0x0000a756, 0x0000a757, 0x0000a756, + 0x0000a758, 0x0000a759, 0x0000a758, + 0x0000a75a, 0x0000a75b, 0x0000a75a, + 0x0000a75c, 0x0000a75d, 0x0000a75c, + 0x0000a75e, 0x0000a75f, 0x0000a75e, + 0x0000a760, 0x0000a761, 0x0000a760, + 0x0000a762, 0x0000a763, 0x0000a762, + 0x0000a764, 0x0000a765, 0x0000a764, + 0x0000a766, 0x0000a767, 0x0000a766, + 0x0000a768, 0x0000a769, 0x0000a768, + 0x0000a76a, 0x0000a76b, 0x0000a76a, + 0x0000a76c, 0x0000a76d, 0x0000a76c, + 0x0000a76e, 0x0000a76f, 0x0000a76e, + 0x0000a779, 0x0000a77a, 0x0000a779, + 0x0000a77b, 0x0000a77c, 0x0000a77b, + 0x0000a77d, 0x00001d79, 0x0000a77d, + 0x0000a77e, 0x0000a77f, 0x0000a77e, + 0x0000a780, 0x0000a781, 0x0000a780, + 0x0000a782, 0x0000a783, 0x0000a782, + 0x0000a784, 0x0000a785, 0x0000a784, + 0x0000a786, 0x0000a787, 0x0000a786, + 0x0000a78b, 0x0000a78c, 0x0000a78b, + 0x0000a78d, 0x00000265, 0x0000a78d, + 0x0000a790, 0x0000a791, 0x0000a790, + 0x0000a7a0, 0x0000a7a1, 0x0000a7a0, + 0x0000a7a2, 0x0000a7a3, 0x0000a7a2, + 0x0000a7a4, 0x0000a7a5, 0x0000a7a4, + 0x0000a7a6, 0x0000a7a7, 0x0000a7a6, + 0x0000a7a8, 0x0000a7a9, 0x0000a7a8, + 0x0000ff21, 0x0000ff41, 0x0000ff21, + 0x0000ff22, 0x0000ff42, 0x0000ff22, + 0x0000ff23, 0x0000ff43, 0x0000ff23, + 0x0000ff24, 0x0000ff44, 0x0000ff24, + 0x0000ff25, 0x0000ff45, 0x0000ff25, + 0x0000ff26, 0x0000ff46, 0x0000ff26, + 0x0000ff27, 0x0000ff47, 0x0000ff27, + 0x0000ff28, 0x0000ff48, 0x0000ff28, + 0x0000ff29, 0x0000ff49, 0x0000ff29, + 0x0000ff2a, 0x0000ff4a, 0x0000ff2a, + 0x0000ff2b, 0x0000ff4b, 0x0000ff2b, + 0x0000ff2c, 0x0000ff4c, 0x0000ff2c, + 0x0000ff2d, 0x0000ff4d, 0x0000ff2d, + 0x0000ff2e, 0x0000ff4e, 0x0000ff2e, + 0x0000ff2f, 0x0000ff4f, 0x0000ff2f, + 0x0000ff30, 0x0000ff50, 0x0000ff30, + 0x0000ff31, 0x0000ff51, 0x0000ff31, + 0x0000ff32, 0x0000ff52, 0x0000ff32, + 0x0000ff33, 0x0000ff53, 0x0000ff33, + 0x0000ff34, 0x0000ff54, 0x0000ff34, + 0x0000ff35, 0x0000ff55, 0x0000ff35, + 0x0000ff36, 0x0000ff56, 0x0000ff36, + 0x0000ff37, 0x0000ff57, 0x0000ff37, + 0x0000ff38, 0x0000ff58, 0x0000ff38, + 0x0000ff39, 0x0000ff59, 0x0000ff39, + 0x0000ff3a, 0x0000ff5a, 0x0000ff3a, + 0x00010400, 0x00010428, 0x00010400, + 0x00010401, 0x00010429, 0x00010401, + 0x00010402, 0x0001042a, 0x00010402, + 0x00010403, 0x0001042b, 0x00010403, + 0x00010404, 0x0001042c, 0x00010404, + 0x00010405, 0x0001042d, 0x00010405, + 0x00010406, 0x0001042e, 0x00010406, + 0x00010407, 0x0001042f, 0x00010407, + 0x00010408, 0x00010430, 0x00010408, + 0x00010409, 0x00010431, 0x00010409, + 0x0001040a, 0x00010432, 0x0001040a, + 0x0001040b, 0x00010433, 0x0001040b, + 0x0001040c, 0x00010434, 0x0001040c, + 0x0001040d, 0x00010435, 0x0001040d, + 0x0001040e, 0x00010436, 0x0001040e, + 0x0001040f, 0x00010437, 0x0001040f, + 0x00010410, 0x00010438, 0x00010410, + 0x00010411, 0x00010439, 0x00010411, + 0x00010412, 0x0001043a, 0x00010412, + 0x00010413, 0x0001043b, 0x00010413, + 0x00010414, 0x0001043c, 0x00010414, + 0x00010415, 0x0001043d, 0x00010415, + 0x00010416, 0x0001043e, 0x00010416, + 0x00010417, 0x0001043f, 0x00010417, + 0x00010418, 0x00010440, 0x00010418, + 0x00010419, 0x00010441, 0x00010419, + 0x0001041a, 0x00010442, 0x0001041a, + 0x0001041b, 0x00010443, 0x0001041b, + 0x0001041c, 0x00010444, 0x0001041c, + 0x0001041d, 0x00010445, 0x0001041d, + 0x0001041e, 0x00010446, 0x0001041e, + 0x0001041f, 0x00010447, 0x0001041f, + 0x00010420, 0x00010448, 0x00010420, + 0x00010421, 0x00010449, 0x00010421, + 0x00010422, 0x0001044a, 0x00010422, + 0x00010423, 0x0001044b, 0x00010423, + 0x00010424, 0x0001044c, 0x00010424, + 0x00010425, 0x0001044d, 0x00010425, + 0x00010426, 0x0001044e, 0x00010426, + 0x00010427, 0x0001044f, 0x00010427, + 0x00000061, 0x00000041, 0x00000041, + 0x00000062, 0x00000042, 0x00000042, + 0x00000063, 0x00000043, 0x00000043, + 0x00000064, 0x00000044, 0x00000044, + 0x00000065, 0x00000045, 0x00000045, + 0x00000066, 0x00000046, 0x00000046, + 0x00000067, 0x00000047, 0x00000047, + 0x00000068, 0x00000048, 0x00000048, + 0x00000069, 0x00000049, 0x00000049, + 0x0000006a, 0x0000004a, 0x0000004a, + 0x0000006b, 0x0000004b, 0x0000004b, + 0x0000006c, 0x0000004c, 0x0000004c, + 0x0000006d, 0x0000004d, 0x0000004d, + 0x0000006e, 0x0000004e, 0x0000004e, + 0x0000006f, 0x0000004f, 0x0000004f, + 0x00000070, 0x00000050, 0x00000050, + 0x00000071, 0x00000051, 0x00000051, + 0x00000072, 0x00000052, 0x00000052, + 0x00000073, 0x00000053, 0x00000053, + 0x00000074, 0x00000054, 0x00000054, + 0x00000075, 0x00000055, 0x00000055, + 0x00000076, 0x00000056, 0x00000056, + 0x00000077, 0x00000057, 0x00000057, + 0x00000078, 0x00000058, 0x00000058, + 0x00000079, 0x00000059, 0x00000059, + 0x0000007a, 0x0000005a, 0x0000005a, + 0x000000b5, 0x0000039c, 0x0000039c, + 0x000000e0, 0x000000c0, 0x000000c0, + 0x000000e1, 0x000000c1, 0x000000c1, + 0x000000e2, 0x000000c2, 0x000000c2, + 0x000000e3, 0x000000c3, 0x000000c3, + 0x000000e4, 0x000000c4, 0x000000c4, + 0x000000e5, 0x000000c5, 0x000000c5, + 0x000000e6, 0x000000c6, 0x000000c6, + 0x000000e7, 0x000000c7, 0x000000c7, + 0x000000e8, 0x000000c8, 0x000000c8, + 0x000000e9, 0x000000c9, 0x000000c9, + 0x000000ea, 0x000000ca, 0x000000ca, + 0x000000eb, 0x000000cb, 0x000000cb, + 0x000000ec, 0x000000cc, 0x000000cc, + 0x000000ed, 0x000000cd, 0x000000cd, + 0x000000ee, 0x000000ce, 0x000000ce, + 0x000000ef, 0x000000cf, 0x000000cf, + 0x000000f0, 0x000000d0, 0x000000d0, + 0x000000f1, 0x000000d1, 0x000000d1, + 0x000000f2, 0x000000d2, 0x000000d2, + 0x000000f3, 0x000000d3, 0x000000d3, + 0x000000f4, 0x000000d4, 0x000000d4, + 0x000000f5, 0x000000d5, 0x000000d5, + 0x000000f6, 0x000000d6, 0x000000d6, + 0x000000f8, 0x000000d8, 0x000000d8, + 0x000000f9, 0x000000d9, 0x000000d9, + 0x000000fa, 0x000000da, 0x000000da, + 0x000000fb, 0x000000db, 0x000000db, + 0x000000fc, 0x000000dc, 0x000000dc, + 0x000000fd, 0x000000dd, 0x000000dd, + 0x000000fe, 0x000000de, 0x000000de, + 0x000000ff, 0x00000178, 0x00000178, + 0x00000101, 0x00000100, 0x00000100, + 0x00000103, 0x00000102, 0x00000102, + 0x00000105, 0x00000104, 0x00000104, + 0x00000107, 0x00000106, 0x00000106, + 0x00000109, 0x00000108, 0x00000108, + 0x0000010b, 0x0000010a, 0x0000010a, + 0x0000010d, 0x0000010c, 0x0000010c, + 0x0000010f, 0x0000010e, 0x0000010e, + 0x00000111, 0x00000110, 0x00000110, + 0x00000113, 0x00000112, 0x00000112, + 0x00000115, 0x00000114, 0x00000114, + 0x00000117, 0x00000116, 0x00000116, + 0x00000119, 0x00000118, 0x00000118, + 0x0000011b, 0x0000011a, 0x0000011a, + 0x0000011d, 0x0000011c, 0x0000011c, + 0x0000011f, 0x0000011e, 0x0000011e, + 0x00000121, 0x00000120, 0x00000120, + 0x00000123, 0x00000122, 0x00000122, + 0x00000125, 0x00000124, 0x00000124, + 0x00000127, 0x00000126, 0x00000126, + 0x00000129, 0x00000128, 0x00000128, + 0x0000012b, 0x0000012a, 0x0000012a, + 0x0000012d, 0x0000012c, 0x0000012c, + 0x0000012f, 0x0000012e, 0x0000012e, + 0x00000131, 0x00000049, 0x00000049, + 0x00000133, 0x00000132, 0x00000132, + 0x00000135, 0x00000134, 0x00000134, + 0x00000137, 0x00000136, 0x00000136, + 0x0000013a, 0x00000139, 0x00000139, + 0x0000013c, 0x0000013b, 0x0000013b, + 0x0000013e, 0x0000013d, 0x0000013d, + 0x00000140, 0x0000013f, 0x0000013f, + 0x00000142, 0x00000141, 0x00000141, + 0x00000144, 0x00000143, 0x00000143, + 0x00000146, 0x00000145, 0x00000145, + 0x00000148, 0x00000147, 0x00000147, + 0x0000014b, 0x0000014a, 0x0000014a, + 0x0000014d, 0x0000014c, 0x0000014c, + 0x0000014f, 0x0000014e, 0x0000014e, + 0x00000151, 0x00000150, 0x00000150, + 0x00000153, 0x00000152, 0x00000152, + 0x00000155, 0x00000154, 0x00000154, + 0x00000157, 0x00000156, 0x00000156, + 0x00000159, 0x00000158, 0x00000158, + 0x0000015b, 0x0000015a, 0x0000015a, + 0x0000015d, 0x0000015c, 0x0000015c, + 0x0000015f, 0x0000015e, 0x0000015e, + 0x00000161, 0x00000160, 0x00000160, + 0x00000163, 0x00000162, 0x00000162, + 0x00000165, 0x00000164, 0x00000164, + 0x00000167, 0x00000166, 0x00000166, + 0x00000169, 0x00000168, 0x00000168, + 0x0000016b, 0x0000016a, 0x0000016a, + 0x0000016d, 0x0000016c, 0x0000016c, + 0x0000016f, 0x0000016e, 0x0000016e, + 0x00000171, 0x00000170, 0x00000170, + 0x00000173, 0x00000172, 0x00000172, + 0x00000175, 0x00000174, 0x00000174, + 0x00000177, 0x00000176, 0x00000176, + 0x0000017a, 0x00000179, 0x00000179, + 0x0000017c, 0x0000017b, 0x0000017b, + 0x0000017e, 0x0000017d, 0x0000017d, + 0x0000017f, 0x00000053, 0x00000053, + 0x00000180, 0x00000243, 0x00000243, + 0x00000183, 0x00000182, 0x00000182, + 0x00000185, 0x00000184, 0x00000184, + 0x00000188, 0x00000187, 0x00000187, + 0x0000018c, 0x0000018b, 0x0000018b, + 0x00000192, 0x00000191, 0x00000191, + 0x00000195, 0x000001f6, 0x000001f6, + 0x00000199, 0x00000198, 0x00000198, + 0x0000019a, 0x0000023d, 0x0000023d, + 0x0000019e, 0x00000220, 0x00000220, + 0x000001a1, 0x000001a0, 0x000001a0, + 0x000001a3, 0x000001a2, 0x000001a2, + 0x000001a5, 0x000001a4, 0x000001a4, + 0x000001a8, 0x000001a7, 0x000001a7, + 0x000001ad, 0x000001ac, 0x000001ac, + 0x000001b0, 0x000001af, 0x000001af, + 0x000001b4, 0x000001b3, 0x000001b3, + 0x000001b6, 0x000001b5, 0x000001b5, + 0x000001b9, 0x000001b8, 0x000001b8, + 0x000001bd, 0x000001bc, 0x000001bc, + 0x000001bf, 0x000001f7, 0x000001f7, + 0x000001c6, 0x000001c4, 0x000001c5, + 0x000001c9, 0x000001c7, 0x000001c8, + 0x000001cc, 0x000001ca, 0x000001cb, + 0x000001ce, 0x000001cd, 0x000001cd, + 0x000001d0, 0x000001cf, 0x000001cf, + 0x000001d2, 0x000001d1, 0x000001d1, + 0x000001d4, 0x000001d3, 0x000001d3, + 0x000001d6, 0x000001d5, 0x000001d5, + 0x000001d8, 0x000001d7, 0x000001d7, + 0x000001da, 0x000001d9, 0x000001d9, + 0x000001dc, 0x000001db, 0x000001db, + 0x000001dd, 0x0000018e, 0x0000018e, + 0x000001df, 0x000001de, 0x000001de, + 0x000001e1, 0x000001e0, 0x000001e0, + 0x000001e3, 0x000001e2, 0x000001e2, + 0x000001e5, 0x000001e4, 0x000001e4, + 0x000001e7, 0x000001e6, 0x000001e6, + 0x000001e9, 0x000001e8, 0x000001e8, + 0x000001eb, 0x000001ea, 0x000001ea, + 0x000001ed, 0x000001ec, 0x000001ec, + 0x000001ef, 0x000001ee, 0x000001ee, + 0x000001f3, 0x000001f1, 0x000001f2, + 0x000001f5, 0x000001f4, 0x000001f4, + 0x000001f9, 0x000001f8, 0x000001f8, + 0x000001fb, 0x000001fa, 0x000001fa, + 0x000001fd, 0x000001fc, 0x000001fc, + 0x000001ff, 0x000001fe, 0x000001fe, + 0x00000201, 0x00000200, 0x00000200, + 0x00000203, 0x00000202, 0x00000202, + 0x00000205, 0x00000204, 0x00000204, + 0x00000207, 0x00000206, 0x00000206, + 0x00000209, 0x00000208, 0x00000208, + 0x0000020b, 0x0000020a, 0x0000020a, + 0x0000020d, 0x0000020c, 0x0000020c, + 0x0000020f, 0x0000020e, 0x0000020e, + 0x00000211, 0x00000210, 0x00000210, + 0x00000213, 0x00000212, 0x00000212, + 0x00000215, 0x00000214, 0x00000214, + 0x00000217, 0x00000216, 0x00000216, + 0x00000219, 0x00000218, 0x00000218, + 0x0000021b, 0x0000021a, 0x0000021a, + 0x0000021d, 0x0000021c, 0x0000021c, + 0x0000021f, 0x0000021e, 0x0000021e, + 0x00000223, 0x00000222, 0x00000222, + 0x00000225, 0x00000224, 0x00000224, + 0x00000227, 0x00000226, 0x00000226, + 0x00000229, 0x00000228, 0x00000228, + 0x0000022b, 0x0000022a, 0x0000022a, + 0x0000022d, 0x0000022c, 0x0000022c, + 0x0000022f, 0x0000022e, 0x0000022e, + 0x00000231, 0x00000230, 0x00000230, + 0x00000233, 0x00000232, 0x00000232, + 0x0000023c, 0x0000023b, 0x0000023b, + 0x0000023f, 0x00002c7e, 0x00002c7e, + 0x00000240, 0x00002c7f, 0x00002c7f, + 0x00000242, 0x00000241, 0x00000241, + 0x00000247, 0x00000246, 0x00000246, + 0x00000249, 0x00000248, 0x00000248, + 0x0000024b, 0x0000024a, 0x0000024a, + 0x0000024d, 0x0000024c, 0x0000024c, + 0x0000024f, 0x0000024e, 0x0000024e, + 0x00000250, 0x00002c6f, 0x00002c6f, + 0x00000251, 0x00002c6d, 0x00002c6d, + 0x00000252, 0x00002c70, 0x00002c70, + 0x00000253, 0x00000181, 0x00000181, + 0x00000254, 0x00000186, 0x00000186, + 0x00000256, 0x00000189, 0x00000189, + 0x00000257, 0x0000018a, 0x0000018a, + 0x00000259, 0x0000018f, 0x0000018f, + 0x0000025b, 0x00000190, 0x00000190, + 0x00000260, 0x00000193, 0x00000193, + 0x00000263, 0x00000194, 0x00000194, + 0x00000265, 0x0000a78d, 0x0000a78d, + 0x00000268, 0x00000197, 0x00000197, + 0x00000269, 0x00000196, 0x00000196, + 0x0000026b, 0x00002c62, 0x00002c62, + 0x0000026f, 0x0000019c, 0x0000019c, + 0x00000271, 0x00002c6e, 0x00002c6e, + 0x00000272, 0x0000019d, 0x0000019d, + 0x00000275, 0x0000019f, 0x0000019f, + 0x0000027d, 0x00002c64, 0x00002c64, + 0x00000280, 0x000001a6, 0x000001a6, + 0x00000283, 0x000001a9, 0x000001a9, + 0x00000288, 0x000001ae, 0x000001ae, + 0x00000289, 0x00000244, 0x00000244, + 0x0000028a, 0x000001b1, 0x000001b1, + 0x0000028b, 0x000001b2, 0x000001b2, + 0x0000028c, 0x00000245, 0x00000245, + 0x00000292, 0x000001b7, 0x000001b7, + 0x00000345, 0x00000399, 0x00000399, + 0x00000371, 0x00000370, 0x00000370, + 0x00000373, 0x00000372, 0x00000372, + 0x00000377, 0x00000376, 0x00000376, + 0x0000037b, 0x000003fd, 0x000003fd, + 0x0000037c, 0x000003fe, 0x000003fe, + 0x0000037d, 0x000003ff, 0x000003ff, + 0x000003ac, 0x00000386, 0x00000386, + 0x000003ad, 0x00000388, 0x00000388, + 0x000003ae, 0x00000389, 0x00000389, + 0x000003af, 0x0000038a, 0x0000038a, + 0x000003b1, 0x00000391, 0x00000391, + 0x000003b2, 0x00000392, 0x00000392, + 0x000003b3, 0x00000393, 0x00000393, + 0x000003b4, 0x00000394, 0x00000394, + 0x000003b5, 0x00000395, 0x00000395, + 0x000003b6, 0x00000396, 0x00000396, + 0x000003b7, 0x00000397, 0x00000397, + 0x000003b8, 0x00000398, 0x00000398, + 0x000003b9, 0x00000399, 0x00000399, + 0x000003ba, 0x0000039a, 0x0000039a, + 0x000003bb, 0x0000039b, 0x0000039b, + 0x000003bc, 0x0000039c, 0x0000039c, + 0x000003bd, 0x0000039d, 0x0000039d, + 0x000003be, 0x0000039e, 0x0000039e, + 0x000003bf, 0x0000039f, 0x0000039f, + 0x000003c0, 0x000003a0, 0x000003a0, + 0x000003c1, 0x000003a1, 0x000003a1, + 0x000003c2, 0x000003a3, 0x000003a3, + 0x000003c3, 0x000003a3, 0x000003a3, + 0x000003c4, 0x000003a4, 0x000003a4, + 0x000003c5, 0x000003a5, 0x000003a5, + 0x000003c6, 0x000003a6, 0x000003a6, + 0x000003c7, 0x000003a7, 0x000003a7, + 0x000003c8, 0x000003a8, 0x000003a8, + 0x000003c9, 0x000003a9, 0x000003a9, + 0x000003ca, 0x000003aa, 0x000003aa, + 0x000003cb, 0x000003ab, 0x000003ab, + 0x000003cc, 0x0000038c, 0x0000038c, + 0x000003cd, 0x0000038e, 0x0000038e, + 0x000003ce, 0x0000038f, 0x0000038f, + 0x000003d0, 0x00000392, 0x00000392, + 0x000003d1, 0x00000398, 0x00000398, + 0x000003d5, 0x000003a6, 0x000003a6, + 0x000003d6, 0x000003a0, 0x000003a0, + 0x000003d7, 0x000003cf, 0x000003cf, + 0x000003d9, 0x000003d8, 0x000003d8, + 0x000003db, 0x000003da, 0x000003da, + 0x000003dd, 0x000003dc, 0x000003dc, + 0x000003df, 0x000003de, 0x000003de, + 0x000003e1, 0x000003e0, 0x000003e0, + 0x000003e3, 0x000003e2, 0x000003e2, + 0x000003e5, 0x000003e4, 0x000003e4, + 0x000003e7, 0x000003e6, 0x000003e6, + 0x000003e9, 0x000003e8, 0x000003e8, + 0x000003eb, 0x000003ea, 0x000003ea, + 0x000003ed, 0x000003ec, 0x000003ec, + 0x000003ef, 0x000003ee, 0x000003ee, + 0x000003f0, 0x0000039a, 0x0000039a, + 0x000003f1, 0x000003a1, 0x000003a1, + 0x000003f2, 0x000003f9, 0x000003f9, + 0x000003f5, 0x00000395, 0x00000395, + 0x000003f8, 0x000003f7, 0x000003f7, + 0x000003fb, 0x000003fa, 0x000003fa, + 0x00000430, 0x00000410, 0x00000410, + 0x00000431, 0x00000411, 0x00000411, + 0x00000432, 0x00000412, 0x00000412, + 0x00000433, 0x00000413, 0x00000413, + 0x00000434, 0x00000414, 0x00000414, + 0x00000435, 0x00000415, 0x00000415, + 0x00000436, 0x00000416, 0x00000416, + 0x00000437, 0x00000417, 0x00000417, + 0x00000438, 0x00000418, 0x00000418, + 0x00000439, 0x00000419, 0x00000419, + 0x0000043a, 0x0000041a, 0x0000041a, + 0x0000043b, 0x0000041b, 0x0000041b, + 0x0000043c, 0x0000041c, 0x0000041c, + 0x0000043d, 0x0000041d, 0x0000041d, + 0x0000043e, 0x0000041e, 0x0000041e, + 0x0000043f, 0x0000041f, 0x0000041f, + 0x00000440, 0x00000420, 0x00000420, + 0x00000441, 0x00000421, 0x00000421, + 0x00000442, 0x00000422, 0x00000422, + 0x00000443, 0x00000423, 0x00000423, + 0x00000444, 0x00000424, 0x00000424, + 0x00000445, 0x00000425, 0x00000425, + 0x00000446, 0x00000426, 0x00000426, + 0x00000447, 0x00000427, 0x00000427, + 0x00000448, 0x00000428, 0x00000428, + 0x00000449, 0x00000429, 0x00000429, + 0x0000044a, 0x0000042a, 0x0000042a, + 0x0000044b, 0x0000042b, 0x0000042b, + 0x0000044c, 0x0000042c, 0x0000042c, + 0x0000044d, 0x0000042d, 0x0000042d, + 0x0000044e, 0x0000042e, 0x0000042e, + 0x0000044f, 0x0000042f, 0x0000042f, + 0x00000450, 0x00000400, 0x00000400, + 0x00000451, 0x00000401, 0x00000401, + 0x00000452, 0x00000402, 0x00000402, + 0x00000453, 0x00000403, 0x00000403, + 0x00000454, 0x00000404, 0x00000404, + 0x00000455, 0x00000405, 0x00000405, + 0x00000456, 0x00000406, 0x00000406, + 0x00000457, 0x00000407, 0x00000407, + 0x00000458, 0x00000408, 0x00000408, + 0x00000459, 0x00000409, 0x00000409, + 0x0000045a, 0x0000040a, 0x0000040a, + 0x0000045b, 0x0000040b, 0x0000040b, + 0x0000045c, 0x0000040c, 0x0000040c, + 0x0000045d, 0x0000040d, 0x0000040d, + 0x0000045e, 0x0000040e, 0x0000040e, + 0x0000045f, 0x0000040f, 0x0000040f, + 0x00000461, 0x00000460, 0x00000460, + 0x00000463, 0x00000462, 0x00000462, + 0x00000465, 0x00000464, 0x00000464, + 0x00000467, 0x00000466, 0x00000466, + 0x00000469, 0x00000468, 0x00000468, + 0x0000046b, 0x0000046a, 0x0000046a, + 0x0000046d, 0x0000046c, 0x0000046c, + 0x0000046f, 0x0000046e, 0x0000046e, + 0x00000471, 0x00000470, 0x00000470, + 0x00000473, 0x00000472, 0x00000472, + 0x00000475, 0x00000474, 0x00000474, + 0x00000477, 0x00000476, 0x00000476, + 0x00000479, 0x00000478, 0x00000478, + 0x0000047b, 0x0000047a, 0x0000047a, + 0x0000047d, 0x0000047c, 0x0000047c, + 0x0000047f, 0x0000047e, 0x0000047e, + 0x00000481, 0x00000480, 0x00000480, + 0x0000048b, 0x0000048a, 0x0000048a, + 0x0000048d, 0x0000048c, 0x0000048c, + 0x0000048f, 0x0000048e, 0x0000048e, + 0x00000491, 0x00000490, 0x00000490, + 0x00000493, 0x00000492, 0x00000492, + 0x00000495, 0x00000494, 0x00000494, + 0x00000497, 0x00000496, 0x00000496, + 0x00000499, 0x00000498, 0x00000498, + 0x0000049b, 0x0000049a, 0x0000049a, + 0x0000049d, 0x0000049c, 0x0000049c, + 0x0000049f, 0x0000049e, 0x0000049e, + 0x000004a1, 0x000004a0, 0x000004a0, + 0x000004a3, 0x000004a2, 0x000004a2, + 0x000004a5, 0x000004a4, 0x000004a4, + 0x000004a7, 0x000004a6, 0x000004a6, + 0x000004a9, 0x000004a8, 0x000004a8, + 0x000004ab, 0x000004aa, 0x000004aa, + 0x000004ad, 0x000004ac, 0x000004ac, + 0x000004af, 0x000004ae, 0x000004ae, + 0x000004b1, 0x000004b0, 0x000004b0, + 0x000004b3, 0x000004b2, 0x000004b2, + 0x000004b5, 0x000004b4, 0x000004b4, + 0x000004b7, 0x000004b6, 0x000004b6, + 0x000004b9, 0x000004b8, 0x000004b8, + 0x000004bb, 0x000004ba, 0x000004ba, + 0x000004bd, 0x000004bc, 0x000004bc, + 0x000004bf, 0x000004be, 0x000004be, + 0x000004c2, 0x000004c1, 0x000004c1, + 0x000004c4, 0x000004c3, 0x000004c3, + 0x000004c6, 0x000004c5, 0x000004c5, + 0x000004c8, 0x000004c7, 0x000004c7, + 0x000004ca, 0x000004c9, 0x000004c9, + 0x000004cc, 0x000004cb, 0x000004cb, + 0x000004ce, 0x000004cd, 0x000004cd, + 0x000004cf, 0x000004c0, 0x000004c0, + 0x000004d1, 0x000004d0, 0x000004d0, + 0x000004d3, 0x000004d2, 0x000004d2, + 0x000004d5, 0x000004d4, 0x000004d4, + 0x000004d7, 0x000004d6, 0x000004d6, + 0x000004d9, 0x000004d8, 0x000004d8, + 0x000004db, 0x000004da, 0x000004da, + 0x000004dd, 0x000004dc, 0x000004dc, + 0x000004df, 0x000004de, 0x000004de, + 0x000004e1, 0x000004e0, 0x000004e0, + 0x000004e3, 0x000004e2, 0x000004e2, + 0x000004e5, 0x000004e4, 0x000004e4, + 0x000004e7, 0x000004e6, 0x000004e6, + 0x000004e9, 0x000004e8, 0x000004e8, + 0x000004eb, 0x000004ea, 0x000004ea, + 0x000004ed, 0x000004ec, 0x000004ec, + 0x000004ef, 0x000004ee, 0x000004ee, + 0x000004f1, 0x000004f0, 0x000004f0, + 0x000004f3, 0x000004f2, 0x000004f2, + 0x000004f5, 0x000004f4, 0x000004f4, + 0x000004f7, 0x000004f6, 0x000004f6, + 0x000004f9, 0x000004f8, 0x000004f8, + 0x000004fb, 0x000004fa, 0x000004fa, + 0x000004fd, 0x000004fc, 0x000004fc, + 0x000004ff, 0x000004fe, 0x000004fe, + 0x00000501, 0x00000500, 0x00000500, + 0x00000503, 0x00000502, 0x00000502, + 0x00000505, 0x00000504, 0x00000504, + 0x00000507, 0x00000506, 0x00000506, + 0x00000509, 0x00000508, 0x00000508, + 0x0000050b, 0x0000050a, 0x0000050a, + 0x0000050d, 0x0000050c, 0x0000050c, + 0x0000050f, 0x0000050e, 0x0000050e, + 0x00000511, 0x00000510, 0x00000510, + 0x00000513, 0x00000512, 0x00000512, + 0x00000515, 0x00000514, 0x00000514, + 0x00000517, 0x00000516, 0x00000516, + 0x00000519, 0x00000518, 0x00000518, + 0x0000051b, 0x0000051a, 0x0000051a, + 0x0000051d, 0x0000051c, 0x0000051c, + 0x0000051f, 0x0000051e, 0x0000051e, + 0x00000521, 0x00000520, 0x00000520, + 0x00000523, 0x00000522, 0x00000522, + 0x00000525, 0x00000524, 0x00000524, + 0x00000527, 0x00000526, 0x00000526, + 0x00000561, 0x00000531, 0x00000531, + 0x00000562, 0x00000532, 0x00000532, + 0x00000563, 0x00000533, 0x00000533, + 0x00000564, 0x00000534, 0x00000534, + 0x00000565, 0x00000535, 0x00000535, + 0x00000566, 0x00000536, 0x00000536, + 0x00000567, 0x00000537, 0x00000537, + 0x00000568, 0x00000538, 0x00000538, + 0x00000569, 0x00000539, 0x00000539, + 0x0000056a, 0x0000053a, 0x0000053a, + 0x0000056b, 0x0000053b, 0x0000053b, + 0x0000056c, 0x0000053c, 0x0000053c, + 0x0000056d, 0x0000053d, 0x0000053d, + 0x0000056e, 0x0000053e, 0x0000053e, + 0x0000056f, 0x0000053f, 0x0000053f, + 0x00000570, 0x00000540, 0x00000540, + 0x00000571, 0x00000541, 0x00000541, + 0x00000572, 0x00000542, 0x00000542, + 0x00000573, 0x00000543, 0x00000543, + 0x00000574, 0x00000544, 0x00000544, + 0x00000575, 0x00000545, 0x00000545, + 0x00000576, 0x00000546, 0x00000546, + 0x00000577, 0x00000547, 0x00000547, + 0x00000578, 0x00000548, 0x00000548, + 0x00000579, 0x00000549, 0x00000549, + 0x0000057a, 0x0000054a, 0x0000054a, + 0x0000057b, 0x0000054b, 0x0000054b, + 0x0000057c, 0x0000054c, 0x0000054c, + 0x0000057d, 0x0000054d, 0x0000054d, + 0x0000057e, 0x0000054e, 0x0000054e, + 0x0000057f, 0x0000054f, 0x0000054f, + 0x00000580, 0x00000550, 0x00000550, + 0x00000581, 0x00000551, 0x00000551, + 0x00000582, 0x00000552, 0x00000552, + 0x00000583, 0x00000553, 0x00000553, + 0x00000584, 0x00000554, 0x00000554, + 0x00000585, 0x00000555, 0x00000555, + 0x00000586, 0x00000556, 0x00000556, + 0x00001d79, 0x0000a77d, 0x0000a77d, + 0x00001d7d, 0x00002c63, 0x00002c63, + 0x00001e01, 0x00001e00, 0x00001e00, + 0x00001e03, 0x00001e02, 0x00001e02, + 0x00001e05, 0x00001e04, 0x00001e04, + 0x00001e07, 0x00001e06, 0x00001e06, + 0x00001e09, 0x00001e08, 0x00001e08, + 0x00001e0b, 0x00001e0a, 0x00001e0a, + 0x00001e0d, 0x00001e0c, 0x00001e0c, + 0x00001e0f, 0x00001e0e, 0x00001e0e, + 0x00001e11, 0x00001e10, 0x00001e10, + 0x00001e13, 0x00001e12, 0x00001e12, + 0x00001e15, 0x00001e14, 0x00001e14, + 0x00001e17, 0x00001e16, 0x00001e16, + 0x00001e19, 0x00001e18, 0x00001e18, + 0x00001e1b, 0x00001e1a, 0x00001e1a, + 0x00001e1d, 0x00001e1c, 0x00001e1c, + 0x00001e1f, 0x00001e1e, 0x00001e1e, + 0x00001e21, 0x00001e20, 0x00001e20, + 0x00001e23, 0x00001e22, 0x00001e22, + 0x00001e25, 0x00001e24, 0x00001e24, + 0x00001e27, 0x00001e26, 0x00001e26, + 0x00001e29, 0x00001e28, 0x00001e28, + 0x00001e2b, 0x00001e2a, 0x00001e2a, + 0x00001e2d, 0x00001e2c, 0x00001e2c, + 0x00001e2f, 0x00001e2e, 0x00001e2e, + 0x00001e31, 0x00001e30, 0x00001e30, + 0x00001e33, 0x00001e32, 0x00001e32, + 0x00001e35, 0x00001e34, 0x00001e34, + 0x00001e37, 0x00001e36, 0x00001e36, + 0x00001e39, 0x00001e38, 0x00001e38, + 0x00001e3b, 0x00001e3a, 0x00001e3a, + 0x00001e3d, 0x00001e3c, 0x00001e3c, + 0x00001e3f, 0x00001e3e, 0x00001e3e, + 0x00001e41, 0x00001e40, 0x00001e40, + 0x00001e43, 0x00001e42, 0x00001e42, + 0x00001e45, 0x00001e44, 0x00001e44, + 0x00001e47, 0x00001e46, 0x00001e46, + 0x00001e49, 0x00001e48, 0x00001e48, + 0x00001e4b, 0x00001e4a, 0x00001e4a, + 0x00001e4d, 0x00001e4c, 0x00001e4c, + 0x00001e4f, 0x00001e4e, 0x00001e4e, + 0x00001e51, 0x00001e50, 0x00001e50, + 0x00001e53, 0x00001e52, 0x00001e52, + 0x00001e55, 0x00001e54, 0x00001e54, + 0x00001e57, 0x00001e56, 0x00001e56, + 0x00001e59, 0x00001e58, 0x00001e58, + 0x00001e5b, 0x00001e5a, 0x00001e5a, + 0x00001e5d, 0x00001e5c, 0x00001e5c, + 0x00001e5f, 0x00001e5e, 0x00001e5e, + 0x00001e61, 0x00001e60, 0x00001e60, + 0x00001e63, 0x00001e62, 0x00001e62, + 0x00001e65, 0x00001e64, 0x00001e64, + 0x00001e67, 0x00001e66, 0x00001e66, + 0x00001e69, 0x00001e68, 0x00001e68, + 0x00001e6b, 0x00001e6a, 0x00001e6a, + 0x00001e6d, 0x00001e6c, 0x00001e6c, + 0x00001e6f, 0x00001e6e, 0x00001e6e, + 0x00001e71, 0x00001e70, 0x00001e70, + 0x00001e73, 0x00001e72, 0x00001e72, + 0x00001e75, 0x00001e74, 0x00001e74, + 0x00001e77, 0x00001e76, 0x00001e76, + 0x00001e79, 0x00001e78, 0x00001e78, + 0x00001e7b, 0x00001e7a, 0x00001e7a, + 0x00001e7d, 0x00001e7c, 0x00001e7c, + 0x00001e7f, 0x00001e7e, 0x00001e7e, + 0x00001e81, 0x00001e80, 0x00001e80, + 0x00001e83, 0x00001e82, 0x00001e82, + 0x00001e85, 0x00001e84, 0x00001e84, + 0x00001e87, 0x00001e86, 0x00001e86, + 0x00001e89, 0x00001e88, 0x00001e88, + 0x00001e8b, 0x00001e8a, 0x00001e8a, + 0x00001e8d, 0x00001e8c, 0x00001e8c, + 0x00001e8f, 0x00001e8e, 0x00001e8e, + 0x00001e91, 0x00001e90, 0x00001e90, + 0x00001e93, 0x00001e92, 0x00001e92, + 0x00001e95, 0x00001e94, 0x00001e94, + 0x00001e9b, 0x00001e60, 0x00001e60, + 0x00001ea1, 0x00001ea0, 0x00001ea0, + 0x00001ea3, 0x00001ea2, 0x00001ea2, + 0x00001ea5, 0x00001ea4, 0x00001ea4, + 0x00001ea7, 0x00001ea6, 0x00001ea6, + 0x00001ea9, 0x00001ea8, 0x00001ea8, + 0x00001eab, 0x00001eaa, 0x00001eaa, + 0x00001ead, 0x00001eac, 0x00001eac, + 0x00001eaf, 0x00001eae, 0x00001eae, + 0x00001eb1, 0x00001eb0, 0x00001eb0, + 0x00001eb3, 0x00001eb2, 0x00001eb2, + 0x00001eb5, 0x00001eb4, 0x00001eb4, + 0x00001eb7, 0x00001eb6, 0x00001eb6, + 0x00001eb9, 0x00001eb8, 0x00001eb8, + 0x00001ebb, 0x00001eba, 0x00001eba, + 0x00001ebd, 0x00001ebc, 0x00001ebc, + 0x00001ebf, 0x00001ebe, 0x00001ebe, + 0x00001ec1, 0x00001ec0, 0x00001ec0, + 0x00001ec3, 0x00001ec2, 0x00001ec2, + 0x00001ec5, 0x00001ec4, 0x00001ec4, + 0x00001ec7, 0x00001ec6, 0x00001ec6, + 0x00001ec9, 0x00001ec8, 0x00001ec8, + 0x00001ecb, 0x00001eca, 0x00001eca, + 0x00001ecd, 0x00001ecc, 0x00001ecc, + 0x00001ecf, 0x00001ece, 0x00001ece, + 0x00001ed1, 0x00001ed0, 0x00001ed0, + 0x00001ed3, 0x00001ed2, 0x00001ed2, + 0x00001ed5, 0x00001ed4, 0x00001ed4, + 0x00001ed7, 0x00001ed6, 0x00001ed6, + 0x00001ed9, 0x00001ed8, 0x00001ed8, + 0x00001edb, 0x00001eda, 0x00001eda, + 0x00001edd, 0x00001edc, 0x00001edc, + 0x00001edf, 0x00001ede, 0x00001ede, + 0x00001ee1, 0x00001ee0, 0x00001ee0, + 0x00001ee3, 0x00001ee2, 0x00001ee2, + 0x00001ee5, 0x00001ee4, 0x00001ee4, + 0x00001ee7, 0x00001ee6, 0x00001ee6, + 0x00001ee9, 0x00001ee8, 0x00001ee8, + 0x00001eeb, 0x00001eea, 0x00001eea, + 0x00001eed, 0x00001eec, 0x00001eec, + 0x00001eef, 0x00001eee, 0x00001eee, + 0x00001ef1, 0x00001ef0, 0x00001ef0, + 0x00001ef3, 0x00001ef2, 0x00001ef2, + 0x00001ef5, 0x00001ef4, 0x00001ef4, + 0x00001ef7, 0x00001ef6, 0x00001ef6, + 0x00001ef9, 0x00001ef8, 0x00001ef8, + 0x00001efb, 0x00001efa, 0x00001efa, + 0x00001efd, 0x00001efc, 0x00001efc, + 0x00001eff, 0x00001efe, 0x00001efe, + 0x00001f00, 0x00001f08, 0x00001f08, + 0x00001f01, 0x00001f09, 0x00001f09, + 0x00001f02, 0x00001f0a, 0x00001f0a, + 0x00001f03, 0x00001f0b, 0x00001f0b, + 0x00001f04, 0x00001f0c, 0x00001f0c, + 0x00001f05, 0x00001f0d, 0x00001f0d, + 0x00001f06, 0x00001f0e, 0x00001f0e, + 0x00001f07, 0x00001f0f, 0x00001f0f, + 0x00001f10, 0x00001f18, 0x00001f18, + 0x00001f11, 0x00001f19, 0x00001f19, + 0x00001f12, 0x00001f1a, 0x00001f1a, + 0x00001f13, 0x00001f1b, 0x00001f1b, + 0x00001f14, 0x00001f1c, 0x00001f1c, + 0x00001f15, 0x00001f1d, 0x00001f1d, + 0x00001f20, 0x00001f28, 0x00001f28, + 0x00001f21, 0x00001f29, 0x00001f29, + 0x00001f22, 0x00001f2a, 0x00001f2a, + 0x00001f23, 0x00001f2b, 0x00001f2b, + 0x00001f24, 0x00001f2c, 0x00001f2c, + 0x00001f25, 0x00001f2d, 0x00001f2d, + 0x00001f26, 0x00001f2e, 0x00001f2e, + 0x00001f27, 0x00001f2f, 0x00001f2f, + 0x00001f30, 0x00001f38, 0x00001f38, + 0x00001f31, 0x00001f39, 0x00001f39, + 0x00001f32, 0x00001f3a, 0x00001f3a, + 0x00001f33, 0x00001f3b, 0x00001f3b, + 0x00001f34, 0x00001f3c, 0x00001f3c, + 0x00001f35, 0x00001f3d, 0x00001f3d, + 0x00001f36, 0x00001f3e, 0x00001f3e, + 0x00001f37, 0x00001f3f, 0x00001f3f, + 0x00001f40, 0x00001f48, 0x00001f48, + 0x00001f41, 0x00001f49, 0x00001f49, + 0x00001f42, 0x00001f4a, 0x00001f4a, + 0x00001f43, 0x00001f4b, 0x00001f4b, + 0x00001f44, 0x00001f4c, 0x00001f4c, + 0x00001f45, 0x00001f4d, 0x00001f4d, + 0x00001f51, 0x00001f59, 0x00001f59, + 0x00001f53, 0x00001f5b, 0x00001f5b, + 0x00001f55, 0x00001f5d, 0x00001f5d, + 0x00001f57, 0x00001f5f, 0x00001f5f, + 0x00001f60, 0x00001f68, 0x00001f68, + 0x00001f61, 0x00001f69, 0x00001f69, + 0x00001f62, 0x00001f6a, 0x00001f6a, + 0x00001f63, 0x00001f6b, 0x00001f6b, + 0x00001f64, 0x00001f6c, 0x00001f6c, + 0x00001f65, 0x00001f6d, 0x00001f6d, + 0x00001f66, 0x00001f6e, 0x00001f6e, + 0x00001f67, 0x00001f6f, 0x00001f6f, + 0x00001f70, 0x00001fba, 0x00001fba, + 0x00001f71, 0x00001fbb, 0x00001fbb, + 0x00001f72, 0x00001fc8, 0x00001fc8, + 0x00001f73, 0x00001fc9, 0x00001fc9, + 0x00001f74, 0x00001fca, 0x00001fca, + 0x00001f75, 0x00001fcb, 0x00001fcb, + 0x00001f76, 0x00001fda, 0x00001fda, + 0x00001f77, 0x00001fdb, 0x00001fdb, + 0x00001f78, 0x00001ff8, 0x00001ff8, + 0x00001f79, 0x00001ff9, 0x00001ff9, + 0x00001f7a, 0x00001fea, 0x00001fea, + 0x00001f7b, 0x00001feb, 0x00001feb, + 0x00001f7c, 0x00001ffa, 0x00001ffa, + 0x00001f7d, 0x00001ffb, 0x00001ffb, + 0x00001f80, 0x00001f88, 0x00001f88, + 0x00001f81, 0x00001f89, 0x00001f89, + 0x00001f82, 0x00001f8a, 0x00001f8a, + 0x00001f83, 0x00001f8b, 0x00001f8b, + 0x00001f84, 0x00001f8c, 0x00001f8c, + 0x00001f85, 0x00001f8d, 0x00001f8d, + 0x00001f86, 0x00001f8e, 0x00001f8e, + 0x00001f87, 0x00001f8f, 0x00001f8f, + 0x00001f90, 0x00001f98, 0x00001f98, + 0x00001f91, 0x00001f99, 0x00001f99, + 0x00001f92, 0x00001f9a, 0x00001f9a, + 0x00001f93, 0x00001f9b, 0x00001f9b, + 0x00001f94, 0x00001f9c, 0x00001f9c, + 0x00001f95, 0x00001f9d, 0x00001f9d, + 0x00001f96, 0x00001f9e, 0x00001f9e, + 0x00001f97, 0x00001f9f, 0x00001f9f, + 0x00001fa0, 0x00001fa8, 0x00001fa8, + 0x00001fa1, 0x00001fa9, 0x00001fa9, + 0x00001fa2, 0x00001faa, 0x00001faa, + 0x00001fa3, 0x00001fab, 0x00001fab, + 0x00001fa4, 0x00001fac, 0x00001fac, + 0x00001fa5, 0x00001fad, 0x00001fad, + 0x00001fa6, 0x00001fae, 0x00001fae, + 0x00001fa7, 0x00001faf, 0x00001faf, + 0x00001fb0, 0x00001fb8, 0x00001fb8, + 0x00001fb1, 0x00001fb9, 0x00001fb9, + 0x00001fb3, 0x00001fbc, 0x00001fbc, + 0x00001fbe, 0x00000399, 0x00000399, + 0x00001fc3, 0x00001fcc, 0x00001fcc, + 0x00001fd0, 0x00001fd8, 0x00001fd8, + 0x00001fd1, 0x00001fd9, 0x00001fd9, + 0x00001fe0, 0x00001fe8, 0x00001fe8, + 0x00001fe1, 0x00001fe9, 0x00001fe9, + 0x00001fe5, 0x00001fec, 0x00001fec, + 0x00001ff3, 0x00001ffc, 0x00001ffc, + 0x0000214e, 0x00002132, 0x00002132, + 0x00002170, 0x00002160, 0x00002160, + 0x00002171, 0x00002161, 0x00002161, + 0x00002172, 0x00002162, 0x00002162, + 0x00002173, 0x00002163, 0x00002163, + 0x00002174, 0x00002164, 0x00002164, + 0x00002175, 0x00002165, 0x00002165, + 0x00002176, 0x00002166, 0x00002166, + 0x00002177, 0x00002167, 0x00002167, + 0x00002178, 0x00002168, 0x00002168, + 0x00002179, 0x00002169, 0x00002169, + 0x0000217a, 0x0000216a, 0x0000216a, + 0x0000217b, 0x0000216b, 0x0000216b, + 0x0000217c, 0x0000216c, 0x0000216c, + 0x0000217d, 0x0000216d, 0x0000216d, + 0x0000217e, 0x0000216e, 0x0000216e, + 0x0000217f, 0x0000216f, 0x0000216f, + 0x00002184, 0x00002183, 0x00002183, + 0x000024d0, 0x000024b6, 0x000024b6, + 0x000024d1, 0x000024b7, 0x000024b7, + 0x000024d2, 0x000024b8, 0x000024b8, + 0x000024d3, 0x000024b9, 0x000024b9, + 0x000024d4, 0x000024ba, 0x000024ba, + 0x000024d5, 0x000024bb, 0x000024bb, + 0x000024d6, 0x000024bc, 0x000024bc, + 0x000024d7, 0x000024bd, 0x000024bd, + 0x000024d8, 0x000024be, 0x000024be, + 0x000024d9, 0x000024bf, 0x000024bf, + 0x000024da, 0x000024c0, 0x000024c0, + 0x000024db, 0x000024c1, 0x000024c1, + 0x000024dc, 0x000024c2, 0x000024c2, + 0x000024dd, 0x000024c3, 0x000024c3, + 0x000024de, 0x000024c4, 0x000024c4, + 0x000024df, 0x000024c5, 0x000024c5, + 0x000024e0, 0x000024c6, 0x000024c6, + 0x000024e1, 0x000024c7, 0x000024c7, + 0x000024e2, 0x000024c8, 0x000024c8, + 0x000024e3, 0x000024c9, 0x000024c9, + 0x000024e4, 0x000024ca, 0x000024ca, + 0x000024e5, 0x000024cb, 0x000024cb, + 0x000024e6, 0x000024cc, 0x000024cc, + 0x000024e7, 0x000024cd, 0x000024cd, + 0x000024e8, 0x000024ce, 0x000024ce, + 0x000024e9, 0x000024cf, 0x000024cf, + 0x00002c30, 0x00002c00, 0x00002c00, + 0x00002c31, 0x00002c01, 0x00002c01, + 0x00002c32, 0x00002c02, 0x00002c02, + 0x00002c33, 0x00002c03, 0x00002c03, + 0x00002c34, 0x00002c04, 0x00002c04, + 0x00002c35, 0x00002c05, 0x00002c05, + 0x00002c36, 0x00002c06, 0x00002c06, + 0x00002c37, 0x00002c07, 0x00002c07, + 0x00002c38, 0x00002c08, 0x00002c08, + 0x00002c39, 0x00002c09, 0x00002c09, + 0x00002c3a, 0x00002c0a, 0x00002c0a, + 0x00002c3b, 0x00002c0b, 0x00002c0b, + 0x00002c3c, 0x00002c0c, 0x00002c0c, + 0x00002c3d, 0x00002c0d, 0x00002c0d, + 0x00002c3e, 0x00002c0e, 0x00002c0e, + 0x00002c3f, 0x00002c0f, 0x00002c0f, + 0x00002c40, 0x00002c10, 0x00002c10, + 0x00002c41, 0x00002c11, 0x00002c11, + 0x00002c42, 0x00002c12, 0x00002c12, + 0x00002c43, 0x00002c13, 0x00002c13, + 0x00002c44, 0x00002c14, 0x00002c14, + 0x00002c45, 0x00002c15, 0x00002c15, + 0x00002c46, 0x00002c16, 0x00002c16, + 0x00002c47, 0x00002c17, 0x00002c17, + 0x00002c48, 0x00002c18, 0x00002c18, + 0x00002c49, 0x00002c19, 0x00002c19, + 0x00002c4a, 0x00002c1a, 0x00002c1a, + 0x00002c4b, 0x00002c1b, 0x00002c1b, + 0x00002c4c, 0x00002c1c, 0x00002c1c, + 0x00002c4d, 0x00002c1d, 0x00002c1d, + 0x00002c4e, 0x00002c1e, 0x00002c1e, + 0x00002c4f, 0x00002c1f, 0x00002c1f, + 0x00002c50, 0x00002c20, 0x00002c20, + 0x00002c51, 0x00002c21, 0x00002c21, + 0x00002c52, 0x00002c22, 0x00002c22, + 0x00002c53, 0x00002c23, 0x00002c23, + 0x00002c54, 0x00002c24, 0x00002c24, + 0x00002c55, 0x00002c25, 0x00002c25, + 0x00002c56, 0x00002c26, 0x00002c26, + 0x00002c57, 0x00002c27, 0x00002c27, + 0x00002c58, 0x00002c28, 0x00002c28, + 0x00002c59, 0x00002c29, 0x00002c29, + 0x00002c5a, 0x00002c2a, 0x00002c2a, + 0x00002c5b, 0x00002c2b, 0x00002c2b, + 0x00002c5c, 0x00002c2c, 0x00002c2c, + 0x00002c5d, 0x00002c2d, 0x00002c2d, + 0x00002c5e, 0x00002c2e, 0x00002c2e, + 0x00002c61, 0x00002c60, 0x00002c60, + 0x00002c65, 0x0000023a, 0x0000023a, + 0x00002c66, 0x0000023e, 0x0000023e, + 0x00002c68, 0x00002c67, 0x00002c67, + 0x00002c6a, 0x00002c69, 0x00002c69, + 0x00002c6c, 0x00002c6b, 0x00002c6b, + 0x00002c73, 0x00002c72, 0x00002c72, + 0x00002c76, 0x00002c75, 0x00002c75, + 0x00002c81, 0x00002c80, 0x00002c80, + 0x00002c83, 0x00002c82, 0x00002c82, + 0x00002c85, 0x00002c84, 0x00002c84, + 0x00002c87, 0x00002c86, 0x00002c86, + 0x00002c89, 0x00002c88, 0x00002c88, + 0x00002c8b, 0x00002c8a, 0x00002c8a, + 0x00002c8d, 0x00002c8c, 0x00002c8c, + 0x00002c8f, 0x00002c8e, 0x00002c8e, + 0x00002c91, 0x00002c90, 0x00002c90, + 0x00002c93, 0x00002c92, 0x00002c92, + 0x00002c95, 0x00002c94, 0x00002c94, + 0x00002c97, 0x00002c96, 0x00002c96, + 0x00002c99, 0x00002c98, 0x00002c98, + 0x00002c9b, 0x00002c9a, 0x00002c9a, + 0x00002c9d, 0x00002c9c, 0x00002c9c, + 0x00002c9f, 0x00002c9e, 0x00002c9e, + 0x00002ca1, 0x00002ca0, 0x00002ca0, + 0x00002ca3, 0x00002ca2, 0x00002ca2, + 0x00002ca5, 0x00002ca4, 0x00002ca4, + 0x00002ca7, 0x00002ca6, 0x00002ca6, + 0x00002ca9, 0x00002ca8, 0x00002ca8, + 0x00002cab, 0x00002caa, 0x00002caa, + 0x00002cad, 0x00002cac, 0x00002cac, + 0x00002caf, 0x00002cae, 0x00002cae, + 0x00002cb1, 0x00002cb0, 0x00002cb0, + 0x00002cb3, 0x00002cb2, 0x00002cb2, + 0x00002cb5, 0x00002cb4, 0x00002cb4, + 0x00002cb7, 0x00002cb6, 0x00002cb6, + 0x00002cb9, 0x00002cb8, 0x00002cb8, + 0x00002cbb, 0x00002cba, 0x00002cba, + 0x00002cbd, 0x00002cbc, 0x00002cbc, + 0x00002cbf, 0x00002cbe, 0x00002cbe, + 0x00002cc1, 0x00002cc0, 0x00002cc0, + 0x00002cc3, 0x00002cc2, 0x00002cc2, + 0x00002cc5, 0x00002cc4, 0x00002cc4, + 0x00002cc7, 0x00002cc6, 0x00002cc6, + 0x00002cc9, 0x00002cc8, 0x00002cc8, + 0x00002ccb, 0x00002cca, 0x00002cca, + 0x00002ccd, 0x00002ccc, 0x00002ccc, + 0x00002ccf, 0x00002cce, 0x00002cce, + 0x00002cd1, 0x00002cd0, 0x00002cd0, + 0x00002cd3, 0x00002cd2, 0x00002cd2, + 0x00002cd5, 0x00002cd4, 0x00002cd4, + 0x00002cd7, 0x00002cd6, 0x00002cd6, + 0x00002cd9, 0x00002cd8, 0x00002cd8, + 0x00002cdb, 0x00002cda, 0x00002cda, + 0x00002cdd, 0x00002cdc, 0x00002cdc, + 0x00002cdf, 0x00002cde, 0x00002cde, + 0x00002ce1, 0x00002ce0, 0x00002ce0, + 0x00002ce3, 0x00002ce2, 0x00002ce2, + 0x00002cec, 0x00002ceb, 0x00002ceb, + 0x00002cee, 0x00002ced, 0x00002ced, + 0x00002d00, 0x000010a0, 0x000010a0, + 0x00002d01, 0x000010a1, 0x000010a1, + 0x00002d02, 0x000010a2, 0x000010a2, + 0x00002d03, 0x000010a3, 0x000010a3, + 0x00002d04, 0x000010a4, 0x000010a4, + 0x00002d05, 0x000010a5, 0x000010a5, + 0x00002d06, 0x000010a6, 0x000010a6, + 0x00002d07, 0x000010a7, 0x000010a7, + 0x00002d08, 0x000010a8, 0x000010a8, + 0x00002d09, 0x000010a9, 0x000010a9, + 0x00002d0a, 0x000010aa, 0x000010aa, + 0x00002d0b, 0x000010ab, 0x000010ab, + 0x00002d0c, 0x000010ac, 0x000010ac, + 0x00002d0d, 0x000010ad, 0x000010ad, + 0x00002d0e, 0x000010ae, 0x000010ae, + 0x00002d0f, 0x000010af, 0x000010af, + 0x00002d10, 0x000010b0, 0x000010b0, + 0x00002d11, 0x000010b1, 0x000010b1, + 0x00002d12, 0x000010b2, 0x000010b2, + 0x00002d13, 0x000010b3, 0x000010b3, + 0x00002d14, 0x000010b4, 0x000010b4, + 0x00002d15, 0x000010b5, 0x000010b5, + 0x00002d16, 0x000010b6, 0x000010b6, + 0x00002d17, 0x000010b7, 0x000010b7, + 0x00002d18, 0x000010b8, 0x000010b8, + 0x00002d19, 0x000010b9, 0x000010b9, + 0x00002d1a, 0x000010ba, 0x000010ba, + 0x00002d1b, 0x000010bb, 0x000010bb, + 0x00002d1c, 0x000010bc, 0x000010bc, + 0x00002d1d, 0x000010bd, 0x000010bd, + 0x00002d1e, 0x000010be, 0x000010be, + 0x00002d1f, 0x000010bf, 0x000010bf, + 0x00002d20, 0x000010c0, 0x000010c0, + 0x00002d21, 0x000010c1, 0x000010c1, + 0x00002d22, 0x000010c2, 0x000010c2, + 0x00002d23, 0x000010c3, 0x000010c3, + 0x00002d24, 0x000010c4, 0x000010c4, + 0x00002d25, 0x000010c5, 0x000010c5, + 0x0000a641, 0x0000a640, 0x0000a640, + 0x0000a643, 0x0000a642, 0x0000a642, + 0x0000a645, 0x0000a644, 0x0000a644, + 0x0000a647, 0x0000a646, 0x0000a646, + 0x0000a649, 0x0000a648, 0x0000a648, + 0x0000a64b, 0x0000a64a, 0x0000a64a, + 0x0000a64d, 0x0000a64c, 0x0000a64c, + 0x0000a64f, 0x0000a64e, 0x0000a64e, + 0x0000a651, 0x0000a650, 0x0000a650, + 0x0000a653, 0x0000a652, 0x0000a652, + 0x0000a655, 0x0000a654, 0x0000a654, + 0x0000a657, 0x0000a656, 0x0000a656, + 0x0000a659, 0x0000a658, 0x0000a658, + 0x0000a65b, 0x0000a65a, 0x0000a65a, + 0x0000a65d, 0x0000a65c, 0x0000a65c, + 0x0000a65f, 0x0000a65e, 0x0000a65e, + 0x0000a661, 0x0000a660, 0x0000a660, + 0x0000a663, 0x0000a662, 0x0000a662, + 0x0000a665, 0x0000a664, 0x0000a664, + 0x0000a667, 0x0000a666, 0x0000a666, + 0x0000a669, 0x0000a668, 0x0000a668, + 0x0000a66b, 0x0000a66a, 0x0000a66a, + 0x0000a66d, 0x0000a66c, 0x0000a66c, + 0x0000a681, 0x0000a680, 0x0000a680, + 0x0000a683, 0x0000a682, 0x0000a682, + 0x0000a685, 0x0000a684, 0x0000a684, + 0x0000a687, 0x0000a686, 0x0000a686, + 0x0000a689, 0x0000a688, 0x0000a688, + 0x0000a68b, 0x0000a68a, 0x0000a68a, + 0x0000a68d, 0x0000a68c, 0x0000a68c, + 0x0000a68f, 0x0000a68e, 0x0000a68e, + 0x0000a691, 0x0000a690, 0x0000a690, + 0x0000a693, 0x0000a692, 0x0000a692, + 0x0000a695, 0x0000a694, 0x0000a694, + 0x0000a697, 0x0000a696, 0x0000a696, + 0x0000a723, 0x0000a722, 0x0000a722, + 0x0000a725, 0x0000a724, 0x0000a724, + 0x0000a727, 0x0000a726, 0x0000a726, + 0x0000a729, 0x0000a728, 0x0000a728, + 0x0000a72b, 0x0000a72a, 0x0000a72a, + 0x0000a72d, 0x0000a72c, 0x0000a72c, + 0x0000a72f, 0x0000a72e, 0x0000a72e, + 0x0000a733, 0x0000a732, 0x0000a732, + 0x0000a735, 0x0000a734, 0x0000a734, + 0x0000a737, 0x0000a736, 0x0000a736, + 0x0000a739, 0x0000a738, 0x0000a738, + 0x0000a73b, 0x0000a73a, 0x0000a73a, + 0x0000a73d, 0x0000a73c, 0x0000a73c, + 0x0000a73f, 0x0000a73e, 0x0000a73e, + 0x0000a741, 0x0000a740, 0x0000a740, + 0x0000a743, 0x0000a742, 0x0000a742, + 0x0000a745, 0x0000a744, 0x0000a744, + 0x0000a747, 0x0000a746, 0x0000a746, + 0x0000a749, 0x0000a748, 0x0000a748, + 0x0000a74b, 0x0000a74a, 0x0000a74a, + 0x0000a74d, 0x0000a74c, 0x0000a74c, + 0x0000a74f, 0x0000a74e, 0x0000a74e, + 0x0000a751, 0x0000a750, 0x0000a750, + 0x0000a753, 0x0000a752, 0x0000a752, + 0x0000a755, 0x0000a754, 0x0000a754, + 0x0000a757, 0x0000a756, 0x0000a756, + 0x0000a759, 0x0000a758, 0x0000a758, + 0x0000a75b, 0x0000a75a, 0x0000a75a, + 0x0000a75d, 0x0000a75c, 0x0000a75c, + 0x0000a75f, 0x0000a75e, 0x0000a75e, + 0x0000a761, 0x0000a760, 0x0000a760, + 0x0000a763, 0x0000a762, 0x0000a762, + 0x0000a765, 0x0000a764, 0x0000a764, + 0x0000a767, 0x0000a766, 0x0000a766, + 0x0000a769, 0x0000a768, 0x0000a768, + 0x0000a76b, 0x0000a76a, 0x0000a76a, + 0x0000a76d, 0x0000a76c, 0x0000a76c, + 0x0000a76f, 0x0000a76e, 0x0000a76e, + 0x0000a77a, 0x0000a779, 0x0000a779, + 0x0000a77c, 0x0000a77b, 0x0000a77b, + 0x0000a77f, 0x0000a77e, 0x0000a77e, + 0x0000a781, 0x0000a780, 0x0000a780, + 0x0000a783, 0x0000a782, 0x0000a782, + 0x0000a785, 0x0000a784, 0x0000a784, + 0x0000a787, 0x0000a786, 0x0000a786, + 0x0000a78c, 0x0000a78b, 0x0000a78b, + 0x0000a791, 0x0000a790, 0x0000a790, + 0x0000a7a1, 0x0000a7a0, 0x0000a7a0, + 0x0000a7a3, 0x0000a7a2, 0x0000a7a2, + 0x0000a7a5, 0x0000a7a4, 0x0000a7a4, + 0x0000a7a7, 0x0000a7a6, 0x0000a7a6, + 0x0000a7a9, 0x0000a7a8, 0x0000a7a8, + 0x0000ff41, 0x0000ff21, 0x0000ff21, + 0x0000ff42, 0x0000ff22, 0x0000ff22, + 0x0000ff43, 0x0000ff23, 0x0000ff23, + 0x0000ff44, 0x0000ff24, 0x0000ff24, + 0x0000ff45, 0x0000ff25, 0x0000ff25, + 0x0000ff46, 0x0000ff26, 0x0000ff26, + 0x0000ff47, 0x0000ff27, 0x0000ff27, + 0x0000ff48, 0x0000ff28, 0x0000ff28, + 0x0000ff49, 0x0000ff29, 0x0000ff29, + 0x0000ff4a, 0x0000ff2a, 0x0000ff2a, + 0x0000ff4b, 0x0000ff2b, 0x0000ff2b, + 0x0000ff4c, 0x0000ff2c, 0x0000ff2c, + 0x0000ff4d, 0x0000ff2d, 0x0000ff2d, + 0x0000ff4e, 0x0000ff2e, 0x0000ff2e, + 0x0000ff4f, 0x0000ff2f, 0x0000ff2f, + 0x0000ff50, 0x0000ff30, 0x0000ff30, + 0x0000ff51, 0x0000ff31, 0x0000ff31, + 0x0000ff52, 0x0000ff32, 0x0000ff32, + 0x0000ff53, 0x0000ff33, 0x0000ff33, + 0x0000ff54, 0x0000ff34, 0x0000ff34, + 0x0000ff55, 0x0000ff35, 0x0000ff35, + 0x0000ff56, 0x0000ff36, 0x0000ff36, + 0x0000ff57, 0x0000ff37, 0x0000ff37, + 0x0000ff58, 0x0000ff38, 0x0000ff38, + 0x0000ff59, 0x0000ff39, 0x0000ff39, + 0x0000ff5a, 0x0000ff3a, 0x0000ff3a, + 0x00010428, 0x00010400, 0x00010400, + 0x00010429, 0x00010401, 0x00010401, + 0x0001042a, 0x00010402, 0x00010402, + 0x0001042b, 0x00010403, 0x00010403, + 0x0001042c, 0x00010404, 0x00010404, + 0x0001042d, 0x00010405, 0x00010405, + 0x0001042e, 0x00010406, 0x00010406, + 0x0001042f, 0x00010407, 0x00010407, + 0x00010430, 0x00010408, 0x00010408, + 0x00010431, 0x00010409, 0x00010409, + 0x00010432, 0x0001040a, 0x0001040a, + 0x00010433, 0x0001040b, 0x0001040b, + 0x00010434, 0x0001040c, 0x0001040c, + 0x00010435, 0x0001040d, 0x0001040d, + 0x00010436, 0x0001040e, 0x0001040e, + 0x00010437, 0x0001040f, 0x0001040f, + 0x00010438, 0x00010410, 0x00010410, + 0x00010439, 0x00010411, 0x00010411, + 0x0001043a, 0x00010412, 0x00010412, + 0x0001043b, 0x00010413, 0x00010413, + 0x0001043c, 0x00010414, 0x00010414, + 0x0001043d, 0x00010415, 0x00010415, + 0x0001043e, 0x00010416, 0x00010416, + 0x0001043f, 0x00010417, 0x00010417, + 0x00010440, 0x00010418, 0x00010418, + 0x00010441, 0x00010419, 0x00010419, + 0x00010442, 0x0001041a, 0x0001041a, + 0x00010443, 0x0001041b, 0x0001041b, + 0x00010444, 0x0001041c, 0x0001041c, + 0x00010445, 0x0001041d, 0x0001041d, + 0x00010446, 0x0001041e, 0x0001041e, + 0x00010447, 0x0001041f, 0x0001041f, + 0x00010448, 0x00010420, 0x00010420, + 0x00010449, 0x00010421, 0x00010421, + 0x0001044a, 0x00010422, 0x00010422, + 0x0001044b, 0x00010423, 0x00010423, + 0x0001044c, 0x00010424, 0x00010424, + 0x0001044d, 0x00010425, 0x00010425, + 0x0001044e, 0x00010426, 0x00010426, + 0x0001044f, 0x00010427, 0x00010427, + 0x000001c5, 0x000001c4, 0x000001c6, + 0x000001c8, 0x000001c7, 0x000001c9, + 0x000001cb, 0x000001ca, 0x000001cc, + 0x000001f2, 0x000001f1, 0x000001f3 +}; |