summaryrefslogtreecommitdiff
path: root/ext/mbstring
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2013-03-14 05:42:27 +0000
committer <>2013-04-03 16:25:08 +0000
commitc4dd7a1a684490673e25aaf4fabec5df138854c4 (patch)
tree4d57c44caae4480efff02b90b9be86f44bf25409 /ext/mbstring
downloadphp2-c4dd7a1a684490673e25aaf4fabec5df138854c4.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')
-rw-r--r--ext/mbstring/CREDITS2
-rw-r--r--ext/mbstring/README17
-rw-r--r--ext/mbstring/README.libmbfl16
-rw-r--r--ext/mbstring/README_PHP3-i18n-ja774
-rw-r--r--ext/mbstring/config.m4375
-rw-r--r--ext/mbstring/config.w3281
-rw-r--r--ext/mbstring/libmbfl/AUTHORS13
-rw-r--r--ext/mbstring/libmbfl/DISCLAIMER69
-rw-r--r--ext/mbstring/libmbfl/INSTALL12
-rw-r--r--ext/mbstring/libmbfl/LICENSE458
-rw-r--r--ext/mbstring/libmbfl/Makefile.am7
-rw-r--r--ext/mbstring/libmbfl/NEWS30
-rw-r--r--ext/mbstring/libmbfl/README8
-rwxr-xr-xext/mbstring/libmbfl/buildconf6
-rw-r--r--ext/mbstring/libmbfl/config.h.in94
-rw-r--r--ext/mbstring/libmbfl/config.h.w3212
-rw-r--r--ext/mbstring/libmbfl/configure.in49
-rwxr-xr-xext/mbstring/libmbfl/cvsclean14
-rw-r--r--ext/mbstring/libmbfl/filters/Makefile.am269
-rw-r--r--ext/mbstring/libmbfl/filters/cp932_table.h95
-rw-r--r--ext/mbstring/libmbfl/filters/emoji2uni.h1227
-rw-r--r--ext/mbstring/libmbfl/filters/html_entities.c298
-rw-r--r--ext/mbstring/libmbfl/filters/html_entities.h41
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_7bit.c82
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_7bit.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_armscii8.c149
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_armscii8.h45
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_ascii.c114
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_ascii.h46
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_base64.c214
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_base64.h45
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_big5.c344
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_big5.h48
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_byte2.c137
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_byte2.h48
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_byte4.c159
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_byte4.h46
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp1251.c152
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp1251.h44
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp1252.c147
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp1252.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp1254.c157
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp1254.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c1296
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp5022x.h64
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp51932.c345
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp51932.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp850.c147
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp850.h37
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp866.c151
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp866.h41
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp932.c350
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp932.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp936.c306
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp936.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c244
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_cn.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c331
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_jp.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.c78
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c434
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c256
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_kr.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c329
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_tw.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_gb18030.c473
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_gb18030.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_htmlent.c312
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_htmlent.h48
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_hz.c284
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_hz.h44
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c528
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.h44
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c359
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.h44
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.c168
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.h44
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c433
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c100
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c138
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c138
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c138
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.h26
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c136
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.h26
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.c136
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.h23
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c139
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c139
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c137
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.h41
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c139
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c139
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c139
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c137
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c138
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_jis.c663
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_jis.h49
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_koi8r.c149
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_koi8r.h50
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_koi8u.c146
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_koi8u.h47
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_qprint.c244
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_qprint.h44
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis.c298
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis.h47
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c725
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.h49
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c700
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.h44
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c927
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.h70
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis_open.c350
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis_open.h44
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_tl_jisx0201_jisx0208.c302
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_tl_jisx0201_jisx0208.h79
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_ucs2.c238
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_ucs2.h51
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_ucs4.c275
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_ucs4.h49
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_uhc.c267
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_uhc.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf16.c316
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf16.h49
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf32.c287
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf32.h50
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf7.c465
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf7.h44
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c372
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf7imap.h43
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf8.c309
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf8.h41
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c362
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.h55
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_uuencode.c152
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_uuencode.h39
-rwxr-xr-xext/mbstring/libmbfl/filters/mk_emoji_tbl.pl425
-rwxr-xr-xext/mbstring/libmbfl/filters/mk_sb_tbl.awk65
-rw-r--r--ext/mbstring/libmbfl/filters/sjis_mac2uni.h349
-rw-r--r--ext/mbstring/libmbfl/filters/translit_kana_jisx0201_jisx0208.h67
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_prop.h167
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_armscii8.h54
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_big5.h5123
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_cns11643.h6149
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_cp1251.h51
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_cp1252.h40
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_cp1254.h51
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_cp850.h52
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_cp866.h51
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_cp932_ext.h187
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_cp936.h6552
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_gb18030.h233
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_10.h17
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_13.h17
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_14.h17
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_15.h17
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_16.h17
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_2.h17
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_3.h17
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_4.h17
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_5.h17
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_6.h17
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_7.h17
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_8.h17
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_iso8859_9.h17
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_jis.h5872
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_jis2004.h5067
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_koi8r.h53
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_koi8u.h166
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_table_uhc.h7222
-rw-r--r--ext/mbstring/libmbfl/mbfl/Makefile.am48
-rw-r--r--ext/mbstring/libmbfl/mbfl/eaw_table.h44
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter.c3112
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter.h290
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c50
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h39
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter_pass.c65
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter_pass.h41
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter_wchar.c48
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter_wchar.h39
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_allocators.c93
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_allocators.h56
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_consts.h94
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_convert.c627
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_convert.h97
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_defs.h56
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_encoding.c341
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_encoding.h152
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_filter_output.c57
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_filter_output.h38
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_ident.c304
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_ident.h74
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_language.c171
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_language.h87
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c350
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h73
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_string.c79
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_string.h56
-rw-r--r--ext/mbstring/libmbfl/mbfl/mk_eaw_tbl.awk81
-rw-r--r--ext/mbstring/libmbfl/nls/Makefile.am25
-rw-r--r--ext/mbstring/libmbfl/nls/nls_de.c23
-rw-r--r--ext/mbstring/libmbfl/nls/nls_de.h8
-rw-r--r--ext/mbstring/libmbfl/nls/nls_en.c21
-rw-r--r--ext/mbstring/libmbfl/nls/nls_en.h8
-rw-r--r--ext/mbstring/libmbfl/nls/nls_hy.c20
-rw-r--r--ext/mbstring/libmbfl/nls/nls_hy.h9
-rw-r--r--ext/mbstring/libmbfl/nls/nls_ja.c20
-rw-r--r--ext/mbstring/libmbfl/nls/nls_ja.h8
-rw-r--r--ext/mbstring/libmbfl/nls/nls_kr.c21
-rw-r--r--ext/mbstring/libmbfl/nls/nls_kr.h8
-rw-r--r--ext/mbstring/libmbfl/nls/nls_neutral.c21
-rw-r--r--ext/mbstring/libmbfl/nls/nls_neutral.h8
-rw-r--r--ext/mbstring/libmbfl/nls/nls_ru.c20
-rw-r--r--ext/mbstring/libmbfl/nls/nls_ru.h9
-rw-r--r--ext/mbstring/libmbfl/nls/nls_tr.c21
-rw-r--r--ext/mbstring/libmbfl/nls/nls_tr.h8
-rw-r--r--ext/mbstring/libmbfl/nls/nls_ua.c22
-rw-r--r--ext/mbstring/libmbfl/nls/nls_ua.h9
-rw-r--r--ext/mbstring/libmbfl/nls/nls_uni.c23
-rw-r--r--ext/mbstring/libmbfl/nls/nls_uni.h8
-rw-r--r--ext/mbstring/libmbfl/nls/nls_zh.c31
-rw-r--r--ext/mbstring/libmbfl/nls/nls_zh.h9
-rw-r--r--ext/mbstring/libmbfl/tests/Makefile.am10
-rw-r--r--ext/mbstring/libmbfl/tests/conv_encoding.c104
-rw-r--r--ext/mbstring/libmbfl/tests/conv_encoding.tests/Makefile.am31
-rw-r--r--ext/mbstring/libmbfl/tests/conv_encoding.tests/cp51932_cp50220raw.exp33
-rw-r--r--ext/mbstring/libmbfl/tests/conv_encoding.tests/gen_exp.c497
-rw-r--r--ext/mbstring/libmbfl/tests/conv_encoding.tests/ujis_sjis.exp35
-rw-r--r--ext/mbstring/libmbfl/tests/conv_encoding.tests/utf8_sjis.exp35
-rw-r--r--ext/mbstring/libmbfl/tests/conv_encoding.tests/yensign.exp99
-rw-r--r--ext/mbstring/libmbfl/tests/conv_kana.c147
-rw-r--r--ext/mbstring/libmbfl/tests/conv_kana.tests/Makefile.am1
-rw-r--r--ext/mbstring/libmbfl/tests/conv_kana.tests/conv_kana.exp1098
-rw-r--r--ext/mbstring/libmbfl/tests/emoji.c119
-rw-r--r--ext/mbstring/libmbfl/tests/sample.c38
-rw-r--r--ext/mbstring/libmbfl/tests/strcut.c113
-rw-r--r--ext/mbstring/libmbfl/tests/strcut.tests/Makefile.am1
-rw-r--r--ext/mbstring/libmbfl/tests/strcut.tests/iso2022jp.exp129
-rw-r--r--ext/mbstring/libmbfl/tests/strcut.tests/ujis.exp91
-rw-r--r--ext/mbstring/libmbfl/tests/strcut.tests/utf8.exp91
-rw-r--r--ext/mbstring/libmbfl/tests/strwidth.c79
-rw-r--r--ext/mbstring/libmbfl/tests/strwidth.tests/Makefile.am1
-rw-r--r--ext/mbstring/libmbfl/tests/strwidth.tests/strwidth.exp47
-rw-r--r--ext/mbstring/mb_gpc.c398
-rw-r--r--ext/mbstring/mb_gpc.h61
-rw-r--r--ext/mbstring/mbstring.c4754
-rw-r--r--ext/mbstring/mbstring.dsp1112
-rw-r--r--ext/mbstring/mbstring.h223
-rw-r--r--ext/mbstring/oniguruma/AUTHORS1
-rw-r--r--ext/mbstring/oniguruma/COPYING32
-rw-r--r--ext/mbstring/oniguruma/HISTORY1838
-rw-r--r--ext/mbstring/oniguruma/README189
-rw-r--r--ext/mbstring/oniguruma/README.ja192
-rw-r--r--ext/mbstring/oniguruma/config.h.in108
-rw-r--r--ext/mbstring/oniguruma/doc/API585
-rw-r--r--ext/mbstring/oniguruma/doc/API.ja592
-rw-r--r--ext/mbstring/oniguruma/doc/FAQ37
-rw-r--r--ext/mbstring/oniguruma/doc/FAQ.ja122
-rw-r--r--ext/mbstring/oniguruma/doc/RE412
-rw-r--r--ext/mbstring/oniguruma/doc/RE.ja424
-rw-r--r--ext/mbstring/oniguruma/enc/ascii.c67
-rw-r--r--ext/mbstring/oniguruma/enc/big5.c168
-rw-r--r--ext/mbstring/oniguruma/enc/euc_jp.c228
-rw-r--r--ext/mbstring/oniguruma/enc/euc_kr.c173
-rw-r--r--ext/mbstring/oniguruma/enc/euc_tw.c144
-rw-r--r--ext/mbstring/oniguruma/enc/gb18030.c501
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_1.c151
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_10.c300
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_11.c105
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_13.c268
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_14.c298
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_15.c279
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_16.c292
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_2.c292
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_3.c281
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_4.c290
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_5.c296
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_6.c105
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_7.c278
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_8.c105
-rw-r--r--ext/mbstring/oniguruma/enc/iso8859_9.c270
-rw-r--r--ext/mbstring/oniguruma/enc/koi8.c264
-rw-r--r--ext/mbstring/oniguruma/enc/koi8_r.c266
-rw-r--r--ext/mbstring/oniguruma/enc/mktable.c1115
-rw-r--r--ext/mbstring/oniguruma/enc/sjis.c238
-rw-r--r--ext/mbstring/oniguruma/enc/unicode.c3403
-rw-r--r--ext/mbstring/oniguruma/enc/utf16_be.c232
-rw-r--r--ext/mbstring/oniguruma/enc/utf16_le.c230
-rw-r--r--ext/mbstring/oniguruma/enc/utf32_be.c187
-rw-r--r--ext/mbstring/oniguruma/enc/utf32_le.c185
-rw-r--r--ext/mbstring/oniguruma/enc/utf8.c3730
-rwxr-xr-xext/mbstring/oniguruma/index.html187
-rw-r--r--ext/mbstring/oniguruma/onigcmpt200.h310
-rw-r--r--ext/mbstring/oniguruma/oniggnu.h85
-rw-r--r--ext/mbstring/oniguruma/onigposix.h169
-rw-r--r--ext/mbstring/oniguruma/oniguruma.h905
-rw-r--r--ext/mbstring/oniguruma/regcomp.c6044
-rw-r--r--ext/mbstring/oniguruma/regenc.c1028
-rw-r--r--ext/mbstring/oniguruma/regenc.h147
-rw-r--r--ext/mbstring/oniguruma/regerror.c371
-rw-r--r--ext/mbstring/oniguruma/regexec.c3949
-rw-r--r--ext/mbstring/oniguruma/regext.c215
-rw-r--r--ext/mbstring/oniguruma/reggnu.c175
-rw-r--r--ext/mbstring/oniguruma/regint.h830
-rw-r--r--ext/mbstring/oniguruma/regparse.c5290
-rw-r--r--ext/mbstring/oniguruma/regparse.h328
-rw-r--r--ext/mbstring/oniguruma/regposerr.c90
-rw-r--r--ext/mbstring/oniguruma/regposix.c303
-rw-r--r--ext/mbstring/oniguruma/regsyntax.c236
-rw-r--r--ext/mbstring/oniguruma/regtrav.c76
-rw-r--r--ext/mbstring/oniguruma/regversion.c55
-rw-r--r--ext/mbstring/oniguruma/st.c589
-rw-r--r--ext/mbstring/oniguruma/st.h63
-rw-r--r--ext/mbstring/oniguruma/win32/config.h84
-rw-r--r--ext/mbstring/php_mbregex.c1470
-rw-r--r--ext/mbstring/php_mbregex.h109
-rw-r--r--ext/mbstring/php_onig_compat.h8
-rw-r--r--ext/mbstring/php_unicode.c347
-rw-r--r--ext/mbstring/php_unicode.h201
-rw-r--r--ext/mbstring/tests/bug20087.phpt22
-rw-r--r--ext/mbstring/tests/bug25140.phpt10
-rw-r--r--ext/mbstring/tests/bug26639.phpt123
-rw-r--r--ext/mbstring/tests/bug28220.phpt25
-rw-r--r--ext/mbstring/tests/bug30549.phpt31
-rw-r--r--ext/mbstring/tests/bug31911.phpt13
-rw-r--r--ext/mbstring/tests/bug40685.phpt25
-rw-r--r--ext/mbstring/tests/bug43301.phpt21
-rw-r--r--ext/mbstring/tests/bug43840.phpt75
-rw-r--r--ext/mbstring/tests/bug43841.phpt85
-rw-r--r--ext/mbstring/tests/bug43993.phpt26
-rw-r--r--ext/mbstring/tests/bug43994.phpt129
-rw-r--r--ext/mbstring/tests/bug43998.phpt71
-rw-r--r--ext/mbstring/tests/bug45239.phpt18
-rw-r--r--ext/mbstring/tests/bug45722.phpt10
-rw-r--r--ext/mbstring/tests/bug45923.phpt202
-rw-r--r--ext/mbstring/tests/bug46806.phpt16
-rw-r--r--ext/mbstring/tests/bug46843.phpt12
-rw-r--r--ext/mbstring/tests/bug47399.phpt525
-rw-r--r--ext/mbstring/tests/bug48645.phpt162
-rw-r--r--ext/mbstring/tests/bug48697.phpt24
-rw-r--r--ext/mbstring/tests/bug49354.phpt21
-rw-r--r--ext/mbstring/tests/bug49528.phpt20
-rw-r--r--ext/mbstring/tests/bug49536.phpt20
-rw-r--r--ext/mbstring/tests/bug52861.phpt29
-rw-r--r--ext/mbstring/tests/bug52931.phpt24
-rw-r--r--ext/mbstring/tests/bug52981.phpt23
-rw-r--r--ext/mbstring/tests/bug54494.phpt52
-rw-r--r--ext/mbstring/tests/bug60306.phpt11
-rw-r--r--ext/mbstring/tests/bug63447_001.phpt20
-rw-r--r--ext/mbstring/tests/bug63447_002.phpt20
-rw-r--r--ext/mbstring/tests/bug63447_003.phpt34
-rw-r--r--ext/mbstring/tests/casefold.phpt24
-rw-r--r--ext/mbstring/tests/common.inc55
-rw-r--r--ext/mbstring/tests/empty_pattern.phpt16
-rw-r--r--ext/mbstring/tests/htmlent.phpt42
-rw-r--r--ext/mbstring/tests/illformed_utf_sequences.phpt217
-rw-r--r--ext/mbstring/tests/ini_language.phpt15
-rw-r--r--ext/mbstring/tests/mb_convert_encoding.phpt138
-rw-r--r--ext/mbstring/tests/mb_convert_encoding_basic.phpt95
-rw-r--r--ext/mbstring/tests/mb_convert_encoding_stateful.phpt37
-rw-r--r--ext/mbstring/tests/mb_convert_encoding_variation1.phpt207
-rw-r--r--ext/mbstring/tests/mb_convert_kana.phpt60
-rw-r--r--ext/mbstring/tests/mb_convert_variables.phpt164
-rw-r--r--ext/mbstring/tests/mb_decode_mimeheader_basic.phpt35
-rw-r--r--ext/mbstring/tests/mb_decode_mimeheader_error.phpt42
-rw-r--r--ext/mbstring/tests/mb_decode_mimeheader_variation1.phpt206
-rw-r--r--ext/mbstring/tests/mb_decode_mimeheader_variation2.phpt51
-rw-r--r--ext/mbstring/tests/mb_decode_mimeheader_variation3.phpt29
-rw-r--r--ext/mbstring/tests/mb_decode_numericentity.phpt21
-rw-r--r--ext/mbstring/tests/mb_detect_encoding.phpt121
-rw-r--r--ext/mbstring/tests/mb_detect_order.phpt61
-rw-r--r--ext/mbstring/tests/mb_encode_mimeheader_basic.phpt74
-rw-r--r--ext/mbstring/tests/mb_encode_mimeheader_basic2.phpt73
-rw-r--r--ext/mbstring/tests/mb_encode_mimeheader_basic3.phpt69
-rw-r--r--ext/mbstring/tests/mb_encode_mimeheader_indent.phpt901
-rw-r--r--ext/mbstring/tests/mb_encode_mimeheader_variation1.phpt184
-rw-r--r--ext/mbstring/tests/mb_encode_mimeheader_variation2.phpt224
-rw-r--r--ext/mbstring/tests/mb_encode_mimeheader_variation3.phpt186
-rw-r--r--ext/mbstring/tests/mb_encode_mimeheader_variation4.phpt187
-rw-r--r--ext/mbstring/tests/mb_encode_mimeheader_variation5.phpt215
-rw-r--r--ext/mbstring/tests/mb_encode_mimeheader_variation6.phpt53
-rw-r--r--ext/mbstring/tests/mb_encode_numericentity.phpt22
-rw-r--r--ext/mbstring/tests/mb_encoding_aliases.phpt45
-rw-r--r--ext/mbstring/tests/mb_ereg-compat-01.phpt21
-rw-r--r--ext/mbstring/tests/mb_ereg-compat-02.phpt25
-rw-r--r--ext/mbstring/tests/mb_ereg.phpt46
-rw-r--r--ext/mbstring/tests/mb_ereg1.phpt77
-rw-r--r--ext/mbstring/tests/mb_ereg2.phpt41
-rw-r--r--ext/mbstring/tests/mb_ereg3.phpt44
-rw-r--r--ext/mbstring/tests/mb_ereg4.phpt44
-rw-r--r--ext/mbstring/tests/mb_ereg_basic.phpt117
-rw-r--r--ext/mbstring/tests/mb_ereg_error.phpt49
-rw-r--r--ext/mbstring/tests/mb_ereg_match_basic.phpt59
-rw-r--r--ext/mbstring/tests/mb_ereg_match_error1.phpt58
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-01.phpt15
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-02.phpt15
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-03.phpt15
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-04.phpt15
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-05.phpt16
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-06.phpt14
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-07.phpt15
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-08.phpt15
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-09.phpt15
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-10.phpt15
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-11.phpt15
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-12.phpt14
-rw-r--r--ext/mbstring/tests/mb_ereg_replace-compat-13.phpt14
-rw-r--r--ext/mbstring/tests/mb_ereg_replace.phpt18
-rw-r--r--ext/mbstring/tests/mb_ereg_replace_basic.phpt62
-rw-r--r--ext/mbstring/tests/mb_ereg_replace_callback.phpt15
-rw-r--r--ext/mbstring/tests/mb_ereg_replace_error.phpt47
-rw-r--r--ext/mbstring/tests/mb_ereg_replace_variation1.phpt170
-rw-r--r--ext/mbstring/tests/mb_ereg_replace_variation2.phpt178
-rw-r--r--ext/mbstring/tests/mb_ereg_replace_variation3.phpt179
-rw-r--r--ext/mbstring/tests/mb_ereg_replace_variation4.phpt179
-rw-r--r--ext/mbstring/tests/mb_ereg_search.phpt39
-rw-r--r--ext/mbstring/tests/mb_ereg_search_pos.phpt31
-rw-r--r--ext/mbstring/tests/mb_ereg_search_regs.phpt28
-rw-r--r--ext/mbstring/tests/mb_ereg_search_xxx.phpt82
-rw-r--r--ext/mbstring/tests/mb_ereg_variation1.phpt165
-rw-r--r--ext/mbstring/tests/mb_ereg_variation2.phpt216
-rw-r--r--ext/mbstring/tests/mb_ereg_variation3.phpt159
-rw-r--r--ext/mbstring/tests/mb_ereg_variation4.phpt149
-rw-r--r--ext/mbstring/tests/mb_ereg_variation5.phpt82
-rw-r--r--ext/mbstring/tests/mb_ereg_variation6.phpt192
-rw-r--r--ext/mbstring/tests/mb_ereg_variation7.phpt94
-rw-r--r--ext/mbstring/tests/mb_eregi.phpt20
-rw-r--r--ext/mbstring/tests/mb_eregi_invalid_arguments.phpt20
-rw-r--r--ext/mbstring/tests/mb_eregi_replace.phpt37
-rw-r--r--ext/mbstring/tests/mb_get_info.phpt190
-rw-r--r--ext/mbstring/tests/mb_http_input.phpt51
-rw-r--r--ext/mbstring/tests/mb_http_output.phpt84
-rw-r--r--ext/mbstring/tests/mb_internal_encoding.phpt68
-rw-r--r--ext/mbstring/tests/mb_internal_encoding_basic.phpt36
-rw-r--r--ext/mbstring/tests/mb_internal_encoding_error1.phpt36
-rw-r--r--ext/mbstring/tests/mb_internal_encoding_error2.phpt31
-rw-r--r--ext/mbstring/tests/mb_internal_encoding_ini_basic2.phpt29
-rw-r--r--ext/mbstring/tests/mb_internal_encoding_variation1.phpt217
-rw-r--r--ext/mbstring/tests/mb_internal_encoding_variation2.phpt374
-rw-r--r--ext/mbstring/tests/mb_list_encodings.phpt16
-rw-r--r--ext/mbstring/tests/mb_output_handler_euc_jp.phpt21
-rw-r--r--ext/mbstring/tests/mb_output_handler_pattern-01.phpt18
-rw-r--r--ext/mbstring/tests/mb_output_handler_pattern-02.phpt18
-rw-r--r--ext/mbstring/tests/mb_output_handler_pattern-03.phpt18
-rw-r--r--ext/mbstring/tests/mb_output_handler_pattern-04.phpt18
-rw-r--r--ext/mbstring/tests/mb_output_handler_pattern-05.phpt17
-rw-r--r--ext/mbstring/tests/mb_output_handler_pattern-06.phpt18
-rw-r--r--ext/mbstring/tests/mb_output_handler_pattern-07.phpt19
-rw-r--r--ext/mbstring/tests/mb_output_handler_pattern-08.phpt19
-rw-r--r--ext/mbstring/tests/mb_output_handler_pattern-09.phpt19
-rw-r--r--ext/mbstring/tests/mb_output_handler_pattern-10.phpt19
-rw-r--r--ext/mbstring/tests/mb_output_handler_pattern-11.phpt17
-rw-r--r--ext/mbstring/tests/mb_output_handler_pattern-12.phpt18
-rw-r--r--ext/mbstring/tests/mb_output_handler_runtime_ini_alteration-01.phpt20
-rw-r--r--ext/mbstring/tests/mb_output_handler_runtime_ini_alteration-02.phpt20
-rw-r--r--ext/mbstring/tests/mb_output_handler_shift_jis.phpt16
-rw-r--r--ext/mbstring/tests/mb_parse_str.phpt81
-rw-r--r--ext/mbstring/tests/mb_parse_str02.phpt106
-rw-r--r--ext/mbstring/tests/mb_preferred_mime_name.phpt61
-rw-r--r--ext/mbstring/tests/mb_regex_encoding_basic.phpt35
-rw-r--r--ext/mbstring/tests/mb_regex_encoding_error1.phpt36
-rw-r--r--ext/mbstring/tests/mb_regex_encoding_error2.phpt31
-rw-r--r--ext/mbstring/tests/mb_regex_encoding_variation1.phpt215
-rw-r--r--ext/mbstring/tests/mb_regex_encoding_variation2.phpt420
-rw-r--r--ext/mbstring/tests/mb_regex_set_options.phpt18
-rw-r--r--ext/mbstring/tests/mb_send_mail01.phpt42
-rw-r--r--ext/mbstring/tests/mb_send_mail02.phpt42
-rw-r--r--ext/mbstring/tests/mb_send_mail03.phpt42
-rw-r--r--ext/mbstring/tests/mb_send_mail04.phpt42
-rw-r--r--ext/mbstring/tests/mb_send_mail05.phpt46
-rw-r--r--ext/mbstring/tests/mb_send_mail06.phpt45
-rw-r--r--ext/mbstring/tests/mb_send_mail07.phpt45
-rw-r--r--ext/mbstring/tests/mb_split-compat-01.phpt23
-rw-r--r--ext/mbstring/tests/mb_split.phpt67
-rw-r--r--ext/mbstring/tests/mb_split_empty_match.phpt23
-rw-r--r--ext/mbstring/tests/mb_split_error.phpt50
-rw-r--r--ext/mbstring/tests/mb_split_variation1.phpt246
-rw-r--r--ext/mbstring/tests/mb_split_variation2.phpt248
-rw-r--r--ext/mbstring/tests/mb_split_variation3.phpt331
-rw-r--r--ext/mbstring/tests/mb_str_functions_opt-parameter.phpt30
-rw-r--r--ext/mbstring/tests/mb_strcut.phpt34
-rw-r--r--ext/mbstring/tests/mb_strcut_missing_boundary_check.phpt31
-rw-r--r--ext/mbstring/tests/mb_strimwidth.phpt43
-rw-r--r--ext/mbstring/tests/mb_stripos.phpt178
-rw-r--r--ext/mbstring/tests/mb_stripos_basic.phpt158
-rw-r--r--ext/mbstring/tests/mb_stripos_basic2.phpt129
-rw-r--r--ext/mbstring/tests/mb_stripos_error1.phpt51
-rw-r--r--ext/mbstring/tests/mb_stripos_error2.phpt35
-rw-r--r--ext/mbstring/tests/mb_stripos_variation1.phpt183
-rw-r--r--ext/mbstring/tests/mb_stripos_variation2.phpt200
-rw-r--r--ext/mbstring/tests/mb_stripos_variation3.phpt203
-rw-r--r--ext/mbstring/tests/mb_stripos_variation4.phpt223
-rw-r--r--ext/mbstring/tests/mb_stripos_variation5_Bug45923.phpt119
-rw-r--r--ext/mbstring/tests/mb_stristr_basic.phpt70
-rw-r--r--ext/mbstring/tests/mb_stristr_error1.phpt47
-rw-r--r--ext/mbstring/tests/mb_stristr_error2.phpt35
-rw-r--r--ext/mbstring/tests/mb_stristr_variation1.phpt208
-rw-r--r--ext/mbstring/tests/mb_stristr_variation2.phpt216
-rw-r--r--ext/mbstring/tests/mb_stristr_variation3.phpt232
-rw-r--r--ext/mbstring/tests/mb_stristr_variation4.phpt227
-rw-r--r--ext/mbstring/tests/mb_stristr_variation5.phpt69
-rw-r--r--ext/mbstring/tests/mb_strlen.phpt101
-rw-r--r--ext/mbstring/tests/mb_strlen_basic.phpt43
-rw-r--r--ext/mbstring/tests/mb_strlen_error1.phpt46
-rw-r--r--ext/mbstring/tests/mb_strlen_error2.phpt34
-rw-r--r--ext/mbstring/tests/mb_strlen_variation1.phpt180
-rw-r--r--ext/mbstring/tests/mb_strlen_variation2.phpt220
-rw-r--r--ext/mbstring/tests/mb_strlen_variation3.phpt445
-rw-r--r--ext/mbstring/tests/mb_strpos.phpt175
-rw-r--r--ext/mbstring/tests/mb_strpos_basic.phpt57
-rw-r--r--ext/mbstring/tests/mb_strpos_error1.phpt50
-rw-r--r--ext/mbstring/tests/mb_strpos_error2.phpt34
-rw-r--r--ext/mbstring/tests/mb_strpos_variation1.phpt182
-rw-r--r--ext/mbstring/tests/mb_strpos_variation2.phpt198
-rw-r--r--ext/mbstring/tests/mb_strpos_variation3.phpt202
-rw-r--r--ext/mbstring/tests/mb_strpos_variation4.phpt222
-rw-r--r--ext/mbstring/tests/mb_strpos_variation5.phpt117
-rw-r--r--ext/mbstring/tests/mb_strrchr_basic.phpt64
-rw-r--r--ext/mbstring/tests/mb_strrchr_error1.phpt47
-rw-r--r--ext/mbstring/tests/mb_strrchr_error2.phpt35
-rw-r--r--ext/mbstring/tests/mb_strrchr_variation1.phpt207
-rw-r--r--ext/mbstring/tests/mb_strrchr_variation2.phpt207
-rw-r--r--ext/mbstring/tests/mb_strrchr_variation3.phpt232
-rw-r--r--ext/mbstring/tests/mb_strrchr_variation4.phpt227
-rw-r--r--ext/mbstring/tests/mb_strrchr_variation5.phpt59
-rw-r--r--ext/mbstring/tests/mb_strrchr_variation6.phpt65
-rw-r--r--ext/mbstring/tests/mb_strrichr_basic.phpt70
-rw-r--r--ext/mbstring/tests/mb_strrichr_error1.phpt47
-rw-r--r--ext/mbstring/tests/mb_strrichr_error2.phpt35
-rw-r--r--ext/mbstring/tests/mb_strrichr_variation1.phpt207
-rw-r--r--ext/mbstring/tests/mb_strrichr_variation2.phpt207
-rw-r--r--ext/mbstring/tests/mb_strrichr_variation3.phpt232
-rw-r--r--ext/mbstring/tests/mb_strrichr_variation4.phpt227
-rw-r--r--ext/mbstring/tests/mb_strrichr_variation5.phpt69
-rw-r--r--ext/mbstring/tests/mb_strripos_basic.phpt158
-rw-r--r--ext/mbstring/tests/mb_strripos_basic2.phpt128
-rw-r--r--ext/mbstring/tests/mb_strripos_error1.phpt51
-rw-r--r--ext/mbstring/tests/mb_strripos_error2.phpt35
-rw-r--r--ext/mbstring/tests/mb_strripos_variation1.phpt183
-rw-r--r--ext/mbstring/tests/mb_strripos_variation2.phpt183
-rw-r--r--ext/mbstring/tests/mb_strripos_variation3_Bug45923.phpt206
-rw-r--r--ext/mbstring/tests/mb_strripos_variation4.phpt223
-rw-r--r--ext/mbstring/tests/mb_strripos_variation5_Bug45923.phpt115
-rw-r--r--ext/mbstring/tests/mb_strrpos_basic.phpt58
-rw-r--r--ext/mbstring/tests/mb_strrpos_error1.phpt50
-rw-r--r--ext/mbstring/tests/mb_strrpos_error2.phpt35
-rw-r--r--ext/mbstring/tests/mb_strrpos_variation1.phpt181
-rw-r--r--ext/mbstring/tests/mb_strrpos_variation2.phpt183
-rw-r--r--ext/mbstring/tests/mb_strrpos_variation3.phpt153
-rw-r--r--ext/mbstring/tests/mb_strrpos_variation4.phpt222
-rw-r--r--ext/mbstring/tests/mb_strrpos_variation5.phpt61
-rw-r--r--ext/mbstring/tests/mb_strstr.phpt35
-rw-r--r--ext/mbstring/tests/mb_strstr_basic.phpt64
-rw-r--r--ext/mbstring/tests/mb_strstr_error1.phpt47
-rw-r--r--ext/mbstring/tests/mb_strstr_error2.phpt35
-rw-r--r--ext/mbstring/tests/mb_strstr_variation1.phpt207
-rw-r--r--ext/mbstring/tests/mb_strstr_variation2.phpt215
-rw-r--r--ext/mbstring/tests/mb_strstr_variation3.phpt232
-rw-r--r--ext/mbstring/tests/mb_strstr_variation4.phpt227
-rw-r--r--ext/mbstring/tests/mb_strstr_variation5.phpt59
-rw-r--r--ext/mbstring/tests/mb_strstr_variation6.phpt65
-rw-r--r--ext/mbstring/tests/mb_strtolower_basic.phpt58
-rw-r--r--ext/mbstring/tests/mb_strtolower_error1.phpt46
-rw-r--r--ext/mbstring/tests/mb_strtolower_error2.phpt32
-rw-r--r--ext/mbstring/tests/mb_strtolower_variation1.phpt178
-rw-r--r--ext/mbstring/tests/mb_strtolower_variation2.phpt225
-rw-r--r--ext/mbstring/tests/mb_strtolower_variation3.phpt57
-rw-r--r--ext/mbstring/tests/mb_strtolower_variation4.phpt56
-rw-r--r--ext/mbstring/tests/mb_strtoupper_basic.phpt60
-rw-r--r--ext/mbstring/tests/mb_strtoupper_error1.phpt47
-rw-r--r--ext/mbstring/tests/mb_strtoupper_error2.phpt34
-rw-r--r--ext/mbstring/tests/mb_strtoupper_variation1.phpt181
-rw-r--r--ext/mbstring/tests/mb_strtoupper_variation2.phpt226
-rw-r--r--ext/mbstring/tests/mb_strtoupper_variation3.phpt58
-rw-r--r--ext/mbstring/tests/mb_strtoupper_variation4.phpt57
-rw-r--r--ext/mbstring/tests/mb_strwidth.phpt32
-rw-r--r--ext/mbstring/tests/mb_substitute_character.phpt45
-rw-r--r--ext/mbstring/tests/mb_substitute_character_basic.phpt43
-rw-r--r--ext/mbstring/tests/mb_substitute_character_error.phpt35
-rw-r--r--ext/mbstring/tests/mb_substitute_character_variation1.phpt231
-rw-r--r--ext/mbstring/tests/mb_substitute_character_variation2.phpt39
-rw-r--r--ext/mbstring/tests/mb_substr.phpt35
-rw-r--r--ext/mbstring/tests/mb_substr_basic.phpt57
-rw-r--r--ext/mbstring/tests/mb_substr_count.phpt44
-rw-r--r--ext/mbstring/tests/mb_substr_count_basic.phpt47
-rw-r--r--ext/mbstring/tests/mb_substr_count_error1.phpt49
-rw-r--r--ext/mbstring/tests/mb_substr_count_error2.phpt37
-rw-r--r--ext/mbstring/tests/mb_substr_count_variation1.phpt182
-rw-r--r--ext/mbstring/tests/mb_substr_count_variation2.phpt196
-rw-r--r--ext/mbstring/tests/mb_substr_count_variation3.phpt220
-rw-r--r--ext/mbstring/tests/mb_substr_count_variation4.phpt44
-rw-r--r--ext/mbstring/tests/mb_substr_error1.phpt49
-rw-r--r--ext/mbstring/tests/mb_substr_error2.phpt35
-rw-r--r--ext/mbstring/tests/mb_substr_variation1.phpt181
-rw-r--r--ext/mbstring/tests/mb_substr_variation2.phpt227
-rw-r--r--ext/mbstring/tests/mb_substr_variation3.phpt445
-rw-r--r--ext/mbstring/tests/mb_substr_variation4.phpt132
-rw-r--r--ext/mbstring/tests/mb_substr_variation5.phpt133
-rw-r--r--ext/mbstring/tests/mb_substr_variation6.phpt137
-rw-r--r--ext/mbstring/tests/mb_substr_variation7.phpt138
-rw-r--r--ext/mbstring/tests/overload01.phpt25
-rw-r--r--ext/mbstring/tests/overload02.phpt36
-rw-r--r--ext/mbstring/tests/php_gr_jp_10830.phpt20
-rw-r--r--ext/mbstring/tests/php_gr_jp_16242.phpt21
-rw-r--r--ext/mbstring/tests/php_gr_jp_dev_884-1.phpt19
-rw-r--r--ext/mbstring/tests/php_gr_jp_dev_884-2.phpt23
-rw-r--r--ext/mbstring/tests/pictogram1.phpt172
-rw-r--r--ext/mbstring/tests/simpletest.phpt34
-rw-r--r--ext/mbstring/tests/skipif.inc14
-rw-r--r--ext/mbstring/tests/zend_multibyte-01.phpt23
-rw-r--r--ext/mbstring/tests/zend_multibyte-02.phpt18
-rw-r--r--ext/mbstring/tests/zend_multibyte-03.phpt18
-rw-r--r--ext/mbstring/tests/zend_multibyte-04.phpt18
-rw-r--r--ext/mbstring/tests/zend_multibyte-05.phpt21
-rw-r--r--ext/mbstring/tests/zend_multibyte-06.phpt19
-rw-r--r--ext/mbstring/tests/zend_multibyte-07.phpt19
-rw-r--r--ext/mbstring/tests/zend_multibyte-08.phpt19
-rw-r--r--ext/mbstring/tests/zend_multibyte-09.phpt22
-rw-r--r--ext/mbstring/tests/zend_multibyte-10.phpt17
-rw-r--r--ext/mbstring/tests/zend_multibyte-11.phpt18
-rw-r--r--ext/mbstring/tests/zend_multibyte-12.phpt17
-rw-r--r--ext/mbstring/tests/zend_multibyte-13.phpt23
-rw-r--r--ext/mbstring/tests/zend_multibyte-14.phpt23
-rw-r--r--ext/mbstring/ucgendat/OPENLDAP_LICENSE47
-rw-r--r--ext/mbstring/ucgendat/README9
-rw-r--r--ext/mbstring/ucgendat/ucgendat.c1985
-rw-r--r--ext/mbstring/unicode_data.h4272
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 &lt;hwyss AT ywesee.com&gt;.<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 &gt; Lib &gt; 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(&reg, 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, &not);
+ 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, &not);
+ 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, &not);
+ *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('&#61', $map, 'UTF-8'));
+var_dump(mb_decode_numericentity('&#x3d', $map, 'UTF-8'));
+var_dump(mb_decode_numericentity('&#61;', $map, 'UTF-8'));
+var_dump(mb_decode_numericentity('&#x3d;', $map, 'UTF-8'));
+?>
+--EXPECTF--
+string(1) "&"
+string(3) "&&&"
+string(2) "&#"
+string(3) "&#x"
+string(4) "&#61"
+string(5) "&#x3D"
+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("&#x0;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#x1;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#x2;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#x3;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#x4;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#x5;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#x6;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#x7;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#x8;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#x9;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#xA;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#xB;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#xC;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#xD;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#xE;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#xF;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#xa;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#xb;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#xc;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#xd;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#xe;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#xf;", "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("&#X0;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#X1;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#X2;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#X3;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#X4;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#X5;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#X6;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#X7;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#X8;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#X9;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#XA;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#XB;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#XC;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#XD;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#XE;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#XF;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#Xa;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#Xb;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#Xc;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#Xd;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#Xe;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#Xf;", "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("&#0;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#1;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#2;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#3;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#4;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#5;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#6;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#7;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#8;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#9;", "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("&#x10ffff;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#x110000;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#X10ffff;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#X110000;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#1114111;", "UTF-8", "HTML-ENTITIES")));
+var_dump(bin2hex(mb_convert_encoding("&#1114112;", "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");
+// &#64... are must be decoded on input these are not reencoded on output.
+// If you see &#64;&#65;&#66; on output this means input encoding fails.
+// If you do not see &auml;... 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=&#38;&#64;&#65;&#66;&#128;&#129;&#130;&auml;&ouml;&uuml;&euro;&lang;&rang;", $test);
+print_r($test);
+?>
+===DONE===
+--EXPECT--
+HTML-ENTITIES>UTF-8>HTML-ENTITIES
+Array
+(
+ [test] => &@AB&#128;&#129;&#130;&auml;&ouml;&uuml;&euro;&lang;&rang;
+)
+===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 = '&#161;&#162;&#163;&#164;&#165;&#166;&#167;&#168;&#169;&#170;&#171;&#172;&#173;&#174;&#175;&#176;&#177;&#178;&#179;&#180;&#181;&#182;&#183;&#184;&#185;&#186;&#187;&#188;&#189;&#190;&#191;&#192;&#193;&#194;&#195;&#196;&#197;&#198;&#199;&#200;&#201;&#202;&#203;&#204;&#205;&#206;&#207;&#208;&#209;&#210;&#211;&#212;&#213;&#214;&#215;&#216;&#217;&#218;&#219;&#220;&#221;&#222;&#223;&#224;&#225;&#226;&#227;&#228;&#229;&#230;&#231;&#232;&#233;&#234;&#235;&#236;&#237;&#238;&#239;&#240;&#241;&#242;&#243;&#244;&#245;&#246;&#247;&#248;&#249;&#250;&#251;&#252;&#253;&#254;&#255;';
+$str2 = '&#402;&#913;&#914;&#915;&#916;&#917;&#918;&#919;&#920;&#921;&#922;&#923;&#924;&#925;&#926;&#927;&#928;&#929;&#931;&#932;&#933;&#934;&#935;&#936;&#937;&#945;&#946;&#947;&#948;&#949;&#950;&#951;&#952;&#953;&#954;&#955;&#956;&#957;&#958;&#959;&#960;&#961;&#962;&#963;&#964;&#965;&#966;&#967;&#968;&#969;&#977;&#978;&#982;&#8226;&#8230;&#8242;&#8243;&#8254;&#8260;&#8472;&#8465;&#8476;&#8482;&#8501;&#8592;&#8593;&#8594;&#8595;&#8596;&#8629;&#8656;&#8657;&#8658;&#8659;&#8660;&#8704;&#8706;&#8707;&#8709;&#8711;&#8712;&#8713;&#8715;&#8719;&#8721;&#8722;&#8727;&#8730;&#8733;&#8734;&#8736;&#8743;&#8744;&#8745;&#8746;&#8747;&#8756;&#8764;&#8773;&#8776;&#8800;&#8801;&#8804;&#8805;&#8834;&#8835;&#8836;&#8838;&#8839;&#8853;&#8855;&#8869;&#8901;&#8968;&#8969;&#8970;&#8971;&#9001;&#9002;&#9674;&#9824;&#9827;&#9829;&#9830;';
+$str3 = 'a&#338;b&#339;c&#352;d&#353;e&#8364;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--
+&#161;&#162;&#163;&#164;&#165;&#166;&#167;&#168;&#169;&#170;&#171;&#172;&#173;&#174;&#175;&#176;&#177;&#178;&#179;&#180;&#181;&#182;&#183;&#184;&#185;&#186;&#187;&#188;&#189;&#190;&#191;&#192;&#193;&#194;&#195;&#196;&#197;&#198;&#199;&#200;&#201;&#202;&#203;&#204;&#205;&#206;&#207;&#208;&#209;&#210;&#211;&#212;&#213;&#214;&#215;&#216;&#217;&#218;&#219;&#220;&#221;&#222;&#223;&#224;&#225;&#226;&#227;&#228;&#229;&#230;&#231;&#232;&#233;&#234;&#235;&#236;&#237;&#238;&#239;&#240;&#241;&#242;&#243;&#244;&#245;&#246;&#247;&#248;&#249;&#250;&#251;&#252;&#253;&#254;&#255;
+&#402;&#913;&#914;&#915;&#916;&#917;&#918;&#919;&#920;&#921;&#922;&#923;&#924;&#925;&#926;&#927;&#928;&#929;&#931;&#932;&#933;&#934;&#935;&#936;&#937;&#945;&#946;&#947;&#948;&#949;&#950;&#951;&#952;&#953;&#954;&#955;&#956;&#957;&#958;&#959;&#960;&#961;&#962;&#963;&#964;&#965;&#966;&#967;&#968;&#969;&#977;&#978;&#982;&#8226;&#8230;&#8242;&#8243;&#8254;&#8260;&#8472;&#8465;&#8476;&#8482;&#8501;&#8592;&#8593;&#8594;&#8595;&#8596;&#8629;&#8656;&#8657;&#8658;&#8659;&#8660;&#8704;&#8706;&#8707;&#8709;&#8711;&#8712;&#8713;&#8715;&#8719;&#8721;&#8722;&#8727;&#8730;&#8733;&#8734;&#8736;&#8743;&#8744;&#8745;&#8746;&#8747;&#8756;&#8764;&#8773;&#8776;&#8800;&#8801;&#8804;&#8805;&#8834;&#8835;&#8836;&#8838;&#8839;&#8853;&#8855;&#8869;&#8901;&#8968;&#8969;&#8970;&#8971;&#9001;&#9002;&#9674;&#9824;&#9827;&#9829;&#9830;
+a&#338;b&#339;c&#352;d&#353;e&#8364;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
+};